ZGlmZiAtLWdpdCBhL0NsZWFuU3BlYy5tayBiL0NsZWFuU3BlYy5tawppbmRleCBiODRlMWI2Li44NDFhZDE2IDEwMDY0NAotLS0gYS9DbGVhblNwZWMubWsKKysrIGIvQ2xlYW5TcGVjLm1rCkBAIC00NCw2ICs0NCwxMCBAQAogIyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgZmluZCAkKE9VVF9ESVIpIC10eXBlIGYgLW5hbWUgIklHVGFsa1Nlc3Npb24qIiAtcHJpbnQwIHwgeGFyZ3MgLTAgcm0gLWYpCiAjJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChQUk9EVUNUX09VVCkvZGF0YS8qKQogCisjIFN3aXRjaGluZyB0byBqZW1hbGxvYyByZXF1aXJlcyBkZWxldGluZyB0aGVzZSBmaWxlcy4KKyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoUFJPRFVDVF9PVVQpL29iai9TVEFUSUNfTElCUkFSSUVTL2xpYmNfKikKKyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoUFJPRFVDVF9PVVQpL29iai9TSEFSRURfTElCUkFSSUVTL2xpYmNfKikKKwogIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICMgTkVXRVIgQ0xFQU4gU1RFUFMgTVVTVCBCRSBBVCBUSEUgRU5EIE9GIFRIRSBMSVNUCiAjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvSEFDS0lORy50eHQgYi9IQUNLSU5HLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2UxMzY4Ci0tLSAvZGV2L251bGwKKysrIGIvSEFDS0lORy50eHQKQEAgLTAsMCArMSwxNjIgQEAKK1dvcmtpbmcgb24gYmlvbmljCis9PT09PT09PT09PT09PT09PQorCitXaGF0IGFyZSB0aGUgYmlnIHBpZWNlcyBvZiBiaW9uaWM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xpYmMvIC0tLSBsaWJjLnNvLCBsaWJjLmEKKyAgVGhlIEMgbGlicmFyeS4gU3R1ZmYgbGlrZSBmb3BlbigzKSBhbmQga2lsbCgyKS4KK2xpYm0vIC0tLSBsaWJtLnNvLCBsaWJtLmEKKyAgVGhlIG1hdGggbGlicmFyeS4gVHJhZGl0aW9uYWxseSBVbml4IHN5c3RlbXMga2VwdCBzdHVmZiBsaWtlIHNpbigzKSBhbmQKKyAgY29zKDMpIGluIGEgc2VwYXJhdGUgbGlicmFyeSB0byBzYXZlIHNwYWNlIGluIHRoZSBkYXlzIGJlZm9yZSBzaGFyZWQKKyAgbGlicmFyaWVzLgorbGliZGwvIC0tLSBsaWJkbC5zbworICBUaGUgZHluYW1pYyBsaW5rZXIgaW50ZXJmYWNlIGxpYnJhcnkuIFRoaXMgaXMgYWN0dWFsbHkganVzdCBhIGJ1bmNoIG9mCisgIHN0dWJzIHRoYXQgdGhlIGR5bmFtaWMgbGlua2VyIHJlcGxhY2VzIHdpdGggcG9pbnRlcnMgdG8gaXRzIG93bgorICBpbXBsZW1lbnRhdGlvbiBhdCBydW50aW1lLiBUaGlzIGlzIHdoZXJlIHN0dWZmIGxpa2UgZGxvcGVuKDMpIGxpdmVzLgorbGlic3RkYysrLyAtLS0gbGlic3RkYysrLnNvCisgIFRoZSBDKysgQUJJIHN1cHBvcnQgZnVuY3Rpb25zLiBUaGUgQysrIGNvbXBpbGVyIGRvZXNuJ3Qga25vdyBob3cgdG8KKyAgaW1wbGVtZW50IHRocmVhZC1zYWZlIHN0YXRpYyBpbml0aWFsaXphdGlvbiBhbmQgdGhlIGxpa2UsIHNvIGl0IGp1c3QgY2FsbHMKKyAgZnVuY3Rpb25zIHRoYXQgYXJlIHN1cHBsaWVkIGJ5IHRoZSBzeXN0ZW0uIFN0dWZmIGxpa2UgX19jeGFfZ3VhcmRfYWNxdWlyZQorICBhbmQgX19jeGFfcHVyZV92aXJ0dWFsIGxpdmUgaGVyZS4KKworbGlua2VyLyAtLS0gL3N5c3RlbS9iaW4vbGlua2VyIGFuZCAvc3lzdGVtL2Jpbi9saW5rZXI2NAorICBUaGUgZHluYW1pYyBsaW5rZXIuIFdoZW4geW91IHJ1biBhIGR5bmFtaWNhbGx5LWxpbmtlZCBleGVjdXRhYmxlLCBpdHMgRUxGCisgIGZpbGUgaGFzIGEgRFRfSU5URVJQIGVudHJ5IHRoYXQgc2F5cyAidXNlIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSB0byBzdGFydCBtZSIuCisgIE9uIEFuZHJvaWQsIHRoYXQncyBlaXRoZXIgbGlua2VyIG9yIGxpbmtlcjY0IChkZXBlbmRpbmcgb24gd2hldGhlciBpdCdzIGEKKyAgMzItYml0IG9yIDY0LWJpdCBleGVjdXRhYmxlKS4gSXQncyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyB0aGUgRUxGIGV4ZWN1dGFibGUKKyAgaW50byBtZW1vcnkgYW5kIHJlc29sdmluZyByZWZlcmVuY2VzIHRvIHN5bWJvbHMgKHNvIHRoYXQgd2hlbiB5b3VyIGNvZGUgdHJpZXMKKyAgdG8ganVtcCB0byBmb3BlbigzKSwgc2F5LCBpdCBsYW5kcyBpbiB0aGUgcmlnaHQgcGxhY2UpLgorCit0ZXN0cy8gLS0tIHVuaXQgdGVzdHMKKyAgVGhlIHRlc3RzLyBkaXJlY3RvcnkgY29udGFpbnMgdW5pdCB0ZXN0cy4gUm91Z2hseSBhcnJhbmdlZCBhcyBvbmUgZmlsZSBwZXIKKyAgcHVibGljbHktZXhwb3J0ZWQgaGVhZGVyIGZpbGUuCitiZW5jaG1hcmtzLyAtLS0gYmVuY2htYXJrcworICBUaGUgYmVuY2htYXJrcy8gZGlyZWN0b3J5IGNvbnRhaW5zIGJlbmNobWFya3MuCisKKworV2hhdCdzIGluIGxpYmMvPworLS0tLS0tLS0tLS0tLS0tLQorCitsaWJjLworICBhcmNoLWFybS8KKyAgYXJjaC1hcm02NC8KKyAgYXJjaC1jb21tb24vCisgIGFyY2gtbWlwcy8KKyAgYXJjaC1taXBzNjQvCisgIGFyY2gteDg2LworICBhcmNoLXg4Nl82NC8KKyAgICAjIEVhY2ggYXJjaGl0ZWN0dXJlIGhhcyBpdHMgb3duIHN1YmRpcmVjdG9yeSBmb3Igc3R1ZmYgdGhhdCBpc24ndCBzaGFyZWQKKyAgICAjIGJlY2F1c2UgaXQncyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIFRoZXJlIHdpbGwgYmUgYSAubWsgZmlsZSBpbiBoZXJlIHRoYXQKKyAgICAjIGRyYWdzIGluIGFsbCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZpbGVzLgorICAgIGJpb25pYy8KKyAgICAgICMgRXZlcnkgYXJjaGl0ZWN0dXJlIG5lZWRzIGEgaGFuZGZ1bCBvZiBtYWNoaW5lLXNwZWNpZmljIGFzc2VtYmxlciBmaWxlcy4KKyAgICAgICMgVGhleSBsaXZlIGhlcmUuCisgICAgaW5jbHVkZS8KKyAgICAgIG1hY2hpbmUvCisgICAgICAgICMgVGhlIG1ham9yaXR5IG9mIGhlYWRlciBmaWxlcyBhcmUgYWN0dWFsbHkgaW4gbGliYy9pbmNsdWRlLywgYnV0IG1hbnkKKyAgICAgICAgIyBvZiB0aGVtIHB1bGwgaW4gYSA8bWFjaGluZS9zb21ldGhpbmcuaD4gZm9yIHRoaW5ncyBsaWtlIGxpbWl0cywKKyAgICAgICAgIyBlbmRpYW5uZXNzLCBhbmQgaG93IGZsb2F0aW5nIHBvaW50IG51bWJlcnMgYXJlIHJlcHJlc2VudGVkLiBUaG9zZQorICAgICAgICAjIGhlYWRlcnMgbGl2ZSBoZXJlLgorICAgIHN0cmluZy8KKyAgICAgICMgTW9zdCBhcmNoaXRlY3R1cmVzIGhhdmUgYSBoYW5kZnVsIG9mIG9wdGlvbmFsIGFzc2VtYmxlciBmaWxlcworICAgICAgIyBpbXBsZW1lbnRpbmcgb3B0aW1pemVkIHZlcnNpb25zIG9mIHZhcmlvdXMgcm91dGluZXMuIFRoZSA8c3RyaW5nLmg+CisgICAgICAjIGZ1bmN0aW9ucyBhcmUgcGFydGljdWxhciBmYXZvcml0ZXMuCisgICAgc3lzY2FsbHMvCisgICAgICAjIFRoZSBzeXNjYWxscyBkaXJlY3RvcmllcyBjb250YWluIHNjcmlwdC1nZW5lcmF0ZWQgYXNzZW1ibGVyIGZpbGVzLgorICAgICAgIyBTZWUgJ0FkZGluZyBzeXN0ZW0gY2FsbHMnIGxhdGVyLgorCisgIGluY2x1ZGUvCisgICAgIyBUaGUgcHVibGljIGhlYWRlciBmaWxlcyBvbiBldmVyeW9uZSdzIGluY2x1ZGUgcGF0aC4gVGhlc2UgYXJlIGEgbWl4dHVyZSBvZgorICAgICMgZmlsZXMgd3JpdHRlbiBieSB1cyBhbmQgZmlsZXMgdGFrZW4gZnJvbSBCU0QuCisKKyAga2VybmVsLworICAgICMgVGhlIGtlcm5lbCB1YXBpIGhlYWRlciBmaWxlcy4gVGhlc2UgYXJlIHNjcnViYmVkIGNvcGllcyBvZiB0aGUgb3JpZ2luYWxzCisgICAgIyBpbiBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy8uIFRoZXNlIGZpbGVzIG11c3Qgbm90IGJlIGVkaXRlZCBkaXJlY3RseS4gVGhlCisgICAgIyBnZW5lcmF0ZV91YXBpX2hlYWRlcnMuc2ggc2NyaXB0IHNob3VsZCBiZSB1c2VkIHRvIGdvIGZyb20gYSBrZXJuZWwgdHJlZSB0bworICAgICMgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvIC0tLSB0aGlzIHRha2VzIGNhcmUgb2YgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYworICAgICMgZGV0YWlscy4gVGhlIHVwZGF0ZV9hbGwucHkgc2NyaXB0IHNob3VsZCBiZSB1c2VkIHRvIHJlZ2VuZXJhdGUgYmlvbmljJ3MKKyAgICAjIHNjcnViYmVkIGhlYWRlcnMgZnJvbSBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy8uCisKKyAgcHJpdmF0ZS8KKyAgICAjIFRoZXNlIGFyZSBwcml2YXRlIGhlYWRlciBmaWxlcyBtZWFudCBmb3IgdXNlIHdpdGhpbiBiaW9uaWMgaXRzZWxmLgorCisgIGRucy8KKyAgICAjIENvbnRhaW5zIHRoZSBETlMgcmVzb2x2ZXIgKG9yaWdpbmF0ZXMgZnJvbSBOZXRCU0QgY29kZSkuCisKKyAgdXBzdHJlYW0tZGxtYWxsb2MvCisgIHVwc3RyZWFtLWZyZWVic2QvCisgIHVwc3RyZWFtLW5ldGJzZC8KKyAgdXBzdHJlYW0tb3BlbmJzZC8KKyAgICAjIFRoZXNlIGRpcmVjdG9yaWVzIGNvbnRhaW4gdW5tb2xlc3RlZCB1cHN0cmVhbSBzb3VyY2UuIEFueSB0aW1lIHdlIGNhbgorICAgICMganVzdCB1c2UgYSBCU0QgaW1wbGVtZW50YXRpb24gb2Ygc29tZXRoaW5nIHVubW9kaWZpZWQsIHdlIHNob3VsZC4KKyAgICAjIFRoZSBzdHJ1Y3R1cmUgdW5kZXIgdGhlc2UgZGlyZWN0b3JpZXMgbWltaWNzIHRoZSB1cHN0cmVhbSB0cmVlLAorICAgICMgYnV0IHRoZXJlJ3MgYWxzby4uLgorICAgIGFuZHJvaWQvCisgICAgICBpbmNsdWRlLworICAgICAgICAjIFRoaXMgaXMgd2hlcmUgd2Uga2VlcCB0aGUgaGFja3MgbmVjZXNzYXJ5IHRvIGJ1aWxkIEJTRCBzb3VyY2UKKyAgICAgICAgIyBpbiBvdXIgd29ybGQuIFRoZSAqLWNvbXBhdC5oIGZpbGVzIGFyZSBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkCisgICAgICAgICMgdXNpbmcgLWluY2x1ZGUsIGJ1dCB3ZSBhbHNvIHByb3ZpZGUgZXF1aXZhbGVudHMgZm9yIG1pc3NpbmcKKyAgICAgICAgIyBoZWFkZXIvc291cmNlIGZpbGVzIG5lZWRlZCBieSB0aGUgQlNEIGltcGxlbWVudGF0aW9uLgorCisgIGJpb25pYy8KKyAgICAjIFRoaXMgaXMgdGhlIGJpZ2dlc3QgbWVzcy4gVGhlIEMrKyBmaWxlcyBhcmUgZmlsZXMgd2Ugb3duLCB0eXBpY2FsbHkKKyAgICAjIGJlY2F1c2UgdGhlIExpbnV4IGtlcm5lbCBpbnRlcmZhY2UgaXMgc3VmZmljaWVudGx5IGRpZmZlcmVudCB0aGF0IHdlCisgICAgIyBjYW4ndCB1c2UgYW55IG9mIHRoZSBCU0QgaW1wbGVtZW50YXRpb25zLiBUaGUgQyBmaWxlcyBhcmUgdXN1YWxseQorICAgICMgbGVnYWN5IG1lc3MgdGhhdCBuZWVkcyB0byBiZSBzb3J0ZWQgb3V0LCBlaXRoZXIgYnkgcmVwbGFjaW5nIGl0IHdpdGgKKyAgICAjIGN1cnJlbnQgdXBzdHJlYW0gc291cmNlIGluIG9uZSBvZiB0aGUgdXBzdHJlYW0gZGlyZWN0b3JpZXMgb3IgYnkKKyAgICAjIHN3aXRjaGluZyB0aGUgZmlsZSB0byBDKysgYW5kIGNsZWFuaW5nIGl0IHVwLgorCisgIHN0ZGlvLworICAgICMgVGhlc2UgYXJlIGxlZ2FjeSBmaWxlcyBvZiBkdWJpb3VzIHByb3ZlbmFuY2UuIFdlJ3JlIHdvcmtpbmcgdG8gY2xlYW4KKyAgICAjIHRoaXMgbWVzcyB1cCwgYW5kIHRoaXMgZGlyZWN0b3J5IHNob3VsZCBkaXNhcHBlYXIuCisKKyAgdG9vbHMvCisgICAgIyBWYXJpb3VzIHRvb2xzIHVzZWQgdG8gbWFpbnRhaW4gYmlvbmljLgorCisgIHR6Y29kZS8KKyAgICAjIEEgbW9kaWZpZWQgc3VwZXJzZXQgb2YgdGhlIElBTkEgdHpjb2RlLiBNb3N0IG9mIHRoZSBtb2RpZmljYXRpb25zIHJlbGF0ZQorICAgICMgdG8gQW5kcm9pZCdzIHVzZSBvZiBhIHNpbmdsZSBmaWxlICh3aXRoIGNvcnJlc3BvbmRpbmcgaW5kZXgpIHRvIGNvbnRhaW4KKyAgICAjIHRpbWUgem9uZSBkYXRhLgorICB6b25laW5mby8KKyAgICAjIEFuZHJvaWQtZm9ybWF0IHRpbWUgem9uZSBkYXRhLgorICAgICMgU2VlICdVcGRhdGluZyB0emRhdGEnIGxhdGVyLgorCisKK0FkZGluZyBzeXN0ZW0gY2FsbHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkaW5nIGEgc3lzdGVtIGNhbGwgdXN1YWxseSBpbnZvbHZlczoKKworICAxLiBBZGQgZW50cmllcyB0byBTWVNDQUxMUy5UWFQuCisgICAgIFNlZSBTWVNDQUxMUy5UWFQgaXRzZWxmIGZvciBkb2N1bWVudGF0aW9uIG9uIHRoZSBmb3JtYXQuCisgIDIuIFJ1biB0aGUgZ2Vuc3lzY2FsbHMucHkgc2NyaXB0LgorICAzLiBBZGQgY29uc3RhbnRzIChhbmQgcGVyaGFwcyB0eXBlcykgdG8gdGhlIGFwcHJvcHJpYXRlIGhlYWRlciBmaWxlLgorICAgICBOb3RlIHRoYXQgeW91IHNob3VsZCBjaGVjayB0byBzZWUgd2hldGhlciB0aGUgY29uc3RhbnRzIGFyZSBhbHJlYWR5IGluCisgICAgIGtlcm5lbCB1YXBpIGhlYWRlciBmaWxlcywgaW4gd2hpY2ggY2FzZSB5b3UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0CisgICAgIHRoZSBhcHByb3ByaWF0ZSBQT1NJWCBoZWFkZXIgZmlsZSBpbiBsaWJjL2luY2x1ZGUvIGluY2x1ZGVzIHRoZQorICAgICByZWxldmFudCBmaWxlIG9yIGZpbGVzLgorICA0LiBBZGQgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRvIHRoZSBhcHByb3ByaWF0ZSBoZWFkZXIgZmlsZS4KKyAgNS4gQWRkIGF0IGxlYXN0IGJhc2ljIHRlc3RzLiBFdmVuIGEgdGVzdCB0aGF0IGRlbGliZXJhdGVseSBzdXBwbGllcworICAgICBhbiBpbnZhbGlkIGFyZ3VtZW50IGhlbHBzIGNoZWNrIHRoYXQgd2UncmUgZ2VuZXJhdGluZyB0aGUgcmlnaHQgc3ltYm9sCisgICAgIGFuZCBoYXZlIHRoZSByaWdodCBkZWNsYXJhdGlvbiBpbiB0aGUgaGVhZGVyIGZpbGUuIChBbmQgc3RyYWNlKDEpIGNhbgorICAgICBjb25maXJtIHRoYXQgdGhlIGNvcnJlY3Qgc3lzdGVtIGNhbGwgaXMgYmVpbmcgbWFkZS4pCisKKworVXBkYXRpbmcga2VybmVsIGhlYWRlciBmaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyBtZW50aW9uZWQgYWJvdmUsIHRoaXMgaXMgY3VycmVudGx5IGEgdHdvLXN0ZXAgcHJvY2VzczoKKworICAxLiBVc2UgZ2VuZXJhdGVfdWFwaV9oZWFkZXJzLnNoIHRvIGdvIGZyb20gYSBMaW51eCBzb3VyY2UgdHJlZSB0byBhcHByb3ByaWF0ZQorICAgICBjb250ZW50cyBmb3IgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvLgorICAyLiBSdW4gdXBkYXRlX2FsbC5weSB0byBzY3J1YiB0aG9zZSBoZWFkZXJzIGFuZCBpbXBvcnQgdGhlbSBpbnRvIGJpb25pYy4KKworCitVcGRhdGluZyB0emRhdGEKKy0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIGZ1bGx5IGF1dG9tYXRlZDoKKworICAxLiBSdW4gdXBkYXRlLXR6ZGF0YS5weS4KKwpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy9BbmRyb2lkLm1rIGIvYmVuY2htYXJrcy9BbmRyb2lkLm1rCmluZGV4IGY2NGMxMDguLjRkN2FkOTYgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3MvQW5kcm9pZC5taworKysgYi9iZW5jaG1hcmtzL0FuZHJvaWQubWsKQEAgLTI0LDcgKzI0LDcgQEAKIAogYmVuY2htYXJrX2NfZmxhZ3MgPSBcCiAgICAgLU8yIFwKLSAgICAtV2FsbCAtV2V4dHJhIFwKKyAgICAtV2FsbCAtV2V4dHJhIC1XdW51c2VkIFwKICAgICAtV2Vycm9yIFwKICAgICAtZm5vLWJ1aWx0aW4gXAogICAgIC1zdGQ9Z251KysxMSBcCkBAIC0zMywxMyArMzMsMjAgQEAKICAgICBiZW5jaG1hcmtfbWFpbi5jcHAgXAogICAgIG1hdGhfYmVuY2htYXJrLmNwcCBcCiAgICAgcHJvcGVydHlfYmVuY2htYXJrLmNwcCBcCisgICAgcHRocmVhZF9iZW5jaG1hcmsuY3BwIFwKKyAgICBzZW1hcGhvcmVfYmVuY2htYXJrLmNwcCBcCisgICAgc3RkaW9fYmVuY2htYXJrLmNwcCBcCiAgICAgc3RyaW5nX2JlbmNobWFyay5jcHAgXAogICAgIHRpbWVfYmVuY2htYXJrLmNwcCBcCisgICAgdW5pc3RkX2JlbmNobWFyay5jcHAgXAogCiAjIEJ1aWxkIGJlbmNobWFya3MgZm9yIHRoZSBkZXZpY2UgKHdpdGggYmlvbmljJ3MgLnNvKS4gUnVuIHdpdGg6CiAjICAgYWRiIHNoZWxsIGJpb25pYy1iZW5jaG1hcmtzCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIExPQ0FMX01PRFVMRSA6PSBiaW9uaWMtYmVuY2htYXJrcworTE9DQUxfTU9EVUxFX1NURU1fMzIgOj0gYmlvbmljLWJlbmNobWFya3MzMgorTE9DQUxfTU9EVUxFX1NURU1fNjQgOj0gYmlvbmljLWJlbmNobWFya3M2NAorTE9DQUxfTVVMVElMSUIgOj0gYm90aAogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCiBMT0NBTF9DRkxBR1MgKz0gJChiZW5jaG1hcmtfY19mbGFncykKIExPQ0FMX0NfSU5DTFVERVMgKz0gZXh0ZXJuYWwvc3RscG9ydC9zdGxwb3J0IGJpb25pYy8gYmlvbmljL2xpYnN0ZGMrKy9pbmNsdWRlCkBAIC00Nyw0ICs1NCwyNyBAQAogTE9DQUxfU1JDX0ZJTEVTIDo9ICQoYmVuY2htYXJrX3NyY19maWxlcykKIGluY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQogCitpZmVxICgkKEhPU1RfT1MpLSQoSE9TVF9BUkNIKSwkKGZpbHRlciAkKEhPU1RfT1MpLSQoSE9TVF9BUkNIKSxsaW51eC14ODYgbGludXgteDg2XzY0KSkKK2lmZXEgKCQoVEFSR0VUX0FSQ0gpLHg4NikKK0xJTktFUiA9IGxpbmtlcgorTkFUSVZFX1NVRkZJWD0zMgorZWxzZQorTElOS0VSID0gbGlua2VyNjQKK05BVElWRV9TVUZGSVg9NjQKK2VuZGlmCisKK2Jpb25pYy1iZW5jaG1hcmtzLXJ1bi1vbi1ob3N0OiBiaW9uaWMtYmVuY2htYXJrcyAkKFRBUkdFVF9PVVRfRVhFQ1VUQUJMRVMpLyQoTElOS0VSKSAkKFRBUkdFVF9PVVRfRVhFQ1VUQUJMRVMpL3NoCisJaWYgWyAhIC1kIC9zeXN0ZW0gLW8gISAtZCAvc3lzdGVtL2JpbiBdOyB0aGVuIFwKKwkgIGVjaG8gIkF0dGVtcHRpbmcgdG8gY3JlYXRlIC9zeXN0ZW0vYmluIjsgXAorCSAgc3VkbyBta2RpciAtcCAtbSAwNzc3IC9zeXN0ZW0vYmluOyBcCisJZmkKKwlta2RpciAtcCAkKFRBUkdFVF9PVVRfREFUQSkvbG9jYWwvdG1wCisJY3AgJChUQVJHRVRfT1VUX0VYRUNVVEFCTEVTKS8kKExJTktFUikgL3N5c3RlbS9iaW4KKwljcCAkKFRBUkdFVF9PVVRfRVhFQ1VUQUJMRVMpL3NoIC9zeXN0ZW0vYmluCisJQU5EUk9JRF9EQVRBPSQoVEFSR0VUX09VVF9EQVRBKSBcCisJQU5EUk9JRF9ST09UPSQoVEFSR0VUX09VVCkgXAorCUxEX0xJQlJBUllfUEFUSD0kKFRBUkdFVF9PVVRfU0hBUkVEX0xJQlJBUklFUykgXAorCQkkKFRBUkdFVF9PVVRfRVhFQ1VUQUJMRVMpL2Jpb25pYy1iZW5jaG1hcmtzJChOQVRJVkVfU1VGRklYKSAkKEJJT05JQ19CRU5DSE1BUktTX0ZMQUdTKQorZW5kaWYgIyBsaW51eC14ODYKKwogZW5kaWYgIyAhQlVJTERfVElOWV9BTkRST0lECmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL2JlbmNobWFya19tYWluLmNwcCBiL2JlbmNobWFya3MvYmVuY2htYXJrX21haW4uY3BwCmluZGV4IGQ4YjhlNTguLmQ2MDY3MGIgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3MvYmVuY2htYXJrX21haW4uY3BwCisrKyBiL2JlbmNobWFya3MvYmVuY2htYXJrX21haW4uY3BwCkBAIC0yNSwxMyArMjUsMTQgQEAKIAogI2luY2x1ZGUgPGludHR5cGVzLmg+CiAKLXN0YXRpYyBpbnQ2NF90IGdCeXRlc1Byb2Nlc3NlZDsKLXN0YXRpYyBpbnQ2NF90IGdCZW5jaG1hcmtUb3RhbFRpbWVOczsKLXN0YXRpYyBpbnQ2NF90IGdCZW5jaG1hcmtTdGFydFRpbWVOczsKK3N0YXRpYyBpbnQ2NF90IGdfYnl0ZXNfcHJvY2Vzc2VkOworc3RhdGljIGludDY0X3QgZ19iZW5jaG1hcmtfdG90YWxfdGltZV9uczsKK3N0YXRpYyBpbnQ2NF90IGdfYmVuY2htYXJrX3N0YXJ0X3RpbWVfbnM7CiAKIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIDo6dGVzdGluZzo6QmVuY2htYXJrKj4gQmVuY2htYXJrTWFwOwogdHlwZWRlZiBCZW5jaG1hcmtNYXA6Oml0ZXJhdG9yIEJlbmNobWFya01hcEl0Owotc3RhdGljIEJlbmNobWFya01hcCBnQmVuY2htYXJrczsKK3N0YXRpYyBCZW5jaG1hcmtNYXAgZ19iZW5jaG1hcmtzOworc3RhdGljIGludCBnX25hbWVfY29sdW1uX3dpZHRoID0gMjA7CiAKIHN0YXRpYyBpbnQgUm91bmQoaW50IG4pIHsKICAgaW50IGJhc2UgPSAxOwpAQCAtOTYsNyArOTcsNyBAQAogICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgfQogCi0gIGdCZW5jaG1hcmtzLmluc2VydChzdGQ6Om1ha2VfcGFpcihuYW1lLCB0aGlzKSk7CisgIGdfYmVuY2htYXJrcy5pbnNlcnQoc3RkOjptYWtlX3BhaXIobmFtZSwgdGhpcykpOwogfQogCiB2b2lkIEJlbmNobWFyazo6UnVuKCkgewpAQCAtMTE0LDE2ICsxMTUsMTYgQEAKIH0KIAogdm9pZCBCZW5jaG1hcms6OlJ1blJlcGVhdGVkbHlXaXRoQXJnKGludCBpdGVyYXRpb25zLCBpbnQgYXJnKSB7Ci0gIGdCeXRlc1Byb2Nlc3NlZCA9IDA7Ci0gIGdCZW5jaG1hcmtUb3RhbFRpbWVOcyA9IDA7Ci0gIGdCZW5jaG1hcmtTdGFydFRpbWVOcyA9IE5hbm9UaW1lKCk7CisgIGdfYnl0ZXNfcHJvY2Vzc2VkID0gMDsKKyAgZ19iZW5jaG1hcmtfdG90YWxfdGltZV9ucyA9IDA7CisgIGdfYmVuY2htYXJrX3N0YXJ0X3RpbWVfbnMgPSBOYW5vVGltZSgpOwogICBpZiAoZm5fICE9IE5VTEwpIHsKICAgICBmbl8oaXRlcmF0aW9ucyk7CiAgIH0gZWxzZSB7CiAgICAgZm5fcmFuZ2VfKGl0ZXJhdGlvbnMsIGFyZyk7CiAgIH0KLSAgaWYgKGdCZW5jaG1hcmtTdGFydFRpbWVOcyAhPSAwKSB7Ci0gICAgZ0JlbmNobWFya1RvdGFsVGltZU5zICs9IE5hbm9UaW1lKCkgLSBnQmVuY2htYXJrU3RhcnRUaW1lTnM7CisgIGlmIChnX2JlbmNobWFya19zdGFydF90aW1lX25zICE9IDApIHsKKyAgICBnX2JlbmNobWFya190b3RhbF90aW1lX25zICs9IE5hbm9UaW1lKCkgLSBnX2JlbmNobWFya19zdGFydF90aW1lX25zOwogICB9CiB9CiAKQEAgLTEzMSwxMiArMTMyLDEyIEBACiAgIC8vIHJ1biBvbmNlIGluIGNhc2UgaXQncyBleHBlbnNpdmUKICAgaW50IGl0ZXJhdGlvbnMgPSAxOwogICBSdW5SZXBlYXRlZGx5V2l0aEFyZyhpdGVyYXRpb25zLCBhcmcpOwotICB3aGlsZSAoZ0JlbmNobWFya1RvdGFsVGltZU5zIDwgMWU5ICYmIGl0ZXJhdGlvbnMgPCAxZTkpIHsKKyAgd2hpbGUgKGdfYmVuY2htYXJrX3RvdGFsX3RpbWVfbnMgPCAxZTkgJiYgaXRlcmF0aW9ucyA8IDFlOSkgewogICAgIGludCBsYXN0ID0gaXRlcmF0aW9uczsKLSAgICBpZiAoZ0JlbmNobWFya1RvdGFsVGltZU5zL2l0ZXJhdGlvbnMgPT0gMCkgeworICAgIGlmIChnX2JlbmNobWFya190b3RhbF90aW1lX25zL2l0ZXJhdGlvbnMgPT0gMCkgewogICAgICAgaXRlcmF0aW9ucyA9IDFlOTsKICAgICB9IGVsc2UgewotICAgICAgaXRlcmF0aW9ucyA9IDFlOSAvIChnQmVuY2htYXJrVG90YWxUaW1lTnMvaXRlcmF0aW9ucyk7CisgICAgICBpdGVyYXRpb25zID0gMWU5IC8gKGdfYmVuY2htYXJrX3RvdGFsX3RpbWVfbnMvaXRlcmF0aW9ucyk7CiAgICAgfQogICAgIGl0ZXJhdGlvbnMgPSBzdGQ6Om1heChsYXN0ICsgMSwgc3RkOjptaW4oaXRlcmF0aW9ucyArIGl0ZXJhdGlvbnMvMiwgMTAwKmxhc3QpKTsKICAgICBpdGVyYXRpb25zID0gUm91bmQoaXRlcmF0aW9ucyk7CkBAIC0xNDUsOSArMTQ2LDkgQEAKIAogICBjaGFyIHRocm91Z2hwdXRbMTAwXTsKICAgdGhyb3VnaHB1dFswXSA9ICdcMCc7Ci0gIGlmIChnQmVuY2htYXJrVG90YWxUaW1lTnMgPiAwICYmIGdCeXRlc1Byb2Nlc3NlZCA+IDApIHsKLSAgICBkb3VibGUgbWliX3Byb2Nlc3NlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oZ0J5dGVzUHJvY2Vzc2VkKS8xZTY7Ci0gICAgZG91YmxlIHNlY29uZHMgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGdCZW5jaG1hcmtUb3RhbFRpbWVOcykvMWU5OworICBpZiAoZ19iZW5jaG1hcmtfdG90YWxfdGltZV9ucyA+IDAgJiYgZ19ieXRlc19wcm9jZXNzZWQgPiAwKSB7CisgICAgZG91YmxlIG1pYl9wcm9jZXNzZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGdfYnl0ZXNfcHJvY2Vzc2VkKS8xZTY7CisgICAgZG91YmxlIHNlY29uZHMgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGdfYmVuY2htYXJrX3RvdGFsX3RpbWVfbnMpLzFlOTsKICAgICBzbnByaW50Zih0aHJvdWdocHV0LCBzaXplb2YodGhyb3VnaHB1dCksICIgJTguMmYgTWlCL3MiLCBtaWJfcHJvY2Vzc2VkL3NlY29uZHMpOwogICB9CiAKQEAgLTE2NCw0MiArMTY1LDQ3IEBACiAgICAgc25wcmludGYoZnVsbF9uYW1lLCBzaXplb2YoZnVsbF9uYW1lKSwgIiVzIiwgbmFtZV8pOwogICB9CiAKLSAgcHJpbnRmKCIlLTIwcyAlMTBkICUxMCIgUFJJZDY0ICIlc1xuIiwgZnVsbF9uYW1lLAotICAgICAgICAgaXRlcmF0aW9ucywgZ0JlbmNobWFya1RvdGFsVGltZU5zL2l0ZXJhdGlvbnMsIHRocm91Z2hwdXQpOworICBwcmludGYoIiUtKnMgJTEwZCAlMTAiIFBSSWQ2NCAiJXNcbiIsIGdfbmFtZV9jb2x1bW5fd2lkdGgsIGZ1bGxfbmFtZSwKKyAgICAgICAgIGl0ZXJhdGlvbnMsIGdfYmVuY2htYXJrX3RvdGFsX3RpbWVfbnMvaXRlcmF0aW9ucywgdGhyb3VnaHB1dCk7CiAgIGZmbHVzaChzdGRvdXQpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgdGVzdGluZwogCiB2b2lkIFNldEJlbmNobWFya0J5dGVzUHJvY2Vzc2VkKGludDY0X3QgeCkgewotICBnQnl0ZXNQcm9jZXNzZWQgPSB4OworICBnX2J5dGVzX3Byb2Nlc3NlZCA9IHg7CiB9CiAKIHZvaWQgU3RvcEJlbmNobWFya1RpbWluZygpIHsKLSAgaWYgKGdCZW5jaG1hcmtTdGFydFRpbWVOcyAhPSAwKSB7Ci0gICAgZ0JlbmNobWFya1RvdGFsVGltZU5zICs9IE5hbm9UaW1lKCkgLSBnQmVuY2htYXJrU3RhcnRUaW1lTnM7CisgIGlmIChnX2JlbmNobWFya19zdGFydF90aW1lX25zICE9IDApIHsKKyAgICBnX2JlbmNobWFya190b3RhbF90aW1lX25zICs9IE5hbm9UaW1lKCkgLSBnX2JlbmNobWFya19zdGFydF90aW1lX25zOwogICB9Ci0gIGdCZW5jaG1hcmtTdGFydFRpbWVOcyA9IDA7CisgIGdfYmVuY2htYXJrX3N0YXJ0X3RpbWVfbnMgPSAwOwogfQogCiB2b2lkIFN0YXJ0QmVuY2htYXJrVGltaW5nKCkgewotICBpZiAoZ0JlbmNobWFya1N0YXJ0VGltZU5zID09IDApIHsKLSAgICBnQmVuY2htYXJrU3RhcnRUaW1lTnMgPSBOYW5vVGltZSgpOworICBpZiAoZ19iZW5jaG1hcmtfc3RhcnRfdGltZV9ucyA9PSAwKSB7CisgICAgZ19iZW5jaG1hcmtfc3RhcnRfdGltZV9ucyA9IE5hbm9UaW1lKCk7CiAgIH0KIH0KIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkgewotICBpZiAoZ0JlbmNobWFya3MuZW1wdHkoKSkgeworICBpZiAoZ19iZW5jaG1hcmtzLmVtcHR5KCkpIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIGJlbmNobWFya3MgcmVnaXN0ZXJlZCFcbiIpOwogICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgfQogCisgIGZvciAoQmVuY2htYXJrTWFwSXQgaXQgPSBnX2JlbmNobWFya3MuYmVnaW4oKTsgaXQgIT0gZ19iZW5jaG1hcmtzLmVuZCgpOyArK2l0KSB7CisgICAgaW50IG5hbWVfd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KHN0cmxlbihpdC0+c2Vjb25kLT5OYW1lKCkpKTsKKyAgICBnX25hbWVfY29sdW1uX3dpZHRoID0gc3RkOjptYXgoZ19uYW1lX2NvbHVtbl93aWR0aCwgbmFtZV93aWR0aCk7CisgIH0KKwogICBib29sIG5lZWRfaGVhZGVyID0gdHJ1ZTsKLSAgZm9yIChCZW5jaG1hcmtNYXBJdCBpdCA9IGdCZW5jaG1hcmtzLmJlZ2luKCk7IGl0ICE9IGdCZW5jaG1hcmtzLmVuZCgpOyArK2l0KSB7CisgIGZvciAoQmVuY2htYXJrTWFwSXQgaXQgPSBnX2JlbmNobWFya3MuYmVnaW4oKTsgaXQgIT0gZ19iZW5jaG1hcmtzLmVuZCgpOyArK2l0KSB7CiAgICAgOjp0ZXN0aW5nOjpCZW5jaG1hcmsqIGIgPSBpdC0+c2Vjb25kOwogICAgIGlmIChiLT5TaG91bGRSdW4oYXJnYywgYXJndikpIHsKICAgICAgIGlmIChuZWVkX2hlYWRlcikgewotICAgICAgICBwcmludGYoIiUtMjBzICUxMHMgJTEwc1xuIiwgIiIsICJpdGVyYXRpb25zIiwgIm5zL29wIik7CisgICAgICAgIHByaW50ZigiJS0qcyAlMTBzICUxMHNcbiIsIGdfbmFtZV9jb2x1bW5fd2lkdGgsICIiLCAiaXRlcmF0aW9ucyIsICJucy9vcCIpOwogICAgICAgICBmZmx1c2goc3Rkb3V0KTsKICAgICAgICAgbmVlZF9oZWFkZXIgPSBmYWxzZTsKICAgICAgIH0KQEAgLTIxMCw3ICsyMTYsNyBAQAogICBpZiAobmVlZF9oZWFkZXIpIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIG1hdGNoaW5nIGJlbmNobWFya3MhXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIkF2YWlsYWJsZSBiZW5jaG1hcmtzOlxuIik7Ci0gICAgZm9yIChCZW5jaG1hcmtNYXBJdCBpdCA9IGdCZW5jaG1hcmtzLmJlZ2luKCk7IGl0ICE9IGdCZW5jaG1hcmtzLmVuZCgpOyArK2l0KSB7CisgICAgZm9yIChCZW5jaG1hcmtNYXBJdCBpdCA9IGdfYmVuY2htYXJrcy5iZWdpbigpOyBpdCAhPSBnX2JlbmNobWFya3MuZW5kKCk7ICsraXQpIHsKICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAlc1xuIiwgaXQtPnNlY29uZC0+TmFtZSgpKTsKICAgICB9CiAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy9tYXRoX2JlbmNobWFyay5jcHAgYi9iZW5jaG1hcmtzL21hdGhfYmVuY2htYXJrLmNwcAppbmRleCBhOGMxY2ZhLi5hOTc0OGNkIDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL21hdGhfYmVuY2htYXJrLmNwcAorKysgYi9iZW5jaG1hcmtzL21hdGhfYmVuY2htYXJrLmNwcApAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAiYmVuY2htYXJrLmgiCiAKKyNpbmNsdWRlIDxmZW52Lmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogCiAvLyBBdm9pZCBvcHRpbWl6YXRpb24uCkBAIC02MCwzICs2MSwxNTEgQEAKICAgU3RvcEJlbmNobWFya1RpbWluZygpOwogfQogQkVOQ0hNQVJLKEJNX21hdGhfbG9nYik7CisKK3N0YXRpYyB2b2lkIEJNX21hdGhfaXNpbmZfTk9STUFMKGludCBpdGVycykgeworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIGQgPSAwLjA7CisgIHYgPSAxMjM0LjA7IC8vIEZQX05PUk1BTAorICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBkICs9IChpc2luZikodik7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fbWF0aF9pc2luZl9OT1JNQUwpOworCitzdGF0aWMgdm9pZCBCTV9tYXRoX2lzaW5mX05BTihpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBkID0gMC4wOworICB2ID0gbmFuKCIiKTsgLy8gRlBfTkFOCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIGQgKz0gKGlzaW5mKSh2KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9tYXRoX2lzaW5mX05BTik7CisKK3N0YXRpYyB2b2lkIEJNX21hdGhfaXNpbmZfSU5GSU5JVEUoaW50IGl0ZXJzKSB7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZCA9IDAuMDsKKyAgdiA9IEhVR0VfVkFMOyAvLyBGUF9JTkZJTklURQorICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBkICs9IChpc2luZikodik7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fbWF0aF9pc2luZl9JTkZJTklURSk7CisKK3N0YXRpYyB2b2lkIEJNX21hdGhfaXNpbmZfWkVSTyhpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBkID0gMC4wOworICB2ID0gMC4wOyAvLyBGUF9aRVJPCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIGQgKz0gKGlzaW5mKSh2KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9tYXRoX2lzaW5mX1pFUk8pOworCitzdGF0aWMgdm9pZCBCTV9tYXRoX3Npbl9mYXN0KGludCBpdGVycykgeworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIGQgPSAxLjA7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIGQgKz0gc2luKGQpOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworfQorQkVOQ0hNQVJLKEJNX21hdGhfc2luX2Zhc3QpOworCitzdGF0aWMgdm9pZCBCTV9tYXRoX3Npbl9mZXVwZGF0ZWVudihpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBkID0gMS4wOworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBmZW52X3QgX19saWJjX3NhdmVfcm07CisgICAgZmVob2xkZXhjZXB0KCZfX2xpYmNfc2F2ZV9ybSk7CisgICAgZmVzZXRyb3VuZChGRV9UT05FQVJFU1QpOworICAgIGQgKz0gc2luKGQpOworICAgIGZldXBkYXRlZW52KCZfX2xpYmNfc2F2ZV9ybSk7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fbWF0aF9zaW5fZmV1cGRhdGVlbnYpOworCitzdGF0aWMgdm9pZCBCTV9tYXRoX3Npbl9mZXNldGVudihpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBkID0gMS4wOworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBmZW52X3QgX19saWJjX3NhdmVfcm07CisgICAgZmVob2xkZXhjZXB0KCZfX2xpYmNfc2F2ZV9ybSk7CisgICAgZmVzZXRyb3VuZChGRV9UT05FQVJFU1QpOworICAgIGQgKz0gc2luKGQpOworICAgIGZlc2V0ZW52KCZfX2xpYmNfc2F2ZV9ybSk7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fbWF0aF9zaW5fZmVzZXRlbnYpOworCitzdGF0aWMgdm9pZCBCTV9tYXRoX2ZwY2xhc3NpZnlfTk9STUFMKGludCBpdGVycykgeworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIGQgPSAwLjA7CisgIHYgPSAxMjM0LjA7IC8vIEZQX05PUk1BTAorICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBkICs9IGZwY2xhc3NpZnkodik7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fbWF0aF9mcGNsYXNzaWZ5X05PUk1BTCk7CisKK3N0YXRpYyB2b2lkIEJNX21hdGhfZnBjbGFzc2lmeV9OQU4oaW50IGl0ZXJzKSB7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZCA9IDAuMDsKKyAgdiA9IG5hbigiIik7IC8vIEZQX05BTgorICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBkICs9IGZwY2xhc3NpZnkodik7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fbWF0aF9mcGNsYXNzaWZ5X05BTik7CisKK3N0YXRpYyB2b2lkIEJNX21hdGhfZnBjbGFzc2lmeV9JTkZJTklURShpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBkID0gMC4wOworICB2ID0gSFVHRV9WQUw7IC8vIEZQX0lORklOSVRFCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIGQgKz0gZnBjbGFzc2lmeSh2KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9tYXRoX2ZwY2xhc3NpZnlfSU5GSU5JVEUpOworCitzdGF0aWMgdm9pZCBCTV9tYXRoX2ZwY2xhc3NpZnlfWkVSTyhpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBkID0gMC4wOworICB2ID0gMC4wOyAvLyBGUF9aRVJPCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIGQgKz0gZnBjbGFzc2lmeSh2KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9tYXRoX2ZwY2xhc3NpZnlfWkVSTyk7CmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL3Byb3BlcnR5X2JlbmNobWFyay5jcHAgYi9iZW5jaG1hcmtzL3Byb3BlcnR5X2JlbmNobWFyay5jcHAKaW5kZXggNDMxMWExZC4uMDgwMmI0YyAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy9wcm9wZXJ0eV9iZW5jaG1hcmsuY3BwCisrKyBiL2JlbmNobWFya3MvcHJvcGVydHlfYmVuY2htYXJrLmNwcApAQCAtMTUsNiArMTUsOSBAQAogICovCiAKICNpbmNsdWRlICJiZW5jaG1hcmsuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNkZWZpbmUgX1JFQUxMWV9JTkNMVURFX1NZU19fU1lTVEVNX1BST1BFUlRJRVNfSF8KQEAgLTI1LDE3ICsyOCwyNiBAQAogCiBleHRlcm4gdm9pZCAqX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fOwogCisvLyBEbyBub3QgZXhjZWVkIDUxMiwgdGhhdCBpcyBhYm91dCB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgcHJvcGVydGllcworLy8gdGhhdCBjYW4gYmUgY3JlYXRlZCB3aXRoIHRoZSBjdXJyZW50IHByb3BlcnR5IGFyZWEgc2l6ZS4KICNkZWZpbmUgVEVTVF9OVU1fUFJPUFMgXAotICAgIEFyZygxKS0+QXJnKDQpLT5BcmcoMTYpLT5BcmcoNjQpLT5BcmcoMTI4KS0+QXJnKDI1NiktPkFyZyg1MTIpLT5BcmcoMTAyNCkKKyAgICBBcmcoMSktPkFyZyg0KS0+QXJnKDE2KS0+QXJnKDY0KS0+QXJnKDEyOCktPkFyZygyNTYpLT5BcmcoNTEyKQogCiBzdHJ1Y3QgTG9jYWxQcm9wZXJ0eVRlc3RTdGF0ZSB7CiAgICAgTG9jYWxQcm9wZXJ0eVRlc3RTdGF0ZShpbnQgbnByb3BzKSA6IG5wcm9wcyhucHJvcHMpLCB2YWxpZChmYWxzZSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBwcm9wX25hbWVfY2hhcnNbXSA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLi1fIjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgcHJvcF9uYW1lX2NoYXJzW10gPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi1fLiI7CiAKLSAgICAgICAgY2hhciBkaXJfdGVtcGxhdGVbXSA9ICIvZGF0YS9sb2NhbC90bXAvcHJvcC1YWFhYWFgiOworICAgICAgICBjb25zdCBjaGFyKiBhbmRyb2lkX2RhdGEgPSBnZXRlbnYoIkFORFJPSURfREFUQSIpOworICAgICAgICBpZiAoYW5kcm9pZF9kYXRhID09IE5VTEwpIHsKKyAgICAgICAgICBwcmludGYoIkFORFJPSURfREFUQSBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3Qgc2V0XG4iKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2hhciBkaXJfdGVtcGxhdGVbUEFUSF9NQVhdOworICAgICAgICBzbnByaW50ZihkaXJfdGVtcGxhdGUsIHNpemVvZihkaXJfdGVtcGxhdGUpLCAiJXMvbG9jYWwvdG1wL3Byb3AtWFhYWFhYIiwgYW5kcm9pZF9kYXRhKTsKICAgICAgICAgY2hhciAqZGlybmFtZSA9IG1rZHRlbXAoZGlyX3RlbXBsYXRlKTsKICAgICAgICAgaWYgKCFkaXJuYW1lKSB7Ci0gICAgICAgICAgICBwZXJyb3IoIm1ha2luZyB0ZW1wIGZpbGUgZm9yIHRlc3Qgc3RhdGUgZmFpbGVkIChpcyAvZGF0YS9sb2NhbC90bXAgd3JpdGFibGU/KSIpOworICAgICAgICAgICAgcHJpbnRmKCJtYWtpbmcgdGVtcCBmaWxlIGZvciB0ZXN0IHN0YXRlIGZhaWxlZCAoaXMgJXMvbG9jYWwvdG1wIHdyaXRhYmxlPyk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGFuZHJvaWRfZGF0YSwgc3RyZXJyb3IoZXJybm8pKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC01NiwxOCArNjgsMzggQEAKICAgICAgICAgc3JhbmRvbShucHJvcHMpOwogCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnByb3BzOyBpKyspIHsKLSAgICAgICAgICAgIG5hbWVfbGVuc1tpXSA9IHJhbmRvbSgpICUgUFJPUF9OQU1FX01BWDsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBoYXMgYXQgbGVhc3QgMTAgY2hhcmFjdGVycyB0byBtYWtlCisgICAgICAgICAgICAvLyBpdCB2ZXJ5IHVubGlrZWx5IHRvIGdlbmVyYXRlIHRoZSBzYW1lIHJhbmRvbSBuYW1lLgorICAgICAgICAgICAgbmFtZV9sZW5zW2ldID0gKHJhbmRvbSgpICUgKFBST1BfTkFNRV9NQVggLSAxMCkpICsgMTA7CiAgICAgICAgICAgICBuYW1lc1tpXSA9IG5ldyBjaGFyW1BST1BfTkFNRV9NQVggKyAxXTsKKyAgICAgICAgICAgIHNpemVfdCBwcm9wX25hbWVfbGVuID0gc2l6ZW9mKHByb3BfbmFtZV9jaGFycykgLSAxOwogICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuYW1lX2xlbnNbaV07IGorKykgewotICAgICAgICAgICAgICAgIG5hbWVzW2ldW2pdID0gcHJvcF9uYW1lX2NoYXJzW3JhbmRvbSgpICUgKHNpemVvZihwcm9wX25hbWVfY2hhcnMpIC0gMSldOworICAgICAgICAgICAgICAgIGlmIChqID09IDAgfHwgbmFtZXNbaV1bai0xXSA9PSAnLicgfHwgaiA9PSBuYW1lX2xlbnNbaV0gLSAxKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENlcnRhaW4gdmFsdWVzIGFyZSBub3QgYWxsb3dlZDoKKyAgICAgICAgICAgICAgICAgICAgLy8gLSBEb24ndCBzdGFydCBuYW1lIHdpdGggJy4nCisgICAgICAgICAgICAgICAgICAgIC8vIC0gRG9uJ3QgYWxsb3cgJy4nIHRvIGFwcGVhciB0d2ljZSBpbiBhIHJvdworICAgICAgICAgICAgICAgICAgICAvLyAtIERvbid0IGFsbG93IHRoZSBuYW1lIHRvIGVuZCB3aXRoICcuJworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCAnLicgaXMgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSBzbyB0aGF0IGRlY3JlbWVudGluZyB0aGUgbGVuZ3RoIGJ5IG9uZSByZW1vdmVzCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSBmcm9tIHRoZSBwb3NzaWJsZSB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgIHByb3BfbmFtZV9sZW4tLTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbmFtZXNbaV1bal0gPSBwcm9wX25hbWVfY2hhcnNbcmFuZG9tKCkgJSBwcm9wX25hbWVfbGVuXTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5hbWVzW2ldW25hbWVfbGVuc1tpXV0gPSAwOwotICAgICAgICAgICAgdmFsdWVfbGVuc1tpXSA9IHJhbmRvbSgpICUgUFJPUF9WQUxVRV9NQVg7CisKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgdmFsdWUgY29udGFpbnMgYXQgbGVhc3QgMSBjaGFyYWN0ZXIuCisgICAgICAgICAgICB2YWx1ZV9sZW5zW2ldID0gKHJhbmRvbSgpICUgKFBST1BfVkFMVUVfTUFYIC0gMSkpICsgMTsKICAgICAgICAgICAgIHZhbHVlc1tpXSA9IG5ldyBjaGFyW1BST1BfVkFMVUVfTUFYXTsKICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdmFsdWVfbGVuc1tpXTsgaisrKSB7CiAgICAgICAgICAgICAgICAgdmFsdWVzW2ldW2pdID0gcHJvcF9uYW1lX2NoYXJzW3JhbmRvbSgpICUgKHNpemVvZihwcm9wX25hbWVfY2hhcnMpIC0gMSldOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgX19zeXN0ZW1fcHJvcGVydHlfYWRkKG5hbWVzW2ldLCBuYW1lX2xlbnNbaV0sIHZhbHVlc1tpXSwgdmFsdWVfbGVuc1tpXSk7CisKKyAgICAgICAgICAgIGlmIChfX3N5c3RlbV9wcm9wZXJ0eV9hZGQobmFtZXNbaV0sIG5hbWVfbGVuc1tpXSwgdmFsdWVzW2ldLCB2YWx1ZV9sZW5zW2ldKSA8IDApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIkZhaWxlZCB0byBhZGQgYSBwcm9wZXJ0eSwgdGVybWluYXRpbmcuLi5cbiIpOworICAgICAgICAgICAgICAgIHByaW50ZigiJXMgPSAlLipzXG4iLCBuYW1lc1tpXSwgdmFsdWVfbGVuc1tpXSwgdmFsdWVzW2ldKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgdmFsaWQgPSB0cnVlOwpAQCAtMTQ2LDMgKzE3OCw1NiBAQAogICAgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKIH0KIEJFTkNITUFSSyhCTV9wcm9wZXJ0eV9maW5kKS0+VEVTVF9OVU1fUFJPUFM7CisKK3N0YXRpYyB2b2lkIEJNX3Byb3BlcnR5X3JlYWQoaW50IGl0ZXJzLCBpbnQgbnByb3BzKQoreworICAgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKKworICAgIExvY2FsUHJvcGVydHlUZXN0U3RhdGUgcGEobnByb3BzKTsKKworICAgIGlmICghcGEudmFsaWQpCisgICAgICAgIHJldHVybjsKKworICAgIHNyYW5kb20oaXRlcnMgKiBucHJvcHMpOworICAgIGNvbnN0IHByb3BfaW5mbyoqIHBpbmZvID0gbmV3IGNvbnN0IHByb3BfaW5mbypbaXRlcnNdOworICAgIGNoYXIgcHJvcHZhbHVlW1BST1BfVkFMVUVfTUFYXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7IGkrKykgeworICAgICAgICBwaW5mb1tpXSA9IF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQocGEubmFtZXNbcmFuZG9tKCkgJSBucHJvcHNdKTsKKyAgICB9CisKKyAgICBTdGFydEJlbmNobWFya1RpbWluZygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7IGkrKykgeworICAgICAgICBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkKHBpbmZvW2ldLCAwLCBwcm9wdmFsdWUpOworICAgIH0KKyAgICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CisKKyAgICBkZWxldGVbXSBwaW5mbzsKK30KK0JFTkNITUFSSyhCTV9wcm9wZXJ0eV9yZWFkKS0+VEVTVF9OVU1fUFJPUFM7CisKK3N0YXRpYyB2b2lkIEJNX3Byb3BlcnR5X3NlcmlhbChpbnQgaXRlcnMsIGludCBucHJvcHMpCit7CisgICAgU3RvcEJlbmNobWFya1RpbWluZygpOworCisgICAgTG9jYWxQcm9wZXJ0eVRlc3RTdGF0ZSBwYShucHJvcHMpOworCisgICAgaWYgKCFwYS52YWxpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3JhbmRvbShpdGVycyAqIG5wcm9wcyk7CisgICAgY29uc3QgcHJvcF9pbmZvKiogcGluZm8gPSBuZXcgY29uc3QgcHJvcF9pbmZvKltpdGVyc107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyBpKyspIHsKKyAgICAgICAgcGluZm9baV0gPSBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKHBhLm5hbWVzW3JhbmRvbSgpICUgbnByb3BzXSk7CisgICAgfQorCisgICAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyBpKyspIHsKKyAgICAgICAgX19zeXN0ZW1fcHJvcGVydHlfc2VyaWFsKHBpbmZvW2ldKTsKKyAgICB9CisgICAgU3RvcEJlbmNobWFya1RpbWluZygpOworCisgICAgZGVsZXRlW10gcGluZm87Cit9CitCRU5DSE1BUksoQk1fcHJvcGVydHlfc2VyaWFsKS0+VEVTVF9OVU1fUFJPUFM7CmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL3B0aHJlYWRfYmVuY2htYXJrLmNwcCBiL2JlbmNobWFya3MvcHRocmVhZF9iZW5jaG1hcmsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMTBkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9iZW5jaG1hcmtzL3B0aHJlYWRfYmVuY2htYXJrLmNwcApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJiZW5jaG1hcmsuaCIKKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworLy8gU3RvcCBHQ0Mgb3B0aW1pemluZyBvdXQgb3VyIHB1cmUgZnVuY3Rpb24uCisvKiBNdXN0IG5vdCBiZSBzdGF0aWMhICovIHB0aHJlYWRfdCAoKnB0aHJlYWRfc2VsZl9mcCkoKSA9IHB0aHJlYWRfc2VsZjsKKworc3RhdGljIHZvaWQgQk1fcHRocmVhZF9zZWxmKGludCBpdGVycykgeworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIHB0aHJlYWRfc2VsZl9mcCgpOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworfQorQkVOQ0hNQVJLKEJNX3B0aHJlYWRfc2VsZik7CisKK3N0YXRpYyB2b2lkIEJNX3B0aHJlYWRfZ2V0c3BlY2lmaWMoaW50IGl0ZXJzKSB7CisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKKyAgcHRocmVhZF9rZXlfdCBrZXk7CisgIHB0aHJlYWRfa2V5X2NyZWF0ZSgma2V5LCBOVUxMKTsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBwdGhyZWFkX2dldHNwZWNpZmljKGtleSk7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CisgIHB0aHJlYWRfa2V5X2RlbGV0ZShrZXkpOworfQorQkVOQ0hNQVJLKEJNX3B0aHJlYWRfZ2V0c3BlY2lmaWMpOworCitzdGF0aWMgdm9pZCBEdW1teVB0aHJlYWRPbmNlSW5pdEZ1bmN0aW9uKCkgeworfQorCitzdGF0aWMgdm9pZCBCTV9wdGhyZWFkX29uY2UoaW50IGl0ZXJzKSB7CisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKKyAgcHRocmVhZF9vbmNlX3Qgb25jZSA9IFBUSFJFQURfT05DRV9JTklUOworICBwdGhyZWFkX29uY2UoJm9uY2UsIER1bW15UHRocmVhZE9uY2VJbml0RnVuY3Rpb24pOworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIHB0aHJlYWRfb25jZSgmb25jZSwgRHVtbXlQdGhyZWFkT25jZUluaXRGdW5jdGlvbik7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fcHRocmVhZF9vbmNlKTsKKworc3RhdGljIHZvaWQgQk1fcHRocmVhZF9tdXRleF9sb2NrKGludCBpdGVycykgeworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CisgIHB0aHJlYWRfbXV0ZXhfdCBtdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZtdXRleCk7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJm11dGV4KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9wdGhyZWFkX211dGV4X2xvY2spOworCitzdGF0aWMgdm9pZCBCTV9wdGhyZWFkX211dGV4X2xvY2tfRVJST1JDSEVDSyhpbnQgaXRlcnMpIHsKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworICBwdGhyZWFkX211dGV4X3QgbXV0ZXggPSBQVEhSRUFEX0VSUk9SQ0hFQ0tfTVVURVhfSU5JVElBTElaRVI7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZtdXRleCk7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJm11dGV4KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9wdGhyZWFkX211dGV4X2xvY2tfRVJST1JDSEVDSyk7CisKK3N0YXRpYyB2b2lkIEJNX3B0aHJlYWRfbXV0ZXhfbG9ja19SRUNVUlNJVkUoaW50IGl0ZXJzKSB7CisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKKyAgcHRocmVhZF9tdXRleF90IG11dGV4ID0gUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVI7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZtdXRleCk7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJm11dGV4KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9wdGhyZWFkX211dGV4X2xvY2tfUkVDVVJTSVZFKTsKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvc2VtYXBob3JlX2JlbmNobWFyay5jcHAgYi9iZW5jaG1hcmtzL3NlbWFwaG9yZV9iZW5jaG1hcmsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMWZjYzEKLS0tIC9kZXYvbnVsbAorKysgYi9iZW5jaG1hcmtzL3NlbWFwaG9yZV9iZW5jaG1hcmsuY3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiYmVuY2htYXJrLmgiCisKKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKworc3RhdGljIHZvaWQgQk1fc2VtYXBob3JlX3NlbV9nZXR2YWx1ZShpbnQgaXRlcnMpIHsKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworICBzZW1fdCBzZW1hcGhvcmU7CisgIHNlbV9pbml0KCZzZW1hcGhvcmUsIDEsIDEpOworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIGludCBkdW1teTsKKyAgICBzZW1fZ2V0dmFsdWUoJnNlbWFwaG9yZSwgJmR1bW15KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9zZW1hcGhvcmVfc2VtX2dldHZhbHVlKTsKKworc3RhdGljIHZvaWQgQk1fc2VtYXBob3JlX3NlbV93YWl0X3NlbV9wb3N0KGludCBpdGVycykgeworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CisgIHNlbV90IHNlbWFwaG9yZTsKKyAgc2VtX2luaXQoJnNlbWFwaG9yZSwgMSwgMSk7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgc2VtX3dhaXQoJnNlbWFwaG9yZSk7CisgICAgc2VtX3Bvc3QoJnNlbWFwaG9yZSk7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fc2VtYXBob3JlX3NlbV93YWl0X3NlbV9wb3N0KTsKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvc3RkaW9fYmVuY2htYXJrLmNwcCBiL2JlbmNobWFya3Mvc3RkaW9fYmVuY2htYXJrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODk5ZGY3Ci0tLSAvZGV2L251bGwKKysrIGIvYmVuY2htYXJrcy9zdGRpb19iZW5jaG1hcmsuY3BwCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiYmVuY2htYXJrLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjZGVmaW5lIEtCIDEwMjQKKyNkZWZpbmUgTUIgMTAyNCpLQgorCisjZGVmaW5lIEFUX0NPTU1PTl9TSVpFUyBcCisgICAgQXJnKDEpLT5BcmcoMiktPkFyZygzKS0+QXJnKDQpLT5BcmcoOCktPkFyZygxNiktPkFyZygzMiktPkFyZyg2NCktPkFyZyg1MTIpLT4gXAorICAgIEFyZygxKktCKS0+QXJnKDQqS0IpLT5BcmcoOCpLQiktPkFyZygxNipLQiktPkFyZyg2NCpLQikKKworc3RhdGljIHZvaWQgQk1fc3RkaW9fZnJlYWQoaW50IGl0ZXJzLCBpbnQgY2h1bmtfc2l6ZSkgeworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CisgIEZJTEUqIGZwID0gZm9wZW4oIi9kZXYvemVybyIsICJydyIpOworICBjaGFyKiBidWYgPSBuZXcgY2hhcltjaHVua19zaXplXTsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBmcmVhZChidWYsIGNodW5rX3NpemUsIDEsIGZwKTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKKyAgU2V0QmVuY2htYXJrQnl0ZXNQcm9jZXNzZWQoaW50NjRfdChpdGVycykgKiBpbnQ2NF90KGNodW5rX3NpemUpKTsKKyAgZGVsZXRlW10gYnVmOworICBmY2xvc2UoZnApOworfQorQkVOQ0hNQVJLKEJNX3N0ZGlvX2ZyZWFkKS0+QVRfQ09NTU9OX1NJWkVTOworCisKK3N0YXRpYyB2b2lkIEJNX3N0ZGlvX2Z3cml0ZShpbnQgaXRlcnMsIGludCBjaHVua19zaXplKSB7CisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKKyAgRklMRSogZnAgPSBmb3BlbigiL2Rldi96ZXJvIiwgInJ3Iik7CisgIGNoYXIqIGJ1ZiA9IG5ldyBjaGFyW2NodW5rX3NpemVdOworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgICAgZndyaXRlKGJ1ZiwgY2h1bmtfc2l6ZSwgMSwgZnApOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworICBTZXRCZW5jaG1hcmtCeXRlc1Byb2Nlc3NlZChpbnQ2NF90KGl0ZXJzKSAqIGludDY0X3QoY2h1bmtfc2l6ZSkpOworICBkZWxldGVbXSBidWY7CisgIGZjbG9zZShmcCk7Cit9CitCRU5DSE1BUksoQk1fc3RkaW9fZndyaXRlKS0+QVRfQ09NTU9OX1NJWkVTOwpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy90aW1lX2JlbmNobWFyay5jcHAgYi9iZW5jaG1hcmtzL3RpbWVfYmVuY2htYXJrLmNwcAppbmRleCA3NTEzMmU1Li4yMmY2ZThlIDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL3RpbWVfYmVuY2htYXJrLmNwcAorKysgYi9iZW5jaG1hcmtzL3RpbWVfYmVuY2htYXJrLmNwcApAQCAtMTYsMjMgKzE2LDY0IEBACiAKICNpbmNsdWRlICJiZW5jaG1hcmsuaCIKIAorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQotCi0vLyBVc2VkIGJ5IHRoZSBob3JyaWJsZSBhbmRyb2lkLnRleHQuZm9ybWF0LlRpbWUgY2xhc3MsIHdoaWNoIGlzIHVzZWQgYnkgQ2FsZW5kYXIuIGh0dHA6Ly9iLzgyNzA4NjUuCi1leHRlcm4gIkMiIHZvaWQgbG9jYWx0aW1lX3R6KGNvbnN0IHRpbWVfdCogY29uc3QgdGltZXAsIHN0cnVjdCB0bSogdG1wLCBjb25zdCBjaGFyKiB0eik7Ci0KLXN0YXRpYyB2b2lkIEJNX3RpbWVfbG9jYWx0aW1lX3R6KGludCBpdGVycykgeworc3RhdGljIHZvaWQgQk1fdGltZV9jbG9ja19nZXR0aW1lKGludCBpdGVycykgewogICBTdGFydEJlbmNobWFya1RpbWluZygpOwogCi0gIHRpbWVfdCBub3codGltZShOVUxMKSk7Ci0gIHRtIGJyb2tlbl9kb3duX3RpbWU7CisgIHRpbWVzcGVjIHQ7CiAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgewotICAgIGxvY2FsdGltZV90eigmbm93LCAmYnJva2VuX2Rvd25fdGltZSwgIkV1cm9wZS9CZXJsaW4iKTsKKyAgICBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnQpOwogICB9CiAKICAgU3RvcEJlbmNobWFya1RpbWluZygpOwogfQotQkVOQ0hNQVJLKEJNX3RpbWVfbG9jYWx0aW1lX3R6KTsKLSNlbmRpZgorQkVOQ0hNQVJLKEJNX3RpbWVfY2xvY2tfZ2V0dGltZSk7CisKK3N0YXRpYyB2b2lkIEJNX3RpbWVfY2xvY2tfZ2V0dGltZV9zeXNjYWxsKGludCBpdGVycykgeworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIHRpbWVzcGVjIHQ7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIHN5c2NhbGwoX19OUl9jbG9ja19nZXR0aW1lLCBDTE9DS19NT05PVE9OSUMsICZ0KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV90aW1lX2Nsb2NrX2dldHRpbWVfc3lzY2FsbCk7CisKK3N0YXRpYyB2b2lkIEJNX3RpbWVfZ2V0dGltZW9mZGF5KGludCBpdGVycykgeworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIHRpbWV2YWwgdHY7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIGdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworfQorQkVOQ0hNQVJLKEJNX3RpbWVfZ2V0dGltZW9mZGF5KTsKKworc3RhdGljIHZvaWQgQk1fdGltZV9nZXR0aW1lb2ZkYXlfc3lzY2FsbChpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICB0aW1ldmFsIHR2OworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBzeXNjYWxsKF9fTlJfZ2V0dGltZW9mZGF5LCAmdHYsIE5VTEwpOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworfQorQkVOQ0hNQVJLKEJNX3RpbWVfZ2V0dGltZW9mZGF5X3N5c2NhbGwpOworCitzdGF0aWMgdm9pZCBCTV90aW1lX3RpbWUoaW50IGl0ZXJzKSB7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgdGltZShOVUxMKTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV90aW1lX3RpbWUpOwpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy91bmlzdGRfYmVuY2htYXJrLmNwcCBiL2JlbmNobWFya3MvdW5pc3RkX2JlbmNobWFyay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyYWMzMAotLS0gL2Rldi9udWxsCisrKyBiL2JlbmNobWFya3MvdW5pc3RkX2JlbmNobWFyay5jcHAKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJiZW5jaG1hcmsuaCIKKworI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3N0YXRpYyB2b2lkIEJNX3VuaXN0ZF9nZXRwaWQoaW50IGl0ZXJzKSB7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgZ2V0cGlkKCk7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fdW5pc3RkX2dldHBpZCk7CisKK3N0YXRpYyB2b2lkIEJNX3VuaXN0ZF9nZXRwaWRfc3lzY2FsbChpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBzeXNjYWxsKF9fTlJfZ2V0cGlkKTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV91bmlzdGRfZ2V0cGlkX3N5c2NhbGwpOworCisvLyBTdG9wIEdDQyBvcHRpbWl6aW5nIG91dCBvdXIgcHVyZSBmdW5jdGlvbi4KKy8qIE11c3Qgbm90IGJlIHN0YXRpYyEgKi8gcGlkX3QgKCpnZXR0aWRfZnApKCkgPSBnZXR0aWQ7CisKK3N0YXRpYyB2b2lkIEJNX3VuaXN0ZF9nZXR0aWQoaW50IGl0ZXJzKSB7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgZ2V0dGlkX2ZwKCk7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fdW5pc3RkX2dldHRpZCk7CisKK3N0YXRpYyB2b2lkIEJNX3VuaXN0ZF9nZXR0aWRfc3lzY2FsbChpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBzeXNjYWxsKF9fTlJfZ2V0dGlkKTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV91bmlzdGRfZ2V0dGlkX3N5c2NhbGwpOwpkaWZmIC0tZ2l0IGEvbGliYy9BbmRyb2lkLm1rIGIvbGliYy9BbmRyb2lkLm1rCmluZGV4IGVhNDZiZjkuLjljNWU3ODUgMTAwNjQ0Ci0tLSBhL2xpYmMvQW5kcm9pZC5taworKysgYi9saWJjL0FuZHJvaWQubWsKQEAgLTEsMTkxICsxLDc4IEBACiBMT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCiAKLWluY2x1ZGUgJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpL3N5c2NhbGxzLm1rCi0KICMgTWFrZSBldmVyeXRoaW5nIGRlcGVuZCBvbiBhbnkgY2hhbmdlcyB0byBpbmNsdWRlZCBtYWtlZmlsZXMuCi1saWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcyA6PSBcCi0gICAgJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpL3N5c2NhbGxzLm1rIFwKLSAgICAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsgXAorbGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCisKKyMgTG9hZCBjb25maWcgZm9yIFRBUkdFVF9BUkNICitteV8ybmRfYXJjaF9wcmVmaXggOj0KK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpLyQoVEFSR0VUX0FSQ0gpLm1rCitsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcyArPSBcCisgICAgJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpLyQoVEFSR0VUX0FSQ0gpLm1rCisKKworaWZkZWYgVEFSR0VUXzJORF9BUkNICisjIExvYWQgY29uZmlnIGZvciBUQVJHRVRfMk5EX0FSQ0gKK215XzJuZF9hcmNoX3ByZWZpeCA6PSAkKFRBUkdFVF8yTkRfQVJDSF9WQVJfUFJFRklYKQoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL2FyY2gtJChUQVJHRVRfMk5EX0FSQ0gpLyQoVEFSR0VUXzJORF9BUkNIKS5taworbXlfMm5kX2FyY2hfcHJlZml4IDo9CitsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcyArPSBcCisgICAgJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUXzJORF9BUkNIKS8kKFRBUkdFVF8yTkRfQVJDSCkubWsKK2VuZGlmCisKKyMgY3J0IG9iaiBmaWxlcworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBjcnRicmFuZC5jIG5lZWRzIDxzdGRpbnQuaD4gYW5kIGEgI2RlZmluZSBmb3IgdGhlIHBsYXRmb3JtIFNESyB2ZXJzaW9uLgorbGliY19jcnRfdGFyZ2V0X2NmbGFncyA6PSBcCisgICAgLUkkKExPQ0FMX1BBVEgpL2luY2x1ZGUgXAorICAgIC1EUExBVEZPUk1fU0RLX1ZFUlNJT049JChQTEFURk9STV9TREtfVkVSU0lPTikgXAorCitteV8ybmRfYXJjaF9wcmVmaXggOj0KK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9jcnQubWsKK2lmZGVmIFRBUkdFVF8yTkRfQVJDSAorbXlfMm5kX2FyY2hfcHJlZml4IDo9ICQoVEFSR0VUXzJORF9BUkNIX1ZBUl9QUkVGSVgpCitpbmNsdWRlICQoTE9DQUxfUEFUSCkvY3J0Lm1rCitteV8ybmRfYXJjaF9wcmVmaXggOj0KK2VuZGlmCiAKICMgRGVmaW5lIHRoZSBjb21tb24gc291cmNlIGZpbGVzIGZvciBhbGwgdGhlIGxpYmMgaW5zdGFuY2VzCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogbGliY19jb21tb25fc3JjX2ZpbGVzIDo9IFwKLQkkKHN5c2NhbGxfc3JjKSBcCi0JdW5pc3RkL2FsYXJtLmMgXAotCXVuaXN0ZC9leGVjLmMgXAotCXVuaXN0ZC9mbm1hdGNoLmMgXAotCXVuaXN0ZC9zeXNsb2cuYyBcCi0JdW5pc3RkL3N5c3RlbS5jIFwKLQl1bmlzdGQvdGltZS5jIFwKLQlzdGRpby9hc3ByaW50Zi5jIFwKLQlzdGRpby9mZmx1c2guYyBcCi0Jc3RkaW8vZmdldGMuYyBcCi0Jc3RkaW8vZmluZGZwLmMgXAotCXN0ZGlvL2ZwcmludGYuYyBcCi0Jc3RkaW8vZnB1dGMuYyBcCi0Jc3RkaW8vZnJlYWQuYyBcCi0Jc3RkaW8vZnJlb3Blbi5jIFwKLQlzdGRpby9mc2NhbmYuYyBcCi0Jc3RkaW8vZnNlZWsuYyBcCi0Jc3RkaW8vZnRlbGwuYyBcCi0Jc3RkaW8vZnZ3cml0ZS5jIFwKLQlzdGRpby9nZXRzLmMgXAotCXN0ZGlvL3ByaW50Zi5jIFwKLQlzdGRpby9yZWZpbGwuYyBcCi0Jc3RkaW8vcmV3aW5kLmMgXAotCXN0ZGlvL3NjYW5mLmMgXAotCXN0ZGlvL3NucHJpbnRmLmNcCi0Jc3RkaW8vc3ByaW50Zi5jIFwKLQlzdGRpby9zc2NhbmYuYyBcCi0Jc3RkaW8vc3RkaW8uYyBcCi0Jc3RkaW8vdW5nZXRjLmMgXAotCXN0ZGlvL3Zhc3ByaW50Zi5jIFwKLQlzdGRpby92ZnByaW50Zi5jIFwKLQlzdGRpby92ZnNjYW5mLmMgXAotCXN0ZGlvL3ZwcmludGYuYyBcCi0Jc3RkaW8vdnNucHJpbnRmLmMgXAotCXN0ZGlvL3ZzcHJpbnRmLmMgXAotCXN0ZGlvL3ZzY2FuZi5jIFwKLQlzdGRpby92c3NjYW5mLmMgXAotCXN0ZGlvL3didWYuYyBcCi0Jc3RkbGliL2F0ZXhpdC5jIFwKLQlzdGRsaWIvY3R5cGVfLmMgXAotCXN0ZGxpYi9nZXRlbnYuYyBcCi0Jc3RkbGliL3B1dGVudi5jIFwKLQlzdGRsaWIvc2V0ZW52LmMgXAotCXN0ZGxpYi9zdHJ0b2QuYyBcCi0Jc3RkbGliL3N0cnRvaW1heC5jIFwKLQlzdGRsaWIvc3RydG9sLmMgXAotCXN0ZGxpYi9zdHJ0b2xsLmMgXAotCXN0ZGxpYi9zdHJ0b3VsLmMgXAotCXN0ZGxpYi9zdHJ0b3VsbC5jIFwKLQlzdGRsaWIvc3RydG91bWF4LmMgXAotCXN0ZGxpYi90b2xvd2VyXy5jIFwKLQlzdGRsaWIvdG91cHBlcl8uYyBcCi0Jc3RyaW5nL3N0cmNhc2VjbXAuYyBcCi0Jc3RyaW5nL3N0cmNzcG4uYyBcCi0Jc3RyaW5nL3N0cmR1cC5jIFwKLQlzdHJpbmcvc3RycGJyay5jIFwKLQlzdHJpbmcvc3Ryc2VwLmMgXAotCXN0cmluZy9zdHJzcG4uYyBcCi0Jc3RyaW5nL3N0cnN0ci5jIFwKLQlzdHJpbmcvc3RydG9rLmMgXAotCXdjaGFyL3djc3dpZHRoLmMgXAotCXdjaGFyL3djc3hmcm0uYyBcCi0JYmlvbmljL2FyYzRyYW5kb20uYyBcCi0JYmlvbmljL2F0b2kuYyBcCi0JYmlvbmljL2F0b2wuYyBcCi0JYmlvbmljL2F0b2xsLmMgXAotCWJpb25pYy9iaW5kcmVzdnBvcnQuYyBcCi0JYmlvbmljL2NsZWFyZW52LmMgXAotCWJpb25pYy9kYWVtb24uYyBcCi0JYmlvbmljL2Vyci5jIFwKLQliaW9uaWMvZXRoZXJfYXRvbi5jIFwKLQliaW9uaWMvZXRoZXJfbnRvYS5jIFwKLQliaW9uaWMvZmRwcmludGYuYyBcCi0JYmlvbmljL2Zsb2NrZmlsZS5jIFwKLQliaW9uaWMvZnRpbWUuYyBcCi0JYmlvbmljL2Z0b2suYyBcCi0JYmlvbmljL2Z0cy5jIFwKLQliaW9uaWMvZ2V0ZHRhYmxlc2l6ZS5jIFwKLQliaW9uaWMvZ2V0aG9zdG5hbWUuYyBcCi0JYmlvbmljL2dldHBncnAuYyBcCi0JYmlvbmljL2dldHByaW9yaXR5LmMgXAotCWJpb25pYy9nZXRwdC5jIFwKLQliaW9uaWMvaWZfaW5kZXh0b25hbWUuYyBcCi0JYmlvbmljL2lmX25hbWV0b2luZGV4LmMgXAotCWJpb25pYy9pbml0Z3JvdXBzLmMgXAotCWJpb25pYy9pb2N0bC5jIFwKLQliaW9uaWMvaXNhdHR5LmMgXAotCWJpb25pYy9pc3NldHVnaWQuYyBcCi0JYmlvbmljL2xkZXhwLmMgXAotCWJpb25pYy9tZDUuYyBcCi0JYmlvbmljL21lbW1lbS5jIFwKLQliaW9uaWMvbWVtc3dhcC5jIFwKLQliaW9uaWMvbmFtZV9tZW0uYyBcCi0JYmlvbmljL3BhdGhjb25mLmMgXAotCWJpb25pYy9wZXJyb3IuYyBcCi0JYmlvbmljL3B0c25hbWUuYyBcCi0JYmlvbmljL3B0c25hbWVfci5jIFwKLQliaW9uaWMvcHV0dXRsaW5lLmMgXAotCWJpb25pYy9yZWJvb3QuYyBcCi0JYmlvbmljL3JlY3YuYyBcCi0JYmlvbmljL3NjaGVkX2NwdWFsbG9jLmMgXAotCWJpb25pYy9zY2hlZF9jcHVjb3VudC5jIFwKLQliaW9uaWMvc2VtYXBob3JlLmMgXAotCWJpb25pYy9zZW5kLmMgXAotCWJpb25pYy9zZXRwZ3JwLmMgXAotCWJpb25pYy9zaWdibG9jay5jIFwKLQliaW9uaWMvc2lnaW50ZXJydXB0LmMgXAotCWJpb25pYy9zaWdsaXN0LmMgXAotCWJpb25pYy9zaWduYW1lLmMgXAotCWJpb25pYy9zaWdzZXRtYXNrLmMgXAotCWJpb25pYy9zdHJuZHVwLmMgXAotCWJpb25pYy9zdHJudG9pbWF4LmMgXAotCWJpb25pYy9zdHJudG91bWF4LmMgXAotCWJpb25pYy9zdHJ0b3RpbWV2YWwuYyBcCi0JYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzLmMgXAotCWJpb25pYy9zeXN0ZW1fcHJvcGVydGllc19jb21wYXQuYyBcCi0JYmlvbmljL3RjZ2V0cGdycC5jIFwKLQliaW9uaWMvdGNzZXRwZ3JwLmMgXAotCWJpb25pYy90aW1lNjQuYyBcCi0JYmlvbmljL3Vtb3VudC5jIFwKLQliaW9uaWMvdW5sb2NrcHQuYyBcCi0JYmlvbmljL3V0bXAuYyBcCi0JYmlvbmljL3djc2NvbGwuYyBcCi0KLQotbGliY19kbnNfc3JjX2ZpbGVzICs9IFwKLSAgICBuZXRic2QvZ2V0aG5hbWFkZHIuYyBcCi0gICAgbmV0YnNkL2luZXQvbnNhcF9hZGRyLmMgXAotICAgIG5ldGJzZC9uYW1lc2VyL25zX25hbWUuYyBcCi0gICAgbmV0YnNkL25hbWVzZXIvbnNfbmV0aW50LmMgXAotICAgIG5ldGJzZC9uYW1lc2VyL25zX3BhcnNlLmMgXAotICAgIG5ldGJzZC9uYW1lc2VyL25zX3ByaW50LmMgXAotICAgIG5ldGJzZC9uYW1lc2VyL25zX3NhbWVkb21haW4uYyBcCi0gICAgbmV0YnNkL25hbWVzZXIvbnNfdHRsLmMgXAotICAgIG5ldGJzZC9uZXQvYmFzZTY0LmMgXAotICAgIG5ldGJzZC9uZXQvZ2V0YWRkcmluZm8uYyBcCi0gICAgbmV0YnNkL25ldC9nZXRuYW1laW5mby5jIFwKLSAgICBuZXRic2QvbmV0L2dldHNlcnZieW5hbWUuYyBcCi0gICAgbmV0YnNkL25ldC9nZXRzZXJ2Ynlwb3J0LmMgXAotICAgIG5ldGJzZC9uZXQvZ2V0c2VydmVudC5jIFwKLSAgICBuZXRic2QvbmV0L25zZGlzcGF0Y2guYyBcCi0gICAgbmV0YnNkL3Jlc29sdi9fX2RuX2NvbXAuYyBcCi0gICAgbmV0YnNkL3Jlc29sdi9oZXJyb3IuYyBcCi0gICAgbmV0YnNkL3Jlc29sdi9yZXNfY2FjaGUuYyBcCi0gICAgbmV0YnNkL3Jlc29sdi9fX3Jlc19jbG9zZS5jIFwKLSAgICBuZXRic2QvcmVzb2x2L3Jlc19jb21wLmMgXAotICAgIG5ldGJzZC9yZXNvbHYvcmVzX2RhdGEuYyBcCi0gICAgbmV0YnNkL3Jlc29sdi9yZXNfZGVidWcuYyBcCi0gICAgbmV0YnNkL3Jlc29sdi9yZXNfaW5pdC5jIFwKLSAgICBuZXRic2QvcmVzb2x2L3Jlc19ta3F1ZXJ5LmMgXAotICAgIG5ldGJzZC9yZXNvbHYvcmVzX3F1ZXJ5LmMgXAotICAgIG5ldGJzZC9yZXNvbHYvX19yZXNfc2VuZC5jIFwKLSAgICBuZXRic2QvcmVzb2x2L3Jlc19zZW5kLmMgXAotICAgIG5ldGJzZC9yZXNvbHYvcmVzX3N0YXRlLmMgXAotCi0KLSMgVGhlc2UgYXJlIHVzZWQgYnkgdGhlIDMyLWJpdCB0YXJnZXRzLCBidXQgbm90IHRoZSA2NC1iaXQgb25lcy4KLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLCQoZmlsdGVyICQoVEFSR0VUX0FSQ0gpLGFybSBtaXBzIHg4NikpCi1saWJjX2NvbW1vbl9zcmNfZmlsZXMgKz0gXAotICAgIGJpb25pYy9sZWdhY3lfMzJfYml0X3N1cHBvcnQuY3BwIFwKLSAgICBiaW9uaWMvbmRrX2NydWZ0LmNwcCBcCi0KLWVuZGlmCisgICAgYmlvbmljL2JpbmRyZXN2cG9ydC5jIFwKKyAgICBiaW9uaWMvZGFlbW9uLmMgXAorICAgIGJpb25pYy9lcnIuYyBcCisgICAgYmlvbmljL2V0aGVyX2F0b24uYyBcCisgICAgYmlvbmljL2V0aGVyX250b2EuYyBcCisgICAgYmlvbmljL2Z0cy5jIFwKKyAgICBiaW9uaWMvZ2V0aG9zdG5hbWUuYyBcCisgICAgYmlvbmljL2dldHByaW9yaXR5LmMgXAorICAgIGJpb25pYy9pZl9pbmRleHRvbmFtZS5jIFwKKyAgICBiaW9uaWMvaWZfbmFtZXRvaW5kZXguYyBcCisgICAgYmlvbmljL2luaXRncm91cHMuYyBcCisgICAgYmlvbmljL2lvY3RsLmMgXAorICAgIGJpb25pYy9pc2F0dHkuYyBcCisgICAgYmlvbmljL21lbW1lbS5jIFwKKyAgICBiaW9uaWMvcGF0aGNvbmYuYyBcCisgICAgYmlvbmljL3B1dHV0bGluZS5jIFwKKyAgICBiaW9uaWMvc2NoZWRfY3B1YWxsb2MuYyBcCisgICAgYmlvbmljL3NjaGVkX2NwdWNvdW50LmMgXAorICAgIGJpb25pYy9zZW1hcGhvcmUuYyBcCisgICAgYmlvbmljL3NpZ2Jsb2NrLmMgXAorICAgIGJpb25pYy9zaWdpbnRlcnJ1cHQuYyBcCisgICAgYmlvbmljL3NpZ3NldG1hc2suYyBcCisgICAgYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzX2NvbXBhdC5jIFwKKyAgICBzdGRpby9zbnByaW50Zi5jXAorICAgIHN0ZGlvL3NwcmludGYuYyBcCiAKICMgRm9ydGlmeSBpbXBsZW1lbnRhdGlvbnMgb2YgbGliYyBmdW5jdGlvbnMuCiBsaWJjX2NvbW1vbl9zcmNfZmlsZXMgKz0gXAogICAgIGJpb25pYy9fX0ZEX2Noay5jcHAgXAogICAgIGJpb25pYy9fX2ZnZXRzX2Noay5jcHAgXAotICAgIGJpb25pYy9fX21lbWNweV9jaGsuY3BwIFwKICAgICBiaW9uaWMvX19tZW1tb3ZlX2Noay5jcHAgXAotICAgIGJpb25pYy9fX21lbXNldF9jaGsuY3BwIFwKICAgICBiaW9uaWMvX19yZWFkX2Noay5jcHAgXAogICAgIGJpb25pYy9fX3JlY3Zmcm9tX2Noay5jcHAgXAotICAgIGJpb25pYy9fX3N0cmNhdF9jaGsuY3BwIFwKKyAgICBiaW9uaWMvX19zdHBjcHlfY2hrLmNwcCBcCisgICAgYmlvbmljL19fc3RwbmNweV9jaGsuY3BwIFwKICAgICBiaW9uaWMvX19zdHJjaHJfY2hrLmNwcCBcCi0gICAgYmlvbmljL19fc3RyY3B5X2Noay5jcHAgXAogICAgIGJpb25pYy9fX3N0cmxjYXRfY2hrLmNwcCBcCiAgICAgYmlvbmljL19fc3RybGNweV9jaGsuY3BwIFwKICAgICBiaW9uaWMvX19zdHJsZW5fY2hrLmNwcCBcCkBAIC0xOTgsNDAgKzg1LDY4IEBACiAKIGxpYmNfYmlvbmljX3NyY19maWxlcyA6PSBcCiAgICAgYmlvbmljL2Fib3J0LmNwcCBcCisgICAgYmlvbmljL2FjY2VwdC5jcHAgXAorICAgIGJpb25pYy9hY2NlcHQ0LmNwcCBcCiAgICAgYmlvbmljL2FjY2Vzcy5jcHAgXAogICAgIGJpb25pYy9hc3NlcnQuY3BwIFwKKyAgICBiaW9uaWMvYXRvZi5jcHAgXAogICAgIGJpb25pYy9iaW9uaWNfdGltZV9jb252ZXJzaW9ucy5jcHAgXAogICAgIGJpb25pYy9icmsuY3BwIFwKKyAgICBiaW9uaWMvYzE2cnRvbWIuY3BwIFwKKyAgICBiaW9uaWMvYzMycnRvbWIuY3BwIFwKICAgICBiaW9uaWMvY2htb2QuY3BwIFwKICAgICBiaW9uaWMvY2hvd24uY3BwIFwKKyAgICBiaW9uaWMvY2xlYXJlbnYuY3BwIFwKKyAgICBiaW9uaWMvY2xvY2suY3BwIFwKICAgICBiaW9uaWMvY2xvbmUuY3BwIFwKKyAgICBiaW9uaWMvX19jbXNnX254dGhkci5jcHAgXAorICAgIGJpb25pYy9jb25uZWN0LmNwcCBcCisgICAgYmlvbmljL2N0eXBlLmNwcCBcCiAgICAgYmlvbmljL2RpcmVudC5jcHAgXAogICAgIGJpb25pYy9kdXAyLmNwcCBcCiAgICAgYmlvbmljL2Vwb2xsX2NyZWF0ZS5jcHAgXAotICAgIGJpb25pYy9lcG9sbF93YWl0LmNwcCBcCiAgICAgYmlvbmljL2Vwb2xsX3B3YWl0LmNwcCBcCisgICAgYmlvbmljL2Vwb2xsX3dhaXQuY3BwIFwKICAgICBiaW9uaWMvX19lcnJuby5jcHAgXAogICAgIGJpb25pYy9ldmVudGZkX3JlYWQuY3BwIFwKICAgICBiaW9uaWMvZXZlbnRmZF93cml0ZS5jcHAgXAogICAgIGJpb25pYy9mZnMuY3BwIFwKKyAgICBiaW9uaWMvZmxvY2tmaWxlLmNwcCBcCiAgICAgYmlvbmljL2ZvcmsuY3BwIFwKKyAgICBiaW9uaWMvZnBjbGFzc2lmeS5jcHAgXAogICAgIGJpb25pYy9mdXRpbWVucy5jcHAgXAogICAgIGJpb25pYy9nZXRhdXh2YWwuY3BwIFwKICAgICBiaW9uaWMvZ2V0Y3dkLmNwcCBcCisgICAgYmlvbmljL2dldGVudHJvcHlfbGludXguYyBcCisgICAgYmlvbmljL2dldHBncnAuY3BwIFwKKyAgICBiaW9uaWMvZ2V0cGlkLmNwcCBcCisgICAgYmlvbmljL2dldHRpZC5jcHAgXAogICAgIGJpb25pYy9pbm90aWZ5X2luaXQuY3BwIFwKICAgICBiaW9uaWMvbGNob3duLmNwcCBcCisgICAgYmlvbmljL2xmczY0X3N1cHBvcnQuY3BwIFwKKyAgICBiaW9uaWMvX19saWJjX2N1cnJlbnRfc2lncnRtYXguY3BwIFwKKyAgICBiaW9uaWMvX19saWJjX2N1cnJlbnRfc2lncnRtaW4uY3BwIFwKICAgICBiaW9uaWMvbGliY19pbml0X2NvbW1vbi5jcHAgXAogICAgIGJpb25pYy9saWJjX2xvZ2dpbmcuY3BwIFwKICAgICBiaW9uaWMvbGliZ2VuLmNwcCBcCiAgICAgYmlvbmljL2xpbmsuY3BwIFwKKyAgICBiaW9uaWMvbG9jYWxlLmNwcCBcCiAgICAgYmlvbmljL2xzdGF0LmNwcCBcCisgICAgYmlvbmljL21icnRvYzE2LmNwcCBcCisgICAgYmlvbmljL21icnRvYzMyLmNwcCBcCisgICAgYmlvbmljL21ic3RhdGUuY3BwIFwKICAgICBiaW9uaWMvbWtkaXIuY3BwIFwKICAgICBiaW9uaWMvbWtmaWZvLmNwcCBcCiAgICAgYmlvbmljL21rbm9kLmNwcCBcCisgICAgYmlvbmljL21udGVudC5jcHAgXAorICAgIGJpb25pYy9OZXRkQ2xpZW50RGlzcGF0Y2guY3BwIFwKICAgICBiaW9uaWMvb3Blbi5jcHAgXAogICAgIGJpb25pYy9wYXVzZS5jcHAgXAogICAgIGJpb25pYy9waXBlLmNwcCBcCiAgICAgYmlvbmljL3BvbGwuY3BwIFwKKyAgICBiaW9uaWMvcG9zaXhfZmFkdmlzZS5jcHAgXAorICAgIGJpb25pYy9wb3NpeF9mYWxsb2NhdGUuY3BwIFwKKyAgICBiaW9uaWMvcG9zaXhfdGltZXJzLmNwcCBcCiAgICAgYmlvbmljL3B0aHJlYWRfYXRmb3JrLmNwcCBcCiAgICAgYmlvbmljL3B0aHJlYWRfYXR0ci5jcHAgXAogICAgIGJpb25pYy9wdGhyZWFkX2NvbmQuY3BwIFwKQEAgLTI0MSw2ICsxNTYsNyBAQAogICAgIGJpb25pYy9wdGhyZWFkX2V4aXQuY3BwIFwKICAgICBiaW9uaWMvcHRocmVhZF9nZXRjcHVjbG9ja2lkLmNwcCBcCiAgICAgYmlvbmljL3B0aHJlYWRfZ2V0c2NoZWRwYXJhbS5jcHAgXAorICAgIGJpb25pYy9wdGhyZWFkX2dldHRpZF9ucC5jcHAgXAogICAgIGJpb25pYy9wdGhyZWFkX2ludGVybmFscy5jcHAgXAogICAgIGJpb25pYy9wdGhyZWFkX2pvaW4uY3BwIFwKICAgICBiaW9uaWMvcHRocmVhZF9rZXkuY3BwIFwKQEAgLTI1MywxOSArMTY5LDIyIEBACiAgICAgYmlvbmljL3B0aHJlYWRfc2V0c2NoZWRwYXJhbS5jcHAgXAogICAgIGJpb25pYy9wdGhyZWFkX3NpZ21hc2suY3BwIFwKICAgICBiaW9uaWMvcHRyYWNlLmNwcCBcCisgICAgYmlvbmljL3B0eS5jcHAgXAogICAgIGJpb25pYy9yYWlzZS5jcHAgXAorICAgIGJpb25pYy9yYW5kLmNwcCBcCiAgICAgYmlvbmljL3JlYWRsaW5rLmNwcCBcCisgICAgYmlvbmljL3JlYm9vdC5jcHAgXAorICAgIGJpb25pYy9yZWN2LmNwcCBcCiAgICAgYmlvbmljL3JlbmFtZS5jcHAgXAogICAgIGJpb25pYy9ybWRpci5jcHAgXAotICAgIGJpb25pYy9zYnJrLmNwcCBcCiAgICAgYmlvbmljL3NjYW5kaXIuY3BwIFwKICAgICBiaW9uaWMvc2NoZWRfZ2V0YWZmaW5pdHkuY3BwIFwKICAgICBiaW9uaWMvc2NoZWRfZ2V0Y3B1LmNwcCBcCisgICAgYmlvbmljL3NlbmQuY3BwIFwKICAgICBiaW9uaWMvc2V0ZWdpZC5jcHAgXAogICAgIGJpb25pYy9fX3NldF9lcnJuby5jcHAgXAogICAgIGJpb25pYy9zZXRldWlkLmNwcCBcCi0gICAgYmlvbmljL3NldGxvY2FsZS5jcHAgXAotICAgIGJpb25pYy9zaWduYWxmZC5jcHAgXAorICAgIGJpb25pYy9zZXRwZ3JwLmNwcCBcCiAgICAgYmlvbmljL3NpZ2FjdGlvbi5jcHAgXAogICAgIGJpb25pYy9zaWdhZGRzZXQuY3BwIFwKICAgICBiaW9uaWMvc2lnZGVsc2V0LmNwcCBcCkBAIC0yNzMsNzcgKzE5Miw1NSBAQAogICAgIGJpb25pYy9zaWdmaWxsc2V0LmNwcCBcCiAgICAgYmlvbmljL3NpZ2lzbWVtYmVyLmNwcCBcCiAgICAgYmlvbmljL3NpZ25hbC5jcHAgXAorICAgIGJpb25pYy9zaWduYWxmZC5jcHAgXAogICAgIGJpb25pYy9zaWdwZW5kaW5nLmNwcCBcCiAgICAgYmlvbmljL3NpZ3Byb2NtYXNrLmNwcCBcCiAgICAgYmlvbmljL3NpZ3N1c3BlbmQuY3BwIFwKICAgICBiaW9uaWMvc2lnd2FpdC5jcHAgXAorICAgIGJpb25pYy9zb2NrZXQuY3BwIFwKICAgICBiaW9uaWMvc3RhdC5jcHAgXAogICAgIGJpb25pYy9zdGF0dmZzLmNwcCBcCisgICAgYmlvbmljL3N0cmNvbGxfbC5jcHAgXAogICAgIGJpb25pYy9zdHJlcnJvci5jcHAgXAogICAgIGJpb25pYy9zdHJlcnJvcl9yLmNwcCBcCisgICAgYmlvbmljL3N0cmZ0aW1lX2wuY3BwIFwKICAgICBiaW9uaWMvc3Ryc2lnbmFsLmNwcCBcCisgICAgYmlvbmljL3N0cnRvbGQuY3BwIFwKKyAgICBiaW9uaWMvc3RydG9sZF9sLmNwcCBcCisgICAgYmlvbmljL3N0cnRvbGxfbC5jcHAgXAorICAgIGJpb25pYy9zdHJ0b3VsbF9sLmNwcCBcCisgICAgYmlvbmljL3N0cnhmcm1fbC5jcHAgXAogICAgIGJpb25pYy9zdHVicy5jcHAgXAogICAgIGJpb25pYy9zeW1saW5rLmNwcCBcCiAgICAgYmlvbmljL3N5c2NvbmYuY3BwIFwKLSAgICBiaW9uaWMvdGhyZWFkX2F0ZXhpdC5jcHAgXAorICAgIGJpb25pYy9zeXNsb2cuY3BwIFwKKyAgICBiaW9uaWMvc3lzX3NpZ2xpc3QuYyBcCisgICAgYmlvbmljL3N5c19zaWduYW1lLmMgXAorICAgIGJpb25pYy9zeXN0ZW1fcHJvcGVydGllcy5jcHAgXAogICAgIGJpb25pYy90ZGVzdHJveS5jcHAgXAotICAgIGJpb25pYy90aW1lci5jcHAgXAorICAgIGJpb25pYy90ZXJtaW9zLmNwcCBcCisgICAgYmlvbmljL3RocmVhZF9wcml2YXRlLmNwcCBcCiAgICAgYmlvbmljL3RtcGZpbGUuY3BwIFwKKyAgICBiaW9uaWMvdW1vdW50LmNwcCBcCiAgICAgYmlvbmljL3VubGluay5jcHAgXAogICAgIGJpb25pYy91dGltZXMuY3BwIFwKKyAgICBiaW9uaWMvdmRzby5jcHAgXAogICAgIGJpb25pYy93YWl0LmNwcCBcCiAgICAgYmlvbmljL3djaGFyLmNwcCBcCisgICAgYmlvbmljL3djdHlwZS5jcHAgXAogCi0jIFRoZXNlIGFyZSBzaGFyZWQgYnkgYWxsIHRoZSAzMi1iaXQgdGFyZ2V0cywgYnV0IG5vdCB0aGUgNjQtYml0IG9uZXMuCi1pZmVxICgkKFRBUkdFVF9BUkNIKSwkKGZpbHRlciAkKFRBUkdFVF9BUkNIKSxhcm0gbWlwcyB4ODYpKQotbGliY19iaW9uaWNfc3JjX2ZpbGVzICs9IFwKLSAgICBiaW9uaWMvbW1hcC5jcHAgXAotCi1lbmRpZgotCi1saWJjX3R6Y29kZV9zcmNfZmlsZXMgOj0gXAotICAgIHR6Y29kZS9hc2N0aW1lLmMgXAotICAgIHR6Y29kZS9kaWZmdGltZS5jIFwKLSAgICB0emNvZGUvbG9jYWx0aW1lLmMgXAotICAgIHR6Y29kZS9zdHJmdGltZS5jIFwKLSAgICB0emNvZGUvc3RycHRpbWUuYyBcCitsaWJjX2N4YV9zcmNfZmlsZXMgOj0gXAorICAgIGJpb25pYy9fX2N4YV9ndWFyZC5jcHAgXAorICAgIGJpb25pYy9fX2N4YV9wdXJlX3ZpcnR1YWwuY3BwIFwKKyAgICBiaW9uaWMvbmV3LmNwcCBcCiAKIGxpYmNfdXBzdHJlYW1fZnJlZWJzZF9zcmNfZmlsZXMgOj0gXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvZ2VuL2xkZXhwLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvZ2VuL3NsZWVwLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvZ2VuL3VzbGVlcC5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2NscmVyci5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZjbG9zZS5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Zkb3Blbi5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Zlb2YuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZXJyb3IuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZ2V0bG4uYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZ2V0cG9zLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmdldHMuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9maWxlbm8uYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mbGFncy5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZvcGVuLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZnB1cmdlLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZnB1dHMuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mc2V0cG9zLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZnVub3Blbi5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Z3YWxrLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZndyaXRlLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZ2V0Yy5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2dldGNoYXIuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9tYWtlYnVmLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vbWt0ZW1wLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcHV0Yy5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dGNoYXIuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXRzLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcHV0dy5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3JlbW92ZS5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3JnZXQuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9zZXRidWYuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9zZXRidWZmZXIuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9zZXR2YnVmLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vdGVtcG5hbS5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3RtcG5hbS5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3dzZXR1cC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGxpYi9hYnMuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvZ2V0b3B0X2xvbmcuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvaW1heGFicy5jIFwKQEAgLTM1MSw2ICsyNDgsNyBAQAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkbGliL2xhYnMuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvbGxhYnMuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvcXNvcnQuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvcXVpY2tfZXhpdC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGxpYi9yZWFscGF0aC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3BjcHkuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NwbmNweS5jIFwKQEAgLTM1OCw3ICsyNTYsNiBAQAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NzcG4uYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzZHVwLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xjYXQuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzbGNweS5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NuY2FzZWNtcC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NuY2F0LmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc25jbXAuYyBcCkBAIC0zNjYsMjM4ICsyNjMsMjY4IEBACiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2Nzbmxlbi5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NwYnJrLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc3Nwbi5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NzdHIuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzdG9rLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jaHIuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbWNweS5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtbW92ZS5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtc2V0LmMgXAogCiBsaWJjX3Vwc3RyZWFtX25ldGJzZF9zcmNfZmlsZXMgOj0gXAotICAgIHVwc3RyZWFtLW5ldGJzZC9jb21tb24vbGliL2xpYmMvaGFzaC9zaGExL3NoYTEuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2NvbW1vbi9saWIvbGliYy9pbmV0L2luZXRfYWRkci5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9jb21wYXQtNDMvY3JlYXQuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL2Z0dy5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vbmZ0dy5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vbmljZS5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vcG9wZW4uYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3BzaWduYWwuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3NldGptcGVyci5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vdXRpbWUuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5ldC9pbmV0X250b2EuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5ldC9pbmV0X250b3AuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5ldC9pbmV0X3B0b24uYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvaXNjL2V2X3N0cmVhbXMuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvaXNjL2V2X3RpbWVycy5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9yZWdjb21wLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3JlZ2Vycm9yLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3JlZ2V4ZWMuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvcmVnZnJlZS5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9zdGRpby9nZXRkZWxpbS5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9zdGRpby9nZXRsaW5lLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9ic2VhcmNoLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9kaXYuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2RyYW5kNDguYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2VyYW5kNDguYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2V4aXQuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2pyYW5kNDguYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2xkaXYuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2xsZGl2LmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9scmFuZDQ4LmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9tcmFuZDQ4LmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9ucmFuZDQ4LmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9fcmFuZDQ4LmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9zZWVkNDguYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3NyYW5kNDguYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3RkZWxldGUuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3RmaW5kLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi90c2VhcmNoLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9tZW1jY3B5LmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9zdHJjYXNlc3RyLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9zdHJjb2xsLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9zdHJ4ZnJtLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3RocmVhZC1zdHViL19faXN0aHJlYWRlZC5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy91bmlzdGQva2lsbHBnLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9jb21tb24vbGliL2xpYmMvc3RkbGliL3JhbmRvbS5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvZ2VuL2Z0dy5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvZ2VuL25mdHcuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2dlbi9uaWNlLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9nZW4vcG9wZW4uYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2dlbi9wc2lnbmFsLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9nZW4vdXRpbWUuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2dlbi91dG1wLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmV0L25zYXBfYWRkci5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVnZXgvcmVnY29tcC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVnZXgvcmVnZXJyb3IuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L3JlZ2V4ZWMuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L3JlZ2ZyZWUuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9ic2VhcmNoLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvZGl2LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvZHJhbmQ0OC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2VyYW5kNDguYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9pbnNxdWUuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9qcmFuZDQ4LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvbGRpdi5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2xsZGl2LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvbHJhbmQ0OC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL21yYW5kNDguYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9ucmFuZDQ4LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvX3JhbmQ0OC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL3JhbmRfci5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL3JlbXF1ZS5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL3NlZWQ0OC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL3NyYW5kNDguYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0cmluZy9tZW1jY3B5LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdHJpbmcvc3RyY2FzZXN0ci5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNvbGwuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0cmluZy9zdHJ4ZnJtLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy91bmlzdGQva2lsbHBnLmMgXAogCi0jIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBzb3VyY2UgZmlsZXMgZ28gaGVyZQotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLGFybSkKLWxpYmNfY29tbW9uX3NyY19maWxlcyArPSBcCi0gICAgYmlvbmljL21lbWNoci5jIFwKLSAgICBiaW9uaWMvbWVtbW92ZS5jLmFybSBcCi0gICAgYmlvbmljL21lbXJjaHIuYyBcCi0gICAgYmlvbmljL3N0cmNoci5jcHAgXAotICAgIGJpb25pYy9zdHJubGVuLmMgXAotICAgIHN0cmluZy9iY29weS5jIFwKLSAgICBzdHJpbmcvaW5kZXguYyBcCi0gICAgc3RyaW5nL3N0cmxjYXQuYyBcCi0gICAgc3RyaW5nL3N0cmxjcHkuYyBcCi0gICAgc3RyaW5nL3N0cm5jYXQuYyBcCi0gICAgc3RyaW5nL3N0cm5jbXAuYyBcCi0gICAgc3RyaW5nL3N0cm5jcHkuYyBcCi0gICAgc3RyaW5nL3N0cnJjaHIuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2F0LmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2Noci5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjbXAuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY3B5LmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xlbi5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NyY2hyLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jbXAuYyBcCitsaWJjX3Vwc3RyZWFtX29wZW5ic2RfZ2R0b2Ffc3JjX2ZpbGVzIDo9IFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2FuZHJvaWQvZ2R0b2Ffc3VwcG9ydC5jcHAgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvZG1pc2MuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9kdG9hLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvZ2R0b2EuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9nZXRoZXguYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9nbWlzYy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2hkX2luaXQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9oZHRvYS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2hleG5hbi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2xkdG9hLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvbWlzYy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3NtaXNjLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3RydG9kLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3RydG9kZy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N0cnRvZi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N0cnRvcmQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9zdW0uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS91bHAuYyBcCiAKLWVuZGlmICMgYXJtCitsaWJjX3Vwc3RyZWFtX29wZW5ic2RfZ2R0b2Ffc3JjX2ZpbGVzXzMyIDo9IFwKKyAgICAkKGxpYmNfdXBzdHJlYW1fb3BlbmJzZF9nZHRvYV9zcmNfZmlsZXMpIFwKIAotaWZlcSAoJChUQVJHRVRfQVJDSCksIGFybTY0KQotI1RPRE86IFJlcGxhY2UgQyBzdHVicyB3aXRoIG9wdGltaXNlZCBhc3NlbWJseQotbGliY19jb21tb25fc3JjX2ZpbGVzICs9IFwKLSAgICBiaW9uaWMvbWVtY2hyLmMgICBcCi0gICAgYmlvbmljL21lbWNtcC5jICAgXAotICAgIGJpb25pYy9tZW1jcHkuYyAgIFwKLSAgICBiaW9uaWMvbWVtbW92ZS5jICBcCi0gICAgYmlvbmljL21lbXJjaHIuYyAgXAotICAgIGJpb25pYy9tZW1zZXQuYyAgIFwKLSAgICBiaW9uaWMvc3RyY2hyLmNwcCBcCi0gICAgYmlvbmljL3N0cm5sZW4uYyAgXAotICAgIHN0cmluZy9iY29weS5jICAgIFwKLSAgICBzdHJpbmcvaW5kZXguYyAgICBcCi0gICAgc3RyaW5nL21lbWNtcDE2LmMgXAotICAgIHN0cmluZy9zdHJjYXQuYyAgIFwKLSAgICBzdHJpbmcvc3RyY21wLmMgICBcCi0gICAgc3RyaW5nL3N0cmNweS5jICAgXAotICAgIHN0cmluZy9zdHJsY2F0LmMgIFwKLSAgICBzdHJpbmcvc3RybGNweS5jICBcCi0gICAgc3RyaW5nL3N0cmxlbi5jICAgXAotICAgIHN0cmluZy9zdHJuY2F0LmMgIFwKLSAgICBzdHJpbmcvc3RybmNtcC5jICBcCi0gICAgc3RyaW5nL3N0cm5jcHkuYyAgXAotICAgIHN0cmluZy9zdHJyY2hyLmMgIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjYXQuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2hyLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NtcC5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjcHkuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzbGVuLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc3JjaHIuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbWNtcC5jIFwKK2xpYmNfdXBzdHJlYW1fb3BlbmJzZF9nZHRvYV9zcmNfZmlsZXNfNjQgOj0gXAorICAgICQobGliY191cHN0cmVhbV9vcGVuYnNkX2dkdG9hX3NyY19maWxlcykgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3RydG9yUS5jIFwKIAotZW5kaWYgIyBhcm02NAorbGliY191cHN0cmVhbV9vcGVuYnNkX3NyY19maWxlcyA6PSBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9jcnlwdC9hcmM0cmFuZG9tLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvY3J5cHQvYXJjNHJhbmRvbV91bmlmb3JtLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2FsYXJtLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2N0eXBlXy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9leGVjLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2ZubWF0Y2guYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vZnRvay5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9nZXRwcm9nbmFtZS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9pc2N0eXBlLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL3NldHByb2duYW1lLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL3RpbWUuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vdG9sb3dlcl8uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vdG91cHBlcl8uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvYnRvd2MuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvbWJybGVuLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL21ic3Rvd2NzLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL21idG93Yy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3Njb2xsLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvZC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2YuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG9pbWF4LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvbC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2xkLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvbGwuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG9tYnMuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG91bC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b3VsbC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b3VtYXguYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzeGZybS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3RvYi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3RvbWIuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaHRvbmwuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaHRvbnMuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9hZGRyLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfbG5hb2YuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9tYWtlYWRkci5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X25ldG9mLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfbmV0d29yay5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X250b2EuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9udG9wLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfcHRvbi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9udG9obC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9udG9ocy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2FzcHJpbnRmLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vY2xyZXJyLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZHByaW50Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Zkb3Blbi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Zlb2YuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZXJyb3IuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZmx1c2guYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0Yy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRsbi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRwb3MuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0cy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXR3Yy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXR3cy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZpbGVuby5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZpbmRmcC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZwcmludGYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHVyZ2UuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHV0Yy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXRzLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1dHdjLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1dHdzLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnJlYWQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcmVvcGVuLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnNjYW5mLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnNlZWsuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mc2V0cG9zLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnRlbGwuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mdW5vcGVuLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnZ3cml0ZS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z3YWxrLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZndpZGUuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9md3ByaW50Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z3cml0ZS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z3c2NhbmYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXRjLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0Y2hhci5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2dldGRlbGltLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0bGluZS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2dldHMuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXR3Yy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2dldHdjaGFyLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vbWFrZWJ1Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL21rdGVtcC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3BlcnJvci5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ByaW50Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3B1dGMuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXRjaGFyLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0cy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHdjLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0d2NoYXIuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9yZWZpbGwuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9yZW1vdmUuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9yZXdpbmQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9yZ2V0LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc2NhbmYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zZXRidWYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zZXRidWZmZXIuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zZXR2YnVmLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc3NjYW5mLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc3RkaW8uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zd3ByaW50Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3N3c2NhbmYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby90ZW1wbmFtLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdG1wbmFtLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdW5nZXRjLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdW5nZXR3Yy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zhc3ByaW50Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ZkcHJpbnRmLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdmZwcmludGYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92ZnNjYW5mLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdmZ3cHJpbnRmLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdmZ3c2NhbmYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92cHJpbnRmLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnNjYW5mLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnNucHJpbnRmLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnNwcmludGYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92c3NjYW5mLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnN3cHJpbnRmLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnN3c2NhbmYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92d3ByaW50Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Z3c2NhbmYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby93YnVmLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vd3ByaW50Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3dzY2FuZi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3dzZXR1cC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9hdGV4aXQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvYXRvaS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9hdG9sLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2F0b2xsLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2V4aXQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvZ2V0ZW52LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2xzZWFyY2guYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc2V0ZW52LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvaW1heC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b2wuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG9sbC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b3VsLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvdWxsLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvdW1heC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zeXN0ZW0uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvdGZpbmQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvdHNlYXJjaC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjYXNlY21wLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNzcG4uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RyZHVwLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5kdXAuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RycGJyay5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJzZXAuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3Ryc3BuLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cnN0ci5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJ0b2suYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvd2NzbGNweS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy93Y3NzdHIuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvd2Nzd2lkdGguYyBcCiAKLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLG1pcHMpCi1saWJjX2NvbW1vbl9zcmNfZmlsZXMgKz0gXAotICAgIGJpb25pYy9tZW1jaHIuYyBcCi0gICAgYmlvbmljL21lbWNtcC5jIFwKLSAgICBiaW9uaWMvbWVtcmNoci5jIFwKLSAgICBiaW9uaWMvc3RyY2hyLmNwcCBcCi0gICAgYmlvbmljL3N0cm5sZW4uYyBcCi0gICAgc3RyaW5nL2Jjb3B5LmMgXAotICAgIHN0cmluZy9pbmRleC5jIFwKLSAgICBzdHJpbmcvc3RyY2F0LmMgXAotICAgIHN0cmluZy9zdHJjbXAuYyBcCi0gICAgc3RyaW5nL3N0cmNweS5jIFwKLSAgICBzdHJpbmcvc3RybGNhdC5jIFwKLSAgICBzdHJpbmcvc3RybGNweS5jIFwKLSAgICBzdHJpbmcvc3RybmNhdC5jIFwKLSAgICBzdHJpbmcvc3RybmNtcC5jIFwKLSAgICBzdHJpbmcvc3RybmNweS5jIFwKLSAgICBzdHJpbmcvc3RycmNoci5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjYXQuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2hyLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NtcC5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjcHkuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzbGVuLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc3JjaHIuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbWNtcC5jIFwKLQotZW5kaWYgIyBtaXBzCi0KLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLCQoZmlsdGVyICQoVEFSR0VUX0FSQ0gpLHg4Nl82NCkpCi1saWJjX2NvbW1vbl9zcmNfZmlsZXMgKz0gXAotICAgIGJpb25pYy9tZW1jaHIuYyBcCi0gICAgYmlvbmljL21lbWNtcC5jIFwKLSAgICBiaW9uaWMvbWVtY3B5LmMgXAotICAgIGJpb25pYy9tZW1tb3ZlLmMgXAotICAgIGJpb25pYy9tZW1yY2hyLmMgXAotICAgIGJpb25pYy9tZW1zZXQuYyBcCi0gICAgYmlvbmljL3N0cmNoci5jcHAgXAotICAgIGJpb25pYy9zdHJubGVuLmMgXAotICAgIHN0cmluZy9iY29weS5jIFwKLSAgICBzdHJpbmcvaW5kZXguYyBcCi0gICAgc3RyaW5nL3N0cmNhdC5jIFwKLSAgICBzdHJpbmcvc3RyY21wLmMgXAotICAgIHN0cmluZy9zdHJjcHkuYyBcCi0gICAgc3RyaW5nL3N0cmxjYXQuYyBcCi0gICAgc3RyaW5nL3N0cmxjcHkuYyBcCi0gICAgc3RyaW5nL3N0cmxlbi5jIFwKLSAgICBzdHJpbmcvc3RybmNhdC5jIFwKLSAgICBzdHJpbmcvc3RybmNtcC5jIFwKLSAgICBzdHJpbmcvc3RybmNweS5jIFwKLSAgICBzdHJpbmcvc3RycmNoci5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjYXQuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2hyLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NtcC5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjcHkuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzbGVuLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc3JjaHIuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbWNtcC5jIFwKLQotZW5kaWYgIyB4ODZfNjQKLQotaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtKQotICBpZmVxICgkKHN0cmlwICQoVEFSR0VUX0NQVV9WQVJJQU5UKSksKQotICAgICQod2FybmluZyBUQVJHRVRfQVJDSCBpcyBhcm0sIGJ1dCBUQVJHRVRfQ1BVX1ZBUklBTlQgaXMgbm90IGRlZmluZWQpCi0gIGVuZGlmCi1lbmRpZgotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyMgQWRkIGNwdSBzcGVjaWZpYyBzb3VyY2UgZmlsZXMuCi0jIwotIyMgVGhpcyBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLCBidXQgaXQgd2lsbCBvbmx5IGFkZAotIyMgdGhlIGZpcnN0IHNvdXJjZSBmaWxlIGZvciBlYWNoIHVuaXF1ZSAkKDEpLgotIyMgJCgxKTogVW5pcXVlIGlkZW50aWZpZXIgdG8gaWRlbnRpZnkgdGhlIGNwdSB2YXJpYW50Ci0jIyAgICAgICBpbXBsZW1lbnRhdGlvbi4KLSMjICQoMik6IENwdSBzcGVjaWZpYyBzb3VyY2UgZmlsZS4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWRlZmluZSBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMKLSQoaWYgJChmaWx0ZXIgdHJ1ZSwkKF9MSUJDX0FSQ0hfQ1BVX1ZBUklBTlRfSEFTXyQoMSkpKSwgXAotCSwgXAotICAgICAkKGV2YWwgX0xJQkNfQVJDSF9DUFVfVkFSSUFOVF9IQVNfJCgxKSA6PSB0cnVlKSBcCi0gICAgICQoZXZhbCBfTElCQ19BUkNIX0NQVV9WQVJJQU5UX1NSQ19GSUxFLiQoMSkgOj0gJCgyKSkgXAotICAgICAkKGV2YWwgX0xJQkNfQVJDSF9DUFVfVkFSSUFOVF9TUkNfRklMRVMgKz0gJCgyKSkgXAotKQotZW5kZWYKLQotX0xJQkNfQVJDSF9DT01NT05fU1JDX0ZJTEVTIDo9Ci1fTElCQ19BUkNIX0NQVV9WQVJJQU5UX1NSQ19GSUxFUyA6PQotX0xJQkNfQVJDSF9TVEFUSUNfU1JDX0ZJTEVTIDo9Ci1fTElCQ19BUkNIX0RZTkFNSUNfU1JDX0ZJTEVTIDo9Ci1fTElCQ19BUkNIX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9Ci0KLWxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzICs9IFwKLSAgICAkKExPQ0FMX1BBVEgpL2FyY2gtJChUQVJHRVRfQVJDSCkvJChUQVJHRVRfQVJDSCkubWsKLWluY2x1ZGUgJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpLyQoVEFSR0VUX0FSQ0gpLm1rCi0KLWxpYmNfYmlvbmljX3NyY19maWxlcyArPSAkKF9MSUJDX0FSQ0hfQ09NTU9OX1NSQ19GSUxFUykKLWxpYmNfYmlvbmljX3NyY19maWxlcyArPSAkKF9MSUJDX0FSQ0hfQ1BVX1ZBUklBTlRfU1JDX0ZJTEVTKQotbGliY19hcmNoX3N0YXRpY19zcmNfZmlsZXMgOj0gJChfTElCQ19BUkNIX1NUQVRJQ19TUkNfRklMRVMpCi1saWJjX2FyY2hfZHluYW1pY19zcmNfZmlsZXMgOj0gJChfTElCQ19BUkNIX0RZTkFNSUNfU1JDX0ZJTEVTKQotbGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMgKz0gJChfTElCQ19BUkNIX0FERElUSU9OQUxfREVQRU5ERU5DSUVTKQorbGliY19hcmNoX3N0YXRpY19zcmNfZmlsZXMgOj0gXAorICAgIGJpb25pYy9kbF9pdGVyYXRlX3BoZHJfc3RhdGljLmNwcCBcCiAKICMgRGVmaW5lIHNvbWUgY29tbW9uIGNmbGFncwogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogbGliY19jb21tb25fY2ZsYWdzIDo9IFwKLSAgICAtREFORFJPSURfQ0hBTkdFUyBcCiAgICAgLURfTElCQz0xIFwKLSAgICAtV2FsbCAtV2V4dHJhIFwKKyAgICAtV2FsbCAtV2V4dHJhIC1XdW51c2VkIFwKKworaWZuZXEgKCQoVEFSR0VUX1VTRVNfTE9HRCksZmFsc2UpCitsaWJjX2NvbW1vbl9jZmxhZ3MgKz0gLURUQVJHRVRfVVNFU19MT0dECitlbmRpZgorCit1c2VfY2xhbmcgOj0gZmFsc2UKIAogIyBUcnkgdG8gY2F0Y2ggdHlwaWNhbCAzMi1iaXQgYXNzdW1wdGlvbnMgdGhhdCBicmVhayB3aXRoIDY0LWJpdCBwb2ludGVycy4KIGxpYmNfY29tbW9uX2NmbGFncyArPSBcCiAgICAgLVdlcnJvcj1wb2ludGVyLXRvLWludC1jYXN0IFwKICAgICAtV2Vycm9yPWludC10by1wb2ludGVyLWNhc3QgXAogICAgIC1XZXJyb3I9dHlwZS1saW1pdHMgXAorICAgIC1XZXJyb3IgXAogCiBpZmVxICgkKHN0cmlwICQoREVCVUdfQklPTklDX0xJQkMpKSx0cnVlKQogICBsaWJjX2NvbW1vbl9jZmxhZ3MgKz0gLURERUJVRwogZW5kaWYKIAoraWZlcSAoJChNQUxMT0NfSU1QTCksZGxtYWxsb2MpCisgIGxpYmNfY29tbW9uX2NmbGFncyArPSAtRFVTRV9ETE1BTExPQworICBsaWJjX21hbGxvY19zcmMgOj0gYmlvbmljL2RsbWFsbG9jLmMKK2Vsc2UKKyAgbGliY19jb21tb25fY2ZsYWdzICs9IC1EVVNFX0pFTUFMTE9DCisgIGxpYmNfbWFsbG9jX3NyYyA6PSBiaW9uaWMvamVtYWxsb2Nfd3JhcHBlci5jcHAKKyAgbGliY19jb21tb25fY19pbmNsdWRlcyArPSBleHRlcm5hbC9qZW1hbGxvYy9pbmNsdWRlCitlbmRpZgorCiAjIFRvIGN1c3RvbWl6ZSBkbG1hbGxvYydzIGFsaWdubWVudCwgc2V0IEJPQVJEX01BTExPQ19BTElHTk1FTlQgaW4KICMgdGhlIGFwcHJvcHJpYXRlIEJvYXJkQ29uZmlnLm1rIGZpbGUuCiAjCkBAIC02MDUsMzYgKzUzMiw2IEBACiAgIGxpYmNfY29tbW9uX2NmbGFncyArPSAtRE1BTExPQ19BTElHTk1FTlQ9JChCT0FSRF9NQUxMT0NfQUxJR05NRU5UKQogZW5kaWYKIAotIyBjcnRicmFuZC5jIG5lZWRzIDxzdGRpbnQuaD4gYW5kIGEgI2RlZmluZSBmb3IgdGhlIHBsYXRmb3JtIFNESyB2ZXJzaW9uLgotbGliY19jcnRfdGFyZ2V0X2NmbGFncyA6PSBcCi0gICAgLUkkKExPQ0FMX1BBVEgpL2luY2x1ZGUgXAotICAgIC1JJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpL2luY2x1ZGUgXAotICAgIC1EUExBVEZPUk1fU0RLX1ZFUlNJT049JChQTEFURk9STV9TREtfVkVSU0lPTikgXAotCi1pZmVxICgkKFRBUkdFVF9BUkNIKSxhcm0pCi0gIGxpYmNfY29tbW9uX2NmbGFncyArPSAtRFNPRlRGTE9BVAotICBsaWJjX2NvbW1vbl9jZmxhZ3MgKz0gLWZzdHJpY3QtYWxpYXNpbmcKLSAgbGliY19jcnRfdGFyZ2V0X2NmbGFncyArPSAtbXRodW1iLWludGVyd29yawotZW5kaWYgIyBhcm0KLQotaWZlcSAoJChUQVJHRVRfQVJDSCksbWlwcykKLSAgaWZuZXEgKCQoQVJDSF9NSVBTX0hBU19GUFUpLHRydWUpCi0gICAgbGliY19jb21tb25fY2ZsYWdzICs9IC1EU09GVEZMT0FUCi0gIGVuZGlmCi0gIGxpYmNfY29tbW9uX2NmbGFncyArPSAtZnN0cmljdC1hbGlhc2luZwotICBsaWJjX2NydF90YXJnZXRfY2ZsYWdzICs9ICQoVEFSR0VUX0dMT0JBTF9DRkxBR1MpCi1lbmRpZiAjIG1pcHMKLQotaWZlcSAoJChUQVJHRVRfQVJDSCkseDg2KQotICBsaWJjX2NydF90YXJnZXRfY2ZsYWdzICs9IC1tMzIKLSAgbGliY19jcnRfdGFyZ2V0X2xkZmxhZ3MgOj0gLW1lbGZfaTM4NgotZW5kaWYgIyB4ODYKLQotaWZlcSAoJChUQVJHRVRfQVJDSCkseDg2XzY0KQotICBsaWJjX2NydF90YXJnZXRfY2ZsYWdzICs9IC1tNjQKLSAgbGliY19jcnRfdGFyZ2V0X2xkZmxhZ3MgOj0gLW1lbGZfeDg2XzY0Ci1lbmRpZiAjIHg4Nl82NAotCiAjIERlZmluZSBBTkRST0lEX1NNUCBhcHByb3ByaWF0ZWx5LgogaWZlcSAoJChUQVJHRVRfQ1BVX1NNUCksdHJ1ZSkKICAgICBsaWJjX2NvbW1vbl9jZmxhZ3MgKz0gLURBTkRST0lEX1NNUD0xCkBAIC02NTIsMTQxICs1NDksMjQgQEAKIAogIyBEZWZpbmUgc29tZSBjb21tb24gaW5jbHVkZXMKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWxpYmNfY29tbW9uX2NfaW5jbHVkZXMgOj0gXAotCQkkKExPQ0FMX1BBVEgpL3N0ZGxpYiAgXAotCQkkKExPQ0FMX1BBVEgpL3N0cmluZyAgXAotCQkkKExPQ0FMX1BBVEgpL3N0ZGlvICAgXAotCQlleHRlcm5hbC9zYWZlLWlvcC9pbmNsdWRlCi0KLSMgRGVmaW5lIHRoZSBsaWJjIHJ1bi10aW1lIChjcnQpIHN1cHBvcnQgb2JqZWN0IGZpbGVzIHRoYXQgbXVzdCBiZSBidWlsdCwKLSMgd2hpY2ggYXJlIG5lZWRlZCB0byBidWlsZCBhbGwgb3RoZXIgb2JqZWN0cyAoc2hhcmVkL3N0YXRpYyBsaWJzIGFuZAotIyBleGVjdXRhYmxlcykKLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMgQVJNLCBBcm02NCwgTUlQUywgYW5kIHg4NiBhbGwgbmVlZCBjcnRiZWdpbl9zby9jcnRlbmRfc28uCi0jCi0jIEZvciB4ODYsIHRoZSAuaW5pdCBzZWN0aW9uIG11c3QgcG9pbnQgdG8gYSBmdW5jdGlvbiB0aGF0IGNhbGxzIGFsbAotIyBlbnRyaWVzIGluIHRoZSAuY3RvcnMgc2VjdGlvbi4gKG9uIEFSTSB0aGlzIGlzIGRvbmUgdGhyb3VnaCB0aGUKLSMgLmluaXRfYXJyYXkgc2VjdGlvbiBpbnN0ZWFkKS4KLSMKLSMgRm9yIGFsbCB0aGUgcGxhdGZvcm1zLCB0aGUgLmZpbmlfYXJyYXkgc2VjdGlvbiBtdXN0IHBvaW50IHRvIGEgZnVuY3Rpb24KLSMgdGhhdCB3aWxsIGNhbGwgX19jeGFfZmluYWxpemUoJl9fZHNvX2hhbmRsZSkgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQKLSMgc3RhdGljIEMrKyBkZXN0cnVjdG9ycyBhcmUgcHJvcGVybHkgY2FsbGVkIG9uIGRsY2xvc2UoKS4KLSMKLWxpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9maWxlIDo9ICQoTE9DQUxfUEFUSCkvYXJjaC1jb21tb24vYmlvbmljL2NydGJlZ2luLmMKLWxpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9zb19maWxlIDo9ICQoTE9DQUxfUEFUSCkvYXJjaC1jb21tb24vYmlvbmljL2NydGJlZ2luX3NvLmMKLQotaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtKQotICAgIGxpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3MgOj0KLWVuZGlmCi1pZmVxICgkKFRBUkdFVF9BUkNIKSxhcm02NCkKLSAgICBsaWJjX2NydF90YXJnZXRfc29fY2ZsYWdzIDo9Ci0gICAgbGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX2ZpbGUgOj0gJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpL2Jpb25pYy9jcnRiZWdpbi5jCi1lbmRpZgotaWZlcSAoJChUQVJHRVRfQVJDSCksbWlwcykKLSAgICBsaWJjX2NydF90YXJnZXRfc29fY2ZsYWdzIDo9IC1mUElDCi0gICAgbGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX2ZpbGUgOj0gJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpL2Jpb25pYy9jcnRiZWdpbi5jCi1lbmRpZgotaWZlcSAoJChUQVJHRVRfQVJDSCksJChmaWx0ZXIgJChUQVJHRVRfQVJDSCkseDg2IHg4Nl82NCkpCi0gICAgbGliY19jcnRfdGFyZ2V0X3NvX2NmbGFncyA6PSAtZlBJQwotZW5kaWYKLWxpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3MgKz0gJChsaWJjX2NydF90YXJnZXRfY2ZsYWdzKQotCi0jIFNlZSB0aGUgY29tbWVudCBpbiBjcnRicmFuZC5jIGZvciB0aGUgcmVhc29uIHdoeSB3ZSBuZWVkIHRvIGdlbmVyYXRlCi0jIGNydGJyYW5kLnMgYmVmb3JlIGdlbmVyYXRpbmcgY3J0YnJhbmQuby4KLUdFTiA6PSAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YnJhbmQucwotJChHRU4pOiAkKExPQ0FMX1BBVEgpL2Jpb25pYy9jcnRicmFuZC5jCi0JQG1rZGlyIC1wICQoZGlyICRAKQotCSQoaGlkZSkgJChUQVJHRVRfQ0MpICQobGliY19jcnRfdGFyZ2V0X3NvX2NmbGFncykgLVMgXAotCQktTUQgLU1GICQoQDolLnM9JS5kKSAtbyAkQCAkPAotCSQoaGlkZSkgc2VkIC1pIC1lICcvXC5ub3RlXC5BQkktdGFnL3MvcHJvZ2JpdHMvbm90ZS8nICRACi0JJChjYWxsIHRyYW5zZm9ybS1kLXRvLXAtYXJncywkKEA6JS5zPSUuZCksJChAOiUucz0lLlApKQotLWluY2x1ZGUgJChHRU46JS5zPSUuUCkKLUFMTF9HRU5FUkFURURfU09VUkNFUyArPSAkKEdFTikKLQotR0VOIDo9ICQoVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRicmFuZC5vCi0kKEdFTik6ICQoVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRicmFuZC5zCi0JQG1rZGlyIC1wICQoZGlyICRAKQotCSQoaGlkZSkgJChUQVJHRVRfQ0MpICQobGliY19jcnRfdGFyZ2V0X3NvX2NmbGFncykgLW8gJEAgLWMgJDwKLUFMTF9HRU5FUkFURURfU09VUkNFUyArPSAkKEdFTikKLQotR0VOIDo9ICQoVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRiZWdpbl9zby5vCi0kKEdFTik6ICQobGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX3NvX2ZpbGUpCi0JQG1rZGlyIC1wICQoZGlyICRAKQotCSQoaGlkZSkgJChUQVJHRVRfQ0MpICQobGliY19jcnRfdGFyZ2V0X3NvX2NmbGFncykgXAotCQktTUQgLU1GICQoQDolLm89JS5kKSAtbyAkQCAtYyAkPAotCSQodHJhbnNmb3JtLWQtdG8tcCkKLS1pbmNsdWRlICQoR0VOOiUubz0lLlApCi1BTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCi0KLUdFTiA6PSAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0ZW5kX3NvLm8KLSQoR0VOKTogJChMT0NBTF9QQVRIKS9hcmNoLWNvbW1vbi9iaW9uaWMvY3J0ZW5kX3NvLlMKLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJChoaWRlKSAkKFRBUkdFVF9DQykgJChsaWJjX2NydF90YXJnZXRfc29fY2ZsYWdzKSBcCi0JCS1NRCAtTUYgJChAOiUubz0lLmQpIC1vICRAIC1jICQ8Ci0JJCh0cmFuc2Zvcm0tZC10by1wKQotLWluY2x1ZGUgJChHRU46JS5vPSUuUCkKLUFMTF9HRU5FUkFURURfU09VUkNFUyArPSAkKEdFTikKLQotIyBUaGUgZm9sbG93aW5nIHR3byBhcmUgaW5zdGFsbGVkIHRvIGRldmljZQotR0VOIDo9ICQoVEFSR0VUX09VVF9TSEFSRURfTElCUkFSSUVTKS9jcnRiZWdpbl9zby5vCi0kKEdFTik6ICQoVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRiZWdpbl9zby5vCi0JJChoaWRlKSBta2RpciAtcCAkKGRpciAkQCkgJiYgY3AgLWYgJDwgJEAKLUFMTF9HRU5FUkFURURfU09VUkNFUyArPSAkKEdFTikKLQotR0VOIDo9ICQoVEFSR0VUX09VVF9TSEFSRURfTElCUkFSSUVTKS9jcnRlbmRfc28ubwotJChHRU4pOiAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0ZW5kX3NvLm8KLQkkKGhpZGUpIG1rZGlyIC1wICQoZGlyICRAKSAmJiBjcCAtZiAkPCAkQAotQUxMX0dFTkVSQVRFRF9TT1VSQ0VTICs9ICQoR0VOKQotCi0KLUdFTiA6PSAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fc3RhdGljMS5vCi0kKEdFTik6ICQobGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX2ZpbGUpCi0JQG1rZGlyIC1wICQoZGlyICRAKQotCSQoaGlkZSkgJChUQVJHRVRfQ0MpICQobGliY19jcnRfdGFyZ2V0X2NmbGFncykgXAotCQktTUQgLU1GICQoQDolLm89JS5kKSAtbyAkQCAtYyAkPAotCSQodHJhbnNmb3JtLWQtdG8tcCkKLS1pbmNsdWRlICQoR0VOOiUubz0lLlApCi1BTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCi0KLUdFTiA6PSAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fc3RhdGljLm8KLSQoR0VOKTogJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGJlZ2luX3N0YXRpYzEubyAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YnJhbmQubwotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkKGhpZGUpICQoVEFSR0VUX0xEKSAkKGxpYmNfY3J0X3RhcmdldF9sZGZsYWdzKSAtciAtbyAkQCAkXgotQUxMX0dFTkVSQVRFRF9TT1VSQ0VTICs9ICQoR0VOKQotCi1HRU4gOj0gJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGJlZ2luX2R5bmFtaWMxLm8KLSQoR0VOKTogJChsaWJjX2NydF90YXJnZXRfY3J0YmVnaW5fZmlsZSkKLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJChoaWRlKSAkKFRBUkdFVF9DQykgJChsaWJjX2NydF90YXJnZXRfY2ZsYWdzKSBcCi0JCS1NRCAtTUYgJChAOiUubz0lLmQpIC1vICRAIC1jICQ8Ci0JJCh0cmFuc2Zvcm0tZC10by1wKQotLWluY2x1ZGUgJChHRU46JS5vPSUuUCkKLUFMTF9HRU5FUkFURURfU09VUkNFUyArPSAkKEdFTikKLQotR0VOIDo9ICQoVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRiZWdpbl9keW5hbWljLm8KLSQoR0VOKTogJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGJlZ2luX2R5bmFtaWMxLm8gJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGJyYW5kLm8KLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJChoaWRlKSAkKFRBUkdFVF9MRCkgJChsaWJjX2NydF90YXJnZXRfbGRmbGFncykgLXIgLW8gJEAgJF4KLUFMTF9HRU5FUkFURURfU09VUkNFUyArPSAkKEdFTikKLQotIyBXZSByZW5hbWUgY3J0ZW5kLm8gdG8gY3J0ZW5kX2FuZHJvaWQubyB0byBhdm9pZCBhCi0jIG5hbWUgY2xhc2ggYmV0d2VlbiBnY2MgYW5kIGJpb25pYy4KLUdFTiA6PSAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0ZW5kX2FuZHJvaWQubwotJChHRU4pOiAkKExPQ0FMX1BBVEgpL2FyY2gtY29tbW9uL2Jpb25pYy9jcnRlbmQuUwotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkKGhpZGUpICQoVEFSR0VUX0NDKSAkKGxpYmNfY3J0X3RhcmdldF9jZmxhZ3MpIFwKLQkJLU1EIC1NRiAkKEA6JS5vPSUuZCkgLW8gJEAgLWMgJDwKLQkkKHRyYW5zZm9ybS1kLXRvLXApCi0taW5jbHVkZSAkKEdFTjolLm89JS5QKQotQUxMX0dFTkVSQVRFRF9TT1VSQ0VTICs9ICQoR0VOKQotCi0KLSMgVG8gZW5hYmxlIG1hbGxvYyBsZWFrIGNoZWNrIGZvciBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcywgYWRkCi0jICJXSVRIX01BTExPQ19DSEVDS19MSUJDX0EgOj0gdHJ1ZSIgdG8gYnVpbGRzcGVjLm1rCi1XSVRIX01BTExPQ19DSEVDS19MSUJDX0EgOj0gJChzdHJpcCAkKFdJVEhfTUFMTE9DX0NIRUNLX0xJQkNfQSkpCitsaWJjX2NvbW1vbl9jX2luY2x1ZGVzICs9IFwKKyAgICAkKExPQ0FMX1BBVEgpL3N0ZGlvICAgXAogCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jIGxpYmJpb25pY19zc3AuYSAtIHN0YWNrIHByb3RlY3RvciBjb2RlCisjIEFkZCBpbiB0aGUgYXJjaC1zcGVjaWZpYyBmbGFncy4KKyMgTXVzdCBiZSBjYWxsZWQgd2l0aCAkKGV2YWwpLgorIyAkKDEpOiB0aGUgTE9DQUxfIHZhcmlhYmxlIG5hbWUKKyMgJCgyKTogdGhlIGJpb25pYyB2YXJpYWJsZSBuYW1lIHRvIHB1bGwgaW4KK2RlZmluZSBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzCiskKDEpXyQoVEFSR0VUX0FSQ0gpICs9ICQoJCgyKV8kKFRBUkdFVF9BUkNIKSkKK2lmZGVmIFRBUkdFVF8yTkRfQVJDSAorJCgxKV8kKFRBUkdFVF8yTkRfQVJDSCkgKz0gJCgkKDIpXyQoVEFSR0VUXzJORF9BUkNIKSkKK2VuZGlmCitlbmRlZgorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgbGliY19zdGFja19wcm90ZWN0b3IuYSAtIHN0YWNrIHByb3RlY3RvciBjb2RlCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjCiAjIFRoZSBzdGFjayBwcm90ZWN0b3IgY29kZSBuZWVkcyB0byBiZSBjb21waWxlZApAQCAtNzk2LDE0ICs1NzYsMTYgQEAKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCiBMT0NBTF9TUkNfRklMRVMgOj0gYmlvbmljL19fc3RhY2tfY2hrX2ZhaWwuY3BwCi1MT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpIC1mbm8tc3RhY2stcHJvdGVjdG9yIC1XZXJyb3IKK0xPQ0FMX0NGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NmbGFncykgLWZuby1zdGFjay1wcm90ZWN0b3IKIExPQ0FMX0NPTkxZRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jb25seWZsYWdzKQogTE9DQUxfQ1BQRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jcHBmbGFncykKIExPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQotTE9DQUxfTU9EVUxFIDo9IGxpYmJpb25pY19zc3AKK0xPQ0FMX01PRFVMRSA6PSBsaWJjX3N0YWNrX3Byb3RlY3RvcgorTE9DQUxfQ0xBTkcgOj0gJCh1c2VfY2xhbmcpCiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KIAorJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX0NGTEFHUyxsaWJjX2NvbW1vbl9jZmxhZ3MpKQogaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQogCiAKQEAgLTgxMywyMCArNTk1LDM1IEBACiAKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCi1MT0NBTF9TUkNfRklMRVMgOj0gJChsaWJjX3R6Y29kZV9zcmNfZmlsZXMpCi1MT0NBTF9DRkxBR1MgOj0gXAotICAgICQobGliY19jb21tb25fY2ZsYWdzKSBcCi0gICAgLURTVERfSU5TUElSRUQ9MSBcCi0gICAgLURUWkRJUj1cIi9zeXN0ZW0vdXNyL3NoYXJlL3pvbmVpbmZvXCIgXAotICAgIC1EVE1fR01UT0ZGPXRtX2dtdG9mZiBcCi0gICAgLURVU0dfQ09NUEFUPTEKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGNhbGwgYWxsLWMtZmlsZXMtdW5kZXIsdHpjb2RlKQorIyB0emNvZGUgZG9lc24ndCBpbmNsdWRlIHdjc2Z0aW1lLCBzbyB3ZSB1c2UgdGhlIE9wZW5CU0Qgb25lLgorTE9DQUxfU1JDX0ZJTEVTICs9IHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvdGltZS93Y3NmdGltZS5jCisKK0xPQ0FMX0NGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NmbGFncykgXAorICAgIC1mdmlzaWJpbGl0eT1oaWRkZW4gXAorCisjIERvbid0IHVzZSByaWRpY3Vsb3VzIGFtb3VudHMgb2Ygc3RhY2suCitMT0NBTF9DRkxBR1MgKz0gLURBTExfU1RBVEUKKyMgSW5jbHVkZSB0enNldHdhbGwsIHRpbWVsb2NhbCwgdGltZWdtLCB0aW1lMnBvc2l4LCBhbmQgcG9zaXgydGltZS4KK0xPQ0FMX0NGTEFHUyArPSAtRFNURF9JTlNQSVJFRAorIyBUaGUgbmFtZSBvZiB0aGUgdG1fZ210b2ZmIGZpZWxkIGluIG91ciBzdHJ1Y3QgdG0uCitMT0NBTF9DRkxBR1MgKz0gLURUTV9HTVRPRkY9dG1fZ210b2ZmCisjIFdoZXJlIHdlIHN0b3JlIG91ciB0emRhdGEuCitMT0NBTF9DRkxBR1MgKz0gLURUWkRJUj1cIi9zeXN0ZW0vdXNyL3NoYXJlL3pvbmVpbmZvXCIKKyMgSW5jbHVkZSB0aW1lem9uZSBhbmQgZGF5bGlnaHQgZ2xvYmFscy4KK0xPQ0FMX0NGTEFHUyArPSAtRFVTR19DT01QQVQ9MQorTE9DQUxfQ0ZMQUdTICs9IC1ETk9fUlVOX1RJTUVfV0FSTklOR1NfQUJPVVRfWUVBUl8yMDAwX1BST0JMRU1TX1RIQU5LX1lPVQorTE9DQUxfQ0ZMQUdTICs9IC1EbGludAorCiBMT0NBTF9DT05MWUZMQUdTIDo9ICQobGliY19jb21tb25fY29ubHlmbGFncykKIExPQ0FMX0NQUEZMQUdTIDo9ICQobGliY19jb21tb25fY3BwZmxhZ3MpCi1MT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKSAkKExPQ0FMX1BBVEgpL3R6Y29kZS8KIExPQ0FMX01PRFVMRSA6PSBsaWJjX3R6Y29kZQorTE9DQUxfQ0xBTkcgOj0gJCh1c2VfY2xhbmcpCiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KIAorJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX0NGTEFHUyxsaWJjX2NvbW1vbl9jZmxhZ3MpKQogaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQogCiAKQEAgLTgzNiwyMCArNjMzLDMzIEBACiAKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCi1MT0NBTF9TUkNfRklMRVMgOj0gJChsaWJjX2Ruc19zcmNfZmlsZXMpCitMT0NBTF9TUkNfRklMRVMgOj0gXAorICAgICQoY2FsbCBhbGwtYy1maWxlcy11bmRlcixkbnMpIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaXNjL2V2X3N0cmVhbXMuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2lzYy9ldl90aW1lcnMuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3Jlc29sdi9tdGN0eHJlcy5jIFwKKwogTE9DQUxfQ0ZMQUdTIDo9IFwKICAgICAkKGxpYmNfY29tbW9uX2NmbGFncykgXAorICAgIC1EQU5EUk9JRF9DSEFOR0VTIFwKICAgICAtRElORVQ2IFwKKyAgICAtZnZpc2liaWxpdHk9aGlkZGVuIFwKKyAgICAtV25vLXVudXNlZC1wYXJhbWV0ZXIgXAorICAgIC1JJChMT0NBTF9QQVRIKS9kbnMvaW5jbHVkZSBcCiAgICAgLUkkKExPQ0FMX1BBVEgpL3ByaXZhdGUgXAotICAgIC1JJChMT0NBTF9QQVRIKS91cHN0cmVhbS1uZXRic2QvbGliYy9pbmNsdWRlICMgZm9yIE5ldEJTRCBwcml2YXRlIGhlYWRlcnMKKyAgICAtSSQoTE9DQUxfUEFUSCkvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2luY2x1ZGUgXAorICAgIC1JJChMT0NBTF9QQVRIKS91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlIFwKKyAgICAtaW5jbHVkZSBuZXRic2QtY29tcGF0LmggXAogCiBMT0NBTF9DT05MWUZMQUdTIDo9ICQobGliY19jb21tb25fY29ubHlmbGFncykKIExPQ0FMX0NQUEZMQUdTIDo9ICQobGliY19jb21tb25fY3BwZmxhZ3MpCiBMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKIExPQ0FMX01PRFVMRSA6PSBsaWJjX2RucworTE9DQUxfQ0xBTkcgOj0gJCh1c2VfY2xhbmcpCiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KIAorJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX0NGTEFHUyxsaWJjX2NvbW1vbl9jZmxhZ3MpKQogaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQogCiAKQEAgLTg2NSwxNiArNjc1LDIwIEBACiBMT0NBTF9TUkNfRklMRVMgOj0gJChsaWJjX3Vwc3RyZWFtX2ZyZWVic2Rfc3JjX2ZpbGVzKQogTE9DQUxfQ0ZMQUdTIDo9IFwKICAgICAkKGxpYmNfY29tbW9uX2NmbGFncykgXAotICAgIC1JJChMT0NBTF9QQVRIKS91cHN0cmVhbS1mcmVlYnNkIFwKLSAgICAtSSQoTE9DQUxfUEFUSCkvdXBzdHJlYW0tZnJlZWJzZC9saWJjL2luY2x1ZGUgXAotICAgIC1pbmNsdWRlIHVwc3RyZWFtLWZyZWVic2QvZnJlZWJzZC1jb21wYXQuaAorICAgIC1Xbm8tc2lnbi1jb21wYXJlIC1Xbm8tdW5pbml0aWFsaXplZCBcCisgICAgLUkkKExPQ0FMX1BBVEgpL3Vwc3RyZWFtLWZyZWVic2QvYW5kcm9pZC9pbmNsdWRlIFwKKyAgICAtSSQoTE9DQUxfUEFUSCkvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9pbmNsdWRlIFwKKyAgICAtaW5jbHVkZSBmcmVlYnNkLWNvbXBhdC5oIFwKKwogTE9DQUxfQ09OTFlGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2Nvbmx5ZmxhZ3MpCiBMT0NBTF9DUFBGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NwcGZsYWdzKQogTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCiBMT0NBTF9NT0RVTEUgOj0gbGliY19mcmVlYnNkCitMT0NBTF9DTEFORyA6PSAkKHVzZV9jbGFuZykKIExPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQobGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMpCiBMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PQogCiskKGV2YWwgJChjYWxsIHBhdGNoLXVwLWFyY2gtc3BlY2lmaWMtZmxhZ3MsTE9DQUxfQ0ZMQUdTLGxpYmNfY29tbW9uX2NmbGFncykpCiBpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCiAKIApAQCAtODkwLDE3ICs3MDQsODUgQEAKIExPQ0FMX1NSQ19GSUxFUyA6PSAkKGxpYmNfdXBzdHJlYW1fbmV0YnNkX3NyY19maWxlcykKIExPQ0FMX0NGTEFHUyA6PSBcCiAgICAgJChsaWJjX2NvbW1vbl9jZmxhZ3MpIFwKKyAgICAtV25vLXNpZ24tY29tcGFyZSAtV25vLXVuaW5pdGlhbGl6ZWQgXAogICAgIC1EUE9TSVhfTUlTVEFLRSBcCi0gICAgLUkkKExPQ0FMX1BBVEgpL3Vwc3RyZWFtLW5ldGJzZCBcCi0gICAgLUkkKExPQ0FMX1BBVEgpL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luY2x1ZGUgXAotICAgIC1pbmNsdWRlIHVwc3RyZWFtLW5ldGJzZC9uZXRic2QtY29tcGF0LmgKKyAgICAtSSQoTE9DQUxfUEFUSCkvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZSBcCisgICAgLUkkKExPQ0FMX1BBVEgpL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmNsdWRlIFwKKyAgICAtaW5jbHVkZSBuZXRic2QtY29tcGF0LmggXAorCiBMT0NBTF9DT05MWUZMQUdTIDo9ICQobGliY19jb21tb25fY29ubHlmbGFncykKIExPQ0FMX0NQUEZMQUdTIDo9ICQobGliY19jb21tb25fY3BwZmxhZ3MpCiBMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKIExPQ0FMX01PRFVMRSA6PSBsaWJjX25ldGJzZAorTE9DQUxfQ0xBTkcgOj0gJCh1c2VfY2xhbmcpCiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KIAorJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX0NGTEFHUyxsaWJjX2NvbW1vbl9jZmxhZ3MpKQorJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX1NSQ19GSUxFUyxsaWJjX25ldGJzZF9zcmNfZmlsZXMpKQoraW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgbGliY19vcGVuYnNkLmEgLSB1cHN0cmVhbSBPcGVuQlNEIEMgbGlicmFyeSBjb2RlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFRoZXNlIGZpbGVzIGFyZSBidWlsdCB3aXRoIHRoZSBvcGVuYnNkLWNvbXBhdC5oIGhlYWRlciBmaWxlCisjIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQuCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChsaWJjX3Vwc3RyZWFtX29wZW5ic2Rfc3JjX2ZpbGVzKQorTE9DQUxfQ0ZMQUdTIDo9IFwKKyAgICAkKGxpYmNfY29tbW9uX2NmbGFncykgXAorICAgIC1Xbm8tc2lnbi1jb21wYXJlIC1Xbm8tdW5pbml0aWFsaXplZCAtV25vLXVudXNlZC1wYXJhbWV0ZXIgXAorICAgIC1JJChMT0NBTF9QQVRIKS9wcml2YXRlIFwKKyAgICAtSSQoTE9DQUxfUEFUSCkvdXBzdHJlYW0tb3BlbmJzZC9hbmRyb2lkL2luY2x1ZGUgXAorICAgIC1JJChMT0NBTF9QQVRIKS91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2luY2x1ZGUgXAorICAgIC1JJChMT0NBTF9QQVRIKS91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hLyBcCisgICAgLWluY2x1ZGUgb3BlbmJzZC1jb21wYXQuaCBcCisKK0xPQ0FMX0NPTkxZRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jb25seWZsYWdzKQorTE9DQUxfQ1BQRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jcHBmbGFncykKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQorTE9DQUxfTU9EVUxFIDo9IGxpYmNfb3BlbmJzZAorTE9DQUxfQ0xBTkcgOj0gJCh1c2VfY2xhbmcpCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQorTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KKworJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX0NGTEFHUyxsaWJjX2NvbW1vbl9jZmxhZ3MpKQoraW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgbGliY19nZHRvYS5hIC0gdXBzdHJlYW0gT3BlbkJTRCBDIGxpYnJhcnkgZ2R0b2EgY29kZQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBUaGVzZSBmaWxlcyBhcmUgYnVpbHQgd2l0aCB0aGUgb3BlbmJzZC1jb21wYXQuaCBoZWFkZXIgZmlsZQorIyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkLgorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTXzMyIDo9ICQobGliY191cHN0cmVhbV9vcGVuYnNkX2dkdG9hX3NyY19maWxlc18zMikKK0xPQ0FMX1NSQ19GSUxFU182NCA6PSAkKGxpYmNfdXBzdHJlYW1fb3BlbmJzZF9nZHRvYV9zcmNfZmlsZXNfNjQpCitMT0NBTF9DRkxBR1MgOj0gXAorICAgICQobGliY19jb21tb25fY2ZsYWdzKSBcCisgICAgLVduby1zaWduLWNvbXBhcmUgLVduby11bmluaXRpYWxpemVkIFwKKyAgICAtZnZpc2liaWxpdHk9aGlkZGVuIFwKKyAgICAtSSQoTE9DQUxfUEFUSCkvcHJpdmF0ZSBcCisgICAgLUkkKExPQ0FMX1BBVEgpL3Vwc3RyZWFtLW9wZW5ic2QvYW5kcm9pZC9pbmNsdWRlIFwKKyAgICAtSSQoTE9DQUxfUEFUSCkvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9pbmNsdWRlIFwKKyAgICAtaW5jbHVkZSBvcGVuYnNkLWNvbXBhdC5oIFwKKworTE9DQUxfQ09OTFlGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2Nvbmx5ZmxhZ3MpCitMT0NBTF9DUFBGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NwcGZsYWdzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCitMT0NBTF9NT0RVTEUgOj0gbGliY19nZHRvYQorTE9DQUxfQ0xBTkcgOj0gJCh1c2VfY2xhbmcpCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQorTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KKworJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX0NGTEFHUyxsaWJjX2NvbW1vbl9jZmxhZ3MpKQogaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQogCiAKQEAgLTkxMSwyMiArNzkzLDgxIEBACiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAogTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliY19iaW9uaWNfc3JjX2ZpbGVzKQotTE9DQUxfQ0ZMQUdTIDo9ICQobGliY19jb21tb25fY2ZsYWdzKSAtV2Vycm9yCitMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpIFwKKyAgICAtV2ZyYW1lLWxhcmdlci10aGFuPTIwNDggXAorCiBMT0NBTF9DT05MWUZMQUdTIDo9ICQobGliY19jb21tb25fY29ubHlmbGFncykKIExPQ0FMX0NQUEZMQUdTIDo9ICQobGliY19jb21tb25fY3BwZmxhZ3MpCiBMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKIExPQ0FMX01PRFVMRSA6PSBsaWJjX2Jpb25pYworTE9DQUxfQ0xBTkcgOj0gJCh1c2VfY2xhbmcpCiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KIAotIyBTZXQgLURQVEhSRUFEX0RFQlVHX0VOQUJMRUQ9dHJ1ZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgcHRocmVhZCBkZWFkbG9jayBwcmVkaWN0aW9uLgotIyBTaW5jZSB0aGlzIGNvZGUgaXMgZXhwZXJpbWVudGFsIGl0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi1MT0NBTF9DRkxBR1MgKz0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpIC1EUFRIUkVBRF9ERUJVR19FTkFCTEVEPWZhbHNlCiskKGV2YWwgJChjYWxsIHBhdGNoLXVwLWFyY2gtc3BlY2lmaWMtZmxhZ3MsTE9DQUxfQ0ZMQUdTLGxpYmNfY29tbW9uX2NmbGFncykpCiskKGV2YWwgJChjYWxsIHBhdGNoLXVwLWFyY2gtc3BlY2lmaWMtZmxhZ3MsTE9DQUxfU1JDX0ZJTEVTLGxpYmNfYmlvbmljX3NyY19maWxlcykpCitpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBsaWJjX2N4YS5hIC0gVGhpbmdzIHRyYWRpdGlvbmFsbHkgaW4gbGlic3RkYysrCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChsaWJjX2N4YV9zcmNfZmlsZXMpCitMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpIFwKKyAgICAtZnZpc2liaWxpdHk9aGlkZGVuIFwKKworTE9DQUxfQ09OTFlGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2Nvbmx5ZmxhZ3MpCitMT0NBTF9DUFBGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NwcGZsYWdzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCitMT0NBTF9NT0RVTEUgOj0gbGliY19jeGEKKyMgR0NDIHJlZnVzZXMgdG8gaGlkZSBuZXcvZGVsZXRlCitMT0NBTF9DTEFORyA6PSB0cnVlCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQorTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KIAogaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQogCiAKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgbGliY19zeXNjYWxscy5hCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVNfJChUQVJHRVRfQVJDSCkgOj0gJChjYWxsIGFsbC1TLWZpbGVzLXVuZGVyLGFyY2gtJChUQVJHRVRfQVJDSCkvc3lzY2FsbHMpCitpZmRlZiBUQVJHRVRfMk5EX0FSQ0gKK0xPQ0FMX1NSQ19GSUxFU18kKFRBUkdFVF8yTkRfQVJDSCkgOj0gJChjYWxsIGFsbC1TLWZpbGVzLXVuZGVyLGFyY2gtJChUQVJHRVRfMk5EX0FSQ0gpL3N5c2NhbGxzKQorZW5kaWYKK0xPQ0FMX01PRFVMRSA6PSBsaWJjX3N5c2NhbGxzCitMT0NBTF9DTEFORyA6PSAkKHVzZV9jbGFuZykKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQobGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMpCitMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PQorCitpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBsaWJjX2FlYWJpLmEKKyMgVGhpcyBpcyBhbiBMUDMyIEFSTS1vbmx5IGxpYnJhcnkgdGhhdCBuZWVkcyB0byBiZSBidWlsdCB3aXRoIC1mbm8tYnVpbHRpbgorIyB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24uIEZvciB0aGUgb3RoZXIgYXJjaGl0ZWN0dXJlcyB3ZSBqdXN0IGJ1aWxkIGFuCisjIGVtcHR5IGxpYnJhcnkgdG8ga2VlcCB0aGlzIG1ha2VmaWxlIHNpbXBsZS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFU19hcm0gOj0gYXJjaC1hcm0vYmlvbmljL19fYWVhYmkuYworTE9DQUxfTU9EVUxFIDo9IGxpYmNfYWVhYmkKK0xPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQorTE9DQUxfQ0ZMQUdTIDo9ICQobGliY19jb21tb25fY2ZsYWdzKSAtZm5vLWJ1aWx0aW4KK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQobGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMpCitMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PQorCitpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMgbGliY19jb21tb24uYQogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC05MzgsMjAgKzg3OSwzNSBAQAogTE9DQUxfQ1BQRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jcHBmbGFncykKIExPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQogTE9DQUxfTU9EVUxFIDo9IGxpYmNfY29tbW9uCitMT0NBTF9DTEFORyA6PSAkKHVzZV9jbGFuZykKIExPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQobGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMpCiBMT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTIDo9IFwKLSAgICBsaWJiaW9uaWNfc3NwIFwKICAgICBsaWJjX2Jpb25pYyBcCisgICAgbGliY19jeGEgXAogICAgIGxpYmNfZG5zIFwKICAgICBsaWJjX2ZyZWVic2QgXAorICAgIGxpYmNfZ2R0b2EgXAorICAgIGxpYmNfbWFsbG9jIFwKICAgICBsaWJjX25ldGJzZCBcCisgICAgbGliY19vcGVuYnNkIFwKKyAgICBsaWJjX3N0YWNrX3Byb3RlY3RvciBcCisgICAgbGliY19zeXNjYWxscyBcCiAgICAgbGliY190emNvZGUgXAogCitMT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTX2FybSA6PSBsaWJjX2FlYWJpCisKK2lmbmVxICgkKE1BTExPQ19JTVBMKSxkbG1hbGxvYykKK0xPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVMgKz0gbGliamVtYWxsb2MKK2VuZGlmCisKIExPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CiAKICMgVE9ETzogc3BsaXQgb3V0IHRoZSBhc2ZsYWdzLgogTE9DQUxfQVNGTEFHUyA6PSAkKExPQ0FMX0NGTEFHUykKIAorJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX0NGTEFHUyxsaWJjX2NvbW1vbl9jZmxhZ3MpKQorJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX1NSQ19GSUxFUyxsaWJjX2NvbW1vbl9zcmNfZmlsZXMpKQorJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX0FTRkxBR1MsTE9DQUxfQ0ZMQUdTKSkKIGluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKIAogCkBAIC05NjIsMjcgKzkxOCw0OSBAQAogIyBUaGlzIGlzIGEgdmVyc2lvbiBvZiB0aGUgc3RhdGljIEMgbGlicmFyeSB0aGF0IGRvZXMgbm90CiAjIGluY2x1ZGUgbWFsbG9jLiBJdCdzIHVzZWZ1bCBpbiBzaXR1YXRpb25zIHdoZW4gdGhlIHVzZXIgd2FudHMKICMgdG8gcHJvdmlkZSB0aGVpciBvd24gbWFsbG9jIGltcGxlbWVudGF0aW9uLCBvciB3YW50cyB0bwotIyBleHBsaWNpdGx5IGRpc2FsbG93IHRoZSB1c2Ugb2YgdGhlIHVzZSBvZiBtYWxsb2MsCi0jIHN1Y2ggYXMgaW4gdGhlIGR5bmFtaWMgbG9hZGVyLgorIyBleHBsaWNpdGx5IGRpc2FsbG93IHRoZSB1c2Ugb2YgbWFsbG9jLCBzdWNoIGFzIGluIHRoZQorIyBkeW5hbWljIGxpbmtlci4KIAogaW5jbHVkZSAkKENMRUFSX1ZBUlMpCiAKIExPQ0FMX1NSQ19GSUxFUyA6PSBcCi0JJChsaWJjX2FyY2hfc3RhdGljX3NyY19maWxlcykgXAotCSQobGliY19zdGF0aWNfY29tbW9uX3NyY19maWxlcykgXAotCWJpb25pYy9saWJjX2luaXRfc3RhdGljLmNwcAorICAgICQobGliY19hcmNoX3N0YXRpY19zcmNfZmlsZXMpIFwKKyAgICAkKGxpYmNfc3RhdGljX2NvbW1vbl9zcmNfZmlsZXMpIFwKKyAgICBiaW9uaWMvbGliY19pbml0X3N0YXRpYy5jcHAKIAogTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCiBMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpIFwKLSAgICAgICAgICAgICAgICAtRExJQkNfU1RBVElDCisgICAgLURMSUJDX1NUQVRJQyBcCisKIExPQ0FMX0NPTkxZRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jb25seWZsYWdzKQogTE9DQUxfQ1BQRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jcHBmbGFncykKIAogTE9DQUxfTU9EVUxFIDo9IGxpYmNfbm9tYWxsb2MKK0xPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKIExPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliY19jb21tb24KIExPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CiAKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9TUkNfRklMRVMsbGliY19hcmNoX3N0YXRpY19zcmNfZmlsZXMpKQoraW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgbGliY19tYWxsb2MuYTogdGhlIF9wcmVmaXhlZF8gbWFsbG9jIGZ1bmN0aW9ucyAobGlrZSBkbGNhbGxvYykuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliY19tYWxsb2Nfc3JjKQorTE9DQUxfQ0ZMQUdTIDo9ICQobGliY19jb21tb25fY2ZsYWdzKSBcCisgICAgLWZ2aXNpYmlsaXR5PWhpZGRlbiBcCisKK0xPQ0FMX0NPTkxZRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jb25seWZsYWdzKQorTE9DQUxfQ1BQRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jcHBmbGFncykKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQorTE9DQUxfTU9EVUxFIDo9IGxpYmNfbWFsbG9jCitMT0NBTF9DTEFORyA6PSAkKHVzZV9jbGFuZykKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQobGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMpCiBpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCiAKIApAQCAtOTkyLDIyICs5NzAsMjUgQEAKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCiBMT0NBTF9TUkNfRklMRVMgOj0gXAotCSQobGliY19hcmNoX3N0YXRpY19zcmNfZmlsZXMpIFwKLQkkKGxpYmNfc3RhdGljX2NvbW1vbl9zcmNfZmlsZXMpIFwKLQliaW9uaWMvZGxtYWxsb2MuYyBcCi0JYmlvbmljL21hbGxvY19kZWJ1Z19jb21tb24uY3BwIFwKLQliaW9uaWMvbGliY19pbml0X3N0YXRpYy5jcHAKKyAgICAkKGxpYmNfYXJjaF9zdGF0aWNfc3JjX2ZpbGVzKSBcCisgICAgJChsaWJjX3N0YXRpY19jb21tb25fc3JjX2ZpbGVzKSBcCisgICAgYmlvbmljL21hbGxvY19kZWJ1Z19jb21tb24uY3BwIFwKKyAgICBiaW9uaWMvbGliY19pbml0X3N0YXRpYy5jcHAgXAogCiBMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpIFwKLSAgICAgICAgICAgICAgICAtRExJQkNfU1RBVElDCisgICAgLURMSUJDX1NUQVRJQyBcCisKIExPQ0FMX0NPTkxZRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jb25seWZsYWdzKQogTE9DQUxfQ1BQRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jcHBmbGFncykKIExPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQogTE9DQUxfTU9EVUxFIDo9IGxpYmMKK0xPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKIExPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliY19jb21tb24KIExPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CiAKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9TUkNfRklMRVMsbGliY19hcmNoX3N0YXRpY19zcmNfZmlsZXMpKQogaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQogCiAKQEAgLTEwMjAsNDQgKzEwMDEsNTIgQEAKIExPQ0FMX0NPTkxZRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jb25seWZsYWdzKQogTE9DQUxfQ1BQRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jcHBmbGFncykKIExPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQotCiBMT0NBTF9TUkNfRklMRVMgOj0gXAogICAgICQobGliY19hcmNoX2R5bmFtaWNfc3JjX2ZpbGVzKSBcCiAgICAgJChsaWJjX3N0YXRpY19jb21tb25fc3JjX2ZpbGVzKSBcCi0gICAgYmlvbmljL2RsbWFsbG9jLmMgXAogICAgIGJpb25pYy9tYWxsb2NfZGVidWdfY29tbW9uLmNwcCBcCi0gICAgYmlvbmljL2RlYnVnX21hcGluZm8uY3BwIFwKLSAgICBiaW9uaWMvZGVidWdfc3RhY2t0cmFjZS5jcHAgXAotICAgIGJpb25pYy9wdGhyZWFkX2RlYnVnLmNwcCBcCiAgICAgYmlvbmljL2xpYmNfaW5pdF9keW5hbWljLmNwcCBcCisgICAgYmlvbmljL05ldGRDbGllbnQuY3BwIFwKIAotaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtKQotCUxPQ0FMX05PX0NSVCA6PSB0cnVlCi0JTE9DQUxfQ0ZMQUdTICs9IC1EQ1JUX0xFR0FDWV9XT1JLQVJPVU5ECi0KLQlMT0NBTF9TUkNfRklMRVMgOj0gXAotCQlhcmNoLWNvbW1vbi9iaW9uaWMvY3J0YmVnaW5fc28uYyBcCi0JCWFyY2gtYXJtL2Jpb25pYy9hdGV4aXRfbGVnYWN5LmMgXAotCQkkKExPQ0FMX1NSQ19GSUxFUykgXAotCQlhcmNoLWNvbW1vbi9iaW9uaWMvY3J0ZW5kX3NvLlMKLWVuZGlmCi0KLUxPQ0FMX01PRFVMRTo9IGxpYmMKK0xPQ0FMX01PRFVMRSA6PSBsaWJjCitMT0NBTF9DTEFORyA6PSAkKHVzZV9jbGFuZykKIExPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQobGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMpCiBMT0NBTF9SRVFVSVJFRF9NT0RVTEVTIDo9IHR6ZGF0YQogCisjIExlYXZlIHRoZSBzeW1ib2xzIGluIHRoZSBzaGFyZWQgbGlicmFyeSBzbyB0aGF0IHN0YWNrIHVud2luZGVycyBjYW4gcHJvZHVjZQorIyBtZWFuaW5nZnVsIG5hbWUgcmVzb2x1dGlvbi4KK0xPQ0FMX1NUUklQX01PRFVMRSA6PSBrZWVwX3N5bWJvbHMKKwogIyBXQVJOSU5HOiBUaGUgb25seSBsaWJyYXJ5IGxpYmMuc28gc2hvdWxkIGRlcGVuZCBvbiBpcyBsaWJkbC5zbyEgIElmIHlvdSBhZGQgb3RoZXIgbGlicmFyaWVzLAogIyBtYWtlIHN1cmUgdG8gYWRkIC1XbCwtLWV4Y2x1ZGUtbGlicz1saWJnY2MuYSB0byB0aGUgTE9DQUxfTERGTEFHUyBmb3IgdGhvc2UgbGlicmFyaWVzLiAgVGhpcwogIyBlbnN1cmVzIHRoYXQgc3ltYm9scyB0aGF0IGFyZSBwdWxsZWQgaW50byB0aG9zZSBuZXcgbGlicmFyaWVzIGZyb20gbGliZ2NjLmEgYXJlIG5vdCBkZWNsYXJlZAogIyBleHRlcm5hbDsgaWYgdGhhdCB3ZXJlIHRoZSBjYXNlLCB0aGVuIGxpYmMgd291bGQgbm90IHB1bGwgdGhvc2Ugc3ltYm9scyBmcm9tIGxpYmdjYy5hIGFzIGl0CiAjIHNob3VsZCwgaW5zdGVhZCByZWx5aW5nIG9uIHRoZSBleHRlcm5hbCBzeW1ib2xzIGZyb20gdGhlIGRlcGVuZGVudCBsaWJyYXJpZXMuICBUaGF0IHdvdWxkCi0jIGNyZWF0ZSBhbiAiY2xvYWtlZCIgZGVwZW5kZW5jeSBvbiBsaWJnY2MuYSBpbiBsaWJjIHRob3VnaCB0aGUgbGlicmFyaWVzLCB3aGljaCBpcyBub3Qgd2hhdAorIyBjcmVhdGUgYSAiY2xvYWtlZCIgZGVwZW5kZW5jeSBvbiBsaWJnY2MuYSBpbiBsaWJjIHRob3VnaCB0aGUgbGlicmFyaWVzLCB3aGljaCBpcyBub3Qgd2hhdAogIyB5b3Ugd2FudGVkIQogCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmRsCiBMT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYmNfY29tbW9uCiBMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PQogCisjIFdlJ2QgcmVhbGx5IGxpa2UgdG8gZG8gdGhpcyBmb3IgYWxsIGFyY2hpdGVjdHVyZXMsIGJ1dCBzaW5jZSB0aGlzIHdhc24ndCBkb25lCisjIGJlZm9yZSwgdGhlc2Ugc3ltYm9scyBtdXN0IGNvbnRpbnVlIHRvIGJlIGV4cG9ydGVkIG9uIExQMzIgZm9yIGJpbmFyeQorIyBjb21wYXRpYmlsaXR5LgorTE9DQUxfTERGTEFHU19hcm02NCA6PSAtV2wsLS1leGNsdWRlLWxpYnMsbGliZ2NjLmEKK0xPQ0FMX0xERkxBR1NfbWlwczY0IDo9IC1XbCwtLWV4Y2x1ZGUtbGlicyxsaWJnY2MuYQorTE9DQUxfTERGTEFHU194ODZfNjQgOj0gLVdsLC0tZXhjbHVkZS1saWJzLGxpYmdjYy5hCisKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9TUkNfRklMRVMsbGliY19hcmNoX2R5bmFtaWNfc3JjX2ZpbGVzKSkKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9TUkNfRklMRVMsbGliY19zdGF0aWNfY29tbW9uX3NyY19maWxlcykpCisjIHNwZWNpYWwgZm9yIGFybQorTE9DQUxfTk9fQ1JUX2FybSA6PSB0cnVlCitMT0NBTF9DRkxBR1NfYXJtICs9IC1EQ1JUX0xFR0FDWV9XT1JLQVJPVU5ECitMT0NBTF9TUkNfRklMRVNfYXJtICs9IFwKKyAgICBhcmNoLWNvbW1vbi9iaW9uaWMvY3J0YmVnaW5fc28uYyBcCisgICAgYXJjaC1hcm0vYmlvbmljL2F0ZXhpdF9sZWdhY3kuYyBcCisgICAgYXJjaC1jb21tb24vYmlvbmljL2NydGVuZF9zby5TCisKIGluY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKIAogCkBAIC0xMDc1LDMwICsxMDY0LDM4IEBACiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAogTE9DQUxfQ0ZMQUdTIDo9IFwKLQkkKGxpYmNfY29tbW9uX2NmbGFncykgXAotCS1ETUFMTE9DX0xFQUtfQ0hFQ0sKKyAgICAkKGxpYmNfY29tbW9uX2NmbGFncykgXAorICAgIC1ETUFMTE9DX0xFQUtfQ0hFQ0sgXAorCiBMT0NBTF9DT05MWUZMQUdTIDo9ICQobGliY19jb21tb25fY29ubHlmbGFncykKIExPQ0FMX0NQUEZMQUdTIDo9ICQobGliY19jb21tb25fY3BwZmxhZ3MpCiAKLUxPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQorIyBNYWtlIHN1cmUgdGhhdCB1bndpbmQuaCBjb21lcyBmcm9tIGxpYnVud2luZC4KK0xPQ0FMX0NfSU5DTFVERVMgOj0gXAorICAgICQobGliY19jb21tb25fY19pbmNsdWRlcykgXAogCiBMT0NBTF9TUkNfRklMRVMgOj0gXAotCWJpb25pYy9kZWJ1Z19tYXBpbmZvLmNwcCBcCi0JYmlvbmljL2RlYnVnX3N0YWNrdHJhY2UuY3BwIFwKLQliaW9uaWMvbWFsbG9jX2RlYnVnX2xlYWsuY3BwIFwKLQliaW9uaWMvbWFsbG9jX2RlYnVnX2NoZWNrLmNwcCBcCisgICAgYmlvbmljL2RlYnVnX21hcGluZm8uY3BwIFwKKyAgICBiaW9uaWMvZGVidWdfc3RhY2t0cmFjZS5jcHAgXAorICAgIGJpb25pYy9saWJjX2xvZ2dpbmcuY3BwIFwKKyAgICBiaW9uaWMvbWFsbG9jX2RlYnVnX2xlYWsuY3BwIFwKKyAgICBiaW9uaWMvbWFsbG9jX2RlYnVnX2NoZWNrLmNwcCBcCiAKLUxPQ0FMX01PRFVMRTo9IGxpYmNfbWFsbG9jX2RlYnVnX2xlYWsKK0xPQ0FMX01PRFVMRSA6PSBsaWJjX21hbGxvY19kZWJ1Z19sZWFrCitMT0NBTF9DTEFORyA6PSAkKHVzZV9jbGFuZykKIExPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQobGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMpCiAKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliYyBsaWJkbAotTE9DQUxfV0hPTEVfU1RBVElDX0xJQlJBUklFUyA6PSBsaWJjX2NvbW1vbgogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KKyMgT25seSBuZWVkIHRoaXMgZm9yIGFybSBzaW5jZSBsaWJjKysgdXNlcyBpdHMgb3duIHVud2luZCBjb2RlIHRoYXQKKyMgZG9lc24ndCBtaXggd2l0aCB0aGUgb3RoZXIgZGVmYXVsdCB1bndpbmQgY29kZS4KK0xPQ0FMX1NUQVRJQ19MSUJSQVJJRVNfYXJtIDo9IGxpYmMrKwogTE9DQUxfQUxMT1dfVU5ERUZJTkVEX1NZTUJPTFMgOj0gdHJ1ZQogCiAjIERvbid0IGluc3RhbGwgb24gcmVsZWFzZSBidWlsZAogTE9DQUxfTU9EVUxFX1RBR1MgOj0gZW5nIGRlYnVnCiAKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKIGluY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKIAogCkBAIC0xMTA4LDI5ICsxMTA1LDYyIEBACiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAogTE9DQUxfQ0ZMQUdTIDo9IFwKLQkkKGxpYmNfY29tbW9uX2NmbGFncykgXAotCS1ETUFMTE9DX1FFTVVfSU5TVFJVTUVOVAorICAgICQobGliY19jb21tb25fY2ZsYWdzKSBcCisgICAgLURNQUxMT0NfUUVNVV9JTlNUUlVNRU5UIFwKKwogTE9DQUxfQ09OTFlGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2Nvbmx5ZmxhZ3MpCiBMT0NBTF9DUFBGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NwcGZsYWdzKQogCiBMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKIAogTE9DQUxfU1JDX0ZJTEVTIDo9IFwKLQliaW9uaWMvbWFsbG9jX2RlYnVnX3FlbXUuY3BwCisgICAgYmlvbmljL2xpYmNfbG9nZ2luZy5jcHAgXAorICAgIGJpb25pYy9tYWxsb2NfZGVidWdfcWVtdS5jcHAgXAogCi1MT0NBTF9NT0RVTEU6PSBsaWJjX21hbGxvY19kZWJ1Z19xZW11CitMT0NBTF9NT0RVTEUgOj0gbGliY19tYWxsb2NfZGVidWdfcWVtdQorTE9DQUxfQ0xBTkcgOj0gJCh1c2VfY2xhbmcpCiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQogCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmMgbGliZGwKLUxPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliY19jb21tb24KIExPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CiAKICMgRG9uJ3QgaW5zdGFsbCBvbiByZWxlYXNlIGJ1aWxkCiBMT0NBTF9NT0RVTEVfVEFHUyA6PSBlbmcgZGVidWcKIAorJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX0NGTEFHUyxsaWJjX2NvbW1vbl9jZmxhZ3MpKQogaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQogCi1lbmRpZgkjIXVzZXIKK2VuZGlmICAjIXVzZXIKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBsaWJzdGRjKysuc28KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2xpYnN0ZGN4eF9jb21tb25fc3JjX2ZpbGVzIDo9IFwKKyAgICBiaW9uaWMvX19jeGFfZ3VhcmQuY3BwIFwKKyAgICBiaW9uaWMvX19jeGFfcHVyZV92aXJ0dWFsLmNwcCBcCisgICAgYmlvbmljL25ldy5jcHAgXAorICAgIGJpb25pYy9saWJjX2xvZ2dpbmcuY3BwIFwKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKK0xPQ0FMX0NGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NmbGFncykKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGxpYnN0ZGN4eF9jb21tb25fc3JjX2ZpbGVzKQorTE9DQUxfTU9EVUxFOj0gbGlic3RkYysrCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmMKK2luY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBsaWJzdGRjKysuYQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoraW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKK0xPQ0FMX0NGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NmbGFncykKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGxpYnN0ZGN4eF9jb21tb25fc3JjX2ZpbGVzKQorTE9DQUxfTU9EVUxFOj0gbGlic3RkYysrCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmMKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKIAogCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9saWJjL05PVElDRSBiL2xpYmMvTk9USUNFCmluZGV4IGE3MzcwMDEuLjgwZDlhMjcgMTAwNjQ0Ci0tLSBhL2xpYmMvTk9USUNFCisrKyBiL2xpYmMvTk9USUNFCkBAIC0xLDMgKzEsOTAgQEAKKyAgIENvcHlyaWdodCAoYykgMjAxNCwgTGluYXJvIExpbWl0ZWQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBMaW5hcm8gbm9yIHRoZQorICAgICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICAgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBzdHJjaHIgLSBmaW5kIGEgY2hhcmFjdGVyIGluIGEgc3RyaW5nCisKKyAgIENvcHlyaWdodCAoYykgMjAxNCwgQVJNIExpbWl0ZWQKKyAgIEFsbCByaWdodHMgUmVzZXJ2ZWQuCisgICBDb3B5cmlnaHQgKGMpIDIwMTQsIExpbmFybyBMdGQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb21wYW55IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgICAgICAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIENvcHlyaWdodCAoYykgMTk5MyBKb2huIEJyZXphaworIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyBhcmUgbWV0OgorIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKK0lORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCitTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKK1NUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCkBAIC04LDYgKzk1LDM4IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQmFzZWQgb24gdGhlIFVDQiB2ZXJzaW9uIHdpdGggdGhlIElEIGFwcGVhcmluZyBiZWxvdy4KK1RoaXMgaXMgQU5TSWlzaCBvbmx5IHdoZW4gIm11bHRpYnl0ZSBjaGFyYWN0ZXIgPT0gcGxhaW4gY2hhcmFjdGVyIi4KKworQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVjdC4KIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTcyLDE0ICsxOTEsNzQgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQ29weXJpZ2h0IChDKSAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cit5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCitZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiBhcmUgbWV0OgotUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi1SZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCitPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKK0FORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKK09SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCitMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKK3lvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KK1lvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgZGlzdHJpYnV0aW9uLgpAQCAtMTAxLDEzICsyODAsMTQgQEAKIAogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCwgTlZJRElBIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKIGFyZSBtZXQ6Ci1SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLVJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAgICBkaXN0cmlidXRpb24uCkBAIC0xMzMsOSArMzEzLDkgQEAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiBhcmUgbWV0OgotUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi1SZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgZGlzdHJpYnV0aW9uLgpAQCAtMTU2LDE0ICszMzYsMzAgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cit5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCitZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiBhcmUgbWV0OgotUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi1SZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgZGlzdHJpYnV0aW9uLgpAQCAtMjA1LDkgKzQwMSw5IEBACiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKLVJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICAgIGRpc3RyaWJ1dGlvbi4KQEAgLTI4MCw5ICs0NzYsOSBAQAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKIGFyZSBtZXQ6Ci1SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLVJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAgICBkaXN0cmlidXRpb24uCkBAIC0zMjQsOSArNTIwLDkgQEAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiBhcmUgbWV0OgotUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi1SZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgZGlzdHJpYnV0aW9uLgpAQCAtMzY4LDkgKzU2NCwxMTEgQEAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiBhcmUgbWV0OgotUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi1SZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCitPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKK0FORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKK09SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0NvcHlyaWdodCAoYykgMjAxMy0yMDE0IE5WSURJQSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECitBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCitPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKK09GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKK0NvcHlyaWdodCAoYykgMjAxNCwgTlZJRElBIENPUlBPUkFUSU9OLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECitBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCitPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKK09GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cit5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCitZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICAgIGRpc3RyaWJ1dGlvbi4KQEAgLTQ0MiwzNSArNzQwLDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKGMpIDE5ODAsIDE5OTMKLSAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi1JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi1GT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLU9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLUxJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLVNVQ0ggREFNQUdFLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIENvcHlyaWdodCAoYykgMTk4MiwgMTk4NiwgMTk5MwogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTU2MywzNSArODMyLDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKGMpIDE5ODMsIDE5ODgsIDE5OTMKLSAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi1JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi1GT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLU9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLUxJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLVNVQ0ggREFNQUdFLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIENvcHlyaWdodCAoYykgMTk4MywgMTk4OQogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTY2NSwxMSArOTA1LDcgQEAKIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICAgIENhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogCkBAIC02ODUsNiArOTIxLDI0IEBACiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiBTVUNIIERBTUFHRS4KIAorUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0Cit0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0CitzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAorV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCitDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKK1BST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCitBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKK1NPRlRXQVJFLgorCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIENvcHlyaWdodCAoYykgMTk4MywgMTk5MwpAQCAtMTA5OSwzNSArMTM1Myw2IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MwotICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi1JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi1GT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLU9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLUxJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLVNVQ0ggREFNQUdFLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNvcHlyaWdodCAoYykgMTk4OCwgMTk5MwogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTIzMiw3ICsxNDU3LDcgQEAKIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIEJlcmtlbGV5LiBUaGUgbmFtZSBvZiB0aGUKIFVuaXZlcnNpdHkgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogCkBAIC0xMzYxLDExICsxNTg2LDkgQEAKIAogQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzCiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLShjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KLUFsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCi10byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCi1Dby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAotdGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisKK1RoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKK1JvZ2VyIEwuIFNueWRlci4KIAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MDEsOSArMTYyNCw2IEBACiBDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAogdGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCiAKLVRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLVBhdWwgQm9ybWFuIGF0IEtyeXN0YWwgVGVjaG5vbG9naWVzLgotCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKQEAgLTE0MTIsNyArMTYzMiw3IEBACiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIApAQCAtMTcwNyw2ICsxOTI3LDM4IEBACiAKIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKK0Rvbm4gU2VlbGV5IGF0IFVVTkVUIFRlY2hub2xvZ2llcywgSW5jLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAoYykgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCiBBbGwgb3Igc29tZSBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSBtYXRlcmlhbCBsaWNlbnNlZAogdG8gdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBieSBBbWVyaWNhbiBUZWxlcGhvbmUgYW5kIFRlbGVncmFwaApAQCAtMTgwMCw2ICsyMDUyLDM1IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQ29weXJpZ2h0IChjKSAxOTkxIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIENvcHlyaWdodCAoYykgMTk5MSwgMTk5MwogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTIxMzAsNDQgKzI0MTEsNiBAQAogCiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi1UaGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgdGhlIENvbXB1dGVyIFN5c3RlbXMgRW5naW5lZXJpbmcgZ3JvdXAKLWF0IExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkgdW5kZXIgREFSUEEgY29udHJhY3QgQkcgOTEtNjYgYW5kCi1jb250cmlidXRlZCB0byBCZXJrZWxleS4KLQotQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi1tdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gICBDYWxpZm9ybmlhLCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5LgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi1JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi1GT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLU9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLUxJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLVNVQ0ggREFNQUdFLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNvcHlyaWdodCAoYykgMTk5MiwgMTk5MwotICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAoYykgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCiBBbGwgb3Igc29tZSBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSBtYXRlcmlhbCBsaWNlbnNlZAogdG8gdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBieSBBbWVyaWNhbiBUZWxlcGhvbmUgYW5kIFRlbGVncmFwaApAQCAtMjM2NSw5MiArMjYwOCwzMCBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAoYykgMTk5NCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi1ieSBDaHJpc3RvcyBab3VsYXMuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi1hcmUgbWV0OgotMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTCi1gYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLVRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi1QVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCi1CRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi1DT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi1JTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLUFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi1QT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Db3B5cmlnaHQgKGMpIDE5OTUgLSAyMDAxIEt1bmdsaWdhIFRla25pc2thIEjDtmdza29sYW4KLShSb3lhbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgU3RvY2tob2xtLCBTd2VkZW4pLgorQ29weXJpZ2h0IChjKSAxOTk0IFNpZ21hU29mdCwgVGguIExvY2tlcnQgPHRob2xvQHNpZ21hc29mdC5jb20+CiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKLQotMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLTMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEluc3RpdHV0ZSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIElOU1RJVFVURSBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLUFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIElOU1RJVFVURSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi1GT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLU9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLUxJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLVNVQ0ggREFNQUdFLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNvcHlyaWdodCAoYykgMTk5NSBBbGV4IFRhdG1hbmphbnRzIDxhbGV4QGVsdmlzdGkua2lldi51YT4KLSAgICAgICBhdCBFbGVjdHJvbm5pIFZpc3RpIElBLCBLaWV2LCBVa3JhaW5lLgotICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAKLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLUlNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi1BUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFCi1GT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLU9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLUxJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLVNVQ0ggREFNQUdFLgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKK09SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKK09USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKK0FEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTI1MDAsNiArMjY4MSwyNCBAQAogCiBDb3B5cmlnaHQgKGMpIDE5OTYsIERhdmlkIE1hemllcmVzIDxkbUB1dW4ub3JnPgogQ29weXJpZ2h0IChjKSAyMDA4LCBEYW1pZW4gTWlsbGVyIDxkam1Ab3BlbmJzZC5vcmc+CitDb3B5cmlnaHQgKGMpIDIwMTMsIE1hcmt1cyBGcmllZGwgPG1hcmt1c0BvcGVuYnNkLm9yZz4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKK1dJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCitBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCitPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5Ni0xOTk4LCAyMDA4IFRoZW8gZGUgUmFhZHQKK0NvcHlyaWdodCAoYykgMTk5NywgMjAwOC0yMDA5IFRvZGQgQy4gTWlsbGVyCiAKIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMjY0NSw2ICsyODQ0LDMzIEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQ29weXJpZ2h0IChjKSAxOTk3IFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCitBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTAorVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7CitPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCitPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCitBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTggVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCkBAIC0yNjk0LDEzICsyOTIwLDYgQEAKIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNECi0gICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLTQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIAogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUwogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECkBAIC0yNzUyLDQyICsyOTcxLDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKGMpIDE5OTcsIDE5OTgsIDIwMDMgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1UaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgotYnkgSi5ULiBDb25rbGluLCBieSBOYXRoYW4gSi4gV2lsbGlhbXMsIGFuZCBieSBKYXNvbiBSLiBUaG9ycGUuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi1hcmUgbWV0OgotMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNECi0gICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLTQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUwotYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUwotQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLVNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLUNPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi1BUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogQ29weXJpZ2h0IChjKSAxOTk3LCAyMDA1IFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgogCiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKQEAgLTI5ODAsMzUgKzMxNjMsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAoYykgMTk5OSBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi1ieSBNaWNoYWVsIEdyYWZmLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUwotYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUwotQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLVNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLUNPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi1BUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogQ29weXJpZ2h0IChjKSAyMDAwIEJlbiBIYXJyaXMuCiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVjdC4KIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0zMzE0LDEzICszNDY4LDYgQEAKIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNECi0gICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLTQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIAogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUwogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECkBAIC0zMzYyLDYgKzM1MDksMzIgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitDb3B5cmlnaHQgKGMpIDIwMDIgVGltIEouIFJvYmJpbnMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogQ29weXJpZ2h0IChjKSAyMDAyIFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgogCiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKQEAgLTMzODIsNiArMzU1NSw4NCBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0NvcHlyaWdodCAoYykgMjAwMiwgMjAwMyBUaW0gSi4gUm9iYmlucy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBUaW0gSi4gUm9iYmlucworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwMi0yMDA0IFRpbSBKLiBSb2JiaW5zLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIENvcHlyaWdodCAoYykgMjAwMyBDb25zdGFudGluIFMuIFN2aW50c29mZiA8a29zdGlrQGljbHViLm5zdS5ydT4KIAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNDEwLDYgKzM2NjEsMzIgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitDb3B5cmlnaHQgKGMpIDIwMDMgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIENvcHlyaWdodCAoYykgMjAwMyBOZXR3b3JrcyBBc3NvY2lhdGVzIFRlY2hub2xvZ3ksIEluYy4KIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTM2NTEsNiArMzkyOCwzMiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0NvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogQ29weXJpZ2h0IChjKSAyMDA1IFRpbSBKLiBSb2JiaW5zLgogQWxsIHJpZ2h0cyByZXNlcnZlZC4KIApAQCAtMzc5OSw2ICs0MTAyLDIyIEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQ29weXJpZ2h0IChjKSAyMDA4LCBEYW1pZW4gTWlsbGVyIDxkam1Ab3BlbmJzZC5vcmc+CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCitXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBDb3B5cmlnaHQgKGMpIDIwMDkKICAgICAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4sIENhbGlmb3JuaWEuCiAKQEAgLTM4MzEsNiArNDE1MCwzNyBAQAogQ29weXJpZ2h0IChjKSAyMDA5IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELm9yZz4KIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKK0NvcHlyaWdodCAoYykgMjAxMSBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGRldmVsb3BlZCBieSBEYXZpZCBDaGlzbmFsbAordW5kZXIgc3BvbnNvcnNoaXAgZnJvbSB0aGUgRnJlZUJTRCBGb3VuZGF0aW9uLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDA5IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELm9yZz4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiBhcmUgbWV0OgpAQCAtMzg4OSwxMyArNDIzOSwxMyBAQAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiBhcmUgbWV0OgogCi0gICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiAgICAgICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoCiAgICAgICAgdGhlIGRpc3RyaWJ1dGlvbi4KLSAgICBOZWl0aGVyIHRoZSBuYW1lIG9mIE1JUFMgVGVjaG5vbG9naWVzIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1JUFMgVGVjaG5vbG9naWVzIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAKQEAgLTM5MTMsMjIgKzQyNjMsMzggQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitDb3B5cmlnaHQgKGMpIDIwMTAgVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCitXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBDb3B5cmlnaHQgKGMpIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiAKLSAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogCi0gICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogCi0gICBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRApAQCAtMzk0OSwxNiArNDMxNSwxNiBAQAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKIAotICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAKLSAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLSAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAKLSAgIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAKIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECkBAIC0zOTczLDIyICs0MzM5LDc1IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQ29weXJpZ2h0IChjKSAyMDExIERhdmlkIENoaXNuYWxsCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDExIEVkIFNjaG91dGVuIDxlZEBGcmVlQlNELm9yZz4KKyAgICAgICAgICAgICAgICAgICBEYXZpZCBDaGlzbmFsbCA8dGhlcmF2ZW5ARnJlZUJTRC5vcmc+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogQ29weXJpZ2h0IChjKSAyMDExIEludGVsIENvcnBvcmF0aW9uCiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogCi0gICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIAotICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KIAotICAgTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIAogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTQwMzgsMTYgKzQ0NTcsMTYgQEAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiAKLSAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogCi0gICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogCi0gICBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRApAQCAtNDA2OCwxNiArNDQ4NywxNiBAQAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKIAotICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAKLSAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLSAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAKLSAgIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAKIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECkBAIC00MDk3LDEyICs0NTE2LDEyIEBACiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFZNd2FyZSwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFZNd2FyZSwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKICAgICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQogICAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAKQEAgLTQxMTksNiArNDUzOCw2MyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0NvcHlyaWdodCAoYykgMjAxMiwgTGluYXJvIExpbWl0ZWQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBMaW5hcm8gbm9yIHRoZQorICAgICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICAgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMTIsIExpbmFybyBMaW1pdGVkCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgQ29weXJpZ2h0IChjKSAyMDE0LCBOVklESUEgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgTGluYXJvIG5vciB0aGUKKyAgICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogQ29weXJpZ2h0IChjKSAyMDEzIEFSTSBMdGQKIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTQxNDcsNjMgKzQ2MjMsMTkgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKGMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCitDb3B5cmlnaHQgKGMpIDIwMTMgQW50b2luZSBKYWNvdXRvdCA8YWphY291dG90QG9wZW5ic2Qub3JnPgogCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgogCi0gICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotCi0gICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICAgTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi1XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi1ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLUxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi1TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Db3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotCi0gICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotCi0gICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICAgTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi1XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi1ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLUxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi1TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKK0FOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKK09SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNDIxNCwxNCArNDY0NiwxNCBAQAogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgICBhcmUgbWV0OgogCi0gICAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAKLSAgICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAKLSAgICAgTmVpdGhlciB0aGUgbmFtZSBvZiBMaW5hcm8gTGltaXRlZCBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIExpbmFybyBMaW1pdGVkIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIApAQCAtNDIzOSw2ICs0NjcxLDg0IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQ29weXJpZ2h0IChjKSAyMDE0IFRoZW8gZGUgUmFhZHQgPGRlcmFhZHRAb3BlbmJzZC5vcmc+CitDb3B5cmlnaHQgKGMpIDIwMTQgQm9iIEJlY2sgPGJlY2tAb2J0dXNlLmNvbT4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKK1dJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCitBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCitPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCitFbXVsYXRpb24gb2YgZ2V0ZW50cm9weSgyKSBhcyBkb2N1bWVudGVkIGF0OgoraHR0cDovL3d3dy5vcGVuYnNkLm9yZy9jZ2ktYmluL21hbi5jZ2kvT3BlbkJTRC1jdXJyZW50L21hbjIvZ2V0ZW50cm9weS4yCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDE0LCBMaW5hcm8gTGltaXRlZAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIExpbmFybyBub3IgdGhlCisgICAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIENvcHlyaWdodCAoYykxOTk5IENpdHJ1cyBQcm9qZWN0LAogQWxsIHJpZ2h0cyByZXNlcnZlZC4KIApAQCAtNDI2NSw2ICs0Nzc1LDMyIEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQ29weXJpZ2h0IChjKTE5OTksIDIwMDAsIDIwMDEgQ2l0cnVzIFByb2plY3QsCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogQ29weXJpZ2h0IChjKTIwMDEgQ2l0cnVzIFByb2plY3QsCiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCkBAIC00MjkxLDIxICs0ODI3LDkgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgMTk5NyBOaWVscyBQcm92b3MgPHByb3Zvc0BwaHlzbmV0LnVuaS1oYW1idXJnLmRlPgotQ29weXJpZ2h0IDIwMDggRGFtaWVuIE1pbGxlciA8ZGptQG9wZW5ic2Qub3JnPgotQ29weXJpZ2h0IDIwMDggQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0ICh0aHJlYWQtc2FmZXR5KQorQ29weXJpZ2h0IChjKTIwMDMgQ2l0cnVzIFByb2plY3QsCiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCi1UaGVvIGRlIFJhYWR0IDxkZXJhYWR0QG9wZW5ic2Qub3JnPiBjYW1lIHVwIHdpdGggdGhlIGlkZWEgb2YgdXNpbmcKLXN1Y2ggYSBtYXRoZW1hdGljYWwgc3lzdGVtIHRvIGdlbmVyYXRlIG1vcmUgcmFuZG9tICh5ZXQgbm9uLXJlcGVhdGluZykKLWlkcyB0byBzb2x2ZSB0aGUgcmVzb2x2ZXIvbmFtZWQgcHJvYmxlbS4gIEJ1dCBOaWVscyBkZXNpZ25lZCB0aGUKLWFjdHVhbCBzeXN0ZW0gYmFzZWQgb24gdGhlIGNvbnN0cmFpbnRzLgotCi1MYXRlciBtb2RpZmllZCBieSBEYW1pZW4gTWlsbGVyIHRvIHdyYXAgdGhlIExDRyBvdXRwdXQgaW4gYSAxNS1iaXQKLXBlcm11dGF0aW9uIGdlbmVyYXRvciBiYXNlZCBvbiBhIEx1YnktUmFja29mZiBibG9jayBjaXBoZXIuIFRoaXMKLWVuc3VyZXMgdGhlIG91dHB1dCBpcyBub24tcmVwZWF0aW5nIGFuZCBwcmVzZXJ2ZXMgdGhlIE1TQiB0d2lkZGxlCi10cmljaywgYnV0IG1ha2VzIGl0IG1vcmUgcmVzaXN0YW50IHRvIExDRyBwcmVkaWN0aW9uLgotCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKQEAgLTQzMTUsMTYgKzQ4MzksMTcgQEAKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAKLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi1JTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi1PRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi1OT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi1EQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLVRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTQzNTMsMzIgKzQ4NzgsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gICBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKLSAgICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHb29nbGUgSW5jLiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi1JTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTwotRVZFTlQgU0hBTEwgR29vZ2xlIEluYy4gQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLVNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLVBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOwotT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCi1XSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgotT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgotQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogQ29weXJpZ2h0IDIwMDggIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAoc291cmNlIHBvcnQgcmFuZG9taXphdGlvbikKIENvcHlyaWdodCAoYykgMTk4NSwgMTk4OSwgMTk5MwogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC00NDEzLDYgKzQ5MTIsMjMgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDgsIDIwMDkgIEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCitQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMyAgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICitSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKK0FORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKK0lORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQorTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UKK09SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKK1BFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgogCiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKQEAgLTQ0ODUsMTggKzUwMDEsMTg4IEBACiAKIFRoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCiAKLUNvcHlyaWdodCAoYykgMTk5MSBieSBBVCZULgorQ29weXJpZ2h0IChDKSAxOTk4IGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKIAotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci1wdXJwb3NlIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgZW50aXJlIG5vdGljZQotaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiBhbnkgc29mdHdhcmUgd2hpY2ggaXMgb3IgaW5jbHVkZXMgYSBjb3B5Ci1vciBtb2RpZmljYXRpb24gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgaW4gYWxsIGNvcGllcyBvZiB0aGUgc3VwcG9ydGluZwotZG9jdW1lbnRhdGlvbiBmb3Igc3VjaCBzb2Z0d2FyZS4KK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCiAKLVRISVMgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi1XQVJSQU5UWS4gIElOIFBBUlRJQ1VMQVIsIE5FSVRIRVIgVEhFIEFVVEhPUiBOT1IgQVQmVCBNQUtFUyBBTlkKLVJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1FUkNIQU5UQUJJTElUWQotT0YgVEhJUyBTT0ZUV0FSRSBPUiBJVFMgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRXQVJFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRXQVJFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OCwgMjAwMCBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRXQVJFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OC0yMDAwIGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAxOTk4LTIwMDEgYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDIwMDAgYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittZW1jaHIgLSBmaW5kIGEgY2hhcmFjdGVyIGluIGEgbWVtb3J5IHpvbmUKKworQ29weXJpZ2h0IChjKSAyMDE0LCBBUk0gTGltaXRlZAorQWxsIHJpZ2h0cyBSZXNlcnZlZC4KK0NvcHlyaWdodCAoYykgMjAxNCwgTGluYXJvIEx0ZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvbXBhbnkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAgICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9saWJjL1NZU0NBTExTLlRYVCBiL2xpYmMvU1lTQ0FMTFMuVFhUCmluZGV4IDA5NTE2NDguLmMzYjdiYWIgMTAwNjQ0Ci0tLSBhL2xpYmMvU1lTQ0FMTFMuVFhUCisrKyBiL2xpYmMvU1lTQ0FMTFMuVFhUCkBAIC02LDcgKzYsNyBAQAogIwogIyB3aGVyZToKICMgICAgICAgYXJjaF9saXN0IDo6PSAiYWxsIiB8IGFyY2grCi0jICAgICAgIGFyY2ggICAgICA6Oj0gImFybSIgfCAiYXJtNjQiIHwgIm1pcHMiIHwgIng4NiIgfCAieDg2XzY0IgorIyAgICAgICBhcmNoICAgICAgOjo9ICJhcm0iIHwgImFybTY0IiB8ICJtaXBzIiB8ICJtaXBzNjQiIHwgIng4NiIgfCAieDg2XzY0IgogIwogIyBOb3RlOgogIyAgICAgIC0gc3lzY2FsbF9uYW1lIGNvcnJlc3BvbmRzIHRvIHRoZSBuYW1lIG9mIHRoZSBzeXNjYWxsLCB3aGljaCBtYXkgZGlmZmVyIGZyb20KQEAgLTI3LDQxICsyNywzOCBAQAogaW50ICAgICBleGVjdmUoY29uc3QgY2hhciosIGNoYXIqIGNvbnN0KiwgY2hhciogY29uc3QqKSAgYWxsCiAKIHVpZF90ICAgZ2V0dWlkOmdldHVpZDMyKCkgICAgICAgICBhcm0seDg2Ci11aWRfdCAgIGdldHVpZDpnZXR1aWQoKSAgICAgICAgICAgYXJtNjQsbWlwcyx4ODZfNjQKK3VpZF90ICAgZ2V0dWlkOmdldHVpZCgpICAgICAgICAgICBhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKIGdpZF90ICAgZ2V0Z2lkOmdldGdpZDMyKCkgICAgICAgICBhcm0seDg2Ci1naWRfdCAgIGdldGdpZDpnZXRnaWQoKSAgICAgICAgICAgYXJtNjQsbWlwcyx4ODZfNjQKK2dpZF90ICAgZ2V0Z2lkOmdldGdpZCgpICAgICAgICAgICBhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKIHVpZF90ICAgZ2V0ZXVpZDpnZXRldWlkMzIoKSAgICAgICBhcm0seDg2Ci11aWRfdCAgIGdldGV1aWQ6Z2V0ZXVpZCgpICAgICAgICAgYXJtNjQsbWlwcyx4ODZfNjQKK3VpZF90ICAgZ2V0ZXVpZDpnZXRldWlkKCkgICAgICAgICBhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKIGdpZF90ICAgZ2V0ZWdpZDpnZXRlZ2lkMzIoKSAgICAgICBhcm0seDg2Ci1naWRfdCAgIGdldGVnaWQ6Z2V0ZWdpZCgpICAgICAgICAgYXJtNjQsbWlwcyx4ODZfNjQKK2dpZF90ICAgZ2V0ZWdpZDpnZXRlZ2lkKCkgICAgICAgICBhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKIHVpZF90ICAgZ2V0cmVzdWlkOmdldHJlc3VpZDMyKHVpZF90KiBydWlkLCB1aWRfdCogZXVpZCwgdWlkX3QqIHN1aWQpICAgYXJtLHg4NgotdWlkX3QgICBnZXRyZXN1aWQ6Z2V0cmVzdWlkKHVpZF90KiBydWlkLCB1aWRfdCogZXVpZCwgdWlkX3QqIHN1aWQpICAgICBhcm02NCxtaXBzLHg4Nl82NAordWlkX3QgICBnZXRyZXN1aWQ6Z2V0cmVzdWlkKHVpZF90KiBydWlkLCB1aWRfdCogZXVpZCwgdWlkX3QqIHN1aWQpICAgICBhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKIGdpZF90ICAgZ2V0cmVzZ2lkOmdldHJlc2dpZDMyKGdpZF90KiByZ2lkLCBnaWRfdCogZWdpZCwgZ2lkX3QqIHNnaWQpICAgYXJtLHg4NgotZ2lkX3QgICBnZXRyZXNnaWQ6Z2V0cmVzZ2lkKGdpZF90KiByZ2lkLCBnaWRfdCogZWdpZCwgZ2lkX3QqIHNnaWQpICAgICBhcm02NCxtaXBzLHg4Nl82NAotcGlkX3QgICBnZXR0aWQoKSAgICAgICAgICAgICAgICAgICBhbGwKK2dpZF90ICAgZ2V0cmVzZ2lkOmdldHJlc2dpZChnaWRfdCogcmdpZCwgZ2lkX3QqIGVnaWQsIGdpZF90KiBzZ2lkKSAgICAgYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CiBzc2l6ZV90IHJlYWRhaGVhZChpbnQsIG9mZjY0X3QsIHNpemVfdCkgICAgIGFsbAogaW50ICAgICBnZXRncm91cHM6Z2V0Z3JvdXBzMzIoaW50LCBnaWRfdCopICAgIGFybSx4ODYKLWludCAgICAgZ2V0Z3JvdXBzOmdldGdyb3VwcyhpbnQsIGdpZF90KikgICAgICBhcm02NCxtaXBzLHg4Nl82NAoraW50ICAgICBnZXRncm91cHM6Z2V0Z3JvdXBzKGludCwgZ2lkX3QqKSAgICAgIGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAogcGlkX3QgICBnZXRwZ2lkKHBpZF90KSAgICAgICAgICAgICBhbGwKIHBpZF90ICAgZ2V0cHBpZCgpICAgICAgICAgICAgICAgICAgYWxsCiBwaWRfdCAgIGdldHNpZChwaWRfdCkgICAgICAgICAgICAgIGFsbAogcGlkX3QgICBzZXRzaWQoKSAgICAgICAgICAgICAgICAgICBhbGwKIGludCAgICAgc2V0Z2lkOnNldGdpZDMyKGdpZF90KSAgICAgYXJtLHg4NgotaW50ICAgICBzZXRnaWQ6c2V0Z2lkKGdpZF90KSAgICAgICBhcm02NCxtaXBzLHg4Nl82NAoraW50ICAgICBzZXRnaWQ6c2V0Z2lkKGdpZF90KSAgICAgICBhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKIGludCAgICAgc2V0dWlkOnNldHVpZDMyKHVpZF90KSAgICBhcm0seDg2Ci1pbnQgICAgIHNldHVpZDpzZXR1aWQodWlkX3QpICAgICAgYXJtNjQsbWlwcyx4ODZfNjQKK2ludCAgICAgc2V0dWlkOnNldHVpZCh1aWRfdCkgICAgICBhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKIGludCAgICAgc2V0cmV1aWQ6c2V0cmV1aWQzMih1aWRfdCwgdWlkX3QpICAgYXJtLHg4NgotaW50ICAgICBzZXRyZXVpZDpzZXRyZXVpZCh1aWRfdCwgdWlkX3QpICAgICBhcm02NCxtaXBzLHg4Nl82NAoraW50ICAgICBzZXRyZXVpZDpzZXRyZXVpZCh1aWRfdCwgdWlkX3QpICAgICBhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKIGludCAgICAgc2V0cmVzdWlkOnNldHJlc3VpZDMyKHVpZF90LCB1aWRfdCwgdWlkX3QpICAgYXJtLHg4NgotaW50ICAgICBzZXRyZXN1aWQ6c2V0cmVzdWlkKHVpZF90LCB1aWRfdCwgdWlkX3QpICAgICBhcm02NCxtaXBzLHg4Nl82NAoraW50ICAgICBzZXRyZXN1aWQ6c2V0cmVzdWlkKHVpZF90LCB1aWRfdCwgdWlkX3QpICAgICBhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKIGludCAgICAgc2V0cmVzZ2lkOnNldHJlc2dpZDMyKGdpZF90LCBnaWRfdCwgZ2lkX3QpICAgYXJtLHg4NgotaW50ICAgICBzZXRyZXNnaWQ6c2V0cmVzZ2lkKGdpZF90LCBnaWRfdCwgZ2lkX3QpICAgICBhcm02NCxtaXBzLHg4Nl82NAoraW50ICAgICBzZXRyZXNnaWQ6c2V0cmVzZ2lkKGdpZF90LCBnaWRfdCwgZ2lkX3QpICAgICBhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKIHZvaWQqICAgX19icms6YnJrKHZvaWQqKSAgICAgICAgICAgYWxsCiBpbnQgICAgIGtpbGwocGlkX3QsIGludCkgICAgICAgICAgIGFsbAotaW50ICAgICB0a2lsbChwaWRfdCB0aWQsIGludCBzaWcpICBhbGwKIGludCAgICAgdGdraWxsKHBpZF90IHRnaWQsIHBpZF90IHRpZCwgaW50IHNpZykgIGFsbAogaW50ICAgICBfX3B0cmFjZTpwdHJhY2UoaW50IHJlcXVlc3QsIGludCBwaWQsIHZvaWQqIGFkZHIsIHZvaWQqIGRhdGEpICBhbGwKLWludCAgICAgX19zZXRfdGhyZWFkX2FyZWE6c2V0X3RocmVhZF9hcmVhKHZvaWQqICB1c2VyX2Rlc2MpICBtaXBzLHg4NgogCiAjIDxzeXMvcmVzb3VyY2UuaD4KIGludCBnZXRydXNhZ2UoaW50LCBzdHJ1Y3QgcnVzYWdlKikgIGFsbApAQCAtNzEsMjIgKzY4LDIwIEBACiAjIE9uIDMyLWJpdCBzeXN0ZW1zIHdlIHVzZSBwcmxpbWl0NjQgdG8gaW1wbGVtZW50IHRoZSBybGltaXQ2NCBmdW5jdGlvbnMuCiBpbnQgZ2V0cmxpbWl0OnVnZXRybGltaXQoaW50LCBzdHJ1Y3QgcmxpbWl0KikgIGFybSx4ODYKIGludCBnZXRybGltaXQoaW50LCBzdHJ1Y3QgcmxpbWl0KikgIG1pcHMKLWludCBnZXRybGltaXR8Z2V0cmxpbWl0NjQoaW50LCBzdHJ1Y3QgcmxpbWl0KikgIGFybTY0LHg4Nl82NAoraW50IGdldHJsaW1pdHxnZXRybGltaXQ2NChpbnQsIHN0cnVjdCBybGltaXQqKSAgYXJtNjQsbWlwczY0LHg4Nl82NAogaW50IHNldHJsaW1pdChpbnQsIGNvbnN0IHN0cnVjdCBybGltaXQqKSAgYXJtLG1pcHMseDg2Ci1pbnQgc2V0cmxpbWl0fHNldHJsaW1pdDY0KGludCwgY29uc3Qgc3RydWN0IHJsaW1pdCopICBhcm02NCx4ODZfNjQKLWludCBwcmxpbWl0NjR8cHJsaW1pdChwaWRfdCwgaW50LCBzdHJ1Y3QgcmxpbWl0NjQqLCBjb25zdCBzdHJ1Y3QgcmxpbWl0NjQqKSAgYXJtNjQseDg2XzY0CitpbnQgc2V0cmxpbWl0fHNldHJsaW1pdDY0KGludCwgY29uc3Qgc3RydWN0IHJsaW1pdCopICBhcm02NCxtaXBzNjQseDg2XzY0CitpbnQgcHJsaW1pdDY0fHBybGltaXQocGlkX3QsIGludCwgc3RydWN0IHJsaW1pdDY0KiwgY29uc3Qgc3RydWN0IHJsaW1pdDY0KikgIGFybTY0LG1pcHM2NCx4ODZfNjQKIGludCBwcmxpbWl0NjQocGlkX3QsIGludCwgc3RydWN0IHJsaW1pdDY0KiwgY29uc3Qgc3RydWN0IHJsaW1pdDY0KikgIGFybSxtaXBzLHg4NgogCiBpbnQgICAgIHNldGdyb3VwczpzZXRncm91cHMzMihpbnQsIGNvbnN0IGdpZF90KikgICBhcm0seDg2Ci1pbnQgICAgIHNldGdyb3VwczpzZXRncm91cHMoaW50LCBjb25zdCBnaWRfdCopICAgICBhcm02NCxtaXBzLHg4Nl82NAoraW50ICAgICBzZXRncm91cHM6c2V0Z3JvdXBzKGludCwgY29uc3QgZ2lkX3QqKSAgICAgYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CiBpbnQgICAgIHNldHBnaWQocGlkX3QsIHBpZF90KSAgYWxsCiBwaWRfdCAgIHZmb3JrKHZvaWQpICBhcm0KIGludCAgICAgc2V0cmVnaWQ6c2V0cmVnaWQzMihnaWRfdCwgZ2lkX3QpICBhcm0seDg2Ci1pbnQgICAgIHNldHJlZ2lkOnNldHJlZ2lkKGdpZF90LCBnaWRfdCkgICAgYXJtNjQsbWlwcyx4ODZfNjQKK2ludCAgICAgc2V0cmVnaWQ6c2V0cmVnaWQoZ2lkX3QsIGdpZF90KSAgICBhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKIGludCAgICAgY2hyb290KGNvbnN0IGNoYXIqKSAgYWxsCi0jIElNUE9SVEFOVDogRXZlbiB0aG91Z2ggPHN5cy9wcmN0bC5oPiBkZWNsYXJlcyBwcmN0bChpbnQsIC4uLiksIHRoZSBzeXNjYWxsIHN0dWIgbXVzdCB0YWtlIDYgYXJndW1lbnRzCi0jICAgICAgICAgICAgdG8gbWF0Y2ggdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbi4KLWludCAgICAgcHJjdGwoaW50IG9wdGlvbiwgdW5zaWduZWQgaW50IGFyZzIsIHVuc2lnbmVkIGludCBhcmczLCB1bnNpZ25lZCBpbnQgYXJnNCwgdW5zaWduZWQgaW50IGFyZzUpIGFsbAoraW50ICAgICBwcmN0bChpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpIGFsbAogbG9uZyAgICBfX2FyY2hfcHJjdGw6YXJjaF9wcmN0bChpbnQsIHVuc2lnbmVkIGxvbmcpIHg4Nl82NAogaW50ICAgICBjYXBnZXQoY2FwX3VzZXJfaGVhZGVyX3QgaGVhZGVyLCBjYXBfdXNlcl9kYXRhX3QgZGF0YSkgYWxsCiBpbnQgICAgIGNhcHNldChjYXBfdXNlcl9oZWFkZXJfdCBoZWFkZXIsIGNvbnN0IGNhcF91c2VyX2RhdGFfdCBkYXRhKSBhbGwKQEAgLTk3LDExICs5MiwxMSBAQAogc3NpemVfdCAgICAgcmVhZChpbnQsIHZvaWQqLCBzaXplX3QpICAgICAgICBhbGwKIHNzaXplX3QgICAgIHdyaXRlKGludCwgY29uc3Qgdm9pZCosIHNpemVfdCkgICAgICAgYWxsCiBzc2l6ZV90ICAgICBwcmVhZDY0KGludCwgdm9pZCosIHNpemVfdCwgb2ZmNjRfdCkgYXJtLG1pcHMseDg2Ci1zc2l6ZV90ICAgICBwcmVhZDY0fHByZWFkKGludCwgdm9pZCosIHNpemVfdCwgb2ZmX3QpIGFybTY0LHg4Nl82NAorc3NpemVfdCAgICAgcHJlYWQ2NHxwcmVhZChpbnQsIHZvaWQqLCBzaXplX3QsIG9mZl90KSBhcm02NCxtaXBzNjQseDg2XzY0CiBzc2l6ZV90ICAgICBwd3JpdGU2NChpbnQsIHZvaWQqLCBzaXplX3QsIG9mZjY0X3QpIGFybSxtaXBzLHg4Ngotc3NpemVfdCAgICAgcHdyaXRlNjR8cHdyaXRlKGludCwgdm9pZCosIHNpemVfdCwgb2ZmX3QpIGFybTY0LHg4Nl82NAorc3NpemVfdCAgICAgcHdyaXRlNjR8cHdyaXRlKGludCwgdm9pZCosIHNpemVfdCwgb2ZmX3QpIGFybTY0LG1pcHM2NCx4ODZfNjQKIGludCAgICAgICAgIGNsb3NlKGludCkgICAgICAgICAgICAgICAgICAgICAgYWxsCi1waWRfdCAgICAgICBnZXRwaWQoKSAgICBhbGwKK3BpZF90ICAgICAgIF9fZ2V0cGlkOmdldHBpZCgpICBhbGwKIGludCAgICAgICAgIG11bm1hcCh2b2lkKiwgc2l6ZV90KSAgYWxsCiB2b2lkKiAgICAgICBtcmVtYXAodm9pZCosIHNpemVfdCwgc2l6ZV90LCB1bnNpZ25lZCBsb25nKSAgYWxsCiBpbnQgICAgICAgICBtc3luYyhjb25zdCB2b2lkKiwgc2l6ZV90LCBpbnQpICAgIGFsbApAQCAtMTE2LDMxICsxMTEsMzAgQEAKIGludCAgICAgICAgIHJlYWR2KGludCwgY29uc3Qgc3RydWN0IGlvdmVjKiwgaW50KSAgIGFsbAogaW50ICAgICAgICAgd3JpdGV2KGludCwgY29uc3Qgc3RydWN0IGlvdmVjKiwgaW50KSAgYWxsCiBpbnQgICAgICAgICBfX2ZjbnRsNjQ6ZmNudGw2NChpbnQsIGludCwgdm9pZCopICBhcm0sbWlwcyx4ODYKLWludCAgICAgICAgIGZjbnRsKGludCwgaW50LCB2b2lkKikgIGFybTY0LHg4Nl82NAoraW50ICAgICAgICAgZmNudGwoaW50LCBpbnQsIHZvaWQqKSAgYXJtNjQsbWlwczY0LHg4Nl82NAogaW50ICAgICAgICAgZmxvY2soaW50LCBpbnQpICAgYWxsCiBpbnQgICAgICAgICBmY2htb2QoaW50LCBtb2RlX3QpICBhbGwKIGludCAgICAgICAgIGR1cChpbnQpICBhbGwKIGludCAgICAgICAgIHBpcGUyKGludCosIGludCkgYWxsCiBpbnQgICAgICAgICBkdXAzKGludCwgaW50LCBpbnQpICAgYWxsCi1pbnQgICAgICAgICBnZXRkZW50czpnZXRkZW50czY0KHVuc2lnbmVkIGludCwgc3RydWN0IGRpcmVudCosIHVuc2lnbmVkIGludCkgICBhbGwKIGludCAgICAgICAgIGZzeW5jKGludCkgIGFsbAogaW50ICAgICAgICAgZmRhdGFzeW5jKGludCkgYWxsCiBpbnQgICAgICAgICBmY2hvd246ZmNob3duMzIoaW50LCB1aWRfdCwgZ2lkX3QpICBhcm0seDg2Ci1pbnQgICAgICAgICBmY2hvd246ZmNob3duKGludCwgdWlkX3QsIGdpZF90KSAgICBhcm02NCxtaXBzLHg4Nl82NAoraW50ICAgICAgICAgZmNob3duOmZjaG93bihpbnQsIHVpZF90LCBnaWRfdCkgICAgYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CiB2b2lkICAgICAgICBzeW5jKHZvaWQpICBhbGwKLWludCAgICAgICAgIF9fZnN0YXRmczY0OmZzdGF0ZnM2NChpbnQsIHNpemVfdCwgc3RydWN0IHN0YXRmcyopICBhcm0sbWlwcyx4ODYKLWludCAgICAgICAgIGZzdGF0ZnMoaW50LCBzdHJ1Y3Qgc3RhdGZzKikgIGFybTY0LHg4Nl82NAogaW50ICAgICAgICAgZnNldHhhdHRyKGludCwgY29uc3QgY2hhciosIGNvbnN0IHZvaWQqLCBzaXplX3QsIGludCkgYWxsCiBzc2l6ZV90ICAgICBmZ2V0eGF0dHIoaW50LCBjb25zdCBjaGFyKiwgdm9pZCosIHNpemVfdCkgYWxsCiBzc2l6ZV90ICAgICBmbGlzdHhhdHRyKGludCwgY2hhciosIHNpemVfdCkgYWxsCiBpbnQgICAgICAgICBmcmVtb3ZleGF0dHIoaW50LCBjb25zdCBjaGFyKikgYWxsCiAKK2ludCBfX2dldGRlbnRzNjQ6Z2V0ZGVudHM2NCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBkaXJlbnQqLCB1bnNpZ25lZCBpbnQpICAgYXJtLGFybTY0LG1pcHMsbWlwczY0LHg4Nix4ODZfNjQKKwogaW50IF9fb3BlbmF0Om9wZW5hdChpbnQsIGNvbnN0IGNoYXIqLCBpbnQsIG1vZGVfdCkgYWxsCiBpbnQgZmFjY2Vzc2F0KGludCwgY29uc3QgY2hhciosIGludCwgaW50KSAgYWxsCiBpbnQgZmNobW9kYXQoaW50LCBjb25zdCBjaGFyKiwgbW9kZV90LCBpbnQpICBhbGwKIGludCBmY2hvd25hdChpbnQsIGNvbnN0IGNoYXIqLCB1aWRfdCwgZ2lkX3QsIGludCkgIGFsbAotaW50IGZzdGF0YXQ6ZnN0YXRhdDY0KGludCwgY29uc3QgY2hhciosIHN0cnVjdCBzdGF0KiwgaW50KSAgIGFybSxtaXBzLHg4NgotaW50IGZzdGF0YXQ6bmV3ZnN0YXRhdChpbnQsIGNvbnN0IGNoYXIqLCBzdHJ1Y3Qgc3RhdCosIGludCkgIGFybTY0LHg4Nl82NAoraW50IGZzdGF0YXQ2NHxmc3RhdGF0OmZzdGF0YXQ2NChpbnQsIGNvbnN0IGNoYXIqLCBzdHJ1Y3Qgc3RhdCosIGludCkgICBhcm0sbWlwcyx4ODYKK2ludCBmc3RhdGF0NjR8ZnN0YXRhdDpuZXdmc3RhdGF0KGludCwgY29uc3QgY2hhciosIHN0cnVjdCBzdGF0KiwgaW50KSAgYXJtNjQsbWlwczY0LHg4Nl82NAogaW50IGxpbmthdChpbnQsIGNvbnN0IGNoYXIqLCBpbnQsIGNvbnN0IGNoYXIqLCBpbnQpICBhbGwKIGludCBta2RpcmF0KGludCwgY29uc3QgY2hhciosIG1vZGVfdCkgIGFsbAogaW50IG1rbm9kYXQoaW50LCBjb25zdCBjaGFyKiwgbW9kZV90LCBkZXZfdCkgIGFsbApAQCAtMTU2LDI2ICsxNTAsNDEgQEAKICMgVGhhdCBtZWFucyB0aGF0IGV2ZXJ5IHN5c3RlbSBjYWxsIGluIHRoaXMgc2VjdGlvbiBzaG91bGQgdGFrZSB0aHJlZSBsaW5lcy4KIG9mZl90IGxzZWVrKGludCwgb2ZmX3QsIGludCkgYXJtLG1pcHMseDg2CiBpbnQgX19sbHNlZWs6X2xsc2VlayhpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIG9mZjY0X3QqLCBpbnQpIGFybSxtaXBzLHg4Ngotb2ZmX3QgbHNlZWt8bHNlZWs2NChpbnQsIG9mZl90LCBpbnQpIGFybTY0LHg4Nl82NAorb2ZmX3QgbHNlZWt8bHNlZWs2NChpbnQsIG9mZl90LCBpbnQpIGFybTY0LG1pcHM2NCx4ODZfNjQKIGludCBmdHJ1bmNhdGUoaW50LCBvZmZfdCkgYXJtLG1pcHMseDg2CiBpbnQgZnRydW5jYXRlNjQoaW50LCBvZmY2NF90KSBhcm0sbWlwcyx4ODYKLWludCBmdHJ1bmNhdGV8ZnRydW5jYXRlNjQoaW50LCBvZmZfdCkgYXJtNjQseDg2XzY0CitpbnQgZnRydW5jYXRlfGZ0cnVuY2F0ZTY0KGludCwgb2ZmX3QpIGFybTY0LG1pcHM2NCx4ODZfNjQKIHNzaXplX3Qgc2VuZGZpbGUoaW50IG91dF9mZCwgaW50IGluX2ZkLCBvZmZfdCogb2Zmc2V0LCBzaXplX3QgY291bnQpIGFybSxtaXBzLHg4Ngogc3NpemVfdCBzZW5kZmlsZTY0KGludCBvdXRfZmQsIGludCBpbl9mZCwgb2ZmNjRfdCogb2Zmc2V0LCBzaXplX3QgY291bnQpIGFybSxtaXBzLHg4Ngotc3NpemVfdCBzZW5kZmlsZXxzZW5kZmlsZTY0KGludCBvdXRfZmQsIGludCBpbl9mZCwgb2ZmX3QqIG9mZnNldCwgc2l6ZV90IGNvdW50KSBhcm02NCx4ODZfNjQKK3NzaXplX3Qgc2VuZGZpbGV8c2VuZGZpbGU2NChpbnQgb3V0X2ZkLCBpbnQgaW5fZmQsIG9mZl90KiBvZmZzZXQsIHNpemVfdCBjb3VudCkgYXJtNjQsbWlwczY0LHg4Nl82NAogaW50IHRydW5jYXRlKGNvbnN0IGNoYXIqLCBvZmZfdCkgYXJtLG1pcHMseDg2CiBpbnQgdHJ1bmNhdGU2NChjb25zdCBjaGFyKiwgb2ZmNjRfdCkgYXJtLG1pcHMseDg2Ci1pbnQgdHJ1bmNhdGV8dHJ1bmNhdGU2NChjb25zdCBjaGFyKiwgb2ZmX3QpIGFybTY0LHg4Nl82NAoraW50IHRydW5jYXRlfHRydW5jYXRlNjQoY29uc3QgY2hhciosIG9mZl90KSBhcm02NCxtaXBzNjQseDg2XzY0CiAjIChtbWFwIG9ubHkgZ2V0cyB0d28gbGluZXMgYmVjYXVzZSB3ZSBvbmx5IHVzZWQgdGhlIDY0LWJpdCB2YXJpYW50IG9uIDMyLWJpdCBzeXN0ZW1zLikKIHZvaWQqIF9fbW1hcDI6bW1hcDIodm9pZCosIHNpemVfdCwgaW50LCBpbnQsIGludCwgbG9uZykgICBhcm0sbWlwcyx4ODYKLXZvaWQqIG1tYXB8bW1hcDY0KHZvaWQqLCBzaXplX3QsIGludCwgaW50LCBpbnQsIG9mZl90KSAgYXJtNjQseDg2XzY0Cit2b2lkKiBtbWFwfG1tYXA2NCh2b2lkKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBvZmZfdCkgIGFybTY0LG1pcHM2NCx4ODZfNjQKKyMgKGZhbGxvY2F0ZSBvbmx5IGdldHMgdHdvIGxpbmVzIGJlY2F1c2UgdGhlcmUgaXMgbm8gMzItYml0IHZhcmlhbnQuKQoraW50IGZhbGxvY2F0ZTY0OmZhbGxvY2F0ZShpbnQsIGludCwgb2ZmNjRfdCwgb2ZmNjRfdCkgYXJtLG1pcHMseDg2CitpbnQgZmFsbG9jYXRlfGZhbGxvY2F0ZTY0KGludCwgaW50LCBvZmZfdCwgb2ZmX3QpIGFybTY0LG1pcHM2NCx4ODZfNjQKKworIyBwb3NpeF9mYWR2aXNlNjQgaXMgYXdrd2FyZDogYXJtIGhhcyBzaHVmZmxlZCBhcmd1bWVudHMsCisjIHRoZSBQT1NJWCBmdW5jdGlvbnMgZG9uJ3Qgc2V0IGVycm5vLCBhbmQgbm8gYXJjaGl0ZWN0dXJlIGhhcyBwb3NpeF9mYWR2aXNlLgoraW50IF9fYXJtX2ZhZHZpc2U2NF82NDphcm1fZmFkdmlzZTY0XzY0KGludCwgaW50LCBvZmY2NF90LCBvZmY2NF90KSBhcm0KK2ludCBfX2ZhZHZpc2U2NDpmYWR2aXNlNjRfNjQoaW50LCBvZmY2NF90LCBvZmY2NF90LCBpbnQpIHg4NgoraW50IF9fZmFkdmlzZTY0OmZhZHZpc2U2NChpbnQsIG9mZjY0X3QsIG9mZjY0X3QsIGludCkgYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CisKK2ludCBfX2ZzdGF0ZnM2NDpmc3RhdGZzNjQoaW50LCBzaXplX3QsIHN0cnVjdCBzdGF0ZnMqKSAgYXJtLG1pcHMseDg2CitpbnQgZnN0YXRmczY0fGZzdGF0ZnM6ZnN0YXRmcyhpbnQsIHN0cnVjdCBzdGF0ZnMqKSAgYXJtNjQsbWlwczY0LHg4Nl82NAoraW50IF9fc3RhdGZzNjQ6c3RhdGZzNjQoY29uc3QgY2hhciosIHNpemVfdCwgc3RydWN0IHN0YXRmcyopICBhcm0sbWlwcyx4ODYKK2ludCBzdGF0ZnM2NHxzdGF0ZnM6c3RhdGZzKGNvbnN0IGNoYXIqLCBzdHJ1Y3Qgc3RhdGZzKikgIGFybTY0LG1pcHM2NCx4ODZfNjQKKworaW50ICAgICBmc3RhdDY0fGZzdGF0OmZzdGF0NjQoaW50LCBzdHJ1Y3Qgc3RhdCopICAgIGFybSxtaXBzLHg4NgoraW50ICAgICBmc3RhdDY0fGZzdGF0OmZzdGF0KGludCwgc3RydWN0IHN0YXQqKSAgICBhcm02NCxtaXBzNjQseDg2XzY0CiAKICMgZmlsZSBzeXN0ZW0KIGludCAgICAgY2hkaXIoY29uc3QgY2hhciopICAgICAgICAgICAgICBhbGwKIGludCAgICAgbW91bnQoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgdW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCopICBhbGwKIGludCAgICAgdW1vdW50Mihjb25zdCBjaGFyKiwgaW50KSAgYWxsCi1pbnQgICAgIGZzdGF0OmZzdGF0NjQoaW50LCBzdHJ1Y3Qgc3RhdCopICAgIGFybSxtaXBzLHg4NgotaW50ICAgICBmc3RhdChpbnQsIHN0cnVjdCBzdGF0KikgICAgYXJtNjQseDg2XzY0CiBpbnQgICAgIF9fZ2V0Y3dkOmdldGN3ZChjaGFyKiBidWYsIHNpemVfdCBzaXplKSAgYWxsCiBpbnQgICAgIGZjaGRpcihpbnQpICAgIGFsbAogaW50ICAgICBzZXR4YXR0cihjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0IHZvaWQqLCBzaXplX3QsIGludCkgYWxsCkBAIC0xODYsMjcgKzE5NSwyMyBAQAogc3NpemVfdCBsbGlzdHhhdHRyKGNvbnN0IGNoYXIqLCBjaGFyKiwgc2l6ZV90KSBhbGwKIGludCAgICAgcmVtb3ZleGF0dHIoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSBhbGwKIGludCAgICAgbHJlbW92ZXhhdHRyKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikgYWxsCi1pbnQgICAgIF9fc3RhdGZzNjQ6c3RhdGZzNjQoY29uc3QgY2hhciosIHNpemVfdCwgc3RydWN0IHN0YXRmcyopICBhcm0sbWlwcyx4ODYKLWludCAgICAgc3RhdGZzKGNvbnN0IGNoYXIqLCBzdHJ1Y3Qgc3RhdGZzKikgIGFybTY0LHg4Nl82NAogaW50ICAgICBzd2Fwb24oY29uc3QgY2hhciosIGludCkgYWxsCiBpbnQgICAgIHN3YXBvZmYoY29uc3QgY2hhciopIGFsbAogCiAjIHRpbWUKLWludCAgICAgICAgICAgZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsKiwgc3RydWN0IHRpbWV6b25lKikgICAgICAgYWxsCiBpbnQgICAgICAgICAgIHNldHRpbWVvZmRheShjb25zdCBzdHJ1Y3QgdGltZXZhbCosIGNvbnN0IHN0cnVjdCB0aW1lem9uZSopICAgYWxsCiBjbG9ja190ICAgICAgIHRpbWVzKHN0cnVjdCB0bXMqKSAgICAgICBhbGwKIGludCAgICAgICAgICAgbmFub3NsZWVwKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyosIHN0cnVjdCB0aW1lc3BlYyopICAgYWxsCi1pbnQgICAgICAgICAgIGNsb2NrX2dldHRpbWUoY2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVzcGVjKiB0cCkgICAgYWxsCiBpbnQgICAgICAgICAgIGNsb2NrX3NldHRpbWUoY2xvY2tpZF90IGNsa19pZCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiB0cCkgIGFsbAogaW50ICAgICAgICAgICBjbG9ja19nZXRyZXMoY2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVzcGVjKiByZXMpICAgYWxsCiBpbnQgICAgICAgICAgIGNsb2NrX25hbm9zbGVlcChjbG9ja2lkX3QgY2xvY2tfaWQsIGludCBmbGFncywgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiByZXEsIHN0cnVjdCB0aW1lc3BlYyogcmVtKSAgYWxsCiBpbnQgICAgICAgICAgIGdldGl0aW1lcihpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJ2YWwqKSAgIGFsbAogaW50ICAgICAgICAgICBzZXRpdGltZXIoaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsKiwgc3RydWN0IGl0aW1lcnZhbCopICBhbGwKLWludCAgICAgICAgICAgX190aW1lcl9jcmVhdGU6dGltZXJfY3JlYXRlKGNsb2NraWRfdCBjbG9ja2lkLCBzdHJ1Y3Qgc2lnZXZlbnQqIGV2cCwgdGltZXJfdCogdGltZXJpZCkgICAgYWxsCi1pbnQgICAgICAgICAgIF9fdGltZXJfc2V0dGltZTp0aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMqLCBzdHJ1Y3QgaXRpbWVyc3BlYyopIGFsbAotaW50ICAgICAgICAgICBfX3RpbWVyX2dldHRpbWU6dGltZXJfZ2V0dGltZSh0aW1lcl90LCBzdHJ1Y3QgaXRpbWVyc3BlYyopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGwKLWludCAgICAgICAgICAgX190aW1lcl9nZXRvdmVycnVuOnRpbWVyX2dldG92ZXJydW4odGltZXJfdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsCi1pbnQgICAgICAgICAgIF9fdGltZXJfZGVsZXRlOnRpbWVyX2RlbGV0ZSh0aW1lcl90KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbAoraW50ICAgICAgICAgICBfX3RpbWVyX2NyZWF0ZTp0aW1lcl9jcmVhdGUoY2xvY2tpZF90IGNsb2NraWQsIHN0cnVjdCBzaWdldmVudCogZXZwLCBfX2tlcm5lbF90aW1lcl90KiB0aW1lcmlkKSAgICBhbGwKK2ludCAgICAgICAgICAgX190aW1lcl9zZXR0aW1lOnRpbWVyX3NldHRpbWUoX19rZXJuZWxfdGltZXJfdCwgaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyosIHN0cnVjdCBpdGltZXJzcGVjKikgYWxsCitpbnQgICAgICAgICAgIF9fdGltZXJfZ2V0dGltZTp0aW1lcl9nZXR0aW1lKF9fa2VybmVsX3RpbWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjKikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbAoraW50ICAgICAgICAgICBfX3RpbWVyX2dldG92ZXJydW46dGltZXJfZ2V0b3ZlcnJ1bihfX2tlcm5lbF90aW1lcl90KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGwKK2ludCAgICAgICAgICAgX190aW1lcl9kZWxldGU6dGltZXJfZGVsZXRlKF9fa2VybmVsX3RpbWVyX3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsCiBpbnQgICAgICAgICAgIHRpbWVyZmRfY3JlYXRlKGNsb2NraWRfdCwgaW50KSAgIGFsbAogaW50ICAgICAgICAgICB0aW1lcmZkX3NldHRpbWUoaW50LCBpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjKiwgc3RydWN0IGl0aW1lcnNwZWMqKSAgIGFsbAogaW50ICAgICAgICAgICB0aW1lcmZkX2dldHRpbWUoaW50LCBzdHJ1Y3QgaXRpbWVyc3BlYyopICAgYWxsCkBAIC0yMTgsMzEgKzIyMywzMiBAQAogaW50ICAgICBfX3J0X3NpZ3Byb2NtYXNrOnJ0X3NpZ3Byb2NtYXNrKGludCwgY29uc3Qgc2lnc2V0X3QqLCBzaWdzZXRfdCosIHNpemVfdCkgIGFsbAogaW50ICAgICBfX3J0X3NpZ3N1c3BlbmQ6cnRfc2lnc3VzcGVuZChjb25zdCBzaWdzZXRfdCosIHNpemVfdCkgIGFsbAogaW50ICAgICBfX3J0X3NpZ3RpbWVkd2FpdDpydF9zaWd0aW1lZHdhaXQoY29uc3Qgc2lnc2V0X3QqLCBzdHJ1Y3Qgc2lnaW5mb190Kiwgc3RydWN0IHRpbWVzcGVjX3QqLCBzaXplX3QpICBhbGwKLWludCAgICAgc2lnbmFsZmQ0KGludCwgY29uc3Qgc2lnc2V0X3QqLCBzaXplX3QsIGludCkgIGFsbAoraW50ICAgICBfX3NpZ25hbGZkNDpzaWduYWxmZDQoaW50LCBjb25zdCBzaWdzZXRfdCosIHNpemVfdCwgaW50KSAgYWxsCiAKICMgc29ja2V0cwotaW50ICAgICAgICAgICBzb2NrZXQoaW50LCBpbnQsIGludCkgICAgICAgICAgICAgIGFybSxhcm02NCxtaXBzLHg4Nl82NAotaW50ICAgICAgICAgICBzb2NrZXRwYWlyKGludCwgaW50LCBpbnQsIGludCopICAgIGFybSxhcm02NCxtaXBzLHg4Nl82NAotaW50ICAgICAgICAgICBiaW5kKGludCwgc3RydWN0IHNvY2thZGRyKiwgaW50KSAgYXJtLGFybTY0LG1pcHMseDg2XzY0Ci1pbnQgICAgICAgICAgIGNvbm5lY3QoaW50LCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QpICAgYXJtLGFybTY0LG1pcHMseDg2XzY0Ci1pbnQgICAgICAgICAgIGxpc3RlbihpbnQsIGludCkgICAgICAgICAgICAgICAgICAgYXJtLGFybTY0LG1pcHMseDg2XzY0Ci1pbnQgICAgICAgICAgIGFjY2VwdChpbnQsIHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCopICBhcm0sYXJtNjQsbWlwcyx4ODZfNjQKLWludCAgICAgICAgICAgZ2V0c29ja25hbWUoaW50LCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QqKSAgYXJtLGFybTY0LG1pcHMseDg2XzY0Ci1pbnQgICAgICAgICAgIGdldHBlZXJuYW1lKGludCwgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KikgIGFybSxhcm02NCxtaXBzLHg4Nl82NAotaW50ICAgICAgICAgICBzZW5kdG8oaW50LCBjb25zdCB2b2lkKiwgc2l6ZV90LCBpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCkgIGFybSxhcm02NCxtaXBzLHg4Nl82NAotaW50ICAgICAgICAgICByZWN2ZnJvbShpbnQsIHZvaWQqLCBzaXplX3QsIHVuc2lnbmVkIGludCwgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KikgIGFybSxhcm02NCxtaXBzLHg4Nl82NAotaW50ICAgICAgICAgICBzaHV0ZG93bihpbnQsIGludCkgIGFybSxhcm02NCxtaXBzLHg4Nl82NAotaW50ICAgICAgICAgICBzZXRzb2Nrb3B0KGludCwgaW50LCBpbnQsIGNvbnN0IHZvaWQqLCBzb2NrbGVuX3QpICBhcm0sYXJtNjQsbWlwcyx4ODZfNjQKLWludCAgICAgICAgICAgZ2V0c29ja29wdChpbnQsIGludCwgaW50LCB2b2lkKiwgc29ja2xlbl90KikgICAgYXJtLGFybTY0LG1pcHMseDg2XzY0Ci1pbnQgICAgICAgICAgIHNlbmRtc2coaW50LCBjb25zdCBzdHJ1Y3QgbXNnaGRyKiwgdW5zaWduZWQgaW50KSAgYXJtLGFybTY0LG1pcHMseDg2XzY0Ci1pbnQgICAgICAgICAgIHJlY3Ztc2coaW50LCBzdHJ1Y3QgbXNnaGRyKiwgdW5zaWduZWQgaW50KSAgIGFybSxhcm02NCxtaXBzLHg4Nl82NAoraW50ICAgICAgICAgICBfX3NvY2tldDpzb2NrZXQoaW50LCBpbnQsIGludCkgICAgICAgICAgICAgIGFybSxhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKK2ludCAgICAgICAgICAgc29ja2V0cGFpcihpbnQsIGludCwgaW50LCBpbnQqKSAgICBhcm0sYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CitpbnQgICAgICAgICAgIGJpbmQoaW50LCBzdHJ1Y3Qgc29ja2FkZHIqLCBpbnQpICBhcm0sYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CitpbnQgICAgICAgICAgIF9fY29ubmVjdDpjb25uZWN0KGludCwgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KSAgIGFybSxhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKK2ludCAgICAgICAgICAgbGlzdGVuKGludCwgaW50KSAgICAgICAgICAgICAgICAgICBhcm0sYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CitpbnQgICAgICAgICAgIF9fYWNjZXB0NDphY2NlcHQ0KGludCwgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KiwgaW50KSAgYXJtLGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAoraW50ICAgICAgICAgICBnZXRzb2NrbmFtZShpbnQsIHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCopICBhcm0sYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CitpbnQgICAgICAgICAgIGdldHBlZXJuYW1lKGludCwgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KikgIGFybSxhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKK2ludCAgICAgICAgICAgc2VuZHRvKGludCwgY29uc3Qgdm9pZCosIHNpemVfdCwgaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QpICBhcm0sYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CitpbnQgICAgICAgICAgIHJlY3Zmcm9tKGludCwgdm9pZCosIHNpemVfdCwgdW5zaWduZWQgaW50LCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QqKSAgYXJtLGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAoraW50ICAgICAgICAgICBzaHV0ZG93bihpbnQsIGludCkgIGFybSxhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKK2ludCAgICAgICAgICAgc2V0c29ja29wdChpbnQsIGludCwgaW50LCBjb25zdCB2b2lkKiwgc29ja2xlbl90KSAgYXJtLGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAoraW50ICAgICAgICAgICBnZXRzb2Nrb3B0KGludCwgaW50LCBpbnQsIHZvaWQqLCBzb2NrbGVuX3QqKSAgICBhcm0sYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CitpbnQgICAgICAgICAgIHNlbmRtc2coaW50LCBjb25zdCBzdHJ1Y3QgbXNnaGRyKiwgdW5zaWduZWQgaW50KSAgYXJtLGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAoraW50ICAgICAgICAgICByZWN2bXNnKGludCwgc3RydWN0IG1zZ2hkciosIHVuc2lnbmVkIGludCkgICBhcm0sYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CitpbnQgICAgICAgICAgIHJlY3ZtbXNnKGludCwgc3RydWN0IG1tc2doZHIqLCB1bnNpZ25lZCBpbnQsIGludCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKikgICBhcm0sYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CitpbnQgICAgICAgICAgIHNlbmRtbXNnKGludCwgc3RydWN0IG1tc2doZHIqLCB1bnNpZ25lZCBpbnQsIGludCkgICBhcm0sYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CiAKICMgc29ja2V0cyBmb3IgeDg2LiBUaGVzZSBhcmUgZG9uZSBhcyBhbiAiaW5kZXhlZCIgY2FsbCB0byBzb2NrZXRjYWxsIHN5c2NhbGwuCi1pbnQgICAgICAgICAgIHNvY2tldDpzb2NrZXRjYWxsOjEoaW50LCBpbnQsIGludCkgeDg2CitpbnQgICAgICAgICAgIF9fc29ja2V0OnNvY2tldGNhbGw6MShpbnQsIGludCwgaW50KSB4ODYKIGludCAgICAgICAgICAgYmluZDpzb2NrZXRjYWxsOjIoaW50LCBzdHJ1Y3Qgc29ja2FkZHIqLCBpbnQpICB4ODYKLWludCAgICAgICAgICAgY29ubmVjdDpzb2NrZXRjYWxsOjMoaW50LCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QpICAgeDg2CitpbnQgICAgICAgICAgIF9fY29ubmVjdDpzb2NrZXRjYWxsOjMoaW50LCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QpICAgeDg2CiBpbnQgICAgICAgICAgIGxpc3Rlbjpzb2NrZXRjYWxsOjQoaW50LCBpbnQpICAgICAgICAgICAgICAgICAgIHg4NgotaW50ICAgICAgICAgICBhY2NlcHQ6c29ja2V0Y2FsbDo1KGludCwgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KikgIHg4NgogaW50ICAgICAgICAgICBnZXRzb2NrbmFtZTpzb2NrZXRjYWxsOjYoaW50LCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QqKSAgeDg2CiBpbnQgICAgICAgICAgIGdldHBlZXJuYW1lOnNvY2tldGNhbGw6NyhpbnQsIHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCopICB4ODYKIGludCAgICAgICAgICAgc29ja2V0cGFpcjpzb2NrZXRjYWxsOjgoaW50LCBpbnQsIGludCwgaW50KikgICAgeDg2CkBAIC0yNTMsNiArMjU5LDkgQEAKIGludCAgICAgICAgICAgZ2V0c29ja29wdDpzb2NrZXRjYWxsOjE1KGludCwgaW50LCBpbnQsIHZvaWQqLCBzb2NrbGVuX3QqKSAgICB4ODYKIGludCAgICAgICAgICAgc2VuZG1zZzpzb2NrZXRjYWxsOjE2KGludCwgY29uc3Qgc3RydWN0IG1zZ2hkciosIHVuc2lnbmVkIGludCkgIHg4NgogaW50ICAgICAgICAgICByZWN2bXNnOnNvY2tldGNhbGw6MTcoaW50LCBzdHJ1Y3QgbXNnaGRyKiwgdW5zaWduZWQgaW50KSAgIHg4NgoraW50ICAgICAgICAgICBfX2FjY2VwdDQ6c29ja2V0Y2FsbDoxOChpbnQsIHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCosIGludCkgIHg4NgoraW50ICAgICAgICAgICByZWN2bW1zZzpzb2NrZXRjYWxsOjE5KGludCwgc3RydWN0IG1tc2doZHIqLCB1bnNpZ25lZCBpbnQsIGludCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKikgICB4ODYKK2ludCAgICAgICAgICAgc2VuZG1tc2c6c29ja2V0Y2FsbDoyMChpbnQsIHN0cnVjdCBtbXNnaGRyKiwgdW5zaWduZWQgaW50LCBpbnQpICAgeDg2CiAKICMgc2NoZWR1bGVyICYgcmVhbC10aW1lCiBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyKHBpZF90IHBpZCwgaW50IHBvbGljeSwgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtKiBwYXJhbSkgIGFsbApAQCAtMjY5LDIxICsyNzgsMTkgQEAKIGludCBfX3NjaGVkX2dldGFmZmluaXR5OnNjaGVkX2dldGFmZmluaXR5KHBpZF90IHBpZCwgc2l6ZV90IHNldHNpemUsIGNwdV9zZXRfdCogc2V0KSAgYWxsCiBpbnQgX19nZXRjcHU6Z2V0Y3B1KHVuc2lnbmVkKiwgdW5zaWduZWQqLCB2b2lkKikgYWxsCiAKLSMgaW8gcHJpb3JpdGllcwotaW50IGlvcHJpb19zZXQoaW50IHdoaWNoLCBpbnQgd2hvLCBpbnQgaW9wcmlvKSBhbGwKLWludCBpb3ByaW9fZ2V0KGludCB3aGljaCwgaW50IHdobykgYWxsCi0KICMgb3RoZXIKIGludCAgICAgdW5hbWUoc3RydWN0IHV0c25hbWUqKSAgYWxsCiBtb2RlX3QgIHVtYXNrKG1vZGVfdCkgIGFsbAogaW50ICAgICBfX3JlYm9vdDpyZWJvb3QoaW50LCBpbnQsIGludCwgdm9pZCopICBhbGwKLWludCAgICAgX19zeXNsb2c6c3lzbG9nKGludCwgY2hhciosIGludCkgIGFsbAogaW50ICAgICBpbml0X21vZHVsZSh2b2lkKiwgdW5zaWduZWQgbG9uZywgY29uc3QgY2hhciopICBhbGwKIGludCAgICAgZGVsZXRlX21vZHVsZShjb25zdCBjaGFyKiwgdW5zaWduZWQgaW50KSAgIGFsbAogaW50ICAgICBrbG9nY3RsOnN5c2xvZyhpbnQsIGNoYXIqLCBpbnQpICAgYWxsCiBpbnQgICAgIHN5c2luZm8oc3RydWN0IHN5c2luZm8qKSAgYWxsCiBpbnQgICAgIHBlcnNvbmFsaXR5KHVuc2lnbmVkIGxvbmcpICBhbGwKLWxvbmcgICAgcGVyZl9ldmVudF9vcGVuKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIqIGF0dHJfdXB0ciwgcGlkX3QgcGlkLCBpbnQgY3B1LCBpbnQgZ3JvdXBfZmQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpIGFsbAorCitzc2l6ZV90IHRlZShpbnQsIGludCwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpICBhbGwKK3NzaXplX3Qgc3BsaWNlKGludCwgb2ZmNjRfdCosIGludCwgb2ZmNjRfdCosIHNpemVfdCwgdW5zaWduZWQgaW50KSAgYWxsCitzc2l6ZV90IHZtc3BsaWNlKGludCwgY29uc3Qgc3RydWN0IGlvdmVjKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpICBhbGwKIAogaW50IGVwb2xsX2NyZWF0ZTEoaW50KSAgYWxsCiBpbnQgZXBvbGxfY3RsKGludCwgaW50IG9wLCBpbnQsIHN0cnVjdCBlcG9sbF9ldmVudCopICBhbGwKQEAgLTI5MSwxMSArMjk4LDkgQEAKIAogaW50IGV2ZW50ZmQ6ZXZlbnRmZDIodW5zaWduZWQgaW50LCBpbnQpICBhbGwKIAotdm9pZCBfZXhpdDpleGl0X2dyb3VwKGludCkgIGFsbAordm9pZCBfZXhpdHxfRXhpdDpleGl0X2dyb3VwKGludCkgIGFsbAogdm9pZCBfX2V4aXQ6ZXhpdChpbnQpICBhbGwKIAotaW50IGZ1dGV4KHZvaWQqLCBpbnQsIGludCwgdm9pZCosIHZvaWQqLCBpbnQpICBhbGwKLQogaW50IGlub3RpZnlfaW5pdDEoaW50KSAgYWxsCiBpbnQgaW5vdGlmeV9hZGRfd2F0Y2goaW50LCBjb25zdCBjaGFyKiwgdW5zaWduZWQgaW50KSAgYWxsCiBpbnQgaW5vdGlmeV9ybV93YXRjaChpbnQsIHVuc2lnbmVkIGludCkgIGFsbApAQCAtMzA1LDYgKzMxMCw5IEBACiAKIGludCBfX3NldF90aWRfYWRkcmVzczpzZXRfdGlkX2FkZHJlc3MoaW50KikgIGFsbAogCitpbnQgc2V0ZnNnaWQoZ2lkX3QpICBhbGwKK2ludCBzZXRmc3VpZCh1aWRfdCkgIGFsbAorCiBwaWRfdCB3YWl0NChwaWRfdCwgaW50KiwgaW50LCBzdHJ1Y3QgcnVzYWdlKikgIGFsbAogaW50IF9fd2FpdGlkOndhaXRpZChpbnQsIHBpZF90LCBzdHJ1Y3Qgc2lnaW5mb190KiwgaW50LCB2b2lkKikgIGFsbAogCkBAIC0zMTMsNCArMzIxLDE0IEBACiBpbnQgICAgIGNhY2hlZmx1c2g6X19BUk1fTlJfY2FjaGVmbHVzaChsb25nIHN0YXJ0LCBsb25nIGVuZCwgbG9uZyBmbGFncykgIGFybQogCiAjIE1JUFMtc3BlY2lmaWMKLWludCAgICAgX2ZsdXNoX2NhY2hlOmNhY2hlZmx1c2goY2hhciogYWRkciwgY29uc3QgaW50IG5ieXRlcywgY29uc3QgaW50IG9wKSBtaXBzCitpbnQgICAgIF9mbHVzaF9jYWNoZTpjYWNoZWZsdXNoKGNoYXIqIGFkZHIsIGNvbnN0IGludCBuYnl0ZXMsIGNvbnN0IGludCBvcCkgbWlwcyxtaXBzNjQKK2ludCAgICAgX19zZXRfdGxzOnNldF90aHJlYWRfYXJlYSh2b2lkKikgbWlwcyxtaXBzNjQKKworIyB4ODYtc3BlY2lmaWMKK2ludCAgICAgX19zZXRfdGhyZWFkX2FyZWE6c2V0X3RocmVhZF9hcmVhKHZvaWQqKSB4ODYKKworIyB2ZHNvIHN0dWZmLgoraW50IGNsb2NrX2dldHRpbWUoY2xvY2tpZF90LCB0aW1lc3BlYyopICAgICAgICAgICAgICAgICBhcm0sbWlwcyxtaXBzNjQseDg2CitpbnQgX19jbG9ja19nZXR0aW1lOmNsb2NrX2dldHRpbWUoY2xvY2tpZF90LCB0aW1lc3BlYyopIGFybTY0LHg4Nl82NAoraW50IGdldHRpbWVvZmRheSh0aW1ldmFsKiwgdGltZXpvbmUqKSAgICAgICAgICAgICAgICAgICBhcm0sbWlwcyxtaXBzNjQseDg2CitpbnQgX19nZXR0aW1lb2ZkYXk6Z2V0dGltZW9mZGF5KHRpbWV2YWwqLCB0aW1lem9uZSopICAgIGFybTY0LHg4Nl82NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9hcm0ubWsgYi9saWJjL2FyY2gtYXJtL2FybS5tawppbmRleCA5NWMzYjYxLi43MGNjOGViIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2FybS5taworKysgYi9saWJjL2FyY2gtYXJtL2FybS5tawpAQCAtMSw0MyArMSw5MyBAQAotX0xJQkNfQVJDSF9DT01NT05fU1JDX0ZJTEVTIDo9IFwKKyMgYXJtIHNwZWNpZmljIGNvbmZpZ3MKKworIyBUaGVzZSBhcmUgdXNlZCBieSB0aGUgMzItYml0IHRhcmdldHMsIGJ1dCBub3QgdGhlIDY0LWJpdCBvbmVzLgorbGliY19jb21tb25fc3JjX2ZpbGVzX2FybSA6PSBcCisgICAgYmlvbmljL2xlZ2FjeV8zMl9iaXRfc3VwcG9ydC5jcHAgXAorICAgIGJpb25pYy9uZGtfY3J1ZnQuY3BwIFwKKyAgICBiaW9uaWMvdGltZTY0LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0dy5jIFwKKworIyBUaGVzZSBhcmUgc2hhcmVkIGJ5IGFsbCB0aGUgMzItYml0IHRhcmdldHMsIGJ1dCBub3QgdGhlIDY0LWJpdCBvbmVzLgorbGliY19iaW9uaWNfc3JjX2ZpbGVzX2FybSA6PSBcCisgICAgYmlvbmljL21tYXAuY3BwCisKK2xpYmNfY29tbW9uX3NyY19maWxlc19hcm0gKz0gXAorICAgIGJpb25pYy9tZW1jaHIuYyBcCisgICAgYmlvbmljL21lbXJjaHIuYyBcCisgICAgYmlvbmljL3N0cmNoci5jcHAgXAorICAgIGJpb25pYy9zdHJubGVuLmMgXAorICAgIGJpb25pYy9zdHJyY2hyLmNwcCBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2F0LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2Noci5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjbXAuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY3B5LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xlbi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NyY2hyLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jbXAuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbW1vdmUuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvYmNvcHkuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RwY3B5LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cG5jcHkuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybGNhdC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJsY3B5LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5jYXQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybmNtcC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJuY3B5LmMgXAorCisjIFRoZSBDKysgZm9ydGlmeSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgZm9yIHdoaWNoIHRoZXJlIGlzIGFuCisjIGFybSBhc3NlbWJsZXIgdmVyc2lvbi4KKyMKKyMgRm9ydGlmeSBpbXBsZW1lbnRhdGlvbnMgb2YgbGliYyBmdW5jdGlvbnMuCisjIGxpYmNfY29tbW9uX3NyY19maWxlc19hcm0gKz0KKyMgICAgYmlvbmljL19fbWVtY3B5X2Noay5jcHAgXAorIyAgICBiaW9uaWMvX19tZW1zZXRfY2hrLmNwcCBcCisjICAgIGJpb25pYy9fX3N0cmNweV9jaGsuY3BwIFwKKyMgICAgYmlvbmljL19fc3RyY2F0X2Noay5jcHAgXAorCitsaWJjX2NvbW1vbl9jZmxhZ3NfYXJtIDo9IC1EU09GVEZMT0FUCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIENQVSBzcGVjaWZpYyBzb3VyY2UgZmlsZXMKK2xpYmNfYmlvbmljX3NyY19maWxlc19hcm0gKz0gXAogICAgIGFyY2gtYXJtL2Jpb25pYy9hYm9ydF9hcm0uUyBcCiAgICAgYXJjaC1hcm0vYmlvbmljL2F0b21pY3NfYXJtLmMgXAogICAgIGFyY2gtYXJtL2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TIFwKLSAgICBhcmNoLWFybS9iaW9uaWMvZWFiaS5jIFwKICAgICBhcmNoLWFybS9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TIFwKLSAgICBhcmNoLWFybS9iaW9uaWMvZnV0ZXhfYXJtLlMgXAotICAgIGFyY2gtYXJtL2Jpb25pYy9fX2dldF9zcC5TIFwKICAgICBhcmNoLWFybS9iaW9uaWMvbGliZ2NjX2NvbXBhdC5jIFwKLSAgICBhcmNoLWFybS9iaW9uaWMvbWVtY21wMTYuUyBcCiAgICAgYXJjaC1hcm0vYmlvbmljL21lbWNtcC5TIFwKICAgICBhcmNoLWFybS9iaW9uaWMvX3NldGptcC5TIFwKICAgICBhcmNoLWFybS9iaW9uaWMvc2V0am1wLlMgXAogICAgIGFyY2gtYXJtL2Jpb25pYy9zaWdzZXRqbXAuUyBcCiAgICAgYXJjaC1hcm0vYmlvbmljL3N5c2NhbGwuUyBcCiAKLSMgVGhlc2UgYXJlIHVzZWQgYnkgdGhlIHN0YXRpYyBhbmQgZHluYW1pYyB2ZXJzaW9ucyBvZiB0aGUgbGliYwotIyByZXNwZWN0aXZlbHkuCi1fTElCQ19BUkNIX1NUQVRJQ19TUkNfRklMRVMgOj0gXAotICAgIGFyY2gtYXJtL2Jpb25pYy9leGlkeF9zdGF0aWMuYyBcCi0gICAgYmlvbmljL2RsX2l0ZXJhdGVfcGhkcl9zdGF0aWMuYyBcCitsaWJjX2FyY2hfc3RhdGljX3NyY19maWxlc19hcm0gOj0gYXJjaC1hcm0vYmlvbmljL2V4aWR4X3N0YXRpYy5jCitsaWJjX2FyY2hfZHluYW1pY19zcmNfZmlsZXNfYXJtIDo9IGFyY2gtYXJtL2Jpb25pYy9leGlkeF9keW5hbWljLmMKIAotX0xJQkNfQVJDSF9EWU5BTUlDX1NSQ19GSUxFUyA6PSBcCi0gICAgYXJjaC1hcm0vYmlvbmljL2V4aWR4X2R5bmFtaWMuYyBcCitsaWJjX25ldGJzZF9zcmNfZmlsZXNfYXJtIDo9IFwKKyAgICB1cHN0cmVhbS1uZXRic2QvY29tbW9uL2xpYi9saWJjL2hhc2gvc2hhMS9zaGExLmMgXAogCi0jIFJlbW92ZSB0aGUgQysrIGZvcnRpZnkgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIGZvciB3aGljaCB0aGVyZSBpcyBhbgotIyBhcm0gYXNzZW1ibGVyIHZlcnNpb24uCi1fTElCQ19GT1JUSUZZX0ZJTEVTX1RPX1JFTU9WRSA6PSBcCi0gICAgYmlvbmljL19fbWVtY3B5X2Noay5jcHAgXAotICAgIGJpb25pYy9fX21lbXNldF9jaGsuY3BwIFwKLSAgICBiaW9uaWMvX19zdHJjcHlfY2hrLmNwcCBcCi0gICAgYmlvbmljL19fc3RyY2F0X2Noay5jcHAgXAotCi1saWJjX2NvbW1vbl9zcmNfZmlsZXMgOj0gXAotICAgICQoZmlsdGVyLW91dCAkKF9MSUJDX0ZPUlRJRllfRklMRVNfVE9fUkVNT1ZFKSwkKGxpYmNfY29tbW9uX3NyY19maWxlcykpCi0KLWlmZXEgKCQoc3RyaXAgJCh3aWxkY2FyZCBiaW9uaWMvbGliYy9hcmNoLWFybS8kKFRBUkdFVF9DUFVfVkFSSUFOVCkvJChUQVJHRVRfQ1BVX1ZBUklBTlQpLm1rKSksKQotJChlcnJvciAiVEFSR0VUX0NQVV9WQVJJQU5UIG5vdCBzZXQgb3Igc2V0IHRvIGFuIHVua25vd24gdmFsdWUuIFBvc3NpYmxlIHZhbHVlcyBhcmUgY29ydGV4LWE3LCBjb3J0ZXgtYTgsIGNvcnRleC1hOSwgY29ydGV4LWExNSwga3JhaXQuIFVzZSBnZW5lcmljIGZvciBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgYSBDUFUgc2ltaWxhciB0byBhbnkgb2YgdGhlIHN1cHBvcnRlZCBjcHUgdmFyaWFudHMuIikKKyMjIENQVSB2YXJpYW50IHNwZWNpZmljIHNvdXJjZSBmaWxlcworaWZlcSAoJChzdHJpcCAkKFRBUkdFVF8kKG15XzJuZF9hcmNoX3ByZWZpeClDUFVfVkFSSUFOVCkpLCkKKyAgJCh3YXJuaW5nIFRBUkdFVF8kKG15XzJuZF9hcmNoX3ByZWZpeClBUkNIIGlzIGFybSwgYnV0IFRBUkdFVF8kKG15XzJuZF9hcmNoX3ByZWZpeClDUFVfVkFSSUFOVCBpcyBub3QgZGVmaW5lZCkKIGVuZGlmCitjcHVfdmFyaWFudF9tayA6PSAkKExPQ0FMX1BBVEgpL2FyY2gtYXJtLyQoVEFSR0VUXyQobXlfMm5kX2FyY2hfcHJlZml4KUNQVV9WQVJJQU5UKS8kKFRBUkdFVF8kKG15XzJuZF9hcmNoX3ByZWZpeClDUFVfVkFSSUFOVCkubWsKK2lmZXEgKCQod2lsZGNhcmQgJChjcHVfdmFyaWFudF9taykpLCkKKyQoZXJyb3IgIlRBUkdFVF8kKG15XzJuZF9hcmNoX3ByZWZpeClDUFVfVkFSSUFOVCBub3Qgc2V0IG9yIHNldCB0byBhbiB1bmtub3duIHZhbHVlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGNvcnRleC1hNywgY29ydGV4LWE4LCBjb3J0ZXgtYTksIGNvcnRleC1hMTUsIGtyYWl0LCBkZW52ZXIuIFVzZSBnZW5lcmljIGZvciBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgYSBDUFUgc2ltaWxhciB0byBhbnkgb2YgdGhlIHN1cHBvcnRlZCBjcHUgdmFyaWFudHMuIikKK2VuZGlmCitpbmNsdWRlICQoY3B1X3ZhcmlhbnRfbWspCitsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcyArPSAkKGNwdV92YXJpYW50X21rKQogCi1fTElCQ19BUkNIX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9IFwKLSAgICAkKExPQ0FMX1BBVEgpL2FyY2gtYXJtLyQoVEFSR0VUX0NQVV9WQVJJQU5UKS8kKFRBUkdFVF9DUFVfVkFSSUFOVCkubWsKLWluY2x1ZGUgJChMT0NBTF9QQVRIKS9hcmNoLWFybS8kKFRBUkdFVF9DUFVfVkFSSUFOVCkvJChUQVJHRVRfQ1BVX1ZBUklBTlQpLm1rCitjcHVfdmFyaWFudF9tayA6PQorCisKK2xpYmNfY3J0X3RhcmdldF9jZmxhZ3NfYXJtIDo9IFwKKyAgICAtSSQoTE9DQUxfUEFUSCkvYXJjaC1hcm0vaW5jbHVkZSBcCisgICAgLW10aHVtYi1pbnRlcndvcmsKKworbGliY19jcnRfdGFyZ2V0X3NvX2NmbGFnc19hcm0gOj0KKworbGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX2ZpbGVfYXJtIDo9IFwKKyAgICAkKExPQ0FMX1BBVEgpL2FyY2gtY29tbW9uL2Jpb25pYy9jcnRiZWdpbi5jCisKK2xpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9zb19maWxlX2FybSA6PSBcCisgICAgJChMT0NBTF9QQVRIKS9hcmNoLWNvbW1vbi9iaW9uaWMvY3J0YmVnaW5fc28uYwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvX19hZWFiaS5jIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX19hZWFiaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNTRmNjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2FlYWJpLmMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoX19jbGFuZ19fKQorLy8gY2xhbmcgaW50ZXJwcmV0cyAtZm5vLWJ1aWx0aW4gbW9yZSBsb29zZWx5IHRoYW4geW91IG1pZ2h0IGV4cGVjdCwKKy8vIGFuZCB0aGlua3MgaXQncyBva2F5IHRvIHN0aWxsIHN1YnN0aXR1dGUgYnVpbHRpbnMgYXMgbG9uZyBhcyB0aGV5J3JlCisvLyBuYW1lZCBfX2FlYWJpXyogcmF0aGVyIHRoYW4gX19idWlsdGluXyosIHdoaWNoIGNhdXNlcyBpbmZpbml0ZQorLy8gcmVjdXJzaW9uIGlmIHdlIGhhdmUgdGhlIGZvcnRpZmllZCBtZW1jcHkgdmlzaWJsZSBpbiB0aGlzIGZpbGUuCisjdW5kZWYgX0ZPUlRJRllfU09VUkNFCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitleHRlcm4gaW50IF9fY3hhX2F0ZXhpdCh2b2lkICgqKSh2b2lkKiksIHZvaWQqLCB2b2lkKik7CisKKy8qIFRoZSAiQysrIEFCSSBmb3IgQVJNIiBkb2N1bWVudCBzdGF0ZXMgdGhhdCBzdGF0aWMgQysrIGNvbnN0cnVjdG9ycywKKyAqIHdoaWNoIGFyZSBjYWxsZWQgZnJvbSB0aGUgLmluaXRfYXJyYXksIHNob3VsZCBtYW51YWxseSBjYWxsCisgKiBfX2FlYWJpX2F0ZXhpdCgpIHRvIHJlZ2lzdGVyIHN0YXRpYyBkZXN0cnVjdG9ycyBleHBsaWNpdGx5LgorICoKKyAqIE5vdGUgdGhhdCAnZHNvX2hhbmRsZScgaXMgdGhlIGFkZHJlc3Mgb2YgYSBtYWdpYyBsaW5rZXItZ2VuZXJhdGUKKyAqIHZhcmlhYmxlIGZyb20gdGhlIHNoYXJlZCBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgY29uc3RydWN0b3IvZGVzdHJ1Y3RvcgorICovCisKKy8vIE1ha2UgdGhpcyBhIHdlYWsgc3ltYm9sIHRvIGF2b2lkIGEgbXVsdGlwbGUgZGVmaW5pdGlvbiBlcnJvciB3aGVuIGxpbmtpbmcgd2l0aCBsaWJzdGRjKystdjMuCitpbnQgX19hdHRyaWJ1dGVfXygod2VhaykpCitfX2FlYWJpX2F0ZXhpdCh2b2lkICpvYmplY3QsIHZvaWQgKCpkZXN0cnVjdG9yKSAodm9pZCAqKSwgdm9pZCAqZHNvX2hhbmRsZSkgeworICAgIHJldHVybiBfX2N4YV9hdGV4aXQoZGVzdHJ1Y3Rvciwgb2JqZWN0LCBkc29faGFuZGxlKTsKK30KKworCit2b2lkIF9fYWVhYmlfbWVtY3B5OCh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7CisgICAgbWVtY3B5KGRlc3QsIHNyYywgbik7Cit9CisKK3ZvaWQgX19hZWFiaV9tZW1jcHk0KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pIHsKKyAgICBtZW1jcHkoZGVzdCwgc3JjLCBuKTsKK30KKwordm9pZCBfX2FlYWJpX21lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7CisgICAgbWVtY3B5KGRlc3QsIHNyYywgbik7Cit9CisKKwordm9pZCBfX2FlYWJpX21lbW1vdmU4KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pIHsKKyAgICBtZW1tb3ZlKGRlc3QsIHNyYywgbik7Cit9CisKK3ZvaWQgX19hZWFiaV9tZW1tb3ZlNCh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7CisgICAgbWVtbW92ZShkZXN0LCBzcmMsIG4pOworfQorCit2b2lkIF9fYWVhYmlfbWVtbW92ZSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7CisgICAgbWVtbW92ZShkZXN0LCBzcmMsIG4pOworfQorCisvKgorICogX19hZWFiaV9tZW1zZXQgaGFzIHRoZSBvcmRlciBvZiBpdHMgc2Vjb25kIGFuZCB0aGlyZCBhcmd1bWVudHMgcmV2ZXJzZWQuCisgKiAgVGhpcyBhbGxvd3MgX19hZWFiaV9tZW1jbHIgdG8gdGFpbC1jYWxsIF9fYWVhYmlfbWVtc2V0CisgKi8KKwordm9pZCBfX2FlYWJpX21lbXNldDgodm9pZCAqZGVzdCwgc2l6ZV90IG4sIGludCBjKSB7CisgICAgbWVtc2V0KGRlc3QsIGMsIG4pOworfQorCit2b2lkIF9fYWVhYmlfbWVtc2V0NCh2b2lkICpkZXN0LCBzaXplX3QgbiwgaW50IGMpIHsKKyAgICBtZW1zZXQoZGVzdCwgYywgbik7Cit9CisKK3ZvaWQgX19hZWFiaV9tZW1zZXQodm9pZCAqZGVzdCwgc2l6ZV90IG4sIGludCBjKSB7CisgICAgbWVtc2V0KGRlc3QsIGMsIG4pOworfQorCisKK3ZvaWQgX19hZWFiaV9tZW1jbHI4KHZvaWQgKmRlc3QsIHNpemVfdCBuKSB7CisgICAgX19hZWFiaV9tZW1zZXQ4KGRlc3QsIG4sIDApOworfQorCit2b2lkIF9fYWVhYmlfbWVtY2xyNCh2b2lkICpkZXN0LCBzaXplX3QgbikgeworICAgIF9fYWVhYmlfbWVtc2V0NChkZXN0LCBuLCAwKTsKK30KKwordm9pZCBfX2FlYWJpX21lbWNscih2b2lkICpkZXN0LCBzaXplX3QgbikgeworICAgIF9fYWVhYmlfbWVtc2V0KGRlc3QsIG4sIDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL19fYmlvbmljX2Nsb25lLlMKaW5kZXggNzJmNDg5Mi4uZjVjZjllMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TCkBAIC0zMSw3ICszMSw2IEBACiAvLyBwaWRfdCBfX2Jpb25pY19jbG9uZShpbnQgZmxhZ3MsIHZvaWQqIGNoaWxkX3N0YWNrLCBwaWRfdCogcGFyZW50X3RpZCwgdm9pZCogdGxzLCBwaWRfdCogY2hpbGRfdGlkLCBpbnQgKCpmbikodm9pZCopLCB2b2lkKiBhcmcpOwogRU5UUlkoX19iaW9uaWNfY2xvbmUpCiAgICAgbW92ICAgICBpcCwgc3AKLSAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KICAgICAjIHNhdmUgcmVnaXN0ZXJzIHRvIHBhcmVudCBzdGFjawogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgpAQCAtNTUsMjAgKzU0LDE2IEBACiAKICAgICAjIEluIHRoZSBwYXJlbnQsIHJlbG9hZCBzYXZlZCByZWdpc3RlcnMgdGhlbiBlaXRoZXIgcmV0dXJuIG9yIHNldCBlcnJuby4KICAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAxOiAgIyBUaGUgY2hpbGQuCi0gICAgIyBSZS1hZGQgdGhlIHVud2luZCBkaXJlY3RpdmVzIHRoYXQgd2VyZSByZXNldCBmcm9tIGFib3ZlLgotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKLSAgICAuY2ZpX3JlbF9vZmZzZXQgcjQsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgcjUsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgcjYsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgcjcsIDEyCisgICAgIyBTZXR0aW5nIGxyIHRvIDAgd2lsbCBtYWtlIHRoZSB1bndpbmRlciBzdG9wIGF0IF9fc3RhcnRfdGhyZWFkCisgICAgbW92ICAgIGxyLCAjMAogICAgIGxkciAgICByMCwgW3NwLCAjLTRdCiAgICAgbGRyICAgIHIxLCBbc3AsICMtOF0KLSAgICBiICAgICAgX19iaW9uaWNfY2xvbmVfZW50cnkKKyAgICBiICAgICAgX19zdGFydF90aHJlYWQKIEVORChfX2Jpb25pY19jbG9uZSkKKy5oaWRkZW4gX19iaW9uaWNfY2xvbmUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL19fZ2V0X3NwLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2dldF9zcC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTdlN2I3Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL19fZ2V0X3NwLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi1FTlRSWShfX2dldF9zcCkKLSAgbW92IHIwLCBzcAotICBieCBscgotRU5EKF9fZ2V0X3NwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TCmluZGV4IDZmYTk1MGUuLjFhNjdmZWQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogLy8gdm9pZCBfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKHZvaWQqIHN0YWNrQmFzZSwgc2l6ZV90IHN0YWNrU2l6ZSkKLUVOVFJZKF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24pCitFTlRSWV9QUklWQVRFKF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24pCiAgIGxkciByNywgPV9fTlJfbXVubWFwCiAgIHN3aSAjMAogICAvLyBJZiBtdW5tYXAgZmFpbGVkLCB3ZSBpZ25vcmUgdGhlIGZhaWx1cmUgYW5kIGV4aXQgYW55d2F5LgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvX3NldGptcC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX3NldGptcC5TCmluZGV4IDZiOGFhNTAuLjY0YTBhMzEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL19zZXRqbXAuUworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9fc2V0am1wLlMKQEAgLTM0LDcgKzM0LDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogI2luY2x1ZGUgPG1hY2hpbmUvc2V0am1wLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KIApAQCAtMTA3LDcgKzEwNyw3IEBACiAKIAkvKiB2YWxpZGF0aW9uIGZhaWxlZCwgZGllIGRpZSBkaWUuICovCiBib3RjaDoKLQlibAlQSUNfU1lNKF9DX0xBQkVMKGxvbmdqbXBlcnJvciksIFBMVCkKLQlibAlQSUNfU1lNKF9DX0xBQkVMKGFib3J0KSwgUExUKQorCWJsCVBJQ19TWU0obG9uZ2ptcGVycm9yLCBQTFQpCisJYmwJUElDX1NZTShhYm9ydCwgUExUKQogCWIJLiAtIDgJCS8qIENhbm5vdCBnZXQgaGVyZSAqLwogRU5EKF9sb25nam1wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvYWJvcnRfYXJtLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9hYm9ydF9hcm0uUwppbmRleCAyZmMyOTEzLi42YjE4MWVmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9hYm9ydF9hcm0uUworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9hYm9ydF9hcm0uUwpAQCAtMjYsNyArMjYsNyBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIC8qCiAgKiBDb2RpbmcgdGhlIGFib3J0IGZ1bmN0aW9uIGluIGFzc2VtYmx5IHNvIHRoYXQgcmVnaXN0ZXJzIGFyZSBndWFyYW50ZWVkIHRvCkBAIC0zNiwxMCArMzYsOSBAQAogICogc2VxdWVuY2Ugd2hlbiB0aGUgY3Jhc2ggaGFwcGVucy4KICAqLwogRU5UUlkoYWJvcnQpCi0gICAgLnNhdmUgICB7cjMsIHIxNH0KICAgICBzdG1mZCAgIHNwISwge3IzLCByMTR9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHIzLCAwCiAgICAgLmNmaV9yZWxfb2Zmc2V0IHIxNCwgNAotICAgIGJsICAgICAgUElDX1NZTShfQ19MQUJFTChfX2xpYmNfYW5kcm9pZF9hYm9ydCksIFBMVCkKKyAgICBibCAgICAgIFBJQ19TWU0oX19saWJjX2FuZHJvaWRfYWJvcnQsIFBMVCkKIEVORChhYm9ydCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2VhYmkuYyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2VhYmkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUxMWRkZC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9lYWJpLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1leHRlcm4gaW50ICBfX2N4YV9hdGV4aXQodm9pZCAoKikodm9pZCopLCB2b2lkKiwgdm9pZCogKTsKLQotLyogVGhlICJDKysgQUJJIGZvciBBUk0iIGRvY3VtZW50IHN0YXRlcyB0aGF0IHN0YXRpYyBDKysgY29uc3RydWN0b3JzLAotICogd2hpY2ggYXJlIGNhbGxlZCBmcm9tIHRoZSAuaW5pdF9hcnJheSwgc2hvdWxkIG1hbnVhbGx5IGNhbGwKLSAqIF9fYWVhYmlfYXRleGl0KCkgdG8gcmVnaXN0ZXIgc3RhdGljIGRlc3RydWN0b3JzIGV4cGxpY2l0bHkuCi0gKgotICogTm90ZSB0aGF0ICdkc29faGFuZGxlJyBpcyB0aGUgYWRkcmVzcyBvZiBhIG1hZ2ljIGxpbmtlci1nZW5lcmF0ZQotICogdmFyaWFibGUgZnJvbSB0aGUgc2hhcmVkIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBjb25zdHJ1Y3Rvci9kZXN0cnVjdG9yCi0gKi8KLQotLyogTWFrZSB0aGlzIGEgd2VhayBzeW1ib2wgdG8gYXZvaWQgYSBtdWx0aXBsZSBkZWZpbml0aW9uIGVycm9yIHdoZW4gbGlua2luZwotICogd2l0aCBsaWJzdGRjKystdjMuICAqLwotaW50IF9fYXR0cmlidXRlX18oKHdlYWspKQotX19hZWFiaV9hdGV4aXQgKHZvaWQgKm9iamVjdCwgdm9pZCAoKmRlc3RydWN0b3IpICh2b2lkICopLCB2b2lkICpkc29faGFuZGxlKQotewotICAgIHJldHVybiBfX2N4YV9hdGV4aXQoZGVzdHJ1Y3Rvciwgb2JqZWN0LCBkc29faGFuZGxlKTsKLX0KLQotCi12b2lkIF9fYWVhYmlfbWVtY3B5OCh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7Ci0gICAgbWVtY3B5KGRlc3QsIHNyYywgbik7Ci19Ci0KLXZvaWQgX19hZWFiaV9tZW1jcHk0KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pIHsKLSAgICBtZW1jcHkoZGVzdCwgc3JjLCBuKTsKLX0KLQotdm9pZCBfX2FlYWJpX21lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7Ci0gICAgbWVtY3B5KGRlc3QsIHNyYywgbik7Ci19Ci0KLQotdm9pZCBfX2FlYWJpX21lbW1vdmU4KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pIHsKLSAgICBtZW1tb3ZlKGRlc3QsIHNyYywgbik7Ci19Ci0KLXZvaWQgX19hZWFiaV9tZW1tb3ZlNCh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7Ci0gICAgbWVtbW92ZShkZXN0LCBzcmMsIG4pOwotfQotCi12b2lkIF9fYWVhYmlfbWVtbW92ZSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7Ci0gICAgbWVtbW92ZShkZXN0LCBzcmMsIG4pOwotfQotCi0vKgotICogX19hZWFiaV9tZW1zZXQgaGFzIHRoZSBvcmRlciBvZiBpdHMgc2Vjb25kIGFuZCB0aGlyZCBhcmd1bWVudHMgcmV2ZXJzZWQuIAotICogIFRoaXMgYWxsb3dzIF9fYWVhYmlfbWVtY2xyIHRvIHRhaWwtY2FsbCBfX2FlYWJpX21lbXNldAotICovCi0gCi12b2lkIF9fYWVhYmlfbWVtc2V0OCh2b2lkICpkZXN0LCBzaXplX3QgbiwgaW50IGMpIHsKLSAgICBtZW1zZXQoZGVzdCwgYywgbik7Ci19Ci0KLXZvaWQgX19hZWFiaV9tZW1zZXQ0KHZvaWQgKmRlc3QsIHNpemVfdCBuLCBpbnQgYykgewotICAgIG1lbXNldChkZXN0LCBjLCBuKTsKLX0KLQotdm9pZCBfX2FlYWJpX21lbXNldCh2b2lkICpkZXN0LCBzaXplX3QgbiwgaW50IGMpIHsKLSAgICBtZW1zZXQoZGVzdCwgYywgbik7Ci19Ci0KLQotdm9pZCBfX2FlYWJpX21lbWNscjgodm9pZCAqZGVzdCwgc2l6ZV90IG4pIHsKLSAgICBfX2FlYWJpX21lbXNldDgoZGVzdCwgbiwgMCk7Ci19Ci0KLXZvaWQgX19hZWFiaV9tZW1jbHI0KHZvaWQgKmRlc3QsIHNpemVfdCBuKSB7Ci0gICAgX19hZWFiaV9tZW1zZXQ0KGRlc3QsIG4sIDApOwotfQotCi12b2lkIF9fYWVhYmlfbWVtY2xyKHZvaWQgKmRlc3QsIHNpemVfdCBuKSB7Ci0gICAgX19hZWFiaV9tZW1zZXQoZGVzdCwgbiwgMCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9mdXRleF9hcm0uUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2Z1dGV4X2FybS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWJhMjc4Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2Z1dGV4X2FybS5TCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLSNkZWZpbmUgRlVURVhfV0FJVCAwCi0jZGVmaW5lIEZVVEVYX1dBS0UgMQotCi0vLyBpbnQgX19mdXRleF9zeXNjYWxsMyh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCBvcCwgaW50IGNvdW50KQotRU5UUlkoX19mdXRleF9zeXNjYWxsMykKLSAgICBtb3YgICAgIGlwLCByNwotICAgIGxkciAgICAgcjcsID1fX05SX2Z1dGV4Ci0gICAgc3dpICAgICAjMAotICAgIG1vdiAgICAgcjcsIGlwCi0gICAgYnggICAgICBscgotRU5EKF9fZnV0ZXhfc3lzY2FsbDMpCi0KLS8vIGludCBfX2Z1dGV4X3N5c2NhbGw0KHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IG9wLCBpbnQgdmFsLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqIHRpbWVvdXQpCi1FTlRSWShfX2Z1dGV4X3N5c2NhbGw0KQotICAgIGIgX19mdXRleF9zeXNjYWxsMwotRU5EKF9fZnV0ZXhfc3lzY2FsbDQpCi0KLS8vIGludCBfX2Z1dGV4X3dhaXQodm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgdmFsLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqIHRpbWVvdXQpCi1FTlRSWShfX2Z1dGV4X3dhaXQpCi0gICAgbW92ICAgICBpcCwgcjcKLSAgICBtb3YgICAgIHIzLCByMgotICAgIG1vdiAgICAgcjIsIHIxCi0gICAgbW92ICAgICByMSwgI0ZVVEVYX1dBSVQKLSAgICBsZHIgICAgIHI3LCA9X19OUl9mdXRleAotICAgIHN3aSAgICAgIzAKLSAgICBtb3YgICAgIHI3LCBpcAotICAgIGJ4ICAgICAgbHIKLUVORChfX2Z1dGV4X3dhaXQpCi0KLS8vIGludCBfX2Z1dGV4X3dha2Uodm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgY291bnQpCi1FTlRSWShfX2Z1dGV4X3dha2UpCi0gICAgbW92ICAgICBpcCwgcjcKLSAgICBtb3YgICAgIHIyLCByMQotICAgIG1vdiAgICAgcjEsICNGVVRFWF9XQUtFCi0gICAgbGRyICAgICByNywgPV9fTlJfZnV0ZXgKLSAgICBzd2kgICAgICMwCi0gICAgbW92ICAgICByNywgaXAKLSAgICBieCAgICAgIGxyCi1FTkQoX19mdXRleF93YWtlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvbGliZ2NjX2NvbXBhdC5jIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvbGliZ2NjX2NvbXBhdC5jCmluZGV4IGY2OTQwNjAuLjEwZmFmMmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2xpYmdjY19jb21wYXQuYworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9saWJnY2NfY29tcGF0LmMKQEAgLTEsMTc3ICsxLDE1OSBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLworLyogR2VuZXJhdGVkIGJ5IGdlbmxpYmdjY19jb21wYXQucHkgKi8KIAotLyogVGhpcyBmaWxlIGNvbnRhaW5zIGR1bW15IHJlZmVyZW5jZXMgdG8gbGliZ2NjLmEgZnVuY3Rpb25zIHRvIGZvcmNlIHRoZQotICogZHluYW1pYyBsaW5rZXIgdG8gY29weSB0aGVpciBkZWZpbml0aW9uIGludG8gdGhlIGZpbmFsIGxpYmMuc28gYmluYXJ5LgotICoKLSAqIFRoZXkgYXJlIHJlcXVpcmVkIHRvIGVuc3VyZSBiYWNrd2FyZHMgYmluYXJ5IGNvbXBhdGliaWxpdHkgd2l0aAotICogbGliYy5zbyBwcm92aWRlZCBieSB0aGUgcGxhdGZvcm0gYW5kIGJpbmFyaWVzIGJ1aWx0IHdpdGggdGhlIE5ESyBvcgotICogZGlmZmVyZW50IHZlcnNpb25zL2NvbmZpZ3VyYXRpb25zIG9mIHRvb2xjaGFpbnMuCi0gKgotICogTm93LCBmb3IgYSBtb3JlIGVsYWJvcmF0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgaXNzdWU6Ci0gKgotICogbGliZ2NjLmEgaXMgYSBjb21waWxlci1zcGVjaWZpYyBsaWJyYXJ5IGNvbnRhaW5pbmcgdmFyaW91cyBoZWxwZXIKLSAqIGZ1bmN0aW9ucyB1c2VkIHRvIGltcGxlbWVudCBjZXJ0YWluIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IG5lY2Vzc2FyaWx5Ci0gKiBzdXBwb3J0ZWQgYnkgdGhlIHRhcmdldCBDUFUuIEZvciBleGFtcGxlLCBpbnRlZ2VyIGRpdmlzaW9uIGRvZXNuJ3QgaGF2ZSBhCi0gKiBjb3JyZXNwb25kaW5nIENQVSBpbnN0cnVjdGlvbiBvbiBBUk12NSwgYW5kIGlzIGluc3RlYWQgaW1wbGVtZW50ZWQgaW4gdGhlCi0gKiBjb21waWxlci1nZW5lcmF0ZWQgbWFjaGluZSBjb2RlIGFzIGEgY2FsbCB0byBhbiBfX2lkaXYgaGVscGVyIGZ1bmN0aW9uLgotICoKLSAqIE5vcm1hbGx5LCBvbmUgaGFzIHRvIHBsYWNlIGxpYmdjYy5hIGluIHRoZSBsaW5rIGNvbW1hbmQgdXNlZCB0byBnZW5lcmF0ZQotICogdGFyZ2V0IGJpbmFyaWVzIChzaGFyZWQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcykgYWZ0ZXIgYWxsIG9iamVjdHMgYW5kCi0gKiBzdGF0aWMgbGlicmFyaWVzLCBidXQgYmVmb3JlIGRlcGVuZGVudCBzaGFyZWQgbGlicmFyaWVzLCBpLmUuIHNvbWV0aGluZwotICogbGlrZToKLSAqICAgICAgICAgZ2NjIDxvcHRpb25zPiAtbyBsaWJmb28uc28gIGZvby5hIGxpYmdjYy5hIC1sYyAtbG0KLSAqCi0gKiBUaGlzIGVuc3VyZXMgdGhhdCBhbnkgaGVscGVyIGZ1bmN0aW9uIG5lZWRlZCBieSB0aGUgY29kZSBpbiBmb28uYSBpcyBjb3BpZWQKLSAqIGludG8gdGhlIGZpbmFsIGxpYmZvby5zby4gSG93ZXZlciwgZG9pbmcgc28gd2lsbCBsaW5rIGEgYnVuY2ggb2Ygb3RoZXIgX19jeGEKLSAqIGZ1bmN0aW9ucyBmcm9tIGxpYmdjYy5hIGludG8gZWFjaCAuc28gYW5kIGV4ZWN1dGFibGUsIGNhdXNpbmcgNGsrIGluY3JlYXNlCi0gKiBpbiBldmVyeSBiaW5hcnkuIFRoZXJlZm9yZSB0aGUgQW5kcm9pZCBwbGF0Zm9ybSBidWlsZCBzeXN0ZW0gaGFzIGJlZW4KLSAqIHVzaW5nIHRoaXMgaW5zdGVhZDoKLSAqCi0gKiAgICAgICAgIGdjYyA8b3B0aW9ucz4gLW8gbGliZm9vLnNvIGZvby5hIC1sYyAtbG0gbGliZ2NjLmEKLSAqCi0gKiBUaGUgcHJvYmxlbSB3aXRoIHRoaXMgaXMgdGhhdCBpZiBvbmUgaGVscGVyIGZ1bmN0aW9uIG5lZWRlZCBieSBmb28uYSBoYXMKLSAqIGFscmVhZHkgYmVlbiBjb3BpZWQgaW50byBsaWJjLnNvIG9yIGxpYm0uc28sIHRoZW4gbm90aGluZyB3aWxsIGJlIGNvcGllZAotICogaW50byBsaWJmb28uc28uIEluc3RlYWQsIGEgc3ltYm9sIGltcG9ydCBkZWZpbml0aW9uIHdpbGwgYmUgYWRkZWQgdG8gaXQKLSAqIHNvIGxpYmZvby5zbyBjYW4gZGlyZWN0bHkgY2FsbCB0aGUgb25lIGluIGxpYmMuc28gYXQgcnVudGltZS4KLSAqCi0gKiBXaGVuIHJlZnJlc2hpbmcgdG9vbGNoYWlucyBmb3IgbmV3IHZlcnNpb25zIG9yIHVzaW5nIGRpZmZlcmVudCBhcmNoaXRlY3R1cmUKLSAqIGZsYWdzLCB0aGUgc2V0IG9mIGhlbHBlciBmdW5jdGlvbnMgY29waWVkIHRvIGxpYmMuc28gbWF5IGNoYW5nZSwgd2hpY2gKLSAqIHJlc3VsdGVkIGluIHNvbWUgbmF0aXZlIHNoYXJlZCBsaWJyYXJpZXMgZ2VuZXJhdGVkIHdpdGggdGhlIE5ESyBvciBwcmVidWlsdHMKLSAqIGZyb20gdmVuZG9ycyB0byBmYWlsIHRvIGxvYWQgcHJvcGVybHkuCi0gKgotICogVGhlIE5ESyBoYXMgYmVlbiBmaXhlZCBhZnRlciAxLjZfcjEgdG8gdXNlIHRoZSBjb3JyZWN0IGxpbmsgY29tbWFuZCwgc28KLSAqIGFueSBuYXRpdmUgc2hhcmVkIGxpYnJhcnkgZ2VuZXJhdGVkIHdpdGggaXQgc2hvdWxkIG5vdyBiZSBzYWZlIGZyb20gdGhhdAotICogcHJvYmxlbS4gT24gdGhlIG90aGVyIGhhbmQsIGV4aXN0aW5nIHNoYXJlZCBsaWJyYXJpZXMgZGlzdHJpYnV0ZWQgd2l0aAotICogYXBwbGljYXRpb25zIHRoYXQgd2VyZSBnZW5lcmF0ZWQgd2l0aCBhIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIE5ESwotICogc3RpbGwgbmVlZCBhbGwgMS41LzEuNiBoZWxwZXIgZnVuY3Rpb25zIGluIGxpYmMuc28gYW5kIGxpYm0uc28KLSAqCi0gKiBBZnRlciAzLjIsIHRoZSB0b29sY2hhaW4gd2FzIHVwZGF0ZWQgYWdhaW4sIGFkZGluZyBfX2FlYWJpX2YydWl6IHRvIHRoZQotICogbGlzdCBvZiByZXF1aXJlbWVudHMuIFRlY2huaWNhbGx5LCB0aGlzIGlzIGR1ZSB0byBtaXMtbGlua2VkIE5ESyBsaWJyYXJpZXMKLSAqIGJ1dCBpdCBpcyBlYXNpZXIgdG8gYWRkIGEgc2luZ2xlIGZ1bmN0aW9uIGhlcmUgdGhhbiBhc2tpbmcgc2V2ZXJhbCBhcHAKLSAqIGRldmVsb3BlcnMgdG8gZml4IHRoZWlyIGJ1aWxkLgotICoKLSAqIFRoZSBfX2FlYWJpX2lkaXYgZnVuY3Rpb24gaXMgYWRkZWQgdG8gdGhlIGxpc3Qgc2luY2UgY29ydGV4LWExNSBzdXBwb3J0cwotICogSFcgaWRpdiBpbnN0cnVjdGlvbnMgc28gdGhlIHN5c3RlbSBsaWJjLnNvIGRvZXNuJ3QgcHVsbCBpbiB0aGUgcmVmZXJlbmNlIHRvCi0gKiBfX2FlYWJpX2lkaXYgYnV0IGxlZ2FjeSBsaWJyYXJpZXMgYnVpbHQgYWdhaW5zdCBjb3J0ZXgtYTkgdGFyZ2V0cyBzdGlsbCBuZWVkCi0gKiBpdC4KLSAqCi0gKiBGaW5hbCBub3RlOiBzb21lIG9mIHRoZSBmdW5jdGlvbnMgYmVsb3cgc2hvdWxkIHJlYWxseSBiZSBpbiBsaWJtLnNvIHRvCi0gKiAgICAgICAgICAgICBjb21wbGV0ZWx5IHJlZmxlY3QgdGhlIHN0YXRlIG9mIDEuNS8xLjYgc3lzdGVtIGltYWdlcy4gSG93ZXZlciwKLSAqICAgICAgICAgICAgIHNpbmNlIGxpYm0uc28gZGVwZW5kcyBvbiBsaWJjLnNvLCBpdCdzIGVhc2llciB0byBwdXQgYWxsIG9mCi0gKiAgICAgICAgICAgICB0aGVzZSBpbiBsaWJjLnNvIGluc3RlYWQsIHNpbmNlIHRoZSBkeW5hbWljIGxpbmtlciB3aWxsIGFsd2F5cwotICogICAgICAgICAgICAgc2VhcmNoIGluIGxpYmMuc28gYmVmb3JlIGxpYm0uc28gZm9yIGRlcGVuZGVuY2llcy4KLSAqLworZXh0ZXJuIGNoYXIgX19hZGRkZjM7CitleHRlcm4gY2hhciBfX2FkZHNmMzsKK2V4dGVybiBjaGFyIF9fYWVhYmlfY2RjbXBlcTsKK2V4dGVybiBjaGFyIF9fYWVhYmlfY2RjbXBsZTsKK2V4dGVybiBjaGFyIF9fYWVhYmlfY2RyY21wbGU7CitleHRlcm4gY2hhciBfX2FlYWJpX2QyZjsKK2V4dGVybiBjaGFyIF9fYWVhYmlfZDJpejsKK2V4dGVybiBjaGFyIF9fYWVhYmlfZGFkZDsKK2V4dGVybiBjaGFyIF9fYWVhYmlfZGNtcGVxOworZXh0ZXJuIGNoYXIgX19hZWFiaV9kY21wZ2U7CitleHRlcm4gY2hhciBfX2FlYWJpX2RjbXBndDsKK2V4dGVybiBjaGFyIF9fYWVhYmlfZGNtcGxlOworZXh0ZXJuIGNoYXIgX19hZWFiaV9kY21wbHQ7CitleHRlcm4gY2hhciBfX2FlYWJpX2RjbXB1bjsKK2V4dGVybiBjaGFyIF9fYWVhYmlfZGRpdjsKK2V4dGVybiBjaGFyIF9fYWVhYmlfZG11bDsKK2V4dGVybiBjaGFyIF9fYWVhYmlfZHJzdWI7CitleHRlcm4gY2hhciBfX2FlYWJpX2RzdWI7CitleHRlcm4gY2hhciBfX2FlYWJpX2YyZDsKK2V4dGVybiBjaGFyIF9fYWVhYmlfZjJpejsKK2V4dGVybiBjaGFyIF9fYWVhYmlfZjJ1aXo7CitleHRlcm4gY2hhciBfX2FlYWJpX2ZhZGQ7CitleHRlcm4gY2hhciBfX2FlYWJpX2ZjbXB1bjsKK2V4dGVybiBjaGFyIF9fYWVhYmlfZmRpdjsKK2V4dGVybiBjaGFyIF9fYWVhYmlfZm11bDsKK2V4dGVybiBjaGFyIF9fYWVhYmlfZnJzdWI7CitleHRlcm4gY2hhciBfX2FlYWJpX2ZzdWI7CitleHRlcm4gY2hhciBfX2FlYWJpX2kyZDsKK2V4dGVybiBjaGFyIF9fYWVhYmlfaTJmOworZXh0ZXJuIGNoYXIgX19hZWFiaV9pZGl2OworZXh0ZXJuIGNoYXIgX19hZWFiaV9pZGl2bW9kOworZXh0ZXJuIGNoYXIgX19hZWFiaV9sMmQ7CitleHRlcm4gY2hhciBfX2FlYWJpX2wyZjsKK2V4dGVybiBjaGFyIF9fYWVhYmlfbGFzcjsKK2V4dGVybiBjaGFyIF9fYWVhYmlfbGRpdm1vZDsKK2V4dGVybiBjaGFyIF9fYWVhYmlfbGxzbDsKK2V4dGVybiBjaGFyIF9fYWVhYmlfbGxzcjsKK2V4dGVybiBjaGFyIF9fYWVhYmlfbG11bDsKK2V4dGVybiBjaGFyIF9fYWVhYmlfdWkyZDsKK2V4dGVybiBjaGFyIF9fYWVhYmlfdWkyZjsKK2V4dGVybiBjaGFyIF9fYWVhYmlfdWlkaXY7CitleHRlcm4gY2hhciBfX2FlYWJpX3VpZGl2bW9kOworZXh0ZXJuIGNoYXIgX19hZWFiaV91bDJkOworZXh0ZXJuIGNoYXIgX19hZWFiaV91bDJmOworZXh0ZXJuIGNoYXIgX19hZWFiaV91bGRpdm1vZDsKK2V4dGVybiBjaGFyIF9fYWVhYmlfdW53aW5kX2NwcF9wcjA7CitleHRlcm4gY2hhciBfX2FlYWJpX3Vud2luZF9jcHBfcHIxOworZXh0ZXJuIGNoYXIgX19jbXBkZjI7CitleHRlcm4gY2hhciBfX2RpdmRmMzsKK2V4dGVybiBjaGFyIF9fZGl2c2YzOworZXh0ZXJuIGNoYXIgX19lcWRmMjsKK2V4dGVybiBjaGFyIF9fZXh0ZW5kc2ZkZjI7CitleHRlcm4gY2hhciBfX2ZpeGRmc2k7CitleHRlcm4gY2hhciBfX2ZpeHNmc2k7CitleHRlcm4gY2hhciBfX2Zsb2F0ZGlkZjsKK2V4dGVybiBjaGFyIF9fZmxvYXRkaXNmOworZXh0ZXJuIGNoYXIgX19mbG9hdHNpZGY7CitleHRlcm4gY2hhciBfX2Zsb2F0c2lzZjsKK2V4dGVybiBjaGFyIF9fZmxvYXR1bmRpZGY7CitleHRlcm4gY2hhciBfX2Zsb2F0dW5kaXNmOworZXh0ZXJuIGNoYXIgX19mbG9hdHVuc2lkZjsKK2V4dGVybiBjaGFyIF9fZmxvYXR1bnNpc2Y7CitleHRlcm4gY2hhciBfX2dlZGYyOworZXh0ZXJuIGNoYXIgX19ndGRmMjsKK2V4dGVybiBjaGFyIF9fbGVkZjI7CitleHRlcm4gY2hhciBfX2x0ZGYyOworZXh0ZXJuIGNoYXIgX19tdWxkZjM7CitleHRlcm4gY2hhciBfX211bGRpMzsKK2V4dGVybiBjaGFyIF9fbXVsc2YzOworZXh0ZXJuIGNoYXIgX19uZWRmMjsKK2V4dGVybiBjaGFyIF9fcG9wY291bnRfdGFiOworZXh0ZXJuIGNoYXIgX19wb3Bjb3VudHNpMjsKK2V4dGVybiBjaGFyIF9fc3ViZGYzOworZXh0ZXJuIGNoYXIgX19zdWJzZjM7CitleHRlcm4gY2hhciBfX3RydW5jZGZzZjI7CitleHRlcm4gY2hhciBfX3Vub3JkZGYyOworZXh0ZXJuIGNoYXIgX191bm9yZHNmMjsKIAotI2RlZmluZSAgIENPTVBBVF9GVU5DVElPTlNfTElTVCBcCi0gICAgWFgoX19hZGRkZjMpICAgICAgICAgICAgIFwKLSAgICBYWChfX2FkZHNmMykgICAgICAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfY2RjbXBlcSkgICAgICBcCi0gICAgWFgoX19hZWFiaV9jZGNtcGxlKSAgICAgIFwKLSAgICBYWChfX2FlYWJpX2NkcmNtcGxlKSAgICAgXAotICAgIFhYKF9fYWVhYmlfZDJmKSAgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9kMml6KSAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2RhZGQpICAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfZGNtcGVxKSAgICAgICBcCi0gICAgWFgoX19hZWFiaV9kY21wZ2UpICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2RjbXBndCkgICAgICAgXAotICAgIFhYKF9fYWVhYmlfZGNtcGxlKSAgICAgICBcCi0gICAgWFgoX19hZWFiaV9kY21wbHQpICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2RjbXB1bikgICAgICAgXAotICAgIFhYKF9fYWVhYmlfZGRpdikgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9kbXVsKSAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2Ryc3ViKSAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfZHN1YikgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9mMmQpICAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2YyaXopICAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfZjJ1aXopICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9mYWRkKSAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2ZjbXB1bikgICAgICAgXAotICAgIFhYKF9fYWVhYmlfZmRpdikgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9mbXVsKSAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2Zyc3ViKSAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfZnN1YikgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9pMmQpICAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2kyZikgICAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfaWRpdikgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9pZGl2bW9kKSAgICAgIFwKLSAgICBYWChfX2FlYWJpX2wyZCkgICAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfbDJmKSAgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9sYXNyKSAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2xkaXZtb2QpICAgICAgXAotICAgIFhYKF9fYWVhYmlfbGxzbCkgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9sbHNyKSAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2xtdWwpICAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfdWkyZCkgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV91aTJmKSAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX3VpZGl2KSAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfdWlkaXZtb2QpICAgICBcCi0gICAgWFgoX19hZWFiaV91bDJkKSAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX3VsMmYpICAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfdWxkaXZtb2QpICAgICBcCi0gICAgWFgoX19jbXBkZjIpICAgICAgICAgICAgIFwKLSAgICBYWChfX2RpdmRmMykgICAgICAgICAgICAgXAotICAgIFhYKF9fZGl2c2YzKSAgICAgICAgICAgICBcCi0gICAgWFgoX19lcWRmMikgICAgICAgICAgICAgIFwKLSAgICBYWChfX2V4dGVuZHNmZGYyKSAgICAgICAgXAotICAgIFhYKF9fZml4ZGZzaSkgICAgICAgICAgICBcCi0gICAgWFgoX19maXhzZnNpKSAgICAgICAgICAgIFwKLSAgICBYWChfX2Zsb2F0ZGlkZikgICAgICAgICAgXAotICAgIFhYKF9fZmxvYXRkaXNmKSAgICAgICAgICBcCi0gICAgWFgoX19mbG9hdHNpZGYpICAgICAgICAgIFwKLSAgICBYWChfX2Zsb2F0c2lzZikgICAgICAgICAgXAotICAgIFhYKF9fZmxvYXR1bmRpZGYpICAgICAgICBcCi0gICAgWFgoX19mbG9hdHVuZGlzZikgICAgICAgIFwKLSAgICBYWChfX2Zsb2F0dW5zaWRmKSAgICAgICAgXAotICAgIFhYKF9fZmxvYXR1bnNpc2YpICAgICAgICBcCi0gICAgWFgoX19nZWRmMikgICAgICAgICAgICAgIFwKLSAgICBYWChfX2d0ZGYyKSAgICAgICAgICAgICAgXAotICAgIFhYKF9fbGVkZjIpICAgICAgICAgICAgICBcCi0gICAgWFgoX19sdGRmMikgICAgICAgICAgICAgIFwKLSAgICBYWChfX211bGRmMykgICAgICAgICAgICAgXAotICAgIFhYKF9fbXVsZGkzKSAgICAgICAgICAgICBcCi0gICAgWFgoX19tdWxzZjMpICAgICAgICAgICAgIFwKLSAgICBYWChfX25lZGYyKSAgICAgICAgICAgICAgXAotICAgIFhYKF9fcG9wY291bnRzaTIpICAgICAgICBcCi0gICAgWFgoX19wb3Bjb3VudF90YWIpICAgICAgIFwKLSAgICBYWChfX3N1YmRmMykgICAgICAgICAgICAgXAotICAgIFhYKF9fc3Vic2YzKSAgICAgICAgICAgICBcCi0gICAgWFgoX190cnVuY2Rmc2YyKSAgICAgICAgIFwKLSAgICBYWChfX3Vub3JkZGYyKSAgICAgICAgICAgXAotICAgIFhYKF9fdW5vcmRzZjIpICAgICAgICAgICBcCi0KLSNkZWZpbmUgIFhYKGYpICAgIGV4dGVybiB2b2lkIGYodm9pZCk7Ci1DT01QQVRfRlVOQ1RJT05TX0xJU1QKLSN1bmRlZiBYWAotCi12b2lkICBfX2Jpb25pY19saWJnY2NfY29tcGF0X2hvb2tzKHZvaWQpCi17Ci0jZGVmaW5lIFhYKGYpICAgIGYoKTsKLUNPTVBBVF9GVU5DVElPTlNfTElTVAotI3VuZGVmIFhYCi19Cit2b2lkKiBfX2Jpb25pY19saWJnY2NfY29tcGF0X3N5bWJvbHNbXSA9IHsKKyAgICAmX19hZGRkZjMsCisgICAgJl9fYWRkc2YzLAorICAgICZfX2FlYWJpX2NkY21wZXEsCisgICAgJl9fYWVhYmlfY2RjbXBsZSwKKyAgICAmX19hZWFiaV9jZHJjbXBsZSwKKyAgICAmX19hZWFiaV9kMmYsCisgICAgJl9fYWVhYmlfZDJpeiwKKyAgICAmX19hZWFiaV9kYWRkLAorICAgICZfX2FlYWJpX2RjbXBlcSwKKyAgICAmX19hZWFiaV9kY21wZ2UsCisgICAgJl9fYWVhYmlfZGNtcGd0LAorICAgICZfX2FlYWJpX2RjbXBsZSwKKyAgICAmX19hZWFiaV9kY21wbHQsCisgICAgJl9fYWVhYmlfZGNtcHVuLAorICAgICZfX2FlYWJpX2RkaXYsCisgICAgJl9fYWVhYmlfZG11bCwKKyAgICAmX19hZWFiaV9kcnN1YiwKKyAgICAmX19hZWFiaV9kc3ViLAorICAgICZfX2FlYWJpX2YyZCwKKyAgICAmX19hZWFiaV9mMml6LAorICAgICZfX2FlYWJpX2YydWl6LAorICAgICZfX2FlYWJpX2ZhZGQsCisgICAgJl9fYWVhYmlfZmNtcHVuLAorICAgICZfX2FlYWJpX2ZkaXYsCisgICAgJl9fYWVhYmlfZm11bCwKKyAgICAmX19hZWFiaV9mcnN1YiwKKyAgICAmX19hZWFiaV9mc3ViLAorICAgICZfX2FlYWJpX2kyZCwKKyAgICAmX19hZWFiaV9pMmYsCisgICAgJl9fYWVhYmlfaWRpdiwKKyAgICAmX19hZWFiaV9pZGl2bW9kLAorICAgICZfX2FlYWJpX2wyZCwKKyAgICAmX19hZWFiaV9sMmYsCisgICAgJl9fYWVhYmlfbGFzciwKKyAgICAmX19hZWFiaV9sZGl2bW9kLAorICAgICZfX2FlYWJpX2xsc2wsCisgICAgJl9fYWVhYmlfbGxzciwKKyAgICAmX19hZWFiaV9sbXVsLAorICAgICZfX2FlYWJpX3VpMmQsCisgICAgJl9fYWVhYmlfdWkyZiwKKyAgICAmX19hZWFiaV91aWRpdiwKKyAgICAmX19hZWFiaV91aWRpdm1vZCwKKyAgICAmX19hZWFiaV91bDJkLAorICAgICZfX2FlYWJpX3VsMmYsCisgICAgJl9fYWVhYmlfdWxkaXZtb2QsCisgICAgJl9fYWVhYmlfdW53aW5kX2NwcF9wcjAsCisgICAgJl9fYWVhYmlfdW53aW5kX2NwcF9wcjEsCisgICAgJl9fY21wZGYyLAorICAgICZfX2RpdmRmMywKKyAgICAmX19kaXZzZjMsCisgICAgJl9fZXFkZjIsCisgICAgJl9fZXh0ZW5kc2ZkZjIsCisgICAgJl9fZml4ZGZzaSwKKyAgICAmX19maXhzZnNpLAorICAgICZfX2Zsb2F0ZGlkZiwKKyAgICAmX19mbG9hdGRpc2YsCisgICAgJl9fZmxvYXRzaWRmLAorICAgICZfX2Zsb2F0c2lzZiwKKyAgICAmX19mbG9hdHVuZGlkZiwKKyAgICAmX19mbG9hdHVuZGlzZiwKKyAgICAmX19mbG9hdHVuc2lkZiwKKyAgICAmX19mbG9hdHVuc2lzZiwKKyAgICAmX19nZWRmMiwKKyAgICAmX19ndGRmMiwKKyAgICAmX19sZWRmMiwKKyAgICAmX19sdGRmMiwKKyAgICAmX19tdWxkZjMsCisgICAgJl9fbXVsZGkzLAorICAgICZfX211bHNmMywKKyAgICAmX19uZWRmMiwKKyAgICAmX19wb3Bjb3VudF90YWIsCisgICAgJl9fcG9wY291bnRzaTIsCisgICAgJl9fc3ViZGYzLAorICAgICZfX3N1YnNmMywKKyAgICAmX190cnVuY2Rmc2YyLAorICAgICZfX3Vub3JkZGYyLAorICAgICZfX3Vub3Jkc2YyLAorfTsKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNtcC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY21wLlMKaW5kZXggOTIxZjhlZi4uNzBhMmE1OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY21wLlMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY21wLlMKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAKICNpZmRlZiBIQVZFXzMyX0JZVEVfQ0FDSEVfTElORQpAQCAtMTA4LDcgKzEwOCw2IEBACiAjZW5kaWYKIAogICAgICAgICAvKiBzYXZlIHJlZ2lzdGVycyAqLwotICAgICAgICAuc2F2ZSAgICAgICB7cjQsIGxyfQogICAgICAgICBzdG1mZCAgICAgICBzcCEsIHtyNCwgbHJ9CiAgICAgICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgICAgICAuY2ZpX3JlbF9vZmZzZXQgcjQsIDAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNtcDE2LlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jbXAxNi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmExYmYzLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNtcDE2LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi0vKgotICogT3B0aW1pemVkIG1lbWNtcDE2KCkgZm9yIEFSTTkuCi0gKiBUaGlzIHdvdWxkIG5vdCBiZSBvcHRpbWFsIG9uIFhTY2FsZSBvciBBUk0xMSwgd2hlcmUgbW9yZSBwcmVmZXRjaGluZwotICogYW5kIHVzZSBvZiBwbGQgd2lsbCBiZSBuZWVkZWQuCi0gKiBUaGUgMiBtYWpvciBvcHRpbXphdGlvbnMgaGVyZSBhcmUKLSAqICgxKSBUaGUgbWFpbiBsb29wIGNvbXBhcmVzIDE2IGJ5dGVzIGF0IGEgdGltZQotICogKDIpIFRoZSBsb2FkcyBhcmUgc2NoZWR1bGVkIGluIGEgd2F5IHRoZXkgd29uJ3Qgc3RhbGwKLSAqLwotCi1FTlRSWShfX21lbWNtcDE2KQotICAgICAgICBwbGQgICAgICAgICBbcjAsICMwXQotICAgICAgICBwbGQgICAgICAgICBbcjEsICMwXQotCi0gICAgICAgIC8qIHRha2Ugb2YgdGhlIGNhc2Ugd2hlcmUgbGVuZ3RoIGlzIG51bCBvciB0aGUgYnVmZmVycyBhcmUgdGhlIHNhbWUgKi8KLSAgICAgICAgY21wICAgICAgICAgcjAsIHIxCi0gICAgICAgIGNtcG5lICAgICAgIHIyLCAjMAotICAgICAgICBtb3ZlcSAgICAgICByMCwgIzAKLSAgICAgICAgYnhlcSAgICAgICAgbHIKLQotICAgICAgICAvKiBzaW5jZSByMCBob2xkIHRoZSByZXN1bHQsIG1vdmUgdGhlIGZpcnN0IHNvdXJjZQotICAgICAgICAgKiBwb2ludGVyIHNvbWV3aGVyZSBlbHNlCi0gICAgICAgICAqLwotCi0gICAgICAgIG1vdiAgICAgICAgIHIzLCByMAotCi0gICAgICAgICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCAxMiB3b3JkcywgdGhpcyBzaW1wbGlmeSB0aGluZ3MgYmVsb3cKLSAgICAgICAgICAqIGFuZCBhdm9pZCBzb21lIG92ZXJoZWFkIGZvciBzbWFsbCBibG9ja3MKLSAgICAgICAgICAqLwotCi0gICAgICAgIGNtcCAgICAgICAgIHIyLCAjMTIKLSAgICAgICAgYnBsICAgICAgICAgMGYKLQotICAgICAgICAvKiBzbWFsbCBibG9ja3MgKGxlc3MgdGhlbiAxMiB3b3JkcykgKi8KLSAgICAgICAgcGxkICAgICAgICAgW3IwLCAjMzJdCi0gICAgICAgIHBsZCAgICAgICAgIFtyMSwgIzMyXQotCi0xOiAgICAgIGxkcmggICAgICAgIHIwLCBbcjNdLCAjMgotICAgICAgICBsZHJoICAgICAgICBpcCwgW3IxXSwgIzIKLSAgICAgICAgc3VicyAgICAgICAgcjAsIHIwLCBpcAotICAgICAgICBieG5lICAgICAgICBscgotICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMxCi0gICAgICAgIGJuZSAgICAgICAgIDFiCi0gICAgICAgIGJ4ICAgICAgICAgIGxyCi0KLQotICAgICAgICAvKiBzYXZlIHJlZ2lzdGVycyAqLwotICAgICAgICAuc2F2ZSAgICAgICB7cjQsIGxyfQotMDogICAgICBzdG1mZCAgICAgICBzcCEsIHtyNCwgbHJ9Ci0gICAgICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAotICAgICAgICAuY2ZpX3JlbF9vZmZzZXQgcjQsIDAKLSAgICAgICAgLmNmaV9yZWxfb2Zmc2V0IGxyLCA0Ci0KLSAgICAgICAgLyogYWxpZ24gZmlyc3QgcG9pbnRlciB0byB3b3JkIGJvdW5kYXJ5ICovCi0gICAgICAgIHRzdCAgICAgICAgIHIzLCAjMgotICAgICAgICBiZXEgICAgICAgICAwZgotCi0gICAgICAgIGxkcmggICAgICAgIHIwLCBbcjNdLCAjMgotICAgICAgICBsZHJoICAgICAgICBpcCwgW3IxXSwgIzIKLSAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCAjMQotICAgICAgICBzdWJzICAgICAgICByMCwgcjAsIGlwCi0gICAgICAgIC8qIHJlc3RvcmUgcmVnaXN0ZXJzIGFuZCByZXR1cm4gKi8KLSAgICAgICAgbGRtbmVmZCAgICAgc3AhLCB7cjQsIGxyfQotICAgICAgICBieG5lICAgICAgICBscgotCi0KLTA6ICAgICAgLyogaGVyZSB0aGUgZmlyc3QgcG9pbnRlciBpcyBhbGlnbmVkLCBhbmQgd2UgaGF2ZSBhdCBsZWFzdCAzIHdvcmRzCi0gICAgICAgICAqIHRvIHByb2Nlc3MuCi0gICAgICAgICAqLwotCi0gICAgICAgIC8qIHNlZSBpZiB0aGUgcG9pbnRlcnMgYXJlIGNvbmdydWVudCAqLwotICAgICAgICBlb3IgICAgICAgICByMCwgcjMsIHIxCi0gICAgICAgIGFuZHMgICAgICAgIHIwLCByMCwgIzIKLSAgICAgICAgYm5lICAgICAgICAgNWYKLQotICAgICAgICAvKiBjb25ncnVlbnQgY2FzZSwgMTYgaGFsZi13b3JkcyBwZXIgaXRlcmF0aW9uCi0gICAgICAgICAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBhdCBsZWFzdCAxNisyIHdvcmRzIGxlZnQKLSAgICAgICAgICogYmVjYXVzZSB3ZSBlZmZlY3RpdmVseSByZWFkIGFoZWFkIG9uZSBsb25nIHdvcmQsIGFuZCB3ZSBjb3VsZAotICAgICAgICAgKiByZWFkIHBhc3QgdGhlIGJ1ZmZlciAoYW5kIHNlZ2ZhdWx0KSBpZiB3ZSdyZSBub3QgY2FyZWZ1bC4KLSAgICAgICAgICovCi0KLSAgICAgICAgbGRyICAgICAgICAgaXAsIFtyMV0KLSAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjKDE2ICsgMikKLSAgICAgICAgYm1pICAgICAgICAgMWYKLQotMDoKLSAgICAgICAgcGxkICAgICAgICAgW3IzLCAjNjRdCi0gICAgICAgIHBsZCAgICAgICAgIFtyMSwgIzY0XQotICAgICAgICBsZHIgICAgICAgICByMCwgW3IzXSwgIzQKLSAgICAgICAgbGRyICAgICAgICAgbHIsIFtyMSwgIzRdIQotICAgICAgICBlb3JzICAgICAgICByMCwgcjAsIGlwCi0gICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjNdLCAjNAotICAgICAgICBsZHJlcSAgICAgICBpcCwgW3IxLCAjNF0hCi0gICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgbHIKLSAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyM10sICM0Ci0gICAgICAgIGxkcmVxICAgICAgIGxyLCBbcjEsICM0XSEKLSAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBpcAotICAgICAgICBsZHJlcSAgICAgICByMCwgW3IzXSwgIzQKLSAgICAgICAgbGRyZXEgICAgICAgaXAsIFtyMSwgIzRdIQotICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGxyCi0gICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjNdLCAjNAotICAgICAgICBsZHJlcSAgICAgICBsciwgW3IxLCAjNF0hCi0gICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgaXAKLSAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyM10sICM0Ci0gICAgICAgIGxkcmVxICAgICAgIGlwLCBbcjEsICM0XSEKLSAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBscgotICAgICAgICBsZHJlcSAgICAgICByMCwgW3IzXSwgIzQKLSAgICAgICAgbGRyZXEgICAgICAgbHIsIFtyMSwgIzRdIQotICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGlwCi0gICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjNdLCAjNAotICAgICAgICBsZHJlcSAgICAgICBpcCwgW3IxLCAjNF0hCi0gICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgbHIKLSAgICAgICAgYm5lICAgICAgICAgMmYKLSAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMTYKLSAgICAgICAgYmhzICAgICAgICAgMGIKLQotICAgICAgICAvKiBkbyB3ZSBoYXZlIGF0IGxlYXN0IDIgd29yZHMgbGVmdD8gKi8KLTE6ICAgICAgYWRkcyAgICAgICAgcjIsIHIyLCAjKDE2IC0gMiArIDIpCi0gICAgICAgIGJtaSAgICAgICAgIDRmCi0KLSAgICAgICAgLyogZmluaXNoIG9mZiAyIHdvcmRzIGF0IGEgdGltZSAqLwotMzogICAgICBsZHIgICAgICAgICByMCwgW3IzXSwgIzQKLSAgICAgICAgbGRyICAgICAgICAgaXAsIFtyMV0sICM0Ci0gICAgICAgIGVvcnMgICAgICAgIHIwLCByMCwgaXAKLSAgICAgICAgYm5lICAgICAgICAgMmYKLSAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMgotICAgICAgICBiaHMgICAgICAgICAzYgotCi0gICAgICAgIC8qIGFyZSB3ZSBkb25lPyAqLwotNDogICAgICBhZGRzICAgICAgICByMiwgcjIsICMyCi0gICAgICAgIGJuZSAgICAgICAgIDhmCi0gICAgICAgIC8qIHJlc3RvcmUgcmVnaXN0ZXJzIGFuZCByZXR1cm4gKi8KLSAgICAgICAgbW92ICAgICAgICAgcjAsICMwCi0gICAgICAgIGxkbWZkICAgICAgIHNwISwge3I0LCBscn0KLSAgICAgICAgYnggICAgICAgICAgbHIKLQotMjogICAgICAvKiB0aGUgbGFzdCAyIHdvcmRzIGFyZSBkaWZmZXJlbnQsIHJlc3RhcnQgdGhlbSAqLwotICAgICAgICBsZHJoICAgICAgICByMCwgW3IzLCAjLTRdCi0gICAgICAgIGxkcmggICAgICAgIGlwLCBbcjEsICMtNF0KLSAgICAgICAgc3VicyAgICAgICAgcjAsIHIwLCBpcAotICAgICAgICBsZHJlcWggICAgICByMCwgW3IzLCAjLTJdCi0gICAgICAgIGxkcmVxaCAgICAgIGlwLCBbcjEsICMtMl0KLSAgICAgICAgc3ViZXFzICAgICAgcjAsIHIwLCBpcAotICAgICAgICAvKiByZXN0b3JlIHJlZ2lzdGVycyBhbmQgcmV0dXJuICovCi0gICAgICAgIGxkbWZkICAgICAgIHNwISwge3I0LCBscn0KLSAgICAgICAgYnggICAgICAgICAgbHIKLQotICAgICAgICAvKiBwcm9jZXNzIHRoZSBsYXN0IGZldyB3b3JkcyAqLwotODogICAgICBsZHJoICAgICAgICByMCwgW3IzXSwgIzIKLSAgICAgICAgbGRyaCAgICAgICAgaXAsIFtyMV0sICMyCi0gICAgICAgIHN1YnMgICAgICAgIHIwLCByMCwgaXAKLSAgICAgICAgYm5lICAgICAgICAgOWYKLSAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMQotICAgICAgICBibmUgICAgICAgICA4YgotCi05OiAgICAgIC8qIHJlc3RvcmUgcmVnaXN0ZXJzIGFuZCByZXR1cm4gKi8KLSAgICAgICAgbGRtZmQgICAgICAgc3AhLCB7cjQsIGxyfQotICAgICAgICBieCAgICAgICAgICBscgotCi0KLTU6ICAgICAgLyoqKioqKioqKioqKioqKiBub24tY29uZ3J1ZW50IGNhc2UgKioqKioqKioqKioqKioqLwotCi0gICAgICAgIC8qIGFsaWduIHRoZSB1bmFsaWduZWQgcG9pbnRlciAqLwotICAgICAgICBiaWMgICAgICAgICByMSwgcjEsICMzCi0gICAgICAgIGxkciAgICAgICAgIGxyLCBbcjFdLCAjNAotICAgICAgICBzdWIgICAgICAgICByMiwgcjIsICM4Ci0KLTY6Ci0gICAgICAgIHBsZCAgICAgICAgIFtyMywgIzY0XQotICAgICAgICBwbGQgICAgICAgICBbcjEsICM2NF0KLSAgICAgICAgbW92ICAgICAgICAgaXAsIGxyLCBsc3IgIzE2Ci0gICAgICAgIGxkciAgICAgICAgIGxyLCBbcjFdLCAjNAotICAgICAgICBsZHIgICAgICAgICByMCwgW3IzXSwgIzQKLSAgICAgICAgb3JyICAgICAgICAgaXAsIGlwLCBsciwgbHNsICMxNgotICAgICAgICBlb3JzICAgICAgICByMCwgcjAsIGlwCi0gICAgICAgIG1vdmVxICAgICAgIGlwLCBsciwgbHNyICMxNgotICAgICAgICBsZHJlcSAgICAgICBsciwgW3IxXSwgIzQKLSAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyM10sICM0Ci0gICAgICAgIG9ycmVxICAgICAgIGlwLCBpcCwgbHIsIGxzbCAjMTYKLSAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBpcAotICAgICAgICBtb3ZlcSAgICAgICBpcCwgbHIsIGxzciAjMTYKLSAgICAgICAgbGRyZXEgICAgICAgbHIsIFtyMV0sICM0Ci0gICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjNdLCAjNAotICAgICAgICBvcnJlcSAgICAgICBpcCwgaXAsIGxyLCBsc2wgIzE2Ci0gICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgaXAKLSAgICAgICAgbW92ZXEgICAgICAgaXAsIGxyLCBsc3IgIzE2Ci0gICAgICAgIGxkcmVxICAgICAgIGxyLCBbcjFdLCAjNAotICAgICAgICBsZHJlcSAgICAgICByMCwgW3IzXSwgIzQKLSAgICAgICAgb3JyZXEgICAgICAgaXAsIGlwLCBsciwgbHNsICMxNgotICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGlwCi0gICAgICAgIGJuZSAgICAgICAgIDdmCi0gICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzgKLSAgICAgICAgYmhzICAgICAgICAgNmIKLSAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCAjMgotICAgICAgICAvKiBhcmUgd2UgZG9uZT8gKi8KLSAgICAgICAgYWRkcyAgICAgICAgcjIsIHIyLCAjOAotICAgICAgICBtb3ZlcSAgICAgICByMCwgIzAKLSAgICAgICAgYmVxICAgICAgICAgOWIKLSAgICAgICAgLyogZmluaXNoIG9mZiB0aGUgcmVtYWluaW5nIGJ5dGVzICovCi0gICAgICAgIGIgICAgICAgICAgIDhiCi0KLTc6ICAgICAgLyogZml4IHVwIHRoZSAyIHBvaW50ZXJzIGFuZCBmYWxsdGhyb3VnaC4uLiAqLwotICAgICAgICBzdWIgICAgICAgICByMSwgcjEsICMyCi0gICAgICAgIGIgICAgICAgICAgIDJiCi1FTkQoX19tZW1jbXAxNikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNweS5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY3B5LlMKaW5kZXggZjI1YjNlMy4uMmM5YjEwYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY3B5LlMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY3B5LlMKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAjaWYgZGVmaW5lZChfX0FSTV9ORU9OX18pICYmICFkZWZpbmVkKEFSQ0hfQVJNX1VTRV9OT05fTkVPTl9NRU1DUFkpCiAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNweS5hOS5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY3B5LmE5LlMKaW5kZXggMmJhMWZmNS4uMjU5NzAxZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY3B5LmE5LlMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY3B5LmE5LlMKQEAgLTQ0LDcgKzQ0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAJLnN5bnRheCB1bmlmaWVkCiAJLyogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyBBUk0gc3RhdGUuICAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvc2V0am1wLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9zZXRqbXAuUwppbmRleCA2NWI5M2ZkLi5lZDU5ZDA3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9zZXRqbXAuUworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9zZXRqbXAuUwpAQCAtMzQsNyArMzQsNyBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9zZXRqbXAuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgogCkBAIC01Niw3ICs1Niw3IEBACiAJLmNmaV9yZWxfb2Zmc2V0IHIxNCwgNAogCW1vdglyMCwgIzB4MDAwMDAwMDAKIAotCWJsCVBJQ19TWU0oX0NfTEFCRUwoc2lnYmxvY2spLCBQTFQpCisJYmwJUElDX1NZTShzaWdibG9jaywgUExUKQogCW1vdglyMSwgcjAKIAogCWxkbWZkCXNwISwge3IwLCByMTR9CkBAIC0xMDgsMTEgKzEwOCwxMSBAQAogCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAogCiAJbW92CXIwLCByMgotCWJsCVBJQ19TWU0oX0NfTEFCRUwoc2lnc2V0bWFzayksIFBMVCkKKwlibAlQSUNfU1lNKHNpZ3NldG1hc2ssIFBMVCkKIAogCWFkZAlzcCwgc3AsICM0CS8qIHVuYWxpZ24gdGhlIHN0YWNrICovCiAJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCAtNAotCWxkbWZkCXNwISwge3IwLCByMSwgcjE0fSAKKwlsZG1mZAlzcCEsIHtyMCwgcjEsIHIxNH0KIAkuY2ZpX2RlZl9jZmFfb2Zmc2V0IDAKIAogI2lmZGVmIF9fQVJNX0hBVkVfVkZQCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogCS8qIHZhbGlkYXRpb24gZmFpbGVkLCBkaWUgZGllIGRpZS4gKi8KIGJvdGNoOgotCWJsCVBJQ19TWU0oX0NfTEFCRUwobG9uZ2ptcGVycm9yKSwgUExUKQotCWJsCVBJQ19TWU0oX0NfTEFCRUwoYWJvcnQpLCBQTFQpCisJYmwJUElDX1NZTShsb25nam1wZXJyb3IsIFBMVCkKKwlibAlQSUNfU1lNKGFib3J0LCBQTFQpCiAJYgkuIC0gOAkJLyogQ2Fubm90IGdldCBoZXJlICovCiBFTkQobG9uZ2ptcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL3NpZ3NldGptcC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvc2lnc2V0am1wLlMKaW5kZXggMTIzMTFlNS4uNzAxNmY1MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvc2lnc2V0am1wLlMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvc2lnc2V0am1wLlMKQEAgLTM1LDcgKzM1LDcgQEAKIAogI2RlZmluZSBfQUxJR05fVEVYVCAuYWxpZ24gMAogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KICNpbmNsdWRlIDxtYWNoaW5lL3NldGptcC5oPgogCiAvKgpAQCAtNTAsOCArNTAsOCBAQAogCiBFTlRSWShzaWdzZXRqbXApCiAJdGVxCXIxLCAjMAotCWJlcQlQSUNfU1lNKF9DX0xBQkVMKF9zZXRqbXApLCBQTFQpCi0JYglQSUNfU1lNKF9DX0xBQkVMKHNldGptcCksIFBMVCkKKwliZXEJUElDX1NZTShfc2V0am1wLCBQTFQpCisJYglQSUNfU1lNKHNldGptcCwgUExUKQogRU5EKHNpZ3NldGptcCkKIAogLkxfc2V0am1wX21hZ2ljOgpAQCAtNjEsNiArNjEsNiBAQAogCWxkcglyMiwgLkxfc2V0am1wX21hZ2ljCiAJbGRyCXIzLCBbcjBdCiAJdGVxCXIyLCByMwotCWJlcQlQSUNfU1lNKF9DX0xBQkVMKF9sb25nam1wKSwgUExUKQotCWIJUElDX1NZTShfQ19MQUJFTChsb25nam1wKSwgUExUKQorCWJlcQlQSUNfU1lNKF9sb25nam1wLCBQTFQpCisJYglQSUNfU1lNKGxvbmdqbXAsIFBMVCkKIEVORChzaWdsb25nam1wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvc3RyY21wLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9zdHJjbXAuUwppbmRleCA0MmQ0MWQxLi42ZGJhOTQyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9zdHJjbXAuUworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9zdHJjbXAuUwpAQCAtMjgsNyArMjgsNyBAQAogICovCiAKICNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIAkudGV4dAogCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9zeXNjYWxsLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9zeXNjYWxsLlMKaW5kZXggNWE2NjI3Yi4uZDBkZjM3OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvc3lzY2FsbC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL3N5c2NhbGwuUwpAQCAtMzAsNyArMzAsNiBAQAogCiBFTlRSWShzeXNjYWxsKQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC00OCw1ICs0Nyw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc3lzY2FsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvX19zdHJjYXRfY2hrLlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL19fc3RyY2F0X2Noay5TCmluZGV4IGRjODYxNTAuLjM2ZGEyZDkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvX19zdHJjYXRfY2hrLlMKKysrIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9fX3N0cmNhdF9jaGsuUwpAQCAtMjYsOCArMjYsOCBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSAicHJpdmF0ZS9saWJjX2V2ZW50cy5oIgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvbGliY19ldmVudHMuaD4KIAogICAgIC5zeW50YXggdW5pZmllZAogCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL19fc3RyY3B5X2Noay5TIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9fX3N0cmNweV9jaGsuUwppbmRleCA5NWFhZjRmLi5jM2UzZTE0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL19fc3RyY3B5X2Noay5TCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvX19zdHJjcHlfY2hrLlMKQEAgLTI2LDggKzI2LDggQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgInByaXZhdGUvbGliY19ldmVudHMuaCIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2xpYmNfZXZlbnRzLmg+CiAKICAgICAuc3ludGF4IHVuaWZpZWQKIApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9tZW1jcHkuUyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvbWVtY3B5LlMKaW5kZXggYmFkYzkzYi4uZGE0ZjNkZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9tZW1jcHkuUworKysgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL21lbWNweS5TCkBAIC01NSw4ICs1NSw4IEBACiAKIC8vIFByb3RvdHlwZTogdm9pZCAqbWVtY3B5ICh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KS4KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSAicHJpdmF0ZS9saWJjX2V2ZW50cy5oIgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvbGliY19ldmVudHMuaD4KIAogICAgICAgICAudGV4dAogICAgICAgICAuc3ludGF4IHVuaWZpZWQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvbWVtc2V0LlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL21lbXNldC5TCmluZGV4IDRlNmQzMjIuLjEyYzY4ZDYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvbWVtc2V0LlMKKysrIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9tZW1zZXQuUwpAQCAtMjcsOCArMjcsOCBAQAogICovCiAKICNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSAicHJpdmF0ZS9saWJjX2V2ZW50cy5oIgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvbGliY19ldmVudHMuaD4KIAogICAgICAgICAvKgogICAgICAgICAgKiBPcHRpbWl6ZWQgbWVtc2V0KCkgZm9yIEFSTS4KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY2F0LlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNhdC5TCmluZGV4IDcyZDRlOWUuLmI5NWJlOTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY2F0LlMKKysrIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjYXQuUwpAQCAtNTMsNyArNTMsNyBAQAogICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKICAgICAuc3ludGF4IHVuaWZpZWQKIApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjbXAuUyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY21wLlMKaW5kZXggMGNjY2YwNi4uMTJkYTExNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjbXAuUworKysgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNtcC5TCkBAIC0yNyw3ICsyNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogI2lmZGVmIF9fQVJNRUJfXwogI2RlZmluZSBTMkxPTUVNIGxzbApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjcHkuUyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY3B5LlMKaW5kZXggNTc3MzU0MC4uY2I4NzhjNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjcHkuUworKysgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNweS5TCkBAIC01Myw3ICs1Myw3IEBACiAgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogICAgIC5zeW50YXggdW5pZmllZAogCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmxlbi5TIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJsZW4uUwppbmRleCAwOGY2ZDE5Li45YTBjZTYyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmxlbi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RybGVuLlMKQEAgLTUzLDcgKzUzLDcgQEAKICAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAgICAgLnN5bnRheCB1bmlmaWVkCiAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9jb3J0ZXgtYTE1Lm1rIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2NvcnRleC1hMTUubWsKaW5kZXggYzYyZTdlNy4uNTUyODExZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2NvcnRleC1hMTUubWsKKysrIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2NvcnRleC1hMTUubWsKQEAgLTEsMTAgKzEsMTAgQEAKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsTUVNQ1BZLGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL21lbWNweS5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxNRU1TRVQsYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvbWVtc2V0LlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLFNUUkNBVCxhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjYXQuUykKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsU1RSQ01QLGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNtcC5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxTVFJDUFksYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY3B5LlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLFNUUkxFTixhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJsZW4uUykKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsX19TVFJDQVRfQ0hLLGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL19fc3RyY2F0X2Noay5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxfX1NUUkNQWV9DSEssYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvX19zdHJjcHlfY2hrLlMpCi0KLWluY2x1ZGUgYmlvbmljL2xpYmMvYXJjaC1hcm0vZ2VuZXJpYy9nZW5lcmljLm1rCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfYXJtICs9IFwKKyAgICBhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9tZW1jcHkuUyBcCisgICAgYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvbWVtc2V0LlMgXAorICAgIGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNhdC5TIFwKKyAgICBhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjbXAuUyBcCisgICAgYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY3B5LlMgXAorICAgIGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmxlbi5TIFwKKyAgICBhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9fX3N0cmNhdF9jaGsuUyBcCisgICAgYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvX19zdHJjcHlfY2hrLlMgXAorICAgIGJpb25pYy9tZW1tb3ZlLmMgXApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL19fc3RyY2F0X2Noay5TIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL19fc3RyY2F0X2Noay5TCmluZGV4IDcwMDkxNjguLjY1MWFlZmMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9fX3N0cmNhdF9jaGsuUworKysgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvX19zdHJjYXRfY2hrLlMKQEAgLTI2LDggKzI2LDggQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgInByaXZhdGUvbGliY19ldmVudHMuaCIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2xpYmNfZXZlbnRzLmg+CiAKICAgICAuc3ludGF4IHVuaWZpZWQKICAgICAuZnB1ICAgIG5lb24KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9fX3N0cmNweV9jaGsuUyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9fX3N0cmNweV9jaGsuUwppbmRleCA5MDhlZWM0Li4yNDQ3NzgwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvX19zdHJjcHlfY2hrLlMKKysrIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL19fc3RyY3B5X2Noay5TCkBAIC0yNiw4ICsyNiw4IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlICJwcml2YXRlL2xpYmNfZXZlbnRzLmgiCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9saWJjX2V2ZW50cy5oPgogCiAgICAgLnN5bnRheCB1bmlmaWVkCiAgICAgLmZwdSAgICBuZW9uCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvbWVtY3B5LlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvbWVtY3B5LlMKaW5kZXggNzJjMWE2Ni4uOGRjZDkzNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL21lbWNweS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9tZW1jcHkuUwpAQCAtMjYsOCArMjYsOCBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSAicHJpdmF0ZS9saWJjX2V2ZW50cy5oIgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvbGliY19ldmVudHMuaD4KIAogLyoKICAqIFRoaXMgY29kZSBhc3N1bWVzIGl0IGlzIHJ1bm5pbmcgb24gYSBwcm9jZXNzb3IgdGhhdCBzdXBwb3J0cyBhbGwgYXJtIHY3CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvbWVtc2V0LlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvbWVtc2V0LlMKaW5kZXggN2Y3N2RhZC4uYTUwNTdlYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL21lbXNldC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9tZW1zZXQuUwpAQCAtMjYsOSArMjYsOCBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlICJwcml2YXRlL2xpYmNfZXZlbnRzLmgiCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9saWJjX2V2ZW50cy5oPgogCiAvKgogICogVGhpcyBjb2RlIGFzc3VtZXMgaXQgaXMgcnVubmluZyBvbiBhIHByb2Nlc3NvciB0aGF0IHN1cHBvcnRzIGFsbCBhcm0gdjcKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJjYXQuUyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJjYXQuUwppbmRleCAwZjViYWVmLi5mNWE4NTVlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RyY2F0LlMKKysrIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL3N0cmNhdC5TCkBAIC01Myw3ICs1Myw3IEBACiAgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogICAgIC5zeW50YXggdW5pZmllZAogCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RyY21wLlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RyY21wLlMKaW5kZXggZWFjZGI4OS4uMjQxMWM2NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL3N0cmNtcC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJjbXAuUwpAQCAtMjcsNyArMjcsNyBAQAogICovCiAKICNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKICNpZmRlZiBfX0FSTUVCX18KICNkZWZpbmUgUzJMT01FTSBsc2wKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJjcHkuUyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJjcHkuUwppbmRleCA5YWE0Zjg4Li45ZTk2MTBiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RyY3B5LlMKKysrIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL3N0cmNweS5TCkBAIC01Myw3ICs1Myw3IEBACiAgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogICAgIC5zeW50YXggdW5pZmllZAogCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RybGVuLlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RybGVuLlMKaW5kZXggMjU5ZWRhMC4uYjkyYjA0MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL3N0cmxlbi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJsZW4uUwpAQCAtNTMsNyArNTMsNyBAQAogICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKICAgICAuc3ludGF4IHVuaWZpZWQKIApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvY29ydGV4LWE5Lm1rIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvY29ydGV4LWE5Lm1rCmluZGV4IGVlZTFiMzYuLjliOTkzODcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2NvcnRleC1hOS5taworKysgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9jb3J0ZXgtYTkubWsKQEAgLTEsMTAgKzEsMTAgQEAKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsTUVNQ1BZLGFyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvbWVtY3B5LlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLE1FTVNFVCxhcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL21lbXNldC5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxTVFJDQVQsYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJjYXQuUykKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsU1RSQ01QLGFyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RyY21wLlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLFNUUkNQWSxhcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL3N0cmNweS5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxTVFJMRU4sYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJsZW4uUykKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsX19TVFJDQVRfQ0hLLGFyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvX19zdHJjYXRfY2hrLlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLF9fU1RSQ1BZX0NISyxhcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL19fc3RyY3B5X2Noay5TKQotCi1pbmNsdWRlIGJpb25pYy9saWJjL2FyY2gtYXJtL2dlbmVyaWMvZ2VuZXJpYy5taworbGliY19iaW9uaWNfc3JjX2ZpbGVzX2FybSArPSBcCisgICAgYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9tZW1jcHkuUyBcCisgICAgYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9tZW1zZXQuUyBcCisgICAgYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJjYXQuUyBcCisgICAgYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJjbXAuUyBcCisgICAgYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJjcHkuUyBcCisgICAgYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJsZW4uUyBcCisgICAgYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9fX3N0cmNhdF9jaGsuUyBcCisgICAgYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9fX3N0cmNweV9jaGsuUyBcCisgICAgYmlvbmljL21lbW1vdmUuYyBcCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2RlbnZlci9iaW9uaWMvX19zdHJjYXRfY2hrLlMgYi9saWJjL2FyY2gtYXJtL2RlbnZlci9iaW9uaWMvX19zdHJjYXRfY2hrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkYTJkOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9fX3N0cmNhdF9jaGsuUwpAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9saWJjX2V2ZW50cy5oPgorCisgICAgLnN5bnRheCB1bmlmaWVkCisKKyAgICAudGh1bWIKKyAgICAudGh1bWJfZnVuYworCisvLyBHZXQgdGhlIGxlbmd0aCBvZiBzcmMgc3RyaW5nLCB0aGVuIGdldCB0aGUgc291cmNlIG9mIHRoZSBkc3Qgc3RyaW5nLgorLy8gQ2hlY2sgdGhhdCB0aGUgdHdvIGxlbmd0aHMgdG9nZXRoZXIgZG9uJ3QgZXhjZWVkIHRoZSB0aHJlc2hvbGQsIHRoZW4KKy8vIGRvIGEgbWVtY3B5IG9mIHRoZSBkYXRhLgorRU5UUlkoX19zdHJjYXRfY2hrKQorICAgIHBsZCAgICAgW3IwLCAjMF0KKyAgICBwdXNoICAgIHtyMCwgbHJ9CisgICAgLnNhdmUgICB7cjAsIGxyfQorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAorICAgIC5jZmlfcmVsX29mZnNldCByMCwgMAorICAgIC5jZmlfcmVsX29mZnNldCBsciwgNAorICAgIHB1c2ggICAge3I0LCByNX0KKyAgICAuc2F2ZSAgIHtyNCwgcjV9CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCisgICAgLmNmaV9yZWxfb2Zmc2V0IHI1LCA0CisKKyAgICBtb3YgICAgIGxyLCByMgorCisgICAgLy8gU2F2ZSB0aGUgZHN0IHJlZ2lzdGVyIHRvIHI1CisgICAgbW92ICAgICByNSwgcjAKKworICAgIC8vIFplcm8gb3V0IHI0CisgICAgZW9yICAgICByNCwgcjQsIHI0CisKKyAgICAvLyByMSBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgc3RyaW5nIHRvIGNvdW50LgorLkxfc3RybGVuX3N0YXJ0OgorICAgIG1vdiAgICAgcjAsIHIxCisgICAgYW5kcyAgICByMywgcjEsICM3CisgICAgYmVxICAgICAuTF9tYWlubG9vcAorCisgICAgLy8gQWxpZ24gdG8gYSBkb3VibGUgd29yZCAoNjQgYml0cykuCisgICAgcnNiICAgICByMywgcjMsICM4CisgICAgbHNscyAgICBpcCwgcjMsICMzMQorICAgIGJlcSAgICAgLkxfYWxpZ25fdG9fMzIKKworICAgIGxkcmIgICAgcjIsIFtyMV0sICMxCisgICAgY2J6ICAgICByMiwgLkxfdXBkYXRlX2NvdW50X2FuZF9maW5pc2gKKworLkxfYWxpZ25fdG9fMzI6CisgICAgYmNjICAgICAuTF9hbGlnbl90b182NAorICAgIGFuZHMgICAgaXAsIHIzLCAjMgorICAgIGJlcSAgICAgLkxfYWxpZ25fdG9fNjQKKworICAgIGxkcmIgICAgcjIsIFtyMV0sICMxCisgICAgY2J6ICAgICByMiwgLkxfdXBkYXRlX2NvdW50X2FuZF9maW5pc2gKKyAgICBsZHJiICAgIHIyLCBbcjFdLCAjMQorICAgIGNieiAgICAgcjIsIC5MX3VwZGF0ZV9jb3VudF9hbmRfZmluaXNoCisKKy5MX2FsaWduX3RvXzY0OgorICAgIHRzdCAgICAgcjMsICM0CisgICAgYmVxICAgICAuTF9tYWlubG9vcAorICAgIGxkciAgICAgcjMsIFtyMV0sICM0CisKKyAgICBzdWIgICAgIGlwLCByMywgIzB4MDEwMTAxMDEKKyAgICBiaWMgICAgIGlwLCBpcCwgcjMKKyAgICBhbmRzICAgIGlwLCBpcCwgIzB4ODA4MDgwODAKKyAgICBibmUgICAgIC5MX3plcm9faW5fc2Vjb25kX3JlZ2lzdGVyCisKKyAgICAucDJhbGlnbiAyCisuTF9tYWlubG9vcDoKKyAgICBsZHJkICAgIHIyLCByMywgW3IxXSwgIzgKKworICAgIHBsZCAgICAgW3IxLCAjNjRdCisKKyAgICBzdWIgICAgIGlwLCByMiwgIzB4MDEwMTAxMDEKKyAgICBiaWMgICAgIGlwLCBpcCwgcjIKKyAgICBhbmRzICAgIGlwLCBpcCwgIzB4ODA4MDgwODAKKyAgICBibmUgICAgIC5MX3plcm9faW5fZmlyc3RfcmVnaXN0ZXIKKworICAgIHN1YiAgICAgaXAsIHIzLCAjMHgwMTAxMDEwMQorICAgIGJpYyAgICAgaXAsIGlwLCByMworICAgIGFuZHMgICAgaXAsIGlwLCAjMHg4MDgwODA4MAorICAgIGJuZSAgICAgLkxfemVyb19pbl9zZWNvbmRfcmVnaXN0ZXIKKyAgICBiICAgICAgIC5MX21haW5sb29wCisKKy5MX3VwZGF0ZV9jb3VudF9hbmRfZmluaXNoOgorICAgIHN1YiAgICAgcjMsIHIxLCByMAorICAgIHN1YiAgICAgcjMsIHIzLCAjMQorICAgIGIgICAgICAgLkxfZmluaXNoCisKKy5MX3plcm9faW5fZmlyc3RfcmVnaXN0ZXI6CisgICAgc3ViICAgICByMywgcjEsIHIwCisgICAgbHNscyAgICByMiwgaXAsICMxNworICAgIGJuZSAgICAgLkxfc3ViOF9hbmRfZmluaXNoCisgICAgYmNzICAgICAuTF9zdWI3X2FuZF9maW5pc2gKKyAgICBsc2xzICAgIGlwLCBpcCwgIzEKKyAgICBibmUgICAgIC5MX3N1YjZfYW5kX2ZpbmlzaAorCisgICAgc3ViICAgICByMywgcjMsICM1CisgICAgYiAgICAgICAuTF9maW5pc2gKKworLkxfc3ViOF9hbmRfZmluaXNoOgorICAgIHN1YiAgICAgcjMsIHIzLCAjOAorICAgIGIgICAgICAgLkxfZmluaXNoCisKKy5MX3N1YjdfYW5kX2ZpbmlzaDoKKyAgICBzdWIgICAgIHIzLCByMywgIzcKKyAgICBiICAgICAgIC5MX2ZpbmlzaAorCisuTF9zdWI2X2FuZF9maW5pc2g6CisgICAgc3ViICAgICByMywgcjMsICM2CisgICAgYiAgICAgICAuTF9maW5pc2gKKworLkxfemVyb19pbl9zZWNvbmRfcmVnaXN0ZXI6CisgICAgc3ViICAgICByMywgcjEsIHIwCisgICAgbHNscyAgICByMiwgaXAsICMxNworICAgIGJuZSAgICAgLkxfc3ViNF9hbmRfZmluaXNoCisgICAgYmNzICAgICAuTF9zdWIzX2FuZF9maW5pc2gKKyAgICBsc2xzICAgIGlwLCBpcCwgIzEKKyAgICBibmUgICAgIC5MX3N1YjJfYW5kX2ZpbmlzaAorCisgICAgc3ViICAgICByMywgcjMsICMxCisgICAgYiAgICAgICAuTF9maW5pc2gKKworLkxfc3ViNF9hbmRfZmluaXNoOgorICAgIHN1YiAgICAgcjMsIHIzLCAjNAorICAgIGIgICAgICAgLkxfZmluaXNoCisKKy5MX3N1YjNfYW5kX2ZpbmlzaDoKKyAgICBzdWIgICAgIHIzLCByMywgIzMKKyAgICBiICAgICAgIC5MX2ZpbmlzaAorCisuTF9zdWIyX2FuZF9maW5pc2g6CisgICAgc3ViICAgICByMywgcjMsICMyCisKKy5MX2ZpbmlzaDoKKyAgICBjbXAgICAgIHI0LCAjMAorICAgIGJuZSAgICAgLkxfc3RybGVuX2RvbmUKKworICAgIC8vIFRpbWUgdG8gZ2V0IHRoZSBkc3Qgc3RyaW5nIGxlbmd0aC4KKyAgICBtb3YgICAgIHIxLCByNQorCisgICAgLy8gU2F2ZSB0aGUgb3JpZ2luYWwgc291cmNlIGFkZHJlc3MgdG8gcjUuCisgICAgbW92ICAgICByNSwgcjAKKworICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgbGVuZ3RoIChhZGRpbmcgMSBmb3IgdGhlIHRlcm1pbmF0b3IpLgorICAgIGFkZCAgICAgcjQsIHIzLCAjMQorICAgIGIgICAgICAgLkxfc3RybGVuX3N0YXJ0CisKKyAgICAvLyByMCBob2xkcyB0aGUgcG9pbnRlciB0byB0aGUgZHN0IHN0cmluZy4KKyAgICAvLyByMyBob2xkcyB0aGUgZHN0IHN0cmluZyBsZW5ndGguCisgICAgLy8gcjQgaG9sZHMgdGhlIHNyYyBzdHJpbmcgbGVuZ3RoICsgMS4KKy5MX3N0cmxlbl9kb25lOgorICAgIGFkZCAgICAgcjIsIHIzLCByNAorICAgIGNtcCAgICAgcjIsIGxyCisgICAgYmhpICAgICBfX3N0cmNhdF9jaGtfZmFpbGVkCisKKyAgICAvLyBTZXQgdXAgdGhlIHJlZ2lzdGVycyBmb3IgdGhlIG1lbWNweSBjb2RlLgorICAgIG1vdiAgICAgcjEsIHI1CisgICAgcGxkICAgICBbcjEsICM2NF0KKyAgICBtb3YgICAgIHIyLCByNAorICAgIGFkZCAgICAgcjAsIHIwLCByMworICAgIHBvcCAgICAge3I0LCByNX0KK0VORChfX3N0cmNhdF9jaGspCisKKyNkZWZpbmUgTUVNQ1BZX0JBU0UgICAgICAgICBfX3N0cmNhdF9jaGtfbWVtY3B5X2Jhc2UKKyNkZWZpbmUgTUVNQ1BZX0JBU0VfQUxJR05FRCBfX3N0cmNhdF9jaGtfbWVtY3B5X2Jhc2VfYWxpZ25lZAorCisjaW5jbHVkZSAibWVtY3B5X2Jhc2UuUyIKKworRU5UUllfUFJJVkFURShfX3N0cmNhdF9jaGtfZmFpbGVkKQorICAgIC5zYXZlICAge3IwLCBscn0KKyAgICAuc2F2ZSAgIHtyNCwgcjV9CisKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjAsIDAKKyAgICAuY2ZpX3JlbF9vZmZzZXQgbHIsIDQKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjQsIDAKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjUsIDQKKworICAgIGxkciAgICAgcjAsIGVycm9yX21lc3NhZ2UKKyAgICBsZHIgICAgIHIxLCBlcnJvcl9jb2RlCisxOgorICAgIGFkZCAgICAgcjAsIHBjCisgICAgYmwgICAgICBfX2ZvcnRpZnlfY2hrX2ZhaWwKK2Vycm9yX2NvZGU6CisgICAgLndvcmQgICBCSU9OSUNfRVZFTlRfU1RSQ0FUX0JVRkZFUl9PVkVSRkxPVworZXJyb3JfbWVzc2FnZToKKyAgICAud29yZCAgIGVycm9yX3N0cmluZy0oMWIrNCkKK0VORChfX3N0cmNhdF9jaGtfZmFpbGVkKQorCisgICAgLmRhdGEKK2Vycm9yX3N0cmluZzoKKyAgICAuc3RyaW5nICJzdHJjYXQ6IHByZXZlbnRlZCB3cml0ZSBwYXN0IGVuZCBvZiBidWZmZXIiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2RlbnZlci9iaW9uaWMvX19zdHJjcHlfY2hrLlMgYi9saWJjL2FyY2gtYXJtL2RlbnZlci9iaW9uaWMvX19zdHJjcHlfY2hrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNlM2UxNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9fX3N0cmNweV9jaGsuUwpAQCAtMCwwICsxLDE4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9saWJjX2V2ZW50cy5oPgorCisgICAgLnN5bnRheCB1bmlmaWVkCisKKyAgICAudGh1bWIKKyAgICAudGh1bWJfZnVuYworCisvLyBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgc291cmNlIHN0cmluZyBmaXJzdCwgdGhlbiBkbyBhIG1lbWNweSBvZiB0aGUgZGF0YQorLy8gaW5zdGVhZCBvZiBhIHN0cmNweS4KK0VOVFJZKF9fc3RyY3B5X2NoaykKKyAgICBwbGQgICAgIFtyMCwgIzBdCisgICAgcHVzaCAgICB7cjAsIGxyfQorICAgIC5zYXZlICAge3IwLCBscn0KKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjAsIDAKKyAgICAuY2ZpX3JlbF9vZmZzZXQgbHIsIDQKKworICAgIG1vdiAgICAgbHIsIHIyCisgICAgbW92ICAgICByMCwgcjEKKworICAgIGFuZHMgICAgcjMsIHIxLCAjNworICAgIGJlcSAgICAgLkxfbWFpbmxvb3AKKworICAgIC8vIEFsaWduIHRvIGEgZG91YmxlIHdvcmQgKDY0IGJpdHMpLgorICAgIHJzYiAgICAgcjMsIHIzLCAjOAorICAgIGxzbHMgICAgaXAsIHIzLCAjMzEKKyAgICBiZXEgICAgIC5MX2FsaWduX3RvXzMyCisKKyAgICBsZHJiICAgIHIyLCBbcjBdLCAjMQorICAgIGNieiAgICAgcjIsIC5MX3VwZGF0ZV9jb3VudF9hbmRfZmluaXNoCisKKy5MX2FsaWduX3RvXzMyOgorICAgIGJjYyAgICAgLkxfYWxpZ25fdG9fNjQKKyAgICBhbmRzICAgIGlwLCByMywgIzIKKyAgICBiZXEgICAgIC5MX2FsaWduX3RvXzY0CisKKyAgICBsZHJiICAgIHIyLCBbcjBdLCAjMQorICAgIGNieiAgICAgcjIsIC5MX3VwZGF0ZV9jb3VudF9hbmRfZmluaXNoCisgICAgbGRyYiAgICByMiwgW3IwXSwgIzEKKyAgICBjYnogICAgIHIyLCAuTF91cGRhdGVfY291bnRfYW5kX2ZpbmlzaAorCisuTF9hbGlnbl90b182NDoKKyAgICB0c3QgICAgIHIzLCAjNAorICAgIGJlcSAgICAgLkxfbWFpbmxvb3AKKyAgICBsZHIgICAgIHIzLCBbcjBdLCAjNAorCisgICAgc3ViICAgICBpcCwgcjMsICMweDAxMDEwMTAxCisgICAgYmljICAgICBpcCwgaXAsIHIzCisgICAgYW5kcyAgICBpcCwgaXAsICMweDgwODA4MDgwCisgICAgYm5lICAgICAuTF96ZXJvX2luX3NlY29uZF9yZWdpc3RlcgorCisgICAgLnAyYWxpZ24gMgorLkxfbWFpbmxvb3A6CisgICAgbGRyZCAgICByMiwgcjMsIFtyMF0sICM4CisKKyAgICBwbGQgICAgIFtyMCwgIzY0XQorCisgICAgc3ViICAgICBpcCwgcjIsICMweDAxMDEwMTAxCisgICAgYmljICAgICBpcCwgaXAsIHIyCisgICAgYW5kcyAgICBpcCwgaXAsICMweDgwODA4MDgwCisgICAgYm5lICAgICAuTF96ZXJvX2luX2ZpcnN0X3JlZ2lzdGVyCisKKyAgICBzdWIgICAgIGlwLCByMywgIzB4MDEwMTAxMDEKKyAgICBiaWMgICAgIGlwLCBpcCwgcjMKKyAgICBhbmRzICAgIGlwLCBpcCwgIzB4ODA4MDgwODAKKyAgICBibmUgICAgIC5MX3plcm9faW5fc2Vjb25kX3JlZ2lzdGVyCisgICAgYiAgICAgICAuTF9tYWlubG9vcAorCisuTF91cGRhdGVfY291bnRfYW5kX2ZpbmlzaDoKKyAgICBzdWIgICAgIHIzLCByMCwgcjEKKyAgICBzdWIgICAgIHIzLCByMywgIzEKKyAgICBiICAgICAgIC5MX2NoZWNrX3NpemUKKworLkxfemVyb19pbl9maXJzdF9yZWdpc3RlcjoKKyAgICBzdWIgICAgIHIzLCByMCwgcjEKKyAgICBsc2xzICAgIHIyLCBpcCwgIzE3CisgICAgYm5lICAgICAuTF9zdWI4X2FuZF9maW5pc2gKKyAgICBiY3MgICAgIC5MX3N1YjdfYW5kX2ZpbmlzaAorICAgIGxzbHMgICAgaXAsIGlwLCAjMQorICAgIGJuZSAgICAgLkxfc3ViNl9hbmRfZmluaXNoCisKKyAgICBzdWIgICAgIHIzLCByMywgIzUKKyAgICBiICAgICAgIC5MX2NoZWNrX3NpemUKKworLkxfc3ViOF9hbmRfZmluaXNoOgorICAgIHN1YiAgICAgcjMsIHIzLCAjOAorICAgIGIgICAgICAgLkxfY2hlY2tfc2l6ZQorCisuTF9zdWI3X2FuZF9maW5pc2g6CisgICAgc3ViICAgICByMywgcjMsICM3CisgICAgYiAgICAgICAuTF9jaGVja19zaXplCisKKy5MX3N1YjZfYW5kX2ZpbmlzaDoKKyAgICBzdWIgICAgIHIzLCByMywgIzYKKyAgICBiICAgICAgIC5MX2NoZWNrX3NpemUKKworLkxfemVyb19pbl9zZWNvbmRfcmVnaXN0ZXI6CisgICAgc3ViICAgICByMywgcjAsIHIxCisgICAgbHNscyAgICByMiwgaXAsICMxNworICAgIGJuZSAgICAgLkxfc3ViNF9hbmRfZmluaXNoCisgICAgYmNzICAgICAuTF9zdWIzX2FuZF9maW5pc2gKKyAgICBsc2xzICAgIGlwLCBpcCwgIzEKKyAgICBibmUgICAgIC5MX3N1YjJfYW5kX2ZpbmlzaAorCisgICAgc3ViICAgICByMywgcjMsICMxCisgICAgYiAgICAgICAuTF9jaGVja19zaXplCisKKy5MX3N1YjRfYW5kX2ZpbmlzaDoKKyAgICBzdWIgICAgIHIzLCByMywgIzQKKyAgICBiICAgICAgIC5MX2NoZWNrX3NpemUKKworLkxfc3ViM19hbmRfZmluaXNoOgorICAgIHN1YiAgICAgcjMsIHIzLCAjMworICAgIGIgICAgICAgLkxfY2hlY2tfc2l6ZQorCisuTF9zdWIyX2FuZF9maW5pc2g6CisgICAgc3ViICAgICByMywgcjMsICMyCisKKy5MX2NoZWNrX3NpemU6CisgICAgcGxkICAgICBbcjEsICMwXQorICAgIHBsZCAgICAgW3IxLCAjNjRdCisgICAgbGRyICAgICByMCwgW3NwXQorICAgIGNtcCAgICAgcjMsIGxyCisgICAgYmhzICAgICBfX3N0cmNweV9jaGtfZmFpbGVkCisKKyAgICAvLyBBZGQgMSBmb3IgY29weSBsZW5ndGggdG8gZ2V0IHRoZSBzdHJpbmcgdGVybWluYXRvci4KKyAgICBhZGQgICAgIHIyLCByMywgIzEKK0VORChfX3N0cmNweV9jaGspCisKKyNkZWZpbmUgTUVNQ1BZX0JBU0UgICAgICAgICBfX3N0cmNweV9jaGtfbWVtY3B5X2Jhc2UKKyNkZWZpbmUgTUVNQ1BZX0JBU0VfQUxJR05FRCBfX3N0cmNweV9jaGtfbWVtY3B5X2Jhc2VfYWxpZ25lZAorI2luY2x1ZGUgIm1lbWNweV9iYXNlLlMiCisKK0VOVFJZX1BSSVZBVEUoX19zdHJjcHlfY2hrX2ZhaWxlZCkKKyAgICAuc2F2ZSAgIHtyMCwgbHJ9CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IHIwLCAwCisgICAgLmNmaV9yZWxfb2Zmc2V0IGxyLCA0CisKKyAgICBsZHIgICAgIHIwLCBlcnJvcl9tZXNzYWdlCisgICAgbGRyICAgICByMSwgZXJyb3JfY29kZQorMToKKyAgICBhZGQgICAgIHIwLCBwYworICAgIGJsICAgICAgX19mb3J0aWZ5X2Noa19mYWlsCitlcnJvcl9jb2RlOgorICAgIC53b3JkICAgQklPTklDX0VWRU5UX1NUUkNQWV9CVUZGRVJfT1ZFUkZMT1cKK2Vycm9yX21lc3NhZ2U6CisgICAgLndvcmQgICBlcnJvcl9zdHJpbmctKDFiKzQpCitFTkQoX19zdHJjcHlfY2hrX2ZhaWxlZCkKKworICAgIC5kYXRhCitlcnJvcl9zdHJpbmc6CisgICAgLnN0cmluZyAic3RyY3B5OiBwcmV2ZW50ZWQgd3JpdGUgcGFzdCBlbmQgb2YgYnVmZmVyIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9kZW52ZXIvYmlvbmljL21lbWNweS5TIGIvbGliYy9hcmNoLWFybS9kZW52ZXIvYmlvbmljL21lbWNweS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNGYzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2RlbnZlci9iaW9uaWMvbWVtY3B5LlMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgQVJNIEx0ZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBjb21wYW55IG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFSTSBMVEQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIEFSTSBMVEQgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gUHJvdG90eXBlOiB2b2lkICptZW1jcHkgKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpLgorCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9saWJjX2V2ZW50cy5oPgorCisgICAgICAgIC50ZXh0CisgICAgICAgIC5zeW50YXggdW5pZmllZAorICAgICAgICAuZnB1ICAgIG5lb24KKworRU5UUlkoX19tZW1jcHlfY2hrKQorICAgICAgICBjbXAgICAgIHIyLCByMworICAgICAgICBiaGkgICAgIF9fbWVtY3B5X2Noa19mYWlsCisKKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIG1lbWNweS4uLgorRU5EKF9fbWVtY3B5X2NoaykKKworRU5UUlkobWVtY3B5KQorICAgICAgICBwbGQgICAgIFtyMSwgIzY0XQorICAgICAgICBwdXNoICAgIHtyMCwgbHJ9CisgICAgICAgIC5zYXZlICAge3IwLCBscn0KKyAgICAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgICAgIC5jZmlfcmVsX29mZnNldCByMCwgMAorICAgICAgICAuY2ZpX3JlbF9vZmZzZXQgbHIsIDQKK0VORChtZW1jcHkpCisKKyNkZWZpbmUgTUVNQ1BZX0JBU0UgICAgICAgICBfX21lbWNweV9iYXNlCisjZGVmaW5lIE1FTUNQWV9CQVNFX0FMSUdORUQgX19tZW1jcHlfYmFzZV9hbGlnbmVkCisjaW5jbHVkZSAibWVtY3B5X2Jhc2UuUyIKKworRU5UUllfUFJJVkFURShfX21lbWNweV9jaGtfZmFpbCkKKyAgICAgICAgLy8gUHJlc2VydmUgbHIgZm9yIGJhY2t0cmFjZS4KKyAgICAgICAgcHVzaCAgICB7bHJ9CisgICAgICAgIC5zYXZlICAge2xyfQorICAgICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAgICAgLmNmaV9yZWxfb2Zmc2V0IGxyLCAwCisKKyAgICAgICAgbGRyICAgICByMCwgZXJyb3JfbWVzc2FnZQorICAgICAgICBsZHIgICAgIHIxLCBlcnJvcl9jb2RlCisxOgorICAgICAgICBhZGQgICAgIHIwLCBwYworICAgICAgICBibCAgICAgIF9fZm9ydGlmeV9jaGtfZmFpbAorZXJyb3JfY29kZToKKyAgICAgICAgLndvcmQgICBCSU9OSUNfRVZFTlRfTUVNQ1BZX0JVRkZFUl9PVkVSRkxPVworZXJyb3JfbWVzc2FnZToKKyAgICAgICAgLndvcmQgICBlcnJvcl9zdHJpbmctKDFiKzgpCitFTkQoX19tZW1jcHlfY2hrX2ZhaWwpCisKKyAgICAgICAgLmRhdGEKK2Vycm9yX3N0cmluZzoKKyAgICAgICAgLnN0cmluZyAibWVtY3B5OiBwcmV2ZW50ZWQgd3JpdGUgcGFzdCBlbmQgb2YgYnVmZmVyIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9kZW52ZXIvYmlvbmljL21lbWNweV9iYXNlLlMgYi9saWJjL2FyY2gtYXJtL2RlbnZlci9iaW9uaWMvbWVtY3B5X2Jhc2UuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWJiNDg2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9kZW52ZXIvYmlvbmljL21lbWNweV9iYXNlLlMKQEAgLTAsMCArMSwyMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE0LCBOVklESUEgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjZGVmaW5lIENBQ0hFX0xJTkVfU0laRSAgICAgICAgICg2NCkKKyNkZWZpbmUgUFJFRkVUQ0hfRElTVEFOQ0UgICAgICAgKENBQ0hFX0xJTkVfU0laRSo2KQorCitFTlRSWV9QUklWQVRFKE1FTUNQWV9CQVNFKQorICAgICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAgICAgLmNmaV9yZWxfb2Zmc2V0IHIwLCAwCisgICAgICAgIC5jZmlfcmVsX29mZnNldCBsciwgNAorCisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjMAorICAgICAgICBiZXEgICAgICAgICAuTF9tZW1jcHlfZG9uZQorICAgICAgICBjbXAgICAgICAgICByMCwgcjEKKyAgICAgICAgYmVxICAgICAgICAgLkxfbWVtY3B5X2RvbmUKKworICAgICAgICAvKiBwcmVsb2FkIG5leHQgY2FjaGUgbGluZSAqLworICAgICAgICBwbGQgICAgICAgICBbcjEsICNDQUNIRV9MSU5FX1NJWkUqMV0KKworICAgICAgICAvKiBEZWFsIHdpdGggdmVyeSBzbWFsbCBibG9ja3MgKDwgMzJieXRlcykgYXNhcCAqLworICAgICAgICBjbXAgICAgICAgICByMiwgIzMyCisgICAgICAgIGJsbyAgICAgICAgIC5MX21lbWNweV9sdF8zMmJ5dGVzCisgICAgICAgIC8qIG5vIG5lZWQgdG8gYWxpZ24gaWYgbGVuIDwgMTI4IGJ5dGVzICovCisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjMTI4CisgICAgICAgIGJsbyAgICAgICAgIC5MX21lbWNweV9sdF8xMjhieXRlcworCisgICAgICAgIC8qIGxhcmdlIGNvcHksIGFsaWduIGRlc3QgdG8gNjQgYnl0ZSBib3VuZHJ5ICovCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgI0NBQ0hFX0xJTkVfU0laRSoyXQorICAgICAgICByc2IgICAgICAgICByMywgcjAsICMwCisgICAgICAgIGFuZHMgICAgICAgIHIzLCByMywgIzB4M0YKKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjQ0FDSEVfTElORV9TSVpFKjNdCisgICAgICAgIGJlcSAgICAgICAgIC5MX21lbWNweV9kaXNwYXRjaAorICAgICAgICBzdWIgICAgICAgICByMiwgcjIsIHIzCisgICAgICAgIC8qIGNvcHkgMSBieXRlICovCisgICAgICAgIG1vdnMgICAgICAgIGlwLCByMywgbHNsICMzMQorICAgICAgICBpdHQgICAgICAgICBtaQorICAgICAgICBsZHJibWkgICAgICBpcCwgW3IxXSwgIzEKKyAgICAgICAgc3RyYm1pICAgICAgaXAsIFtyMF0sICMxCisgICAgICAgIC8qIGNvcHkgMiBieXRlcyAqLworICAgICAgICBpdHQgICAgICAgICBjcworICAgICAgICBsZHJoY3MgICAgICBpcCwgW3IxXSwgIzIKKyAgICAgICAgc3RyaGNzICAgICAgaXAsIFtyMF0sICMyCisgICAgICAgIC8qIGNvcHkgNCBieXRlcyAqLworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjMsIGxzbCAjMjkKKyAgICAgICAgaXR0ICAgICAgICAgbWkKKyAgICAgICAgbGRybWkgICAgICAgaXAsIFtyMV0sICM0CisgICAgICAgIHN0cm1pICAgICAgIGlwLCBbcjBdLCAjNAorICAgICAgICAvKiBjb3B5IDggYnl0ZXMgKi8KKyAgICAgICAgYmNjICAgICAgICAgMWYKKyAgICAgICAgdmxkMS44ICAgICAge2QwfSwgW3IxXSEKKyAgICAgICAgdnN0MS44ICAgICAge2QwfSwgW3IwLCA6NjRdIQorMTogICAgICAvKiBjb3B5IDE2IGJ5dGVzICovCisgICAgICAgIG1vdnMgICAgICAgIGlwLCByMywgbHNsICMyNworICAgICAgICBicGwgICAgICAgICAxZgorICAgICAgICB2bGQxLjggICAgICB7cTB9LCBbcjFdIQorICAgICAgICB2c3QxLjggICAgICB7cTB9LCBbcjAsIDoxMjhdIQorMTogICAgICAvKiBjb3B5IDMyIGJ5dGVzICovCisgICAgICAgIGJjYyAgICAgICAgIC5MX21lbWNweV9kaXNwYXRjaAorICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXSEKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMCwgOjI1Nl0hCisKKy5MX21lbWNweV9kaXNwYXRjaDoKKyAgICAgICAgLy8gcHJlLWRlY3JlbWVudCBieSAxMjggdG8gZGV0ZWN0IG5lYXJseS1kb25lIGNvbmRpdGlvbiBlYXNpbHksIGJ1dAorICAgICAgICAvLyBhbHNvIG5lZWQgdG8gY2hlY2sgaWYgd2UgaGF2ZSBsZXNzIHRoYW4gMTI4IGJ5dGVzIGxlZnQgYXQgdGhpcworICAgICAgICAvLyBwb2ludCBkdWUgdG8gYWxpZ25tZW50IGNvZGUgYWJvdmUKKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMTI4CisgICAgICAgIGJsbyAgICAgICAgIC5MX21lbWNweV9sdF8xMjhwcmVzdWIKKworICAgICAgICAvLyBEZW52ZXIgZG9lcyBiZXR0ZXIgaWYgYm90aCBzb3VyY2UgYW5kIGRlc3QgYXJlIGFsaWduZWQgc28KKyAgICAgICAgLy8gd2UnbGwgc3BlY2lhbC1jYXNlIHRoYXQgZXZlbiB0aG91Z2ggdGhlIGNvZGUgaXMgdmlydWFsbHkgaWRlbnRpY2FsCisgICAgICAgIHRzdCAgICAgICAgIHIxLCAjMHhGCisgICAgICAgIGJuZSAgICAgICAgIC5MX21lbWNweV9uZW9uX3VuYWxpZ25fc3JjX3BsZAorCisgICAgICAgIC8vIERSQU0gbWVtY3B5IHNob3VsZCBiZSB0aHJvdHRsZWQgc2xpZ2h0bHkgdG8gZ2V0IGZ1bGwgYmFuZHdpZHRoCisgICAgICAgIC8vCisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjMzI3NjgKKyAgICAgICAgYmhpICAgICAgICAgLkxfbWVtY3B5X25lb25fdW5hbGlnbl9zcmNfcGxkCisgICAgICAgIC5hbGlnbiAgICAgIDQKKzE6CisgICAgICAgIC8qIGNvcHkgMTI4IGJ5dGVzIGluIGVhY2ggbG9vcCAqLworICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMxMjgKKworICAgICAgICAvKiBwcmVsb2FkIGEgY2FjaGUgbGluZSAqLworICAgICAgICBwbGQgICAgICAgICBbcjEsICNQUkVGRVRDSF9ESVNUQU5DRV0KKyAgICAgICAgLyogY29weSBhIGNhY2hlIGxpbmUgKi8KKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMSwgOjEyOF0hCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjAsIDoyNTZdIQorICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxLCA6MTI4XSEKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMCwgOjI1Nl0hCisgICAgICAgIC8qIHByZWxvYWQgYSBjYWNoZSBsaW5lICovCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgI1BSRUZFVENIX0RJU1RBTkNFXQorICAgICAgICAvKiBjb3B5IGEgY2FjaGUgbGluZSAqLworICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxLCA6MTI4XSEKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMCwgOjI1Nl0hCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjEsIDoxMjhdIQorICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwLCA6MjU2XSEKKworICAgICAgICBiaHMgICAgICAgICAxYgorICAgICAgICBhZGRzICAgICAgICByMiwgcjIsICMxMjgKKyAgICAgICAgYm5lICAgICAgICAgLkxfbWVtY3B5X2x0XzEyOGJ5dGVzX2FsaWduCisgICAgICAgIHBvcCAgICAgICAgIHtyMCwgcGN9CisKKyAgICAgICAgLmFsaWduICAgICAgNAorLkxfbWVtY3B5X25lb25fdW5hbGlnbl9zcmNfcGxkOgorMToKKyAgICAgICAgLyogY29weSAxMjggYnl0ZXMgaW4gZWFjaCBsb29wICovCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzEyOAorCisgICAgICAgIC8qIHByZWxvYWQgYSBjYWNoZSBsaW5lICovCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgI1BSRUZFVENIX0RJU1RBTkNFXQorICAgICAgICAvKiBjb3B5IGEgY2FjaGUgbGluZSAqLworICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXSEKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMCwgOjI1Nl0hCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjFdIQorICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwLCA6MjU2XSEKKyAgICAgICAgLyogcHJlbG9hZCBhIGNhY2hlIGxpbmUgKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjUFJFRkVUQ0hfRElTVEFOQ0VdCisgICAgICAgIC8qIGNvcHkgYSBjYWNoZSBsaW5lICovCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjFdIQorICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwLCA6MjU2XSEKKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjAsIDoyNTZdIQorCisgICAgICAgIGJocyAgICAgICAgIDFiCisgICAgICAgIGFkZHMgICAgICAgIHIyLCByMiwgIzEyOAorICAgICAgICBibmUgICAgICAgICAuTF9tZW1jcHlfbHRfMTI4Ynl0ZXNfYWxpZ24KKyAgICAgICAgcG9wICAgICAgICAge3IwLCBwY30KKworLkxfbWVtY3B5X2x0XzEyOHByZXN1YjoKKyAgICAgICAgYWRkICAgICAgICAgcjIsIHIyLCAjMTI4CisuTF9tZW1jcHlfbHRfMTI4Ynl0ZXNfYWxpZ246CisgICAgICAgIC8qIGNvcHkgNjQgYnl0ZXMgKi8KKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIyLCBsc2wgIzI2CisgICAgICAgIGJjYyAgICAgICAgIDFmCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjFdIQorICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwLCA6MjU2XSEKKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjAsIDoyNTZdIQorMTogICAgICAvKiBjb3B5IDMyIGJ5dGVzICovCisgICAgICAgIGJwbCAgICAgICAgIDFmCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjFdIQorICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwLCA6MjU2XSEKKzE6ICAgICAgLyogY29weSAxNiBieXRlcyAqLworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjIsIGxzbCAjMjgKKyAgICAgICAgYmNjICAgICAgICAgMWYKKyAgICAgICAgdmxkMS44ICAgICAge3EwfSwgW3IxXSEKKyAgICAgICAgdnN0MS44ICAgICAge3EwfSwgW3IwLCA6MTI4XSEKKzE6ICAgICAgLyogY29weSA4IGJ5dGVzICovCisgICAgICAgIGJwbCAgICAgICAgIDFmCisgICAgICAgIHZsZDEuOCAgICAgIHtkMH0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtkMH0sIFtyMCwgOjY0XSEKKzE6ICAgICAgLyogY29weSA0IGJ5dGVzICovCisgICAgICAgIHRzdCAgICAgICAgIHIyLCAjNAorICAgICAgICBpdHQgICAgICAgICBuZQorICAgICAgICBsZHJuZSAgICAgICBpcCwgW3IxXSwgIzQKKyAgICAgICAgc3RybmUgICAgICAgaXAsIFtyMF0sICM0CisgICAgICAgIC8qIGNvcHkgMiBieXRlcyAqLworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjIsIGxzbCAjMzEKKyAgICAgICAgaXR0ICAgICAgICAgY3MKKyAgICAgICAgbGRyaGNzICAgICAgaXAsIFtyMV0sICMyCisgICAgICAgIHN0cmhjcyAgICAgIGlwLCBbcjBdLCAjMgorICAgICAgICAvKiBjb3B5IDEgYnl0ZSAqLworICAgICAgICBpdHQgICAgICAgICBtaQorICAgICAgICBsZHJibWkgICAgICBpcCwgW3IxXQorICAgICAgICBzdHJibWkgICAgICBpcCwgW3IwXQorCisgICAgICAgIHBvcCAgICAgICAgIHtyMCwgcGN9CisKKy5MX21lbWNweV9sdF8xMjhieXRlczoKKyAgICAgICAgLyogY29weSA2NCBieXRlcyAqLworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjIsIGxzbCAjMjYKKyAgICAgICAgYmNjICAgICAgICAgMWYKKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjBdIQorICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXSEKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMF0hCisxOiAgICAgIC8qIGNvcHkgMzIgYnl0ZXMgKi8KKyAgICAgICAgYnBsCSAgICAuTF9tZW1jcHlfbHRfMzJieXRlcworICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXSEKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMF0hCisuTF9tZW1jcHlfbHRfMzJieXRlczoKKyAgICAgICAgLyogY29weSAxNiBieXRlcyAqLworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjIsIGxzbCAjMjgKKyAgICAgICAgYmNjICAgICAgICAgMWYKKyAgICAgICAgdmxkMS44ICAgICAge3EwfSwgW3IxXSEKKyAgICAgICAgdnN0MS44ICAgICAge3EwfSwgW3IwXSEKKzE6ICAgICAgLyogY29weSA4IGJ5dGVzICovCisgICAgICAgIGJwbCAgICAgICAgIDFmCisgICAgICAgIHZsZDEuOCAgICAgIHtkMH0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtkMH0sIFtyMF0hCisxOiAgICAgIC8qIGNvcHkgNCBieXRlcyAqLworICAgICAgICB0c3QgICAgICAgICByMiwgIzQKKyAgICAgICAgaXR0ICAgICAgICAgbmUKKyAgICAgICAgbGRybmUgICAgICAgaXAsIFtyMV0sICM0CisgICAgICAgIHN0cm5lICAgICAgIGlwLCBbcjBdLCAjNAorICAgICAgICAvKiBjb3B5IDIgYnl0ZXMgKi8KKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIyLCBsc2wgIzMxCisgICAgICAgIGl0dCAgICAgICAgIGNzCisgICAgICAgIGxkcmhjcyAgICAgIGlwLCBbcjFdLCAjMgorICAgICAgICBzdHJoY3MgICAgICBpcCwgW3IwXSwgIzIKKyAgICAgICAgLyogY29weSAxIGJ5dGUgKi8KKyAgICAgICAgaXR0ICAgICAgICAgbWkKKyAgICAgICAgbGRyYm1pICAgICAgaXAsIFtyMV0KKyAgICAgICAgc3RyYm1pICAgICAgaXAsIFtyMF0KKworLkxfbWVtY3B5X2RvbmU6CisgICAgICAgIHBvcCAgICAgICAgIHtyMCwgcGN9CitFTkQoTUVNQ1BZX0JBU0UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2RlbnZlci9iaW9uaWMvbWVtbW92ZS5TIGIvbGliYy9hcmNoLWFybS9kZW52ZXIvYmlvbmljL21lbW1vdmUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzIxOTBiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9kZW52ZXIvYmlvbmljL21lbW1vdmUuUwpAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgTlZJRElBIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvbGliY19ldmVudHMuaD4KKworICAgICAgICAudGV4dAorICAgICAgICAuc3ludGF4IHVuaWZpZWQKKyAgICAgICAgLmZwdSAgICBuZW9uCisKKyNkZWZpbmUgQ0FDSEVfTElORV9TSVpFICAgICAgICAgKDY0KQorI2RlZmluZSBNRU1DUFlfQkxPQ0tfU0laRV9TTUFMTCAoMzI3NjgpCisjZGVmaW5lIE1FTUNQWV9CTE9DS19TSVpFX01JRCAgICgxMDQ4NTc2KQorI2RlZmluZSBQUkVGRVRDSF9ESVNUQU5DRV9ORUFSICAoQ0FDSEVfTElORV9TSVpFKjQpCisjZGVmaW5lIFBSRUZFVENIX0RJU1RBTkNFX01JRCAgIChDQUNIRV9MSU5FX1NJWkUqNCkKKyNkZWZpbmUgUFJFRkVUQ0hfRElTVEFOQ0VfRkFSICAgKENBQ0hFX0xJTkVfU0laRSoxNikKKworRU5UUlkobWVtbW92ZSkKKyAgICAgICAgY21wICAgICAgICAgcjIsICMwCisgICAgICAgIGNtcG5lICAgICAgIHIwLCByMQorICAgICAgICBieGVxICAgICAgICBscgorICAgICAgICBzdWJzICAgICAgICByMywgcjAsIHIxCisgICAgICAgIGJscyAgICAgICAgIC5MX2p1bXBfdG9fbWVtY3B5CisgICAgICAgIGNtcCAgICAgICAgIHIyLCByMworICAgICAgICBiaGkgICAgICAgICAuTF9yZXZlcnNlZF9tZW1jcHkKKworLkxfanVtcF90b19tZW1jcHk6CisgICAgICAgIGIgICAgICAgICAgIG1lbWNweQorCisuTF9yZXZlcnNlZF9tZW1jcHk6CisgICAgICAgIHB1c2ggICAgICAgIHtyMCwgbHJ9CisgICAgICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAorICAgICAgICAuY2ZpX3JlbF9vZmZzZXQgcjAsIDAKKyAgICAgICAgLmNmaV9yZWxfb2Zmc2V0IGxyLCA0CisKKyAgICAgICAgYWRkICAgICAgICAgcjAsIHIwLCByMgorICAgICAgICBhZGQgICAgICAgICByMSwgcjEsIHIyCisKKyAgICAgICAgLyogcHJlbG9hZCBuZXh0IGNhY2hlIGxpbmUgKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjLUNBQ0hFX0xJTkVfU0laRV0KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjLUNBQ0hFX0xJTkVfU0laRSoyXQorCisuTF9yZXZlcnNlZF9tZW1jcHlfYWxpZ25fZGVzdDoKKyAgICAgICAgLyogRGVhbCB3aXRoIHZlcnkgc21hbGwgYmxvY2tzICg8IDMyYnl0ZXMpIGFzYXAgKi8KKyAgICAgICAgY21wICAgICAgICAgcjIsICMzMgorICAgICAgICBibG8gICAgICAgICAuTF9yZXZlcnNlZF9tZW1jcHlfbHRfMzJieXRlcworICAgICAgICAvKiBubyBuZWVkIHRvIGFsaWduIGlmIGxlbiA8IDEyOCBieXRlcyAqLworICAgICAgICBjbXAgICAgICAgICByMiwgIzEyOAorICAgICAgICBibG8gICAgICAgICAuTF9yZXZlcnNlZF9tZW1jcHlfbHRfMTI4Ynl0ZXMKKyAgICAgICAgLyogYWxpZ24gZGVzdGluYXRpb24gdG8gNjQgYnl0ZXMgKDEgY2FjaGUgbGluZSkgKi8KKyAgICAgICAgYW5kcyAgICAgICAgcjMsIHIwLCAjMHgzZgorICAgICAgICBiZXEgICAgICAgICAuTF9yZXZlcnNlZF9tZW1jcHlfZGlzcGF0Y2gKKyAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCByMworMDogICAgICAvKiBjb3B5IDEgYnl0ZSAqLworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjMsIGxzbCAjMzEKKyAgICAgICAgbGRyYm1pICAgICAgaXAsIFtyMSwgIy0xXSEKKyAgICAgICAgc3RyYm1pICAgICAgaXAsIFtyMCwgIy0xXSEKKzE6ICAgICAgLyogY29weSAyIGJ5dGVzICovCisgICAgICAgIGxkcmJjcyAgICAgIGlwLCBbcjEsICMtMV0hCisgICAgICAgIHN0cmJjcyAgICAgIGlwLCBbcjAsICMtMV0hCisgICAgICAgIGxkcmJjcyAgICAgIGlwLCBbcjEsICMtMV0hCisgICAgICAgIHN0cmJjcyAgICAgIGlwLCBbcjAsICMtMV0hCisyOiAgICAgIC8qIGNvcHkgNCBieXRlcyAqLworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjMsIGxzbCAjMjkKKyAgICAgICAgYnBsICAgICAgICAgM2YKKyAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCAjNAorICAgICAgICBzdWIgICAgICAgICByMCwgcjAsICM0CisgICAgICAgIHZsZDQuOCAgICAgIHtkMFswXSwgZDFbMF0sIGQyWzBdLCBkM1swXX0sIFtyMV0KKyAgICAgICAgdnN0NC44ICAgICAge2QwWzBdLCBkMVswXSwgZDJbMF0sIGQzWzBdfSwgW3IwLCA6MzJdCiszOiAgICAgIC8qIGNvcHkgOCBieXRlcyAqLworICAgICAgICBiY2MgICAgICAgICA0ZgorICAgICAgICBzdWIgICAgICAgICByMSwgcjEsICM4CisgICAgICAgIHN1YiAgICAgICAgIHIwLCByMCwgIzgKKyAgICAgICAgdmxkMS44ICAgICAge2QwfSwgW3IxXQorICAgICAgICB2c3QxLjggICAgICB7ZDB9LCBbcjAsIDo2NF0KKzQ6ICAgICAgLyogY29weSAxNiBieXRlcyAqLworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjMsIGxzbCAjMjcKKyAgICAgICAgYnBsICAgICAgICAgNWYKKyAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCAjMTYKKyAgICAgICAgc3ViICAgICAgICAgcjAsIHIwLCAjMTYKKyAgICAgICAgdmxkMS44ICAgICAge3EwfSwgW3IxXQorICAgICAgICB2c3QxLjggICAgICB7cTB9LCBbcjAsIDoxMjhdCis1OiAgICAgIC8qIGNvcHkgMzIgYnl0ZXMgKi8KKyAgICAgICAgYmNjICAgICAgICAgLkxfcmV2ZXJzZWRfbWVtY3B5X2Rpc3BhdGNoCisgICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgIzMyCisgICAgICAgIHN1YiAgICAgICAgIHIwLCByMCwgIzMyCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjFdCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjAsIDoyNTZdCisKKy5MX3JldmVyc2VkX21lbWNweV9kaXNwYXRjaDoKKyAgICAgICAgLyogcHJlbG9hZCBtb3JlIGNhY2hlIGxpbmVzICovCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIy1DQUNIRV9MSU5FX1NJWkUqM10KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjLUNBQ0hFX0xJTkVfU0laRSo0XQorCisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjTUVNQ1BZX0JMT0NLX1NJWkVfU01BTEwKKyAgICAgICAgYmxvICAgICAgICAgLkxfcmV2ZXJzZWRfbWVtY3B5X25lb25fcGxkX25lYXIKKyAgICAgICAgY21wICAgICAgICAgcjIsICNNRU1DUFlfQkxPQ0tfU0laRV9NSUQKKyAgICAgICAgYmxvICAgICAgICAgLkxfcmV2ZXJzZWRfbWVtY3B5X25lb25fcGxkX21pZAorICAgICAgICBiICAgICAgICAgICAuTF9yZXZlcnNlZF9tZW1jcHlfbmVvbl9wbGRfZmFyCisKKy5MX3JldmVyc2VkX21lbWNweV9uZW9uX3BsZF9uZWFyOgorICAgICAgICAvKiBsZXNzIHRoYW4gMTI4IGJ5dGVzPyAqLworICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMxMjgKKyAgICAgICAgYmxvICAgICAgICAgMWYKKyAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCAjMzIKKyAgICAgICAgc3ViICAgICAgICAgcjAsIHIwLCAjMzIKKyAgICAgICAgbW92ICAgICAgICAgcjMsICMtMzIKKyAgICAgICAgLmFsaWduICAgICAgNAorMDoKKyAgICAgICAgLyogY29weSAxMjggYnl0ZXMgaW4gZWFjaCBsb29wICovCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzEyOAorCisgICAgICAgIC8qIHByZWxvYWQgdG8gY2FjaGUgKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjLShQUkVGRVRDSF9ESVNUQU5DRV9ORUFSK0NBQ0hFX0xJTkVfU0laRSoyKSszMl0KKyAgICAgICAgLyogY29weSBhIGNhY2hlIGxpbmUgKi8KKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMV0sIHIzCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjAsIDoyNTZdLCByMworICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXSwgcjMKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMCwgOjI1Nl0sIHIzCisKKyAgICAgICAgLyogcHJlbG9hZCB0byBjYWNoZSAqLworICAgICAgICBwbGQgICAgICAgICBbcjEsICMtKFBSRUZFVENIX0RJU1RBTkNFX05FQVIrQ0FDSEVfTElORV9TSVpFKjIpKzMyXQorICAgICAgICAvKiBjb3B5IGEgY2FjaGUgbGluZSAqLworICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXSwgcjMKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMCwgOjI1Nl0sIHIzCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjFdLCByMworICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwLCA6MjU2XSwgcjMKKworICAgICAgICBiaHMgICAgICAgICAwYgorICAgICAgICBhZGQgICAgICAgICByMSwgcjEsICMzMgorICAgICAgICBhZGQgICAgICAgICByMCwgcjAsICMzMgorMToKKyAgICAgICAgYWRkcyAgICAgICAgcjIsIHIyLCAjMTI4CisgICAgICAgIGJuZSAgICAgICAgIC5MX3JldmVyc2VkX21lbWNweV9sdF8xMjhieXRlcworICAgICAgICBwb3AgICAgICAgICB7cjAsIHBjfQorCisuTF9yZXZlcnNlZF9tZW1jcHlfbmVvbl9wbGRfbWlkOgorICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMxMjgKKyAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCAjMzIKKyAgICAgICAgc3ViICAgICAgICAgcjAsIHIwLCAjMzIKKyAgICAgICAgbW92ICAgICAgICAgcjMsICMtMzIKKyAgICAgICAgLmFsaWduICAgICAgNAorMDoKKyAgICAgICAgLyogY29weSAxMjggYnl0ZXMgaW4gZWFjaCBsb29wICovCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzEyOAorCisgICAgICAgIC8qIHByZWxvYWQgdG8gY2FjaGUgKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjLShQUkVGRVRDSF9ESVNUQU5DRV9NSUQrQ0FDSEVfTElORV9TSVpFKSszMl0KKyAgICAgICAgLyogY29weSBhIGNhY2hlIGxpbmUgKi8KKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMV0sIHIzCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjAsIDoyNTZdLCByMworICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXSwgcjMKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMCwgOjI1Nl0sIHIzCisKKyAgICAgICAgLyogcHJlbG9hZCB0byBjYWNoZSAqLworICAgICAgICBwbGQgICAgICAgICBbcjEsICMtKFBSRUZFVENIX0RJU1RBTkNFX01JRCtDQUNIRV9MSU5FX1NJWkUpKzMyXQorICAgICAgICAvKiBjb3B5IGEgY2FjaGUgbGluZSAqLworICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXSwgcjMKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMCwgOjI1Nl0sIHIzCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjFdLCByMworICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwLCA6MjU2XSwgcjMKKworICAgICAgICBiaHMgICAgICAgICAwYgorICAgICAgICBhZGQgICAgICAgICByMSwgcjEsICMzMgorICAgICAgICBhZGQgICAgICAgICByMCwgcjAsICMzMgorMToKKyAgICAgICAgYWRkcyAgICAgICAgcjIsIHIyLCAjMTI4CisgICAgICAgIGJuZSAgICAgICAgIC5MX3JldmVyc2VkX21lbWNweV9sdF8xMjhieXRlcworICAgICAgICBwb3AgICAgICAgICB7cjAsIHBjfQorCisuTF9yZXZlcnNlZF9tZW1jcHlfbmVvbl9wbGRfZmFyOgorICAgICAgICBzdWIgICAgICAgICByMiwgcjIsICMxMjgKKyAgICAgICAgc3ViICAgICAgICAgcjAsIHIwLCAjMTI4CisgICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgIzEyOAorICAgICAgICAuYWxpZ24gICAgICA0CiswOgorICAgICAgICAvKiBjb3B5IDEyOCBieXRlcyBpbiBlYWNoIGxvb3AgKi8KKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMTI4CisKKyAgICAgICAgLyogcHJlbG9hZCB0byBjYWNoZSAqLworICAgICAgICBwbGQgICAgICAgICBbcjEsICMtKFBSRUZFVENIX0RJU1RBTkNFX0ZBUitDQUNIRV9MSU5FX1NJWkUqMikrMTI4XQorICAgICAgICBwbGQgICAgICAgICBbcjEsICMtKFBSRUZFVENIX0RJU1RBTkNFX0ZBUitDQUNIRV9MSU5FX1NJWkUpKzEyOF0KKyAgICAgICAgLyogcmVhZCAqLworICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXSEKKyAgICAgICAgdmxkMS44ICAgICAge3EyLCBxM30sIFtyMV0hCisgICAgICAgIHZsZDEuOCAgICAgIHtxOCwgcTl9LCBbcjFdIQorICAgICAgICB2bGQxLjggICAgICB7cTEwLCBxMTF9LCBbcjFdIQorICAgICAgICAvKiB3cml0ZSAqLworICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwLCA6MjU2XSEKKyAgICAgICAgdnN0MS44ICAgICAge3EyLCBxM30sIFtyMCwgOjI1Nl0hCisgICAgICAgIHZzdDEuOCAgICAgIHtxOCwgcTl9LCBbcjAsIDoyNTZdIQorICAgICAgICB2c3QxLjggICAgICB7cTEwLCBxMTF9LCBbcjAsIDoyNTZdIQorCisgICAgICAgIHN1YiAgICAgICAgIHIwLCByMCwgIzI1NgorICAgICAgICBzdWIgICAgICAgICByMSwgcjEsICMyNTYKKyAgICAgICAgYmhzICAgICAgICAgMGIKKyAgICAgICAgYWRkICAgICAgICAgcjAsIHIwLCAjMTI4CisgICAgICAgIGFkZCAgICAgICAgIHIxLCByMSwgIzEyOAorMToKKyAgICAgICAgYWRkcyAgICAgICAgcjIsIHIyLCAjMTI4CisgICAgICAgIGJuZSAgICAgICAgIC5MX3JldmVyc2VkX21lbWNweV9sdF8xMjhieXRlcworICAgICAgICBwb3AgICAgICAgICB7cjAsIHBjfQorCisuTF9yZXZlcnNlZF9tZW1jcHlfbHRfMTI4Ynl0ZXM6Cis2OiAgICAgIC8qIGNvcHkgNjQgYnl0ZXMgKi8KKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIyLCBsc2wgIzI2CisgICAgICAgIGJjYyAgICAgICAgIDVmCisgICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgIzMyCisgICAgICAgIHN1YiAgICAgICAgIHIwLCByMCwgIzMyCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjFdCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjBdCisgICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgIzMyCisgICAgICAgIHN1YiAgICAgICAgIHIwLCByMCwgIzMyCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjFdCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjBdCis1OiAgICAgIC8qIGNvcHkgMzIgYnl0ZXMgKi8KKyAgICAgICAgYnBsICAgICAgICAgNGYKKyAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCAjMzIKKyAgICAgICAgc3ViICAgICAgICAgcjAsIHIwLCAjMzIKKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMV0KKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMF0KKy5MX3JldmVyc2VkX21lbWNweV9sdF8zMmJ5dGVzOgorNDogICAgICAvKiBjb3B5IDE2IGJ5dGVzICovCisgICAgICAgIG1vdnMgICAgICAgIGlwLCByMiwgbHNsICMyOAorICAgICAgICBiY2MgICAgICAgICAzZgorICAgICAgICBzdWIgICAgICAgICByMSwgcjEsICMxNgorICAgICAgICBzdWIgICAgICAgICByMCwgcjAsICMxNgorICAgICAgICB2bGQxLjggICAgICB7cTB9LCBbcjFdCisgICAgICAgIHZzdDEuOCAgICAgIHtxMH0sIFtyMF0KKzM6ICAgICAgLyogY29weSA4IGJ5dGVzICovCisgICAgICAgIGJwbCAgICAgICAgIDJmCisgICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgIzgKKyAgICAgICAgc3ViICAgICAgICAgcjAsIHIwLCAjOAorICAgICAgICB2bGQxLjggICAgICB7ZDB9LCBbcjFdCisgICAgICAgIHZzdDEuOCAgICAgIHtkMH0sIFtyMF0KKzI6ICAgICAgLyogY29weSA0IGJ5dGVzICovCisgICAgICAgIGFuZHMgICAgICAgIGlwLCByMiwgIzB4NAorICAgICAgICBiZXEgICAgICAgICAxZgorICAgICAgICBzdWIgICAgICAgICByMSwgcjEsICM0CisgICAgICAgIHN1YiAgICAgICAgIHIwLCByMCwgIzQKKyAgICAgICAgdmxkNC44ICAgICAge2QwWzBdLCBkMVswXSwgZDJbMF0sIGQzWzBdfSwgW3IxXQorICAgICAgICB2c3Q0LjggICAgICB7ZDBbMF0sIGQxWzBdLCBkMlswXSwgZDNbMF19LCBbcjBdCisxOiAgICAgIC8qIGNvcHkgMiBieXRlcyAqLworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjIsIGxzbCAjMzEKKyAgICAgICAgbGRyYmNzICAgICAgaXAsIFtyMSwgIy0xXSEKKyAgICAgICAgc3RyYmNzICAgICAgaXAsIFtyMCwgIy0xXSEKKyAgICAgICAgbGRyYmNzICAgICAgaXAsIFtyMSwgIy0xXSEKKyAgICAgICAgc3RyYmNzICAgICAgaXAsIFtyMCwgIy0xXSEKKzA6ICAgICAgLyogY29weSAxIGJ5dGUgKi8KKyAgICAgICAgbGRyYm1pICAgICAgaXAsIFtyMSwgIy0xXSEKKyAgICAgICAgc3RyYm1pICAgICAgaXAsIFtyMCwgIy0xXSEKKworICAgICAgICBwb3AgICAgICAgICB7cjAsIHBjfQorCitFTkQobWVtbW92ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9tZW1zZXQuUyBiL2xpYmMvYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9tZW1zZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjNkOWFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9kZW52ZXIvYmlvbmljL21lbXNldC5TCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgTlZJRElBIENPUlBPUkFUSU9OLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvbGliY19ldmVudHMuaD4KKworICAgICAgICAvKgorICAgICAgICAgKiBPcHRpbWl6ZWQgbWVtc2V0KCkgZm9yIEFSTS4KKyAgICAgICAgICoKKyAgICAgICAgICogbWVtc2V0KCkgcmV0dXJucyBpdHMgZmlyc3QgYXJndW1lbnQuCisgICAgICAgICAqLworCisgICAgICAgIC5mcHUgICAgICAgIG5lb24KKyAgICAgICAgLnN5bnRheCAgICAgdW5pZmllZAorCitFTlRSWShfX21lbXNldF9jaGspCisgICAgICAgIGNtcCAgICAgICAgIHIyLCByMworICAgICAgICBibHMgICAgICAgICAuTF9kb25lCisKKyAgICAgICAgLy8gUHJlc2VydmUgbHIgZm9yIGJhY2t0cmFjZS4KKyAgICAgICAgcHVzaCAgICAgICAge2xyfQorICAgICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAgICAgLmNmaV9yZWxfb2Zmc2V0IGxyLCAwCisKKworICAgICAgICBsZHIgICAgICAgICByMCwgZXJyb3JfbWVzc2FnZQorICAgICAgICBsZHIgICAgICAgICByMSwgZXJyb3JfY29kZQorMToKKyAgICAgICAgYWRkICAgICAgICAgcjAsIHBjCisgICAgICAgIGJsICAgICAgICAgIF9fZm9ydGlmeV9jaGtfZmFpbAorZXJyb3JfY29kZToKKyAgICAgICAgLndvcmQgICAgICAgQklPTklDX0VWRU5UX01FTVNFVF9CVUZGRVJfT1ZFUkZMT1cKK2Vycm9yX21lc3NhZ2U6CisgICAgICAgIC53b3JkICAgICAgIGVycm9yX3N0cmluZy0oMWIrOCkKK0VORChfX21lbXNldF9jaGspCisKK0VOVFJZKGJ6ZXJvKQorICAgICAgICBtb3YgICAgICAgICByMiwgcjEKKyAgICAgICAgbW92ICAgICAgICAgcjEsICMwCisuTF9kb25lOgorICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gbWVtc2V0Li4uCitFTkQoYnplcm8pCisKK0VOVFJZKG1lbXNldCkKKyAgICAgICAgcGxkdyAgICAgICAgW3IwXQorICAgICAgICBtb3YgICAgICAgICByMywgcjAKKworICAgICAgICAvLyBEdXBsaWNhdGUgdGhlIGxvdyBieXRlIG9mIHIxCisgICAgICAgIG1vdiAgICAgICAgIHIxLCByMSwgbHNsICMyNAorICAgICAgICBvcnIgICAgICAgICByMSwgcjEsIHIxLCBsc3IgIzgKKyAgICAgICAgb3JyICAgICAgICAgcjEsIHIxLCByMSwgbHNyICMxNgorCisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjMTYKKyAgICAgICAgYmxvICAgICAgICAgLkxfbGVzc190aGFuXzE2CisKKyAgICAgICAgLy8gVGhpcyBzZWN0aW9uIGhhbmRsZXMgcmVnaW9ucyAxNiBieXRlcyBvciBsYXJnZXIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVXNlIGFsaWduZWQgdnN0MS44IGFuZCB2c3RtIHdoZW4gcG9zc2libGUuICBSZWdpc3RlciB2YWx1ZXMgd2lsbCBiZToKKyAgICAgICAgLy8gICBpcCBpcyBzY3JhdGNoCisgICAgICAgIC8vICAgcTAsIHExLCBhbmQgcjEgY29udGFpbiB0aGUgbWVtc2V0IHZhbHVlCisgICAgICAgIC8vICAgcjIgaXMgdGhlIG51bWJlciBvZiBieXRlcyB0byBzZXQKKyAgICAgICAgLy8gICByMyBpcyB0aGUgYWR2YW5jaW5nIGRlc3RpbmF0aW9uIHBvaW50ZXIKKyAgICAgICAgdmR1cC4zMiAgICAgcTAsIHIxCisKKyAgICAgICAgYW5kcyAgICAgICAgaXAsIHIzLCAweEYKKyAgICAgICAgYmVxICAgICAgICAgLkxfbWVtc2V0X2FsaWduZWQKKworICAgICAgICAvLyBBbGlnbiBkZXN0IHBvaW50ZXIgdG8gMTYtYnl0ZSBib3VuZGFyeS4KKyAgICAgICAgcGxkdyAgICAgICAgW3IwLCAjNjRdCisgICAgICAgIHJzYiAgICAgICAgIGlwLCBpcCwgIzE2CisKKyAgICAgICAgLy8gUHJlLWFkanVzdCB0aGUgYnl0ZSBjb3VudCB0byByZWZsZWN0IHBvc3QtYWxpZ21lbnQgdmFsdWUuICBFeHBlY3RpbmcKKyAgICAgICAgLy8gOC1ieXRlIGFsaWdubWVudCB0byBiZSByYXRoZXIgY29tbW9uIHNvIHdlIHNwZWNpYWwgY2FzZSB0aGF0IG9uZS4KKyAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCBpcAorCisgICAgICAgIC8qIHNldCAxIGJ5dGUgKi8KKyAgICAgICAgdHN0ICAgICAgICAgaXAsICMxCisgICAgICAgIGl0ICAgICAgICAgIG5lCisgICAgICAgIHN0cmJuZSAgICAgIHIxLCBbcjNdLCAjMQorICAgICAgICAvKiBzZXQgMiBieXRlcyAqLworICAgICAgICB0c3QgICAgICAgICBpcCwgIzIKKyAgICAgICAgaXQgICAgICAgICAgbmUKKyAgICAgICAgc3RyaG5lICAgICAgcjEsIFtyM10sICMyCisgICAgICAgIC8qIHNldCA0IGJ5dGVzICovCisgICAgICAgIG1vdnMgICAgICAgIGlwLCBpcCwgbHNsICMyOQorICAgICAgICBpdCAgICAgICAgICBtaQorICAgICAgICBzdHJtaSAgICAgICByMSwgW3IzXSwgIzQKKyAgICAgICAgLyogc2V0IDggYnl0ZXMgKi8KKyAgICAgICAgaXR0ICAgICAgICAgY3MKKyAgICAgICAgc3RyY3MgICAgICAgcjEsIFtyM10sICM0CisgICAgICAgIHN0cmNzICAgICAgIHIxLCBbcjNdLCAjNAorCisuTF9tZW1zZXRfYWxpZ25lZDoKKyAgICAgICAgLy8gRGVzdGluYXRpb24gaXMgbm93IDE2LWJ5dGUgYWxpZ25lZC4gIERldGVybWluZSBob3cgdG8gaGFuZGxlCisgICAgICAgIC8vIHJlbWFpbmluZyBieXRlcy4KKyAgICAgICAgdm1vdiAgICAgICAgcTEsIHEwCisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjMTI4CisgICAgICAgIGJsbyAgICAgICAgIC5MX2xlc3NfdGhhbl8xMjgKKworICAgICAgICAvLyBXZSBuZWVkIHRvIHNldCBhIGxhcmdlciBibG9jayBvZiBtZW1vcnkuICBVc2UgZm91ciBRIHJlZ3MgdG8KKyAgICAgICAgLy8gc2V0IGEgZnVsbCBjYWNoZSBsaW5lIGluIG9uZSBpbnN0cnVjdGlvbi4gIFByZS1kZWNyZW1lbnQKKyAgICAgICAgLy8gcjIgdG8gc2ltcGxpZnkgZW5kLW9mLWxvb3AgZGV0ZWN0aW9uCisgICAgICAgIHZtb3YgICAgICAgIHEyLCBxMAorICAgICAgICB2bW92ICAgICAgICBxMywgcTAKKyAgICAgICAgcGxkdyAgICAgICAgW3IwLCAjMTI4XQorICAgICAgICBzdWIgICAgICAgICByMiwgcjIsICMxMjgKKyAgICAgICAgLmFsaWduIDQKKy5MX21lbXNldF9sb29wXzEyODoKKyAgICAgICAgcGxkdyAgICAgICAgW3IzLCAjMTkyXQorICAgICAgICB2c3RtICAgICAgICByMyEsIHtxMCwgcTEsIHEyLCBxM30KKyAgICAgICAgdnN0bSAgICAgICAgcjMhLCB7cTAsIHExLCBxMiwgcTN9CisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzEyOAorICAgICAgICBiaHMgICAgICAgICAuTF9tZW1zZXRfbG9vcF8xMjgKKworICAgICAgICAvLyBVbi1iaWFzIHIyIHNvIGl0IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgbGVmdC4gIEVhcmx5CisgICAgICAgIC8vIGV4aXQgaWYgd2UgYXJlIGRvbmUuCisgICAgICAgIGFkZHMgICAgICAgIHIyLCByMiwgIzEyOAorICAgICAgICBiZXEgICAgICAgICAyZgorCisgICAgICAgIC5hbGlnbiA0CisuTF9sZXNzX3RoYW5fMTI4OgorICAgICAgICAvLyBzZXQgNjQgYnl0ZXMKKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIyLCBsc2wgIzI2CisgICAgICAgIGJjYyAgICAgICAgIDFmCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjMsIDoxMjhdIQorICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IzLCA6MTI4XSEKKyAgICAgICAgYmVxICAgICAgICAgMmYKKzE6CisgICAgICAgIC8vIHNldCAzMiBieXRlcworICAgICAgICBicGwgICAgICAgICAxZgorICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IzLCA6MTI4XSEKKzE6CisgICAgICAgIC8vIHNldCAxNiBieXRlcworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjIsIGxzbCAjMjgKKyAgICAgICAgYmNjICAgICAgICAgMWYKKyAgICAgICAgdnN0MS44ICAgICAge3EwfSwgW3IzLCA6MTI4XSEKKyAgICAgICAgYmVxICAgICAgICAgMmYKKzE6CisgICAgICAgIC8vIHNldCA4IGJ5dGVzCisgICAgICAgIGJwbCAgICAgICAgIDFmCisgICAgICAgIHZzdDEuOCAgICAgIHtkMH0sIFtyMywgOjY0XSEKKzE6CisgICAgICAgIC8vIHNldCA0IGJ5dGVzCisgICAgICAgIHRzdCAgICAgICAgIHIyLCAjNAorICAgICAgICBpdCAgICAgICAgICBuZQorICAgICAgICBzdHJuZSAgICAgICByMSwgW3IzXSwgIzQKKzE6CisgICAgICAgIC8vIHNldCAyIGJ5dGVzCisgICAgICAgIG1vdnMgICAgICAgIGlwLCByMiwgbHNsICMzMQorICAgICAgICBpdCAgICAgICAgICBjcworICAgICAgICBzdHJoY3MgICAgICByMSwgW3IzXSwgIzIKKyAgICAgICAgLy8gc2V0IDEgYnl0ZQorICAgICAgICBpdCAgICAgICAgICBtaQorICAgICAgICBzdHJibWkgICAgICByMSwgW3IzXQorMjoKKyAgICAgICAgYnggICAgICAgICAgbHIKKworLkxfbGVzc190aGFuXzE2OgorICAgICAgICAvLyBTdG9yZSB1cCB0byAxNSBieXRlcyB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IGJ5dGUgYWxpZ25tZW50CisgICAgICAgIG1vdnMgICAgICAgIGlwLCByMiwgbHNsICMyOQorICAgICAgICBiY2MgICAgICAgICAxZgorICAgICAgICBzdHIgICAgICAgICByMSwgW3IzXSwgIzQKKyAgICAgICAgc3RyICAgICAgICAgcjEsIFtyM10sICM0CisgICAgICAgIGJlcSAgICAgICAgIDJmCisxOgorICAgICAgICBpdCAgICAgICAgICBtaQorICAgICAgICBzdHJtaSAgICAgICByMSwgW3IzXSwgIzQKKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIyLCBsc2wgIzMxCisgICAgICAgIGl0ICAgICAgICAgIG1pCisgICAgICAgIHN0cmJtaSAgICAgIHIxLCBbcjNdLCAjMQorICAgICAgICBpdHQgICAgICAgICBjcworICAgICAgICBzdHJiY3MgICAgICByMSwgW3IzXSwgIzEKKyAgICAgICAgc3RyYmNzICAgICAgcjEsIFtyM10KKzI6CisgICAgICAgIGJ4ICAgICAgICAgIGxyCitFTkQobWVtc2V0KQorCisgICAgICAgIC5kYXRhCitlcnJvcl9zdHJpbmc6CisgICAgICAgIC5zdHJpbmcgICAgICJtZW1zZXQ6IHByZXZlbnRlZCB3cml0ZSBwYXN0IGVuZCBvZiBidWZmZXIiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2RlbnZlci9kZW52ZXIubWsgYi9saWJjL2FyY2gtYXJtL2RlbnZlci9kZW52ZXIubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4OTE4NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vZGVudmVyL2RlbnZlci5tawpAQCAtMCwwICsxLDEzIEBACitsaWJjX2Jpb25pY19zcmNfZmlsZXNfYXJtICs9IFwKKyAgICBhcmNoLWFybS9kZW52ZXIvYmlvbmljL21lbWNweS5TIFwKKyAgICBhcmNoLWFybS9kZW52ZXIvYmlvbmljL21lbW1vdmUuUyBcCisgICAgYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9tZW1zZXQuUyBcCisgICAgYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9fX3N0cmNhdF9jaGsuUyBcCisgICAgYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9fX3N0cmNweV9jaGsuUyBcCisKKyMgVXNlIGNvcnRleC1hMTUgdmVyc2lvbnMgb2Ygc3RyY2F0L3N0cmNweS9zdHJsZW4uCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfYXJtICs9IFwKKyAgICBhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjYXQuUyBcCisgICAgYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY3B5LlMgXAorICAgIGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmxlbi5TIFwKKyAgICBhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjbXAuUyBcCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2dlbmVyaWMvYmlvbmljL21lbWNweS5TIGIvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9tZW1jcHkuUwppbmRleCA2OTliODhkLi5jZDRhMTNkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2dlbmVyaWMvYmlvbmljL21lbWNweS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvbWVtY3B5LlMKQEAgLTI3LDggKzI3LDggQEAKICAqLwogCiAjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgInByaXZhdGUvbGliY19ldmVudHMuaCIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2xpYmNfZXZlbnRzLmg+CiAKICAgICAgICAgLyoKICAgICAgICAgICogT3B0aW1pemVkIG1lbWNweSgpIGZvciBBUk0uCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2dlbmVyaWMvYmlvbmljL21lbXNldC5TIGIvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9tZW1zZXQuUwppbmRleCBiYWViNTE5Li5iZTM1ZGU5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2dlbmVyaWMvYmlvbmljL21lbXNldC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvbWVtc2V0LlMKQEAgLTI2LDggKzI2LDggQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgInByaXZhdGUvbGliY19ldmVudHMuaCIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2xpYmNfZXZlbnRzLmg+CiAKICAgICAgICAgLyoKICAgICAgICAgICogT3B0aW1pemVkIG1lbXNldCgpIGZvciBBUk0uCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2dlbmVyaWMvYmlvbmljL3N0cmNtcC5TIGIvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9zdHJjbXAuUwppbmRleCA0MmQ0MWQxLi42ZGJhOTQyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2dlbmVyaWMvYmlvbmljL3N0cmNtcC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvc3RyY21wLlMKQEAgLTI4LDcgKzI4LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAJLnRleHQKIApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9zdHJjcHkuUyBiL2xpYmMvYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvc3RyY3B5LlMKaW5kZXggY2M5OTdmNC4uODAyYTYyZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9zdHJjcHkuUworKysgYi9saWJjL2FyY2gtYXJtL2dlbmVyaWMvYmlvbmljL3N0cmNweS5TCkBAIC0zMCw3ICszMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc3RyY3B5KQogCXBsZAlbcjEsICMwXQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9nZW5lcmljL2dlbmVyaWMubWsgYi9saWJjL2FyY2gtYXJtL2dlbmVyaWMvZ2VuZXJpYy5tawppbmRleCBlMjMwMDAzLi4yNDU2ZTZlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2dlbmVyaWMvZ2VuZXJpYy5taworKysgYi9saWJjL2FyY2gtYXJtL2dlbmVyaWMvZ2VuZXJpYy5tawpAQCAtMSw4ICsxLDEwIEBACi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLE1FTUNQWSxhcmNoLWFybS9nZW5lcmljL2Jpb25pYy9tZW1jcHkuUykKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsTUVNU0VULGFyY2gtYXJtL2dlbmVyaWMvYmlvbmljL21lbXNldC5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxTVFJDQVQsc3RyaW5nL3N0cmNhdC5jKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxTVFJDTVAsYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvc3RyY21wLlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLFNUUkNQWSxhcmNoLWFybS9nZW5lcmljL2Jpb25pYy9zdHJjcHkuUykKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsU1RSTEVOLGFyY2gtYXJtL2dlbmVyaWMvYmlvbmljL3N0cmxlbi5jKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxfX1NUUkNBVF9DSEssYmlvbmljL19fc3RyY2F0X2Noay5jcHApCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLF9fU1RSQ1BZX0NISyxiaW9uaWMvX19zdHJjcHlfY2hrLmNwcCkKK2xpYmNfYmlvbmljX3NyY19maWxlc19hcm0gKz0gXAorICAgIGFyY2gtYXJtL2dlbmVyaWMvYmlvbmljL21lbWNweS5TIFwKKyAgICBhcmNoLWFybS9nZW5lcmljL2Jpb25pYy9tZW1zZXQuUyBcCisgICAgYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvc3RyY21wLlMgXAorICAgIGFyY2gtYXJtL2dlbmVyaWMvYmlvbmljL3N0cmNweS5TIFwKKyAgICBhcmNoLWFybS9nZW5lcmljL2Jpb25pYy9zdHJsZW4uYyBcCisgICAgYmlvbmljL21lbW1vdmUuYyBcCisgICAgYmlvbmljL19fc3RyY2F0X2Noay5jcHAgXAorICAgIGJpb25pYy9fX3N0cmNweV9jaGsuY3BwIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjYXQuYyBcCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYThiNjEwLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qCSRPcGVuQlNEOiBfdHlwZXMuaCx2IDEuMyAyMDA2LzAyLzE0IDE4OjEyOjU4IG1pb2QgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglAKCMpdHlwZXMuaAk4LjMgKEJlcmtlbGV5KSAxLzUvOTQKLSAqCUAoIylhbnNpLmgJOC4yIChCZXJrZWxleSkgMS80Lzk0Ci0gKi8KLQotI2lmbmRlZiBfQVJNX19UWVBFU19IXwotI2RlZmluZSBfQVJNX19UWVBFU19IXwotCi0vKiA3LjE4LjEuMSBFeGFjdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCi10eXBlZGVmCV9fc2lnbmVkIGNoYXIJCV9faW50OF90OwotdHlwZWRlZgl1bnNpZ25lZCBjaGFyCQlfX3VpbnQ4X3Q7Ci10eXBlZGVmCXNob3J0CQkJX19pbnQxNl90OwotdHlwZWRlZgl1bnNpZ25lZCBzaG9ydAkJX191aW50MTZfdDsKLXR5cGVkZWYJaW50CQkJX19pbnQzMl90OwotdHlwZWRlZgl1bnNpZ25lZCBpbnQJCV9fdWludDMyX3Q7Ci0vKiBMT05HTE9ORyAqLwotdHlwZWRlZglsb25nIGxvbmcJCV9faW50NjRfdDsKLS8qIExPTkdMT05HICovCi10eXBlZGVmCXVuc2lnbmVkIGxvbmcgbG9uZwlfX3VpbnQ2NF90OwotCi0vKiA3LjE4LjEuMiBNaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMgKi8KLXR5cGVkZWYJX19pbnQ4X3QJCV9faW50X2xlYXN0OF90OwotdHlwZWRlZglfX3VpbnQ4X3QJCV9fdWludF9sZWFzdDhfdDsKLXR5cGVkZWYJX19pbnQxNl90CQlfX2ludF9sZWFzdDE2X3Q7Ci10eXBlZGVmCV9fdWludDE2X3QJCV9fdWludF9sZWFzdDE2X3Q7Ci10eXBlZGVmCV9faW50MzJfdAkJX19pbnRfbGVhc3QzMl90OwotdHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfbGVhc3QzMl90OwotdHlwZWRlZglfX2ludDY0X3QJCV9faW50X2xlYXN0NjRfdDsKLXR5cGVkZWYJX191aW50NjRfdAkJX191aW50X2xlYXN0NjRfdDsKLQotLyogNy4xOC4xLjMgRmFzdGVzdCBtaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMgKi8KLXR5cGVkZWYJX19pbnQzMl90CQlfX2ludF9mYXN0OF90OwotdHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfZmFzdDhfdDsKLXR5cGVkZWYJX19pbnQzMl90CQlfX2ludF9mYXN0MTZfdDsKLXR5cGVkZWYJX191aW50MzJfdAkJX191aW50X2Zhc3QxNl90OwotdHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3QzMl90OwotdHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfZmFzdDMyX3Q7Ci10eXBlZGVmCV9faW50NjRfdAkJX19pbnRfZmFzdDY0X3Q7Ci10eXBlZGVmCV9fdWludDY0X3QJCV9fdWludF9mYXN0NjRfdDsKLQotLyogNy4xOC4xLjQgSW50ZWdlciB0eXBlcyBjYXBhYmxlIG9mIGhvbGRpbmcgb2JqZWN0IHBvaW50ZXJzICovCi10eXBlZGVmCWludCAJCQlfX2ludHB0cl90OwotdHlwZWRlZgl1bnNpZ25lZCBpbnQgCQlfX3VpbnRwdHJfdDsKLQotLyogNy4xOC4xLjUgR3JlYXRlc3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLwotdHlwZWRlZglfX2ludDY0X3QJCV9faW50bWF4X3Q7Ci10eXBlZGVmCV9fdWludDY0X3QJCV9fdWludG1heF90OwotCi0vKiBSZWdpc3RlciBzaXplICovCi10eXBlZGVmIF9faW50MzJfdAkJX19yZWdpc3Rlcl90OwotCi0vKiBWTSBzeXN0ZW0gdHlwZXMgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZwkJX192YWRkcl90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3BhZGRyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fdnNpemVfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZwkJX19wc2l6ZV90OwotCi0vKiBTdGFuZGFyZCBzeXN0ZW0gdHlwZXMgKi8KLXR5cGVkZWYgaW50CQkJX19jbG9ja190OwotdHlwZWRlZiBpbnQJCQlfX2Nsb2NraWRfdDsKLXR5cGVkZWYgZG91YmxlCQkJX19kb3VibGVfdDsKLXR5cGVkZWYgZmxvYXQJCQlfX2Zsb2F0X3Q7Ci10eXBlZGVmIGxvbmcJCQlfX3B0cmRpZmZfdDsKLXR5cGVkZWYJaW50CQkJX190aW1lX3Q7Ci10eXBlZGVmIGludAkJCV9fdGltZXJfdDsKLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCi10eXBlZGVmCV9fYnVpbHRpbl92YV9saXN0CV9fdmFfbGlzdDsKLSNlbHNlCi10eXBlZGVmCWNoYXIgKgkJCV9fdmFfbGlzdDsKLSNlbmRpZgotCi0vKiBXaWRlIGNoYXJhY3RlciBzdXBwb3J0IHR5cGVzICovCi0jaWZuZGVmIF9fY3BsdXNwbHVzCi10eXBlZGVmCWludAkJCV9fd2NoYXJfdDsKLSNlbmRpZgotdHlwZWRlZiBpbnQJCQlfX3dpbnRfdDsKLXR5cGVkZWYJaW50CQkJX19ydW5lX3Q7Ci10eXBlZGVmCXZvaWQgKgkJCV9fd2N0cmFuc190OwotdHlwZWRlZgl2b2lkICoJCQlfX3djdHlwZV90OwotCi0jZW5kaWYJLyogX0FSTV9fVFlQRVNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2FzbS5oIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvYXNtLmgKaW5kZXggZjE2YmFmOC4uNzk1NGYwNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvYXNtLmgKKysrIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvYXNtLmgKQEAgLTM4LDEwNyArMzgsMjIgQEAKICNpZm5kZWYgX0FSTTMyX0FTTV9IXwogI2RlZmluZSBfQVJNMzJfQVNNX0hfCiAKLSNpZmRlZiBfX0VMRl9fCi0jIGRlZmluZSBfQ19MQUJFTCh4KQl4Ci0jZWxzZQotIyBpZmRlZiBfX1NURENfXwotIyAgZGVmaW5lIF9DX0xBQkVMKHgpCV8gIyMgeAotIyBlbHNlCi0jICBkZWZpbmUgX0NfTEFCRUwoeCkJXy8qKi94Ci0jIGVuZGlmCi0jZW5kaWYKLSNkZWZpbmUJX0FTTV9MQUJFTCh4KQl4Ci0KLSNpZmRlZiBfX1NURENfXwotIyBkZWZpbmUgX19DT05DQVQoeCx5KQl4ICMjIHkKLSMgZGVmaW5lIF9fU1RSSU5HKHgpCSN4Ci0jZWxzZQotIyBkZWZpbmUgX19DT05DQVQoeCx5KQl4LyoqL3kKLSMgZGVmaW5lIF9fU1RSSU5HKHgpCSJ4IgotI2VuZGlmCi0KICNpZm5kZWYgX0FMSUdOX1RFWFQKICMgZGVmaW5lIF9BTElHTl9URVhUIC5hbGlnbiAwCiAjZW5kaWYKIAotLyoKLSAqIGdhcy9hcm0gdXNlcyBAIGFzIGEgc2luZ2xlIGNvbW1lbnQgY2hhcmFjdGVyIGFuZCB0aHVzIGNhbm5vdCBiZSB1c2VkIGhlcmUKLSAqIEluc3RlYWQgaXQgcmVjb2duaXNlZCB0aGUgIyBpbnN0ZWFkIG9mIGFuIEAgc3ltYm9scyBpbiAudHlwZSBkaXJlY3RpdmVzCi0gKiBXZSBkZWZpbmUgYSBjb3VwbGUgb2YgbWFjcm9zIHNvIHRoYXQgYXNzZW1ibHkgY29kZSB3aWxsIG5vdCBiZSBkZXBlbmRhbnQKLSAqIG9uIG9uZSBvciB0aGUgb3RoZXIuCi0gKi8KLSNkZWZpbmUgX0FTTV9UWVBFX0ZVTkNUSU9OCSNmdW5jdGlvbgotI2RlZmluZSBfQVNNX1RZUEVfT0JKRUNUCSNvYmplY3QKLSNkZWZpbmUgX0VOVFJZKHgpIFwKLQkudGV4dDsgX0FMSUdOX1RFWFQ7IC5nbG9ibCB4OyAudHlwZSB4LF9BU01fVFlQRV9GVU5DVElPTjsgeDogLmZuc3RhcnQ7IC5jZmlfc3RhcnRwcm9jOworI3VuZGVmIF9fYmlvbmljX2FzbV9jdXN0b21fZW50cnkKKyN1bmRlZiBfX2Jpb25pY19hc21fY3VzdG9tX2VuZAorI2RlZmluZSBfX2Jpb25pY19hc21fY3VzdG9tX2VudHJ5KGYpIC5mbnN0YXJ0CisjZGVmaW5lIF9fYmlvbmljX2FzbV9jdXN0b21fZW5kKGYpIC5mbmVuZAogCi0jZGVmaW5lIF9BU01fU0laRSh4KQkuc2l6ZSB4LCAuLXg7Ci0KLSNkZWZpbmUgX0VORCh4KSBcCi0JLmZuZW5kOyAuY2ZpX2VuZHByb2M7IFwKLQlfQVNNX1NJWkUoeCkKLQotI2lmZGVmIEdQUk9GCi0jIGlmZGVmIF9fRUxGX18KLSMgIGRlZmluZSBfUFJPRl9QUk9MT0dVRQlcCi0JbW92IGlwLCBscjsgYmwgX19tY291bnQKLSMgZWxzZQotIyAgZGVmaW5lIF9QUk9GX1BST0xPR1VFCVwKLQltb3YgaXAsbHI7IGJsIG1jb3VudAotIyBlbmRpZgotI2Vsc2UKLSMgZGVmaW5lIF9QUk9GX1BST0xPR1VFCi0jZW5kaWYKLQotI2RlZmluZQlFTlRSWSh5KQlfRU5UUlkoX0NfTEFCRUwoeSkpOyBfUFJPRl9QUk9MT0dVRQotI2RlZmluZQlFTlRSWV9OUCh5KQlfRU5UUlkoX0NfTEFCRUwoeSkpCi0jZGVmaW5lCUVORCh5KQkJX0VORChfQ19MQUJFTCh5KSkKLSNkZWZpbmUJQVNFTlRSWSh5KQlfRU5UUlkoX0FTTV9MQUJFTCh5KSk7IF9QUk9GX1BST0xPR1VFCi0jZGVmaW5lCUFTRU5UUllfTlAoeSkJX0VOVFJZKF9BU01fTEFCRUwoeSkpCi0jZGVmaW5lCUFTRU5EKHkpCV9FTkQoX0FTTV9MQUJFTCh5KSkKLQotI2lmZGVmIF9fRUxGX18KLSNkZWZpbmUgRU5UUllfUFJJVkFURSh5KSAgRU5UUlkoeSk7IC5oaWRkZW4gX0NfTEFCRUwoeSkKLSNlbHNlCi0jZGVmaW5lIEVOVFJZX1BSSVZBVEUoeSkgIEVOVFJZKHkpCi0jZW5kaWYKLQotI2RlZmluZQlBU01TVFIJCS5hc2NpegorI3VuZGVmIF9fYmlvbmljX2FzbV9mdW5jdGlvbl90eXBlCisjZGVmaW5lIF9fYmlvbmljX2FzbV9mdW5jdGlvbl90eXBlICNmdW5jdGlvbgogCiAjaWYgZGVmaW5lZChfX0VMRl9fKSAmJiBkZWZpbmVkKFBJQykKLSNpZmRlZiBfX1NURENfXwotI2RlZmluZQlQSUNfU1lNKHgseSkJeCAjIyAoICMjIHkgIyMgKQorI2RlZmluZSBQSUNfU1lNKHgseSkgeCAjIyAoICMjIHkgIyMgKQogI2Vsc2UKLSNkZWZpbmUJUElDX1NZTSh4LHkpCXgvKiovKC8qKi95LyoqLykKKyNkZWZpbmUgUElDX1NZTSh4LHkpIHgKICNlbmRpZgotI2Vsc2UKLSNkZWZpbmUJUElDX1NZTSh4LHkpCXgKLSNlbmRpZgotCi0jaWZkZWYgX19FTEZfXwotI2RlZmluZSBSQ1NJRCh4KQkuc2VjdGlvbiAiLmlkZW50IjsgLmFzY2l6IHgKLSNlbHNlCi0jZGVmaW5lIFJDU0lEKHgpCS50ZXh0OyAuYXNjaXogeAotI2VuZGlmCi0KLSNpZmRlZiBfX0VMRl9fCi0jZGVmaW5lCVdFQUtfQUxJQVMoYWxpYXMsc3ltKQkJCQkJCVwKLQkud2VhayBhbGlhczsJCQkJCQkJXAotCWFsaWFzID0gc3ltCi0jZW5kaWYKLQotI2lmZGVmIF9fU1REQ19fCi0jZGVmaW5lCVdBUk5fUkVGRVJFTkNFUyhzeW0sbXNnKQkJCQkJXAotCS5zdGFicyBtc2cgIyMgLDMwLDAsMCwwIDsJCQkJCVwKLQkuc3RhYnMgX19TVFJJTkcoX0NfTEFCRUwoc3ltKSkgIyMgLDEsMCwwLDAKLSNlbGlmIGRlZmluZWQoX19FTEZfXykKLSNkZWZpbmUJV0FSTl9SRUZFUkVOQ0VTKHN5bSxtc2cpCQkJCQlcCi0JLnN0YWJzIG1zZywzMCwwLDAsMCA7CQkJCQkJXAotCS5zdGFicyBfX1NUUklORyhzeW0pLDEsMCwwLDAKLSNlbHNlCi0jZGVmaW5lCVdBUk5fUkVGRVJFTkNFUyhzeW0sbXNnKQkJCQkJXAotCS5zdGFicyBtc2csMzAsMCwwLDAgOwkJCQkJCVwKLQkuc3RhYnMgX19TVFJJTkcoXy8qKi9zeW0pLDEsMCwwLDAKLSNlbmRpZiAvKiBfX1NURENfXyAqLwogCiAjZW5kaWYgLyogIV9BUk1fQVNNX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9pZWVlLmggYi9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9pZWVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmOWI4OWUuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvaWVlZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qCSRPcGVuQlNEOiBpZWVlLmgsdiAxLjEgMjAwNC8wMi8wMSAwNTowOTo0OSBkcmFobiBFeHAgJAkqLwotLyoJJE5ldEJTRDogaWVlZS5oLHYgMS4yIDIwMDEvMDIvMjEgMTc6NDM6NTAgYmpoMjEgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IHRoZSBDb21wdXRlciBTeXN0ZW1zIEVuZ2luZWVyaW5nIGdyb3VwCi0gKiBhdCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IHVuZGVyIERBUlBBIGNvbnRyYWN0IEJHIDkxLTY2IGFuZAotICogY29udHJpYnV0ZWQgdG8gQmVya2VsZXkuCi0gKgotICogQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKglDYWxpZm9ybmlhLCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLSAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICoJQCgjKWllZWUuaAk4LjEgKEJlcmtlbGV5KSA2LzExLzkzCi0gKi8KLQotLyoKLSAqIGllZWUuaCBkZWZpbmVzIHRoZSBtYWNoaW5lLWRlcGVuZGVudCBsYXlvdXQgb2YgdGhlIG1hY2hpbmUncyBJRUVFCi0gKiBmbG9hdGluZyBwb2ludC4KLSAqLwotCi0vKgotICogRGVmaW5lIHRoZSBudW1iZXIgb2YgYml0cyBpbiBlYWNoIGZyYWN0aW9uIGFuZCBleHBvbmVudC4KLSAqCi0gKgkJICAgICBrCSAgICAgICAgIGsrMQotICogTm90ZSB0aGF0ICAxLjAgeCAyICA9PSAwLjEgeCAyICAgICAgYW5kIHRoYXQgZGVub3JtcyBhcmUgcmVwcmVzZW50ZWQKLSAqCi0gKgkJCQkJICAoLWV4cF9iaWFzKzEpCi0gKiBhcyBmcmFjdGlvbnMgdGhhdCBsb29rIGxpa2UgMC5mZmZmZiB4IDIgICAgICAgICAgICAgLiAgVGhpcyBtZWFucyB0aGF0Ci0gKgotICoJCQkgLTEyNgotICogdGhlIG51bWJlciAwLjEwMDAwIHggMiAgICAsIGZvciBpbnN0YW5jZSwgaXMgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbGl6ZWQKLSAqCi0gKgkJLTEyNwkJCSAgIC0xMjgKLSAqIGZsb2F0IDEuMCB4IDIgICAgLiAgVGh1cywgdG8gcmVwcmVzZW50IDIgICAgLCB3ZSBuZWVkIG9uZSBsZWFkaW5nIHplcm8KLSAqCi0gKgkJCQkgIC0xMjkKLSAqIGluIHRoZSBmcmFjdGlvbjsgdG8gcmVwcmVzZW50IDIgICAgLCB3ZSBuZWVkIHR3bywgYW5kIHNvIG9uLiAgVGhpcwotICoKLSAqCQkJCQkJICAgICAoLWV4cF9iaWFzLWZyYWNiaXRzKzEpCi0gKiBpbXBsaWVzIHRoYXQgdGhlIHNtYWxsZXN0IGRlbm9ybWFsaXplZCBudW1iZXIgaXMgMgotICoKLSAqIGZvciB3aGljaGV2ZXIgZm9ybWF0IHdlIGFyZSB0YWxraW5nIGFib3V0OiBmb3Igc2luZ2xlIHByZWNpc2lvbiwgZm9yCi0gKgotICoJCQkJCQktMTI2CQktMTQ5Ci0gKiBpbnN0YW5jZSwgd2UgZ2V0IC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSB4IDIgICAgLCBvciAxLjAgeCAyICAgICwgYW5kCi0gKgotICogLTE0OSA9PSAtMTI3IC0gMjMgKyAxLgotICovCi0KLS8qCi0gKiBUaGUgQVJNIGhhcyB0d28gc2V0cyBvZiBGUCBkYXRhIGZvcm1hdHMuICBUaGUgRlBBIHN1cHBvcnRzIDMyLWJpdCwgNjQtYml0Ci0gKiBhbmQgOTYtYml0IElFRUUgZm9ybWF0cywgd2l0aCB0aGUgd29yZHMgaW4gYmlnLWVuZGlhbiBvcmRlci4gIFZGUCBzdXBwb3J0cwotICogMzItYmluIGFuZCA2NC1iaXQgSUVFRSBmb3JtYXRzIHdpdGggdGhlIHdvcmRzIGluIHRoZSBDUFUncyBuYXRpdmUgYnl0ZQotICogb3JkZXIuCi0gKgotICogVGhlIEZQQSBhbHNvIGhhcyB0d28gcGFja2VkIGRlY2ltYWwgZm9ybWF0cywgYnV0IHdlIGlnbm9yZSB0aGVtIGhlcmUuCi0gKi8KLQotI2RlZmluZQlTTkdfRVhQQklUUwk4Ci0jZGVmaW5lCVNOR19GUkFDQklUUwkyMwotCi0jZGVmaW5lCURCTF9FWFBCSVRTCTExCi0jZGVmaW5lCURCTF9GUkFDQklUUwk1MgotCi0jaWZuZGVmIF9fVkZQX0ZQX18KLSNkZWZpbmUJRTgwX0VYUEJJVFMJMTUKLSNkZWZpbmUJRTgwX0ZSQUNCSVRTCTY0Ci0KLSNkZWZpbmUJRVhUX0VYUEJJVFMJMTUKLSNkZWZpbmUJRVhUX0ZSQUNCSVRTCTExMgotI2VuZGlmCi0KLXN0cnVjdCBpZWVlX3NpbmdsZSB7Ci0JdV9pbnQJc25nX2ZyYWM6MjM7Ci0JdV9pbnQJc25nX2V4cG9uZW50Ojg7Ci0JdV9pbnQJc25nX3NpZ246MTsKLX07Ci0KLSNpZmRlZiBfX1ZGUF9GUF9fCi1zdHJ1Y3QgaWVlZV9kb3VibGUgewotI2lmZGVmIF9fQVJNRUJfXwotCXVfaW50CWRibF9zaWduOjE7Ci0JdV9pbnQJZGJsX2V4cDoxMTsKLQl1X2ludAlkYmxfZnJhY2g6MjA7Ci0JdV9pbnQJZGJsX2ZyYWNsOwotI2Vsc2UgLyogIV9fQVJNRUJfXyAqLwotCXVfaW50CWRibF9mcmFjbDsKLQl1X2ludAlkYmxfZnJhY2g6MjA7Ci0JdV9pbnQJZGJsX2V4cDoxMTsKLQl1X2ludAlkYmxfc2lnbjoxOwotI2VuZGlmIC8qICFfX0FSTUVCX18gKi8KLX07Ci0jZWxzZSAvKiAhX19WRlBfRlBfXyAqLwotc3RydWN0IGllZWVfZG91YmxlIHsKLQl1X2ludAlkYmxfZnJhY2g6MjA7Ci0JdV9pbnQJZGJsX2V4cDoxMTsKLQl1X2ludAlkYmxfc2lnbjoxOwotCXVfaW50CWRibF9mcmFjbDsKLX07Ci0KLXVuaW9uIGllZWVfZG91YmxlX3UgewotCWRvdWJsZSAgICAgICAgICAgICAgICAgIGRibHVfZDsKLQlzdHJ1Y3QgaWVlZV9kb3VibGUgICAgICBkYmx1X2RibDsKLX07Ci0KLQotc3RydWN0IGllZWVfZTgwIHsKLQl1X2ludAllODBfZXhwOjE1OwotCXVfaW50CWU4MF96ZXJvOjE2OwotCXVfaW50CWU4MF9zaWduOjE7Ci0JdV9pbnQJZTgwX2ZyYWNoOjMxOwotCXVfaW50CWU4MF9qOjE7Ci0JdV9pbnQJZTgwX2ZyYWNsOwotfTsKLQotc3RydWN0IGllZWVfZXh0IHsKLQl1X2ludAlleHRfZnJhY2g6MTY7Ci0JdV9pbnQJZXh0X2V4cDoxNTsKLQl1X2ludAlleHRfc2lnbjoxOwotCXVfaW50CWV4dF9mcmFjaG07Ci0JdV9pbnQJZXh0X2ZyYWNsbTsKLQl1X2ludAlleHRfZnJhY2w7Ci19OwotI2VuZGlmIC8qICFfX1ZGUF9GUF9fICovCi0KLS8qCi0gKiBGbG9hdHMgd2hvc2UgZXhwb25lbnQgaXMgaW4gWzEuLklORk5BTikgKG9mIHdoYXRldmVyIHR5cGUpIGFyZQotICogYG5vcm1hbCcuICBGbG9hdHMgd2hvc2UgZXhwb25lbnQgaXMgSU5GTkFOIGFyZSBlaXRoZXIgSW5mIG9yIE5hTi4KLSAqIEZsb2F0cyB3aG9zZSBleHBvbmVudCBpcyB6ZXJvIGFyZSBlaXRoZXIgemVybyAoaWZmIGFsbCBmcmFjdGlvbgotICogYml0cyBhcmUgemVybykgb3Igc3Vibm9ybWFsIHZhbHVlcy4KLSAqCi0gKiBBIE5hTiBpcyBhIGBzaWduYWxsaW5nIE5hTicgaWYgaXRzIFFVSUVUTkFOIGJpdCBpcyBjbGVhciBpbiBpdHMKLSAqIGhpZ2ggZnJhY3Rpb247IGlmIHRoZSBiaXQgaXMgc2V0LCBpdCBpcyBhIGBxdWlldCBOYU4nLgotICovCi0jZGVmaW5lCVNOR19FWFBfSU5GTkFOCTI1NQotI2RlZmluZQlEQkxfRVhQX0lORk5BTgkyMDQ3Ci0jaWZuZGVmIF9fVkZQX0ZQX18KLSNkZWZpbmUJRTgwX0VYUF9JTkZOQU4JMzI3NjcKLSNkZWZpbmUJRVhUX0VYUF9JTkZOQU4JMzI3NjcKLSNlbmRpZiAvKiAhX19WRlBfRlBfXyAqLwotCi0jaWYgMAotI2RlZmluZQlTTkdfUVVJRVROQU4JKDEgPDwgMjIpCi0jZGVmaW5lCURCTF9RVUlFVE5BTgkoMSA8PCAxOSkKLSNpZm5kZWYgX19WRlBfRlBfXwotI2RlZmluZQlFODBfUVVJRVROQU4JKDEgPDwgMTUpCi0jZGVmaW5lCUVYVF9RVUlFVE5BTgkoMSA8PCAxNSkKLSNlbmRpZiAvKiAhX19WRlBfRlBfXyAqLwotI2VuZGlmCi0KLS8qCi0gKiBFeHBvbmVudCBiaWFzZXMuCi0gKi8KLSNkZWZpbmUJU05HX0VYUF9CSUFTCTEyNwotI2RlZmluZQlEQkxfRVhQX0JJQVMJMTAyMwotI2lmbmRlZiBfX1ZGUF9GUF9fCi0jZGVmaW5lCUU4MF9FWFBfQklBUwkxNjM4MwotI2RlZmluZQlFWFRfRVhQX0JJQVMJMTYzODMKLSNlbmRpZiAvKiAhX19WRlBfRlBfXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvbGltaXRzLmggYi9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjljMDRmYS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCSRPcGVuQlNEOiBsaW1pdHMuaCx2IDEuMyAyMDA2LzAxLzA2IDIyOjQ4OjQ2IG1pbGxlcnQgRXhwICQJKi8KLS8qCSROZXRCU0Q6IGxpbWl0cy5oLHYgMS40IDIwMDMvMDQvMjggMjM6MTY6MTggYmpoMjEgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICoJZnJvbTogQCgjKWxpbWl0cy5oCTcuMiAoQmVya2VsZXkpIDYvMjgvOTAKLSAqLwotCi0jaWZuZGVmCV9BUk0zMl9MSU1JVFNfSF8KLSNkZWZpbmUJX0FSTTMyX0xJTUlUU19IXwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0KLSNkZWZpbmUJTUJfTEVOX01BWAkxCQkvKiBubyBtdWx0aWJ5dGUgY2hhcmFjdGVycyAqLwotCi0jaWZuZGVmCVNJWkVfTUFYCi0jZGVmaW5lCVNJWkVfTUFYCVVJTlRfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYSBzaXplX3QgKi8KLSNlbmRpZgotI2lmbmRlZiBTU0laRV9NQVgKLSNkZWZpbmUJU1NJWkVfTUFYCUlOVF9NQVgJCS8qIG1heCB2YWx1ZSBmb3IgYSBzc2l6ZV90ICovCi0jZW5kaWYKLQotI2lmIF9fQlNEX1ZJU0lCTEUKLSNkZWZpbmUJU0laRV9UX01BWAlVSU5UX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgc2l6ZV90IChoaXN0b3JpYykgKi8KLQotI2RlZmluZQlVUVVBRF9NQVgJMHhmZmZmZmZmZmZmZmZmZmZmVUxMCQkvKiBtYXggdW5zaWduZWQgcXVhZCAqLwotI2RlZmluZQlRVUFEX01BWAkweDdmZmZmZmZmZmZmZmZmZmZMTAkJLyogbWF4IHNpZ25lZCBxdWFkICovCi0jZGVmaW5lCVFVQURfTUlOCSgtMHg3ZmZmZmZmZmZmZmZmZmZmTEwtMSkJLyogbWluIHNpZ25lZCBxdWFkICovCi0KLSNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCi0KLSNkZWZpbmUgTE9OR0xPTkdfQklUICAgIDY0Ci0jZGVmaW5lIExPTkdMT05HX01JTiAgICAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTC0xKQotI2RlZmluZSBMT05HTE9OR19NQVggICAgOTIyMzM3MjAzNjg1NDc3NTgwN0xMCi0jZGVmaW5lIFVMT05HTE9OR19NQVggICAxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTAotCi0jZW5kaWYJLyogX0FSTTMyX0xJTUlUU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvX19zdHJjYXRfY2hrLlMgYi9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9fX3N0cmNhdF9jaGsuUwppbmRleCBhNWQwNmYzLi4zNGJlY2RiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9fX3N0cmNhdF9jaGsuUworKysgYi9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9fX3N0cmNhdF9jaGsuUwpAQCAtMjYsOCArMjYsOCBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSAicHJpdmF0ZS9saWJjX2V2ZW50cy5oIgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvbGliY19ldmVudHMuaD4KIAogICAgIC5zeW50YXggdW5pZmllZAogCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9fX3N0cmNweV9jaGsuUyBiL2xpYmMvYXJjaC1hcm0va3JhaXQvYmlvbmljL19fc3RyY3B5X2Noay5TCmluZGV4IDk1YWFmNGYuLmMzZTNlMTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0va3JhaXQvYmlvbmljL19fc3RyY3B5X2Noay5TCisrKyBiL2xpYmMvYXJjaC1hcm0va3JhaXQvYmlvbmljL19fc3RyY3B5X2Noay5TCkBAIC0yNiw4ICsyNiw4IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlICJwcml2YXRlL2xpYmNfZXZlbnRzLmgiCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9saWJjX2V2ZW50cy5oPgogCiAgICAgLnN5bnRheCB1bmlmaWVkCiAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0va3JhaXQvYmlvbmljL21lbWNweS5TIGIvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvbWVtY3B5LlMKaW5kZXggNTQ0MDVmYS4uMGI3YjI3NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvbWVtY3B5LlMKKysrIGIvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvbWVtY3B5LlMKQEAgLTI4LDggKzI4LDggQEAKIAogLyogQXNzdW1lcyBuZW9uIGluc3RydWN0aW9ucyBhbmQgYSBjYWNoZSBsaW5lIHNpemUgb2YgMzIgYnl0ZXMuICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgInByaXZhdGUvbGliY19ldmVudHMuaCIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2xpYmNfZXZlbnRzLmg+CiAKIC8qCiAgKiBUaGlzIGNvZGUgYXNzdW1lcyBpdCBpcyBydW5uaW5nIG9uIGEgcHJvY2Vzc29yIHRoYXQgc3VwcG9ydHMgYWxsIGFybSB2NwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvbWVtc2V0LlMgYi9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9tZW1zZXQuUwppbmRleCAxNTYzMzI3Li41ZDE5NDNiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9tZW1zZXQuUworKysgYi9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9tZW1zZXQuUwpAQCAtMjcsOCArMjcsOCBAQAogICovCiAKICNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSAicHJpdmF0ZS9saWJjX2V2ZW50cy5oIgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvbGliY19ldmVudHMuaD4KIAogLyoKICAqIFRoaXMgY29kZSBhc3N1bWVzIGl0IGlzIHJ1bm5pbmcgb24gYSBwcm9jZXNzb3IgdGhhdCBzdXBwb3J0cyBhbGwgYXJtIHY3CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9zdHJjbXAuUyBiL2xpYmMvYXJjaC1hcm0va3JhaXQvYmlvbmljL3N0cmNtcC5TCmluZGV4IGY3MzVmYjUuLmVhY2I4MmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0va3JhaXQvYmlvbmljL3N0cmNtcC5TCisrKyBiL2xpYmMvYXJjaC1hcm0va3JhaXQvYmlvbmljL3N0cmNtcC5TCkBAIC0yNyw3ICsyNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogI2lmZGVmIF9fQVJNRUJfXwogI2RlZmluZSBTMkxPTUVNIGxzbApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9rcmFpdC9rcmFpdC5tayBiL2xpYmMvYXJjaC1hcm0va3JhaXQva3JhaXQubWsKaW5kZXggMjlhYjc0My4uNjMxYWI2OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9rcmFpdC9rcmFpdC5taworKysgYi9saWJjL2FyY2gtYXJtL2tyYWl0L2tyYWl0Lm1rCkBAIC0xLDExICsxLDEzIEBACi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLE1FTUNQWSxhcmNoLWFybS9rcmFpdC9iaW9uaWMvbWVtY3B5LlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLE1FTVNFVCxhcmNoLWFybS9rcmFpdC9iaW9uaWMvbWVtc2V0LlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLFNUUkNNUCxhcmNoLWFybS9rcmFpdC9iaW9uaWMvc3RyY21wLlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLF9fU1RSQ0FUX0NISyxhcmNoLWFybS9rcmFpdC9iaW9uaWMvX19zdHJjYXRfY2hrLlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLF9fU1RSQ1BZX0NISyxhcmNoLWFybS9rcmFpdC9iaW9uaWMvX19zdHJjcHlfY2hrLlMpCi0jIFVzZSBjb3J0ZXgtYTE1IHZlcnNpb25zIG9mIHN0cmNhdC9zdHJjcHkvc3RybGVuLgotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxTVFJDQVQsYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY2F0LlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLFNUUkNQWSxhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjcHkuUykKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsU1RSTEVOLGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmxlbi5TKQorbGliY19iaW9uaWNfc3JjX2ZpbGVzX2FybSArPSBcCisgICAgYXJjaC1hcm0va3JhaXQvYmlvbmljL21lbWNweS5TIFwKKyAgICBhcmNoLWFybS9rcmFpdC9iaW9uaWMvbWVtc2V0LlMgXAorICAgIGFyY2gtYXJtL2tyYWl0L2Jpb25pYy9zdHJjbXAuUyBcCisgICAgYXJjaC1hcm0va3JhaXQvYmlvbmljL19fc3RyY2F0X2Noay5TIFwKKyAgICBhcmNoLWFybS9rcmFpdC9iaW9uaWMvX19zdHJjcHlfY2hrLlMgXAogCi1pbmNsdWRlIGJpb25pYy9saWJjL2FyY2gtYXJtL2dlbmVyaWMvZ2VuZXJpYy5taworIyBVc2UgY29ydGV4LWExNSB2ZXJzaW9ucyBvZiBzdHJjYXQvc3RyY3B5L3N0cmxlbiBhbmQgc3RhbmRhcmQgbWVtbW92ZQorbGliY19iaW9uaWNfc3JjX2ZpbGVzX2FybSArPSBcCisgICAgYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY2F0LlMgXAorICAgIGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNweS5TIFwKKyAgICBhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJsZW4uUyBcCisgICAgYmlvbmljL21lbW1vdmUuYyBcCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzLm1rIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNlNmE5Ny4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4KLXN5c2NhbGxfc3JjIDo9Ci1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX2Jyay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX2Vwb2xsX3B3YWl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fZXhpdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX2ZjbnRsNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19mc3RhdGZzNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRjcHUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRjd2QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX2lvY3RsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fbGxzZWVrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fbW1hcDIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19vcGVuYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19wcG9sbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3BzZWxlY3Q2LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fcHRyYWNlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fcmVib290LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fc2V0X3Rscy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3NpZ2FjdGlvbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3N0YXRmczY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fc3lzbG9nLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fd2FpdGlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19leGl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2FjY2VwdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9hY2N0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2JpbmQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvY2FjaGVmbHVzaC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jYXBnZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvY2Fwc2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2NoZGlyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Nocm9vdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jbG9ja19nZXRyZXMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jbG9zZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jb25uZWN0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZHVwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2R1cDMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfY3JlYXRlMS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9lcG9sbF9jdGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZXZlbnRmZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9leGVjdmUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZmFjY2Vzc2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZjaGRpci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mY2htb2QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZmNobW9kYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZmNob3duLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bmF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZkYXRhc3luYy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mZ2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZmxpc3R4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mbG9jay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZnNldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0YXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZnN5bmMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZnRydW5jYXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Z0cnVuY2F0ZTY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Z1dGV4LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldGRlbnRzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldGVnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZXVpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldGl0aW1lci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRwZWVybmFtZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRwZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHBpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRwcGlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHJlc2dpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRyZXN1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmxpbWl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHJ1c2FnZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRzaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja25hbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja29wdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXR0aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHVpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9pbml0X21vZHVsZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X2luaXQxLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvaW9wcmlvX2dldC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9pb3ByaW9fc2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2tpbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMva2xvZ2N0bC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9sZ2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbGlua2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2xpc3Rlbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9saXN0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbGxpc3R4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9scmVtb3ZleGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbHNlZWsuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbHNldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL21hZHZpc2UuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbWluY29yZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9ta2RpcmF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL21rbm9kYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbWxvY2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbWxvY2thbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbW91bnQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbXByb3RlY3QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbXJlbWFwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL21zeW5jLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL211bmxvY2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbXVubG9ja2FsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9tdW5tYXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbmFub3NsZWVwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9wZXJzb25hbGl0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9waXBlMi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9wcmN0bC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9wcmVhZDY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3BybGltaXQ2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9wd3JpdGU2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9yZWFkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JlYWRhaGVhZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9yZWFkbGlua2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JlYWR2LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JlY3Zmcm9tLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JlY3Ztc2cuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcmVtb3ZleGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcmVuYW1lYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NlbmRmaWxlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NlbmRmaWxlNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2VuZG1zZy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZW5kdG8uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0Z2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldGdyb3Vwcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRpdGltZXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0bnMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0cGdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRwcmlvcml0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRyZWdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRyZXNnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVzdWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldHJldWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldHJsaW1pdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRzaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0c29ja29wdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0dWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NodXRkb3duLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NpZ25hbGZkNC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zb2NrZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0cGFpci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zd2Fwb2ZmLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3N3YXBvbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zeW1saW5rYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc3luYy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zeXNpbmZvLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3Rna2lsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3RpbWVzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3RraWxsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3RydW5jYXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3RydW5jYXRlNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdW1hc2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdW1vdW50Mi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy91bmFtZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy91bmxpbmthdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy91bnNoYXJlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3V0aW1lbnNhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy92Zm9yay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy93YWl0NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy93cml0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy93cml0ZXYuUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2FjY2VwdDQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19hY2NlcHQ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNhNTY5OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19hY2NlcHQ0LlMKQEAgLTAsMCArMSwxNCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2FjY2VwdDQpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl9hY2NlcHQ0CisgICAgc3dpICAgICAjMAorICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKK0VORChfX2FjY2VwdDQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fYXJtX2ZhZHZpc2U2NF82NC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2FybV9mYWR2aXNlNjRfNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjFjNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2FybV9mYWR2aXNlNjRfNjQuUwpAQCAtMCwwICsxLDIyIEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fYXJtX2ZhZHZpc2U2NF82NCkKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfcmVsX29mZnNldCByNCwgMAorICAgIC5jZmlfcmVsX29mZnNldCByNSwgNAorICAgIC5jZmlfcmVsX29mZnNldCByNiwgOAorICAgIC5jZmlfcmVsX29mZnNldCByNywgMTIKKyAgICBsZG1mZCAgIGlwLCB7cjQsIHI1LCByNn0KKyAgICBsZHIgICAgIHI3LCA9X19OUl9hcm1fZmFkdmlzZTY0XzY0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKK0VORChfX2FybV9mYWR2aXNlNjRfNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fYnJrLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fYnJrLlMKaW5kZXggMzFkZTBkMi4uYmUzMDRkYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2Jyay5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19icmsuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fYnJrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2Nvbm5lY3QuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19jb25uZWN0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJhOTk3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19jb25uZWN0LlMKQEAgLTAsMCArMSwxNCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2Nvbm5lY3QpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl9jb25uZWN0CisgICAgc3dpICAgICAjMAorICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKK0VORChfX2Nvbm5lY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCmluZGV4IGE5MDI1NGEuLjM2NDJlZTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCkBAIC00LDcgKzQsNiBAQAogCiBFTlRSWShfX2Vwb2xsX3B3YWl0KQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19lcG9sbF9wd2FpdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19leGl0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZXhpdC5TCmluZGV4IGM1MzRiYjAuLjZlYmQ1YjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19leGl0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2V4aXQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fZXhpdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19mY250bDY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZmNudGw2NC5TCmluZGV4IDIxMzJjYjcuLjIyOWM1YzYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19mY250bDY0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2ZjbnRsNjQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fZmNudGw2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19mc3RhdGZzNjQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19mc3RhdGZzNjQuUwppbmRleCAxODk0MmJjLi45YzBjNDM5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZnN0YXRmczY0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2ZzdGF0ZnM2NC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19mc3RhdGZzNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0Y3B1LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0Y3B1LlMKaW5kZXggMWFlYTUwYS4uZDUyM2Q4ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldGNwdS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRjcHUuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fZ2V0Y3B1KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldGN3ZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldGN3ZC5TCmluZGV4IDFjMmFjNmMuLjRmZjY2NjcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRjd2QuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0Y3dkLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfX2dldGN3ZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRkZW50czY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0ZGVudHM2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYzNiZmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0ZGVudHM2NC5TCkBAIC0wLDAgKzEsMTQgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19nZXRkZW50czY0KQorICAgIG1vdiAgICAgaXAsIHI3CisgICAgbGRyICAgICByNywgPV9fTlJfZ2V0ZGVudHM2NAorICAgIHN3aSAgICAgIzAKKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCitFTkQoX19nZXRkZW50czY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldHBpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldHBpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYjE5MmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0cGlkLlMKQEAgLTAsMCArMSwxNCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2dldHBpZCkKKyAgICBtb3YgICAgIGlwLCByNworICAgIGxkciAgICAgcjcsID1fX05SX2dldHBpZAorICAgIHN3aSAgICAgIzAKKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCitFTkQoX19nZXRwaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCmluZGV4IDkwY2NhZWEuLmU2MzdkNmYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19nZXRwcmlvcml0eSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19pb2N0bC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2lvY3RsLlMKaW5kZXggM2Y4MTZkYi4uZmNkMTE1NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2lvY3RsLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2lvY3RsLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfX2lvY3RsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2xsc2Vlay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2xsc2Vlay5TCmluZGV4IDFhM2U0YzcuLjNjZmYzMTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19sbHNlZWsuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fbGxzZWVrLlMKQEAgLTQsNyArNCw2IEBACiAKIEVOVFJZKF9fbGxzZWVrKQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19sbHNlZWspCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fbW1hcDIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19tbWFwMi5TCmluZGV4IDdkOTg5ZTkuLmYxMWU0NjcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19tbWFwMi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19tbWFwMi5TCkBAIC00LDcgKzQsNiBAQAogCiBFTlRSWShfX21tYXAyKQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19tbWFwMikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19vcGVuYXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19vcGVuYXQuUwppbmRleCA3YTM4ZGMzLi45Yjc3NGRiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fb3BlbmF0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX29wZW5hdC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19vcGVuYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcHBvbGwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19wcG9sbC5TCmluZGV4IDdjZGJlNTEuLjAyZGU4YTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19wcG9sbC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19wcG9sbC5TCkBAIC00LDcgKzQsNiBAQAogCiBFTlRSWShfX3Bwb2xsKQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19wcG9sbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19wc2VsZWN0Ni5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3BzZWxlY3Q2LlMKaW5kZXggNGM1YjUxMy4uOGYzMWUxYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3BzZWxlY3Q2LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3BzZWxlY3Q2LlMKQEAgLTQsNyArNCw2IEBACiAKIEVOVFJZKF9fcHNlbGVjdDYpCiAgICAgbW92ICAgICBpcCwgc3AKLSAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KICAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKICAgICAuY2ZpX3JlbF9vZmZzZXQgcjQsIDAKQEAgLTE5LDUgKzE4LDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfX3BzZWxlY3Q2KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3B0cmFjZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3B0cmFjZS5TCmluZGV4IDRlNDFkOWQuLjk3NWFiMGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19wdHJhY2UuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcHRyYWNlLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfX3B0cmFjZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19yZWJvb3QuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19yZWJvb3QuUwppbmRleCAxOGUyOWE3Li4wM2Y4Yzg5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcmVib290LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3JlYm9vdC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19yZWJvb3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKaW5kZXggOTc0YzBlMi4uMmMyMTAxMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fcnRfc2lnYWN0aW9uKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMKaW5kZXggNGEwZjVkNy4uNmEzMmU1MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19ydF9zaWdwZW5kaW5nKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUwppbmRleCAxOWFiZGMxLi4xMzZkYzc5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fcnRfc2lncHJvY21hc2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3N1c3BlbmQuUwppbmRleCBhMGFmOTA1Li4yY2VmNGE0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfX3J0X3NpZ3N1c3BlbmQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKaW5kZXggMGJhN2NlMi4uY2I0M2FkMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fcnRfc2lndGltZWR3YWl0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUwppbmRleCBlOTc3Y2ZiLi42NjEzZWE1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fc2NoZWRfZ2V0YWZmaW5pdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMKaW5kZXggYjRiNDJlNy4uZDM1NThmNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fc2V0X3RpZF9hZGRyZXNzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NldF90bHMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zZXRfdGxzLlMKaW5kZXggOTRjN2NmNC4uNGQ1ZDk2MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NldF90bHMuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2V0X3Rscy5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19zZXRfdGxzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NpZ2FjdGlvbi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NpZ2FjdGlvbi5TCmluZGV4IDdlMmUwN2UuLjYwMDU5M2QgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zaWdhY3Rpb24uUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2lnYWN0aW9uLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfX3NpZ2FjdGlvbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zaWduYWxmZDQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zaWduYWxmZDQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzBhNzFmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NpZ25hbGZkNC5TCkBAIC0wLDAgKzEsMTQgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19zaWduYWxmZDQpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl9zaWduYWxmZDQKKyAgICBzd2kgICAgICMwCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAorRU5EKF9fc2lnbmFsZmQ0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NvY2tldC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NvY2tldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZmUwY2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc29ja2V0LlMKQEAgLTAsMCArMSwxNCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3NvY2tldCkKKyAgICBtb3YgICAgIGlwLCByNworICAgIGxkciAgICAgcjcsID1fX05SX3NvY2tldAorICAgIHN3aSAgICAgIzAKKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCitFTkQoX19zb2NrZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc3RhdGZzNjQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zdGF0ZnM2NC5TCmluZGV4IDI1NjM1NjIuLmVjNDMyMTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zdGF0ZnM2NC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zdGF0ZnM2NC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19zdGF0ZnM2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zeXNsb2cuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zeXNsb2cuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZlNzYxYS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc3lzbG9nLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKF9fc3lzbG9nKQotICAgIG1vdiAgICAgaXAsIHI3Ci0gICAgbGRyICAgICByNywgPV9fTlJfc3lzbG9nCi0gICAgc3dpICAgICAjMAotICAgIG1vdiAgICAgcjcsIGlwCi0gICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGJ4bHMgICAgbHIKLSAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KLUVORChfX3N5c2xvZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUwppbmRleCA5Yjc1NzQ5Li4yZTRjNjM0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX190aW1lcl9jcmVhdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKaW5kZXggZGIzMmIzYi4uMjM3MDI0YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fdGltZXJfZGVsZXRlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKaW5kZXggNTcwMWIxMi4uZjI5ZDViMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX190aW1lcl9nZXRvdmVycnVuKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKaW5kZXggZTlhNGZmOS4uZTZkYzJlZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX190aW1lcl9nZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKaW5kZXggMmYxYWIxOS4uNGFlYTI3OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX190aW1lcl9zZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3dhaXRpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3dhaXRpZC5TCmluZGV4IGFkOWFkMTYuLmY0ZGZhNTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX193YWl0aWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fd2FpdGlkLlMKQEAgLTQsNyArNCw2IEBACiAKIEVOVFJZKF9fd2FpdGlkKQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX193YWl0aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19leGl0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19leGl0LlMKaW5kZXggMWE2YjM1ZC4uMzI4YTVjZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fZXhpdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX2V4aXQuUwpAQCAtMTAsNSArMTAsOCBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9leGl0KQorCisgICAgLmdsb2JsIF9FeGl0CisgICAgLmVxdSBfRXhpdCwgX2V4aXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYWNjZXB0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY2VwdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmE1MWY1Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYWNjZXB0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGFjY2VwdCkKLSAgICBtb3YgICAgIGlwLCByNwotICAgIGxkciAgICAgcjcsID1fX05SX2FjY2VwdAotICAgIHN3aSAgICAgIzAKLSAgICBtb3YgICAgIHI3LCBpcAotICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBieGxzICAgIGxyCi0gICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCi1FTkQoYWNjZXB0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9hY2N0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY3QuUwppbmRleCBlMzYwYzVhLi5kYmM1ZDU4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY3QuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY3QuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGFjY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2JpbmQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYmluZC5TCmluZGV4IGUwN2RkNzcuLmM5MDE0MTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYmluZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYmluZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoYmluZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2FjaGVmbHVzaC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYWNoZWZsdXNoLlMKaW5kZXggYWMyYTIxOC4uNzZmNDYyMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYWNoZWZsdXNoLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYWNoZWZsdXNoLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChjYWNoZWZsdXNoKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYXBnZXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2FwZ2V0LlMKaW5kZXggYjkxMjgzMC4uNTlhNWEzYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYXBnZXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NhcGdldC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoY2FwZ2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYXBzZXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2Fwc2V0LlMKaW5kZXggY2VmNjhjNS4uYWYyODRhYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYXBzZXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NhcHNldC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoY2Fwc2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jaGRpci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jaGRpci5TCmluZGV4IGVhOTNmZDYuLjI1ZjI3YmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hkaXIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NoZGlyLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChjaGRpcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hyb290LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nocm9vdC5TCmluZGV4IGIxMTk5ZTYuLjZmODI5YTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hyb290LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jaHJvb3QuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGNocm9vdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCmluZGV4IGYxZTdmYTIuLjQ4ZmEwN2MgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19nZXRyZXMuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGNsb2NrX2dldHJlcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKaW5kZXggOWIzZTEzMi4uMzE3NDgxZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChjbG9ja19nZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKaW5kZXggZmRhNzM5NC4uODAyOTViYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoY2xvY2tfbmFub3NsZWVwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwppbmRleCA1YTAwNTllLi5iZjU0NzAyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGNsb2NrX3NldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb3NlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb3NlLlMKaW5kZXggMDBjOGY4NS4uZWMwNTQ0NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9zZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvc2UuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGNsb3NlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jb25uZWN0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nvbm5lY3QuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdhNTE4OC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nvbm5lY3QuUworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoY29ubmVjdCkKLSAgICBtb3YgICAgIGlwLCByNwotICAgIGxkciAgICAgcjcsID1fX05SX2Nvbm5lY3QKLSAgICBzd2kgICAgICMwCi0gICAgbW92ICAgICByNywgaXAKLSAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgYnhscyAgICBscgotICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubwotRU5EKGNvbm5lY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCmluZGV4IGEyNmI0NzguLjU3NTgwYzkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZGVsZXRlX21vZHVsZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZHVwLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2R1cC5TCmluZGV4IGIxODU5ZDkuLjJjZDY5ZDcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZHVwLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kdXAuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGR1cCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZHVwMy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kdXAzLlMKaW5kZXggM2U0N2MxMC4uNDYxM2Q2MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kdXAzLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kdXAzLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChkdXAzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUwppbmRleCAyZWViYzBjLi4xMDhjMjRmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGVwb2xsX2NyZWF0ZTEpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2N0bC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9lcG9sbF9jdGwuUwppbmRleCA3YTFjYzQxLi40NzNhZjZhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2N0bC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfY3RsLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChlcG9sbF9jdGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2V2ZW50ZmQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXZlbnRmZC5TCmluZGV4IDA4MjcyZDMuLmNhNmJjZWUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXZlbnRmZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXZlbnRmZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZXZlbnRmZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXhlY3ZlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2V4ZWN2ZS5TCmluZGV4IDM2MWVjNjMuLjNlY2E4MTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXhlY3ZlLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9leGVjdmUuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGV4ZWN2ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmFjY2Vzc2F0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZhY2Nlc3NhdC5TCmluZGV4IGM4MmIyY2UuLmExZGY1YzAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmFjY2Vzc2F0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mYWNjZXNzYXQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGZhY2Nlc3NhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmFsbG9jYXRlNjQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmFsbG9jYXRlNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmZkNWUzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mYWxsb2NhdGU2NC5TCkBAIC0wLDAgKzEsMjIgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZmFsbG9jYXRlNjQpCisgICAgbW92ICAgICBpcCwgc3AKKyAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjQsIDAKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjUsIDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjYsIDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjcsIDEyCisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfZmFsbG9jYXRlCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKK0VORChmYWxsb2NhdGU2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNoZGlyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaGRpci5TCmluZGV4IDFhN2ViNTEuLjcwNWFkMzIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNoZGlyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hkaXIuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGZjaGRpcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNobW9kLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG1vZC5TCmluZGV4IDQyZGM1YjguLjU2NzVmMGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNobW9kLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2htb2QuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGZjaG1vZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNobW9kYXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNobW9kYXQuUwppbmRleCBlMDNkYThjLi4zZjdlMGVlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG1vZGF0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2htb2RhdC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZmNobW9kYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hvd24uUwppbmRleCBjMmMzOTgyLi40NWFkOWJmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNob3duLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChmY2hvd24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bmF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bmF0LlMKaW5kZXggNDM5N2EyMi4uMmFhYzBmZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hvd25hdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNob3duYXQuUwpAQCAtNCw3ICs0LDYgQEAKIAogRU5UUlkoZmNob3duYXQpCiAgICAgbW92ICAgICBpcCwgc3AKLSAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KICAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKICAgICAuY2ZpX3JlbF9vZmZzZXQgcjQsIDAKQEAgLTE5LDUgKzE4LDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChmY2hvd25hdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmRhdGFzeW5jLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZkYXRhc3luYy5TCmluZGV4IDljODMxN2QuLjdmZWZkMjIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmRhdGFzeW5jLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mZGF0YXN5bmMuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGZkYXRhc3luYykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmdldHhhdHRyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZnZXR4YXR0ci5TCmluZGV4IGJlZjUzNmIuLjNmMWU1ZmMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmdldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mZ2V0eGF0dHIuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGZnZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmxpc3R4YXR0ci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mbGlzdHhhdHRyLlMKaW5kZXggZDlhMzBiYi4uZWUwOTI5NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mbGlzdHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mbGlzdHhhdHRyLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChmbGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mbG9jay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mbG9jay5TCmluZGV4IDAxNmU4MjQuLmM5NDZmZTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmxvY2suUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Zsb2NrLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChmbG9jaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TCmluZGV4IGM3ZmYwMzQuLmY0ZTk1MGIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGZyZW1vdmV4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnNldHhhdHRyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzZXR4YXR0ci5TCmluZGV4IDM5Yjk3ZjkuLjBlMzNhZDIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnNldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc2V0eGF0dHIuUwpAQCAtNCw3ICs0LDYgQEAKIAogRU5UUlkoZnNldHhhdHRyKQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZnNldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjA4ZDA4Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXQuUworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZnN0YXQpCi0gICAgbW92ICAgICBpcCwgcjcKLSAgICBsZHIgICAgIHI3LCA9X19OUl9mc3RhdDY0Ci0gICAgc3dpICAgICAjMAotICAgIG1vdiAgICAgcjcsIGlwCi0gICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGJ4bHMgICAgbHIKLSAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KLUVORChmc3RhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXQ2NC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwZTdlZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXQ2NC5TCkBAIC0wLDAgKzEsMTcgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZnN0YXQ2NCkKKyAgICBtb3YgICAgIGlwLCByNworICAgIGxkciAgICAgcjcsID1fX05SX2ZzdGF0NjQKKyAgICBzd2kgICAgICMwCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAorRU5EKGZzdGF0NjQpCisKKyAgICAuZ2xvYmwgZnN0YXQKKyAgICAuZXF1IGZzdGF0LCBmc3RhdDY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0YXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXRhdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2M5YmIwLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXRhdC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShmc3RhdGF0KQotICAgIG1vdiAgICAgaXAsIHI3Ci0gICAgbGRyICAgICByNywgPV9fTlJfZnN0YXRhdDY0Ci0gICAgc3dpICAgICAjMAotICAgIG1vdiAgICAgcjcsIGlwCi0gICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGJ4bHMgICAgbHIKLSAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KLUVORChmc3RhdGF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdGF0NjQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXRhdDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1NmMzNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXRhdDY0LlMKQEAgLTAsMCArMSwxNyBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmc3RhdGF0NjQpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl9mc3RhdGF0NjQKKyAgICBzd2kgICAgICMwCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAorRU5EKGZzdGF0YXQ2NCkKKworICAgIC5nbG9ibCBmc3RhdGF0CisgICAgLmVxdSBmc3RhdGF0LCBmc3RhdGF0NjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN5bmMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN5bmMuUwppbmRleCA2YjdjNGE4Li4xZGZmZjA1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzeW5jLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3luYy5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZnN5bmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Z0cnVuY2F0ZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdHJ1bmNhdGUuUwppbmRleCA0YTNkNTZjLi4xYmZlMmYzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Z0cnVuY2F0ZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnRydW5jYXRlLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChmdHJ1bmNhdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Z0cnVuY2F0ZTY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Z0cnVuY2F0ZTY0LlMKaW5kZXggOTEwY2E2OC4uYWMwY2FhOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdHJ1bmNhdGU2NC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnRydW5jYXRlNjQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGZ0cnVuY2F0ZTY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdXRleC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdXRleC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWU2ZmE2Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnV0ZXguUworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZnV0ZXgpCi0gICAgbW92ICAgICBpcCwgc3AKLSAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKLSAgICAuY2ZpX3JlbF9vZmZzZXQgcjQsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgcjUsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgcjYsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgcjcsIDEyCi0gICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9Ci0gICAgbGRyICAgICByNywgPV9fTlJfZnV0ZXgKLSAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDAKLSAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgYnhscyAgICBscgotICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubwotRU5EKGZ1dGV4KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRkZW50cy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRkZW50cy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjBlODFhLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZGVudHMuUworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZ2V0ZGVudHMpCi0gICAgbW92ICAgICBpcCwgcjcKLSAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRkZW50czY0Ci0gICAgc3dpICAgICAjMAotICAgIG1vdiAgICAgcjcsIGlwCi0gICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGJ4bHMgICAgbHIKLSAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KLUVORChnZXRkZW50cykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZWdpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRlZ2lkLlMKaW5kZXggNmFmY2E5MC4uYWZhOWNjOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRlZ2lkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRlZ2lkLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChnZXRlZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRldWlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGV1aWQuUwppbmRleCA3OGU1Y2Y0Li4xMGM4YTI1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGV1aWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGV1aWQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGdldGV1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGdpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRnaWQuUwppbmRleCBjMmQzNTM4Li44NzcyNzYyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGdpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0Z2lkLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChnZXRnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGdyb3Vwcy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRncm91cHMuUwppbmRleCBlNmI4ZTEwLi4zNjYyOTliIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGdyb3Vwcy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChnZXRncm91cHMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGl0aW1lci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRpdGltZXIuUwppbmRleCAzZGNlNzA3Li44MGZiMGYyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGl0aW1lci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0aXRpbWVyLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChnZXRpdGltZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBlZXJuYW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKaW5kZXggMDYxMzIzMS4uMjVmMDAyNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwZWVybmFtZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGdldHBlZXJuYW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwZ2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBnaWQuUwppbmRleCAxOTkyYWZjLi4zNmM0YzE5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBnaWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBnaWQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGdldHBnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwaWQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBiY2I4ZS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBpZC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShnZXRwaWQpCi0gICAgbW92ICAgICBpcCwgcjcKLSAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRwaWQKLSAgICBzd2kgICAgICMwCi0gICAgbW92ICAgICByNywgaXAKLSAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgYnhscyAgICBscgotICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubwotRU5EKGdldHBpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cHBpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwcGlkLlMKaW5kZXggNTk0ZmNhNS4uNjA2YjJlMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwcGlkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwcGlkLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChnZXRwcGlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRyZXNnaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKaW5kZXggOWRjZGIzMy4uYTVlNDY4OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRyZXNnaWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJlc2dpZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZ2V0cmVzZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRyZXN1aWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzdWlkLlMKaW5kZXggMzg3YmQ3Yy4uNzRjMjZhNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRyZXN1aWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJlc3VpZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZ2V0cmVzdWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRybGltaXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmxpbWl0LlMKaW5kZXggODc5YjY2Ni4uMTY2ZGE2MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRybGltaXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJsaW1pdC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZ2V0cmxpbWl0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRydXNhZ2UuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cnVzYWdlLlMKaW5kZXggZWU4NGY0OS4uOTM5NzljNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRydXNhZ2UuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJ1c2FnZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZ2V0cnVzYWdlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRzaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c2lkLlMKaW5kZXggNzE1ZjIxNy4uODdkMzhmYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRzaWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHNpZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZ2V0c2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRzb2NrbmFtZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCmluZGV4IDJlZTY4ZjMuLjVkYzRlYWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja25hbWUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChnZXRzb2NrbmFtZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja29wdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKaW5kZXggNzM1ZWZiYi4uNDE0M2JiZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKQEAgLTQsNyArNCw2IEBACiAKIEVOVFJZKGdldHNvY2tvcHQpCiAgICAgbW92ICAgICBpcCwgc3AKLSAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KICAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKICAgICAuY2ZpX3JlbF9vZmZzZXQgcjQsIDAKQEAgLTE5LDUgKzE4LDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChnZXRzb2Nrb3B0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR0aWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dGlkLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MjhiZTEuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR0aWQuUworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZ2V0dGlkKQotICAgIG1vdiAgICAgaXAsIHI3Ci0gICAgbGRyICAgICByNywgPV9fTlJfZ2V0dGlkCi0gICAgc3dpICAgICAjMAotICAgIG1vdiAgICAgcjcsIGlwCi0gICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGJ4bHMgICAgbHIKLSAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KLUVORChnZXR0aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHRpbWVvZmRheS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUwppbmRleCA0ZDMzYjVkLi4xNzRmOTRiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChnZXR0aW1lb2ZkYXkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHVpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR1aWQuUwppbmRleCA2NmY1NzBmLi4zZDA3ZDNjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHVpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dWlkLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChnZXR1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHhhdHRyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHhhdHRyLlMKaW5kZXggNzFkMDAzNS4uNjY2MWFhZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0eGF0dHIuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGdldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbml0X21vZHVsZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbml0X21vZHVsZS5TCmluZGV4IDY4NTBkZGYuLjgyNTE1MzMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5pdF9tb2R1bGUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChpbml0X21vZHVsZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUwppbmRleCAzNjdhNDlmLi5iOTQ1YmQxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoaW5vdGlmeV9hZGRfd2F0Y2gpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCmluZGV4IDEzZTE3NWYuLjMyMDkwZGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoaW5vdGlmeV9pbml0MSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKaW5kZXggYjgwZTBmOC4uZTgyMzBlMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChpbm90aWZ5X3JtX3dhdGNoKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pb3ByaW9fZ2V0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lvcHJpb19nZXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTllMDRlZC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lvcHJpb19nZXQuUworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoaW9wcmlvX2dldCkKLSAgICBtb3YgICAgIGlwLCByNwotICAgIGxkciAgICAgcjcsID1fX05SX2lvcHJpb19nZXQKLSAgICBzd2kgICAgICMwCi0gICAgbW92ICAgICByNywgaXAKLSAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgYnhscyAgICBscgotICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubwotRU5EKGlvcHJpb19nZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lvcHJpb19zZXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW9wcmlvX3NldC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Yjk0ZWZiLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW9wcmlvX3NldC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShpb3ByaW9fc2V0KQotICAgIG1vdiAgICAgaXAsIHI3Ci0gICAgbGRyICAgICByNywgPV9fTlJfaW9wcmlvX3NldAotICAgIHN3aSAgICAgIzAKLSAgICBtb3YgICAgIHI3LCBpcAotICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBieGxzICAgIGxyCi0gICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCi1FTkQoaW9wcmlvX3NldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMva2lsbC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9raWxsLlMKaW5kZXggOWE0NDIwOC4uMGI1ZjRhNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9raWxsLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9raWxsLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChraWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9rbG9nY3RsLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2tsb2djdGwuUwppbmRleCA4NGNlN2Y2Li5iNzZiMmI1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2tsb2djdGwuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2tsb2djdGwuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGtsb2djdGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xnZXR4YXR0ci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sZ2V0eGF0dHIuUwppbmRleCA5ZWVkNjdmLi5iMDMzYTlhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xnZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGdldHhhdHRyLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChsZ2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpbmthdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9saW5rYXQuUwppbmRleCBjNjEyZDAyLi42ZTc0ZDA2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpbmthdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGlua2F0LlMKQEAgLTQsNyArNCw2IEBACiAKIEVOVFJZKGxpbmthdCkKICAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgogICAgIC5jZmlfcmVsX29mZnNldCByNCwgMApAQCAtMTksNSArMTgsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGxpbmthdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGlzdGVuLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpc3Rlbi5TCmluZGV4IDMzMGVhNTYuLjNhYWE4MDEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGlzdGVuLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9saXN0ZW4uUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGxpc3RlbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGlzdHhhdHRyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpc3R4YXR0ci5TCmluZGV4IGM2NGU0ODQuLjUxZmYyNjcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGlzdHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9saXN0eGF0dHIuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGxpc3R4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGxpc3R4YXR0ci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sbGlzdHhhdHRyLlMKaW5kZXggY2VhOTI2Yi4uNDZlODExNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sbGlzdHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sbGlzdHhhdHRyLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChsbGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9scmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKaW5kZXggYzdhNjQ1OC4uYTk0NTA2MiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9scmVtb3ZleGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQobHJlbW92ZXhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sc2Vlay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sc2Vlay5TCmluZGV4IDllZGFlMzcuLjAwYWVhYjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHNlZWsuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xzZWVrLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChsc2VlaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHNldHhhdHRyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xzZXR4YXR0ci5TCmluZGV4IDY3NjM5ZjYuLmM0MWZiODggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHNldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sc2V0eGF0dHIuUwpAQCAtNCw3ICs0LDYgQEAKIAogRU5UUlkobHNldHhhdHRyKQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQobHNldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tYWR2aXNlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21hZHZpc2UuUwppbmRleCBlZTJjMmE1Li40ZDNjZGNkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21hZHZpc2UuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21hZHZpc2UuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKG1hZHZpc2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21pbmNvcmUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWluY29yZS5TCmluZGV4IDllZjkyMzcuLmYxMTU0ZDAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWluY29yZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWluY29yZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQobWluY29yZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtkaXJhdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ta2RpcmF0LlMKaW5kZXggOWU3N2VmMC4uMWY4OTU3YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ta2RpcmF0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ta2RpcmF0LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChta2RpcmF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ta25vZGF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21rbm9kYXQuUwppbmRleCBkZTQ5MmRhLi4xYTJiZjZmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21rbm9kYXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21rbm9kYXQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKG1rbm9kYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21sb2NrLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21sb2NrLlMKaW5kZXggMDQzYjIxYi4uOGE0ZmM3YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tbG9jay5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWxvY2suUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKG1sb2NrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tbG9ja2FsbC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tbG9ja2FsbC5TCmluZGV4IDljNmM0ZTQuLmI0OWNhMDUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWxvY2thbGwuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21sb2NrYWxsLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChtbG9ja2FsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbW91bnQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbW91bnQuUwppbmRleCBiMTg0MTE0Li5lZDI4YWIyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21vdW50LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tb3VudC5TCkBAIC00LDcgKzQsNiBAQAogCiBFTlRSWShtb3VudCkKICAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgogICAgIC5jZmlfcmVsX29mZnNldCByNCwgMApAQCAtMTksNSArMTgsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKG1vdW50KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tcHJvdGVjdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tcHJvdGVjdC5TCmluZGV4IDk0NjFkOWIuLmNiNTEzMDYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXByb3RlY3QuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21wcm90ZWN0LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChtcHJvdGVjdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXJlbWFwLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21yZW1hcC5TCmluZGV4IDI0ODZmYzkuLjUwNWVhM2MgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXJlbWFwLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tcmVtYXAuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKG1yZW1hcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXN5bmMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXN5bmMuUwppbmRleCAzZmM0MTE4Li4yMjBmYjRkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21zeW5jLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tc3luYy5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQobXN5bmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bmxvY2suUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXVubG9jay5TCmluZGV4IGM4OWZkM2MuLjA1YmY5NDEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXVubG9jay5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXVubG9jay5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQobXVubG9jaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXVubG9ja2FsbC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tdW5sb2NrYWxsLlMKaW5kZXggM2FjOWYzMi4uZTJjNWRkNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tdW5sb2NrYWxsLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tdW5sb2NrYWxsLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChtdW5sb2NrYWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tdW5tYXAuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXVubWFwLlMKaW5kZXggZWQzYmIxZS4uNzQwYzM2MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tdW5tYXAuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bm1hcC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQobXVubWFwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9uYW5vc2xlZXAuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbmFub3NsZWVwLlMKaW5kZXggNjk1YzEyNi4uZmNkNmU5MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9uYW5vc2xlZXAuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL25hbm9zbGVlcC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQobmFub3NsZWVwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwY2Y5MWUuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkocGVyZl9ldmVudF9vcGVuKQotICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IHI1LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IHI2LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IHI3LCAxMgotICAgIGxkbWZkICAgaXAsIHtyNCwgcjUsIHI2fQotICAgIGxkciAgICAgcjcsID1fX05SX3BlcmZfZXZlbnRfb3BlbgotICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMAotICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBieGxzICAgIGxyCi0gICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCi1FTkQocGVyZl9ldmVudF9vcGVuKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wZXJzb25hbGl0eS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wZXJzb25hbGl0eS5TCmluZGV4IGUzZjczNzEuLmQ0M2Q3NjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGVyc29uYWxpdHkuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChwZXJzb25hbGl0eSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGlwZTIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGlwZTIuUwppbmRleCA0MjBkZWU5Li4xY2JkZmIyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BpcGUyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9waXBlMi5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQocGlwZTIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3ByY3RsLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3ByY3RsLlMKaW5kZXggNDBhY2I2MS4uYTJkODY5YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wcmN0bC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHJjdGwuUwpAQCAtNCw3ICs0LDYgQEAKIAogRU5UUlkocHJjdGwpCiAgICAgbW92ICAgICBpcCwgc3AKLSAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KICAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKICAgICAuY2ZpX3JlbF9vZmZzZXQgcjQsIDAKQEAgLTE5LDUgKzE4LDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChwcmN0bCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHJlYWQ2NC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wcmVhZDY0LlMKaW5kZXggYTMzMDE4Yy4uZGMwN2JiMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wcmVhZDY0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wcmVhZDY0LlMKQEAgLTQsNyArNCw2IEBACiAKIEVOVFJZKHByZWFkNjQpCiAgICAgbW92ICAgICBpcCwgc3AKLSAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KICAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKICAgICAuY2ZpX3JlbF9vZmZzZXQgcjQsIDAKQEAgLTE5LDUgKzE4LDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChwcmVhZDY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wcmxpbWl0NjQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHJsaW1pdDY0LlMKaW5kZXggOGQ5YzRmZi4uM2FlOWUxYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wcmxpbWl0NjQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BybGltaXQ2NC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQocHJsaW1pdDY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wd3JpdGU2NC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wd3JpdGU2NC5TCmluZGV4IDVhZTk5MjEuLjU3NDlmNmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHdyaXRlNjQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3B3cml0ZTY0LlMKQEAgLTQsNyArNCw2IEBACiAKIEVOVFJZKHB3cml0ZTY0KQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQocHdyaXRlNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZC5TCmluZGV4IGIwMWRhZjUuLjFjM2IzOTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQocmVhZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZGFoZWFkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWRhaGVhZC5TCmluZGV4IDMyNmVkNmYuLjY5NTJiNGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZGFoZWFkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkYWhlYWQuUwpAQCAtNCw3ICs0LDYgQEAKIAogRU5UUlkocmVhZGFoZWFkKQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQocmVhZGFoZWFkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkbGlua2F0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWRsaW5rYXQuUwppbmRleCAyODkyNmFiLi5lN2NjOGZmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWRsaW5rYXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWRsaW5rYXQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHJlYWRsaW5rYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWR2LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWR2LlMKaW5kZXggNDMzZDMzZC4uYzc4MDdiZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkdi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZHYuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHJlYWR2KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWN2ZnJvbS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWN2ZnJvbS5TCmluZGV4IDM2Nzc5MGIuLjExNWEwOWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVjdmZyb20uUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlY3Zmcm9tLlMKQEAgLTQsNyArNCw2IEBACiAKIEVOVFJZKHJlY3Zmcm9tKQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQocmVjdmZyb20pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlY3ZtbXNnLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlY3ZtbXNnLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNmMmI5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVjdm1tc2cuUwpAQCAtMCwwICsxLDIyIEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHJlY3ZtbXNnKQorICAgIG1vdiAgICAgaXAsIHNwCisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CisgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCisgICAgLmNmaV9yZWxfb2Zmc2V0IHI1LCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IHI2LCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IHI3LCAxMgorICAgIGxkbWZkICAgaXAsIHtyNCwgcjUsIHI2fQorICAgIGxkciAgICAgcjcsID1fX05SX3JlY3ZtbXNnCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKK0VORChyZWN2bW1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVjdm1zZy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWN2bXNnLlMKaW5kZXggNDdlODJhNy4uOTk1YTllMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWN2bXNnLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWN2bXNnLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChyZWN2bXNnKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZW1vdmV4YXR0ci5TCmluZGV4IGEzZmNkZmEuLjNhMzJlNWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVtb3ZleGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChyZW1vdmV4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVuYW1lYXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVuYW1lYXQuUwppbmRleCBjZWE2Mjg2Li45OGU4NmRjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlbmFtZWF0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZW5hbWVhdC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQocmVuYW1lYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCmluZGV4IGM5NDBhZGMuLjE4N2U2ODAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2NoZWRfZ2V0X3ByaW9yaXR5X21heCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKaW5kZXggMzlmYWVkZS4uNjhiZjdkZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzY2hlZF9nZXRfcHJpb3JpdHlfbWluKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCmluZGV4IDU5ZGYxMDQuLjMyYjk3YjggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzY2hlZF9nZXRwYXJhbSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCmluZGV4IDk1MzM2OGQuLjMzMGMyMDggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNjaGVkX2dldHNjaGVkdWxlcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCmluZGV4IDFmYTdkMTUuLjVkMTc2YWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNjaGVkX3JyX2dldF9pbnRlcnZhbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUwppbmRleCA2M2JmZTRkLi42NjUzNDcxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2NoZWRfc2V0YWZmaW5pdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKaW5kZXggMzI0ZjBiYi4uMTZlMTk5NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNjaGVkX3NldHBhcmFtKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKaW5kZXggMGNlNmIxNS4uMmVjOWZlYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2NoZWRfc2V0c2NoZWR1bGVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF95aWVsZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF95aWVsZC5TCmluZGV4IDhlNmQ2NWEuLjFlYzMyOGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfeWllbGQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzY2hlZF95aWVsZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZGZpbGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZGZpbGUuUwppbmRleCAyOGIyNWEzLi5hZmFlMDIxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRmaWxlLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZW5kZmlsZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2VuZGZpbGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRmaWxlNjQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZGZpbGU2NC5TCmluZGV4IDRhOWYyNDUuLmQwYWQwYjggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZGZpbGU2NC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZGZpbGU2NC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2VuZGZpbGU2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZG1tc2cuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZG1tc2cuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmI1ZjgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZW5kbW1zZy5TCkBAIC0wLDAgKzEsMTQgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2VuZG1tc2cpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl9zZW5kbW1zZworICAgIHN3aSAgICAgIzAKKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCitFTkQoc2VuZG1tc2cpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRtc2cuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZG1zZy5TCmluZGV4IDU1NGYzMDcuLmZkMzgxNDAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZG1zZy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZG1zZy5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2VuZG1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZHRvLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmR0by5TCmluZGV4IDUzM2Q5NWUuLjI5YjdiMGIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZHRvLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZW5kdG8uUwpAQCAtNCw3ICs0LDYgQEAKIAogRU5UUlkoc2VuZHRvKQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2VuZHRvKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRmc2dpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRmc2dpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NzdhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGZzZ2lkLlMKQEAgLTAsMCArMSwxNCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRmc2dpZCkKKyAgICBtb3YgICAgIGlwLCByNworICAgIGxkciAgICAgcjcsID1fX05SX3NldGZzZ2lkCisgICAgc3dpICAgICAjMAorICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKK0VORChzZXRmc2dpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0ZnN1aWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0ZnN1aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDI3YTRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRmc3VpZC5TCkBAIC0wLDAgKzEsMTQgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2V0ZnN1aWQpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl9zZXRmc3VpZAorICAgIHN3aSAgICAgIzAKKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCitFTkQoc2V0ZnN1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGdpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRnaWQuUwppbmRleCBmYjM4MTQ4Li5kOWIyYjg4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGdpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0Z2lkLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzZXRnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGdyb3Vwcy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRncm91cHMuUwppbmRleCA1NDIwYTUzLi4xNjlkZTczIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGdyb3Vwcy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0Z3JvdXBzLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzZXRncm91cHMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGl0aW1lci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRpdGltZXIuUwppbmRleCAyMzQ1ZTViLi4zMWIyNzdiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGl0aW1lci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0aXRpbWVyLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzZXRpdGltZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldG5zLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldG5zLlMKaW5kZXggN2FmYmZmMC4uNTkyMDNlZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRucy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0bnMuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNldG5zKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRwZ2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHBnaWQuUwppbmRleCAxNDcwYTlkLi40YTkxNTIwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHBnaWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHBnaWQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNldHBnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHByaW9yaXR5LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHByaW9yaXR5LlMKaW5kZXggYjdmNDdiZS4uMjA1M2NlMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRwcmlvcml0eS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cHJpb3JpdHkuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNldHByaW9yaXR5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZWdpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZWdpZC5TCmluZGV4IGE0MzIzZDQuLmYxYmRjNjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVnaWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlZ2lkLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzZXRyZWdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVzZ2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlc2dpZC5TCmluZGV4IGE1Nzg0NDAuLjliODk2OGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVzZ2lkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZXNnaWQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNldHJlc2dpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVzdWlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlc3VpZC5TCmluZGV4IDk3OThiYzUuLmMyNmE5NTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVzdWlkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZXN1aWQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNldHJlc3VpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmV1aWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmV1aWQuUwppbmRleCBmYTgzZGM2Li43OTYxOTFhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJldWlkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZXVpZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2V0cmV1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJsaW1pdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRybGltaXQuUwppbmRleCAwNzExYWNhLi5jODdiMjFiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJsaW1pdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmxpbWl0LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzZXRybGltaXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHNpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRzaWQuUwppbmRleCBkZjYxOTZiLi44M2JkYTFiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHNpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0c2lkLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzZXRzaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHNvY2tvcHQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0c29ja29wdC5TCmluZGV4IGM0ZjdhMDEuLjhlYTM4OTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0c29ja29wdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0c29ja29wdC5TCkBAIC00LDcgKzQsNiBAQAogCiBFTlRSWShzZXRzb2Nrb3B0KQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2V0c29ja29wdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCmluZGV4IGFmMzk3NjEuLjU3NjNmNDAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNldHRpbWVvZmRheSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0dWlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHVpZC5TCmluZGV4IDE5OTljMmIuLjU1YjM0OWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0dWlkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXR1aWQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNldHVpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0eGF0dHIuUwppbmRleCA2OTg3MjE1Li44YmE0Yjc3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXR4YXR0ci5TCkBAIC00LDcgKzQsNiBAQAogCiBFTlRSWShzZXR4YXR0cikKICAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgogICAgIC5jZmlfcmVsX29mZnNldCByNCwgMApAQCAtMTksNSArMTgsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaHV0ZG93bi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaHV0ZG93bi5TCmluZGV4IDc0NGYzODQuLjg4OTkzNGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2h1dGRvd24uUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NodXRkb3duLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzaHV0ZG93bikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lnYWx0c3RhY2suUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lnYWx0c3RhY2suUwppbmRleCBkODc3N2I0Li5iNjFiMjVkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaWdhbHRzdGFjay5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2lnYWx0c3RhY2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ25hbGZkNC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaWduYWxmZDQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhkOGEyOC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ25hbGZkNC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShzaWduYWxmZDQpCi0gICAgbW92ICAgICBpcCwgcjcKLSAgICBsZHIgICAgIHI3LCA9X19OUl9zaWduYWxmZDQKLSAgICBzd2kgICAgICMwCi0gICAgbW92ICAgICByNywgaXAKLSAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgYnhscyAgICBscgotICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubwotRU5EKHNpZ25hbGZkNCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NvY2tldC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWZhNTI5Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKHNvY2tldCkKLSAgICBtb3YgICAgIGlwLCByNwotICAgIGxkciAgICAgcjcsID1fX05SX3NvY2tldAotICAgIHN3aSAgICAgIzAKLSAgICBtb3YgICAgIHI3LCBpcAotICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBieGxzICAgIGxyCi0gICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCi1FTkQoc29ja2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zb2NrZXRwYWlyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NvY2tldHBhaXIuUwppbmRleCBmODk2MzEzLi5mM2M4YTRiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NvY2tldHBhaXIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NvY2tldHBhaXIuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNvY2tldHBhaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NwbGljZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zcGxpY2UuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmMzZjBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zcGxpY2UuUwpAQCAtMCwwICsxLDIyIEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNwbGljZSkKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfcmVsX29mZnNldCByNCwgMAorICAgIC5jZmlfcmVsX29mZnNldCByNSwgNAorICAgIC5jZmlfcmVsX29mZnNldCByNiwgOAorICAgIC5jZmlfcmVsX29mZnNldCByNywgMTIKKyAgICBsZG1mZCAgIGlwLCB7cjQsIHI1LCByNn0KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zcGxpY2UKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAorRU5EKHNwbGljZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3dhcG9mZi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zd2Fwb2ZmLlMKaW5kZXggZjc4YmM3Zi4uYTdhYWE4MiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zd2Fwb2ZmLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zd2Fwb2ZmLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzd2Fwb2ZmKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zd2Fwb24uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3dhcG9uLlMKaW5kZXggZDI4MjE2YS4uNmVhOTNjMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zd2Fwb24uUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N3YXBvbi5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc3dhcG9uKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeW1saW5rYXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3ltbGlua2F0LlMKaW5kZXggZDgxZTQzYi4uZDMzMGE1NCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeW1saW5rYXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5bWxpbmthdC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc3ltbGlua2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeW5jLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5bmMuUwppbmRleCAyNzlhMTkyLi40OGVjZmMwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5bmMuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5bmMuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHN5bmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5c2luZm8uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3lzaW5mby5TCmluZGV4IDZiZWU1ODMuLjcwOTQ3OGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3lzaW5mby5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3lzaW5mby5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc3lzaW5mbykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGVlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RlZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMTljMDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RlZS5TCkBAIC0wLDAgKzEsMTQgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkodGVlKQorICAgIG1vdiAgICAgaXAsIHI3CisgICAgbGRyICAgICByNywgPV9fTlJfdGVlCisgICAgc3dpICAgICAjMAorICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKK0VORCh0ZWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Rna2lsbC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90Z2tpbGwuUwppbmRleCA0ZWEwNGY1Li4yMDY4NDY1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Rna2lsbC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGdraWxsLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORCh0Z2tpbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKaW5kZXggZjU4NDJlOS4uODlhODBjZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHRpbWVyZmRfY3JlYXRlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKaW5kZXggNmYyNTRlNS4uNGE3ZGY3NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQodGltZXJmZF9nZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKaW5kZXggNzVkMTc1Yy4uMmUwZmU5MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQodGltZXJmZF9zZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcy5TCmluZGV4IDQ3OTJhZDEuLjI4OWMxODUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXMuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVzLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORCh0aW1lcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGtpbGwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGtpbGwuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYyNmFlNy4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RraWxsLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKHRraWxsKQotICAgIG1vdiAgICAgaXAsIHI3Ci0gICAgbGRyICAgICByNywgPV9fTlJfdGtpbGwKLSAgICBzd2kgICAgICMwCi0gICAgbW92ICAgICByNywgaXAKLSAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgYnhscyAgICBscgotICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubwotRU5EKHRraWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy90cnVuY2F0ZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90cnVuY2F0ZS5TCmluZGV4IGZmOGZkMTkuLmJiMzNiZWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdHJ1bmNhdGUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RydW5jYXRlLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORCh0cnVuY2F0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdHJ1bmNhdGU2NC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90cnVuY2F0ZTY0LlMKaW5kZXggOGZkMDg1NS4uOWNhZmJiNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy90cnVuY2F0ZTY0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90cnVuY2F0ZTY0LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORCh0cnVuY2F0ZTY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bWFzay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bWFzay5TCmluZGV4IDgzMGFmMjEuLjVkYzQ0NjEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW1hc2suUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VtYXNrLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORCh1bWFzaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW1vdW50Mi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bW91bnQyLlMKaW5kZXggNGMwY2U0ZC4uNDM1ZWRhNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bW91bnQyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bW91bnQyLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORCh1bW91bnQyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bmFtZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bmFtZS5TCmluZGV4IDIwYTZkN2QuLjhhZjYxMjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5hbWUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VuYW1lLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORCh1bmFtZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5saW5rYXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5saW5rYXQuUwppbmRleCAxYzI3NDE2Li45NjI1N2U2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VubGlua2F0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bmxpbmthdC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQodW5saW5rYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Vuc2hhcmUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5zaGFyZS5TCmluZGV4IDVlYzEwNDkuLjgwNTQxNzEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5zaGFyZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5zaGFyZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQodW5zaGFyZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdXRpbWVuc2F0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3V0aW1lbnNhdC5TCmluZGV4IGYwZjgzNGYuLmYzYzJmYTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdXRpbWVuc2F0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91dGltZW5zYXQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHV0aW1lbnNhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdmZvcmsuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdmZvcmsuUwppbmRleCBlMTJmYmE1Li41ZjRjYjNkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Zmb3JrLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy92Zm9yay5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQodmZvcmspCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Ztc3BsaWNlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Ztc3BsaWNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MxMmNhNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdm1zcGxpY2UuUwpAQCAtMCwwICsxLDE0IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHZtc3BsaWNlKQorICAgIG1vdiAgICAgaXAsIHI3CisgICAgbGRyICAgICByNywgPV9fTlJfdm1zcGxpY2UKKyAgICBzd2kgICAgICMwCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAorRU5EKHZtc3BsaWNlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy93YWl0NC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy93YWl0NC5TCmluZGV4IGExOTdjMmUuLjI2YTQ5MjkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd2FpdDQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dhaXQ0LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORCh3YWl0NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGUuUwppbmRleCBlZDdjZmEyLi5iZjg5ZDdmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dyaXRlLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy93cml0ZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQod3JpdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dyaXRldi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy93cml0ZXYuUwppbmRleCA4Y2M1MDZmLi4xNWI1Mjc1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dyaXRldi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGV2LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORCh3cml0ZXYpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvYXJtNjQubWsgYi9saWJjL2FyY2gtYXJtNjQvYXJtNjQubWsKaW5kZXggODZiZjkxYS4uNmM0ZjZhNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L2FybTY0Lm1rCisrKyBiL2xpYmMvYXJjaC1hcm02NC9hcm02NC5tawpAQCAtMSwxMCArMSwzNCBAQAotX0xJQkNfQVJDSF9DT01NT05fU1JDX0ZJTEVTIDo9IFwKKyMgYXJtNjQgc3BlY2lmaWMgY29uZmlncworCitsaWJjX2NvbW1vbl9zcmNfZmlsZXNfYXJtNjQgOj0gXAorICAgIGJpb25pYy9tZW1yY2hyLmMgXAorICAgIGJpb25pYy9zdHJyY2hyLmNwcCBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2F0LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2Noci5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjbXAuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY3B5LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xlbi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NyY2hyLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jbXAuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RwbmNweS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjYXQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybGNhdC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJsY3B5LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5jYXQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybmNweS5jIFwKKworIyBGb3J0aWZ5IGltcGxlbWVudGF0aW9ucyBvZiBsaWJjIGZ1bmN0aW9ucy4KK2xpYmNfY29tbW9uX3NyY19maWxlc19hcm02NCArPSBcCisgICAgYmlvbmljL19fbWVtY3B5X2Noay5jcHAgXAorICAgIGJpb25pYy9fX21lbXNldF9jaGsuY3BwIFwKKyAgICBiaW9uaWMvX19zdHJjcHlfY2hrLmNwcCBcCisgICAgYmlvbmljL19fc3RyY2F0X2Noay5jcHAgXAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyBDUFUgc3BlY2lmaWMgc291cmNlIGZpbGVzCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfYXJtNjQgOj0gXAogICAgIGFyY2gtYXJtNjQvYmlvbmljL19fYmlvbmljX2Nsb25lLlMgXAotICAgIGFyY2gtYXJtNjQvYmlvbmljL2J6ZXJvX2FybTY0LmMgXAotICAgIGFyY2gtYXJtNjQvYmlvbmljL2NhY2hlZmx1c2hfYXJtNjQuYyBcCiAgICAgYXJjaC1hcm02NC9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TIFwKLSAgICBhcmNoLWFybTY0L2Jpb25pYy9mdXRleF9hcm02NC5TIFwKLSAgICBhcmNoLWFybTY0L2Jpb25pYy9fX2dldF9zcC5TIFwKICAgICBhcmNoLWFybTY0L2Jpb25pYy9fX3J0X3NpZ3JldHVybi5TIFwKICAgICBhcmNoLWFybTY0L2Jpb25pYy9fc2V0am1wLlMgXAogICAgIGFyY2gtYXJtNjQvYmlvbmljL3NldGptcC5TIFwKQEAgLTEzLDcgKzM3LDI1IEBACiAgICAgYXJjaC1hcm02NC9iaW9uaWMvc3lzY2FsbC5TIFwKICAgICBhcmNoLWFybTY0L2Jpb25pYy92Zm9yay5TIFwKIAotX0xJQkNfQVJDSF9TVEFUSUNfU1JDX0ZJTEVTIDo9IFwKLSAgICBiaW9uaWMvZGxfaXRlcmF0ZV9waGRyX3N0YXRpYy5jIFwKIAotX0xJQkNfQVJDSF9EWU5BTUlDX1NSQ19GSUxFUyA6PQorbGliY19jcnRfdGFyZ2V0X2NmbGFnc19hcm02NCA6PSBcCisgICAgLUkkKExPQ0FMX1BBVEgpL2FyY2gtYXJtNjQvaW5jbHVkZQorCitsaWJjX2NydF90YXJnZXRfY3J0YmVnaW5fZmlsZV9hcm02NCA6PSBcCisgICAgJChMT0NBTF9QQVRIKS9hcmNoLWFybTY0L2Jpb25pYy9jcnRiZWdpbi5jCisKK2xpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9zb19maWxlX2FybTY0IDo9IFwKKyAgICAkKExPQ0FMX1BBVEgpL2FyY2gtY29tbW9uL2Jpb25pYy9jcnRiZWdpbl9zby5jCisKKyMjIENQVSB2YXJpYW50IHNwZWNpZmljIHNvdXJjZSBmaWxlcworaWZlcSAoJChzdHJpcCAkKFRBUkdFVF9DUFVfVkFSSUFOVCkpLCkKKyAgJCh3YXJuaW5nIFRBUkdFVF9BUkNIIGlzIGFybTY0LCBidXQgVEFSR0VUX0NQVV9WQVJJQU5UIGlzIG5vdCBkZWZpbmVkKQorZW5kaWYKK2NwdV92YXJpYW50X21rIDo9ICQoTE9DQUxfUEFUSCkvYXJjaC1hcm02NC8kKFRBUkdFVF9DUFVfVkFSSUFOVCkvJChUQVJHRVRfQ1BVX1ZBUklBTlQpLm1rCitpZmVxICgkKHdpbGRjYXJkICQoY3B1X3ZhcmlhbnRfbWspKSwpCiskKGVycm9yICJUQVJHRVRfQ1BVX1ZBUklBTlQgbm90IHNldCBvciBzZXQgdG8gYW4gdW5rbm93biB2YWx1ZS4gUG9zc2libGUgdmFsdWVzIGFyZSBnZW5lcmljLCBnZW5lcmljLW5lb24sIGRlbnZlcjY0LiBVc2UgZ2VuZXJpYyBmb3IgZGV2aWNlcyB0aGF0IGRvIG5vdCBoYXZlIGEgQ1BVIHNpbWlsYXIgdG8gYW55IG9mIHRoZSBzdXBwb3J0ZWQgY3B1IHZhcmlhbnRzLiIpCitlbmRpZgoraW5jbHVkZSAkKGNwdV92YXJpYW50X21rKQorbGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMgKz0gJChjcHVfdmFyaWFua19taykKKworY3B1X3ZhcmlhbnRfbWsgOj0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUwppbmRleCA5NzkwMjkxLi41NmFjMGY2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL19fYmlvbmljX2Nsb25lLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TCkBAIC0zMSwzMyArMzEsMzAgQEAKIC8vIHBpZF90IF9fYmlvbmljX2Nsb25lKGludCBmbGFncywgdm9pZCogY2hpbGRfc3RhY2ssIHBpZF90KiBwYXJlbnRfdGlkLCB2b2lkKiB0bHMsIHBpZF90KiBjaGlsZF90aWQsIGludCAoKmZuKSh2b2lkKiksIHZvaWQqIGFyZyk7CiAKIEVOVFJZKF9fYmlvbmljX2Nsb25lKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KLSAgICAvKiBzdG9yZSB0aHJlYWQgcG9pbnRlciAmIGFyZ3MgaW4gY2hpbGQgc3RhY2sgKi8KKyAgICAjIENvcHkgJ2ZuJyBhbmQgJ2FyZycgb250byB0aGUgY2hpbGQgc3RhY2suCiAgICAgc3RwICAgICB4NSwgeDYsIFt4MSwgIy0xNl0KIAotICAgIC8qIHN5c19jbG9uZSAqLwotICAgIHV4dHcgICAgeDAsIHcwCisgICAgIyBNYWtlIHRoZSBzeXN0ZW0gY2FsbC4KICAgICBtb3YgICAgIHg4LCBfX05SX2Nsb25lCiAgICAgc3ZjICAgICAjMAogCi0gICAgLyogY2hlY2sgZm9yIGNoaWxkL3BhcmVudCAqLwotICAgIGNieiAgICAgeDAsMWYKKyAgICAjIEFyZSB3ZSB0aGUgY2hpbGQ/CisgICAgY2J6ICAgICB4MCwgLkxfYmNfY2hpbGQKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCisgICAgIyBTZXQgZXJybm8gaWYgc29tZXRoaW5nIHdlbnQgd3JvbmcuCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIAotICAgIC8qIHRocmVhZCBpbml0aWFsaXphdGlvbiAtIHNldCB0aGUgZW5kIG9mIHRoZSBmcmFtZSByZWNvcmQgY2hhaW4gKi8KLTE6CisuTF9iY19jaGlsZDoKKyAgICAjIFdlJ3JlIGluIHRoZSBjaGlsZCBub3cuIFNldCB0aGUgZW5kIG9mIHRoZSBmcmFtZSByZWNvcmQgY2hhaW4uLi4KICAgICBtb3YgICAgIHgyOSwgeHpyCisgICAgIyBTZXR0aW5nIHgzMCB0byAwIHdpbGwgbWFrZSB0aGUgdW53aW5kZXIgc3RvcCBhdCBfX3N0YXJ0X3RocmVhZAorICAgIG1vdiAgICAgeDMwLCB4enIKKyAgICAjIC4uLmFuZCBjYWxsIF9fc3RhcnRfdGhyZWFkIHdpdGggdGhlICdmbicgYW5kICdhcmcnIHdlIHN0b3JlZCBvbiB0aGUgY2hpbGQgc3RhY2suCiAgICAgbGRwICAgICB4MCwgeDEsIFtzcCwgIy0xNl0KLSAgICBiICAgICAgIF9fYmlvbmljX2Nsb25lX2VudHJ5CisgICAgYiAgICAgICBfX3N0YXJ0X3RocmVhZAogRU5EKF9fYmlvbmljX2Nsb25lKQorLmhpZGRlbiBfX2Jpb25pY19jbG9uZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9fX2dldF9zcC5TIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9fX2dldF9zcC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2Q0Y2ViLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX19nZXRfc3AuUworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLUVOVFJZKF9fZ2V0X3NwKQotICAgIG1vdiB4MCwgc3AKLSAgICByZXQKLUVORChfX2dldF9zcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX19ydF9zaWdyZXR1cm4uUyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX19ydF9zaWdyZXR1cm4uUwppbmRleCBkMTc2ZWEzLi44ZmI2ZjBjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL19fcnRfc2lncmV0dXJuLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9fX3J0X3NpZ3JldHVybi5TCkBAIC0yNiw4ICsyNiw3IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZX1BSSVZBVEUoX19ydF9zaWdyZXR1cm4pCiAgIG1vdiAgICAgeDgsIF9fTlJfcnRfc2lncmV0dXJuCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL19fc2V0X3Rscy5jIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9fX3NldF90bHMuYwppbmRleCA0ZWIzYWRlLi4wZDg4ZDExIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL19fc2V0X3Rscy5jCisrKyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX19zZXRfdGxzLmMKQEAgLTI2LDYgKzI2LDggQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLXZvaWQgX19zZXRfdGxzKHZvaWQqIHRscykgeworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0xJQkNfSElEREVOX18gdm9pZCBfX3NldF90bHModm9pZCogdGxzKSB7CiAgIGFzbSgibXNyIHRwaWRyX2VsMCwgJTAiIDogOiAiciIgKHRscykpOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMgYi9saWJjL2FyY2gtYXJtNjQvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUwppbmRleCAwNzVlMzg4Li42YTdiMWU1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUworKysgYi9saWJjL2FyY2gtYXJtNjQvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAvLyB2b2lkIF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24odm9pZCogc3RhY2tCYXNlLCBzaXplX3Qgc3RhY2tTaXplKQotRU5UUlkoX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bikKK0VOVFJZX1BSSVZBVEUoX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bikKICAgbW92IHc4LCBfX05SX211bm1hcAogICBzdmMgIzAKICAgLy8gSWYgbXVubWFwIGZhaWxlZCwgd2UgaWdub3JlIHRoZSBmYWlsdXJlIGFuZCBleGl0IGFueXdheS4KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX3NldGptcC5TIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9fc2V0am1wLlMKaW5kZXggZWE3MGE1Mi4uMzgzNjg5OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9fc2V0am1wLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9fc2V0am1wLlMKQEAgLTI2LDcgKzI2LDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogI2luY2x1ZGUgPG1hY2hpbmUvc2V0am1wLmg+CiAKIC8qCkBAIC03Myw3ICs3Myw3IEBACiAgICAgbGRyICAgICB3OSwgLkxfc2V0am1wX21hZ2ljCiAgICAgbGRyICAgICB3MTAsIFt4MCwgIyhfSkJfTUFHSUMgKiA0KV0KICAgICBjbXAgICAgIHc5LCB3MTAKLSAgICBiLm5lICAgIGJvdGNoCisgICAgYi5uZSAgICAuTF9mYWlsCiAKICAgICAvKiByZXN0b3JlIGNvcmUgcmVnaXN0ZXJzICovCiAgICAgbGRwICAgICB4MzAsIHgxMCwgW3gwLCAjKF9KQl9DT1JFX0JBU0UgKiA0ICsgMTYgKiAwKV0KQEAgLTkzLDEwICs5MywxMCBAQAogCiAgICAgLyogdmFsaWRhdGUgc3AgKHNwIG1vZCAxNiA9IDApIGFuZCBsciAobHIgbW9kIDQgPSAwKSAqLwogICAgIHRzdCAgICAgeDMwLCAjMwotICAgIGIubmUgICAgYm90Y2gKKyAgICBiLm5lICAgIC5MX2ZhaWwKICAgICBtb3YgICAgIHgxMCwgc3AKICAgICB0c3QgICAgIHgxMCwgIzE1Ci0gICAgYi5uZSAgICBib3RjaAorICAgIGIubmUgICAgLkxfZmFpbAogCiAgICAgLyogc2V0IHJldHVybiB2YWx1ZSAqLwogICAgIGNtcCAgICAgdzEsIHd6cgpAQCAtMTA0LDggKzEwNCw4IEBACiAgICAgcmV0CiAKICAgICAvKiB2YWxpZGF0aW9uIGZhaWxlZCwgZGllIGRpZSBkaWUgKi8KLWJvdGNoOgotICAgIGJsICAgICAgUElDX1NZTShfQ19MQUJFTChsb25nam1wZXJyb3IpLCBQTFQpCi0gICAgYmwgICAgICBQSUNfU1lNKF9DX0xBQkVMKGFib3J0KSwgUExUKQorLkxfZmFpbDoKKyAgICBibCAgICAgIFBJQ19TWU0obG9uZ2ptcGVycm9yLCBQTFQpCisgICAgYmwgICAgICBQSUNfU1lNKGFib3J0LCBQTFQpCiAgICAgYiAgICAgICAgLiAtIDggICAgICAgLyogQ2Fubm90IGdldCBoZXJlICovCiBFTkQoX2xvbmdqbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL2J6ZXJvX2FybTY0LmMgYi9saWJjL2FyY2gtYXJtNjQvYmlvbmljL2J6ZXJvX2FybTY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZjkyMGMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9iemVyb19hcm02NC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLXZvaWQgYnplcm8odm9pZCogcywgc2l6ZV90IG4pIHsKLSAgbWVtc2V0KHMsICdcMCcsIG4pOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9jYWNoZWZsdXNoX2FybTY0LmMgYi9saWJjL2FyY2gtYXJtNjQvYmlvbmljL2NhY2hlZmx1c2hfYXJtNjQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM1NGZlZS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL2NhY2hlZmx1c2hfYXJtNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotLyogVE9ETzogV2UgY2FuIGltcGxlbWVudCBhIHNwZWNpYWxpc2VkIGNhY2hlZmx1c2goKSAqLwotaW50IGNhY2hlZmx1c2ggKGxvbmcgc3RhcnQsIGxvbmcgZW5kLCBsb25nIGZsYWdzIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKSB7Ci0gIF9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlKChjaGFyKikgc3RhcnQsIChjaGFyKikgZW5kKTsKLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL2Z1dGV4X2FybTY0LlMgYi9saWJjL2FyY2gtYXJtNjQvYmlvbmljL2Z1dGV4X2FybTY0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NTI3NzEuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9mdXRleF9hcm02NC5TCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLSNkZWZpbmUgRlVURVhfV0FJVCAwCi0jZGVmaW5lIEZVVEVYX1dBS0UgMQotCi0vLyBpbnQgX19mdXRleF9zeXNjYWxsNCh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCBvcCwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiB0aW1lb3V0KQotRU5UUlkoX19mdXRleF9zeXNjYWxsNCkKLSAgc3RwIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICBtb3YgeDI5LCBzcAotCi0gIHN0ciB4OCwgW3NwLCAjLTE2XSEKLSAgbW92IHg4LCBfX05SX2Z1dGV4Ci0gIHN2YyAjMAotICBsZHIgeDgsIFtzcF0sICMxNgotCi0gIGxkcCB4MjksIHgzMCwgW3NwXSwgIzE2Ci0gIHJldAotRU5EKF9fZnV0ZXhfc3lzY2FsbDQpCi0KLS8vIGludCBfX2Z1dGV4X3N5c2NhbGwzKHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IG9wLCBpbnQgY291bnQpCi1FTlRSWShfX2Z1dGV4X3N5c2NhbGwzKQotICBiIF9fZnV0ZXhfc3lzY2FsbDQKLUVORChfX2Z1dGV4X3N5c2NhbGwzKQotCi0vLyBpbnQgX19mdXRleF93YWl0KHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiB0aW1lb3V0KQotRU5UUlkoX19mdXRleF93YWl0KQotICBzdHAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gIG1vdiB4MjksIHNwCi0KLSAgbW92IHgzLCB4MgotICBtb3YgeDIsIHgxCi0gIG1vdiB4MSwgI0ZVVEVYX1dBSVQKLQotICBzdHIgeDgsIFtzcCwgIy0xNl0hCi0gIG1vdiB4OCwgX19OUl9mdXRleAotICBzdmMgIzAKLSAgbGRyIHg4LCBbc3BdLCAjMTYKLQotICBsZHAgeDI5LCB4MzAsIFtzcF0sICMxNgotICByZXQKLUVORChfX2Z1dGV4X3dhaXQpCi0KLS8vIGludCBfX2Z1dGV4X3dha2Uodm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgY291bnQpCi1FTlRSWShfX2Z1dGV4X3dha2UpCi0gIHN0cCB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgbW92IHgyOSwgc3AKLQotICBtb3YgeDIsIHgxCi0gIG1vdiB4MSwgI0ZVVEVYX1dBS0UKLQotICBzdHIgeDgsIFtzcCwgIy0xNl0hCi0gIG1vdiB4OCwgX19OUl9mdXRleAotICBzdmMgIzAKLSAgbGRyIHg4LCBbc3BdLCAjMTYKLQotICBsZHAgeDI5LCB4MzAsIFtzcF0sICMxNgotICByZXQKLUVORChfX2Z1dGV4X3dha2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL3NldGptcC5TIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9zZXRqbXAuUwppbmRleCBiMWVjMGE4Li5mOWQyMjY2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL3NldGptcC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvc2V0am1wLlMKQEAgLTI2LDcgKzI2LDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogI2luY2x1ZGUgPG1hY2hpbmUvc2V0am1wLmg+CiAKIC8qCkBAIC00NSw3ICs0NSw3IEBACiAgICAgc3RwICAgICB4MCwgeDMwLCBbc3AsICMtMTZdIQogCiAgICAgbW92ICAgICB4MCwgeHpyCi0gICAgYmwgICAgICBQSUNfU1lNKF9DX0xBQkVMKHNpZ2Jsb2NrKSwgUExUKQorICAgIGJsICAgICAgUElDX1NZTShzaWdibG9jaywgUExUKQogICAgIG1vdiAgICAgdzEsIHcwCiAKICAgICBsZHAgICAgIHgwLCB4MzAsIFtzcF0sICMxNgpAQCAtODUsNyArODUsNyBAQAogICAgIGxkciAgICAgdzksIC5MX3NldGptcF9tYWdpYwogICAgIGxkciAgICAgdzEwLCBbeDAsICMoX0pCX01BR0lDICogNCldCiAgICAgY21wICAgICB3OSwgdzEwCi0gICAgYi5uZSAgICBib3RjaAorICAgIGIubmUgICAgLkxfZmFpbAogCiAgICAgLyogcmVzdG9yZSBjb3JlIHJlZ2lzdGVycyAqLwogICAgIGxkcCAgICAgeDMwLCB4MTAsIFt4MCwgIyhfSkJfQ09SRV9CQVNFICogNCArIDE2ICogMCldCkBAIC0xMDUsMTAgKzEwNSwxMCBAQAogCiAgICAgLyogdmFsaWRhdGUgc3AgKHNwIG1vZCAxNiA9IDApIGFuZCBsciAobHIgbW9kIDQgPSAwKSAqLwogICAgIHRzdCAgICAgeDMwLCAjMwotICAgIGIubmUgICAgYm90Y2gKKyAgICBiLm5lICAgIC5MX2ZhaWwKICAgICBtb3YgICAgIHgxMCwgc3AKICAgICB0c3QgICAgIHgxMCwgIzE1Ci0gICAgYi5uZSAgICBib3RjaAorICAgIGIubmUgICAgLkxfZmFpbAogCiAgICAgLyogc2V0IHJldHVybiB2YWx1ZSAqLwogICAgIGNtcCAgICAgdzEsIHd6cgpAQCAtMTE2LDggKzExNiw4IEBACiAgICAgcmV0CiAKICAgICAvKiB2YWxpZGF0aW9uIGZhaWxlZCwgZGllIGRpZSBkaWUgKi8KLWJvdGNoOgotICAgIGJsICAgICAgUElDX1NZTShfQ19MQUJFTChsb25nam1wZXJyb3IpLCBQTFQpCi0gICAgYmwgICAgICBQSUNfU1lNKF9DX0xBQkVMKGFib3J0KSwgUExUKQorLkxfZmFpbDoKKyAgICBibCAgICAgIFBJQ19TWU0obG9uZ2ptcGVycm9yLCBQTFQpCisgICAgYmwgICAgICBQSUNfU1lNKGFib3J0LCBQTFQpCiAgICAgYiAgICAgICAuIC0gOCAgICAgICAvKiBDYW5ub3QgZ2V0IGhlcmUgKi8KIEVORChsb25nam1wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9zaWdzZXRqbXAuUyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvc2lnc2V0am1wLlMKaW5kZXggM2FmY2VhYi4uNGZkYjM2NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9zaWdzZXRqbXAuUworKysgYi9saWJjL2FyY2gtYXJtNjQvYmlvbmljL3NpZ3NldGptcC5TCkBAIC0yNiw3ICsyNiw3IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KICNpbmNsdWRlIDxtYWNoaW5lL3NldGptcC5oPgogCiAvKgpAQCAtMzUsOCArMzUsOCBAQAogICovCiAKIEVOVFJZKHNpZ3NldGptcCkKLSAgICBjYnogICAgIHcxLCBQSUNfU1lNKF9DX0xBQkVMKF9zZXRqbXApLCBQTFQpCi0gICAgYiAgICAgICBQSUNfU1lNKF9DX0xBQkVMKHNldGptcCksIFBMVCkKKyAgICBjYnogICAgIHcxLCBQSUNfU1lNKF9zZXRqbXAsIFBMVCkKKyAgICBiICAgICAgIFBJQ19TWU0oc2V0am1wLCBQTFQpCiBFTkQoc2lnc2V0am1wKQogCiAuTF9zZXRqbXBfbWFnaWM6CkBAIC00Niw2ICs0Niw2IEBACiAgICAgbGRyICAgICB3MiwgLkxfc2V0am1wX21hZ2ljCiAgICAgbGRyICAgICB3MywgW3gwXQogICAgIGNtcCAgICAgdzIsIHczCi0gICAgYi5lcSAgICBQSUNfU1lNKF9DX0xBQkVMKF9sb25nam1wKSwgUExUKQotICAgIGIgICAgICAgUElDX1NZTShfQ19MQUJFTChsb25nam1wKSwgUExUKQorICAgIGIuZXEgICAgUElDX1NZTShfbG9uZ2ptcCwgUExUKQorICAgIGIgICAgICAgUElDX1NZTShsb25nam1wLCBQTFQpCiBFTkQoc2lnbG9uZ2ptcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvc3lzY2FsbC5TIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9zeXNjYWxsLlMKaW5kZXggZTViZTFkNS4uODM4OWY5OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9zeXNjYWxsLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9zeXNjYWxsLlMKQEAgLTI5LDEzICsyOSw2IEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHN5c2NhbGwpCi0gICAgLyogY3JlYXRlIEFBUENTIGZyYW1lIHBvaW50ZXIgKi8KLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLQotICAgIC8qIHN0b3JlIHg4ICovCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIC8qIE1vdmUgc3lzY2FsbCBOby4gZnJvbSB4MCB0byB4OCAqLwogICAgIG1vdiAgICAgeDgsIHgwCiAgICAgLyogTW92ZSBzeXNjYWxsIHBhcmFtZXRlcnMgZnJvbSB4MSB0aHJ1IHg2IHRvIHgwIHRocnUgeDUgKi8KQEAgLTQ3LDE0ICs0MCwxMCBAQAogICAgIG1vdiAgICAgeDUsIHg2CiAgICAgc3ZjICAgICAjMAogCi0gICAgLyogcmVzdG9yZSB4OCAqLwotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgLyogY2hlY2sgaWYgc3lzY2FsbCByZXR1cm5lZCBzdWNjZXNzZnVsbHkgKi8KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHN5c2NhbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL3Zmb3JrLlMgYi9saWJjL2FyY2gtYXJtNjQvYmlvbmljL3Zmb3JrLlMKaW5kZXggNTIwMDllMi4uYjZhNjcyZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy92Zm9yay5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvdmZvcmsuUwpAQCAtMzcsMTQgKzM3LDEyIEBACiAgICAgbW92ICAgICB4MywgeHpyCiAgICAgbW92ICAgICB4NCwgeHpyCiAKLSAgICBzdHIgICAgIHg4LCBbc3AsICMtMTZdIQogICAgIG1vdiAgICAgeDgsIF9fTlJfY2xvbmUKICAgICBzdmMgICAgICMwCi0gICAgbGRyICAgICB4OCwgW3NwXSwgIzE2CiAKICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHZmb3JrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2RlbnZlcjY0L2Jpb25pYy9tZW1jcHkuUyBiL2xpYmMvYXJjaC1hcm02NC9kZW52ZXI2NC9iaW9uaWMvbWVtY3B5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwZjBkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9kZW52ZXI2NC9iaW9uaWMvbWVtY3B5LlMKQEAgLTAsMCArMSwyMDUgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxMiwgTGluYXJvIExpbWl0ZWQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICBDb3B5cmlnaHQgKGMpIDIwMTQsIE5WSURJQSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBMaW5hcm8gbm9yIHRoZQorICAgICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICAgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qIEFzc3VtcHRpb25zOgorICoKKyAqIGRlbnZlciwgQVJNdjgtYSwgQUFyY2g2NAorICogVW5hbGlnbmVkIGFjY2Vzc2VzCisgKgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworI2RlZmluZSBkc3Rpbgl4MAorI2RlZmluZSBzcmMJeDEKKyNkZWZpbmUgY291bnQJeDIKKyNkZWZpbmUgdG1wMQl4MworI2RlZmluZSB0bXAxdwl3MworI2RlZmluZSB0bXAyCXg0CisjZGVmaW5lIHRtcDJ3CXc0CisjZGVmaW5lIHRtcDMJeDUKKyNkZWZpbmUgdG1wM3cJdzUKKyNkZWZpbmUgZHN0CXg2CisKKyNkZWZpbmUgQV9sCXg3CisjZGVmaW5lIEFfaAl4OAorI2RlZmluZSBCX2wJeDkKKyNkZWZpbmUgQl9oCXgxMAorI2RlZmluZSBDX2wJeDExCisjZGVmaW5lIENfaAl4MTIKKyNkZWZpbmUgRF9sCXgxMworI2RlZmluZSBEX2gJeDE0CisKKyNkZWZpbmUgUUFfbAlxMAorI2RlZmluZSBRQV9oCXExCisjZGVmaW5lIFFCX2wJcTIKKyNkZWZpbmUgUUJfaAlxMworCitFTlRSWShtZW1jcHkpCisKKwltb3YJZHN0LCBkc3RpbgorCWNtcAljb3VudCwgIzY0CisJYi5nZQkuTGNweV9ub3Rfc2hvcnQKKwljbXAJY291bnQsICMxNQorCWIubGUJLkx0YWlsMTV0aW55CisKKwkvKiBEZWFsIHdpdGggc21hbGwgY29waWVzIHF1aWNrbHkgYnkgZHJvcHBpbmcgc3RyYWlnaHQgaW50byB0aGUKKwkgKiBleGl0IGJsb2NrLiAgKi8KKy5MdGFpbDYzOgorCS8qIENvcHkgdXAgdG8gNDggYnl0ZXMgb2YgZGF0YS4gIEF0IHRoaXMgcG9pbnQgd2Ugb25seSBuZWVkIHRoZQorCSAqIGJvdHRvbSA2IGJpdHMgb2YgY291bnQgdG8gYmUgYWNjdXJhdGUuICAqLworCWFuZHMJdG1wMSwgY291bnQsICMweDMwCisJYi5lcQkuTHRhaWwxNQorCWFkZAlkc3QsIGRzdCwgdG1wMQorCWFkZAlzcmMsIHNyYywgdG1wMQorCWNtcAl0bXAxdywgIzB4MjAKKwliLmVxCTFmCisJYi5sdAkyZgorCWxkcAlBX2wsIEFfaCwgW3NyYywgIy00OF0KKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtNDhdCisxOgorCWxkcAlBX2wsIEFfaCwgW3NyYywgIy0zMl0KKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtMzJdCisyOgorCWxkcAlBX2wsIEFfaCwgW3NyYywgIy0xNl0KKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtMTZdCisKKy5MdGFpbDE1OgorCWFuZHMJY291bnQsIGNvdW50LCAjMTUKKwliZXEJMWYKKwlhZGQJc3JjLCBzcmMsIGNvdW50CisJbGRwCUFfbCwgQV9oLCBbc3JjLCAjLTE2XQorCWFkZAlkc3QsIGRzdCwgY291bnQKKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtMTZdCisxOgorCXJldAorCisuTHRhaWwxNXRpbnk6CisJLyogQ29weSB1cCB0byAxNSBieXRlcyBvZiBkYXRhLiAgRG9lcyBub3QgYXNzdW1lIGFkZGl0aW9uYWwgZGF0YQorCSAgIGJlaW5nIGNvcGllZC4gICovCisJdGJ6CWNvdW50LCAjMywgMWYKKwlsZHIJdG1wMSwgW3NyY10sICM4CisJc3RyCXRtcDEsIFtkc3RdLCAjOAorMToKKwl0YnoJY291bnQsICMyLCAxZgorCWxkcgl0bXAxdywgW3NyY10sICM0CisJc3RyCXRtcDF3LCBbZHN0XSwgIzQKKzE6CisJdGJ6CWNvdW50LCAjMSwgMWYKKwlsZHJoCXRtcDF3LCBbc3JjXSwgIzIKKwlzdHJoCXRtcDF3LCBbZHN0XSwgIzIKKzE6CisJdGJ6CWNvdW50LCAjMCwgMWYKKwlsZHJiCXRtcDF3LCBbc3JjXQorCXN0cmIJdG1wMXcsIFtkc3RdCisxOgorCXJldAorCisuTGNweV9ub3Rfc2hvcnQ6CisJLyogV2UgZG9uJ3QgbXVjaCBjYXJlIGFib3V0IHRoZSBhbGlnbm1lbnQgb2YgRFNULCBidXQgd2Ugd2FudCBTUkMKKwkgKiB0byBiZSAxMjgtYml0ICgxNiBieXRlKSBhbGlnbmVkIHNvIHRoYXQgd2UgZG9uJ3QgY3Jvc3MgY2FjaGUgbGluZQorCSAqIGJvdW5kYXJpZXMgb24gYm90aCBsb2FkcyBhbmQgc3RvcmVzLiAgKi8KKwluZWcJdG1wMiwgc3JjCisJYW5kcwl0bXAyLCB0bXAyLCAjMTUJCS8qIEJ5dGVzIHRvIHJlYWNoIGFsaWdubWVudC4gICovCisJYi5lcQkyZgorCXN1Ygljb3VudCwgY291bnQsIHRtcDIKKwkvKiBDb3B5IG1vcmUgZGF0YSB0aGFuIG5lZWRlZDsgaXQncyBmYXN0ZXIgdGhhbiBqdW1waW5nCisJICogYXJvdW5kIGNvcHlpbmcgc3ViLVF1YWR3b3JkIHF1YW50aXRpZXMuICBXZSBrbm93IHRoYXQKKwkgKiBpdCBjYW4ndCBvdmVycnVuLiAgKi8KKwlsZHAJQV9sLCBBX2gsIFtzcmNdCisJYWRkCXNyYywgc3JjLCB0bXAyCisJc3RwCUFfbCwgQV9oLCBbZHN0XQorCWFkZAlkc3QsIGRzdCwgdG1wMgorCS8qIFRoZXJlIG1heSBiZSBsZXNzIHRoYW4gNjMgYnl0ZXMgdG8gZ28gbm93LiAgKi8KKwljbXAJY291bnQsICM2MworCWIubGUJLkx0YWlsNjMKKzI6CisJc3Vicwljb3VudCwgY291bnQsICMxMjgKKwliLmdlCS5MY3B5X2JvZHlfbGFyZ2UKKwkvKiBMZXNzIHRoYW4gMTI4IGJ5dGVzIHRvIGNvcHksIHNvIGhhbmRsZSA2NCBoZXJlIGFuZCB0aGVuIGp1bXAKKwkgKiB0byB0aGUgdGFpbC4gICovCisJbGRwCVFBX2wsIFFBX2gsIFtzcmNdCisJbGRwCVFCX2wsIFFCX2gsIFtzcmMsICMzMl0KKwlzdHAJUUFfbCwgUUFfaCwgW2RzdF0KKwlzdHAJUUJfbCwgUUJfaCwgW2RzdCwgIzMyXQorCXRzdAljb3VudCwgIzB4M2YKKwlhZGQJc3JjLCBzcmMsICM2NAorCWFkZAlkc3QsIGRzdCwgIzY0CisJYi5uZQkuTHRhaWw2MworCXJldAorCisJLyogQ3JpdGljYWwgbG9vcC4gIFN0YXJ0IGF0IGEgbmV3IGNhY2hlIGxpbmUgYm91bmRhcnkuICBBc3N1bWluZworCSAqIDY0IGJ5dGVzIHBlciBsaW5lIHRoaXMgZW5zdXJlcyB0aGUgZW50aXJlIGxvb3AgaXMgaW4gb25lIGxpbmUuICAqLworCS5wMmFsaWduIDYKKy5MY3B5X2JvZHlfbGFyZ2U6CisJY21wCWNvdW50LCA2NTUzNgorCWJoaQkuTGNweV9ib2R5X2h1Z2UKKwkvKiBUaGVyZSBhcmUgYXQgbGVhc3QgMTI4IGJ5dGVzIHRvIGNvcHkuICAqLworCWxkcAlRQV9sLCBRQV9oLCBbc3JjLCAjMF0KKwlzdWIJZHN0LCBkc3QsICMzMgkJLyogUHJlLWJpYXMuICAqLworCWxkcAlRQl9sLCBRQl9oLCBbc3JjLCAjMzJdIQkvKiBzcmMgKz0gNjQgLSBQcmUtYmlhcy4gICovCisxOgorCXN0cAlRQV9sLCBRQV9oLCBbZHN0LCAjMzJdCisJbGRwCVFBX2wsIFFBX2gsIFtzcmMsICMzMl0KKwlzdHAJUUJfbCwgUUJfaCwgW2RzdCwgIzY0XSEKKwlsZHAJUUJfbCwgUUJfaCwgW3NyYywgIzY0XSEKKworCXN1YnMJY291bnQsIGNvdW50LCAjNjQKKwliLmdlCTFiCisKKwlzdHAJUUFfbCwgUUFfaCwgW2RzdCwgIzMyXQorCXN0cAlRQl9sLCBRQl9oLCBbZHN0LCAjNjRdCisJYWRkCXNyYywgc3JjLCAjMzIKKwlhZGQJZHN0LCBkc3QsICM2NCArIDMyCisJdHN0CWNvdW50LCAjMHgzZgorCWIubmUJLkx0YWlsNjMKKwlyZXQKKy5MY3B5X2JvZHlfaHVnZToKKwkvKiBUaGVyZSBhcmUgYXQgbGVhc3QgMTI4IGJ5dGVzIHRvIGNvcHkuICAqLworCWxkcAlRQV9sLCBRQV9oLCBbc3JjLCAjMF0KKwlzdWIJZHN0LCBkc3QsICMzMgkJLyogUHJlLWJpYXMuICAqLworCWxkcAlRQl9sLCBRQl9oLCBbc3JjLCAjMzJdIQorMToKKwlzdG5wCVFBX2wsIFFBX2gsIFtkc3QsICMzMl0KKwlzdG5wCVFCX2wsIFFCX2gsIFtkc3QsICM2NF0KKwlsZHAJUUFfbCwgUUFfaCwgW3NyYywgIzMyXQorCWxkcAlRQl9sLCBRQl9oLCBbc3JjLCAjNjRdIQorCWFkZAlkc3QsIGRzdCwgIzY0CisKKwlzdWJzCWNvdW50LCBjb3VudCwgIzY0CisJYi5nZQkxYgorCisJc3RucAlRQV9sLCBRQV9oLCBbZHN0LCAjMzJdCisJc3RucAlRQl9sLCBRQl9oLCBbZHN0LCAjNjRdCisJYWRkCXNyYywgc3JjLCAjMzIKKwlhZGQJZHN0LCBkc3QsICM2NCArIDMyCisJdHN0CWNvdW50LCAjMHgzZgorCWIubmUJLkx0YWlsNjMKKwlyZXQKKworRU5EKG1lbWNweSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9kZW52ZXI2NC9iaW9uaWMvbWVtc2V0LlMgYi9saWJjL2FyY2gtYXJtNjQvZGVudmVyNjQvYmlvbmljL21lbXNldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMjdkODkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZGVudmVyNjQvYmlvbmljL21lbXNldC5TCkBAIC0wLDAgKzEsMjcxIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTIsIExpbmFybyBMaW1pdGVkCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgQ29weXJpZ2h0IChjKSAyMDE0LCBOVklESUEgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgTGluYXJvIG5vciB0aGUKKyAgICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisvKiBBc3N1bXB0aW9uczoKKyAqCisgKiBkZW52ZXIsIEFSTXY4LWEsIEFBcmNoNjQKKyAqIFVuYWxpZ25lZCBhY2Nlc3NlcworICoKKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKy8qIEJ5IGRlZmF1bHQgd2UgYXNzdW1lIHRoYXQgdGhlIERDIGluc3RydWN0aW9uIGNhbiBiZSB1c2VkIHRvIHplcm8KKyAgIGRhdGEgYmxvY2tzIG1vcmUgZWZmaWNpZW50bHkuICBJbiBzb21lIGNpcmN1bXN0YW5jZXMgdGhpcyBtaWdodCBiZQorICAgdW5zYWZlLCBmb3IgZXhhbXBsZSBpbiBhbiBhc3ltbWV0cmljIG11bHRpcHJvY2Vzc29yIGVudmlyb25tZW50IHdpdGgKKyAgIGRpZmZlcmVudCBEQyBjbGVhciBsZW5ndGhzIChuZWl0aGVyIHRoZSB1cHBlciBub3IgbG93ZXIgbGVuZ3RocyBhcmUKKyAgIHNhZmUgdG8gdXNlKS4gIFRoZSBmZWF0dXJlIGNhbiBiZSBkaXNhYmxlZCBieSBkZWZpbmluZyBET05UX1VTRV9EQy4KKworICAgSWYgY29kZSBtYXkgYmUgcnVuIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHRoZW4gZGVmaW5lCisgICBNQVlCRV9WSVJULiAgVGhpcyB3aWxsIGNhdXNlIHRoZSBjb2RlIHRvIGNhY2hlIHRoZSBzeXN0ZW0gcmVnaXN0ZXIKKyAgIHZhbHVlcyByYXRoZXIgdGhhbiByZS1yZWFkaW5nIHRoZW0gZWFjaCBjYWxsLiAgKi8KKworI2RlZmluZSBkc3RpbgkJeDAKKyNkZWZpbmUgdmFsCQl3MQorI2RlZmluZSBjb3VudAkJeDIKKyNkZWZpbmUgdG1wMQkJeDMKKyNkZWZpbmUgdG1wMXcJCXczCisjZGVmaW5lIHRtcDIJCXg0CisjZGVmaW5lIHRtcDJ3CQl3NAorI2RlZmluZSB6dmFfbGVuX3gJeDUKKyNkZWZpbmUgenZhX2xlbgkJdzUKKyNkZWZpbmUgenZhX2JpdHNfeAl4NgorCisjZGVmaW5lIEFfbAkJeDcKKyNkZWZpbmUgQV9sdwkJdzcKKyNkZWZpbmUgZHN0CQl4OAorI2RlZmluZSB0bXAzdwkJdzkKKworI2RlZmluZSBRQV9sCQlxMAorCitFTlRSWShtZW1zZXQpCisKKwltb3YJZHN0LCBkc3RpbgkJLyogUHJlc2VydmUgcmV0dXJuIHZhbHVlLiAgKi8KKwlhbmRzCUFfbHcsIHZhbCwgIzI1NQorI2lmbmRlZiBET05UX1VTRV9EQworIwliLmVxCS5MemVyb19tZW0KKyNlbmRpZgorCW9ycglBX2x3LCBBX2x3LCBBX2x3LCBsc2wgIzgKKwlvcnIJQV9sdywgQV9sdywgQV9sdywgbHNsICMxNgorCW9ycglBX2wsIEFfbCwgQV9sLCBsc2wgIzMyCisuTHRhaWxfbWF5YmVfbG9uZzoKKwljbXAJY291bnQsICMyNTYKKwliLmdlCS5Mbm90X3Nob3J0CisuTHRhaWxfbWF5YmVfdGlueToKKwljbXAJY291bnQsICMxNQorCWIubGUJLkx0YWlsMTV0aW55CisuTHRhaWwyNTU6CisJYW5kcwl0bXAxLCBjb3VudCwgIzB4QzAKKwliLmVxCS5MdGFpbDYzCisJZHVwCXYwLjRzLCBBX2x3CisJY21wCXRtcDF3LCAjMHg4MAorCWIuZXEJMWYKKwliLmx0CTJmCisJc3RwCVFBX2wsIFFBX2wsIFtkc3RdLCAjMzIKKwlzdHAJUUFfbCwgUUFfbCwgW2RzdF0sICMzMgorMToKKwlzdHAJUUFfbCwgUUFfbCwgW2RzdF0sICMzMgorCXN0cAlRQV9sLCBRQV9sLCBbZHN0XSwgIzMyCisyOgorCXN0cAlRQV9sLCBRQV9sLCBbZHN0XSwgIzMyCisJc3RwCVFBX2wsIFFBX2wsIFtkc3RdLCAjMzIKKy5MdGFpbDYzOgorCWFuZHMJdG1wMSwgY291bnQsICMweDMwCisJYi5lcQkuTHRhaWwxNQorCWFkZAlkc3QsIGRzdCwgdG1wMQorCWNtcAl0bXAxdywgIzB4MjAKKwliLmVxCTFmCisJYi5sdAkyZgorCXN0cAlBX2wsIEFfbCwgW2RzdCwgIy00OF0KKzE6CisJc3RwCUFfbCwgQV9sLCBbZHN0LCAjLTMyXQorMjoKKwlzdHAJQV9sLCBBX2wsIFtkc3QsICMtMTZdCisKKy5MdGFpbDE1OgorCWFuZAljb3VudCwgY291bnQsICMxNQorCWFkZAlkc3QsIGRzdCwgY291bnQKKwlzdHAJQV9sLCBBX2wsIFtkc3QsICMtMTZdCS8qIFJlcGVhdCBzb21lL2FsbCBvZiBsYXN0IHN0b3JlLiAqLworCXJldAorCisuTHRhaWwxNXRpbnk6CisJLyogU2V0IHVwIHRvIDE1IGJ5dGVzLiAgRG9lcyBub3QgYXNzdW1lIGVhcmxpZXIgbWVtb3J5CisJICAgYmVpbmcgc2V0LiAgKi8KKwl0YnoJY291bnQsICMzLCAxZgorCXN0cglBX2wsIFtkc3RdLCAjOAorMToKKwl0YnoJY291bnQsICMyLCAxZgorCXN0cglBX2x3LCBbZHN0XSwgIzQKKzE6CisJdGJ6CWNvdW50LCAjMSwgMWYKKwlzdHJoCUFfbHcsIFtkc3RdLCAjMgorMToKKwl0YnoJY291bnQsICMwLCAxZgorCXN0cmIJQV9sdywgW2RzdF0KKzE6CisJcmV0CisKKwkvKiBDcml0aWNhbCBsb29wLiAgU3RhcnQgYXQgYSBuZXcgY2FjaGUgbGluZSBib3VuZGFyeS4gIEFzc3VtaW5nCisJICogNjQgYnl0ZXMgcGVyIGxpbmUsIHRoaXMgZW5zdXJlcyB0aGUgZW50aXJlIGxvb3AgaXMgaW4gb25lIGxpbmUuICAqLworCS5wMmFsaWduIDYKKy5Mbm90X3Nob3J0OgorCWR1cAl2MC40cywgQV9sdworCW5lZwl0bXAyLCBkc3QKKwlhbmRzCXRtcDIsIHRtcDIsICMxNQorCWIuZXEJMmYKKwkvKiBCcmluZyBEU1QgdG8gMTI4LWJpdCAoMTYtYnl0ZSkgYWxpZ25tZW50LiAgV2Uga25vdyB0aGF0IHRoZXJlJ3MKKwkgKiBtb3JlIHRoYW4gdGhhdCB0byBzZXQsIHNvIHdlIHNpbXBseSBzdG9yZSAxNiBieXRlcyBhbmQgYWR2YW5jZSBieQorCSAqIHRoZSBhbW91bnQgcmVxdWlyZWQgdG8gcmVhY2ggYWxpZ25tZW50LiAgKi8KKwlzdWIJY291bnQsIGNvdW50LCB0bXAyCisJc3RwCUFfbCwgQV9sLCBbZHN0XQorCWFkZAlkc3QsIGRzdCwgdG1wMgorCS8qIFRoZXJlIG1heSBiZSBsZXNzIHRoYW4gNjMgYnl0ZXMgdG8gZ28gbm93LiAgKi8KKwljbXAJY291bnQsICMyNTUKKwliLmxlCS5MdGFpbDI1NQorMjoKKwljbXAJY291bnQsICMyMDk3MTUyCisJYi5ndAkzZgorMToKKwlzdWIJY291bnQsIGNvdW50LCAjMjU2CisyOgorCXN0cAlRQV9sLCBRQV9sLCBbZHN0XSwgIzMyCisJc3RwCVFBX2wsIFFBX2wsIFtkc3RdLCAjMzIKKwlzdHAJUUFfbCwgUUFfbCwgW2RzdF0sICMzMgorCXN0cAlRQV9sLCBRQV9sLCBbZHN0XSwgIzMyCisJc3RwCVFBX2wsIFFBX2wsIFtkc3RdLCAjMzIKKwlzdHAJUUFfbCwgUUFfbCwgW2RzdF0sICMzMgorCXN0cAlRQV9sLCBRQV9sLCBbZHN0XSwgIzMyCisJc3RwCVFBX2wsIFFBX2wsIFtkc3RdLCAjMzIKKwlzdWJzCWNvdW50LCBjb3VudCwgIzI1NgorCWIuZ2UJMmIKKwl0c3QJY291bnQsICMweGZmCisJYi5uZQkuTHRhaWwyNTUKKwlyZXQKKzM6CisJc3ViCWNvdW50LCBjb3VudCwgIzY0Cis0OgorCXN1YnMJY291bnQsIGNvdW50LCAjNjQKKwlzdG5wCVFBX2wsIFFBX2wsIFtkc3RdCisJc3RucAlRQV9sLCBRQV9sLCBbZHN0LCAjMzJdCisJYWRkCWRzdCwgZHN0LCAjNjQKKwliLmdlCTRiCisJdHN0CWNvdW50LCAjMHgzZgorCWIubmUJLkx0YWlsNjMKKwlyZXQKKworI2lmbmRlZiBET05UX1VTRV9EQworCS8qIEZvciB6ZXJvaW5nIG1lbW9yeSwgY2hlY2sgdG8gc2VlIGlmIHdlIGNhbiB1c2UgdGhlIFpWQSBmZWF0dXJlIHRvCisJICogemVybyBlbnRpcmUgJ2NhY2hlJyBsaW5lcy4gICovCisuTHplcm9fbWVtOgorCW1vdglBX2wsICMwCisJY21wCWNvdW50LCAjNjMKKwliLmxlCS5MdGFpbF9tYXliZV90aW55CisJbmVnCXRtcDIsIGRzdAorCWFuZHMJdG1wMiwgdG1wMiwgIzE1CisJYi5lcQkxZgorCXN1Ygljb3VudCwgY291bnQsIHRtcDIKKwlzdHAJQV9sLCBBX2wsIFtkc3RdCisJYWRkCWRzdCwgZHN0LCB0bXAyCisJY21wCWNvdW50LCAjNjMKKwliLmxlCS5MdGFpbDYzCisxOgorCS8qIEZvciB6ZXJvaW5nIHNtYWxsIGFtb3VudHMgb2YgbWVtb3J5LCBpdCdzIG5vdCB3b3J0aCBzZXR0aW5nIHVwCisJICogdGhlIGxpbmUtY2xlYXIgY29kZS4gICovCisJY21wCWNvdW50LCAjMTI4CisJYi5sdAkuTG5vdF9zaG9ydAorI2lmZGVmIE1BWUJFX1ZJUlQKKwkvKiBGb3IgZWZmaWNpZW5jeSB3aGVuIHZpcnR1YWxpemVkLCB3ZSBjYWNoZSB0aGUgWlZBIGNhcGFiaWxpdHkuICAqLworCWFkcnAJdG1wMiwgLkxjYWNoZV9jbGVhcgorCWxkcgl6dmFfbGVuLCBbdG1wMiwgIzpsbzEyOi5MY2FjaGVfY2xlYXJdCisJdGJuegl6dmFfbGVuLCAjMzEsIC5Mbm90X3Nob3J0CisJY2Juegl6dmFfbGVuLCAuTHplcm9fYnlfbGluZQorCW1ycwl0bXAxLCBkY3ppZF9lbDAKKwl0YnoJdG1wMSwgIzQsIDFmCisJLyogWlZBIG5vdCBhdmFpbGFibGUuICBSZW1lbWJlciB0aGlzIGZvciBuZXh0IHRpbWUuICAqLworCW1vdgl6dmFfbGVuLCAjfjAKKwlzdHIJenZhX2xlbiwgW3RtcDIsICM6bG8xMjouTGNhY2hlX2NsZWFyXQorCWIJLkxub3Rfc2hvcnQKKzE6CisJbW92CXRtcDN3LCAjNAorCWFuZAl6dmFfbGVuLCB0bXAxdywgIzE1CS8qIFNhZmV0eTogb3RoZXIgYml0cyByZXNlcnZlZC4gICovCisJbHNsCXp2YV9sZW4sIHRtcDN3LCB6dmFfbGVuCisJc3RyCXp2YV9sZW4sIFt0bXAyLCAjOmxvMTI6LkxjYWNoZV9jbGVhcl0KKyNlbHNlCisJbXJzCXRtcDEsIGRjemlkX2VsMAorCXRibnoJdG1wMSwgIzQsIC5Mbm90X3Nob3J0CisJbW92CXRtcDN3LCAjNAorCWFuZAl6dmFfbGVuLCB0bXAxdywgIzE1CS8qIFNhZmV0eTogb3RoZXIgYml0cyByZXNlcnZlZC4gICovCisJbHNsCXp2YV9sZW4sIHRtcDN3LCB6dmFfbGVuCisjZW5kaWYKKworLkx6ZXJvX2J5X2xpbmU6CisJLyogQ29tcHV0ZSBob3cgZmFyIHdlIG5lZWQgdG8gZ28gdG8gYmVjb21lIHN1aXRhYmx5IGFsaWduZWQuICBXZSdyZQorCSAqIGFscmVhZHkgYXQgcXVhZC13b3JkIGFsaWdubWVudC4gICovCisJY21wCWNvdW50LCB6dmFfbGVuX3gKKwliLmx0CS5Mbm90X3Nob3J0CQkvKiBOb3QgZW5vdWdoIHRvIHJlYWNoIGFsaWdubWVudC4gICovCisJc3ViCXp2YV9iaXRzX3gsIHp2YV9sZW5feCwgIzEKKwluZWcJdG1wMiwgZHN0CisJYW5kcwl0bXAyLCB0bXAyLCB6dmFfYml0c194CisJYi5lcQkxZgkJCS8qIEFscmVhZHkgYWxpZ25lZC4gICovCisJLyogTm90IGFsaWduZWQsIGNoZWNrIHRoYXQgdGhlcmUncyBlbm91Z2ggdG8gY29weSBhZnRlciBhbGlnbm1lbnQuICAqLworCXN1Ygl0bXAxLCBjb3VudCwgdG1wMgorCWNtcAl0bXAxLCAjNjQKKwljY21wCXRtcDEsIHp2YV9sZW5feCwgIzgsIGdlCS8qIE5aQ1Y9MGIxMDAwICovCisJYi5sdAkuTG5vdF9zaG9ydAorCS8qIFdlIGtub3cgdGhhdCB0aGVyZSdzIGF0IGxlYXN0IDY0IGJ5dGVzIHRvIHplcm8gYW5kIHRoYXQgaXQncyBzYWZlCisJICogdG8gb3ZlcnJ1biBieSA2NCBieXRlcy4gICovCisJbW92CWNvdW50LCB0bXAxCisyOgorCXN0cAlBX2wsIEFfbCwgW2RzdF0KKwlzdHAJQV9sLCBBX2wsIFtkc3QsICMxNl0KKwlzdHAJQV9sLCBBX2wsIFtkc3QsICMzMl0KKwlzdWJzCXRtcDIsIHRtcDIsICM2NAorCXN0cAlBX2wsIEFfbCwgW2RzdCwgIzQ4XQorCWFkZAlkc3QsIGRzdCwgIzY0CisJYi5nZQkyYgorCS8qIFdlJ3ZlIG92ZXJydW4gYSBiaXQsIHNvIGFkanVzdCBkc3QgZG93bndhcmRzLiAgKi8KKwlhZGQJZHN0LCBkc3QsIHRtcDIKKzE6CisJc3ViCWNvdW50LCBjb3VudCwgenZhX2xlbl94CiszOgorCWRjCXp2YSwgZHN0CisJYWRkCWRzdCwgZHN0LCB6dmFfbGVuX3gKKwlzdWJzCWNvdW50LCBjb3VudCwgenZhX2xlbl94CisJYi5nZQkzYgorCWFuZHMJY291bnQsIGNvdW50LCB6dmFfYml0c194CisJYi5uZQkuTHRhaWxfbWF5YmVfbG9uZworCXJldAorRU5EKG1lbXNldCkKKworI2lmZGVmIE1BWUJFX1ZJUlQKKwkuYnNzCisJLnAyYWxpZ24gMgorLkxjYWNoZV9jbGVhcjoKKwkuc3BhY2UgNAorI2VuZGlmCisjZW5kaWYgLyogRE9OVF9VU0VfREMgKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9kZW52ZXI2NC9kZW52ZXI2NC5tayBiL2xpYmMvYXJjaC1hcm02NC9kZW52ZXI2NC9kZW52ZXI2NC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjE5YzExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L2RlbnZlcjY0L2RlbnZlcjY0Lm1rCkBAIC0wLDAgKzEsMTQgQEAKK2xpYmNfYmlvbmljX3NyY19maWxlc19hcm02NCArPSBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9tZW1jaHIuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9tZW1jbXAuUyBcCisgICAgYXJjaC1hcm02NC9kZW52ZXI2NC9iaW9uaWMvbWVtY3B5LlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtbW92ZS5TIFwKKyAgICBhcmNoLWFybTY0L2RlbnZlcjY0L2Jpb25pYy9tZW1zZXQuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHBjcHkuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJjaHIuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJjbXAuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJjcHkuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJsZW4uUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJuY21wLlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3Rybmxlbi5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3dtZW1tb3ZlLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljLW5lb24vYmlvbmljL21lbWNweS5TIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMtbmVvbi9iaW9uaWMvbWVtY3B5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIwZjc0OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljLW5lb24vYmlvbmljL21lbWNweS5TCkBAIC0wLDAgKzEsMTc5IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTIsIExpbmFybyBMaW1pdGVkCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgTGluYXJvIG5vciB0aGUKKyAgICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisvKiBBc3N1bXB0aW9uczoKKyAqCisgKiBBUk12OC1hLCBBQXJjaDY0CisgKiBVbmFsaWduZWQgYWNjZXNzZXMKKyAqCisgKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCisjZGVmaW5lIGRzdGluCXgwCisjZGVmaW5lIHNyYwl4MQorI2RlZmluZSBjb3VudAl4MgorI2RlZmluZSB0bXAxCXgzCisjZGVmaW5lIHRtcDF3CXczCisjZGVmaW5lIHRtcDIJeDQKKyNkZWZpbmUgdG1wMncJdzQKKyNkZWZpbmUgdG1wMwl4NQorI2RlZmluZSB0bXAzdwl3NQorI2RlZmluZSBkc3QJeDYKKworI2RlZmluZSBBX2wJeDcKKyNkZWZpbmUgQV9oCXg4CisjZGVmaW5lIEJfbAl4OQorI2RlZmluZSBCX2gJeDEwCisjZGVmaW5lIENfbAl4MTEKKyNkZWZpbmUgQ19oCXgxMgorI2RlZmluZSBEX2wJeDEzCisjZGVmaW5lIERfaAl4MTQKKworI2RlZmluZSBRQV9sIHEwCisjZGVmaW5lIFFBX2ggcTEKKyNkZWZpbmUgUUJfbCBxMgorI2RlZmluZSBRQl9oIHEzCisKK0VOVFJZKG1lbWNweSkKKworCW1vdglkc3QsIGRzdGluCisJY21wCWNvdW50LCAjNjQKKwliLmdlCS5MY3B5X25vdF9zaG9ydAorCWNtcAljb3VudCwgIzE1CisJYi5sZQkuTHRhaWwxNXRpbnkKKworCS8qIERlYWwgd2l0aCBzbWFsbCBjb3BpZXMgcXVpY2tseSBieSBkcm9wcGluZyBzdHJhaWdodCBpbnRvIHRoZQorCSAqIGV4aXQgYmxvY2suICAqLworLkx0YWlsNjM6CisJLyogQ29weSB1cCB0byA0OCBieXRlcyBvZiBkYXRhLiAgQXQgdGhpcyBwb2ludCB3ZSBvbmx5IG5lZWQgdGhlCisJICogYm90dG9tIDYgYml0cyBvZiBjb3VudCB0byBiZSBhY2N1cmF0ZS4gICovCisJYW5kcwl0bXAxLCBjb3VudCwgIzB4MzAKKwliLmVxCS5MdGFpbDE1CisJYWRkCWRzdCwgZHN0LCB0bXAxCisJYWRkCXNyYywgc3JjLCB0bXAxCisJY21wCXRtcDF3LCAjMHgyMAorCWIuZXEJMWYKKwliLmx0CTJmCisJbGRwCUFfbCwgQV9oLCBbc3JjLCAjLTQ4XQorCXN0cAlBX2wsIEFfaCwgW2RzdCwgIy00OF0KKzE6CisJbGRwCUFfbCwgQV9oLCBbc3JjLCAjLTMyXQorCXN0cAlBX2wsIEFfaCwgW2RzdCwgIy0zMl0KKzI6CisJbGRwCUFfbCwgQV9oLCBbc3JjLCAjLTE2XQorCXN0cAlBX2wsIEFfaCwgW2RzdCwgIy0xNl0KKworLkx0YWlsMTU6CisJYW5kcwljb3VudCwgY291bnQsICMxNQorCWJlcQkxZgorCWFkZAlzcmMsIHNyYywgY291bnQKKwlsZHAJQV9sLCBBX2gsIFtzcmMsICMtMTZdCisJYWRkCWRzdCwgZHN0LCBjb3VudAorCXN0cAlBX2wsIEFfaCwgW2RzdCwgIy0xNl0KKzE6CisJcmV0CisKKy5MdGFpbDE1dGlueToKKwkvKiBDb3B5IHVwIHRvIDE1IGJ5dGVzIG9mIGRhdGEuICBEb2VzIG5vdCBhc3N1bWUgYWRkaXRpb25hbCBkYXRhCisJICAgYmVpbmcgY29waWVkLiAgKi8KKwl0YnoJY291bnQsICMzLCAxZgorCWxkcgl0bXAxLCBbc3JjXSwgIzgKKwlzdHIJdG1wMSwgW2RzdF0sICM4CisxOgorCXRiegljb3VudCwgIzIsIDFmCisJbGRyCXRtcDF3LCBbc3JjXSwgIzQKKwlzdHIJdG1wMXcsIFtkc3RdLCAjNAorMToKKwl0YnoJY291bnQsICMxLCAxZgorCWxkcmgJdG1wMXcsIFtzcmNdLCAjMgorCXN0cmgJdG1wMXcsIFtkc3RdLCAjMgorMToKKwl0YnoJY291bnQsICMwLCAxZgorCWxkcmIJdG1wMXcsIFtzcmNdCisJc3RyYgl0bXAxdywgW2RzdF0KKzE6CisJcmV0CisKKy5MY3B5X25vdF9zaG9ydDoKKwkvKiBXZSBkb24ndCBtdWNoIGNhcmUgYWJvdXQgdGhlIGFsaWdubWVudCBvZiBEU1QsIGJ1dCB3ZSB3YW50IFNSQworCSAqIHRvIGJlIDEyOC1iaXQgKDE2IGJ5dGUpIGFsaWduZWQgc28gdGhhdCB3ZSBkb24ndCBjcm9zcyBjYWNoZSBsaW5lCisJICogYm91bmRhcmllcyBvbiBib3RoIGxvYWRzIGFuZCBzdG9yZXMuICAqLworCW5lZwl0bXAyLCBzcmMKKwlhbmRzCXRtcDIsIHRtcDIsICMxNQkJLyogQnl0ZXMgdG8gcmVhY2ggYWxpZ25tZW50LiAgKi8KKwliLmVxCTJmCisJc3ViCWNvdW50LCBjb3VudCwgdG1wMgorCS8qIENvcHkgbW9yZSBkYXRhIHRoYW4gbmVlZGVkOyBpdCdzIGZhc3RlciB0aGFuIGp1bXBpbmcKKwkgKiBhcm91bmQgY29weWluZyBzdWItUXVhZHdvcmQgcXVhbnRpdGllcy4gIFdlIGtub3cgdGhhdAorCSAqIGl0IGNhbid0IG92ZXJydW4uICAqLworCWxkcAlBX2wsIEFfaCwgW3NyY10KKwlhZGQJc3JjLCBzcmMsIHRtcDIKKwlzdHAJQV9sLCBBX2gsIFtkc3RdCisJYWRkCWRzdCwgZHN0LCB0bXAyCisJLyogVGhlcmUgbWF5IGJlIGxlc3MgdGhhbiA2MyBieXRlcyB0byBnbyBub3cuICAqLworCWNtcAljb3VudCwgIzYzCisJYi5sZQkuTHRhaWw2MworMjoKKwlzdWJzCWNvdW50LCBjb3VudCwgIzEyOAorCWIuZ2UJLkxjcHlfYm9keV9sYXJnZQorCS8qIExlc3MgdGhhbiAxMjggYnl0ZXMgdG8gY29weSwgc28gaGFuZGxlIDY0IGhlcmUgYW5kIHRoZW4ganVtcAorCSAqIHRvIHRoZSB0YWlsLiAgKi8KKwlsZHAgUUFfbCwgUUFfaCwgW3NyY10KKwlsZHAgUUJfbCwgUUJfaCwgW3NyYywgIzMyXQorCXN0cCBRQV9sLCBRQV9oLCBbZHN0XQorCXN0cCBRQl9sLCBRQl9oLCBbZHN0LCAjMzJdCisJdHN0CWNvdW50LCAjMHgzZgorCWFkZAlzcmMsIHNyYywgIzY0CisJYWRkCWRzdCwgZHN0LCAjNjQKKwliLm5lCS5MdGFpbDYzCisJcmV0CisKKwkvKiBDcml0aWNhbCBsb29wLiAgU3RhcnQgYXQgYSBuZXcgY2FjaGUgbGluZSBib3VuZGFyeS4gIEFzc3VtaW5nCisJICogNjQgYnl0ZXMgcGVyIGxpbmUgdGhpcyBlbnN1cmVzIHRoZSBlbnRpcmUgbG9vcCBpcyBpbiBvbmUgbGluZS4gICovCisJLnAyYWxpZ24gNgorLkxjcHlfYm9keV9sYXJnZToKKwkvKiBUaGVyZSBhcmUgYXQgbGVhc3QgMTI4IGJ5dGVzIHRvIGNvcHkuICAqLworCWxkcCBRQV9sLCBRQV9oLCBbc3JjLCAjMF0KKwlzdWIJZHN0LCBkc3QsICMzMgkJLyogUHJlLWJpYXMuICAqLworCWxkcCBRQl9sLCBRQl9oLCBbc3JjLCAjMzJdIQkvKiBzcmMgKz0gNjQgLSBQcmUtYmlhcy4gICovCisxOgorCXN0cCBRQV9sLCBRQV9oLCBbZHN0LCAjMzJdCisJbGRwIFFBX2wsIFFBX2gsIFtzcmMsICMzMl0KKwlzdHAgUUJfbCwgUUJfaCwgW2RzdCwgIzY0XSEKKwlsZHAgUUJfbCwgUUJfaCwgW3NyYywgIzY0XSEKKworCXN1YnMJY291bnQsIGNvdW50LCAjNjQKKwliLmdlCTFiCisKKwlzdHAgUUFfbCwgUUFfaCwgW2RzdCwgIzMyXQorCXN0cCBRQl9sLCBRQl9oLCBbZHN0LCAjNjRdCisJYWRkCXNyYywgc3JjLCAjMzIKKwlhZGQJZHN0LCBkc3QsICM2NCArIDMyCisJdHN0CWNvdW50LCAjMHgzZgorCWIubmUJLkx0YWlsNjMKKwlyZXQKK0VORChtZW1jcHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy1uZW9uL2dlbmVyaWMtbmVvbi5tayBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljLW5lb24vZ2VuZXJpYy1uZW9uLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZTM4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy1uZW9uL2dlbmVyaWMtbmVvbi5tawpAQCAtMCwwICsxLDEzIEBACitsaWJjX2Jpb25pY19zcmNfZmlsZXNfYXJtNjQgKz0gXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtY2hyLlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtY21wLlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtbW92ZS5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbXNldC5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cGNweS5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmNoci5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmNtcC5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmNweS5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmxlbi5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cm5jbXAuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJubGVuLlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy1uZW9uL2Jpb25pYy9tZW1jcHkuUyBcCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtY2hyLlMgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtY2hyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVlYTU3ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9tZW1jaHIuUwpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIG1lbWNociAtIGZpbmQgYSBjaGFyYWN0ZXIgaW4gYSBtZW1vcnkgem9uZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgQVJNIExpbWl0ZWQKKyAqIEFsbCByaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIExpbmFybyBMdGQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvbXBhbnkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIEFzc3VtcHRpb25zOgorICoKKyAqIEFSTXY4LWEsIEFBcmNoNjQKKyAqIE5lb24gQXZhaWxhYmxlLgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworLyogQXJndW1lbnRzIGFuZCByZXN1bHRzLiAgKi8KKyNkZWZpbmUgc3JjaW4JCXgwCisjZGVmaW5lIGNocmluCQl3MQorI2RlZmluZSBjbnRpbgkJeDIKKworI2RlZmluZSByZXN1bHQJCXgwCisKKyNkZWZpbmUgc3JjCQl4MworI2RlZmluZQl0bXAJCXg0CisjZGVmaW5lIHd0bXAyCQl3NQorI2RlZmluZSBzeW5kCQl4NgorI2RlZmluZSBzb2ZmCQl4OQorI2RlZmluZSBjbnRyZW0JCXgxMAorCisjZGVmaW5lIHZyZXBjaHIJCXYwCisjZGVmaW5lIHZkYXRhMQkJdjEKKyNkZWZpbmUgdmRhdGEyCQl2MgorI2RlZmluZSB2aGFzX2NocjEJdjMKKyNkZWZpbmUgdmhhc19jaHIyCXY0CisjZGVmaW5lIHZyZXBtYXNrCXY1CisjZGVmaW5lIHZlbmQJCXY2CisKKy8qCisgKiBDb3JlIGFsZ29yaXRobToKKyAqCisgKiBGb3IgZWFjaCAzMi1ieXRlIGNodW5rIHdlIGNhbGN1bGF0ZSBhIDY0LWJpdCBzeW5kcm9tZSB2YWx1ZSwgd2l0aCB0d28gYml0cworICogcGVyIGJ5dGUuIEZvciBlYWNoIHR1cGxlLCBiaXQgMCBpcyBzZXQgaWYgdGhlIHJlbGV2YW50IGJ5dGUgbWF0Y2hlZCB0aGUKKyAqIHJlcXVlc3RlZCBjaGFyYWN0ZXIgYW5kIGJpdCAxIGlzIG5vdCB1c2VkIChmYXN0ZXIgdGhhbiB1c2luZyBhIDMyYml0CisgKiBzeW5kcm9tZSkuIFNpbmNlIHRoZSBiaXRzIGluIHRoZSBzeW5kcm9tZSByZWZsZWN0IGV4YWN0bHkgdGhlIG9yZGVyIGluIHdoaWNoCisgKiB0aGluZ3Mgb2NjdXIgaW4gdGhlIG9yaWdpbmFsIHN0cmluZywgY291bnRpbmcgdHJhaWxpbmcgemVyb3MgYWxsb3dzIHRvCisgKiBpZGVudGlmeSBleGFjdGx5IHdoaWNoIGJ5dGUgaGFzIG1hdGNoZWQuCisgKi8KKworRU5UUlkobWVtY2hyKQorCS8qCisJICogTWFnaWMgY29uc3RhbnQgMHg0MDEwMDQwMSBhbGxvd3MgdXMgdG8gaWRlbnRpZnkgd2hpY2ggbGFuZSBtYXRjaGVzCisJICogdGhlIHJlcXVlc3RlZCBieXRlLgorCSAqLworCWNiegljbnRpbiwgLkx6ZXJvX2xlbmd0aAorCW1vdgl3dG1wMiwgIzB4MDQwMQorCW1vdmsJd3RtcDIsICMweDQwMTAsIGxzbCAjMTYKKwlkdXAJdnJlcGNoci4xNmIsIGNocmluCisJLyogV29yayB3aXRoIGFsaWduZWQgMzItYnl0ZSBjaHVua3MgKi8KKwliaWMJc3JjLCBzcmNpbiwgIzMxCisJZHVwCXZyZXBtYXNrLjRzLCB3dG1wMgorCWFuZHMJc29mZiwgc3JjaW4sICMzMQorCWFuZAljbnRyZW0sIGNudGluLCAjMzEKKwliLmVxCS5MbG9vcAorCisJLyoKKwkgKiBJbnB1dCBzdHJpbmcgaXMgbm90IDMyLWJ5dGUgYWxpZ25lZC4gV2UgY2FsY3VsYXRlIHRoZSBzeW5kcm9tZQorCSAqIHZhbHVlIGZvciB0aGUgYWxpZ25lZCAzMiBieXRlcyBibG9jayBjb250YWluaW5nIHRoZSBmaXJzdCBieXRlcworCSAqIGFuZCBtYXNrIHRoZSBpcnJlbGV2YW50IHBhcnQuCisJICovCisKKwlsZDEJe3ZkYXRhMS4xNmIsIHZkYXRhMi4xNmJ9LCBbc3JjXSwgIzMyCisJc3ViCXRtcCwgc29mZiwgIzMyCisJYWRkcwljbnRpbiwgY250aW4sIHRtcAorCWNtZXEJdmhhc19jaHIxLjE2YiwgdmRhdGExLjE2YiwgdnJlcGNoci4xNmIKKwljbWVxCXZoYXNfY2hyMi4xNmIsIHZkYXRhMi4xNmIsIHZyZXBjaHIuMTZiCisJYW5kCXZoYXNfY2hyMS4xNmIsIHZoYXNfY2hyMS4xNmIsIHZyZXBtYXNrLjE2YgorCWFuZAl2aGFzX2NocjIuMTZiLCB2aGFzX2NocjIuMTZiLCB2cmVwbWFzay4xNmIKKwlhZGRwCXZlbmQuMTZiLCB2aGFzX2NocjEuMTZiLCB2aGFzX2NocjIuMTZiCQkvKiAyNTYtPjEyOCAqLworCWFkZHAJdmVuZC4xNmIsIHZlbmQuMTZiLCB2ZW5kLjE2YgkJCS8qIDEyOC0+NjQgKi8KKwltb3YJc3luZCwgdmVuZC4yZFswXQorCS8qIENsZWFyIHRoZSBzb2ZmKjIgbG93ZXIgYml0cyAqLworCWxzbAl0bXAsIHNvZmYsICMxCisJbHNyCXN5bmQsIHN5bmQsIHRtcAorCWxzbAlzeW5kLCBzeW5kLCB0bXAKKwkvKiBUaGUgZmlyc3QgYmxvY2sgY2FuIGFsc28gYmUgdGhlIGxhc3QgKi8KKwliLmxzCS5MbWFza2xhc3QKKwkvKiBIYXZlIHdlIGZvdW5kIHNvbWV0aGluZyBhbHJlYWR5PyAqLworCWNibnoJc3luZCwgLkx0YWlsCisKKy5MbG9vcDoKKwlsZDEJe3ZkYXRhMS4xNmIsIHZkYXRhMi4xNmJ9LCBbc3JjXSwgIzMyCisJc3VicwljbnRpbiwgY250aW4sICMzMgorCWNtZXEJdmhhc19jaHIxLjE2YiwgdmRhdGExLjE2YiwgdnJlcGNoci4xNmIKKwljbWVxCXZoYXNfY2hyMi4xNmIsIHZkYXRhMi4xNmIsIHZyZXBjaHIuMTZiCisJLyogSWYgd2UncmUgb3V0IG9mIGRhdGEgd2UgZmluaXNoIHJlZ2FyZGxlc3Mgb2YgdGhlIHJlc3VsdCAqLworCWIubHMJLkxlbmQKKwkvKiBVc2UgYSBmYXN0IGNoZWNrIGZvciB0aGUgdGVybWluYXRpb24gY29uZGl0aW9uICovCisJb3JyCXZlbmQuMTZiLCB2aGFzX2NocjEuMTZiLCB2aGFzX2NocjIuMTZiCisJYWRkcAl2ZW5kLjJkLCB2ZW5kLjJkLCB2ZW5kLjJkCisJbW92CXN5bmQsIHZlbmQuMmRbMF0KKwkvKiBXZSdyZSBub3Qgb3V0IG9mIGRhdGEsIGxvb3AgaWYgd2UgaGF2ZW4ndCBmb3VuZCB0aGUgY2hhcmFjdGVyICovCisJY2J6CXN5bmQsIC5MbG9vcAorCisuTGVuZDoKKwkvKiBUZXJtaW5hdGlvbiBjb25kaXRpb24gZm91bmQsIGxldCdzIGNhbGN1bGF0ZSB0aGUgc3luZHJvbWUgdmFsdWUgKi8KKwlhbmQJdmhhc19jaHIxLjE2Yiwgdmhhc19jaHIxLjE2YiwgdnJlcG1hc2suMTZiCisJYW5kCXZoYXNfY2hyMi4xNmIsIHZoYXNfY2hyMi4xNmIsIHZyZXBtYXNrLjE2YgorCWFkZHAJdmVuZC4xNmIsIHZoYXNfY2hyMS4xNmIsIHZoYXNfY2hyMi4xNmIJCS8qIDI1Ni0+MTI4ICovCisJYWRkcAl2ZW5kLjE2YiwgdmVuZC4xNmIsIHZlbmQuMTZiCQkJLyogMTI4LT42NCAqLworCW1vdglzeW5kLCB2ZW5kLjJkWzBdCisJLyogT25seSBkbyB0aGUgY2xlYXIgZm9yIHRoZSBsYXN0IHBvc3NpYmxlIGJsb2NrICovCisJYi5oaQkuTHRhaWwKKworLkxtYXNrbGFzdDoKKwkvKiBDbGVhciB0aGUgKDMyIC0gKChjbnRyZW0gKyBzb2ZmKSAlIDMyKSkgKiAyIHVwcGVyIGJpdHMgKi8KKwlhZGQJdG1wLCBjbnRyZW0sIHNvZmYKKwlhbmQJdG1wLCB0bXAsICMzMQorCXN1Ygl0bXAsIHRtcCwgIzMyCisJbmVnCXRtcCwgdG1wLCBsc2wgIzEKKwlsc2wJc3luZCwgc3luZCwgdG1wCisJbHNyCXN5bmQsIHN5bmQsIHRtcAorCisuTHRhaWw6CisJLyogQ291bnQgdGhlIHRyYWlsaW5nIHplcm9zIHVzaW5nIGJpdCByZXZlcnNpbmcgKi8KKwlyYml0CXN5bmQsIHN5bmQKKwkvKiBDb21wZW5zYXRlIHRoZSBsYXN0IHBvc3QtaW5jcmVtZW50ICovCisJc3ViCXNyYywgc3JjLCAjMzIKKwkvKiBDaGVjayB0aGF0IHdlIGhhdmUgZm91bmQgYSBjaGFyYWN0ZXIgKi8KKwljbXAJc3luZCwgIzAKKwkvKiBBbmQgY291bnQgdGhlIGxlYWRpbmcgemVyb3MgKi8KKwljbHoJc3luZCwgc3luZAorCS8qIENvbXB1dGUgdGhlIHBvdGVudGlhbCByZXN1bHQgKi8KKwlhZGQJcmVzdWx0LCBzcmMsIHN5bmQsIGxzciAjMQorCS8qIFNlbGVjdCByZXN1bHQgb3IgTlVMTCAqLworCWNzZWwJcmVzdWx0LCB4enIsIHJlc3VsdCwgZXEKKwlyZXQKKworLkx6ZXJvX2xlbmd0aDoKKwltb3YJcmVzdWx0LCB4enIKKwlyZXQKK0VORChtZW1jaHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtY21wLlMgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtY21wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QwOGVjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9tZW1jbXAuUwpAQCAtMCwwICsxLDE1NSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE0LCBMaW5hcm8gTGltaXRlZAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIExpbmFybyBub3IgdGhlCisgICAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworLyogQXNzdW1wdGlvbnM6CisgKgorICogQVJNdjgtYSwgQUFyY2g2NAorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworLyogUGFyYW1ldGVycyBhbmQgcmVzdWx0LiAgKi8KKyNkZWZpbmUgc3JjMQkJeDAKKyNkZWZpbmUgc3JjMgkJeDEKKyNkZWZpbmUgbGltaXQJCXgyCisjZGVmaW5lIHJlc3VsdAkJeDAKKworLyogSW50ZXJuYWwgdmFyaWFibGVzLiAgKi8KKyNkZWZpbmUgZGF0YTEJCXgzCisjZGVmaW5lIGRhdGExdwkJdzMKKyNkZWZpbmUgZGF0YTIJCXg0CisjZGVmaW5lIGRhdGEydwkJdzQKKyNkZWZpbmUgaGFzX251bAkJeDUKKyNkZWZpbmUgZGlmZgkJeDYKKyNkZWZpbmUgZW5kbG9vcAkJeDcKKyNkZWZpbmUgdG1wMQkJeDgKKyNkZWZpbmUgdG1wMgkJeDkKKyNkZWZpbmUgdG1wMwkJeDEwCisjZGVmaW5lIHBvcwkJeDExCisjZGVmaW5lIGxpbWl0X3dkCXgxMgorI2RlZmluZSBtYXNrCQl4MTMKKworRU5UUlkobWVtY21wKQorCWNieglsaW1pdCwgLkxyZXQwCisJZW9yCXRtcDEsIHNyYzEsIHNyYzIKKwl0c3QJdG1wMSwgIzcKKwliLm5lCS5MbWlzYWxpZ25lZDgKKwlhbmRzCXRtcDEsIHNyYzEsICM3CisJYi5uZQkuTG11dHVhbF9hbGlnbgorCWFkZAlsaW1pdF93ZCwgbGltaXQsICM3CisJbHNyCWxpbWl0X3dkLCBsaW1pdF93ZCwgIzMKKwkvKiBTdGFydCBvZiBwZXJmb3JtYW5jZS1jcml0aWNhbCBzZWN0aW9uICAtLSBvbmUgNjRCIGNhY2hlIGxpbmUuICAqLworLkxsb29wX2FsaWduZWQ6CisJbGRyCWRhdGExLCBbc3JjMV0sICM4CisJbGRyCWRhdGEyLCBbc3JjMl0sICM4CisuTHN0YXJ0X3JlYWxpZ25lZDoKKwlzdWJzCWxpbWl0X3dkLCBsaW1pdF93ZCwgIzEKKwllb3IJZGlmZiwgZGF0YTEsIGRhdGEyCS8qIE5vbi16ZXJvIGlmIGRpZmZlcmVuY2VzIGZvdW5kLiAgKi8KKwljc2ludgllbmRsb29wLCBkaWZmLCB4enIsIG5lCS8qIExhc3QgRHdvcmQgb3IgZGlmZmVyZW5jZXMuICAqLworCWNiegllbmRsb29wLCAuTGxvb3BfYWxpZ25lZAorCS8qIEVuZCBvZiBwZXJmb3JtYW5jZS1jcml0aWNhbCBzZWN0aW9uICAtLSBvbmUgNjRCIGNhY2hlIGxpbmUuICAqLworCisJLyogTm90IHJlYWNoZWQgdGhlIGxpbWl0LCBtdXN0IGhhdmUgZm91bmQgYSBkaWZmLiAgKi8KKwljYm56CWxpbWl0X3dkLCAuTG5vdF9saW1pdAorCisJLyogTGltaXQgJSA4ID09IDAgPT4gYWxsIGJ5dGVzIHNpZ25pZmljYW50LiAgKi8KKwlhbmRzCWxpbWl0LCBsaW1pdCwgIzcKKwliLmVxCS5Mbm90X2xpbWl0CisKKwlsc2wJbGltaXQsIGxpbWl0LCAjMwkvKiBCaXRzIC0+IGJ5dGVzLiAgKi8KKwltb3YJbWFzaywgI34wCisjaWZkZWYgX19BQVJDSDY0RUJfXworCWxzcgltYXNrLCBtYXNrLCBsaW1pdAorI2Vsc2UKKwlsc2wJbWFzaywgbWFzaywgbGltaXQKKyNlbmRpZgorCWJpYwlkYXRhMSwgZGF0YTEsIG1hc2sKKwliaWMJZGF0YTIsIGRhdGEyLCBtYXNrCisKKwlvcnIJZGlmZiwgZGlmZiwgbWFzaworLkxub3RfbGltaXQ6CisKKyNpZm5kZWYJX19BQVJDSDY0RUJfXworCXJldglkaWZmLCBkaWZmCisJcmV2CWRhdGExLCBkYXRhMQorCXJldglkYXRhMiwgZGF0YTIKKyNlbmRpZgorCS8qIFRoZSBNUy1ub24temVybyBiaXQgb2YgRElGRiBtYXJrcyBlaXRoZXIgdGhlIGZpcnN0IGJpdAorCSAgIHRoYXQgaXMgZGlmZmVyZW50LCBvciB0aGUgZW5kIG9mIHRoZSBzaWduaWZpY2FudCBkYXRhLgorCSAgIFNoaWZ0aW5nIGxlZnQgbm93IHdpbGwgYnJpbmcgdGhlIGNyaXRpY2FsIGluZm9ybWF0aW9uIGludG8gdGhlCisJICAgdG9wIGJpdHMuICAqLworCWNseglwb3MsIGRpZmYKKwlsc2wJZGF0YTEsIGRhdGExLCBwb3MKKwlsc2wJZGF0YTIsIGRhdGEyLCBwb3MKKwkvKiBCdXQgd2UgbmVlZCB0byB6ZXJvLWV4dGVuZCAoY2hhciBpcyB1bnNpZ25lZCkgdGhlIHZhbHVlIGFuZCB0aGVuCisJICAgcGVyZm9ybSBhIHNpZ25lZCAzMi1iaXQgc3VidHJhY3Rpb24uICAqLworCWxzcglkYXRhMSwgZGF0YTEsICM1NgorCXN1YglyZXN1bHQsIGRhdGExLCBkYXRhMiwgbHNyICM1NgorCXJldAorCisuTG11dHVhbF9hbGlnbjoKKwkvKiBTb3VyY2VzIGFyZSBtdXR1YWxseSBhbGlnbmVkLCBidXQgYXJlIG5vdCBjdXJyZW50bHkgYXQgYW4KKwkgICBhbGlnbm1lbnQgYm91bmRhcnkuICBSb3VuZCBkb3duIHRoZSBhZGRyZXNzZXMgYW5kIHRoZW4gbWFzayBvZmYKKwkgICB0aGUgYnl0ZXMgdGhhdCBwcmVjZWRlIHRoZSBzdGFydCBwb2ludC4gICovCisJYmljCXNyYzEsIHNyYzEsICM3CisJYmljCXNyYzIsIHNyYzIsICM3CisJYWRkCWxpbWl0LCBsaW1pdCwgdG1wMQkvKiBBZGp1c3QgdGhlIGxpbWl0IGZvciB0aGUgZXh0cmEuICAqLworCWxzbAl0bXAxLCB0bXAxLCAjMwkJLyogQnl0ZXMgYmV5b25kIGFsaWdubWVudCAtPiBiaXRzLiAgKi8KKwlsZHIJZGF0YTEsIFtzcmMxXSwgIzgKKwluZWcJdG1wMSwgdG1wMQkJLyogQml0cyB0byBhbGlnbm1lbnQgLTY0LiAgKi8KKwlsZHIJZGF0YTIsIFtzcmMyXSwgIzgKKwltb3YJdG1wMiwgI34wCisjaWZkZWYgX19BQVJDSDY0RUJfXworCS8qIEJpZy1lbmRpYW4uICBFYXJseSBieXRlcyBhcmUgYXQgTVNCLiAgKi8KKwlsc2wJdG1wMiwgdG1wMiwgdG1wMQkvKiBTaGlmdCAodG1wMSAmIDYzKS4gICovCisjZWxzZQorCS8qIExpdHRsZS1lbmRpYW4uICBFYXJseSBieXRlcyBhcmUgYXQgTFNCLiAgKi8KKwlsc3IJdG1wMiwgdG1wMiwgdG1wMQkvKiBTaGlmdCAodG1wMSAmIDYzKS4gICovCisjZW5kaWYKKwlhZGQJbGltaXRfd2QsIGxpbWl0LCAjNworCW9ycglkYXRhMSwgZGF0YTEsIHRtcDIKKwlvcnIJZGF0YTIsIGRhdGEyLCB0bXAyCisJbHNyCWxpbWl0X3dkLCBsaW1pdF93ZCwgIzMKKwliCS5Mc3RhcnRfcmVhbGlnbmVkCisKKy5McmV0MDoKKwltb3YJcmVzdWx0LCAjMAorCXJldAorCisJLnAyYWxpZ24gNgorLkxtaXNhbGlnbmVkODoKKwlzdWIJbGltaXQsIGxpbWl0LCAjMQorMToKKwkvKiBQZXJoYXBzIHdlIGNhbiBkbyBiZXR0ZXIgdGhhbiB0aGlzLiAgKi8KKwlsZHJiCWRhdGExdywgW3NyYzFdLCAjMQorCWxkcmIJZGF0YTJ3LCBbc3JjMl0sICMxCisJc3VicwlsaW1pdCwgbGltaXQsICMxCisJY2NtcAlkYXRhMXcsIGRhdGEydywgIzAsIGNzCS8qIE5aQ1YgPSAwYjAwMDAuICAqLworCWIuZXEJMWIKKwlzdWIJcmVzdWx0LCBkYXRhMSwgZGF0YTIKKwlyZXQKK0VORChtZW1jbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtY3B5LlMgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtY3B5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFiMWE3MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9tZW1jcHkuUwpAQCAtMCwwICsxLDE4NCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDEyLCBMaW5hcm8gTGltaXRlZAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIExpbmFybyBub3IgdGhlCisgICAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworLyogQXNzdW1wdGlvbnM6CisgKgorICogQVJNdjgtYSwgQUFyY2g2NAorICogVW5hbGlnbmVkIGFjY2Vzc2VzCisgKgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworI2RlZmluZSBkc3Rpbgl4MAorI2RlZmluZSBzcmMJeDEKKyNkZWZpbmUgY291bnQJeDIKKyNkZWZpbmUgdG1wMQl4MworI2RlZmluZSB0bXAxdwl3MworI2RlZmluZSB0bXAyCXg0CisjZGVmaW5lIHRtcDJ3CXc0CisjZGVmaW5lIHRtcDMJeDUKKyNkZWZpbmUgdG1wM3cJdzUKKyNkZWZpbmUgZHN0CXg2CisKKyNkZWZpbmUgQV9sCXg3CisjZGVmaW5lIEFfaAl4OAorI2RlZmluZSBCX2wJeDkKKyNkZWZpbmUgQl9oCXgxMAorI2RlZmluZSBDX2wJeDExCisjZGVmaW5lIENfaAl4MTIKKyNkZWZpbmUgRF9sCXgxMworI2RlZmluZSBEX2gJeDE0CisKK0VOVFJZKG1lbWNweSkKKworCW1vdglkc3QsIGRzdGluCisJY21wCWNvdW50LCAjNjQKKwliLmdlCS5MY3B5X25vdF9zaG9ydAorCWNtcAljb3VudCwgIzE1CisJYi5sZQkuTHRhaWwxNXRpbnkKKworCS8qIERlYWwgd2l0aCBzbWFsbCBjb3BpZXMgcXVpY2tseSBieSBkcm9wcGluZyBzdHJhaWdodCBpbnRvIHRoZQorCSAqIGV4aXQgYmxvY2suICAqLworLkx0YWlsNjM6CisJLyogQ29weSB1cCB0byA0OCBieXRlcyBvZiBkYXRhLiAgQXQgdGhpcyBwb2ludCB3ZSBvbmx5IG5lZWQgdGhlCisJICogYm90dG9tIDYgYml0cyBvZiBjb3VudCB0byBiZSBhY2N1cmF0ZS4gICovCisJYW5kcwl0bXAxLCBjb3VudCwgIzB4MzAKKwliLmVxCS5MdGFpbDE1CisJYWRkCWRzdCwgZHN0LCB0bXAxCisJYWRkCXNyYywgc3JjLCB0bXAxCisJY21wCXRtcDF3LCAjMHgyMAorCWIuZXEJMWYKKwliLmx0CTJmCisJbGRwCUFfbCwgQV9oLCBbc3JjLCAjLTQ4XQorCXN0cAlBX2wsIEFfaCwgW2RzdCwgIy00OF0KKzE6CisJbGRwCUFfbCwgQV9oLCBbc3JjLCAjLTMyXQorCXN0cAlBX2wsIEFfaCwgW2RzdCwgIy0zMl0KKzI6CisJbGRwCUFfbCwgQV9oLCBbc3JjLCAjLTE2XQorCXN0cAlBX2wsIEFfaCwgW2RzdCwgIy0xNl0KKworLkx0YWlsMTU6CisJYW5kcwljb3VudCwgY291bnQsICMxNQorCWJlcQkxZgorCWFkZAlzcmMsIHNyYywgY291bnQKKwlsZHAJQV9sLCBBX2gsIFtzcmMsICMtMTZdCisJYWRkCWRzdCwgZHN0LCBjb3VudAorCXN0cAlBX2wsIEFfaCwgW2RzdCwgIy0xNl0KKzE6CisJcmV0CisKKy5MdGFpbDE1dGlueToKKwkvKiBDb3B5IHVwIHRvIDE1IGJ5dGVzIG9mIGRhdGEuICBEb2VzIG5vdCBhc3N1bWUgYWRkaXRpb25hbCBkYXRhCisJICAgYmVpbmcgY29waWVkLiAgKi8KKwl0YnoJY291bnQsICMzLCAxZgorCWxkcgl0bXAxLCBbc3JjXSwgIzgKKwlzdHIJdG1wMSwgW2RzdF0sICM4CisxOgorCXRiegljb3VudCwgIzIsIDFmCisJbGRyCXRtcDF3LCBbc3JjXSwgIzQKKwlzdHIJdG1wMXcsIFtkc3RdLCAjNAorMToKKwl0YnoJY291bnQsICMxLCAxZgorCWxkcmgJdG1wMXcsIFtzcmNdLCAjMgorCXN0cmgJdG1wMXcsIFtkc3RdLCAjMgorMToKKwl0YnoJY291bnQsICMwLCAxZgorCWxkcmIJdG1wMXcsIFtzcmNdCisJc3RyYgl0bXAxdywgW2RzdF0KKzE6CisJcmV0CisKKy5MY3B5X25vdF9zaG9ydDoKKwkvKiBXZSBkb24ndCBtdWNoIGNhcmUgYWJvdXQgdGhlIGFsaWdubWVudCBvZiBEU1QsIGJ1dCB3ZSB3YW50IFNSQworCSAqIHRvIGJlIDEyOC1iaXQgKDE2IGJ5dGUpIGFsaWduZWQgc28gdGhhdCB3ZSBkb24ndCBjcm9zcyBjYWNoZSBsaW5lCisJICogYm91bmRhcmllcyBvbiBib3RoIGxvYWRzIGFuZCBzdG9yZXMuICAqLworCW5lZwl0bXAyLCBzcmMKKwlhbmRzCXRtcDIsIHRtcDIsICMxNQkJLyogQnl0ZXMgdG8gcmVhY2ggYWxpZ25tZW50LiAgKi8KKwliLmVxCTJmCisJc3ViCWNvdW50LCBjb3VudCwgdG1wMgorCS8qIENvcHkgbW9yZSBkYXRhIHRoYW4gbmVlZGVkOyBpdCdzIGZhc3RlciB0aGFuIGp1bXBpbmcKKwkgKiBhcm91bmQgY29weWluZyBzdWItUXVhZHdvcmQgcXVhbnRpdGllcy4gIFdlIGtub3cgdGhhdAorCSAqIGl0IGNhbid0IG92ZXJydW4uICAqLworCWxkcAlBX2wsIEFfaCwgW3NyY10KKwlhZGQJc3JjLCBzcmMsIHRtcDIKKwlzdHAJQV9sLCBBX2gsIFtkc3RdCisJYWRkCWRzdCwgZHN0LCB0bXAyCisJLyogVGhlcmUgbWF5IGJlIGxlc3MgdGhhbiA2MyBieXRlcyB0byBnbyBub3cuICAqLworCWNtcAljb3VudCwgIzYzCisJYi5sZQkuTHRhaWw2MworMjoKKwlzdWJzCWNvdW50LCBjb3VudCwgIzEyOAorCWIuZ2UJLkxjcHlfYm9keV9sYXJnZQorCS8qIExlc3MgdGhhbiAxMjggYnl0ZXMgdG8gY29weSwgc28gaGFuZGxlIDY0IGhlcmUgYW5kIHRoZW4ganVtcAorCSAqIHRvIHRoZSB0YWlsLiAgKi8KKwlsZHAJQV9sLCBBX2gsIFtzcmNdCisJbGRwCUJfbCwgQl9oLCBbc3JjLCAjMTZdCisJbGRwCUNfbCwgQ19oLCBbc3JjLCAjMzJdCisJbGRwCURfbCwgRF9oLCBbc3JjLCAjNDhdCisJc3RwCUFfbCwgQV9oLCBbZHN0XQorCXN0cAlCX2wsIEJfaCwgW2RzdCwgIzE2XQorCXN0cAlDX2wsIENfaCwgW2RzdCwgIzMyXQorCXN0cAlEX2wsIERfaCwgW2RzdCwgIzQ4XQorCXRzdAljb3VudCwgIzB4M2YKKwlhZGQJc3JjLCBzcmMsICM2NAorCWFkZAlkc3QsIGRzdCwgIzY0CisJYi5uZQkuTHRhaWw2MworCXJldAorCisJLyogQ3JpdGljYWwgbG9vcC4gIFN0YXJ0IGF0IGEgbmV3IGNhY2hlIGxpbmUgYm91bmRhcnkuICBBc3N1bWluZworCSAqIDY0IGJ5dGVzIHBlciBsaW5lIHRoaXMgZW5zdXJlcyB0aGUgZW50aXJlIGxvb3AgaXMgaW4gb25lIGxpbmUuICAqLworCS5wMmFsaWduIDYKKy5MY3B5X2JvZHlfbGFyZ2U6CisJLyogVGhlcmUgYXJlIGF0IGxlYXN0IDEyOCBieXRlcyB0byBjb3B5LiAgKi8KKwlsZHAJQV9sLCBBX2gsIFtzcmMsICMwXQorCXN1Yglkc3QsIGRzdCwgIzE2CQkvKiBQcmUtYmlhcy4gICovCisJbGRwCUJfbCwgQl9oLCBbc3JjLCAjMTZdCisJbGRwCUNfbCwgQ19oLCBbc3JjLCAjMzJdCisJbGRwCURfbCwgRF9oLCBbc3JjLCAjNDhdIQkvKiBzcmMgKz0gNjQgLSBQcmUtYmlhcy4gICovCisxOgorCXN0cAlBX2wsIEFfaCwgW2RzdCwgIzE2XQorCWxkcAlBX2wsIEFfaCwgW3NyYywgIzE2XQorCXN0cAlCX2wsIEJfaCwgW2RzdCwgIzMyXQorCWxkcAlCX2wsIEJfaCwgW3NyYywgIzMyXQorCXN0cAlDX2wsIENfaCwgW2RzdCwgIzQ4XQorCWxkcAlDX2wsIENfaCwgW3NyYywgIzQ4XQorCXN0cAlEX2wsIERfaCwgW2RzdCwgIzY0XSEKKwlsZHAJRF9sLCBEX2gsIFtzcmMsICM2NF0hCisJc3Vicwljb3VudCwgY291bnQsICM2NAorCWIuZ2UJMWIKKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMxNl0KKwlzdHAJQl9sLCBCX2gsIFtkc3QsICMzMl0KKwlzdHAJQ19sLCBDX2gsIFtkc3QsICM0OF0KKwlzdHAJRF9sLCBEX2gsIFtkc3QsICM2NF0KKwlhZGQJc3JjLCBzcmMsICMxNgorCWFkZAlkc3QsIGRzdCwgIzY0ICsgMTYKKwl0c3QJY291bnQsICMweDNmCisJYi5uZQkuTHRhaWw2MworCXJldAorRU5EKG1lbWNweSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9tZW1tb3ZlLlMgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtbW92ZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMzY2YTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtbW92ZS5TCkBAIC0wLDAgKzEsMzQxIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTQsIExpbmFybyBMaW1pdGVkCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgTGluYXJvIG5vciB0aGUKKyAgICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisvKiBBc3N1bXB0aW9uczoKKyAqCisgKiBBUk12OC1hLCBBQXJjaDY0CisgKiBVbmFsaWduZWQgYWNjZXNzZXMKKyAqIHdjaGFyX3QgaXMgNCBieXRlcworICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworLyogUGFyYW1ldGVycyBhbmQgcmVzdWx0LiAgKi8KKyNpZmRlZiBCQ09QWQorI2RlZmluZSBvcmlnZHN0aW4JeDEKKyNkZWZpbmUgb3JpZ3NyYwl4MAorI2VuZGlmCisjZGVmaW5lIGRzdGluCXgwCisjZGVmaW5lIHNyYwl4MQorI2RlZmluZSBjb3VudAl4MgorI2RlZmluZSB0bXAxCXgzCisjZGVmaW5lIHRtcDF3CXczCisjZGVmaW5lIHRtcDIJeDQKKyNkZWZpbmUgdG1wMncJdzQKKyNkZWZpbmUgdG1wMwl4NQorI2RlZmluZSB0bXAzdwl3NQorI2RlZmluZSBkc3QJeDYKKworI2RlZmluZSBBX2wJeDcKKyNkZWZpbmUgQV9oCXg4CisjZGVmaW5lIEJfbAl4OQorI2RlZmluZSBCX2gJeDEwCisjZGVmaW5lIENfbAl4MTEKKyNkZWZpbmUgQ19oCXgxMgorI2RlZmluZSBEX2wJeDEzCisjZGVmaW5lIERfaAl4MTQKKworI2lmZGVmIEJDT1BZCitFTlRSWShiY29weSkKKwkvKiBTd2FwIHNyYyBhbmQgZHN0IHNvIHRoYXQgYSBicmFuY2ggdG8gbWVtY3B5IGRvZXNuJ3QgY2F1c2UgaXNzdWVzLiAqLworCW1vdgl0bXAxLCBvcmlnc3JjCisJbW92CW9yaWdzcmMsIG9yaWdkc3RpbgorCW1vdglvcmlnZHN0aW4sIHRtcDEKKyNlbGlmIGRlZmluZWQoV01FTU1PVkUpCitFTlRSWSh3bWVtbW92ZSkKKwlsc2wJY291bnQsIGNvdW50LCAjMgorI2Vsc2UKK0VOVFJZKG1lbW1vdmUpCisjZW5kaWYKKwljbXAJZHN0aW4sIHNyYworCWIubG8JLkxkb3dud2FyZHMKKwlhZGQJdG1wMSwgc3JjLCBjb3VudAorCWNtcAlkc3RpbiwgdG1wMQorCWIuaHMJbWVtY3B5CQkvKiBObyBvdmVybGFwLiAgKi8KKworCS8qIFVwd2FyZHMgbW92ZSB3aXRoIHBvdGVudGlhbCBvdmVybGFwLgorCSAqIE5lZWQgdG8gbW92ZSBmcm9tIHRoZSB0YWlsIGJhY2t3YXJkcy4gIFNSQyBhbmQgRFNUIHBvaW50IG9uZQorCSAqIGJ5dGUgYmV5b25kIHRoZSByZW1haW5pbmcgZGF0YSB0byBtb3ZlLiAgKi8KKwlhZGQJZHN0LCBkc3RpbiwgY291bnQKKwlhZGQJc3JjLCBzcmMsIGNvdW50CisJY21wCWNvdW50LCAjNjQKKwliLmdlCS5MbW92X25vdF9zaG9ydF91cAorCisJLyogRGVhbCB3aXRoIHNtYWxsIG1vdmVzIHF1aWNrbHkgYnkgZHJvcHBpbmcgc3RyYWlnaHQgaW50byB0aGUKKwkgKiBleGl0IGJsb2NrLiAgKi8KKy5MdGFpbDYzdXA6CisJLyogTW92ZSB1cCB0byA0OCBieXRlcyBvZiBkYXRhLiAgQXQgdGhpcyBwb2ludCB3ZSBvbmx5IG5lZWQgdGhlCisJICogYm90dG9tIDYgYml0cyBvZiBjb3VudCB0byBiZSBhY2N1cmF0ZS4gICovCisJYW5kcwl0bXAxLCBjb3VudCwgIzB4MzAKKwliLmVxCS5MdGFpbDE1dXAKKwlzdWIJZHN0LCBkc3QsIHRtcDEKKwlzdWIJc3JjLCBzcmMsIHRtcDEKKwljbXAJdG1wMXcsICMweDIwCisJYi5lcQkxZgorCWIubHQJMmYKKwlsZHAJQV9sLCBBX2gsIFtzcmMsICMzMl0KKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMzMl0KKzE6CisJbGRwCUFfbCwgQV9oLCBbc3JjLCAjMTZdCisJc3RwCUFfbCwgQV9oLCBbZHN0LCAjMTZdCisyOgorCWxkcAlBX2wsIEFfaCwgW3NyY10KKwlzdHAJQV9sLCBBX2gsIFtkc3RdCisuTHRhaWwxNXVwOgorCS8qIE1vdmUgdXAgdG8gMTUgYnl0ZXMgb2YgZGF0YS4gIERvZXMgbm90IGFzc3VtZSBhZGRpdGlvbmFsIGRhdGEKKwkgKiBiZWluZyBtb3ZlZC4gICovCisJdGJ6CWNvdW50LCAjMywgMWYKKwlsZHIJdG1wMSwgW3NyYywgIy04XSEKKwlzdHIJdG1wMSwgW2RzdCwgIy04XSEKKzE6CisJdGJ6CWNvdW50LCAjMiwgMWYKKwlsZHIJdG1wMXcsIFtzcmMsICMtNF0hCisJc3RyCXRtcDF3LCBbZHN0LCAjLTRdIQorMToKKwl0YnoJY291bnQsICMxLCAxZgorCWxkcmgJdG1wMXcsIFtzcmMsICMtMl0hCisJc3RyaAl0bXAxdywgW2RzdCwgIy0yXSEKKzE6CisJdGJ6CWNvdW50LCAjMCwgMWYKKwlsZHJiCXRtcDF3LCBbc3JjLCAjLTFdCisJc3RyYgl0bXAxdywgW2RzdCwgIy0xXQorMToKKwlyZXQKKworLkxtb3Zfbm90X3Nob3J0X3VwOgorCS8qIFdlIGRvbid0IG11Y2ggY2FyZSBhYm91dCB0aGUgYWxpZ25tZW50IG9mIERTVCwgYnV0IHdlIHdhbnQgU1JDCisJICogdG8gYmUgMTI4LWJpdCAoMTYgYnl0ZSkgYWxpZ25lZCBzbyB0aGF0IHdlIGRvbid0IGNyb3NzIGNhY2hlIGxpbmUKKwkgKiBib3VuZGFyaWVzIG9uIGJvdGggbG9hZHMgYW5kIHN0b3Jlcy4gICovCisJYW5kcwl0bXAyLCBzcmMsICMxNQkJLyogQnl0ZXMgdG8gcmVhY2ggYWxpZ25tZW50LiAgKi8KKwliLmVxCTJmCisJc3ViCWNvdW50LCBjb3VudCwgdG1wMgorCS8qIE1vdmUgZW5vdWdoIGRhdGEgdG8gcmVhY2ggYWxpZ25tZW50OyB1bmxpa2UgbWVtY3B5LCB3ZSBoYXZlIHRvCisJICogYmUgYXdhcmUgb2YgdGhlIG92ZXJsYXAsIHdoaWNoIG1lYW5zIHdlIGNhbid0IG1vdmUgZGF0YSB0d2ljZS4gICovCisJdGJ6CXRtcDIsICMzLCAxZgorCWxkcgl0bXAxLCBbc3JjLCAjLThdIQorCXN0cgl0bXAxLCBbZHN0LCAjLThdIQorMToKKwl0YnoJdG1wMiwgIzIsIDFmCisJbGRyCXRtcDF3LCBbc3JjLCAjLTRdIQorCXN0cgl0bXAxdywgW2RzdCwgIy00XSEKKzE6CisJdGJ6CXRtcDIsICMxLCAxZgorCWxkcmgJdG1wMXcsIFtzcmMsICMtMl0hCisJc3RyaAl0bXAxdywgW2RzdCwgIy0yXSEKKzE6CisJdGJ6CXRtcDIsICMwLCAxZgorCWxkcmIJdG1wMXcsIFtzcmMsICMtMV0hCisJc3RyYgl0bXAxdywgW2RzdCwgIy0xXSEKKzE6CisKKwkvKiBUaGVyZSBtYXkgYmUgbGVzcyB0aGFuIDYzIGJ5dGVzIHRvIGdvIG5vdy4gICovCisJY21wCWNvdW50LCAjNjMKKwliLmxlCS5MdGFpbDYzdXAKKzI6CisJc3Vicwljb3VudCwgY291bnQsICMxMjgKKwliLmdlCS5MbW92X2JvZHlfbGFyZ2VfdXAKKwkvKiBMZXNzIHRoYW4gMTI4IGJ5dGVzIHRvIG1vdmUsIHNvIGhhbmRsZSA2NCBoZXJlIGFuZCB0aGVuIGp1bXAKKwkgKiB0byB0aGUgdGFpbC4gICovCisJbGRwCUFfbCwgQV9oLCBbc3JjLCAjLTY0XSEKKwlsZHAJQl9sLCBCX2gsIFtzcmMsICMxNl0KKwlsZHAJQ19sLCBDX2gsIFtzcmMsICMzMl0KKwlsZHAJRF9sLCBEX2gsIFtzcmMsICM0OF0KKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtNjRdIQorCXN0cAlCX2wsIEJfaCwgW2RzdCwgIzE2XQorCXN0cAlDX2wsIENfaCwgW2RzdCwgIzMyXQorCXN0cAlEX2wsIERfaCwgW2RzdCwgIzQ4XQorCXRzdAljb3VudCwgIzB4M2YKKwliLm5lCS5MdGFpbDYzdXAKKwlyZXQKKworCS8qIENyaXRpY2FsIGxvb3AuICBTdGFydCBhdCBhIG5ldyBJY2FjaGUgbGluZSBib3VuZGFyeS4gIEFzc3VtaW5nCisJICogNjQgYnl0ZXMgcGVyIGxpbmUgdGhpcyBlbnN1cmVzIHRoZSBlbnRpcmUgbG9vcCBpcyBpbiBvbmUgbGluZS4gICovCisJLnAyYWxpZ24gNgorLkxtb3ZfYm9keV9sYXJnZV91cDoKKwkvKiBUaGVyZSBhcmUgYXQgbGVhc3QgMTI4IGJ5dGVzIHRvIG1vdmUuICAqLworCWxkcAlBX2wsIEFfaCwgW3NyYywgIy0xNl0KKwlsZHAJQl9sLCBCX2gsIFtzcmMsICMtMzJdCisJbGRwCUNfbCwgQ19oLCBbc3JjLCAjLTQ4XQorCWxkcAlEX2wsIERfaCwgW3NyYywgIy02NF0hCisxOgorCXN0cAlBX2wsIEFfaCwgW2RzdCwgIy0xNl0KKwlsZHAJQV9sLCBBX2gsIFtzcmMsICMtMTZdCisJc3RwCUJfbCwgQl9oLCBbZHN0LCAjLTMyXQorCWxkcAlCX2wsIEJfaCwgW3NyYywgIy0zMl0KKwlzdHAJQ19sLCBDX2gsIFtkc3QsICMtNDhdCisJbGRwCUNfbCwgQ19oLCBbc3JjLCAjLTQ4XQorCXN0cAlEX2wsIERfaCwgW2RzdCwgIy02NF0hCisJbGRwCURfbCwgRF9oLCBbc3JjLCAjLTY0XSEKKwlzdWJzCWNvdW50LCBjb3VudCwgIzY0CisJYi5nZQkxYgorCXN0cAlBX2wsIEFfaCwgW2RzdCwgIy0xNl0KKwlzdHAJQl9sLCBCX2gsIFtkc3QsICMtMzJdCisJc3RwCUNfbCwgQ19oLCBbZHN0LCAjLTQ4XQorCXN0cAlEX2wsIERfaCwgW2RzdCwgIy02NF0hCisJdHN0CWNvdW50LCAjMHgzZgorCWIubmUJLkx0YWlsNjN1cAorCXJldAorCisKKy5MZG93bndhcmRzOgorCS8qIEZvciBhIGRvd253YXJkcyBtb3ZlIHdlIGNhbiBzYWZlbHkgdXNlIG1lbWNweSBwcm92aWRlZCB0aGF0CisJICogRFNUIGlzIG1vcmUgdGhhbiAxNiBieXRlcyBhd2F5IGZyb20gU1JDLiAgKi8KKwlzdWIJdG1wMSwgc3JjLCAjMTYKKwljbXAJZHN0aW4sIHRtcDEKKwliLmxzCW1lbWNweQkJLyogTWF5IG92ZXJsYXAsIGJ1dCBub3QgY3JpdGljYWxseS4gICovCisKKwltb3YJZHN0LCBkc3RpbgkvKiBQcmVzZXJ2ZSBEU1RJTiBmb3IgcmV0dXJuIHZhbHVlLiAgKi8KKwljbXAJY291bnQsICM2NAorCWIuZ2UJLkxtb3Zfbm90X3Nob3J0X2Rvd24KKworCS8qIERlYWwgd2l0aCBzbWFsbCBtb3ZlcyBxdWlja2x5IGJ5IGRyb3BwaW5nIHN0cmFpZ2h0IGludG8gdGhlCisJICogZXhpdCBibG9jay4gICovCisuTHRhaWw2M2Rvd246CisJLyogTW92ZSB1cCB0byA0OCBieXRlcyBvZiBkYXRhLiAgQXQgdGhpcyBwb2ludCB3ZSBvbmx5IG5lZWQgdGhlCisJICogYm90dG9tIDYgYml0cyBvZiBjb3VudCB0byBiZSBhY2N1cmF0ZS4gICovCisJYW5kcwl0bXAxLCBjb3VudCwgIzB4MzAKKwliLmVxCS5MdGFpbDE1ZG93bgorCWFkZAlkc3QsIGRzdCwgdG1wMQorCWFkZAlzcmMsIHNyYywgdG1wMQorCWNtcAl0bXAxdywgIzB4MjAKKwliLmVxCTFmCisJYi5sdAkyZgorCWxkcAlBX2wsIEFfaCwgW3NyYywgIy00OF0KKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtNDhdCisxOgorCWxkcAlBX2wsIEFfaCwgW3NyYywgIy0zMl0KKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtMzJdCisyOgorCWxkcAlBX2wsIEFfaCwgW3NyYywgIy0xNl0KKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtMTZdCisuTHRhaWwxNWRvd246CisJLyogTW92ZSB1cCB0byAxNSBieXRlcyBvZiBkYXRhLiAgRG9lcyBub3QgYXNzdW1lIGFkZGl0aW9uYWwgZGF0YQorCSAgIGJlaW5nIG1vdmVkLiAgKi8KKwl0YnoJY291bnQsICMzLCAxZgorCWxkcgl0bXAxLCBbc3JjXSwgIzgKKwlzdHIJdG1wMSwgW2RzdF0sICM4CisxOgorCXRiegljb3VudCwgIzIsIDFmCisJbGRyCXRtcDF3LCBbc3JjXSwgIzQKKwlzdHIJdG1wMXcsIFtkc3RdLCAjNAorMToKKwl0YnoJY291bnQsICMxLCAxZgorCWxkcmgJdG1wMXcsIFtzcmNdLCAjMgorCXN0cmgJdG1wMXcsIFtkc3RdLCAjMgorMToKKwl0YnoJY291bnQsICMwLCAxZgorCWxkcmIJdG1wMXcsIFtzcmNdCisJc3RyYgl0bXAxdywgW2RzdF0KKzE6CisJcmV0CisKKy5MbW92X25vdF9zaG9ydF9kb3duOgorCS8qIFdlIGRvbid0IG11Y2ggY2FyZSBhYm91dCB0aGUgYWxpZ25tZW50IG9mIERTVCwgYnV0IHdlIHdhbnQgU1JDCisJICogdG8gYmUgMTI4LWJpdCAoMTYgYnl0ZSkgYWxpZ25lZCBzbyB0aGF0IHdlIGRvbid0IGNyb3NzIGNhY2hlIGxpbmUKKwkgKiBib3VuZGFyaWVzIG9uIGJvdGggbG9hZHMgYW5kIHN0b3Jlcy4gICovCisJbmVnCXRtcDIsIHNyYworCWFuZHMJdG1wMiwgdG1wMiwgIzE1CQkvKiBCeXRlcyB0byByZWFjaCBhbGlnbm1lbnQuICAqLworCWIuZXEJMmYKKwlzdWIJY291bnQsIGNvdW50LCB0bXAyCisJLyogTW92ZSBlbm91Z2ggZGF0YSB0byByZWFjaCBhbGlnbm1lbnQ7IHVubGlrZSBtZW1jcHksIHdlIGhhdmUgdG8KKwkgKiBiZSBhd2FyZSBvZiB0aGUgb3ZlcmxhcCwgd2hpY2ggbWVhbnMgd2UgY2FuJ3QgbW92ZSBkYXRhIHR3aWNlLiAgKi8KKwl0YnoJdG1wMiwgIzMsIDFmCisJbGRyCXRtcDEsIFtzcmNdLCAjOAorCXN0cgl0bXAxLCBbZHN0XSwgIzgKKzE6CisJdGJ6CXRtcDIsICMyLCAxZgorCWxkcgl0bXAxdywgW3NyY10sICM0CisJc3RyCXRtcDF3LCBbZHN0XSwgIzQKKzE6CisJdGJ6CXRtcDIsICMxLCAxZgorCWxkcmgJdG1wMXcsIFtzcmNdLCAjMgorCXN0cmgJdG1wMXcsIFtkc3RdLCAjMgorMToKKwl0YnoJdG1wMiwgIzAsIDFmCisJbGRyYgl0bXAxdywgW3NyY10sICMxCisJc3RyYgl0bXAxdywgW2RzdF0sICMxCisxOgorCisJLyogVGhlcmUgbWF5IGJlIGxlc3MgdGhhbiA2MyBieXRlcyB0byBnbyBub3cuICAqLworCWNtcAljb3VudCwgIzYzCisJYi5sZQkuTHRhaWw2M2Rvd24KKzI6CisJc3Vicwljb3VudCwgY291bnQsICMxMjgKKwliLmdlCS5MbW92X2JvZHlfbGFyZ2VfZG93bgorCS8qIExlc3MgdGhhbiAxMjggYnl0ZXMgdG8gbW92ZSwgc28gaGFuZGxlIDY0IGhlcmUgYW5kIHRoZW4ganVtcAorCSAqIHRvIHRoZSB0YWlsLiAgKi8KKwlsZHAJQV9sLCBBX2gsIFtzcmNdCisJbGRwCUJfbCwgQl9oLCBbc3JjLCAjMTZdCisJbGRwCUNfbCwgQ19oLCBbc3JjLCAjMzJdCisJbGRwCURfbCwgRF9oLCBbc3JjLCAjNDhdCisJc3RwCUFfbCwgQV9oLCBbZHN0XQorCXN0cAlCX2wsIEJfaCwgW2RzdCwgIzE2XQorCXN0cAlDX2wsIENfaCwgW2RzdCwgIzMyXQorCXN0cAlEX2wsIERfaCwgW2RzdCwgIzQ4XQorCXRzdAljb3VudCwgIzB4M2YKKwlhZGQJc3JjLCBzcmMsICM2NAorCWFkZAlkc3QsIGRzdCwgIzY0CisJYi5uZQkuTHRhaWw2M2Rvd24KKwlyZXQKKworCS8qIENyaXRpY2FsIGxvb3AuICBTdGFydCBhdCBhIG5ldyBjYWNoZSBsaW5lIGJvdW5kYXJ5LiAgQXNzdW1pbmcKKwkgKiA2NCBieXRlcyBwZXIgbGluZSB0aGlzIGVuc3VyZXMgdGhlIGVudGlyZSBsb29wIGlzIGluIG9uZSBsaW5lLiAgKi8KKwkucDJhbGlnbiA2CisuTG1vdl9ib2R5X2xhcmdlX2Rvd246CisJLyogVGhlcmUgYXJlIGF0IGxlYXN0IDEyOCBieXRlcyB0byBtb3ZlLiAgKi8KKwlsZHAJQV9sLCBBX2gsIFtzcmMsICMwXQorCXN1Yglkc3QsIGRzdCwgIzE2CQkvKiBQcmUtYmlhcy4gICovCisJbGRwCUJfbCwgQl9oLCBbc3JjLCAjMTZdCisJbGRwCUNfbCwgQ19oLCBbc3JjLCAjMzJdCisJbGRwCURfbCwgRF9oLCBbc3JjLCAjNDhdIQkvKiBzcmMgKz0gNjQgLSBQcmUtYmlhcy4gICovCisxOgorCXN0cAlBX2wsIEFfaCwgW2RzdCwgIzE2XQorCWxkcAlBX2wsIEFfaCwgW3NyYywgIzE2XQorCXN0cAlCX2wsIEJfaCwgW2RzdCwgIzMyXQorCWxkcAlCX2wsIEJfaCwgW3NyYywgIzMyXQorCXN0cAlDX2wsIENfaCwgW2RzdCwgIzQ4XQorCWxkcAlDX2wsIENfaCwgW3NyYywgIzQ4XQorCXN0cAlEX2wsIERfaCwgW2RzdCwgIzY0XSEKKwlsZHAJRF9sLCBEX2gsIFtzcmMsICM2NF0hCisJc3Vicwljb3VudCwgY291bnQsICM2NAorCWIuZ2UJMWIKKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMxNl0KKwlzdHAJQl9sLCBCX2gsIFtkc3QsICMzMl0KKwlzdHAJQ19sLCBDX2gsIFtkc3QsICM0OF0KKwlzdHAJRF9sLCBEX2gsIFtkc3QsICM2NF0KKwlhZGQJc3JjLCBzcmMsICMxNgorCWFkZAlkc3QsIGRzdCwgIzY0ICsgMTYKKwl0c3QJY291bnQsICMweDNmCisJYi5uZQkuTHRhaWw2M2Rvd24KKwlyZXQKKyNpZmRlZiBCQ09QWQorRU5EKGJjb3B5KQorI2VsaWYgZGVmaW5lZChXTUVNTU9WRSkKK0VORCh3bWVtbW92ZSkKKyNlbHNlCitFTkQobWVtbW92ZSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbXNldC5TIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbXNldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMjA0YjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtc2V0LlMKQEAgLTAsMCArMSwyNDcgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxMiwgTGluYXJvIExpbWl0ZWQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBMaW5hcm8gbm9yIHRoZQorICAgICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICAgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qIEFzc3VtcHRpb25zOgorICoKKyAqIEFSTXY4LWEsIEFBcmNoNjQKKyAqIFVuYWxpZ25lZCBhY2Nlc3NlcworICoKKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKy8qIEJ5IGRlZmF1bHQgd2UgYXNzdW1lIHRoYXQgdGhlIERDIGluc3RydWN0aW9uIGNhbiBiZSB1c2VkIHRvIHplcm8KKyAgIGRhdGEgYmxvY2tzIG1vcmUgZWZmaWNpZW50bHkuICBJbiBzb21lIGNpcmN1bXN0YW5jZXMgdGhpcyBtaWdodCBiZQorICAgdW5zYWZlLCBmb3IgZXhhbXBsZSBpbiBhbiBhc3ltbWV0cmljIG11bHRpcHJvY2Vzc29yIGVudmlyb25tZW50IHdpdGgKKyAgIGRpZmZlcmVudCBEQyBjbGVhciBsZW5ndGhzIChuZWl0aGVyIHRoZSB1cHBlciBub3IgbG93ZXIgbGVuZ3RocyBhcmUKKyAgIHNhZmUgdG8gdXNlKS4KKworICAgSWYgY29kZSBtYXkgYmUgcnVuIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHRoZW4gZGVmaW5lCisgICBNQVlCRV9WSVJULiAgVGhpcyB3aWxsIGNhdXNlIHRoZSBjb2RlIHRvIGNhY2hlIHRoZSBzeXN0ZW0gcmVnaXN0ZXIKKyAgIHZhbHVlcyByYXRoZXIgdGhhbiByZS1yZWFkaW5nIHRoZW0gZWFjaCBjYWxsLiAgKi8KKworI2RlZmluZSBkc3RpbgkJeDAKKyNpZmRlZiBCWkVSTworI2RlZmluZSBjb3VudAkJeDEKKyNlbHNlCisjZGVmaW5lIGNvdW50CQl4MgorI2VuZGlmCisjZGVmaW5lIHZhbAkJdzEKKyNkZWZpbmUgdG1wMQkJeDMKKyNkZWZpbmUgdG1wMXcJCXczCisjZGVmaW5lIHRtcDIJCXg0CisjZGVmaW5lIHRtcDJ3CQl3NAorI2RlZmluZSB6dmFfbGVuX3gJeDUKKyNkZWZpbmUgenZhX2xlbgkJdzUKKyNkZWZpbmUgenZhX2JpdHNfeAl4NgorCisjZGVmaW5lIEFfbAkJeDcKKyNkZWZpbmUgQV9sdwkJdzcKKyNkZWZpbmUgZHN0CQl4OAorI2RlZmluZSB0bXAzdwkJdzkKKworI2lmZGVmIEJaRVJPCitFTlRSWShiemVybykKKyNlbHNlCitFTlRSWShtZW1zZXQpCisjZW5kaWYKKworCW1vdglkc3QsIGRzdGluCQkvKiBQcmVzZXJ2ZSByZXR1cm4gdmFsdWUuICAqLworI2lmZGVmIEJaRVJPCisJYgkuTHplcm9fbWVtCisjZW5kaWYKKwlhbmRzCUFfbHcsIHZhbCwgIzI1NQorCWIuZXEJLkx6ZXJvX21lbQorCW9ycglBX2x3LCBBX2x3LCBBX2x3LCBsc2wgIzgKKwlvcnIJQV9sdywgQV9sdywgQV9sdywgbHNsICMxNgorCW9ycglBX2wsIEFfbCwgQV9sLCBsc2wgIzMyCisuTHRhaWxfbWF5YmVfbG9uZzoKKwljbXAJY291bnQsICM2NAorCWIuZ2UJLkxub3Rfc2hvcnQKKy5MdGFpbF9tYXliZV90aW55OgorCWNtcAljb3VudCwgIzE1CisJYi5sZQkuTHRhaWwxNXRpbnkKKy5MdGFpbDYzOgorCWFuZHMJdG1wMSwgY291bnQsICMweDMwCisJYi5lcQkuTHRhaWwxNQorCWFkZAlkc3QsIGRzdCwgdG1wMQorCWNtcAl0bXAxdywgIzB4MjAKKwliLmVxCTFmCisJYi5sdAkyZgorCXN0cAlBX2wsIEFfbCwgW2RzdCwgIy00OF0KKzE6CisJc3RwCUFfbCwgQV9sLCBbZHN0LCAjLTMyXQorMjoKKwlzdHAJQV9sLCBBX2wsIFtkc3QsICMtMTZdCisKKy5MdGFpbDE1OgorCWFuZAljb3VudCwgY291bnQsICMxNQorCWFkZAlkc3QsIGRzdCwgY291bnQKKwlzdHAJQV9sLCBBX2wsIFtkc3QsICMtMTZdCS8qIFJlcGVhdCBzb21lL2FsbCBvZiBsYXN0IHN0b3JlLiAqLworCXJldAorCisuTHRhaWwxNXRpbnk6CisJLyogU2V0IHVwIHRvIDE1IGJ5dGVzLiAgRG9lcyBub3QgYXNzdW1lIGVhcmxpZXIgbWVtb3J5CisJICAgYmVpbmcgc2V0LiAgKi8KKwl0YnoJY291bnQsICMzLCAxZgorCXN0cglBX2wsIFtkc3RdLCAjOAorMToKKwl0YnoJY291bnQsICMyLCAxZgorCXN0cglBX2x3LCBbZHN0XSwgIzQKKzE6CisJdGJ6CWNvdW50LCAjMSwgMWYKKwlzdHJoCUFfbHcsIFtkc3RdLCAjMgorMToKKwl0YnoJY291bnQsICMwLCAxZgorCXN0cmIJQV9sdywgW2RzdF0KKzE6CisJcmV0CisKKwkvKiBDcml0aWNhbCBsb29wLiAgU3RhcnQgYXQgYSBuZXcgY2FjaGUgbGluZSBib3VuZGFyeS4gIEFzc3VtaW5nCisJICogNjQgYnl0ZXMgcGVyIGxpbmUsIHRoaXMgZW5zdXJlcyB0aGUgZW50aXJlIGxvb3AgaXMgaW4gb25lIGxpbmUuICAqLworCS5wMmFsaWduIDYKKy5Mbm90X3Nob3J0OgorCW5lZwl0bXAyLCBkc3QKKwlhbmRzCXRtcDIsIHRtcDIsICMxNQorCWIuZXEJMmYKKwkvKiBCcmluZyBEU1QgdG8gMTI4LWJpdCAoMTYtYnl0ZSkgYWxpZ25tZW50LiAgV2Uga25vdyB0aGF0IHRoZXJlJ3MKKwkgKiBtb3JlIHRoYW4gdGhhdCB0byBzZXQsIHNvIHdlIHNpbXBseSBzdG9yZSAxNiBieXRlcyBhbmQgYWR2YW5jZSBieQorCSAqIHRoZSBhbW91bnQgcmVxdWlyZWQgdG8gcmVhY2ggYWxpZ25tZW50LiAgKi8KKwlzdWIJY291bnQsIGNvdW50LCB0bXAyCisJc3RwCUFfbCwgQV9sLCBbZHN0XQorCWFkZAlkc3QsIGRzdCwgdG1wMgorCS8qIFRoZXJlIG1heSBiZSBsZXNzIHRoYW4gNjMgYnl0ZXMgdG8gZ28gbm93LiAgKi8KKwljbXAJY291bnQsICM2MworCWIubGUJLkx0YWlsNjMKKzI6CisJc3ViCWRzdCwgZHN0LCAjMTYJCS8qIFByZS1iaWFzLiAgKi8KKwlzdWIJY291bnQsIGNvdW50LCAjNjQKKzE6CisJc3RwCUFfbCwgQV9sLCBbZHN0LCAjMTZdCisJc3RwCUFfbCwgQV9sLCBbZHN0LCAjMzJdCisJc3RwCUFfbCwgQV9sLCBbZHN0LCAjNDhdCisJc3RwCUFfbCwgQV9sLCBbZHN0LCAjNjRdIQorCXN1YnMJY291bnQsIGNvdW50LCAjNjQKKwliLmdlCTFiCisJdHN0CWNvdW50LCAjMHgzZgorCWFkZAlkc3QsIGRzdCwgIzE2CisJYi5uZQkuTHRhaWw2MworCXJldAorCisJLyogRm9yIHplcm9pbmcgbWVtb3J5LCBjaGVjayB0byBzZWUgaWYgd2UgY2FuIHVzZSB0aGUgWlZBIGZlYXR1cmUgdG8KKwkgKiB6ZXJvIGVudGlyZSAnY2FjaGUnIGxpbmVzLiAgKi8KKy5MemVyb19tZW06CisJbW92CUFfbCwgIzAKKwljbXAJY291bnQsICM2MworCWIubGUJLkx0YWlsX21heWJlX3RpbnkKKwluZWcJdG1wMiwgZHN0CisJYW5kcwl0bXAyLCB0bXAyLCAjMTUKKwliLmVxCTFmCisJc3ViCWNvdW50LCBjb3VudCwgdG1wMgorCXN0cAlBX2wsIEFfbCwgW2RzdF0KKwlhZGQJZHN0LCBkc3QsIHRtcDIKKwljbXAJY291bnQsICM2MworCWIubGUJLkx0YWlsNjMKKzE6CisJLyogRm9yIHplcm9pbmcgc21hbGwgYW1vdW50cyBvZiBtZW1vcnksIGl0J3Mgbm90IHdvcnRoIHNldHRpbmcgdXAKKwkgKiB0aGUgbGluZS1jbGVhciBjb2RlLiAgKi8KKwljbXAJY291bnQsICMxMjgKKwliLmx0CS5Mbm90X3Nob3J0CisjaWZkZWYgTUFZQkVfVklSVAorCS8qIEZvciBlZmZpY2llbmN5IHdoZW4gdmlydHVhbGl6ZWQsIHdlIGNhY2hlIHRoZSBaVkEgY2FwYWJpbGl0eS4gICovCisJYWRycAl0bXAyLCAuTGNhY2hlX2NsZWFyCisJbGRyCXp2YV9sZW4sIFt0bXAyLCAjOmxvMTI6LkxjYWNoZV9jbGVhcl0KKwl0Ym56CXp2YV9sZW4sICMzMSwgLkxub3Rfc2hvcnQKKwljYm56CXp2YV9sZW4sIC5MemVyb19ieV9saW5lCisJbXJzCXRtcDEsIGRjemlkX2VsMAorCXRiegl0bXAxLCAjNCwgMWYKKwkvKiBaVkEgbm90IGF2YWlsYWJsZS4gIFJlbWVtYmVyIHRoaXMgZm9yIG5leHQgdGltZS4gICovCisJbW92CXp2YV9sZW4sICN+MAorCXN0cgl6dmFfbGVuLCBbdG1wMiwgIzpsbzEyOi5MY2FjaGVfY2xlYXJdCisJYgkuTG5vdF9zaG9ydAorMToKKwltb3YJdG1wM3csICM0CisJYW5kCXp2YV9sZW4sIHRtcDF3LCAjMTUJLyogU2FmZXR5OiBvdGhlciBiaXRzIHJlc2VydmVkLiAgKi8KKwlsc2wJenZhX2xlbiwgdG1wM3csIHp2YV9sZW4KKwlzdHIJenZhX2xlbiwgW3RtcDIsICM6bG8xMjouTGNhY2hlX2NsZWFyXQorI2Vsc2UKKwltcnMJdG1wMSwgZGN6aWRfZWwwCisJdGJuegl0bXAxLCAjNCwgLkxub3Rfc2hvcnQKKwltb3YJdG1wM3csICM0CisJYW5kCXp2YV9sZW4sIHRtcDF3LCAjMTUJLyogU2FmZXR5OiBvdGhlciBiaXRzIHJlc2VydmVkLiAgKi8KKwlsc2wJenZhX2xlbiwgdG1wM3csIHp2YV9sZW4KKyNlbmRpZgorCisuTHplcm9fYnlfbGluZToKKwkvKiBDb21wdXRlIGhvdyBmYXIgd2UgbmVlZCB0byBnbyB0byBiZWNvbWUgc3VpdGFibHkgYWxpZ25lZC4gIFdlJ3JlCisJICogYWxyZWFkeSBhdCBxdWFkLXdvcmQgYWxpZ25tZW50LiAgKi8KKwljbXAJY291bnQsIHp2YV9sZW5feAorCWIubHQJLkxub3Rfc2hvcnQJCS8qIE5vdCBlbm91Z2ggdG8gcmVhY2ggYWxpZ25tZW50LiAgKi8KKwlzdWIJenZhX2JpdHNfeCwgenZhX2xlbl94LCAjMQorCW5lZwl0bXAyLCBkc3QKKwlhbmRzCXRtcDIsIHRtcDIsIHp2YV9iaXRzX3gKKwliLmVxCTFmCQkJLyogQWxyZWFkeSBhbGlnbmVkLiAgKi8KKwkvKiBOb3QgYWxpZ25lZCwgY2hlY2sgdGhhdCB0aGVyZSdzIGVub3VnaCB0byBjb3B5IGFmdGVyIGFsaWdubWVudC4gICovCisJc3ViCXRtcDEsIGNvdW50LCB0bXAyCisJY21wCXRtcDEsICM2NAorCWNjbXAJdG1wMSwgenZhX2xlbl94LCAjOCwgZ2UJLyogTlpDVj0wYjEwMDAgKi8KKwliLmx0CS5Mbm90X3Nob3J0CisJLyogV2Uga25vdyB0aGF0IHRoZXJlJ3MgYXQgbGVhc3QgNjQgYnl0ZXMgdG8gemVybyBhbmQgdGhhdCBpdCdzIHNhZmUKKwkgKiB0byBvdmVycnVuIGJ5IDY0IGJ5dGVzLiAgKi8KKwltb3YJY291bnQsIHRtcDEKKzI6CisJc3RwCUFfbCwgQV9sLCBbZHN0XQorCXN0cAlBX2wsIEFfbCwgW2RzdCwgIzE2XQorCXN0cAlBX2wsIEFfbCwgW2RzdCwgIzMyXQorCXN1YnMJdG1wMiwgdG1wMiwgIzY0CisJc3RwCUFfbCwgQV9sLCBbZHN0LCAjNDhdCisJYWRkCWRzdCwgZHN0LCAjNjQKKwliLmdlCTJiCisJLyogV2UndmUgb3ZlcnJ1biBhIGJpdCwgc28gYWRqdXN0IGRzdCBkb3dud2FyZHMuICAqLworCWFkZAlkc3QsIGRzdCwgdG1wMgorMToKKwlzdWIJY291bnQsIGNvdW50LCB6dmFfbGVuX3gKKzM6CisJZGMJenZhLCBkc3QKKwlhZGQJZHN0LCBkc3QsIHp2YV9sZW5feAorCXN1YnMJY291bnQsIGNvdW50LCB6dmFfbGVuX3gKKwliLmdlCTNiCisJYW5kcwljb3VudCwgY291bnQsIHp2YV9iaXRzX3gKKwliLm5lCS5MdGFpbF9tYXliZV9sb25nCisJcmV0CisjaWZkZWYgQlpFUk8KK0VORChiemVybykKKyNlbHNlCitFTkQobWVtc2V0KQorI2VuZGlmCisKKyNpZmRlZiBNQVlCRV9WSVJUCisJLmJzcworCS5wMmFsaWduIDIKKy5MY2FjaGVfY2xlYXI6CisJLnNwYWNlIDQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cGNweS5TIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cGNweS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YTc5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RwY3B5LlMKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2RlZmluZSBTVFBDUFkKKyNpbmNsdWRlICJzdHJpbmdfY29weS5TIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmNoci5TIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmNoci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OWI4M2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RyY2hyLlMKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgICBzdHJjaHIgLSBmaW5kIGEgY2hhcmFjdGVyIGluIGEgc3RyaW5nCisKKyAgIENvcHlyaWdodCAoYykgMjAxNCwgQVJNIExpbWl0ZWQKKyAgIEFsbCByaWdodHMgUmVzZXJ2ZWQuCisgICBDb3B5cmlnaHQgKGMpIDIwMTQsIExpbmFybyBMdGQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb21wYW55IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgICAgICAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisvKiBBc3N1bXB0aW9uczoKKyAqCisgKiBBUk12OC1hLCBBQXJjaDY0CisgKiBOZW9uIEF2YWlsYWJsZS4KKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKy8qIEFyZ3VtZW50cyBhbmQgcmVzdWx0cy4gICovCisjZGVmaW5lIHNyY2luCQl4MAorI2RlZmluZSBjaHJpbgkJdzEKKworI2RlZmluZSByZXN1bHQJCXgwCisKKyNkZWZpbmUgc3JjCQl4MgorI2RlZmluZQl0bXAxCQl4MworI2RlZmluZSB3dG1wMgkJdzQKKyNkZWZpbmUgdG1wMwkJeDUKKworI2RlZmluZSB2cmVwY2hyCQl2MAorI2RlZmluZSB2ZGF0YTEJCXYxCisjZGVmaW5lIHZkYXRhMgkJdjIKKyNkZWZpbmUgdmhhc19udWwxCXYzCisjZGVmaW5lIHZoYXNfbnVsMgl2NAorI2RlZmluZSB2aGFzX2NocjEJdjUKKyNkZWZpbmUgdmhhc19jaHIyCXY2CisjZGVmaW5lIHZyZXBtYXNrXzAJdjcKKyNkZWZpbmUgdnJlcG1hc2tfYwl2MTYKKyNkZWZpbmUgdmVuZDEJCXYxNworI2RlZmluZSB2ZW5kMgkJdjE4CisKKy8qIENvcmUgYWxnb3JpdGhtLgorCisgICBGb3IgZWFjaCAzMi1ieXRlIGh1bmsgd2UgY2FsY3VsYXRlIGEgNjQtYml0IHN5bmRyb21lIHZhbHVlLCB3aXRoCisgICB0d28gYml0cyBwZXIgYnl0ZSAoTFNCIGlzIGFsd2F5cyBpbiBiaXRzIDAgYW5kIDEsIGZvciBib3RoIGJpZworICAgYW5kIGxpdHRsZS1lbmRpYW4gc3lzdGVtcykuICBGb3IgZWFjaCB0dXBsZSwgYml0IDAgaXMgc2V0IGlmZgorICAgdGhlIHJlbGV2YW50IGJ5dGUgbWF0Y2hlZCB0aGUgcmVxdWVzdGVkIGNoYXJhY3RlcjsgYml0IDEgaXMgc2V0CisgICBpZmYgdGhlIHJlbGV2YW50IGJ5dGUgbWF0Y2hlZCB0aGUgTlVMIGVuZCBvZiBzdHJpbmcgKHdlIHRyaWdnZXIKKyAgIG9mZiBiaXQwIGZvciB0aGUgc3BlY2lhbCBjYXNlIG9mIGxvb2tpbmcgZm9yIE5VTCkuICBTaW5jZSB0aGUgYml0cworICAgaW4gdGhlIHN5bmRyb21lIHJlZmxlY3QgZXhhY3RseSB0aGUgb3JkZXIgaW4gd2hpY2ggdGhpbmdzIG9jY3VyCisgICBpbiB0aGUgb3JpZ2luYWwgc3RyaW5nIGEgY291bnRfdHJhaWxpbmdfemVyb3MoKSBvcGVyYXRpb24gd2lsbAorICAgaWRlbnRpZnkgZXhhY3RseSB3aGljaCBieXRlIGlzIGNhdXNpbmcgdGhlIHRlcm1pbmF0aW9uLCBhbmQgd2h5LiAgKi8KKworLyogTG9jYWxzIGFuZCB0ZW1wb3Jhcmllcy4gICovCisKK0VOVFJZKHN0cmNocikKKwkvKiBNYWdpYyBjb25zdGFudCAweDQwMTAwNDAxIHRvIGFsbG93IHVzIHRvIGlkZW50aWZ5IHdoaWNoIGxhbmUKKwkgICBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQgYnl0ZS4gIE1hZ2ljIGNvbnN0YW50IDB4ODAyMDA4MDIgdXNlZAorCSAgIHNpbWlsYXJseSBmb3IgTlVMIHRlcm1pbmF0aW9uLiAgKi8KKwltb3YJd3RtcDIsICMweDA0MDEKKwltb3ZrCXd0bXAyLCAjMHg0MDEwLCBsc2wgIzE2CisJZHVwCXZyZXBjaHIuMTZiLCBjaHJpbgorCWJpYwlzcmMsIHNyY2luLCAjMzEJCS8qIFdvcmsgd2l0aCBhbGlnbmVkIDMyLWJ5dGUgaHVua3MuICAqLworCWR1cAl2cmVwbWFza19jLjRzLCB3dG1wMgorCWFuZHMJdG1wMSwgc3JjaW4sICMzMQorCWFkZAl2cmVwbWFza18wLjRzLCB2cmVwbWFza19jLjRzLCB2cmVwbWFza19jLjRzIC8qIGVxdWl2OiBsc2wgIzEgKi8KKwliLmVxCS5MbG9vcAorCisJLyogSW5wdXQgc3RyaW5nIGlzIG5vdCAzMi1ieXRlIGFsaWduZWQuICBSYXRoZXIgdGhhbiBmb3JjaW5nCisJICAgdGhlIHBhZGRpbmcgYnl0ZXMgdG8gYSBzYWZlIHZhbHVlLCB3ZSBjYWxjdWxhdGUgdGhlIHN5bmRyb21lCisJICAgZm9yIGFsbCB0aGUgYnl0ZXMsIGJ1dCB0aGVuIG1hc2sgb2ZmIHRob3NlIGJpdHMgb2YgdGhlCisJICAgc3luZHJvbWUgdGhhdCBhcmUgcmVsYXRlZCB0byB0aGUgcGFkZGluZy4gICovCisJbGQxCXt2ZGF0YTEuMTZiLCB2ZGF0YTIuMTZifSwgW3NyY10sICMzMgorCW5lZwl0bXAxLCB0bXAxCisJY21lcQl2aGFzX251bDEuMTZiLCB2ZGF0YTEuMTZiLCAjMAorCWNtZXEJdmhhc19jaHIxLjE2YiwgdmRhdGExLjE2YiwgdnJlcGNoci4xNmIKKwljbWVxCXZoYXNfbnVsMi4xNmIsIHZkYXRhMi4xNmIsICMwCisJY21lcQl2aGFzX2NocjIuMTZiLCB2ZGF0YTIuMTZiLCB2cmVwY2hyLjE2YgorCWFuZAl2aGFzX251bDEuMTZiLCB2aGFzX251bDEuMTZiLCB2cmVwbWFza18wLjE2YgorCWFuZAl2aGFzX251bDIuMTZiLCB2aGFzX251bDIuMTZiLCB2cmVwbWFza18wLjE2YgorCWFuZAl2aGFzX2NocjEuMTZiLCB2aGFzX2NocjEuMTZiLCB2cmVwbWFza19jLjE2YgorCWFuZAl2aGFzX2NocjIuMTZiLCB2aGFzX2NocjIuMTZiLCB2cmVwbWFza19jLjE2YgorCW9ycgl2ZW5kMS4xNmIsIHZoYXNfbnVsMS4xNmIsIHZoYXNfY2hyMS4xNmIKKwlvcnIJdmVuZDIuMTZiLCB2aGFzX251bDIuMTZiLCB2aGFzX2NocjIuMTZiCisJbHNsCXRtcDEsIHRtcDEsICMxCisJYWRkcAl2ZW5kMS4xNmIsIHZlbmQxLjE2YiwgdmVuZDIuMTZiCQkvLyAyNTYtPjEyOAorCW1vdgl0bXAzLCAjfjAKKwlhZGRwCXZlbmQxLjE2YiwgdmVuZDEuMTZiLCB2ZW5kMi4xNmIJCS8vIDEyOC0+NjQKKwlsc3IJdG1wMSwgdG1wMywgdG1wMQorCisJbW92CXRtcDMsIHZlbmQxLjJkWzBdCisJYmljCXRtcDEsIHRtcDMsIHRtcDEJLy8gTWFzayBwYWRkaW5nIGJpdHMuCisJY2Juegl0bXAxLCAuTHRhaWwKKworLkxsb29wOgorCWxkMQl7dmRhdGExLjE2YiwgdmRhdGEyLjE2Yn0sIFtzcmNdLCAjMzIKKwljbWVxCXZoYXNfbnVsMS4xNmIsIHZkYXRhMS4xNmIsICMwCisJY21lcQl2aGFzX2NocjEuMTZiLCB2ZGF0YTEuMTZiLCB2cmVwY2hyLjE2YgorCWNtZXEJdmhhc19udWwyLjE2YiwgdmRhdGEyLjE2YiwgIzAKKwljbWVxCXZoYXNfY2hyMi4xNmIsIHZkYXRhMi4xNmIsIHZyZXBjaHIuMTZiCisJLyogVXNlIGEgZmFzdCBjaGVjayBmb3IgdGhlIHRlcm1pbmF0aW9uIGNvbmRpdGlvbi4gICovCisJb3JyCXZlbmQxLjE2Yiwgdmhhc19udWwxLjE2Yiwgdmhhc19jaHIxLjE2YgorCW9ycgl2ZW5kMi4xNmIsIHZoYXNfbnVsMi4xNmIsIHZoYXNfY2hyMi4xNmIKKwlvcnIJdmVuZDEuMTZiLCB2ZW5kMS4xNmIsIHZlbmQyLjE2YgorCWFkZHAJdmVuZDEuMmQsIHZlbmQxLjJkLCB2ZW5kMS4yZAorCW1vdgl0bXAxLCB2ZW5kMS4yZFswXQorCWNiegl0bXAxLCAuTGxvb3AKKworCS8qIFRlcm1pbmF0aW9uIGNvbmRpdGlvbiBmb3VuZC4gIE5vdyBuZWVkIHRvIGVzdGFibGlzaCBleGFjdGx5IHdoeQorCSAgIHdlIHRlcm1pbmF0ZWQuICAqLworCWFuZAl2aGFzX251bDEuMTZiLCB2aGFzX251bDEuMTZiLCB2cmVwbWFza18wLjE2YgorCWFuZAl2aGFzX251bDIuMTZiLCB2aGFzX251bDIuMTZiLCB2cmVwbWFza18wLjE2YgorCWFuZAl2aGFzX2NocjEuMTZiLCB2aGFzX2NocjEuMTZiLCB2cmVwbWFza19jLjE2YgorCWFuZAl2aGFzX2NocjIuMTZiLCB2aGFzX2NocjIuMTZiLCB2cmVwbWFza19jLjE2YgorCW9ycgl2ZW5kMS4xNmIsIHZoYXNfbnVsMS4xNmIsIHZoYXNfY2hyMS4xNmIKKwlvcnIJdmVuZDIuMTZiLCB2aGFzX251bDIuMTZiLCB2aGFzX2NocjIuMTZiCisJYWRkcAl2ZW5kMS4xNmIsIHZlbmQxLjE2YiwgdmVuZDIuMTZiCQkvLyAyNTYtPjEyOAorCWFkZHAJdmVuZDEuMTZiLCB2ZW5kMS4xNmIsIHZlbmQyLjE2YgkJLy8gMTI4LT42NAorCisJbW92CXRtcDEsIHZlbmQxLjJkWzBdCisuTHRhaWw6CisJLyogQ291bnQgdGhlIHRyYWlsaW5nIHplcm9zLCBieSBiaXQgcmV2ZXJzaW5nLi4uICAqLworCXJiaXQJdG1wMSwgdG1wMQorCS8qIFJlLWJpYXMgc291cmNlLiAgKi8KKwlzdWIJc3JjLCBzcmMsICMzMgorCWNsegl0bXAxLCB0bXAxCS8qIEFuZCBjb3VudGluZyB0aGUgbGVhZGluZyB6ZXJvcy4gICovCisJLyogVG1wMSBpcyBldmVuIGlmIHRoZSB0YXJnZXQgY2hhcmFnZXIgd2FzIGZvdW5kIGZpcnN0LiAgT3RoZXJ3aXNlCisJICAgd2UndmUgZm91bmQgdGhlIGVuZCBvZiBzdHJpbmcgYW5kIHdlIHdlcmVuJ3QgbG9va2luZyBmb3IgTlVMLiAgKi8KKwl0c3QJdG1wMSwgIzEKKwlhZGQJcmVzdWx0LCBzcmMsIHRtcDEsIGxzciAjMQorCWNzZWwJcmVzdWx0LCByZXN1bHQsIHh6ciwgZXEKKwlyZXQKK0VORChzdHJjaHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RyY21wLlMgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RyY21wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjZTQ3OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJjbXAuUwpAQCAtMCwwICsxLDE2MiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDEyLCBMaW5hcm8gTGltaXRlZAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIExpbmFybyBub3IgdGhlCisgICAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworLyogQXNzdW1wdGlvbnM6CisgKgorICogQVJNdjgtYSwgQUFyY2g2NAorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworI2RlZmluZSBSRVA4XzAxIDB4MDEwMTAxMDEwMTAxMDEwMQorI2RlZmluZSBSRVA4XzdmIDB4N2Y3ZjdmN2Y3ZjdmN2Y3ZgorI2RlZmluZSBSRVA4XzgwIDB4ODA4MDgwODA4MDgwODA4MAorCisvKiBQYXJhbWV0ZXJzIGFuZCByZXN1bHQuICAqLworI2RlZmluZSBzcmMxCQl4MAorI2RlZmluZSBzcmMyCQl4MQorI2RlZmluZSByZXN1bHQJCXgwCisKKy8qIEludGVybmFsIHZhcmlhYmxlcy4gICovCisjZGVmaW5lIGRhdGExCQl4MgorI2RlZmluZSBkYXRhMXcJCXcyCisjZGVmaW5lIGRhdGEyCQl4MworI2RlZmluZSBkYXRhMncJCXczCisjZGVmaW5lIGhhc19udWwJCXg0CisjZGVmaW5lIGRpZmYJCXg1CisjZGVmaW5lIHN5bmRyb21lCXg2CisjZGVmaW5lIHRtcDEJCXg3CisjZGVmaW5lIHRtcDIJCXg4CisjZGVmaW5lIHRtcDMJCXg5CisjZGVmaW5lIHplcm9vbmVzCXgxMAorI2RlZmluZSBwb3MJCXgxMQorCisJLyogU3RhcnQgb2YgcGVyZm9ybWFuY2UtY3JpdGljYWwgc2VjdGlvbiAgLS0gb25lIDY0QiBjYWNoZSBsaW5lLiAgKi8KK0VOVFJZKHN0cmNtcCkKKwllb3IJdG1wMSwgc3JjMSwgc3JjMgorCW1vdgl6ZXJvb25lcywgI1JFUDhfMDEKKwl0c3QJdG1wMSwgIzcKKwliLm5lCS5MbWlzYWxpZ25lZDgKKwlhbmRzCXRtcDEsIHNyYzEsICM3CisJYi5uZQkuTG11dHVhbF9hbGlnbgorCS8qIE5VTCBkZXRlY3Rpb24gd29ya3Mgb24gdGhlIHByaW5jaXBsZSB0aGF0IChYIC0gMSkgJiAoflgpICYgMHg4MAorCSAgICg9PiAoWCAtIDEpICYgfihYIHwgMHg3ZikpIGlzIG5vbi16ZXJvIGlmZiBhIGJ5dGUgaXMgemVybywgYW5kCisJICAgY2FuIGJlIGRvbmUgaW4gcGFyYWxsZWwgYWNyb3NzIHRoZSBlbnRpcmUgd29yZC4gICovCisuTGxvb3BfYWxpZ25lZDoKKwlsZHIJZGF0YTEsIFtzcmMxXSwgIzgKKwlsZHIJZGF0YTIsIFtzcmMyXSwgIzgKKy5Mc3RhcnRfcmVhbGlnbmVkOgorCXN1Ygl0bXAxLCBkYXRhMSwgemVyb29uZXMKKwlvcnIJdG1wMiwgZGF0YTEsICNSRVA4XzdmCisJZW9yCWRpZmYsIGRhdGExLCBkYXRhMgkvKiBOb24temVybyBpZiBkaWZmZXJlbmNlcyBmb3VuZC4gICovCisJYmljCWhhc19udWwsIHRtcDEsIHRtcDIJLyogTm9uLXplcm8gaWYgTlVMIHRlcm1pbmF0b3IuICAqLworCW9ycglzeW5kcm9tZSwgZGlmZiwgaGFzX251bAorCWNieglzeW5kcm9tZSwgLkxsb29wX2FsaWduZWQKKwkvKiBFbmQgb2YgcGVyZm9ybWFuY2UtY3JpdGljYWwgc2VjdGlvbiAgLS0gb25lIDY0QiBjYWNoZSBsaW5lLiAgKi8KKworI2lmbmRlZglfX0FBUkNINjRFQl9fCisJcmV2CXN5bmRyb21lLCBzeW5kcm9tZQorCXJldglkYXRhMSwgZGF0YTEKKwkvKiBUaGUgTVMtbm9uLXplcm8gYml0IG9mIHRoZSBzeW5kcm9tZSBtYXJrcyBlaXRoZXIgdGhlIGZpcnN0IGJpdAorCSAgIHRoYXQgaXMgZGlmZmVyZW50LCBvciB0aGUgdG9wIGJpdCBvZiB0aGUgZmlyc3QgemVybyBieXRlLgorCSAgIFNoaWZ0aW5nIGxlZnQgbm93IHdpbGwgYnJpbmcgdGhlIGNyaXRpY2FsIGluZm9ybWF0aW9uIGludG8gdGhlCisJICAgdG9wIGJpdHMuICAqLworCWNseglwb3MsIHN5bmRyb21lCisJcmV2CWRhdGEyLCBkYXRhMgorCWxzbAlkYXRhMSwgZGF0YTEsIHBvcworCWxzbAlkYXRhMiwgZGF0YTIsIHBvcworCS8qIEJ1dCB3ZSBuZWVkIHRvIHplcm8tZXh0ZW5kIChjaGFyIGlzIHVuc2lnbmVkKSB0aGUgdmFsdWUgYW5kIHRoZW4KKwkgICBwZXJmb3JtIGEgc2lnbmVkIDMyLWJpdCBzdWJ0cmFjdGlvbi4gICovCisJbHNyCWRhdGExLCBkYXRhMSwgIzU2CisJc3ViCXJlc3VsdCwgZGF0YTEsIGRhdGEyLCBsc3IgIzU2CisJcmV0CisjZWxzZQorCS8qIEZvciBiaWctZW5kaWFuIHdlIGNhbm5vdCB1c2UgdGhlIHRyaWNrIHdpdGggdGhlIHN5bmRyb21lIHZhbHVlCisJICAgYXMgY2FycnktcHJvcGFnYXRpb24gY2FuIGNvcnJ1cHQgdGhlIHVwcGVyIGJpdHMgaWYgdGhlIHRyYWlsaW5nCisJICAgYnl0ZXMgaW4gdGhlIHN0cmluZyBjb250YWluIDB4MDEuICAqLworCS8qIEhvd2V2ZXIsIGlmIHRoZXJlIGlzIG5vIE5VTCBieXRlIGluIHRoZSBkd29yZCwgd2UgY2FuIGdlbmVyYXRlCisJICAgdGhlIHJlc3VsdCBkaXJlY3RseS4gIFdlIGNhbid0IGp1c3Qgc3VidHJhY3QgdGhlIGJ5dGVzIGFzIHRoZQorCSAgIE1TQiBtaWdodCBiZSBzaWduaWZpY2FudC4gICovCisJY2JuegloYXNfbnVsLCAxZgorCWNtcAlkYXRhMSwgZGF0YTIKKwljc2V0CXJlc3VsdCwgbmUKKwljbmVnCXJlc3VsdCwgcmVzdWx0LCBsbworCXJldAorMToKKwkvKiBSZS1jb21wdXRlIHRoZSBOVUwtYnl0ZSBkZXRlY3Rpb24sIHVzaW5nIGEgYnl0ZS1yZXZlcnNlZCB2YWx1ZS4gICovCisJcmV2CXRtcDMsIGRhdGExCisJc3ViCXRtcDEsIHRtcDMsIHplcm9vbmVzCisJb3JyCXRtcDIsIHRtcDMsICNSRVA4XzdmCisJYmljCWhhc19udWwsIHRtcDEsIHRtcDIKKwlyZXYJaGFzX251bCwgaGFzX251bAorCW9ycglzeW5kcm9tZSwgZGlmZiwgaGFzX251bAorCWNseglwb3MsIHN5bmRyb21lCisJLyogVGhlIE1TLW5vbi16ZXJvIGJpdCBvZiB0aGUgc3luZHJvbWUgbWFya3MgZWl0aGVyIHRoZSBmaXJzdCBiaXQKKwkgICB0aGF0IGlzIGRpZmZlcmVudCwgb3IgdGhlIHRvcCBiaXQgb2YgdGhlIGZpcnN0IHplcm8gYnl0ZS4KKwkgICBTaGlmdGluZyBsZWZ0IG5vdyB3aWxsIGJyaW5nIHRoZSBjcml0aWNhbCBpbmZvcm1hdGlvbiBpbnRvIHRoZQorCSAgIHRvcCBiaXRzLiAgKi8KKwlsc2wJZGF0YTEsIGRhdGExLCBwb3MKKwlsc2wJZGF0YTIsIGRhdGEyLCBwb3MKKwkvKiBCdXQgd2UgbmVlZCB0byB6ZXJvLWV4dGVuZCAoY2hhciBpcyB1bnNpZ25lZCkgdGhlIHZhbHVlIGFuZCB0aGVuCisJICAgcGVyZm9ybSBhIHNpZ25lZCAzMi1iaXQgc3VidHJhY3Rpb24uICAqLworCWxzcglkYXRhMSwgZGF0YTEsICM1NgorCXN1YglyZXN1bHQsIGRhdGExLCBkYXRhMiwgbHNyICM1NgorCXJldAorI2VuZGlmCisKKy5MbXV0dWFsX2FsaWduOgorCS8qIFNvdXJjZXMgYXJlIG11dHVhbGx5IGFsaWduZWQsIGJ1dCBhcmUgbm90IGN1cnJlbnRseSBhdCBhbgorCSAgIGFsaWdubWVudCBib3VuZGFyeS4gIFJvdW5kIGRvd24gdGhlIGFkZHJlc3NlcyBhbmQgdGhlbiBtYXNrIG9mZgorCSAgIHRoZSBieXRlcyB0aGF0IHByZWNlZWQgdGhlIHN0YXJ0IHBvaW50LiAgKi8KKwliaWMJc3JjMSwgc3JjMSwgIzcKKwliaWMJc3JjMiwgc3JjMiwgIzcKKwlsc2wJdG1wMSwgdG1wMSwgIzMJCS8qIEJ5dGVzIGJleW9uZCBhbGlnbm1lbnQgLT4gYml0cy4gICovCisJbGRyCWRhdGExLCBbc3JjMV0sICM4CisJbmVnCXRtcDEsIHRtcDEJCS8qIEJpdHMgdG8gYWxpZ25tZW50IC02NC4gICovCisJbGRyCWRhdGEyLCBbc3JjMl0sICM4CisJbW92CXRtcDIsICN+MAorI2lmZGVmIF9fQUFSQ0g2NEVCX18KKwkvKiBCaWctZW5kaWFuLiAgRWFybHkgYnl0ZXMgYXJlIGF0IE1TQi4gICovCisJbHNsCXRtcDIsIHRtcDIsIHRtcDEJLyogU2hpZnQgKHRtcDEgJiA2MykuICAqLworI2Vsc2UKKwkvKiBMaXR0bGUtZW5kaWFuLiAgRWFybHkgYnl0ZXMgYXJlIGF0IExTQi4gICovCisJbHNyCXRtcDIsIHRtcDIsIHRtcDEJLyogU2hpZnQgKHRtcDEgJiA2MykuICAqLworI2VuZGlmCisJb3JyCWRhdGExLCBkYXRhMSwgdG1wMgorCW9ycglkYXRhMiwgZGF0YTIsIHRtcDIKKwliCS5Mc3RhcnRfcmVhbGlnbmVkCisKKy5MbWlzYWxpZ25lZDg6CisJLyogV2UgY2FuIGRvIGJldHRlciB0aGFuIHRoaXMuICAqLworCWxkcmIJZGF0YTF3LCBbc3JjMV0sICMxCisJbGRyYglkYXRhMncsIFtzcmMyXSwgIzEKKwljbXAJZGF0YTF3LCAjMQorCWNjbXAJZGF0YTF3LCBkYXRhMncsICMwLCBjcwkvKiBOWkNWID0gMGIwMDAwLiAgKi8KKwliLmVxCS5MbWlzYWxpZ25lZDgKKwlzdWIJcmVzdWx0LCBkYXRhMSwgZGF0YTIKKwlyZXQKK0VORChzdHJjbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RyY3B5LlMgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RyY3B5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYwYzMyMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJjcHkuUwpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjZGVmaW5lIFNUUkNQWQorI2luY2x1ZGUgInN0cmluZ19jb3B5LlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RyaW5nX2NvcHkuUyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJpbmdfY29weS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZjk2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RyaW5nX2NvcHkuUwpAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICAgQ29weXJpZ2h0IChjKSAyMDE0LCBMaW5hcm8gTGltaXRlZAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIExpbmFybyBub3IgdGhlCisgICAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworLyogQXNzdW1wdGlvbnM6CisgKgorICogQVJNdjgtYSwgQUFyY2g2NAorICovCisKKyNpZiAhZGVmaW5lZChTVFBDUFkpICYmICFkZWZpbmVkKFNUUkNQWSkKKyNlcnJvciAiRWl0aGVyIFNUUENQWSBvciBTVFJDUFkgbXVzdCBiZSBkZWZpbmVkLiIKKyNlbmRpZgorCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKy8qIEFyZ3VtZW50cyBhbmQgcmVzdWx0cy4gICovCisjaWYgZGVmaW5lZChTVFBDUFkpCisjZGVmaW5lIGRzdCAgICAgICAgIHgwCisjZWxpZiBkZWZpbmVkKFNUUkNQWSkKKyNkZWZpbmUgZHN0aW4gICAgICAgeDAKKyNlbmRpZgorI2RlZmluZSBzcmMgICAgICAgICB4MQorCisvKiBMb2NhbHMgYW5kIHRlbXBvcmFyaWVzLiAgKi8KKyNpZiBkZWZpbmVkKFNUUkNQWSkKKyNkZWZpbmUgZHN0ICAgICAgICAgeDIKKyNlbmRpZgorI2RlZmluZSBkYXRhMSAgICAgICB4MworI2RlZmluZSBkYXRhMV93ICAgICB3MworI2RlZmluZSBkYXRhMiAgICAgICB4NAorI2RlZmluZSBkYXRhMl93ICAgICB3NAorI2RlZmluZSBoYXNfbnVsMSAgICB4NQorI2RlZmluZSBoYXNfbnVsMV93ICB3NQorI2RlZmluZSBoYXNfbnVsMiAgICB4NgorI2RlZmluZSB0bXAxICAgICAgICB4NworI2RlZmluZSB0bXAyICAgICAgICB4OAorI2RlZmluZSB0bXAzICAgICAgICB4OQorI2RlZmluZSB0bXA0ICAgICAgICB4MTAKKyNkZWZpbmUgemVyb29uZXMgICAgeDExCisjZGVmaW5lIHplcm9vbmVzX3cgIHcxMQorI2RlZmluZSBwb3MgICAgICAgICB4MTIKKworI2RlZmluZSBSRVA4XzAxIDB4MDEwMTAxMDEwMTAxMDEwMQorI2RlZmluZSBSRVA4XzdmIDB4N2Y3ZjdmN2Y3ZjdmN2Y3ZgorI2RlZmluZSBSRVA4XzgwIDB4ODA4MDgwODA4MDgwODA4MAorCisjaWYgZGVmaW5lZChTVFBDUFkpCitFTlRSWShzdHBjcHkpCisjZWxpZiBkZWZpbmVkKFNUUkNQWSkKK0VOVFJZKHN0cmNweSkKKyNlbmRpZgorICAgIG1vdiAgICAgemVyb29uZXMsICNSRVA4XzAxCisjaWYgZGVmaW5lZChTVFJDUFkpCisgICAgbW92ICAgICBkc3QsIGRzdGluCisjZW5kaWYKKyAgICBhbmRzICAgIHRtcDEsIHNyYywgIzE1CisgICAgYi5uZSAgICAuTG1pc2FsaWduZWQKKyAgICAvLyBOVUwgZGV0ZWN0aW9uIHdvcmtzIG9uIHRoZSBwcmluY2lwbGUgdGhhdCAoWCAtIDEpICYgKH5YKSAmIDB4ODAKKyAgICAvLyAoPT4gKFggLSAxKSAmIH4oWCB8IDB4N2YpKSBpcyBub24temVybyBpZmYgYSBieXRlIGlzIHplcm8sIGFuZAorICAgIC8vIGNhbiBiZSBkb25lIGluIHBhcmFsbGVsIGFjcm9zcyB0aGUgZW50aXJlIHdvcmQuCisgICAgLy8gVGhlIGlubmVyIGxvb3AgZGVhbHMgd2l0aCB0d28gRHdvcmRzIGF0IGEgdGltZS4gIFRoaXMgaGFzIGEKKyAgICAvLyBzbGlnaHRseSBoaWdoZXIgc3RhcnQtdXAgY29zdCwgYnV0IHdlIHNob3VsZCB3aW4gcXVpdGUgcXVpY2tseSwKKyAgICAvLyBlc3BlY2lhbGx5IG9uIGNvcmVzIHdpdGggYSBoaWdoIG51bWJlciBvZiBpc3N1ZSBzbG90cyBwZXIKKyAgICAvLyBjeWNsZSwgYXMgd2UgZ2V0IG11Y2ggYmV0dGVyIHBhcmFsbGVsaXNtIG91dCBvZiB0aGUgb3BlcmF0aW9ucy4KKy5MbG9vcDoKKyAgICBsZHAgICAgIGRhdGExLCBkYXRhMiwgW3NyY10sICMxNgorICAgIHN1YiAgICAgdG1wMSwgZGF0YTEsIHplcm9vbmVzCisgICAgb3JyICAgICB0bXAyLCBkYXRhMSwgI1JFUDhfN2YKKyAgICBiaWMgICAgIGhhc19udWwxLCB0bXAxLCB0bXAyCisgICAgY2JueiAgICBoYXNfbnVsMSwgLkxudWxfaW5fZGF0YTEKKyAgICBzdWIgICAgIHRtcDMsIGRhdGEyLCB6ZXJvb25lcworICAgIG9yciAgICAgdG1wNCwgZGF0YTIsICNSRVA4XzdmCisgICAgYmljICAgICBoYXNfbnVsMiwgdG1wMywgdG1wNAorICAgIGNibnogICAgaGFzX251bDIsIC5MbnVsX2luX2RhdGEyCisgICAgLy8gTm8gTlVMIGluIGVpdGhlciByZWdpc3RlciwgY29weSBpdCBpbiBhIHNpbmdsZSBpbnN0cnVjdGlvbi4KKyAgICBzdHAgICAgIGRhdGExLCBkYXRhMiwgW2RzdF0sICMxNgorICAgIGIgICAgICAgLkxsb29wCisKKy5MbnVsX2luX2RhdGExOgorICAgIHJldiAgICAgaGFzX251bDEsIGhhc19udWwxCisgICAgY2x6ICAgICBwb3MsIGhhc19udWwxCisgICAgYWRkICAgICB0bXAxLCBwb3MsICMweDgKKworICAgIHRieiAgICAgdG1wMSwgIzYsIDFmCisjaWYgZGVmaW5lZChTVFBDUFkpCisgICAgc3RyICAgICBkYXRhMSwgW2RzdF0sICM3CisjZWxpZiBkZWZpbmVkKFNUUkNQWSkKKyAgICBzdHIgICAgIGRhdGExLCBbZHN0XQorI2VuZGlmCisgICAgcmV0CisxOgorICAgIHRieiAgICAgdG1wMSwgIzUsIDFmCisgICAgc3RyICAgICBkYXRhMV93LCBbZHN0XSwgIzQKKyAgICBsc3IgICAgIGRhdGExLCBkYXRhMSwgIzMyCisxOgorICAgIHRieiAgICAgdG1wMSwgIzQsIDFmCisgICAgc3RyaCAgICBkYXRhMV93LCBbZHN0XSwgIzIKKyAgICBsc3IgICAgIGRhdGExLCBkYXRhMSwgIzE2CisxOgorICAgIHRieiAgICAgdG1wMSwgIzMsIDFmCisgICAgc3RyYiAgICBkYXRhMV93LCBbZHN0XQorI2lmIGRlZmluZWQoU1RQQ1BZKQorICAgIHJldAorI2VuZGlmCisxOgorI2lmIGRlZmluZWQoU1RQQ1BZKQorICAgIC8vIEJhY2sgdXAgb25lIHNvIHRoYXQgZHN0IHBvaW50cyB0byB0aGUgJ1wwJyBzdHJpbmcgdGVybWluYXRvci4KKyAgICBzdWIgICAgIGRzdCwgZHN0LCAjMQorI2VuZGlmCisgICAgcmV0CisKKy5MbnVsX2luX2RhdGEyOgorICAgIHN0ciAgICAgZGF0YTEsIFtkc3RdLCAjOAorICAgIHJldiAgICAgaGFzX251bDIsIGhhc19udWwyCisgICAgY2x6ICAgICBwb3MsIGhhc19udWwyCisgICAgYWRkICAgICB0bXAxLCBwb3MsICMweDgKKworICAgIHRieiAgICAgdG1wMSwgIzYsIDFmCisjaWYgZGVmaW5lZChTVFBDUFkpCisgICAgc3RyICAgICBkYXRhMiwgW2RzdF0sICM3CisjZWxpZiBkZWZpbmVkKFNUUkNQWSkKKyAgICBzdHIgICAgIGRhdGEyLCBbZHN0XQorI2VuZGlmCisgICAgcmV0CisxOgorICAgIHRieiAgICAgdG1wMSwgIzUsIDFmCisgICAgc3RyICAgICBkYXRhMl93LCBbZHN0XSwgIzQKKyAgICBsc3IgICAgIGRhdGEyLCBkYXRhMiwgIzMyCisxOgorICAgIHRieiAgICAgdG1wMSwgIzQsIDFmCisgICAgc3RyaCAgICBkYXRhMl93LCBbZHN0XSwgIzIKKyAgICBsc3IgICAgIGRhdGEyLCBkYXRhMiwgIzE2CisxOgorICAgIHRieiAgICAgdG1wMSwgIzMsIDFmCisgICAgc3RyYiAgICBkYXRhMl93LCBbZHN0XQorI2lmIGRlZmluZWQoU1RQQ1BZKQorICAgIHJldAorI2VuZGlmCisxOgorI2lmIGRlZmluZWQoU1RQQ1BZKQorICAgIC8vIEJhY2sgdXAgb25lIHNvIHRoYXQgZHN0IHBvaW50cyB0byB0aGUgJ1wwJyBzdHJpbmcgdGVybWluYXRvci4KKyAgICBzdWIgICAgIGRzdCwgZHN0LCAjMQorI2VuZGlmCisgICAgcmV0CisKKy5MbWlzYWxpZ25lZDoKKyAgICB0YnogICAgIHNyYywgIzAsIDFmCisgICAgbGRyYiAgICBkYXRhMV93LCBbc3JjXSwgIzEKKyAgICBzdHJiICAgIGRhdGExX3csIFtkc3RdLCAjMQorICAgIGNibnogICAgZGF0YTFfdywgMWYKKyNpZiBkZWZpbmVkKFNUUENQWSkKKyAgICAvLyBCYWNrIHVwIG9uZSBzbyB0aGF0IGRzdCBwb2ludHMgdG8gdGhlICdcMCcgc3RyaW5nIHRlcm1pbmF0b3IuCisgICAgc3ViICAgICBkc3QsIGRzdCwgIzEKKyNlbmRpZgorICAgIHJldAorMToKKyAgICB0YnogICAgIHNyYywgIzEsIDFmCisgICAgbGRyYiAgICBkYXRhMV93LCBbc3JjXSwgIzEKKyAgICBzdHJiICAgIGRhdGExX3csIFtkc3RdLCAjMQorICAgIGNieiAgICAgZGF0YTFfdywgLkxkb25lCisgICAgbGRyYiAgICBkYXRhMl93LCBbc3JjXSwgIzEKKyAgICBzdHJiICAgIGRhdGEyX3csIFtkc3RdLCAjMQorICAgIGNibnogICAgZGF0YTJfdywgMWYKKy5MZG9uZToKKyNpZiBkZWZpbmVkKFNUUENQWSkKKyAgICAvLyBCYWNrIHVwIG9uZSBzbyB0aGF0IGRzdCBwb2ludHMgdG8gdGhlICdcMCcgc3RyaW5nIHRlcm1pbmF0b3IuCisgICAgc3ViICAgICBkc3QsIGRzdCwgIzEKKyNlbmRpZgorICAgIHJldAorMToKKyAgICB0YnogICAgIHNyYywgIzIsIDFmCisgICAgbGRyICAgICBkYXRhMV93LCBbc3JjXSwgIzQKKyAgICAvLyBDaGVjayBmb3IgYSB6ZXJvLgorICAgIHN1YiAgICAgaGFzX251bDFfdywgZGF0YTFfdywgemVyb29uZXNfdworICAgIGJpYyAgICAgaGFzX251bDFfdywgaGFzX251bDFfdywgZGF0YTFfdworICAgIGFuZHMgICAgaGFzX251bDFfdywgaGFzX251bDFfdywgIzB4ODA4MDgwODAKKyAgICBiLm5lICAgIC5MbnVsX2luX2RhdGExCisgICAgc3RyICAgICBkYXRhMV93LCBbZHN0XSwgIzQKKzE6CisgICAgdGJ6ICAgICBzcmMsICMzLCAuTGxvb3AKKyAgICBsZHIgICAgIGRhdGExLCBbc3JjXSwgIzgKKyAgICAvLyBDaGVjayBmb3IgYSB6ZXJvLgorICAgIHN1YiAgICAgdG1wMSwgZGF0YTEsIHplcm9vbmVzCisgICAgb3JyICAgICB0bXAyLCBkYXRhMSwgI1JFUDhfN2YKKyAgICBiaWNzICAgIGhhc19udWwxLCB0bXAxLCB0bXAyCisgICAgYi5uZSAgICAuTG51bF9pbl9kYXRhMQorICAgIHN0ciAgICAgZGF0YTEsIFtkc3RdLCAjOAorICAgIGIgICAgICAgLkxsb29wCisjaWYgZGVmaW5lZChTVFBDUFkpCitFTkQoc3RwY3B5KQorI2VsaWYgZGVmaW5lZChTVFJDUFkpCitFTkQoc3RyY3B5KQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RybGVuLlMgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RybGVuLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JkOTgwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJsZW4uUwpAQCAtMCwwICsxLDEyNiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE0LCBMaW5hcm8gTGltaXRlZAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIExpbmFybyBub3IgdGhlCisgICAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworLyogQXNzdW1wdGlvbnM6CisgKgorICogQVJNdjgtYSwgQUFyY2g2NAorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworLyogQXJndW1lbnRzIGFuZCByZXN1bHRzLiAgKi8KKyNkZWZpbmUgc3JjaW4JCXgwCisjZGVmaW5lIGxlbgkJeDAKKworLyogTG9jYWxzIGFuZCB0ZW1wb3Jhcmllcy4gICovCisjZGVmaW5lIHNyYwkJeDEKKyNkZWZpbmUgZGF0YTEJCXgyCisjZGVmaW5lIGRhdGEyCQl4MworI2RlZmluZSBkYXRhMmEJCXg0CisjZGVmaW5lIGhhc19udWwxCXg1CisjZGVmaW5lIGhhc19udWwyCXg2CisjZGVmaW5lIHRtcDEJCXg3CisjZGVmaW5lIHRtcDIJCXg4CisjZGVmaW5lIHRtcDMJCXg5CisjZGVmaW5lIHRtcDQJCXgxMAorI2RlZmluZSB6ZXJvb25lcwl4MTEKKyNkZWZpbmUgcG9zCQl4MTIKKworI2RlZmluZSBSRVA4XzAxIDB4MDEwMTAxMDEwMTAxMDEwMQorI2RlZmluZSBSRVA4XzdmIDB4N2Y3ZjdmN2Y3ZjdmN2Y3ZgorI2RlZmluZSBSRVA4XzgwIDB4ODA4MDgwODA4MDgwODA4MAorCisJLyogU3RhcnQgb2YgY3JpdGlhbCBzZWN0aW9uIC0tIGtlZXAgdG8gb25lIDY0Qnl0ZSBjYWNoZSBsaW5lLiAgKi8KK0VOVFJZKHN0cmxlbikKKwltb3YJemVyb29uZXMsICNSRVA4XzAxCisJYmljCXNyYywgc3JjaW4sICMxNQorCWFuZHMJdG1wMSwgc3JjaW4sICMxNQorCWIubmUJLkxtaXNhbGlnbmVkCisJLyogTlVMIGRldGVjdGlvbiB3b3JrcyBvbiB0aGUgcHJpbmNpcGxlIHRoYXQgKFggLSAxKSAmICh+WCkgJiAweDgwCisJICAgKD0+IChYIC0gMSkgJiB+KFggfCAweDdmKSkgaXMgbm9uLXplcm8gaWZmIGEgYnl0ZSBpcyB6ZXJvLCBhbmQKKwkgICBjYW4gYmUgZG9uZSBpbiBwYXJhbGxlbCBhY3Jvc3MgdGhlIGVudGlyZSB3b3JkLiAgKi8KKwkvKiBUaGUgaW5uZXIgbG9vcCBkZWFscyB3aXRoIHR3byBEd29yZHMgYXQgYSB0aW1lLiAgVGhpcyBoYXMgYQorCSAgIHNsaWdodGx5IGhpZ2hlciBzdGFydC11cCBjb3N0LCBidXQgd2Ugc2hvdWxkIHdpbiBxdWl0ZSBxdWlja2x5LAorCSAgIGVzcGVjaWFsbHkgb24gY29yZXMgd2l0aCBhIGhpZ2ggbnVtYmVyIG9mIGlzc3VlIHNsb3RzIHBlcgorCSAgIGN5Y2xlLCBhcyB3ZSBnZXQgbXVjaCBiZXR0ZXIgcGFyYWxsZWxpc20gb3V0IG9mIHRoZSBvcGVyYXRpb25zLiAgKi8KKy5MbG9vcDoKKwlsZHAJZGF0YTEsIGRhdGEyLCBbc3JjXSwgIzE2CisuTHJlYWxpZ25lZDoKKwlzdWIJdG1wMSwgZGF0YTEsIHplcm9vbmVzCisJb3JyCXRtcDIsIGRhdGExLCAjUkVQOF83ZgorCXN1Ygl0bXAzLCBkYXRhMiwgemVyb29uZXMKKwlvcnIJdG1wNCwgZGF0YTIsICNSRVA4XzdmCisJYmljCWhhc19udWwxLCB0bXAxLCB0bXAyCisJYmljcwloYXNfbnVsMiwgdG1wMywgdG1wNAorCWNjbXAJaGFzX251bDEsICMwLCAjMCwgZXEJLyogTlpDViA9IDAwMDAgICovCisJYi5lcQkuTGxvb3AKKwkvKiBFbmQgb2YgY3JpdGljYWwgc2VjdGlvbiAtLSBrZWVwIHRvIG9uZSA2NEJ5dGUgY2FjaGUgbGluZS4gICovCisKKwlzdWIJbGVuLCBzcmMsIHNyY2luCisJY2J6CWhhc19udWwxLCAuTG51bF9pbl9kYXRhMgorI2lmZGVmIF9fQUFSQ0g2NEVCX18KKwltb3YJZGF0YTIsIGRhdGExCisjZW5kaWYKKwlzdWIJbGVuLCBsZW4sICM4CisJbW92CWhhc19udWwyLCBoYXNfbnVsMQorLkxudWxfaW5fZGF0YTI6CisjaWZkZWYgX19BQVJDSDY0RUJfXworCS8qIEZvciBiaWctZW5kaWFuLCBjYXJyeSBwcm9wYWdhdGlvbiAoaWYgdGhlIGZpbmFsIGJ5dGUgaW4gdGhlCisJICAgc3RyaW5nIGlzIDB4MDEpIG1lYW5zIHdlIGNhbm5vdCB1c2UgaGFzX251bCBkaXJlY3RseS4gIFRoZQorCSAgIGVhc2llc3Qgd2F5IHRvIGdldCB0aGUgY29ycmVjdCBieXRlIGlzIHRvIGJ5dGUtc3dhcCB0aGUgZGF0YQorCSAgIGFuZCBjYWxjdWxhdGUgdGhlIHN5bmRyb21lIGEgc2Vjb25kIHRpbWUuICAqLworCXJldglkYXRhMiwgZGF0YTIKKwlzdWIJdG1wMSwgZGF0YTIsIHplcm9vbmVzCisJb3JyCXRtcDIsIGRhdGEyLCAjUkVQOF83ZgorCWJpYwloYXNfbnVsMiwgdG1wMSwgdG1wMgorI2VuZGlmCisJc3ViCWxlbiwgbGVuLCAjOAorCXJldgloYXNfbnVsMiwgaGFzX251bDIKKwljbHoJcG9zLCBoYXNfbnVsMgorCWFkZAlsZW4sIGxlbiwgcG9zLCBsc3IgIzMJCS8qIEJpdHMgdG8gYnl0ZXMuICAqLworCXJldAorCisuTG1pc2FsaWduZWQ6CisJY21wCXRtcDEsICM4CisJbmVnCXRtcDEsIHRtcDEKKwlsZHAJZGF0YTEsIGRhdGEyLCBbc3JjXSwgIzE2CisJbHNsCXRtcDEsIHRtcDEsICMzCQkvKiBCeXRlcyBiZXlvbmQgYWxpZ25tZW50IC0+IGJpdHMuICAqLworCW1vdgl0bXAyLCAjfjAKKyNpZmRlZiBfX0FBUkNINjRFQl9fCisJLyogQmlnLWVuZGlhbi4gIEVhcmx5IGJ5dGVzIGFyZSBhdCBNU0IuICAqLworCWxzbAl0bXAyLCB0bXAyLCB0bXAxCS8qIFNoaWZ0ICh0bXAxICYgNjMpLiAgKi8KKyNlbHNlCisJLyogTGl0dGxlLWVuZGlhbi4gIEVhcmx5IGJ5dGVzIGFyZSBhdCBMU0IuICAqLworCWxzcgl0bXAyLCB0bXAyLCB0bXAxCS8qIFNoaWZ0ICh0bXAxICYgNjMpLiAgKi8KKyNlbmRpZgorCW9ycglkYXRhMSwgZGF0YTEsIHRtcDIKKwlvcnIJZGF0YTJhLCBkYXRhMiwgdG1wMgorCWNzaW52CWRhdGExLCBkYXRhMSwgeHpyLCBsZQorCWNzZWwJZGF0YTIsIGRhdGEyLCBkYXRhMmEsIGxlCisJYgkuTHJlYWxpZ25lZAorCitFTkQoc3RybGVuKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cm5jbXAuUyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJuY21wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3ZjY2MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJuY21wLlMKQEAgLTAsMCArMSwyMTcgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNCwgTGluYXJvIExpbWl0ZWQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBMaW5hcm8gbm9yIHRoZQorICAgICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICAgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qIEFzc3VtcHRpb25zOgorICoKKyAqIEFSTXY4LWEsIEFBcmNoNjQKKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKyNkZWZpbmUgUkVQOF8wMSAweDAxMDEwMTAxMDEwMTAxMDEKKyNkZWZpbmUgUkVQOF83ZiAweDdmN2Y3ZjdmN2Y3ZjdmN2YKKyNkZWZpbmUgUkVQOF84MCAweDgwODA4MDgwODA4MDgwODAKKworLyogUGFyYW1ldGVycyBhbmQgcmVzdWx0LiAgKi8KKyNkZWZpbmUgc3JjMQkJeDAKKyNkZWZpbmUgc3JjMgkJeDEKKyNkZWZpbmUgbGltaXQJCXgyCisjZGVmaW5lIHJlc3VsdAkJeDAKKworLyogSW50ZXJuYWwgdmFyaWFibGVzLiAgKi8KKyNkZWZpbmUgZGF0YTEJCXgzCisjZGVmaW5lIGRhdGExdwkJdzMKKyNkZWZpbmUgZGF0YTIJCXg0CisjZGVmaW5lIGRhdGEydwkJdzQKKyNkZWZpbmUgaGFzX251bAkJeDUKKyNkZWZpbmUgZGlmZgkJeDYKKyNkZWZpbmUgc3luZHJvbWUJeDcKKyNkZWZpbmUgdG1wMQkJeDgKKyNkZWZpbmUgdG1wMgkJeDkKKyNkZWZpbmUgdG1wMwkJeDEwCisjZGVmaW5lIHplcm9vbmVzCXgxMQorI2RlZmluZSBwb3MJCXgxMgorI2RlZmluZSBsaW1pdF93ZAl4MTMKKyNkZWZpbmUgbWFzawkJeDE0CisjZGVmaW5lIGVuZGxvb3AJCXgxNQorCisJLnRleHQKKwkucDJhbGlnbiA2CisJLnJlcCA3CisJbm9wCS8qIFBhZCBzbyB0aGF0IHRoZSBsb29wIGJlbG93IGZpdHMgYSBjYWNoZSBsaW5lLiAgKi8KKwkuZW5kcgorRU5UUlkoc3RybmNtcCkKKwljYnoJbGltaXQsIC5McmV0MAorCWVvcgl0bXAxLCBzcmMxLCBzcmMyCisJbW92CXplcm9vbmVzLCAjUkVQOF8wMQorCXRzdAl0bXAxLCAjNworCWIubmUJLkxtaXNhbGlnbmVkOAorCWFuZHMJdG1wMSwgc3JjMSwgIzcKKwliLm5lCS5MbXV0dWFsX2FsaWduCisJLyogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgZnVsbCBhbmQgcGFydGlhbCB3b3JkcyAtMS4gICovCisJc3ViCWxpbWl0X3dkLCBsaW1pdCwgIzEJLyogbGltaXQgIT0gMCwgc28gbm8gdW5kZXJmbG93LiAgKi8KKwlsc3IJbGltaXRfd2QsIGxpbWl0X3dkLCAjMwkvKiBDb252ZXJ0IHRvIER3b3Jkcy4gICovCisKKwkvKiBOVUwgZGV0ZWN0aW9uIHdvcmtzIG9uIHRoZSBwcmluY2lwbGUgdGhhdCAoWCAtIDEpICYgKH5YKSAmIDB4ODAKKwkgICAoPT4gKFggLSAxKSAmIH4oWCB8IDB4N2YpKSBpcyBub24temVybyBpZmYgYSBieXRlIGlzIHplcm8sIGFuZAorCSAgIGNhbiBiZSBkb25lIGluIHBhcmFsbGVsIGFjcm9zcyB0aGUgZW50aXJlIHdvcmQuICAqLworCS8qIFN0YXJ0IG9mIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHNlY3Rpb24gIC0tIG9uZSA2NEIgY2FjaGUgbGluZS4gICovCisuTGxvb3BfYWxpZ25lZDoKKwlsZHIJZGF0YTEsIFtzcmMxXSwgIzgKKwlsZHIJZGF0YTIsIFtzcmMyXSwgIzgKKy5Mc3RhcnRfcmVhbGlnbmVkOgorCXN1YnMJbGltaXRfd2QsIGxpbWl0X3dkLCAjMQorCXN1Ygl0bXAxLCBkYXRhMSwgemVyb29uZXMKKwlvcnIJdG1wMiwgZGF0YTEsICNSRVA4XzdmCisJZW9yCWRpZmYsIGRhdGExLCBkYXRhMgkvKiBOb24temVybyBpZiBkaWZmZXJlbmNlcyBmb3VuZC4gICovCisJY3NpbnYJZW5kbG9vcCwgZGlmZiwgeHpyLCBwbAkvKiBMYXN0IER3b3JkIG9yIGRpZmZlcmVuY2VzLiAgKi8KKwliaWNzCWhhc19udWwsIHRtcDEsIHRtcDIJLyogTm9uLXplcm8gaWYgTlVMIHRlcm1pbmF0b3IuICAqLworCWNjbXAJZW5kbG9vcCwgIzAsICMwLCBlcQorCWIuZXEJLkxsb29wX2FsaWduZWQKKwkvKiBFbmQgb2YgcGVyZm9ybWFuY2UtY3JpdGljYWwgc2VjdGlvbiAgLS0gb25lIDY0QiBjYWNoZSBsaW5lLiAgKi8KKworCS8qIE5vdCByZWFjaGVkIHRoZSBsaW1pdCwgbXVzdCBoYXZlIGZvdW5kIHRoZSBlbmQgb3IgYSBkaWZmLiAgKi8KKwl0YnoJbGltaXRfd2QsICM2MywgLkxub3RfbGltaXQKKworCS8qIExpbWl0ICUgOCA9PSAwID0+IGFsbCBieXRlcyBzaWduaWZpY2FudC4gICovCisJYW5kcwlsaW1pdCwgbGltaXQsICM3CisJYi5lcQkuTG5vdF9saW1pdAorCisJbHNsCWxpbWl0LCBsaW1pdCwgIzMJLyogQml0cyAtPiBieXRlcy4gICovCisJbW92CW1hc2ssICN+MAorI2lmZGVmIF9fQUFSQ0g2NEVCX18KKwlsc3IJbWFzaywgbWFzaywgbGltaXQKKyNlbHNlCisJbHNsCW1hc2ssIG1hc2ssIGxpbWl0CisjZW5kaWYKKwliaWMJZGF0YTEsIGRhdGExLCBtYXNrCisJYmljCWRhdGEyLCBkYXRhMiwgbWFzaworCisJLyogTWFrZSBzdXJlIHRoYXQgdGhlIE5VTCBieXRlIGlzIG1hcmtlZCBpbiB0aGUgc3luZHJvbWUuICAqLworCW9ycgloYXNfbnVsLCBoYXNfbnVsLCBtYXNrCisKKy5Mbm90X2xpbWl0OgorCW9ycglzeW5kcm9tZSwgZGlmZiwgaGFzX251bAorCisjaWZuZGVmCV9fQUFSQ0g2NEVCX18KKwlyZXYJc3luZHJvbWUsIHN5bmRyb21lCisJcmV2CWRhdGExLCBkYXRhMQorCS8qIFRoZSBNUy1ub24temVybyBiaXQgb2YgdGhlIHN5bmRyb21lIG1hcmtzIGVpdGhlciB0aGUgZmlyc3QgYml0CisJICAgdGhhdCBpcyBkaWZmZXJlbnQsIG9yIHRoZSB0b3AgYml0IG9mIHRoZSBmaXJzdCB6ZXJvIGJ5dGUuCisJICAgU2hpZnRpbmcgbGVmdCBub3cgd2lsbCBicmluZyB0aGUgY3JpdGljYWwgaW5mb3JtYXRpb24gaW50byB0aGUKKwkgICB0b3AgYml0cy4gICovCisJY2x6CXBvcywgc3luZHJvbWUKKwlyZXYJZGF0YTIsIGRhdGEyCisJbHNsCWRhdGExLCBkYXRhMSwgcG9zCisJbHNsCWRhdGEyLCBkYXRhMiwgcG9zCisJLyogQnV0IHdlIG5lZWQgdG8gemVyby1leHRlbmQgKGNoYXIgaXMgdW5zaWduZWQpIHRoZSB2YWx1ZSBhbmQgdGhlbgorCSAgIHBlcmZvcm0gYSBzaWduZWQgMzItYml0IHN1YnRyYWN0aW9uLiAgKi8KKwlsc3IJZGF0YTEsIGRhdGExLCAjNTYKKwlzdWIJcmVzdWx0LCBkYXRhMSwgZGF0YTIsIGxzciAjNTYKKwlyZXQKKyNlbHNlCisJLyogRm9yIGJpZy1lbmRpYW4gd2UgY2Fubm90IHVzZSB0aGUgdHJpY2sgd2l0aCB0aGUgc3luZHJvbWUgdmFsdWUKKwkgICBhcyBjYXJyeS1wcm9wYWdhdGlvbiBjYW4gY29ycnVwdCB0aGUgdXBwZXIgYml0cyBpZiB0aGUgdHJhaWxpbmcKKwkgICBieXRlcyBpbiB0aGUgc3RyaW5nIGNvbnRhaW4gMHgwMS4gICovCisJLyogSG93ZXZlciwgaWYgdGhlcmUgaXMgbm8gTlVMIGJ5dGUgaW4gdGhlIGR3b3JkLCB3ZSBjYW4gZ2VuZXJhdGUKKwkgICB0aGUgcmVzdWx0IGRpcmVjdGx5LiAgV2UgY2FuJ3QganVzdCBzdWJ0cmFjdCB0aGUgYnl0ZXMgYXMgdGhlCisJICAgTVNCIG1pZ2h0IGJlIHNpZ25pZmljYW50LiAgKi8KKwljYm56CWhhc19udWwsIDFmCisJY21wCWRhdGExLCBkYXRhMgorCWNzZXQJcmVzdWx0LCBuZQorCWNuZWcJcmVzdWx0LCByZXN1bHQsIGxvCisJcmV0CisxOgorCS8qIFJlLWNvbXB1dGUgdGhlIE5VTC1ieXRlIGRldGVjdGlvbiwgdXNpbmcgYSBieXRlLXJldmVyc2VkIHZhbHVlLiAgKi8KKwlyZXYJdG1wMywgZGF0YTEKKwlzdWIJdG1wMSwgdG1wMywgemVyb29uZXMKKwlvcnIJdG1wMiwgdG1wMywgI1JFUDhfN2YKKwliaWMJaGFzX251bCwgdG1wMSwgdG1wMgorCXJldgloYXNfbnVsLCBoYXNfbnVsCisJb3JyCXN5bmRyb21lLCBkaWZmLCBoYXNfbnVsCisJY2x6CXBvcywgc3luZHJvbWUKKwkvKiBUaGUgTVMtbm9uLXplcm8gYml0IG9mIHRoZSBzeW5kcm9tZSBtYXJrcyBlaXRoZXIgdGhlIGZpcnN0IGJpdAorCSAgIHRoYXQgaXMgZGlmZmVyZW50LCBvciB0aGUgdG9wIGJpdCBvZiB0aGUgZmlyc3QgemVybyBieXRlLgorCSAgIFNoaWZ0aW5nIGxlZnQgbm93IHdpbGwgYnJpbmcgdGhlIGNyaXRpY2FsIGluZm9ybWF0aW9uIGludG8gdGhlCisJICAgdG9wIGJpdHMuICAqLworCWxzbAlkYXRhMSwgZGF0YTEsIHBvcworCWxzbAlkYXRhMiwgZGF0YTIsIHBvcworCS8qIEJ1dCB3ZSBuZWVkIHRvIHplcm8tZXh0ZW5kIChjaGFyIGlzIHVuc2lnbmVkKSB0aGUgdmFsdWUgYW5kIHRoZW4KKwkgICBwZXJmb3JtIGEgc2lnbmVkIDMyLWJpdCBzdWJ0cmFjdGlvbi4gICovCisJbHNyCWRhdGExLCBkYXRhMSwgIzU2CisJc3ViCXJlc3VsdCwgZGF0YTEsIGRhdGEyLCBsc3IgIzU2CisJcmV0CisjZW5kaWYKKworLkxtdXR1YWxfYWxpZ246CisJLyogU291cmNlcyBhcmUgbXV0dWFsbHkgYWxpZ25lZCwgYnV0IGFyZSBub3QgY3VycmVudGx5IGF0IGFuCisJICAgYWxpZ25tZW50IGJvdW5kYXJ5LiAgUm91bmQgZG93biB0aGUgYWRkcmVzc2VzIGFuZCB0aGVuIG1hc2sgb2ZmCisJICAgdGhlIGJ5dGVzIHRoYXQgcHJlY2VkZSB0aGUgc3RhcnQgcG9pbnQuCisJICAgV2UgYWxzbyBuZWVkIHRvIGFkanVzdCB0aGUgbGltaXQgY2FsY3VsYXRpb25zLCBidXQgd2l0aG91dAorCSAgIG92ZXJmbG93aW5nIGlmIHRoZSBsaW1pdCBpcyBuZWFyIFVMT05HX01BWC4gICovCisJYmljCXNyYzEsIHNyYzEsICM3CisJYmljCXNyYzIsIHNyYzIsICM3CisJbGRyCWRhdGExLCBbc3JjMV0sICM4CisJbmVnCXRtcDMsIHRtcDEsIGxzbCAjMwkvKiA2NCAtIGJpdHMoYnl0ZXMgYmV5b25kIGFsaWduKS4gKi8KKwlsZHIJZGF0YTIsIFtzcmMyXSwgIzgKKwltb3YJdG1wMiwgI34wCisJc3ViCWxpbWl0X3dkLCBsaW1pdCwgIzEJLyogbGltaXQgIT0gMCwgc28gbm8gdW5kZXJmbG93LiAgKi8KKyNpZmRlZiBfX0FBUkNINjRFQl9fCisJLyogQmlnLWVuZGlhbi4gIEVhcmx5IGJ5dGVzIGFyZSBhdCBNU0IuICAqLworCWxzbAl0bXAyLCB0bXAyLCB0bXAzCS8qIFNoaWZ0ICh0bXAxICYgNjMpLiAgKi8KKyNlbHNlCisJLyogTGl0dGxlLWVuZGlhbi4gIEVhcmx5IGJ5dGVzIGFyZSBhdCBMU0IuICAqLworCWxzcgl0bXAyLCB0bXAyLCB0bXAzCS8qIFNoaWZ0ICh0bXAxICYgNjMpLiAgKi8KKyNlbmRpZgorCWFuZAl0bXAzLCBsaW1pdF93ZCwgIzcKKwlsc3IJbGltaXRfd2QsIGxpbWl0X3dkLCAjMworCS8qIEFkanVzdCB0aGUgbGltaXQuIE9ubHkgbG93IDMgYml0cyB1c2VkLCBzbyBvdmVyZmxvdyBpcnJlbGV2YW50LiAgKi8KKwlhZGQJbGltaXQsIGxpbWl0LCB0bXAxCisJYWRkCXRtcDMsIHRtcDMsIHRtcDEKKwlvcnIJZGF0YTEsIGRhdGExLCB0bXAyCisJb3JyCWRhdGEyLCBkYXRhMiwgdG1wMgorCWFkZAlsaW1pdF93ZCwgbGltaXRfd2QsIHRtcDMsIGxzciAjMworCWIJLkxzdGFydF9yZWFsaWduZWQKKworLkxyZXQwOgorCW1vdglyZXN1bHQsICMwCisJcmV0CisKKwkucDJhbGlnbiA2CisuTG1pc2FsaWduZWQ4OgorCXN1YglsaW1pdCwgbGltaXQsICMxCisxOgorCS8qIFBlcmhhcHMgd2UgY2FuIGRvIGJldHRlciB0aGFuIHRoaXMuICAqLworCWxkcmIJZGF0YTF3LCBbc3JjMV0sICMxCisJbGRyYglkYXRhMncsIFtzcmMyXSwgIzEKKwlzdWJzCWxpbWl0LCBsaW1pdCwgIzEKKwljY21wCWRhdGExdywgIzEsICMwLCBjcwkvKiBOWkNWID0gMGIwMDAwLiAgKi8KKwljY21wCWRhdGExdywgZGF0YTJ3LCAjMCwgY3MJLyogTlpDViA9IDBiMDAwMC4gICovCisJYi5lcQkxYgorCXN1YglyZXN1bHQsIGRhdGExLCBkYXRhMgorCXJldAorRU5EKHN0cm5jbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3Rybmxlbi5TIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cm5sZW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWQ0NDZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cm5sZW4uUwpAQCAtMCwwICsxLDE3NCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE0LCBMaW5hcm8gTGltaXRlZAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIExpbmFybyBub3IgdGhlCisgICAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworLyogQXNzdW1wdGlvbnM6CisgKgorICogQVJNdjgtYSwgQUFyY2g2NAorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworLyogQXJndW1lbnRzIGFuZCByZXN1bHRzLiAgKi8KKyNkZWZpbmUgc3JjaW4JCXgwCisjZGVmaW5lIGxlbgkJeDAKKyNkZWZpbmUgbGltaXQJCXgxCisKKy8qIExvY2FscyBhbmQgdGVtcG9yYXJpZXMuICAqLworI2RlZmluZSBzcmMJCXgyCisjZGVmaW5lIGRhdGExCQl4MworI2RlZmluZSBkYXRhMgkJeDQKKyNkZWZpbmUgZGF0YTJhCQl4NQorI2RlZmluZSBoYXNfbnVsMQl4NgorI2RlZmluZSBoYXNfbnVsMgl4NworI2RlZmluZSB0bXAxCQl4OAorI2RlZmluZSB0bXAyCQl4OQorI2RlZmluZSB0bXAzCQl4MTAKKyNkZWZpbmUgdG1wNAkJeDExCisjZGVmaW5lIHplcm9vbmVzCXgxMgorI2RlZmluZSBwb3MJCXgxMworI2RlZmluZSBsaW1pdF93ZAl4MTQKKworI2RlZmluZSBSRVA4XzAxIDB4MDEwMTAxMDEwMTAxMDEwMQorI2RlZmluZSBSRVA4XzdmIDB4N2Y3ZjdmN2Y3ZjdmN2Y3ZgorI2RlZmluZSBSRVA4XzgwIDB4ODA4MDgwODA4MDgwODA4MAorCisJLnRleHQKKwkucDJhbGlnbgk2CisuTHN0YXJ0OgorCS8qIFByZS1wYWQgdG8gZW5zdXJlIGNyaXRpY2FsIGxvb3AgYmVnaW5zIGFuIGljYWNoZSBsaW5lLiAgKi8KKwkucmVwIDcKKwlub3AKKwkuZW5kcgorCS8qIFB1dCB0aGlzIGNvZGUgaGVyZSB0byBhdm9pZCB3YXN0aW5nIG1vcmUgc3BhY2Ugd2l0aCBwcmUtcGFkZGluZy4gICovCisuTGhpdF9saW1pdDoKKwltb3YJbGVuLCBsaW1pdAorCXJldAorCitFTlRSWShzdHJubGVuKQorCWNieglsaW1pdCwgLkxoaXRfbGltaXQKKwltb3YJemVyb29uZXMsICNSRVA4XzAxCisJYmljCXNyYywgc3JjaW4sICMxNQorCWFuZHMJdG1wMSwgc3JjaW4sICMxNQorCWIubmUJLkxtaXNhbGlnbmVkCisJLyogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgZnVsbCBhbmQgcGFydGlhbCB3b3JkcyAtMS4gICovCisJc3ViCWxpbWl0X3dkLCBsaW1pdCwgIzEJLyogTGltaXQgIT0gMCwgc28gbm8gdW5kZXJmbG93LiAgKi8KKwlsc3IJbGltaXRfd2QsIGxpbWl0X3dkLCAjNAkvKiBDb252ZXJ0IHRvIFF3b3Jkcy4gICovCisKKwkvKiBOVUwgZGV0ZWN0aW9uIHdvcmtzIG9uIHRoZSBwcmluY2lwbGUgdGhhdCAoWCAtIDEpICYgKH5YKSAmIDB4ODAKKwkgICAoPT4gKFggLSAxKSAmIH4oWCB8IDB4N2YpKSBpcyBub24temVybyBpZmYgYSBieXRlIGlzIHplcm8sIGFuZAorCSAgIGNhbiBiZSBkb25lIGluIHBhcmFsbGVsIGFjcm9zcyB0aGUgZW50aXJlIHdvcmQuICAqLworCS8qIFRoZSBpbm5lciBsb29wIGRlYWxzIHdpdGggdHdvIER3b3JkcyBhdCBhIHRpbWUuICBUaGlzIGhhcyBhCisJICAgc2xpZ2h0bHkgaGlnaGVyIHN0YXJ0LXVwIGNvc3QsIGJ1dCB3ZSBzaG91bGQgd2luIHF1aXRlIHF1aWNrbHksCisJICAgZXNwZWNpYWxseSBvbiBjb3JlcyB3aXRoIGEgaGlnaCBudW1iZXIgb2YgaXNzdWUgc2xvdHMgcGVyCisJICAgY3ljbGUsIGFzIHdlIGdldCBtdWNoIGJldHRlciBwYXJhbGxlbGlzbSBvdXQgb2YgdGhlIG9wZXJhdGlvbnMuICAqLworCisJLyogU3RhcnQgb2YgY3JpdGlhbCBzZWN0aW9uIC0tIGtlZXAgdG8gb25lIDY0Qnl0ZSBjYWNoZSBsaW5lLiAgKi8KKy5MbG9vcDoKKwlsZHAJZGF0YTEsIGRhdGEyLCBbc3JjXSwgIzE2CisuTHJlYWxpZ25lZDoKKwlzdWIJdG1wMSwgZGF0YTEsIHplcm9vbmVzCisJb3JyCXRtcDIsIGRhdGExLCAjUkVQOF83ZgorCXN1Ygl0bXAzLCBkYXRhMiwgemVyb29uZXMKKwlvcnIJdG1wNCwgZGF0YTIsICNSRVA4XzdmCisJYmljCWhhc19udWwxLCB0bXAxLCB0bXAyCisJYmljCWhhc19udWwyLCB0bXAzLCB0bXA0CisJc3VicwlsaW1pdF93ZCwgbGltaXRfd2QsICMxCisJb3JyCXRtcDEsIGhhc19udWwxLCBoYXNfbnVsMgorCWNjbXAJdG1wMSwgIzAsICMwLCBwbAkvKiBOWkNWID0gMDAwMCAgKi8KKwliLmVxCS5MbG9vcAorCS8qIEVuZCBvZiBjcml0aWNhbCBzZWN0aW9uIC0tIGtlZXAgdG8gb25lIDY0Qnl0ZSBjYWNoZSBsaW5lLiAgKi8KKworCW9ycgl0bXAxLCBoYXNfbnVsMSwgaGFzX251bDIKKwljYnoJdG1wMSwgLkxoaXRfbGltaXQJLyogTm8gbnVsbCBpbiBmaW5hbCBRd29yZC4gICovCisKKwkvKiBXZSBrbm93IHRoZXJlJ3MgYSBudWxsIGluIHRoZSBmaW5hbCBRd29yZC4gIFRoZSBlYXNpZXN0IHRoaW5nCisJICAgdG8gZG8gbm93IGlzIHdvcmsgb3V0IHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBhbmQgcmV0dXJuCisJICAgTUlOIChsZW4sIGxpbWl0KS4gICovCisKKwlzdWIJbGVuLCBzcmMsIHNyY2luCisJY2J6CWhhc19udWwxLCAuTG51bF9pbl9kYXRhMgorI2lmZGVmIF9fQUFSQ0g2NEVCX18KKwltb3YJZGF0YTIsIGRhdGExCisjZW5kaWYKKwlzdWIJbGVuLCBsZW4sICM4CisJbW92CWhhc19udWwyLCBoYXNfbnVsMQorLkxudWxfaW5fZGF0YTI6CisjaWZkZWYgX19BQVJDSDY0RUJfXworCS8qIEZvciBiaWctZW5kaWFuLCBjYXJyeSBwcm9wYWdhdGlvbiAoaWYgdGhlIGZpbmFsIGJ5dGUgaW4gdGhlCisJICAgc3RyaW5nIGlzIDB4MDEpIG1lYW5zIHdlIGNhbm5vdCB1c2UgaGFzX251bCBkaXJlY3RseS4gIFRoZQorCSAgIGVhc2llc3Qgd2F5IHRvIGdldCB0aGUgY29ycmVjdCBieXRlIGlzIHRvIGJ5dGUtc3dhcCB0aGUgZGF0YQorCSAgIGFuZCBjYWxjdWxhdGUgdGhlIHN5bmRyb21lIGEgc2Vjb25kIHRpbWUuICAqLworCXJldglkYXRhMiwgZGF0YTIKKwlzdWIJdG1wMSwgZGF0YTIsIHplcm9vbmVzCisJb3JyCXRtcDIsIGRhdGEyLCAjUkVQOF83ZgorCWJpYwloYXNfbnVsMiwgdG1wMSwgdG1wMgorI2VuZGlmCisJc3ViCWxlbiwgbGVuLCAjOAorCXJldgloYXNfbnVsMiwgaGFzX251bDIKKwljbHoJcG9zLCBoYXNfbnVsMgorCWFkZAlsZW4sIGxlbiwgcG9zLCBsc3IgIzMJCS8qIEJpdHMgdG8gYnl0ZXMuICAqLworCWNtcAlsZW4sIGxpbWl0CisJY3NlbAlsZW4sIGxlbiwgbGltaXQsIGxzCQkvKiBSZXR1cm4gdGhlIGxvd2VyIHZhbHVlLiAgKi8KKwlyZXQKKworLkxtaXNhbGlnbmVkOgorCS8qIERlYWwgd2l0aCBhIHBhcnRpYWwgZmlyc3Qgd29yZC4KKwkgICBXZSdyZSBkb2luZyB0d28gdGhpbmdzIGluIHBhcmFsbGVsIGhlcmU7CisJICAgMSkgQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2Ygd29yZHMgKGJ1dCBhdm9pZGluZyBvdmVyZmxvdyBpZgorCSAgICAgIGxpbWl0IGlzIG5lYXIgVUxPTkdfTUFYKSAtIHRvIGRvIHRoaXMgd2UgbmVlZCB0byB3b3JrIG91dAorCSAgICAgIGxpbWl0ICsgdG1wMSAtIDEgYXMgYSA2NS1iaXQgdmFsdWUgYmVmb3JlIHNoaWZ0aW5nIGl0OworCSAgIDIpIExvYWQgYW5kIG1hc2sgdGhlIGluaXRpYWwgZGF0YSB3b3JkcyAtIHdlIGZvcmNlIHRoZSBieXRlcworCSAgICAgIGJlZm9yZSB0aGUgb25lcyB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0byAweGZmIC0gdGhpcyBlbnN1cmVzCisJICAgICAgZWFybHkgYnl0ZXMgd2lsbCBub3QgaGl0IGFueSB6ZXJvIGRldGVjdGlvbi4gICovCisJc3ViCWxpbWl0X3dkLCBsaW1pdCwgIzEKKwluZWcJdG1wNCwgdG1wMQorCWNtcAl0bXAxLCAjOAorCisJYW5kCXRtcDMsIGxpbWl0X3dkLCAjMTUKKwlsc3IJbGltaXRfd2QsIGxpbWl0X3dkLCAjNAorCW1vdgl0bXAyLCAjfjAKKworCWxkcAlkYXRhMSwgZGF0YTIsIFtzcmNdLCAjMTYKKwlsc2wJdG1wNCwgdG1wNCwgIzMJCS8qIEJ5dGVzIGJleW9uZCBhbGlnbm1lbnQgLT4gYml0cy4gICovCisJYWRkCXRtcDMsIHRtcDMsIHRtcDEKKworI2lmZGVmIF9fQUFSQ0g2NEVCX18KKwkvKiBCaWctZW5kaWFuLiAgRWFybHkgYnl0ZXMgYXJlIGF0IE1TQi4gICovCisJbHNsCXRtcDIsIHRtcDIsIHRtcDQJLyogU2hpZnQgKHRtcDEgJiA2MykuICAqLworI2Vsc2UKKwkvKiBMaXR0bGUtZW5kaWFuLiAgRWFybHkgYnl0ZXMgYXJlIGF0IExTQi4gICovCisJbHNyCXRtcDIsIHRtcDIsIHRtcDQJLyogU2hpZnQgKHRtcDEgJiA2MykuICAqLworI2VuZGlmCisJYWRkCWxpbWl0X3dkLCBsaW1pdF93ZCwgdG1wMywgbHNyICM0CisKKwlvcnIJZGF0YTEsIGRhdGExLCB0bXAyCisJb3JyCWRhdGEyYSwgZGF0YTIsIHRtcDIKKworCWNzaW52CWRhdGExLCBkYXRhMSwgeHpyLCBsZQorCWNzZWwJZGF0YTIsIGRhdGEyLCBkYXRhMmEsIGxlCisJYgkuTHJlYWxpZ25lZAorRU5EKHN0cm5sZW4pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvd21lbW1vdmUuUyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy93bWVtbW92ZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZjY3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvd21lbW1vdmUuUwpAQCAtMCwwICsxLDMwIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTQsIExpbmFybyBMaW1pdGVkCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgTGluYXJvIG5vciB0aGUKKyAgICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjZGVmaW5lIFdNRU1NT1ZFCisjaW5jbHVkZSAibWVtbW92ZS5TIgorI3VuZGVmIFdNRU1NT1ZFCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9nZW5lcmljLm1rIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvZ2VuZXJpYy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjU5NWFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvZ2VuZXJpYy5tawpAQCAtMCwwICsxLDE0IEBACitsaWJjX2Jpb25pY19zcmNfZmlsZXNfYXJtNjQgKz0gXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtY2hyLlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtY21wLlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtY3B5LlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtbW92ZS5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbXNldC5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cGNweS5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmNoci5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmNtcC5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmNweS5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmxlbi5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cm5jbXAuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJubGVuLlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvd21lbW1vdmUuUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaCBiL2xpYmMvYXJjaC1hcm02NC9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNDYyYWIuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKgkkT3BlbkJTRDogX3R5cGVzLmgsdiAxLjMgMjAwNi8wMi8xNCAxODoxMjo1OCBtaW9kIEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICoJQCgjKXR5cGVzLmgJOC4zIChCZXJrZWxleSkgMS81Lzk0Ci0gKglAKCMpYW5zaS5oCTguMiAoQmVya2VsZXkpIDEvNC85NAotICovCi0KLSNpZm5kZWYgX0FBUkNINjRfX1RZUEVTX0hfCi0jZGVmaW5lIF9BQVJDSDY0X19UWVBFU19IXwotCi0vKiA3LjE4LjEuMSBFeGFjdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCi10eXBlZGVmCV9fc2lnbmVkIGNoYXIJCV9faW50OF90OwotdHlwZWRlZgl1bnNpZ25lZCBjaGFyCQlfX3VpbnQ4X3Q7Ci10eXBlZGVmCXNob3J0CQkJX19pbnQxNl90OwotdHlwZWRlZgl1bnNpZ25lZCBzaG9ydAkJX191aW50MTZfdDsKLXR5cGVkZWYJaW50CQkJX19pbnQzMl90OwotdHlwZWRlZgl1bnNpZ25lZCBpbnQJCV9fdWludDMyX3Q7Ci10eXBlZGVmCWxvbmcgCQlfX2ludDY0X3Q7Ci10eXBlZGVmCXVuc2lnbmVkIGxvbmcgIF9fdWludDY0X3Q7Ci0KLS8qIDcuMTguMS4yIE1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLwotdHlwZWRlZglfX2ludDhfdAkJX19pbnRfbGVhc3Q4X3Q7Ci10eXBlZGVmCV9fdWludDhfdAkJX191aW50X2xlYXN0OF90OwotdHlwZWRlZglfX2ludDE2X3QJCV9faW50X2xlYXN0MTZfdDsKLXR5cGVkZWYJX191aW50MTZfdAkJX191aW50X2xlYXN0MTZfdDsKLXR5cGVkZWYJX19pbnQzMl90CQlfX2ludF9sZWFzdDMyX3Q7Ci10eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9sZWFzdDMyX3Q7Ci10eXBlZGVmCV9faW50NjRfdAkJX19pbnRfbGVhc3Q2NF90OwotdHlwZWRlZglfX3VpbnQ2NF90CQlfX3VpbnRfbGVhc3Q2NF90OwotCi0vKiA3LjE4LjEuMyBGYXN0ZXN0IG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLwotdHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3Q4X3Q7Ci10eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9mYXN0OF90OwotdHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3QxNl90OwotdHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfZmFzdDE2X3Q7Ci10eXBlZGVmCV9faW50MzJfdAkJX19pbnRfZmFzdDMyX3Q7Ci10eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9mYXN0MzJfdDsKLXR5cGVkZWYJX19pbnQ2NF90CQlfX2ludF9mYXN0NjRfdDsKLXR5cGVkZWYJX191aW50NjRfdAkJX191aW50X2Zhc3Q2NF90OwotCi0vKiA3LjE4LjEuNCBJbnRlZ2VyIHR5cGVzIGNhcGFibGUgb2YgaG9sZGluZyBvYmplY3QgcG9pbnRlcnMgKi8KLXR5cGVkZWYJaW50IAkJCV9faW50cHRyX3Q7Ci10eXBlZGVmCXVuc2lnbmVkIGludCAJCV9fdWludHB0cl90OwotCi0vKiA3LjE4LjEuNSBHcmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCi10eXBlZGVmCV9faW50NjRfdAkJX19pbnRtYXhfdDsKLXR5cGVkZWYJX191aW50NjRfdAkJX191aW50bWF4X3Q7Ci0KLS8qIFJlZ2lzdGVyIHNpemUgKi8KLXR5cGVkZWYJX19pbnQ2NF90CQlfX3JlZ2lzdGVyX3Q7Ci0KLS8qIFZNIHN5c3RlbSB0eXBlcyAqLwotdHlwZWRlZgl1bnNpZ25lZCBsb25nCQlfX3ZhZGRyX3Q7Ci10eXBlZGVmCXVuc2lnbmVkIGxvbmcJCV9fcGFkZHJfdDsKLXR5cGVkZWYJdW5zaWduZWQgbG9uZwkJX192c2l6ZV90OwotdHlwZWRlZgl1bnNpZ25lZCBsb25nCQlfX3BzaXplX3Q7Ci0KLS8qIFN0YW5kYXJkIHN5c3RlbSB0eXBlcyAqLwotdHlwZWRlZglsb25nCQkJX19jbG9ja190OwotdHlwZWRlZglpbnQJICAgIAkJX19jbG9ja2lkX3Q7Ci10eXBlZGVmCWRvdWJsZQkJCV9fZG91YmxlX3Q7Ci10eXBlZGVmCWZsb2F0CQkJX19mbG9hdF90OwotdHlwZWRlZglsb25nCQkJX19wdHJkaWZmX3Q7Ci10eXBlZGVmCWxvbmcJCQlfX3RpbWVfdDsKLXR5cGVkZWYJaW50CSAgICAJCV9fdGltZXJfdDsKLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCi10eXBlZGVmCV9fYnVpbHRpbl92YV9saXN0CV9fdmFfbGlzdDsKLSNlbHNlCi10eXBlZGVmCWNoYXIgKgkJCV9fdmFfbGlzdDsKLSNlbmRpZgotCi0vKiBXaWRlIGNoYXJhY3RlciBzdXBwb3J0IHR5cGVzICovCi0jaWZuZGVmIF9fY3BsdXNwbHVzCi10eXBlZGVmCWludAkJCV9fd2NoYXJfdDsKLSNlbmRpZgotdHlwZWRlZglpbnQJCQlfX3dpbnRfdDsKLXR5cGVkZWYJaW50CQkJX19ydW5lX3Q7Ci10eXBlZGVmCXZvaWQgKgkJCV9fd2N0cmFuc190OwotdHlwZWRlZgl2b2lkICoJCQlfX3djdHlwZV90OwotCi0jZGVmaW5lIF9CWVRFX09SREVSIF9MSVRUTEVfRU5ESUFOCi0KLSNlbmRpZiAgLyogX0FBUkNINjRfX1RZUEVTX0hfICovCi0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9pbmNsdWRlL21hY2hpbmUvYXNtLmggYi9saWJjL2FyY2gtYXJtNjQvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCmluZGV4IDNmOGI5MDguLjRiZmFiYWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9pbmNsdWRlL21hY2hpbmUvYXNtLmgKKysrIGIvbGliYy9hcmNoLWFybTY0L2luY2x1ZGUvbWFjaGluZS9hc20uaApAQCAtMzgsOTEgKzM4LDE3IEBACiAjaWZuZGVmIF9BQVJDSDY0X0FTTV9IXwogI2RlZmluZSBfQUFSQ0g2NF9BU01fSF8KIAotLyogVE9ETzogQWRkIGNmaSBkaXJlY3RpdmVzIGZvciBjcmVhdGluZy9yZXN0b3JpbmcgRlAgKi8KLSNpZmRlZiBfX0VMRl9fCi0jIGRlZmluZQlfQ19MQUJFTCh4KQl4Ci0jZWxzZQotIyBpZmRlZiBfX1NURENfXwotIyAgZGVmaW5lCV9DX0xBQkVMKHgpCV8gIyMgeAotIyBlbHNlCi0jICBkZWZpbmUJX0NfTEFCRUwoeCkJXy8qKi94Ci0jIGVuZGlmCi0jZW5kaWYKLSNkZWZpbmUJX0FTTV9MQUJFTCh4KQl4Ci0KLSNpZmRlZiBfX1NURENfXwotIyBkZWZpbmUJX19DT05DQVQoeCx5KQl4ICMjIHkKLSMgZGVmaW5lCV9fU1RSSU5HKHgpCSN4Ci0jZWxzZQotIyBkZWZpbmUJX19DT05DQVQoeCx5KQl4LyoqL3kKLSMgZGVmaW5lCV9fU1RSSU5HKHgpCSJ4IgotI2VuZGlmCi0KICNpZm5kZWYgX0FMSUdOX1RFWFQKLSMgZGVmaW5lCV9BTElHTl9URVhUCS5hbGlnbiAwCisjIGRlZmluZSBfQUxJR05fVEVYVCAuYWxpZ24gMAogI2VuZGlmCiAKLSNkZWZpbmUJX0FTTV9UWVBFX0ZVTkNUSU9OCSVmdW5jdGlvbgotI2RlZmluZQlfQVNNX1RZUEVfT0JKRUNUCSVvYmplY3QKLSNkZWZpbmUJX0VOVFJZKHgpIFwKLQkudGV4dDsgX0FMSUdOX1RFWFQ7IC5nbG9ibCB4OyAudHlwZSB4LF9BU01fVFlQRV9GVU5DVElPTjsgeDogLmNmaV9zdGFydHByb2MKLQotI2RlZmluZQlfQVNNX1NJWkUoeCkJLnNpemUgeCwgLi14OwotCi0jZGVmaW5lIF9FTkQoeCkgXAotCS5jZmlfZW5kcHJvYzsgXAotCV9BU01fU0laRSh4KQotCi0jZGVmaW5lCUVOVFJZKHkpCV9FTlRSWShfQ19MQUJFTCh5KSk7Ci0jZGVmaW5lCUVOVFJZX05QKHkpCV9FTlRSWShfQ19MQUJFTCh5KSkKLSNkZWZpbmUJRU5EKHkpCQlfRU5EKF9DX0xBQkVMKHkpKQotI2RlZmluZQlBU0VOVFJZKHkpCV9FTlRSWShfQVNNX0xBQkVMKHkpKTsgX1BST0ZfUFJPTE9HVUUKLSNkZWZpbmUJQVNFTlRSWV9OUCh5KQlfRU5UUlkoX0FTTV9MQUJFTCh5KSkKLSNkZWZpbmUJQVNFTkQoeSkJX0VORChfQVNNX0xBQkVMKHkpKQotCi0jaWZkZWYgX19FTEZfXwotI2RlZmluZQlFTlRSWV9QUklWQVRFKHkpICBFTlRSWSh5KTsgLmhpZGRlbiBfQ19MQUJFTCh5KQotI2Vsc2UKLSNkZWZpbmUJRU5UUllfUFJJVkFURSh5KSAgRU5UUlkoeSkKLSNlbmRpZgotCi0jZGVmaW5lCUFTTVNUUgkJLmFzY2l6CisjdW5kZWYgX19iaW9uaWNfYXNtX2Z1bmN0aW9uX3R5cGUKKyNkZWZpbmUgX19iaW9uaWNfYXNtX2Z1bmN0aW9uX3R5cGUgJWZ1bmN0aW9uCiAKICNpZiBkZWZpbmVkKF9fRUxGX18pICYmIGRlZmluZWQoUElDKQotI2lmZGVmIF9fU1REQ19fCi0jZGVmaW5lCVBJQ19TWU0oeCx5KQl4ICMjICggIyMgeSAjIyApCisjZGVmaW5lIFBJQ19TWU0oeCx5KSB4ICMjICggIyMgeSAjIyApCiAjZWxzZQotI2RlZmluZQlQSUNfU1lNKHgseSkJeC8qKi8oLyoqL3kvKiovKQorI2RlZmluZSBQSUNfU1lNKHgseSkgeAogI2VuZGlmCi0jZWxzZQotI2RlZmluZQlQSUNfU1lNKHgseSkJeAotI2VuZGlmCi0KLSNpZmRlZiBfX0VMRl9fCi0jZGVmaW5lCVJDU0lEKHgpCS5zZWN0aW9uICIuaWRlbnQiOyAuYXNjaXogeAotI2Vsc2UKLSNkZWZpbmUJUkNTSUQoeCkJLnRleHQ7IC5hc2NpeiB4Ci0jZW5kaWYKLQotI2lmZGVmIF9fRUxGX18KLSNkZWZpbmUJV0VBS19BTElBUyhhbGlhcyxzeW0pCQkJCQkJXAotCS53ZWFrIGFsaWFzOwkJCQkJCQlcCi0JYWxpYXMgPSBzeW0KLSNlbmRpZgotCi0jaWZkZWYgX19TVERDX18KLSNkZWZpbmUJV0FSTl9SRUZFUkVOQ0VTKHN5bSxtc2cpCQkJCQlcCi0JLnN0YWJzIG1zZyAjIyAsMzAsMCwwLDAgOwkJCQkJXAotCS5zdGFicyBfX1NUUklORyhfQ19MQUJFTChzeW0pKSAjIyAsMSwwLDAsMAotI2VsaWYgZGVmaW5lZChfX0VMRl9fKQotI2RlZmluZQlXQVJOX1JFRkVSRU5DRVMoc3ltLG1zZykJCQkJCVwKLQkuc3RhYnMgbXNnLDMwLDAsMCwwIDsJCQkJCQlcCi0JLnN0YWJzIF9fU1RSSU5HKHN5bSksMSwwLDAsMAotI2Vsc2UKLSNkZWZpbmUJV0FSTl9SRUZFUkVOQ0VTKHN5bSxtc2cpCQkJCQlcCi0JLnN0YWJzIG1zZywzMCwwLDAsMCA7CQkJCQkJXAotCS5zdGFicyBfX1NUUklORyhfLyoqL3N5bSksMSwwLDAsMAotI2VuZGlmIC8qIF9fU1REQ19fICovCiAKICNlbmRpZiAvKiBfQUFSQ0g2NF9BU01fSF8gKi8KLQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2luY2x1ZGUvbWFjaGluZS9pZWVlLmggYi9saWJjL2FyY2gtYXJtNjQvaW5jbHVkZS9tYWNoaW5lL2llZWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YyYzFmYy4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtNjQvaW5jbHVkZS9tYWNoaW5lL2llZWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0vKgkkT3BlbkJTRDogaWVlZS5oLHYgMS4xIDIwMDQvMDIvMDEgMDU6MDk6NDkgZHJhaG4gRXhwICQJKi8KLS8qCSROZXRCU0Q6IGllZWUuaCx2IDEuMiAyMDAxLzAyLzIxIDE3OjQzOjUwIGJqaDIxIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSB0aGUgQ29tcHV0ZXIgU3lzdGVtcyBFbmdpbmVlcmluZyBncm91cAotICogYXQgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeSB1bmRlciBEQVJQQSBjb250cmFjdCBCRyA5MS02NiBhbmQKLSAqIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5LgotICoKLSAqIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICoJQ2FsaWZvcm5pYSwgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqCUAoIylpZWVlLmgJOC4xIChCZXJrZWxleSkgNi8xMS85MwotICovCi0KLS8qCi0gKiBpZWVlLmggZGVmaW5lcyB0aGUgbWFjaGluZS1kZXBlbmRlbnQgbGF5b3V0IG9mIHRoZSBtYWNoaW5lJ3MgSUVFRQotICogZmxvYXRpbmcgcG9pbnQuCi0gKi8KLQotLyoKLSAqIERlZmluZSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gZWFjaCBmcmFjdGlvbiBhbmQgZXhwb25lbnQuCi0gKgotICoJCSAgICAgawkgICAgICAgICBrKzEKLSAqIE5vdGUgdGhhdCAgMS4wIHggMiAgPT0gMC4xIHggMiAgICAgIGFuZCB0aGF0IGRlbm9ybXMgYXJlIHJlcHJlc2VudGVkCi0gKgotICoJCQkJCSAgKC1leHBfYmlhcysxKQotICogYXMgZnJhY3Rpb25zIHRoYXQgbG9vayBsaWtlIDAuZmZmZmYgeCAyICAgICAgICAgICAgIC4gIFRoaXMgbWVhbnMgdGhhdAotICoKLSAqCQkJIC0xMjYKLSAqIHRoZSBudW1iZXIgMC4xMDAwMCB4IDIgICAgLCBmb3IgaW5zdGFuY2UsIGlzIHRoZSBzYW1lIGFzIHRoZSBub3JtYWxpemVkCi0gKgotICoJCS0xMjcJCQkgICAtMTI4Ci0gKiBmbG9hdCAxLjAgeCAyICAgIC4gIFRodXMsIHRvIHJlcHJlc2VudCAyICAgICwgd2UgbmVlZCBvbmUgbGVhZGluZyB6ZXJvCi0gKgotICoJCQkJICAtMTI5Ci0gKiBpbiB0aGUgZnJhY3Rpb247IHRvIHJlcHJlc2VudCAyICAgICwgd2UgbmVlZCB0d28sIGFuZCBzbyBvbi4gIFRoaXMKLSAqCi0gKgkJCQkJCSAgICAgKC1leHBfYmlhcy1mcmFjYml0cysxKQotICogaW1wbGllcyB0aGF0IHRoZSBzbWFsbGVzdCBkZW5vcm1hbGl6ZWQgbnVtYmVyIGlzIDIKLSAqCi0gKiBmb3Igd2hpY2hldmVyIGZvcm1hdCB3ZSBhcmUgdGFsa2luZyBhYm91dDogZm9yIHNpbmdsZSBwcmVjaXNpb24sIGZvcgotICoKLSAqCQkJCQkJLTEyNgkJLTE0OQotICogaW5zdGFuY2UsIHdlIGdldCAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgeCAyICAgICwgb3IgMS4wIHggMiAgICAsIGFuZAotICoKLSAqIC0xNDkgPT0gLTEyNyAtIDIzICsgMS4KLSAqLwotCi0vKgotICogVGhlIEFSTSBoYXMgdHdvIHNldHMgb2YgRlAgZGF0YSBmb3JtYXRzLiAgVGhlIEZQQSBzdXBwb3J0cyAzMi1iaXQsIDY0LWJpdAotICogYW5kIDk2LWJpdCBJRUVFIGZvcm1hdHMsIHdpdGggdGhlIHdvcmRzIGluIGJpZy1lbmRpYW4gb3JkZXIuICBWRlAgc3VwcG9ydHMKLSAqIDMyLWJpbiBhbmQgNjQtYml0IElFRUUgZm9ybWF0cyB3aXRoIHRoZSB3b3JkcyBpbiB0aGUgQ1BVJ3MgbmF0aXZlIGJ5dGUKLSAqIG9yZGVyLgotICoKLSAqIFRoZSBGUEEgYWxzbyBoYXMgdHdvIHBhY2tlZCBkZWNpbWFsIGZvcm1hdHMsIGJ1dCB3ZSBpZ25vcmUgdGhlbSBoZXJlLgotICovCi0KLSNkZWZpbmUJU05HX0VYUEJJVFMJOAotI2RlZmluZQlTTkdfRlJBQ0JJVFMJMjMKLQotI2RlZmluZQlEQkxfRVhQQklUUwkxMQotI2RlZmluZQlEQkxfRlJBQ0JJVFMJNTIKLQotI2lmbmRlZiBfX1ZGUF9GUF9fCi0jZGVmaW5lCUU4MF9FWFBCSVRTCTE1Ci0jZGVmaW5lCUU4MF9GUkFDQklUUwk2NAotCi0jZGVmaW5lCUVYVF9FWFBCSVRTCTE1Ci0jZGVmaW5lCUVYVF9GUkFDQklUUwkxMTIKLSNlbmRpZgotCi1zdHJ1Y3QgaWVlZV9zaW5nbGUgewotCXVfaW50CXNuZ19mcmFjOjIzOwotCXVfaW50CXNuZ19leHBvbmVudDo4OwotCXVfaW50CXNuZ19zaWduOjE7Ci19OwotCi0jaWZkZWYgX19WRlBfRlBfXwotc3RydWN0IGllZWVfZG91YmxlIHsKLSNpZmRlZiBfX0FBUkNINjRFQl9fCi0JdV9pbnQJZGJsX3NpZ246MTsKLQl1X2ludAlkYmxfZXhwOjExOwotCXVfaW50CWRibF9mcmFjaDoyMDsKLQl1X2ludAlkYmxfZnJhY2w7Ci0jZWxzZSAvKiAhX19BQVJDSDY0RUJfXyAqLwotCXVfaW50CWRibF9mcmFjbDsKLQl1X2ludAlkYmxfZnJhY2g6MjA7Ci0JdV9pbnQJZGJsX2V4cDoxMTsKLQl1X2ludAlkYmxfc2lnbjoxOwotI2VuZGlmIC8qICFfX0FBUkNINjRFQl9fICovCi19OwotI2Vsc2UgLyogIV9fVkZQX0ZQX18gKi8KLXN0cnVjdCBpZWVlX2RvdWJsZSB7Ci0JdV9pbnQJZGJsX2ZyYWNoOjIwOwotCXVfaW50CWRibF9leHA6MTE7Ci0JdV9pbnQJZGJsX3NpZ246MTsKLQl1X2ludAlkYmxfZnJhY2w7Ci19OwotCi11bmlvbiBpZWVlX2RvdWJsZV91IHsKLQlkb3VibGUgICAgICAgICAgICAgICAgICBkYmx1X2Q7Ci0Jc3RydWN0IGllZWVfZG91YmxlICAgICAgZGJsdV9kYmw7Ci19OwotCi0KLXN0cnVjdCBpZWVlX2U4MCB7Ci0JdV9pbnQJZTgwX2V4cDoxNTsKLQl1X2ludAllODBfemVybzoxNjsKLQl1X2ludAllODBfc2lnbjoxOwotCXVfaW50CWU4MF9mcmFjaDozMTsKLQl1X2ludAllODBfajoxOwotCXVfaW50CWU4MF9mcmFjbDsKLX07Ci0KLXN0cnVjdCBpZWVlX2V4dCB7Ci0JdV9pbnQJZXh0X2ZyYWNoOjE2OwotCXVfaW50CWV4dF9leHA6MTU7Ci0JdV9pbnQJZXh0X3NpZ246MTsKLQl1X2ludAlleHRfZnJhY2htOwotCXVfaW50CWV4dF9mcmFjbG07Ci0JdV9pbnQJZXh0X2ZyYWNsOwotfTsKLSNlbmRpZiAvKiAhX19WRlBfRlBfXyAqLwotCi0vKgotICogRmxvYXRzIHdob3NlIGV4cG9uZW50IGlzIGluIFsxLi5JTkZOQU4pIChvZiB3aGF0ZXZlciB0eXBlKSBhcmUKLSAqIGBub3JtYWwnLiAgRmxvYXRzIHdob3NlIGV4cG9uZW50IGlzIElORk5BTiBhcmUgZWl0aGVyIEluZiBvciBOYU4uCi0gKiBGbG9hdHMgd2hvc2UgZXhwb25lbnQgaXMgemVybyBhcmUgZWl0aGVyIHplcm8gKGlmZiBhbGwgZnJhY3Rpb24KLSAqIGJpdHMgYXJlIHplcm8pIG9yIHN1Ym5vcm1hbCB2YWx1ZXMuCi0gKgotICogQSBOYU4gaXMgYSBgc2lnbmFsbGluZyBOYU4nIGlmIGl0cyBRVUlFVE5BTiBiaXQgaXMgY2xlYXIgaW4gaXRzCi0gKiBoaWdoIGZyYWN0aW9uOyBpZiB0aGUgYml0IGlzIHNldCwgaXQgaXMgYSBgcXVpZXQgTmFOJy4KLSAqLwotI2RlZmluZQlTTkdfRVhQX0lORk5BTgkyNTUKLSNkZWZpbmUJREJMX0VYUF9JTkZOQU4JMjA0NwotI2lmbmRlZiBfX1ZGUF9GUF9fCi0jZGVmaW5lCUU4MF9FWFBfSU5GTkFOCTMyNzY3Ci0jZGVmaW5lCUVYVF9FWFBfSU5GTkFOCTMyNzY3Ci0jZW5kaWYgLyogIV9fVkZQX0ZQX18gKi8KLQotI2lmIDAKLSNkZWZpbmUJU05HX1FVSUVUTkFOCSgxIDw8IDIyKQotI2RlZmluZQlEQkxfUVVJRVROQU4JKDEgPDwgMTkpCi0jaWZuZGVmIF9fVkZQX0ZQX18KLSNkZWZpbmUJRTgwX1FVSUVUTkFOCSgxIDw8IDE1KQotI2RlZmluZQlFWFRfUVVJRVROQU4JKDEgPDwgMTUpCi0jZW5kaWYgLyogIV9fVkZQX0ZQX18gKi8KLSNlbmRpZgotCi0vKgotICogRXhwb25lbnQgYmlhc2VzLgotICovCi0jZGVmaW5lCVNOR19FWFBfQklBUwkxMjcKLSNkZWZpbmUJREJMX0VYUF9CSUFTCTEwMjMKLSNpZm5kZWYgX19WRlBfRlBfXwotI2RlZmluZQlFODBfRVhQX0JJQVMJMTYzODMKLSNkZWZpbmUJRVhUX0VYUF9CSUFTCTE2MzgzCi0jZW5kaWYgLyogIV9fVkZQX0ZQX18gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9pbmNsdWRlL21hY2hpbmUvbGltaXRzLmggYi9saWJjL2FyY2gtYXJtNjQvaW5jbHVkZS9tYWNoaW5lL2xpbWl0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2RkYjAxLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9pbmNsdWRlL21hY2hpbmUvbGltaXRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgkkT3BlbkJTRDogbGltaXRzLmgsdiAxLjMgMjAwNi8wMS8wNiAyMjo0ODo0NiBtaWxsZXJ0IEV4cCAkCSovCi0vKgkkTmV0QlNEOiBsaW1pdHMuaCx2IDEuNCAyMDAzLzA0LzI4IDIzOjE2OjE4IGJqaDIxIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODggVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqCWZyb206IEAoIylsaW1pdHMuaAk3LjIgKEJlcmtlbGV5KSA2LzI4LzkwCi0gKi8KLQotI2lmbmRlZiBfQUFSQ0g2NF9MSU1JVFNfSF8KLSNkZWZpbmUgX0FBUkNINjRfTElNSVRTX0hfCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQotI2RlZmluZQlNQl9MRU5fTUFYCTEJCS8qIG5vIG11bHRpYnl0ZSBjaGFyYWN0ZXJzICovCi0KLSNkZWZpbmUJTE9OR0xPTkdfQklUCTY0Ci0jZGVmaW5lCUxPTkdMT05HX01JTgkoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTC0xKQotI2RlZmluZQlMT05HTE9OR19NQVgJOTIyMzM3MjAzNjg1NDc3NTgwN0xMCi0jZGVmaW5lCVVMT05HTE9OR19NQVgJMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwKLQotI2lmbmRlZglTSVpFX01BWAotI2RlZmluZQlTSVpFX01BWAlVTE9OR0xPTkdfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYSBzaXplX3QgKi8KLSNlbmRpZgotI2lmbmRlZiBTU0laRV9NQVgKLSNkZWZpbmUJU1NJWkVfTUFYCUxPTkdMT05HX01BWAkJLyogbWF4IHZhbHVlIGZvciBhIHNzaXplX3QgKi8KLSNlbmRpZgotCi0jaWYgX19CU0RfVklTSUJMRQotI2RlZmluZQlTSVpFX1RfTUFYCVVMT05HX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgc2l6ZV90IChoaXN0b3JpYykgKi8KLQotI2RlZmluZQlVUVVBRF9NQVgJMHhmZmZmZmZmZmZmZmZmZmZmVUxMCQkvKiBtYXggdW5zaWduZWQgcXVhZCAqLwotI2RlZmluZQlRVUFEX01BWAkweDdmZmZmZmZmZmZmZmZmZmZMTAkJLyogbWF4IHNpZ25lZCBxdWFkICovCi0jZGVmaW5lCVFVQURfTUlOCSgtMHg3ZmZmZmZmZmZmZmZmZmZmTEwtMSkJLyogbWluIHNpZ25lZCBxdWFkICovCi0KLSNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCi0jZW5kaWYgLyogX0FBUkNINjRfTElNSVRTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMubWsgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxZGU1YTUuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4KLXN5c2NhbGxfc3JjIDo9Ci1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19fYnJrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19fZXhpdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19fZ2V0Y3B1LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX19nZXRjd2QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX19pb2N0bC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19fb3BlbmF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX19wcG9sbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19fcHNlbGVjdDYuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX3B0cmFjZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19fcmVib290LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX3N5c2xvZy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX3dhaXRpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19leGl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvYWNjZXB0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvYWNjdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2JpbmQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9jYXBnZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9jYXBzZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9jaGRpci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2Nocm9vdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvY2xvc2UuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9jb25uZWN0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2R1cC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2R1cDMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZXBvbGxfY3RsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZXZlbnRmZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2V4ZWN2ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2ZhY2Nlc3NhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2ZjaGRpci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2ZjaG1vZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2ZjaG1vZGF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZmNob3duLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZmNob3duYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9mY250bC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2ZkYXRhc3luYy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2ZnZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2ZsaXN0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9mbG9jay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2ZzZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZnN0YXRhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0ZnMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9mc3luYy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2Z0cnVuY2F0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2Z1dGV4LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0ZGVudHMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXRlZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0ZXVpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2dldGdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2dldGdyb3Vwcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2dldGl0aW1lci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cGdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2dldHBpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2dldHBwaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXRyZXNnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXRyZXN1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXRybGltaXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXRydXNhZ2UuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXRzaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2dldHNvY2tvcHQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXR0aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXR1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9pbm90aWZ5X2luaXQxLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2lvcHJpb19nZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9pb3ByaW9fc2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMva2lsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2tsb2djdGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9sZ2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9saW5rYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9saXN0ZW4uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9saXN0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9sbGlzdHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbHNlZWsuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9sc2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9tYWR2aXNlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbWluY29yZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL21rZGlyYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9ta25vZGF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbWxvY2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9tbG9ja2FsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL21tYXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9tb3VudC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL21wcm90ZWN0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbXJlbWFwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbXN5bmMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9tdW5sb2NrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbXVubG9ja2FsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL211bm1hcC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL25hbm9zbGVlcC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvcGlwZTIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9wcmN0bC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3ByZWFkNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9wcmxpbWl0NjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9wd3JpdGU2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3JlYWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9yZWFkYWhlYWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9yZWFkbGlua2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvcmVhZHYuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9yZWN2ZnJvbS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3JlY3Ztc2cuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9yZW1vdmV4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3JlbmFtZWF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF95aWVsZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NlbmRmaWxlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc2VuZG1zZy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NlbmR0by5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NldGdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NldGdyb3Vwcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NldGl0aW1lci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NldG5zLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cGdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NldHByaW9yaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmVnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zZXRyZXNnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zZXRyZXN1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zZXRyZXVpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NldHJsaW1pdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NldHNpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NldHNvY2tvcHQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zZXR1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NodXRkb3duLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc2lnYWx0c3RhY2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zaWduYWxmZDQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zb2NrZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zb2NrZXRwYWlyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc3RhdGZzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc3dhcG9mZi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3N3YXBvbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3N5bWxpbmthdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3N5bmMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zeXNpbmZvLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvdGdraWxsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy90aW1lcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3RraWxsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvdHJ1bmNhdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy91bWFzay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3Vtb3VudDIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy91bmFtZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3VubGlua2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvdW5zaGFyZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3V0aW1lbnNhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3dhaXQ0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvd3JpdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy93cml0ZXYuUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fYWNjZXB0NC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fYWNjZXB0NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OWU2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19hY2NlcHQ0LlMKQEAgLTAsMCArMSwxNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2FjY2VwdDQpCisgICAgbW92ICAgICB4OCwgX19OUl9hY2NlcHQ0CisgICAgc3ZjICAgICAjMAorCisgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGNuZWcgICAgeDAsIHgwLCBoaQorICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKworICAgIHJldAorRU5EKF9fYWNjZXB0NCkKKy5oaWRkZW4gX19hY2NlcHQ0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19icmsuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2Jyay5TCmluZGV4IDk4MDU1Y2MuLmZiNzk0YmYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2Jyay5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2Jyay5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fYnJrKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2JyawogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX2JyaykKLS5oaWRkZW4gX0NfTEFCRUwoX19icmspCisuaGlkZGVuIF9fYnJrCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19jbG9ja19nZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19jbG9ja19nZXR0aW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU4YWIyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2Nsb2NrX2dldHRpbWUuUwpAQCAtMCwwICsxLDE1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fY2xvY2tfZ2V0dGltZSkKKyAgICBtb3YgICAgIHg4LCBfX05SX2Nsb2NrX2dldHRpbWUKKyAgICBzdmMgICAgICMwCisKKyAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgY25lZyAgICB4MCwgeDAsIGhpCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAorCisgICAgcmV0CitFTkQoX19jbG9ja19nZXR0aW1lKQorLmhpZGRlbiBfX2Nsb2NrX2dldHRpbWUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2Nvbm5lY3QuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2Nvbm5lY3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMThlNmViCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fY29ubmVjdC5TCkBAIC0wLDAgKzEsMTUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19jb25uZWN0KQorICAgIG1vdiAgICAgeDgsIF9fTlJfY29ubmVjdAorICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORChfX2Nvbm5lY3QpCisuaGlkZGVuIF9fY29ubmVjdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2Vwb2xsX3B3YWl0LlMKaW5kZXggZDUxMmM3Yy4uYWNmMmJiZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fZXBvbGxfcHdhaXQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZXBvbGxfcHdhaXQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX19lcG9sbF9wd2FpdCkKLS5oaWRkZW4gX0NfTEFCRUwoX19lcG9sbF9wd2FpdCkKKy5oaWRkZW4gX19lcG9sbF9wd2FpdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZXhpdC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZXhpdC5TCmluZGV4IDUwY2Q0NWEuLmI2YjE4NjYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2V4aXQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19leGl0LlMKQEAgLTMsMjAgKzMsMTMgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoX19leGl0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2V4aXQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX19leGl0KQotLmhpZGRlbiBfQ19MQUJFTChfX2V4aXQpCisuaGlkZGVuIF9fZXhpdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZmFkdmlzZTY0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19mYWR2aXNlNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTVkMDk0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZmFkdmlzZTY0LlMKQEAgLTAsMCArMSwxNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2ZhZHZpc2U2NCkKKyAgICBtb3YgICAgIHg4LCBfX05SX2ZhZHZpc2U2NAorICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORChfX2ZhZHZpc2U2NCkKKy5oaWRkZW4gX19mYWR2aXNlNjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldGNwdS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZ2V0Y3B1LlMKaW5kZXggNjk4ZThmZi4uMTFlZDY4ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZ2V0Y3B1LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZ2V0Y3B1LlMKQEAgLTMsMjAgKzMsMTMgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoX19nZXRjcHUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0Y3B1CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKF9fZ2V0Y3B1KQotLmhpZGRlbiBfQ19MQUJFTChfX2dldGNwdSkKKy5oaWRkZW4gX19nZXRjcHUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldGN3ZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZ2V0Y3dkLlMKaW5kZXggZjA1NDNmMC4uYzY0ZjRkMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZ2V0Y3dkLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZ2V0Y3dkLlMKQEAgLTMsMjAgKzMsMTMgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoX19nZXRjd2QpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0Y3dkCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKF9fZ2V0Y3dkKQotLmhpZGRlbiBfQ19MQUJFTChfX2dldGN3ZCkKKy5oaWRkZW4gX19nZXRjd2QKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldGRlbnRzNjQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldGRlbnRzNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTQzMzkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZ2V0ZGVudHM2NC5TCkBAIC0wLDAgKzEsMTUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19nZXRkZW50czY0KQorICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0ZGVudHM2NAorICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORChfX2dldGRlbnRzNjQpCisuaGlkZGVuIF9fZ2V0ZGVudHM2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZ2V0cGlkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19nZXRwaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmM5NmRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZ2V0cGlkLlMKQEAgLTAsMCArMSwxNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2dldHBpZCkKKyAgICBtb3YgICAgIHg4LCBfX05SX2dldHBpZAorICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORChfX2dldHBpZCkKKy5oaWRkZW4gX19nZXRwaWQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCmluZGV4IGY3ZmQxYjguLjlkOThlMjIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUwpAQCAtMywyMCArMywxMyBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShfX2dldHByaW9yaXR5KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2dldHByaW9yaXR5CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKF9fZ2V0cHJpb3JpdHkpCi0uaGlkZGVuIF9DX0xBQkVMKF9fZ2V0cHJpb3JpdHkpCisuaGlkZGVuIF9fZ2V0cHJpb3JpdHkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldHRpbWVvZmRheS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZ2V0dGltZW9mZGF5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4MjA2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldHRpbWVvZmRheS5TCkBAIC0wLDAgKzEsMTUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19nZXR0aW1lb2ZkYXkpCisgICAgbW92ICAgICB4OCwgX19OUl9nZXR0aW1lb2ZkYXkKKyAgICBzdmMgICAgICMwCisKKyAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgY25lZyAgICB4MCwgeDAsIGhpCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAorCisgICAgcmV0CitFTkQoX19nZXR0aW1lb2ZkYXkpCisuaGlkZGVuIF9fZ2V0dGltZW9mZGF5CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19pb2N0bC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19faW9jdGwuUwppbmRleCAyNTY5ZmRmLi42MmJjMjhjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19pb2N0bC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2lvY3RsLlMKQEAgLTMsMjAgKzMsMTMgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoX19pb2N0bCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9pb2N0bAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX2lvY3RsKQotLmhpZGRlbiBfQ19MQUJFTChfX2lvY3RsKQorLmhpZGRlbiBfX2lvY3RsCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19vcGVuYXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX29wZW5hdC5TCmluZGV4IGNjYTY2Y2UuLjhiNjg1M2YgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX29wZW5hdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX29wZW5hdC5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fb3BlbmF0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX29wZW5hdAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX29wZW5hdCkKLS5oaWRkZW4gX0NfTEFCRUwoX19vcGVuYXQpCisuaGlkZGVuIF9fb3BlbmF0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19wcG9sbC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcHBvbGwuUwppbmRleCA2OGVmYzA5Li4xZjU0ZDY3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19wcG9sbC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3Bwb2xsLlMKQEAgLTMsMjAgKzMsMTMgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoX19wcG9sbCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9wcG9sbAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3Bwb2xsKQotLmhpZGRlbiBfQ19MQUJFTChfX3Bwb2xsKQorLmhpZGRlbiBfX3Bwb2xsCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19wc2VsZWN0Ni5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcHNlbGVjdDYuUwppbmRleCAyOTViNzFhLi4zODhkODRlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19wc2VsZWN0Ni5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3BzZWxlY3Q2LlMKQEAgLTMsMjAgKzMsMTMgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoX19wc2VsZWN0NikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9wc2VsZWN0NgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3BzZWxlY3Q2KQotLmhpZGRlbiBfQ19MQUJFTChfX3BzZWxlY3Q2KQorLmhpZGRlbiBfX3BzZWxlY3Q2CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19wdHJhY2UuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3B0cmFjZS5TCmluZGV4IGFhNDEwNzEuLmQ2OGI2NzQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3B0cmFjZS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3B0cmFjZS5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fcHRyYWNlKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3B0cmFjZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3B0cmFjZSkKLS5oaWRkZW4gX0NfTEFCRUwoX19wdHJhY2UpCisuaGlkZGVuIF9fcHRyYWNlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19yZWJvb3QuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3JlYm9vdC5TCmluZGV4IDk2ODBiZGMuLjc5Y2Q1YmUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3JlYm9vdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3JlYm9vdC5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fcmVib290KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3JlYm9vdAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3JlYm9vdCkKLS5oaWRkZW4gX0NfTEFCRUwoX19yZWJvb3QpCisuaGlkZGVuIF9fcmVib290CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCmluZGV4IDc3ZjgzZWEuLjY1ZmVhMmUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fcnRfc2lnYWN0aW9uKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3J0X3NpZ2FjdGlvbgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3J0X3NpZ2FjdGlvbikKLS5oaWRkZW4gX0NfTEFCRUwoX19ydF9zaWdhY3Rpb24pCisuaGlkZGVuIF9fcnRfc2lnYWN0aW9uCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMKaW5kZXggNTlhMmUxZS4uNjU1Mzc4MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUwpAQCAtMywyMCArMywxMyBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShfX3J0X3NpZ3BlbmRpbmcpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfcnRfc2lncGVuZGluZwogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3J0X3NpZ3BlbmRpbmcpCi0uaGlkZGVuIF9DX0xBQkVMKF9fcnRfc2lncGVuZGluZykKKy5oaWRkZW4gX19ydF9zaWdwZW5kaW5nCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUwppbmRleCBjNWE1MWVkLi45NTEyN2Q2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKQEAgLTMsMjAgKzMsMTMgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoX19ydF9zaWdwcm9jbWFzaykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9ydF9zaWdwcm9jbWFzawogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3J0X3NpZ3Byb2NtYXNrKQotLmhpZGRlbiBfQ19MQUJFTChfX3J0X3NpZ3Byb2NtYXNrKQorLmhpZGRlbiBfX3J0X3NpZ3Byb2NtYXNrCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKaW5kZXggN2ExYzIyZS4uN2NiZDhkNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3J0X3NpZ3N1c3BlbmQuUwpAQCAtMywyMCArMywxMyBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShfX3J0X3NpZ3N1c3BlbmQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfcnRfc2lnc3VzcGVuZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3J0X3NpZ3N1c3BlbmQpCi0uaGlkZGVuIF9DX0xBQkVMKF9fcnRfc2lnc3VzcGVuZCkKKy5oaWRkZW4gX19ydF9zaWdzdXNwZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCmluZGV4IGIzZDk1MGMuLjgwMDE2MzUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fcnRfc2lndGltZWR3YWl0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3J0X3NpZ3RpbWVkd2FpdAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3J0X3NpZ3RpbWVkd2FpdCkKLS5oaWRkZW4gX0NfTEFCRUwoX19ydF9zaWd0aW1lZHdhaXQpCisuaGlkZGVuIF9fcnRfc2lndGltZWR3YWl0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUwppbmRleCA5Yjc4NWFkLi43ZGFkMTVlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKQEAgLTMsMjAgKzMsMTMgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoX19zY2hlZF9nZXRhZmZpbml0eSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zY2hlZF9nZXRhZmZpbml0eQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3NjaGVkX2dldGFmZmluaXR5KQotLmhpZGRlbiBfQ19MQUJFTChfX3NjaGVkX2dldGFmZmluaXR5KQorLmhpZGRlbiBfX3NjaGVkX2dldGFmZmluaXR5CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TCmluZGV4IGI3NTQxZmMuLmY3YWUxNmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fc2V0X3RpZF9hZGRyZXNzKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NldF90aWRfYWRkcmVzcwogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3NldF90aWRfYWRkcmVzcykKLS5oaWRkZW4gX0NfTEFCRUwoX19zZXRfdGlkX2FkZHJlc3MpCisuaGlkZGVuIF9fc2V0X3RpZF9hZGRyZXNzCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19zaWduYWxmZDQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3NpZ25hbGZkNC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZTM0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19zaWduYWxmZDQuUwpAQCAtMCwwICsxLDE1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fc2lnbmFsZmQ0KQorICAgIG1vdiAgICAgeDgsIF9fTlJfc2lnbmFsZmQ0CisgICAgc3ZjICAgICAjMAorCisgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGNuZWcgICAgeDAsIHgwLCBoaQorICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKworICAgIHJldAorRU5EKF9fc2lnbmFsZmQ0KQorLmhpZGRlbiBfX3NpZ25hbGZkNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fc29ja2V0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19zb2NrZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDRiYjJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fc29ja2V0LlMKQEAgLTAsMCArMSwxNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3NvY2tldCkKKyAgICBtb3YgICAgIHg4LCBfX05SX3NvY2tldAorICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORChfX3NvY2tldCkKKy5oaWRkZW4gX19zb2NrZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3N5c2xvZy5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fc3lzbG9nLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNWE3ZWIuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fc3lzbG9nLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKF9fc3lzbG9nKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KLSAgICBtb3YgICAgIHg4LCBfX05SX3N5c2xvZwotICAgIHN2YyAgICAgIzAKLQotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCi0gICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KLQotICAgIHJldAotRU5EKF9fc3lzbG9nKQotLmhpZGRlbiBfQ19MQUJFTChfX3N5c2xvZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKaW5kZXggYmZjZTQ0OC4uNDc5MDg0NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKQEAgLTMsMjAgKzMsMTMgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoX190aW1lcl9jcmVhdGUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfdGltZXJfY3JlYXRlCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKF9fdGltZXJfY3JlYXRlKQotLmhpZGRlbiBfQ19MQUJFTChfX3RpbWVyX2NyZWF0ZSkKKy5oaWRkZW4gX190aW1lcl9jcmVhdGUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKaW5kZXggMDNlZDQ0ZS4uY2UxMjYxMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKQEAgLTMsMjAgKzMsMTMgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoX190aW1lcl9kZWxldGUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfdGltZXJfZGVsZXRlCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKF9fdGltZXJfZGVsZXRlKQotLmhpZGRlbiBfQ19MQUJFTChfX3RpbWVyX2RlbGV0ZSkKKy5oaWRkZW4gX190aW1lcl9kZWxldGUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwppbmRleCBhNDU4OTQxLi4yY2ZkZjZhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fdGltZXJfZ2V0b3ZlcnJ1bikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl90aW1lcl9nZXRvdmVycnVuCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKF9fdGltZXJfZ2V0b3ZlcnJ1bikKLS5oaWRkZW4gX0NfTEFCRUwoX190aW1lcl9nZXRvdmVycnVuKQorLmhpZGRlbiBfX3RpbWVyX2dldG92ZXJydW4KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUwppbmRleCBiNmFlMjllLi5hMWVhMzIzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fdGltZXJfZ2V0dGltZSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl90aW1lcl9nZXR0aW1lCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKF9fdGltZXJfZ2V0dGltZSkKLS5oaWRkZW4gX0NfTEFCRUwoX190aW1lcl9nZXR0aW1lKQorLmhpZGRlbiBfX3RpbWVyX2dldHRpbWUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUwppbmRleCAzYzQ0YjUzLi4wNTlkNzA1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fdGltZXJfc2V0dGltZSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl90aW1lcl9zZXR0aW1lCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKF9fdGltZXJfc2V0dGltZSkKLS5oaWRkZW4gX0NfTEFCRUwoX190aW1lcl9zZXR0aW1lKQorLmhpZGRlbiBfX3RpbWVyX3NldHRpbWUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3dhaXRpZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fd2FpdGlkLlMKaW5kZXggNDI0NDAxOC4uOGJkNjQ5ZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fd2FpdGlkLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fd2FpdGlkLlMKQEAgLTMsMjAgKzMsMTMgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoX193YWl0aWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfd2FpdGlkCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKF9fd2FpdGlkKQotLmhpZGRlbiBfQ19MQUJFTChfX3dhaXRpZCkKKy5oaWRkZW4gX193YWl0aWQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fZXhpdC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19leGl0LlMKaW5kZXggMjRiN2IxNy4uZWRmNjc0NCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19leGl0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19leGl0LlMKQEAgLTMsMTkgKzMsMTUgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoX2V4aXQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZXhpdF9ncm91cAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfZXhpdCkKKworICAgIC5nbG9ibCBfRXhpdAorICAgIC5lcXUgX0V4aXQsIF9leGl0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvYWNjZXB0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvYWNjZXB0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZTYxMjEuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2FjY2VwdC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShhY2NlcHQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQotICAgIG1vdiAgICAgeDgsIF9fTlJfYWNjZXB0Ci0gICAgc3ZjICAgICAjMAotCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KLSAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubwotCi0gICAgcmV0Ci1FTkQoYWNjZXB0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2FjY3QuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9hY2N0LlMKaW5kZXggOTAxZTQyMC4uNDhjYjRlOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2FjY3QuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvYWNjdC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGFjY3QpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfYWNjdAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChhY2N0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2JpbmQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9iaW5kLlMKaW5kZXggNDcxZDc4My4uNDcxNzBmZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2JpbmQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvYmluZC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGJpbmQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfYmluZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChiaW5kKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2NhcGdldC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2NhcGdldC5TCmluZGV4IDMzZmUxMWMuLjdlMGRmZTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jYXBnZXQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2FwZ2V0LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoY2FwZ2V0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2NhcGdldAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChjYXBnZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2Fwc2V0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2Fwc2V0LlMKaW5kZXggNzVmMDNhOS4uZTdiN2E4ZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2NhcHNldC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jYXBzZXQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShjYXBzZXQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfY2Fwc2V0CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGNhcHNldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jaGRpci5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2NoZGlyLlMKaW5kZXggMDUxZjgyMy4uNzIzY2QwOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2NoZGlyLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2NoZGlyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoY2hkaXIpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfY2hkaXIKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoY2hkaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2hyb290LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2hyb290LlMKaW5kZXggYzA2Mzk5Zi4uZTRmNmJkOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nocm9vdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jaHJvb3QuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShjaHJvb3QpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfY2hyb290CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGNocm9vdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19nZXRyZXMuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19nZXRyZXMuUwppbmRleCBiZmZjN2NiLi4zM2ZkYThmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGNsb2NrX2dldHJlcykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9jbG9ja19nZXRyZXMKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoY2xvY2tfZ2V0cmVzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNTgyMzYuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoY2xvY2tfZ2V0dGltZSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCi0gICAgbW92ICAgICB4OCwgX19OUl9jbG9ja19nZXR0aW1lCi0gICAgc3ZjICAgICAjMAotCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KLSAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubwotCi0gICAgcmV0Ci1FTkQoY2xvY2tfZ2V0dGltZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwppbmRleCAzNTdiZGE2Li4zNDljNWNjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGNsb2NrX25hbm9zbGVlcCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9jbG9ja19uYW5vc2xlZXAKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoY2xvY2tfbmFub3NsZWVwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKaW5kZXggMDZlOTM5My4uNjIzNTRkMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGNsb2NrX3NldHRpbWUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfY2xvY2tfc2V0dGltZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChjbG9ja19zZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nsb3NlLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2xvc2UuUwppbmRleCBmZWZlMTQ3Li4zNjI0NTgxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2xvc2UuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2xvc2UuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShjbG9zZSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9jbG9zZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChjbG9zZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jb25uZWN0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY29ubmVjdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2NkNDNkLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jb25uZWN0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGNvbm5lY3QpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQotICAgIG1vdiAgICAgeDgsIF9fTlJfY29ubmVjdAotICAgIHN2YyAgICAgIzAKLQotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCi0gICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KLQotICAgIHJldAotRU5EKGNvbm5lY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwppbmRleCA0ZThiMDlkLi5kYjhkOTQ3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZGVsZXRlX21vZHVsZSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9kZWxldGVfbW9kdWxlCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGRlbGV0ZV9tb2R1bGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZHVwLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZHVwLlMKaW5kZXggOWRiZTU2Mi4uNGU5NTA0NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2R1cC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9kdXAuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShkdXApCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZHVwCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGR1cCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9kdXAzLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZHVwMy5TCmluZGV4IGVlMDQ0NDAuLjJlNmJlMzIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9kdXAzLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2R1cDMuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShkdXAzKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2R1cDMKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZHVwMykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZXBvbGxfY3JlYXRlMS5TCmluZGV4IDBlZDM0YjUuLjZlZjUxOGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShlcG9sbF9jcmVhdGUxKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2Vwb2xsX2NyZWF0ZTEKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZXBvbGxfY3JlYXRlMSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9lcG9sbF9jdGwuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9lcG9sbF9jdGwuUwppbmRleCBhMDliYTI5Li4xMTg4ZjM4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZXBvbGxfY3RsLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Vwb2xsX2N0bC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGVwb2xsX2N0bCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9lcG9sbF9jdGwKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZXBvbGxfY3RsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2V2ZW50ZmQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9ldmVudGZkLlMKaW5kZXggZTZiNTkyYi4uY2E1ZGYxMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2V2ZW50ZmQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZXZlbnRmZC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGV2ZW50ZmQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZXZlbnRmZDIKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZXZlbnRmZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9leGVjdmUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9leGVjdmUuUwppbmRleCA0ZjNjZGI4Li5mYzhmYjY4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZXhlY3ZlLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2V4ZWN2ZS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGV4ZWN2ZSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9leGVjdmUKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZXhlY3ZlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZhY2Nlc3NhdC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZhY2Nlc3NhdC5TCmluZGV4IGM2YjY1NTcuLjRjOTZjZmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mYWNjZXNzYXQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmFjY2Vzc2F0LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZmFjY2Vzc2F0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2ZhY2Nlc3NhdAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChmYWNjZXNzYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmFsbG9jYXRlLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmFsbG9jYXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYzZDRhNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mYWxsb2NhdGUuUwpAQCAtMCwwICsxLDE3IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZhbGxvY2F0ZSkKKyAgICBtb3YgICAgIHg4LCBfX05SX2ZhbGxvY2F0ZQorICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORChmYWxsb2NhdGUpCisKKyAgICAuZ2xvYmwgZmFsbG9jYXRlNjQKKyAgICAuZXF1IGZhbGxvY2F0ZTY0LCBmYWxsb2NhdGUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mY2hkaXIuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mY2hkaXIuUwppbmRleCBjNjA4MjMxLi4yZTE2NGNiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNoZGlyLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZjaGRpci5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGZjaGRpcikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9mY2hkaXIKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZmNoZGlyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZjaG1vZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZjaG1vZC5TCmluZGV4IGE3NzdjZGMuLjgzYTgwNjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mY2htb2QuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNobW9kLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZmNobW9kKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2ZjaG1vZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChmY2htb2QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNobW9kYXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mY2htb2RhdC5TCmluZGV4IDFhNTJjOWYuLjhjNWJiMGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mY2htb2RhdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mY2htb2RhdC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGZjaG1vZGF0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2ZjaG1vZGF0CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGZjaG1vZGF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZjaG93bi5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZjaG93bi5TCmluZGV4IDA3M2UzNmYuLjQ0NTZmMWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mY2hvd24uUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNob3duLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZmNob3duKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2ZjaG93bgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChmY2hvd24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNob3duYXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mY2hvd25hdC5TCmluZGV4IGRiODBhYjEuLjdiYTY2MTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mY2hvd25hdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mY2hvd25hdC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGZjaG93bmF0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2ZjaG93bmF0CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGZjaG93bmF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZjbnRsLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNudGwuUwppbmRleCAyM2NlMTU1Li5lMjc4N2FlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNudGwuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNudGwuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShmY250bCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9mY250bAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChmY250bCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mZGF0YXN5bmMuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mZGF0YXN5bmMuUwppbmRleCBiNGU5YWE5Li4yMjVhYjI5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmRhdGFzeW5jLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZkYXRhc3luYy5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGZkYXRhc3luYykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9mZGF0YXN5bmMKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZmRhdGFzeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZnZXR4YXR0ci5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZnZXR4YXR0ci5TCmluZGV4IDMyNzhhMTIuLjBkNmFkYTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mZ2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmdldHhhdHRyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZmdldHhhdHRyKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2ZnZXR4YXR0cgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChmZ2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmxpc3R4YXR0ci5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZsaXN0eGF0dHIuUwppbmRleCA0MGIyYTMwLi44OTIxYmI0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmxpc3R4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mbGlzdHhhdHRyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZmxpc3R4YXR0cikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9mbGlzdHhhdHRyCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGZsaXN0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmxvY2suUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mbG9jay5TCmluZGV4IDdlMjg3ODkuLjBjMDM2YzggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mbG9jay5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mbG9jay5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGZsb2NrKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2Zsb2NrCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGZsb2NrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TCmluZGV4IGJlODZkZDAuLmNmM2EzNzEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZnJlbW92ZXhhdHRyKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2ZyZW1vdmV4YXR0cgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChmcmVtb3ZleGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnNldHhhdHRyLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnNldHhhdHRyLlMKaW5kZXggMmNiNzJjOS4uZTY5ZTcxOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc2V0eGF0dHIuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShmc2V0eGF0dHIpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZnNldHhhdHRyCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGZzZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3RhdC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4YWFhNDAuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGZzdGF0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KLSAgICBtb3YgICAgIHg4LCBfX05SX2ZzdGF0Ci0gICAgc3ZjICAgICAjMAotCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KLSAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubwotCi0gICAgcmV0Ci1FTkQoZnN0YXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnN0YXQ2NC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0NjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWEwN2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0NjQuUwpAQCAtMCwwICsxLDE3IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZzdGF0NjQpCisgICAgbW92ICAgICB4OCwgX19OUl9mc3RhdAorICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORChmc3RhdDY0KQorCisgICAgLmdsb2JsIGZzdGF0CisgICAgLmVxdSBmc3RhdCwgZnN0YXQ2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0YXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3RhdGF0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZTBmYTAuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0YXQuUworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZnN0YXRhdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCi0gICAgbW92ICAgICB4OCwgX19OUl9uZXdmc3RhdGF0Ci0gICAgc3ZjICAgICAjMAotCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KLSAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubwotCi0gICAgcmV0Ci1FTkQoZnN0YXRhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3RhdGF0NjQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3RhdGF0NjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWZkOTgyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0YXQ2NC5TCkBAIC0wLDAgKzEsMTcgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZnN0YXRhdDY0KQorICAgIG1vdiAgICAgeDgsIF9fTlJfbmV3ZnN0YXRhdAorICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORChmc3RhdGF0NjQpCisKKyAgICAuZ2xvYmwgZnN0YXRhdAorICAgIC5lcXUgZnN0YXRhdCwgZnN0YXRhdDY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnN0YXRmcy5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0ZnMuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZkODg3NS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnN0YXRmcy5TCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShmc3RhdGZzKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KLSAgICBtb3YgICAgIHg4LCBfX05SX2ZzdGF0ZnMKLSAgICBzdmMgICAgICMwCi0KLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQotICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCi0KLSAgICByZXQKLUVORChmc3RhdGZzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0ZnM2NC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0ZnM2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYTJkY2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnN0YXRmczY0LlMKQEAgLTAsMCArMSwxNyBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmc3RhdGZzNjQpCisgICAgbW92ICAgICB4OCwgX19OUl9mc3RhdGZzCisgICAgc3ZjICAgICAjMAorCisgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGNuZWcgICAgeDAsIHgwLCBoaQorICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKworICAgIHJldAorRU5EKGZzdGF0ZnM2NCkKKworICAgIC5nbG9ibCBmc3RhdGZzCisgICAgLmVxdSBmc3RhdGZzLCBmc3RhdGZzNjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3luYy5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzeW5jLlMKaW5kZXggZTEwNzZmMi4uMmJjMGQwYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzeW5jLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzeW5jLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZnN5bmMpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZnN5bmMKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZnN5bmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnRydW5jYXRlLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnRydW5jYXRlLlMKaW5kZXggN2VkODBiOS4uYzZlOTlmNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Z0cnVuY2F0ZS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mdHJ1bmNhdGUuUwpAQCAtMywyMiArMywxNSBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShmdHJ1bmNhdGUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZnRydW5jYXRlCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGZ0cnVuY2F0ZSkKIAotICAgIC5nbG9ibCBfQ19MQUJFTChmdHJ1bmNhdGU2NCkKLSAgICAuZXF1IF9DX0xBQkVMKGZ0cnVuY2F0ZTY0KSwgX0NfTEFCRUwoZnRydW5jYXRlKQorICAgIC5nbG9ibCBmdHJ1bmNhdGU2NAorICAgIC5lcXUgZnRydW5jYXRlNjQsIGZ0cnVuY2F0ZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Z1dGV4LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnV0ZXguUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE0OWQ2Yi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnV0ZXguUworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZnV0ZXgpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQotICAgIG1vdiAgICAgeDgsIF9fTlJfZnV0ZXgKLSAgICBzdmMgICAgICMwCi0KLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQotICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCi0KLSAgICByZXQKLUVORChmdXRleCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRkZW50cy5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldGRlbnRzLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NDk2YzIuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldGRlbnRzLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGdldGRlbnRzKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KLSAgICBtb3YgICAgIHg4LCBfX05SX2dldGRlbnRzNjQKLSAgICBzdmMgICAgICMwCi0KLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQotICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCi0KLSAgICByZXQKLUVORChnZXRkZW50cykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRlZ2lkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0ZWdpZC5TCmluZGV4IDE0NGZlODguLmY3ZDYwZDkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRlZ2lkLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldGVnaWQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShnZXRlZ2lkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2dldGVnaWQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZ2V0ZWdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRldWlkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0ZXVpZC5TCmluZGV4IGZjZWM5NzcuLjMwOTZhOTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRldWlkLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldGV1aWQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShnZXRldWlkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2dldGV1aWQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZ2V0ZXVpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRnaWQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRnaWQuUwppbmRleCAwZmQxNzJlLi4yZjkyMWZmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0Z2lkLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldGdpZC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGdldGdpZCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9nZXRnaWQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZ2V0Z2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldGdyb3Vwcy5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldGdyb3Vwcy5TCmluZGV4IDNjMTJlZjQuLmE5YTg5N2UgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRncm91cHMuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZ2V0Z3JvdXBzKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2dldGdyb3VwcwogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChnZXRncm91cHMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0aXRpbWVyLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0aXRpbWVyLlMKaW5kZXggZDc5NWNkNy4uZjM3MDYzYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldGl0aW1lci5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRpdGltZXIuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShnZXRpdGltZXIpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0aXRpbWVyCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGdldGl0aW1lcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRwZWVybmFtZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKaW5kZXggYWVhMzEyMi4uODM3NGQ2MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZ2V0cGVlcm5hbWUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0cGVlcm5hbWUKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZ2V0cGVlcm5hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cGdpZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHBnaWQuUwppbmRleCAxYmRhODNmLi5mZmMwZDkxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cGdpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRwZ2lkLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZ2V0cGdpZCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9nZXRwZ2lkCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGdldHBnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cGlkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cGlkLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNDA4YzguLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHBpZC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShnZXRwaWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQotICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0cGlkCi0gICAgc3ZjICAgICAjMAotCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KLSAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubwotCi0gICAgcmV0Ci1FTkQoZ2V0cGlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHBwaWQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRwcGlkLlMKaW5kZXggMWI4NWNlZi4uMWUyMWJkZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHBwaWQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cHBpZC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGdldHBwaWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0cHBpZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChnZXRwcGlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHJlc2dpZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHJlc2dpZC5TCmluZGV4IGFiMDBiMDYuLmIxNTM1N2EgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRyZXNnaWQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZ2V0cmVzZ2lkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2dldHJlc2dpZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChnZXRyZXNnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cmVzdWlkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cmVzdWlkLlMKaW5kZXggMGZmMjE4YS4uNTNkZTZiNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHJlc3VpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRyZXN1aWQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShnZXRyZXN1aWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0cmVzdWlkCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGdldHJlc3VpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRybGltaXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRybGltaXQuUwppbmRleCAyMWI0NzFlLi41MThhYjczIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cmxpbWl0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHJsaW1pdC5TCkBAIC0zLDIyICszLDE1IEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGdldHJsaW1pdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9nZXRybGltaXQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZ2V0cmxpbWl0KQogCi0gICAgLmdsb2JsIF9DX0xBQkVMKGdldHJsaW1pdDY0KQotICAgIC5lcXUgX0NfTEFCRUwoZ2V0cmxpbWl0NjQpLCBfQ19MQUJFTChnZXRybGltaXQpCisgICAgLmdsb2JsIGdldHJsaW1pdDY0CisgICAgLmVxdSBnZXRybGltaXQ2NCwgZ2V0cmxpbWl0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cnVzYWdlLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cnVzYWdlLlMKaW5kZXggNWUyYmFjZS4uNjc2MjIxYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHJ1c2FnZS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRydXNhZ2UuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShnZXRydXNhZ2UpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0cnVzYWdlCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGdldHJ1c2FnZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRzaWQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRzaWQuUwppbmRleCBjODVjYTYwLi5jZmJkZmRiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0c2lkLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHNpZC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGdldHNpZCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9nZXRzaWQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZ2V0c2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHNvY2tuYW1lLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0c29ja25hbWUuUwppbmRleCAxZDAyNzlhLi40Y2NhNTVkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0c29ja25hbWUuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0c29ja25hbWUuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShnZXRzb2NrbmFtZSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9nZXRzb2NrbmFtZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChnZXRzb2NrbmFtZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRzb2Nrb3B0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0c29ja29wdC5TCmluZGV4IDNiZmQ1YjguLjk2YjhjMGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHNvY2tvcHQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShnZXRzb2Nrb3B0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2dldHNvY2tvcHQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZ2V0c29ja29wdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXR0aWQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXR0aWQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhjMTI4ZS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0dGlkLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGdldHRpZCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCi0gICAgbW92ICAgICB4OCwgX19OUl9nZXR0aWQKLSAgICBzdmMgICAgICMwCi0KLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQotICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCi0KLSAgICByZXQKLUVORChnZXR0aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmOWFjMjguLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShnZXR0aW1lb2ZkYXkpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQotICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0dGltZW9mZGF5Ci0gICAgc3ZjICAgICAjMAotCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KLSAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubwotCi0gICAgcmV0Ci1FTkQoZ2V0dGltZW9mZGF5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHVpZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHVpZC5TCmluZGV4IDk2MTk4YjcuLmVmOTViYTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXR1aWQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0dWlkLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZ2V0dWlkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2dldHVpZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChnZXR1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXR4YXR0ci5TCmluZGV4IDExYjkwYWEuLjJiMzhmM2QgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXR4YXR0ci5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGdldHhhdHRyKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2dldHhhdHRyCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGdldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUwppbmRleCA4NjQ4YjA0Li45MTNjN2NjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShpbml0X21vZHVsZSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9pbml0X21vZHVsZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChpbml0X21vZHVsZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKaW5kZXggNTgzYWI3Mi4uODNhNWI1NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoaW5vdGlmeV9hZGRfd2F0Y2gpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoaW5vdGlmeV9hZGRfd2F0Y2gpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUwppbmRleCAzZWU5NDZlLi5kM2JjODFiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9pbm90aWZ5X2luaXQxLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoaW5vdGlmeV9pbml0MSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9pbm90aWZ5X2luaXQxCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGlub3RpZnlfaW5pdDEpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUwppbmRleCAzMTIxYjUxLi5jNDQ0NDVmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoaW5vdGlmeV9ybV93YXRjaCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9pbm90aWZ5X3JtX3dhdGNoCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGlub3RpZnlfcm1fd2F0Y2gpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvaW9wcmlvX2dldC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2lvcHJpb19nZXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA3YTRlNy4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvaW9wcmlvX2dldC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShpb3ByaW9fZ2V0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KLSAgICBtb3YgICAgIHg4LCBfX05SX2lvcHJpb19nZXQKLSAgICBzdmMgICAgICMwCi0KLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQotICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCi0KLSAgICByZXQKLUVORChpb3ByaW9fZ2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2lvcHJpb19zZXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9pb3ByaW9fc2V0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViN2IwMjYuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2lvcHJpb19zZXQuUworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoaW9wcmlvX3NldCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCi0gICAgbW92ICAgICB4OCwgX19OUl9pb3ByaW9fc2V0Ci0gICAgc3ZjICAgICAjMAotCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KLSAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubwotCi0gICAgcmV0Ci1FTkQoaW9wcmlvX3NldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9raWxsLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMva2lsbC5TCmluZGV4IDM3ODhkZjcuLjAzMzRmZjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9raWxsLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2tpbGwuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShraWxsKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2tpbGwKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoa2lsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9rbG9nY3RsLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMva2xvZ2N0bC5TCmluZGV4IGVmYThiNGEuLjYyNWYzNTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9rbG9nY3RsLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2tsb2djdGwuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShrbG9nY3RsKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3N5c2xvZwogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChrbG9nY3RsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xnZXR4YXR0ci5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xnZXR4YXR0ci5TCmluZGV4IDFmZGEwOTIuLjg5ZGIyMDYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9sZ2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbGdldHhhdHRyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkobGdldHhhdHRyKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2xnZXR4YXR0cgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChsZ2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbGlua2F0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbGlua2F0LlMKaW5kZXggOTk5YzAwNy4uNjJhZWEzYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xpbmthdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9saW5rYXQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShsaW5rYXQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbGlua2F0CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGxpbmthdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9saXN0ZW4uUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9saXN0ZW4uUwppbmRleCA4YjdmYTBmLi5iYTk3YmU5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbGlzdGVuLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xpc3Rlbi5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGxpc3RlbikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9saXN0ZW4KICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQobGlzdGVuKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xpc3R4YXR0ci5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xpc3R4YXR0ci5TCmluZGV4IGNjMzk5YTkuLjQ4MjA4ZTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9saXN0eGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbGlzdHhhdHRyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkobGlzdHhhdHRyKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2xpc3R4YXR0cgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChsaXN0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbGxpc3R4YXR0ci5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xsaXN0eGF0dHIuUwppbmRleCA4N2JmZTEwLi5lZDY2MDA1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbGxpc3R4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9sbGlzdHhhdHRyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkobGxpc3R4YXR0cikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9sbGlzdHhhdHRyCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGxsaXN0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKaW5kZXggYWQ4MjNlNC4uYjVlNTFjNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9scmVtb3ZleGF0dHIuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShscmVtb3ZleGF0dHIpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbHJlbW92ZXhhdHRyCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGxyZW1vdmV4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9sc2Vlay5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xzZWVrLlMKaW5kZXggODY3YmI3MS4uZGU5NmRmMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xzZWVrLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xzZWVrLlMKQEAgLTMsMjIgKzMsMTUgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkobHNlZWspCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbHNlZWsKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQobHNlZWspCiAKLSAgICAuZ2xvYmwgX0NfTEFCRUwobHNlZWs2NCkKLSAgICAuZXF1IF9DX0xBQkVMKGxzZWVrNjQpLCBfQ19MQUJFTChsc2VlaykKKyAgICAuZ2xvYmwgbHNlZWs2NAorICAgIC5lcXUgbHNlZWs2NCwgbHNlZWsKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9sc2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9sc2V0eGF0dHIuUwppbmRleCA2ODNmYzJiLi5iODczNTEzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbHNldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xzZXR4YXR0ci5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGxzZXR4YXR0cikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9sc2V0eGF0dHIKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQobHNldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21hZHZpc2UuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tYWR2aXNlLlMKaW5kZXggODEzNmVjOS4uNmZjZWQ0MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21hZHZpc2UuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbWFkdmlzZS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKG1hZHZpc2UpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbWFkdmlzZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChtYWR2aXNlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21pbmNvcmUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9taW5jb3JlLlMKaW5kZXggOGE4ZTVhNS4uNTc4MWI0YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21pbmNvcmUuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbWluY29yZS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKG1pbmNvcmUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbWluY29yZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChtaW5jb3JlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21rZGlyYXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9ta2RpcmF0LlMKaW5kZXggYjNkZDgzOC4uZmE4NjhhMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21rZGlyYXQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbWtkaXJhdC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKG1rZGlyYXQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbWtkaXJhdAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChta2RpcmF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21rbm9kYXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9ta25vZGF0LlMKaW5kZXggYWNhNjc4Ni4uMTM2MzJlYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21rbm9kYXQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbWtub2RhdC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKG1rbm9kYXQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbWtub2RhdAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChta25vZGF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21sb2NrLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbWxvY2suUwppbmRleCBiYjAxNDM1Li4xZWVlODVjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbWxvY2suUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbWxvY2suUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShtbG9jaykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9tbG9jawogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChtbG9jaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tbG9ja2FsbC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21sb2NrYWxsLlMKaW5kZXggMjc4ZTZkMy4uZDRjYTE4NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21sb2NrYWxsLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21sb2NrYWxsLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkobWxvY2thbGwpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbWxvY2thbGwKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQobWxvY2thbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbW1hcC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21tYXAuUwppbmRleCBhMmQxODFhLi42NGI5NTVlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbW1hcC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tbWFwLlMKQEAgLTMsMjIgKzMsMTUgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkobW1hcCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9tbWFwCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKG1tYXApCiAKLSAgICAuZ2xvYmwgX0NfTEFCRUwobW1hcDY0KQotICAgIC5lcXUgX0NfTEFCRUwobW1hcDY0KSwgX0NfTEFCRUwobW1hcCkKKyAgICAuZ2xvYmwgbW1hcDY0CisgICAgLmVxdSBtbWFwNjQsIG1tYXAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tb3VudC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21vdW50LlMKaW5kZXggZDg4YTU0Yi4uY2QzNTAxNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21vdW50LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21vdW50LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkobW91bnQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbW91bnQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQobW91bnQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbXByb3RlY3QuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tcHJvdGVjdC5TCmluZGV4IGM4YTJlZmUuLjlkZDg4MTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tcHJvdGVjdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tcHJvdGVjdC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKG1wcm90ZWN0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX21wcm90ZWN0CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKG1wcm90ZWN0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21yZW1hcC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21yZW1hcC5TCmluZGV4IDdjN2ZlNWIuLjY5YjkxZDYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tcmVtYXAuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbXJlbWFwLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkobXJlbWFwKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX21yZW1hcAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChtcmVtYXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbXN5bmMuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tc3luYy5TCmluZGV4IGI0NWM5OWQuLjcyMzg3ZWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tc3luYy5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tc3luYy5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKG1zeW5jKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX21zeW5jCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKG1zeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL211bmxvY2suUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tdW5sb2NrLlMKaW5kZXggZDg0Yjg1MC4uZDJhMjQ4YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL211bmxvY2suUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbXVubG9jay5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKG11bmxvY2spCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbXVubG9jawogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChtdW5sb2NrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL211bmxvY2thbGwuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tdW5sb2NrYWxsLlMKaW5kZXggZTA0M2Y3MS4uYWM0MmNiNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL211bmxvY2thbGwuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbXVubG9ja2FsbC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKG11bmxvY2thbGwpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbXVubG9ja2FsbAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChtdW5sb2NrYWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL211bm1hcC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL211bm1hcC5TCmluZGV4IDAyYWZiZTguLjlkM2Y2YTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tdW5tYXAuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbXVubWFwLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkobXVubWFwKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX211bm1hcAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChtdW5tYXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbmFub3NsZWVwLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbmFub3NsZWVwLlMKaW5kZXggOGNkOWE5NS4uZDNlNmZhZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL25hbm9zbGVlcC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9uYW5vc2xlZXAuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShuYW5vc2xlZXApCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbmFub3NsZWVwCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKG5hbm9zbGVlcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk2MDI2NC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKHBlcmZfZXZlbnRfb3BlbikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCi0gICAgbW92ICAgICB4OCwgX19OUl9wZXJmX2V2ZW50X29wZW4KLSAgICBzdmMgICAgICMwCi0KLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQotICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCi0KLSAgICByZXQKLUVORChwZXJmX2V2ZW50X29wZW4pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcGVyc29uYWxpdHkuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9wZXJzb25hbGl0eS5TCmluZGV4IDI1MzU0NjcuLmY5ZjNiZjYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9wZXJzb25hbGl0eS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9wZXJzb25hbGl0eS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHBlcnNvbmFsaXR5KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3BlcnNvbmFsaXR5CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHBlcnNvbmFsaXR5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3BpcGUyLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcGlwZTIuUwppbmRleCBmNzJlNzA3Li44OTE4MWNkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcGlwZTIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcGlwZTIuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShwaXBlMikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9waXBlMgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChwaXBlMikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9wcmN0bC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3ByY3RsLlMKaW5kZXggNzliM2U5Mi4uODZmNGRmNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3ByY3RsLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3ByY3RsLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkocHJjdGwpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfcHJjdGwKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQocHJjdGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcHJlYWQ2NC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3ByZWFkNjQuUwppbmRleCAwZDA5OGYxLi5lYWZjMDQ0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcHJlYWQ2NC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9wcmVhZDY0LlMKQEAgLTMsMjIgKzMsMTUgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkocHJlYWQ2NCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9wcmVhZDY0CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHByZWFkNjQpCiAKLSAgICAuZ2xvYmwgX0NfTEFCRUwocHJlYWQpCi0gICAgLmVxdSBfQ19MQUJFTChwcmVhZCksIF9DX0xBQkVMKHByZWFkNjQpCisgICAgLmdsb2JsIHByZWFkCisgICAgLmVxdSBwcmVhZCwgcHJlYWQ2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3BybGltaXQ2NC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3BybGltaXQ2NC5TCmluZGV4IDQzOWUzNTUuLjJiZWNlOTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9wcmxpbWl0NjQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcHJsaW1pdDY0LlMKQEAgLTMsMjIgKzMsMTUgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkocHJsaW1pdDY0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3BybGltaXQ2NAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChwcmxpbWl0NjQpCiAKLSAgICAuZ2xvYmwgX0NfTEFCRUwocHJsaW1pdCkKLSAgICAuZXF1IF9DX0xBQkVMKHBybGltaXQpLCBfQ19MQUJFTChwcmxpbWl0NjQpCisgICAgLmdsb2JsIHBybGltaXQKKyAgICAuZXF1IHBybGltaXQsIHBybGltaXQ2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3B3cml0ZTY0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcHdyaXRlNjQuUwppbmRleCBhMTBmNzZmLi42OTcwOTU0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcHdyaXRlNjQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcHdyaXRlNjQuUwpAQCAtMywyMiArMywxNSBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShwd3JpdGU2NCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9wd3JpdGU2NAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChwd3JpdGU2NCkKIAotICAgIC5nbG9ibCBfQ19MQUJFTChwd3JpdGUpCi0gICAgLmVxdSBfQ19MQUJFTChwd3JpdGUpLCBfQ19MQUJFTChwd3JpdGU2NCkKKyAgICAuZ2xvYmwgcHdyaXRlCisgICAgLmVxdSBwd3JpdGUsIHB3cml0ZTY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVhZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlYWQuUwppbmRleCBjZjdjYTA0Li5kZGI4OGM4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVhZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWFkLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkocmVhZCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9yZWFkCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHJlYWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVhZGFoZWFkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVhZGFoZWFkLlMKaW5kZXggZmU0NWNmOS4uNDQ1YWJkNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlYWRhaGVhZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWFkYWhlYWQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShyZWFkYWhlYWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfcmVhZGFoZWFkCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHJlYWRhaGVhZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWFkbGlua2F0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVhZGxpbmthdC5TCmluZGV4IGViODIyMWMuLjYyY2M5ZTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWFkbGlua2F0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlYWRsaW5rYXQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShyZWFkbGlua2F0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3JlYWRsaW5rYXQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQocmVhZGxpbmthdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWFkdi5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlYWR2LlMKaW5kZXggZjRmYTYxMi4uNmU3ZjE1MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlYWR2LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlYWR2LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkocmVhZHYpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfcmVhZHYKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQocmVhZHYpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVjdmZyb20uUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWN2ZnJvbS5TCmluZGV4IDUxYWMyNWYuLmFlY2YxNjUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWN2ZnJvbS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWN2ZnJvbS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHJlY3Zmcm9tKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3JlY3Zmcm9tCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHJlY3Zmcm9tKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlY3ZtbXNnLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVjdm1tc2cuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWNhZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlY3ZtbXNnLlMKQEAgLTAsMCArMSwxNCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShyZWN2bW1zZykKKyAgICBtb3YgICAgIHg4LCBfX05SX3JlY3ZtbXNnCisgICAgc3ZjICAgICAjMAorCisgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGNuZWcgICAgeDAsIHgwLCBoaQorICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKworICAgIHJldAorRU5EKHJlY3ZtbXNnKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlY3Ztc2cuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWN2bXNnLlMKaW5kZXggNGNhNDBlYS4uMmRhZmRjOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlY3Ztc2cuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVjdm1zZy5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHJlY3Ztc2cpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfcmVjdm1zZwogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChyZWN2bXNnKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUwppbmRleCBhZTUzMzA3Li5lZGUzNmE2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShyZW1vdmV4YXR0cikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9yZW1vdmV4YXR0cgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChyZW1vdmV4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZW5hbWVhdC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlbmFtZWF0LlMKaW5kZXggM2Y2ZTRkNC4uOTYwMjVkZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlbmFtZWF0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlbmFtZWF0LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkocmVuYW1lYXQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfcmVuYW1lYXQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQocmVuYW1lYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUwppbmRleCA3MzVjYTkzLi5jODQ4ODg5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2NoZWRfZ2V0X3ByaW9yaXR5X21heCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNjaGVkX2dldF9wcmlvcml0eV9tYXgpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUwppbmRleCBhNDUzYjBiLi43NGI3MmEyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2NoZWRfZ2V0X3ByaW9yaXR5X21pbikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNjaGVkX2dldF9wcmlvcml0eV9taW4pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCmluZGV4IGYzNDkyYjkuLjc1YTMyZDQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNjaGVkX2dldHBhcmFtKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NjaGVkX2dldHBhcmFtCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNjaGVkX2dldHBhcmFtKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCmluZGV4IGRiOTQ0ZjEuLmUyNGJhZjIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2NoZWRfZ2V0c2NoZWR1bGVyKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NjaGVkX2dldHNjaGVkdWxlcgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzY2hlZF9nZXRzY2hlZHVsZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKaW5kZXggYjkxZjY0Ni4uMmE2OTM2YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzY2hlZF9ycl9nZXRfaW50ZXJ2YWwpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNjaGVkX3JyX2dldF9pbnRlcnZhbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKaW5kZXggZThlMWFlYy4uMzBiNThmNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2NoZWRfc2V0YWZmaW5pdHkpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2NoZWRfc2V0YWZmaW5pdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCmluZGV4IDVkZjg0ZjAuLmVhZjI1YmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNjaGVkX3NldHBhcmFtKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NjaGVkX3NldHBhcmFtCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNjaGVkX3NldHBhcmFtKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCmluZGV4IDgzYzMxZTQuLjMxZDUzYzQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2NoZWRfc2V0c2NoZWR1bGVyKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzY2hlZF9zZXRzY2hlZHVsZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfeWllbGQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF95aWVsZC5TCmluZGV4IDdkNWY4OGIuLjRjZmVlZGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF95aWVsZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF95aWVsZC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNjaGVkX3lpZWxkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NjaGVkX3lpZWxkCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNjaGVkX3lpZWxkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NlbmRmaWxlLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2VuZGZpbGUuUwppbmRleCBlNTQwMjk2Li4xN2EwZDQ2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2VuZGZpbGUuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2VuZGZpbGUuUwpAQCAtMywyMiArMywxNSBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzZW5kZmlsZSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zZW5kZmlsZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzZW5kZmlsZSkKIAotICAgIC5nbG9ibCBfQ19MQUJFTChzZW5kZmlsZTY0KQotICAgIC5lcXUgX0NfTEFCRUwoc2VuZGZpbGU2NCksIF9DX0xBQkVMKHNlbmRmaWxlKQorICAgIC5nbG9ibCBzZW5kZmlsZTY0CisgICAgLmVxdSBzZW5kZmlsZTY0LCBzZW5kZmlsZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NlbmRtbXNnLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2VuZG1tc2cuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTFjMjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NlbmRtbXNnLlMKQEAgLTAsMCArMSwxNCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZW5kbW1zZykKKyAgICBtb3YgICAgIHg4LCBfX05SX3NlbmRtbXNnCisgICAgc3ZjICAgICAjMAorCisgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGNuZWcgICAgeDAsIHgwLCBoaQorICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKworICAgIHJldAorRU5EKHNlbmRtbXNnKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NlbmRtc2cuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZW5kbXNnLlMKaW5kZXggMmYwY2RjOC4uYTM0MzU0MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NlbmRtc2cuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2VuZG1zZy5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNlbmRtc2cpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2VuZG1zZwogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzZW5kbXNnKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NlbmR0by5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NlbmR0by5TCmluZGV4IDNmZDU0ZDEuLjZhNjgxM2UgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZW5kdG8uUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2VuZHRvLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2VuZHRvKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NlbmR0bwogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzZW5kdG8pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0ZnNnaWQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRmc2dpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNDVkZjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0ZnNnaWQuUwpAQCAtMCwwICsxLDE0IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldGZzZ2lkKQorICAgIG1vdiAgICAgeDgsIF9fTlJfc2V0ZnNnaWQKKyAgICBzdmMgICAgICMwCisKKyAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgY25lZyAgICB4MCwgeDAsIGhpCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAorCisgICAgcmV0CitFTkQoc2V0ZnNnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0ZnN1aWQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRmc3VpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNGVmZDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0ZnN1aWQuUwpAQCAtMCwwICsxLDE0IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldGZzdWlkKQorICAgIG1vdiAgICAgeDgsIF9fTlJfc2V0ZnN1aWQKKyAgICBzdmMgICAgICMwCisKKyAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgY25lZyAgICB4MCwgeDAsIGhpCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAorCisgICAgcmV0CitFTkQoc2V0ZnN1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0Z2lkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0Z2lkLlMKaW5kZXggMGE4MTFiMC4uYzEyOGZiOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldGdpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRnaWQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzZXRnaWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2V0Z2lkCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNldGdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRncm91cHMuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRncm91cHMuUwppbmRleCBkMzE2ZTVlLi5hZWRhYmQ2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0Z3JvdXBzLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldGdyb3Vwcy5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNldGdyb3VwcykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zZXRncm91cHMKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2V0Z3JvdXBzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldGl0aW1lci5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldGl0aW1lci5TCmluZGV4IDdjMmI3MTguLjdjZTg2MTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRpdGltZXIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0aXRpbWVyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2V0aXRpbWVyKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NldGl0aW1lcgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzZXRpdGltZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0bnMuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRucy5TCmluZGV4IDJjZTJhNzUuLjM4NmU4ZjQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRucy5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRucy5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNldG5zKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NldG5zCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNldG5zKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHBnaWQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRwZ2lkLlMKaW5kZXggYmQxMmU3MC4uNDU4Yzg4YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHBnaWQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cGdpZC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNldHBnaWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2V0cGdpZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzZXRwZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHByaW9yaXR5LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cHJpb3JpdHkuUwppbmRleCBkOWE0ODU3Li5lZDU4ZjI2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cHJpb3JpdHkuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cHJpb3JpdHkuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzZXRwcmlvcml0eSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zZXRwcmlvcml0eQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzZXRwcmlvcml0eSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRyZWdpZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHJlZ2lkLlMKaW5kZXggNzAyYWU4Yi4uMzBkOTAyZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHJlZ2lkLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHJlZ2lkLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2V0cmVnaWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2V0cmVnaWQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2V0cmVnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmVzZ2lkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmVzZ2lkLlMKaW5kZXggYzk1MDFhYy4uZjU2ZTZjZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHJlc2dpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRyZXNnaWQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzZXRyZXNnaWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2V0cmVzZ2lkCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNldHJlc2dpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRyZXN1aWQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRyZXN1aWQuUwppbmRleCA2ZjY4MGMzLi5kNWM1Y2M2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmVzdWlkLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHJlc3VpZC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNldHJlc3VpZCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zZXRyZXN1aWQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2V0cmVzdWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHJldWlkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmV1aWQuUwppbmRleCBlZjg3MGZhLi5lNzZjNzJlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmV1aWQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmV1aWQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzZXRyZXVpZCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zZXRyZXVpZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzZXRyZXVpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRybGltaXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRybGltaXQuUwppbmRleCBlNzIzODA2Li42Y2I2Yjk4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmxpbWl0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHJsaW1pdC5TCkBAIC0zLDIyICszLDE1IEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNldHJsaW1pdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zZXRybGltaXQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2V0cmxpbWl0KQogCi0gICAgLmdsb2JsIF9DX0xBQkVMKHNldHJsaW1pdDY0KQotICAgIC5lcXUgX0NfTEFCRUwoc2V0cmxpbWl0NjQpLCBfQ19MQUJFTChzZXRybGltaXQpCisgICAgLmdsb2JsIHNldHJsaW1pdDY0CisgICAgLmVxdSBzZXRybGltaXQ2NCwgc2V0cmxpbWl0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0c2lkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0c2lkLlMKaW5kZXggYzliYTU5NC4uMWJiNGNjNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHNpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRzaWQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzZXRzaWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2V0c2lkCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNldHNpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRzb2Nrb3B0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0c29ja29wdC5TCmluZGV4IDdjOWQ1ODQuLjE0YjAxMzYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRzb2Nrb3B0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHNvY2tvcHQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzZXRzb2Nrb3B0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NldHNvY2tvcHQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2V0c29ja29wdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwppbmRleCA0Y2Y2ZmYyLi40ZjBhMDc4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNldHRpbWVvZmRheSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zZXR0aW1lb2ZkYXkKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2V0dGltZW9mZGF5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHVpZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHVpZC5TCmluZGV4IGE4ODZjMTUuLjU1MDBkZDYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXR1aWQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0dWlkLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2V0dWlkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NldHVpZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzZXR1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXR4YXR0ci5TCmluZGV4IDFkMjVmM2EuLjViYTllM2MgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXR4YXR0ci5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNldHhhdHRyKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NldHhhdHRyCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NodXRkb3duLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2h1dGRvd24uUwppbmRleCBiOWZjM2MzLi5hYjA2N2ZhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2h1dGRvd24uUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2h1dGRvd24uUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzaHV0ZG93bikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zaHV0ZG93bgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzaHV0ZG93bikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zaWdhbHRzdGFjay5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKaW5kZXggNjA1MmNhYS4uYTljYmNhZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2lnYWx0c3RhY2spCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2lnYWx0c3RhY2sKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2lnYWx0c3RhY2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2lnbmFsZmQ0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2lnbmFsZmQ0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhOGY3ZjcuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NpZ25hbGZkNC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShzaWduYWxmZDQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQotICAgIG1vdiAgICAgeDgsIF9fTlJfc2lnbmFsZmQ0Ci0gICAgc3ZjICAgICAjMAotCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KLSAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubwotCi0gICAgcmV0Ci1FTkQoc2lnbmFsZmQ0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NvY2tldC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NvY2tldC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2EzODUxLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zb2NrZXQuUworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoc29ja2V0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KLSAgICBtb3YgICAgIHg4LCBfX05SX3NvY2tldAotICAgIHN2YyAgICAgIzAKLQotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCi0gICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KLQotICAgIHJldAotRU5EKHNvY2tldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zb2NrZXRwYWlyLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc29ja2V0cGFpci5TCmluZGV4IDA1ZTYxN2IuLmJkNzBkYWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zb2NrZXRwYWlyLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NvY2tldHBhaXIuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzb2NrZXRwYWlyKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NvY2tldHBhaXIKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc29ja2V0cGFpcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zcGxpY2UuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zcGxpY2UuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTQ1MGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NwbGljZS5TCkBAIC0wLDAgKzEsMTQgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc3BsaWNlKQorICAgIG1vdiAgICAgeDgsIF9fTlJfc3BsaWNlCisgICAgc3ZjICAgICAjMAorCisgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGNuZWcgICAgeDAsIHgwLCBoaQorICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKworICAgIHJldAorRU5EKHNwbGljZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zdGF0ZnMuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zdGF0ZnMuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJmYWU2My4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3RhdGZzLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKHN0YXRmcykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCi0gICAgbW92ICAgICB4OCwgX19OUl9zdGF0ZnMKLSAgICBzdmMgICAgICMwCi0KLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQotICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCi0KLSAgICByZXQKLUVORChzdGF0ZnMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3RhdGZzNjQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zdGF0ZnM2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOGM1ODgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3RhdGZzNjQuUwpAQCAtMCwwICsxLDE3IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHN0YXRmczY0KQorICAgIG1vdiAgICAgeDgsIF9fTlJfc3RhdGZzCisgICAgc3ZjICAgICAjMAorCisgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGNuZWcgICAgeDAsIHgwLCBoaQorICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKworICAgIHJldAorRU5EKHN0YXRmczY0KQorCisgICAgLmdsb2JsIHN0YXRmcworICAgIC5lcXUgc3RhdGZzLCBzdGF0ZnM2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3N3YXBvZmYuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zd2Fwb2ZmLlMKaW5kZXggNzQyYjQ2MC4uMDEwM2JkNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3N3YXBvZmYuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3dhcG9mZi5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHN3YXBvZmYpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc3dhcG9mZgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzd2Fwb2ZmKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3N3YXBvbi5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3N3YXBvbi5TCmluZGV4IGI4MmQ3ZGUuLjU2MGM5NjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zd2Fwb24uUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3dhcG9uLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc3dhcG9uKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3N3YXBvbgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzd2Fwb24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3ltbGlua2F0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3ltbGlua2F0LlMKaW5kZXggYzZhODMxMy4uNGE0ZWEyNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3N5bWxpbmthdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zeW1saW5rYXQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzeW1saW5rYXQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc3ltbGlua2F0CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHN5bWxpbmthdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zeW5jLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3luYy5TCmluZGV4IDE5NTRmZTguLmQyODVkNDMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zeW5jLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3N5bmMuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzeW5jKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3N5bmMKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc3luYykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zeXNpbmZvLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3lzaW5mby5TCmluZGV4IGNiOTE1NTAuLjgwYTg2NDEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zeXNpbmZvLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3N5c2luZm8uUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzeXNpbmZvKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3N5c2luZm8KICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc3lzaW5mbykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90ZWUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90ZWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2JhYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RlZS5TCkBAIC0wLDAgKzEsMTQgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkodGVlKQorICAgIG1vdiAgICAgeDgsIF9fTlJfdGVlCisgICAgc3ZjICAgICAjMAorCisgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGNuZWcgICAgeDAsIHgwLCBoaQorICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKworICAgIHJldAorRU5EKHRlZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90Z2tpbGwuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90Z2tpbGwuUwppbmRleCBhNDAxODE5Li5mZDllYzNiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGdraWxsLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3Rna2lsbC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHRna2lsbCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl90Z2tpbGwKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQodGdraWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUwppbmRleCBlMDU1OGJlLi5lZTgwNWZkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWSh0aW1lcmZkX2NyZWF0ZSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl90aW1lcmZkX2NyZWF0ZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORCh0aW1lcmZkX2NyZWF0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUwppbmRleCAwOTIzNGNkLi40ZDVlMmY5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHRpbWVyZmRfZ2V0dGltZSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl90aW1lcmZkX2dldHRpbWUKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQodGltZXJmZF9nZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TCmluZGV4IGNjMjA1YWQuLmU5MjVhMGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkodGltZXJmZF9zZXR0aW1lKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3RpbWVyZmRfc2V0dGltZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORCh0aW1lcmZkX3NldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGltZXMuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90aW1lcy5TCmluZGV4IGM1ZmUzOGIuLmQ3YjljNzQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90aW1lcy5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90aW1lcy5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHRpbWVzKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3RpbWVzCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHRpbWVzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RraWxsLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGtpbGwuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5MTBmYy4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGtpbGwuUworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkodGtpbGwpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQotICAgIG1vdiAgICAgeDgsIF9fTlJfdGtpbGwKLSAgICBzdmMgICAgICMwCi0KLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQotICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCi0KLSAgICByZXQKLUVORCh0a2lsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90cnVuY2F0ZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RydW5jYXRlLlMKaW5kZXggZjI1NGMzNC4uMGU1YTMzZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RydW5jYXRlLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RydW5jYXRlLlMKQEAgLTMsMjIgKzMsMTUgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkodHJ1bmNhdGUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfdHJ1bmNhdGUKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQodHJ1bmNhdGUpCiAKLSAgICAuZ2xvYmwgX0NfTEFCRUwodHJ1bmNhdGU2NCkKLSAgICAuZXF1IF9DX0xBQkVMKHRydW5jYXRlNjQpLCBfQ19MQUJFTCh0cnVuY2F0ZSkKKyAgICAuZ2xvYmwgdHJ1bmNhdGU2NAorICAgIC5lcXUgdHJ1bmNhdGU2NCwgdHJ1bmNhdGUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy91bWFzay5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3VtYXNrLlMKaW5kZXggNzBhM2UwMS4uMGQ3MWZhNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3VtYXNrLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3VtYXNrLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkodW1hc2spCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfdW1hc2sKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQodW1hc2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdW1vdW50Mi5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3Vtb3VudDIuUwppbmRleCBjZGQwMzYyLi5jMjUzNDRlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdW1vdW50Mi5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy91bW91bnQyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkodW1vdW50MikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl91bW91bnQyCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHVtb3VudDIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdW5hbWUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy91bmFtZS5TCmluZGV4IGMyNDI3ODYuLmRmZGNjMDMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy91bmFtZS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy91bmFtZS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHVuYW1lKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3VuYW1lCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHVuYW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3VubGlua2F0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdW5saW5rYXQuUwppbmRleCBmN2JiMmM1Li5iMWViYTYzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdW5saW5rYXQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdW5saW5rYXQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWSh1bmxpbmthdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl91bmxpbmthdAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORCh1bmxpbmthdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy91bnNoYXJlLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdW5zaGFyZS5TCmluZGV4IGM5YmQ0OTcuLjc0ZjU2NjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy91bnNoYXJlLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3Vuc2hhcmUuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWSh1bnNoYXJlKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3Vuc2hhcmUKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQodW5zaGFyZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy91dGltZW5zYXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy91dGltZW5zYXQuUwppbmRleCA2MmM5OGE2Li5iOGM2YjA0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdXRpbWVuc2F0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3V0aW1lbnNhdC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHV0aW1lbnNhdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl91dGltZW5zYXQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQodXRpbWVuc2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3Ztc3BsaWNlLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdm1zcGxpY2UuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDkwZWZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3Ztc3BsaWNlLlMKQEAgLTAsMCArMSwxNCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWSh2bXNwbGljZSkKKyAgICBtb3YgICAgIHg4LCBfX05SX3Ztc3BsaWNlCisgICAgc3ZjICAgICAjMAorCisgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGNuZWcgICAgeDAsIHgwLCBoaQorICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKworICAgIHJldAorRU5EKHZtc3BsaWNlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3dhaXQ0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvd2FpdDQuUwppbmRleCA3NDMxNTM1Li4xMjk3M2I4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvd2FpdDQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvd2FpdDQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWSh3YWl0NCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl93YWl0NAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORCh3YWl0NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy93cml0ZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3dyaXRlLlMKaW5kZXggMmY5NWY1ZC4uZThjMzI3MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3dyaXRlLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3dyaXRlLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkod3JpdGUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfd3JpdGUKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQod3JpdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvd3JpdGV2LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvd3JpdGV2LlMKaW5kZXggMDE1YzFkMy4uYmFhZmZkYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3dyaXRldi5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy93cml0ZXYuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWSh3cml0ZXYpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfd3JpdGV2CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHdyaXRldikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1jb21tb24vYmlvbmljL2F0ZXhpdC5oIGIvbGliYy9hcmNoLWNvbW1vbi9iaW9uaWMvYXRleGl0LmgKaW5kZXggMTZhZTdhYS4uOTBhYTAzMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWNvbW1vbi9iaW9uaWMvYXRleGl0LmgKKysrIGIvbGliYy9hcmNoLWNvbW1vbi9iaW9uaWMvYXRleGl0LmgKQEAgLTI2LDExICsyNiwyMCBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiBleHRlcm4gdm9pZCogX19kc29faGFuZGxlOwogCiBleHRlcm4gaW50IF9fY3hhX2F0ZXhpdCh2b2lkICgqKSh2b2lkKiksIHZvaWQqLCB2b2lkKik7CiAKIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQordm9pZCBfX2F0ZXhpdF9oYW5kbGVyX3dyYXBwZXIodm9pZCogZnVuYykgeworICBpZiAoZnVuYyAhPSBOVUxMKSB7CisgICAgKCoodm9pZCAoKikodm9pZCkpZnVuYykoKTsKKyAgfQorfQorCitfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKIGludCBhdGV4aXQodm9pZCAoKmZ1bmMpKHZvaWQpKSB7Ci0gIHJldHVybiAoX19jeGFfYXRleGl0KCh2b2lkICgqKSh2b2lkKikpIGZ1bmMsICh2b2lkKikgMCwgJl9fZHNvX2hhbmRsZSkpOworICByZXR1cm4gKF9fY3hhX2F0ZXhpdCgmX19hdGV4aXRfaGFuZGxlcl93cmFwcGVyLCBmdW5jLCAmX19kc29faGFuZGxlKSk7CiB9CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TCmluZGV4IDg5NzBiNmUuLmIyMTZlZmUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TCkBAIC0yNiw0OSArMjYsNDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAvLyBwaWRfdCBfX2Jpb25pY19jbG9uZShpbnQgZmxhZ3MsIHZvaWQqIGNoaWxkX3N0YWNrLCBwaWRfdCogcGFyZW50X3RpZCwgdm9pZCogdGxzLCBwaWRfdCogY2hpbGRfdGlkLCBpbnQgKCpmbikodm9pZCopLCB2b2lkKiBhcmcpOwotCS50ZXh0Ci0JLnR5cGUgX19iaW9uaWNfY2xvbmUsIEBmdW5jdGlvbgotCS5nbG9iYWwgX19iaW9uaWNfY2xvbmUKLQkuYWxpZ24gNAotICAgICAgICAuZW50IF9fYmlvbmljX2Nsb25lCi1fX2Jpb25pY19jbG9uZToKK0VOVFJZKF9fYmlvbmljX2Nsb25lKQogICAgICAgICAuc2V0CW5vcmVvcmRlcgotICAgICAgICAuY3Bsb2FkICR0OQorICAgICAgICAuY3Bsb2FkIHQ5CiAgICAgICAgIC5zZXQJcmVvcmRlcgogCiAJIyBzZXQgdXAgY2hpbGQgc3RhY2sKLQlzdWJ1CSRhMSwxNgotCWx3CSR0MCwyMCgkc3ApICAgICAjIGZuCi0JbHcJJHQxLDI0KCRzcCkgICAgICMgYXJnCi0Jc3cJJHQwLDAoJGExKQkjIGZuCi0Jc3cJJHQxLDQoJGExKQkjIGFyZworCXN1YnUJYTEsMTYKKwlsdwl0MCwyMChzcCkgICAgICMgZm4KKwlsdwl0MSwyNChzcCkgICAgICMgYXJnCisJc3cJdDAsMChhMSkJIyBmbgorCXN3CXQxLDQoYTEpCSMgYXJnCiAKIAkjIHJlbWFpbmRlciBvZiBhcmd1bWVudHMgYXJlIGNvcnJlY3QgZm9yIGNsb25lIHN5c3RlbSBjYWxsCi0gICAgICAgIGxpCSR2MCxfX05SX2Nsb25lCisgICAgICAgIGxpCXYwLF9fTlJfY2xvbmUKICAgICAgICAgc3lzY2FsbAogCi0gICAgICAgIGJuZXoJJGEzLC5MX19lcnJvcl9iYworICAgICAgICBibmV6CWEzLC5MX19lcnJvcl9iYwogCi0gICAgICAgIGJlcXoJJHYwLC5MX190aHJlYWRfc3RhcnRfYmMKKyAgICAgICAgYmVxegl2MCwuTF9fdGhyZWFkX3N0YXJ0X2JjCiAKLSAgICAgICAgaiAkcmEKKyAgICAgICAgaiByYQogCiAuTF9fdGhyZWFkX3N0YXJ0X2JjOgotICAgICAgICBsdwkkYTAsMCgkc3ApCSMgIGZuCi0gICAgICAgIGx3CSRhMSw0KCRzcCkJIyAgYXJnCisgICAgICAgICMgQ2xlYXIgcmV0dXJuIGFkZHJlc3MgaW4gY2hpbGQgc28gd2UgZG9uJ3QgdW53aW5kIGZ1cnRoZXIuCisgICAgICAgIGxpICAgICAgcmEsMAogCi0JIyB2b2lkIF9fYmlvbmljX2Nsb25lX2VudHJ5KGludCAoKmZ1bmMpKHZvaWQqKSwgdm9pZCAqYXJnKQotICAgICAgICBsYQkkdDksX19iaW9uaWNfY2xvbmVfZW50cnkKLSAgICAgICAgagkkdDkKKyAgICAgICAgbHcJYTAsMChzcCkJIyAgZm4KKyAgICAgICAgbHcJYTEsNChzcCkJIyAgYXJnCisKKwkjIHZvaWQgX19zdGFydF90aHJlYWQoaW50ICgqZnVuYykodm9pZCopLCB2b2lkICphcmcpCisgICAgICAgIGxhCXQ5LF9fc3RhcnRfdGhyZWFkCisgICAgICAgIGoJdDkKIAogLkxfX2Vycm9yX2JjOgotCW1vdmUJJGEwLCR2MAotCWxhCSR0OSxfX3NldF9lcnJubwotCWoJJHQ5Ci0KLSAgICAgICAgLmVuZCBfX2Jpb25pY19jbG9uZQorCW1vdmUJYTAsdjAKKwlsYQl0OSxfX3NldF9lcnJub19pbnRlcm5hbAorCWoJdDkKK0VORChfX2Jpb25pY19jbG9uZSkKKy5oaWRkZW4gX19iaW9uaWNfY2xvbmUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fX2dldF9zcC5TIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL19fZ2V0X3NwLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNGM4OWQuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL19fZ2V0X3NwLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0JLnRleHQKLQotLyogdm9pZCAqX19nZXRfc3Aodm9pZCkgKi8KLQotCS50eXBlCV9fZ2V0X3NwLCBAZnVuY3Rpb24KLQkuZ2xvYmFsCV9fZ2V0X3NwCi0JLmFsaWduCTQKLQkuZW50CV9fZ2V0X3NwCi1fX2dldF9zcDoKLQltb3ZlCSR2MCwgJHNwCi0JagkkcmEKLQkuZW5kCV9fZ2V0X3NwCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX19zZXRfdGxzLmMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX19zZXRfdGxzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZTNhNTAuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL19fc2V0X3Rscy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLQotZXh0ZXJuIGludCBfX3NldF90aHJlYWRfYXJlYSh2b2lkICp1X2luZm8pOwotCi1pbnQgX19zZXRfdGxzKHZvaWQgKnB0cikKLXsKLSAgICByZXR1cm4gX19zZXRfdGhyZWFkX2FyZWEocHRyKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TCmluZGV4IDhmNjI0YzMuLjdkNDcxNjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUwpAQCAtMjYsMjMgKzI2LDE2IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotCi0JLnRleHQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogLy8gdm9pZCBfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKHZvaWQqIHN0YWNrQmFzZSwgc2l6ZV90IHN0YWNrU2l6ZSkKLQotCS50eXBlCV9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24sIEBmdW5jdGlvbgotCS5nbG9iYWwJX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bgotCS5hbGlnbgk0Ci0JLmVudAlfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duCi1fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duOgotCWxpCSR2MCwgX19OUl9tdW5tYXAKK0VOVFJZX1BSSVZBVEUoX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bikKKwlsaQl2MCwgX19OUl9tdW5tYXAKIAlzeXNjYWxsCiAJLy8gSWYgbXVubWFwIGZhaWxlZCwgd2UgaWdub3JlIHRoZSBmYWlsdXJlIGFuZCBleGl0IGFueXdheS4KIAotCWxpCSRhMCwgMAotCWxpCSR2MCwgX19OUl9leGl0CisJbGkJYTAsIDAKKwlsaQl2MCwgX19OUl9leGl0CiAJc3lzY2FsbAogICAgICAgICAvLyBUaGUgZXhpdCBzeXNjYWxsIGRvZXMgbm90IHJldHVybi4KLQkuZW5kCV9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24KK0VORChfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL19zZXRqbXAuUyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fc2V0am1wLlMKaW5kZXggZTcwODNhZS4uZDIzN2U2ZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL19zZXRqbXAuUworKysgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX3NldGptcC5TCkBAIC0yLDcgKzIsNyBAQAogCiAvKgogICogQ29weXJpZ2h0IChjKSAyMDAyIE9wc3ljb24gQUIgICh3d3cub3BzeWNvbi5zZSAvIHd3dy5vcHN5Y29uLmNvbSkKLSAqIAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgpAQCAtMjksNyArMjksNyBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KICNpbmNsdWRlIDxtYWNoaW5lL3JlZ251bS5oPgogI2luY2x1ZGUgPG1hY2hpbmUvc2lnbmFsLmg+CiAKQEAgLTQ0LDE3ICs0NCw2IEBACiBGUkFNRVNaPSBNS0ZTSVooMCw0KQogR1BPRkY9IEZSQU1FU1otMipSRUdTWgogCi0jZGVmaW5lIEZQUkVHNjRfUyhGUFIsIE9GRiwgQkFTRSkgICAgICAgXAotICAgICAgICBzd2MxICAgIEZQUiwgT0ZGKEJBU0UpICA7ICAgICAgIFwKLSAgICAgICAgbWZoYzEgICB0MCwgRlBSICAgICAgICAgOyAgICAgICBcCi0gICAgICAgIHN3ICAgICAgdDAsIE9GRis0KEJBU0UpIDsKLSAgICAgICAgCi0jZGVmaW5lIEZQUkVHNjRfTChGUFIsIE9GRiwgQkFTRSkgICAgICAgXAotICAgICAgICBsdyAgICAgIHQwLCBPRkYrNChCQVNFKSA7ICAgICAgIFwKLSAgICAgICAgbHcgICAgICB0MSwgT0ZGKEJBU0UpICAgOyAgICAgICBcCi0gICAgICAgIG10YzEgICAgdDEsIEZQUiAgICAgICAgIDsgICAgICAgXAotICAgICAgICBtdGhjMSAgIHQwLCBGUFIgICAgICAgICA7ICAgICAgIFwKLSAgICAgICAgCiBMRUFGKF9zZXRqbXAsIEZSQU1FU1opCiAJUFRSX1NVQlUgc3AsIEZSQU1FU1oKIAlTRVRVUF9HUDY0KEdQT0ZGLCBfc2V0am1wKQpAQCAtODUsMzIgKzc0LDE5IEBACiAJbGkJdjAsIDEJCQkJIyBiZSBuaWNlIGlmIHdlIGNvdWxkIHRlbGwKIAlSRUdfUwl2MCwgU0NfRlBVU0VEKGEwKQkJIyBzY19mcHVzZWQgPSAxCiAJY2ZjMQl2MCwgJDMxCisJcy5kCSRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjIyLCBTQ19GUFJFR1MrKChGMjItRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjI4LCBTQ19GUFJFR1MrKChGMjgtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCkoYTApCiAjaWYgX01JUFNfRlBTRVQgPT0gMzIKLSAgICAgICAgRlBSRUc2NF9TKCRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9TKCRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9TKCRmMjIsIFNDX0ZQUkVHUysoKEYyMi1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9TKCRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9TKCRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9TKCRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9TKCRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9TKCRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9TKCRmMjgsIFNDX0ZQUkVHUysoKEYyOC1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9TKCRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9TKCRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9TKCRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApLCBhMCkKLSNlbHNlCi0gICAgICAgIHN3YzEgICAgJGYyMCwgU0NfRlBSRUdTKygoRjIwLUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIHN3YzEgICAgJGYyMSwgU0NfRlBSRUdTKygoRjIxLUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIHN3YzEgICAgJGYyMiwgU0NfRlBSRUdTKygoRjIyLUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIHN3YzEgICAgJGYyMywgU0NfRlBSRUdTKygoRjIzLUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIHN3YzEgICAgJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIHN3YzEgICAgJGYyNSwgU0NfRlBSRUdTKygoRjI1LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIHN3YzEgICAgJGYyNiwgU0NfRlBSRUdTKygoRjI2LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIHN3YzEgICAgJGYyNywgU0NfRlBSRUdTKygoRjI3LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIHN3YzEgICAgJGYyOCwgU0NfRlBSRUdTKygoRjI4LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIHN3YzEgICAgJGYyOSwgU0NfRlBSRUdTKygoRjI5LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIHN3YzEgICAgJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIHN3YzEgICAgJGYzMSwgU0NfRlBSRUdTKygoRjMxLUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjIzLCBTQ19GUFJFR1MrKChGMjMtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyNSwgU0NfRlBSRUdTKygoRjI1LUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjI5LCBTQ19GUFJFR1MrKChGMjktRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYzMSwgU0NfRlBSRUdTKygoRjMxLUYwKSpSRUdTWl9GUCkoYTApCiAjZW5kaWYKIAlSRUdfUwl2MCwgU0NfRlBSRUdTKygoRlNSLUYwKSpSRUdTWikoYTApCiAjZW5kaWYgLyogIVNPRlRGTE9BVCAqLwpAQCAtMTQyLDMyICsxMTgsMTkgQEAKIAlSRUdfTAlzcCwgU0NfUkVHUytTUCpSRUdTWihhMCkKICNpZiAhZGVmaW5lZChTT0ZURkxPQVQpCiAJY3RjMQl2MCwgJDMxCisJbC5kCSRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjIyLCBTQ19GUFJFR1MrKChGMjItRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjI4LCBTQ19GUFJFR1MrKChGMjgtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCkoYTApCiAjaWYgX01JUFNfRlBTRVQgPT0gMzIKLSAgICAgICAgRlBSRUc2NF9MKCRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjIsIFNDX0ZQUkVHUysoKEYyMi1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjgsIFNDX0ZQUkVHUysoKEYyOC1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApLCBhMCkKLSNlbHNlCi0gICAgICAgIGx3YzEgICAgJGYyMCwgU0NfRlBSRUdTKygoRjIwLUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyMSwgU0NfRlBSRUdTKygoRjIxLUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyMiwgU0NfRlBSRUdTKygoRjIyLUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyMywgU0NfRlBSRUdTKygoRjIzLUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyNSwgU0NfRlBSRUdTKygoRjI1LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyNiwgU0NfRlBSRUdTKygoRjI2LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyNywgU0NfRlBSRUdTKygoRjI3LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyOCwgU0NfRlBSRUdTKygoRjI4LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyOSwgU0NfRlBSRUdTKygoRjI5LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYzMSwgU0NfRlBSRUdTKygoRjMxLUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjIzLCBTQ19GUFJFR1MrKChGMjMtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyNSwgU0NfRlBSRUdTKygoRjI1LUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjI5LCBTQ19GUFJFR1MrKChGMjktRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYzMSwgU0NfRlBSRUdTKygoRjMxLUYwKSpSRUdTWl9GUCkoYTApCiAjZW5kaWYKICNlbmRpZiAvKiAhU09GVEZMT0FUICovCiAJYm5lCWExLCB6ZXJvLCAxZgpAQCAtMTg1LDQgKzE0OCwzIEBACiAJUkVTVE9SRV9HUDY0CiAJUFRSX0FERFUgc3AsIEZSQU1FU1oKIEVORChfbG9uZ2ptcCkKLQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL2J6ZXJvLlMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvYnplcm8uUwppbmRleCA2NzM5MzQ1Li42ZTVkMjk0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvYnplcm8uUworKysgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvYnplcm8uUwpAQCAtMjUsMjEgKzI1LDE1IEBACiAgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgogICovCi0JLnRleHQKIAotLyoKLSAqIHZvaWQgYnplcm8odm9pZCAqcywgc2l6ZV90IG4pOwotICovCi0JLnR5cGUJYnplcm8sIEBmdW5jdGlvbgotCS5nbG9iYWwJYnplcm8KLQkuYWxpZ24JNAotCS5lbnQJYnplcm8KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworLy8gdm9pZCBiemVybyh2b2lkKiwgc2l6ZV90KTsKK0VOVFJZKGJ6ZXJvKQogCS5zZXQJbm9yZW9yZGVyCi1iemVybzoKLQkuY3Bsb2FkCSR0OQotCW1vdmUJJGEyLCRhMQotCWxhCSR0OSxtZW1zZXQKLQlqCSR0OQotCSBtb3ZlCSRhMSwkemVybwotCS5lbmQJYnplcm8KLQorCS5jcGxvYWQJdDkKKwltb3ZlCWEyLGExCisJbGEJdDksbWVtc2V0CisJagl0OQorCSBtb3ZlCWExLHplcm8KK0VORChiemVybykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9jYWNoZWZsdXNoLmNwcCBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9jYWNoZWZsdXNoLmNwcAppbmRleCA3OTU1ZGQ2Li45OGMwYmQ0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvY2FjaGVmbHVzaC5jcHAKKysrIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL2NhY2hlZmx1c2guY3BwCkBAIC0yNSw3NSArMjUsMzkgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KKwogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy9jYWNoZWN0bC5oPgogCi0jaWZkZWYgREVCVUcKICNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgotI2RlZmluZSAgWExPRyguLi4pIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCJsaWJjLWNhY2hlZmx1c2giLF9fVkFfQVJHU19fKQotI2VuZGlmCiAKLS8qCi0gKiBMaW51eCBoaXN0b3JpY2FsbHkgZGVmaW5lcyBhIGNhY2hlZmx1c2goMykgcm91dGluZSBmb3IgTUlQUwotICogd2l0aCB0aGlzIHNpZ25hdHVyZToKLSAqIGludCBjYWNoZWZsdXNoKGNoYXIgKmFkZHIsIGludCBuYnl0ZXMsIGludCBjYWNoZSk7Ci0gKgotICogQW5kcm9pZCBkZWZpbmVzIGFuIGFsdGVybmF0ZSBjYWNoZWZsdXNoIHJvdXRpbmUgd2hpY2ggZXhwb3NlcyB0aGUKLSAqIEFSTSBzeXN0ZW0gY2FsbCBpbnRlcmZhY2U6Ci0gKiBpbnQgY2FjaGVmbHVzaCAobG9uZyBzdGFydCwgbG9uZyBlbmQsIGxvbmcgZmxhZ3MpCi0gKgotICogVGhpcyBpcyBhbiBhdHRlbXB0IHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgYmV0d2VlbiB0aGUgaGlzdG9yaWNhbCBNSVBTCi0gKiB1c2FnZSBmb3Igc29mdHdhcmUgcHJldmlvdXNseSBwb3J0ZWQgdG8gTUlQUyBhbmQgQW5kcm9pZCBzcGVjaWZpYwotICogdXNlcyBvZiBjYWNoZWZsdXNoKCkKLSAqCi0gKiBVc2UgdGhlIGdjYyBfX2NsZWFyX2NhY2hlIGJ1aWx0aW4gaWYgcG9zc2libGUuIFRoaXMgd2lsbCBnZW5lcmF0ZSBpbmxpbmUgc3luY2kKLSAqIGluc3RydWN0aW9ucyBpZiBhdmFpbGFibGUgb3IgY2FsbCBfZmx1c2hfY2FjaGUoc3RhcnQsIGxlbiwgQkNBQ0hFKSBkaXJlY3RseQotICovCisvLyBMaW51eCBoaXN0b3JpY2FsbHkgZGVmaW5lcyBhIGNhY2hlZmx1c2goMykgcm91dGluZSBmb3IgTUlQUworLy8gd2l0aCB0aGlzIHNpZ25hdHVyZToKIAotI2lmIGRlZmluZWQgKF9fR05VQ19fKQotI2RlZmluZSBHQ0NfVkVSU0lPTiAoKF9fR05VQ19fKjEwMDAwKSArIF9fR05VQ19NSU5PUl9fKjEwMCArIF9fR05VQ19QQVRDSExFVkVMX18pCi0jZW5kaWYKKy8vICAgaW50IGNhY2hlZmx1c2goY2hhciAqYWRkciwgaW50IG5ieXRlcywgaW50IGNhY2hlKTsKIAotLyogVGhpcyBpcyB0aGUgQW5kcm9pZCBzaWduYXR1cmUgKi8KLWludCBjYWNoZWZsdXNoIChsb25nIHN0YXJ0LCBsb25nIGVuZCwgbG9uZyAvKmZsYWdzKi8pIHsKLQlpZiAoZW5kIDwgc3RhcnQpIHsKLQkJLyoKLQkJICogSXQgbG9va3MgbGlrZSB0aGlzIGlzIHJlYWxseSBNSVBTIHN0eWxlIGNhY2hlZmx1c2ggY2FsbAotCQkgKiBzdGFydCA9PiBhZGRyCi0JCSAqIGVuZCA9PiBuYnl0ZXMKLQkJICovCi0jaWZkZWYgREVCVUcKLQkJc3RhdGljIGludCB3YXJuZWQgPSAwOwotCQlpZiAoIXdhcm5lZCkgewotCQkJWExPRygiY2FsbGVkIHdpdGggKHN0YXJ0LGxlbikgaW5zdGVhZCBvZiAoc3RhcnQsZW5kKSIpOwotCQkJd2FybmVkID0gMTsKLQkJfQotI2VuZGlmCi0JCWVuZCArPSBzdGFydDsKLQl9CisvLyBBbmRyb2lkIGRlZmluZXMgYW4gYWx0ZXJuYXRlIGNhY2hlZmx1c2ggcm91dGluZSB3aGljaCBleHBvc2VzIHRoZQorLy8gQVJNIHN5c3RlbSBjYWxsIGludGVyZmFjZToKIAotI2lmICFkZWZpbmVkKEFSQ0hfTUlQU19VU0VfRkxVU0hDQUNIRV9TWVNDQUxMKSAmJiBcCi0JZGVmaW5lZChHQ0NfVkVSU0lPTikgJiYgKEdDQ19WRVJTSU9OID49IDQwMzAwKQorLy8gICBpbnQgY2FjaGVmbHVzaCAobG9uZyBzdGFydCwgbG9uZyBlbmQsIGxvbmcgZmxhZ3MpCiAKLSNpZiAoX19taXBzX2lzYV9yZXYgPj0gMikgJiYgKEdDQ19WRVJTSU9OIDwgNDA0MDMpCi0JLyoKLQkgKiBNb2RpZnkgInN0YXJ0IiBhbmQgImVuZCIgdG8gYXZvaWQgR0NDIDQuMy4wLTQuNC4yIGJ1ZyBpbgotCSAqIG1pcHNfZXhwYW5kX3N5bmNpX2xvb3AgdGhhdCBtYXkgZXhlY3V0ZSBzeW5jaSBvbmUgbW9yZSB0aW1lLgotCSAqICJzdGFydCIgcG9pbnRzIHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBjYWNoZSBsaW5lLgotCSAqICJlbmQiIHBvaW50cyB0byB0aGUgbGFzdCBieXRlIG9mIHRoZSBsaW5lIGJlZm9yZSB0aGUgbGFzdCBjYWNoZSBsaW5lLgotCSAqIEJlY2F1c2Ugc2l6ZSBpcyBhbHdheXMgYSBtdWx0aXBsZSBvZiA0LCB0aGlzIGlzIHNhZmUgdG8gc2V0Ci0JICogImVuZCIgdG8gdGhlIGxhc3QgYnl0ZS4KLQkgKi8KLQl7Ci0JCWludCBsaW5lU2l6ZTsKLQkJYXNtKCJyZGh3ciAlMCwgJDEiIDogIj1yIiAobGluZVNpemUpKTsKLQkJc3RhcnQgPSBzdGFydCAmICgtbGluZVNpemUpOwotCQllbmQgPSAoZW5kICYgKC1saW5lU2l6ZSkpIC0gMTsKLQl9Ci0jZW5kaWYKLQlfX2J1aWx0aW5fX19jbGVhcl9jYWNoZSgoY2hhciAqKXN0YXJ0LCAoY2hhciAqKWVuZCk7Ci0jZWxzZQotCV9mbHVzaF9jYWNoZSgoY2hhciAqKXN0YXJ0LCBlbmQtc3RhcnQsIEJDQUNIRSk7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKKy8vIFRoaXMgaXMgYW4gYXR0ZW1wdCB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IGJldHdlZW4gdGhlIGhpc3RvcmljYWwgTUlQUworLy8gdXNhZ2UgZm9yIHNvZnR3YXJlIHByZXZpb3VzbHkgcG9ydGVkIHRvIE1JUFMgYW5kIEFuZHJvaWQgc3BlY2lmaWMKKy8vIHVzZXMgb2YgY2FjaGVmbHVzaCgpLgorCitpbnQgY2FjaGVmbHVzaChsb25nIHN0YXJ0LCBsb25nIGVuZCwgbG9uZyAvKmZsYWdzKi8pIHsKKyAgaWYgKGVuZCA8IHN0YXJ0KSB7CisgICAgLy8gSXQgbG9va3MgbGlrZSB0aGlzIGlzIHJlYWxseSBhIE1JUFMtc3R5bGUgY2FjaGVmbHVzaCBjYWxsLgorICAgIHN0YXRpYyBib29sIHdhcm5lZCA9IGZhbHNlOworICAgIGlmICghd2FybmVkKSB7CisgICAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19XQVJOLCAibGliYyIsICJjYWNoZWZsdXNoIGNhbGxlZCB3aXRoIChzdGFydCxsZW4pIGluc3RlYWQgb2YgKHN0YXJ0LGVuZCkiKTsKKyAgICAgIHdhcm5lZCA9IHRydWU7CisgICAgfQorICAgIGVuZCArPSBzdGFydDsKKyAgfQorCisgIC8vIFVzZSB0aGUgR0NDIGJ1aWx0aW4uIFRoaXMgd2lsbCBnZW5lcmF0ZSBpbmxpbmUgc3luY2kgaW5zdHJ1Y3Rpb25zIGlmIGF2YWlsYWJsZSwKKyAgLy8gb3IgY2FsbCBfZmx1c2hfY2FjaGUoc3RhcnQsIGxlbiwgQkNBQ0hFKSBkaXJlY3RseS4KKyAgX19idWlsdGluX19fY2xlYXJfY2FjaGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RhcnQpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihlbmQpKTsKKyAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvZnV0ZXhfbWlwcy5TIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL2Z1dGV4X21pcHMuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI0N2I3OS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvZnV0ZXhfbWlwcy5TCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi0jZGVmaW5lIEZVVEVYX1dBSVQgMAotI2RlZmluZSBGVVRFWF9XQUtFIDEKLQotLy8gaW50IF9fZnV0ZXhfd2FpdCh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCB2YWwsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogdGltZW91dCkKLQkudHlwZQlfX2Z1dGV4X3dhaXQsIEBmdW5jdGlvbgotCS5nbG9iYWwJX19mdXRleF93YWl0Ci0JLmFsaWduCTQKLQkuZW50CV9fZnV0ZXhfd2FpdAotX19mdXRleF93YWl0OgotCXN1YnUJJHNwLDQqNgotCXN3CSQwLDIwKCRzcCkJLyogdmFsMyAqLwotCXN3CSQwLDE2KCRzcCkJLyogYWRkcjIgKi8KLQltb3ZlCSRhMywkYTIJCS8qIHRpbWVzcGVjICovCi0JbW92ZQkkYTIsJGExCQkvKiB2YWwgKi8KLQlsaQkkYTEsRlVURVhfV0FJVAkvKiBvcCAqLwotIwltb3ZlCSRhMCwkYTAJCS8qIGZ0eCAqLwotCWxpCSR2MCxfX05SX2Z1dGV4Ci0Jc3lzY2FsbAotCS5zZXQgbm9yZW9yZGVyCi0JYm5legkkYTMsIDFmCQkvKiBDaGVjayBmb3IgZXJyb3IgKi8KLSAgICAgICAgIG5lZwkkdjAJCS8qIE5lZ2F0ZSBlcnJvciBudW1iZXIgaWYgaXQncyB2YWxpZCAqLwotCW1vdmUJJHYwLCQwCQkvKiBPdGhlcndpc2UgcmV0dXJuIDAgKi8KLTE6Ci0JLnNldCByZW9yZGVyCi0JYWRkdQkkc3AsNCo2Ci0JagkkcmEKLQkuZW5kCV9fZnV0ZXhfd2FpdAotCi0vLyBpbnQgX19mdXRleF93YWtlKHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IGNvdW50KQotCS50eXBlCV9fZnV0ZXhfd2FrZSwgQGZ1bmN0aW9uCi0JLmdsb2JsCV9fZnV0ZXhfd2FrZQotCS5hbGlnbgk0Ci0JLmVudAlfX2Z1dGV4X3dha2UKLV9fZnV0ZXhfd2FrZToKLQlzdWJ1CSRzcCw0KjYKLQlzdwkkMCwyMCgkc3ApCS8qIHZhbDMgKi8KLQlzdwkkMCwxNigkc3ApCS8qIGFkZHIyICovCi0JbW92ZQkkYTMsJDAJCS8qIHRpbWVzcGVjICovCi0JbW92ZQkkYTIsJGExCQkvKiB2YWwgKi8KLQlsaQkkYTEsRlVURVhfV0FLRQkvKiBvcCAqLwotIwltb3ZlCSRhMCwkYTAJCS8qIGZ0eCAqLwotCWxpCSR2MCxfX05SX2Z1dGV4Ci0Jc3lzY2FsbAotCS5zZXQgbm9yZW9yZGVyCi0JYm5legkkYTMsIDFmCQkvKiBDaGVjayBmb3IgZXJyb3IgKi8KLSAgICAgICAgIG5lZwkkdjAJCS8qIE5lZ2F0ZSBlcnJvciBudW1iZXIgaWYgaXQncyB2YWxpZCAqLwotCW1vdmUJJHYwLCQwCQkvKiBPdGhlcndpc2UgcmV0dXJuIDAgKi8KLTE6Ci0JLnNldCByZW9yZGVyCi0JYWRkdQkkc3AsNCo2Ci0JagkkcmEKLQkuZW5kCV9fZnV0ZXhfd2FrZQotCi0vLyBpbnQgX19mdXRleF9zeXNjYWxsMyh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCBvcCwgaW50IGNvdW50KQotCS50eXBlCV9fZnV0ZXhfc3lzY2FsbDMsIEBmdW5jdGlvbgotCS5nbG9iYWwJX19mdXRleF9zeXNjYWxsMwotCS5hbGlnbgk0Ci0JLmVudAlfX2Z1dGV4X3N5c2NhbGwzCi1fX2Z1dGV4X3N5c2NhbGwzOgotCXN1YnUJJHNwLDQqNgotCXN3CSQwLDIwKCRzcCkJLyogdmFsMyAqLwotCXN3CSQwLDE2KCRzcCkJLyogYWRkcjIgKi8KLQltb3ZlCSRhMywkMAkJLyogdGltZXNwZWMgKi8KLSMJbW92ZQkkYTIsJGEyCQkvKiB2YWwgKi8KLSMJbGkJJGExLCRhMQkJLyogb3AgKi8KLSMJbW92ZQkkYTAsJGEwCQkvKiBmdHggKi8KLQlsaQkkdjAsX19OUl9mdXRleAotCXN5c2NhbGwKLQkuc2V0IG5vcmVvcmRlcgotCWJuZXoJJGEzLCAxZgkJLyogQ2hlY2sgZm9yIGVycm9yICovCi0gICAgICAgICBuZWcJJHYwCQkvKiBOZWdhdGUgZXJyb3IgbnVtYmVyIGlmIGl0J3MgdmFsaWQgKi8KLQltb3ZlCSR2MCwkMAkJLyogT3RoZXJ3aXNlIHJldHVybiAwICovCi0xOgotCS5zZXQgcmVvcmRlcgotCWFkZHUJJHNwLDQqNgotCWoJJHJhCi0JLmVuZAlfX2Z1dGV4X3N5c2NhbGwzCi0KLS8vIGludCBfX2Z1dGV4X3N5c2NhbGw0KHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IG9wLCBpbnQgdmFsLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqIHRpbWVvdXQpCi0JLnR5cGUJX19mdXRleF9zeXNjYWxsNCwgQGZ1bmN0aW9uCi0JLmdsb2JhbAlfX2Z1dGV4X3N5c2NhbGw0Ci0JLmFsaWduCTQKLQkuZW50CV9fZnV0ZXhfc3lzY2FsbDQKLV9fZnV0ZXhfc3lzY2FsbDQ6Ci0Jc3VidQkkc3AsNCo2Ci0Jc3cJJDAsMjAoJHNwKQkvKiB2YWwzICovCi0Jc3cJJDAsMTYoJHNwKQkvKiBhZGRyMiAqLwotIwltb3ZlCSRhMywkYTMJCS8qIHRpbWVzcGVjICovCi0jCW1vdmUJJGEyLCRhMgkJLyogdmFsICovCi0jCWxpCSRhMSwkYTEJCS8qIG9wICovCi0jCW1vdmUJJGEwLCRhMAkJLyogZnR4ICovCi0JbGkJJHYwLF9fTlJfZnV0ZXgKLQlzeXNjYWxsCi0JLnNldCBub3Jlb3JkZXIKLQlibmV6CSRhMywgMWYJCS8qIENoZWNrIGZvciBlcnJvciAqLwotICAgICAgICAgbmVnCSR2MAkJLyogTmVnYXRlIGVycm9yIG51bWJlciBpZiBpdCdzIHZhbGlkICovCi0JbW92ZQkkdjAsJDAJCS8qIE90aGVyd2lzZSByZXR1cm4gMCAqLwotMToKLQkuc2V0IHJlb3JkZXIKLQlhZGR1CSRzcCw0KjYKLQlqCSRyYQotCS5lbmQJX19mdXRleF9zeXNjYWxsNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL21lbWNtcDE2LlMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvbWVtY21wMTYuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJiMjU0NC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvbWVtY21wMTYuUworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQkudGV4dAotCi0vKgotICogdTQgX19tZW1jbXAxNihjb25zdCB1MiogczAsIGNvbnN0IHUyKiBzMSwgc2l6ZV90IGNvdW50KTsKLSAqLwotCS50eXBlCV9fbWVtY21wMTYsIEBmdW5jdGlvbgotCS5nbG9iYWwJX19tZW1jbXAxNgotCS5hbGlnbgk0Ci0JLmVudCBfX21lbWNtcDE2Ci1fX21lbWNtcDE2OgotCWxpCSR0MCwwCi0JbGkJJHQxLDAKLQliZXF6CSRhMixkb25lCQkvKiAwIGxlbmd0aCBzdHJpbmcgKi8gCi0JYmVxCSRhMCwkYTEsZG9uZQkJLyogc3RyaW5ncyBhcmUgaWRlbnRpY2FsICovCi0KLQkvKiBVbm9wdGltaXNlZC4uLiAqLwotMToJbGh1CSR0MCwwKCRhMCkKLQlsaHUJJHQxLDAoJGExKQotCWFkZHUJJGExLDIKLQlibmUJJHQwLCR0MSxkb25lCi0JYWRkdQkkYTAsMgotCXN1YnUJJGEyLDEKLQlibmV6CSRhMiwxYgotCi1kb25lOgotCXN1YnUJJHYwLCR0MCwkdDEKLQlqCSRyYQotICAgICAgICAuZW5kIF9fbWVtY21wMTYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9tZW1tb3ZlLmMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvbWVtbW92ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjQ1MjJiLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9tZW1tb3ZlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RyaW5ncy5oPgotCi12b2lkICptZW1tb3ZlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikKLXsKLSAgY29uc3QgY2hhciAqcCA9IHNyYzsKLSAgY2hhciAqcSA9IGRzdDsKLSAgLyogV2UgY2FuIHVzZSB0aGUgb3B0aW1pemVkIG1lbWNweSBpZiB0aGUgZGVzdGluYXRpb24gaXMgY29tcGxldGVseSBiZWxvdyB0aGUKLSAgICogc291cmNlIChpLmUuIHEgKyBuIDw9IHApLCBvciBpZiBpdCBpcyBjb21wbGV0ZWx5IG92ZXIgaXQgKGkuZS4gcSA+PSBwK24pLgotICAgKi8KLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QoKHEgKyBuIDwgcCkgfHwgKHEgPj0gcCArIG4pLCAxKSkgewotICAgIHJldHVybiBtZW1jcHkoZHN0LCBzcmMsIG4pOwotICB9IGVsc2UgewotICAgIGJjb3B5KHNyYywgZHN0LCBuKTsKLSAgICByZXR1cm4gZHN0OwotICB9Ci19CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvc2V0am1wLlMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvc2V0am1wLlMKaW5kZXggN2MyMTE5NS4uMzE3ODZiZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL3NldGptcC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9zZXRqbXAuUwpAQCAtMjksNyArMjksNyBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KICNpbmNsdWRlIDxtYWNoaW5lL3JlZ251bS5oPgogI2luY2x1ZGUgPG1hY2hpbmUvc2lnbmFsLmg+CiAKQEAgLTQ1LDE3ICs0NSw2IEBACiBHUE9GRj0gRlJBTUVTWi0yKlJFR1NaCiBSQU9GRj0gRlJBTUVTWi0xKlJFR1NaCiAKLSNkZWZpbmUgRlBSRUc2NF9TKEZQUiwgT0ZGLCBCQVNFKSAgICAgICBcCi0gICAgICAgIHN3YzEgICAgRlBSLCBPRkYoQkFTRSkgIDsgICAgICAgXAotICAgICAgICBtZmhjMSAgIHQwLCBGUFIgICAgICAgICA7ICAgICAgIFwKLSAgICAgICAgc3cgICAgICB0MCwgT0ZGKzQoQkFTRSkgOwotICAgICAgICAKLSNkZWZpbmUgRlBSRUc2NF9MKEZQUiwgT0ZGLCBCQVNFKSAgICAgICBcCi0gICAgICAgIGx3ICAgICAgdDAsIE9GRis0KEJBU0UpIDsgICAgICAgXAotICAgICAgICBsdyAgICAgIHQxLCBPRkYoQkFTRSkgICA7ICAgICAgIFwKLSAgICAgICAgbXRjMSAgICB0MSwgRlBSICAgICAgICAgOyAgICAgICBcCi0gICAgICAgIG10aGMxICAgdDAsIEZQUiAgICAgICAgIDsgICAgICAgXAotICAgICAgICAKIE5PTl9MRUFGKHNldGptcCwgRlJBTUVTWiwgcmEpCiAJLm1hc2sJMHg4MDAwMDAwMCwgUkFPRkYKIAlQVFJfU1VCVSBzcCwgRlJBTUVTWgkJCSMgYWxsb2NhdGUgc3RhY2sgZnJhbWUKQEAgLTk4LDMyICs4NywxOSBAQAogCWxpCXYwLCAxCQkJCSMgYmUgbmljZSBpZiB3ZSBjb3VsZCB0ZWxsCiAJUkVHX1MJdjAsIFNDX0ZQVVNFRChhMCkJCSMgc2NfZnB1c2VkID0gMQogCWNmYzEJdjAsICQzMQorCXMuZAkkZjIwLCBTQ19GUFJFR1MrKChGMjAtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyMiwgU0NfRlBSRUdTKygoRjIyLUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjI2LCBTQ19GUFJFR1MrKChGMjYtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyOCwgU0NfRlBSRUdTKygoRjI4LUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApKGEwKQogI2lmIF9NSVBTX0ZQU0VUID09IDMyCi0gICAgICAgIEZQUkVHNjRfUygkZjIwLCBTQ19GUFJFR1MrKChGMjAtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjIxLCBTQ19GUFJFR1MrKChGMjEtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjIyLCBTQ19GUFJFR1MrKChGMjItRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjIzLCBTQ19GUFJFR1MrKChGMjMtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjI0LCBTQ19GUFJFR1MrKChGMjQtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjI1LCBTQ19GUFJFR1MrKChGMjUtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjI2LCBTQ19GUFJFR1MrKChGMjYtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjI3LCBTQ19GUFJFR1MrKChGMjctRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjI4LCBTQ19GUFJFR1MrKChGMjgtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjI5LCBTQ19GUFJFR1MrKChGMjktRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjMwLCBTQ19GUFJFR1MrKChGMzAtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjMxLCBTQ19GUFJFR1MrKChGMzEtRjApKlJFR1NaX0ZQKSwgYTApCi0jZWxzZQotICAgICAgICBzd2MxICAgICRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjIsIFNDX0ZQUkVHUysoKEYyMi1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjgsIFNDX0ZQUkVHUysoKEYyOC1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjIxLCBTQ19GUFJFR1MrKChGMjEtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyMywgU0NfRlBSRUdTKygoRjIzLUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjI3LCBTQ19GUFJFR1MrKChGMjctRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyOSwgU0NfRlBSRUdTKygoRjI5LUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApKGEwKQogI2VuZGlmCiAJUkVHX1MJdjAsIFNDX0ZQUkVHUysoKEZTUi1GMCkqUkVHU1opKGEwKQogI2VuZGlmIC8qICFTT0ZURkxPQVQgKi8KQEAgLTE1NCw3ICsxMzAsNyBAQAogCWx3CWEwLCBBME9GRihzcCkKIAlsdwlhMSwgQTFPRkYoc3ApCiAKLQkuc2V0CW5vcmVvcmRlcgkKKwkuc2V0CW5vcmVvcmRlcgogCVJFR19MCXYwLCBTQ19SRUdTK1pFUk8qUkVHU1ooYTApCiAJYm5lCXYwLCAweEFDRURCQURFLCBib3RjaAkJIyBqdW1wIGlmIGVycm9yCiAJUkVHX0wJcmEsIFNDX1BDKGEwKQpAQCAtMTY5LDM2ICsxNDUsMjMgQEAKIAlSRUdfTAlzOCwgU0NfUkVHUytTOCpSRUdTWihhMCkKIAlSRUdfTAlncCwgU0NfUkVHUytHUCpSRUdTWihhMCkKIAlSRUdfTAlzcCwgU0NfUkVHUytTUCpSRUdTWihhMCkKLQkKKwogI2lmICFkZWZpbmVkKFNPRlRGTE9BVCkKLQlSRUdfTAl2MCwgU0NfRlBSRUdTKygoRlNSLUYwKSpSRUdTWikoYTApCQorCVJFR19MCXYwLCBTQ19GUFJFR1MrKChGU1ItRjApKlJFR1NaKShhMCkKIAljdGMxCXYwLCAkMzEKKwlsLmQJJGYyMCwgU0NfRlBSRUdTKygoRjIwLUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjIsIFNDX0ZQUkVHUysoKEYyMi1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjI0LCBTQ19GUFJFR1MrKChGMjQtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyNiwgU0NfRlBSRUdTKygoRjI2LUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjgsIFNDX0ZQUkVHUysoKEYyOC1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjMwLCBTQ19GUFJFR1MrKChGMzAtRjApKlJFR1NaX0ZQKShhMCkKICNpZiBfTUlQU19GUFNFVCA9PSAzMgotICAgICAgICBGUFJFRzY0X0woJGYyMCwgU0NfRlBSRUdTKygoRjIwLUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X0woJGYyMSwgU0NfRlBSRUdTKygoRjIxLUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X0woJGYyMiwgU0NfRlBSRUdTKygoRjIyLUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X0woJGYyMywgU0NfRlBSRUdTKygoRjIzLUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X0woJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X0woJGYyNSwgU0NfRlBSRUdTKygoRjI1LUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X0woJGYyNiwgU0NfRlBSRUdTKygoRjI2LUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X0woJGYyNywgU0NfRlBSRUdTKygoRjI3LUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X0woJGYyOCwgU0NfRlBSRUdTKygoRjI4LUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X0woJGYyOSwgU0NfRlBSRUdTKygoRjI5LUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X0woJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X0woJGYzMSwgU0NfRlBSRUdTKygoRjMxLUYwKSpSRUdTWl9GUCksIGEwKQotI2Vsc2UKLSAgICAgICAgbHdjMSAgICAkZjIwLCBTQ19GUFJFR1MrKChGMjAtRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgbHdjMSAgICAkZjIxLCBTQ19GUFJFR1MrKChGMjEtRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgbHdjMSAgICAkZjIyLCBTQ19GUFJFR1MrKChGMjItRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgbHdjMSAgICAkZjIzLCBTQ19GUFJFR1MrKChGMjMtRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgbHdjMSAgICAkZjI0LCBTQ19GUFJFR1MrKChGMjQtRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgbHdjMSAgICAkZjI1LCBTQ19GUFJFR1MrKChGMjUtRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgbHdjMSAgICAkZjI2LCBTQ19GUFJFR1MrKChGMjYtRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgbHdjMSAgICAkZjI3LCBTQ19GUFJFR1MrKChGMjctRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgbHdjMSAgICAkZjI4LCBTQ19GUFJFR1MrKChGMjgtRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgbHdjMSAgICAkZjI5LCBTQ19GUFJFR1MrKChGMjktRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgbHdjMSAgICAkZjMwLCBTQ19GUFJFR1MrKChGMzAtRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgbHdjMSAgICAkZjMxLCBTQ19GUFJFR1MrKChGMzEtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyMSwgU0NfRlBSRUdTKygoRjIxLUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjI1LCBTQ19GUFJFR1MrKChGMjUtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyNywgU0NfRlBSRUdTKygoRjI3LUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjMxLCBTQ19GUFJFR1MrKChGMzEtRjApKlJFR1NaX0ZQKShhMCkKICNlbmRpZgogI2VuZGlmIC8qICFTT0ZURkxPQVQgKi8KIAlibmUJYTEsIHplcm8sIDFmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvc2lnc2V0am1wLlMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvc2lnc2V0am1wLlMKaW5kZXggYjA1NDU0Yy4uOWQyZTVlYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL3NpZ3NldGptcC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9zaWdzZXRqbXAuUwpAQCAtMzEsNyArMzEsNyBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9yZWdudW0uaD4KICNpbmNsdWRlIDxtYWNoaW5lL3NldGptcC5oPgogCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvc3lzY2FsbC5TIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL3N5c2NhbGwuUwppbmRleCBhZjViY2M5Li41ZmVkMGFjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvc3lzY2FsbC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9zeXNjYWxsLlMKQEAgLTI2LDExICsyNiw3IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHN5c2NhbGwKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc3lzY2FsbAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAvKgogICogVGhlIGNhbGxlciBpcyBvbmx5IHJlcXVpcmVkIHRvIGFsbG9jYXRlIDE2IGJ5dGVzIG9mIHN0YWNrIGZvciBhMC1hMy4KQEAgLTM4LDI4ICszNCwyOCBAQAogICovCiAjZGVmaW5lIFNUQUNLU0laRSAyKjQKIAotc3lzY2FsbDoKK0VOVFJZKHN5c2NhbGwpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIG1vdmUgICAgJHYwLCAkYTAKLSAgICBtb3ZlICAgICRhMCwgJGExCi0gICAgbW92ZSAgICAkYTEsICRhMgotICAgIG1vdmUgICAgJGEyLCAkYTMKLSAgICBsdyAgICAgICRhMywgMTYoJHNwKQotICAgIGx3ICAgICAgJHQwLCAyMCgkc3ApCi0gICAgbHcgICAgICAkdDEsIDI0KCRzcCkKLSAgICBzdWJ1ICAgICRzcCwgU1RBQ0tTSVpFCi0gICAgc3cgICAgICAkdDAsIDE2KCRzcCkKLSAgICBzdyAgICAgICR0MSwgMjAoJHNwKQorICAgIC5jcGxvYWQgdDkKKyAgICBtb3ZlICAgIHYwLCBhMAorICAgIG1vdmUgICAgYTAsIGExCisgICAgbW92ZSAgICBhMSwgYTIKKyAgICBtb3ZlICAgIGEyLCBhMworICAgIGx3ICAgICAgYTMsIDE2KHNwKQorICAgIGx3ICAgICAgdDAsIDIwKHNwKQorICAgIGx3ICAgICAgdDEsIDI0KHNwKQorICAgIHN1YnUgICAgc3AsIFNUQUNLU0laRQorICAgIHN3ICAgICAgdDAsIDE2KHNwKQorICAgIHN3ICAgICAgdDEsIDIwKHNwKQogICAgIHN5c2NhbGwKLSAgICBhZGR1ICAgICRzcCwgU1RBQ0tTSVpFCi0gICAgYm5leiAgICAkYTMsIDFmCi0gICAgbW92ZSAgICAkYTAsICR2MAotICAgIGogICAgICAgJHJhCisgICAgYWRkdSAgICBzcCwgU1RBQ0tTSVpFCisgICAgYm5leiAgICBhMywgMWYKKyAgICBtb3ZlICAgIGEwLCB2MAorICAgIGogICAgICAgcmEKICAgICBub3AKIDE6Ci0gICAgbGEgICAgICAkdDksX19zZXRfZXJybm8KLSAgICBqICAgICAgICR0OQorICAgIGxhICAgICAgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqICAgICAgIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzeXNjYWxsCitFTkQoc3lzY2FsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy92Zm9yay5TIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL3Zmb3JrLlMKaW5kZXggNDE0Y2FhZi4uMTg0OTYyNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL3Zmb3JrLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL3Zmb3JrLlMKQEAgLTI2LDM5ICsyNiwzMyBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAvLyBUT0RPOiBtaXBzJyB1YXBpIHNpZ25hbC5oIGlzIG1pc3NpbmcgI2lmbmRlZiBfX0FTU0VNQkxZX18uCiAvLyAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgogI2RlZmluZSBTSUdDSExEIDE4CiAKLQkudGV4dAotCi0JLnR5cGUJdmZvcmssIEBmdW5jdGlvbgotCS5nbG9iYWwJdmZvcmsKLQkuYWxpZ24JNAotCS5lbnQJdmZvcmsKLXZmb3JrOgorRU5UUlkodmZvcmspCiAJLnNldAlub3Jlb3JkZXIKLQkuY3Bsb2FkCSR0OQorCS5jcGxvYWQJdDkKIAotCWxpCSRhMCwgKENMT05FX1ZNIHwgQ0xPTkVfVkZPUksgfCBTSUdDSExEKQotCWxpCSRhMSwgMAotCWxpCSRhMiwgMAotCWxpCSRhMywgMAotCXN1YnUJJHNwLCA4Ci0Jc3cJJDAsIDE2KCRzcCkKLQlsaQkkdjAsIF9fTlJfY2xvbmUKKwlsaQlhMCwgKENMT05FX1ZNIHwgQ0xPTkVfVkZPUksgfCBTSUdDSExEKQorCWxpCWExLCAwCisJbGkJYTIsIDAKKwlsaQlhMywgMAorCXN1YnUJc3AsIDgKKwlzdwkkMCwgMTYoc3ApCisJbGkJdjAsIF9fTlJfY2xvbmUKIAlzeXNjYWxsCi0JYWRkdQkkc3AsIDgKLQlibmV6CSRhMywgMWYKLQkgbW92ZQkkYTAsICR2MAorCWFkZHUJc3AsIDgKKwlibmV6CWEzLCAxZgorCSBtb3ZlCWEwLCB2MAogCi0JagkkcmEKKwlqCXJhCiAJIG5vcAogMToKLQlsYQkkdDksIF9fc2V0X2Vycm5vCi0JagkkdDkKKwlsYQl0OSwgX19zZXRfZXJybm9faW50ZXJuYWwKKwlqCXQ5CiAJIG5vcAotCS5lbmQJdmZvcmsKK0VORCh2Zm9yaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaCBiL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVmNzllZi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IF90eXBlcy5oLHYgMS41IDIwMDgvMDcvMjEgMjA6NTA6NTQgbWFydHluYXMgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglAKCMpdHlwZXMuaAk4LjMgKEJlcmtlbGV5KSAxLzUvOTQKLSAqCUAoIylhbnNpLmgJOC4yIChCZXJrZWxleSkgMS80Lzk0Ci0gKi8KLQotI2lmbmRlZiBfTUlQUzY0X19UWVBFU19IXwotI2RlZmluZSBfTUlQUzY0X19UWVBFU19IXwotCi0vKgotICogIFdlIG5lZWQgdG8gaGFuZGxlIHRoZSB2YXJpb3VzIElTQSBsZXZlbHMgZm9yIHNpemVzLgotICovCi0jZGVmaW5lCV9NSVBTX0lTQV9NSVBTMQkxCS8qIFIyMDAwL1IzMDAwICovCi0jZGVmaW5lCV9NSVBTX0lTQV9NSVBTMgkyCS8qIFI0MDAwL1I2MDAwICovCi0jZGVmaW5lCV9NSVBTX0lTQV9NSVBTMwkzCS8qIFI0MDAwICovCi0jZGVmaW5lCV9NSVBTX0lTQV9NSVBTNAk0CS8qIFRGUCAoUjF4MDAwKSAqLwotCi0vKiA3LjE4LjEuMSBFeGFjdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCi10eXBlZGVmCV9fc2lnbmVkIGNoYXIJCV9faW50OF90OwotdHlwZWRlZgl1bnNpZ25lZCBjaGFyCQlfX3VpbnQ4X3Q7Ci10eXBlZGVmCXNob3J0CQkJX19pbnQxNl90OwotdHlwZWRlZgl1bnNpZ25lZCBzaG9ydAkJX191aW50MTZfdDsKLXR5cGVkZWYJaW50CQkJX19pbnQzMl90OwotdHlwZWRlZgl1bnNpZ25lZCBpbnQJCV9fdWludDMyX3Q7Ci0vKiBMT05HTE9ORyAqLwotdHlwZWRlZglsb25nIGxvbmcJCV9faW50NjRfdDsKLS8qIExPTkdMT05HICovCi10eXBlZGVmCXVuc2lnbmVkIGxvbmcgbG9uZwlfX3VpbnQ2NF90OwotCi0vKiA3LjE4LjEuMiBNaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMgKi8KLXR5cGVkZWYJX19pbnQ4X3QJCV9faW50X2xlYXN0OF90OwotdHlwZWRlZglfX3VpbnQ4X3QJCV9fdWludF9sZWFzdDhfdDsKLXR5cGVkZWYJX19pbnQxNl90CQlfX2ludF9sZWFzdDE2X3Q7Ci10eXBlZGVmCV9fdWludDE2X3QJCV9fdWludF9sZWFzdDE2X3Q7Ci10eXBlZGVmCV9faW50MzJfdAkJX19pbnRfbGVhc3QzMl90OwotdHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfbGVhc3QzMl90OwotdHlwZWRlZglfX2ludDY0X3QJCV9faW50X2xlYXN0NjRfdDsKLXR5cGVkZWYJX191aW50NjRfdAkJX191aW50X2xlYXN0NjRfdDsKLQotLyogNy4xOC4xLjMgRmFzdGVzdCBtaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMgKi8KLXR5cGVkZWYJX19pbnQzMl90CQlfX2ludF9mYXN0OF90OwotdHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfZmFzdDhfdDsKLXR5cGVkZWYJX19pbnQzMl90CQlfX2ludF9mYXN0MTZfdDsKLXR5cGVkZWYJX191aW50MzJfdAkJX191aW50X2Zhc3QxNl90OwotdHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3QzMl90OwotdHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfZmFzdDMyX3Q7Ci10eXBlZGVmCV9faW50NjRfdAkJX19pbnRfZmFzdDY0X3Q7Ci10eXBlZGVmCV9fdWludDY0X3QJCV9fdWludF9mYXN0NjRfdDsKLQotLyogNy4xOC4xLjQgSW50ZWdlciB0eXBlcyBjYXBhYmxlIG9mIGhvbGRpbmcgb2JqZWN0IHBvaW50ZXJzICovCi10eXBlZGVmCWxvbmcJCQlfX2ludHB0cl90OwotdHlwZWRlZgl1bnNpZ25lZCBsb25nCQlfX3VpbnRwdHJfdDsKLQotLyogNy4xOC4xLjUgR3JlYXRlc3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLwotdHlwZWRlZglfX2ludDY0X3QJCV9faW50bWF4X3Q7Ci10eXBlZGVmCV9fdWludDY0X3QJCV9fdWludG1heF90OwotCi0vKiBSZWdpc3RlciBzaXplICovCi0jaWYgKF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzMgfHwgX01JUFNfSVNBID09IF9NSVBTX0lTQV9NSVBTNCkKLXR5cGVkZWYgX19pbnQ2NF90CQlfX3JlZ2lzdGVyX3Q7Ci10eXBlZGVmIF9faW50NjRfdAkJZl9yZWdpc3Rlcl90OwkvKiBYWFggKi8KLSNlbHNlCi10eXBlZGVmIF9faW50MzJfdAkJX19yZWdpc3Rlcl90OwotdHlwZWRlZiBfX2ludDMyX3QJCWZfcmVnaXN0ZXJfdDsJLyogWFhYICovCi0jZW5kaWYKLQotLyogVk0gc3lzdGVtIHR5cGVzICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fdmFkZHJfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZwkJX19wYWRkcl90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3ZzaXplX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fcHNpemVfdDsKLQotLyogU3RhbmRhcmQgc3lzdGVtIHR5cGVzICovCi10eXBlZGVmIGludAkJCV9fY2xvY2tfdDsKLXR5cGVkZWYgaW50CQkJX19jbG9ja2lkX3Q7Ci10eXBlZGVmIGRvdWJsZQkJCV9fZG91YmxlX3Q7Ci10eXBlZGVmIGZsb2F0CQkJX19mbG9hdF90OwotdHlwZWRlZiBsb25nIGxvbmcJCV9fb2ZmX3Q7Ci10eXBlZGVmIGxvbmcJCQlfX3B0cmRpZmZfdDsKLXR5cGVkZWYJaW50CQkJX190aW1lX3Q7Ci10eXBlZGVmIGludAkJCV9fdGltZXJfdDsKLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCi10eXBlZGVmCV9fYnVpbHRpbl92YV9saXN0CV9fdmFfbGlzdDsKLSNlbHNlCi10eXBlZGVmCWNoYXIgKgkJCV9fdmFfbGlzdDsKLSNlbmRpZgotCi0vKiBXaWRlIGNoYXJhY3RlciBzdXBwb3J0IHR5cGVzICovCi0jaWZuZGVmIF9fY3BsdXNwbHVzCi10eXBlZGVmCWludAkJCV9fd2NoYXJfdDsKLSNlbmRpZgotdHlwZWRlZiBpbnQJCQlfX3dpbnRfdDsKLXR5cGVkZWYJaW50CQkJX19ydW5lX3Q7Ci10eXBlZGVmCXZvaWQgKgkJCV9fd2N0cmFuc190OwotdHlwZWRlZgl2b2lkICoJCQlfX3djdHlwZV90OwotCi0jaWYgZGVmaW5lZChfS0VSTkVMKQotdHlwZWRlZiBzdHJ1Y3QgbGFiZWxfdCB7Ci0JX19yZWdpc3Rlcl90IHZhbFsxNF07Ci19IGxhYmVsX3Q7Ci0jZW5kaWYKLQotLyogWFhYIGNoZWNrIHdoeSB0aGlzIHN0aWxsIGhhcyB0byBiZSBkZWZpbmVkLiBwbWFwLmMgaXNzdWU/ICovCi0jZGVmaW5lIF9fU1dBUF9CUk9LRU4KLQotLyogRmVhdHVyZSB0ZXN0IG1hY3JvcyAqLwotI2RlZmluZSBfX0hBVkVfVElNRUNPVU5URVIKLQotI2VuZGlmCS8qIF9NSVBTNjRfX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvYXNtLmggYi9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvYXNtLmgKaW5kZXggNDNkYmMwOS4uNWVhY2RlMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCisrKyBiL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9hc20uaApAQCAtMjgsMjUgKzI4LDI0IEBACiAjaWZuZGVmIF9NSVBTNjRfQVNNX0gKICNkZWZpbmUgX01JUFM2NF9BU01fSAogCi0jaW5jbHVkZSA8bWFjaGluZS9yZWdkZWYuaD4KLQotI2lmZGVmIE5FRURfT0xEX1JNN0tGSVgKLSNkZWZpbmUgSVRMQk5PUEZJWCAgICAgIG5vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcDsKLSNlbHNlCi0jZGVmaW5lIElUTEJOT1BGSVggICAgICBub3A7bm9wO25vcDtub3AKKyNpZm5kZWYgX0FMSUdOX1RFWFQKKyMgZGVmaW5lIF9BTElHTl9URVhUIC5hbGlnbiA0CiAjZW5kaWYKIAorI3VuZGVmIF9fYmlvbmljX2FzbV9jdXN0b21fZW50cnkKKyN1bmRlZiBfX2Jpb25pY19hc21fY3VzdG9tX2VuZAorI2RlZmluZSBfX2Jpb25pY19hc21fY3VzdG9tX2VudHJ5KGYpIC5lbnQgZgorI2RlZmluZSBfX2Jpb25pY19hc21fY3VzdG9tX2VuZChmKSAuZW5kIGYKKworI2luY2x1ZGUgPG1hY2hpbmUvcmVnZGVmLmg+CisKICNkZWZpbmUJX01JUFNfSVNBX01JUFMxCTEJLyogUjIwMDAvUjMwMDAgKi8KICNkZWZpbmUJX01JUFNfSVNBX01JUFMyCTIJLyogUjQwMDAvUjYwMDAgKi8KICNkZWZpbmUJX01JUFNfSVNBX01JUFMzCTMJLyogUjQwMDAgKi8KICNkZWZpbmUJX01JUFNfSVNBX01JUFM0CTQJLyogVEZQIChSMXgwMDApICovCi0jaWZkZWYgX19saW51eF9fCiAjZGVmaW5lCV9NSVBTX0lTQV9NSVBTNSA1CiAjZGVmaW5lCV9NSVBTX0lTQV9NSVBTMzIgNgogI2RlZmluZQlfTUlQU19JU0FfTUlQUzY0IDcKLSNlbHNlCi0jZGVmaW5lCV9NSVBTX0lTQV9NSVBTMzIgMzIJLyogTUlQUzMyICovCi0jZW5kaWYKIAogI2lmICFkZWZpbmVkKEFCSUNBTExTKSAmJiAhZGVmaW5lZChfTk9fQUJJQ0FMTFMpCiAjZGVmaW5lCUFCSUNBTExTCS5hYmljYWxscwpAQCAtNTYsOCArNTUsNiBAQAogCUFCSUNBTExTCiAjZW5kaWYKIAotI2RlZmluZSBfQ19MQUJFTCh4KSB4CQkvKiBYWFggT2Jzb2xldGUgYnV0IGtlZXAgZm9yIGEgd2hpbGUgKi8KLQogI2lmICFkZWZpbmVkKF9fTUlQU0VMX18pICYmICFkZWZpbmVkKF9fTUlQU0VCX18pCiAjZXJyb3IgIl9fTUlQU0VMX18gb3IgX19NSVBTRUJfXyBtdXN0IGJlIGRlZmluZWQiCiAjZW5kaWYKQEAgLTkwLDE1ICs4Nyw2IEBACiAgKi8KICNpZiBkZWZpbmVkKEFCSUNBTExTKSAmJiAhZGVmaW5lZChfS0VSTkVMKSAmJiAhZGVmaW5lZChfU1RBTkRBTE9ORSkKIAotI2lmbmRlZiBfTUlQU19TSU0KLSNkZWZpbmUgX01JUFNfU0lNIDEKLSNkZWZpbmUgX0FCSU8zMgkxCi0jZW5kaWYKLSNpZm5kZWYgX01JUFNfSVNBCi0jZGVmaW5lIF9NSVBTX0lTQSAyCi0jZGVmaW5lIF9NSVBTX0lTQV9NSVBTMiAyCi0jZW5kaWYKLQogI2lmIChfTUlQU19TSU0gPT0gX0FCSU8zMikgfHwgKF9NSVBTX1NJTSA9PSBfQUJJMzIpCiAjZGVmaW5lIE5BUkdTQVZFCTQKIApAQCAtMTUxLDcgKzEzOSw3IEBACiAjZGVmaW5lCUNGX1JBX09GRlMJMjAJLyogQ2FsbCByYSBzYXZlIG9mZnNldCAqLwogI2VuZGlmCiAKLSNpZiAoX01JUFNfSVNBID09IF9NSVBTX0lTQV9NSVBTMyB8fCBfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFM0KQorI2lmIChfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFMzIHx8IF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzQgfHwgX01JUFNfSVNBID09IF9NSVBTX0lTQV9NSVBTNjQpCiAjZGVmaW5lIFJFR1NaCQk4CS8qIDY0IGJpdCBtb2RlIHJlZ2lzdGVyIHNpemUgKi8KICNkZWZpbmUgTE9HUkVHU1oJMwkvKiBsb2cgcnNpemUgKi8KICNkZWZpbmUJUkVHX1MJc2QKQEAgLTE5MCwyOCArMTc4LDYgQEAKICNlbmRpZgogCiAvKgotICogRGVmaW5lIC1wZyBwcm9maWxlIGVudHJ5IGNvZGUuCi0gKi8KLSNpZiBkZWZpbmVkKFhHUFJPRikgfHwgZGVmaW5lZChYUFJPRikKLSNkZWZpbmUJTUNPVU5UCQkJXAotCVBUUl9TVUJVIHNwLCBzcCwgMzI7CVwKLQlTQVZFX0dQKDE2KTsJCVwKLQlzdwlyYSwgMjgoc3ApOwlcCi0Jc3cJZ3AsIDI0KHNwKTsJXAotCS5zZXQJbm9hdDsJCVwKLQkuc2V0CW5vcmVvcmRlcjsJXAotCW1vdmUJQVQsIHJhOwkJXAotCWphbAlfbWNvdW50OwlcCi0JUFRSX1NVQlUgc3AsIHNwLCA4OwlcCi0JbHcJcmEsIDI4KHNwKTsJXAotCVBUUl9BRERVIHNwLCBzcCwgMzI7CVwKLQkuc2V0IHJlb3JkZXI7CQlcCi0JLnNldAlhdDsKLSNlbHNlCi0jZGVmaW5lCU1DT1VOVAotI2VuZGlmCi0KLS8qCiAgKiBMRUFGKHgsIGZzaXplKQogICoKICAqCURlY2xhcmUgYSBsZWFmIHJvdXRpbmUuCkBAIC0yMjEsMjYgKzE4Nyw5IEBACiAJLmdsb2JsIHg7CQlcCiAJLmVudCB4LCAwOwkJXAogeDogOwkJCQlcCisJLmNmaV9zdGFydHByb2M7IFwKIAkuZnJhbWUgc3AsIGZzaXplLCByYTsJXAogCVNFVFVQX0dQCQlcCi0JTUNPVU5UCi0KLSNkZWZpbmUJQUxFQUYoeCkJCVwKLQkuZ2xvYmwJeDsJCVwKLXg6Ci0KLS8qCi0gKiBOTEVBRih4KQotICoKLSAqCURlY2xhcmUgYSBub24tcHJvZmlsZWQgbGVhZiByb3V0aW5lLgotICovCi0jZGVmaW5lIE5MRUFGKHgsIGZzaXplKQkJXAotCS5hbGlnbgkzOwkJXAotCS5nbG9ibCB4OwkJXAotCS5lbnQgeCwgMDsJCVwKLXg6IDsJCQkJXAotCS5mcmFtZSBzcCwgZnNpemUsIHJhOwlcCi0JU0VUVVBfR1AKIAogLyoKICAqIE5PTl9MRUFGKHgpCkBAIC0yNTIsNTQgKzIwMSw4IEBACiAJLmdsb2JsIHg7CQlcCiAJLmVudCB4LCAwOwkJXAogeDogOwkJCQlcCisJLmNmaV9zdGFydHByb2M7IFwKIAkuZnJhbWUgc3AsIGZzaXplLCByZXRwYzsgXAogCVNFVFVQX0dQCQlcCi0JTUNPVU5UCi0KLS8qCi0gKiBOTk9OX0xFQUYoeCkKLSAqCi0gKglEZWNsYXJlIGEgbm9uLXByb2ZpbGVkIG5vbi1sZWFmIHJvdXRpbmUKLSAqCShhIHJvdXRpbmUgdGhhdCBtYWtlcyBvdGhlciBDIGNhbGxzKS4KLSAqLwotI2RlZmluZSBOTk9OX0xFQUYoeCwgZnNpemUsIHJldHBjKSBcCi0JLmFsaWduCTM7CQlcCi0JLmdsb2JsIHg7CQlcCi0JLmVudCB4LCAwOwkJXAoteDogOwkJCQlcCi0JLmZyYW1lIHNwLCBmc2l6ZSwgcmV0cGMJXAotCVNFVFVQX0dQCi0KLS8qCi0gKiBFTkQoeCkKLSAqCi0gKglNYXJrIGVuZCBvZiBhIHByb2NlZHVyZS4KLSAqLwotI2RlZmluZSBFTkQoeCkgXAotCS5lbmQgeAotCi0vKgotICogTWFjcm9zIHRvIHBhbmljIGFuZCBwcmludGYgZnJvbSBhc3NlbWJseSBsYW5ndWFnZS4KLSAqLwotI2RlZmluZSBQQU5JQyhtc2cpIFwKLQlMQQlhMCwgOWY7IFwKLQlqYWwJcGFuaWM7CVwKLQlub3AJOwlcCi0JTVNHKG1zZykKLQotI2RlZmluZQlQUklOVEYobXNnKSBcCi0JbGEJYTAsIDlmOyBcCi0JamFsCXByaW50ZjsgXAotCW5vcAk7CVwKLQlNU0cobXNnKQotCi0jZGVmaW5lCU1TRyhtc2cpIFwKLQkucmRhdGE7IFwKLTk6CS5hc2NpaXoJbXNnOyBcCi0JLnRleHQKLQotI2RlZmluZSBBU01TVFIoc3RyKSBcCi0JLmFzY2lpeiBzdHI7IFwKLQkuYWxpZ24JMwogCiAjZW5kaWYgLyogIV9NSVBTX0FTTV9IICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvaWVlZS5oIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2llZWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIwYTc3Yi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvaWVlZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBpZWVlLmgsdiAxLjQgMjAxMC8wMS8yMyAxOToxMToyMSBtaW9kIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSB0aGUgQ29tcHV0ZXIgU3lzdGVtcyBFbmdpbmVlcmluZyBncm91cAotICogYXQgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeSB1bmRlciBEQVJQQSBjb250cmFjdCBCRyA5MS02NiBhbmQKLSAqIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5LgotICoKLSAqIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICoJQ2FsaWZvcm5pYSwgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICoJQCgjKWllZWUuaAk4LjEgKEJlcmtlbGV5KSA2LzExLzkzCi0gKi8KLQotLyoKLSAqIGllZWUuaCBkZWZpbmVzIHRoZSBtYWNoaW5lLWRlcGVuZGVudCBsYXlvdXQgb2YgdGhlIG1hY2hpbmUncyBJRUVFCi0gKiBmbG9hdGluZyBwb2ludC4gIEl0IGRvZXMgKm5vdCogZGVmaW5lICh5ZXQ/KSBhbnkgb2YgdGhlIHJvdW5kaW5nCi0gKiBtb2RlIGJpdHMsIGV4Y2VwdGlvbnMsIGFuZCBzbyBmb3J0aC4KLSAqLwotCi0vKgotICogRGVmaW5lIHRoZSBudW1iZXIgb2YgYml0cyBpbiBlYWNoIGZyYWN0aW9uIGFuZCBleHBvbmVudC4KLSAqCi0gKgkJICAgICBrCSAgICAgICAgIGsrMQotICogTm90ZSB0aGF0ICAxLjAgeCAyICA9PSAwLjEgeCAyICAgICAgYW5kIHRoYXQgZGVub3JtcyBhcmUgcmVwcmVzZW50ZWQKLSAqCi0gKgkJCQkJICAoLWV4cF9iaWFzKzEpCi0gKiBhcyBmcmFjdGlvbnMgdGhhdCBsb29rIGxpa2UgMC5mZmZmZiB4IDIgICAgICAgICAgICAgLiAgVGhpcyBtZWFucyB0aGF0Ci0gKgotICoJCQkgLTEyNgotICogdGhlIG51bWJlciAwLjEwMDAwIHggMiAgICAsIGZvciBpbnN0YW5jZSwgaXMgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbGl6ZWQKLSAqCi0gKgkJLTEyNwkJCSAgIC0xMjgKLSAqIGZsb2F0IDEuMCB4IDIgICAgLiAgVGh1cywgdG8gcmVwcmVzZW50IDIgICAgLCB3ZSBuZWVkIG9uZSBsZWFkaW5nIHplcm8KLSAqCi0gKgkJCQkgIC0xMjkKLSAqIGluIHRoZSBmcmFjdGlvbjsgdG8gcmVwcmVzZW50IDIgICAgLCB3ZSBuZWVkIHR3bywgYW5kIHNvIG9uLiAgVGhpcwotICoKLSAqCQkJCQkJICAgICAoLWV4cF9iaWFzLWZyYWNiaXRzKzEpCi0gKiBpbXBsaWVzIHRoYXQgdGhlIHNtYWxsZXN0IGRlbm9ybWFsaXplZCBudW1iZXIgaXMgMgotICoKLSAqIGZvciB3aGljaGV2ZXIgZm9ybWF0IHdlIGFyZSB0YWxraW5nIGFib3V0OiBmb3Igc2luZ2xlIHByZWNpc2lvbiwgZm9yCi0gKgotICoJCQkJCQktMTI2CQktMTQ5Ci0gKiBpbnN0YW5jZSwgd2UgZ2V0IC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSB4IDIgICAgLCBvciAxLjAgeCAyICAgICwgYW5kCi0gKgotICogLTE0OSA9PSAtMTI3IC0gMjMgKyAxLgotICovCi0jZGVmaW5lCVNOR19FWFBCSVRTCTgKLSNkZWZpbmUJU05HX0ZSQUNCSVRTCTIzCi0KLSNkZWZpbmUJREJMX0VYUEJJVFMJMTEKLSNkZWZpbmUJREJMX0ZSQUNIQklUUwkyMAotI2RlZmluZQlEQkxfRlJBQ0xCSVRTCTMyCi0jZGVmaW5lCURCTF9GUkFDQklUUwk1MgotCi0jZGVmaW5lCUVYVF9FWFBCSVRTCTE1Ci0jZGVmaW5lCUVYVF9GUkFDSEJJVFMJMTYKLSNkZWZpbmUJRVhUX0ZSQUNITUJJVFMJMzIKLSNkZWZpbmUJRVhUX0ZSQUNMTUJJVFMJMzIKLSNkZWZpbmUJRVhUX0ZSQUNMQklUUwkzMgotI2RlZmluZQlFWFRfRlJBQ0JJVFMJMTEyCi0KLSNkZWZpbmUJRVhUX0lNUExJQ0lUX05CSVQKLQotI2RlZmluZQlFWFRfVE9fQVJSQVkzMihwLCBhKSBkbyB7CQlcCi0JKGEpWzBdID0gKHVpbnQzMl90KShwKS0+ZXh0X2ZyYWNsOwlcCi0JKGEpWzFdID0gKHVpbnQzMl90KShwKS0+ZXh0X2ZyYWNsbTsJXAotCShhKVsyXSA9ICh1aW50MzJfdCkocCktPmV4dF9mcmFjaG07CVwKLQkoYSlbM10gPSAodWludDMyX3QpKHApLT5leHRfZnJhY2g7CVwKLX0gd2hpbGUoMCkKLQotc3RydWN0IGllZWVfc2luZ2xlIHsKLSNpZmRlZiBfX01JUFNFQl9fCi0JdV9pbnQJc25nX3NpZ246MTsKLQl1X2ludAlzbmdfZXhwOjg7Ci0JdV9pbnQJc25nX2ZyYWM6MjM7Ci0jZWxzZQotCXVfaW50CXNuZ19mcmFjOjIzOwotCXVfaW50CXNuZ19leHA6ODsKLQl1X2ludAlzbmdfc2lnbjoxOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgaWVlZV9kb3VibGUgewotI2lmZGVmIF9fTUlQU0VCX18KLQl1X2ludAlkYmxfc2lnbjoxOwotCXVfaW50CWRibF9leHA6MTE7Ci0JdV9pbnQJZGJsX2ZyYWNoOjIwOwotCXVfaW50CWRibF9mcmFjbDsKLSNlbHNlCi0JdV9pbnQJZGJsX2ZyYWNsOwotCXVfaW50CWRibF9mcmFjaDoyMDsKLQl1X2ludAlkYmxfZXhwOjExOwotCXVfaW50CWRibF9zaWduOjE7Ci0jZW5kaWYKLX07Ci0KLXN0cnVjdCBpZWVlX2V4dCB7Ci0jaWZkZWYgX19NSVBTRUJfXwotCXVfaW50CWV4dF9zaWduOjE7Ci0JdV9pbnQJZXh0X2V4cDoxNTsKLQl1X2ludAlleHRfZnJhY2g6MTY7Ci0JdV9pbnQJZXh0X2ZyYWNobTsKLQl1X2ludAlleHRfZnJhY2xtOwotCXVfaW50CWV4dF9mcmFjbDsKLSNlbHNlCi0JdV9pbnQJZXh0X2ZyYWNsOwotCXVfaW50CWV4dF9mcmFjbG07Ci0JdV9pbnQJZXh0X2ZyYWNobTsKLQl1X2ludAlleHRfZnJhY2g6MTY7Ci0JdV9pbnQJZXh0X2V4cDoxNTsKLQl1X2ludAlleHRfc2lnbjoxOwotI2VuZGlmCi19OwotCi0vKgotICogRmxvYXRzIHdob3NlIGV4cG9uZW50IGlzIGluIFsxLi5JTkZOQU4pIChvZiB3aGF0ZXZlciB0eXBlKSBhcmUKLSAqIGBub3JtYWwnLiAgRmxvYXRzIHdob3NlIGV4cG9uZW50IGlzIElORk5BTiBhcmUgZWl0aGVyIEluZiBvciBOYU4uCi0gKiBGbG9hdHMgd2hvc2UgZXhwb25lbnQgaXMgemVybyBhcmUgZWl0aGVyIHplcm8gKGlmZiBhbGwgZnJhY3Rpb24KLSAqIGJpdHMgYXJlIHplcm8pIG9yIHN1Ym5vcm1hbCB2YWx1ZXMuCi0gKgotICogQSBOYU4gaXMgYSBgc2lnbmFsbGluZyBOYU4nIGlmIGl0cyBRVUlFVE5BTiBiaXQgaXMgY2xlYXIgaW4gaXRzCi0gKiBoaWdoIGZyYWN0aW9uOyBpZiB0aGUgYml0IGlzIHNldCwgaXQgaXMgYSBgcXVpZXQgTmFOJy4KLSAqLwotI2RlZmluZQlTTkdfRVhQX0lORk5BTgkyNTUKLSNkZWZpbmUJREJMX0VYUF9JTkZOQU4JMjA0NwotI2RlZmluZQlFWFRfRVhQX0lORk5BTgkzMjc2NwotCi0jaWYgMAotI2RlZmluZQlTTkdfUVVJRVROQU4JKDEgPDwgMjIpCi0jZGVmaW5lCURCTF9RVUlFVE5BTgkoMSA8PCAxOSkKLSNkZWZpbmUJRVhUX1FVSUVUTkFOCSgxIDw8IDE1KQotI2VuZGlmCi0KLS8qCi0gKiBFeHBvbmVudCBiaWFzZXMuCi0gKi8KLSNkZWZpbmUJU05HX0VYUF9CSUFTCTEyNwotI2RlZmluZQlEQkxfRVhQX0JJQVMJMTAyMwotI2RlZmluZQlFWFRfRVhQX0JJQVMJMTYzODMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaCBiL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM5NDQ0ZC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvbGltaXRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgkkT3BlbkJTRDogbGltaXRzLmgsdiAxLjUgMjAwNy8wNS8wNyAyMDo1MTowNyBrZXR0ZW5pcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICoJQCgjKWxpbWl0cy5oCTguMyAoQmVya2VsZXkpIDEvNC85NAotICovCi0KLSNpZm5kZWYgX01JUFNfTElNSVRTX0hfCi0jZGVmaW5lIF9NSVBTX0xJTUlUU19IXwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0KLSNkZWZpbmUJTUJfTEVOX01BWAk2CQkvKiBBbGxvdyAzMSBiaXQgVVRGMiAqLwotCi0jaWZuZGVmCVNJWkVfTUFYCi0jZGVmaW5lCVNJWkVfTUFYCVVMT05HX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgc2l6ZV90ICovCi0jZW5kaWYKLSNkZWZpbmUJU1NJWkVfTUFYCUxPTkdfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYSBzc2l6ZV90ICovCi0KLSNpZiBfX0JTRF9WSVNJQkxFCi0jZGVmaW5lCVNJWkVfVF9NQVgJVUxPTkdfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYSBzaXplX3QgKGhpc3RvcmljKSAqLwotCi0vKiBRdWFkcyBhbmQgbG9uZ3MgYXJlIHRoZSBzYW1lIG9uIG1pcHM2NCAqLwotI2RlZmluZQlVUVVBRF9NQVgJKFVMT05HX01BWCkJLyogbWF4IHZhbHVlIGZvciBhIHVxdWFkX3QgKi8KLSNkZWZpbmUJUVVBRF9NQVgJKExPTkdfTUFYKQkvKiBtYXggdmFsdWUgZm9yIGEgcXVhZF90ICovCi0jZGVmaW5lCVFVQURfTUlOCShMT05HX01JTikJLyogbWluIHZhbHVlIGZvciBhIHF1YWRfdCAqLwotCi0jZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwotCi0KLSNkZWZpbmUgTE9OR0xPTkdfQklUICAgIDY0Ci0jZGVmaW5lIExPTkdMT05HX01JTiAgICAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTC0xKQotI2RlZmluZSBMT05HTE9OR19NQVggICAgOTIyMzM3MjAzNjg1NDc3NTgwN0xMCi0jZGVmaW5lIFVMT05HTE9OR19NQVggICAxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTAotCi0jZW5kaWYgLyogIV9NSVBTX0xJTUlUU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL3NpZ25hbC5oIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL3NpZ25hbC5oCmluZGV4IDRlZmI4NTYuLmIzMTcxNWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9zaWduYWwuaAorKysgYi9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvc2lnbmFsLmgKQEAgLTM3LDExMSArMzcsMTUgQEAKICNpZm5kZWYgX01JUFNfU0lHTkFMX0hfCiAjZGVmaW5lIF9NSVBTX1NJR05BTF9IXwogCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0KLSNpZiAhZGVmaW5lZChfX0xBTkdVQUdFX0FTU0VNQkxZKQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0vKgotICogTWFjaGluZS1kZXBlbmRlbnQgc2lnbmFsIGRlZmluaXRpb25zCi0gKi8KLXR5cGVkZWYgaW50IHNpZ19hdG9taWNfdDsKLQotI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19YUEdfVklTSUJMRSA+PSA0MjAKLQotLyoKLSAqIEluZm9ybWF0aW9uIHB1c2hlZCBvbiBzdGFjayB3aGVuIGEgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KLSAqIFRoaXMgaXMgdXNlZCBieSB0aGUga2VybmVsIHRvIHJlc3RvcmUgc3RhdGUgZm9sbG93aW5nCi0gKiBleGVjdXRpb24gb2YgdGhlIHNpZ25hbCBoYW5kbGVyLiAgSXQgaXMgYWxzbyBtYWRlIGF2YWlsYWJsZQotICogdG8gdGhlIGhhbmRsZXIgdG8gYWxsb3cgaXQgdG8gcmVzdG9yZSBzdGF0ZSBwcm9wZXJseSBpZgotICogYSBub24tc3RhbmRhcmQgZXhpdCBpcyBwZXJmb3JtZWQuCi0gKi8KLQotI2lmIGRlZmluZWQoX19BTkRST0lEX18pCi0KLS8qCi0gKiBUaGUgTGludXggYW5kIE9wZW5CU0Qgc2lnY29udGV4dCBzdHJ1Y3R1cmVzIGFyZSBzbGlnaHRseSBkaWZmZXJlbnQKLSAqIFRoaXMgaXMgdGhlIExpbnV4IE8zMiBBQkkgY29tcGF0aWJsZSBzaWdjb250ZXh0Ci0gKi8KLQotc3RydWN0IHNpZ2NvbnRleHQgewotCXVuc2lnbmVkIGludCBzY19yZWdtYXNrOwotCXVuc2lnbmVkIGludCBzY19zdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHNjX3BjOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBzY19yZWdzWzMyXTsKLQl1bnNpZ25lZCBsb25nIGxvbmcgc2NfZnByZWdzWzMyXTsKLQl1bnNpZ25lZCBpbnQgc2NfYWN4OwotCXVuc2lnbmVkIGludCBzY19mcGNfY3NyOwotCXVuc2lnbmVkIGludCBzY19mcGNfZWlyOwotCXVuc2lnbmVkIGludCBzY191c2VkX21hdGg7Ci0JdW5zaWduZWQgaW50IHNjX2RzcDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgc2NfbWRoaTsKLQl1bnNpZ25lZCBsb25nIGxvbmcgc2NfbWRsbzsKLQl1bnNpZ25lZCBsb25nIHNjX2hpMTsKLQl1bnNpZ25lZCBsb25nIHNjX2xvMTsKLQl1bnNpZ25lZCBsb25nIHNjX2hpMjsKLQl1bnNpZ25lZCBsb25nIHNjX2xvMjsKLQl1bnNpZ25lZCBsb25nIHNjX2hpMzsKLQl1bnNpZ25lZCBsb25nIHNjX2xvMzsKLX07Ci0KLSNlbHNlCi0KLXN0cnVjdAlzaWdjb250ZXh0IHsKLQlsb25nCXNjX29uc3RhY2s7CS8qIHNpZ3N0YWNrIHN0YXRlIHRvIHJlc3RvcmUgKi8KLQlsb25nCSBzY19tYXNrOwkvKiBzaWduYWwgbWFzayB0byByZXN0b3JlICovCi0JX19yZWdpc3Rlcl90IHNjX3BjOwkvKiBwYyBhdCB0aW1lIG9mIHNpZ25hbCAqLwotCV9fcmVnaXN0ZXJfdCBzY19yZWdzWzMyXTsgLyogcHJvY2Vzc29yIHJlZ3MgMCB0byAzMSAqLwotCV9fcmVnaXN0ZXJfdCBtdWxsbzsJLyogbXVsbG8gYW5kIG11bGhpIHJlZ2lzdGVycy4uLiAqLwotCV9fcmVnaXN0ZXJfdCBtdWxoaTsJLyogbXVsbG8gYW5kIG11bGhpIHJlZ2lzdGVycy4uLiAqLwotCWZfcmVnaXN0ZXJfdCBzY19mcHJlZ3NbMzNdOyAvKiBmcCByZWdzIDAgdG8gMzEgYW5kIGNzciAqLwotCWxvbmcJc2NfZnB1c2VkOwkvKiBmcCBoYXMgYmVlbiB1c2VkICovCi0JbG9uZwlzY19mcGNfZWlyOwkvKiBmbG9hdGluZyBwb2ludCBleGNlcHRpb24gaW5zdHJ1Y3Rpb24gcmVnICovCi0JbG9uZwl4eHhbOF07CQkvKiBYWFggcmVzZXJ2ZWQgKi8KLX07Ci0jZW5kaWYKLSNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFIHx8IF9fWFBHX1ZJU0lCTEUgPj0gNDIwICovCi0KLSNlbHNlIC8qIF9fTEFOR1VBR0VfQVNTRU1CTFkgKi8KLQotI2lmZGVmIF9fQU5EUk9JRF9fCi0KICNkZWZpbmUJU0NfUkVHTUFTSwkoMCpSRUdTWikKICNkZWZpbmUJU0NfU1RBVFVTCSgxKlJFR1NaKQogI2RlZmluZQlTQ19QQwkJKDIqUkVHU1opCiAjZGVmaW5lCVNDX1JFR1MJCShTQ19QQys4KQogI2RlZmluZQlTQ19GUFJFR1MJKFNDX1JFR1MrMzIqOCkKICNkZWZpbmUJU0NfQUNYCQkoU0NfRlBSRUdTKzMyKlJFR1NaX0ZQKQotI2RlZmluZQlTQ19GUENfQ1NSCShTQ19BQ1grMSpSRUdTWikKLSNkZWZpbmUJU0NfRlBDX0VJUgkoU0NfQUNYKzIqUkVHU1opCiAjZGVmaW5lCVNDX1VTRURfTUFUSAkoU0NfQUNYKzMqUkVHU1opCi0jZGVmaW5lCVNDX0RTUAkJKFNDX0FDWCs0KlJFR1NaKQotI2RlZmluZQlTQ19NREhJCQkoU0NfQUNYKzUqUkVHU1opCi0jZGVmaW5lCVNDX01ETE8JCShTQ19NREhJKzgpCi0jZGVmaW5lCVNDX0hJMQkJKFNDX01ETE8rOCkKLSNkZWZpbmUJU0NfTE8xCQkoU0NfSEkxKzEqUkVHU1opCi0jZGVmaW5lCVNDX0hJMgkJKFNDX0hJMSsyKlJFR1NaKQotI2RlZmluZQlTQ19MTzIJCShTQ19ISTErMypSRUdTWikKLSNkZWZpbmUJU0NfSEkzCQkoU0NfSEkxKzQqUkVHU1opCi0jZGVmaW5lCVNDX0xPMwkJKFNDX0hJMSs1KlJFR1NaKQogLyogT3BlbkJTRCBjb21wYXRpYmlsaXR5ICovCiAjZGVmaW5lCVNDX01BU0sJCVNDX1JFR01BU0sKICNkZWZpbmUJU0NfRlBVU0VECVNDX1VTRURfTUFUSAogCi0jZWxzZQotCi0jZGVmaW5lIFNDX09OU1RBQ0sJKDAgKiBSRUdTWikKLSNkZWZpbmUJU0NfTUFTSwkJKDEgKiBSRUdTWikKLSNkZWZpbmUJU0NfUEMJCSgyICogUkVHU1opCi0jZGVmaW5lCVNDX1JFR1MJCSgzICogUkVHU1opCi0jZGVmaW5lCVNDX01VTExPCSgzNSAqIFJFR1NaKQotI2RlZmluZQlTQ19NVUxISQkoMzYgKiBSRUdTWikKLSNkZWZpbmUJU0NfRlBSRUdTCSgzNyAqIFJFR1NaKQotI2RlZmluZQlTQ19GUFVTRUQJKDcwICogUkVHU1opCi0jZGVmaW5lCVNDX0ZQQ19FSVIJKDcxICogUkVHU1opCi0KLSNlbmRpZiAvKiBfX0FORFJPSURfXyAqLwotCi0jZW5kaWYgLyogX19MQU5HVUFHRV9BU1NFTUJMWSAqLwotCiAjZW5kaWYJLyogIV9NSVBTX1NJR05BTF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvbWlwcy5tayBiL2xpYmMvYXJjaC1taXBzL21pcHMubWsKaW5kZXggMTExOWE2Ni4uMzFhMWYzMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvbWlwcy5taworKysgYi9saWJjL2FyY2gtbWlwcy9taXBzLm1rCkBAIC0xLDIzICsxLDk0IEBACi1fTElCQ19BUkNIX0NPTU1PTl9TUkNfRklMRVMgOj0gXAorIyBtaXBzIHNwZWNpZmljIGNvbmZpZ3MKKworIyBUaGVzZSBhcmUgc2hhcmVkIGJ5IGFsbCB0aGUgMzItYml0IHRhcmdldHMsIGJ1dCBub3QgdGhlIDY0LWJpdCBvbmVzLgorbGliY19jb21tb25fc3JjX2ZpbGVzX21pcHMgOj0gXAorICAgIGJpb25pYy9sZWdhY3lfMzJfYml0X3N1cHBvcnQuY3BwIFwKKyAgICBiaW9uaWMvbmRrX2NydWZ0LmNwcCBcCisgICAgYmlvbmljL3RpbWU2NC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHcuYyBcCisKKyMgVGhlc2UgYXJlIHNoYXJlZCBieSBhbGwgdGhlIDMyLWJpdCB0YXJnZXRzLCBidXQgbm90IHRoZSA2NC1iaXQgb25lcy4KK2xpYmNfYmlvbmljX3NyY19maWxlc19taXBzICs9IFwKKyAgICAgYmlvbmljL21tYXAuY3BwCisKK2xpYmNfY29tbW9uX3NyY19maWxlc19taXBzICs9IFwKKyAgICBiaW9uaWMvbWVtY2hyLmMgXAorICAgIGJpb25pYy9tZW1jbXAuYyBcCisgICAgYmlvbmljL21lbW1vdmUuYyBcCisgICAgYmlvbmljL21lbXJjaHIuYyBcCisgICAgYmlvbmljL3N0cmNoci5jcHAgXAorICAgIGJpb25pYy9zdHJubGVuLmMgXAorICAgIGJpb25pYy9zdHJyY2hyLmNwcCBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2F0LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2Noci5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjbXAuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY3B5LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xlbi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NyY2hyLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jbXAuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbW1vdmUuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvYmNvcHkuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RwY3B5LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cG5jcHkuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RyY2F0LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNtcC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjcHkuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybGNhdC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJsY3B5LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5jYXQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybmNtcC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJuY3B5LmMgXAorCisjIEZvcnRpZnkgaW1wbGVtZW50YXRpb25zIG9mIGxpYmMgZnVuY3Rpb25zLgorbGliY19jb21tb25fc3JjX2ZpbGVzX21pcHMgKz0gXAorICAgIGJpb25pYy9fX21lbWNweV9jaGsuY3BwIFwKKyAgICBiaW9uaWMvX19tZW1zZXRfY2hrLmNwcCBcCisgICAgYmlvbmljL19fc3RyY3B5X2Noay5jcHAgXAorICAgIGJpb25pYy9fX3N0cmNhdF9jaGsuY3BwIFwKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyBDUFUgc3BlY2lmaWMgc291cmNlIGZpbGVzCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfbWlwcyArPSBcCiAgICAgYXJjaC1taXBzL2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TIFwKICAgICBhcmNoLW1pcHMvYmlvbmljL2J6ZXJvLlMgXAogICAgIGFyY2gtbWlwcy9iaW9uaWMvY2FjaGVmbHVzaC5jcHAgXAogICAgIGFyY2gtbWlwcy9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TIFwKLSAgICBhcmNoLW1pcHMvYmlvbmljL2Z1dGV4X21pcHMuUyBcCi0gICAgYXJjaC1taXBzL2Jpb25pYy9fX2dldF9zcC5TIFwKLSAgICBhcmNoLW1pcHMvYmlvbmljL21lbWNtcDE2LlMgXAotICAgIGFyY2gtbWlwcy9iaW9uaWMvbWVtbW92ZS5jIFwKICAgICBhcmNoLW1pcHMvYmlvbmljL19zZXRqbXAuUyBcCiAgICAgYXJjaC1taXBzL2Jpb25pYy9zZXRqbXAuUyBcCi0gICAgYXJjaC1taXBzL2Jpb25pYy9fX3NldF90bHMuYyBcCiAgICAgYXJjaC1taXBzL2Jpb25pYy9zaWdzZXRqbXAuUyBcCiAgICAgYXJjaC1taXBzL2Jpb25pYy9zeXNjYWxsLlMgXAogICAgIGFyY2gtbWlwcy9iaW9uaWMvdmZvcmsuUyBcCisKK2lmbmRlZiBBUkNIX01JUFNfUkVWNgorbGliY19iaW9uaWNfc3JjX2ZpbGVzX21pcHMgKz0gXAogICAgIGFyY2gtbWlwcy9zdHJpbmcvbWVtY3B5LlMgXAogICAgIGFyY2gtbWlwcy9zdHJpbmcvbWVtc2V0LlMgXAogICAgIGFyY2gtbWlwcy9zdHJpbmcvbWlwc19zdHJsZW4uYyBcCiAKLV9MSUJDX0FSQ0hfU1RBVElDX1NSQ19GSUxFUyA6PSBcCi0gICAgYmlvbmljL2RsX2l0ZXJhdGVfcGhkcl9zdGF0aWMuYyBcCitlbHNlCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfbWlwcyArPSBcCisgICAgYmlvbmljL21lbWNweS5jcHAgXAorICAgIGJpb25pYy9tZW1zZXQuYworbGliY19jb21tb25fc3JjX2ZpbGVzX21pcHMgKz0gXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmxlbi5jCitlbmRpZgogCi1fTElCQ19BUkNIX0RZTkFNSUNfU1JDX0ZJTEVTIDo9CitsaWJjX25ldGJzZF9zcmNfZmlsZXNfbWlwcyA6PSBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2NvbW1vbi9saWIvbGliYy9oYXNoL3NoYTEvc2hhMS5jIFwKKworbGliY19jcnRfdGFyZ2V0X2NmbGFnc19taXBzIDo9IFwKKyAgICAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9HTE9CQUxfQ0ZMQUdTKSBcCisgICAgLUkkKExPQ0FMX1BBVEgpL2FyY2gtbWlwcy9pbmNsdWRlCisKK2xpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9maWxlX21pcHMgOj0gXAorICAgICQoTE9DQUxfUEFUSCkvYXJjaC1taXBzL2Jpb25pYy9jcnRiZWdpbi5jCisKK2xpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9zb19maWxlX21pcHMgOj0gXAorICAgICQoTE9DQUxfUEFUSCkvYXJjaC1jb21tb24vYmlvbmljL2NydGJlZ2luX3NvLmMKKworbGliY19jcnRfdGFyZ2V0X3NvX2NmbGFnc19taXBzIDo9IFwKKyAgICAtZlBJQworCitsaWJjX2NydF90YXJnZXRfbGRmbGFnc19taXBzIDo9IFwKKyAgICAtbWVsZjMybHRzbWlwCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zdHJpbmcvbWVtY3B5LlMgYi9saWJjL2FyY2gtbWlwcy9zdHJpbmcvbWVtY3B5LlMKaW5kZXggYWFiZGZjZi4uZGM5MTA5NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3RyaW5nL21lbWNweS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N0cmluZy9tZW1jcHkuUwpAQCAtMzksMTMgKzM5LDEzIEBACiAgKiAgSW5jbHVkZSBmaWxlcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIm1hY2hpbmUvYXNtLmgiCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIAotLyogCisvKgogICogVGhpcyByb3V0aW5lIGNvdWxkIGJlIG9wdGltaXplZCBmb3IgTUlQUzY0LiBUaGUgY3VycmVudCBjb2RlIG9ubHkKICAqIHVzZXMgTUlQUzMyIGluc3RydWN0aW9ucy4KLSAqLwkKKyAqLwogI2lmIGRlZmluZWQoX19NSVBTRUJfXykKICMgIGRlZmluZSBMV0hJCWx3bAkJLyogaGlnaCBwYXJ0IGlzIGxlZnQgaW4gYmlnLWVuZGlhbgkqLwogIyAgZGVmaW5lIFNXSEkJc3dsCQkvKiBoaWdoIHBhcnQgaXMgbGVmdCBpbiBiaWctZW5kaWFuCSovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zdHJpbmcvbWVtc2V0LlMgYi9saWJjL2FyY2gtbWlwcy9zdHJpbmcvbWVtc2V0LlMKaW5kZXggYTFjNTA1NS4uM2U2MzBjYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3RyaW5nL21lbXNldC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N0cmluZy9tZW1zZXQuUwpAQCAtMzksMTIgKzM5LDEyIEBACiAgKiAgSW5jbHVkZSBmaWxlcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIm1hY2hpbmUvYXNtLmgiCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLS8qIAorLyoKICAqIFRoaXMgcm91dGluZSBjb3VsZCBiZSBvcHRpbWl6ZWQgZm9yIE1JUFM2NC4gVGhlIGN1cnJlbnQgY29kZSBvbmx5CiAgKiB1c2VzIE1JUFMzMiBpbnN0cnVjdGlvbnMuCi0gKi8JCisgKi8KIAogI2lmIGRlZmluZWQoX19NSVBTRUJfXykKICMgIGRlZmluZSBTV0hJCXN3bAkJLyogaGlnaCBwYXJ0IGlzIGxlZnQgaW4gYmlnLWVuZGlhbgkqLwpAQCAtMjIwLDcgKzIyMCw3IEBACiAJc3cJYTEsLTM2KGEwKQogCW5vcAogCW5vcAkJCSMgdGhlIGV4dHJhIG5vcCBpbnN0cnVjdGlvbnMgaGVscCB0byBiYWxhbmNlCi0Jbm9wCQkJIyBjeWNsZXMgbmVlZGVkIGZvciAic3RvcmUiICsgImZpbGwiICsgImV2aWN0IiAKKwlub3AJCQkjIGN5Y2xlcyBuZWVkZWQgZm9yICJzdG9yZSIgKyAiZmlsbCIgKyAiZXZpY3QiCiAJbm9wCQkJIyBGb3IgNjRieXRlIHN0b3JlIHRoZXJlIGFyZSBuZWVkZWQgOCBmaWxsCiAJbm9wCQkJIyBhbmQgOCBldmljdCBjeWNsZXMsIGkuZS4gYXQgbGVhc3QgMzIgaW5zdHIuCiAJbm9wCkBAIC0zMjAsNCArMzIwLDMgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICBJbXBsZW1lbnRhdGlvbiA6IFN0YXRpYyBmdW5jdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzLm1rIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkODdiMjkuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMubWsKKysrIC9kZXYvbnVsbApAQCAtMSwxOTcgKzAsMCBAQAotIyBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0Lgotc3lzY2FsbF9zcmMgOj0KLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX2Jyay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19leGl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX2ZjbnRsNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fZnN0YXRmczY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX2dldGNwdS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRjd2QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19faW9jdGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fbGxzZWVrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX21tYXAyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX29wZW5hdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19wcG9sbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19wc2VsZWN0Ni5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19wdHJhY2UuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fcmVib290LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ3N1c3BlbmQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3NldF90aHJlYWRfYXJlYS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fc2lnYWN0aW9uLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3N0YXRmczY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3N5c2xvZy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3dhaXRpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX2V4aXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19mbHVzaF9jYWNoZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvYWNjZXB0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9hY2N0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9iaW5kLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9jYXBnZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2NhcHNldC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvY2hkaXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2Nocm9vdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2Nsb3NlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9jb25uZWN0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9kdXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2R1cDMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2Vwb2xsX2N0bC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZXZlbnRmZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZXhlY3ZlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9mYWNjZXNzYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2ZjaGRpci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZmNobW9kLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9mY2htb2RhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZmNob3duLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9mY2hvd25hdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZmRhdGFzeW5jLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9mZ2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2ZsaXN0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2Zsb2NrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2ZzZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZnN0YXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2ZzdGF0YXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2ZzeW5jLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9mdHJ1bmNhdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2Z0cnVuY2F0ZTY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9mdXRleC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZ2V0ZGVudHMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2dldGVnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2dldGV1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2dldGdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9nZXRpdGltZXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9nZXRwZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9nZXRwaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2dldHBwaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2dldHJlc2dpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cmVzdWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9nZXRybGltaXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2dldHJ1c2FnZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZ2V0c2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZ2V0c29ja29wdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZ2V0dGlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2dldHVpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZ2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvaW9wcmlvX2dldC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvaW9wcmlvX3NldC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMva2lsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMva2xvZ2N0bC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvbGdldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9saW5rYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2xpc3Rlbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvbGlzdHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9sbGlzdHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9scmVtb3ZleGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2xzZWVrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9sc2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL21hZHZpc2UuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL21pbmNvcmUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL21rZGlyYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL21rbm9kYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL21sb2NrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9tbG9ja2FsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvbW91bnQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL21wcm90ZWN0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9tcmVtYXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL21zeW5jLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9tdW5sb2NrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9tdW5sb2NrYWxsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9tdW5tYXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL25hbm9zbGVlcC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9wZXJzb25hbGl0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvcGlwZTIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3ByY3RsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9wcmVhZDY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9wcmxpbWl0NjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3B3cml0ZTY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9yZWFkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9yZWFkYWhlYWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3JlYWRsaW5rYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3JlYWR2LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9yZWN2ZnJvbS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvcmVjdm1zZy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3JlbmFtZWF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF95aWVsZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2VuZGZpbGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRmaWxlNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRtc2cuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NlbmR0by5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2V0Z2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zZXRncm91cHMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NldGl0aW1lci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2V0bnMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NldHBnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NldHByaW9yaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zZXRyZWdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmVzZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zZXRyZXN1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NldHJldWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zZXRybGltaXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NldHNpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2V0c29ja29wdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zZXR1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zaHV0ZG93bi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2lnYWx0c3RhY2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NpZ25hbGZkNC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc29ja2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zb2NrZXRwYWlyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zd2Fwb2ZmLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zd2Fwb24uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3N5bWxpbmthdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc3luYy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc3lzaW5mby5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvdGdraWxsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy90a2lsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvdHJ1bmNhdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3RydW5jYXRlNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3VtYXNrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy91bW91bnQyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy91bmFtZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvdW5saW5rYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3Vuc2hhcmUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3V0aW1lbnNhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvd2FpdDQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3dyaXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy93cml0ZXYuUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19hY2NlcHQ0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2FjY2VwdDQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmRmMDRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19hY2NlcHQ0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2FjY2VwdDQpCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfYWNjZXB0NAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORChfX2FjY2VwdDQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2Jyay5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19icmsuUwppbmRleCA4N2UxM2JkLi44NDcyNjYzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2Jyay5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fYnJrLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX19icmsKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19icmsKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19icms6CitFTlRSWShfX2JyaykKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2JyaworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9icmsKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fYnJrCitFTkQoX19icmspCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2Nvbm5lY3QuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fY29ubmVjdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YzFiOWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2Nvbm5lY3QuUwpAQCAtMCwwICsxLDE5IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fY29ubmVjdCkKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9jb25uZWN0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQorICAgIG5vcAorICAgIC5zZXQgcmVvcmRlcgorRU5EKF9fY29ubmVjdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUwppbmRleCAwYTVmZGFlLi4zYWVkOWJjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2Vwb2xsX3B3YWl0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fZXBvbGxfcHdhaXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19lcG9sbF9wd2FpdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX2Vwb2xsX3B3YWl0OgorRU5UUlkoX19lcG9sbF9wd2FpdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2Vwb2xsX3B3YWl0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2Vwb2xsX3B3YWl0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX2Vwb2xsX3B3YWl0CitFTkQoX19lcG9sbF9wd2FpdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZXhpdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19leGl0LlMKaW5kZXggNTI5ZTQ5Yy4uNzM0OTgwNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19leGl0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19leGl0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX19leGl0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fZXhpdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX2V4aXQ6CitFTlRSWShfX2V4aXQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9leGl0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2V4aXQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fZXhpdAorRU5EKF9fZXhpdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZmFkdmlzZTY0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2ZhZHZpc2U2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYWNiYjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2ZhZHZpc2U2NC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19mYWR2aXNlNjQpCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZmFkdmlzZTY0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQorICAgIG5vcAorICAgIC5zZXQgcmVvcmRlcgorRU5EKF9fZmFkdmlzZTY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19mY250bDY0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2ZjbnRsNjQuUwppbmRleCAzOWVkNGNmLi4yNzM0YmUyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2ZjbnRsNjQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2ZjbnRsNjQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX2ZjbnRsNjQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19mY250bDY0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLV9fZmNudGw2NDoKK0VOVFJZKF9fZmNudGw2NCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2ZjbnRsNjQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZmNudGw2NAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19mY250bDY0CitFTkQoX19mY250bDY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19mc3RhdGZzNjQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZnN0YXRmczY0LlMKaW5kZXggMzM4OWE4ZC4uZTA4Y2Y3ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19mc3RhdGZzNjQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2ZzdGF0ZnM2NC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fZnN0YXRmczY0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fZnN0YXRmczY0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLV9fZnN0YXRmczY0OgorRU5UUlkoX19mc3RhdGZzNjQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9mc3RhdGZzNjQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZnN0YXRmczY0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX2ZzdGF0ZnM2NAorRU5EKF9fZnN0YXRmczY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRjcHUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0Y3B1LlMKaW5kZXggZDI5YmQ2Mi4uMjYyZjQ0MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRjcHUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2dldGNwdS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fZ2V0Y3B1Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fZ2V0Y3B1CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLV9fZ2V0Y3B1OgorRU5UUlkoX19nZXRjcHUpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXRjcHUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZ2V0Y3B1CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX2dldGNwdQorRU5EKF9fZ2V0Y3B1KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRjd2QuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0Y3dkLlMKaW5kZXggY2UwNWQ5Mi4uY2E2ZWM3YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRjd2QuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2dldGN3ZC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fZ2V0Y3dkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fZ2V0Y3dkCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLV9fZ2V0Y3dkOgorRU5UUlkoX19nZXRjd2QpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXRjd2QKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZ2V0Y3dkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX2dldGN3ZAorRU5EKF9fZ2V0Y3dkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRkZW50czY0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2dldGRlbnRzNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTdlZjg2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRkZW50czY0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2dldGRlbnRzNjQpCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZ2V0ZGVudHM2NAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORChfX2dldGRlbnRzNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2dldHBpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRwaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWFiMDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRwaWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fZ2V0cGlkKQorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldHBpZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORChfX2dldHBpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUwppbmRleCA3NjdiNmQwLi5lZjYyMzVkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fZ2V0cHJpb3JpdHkKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19nZXRwcmlvcml0eQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX2dldHByaW9yaXR5OgorRU5UUlkoX19nZXRwcmlvcml0eSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2dldHByaW9yaXR5CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldHByaW9yaXR5CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX2dldHByaW9yaXR5CitFTkQoX19nZXRwcmlvcml0eSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19faW9jdGwuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19faW9jdGwuUwppbmRleCAzZDgzYzYwLi4yNzcxNmU4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2lvY3RsLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19pb2N0bC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9faW9jdGwKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19pb2N0bAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX2lvY3RsOgorRU5UUlkoX19pb2N0bCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2lvY3RsCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2lvY3RsCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX2lvY3RsCitFTkQoX19pb2N0bCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fbGxzZWVrLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2xsc2Vlay5TCmluZGV4IDlhMzc1M2IuLmUwY2IzMjEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fbGxzZWVrLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19sbHNlZWsuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX2xsc2VlawotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX2xsc2VlaworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX2xsc2VlazoKK0VOVFJZKF9fbGxzZWVrKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfX2xsc2VlaworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9fbGxzZWVrCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX2xsc2VlaworRU5EKF9fbGxzZWVrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19tbWFwMi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19tbWFwMi5TCmluZGV4IDcyM2U4MGVmLi44MTc1YjMxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX21tYXAyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19tbWFwMi5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fbW1hcDIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19tbWFwMgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX21tYXAyOgorRU5UUlkoX19tbWFwMikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX21tYXAyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX21tYXAyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX21tYXAyCitFTkQoX19tbWFwMikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fb3BlbmF0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX29wZW5hdC5TCmluZGV4IGU1NWU3MWQuLmMwYzNjZGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fb3BlbmF0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19vcGVuYXQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX29wZW5hdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX29wZW5hdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX29wZW5hdDoKK0VOVFJZKF9fb3BlbmF0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfb3BlbmF0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX29wZW5hdAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19vcGVuYXQKK0VORChfX29wZW5hdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcHBvbGwuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcHBvbGwuUwppbmRleCBlZjZkMzQzLi43NWRiYmM4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3Bwb2xsLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19wcG9sbC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fcHBvbGwKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19wcG9sbAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3Bwb2xsOgorRU5UUlkoX19wcG9sbCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3Bwb2xsCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3Bwb2xsCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX3Bwb2xsCitFTkQoX19wcG9sbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcHNlbGVjdDYuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcHNlbGVjdDYuUwppbmRleCAyNmFmOTJhLi5kMDI4MTU2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3BzZWxlY3Q2LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19wc2VsZWN0Ni5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fcHNlbGVjdDYKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19wc2VsZWN0NgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3BzZWxlY3Q2OgorRU5UUlkoX19wc2VsZWN0NikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3BzZWxlY3Q2CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3BzZWxlY3Q2CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX3BzZWxlY3Q2CitFTkQoX19wc2VsZWN0NikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcHRyYWNlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3B0cmFjZS5TCmluZGV4IGYyZWE4YzcuLmM1ZDkxZmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcHRyYWNlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19wdHJhY2UuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX3B0cmFjZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX3B0cmFjZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3B0cmFjZToKK0VOVFJZKF9fcHRyYWNlKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcHRyYWNlCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3B0cmFjZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19wdHJhY2UKK0VORChfX3B0cmFjZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcmVib290LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3JlYm9vdC5TCmluZGV4IDk1YmE1ZDguLmMwMWY3ZmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcmVib290LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19yZWJvb3QuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX3JlYm9vdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX3JlYm9vdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3JlYm9vdDoKK0VOVFJZKF9fcmVib290KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcmVib290CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3JlYm9vdAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19yZWJvb3QKK0VORChfX3JlYm9vdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCmluZGV4IDczMjUzZDYuLjdmYTM3ZmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX3J0X3NpZ2FjdGlvbgotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX3J0X3NpZ2FjdGlvbgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3J0X3NpZ2FjdGlvbjoKK0VOVFJZKF9fcnRfc2lnYWN0aW9uKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcnRfc2lnYWN0aW9uCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3J0X3NpZ2FjdGlvbgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19ydF9zaWdhY3Rpb24KK0VORChfX3J0X3NpZ2FjdGlvbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMKaW5kZXggOTAzNTdiMy4uYjgwYjMxMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX19ydF9zaWdwZW5kaW5nCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fcnRfc2lncGVuZGluZworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3J0X3NpZ3BlbmRpbmc6CitFTlRSWShfX3J0X3NpZ3BlbmRpbmcpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9ydF9zaWdwZW5kaW5nCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3J0X3NpZ3BlbmRpbmcKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fcnRfc2lncGVuZGluZworRU5EKF9fcnRfc2lncGVuZGluZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUwppbmRleCAwZDM0ZTM3Li5lMmEzOWViIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fcnRfc2lncHJvY21hc2sKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19ydF9zaWdwcm9jbWFzaworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3J0X3NpZ3Byb2NtYXNrOgorRU5UUlkoX19ydF9zaWdwcm9jbWFzaykKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3J0X3NpZ3Byb2NtYXNrCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3J0X3NpZ3Byb2NtYXNrCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX3J0X3NpZ3Byb2NtYXNrCitFTkQoX19ydF9zaWdwcm9jbWFzaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKaW5kZXggM2ZmNDcyMy4uZTkxYzUzZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX19ydF9zaWdzdXNwZW5kCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fcnRfc2lnc3VzcGVuZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3J0X3NpZ3N1c3BlbmQ6CitFTlRSWShfX3J0X3NpZ3N1c3BlbmQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9ydF9zaWdzdXNwZW5kCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3J0X3NpZ3N1c3BlbmQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fcnRfc2lnc3VzcGVuZAorRU5EKF9fcnRfc2lnc3VzcGVuZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCmluZGV4IDE5YTVjZTkuLjBiNDE5NWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX3J0X3NpZ3RpbWVkd2FpdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX3J0X3NpZ3RpbWVkd2FpdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3J0X3NpZ3RpbWVkd2FpdDoKK0VOVFJZKF9fcnRfc2lndGltZWR3YWl0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcnRfc2lndGltZWR3YWl0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3J0X3NpZ3RpbWVkd2FpdAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19ydF9zaWd0aW1lZHdhaXQKK0VORChfX3J0X3NpZ3RpbWVkd2FpdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUwppbmRleCAwMDM4ZmY5Li5iMDlmNDA0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fc2NoZWRfZ2V0YWZmaW5pdHkKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19zY2hlZF9nZXRhZmZpbml0eQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3NjaGVkX2dldGFmZmluaXR5OgorRU5UUlkoX19zY2hlZF9nZXRhZmZpbml0eSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NjaGVkX2dldGFmZmluaXR5CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NjaGVkX2dldGFmZmluaXR5CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX3NjaGVkX2dldGFmZmluaXR5CitFTkQoX19zY2hlZF9nZXRhZmZpbml0eSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2V0X3RocmVhZF9hcmVhLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NldF90aHJlYWRfYXJlYS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTM4M2U5Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2V0X3RocmVhZF9hcmVhLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fc2V0X3RocmVhZF9hcmVhCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fc2V0X3RocmVhZF9hcmVhCi0KLV9fc2V0X3RocmVhZF9hcmVhOgotICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2V0X3RocmVhZF9hcmVhCi0gICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQotICAgIG5vcAotMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQotICAgIG5vcAotICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19zZXRfdGhyZWFkX2FyZWEKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TCmluZGV4IDRmY2M4MmEuLjhjYTA3MTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX3NldF90aWRfYWRkcmVzcwotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX3NldF90aWRfYWRkcmVzcworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3NldF90aWRfYWRkcmVzczoKK0VOVFJZKF9fc2V0X3RpZF9hZGRyZXNzKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2V0X3RpZF9hZGRyZXNzCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NldF90aWRfYWRkcmVzcwogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19zZXRfdGlkX2FkZHJlc3MKK0VORChfX3NldF90aWRfYWRkcmVzcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2V0X3Rscy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zZXRfdGxzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5ZWJhNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2V0X3Rscy5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19zZXRfdGxzKQorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NldF90aHJlYWRfYXJlYQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORChfX3NldF90bHMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NpZ2FjdGlvbi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zaWdhY3Rpb24uUwppbmRleCBjYzUzYWI0Li4wODg2ZTk1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NpZ2FjdGlvbi5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2lnYWN0aW9uLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX19zaWdhY3Rpb24KLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19zaWdhY3Rpb24KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19zaWdhY3Rpb246CitFTlRSWShfX3NpZ2FjdGlvbikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NpZ2FjdGlvbgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zaWdhY3Rpb24KICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fc2lnYWN0aW9uCitFTkQoX19zaWdhY3Rpb24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NpZ25hbGZkNC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zaWduYWxmZDQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTU3MTdlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zaWduYWxmZDQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fc2lnbmFsZmQ0KQorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NpZ25hbGZkNAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORChfX3NpZ25hbGZkNCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc29ja2V0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NvY2tldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MzMzNTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NvY2tldC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19zb2NrZXQpCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc29ja2V0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQorICAgIG5vcAorICAgIC5zZXQgcmVvcmRlcgorRU5EKF9fc29ja2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zdGF0ZnM2NC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zdGF0ZnM2NC5TCmluZGV4IDRiMzM1MWMuLmVkNGRjZGIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc3RhdGZzNjQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3N0YXRmczY0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX19zdGF0ZnM2NAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX3N0YXRmczY0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLV9fc3RhdGZzNjQ6CitFTlRSWShfX3N0YXRmczY0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc3RhdGZzNjQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc3RhdGZzNjQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fc3RhdGZzNjQKK0VORChfX3N0YXRmczY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zeXNsb2cuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc3lzbG9nLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYTMyNDIuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zeXNsb2cuUworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX19zeXNsb2cKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19zeXNsb2cKLQotX19zeXNsb2c6Ci0gICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zeXNsb2cKLSAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCi0gICAgbm9wCi0xOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5Ci0gICAgbm9wCi0gICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX3N5c2xvZwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKaW5kZXggMDU0YzFiOS4uZWY1MDc0OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fdGltZXJfY3JlYXRlCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fdGltZXJfY3JlYXRlCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLV9fdGltZXJfY3JlYXRlOgorRU5UUlkoX190aW1lcl9jcmVhdGUpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl90aW1lcl9jcmVhdGUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfdGltZXJfY3JlYXRlCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX3RpbWVyX2NyZWF0ZQorRU5EKF9fdGltZXJfY3JlYXRlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKaW5kZXggMmZhNmU1MC4uNTk5M2FjZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fdGltZXJfZGVsZXRlCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fdGltZXJfZGVsZXRlCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLV9fdGltZXJfZGVsZXRlOgorRU5UUlkoX190aW1lcl9kZWxldGUpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl90aW1lcl9kZWxldGUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfdGltZXJfZGVsZXRlCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX3RpbWVyX2RlbGV0ZQorRU5EKF9fdGltZXJfZGVsZXRlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwppbmRleCAyNjlhYzRkLi4zMTIzNGU1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX3RpbWVyX2dldG92ZXJydW4KLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX190aW1lcl9nZXRvdmVycnVuCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLV9fdGltZXJfZ2V0b3ZlcnJ1bjoKK0VOVFJZKF9fdGltZXJfZ2V0b3ZlcnJ1bikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3RpbWVyX2dldG92ZXJydW4KKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX190aW1lcl9nZXRvdmVycnVuCitFTkQoX190aW1lcl9nZXRvdmVycnVuKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUwppbmRleCAzYTE4ZTNkLi4zODgwMGQzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX3RpbWVyX2dldHRpbWUKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX190aW1lcl9nZXR0aW1lCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLV9fdGltZXJfZ2V0dGltZToKK0VOVFJZKF9fdGltZXJfZ2V0dGltZSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3RpbWVyX2dldHRpbWUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfdGltZXJfZ2V0dGltZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX190aW1lcl9nZXR0aW1lCitFTkQoX190aW1lcl9nZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUwppbmRleCBkYWY2NzFmLi43M2NlYTczIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX3RpbWVyX3NldHRpbWUKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX190aW1lcl9zZXR0aW1lCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLV9fdGltZXJfc2V0dGltZToKK0VOVFJZKF9fdGltZXJfc2V0dGltZSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3RpbWVyX3NldHRpbWUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfdGltZXJfc2V0dGltZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX190aW1lcl9zZXR0aW1lCitFTkQoX190aW1lcl9zZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX193YWl0aWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fd2FpdGlkLlMKaW5kZXggOTQ0MmNhNi4uOWQxN2Y4ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX193YWl0aWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3dhaXRpZC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fd2FpdGlkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fd2FpdGlkCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLV9fd2FpdGlkOgorRU5UUlkoX193YWl0aWQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl93YWl0aWQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfd2FpdGlkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX3dhaXRpZAorRU5EKF9fd2FpdGlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX2V4aXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19leGl0LlMKaW5kZXggMjIwODc2YS4uNWFjMTMyNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX2V4aXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fZXhpdC5TCkBAIC0xLDIzICsxLDIyIEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9leGl0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IF9leGl0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLV9leGl0OgorRU5UUlkoX2V4aXQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9leGl0X2dyb3VwCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2V4aXRfZ3JvdXAKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9leGl0CitFTkQoX2V4aXQpCisKKyAgICAuZ2xvYmwgX0V4aXQKKyAgICAuZXF1IF9FeGl0LCBfZXhpdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX2ZsdXNoX2NhY2hlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fZmx1c2hfY2FjaGUuUwppbmRleCAwYWMyNTc2Li5hNDAzMGU5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fZmx1c2hfY2FjaGUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fZmx1c2hfY2FjaGUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfZmx1c2hfY2FjaGUKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX2ZsdXNoX2NhY2hlCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLV9mbHVzaF9jYWNoZToKK0VOVFJZKF9mbHVzaF9jYWNoZSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2NhY2hlZmx1c2gKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfY2FjaGVmbHVzaAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX2ZsdXNoX2NhY2hlCitFTkQoX2ZsdXNoX2NhY2hlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvYWNjZXB0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9hY2NlcHQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRkYTRkOC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9hY2NlcHQuUworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgYWNjZXB0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IGFjY2VwdAotCi1hY2NlcHQ6Ci0gICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9hY2NlcHQKLSAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCi0gICAgbm9wCi0xOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5Ci0gICAgbm9wCi0gICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBhY2NlcHQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2FjY3QuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2FjY3QuUwppbmRleCBjNjQxYjljLi5lM2E1Y2NkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9hY2N0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvYWNjdC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGFjY3QKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgYWNjdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1hY2N0OgorRU5UUlkoYWNjdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2FjY3QKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfYWNjdAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgYWNjdAorRU5EKGFjY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9iaW5kLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9iaW5kLlMKaW5kZXggOTEyYjE2MS4uNzhmZTJiYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvYmluZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2JpbmQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBiaW5kCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGJpbmQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotYmluZDoKK0VOVFJZKGJpbmQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9iaW5kCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2JpbmQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGJpbmQKK0VORChiaW5kKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2FwZ2V0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jYXBnZXQuUwppbmRleCA0OGY3YmUzLi4wY2JiNjI2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jYXBnZXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jYXBnZXQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBjYXBnZXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgY2FwZ2V0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWNhcGdldDoKK0VOVFJZKGNhcGdldCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2NhcGdldAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9jYXBnZXQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGNhcGdldAorRU5EKGNhcGdldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2NhcHNldC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2Fwc2V0LlMKaW5kZXggNDAyMjNjMi4uZTgxMTA4MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2Fwc2V0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2Fwc2V0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgY2Fwc2V0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IGNhcHNldAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1jYXBzZXQ6CitFTlRSWShjYXBzZXQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9jYXBzZXQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfY2Fwc2V0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBjYXBzZXQKK0VORChjYXBzZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jaGRpci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2hkaXIuUwppbmRleCA0ZjQyN2ExLi44MmI3YTJiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jaGRpci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2NoZGlyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgY2hkaXIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgY2hkaXIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotY2hkaXI6CitFTlRSWShjaGRpcikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2NoZGlyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2NoZGlyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBjaGRpcgorRU5EKGNoZGlyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2hyb290LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jaHJvb3QuUwppbmRleCBhNTAxNDU5Li5lNmEyOWZjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jaHJvb3QuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jaHJvb3QuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBjaHJvb3QKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgY2hyb290CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWNocm9vdDoKK0VOVFJZKGNocm9vdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2Nocm9vdAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9jaHJvb3QKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGNocm9vdAorRU5EKGNocm9vdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKaW5kZXggZDM5ODZmYy4uYWM3YzVjNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgY2xvY2tfZ2V0cmVzCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGNsb2NrX2dldHJlcworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1jbG9ja19nZXRyZXM6CitFTlRSWShjbG9ja19nZXRyZXMpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9jbG9ja19nZXRyZXMKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfY2xvY2tfZ2V0cmVzCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBjbG9ja19nZXRyZXMKK0VORChjbG9ja19nZXRyZXMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKaW5kZXggZmEwMjMwOS4uZDIyN2EwNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBjbG9ja19nZXR0aW1lCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGNsb2NrX2dldHRpbWUKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotY2xvY2tfZ2V0dGltZToKK0VOVFJZKGNsb2NrX2dldHRpbWUpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9jbG9ja19nZXR0aW1lCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2Nsb2NrX2dldHRpbWUKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGNsb2NrX2dldHRpbWUKK0VORChjbG9ja19nZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwppbmRleCA5MWExNDE4Li42MDAyYWI0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBjbG9ja19uYW5vc2xlZXAKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgY2xvY2tfbmFub3NsZWVwCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWNsb2NrX25hbm9zbGVlcDoKK0VOVFJZKGNsb2NrX25hbm9zbGVlcCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2Nsb2NrX25hbm9zbGVlcAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9jbG9ja19uYW5vc2xlZXAKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGNsb2NrX25hbm9zbGVlcAorRU5EKGNsb2NrX25hbm9zbGVlcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwppbmRleCBkOGViOGYxLi4xOTNiZGMyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGNsb2NrX3NldHRpbWUKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgY2xvY2tfc2V0dGltZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1jbG9ja19zZXR0aW1lOgorRU5UUlkoY2xvY2tfc2V0dGltZSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2Nsb2NrX3NldHRpbWUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfY2xvY2tfc2V0dGltZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgY2xvY2tfc2V0dGltZQorRU5EKGNsb2NrX3NldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9zZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvc2UuUwppbmRleCAwOThmZGQyLi4yMzFmNDk3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9zZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb3NlLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgY2xvc2UKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgY2xvc2UKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotY2xvc2U6CitFTlRSWShjbG9zZSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2Nsb3NlCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2Nsb3NlCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBjbG9zZQorRU5EKGNsb3NlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY29ubmVjdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY29ubmVjdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2IwY2VhLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nvbm5lY3QuUworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgY29ubmVjdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBjb25uZWN0Ci0KLWNvbm5lY3Q6Ci0gICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9jb25uZWN0Ci0gICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQotICAgIG5vcAotMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQotICAgIG5vcAotICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgY29ubmVjdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCmluZGV4IGFlNDc2OTcuLjhjMDFjMDYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZGVsZXRlX21vZHVsZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBkZWxldGVfbW9kdWxlCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWRlbGV0ZV9tb2R1bGU6CitFTlRSWShkZWxldGVfbW9kdWxlKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZGVsZXRlX21vZHVsZQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9kZWxldGVfbW9kdWxlCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBkZWxldGVfbW9kdWxlCitFTkQoZGVsZXRlX21vZHVsZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2R1cC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZHVwLlMKaW5kZXggNmNiOTI0Zi4uYjRkY2Q3MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZHVwLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZHVwLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZHVwCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGR1cAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1kdXA6CitFTlRSWShkdXApCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9kdXAKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZHVwCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBkdXAKK0VORChkdXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9kdXAzLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9kdXAzLlMKaW5kZXggNmEzNzUyYy4uMWQ5YzIzNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZHVwMy5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2R1cDMuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBkdXAzCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGR1cDMKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZHVwMzoKK0VOVFJZKGR1cDMpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9kdXAzCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2R1cDMKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGR1cDMKK0VORChkdXAzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZXBvbGxfY3JlYXRlMS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZXBvbGxfY3JlYXRlMS5TCmluZGV4IDBhYmFlZGEuLjg3NTQ4NzkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZXBvbGxfY3JlYXRlMQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBlcG9sbF9jcmVhdGUxCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWVwb2xsX2NyZWF0ZTE6CitFTlRSWShlcG9sbF9jcmVhdGUxKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZXBvbGxfY3JlYXRlMQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9lcG9sbF9jcmVhdGUxCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBlcG9sbF9jcmVhdGUxCitFTkQoZXBvbGxfY3JlYXRlMSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Vwb2xsX2N0bC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZXBvbGxfY3RsLlMKaW5kZXggMjBkNDM2Ny4uMTRjOTIwMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZXBvbGxfY3RsLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZXBvbGxfY3RsLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZXBvbGxfY3RsCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGVwb2xsX2N0bAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1lcG9sbF9jdGw6CitFTlRSWShlcG9sbF9jdGwpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9lcG9sbF9jdGwKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZXBvbGxfY3RsCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBlcG9sbF9jdGwKK0VORChlcG9sbF9jdGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9ldmVudGZkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9ldmVudGZkLlMKaW5kZXggZjEyYmM3ZC4uNjQ5NGRiYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZXZlbnRmZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2V2ZW50ZmQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBldmVudGZkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGV2ZW50ZmQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZXZlbnRmZDoKK0VOVFJZKGV2ZW50ZmQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9ldmVudGZkMgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9ldmVudGZkMgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZXZlbnRmZAorRU5EKGV2ZW50ZmQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9leGVjdmUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2V4ZWN2ZS5TCmluZGV4IDc1MGI0MDIuLjJkMjBiNTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2V4ZWN2ZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2V4ZWN2ZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGV4ZWN2ZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBleGVjdmUKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZXhlY3ZlOgorRU5UUlkoZXhlY3ZlKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZXhlY3ZlCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2V4ZWN2ZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZXhlY3ZlCitFTkQoZXhlY3ZlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmFjY2Vzc2F0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mYWNjZXNzYXQuUwppbmRleCBmZmE0ZjQyLi5lNjE2MTA2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mYWNjZXNzYXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mYWNjZXNzYXQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBmYWNjZXNzYXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZmFjY2Vzc2F0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWZhY2Nlc3NhdDoKK0VOVFJZKGZhY2Nlc3NhdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2ZhY2Nlc3NhdAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9mYWNjZXNzYXQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGZhY2Nlc3NhdAorRU5EKGZhY2Nlc3NhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZhbGxvY2F0ZTY0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mYWxsb2NhdGU2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMDU1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mYWxsb2NhdGU2NC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZmFsbG9jYXRlNjQpCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZmFsbG9jYXRlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQorICAgIG5vcAorICAgIC5zZXQgcmVvcmRlcgorRU5EKGZhbGxvY2F0ZTY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNoZGlyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2hkaXIuUwppbmRleCBhZTBiODgzLi5kNjgzYmFhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2hkaXIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2hkaXIuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBmY2hkaXIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZmNoZGlyCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWZjaGRpcjoKK0VOVFJZKGZjaGRpcikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2ZjaGRpcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9mY2hkaXIKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGZjaGRpcgorRU5EKGZjaGRpcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaG1vZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNobW9kLlMKaW5kZXggMjcyOTY0ZS4uMmE5NWNjMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNobW9kLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNobW9kLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZmNobW9kCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGZjaG1vZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1mY2htb2Q6CitFTlRSWShmY2htb2QpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9mY2htb2QKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZmNobW9kCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBmY2htb2QKK0VORChmY2htb2QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2htb2RhdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNobW9kYXQuUwppbmRleCAzODhkMjIxLi5kOWRlMDM2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2htb2RhdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaG1vZGF0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZmNobW9kYXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZmNobW9kYXQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZmNobW9kYXQ6CitFTlRSWShmY2htb2RhdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2ZjaG1vZGF0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2ZjaG1vZGF0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBmY2htb2RhdAorRU5EKGZjaG1vZGF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNob3duLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2hvd24uUwppbmRleCA1MmQ2ZTU5Li4xYWM5NDUxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2hvd24uUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2hvd24uUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBmY2hvd24KLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZmNob3duCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWZjaG93bjoKK0VOVFJZKGZjaG93bikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2ZjaG93bgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9mY2hvd24KICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGZjaG93bgorRU5EKGZjaG93bikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaG93bmF0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2hvd25hdC5TCmluZGV4IDY5MTNkNmMuLmJlMWEwMjEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaG93bmF0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNob3duYXQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBmY2hvd25hdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBmY2hvd25hdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1mY2hvd25hdDoKK0VOVFJZKGZjaG93bmF0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZmNob3duYXQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZmNob3duYXQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGZjaG93bmF0CitFTkQoZmNob3duYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mZGF0YXN5bmMuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZkYXRhc3luYy5TCmluZGV4IGExZDQwNTYuLjI0ZDY1NDEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZkYXRhc3luYy5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZkYXRhc3luYy5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGZkYXRhc3luYwotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBmZGF0YXN5bmMKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZmRhdGFzeW5jOgorRU5UUlkoZmRhdGFzeW5jKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZmRhdGFzeW5jCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2ZkYXRhc3luYwogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZmRhdGFzeW5jCitFTkQoZmRhdGFzeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmdldHhhdHRyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mZ2V0eGF0dHIuUwppbmRleCAxZDY0NWE1Li42NTE2ZmViIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mZ2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mZ2V0eGF0dHIuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBmZ2V0eGF0dHIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZmdldHhhdHRyCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWZnZXR4YXR0cjoKK0VOVFJZKGZnZXR4YXR0cikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2ZnZXR4YXR0cgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9mZ2V0eGF0dHIKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGZnZXR4YXR0cgorRU5EKGZnZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZsaXN0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZsaXN0eGF0dHIuUwppbmRleCAyY2I1M2M1Li4wYjcxNTMyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mbGlzdHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmxpc3R4YXR0ci5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGZsaXN0eGF0dHIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZmxpc3R4YXR0cgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1mbGlzdHhhdHRyOgorRU5UUlkoZmxpc3R4YXR0cikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2ZsaXN0eGF0dHIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZmxpc3R4YXR0cgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZmxpc3R4YXR0cgorRU5EKGZsaXN0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mbG9jay5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmxvY2suUwppbmRleCBjMTcyM2ExLi44ZDcwYzllIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mbG9jay5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Zsb2NrLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZmxvY2sKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZmxvY2sKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZmxvY2s6CitFTlRSWShmbG9jaykKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2Zsb2NrCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2Zsb2NrCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBmbG9jaworRU5EKGZsb2NrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUwppbmRleCAyNTI2YWUwLi5mYmEyZDZkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBmcmVtb3ZleGF0dHIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZnJlbW92ZXhhdHRyCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWZyZW1vdmV4YXR0cjoKK0VOVFJZKGZyZW1vdmV4YXR0cikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2ZyZW1vdmV4YXR0cgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9mcmVtb3ZleGF0dHIKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGZyZW1vdmV4YXR0cgorRU5EKGZyZW1vdmV4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzZXR4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnNldHhhdHRyLlMKaW5kZXggNDU1MmIwNy4uNjYzYzBkZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnNldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnNldHhhdHRyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZnNldHhhdHRyCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGZzZXR4YXR0cgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1mc2V0eGF0dHI6CitFTlRSWShmc2V0eGF0dHIpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9mc2V0eGF0dHIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZnNldHhhdHRyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBmc2V0eGF0dHIKK0VORChmc2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc3RhdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnN0YXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdlYWJmOC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc3RhdC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBmc3RhdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBmc3RhdAotCi1mc3RhdDoKLSAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2ZzdGF0NjQKLSAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCi0gICAgbm9wCi0xOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5Ci0gICAgbm9wCi0gICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBmc3RhdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnN0YXQ2NC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnN0YXQ2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNWMyM2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc3RhdDY0LlMKQEAgLTAsMCArMSwyMiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmc3RhdDY0KQorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2ZzdGF0NjQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CisgICAgbm9wCisgICAgLnNldCByZW9yZGVyCitFTkQoZnN0YXQ2NCkKKworICAgIC5nbG9ibCBmc3RhdAorICAgIC5lcXUgZnN0YXQsIGZzdGF0NjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzdGF0YXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzdGF0YXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc4ZjA5OS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc3RhdGF0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGZzdGF0YXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZnN0YXRhdAotCi1mc3RhdGF0OgotICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZnN0YXRhdDY0Ci0gICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQotICAgIG5vcAotMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQotICAgIG5vcAotICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZnN0YXRhdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnN0YXRhdDY0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc3RhdGF0NjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2I4ZTFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnN0YXRhdDY0LlMKQEAgLTAsMCArMSwyMiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmc3RhdGF0NjQpCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZnN0YXRhdDY0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQorICAgIG5vcAorICAgIC5zZXQgcmVvcmRlcgorRU5EKGZzdGF0YXQ2NCkKKworICAgIC5nbG9ibCBmc3RhdGF0CisgICAgLmVxdSBmc3RhdGF0LCBmc3RhdGF0NjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzeW5jLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc3luYy5TCmluZGV4IDM4M2JkMGMuLjgxOWYwZjIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzeW5jLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnN5bmMuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBmc3luYwotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBmc3luYworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1mc3luYzoKK0VOVFJZKGZzeW5jKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZnN5bmMKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZnN5bmMKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGZzeW5jCitFTkQoZnN5bmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mdHJ1bmNhdGUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Z0cnVuY2F0ZS5TCmluZGV4IDc5N2QyMzkuLjA1ODljODEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Z0cnVuY2F0ZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Z0cnVuY2F0ZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGZ0cnVuY2F0ZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBmdHJ1bmNhdGUKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZnRydW5jYXRlOgorRU5UUlkoZnRydW5jYXRlKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZnRydW5jYXRlCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2Z0cnVuY2F0ZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZnRydW5jYXRlCitFTkQoZnRydW5jYXRlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnRydW5jYXRlNjQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Z0cnVuY2F0ZTY0LlMKaW5kZXggZTdmN2Y4MS4uMDU5ZmY3NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnRydW5jYXRlNjQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mdHJ1bmNhdGU2NC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGZ0cnVuY2F0ZTY0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IGZ0cnVuY2F0ZTY0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWZ0cnVuY2F0ZTY0OgorRU5UUlkoZnRydW5jYXRlNjQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9mdHJ1bmNhdGU2NAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9mdHJ1bmNhdGU2NAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZnRydW5jYXRlNjQKK0VORChmdHJ1bmNhdGU2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Z1dGV4LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mdXRleC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWM4OGM4Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Z1dGV4LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGZ1dGV4Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IGZ1dGV4Ci0KLWZ1dGV4OgotICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZnV0ZXgKLSAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCi0gICAgbm9wCi0xOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5Ci0gICAgbm9wCi0gICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBmdXRleApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0ZGVudHMuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGRlbnRzLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiODAwNmEuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0ZGVudHMuUworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZ2V0ZGVudHMKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZ2V0ZGVudHMKLQotZ2V0ZGVudHM6Ci0gICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXRkZW50czY0Ci0gICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQotICAgIG5vcAotMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQotICAgIG5vcAotICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZ2V0ZGVudHMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGVnaWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGVnaWQuUwppbmRleCA1ZDc1NDIwLi44YWUyZDFlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRlZ2lkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0ZWdpZC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGdldGVnaWQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZ2V0ZWdpZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1nZXRlZ2lkOgorRU5UUlkoZ2V0ZWdpZCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2dldGVnaWQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZ2V0ZWdpZAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZ2V0ZWdpZAorRU5EKGdldGVnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRldWlkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRldWlkLlMKaW5kZXggZjg3OGVhNy4uY2Y1Y2Y2YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0ZXVpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGV1aWQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBnZXRldWlkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldGV1aWQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZ2V0ZXVpZDoKK0VOVFJZKGdldGV1aWQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXRldWlkCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldGV1aWQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGdldGV1aWQKK0VORChnZXRldWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0Z2lkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRnaWQuUwppbmRleCAyMDdkMWExLi45YmQxZmMzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRnaWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRnaWQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBnZXRnaWQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZ2V0Z2lkCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWdldGdpZDoKK0VOVFJZKGdldGdpZCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2dldGdpZAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9nZXRnaWQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGdldGdpZAorRU5EKGdldGdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGdyb3Vwcy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKaW5kZXggZDBhMTBhMy4uMmVkYTE4NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZ2V0Z3JvdXBzCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldGdyb3VwcworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1nZXRncm91cHM6CitFTlRSWShnZXRncm91cHMpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXRncm91cHMKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZ2V0Z3JvdXBzCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBnZXRncm91cHMKK0VORChnZXRncm91cHMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRpdGltZXIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGl0aW1lci5TCmluZGV4IDQwZjkwZjIuLjJlMzgyYzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGl0aW1lci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGl0aW1lci5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGdldGl0aW1lcgotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBnZXRpdGltZXIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZ2V0aXRpbWVyOgorRU5UUlkoZ2V0aXRpbWVyKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZ2V0aXRpbWVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldGl0aW1lcgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZ2V0aXRpbWVyCitFTkQoZ2V0aXRpbWVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKaW5kZXggNmQ0OTFkZS4uODY0Mjc5OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRwZWVybmFtZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGdldHBlZXJuYW1lCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldHBlZXJuYW1lCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWdldHBlZXJuYW1lOgorRU5UUlkoZ2V0cGVlcm5hbWUpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXRwZWVybmFtZQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9nZXRwZWVybmFtZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZ2V0cGVlcm5hbWUKK0VORChnZXRwZWVybmFtZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHBnaWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHBnaWQuUwppbmRleCBkYzZlYzk2Li41NjJiOWNlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRwZ2lkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cGdpZC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGdldHBnaWQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZ2V0cGdpZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1nZXRwZ2lkOgorRU5UUlkoZ2V0cGdpZCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2dldHBnaWQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZ2V0cGdpZAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZ2V0cGdpZAorRU5EKGdldHBnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRwaWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHBpZC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDRkMjU2Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHBpZC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBnZXRwaWQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZ2V0cGlkCi0KLWdldHBpZDoKLSAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2dldHBpZAotICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKLSAgICBub3AKLTE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKLSAgICBub3AKLSAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGdldHBpZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cHBpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cHBpZC5TCmluZGV4IDE5NzM0MjQuLmFmZmYwYjkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHBwaWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRwcGlkLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZ2V0cHBpZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBnZXRwcGlkCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWdldHBwaWQ6CitFTlRSWShnZXRwcGlkKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZ2V0cHBpZAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9nZXRwcGlkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBnZXRwcGlkCitFTkQoZ2V0cHBpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJlc2dpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKaW5kZXggYjc4ZTkwYy4uMjQ4ZDNmOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZ2V0cmVzZ2lkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldHJlc2dpZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1nZXRyZXNnaWQ6CitFTlRSWShnZXRyZXNnaWQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXRyZXNnaWQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZ2V0cmVzZ2lkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBnZXRyZXNnaWQKK0VORChnZXRyZXNnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRyZXN1aWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJlc3VpZC5TCmluZGV4IDMzNmMwNDkuLjkyNGI2Y2QgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJlc3VpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJlc3VpZC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGdldHJlc3VpZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBnZXRyZXN1aWQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZ2V0cmVzdWlkOgorRU5UUlkoZ2V0cmVzdWlkKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZ2V0cmVzdWlkCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldHJlc3VpZAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZ2V0cmVzdWlkCitFTkQoZ2V0cmVzdWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cmxpbWl0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRybGltaXQuUwppbmRleCA1NTdjMmMxLi4xOTU3MGQ2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRybGltaXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRybGltaXQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBnZXRybGltaXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZ2V0cmxpbWl0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWdldHJsaW1pdDoKK0VOVFJZKGdldHJsaW1pdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2dldHJsaW1pdAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9nZXRybGltaXQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGdldHJsaW1pdAorRU5EKGdldHJsaW1pdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJ1c2FnZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cnVzYWdlLlMKaW5kZXggYzI3NTBmOS4uNzViYzhiYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cnVzYWdlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cnVzYWdlLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZ2V0cnVzYWdlCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldHJ1c2FnZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1nZXRydXNhZ2U6CitFTlRSWShnZXRydXNhZ2UpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXRydXNhZ2UKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZ2V0cnVzYWdlCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBnZXRydXNhZ2UKK0VORChnZXRydXNhZ2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRzaWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHNpZC5TCmluZGV4IDljZWI2NWQuLjY0MzZlY2QgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHNpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHNpZC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGdldHNpZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBnZXRzaWQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZ2V0c2lkOgorRU5UUlkoZ2V0c2lkKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZ2V0c2lkCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldHNpZAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZ2V0c2lkCitFTkQoZ2V0c2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0c29ja25hbWUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKaW5kZXggNDNiMjhjMi4uZmZhZGQ5MiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0c29ja25hbWUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGdldHNvY2tuYW1lCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldHNvY2tuYW1lCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWdldHNvY2tuYW1lOgorRU5UUlkoZ2V0c29ja25hbWUpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXRzb2NrbmFtZQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9nZXRzb2NrbmFtZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZ2V0c29ja25hbWUKK0VORChnZXRzb2NrbmFtZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHNvY2tvcHQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHNvY2tvcHQuUwppbmRleCBhZmZlNTM5Li42ZWJlMTVlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0c29ja29wdC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGdldHNvY2tvcHQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZ2V0c29ja29wdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1nZXRzb2Nrb3B0OgorRU5UUlkoZ2V0c29ja29wdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2dldHNvY2tvcHQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZ2V0c29ja29wdAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZ2V0c29ja29wdAorRU5EKGdldHNvY2tvcHQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXR0aWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHRpZC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjU4ZWYyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHRpZC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBnZXR0aWQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZ2V0dGlkCi0KLWdldHRpZDoKLSAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2dldHRpZAotICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKLSAgICBub3AKLTE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKLSAgICBub3AKLSAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGdldHRpZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUwppbmRleCAwMDY3NTJlLi42NzJmYWEzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBnZXR0aW1lb2ZkYXkKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZ2V0dGltZW9mZGF5CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWdldHRpbWVvZmRheToKK0VOVFJZKGdldHRpbWVvZmRheSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2dldHRpbWVvZmRheQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9nZXR0aW1lb2ZkYXkKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGdldHRpbWVvZmRheQorRU5EKGdldHRpbWVvZmRheSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHVpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0dWlkLlMKaW5kZXggNzQ3MzE4YS4uNTg1ODYzMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0dWlkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0dWlkLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZ2V0dWlkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldHVpZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1nZXR1aWQ6CitFTlRSWShnZXR1aWQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXR1aWQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZ2V0dWlkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBnZXR1aWQKK0VORChnZXR1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXR4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0eGF0dHIuUwppbmRleCAyZjgyYzRjLi4yOGM3ZmU2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHhhdHRyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZ2V0eGF0dHIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZ2V0eGF0dHIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZ2V0eGF0dHI6CitFTlRSWShnZXR4YXR0cikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2dldHhhdHRyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldHhhdHRyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBnZXR4YXR0cgorRU5EKGdldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKaW5kZXggZWU2NDRiMy4uOTg5NjE0YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pbml0X21vZHVsZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGluaXRfbW9kdWxlCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGluaXRfbW9kdWxlCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWluaXRfbW9kdWxlOgorRU5UUlkoaW5pdF9tb2R1bGUpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9pbml0X21vZHVsZQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9pbml0X21vZHVsZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgaW5pdF9tb2R1bGUKK0VORChpbml0X21vZHVsZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCmluZGV4IGYxYzRkOTIuLjdkMzMxNWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBpbm90aWZ5X2FkZF93YXRjaAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBpbm90aWZ5X2FkZF93YXRjaAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1pbm90aWZ5X2FkZF93YXRjaDoKK0VOVFJZKGlub3RpZnlfYWRkX3dhdGNoKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGlub3RpZnlfYWRkX3dhdGNoCitFTkQoaW5vdGlmeV9hZGRfd2F0Y2gpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pbm90aWZ5X2luaXQxLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pbm90aWZ5X2luaXQxLlMKaW5kZXggYzNmY2Y0OC4uZTRlYzI2NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBpbm90aWZ5X2luaXQxCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGlub3RpZnlfaW5pdDEKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotaW5vdGlmeV9pbml0MToKK0VOVFJZKGlub3RpZnlfaW5pdDEpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9pbm90aWZ5X2luaXQxCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2lub3RpZnlfaW5pdDEKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGlub3RpZnlfaW5pdDEKK0VORChpbm90aWZ5X2luaXQxKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCmluZGV4IDEzMTkxYWYuLmVlYzk4NTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgaW5vdGlmeV9ybV93YXRjaAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBpbm90aWZ5X3JtX3dhdGNoCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWlub3RpZnlfcm1fd2F0Y2g6CitFTlRSWShpbm90aWZ5X3JtX3dhdGNoKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfaW5vdGlmeV9ybV93YXRjaAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9pbm90aWZ5X3JtX3dhdGNoCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBpbm90aWZ5X3JtX3dhdGNoCitFTkQoaW5vdGlmeV9ybV93YXRjaCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lvcHJpb19nZXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lvcHJpb19nZXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhiZDFkMy4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pb3ByaW9fZ2V0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGlvcHJpb19nZXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgaW9wcmlvX2dldAotCi1pb3ByaW9fZ2V0OgotICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfaW9wcmlvX2dldAotICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKLSAgICBub3AKLTE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKLSAgICBub3AKLSAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGlvcHJpb19nZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lvcHJpb19zZXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lvcHJpb19zZXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzViM2JkYy4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pb3ByaW9fc2V0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGlvcHJpb19zZXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgaW9wcmlvX3NldAotCi1pb3ByaW9fc2V0OgotICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfaW9wcmlvX3NldAotICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKLSAgICBub3AKLTE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKLSAgICBub3AKLSAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGlvcHJpb19zZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2tpbGwuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2tpbGwuUwppbmRleCAyMGE0ODRlLi40MTVkYTczIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9raWxsLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMva2lsbC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGtpbGwKLSAgICAuYWxpZ24gNAotICAgIC5lbnQga2lsbAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1raWxsOgorRU5UUlkoa2lsbCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2tpbGwKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfa2lsbAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQga2lsbAorRU5EKGtpbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9rbG9nY3RsLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9rbG9nY3RsLlMKaW5kZXggNWQzMGRiMi4uMTIzZDhhMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMva2xvZ2N0bC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2tsb2djdGwuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBrbG9nY3RsCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGtsb2djdGwKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAota2xvZ2N0bDoKK0VOVFJZKGtsb2djdGwpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zeXNsb2cKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc3lzbG9nCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBrbG9nY3RsCitFTkQoa2xvZ2N0bCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xnZXR4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGdldHhhdHRyLlMKaW5kZXggNjI2NmFhZi4uYTk5MTZkOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGdldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGdldHhhdHRyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgbGdldHhhdHRyCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGxnZXR4YXR0cgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1sZ2V0eGF0dHI6CitFTlRSWShsZ2V0eGF0dHIpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9sZ2V0eGF0dHIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfbGdldHhhdHRyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBsZ2V0eGF0dHIKK0VORChsZ2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9saW5rYXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xpbmthdC5TCmluZGV4IGRhZTA3ZGQuLmEwNWE5OTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xpbmthdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xpbmthdC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGxpbmthdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBsaW5rYXQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotbGlua2F0OgorRU5UUlkobGlua2F0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfbGlua2F0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2xpbmthdAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgbGlua2F0CitFTkQobGlua2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGlzdGVuLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9saXN0ZW4uUwppbmRleCBmMmU2MDgzLi43YmIyZWM4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9saXN0ZW4uUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9saXN0ZW4uUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBsaXN0ZW4KLSAgICAuYWxpZ24gNAotICAgIC5lbnQgbGlzdGVuCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWxpc3RlbjoKK0VOVFJZKGxpc3RlbikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2xpc3RlbgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9saXN0ZW4KICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGxpc3RlbgorRU5EKGxpc3RlbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xpc3R4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGlzdHhhdHRyLlMKaW5kZXggZTc1MjM0MC4uYzE2MDE3OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGlzdHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGlzdHhhdHRyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgbGlzdHhhdHRyCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGxpc3R4YXR0cgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1saXN0eGF0dHI6CitFTlRSWShsaXN0eGF0dHIpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9saXN0eGF0dHIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfbGlzdHhhdHRyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBsaXN0eGF0dHIKK0VORChsaXN0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sbGlzdHhhdHRyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sbGlzdHhhdHRyLlMKaW5kZXggOWRjODY4ZS4uOWJmMDViMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGxpc3R4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xsaXN0eGF0dHIuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBsbGlzdHhhdHRyCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGxsaXN0eGF0dHIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotbGxpc3R4YXR0cjoKK0VOVFJZKGxsaXN0eGF0dHIpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9sbGlzdHhhdHRyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2xsaXN0eGF0dHIKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGxsaXN0eGF0dHIKK0VORChsbGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9scmVtb3ZleGF0dHIuUwppbmRleCBkN2U2NjA5Li5mZTczZGRiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9scmVtb3ZleGF0dHIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9scmVtb3ZleGF0dHIuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBscmVtb3ZleGF0dHIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgbHJlbW92ZXhhdHRyCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWxyZW1vdmV4YXR0cjoKK0VOVFJZKGxyZW1vdmV4YXR0cikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2xyZW1vdmV4YXR0cgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9scmVtb3ZleGF0dHIKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGxyZW1vdmV4YXR0cgorRU5EKGxyZW1vdmV4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xzZWVrLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sc2Vlay5TCmluZGV4IDI2OWNjOTUuLjZkNmI0ZTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xzZWVrLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbHNlZWsuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBsc2VlawotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBsc2VlaworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1sc2VlazoKK0VOVFJZKGxzZWVrKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfbHNlZWsKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfbHNlZWsKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGxzZWVrCitFTkQobHNlZWspCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sc2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xzZXR4YXR0ci5TCmluZGV4IDJkZmQyNGEuLjY5ZWEwYTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xzZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xzZXR4YXR0ci5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGxzZXR4YXR0cgotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBsc2V0eGF0dHIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotbHNldHhhdHRyOgorRU5UUlkobHNldHhhdHRyKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfbHNldHhhdHRyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2xzZXR4YXR0cgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgbHNldHhhdHRyCitFTkQobHNldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWFkdmlzZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWFkdmlzZS5TCmluZGV4IDgzMTgyNzIuLjdkNjdiODAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21hZHZpc2UuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tYWR2aXNlLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgbWFkdmlzZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBtYWR2aXNlCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLW1hZHZpc2U6CitFTlRSWShtYWR2aXNlKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfbWFkdmlzZQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9tYWR2aXNlCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBtYWR2aXNlCitFTkQobWFkdmlzZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21pbmNvcmUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21pbmNvcmUuUwppbmRleCA2MjlhNDY4Li45NmY1ZTI5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9taW5jb3JlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWluY29yZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIG1pbmNvcmUKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgbWluY29yZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1taW5jb3JlOgorRU5UUlkobWluY29yZSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX21pbmNvcmUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfbWluY29yZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgbWluY29yZQorRU5EKG1pbmNvcmUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9ta2RpcmF0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9ta2RpcmF0LlMKaW5kZXggM2Y4YmMxOS4uNTVkZDk3NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWtkaXJhdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21rZGlyYXQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBta2RpcmF0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IG1rZGlyYXQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotbWtkaXJhdDoKK0VOVFJZKG1rZGlyYXQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9ta2RpcmF0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX21rZGlyYXQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIG1rZGlyYXQKK0VORChta2RpcmF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWtub2RhdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWtub2RhdC5TCmluZGV4IGZjMDViYjMuLjFhMDNhOGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21rbm9kYXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9ta25vZGF0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgbWtub2RhdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBta25vZGF0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLW1rbm9kYXQ6CitFTlRSWShta25vZGF0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfbWtub2RhdAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9ta25vZGF0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBta25vZGF0CitFTkQobWtub2RhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21sb2NrLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tbG9jay5TCmluZGV4IDIwY2FjZGEuLjNjZjdjMWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21sb2NrLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWxvY2suUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBtbG9jawotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBtbG9jaworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1tbG9jazoKK0VOVFJZKG1sb2NrKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfbWxvY2sKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfbWxvY2sKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIG1sb2NrCitFTkQobWxvY2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tbG9ja2FsbC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWxvY2thbGwuUwppbmRleCAwYWFjMDg3Li4zYjkwZjQxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tbG9ja2FsbC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21sb2NrYWxsLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgbWxvY2thbGwKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgbWxvY2thbGwKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotbWxvY2thbGw6CitFTlRSWShtbG9ja2FsbCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX21sb2NrYWxsCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX21sb2NrYWxsCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBtbG9ja2FsbAorRU5EKG1sb2NrYWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbW91bnQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21vdW50LlMKaW5kZXggMWY5NTFjZS4uZmRmMjk5ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbW91bnQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tb3VudC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIG1vdW50Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IG1vdW50CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLW1vdW50OgorRU5UUlkobW91bnQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9tb3VudAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9tb3VudAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgbW91bnQKK0VORChtb3VudCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21wcm90ZWN0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tcHJvdGVjdC5TCmluZGV4IDdkOWU3ODQuLjU2MTgzMTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21wcm90ZWN0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXByb3RlY3QuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBtcHJvdGVjdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBtcHJvdGVjdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1tcHJvdGVjdDoKK0VOVFJZKG1wcm90ZWN0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfbXByb3RlY3QKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfbXByb3RlY3QKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIG1wcm90ZWN0CitFTkQobXByb3RlY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tcmVtYXAuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21yZW1hcC5TCmluZGV4IDIyZGRkYTkuLjdjYmI5NGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21yZW1hcC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21yZW1hcC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIG1yZW1hcAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBtcmVtYXAKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotbXJlbWFwOgorRU5UUlkobXJlbWFwKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfbXJlbWFwCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX21yZW1hcAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgbXJlbWFwCitFTkQobXJlbWFwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXN5bmMuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21zeW5jLlMKaW5kZXggNDk2OTQzMy4uZmI3NDYyZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXN5bmMuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tc3luYy5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIG1zeW5jCi0gICAgLmFsaWduIDQKLSAgICAuZW50IG1zeW5jCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLW1zeW5jOgorRU5UUlkobXN5bmMpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9tc3luYworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9tc3luYwogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgbXN5bmMKK0VORChtc3luYykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL211bmxvY2suUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL211bmxvY2suUwppbmRleCA1OWYxZDQ0Li42YzY1YzAyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tdW5sb2NrLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXVubG9jay5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIG11bmxvY2sKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgbXVubG9jaworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1tdW5sb2NrOgorRU5UUlkobXVubG9jaykKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX211bmxvY2sKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfbXVubG9jawogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgbXVubG9jaworRU5EKG11bmxvY2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tdW5sb2NrYWxsLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tdW5sb2NrYWxsLlMKaW5kZXggZDBhOGU5Zi4uZTMwZGRkYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXVubG9ja2FsbC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL211bmxvY2thbGwuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBtdW5sb2NrYWxsCi0gICAgLmFsaWduIDQKLSAgICAuZW50IG11bmxvY2thbGwKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotbXVubG9ja2FsbDoKK0VOVFJZKG11bmxvY2thbGwpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9tdW5sb2NrYWxsCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX211bmxvY2thbGwKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIG11bmxvY2thbGwKK0VORChtdW5sb2NrYWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXVubWFwLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tdW5tYXAuUwppbmRleCBkNGMxMDU3Li45MDNlZGRlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tdW5tYXAuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tdW5tYXAuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBtdW5tYXAKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgbXVubWFwCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLW11bm1hcDoKK0VOVFJZKG11bm1hcCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX211bm1hcAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9tdW5tYXAKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIG11bm1hcAorRU5EKG11bm1hcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbmFub3NsZWVwLlMKaW5kZXggYWQzYjBmOS4uOGRhZTg4YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbmFub3NsZWVwLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbmFub3NsZWVwLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgbmFub3NsZWVwCi0gICAgLmFsaWduIDQKLSAgICAuZW50IG5hbm9zbGVlcAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1uYW5vc2xlZXA6CitFTlRSWShuYW5vc2xlZXApCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9uYW5vc2xlZXAKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfbmFub3NsZWVwCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBuYW5vc2xlZXAKK0VORChuYW5vc2xlZXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGQ4Yjg1Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBwZXJmX2V2ZW50X29wZW4KLSAgICAuYWxpZ24gNAotICAgIC5lbnQgcGVyZl9ldmVudF9vcGVuCi0KLXBlcmZfZXZlbnRfb3BlbjoKLSAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3BlcmZfZXZlbnRfb3BlbgotICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKLSAgICBub3AKLTE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKLSAgICBub3AKLSAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHBlcmZfZXZlbnRfb3BlbgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcGVyc29uYWxpdHkuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMKaW5kZXggNTlhYWVhYy4uMmY1MWQzOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcGVyc29uYWxpdHkuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wZXJzb25hbGl0eS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHBlcnNvbmFsaXR5Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IHBlcnNvbmFsaXR5CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXBlcnNvbmFsaXR5OgorRU5UUlkocGVyc29uYWxpdHkpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9wZXJzb25hbGl0eQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9wZXJzb25hbGl0eQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgcGVyc29uYWxpdHkKK0VORChwZXJzb25hbGl0eSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BpcGUyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9waXBlMi5TCmluZGV4IDc5OGJkN2IuLmIwNjMwOWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BpcGUyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcGlwZTIuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBwaXBlMgotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBwaXBlMgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1waXBlMjoKK0VOVFJZKHBpcGUyKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcGlwZTIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfcGlwZTIKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHBpcGUyCitFTkQocGlwZTIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wcmN0bC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHJjdGwuUwppbmRleCA1ZTlhMjhkLi43MTU0NGVlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wcmN0bC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3ByY3RsLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgcHJjdGwKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgcHJjdGwKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotcHJjdGw6CitFTlRSWShwcmN0bCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3ByY3RsCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3ByY3RsCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBwcmN0bAorRU5EKHByY3RsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHJlYWQ2NC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHJlYWQ2NC5TCmluZGV4IDg3MGIxMzguLjllNzI0OGIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3ByZWFkNjQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wcmVhZDY0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgcHJlYWQ2NAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBwcmVhZDY0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXByZWFkNjQ6CitFTlRSWShwcmVhZDY0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcHJlYWQ2NAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9wcmVhZDY0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBwcmVhZDY0CitFTkQocHJlYWQ2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BybGltaXQ2NC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHJsaW1pdDY0LlMKaW5kZXggMTdlOTE1Ny4uY2E5MTNkZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHJsaW1pdDY0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHJsaW1pdDY0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgcHJsaW1pdDY0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IHBybGltaXQ2NAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1wcmxpbWl0NjQ6CitFTlRSWShwcmxpbWl0NjQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9wcmxpbWl0NjQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfcHJsaW1pdDY0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBwcmxpbWl0NjQKK0VORChwcmxpbWl0NjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wd3JpdGU2NC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHdyaXRlNjQuUwppbmRleCAxZTgwOGZmLi5hYzIwNmFhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wd3JpdGU2NC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3B3cml0ZTY0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgcHdyaXRlNjQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgcHdyaXRlNjQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotcHdyaXRlNjQ6CitFTlRSWShwd3JpdGU2NCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3B3cml0ZTY0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3B3cml0ZTY0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBwd3JpdGU2NAorRU5EKHB3cml0ZTY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVhZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVhZC5TCmluZGV4IGM2NDk4MzcuLjEzNTViNjYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWFkLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgcmVhZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCByZWFkCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXJlYWQ6CitFTlRSWShyZWFkKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcmVhZAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9yZWFkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCByZWFkCitFTkQocmVhZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWRhaGVhZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVhZGFoZWFkLlMKaW5kZXggMDllYWI5ZS4uYjI4ZGYwOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVhZGFoZWFkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVhZGFoZWFkLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgcmVhZGFoZWFkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHJlYWRhaGVhZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1yZWFkYWhlYWQ6CitFTlRSWShyZWFkYWhlYWQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9yZWFkYWhlYWQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfcmVhZGFoZWFkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCByZWFkYWhlYWQKK0VORChyZWFkYWhlYWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWFkbGlua2F0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWFkbGlua2F0LlMKaW5kZXggM2U1ZDcyZi4uNWNmODRhMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVhZGxpbmthdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWRsaW5rYXQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCByZWFkbGlua2F0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IHJlYWRsaW5rYXQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotcmVhZGxpbmthdDoKK0VOVFJZKHJlYWRsaW5rYXQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9yZWFkbGlua2F0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3JlYWRsaW5rYXQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHJlYWRsaW5rYXQKK0VORChyZWFkbGlua2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVhZHYuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWR2LlMKaW5kZXggMWYzNjdiZS4uNTc5NTJhMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVhZHYuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWFkdi5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHJlYWR2Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IHJlYWR2CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXJlYWR2OgorRU5UUlkocmVhZHYpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9yZWFkdgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9yZWFkdgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgcmVhZHYKK0VORChyZWFkdikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlY3Zmcm9tLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWN2ZnJvbS5TCmluZGV4IDNjMjMwM2MuLjcwN2JhNGIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlY3Zmcm9tLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVjdmZyb20uUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCByZWN2ZnJvbQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCByZWN2ZnJvbQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1yZWN2ZnJvbToKK0VOVFJZKHJlY3Zmcm9tKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcmVjdmZyb20KKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfcmVjdmZyb20KICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHJlY3Zmcm9tCitFTkQocmVjdmZyb20pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWN2bW1zZy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVjdm1tc2cuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTZkMGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVjdm1tc2cuUwpAQCAtMCwwICsxLDE5IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHJlY3ZtbXNnKQorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3JlY3ZtbXNnCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQorICAgIG5vcAorICAgIC5zZXQgcmVvcmRlcgorRU5EKHJlY3ZtbXNnKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVjdm1zZy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVjdm1zZy5TCmluZGV4IGFhZjAyMmYuLmZkY2FjMzIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlY3Ztc2cuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWN2bXNnLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgcmVjdm1zZwotICAgIC5hbGlnbiA0Ci0gICAgLmVudCByZWN2bXNnCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXJlY3Ztc2c6CitFTlRSWShyZWN2bXNnKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcmVjdm1zZworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9yZWN2bXNnCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCByZWN2bXNnCitFTkQocmVjdm1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZW1vdmV4YXR0ci5TCmluZGV4IDI5ZGY1ZDIuLmQ5OWUxYWUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCByZW1vdmV4YXR0cgotICAgIC5hbGlnbiA0Ci0gICAgLmVudCByZW1vdmV4YXR0cgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1yZW1vdmV4YXR0cjoKK0VOVFJZKHJlbW92ZXhhdHRyKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcmVtb3ZleGF0dHIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfcmVtb3ZleGF0dHIKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHJlbW92ZXhhdHRyCitFTkQocmVtb3ZleGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZW5hbWVhdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVuYW1lYXQuUwppbmRleCBiN2MyMTBlLi5jODY1ZDc0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZW5hbWVhdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlbmFtZWF0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgcmVuYW1lYXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgcmVuYW1lYXQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotcmVuYW1lYXQ6CitFTlRSWShyZW5hbWVhdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3JlbmFtZWF0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3JlbmFtZWF0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCByZW5hbWVhdAorRU5EKHJlbmFtZWF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCmluZGV4IDZkNjNmZWMuLjFjNzNhZjYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2NoZWRfZ2V0X3ByaW9yaXR5X21heAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNjaGVkX2dldF9wcmlvcml0eV9tYXg6CitFTlRSWShzY2hlZF9nZXRfcHJpb3JpdHlfbWF4KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4CitFTkQoc2NoZWRfZ2V0X3ByaW9yaXR5X21heCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUwppbmRleCBkZTg4YjNlLi5iNjliNzJiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNjaGVkX2dldF9wcmlvcml0eV9taW4KLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zY2hlZF9nZXRfcHJpb3JpdHlfbWluOgorRU5UUlkoc2NoZWRfZ2V0X3ByaW9yaXR5X21pbikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4KKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgorRU5EKHNjaGVkX2dldF9wcmlvcml0eV9taW4pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUwppbmRleCBhZTI2MWRiLi4zODcyNTdhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2NoZWRfZ2V0cGFyYW0KLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2NoZWRfZ2V0cGFyYW0KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2NoZWRfZ2V0cGFyYW06CitFTlRSWShzY2hlZF9nZXRwYXJhbSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NjaGVkX2dldHBhcmFtCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NjaGVkX2dldHBhcmFtCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzY2hlZF9nZXRwYXJhbQorRU5EKHNjaGVkX2dldHBhcmFtKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUwppbmRleCA2YTRlNmY2Li45YjI5M2RiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzY2hlZF9nZXRzY2hlZHVsZXIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2NoZWRfZ2V0c2NoZWR1bGVyCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNjaGVkX2dldHNjaGVkdWxlcjoKK0VOVFJZKHNjaGVkX2dldHNjaGVkdWxlcikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NjaGVkX2dldHNjaGVkdWxlcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNjaGVkX2dldHNjaGVkdWxlcgorRU5EKHNjaGVkX2dldHNjaGVkdWxlcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKaW5kZXggNDM2ZjhiMy4uM2Q3YjhhOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2NoZWRfcnJfZ2V0X2ludGVydmFsCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zY2hlZF9ycl9nZXRfaW50ZXJ2YWw6CitFTlRSWShzY2hlZF9ycl9nZXRfaW50ZXJ2YWwpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwKK0VORChzY2hlZF9ycl9nZXRfaW50ZXJ2YWwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUwppbmRleCA5OGJmNDU4Li5hMGU5ZjZjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2NoZWRfc2V0YWZmaW5pdHkKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2NoZWRfc2V0YWZmaW5pdHkKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2NoZWRfc2V0YWZmaW5pdHk6CitFTlRSWShzY2hlZF9zZXRhZmZpbml0eSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NjaGVkX3NldGFmZmluaXR5CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NjaGVkX3NldGFmZmluaXR5CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzY2hlZF9zZXRhZmZpbml0eQorRU5EKHNjaGVkX3NldGFmZmluaXR5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKaW5kZXggMmMwM2U5My4uYThhODk4MiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNjaGVkX3NldHBhcmFtCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNjaGVkX3NldHBhcmFtCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNjaGVkX3NldHBhcmFtOgorRU5UUlkoc2NoZWRfc2V0cGFyYW0pCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zY2hlZF9zZXRwYXJhbQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zY2hlZF9zZXRwYXJhbQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2NoZWRfc2V0cGFyYW0KK0VORChzY2hlZF9zZXRwYXJhbSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKaW5kZXggYWRiMWYxNC4uYTJjZDdmYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2NoZWRfc2V0c2NoZWR1bGVyCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNjaGVkX3NldHNjaGVkdWxlcgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zY2hlZF9zZXRzY2hlZHVsZXI6CitFTlRSWShzY2hlZF9zZXRzY2hlZHVsZXIpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzY2hlZF9zZXRzY2hlZHVsZXIKK0VORChzY2hlZF9zZXRzY2hlZHVsZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF95aWVsZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfeWllbGQuUwppbmRleCBjYmU3OTljLi4yOTUyNjZmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF95aWVsZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2NoZWRfeWllbGQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2NoZWRfeWllbGQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2NoZWRfeWllbGQ6CitFTlRSWShzY2hlZF95aWVsZCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NjaGVkX3lpZWxkCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NjaGVkX3lpZWxkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzY2hlZF95aWVsZAorRU5EKHNjaGVkX3lpZWxkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZGZpbGUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRmaWxlLlMKaW5kZXggMjE5YTMxMS4uNWU1ZTg4NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZGZpbGUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZW5kZmlsZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNlbmRmaWxlCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNlbmRmaWxlCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNlbmRmaWxlOgorRU5UUlkoc2VuZGZpbGUpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zZW5kZmlsZQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZW5kZmlsZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2VuZGZpbGUKK0VORChzZW5kZmlsZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRmaWxlNjQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRmaWxlNjQuUwppbmRleCA3NjY5OTczLi43OGYxOTA4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZW5kZmlsZTY0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZGZpbGU2NC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNlbmRmaWxlNjQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2VuZGZpbGU2NAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zZW5kZmlsZTY0OgorRU5UUlkoc2VuZGZpbGU2NCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NlbmRmaWxlNjQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2VuZGZpbGU2NAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2VuZGZpbGU2NAorRU5EKHNlbmRmaWxlNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZW5kbW1zZy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZG1tc2cuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGM3NTc2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZG1tc2cuUwpAQCAtMCwwICsxLDE5IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNlbmRtbXNnKQorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NlbmRtbXNnCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQorICAgIG5vcAorICAgIC5zZXQgcmVvcmRlcgorRU5EKHNlbmRtbXNnKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZG1zZy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZG1zZy5TCmluZGV4IGZhYTRjZjMuLjg4YzY1M2UgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRtc2cuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZW5kbXNnLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2VuZG1zZwotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzZW5kbXNnCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNlbmRtc2c6CitFTlRSWShzZW5kbXNnKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2VuZG1zZworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZW5kbXNnCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzZW5kbXNnCitFTkQoc2VuZG1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmR0by5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZHRvLlMKaW5kZXggODBhNjExMC4uZWYzZmE5ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZHRvLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZHRvLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2VuZHRvCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNlbmR0bworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zZW5kdG86CitFTlRSWShzZW5kdG8pCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zZW5kdG8KKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2VuZHRvCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzZW5kdG8KK0VORChzZW5kdG8pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRmc2dpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0ZnNnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNThkMmMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0ZnNnaWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldGZzZ2lkKQorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NldGZzZ2lkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQorICAgIG5vcAorICAgIC5zZXQgcmVvcmRlcgorRU5EKHNldGZzZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0ZnN1aWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGZzdWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc2ZmQxNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGZzdWlkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRmc3VpZCkKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZXRmc3VpZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORChzZXRmc3VpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGdpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0Z2lkLlMKaW5kZXggN2U0NjBiOC4uNDQxMjdjZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0Z2lkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0Z2lkLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2V0Z2lkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNldGdpZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zZXRnaWQ6CitFTlRSWShzZXRnaWQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zZXRnaWQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2V0Z2lkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzZXRnaWQKK0VORChzZXRnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRncm91cHMuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGdyb3Vwcy5TCmluZGV4IGY4OWE0YTQuLmJlNGRjMTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGdyb3Vwcy5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGdyb3Vwcy5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNldGdyb3VwcwotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzZXRncm91cHMKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2V0Z3JvdXBzOgorRU5UUlkoc2V0Z3JvdXBzKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2V0Z3JvdXBzCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NldGdyb3VwcwogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2V0Z3JvdXBzCitFTkQoc2V0Z3JvdXBzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0aXRpbWVyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRpdGltZXIuUwppbmRleCA1YTE4NTBhLi45NjhiNDUzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRpdGltZXIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRpdGltZXIuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZXRpdGltZXIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2V0aXRpbWVyCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNldGl0aW1lcjoKK0VOVFJZKHNldGl0aW1lcikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NldGl0aW1lcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZXRpdGltZXIKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNldGl0aW1lcgorRU5EKHNldGl0aW1lcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldG5zLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRucy5TCmluZGV4IGZkNDUyOWUuLmE5MjcwZWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldG5zLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0bnMuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZXRucwotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzZXRucworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zZXRuczoKK0VOVFJZKHNldG5zKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2V0bnMKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2V0bnMKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNldG5zCitFTkQoc2V0bnMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRwZ2lkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRwZ2lkLlMKaW5kZXggZDQxZTAxYy4uZDJkYjYyZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cGdpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHBnaWQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZXRwZ2lkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNldHBnaWQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2V0cGdpZDoKK0VOVFJZKHNldHBnaWQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zZXRwZ2lkCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NldHBnaWQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNldHBnaWQKK0VORChzZXRwZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cHJpb3JpdHkuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHByaW9yaXR5LlMKaW5kZXggNDQzZDAxNy4uOWI2ODMzNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cHJpb3JpdHkuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRwcmlvcml0eS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNldHByaW9yaXR5Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IHNldHByaW9yaXR5CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNldHByaW9yaXR5OgorRU5UUlkoc2V0cHJpb3JpdHkpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zZXRwcmlvcml0eQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZXRwcmlvcml0eQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2V0cHJpb3JpdHkKK0VORChzZXRwcmlvcml0eSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJlZ2lkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRyZWdpZC5TCmluZGV4IGE5MWUyMWIuLjZiNzQ3NGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJlZ2lkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmVnaWQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZXRyZWdpZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzZXRyZWdpZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zZXRyZWdpZDoKK0VOVFJZKHNldHJlZ2lkKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2V0cmVnaWQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2V0cmVnaWQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNldHJlZ2lkCitFTkQoc2V0cmVnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRyZXNnaWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJlc2dpZC5TCmluZGV4IGRkOGEzMzAuLjIyM2EwZDAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJlc2dpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJlc2dpZC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNldHJlc2dpZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzZXRyZXNnaWQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2V0cmVzZ2lkOgorRU5UUlkoc2V0cmVzZ2lkKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2V0cmVzZ2lkCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NldHJlc2dpZAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2V0cmVzZ2lkCitFTkQoc2V0cmVzZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmVzdWlkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRyZXN1aWQuUwppbmRleCAxMzE5ZTJjLi4xZjk5NjgyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRyZXN1aWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRyZXN1aWQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZXRyZXN1aWQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2V0cmVzdWlkCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNldHJlc3VpZDoKK0VOVFJZKHNldHJlc3VpZCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NldHJlc3VpZAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZXRyZXN1aWQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNldHJlc3VpZAorRU5EKHNldHJlc3VpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJldWlkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRyZXVpZC5TCmluZGV4IGUyNWYyZDkuLmZhOWMzZDIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJldWlkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmV1aWQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZXRyZXVpZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzZXRyZXVpZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zZXRyZXVpZDoKK0VOVFJZKHNldHJldWlkKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2V0cmV1aWQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2V0cmV1aWQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNldHJldWlkCitFTkQoc2V0cmV1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRybGltaXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJsaW1pdC5TCmluZGV4IDY1YjFjZDguLjAxNmUyNGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJsaW1pdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJsaW1pdC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNldHJsaW1pdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzZXRybGltaXQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2V0cmxpbWl0OgorRU5UUlkoc2V0cmxpbWl0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2V0cmxpbWl0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NldHJsaW1pdAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2V0cmxpbWl0CitFTkQoc2V0cmxpbWl0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0c2lkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRzaWQuUwppbmRleCBhMGJhZDJiLi45ZjNjYjQ4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRzaWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRzaWQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZXRzaWQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2V0c2lkCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNldHNpZDoKK0VOVFJZKHNldHNpZCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NldHNpZAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZXRzaWQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNldHNpZAorRU5EKHNldHNpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHNvY2tvcHQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHNvY2tvcHQuUwppbmRleCAzMTkyZDkzLi5iMjM2OGExIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRzb2Nrb3B0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0c29ja29wdC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNldHNvY2tvcHQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2V0c29ja29wdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zZXRzb2Nrb3B0OgorRU5UUlkoc2V0c29ja29wdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NldHNvY2tvcHQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2V0c29ja29wdAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2V0c29ja29wdAorRU5EKHNldHNvY2tvcHQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCmluZGV4IDY3M2I3ZmQuLmUzYTVhMDYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNldHRpbWVvZmRheQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzZXR0aW1lb2ZkYXkKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2V0dGltZW9mZGF5OgorRU5UUlkoc2V0dGltZW9mZGF5KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2V0dGltZW9mZGF5CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NldHRpbWVvZmRheQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2V0dGltZW9mZGF5CitFTkQoc2V0dGltZW9mZGF5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0dWlkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXR1aWQuUwppbmRleCBhYmZkYWZiLi5mZjNkYTBhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXR1aWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXR1aWQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZXR1aWQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2V0dWlkCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNldHVpZDoKK0VOVFJZKHNldHVpZCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NldHVpZAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZXR1aWQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNldHVpZAorRU5EKHNldHVpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHhhdHRyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXR4YXR0ci5TCmluZGV4IGI5YzFhYWEuLjViM2EyNDEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0eGF0dHIuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZXR4YXR0cgotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzZXR4YXR0cgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zZXR4YXR0cjoKK0VOVFJZKHNldHhhdHRyKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2V0eGF0dHIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2V0eGF0dHIKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNldHhhdHRyCitFTkQoc2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zaHV0ZG93bi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2h1dGRvd24uUwppbmRleCAwZjIyMDhmLi41ZGIwNDZmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zaHV0ZG93bi5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NodXRkb3duLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2h1dGRvd24KLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2h1dGRvd24KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2h1dGRvd246CitFTlRSWShzaHV0ZG93bikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NodXRkb3duCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NodXRkb3duCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzaHV0ZG93bgorRU5EKHNodXRkb3duKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2lnYWx0c3RhY2suUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKaW5kZXggZWMxZDhhMS4uZjU0Mzc1OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2lnYWx0c3RhY2suUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zaWdhbHRzdGFjay5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNpZ2FsdHN0YWNrCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNpZ2FsdHN0YWNrCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNpZ2FsdHN0YWNrOgorRU5UUlkoc2lnYWx0c3RhY2spCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zaWdhbHRzdGFjaworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zaWdhbHRzdGFjawogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2lnYWx0c3RhY2sKK0VORChzaWdhbHRzdGFjaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NpZ25hbGZkNC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2lnbmFsZmQ0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZTYxNjguLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2lnbmFsZmQ0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNpZ25hbGZkNAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzaWduYWxmZDQKLQotc2lnbmFsZmQ0OgotICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2lnbmFsZmQ0Ci0gICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQotICAgIG5vcAotMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQotICAgIG5vcAotICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2lnbmFsZmQ0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zb2NrZXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NvY2tldC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjc0MDRlLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NvY2tldC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzb2NrZXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc29ja2V0Ci0KLXNvY2tldDoKLSAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NvY2tldAotICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKLSAgICBub3AKLTE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKLSAgICBub3AKLSAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNvY2tldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc29ja2V0cGFpci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc29ja2V0cGFpci5TCmluZGV4IGMwZjQxZTIuLjdmODVkYTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NvY2tldHBhaXIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zb2NrZXRwYWlyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc29ja2V0cGFpcgotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzb2NrZXRwYWlyCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNvY2tldHBhaXI6CitFTlRSWShzb2NrZXRwYWlyKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc29ja2V0cGFpcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zb2NrZXRwYWlyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzb2NrZXRwYWlyCitFTkQoc29ja2V0cGFpcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NwbGljZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3BsaWNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1YjdlOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NwbGljZS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc3BsaWNlKQorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NwbGljZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORChzcGxpY2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zd2Fwb2ZmLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zd2Fwb2ZmLlMKaW5kZXggMWVkNTA4My4uY2U3ODJkMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3dhcG9mZi5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N3YXBvZmYuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzd2Fwb2ZmCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHN3YXBvZmYKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc3dhcG9mZjoKK0VOVFJZKHN3YXBvZmYpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zd2Fwb2ZmCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3N3YXBvZmYKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHN3YXBvZmYKK0VORChzd2Fwb2ZmKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3dhcG9uLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zd2Fwb24uUwppbmRleCAwOGE4NWIwLi4xMjdjM2E4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zd2Fwb24uUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zd2Fwb24uUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzd2Fwb24KLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc3dhcG9uCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXN3YXBvbjoKK0VOVFJZKHN3YXBvbikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3N3YXBvbgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zd2Fwb24KICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHN3YXBvbgorRU5EKHN3YXBvbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N5bWxpbmthdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3ltbGlua2F0LlMKaW5kZXggOWM0MzI0MS4uYjA2OTBhNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3ltbGlua2F0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3ltbGlua2F0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc3ltbGlua2F0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IHN5bWxpbmthdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zeW1saW5rYXQ6CitFTlRSWShzeW1saW5rYXQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zeW1saW5rYXQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc3ltbGlua2F0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzeW1saW5rYXQKK0VORChzeW1saW5rYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zeW5jLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zeW5jLlMKaW5kZXggMGUwZWUxZi4uODg1OGU3NCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3luYy5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N5bmMuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzeW5jCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHN5bmMKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc3luYzoKK0VOVFJZKHN5bmMpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zeW5jCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3N5bmMKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHN5bmMKK0VORChzeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3lzaW5mby5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3lzaW5mby5TCmluZGV4IDNhY2ZiZjcuLmJlZWZjMGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N5c2luZm8uUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zeXNpbmZvLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc3lzaW5mbwotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzeXNpbmZvCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXN5c2luZm86CitFTlRSWShzeXNpbmZvKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc3lzaW5mbworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zeXNpbmZvCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzeXNpbmZvCitFTkQoc3lzaW5mbykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RlZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGVlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTExNTkwNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RlZS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkodGVlKQorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3RlZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORCh0ZWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90Z2tpbGwuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3Rna2lsbC5TCmluZGV4IDVkZTMzZDAuLmJlYTIxMWQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3Rna2lsbC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3Rna2lsbC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHRna2lsbAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCB0Z2tpbGwKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotdGdraWxsOgorRU5UUlkodGdraWxsKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfdGdraWxsCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3Rna2lsbAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgdGdraWxsCitFTkQodGdraWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKaW5kZXggMjUyODM1NS4uMTE2YzYyOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHRpbWVyZmRfY3JlYXRlCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHRpbWVyZmRfY3JlYXRlCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXRpbWVyZmRfY3JlYXRlOgorRU5UUlkodGltZXJmZF9jcmVhdGUpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl90aW1lcmZkX2NyZWF0ZQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl90aW1lcmZkX2NyZWF0ZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgdGltZXJmZF9jcmVhdGUKK0VORCh0aW1lcmZkX2NyZWF0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKaW5kZXggYjM4YzJkNC4uZGY3MTM4YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgdGltZXJmZF9nZXR0aW1lCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHRpbWVyZmRfZ2V0dGltZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi10aW1lcmZkX2dldHRpbWU6CitFTlRSWSh0aW1lcmZkX2dldHRpbWUpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl90aW1lcmZkX2dldHRpbWUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfdGltZXJmZF9nZXR0aW1lCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCB0aW1lcmZkX2dldHRpbWUKK0VORCh0aW1lcmZkX2dldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TCmluZGV4IDExZGM2MWIuLjJiZmFkYjkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHRpbWVyZmRfc2V0dGltZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCB0aW1lcmZkX3NldHRpbWUKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotdGltZXJmZF9zZXR0aW1lOgorRU5UUlkodGltZXJmZF9zZXR0aW1lKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfdGltZXJmZF9zZXR0aW1lCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3RpbWVyZmRfc2V0dGltZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgdGltZXJmZF9zZXR0aW1lCitFTkQodGltZXJmZF9zZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGltZXMuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVzLlMKaW5kZXggMjQ4YTIzZi4uOTBjZTk3ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGltZXMuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90aW1lcy5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHRpbWVzCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHRpbWVzCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXRpbWVzOgorRU5UUlkodGltZXMpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl90aW1lcworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl90aW1lcwogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgdGltZXMKK0VORCh0aW1lcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RraWxsLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90a2lsbC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODBiNTA2Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RraWxsLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHRraWxsCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHRraWxsCi0KLXRraWxsOgotICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfdGtpbGwKLSAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCi0gICAgbm9wCi0xOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5Ci0gICAgbm9wCi0gICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCB0a2lsbApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdHJ1bmNhdGUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RydW5jYXRlLlMKaW5kZXggYTQyNTZkYy4uNjgwMDcwNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdHJ1bmNhdGUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90cnVuY2F0ZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHRydW5jYXRlCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHRydW5jYXRlCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXRydW5jYXRlOgorRU5UUlkodHJ1bmNhdGUpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl90cnVuY2F0ZQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl90cnVuY2F0ZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgdHJ1bmNhdGUKK0VORCh0cnVuY2F0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RydW5jYXRlNjQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RydW5jYXRlNjQuUwppbmRleCA5ZjQ4ZGEwLi44NzBlNzM1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90cnVuY2F0ZTY0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdHJ1bmNhdGU2NC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHRydW5jYXRlNjQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgdHJ1bmNhdGU2NAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi10cnVuY2F0ZTY0OgorRU5UUlkodHJ1bmNhdGU2NCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3RydW5jYXRlNjQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfdHJ1bmNhdGU2NAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgdHJ1bmNhdGU2NAorRU5EKHRydW5jYXRlNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bWFzay5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW1hc2suUwppbmRleCBkNzRjZjkwLi5jY2Y0MjkyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bWFzay5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3VtYXNrLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgdW1hc2sKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgdW1hc2sKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotdW1hc2s6CitFTlRSWSh1bWFzaykKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3VtYXNrCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3VtYXNrCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCB1bWFzaworRU5EKHVtYXNrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW1vdW50Mi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW1vdW50Mi5TCmluZGV4IDYxNjRmNzYuLjY1YTcxMjkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3Vtb3VudDIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bW91bnQyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgdW1vdW50MgotICAgIC5hbGlnbiA0Ci0gICAgLmVudCB1bW91bnQyCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXVtb3VudDI6CitFTlRSWSh1bW91bnQyKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfdW1vdW50MgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl91bW91bnQyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCB1bW91bnQyCitFTkQodW1vdW50MikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3VuYW1lLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bmFtZS5TCmluZGV4IGExMDUxYTIuLmY1NDBiM2EgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3VuYW1lLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW5hbWUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCB1bmFtZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCB1bmFtZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi11bmFtZToKK0VOVFJZKHVuYW1lKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfdW5hbWUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfdW5hbWUKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHVuYW1lCitFTkQodW5hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bmxpbmthdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW5saW5rYXQuUwppbmRleCAwY2E3N2ZlLi4wMDFmOWNmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bmxpbmthdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3VubGlua2F0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgdW5saW5rYXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgdW5saW5rYXQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotdW5saW5rYXQ6CitFTlRSWSh1bmxpbmthdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3VubGlua2F0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3VubGlua2F0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCB1bmxpbmthdAorRU5EKHVubGlua2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW5zaGFyZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW5zaGFyZS5TCmluZGV4IDU5MmNjNjEuLjEzY2E0NTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3Vuc2hhcmUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bnNoYXJlLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgdW5zaGFyZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCB1bnNoYXJlCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXVuc2hhcmU6CitFTlRSWSh1bnNoYXJlKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfdW5zaGFyZQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl91bnNoYXJlCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCB1bnNoYXJlCitFTkQodW5zaGFyZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3V0aW1lbnNhdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdXRpbWVuc2F0LlMKaW5kZXggNDJmZTRmOS4uMTRlNWExMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdXRpbWVuc2F0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdXRpbWVuc2F0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgdXRpbWVuc2F0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IHV0aW1lbnNhdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi11dGltZW5zYXQ6CitFTlRSWSh1dGltZW5zYXQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl91dGltZW5zYXQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfdXRpbWVuc2F0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCB1dGltZW5zYXQKK0VORCh1dGltZW5zYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy92bXNwbGljZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdm1zcGxpY2UuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTkxZjUzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdm1zcGxpY2UuUwpAQCAtMCwwICsxLDE5IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHZtc3BsaWNlKQorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3Ztc3BsaWNlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQorICAgIG5vcAorICAgIC5zZXQgcmVvcmRlcgorRU5EKHZtc3BsaWNlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvd2FpdDQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3dhaXQ0LlMKaW5kZXggOGM1M2VjYS4uOGExMjUzMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvd2FpdDQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy93YWl0NC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHdhaXQ0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IHdhaXQ0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXdhaXQ0OgorRU5UUlkod2FpdDQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl93YWl0NAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl93YWl0NAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgd2FpdDQKK0VORCh3YWl0NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3dyaXRlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy93cml0ZS5TCmluZGV4IDg1ZmU0ZDAuLjYyZGMzNmYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3dyaXRlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvd3JpdGUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCB3cml0ZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCB3cml0ZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi13cml0ZToKK0VOVFJZKHdyaXRlKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfd3JpdGUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfd3JpdGUKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHdyaXRlCitFTkQod3JpdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy93cml0ZXYuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3dyaXRldi5TCmluZGV4IDRlMjMwNDkuLmQ4ZDY2MTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3dyaXRldi5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3dyaXRldi5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHdyaXRldgotICAgIC5hbGlnbiA0Ci0gICAgLmVudCB3cml0ZXYKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotd3JpdGV2OgorRU5UUlkod3JpdGV2KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfd3JpdGV2CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3dyaXRldgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgd3JpdGV2CitFTkQod3JpdGV2KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL19fYmlvbmljX2Nsb25lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyNjZlZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL19fYmlvbmljX2Nsb25lLlMKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2lmIChfTUlQU19TSU0gPT0gX0FCSU8zMikgfHwgKF9NSVBTX1NJTSA9PSBfQUJJMzIpCitGUkFNRVNaCQk9CU1LRlNJWihOQVJHU0FWRSwwKQorRlJBTUVfQVJHCT0JMCpSRUdTWgorRlJBTUVfRk4JPQkxKlJFR1NaCisjZWxzZQorRlJBTUVTWgkJPQlNS0ZTSVooMCwzKQorRlJBTUVfR1AJPQlGUkFNRVNaLTEqUkVHU1oKK0ZSQU1FX0FSRwk9CUZSQU1FU1otMipSRUdTWgorRlJBTUVfRk4JPQlGUkFNRVNaLTMqUkVHU1oKKyNlbmRpZgorCisvLyBwaWRfdCBfX2Jpb25pY19jbG9uZShpbnQgZmxhZ3MsIHZvaWQqIGNoaWxkX3N0YWNrLCBwaWRfdCogcGFyZW50X3RpZCwgdm9pZCogdGxzLCBwaWRfdCogY2hpbGRfdGlkLCBpbnQgKCpmbikodm9pZCopLCB2b2lkKiBhcmcpOworTEVBRihfX2Jpb25pY19jbG9uZSwgRlJBTUVTWikKKwlQVFJfU1VCVSBzcCwgRlJBTUVTWgkJCSMgYWxsb2NhdGUgc3RhY2sgZnJhbWUKKwlTRVRVUF9HUDY0KEZSQU1FX0dQLF9fYmlvbmljX2Nsb25lKQorCVNBVkVfR1AoRlJBTUVfR1ApCisKKwkjIHNldCB1cCBjaGlsZCBzdGFjaworCVBUUl9TVUJVIGExLEZSQU1FU1oKKyNpZiAoX01JUFNfU0lNID09IF9BQklPMzIpIHx8IChfTUlQU19TSU0gPT0gX0FCSTMyKQorCVBUUl9MCXQwLEZSQU1FU1orNSpSRUdTWihzcCkJIyBmbgorCVBSTF9MCXQxLEZSQU1FU1orNipSRUdTWihzcCkJIyBhcmcKKwlQVFJfUwl0MCxGUkFNRV9GTihhMSkJCSMgZm4KKwlQVFJfUwl0MSxGUkFNRV9BUkcoYTEpCSMgYXJnCisjZWxzZQorCVBUUl9MCXQwLEZSQU1FX0dQKHNwKQkJIyBjb3B5IGdwIHRvIGNoaWxkIHN0YWNrCisJUFRSX1MJdDAsRlJBTUVfR1AoYTEpCisJUFRSX1MJYTUsRlJBTUVfRk4oYTEpCQkjIGZuCisJUFRSX1MJYTYsRlJBTUVfQVJHKGExKQkjIGFyZworIyBlbmRpZgorCisJIyByZW1haW5kZXIgb2YgYXJndW1lbnRzIGFyZSBjb3JyZWN0IGZvciBjbG9uZSBzeXN0ZW0gY2FsbAorCUxJCXYwLF9fTlJfY2xvbmUKKwlzeXNjYWxsCisKKwltb3ZlICAgIGEwLHYwCisJYm5leglhMywuTF9fZXJyb3JfYmMKKworCWJlcXoJdjAsLkxfX3RocmVhZF9zdGFydF9iYworCisJUkVTVE9SRV9HUDY0CisJUFRSX0FERFUgc3AsRlJBTUVTWgorCWoJcmEKKworLkxfX3RocmVhZF9zdGFydF9iYzoKKwkjIENsZWFyIHJldHVybiBhZGRyZXNzIGluIGNoaWxkIHNvIHdlIGRvbid0IHVud2luZCBmdXJ0aGVyLgorCWxpCXJhLDAKKworCSMgdm9pZCBfX3N0YXJ0X3RocmVhZChpbnQgKCpmdW5jKSh2b2lkKiksIHZvaWQgKmFyZykKKwlQVFJfTAlhMCxGUkFNRV9GTihzcCkJCSMgIGZuCisJUFRSX0wJYTEsRlJBTUVfQVJHKHNwKQkjICBhcmcKKwlMQQl0OSxfX3N0YXJ0X3RocmVhZAorCVJFU1RPUkVfR1A2NAorCS8qCisJICogRm9yIE8zMiBldGMgdGhlIGNoaWxkIHN0YWNrIG11c3QgaGF2ZSBzcGFjZSBmb3IgYTAuLmEzIHRvIGJlIHN0b3JlZAorCSAqIEZvciBONjQgZXRjLCB0aGUgY2hpbGQgc3RhY2sgY2FuIGJlIHJlc3RvcmVkIHRvIHRoZSBvcmlnaW5hbCB2YWx1ZQorCSAqLworI2lmICEoKF9NSVBTX1NJTSA9PSBfQUJJTzMyKSB8fCAoX01JUFNfU0lNID09IF9BQkkzMikpCisJUFRSX0FERFUgc3AsRlJBTUVTWgorI2VuZGlmCisJagl0OQorCisuTF9fZXJyb3JfYmM6CisJTEEJdDksX19zZXRfZXJybm9faW50ZXJuYWwKKwlSRVNUT1JFX0dQNjQKKwlQVFJfQUREVSBzcCxGUkFNRVNaCisJagl0OQorCUVORChfX2Jpb25pY19jbG9uZSkKKy5oaWRkZW4gX19iaW9uaWNfY2xvbmUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2Y4Y2MxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCisvLyB2b2lkIF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24odm9pZCogc3RhY2tCYXNlLCBzaXplX3Qgc3RhY2tTaXplKQorRU5UUllfUFJJVkFURShfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKQorICBsaQl2MCwgX19OUl9tdW5tYXAKKyAgc3lzY2FsbAorICAvLyBJZiBtdW5tYXAgZmFpbGVkLCB3ZSBpZ25vcmUgdGhlIGZhaWx1cmUgYW5kIGV4aXQgYW55d2F5LgorCisgIGxpCWEwLCAwCisgIGxpCXYwLCBfX05SX2V4aXQKKyAgc3lzY2FsbAorICAvLyBUaGUgZXhpdCBzeXNjYWxsIGRvZXMgbm90IHJldHVybi4KK0VORChfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvX3NldGptcC5TIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvX3NldGptcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMzdlNmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9fc2V0am1wLlMKQEAgLTAsMCArMSwxNTAgQEAKKy8qCSRPcGVuQlNEOiBfc2V0am1wLlMsdiAxLjQgMjAwNS8wOC8wNyAxNjo0MDoxNSBlc3BpZSBFeHAgJCAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAyIE9wc3ljb24gQUIgICh3d3cub3BzeWNvbi5zZSAvIHd3dy5vcHN5Y29uLmNvbSkKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgT3BzeWNvbiBBQiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKKyAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3JlZ251bS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvc2lnbmFsLmg+CisKKy8qCisgKiBfc2V0am1wLCBfbG9uZ2ptcCAobm90IHJlc3RvcmluZyBzaWduYWwgc3RhdGUpCisgKgorICogWFhYIEZQU0VUIHNob3VsZCBwcm9iYWJseSBiZSB0YWtlbiBmcm9tIFNSIHNldHRpbmcuIGhtbW0uLi4KKyAqICBHUE9GRiBhbmQgRlJBTUVTSVpFIG11c3QgYmUgdGhlIHNhbWUgZm9yIGJvdGggX3NldGptcCBhbmQgX2xvbmdqbXAhCisgKgorICovCisKK0ZSQU1FU1o9IE1LRlNJWigwLDQpCitHUE9GRj0gRlJBTUVTWi0yKlJFR1NaCisKK0xFQUYoX3NldGptcCwgRlJBTUVTWikKKwlQVFJfU1VCVSBzcCwgRlJBTUVTWgorCVNFVFVQX0dQNjQoR1BPRkYsIF9zZXRqbXApCisJU0FWRV9HUChHUE9GRikKKwkuc2V0CW5vcmVvcmRlcgorI2lmIGRlZmluZWQoX19taXBzNjQpCisJZGxpCXYwLCAweEFDRURCQURFCQkJIyBzaWdjb250ZXh0IG1hZ2ljIG51bWJlcgorI2Vsc2UKKwlsaQl2MCwgMHhBQ0VEQkFERQkJCSMgc2lnY29udGV4dCBtYWdpYyBudW1iZXIKKyNlbmRpZgorCVJFR19TCXYwLCBTQ19SRUdTK1pFUk8qUkVHU1ooYTApCisJUkVHX1MJczAsIFNDX1JFR1MrUzAqUkVHU1ooYTApCisJUkVHX1MJczEsIFNDX1JFR1MrUzEqUkVHU1ooYTApCisJUkVHX1MJczIsIFNDX1JFR1MrUzIqUkVHU1ooYTApCisJUkVHX1MJczMsIFNDX1JFR1MrUzMqUkVHU1ooYTApCisJUkVHX1MJczQsIFNDX1JFR1MrUzQqUkVHU1ooYTApCisJUkVHX1MJczUsIFNDX1JFR1MrUzUqUkVHU1ooYTApCisJUkVHX1MJczYsIFNDX1JFR1MrUzYqUkVHU1ooYTApCisJUkVHX1MJczcsIFNDX1JFR1MrUzcqUkVHU1ooYTApCisJUkVHX1MJczgsIFNDX1JFR1MrUzgqUkVHU1ooYTApCisJUkVHX0wJdjAsIEdQT0ZGKHNwKQorCVJFR19TCXYwLCBTQ19SRUdTK0dQKlJFR1NaKGEwKQorCVBUUl9BRERVIHYwLCBzcCwgRlJBTUVTWgorCVJFR19TCXYwLCBTQ19SRUdTK1NQKlJFR1NaKGEwKQorCVJFR19TCXJhLCBTQ19QQyhhMCkKKworI2lmICFkZWZpbmVkKFNPRlRGTE9BVCkKKwlsaQl2MCwgMQkJCQkjIGJlIG5pY2UgaWYgd2UgY291bGQgdGVsbAorCVJFR19TCXYwLCBTQ19GUFVTRUQoYTApCQkjIHNjX2ZwdXNlZCA9IDEKKwljZmMxCXYwLCAkMzEKKwlzLmQJJGYyMCwgU0NfRlBSRUdTKygoRjIwLUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjIsIFNDX0ZQUkVHUysoKEYyMi1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjI0LCBTQ19GUFJFR1MrKChGMjQtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyNiwgU0NfRlBSRUdTKygoRjI2LUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjgsIFNDX0ZQUkVHUysoKEYyOC1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjMwLCBTQ19GUFJFR1MrKChGMzAtRjApKlJFR1NaX0ZQKShhMCkKKyNpZiBfTUlQU19GUFNFVCA9PSAzMgorCXMuZAkkZjIxLCBTQ19GUFJFR1MrKChGMjEtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyMywgU0NfRlBSRUdTKygoRjIzLUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjI3LCBTQ19GUFJFR1MrKChGMjctRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyOSwgU0NfRlBSRUdTKygoRjI5LUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApKGEwKQorI2VuZGlmCisJUkVHX1MJdjAsIFNDX0ZQUkVHUysoKEZTUi1GMCkqUkVHU1opKGEwKQorI2VuZGlmIC8qICFTT0ZURkxPQVQgKi8KKwlSRVNUT1JFX0dQNjQKKwlQVFJfQUREVSBzcCwgRlJBTUVTWgorCWoJcmEKKwkgbW92ZQl2MCwgemVybworRU5EKF9zZXRqbXApCisKK0xFQUYoX2xvbmdqbXAsIEZSQU1FU1opCisJUFRSX1NVQlUgc3AsIEZSQU1FU1oKKwlTRVRVUF9HUDY0KEdQT0ZGLCBfbG9uZ2ptcCkKKwlTQVZFX0dQKEdQT0ZGKQorCS5zZXQgICAgbm9yZW9yZGVyCisJUkVHX0wJdjAsIFNDX1JFR1MrWkVSTypSRUdTWihhMCkKKwlibmUJdjAsIDB4QUNFREJBREUsIGJvdGNoCQkjIGp1bXAgaWYgZXJyb3IKKwlSRUdfTAlyYSwgU0NfUEMoYTApCisJUkVHX0wJdjAsIFNDX0ZQUkVHUysoKEZTUi1GMCkqUkVHU1opKGEwKQorCVJFR19MCXMwLCBTQ19SRUdTK1MwKlJFR1NaKGEwKQorCVJFR19MCXMxLCBTQ19SRUdTK1MxKlJFR1NaKGEwKQorCVJFR19MCXMyLCBTQ19SRUdTK1MyKlJFR1NaKGEwKQorCVJFR19MCXMzLCBTQ19SRUdTK1MzKlJFR1NaKGEwKQorCVJFR19MCXM0LCBTQ19SRUdTK1M0KlJFR1NaKGEwKQorCVJFR19MCXM1LCBTQ19SRUdTK1M1KlJFR1NaKGEwKQorCVJFR19MCXM2LCBTQ19SRUdTK1M2KlJFR1NaKGEwKQorCVJFR19MCXM3LCBTQ19SRUdTK1M3KlJFR1NaKGEwKQorCVJFR19MCXM4LCBTQ19SRUdTK1M4KlJFR1NaKGEwKQorCVJFR19MCWdwLCBTQ19SRUdTK0dQKlJFR1NaKGEwKQorCVJFR19MCXNwLCBTQ19SRUdTK1NQKlJFR1NaKGEwKQorI2lmICFkZWZpbmVkKFNPRlRGTE9BVCkKKwljdGMxCXYwLCAkMzEKKwlsLmQJJGYyMCwgU0NfRlBSRUdTKygoRjIwLUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjIsIFNDX0ZQUkVHUysoKEYyMi1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjI0LCBTQ19GUFJFR1MrKChGMjQtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyNiwgU0NfRlBSRUdTKygoRjI2LUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjgsIFNDX0ZQUkVHUysoKEYyOC1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjMwLCBTQ19GUFJFR1MrKChGMzAtRjApKlJFR1NaX0ZQKShhMCkKKyNpZiBfTUlQU19GUFNFVCA9PSAzMgorCWwuZAkkZjIxLCBTQ19GUFJFR1MrKChGMjEtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyMywgU0NfRlBSRUdTKygoRjIzLUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjI3LCBTQ19GUFJFR1MrKChGMjctRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyOSwgU0NfRlBSRUdTKygoRjI5LUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApKGEwKQorI2VuZGlmCisjZW5kaWYgLyogIVNPRlRGTE9BVCAqLworCWJuZQlhMSwgemVybywgMWYKKwkgbm9wCisJbGkJYTEsIDEJCQkjIG5ldmVyIHJldHVybiAwIQorMToKKwlqCXJhCisJIG1vdmUJdjAsIGExCisKK2JvdGNoOgorCWphbAlsb25nam1wZXJyb3IKKwlub3AKKwlqYWwJYWJvcnQKKwlub3AKKwlSRVNUT1JFX0dQNjQKKwlQVFJfQUREVSBzcCwgRlJBTUVTWgorRU5EKF9sb25nam1wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvYXRleGl0LmggYi9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9hdGV4aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTkwMDhjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvYXRleGl0LmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCitleHRlcm4gdm9pZCAqX19kc29faGFuZGxlOworZXh0ZXJuIGludCBfX2N4YV9hdGV4aXQodm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmFyZywgdm9pZCAqZHNvKTsKKworX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCitpbnQgYXRleGl0KHZvaWQgKCpmdW5jKSh2b2lkKSkKK3sKKyAgcmV0dXJuIChfX2N4YV9hdGV4aXQoKHZvaWQgKCopKHZvaWQgKikpZnVuYywgKHZvaWQgKikwLCAmX19kc29faGFuZGxlKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9jcnRiZWdpbi5jIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvY3J0YmVnaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWEzMWFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvY3J0YmVnaW4uYwpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICIuLi8uLi9iaW9uaWMvbGliY19pbml0X2NvbW1vbi5oIgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCitfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5wcmVpbml0X2FycmF5IikpKQordm9pZCAoKl9fUFJFSU5JVF9BUlJBWV9fKSh2b2lkKSA9ICh2b2lkICgqKSh2b2lkKSkgLTE7CisKK19fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmluaXRfYXJyYXkiKSkpCit2b2lkICgqX19JTklUX0FSUkFZX18pKHZvaWQpID0gKHZvaWQgKCopKHZvaWQpKSAtMTsKKworX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZmluaV9hcnJheSIpKSkKK3ZvaWQgKCpfX0ZJTklfQVJSQVlfXykodm9pZCkgPSAodm9pZCAoKikodm9pZCkpIC0xOworCisKK19fTElCQ19ISURERU5fXyAgdm9pZCBkb19taXBzX3N0YXJ0KHZvaWQgKnJhd19hcmdzKSB7CisgIHN0cnVjdG9yc19hcnJheV90IGFycmF5OworICBhcnJheS5wcmVpbml0X2FycmF5ID0gJl9fUFJFSU5JVF9BUlJBWV9fOworICBhcnJheS5pbml0X2FycmF5ID0gJl9fSU5JVF9BUlJBWV9fOworICBhcnJheS5maW5pX2FycmF5ID0gJl9fRklOSV9BUlJBWV9fOworCisgIF9fbGliY19pbml0KHJhd19hcmdzLCBOVUxMLCAmbWFpbiwgJmFycmF5KTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdGhlIHJldHVybiBhZGRyZXNzIHdpdGggYSBicmFuY2gtYW5kLWxpbmsKKyAqIGluc3RydWN0aW9uIChiYWwpIGFuZCB0aGVuIHVzZXMgYSAuY3BzZXR1cCB0byBjb21wdXRlIHRoZSBHbG9iYWwKKyAqIE9mZnNldCBUYWJsZSAoR09UKSBwb2ludGVyICgkZ3ApLiBUaGUgJGdwIGlzIHRoZW4gdXNlZCB0byBsb2FkCisgKiB0aGUgYWRkcmVzcyBvZiBfZG9fbWlwc19zdGFydCgpIGludG8gJHQ5IGp1c3QgYmVmb3JlIGNhbGxpbmcgaXQuCisgKiBUZXJtaW5hdGluZyB0aGUgc3RhY2sgd2l0aCBhIE5VTEwgcmV0dXJuIGFkZHJlc3MuCisgKi8KK19fYXNtX18gKAorIiAgICAgICAuc2V0IHB1c2ggICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgLnRleHQgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAuYWxpZ24gIDQgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgIC50eXBlIF9fc3RhcnQsQGZ1bmN0aW9uICAgICBcbiIKKyIgICAgICAgLmdsb2JsIF9fc3RhcnQgICAgICAgICAgICAgIFxuIgorIiAgICAgICAuZ2xvYmwgIF9zdGFydCAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgLmVudCAgICBfX3N0YXJ0ICAgICAgICAgICAgIFxuIgorIl9fc3RhcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiIF9zdGFydDogICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgLmZyYW1lICAgJHNwLDMyLCQwICAgICAgICAgIFxuIgorIiAgICAgICAubWFzayAgIDB4ODAwMDAwMDAsLTggICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgbW92ZSAgICAkYTAsICRzcCAgICAgICAgICAgIFxuIgorIiAgICAgICBkYWRkaXUgICRzcCwgJHNwLCAtMzIgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgLnNldCBub3Jlb3JkZXIgICAgICAgICAgICAgIFxuIgorIiAgICAgICBiYWwgICAgIDFmICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAuY3BzZXR1cCAkcmEsMTYsMWIgICAgICAgICAgXG4iCisiICAgICAgIC5zZXQgcmVvcmRlciAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICBzZCAgICAgICQwLCAyNCgkc3ApICAgICAgICAgXG4iCisiICAgICAgIGphbCAgICAgZG9fbWlwc19zdGFydCAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIjI6ICAgICBiICAgICAgIDJiICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgIC5lbmQgICAgX19zdGFydCAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAuc2V0IHBvcCAgICAgICAgICAgICAgICAgICAgXG4iCispOworCisjaW5jbHVkZSAiLi4vLi4vYXJjaC1jb21tb24vYmlvbmljL19fZHNvX2hhbmRsZS5oIgorI2luY2x1ZGUgImF0ZXhpdC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvY3J0YmVnaW5fc28uYyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL2NydGJlZ2luX3NvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY2NGNlNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL2NydGJlZ2luX3NvLmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCitleHRlcm4gdm9pZCBfX2N4YV9maW5hbGl6ZSh2b2lkICopOworZXh0ZXJuIHZvaWQgKl9fZHNvX2hhbmRsZTsKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIiksZGVzdHJ1Y3RvcikpCit2b2lkIF9fb25fZGxjbG9zZSgpIHsKKyAgX19jeGFfZmluYWxpemUoJl9fZHNvX2hhbmRsZSk7Cit9CisKKyNpbmNsdWRlICIuLi8uLi9hcmNoLWNvbW1vbi9iaW9uaWMvX19kc29faGFuZGxlX3NvLmgiCisjaW5jbHVkZSAiYXRleGl0LmgiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9zZXRqbXAuUyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL3NldGptcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNzg2YmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9zZXRqbXAuUwpAQCAtMCwwICsxLDE3NCBAQAorLyogICAgICAkT3BlbkJTRDogc2V0am1wLlMsdiAxLjUgMjAwNS8wOC8wNyAxNjo0MDoxNSBlc3BpZSBFeHAgJCAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIgT3BzeWNvbiBBQiAgKHd3dy5vcHN5Y29uLnNlIC8gd3d3Lm9wc3ljb24uY29tKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBPcHN5Y29uIEFCIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworICogT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcmVnbnVtLmg+CisjaW5jbHVkZSA8bWFjaGluZS9zaWduYWwuaD4KKworLyoKKyAqIHNldGptcCwgbG9uZ2ptcCBpbXBsZW1lbnRhdGlvbiBmb3IgbGliYy4gdGhpcyBjb2RlIGRlcGVuZHMKKyAqIG9uIHRoZSBsYXlvdXQgb2YgdGhlIHN0cnVjdCBzaWdjb250ZXh0IGluIG1hY2hpbmUvc2lnbmFsLmguCisgKgorICovCisKK0ZSQU1FU1o9IE1LRlNJWigyLDYpCitBMU9GRj0gRlJBTUVTWi00KlJFR1NaCitBME9GRj0gRlJBTUVTWi0zKlJFR1NaCitHUE9GRj0gRlJBTUVTWi0yKlJFR1NaCitSQU9GRj0gRlJBTUVTWi0xKlJFR1NaCisKK05PTl9MRUFGKHNldGptcCwgRlJBTUVTWiwgcmEpCisJLm1hc2sJMHg4MDAwMDAwMCwgUkFPRkYKKwlQVFJfU1VCVSBzcCwgRlJBTUVTWgkJCSMgYWxsb2NhdGUgc3RhY2sgZnJhbWUKKwlTRVRVUF9HUDY0KEdQT0ZGLCBzZXRqbXApCisJU0FWRV9HUChHUE9GRikKKwkuc2V0CXJlb3JkZXIKKwlSRUdfUwlyYSwgUkFPRkYoc3ApCQkJIyBzYXZlIHN0YXRlCisJUkVHX1MJYTAsIEEwT0ZGKHNwKQorCisJbW92ZQlhMCwgemVybwkJCSMgZ2V0IGN1cnJlbnQgc2lnbmFsIG1hc2sKKwlqYWwJc2lnYmxvY2sKKworCVJFR19MCXYxLCBBME9GRihzcCkJCQkjIHYxID0gam1wYnVmCisJUkVHX1MJdjAsIFNDX01BU0sodjEpCQkJIyBzYXZlIHNjX21hc2sgPSBzaWdibG9jaygwKQorCisJUkVHX0wJYTAsIEEwT0ZGKHNwKQkJCSMgcmVzdG9yZSBqbXBidWYKKwlSRUdfTAlyYSwgUkFPRkYoc3ApCisJUkVHX1MJcmEsIFNDX1BDKGEwKQkJCSMgc2NfcGMgPSByZXR1cm4gYWRkcmVzcworI2lmIGRlZmluZWQoX19taXBzNjQpCisJZGxpCXYwLCAweEFDRURCQURFCQkJIyBzaWdjb250ZXh0IG1hZ2ljIG51bWJlcgorI2Vsc2UKKwlsaQl2MCwgMHhBQ0VEQkFERQkJCSMgc2lnY29udGV4dCBtYWdpYyBudW1iZXIKKyNlbmRpZgorCVJFR19TCXYwLCBTQ19SRUdTK1pFUk8qUkVHU1ooYTApCisJUkVHX1MJczAsIFNDX1JFR1MrUzAqUkVHU1ooYTApCisJUkVHX1MJczEsIFNDX1JFR1MrUzEqUkVHU1ooYTApCisJUkVHX1MJczIsIFNDX1JFR1MrUzIqUkVHU1ooYTApCisJUkVHX1MJczMsIFNDX1JFR1MrUzMqUkVHU1ooYTApCisJUkVHX1MJczQsIFNDX1JFR1MrUzQqUkVHU1ooYTApCisJUkVHX1MJczUsIFNDX1JFR1MrUzUqUkVHU1ooYTApCisJUkVHX1MJczYsIFNDX1JFR1MrUzYqUkVHU1ooYTApCisJUkVHX1MJczcsIFNDX1JFR1MrUzcqUkVHU1ooYTApCisJUkVHX1MJczgsIFNDX1JFR1MrUzgqUkVHU1ooYTApCisJUkVHX0wJdjAsIEdQT0ZGKHNwKQorCVJFR19TCXYwLCBTQ19SRUdTK0dQKlJFR1NaKGEwKQorCVBUUl9BRERVIHYwLCBzcCwgRlJBTUVTWgorCVJFR19TCXYwLCBTQ19SRUdTK1NQKlJFR1NaKGEwKQorCisjaWYgIWRlZmluZWQoU09GVEZMT0FUKQorCWxpCXYwLCAxCQkJCSMgYmUgbmljZSBpZiB3ZSBjb3VsZCB0ZWxsCisJUkVHX1MJdjAsIFNDX0ZQVVNFRChhMCkJCSMgc2NfZnB1c2VkID0gMQorCWNmYzEJdjAsICQzMQorCXMuZAkkZjIwLCBTQ19GUFJFR1MrKChGMjAtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyMiwgU0NfRlBSRUdTKygoRjIyLUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjI2LCBTQ19GUFJFR1MrKChGMjYtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyOCwgU0NfRlBSRUdTKygoRjI4LUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApKGEwKQorI2lmIF9NSVBTX0ZQU0VUID09IDMyCisJcy5kCSRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjIzLCBTQ19GUFJFR1MrKChGMjMtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyNSwgU0NfRlBSRUdTKygoRjI1LUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjI5LCBTQ19GUFJFR1MrKChGMjktRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYzMSwgU0NfRlBSRUdTKygoRjMxLUYwKSpSRUdTWl9GUCkoYTApCisjZW5kaWYKKwlSRUdfUwl2MCwgU0NfRlBSRUdTKygoRlNSLUYwKSpSRUdTWikoYTApCisjZW5kaWYgLyogIVNPRlRGTE9BVCAqLworCW1vdmUJdjAsIHplcm8KKwlSRVNUT1JFX0dQNjQKKwlQVFJfQUREVSBzcCwgRlJBTUVTWgorCWoJcmEKKworYm90Y2g6CisJamFsCWxvbmdqbXBlcnJvcgorCWphbAlhYm9ydAorCVJFU1RPUkVfR1A2NAorCVBUUl9BRERVIHNwLCBGUkFNRVNaCitFTkQoc2V0am1wKQorCisKK0xFQUYobG9uZ2ptcCwgRlJBTUVTWikKKwlQVFJfU1VCVSBzcCwgRlJBTUVTWgorCVNFVFVQX0dQNjQoR1BPRkYsIGxvbmdqbXApCisJU0FWRV9HUChHUE9GRikKKwkuc2V0CXJlb3JkZXIKKwlzdwlhMSwgQTFPRkYoc3ApCisJc3cJYTAsIEEwT0ZGKHNwKQorCisJbHcJYTAsIFNDX01BU0soYTApCisJamFsCXNpZ3NldG1hc2sKKworCWx3CWEwLCBBME9GRihzcCkKKwlsdwlhMSwgQTFPRkYoc3ApCisKKwkuc2V0CW5vcmVvcmRlcgorCVJFR19MCXYwLCBTQ19SRUdTK1pFUk8qUkVHU1ooYTApCisJYm5lCXYwLCAweEFDRURCQURFLCBib3RjaAkJIyBqdW1wIGlmIGVycm9yCisJUkVHX0wJcmEsIFNDX1BDKGEwKQorCVJFR19MCXMwLCBTQ19SRUdTK1MwKlJFR1NaKGEwKQorCVJFR19MCXMxLCBTQ19SRUdTK1MxKlJFR1NaKGEwKQorCVJFR19MCXMyLCBTQ19SRUdTK1MyKlJFR1NaKGEwKQorCVJFR19MCXMzLCBTQ19SRUdTK1MzKlJFR1NaKGEwKQorCVJFR19MCXM0LCBTQ19SRUdTK1M0KlJFR1NaKGEwKQorCVJFR19MCXM1LCBTQ19SRUdTK1M1KlJFR1NaKGEwKQorCVJFR19MCXM2LCBTQ19SRUdTK1M2KlJFR1NaKGEwKQorCVJFR19MCXM3LCBTQ19SRUdTK1M3KlJFR1NaKGEwKQorCVJFR19MCXM4LCBTQ19SRUdTK1M4KlJFR1NaKGEwKQorCVJFR19MCWdwLCBTQ19SRUdTK0dQKlJFR1NaKGEwKQorCVJFR19MCXNwLCBTQ19SRUdTK1NQKlJFR1NaKGEwKQorCisjaWYgIWRlZmluZWQoU09GVEZMT0FUKQorCVJFR19MCXYwLCBTQ19GUFJFR1MrKChGU1ItRjApKlJFR1NaKShhMCkKKwljdGMxCXYwLCAkMzEKKwlsLmQJJGYyMCwgU0NfRlBSRUdTKygoRjIwLUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjIsIFNDX0ZQUkVHUysoKEYyMi1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjI0LCBTQ19GUFJFR1MrKChGMjQtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyNiwgU0NfRlBSRUdTKygoRjI2LUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjgsIFNDX0ZQUkVHUysoKEYyOC1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjMwLCBTQ19GUFJFR1MrKChGMzAtRjApKlJFR1NaX0ZQKShhMCkKKyNpZiBfTUlQU19GUFNFVCA9PSAzMgorCWwuZAkkZjIxLCBTQ19GUFJFR1MrKChGMjEtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyMywgU0NfRlBSRUdTKygoRjIzLUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjI3LCBTQ19GUFJFR1MrKChGMjctRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyOSwgU0NfRlBSRUdTKygoRjI5LUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApKGEwKQorI2VuZGlmCisjZW5kaWYgLyogIVNPRlRGTE9BVCAqLworCWJuZQlhMSwgemVybywgMWYKKwkgbm9wCisJbGkJYTEsIDEJCQkjIG5ldmVyIHJldHVybiAwIQorMToKKwlqCXJhCisJIG1vdmUJdjAsIGExCisKK0VORChsb25nam1wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvc2lnc2V0am1wLlMgYi9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9zaWdzZXRqbXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDJlNWVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvc2lnc2V0am1wLlMKQEAgLTAsMCArMSw3NyBAQAorLyogJE9wZW5CU0Q6IHNpZ3NldGptcC5TLHYgMS41IDIwMDUvMDgvMDcgMTY6NDA6MTUgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkzLCAxOTk1LAorICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogSGF2YXJkIEVpZG5lcy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcmVnbnVtLmg+CisjaW5jbHVkZSA8bWFjaGluZS9zZXRqbXAuaD4KKworLyoKKyAqIHRyYW1wb2xpbmVzIGZvciBzaWdzZXRqbXAgYW5kICBzaWdsb25nam1wIHNhdmUgYW5kIHJlc3RvcmUgbWFzay4KKyAqCisgKi8KK0ZSQU1FU1o9IE1LRlNJWigxLDEpCitHUE9GRj0gRlJBTUVTWi0yKlJFR1NaCisKK0xFQUYoc2lnc2V0am1wLCBGUkFNRVNaKQorCVBUUl9TVUJVIHNwLCBGUkFNRVNaCisJU0VUVVBfR1A2NChHUE9GRiwgc2lnc2V0am1wKQorCS5zZXQJcmVvcmRlcgorCVJFR19TCWExLCAoX0pCTEVOKlJFR1NaKShhMCkJCSMgc2F2ZSAic2F2ZW1hc2siCisJYm5lCWExLCAweDAsIDFmCQkJIyBkbyBzYXZpbmcgb2Ygc2lnbmFsIG1hc2s/CisJTEEJdDksIF9zZXRqbXAKKwlSRVNUT1JFX0dQNjQKKwlQVFJfQUREVSBzcCwgRlJBTUVTWgorCWpyIHQ5CisKKzE6CUxBCXQ5LCBzZXRqbXAKKwlSRVNUT1JFX0dQNjQKKwlQVFJfQUREVSBzcCwgRlJBTUVTWgorCWpyIHQ5CitFTkQoc2lnc2V0am1wKQorCitMRUFGKHNpZ2xvbmdqbXAsIEZSQU1FU1opCisJUFRSX1NVQlUgc3AsIEZSQU1FU1oKKwlTRVRVUF9HUDY0KEdQT0ZGLCBzaWdsb25nam1wKQorCS5zZXQJcmVvcmRlcgorCVJFR19MCXQwLCAoX0pCTEVOKlJFR1NaKShhMCkJCSMgZ2V0ICJzYXZlbWFzayIKKwlibmUJdDAsIDB4MCwgMWYJCQkjIHJlc3RvcmUgc2lnbmFsIG1hc2s/CisJTEEJdDksIF9sb25nam1wCisJUkVTVE9SRV9HUDY0CisJUFRSX0FERFUgc3AsIEZSQU1FU1oKKwlqcgl0OQorMToKKwlMQQl0OSwgbG9uZ2ptcAorCVJFU1RPUkVfR1A2NAorCVBUUl9BRERVIHNwLCBGUkFNRVNaCisJanIJdDkKK0VORChzaWdsb25nam1wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvc3lzY2FsbC5TIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvc3lzY2FsbC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDc0MWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9zeXNjYWxsLlMKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKyNpZiAoX01JUFNfU0lNID09IF9BQklPMzIpIHx8IChfTUlQU19TSU0gPT0gX0FCSTMyKQorRlJBTUVTWgkJPQlNS0ZTSVooNiwwKQorI2Vsc2UKK0ZSQU1FU1oJCT0JTUtGU0laKDAsMSkKK0ZSQU1FX0dQCT0JRlJBTUVTWi0xKlJFR1NaCisjZW5kaWYKKworTEVBRihzeXNjYWxsLEZSQU1FU1opCisJUFRSX1NVQlUgc3AsIEZSQU1FU1oJIyBhbGxvY2F0ZSBzdGFjayBmcmFtZQorCVNFVFVQX0dQNjQoRlJBTUVfR1Asc3lzY2FsbCkKKwlTQVZFX0dQKEZSQU1FX0dQKQorCW1vdmUJdjAsIGEwCQkjIHN5c2NhbGwgbnVtYmVyIHRvIHYwCisJbW92ZQlhMCwgYTEJCSMgc2hpZnQgYXJncyBkb3duCisJbW92ZQlhMSwgYTIKKwltb3ZlCWEyLCBhMworI2lmIChfTUlQU19TSU0gPT0gX0FCSU8zMikgfHwgKF9NSVBTX1NJTSA9PSBfQUJJMzIpCisJUkVHX0wJYTMsIEZSQU1FU1orNCpSRUdTWihzcCkKKwlSRUdfTAl0MCwgRlJBTUVTWis1KlJFR1NaKHNwKQorCVJFR19MCXQxLCBGUkFNRVNaKzYqUkVHU1ooc3ApCisJUkVHX1MJdDAsIDQqUkVHU1ooc3ApCisJUkVHX1MJdDEsIDUqUkVHU1ooc3ApCisjZWxzZQorCW1vdmUJYTMsIGE0CisJbW92ZQlhNCwgYTUKKwlSRUdfTAlhNSwgRlJBTUVTWihzcCkKKyNlbmRpZgorCXN5c2NhbGwKKwltb3ZlCWEwLCB2MAorCWJuZXoJYTMsIDFmCisJUkVTVE9SRV9HUDY0CisJUFRSX0FERFUgc3AsIEZSQU1FU1oKKwlqCXJhCisxOgorCUxBCXQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisJUkVTVE9SRV9HUDY0CisJUFRSX0FERFUgc3AsIEZSQU1FU1oKKwlqCXQ5CisJRU5EKHN5c2NhbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy92Zm9yay5TIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvdmZvcmsuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTgwYThjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvdmZvcmsuUwpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisvLyBUT0RPOiBtaXBzJyB1YXBpIHNpZ25hbC5oIGlzIG1pc3NpbmcgI2lmbmRlZiBfX0FTU0VNQkxZX18uCisvLyAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgorI2RlZmluZSBTSUdDSExEIDE4CisKKwkudGV4dAorCisjaWYgKF9NSVBTX1NJTSA9PSBfQUJJTzMyKSB8fCAoX01JUFNfU0lNID09IF9BQkkzMikKK0ZSQU1FU1oJCT0JTUtGU0laKDUsMCkKKyNlbHNlCitGUkFNRVNaCQk9CU1LRlNJWigwLDApCisjZW5kaWYKKworTEVBRih2Zm9yayxGUkFNRVNaKQorI2lmIEZSQU1FU1ohPTAKKwlQVFJfU1VCVSBzcCwgRlJBTUVTWgorI2VuZGlmCisJU0VUVVBfR1A2NChhNSwgdmZvcmspCisJTEkJYTAsIChDTE9ORV9WTSB8IENMT05FX1ZGT1JLIHwgU0lHQ0hMRCkKKwltb3ZlCWExLCAkMAorCW1vdmUJYTIsICQwCisJbW92ZQlhMywgJDAKKyNpZiAoX01JUFNfU0lNID09IF9BQklPMzIpIHx8IChfTUlQU19TSU0gPT0gX0FCSTMyKQorCVJFR19TCSQwLCA0KlJFR1NaKHNwKQorI2Vsc2UKKwltb3ZlCWE0LCAkMAorI2VuZGlmCisJTEkJdjAsIF9fTlJfY2xvbmUKKwlzeXNjYWxsCisjaWYgRlJBTUVTWiE9MAorCVBUUl9BRERVIHNwLEZSQU1FU1oKKyNlbmRpZgorCW1vdmUJYTAsIHYwCisJYm5leglhMywgMWYKKwlSRVNUT1JFX0dQNjQKKwlqCXJhCisxOgorCUxBCXQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisJUkVTVE9SRV9HUDY0CisJagl0OQorCUVORCh2Zm9yaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL2FzbS5oIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvYXNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhY2RlMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCkBAIC0wLDAgKzEsMjA4IEBACisvKgkkT3BlbkJTRDogYXNtLmgsdiAxLjcgMjAwNC8xMC8yMCAxMjo0OToxNSBwZWZvIEV4cCAkICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiBPcHN5Y29uIEFCICAod3d3Lm9wc3ljb24uc2UgLyB3d3cub3BzeWNvbi5jb20pCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKKyAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisjaWZuZGVmIF9NSVBTNjRfQVNNX0gKKyNkZWZpbmUgX01JUFM2NF9BU01fSAorCisjaWZuZGVmIF9BTElHTl9URVhUCisjIGRlZmluZSBfQUxJR05fVEVYVCAuYWxpZ24gNAorI2VuZGlmCisKKyN1bmRlZiBfX2Jpb25pY19hc21fY3VzdG9tX2VudHJ5CisjdW5kZWYgX19iaW9uaWNfYXNtX2N1c3RvbV9lbmQKKyNkZWZpbmUgX19iaW9uaWNfYXNtX2N1c3RvbV9lbnRyeShmKSAuZW50IGYKKyNkZWZpbmUgX19iaW9uaWNfYXNtX2N1c3RvbV9lbmQoZikgLmVuZCBmCisKKyNpbmNsdWRlIDxtYWNoaW5lL3JlZ2RlZi5oPgorCisjZGVmaW5lCV9NSVBTX0lTQV9NSVBTMQkxCS8qIFIyMDAwL1IzMDAwICovCisjZGVmaW5lCV9NSVBTX0lTQV9NSVBTMgkyCS8qIFI0MDAwL1I2MDAwICovCisjZGVmaW5lCV9NSVBTX0lTQV9NSVBTMwkzCS8qIFI0MDAwICovCisjZGVmaW5lCV9NSVBTX0lTQV9NSVBTNAk0CS8qIFRGUCAoUjF4MDAwKSAqLworI2RlZmluZQlfTUlQU19JU0FfTUlQUzUgNQorI2RlZmluZQlfTUlQU19JU0FfTUlQUzMyIDYKKyNkZWZpbmUJX01JUFNfSVNBX01JUFM2NCA3CisKKyNpZiAhZGVmaW5lZChBQklDQUxMUykgJiYgIWRlZmluZWQoX05PX0FCSUNBTExTKQorI2RlZmluZQlBQklDQUxMUwkuYWJpY2FsbHMKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBQklDQUxMUykgJiYgIWRlZmluZWQoX0tFUk5FTCkKKwlBQklDQUxMUworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX01JUFNFTF9fKSAmJiAhZGVmaW5lZChfX01JUFNFQl9fKQorI2Vycm9yICJfX01JUFNFTF9fIG9yIF9fTUlQU0VCX18gbXVzdCBiZSBkZWZpbmVkIgorI2VuZGlmCisvKgorICogRGVmaW5lIGhvdyB0byBhY2Nlc3MgdW5hbGlnbmVkIGRhdGEgd29yZAorICovCisjaWYgZGVmaW5lZChfX01JUFNFTF9fKQorI2RlZmluZSBMV0xPICAgIGx3bAorI2RlZmluZSBMV0hJICAgIGx3cgorI2RlZmluZQlTV0xPCXN3bAorI2RlZmluZQlTV0hJCXN3cgorI2RlZmluZSBMRExPICAgIGxkbAorI2RlZmluZSBMREhJICAgIGxkcgorI2RlZmluZQlTRExPCXNkbAorI2RlZmluZQlTREhJCXNkcgorI2VuZGlmCisjaWYgZGVmaW5lZChfX01JUFNFQl9fKQorI2RlZmluZSBMV0xPICAgIGx3cgorI2RlZmluZSBMV0hJICAgIGx3bAorI2RlZmluZQlTV0xPCXN3cgorI2RlZmluZQlTV0hJCXN3bAorI2RlZmluZSBMRExPICAgIGxkcgorI2RlZmluZSBMREhJICAgIGxkbAorI2RlZmluZQlTRExPCXNkcgorI2RlZmluZQlTREhJCXNkbAorI2VuZGlmCisKKy8qCisgKiAgRGVmaW5lIHByb2dyYW1taW5nIGVudmlyb25tZW50IGZvciBBQkkuCisgKi8KKyNpZiBkZWZpbmVkKEFCSUNBTExTKSAmJiAhZGVmaW5lZChfS0VSTkVMKSAmJiAhZGVmaW5lZChfU1RBTkRBTE9ORSkKKworI2lmIChfTUlQU19TSU0gPT0gX0FCSU8zMikgfHwgKF9NSVBTX1NJTSA9PSBfQUJJMzIpCisjZGVmaW5lIE5BUkdTQVZFCTQKKworI2RlZmluZQlTRVRVUF9HUAkJXAorCS5zZXQJbm9yZW9yZGVyOwlcCisJLmNwbG9hZAl0OTsJCVwKKwkuc2V0CXJlb3JkZXI7CisKKyNkZWZpbmUJU0FWRV9HUCh4KQkJXAorCS5jcHJlc3RvcmUgeAorCisjZGVmaW5lCVNFVFVQX0dQNjQoZ3BvZmYsIG5hbWUpCisjZGVmaW5lCVJFU1RPUkVfR1A2NAorI2VuZGlmCisKKyNpZiAoX01JUFNfU0lNID09IF9BQkk2NCkgfHwgKF9NSVBTX1NJTSA9PSBfQUJJTjMyKQorI2RlZmluZSBOQVJHU0FWRQkwCisKKyNkZWZpbmUJU0VUVVBfR1AKKyNkZWZpbmUJU0FWRV9HUCh4KQorI2RlZmluZQlTRVRVUF9HUDY0KGdwb2ZmLCBuYW1lKQlcCisJLmNwc2V0dXAgdDksIGdwb2ZmLCBuYW1lCisjZGVmaW5lCVJFU1RPUkVfR1A2NAkJXAorCS5jcHJldHVybgorI2VuZGlmCisKKyNkZWZpbmUJTUtGU0laKG5hcmcsbG9jYWxzKSAoKChuYXJnK2xvY2FscykqUkVHU1orMzEpJih+MzEpKQorCisjZWxzZSAvKiBkZWZpbmVkKEFCSUNBTExTKSAmJiAhZGVmaW5lZChfS0VSTkVMKSAqLworCisjZGVmaW5lCU5BUkdTQVZFCTQKKyNkZWZpbmUJU0VUVVBfR1AKKyNkZWZpbmUJU0FWRV9HUCh4KQorCisjZGVmaW5lCUFMSUdOU1oJCTE2CS8qIFN0YWNrIGxheW91dCBhbGlnbm1lbnQgKi8KKyNkZWZpbmUJRlJBTUVTWihzeikJKCgoc3opICsgKEFMSUdOU1otMSkpICYgfihBTElHTlNaLTEpKQorCisjZW5kaWYKKworLyoKKyAqICBCYXNpYyByZWdpc3RlciBvcGVyYXRpb25zIGJhc2VkIG9uIHNlbGVjdGVkIElTQQorICovCisjaWYgKF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzEgfHwgX01JUFNfSVNBID09IF9NSVBTX0lTQV9NSVBTMiB8fCBfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFMzMikKKyNkZWZpbmUgUkVHU1oJCTQJLyogMzIgYml0IG1vZGUgcmVnaXN0ZXIgc2l6ZSAqLworI2RlZmluZSBMT0dSRUdTWgkyCS8qIGxvZyByc2l6ZSAqLworI2RlZmluZQlSRUdfUwlzdworI2RlZmluZQlSRUdfTAlsdworI2RlZmluZQlDRl9TWgkJMjQJLyogQ2FsbCBmcmFtZSBzaXplICovCisjZGVmaW5lCUNGX0FSR1NaCTE2CS8qIENhbGwgZnJhbWUgYXJnIHNpemUgKi8KKyNkZWZpbmUJQ0ZfUkFfT0ZGUwkyMAkvKiBDYWxsIHJhIHNhdmUgb2Zmc2V0ICovCisjZW5kaWYKKworI2lmIChfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFMzIHx8IF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzQgfHwgX01JUFNfSVNBID09IF9NSVBTX0lTQV9NSVBTNjQpCisjZGVmaW5lIFJFR1NaCQk4CS8qIDY0IGJpdCBtb2RlIHJlZ2lzdGVyIHNpemUgKi8KKyNkZWZpbmUgTE9HUkVHU1oJMwkvKiBsb2cgcnNpemUgKi8KKyNkZWZpbmUJUkVHX1MJc2QKKyNkZWZpbmUJUkVHX0wJbGQKKyNkZWZpbmUJQ0ZfU1oJCTQ4CS8qIENhbGwgZnJhbWUgc2l6ZSAobXVsdGlwbGUgb2YgQUxJR05TWikgKi8KKyNkZWZpbmUJQ0ZfQVJHU1oJMzIJLyogQ2FsbCBmcmFtZSBhcmcgc2l6ZSAqLworI2RlZmluZQlDRl9SQV9PRkZTCTQwCS8qIENhbGwgcmEgc2F2ZSBvZmZzZXQgKi8KKyNlbmRpZgorCisjZGVmaW5lIFJFR1NaX0ZQCSA4CS8qIDY0IGJpdCBGUCByZWdpc3RlciBzaXplICovCisKKyNpZm5kZWYgX19MUDY0X18KKyNkZWZpbmUJUFRSX0wJCWx3CisjZGVmaW5lCVBUUl9TCQlzdworI2RlZmluZQlQVFJfU1VCCQlzdWIKKyNkZWZpbmUJUFRSX0FERAkJYWRkCisjZGVmaW5lCVBUUl9TVUJVCXN1YnUKKyNkZWZpbmUJUFRSX0FERFUJYWRkdQorI2RlZmluZSBMSQkJbGkKKyNkZWZpbmUJTEEJCWxhCisjZGVmaW5lCVBUUl9TTEwJCXNsbAorI2RlZmluZQlQVFJfU1JMCQlzcmwKKyNkZWZpbmUJUFRSX1ZBTAkJLndvcmQKKyNlbHNlCisjZGVmaW5lCVBUUl9MCQlsZAorI2RlZmluZQlQVFJfUwkJc2QKKyNkZWZpbmUJUFRSX0FERAkJZGFkZAorI2RlZmluZQlQVFJfU1VCCQlkc3ViCisjZGVmaW5lCVBUUl9TVUJVCWRzdWJ1CisjZGVmaW5lCVBUUl9BRERVCWRhZGR1CisjZGVmaW5lIExJCQlkbGkKKyNkZWZpbmUgTEEJCWRsYQorI2RlZmluZQlQVFJfU0xMCQlkc2xsCisjZGVmaW5lCVBUUl9TUkwJCWRzcmwKKyNkZWZpbmUJUFRSX1ZBTAkJLmR3b3JkCisjZW5kaWYKKworLyoKKyAqIExFQUYoeCwgZnNpemUpCisgKgorICoJRGVjbGFyZSBhIGxlYWYgcm91dGluZS4KKyAqLworI2RlZmluZSBMRUFGKHgsIGZzaXplKQkJXAorCS5hbGlnbgkzOwkJXAorCS5nbG9ibCB4OwkJXAorCS5lbnQgeCwgMDsJCVwKK3g6IDsJCQkJXAorCS5jZmlfc3RhcnRwcm9jOyBcCisJLmZyYW1lIHNwLCBmc2l6ZSwgcmE7CVwKKwlTRVRVUF9HUAkJXAorCisvKgorICogTk9OX0xFQUYoeCkKKyAqCisgKglEZWNsYXJlIGEgbm9uLWxlYWYgcm91dGluZSAoYSByb3V0aW5lIHRoYXQgbWFrZXMgb3RoZXIgQyBjYWxscykuCisgKi8KKyNkZWZpbmUgTk9OX0xFQUYoeCwgZnNpemUsIHJldHBjKSBcCisJLmFsaWduCTM7CQlcCisJLmdsb2JsIHg7CQlcCisJLmVudCB4LCAwOwkJXAoreDogOwkJCQlcCisJLmNmaV9zdGFydHByb2M7IFwKKwkuZnJhbWUgc3AsIGZzaXplLCByZXRwYzsgXAorCVNFVFVQX0dQCQlcCisKKyNlbmRpZiAvKiAhX01JUFNfQVNNX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL2VsZl9tYWNoZGVwLmggYi9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9lbGZfbWFjaGRlcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyN2Q0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9lbGZfbWFjaGRlcC5oCkBAIC0wLDAgKzEsMTk2IEBACisvKgkkTmV0QlNEOiBlbGZfbWFjaGRlcC5oLHYgMS4xNSAyMDExLzAzLzE1IDA3OjM5OjIyIG1hdHQgRXhwICQJKi8KKworI2lmbmRlZiBfTUlQU19FTEZfTUFDSERFUF9IXworI2RlZmluZSAgX01JUFNfRUxGX01BQ0hERVBfSF8KKworI2lmZGVmIF9MUDY0CisjZGVmaW5lIEFSQ0hfRUxGU0laRQkJNjQJLyogTUQgbmF0aXZlIGJpbmFyeSBzaXplICovCisjZWxzZQorI2RlZmluZSBBUkNIX0VMRlNJWkUJCTMyCS8qIE1EIG5hdGl2ZSBiaW5hcnkgc2l6ZSAqLworI2VuZGlmCisKKyNpZiBFTEZTSVpFID09IDMyCisjZGVmaW5lCUVMRjMyX01BQ0hERVBfSURfQ0FTRVMJCQkJCQlcCisJCWNhc2UgRU1fTUlQUzoJCQkJCQlcCisJCQlicmVhazsKKworI2RlZmluZQlFTEYzMl9NQUNIREVQX0lECUVNX01JUFMKKyNlbGlmIEVMRlNJWkUgPT0gNjQKKyNkZWZpbmUJRUxGNjRfTUFDSERFUF9JRF9DQVNFUwkJCQkJCVwKKwkJY2FzZSBFTV9NSVBTOgkJCQkJCVwKKwkJCWJyZWFrOworCisjZGVmaW5lCUVMRjY0X01BQ0hERVBfSUQJRU1fTUlQUworI2VuZGlmCisKKy8qIG1pcHMgcmVsb2NzLiAgKi8KKworI2RlZmluZSBSX01JUFNfTk9ORQkJMAorI2RlZmluZSBSX01JUFNfMTYJCTEKKyNkZWZpbmUgUl9NSVBTXzMyCQkyCisjZGVmaW5lIFJfTUlQU19SRUwzMgkJMworI2RlZmluZSBSX01JUFNfUkVMCQlSX01JUFNfUkVMMzIKKyNkZWZpbmUgUl9NSVBTXzI2CQk0CisjZGVmaW5lIFJfTUlQU19ISTE2CQk1CS8qIGhpZ2ggMTYgYml0cyBvZiBzeW1ib2wgdmFsdWUgKi8KKyNkZWZpbmUgUl9NSVBTX0xPMTYJCTYJLyogbG93IDE2IGJpdHMgb2Ygc3ltYm9sIHZhbHVlICovCisjZGVmaW5lIFJfTUlQU19HUFJFTDE2CQk3ICAJLyogR1AtcmVsYXRpdmUgcmVmZXJlbmNlICAqLworI2RlZmluZSBSX01JUFNfTElURVJBTAkJOCAJLyogUmVmZXJlbmNlIHRvIGxpdGVyYWwgc2VjdGlvbiAgKi8KKyNkZWZpbmUgUl9NSVBTX0dPVDE2CQk5CS8qIFJlZmVyZW5jZSB0byBnbG9iYWwgb2Zmc2V0IHRhYmxlICovCisjZGVmaW5lIFJfTUlQU19HT1QJCVJfTUlQU19HT1QxNgorI2RlZmluZSBSX01JUFNfUEMxNgkJMTAgIAkvKiAxNiBiaXQgUEMgcmVsYXRpdmUgcmVmZXJlbmNlICovCisjZGVmaW5lIFJfTUlQU19DQUxMMTYgCQkxMSAgCS8qIDE2IGJpdCBjYWxsIHRocnUgZ2xibCBvZmZzZXQgdGJsICovCisjZGVmaW5lIFJfTUlQU19DQUxMCQlSX01JUFNfQ0FMTDE2CisjZGVmaW5lIFJfTUlQU19HUFJFTDMyCQkxMgorCisvKiAxMywgMTQsIDE1IGFyZSBub3QgZGVmaW5lZCBhdCB0aGlzIHBvaW50LiAqLworI2RlZmluZSBSX01JUFNfVU5VU0VEMQkJMTMKKyNkZWZpbmUgUl9NSVBTX1VOVVNFRDIJCTE0CisjZGVmaW5lIFJfTUlQU19VTlVTRUQzCQkxNQorCisvKgorICogVGhlIHJlbWFpbmluZyByZWxvY3MgYXJlIGFwcGFyZW50bHkgcGFydCBvZiB0aGUgNjQtYml0IElyaXggRUxGIEFCSS4KKyAqLworI2RlZmluZSBSX01JUFNfU0hJRlQ1CQkxNgorI2RlZmluZSBSX01JUFNfU0hJRlQ2CQkxNworCisjZGVmaW5lIFJfTUlQU182NAkJMTgKKyNkZWZpbmUgUl9NSVBTX0dPVF9ESVNQCQkxOQorI2RlZmluZSBSX01JUFNfR09UX1BBR0UJCTIwCisjZGVmaW5lIFJfTUlQU19HT1RfT0ZTVAkJMjEKKyNkZWZpbmUgUl9NSVBTX0dPVF9ISTE2CQkyMgorI2RlZmluZSBSX01JUFNfR09UX0xPMTYJCTIzCisjZGVmaW5lIFJfTUlQU19TVUIgCQkyNAorI2RlZmluZSBSX01JUFNfSU5TRVJUX0EJCTI1CisjZGVmaW5lIFJfTUlQU19JTlNFUlRfQgkJMjYKKyNkZWZpbmUgUl9NSVBTX0RFTEVURQkJMjcKKyNkZWZpbmUgUl9NSVBTX0hJR0hFUgkJMjgKKyNkZWZpbmUgUl9NSVBTX0hJR0hFU1QJCTI5CisjZGVmaW5lIFJfTUlQU19DQUxMX0hJMTYJMzAKKyNkZWZpbmUgUl9NSVBTX0NBTExfTE8xNgkzMQorI2RlZmluZSBSX01JUFNfU0NOX0RJU1AJCTMyCisjZGVmaW5lIFJfTUlQU19SRUwxNgkJMzMKKyNkZWZpbmUgUl9NSVBTX0FERF9JTU1FRElBVEUJMzQKKyNkZWZpbmUgUl9NSVBTX1BKVU1QCQkzNQorI2RlZmluZSBSX01JUFNfUkVMR09UCQkzNgorI2RlZmluZQlSX01JUFNfSkFMUgkJMzcKKy8qIFRMUyByZWxvY2F0aW9ucyAqLworCisjZGVmaW5lIFJfTUlQU19UTFNfRFRQTU9EMzIJMzgJLyogTW9kdWxlIG51bWJlciAzMiBiaXQgKi8KKyNkZWZpbmUgUl9NSVBTX1RMU19EVFBSRUwzMgkzOQkvKiBNb2R1bGUtcmVsYXRpdmUgb2Zmc2V0IDMyIGJpdCAqLworI2RlZmluZSBSX01JUFNfVExTX0RUUE1PRDY0CTQwCS8qIE1vZHVsZSBudW1iZXIgNjQgYml0ICovCisjZGVmaW5lIFJfTUlQU19UTFNfRFRQUkVMNjQJNDEJLyogTW9kdWxlLXJlbGF0aXZlIG9mZnNldCA2NCBiaXQgKi8KKyNkZWZpbmUgUl9NSVBTX1RMU19HRAkJNDIJLyogMTYgYml0IEdPVCBvZmZzZXQgZm9yIEdEICovCisjZGVmaW5lIFJfTUlQU19UTFNfTERNCQk0MwkvKiAxNiBiaXQgR09UIG9mZnNldCBmb3IgTERNICovCisjZGVmaW5lIFJfTUlQU19UTFNfRFRQUkVMX0hJMTYJNDQJLyogTW9kdWxlLXJlbGF0aXZlIG9mZnNldCwgaGlnaCAxNiBiaXRzICovCisjZGVmaW5lIFJfTUlQU19UTFNfRFRQUkVMX0xPMTYJNDUJLyogTW9kdWxlLXJlbGF0aXZlIG9mZnNldCwgbG93IDE2IGJpdHMgKi8KKyNkZWZpbmUgUl9NSVBTX1RMU19HT1RUUFJFTAk0NgkvKiAxNiBiaXQgR09UIG9mZnNldCBmb3IgSUUgKi8KKyNkZWZpbmUgUl9NSVBTX1RMU19UUFJFTDMyCTQ3CS8qIFRQLXJlbGF0aXZlIG9mZnNldCwgMzIgYml0ICovCisjZGVmaW5lIFJfTUlQU19UTFNfVFBSRUw2NAk0OAkvKiBUUC1yZWxhdGl2ZSBvZmZzZXQsIDY0IGJpdCAqLworI2RlZmluZSBSX01JUFNfVExTX1RQUkVMX0hJMTYJNDkJLyogVFAtcmVsYXRpdmUgb2Zmc2V0LCBoaWdoIDE2IGJpdHMgKi8KKyNkZWZpbmUgUl9NSVBTX1RMU19UUFJFTF9MTzE2CTUwCS8qIFRQLXJlbGF0aXZlIG9mZnNldCwgbG93IDE2IGJpdHMgKi8KKworI2RlZmluZSBSX01JUFNfbWF4CQk1MQorCisjZGVmaW5lIFJfVFlQRShuYW1lKQkJX19DT05DQVQoUl9NSVBTXyxuYW1lKQorCisjZGVmaW5lCVJfTUlQUzE2X21pbgkJMTAwCisjZGVmaW5lCVJfTUlQUzE2XzI2CQkxMDAKKyNkZWZpbmUJUl9NSVBTMTZfR1BSRUwJCTEwMQorI2RlZmluZQlSX01JUFMxNl9HT1QxNgkJMTAyCisjZGVmaW5lCVJfTUlQUzE2X0NBTEwxNgkJMTAzCisjZGVmaW5lCVJfTUlQUzE2X0hJMTYJCTEwNAorI2RlZmluZQlSX01JUFMxNl9MTzE2CQkxMDUKKyNkZWZpbmUJUl9NSVBTMTZfbWF4CQkxMDYKKworCisvKiBtaXBzIGR5bmFtaWMgdGFncyAqLworCisjZGVmaW5lIERUX01JUFNfUkxEX1ZFUlNJT04JMHg3MDAwMDAwMQorI2RlZmluZSBEVF9NSVBTX1RJTUVfU1RBTVAJMHg3MDAwMDAwMgorI2RlZmluZSBEVF9NSVBTX0lDSEVDS1NVTQkweDcwMDAwMDAzCisjZGVmaW5lIERUX01JUFNfSVZFUlNJT04JMHg3MDAwMDAwNAorI2RlZmluZSBEVF9NSVBTX0ZMQUdTCQkweDcwMDAwMDA1CisjZGVmaW5lIERUX01JUFNfQkFTRV9BRERSRVNTCTB4NzAwMDAwMDYKKyNkZWZpbmUgRFRfTUlQU19DT05GTElDVAkweDcwMDAwMDA4CisjZGVmaW5lIERUX01JUFNfTElCTElTVAkJMHg3MDAwMDAwOQorI2RlZmluZSBEVF9NSVBTX0NPTkZMSUNUTk8JMHg3MDAwMDAwYgorI2RlZmluZQlEVF9NSVBTX0xPQ0FMX0dPVE5PCTB4NzAwMDAwMGEJLyogbnVtYmVyIG9mIGxvY2FsIGdvdCBlbnRzICovCisjZGVmaW5lIERUX01JUFNfTElCTElTVE5PCTB4NzAwMDAwMTAKKyNkZWZpbmUJRFRfTUlQU19TWU1UQUJOTwkweDcwMDAwMDExCS8qIG51bWJlciBvZiAuZHluc3ltIGVudHJpZXMgKi8KKyNkZWZpbmUgRFRfTUlQU19VTlJFRkVYVE5PCTB4NzAwMDAwMTIKKyNkZWZpbmUJRFRfTUlQU19HT1RTWU0JCTB4NzAwMDAwMTMJLyogZmlyc3QgZHluYW1pYyBzeW0gaW4gZ290ICovCisjZGVmaW5lIERUX01JUFNfSElQQUdFTk8JMHg3MDAwMDAxNAorI2RlZmluZQlEVF9NSVBTX1JMRF9NQVAJCTB4NzAwMDAwMTYJLyogYWRkcmVzcyBvZiBsb2FkZXIgbWFwICovCisKKy8qCisgKiBFTEYgRmxhZ3MKKyAqLworI2RlZmluZQlFRl9NSVBTX1BJQwkJMHgwMDAwMDAwMgkvKiBDb250YWlucyBQSUMgY29kZSAqLworI2RlZmluZQlFRl9NSVBTX0NQSUMJCTB4MDAwMDAwMDQJLyogU1REIFBJQyBjYWxsaW5nIHNlcXVlbmNlICovCisjZGVmaW5lCUVGX01JUFNfQUJJMgkJMHgwMDAwMDAyMAkvKiBOMzIgKi8KKworI2RlZmluZQlFRl9NSVBTX0FSQ0hfQVNFCTB4MGYwMDAwMDAJLyogQXJjaGl0ZWN0dXJhbCBleHRlbnNpb25zICovCisjZGVmaW5lCUVGX01JUFNfQVJDSF9NRE1YCTB4MDgwMDAwMDAJLyogTURNWCBtdWx0aW1lZGlhIGV4dGVuc2lvbiAqLworI2RlZmluZQlFRl9NSVBTX0FSQ0hfTTE2CTB4MDQwMDAwMDAJLyogTUlQUy0xNiBJU0EgZXh0ZW5zaW9ucyAqLworCisjZGVmaW5lCUVGX01JUFNfQVJDSAkJMHhmMDAwMDAwMAkvKiBBcmNoaXRlY3R1cmUgZmllbGQgKi8KKyNkZWZpbmUJRUZfTUlQU19BUkNIXzEJCTB4MDAwMDAwMDAJLyogLW1pcHMxIGNvZGUgKi8KKyNkZWZpbmUJRUZfTUlQU19BUkNIXzIJCTB4MTAwMDAwMDAJLyogLW1pcHMyIGNvZGUgKi8KKyNkZWZpbmUJRUZfTUlQU19BUkNIXzMJCTB4MjAwMDAwMDAJLyogLW1pcHMzIGNvZGUgKi8KKyNkZWZpbmUJRUZfTUlQU19BUkNIXzQJCTB4MzAwMDAwMDAJLyogLW1pcHM0IGNvZGUgKi8KKyNkZWZpbmUJRUZfTUlQU19BUkNIXzUJCTB4NDAwMDAwMDAJLyogLW1pcHM1IGNvZGUgKi8KKyNkZWZpbmUJRUZfTUlQU19BUkNIXzMyCQkweDUwMDAwMDAwCS8qIC1taXBzMzIgY29kZSAqLworI2RlZmluZQlFRl9NSVBTX0FSQ0hfNjQJCTB4NjAwMDAwMDAJLyogLW1pcHM2NCBjb2RlICovCisjZGVmaW5lCUVGX01JUFNfQVJDSF8zMlIyCTB4NzAwMDAwMDAJLyogLW1pcHMzMnIyIGNvZGUgKi8KKyNkZWZpbmUJRUZfTUlQU19BUkNIXzY0UjIJMHg4MDAwMDAwMAkvKiAtbWlwczY0cjIgY29kZSAqLworCisjZGVmaW5lCUVGX01JUFNfQUJJCQkweDAwMDBmMDAwCisjZGVmaW5lCUVGX01JUFNfQUJJX08zMgkJMHgwMDAwMTAwMAorI2RlZmluZQlFRl9NSVBTX0FCSV9PNjQJCTB4MDAwMDIwMDAKKyNkZWZpbmUJRUZfTUlQU19BQklfRUFCSTMyCTB4MDAwMDMwMDAKKyNkZWZpbmUJRUZfTUlQU19BQklfRUFCSTY0CTB4MDAwMDQwMDAKKworI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUJRUxGMzJfTUFDSERFUF9FTkRJQU5ORVNTCUVMRkRBVEEyTVNCCisjZGVmaW5lCUVMRjY0X01BQ0hERVBfRU5ESUFOTkVTUwlFTEZEQVRBMk1TQgorI2VsaWYgZGVmaW5lZChfX01JUFNFTF9fKQorI2RlZmluZQlFTEYzMl9NQUNIREVQX0VORElBTk5FU1MJRUxGREFUQTJMU0IKKyNkZWZpbmUJRUxGNjRfTUFDSERFUF9FTkRJQU5ORVNTCUVMRkRBVEEyTFNCCisjZWxpZiAhZGVmaW5lZChIQVZFX05CVE9PTF9DT05GSUdfSCkKKyNlcnJvciBuZWl0aGVyIF9fTUlQU0VMX18gbm9yIF9fTUlQU0VCX18gYXJlIGRlZmluZWQuCisjZW5kaWYKKworI2lmZGVmIF9LRVJORUwKKyNpZmRlZiBfS0VSTkVMX09QVAorI2luY2x1ZGUgIm9wdF9jb21wYXRfbmV0YnNkLmgiCisjZW5kaWYKKyNpZmRlZiBDT01QQVRfMTYKKy8qCisgKiBVcCB0byAxLjYsIHRoZSBFTEYgZHluYW1pYyBsb2FkZXIgKGxkLmVsZl9zbykgd2FzIG5vdCByZWxvY2F0YWJsZS4KKyAqIFRlbGwgdGhlIGtlcm5lbCBFTEYgZXhlYyBjb2RlIG5vdCB0byB0cnkgcmVsb2NhdGluZyB0aGUgaW50ZXJwcmV0ZXIKKyAqIGZvciBkeW5hbWljYWxseS1saW5rZWQgRUxGIGJpbmFyaWVzLgorICovCisjZGVmaW5lIEVMRl9JTlRFUlBfTk9OX1JFTE9DQVRBQkxFCisjZW5kaWYgLyogQ09NUEFUXzE2ICovCisKKy8qCisgKiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gaW5jbHVkZSB0aGUgRUxGIGhlYWRlciBzbyB3ZSBjYW4gcGljayBvdXQgdGhlCisgKiBBQkkgYmVpbmcgdXNlZC4KKyAqLworI2lmZGVmIEVMRlNJWkUKKyNkZWZpbmUJRUxGX01EX1BST0JFX0ZVTkMJRUxGTkFNRTIobWlwc19uZXRic2QscHJvYmUpCisjZGVmaW5lCUVMRl9NRF9DT1JFRFVNUF9TRVRVUAlFTEZOQU1FMihjb3JlZHVtcCxzZXR1cCkKKyNlbmRpZgorCitzdHJ1Y3QgZXhlY19wYWNrYWdlOworCitpbnQgbWlwc19uZXRic2RfZWxmMzJfcHJvYmUoc3RydWN0IGx3cCAqLCBzdHJ1Y3QgZXhlY19wYWNrYWdlICosIHZvaWQgKiwgY2hhciAqLAorCXZhZGRyX3QgKik7Cit2b2lkIGNvcmVkdW1wX2VsZjMyX3NldHVwKHN0cnVjdCBsd3AgKiwgdm9pZCAqKTsKKworaW50IG1pcHNfbmV0YnNkX2VsZjY0X3Byb2JlKHN0cnVjdCBsd3AgKiwgc3RydWN0IGV4ZWNfcGFja2FnZSAqLCB2b2lkICosIGNoYXIgKiwKKwl2YWRkcl90ICopOwordm9pZCBjb3JlZHVtcF9lbGY2NF9zZXR1cChzdHJ1Y3QgbHdwICosIHZvaWQgKik7CisjZW5kaWYgLyogX0tFUk5FTCAqLworCisjZW5kaWYgLyogX01JUFNfRUxGX01BQ0hERVBfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvZW5kaWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhOTAwNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCSRPcGVuQlNEOiBlbmRpYW4uaCx2IDEuNSAyMDA2LzAyLzI3IDIzOjM1OjU5IG1pb2QgRXhwICQgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIE9wc3ljb24gQUIgICh3d3cub3BzeWNvbi5zZSAvIHd3dy5vcHN5Y29uLmNvbSkKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworICogT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfTUlQUzY0X0VORElBTl9IXworI2RlZmluZSBfTUlQUzY0X0VORElBTl9IXworCisjaWZkZWYgX19HTlVDX18KKworI2lmIGRlZmluZWQoX19taXBzX2lzYV9yZXYpICYmIChfX21pcHNfaXNhX3JldiA+PSAyKQorI2RlZmluZSBfX3N3YXAxNm1kKHgpICh7CQkJCQlcCisgICAgcmVnaXN0ZXIgdWludDE2X3QgX3ggPSAoeCk7CQkJCQlcCisgICAgcmVnaXN0ZXIgdWludDE2X3QgX3I7CQkJCQlcCisgICAgX19hc20gdm9sYXRpbGUgKCJ3c2JoICUwLCAlMSIgOiAiPXIiIChfcikgOiAiciIgKF94KSk7CVwKKyAgICBfcjsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19zd2FwMzJtZCh4KSAoewkJCQkJXAorICAgIHJlZ2lzdGVyIHVpbnQzMl90IF94ID0gKHgpOwkJCQkJXAorICAgIHJlZ2lzdGVyIHVpbnQzMl90IF9yOwkJCQkJXAorICAgIF9fYXNtIHZvbGF0aWxlICgid3NiaCAlMCwgJTE7IHJvdHIgJTAsICUwLCAxNiIgOiAiPXIiIChfcikgOiAiciIgKF94KSk7IFwKKyAgICBfcjsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19zd2FwNjRtZCh4KSAoewkJCQkJXAorICAgIHVpbnQ2NF90IF9zd2FwNjRtZF94ID0gKHgpOwkJCQkJXAorICAgICh1aW50NjRfdCkgX19zd2FwMzJtZChfc3dhcDY0bWRfeCA+PiAzMikgfAkJCVwKKyAgICAgICAgKHVpbnQ2NF90KSBfX3N3YXAzMm1kKF9zd2FwNjRtZF94ICYgMHhmZmZmZmZmZikgPDwgMzI7CVwKK30pCisKKy8qIFRlbGwgc3lzL2VuZGlhbi5oIHdlIGhhdmUgTUQgdmFyaWFudHMgb2YgdGhlIHN3YXAgbWFjcm9zLiAgKi8KKyNkZWZpbmUgTURfU1dBUAorCisjZW5kaWYgIC8qIF9fbWlwczMycjJfXyAqLworI2VuZGlmICAvKiBfX0dOVUNfXyAqLworCisjaWYgZGVmaW5lZChfX01JUFNFQl9fKQorI2RlZmluZSBfQllURV9PUkRFUiBfQklHX0VORElBTgorI2Vsc2UKKyNkZWZpbmUgX0JZVEVfT1JERVIgX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorI2RlZmluZSBfX1NUUklDVF9BTElHTk1FTlQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisKKyNlbmRpZiAvKiBfTUlQUzY0X0VORElBTl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvZXhlYy5oIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvZXhlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNjNmNzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9leGVjLmgKQEAgLTAsMCArMSwxODggQEAKKy8qCSRPcGVuQlNEOiBleGVjLmgsdiAxLjEgMjAwNC8xMC8xOCAxOTowNTozNiBncmFuZ2UgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5Ni0yMDA0IFBlciBGb2dlbHN0cm9tLCBPcHN5Y29uIEFCCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKKyAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX01JUFM2NF9FWEVDX0hfCisjZGVmaW5lIF9NSVBTNjRfRVhFQ19IXworCisjZGVmaW5lCV9fTERQR1NaCTQwOTYKKworLyoKKyAqICBEZWZpbmUgd2hhdCBleGVjICJmb3JtYXRzIiB3ZSBzaG91bGQgaGFuZGxlLgorICovCisjZGVmaW5lIE5BVElWRV9FWEVDX0VMRgorI2RlZmluZSBOQVRJVkVfRUxGU0laRSA2NAorI2RlZmluZQlFWEVDX1NDUklQVAorCisvKgorICogIElmIGluY2x1ZGVkIGZyb20gc3lzL2V4ZWMuaCBkZWZpbmUga2VybmVscyBFTEYgZm9ybWF0LgorICovCisjaWZkZWYgX19MUDY0X18KKyNkZWZpbmUJQVJDSF9FTEZTSVpFIDY0CisjZGVmaW5lIERCX0VMRlNJWkUgNjQKKyNkZWZpbmUgRUxGX1RBUkdfQ0xBU1MgIEVMRkNMQVNTNjQKKyNlbHNlCisjZGVmaW5lCUFSQ0hfRUxGU0laRSAzMgorI2RlZmluZSBEQl9FTEZTSVpFIDMyCisjZGVmaW5lIEVMRl9UQVJHX0NMQVNTICBFTEZDTEFTUzMyCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgRUxGX1RBUkdfREFUQQkJRUxGREFUQTJNU0IKKyNlbHNlCisjZGVmaW5lIEVMRl9UQVJHX0RBVEEJCUVMRkRBVEEyTFNCCisjZW5kaWYKKyNkZWZpbmUgRUxGX1RBUkdfTUFDSAkJRU1fTUlQUworCisjZGVmaW5lIF9OTElTVF9ET19FTEYKKworI2lmIGRlZmluZWQoX0xQNjQpCisjZGVmaW5lIF9LRVJOX0RPX0VMRjY0CisjaWYgZGVmaW5lZChDT01QQVRfTzMyKQorI2RlZmluZSBfS0VSTl9ET19FTEYKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgX0tFUk5fRE9fRUxGCisjZW5kaWYKKworLyogSW5mb3JtYXRpb24gdGFrZW4gZnJvbSBNSVBTIEFCSSBzdXBwbGVtZW50YWwgKi8KKworLyogQXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBTZWdtZW50IHR5cGVzIC0gcF90eXBlICovCisjZGVmaW5lIFBUX01JUFNfUkVHSU5GTyAweDcwMDAwMDAwICAgICAgLyogUmVnaXN0ZXIgdXNhZ2UgaW5mb3JtYXRpb24gKi8KKworLyogQXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBkX3RhZyBmaWVsZCBmb3IgRWxmMzJfRHluLiAgKi8KKyNkZWZpbmUgRFRfTUlQU19STERfVkVSU0lPTiAgMHg3MDAwMDAwMSAvKiBSdW50aW1lIExpbmtlciBJbnRlcmZhY2UgSUQgKi8KKyNkZWZpbmUgRFRfTUlQU19USU1FX1NUQU1QICAgMHg3MDAwMDAwMiAvKiBUaW1lc3RhbXAgKi8KKyNkZWZpbmUgRFRfTUlQU19JQ0hFQ0tTVU0gICAgMHg3MDAwMDAwMyAvKiBDa3N1bSBvZiBleHQuIHN0ci4gYW5kIGNvbS4gc2l6ZXMgKi8KKyNkZWZpbmUgRFRfTUlQU19JVkVSU0lPTiAgICAgMHg3MDAwMDAwNCAvKiBWZXJzaW9uIHN0cmluZyAoc3RyaW5nIHRibCBpbmRleCkgKi8KKyNkZWZpbmUgRFRfTUlQU19GTEFHUyAgICAgICAgMHg3MDAwMDAwNSAvKiBGbGFncyAqLworI2RlZmluZSBEVF9NSVBTX0JBU0VfQUREUkVTUyAweDcwMDAwMDA2IC8qIFNlZ21lbnQgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIERUX01JUFNfQ09ORkxJQ1QgICAgIDB4NzAwMDAwMDggLyogQWRyIG9mIC5jb25mbGljdCBzZWN0aW9uICovCisjZGVmaW5lIERUX01JUFNfTElCTElTVCAgICAgIDB4NzAwMDAwMDkgLyogQWRkcmVzcyBvZiAubGlibGlzdCBzZWN0aW9uICovCisjZGVmaW5lIERUX01JUFNfTE9DQUxfR09UTk8gIDB4NzAwMDAwMGEgLyogTnVtYmVyIG9mIGxvY2FsIC5HT1QgZW50cmllcyAqLworI2RlZmluZSBEVF9NSVBTX0NPTkZMSUNUTk8gICAweDcwMDAwMDBiIC8qIE51bWJlciBvZiAuY29uZmxpY3QgZW50cmllcyAqLworI2RlZmluZSBEVF9NSVBTX0xJQkxJU1ROTyAgICAweDcwMDAwMDEwIC8qIE51bWJlciBvZiAubGlibGlzdCBlbnRyaWVzICovCisjZGVmaW5lIERUX01JUFNfU1lNVEFCTk8gICAgIDB4NzAwMDAwMTEgLyogTnVtYmVyIG9mIC5keW5zeW0gZW50cmllcyAqLworI2RlZmluZSBEVF9NSVBTX1VOUkVGRVhUTk8gICAweDcwMDAwMDEyIC8qIEZpcnN0IGV4dGVybmFsIERZTlNZTSAqLworI2RlZmluZSBEVF9NSVBTX0dPVFNZTSAgICAgICAweDcwMDAwMDEzIC8qIEZpcnN0IEdPVCBlbnRyeSBpbiAuZHluc3ltICovCisjZGVmaW5lIERUX01JUFNfSElQQUdFTk8gICAgIDB4NzAwMDAwMTQgLyogTnVtYmVyIG9mIEdPVCBwYWdlIHRhYmxlIGVudHJpZXMgKi8KKyNkZWZpbmUgRFRfTUlQU19STERfTUFQICAgICAgMHg3MDAwMDAxNiAvKiBBZGRyZXNzIG9mIGRlYnVnIG1hcCBwb2ludGVyICovCisKKyNkZWZpbmUgRFRfUFJPQ05VTSAoRFRfTUlQU19STERfTUFQIC0gRFRfTE9QUk9DICsgMSkKKworLyoKKyAqIExlZ2FsIHZhbHVlcyBmb3IgZV9mbGFncyBmaWVsZCBvZiBFbGYzMl9FaGRyLgorICovCisjZGVmaW5lIEVGX01JUFNfTk9SRU9SREVSCTB4MDAwMDAwMDEJLyogLm5vcmVvcmRlciB3YXMgdXNlZCAqLworI2RlZmluZSBFRl9NSVBTX1BJQwkJMHgwMDAwMDAwMgkvKiBDb250YWlucyBQSUMgY29kZSAqLworI2RlZmluZSBFRl9NSVBTX0NQSUMJCTB4MDAwMDAwMDQJLyogVXNlcyBQSUMgY2FsbGluZyBzZXF1ZW5jZSAqLworI2RlZmluZQlFRl9NSVBTX0FCSTIJCTB4MDAwMDAwMjAJLyogLW4zMiBvbiBJcml4IDYgKi8KKyNkZWZpbmUJRUZfTUlQU18zMkJJVE1PREUJMHgwMDAwMDEwMAkvKiA2NCBiaXQgaW4gMzIgYml0IG1vZGUuLi4gKi8KKyNkZWZpbmUgRUZfTUlQU19BUkNICQkweGYwMDAwMDAwCS8qIE1JUFMgYXJjaGl0ZWN0dXJlIGxldmVsICovCisjZGVmaW5lCUVfTUlQU19BUkNIXzEJCTB4MDAwMDAwMDAKKyNkZWZpbmUJRV9NSVBTX0FSQ0hfMgkJMHgxMDAwMDAwMAorI2RlZmluZQlFX01JUFNfQVJDSF8zCQkweDIwMDAwMDAwCisjZGVmaW5lCUVfTUlQU19BUkNIXzQJCTB4MzAwMDAwMDAKKyNkZWZpbmUJRUZfTUlQU19BQkkJCTB4MDAwMGYwMDAJLyogQUJJIGxldmVsICovCisjZGVmaW5lCUVfTUlQU19BQklfTk9ORQkJMHgwMDAwMDAwMAkvKiBBQkkgbGV2ZWwgbm90IHNldCAqLworI2RlZmluZQlFX01JUFNfQUJJX08zMgkJMHgwMDAwMTAwMAorI2RlZmluZQlFX01JUFNfQUJJX082NAkJMHgwMDAwMjAwMAorI2RlZmluZQlFX01JUFNfQUJJX0VBQkkzMgkweDAwMDA0MDAwCisjZGVmaW5lCUVfTUlQU19BQklfRUFCSTY0CTB4MDAwMDQwMDAKKworLyoKKyAqIE1pcHMgc3BlY2lhbCBzZWN0aW9ucy4KKyAqLworI2RlZmluZQlTSE5fTUlQU19BQ09NTU9OCTB4ZmYwMAkJLyogQWxsb2NhdGVkIGNvbW1vbiBzeW1ib2xzICovCisjZGVmaW5lCVNITl9NSVBTX1NDT01NT04JMHhmZjAzCQkvKiBTbWFsbCBjb21tb24gc3ltYm9scyAqLworI2RlZmluZQlTSE5fTUlQU19TVU5ERUZJTkVECTB4ZmYwNAkJLyogU21hbGwgdW5kZWZpbmVkIHN5bWJvbHMgKi8KKworLyoKKyAqIExlZ2FsIHZhbHVlcyBmb3Igc2hfdHlwZSBmaWVsZCBvZiBFbGYzMl9TaGRyLgorICovCisjZGVmaW5lCVNIVF9NSVBTX0xJQkxJU1QgIDB4NzAwMDAwMDAJLyogU2hhcmVkIG9iamVjdHMgdXNlZCBpbiBsaW5rICovCisjZGVmaW5lCVNIVF9NSVBTX0NPTkZMSUNUIDB4NzAwMDAwMDIJLyogQ29uZmxpY3Rpbmcgc3ltYm9scyAqLworI2RlZmluZQlTSFRfTUlQU19HUFRBQiAgICAweDcwMDAwMDAzCS8qIEdsb2JhbCBkYXRhIGFyZWEgc2l6ZXMgKi8KKyNkZWZpbmUJU0hUX01JUFNfVUNPREUgICAgMHg3MDAwMDAwNAkvKiBSZXNlcnZlZCBmb3IgU0dJL01JUFMgY29tcGlsZXJzICovCisjZGVmaW5lCVNIVF9NSVBTX0RFQlVHICAgIDB4NzAwMDAwMDUJLyogTUlQUyBFQ09GRiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUJU0hUX01JUFNfUkVHSU5GTyAgMHg3MDAwMDAwNgkvKiBSZWdpc3RlciB1c2FnZSBpbmZvcm1hdGlvbiAqLworCisvKgorICogTGVnYWwgdmFsdWVzIGZvciBzaF9mbGFncyBmaWVsZCBvZiBFbGYzMl9TaGRyLgorICovCisjZGVmaW5lCVNIRl9NSVBTX0dQUkVMCTB4MTAwMDAwMDAJLyogTXVzdCBiZSBwYXJ0IG9mIGdsb2JhbCBkYXRhIGFyZWEgKi8KKworI2lmIDAKKy8qCisgKiBFbnRyaWVzIGZvdW5kIGluIHNlY3Rpb25zIG9mIHR5cGUgU0hUX01JUFNfR1BUQUIuCisgKi8KK3R5cGVkZWYgdW5pb24geworCXN0cnVjdCB7CisJCUVsZjMyX1dvcmQgZ3RfY3VycmVudF9nX3ZhbHVlOwkvKiAtRyB2YWwgdXNlZCBpbiBjb21waWxhdGlvbiAqLworCQlFbGYzMl9Xb3JkIGd0X3VudXNlZDsJLyogTm90IHVzZWQgKi8KKwl9IGd0X2hlYWRlcjsJCQkvKiBGaXJzdCBlbnRyeSBpbiBzZWN0aW9uICovCisJc3RydWN0IHsKKwkJRWxmMzJfV29yZCBndF9nX3ZhbHVlOwkvKiBJZiB0aGlzIHZhbCB3ZXJlIHVzZWQgZm9yIC1HICovCisJCUVsZjMyX1dvcmQgZ3RfYnl0ZXM7CS8qIFRoaXMgbWFueSBieXRlcyB3b3VsZCBiZSB1c2VkICovCisJfSBndF9lbnRyeTsJCQkvKiBTdWJzZXF1ZW50IGVudHJpZXMgaW4gc2VjdGlvbiAqLworfSBFbGYzMl9ncHRhYjsKKworLyoKKyAqIEVudHJ5IGZvdW5kIGluIHNlY3Rpb25zIG9mIHR5cGUgU0hUX01JUFNfUkVHSU5GTy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX1dvcmQJcmlfZ3BybWFzazsJLyogR2VuZXJhbCByZWdpc3RlcnMgdXNlZCAqLworCUVsZjMyX1dvcmQJcmlfY3BybWFza1s0XTsJLyogQ29wcm9jZXNzb3IgcmVnaXN0ZXJzIHVzZWQgKi8KKwlFbGYzMl9Td29yZAlyaV9ncF92YWx1ZTsJLyogJGdwIHJlZ2lzdGVyIHZhbHVlICovCit9IEVsZjMyX1JlZ0luZm87CisjZW5kaWYKKworCisvKgorICogTWlwcyByZWxvY2F0aW9ucy4KKyAqLworCisjZGVmaW5lCVJfTUlQU19OT05FCTAJLyogTm8gcmVsb2MgKi8KKyNkZWZpbmUJUl9NSVBTXzE2CTEJLyogRGlyZWN0IDE2IGJpdCAqLworI2RlZmluZQlSX01JUFNfMzIJMgkvKiBEaXJlY3QgMzIgYml0ICovCisjZGVmaW5lCVJfTUlQU19SRUwzMgkzCS8qIFBDIHJlbGF0aXZlIDMyIGJpdCAqLworI2RlZmluZQlSX01JUFNfMjYJNAkvKiBEaXJlY3QgMjYgYml0IHNoaWZ0ZWQgKi8KKyNkZWZpbmUJUl9NSVBTX0hJMTYJNQkvKiBIaWdoIDE2IGJpdCAqLworI2RlZmluZQlSX01JUFNfTE8xNgk2CS8qIExvdyAxNiBiaXQgKi8KKyNkZWZpbmUJUl9NSVBTX0dQUkVMMTYJNwkvKiBHUCByZWxhdGl2ZSAxNiBiaXQgKi8KKyNkZWZpbmUJUl9NSVBTX0xJVEVSQUwJOAkvKiAxNiBiaXQgbGl0ZXJhbCBlbnRyeSAqLworI2RlZmluZQlSX01JUFNfR09UMTYJOQkvKiAxNiBiaXQgR09UIGVudHJ5ICovCisjZGVmaW5lCVJfTUlQU19QQzE2CTEwCS8qIFBDIHJlbGF0aXZlIDE2IGJpdCAqLworI2RlZmluZQlSX01JUFNfQ0FMTDE2CTExCS8qIDE2IGJpdCBHT1QgZW50cnkgZm9yIGZ1bmN0aW9uICovCisjZGVmaW5lCVJfTUlQU19HUFJFTDMyCTEyCS8qIEdQIHJlbGF0aXZlIDMyIGJpdCAqLworCisjZGVmaW5lCVJfTUlQU182NAkxOAorCisjZGVmaW5lCVJfTUlQU19SRUwzMl82NAkoKFJfTUlQU182NCA8PCA4KSB8IFJfTUlQU19SRUwzMikKKworCisjZW5kaWYJLyogIV9NSVBTNjRfRVhFQ19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvcmVnZGVmLmggYi9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9yZWdkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTdjZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvcmVnZGVmLmgKQEAgLTAsMCArMSw5OSBAQAorLyoJJE9wZW5CU0Q6IHJlZ2RlZi5oLHYgMS4zIDIwMDUvMDgvMDcgMDc6Mjk6NDQgbWlvZCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBSYWxwaCBDYW1wYmVsbC4gVGhpcyBmaWxlIGlzIGRlcml2ZWQgZnJvbSB0aGUgTUlQUyBSSVNDCisgKiBBcmNoaXRlY3R1cmUgYm9vayBieSBHZXJyeSBLYW5lLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcmVnZGVmLmgJOC4xIChCZXJrZWxleSkgNi8xMC85MworICovCisjaWZuZGVmIF9NSVBTX1JFR0RFRl9IXworI2RlZmluZSBfTUlQU19SRUdERUZfSF8KKworI2lmIChfTUlQU19TSU0gPT0gX0FCSTY0KSAmJiAhZGVmaW5lZChfX21pcHNfbjY0KQorI2RlZmluZSBfX21pcHNfbjY0IDEKKyNlbmRpZgorI2lmIChfTUlQU19TSU0gPT0gX0FCSU4zMikgJiYgICFkZWZpbmVkKF9fbWlwc19uMzIpCisjZGVmaW5lIF9fbWlwc19uMzIgMQorI2VuZGlmCisKKyNkZWZpbmUgemVybwkkMAkvKiBhbHdheXMgemVybyAqLworI2RlZmluZSBBVAkkYXQJLyogYXNzZW1ibGVyIHRlbXAgKi8KKyNkZWZpbmUgdjAJJDIJLyogcmV0dXJuIHZhbHVlICovCisjZGVmaW5lIHYxCSQzCisjZGVmaW5lIGEwCSQ0CS8qIGFyZ3VtZW50IHJlZ2lzdGVycyAqLworI2RlZmluZSBhMQkkNQorI2RlZmluZSBhMgkkNgorI2RlZmluZSBhMwkkNworI2lmIGRlZmluZWQoX19taXBzX24zMikgfHwgZGVmaW5lZChfX21pcHNfbjY0KQorI2RlZmluZSBhNAkkOAkvKiBleHBhbmRlZCByZWdpc3RlciBhcmd1bWVudHMgKi8KKyNkZWZpbmUgYTUJJDkKKyNkZWZpbmUgYTYJJDEwCisjZGVmaW5lIGE3CSQxMQorI2RlZmluZSB0YTAJJDgJLyogYWxpYXMgKi8KKyNkZWZpbmUgdGExCSQ5CisjZGVmaW5lIHRhMgkkMTAKKyNkZWZpbmUgdGEzCSQxMQorI2RlZmluZSB0MAkkMTIJLyogdGVtcCByZWdpc3RlcnMgKG5vdCBzYXZlZCBhY3Jvc3Mgc3Vicm91dGluZSBjYWxscykgKi8KKyNkZWZpbmUgdDEJJDEzCisjZGVmaW5lIHQyCSQxNAorI2RlZmluZSB0MwkkMTUKKyNlbHNlCisjZGVmaW5lIHQwCSQ4CS8qIHRlbXAgcmVnaXN0ZXJzIChub3Qgc2F2ZWQgYWNyb3NzIHN1YnJvdXRpbmUgY2FsbHMpICovCisjZGVmaW5lIHQxCSQ5CisjZGVmaW5lIHQyCSQxMAorI2RlZmluZSB0MwkkMTEKKyNkZWZpbmUgdDQJJDEyCisjZGVmaW5lIHQ1CSQxMworI2RlZmluZSB0NgkkMTQKKyNkZWZpbmUgdDcJJDE1CisjZGVmaW5lIHRhMAkkMTIJLyogYWxpYXMgKi8KKyNkZWZpbmUgdGExCSQxMworI2RlZmluZSB0YTIJJDE0CisjZGVmaW5lIHRhMwkkMTUKKyNlbmRpZgorI2RlZmluZSBzMAkkMTYJLyogc2F2ZWQgYWNyb3NzIHN1YnJvdXRpbmUgY2FsbHMgKGNhbGxlZSBzYXZlZCkgKi8KKyNkZWZpbmUgczEJJDE3CisjZGVmaW5lIHMyCSQxOAorI2RlZmluZSBzMwkkMTkKKyNkZWZpbmUgczQJJDIwCisjZGVmaW5lIHM1CSQyMQorI2RlZmluZSBzNgkkMjIKKyNkZWZpbmUgczcJJDIzCisjZGVmaW5lIHQ4CSQyNAkvKiB0d28gbW9yZSB0ZW1wIHJlZ2lzdGVycyAqLworI2RlZmluZSB0OQkkMjUKKyNkZWZpbmUgazAJJDI2CS8qIGtlcm5lbCB0ZW1wb3JhcnkgKi8KKyNkZWZpbmUgazEJJDI3CisjZGVmaW5lIGdwCSQyOAkvKiBnbG9iYWwgcG9pbnRlciAqLworI2RlZmluZSBzcAkkMjkJLyogc3RhY2sgcG9pbnRlciAqLworI2RlZmluZSBzOAkkMzAJLyogb25lIG1vcmUgY2FsbGVlIHNhdmVkICovCisjZGVmaW5lIHJhCSQzMQkvKiByZXR1cm4gYWRkcmVzcyAqLworCisjZW5kaWYgLyogIV9NSVBTX1JFR0RFRl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvcmVnbnVtLmggYi9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9yZWdudW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmUxMjgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvcmVnbnVtLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCSRPcGVuQlNEOiByZWdudW0uaCx2IDEuMyAyMDA0LzA4LzEwIDIwOjI4OjEzIGRlcmFhZHQgRXhwICQgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIE9wc3ljb24gQUIgICh3d3cub3BzeWNvbi5zZSAvIHd3dy5vcHN5Y29uLmNvbSkKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworICogT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfTUlQUzY0X1JFR05VTV9IXworI2RlZmluZSBfTUlQUzY0X1JFR05VTV9IXworCisvKgorICogTG9jYXRpb24gb2YgdGhlIHNhdmVkIHJlZ2lzdGVycyByZWxhdGl2ZSB0byBaRVJPLgorICogVXNhZ2UgaXMgcC0+cF9yZWdzW1hYXS4KKyAqLworI2RlZmluZSBaRVJPCTAKKyNkZWZpbmUgQVNUCTEKKyNkZWZpbmUgVjAJMgorI2RlZmluZSBWMQkzCisjZGVmaW5lIEEwCTQKKyNkZWZpbmUgQTEJNQorI2RlZmluZSBBMgk2CisjZGVmaW5lIEEzCTcKKyNkZWZpbmUgVDAJOAorI2RlZmluZSBUMQk5CisjZGVmaW5lIFQyCTEwCisjZGVmaW5lIFQzCTExCisjZGVmaW5lIFQ0CTEyCisjZGVmaW5lIFQ1CTEzCisjZGVmaW5lIFQ2CTE0CisjZGVmaW5lIFQ3CTE1CisjZGVmaW5lIFMwCTE2CisjZGVmaW5lIFMxCTE3CisjZGVmaW5lIFMyCTE4CisjZGVmaW5lIFMzCTE5CisjZGVmaW5lIFM0CTIwCisjZGVmaW5lIFM1CTIxCisjZGVmaW5lIFM2CTIyCisjZGVmaW5lIFM3CTIzCisjZGVmaW5lIFQ4CTI0CisjZGVmaW5lIFQ5CTI1CisjZGVmaW5lIEswCTI2CisjZGVmaW5lIEsxCTI3CisjZGVmaW5lIEdQCTI4CisjZGVmaW5lIFNQCTI5CisjZGVmaW5lIFM4CTMwCisjZGVmaW5lIFJBCTMxCisjZGVmaW5lCVNSCTMyCisjZGVmaW5lCVBTCVNSCS8qIGFsaWFzIGZvciBTUiAqLworI2RlZmluZSBNVUxMTwkzMworI2RlZmluZSBNVUxISQkzNAorI2RlZmluZSBCQURWQUREUiAzNQorI2RlZmluZSBDQVVTRQkzNgorI2RlZmluZQlQQwkzNworI2RlZmluZQlJQwkzOAorI2RlZmluZQlDUEwJMzkKKworI2RlZmluZQlOVU1TQVZFUkVHUyA0MAkJLyogTnVtYmVyIG9mIHJlZ2lzdGVycyBzYXZlZCBpbiB0cmFwICovCisKKyNkZWZpbmUgRlBCQVNFCU5VTVNBVkVSRUdTCisjZGVmaW5lIEYwCShGUEJBU0UrMCkKKyNkZWZpbmUgRjEJKEZQQkFTRSsxKQorI2RlZmluZSBGMgkoRlBCQVNFKzIpCisjZGVmaW5lIEYzCShGUEJBU0UrMykKKyNkZWZpbmUgRjQJKEZQQkFTRSs0KQorI2RlZmluZSBGNQkoRlBCQVNFKzUpCisjZGVmaW5lIEY2CShGUEJBU0UrNikKKyNkZWZpbmUgRjcJKEZQQkFTRSs3KQorI2RlZmluZSBGOAkoRlBCQVNFKzgpCisjZGVmaW5lIEY5CShGUEJBU0UrOSkKKyNkZWZpbmUgRjEwCShGUEJBU0UrMTApCisjZGVmaW5lIEYxMQkoRlBCQVNFKzExKQorI2RlZmluZSBGMTIJKEZQQkFTRSsxMikKKyNkZWZpbmUgRjEzCShGUEJBU0UrMTMpCisjZGVmaW5lIEYxNAkoRlBCQVNFKzE0KQorI2RlZmluZSBGMTUJKEZQQkFTRSsxNSkKKyNkZWZpbmUgRjE2CShGUEJBU0UrMTYpCisjZGVmaW5lIEYxNwkoRlBCQVNFKzE3KQorI2RlZmluZSBGMTgJKEZQQkFTRSsxOCkKKyNkZWZpbmUgRjE5CShGUEJBU0UrMTkpCisjZGVmaW5lIEYyMAkoRlBCQVNFKzIwKQorI2RlZmluZSBGMjEJKEZQQkFTRSsyMSkKKyNkZWZpbmUgRjIyCShGUEJBU0UrMjIpCisjZGVmaW5lIEYyMwkoRlBCQVNFKzIzKQorI2RlZmluZSBGMjQJKEZQQkFTRSsyNCkKKyNkZWZpbmUgRjI1CShGUEJBU0UrMjUpCisjZGVmaW5lIEYyNgkoRlBCQVNFKzI2KQorI2RlZmluZSBGMjcJKEZQQkFTRSsyNykKKyNkZWZpbmUgRjI4CShGUEJBU0UrMjgpCisjZGVmaW5lIEYyOQkoRlBCQVNFKzI5KQorI2RlZmluZSBGMzAJKEZQQkFTRSszMCkKKyNkZWZpbmUgRjMxCShGUEJBU0UrMzEpCisjZGVmaW5lCUZTUgkoRlBCQVNFKzMyKQorCisjZGVmaW5lCU5VTUZQUkVHUyAzMworCisjZGVmaW5lCU5SRUdTCShOVU1TQVZFUkVHUyArIE5VTUZQUkVHUykKKworI2VuZGlmIC8qICFfTUlQUzY0X1JFR05VTV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvc2V0am1wLmggYi9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWJhN2JlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvc2V0am1wLmgKQEAgLTAsMCArMSwxMCBAQAorLyoJJE9wZW5CU0Q6IHNldGptcC5oLHYgMS4yIDIwMDQvMDgvMTAgMjE6MTA6NTYgcGVmbyBFeHAgJAkqLworCisvKiBQdWJsaWMgZG9tYWluICovCisKKyNpZm5kZWYgX01JUFNfU0VUSk1QX0hfCisjZGVmaW5lIF9NSVBTX1NFVEpNUF9IXworCisjZGVmaW5lCV9KQkxFTgkxNTcJCS8qIHNpemUsIGluIGxvbmdzLCBvZiBhIGptcF9idWYgKi8KKworI2VuZGlmIC8qICFfTUlQU19TRVRKTVBfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL3NpZ25hbC5oIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxNzE1YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL3NpZ25hbC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCSRPcGVuQlNEOiBzaWduYWwuaCx2IDEuOCAyMDA2LzAxLzA5IDE4OjE4OjM3IG1pbGxlcnQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogUmFscGggQ2FtcGJlbGwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylzaWduYWwuaAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCisgKi8KKworI2lmbmRlZiBfTUlQU19TSUdOQUxfSF8KKyNkZWZpbmUgX01JUFNfU0lHTkFMX0hfCisKKyNkZWZpbmUJU0NfUkVHTUFTSwkoMCpSRUdTWikKKyNkZWZpbmUJU0NfU1RBVFVTCSgxKlJFR1NaKQorI2RlZmluZQlTQ19QQwkJKDIqUkVHU1opCisjZGVmaW5lCVNDX1JFR1MJCShTQ19QQys4KQorI2RlZmluZQlTQ19GUFJFR1MJKFNDX1JFR1MrMzIqOCkKKyNkZWZpbmUJU0NfQUNYCQkoU0NfRlBSRUdTKzMyKlJFR1NaX0ZQKQorI2RlZmluZQlTQ19VU0VEX01BVEgJKFNDX0FDWCszKlJFR1NaKQorLyogT3BlbkJTRCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lCVNDX01BU0sJCVNDX1JFR01BU0sKKyNkZWZpbmUJU0NfRlBVU0VECVNDX1VTRURfTUFUSAorCisjZW5kaWYJLyogIV9NSVBTX1NJR05BTF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9taXBzNjQubWsgYi9saWJjL2FyY2gtbWlwczY0L21pcHM2NC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzBjYjI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9taXBzNjQubWsKQEAgLTAsMCArMSw3MiBAQAorIyBtaXBzNjQgc3BlY2lmaWMgY29uZmlncworCitsaWJjX2NvbW1vbl9zcmNfZmlsZXNfbWlwczY0IDo9IFwKKyAgICBiaW9uaWMvbWVtY2hyLmMgXAorICAgIGJpb25pYy9tZW1jbXAuYyBcCisgICAgYmlvbmljL21lbW1vdmUuYyBcCisgICAgYmlvbmljL21lbXJjaHIuYyBcCisgICAgYmlvbmljL3N0cmNoci5jcHAgXAorICAgIGJpb25pYy9zdHJubGVuLmMgXAorICAgIGJpb25pYy9zdHJyY2hyLmNwcCBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2F0LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2Noci5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjbXAuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY3B5LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xlbi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NyY2hyLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jbXAuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbW1vdmUuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RwY3B5LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cG5jcHkuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RyY2F0LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNtcC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjcHkuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybGNhdC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJsY3B5LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmxlbi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJuY2F0LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5jbXAuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybmNweS5jIFwKKworIyBGb3J0aWZ5IGltcGxlbWVudGF0aW9ucyBvZiBsaWJjIGZ1bmN0aW9ucy4KK2xpYmNfY29tbW9uX3NyY19maWxlc19taXBzNjQgKz0gXAorICAgIGJpb25pYy9fX21lbWNweV9jaGsuY3BwIFwKKyAgICBiaW9uaWMvX19tZW1zZXRfY2hrLmNwcCBcCisgICAgYmlvbmljL19fc3RyY3B5X2Noay5jcHAgXAorICAgIGJpb25pYy9fX3N0cmNhdF9jaGsuY3BwIFwKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyBDUFUgc3BlY2lmaWMgc291cmNlIGZpbGVzCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfbWlwczY0IDo9IFwKKyAgICBhcmNoLW1pcHM2NC9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUyBcCisgICAgYXJjaC1taXBzNjQvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBcCisgICAgYXJjaC1taXBzNjQvYmlvbmljL19fZ2V0X3NwLlMgXAorICAgIGFyY2gtbWlwczY0L2Jpb25pYy9fc2V0am1wLlMgXAorICAgIGFyY2gtbWlwczY0L2Jpb25pYy9zZXRqbXAuUyBcCisgICAgYXJjaC1taXBzNjQvYmlvbmljL3NpZ3NldGptcC5TIFwKKyAgICBhcmNoLW1pcHM2NC9iaW9uaWMvc3lzY2FsbC5TIFwKKyAgICBhcmNoLW1pcHM2NC9iaW9uaWMvdmZvcmsuUyBcCisKKyMgRklYTUUgVE9ETworIyMgbGliY19iaW9uaWNfc3JjX2ZpbGVzX21pcHM2NCArPSBhcmNoLW1pcHM2NC9zdHJpbmcvbWVtY3B5LlMKKyMjIGxpYmNfYmlvbmljX3NyY19maWxlc19taXBzNjQgKz0gYXJjaC1taXBzNjQvc3RyaW5nL21lbXNldC5TCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfbWlwczY0ICs9IGJpb25pYy9tZW1jcHkuY3BwCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfbWlwczY0ICs9IGJpb25pYy9tZW1zZXQuYworCisKK2xpYmNfY3J0X3RhcmdldF9jZmxhZ3NfbWlwczY0IDo9IFwKKyAgICAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9HTE9CQUxfQ0ZMQUdTKSBcCisgICAgLUkkKExPQ0FMX1BBVEgpL2FyY2gtbWlwczY0L2luY2x1ZGUKKworbGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX2ZpbGVfbWlwczY0IDo9IFwKKyAgICAkKExPQ0FMX1BBVEgpL2FyY2gtbWlwczY0L2Jpb25pYy9jcnRiZWdpbi5jCisKK2xpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9zb19maWxlX21pcHM2NCA6PSBcCisgICAgJChMT0NBTF9QQVRIKS9hcmNoLWNvbW1vbi9iaW9uaWMvY3J0YmVnaW5fc28uYworCitsaWJjX2NydF90YXJnZXRfc29fY2ZsYWdzX21pcHM2NCA6PSBcCisgICAgLWZQSUMKKworbGliY19jcnRfdGFyZ2V0X2xkZmxhZ3NfbWlwczY0IDo9IFwKKyAgICAtbWVsZjY0bHRzbWlwCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N0cmluZy9tZW1jcHkuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3RyaW5nL21lbWNweS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOTEwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N0cmluZy9tZW1jcHkuUwpAQCAtMCwwICsxLDQyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOQorICogICAgICBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiwgQ2FsaWZvcm5pYS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTUlQUyBURUNITk9MT0dJRVMsIElOQy4gYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgTUlQUyBURUNITk9MT0dJRVMsIElOQy4gQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgbWVtY3B5LlMKKyAqICBWZXJzaW9uOiAiMDQzMDA5IgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEluY2x1ZGUgZmlsZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworCisvKgorICogVGhpcyByb3V0aW5lIGNvdWxkIGJlIG9wdGltaXplZCBmb3IgTUlQUzY0LiBUaGUgY3VycmVudCBjb2RlIG9ubHkKKyAqIHVzZXMgTUlQUzMyIGluc3RydWN0aW9ucy4KKyAqLworI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyMgIGRlZmluZSBMV0hJCWx3bAkJLyogaGlnaCBwYXJ0IGlzIGxlZnQgaW4gYmlnLWVuZGlhbgkqLworIyAgZGVmaW5lIFNXSEkJc3dsCQkvKiBoaWdoIHBhcnQgaXMgbGVmdCBpbiBiaWctZW5kaWFuCSovCisjICBkZWZpbmUgTFdMTwlsd3IJCS8qIGxvdyBwYXJ0IGlzIHJpZ2h0IGluIGJpZy1lbmRpYW4JKi8KKyMgIGRlZmluZSBTV0xPCXN3cgkJLyogbG93IHBhcnQgaXMgcmlnaHQgaW4gYmlnLWVuZGlhbgkqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fTUlQU0VMX18pCisjICBkZWZpbmUgTFdISQlsd3IJCS8qIGhpZ2ggcGFydCBpcyByaWdodCBpbiBsaXR0bGUtZW5kaWFuCSovCisjICBkZWZpbmUgU1dISQlzd3IJCS8qIGhpZ2ggcGFydCBpcyByaWdodCBpbiBsaXR0bGUtZW5kaWFuCSovCisjICBkZWZpbmUgTFdMTwlsd2wJCS8qIGxvdyBwYXJ0IGlzIGxlZnQgaW4gYmlnLWVuZGlhbgkqLworIyAgZGVmaW5lIFNXTE8Jc3dsCQkvKiBsb3cgcGFydCBpcyBsZWZ0IGluIGJpZy1lbmRpYW4JKi8KKyNlbmRpZgorCitMRUFGKG1lbWNweSwwKQorCisJLnNldAlub3Jlb3JkZXIKKwkuc2V0CW5vYXQKKy8qCisgKiBCZWxvdyB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbWVtY3B5IGlzIGNhbGxlZCB3aXRoIG92ZXJsYXBwaW5nIHNyYyBhbmQgZHN0LgorICogQWx0aG91Z2ggbWVtY3B5IGlzIG5vdCByZXF1aXJlZCB0byBoYW5kbGUgdGhpcyBjYXNlLCBzb21lIHBhcnRzIG9mIEFuZHJvaWQgbGlrZSBTa2lhCisgKiByZWx5IG9uIHN1Y2ggdXNhZ2UuIFdlIGNhbGwgbWVtbW92ZSB0byBoYW5kbGUgc3VjaCBjYXNlcy4KKyAqLworCXN1YnUJdDAsYTAsYTEKKwlzcmEJQVQsdDAsMzEKKwl4b3IJdDEsdDAsQVQKKwlzdWJ1CXQwLHQxLEFUCisJc2x0dQlBVCx0MCxhMgorCWJlcQlBVCx6ZXJvLC5MbWVtY3B5CisJIGxhCXQ5LG1lbW1vdmUKKwlqcgl0OQorCSBub3AKKy5MbWVtY3B5OgorCXNsdGkJQVQsYTIsOAorCWJuZQlBVCx6ZXJvLC5MbGFzdDgKKwkgbW92ZQl2MCxhMAkjIG1lbWNweSByZXR1cm5zIHRoZSBkc3QgcG9pbnRlcgorCisjIFRlc3QgaWYgdGhlIHNyYyBhbmQgZHN0IGFyZSB3b3JkLWFsaWduZWQsIG9yIGNhbiBiZSBtYWRlIHdvcmQtYWxpZ25lZAorCXhvcgl0OCxhMSxhMAorCWFuZGkJdDgsdDgsMHgzCQkjIHQ4IGlzIGEwL2ExIHdvcmQtZGlzcGxhY2VtZW50CisKKwlibmUJdDgsemVybywuTHVuYWxpZ25lZAorCSBuZWd1CWEzLGEwCisKKwlhbmRpCWEzLGEzLDB4MwkjIHdlIG5lZWQgdG8gY29weSBhMyBieXRlcyB0byBtYWtlIGEwL2ExIGFsaWduZWQKKwliZXEJYTMsemVybywuTGNoazE2dyAjIHdoZW4gYTM9MCB0aGVuIHRoZSBkc3QgKGEwKSBpcyB3b3JkLWFsaWduZWQKKwkgc3VidQlhMixhMixhMwkjIG5vdyBhMiBpcyB0aGUgcmVtaW5pbmcgYnl0ZXMgY291bnQKKworCUxXSEkJdDgsMChhMSkKKwlhZGR1CWExLGExLGEzCisJU1dISQl0OCwwKGEwKQorCWFkZHUJYTAsYTAsYTMKKworIyBOb3cgdGhlIGRzdC9zcmMgYXJlIG11dHVhbGx5IHdvcmQtYWxpZ25lZCB3aXRoIHdvcmQtYWxpZ25lZCBhZGRyZXNzZXMKKy5MY2hrMTZ3OgorCWFuZGkJdDgsYTIsMHgzZgkjIGFueSB3aG9sZSA2NC1ieXRlIGNodW5rcz8KKwkJCQkjIHQ4IGlzIHRoZSBieXRlIGNvdW50IGFmdGVyIDY0LWJ5dGUgY2h1bmtzCisKKwliZXEJYTIsdDgsLkxjaGs4dwkjIGlmIGEyPT10OCwgbm8gNjQtYnl0ZSBjaHVua3MKKwkJCQkjIFRoZXJlIHdpbGwgYmUgYXQgbW9zdCAxIDMyLWJ5dGUgY2h1bmsgYWZ0ZXIgaXQKKwkgc3VidQlhMyxhMix0OAkjIHN1YnRyYWN0IGZyb20gYTIgdGhlIHJlbWluZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSGVyZSBhMyBjb3VudHMgYnl0ZXMgaW4gMTZ3IGNodW5rcworCWFkZHUJYTMsYTAsYTMJIyBOb3cgYTMgaXMgdGhlIGZpbmFsIGRzdCBhZnRlciA2NC1ieXRlIGNodW5rcworCisJYWRkdQl0MCxhMCxhMgkjIHQwIGlzIHRoZSAicGFzdCB0aGUgZW5kIiBhZGRyZXNzCisKKyMgV2hlbiBpbiB0aGUgbG9vcCB3ZSBleGVyY2lzZSAicHJlZiAzMCx4KGEwKSIsIHRoZSBhMCt4IHNob3VsZCBub3QgYmUgcGFzdAorIyB0aGUgInQwLTMyIiBhZGRyZXNzCisjIFRoaXMgbWVhbnM6IGZvciB4PTEyOCB0aGUgbGFzdCAic2FmZSIgYTAgYWRkcmVzcyBpcyAidDAtMTYwIgorIyBBbHRlcm5hdGl2ZWx5LCBmb3IgeD02NCB0aGUgbGFzdCAic2FmZSIgYTAgYWRkcmVzcyBpcyAidDAtOTYiCisjIEluIHRoZSBjdXJyZW50IHZlcnNpb24gd2Ugd2lsbCB1c2UgInByZWYgMzAsMTI4KGEwKSIsIHNvICJ0MC0xNjAiIGlzIHRoZSBsaW1pdAorCXN1YnUJdDksdDAsMTYwCSMgdDkgaXMgdGhlICJsYXN0IHNhZmUgcHJlZiAzMCwxMjgoYTApIiBhZGRyZXNzCisKKwlwcmVmICAgIDAsMChhMSkJCSMgYnJpbmcgdGhlIGZpcnN0IGxpbmUgb2Ygc3JjLCBhZGRyIDAKKwlwcmVmICAgIDAsMzIoYTEpCSMgYnJpbmcgdGhlIHNlY29uZCBsaW5lIG9mIHNyYywgYWRkciAzMgorCXByZWYgICAgMCw2NChhMSkJIyBicmluZyB0aGUgdGhpcmQgbGluZSBvZiBzcmMsIGFkZHIgNjQKKwlwcmVmCTMwLDMyKGEwKQkjIHNhZmUsIGFzIHdlIGhhdmUgYXQgbGVhc3QgNjQgYnl0ZXMgYWhlYWQKKyMgSW4gY2FzZSB0aGUgYTAgPiB0OSBkb24ndCB1c2UgInByZWYgMzAiIGF0IGFsbAorCXNndHUJdjEsYTAsdDkKKwliZ3R6CXYxLC5MbG9vcDE2dwkjIHNraXAgInByZWYgMzAsNjQoYTApIiBmb3IgdG9vIHNob3J0IGFycmF5cworCSBub3AKKyMgb3RoZXJ3aXNlLCBzdGFydCB3aXRoIHVzaW5nIHByZWYzMAorCXByZWYJMzAsNjQoYTApCisuTGxvb3AxNnc6CisJcHJlZgkwLDk2KGExKQorCWx3CXQwLDAoYTEpCisJYmd0egl2MSwuTHNraXBfcHJlZjMwXzk2CSMgc2tpcCAicHJlZiAzMCw5NihhMCkiCisJIGx3CXQxLDQoYTEpCisJcHJlZiAgICAzMCw5NihhMCkgICAjIGNvbnRpbnVlIHNldHRpbmcgdXAgdGhlIGRlc3QsIGFkZHIgOTYKKy5Mc2tpcF9wcmVmMzBfOTY6CisJbHcJdDIsOChhMSkKKwlsdwl0MywxMihhMSkKKwlsdwl0NCwxNihhMSkKKwlsdwl0NSwyMChhMSkKKwlsdwl0NiwyNChhMSkKKwlsdwl0NywyOChhMSkKKyAgICAgICAgcHJlZiAgICAwLDEyOChhMSkgICAgIyBicmluZyB0aGUgbmV4dCBsaW5lcyBvZiBzcmMsIGFkZHIgMTI4CisKKwlzdwl0MCwwKGEwKQorCXN3CXQxLDQoYTApCisJc3cJdDIsOChhMCkKKwlzdwl0MywxMihhMCkKKwlzdwl0NCwxNihhMCkKKwlzdwl0NSwyMChhMCkKKwlzdwl0NiwyNChhMCkKKwlzdwl0NywyOChhMCkKKworCWx3CXQwLDMyKGExKQorCWJndHoJdjEsLkxza2lwX3ByZWYzMF8xMjgJIyBza2lwICJwcmVmIDMwLDEyOChhMCkiCisJIGx3CXQxLDM2KGExKQorCXByZWYgICAgMzAsMTI4KGEwKSAgICMgY29udGludWUgc2V0dGluZyB1cCB0aGUgZGVzdCwgYWRkciAxMjgKKy5Mc2tpcF9wcmVmMzBfMTI4OgorCWx3CXQyLDQwKGExKQorCWx3CXQzLDQ0KGExKQorCWx3CXQ0LDQ4KGExKQorCWx3CXQ1LDUyKGExKQorCWx3CXQ2LDU2KGExKQorCWx3CXQ3LDYwKGExKQorICAgICAgICBwcmVmICAgIDAsIDE2MChhMSkgICAgIyBicmluZyB0aGUgbmV4dCBsaW5lcyBvZiBzcmMsIGFkZHIgMTYwCisKKwlzdwl0MCwzMihhMCkKKwlzdwl0MSwzNihhMCkKKwlzdwl0Miw0MChhMCkKKwlzdwl0Myw0NChhMCkKKwlzdwl0NCw0OChhMCkKKwlzdwl0NSw1MihhMCkKKwlzdwl0Niw1NihhMCkKKwlzdwl0Nyw2MChhMCkKKworCWFkZGl1CWEwLGEwLDY0CSMgYWRkaW5nIDY0IHRvIGRlc3QKKwlzZ3R1CXYxLGEwLHQ5CisJYm5lCWEwLGEzLC5MbG9vcDE2dworCSBhZGRpdQlhMSxhMSw2NAkjIGFkZGluZyA2NCB0byBzcmMKKwltb3ZlCWEyLHQ4CisKKyMgSGVyZSB3ZSBoYXZlIHNyYyBhbmQgZGVzdCB3b3JkLWFsaWduZWQgYnV0IGxlc3MgdGhhbiA2NC1ieXRlcyB0byBnbworCisuTGNoazh3OgorCXByZWYgMCwgMHgwKGExKQorCWFuZGkJdDgsYTIsMHgxZgkjIGlzIHRoZXJlIGEgMzItYnl0ZSBjaHVuaz8KKwkJCQkjIHRoZSB0OCBpcyB0aGUgcmVtaW5kZXIgY291bnQgcGFzdCAzMi1ieXRlcworCWJlcQlhMix0OCwuTGNoazF3CSMgd2hlbiBhMj10OCwgbm8gMzItYnl0ZSBjaHVuaworCSBub3AKKworCWx3CXQwLDAoYTEpCisJbHcJdDEsNChhMSkKKwlsdwl0Miw4KGExKQorCWx3CXQzLDEyKGExKQorCWx3CXQ0LDE2KGExKQorCWx3CXQ1LDIwKGExKQorCWx3CXQ2LDI0KGExKQorCWx3CXQ3LDI4KGExKQorCWFkZGl1CWExLGExLDMyCisKKwlzdwl0MCwwKGEwKQorCXN3CXQxLDQoYTApCisJc3cJdDIsOChhMCkKKwlzdwl0MywxMihhMCkKKwlzdwl0NCwxNihhMCkKKwlzdwl0NSwyMChhMCkKKwlzdwl0NiwyNChhMCkKKwlzdwl0NywyOChhMCkKKwlhZGRpdQlhMCxhMCwzMgorCisuTGNoazF3OgorCWFuZGkJYTIsdDgsMHgzCSMgbm93IGEyIGlzIHRoZSByZW1pbmRlciBwYXN0IDF3IGNodW5rcworCWJlcQlhMix0OCwuTGxhc3Q4CisJIHN1YnUJYTMsdDgsYTIJIyBhMyBpcyBjb3VudCBvZiBieXRlcyBpbiAxdyBjaHVua3MKKwlhZGR1CWEzLGEwLGEzCSMgbm93IGEzIGlzIHRoZSBkc3QgYWRkcmVzcyBwYXN0IHRoZSAxdyBjaHVua3MKKworIyBjb3B5aW5nIGluIHdvcmRzICg0LWJ5dGUgY2h1bmtzKQorLkx3b3JkQ29weV9sb29wOgorCWx3CXQzLDAoYTEpCSMgdGhlIGZpcnN0IHQzIG1heSBiZSBlcXVhbCB0MCAuLi4gb3B0aW1pemU/CisJYWRkaXUJYTEsYTEsNAorCWFkZGl1CWEwLGEwLDQKKwlibmUJYTAsYTMsLkx3b3JkQ29weV9sb29wCisJIHN3CXQzLC00KGEwKQorCisjIEZvciB0aGUgbGFzdCAoPDgpIGJ5dGVzCisuTGxhc3Q4OgorCWJsZXoJYTIsLkxsZWF2ZQorCSBhZGR1CWEzLGEwLGEyCSMgYTMgaXMgdGhlIGxhc3QgZHN0IGFkZHJlc3MKKy5MbGFzdDhsb29wOgorCWxiCXYxLDAoYTEpCisJYWRkaXUJYTEsYTEsMQorCWFkZGl1CWEwLGEwLDEKKwlibmUJYTAsYTMsLkxsYXN0OGxvb3AKKwkgc2IJdjEsLTEoYTApCisKKy5MbGVhdmU6CisJaglyYQorCSBub3AKKworIworIyBVTkFMSUdORUQgY2FzZQorIworCisuTHVuYWxpZ25lZDoKKwkjIGdvdCBoZXJlIHdpdGggYTM9Im5lZ3UgYTAiCisJYW5kaQlhMyxhMywweDMJIyB0ZXN0IGlmIHRoZSBhMCBpcyB3b3JkIGFsaWduZWQKKwliZXF6CWEzLC5MdWFfY2hrMTZ3CisJIHN1YnUJYTIsYTIsYTMJIyBieXRlcyBsZWZ0IGFmdGVyIGluaXRpYWwgYTMgYnl0ZXMKKworCUxXSEkJdjEsMChhMSkKKwlMV0xPCXYxLDMoYTEpCisJYWRkdQlhMSxhMSxhMwkjIGEzIG1heSBiZSBoZXJlIDEsIDIgb3IgMworCVNXSEkJdjEsMChhMCkKKwlhZGR1CWEwLGEwLGEzCSMgYmVsb3cgdGhlIGRzdCB3aWxsIGJlIHdvcmQgYWxpZ25lZCAoTk9URTEpCisKKy5MdWFfY2hrMTZ3OgorCWFuZGkJdDgsYTIsMHgzZgkjIGFueSB3aG9sZSA2NC1ieXRlIGNodW5rcz8KKwkJCQkjIHQ4IGlzIHRoZSBieXRlIGNvdW50IGFmdGVyIDY0LWJ5dGUgY2h1bmtzCisJYmVxCWEyLHQ4LC5MdWFfY2hrOHcgIyBpZiBhMj09dDgsIG5vIDY0LWJ5dGUgY2h1bmtzCisJCQkJIyBUaGVyZSB3aWxsIGJlIGF0IG1vc3QgMSAzMi1ieXRlIGNodW5rIGFmdGVyIGl0CisJIHN1YnUJYTMsYTIsdDgJIyBzdWJ0cmFjdCBmcm9tIGEyIHRoZSByZW1pbmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEhlcmUgYTMgY291bnRzIGJ5dGVzIGluIDE2dyBjaHVua3MKKwlhZGR1CWEzLGEwLGEzCSMgTm93IGEzIGlzIHRoZSBmaW5hbCBkc3QgYWZ0ZXIgNjQtYnl0ZSBjaHVua3MKKworCWFkZHUJdDAsYTAsYTIJIyB0MCBpcyB0aGUgInBhc3QgdGhlIGVuZCIgYWRkcmVzcworCisJc3VidQl0OSx0MCwxNjAJIyB0OSBpcyB0aGUgImxhc3Qgc2FmZSBwcmVmIDMwLDEyOChhMCkiIGFkZHJlc3MKKworCXByZWYgICAgMCwwKGExKQkJIyBicmluZyB0aGUgZmlyc3QgbGluZSBvZiBzcmMsIGFkZHIgMAorCXByZWYgICAgMCwzMihhMSkJIyBicmluZyB0aGUgc2Vjb25kIGxpbmUgb2Ygc3JjLCBhZGRyIDMyCisJcHJlZiAgICAwLDY0KGExKQkjIGJyaW5nIHRoZSB0aGlyZCBsaW5lIG9mIHNyYywgYWRkciA2NAorCXByZWYJMzAsMzIoYTApCSMgc2FmZSwgYXMgd2UgaGF2ZSBhdCBsZWFzdCA2NCBieXRlcyBhaGVhZAorIyBJbiBjYXNlIHRoZSBhMCA+IHQ5IGRvbid0IHVzZSAicHJlZiAzMCIgYXQgYWxsCisJc2d0dQl2MSxhMCx0OQorCWJndHoJdjEsLkx1YV9sb29wMTZ3CSMgc2tpcCAicHJlZiAzMCw2NChhMCkiIGZvciB0b28gc2hvcnQgYXJyYXlzCisJIG5vcAorIyBvdGhlcndpc2UsIHN0YXJ0IHdpdGggdXNpbmcgcHJlZjMwCisJcHJlZgkzMCw2NChhMCkKKy5MdWFfbG9vcDE2dzoKKwlwcmVmCTAsOTYoYTEpCisJTFdISQl0MCwwKGExKQorCUxXTE8JdDAsMyhhMSkKKwlMV0hJCXQxLDQoYTEpCisJYmd0egl2MSwuTHVhX3NraXBfcHJlZjMwXzk2CisJIExXTE8JdDEsNyhhMSkKKwlwcmVmICAgIDMwLDk2KGEwKSAgICMgY29udGludWUgc2V0dGluZyB1cCB0aGUgZGVzdCwgYWRkciA5NgorLkx1YV9za2lwX3ByZWYzMF85NjoKKwlMV0hJCXQyLDgoYTEpCisJTFdMTwl0MiwxMShhMSkKKwlMV0hJCXQzLDEyKGExKQorCUxXTE8JdDMsMTUoYTEpCisJTFdISQl0NCwxNihhMSkKKwlMV0xPCXQ0LDE5KGExKQorCUxXSEkJdDUsMjAoYTEpCisJTFdMTwl0NSwyMyhhMSkKKwlMV0hJCXQ2LDI0KGExKQorCUxXTE8JdDYsMjcoYTEpCisJTFdISQl0NywyOChhMSkKKwlMV0xPCXQ3LDMxKGExKQorICAgICAgICBwcmVmICAgIDAsMTI4KGExKSAgICAjIGJyaW5nIHRoZSBuZXh0IGxpbmVzIG9mIHNyYywgYWRkciAxMjgKKworCXN3CXQwLDAoYTApCisJc3cJdDEsNChhMCkKKwlzdwl0Miw4KGEwKQorCXN3CXQzLDEyKGEwKQorCXN3CXQ0LDE2KGEwKQorCXN3CXQ1LDIwKGEwKQorCXN3CXQ2LDI0KGEwKQorCXN3CXQ3LDI4KGEwKQorCisJTFdISQl0MCwzMihhMSkKKwlMV0xPCXQwLDM1KGExKQorCUxXSEkJdDEsMzYoYTEpCisJYmd0egl2MSwuTHVhX3NraXBfcHJlZjMwXzEyOAorCUxXTE8JdDEsMzkoYTEpCisJcHJlZiAgICAzMCwxMjgoYTApICAgIyBjb250aW51ZSBzZXR0aW5nIHVwIHRoZSBkZXN0LCBhZGRyIDEyOAorLkx1YV9za2lwX3ByZWYzMF8xMjg6CisJTFdISQl0Miw0MChhMSkKKwlMV0xPCXQyLDQzKGExKQorCUxXSEkJdDMsNDQoYTEpCisJTFdMTwl0Myw0NyhhMSkKKwlMV0hJCXQ0LDQ4KGExKQorCUxXTE8JdDQsNTEoYTEpCisJTFdISQl0NSw1MihhMSkKKwlMV0xPCXQ1LDU1KGExKQorCUxXSEkJdDYsNTYoYTEpCisJTFdMTwl0Niw1OShhMSkKKwlMV0hJCXQ3LDYwKGExKQorCUxXTE8JdDcsNjMoYTEpCisgICAgICAgIHByZWYgICAgMCwgMTYwKGExKSAgICAjIGJyaW5nIHRoZSBuZXh0IGxpbmVzIG9mIHNyYywgYWRkciAxNjAKKworCXN3CXQwLDMyKGEwKQorCXN3CXQxLDM2KGEwKQorCXN3CXQyLDQwKGEwKQorCXN3CXQzLDQ0KGEwKQorCXN3CXQ0LDQ4KGEwKQorCXN3CXQ1LDUyKGEwKQorCXN3CXQ2LDU2KGEwKQorCXN3CXQ3LDYwKGEwKQorCisJYWRkaXUJYTAsYTAsNjQJIyBhZGRpbmcgNjQgdG8gZGVzdAorCXNndHUJdjEsYTAsdDkKKwlibmUJYTAsYTMsLkx1YV9sb29wMTZ3CisJIGFkZGl1CWExLGExLDY0CSMgYWRkaW5nIDY0IHRvIHNyYworCW1vdmUJYTIsdDgKKworIyBIZXJlIHdlIGhhdmUgc3JjIGFuZCBkZXN0IHdvcmQtYWxpZ25lZCBidXQgbGVzcyB0aGFuIDY0LWJ5dGVzIHRvIGdvCisKKy5MdWFfY2hrOHc6CisJcHJlZiAwLCAweDAoYTEpCisJYW5kaQl0OCxhMiwweDFmCSMgaXMgdGhlcmUgYSAzMi1ieXRlIGNodW5rPworCQkJCSMgdGhlIHQ4IGlzIHRoZSByZW1pbmRlciBjb3VudAorCWJlcQlhMix0OCwuTHVhX2NoazF3ICMgd2hlbiBhMj10OCwgbm8gMzItYnl0ZSBjaHVuaworCSBub3AKKworCUxXSEkJdDAsMChhMSkKKwlMV0xPCXQwLDMoYTEpCisJTFdISQl0MSw0KGExKQorCUxXTE8JdDEsNyhhMSkKKwlMV0hJCXQyLDgoYTEpCisJTFdMTwl0MiwxMShhMSkKKwlMV0hJCXQzLDEyKGExKQorCUxXTE8JdDMsMTUoYTEpCisJTFdISQl0NCwxNihhMSkKKwlMV0xPCXQ0LDE5KGExKQorCUxXSEkJdDUsMjAoYTEpCisJTFdMTwl0NSwyMyhhMSkKKwlMV0hJCXQ2LDI0KGExKQorCUxXTE8JdDYsMjcoYTEpCisJTFdISQl0NywyOChhMSkKKwlMV0xPCXQ3LDMxKGExKQorCWFkZGl1CWExLGExLDMyCisKKwlzdwl0MCwwKGEwKQorCXN3CXQxLDQoYTApCisJc3cJdDIsOChhMCkKKwlzdwl0MywxMihhMCkKKwlzdwl0NCwxNihhMCkKKwlzdwl0NSwyMChhMCkKKwlzdwl0NiwyNChhMCkKKwlzdwl0NywyOChhMCkKKwlhZGRpdQlhMCxhMCwzMgorCisuTHVhX2NoazF3OgorCWFuZGkJYTIsdDgsMHgzCSMgbm93IGEyIGlzIHRoZSByZW1pbmRlciBwYXN0IDF3IGNodW5rcworCWJlcQlhMix0OCwuTHVhX3NtYWxsQ29weQorCSBzdWJ1CWEzLHQ4LGEyCSMgYTMgaXMgY291bnQgb2YgYnl0ZXMgaW4gMXcgY2h1bmtzCisJYWRkdQlhMyxhMCxhMwkjIG5vdyBhMyBpcyB0aGUgZHN0IGFkZHJlc3MgcGFzdCB0aGUgMXcgY2h1bmtzCisKKyMgY29weWluZyBpbiB3b3JkcyAoNC1ieXRlIGNodW5rcykKKy5MdWFfd29yZENvcHlfbG9vcDoKKwlMV0hJCXYxLDAoYTEpCisJTFdMTwl2MSwzKGExKQorCWFkZGl1CWExLGExLDQKKwlhZGRpdQlhMCxhMCw0CQkjIG5vdGU6IGRzdD1hMCBpcyB3b3JkIGFsaWduZWQgaGVyZSwgc2VlIE5PVEUxCisJYm5lCWEwLGEzLC5MdWFfd29yZENvcHlfbG9vcAorCSBzdwl2MSwtNChhMCkKKworIyBOb3cgbGVzcyB0aGFuIDQgYnl0ZXMgKHZhbHVlIGluIGEyKSBsZWZ0IHRvIGNvcHkKKy5MdWFfc21hbGxDb3B5OgorCWJlcXoJYTIsLkxsZWF2ZQorCWFkZHUJYTMsYTAsYTIJIyBhMyBpcyB0aGUgbGFzdCBkc3QgYWRkcmVzcworLkx1YV9zbWFsbENvcHlfbG9vcDoKKwlsYgl2MSwwKGExKQorCWFkZGl1CWExLGExLDEKKwlhZGRpdQlhMCxhMCwxCisJYm5lCWEwLGEzLC5MdWFfc21hbGxDb3B5X2xvb3AKKwkgc2IJdjEsLTEoYTApCisKKwlqCXJhCisJIG5vcAorCisJLnNldAlhdAorCS5zZXQJcmVvcmRlcgorCitFTkQobWVtY3B5KQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBJbXBsZW1lbnRhdGlvbiA6IFN0YXRpYyBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N0cmluZy9tZW1zZXQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3RyaW5nL21lbXNldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjMwY2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N0cmluZy9tZW1zZXQuUwpAQCAtMCwwICsxLDMyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOQorICogICAgICBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiwgQ2FsaWZvcm5pYS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTUlQUyBURUNITk9MT0dJRVMsIElOQy4gYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgTUlQUyBURUNITk9MT0dJRVMsIElOQy4gQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgbWVtc2V0LlMsIHZlcnNpb24gIjY0aCIgd2l0aCAxIGNhY2hlIGxpbmUgaG9yaXpvbiBmb3IgInByZWYgMzAiIGFuZCAxNCBub3BzCisgKiAgVmVyc2lvbjogIjA0MzAwOSIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBJbmNsdWRlIGZpbGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgY291bGQgYmUgb3B0aW1pemVkIGZvciBNSVBTNjQuIFRoZSBjdXJyZW50IGNvZGUgb25seQorICogdXNlcyBNSVBTMzIgaW5zdHJ1Y3Rpb25zLgorICovCisKKyNpZiBkZWZpbmVkKF9fTUlQU0VCX18pCisjICBkZWZpbmUgU1dISQlzd2wJCS8qIGhpZ2ggcGFydCBpcyBsZWZ0IGluIGJpZy1lbmRpYW4JKi8KKyMgIGRlZmluZSBTV0xPCXN3cgkJLyogbG93IHBhcnQgaXMgcmlnaHQgaW4gYmlnLWVuZGlhbgkqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fTUlQU0VMX18pCisjICBkZWZpbmUgU1dISQlzd3IJCS8qIGhpZ2ggcGFydCBpcyByaWdodCBpbiBsaXR0bGUtZW5kaWFuCSovCisjICBkZWZpbmUgU1dMTwlzd2wJCS8qIGxvdyBwYXJ0IGlzIGxlZnQgaW4gbGl0dGxlLWVuZGlhbgkqLworI2VuZGlmCisKKyNpZiAhKGRlZmluZWQoWEdQUk9GKSB8fCBkZWZpbmVkKFhQUk9GKSkKKyN1bmRlZiBTRVRVUF9HUAorI2RlZmluZSBTRVRVUF9HUAorI2VuZGlmCisKKyNpZmRlZiBOREVCVUcKKyNkZWZpbmUgREJHICMKKyNlbHNlCisjZGVmaW5lIERCRworI2VuZGlmCisKKy8qCisgKiB2b2lkIF9tZW1zZXQxNih1aW50MTZfdCogZHN0LCB1aW50MTZfdCB2YWx1ZSwgc2l6ZV90IHNpemUpOworICovCisKK0xFQUYoX21lbXNldDE2LDApCisJLnNldCBub3Jlb3JkZXIKK0RCRwkvKiBDaGVjayBwYXJhbWV0ZXJzICovCitEQkcJYW5kaQl0MCxhMCwxCQkJIyBhMCBtdXN0IGJlIGhhbGZ3b3JkIGFsaWduZWQKK0RCRwl0bmUJdDAsemVybworREJHCWFuZGkJdDIsYTIsMQkJCSMgYTIgbXVzdCBiZSBldmVuCitEQkcJdG5lCXQyLHplcm8KKworI2lmZGVmIEZJWEFSR1MKKwkjIGVuc3VyZSBjb3VudCBpcyBldmVuCisjaWYgKF9fbWlwcz09MzIpICYmIChfX21pcHNfaXNhX3Jldj49MikKKwlpbnMJYTIsemVybywwLDEKKyNlbHNlCisJb3JpCWEyLDEKKwl4b3JpCWEyLDEKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAoX19taXBzPT0zMikgJiYgKF9fbWlwc19pc2FfcmV2Pj0yKQorCWlucwlhMSxhMSwxNiwxNgorI2Vsc2UKKwlhbmRpCWExLDB4ZmZmZgorCXNsbAl0MyxhMSwxNgorCW9yCWExLHQzCisjZW5kaWYKKworCWJlcXoJYTIsLkxkb25lCisJIGFuZGkJdDEsYTAsMgorCWJlcXoJdDEsLkxhbGlnbm9rCisJIGFkZHUJdDAsYTAsYTIJCSMgdDAgaXMgdGhlICJwYXN0IHRoZSBlbmQiIGFkZHJlc3MKKwlzaAlhMSwwKGEwKQkJIyBzdG9yZSBvbmUgaGFsZndvcmQgdG8gZ2V0IGFsaWduZWQKKwlhZGR1CWEwLDIKKwlzdWJ1CWEyLDIKKy5MYWxpZ25vazoKKwlzbHRpCXQxLGEyLDQJCQkjIC5MYWxpZ25lZCBmb3IgNCBvciBtb3JlIGJ5dGVzCisJYmVxegl0MSwuTGFsaWduZWQKKwkgc25lCXQxLGEyLDIJCQkjIG9uZSBtb3JlIGhhbGZ3b3JkPworCWJuZXoJdDEsLkxkb25lCisJIG5vcAorCXNoCWExLDAoYTApCisuTGRvbmU6CisJaglyYQorCSBub3AKKwkuc2V0IHJlb3JkZXIKK0VORChfbWVtc2V0MTYpCisKKy8qCisgKiB2b2lkIF9tZW1zZXQzMih1aW50MzJfdCogZHN0LCB1aW50MzJfdCB2YWx1ZSwgc2l6ZV90IHNpemUpOworICovCisKK0xFQUYoX21lbXNldDMyLDApCisJLnNldCBub3Jlb3JkZXIKK0RCRwkvKiBDaGVjayBwYXJhbWV0ZXJzICovCitEQkcJYW5kaQl0MCxhMCwzCQkJIyBhMCBtdXN0IGJlIHdvcmQgYWxpZ25lZAorREJHCXRuZQl0MCx6ZXJvCitEQkcJYW5kaQl0MixhMiwzCQkJIyBhMiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBieXRlcworREJHCXRuZQl0Mix6ZXJvCisKKyNpZmRlZiBGSVhBUkdTCisJIyBlbnN1cmUgY291bnQgaXMgYSBtdWx0aXBsZSBvZiA0CisjaWYgKF9fbWlwcz09MzIpICYmIChfX21pcHNfaXNhX3Jldj49MikKKwlpbnMJJGEyLCQwLDAsMgorI2Vsc2UKKwlvcmkJYTIsMworCXhvcmkJYTIsMworI2VuZGlmCisjZW5kaWYKKworCWJuZXoJYTIsLkxhbGlnbmVkCQkjIGFueSB3b3JrIHRvIGRvPworCSBhZGR1CXQwLGEwLGEyCQkjIHQwIGlzIHRoZSAicGFzdCB0aGUgZW5kIiBhZGRyZXNzCisKKwlqCXJhCisJIG5vcAorCS5zZXQgcmVvcmRlcgorRU5EKF9tZW1zZXQzMikKKworTEVBRihtZW1zZXQsMCkKKworCS5zZXQJbm9yZW9yZGVyCisJLnNldAlub2F0CisKKwlhZGR1CXQwLGEwLGEyCQkjIHQwIGlzIHRoZSAicGFzdCB0aGUgZW5kIiBhZGRyZXNzCisJc2x0aQlBVCxhMiw0CQkJIyBpcyBhMiBsZXNzIHRoYW4gND8KKwlibmUJQVQsemVybywuTGxhc3Q0CQkjIGlmIHllcywgZ28gdG8gbGFzdDQKKwkgbW92ZQl2MCxhMAkJCSMgbWVtc2V0IHJldHVybnMgdGhlIGRzdCBwb2ludGVyCisKKwliZXEJYTEsemVybywuTHNldDAKKwkgc3VidQl2MSx6ZXJvLGEwCisKKwkjIHNtZWFyIGJ5dGUgaW50byAzMiBiaXQgd29yZAorI2lmIChfX21pcHM9PTMyKSAmJiAoX19taXBzX2lzYV9yZXY+PTIpCisJaW5zICAgICBhMSwgYTEsIDgsIDggICAgICAgICMgUmVwbGljYXRlIGZpbGwgYnl0ZSBpbnRvIGhhbGYtd29yZC4KKwlpbnMgICAgIGExLCBhMSwgMTYsIDE2ICAgICAgIyBSZXBsaWNhdGUgZmlsbCBieXRlIGludG8gd29yZC4KKyNlbHNlCisJYW5kCWExLDB4ZmYKKwlzbGwJQVQsYTEsOAorCW9yCWExLEFUCisJc2xsCUFULGExLDE2CisJb3IJYTEsQVQKKyNlbmRpZgorCisuTHNldDA6CisJYW5kaQl2MSx2MSwweDMJCSMgd29yZC11bmFsaWduZWQgYWRkcmVzcz8KKwliZXEJdjEsemVybywuTGFsaWduZWQJIyB2MSBpcyB0aGUgdW5hbGlnbm1lbnQgY291bnQKKwkgc3VidQlhMixhMix2MQorCVNXSEkJYTEsMChhMCkKKwlhZGR1CWEwLGEwLHYxCisKKyMgSGVyZSB3ZSBoYXZlIHRoZSAid29yZC1hbGlnbmVkIiBhMCAodW50aWwgdGhlICJsYXN0NCIpCisuTGFsaWduZWQ6CisJYW5kaQl0OCxhMiwweDNmCSMgYW55IDY0LWJ5dGUgY2h1bmtzPworCQkJCSMgdDggaXMgdGhlIGJ5dGUgY291bnQgcGFzdCA2NC1ieXRlIGNodW5rcworCWJlcQlhMix0OCwuTGNoazh3CSMgd2hlbiBhMj09dDgsIG5vIDY0LWJ5dGUgY2h1bmtzCisJCQkJIyBUaGVyZSB3aWxsIGJlIGF0IG1vc3QgMSAzMi1ieXRlIGNodW5rIHRoZW4KKwkgc3VidQlhMyxhMix0OAkjIHN1YnRyYWN0IGZyb20gYTIgdGhlIHJlbWluZGVyCisJCQkJIyBIZXJlIGEzIGNvdW50cyBieXRlcyBpbiAxNncgY2h1bmtzCisJYWRkdQlhMyxhMCxhMwkjIE5vdyBhMyBpcyB0aGUgZmluYWwgZHN0IGFmdGVyIDY0LWJ5dGUgY2h1bmtzCisKKyMgRmluZCBvdXQsIGlmIHRoZXJlIGFyZSBhbnkgNjQtYnl0ZSBjaHVua3MgYWZ0ZXIgd2hpY2ggd2lsbCBiZSBzdGlsbCBhdCBsZWFzdAorIyA5NiBieXRlcyBsZWZ0LiBUaGUgdmFsdWUgIjk2IiBpcyBjYWxjdWxhdGVkIGFzIG5lZWRlZCBidWZmZXIgZm9yCisjICJwcmVmIDMwLDY0KGEwKSIgcHJlZmV0Y2gsIHdoaWNoIGNhbiBiZSB1c2VkIGFzICJwcmVmIDMwLDAoYTApIiBhZnRlcgorIyBpbmNyZW1lbnRpbmcgImEwIiBieSA2NC4KKyMgRm9yICJhMiIgYmVsb3cgMTYwIHRoZXJlIHdpbGwgYmUgbm8gc3VjaCAicHJlZiAzMCBzYWZlIiA2NC1ieXRlIGNodW5rLgorIworCXNsdGl1CXYxLGEyLDE2MAorCWJndHoJdjEsLkxsb29wMTZ3X25vcHJlZjMwCSMgc2tpcCAicHJlZiAzMCwwKGEwKSIKKwkgc3VidQl0NyxhMiw5NgkjIHN1YnRyYWN0ICJwcmVmIDMwIHVuc2FmZSIgcmVnaW9uCisJCSMgYmVsb3cgd2UgaGF2ZSBhdCBsZWFzdCAxIDY0LWJ5dGUgY2h1bmsgd2hpY2ggaXMgInByZWYgMzAgc2FmZSIKKwlhbmRpCXQ2LHQ3LDB4M2YJIyB0NiBpcyBwYXN0ICI2NC1ieXRlIHNhZmUgY2h1bmtzIiByZW1pbmRlcgorCXN1YnUJdDUsdDcsdDYJIyBzdWJ0cmFjdCBmcm9tIHQ3IHRoZSByZW1pbmRlcgorCQkJCSMgSGVyZSB0NSBjb3VudHMgYnl0ZXMgaW4gMTZ3ICJzYWZlIiBjaHVua3MKKwlhZGR1CXQ0LGEwLHQ1CSMgTm93IHQ0IGlzIHRoZSBkc3QgYWZ0ZXIgNjQtYnl0ZSAic2FmZSIgY2h1bmtzCisKKyMgRG9uJ3QgdXNlICJwcmVmIDMwLDAoYTApIiBmb3IgYTAgaW4gYSAibWlkZGxlIiBvZiBhIGNhY2hlIGxpbmUKKyMJcHJlZgkzMCwwKGEwKQorIyBIZXJlIHdlIGFyZSBpbiB0aGUgcmVnaW9uLCB3aGVyZSBpdCBpcyBzYWZlIHRvIHVzZSAicHJlZiAzMCw2NChhMCkiCisuTGxvb3AxNnc6CisJYWRkaXUJYTAsYTAsNjQKKwlwcmVmCTMwLC0zMihhMCkJIyBjb250aW51ZSBzZXR0aW5nIHVwIHRoZSBkZXN0LCBhZGRyIDY0LTMyCisJc3cJYTEsLTY0KGEwKQorCXN3CWExLC02MChhMCkKKwlzdwlhMSwtNTYoYTApCisJc3cJYTEsLTUyKGEwKQorCXN3CWExLC00OChhMCkKKwlzdwlhMSwtNDQoYTApCisJc3cJYTEsLTQwKGEwKQorCXN3CWExLC0zNihhMCkKKwlub3AKKwlub3AJCQkjIHRoZSBleHRyYSBub3AgaW5zdHJ1Y3Rpb25zIGhlbHAgdG8gYmFsYW5jZQorCW5vcAkJCSMgY3ljbGVzIG5lZWRlZCBmb3IgInN0b3JlIiArICJmaWxsIiArICJldmljdCIKKwlub3AJCQkjIEZvciA2NGJ5dGUgc3RvcmUgdGhlcmUgYXJlIG5lZWRlZCA4IGZpbGwKKwlub3AJCQkjIGFuZCA4IGV2aWN0IGN5Y2xlcywgaS5lLiBhdCBsZWFzdCAzMiBpbnN0ci4KKwlub3AKKwlub3AKKwlwcmVmCTMwLDAoYTApCSMgY29udGludWUgc2V0dGluZyB1cCB0aGUgZGVzdCwgYWRkciA2NC0wCisJc3cJYTEsLTMyKGEwKQorCXN3CWExLC0yOChhMCkKKwlzdwlhMSwtMjQoYTApCisJc3cJYTEsLTIwKGEwKQorCXN3CWExLC0xNihhMCkKKwlzdwlhMSwtMTIoYTApCisJc3cJYTEsLTgoYTApCisJc3cJYTEsLTQoYTApCisJbm9wCisJbm9wCisJbm9wCisJbm9wCQkJIyBOT1RFOiBhZGRpbmcgMTQgbm9wLXMgaW5zdGVhZCBvZiAxMiBub3AtcworCW5vcAkJCSMgZ2l2ZXMgYmV0dGVyIHJlc3VsdHMgZm9yICJmYXN0IiBtZW1vcnkKKwlub3AKKwlibmUJYTAsdDQsLkxsb29wMTZ3CisJIG5vcAorCisJYmVxCWEwLGEzLC5MY2hrOHcJIyBtYXliZSBubyBtb3JlIDY0LWJ5dGUgY2h1bmtzPworCSBub3AJCQkjIHRoaXMgImRlbGF5ZWQgc2xvdCIgaXMgdXNlbGVzcyAuLi4KKworLkxsb29wMTZ3X25vcHJlZjMwOgkjIHRoZXJlIGNvdWxkIGJlIHVwIHRvIDMgIjY0LWJ5dGUgbm9wcmVmMzAiIGNodW5rcworCWFkZGl1CWEwLGEwLDY0CisJc3cJYTEsLTY0KGEwKQorCXN3CWExLC02MChhMCkKKwlzdwlhMSwtNTYoYTApCisJc3cJYTEsLTUyKGEwKQorCXN3CWExLC00OChhMCkKKwlzdwlhMSwtNDQoYTApCisJc3cJYTEsLTQwKGEwKQorCXN3CWExLC0zNihhMCkKKwlzdwlhMSwtMzIoYTApCisJc3cJYTEsLTI4KGEwKQorCXN3CWExLC0yNChhMCkKKwlzdwlhMSwtMjAoYTApCisJc3cJYTEsLTE2KGEwKQorCXN3CWExLC0xMihhMCkKKwlzdwlhMSwtOChhMCkKKwlibmUJYTAsYTMsLkxsb29wMTZ3X25vcHJlZjMwCisJIHN3CWExLC00KGEwKQorCisuTGNoazh3OgkJIyB0OCBoZXJlIGlzIHRoZSBieXRlIGNvdW50IHBhc3QgNjQtYnl0ZSBjaHVua3MKKworCWFuZGkJdDcsdDgsMHgxZgkjIGlzIHRoZXJlIGEgMzItYnl0ZSBjaHVuaz8KKwkJCQkjIHRoZSB0NyBpcyB0aGUgcmVtaW5kZXIgY291bnQgcGFzdCAzMi1ieXRlcworCWJlcQl0OCx0NywuTGNoazF3CSMgd2hlbiB0OD09dDcsIG5vIDMyLWJ5dGUgY2h1bmsKKwkgbW92ZQlhMix0NworCisJc3cJYTEsMChhMCkKKwlzdwlhMSw0KGEwKQorCXN3CWExLDgoYTApCisJc3cJYTEsMTIoYTApCisJc3cJYTEsMTYoYTApCisJc3cJYTEsMjAoYTApCisJc3cJYTEsMjQoYTApCisJc3cJYTEsMjgoYTApCisJYWRkaXUJYTAsYTAsMzIKKworLkxjaGsxdzoKKwlhbmRpCXQ4LGEyLDB4MwkjIG5vdyB0OCBpcyB0aGUgcmVtaW5kZXIgcGFzdCAxdyBjaHVua3MKKwliZXEJYTIsdDgsLkxsYXN0NGFsaWduZWQKKwkgc3VidQlhMyxhMix0OAkjIGEzIGlzIHRoZSBjb3VudCBvZiBieXRlcyBpbiAxdyBjaHVua3MKKwlhZGR1CWEzLGEwLGEzCSMgbm93IGEzIGlzIHRoZSBkc3QgYWRkcmVzcyBwYXN0IHRoZSAxdyBjaHVua3MKKworIyBjb3B5aW5nIGluIHdvcmRzICg0LWJ5dGUgY2h1bmtzKQorLkx3b3JkQ29weV9sb29wOgorCWFkZGl1CWEwLGEwLDQKKwlibmUJYTAsYTMsLkx3b3JkQ29weV9sb29wCisJIHN3CWExLC00KGEwKQorCisjIHN0b3JlIGxhc3QgMC0zIGJ5dGVzCisjIHRoaXMgd2lsbCByZXBlYXQgdGhlIGxhc3Qgc3RvcmUgaWYgdGhlIG1lbXNldCBmaW5pc2hlcyBvbiBhIHdvcmQgYm91bmRhcnkKKy5MbGFzdDRhbGlnbmVkOgorCWoJcmEKKwkgU1dMTwlhMSwtMSh0MCkKKworLkxsYXN0NDoKKwliZXEJYTAsdDAsLkxsYXN0NGUKKy5MbGFzdDRsOgorCSBhZGRpdQlhMCxhMCwxCisJYm5lCWEwLHQwLC5MbGFzdDRsCisJIHNiCWExLC0xKGEwKQorLkxsYXN0NGU6CisJaglyYQorCSBub3AKKworCS5zZXQJYXQKKwkuc2V0CXJlb3JkZXIKKworRU5EKG1lbXNldCkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgSW1wbGVtZW50YXRpb24gOiBTdGF0aWMgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zdHJpbmcvbWlwcy1zdHJpbmctb3BzLmggYi9saWJjL2FyY2gtbWlwczY0L3N0cmluZy9taXBzLXN0cmluZy1vcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjM1YmExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zdHJpbmcvbWlwcy1zdHJpbmctb3BzLmgKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aAorICogICAgICAgIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBNSVBTIFRlY2hub2xvZ2llcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfX01JUFNfU1RSSU5HX09QU19ICisjZGVmaW5lIF9fTUlQU19TVFJJTkdfT1BTX0gKKyAgICAvKiBUaGlzIGRlZmluaXRpb24gb2YgdGhlIGJ5dGUgYml0ZmllbGRzIHVzZXMgdGhlCisgICAgICAgYXNzdW1wdGlvbiB0aGF0IHRoZSBsYXlvdXQgb2YgdGhlIGJpdGZpZWxkcyBpcworICAgICAgIGVxdWl2YWxlbnQgdG8gdGhlIGxheW91dCBpbiBtZW1vcnkuICBHZW5lcmFsbHksCisgICAgICAgZm9yIHRoZSBNSVBTIEFCSXMsIHRoaXMgaXMgdHJ1ZS4gSWYgeW91IGNvbXBpbGUKKyAgICAgICB0aGUgc3RyY21wLmMgZmlsZSB3aXRoIC1EU01PS0VfVEVTVF9ORVdfU1RSQ01QLAorICAgICAgIHRoaXMgYXNzdW1wdGlvbiB3aWxsIGJlIHRlc3RlZC4KKworICAgICAgIEFsc28sIHJlZ2FyZGxlc3Mgb2YgY2hhciBzaWduZWRuZXNzLCBBTlNJIEMgZGljdGF0ZXMgdGhhdAorICAgICAgIHN0cmNtcCgpIHRyZWF0cyBlYWNoIGNoYXJhY3RlciBhcyB1bnNpZ25lZCBjaGFyLiAgRm9yCisgICAgICAgc3RybGVuIGFuZCB0aGUgbGlrZSwgc2lnbmVkbmVzcyBkb2Vzbid0IG1hdHRlci4KKworICAgICAgIEFsc28sIHRoaXMgY29kZSBhc3N1bWVzIHRoYXQgdGhlcmUgYXJlIDgtYml0cyBwZXIgJ2NoYXInLiAgKi8KKworI2lmIF9fbWlwczY0Cit0eXBlZGVmIHN0cnVjdCBiaXRzCit7CisgIHVuc2lnbmVkIGxvbmcgQjA6OCwgQjE6OCwgQjI6OCwgQjM6OCwgQjQ6OCwgQjU6OCwgQjY6OCwgQjc6ODsKK30gYml0c190OworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IGJpdHMKK3sKKyAgdW5zaWduZWQgbG9uZyBCMDo4LCBCMTo4LCBCMjo4LCBCMzo4OworfSBiaXRzX3Q7CisjZW5kaWYKKworI2lmbmRlZiBfVUxXCisgICAgLyogZm9yIE1JUFMgR0NDLCB0aGVyZSBpcyBubyB1bmFsaWduZWQgYnVpbHRpbnMgLSBzbyB0aGlzIGNvZGUgZm9yY2VzCisgICAgICAgdGhlIGNvbXBpbGVyIHRvIHRyZWF0IHRoZSBwb2ludGVyIGFjY2VzcyBhcyB1bmFsaWduZWQuICAqLworc3RydWN0IHVsdworeworICB1bnNpZ25lZCBsb25nIGI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBfVUxXKF9feCkgKChzdHJ1Y3QgdWx3ICopICgoY2hhciAqKSgmX194KSkpLT5iOworI2VuZGlmCisKKy8qIFRoaXMgdW5pb24gYXNzdW1lcyB0aGF0IHNtYWxsIHN0cnVjdHVyZXMgY2FuIGJlIGluIHJlZ2lzdGVycy4gIElmCisgICBub3QsIHRoZW4gbWVtb3J5IGFjY2Vzc2VzIHdpbGwgYmUgZG9uZSAtIG5vdCBvcHRpbWFsLCBidXQgb2suICAqLwordHlwZWRlZiB1bmlvbgoreworICB1bnNpZ25lZCBsb25nIHY7CisgIGJpdHNfdCBiOworfSBiaXRmaWVsZHNfdDsKKworI2lmbmRlZiBkZXRlY3RfemVybworLyogX19taXBzX2RzcCwgX19taXBzX2RzcHIyLCBhbmQgX19taXBzNjQgYXJlIHByZWRlZmluZWQgYnkKKyAgIHRoZSBjb21waWxlciwgYmFzZWQgb24gY29tbWFuZCBsaW5lIG9wdGlvbnMuICAqLworI2lmIChfX21pcHNfZHNwIHx8IF9fbWlwc19kc3ByMikgJiYgIV9fbWlwczY0CisjZGVmaW5lIF9fbWlwc191c2luZ19kc3AgMQorCisvKiBEU1AgNC1sYW5lICg4IHVuc2lnbmVkIGJpdHMgcGVyIGxpbmUpIHN1YnRyYWN0IGFuZCBzYXR1cmF0ZQorICogSW50cmluc2ljIG9wZXJhdGlvbi4gSG93IHRoaXMgd29ya3M6CisgKiAgICAgR2l2ZW4gYSA0LWJ5dGUgc3RyaW5nIG9mICJBQkNcMCIsIHN1YnRyYWN0IHRoaXMgYXMKKyAqICAgICBhbiB1bnNpZ25lZCBpbnRlZ2VyIGZyb20gMHgwMTAxMDEwMToKKyAqCSAgIDB4MDEwMTAxMDEKKyAqICAgICAgIC0gMHg0MTQyNDMwMAorICogICAgICAgIC0tLS0tLS0tLS0tCisgKCAgICAgICAgIDB4YmZiZWJlMDEgPC0tIGFuc3dlciB3aXRob3V0IHNhdHVyYXRpb24KKyAqCSAgIDB4MDAwMDAwMDEgPC0tIGFuc3dlciB3aXRoIHNhdHVyYXRpb24KKyAqIFdoZW4gdGhpcyA0LWxhbmUgdmVjdG9yIGlzIHRyZWF0ZWQgYXMgYW4gdW5zaWduZWQgaW50IHZhbHVlLAorICogYSBub24temVybyBhbnN3ZXIgaW5kaWNhdGVzIHRoZSBwcmVzZW5jZSBvZiBhIHplcm8gaW4gdGhlCisgKiBvcmlnaW5hbCA0LWJ5dGUgYXJndW1lbnQuICAqLworCit0eXBlZGVmIHNpZ25lZCBjaGFyIHY0aTggX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICg0KSkpOworCisjZGVmaW5lIGRldGVjdF96ZXJvKF9feCxfX3ksX18wMXMsX184MHMpXAorICAgICAgICgodW5zaWduZWQpIF9fYnVpbHRpbl9taXBzX3N1YnVfc19xYigodjRpOCkgX18wMXMsKHY0aTgpIF9feCkpCisKKyAgICAvKiBzZXRzIGFsbCA0IGxhbmVzIHRvIHJlcXVlc3RlZCBieXRlLiAgKi8KKyNkZWZpbmUgc2V0X2J5dGVfbGFuZXMoX194KSAoKHVuc2lnbmVkKSBfX2J1aWx0aW5fbWlwc19yZXBsX3FiKF9feCkpCisKKyAgICAvKiBzZXRzIGFsbCA0IGxhbmVzIHRvIDB4MDEuICAqLworI2RlZmluZSBkZWZfYW5kX3NldF8wMShfX3gpIHVuc2lnbmVkIGxvbmcgX194ID0gKHVuc2lnbmVkKSBfX2J1aWx0aW5fbWlwc19yZXBsX3FiKDB4MDEpCisKKyAgICAvKiBzZXRzIGFsbCA0IGxhbmVzIHRvIDB4ODAuIE5vdCBuZWVkZWQgd2hlbiBzdWJ1X3MucWIgdXNlZC4gKi8KKyNkZWZpbmUgZGVmX2FuZF9zZXRfODAoX194KSAvKiBkbyBub3RoaW5nICovCisKKyNlbHNlCisgICAgLyogdGhpcyB2ZXJzaW9uLCBvcmlnaW5hbGx5IHB1Ymxpc2hlZCBpbiB0aGUgODAncywgdXNlcworICAgICAgIGEgcmV2ZXJzZS1jYXJyeS1zZXQgbGlrZSBkZXRlcm1pbmF0aW9uIG9mIHRoZSB6ZXJvIGJ5dGUuCisgICAgICAgVGhlIHN0ZXBzIGFyZSwgZm9yIF9feCA9IDB4MzFmZjAwMDE6CisgICAgICAgX194IC0gXzAxcyA9IDB4MzBmZGZmMDAKKyAgICAgICB+X194ID0gMHhjZTAwZmZmZQorICAgICAgICgoX194IC0gXzAxcykgJiB+X194KSA9IDB4MDAwMGZmMDAKKyAgICAgICB4ICYgXzgwcyA9IDB4MDAwMDgwMDAgPC0gYnl0ZSAzIHdhcyB6ZXJvCisgICAgICAgU29tZSBpbXBsZW1lbnRhaW9ucyBuYWl2ZWx5IGFzc3VtZSB0aGF0IGNoYXJhY3RlcnMgYXJlCisgICAgICAgYWx3YXlzIDctYml0IHVuc2lnbmVkIEFTQ0lJLiBXaXRoIHRoYXQgYXNzdW1wdGlvbiwgdGhlCisgICAgICAgIiYgfngiIGlzIHVzdWFsbHkgZGlzY2FyZGVkLiBTaW5jZSBjaGFyYWN0ZXIgc3RyaW5ncworICAgICAgIGFyZSA4LWJpdCwgdGhlIGFuZCBpcyBuZWVkZWQgdG8gY2F0Y2ggdGhlIGNhc2Ugb2YKKyAgICAgICBhIGZhbHNlIHBvc2l0aXZlIHdoZW4gdGhlIGJ5dGUgaXMgMHg4MC4gKi8KKworI2RlZmluZSBkZXRlY3RfemVybyhfX3gsX195LF8wMXMsXzgwcylcCisJKCh1bnNpZ25lZCkgKCgoX194KSAtIF8wMXMpICYgfihfX3gpKSAmIF84MHMpCisKKyNpZiBfX21pcHM2NAorI2RlZmluZSBkZWZfYW5kX3NldF84MChfX3gpIHVuc2lnbmVkIGxvbmcgX194ID0gIDB4ODA4MDgwODA4MDgwODA4MHVsCisjZGVmaW5lIGRlZl9hbmRfc2V0XzAxKF9feCkgIHVuc2lnbmVkIGxvbmcgX194ID0gMHgwMTAxMDEwMTAxMDEwMTAxdWwKKyNlbHNlCisjZGVmaW5lIGRlZl9hbmRfc2V0XzgwKF9feCkgdW5zaWduZWQgbG9uZyBfX3ggPSAweDgwODA4MDgwdWwKKyNkZWZpbmUgZGVmX2FuZF9zZXRfMDEoX194KSB1bnNpZ25lZCBsb25nIF9feCA9IDB4MDEwMTAxMDF1bAorI2VuZGlmCisKKyNlbmRpZgorI2VuZGlmCisKKy8qIGRlYWxpbmcgd2l0aCAndm9pZCAqJyBjb252ZXJzaW9ucyB3aXRob3V0IHVzaW5nIGV4dHJhIHZhcmlhYmxlcy4gKi8KKyNkZWZpbmUgZ2V0X2J5dGUoX194LF9faWR4KSAoKCh1bnNpZ25lZCBjaGFyICopIChfX3gpKVtfX2lkeF0pCisjZGVmaW5lIHNldF9ieXRlKF9feCxfX2lkeCxfX2ZpbGwpICgodW5zaWduZWQgY2hhciAqKSAoX194KSlbX19pZHhdID0gKF9fZmlsbCkKKyNkZWZpbmUgZ2V0X3dvcmQoX194LF9faWR4KSAoKCh1bnNpZ25lZCBsb25nICopIChfX3gpKVtfX2lkeF0pCisjZGVmaW5lIHNldF93b3JkKF9feCxfX2lkeCxfX2ZpbGwpICgodW5zaWduZWQgbG9uZyAqKSAoX194KSlbX19pZHhdID0gKF9fZmlsbCkKKyNkZWZpbmUgaW5jX3B0cl9hcyhfX3R5cGUsX194LF9faW5jKSBfX3ggPSAodm9pZCAqKSAoKChfX3R5cGUpIF9feCkgKyAoX19pbmMpKQorI2RlZmluZSBjdnRfcHRyX3RvKF9fdHlwZSxfX3gpICgoX190eXBlKSAoX194KSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N0cmluZy9taXBzX3N0cmxlbi5jIGIvbGliYy9hcmNoLW1pcHM2NC9zdHJpbmcvbWlwc19zdHJsZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2U1ODY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zdHJpbmcvbWlwc19zdHJsZW4uYwpAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICAgICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoCisgKiAgICAgICAgdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1JUFMgVGVjaG5vbG9naWVzIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAibWlwcy1zdHJpbmctb3BzLmgiCisKKyNkZWZpbmUgZG9fc3RybGVuX3dvcmQoX19hdikge1wKKyAgICBpZiAoZGV0ZWN0X3plcm8oeCx4LF8wMXMsXzgwcykpIGJyZWFrO1wKKyAgICB4ID0gX19hdjtcCisgICAgY250ICs9IHNpemVvZiAodW5zaWduZWQpO1wKKyAgICB9CisKKyNkZWZpbmUgZG9fc3RybGVuX2J5dGUoX194KSB7XAorICBpZiAoKGJ4LmIuQiMjX194KSA9PSAwKSBicmVhaztcCisgICsrY250O1wKKyAgfQorCisjaWYgU01PS0VfVEVTVF9NSVBTX1NUUkxFTgorI2RlZmluZSBzdHJsZW4gbXlfc3RybGVuCisjZW5kaWYKKworc2l6ZV90CitzdHJsZW4gKGNvbnN0IGNoYXIgKl9hKQoreworICBpbnQgY250ID0gMDsKKyAgdW5zaWduZWQgbG9uZyB4OworCisgIC8qIGFsaWduIHRoZSBzdHJpbmcgdG8gd29yZCBib3VuZGFyeSBzbyB3ZSBjYW4gZG8gd29yZCBhdCBhIHRpbWUuICAqLworICBpZiAoKGN2dF9wdHJfdG8gKHVuc2lnbmVkIGxvbmcsIF9hKSAmIChzaXplb2YgKHVuc2lnbmVkIGxvbmcpIC0gMSkpICE9IDApCisgICAgeworICAgICAgaWYgKChjdnRfcHRyX3RvICh1bnNpZ25lZCBsb25nLCBfYSkgJiAxKSAhPSAwKQorCXsKKwkgIGlmIChnZXRfYnl0ZSAoX2EsIDApID09IDApCisJICAgIHJldHVybiBjbnQ7CisJICAvKiBzZXQgYml0IDEgc28gMi1ieXRlcyBhcmUgY2hlY2tlZCBhbmQgaW5jcmVtZW50ZWQuICovCisJICBpbmNfcHRyX2FzIChjaGFyICosIF9hLCAxKTsKKwkgICsrY250OworCX0KKyAgICAgIGlmICgoY3Z0X3B0cl90byAodW5zaWduZWQgbG9uZywgX2EpICYgMikgIT0gMCkKKwl7CisJICBpZiAoZ2V0X2J5dGUgKF9hLCAwKSA9PSAwKQorCSAgICByZXR1cm4gY250ICsgMDsKKwkgIGlmIChnZXRfYnl0ZSAoX2EsIDEpID09IDApCisJICAgIHJldHVybiBjbnQgKyAxOworCSAgaW5jX3B0cl9hcyAoY2hhciAqLCBfYSwgMik7CisJICBjbnQgKz0gMjsKKwl9CisgICAgfQorCisjaWYgX19taXBzNjQKKyNlcnJvciBzdHJsZW46IG1pcHM2NCBjaGVjayBmb3IgNC1ieXRlIGFsaWdubWVudCBub3QgaW1wbGVtZW50ZWQuCisjZW5kaWYKKworICBpZiAoMSkKKyAgICB7CisgICAgICBkZWZfYW5kX3NldF8wMSAoXzAxcyk7CisgICAgICBkZWZfYW5kX3NldF84MCAoXzgwcyk7CisKKyAgICAgIC8qIGFzIGFkdmFudGFnb3VzIGFzIGl0IGlzIHRvIHBlcmZvcm1hbmNlLCB0aGlzIGNvZGUgY2Fubm90IHByZS1sb2FkCisgICAgICAgICB0aGUgZm9sbG93aW5nIHdvcmQsIG5vciBjYW4gaXQgcHJlZmV0Y2ggdGhlIG5leHQgbGluZSBhdCB0aGUgc3RhcnQKKyAgICAgICAgIG9mIHRoZSBsb29wIHNpbmNlIHRoZSBzdHJpbmcgY2FuIGJlIGF0IHRoZSBlbmQgb2YgYSBwYWdlIHdpdGggdGhlCisgICAgICAgICBmb2xsb3dpbmcgcGFnZSB1bm1hcHBlZC4gVGhlcmUgYXJlIHRlc3RzIGluIHRoZSBzdWl0ZSB0byBjYXRjaAorICAgICAgICAgYW55IGF0dGVtcHQgdG8gZ28gYmV5b25kIHRoZSBjdXJyZW50IHdvcmQuICovCisgICAgICB4ID0gZ2V0X3dvcmQgKF9hLCAwKTsKKyAgICAgIHdoaWxlICgxKQorCXsKKwkgIC8qIGRvaW5nIDggd29yZHMgc2hvdWxkIGNvdmVyIG1vc3Qgc3RyaW5ncy4gICovCisJICBkb19zdHJsZW5fd29yZCAoZ2V0X3dvcmQgKF9hLCAxKSk7CisJICBkb19zdHJsZW5fd29yZCAoZ2V0X3dvcmQgKF9hLCAyKSk7CisJICBkb19zdHJsZW5fd29yZCAoZ2V0X3dvcmQgKF9hLCAzKSk7CisJICBkb19zdHJsZW5fd29yZCAoZ2V0X3dvcmQgKF9hLCA0KSk7CisJICBkb19zdHJsZW5fd29yZCAoZ2V0X3dvcmQgKF9hLCA1KSk7CisJICBkb19zdHJsZW5fd29yZCAoZ2V0X3dvcmQgKF9hLCA2KSk7CisJICBkb19zdHJsZW5fd29yZCAoZ2V0X3dvcmQgKF9hLCA3KSk7CisJICBkb19zdHJsZW5fd29yZCAoZ2V0X3dvcmQgKF9hLCA4KSk7CisJICBpbmNfcHRyX2FzICh1bnNpZ25lZCBsb25nKiwgX2EsIDgpOworCX0KKyAgICB9CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIC8qIHB1bGwgYXBhcnQgdGhlIGxhc3Qgd29yZCBwcm9jZXNzZWQgYW5kIGZpbmQgdGhlIHplcm8uICAqLworICAgICAgYml0ZmllbGRzX3QgYng7CisgICAgICBieC52ID0geDsKKyNpZiBfX21pcHM2NAorICAgICAgZG9fc3RybGVuX2J5dGUgKDApOworICAgICAgZG9fc3RybGVuX2J5dGUgKDEpOworICAgICAgZG9fc3RybGVuX2J5dGUgKDIpOworICAgICAgZG9fc3RybGVuX2J5dGUgKDMpOworICAgICAgZG9fc3RybGVuX2J5dGUgKDQpOworICAgICAgZG9fc3RybGVuX2J5dGUgKDUpOworICAgICAgZG9fc3RybGVuX2J5dGUgKDYpOworI2Vsc2UKKyAgICAgIGRvX3N0cmxlbl9ieXRlICgwKTsKKyAgICAgIGRvX3N0cmxlbl9ieXRlICgxKTsKKyAgICAgIGRvX3N0cmxlbl9ieXRlICgyKTsKKyNlbmRpZgorICAgICAgLyogbGFzdCBieXRlIGlzIHplcm8gKi8KKyAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIGNudDsKK30KKworI3VuZGVmIGRvX3N0cmxlbl9ieXRlCisjdW5kZWYgZG9fc3RybGVuX3dvcmQKKworI2lmIFNNT0tFX1RFU1RfTUlQU19TVFJMRU4KKyNpbmNsdWRlIDxzdGRpby5oPgorY2hhciBzdHIxW10gPSAiREhSWVNUT05FIFBST0dSQU0sIDEnU1QgU1RSSU5HIjsKK2NoYXIgc3RyMltdID0gIkRIUllTVE9ORSBQUk9HUkFNLCAyJ1NUIFNUUklORyI7CisKK2NoYXIgc3RyM1tdID0gImFub3RoZXIgc3RyaW5nIjsKK2NoYXIgc3RyNFtdID0gImFub3RoZXIiOworCitjaGFyIHN0cjVbXSA9ICJzb21lcyB0cmluZyI7CitjaGFyIHN0cjZbXSA9ICJzb21lc190cmluZyI7CisKK2NoYXIgc3RyN1sxNl0sIHN0cjhbMTZdOworCitzdGF0aWMgY2hhciAqCitjaGsgKHVuc2lnbmVkIGxvbmcgbWluZSwgdW5zaWduZWQgbG9uZyBsaWJzLCBpbnQgKmVycm9ycykKK3sKKyAgc3RhdGljIGNoYXIgYW5zd2VyWzEwMjRdOworICBjaGFyICpyZXN1bHQgPSBtaW5lID09IGxpYnMgPyAiUEFTUyIgOiAiRkFJTCI7CisgIHNwcmludGYgKGFuc3dlciwgIm5ld19zdHJsZW49JWQ6IGxpYl9zdHJsZW49JWQ6ICVzISIsIG1pbmUsIGxpYnMsIHJlc3VsdCk7CisgIGlmIChtaW5lICE9IGxpYnMpCisgICAgKCplcnJvcnMpKys7CisgIHJldHVybiBhbnN3ZXI7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgZXJyb3JzID0gMDsKKyAgLyogc2V0IC0xIGluIG9uZSBwb3NpdGlvbiAqLworICBzdHI2WzVdID0gMHhmZjsKKyAgLyogc2V0IHplcm8gaW4gc2FtZSBwb3NpdGlvbiB3aXRoIGp1bmsgaW4gZm9sbG93aW5nIDMgKi8KKyAgc3RyN1swXSA9IHN0cjhbMF0gPSAwOworICBzdHI3WzFdID0gMHhmZjsKKyAgc3RyN1syXSA9ICdhJzsKKyAgc3RyN1szXSA9IDI7CisgIHN0cjhbMV0gPSAncyc7CisgIHN0cjhbMl0gPSAtMjsKKyAgc3RyOFszXSA9IDA7CisKKyAgZnByaW50ZiAoc3RkZXJyLCAiPT09PT09PT09PSBtaXBzX3N0cmxlbiVzIHRlc3QuLi5cbiIsCisJICAgYXJndlswXSA/IGFyZ3ZbMF0gOiAidW5rbm93biBzdHJsZW4iKTsKKyNkZWZpbmUgUChfX3gsX195KSB7XAorICAgIGludCBhID0gbXlfc3RybGVuKF9feCArIF9feSk7XAorICAgIGludCBiID0gKHN0cmxlbikoX194ICsgX195KSAvKiBsaWJyYXJ5IHZlcnNpb24gKi87XAorICAgIGZwcmludGYoc3RkZXJyLCIlcyslZDogJXNcbiIsI19feCxfX3ksY2hrKGEsYiwmZXJyb3JzKSk7XAorICAgIH0KKworICBQIChzdHIxLCAwKTsKKyAgUCAoc3RyMSwgMSk7CisgIFAgKHN0cjEsIDIpOworICBQIChzdHIxLCAzKTsKKworICBQIChzdHIyLCAwKTsKKyAgUCAoc3RyMiwgMSk7CisgIFAgKHN0cjIsIDIpOworICBQIChzdHIyLCAzKTsKKworICBQIChzdHIzLCAwKTsKKyAgUCAoc3RyMywgMSk7CisgIFAgKHN0cjMsIDIpOworICBQIChzdHIzLCAzKTsKKworICBQIChzdHI0LCAwKTsKKyAgUCAoc3RyNCwgMSk7CisgIFAgKHN0cjQsIDIpOworICBQIChzdHI0LCAzKTsKKworICBQIChzdHI1LCAwKTsKKyAgUCAoc3RyNSwgMSk7CisgIFAgKHN0cjUsIDIpOworICBQIChzdHI1LCAzKTsKKworICBQIChzdHI2LCAwKTsKKyAgUCAoc3RyNiwgMSk7CisgIFAgKHN0cjYsIDIpOworICBQIChzdHI2LCAzKTsKKworICBQIChzdHI3LCAwKTsKKyAgUCAoc3RyNywgMSk7CisgIFAgKHN0cjcsIDIpOworICBQIChzdHI3LCAzKTsKKworICBQIChzdHI4LCAwKTsKKyAgUCAoc3RyOCwgMSk7CisgIFAgKHN0cjgsIDIpOworICBQIChzdHI4LCAzKTsKKworICByZXR1cm4gZXJyb3JzOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fYWNjZXB0NC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2FjY2VwdDQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDliNmM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2FjY2VwdDQuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fYWNjZXB0NCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2FjY2VwdDQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX19hY2NlcHQ0KQorLmhpZGRlbiBfX2FjY2VwdDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19icmsuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19icmsuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWY4OWM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2Jyay5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19icmspCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9icmsKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX19icmspCisuaGlkZGVuIF9fYnJrCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fY29ubmVjdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2Nvbm5lY3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzQ0NDY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2Nvbm5lY3QuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fY29ubmVjdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2Nvbm5lY3QKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX19jb25uZWN0KQorLmhpZGRlbiBfX2Nvbm5lY3QKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2Vwb2xsX3B3YWl0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmYjM4MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19lcG9sbF9wd2FpdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2Vwb2xsX3B3YWl0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fZXBvbGxfcHdhaXQpCisuaGlkZGVuIF9fZXBvbGxfcHdhaXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19leGl0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZXhpdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNWUwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZXhpdC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19leGl0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZXhpdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX2V4aXQpCisuaGlkZGVuIF9fZXhpdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2ZhZHZpc2U2NC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2ZhZHZpc2U2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYWNlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZmFkdmlzZTY0LlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2ZhZHZpc2U2NCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2ZhZHZpc2U2NAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX2ZhZHZpc2U2NCkKKy5oaWRkZW4gX19mYWR2aXNlNjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19nZXRjcHUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19nZXRjcHUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTZjMjFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2dldGNwdS5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19nZXRjcHUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9nZXRjcHUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX19nZXRjcHUpCisuaGlkZGVuIF9fZ2V0Y3B1CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZ2V0Y3dkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZ2V0Y3dkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNlZWI2OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19nZXRjd2QuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fZ2V0Y3dkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0Y3dkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fZ2V0Y3dkKQorLmhpZGRlbiBfX2dldGN3ZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2dldGRlbnRzNjQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19nZXRkZW50czY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcyMGI4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19nZXRkZW50czY0LlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2dldGRlbnRzNjQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9nZXRkZW50czY0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fZ2V0ZGVudHM2NCkKKy5oaWRkZW4gX19nZXRkZW50czY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZ2V0cGlkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZ2V0cGlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ1ZDkyNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19nZXRwaWQuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fZ2V0cGlkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0cGlkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fZ2V0cGlkKQorLmhpZGRlbiBfX2dldHBpZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTMyN2FiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2dldHByaW9yaXR5KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0cHJpb3JpdHkKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX19nZXRwcmlvcml0eSkKKy5oaWRkZW4gX19nZXRwcmlvcml0eQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2lvY3RsLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19faW9jdGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmFkMGQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2lvY3RsLlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2lvY3RsKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfaW9jdGwKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX19pb2N0bCkKKy5oaWRkZW4gX19pb2N0bApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX29wZW5hdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX29wZW5hdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYWMxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fb3BlbmF0LlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX29wZW5hdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX29wZW5hdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX29wZW5hdCkKKy5oaWRkZW4gX19vcGVuYXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19wcG9sbC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3Bwb2xsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU2ZmI4YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19wcG9sbC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19wcG9sbCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3Bwb2xsCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fcHBvbGwpCisuaGlkZGVuIF9fcHBvbGwKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19wc2VsZWN0Ni5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3BzZWxlY3Q2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0OWQxYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19wc2VsZWN0Ni5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19wc2VsZWN0NikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3BzZWxlY3Q2CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fcHNlbGVjdDYpCisuaGlkZGVuIF9fcHNlbGVjdDYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19wdHJhY2UuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19wdHJhY2UuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTNjZTE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3B0cmFjZS5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19wdHJhY2UpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9wdHJhY2UKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX19wdHJhY2UpCisuaGlkZGVuIF9fcHRyYWNlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcmVib290LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcmVib290LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg3MzEwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19yZWJvb3QuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fcmVib290KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfcmVib290CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fcmVib290KQorLmhpZGRlbiBfX3JlYm9vdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZDNjYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3J0X3NpZ2FjdGlvbikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3J0X3NpZ2FjdGlvbgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX3J0X3NpZ2FjdGlvbikKKy5oaWRkZW4gX19ydF9zaWdhY3Rpb24KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YWUzOWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19ydF9zaWdwZW5kaW5nKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfcnRfc2lncGVuZGluZworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX3J0X3NpZ3BlbmRpbmcpCisuaGlkZGVuIF9fcnRfc2lncGVuZGluZwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDYyMGU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3J0X3NpZ3Byb2NtYXNrKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfcnRfc2lncHJvY21hc2sKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX19ydF9zaWdwcm9jbWFzaykKKy5oaWRkZW4gX19ydF9zaWdwcm9jbWFzawpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3J0X3NpZ3N1c3BlbmQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWExNWRlZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3J0X3NpZ3N1c3BlbmQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9ydF9zaWdzdXNwZW5kCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fcnRfc2lnc3VzcGVuZCkKKy5oaWRkZW4gX19ydF9zaWdzdXNwZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc3ZjE3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fcnRfc2lndGltZWR3YWl0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfcnRfc2lndGltZWR3YWl0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fcnRfc2lndGltZWR3YWl0KQorLmhpZGRlbiBfX3J0X3NpZ3RpbWVkd2FpdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDgxNzA2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3NjaGVkX2dldGFmZmluaXR5KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX19zY2hlZF9nZXRhZmZpbml0eSkKKy5oaWRkZW4gX19zY2hlZF9nZXRhZmZpbml0eQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOTY2ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3NldF90aWRfYWRkcmVzcykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldF90aWRfYWRkcmVzcworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX3NldF90aWRfYWRkcmVzcykKKy5oaWRkZW4gX19zZXRfdGlkX2FkZHJlc3MKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19zZXRfdGxzLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fc2V0X3Rscy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOTgxNTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fc2V0X3Rscy5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19zZXRfdGxzKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2V0X3RocmVhZF9hcmVhCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fc2V0X3RscykKKy5oaWRkZW4gX19zZXRfdGxzCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fc2lnbmFsZmQ0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fc2lnbmFsZmQ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE2ZWVmMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19zaWduYWxmZDQuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fc2lnbmFsZmQ0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2lnbmFsZmQ0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fc2lnbmFsZmQ0KQorLmhpZGRlbiBfX3NpZ25hbGZkNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3NvY2tldC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3NvY2tldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OTkzNTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fc29ja2V0LlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3NvY2tldCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NvY2tldAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX3NvY2tldCkKKy5oaWRkZW4gX19zb2NrZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjZkOGY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX190aW1lcl9jcmVhdGUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl90aW1lcl9jcmVhdGUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX190aW1lcl9jcmVhdGUpCisuaGlkZGVuIF9fdGltZXJfY3JlYXRlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjZjVlOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fdGltZXJfZGVsZXRlKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfdGltZXJfZGVsZXRlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fdGltZXJfZGVsZXRlKQorLmhpZGRlbiBfX3RpbWVyX2RlbGV0ZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3MzE2MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3RpbWVyX2dldG92ZXJydW4pCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl90aW1lcl9nZXRvdmVycnVuCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fdGltZXJfZ2V0b3ZlcnJ1bikKKy5oaWRkZW4gX190aW1lcl9nZXRvdmVycnVuCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmVlNWJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fdGltZXJfZ2V0dGltZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3RpbWVyX2dldHRpbWUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX190aW1lcl9nZXR0aW1lKQorLmhpZGRlbiBfX3RpbWVyX2dldHRpbWUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NzY0ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX190aW1lcl9zZXR0aW1lKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfdGltZXJfc2V0dGltZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX3RpbWVyX3NldHRpbWUpCisuaGlkZGVuIF9fdGltZXJfc2V0dGltZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3dhaXRpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3dhaXRpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZTA5MGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fd2FpdGlkLlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3dhaXRpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3dhaXRpZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX3dhaXRpZCkKKy5oaWRkZW4gX193YWl0aWQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX2V4aXQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX2V4aXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTVhMmY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fZXhpdC5TCkBAIC0wLDAgKzEsMjggQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX2V4aXQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9leGl0X2dyb3VwCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9leGl0KQorCisgICAgLmdsb2JsIF9FeGl0CisgICAgLmVxdSBfRXhpdCwgX2V4aXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX2ZsdXNoX2NhY2hlLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19mbHVzaF9jYWNoZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZTQ4NDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19mbHVzaF9jYWNoZS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX2ZsdXNoX2NhY2hlKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfY2FjaGVmbHVzaAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfZmx1c2hfY2FjaGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2FjY3QuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvYWNjdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNzI4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2FjY3QuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGFjY3QpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9hY2N0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGFjY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2JpbmQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvYmluZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMmI1YjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2JpbmQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGJpbmQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9iaW5kCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGJpbmQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2NhcGdldC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jYXBnZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDA1NDM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jYXBnZXQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGNhcGdldCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2NhcGdldAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChjYXBnZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2NhcHNldC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jYXBzZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTQ3MDI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jYXBzZXQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGNhcHNldCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2NhcHNldAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChjYXBzZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2NoZGlyLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2NoZGlyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiMjJjOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvY2hkaXIuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGNoZGlyKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfY2hkaXIKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoY2hkaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Nocm9vdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jaHJvb3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODA1ZjUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jaHJvb3QuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGNocm9vdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2Nocm9vdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChjaHJvb3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jbG9ja19nZXRyZXMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTAwM2EwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jbG9ja19nZXRyZXMuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGNsb2NrX2dldHJlcykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2Nsb2NrX2dldHJlcworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChjbG9ja19nZXRyZXMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MTM1NjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGNsb2NrX2dldHRpbWUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9jbG9ja19nZXR0aW1lCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGNsb2NrX2dldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTU4YTEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGNsb2NrX25hbm9zbGVlcCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2Nsb2NrX25hbm9zbGVlcAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChjbG9ja19uYW5vc2xlZXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YjZhZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGNsb2NrX3NldHRpbWUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9jbG9ja19zZXR0aW1lCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGNsb2NrX3NldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Nsb3NlLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Nsb3NlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUyMzdkZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvY2xvc2UuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGNsb3NlKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfY2xvc2UKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoY2xvc2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzOTY1MzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGRlbGV0ZV9tb2R1bGUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9kZWxldGVfbW9kdWxlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGRlbGV0ZV9tb2R1bGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2R1cC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9kdXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWNhNWU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9kdXAuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGR1cCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2R1cAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChkdXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2R1cDMuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZHVwMy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MDFmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2R1cDMuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGR1cDMpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9kdXAzCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGR1cDMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZXBvbGxfY3JlYXRlMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZjFjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGVwb2xsX2NyZWF0ZTEpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9lcG9sbF9jcmVhdGUxCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGVwb2xsX2NyZWF0ZTEpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Vwb2xsX2N0bC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9lcG9sbF9jdGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWJhNjA1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9lcG9sbF9jdGwuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGVwb2xsX2N0bCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2Vwb2xsX2N0bAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChlcG9sbF9jdGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2V2ZW50ZmQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZXZlbnRmZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZDYzZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2V2ZW50ZmQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGV2ZW50ZmQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9ldmVudGZkMgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChldmVudGZkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9leGVjdmUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZXhlY3ZlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNkNWQ2MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZXhlY3ZlLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShleGVjdmUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9leGVjdmUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZXhlY3ZlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mYWNjZXNzYXQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmFjY2Vzc2F0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiYjgwMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmFjY2Vzc2F0LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmYWNjZXNzYXQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9mYWNjZXNzYXQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZmFjY2Vzc2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mYWxsb2NhdGUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmFsbG9jYXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFlZjBlZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmFsbG9jYXRlLlMKQEAgLTAsMCArMSwyOCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmYWxsb2NhdGUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9mYWxsb2NhdGUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZmFsbG9jYXRlKQorCisgICAgLmdsb2JsIGZhbGxvY2F0ZTY0CisgICAgLmVxdSBmYWxsb2NhdGU2NCwgZmFsbG9jYXRlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZjaGRpci5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mY2hkaXIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDU2MjVjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mY2hkaXIuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZjaGRpcikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2ZjaGRpcgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChmY2hkaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZjaG1vZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mY2htb2QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODc3Yjc4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mY2htb2QuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZjaG1vZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2ZjaG1vZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChmY2htb2QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZjaG1vZGF0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZjaG1vZGF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUxNDkyYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmNobW9kYXQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZjaG1vZGF0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZmNobW9kYXQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZmNobW9kYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZjaG93bi5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mY2hvd24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGMzM2MwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mY2hvd24uUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZjaG93bikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2ZjaG93bgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChmY2hvd24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZjaG93bmF0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZjaG93bmF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRjZWZlMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmNob3duYXQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZjaG93bmF0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZmNob3duYXQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZmNob3duYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZjbnRsLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZjbnRsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFiYzY1YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmNudGwuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZjbnRsKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZmNudGwKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZmNudGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZkYXRhc3luYy5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mZGF0YXN5bmMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmJlMTEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mZGF0YXN5bmMuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZkYXRhc3luYykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2ZkYXRhc3luYworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChmZGF0YXN5bmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZnZXR4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mZ2V0eGF0dHIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGMyNDhhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mZ2V0eGF0dHIuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZnZXR4YXR0cikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2ZnZXR4YXR0cgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChmZ2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZsaXN0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmxpc3R4YXR0ci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNWIxYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZsaXN0eGF0dHIuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZsaXN0eGF0dHIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9mbGlzdHhhdHRyCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGZsaXN0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Zsb2NrLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Zsb2NrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc0YTVkYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmxvY2suUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZsb2NrKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZmxvY2sKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZmxvY2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTdiZTRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZyZW1vdmV4YXR0cikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2ZyZW1vdmV4YXR0cgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChmcmVtb3ZleGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZzZXR4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mc2V0eGF0dHIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWQxZjkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mc2V0eGF0dHIuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZzZXR4YXR0cikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2ZzZXR4YXR0cgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChmc2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZzdGF0NjQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZnN0YXQ2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNGQ1MWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZzdGF0NjQuUwpAQCAtMCwwICsxLDI4IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZzdGF0NjQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9mc3RhdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChmc3RhdDY0KQorCisgICAgLmdsb2JsIGZzdGF0CisgICAgLmVxdSBmc3RhdCwgZnN0YXQ2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mc3RhdGF0NjQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZnN0YXRhdDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg4OGE0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZnN0YXRhdDY0LlMKQEAgLTAsMCArMSwyOCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmc3RhdGF0NjQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9uZXdmc3RhdGF0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGZzdGF0YXQ2NCkKKworICAgIC5nbG9ibCBmc3RhdGF0CisgICAgLmVxdSBmc3RhdGF0LCBmc3RhdGF0NjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZnN0YXRmczY0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZzdGF0ZnM2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZTg4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZzdGF0ZnM2NC5TCkBAIC0wLDAgKzEsMjggQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZnN0YXRmczY0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZnN0YXRmcworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChmc3RhdGZzNjQpCisKKyAgICAuZ2xvYmwgZnN0YXRmcworICAgIC5lcXUgZnN0YXRmcywgZnN0YXRmczY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZzeW5jLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZzeW5jLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1NmUzNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZnN5bmMuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZzeW5jKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZnN5bmMKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZnN5bmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Z0cnVuY2F0ZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mdHJ1bmNhdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGI4NDdiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mdHJ1bmNhdGUuUwpAQCAtMCwwICsxLDI4IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZ0cnVuY2F0ZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2Z0cnVuY2F0ZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChmdHJ1bmNhdGUpCisKKyAgICAuZ2xvYmwgZnRydW5jYXRlNjQKKyAgICAuZXF1IGZ0cnVuY2F0ZTY0LCBmdHJ1bmNhdGUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0ZWdpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRlZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM5YzZmMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0ZWdpZC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0ZWdpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2dldGVnaWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZ2V0ZWdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0ZXVpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRldWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYxOWRjNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0ZXVpZC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0ZXVpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2dldGV1aWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZ2V0ZXVpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0Z2lkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldGdpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3N2JlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldGdpZC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0Z2lkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0Z2lkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGdldGdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldGdyb3Vwcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYzRmYTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldGdyb3Vwcy5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0Z3JvdXBzKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0Z3JvdXBzCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGdldGdyb3VwcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0aXRpbWVyLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldGl0aW1lci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNzhhOTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldGl0aW1lci5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0aXRpbWVyKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0aXRpbWVyCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGdldGl0aW1lcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjFmMWE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRwZWVybmFtZS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0cGVlcm5hbWUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9nZXRwZWVybmFtZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChnZXRwZWVybmFtZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0cGdpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRwZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlkYzc3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0cGdpZC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0cGdpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2dldHBnaWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZ2V0cGdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0cHBpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRwcGlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwZjMwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0cHBpZC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0cHBpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2dldHBwaWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZ2V0cHBpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHJlc2dpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4Y2I1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHJlc2dpZC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0cmVzZ2lkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0cmVzZ2lkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGdldHJlc2dpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0cmVzdWlkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHJlc3VpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMTdiZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHJlc3VpZC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0cmVzdWlkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0cmVzdWlkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGdldHJlc3VpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0cmxpbWl0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHJsaW1pdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NzZjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHJsaW1pdC5TCkBAIC0wLDAgKzEsMjggQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0cmxpbWl0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0cmxpbWl0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGdldHJsaW1pdCkKKworICAgIC5nbG9ibCBnZXRybGltaXQ2NAorICAgIC5lcXUgZ2V0cmxpbWl0NjQsIGdldHJsaW1pdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRydXNhZ2UuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0cnVzYWdlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJmNTU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0cnVzYWdlLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShnZXRydXNhZ2UpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9nZXRydXNhZ2UKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZ2V0cnVzYWdlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRzaWQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0c2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwYzkxZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0c2lkLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShnZXRzaWQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9nZXRzaWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZ2V0c2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRzb2NrbmFtZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YTk0MjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShnZXRzb2NrbmFtZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2dldHNvY2tuYW1lCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGdldHNvY2tuYW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRzb2Nrb3B0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHNvY2tvcHQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGVlNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShnZXRzb2Nrb3B0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0c29ja29wdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChnZXRzb2Nrb3B0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E2ZDQxNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShnZXR0aW1lb2ZkYXkpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9nZXR0aW1lb2ZkYXkKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZ2V0dGltZW9mZGF5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXR1aWQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0dWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q1Zjk0MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0dWlkLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShnZXR1aWQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9nZXR1aWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZ2V0dWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXR4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXR4YXR0ci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNDQzZjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHhhdHRyLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShnZXR4YXR0cikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2dldHhhdHRyCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGdldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9pbml0X21vZHVsZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9pbml0X21vZHVsZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMmYwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShpbml0X21vZHVsZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2luaXRfbW9kdWxlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGluaXRfbW9kdWxlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZmRhZDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShpbm90aWZ5X2FkZF93YXRjaCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2lub3RpZnlfYWRkX3dhdGNoCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGlub3RpZnlfYWRkX3dhdGNoKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9pbm90aWZ5X2luaXQxLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzBkMTAxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9pbm90aWZ5X2luaXQxLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShpbm90aWZ5X2luaXQxKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfaW5vdGlmeV9pbml0MQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChpbm90aWZ5X2luaXQxKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODkzNzg3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShpbm90aWZ5X3JtX3dhdGNoKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfaW5vdGlmeV9ybV93YXRjaAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChpbm90aWZ5X3JtX3dhdGNoKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9raWxsLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2tpbGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzViNjE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9raWxsLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShraWxsKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfa2lsbAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChraWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9rbG9nY3RsLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2tsb2djdGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGI5ZjBiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9rbG9nY3RsLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShrbG9nY3RsKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc3lzbG9nCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGtsb2djdGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2xnZXR4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9sZ2V0eGF0dHIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWQ3YzQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9sZ2V0eGF0dHIuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGxnZXR4YXR0cikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2xnZXR4YXR0cgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChsZ2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2xpbmthdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9saW5rYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjc0OWViCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9saW5rYXQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGxpbmthdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2xpbmthdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChsaW5rYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2xpc3Rlbi5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9saXN0ZW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTVjYWRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9saXN0ZW4uUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGxpc3RlbikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2xpc3RlbgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChsaXN0ZW4pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2xpc3R4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9saXN0eGF0dHIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGIwZjJiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9saXN0eGF0dHIuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGxpc3R4YXR0cikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2xpc3R4YXR0cgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChsaXN0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2xsaXN0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbGxpc3R4YXR0ci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNDkxMTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2xsaXN0eGF0dHIuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGxsaXN0eGF0dHIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9sbGlzdHhhdHRyCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGxsaXN0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9scmVtb3ZleGF0dHIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjRlNGQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9scmVtb3ZleGF0dHIuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGxyZW1vdmV4YXR0cikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2xyZW1vdmV4YXR0cgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChscmVtb3ZleGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2xzZWVrLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2xzZWVrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM5MmQ3MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbHNlZWsuUwpAQCAtMCwwICsxLDI4IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGxzZWVrKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfbHNlZWsKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobHNlZWspCisKKyAgICAuZ2xvYmwgbHNlZWs2NAorICAgIC5lcXUgbHNlZWs2NCwgbHNlZWsKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbHNldHhhdHRyLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2xzZXR4YXR0ci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNjFlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2xzZXR4YXR0ci5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkobHNldHhhdHRyKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfbHNldHhhdHRyCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGxzZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWFkdmlzZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tYWR2aXNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhmMzgzMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWFkdmlzZS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkobWFkdmlzZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX21hZHZpc2UKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobWFkdmlzZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWluY29yZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9taW5jb3JlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1YzliMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWluY29yZS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkobWluY29yZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX21pbmNvcmUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobWluY29yZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWtkaXJhdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9ta2RpcmF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjZGZkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWtkaXJhdC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkobWtkaXJhdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX21rZGlyYXQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobWtkaXJhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWtub2RhdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9ta25vZGF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0M2U0OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWtub2RhdC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkobWtub2RhdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX21rbm9kYXQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobWtub2RhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWxvY2suUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWxvY2suUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODFmMTJiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tbG9jay5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkobWxvY2spCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9tbG9jaworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChtbG9jaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWxvY2thbGwuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWxvY2thbGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTE1OGY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tbG9ja2FsbC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkobWxvY2thbGwpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9tbG9ja2FsbAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChtbG9ja2FsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbW1hcC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tbWFwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkzMjcxYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbW1hcC5TCkBAIC0wLDAgKzEsMjggQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkobW1hcCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX21tYXAKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobW1hcCkKKworICAgIC5nbG9ibCBtbWFwNjQKKyAgICAuZXF1IG1tYXA2NCwgbW1hcApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tb3VudC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tb3VudC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYzc1NDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21vdW50LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShtb3VudCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX21vdW50CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKG1vdW50KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tcHJvdGVjdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tcHJvdGVjdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NTU0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21wcm90ZWN0LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShtcHJvdGVjdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX21wcm90ZWN0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKG1wcm90ZWN0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tcmVtYXAuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbXJlbWFwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3ZjFkZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbXJlbWFwLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShtcmVtYXApCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9tcmVtYXAKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobXJlbWFwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tc3luYy5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tc3luYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZTMxYzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21zeW5jLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShtc3luYykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX21zeW5jCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKG1zeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tdW5sb2NrLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL211bmxvY2suUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGI5MzBhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tdW5sb2NrLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShtdW5sb2NrKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfbXVubG9jaworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChtdW5sb2NrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tdW5sb2NrYWxsLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL211bmxvY2thbGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmViNWUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tdW5sb2NrYWxsLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShtdW5sb2NrYWxsKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfbXVubG9ja2FsbAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChtdW5sb2NrYWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tdW5tYXAuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbXVubWFwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QwYzA1YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbXVubWFwLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShtdW5tYXApCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9tdW5tYXAKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobXVubWFwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9uYW5vc2xlZXAuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbmFub3NsZWVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRhZjI1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbmFub3NsZWVwLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShuYW5vc2xlZXApCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9uYW5vc2xlZXAKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobmFub3NsZWVwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9wZXJzb25hbGl0eS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9wZXJzb25hbGl0eS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMTJjOTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShwZXJzb25hbGl0eSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3BlcnNvbmFsaXR5CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHBlcnNvbmFsaXR5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9waXBlMi5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9waXBlMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMDhhNDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3BpcGUyLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShwaXBlMikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3BpcGUyCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHBpcGUyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9wcmN0bC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9wcmN0bC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYmI3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3ByY3RsLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShwcmN0bCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3ByY3RsCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHByY3RsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9wcmVhZDY0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3ByZWFkNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGUwNjEyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9wcmVhZDY0LlMKQEAgLTAsMCArMSwyOCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShwcmVhZDY0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfcHJlYWQ2NAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChwcmVhZDY0KQorCisgICAgLmdsb2JsIHByZWFkCisgICAgLmVxdSBwcmVhZCwgcHJlYWQ2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9wcmxpbWl0NjQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcHJsaW1pdDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYwYmExZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcHJsaW1pdDY0LlMKQEAgLTAsMCArMSwyOCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShwcmxpbWl0NjQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9wcmxpbWl0NjQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQocHJsaW1pdDY0KQorCisgICAgLmdsb2JsIHBybGltaXQKKyAgICAuZXF1IHBybGltaXQsIHBybGltaXQ2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9wd3JpdGU2NC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9wd3JpdGU2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNGY4ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3B3cml0ZTY0LlMKQEAgLTAsMCArMSwyOCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShwd3JpdGU2NCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3B3cml0ZTY0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHB3cml0ZTY0KQorCisgICAgLmdsb2JsIHB3cml0ZQorICAgIC5lcXUgcHdyaXRlLCBwd3JpdGU2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWFkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3JlYWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGQzOWRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWFkLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShyZWFkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfcmVhZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChyZWFkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWFkYWhlYWQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVhZGFoZWFkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU1MTFkOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVhZGFoZWFkLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShyZWFkYWhlYWQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9yZWFkYWhlYWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQocmVhZGFoZWFkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWFkbGlua2F0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3JlYWRsaW5rYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzNhOTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWFkbGlua2F0LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShyZWFkbGlua2F0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfcmVhZGxpbmthdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChyZWFkbGlua2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWFkdi5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWFkdi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYTgwMGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3JlYWR2LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShyZWFkdikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3JlYWR2CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHJlYWR2KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWN2ZnJvbS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWN2ZnJvbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOWI1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3JlY3Zmcm9tLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShyZWN2ZnJvbSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3JlY3Zmcm9tCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHJlY3Zmcm9tKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWN2bW1zZy5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWN2bW1zZy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNzI1MGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3JlY3ZtbXNnLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShyZWN2bW1zZykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3JlY3ZtbXNnCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHJlY3ZtbXNnKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWN2bXNnLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3JlY3Ztc2cuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Nzc4OTlkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWN2bXNnLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShyZWN2bXNnKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfcmVjdm1zZworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChyZWN2bXNnKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZW1vdmV4YXR0ci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZDhhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShyZW1vdmV4YXR0cikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3JlbW92ZXhhdHRyCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHJlbW92ZXhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZW5hbWVhdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZW5hbWVhdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YjkzMzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3JlbmFtZWF0LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShyZW5hbWVhdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3JlbmFtZWF0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHJlbmFtZWF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2UyNjc1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzY2hlZF9nZXRfcHJpb3JpdHlfbWF4KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzY2hlZF9nZXRfcHJpb3JpdHlfbWF4KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTdmNTIzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzY2hlZF9nZXRfcHJpb3JpdHlfbWluKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzY2hlZF9nZXRfcHJpb3JpdHlfbWluKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YmI0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzY2hlZF9nZXRwYXJhbSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NjaGVkX2dldHBhcmFtCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNjaGVkX2dldHBhcmFtKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI0ZmEyMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzY2hlZF9nZXRzY2hlZHVsZXIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2NoZWRfZ2V0c2NoZWR1bGVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAxOTU1NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzY2hlZF9ycl9nZXRfaW50ZXJ2YWwpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2NoZWRfcnJfZ2V0X2ludGVydmFsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MjA5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzY2hlZF9zZXRhZmZpbml0eSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NjaGVkX3NldGFmZmluaXR5CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNjaGVkX3NldGFmZmluaXR5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzN2IxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzY2hlZF9zZXRwYXJhbSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NjaGVkX3NldHBhcmFtCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNjaGVkX3NldHBhcmFtKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE0YzZjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzY2hlZF9zZXRzY2hlZHVsZXIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2NoZWRfc2V0c2NoZWR1bGVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF95aWVsZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF95aWVsZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkODZlYTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzY2hlZF95aWVsZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NjaGVkX3lpZWxkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNjaGVkX3lpZWxkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZW5kZmlsZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZW5kZmlsZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMzAyNDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NlbmRmaWxlLlMKQEAgLTAsMCArMSwyOCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZW5kZmlsZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NlbmRmaWxlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNlbmRmaWxlKQorCisgICAgLmdsb2JsIHNlbmRmaWxlNjQKKyAgICAuZXF1IHNlbmRmaWxlNjQsIHNlbmRmaWxlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NlbmRtbXNnLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NlbmRtbXNnLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE4ZDg1NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2VuZG1tc2cuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNlbmRtbXNnKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2VuZG1tc2cKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2VuZG1tc2cpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NlbmRtc2cuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2VuZG1zZy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOWRjZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NlbmRtc2cuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNlbmRtc2cpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zZW5kbXNnCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNlbmRtc2cpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NlbmR0by5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZW5kdG8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGVmYzA5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZW5kdG8uUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNlbmR0bykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NlbmR0bworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzZW5kdG8pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldGZzZ2lkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldGZzZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxYmQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0ZnNnaWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldGZzZ2lkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2V0ZnNnaWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2V0ZnNnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldGZzdWlkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldGZzdWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI1NGIxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0ZnN1aWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldGZzdWlkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2V0ZnN1aWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2V0ZnN1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldGdpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjZhNmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRnaWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldGdpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldGdpZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzZXRnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldGdyb3Vwcy5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRncm91cHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDY0OWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRncm91cHMuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldGdyb3VwcykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldGdyb3VwcworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzZXRncm91cHMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldGl0aW1lci5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRpdGltZXIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzY0NTczCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRpdGltZXIuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldGl0aW1lcikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldGl0aW1lcgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzZXRpdGltZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldG5zLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldG5zLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2MTc4ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0bnMuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldG5zKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2V0bnMKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2V0bnMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHBnaWQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0cGdpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzM2Y3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHBnaWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldHBnaWQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zZXRwZ2lkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNldHBnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHByaW9yaXR5LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHByaW9yaXR5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4YTJmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0cHJpb3JpdHkuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldHByaW9yaXR5KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2V0cHJpb3JpdHkKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2V0cHJpb3JpdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHJlZ2lkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHJlZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyYjRmZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0cmVnaWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldHJlZ2lkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2V0cmVnaWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2V0cmVnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHJlc2dpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRyZXNnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGIyOTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRyZXNnaWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldHJlc2dpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldHJlc2dpZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzZXRyZXNnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHJlc3VpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRyZXN1aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDFhYzVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRyZXN1aWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldHJlc3VpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldHJlc3VpZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzZXRyZXN1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHJldWlkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHJldWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzMjAzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0cmV1aWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldHJldWlkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2V0cmV1aWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2V0cmV1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHJsaW1pdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRybGltaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTVlODBlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRybGltaXQuUwpAQCAtMCwwICsxLDI4IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldHJsaW1pdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldHJsaW1pdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzZXRybGltaXQpCisKKyAgICAuZ2xvYmwgc2V0cmxpbWl0NjQKKyAgICAuZXF1IHNldHJsaW1pdDY0LCBzZXRybGltaXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0c2lkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHNpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkODcyZDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHNpZC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2V0c2lkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2V0c2lkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNldHNpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0c29ja29wdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRzb2Nrb3B0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJmYzczNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0c29ja29wdC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2V0c29ja29wdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldHNvY2tvcHQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2V0c29ja29wdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMWFjZmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2V0dGltZW9mZGF5KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2V0dGltZW9mZGF5CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNldHRpbWVvZmRheSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0dWlkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHVpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZDM5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHVpZC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2V0dWlkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2V0dWlkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNldHVpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0eGF0dHIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTFiODdhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXR4YXR0ci5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2V0eGF0dHIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zZXR4YXR0cgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2h1dGRvd24uUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2h1dGRvd24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjU0Mjg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zaHV0ZG93bi5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2h1dGRvd24pCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zaHV0ZG93bgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzaHV0ZG93bikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2lnYWx0c3RhY2suUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2lnYWx0c3RhY2suUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mjc3OGMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zaWdhbHRzdGFjay5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2lnYWx0c3RhY2spCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zaWdhbHRzdGFjaworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzaWdhbHRzdGFjaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc29ja2V0cGFpci5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zb2NrZXRwYWlyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiZjdhOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc29ja2V0cGFpci5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc29ja2V0cGFpcikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NvY2tldHBhaXIKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc29ja2V0cGFpcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc3BsaWNlLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NwbGljZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNzQ1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NwbGljZS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc3BsaWNlKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc3BsaWNlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNwbGljZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc3RhdGZzNjQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc3RhdGZzNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDM1MWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zdGF0ZnM2NC5TCkBAIC0wLDAgKzEsMjggQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc3RhdGZzNjQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zdGF0ZnMKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc3RhdGZzNjQpCisKKyAgICAuZ2xvYmwgc3RhdGZzCisgICAgLmVxdSBzdGF0ZnMsIHN0YXRmczY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3N3YXBvZmYuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc3dhcG9mZi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMDA0OGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3N3YXBvZmYuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHN3YXBvZmYpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zd2Fwb2ZmCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHN3YXBvZmYpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3N3YXBvbi5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zd2Fwb24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGY2ZmYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zd2Fwb24uUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHN3YXBvbikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3N3YXBvbgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzd2Fwb24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3N5bWxpbmthdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zeW1saW5rYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTJiOGUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zeW1saW5rYXQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHN5bWxpbmthdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3N5bWxpbmthdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzeW1saW5rYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3N5bmMuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc3luYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OTdjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3N5bmMuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHN5bmMpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zeW5jCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHN5bmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3N5c2luZm8uUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc3lzaW5mby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NGUxNTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3N5c2luZm8uUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHN5c2luZm8pCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zeXNpbmZvCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHN5c2luZm8pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3RlZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90ZWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWNmODRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90ZWUuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHRlZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3RlZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORCh0ZWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3Rna2lsbC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90Z2tpbGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzdmNzkyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90Z2tpbGwuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHRna2lsbCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3Rna2lsbAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORCh0Z2tpbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1M2ExNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHRpbWVyZmRfY3JlYXRlKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfdGltZXJmZF9jcmVhdGUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQodGltZXJmZF9jcmVhdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmQ2ODMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHRpbWVyZmRfZ2V0dGltZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3RpbWVyZmRfZ2V0dGltZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORCh0aW1lcmZkX2dldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDYyOTBlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHRpbWVyZmRfc2V0dGltZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3RpbWVyZmRfc2V0dGltZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORCh0aW1lcmZkX3NldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3RpbWVzLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3RpbWVzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3ZjY0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdGltZXMuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHRpbWVzKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfdGltZXMKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQodGltZXMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3RydW5jYXRlLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3RydW5jYXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIzYjdlYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdHJ1bmNhdGUuUwpAQCAtMCwwICsxLDI4IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHRydW5jYXRlKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfdHJ1bmNhdGUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQodHJ1bmNhdGUpCisKKyAgICAuZ2xvYmwgdHJ1bmNhdGU2NAorICAgIC5lcXUgdHJ1bmNhdGU2NCwgdHJ1bmNhdGUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdW1hc2suUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdW1hc2suUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzQ5MDMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy91bWFzay5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkodW1hc2spCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl91bWFzaworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORCh1bWFzaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdW1vdW50Mi5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy91bW91bnQyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5YWQxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdW1vdW50Mi5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkodW1vdW50MikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3Vtb3VudDIKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQodW1vdW50MikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdW5hbWUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdW5hbWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjE1N2RhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy91bmFtZS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkodW5hbWUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl91bmFtZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORCh1bmFtZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdW5saW5rYXQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdW5saW5rYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjExNjc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy91bmxpbmthdC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkodW5saW5rYXQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl91bmxpbmthdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORCh1bmxpbmthdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdW5zaGFyZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy91bnNoYXJlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM4MmZlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdW5zaGFyZS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkodW5zaGFyZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3Vuc2hhcmUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQodW5zaGFyZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdXRpbWVuc2F0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3V0aW1lbnNhdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZGE5MzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3V0aW1lbnNhdC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkodXRpbWVuc2F0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfdXRpbWVuc2F0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHV0aW1lbnNhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdm1zcGxpY2UuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdm1zcGxpY2UuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmNhZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy92bXNwbGljZS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkodm1zcGxpY2UpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl92bXNwbGljZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORCh2bXNwbGljZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvd2FpdDQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvd2FpdDQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWMzOTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy93YWl0NC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkod2FpdDQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl93YWl0NAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORCh3YWl0NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvd3JpdGUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvd3JpdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjliMTllCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy93cml0ZS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkod3JpdGUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl93cml0ZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORCh3cml0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvd3JpdGV2LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3dyaXRldi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMDNkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3dyaXRldi5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkod3JpdGV2KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfd3JpdGV2CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHdyaXRldikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYXRvbS9hdG9tLm1rIGIvbGliYy9hcmNoLXg4Ni9hdG9tL2F0b20ubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YyOGZiMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvYXRvbS9hdG9tLm1rCkBAIC0wLDAgKzEsMzIgQEAKK2xpYmNfYmlvbmljX3NyY19maWxlc194ODYgKz0gXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItYnplcm8tYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLW1lbWNoci1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItbWVtcmNoci1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItbWVtc2V0LWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1zdHJjaHItYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXN0cmxlbi1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItc3Rybmxlbi1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItc3RycmNoci1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItd2NzY2hyLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi13Y3NyY2hyLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi13Y3NsZW4tYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXdjc2NtcC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLWJjb3B5LWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtbWVtY21wLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtbWVtY3B5LWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtbWVtbW92ZS1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmNhdC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmNtcC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmNweS1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmxjYXQtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJsY3B5LWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RybmNhdC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cm5jbXAtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJuY3B5LWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtd2NzY2F0LWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtd2NzY3B5LWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtd21lbWNtcC1hdG9tLlMKKworbGliY19iaW9uaWNfc3JjX2ZpbGVzX3g4NiArPSBcCisgICAgYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHBjcHktc2xtLlMgXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItc3RwbmNweS1zbG0uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9jYWNoZS5oIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyM2JiMWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL2NhY2hlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxMCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworLyogVmFsdWVzIGFyZSBvcHRpbWl6ZWQgZm9yIEF0b20gKi8KKyNkZWZpbmUgU0hBUkVEX0NBQ0hFX1NJWkUJKDUxMioxMDI0KQkJCS8qIEF0b20gTDIgQ2FjaGUgKi8KKyNkZWZpbmUgREFUQV9DQUNIRV9TSVpFCQkoMjQqMTAyNCkJCQkvKiBBdG9tIEwxIERhdGEgQ2FjaGUgKi8KKworI2RlZmluZSBTSEFSRURfQ0FDSEVfU0laRV9IQUxGCShTSEFSRURfQ0FDSEVfU0laRSAvIDIpCisjZGVmaW5lIERBVEFfQ0FDSEVfU0laRV9IQUxGCShEQVRBX0NBQ0hFX1NJWkUgLyAyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1iemVyby1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItYnplcm8tYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLWJ6ZXJvLWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLWJ6ZXJvLWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1tZW1jaHItYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLW1lbWNoci1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItbWVtY2hyLWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLW1lbWNoci1hdG9tLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItbWVtcmNoci1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItbWVtcmNoci1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItbWVtcmNoci1hdG9tLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1tZW1yY2hyLWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLW1lbXNldC1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItbWVtc2V0LWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDk2M2ExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLW1lbXNldC1hdG9tLlMKQEAgLTAsMCArMSw5MjAgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTAsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorCisjaWZuZGVmIEwKKyMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorI2VuZGlmCisKKyNpZm5kZWYgQUxJR04KKyMgZGVmaW5lIEFMSUdOKG4pCS5wMmFsaWduIG4KKyNlbmRpZgorCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJCQkuY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2VuZHByb2MKKyMgZGVmaW5lIGNmaV9lbmRwcm9jCQkJLmNmaV9lbmRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVsX29mZnNldAorIyBkZWZpbmUgY2ZpX3JlbF9vZmZzZXQocmVnLCBvZmYpCS5jZmlfcmVsX29mZnNldCByZWcsIG9mZgorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3Jlc3RvcmUKKyMgZGVmaW5lIGNmaV9yZXN0b3JlKHJlZykJCS5jZmlfcmVzdG9yZSByZWcKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9hZGp1c3RfY2ZhX29mZnNldAorIyBkZWZpbmUgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0KG9mZikJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIEVOVFJZCisjIGRlZmluZSBFTlRSWShuYW1lKQkJCVwKKwkudHlwZSBuYW1lLCAgQGZ1bmN0aW9uOyAJXAorCS5nbG9ibCBuYW1lOwkJCVwKKwkucDJhbGlnbiA0OwkJCVwKK25hbWU6CQkJCQlcCisJY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgRU5ECisjIGRlZmluZSBFTkQobmFtZSkJCQlcCisJY2ZpX2VuZHByb2M7CQkJXAorCS5zaXplIG5hbWUsIC4tbmFtZQorI2VuZGlmCisKKyNkZWZpbmUgQ0ZJX1BVU0goUkVHKQkJCQkJCVwKKyAgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICg0KTsJCQkJCVwKKyAgY2ZpX3JlbF9vZmZzZXQgKFJFRywgMCkKKworI2RlZmluZSBDRklfUE9QKFJFRykJCQkJCQlcCisgIGNmaV9hZGp1c3RfY2ZhX29mZnNldCAoLTQpOwkJCQkJXAorICBjZmlfcmVzdG9yZSAoUkVHKQorCisjZGVmaW5lIFBVU0goUkVHKQlwdXNobCBSRUc7IENGSV9QVVNIIChSRUcpCisjZGVmaW5lIFBPUChSRUcpCXBvcGwgUkVHOyBDRklfUE9QIChSRUcpCisKKyNpZmRlZiBVU0VfQVNfQlpFUk8KKyMgZGVmaW5lIERFU1QJCVBBUk1TCisjIGRlZmluZSBMRU4JCURFU1QrNAorIyBkZWZpbmUgU0VUUlROVkFMCisjZWxzZQorIyBkZWZpbmUgREVTVAkJUEFSTVMKKyMgZGVmaW5lIENIUgkJREVTVCs0CisjIGRlZmluZSBMRU4JCUNIUis0CisjIGRlZmluZSBTRVRSVE5WQUwJbW92bCBERVNUKCVlc3ApLCAlZWF4CisjZW5kaWYKKworI2lmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisjIGRlZmluZSBFTlRSQU5DRQlQVVNIICglZWJ4KTsKKyMgZGVmaW5lIFJFVFVSTl9FTkQJUE9QICglZWJ4KTsgcmV0CisjIGRlZmluZSBSRVRVUk4JCVJFVFVSTl9FTkQ7IENGSV9QVVNIICglZWJ4KQorIyBkZWZpbmUgUEFSTVMJCTgJCS8qIFByZXNlcnZlIEVCWC4gICovCisjIGRlZmluZSBKTVBUQkwoSSwgQikJSSAtIEIKKworLyogTG9hZCBhbiBlbnRyeSBpbiBhIGp1bXAgdGFibGUgaW50byBFQlggYW5kIGJyYW5jaCB0byBpdC4gIFRBQkxFIGlzIGEKKyAgIGp1bXAgdGFibGUgd2l0aCByZWxhdGl2ZSBvZmZzZXRzLiAgICovCisjIGRlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFKQkJCQlcCisgICAgLyogV2UgZmlyc3QgbG9hZCBQQyBpbnRvIEVCWC4gICovCQkJCVwKKyAgICBjYWxsCV9feDg2LmdldF9wY190aHVuay5ieDsJCQkJXAorICAgIC8qIEdldCB0aGUgYWRkcmVzcyBvZiB0aGUganVtcCB0YWJsZS4gICovCQkJXAorICAgIGFkZAkJJChUQUJMRSAtIC4pLCAlZWJ4OwkJCQlcCisgICAgLyogR2V0IHRoZSBlbnRyeSBhbmQgY29udmVydCB0aGUgcmVsYXRpdmUgb2Zmc2V0IHRvIHRoZQlcCisgICAgICAgYWJzb2x1dGUgYWRkcmVzcy4gICovCQkJCQlcCisgICAgYWRkCQkoJWVieCwlZWN4LDQpLCAlZWJ4OwkJCQlcCisgICAgYWRkCQklZWN4LCAlZWR4OwkJCQkJXAorICAgIC8qIFdlIGxvYWRlZCB0aGUganVtcCB0YWJsZSBhbmQgYWRqdWVzdGVkIEVEWC4gR28uICAqLwlcCisgICAgam1wCQkqJWVieAorCisJLnNlY3Rpb24JLmdudS5saW5rb25jZS50Ll9feDg2LmdldF9wY190aHVuay5ieCwiYXgiLEBwcm9nYml0cworCS5nbG9ibAlfX3g4Ni5nZXRfcGNfdGh1bmsuYngKKwkuaGlkZGVuCV9feDg2LmdldF9wY190aHVuay5ieAorCUFMSUdOICg0KQorCS50eXBlCV9feDg2LmdldF9wY190aHVuay5ieCxAZnVuY3Rpb24KK19feDg2LmdldF9wY190aHVuay5ieDoKKwltb3ZsCSglZXNwKSwgJWVieAorCXJldAorI2Vsc2UKKyMgZGVmaW5lIEVOVFJBTkNFCisjIGRlZmluZSBSRVRVUk5fRU5ECXJldAorIyBkZWZpbmUgUkVUVVJOCQlSRVRVUk5fRU5ECisjIGRlZmluZSBQQVJNUwkJNAorIyBkZWZpbmUgSk1QVEJMKEksIEIpCUkKKworLyogQnJhbmNoIHRvIGFuIGVudHJ5IGluIGEganVtcCB0YWJsZS4gIFRBQkxFIGlzIGEganVtcCB0YWJsZSB3aXRoCisgICBhYnNvbHV0ZSBvZmZzZXRzLiAgKi8KKyMgZGVmaW5lIEJSQU5DSF9UT19KTVBUQkxfRU5UUlkoVEFCTEUpCQkJCVwKKyAgICBhZGQJCSVlY3gsICVlZHg7CQkJCQlcCisgICAgam1wCQkqVEFCTEUoLCVlY3gsNCkKKyNlbmRpZgorCisjaWZuZGVmIE1FTVNFVAorIyBkZWZpbmUgTUVNU0VUIG1lbXNldAorI2VuZGlmCisKKwkuc2VjdGlvbiAudGV4dC5zc2UyLCJheCIsQHByb2diaXRzCisJQUxJR04gKDQpCitFTlRSWSAoTUVNU0VUKQorCUVOVFJBTkNFCisKKwltb3ZsCUxFTiglZXNwKSwgJWVjeAorI2lmZGVmIFVTRV9BU19CWkVSTworCXhvcgklZWF4LCAlZWF4CisjZWxzZQorCW1vdnpibAlDSFIoJWVzcCksICVlYXgKKwltb3ZiCSVhbCwgJWFoCisJLyogRmlsbCB0aGUgd2hvbGUgRUFYIHdpdGggcGF0dGVybi4gICovCisJbW92bAklZWF4LCAlZWR4CisJc2hsCSQxNiwgJWVheAorCW9yCSVlZHgsICVlYXgKKyNlbmRpZgorCW1vdmwJREVTVCglZXNwKSwgJWVkeAorCWNtcAkkMzIsICVlY3gKKwlqYWUJTCgzMmJ5dGVzb3Jtb3JlKQorCitMKHdyaXRlX2xlc3MzMmJ5dGVzKToKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlX2xlc3NfMzJieXRlcykpCisKKworCS5wdXNoc2VjdGlvbiAucm9kYXRhLnNzZTIsImEiLEBwcm9nYml0cworCUFMSUdOICgyKQorTCh0YWJsZV9sZXNzXzMyYnl0ZXMpOgorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzBieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8xYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMmJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzNieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV80Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfNWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzZieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV83Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfOGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzlieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8xMGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzExYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMTJieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8xM2J5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzE0Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMTVieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8xNmJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzE3Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMThieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8xOWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzIwYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMjFieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8yMmJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzIzYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMjRieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8yNWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzI2Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMjdieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8yOGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzI5Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMzBieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8zMWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5wb3BzZWN0aW9uCisKKwlBTElHTiAoNCkKK0wod3JpdGVfMjhieXRlcyk6CisJbW92bAklZWF4LCAtMjgoJWVkeCkKK0wod3JpdGVfMjRieXRlcyk6CisJbW92bAklZWF4LCAtMjQoJWVkeCkKK0wod3JpdGVfMjBieXRlcyk6CisJbW92bAklZWF4LCAtMjAoJWVkeCkKK0wod3JpdGVfMTZieXRlcyk6CisJbW92bAklZWF4LCAtMTYoJWVkeCkKK0wod3JpdGVfMTJieXRlcyk6CisJbW92bAklZWF4LCAtMTIoJWVkeCkKK0wod3JpdGVfOGJ5dGVzKToKKwltb3ZsCSVlYXgsIC04KCVlZHgpCitMKHdyaXRlXzRieXRlcyk6CisJbW92bAklZWF4LCAtNCglZWR4KQorTCh3cml0ZV8wYnl0ZXMpOgorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKHdyaXRlXzI5Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTI5KCVlZHgpCitMKHdyaXRlXzI1Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTI1KCVlZHgpCitMKHdyaXRlXzIxYnl0ZXMpOgorCW1vdmwJJWVheCwgLTIxKCVlZHgpCitMKHdyaXRlXzE3Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTE3KCVlZHgpCitMKHdyaXRlXzEzYnl0ZXMpOgorCW1vdmwJJWVheCwgLTEzKCVlZHgpCitMKHdyaXRlXzlieXRlcyk6CisJbW92bAklZWF4LCAtOSglZWR4KQorTCh3cml0ZV81Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTUoJWVkeCkKK0wod3JpdGVfMWJ5dGVzKToKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTCh3cml0ZV8zMGJ5dGVzKToKKwltb3ZsCSVlYXgsIC0zMCglZWR4KQorTCh3cml0ZV8yNmJ5dGVzKToKKwltb3ZsCSVlYXgsIC0yNiglZWR4KQorTCh3cml0ZV8yMmJ5dGVzKToKKwltb3ZsCSVlYXgsIC0yMiglZWR4KQorTCh3cml0ZV8xOGJ5dGVzKToKKwltb3ZsCSVlYXgsIC0xOCglZWR4KQorTCh3cml0ZV8xNGJ5dGVzKToKKwltb3ZsCSVlYXgsIC0xNCglZWR4KQorTCh3cml0ZV8xMGJ5dGVzKToKKwltb3ZsCSVlYXgsIC0xMCglZWR4KQorTCh3cml0ZV82Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTYoJWVkeCkKK0wod3JpdGVfMmJ5dGVzKToKKwltb3Z3CSVheCwgLTIoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTCh3cml0ZV8zMWJ5dGVzKToKKwltb3ZsCSVlYXgsIC0zMSglZWR4KQorTCh3cml0ZV8yN2J5dGVzKToKKwltb3ZsCSVlYXgsIC0yNyglZWR4KQorTCh3cml0ZV8yM2J5dGVzKToKKwltb3ZsCSVlYXgsIC0yMyglZWR4KQorTCh3cml0ZV8xOWJ5dGVzKToKKwltb3ZsCSVlYXgsIC0xOSglZWR4KQorTCh3cml0ZV8xNWJ5dGVzKToKKwltb3ZsCSVlYXgsIC0xNSglZWR4KQorTCh3cml0ZV8xMWJ5dGVzKToKKwltb3ZsCSVlYXgsIC0xMSglZWR4KQorTCh3cml0ZV83Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTcoJWVkeCkKK0wod3JpdGVfM2J5dGVzKToKKwltb3Z3CSVheCwgLTMoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorLyogRUNYID4gMzIgYW5kIEVEWCBpcyA0IGJ5dGUgYWxpZ25lZC4gICovCitMKDMyYnl0ZXNvcm1vcmUpOgorCS8qIEZpbGwgeG1tMCB3aXRoIHRoZSBwYXR0ZXJuLiAgKi8KKyNpZmRlZiBVU0VfQVNfQlpFUk8KKwlweG9yCSV4bW0wLCAleG1tMAorI2Vsc2UKKwltb3ZkCSVlYXgsICV4bW0wCisJcHNodWZkCSQwLCAleG1tMCwgJXhtbTAKKyNlbmRpZgorCXRlc3RsCSQweGYsICVlZHgKKwlqeglMKGFsaWduZWRfMTYpCisvKiBFQ1ggPiAzMiBhbmQgRURYIGlzIG5vdCAxNiBieXRlIGFsaWduZWQuICAqLworTChub3RfYWxpZ25lZF8xNik6CisJbW92ZHF1CSV4bW0wLCAoJWVkeCkKKwltb3ZsCSVlZHgsICVlYXgKKwlhbmQJJC0xNiwgJWVkeAorCWFkZAkkMTYsICVlZHgKKwlzdWIJJWVkeCwgJWVheAorCWFkZAklZWF4LCAlZWN4CisJbW92ZAkleG1tMCwgJWVheAorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTYpOgorCWNtcAkkMTI4LCAlZWN4CisJamFlCUwoMTI4Ynl0ZXNvcm1vcmUpCisKK0woYWxpZ25lZF8xNl9sZXNzMTI4Ynl0ZXMpOgorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCisJQUxJR04gKDQpCitMKDEyOGJ5dGVzb3Jtb3JlKToKKyNpZmRlZiBTSEFSRURfQ0FDSEVfU0laRQorCVBVU0ggKCVlYngpCisJbW92CSRTSEFSRURfQ0FDSEVfU0laRSwgJWVieAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwljYWxsCV9feDg2LmdldF9wY190aHVuay5ieAorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJbW92CV9feDg2X3NoYXJlZF9jYWNoZV9zaXplQEdPVE9GRiglZWJ4KSwgJWVieAorIyBlbHNlCisJUFVTSCAoJWVieCkKKwltb3YJX194ODZfc2hhcmVkX2NhY2hlX3NpemUsICVlYngKKyMgZW5kaWYKKyNlbmRpZgorCWNtcAklZWJ4LCAlZWN4CisJamFlCUwoMTI4Ynl0ZXNvcm1vcmVfbnRfc3RhcnQpCisKKworI2lmZGVmIERBVEFfQ0FDSEVfU0laRQorCVBPUCAoJWVieCkKKyMgZGVmaW5lIFJFU1RPUkVfRUJYX1NUQVRFIENGSV9QVVNIICglZWJ4KQorCWNtcAkkREFUQV9DQUNIRV9TSVpFLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorIyAgZGVmaW5lIFJFU1RPUkVfRUJYX1NUQVRFCisJY2FsbAlfX3g4Ni5nZXRfcGNfdGh1bmsuYngKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwlQT1AgKCVlYngpCisjICBkZWZpbmUgUkVTVE9SRV9FQlhfU1RBVEUgQ0ZJX1BVU0ggKCVlYngpCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZSwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisKKwlqYWUJTCgxMjhieXRlc19MMl9ub3JtYWwpCisJc3VibAkkMTI4LCAlZWN4CitMKDEyOGJ5dGVzb3Jtb3JlX25vcm1hbCk6CisJc3ViCSQxMjgsICVlY3gKKwltb3ZkcWEJJXhtbTAsICglZWR4KQorCW1vdmRxYQkleG1tMCwgMHgxMCglZWR4KQorCW1vdmRxYQkleG1tMCwgMHgyMCglZWR4KQorCW1vdmRxYQkleG1tMCwgMHgzMCglZWR4KQorCW1vdmRxYQkleG1tMCwgMHg0MCglZWR4KQorCW1vdmRxYQkleG1tMCwgMHg1MCglZWR4KQorCW1vdmRxYQkleG1tMCwgMHg2MCglZWR4KQorCW1vdmRxYQkleG1tMCwgMHg3MCglZWR4KQorCWxlYQkxMjgoJWVkeCksICVlZHgKKwlqYglMKDEyOGJ5dGVzbGVzc19ub3JtYWwpCisKKworCXN1YgkkMTI4LCAlZWN4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4MTAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4MjAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4MzAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NDAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NTAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NjAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NzAoJWVkeCkKKwlsZWEJMTI4KCVlZHgpLCAlZWR4CisJamFlCUwoMTI4Ynl0ZXNvcm1vcmVfbm9ybWFsKQorCitMKDEyOGJ5dGVzbGVzc19ub3JtYWwpOgorCWFkZAkkMTI4LCAlZWN4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV8xNl8xMjhieXRlcykpCisKKwlBTElHTiAoNCkKK0woMTI4Ynl0ZXNfTDJfbm9ybWFsKToKKwlwcmVmZXRjaHQwCTB4MzgwKCVlZHgpCisJcHJlZmV0Y2h0MAkweDNjMCglZWR4KQorCXN1YgkkMTI4LCAlZWN4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4MTAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4MjAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4MzAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NDAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NTAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NjAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NzAoJWVkeCkKKwlhZGQJJDEyOCwgJWVkeAorCWNtcAkkMTI4LCAlZWN4CisJamFlCUwoMTI4Ynl0ZXNfTDJfbm9ybWFsKQorCitMKDEyOGJ5dGVzbGVzc19MMl9ub3JtYWwpOgorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCisJUkVTVE9SRV9FQlhfU1RBVEUKK0woMTI4Ynl0ZXNvcm1vcmVfbnRfc3RhcnQpOgorCXN1YgklZWJ4LCAlZWN4CisJbW92CSVlYngsICVlYXgKKwlhbmQJJDB4N2YsICVlYXgKKwlhZGQJJWVheCwgJWVjeAorCW1vdmQJJXhtbTAsICVlYXgKKwlBTElHTiAoNCkKK0woMTI4Ynl0ZXNvcm1vcmVfc2hhcmVkX2NhY2hlX2xvb3ApOgorCXByZWZldGNodDAJMHgzYzAoJWVkeCkKKwlwcmVmZXRjaHQwCTB4MzgwKCVlZHgpCisJc3ViCSQweDgwLCAlZWJ4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4MTAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4MjAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4MzAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NDAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NTAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NjAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NzAoJWVkeCkKKwlhZGQJJDB4ODAsICVlZHgKKwljbXAJJDB4ODAsICVlYngKKwlqYWUJTCgxMjhieXRlc29ybW9yZV9zaGFyZWRfY2FjaGVfbG9vcCkKKwljbXAJJDB4ODAsICVlY3gKKwlqYglMKHNoYXJlZF9jYWNoZV9sb29wX2VuZCkKKwlBTElHTiAoNCkKK0woMTI4Ynl0ZXNvcm1vcmVfbnQpOgorCXN1YgkkMHg4MCwgJWVjeAorCW1vdm50ZHEJJXhtbTAsICglZWR4KQorCW1vdm50ZHEJJXhtbTAsIDB4MTAoJWVkeCkKKwltb3ZudGRxCSV4bW0wLCAweDIwKCVlZHgpCisJbW92bnRkcQkleG1tMCwgMHgzMCglZWR4KQorCW1vdm50ZHEJJXhtbTAsIDB4NDAoJWVkeCkKKwltb3ZudGRxCSV4bW0wLCAweDUwKCVlZHgpCisJbW92bnRkcQkleG1tMCwgMHg2MCglZWR4KQorCW1vdm50ZHEJJXhtbTAsIDB4NzAoJWVkeCkKKwlhZGQJJDB4ODAsICVlZHgKKwljbXAJJDB4ODAsICVlY3gKKwlqYWUJTCgxMjhieXRlc29ybW9yZV9udCkKKwlzZmVuY2UKK0woc2hhcmVkX2NhY2hlX2xvb3BfZW5kKToKKyNpZiBkZWZpbmVkIERBVEFfQ0FDSEVfU0laRSB8fCAhKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlQT1AgKCVlYngpCisjZW5kaWYKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKworCisJLnB1c2hzZWN0aW9uIC5yb2RhdGEuc3NlMiwiYSIsQHByb2diaXRzCisJQUxJR04gKDIpCitMKHRhYmxlXzE2XzEyOGJ5dGVzKToKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMThieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNThieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOThieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTAwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTAzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTA2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTA5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExMGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTEyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExM2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTE1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExNmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTE4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExOWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTIxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyMmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTI0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyNWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTI3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkucG9wc2VjdGlvbgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTEyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExMiglZWR4KQorTChhbGlnbmVkXzE2Xzk2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTk2KCVlZHgpCitMKGFsaWduZWRfMTZfODBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODAoJWVkeCkKK0woYWxpZ25lZF8xNl82NGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02NCglZWR4KQorTChhbGlnbmVkXzE2XzQ4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQ4KCVlZHgpCitMKGFsaWduZWRfMTZfMzJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzIoJWVkeCkKK0woYWxpZ25lZF8xNl8xNmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xNiglZWR4KQorTChhbGlnbmVkXzE2XzBieXRlcyk6CisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMTNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTEzKCVlZHgpCitMKGFsaWduZWRfMTZfOTdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtOTcoJWVkeCkKK0woYWxpZ25lZF8xNl84MWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC04MSglZWR4KQorTChhbGlnbmVkXzE2XzY1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTY1KCVlZHgpCitMKGFsaWduZWRfMTZfNDlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNDkoJWVkeCkKK0woYWxpZ25lZF8xNl8zM2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0zMyglZWR4KQorTChhbGlnbmVkXzE2XzE3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTE3KCVlZHgpCitMKGFsaWduZWRfMTZfMWJ5dGVzKToKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzExNGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTQoJWVkeCkKK0woYWxpZ25lZF8xNl85OGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05OCglZWR4KQorTChhbGlnbmVkXzE2XzgyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTgyKCVlZHgpCitMKGFsaWduZWRfMTZfNjZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjYoJWVkeCkKK0woYWxpZ25lZF8xNl81MGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01MCglZWR4KQorTChhbGlnbmVkXzE2XzM0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTM0KCVlZHgpCitMKGFsaWduZWRfMTZfMThieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTgoJWVkeCkKK0woYWxpZ25lZF8xNl8yYnl0ZXMpOgorCW1vdncJJWF4LCAtMiglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTE1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExNSglZWR4KQorTChhbGlnbmVkXzE2Xzk5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTk5KCVlZHgpCitMKGFsaWduZWRfMTZfODNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODMoJWVkeCkKK0woYWxpZ25lZF8xNl82N2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02NyglZWR4KQorTChhbGlnbmVkXzE2XzUxYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTUxKCVlZHgpCitMKGFsaWduZWRfMTZfMzVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzUoJWVkeCkKK0woYWxpZ25lZF8xNl8xOWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xOSglZWR4KQorTChhbGlnbmVkXzE2XzNieXRlcyk6CisJbW92dwklYXgsIC0zKCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMTZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTE2KCVlZHgpCitMKGFsaWduZWRfMTZfMTAwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwMCglZWR4KQorTChhbGlnbmVkXzE2Xzg0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTg0KCVlZHgpCitMKGFsaWduZWRfMTZfNjhieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjgoJWVkeCkKK0woYWxpZ25lZF8xNl81MmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01MiglZWR4KQorTChhbGlnbmVkXzE2XzM2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTM2KCVlZHgpCitMKGFsaWduZWRfMTZfMjBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjAoJWVkeCkKK0woYWxpZ25lZF8xNl80Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTQoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzExN2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTcoJWVkeCkKK0woYWxpZ25lZF8xNl8xMDFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTAxKCVlZHgpCitMKGFsaWduZWRfMTZfODVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODUoJWVkeCkKK0woYWxpZ25lZF8xNl82OWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02OSglZWR4KQorTChhbGlnbmVkXzE2XzUzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTUzKCVlZHgpCitMKGFsaWduZWRfMTZfMzdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzcoJWVkeCkKK0woYWxpZ25lZF8xNl8yMWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0yMSglZWR4KQorTChhbGlnbmVkXzE2XzVieXRlcyk6CisJbW92bAklZWF4LCAtNSglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTE4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExOCglZWR4KQorTChhbGlnbmVkXzE2XzEwMmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMDIoJWVkeCkKK0woYWxpZ25lZF8xNl84NmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC04NiglZWR4KQorTChhbGlnbmVkXzE2XzcwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTcwKCVlZHgpCitMKGFsaWduZWRfMTZfNTRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNTQoJWVkeCkKK0woYWxpZ25lZF8xNl8zOGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0zOCglZWR4KQorTChhbGlnbmVkXzE2XzIyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTIyKCVlZHgpCitMKGFsaWduZWRfMTZfNmJ5dGVzKToKKwltb3ZsCSVlYXgsIC02KCVlZHgpCisJbW92dwklYXgsIC0yKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMTlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTE5KCVlZHgpCitMKGFsaWduZWRfMTZfMTAzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwMyglZWR4KQorTChhbGlnbmVkXzE2Xzg3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTg3KCVlZHgpCitMKGFsaWduZWRfMTZfNzFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzEoJWVkeCkKK0woYWxpZ25lZF8xNl81NWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01NSglZWR4KQorTChhbGlnbmVkXzE2XzM5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTM5KCVlZHgpCitMKGFsaWduZWRfMTZfMjNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjMoJWVkeCkKK0woYWxpZ25lZF8xNl83Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTcoJWVkeCkKKwltb3Z3CSVheCwgLTMoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzEyMGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMjAoJWVkeCkKK0woYWxpZ25lZF8xNl8xMDRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTA0KCVlZHgpCitMKGFsaWduZWRfMTZfODhieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODgoJWVkeCkKK0woYWxpZ25lZF8xNl83MmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC03MiglZWR4KQorTChhbGlnbmVkXzE2XzU2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTU2KCVlZHgpCitMKGFsaWduZWRfMTZfNDBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNDAoJWVkeCkKK0woYWxpZ25lZF8xNl8yNGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0yNCglZWR4KQorTChhbGlnbmVkXzE2XzhieXRlcyk6CisJbW92cQkleG1tMCwgLTgoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzEyMWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMjEoJWVkeCkKK0woYWxpZ25lZF8xNl8xMDVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTA1KCVlZHgpCitMKGFsaWduZWRfMTZfODlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODkoJWVkeCkKK0woYWxpZ25lZF8xNl83M2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC03MyglZWR4KQorTChhbGlnbmVkXzE2XzU3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTU3KCVlZHgpCitMKGFsaWduZWRfMTZfNDFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNDEoJWVkeCkKK0woYWxpZ25lZF8xNl8yNWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0yNSglZWR4KQorTChhbGlnbmVkXzE2XzlieXRlcyk6CisJbW92cQkleG1tMCwgLTkoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzEyMmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMjIoJWVkeCkKK0woYWxpZ25lZF8xNl8xMDZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTA2KCVlZHgpCitMKGFsaWduZWRfMTZfOTBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtOTAoJWVkeCkKK0woYWxpZ25lZF8xNl83NGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC03NCglZWR4KQorTChhbGlnbmVkXzE2XzU4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTU4KCVlZHgpCitMKGFsaWduZWRfMTZfNDJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNDIoJWVkeCkKK0woYWxpZ25lZF8xNl8yNmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0yNiglZWR4KQorTChhbGlnbmVkXzE2XzEwYnl0ZXMpOgorCW1vdnEJJXhtbTAsIC0xMCglZWR4KQorCW1vdncJJWF4LCAtMiglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTIzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEyMyglZWR4KQorTChhbGlnbmVkXzE2XzEwN2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMDcoJWVkeCkKK0woYWxpZ25lZF8xNl85MWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05MSglZWR4KQorTChhbGlnbmVkXzE2Xzc1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTc1KCVlZHgpCitMKGFsaWduZWRfMTZfNTlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNTkoJWVkeCkKK0woYWxpZ25lZF8xNl80M2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC00MyglZWR4KQorTChhbGlnbmVkXzE2XzI3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTI3KCVlZHgpCitMKGFsaWduZWRfMTZfMTFieXRlcyk6CisJbW92cQkleG1tMCwgLTExKCVlZHgpCisJbW92dwklYXgsIC0zKCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMjRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTI0KCVlZHgpCitMKGFsaWduZWRfMTZfMTA4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwOCglZWR4KQorTChhbGlnbmVkXzE2XzkyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTkyKCVlZHgpCitMKGFsaWduZWRfMTZfNzZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzYoJWVkeCkKK0woYWxpZ25lZF8xNl82MGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02MCglZWR4KQorTChhbGlnbmVkXzE2XzQ0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQ0KCVlZHgpCitMKGFsaWduZWRfMTZfMjhieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjgoJWVkeCkKK0woYWxpZ25lZF8xNl8xMmJ5dGVzKToKKwltb3ZxCSV4bW0wLCAtMTIoJWVkeCkKKwltb3ZsCSVlYXgsIC00KCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMjVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTI1KCVlZHgpCitMKGFsaWduZWRfMTZfMTA5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwOSglZWR4KQorTChhbGlnbmVkXzE2XzkzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTkzKCVlZHgpCitMKGFsaWduZWRfMTZfNzdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzcoJWVkeCkKK0woYWxpZ25lZF8xNl82MWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02MSglZWR4KQorTChhbGlnbmVkXzE2XzQ1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQ1KCVlZHgpCitMKGFsaWduZWRfMTZfMjlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjkoJWVkeCkKK0woYWxpZ25lZF8xNl8xM2J5dGVzKToKKwltb3ZxCSV4bW0wLCAtMTMoJWVkeCkKKwltb3ZsCSVlYXgsIC01KCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMjZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTI2KCVlZHgpCitMKGFsaWduZWRfMTZfMTEwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExMCglZWR4KQorTChhbGlnbmVkXzE2Xzk0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTk0KCVlZHgpCitMKGFsaWduZWRfMTZfNzhieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzgoJWVkeCkKK0woYWxpZ25lZF8xNl82MmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02MiglZWR4KQorTChhbGlnbmVkXzE2XzQ2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQ2KCVlZHgpCitMKGFsaWduZWRfMTZfMzBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzAoJWVkeCkKK0woYWxpZ25lZF8xNl8xNGJ5dGVzKToKKwltb3ZxCSV4bW0wLCAtMTQoJWVkeCkKKwltb3ZsCSVlYXgsIC02KCVlZHgpCisJbW92dwklYXgsIC0yKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMjdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTI3KCVlZHgpCitMKGFsaWduZWRfMTZfMTExYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExMSglZWR4KQorTChhbGlnbmVkXzE2Xzk1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTk1KCVlZHgpCitMKGFsaWduZWRfMTZfNzlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzkoJWVkeCkKK0woYWxpZ25lZF8xNl82M2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02MyglZWR4KQorTChhbGlnbmVkXzE2XzQ3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQ3KCVlZHgpCitMKGFsaWduZWRfMTZfMzFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzEoJWVkeCkKK0woYWxpZ25lZF8xNl8xNWJ5dGVzKToKKwltb3ZxCSV4bW0wLCAtMTUoJWVkeCkKKwltb3ZsCSVlYXgsIC03KCVlZHgpCisJbW92dwklYXgsIC0zKCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOX0VORAorCitFTkQgKE1FTVNFVCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItc3RyY2hyLWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1zdHJjaHItYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXN0cmNoci1hdG9tLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1zdHJjaHItYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXN0cmxlbi1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItc3RybGVuLWF0b20uUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1zdHJsZW4tYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItc3RybGVuLWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1zdHJubGVuLWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1zdHJubGVuLWF0b20uUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1zdHJubGVuLWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXN0cm5sZW4tYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXN0cnJjaHItYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXN0cnJjaHItYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXN0cnJjaHItYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItc3RycmNoci1hdG9tLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItd2NzY2hyLWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi13Y3NjaHItYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXdjc2Noci1hdG9tLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi13Y3NjaHItYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXdjc2NtcC1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItd2NzY21wLWF0b20uUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi13Y3NjbXAtYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItd2NzY21wLWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi13Y3NsZW4tYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXdjc2xlbi1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItd2NzbGVuLWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXdjc2xlbi1hdG9tLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItd2NzcmNoci1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItd2NzcmNoci1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItd2NzcmNoci1hdG9tLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi13Y3NyY2hyLWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtYmNvcHktYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1iY29weS1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLWJjb3B5LWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1iY29weS1hdG9tLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbWNtcC1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLW1lbWNtcC1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbWNtcC1hdG9tLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtbWVtY21wLWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1tZW1jcHktYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1tZW1jcHktYXRvbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNWVjMmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLW1lbWNweS1hdG9tLlMKQEAgLTAsMCArMSwzMTk4IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKworI2lmbmRlZiBNRU1DUFkKKyMgZGVmaW5lIE1FTUNQWQltZW1jcHkKKyNlbmRpZgorCisjaWZuZGVmIEwKKyMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3N0YXJ0cHJvYworIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkuY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2VuZHByb2MKKyMgZGVmaW5lIGNmaV9lbmRwcm9jCS5jZmlfZW5kcHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKKyMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZXN0b3JlCisjIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCS5jZmlfcmVzdG9yZSByZWcKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9hZGp1c3RfY2ZhX29mZnNldAorIyBkZWZpbmUgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0KG9mZikJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIEVOVFJZCisjIGRlZmluZSBFTlRSWShuYW1lKQkJXAorCS50eXBlIG5hbWUsICBAZnVuY3Rpb247CQlcCisJLmdsb2JsIG5hbWU7CQlcCisJLnAyYWxpZ24gNDsJCVwKK25hbWU6CQlcCisJY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgRU5ECisjIGRlZmluZSBFTkQobmFtZSkJCVwKKwljZmlfZW5kcHJvYzsJCVwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyNlbmRpZgorCisjaWZkZWYgVVNFX0FTX0JDT1BZCisjIGRlZmluZSBTUkMJCVBBUk1TCisjIGRlZmluZSBERVNUCQlTUkMrNAorIyBkZWZpbmUgTEVOCQlERVNUKzQKKyNlbHNlCisjIGRlZmluZSBERVNUCQlQQVJNUworIyBkZWZpbmUgU1JDCQlERVNUKzQKKyMgZGVmaW5lIExFTgkJU1JDKzQKKyNlbmRpZgorCisjZGVmaW5lIENGSV9QVVNIKFJFRykJCVwKKyAgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICg0KTsJCVwKKyAgY2ZpX3JlbF9vZmZzZXQgKFJFRywgMCkKKworI2RlZmluZSBDRklfUE9QKFJFRykJCVwKKyAgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7CQlcCisgIGNmaV9yZXN0b3JlIChSRUcpCisKKyNkZWZpbmUgUFVTSChSRUcpCXB1c2hsIFJFRzsgQ0ZJX1BVU0ggKFJFRykKKyNkZWZpbmUgUE9QKFJFRykJcG9wbCBSRUc7IENGSV9QT1AgKFJFRykKKworI2lmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisjIGRlZmluZSBQQVJNUwkJOAkJLyogUHJlc2VydmUgRUJYLiAgKi8KKyMgZGVmaW5lIEVOVFJBTkNFCVBVU0ggKCVlYngpOworIyBkZWZpbmUgUkVUVVJOX0VORAlQT1AgKCVlYngpOyByZXQKKyMgZGVmaW5lIFJFVFVSTgkJUkVUVVJOX0VORDsgQ0ZJX1BVU0ggKCVlYngpCisjIGRlZmluZSBKTVBUQkwoSSwgQikJSSAtIEIKKworIyBkZWZpbmUgU0VUVVBfUElDX1JFRyh4KQljYWxsCV9feDg2LmdldF9wY190aHVuay54CisKKy8qIExvYWQgYW4gZW50cnkgaW4gYSBqdW1wIHRhYmxlIGludG8gRUJYIGFuZCBicmFuY2ggdG8gaXQuICBUQUJMRSBpcyBhCisJanVtcCB0YWJsZSB3aXRoIHJlbGF0aXZlIG9mZnNldHMuICBJTkRFWCBpcyBhIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZQorCWluZGV4IGludG8gdGhlIGp1bXAgdGFibGUuICAgU0NBTEUgaXMgdGhlIHNjYWxlIG9mIElOREVYLiAqLworCisjIGRlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFLCBJTkRFWCwgU0NBTEUpCQlcCisgICAgLyogV2UgZmlyc3QgbG9hZCBQQyBpbnRvIEVCWC4gICovCQlcCisJU0VUVVBfUElDX1JFRyhieCk7CQlcCisgICAgLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBqdW1wIHRhYmxlLiAgKi8JCVwKKwlhZGRsCSQoVEFCTEUgLSAuKSwgJWVieDsJCVwKKyAgICAvKiBHZXQgdGhlIGVudHJ5IGFuZCBjb252ZXJ0IHRoZSByZWxhdGl2ZSBvZmZzZXQgdG8gdGhlCQlcCisJYWJzb2x1dGUJYWRkcmVzcy4gICovCQlcCisJYWRkbAkoJWVieCwgSU5ERVgsIFNDQUxFKSwgJWVieDsJCVwKKyAgICAvKiBXZSBsb2FkZWQgdGhlIGp1bXAgdGFibGUuICBHby4gICovCQlcCisJam1wCSolZWJ4CisjZWxzZQorCisjIGRlZmluZSBQQVJNUwkJNAorIyBkZWZpbmUgRU5UUkFOQ0UKKyMgZGVmaW5lIFJFVFVSTl9FTkQJcmV0CisjIGRlZmluZSBSRVRVUk4JCVJFVFVSTl9FTkQKKyMgZGVmaW5lIEpNUFRCTChJLCBCKQlJCisKKy8qIEJyYW5jaCB0byBhbiBlbnRyeSBpbiBhIGp1bXAgdGFibGUuICBUQUJMRSBpcyBhIGp1bXAgdGFibGUgd2l0aAorCWFic29sdXRlIG9mZnNldHMuICBJTkRFWCBpcyBhIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBpbmRleCBpbnRvIHRoZQorCWp1bXAgdGFibGUuICBTQ0FMRSBpcyB0aGUgc2NhbGUgb2YgSU5ERVguICovCisKKyMgZGVmaW5lIEJSQU5DSF9UT19KTVBUQkxfRU5UUlkoVEFCTEUsIElOREVYLCBTQ0FMRSkJCVwKKwlqbXAJKlRBQkxFKCwgSU5ERVgsIFNDQUxFKQorI2VuZGlmCisKKwkuc2VjdGlvbiAudGV4dC5zc3NlMywiYXgiLEBwcm9nYml0cworRU5UUlkgKE1FTUNQWSkKKwlFTlRSQU5DRQorCW1vdmwJTEVOKCVlc3ApLCAlZWN4CisJbW92bAlTUkMoJWVzcCksICVlYXgKKwltb3ZsCURFU1QoJWVzcCksICVlZHgKKworI2lmZGVmIFVTRV9BU19NRU1NT1ZFCisJY21wCSVlYXgsICVlZHgKKwlqYglMKGNvcHlfZm9yd2FyZCkKKwlqZQlMKGZ3ZF93cml0ZV8wYnl0ZXMpCisJY21wCSQzMiwgJWVjeAorCWphZQlMKG1lbW1vdmVfYndkKQorCWptcAlMKGJrX3dyaXRlX2xlc3MzMmJ5dGVzXzIpCisKKwkucDJhbGlnbiA0CitMKG1lbW1vdmVfYndkKToKKwlhZGQJJWVjeCwgJWVheAorCWNtcAklZWF4LCAlZWR4CisJbW92bAlTUkMoJWVzcCksICVlYXgKKwlqYglMKGNvcHlfYmFja3dhcmQpCisKK0woY29weV9mb3J3YXJkKToKKyNlbmRpZgorCWNtcAkkNDgsICVlY3gKKwlqYWUJTCg0OGJ5dGVzb3Jtb3JlKQorCitMKGZ3ZF93cml0ZV9sZXNzMzJieXRlcyk6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJY21wCSVkbCwgJWFsCisJamIJTChia193cml0ZSkKKyNlbmRpZgorCWFkZAklZWN4LCAlZWR4CisJYWRkCSVlY3gsICVlYXgKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwkucDJhbGlnbiA0CitMKGJrX3dyaXRlKToKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzQ4X2J5dGVzX2J3ZCksICVlY3gsIDQpCisjZW5kaWYKKworCS5wMmFsaWduIDQKK0woNDhieXRlc29ybW9yZSk6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92bHBkCSglZWF4KSwgJXhtbTAKKwltb3ZscGQJOCglZWF4KSwgJXhtbTEKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmxwZAkleG1tMSwgOCglZWR4KQorI2Vsc2UKKwltb3ZkcXUJKCVlYXgpLCAleG1tMAorI2VuZGlmCisJUFVTSCAoJWVkaSkKKwltb3ZsCSVlZHgsICVlZGkKKwlhbmQJJC0xNiwgJWVkeAorCWFkZAkkMTYsICVlZHgKKwlzdWIJJWVkeCwgJWVkaQorCWFkZAklZWRpLCAlZWN4CisJc3ViCSVlZGksICVlYXgKKworI2lmZGVmIFNIQVJFRF9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJFNIQVJFRF9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9zaGFyZWRfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X3NoYXJlZF9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCisJbW92CSVlYXgsICVlZGkKKwlqYWUJTChsYXJnZV9wYWdlKQorCWFuZAkkMHhmLCAlZWRpCisJanoJTChzaGxfMCkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHNobF90YWJsZSksICVlZGksIDQpCisKKwkucDJhbGlnbiA0CitMKHNobF8wKToKKyNpZmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorCXhvcgklZWRpLCAlZWRpCisJY21wCSQxMjcsICVlY3gKKwlqYQlMKHNobF8wX2dvYmJsZSkKKwlsZWEJLTMyKCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKHNobF8wX2xvb3ApOgorCW1vdmRxYQkoJWVheCwgJWVkaSksICV4bW0wCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMQorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJJXhtbTAsICglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMSwgMTYoJWVkeCwgJWVkaSkKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlqYglMKHNobF8wX2VuZCkKKworCW1vdmRxYQkoJWVheCwgJWVkaSksICV4bW0wCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMQorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJJXhtbTAsICglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMSwgMTYoJWVkeCwgJWVkaSkKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlqYglMKHNobF8wX2VuZCkKKworCW1vdmRxYQkoJWVheCwgJWVkaSksICV4bW0wCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMQorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJJXhtbTAsICglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMSwgMTYoJWVkeCwgJWVkaSkKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlqYglMKHNobF8wX2VuZCkKKworCW1vdmRxYQkoJWVheCwgJWVkaSksICV4bW0wCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMQorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJJXhtbTAsICglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMSwgMTYoJWVkeCwgJWVkaSkKKwlsZWEJMzIoJWVkaSksICVlZGkKKworTChzaGxfMF9lbmQpOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlZGksICVlZHgKKwlhZGQJJWVkaSwgJWVheAorCVBPUCAoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaGxfMF9nb2JibGUpOgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKwlQT1AJKCVlZGkpCisJbGVhCS0xMjgoJWVjeCksICVlY3gKKwlqYWUJTChzaGxfMF9nb2JibGVfbWVtX2xvb3ApCisKKwkucDJhbGlnbiA0CitMKHNobF8wX2dvYmJsZV9jYWNoZV9sb29wKToKKwltb3ZkcWEJKCVlYXgpLCAleG1tMAorCW1vdmRxYQkweDEwKCVlYXgpLCAleG1tMQorCW1vdmRxYQkweDIwKCVlYXgpLCAleG1tMgorCW1vdmRxYQkweDMwKCVlYXgpLCAleG1tMworCW1vdmRxYQkweDQwKCVlYXgpLCAleG1tNAorCW1vdmRxYQkweDUwKCVlYXgpLCAleG1tNQorCW1vdmRxYQkweDYwKCVlYXgpLCAleG1tNgorCW1vdmRxYQkweDcwKCVlYXgpLCAleG1tNworCWxlYQkweDgwKCVlYXgpLCAlZWF4CisJc3ViCSQxMjgsICVlY3gKKwltb3ZkcWEJJXhtbTAsICglZWR4KQorCW1vdmRxYQkleG1tMSwgMHgxMCglZWR4KQorCW1vdmRxYQkleG1tMiwgMHgyMCglZWR4KQorCW1vdmRxYQkleG1tMywgMHgzMCglZWR4KQorCW1vdmRxYQkleG1tNCwgMHg0MCglZWR4KQorCW1vdmRxYQkleG1tNSwgMHg1MCglZWR4KQorCW1vdmRxYQkleG1tNiwgMHg2MCglZWR4KQorCW1vdmRxYQkleG1tNywgMHg3MCglZWR4KQorCWxlYQkweDgwKCVlZHgpLCAlZWR4CisKKwlqYWUJTChzaGxfMF9nb2JibGVfY2FjaGVfbG9vcCkKKwljbXAJJC0weDQwLCAlZWN4CisJbGVhCTB4ODAoJWVjeCksICVlY3gKKwlqbAlMKHNobF8wX2NhY2hlX2xlc3NfNjRieXRlcykKKworCW1vdmRxYQkoJWVheCksICV4bW0wCisJc3ViCSQweDQwLCAlZWN4CisJbW92ZHFhCTB4MTAoJWVheCksICV4bW0xCisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwltb3ZkcWEJJXhtbTEsIDB4MTAoJWVkeCkKKwltb3ZkcWEJMHgyMCglZWF4KSwgJXhtbTAKKwltb3ZkcWEJMHgzMCglZWF4KSwgJXhtbTEKKwlhZGQJJDB4NDAsICVlYXgKKwltb3ZkcWEJJXhtbTAsIDB4MjAoJWVkeCkKKwltb3ZkcWEJJXhtbTEsIDB4MzAoJWVkeCkKKwlhZGQJJDB4NDAsICVlZHgKKworTChzaGxfMF9jYWNoZV9sZXNzXzY0Ynl0ZXMpOgorCWNtcAkkMHgyMCwgJWVjeAorCWpiCUwoc2hsXzBfY2FjaGVfbGVzc18zMmJ5dGVzKQorCW1vdmRxYQkoJWVheCksICV4bW0wCisJc3ViCSQweDIwLCAlZWN4CisJbW92ZHFhCTB4MTAoJWVheCksICV4bW0xCisJYWRkCSQweDIwLCAlZWF4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwltb3ZkcWEJJXhtbTEsIDB4MTAoJWVkeCkKKwlhZGQJJDB4MjAsICVlZHgKKworTChzaGxfMF9jYWNoZV9sZXNzXzMyYnl0ZXMpOgorCWNtcAkkMHgxMCwgJWVjeAorCWpiCUwoc2hsXzBfY2FjaGVfbGVzc18xNmJ5dGVzKQorCXN1YgkkMHgxMCwgJWVjeAorCW1vdmRxYQkoJWVheCksICV4bW0wCisJYWRkCSQweDEwLCAlZWF4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwlhZGQJJDB4MTAsICVlZHgKKworTChzaGxfMF9jYWNoZV9sZXNzXzE2Ynl0ZXMpOgorCWFkZAklZWN4LCAlZWR4CisJYWRkCSVlY3gsICVlYXgKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCS5wMmFsaWduIDQKK0woc2hsXzBfZ29iYmxlX21lbV9sb29wKToKKwlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDI4MCglZWF4KQorCXByZWZldGNodDAgMHgxYzAoJWVkeCkKKworCW1vdmRxYQkoJWVheCksICV4bW0wCisJbW92ZHFhCTB4MTAoJWVheCksICV4bW0xCisJbW92ZHFhCTB4MjAoJWVheCksICV4bW0yCisJbW92ZHFhCTB4MzAoJWVheCksICV4bW0zCisJbW92ZHFhCTB4NDAoJWVheCksICV4bW00CisJbW92ZHFhCTB4NTAoJWVheCksICV4bW01CisJbW92ZHFhCTB4NjAoJWVheCksICV4bW02CisJbW92ZHFhCTB4NzAoJWVheCksICV4bW03CisJbGVhCTB4ODAoJWVheCksICVlYXgKKwlzdWIJJDB4ODAsICVlY3gKKwltb3ZkcWEJJXhtbTAsICglZWR4KQorCW1vdmRxYQkleG1tMSwgMHgxMCglZWR4KQorCW1vdmRxYQkleG1tMiwgMHgyMCglZWR4KQorCW1vdmRxYQkleG1tMywgMHgzMCglZWR4KQorCW1vdmRxYQkleG1tNCwgMHg0MCglZWR4KQorCW1vdmRxYQkleG1tNSwgMHg1MCglZWR4KQorCW1vdmRxYQkleG1tNiwgMHg2MCglZWR4KQorCW1vdmRxYQkleG1tNywgMHg3MCglZWR4KQorCWxlYQkweDgwKCVlZHgpLCAlZWR4CisKKwlqYWUJTChzaGxfMF9nb2JibGVfbWVtX2xvb3ApCisJY21wCSQtMHg0MCwgJWVjeAorCWxlYQkweDgwKCVlY3gpLCAlZWN4CisJamwJTChzaGxfMF9tZW1fbGVzc182NGJ5dGVzKQorCisJbW92ZHFhCSglZWF4KSwgJXhtbTAKKwlzdWIJJDB4NDAsICVlY3gKKwltb3ZkcWEJMHgxMCglZWF4KSwgJXhtbTEKKworCW1vdmRxYQkleG1tMCwgKCVlZHgpCisJbW92ZHFhCSV4bW0xLCAweDEwKCVlZHgpCisKKwltb3ZkcWEJMHgyMCglZWF4KSwgJXhtbTAKKwltb3ZkcWEJMHgzMCglZWF4KSwgJXhtbTEKKwlhZGQJJDB4NDAsICVlYXgKKworCW1vdmRxYQkleG1tMCwgMHgyMCglZWR4KQorCW1vdmRxYQkleG1tMSwgMHgzMCglZWR4KQorCWFkZAkkMHg0MCwgJWVkeAorCitMKHNobF8wX21lbV9sZXNzXzY0Ynl0ZXMpOgorCWNtcAkkMHgyMCwgJWVjeAorCWpiCUwoc2hsXzBfbWVtX2xlc3NfMzJieXRlcykKKwltb3ZkcWEJKCVlYXgpLCAleG1tMAorCXN1YgkkMHgyMCwgJWVjeAorCW1vdmRxYQkweDEwKCVlYXgpLCAleG1tMQorCWFkZAkkMHgyMCwgJWVheAorCW1vdmRxYQkleG1tMCwgKCVlZHgpCisJbW92ZHFhCSV4bW0xLCAweDEwKCVlZHgpCisJYWRkCSQweDIwLCAlZWR4CisKK0woc2hsXzBfbWVtX2xlc3NfMzJieXRlcyk6CisJY21wCSQweDEwLCAlZWN4CisJamIJTChzaGxfMF9tZW1fbGVzc18xNmJ5dGVzKQorCXN1YgkkMHgxMCwgJWVjeAorCW1vdmRxYQkoJWVheCksICV4bW0wCisJYWRkCSQweDEwLCAlZWF4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwlhZGQJJDB4MTAsICVlZHgKKworTChzaGxfMF9tZW1fbGVzc18xNmJ5dGVzKToKKwlhZGQJJWVjeCwgJWVkeAorCWFkZAklZWN4LCAlZWF4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbiksICVlY3gsIDQpCisKKwkucDJhbGlnbiA0CitMKHNobF8xKToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZhcHMJLTEoJWVheCksICV4bW0xCisjZWxzZQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92YXBzCS0xKCVlYXgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisJamIgTChzaF8xX25vX3ByZWZldGNoKQorCisJbGVhCS02NCglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChTaGwxTG9vcFN0YXJ0KToKKwlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDFjMCglZWR4KQorCW1vdmFwcwkxNSglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMzEoJWVheCksICV4bW0zCisJbW92YXBzCTQ3KCVlYXgpLCAleG1tNAorCW1vdmFwcwk2MyglZWF4KSwgJXhtbTUKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkMSwgJXhtbTQsICV4bW01CisJcGFsaWducgkkMSwgJXhtbTMsICV4bW00CisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCXBhbGlnbnIJJDEsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWF4KSwgJWVheAorCXBhbGlnbnIJJDEsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJc3ViCSQ2NCwgJWVjeAorCWphCUwoU2hsMUxvb3BTdGFydCkKKworTChTaGwxTG9vcExlYXZlKToKKwlhZGQJJDMyLCAlZWN4CisJamxlCUwoc2hsX2VuZF8wKQorCisJbW92YXBzCTE1KCVlYXgpLCAleG1tMgorCW1vdmFwcwkzMSglZWF4KSwgJXhtbTMKKwlwYWxpZ25yCSQxLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKKwlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKKwlQT1AgKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaF8xX25vX3ByZWZldGNoKToKKwlsZWEJLTMyKCVlY3gpLCAlZWN4CisJbGVhCS0xKCVlYXgpLCAlZWF4CisJeG9yCSVlZGksICVlZGkKKworCS5wMmFsaWduIDQKK0woc2hfMV9ub19wcmVmZXRjaF9sb29wKToKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW00CisJcGFsaWducgkkMSwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMSwgJXhtbTEsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWpiCUwoc2hfMV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKKworCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTEKKwlwYWxpZ25yCSQxLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxLCAleG1tNCwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamFlCUwoc2hfMV9ub19wcmVmZXRjaF9sb29wKQorCitMKHNoXzFfZW5kX25vX3ByZWZldGNoX2xvb3ApOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlZGksICVlZHgKKwlsZWEJMSglZWRpLCAlZWF4KSwgJWVheAorCVBPUAkoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNobF8yKToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZhcHMJLTIoJWVheCksICV4bW0xCisjZWxzZQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92YXBzCS0yKCVlYXgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisJamIgTChzaF8yX25vX3ByZWZldGNoKQorCisJbGVhCS02NCglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChTaGwyTG9vcFN0YXJ0KToKKwlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDFjMCglZWR4KQorCW1vdmFwcwkxNCglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMzAoJWVheCksICV4bW0zCisJbW92YXBzCTQ2KCVlYXgpLCAleG1tNAorCW1vdmFwcwk2MiglZWF4KSwgJXhtbTUKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkMiwgJXhtbTQsICV4bW01CisJcGFsaWducgkkMiwgJXhtbTMsICV4bW00CisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCXBhbGlnbnIJJDIsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWF4KSwgJWVheAorCXBhbGlnbnIJJDIsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJc3ViCSQ2NCwgJWVjeAorCWphCUwoU2hsMkxvb3BTdGFydCkKKworTChTaGwyTG9vcExlYXZlKToKKwlhZGQJJDMyLCAlZWN4CisJamxlCUwoc2hsX2VuZF8wKQorCisJbW92YXBzCTE0KCVlYXgpLCAleG1tMgorCW1vdmFwcwkzMCglZWF4KSwgJXhtbTMKKwlwYWxpZ25yCSQyLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQyLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKKwlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKKwlQT1AgKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaF8yX25vX3ByZWZldGNoKToKKwlsZWEJLTMyKCVlY3gpLCAlZWN4CisJbGVhCS0yKCVlYXgpLCAlZWF4CisJeG9yCSVlZGksICVlZGkKKworCS5wMmFsaWduIDQKK0woc2hfMl9ub19wcmVmZXRjaF9sb29wKToKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW00CisJcGFsaWducgkkMiwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMiwgJXhtbTEsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWpiCUwoc2hfMl9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKKworCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTEKKwlwYWxpZ25yCSQyLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQyLCAleG1tNCwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamFlCUwoc2hfMl9ub19wcmVmZXRjaF9sb29wKQorCitMKHNoXzJfZW5kX25vX3ByZWZldGNoX2xvb3ApOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlZGksICVlZHgKKwlsZWEJMiglZWRpLCAlZWF4KSwgJWVheAorCVBPUAkoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNobF8zKToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZhcHMJLTMoJWVheCksICV4bW0xCisjZWxzZQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92YXBzCS0zKCVlYXgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisJamIgTChzaF8zX25vX3ByZWZldGNoKQorCisJbGVhCS02NCglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChTaGwzTG9vcFN0YXJ0KToKKwlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDFjMCglZWR4KQorCW1vdmFwcwkxMyglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjkoJWVheCksICV4bW0zCisJbW92YXBzCTQ1KCVlYXgpLCAleG1tNAorCW1vdmFwcwk2MSglZWF4KSwgJXhtbTUKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkMywgJXhtbTQsICV4bW01CisJcGFsaWducgkkMywgJXhtbTMsICV4bW00CisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCXBhbGlnbnIJJDMsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWF4KSwgJWVheAorCXBhbGlnbnIJJDMsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJc3ViCSQ2NCwgJWVjeAorCWphCUwoU2hsM0xvb3BTdGFydCkKKworTChTaGwzTG9vcExlYXZlKToKKwlhZGQJJDMyLCAlZWN4CisJamxlCUwoc2hsX2VuZF8wKQorCisJbW92YXBzCTEzKCVlYXgpLCAleG1tMgorCW1vdmFwcwkyOSglZWF4KSwgJXhtbTMKKwlwYWxpZ25yCSQzLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQzLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKKwlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKKwlQT1AgKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaF8zX25vX3ByZWZldGNoKToKKwlsZWEJLTMyKCVlY3gpLCAlZWN4CisJbGVhCS0zKCVlYXgpLCAlZWF4CisJeG9yCSVlZGksICVlZGkKKworCS5wMmFsaWduIDQKK0woc2hfM19ub19wcmVmZXRjaF9sb29wKToKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW00CisJcGFsaWducgkkMywgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMywgJXhtbTEsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCisJamIJTChzaF8zX2VuZF9ub19wcmVmZXRjaF9sb29wKQorCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tMQorCXBhbGlnbnIJJDMsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDMsICV4bW00LCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKworCWphZQlMKHNoXzNfbm9fcHJlZmV0Y2hfbG9vcCkKKworTChzaF8zX2VuZF9ub19wcmVmZXRjaF9sb29wKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWRpLCAlZWR4CisJbGVhCTMoJWVkaSwgJWVheCksICVlYXgKKwlQT1AJKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaGxfNCk6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92YXBzCS00KCVlYXgpLCAleG1tMQorI2Vsc2UKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmFwcwktNCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCWpiIEwoc2hfNF9ub19wcmVmZXRjaCkKKworCWxlYQktNjQoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woU2hsNExvb3BTdGFydCk6CisJcHJlZmV0Y2h0MCAweDFjMCglZWF4KQorCXByZWZldGNodDAgMHgxYzAoJWVkeCkKKwltb3ZhcHMJMTIoJWVheCksICV4bW0yCisJbW92YXBzCTI4KCVlYXgpLCAleG1tMworCW1vdmFwcwk0NCglZWF4KSwgJXhtbTQKKwltb3ZhcHMJNjAoJWVheCksICV4bW01CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDQsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDQsICV4bW0zLCAleG1tNAorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlwYWxpZ25yCSQ0LCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVheCksICVlYXgKKwlwYWxpZ25yCSQ0LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCXN1YgkkNjQsICVlY3gKKwlqYQlMKFNobDRMb29wU3RhcnQpCisKK0woU2hsNExvb3BMZWF2ZSk6CisJYWRkCSQzMiwgJWVjeAorCWpsZQlMKHNobF9lbmRfMCkKKworCW1vdmFwcwkxMiglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjgoJWVheCksICV4bW0zCisJcGFsaWducgkkNCwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkNCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4CisJbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4CisJUE9QICglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hfNF9ub19wcmVmZXRjaCk6CisJbGVhCS0zMiglZWN4KSwgJWVjeAorCWxlYQktNCglZWF4KSwgJWVheAorCXhvcgklZWRpLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKHNoXzRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tNAorCXBhbGlnbnIJJDQsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDQsICV4bW0xLCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKworCWpiCUwoc2hfNF9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKKworCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTEKKwlwYWxpZ25yCSQ0LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ0LCAleG1tNCwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisKKwlqYWUJTChzaF80X25vX3ByZWZldGNoX2xvb3ApCisKK0woc2hfNF9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVkaSwgJWVkeAorCWxlYQk0KCVlZGksICVlYXgpLCAlZWF4CisJUE9QCSglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hsXzUpOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmFwcwktNSglZWF4KSwgJXhtbTEKKyNlbHNlCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZhcHMJLTUoJWVheCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKwlqYiBMKHNoXzVfbm9fcHJlZmV0Y2gpCisKKwlsZWEJLTY0KCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKFNobDVMb29wU3RhcnQpOgorCXByZWZldGNodDAgMHgxYzAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCisJbW92YXBzCTExKCVlYXgpLCAleG1tMgorCW1vdmFwcwkyNyglZWF4KSwgJXhtbTMKKwltb3ZhcHMJNDMoJWVheCksICV4bW00CisJbW92YXBzCTU5KCVlYXgpLCAleG1tNQorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQ1LCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQ1LCAleG1tMywgJXhtbTQKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJcGFsaWducgkkNSwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlYXgpLCAlZWF4CisJcGFsaWducgkkNSwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlzdWIJJDY0LCAlZWN4CisJamEJTChTaGw1TG9vcFN0YXJ0KQorCitMKFNobDVMb29wTGVhdmUpOgorCWFkZAkkMzIsICVlY3gKKwlqbGUJTChzaGxfZW5kXzApCisKKwltb3ZhcHMJMTEoJWVheCksICV4bW0yCisJbW92YXBzCTI3KCVlYXgpLCAleG1tMworCXBhbGlnbnIJJDUsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDUsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAorCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAorCVBPUCAoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNoXzVfbm9fcHJlZmV0Y2gpOgorCWxlYQktMzIoJWVjeCksICVlY3gKKwlsZWEJLTUoJWVheCksICVlYXgKKwl4b3IJJWVkaSwgJWVkaQorCisJLnAyYWxpZ24gNAorTChzaF81X25vX3ByZWZldGNoX2xvb3ApOgorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTQKKwlwYWxpZ25yCSQ1LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ1LCAleG1tMSwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisKKwlqYglMKHNoXzVfZW5kX25vX3ByZWZldGNoX2xvb3ApCisKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW0xCisJcGFsaWducgkkNSwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkNSwgJXhtbTQsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCisJamFlCUwoc2hfNV9ub19wcmVmZXRjaF9sb29wKQorCitMKHNoXzVfZW5kX25vX3ByZWZldGNoX2xvb3ApOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlZGksICVlZHgKKwlsZWEJNSglZWRpLCAlZWF4KSwgJWVheAorCVBPUAkoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNobF82KToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZhcHMJLTYoJWVheCksICV4bW0xCisjZWxzZQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92YXBzCS02KCVlYXgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisJamIgTChzaF82X25vX3ByZWZldGNoKQorCisJbGVhCS02NCglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChTaGw2TG9vcFN0YXJ0KToKKwlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDFjMCglZWR4KQorCW1vdmFwcwkxMCglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjYoJWVheCksICV4bW0zCisJbW92YXBzCTQyKCVlYXgpLCAleG1tNAorCW1vdmFwcwk1OCglZWF4KSwgJXhtbTUKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkNiwgJXhtbTQsICV4bW01CisJcGFsaWducgkkNiwgJXhtbTMsICV4bW00CisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCXBhbGlnbnIJJDYsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWF4KSwgJWVheAorCXBhbGlnbnIJJDYsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJc3ViCSQ2NCwgJWVjeAorCWphCUwoU2hsNkxvb3BTdGFydCkKKworTChTaGw2TG9vcExlYXZlKToKKwlhZGQJJDMyLCAlZWN4CisJamxlCUwoc2hsX2VuZF8wKQorCisJbW92YXBzCTEwKCVlYXgpLCAleG1tMgorCW1vdmFwcwkyNiglZWF4KSwgJXhtbTMKKwlwYWxpZ25yCSQ2LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ2LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKKwlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKKwlQT1AgKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaF82X25vX3ByZWZldGNoKToKKwlsZWEJLTMyKCVlY3gpLCAlZWN4CisJbGVhCS02KCVlYXgpLCAlZWF4CisJeG9yCSVlZGksICVlZGkKKworCS5wMmFsaWduIDQKK0woc2hfNl9ub19wcmVmZXRjaF9sb29wKToKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW00CisJcGFsaWducgkkNiwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkNiwgJXhtbTEsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCisJamIJTChzaF82X2VuZF9ub19wcmVmZXRjaF9sb29wKQorCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tMQorCXBhbGlnbnIJJDYsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDYsICV4bW00LCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKworCWphZQlMKHNoXzZfbm9fcHJlZmV0Y2hfbG9vcCkKKworTChzaF82X2VuZF9ub19wcmVmZXRjaF9sb29wKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWRpLCAlZWR4CisJbGVhCTYoJWVkaSwgJWVheCksICVlYXgKKwlQT1AJKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaGxfNyk6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92YXBzCS03KCVlYXgpLCAleG1tMQorI2Vsc2UKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmFwcwktNyglZWF4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCWpiIEwoc2hfN19ub19wcmVmZXRjaCkKKworCWxlYQktNjQoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woU2hsN0xvb3BTdGFydCk6CisJcHJlZmV0Y2h0MCAweDFjMCglZWF4KQorCXByZWZldGNodDAgMHgxYzAoJWVkeCkKKwltb3ZhcHMJOSglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjUoJWVheCksICV4bW0zCisJbW92YXBzCTQxKCVlYXgpLCAleG1tNAorCW1vdmFwcwk1NyglZWF4KSwgJXhtbTUKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkNywgJXhtbTQsICV4bW01CisJcGFsaWducgkkNywgJXhtbTMsICV4bW00CisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCXBhbGlnbnIJJDcsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWF4KSwgJWVheAorCXBhbGlnbnIJJDcsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJc3ViCSQ2NCwgJWVjeAorCWphCUwoU2hsN0xvb3BTdGFydCkKKworTChTaGw3TG9vcExlYXZlKToKKwlhZGQJJDMyLCAlZWN4CisJamxlCUwoc2hsX2VuZF8wKQorCisJbW92YXBzCTkoJWVheCksICV4bW0yCisJbW92YXBzCTI1KCVlYXgpLCAleG1tMworCXBhbGlnbnIJJDcsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDcsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAorCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAorCVBPUCAoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNoXzdfbm9fcHJlZmV0Y2gpOgorCWxlYQktMzIoJWVjeCksICVlY3gKKwlsZWEJLTcoJWVheCksICVlYXgKKwl4b3IJJWVkaSwgJWVkaQorCisJLnAyYWxpZ24gNAorTChzaF83X25vX3ByZWZldGNoX2xvb3ApOgorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTQKKwlwYWxpZ25yCSQ3LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ3LCAleG1tMSwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamIJTChzaF83X2VuZF9ub19wcmVmZXRjaF9sb29wKQorCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tMQorCXBhbGlnbnIJJDcsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDcsICV4bW00LCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYWUJTChzaF83X25vX3ByZWZldGNoX2xvb3ApCisKK0woc2hfN19lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVkaSwgJWVkeAorCWxlYQk3KCVlZGksICVlYXgpLCAlZWF4CisJUE9QCSglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hsXzgpOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmFwcwktOCglZWF4KSwgJXhtbTEKKyNlbHNlCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZhcHMJLTgoJWVheCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKwlqYiBMKHNoXzhfbm9fcHJlZmV0Y2gpCisKKwlsZWEJLTY0KCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKFNobDhMb29wU3RhcnQpOgorCXByZWZldGNodDAgMHgxYzAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCisJbW92YXBzCTgoJWVheCksICV4bW0yCisJbW92YXBzCTI0KCVlYXgpLCAleG1tMworCW1vdmFwcwk0MCglZWF4KSwgJXhtbTQKKwltb3ZhcHMJNTYoJWVheCksICV4bW01CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDgsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDgsICV4bW0zLCAleG1tNAorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlwYWxpZ25yCSQ4LCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVheCksICVlYXgKKwlwYWxpZ25yCSQ4LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCXN1YgkkNjQsICVlY3gKKwlqYQlMKFNobDhMb29wU3RhcnQpCisKK0woTG9vcExlYXZlOCk6CisJYWRkCSQzMiwgJWVjeAorCWpsZQlMKHNobF9lbmRfMCkKKworCW1vdmFwcwk4KCVlYXgpLCAleG1tMgorCW1vdmFwcwkyNCglZWF4KSwgJXhtbTMKKwlwYWxpZ25yCSQ4LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ4LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKKwlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKKwlQT1AgKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaF84X25vX3ByZWZldGNoKToKKwlsZWEJLTMyKCVlY3gpLCAlZWN4CisJbGVhCS04KCVlYXgpLCAlZWF4CisJeG9yCSVlZGksICVlZGkKKworCS5wMmFsaWduIDQKK0woc2hfOF9ub19wcmVmZXRjaF9sb29wKToKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW00CisJcGFsaWducgkkOCwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkOCwgJXhtbTEsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWpiCUwoc2hfOF9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKKworCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTEKKwlwYWxpZ25yCSQ4LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ4LCAleG1tNCwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamFlCUwoc2hfOF9ub19wcmVmZXRjaF9sb29wKQorCitMKHNoXzhfZW5kX25vX3ByZWZldGNoX2xvb3ApOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlZGksICVlZHgKKwlsZWEJOCglZWRpLCAlZWF4KSwgJWVheAorCVBPUAkoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNobF85KToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZhcHMJLTkoJWVheCksICV4bW0xCisjZWxzZQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92YXBzCS05KCVlYXgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisJamIgTChzaF85X25vX3ByZWZldGNoKQorCisJbGVhCS02NCglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChTaGw5TG9vcFN0YXJ0KToKKwlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDFjMCglZWR4KQorCW1vdmFwcwk3KCVlYXgpLCAleG1tMgorCW1vdmFwcwkyMyglZWF4KSwgJXhtbTMKKwltb3ZhcHMJMzkoJWVheCksICV4bW00CisJbW92YXBzCTU1KCVlYXgpLCAleG1tNQorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQ5LCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQ5LCAleG1tMywgJXhtbTQKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJcGFsaWducgkkOSwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlYXgpLCAlZWF4CisJcGFsaWducgkkOSwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlzdWIJJDY0LCAlZWN4CisJamEJTChTaGw5TG9vcFN0YXJ0KQorCitMKFNobDlMb29wTGVhdmUpOgorCWFkZAkkMzIsICVlY3gKKwlqbGUJTChzaGxfZW5kXzApCisKKwltb3ZhcHMJNyglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjMoJWVheCksICV4bW0zCisJcGFsaWducgkkOSwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkOSwgJXhtbTEsICV4bW0yCisKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKKwlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKKwlQT1AgKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaF85X25vX3ByZWZldGNoKToKKwlsZWEJLTMyKCVlY3gpLCAlZWN4CisJbGVhCS05KCVlYXgpLCAlZWF4CisJeG9yCSVlZGksICVlZGkKKworCS5wMmFsaWduIDQKK0woc2hfOV9ub19wcmVmZXRjaF9sb29wKToKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW00CisJcGFsaWducgkkOSwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkOSwgJXhtbTEsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWpiCUwoc2hfOV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKKworCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTEKKwlwYWxpZ25yCSQ5LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ5LCAleG1tNCwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamFlCUwoc2hfOV9ub19wcmVmZXRjaF9sb29wKQorCitMKHNoXzlfZW5kX25vX3ByZWZldGNoX2xvb3ApOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlZGksICVlZHgKKwlsZWEJOSglZWRpLCAlZWF4KSwgJWVheAorCVBPUAkoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNobF8xMCk6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92YXBzCS0xMCglZWF4KSwgJXhtbTEKKyNlbHNlCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZhcHMJLTEwKCVlYXgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisJamIgTChzaF8xMF9ub19wcmVmZXRjaCkKKworCWxlYQktNjQoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woU2hsMTBMb29wU3RhcnQpOgorCXByZWZldGNodDAgMHgxYzAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCisJbW92YXBzCTYoJWVheCksICV4bW0yCisJbW92YXBzCTIyKCVlYXgpLCAleG1tMworCW1vdmFwcwkzOCglZWF4KSwgJXhtbTQKKwltb3ZhcHMJNTQoJWVheCksICV4bW01CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDEwLCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQxMCwgJXhtbTMsICV4bW00CisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCXBhbGlnbnIJJDEwLCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVheCksICVlYXgKKwlwYWxpZ25yCSQxMCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlzdWIJJDY0LCAlZWN4CisJamEJTChTaGwxMExvb3BTdGFydCkKKworTChTaGwxMExvb3BMZWF2ZSk6CisJYWRkCSQzMiwgJWVjeAorCWpsZQlMKHNobF9lbmRfMCkKKworCW1vdmFwcwk2KCVlYXgpLCAleG1tMgorCW1vdmFwcwkyMiglZWF4KSwgJXhtbTMKKwlwYWxpZ25yCSQxMCwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTAsICV4bW0xLCAleG1tMgorCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4CisJbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4CisJUE9QICglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hfMTBfbm9fcHJlZmV0Y2gpOgorCWxlYQktMzIoJWVjeCksICVlY3gKKwlsZWEJLTEwKCVlYXgpLCAlZWF4CisJeG9yCSVlZGksICVlZGkKKworCS5wMmFsaWduIDQKK0woc2hfMTBfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tNAorCXBhbGlnbnIJJDEwLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxMCwgJXhtbTEsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWpiCUwoc2hfMTBfZW5kX25vX3ByZWZldGNoX2xvb3ApCisKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW0xCisJcGFsaWducgkkMTAsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDEwLCAleG1tNCwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamFlCUwoc2hfMTBfbm9fcHJlZmV0Y2hfbG9vcCkKKworTChzaF8xMF9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVkaSwgJWVkeAorCWxlYQkxMCglZWRpLCAlZWF4KSwgJWVheAorCVBPUAkoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNobF8xMSk6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92YXBzCS0xMSglZWF4KSwgJXhtbTEKKyNlbHNlCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZhcHMJLTExKCVlYXgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisJamIgTChzaF8xMV9ub19wcmVmZXRjaCkKKworCWxlYQktNjQoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woU2hsMTFMb29wU3RhcnQpOgorCXByZWZldGNodDAgMHgxYzAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCisJbW92YXBzCTUoJWVheCksICV4bW0yCisJbW92YXBzCTIxKCVlYXgpLCAleG1tMworCW1vdmFwcwkzNyglZWF4KSwgJXhtbTQKKwltb3ZhcHMJNTMoJWVheCksICV4bW01CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDExLCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQxMSwgJXhtbTMsICV4bW00CisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCXBhbGlnbnIJJDExLCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVheCksICVlYXgKKwlwYWxpZ25yCSQxMSwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlzdWIJJDY0LCAlZWN4CisJamEJTChTaGwxMUxvb3BTdGFydCkKKworTChTaGwxMUxvb3BMZWF2ZSk6CisJYWRkCSQzMiwgJWVjeAorCWpsZQlMKHNobF9lbmRfMCkKKworCW1vdmFwcwk1KCVlYXgpLCAleG1tMgorCW1vdmFwcwkyMSglZWF4KSwgJXhtbTMKKwlwYWxpZ25yCSQxMSwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTEsICV4bW0xLCAleG1tMgorCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4CisJbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4CisJUE9QICglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hfMTFfbm9fcHJlZmV0Y2gpOgorCWxlYQktMzIoJWVjeCksICVlY3gKKwlsZWEJLTExKCVlYXgpLCAlZWF4CisJeG9yCSVlZGksICVlZGkKKworCS5wMmFsaWduIDQKK0woc2hfMTFfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tNAorCXBhbGlnbnIJJDExLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxMSwgJXhtbTEsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWpiCUwoc2hfMTFfZW5kX25vX3ByZWZldGNoX2xvb3ApCisKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW0xCisJcGFsaWducgkkMTEsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDExLCAleG1tNCwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamFlCUwoc2hfMTFfbm9fcHJlZmV0Y2hfbG9vcCkKKworTChzaF8xMV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVkaSwgJWVkeAorCWxlYQkxMSglZWRpLCAlZWF4KSwgJWVheAorCVBPUAkoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNobF8xMik6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92YXBzCS0xMiglZWF4KSwgJXhtbTEKKyNlbHNlCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZhcHMJLTEyKCVlYXgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisJamIgTChzaF8xMl9ub19wcmVmZXRjaCkKKworCWxlYQktNjQoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woU2hsMTJMb29wU3RhcnQpOgorCXByZWZldGNodDAgMHgxYzAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCisJbW92YXBzCTQoJWVheCksICV4bW0yCisJbW92YXBzCTIwKCVlYXgpLCAleG1tMworCW1vdmFwcwkzNiglZWF4KSwgJXhtbTQKKwltb3ZhcHMJNTIoJWVheCksICV4bW01CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDEyLCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQxMiwgJXhtbTMsICV4bW00CisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCXBhbGlnbnIJJDEyLCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVheCksICVlYXgKKwlwYWxpZ25yCSQxMiwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlzdWIJJDY0LCAlZWN4CisJamEJTChTaGwxMkxvb3BTdGFydCkKKworTChTaGwxMkxvb3BMZWF2ZSk6CisJYWRkCSQzMiwgJWVjeAorCWpsZQlMKHNobF9lbmRfMCkKKworCW1vdmFwcwk0KCVlYXgpLCAleG1tMgorCW1vdmFwcwkyMCglZWF4KSwgJXhtbTMKKwlwYWxpZ25yCSQxMiwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTIsICV4bW0xLCAleG1tMgorCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4CisJbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4CisJUE9QICglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hfMTJfbm9fcHJlZmV0Y2gpOgorCWxlYQktMzIoJWVjeCksICVlY3gKKwlsZWEJLTEyKCVlYXgpLCAlZWF4CisJeG9yCSVlZGksICVlZGkKKworCS5wMmFsaWduIDQKK0woc2hfMTJfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tNAorCXBhbGlnbnIJJDEyLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxMiwgJXhtbTEsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWpiCUwoc2hfMTJfZW5kX25vX3ByZWZldGNoX2xvb3ApCisKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW0xCisJcGFsaWducgkkMTIsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDEyLCAleG1tNCwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamFlCUwoc2hfMTJfbm9fcHJlZmV0Y2hfbG9vcCkKKworTChzaF8xMl9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVkaSwgJWVkeAorCWxlYQkxMiglZWRpLCAlZWF4KSwgJWVheAorCVBPUAkoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNobF8xMyk6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92YXBzCS0xMyglZWF4KSwgJXhtbTEKKyNlbHNlCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZhcHMJLTEzKCVlYXgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisJamIgTChzaF8xM19ub19wcmVmZXRjaCkKKworCWxlYQktNjQoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woU2hsMTNMb29wU3RhcnQpOgorCXByZWZldGNodDAgMHgxYzAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCisJbW92YXBzCTMoJWVheCksICV4bW0yCisJbW92YXBzCTE5KCVlYXgpLCAleG1tMworCW1vdmFwcwkzNSglZWF4KSwgJXhtbTQKKwltb3ZhcHMJNTEoJWVheCksICV4bW01CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDEzLCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQxMywgJXhtbTMsICV4bW00CisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCXBhbGlnbnIJJDEzLCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVheCksICVlYXgKKwlwYWxpZ25yCSQxMywgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlzdWIJJDY0LCAlZWN4CisJamEJTChTaGwxM0xvb3BTdGFydCkKKworTChTaGwxM0xvb3BMZWF2ZSk6CisJYWRkCSQzMiwgJWVjeAorCWpsZQlMKHNobF9lbmRfMCkKKworCW1vdmFwcwkzKCVlYXgpLCAleG1tMgorCW1vdmFwcwkxOSglZWF4KSwgJXhtbTMKKwlwYWxpZ25yCSQxMywgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTMsICV4bW0xLCAleG1tMgorCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4CisJbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4CisJUE9QICglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hfMTNfbm9fcHJlZmV0Y2gpOgorCWxlYQktMzIoJWVjeCksICVlY3gKKwlsZWEJLTEzKCVlYXgpLCAlZWF4CisJeG9yCSVlZGksICVlZGkKKworCS5wMmFsaWduIDQKK0woc2hfMTNfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tNAorCXBhbGlnbnIJJDEzLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxMywgJXhtbTEsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWpiCUwoc2hfMTNfZW5kX25vX3ByZWZldGNoX2xvb3ApCisKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW0xCisJcGFsaWducgkkMTMsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDEzLCAleG1tNCwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamFlCUwoc2hfMTNfbm9fcHJlZmV0Y2hfbG9vcCkKKworTChzaF8xM19lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVkaSwgJWVkeAorCWxlYQkxMyglZWRpLCAlZWF4KSwgJWVheAorCVBPUAkoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNobF8xNCk6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92YXBzCS0xNCglZWF4KSwgJXhtbTEKKyNlbHNlCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZhcHMJLTE0KCVlYXgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisJamIgTChzaF8xNF9ub19wcmVmZXRjaCkKKworCWxlYQktNjQoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woU2hsMTRMb29wU3RhcnQpOgorCXByZWZldGNodDAgMHgxYzAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCisJbW92YXBzCTIoJWVheCksICV4bW0yCisJbW92YXBzCTE4KCVlYXgpLCAleG1tMworCW1vdmFwcwkzNCglZWF4KSwgJXhtbTQKKwltb3ZhcHMJNTAoJWVheCksICV4bW01CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDE0LCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQxNCwgJXhtbTMsICV4bW00CisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCXBhbGlnbnIJJDE0LCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVheCksICVlYXgKKwlwYWxpZ25yCSQxNCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlzdWIJJDY0LCAlZWN4CisJamEJTChTaGwxNExvb3BTdGFydCkKKworTChTaGwxNExvb3BMZWF2ZSk6CisJYWRkCSQzMiwgJWVjeAorCWpsZQlMKHNobF9lbmRfMCkKKworCW1vdmFwcwkyKCVlYXgpLCAleG1tMgorCW1vdmFwcwkxOCglZWF4KSwgJXhtbTMKKwlwYWxpZ25yCSQxNCwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTQsICV4bW0xLCAleG1tMgorCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4CisJbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4CisJUE9QICglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hfMTRfbm9fcHJlZmV0Y2gpOgorCWxlYQktMzIoJWVjeCksICVlY3gKKwlsZWEJLTE0KCVlYXgpLCAlZWF4CisJeG9yCSVlZGksICVlZGkKKworCS5wMmFsaWduIDQKK0woc2hfMTRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tNAorCXBhbGlnbnIJJDE0LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxNCwgJXhtbTEsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWpiCUwoc2hfMTRfZW5kX25vX3ByZWZldGNoX2xvb3ApCisKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW0xCisJcGFsaWducgkkMTQsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDE0LCAleG1tNCwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamFlCUwoc2hfMTRfbm9fcHJlZmV0Y2hfbG9vcCkKKworTChzaF8xNF9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVkaSwgJWVkeAorCWxlYQkxNCglZWRpLCAlZWF4KSwgJWVheAorCVBPUAkoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNobF8xNSk6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92YXBzCS0xNSglZWF4KSwgJXhtbTEKKyNlbHNlCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZhcHMJLTE1KCVlYXgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisJamIgTChzaF8xNV9ub19wcmVmZXRjaCkKKworCWxlYQktNjQoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woU2hsMTVMb29wU3RhcnQpOgorCXByZWZldGNodDAgMHgxYzAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCisJbW92YXBzCTEoJWVheCksICV4bW0yCisJbW92YXBzCTE3KCVlYXgpLCAleG1tMworCW1vdmFwcwkzMyglZWF4KSwgJXhtbTQKKwltb3ZhcHMJNDkoJWVheCksICV4bW01CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDE1LCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQxNSwgJXhtbTMsICV4bW00CisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCXBhbGlnbnIJJDE1LCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVheCksICVlYXgKKwlwYWxpZ25yCSQxNSwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlzdWIJJDY0LCAlZWN4CisJamEJTChTaGwxNUxvb3BTdGFydCkKKworTChTaGwxNUxvb3BMZWF2ZSk6CisJYWRkCSQzMiwgJWVjeAorCWpsZQlMKHNobF9lbmRfMCkKKworCW1vdmFwcwkxKCVlYXgpLCAleG1tMgorCW1vdmFwcwkxNyglZWF4KSwgJXhtbTMKKwlwYWxpZ25yCSQxNSwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTUsICV4bW0xLCAleG1tMgorCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4CisJbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4CisJUE9QICglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hfMTVfbm9fcHJlZmV0Y2gpOgorCWxlYQktMzIoJWVjeCksICVlY3gKKwlsZWEJLTE1KCVlYXgpLCAlZWF4CisJeG9yCSVlZGksICVlZGkKKworCS5wMmFsaWduIDQKK0woc2hfMTVfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tNAorCXBhbGlnbnIJJDE1LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxNSwgJXhtbTEsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWpiCUwoc2hfMTVfZW5kX25vX3ByZWZldGNoX2xvb3ApCisKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW0xCisJcGFsaWducgkkMTUsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDE1LCAleG1tNCwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamFlCUwoc2hfMTVfbm9fcHJlZmV0Y2hfbG9vcCkKKworTChzaF8xNV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVkaSwgJWVkeAorCWxlYQkxNSglZWRpLCAlZWF4KSwgJWVheAorCVBPUAkoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNobF9lbmRfMCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJbGVhCSglZWR4LCAlZWN4KSwgJWVkeAorCWxlYQkoJWVheCwgJWVjeCksICVlYXgKKwlQT1AJKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzQ0Ynl0ZXMpOgorCW1vdnEJLTQ0KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC00NCglZWR4KQorTChmd2Rfd3JpdGVfMzZieXRlcyk6CisJbW92cQktMzYoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTM2KCVlZHgpCitMKGZ3ZF93cml0ZV8yOGJ5dGVzKToKKwltb3ZxCS0yOCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMjgoJWVkeCkKK0woZndkX3dyaXRlXzIwYnl0ZXMpOgorCW1vdnEJLTIwKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0yMCglZWR4KQorTChmd2Rfd3JpdGVfMTJieXRlcyk6CisJbW92cQktMTIoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTEyKCVlZHgpCitMKGZ3ZF93cml0ZV80Ynl0ZXMpOgorCW1vdmwJLTQoJWVheCksICVlY3gKKwltb3ZsCSVlY3gsIC00KCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzQwYnl0ZXMpOgorCW1vdnEJLTQwKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC00MCglZWR4KQorTChmd2Rfd3JpdGVfMzJieXRlcyk6CisJbW92cQktMzIoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTMyKCVlZHgpCitMKGZ3ZF93cml0ZV8yNGJ5dGVzKToKKwltb3ZxCS0yNCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMjQoJWVkeCkKK0woZndkX3dyaXRlXzE2Ynl0ZXMpOgorCW1vdnEJLTE2KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xNiglZWR4KQorTChmd2Rfd3JpdGVfOGJ5dGVzKToKKwltb3ZxCS04KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC04KCVlZHgpCitMKGZ3ZF93cml0ZV8wYnl0ZXMpOgorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV81Ynl0ZXMpOgorCW1vdmwJLTUoJWVheCksICVlY3gKKwltb3ZsCS00KCVlYXgpLCAlZWF4CisJbW92bAklZWN4LCAtNSglZWR4KQorCW1vdmwJJWVheCwgLTQoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNDVieXRlcyk6CisJbW92cQktNDUoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTQ1KCVlZHgpCitMKGZ3ZF93cml0ZV8zN2J5dGVzKToKKwltb3ZxCS0zNyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMzcoJWVkeCkKK0woZndkX3dyaXRlXzI5Ynl0ZXMpOgorCW1vdnEJLTI5KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0yOSglZWR4KQorTChmd2Rfd3JpdGVfMjFieXRlcyk6CisJbW92cQktMjEoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTIxKCVlZHgpCitMKGZ3ZF93cml0ZV8xM2J5dGVzKToKKwltb3ZxCS0xMyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTMoJWVkeCkKKwltb3ZsCS01KCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAtNSglZWR4KQorCW1vdnpibAktMSglZWF4KSwgJWVjeAorCW1vdmIJJWNsLCAtMSglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV80MWJ5dGVzKToKKwltb3ZxCS00MSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtNDEoJWVkeCkKK0woZndkX3dyaXRlXzMzYnl0ZXMpOgorCW1vdnEJLTMzKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0zMyglZWR4KQorTChmd2Rfd3JpdGVfMjVieXRlcyk6CisJbW92cQktMjUoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTI1KCVlZHgpCitMKGZ3ZF93cml0ZV8xN2J5dGVzKToKKwltb3ZxCS0xNyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTcoJWVkeCkKK0woZndkX3dyaXRlXzlieXRlcyk6CisJbW92cQktOSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtOSglZWR4KQorTChmd2Rfd3JpdGVfMWJ5dGVzKToKKwltb3Z6YmwJLTEoJWVheCksICVlY3gKKwltb3ZiCSVjbCwgLTEoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNDZieXRlcyk6CisJbW92cQktNDYoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTQ2KCVlZHgpCitMKGZ3ZF93cml0ZV8zOGJ5dGVzKToKKwltb3ZxCS0zOCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMzgoJWVkeCkKK0woZndkX3dyaXRlXzMwYnl0ZXMpOgorCW1vdnEJLTMwKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0zMCglZWR4KQorTChmd2Rfd3JpdGVfMjJieXRlcyk6CisJbW92cQktMjIoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTIyKCVlZHgpCitMKGZ3ZF93cml0ZV8xNGJ5dGVzKToKKwltb3ZxCS0xNCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTQoJWVkeCkKK0woZndkX3dyaXRlXzZieXRlcyk6CisJbW92bAktNiglZWF4KSwgJWVjeAorCW1vdmwJJWVjeCwgLTYoJWVkeCkKKwltb3Z6d2wJLTIoJWVheCksICVlY3gKKwltb3Z3CSVjeCwgLTIoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNDJieXRlcyk6CisJbW92cQktNDIoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTQyKCVlZHgpCitMKGZ3ZF93cml0ZV8zNGJ5dGVzKToKKwltb3ZxCS0zNCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMzQoJWVkeCkKK0woZndkX3dyaXRlXzI2Ynl0ZXMpOgorCW1vdnEJLTI2KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0yNiglZWR4KQorTChmd2Rfd3JpdGVfMThieXRlcyk6CisJbW92cQktMTgoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTE4KCVlZHgpCitMKGZ3ZF93cml0ZV8xMGJ5dGVzKToKKwltb3ZxCS0xMCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTAoJWVkeCkKK0woZndkX3dyaXRlXzJieXRlcyk6CisJbW92endsCS0yKCVlYXgpLCAlZWN4CisJbW92dwklY3gsIC0yKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzQ3Ynl0ZXMpOgorCW1vdnEJLTQ3KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC00NyglZWR4KQorTChmd2Rfd3JpdGVfMzlieXRlcyk6CisJbW92cQktMzkoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTM5KCVlZHgpCitMKGZ3ZF93cml0ZV8zMWJ5dGVzKToKKwltb3ZxCS0zMSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMzEoJWVkeCkKK0woZndkX3dyaXRlXzIzYnl0ZXMpOgorCW1vdnEJLTIzKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0yMyglZWR4KQorTChmd2Rfd3JpdGVfMTVieXRlcyk6CisJbW92cQktMTUoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTE1KCVlZHgpCitMKGZ3ZF93cml0ZV83Ynl0ZXMpOgorCW1vdmwJLTcoJWVheCksICVlY3gKKwltb3ZsCSVlY3gsIC03KCVlZHgpCisJbW92endsCS0zKCVlYXgpLCAlZWN4CisJbW92emJsCS0xKCVlYXgpLCAlZWF4CisJbW92dwklY3gsIC0zKCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzQzYnl0ZXMpOgorCW1vdnEJLTQzKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC00MyglZWR4KQorTChmd2Rfd3JpdGVfMzVieXRlcyk6CisJbW92cQktMzUoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTM1KCVlZHgpCitMKGZ3ZF93cml0ZV8yN2J5dGVzKToKKwltb3ZxCS0yNyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMjcoJWVkeCkKK0woZndkX3dyaXRlXzE5Ynl0ZXMpOgorCW1vdnEJLTE5KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xOSglZWR4KQorTChmd2Rfd3JpdGVfMTFieXRlcyk6CisJbW92cQktMTEoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTExKCVlZHgpCitMKGZ3ZF93cml0ZV8zYnl0ZXMpOgorCW1vdnp3bAktMyglZWF4KSwgJWVjeAorCW1vdnpibAktMSglZWF4KSwgJWVheAorCW1vdncJJWN4LCAtMyglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV80MGJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTQwKCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTQwKCVlZHgpCitMKGZ3ZF93cml0ZV8yNGJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTI0KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTI0KCVlZHgpCitMKGZ3ZF93cml0ZV84Ynl0ZXNfYWxpZ24pOgorCW1vdnEJLTgoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTgoJWVkeCkKK0woZndkX3dyaXRlXzBieXRlc19hbGlnbik6CisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzMyYnl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMzIoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMzIoJWVkeCkKK0woZndkX3dyaXRlXzE2Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMTYoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMTYoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNWJ5dGVzX2FsaWduKToKKwltb3ZsCS01KCVlYXgpLCAlZWN4CisJbW92bAktNCglZWF4KSwgJWVheAorCW1vdmwJJWVjeCwgLTUoJWVkeCkKKwltb3ZsCSVlYXgsIC00KCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzQ1Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktNDUoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtNDUoJWVkeCkKK0woZndkX3dyaXRlXzI5Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMjkoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMjkoJWVkeCkKK0woZndkX3dyaXRlXzEzYnl0ZXNfYWxpZ24pOgorCW1vdnEJLTEzKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xMyglZWR4KQorCW1vdmwJLTUoJWVheCksICVlY3gKKwltb3ZsCSVlY3gsIC01KCVlZHgpCisJbW92emJsCS0xKCVlYXgpLCAlZWN4CisJbW92YgklY2wsIC0xKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzM3Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMzcoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMzcoJWVkeCkKK0woZndkX3dyaXRlXzIxYnl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMjEoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMjEoJWVkeCkKKwltb3ZsCS01KCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAtNSglZWR4KQorCW1vdnpibAktMSglZWF4KSwgJWVjeAorCW1vdmIJJWNsLCAtMSglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV80MWJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTQxKCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTQxKCVlZHgpCitMKGZ3ZF93cml0ZV8yNWJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTI1KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTI1KCVlZHgpCitMKGZ3ZF93cml0ZV85Ynl0ZXNfYWxpZ24pOgorCW1vdnEJLTkoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTkoJWVkeCkKK0woZndkX3dyaXRlXzFieXRlc19hbGlnbik6CisJbW92emJsCS0xKCVlYXgpLCAlZWN4CisJbW92YgklY2wsIC0xKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzMzYnl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMzMoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMzMoJWVkeCkKK0woZndkX3dyaXRlXzE3Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMTcoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMTcoJWVkeCkKKwltb3Z6YmwJLTEoJWVheCksICVlY3gKKwltb3ZiCSVjbCwgLTEoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNDZieXRlc19hbGlnbik6CisJbW92ZHFhCS00NiglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC00NiglZWR4KQorTChmd2Rfd3JpdGVfMzBieXRlc19hbGlnbik6CisJbW92ZHFhCS0zMCglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0zMCglZWR4KQorTChmd2Rfd3JpdGVfMTRieXRlc19hbGlnbik6CisJbW92cQktMTQoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTE0KCVlZHgpCitMKGZ3ZF93cml0ZV82Ynl0ZXNfYWxpZ24pOgorCW1vdmwJLTYoJWVheCksICVlY3gKKwltb3ZsCSVlY3gsIC02KCVlZHgpCisJbW92endsCS0yKCVlYXgpLCAlZWN4CisJbW92dwklY3gsIC0yKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzM4Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMzgoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMzgoJWVkeCkKK0woZndkX3dyaXRlXzIyYnl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMjIoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMjIoJWVkeCkKKwltb3ZsCS02KCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAtNiglZWR4KQorCW1vdnp3bAktMiglZWF4KSwgJWVjeAorCW1vdncJJWN4LCAtMiglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV80MmJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTQyKCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTQyKCVlZHgpCitMKGZ3ZF93cml0ZV8yNmJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTI2KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTI2KCVlZHgpCitMKGZ3ZF93cml0ZV8xMGJ5dGVzX2FsaWduKToKKwltb3ZxCS0xMCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTAoJWVkeCkKK0woZndkX3dyaXRlXzJieXRlc19hbGlnbik6CisJbW92endsCS0yKCVlYXgpLCAlZWN4CisJbW92dwklY3gsIC0yKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzM0Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMzQoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMzQoJWVkeCkKK0woZndkX3dyaXRlXzE4Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMTgoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMTgoJWVkeCkKKwltb3Z6d2wJLTIoJWVheCksICVlY3gKKwltb3Z3CSVjeCwgLTIoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNDdieXRlc19hbGlnbik6CisJbW92ZHFhCS00NyglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC00NyglZWR4KQorTChmd2Rfd3JpdGVfMzFieXRlc19hbGlnbik6CisJbW92ZHFhCS0zMSglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0zMSglZWR4KQorTChmd2Rfd3JpdGVfMTVieXRlc19hbGlnbik6CisJbW92cQktMTUoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTE1KCVlZHgpCitMKGZ3ZF93cml0ZV83Ynl0ZXNfYWxpZ24pOgorCW1vdmwJLTcoJWVheCksICVlY3gKKwltb3ZsCSVlY3gsIC03KCVlZHgpCisJbW92endsCS0zKCVlYXgpLCAlZWN4CisJbW92emJsCS0xKCVlYXgpLCAlZWF4CisJbW92dwklY3gsIC0zKCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzM5Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMzkoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMzkoJWVkeCkKK0woZndkX3dyaXRlXzIzYnl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMjMoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMjMoJWVkeCkKKwltb3ZsCS03KCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAtNyglZWR4KQorCW1vdnp3bAktMyglZWF4KSwgJWVjeAorCW1vdnpibAktMSglZWF4KSwgJWVheAorCW1vdncJJWN4LCAtMyglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV80M2J5dGVzX2FsaWduKToKKwltb3ZkcWEJLTQzKCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTQzKCVlZHgpCitMKGZ3ZF93cml0ZV8yN2J5dGVzX2FsaWduKToKKwltb3ZkcWEJLTI3KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTI3KCVlZHgpCitMKGZ3ZF93cml0ZV8xMWJ5dGVzX2FsaWduKToKKwltb3ZxCS0xMSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTEoJWVkeCkKK0woZndkX3dyaXRlXzNieXRlc19hbGlnbik6CisJbW92endsCS0zKCVlYXgpLCAlZWN4CisJbW92emJsCS0xKCVlYXgpLCAlZWF4CisJbW92dwklY3gsIC0zKCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzM1Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMzUoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMzUoJWVkeCkKK0woZndkX3dyaXRlXzE5Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMTkoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMTkoJWVkeCkKKwltb3Z6d2wJLTMoJWVheCksICVlY3gKKwltb3Z6YmwJLTEoJWVheCksICVlYXgKKwltb3Z3CSVjeCwgLTMoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNDRieXRlc19hbGlnbik6CisJbW92ZHFhCS00NCglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC00NCglZWR4KQorTChmd2Rfd3JpdGVfMjhieXRlc19hbGlnbik6CisJbW92ZHFhCS0yOCglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0yOCglZWR4KQorTChmd2Rfd3JpdGVfMTJieXRlc19hbGlnbik6CisJbW92cQktMTIoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTEyKCVlZHgpCitMKGZ3ZF93cml0ZV80Ynl0ZXNfYWxpZ24pOgorCW1vdmwJLTQoJWVheCksICVlY3gKKwltb3ZsCSVlY3gsIC00KCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzM2Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMzYoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMzYoJWVkeCkKK0woZndkX3dyaXRlXzIwYnl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMjAoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMjAoJWVkeCkKKwltb3ZsCS00KCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAtNCglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOX0VORAorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKGxhcmdlX3BhZ2UpOgorCW1vdmRxdQkoJWVheCksICV4bW0xCisjaWZkZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKwlsZWEJMTYoJWVheCksICVlYXgKKwltb3ZudGRxCSV4bW0xLCAoJWVkeCkKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlsZWEJLTB4OTAoJWVjeCksICVlY3gKKwlQT1AgKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKGxhcmdlX3BhZ2VfbG9vcCk6CisJbW92ZHF1CSglZWF4KSwgJXhtbTAKKwltb3ZkcXUJMHgxMCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJMHgyMCglZWF4KSwgJXhtbTIKKwltb3ZkcXUJMHgzMCglZWF4KSwgJXhtbTMKKwltb3ZkcXUJMHg0MCglZWF4KSwgJXhtbTQKKwltb3ZkcXUJMHg1MCglZWF4KSwgJXhtbTUKKwltb3ZkcXUJMHg2MCglZWF4KSwgJXhtbTYKKwltb3ZkcXUJMHg3MCglZWF4KSwgJXhtbTcKKwlsZWEJMHg4MCglZWF4KSwgJWVheAorCisJc3ViCSQweDgwLCAlZWN4CisJbW92bnRkcQkleG1tMCwgKCVlZHgpCisJbW92bnRkcQkleG1tMSwgMHgxMCglZWR4KQorCW1vdm50ZHEJJXhtbTIsIDB4MjAoJWVkeCkKKwltb3ZudGRxCSV4bW0zLCAweDMwKCVlZHgpCisJbW92bnRkcQkleG1tNCwgMHg0MCglZWR4KQorCW1vdm50ZHEJJXhtbTUsIDB4NTAoJWVkeCkKKwltb3ZudGRxCSV4bW02LCAweDYwKCVlZHgpCisJbW92bnRkcQkleG1tNywgMHg3MCglZWR4KQorCWxlYQkweDgwKCVlZHgpLCAlZWR4CisJamFlCUwobGFyZ2VfcGFnZV9sb29wKQorCWNtcAkkLTB4NDAsICVlY3gKKwlsZWEJMHg4MCglZWN4KSwgJWVjeAorCWpsCUwobGFyZ2VfcGFnZV9sZXNzXzY0Ynl0ZXMpCisKKwltb3ZkcXUJKCVlYXgpLCAleG1tMAorCW1vdmRxdQkweDEwKCVlYXgpLCAleG1tMQorCW1vdmRxdQkweDIwKCVlYXgpLCAleG1tMgorCW1vdmRxdQkweDMwKCVlYXgpLCAleG1tMworCWxlYQkweDQwKCVlYXgpLCAlZWF4CisKKwltb3ZudGRxCSV4bW0wLCAoJWVkeCkKKwltb3ZudGRxCSV4bW0xLCAweDEwKCVlZHgpCisJbW92bnRkcQkleG1tMiwgMHgyMCglZWR4KQorCW1vdm50ZHEJJXhtbTMsIDB4MzAoJWVkeCkKKwlsZWEJMHg0MCglZWR4KSwgJWVkeAorCXN1YgkkMHg0MCwgJWVjeAorTChsYXJnZV9wYWdlX2xlc3NfNjRieXRlcyk6CisJY21wCSQzMiwgJWVjeAorCWpiCUwobGFyZ2VfcGFnZV9sZXNzXzMyYnl0ZXMpCisJbW92ZHF1CSglZWF4KSwgJXhtbTAKKwltb3ZkcXUJMHgxMCglZWF4KSwgJXhtbTEKKwlsZWEJMHgyMCglZWF4KSwgJWVheAorCW1vdm50ZHEJJXhtbTAsICglZWR4KQorCW1vdm50ZHEJJXhtbTEsIDB4MTAoJWVkeCkKKwlsZWEJMHgyMCglZWR4KSwgJWVkeAorCXN1YgkkMHgyMCwgJWVjeAorTChsYXJnZV9wYWdlX2xlc3NfMzJieXRlcyk6CisJYWRkCSVlY3gsICVlZHgKKwlhZGQJJWVjeCwgJWVheAorCXNmZW5jZQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJLnAyYWxpZ24gNAorTChia193cml0ZV80NGJ5dGVzKToKKwltb3ZxCTM2KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDM2KCVlZHgpCitMKGJrX3dyaXRlXzM2Ynl0ZXMpOgorCW1vdnEJMjgoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMjgoJWVkeCkKK0woYmtfd3JpdGVfMjhieXRlcyk6CisJbW92cQkyMCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAyMCglZWR4KQorTChia193cml0ZV8yMGJ5dGVzKToKKwltb3ZxCTEyKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDEyKCVlZHgpCitMKGJrX3dyaXRlXzEyYnl0ZXMpOgorCW1vdnEJNCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCA0KCVlZHgpCitMKGJrX3dyaXRlXzRieXRlcyk6CisJbW92bAkoJWVheCksICVlY3gKKwltb3ZsCSVlY3gsICglZWR4KQorTChia193cml0ZV8wYnl0ZXMpOgorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCUxFTiglZXNwKSwgJWVjeAorCWFkZAklZWN4LCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woYmtfd3JpdGVfNDBieXRlcyk6CisJbW92cQkzMiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAzMiglZWR4KQorTChia193cml0ZV8zMmJ5dGVzKToKKwltb3ZxCTI0KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDI0KCVlZHgpCitMKGJrX3dyaXRlXzI0Ynl0ZXMpOgorCW1vdnEJMTYoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMTYoJWVkeCkKK0woYmtfd3JpdGVfMTZieXRlcyk6CisJbW92cQk4KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDgoJWVkeCkKK0woYmtfd3JpdGVfOGJ5dGVzKToKKwltb3ZxCSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAlMRU4oJWVzcCksICVlY3gKKwlhZGQJJWVjeCwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGJrX3dyaXRlXzQ1Ynl0ZXMpOgorCW1vdnEJMzcoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMzcoJWVkeCkKK0woYmtfd3JpdGVfMzdieXRlcyk6CisJbW92cQkyOSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAyOSglZWR4KQorTChia193cml0ZV8yOWJ5dGVzKToKKwltb3ZxCTIxKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDIxKCVlZHgpCitMKGJrX3dyaXRlXzIxYnl0ZXMpOgorCW1vdnEJMTMoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMTMoJWVkeCkKK0woYmtfd3JpdGVfMTNieXRlcyk6CisJbW92cQk1KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDUoJWVkeCkKK0woYmtfd3JpdGVfNWJ5dGVzKToKKwltb3ZsCTEoJWVheCksICVlY3gKKwltb3ZsCSVlY3gsIDEoJWVkeCkKK0woYmtfd3JpdGVfMWJ5dGVzKToKKwltb3Z6YmwJKCVlYXgpLCAlZWN4CisJbW92YgklY2wsICglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCUxFTiglZXNwKSwgJWVjeAorCWFkZAklZWN4LCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woYmtfd3JpdGVfNDFieXRlcyk6CisJbW92cQkzMyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAzMyglZWR4KQorTChia193cml0ZV8zM2J5dGVzKToKKwltb3ZxCTI1KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDI1KCVlZHgpCitMKGJrX3dyaXRlXzI1Ynl0ZXMpOgorCW1vdnEJMTcoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMTcoJWVkeCkKK0woYmtfd3JpdGVfMTdieXRlcyk6CisJbW92cQk5KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDkoJWVkeCkKK0woYmtfd3JpdGVfOWJ5dGVzKToKKwltb3ZxCTEoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMSglZWR4KQorCW1vdnpibAkoJWVheCksICVlY3gKKwltb3ZiCSVjbCwgKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJTEVOKCVlc3ApLCAlZWN4CisJYWRkCSVlY3gsICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChia193cml0ZV80NmJ5dGVzKToKKwltb3ZxCTM4KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDM4KCVlZHgpCitMKGJrX3dyaXRlXzM4Ynl0ZXMpOgorCW1vdnEJMzAoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMzAoJWVkeCkKK0woYmtfd3JpdGVfMzBieXRlcyk6CisJbW92cQkyMiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAyMiglZWR4KQorTChia193cml0ZV8yMmJ5dGVzKToKKwltb3ZxCTE0KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDE0KCVlZHgpCitMKGJrX3dyaXRlXzE0Ynl0ZXMpOgorCW1vdnEJNiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCA2KCVlZHgpCitMKGJrX3dyaXRlXzZieXRlcyk6CisJbW92bAkyKCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAyKCVlZHgpCisJbW92endsCSglZWF4KSwgJWVjeAorCW1vdncJJWN4LCAoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAlMRU4oJWVzcCksICVlY3gKKwlhZGQJJWVjeCwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGJrX3dyaXRlXzQyYnl0ZXMpOgorCW1vdnEJMzQoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMzQoJWVkeCkKK0woYmtfd3JpdGVfMzRieXRlcyk6CisJbW92cQkyNiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAyNiglZWR4KQorTChia193cml0ZV8yNmJ5dGVzKToKKwltb3ZxCTE4KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDE4KCVlZHgpCitMKGJrX3dyaXRlXzE4Ynl0ZXMpOgorCW1vdnEJMTAoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMTAoJWVkeCkKK0woYmtfd3JpdGVfMTBieXRlcyk6CisJbW92cQkyKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDIoJWVkeCkKK0woYmtfd3JpdGVfMmJ5dGVzKToKKwltb3Z6d2wJKCVlYXgpLCAlZWN4CisJbW92dwklY3gsICglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCUxFTiglZXNwKSwgJWVjeAorCWFkZAklZWN4LCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woYmtfd3JpdGVfNDdieXRlcyk6CisJbW92cQkzOSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAzOSglZWR4KQorTChia193cml0ZV8zOWJ5dGVzKToKKwltb3ZxCTMxKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDMxKCVlZHgpCitMKGJrX3dyaXRlXzMxYnl0ZXMpOgorCW1vdnEJMjMoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMjMoJWVkeCkKK0woYmtfd3JpdGVfMjNieXRlcyk6CisJbW92cQkxNSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAxNSglZWR4KQorTChia193cml0ZV8xNWJ5dGVzKToKKwltb3ZxCTcoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgNyglZWR4KQorTChia193cml0ZV83Ynl0ZXMpOgorCW1vdmwJMyglZWF4KSwgJWVjeAorCW1vdmwJJWVjeCwgMyglZWR4KQorCW1vdnp3bAkxKCVlYXgpLCAlZWN4CisJbW92dwklY3gsIDEoJWVkeCkKKwltb3Z6YmwJKCVlYXgpLCAlZWF4CisJbW92YgklYWwsICglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCUxFTiglZXNwKSwgJWVjeAorCWFkZAklZWN4LCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woYmtfd3JpdGVfNDNieXRlcyk6CisJbW92cQkzNSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAzNSglZWR4KQorTChia193cml0ZV8zNWJ5dGVzKToKKwltb3ZxCTI3KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDI3KCVlZHgpCitMKGJrX3dyaXRlXzI3Ynl0ZXMpOgorCW1vdnEJMTkoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMTkoJWVkeCkKK0woYmtfd3JpdGVfMTlieXRlcyk6CisJbW92cQkxMSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAxMSglZWR4KQorTChia193cml0ZV8xMWJ5dGVzKToKKwltb3ZxCTMoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMyglZWR4KQorTChia193cml0ZV8zYnl0ZXMpOgorCW1vdnp3bAkxKCVlYXgpLCAlZWN4CisJbW92dwklY3gsIDEoJWVkeCkKKwltb3Z6YmwJKCVlYXgpLCAlZWF4CisJbW92YgklYWwsICglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCUxFTiglZXNwKSwgJWVjeAorCWFkZAklZWN4LCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk5fRU5ECisKKworCS5wdXNoc2VjdGlvbiAucm9kYXRhLnNzc2UzLCJhIixAcHJvZ2JpdHMKKwkucDJhbGlnbiAyCitMKHRhYmxlXzQ4Ynl0ZXNfZndkKToKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzFieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfM2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzRieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV81Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzdieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV84Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfOWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzEwYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTFieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xMmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzEzYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTRieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xNWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE2Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTdieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xOGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE5Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjBieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yMWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzIyYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjNieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yNGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI1Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjZieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yN2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI4Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjlieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zMGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzMxYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzJieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zM2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM0Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzVieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zNmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM3Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzhieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zOWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQwYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDFieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80MmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQzYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDRieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80NWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQ2Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDdieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCisJLnAyYWxpZ24gMgorTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbik6CisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzBieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzNieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzZieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV83Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfOGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzlieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xMGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzExYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTJieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xM2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE0Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTVieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xNmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE3Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMThieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xOWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzIwYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjFieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yMmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzIzYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjRieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yNWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI2Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjdieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yOGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI5Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzBieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zMWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzMyYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzNieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zNGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM1Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzZieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zN2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM4Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzlieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80MGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQxYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDJieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80M2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQ0Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDVieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80NmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQ3Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKworCS5wMmFsaWduIDIKK0woc2hsX3RhYmxlKToKKwkuaW50CUpNUFRCTCAoTChzaGxfMCksIEwoc2hsX3RhYmxlKSkKKwkuaW50CUpNUFRCTCAoTChzaGxfMSksIEwoc2hsX3RhYmxlKSkKKwkuaW50CUpNUFRCTCAoTChzaGxfMiksIEwoc2hsX3RhYmxlKSkKKwkuaW50CUpNUFRCTCAoTChzaGxfMyksIEwoc2hsX3RhYmxlKSkKKwkuaW50CUpNUFRCTCAoTChzaGxfNCksIEwoc2hsX3RhYmxlKSkKKwkuaW50CUpNUFRCTCAoTChzaGxfNSksIEwoc2hsX3RhYmxlKSkKKwkuaW50CUpNUFRCTCAoTChzaGxfNiksIEwoc2hsX3RhYmxlKSkKKwkuaW50CUpNUFRCTCAoTChzaGxfNyksIEwoc2hsX3RhYmxlKSkKKwkuaW50CUpNUFRCTCAoTChzaGxfOCksIEwoc2hsX3RhYmxlKSkKKwkuaW50CUpNUFRCTCAoTChzaGxfOSksIEwoc2hsX3RhYmxlKSkKKwkuaW50CUpNUFRCTCAoTChzaGxfMTApLCBMKHNobF90YWJsZSkpCisJLmludAlKTVBUQkwgKEwoc2hsXzExKSwgTChzaGxfdGFibGUpKQorCS5pbnQJSk1QVEJMIChMKHNobF8xMiksIEwoc2hsX3RhYmxlKSkKKwkuaW50CUpNUFRCTCAoTChzaGxfMTMpLCBMKHNobF90YWJsZSkpCisJLmludAlKTVBUQkwgKEwoc2hsXzE0KSwgTChzaGxfdGFibGUpKQorCS5pbnQJSk1QVEJMIChMKHNobF8xNSksIEwoc2hsX3RhYmxlKSkKKworCS5wMmFsaWduIDIKK0wodGFibGVfNDhfYnl0ZXNfYndkKToKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8wYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzJieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8zYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzVieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV82Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfN2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzhieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV85Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTBieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8xMWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzEyYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTNieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8xNGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzE1Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTZieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8xN2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzE4Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTlieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8yMGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzIxYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjJieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8yM2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzI0Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjVieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8yNmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzI3Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjhieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8yOWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzMwYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzFieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8zMmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzMzYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzRieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8zNWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzM2Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzdieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8zOGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzM5Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNDBieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV80MWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzQyYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNDNieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV80NGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzQ1Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNDZieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV80N2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCisJLnBvcHNlY3Rpb24KKworI2lmZGVmIFVTRV9BU19NRU1NT1ZFCisJLnAyYWxpZ24gNAorTChjb3B5X2JhY2t3YXJkKToKKwlQVVNIICglZWRpKQorCW1vdmwJJWVheCwgJWVkaQorCWxlYQkoJWVjeCwlZWR4LDEpLCVlZHgKKwlsZWEJKCVlY3gsJWVkaSwxKSwlZWRpCisJdGVzdGwJJDB4MywgJWVkeAorCWpueglMKGJrX2FsaWduKQorCitMKGJrX2FsaWduZWRfNCk6CisJY21wCSQ2NCwgJWVjeAorCWphZQlMKGJrX3dyaXRlX21vcmU2NGJ5dGVzKQorCitMKGJrX3dyaXRlXzY0Ynl0ZXNsZXNzKToKKwljbXAJJDMyLCAlZWN4CisJamIJTChia193cml0ZV9sZXNzMzJieXRlcykKKworTChia193cml0ZV9tb3JlMzJieXRlcyk6CisJLyogQ29weSAzMiBieXRlcyBhdCBhIHRpbWUuICAqLworCXN1YgkkMzIsICVlY3gKKwltb3ZxCS04KCVlZGkpLCAleG1tMAorCW1vdnEJJXhtbTAsIC04KCVlZHgpCisJbW92cQktMTYoJWVkaSksICV4bW0wCisJbW92cQkleG1tMCwgLTE2KCVlZHgpCisJbW92cQktMjQoJWVkaSksICV4bW0wCisJbW92cQkleG1tMCwgLTI0KCVlZHgpCisJbW92cQktMzIoJWVkaSksICV4bW0wCisJbW92cQkleG1tMCwgLTMyKCVlZHgpCisJc3ViCSQzMiwgJWVkeAorCXN1YgkkMzIsICVlZGkKKworTChia193cml0ZV9sZXNzMzJieXRlcyk6CisJbW92bAklZWRpLCAlZWF4CisJc3ViCSVlY3gsICVlZHgKKwlzdWIJJWVjeCwgJWVheAorCVBPUCAoJWVkaSkKK0woYmtfd3JpdGVfbGVzczMyYnl0ZXNfMik6CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV80OF9ieXRlc19id2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKGJrX2FsaWduKToKKwljbXAJJDgsICVlY3gKKwlqYmUJTChia193cml0ZV9sZXNzMzJieXRlcykKKwl0ZXN0bAkkMSwgJWVkeAorCS8qIFdlIGdldCBoZXJlIG9ubHkgaWYgKEVEWCAmIDMgKSAhPSAwIHNvIGlmIChFRFggJiAxKSA9PTAsCisJdGhlbgkoRURYICYgMikgbXVzdCBiZSAhPSAwLiAgKi8KKwlqeglMKGJrX2dvdDIpCisJc3ViCSQxLCAlZWRpCisJc3ViCSQxLCAlZWN4CisJc3ViCSQxLCAlZWR4CisJbW92emJsCSglZWRpKSwgJWVheAorCW1vdmIJJWFsLCAoJWVkeCkKKworCXRlc3RsCSQyLCAlZWR4CisJanoJTChia19hbGlnbmVkXzQpCisKK0woYmtfZ290Mik6CisJc3ViCSQyLCAlZWRpCisJc3ViCSQyLCAlZWN4CisJc3ViCSQyLCAlZWR4CisJbW92endsCSglZWRpKSwgJWVheAorCW1vdncJJWF4LCAoJWVkeCkKKwlqbXAJTChia19hbGlnbmVkXzQpCisKKwkucDJhbGlnbiA0CitMKGJrX3dyaXRlX21vcmU2NGJ5dGVzKToKKwkvKiBDaGVjayBhbGlnbm1lbnQgb2YgbGFzdCBieXRlLiAgKi8KKwl0ZXN0bAkkMTUsICVlZHgKKwlqeglMKGJrX3Nzc2UzX2NweV9wcmUpCisKKy8qIEVEWCBpcyBhbGlnbmVkIDQgYnl0ZXMsIGJ1dCBub3QgMTYgYnl0ZXMuICAqLworTChia19zc3NlM19hbGlnbik6CisJc3ViCSQ0LCAlZWRpCisJc3ViCSQ0LCAlZWN4CisJc3ViCSQ0LCAlZWR4CisJbW92bAkoJWVkaSksICVlYXgKKwltb3ZsCSVlYXgsICglZWR4KQorCisJdGVzdGwJJDE1LCAlZWR4CisJanoJTChia19zc3NlM19jcHlfcHJlKQorCisJc3ViCSQ0LCAlZWRpCisJc3ViCSQ0LCAlZWN4CisJc3ViCSQ0LCAlZWR4CisJbW92bAkoJWVkaSksICVlYXgKKwltb3ZsCSVlYXgsICglZWR4KQorCisJdGVzdGwJJDE1LCAlZWR4CisJanoJTChia19zc3NlM19jcHlfcHJlKQorCisJc3ViCSQ0LCAlZWRpCisJc3ViCSQ0LCAlZWN4CisJc3ViCSQ0LCAlZWR4CisJbW92bAkoJWVkaSksICVlYXgKKwltb3ZsCSVlYXgsICglZWR4KQorCitMKGJrX3Nzc2UzX2NweV9wcmUpOgorCWNtcAkkNjQsICVlY3gKKwlqYglMKGJrX3dyaXRlX21vcmUzMmJ5dGVzKQorCisJLnAyYWxpZ24gNAorTChia19zc3NlM19jcHkpOgorCXN1YgkkNjQsICVlZGkKKwlzdWIJJDY0LCAlZWN4CisJc3ViCSQ2NCwgJWVkeAorCW1vdmRxdQkweDMwKCVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgMHgzMCglZWR4KQorCW1vdmRxdQkweDIwKCVlZGkpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgMHgyMCglZWR4KQorCW1vdmRxdQkweDEwKCVlZGkpLCAleG1tMQorCW1vdmRxYQkleG1tMSwgMHgxMCglZWR4KQorCW1vdmRxdQkoJWVkaSksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwljbXAJJDY0LCAlZWN4CisJamFlCUwoYmtfc3NzZTNfY3B5KQorCWptcAlMKGJrX3dyaXRlXzY0Ynl0ZXNsZXNzKQorCisjZW5kaWYKKworRU5EIChNRU1DUFkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1tZW1tb3ZlLWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtbWVtbW92ZS1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbW1vdmUtYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLW1lbW1vdmUtYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJjYXQtYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJjYXQtYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJjYXQtYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmNhdC1hdG9tLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmNtcC1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmNtcC1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmNtcC1hdG9tLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RyY21wLWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RyY3B5LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RyY3B5LWF0b20uUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RyY3B5LWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJjcHktYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJsY2F0LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RybGNhdC1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmxjYXQtYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmxjYXQtYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJsY3B5LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RybGNweS1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmxjcHktYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmxjcHktYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJuY2F0LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RybmNhdC1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cm5jYXQtYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cm5jYXQtYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJuY21wLWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RybmNtcC1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cm5jbXAtYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cm5jbXAtYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJuY3B5LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RybmNweS1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cm5jcHktYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cm5jcHktYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy13Y3NjYXQtYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy13Y3NjYXQtYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy13Y3NjYXQtYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXdjc2NhdC1hdG9tLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXdjc2NweS1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXdjc2NweS1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXdjc2NweS1hdG9tLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtd2NzY3B5LWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtd21lbWNtcC1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXdtZW1jbXAtYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy13bWVtY21wLWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy13bWVtY21wLWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL19fYmlvbmljX2Nsb25lLlMKaW5kZXggMzgyM2VjYy4uZWY3OGFlZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUworKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TCkBAIC0xLDUgKzEsNCBAQAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAvLyBwaWRfdCBfX2Jpb25pY19jbG9uZShpbnQgZmxhZ3MsIHZvaWQqIGNoaWxkX3N0YWNrLCBwaWRfdCogcGFyZW50X3RpZCwgdm9pZCogdGxzLCBwaWRfdCogY2hpbGRfdGlkLCBpbnQgKCpmbikodm9pZCopLCB2b2lkKiBhcmcpOwogRU5UUlkoX19iaW9uaWNfY2xvbmUpCkBAIC03LDkgKzYsMTIgQEAKICAgICAgICAgcHVzaGwgICAlZXNpCiAgICAgICAgIHB1c2hsICAgJWVkaQogCi0gICAgICAgICMgQWxpZ24gY2hpbGQgc3RhY2suCi0gICAgICAgIG1vdmwgICAgMjAoJWVzcCksICVlY3gKLSAgICAgICAgYW5kbCAgICAkfjE1LCAlZWN4CisgICAgICAgICMgTG9hZCBzeXN0ZW0gY2FsbCBhcmd1bWVudHMgaW50byByZWdpc3RlcnMuCisgICAgICAgIG1vdmwgICAgMTYoJWVzcCksICVlYnggICAjIGZsYWdzCisgICAgICAgIG1vdmwgICAgMjAoJWVzcCksICVlY3ggICAjIGNoaWxkX3N0YWNrCisgICAgICAgIG1vdmwgICAgMjQoJWVzcCksICVlZHggICAjIHBhcmVudF90aWQKKyAgICAgICAgbW92bCAgICAyOCglZXNwKSwgJWVzaSAgICMgdGxzCisgICAgICAgIG1vdmwgICAgMzIoJWVzcCksICVlZGkgICAjIGNoaWxkX3RpZAogCiAgICAgICAgICMgQ29weSAnZm4nIGFuZCAnYXJnJyBvbnRvIHRoZSBjaGlsZCBzdGFjawogICAgICAgICBtb3ZsICAgIDM2KCVlc3ApLCAlZWF4ICAgIyBSZWFkICdmbicuCkBAIC0yMCwzNSArMjIsMzIgQEAKIAogICAgICAgICAjIE1ha2UgdGhlIHN5c3RlbSBjYWxsLgogICAgICAgICBtb3ZsICAgICRfX05SX2Nsb25lLCAlZWF4Ci0gICAgICAgIG1vdmwgICAgMTYoJWVzcCksICVlYnggICMgZmxhZ3MKLSAgICAgICAgI21vdmwgICAlZWN4LCAlZWN4ICAgICAgIyBjaGlsZCBzdGFjayAoYWxyZWFkeSB0aGVyZSkKLSAgICAgICAgbW92bCAgICAyNCglZXNwKSwgJWVkeCAgIyBwYXJlbnRfdGlkCi0gICAgICAgIG1vdmwgICAgMjgoJWVzcCksICVlc2kgICMgdGxzCi0gICAgICAgIG1vdmwgICAgMzIoJWVzcCksICVlZGkgICMgY2hpbGRfdGlkCiAgICAgICAgIGludCAgICAgJDB4ODAKIAogICAgICAgICAjIENoZWNrIHJlc3VsdC4KLSAgICAgICAgY21wbCAgICAkMCwgJWVheAotICAgICAgICBqZSAgICAgIGJjX2NoaWxkCi0gICAgICAgIGpnICAgICAgYmNfcGFyZW50CisgICAgICAgIHRlc3RsICAgICVlYXgsICVlYXgKKyAgICAgICAganogICAgICAuTF9iY19jaGlsZAorICAgICAgICBqZyAgICAgIC5MX2JjX3BhcmVudAogCiAgICAgICAgICMgQW4gZXJyb3Igb2NjdXJyZWQsIHNvIHNldCBlcnJubyBhbmQgcmV0dXJuIC0xLgogICAgICAgICBuZWdsICAgICVlYXgKICAgICAgICAgcHVzaGwgICAlZWF4Ci0gICAgICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICAgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgICAgIG9ybCAgICAgJC0xLCAlZWF4Ci0gICAgICAgIGptcCAgICAgYmNfcmV0dXJuCisgICAgICAgIGptcCAgICAgLkxfYmNfcmV0dXJuCiAKLWJjX2NoaWxkOgotICAgICAgICBjYWxsICAgIF9fYmlvbmljX2Nsb25lX2VudHJ5CisuTF9iY19jaGlsZDoKKyAgICAgICAgIyBXZSBkb24ndCB3YW50IGFueW9uZSB0byB1bndpbmQgcGFzdCB0aGlzIHBvaW50LgorICAgICAgICAuY2ZpX3VuZGVmaW5lZCAlZWlwCisgICAgICAgIGNhbGwgICAgX19zdGFydF90aHJlYWQKICAgICAgICAgaGx0CiAKLWJjX3BhcmVudDoKLSAgICAgICAgIyB3ZSdyZSB0aGUgcGFyZW50OyBub3RoaW5nIHRvIGRvLgotYmNfcmV0dXJuOgorLkxfYmNfcGFyZW50OgorICAgICAgICAjIFdlJ3JlIHRoZSBwYXJlbnQ7IG5vdGhpbmcgdG8gZG8uCisuTF9iY19yZXR1cm46CiAgICAgICAgIHBvcGwgICAgJWVkaQogICAgICAgICBwb3BsICAgICVlc2kKICAgICAgICAgcG9wbCAgICAlZWJ4CiAgICAgICAgIHJldAogRU5EKF9fYmlvbmljX2Nsb25lKQorLmhpZGRlbiBfX2Jpb25pY19jbG9uZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19nZXRfc3AuUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL19fZ2V0X3NwLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MzlkNzkuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19nZXRfc3AuUworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLUVOVFJZKF9fZ2V0X3NwKQotICBtb3YgICVlc3AsICVlYXgKLSAgcmV0Ci1FTkQoX19nZXRfc3ApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9fX3NldF90bHMuYyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL19fc2V0X3Rscy5jCmluZGV4IDdlZDRiMDEuLjM4ZWQzYzkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvYmlvbmljL19fc2V0X3Rscy5jCisrKyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL19fc2V0X3Rscy5jCkBAIC0yNSw3NyArMjUsNTAgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KKworI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CiAKKyNpbmNsdWRlIDxhc20vbGR0Lmg+CiAKLXN0cnVjdCB1c2VyX2Rlc2MgewotICAgIHVuc2lnbmVkIGludCAgICBlbnRyeV9udW1iZXI7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGJhc2VfYWRkcjsKLSAgICB1bnNpZ25lZCBpbnQgICAgbGltaXQ7Ci0gICAgdW5zaWduZWQgaW50ICAgIHNlZ18zMmJpdDoxOwotICAgIHVuc2lnbmVkIGludCAgICBjb250ZW50czoyOwotICAgIHVuc2lnbmVkIGludCAgICByZWFkX2V4ZWNfb25seToxOwotICAgIHVuc2lnbmVkIGludCAgICBsaW1pdF9pbl9wYWdlczoxOwotICAgIHVuc2lnbmVkIGludCAgICBzZWdfbm90X3ByZXNlbnQ6MTsKLSAgICB1bnNpZ25lZCBpbnQgICAgdXNlYWJsZToxOwotICAgIHVuc2lnbmVkIGludCAgICBlbXB0eToyNTsKLX07CitleHRlcm4gaW50IF9fc2V0X3RocmVhZF9hcmVhKHN0cnVjdCB1c2VyX2Rlc2MqKTsKIAotZXh0ZXJuIGludCBfX3NldF90aHJlYWRfYXJlYShzdHJ1Y3QgdXNlcl9kZXNjICp1X2luZm8pOworX19MSUJDX0hJRERFTl9fIHZvaWQgX19pbml0X3VzZXJfZGVzYyhzdHJ1Y3QgdXNlcl9kZXNjKiByZXN1bHQsIGJvb2wgYWxsb2NhdGUsIHZvaWQqIGJhc2VfYWRkcikgeworICBpZiAoYWxsb2NhdGUpIHsKKyAgICAvLyBMZXQgdGhlIGtlcm5lbCBjaG9vc2UuCisgICAgcmVzdWx0LT5lbnRyeV9udW1iZXIgPSAtMTsKKyAgfSBlbHNlIHsKKyAgICAvLyBHZXQgdGhlIGV4aXN0aW5nIGVudHJ5IG51bWJlciBmcm9tICVncy4KKyAgICB1aW50MzJfdCBnczsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92dyAlJWdzLCAldzAiIDogIj1xIihncykgLypvdXRwdXQqLyk7CisgICAgcmVzdWx0LT5lbnRyeV9udW1iZXIgPSAoZ3MgJiAweGZmZmYpID4+IDM7CisgIH0KIAotLyogdGhlIGZvbGxvd2luZyBjYW4ndCBiZSBjb25zdCwgc2luY2UgdGhlIGZpcnN0IGNhbGwgd2lsbAotICogdXBkYXRlIHRoZSAnZW50cnlfbnVtYmVyJyBmaWVsZAotICovCi1zdGF0aWMgc3RydWN0IHVzZXJfZGVzYyAgX3Rsc19kZXNjID0KLXsKLSAgICAtMSwKLSAgICAwLAotICAgIDB4MTAwMCwKLSAgICAxLAotICAgIDAsCi0gICAgMCwKLSAgICAxLAotICAgIDAsCi0gICAgMSwKLSAgICAwCi19OworICByZXN1bHQtPmJhc2VfYWRkciA9ICh1aW50cHRyX3QpIGJhc2VfYWRkcjsKIAotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCAgX3Rsc19kZXNjX2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworICByZXN1bHQtPmxpbWl0ID0gUEFHRV9TSVpFOwogCi1zdHJ1Y3QgX3RocmVhZF9hcmVhX2hlYWQgewotICAgIHZvaWQgKnNlbGY7Ci19OwotCi0vKiB3ZSBpbXBsZW1lbnQgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgdGhyb3VnaCB0aGUgZ3M6IHNlZ21lbnQgZGVzY3JpcHRvcgotICogd2UgY3JlYXRlIGEgc2VnbWVudCBkZXNjcmlwdG9yIGZvciB0aGUgdGxzCi0gKi8KLWludCBfX3NldF90bHModm9pZCAqcHRyKQotewotICAgIGludCAgIHJjLCBzZWdtZW50OwotCi0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZfdGxzX2Rlc2NfbG9jayk7Ci0gICAgX3Rsc19kZXNjLmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKXB0cjsKLQotICAgIC8qIFdlIGFsc28gbmVlZCB0byB3cml0ZSB0aGUgbG9jYXRpb24gb2YgdGhlIHRscyB0byBwdHJbMF0gKi8KLSAgICAoKHN0cnVjdCBfdGhyZWFkX2FyZWFfaGVhZCAqKXB0ciktPnNlbGYgPSBwdHI7Ci0KLSAgICByYyA9IF9fc2V0X3RocmVhZF9hcmVhKCAmX3Rsc19kZXNjICk7Ci0gICAgaWYgKHJjICE9IDApCi0gICAgewotICAgICAgICAvKiBjb3VsZCBub3Qgc2V0IHRocmVhZCBsb2NhbCBhcmVhICovCi0gICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfdGxzX2Rlc2NfbG9jayk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICAvKiB0aGlzIHdlaXJkIGNvbXB1dGF0aW9uIGNvbWVzIGZyb20gR0xpYmMgKi8KLSAgICBzZWdtZW50ID0gX3Rsc19kZXNjLmVudHJ5X251bWJlcio4ICsgMzsKLSAgICBhc20gX192b2xhdGlsZV9fICgKLSAgICAgICAgIiAgIG1vdncgJXcwLCAlJWdzIiA6OiAicSIoc2VnbWVudCkKLSAgICApOwotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfdGxzX2Rlc2NfbG9jayk7Ci0KLSAgICByZXR1cm4gMDsKKyAgcmVzdWx0LT5zZWdfMzJiaXQgPSAxOworICByZXN1bHQtPmNvbnRlbnRzID0gTU9ESUZZX0xEVF9DT05URU5UU19EQVRBOworICByZXN1bHQtPnJlYWRfZXhlY19vbmx5ID0gMDsKKyAgcmVzdWx0LT5saW1pdF9pbl9wYWdlcyA9IDE7CisgIHJlc3VsdC0+c2VnX25vdF9wcmVzZW50ID0gMDsKKyAgcmVzdWx0LT51c2VhYmxlID0gMTsKIH0KIAorX19MSUJDX0hJRERFTl9fIGludCBfX3NldF90bHModm9pZCogcHRyKSB7CisgIHN0cnVjdCB1c2VyX2Rlc2MgdGxzX2Rlc2NyaXB0b3I7CisgIF9faW5pdF91c2VyX2Rlc2MoJnRsc19kZXNjcmlwdG9yLCB0cnVlLCBwdHIpOwogCisgIGludCByYyA9IF9fc2V0X3RocmVhZF9hcmVhKCZ0bHNfZGVzY3JpcHRvcik7CisgIGlmIChyYyAhPSAtMSkgeworICAgIC8vIENoYW5nZSAlZ3MgdG8gYmUgbmV3IEdEVCBlbnRyeS4KKyAgICB1aW50MTZfdCB0YWJsZV9pbmRpY2F0b3IgPSAwOyAgLy8gR0RUCisgICAgdWludDE2X3QgcnBsID0gMzsgIC8vIFJlcXVlc3RlZCBwcml2aWxlZ2UgbGV2ZWwKKyAgICB1aW50MTZfdCBzZWxlY3RvciA9ICh0bHNfZGVzY3JpcHRvci5lbnRyeV9udW1iZXIgPDwgMykgfCB0YWJsZV9pbmRpY2F0b3IgfCBycGw7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdncgJXcwLCAlJWdzIiA6IC8qb3V0cHV0Ki8gOiAicSIoc2VsZWN0b3IpIC8qaW5wdXQqLyA6IC8qY2xvYmJlciovKTsKKyAgfQogCisgIHJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL19fc3RhY2tfY2hrX2ZhaWxfbG9jYWwuaCBiL2xpYmMvYXJjaC14ODYvYmlvbmljL19fc3RhY2tfY2hrX2ZhaWxfbG9jYWwuaAppbmRleCA0ZjM2OTlhLi4wYjBmZDdmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L2Jpb25pYy9fX3N0YWNrX2Noa19mYWlsX2xvY2FsLmgKKysrIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19zdGFja19jaGtfZmFpbF9sb2NhbC5oCkBAIC0yNiw2ICsyNiw3IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAKIC8qCiAgICBfX3N0YWNrX2Noa19mYWlsIHJvdXRpbmUgaXMgcnVudGltZSBwYXJ0IG9mIHN0YWNrIHByb3RlY3RvciBjb21waWxlcgpAQCAtNDgsMTMgKzQ5LDkgQEAKICovCiAKICNpZmRlZiBfX2kzODZfXwotI2lmZGVmIF9fUElDX18KIGV4dGVybiB2b2lkIF9fc3RhY2tfY2hrX2ZhaWwoKTsKIAotX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCi12b2lkIF9fc3RhY2tfY2hrX2ZhaWxfbG9jYWwoKQoteworX19MSUJDX0hJRERFTl9fIHZvaWQgX19zdGFja19jaGtfZmFpbF9sb2NhbCgpIHsKICAgX19zdGFja19jaGtfZmFpbCgpOwogfQogI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUwppbmRleCBlOTRhZTkwLi5jZThjMmVhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TCkBAIC0xLDcgKzEsNyBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAvLyB2b2lkIF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24odm9pZCogc3RhY2tCYXNlLCBzaXplX3Qgc3RhY2tTaXplKQotRU5UUlkoX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bikKK0VOVFJZX1BSSVZBVEUoX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bikKICAgLy8gV2UgY2FuIHRyYXNoIHJlZ2lzdGVycyBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gbmV2ZXIgcmV0dXJucy4KICAgbW92IDQoJWVzcCksICVlYnggICAgICAgICAgICAgLy8gc3RhY2tCYXNlCiAgIG1vdiA4KCVlc3ApLCAlZWN4ICAgICAgICAgICAgIC8vIHN0YWNrU2l6ZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX3NldGptcC5TIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX3NldGptcC5TCmluZGV4IDkyMjExMzguLjBiMjU2YTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvYmlvbmljL19zZXRqbXAuUworKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fc2V0am1wLlMKQEAgLTMxLDcgKzMxLDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAvKgogICogQyBsaWJyYXJ5IC0tIF9zZXRqbXAsIF9sb25nam1wCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9mdXRleF94ODYuUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL2Z1dGV4X3g4Ni5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGQyYWQwLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvYmlvbmljL2Z1dGV4X3g4Ni5TCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi0jZGVmaW5lIEZVVEVYX1dBSVQgMAotI2RlZmluZSBGVVRFWF9XQUtFIDEKLQotLy8gaW50IF9fZnV0ZXhfd2FpdCh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCB2YWwsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogdGltZW91dCkKLUVOVFJZKF9fZnV0ZXhfd2FpdCkKLSAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlc2kKLSAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4ICAgICAgICAgICAvKiBmdHggKi8KLSAgICBtb3ZsICAgICRGVVRFWF9XQUlULCAlZWN4Ci0gICAgbW92ICAgICAxNiglZXNwKSwgJWVkeCAgICAgICAgICAgLyogdmFsICovCi0gICAgbW92ICAgICAyMCglZXNwKSwgJWVzaSAgICAgICAgICAgLyogdGltZW91dCAqLwotICAgIG1vdmwgICAgJF9fTlJfZnV0ZXgsICVlYXgKLSAgICBpbnQgICAgICQweDgwCi0gICAgcG9wbCAgICAlZXNpCi0gICAgcG9wbCAgICAlZWJ4Ci0gICAgcmV0Ci1FTkQoX19mdXRleF93YWl0KQotCi0vLyBpbnQgX19mdXRleF93YWtlKHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IGNvdW50KQotRU5UUlkoX19mdXRleF93YWtlKQotICAgIHB1c2hsICAgJWVieAotICAgIG1vdiAgICAgOCglZXNwKSwgJWVieCAgICAgICAgICAgIC8qIGZ0eCAqLwotICAgIG1vdmwgICAgJEZVVEVYX1dBS0UsICVlY3gKLSAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWR4ICAgICAgICAgICAvKiBjb3VudCAqLwotICAgIG1vdmwgICAgJF9fTlJfZnV0ZXgsICVlYXgKLSAgICBpbnQgICAgICQweDgwCi0gICAgcG9wbCAgICAlZWJ4Ci0gICAgcmV0Ci1FTkQoX19mdXRleF93YWtlKQotCi0vLyBpbnQgX19mdXRleF9zeXNjYWxsMyh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCBvcCwgaW50IGNvdW50KQotRU5UUlkoX19mdXRleF9zeXNjYWxsMykKLSAgICBwdXNobCAgICVlYngKLSAgICBtb3ZsICAgIDgoJWVzcCksICVlYnggICAgICAvKiBmdHggKi8KLSAgICBtb3ZsICAgIDEyKCVlc3ApLCAlZWN4ICAgICAgLyogb3AgKi8KLSAgICBtb3ZsICAgIDE2KCVlc3ApLCAlZWR4ICAgICAgLyogdmFsdWUgKi8KLSAgICBtb3ZsICAgICRfX05SX2Z1dGV4LCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIHBvcGwgICAgJWVieAotICAgIHJldAotRU5EKF9fZnV0ZXhfc3lzY2FsbDMpCi0KLS8vIGludCBfX2Z1dGV4X3N5c2NhbGw0KHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IG9wLCBpbnQgdmFsLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqIHRpbWVvdXQpCi1FTlRSWShfX2Z1dGV4X3N5c2NhbGw0KQotICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVzaQotICAgIG1vdmwgICAgMTIoJWVzcCksICVlYnggICAgICAvKiBmdHggKi8KLSAgICBtb3ZsICAgIDE2KCVlc3ApLCAlZWN4ICAgICAgLyogb3AgKi8KLSAgICBtb3ZsICAgIDIwKCVlc3ApLCAlZWR4ICAgICAgLyogdmFsICovCi0gICAgbW92bCAgICAyNCglZXNwKSwgJWVzaSAgICAgIC8qIHRpbWVvdXQgKi8KLSAgICBtb3ZsICAgICRfX05SX2Z1dGV4LCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIHBvcGwgICAgJWVzaQotICAgIHBvcGwgICAgJWVieAotICAgIHJldAotRU5EKF9fZnV0ZXhfc3lzY2FsbDQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9saWJnY2NfY29tcGF0LmMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9saWJnY2NfY29tcGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyMzI2MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL2xpYmdjY19jb21wYXQuYwpAQCAtMCwwICsxLDE1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2VubGliZ2NjX2NvbXBhdC5weSAqLworCitleHRlcm4gY2hhciBfX2RpdmRpMzsKK2V4dGVybiBjaGFyIF9fbW9kZGkzOworZXh0ZXJuIGNoYXIgX19wb3Bjb3VudHNpMjsKK2V4dGVybiBjaGFyIF9fdWRpdmRpMzsKK2V4dGVybiBjaGFyIF9fdW1vZGRpMzsKKwordm9pZCogX19iaW9uaWNfbGliZ2NjX2NvbXBhdF9zeW1ib2xzW10gPSB7CisgICAgJl9fZGl2ZGkzLAorICAgICZfX21vZGRpMywKKyAgICAmX19wb3Bjb3VudHNpMiwKKyAgICAmX191ZGl2ZGkzLAorICAgICZfX3Vtb2RkaTMsCit9OwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvc2V0am1wLlMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9zZXRqbXAuUwppbmRleCBjMGRmNjQ3Li44ZjlkNjdjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L2Jpb25pYy9zZXRqbXAuUworKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9zZXRqbXAuUwpAQCAtMzEsNyArMzEsNyBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIC8qCiAgKiBDIGxpYnJhcnkgLS0gc2V0am1wLCBsb25nam1wCkBAIC00NiwxMSArNDYsNyBAQAogRU5UUlkoc2V0am1wKQogCVBJQ19QUk9MT0dVRQogCXB1c2hsCSQwCi0jaWZkZWYgUElDCi0JY2FsbAlQSUNfUExUKF9DX0xBQkVMKHNpZ2Jsb2NrKSkKLSNlbHNlCi0JY2FsbAlfQ19MQUJFTChzaWdibG9jaykKLSNlbmRpZgorCWNhbGwJUElDX1BMVChzaWdibG9jaykKIAlhZGRsCSQ0LCVlc3AKIAlQSUNfRVBJTE9HVUUKIApAQCAtNzEsMTEgKzY3LDcgQEAKIAltb3ZsCTQoJWVzcCksJWVkeAogCVBJQ19QUk9MT0dVRQogCXB1c2hsCTI0KCVlZHgpCi0jaWZkZWYgUElDCi0JY2FsbAlQSUNfUExUKF9DX0xBQkVMKHNpZ3NldG1hc2spKQotI2Vsc2UKLQljYWxsCV9DX0xBQkVMKHNpZ3NldG1hc2spCi0jZW5kaWYKKwljYWxsCVBJQ19QTFQoc2lnc2V0bWFzaykKIAlhZGRsCSQ0LCVlc3AKIAlQSUNfRVBJTE9HVUUKIApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvc2lnc2V0am1wLlMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9zaWdzZXRqbXAuUwppbmRleCA3MGNjNmRiLi4yNTBjNjA2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L2Jpb25pYy9zaWdzZXRqbXAuUworKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9zaWdzZXRqbXAuUwpAQCAtMzEsNyArMzEsNyBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNpZ3NldGptcCkKIAltb3ZsCTQoJWVzcCksJWVjeApAQCAtNDIsMTEgKzQyLDcgQEAKIAogCVBJQ19QUk9MT0dVRQogCXB1c2hsCSQwCi0jaWZkZWYgUElDCi0JY2FsbAlQSUNfUExUKF9DX0xBQkVMKHNpZ2Jsb2NrKSkKLSNlbHNlCi0JY2FsbAlfQ19MQUJFTChzaWdibG9jaykKLSNlbmRpZgorCWNhbGwJUElDX1BMVChzaWdibG9jaykKIAlhZGRsCSQ0LCVlc3AKIAlQSUNfRVBJTE9HVUUKIApAQCAtNzAsMTEgKzY2LDcgQEAKIAogCVBJQ19QUk9MT0dVRQogCXB1c2hsCTI0KCVlZHgpCi0jaWZkZWYgUElDCi0JY2FsbAlQSUNfUExUKF9DX0xBQkVMKHNpZ3NldG1hc2spKQotI2Vsc2UKLQljYWxsCV9DX0xBQkVMKHNpZ3NldG1hc2spCi0jZW5kaWYKKwljYWxsCVBJQ19QTFQoc2lnc2V0bWFzaykKIAlhZGRsCSQ0LCVlc3AKIAlQSUNfRVBJTE9HVUUKIApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvc3lzY2FsbC5TIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvc3lzY2FsbC5TCmluZGV4IDAxNzhmNDEuLmY4NWVjMzkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvYmlvbmljL3N5c2NhbGwuUworKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9zeXNjYWxsLlMKQEAgLTM4LDkgKzM4LDggQEAKICAgICAjIFllcywgc28gc2V0IGVycm5vLgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgICMgUmVzdG9yZSB0aGUgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgogICAgIHBvcCAgICAlZWJwCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy92Zm9yay5TIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvdmZvcmsuUwppbmRleCBlYzZmNmNhLi42YzAyOTEwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L2Jpb25pYy92Zm9yay5TCisrKyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL3Zmb3JrLlMKQEAgLTM4LDggKzM4LDcgQEAKICAgamIgICAgICAxZgogICBuZWdsICAgICVlYXgKICAgcHVzaGwgICAlZWF4Ci0gIGNhbGwgICAgX19zZXRfZXJybm8KLSAgb3JsICAgICAkLTEsICVlYXgKKyAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKLSAgICBqbXAgICAgIColZWN4ICAvLyBKdW1wIHRvIHRoZSBzdG9yZWQgcmV0dXJuIGFkZHJlc3MuCisgIGptcCAgICAgKiVlY3ggIC8vIEp1bXAgdG8gdGhlIHN0b3JlZCByZXR1cm4gYWRkcmVzcy4KIEVORCh2Zm9yaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvZ2VuZXJpYy9nZW5lcmljLm1rIGIvbGliYy9hcmNoLXg4Ni9nZW5lcmljL2dlbmVyaWMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlZTVkYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvZ2VuZXJpYy9nZW5lcmljLm1rCkBAIC0wLDAgKzEsNTIgQEAKK2xpYmNfYmlvbmljX3NyY19maWxlc194ODYgKz0gXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItbWVtY2hyLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1tZW1yY2hyLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1zdHJjaHItYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXN0cm5sZW4tYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXN0cnJjaHItYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXdjc2Noci1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItd2NzcmNoci1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItd2NzbGVuLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi13Y3NjbXAtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLWJjb3B5LXNsbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLWJ6ZXJvLXNsbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLW1lbWNweS1zbG0uUyBcCisgICAgYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1tZW1tb3ZlLXNsbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLW1lbXNldC1zbG0uUyBcCisgICAgYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHBjcHktc2xtLlMgXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItc3RwbmNweS1zbG0uUyBcCisgICAgYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHJjcHktc2xtLlMgXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItc3RybGVuLXNsbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cm5jcHktc2xtLlMKKworaWZlcSAoJChBUkNIX1g4Nl9IQVZFX1NTU0UzKSx0cnVlKQorbGliY19iaW9uaWNfc3JjX2ZpbGVzX3g4NiArPSBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RybmNhdC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmxjYXQtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJsY3B5LWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RyY21wLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RybmNtcC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmNhdC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXdjc2NhdC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXdjc2NweS1hdG9tLlMKK2Vsc2UKK2xpYmNfYmlvbmljX3NyY19maWxlc194ODYgKz0gXAorICAgIGFyY2gteDg2L2dlbmVyaWMvc3RyaW5nL3N0cmNtcC5TIFwKKyAgICBhcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9zdHJuY21wLlMgXAorICAgIGFyY2gteDg2L2dlbmVyaWMvc3RyaW5nL3N0cmNhdC5TIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjcHkuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2F0LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmxjYXQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybGNweS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJuY2F0LmMKK2VuZGlmCisKK2lmZXEgKCQoQVJDSF9YODZfSEFWRV9TU0U0KSx0cnVlKQorIGxpYmNfYmlvbmljX3NyY19maWxlc194ODYgKz0gXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTQtbWVtY21wLXNsbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2U0LXdtZW1jbXAtc2xtLlMKK2Vsc2UKK2xpYmNfYmlvbmljX3NyY19maWxlc194ODYgKz0gXAorICAgIGFyY2gteDg2L2dlbmVyaWMvc3RyaW5nL21lbWNtcC5TIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtY21wLmMKK2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2dlbmVyaWMvc3RyaW5nL2Jjb3B5LlMgYi9saWJjL2FyY2gteDg2L2dlbmVyaWMvc3RyaW5nL2Jjb3B5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQyNWM1OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvZ2VuZXJpYy9zdHJpbmcvYmNvcHkuUwpAQCAtMCwwICsxLDk4IEBACisvKgkkT3BlbkJTRDogYmNvcHkuUyx2IDEuNSAyMDA1LzA4LzA3IDExOjMwOjM4IGVzcGllIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gbG9jb3JlLnMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworCS8qCisJICogKG92KWJjb3B5IChzcmMsZHN0LGNudCkKKwkgKiAgd3NAdG9vbHMuZGUgICAgIChXb2xmZ2FuZyBTb2xmcmFuaywgVG9vTHMgR21iSCkgKzQ5LTIyOC05ODU4MDAKKwkgKi8KKworI2lmIGRlZmluZWQoTUVNQ09QWSkKK0VOVFJZKG1lbWNweSkKKyNlbGlmIGRlZmluZWQoTUVNTU9WRSkKK0VOVFJZKG1lbW1vdmUpCisjZWxzZQorRU5UUlkoYmNvcHkpCisjZW5kaWYKKwlwdXNobAklZXNpCisJcHVzaGwJJWVkaQorI2lmIGRlZmluZWQoTUVNQ09QWSkgfHwgZGVmaW5lZChNRU1NT1ZFKQorCW1vdmwJMTIoJWVzcCksJWVkaQorCW1vdmwJMTYoJWVzcCksJWVzaQorCW1vdmwJJWVkaSwgJWVheAorI2Vsc2UKKwltb3ZsCTEyKCVlc3ApLCVlc2kKKwltb3ZsCTE2KCVlc3ApLCVlZGkKKyNlbmRpZgorCW1vdmwJMjAoJWVzcCksJWVjeAorCW1vdmwJJWVjeCwlZWR4CisJY21wbAklZXNpLCVlZGkJLyogcG90ZW50aWFsbHkgb3ZlcmxhcHBpbmc/ICovCisJam5iCTFmCisJY2xkCQkJLyogbm9wZSwgY29weSBmb3J3YXJkcy4gKi8KKwlzaHJsCSQyLCVlY3gJCS8qIGNvcHkgYnkgd29yZHMgKi8KKwlyZXAKKwltb3ZzbAorCW1vdmwJJWVkeCwlZWN4CisJYW5kbAkkMywlZWN4CQkvKiBhbnkgYnl0ZXMgbGVmdD8gKi8KKwlyZXAKKwltb3ZzYgorCXBvcGwJJWVkaQorCXBvcGwJJWVzaQorCXJldAorMToKKwlhZGRsCSVlY3gsJWVkaQkvKiBjb3B5IGJhY2t3YXJkcy4gKi8KKwlhZGRsCSVlY3gsJWVzaQorCXN0ZAorCWFuZGwJJDMsJWVjeAkJLyogYW55IGZyYWN0aW9uYWwgYnl0ZXM/ICovCisJZGVjbAklZWRpCisJZGVjbAklZXNpCisJcmVwCisJbW92c2IKKwltb3ZsCSVlZHgsJWVjeAorCXNocmwJJDIsJWVjeAorCXN1YmwJJDMsJWVzaQorCXN1YmwJJDMsJWVkaQorCXJlcAorCW1vdnNsCisJcG9wbAklZWRpCisJcG9wbAklZXNpCisJY2xkCisJcmV0CisjaWYgZGVmaW5lZChNRU1DT1BZKQorRU5EKG1lbWNweSkKKyNlbGlmIGRlZmluZWQoTUVNTU9WRSkKK0VORChtZW1tb3ZlKQorI2Vsc2UKK0VORChiY29weSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9tZW1jbXAuUyBiL2xpYmMvYXJjaC14ODYvZ2VuZXJpYy9zdHJpbmcvbWVtY21wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYzNmI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvZ2VuZXJpYy9zdHJpbmcvbWVtY21wLlMKQEAgLTAsMCArMSw0NCBAQAorLyoJJE9wZW5CU0Q6IG1lbWNtcC5TLHYgMS40IDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKG1lbWNtcCkKKwlwdXNobAklZWRpCisJcHVzaGwJJWVzaQorCW1vdmwJMTIoJWVzcCksJWVkaQorCW1vdmwJMTYoJWVzcCksJWVzaQorCWNsZAkJCQkvKiBzZXQgY29tcGFyZSBkaXJlY3Rpb24gZm9yd2FyZCAqLworCisJbW92bAkyMCglZXNwKSwlZWN4CQkvKiBjb21wYXJlIGJ5IHdvcmRzICovCisJc2hybAkkMiwlZWN4CisJcmVwZQorCWNtcHNsCisJam5lCUw1CQkJLyogZG8gd2UgbWF0Y2ggc28gZmFyPyAqLworCisJbW92bAkyMCglZXNwKSwlZWN4CQkvKiBjb21wYXJlIHJlbWFpbmRlciBieSBieXRlcyAqLworCWFuZGwJJDMsJWVjeAorCXJlcGUKKwljbXBzYgorCWpuZQlMNgkJCS8qIGRvIHdlIG1hdGNoPyAqLworCisJeG9ybAklZWF4LCVlYXgJCS8qIHdlIG1hdGNoLCByZXR1cm4gemVybwkqLworCXBvcGwJJWVzaQorCXBvcGwJJWVkaQorCXJldAorCitMNToJbW92bAkkNCwlZWN4CQkJLyogV2Uga25vdyB0aGF0IG9uZSBvZiB0aGUgbmV4dAkqLworCXN1YmwJJWVjeCwlZWRpCQkvKiBmb3VyIHBhaXJzIG9mIGJ5dGVzIGRvIG5vdAkqLworCXN1YmwJJWVjeCwlZXNpCQkvKiBtYXRjaC4JCQkqLworCXJlcGUKKwljbXBzYgorTDY6CW1vdnpibCAgLTEoJWVkaSksJWVheAkJLyogUGVyZm9ybSB1bnNpZ25lZCBjb21wYXJpc29uCSovCisJbW92emJsCS0xKCVlc2kpLCVlZHgKKwlzdWJsCSVlZHgsJWVheAorCXBvcGwJJWVzaQorCXBvcGwJJWVkaQorCXJldAorRU5EKG1lbWNtcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNweS5TIGIvbGliYy9hcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9tZW1jcHkuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9hcmNoLXg4Ni9zdHJpbmcvbWVtY3B5LlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvZ2VuZXJpYy9zdHJpbmcvbWVtY3B5LlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbW1vdmUuUyBiL2xpYmMvYXJjaC14ODYvZ2VuZXJpYy9zdHJpbmcvbWVtbW92ZS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9tZW1tb3ZlLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvZ2VuZXJpYy9zdHJpbmcvbWVtbW92ZS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2dlbmVyaWMvc3RyaW5nL3N0cmNhdC5TIGIvbGliYy9hcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9zdHJjYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWU4ZWVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9zdHJjYXQuUwpAQCAtMCwwICsxLDc0IEBACisvKgkkT3BlbkJTRDogc3RyY2F0LlMsdiAxLjggMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLworLyoKKyAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCisgKiBQdWJsaWMgZG9tYWluLgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworI2lmIGRlZmluZWQoQVBJV0FSTikKKyNBUFAKKwkuc2VjdGlvbiAuZ251Lndhcm5pbmcuc3RyY2F0CisJLmFzY2lpICJ3YXJuaW5nOiBzdHJjYXQoKSBpcyBhbG1vc3QgYWx3YXlzIG1pc3VzZWQsIHBsZWFzZSB1c2Ugc3RybGNhdCgpIgorI05PX0FQUAorI2VuZGlmCisKKy8qCisgKiBOT1RFOiBJJ3ZlIHVucm9sbGVkIHRoZSBsb29wIGVpZ2h0IHRpbWVzOiBsYXJnZSBlbm91Z2ggdG8gbWFrZSBhCisgKiBzaWduaWZpY2FudCBkaWZmZXJlbmNlLCBhbmQgc21hbGwgZW5vdWdoIG5vdCB0byB0b3RhbGx5IHRyYXNoIHRoZQorICogY2FjaGUuCisgKi8KKworRU5UUlkoc3RyY2F0KQorCXB1c2hsCSVlZGkJCQkvKiBzYXZlIGVkaSAqLworCW1vdmwJOCglZXNwKSwlZWRpCQkvKiBkc3QgYWRkcmVzcyAqLworCW1vdmwJMTIoJWVzcCksJWVkeAkJLyogc3JjIGFkZHJlc3MgKi8KKwlwdXNobAklZWRpCQkJLyogcHVzaCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisKKwljbGQJCQkJLyogc2V0IHNlYXJjaCBmb3J3YXJkICovCisJeG9ybAklZWF4LCVlYXgJCS8qIHNldCBzZWFyY2ggZm9yIG51bGwgdGVybWluYXRvciAqLworCW1vdmwJJC0xLCVlY3gJCS8qIHNldCBzZWFyY2ggZm9yIGxvdHMgb2YgY2hhcmFjdGVycyAqLworCXJlcG5lCQkJCS8qIHNlYXJjaCEgKi8KKwlzY2FzYgorCisJbGVhbAktMSglZWRpKSwlZWN4CQkvKiBjb3JyZWN0IGRzdCBhZGRyZXNzICovCisKKwkuYWxpZ24gMiwweDkwCitMMToJbW92YgkoJWVkeCksJWFsCQkvKiB1bnJvbGwgbG9vcCwgYnV0IG5vdCB0b28gbXVjaCAqLworCW1vdmIJJWFsLCglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJMSglZWR4KSwlYWwKKwltb3ZiCSVhbCwxKCVlY3gpCisJdGVzdGIJJWFsLCVhbAorCWp6CUwyCisJbW92YgkyKCVlZHgpLCVhbAorCW1vdmIJJWFsLDIoJWVjeCkKKwl0ZXN0YgklYWwsJWFsCisJanoJTDIKKwltb3ZiCTMoJWVkeCksJWFsCisJbW92YgklYWwsMyglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJNCglZWR4KSwlYWwKKwltb3ZiCSVhbCw0KCVlY3gpCisJdGVzdGIJJWFsLCVhbAorCWp6CUwyCisJbW92Ygk1KCVlZHgpLCVhbAorCW1vdmIJJWFsLDUoJWVjeCkKKwl0ZXN0YgklYWwsJWFsCisJanoJTDIKKwltb3ZiCTYoJWVkeCksJWFsCisJbW92YgklYWwsNiglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJNyglZWR4KSwlYWwKKwltb3ZiCSVhbCw3KCVlY3gpCisJYWRkbAkkOCwlZWR4CisJYWRkbAkkOCwlZWN4CisJdGVzdGIJJWFsLCVhbAorCWpueglMMQorTDI6CXBvcGwJJWVheAkJCS8qIHBvcCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisJcG9wbAklZWRpCQkJLyogcmVzdG9yZSBlZGkgKi8KKwlyZXQKK0VORChzdHJjYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2dlbmVyaWMvc3RyaW5nL3N0cmNtcC5TIGIvbGliYy9hcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9zdHJjbXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODBmNGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9zdHJjbXAuUwpAQCAtMCwwICsxLDgyIEBACisvKgkkT3BlbkJTRDogc3RyY21wLlMsdiAxLjMgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLworLyoKKyAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCisgKiBQdWJsaWMgZG9tYWluLgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworLyoKKyAqIE5PVEU6IEkndmUgdW5yb2xsZWQgdGhlIGxvb3AgZWlnaHQgdGltZXM6IGxhcmdlIGVub3VnaCB0byBtYWtlIGEKKyAqIHNpZ25pZmljYW50IGRpZmZlcmVuY2UsIGFuZCBzbWFsbCBlbm91Z2ggbm90IHRvIHRvdGFsbHkgdHJhc2ggdGhlCisgKiBjYWNoZS4KKyAqLworCitFTlRSWShzdHJjbXApCisJbW92bAkweDA0KCVlc3ApLCVlYXgKKwltb3ZsCTB4MDgoJWVzcCksJWVkeAorCWptcAlMMgkJCS8qIEp1bXAgaW50byB0aGUgbG9vcCEgKi8KKworCS5hbGlnbgkyLDB4OTAKK0wxOglpbmNsCSVlYXgKKwlpbmNsCSVlZHgKK0wyOgltb3ZiCSglZWF4KSwlY2wKKwl0ZXN0YgklY2wsJWNsCQkJLyogbnVsbCB0ZXJtaW5hdG9yPz8/ICovCisJanoJTDMKKwljbXBiCSVjbCwoJWVkeCkJCS8qIGNoYXJzIG1hdGNoPz8/ICovCisJam5lCUwzCisJaW5jbAklZWF4CisJaW5jbAklZWR4CisJbW92YgkoJWVheCksJWNsCisJdGVzdGIJJWNsLCVjbAorCWp6CUwzCisJY21wYgklY2wsKCVlZHgpCisJam5lCUwzCisJaW5jbAklZWF4CisJaW5jbAklZWR4CisJbW92YgkoJWVheCksJWNsCisJdGVzdGIJJWNsLCVjbAorCWp6CUwzCisJY21wYgklY2wsKCVlZHgpCisJam5lCUwzCisJaW5jbAklZWF4CisJaW5jbAklZWR4CisJbW92YgkoJWVheCksJWNsCisJdGVzdGIJJWNsLCVjbAorCWp6CUwzCisJY21wYgklY2wsKCVlZHgpCisJam5lCUwzCisJaW5jbAklZWF4CisJaW5jbAklZWR4CisJbW92YgkoJWVheCksJWNsCisJdGVzdGIJJWNsLCVjbAorCWp6CUwzCisJY21wYgklY2wsKCVlZHgpCisJam5lCUwzCisJaW5jbAklZWF4CisJaW5jbAklZWR4CisJbW92YgkoJWVheCksJWNsCisJdGVzdGIJJWNsLCVjbAorCWp6CUwzCisJY21wYgklY2wsKCVlZHgpCisJam5lCUwzCisJaW5jbAklZWF4CisJaW5jbAklZWR4CisJbW92YgkoJWVheCksJWNsCisJdGVzdGIJJWNsLCVjbAorCWp6CUwzCisJY21wYgklY2wsKCVlZHgpCisJam5lCUwzCisJaW5jbAklZWF4CisJaW5jbAklZWR4CisJbW92YgkoJWVheCksJWNsCisJdGVzdGIJJWNsLCVjbAorCWp6CUwzCisJY21wYgklY2wsKCVlZHgpCisJamUJTDEKKwkuYWxpZ24gMiwgMHg5MAorTDM6CW1vdnpibAkoJWVheCksJWVheAkJLyogdW5zaWduZWQgY29tcGFyaXNvbiAqLworCW1vdnpibAkoJWVkeCksJWVkeAorCXN1YmwJJWVkeCwlZWF4CisJcmV0CitFTkQoc3RyY21wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9zdHJuY21wLlMgYi9saWJjL2FyY2gteDg2L2dlbmVyaWMvc3RyaW5nL3N0cm5jbXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmE4M2ExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9zdHJuY21wLlMKQEAgLTAsMCArMSwxMTQgQEAKKy8qCSRPcGVuQlNEOiBzdHJuY21wLlMsdiAxLjMgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLworLyoKKyAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCisgKiBQdWJsaWMgZG9tYWluLgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworLyoKKyAqIE5PVEU6IEkndmUgdW5yb2xsZWQgdGhlIGxvb3AgZWlnaHQgdGltZXM6IGxhcmdlIGVub3VnaCB0byBtYWtlIGEKKyAqIHNpZ25pZmljYW50IGRpZmZlcmVuY2UsIGFuZCBzbWFsbCBlbm91Z2ggbm90IHRvIHRvdGFsbHkgdHJhc2ggdGhlCisgKiBjYWNoZS4KKyAqLworCitFTlRSWShzdHJuY21wKQorCXB1c2hsCSVlYngKKwltb3ZsCTgoJWVzcCksJWVheAorCW1vdmwJMTIoJWVzcCksJWVjeAorCW1vdmwJMTYoJWVzcCksJWVkeAorCXRlc3RsCSVlZHgsJWVkeAorCWptcAlMMgkJCS8qIEp1bXAgaW50byB0aGUgbG9vcCEgKi8KKworCS5hbGlnbiAyLDB4OTAKK0wxOglpbmNsCSVlYXgKKwlpbmNsCSVlY3gKKwlkZWNsCSVlZHgKK0wyOglqeglMNAkJCS8qIHN0cmluZ3MgYXJlIGVxdWFsICovCisJbW92YgkoJWVheCksJWJsCisJdGVzdGIJJWJsLCVibAorCWp6CUwzCisJY21wYgklYmwsKCVlY3gpCisJam5lCUwzCisKKwlpbmNsCSVlYXgKKwlpbmNsCSVlY3gKKwlkZWNsCSVlZHgKKwlqeglMNAorCW1vdmIJKCVlYXgpLCVibAorCXRlc3RiCSVibCwlYmwKKwlqeglMMworCWNtcGIJJWJsLCglZWN4KQorCWpuZQlMMworCisJaW5jbAklZWF4CisJaW5jbAklZWN4CisJZGVjbAklZWR4CisJanoJTDQKKwltb3ZiCSglZWF4KSwlYmwKKwl0ZXN0YgklYmwsJWJsCisJanoJTDMKKwljbXBiCSVibCwoJWVjeCkKKwlqbmUJTDMKKworCWluY2wJJWVheAorCWluY2wJJWVjeAorCWRlY2wJJWVkeAorCWp6CUw0CisJbW92YgkoJWVheCksJWJsCisJdGVzdGIJJWJsLCVibAorCWp6CUwzCisJY21wYgklYmwsKCVlY3gpCisJam5lCUwzCisKKwlpbmNsCSVlYXgKKwlpbmNsCSVlY3gKKwlkZWNsCSVlZHgKKwlqeglMNAorCW1vdmIJKCVlYXgpLCVibAorCXRlc3RiCSVibCwlYmwKKwlqeglMMworCWNtcGIJJWJsLCglZWN4KQorCWpuZQlMMworCisJaW5jbAklZWF4CisJaW5jbAklZWN4CisJZGVjbAklZWR4CisJanoJTDQKKwltb3ZiCSglZWF4KSwlYmwKKwl0ZXN0YgklYmwsJWJsCisJanoJTDMKKwljbXBiCSVibCwoJWVjeCkKKwlqbmUJTDMKKworCWluY2wJJWVheAorCWluY2wJJWVjeAorCWRlY2wJJWVkeAorCWp6CUw0CisJbW92YgkoJWVheCksJWJsCisJdGVzdGIJJWJsLCVibAorCWp6CUwzCisJY21wYgklYmwsKCVlY3gpCisJam5lCUwzCisKKwlpbmNsCSVlYXgKKwlpbmNsCSVlY3gKKwlkZWNsCSVlZHgKKwlqeglMNAorCW1vdmIJKCVlYXgpLCVibAorCXRlc3RiCSVibCwlYmwKKwlqeglMMworCWNtcGIJJWJsLCglZWN4KQorCWplCUwxCisKKwkuYWxpZ24gMiwweDkwCitMMzoJbW92emJsCSglZWF4KSwlZWF4CQkvKiB1bnNpZ25lZCBjb21wYXJpc2lvbiAqLworCW1vdnpibAkoJWVjeCksJWVjeAorCXN1YmwJJWVjeCwlZWF4CisJcG9wbAklZWJ4CisJcmV0CisJLmFsaWduIDIsMHg5MAorTDQ6CXhvcmwJJWVheCwlZWF4CisJcG9wbAklZWJ4CisJcmV0CitFTkQoc3RybmNtcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MDZmNzguLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IF90eXBlcy5oLHYgMS4yIDIwMDYvMDEvMTMgMTc6NTA6MDYgbWlsbGVydCBFeHAgJAkqLwotCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqCUAoIyl0eXBlcy5oCTguMyAoQmVya2VsZXkpIDEvNS85NAotICoJQCgjKWFuc2kuaAk4LjIgKEJlcmtlbGV5KSAxLzQvOTQKLSAqLwotCi0jaWZuZGVmIF9JMzg2X19UWVBFU19IXwotI2RlZmluZSBfSTM4Nl9fVFlQRVNfSF8KLQotLyogNy4xOC4xLjEgRXhhY3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLwotdHlwZWRlZglfX3NpZ25lZCBjaGFyCQlfX2ludDhfdDsKLXR5cGVkZWYJdW5zaWduZWQgY2hhcgkJX191aW50OF90OwotdHlwZWRlZglzaG9ydAkJCV9faW50MTZfdDsKLXR5cGVkZWYJdW5zaWduZWQgc2hvcnQJCV9fdWludDE2X3Q7Ci10eXBlZGVmCWludAkJCV9faW50MzJfdDsKLXR5cGVkZWYJdW5zaWduZWQgaW50CQlfX3VpbnQzMl90OwotLyogTE9OR0xPTkcgKi8KLXR5cGVkZWYJbG9uZyBsb25nCQlfX2ludDY0X3Q7Ci0vKiBMT05HTE9ORyAqLwotdHlwZWRlZgl1bnNpZ25lZCBsb25nIGxvbmcJX191aW50NjRfdDsKLQotLyogNy4xOC4xLjIgTWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzICovCi10eXBlZGVmCV9faW50OF90CQlfX2ludF9sZWFzdDhfdDsKLXR5cGVkZWYJX191aW50OF90CQlfX3VpbnRfbGVhc3Q4X3Q7Ci10eXBlZGVmCV9faW50MTZfdAkJX19pbnRfbGVhc3QxNl90OwotdHlwZWRlZglfX3VpbnQxNl90CQlfX3VpbnRfbGVhc3QxNl90OwotdHlwZWRlZglfX2ludDMyX3QJCV9faW50X2xlYXN0MzJfdDsKLXR5cGVkZWYJX191aW50MzJfdAkJX191aW50X2xlYXN0MzJfdDsKLXR5cGVkZWYJX19pbnQ2NF90CQlfX2ludF9sZWFzdDY0X3Q7Ci10eXBlZGVmCV9fdWludDY0X3QJCV9fdWludF9sZWFzdDY0X3Q7Ci0KLS8qIDcuMTguMS4zIEZhc3Rlc3QgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzICovCi10eXBlZGVmCV9faW50MzJfdAkJX19pbnRfZmFzdDhfdDsKLXR5cGVkZWYJX191aW50MzJfdAkJX191aW50X2Zhc3Q4X3Q7Ci10eXBlZGVmCV9faW50MzJfdAkJX19pbnRfZmFzdDE2X3Q7Ci10eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9mYXN0MTZfdDsKLXR5cGVkZWYJX19pbnQzMl90CQlfX2ludF9mYXN0MzJfdDsKLXR5cGVkZWYJX191aW50MzJfdAkJX191aW50X2Zhc3QzMl90OwotdHlwZWRlZglfX2ludDY0X3QJCV9faW50X2Zhc3Q2NF90OwotdHlwZWRlZglfX3VpbnQ2NF90CQlfX3VpbnRfZmFzdDY0X3Q7Ci0KLS8qIDcuMTguMS40IEludGVnZXIgdHlwZXMgY2FwYWJsZSBvZiBob2xkaW5nIG9iamVjdCBwb2ludGVycyAqLwotdHlwZWRlZglpbnQgCQkJX19pbnRwdHJfdDsKLXR5cGVkZWYJdW5zaWduZWQgaW50IAlfX3VpbnRwdHJfdDsKLQotLyogNy4xOC4xLjUgR3JlYXRlc3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLwotdHlwZWRlZglfX2ludDY0X3QJCV9faW50bWF4X3Q7Ci10eXBlZGVmCV9fdWludDY0X3QJCV9fdWludG1heF90OwotCi0vKiBSZWdpc3RlciBzaXplICovCi10eXBlZGVmIF9faW50MzJfdAkJX19yZWdpc3Rlcl90OwotCi0vKiBWTSBzeXN0ZW0gdHlwZXMgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZwkJX192YWRkcl90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3BhZGRyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fdnNpemVfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZwkJX19wc2l6ZV90OwotCi0vKiBTdGFuZGFyZCBzeXN0ZW0gdHlwZXMgKi8KLXR5cGVkZWYgaW50CQkJX19jbG9ja190OwotdHlwZWRlZiBpbnQJCQlfX2Nsb2NraWRfdDsKLXR5cGVkZWYgZG91YmxlCQkJX19kb3VibGVfdDsKLXR5cGVkZWYgZmxvYXQJCQlfX2Zsb2F0X3Q7Ci10eXBlZGVmIGxvbmcJCQlfX3B0cmRpZmZfdDsKLXR5cGVkZWYJaW50CQkJX190aW1lX3Q7Ci10eXBlZGVmIGludAkJCV9fdGltZXJfdDsKLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCi10eXBlZGVmCV9fYnVpbHRpbl92YV9saXN0CV9fdmFfbGlzdDsKLSNlbHNlCi10eXBlZGVmCWNoYXIgKgkJCV9fdmFfbGlzdDsKLSNlbmRpZgotCi0vKiBXaWRlIGNoYXJhY3RlciBzdXBwb3J0IHR5cGVzICovCi0jaWZuZGVmIF9fY3BsdXNwbHVzCi10eXBlZGVmCWludAkJCV9fd2NoYXJfdDsKLSNlbmRpZgotdHlwZWRlZiBpbnQJCQlfX3dpbnRfdDsKLXR5cGVkZWYJaW50CQkJX19ydW5lX3Q7Ci10eXBlZGVmCXZvaWQgKgkJCV9fd2N0cmFuc190OwotdHlwZWRlZgl2b2lkICoJCQlfX3djdHlwZV90OwotCi0vKiBGZWF0dXJlIHRlc3QgbWFjcm9zICovCi0jZGVmaW5lIF9fSEFWRV9DUFVJTkZPCi0jZGVmaW5lIF9fSEFWRV9NVVRFWAotCi0jZW5kaWYJLyogX0kzODZfX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9hc20uaCBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCmluZGV4IDVjY2Y3OGYuLjY3MjQ5M2QgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCisrKyBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCkBAIC0zNyw1MCArMzcsMTcgQEAKICNpZm5kZWYgX0kzODZfQVNNX0hfCiAjZGVmaW5lIF9JMzg2X0FTTV9IXwogCi0jaWZkZWYgX0tFUk5FTF9PUFQKLSNpbmNsdWRlICJvcHRfbXVsdGlwcm9jZXNzb3IuaCIKLSNlbmRpZgotCi0jaWZkZWYgUElDCiAjZGVmaW5lIFBJQ19QUk9MT0dVRQlcCiAJcHVzaGwJJWVieDsJXAotCWNhbGwJMWY7CVwKLTE6CQkJXAorCWNhbGwJNjY2ZjsJXAorNjY2OgkJCVwKIAlwb3BsCSVlYng7CVwKLQlhZGRsCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tMWJdLCAlZWJ4CisJYWRkbAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLTY2NmJdLCAlZWJ4CiAjZGVmaW5lIFBJQ19FUElMT0dVRQlcCiAJcG9wbAklZWJ4CiAjZGVmaW5lIFBJQ19QTFQoeCkJeEBQTFQKICNkZWZpbmUgUElDX0dPVCh4KQl4QEdPVCglZWJ4KQogI2RlZmluZSBQSUNfR09UT0ZGKHgpCXhAR09UT0ZGKCVlYngpCi0jZWxzZQotI2RlZmluZSBQSUNfUFJPTE9HVUUKLSNkZWZpbmUgUElDX0VQSUxPR1VFCi0jZGVmaW5lIFBJQ19QTFQoeCkJeAotI2RlZmluZSBQSUNfR09UKHgpCXgKLSNkZWZpbmUgUElDX0dPVE9GRih4KQl4Ci0jZW5kaWYKLQotI2lmZGVmIF9fRUxGX18KLSMgZGVmaW5lIF9DX0xBQkVMKHgpCXgKLSNlbHNlCi0jIGlmZGVmIF9fU1REQ19fCi0jICBkZWZpbmUgX0NfTEFCRUwoeCkJXyAjIyB4Ci0jIGVsc2UKLSMgIGRlZmluZSBfQ19MQUJFTCh4KQlfLyoqL3gKLSMgZW5kaWYKLSNlbmRpZgotI2RlZmluZQlfQVNNX0xBQkVMKHgpCXgKLQotI2RlZmluZSBDVkFST0ZGKHgsIHkpCQlfQ19MQUJFTCh4KSArIHkKLQotI2lmZGVmIF9fU1REQ19fCi0jIGRlZmluZSBfX0NPTkNBVCh4LHkpCXggIyMgeQotIyBkZWZpbmUgX19TVFJJTkcoeCkJI3gKLSNlbHNlCi0jIGRlZmluZSBfX0NPTkNBVCh4LHkpCXgvKioveQotIyBkZWZpbmUgX19TVFJJTkcoeCkJIngiCi0jZW5kaWYKIAogLyogbGV0IGtlcm5lbHMgYW5kIG90aGVycyBvdmVycmlkZSBlbnRyeXBvaW50IGFsaWdubWVudCAqLwogI2lmICFkZWZpbmVkKF9BTElHTl9URVhUKSAmJiAhZGVmaW5lZChfS0VSTkVMKQpAQCAtOTMsMTI2ICs2MCw0IEBACiAjIGVuZGlmCiAjZW5kaWYKIAotI2RlZmluZSBfRU5UUlkoeCkgXAotCS50ZXh0OyBfQUxJR05fVEVYVDsgLmdsb2JsIHg7IC50eXBlIHgsQGZ1bmN0aW9uOyB4OiAuY2ZpX3N0YXJ0cHJvYzsKLSNkZWZpbmUgX0xBQkVMKHgpIFwKLQkuZ2xvYmwgeDsgeDoKLQotI2lmZGVmIF9LRVJORUwKLQotI2RlZmluZSBDUFVWQVIob2ZmKSAlZnM6X19DT05DQVQoQ1BVX0lORk9fLG9mZikKLQotLyogWFhYIENhbid0IHVzZSBfX0NPTkNBVCgpIGhlcmUsIGFzIGl0IHdvdWxkIGJlIGV2YWx1YXRlZCBpbmNvcnJlY3RseS4gKi8KLSNpZmRlZiBfX0VMRl9fCi0jaWZkZWYgX19TVERDX18KLSNkZWZpbmUJSURUVkVDKG5hbWUpIFwKLQlBTElHTl9URVhUOyAuZ2xvYmwgWCAjIyBuYW1lOyAudHlwZSBYICMjIG5hbWUsQGZ1bmN0aW9uOyBYICMjIG5hbWU6Ci0jZGVmaW5lCUlEVFZFQ19FTkQobmFtZSkgXAotCS5zaXplIFggIyMgbmFtZSwgLiAtIFggIyMgbmFtZQotI2Vsc2UgCi0jZGVmaW5lCUlEVFZFQyhuYW1lKSBcCi0JQUxJR05fVEVYVDsgLmdsb2JsIFgvKiovbmFtZTsgLnR5cGUgWC8qKi9uYW1lLEBmdW5jdGlvbjsgWC8qKi9uYW1lOgotI2RlZmluZQlJRFRWRUNfRU5EKG5hbWUpIFwKLQkuc2l6ZSBYLyoqL25hbWUsIC4gLSBYLyoqL25hbWUKLSNlbmRpZiAvKiBfX1NURENfXyAqLyAKLSNlbHNlIAotI2lmZGVmIF9fU1REQ19fCi0jZGVmaW5lCUlEVFZFQyhuYW1lKSBcCi0JQUxJR05fVEVYVDsgLmdsb2JsIF9YICMjIG5hbWU7IC50eXBlIF9YICMjIG5hbWUsQGZ1bmN0aW9uOyBfWCAjIyBuYW1lOiAKLSNkZWZpbmUJSURUVkVDX0VORChuYW1lKSBcCi0JLnNpemUgX1ggIyMgbmFtZSwgLiAtIF9YICMjIG5hbWUKLSNlbHNlCi0jZGVmaW5lCUlEVFZFQyhuYW1lKSBcCi0JQUxJR05fVEVYVDsgLmdsb2JsIF9YLyoqL25hbWU7IC50eXBlIF9YLyoqL25hbWUsQGZ1bmN0aW9uOyBfWC8qKi9uYW1lOgotI2RlZmluZQlJRFRWRUNfRU5EKG5hbWUpIFwKLQkuc2l6ZSBfWC8qKi9uYW1lLCAuIC0gX1gvKiovbmFtZQotI2VuZGlmIC8qIF9fU1REQ19fICovCi0jZW5kaWYgLyogX19FTEZfXyAqLwotCi0jaWZkZWYgX1NUQU5EQUxPTkUKLSNkZWZpbmUgQUxJR05fREFUQQkuYWxpZ24JNAotI2RlZmluZSBBTElHTl9URVhUCS5hbGlnbgk0CS8qIDQtYnl0ZSBib3VuZGFyaWVzICovCi0jZGVmaW5lIFNVUEVSQUxJR05fVEVYVAkuYWxpZ24JMTYJLyogMTUtYnl0ZSBib3VuZGFyaWVzICovCi0jZWxpZiBkZWZpbmVkIF9fRUxGX18KLSNkZWZpbmUgQUxJR05fREFUQQkuYWxpZ24JNAotI2RlZmluZSBBTElHTl9URVhUCS5hbGlnbgkxNgkvKiAxNi1ieXRlIGJvdW5kYXJpZXMgKi8KLSNkZWZpbmUgU1VQRVJBTElHTl9URVhUCS5hbGlnbgkxNgkvKiAxNi1ieXRlIGJvdW5kYXJpZXMgKi8KLSNlbHNlCi0jZGVmaW5lIEFMSUdOX0RBVEEJLmFsaWduCTIKLSNkZWZpbmUgQUxJR05fVEVYVAkuYWxpZ24JNAkvKiAxNi1ieXRlIGJvdW5kYXJpZXMgKi8KLSNkZWZpbmUgU1VQRVJBTElHTl9URVhUCS5hbGlnbgk0CS8qIDE2LWJ5dGUgYm91bmRhcmllcyAqLwotI2VuZGlmIC8qIF9fRUxGX18gKi8KLQotI2RlZmluZSBfQUxJR05fVEVYVCBBTElHTl9URVhUCi0KLSNpZmRlZiBHUFJPRgotI2lmZGVmIF9fRUxGX18KLSNkZWZpbmUJTUNPVU5UX0FTTQljYWxsCV9DX0xBQkVMKF9fbWNvdW50KQotI2Vsc2UgLyogX19FTEZfXyAqLwotI2RlZmluZQlNQ09VTlRfQVNNCWNhbGwJX0NfTEFCRUwobWNvdW50KQotI2VuZGlmIC8qIF9fRUxGX18gKi8KLSNlbHNlIC8qIEdQUk9GICovCi0jZGVmaW5lCU1DT1VOVF9BU00JLyogbm90aGluZyAqLwotI2VuZGlmIC8qIEdQUk9GICovCi0KLSNlbmRpZiAvKiBfS0VSTkVMICovCi0KLQotCi0jaWZkZWYgR1BST0YKLSMgaWZkZWYgX19FTEZfXwotIyAgZGVmaW5lIF9QUk9GX1BST0xPR1VFCVwKLQlwdXNobCAlZWJwOyBtb3ZsICVlc3AsJWVicDsgY2FsbCBQSUNfUExUKF9fbWNvdW50KTsgcG9wbCAlZWJwCi0jIGVsc2UgCi0jICBkZWZpbmUgX1BST0ZfUFJPTE9HVUUJXAotCXB1c2hsICVlYnA7IG1vdmwgJWVzcCwlZWJwOyBjYWxsIFBJQ19QTFQobWNvdW50KTsgcG9wbCAlZWJwCi0jIGVuZGlmCi0jZWxzZQotIyBkZWZpbmUgX1BST0ZfUFJPTE9HVUUKLSNlbmRpZgotCi0jZGVmaW5lCUVOVFJZKHkpCV9FTlRSWShfQ19MQUJFTCh5KSk7IF9QUk9GX1BST0xPR1VFCi0jZGVmaW5lCU5FTlRSWSh5KQlfRU5UUlkoX0NfTEFCRUwoeSkpCi0jZGVmaW5lCUFTRU5UUlkoeSkJX0VOVFJZKF9BU01fTEFCRUwoeSkpOyBfUFJPRl9QUk9MT0dVRQotI2RlZmluZQlMQUJFTCh5KQlfTEFCRUwoX0NfTEFCRUwoeSkpCi0jZGVmaW5lCUVORCh5KQkJLmNmaV9lbmRwcm9jOyAuc2l6ZSB5LCAuIC0geQotCi0jZGVmaW5lCUFTTVNUUgkJLmFzY2l6Ci0KLSNpZmRlZiBfX0VMRl9fCi0jZGVmaW5lIFJDU0lEKHgpCS5wdXNoc2VjdGlvbiAiLmlkZW50IjsgLmFzY2l6IHg7IC5wb3BzZWN0aW9uCi0jZWxzZQotI2RlZmluZSBSQ1NJRCh4KQkudGV4dDsgLmFzY2l6IHgKLSNlbmRpZgotCi0jaWZkZWYgTk9fS0VSTkVMX1JDU0lEUwotI2RlZmluZQlfX0tFUk5FTF9SQ1NJRChfbiwgX3MpCS8qIG5vdGhpbmcgKi8KLSNlbHNlCi0jZGVmaW5lCV9fS0VSTkVMX1JDU0lEKF9uLCBfcykJUkNTSUQoX3MpCi0jZW5kaWYKLQotI2lmZGVmIF9fRUxGX18KLSNkZWZpbmUJV0VBS19BTElBUyhhbGlhcyxzeW0pCQkJCQkJXAotCS53ZWFrIGFsaWFzOwkJCQkJCQlcCi0JYWxpYXMgPSBzeW0KLSNlbmRpZgotLyoKLSAqIFNUUk9OR19BTElBUzogY3JlYXRlIGEgc3Ryb25nIGFsaWFzLgotICovCi0jZGVmaW5lIFNUUk9OR19BTElBUyhhbGlhcyxzeW0pCQkJCQkJXAotCS5nbG9ibCBhbGlhczsJCQkJCQkJXAotCWFsaWFzID0gc3ltCi0KLSNpZmRlZiBfX1NURENfXwotI2RlZmluZQlXQVJOX1JFRkVSRU5DRVMoc3ltLG1zZykJCQkJCVwKLQkucHVzaHNlY3Rpb24gLmdudS53YXJuaW5nLiAjIyBzeW07CQkJCVwKLQkuYXNjaWkgbXNnOwkJCQkJCQlcCi0JLnBvcHNlY3Rpb24KLSNlbHNlCi0jZGVmaW5lCVdBUk5fUkVGRVJFTkNFUyhzeW0sbXNnKQkJCQkJXAotCS5wdXNoc2VjdGlvbiAuZ251Lndhcm5pbmcuLyoqL3N5bTsJCQkJXAotCS5hc2NpaSBtc2c7CQkJCQkJCVwKLQkucG9wc2VjdGlvbgotI2VuZGlmIC8qIF9fU1REQ19fICovCi0KICNlbmRpZiAvKiAhX0kzODZfQVNNX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9pZWVlLmggYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9pZWVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YjM3MDMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvaWVlZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCSRPcGVuQlNEOiBpZWVlLmgsdiAxLjIgMjAwMy8wNi8wMiAyMzoyNzo0NyBtaWxsZXJ0IEV4cCAkICovCi0vKgkkTmV0QlNEOiBpZWVlLmgsdiAxLjEgMTk5Ni8wOS8zMCAxNjozNDoyNSB3cyBFeHAgJCAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgdGhlIENvbXB1dGVyIFN5c3RlbXMgRW5naW5lZXJpbmcgZ3JvdXAKLSAqIGF0IExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkgdW5kZXIgREFSUEEgY29udHJhY3QgQkcgOTEtNjYgYW5kCi0gKiBjb250cmlidXRlZCB0byBCZXJrZWxleS4KLSAqCi0gKiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLSAqCUNhbGlmb3JuaWEsIExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqCUAoIylpZWVlLmgJOC4xIChCZXJrZWxleSkgNi8xMS85MwotICovCi0KLS8qCi0gKiBpZWVlLmggZGVmaW5lcyB0aGUgbWFjaGluZS1kZXBlbmRlbnQgbGF5b3V0IG9mIHRoZSBtYWNoaW5lJ3MgSUVFRQotICogZmxvYXRpbmcgcG9pbnQuICBJdCBkb2VzICpub3QqIGRlZmluZSAoeWV0PykgYW55IG9mIHRoZSByb3VuZGluZwotICogbW9kZSBiaXRzLCBleGNlcHRpb25zLCBhbmQgc28gZm9ydGguCi0gKi8KLQotLyoKLSAqIERlZmluZSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gZWFjaCBmcmFjdGlvbiBhbmQgZXhwb25lbnQuCi0gKgotICoJCSAgICAgawkgICAgICAgICBrKzEKLSAqIE5vdGUgdGhhdCAgMS4wIHggMiAgPT0gMC4xIHggMiAgICAgIGFuZCB0aGF0IGRlbm9ybXMgYXJlIHJlcHJlc2VudGVkCi0gKgotICoJCQkJCSAgKC1leHBfYmlhcysxKQotICogYXMgZnJhY3Rpb25zIHRoYXQgbG9vayBsaWtlIDAuZmZmZmYgeCAyICAgICAgICAgICAgIC4gIFRoaXMgbWVhbnMgdGhhdAotICoKLSAqCQkJIC0xMjYKLSAqIHRoZSBudW1iZXIgMC4xMDAwMCB4IDIgICAgLCBmb3IgaW5zdGFuY2UsIGlzIHRoZSBzYW1lIGFzIHRoZSBub3JtYWxpemVkCi0gKgotICoJCS0xMjcJCQkgICAtMTI4Ci0gKiBmbG9hdCAxLjAgeCAyICAgIC4gIFRodXMsIHRvIHJlcHJlc2VudCAyICAgICwgd2UgbmVlZCBvbmUgbGVhZGluZyB6ZXJvCi0gKgotICoJCQkJICAtMTI5Ci0gKiBpbiB0aGUgZnJhY3Rpb247IHRvIHJlcHJlc2VudCAyICAgICwgd2UgbmVlZCB0d28sIGFuZCBzbyBvbi4gIFRoaXMKLSAqCi0gKgkJCQkJCSAgICAgKC1leHBfYmlhcy1mcmFjYml0cysxKQotICogaW1wbGllcyB0aGF0IHRoZSBzbWFsbGVzdCBkZW5vcm1hbGl6ZWQgbnVtYmVyIGlzIDIKLSAqCi0gKiBmb3Igd2hpY2hldmVyIGZvcm1hdCB3ZSBhcmUgdGFsa2luZyBhYm91dDogZm9yIHNpbmdsZSBwcmVjaXNpb24sIGZvcgotICoKLSAqCQkJCQkJLTEyNgkJLTE0OQotICogaW5zdGFuY2UsIHdlIGdldCAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgeCAyICAgICwgb3IgMS4wIHggMiAgICAsIGFuZAotICoKLSAqIC0xNDkgPT0gLTEyNyAtIDIzICsgMS4KLSAqLwotI2RlZmluZQlTTkdfRVhQQklUUwk4Ci0jZGVmaW5lCVNOR19GUkFDQklUUwkyMwotCi0jZGVmaW5lCURCTF9FWFBCSVRTCTExCi0jZGVmaW5lCURCTF9GUkFDQklUUwk1MgotCi0jZGVmaW5lCUVYVF9FWFBCSVRTCTE1Ci0jZGVmaW5lCUVYVF9GUkFDQklUUwkxMTIKLQotc3RydWN0IGllZWVfc2luZ2xlIHsKLQl1X2ludAlzbmdfZnJhYzoyMzsKLQl1X2ludAlzbmdfZXhwOjg7Ci0JdV9pbnQJc25nX3NpZ246MTsKLX07Ci0KLXN0cnVjdCBpZWVlX2RvdWJsZSB7Ci0JdV9pbnQJZGJsX2ZyYWNsOwotCXVfaW50CWRibF9mcmFjaDoyMDsKLQl1X2ludAlkYmxfZXhwOjExOwotCXVfaW50CWRibF9zaWduOjE7Ci19OwotCi1zdHJ1Y3QgaWVlZV9leHQgewotCXVfaW50CWV4dF9mcmFjbDsKLQl1X2ludAlleHRfZnJhY2xtOwotCXVfaW50CWV4dF9mcmFjaG07Ci0JdV9pbnQJZXh0X2ZyYWNoOjE2OwotCXVfaW50CWV4dF9leHA6MTU7Ci0JdV9pbnQJZXh0X3NpZ246MTsKLX07Ci0KLS8qCi0gKiBGbG9hdHMgd2hvc2UgZXhwb25lbnQgaXMgaW4gWzEuLklORk5BTikgKG9mIHdoYXRldmVyIHR5cGUpIGFyZQotICogYG5vcm1hbCcuICBGbG9hdHMgd2hvc2UgZXhwb25lbnQgaXMgSU5GTkFOIGFyZSBlaXRoZXIgSW5mIG9yIE5hTi4KLSAqIEZsb2F0cyB3aG9zZSBleHBvbmVudCBpcyB6ZXJvIGFyZSBlaXRoZXIgemVybyAoaWZmIGFsbCBmcmFjdGlvbgotICogYml0cyBhcmUgemVybykgb3Igc3Vibm9ybWFsIHZhbHVlcy4KLSAqCi0gKiBBIE5hTiBpcyBhIGBzaWduYWxsaW5nIE5hTicgaWYgaXRzIFFVSUVUTkFOIGJpdCBpcyBjbGVhciBpbiBpdHMKLSAqIGhpZ2ggZnJhY3Rpb247IGlmIHRoZSBiaXQgaXMgc2V0LCBpdCBpcyBhIGBxdWlldCBOYU4nLgotICovCi0jZGVmaW5lCVNOR19FWFBfSU5GTkFOCTI1NQotI2RlZmluZQlEQkxfRVhQX0lORk5BTgkyMDQ3Ci0jZGVmaW5lCUVYVF9FWFBfSU5GTkFOCTMyNzY3Ci0KLSNpZiAwCi0jZGVmaW5lCVNOR19RVUlFVE5BTgkoMSA8PCAyMikKLSNkZWZpbmUJREJMX1FVSUVUTkFOCSgxIDw8IDE5KQotI2RlZmluZQlFWFRfUVVJRVROQU4JKDEgPDwgMTUpCi0jZW5kaWYKLQotLyoKLSAqIEV4cG9uZW50IGJpYXNlcy4KLSAqLwotI2RlZmluZQlTTkdfRVhQX0JJQVMJMTI3Ci0jZGVmaW5lCURCTF9FWFBfQklBUwkxMDIzCi0jZGVmaW5lCUVYVF9FWFBfQklBUwkxNjM4MwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvbGltaXRzLmggYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZmZDg1NC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCSRPcGVuQlNEOiBsaW1pdHMuaCx2IDEuMTEgMjAwNi8wMS8wNiAyMjo0ODo0NyBtaWxsZXJ0IEV4cCAkCSovCi0vKgkkTmV0QlNEOiBsaW1pdHMuaCx2IDEuMTEgMTk5NS8xMi8yMSAwMTowODo1OSBteWNyb2Z0IEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODggVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqCUAoIylsaW1pdHMuaAk3LjIgKEJlcmtlbGV5KSA2LzI4LzkwCi0gKi8KLQotI2lmbmRlZiBfTUFDSElORV9MSU1JVFNfSF8KLSNkZWZpbmUgX01BQ0hJTkVfTElNSVRTX0hfCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQotI2RlZmluZQlNQl9MRU5fTUFYCTEJCS8qIG5vIG11bHRpYnl0ZSBjaGFyYWN0ZXJzICovCi0KLSNpZm5kZWYJU0laRV9NQVgKLSNkZWZpbmUJU0laRV9NQVgJVUlOVF9NQVgJLyogbWF4IHZhbHVlIGZvciBhIHNpemVfdCAqLwotI2VuZGlmCi0jaWZuZGVmIFNTSVpFX01BWAotI2RlZmluZQlTU0laRV9NQVgJSU5UX01BWAkJLyogbWF4IHZhbHVlIGZvciBhIHNzaXplX3QgKi8KLSNlbmRpZgotCi0jaWYgX19CU0RfVklTSUJMRQotI2RlZmluZQlTSVpFX1RfTUFYCVVJTlRfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYSBzaXplX3QgKGhpc3RvcmljKSAqLwotCi0jZGVmaW5lCVVRVUFEX01BWAkweGZmZmZmZmZmZmZmZmZmZmZVTEwJCS8qIG1heCB1bnNpZ25lZCBxdWFkICovCi0jZGVmaW5lCVFVQURfTUFYCTB4N2ZmZmZmZmZmZmZmZmZmZkxMCQkvKiBtYXggc2lnbmVkIHF1YWQgKi8KLSNkZWZpbmUJUVVBRF9NSU4JKC0weDdmZmZmZmZmZmZmZmZmZmZMTC0xKQkvKiBtaW4gc2lnbmVkIHF1YWQgKi8KLQotI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KLQotI2RlZmluZSBMT05HTE9OR19CSVQgICAgNjQKLSNkZWZpbmUgTE9OR0xPTkdfTUlOICAgICgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMLTEpCi0jZGVmaW5lIExPTkdMT05HX01BWCAgICA5MjIzMzcyMDM2ODU0Nzc1ODA3TEwKLSNkZWZpbmUgVUxPTkdMT05HX01BWCAgIDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMCi0KLSNlbmRpZiAvKiBfTUFDSElORV9MSU1JVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zaWx2ZXJtb250Lm1rIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3NpbHZlcm1vbnQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2YmVlMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zaWx2ZXJtb250Lm1rCkBAIC0wLDAgKzEsMzIgQEAKK2xpYmNfYmlvbmljX3NyY19maWxlc194ODYgKz0gXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItYmNvcHktc2xtLlMgXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItYnplcm8tc2xtLlMgXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItbWVtY3B5LXNsbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLW1lbW1vdmUtc2xtLlMgXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItbWVtc2V0LXNsbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cGNweS1zbG0uUyBcCisgICAgYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHBuY3B5LXNsbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cmNweS1zbG0uUyBcCisgICAgYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHJsZW4tc2xtLlMgXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItc3RybmNweS1zbG0uUyBcCisgICAgYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlNC1tZW1jbXAtc2xtLlMgXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTQtd21lbWNtcC1zbG0uUworCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfeDg2ICs9IFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLW1lbWNoci1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItbWVtcmNoci1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItc3RyY2hyLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1zdHJyY2hyLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1zdHJubGVuLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi13Y3NjaHItYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXdjc3JjaHItYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXdjc2xlbi1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItd2NzY21wLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RybmNhdC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmxjYXQtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJsY3B5LWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RyY21wLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RybmNtcC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmNhdC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXdjc2NhdC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXdjc2NweS1hdG9tLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvY2FjaGUuaCBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzQyYjFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9jYWNoZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTAsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qIFZhbHVlcyBhcmUgb3B0aW1pemVkIGZvciBTaWx2ZXJtb250ICovCisjZGVmaW5lIFNIQVJFRF9DQUNIRV9TSVpFCSgxMDI0KjEwMjQpCQkJLyogU2lsdmVybW9udCBMMiBDYWNoZSAqLworI2RlZmluZSBEQVRBX0NBQ0hFX1NJWkUJCSgyNCoxMDI0KQkJCS8qIFNpbHZlcm1vbnQgTDEgRGF0YSBDYWNoZSAqLworCisjZGVmaW5lIFNIQVJFRF9DQUNIRV9TSVpFX0hBTEYJKFNIQVJFRF9DQUNIRV9TSVpFIC8gMikKKyNkZWZpbmUgREFUQV9DQUNIRV9TSVpFX0hBTEYJKERBVEFfQ0FDSEVfU0laRSAvIDIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItYmNvcHktc2xtLlMgYi9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItYmNvcHktc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkwZDUyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1iY29weS1zbG0uUwpAQCAtMCwwICsxLDM0IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisKKyNkZWZpbmUgTUVNTU9WRQliY29weQorI2RlZmluZSBVU0VfQVNfQkNPUFkKKyNpbmNsdWRlICJzc2UyLW1lbW1vdmUtc2xtLlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItYnplcm8tc2xtLlMgYi9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItYnplcm8tc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY4MmVkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1iemVyby1zbG0uUwpAQCAtMCwwICsxLDMzIEBACisvKgorQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjZGVmaW5lIFVTRV9BU19CWkVSTworI2RlZmluZSBNRU1TRVQgIGJ6ZXJvCisjaW5jbHVkZSAic3NlMi1tZW1zZXQtc2xtLlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItbWVtY3B5LXNsbS5TIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLW1lbWNweS1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjMwNWM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLW1lbWNweS1zbG0uUwpAQCAtMCwwICsxLDMwOCBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisKKyNpZm5kZWYgTUVNQ1BZCisjIGRlZmluZSBNRU1DUFkJbWVtY3B5CisjZW5kaWYKKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJLmNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9lbmRwcm9jCisjIGRlZmluZSBjZmlfZW5kcHJvYwkuY2ZpX2VuZHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZWxfb2Zmc2V0CisjIGRlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVzdG9yZQorIyBkZWZpbmUgY2ZpX3Jlc3RvcmUocmVnKQkuY2ZpX3Jlc3RvcmUgcmVnCisjZW5kaWYKKworI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkJCVwKKwkudHlwZSBuYW1lLCAgQGZ1bmN0aW9uOwkJXAorCS5nbG9ibCBuYW1lOwkJXAorCS5wMmFsaWduIDQ7CQlcCituYW1lOgkJXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpCQlcCisJY2ZpX2VuZHByb2M7CQlcCisJLnNpemUgbmFtZSwgLi1uYW1lCisjZW5kaWYKKworI2RlZmluZSBERVNUCQlQQVJNUworI2RlZmluZSBTUkMJCURFU1QrNAorI2RlZmluZSBMRU4JCVNSQys0CisKKyNkZWZpbmUgQ0ZJX1BVU0goUkVHKQkJXAorICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKDQpOwkJXAorICBjZmlfcmVsX29mZnNldCAoUkVHLCAwKQorCisjZGVmaW5lIENGSV9QT1AoUkVHKQkJXAorICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJCVwKKyAgY2ZpX3Jlc3RvcmUgKFJFRykKKworI2RlZmluZSBQVVNIKFJFRykJcHVzaGwgUkVHOyBDRklfUFVTSCAoUkVHKQorI2RlZmluZSBQT1AoUkVHKQlwb3BsIFJFRzsgQ0ZJX1BPUCAoUkVHKQorCisjZGVmaW5lIFBBUk1TCQk4CQkvKiBQcmVzZXJ2ZSBFQlguICAqLworI2RlZmluZSBFTlRSQU5DRQlQVVNIICglZWJ4KTsKKyNkZWZpbmUgUkVUVVJOX0VORAlQT1AgKCVlYngpOyByZXQKKyNkZWZpbmUgUkVUVVJOCQlSRVRVUk5fRU5EOyBDRklfUFVTSCAoJWVieCkKKworCS5zZWN0aW9uIC50ZXh0LnNzZTIsImF4IixAcHJvZ2JpdHMKK0VOVFJZIChNRU1DUFkpCisJRU5UUkFOQ0UKKwltb3ZsCUxFTiglZXNwKSwgJWVjeAorCW1vdmwJU1JDKCVlc3ApLCAlZWF4CisJbW92bAlERVNUKCVlc3ApLCAlZWR4CisKKwljbXAJJWVheCwgJWVkeAorCWplCUwocmV0dXJuKQorCisJY21wCSQxNiwgJWVjeAorCWpiZQlMKGxlbl8wXzE2X2J5dGVzKQorCisJY21wICAgICAkU0hBUkVEX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorCWphZSAgICAgTChsYXJnZV9wYWdlKQorCisJbW92ZHF1CSglZWF4KSwgJXhtbTAKKwltb3ZkcXUJLTE2KCVlYXgsICVlY3gpLCAleG1tMQorCWNtcGwgICAgJDMyLCAlZWN4CisJbW92ZHF1CSV4bW0wLCAoJWVkeCkKKwltb3ZkcXUJJXhtbTEsIC0xNiglZWR4LCAlZWN4KQorCWpiZQlMKHJldHVybikKKworCW1vdmRxdQkxNiglZWF4KSwgJXhtbTAKKwltb3ZkcXUJLTMyKCVlYXgsICVlY3gpLCAleG1tMQorCWNtcGwgICAgJDY0LCAlZWN4CisJbW92ZHF1CSV4bW0wLCAxNiglZWR4KQorCW1vdmRxdQkleG1tMSwgLTMyKCVlZHgsICVlY3gpCisJamJlCUwocmV0dXJuKQorCisJbW92ZHF1CTMyKCVlYXgpLCAleG1tMAorCW1vdmRxdQk0OCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTQ4KCVlYXgsICVlY3gpLCAleG1tMgorCW1vdmRxdQktNjQoJWVheCwgJWVjeCksICV4bW0zCisJY21wbCAgICAkMTI4LCAlZWN4CisJbW92ZHF1CSV4bW0wLCAzMiglZWR4KQorCW1vdmRxdQkleG1tMSwgNDgoJWVkeCkKKwltb3ZkcXUJJXhtbTIsIC00OCglZWR4LCAlZWN4KQorCW1vdmRxdQkleG1tMywgLTY0KCVlZHgsICVlY3gpCisJamJlCUwocmV0dXJuKQorCisvKiBOb3cgdGhlIG1haW4gbG9vcDogd2UgYWxpZ24gdGhlIGFkZHJlc3Mgb2YgdGhlIGRlc3RpbmF0aW9uLiAgKi8KKwlsZWFsCTY0KCVlZHgpLCAlZWJ4CisJYW5kbAkkLTY0LCAlZWJ4CisKKwlhZGRsCSVlZHgsICVlY3gKKwlhbmRsCSQtNjQsICVlY3gKKworCXN1YmwJJWVkeCwgJWVheAorCisvKiBXZSBzaG91bGQgc3RvcCB0d28gaXRlcmF0aW9ucyBiZWZvcmUgdGhlIHRlcm1pbmF0aW9uCisJKGluIG9yZGVyIG5vdCB0byBtaXNwcmVmZXRjaCkuICAqLworCXN1YmwJJDY0LCAlZWN4CisJY21wbAklZWJ4LCAlZWN4CisJamUJTChtYWluX2xvb3BfanVzdF9vbmVfaXRlcmF0aW9uKQorCisJc3VibAkkNjQsICVlY3gKKwljbXBsCSVlYngsICVlY3gKKwlqZQlMKG1haW5fbG9vcF9sYXN0X3R3b19pdGVyYXRpb25zKQorCisKKwkucDJhbGlnbiA0CitMKG1haW5fbG9vcF9jYWNoZSk6CisKKwlwcmVmZXRjaHQwIDEyOCglZWJ4LCAlZWF4KQorCisJbW92ZHF1CSglZWJ4LCAlZWF4KSwgJXhtbTAKKwltb3ZkcXUJMTYoJWVieCwgJWVheCksICV4bW0xCisJbW92ZHF1CTMyKCVlYngsICVlYXgpLCAleG1tMgorCW1vdmRxdQk0OCglZWJ4LCAlZWF4KSwgJXhtbTMKKwltb3ZkcWEJJXhtbTAsICglZWJ4KQorCW1vdmRxYQkleG1tMSwgMTYoJWVieCkKKwltb3ZkcWEJJXhtbTIsIDMyKCVlYngpCisJbW92ZHFhCSV4bW0zLCA0OCglZWJ4KQorCWxlYQk2NCglZWJ4KSwgJWVieAorCWNtcGwJJWVieCwgJWVjeAorCWpuZQlMKG1haW5fbG9vcF9jYWNoZSkKKworTChtYWluX2xvb3BfbGFzdF90d29faXRlcmF0aW9ucyk6CisJbW92ZHF1CSglZWJ4LCAlZWF4KSwgJXhtbTAKKwltb3ZkcXUJMTYoJWVieCwgJWVheCksICV4bW0xCisJbW92ZHF1CTMyKCVlYngsICVlYXgpLCAleG1tMgorCW1vdmRxdQk0OCglZWJ4LCAlZWF4KSwgJXhtbTMKKwltb3ZkcXUJNjQoJWVieCwgJWVheCksICV4bW00CisJbW92ZHF1CTgwKCVlYngsICVlYXgpLCAleG1tNQorCW1vdmRxdQk5NiglZWJ4LCAlZWF4KSwgJXhtbTYKKwltb3ZkcXUJMTEyKCVlYngsICVlYXgpLCAleG1tNworCW1vdmRxYQkleG1tMCwgKCVlYngpCisJbW92ZHFhCSV4bW0xLCAxNiglZWJ4KQorCW1vdmRxYQkleG1tMiwgMzIoJWVieCkKKwltb3ZkcWEJJXhtbTMsIDQ4KCVlYngpCisJbW92ZHFhCSV4bW00LCA2NCglZWJ4KQorCW1vdmRxYQkleG1tNSwgODAoJWVieCkKKwltb3ZkcWEJJXhtbTYsIDk2KCVlYngpCisJbW92ZHFhCSV4bW03LCAxMTIoJWVieCkKKwlqbXAJTChyZXR1cm4pCisKK0wobWFpbl9sb29wX2p1c3Rfb25lX2l0ZXJhdGlvbik6CisJbW92ZHF1CSglZWJ4LCAlZWF4KSwgJXhtbTAKKwltb3ZkcXUJMTYoJWVieCwgJWVheCksICV4bW0xCisJbW92ZHF1CTMyKCVlYngsICVlYXgpLCAleG1tMgorCW1vdmRxdQk0OCglZWJ4LCAlZWF4KSwgJXhtbTMKKwltb3ZkcWEJJXhtbTAsICglZWJ4KQorCW1vdmRxYQkleG1tMSwgMTYoJWVieCkKKwltb3ZkcWEJJXhtbTIsIDMyKCVlYngpCisJbW92ZHFhCSV4bW0zLCA0OCglZWJ4KQorCWptcAlMKHJldHVybikKKworTChsYXJnZV9wYWdlKToKKwltb3ZkcXUJKCVlYXgpLCAleG1tMAorCW1vdmRxdQkxNiglZWF4KSwgJXhtbTEKKwltb3ZkcXUJMzIoJWVheCksICV4bW0yCisJbW92ZHF1CTQ4KCVlYXgpLCAleG1tMworCW1vdmRxdQktNjQoJWVheCwgJWVjeCksICV4bW00CisJbW92ZHF1CS00OCglZWF4LCAlZWN4KSwgJXhtbTUKKwltb3ZkcXUJLTMyKCVlYXgsICVlY3gpLCAleG1tNgorCW1vdmRxdQktMTYoJWVheCwgJWVjeCksICV4bW03CisJbW92ZHF1CSV4bW0wLCAoJWVkeCkKKwltb3ZkcXUJJXhtbTEsIDE2KCVlZHgpCisJbW92ZHF1CSV4bW0yLCAzMiglZWR4KQorCW1vdmRxdQkleG1tMywgNDgoJWVkeCkKKwltb3ZkcXUJJXhtbTQsIC02NCglZWR4LCAlZWN4KQorCW1vdmRxdQkleG1tNSwgLTQ4KCVlZHgsICVlY3gpCisJbW92ZHF1CSV4bW02LCAtMzIoJWVkeCwgJWVjeCkKKwltb3ZkcXUJJXhtbTcsIC0xNiglZWR4LCAlZWN4KQorCisJbW92ZHF1CTY0KCVlYXgpLCAleG1tMAorCW1vdmRxdQk4MCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJOTYoJWVheCksICV4bW0yCisJbW92ZHF1CTExMiglZWF4KSwgJXhtbTMKKwltb3ZkcXUJLTEyOCglZWF4LCAlZWN4KSwgJXhtbTQKKwltb3ZkcXUJLTExMiglZWF4LCAlZWN4KSwgJXhtbTUKKwltb3ZkcXUJLTk2KCVlYXgsICVlY3gpLCAleG1tNgorCW1vdmRxdQktODAoJWVheCwgJWVjeCksICV4bW03CisJbW92ZHF1CSV4bW0wLCA2NCglZWR4KQorCW1vdmRxdQkleG1tMSwgODAoJWVkeCkKKwltb3ZkcXUJJXhtbTIsIDk2KCVlZHgpCisJbW92ZHF1CSV4bW0zLCAxMTIoJWVkeCkKKwltb3ZkcXUJJXhtbTQsIC0xMjgoJWVkeCwgJWVjeCkKKwltb3ZkcXUJJXhtbTUsIC0xMTIoJWVkeCwgJWVjeCkKKwltb3ZkcXUJJXhtbTYsIC05NiglZWR4LCAlZWN4KQorCW1vdmRxdQkleG1tNywgLTgwKCVlZHgsICVlY3gpCisKKy8qIE5vdyB0aGUgbWFpbiBsb29wIHdpdGggbm9uIHRlbXBvcmFsIHN0b3Jlcy4gV2UgYWxpZ24KKwl0aGUgYWRkcmVzcyBvZiB0aGUgZGVzdGluYXRpb24uICAqLworCWxlYWwJMTI4KCVlZHgpLCAlZWJ4CisJYW5kbAkkLTEyOCwgJWVieAorCisJYWRkbAklZWR4LCAlZWN4CisJYW5kbAkkLTEyOCwgJWVjeAorCisJc3VibAklZWR4LCAlZWF4CisKKwkucDJhbGlnbiA0CitMKG1haW5fbG9vcF9sYXJnZV9wYWdlKToKKwltb3ZkcXUJKCVlYngsICVlYXgpLCAleG1tMAorCW1vdmRxdQkxNiglZWJ4LCAlZWF4KSwgJXhtbTEKKwltb3ZkcXUJMzIoJWVieCwgJWVheCksICV4bW0yCisJbW92ZHF1CTQ4KCVlYngsICVlYXgpLCAleG1tMworCW1vdmRxdQk2NCglZWJ4LCAlZWF4KSwgJXhtbTQKKwltb3ZkcXUJODAoJWVieCwgJWVheCksICV4bW01CisJbW92ZHF1CTk2KCVlYngsICVlYXgpLCAleG1tNgorCW1vdmRxdQkxMTIoJWVieCwgJWVheCksICV4bW03CisJbW92bnRkcQkleG1tMCwgKCVlYngpCisJbW92bnRkcQkleG1tMSwgMTYoJWVieCkKKwltb3ZudGRxCSV4bW0yLCAzMiglZWJ4KQorCW1vdm50ZHEJJXhtbTMsIDQ4KCVlYngpCisJbW92bnRkcQkleG1tNCwgNjQoJWVieCkKKwltb3ZudGRxCSV4bW01LCA4MCglZWJ4KQorCW1vdm50ZHEJJXhtbTYsIDk2KCVlYngpCisJbW92bnRkcQkleG1tNywgMTEyKCVlYngpCisJbGVhCTEyOCglZWJ4KSwgJWVieAorCWNtcGwJJWVieCwgJWVjeAorCWpuZQlMKG1haW5fbG9vcF9sYXJnZV9wYWdlKQorCXNmZW5jZQorCWptcAlMKHJldHVybikKKworTChsZW5fMF8xNl9ieXRlcyk6CisJdGVzdGIJJDI0LCAlY2wKKwlqbmUJTChsZW5fOV8xNl9ieXRlcykKKwl0ZXN0YgkkNCwgJWNsCisJLnAyYWxpZ24gNCwsNQorCWpuZQlMKGxlbl81XzhfYnl0ZXMpCisJdGVzdGwJJWVjeCwgJWVjeAorCS5wMmFsaWduIDQsLDIKKwlqZQlMKHJldHVybikKKwltb3Z6YmwJKCVlYXgpLCAlZWJ4CisJdGVzdGIJJDIsICVjbAorCW1vdmIJJWJsLCAoJWVkeCkKKwlqZQlMKHJldHVybikKKwltb3Z6d2wJLTIoJWVheCwlZWN4KSwgJWVieAorCW1vdncJJWJ4LCAtMiglZWR4LCVlY3gpCisJam1wCUwocmV0dXJuKQorCitMKGxlbl85XzE2X2J5dGVzKToKKwltb3ZxCSglZWF4KSwgJXhtbTAKKwltb3ZxCS04KCVlYXgsICVlY3gpLCAleG1tMQorCW1vdnEJJXhtbTAsICglZWR4KQorCW1vdnEJJXhtbTEsIC04KCVlZHgsICVlY3gpCisJam1wCUwocmV0dXJuKQorCitMKGxlbl81XzhfYnl0ZXMpOgorCW1vdmwJKCVlYXgpLCAlZWJ4CisJbW92bAklZWJ4LCAoJWVkeCkKKwltb3ZsCS00KCVlYXgsJWVjeCksICVlYngKKwltb3ZsCSVlYngsIC00KCVlZHgsJWVjeCkKKwlqbXAJTChyZXR1cm4pCisKK0wocmV0dXJuKToKKwltb3ZsCSVlZHgsICVlYXgKKwlSRVRVUk4KKworRU5EIChNRU1DUFkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItbWVtbW92ZS1zbG0uUyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1tZW1tb3ZlLXNsbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NzFmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItbWVtbW92ZS1zbG0uUwpAQCAtMCwwICsxLDU0MiBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisKKyNpZm5kZWYgTUVNTU9WRQorIyBkZWZpbmUgTUVNTU9WRQltZW1tb3ZlCisjZW5kaWYKKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJLmNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9lbmRwcm9jCisjIGRlZmluZSBjZmlfZW5kcHJvYwkuY2ZpX2VuZHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZWxfb2Zmc2V0CisjIGRlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVzdG9yZQorIyBkZWZpbmUgY2ZpX3Jlc3RvcmUocmVnKQkuY2ZpX3Jlc3RvcmUgcmVnCisjZW5kaWYKKworI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkJCVwKKwkudHlwZSBuYW1lLCAgQGZ1bmN0aW9uOwkJXAorCS5nbG9ibCBuYW1lOwkJXAorCS5wMmFsaWduIDQ7CQlcCituYW1lOgkJXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpCQlcCisJY2ZpX2VuZHByb2M7CQlcCisJLnNpemUgbmFtZSwgLi1uYW1lCisjZW5kaWYKKworI2lmZGVmIFVTRV9BU19CQ09QWQorIyBkZWZpbmUgU1JDCQlQQVJNUworIyBkZWZpbmUgREVTVAkJU1JDKzQKKyMgZGVmaW5lIExFTgkJREVTVCs0CisjZWxzZQorIyBkZWZpbmUgREVTVAkJUEFSTVMKKyMgZGVmaW5lIFNSQwkJREVTVCs0CisjIGRlZmluZSBMRU4JCVNSQys0CisjZW5kaWYKKworI2RlZmluZSBDRklfUFVTSChSRUcpCQlcCisgIGNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7CQlcCisgIGNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCisKKyNkZWZpbmUgQ0ZJX1BPUChSRUcpCQlcCisgIGNmaV9hZGp1c3RfY2ZhX29mZnNldCAoLTQpOwkJXAorICBjZmlfcmVzdG9yZSAoUkVHKQorCisjZGVmaW5lIFBVU0goUkVHKQlwdXNobCBSRUc7IENGSV9QVVNIIChSRUcpCisjZGVmaW5lIFBPUChSRUcpCXBvcGwgUkVHOyBDRklfUE9QIChSRUcpCisKKyNkZWZpbmUgUEFSTVMJCTgJCS8qIFByZXNlcnZlIEVCWC4gICovCisjZGVmaW5lIEVOVFJBTkNFCVBVU0ggKCVlYngpOworI2RlZmluZSBSRVRVUk5fRU5ECVBPUCAoJWVieCk7IHJldAorI2RlZmluZSBSRVRVUk4JCVJFVFVSTl9FTkQ7IENGSV9QVVNIICglZWJ4KQorCisJLnNlY3Rpb24gLnRleHQuc3NlMiwiYXgiLEBwcm9nYml0cworRU5UUlkgKE1FTU1PVkUpCisJRU5UUkFOQ0UKKwltb3ZsCUxFTiglZXNwKSwgJWVjeAorCW1vdmwJU1JDKCVlc3ApLCAlZWF4CisJbW92bAlERVNUKCVlc3ApLCAlZWR4CisKKy8qIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGNvcHkgYmFja3dhcmQgb3IgZm9yd2FyZC4gICovCisJY21wCSVlYXgsICVlZHgKKwlqZQlMKG1tX3JldHVybikKKwlqZwlMKG1tX2xlbl8wX29yX21vcmVfYmFja3dhcmQpCisKKy8qIE5vdyBkbyBjaGVja3MgZm9yIGxlbmd0aHMuIFdlIGRvIFswLi4xNl0sIFswLi4zMl0sIFswLi42NF0sIFswLi4xMjhdCisJc2VwYXJhdGVseS4gICovCisJY21wCSQxNiwgJWVjeAorCWpiZQlMKG1tX2xlbl8wXzE2X2J5dGVzX2ZvcndhcmQpCisKKwljbXBsCSQzMiwgJWVjeAorCWphCUwobW1fbGVuXzMyX29yX21vcmVfZm9yd2FyZCkKKworLyogQ29weSBbMC4uMzJdIGFuZCByZXR1cm4uICAqLworCW1vdmRxdQkoJWVheCksICV4bW0wCisJbW92ZHF1CS0xNiglZWF4LCAlZWN4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWR4KQorCW1vdmRxdQkleG1tMSwgLTE2KCVlZHgsICVlY3gpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX2xlbl8zMl9vcl9tb3JlX2ZvcndhcmQpOgorCWNtcGwJJDY0LCAlZWN4CisJamEJTChtbV9sZW5fNjRfb3JfbW9yZV9mb3J3YXJkKQorCisvKiBDb3B5IFswLi42NF0gYW5kIHJldHVybi4gICovCisJbW92ZHF1CSglZWF4KSwgJXhtbTAKKwltb3ZkcXUJMTYoJWVheCksICV4bW0xCisJbW92ZHF1CS0xNiglZWF4LCAlZWN4KSwgJXhtbTIKKwltb3ZkcXUJLTMyKCVlYXgsICVlY3gpLCAleG1tMworCW1vdmRxdQkleG1tMCwgKCVlZHgpCisJbW92ZHF1CSV4bW0xLCAxNiglZWR4KQorCW1vdmRxdQkleG1tMiwgLTE2KCVlZHgsICVlY3gpCisJbW92ZHF1CSV4bW0zLCAtMzIoJWVkeCwgJWVjeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzY0X29yX21vcmVfZm9yd2FyZCk6CisJY21wbAkkMTI4LCAlZWN4CisJamEJTChtbV9sZW5fMTI4X29yX21vcmVfZm9yd2FyZCkKKworLyogQ29weSBbMC4uMTI4XSBhbmQgcmV0dXJuLiAgKi8KKwltb3ZkcXUJKCVlYXgpLCAleG1tMAorCW1vdmRxdQkxNiglZWF4KSwgJXhtbTEKKwltb3ZkcXUJMzIoJWVheCksICV4bW0yCisJbW92ZHF1CTQ4KCVlYXgpLCAleG1tMworCW1vdmRxdQktNjQoJWVheCwgJWVjeCksICV4bW00CisJbW92ZHF1CS00OCglZWF4LCAlZWN4KSwgJXhtbTUKKwltb3ZkcXUJLTMyKCVlYXgsICVlY3gpLCAleG1tNgorCW1vdmRxdQktMTYoJWVheCwgJWVjeCksICV4bW03CisJbW92ZHF1CSV4bW0wLCAoJWVkeCkKKwltb3ZkcXUJJXhtbTEsIDE2KCVlZHgpCisJbW92ZHF1CSV4bW0yLCAzMiglZWR4KQorCW1vdmRxdQkleG1tMywgNDgoJWVkeCkKKwltb3ZkcXUJJXhtbTQsIC02NCglZWR4LCAlZWN4KQorCW1vdmRxdQkleG1tNSwgLTQ4KCVlZHgsICVlY3gpCisJbW92ZHF1CSV4bW02LCAtMzIoJWVkeCwgJWVjeCkKKwltb3ZkcXUJJXhtbTcsIC0xNiglZWR4LCAlZWN4KQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9sZW5fMTI4X29yX21vcmVfZm9yd2FyZCk6CisJUFVTSCAoJWVzaSkKKwlQVVNIICglZWRpKQorCisvKiBBbGlnbmluZyB0aGUgYWRkcmVzcyBvZiBkZXN0aW5hdGlvbi4gICovCisJbW92ZHF1CSglZWF4KSwgJXhtbTAKKwltb3ZkcXUJMTYoJWVheCksICV4bW0xCisJbW92ZHF1CTMyKCVlYXgpLCAleG1tMgorCW1vdmRxdQk0OCglZWF4KSwgJXhtbTMKKworCWxlYWwJNjQoJWVkeCksICVlZGkKKwlhbmRsCSQtNjQsICVlZGkKKwlzdWJsCSVlZHgsICVlYXgKKworCW1vdmRxdQkoJWVheCwgJWVkaSksICV4bW00CisJbW92ZHF1CTE2KCVlYXgsICVlZGkpLCAleG1tNQorCW1vdmRxdQkzMiglZWF4LCAlZWRpKSwgJXhtbTYKKwltb3ZkcXUJNDgoJWVheCwgJWVkaSksICV4bW03CisKKwltb3ZkcXUJJXhtbTAsICglZWR4KQorCW1vdmRxdQkleG1tMSwgMTYoJWVkeCkKKwltb3ZkcXUJJXhtbTIsIDMyKCVlZHgpCisJbW92ZHF1CSV4bW0zLCA0OCglZWR4KQorCW1vdmRxYQkleG1tNCwgKCVlZGkpCisJbW92YXBzCSV4bW01LCAxNiglZWRpKQorCW1vdmFwcwkleG1tNiwgMzIoJWVkaSkKKwltb3ZhcHMJJXhtbTcsIDQ4KCVlZGkpCisJYWRkbAkkNjQsICVlZGkKKworCWxlYWwJKCVlZHgsICVlY3gpLCAlZWJ4CisJYW5kbAkkLTY0LCAlZWJ4CisJY21wCSVlZGksICVlYngKKwlqYmUJTChtbV9jb3B5X3JlbWFpbmluZ19mb3J3YXJkKQorCisJY21wCSRTSEFSRURfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisJamFlCUwobW1fbGFyZ2VfcGFnZV9sb29wX2ZvcndhcmQpCisKKwkucDJhbGlnbiA0CitMKG1tX21haW5fbG9vcF9mb3J3YXJkKToKKworCXByZWZldGNodDAgMTI4KCVlYXgsICVlZGkpCisKKwltb3ZkcXUJKCVlYXgsICVlZGkpLCAleG1tMAorCW1vdmRxdQkxNiglZWF4LCAlZWRpKSwgJXhtbTEKKwltb3ZkcXUJMzIoJWVheCwgJWVkaSksICV4bW0yCisJbW92ZHF1CTQ4KCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMCwgKCVlZGkpCisJbW92YXBzCSV4bW0xLCAxNiglZWRpKQorCW1vdmFwcwkleG1tMiwgMzIoJWVkaSkKKwltb3ZhcHMJJXhtbTMsIDQ4KCVlZGkpCisJbGVhbAk2NCglZWRpKSwgJWVkaQorCWNtcAklZWRpLCAlZWJ4CisJamEJTChtbV9tYWluX2xvb3BfZm9yd2FyZCkKKworTChtbV9jb3B5X3JlbWFpbmluZ19mb3J3YXJkKToKKwlhZGRsCSVlZHgsICVlY3gKKwlzdWJsCSVlZGksICVlY3gKKy8qIFdlIGNvcGllZCBhbGwgdXAgdGlsbCAlZWRpIHBvc2l0aW9uIGluIHRoZSBkc3QuCisJSW4gJWVjeCBub3cgaXMgaG93IG1hbnkgYnl0ZXMgYXJlIGxlZnQgdG8gY29weS4KKwlOb3cgd2UgbmVlZCB0byBhZHZhbmNlICVlc2kuICovCisJbGVhbAkoJWVkaSwgJWVheCksICVlc2kKKworTChtbV9yZW1haW5pbmdfMF82NF9ieXRlc19mb3J3YXJkKToKKwljbXAJJDMyLCAlZWN4CisJamEJTChtbV9yZW1haW5pbmdfMzNfNjRfYnl0ZXNfZm9yd2FyZCkKKwljbXAJJDE2LCAlZWN4CisJamEJTChtbV9yZW1haW5pbmdfMTdfMzJfYnl0ZXNfZm9yd2FyZCkKKwl0ZXN0bAklZWN4LCAlZWN4CisJLnAyYWxpZ24gNCwsMgorCWplCUwobW1fcmV0dXJuX3BvcF9hbGwpCisKKwljbXBiCSQ4LCAlY2wKKwlqYQlMKG1tX3JlbWFpbmluZ185XzE2X2J5dGVzX2ZvcndhcmQpCisJY21wYgkkNCwgJWNsCisJLnAyYWxpZ24gNCwsNQorCWphCUwobW1fcmVtYWluaW5nXzVfOF9ieXRlc19mb3J3YXJkKQorCWNtcGIJJDIsICVjbAorCS5wMmFsaWduIDQsLDEKKwlqYQlMKG1tX3JlbWFpbmluZ18zXzRfYnl0ZXNfZm9yd2FyZCkKKwltb3Z6YmwJLTEoJWVzaSwlZWN4KSwgJWVheAorCW1vdnpibAkoJWVzaSksICVlYngKKwltb3ZiCSVhbCwgLTEoJWVkaSwlZWN4KQorCW1vdmIJJWJsLCAoJWVkaSkKKwlqbXAJTChtbV9yZXR1cm5fcG9wX2FsbCkKKworTChtbV9yZW1haW5pbmdfMzNfNjRfYnl0ZXNfZm9yd2FyZCk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJWVzaSksICV4bW0xCisJbW92ZHF1CS0zMiglZXNpLCAlZWN4KSwgJXhtbTIKKwltb3ZkcXUJLTE2KCVlc2ksICVlY3gpLCAleG1tMworCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92ZHF1CSV4bW0xLCAxNiglZWRpKQorCW1vdmRxdQkleG1tMiwgLTMyKCVlZGksICVlY3gpCisJbW92ZHF1CSV4bW0zLCAtMTYoJWVkaSwgJWVjeCkKKwlqbXAJTChtbV9yZXR1cm5fcG9wX2FsbCkKKworTChtbV9yZW1haW5pbmdfMTdfMzJfYnl0ZXNfZm9yd2FyZCk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZkcXUJLTE2KCVlc2ksICVlY3gpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92ZHF1CSV4bW0xLCAtMTYoJWVkaSwgJWVjeCkKKwlqbXAJTChtbV9yZXR1cm5fcG9wX2FsbCkKKworTChtbV9yZW1haW5pbmdfOV8xNl9ieXRlc19mb3J3YXJkKToKKwltb3ZxCSglZXNpKSwgJXhtbTAKKwltb3ZxCS04KCVlc2ksICVlY3gpLCAleG1tMQorCW1vdnEJJXhtbTAsICglZWRpKQorCW1vdnEJJXhtbTEsIC04KCVlZGksICVlY3gpCisJam1wCUwobW1fcmV0dXJuX3BvcF9hbGwpCisKK0wobW1fcmVtYWluaW5nXzVfOF9ieXRlc19mb3J3YXJkKToKKwltb3ZsCSglZXNpKSwgJWVheAorCW1vdmwJLTQoJWVzaSwlZWN4KSwgJWVieAorCW1vdmwJJWVheCwgKCVlZGkpCisJbW92bAklZWJ4LCAtNCglZWRpLCVlY3gpCisJam1wCUwobW1fcmV0dXJuX3BvcF9hbGwpCisKK0wobW1fcmVtYWluaW5nXzNfNF9ieXRlc19mb3J3YXJkKToKKwltb3Z6d2wJLTIoJWVzaSwlZWN4KSwgJWVheAorCW1vdnp3bAkoJWVzaSksICVlYngKKwltb3Z3CSVheCwgLTIoJWVkaSwlZWN4KQorCW1vdncJJWJ4LCAoJWVkaSkKKwlqbXAJTChtbV9yZXR1cm5fcG9wX2FsbCkKKworTChtbV9sZW5fMF8xNl9ieXRlc19mb3J3YXJkKToKKwl0ZXN0YgkkMjQsICVjbAorCWpuZQlMKG1tX2xlbl85XzE2X2J5dGVzX2ZvcndhcmQpCisJdGVzdGIJJDQsICVjbAorCS5wMmFsaWduIDQsLDUKKwlqbmUJTChtbV9sZW5fNV84X2J5dGVzX2ZvcndhcmQpCisJdGVzdGwJJWVjeCwgJWVjeAorCS5wMmFsaWduIDQsLDIKKwlqZQlMKG1tX3JldHVybikKKwl0ZXN0YgkkMiwgJWNsCisJLnAyYWxpZ24gNCwsMQorCWpuZQlMKG1tX2xlbl8yXzRfYnl0ZXNfZm9yd2FyZCkKKwltb3Z6YmwJLTEoJWVheCwlZWN4KSwgJWVieAorCW1vdnpibAkoJWVheCksICVlYXgKKwltb3ZiCSVibCwgLTEoJWVkeCwlZWN4KQorCW1vdmIJJWFsLCAoJWVkeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzJfNF9ieXRlc19mb3J3YXJkKToKKwltb3Z6d2wJLTIoJWVheCwlZWN4KSwgJWVieAorCW1vdnp3bAkoJWVheCksICVlYXgKKwltb3Z3CSVieCwgLTIoJWVkeCwlZWN4KQorCW1vdncJJWF4LCAoJWVkeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzVfOF9ieXRlc19mb3J3YXJkKToKKwltb3ZsCSglZWF4KSwgJWVieAorCW1vdmwJLTQoJWVheCwlZWN4KSwgJWVheAorCW1vdmwJJWVieCwgKCVlZHgpCisJbW92bAklZWF4LCAtNCglZWR4LCVlY3gpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX2xlbl85XzE2X2J5dGVzX2ZvcndhcmQpOgorCW1vdnEJKCVlYXgpLCAleG1tMAorCW1vdnEJLTgoJWVheCwgJWVjeCksICV4bW0xCisJbW92cQkleG1tMCwgKCVlZHgpCisJbW92cQkleG1tMSwgLTgoJWVkeCwgJWVjeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fcmVjYWxjX2xlbik6CisvKiBDb21wdXRlIGluICVlY3ggaG93IG1hbnkgYnl0ZXMgYXJlIGxlZnQgdG8gY29weSBhZnRlcgorCXRoZSBtYWluIGxvb3Agc3RvcHMuICAqLworCW1vdmwJJWVieCwgJWVjeAorCXN1YmwJJWVkeCwgJWVjeAorLyogVGhlIGNvZGUgZm9yIGNvcHlpbmcgYmFja3dhcmRzLiAgKi8KK0wobW1fbGVuXzBfb3JfbW9yZV9iYWNrd2FyZCk6CisKKy8qIE5vdyBkbyBjaGVja3MgZm9yIGxlbmd0aHMuIFdlIGRvIFswLi4xNl0sIFsxNi4uMzJdLCBbMzIuLjY0XSwgWzY0Li4xMjhdCisJc2VwYXJhdGVseS4gICovCisJY21wCSQxNiwgJWVjeAorCWpiZQlMKG1tX2xlbl8wXzE2X2J5dGVzX2JhY2t3YXJkKQorCisJY21wbAkkMzIsICVlY3gKKwlqZwlMKG1tX2xlbl8zMl9vcl9tb3JlX2JhY2t3YXJkKQorCisvKiBDb3B5IFswLi4zMl0gYW5kIHJldHVybi4gICovCisJbW92ZHF1CSglZWF4KSwgJXhtbTAKKwltb3ZkcXUJLTE2KCVlYXgsICVlY3gpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZHgpCisJbW92ZHF1CSV4bW0xLCAtMTYoJWVkeCwgJWVjeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzMyX29yX21vcmVfYmFja3dhcmQpOgorCWNtcGwJJDY0LCAlZWN4CisJamcJTChtbV9sZW5fNjRfb3JfbW9yZV9iYWNrd2FyZCkKKworLyogQ29weSBbMC4uNjRdIGFuZCByZXR1cm4uICAqLworCW1vdmRxdQkoJWVheCksICV4bW0wCisJbW92ZHF1CTE2KCVlYXgpLCAleG1tMQorCW1vdmRxdQktMTYoJWVheCwgJWVjeCksICV4bW0yCisJbW92ZHF1CS0zMiglZWF4LCAlZWN4KSwgJXhtbTMKKwltb3ZkcXUJJXhtbTAsICglZWR4KQorCW1vdmRxdQkleG1tMSwgMTYoJWVkeCkKKwltb3ZkcXUJJXhtbTIsIC0xNiglZWR4LCAlZWN4KQorCW1vdmRxdQkleG1tMywgLTMyKCVlZHgsICVlY3gpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX2xlbl82NF9vcl9tb3JlX2JhY2t3YXJkKToKKwljbXBsCSQxMjgsICVlY3gKKwlqZwlMKG1tX2xlbl8xMjhfb3JfbW9yZV9iYWNrd2FyZCkKKworLyogQ29weSBbMC4uMTI4XSBhbmQgcmV0dXJuLiAgKi8KKwltb3ZkcXUJKCVlYXgpLCAleG1tMAorCW1vdmRxdQkxNiglZWF4KSwgJXhtbTEKKwltb3ZkcXUJMzIoJWVheCksICV4bW0yCisJbW92ZHF1CTQ4KCVlYXgpLCAleG1tMworCW1vdmRxdQktNjQoJWVheCwgJWVjeCksICV4bW00CisJbW92ZHF1CS00OCglZWF4LCAlZWN4KSwgJXhtbTUKKwltb3ZkcXUJLTMyKCVlYXgsICVlY3gpLCAleG1tNgorCW1vdmRxdQktMTYoJWVheCwgJWVjeCksICV4bW03CisJbW92ZHF1CSV4bW0wLCAoJWVkeCkKKwltb3ZkcXUJJXhtbTEsIDE2KCVlZHgpCisJbW92ZHF1CSV4bW0yLCAzMiglZWR4KQorCW1vdmRxdQkleG1tMywgNDgoJWVkeCkKKwltb3ZkcXUJJXhtbTQsIC02NCglZWR4LCAlZWN4KQorCW1vdmRxdQkleG1tNSwgLTQ4KCVlZHgsICVlY3gpCisJbW92ZHF1CSV4bW02LCAtMzIoJWVkeCwgJWVjeCkKKwltb3ZkcXUJJXhtbTcsIC0xNiglZWR4LCAlZWN4KQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9sZW5fMTI4X29yX21vcmVfYmFja3dhcmQpOgorCVBVU0ggKCVlc2kpCisJUFVTSCAoJWVkaSkKKworLyogQWxpZ25pbmcgdGhlIGFkZHJlc3Mgb2YgZGVzdGluYXRpb24uIFdlIG5lZWQgdG8gc2F2ZQorCTE2IGJpdHMgZnJvbSB0aGUgc291cmNlIGluIG9yZGVyIG5vdCB0byBvdmVyd3JpdGUgdGhlbS4gICovCisJbW92ZHF1CS0xNiglZWF4LCAlZWN4KSwgJXhtbTAKKwltb3ZkcXUJLTMyKCVlYXgsICVlY3gpLCAleG1tMQorCW1vdmRxdQktNDgoJWVheCwgJWVjeCksICV4bW0yCisJbW92ZHF1CS02NCglZWF4LCAlZWN4KSwgJXhtbTMKKworCWxlYWwJKCVlZHgsICVlY3gpLCAlZWRpCisJYW5kbAkkLTY0LCAlZWRpCisKKwltb3ZsCSVlYXgsICVlc2kKKwlzdWJsCSVlZHgsICVlc2kKKworCW1vdmRxdQktMTYoJWVkaSwgJWVzaSksICV4bW00CisJbW92ZHF1CS0zMiglZWRpLCAlZXNpKSwgJXhtbTUKKwltb3ZkcXUJLTQ4KCVlZGksICVlc2kpLCAleG1tNgorCW1vdmRxdQktNjQoJWVkaSwgJWVzaSksICV4bW03CisKKwltb3ZkcXUJJXhtbTAsIC0xNiglZWR4LCAlZWN4KQorCW1vdmRxdQkleG1tMSwgLTMyKCVlZHgsICVlY3gpCisJbW92ZHF1CSV4bW0yLCAtNDgoJWVkeCwgJWVjeCkKKwltb3ZkcXUJJXhtbTMsIC02NCglZWR4LCAlZWN4KQorCW1vdmRxYQkleG1tNCwgLTE2KCVlZGkpCisJbW92ZHFhCSV4bW01LCAtMzIoJWVkaSkKKwltb3ZkcWEJJXhtbTYsIC00OCglZWRpKQorCW1vdmRxYQkleG1tNywgLTY0KCVlZGkpCisJbGVhbAktNjQoJWVkaSksICVlZGkKKworCWxlYWwJNjQoJWVkeCksICVlYngKKwlhbmRsCSQtNjQsICVlYngKKworCWNtcAklZWRpLCAlZWJ4CisJamFlCUwobW1fbWFpbl9sb29wX2JhY2t3YXJkX2VuZCkKKworCWNtcAkkU0hBUkVEX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorCWphZQlMKG1tX2xhcmdlX3BhZ2VfbG9vcF9iYWNrd2FyZCkKKworCS5wMmFsaWduIDQKK0wobW1fbWFpbl9sb29wX2JhY2t3YXJkKToKKworCXByZWZldGNodDAgLTEyOCglZWRpLCAlZXNpKQorCisJbW92ZHF1CS02NCglZWRpLCAlZXNpKSwgJXhtbTAKKwltb3ZkcXUJLTQ4KCVlZGksICVlc2kpLCAleG1tMQorCW1vdmRxdQktMzIoJWVkaSwgJWVzaSksICV4bW0yCisJbW92ZHF1CS0xNiglZWRpLCAlZXNpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTAsIC02NCglZWRpKQorCW1vdmRxYQkleG1tMSwgLTQ4KCVlZGkpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWRpKQorCWxlYWwJLTY0KCVlZGkpLCAlZWRpCisJY21wCSVlZGksICVlYngKKwlqYglMKG1tX21haW5fbG9vcF9iYWNrd2FyZCkKK0wobW1fbWFpbl9sb29wX2JhY2t3YXJkX2VuZCk6CisJUE9QICglZWRpKQorCVBPUCAoJWVzaSkKKwlqbXAJTChtbV9yZWNhbGNfbGVuKQorCisvKiBDb3B5IFswLi4xNl0gYW5kIHJldHVybi4gICovCitMKG1tX2xlbl8wXzE2X2J5dGVzX2JhY2t3YXJkKToKKwl0ZXN0YgkkMjQsICVjbAorCWpueglMKG1tX2xlbl85XzE2X2J5dGVzX2JhY2t3YXJkKQorCXRlc3RiCSQ0LCAlY2wKKwkucDJhbGlnbiA0LCw1CisJam56CUwobW1fbGVuXzVfOF9ieXRlc19iYWNrd2FyZCkKKwl0ZXN0bAklZWN4LCAlZWN4CisJLnAyYWxpZ24gNCwsMgorCWplCUwobW1fcmV0dXJuKQorCXRlc3RiCSQyLCAlY2wKKwkucDJhbGlnbiA0LCwxCisJam5lCUwobW1fbGVuXzNfNF9ieXRlc19iYWNrd2FyZCkKKwltb3Z6YmwJLTEoJWVheCwlZWN4KSwgJWVieAorCW1vdnpibAkoJWVheCksICVlYXgKKwltb3ZiCSVibCwgLTEoJWVkeCwlZWN4KQorCW1vdmIJJWFsLCAoJWVkeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzNfNF9ieXRlc19iYWNrd2FyZCk6CisJbW92endsCS0yKCVlYXgsJWVjeCksICVlYngKKwltb3Z6d2wJKCVlYXgpLCAlZWF4CisJbW92dwklYngsIC0yKCVlZHgsJWVjeCkKKwltb3Z3CSVheCwgKCVlZHgpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX2xlbl85XzE2X2J5dGVzX2JhY2t3YXJkKToKKwlQVVNIICglZXNpKQorCW1vdmwJLTQoJWVheCwlZWN4KSwgJWVieAorCW1vdmwJLTgoJWVheCwlZWN4KSwgJWVzaQorCW1vdmwJJWVieCwgLTQoJWVkeCwlZWN4KQorCW1vdmwJJWVzaSwgLTgoJWVkeCwlZWN4KQorCXN1YmwJJDgsICVlY3gKKwlQT1AgKCVlc2kpCisJam1wCUwobW1fbGVuXzBfMTZfYnl0ZXNfYmFja3dhcmQpCisKK0wobW1fbGVuXzVfOF9ieXRlc19iYWNrd2FyZCk6CisJbW92bAkoJWVheCksICVlYngKKwltb3ZsCS00KCVlYXgsJWVjeCksICVlYXgKKwltb3ZsCSVlYngsICglZWR4KQorCW1vdmwJJWVheCwgLTQoJWVkeCwlZWN4KQorCitMKG1tX3JldHVybik6CisJbW92bAklZWR4LCAlZWF4CisJUkVUVVJOCisKK0wobW1fcmV0dXJuX3BvcF9hbGwpOgorCW1vdmwJJWVkeCwgJWVheAorCVBPUCAoJWVkaSkKKwlQT1AgKCVlc2kpCisJUkVUVVJOCisKKy8qIEJpZyBsZW5ndGggY29weSBmb3J3YXJkIHBhcnQuICAqLworCisJLnAyYWxpZ24gNAorTChtbV9sYXJnZV9wYWdlX2xvb3BfZm9yd2FyZCk6CisJbW92ZHF1CSglZWF4LCAlZWRpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJWVheCwgJWVkaSksICV4bW0xCisJbW92ZHF1CTMyKCVlYXgsICVlZGkpLCAleG1tMgorCW1vdmRxdQk0OCglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZudGRxCSV4bW0wLCAoJWVkaSkKKwltb3ZudGRxCSV4bW0xLCAxNiglZWRpKQorCW1vdm50ZHEJJXhtbTIsIDMyKCVlZGkpCisJbW92bnRkcQkleG1tMywgNDgoJWVkaSkKKwlsZWFsCTY0KCVlZGkpLCAlZWRpCisJY21wCSVlZGksICVlYngKKwlqYQlMKG1tX2xhcmdlX3BhZ2VfbG9vcF9mb3J3YXJkKQorCXNmZW5jZQorCWptcAlMKG1tX2NvcHlfcmVtYWluaW5nX2ZvcndhcmQpCisKKy8qIEJpZyBsZW5ndGggY29weSBiYWNrd2FyZCBwYXJ0LiAgKi8KKwkucDJhbGlnbiA0CitMKG1tX2xhcmdlX3BhZ2VfbG9vcF9iYWNrd2FyZCk6CisJbW92ZHF1CS02NCglZWRpLCAlZXNpKSwgJXhtbTAKKwltb3ZkcXUJLTQ4KCVlZGksICVlc2kpLCAleG1tMQorCW1vdmRxdQktMzIoJWVkaSwgJWVzaSksICV4bW0yCisJbW92ZHF1CS0xNiglZWRpLCAlZXNpKSwgJXhtbTMKKwltb3ZudGRxCSV4bW0wLCAtNjQoJWVkaSkKKwltb3ZudGRxCSV4bW0xLCAtNDgoJWVkaSkKKwltb3ZudGRxCSV4bW0yLCAtMzIoJWVkaSkKKwltb3ZudGRxCSV4bW0zLCAtMTYoJWVkaSkKKwlsZWFsCS02NCglZWRpKSwgJWVkaQorCWNtcAklZWRpLCAlZWJ4CisJamIJTChtbV9sYXJnZV9wYWdlX2xvb3BfYmFja3dhcmQpCisJc2ZlbmNlCisJUE9QICglZWRpKQorCVBPUCAoJWVzaSkKKwlqbXAJTChtbV9yZWNhbGNfbGVuKQorCitFTkQgKE1FTU1PVkUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItbWVtc2V0LXNsbS5TIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLW1lbXNldC1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzBiZjc0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLW1lbXNldC1zbG0uUwpAQCAtMCwwICsxLDg0MSBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisKKyNpZm5kZWYgTUVNU0VUCisjIGRlZmluZSBNRU1TRVQgbWVtc2V0CisjZW5kaWYKKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIEFMSUdOCisjIGRlZmluZSBBTElHTihuKQkucDJhbGlnbiBuCisjZW5kaWYKKworI2lmbmRlZiBjZmlfc3RhcnRwcm9jCisjIGRlZmluZSBjZmlfc3RhcnRwcm9jCQkJLmNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9lbmRwcm9jCisjIGRlZmluZSBjZmlfZW5kcHJvYwkJCS5jZmlfZW5kcHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKKyMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZXN0b3JlCisjIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCQkuY2ZpX3Jlc3RvcmUgcmVnCisjZW5kaWYKKworI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkJCQlcCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsJCVwKKwkuZ2xvYmwgbmFtZTsJCQlcCisJLnAyYWxpZ24gNDsJCQlcCituYW1lOgkJCQkJXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpCQkJXAorCWNmaV9lbmRwcm9jOwkJCVwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyNlbmRpZgorCisjZGVmaW5lIENGSV9QVVNIKFJFRykJCQkJCQlcCisgIGNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7CQkJCQlcCisgIGNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCisKKyNkZWZpbmUgQ0ZJX1BPUChSRUcpCQkJCQkJXAorICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJCQkJCVwKKyAgY2ZpX3Jlc3RvcmUgKFJFRykKKworI2RlZmluZSBQVVNIKFJFRykJcHVzaGwgUkVHOyBDRklfUFVTSCAoUkVHKQorI2RlZmluZSBQT1AoUkVHKQlwb3BsIFJFRzsgQ0ZJX1BPUCAoUkVHKQorCisjaWZkZWYgVVNFX0FTX0JaRVJPCisjIGRlZmluZSBERVNUCQlQQVJNUworIyBkZWZpbmUgTEVOCQlERVNUKzQKKyMgZGVmaW5lIFNFVFJUTlZBTAorI2Vsc2UKKyMgZGVmaW5lIERFU1QJCVBBUk1TCisjIGRlZmluZSBDSFIJCURFU1QrNAorIyBkZWZpbmUgTEVOCQlDSFIrNAorIyBkZWZpbmUgU0VUUlROVkFMCW1vdmwgREVTVCglZXNwKSwgJWVheAorI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorIyBkZWZpbmUgRU5UUkFOQ0UJUFVTSCAoJWVieCk7CisjIGRlZmluZSBSRVRVUk5fRU5ECVBPUCAoJWVieCk7IHJldAorIyBkZWZpbmUgUkVUVVJOCQlSRVRVUk5fRU5EOyBDRklfUFVTSCAoJWVieCkKKyMgZGVmaW5lIFBBUk1TCQk4CQkvKiBQcmVzZXJ2ZSBFQlguICAqLworIyBkZWZpbmUgSk1QVEJMKEksIEIpCUkgLSBCCisKKy8qIExvYWQgYW4gZW50cnkgaW4gYSBqdW1wIHRhYmxlIGludG8gRUJYIGFuZCBicmFuY2ggdG8gaXQuICBUQUJMRSBpcyBhCisgICBqdW1wIHRhYmxlIHdpdGggcmVsYXRpdmUgb2Zmc2V0cy4gICAqLworIyBkZWZpbmUgQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShUQUJMRSkJCQkJXAorICAgIC8qIFdlIGZpcnN0IGxvYWQgUEMgaW50byBFQlguICAqLwkJCQlcCisgICAgY2FsbAlfX3g4Ni5nZXRfcGNfdGh1bmsuYng7CQkJCVwKKyAgICAvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGp1bXAgdGFibGUuICAqLwkJCVwKKyAgICBhZGQJCSQoVEFCTEUgLSAuKSwgJWVieDsJCQkJXAorICAgIC8qIEdldCB0aGUgZW50cnkgYW5kIGNvbnZlcnQgdGhlIHJlbGF0aXZlIG9mZnNldCB0byB0aGUJXAorICAgICAgIGFic29sdXRlIGFkZHJlc3MuICAqLwkJCQkJXAorICAgIGFkZAkJKCVlYngsJWVjeCw0KSwgJWVieDsJCQkJXAorICAgIGFkZAkJJWVjeCwgJWVkeDsJCQkJCVwKKyAgICAvKiBXZSBsb2FkZWQgdGhlIGp1bXAgdGFibGUgYW5kIGFkanVlc3RlZCBFRFguIEdvLiAgKi8JXAorICAgIGptcAkJKiVlYngKKworCS5zZWN0aW9uCS5nbnUubGlua29uY2UudC5fX3g4Ni5nZXRfcGNfdGh1bmsuYngsImF4IixAcHJvZ2JpdHMKKwkuZ2xvYmwJX194ODYuZ2V0X3BjX3RodW5rLmJ4CisJLmhpZGRlbglfX3g4Ni5nZXRfcGNfdGh1bmsuYngKKwlBTElHTiAoNCkKKwkudHlwZQlfX3g4Ni5nZXRfcGNfdGh1bmsuYngsQGZ1bmN0aW9uCitfX3g4Ni5nZXRfcGNfdGh1bmsuYng6CisJbW92bAkoJWVzcCksICVlYngKKwlyZXQKKyNlbHNlCisjIGRlZmluZSBFTlRSQU5DRQorIyBkZWZpbmUgUkVUVVJOX0VORAlyZXQKKyMgZGVmaW5lIFJFVFVSTgkJUkVUVVJOX0VORAorIyBkZWZpbmUgUEFSTVMJCTQKKyMgZGVmaW5lIEpNUFRCTChJLCBCKQlJCisKKy8qIEJyYW5jaCB0byBhbiBlbnRyeSBpbiBhIGp1bXAgdGFibGUuICBUQUJMRSBpcyBhIGp1bXAgdGFibGUgd2l0aAorICAgYWJzb2x1dGUgb2Zmc2V0cy4gICovCisjIGRlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFKQkJCQlcCisgICAgYWRkCQklZWN4LCAlZWR4OwkJCQkJXAorICAgIGptcAkJKlRBQkxFKCwlZWN4LDQpCisjZW5kaWYKKworCS5zZWN0aW9uIC50ZXh0LnNzZTIsImF4IixAcHJvZ2JpdHMKKwlBTElHTiAoNCkKK0VOVFJZIChNRU1TRVQpCisJRU5UUkFOQ0UKKworCW1vdmwJTEVOKCVlc3ApLCAlZWN4CisJY21wCSQwLCAlZWN4CisJamEJTCgxYnl0ZW9ybW9yZSkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworTCgxYnl0ZW9ybW9yZSk6CisjaWZkZWYgVVNFX0FTX0JaRVJPCisJeG9yCSVlYXgsICVlYXgKKyNlbHNlCisJbW92emJsCUNIUiglZXNwKSwgJWVheAorCW1vdmIJJWFsLCAlYWgKKwkvKiBGaWxsIHRoZSB3aG9sZSBFQVggd2l0aCBwYXR0ZXJuLiAgKi8KKwltb3ZsCSVlYXgsICVlZHgKKwlzaGwJICQxNiwgJWVheAorCW9yCSVlZHgsICVlYXgKKyNlbmRpZgorCW1vdmwJREVTVCglZXNwKSwgJWVkeAorCWNtcAkkMSwgJWVjeAorCWplCUwoMWJ5dGUpCisJY21wCSQxNiwgJWVjeAorCWphZQlMKDE2Ynl0ZXNvcm1vcmUpCisKKwljbXAJJDQsICVlY3gKKwlqYglMKDRieXRlc2xlc3MpCisJbW92bAklZWF4LCAoJWVkeCkKKwltb3ZsCSVlYXgsIC00KCVlZHgsICVlY3gpCisJY21wCSQ4LCAlZWN4CisJamIJTCg4Ynl0ZXNsZXNzKQorCW1vdmwJJWVheCwgNCglZWR4KQorCW1vdmwJJWVheCwgLTgoJWVkeCwgJWVjeCkKK0woOGJ5dGVzbGVzcyk6CisJU0VUUlROVkFMCisJUkVUVVJOCisKK0woNGJ5dGVzbGVzcyk6CisJbW92dwklYXgsICglZWR4KQorCW1vdncJJWF4LCAtMiglZWR4LCAlZWN4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCitMKDFieXRlKToKKwltb3ZiCSVhbCwgKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woMTZieXRlc29ybW9yZSk6CisjaWZkZWYgVVNFX0FTX0JaRVJPCisJcHhvcgkleG1tMCwgJXhtbTAKKyNlbHNlCisJbW92ZAklZWF4LCAleG1tMAorCXBzaHVmZAkkMCwgJXhtbTAsICV4bW0wCisjZW5kaWYKKworCWNtcAkkNjQsICVlY3gKKwlqYQlMKDY0Ynl0ZXNtb3JlKQorCW1vdmRxdQkleG1tMCwgKCVlZHgpCisJbW92ZHF1CSV4bW0wLCAtMTYoJWVkeCwgJWVjeCkKKwljbXAJJDMyLCAlZWN4CisJamJlCUwoMzJieXRlc2xlc3MpCisJbW92ZHF1CSV4bW0wLCAxNiglZWR4KQorCW1vdmRxdQkleG1tMCwgLTMyKCVlZHgsICVlY3gpCitMKDMyYnl0ZXNsZXNzKToKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworTCg2NGJ5dGVzbW9yZSk6CisJdGVzdGwJJDB4ZiwgJWVkeAorCWp6CUwoYWxpZ25lZF8xNikKK0wobm90X2FsaWduZWRfMTYpOgorCW1vdmRxdQkleG1tMCwgKCVlZHgpCisJbW92bAklZWR4LCAlZWF4CisJYW5kCSQtMTYsICVlZHgKKwlhZGQJJDE2LCAlZWR4CisJc3ViCSVlZHgsICVlYXgKKwlhZGQJJWVheCwgJWVjeAorCW1vdmQJJXhtbTAsICVlYXgKKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2KToKKwljbXAJJDEyOCwgJWVjeAorCWphZQlMKDEyOGJ5dGVzb3Jtb3JlKQorCitMKGFsaWduZWRfMTZfbGVzczEyOGJ5dGVzKToKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKworCUFMSUdOICg0KQorTCgxMjhieXRlc29ybW9yZSk6CisjaWZkZWYgU0hBUkVEX0NBQ0hFX1NJWkUKKwlQVVNIICglZWJ4KQorCW1vdgkkU0hBUkVEX0NBQ0hFX1NJWkUsICVlYngKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJY2FsbAlfX3g4Ni5nZXRfcGNfdGh1bmsuYngKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCW1vdgkkX194ODZfc2hhcmVkX2NhY2hlX3NpemVAR09UT0ZGKCVlYngpLCAlZWJ4CisjIGVsc2UKKwlQVVNIICglZWJ4KQorCW1vdgkkX194ODZfc2hhcmVkX2NhY2hlX3NpemUsICVlYngKKyMgZW5kaWYKKyNlbmRpZgorCWNtcAklZWJ4LCAlZWN4CisJamFlCUwoMTI4Ynl0ZXNvcm1vcmVfbnRfc3RhcnQpCisKKwlQT1AgKCVlYngpCisKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkUKKwlQVVNIICglZWJ4KQorCW1vdgkkREFUQV9DQUNIRV9TSVpFLCAlZWJ4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCWNhbGwJX194ODYuZ2V0X3BjX3RodW5rLmJ4CisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwltb3YJJF9feDg2X2RhdGFfY2FjaGVfc2l6ZUBHT1RPRkYoJWVieCksICVlYngKKyMgZWxzZQorCVBVU0ggKCVlYngpCisJbW92CSRfX3g4Nl9kYXRhX2NhY2hlX3NpemUsICVlYngKKyMgZW5kaWYKKyNlbmRpZgorCisJY21wCSVlYngsICVlY3gKKwlqYWUJTCgxMjhieXRlc19MMl9ub3JtYWwpCisJc3VibAkkMTI4LCAlZWN4CitMKDEyOGJ5dGVzb3Jtb3JlX25vcm1hbCk6CisJc3ViCSQxMjgsICVlY3gKKwltb3ZkcWEJJXhtbTAsICglZWR4KQorCW1vdmFwcwkleG1tMCwgMHgxMCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHgyMCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHgzMCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHg0MCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHg1MCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHg2MCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHg3MCglZWR4KQorCWxlYQkxMjgoJWVkeCksICVlZHgKKwlqYglMKDEyOGJ5dGVzbGVzc19ub3JtYWwpCisKKworCXN1YgkkMTI4LCAlZWN4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4MTAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4MjAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4MzAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NDAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NTAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NjAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NzAoJWVkeCkKKwlsZWEJMTI4KCVlZHgpLCAlZWR4CisJamFlCUwoMTI4Ynl0ZXNvcm1vcmVfbm9ybWFsKQorCitMKDEyOGJ5dGVzbGVzc19ub3JtYWwpOgorCWxlYQkxMjgoJWVjeCksICVlY3gKKyNpZiBkZWZpbmVkIERBVEFfQ0FDSEVfU0laRSB8fCAhKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlQT1AgKCVlYngpCisjZW5kaWYKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKworCUFMSUdOICg0KQorTCgxMjhieXRlc19MMl9ub3JtYWwpOgorCXByZWZldGNobnRhCTB4MzgwKCVlZHgpCisJcHJlZmV0Y2hudGEJMHgzYzAoJWVkeCkKKwlzdWIJJDEyOCwgJWVjeAorCW1vdmRxYQkleG1tMCwgKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDEwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDIwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDMwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDQwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDUwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDYwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDcwKCVlZHgpCisJYWRkCSQxMjgsICVlZHgKKwljbXAJJDEyOCwgJWVjeAorCWphZQlMKDEyOGJ5dGVzX0wyX25vcm1hbCkKKworTCgxMjhieXRlc2xlc3NfTDJfbm9ybWFsKToKKyNpZiBkZWZpbmVkIERBVEFfQ0FDSEVfU0laRSB8fCAhKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlQT1AgKCVlYngpCisjZW5kaWYKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKworTCgxMjhieXRlc29ybW9yZV9udF9zdGFydCk6CisJc3ViCSVlYngsICVlY3gKKwlBTElHTiAoNCkKK0woMTI4Ynl0ZXNvcm1vcmVfc2hhcmVkX2NhY2hlX2xvb3ApOgorCXByZWZldGNobnRhCTB4M2MwKCVlZHgpCisJcHJlZmV0Y2hudGEJMHgzODAoJWVkeCkKKwlzdWIJJDB4ODAsICVlYngKKwltb3ZkcWEJJXhtbTAsICglZWR4KQorCW1vdmFwcwkleG1tMCwgMHgxMCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHgyMCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHgzMCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHg0MCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHg1MCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHg2MCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHg3MCglZWR4KQorCWFkZAkkMHg4MCwgJWVkeAorCWNtcAkkMHg4MCwgJWVieAorCWphZQlMKDEyOGJ5dGVzb3Jtb3JlX3NoYXJlZF9jYWNoZV9sb29wKQorCWNtcAkkMHg4MCwgJWVjeAorCWpiCUwoc2hhcmVkX2NhY2hlX2xvb3BfZW5kKQorCUFMSUdOICg0KQorTCgxMjhieXRlc29ybW9yZV9udCk6CisJc3ViCSQweDgwLCAlZWN4CisJbW92bnRkcQkleG1tMCwgKCVlZHgpCisJbW92bnRkcQkleG1tMCwgMHgxMCglZWR4KQorCW1vdm50ZHEJJXhtbTAsIDB4MjAoJWVkeCkKKwltb3ZudGRxCSV4bW0wLCAweDMwKCVlZHgpCisJbW92bnRkcQkleG1tMCwgMHg0MCglZWR4KQorCW1vdm50ZHEJJXhtbTAsIDB4NTAoJWVkeCkKKwltb3ZudGRxCSV4bW0wLCAweDYwKCVlZHgpCisJbW92bnRkcQkleG1tMCwgMHg3MCglZWR4KQorCWFkZAkkMHg4MCwgJWVkeAorCWNtcAkkMHg4MCwgJWVjeAorCWphZQlMKDEyOGJ5dGVzb3Jtb3JlX250KQorCXNmZW5jZQorTChzaGFyZWRfY2FjaGVfbG9vcF9lbmQpOgorI2lmIGRlZmluZWQgU0hBUkVEX0NBQ0hFX1NJWkUgfHwgIShkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJUE9QICglZWJ4KQorI2VuZGlmCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV8xNl8xMjhieXRlcykpCisKKworCS5wdXNoc2VjdGlvbiAucm9kYXRhLnNzZTIsImEiLEBwcm9nYml0cworCUFMSUdOICgyKQorTCh0YWJsZV8xNl8xMjhieXRlcyk6CisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8wYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzE0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzE1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzE2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzE3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzE4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzE5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzIwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzIxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzIyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzIzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzI0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzI1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzI2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzI3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzI4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzI5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzMwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzMxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzMyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzMzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzM0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzM1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzM2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzM3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzM4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzM5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQ0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQ1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQ2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQ3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQ4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQ5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzUwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzUxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzUyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzUzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzU0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzU1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzU2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzU3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzU4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzU5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzYwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzYxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzYyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzYzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzY0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzY1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzY2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzY3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzY4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzY5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzcwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzcxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzcyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzczYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzc0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzc1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzc2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzc3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzc4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzc5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzgwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzgxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzgyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzgzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzg0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzg1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzg2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzg3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzg4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzg5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzkwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzkxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzkyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzkzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzk0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzk1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzk2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzk3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzk4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzk5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwMGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTAyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwM2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTA1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwNmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTA4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwOWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTExYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExMmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTE0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExNWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTE3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExOGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTIwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTIzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTI2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLnBvcHNlY3Rpb24KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzExMmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTIoJWVkeCkKK0woYWxpZ25lZF8xNl85NmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05NiglZWR4KQorTChhbGlnbmVkXzE2XzgwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTgwKCVlZHgpCitMKGFsaWduZWRfMTZfNjRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjQoJWVkeCkKK0woYWxpZ25lZF8xNl80OGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC00OCglZWR4KQorTChhbGlnbmVkXzE2XzMyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTMyKCVlZHgpCitMKGFsaWduZWRfMTZfMTZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTYoJWVkeCkKK0woYWxpZ25lZF8xNl8wYnl0ZXMpOgorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTEzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExMyglZWR4KQorTChhbGlnbmVkXzE2Xzk3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTk3KCVlZHgpCitMKGFsaWduZWRfMTZfODFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODEoJWVkeCkKK0woYWxpZ25lZF8xNl82NWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02NSglZWR4KQorTChhbGlnbmVkXzE2XzQ5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQ5KCVlZHgpCitMKGFsaWduZWRfMTZfMzNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzMoJWVkeCkKK0woYWxpZ25lZF8xNl8xN2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xNyglZWR4KQorTChhbGlnbmVkXzE2XzFieXRlcyk6CisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMTRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTE0KCVlZHgpCitMKGFsaWduZWRfMTZfOThieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtOTgoJWVkeCkKK0woYWxpZ25lZF8xNl84MmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC04MiglZWR4KQorTChhbGlnbmVkXzE2XzY2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTY2KCVlZHgpCitMKGFsaWduZWRfMTZfNTBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNTAoJWVkeCkKK0woYWxpZ25lZF8xNl8zNGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0zNCglZWR4KQorTChhbGlnbmVkXzE2XzE4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTE4KCVlZHgpCitMKGFsaWduZWRfMTZfMmJ5dGVzKToKKwltb3Z3CSVheCwgLTIoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzExNWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTUoJWVkeCkKK0woYWxpZ25lZF8xNl85OWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05OSglZWR4KQorTChhbGlnbmVkXzE2XzgzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTgzKCVlZHgpCitMKGFsaWduZWRfMTZfNjdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjcoJWVkeCkKK0woYWxpZ25lZF8xNl81MWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01MSglZWR4KQorTChhbGlnbmVkXzE2XzM1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTM1KCVlZHgpCitMKGFsaWduZWRfMTZfMTlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTkoJWVkeCkKK0woYWxpZ25lZF8xNl8zYnl0ZXMpOgorCW1vdncJJWF4LCAtMyglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTE2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExNiglZWR4KQorTChhbGlnbmVkXzE2XzEwMGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMDAoJWVkeCkKK0woYWxpZ25lZF8xNl84NGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC04NCglZWR4KQorTChhbGlnbmVkXzE2XzY4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTY4KCVlZHgpCitMKGFsaWduZWRfMTZfNTJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNTIoJWVkeCkKK0woYWxpZ25lZF8xNl8zNmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0zNiglZWR4KQorTChhbGlnbmVkXzE2XzIwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTIwKCVlZHgpCitMKGFsaWduZWRfMTZfNGJ5dGVzKToKKwltb3ZsCSVlYXgsIC00KCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMTdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTE3KCVlZHgpCitMKGFsaWduZWRfMTZfMTAxYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwMSglZWR4KQorTChhbGlnbmVkXzE2Xzg1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTg1KCVlZHgpCitMKGFsaWduZWRfMTZfNjlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjkoJWVkeCkKK0woYWxpZ25lZF8xNl81M2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01MyglZWR4KQorTChhbGlnbmVkXzE2XzM3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTM3KCVlZHgpCitMKGFsaWduZWRfMTZfMjFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjEoJWVkeCkKK0woYWxpZ25lZF8xNl81Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTUoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzExOGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTgoJWVkeCkKK0woYWxpZ25lZF8xNl8xMDJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTAyKCVlZHgpCitMKGFsaWduZWRfMTZfODZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODYoJWVkeCkKK0woYWxpZ25lZF8xNl83MGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC03MCglZWR4KQorTChhbGlnbmVkXzE2XzU0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTU0KCVlZHgpCitMKGFsaWduZWRfMTZfMzhieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzgoJWVkeCkKK0woYWxpZ25lZF8xNl8yMmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0yMiglZWR4KQorTChhbGlnbmVkXzE2XzZieXRlcyk6CisJbW92bAklZWF4LCAtNiglZWR4KQorCW1vdncJJWF4LCAtMiglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTE5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExOSglZWR4KQorTChhbGlnbmVkXzE2XzEwM2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMDMoJWVkeCkKK0woYWxpZ25lZF8xNl84N2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC04NyglZWR4KQorTChhbGlnbmVkXzE2XzcxYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTcxKCVlZHgpCitMKGFsaWduZWRfMTZfNTVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNTUoJWVkeCkKK0woYWxpZ25lZF8xNl8zOWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0zOSglZWR4KQorTChhbGlnbmVkXzE2XzIzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTIzKCVlZHgpCitMKGFsaWduZWRfMTZfN2J5dGVzKToKKwltb3ZsCSVlYXgsIC03KCVlZHgpCisJbW92dwklYXgsIC0zKCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMjBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTIwKCVlZHgpCitMKGFsaWduZWRfMTZfMTA0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwNCglZWR4KQorTChhbGlnbmVkXzE2Xzg4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTg4KCVlZHgpCitMKGFsaWduZWRfMTZfNzJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzIoJWVkeCkKK0woYWxpZ25lZF8xNl81NmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01NiglZWR4KQorTChhbGlnbmVkXzE2XzQwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQwKCVlZHgpCitMKGFsaWduZWRfMTZfMjRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjQoJWVkeCkKK0woYWxpZ25lZF8xNl84Ynl0ZXMpOgorCW1vdnEJJXhtbTAsIC04KCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMjFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTIxKCVlZHgpCitMKGFsaWduZWRfMTZfMTA1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwNSglZWR4KQorTChhbGlnbmVkXzE2Xzg5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTg5KCVlZHgpCitMKGFsaWduZWRfMTZfNzNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzMoJWVkeCkKK0woYWxpZ25lZF8xNl81N2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01NyglZWR4KQorTChhbGlnbmVkXzE2XzQxYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQxKCVlZHgpCitMKGFsaWduZWRfMTZfMjVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjUoJWVkeCkKK0woYWxpZ25lZF8xNl85Ynl0ZXMpOgorCW1vdnEJJXhtbTAsIC05KCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMjJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTIyKCVlZHgpCitMKGFsaWduZWRfMTZfMTA2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwNiglZWR4KQorTChhbGlnbmVkXzE2XzkwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTkwKCVlZHgpCitMKGFsaWduZWRfMTZfNzRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzQoJWVkeCkKK0woYWxpZ25lZF8xNl81OGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01OCglZWR4KQorTChhbGlnbmVkXzE2XzQyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQyKCVlZHgpCitMKGFsaWduZWRfMTZfMjZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjYoJWVkeCkKK0woYWxpZ25lZF8xNl8xMGJ5dGVzKToKKwltb3ZxCSV4bW0wLCAtMTAoJWVkeCkKKwltb3Z3CSVheCwgLTIoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzEyM2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMjMoJWVkeCkKK0woYWxpZ25lZF8xNl8xMDdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTA3KCVlZHgpCitMKGFsaWduZWRfMTZfOTFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtOTEoJWVkeCkKK0woYWxpZ25lZF8xNl83NWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC03NSglZWR4KQorTChhbGlnbmVkXzE2XzU5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTU5KCVlZHgpCitMKGFsaWduZWRfMTZfNDNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNDMoJWVkeCkKK0woYWxpZ25lZF8xNl8yN2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0yNyglZWR4KQorTChhbGlnbmVkXzE2XzExYnl0ZXMpOgorCW1vdnEJJXhtbTAsIC0xMSglZWR4KQorCW1vdncJJWF4LCAtMyglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTI0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEyNCglZWR4KQorTChhbGlnbmVkXzE2XzEwOGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMDgoJWVkeCkKK0woYWxpZ25lZF8xNl85MmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05MiglZWR4KQorTChhbGlnbmVkXzE2Xzc2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTc2KCVlZHgpCitMKGFsaWduZWRfMTZfNjBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjAoJWVkeCkKK0woYWxpZ25lZF8xNl80NGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC00NCglZWR4KQorTChhbGlnbmVkXzE2XzI4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTI4KCVlZHgpCitMKGFsaWduZWRfMTZfMTJieXRlcyk6CisJbW92cQkleG1tMCwgLTEyKCVlZHgpCisJbW92bAklZWF4LCAtNCglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTI1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEyNSglZWR4KQorTChhbGlnbmVkXzE2XzEwOWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMDkoJWVkeCkKK0woYWxpZ25lZF8xNl85M2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05MyglZWR4KQorTChhbGlnbmVkXzE2Xzc3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTc3KCVlZHgpCitMKGFsaWduZWRfMTZfNjFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjEoJWVkeCkKK0woYWxpZ25lZF8xNl80NWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC00NSglZWR4KQorTChhbGlnbmVkXzE2XzI5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTI5KCVlZHgpCitMKGFsaWduZWRfMTZfMTNieXRlcyk6CisJbW92cQkleG1tMCwgLTEzKCVlZHgpCisJbW92bAklZWF4LCAtNSglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTI2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEyNiglZWR4KQorTChhbGlnbmVkXzE2XzExMGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTAoJWVkeCkKK0woYWxpZ25lZF8xNl85NGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05NCglZWR4KQorTChhbGlnbmVkXzE2Xzc4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTc4KCVlZHgpCitMKGFsaWduZWRfMTZfNjJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjIoJWVkeCkKK0woYWxpZ25lZF8xNl80NmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC00NiglZWR4KQorTChhbGlnbmVkXzE2XzMwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTMwKCVlZHgpCitMKGFsaWduZWRfMTZfMTRieXRlcyk6CisJbW92cQkleG1tMCwgLTE0KCVlZHgpCisJbW92bAklZWF4LCAtNiglZWR4KQorCW1vdncJJWF4LCAtMiglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTI3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEyNyglZWR4KQorTChhbGlnbmVkXzE2XzExMWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTEoJWVkeCkKK0woYWxpZ25lZF8xNl85NWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05NSglZWR4KQorTChhbGlnbmVkXzE2Xzc5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTc5KCVlZHgpCitMKGFsaWduZWRfMTZfNjNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjMoJWVkeCkKK0woYWxpZ25lZF8xNl80N2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC00NyglZWR4KQorTChhbGlnbmVkXzE2XzMxYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTMxKCVlZHgpCitMKGFsaWduZWRfMTZfMTVieXRlcyk6CisJbW92cQkleG1tMCwgLTE1KCVlZHgpCisJbW92bAklZWF4LCAtNyglZWR4KQorCW1vdncJJWF4LCAtMyglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTl9FTkQKKworRU5EIChNRU1TRVQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItc3RwY3B5LXNsbS5TIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cGNweS1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YzQzZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cGNweS1zbG0uUwpAQCAtMCwwICsxLDMzIEBACisvKg0KK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24NCitBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMNCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUNCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorKi8NCisNCisjZGVmaW5lIFVTRV9BU19TVFBDUFkNCisjZGVmaW5lIFNUUkNQWSBzdHBjcHkNCisjaW5jbHVkZSAic3NlMi1zdHJjcHktc2xtLlMiDQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cG5jcHktc2xtLlMgYi9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItc3RwbmNweS1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjVjMGQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cG5jcHktc2xtLlMKQEAgLTAsMCArMSwzNCBAQAorLyoNCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uDQorQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzDQorICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlDQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyovDQorDQorI2RlZmluZSBVU0VfQVNfU1RSTkNQWQ0KKyNkZWZpbmUgVVNFX0FTX1NUUENQWQ0KKyNkZWZpbmUgU1RSQ1BZIHN0cG5jcHkNCisjaW5jbHVkZSAic3NlMi1zdHJjcHktc2xtLlMiDQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cmNweS1zbG0uUyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHJjcHktc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjVkODRiNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHJjcHktc2xtLlMKQEAgLTAsMCArMSwyMTU3IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIEwKKyMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3N0YXJ0cHJvYworIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkuY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2VuZHByb2MKKyMgZGVmaW5lIGNmaV9lbmRwcm9jCS5jZmlfZW5kcHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKKyMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZXN0b3JlCisjIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCS5jZmlfcmVzdG9yZSByZWcKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9hZGp1c3RfY2ZhX29mZnNldAorIyBkZWZpbmUgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0KG9mZikJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIEVOVFJZCisjIGRlZmluZSBFTlRSWShuYW1lKSAgICAgICAgICAgICBcCisJLnR5cGUgbmFtZSwgQGZ1bmN0aW9uOyAgIFwKKwkuZ2xvYmwgbmFtZTsgICAgICAgICAgICAgXAorCS5wMmFsaWduIDQ7ICAgICAgICAgICAgICBcCituYW1lOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgRU5ECisjIGRlZmluZSBFTkQobmFtZSkgICAgICAgICAgICAgICBcCisJY2ZpX2VuZHByb2M7ICAgICAgICAgICAgIFwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyNlbmRpZgorCisjZGVmaW5lIENGSV9QVVNIKFJFRykgICAgICAgICAgICAgICAgICBcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICg0KTsgICAgIFwKKwljZmlfcmVsX29mZnNldCAoUkVHLCAwKQorCisjZGVmaW5lIENGSV9QT1AoUkVHKSAgICAgICAgICAgICAgICAgICBcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7ICAgIFwKKwljZmlfcmVzdG9yZSAoUkVHKQorCisjZGVmaW5lIFBVU0goUkVHKSBwdXNobCBSRUc7IENGSV9QVVNIIChSRUcpCisjZGVmaW5lIFBPUChSRUcpIHBvcGwgUkVHOyBDRklfUE9QIChSRUcpCisKKyNpZm5kZWYgU1RSQ1BZCisjIGRlZmluZSBTVFJDUFkgIHN0cmNweQorI2VuZGlmCisKKyNpZmRlZiBVU0VfQVNfU1RQTkNQWQorIyBkZWZpbmUgVVNFX0FTX1NUUk5DUFkKKyMgZGVmaW5lIFVTRV9BU19TVFBDUFkKKyNlbmRpZgorCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKyMgZGVmaW5lIFBBUk1TICAxNgorIyBkZWZpbmUgRU5UUkFOQ0UgUFVTSCglZWJ4KTsgUFVTSCglZXNpKTsgUFVTSCglZWRpKQorIyBkZWZpbmUgUkVUVVJOICBQT1AoJWVkaSk7IFBPUCglZXNpKTsgUE9QKCVlYngpOyByZXQ7IENGSV9QVVNIKCVlYngpOyBDRklfUFVTSCglZWRpKTsgQ0ZJX1BVU0goJWVkaSk7CisjZWxzZQorIyBkZWZpbmUgUEFSTVMgIDEyCisjIGRlZmluZSBFTlRSQU5DRSBQVVNIKCVlc2kpOyBQVVNIKCVlZGkpCisjIGRlZmluZSBSRVRVUk4gIFBPUCglZWRpKTsgUE9QKCVlc2kpOyByZXQ7IENGSV9QVVNIKCVlc2kpOyBDRklfUFVTSCglZWRpKTsKKyNlbmRpZgorCisjZGVmaW5lIFNUUjEgIFBBUk1TCisjZGVmaW5lIFNUUjIgIFNUUjErNAorI2RlZmluZSBMRU4gIFNUUjIrNAorCisKKyNpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorIyBkZWZpbmUgSk1QVEJMKEksIEIpCUkgLSBCCisKKy8qIExvYWQgYW4gZW50cnkgaW4gYSBqdW1wIHRhYmxlIGludG8gRUNYIGFuZCBicmFuY2ggdG8gaXQuICBUQUJMRSBpcyBhCisJanVtcAl0YWJsZSB3aXRoIHJlbGF0aXZlIG9mZnNldHMuICBJTkRFWCBpcyBhIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZQorCWluZGV4CWludG8gdGhlIGp1bXAgdGFibGUuICAgU0NBTEUgaXMgdGhlIHNjYWxlIG9mIElOREVYLiAqLworCisjIGRlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFLCBJTkRFWCwgU0NBTEUpICAgICAgICAgICAgXAorCS8qIFdlIGZpcnN0IGxvYWQgUEMgaW50byBFQ1guICAqLyAgICAgICAgICAgICAgICAgICAgICAgXAorCWNhbGwJX194ODYuZ2V0X3BjX3RodW5rLmN4OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBqdW1wIHRhYmxlLiAgKi8gICAgICAgICAgICAgICBcCisJYWRkbAkkKFRBQkxFIC0gLiksICVlY3g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLyogR2V0IHRoZSBlbnRyeSBhbmQgY29udmVydCB0aGUgcmVsYXRpdmUgb2Zmc2V0IHRvIHRoZSBcCisJYWJzb2x1dGUJYWRkcmVzcy4gICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlhZGRsCSglZWN4LElOREVYLFNDQUxFKSwgJWVjeDsgICAgICAgICAgICAgICAgICAgICAgIFwKKwkvKiBXZSBsb2FkZWQgdGhlIGp1bXAgdGFibGUgYW5kIGFkanVlc3RlZCBFQ1guIEdvLiAgKi8gIFwKKwlqbXAJKiVlY3gKKyNlbHNlCisjIGRlZmluZSBKTVBUQkwoSSwgQikJSQorCisvKiBCcmFuY2ggdG8gYW4gZW50cnkgaW4gYSBqdW1wIHRhYmxlLiAgVEFCTEUgaXMgYSBqdW1wIHRhYmxlIHdpdGgKKwlhYnNvbHV0ZQlvZmZzZXRzLiAgSU5ERVggaXMgYSByZWdpc3RlciBjb250YWlucyB0aGUgaW5kZXggaW50byB0aGUKKwlqdW1wCXRhYmxlLiAgU0NBTEUgaXMgdGhlIHNjYWxlIG9mIElOREVYLiAqLworCisjIGRlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFLCBJTkRFWCwgU0NBTEUpCQlcCisJam1wCSpUQUJMRSgsSU5ERVgsU0NBTEUpCisjZW5kaWYKKworLnRleHQKK0VOVFJZIChTVFJDUFkpCisJRU5UUkFOQ0UKKwltb3YJU1RSMSglZXNwKSwgJWVkaQorCW1vdglTVFIyKCVlc3ApLCAlZXNpCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwltb3ZsCUxFTiglZXNwKSwgJWVieAorCXRlc3QJJWVieCwgJWVieAorCWp6CUwoRXhpdFplcm8pCisjZW5kaWYKKworCW1vdgklZXNpLCAlZWN4CisjaWZuZGVmIFVTRV9BU19TVFBDUFkKKwltb3YJJWVkaSwgJWVheCAgICAgIC8qIHNhdmUgcmVzdWx0ICovCisjZW5kaWYKKwlhbmQJJDE1LCAlZWN4CisJanoJTChTb3VyY2VTdHJpbmdBbGlnbm1lbnRaZXJvKQorCisJYW5kCSQtMTYsICVlc2kKKwlweG9yCSV4bW0wLCAleG1tMAorCXB4b3IJJXhtbTEsICV4bW0xCisKKwlwY21wZXFiCSglZXNpKSwgJXhtbTEKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCWFkZAklZWN4LCAlZWJ4CisjZW5kaWYKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXNocgklY2wsICVlZHgKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwljbXAJJDE2LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzVGFpbENhc2UyT3JDYXNlMykKKyNlbHNlCisJY21wCSQxNywgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWxDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKyNlbmRpZgorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwpCisKKwlwY21wZXFiCTE2KCVlc2kpLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJY21wCSQzMiwgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMzJCeXRlc0Nhc2UyT3JDYXNlMykKKyNlbHNlCisJY21wCSQzMywgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMzJCeXRlc0Nhc2UyT3JDYXNlMykKKyNlbmRpZgorI2VuZGlmCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8zMkJ5dGVzKQorCisJbW92ZHF1CSglZXNpLCAlZWN4KSwgJXhtbTEgICAvKiBjb3B5IDE2IGJ5dGVzICovCisJbW92ZHF1CSV4bW0xLCAoJWVkaSkKKworCXN1YgklZWN4LCAlZWRpCisJbW92CSVlZGksICVlZHgKKwltb3YJJDE2LCAlZWN4CisJYW5kCSQxNSwgJWVkeAorCWp6CUwoQWxpZ24xNkJvdGgpCisKKy8qIElmIHNvdXJjZSBhZHJlc3MgYWxpZ25tZW50ICE9IGRlc3RpbmF0aW9uIGFkcmVzcyBhbGlnbm1lbnQgKi8KKwkucDJhbGlnbiA0CitMKFVuYWxpZ24xNkJvdGgpOgorCW1vdmRxYQkoJWVzaSwgJWVjeCksICV4bW0xCisJbW92YXBzCTE2KCVlc2ksICVlY3gpLCAleG1tMgorCW1vdmRxdQkleG1tMSwgKCVlZGksICVlY3gpCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWFkZAkkMTYsICVlY3gKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNDgsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tMikKKyNlbHNlCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorI2VuZGlmCisKKwltb3ZhcHMJMTYoJWVzaSwgJWVjeCksICV4bW0zCisJbW92ZHF1CSV4bW0yLCAoJWVkaSwgJWVjeCkKKwlwY21wZXFiCSV4bW0zLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJYWRkCSQxNiwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW0zKQorI2Vsc2UKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCW1vdmFwcwkxNiglZXNpLCAlZWN4KSwgJXhtbTQKKwltb3ZkcXUJJXhtbTMsICglZWRpLCAlZWN4KQorCXBjbXBlcWIJJXhtbTQsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwlhZGQJJDE2LCAlZWN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZFhtbTQpCisjZWxzZQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlcykKKyNlbmRpZgorCisJbW92YXBzCTE2KCVlc2ksICVlY3gpLCAleG1tMQorCW1vdmRxdQkleG1tNCwgKCVlZGksICVlY3gpCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWFkZAkkMTYsICVlY3gKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tMSkKKyNlbHNlCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorI2VuZGlmCisKKwltb3ZhcHMJMTYoJWVzaSwgJWVjeCksICV4bW0yCisJbW92ZHF1CSV4bW0xLCAoJWVkaSwgJWVjeCkKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJYWRkCSQxNiwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW0yKQorI2Vsc2UKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCW1vdmFwcwkxNiglZXNpLCAlZWN4KSwgJXhtbTMKKwltb3ZkcXUJJXhtbTIsICglZWRpLCAlZWN4KQorCXBjbXBlcWIJJXhtbTMsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwlhZGQJJDE2LCAlZWN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZFhtbTMpCisjZWxzZQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlcykKKyNlbmRpZgorCisJbW92ZHF1CSV4bW0zLCAoJWVkaSwgJWVjeCkKKwltb3YJJWVzaSwgJWVkeAorCWxlYQkxNiglZXNpLCAlZWN4KSwgJWVzaQorCWFuZAkkLTB4NDAsICVlc2kKKwlzdWIJJWVzaSwgJWVkeAorCXN1YgklZWR4LCAlZWRpCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlsZWEJNjQrNjQoJWVieCwgJWVkeCksICVlYngKKyNlbmRpZgorTChVbmFsaWduZWQ2NExvb3ApOgorCW1vdmFwcwkoJWVzaSksICV4bW0yCisJbW92YXBzCSV4bW0yLCAleG1tNAorCW1vdmFwcwkxNiglZXNpKSwgJXhtbTUKKwltb3ZhcHMJMzIoJWVzaSksICV4bW0zCisJbW92YXBzCSV4bW0zLCAleG1tNgorCW1vdmFwcwk0OCglZXNpKSwgJXhtbTcKKwlwbWludWIJJXhtbTUsICV4bW0yCisJcG1pbnViCSV4bW03LCAleG1tMworCXBtaW51YgkleG1tMiwgJXhtbTMKKwlwY21wZXFiCSV4bW0wLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDY0LCAlZWJ4CisJamJlCUwoVW5hbGlnbmVkTGVhdmVDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChVbmFsaWduZWQ2NExlYXZlKQorCitMKFVuYWxpZ25lZDY0TG9vcF9zdGFydCk6CisJYWRkCSQ2NCwgJWVkaQorCWFkZAkkNjQsICVlc2kKKwltb3ZkcXUJJXhtbTQsIC02NCglZWRpKQorCW1vdmFwcwkoJWVzaSksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCW1vdmRxdQkleG1tNSwgLTQ4KCVlZGkpCisJbW92YXBzCTE2KCVlc2kpLCAleG1tNQorCXBtaW51YgkleG1tNSwgJXhtbTIKKwltb3ZhcHMJMzIoJWVzaSksICV4bW0zCisJbW92ZHF1CSV4bW02LCAtMzIoJWVkaSkKKwltb3ZhcHMJJXhtbTMsICV4bW02CisJbW92ZHF1CSV4bW03LCAtMTYoJWVkaSkKKwltb3ZhcHMJNDgoJWVzaSksICV4bW03CisJcG1pbnViCSV4bW03LCAleG1tMworCXBtaW51YgkleG1tMiwgJXhtbTMKKwlwY21wZXFiCSV4bW0zLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDY0LCAlZWJ4CisJamJlCUwoVW5hbGlnbmVkTGVhdmVDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlZHgsICVlZHgKKwlqeglMKFVuYWxpZ25lZDY0TG9vcF9zdGFydCkKKworTChVbmFsaWduZWQ2NExlYXZlKToKKwlweG9yCSV4bW0wLCAleG1tMAorCXB4b3IJJXhtbTEsICV4bW0xCisKKwlwY21wZXFiCSV4bW00LCAleG1tMAorCXBjbXBlcWIJJXhtbTUsICV4bW0xCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwlwbW92bXNrYiAleG1tMSwgJWVjeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZF8wKQorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZF8xNikKKworCXBjbXBlcWIJJXhtbTYsICV4bW0wCisJcGNtcGVxYgkleG1tNywgJXhtbTEKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCXBtb3Ztc2tiICV4bW0xLCAlZWN4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkXzMyKQorCisJYnNmCSVlY3gsICVlZHgKKwltb3ZkcXUJJXhtbTQsICglZWRpKQorCW1vdmRxdQkleG1tNSwgMTYoJWVkaSkKKwltb3ZkcXUJJXhtbTYsIDMyKCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTQ4KCVlZGksICVlZHgpLCAlZWF4CisjZW5kaWYKKwltb3ZkcXUJJXhtbTcsIDQ4KCVlZGkpCisJYWRkCSQxNSwgJWVieAorCXN1YgklZWR4LCAlZWJ4CisJbGVhCTQ5KCVlZGksICVlZHgpLCAlZWRpCisJam1wCUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZWxzZQorCWFkZAkkNDgsICVlc2kKKwlhZGQJJDQ4LCAlZWRpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0VGFibGUpLCAlZWR4LCA0KQorI2VuZGlmCisKKy8qIElmIHNvdXJjZSBhZHJlc3MgYWxpZ25tZW50ID09IGRlc3RpbmF0aW9uIGFkcmVzcyBhbGlnbm1lbnQgKi8KKworTChTb3VyY2VTdHJpbmdBbGlnbm1lbnRaZXJvKToKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxYQkoJWVzaSksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJY21wCSQxNiwgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwxQ2FzZTJPckNhc2UzKQorI2Vsc2UKKwljbXAJJDE3LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzVGFpbDFDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKyNlbmRpZgorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwxKQorCisJcGNtcGVxYgkxNiglZXNpKSwgJXhtbTAKKwltb3ZkcXUJJXhtbTEsICglZWRpKQorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwljbXAJJDMyLCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8zMkJ5dGVzMUNhc2UyT3JDYXNlMykKKyNlbHNlCisJY21wCSQzMywgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMzJCeXRlczFDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKyNlbmRpZgorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMzJCeXRlczEpCisKKwltb3YJJWVkaSwgJWVkeAorCW1vdgkkMTYsICVlY3gKKwlhbmQJJDE1LCAlZWR4CisJam56CUwoVW5hbGlnbjE2Qm90aCkKKworTChBbGlnbjE2Qm90aCk6CisJbW92ZHFhCSglZXNpLCAlZWN4KSwgJXhtbTEKKwltb3ZkcWEJMTYoJWVzaSwgJWVjeCksICV4bW0yCisJbW92ZHFhCSV4bW0xLCAoJWVkaSwgJWVjeCkKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJYWRkCSQxNiwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ0OCwgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW0yKQorI2Vsc2UKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCW1vdmRxYQkxNiglZXNpLCAlZWN4KSwgJXhtbTMKKwltb3ZkcWEJJXhtbTIsICglZWRpLCAlZWN4KQorCXBjbXBlcWIJJXhtbTMsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwlsZWEJMTYoJWVjeCksICVlY3gKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tMykKKyNlbHNlCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorI2VuZGlmCisKKwltb3ZkcWEJMTYoJWVzaSwgJWVjeCksICV4bW00CisJbW92ZHFhCSV4bW0zLCAoJWVkaSwgJWVjeCkKKwlwY21wZXFiCSV4bW00LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1htbTQpCisjZWxzZQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlcykKKyNlbmRpZgorCisJbW92ZHFhCTE2KCVlc2ksICVlY3gpLCAleG1tMQorCW1vdmRxYQkleG1tNCwgKCVlZGksICVlY3gpCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWxlYQkxNiglZWN4KSwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW0xKQorI2Vsc2UKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCW1vdmRxYQkxNiglZXNpLCAlZWN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTEsICglZWRpLCAlZWN4KQorCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwlsZWEJMTYoJWVjeCksICVlY3gKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tMikKKyNlbHNlCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorI2VuZGlmCisKKwltb3ZkcWEJMTYoJWVzaSwgJWVjeCksICV4bW0zCisJbW92ZHFhCSV4bW0yLCAoJWVkaSwgJWVjeCkKKwlwY21wZXFiCSV4bW0zLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1htbTMpCisjZWxzZQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlcykKKyNlbmRpZgorCisJbW92ZHFhCSV4bW0zLCAoJWVkaSwgJWVjeCkKKwltb3YJJWVzaSwgJWVkeAorCWxlYQkxNiglZXNpLCAlZWN4KSwgJWVzaQorCWFuZAkkLTB4NDAsICVlc2kKKwlzdWIJJWVzaSwgJWVkeAorCXN1YgklZWR4LCAlZWRpCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlsZWEJNjQrNjQoJWVieCwgJWVkeCksICVlYngKKyNlbmRpZgorTChBbGlnbmVkNjRMb29wKToKKwltb3ZkcWEJKCVlc2kpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKwltb3ZhcHMJMTYoJWVzaSksICV4bW01CisJbW92ZHFhCTMyKCVlc2kpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTYKKwltb3ZhcHMJNDgoJWVzaSksICV4bW03CisJcG1pbnViCSV4bW01LCAleG1tMgorCXBtaW51YgkleG1tNywgJXhtbTMKKwlwbWludWIJJXhtbTIsICV4bW0zCisJcGNtcGVxYgkleG1tMCwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ2NCwgJWVieAorCWpiZQlMKEFsaWduZWRMZWF2ZUNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKEFsaWduZWQ2NExlYXZlKQorCitMKEFsaWduZWQ2NExvb3Bfc3RhcnQpOgorCWFkZAkkNjQsICVlc2kKKwlhZGQJJDY0LCAlZWRpCisJbW92YXBzCSV4bW00LCAtNjQoJWVkaSkKKwltb3ZkcWEJKCVlc2kpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKwltb3ZhcHMJJXhtbTUsIC00OCglZWRpKQorCW1vdmFwcwkxNiglZXNpKSwgJXhtbTUKKwlwbWludWIJJXhtbTUsICV4bW0yCisJbW92YXBzCTMyKCVlc2kpLCAleG1tMworCW1vdmFwcwkleG1tNiwgLTMyKCVlZGkpCisJbW92ZHFhCSV4bW0zLCAleG1tNgorCW1vdmFwcwkleG1tNywgLTE2KCVlZGkpCisJbW92YXBzCTQ4KCVlc2kpLCAleG1tNworCXBtaW51YgkleG1tNywgJXhtbTMKKwlwbWludWIJJXhtbTIsICV4bW0zCisJcGNtcGVxYgkleG1tMywgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ2NCwgJWVieAorCWpiZQlMKEFsaWduZWRMZWF2ZUNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVkeCwgJWVkeAorCWp6CUwoQWxpZ25lZDY0TG9vcF9zdGFydCkKKworTChBbGlnbmVkNjRMZWF2ZSk6CisJcHhvcgkleG1tMCwgJXhtbTAKKwlweG9yCSV4bW0xLCAleG1tMQorCisJcGNtcGVxYgkleG1tNCwgJXhtbTAKKwlwY21wZXFiCSV4bW01LCAleG1tMQorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJcG1vdm1za2IgJXhtbTEsICVlY3gKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNfMCkKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNfMTYpCisKKwlwY21wZXFiCSV4bW02LCAleG1tMAorCXBjbXBlcWIJJXhtbTcsICV4bW0xCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwlwbW92bXNrYiAleG1tMSwgJWVjeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc18zMikKKworCWJzZgklZWN4LCAlZWR4CisJbW92ZHFhCSV4bW00LCAoJWVkaSkKKwltb3ZkcWEJJXhtbTUsIDE2KCVlZGkpCisJbW92ZHFhCSV4bW02LCAzMiglZWRpKQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk0OCglZWRpLCAlZWR4KSwgJWVheAorI2VuZGlmCisJbW92ZHFhCSV4bW03LCA0OCglZWRpKQorCWFkZAkkMTUsICVlYngKKwlzdWIJJWVkeCwgJWVieAorCWxlYQk0OSglZWRpLCAlZWR4KSwgJWVkaQorCWptcAlMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2Vsc2UKKwlhZGQJJDQ4LCAlZXNpCisJYWRkCSQ0OCwgJWVkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJWVkeCwgNCkKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBDYXNlMSAqLworI2lmbmRlZiBVU0VfQVNfU1RSTkNQWQorCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzKToKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWN4LCAlZXNpCisJYnNmCSVlZHgsICVlZHgKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRUYWJsZSksICVlZHgsIDQpCisjZW5kaWYKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwpOgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSVlY3gsICVlYngKKyNlbmRpZgorCWFkZAklZWN4LCAlZXNpCisJYnNmCSVlZHgsICVlZHgKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRUYWJsZSksICVlZHgsIDQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMzJCeXRlczEpOgorCWFkZAkkMTYsICVlc2kKKwlhZGQJJDE2LCAlZWRpCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisjZW5kaWYKK0woQ29weUZyb20xVG8xNkJ5dGVzVGFpbDEpOgorCWJzZgklZWR4LCAlZWR4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0VGFibGUpLCAlZWR4LCA0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzMyQnl0ZXMpOgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSVlY3gsICVlYngKKyNlbmRpZgorCWJzZgklZWR4LCAlZWR4CisJYWRkCSVlY3gsICVlc2kKKwlhZGQJJDE2LCAlZWR4CisJc3ViCSVlY3gsICVlZHgKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRUYWJsZSksICVlZHgsIDQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc18wKToKKwlic2YJJWVkeCwgJWVkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkoJWVkaSwgJWVkeCksICVlYXgKKyNlbmRpZgorCW1vdmRxYQkleG1tNCwgKCVlZGkpCisJYWRkCSQ2MywgJWVieAorCXN1YgklZWR4LCAlZWJ4CisJbGVhCTEoJWVkaSwgJWVkeCksICVlZGkKKwlqbXAJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbHNlCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0VGFibGUpLCAlZWR4LCA0KQorI2VuZGlmCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc18xNik6CisJYnNmCSVlY3gsICVlZHgKKwltb3ZkcWEJJXhtbTQsICglZWRpKQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxNiglZWRpLCAlZWR4KSwgJWVheAorI2VuZGlmCisJbW92ZHFhCSV4bW01LCAxNiglZWRpKQorCWFkZAkkNDcsICVlYngKKwlzdWIJJWVkeCwgJWVieAorCWxlYQkxNyglZWRpLCAlZWR4KSwgJWVkaQorCWptcAlMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2Vsc2UKKwlhZGQJJDE2LCAlZXNpCisJYWRkCSQxNiwgJWVkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJWVkeCwgNCkKKyNlbmRpZgorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNfMzIpOgorCWJzZgklZWR4LCAlZWR4CisJbW92ZHFhCSV4bW00LCAoJWVkaSkKKwltb3ZkcWEJJXhtbTUsIDE2KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTMyKCVlZGksICVlZHgpLCAlZWF4CisjZW5kaWYKKwltb3ZkcWEJJXhtbTYsIDMyKCVlZGkpCisJYWRkCSQzMSwgJWVieAorCXN1YgklZWR4LCAlZWJ4CisJbGVhCTMzKCVlZGksICVlZHgpLCAlZWRpCisJam1wCUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZWxzZQorCWFkZAkkMzIsICVlc2kKKwlhZGQJJDMyLCAlZWRpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0VGFibGUpLCAlZWR4LCA0KQorI2VuZGlmCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZF8wKToKKwlic2YJJWVkeCwgJWVkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkoJWVkaSwgJWVkeCksICVlYXgKKyNlbmRpZgorCW1vdmRxdQkleG1tNCwgKCVlZGkpCisJYWRkCSQ2MywgJWVieAorCXN1YgklZWR4LCAlZWJ4CisJbGVhCTEoJWVkaSwgJWVkeCksICVlZGkKKwlqbXAJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbHNlCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0VGFibGUpLCAlZWR4LCA0KQorI2VuZGlmCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZF8xNik6CisJYnNmCSVlY3gsICVlZHgKKwltb3ZkcXUJJXhtbTQsICglZWRpKQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxNiglZWRpLCAlZWR4KSwgJWVheAorI2VuZGlmCisJbW92ZHF1CSV4bW01LCAxNiglZWRpKQorCWFkZAkkNDcsICVlYngKKwlzdWIJJWVkeCwgJWVieAorCWxlYQkxNyglZWRpLCAlZWR4KSwgJWVkaQorCWptcAlMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2Vsc2UKKwlhZGQJJDE2LCAlZXNpCisJYWRkCSQxNiwgJWVkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJWVkeCwgNCkKKyNlbmRpZgorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRfMzIpOgorCWJzZgklZWR4LCAlZWR4CisJbW92ZHF1CSV4bW00LCAoJWVkaSkKKwltb3ZkcXUJJXhtbTUsIDE2KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTMyKCVlZGksICVlZHgpLCAlZWF4CisjZW5kaWYKKwltb3ZkcXUJJXhtbTYsIDMyKCVlZGkpCisJYWRkCSQzMSwgJWVieAorCXN1YgklZWR4LCAlZWJ4CisJbGVhCTMzKCVlZGksICVlZHgpLCAlZWRpCisJam1wCUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZWxzZQorCWFkZAkkMzIsICVlc2kKKwlhZGQJJDMyLCAlZWRpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0VGFibGUpLCAlZWR4LCA0KQorI2VuZGlmCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzWG1tNik6CisJbW92ZHFhCSV4bW02LCAoJWVkaSwgJWVjeCkKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW1FeGl0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW01KToKKwltb3ZkcWEJJXhtbTUsICglZWRpLCAlZWN4KQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc1htbUV4aXQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1htbTQpOgorCW1vdmRxYQkleG1tNCwgKCVlZGksICVlY3gpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tRXhpdCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzWG1tMyk6CisJbW92ZHFhCSV4bW0zLCAoJWVkaSwgJWVjeCkKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW1FeGl0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW0yKToKKwltb3ZkcWEJJXhtbTIsICglZWRpLCAlZWN4KQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc1htbUV4aXQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1htbTEpOgorCW1vdmRxYQkleG1tMSwgKCVlZGksICVlY3gpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tRXhpdCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tNik6CisJbW92ZHF1CSV4bW02LCAoJWVkaSwgJWVjeCkKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW1FeGl0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW01KToKKwltb3ZkcXUJJXhtbTUsICglZWRpLCAlZWN4KQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc1htbUV4aXQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZFhtbTQpOgorCW1vdmRxdQkleG1tNCwgKCVlZGksICVlY3gpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tRXhpdCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tMyk6CisJbW92ZHF1CSV4bW0zLCAoJWVkaSwgJWVjeCkKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW1FeGl0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW0xKToKKwltb3ZkcXUJJXhtbTEsICglZWRpLCAlZWN4KQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc1htbUV4aXQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc0V4aXQpOgorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJWVkeCwgNCkKKworLyogQ2FzZTIgKi8KKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTIpOgorCWFkZAkkMTYsICVlYngKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWN4LCAlZXNpCisJYnNmCSVlZHgsICVlZHgKKwljbXAJJWVieCwgJWVkeAorCWpiCUwoQ29weUZyb20xVG8xNkJ5dGVzRXhpdCkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRTdHJuY3B5VGFibGUpLCAlZWJ4LCA0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzMyQnl0ZXNDYXNlMik6CisJc3ViCSVlY3gsICVlYngKKwlhZGQJJWVjeCwgJWVzaQorCWJzZgklZWR4LCAlZWR4CisJYWRkCSQxNiwgJWVkeAorCXN1YgklZWN4LCAlZWR4CisJY21wCSVlYngsICVlZHgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0V4aXQpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0U3RybmNweVRhYmxlKSwgJWVieCwgNCkKKworTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsQ2FzZTIpOgorCXN1YgklZWN4LCAlZWJ4CisJYWRkCSVlY3gsICVlc2kKKwlic2YJJWVkeCwgJWVkeAorCWNtcAklZWJ4LCAlZWR4CisJamIJTChDb3B5RnJvbTFUbzE2Qnl0ZXNFeGl0KQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFN0cm5jcHlUYWJsZSksICVlYngsIDQpCisKK0woQ29weUZyb20xVG8xNkJ5dGVzVGFpbDFDYXNlMik6CisJYnNmCSVlZHgsICVlZHgKKwljbXAJJWVieCwgJWVkeAorCWpiCUwoQ29weUZyb20xVG8xNkJ5dGVzRXhpdCkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRTdHJuY3B5VGFibGUpLCAlZWJ4LCA0KQorCisvKiBDYXNlMiBvciBDYXNlMywgIENhc2UzICovCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMyk6CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTIpCitMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKToKKwlhZGQJJDE2LCAlZWJ4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVjeCwgJWVzaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFN0cm5jcHlUYWJsZSksICVlYngsIDQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMzJCeXRlc0Nhc2UyT3JDYXNlMyk6CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8zMkJ5dGVzQ2FzZTIpCisJc3ViCSVlY3gsICVlYngKKwlhZGQJJWVjeCwgJWVzaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFN0cm5jcHlUYWJsZSksICVlYngsIDQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWxDYXNlMk9yQ2FzZTMpOgorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWxDYXNlMikKKwlzdWIJJWVjeCwgJWVieAorCWFkZAklZWN4LCAlZXNpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0U3RybmNweVRhYmxlKSwgJWVieCwgNCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8zMkJ5dGVzMUNhc2UyT3JDYXNlMyk6CisJYWRkCSQxNiwgJWVkaQorCWFkZAkkMTYsICVlc2kKKwlzdWIJJDE2LCAlZWJ4CitMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwxQ2FzZTJPckNhc2UzKToKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsMUNhc2UyKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFN0cm5jcHlUYWJsZSksICVlYngsIDQpCisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkucDJhbGlnbiA0CitMKEV4aXQwKToKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbW92CSVlZGksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MSk6CisJbW92YgklZGgsICglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJKCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMSwgJWVieAorCWxlYQkxKCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDIpOgorCW1vdncJKCVlc2kpLCAlZHgKKwltb3Z3CSVkeCwgKCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxKCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMiwgJWVieAorCWxlYQkyKCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDMpOgorCW1vdncJKCVlc2kpLCAlY3gKKwltb3Z3CSVjeCwgKCVlZGkpCisJbW92YgklZGgsIDIoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTIoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQzLCAlZWJ4CisJbGVhCTMoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0NCk6CisJbW92bAkoJWVzaSksICVlZHgKKwltb3ZsCSVlZHgsICglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMyglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDQsICVlYngKKwlsZWEJNCglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQ1KToKKwltb3ZsCSglZXNpKSwgJWVjeAorCW1vdmIJJWRoLCA0KCVlZGkpCisJbW92bAklZWN4LCAoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTQoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ1LCAlZWJ4CisJbGVhCTUoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0Nik6CisJbW92bAkoJWVzaSksICVlY3gKKwltb3Z3CTQoJWVzaSksICVkeAorCW1vdmwJJWVjeCwgKCVlZGkpCisJbW92dwklZHgsIDQoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTUoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ2LCAlZWJ4CisJbGVhCTYoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0Nyk6CisJbW92bAkoJWVzaSksICVlY3gKKwltb3ZsCTMoJWVzaSksICVlZHgKKwltb3ZsCSVlY3gsICglZWRpKQorCW1vdmwJJWVkeCwgMyglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJNiglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDcsICVlYngKKwlsZWEJNyglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQ4KToKKwltb3ZscGQJKCVlc2kpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk3KCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkOCwgJWVieAorCWxlYQk4KCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDkpOgorCW1vdmxwZAkoJWVzaSksICV4bW0wCisJbW92YgklZGgsIDgoJWVkaSkKKwltb3ZscGQJJXhtbTAsICglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJOCglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDksICVlYngKKwlsZWEJOSglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxMCk6CisJbW92bHBkCSglZXNpKSwgJXhtbTAKKwltb3Z3CTgoJWVzaSksICVkeAorCW1vdmxwZAkleG1tMCwgKCVlZGkpCisJbW92dwklZHgsIDgoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTkoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxMCwgJWVieAorCWxlYQkxMCglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxMSk6CisJbW92bHBkCSglZXNpKSwgJXhtbTAKKwltb3ZsCTcoJWVzaSksICVlZHgKKwltb3ZscGQJJXhtbTAsICglZWRpKQorCW1vdmwJJWVkeCwgNyglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTAoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxMSwgJWVieAorCWxlYQkxMSglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxMik6CisJbW92bHBkCSglZXNpKSwgJXhtbTAKKwltb3ZsCTgoJWVzaSksICVlZHgKKwltb3ZscGQJJXhtbTAsICglZWRpKQorCW1vdmwJJWVkeCwgOCglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTEoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxMiwgJWVieAorCWxlYQkxMiglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxMyk6CisJbW92bHBkCSglZXNpKSwgJXhtbTAKKwltb3ZscGQJNSglZXNpKSwgJXhtbTEKKwltb3ZscGQJJXhtbTAsICglZWRpKQorCW1vdmxwZAkleG1tMSwgNSglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTIoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxMywgJWVieAorCWxlYQkxMyglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxNCk6CisJbW92bHBkCSglZXNpKSwgJXhtbTAKKwltb3ZscGQJNiglZXNpKSwgJXhtbTEKKwltb3ZscGQJJXhtbTAsICglZWRpKQorCW1vdmxwZAkleG1tMSwgNiglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTMoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNCwgJWVieAorCWxlYQkxNCglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxNSk6CisJbW92bHBkCSglZXNpKSwgJXhtbTAKKwltb3ZscGQJNyglZXNpKSwgJXhtbTEKKwltb3ZscGQJJXhtbTAsICglZWRpKQorCW1vdmxwZAkleG1tMSwgNyglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTQoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNSwgJWVieAorCWxlYQkxNSglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxNik6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTUoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWxlYQkxNiglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxNyk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwl4b3IJJWNsLCAlY2wKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmIJJWNsLCAxNiglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTYoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNywgJWVieAorCWxlYQkxNyglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxOCk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3Z3CTE2KCVlc2kpLCAlY3gKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdncJJWN4LCAxNiglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTcoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxOCwgJWVieAorCWxlYQkxOCglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxOSk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZsCTE1KCVlc2kpLCAlZWN4CisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZsCSVlY3gsIDE1KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxOCglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE5LCAlZWJ4CisJbGVhCTE5KCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDIwKToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmwJMTYoJWVzaSksICVlY3gKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmwJJWVjeCwgMTYoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE5KCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMjAsICVlYngKKwlsZWEJMjAoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MjEpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92bAkxNiglZXNpKSwgJWVjeAorCXhvcgklZGwsICVkbAorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92bAklZWN4LCAxNiglZWRpKQorCW1vdmIJJWRsLCAyMCglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjAoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQyMSwgJWVieAorCWxlYQkyMSglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyMik6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZscGQJMTQoJWVzaSksICV4bW0zCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTMsIDE0KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyMSglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDIyLCAlZWJ4CisJbGVhCTIyKCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDIzKToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmxwZAkxNSglZXNpKSwgJXhtbTMKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmxwZAkleG1tMywgMTUoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTIyKCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMjMsICVlYngKKwlsZWEJMjMoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MjQpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92bHBkCTE2KCVlc2kpLCAleG1tMgorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92bHBkCSV4bW0yLCAxNiglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjMoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQyNCwgJWVieAorCWxlYQkyNCglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyNSk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZscGQJMTYoJWVzaSksICV4bW0yCisJeG9yCSVjbCwgJWNsCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTIsIDE2KCVlZGkpCisJbW92YgklY2wsIDI0KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyNCglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDI1LCAlZWJ4CisJbGVhCTI1KCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDI2KToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmxwZAkxNiglZXNpKSwgJXhtbTIKKwltb3Z3CTI0KCVlc2kpLCAlY3gKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmxwZAkleG1tMiwgMTYoJWVkaSkKKwltb3Z3CSVjeCwgMjQoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTI1KCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMjYsICVlYngKKwlsZWEJMjYoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MjcpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92bHBkCTE2KCVlc2kpLCAleG1tMgorCW1vdmwJMjMoJWVzaSksICVlY3gKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmxwZAkleG1tMiwgMTYoJWVkaSkKKwltb3ZsCSVlY3gsIDIzKCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyNiglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDI3LCAlZWJ4CisJbGVhCTI3KCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDI4KToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmxwZAkxNiglZXNpKSwgJXhtbTIKKwltb3ZsCTI0KCVlc2kpLCAlZWN4CisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTIsIDE2KCVlZGkpCisJbW92bAklZWN4LCAyNCglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjcoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQyOCwgJWVieAorCWxlYQkyOCglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyOSk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZkcXUJMTMoJWVzaSksICV4bW0yCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZkcXUJJXhtbTIsIDEzKCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyOCglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDI5LCAlZWJ4CisJbGVhCTI5KCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDMwKToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmRxdQkxNCglZXNpKSwgJXhtbTIKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmRxdQkleG1tMiwgMTQoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTI5KCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMzAsICVlYngKKwlsZWEJMzAoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisKKwkucDJhbGlnbiA0CitMKEV4aXQzMSk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZkcXUJMTUoJWVzaSksICV4bW0yCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZkcXUJJXhtbTIsIDE1KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkzMCglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDMxLCAlZWJ4CisJbGVhCTMxKCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDMyKToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmRxdQkxNiglZXNpKSwgJXhtbTIKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmRxdQkleG1tMiwgMTYoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTMxKCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMzIsICVlYngKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxKToKKwltb3ZiCSglZXNpKSwgJWRsCisJbW92YgklZGwsICglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMSglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0Mik6CisJbW92dwkoJWVzaSksICVkeAorCW1vdncJJWR4LCAoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTIoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQzKToKKwltb3Z3CSglZXNpKSwgJWN4CisJbW92YgkyKCVlc2kpLCAlZGwKKwltb3Z3CSVjeCwgKCVlZGkpCisJbW92YgklZGwsIDIoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTMoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDQpOgorCW1vdmwJKCVlc2kpLCAlZWR4CisJbW92bAklZWR4LCAoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTQoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDUpOgorCW1vdmwJKCVlc2kpLCAlZWN4CisJbW92Ygk0KCVlc2kpLCAlZGwKKwltb3ZsCSVlY3gsICglZWRpKQorCW1vdmIJJWRsLCA0KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk1KCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQ2KToKKwltb3ZsCSglZXNpKSwgJWVjeAorCW1vdncJNCglZXNpKSwgJWR4CisJbW92bAklZWN4LCAoJWVkaSkKKwltb3Z3CSVkeCwgNCglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJNiglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0Nyk6CisJbW92bAkoJWVzaSksICVlY3gKKwltb3ZsCTMoJWVzaSksICVlZHgKKwltb3ZsCSVlY3gsICglZWRpKQorCW1vdmwJJWVkeCwgMyglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJNyglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0OCk6CisJbW92bHBkCSglZXNpKSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJOCglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0OSk6CisJbW92bHBkCSglZXNpKSwgJXhtbTAKKwltb3ZiCTgoJWVzaSksICVkbAorCW1vdmxwZAkleG1tMCwgKCVlZGkpCisJbW92YgklZGwsIDgoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTkoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDEwKToKKwltb3ZscGQJKCVlc2kpLCAleG1tMAorCW1vdncJOCglZXNpKSwgJWR4CisJbW92bHBkCSV4bW0wLCAoJWVkaSkKKwltb3Z3CSVkeCwgOCglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTAoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDExKToKKwltb3ZscGQJKCVlc2kpLCAleG1tMAorCW1vdmwJNyglZXNpKSwgJWVkeAorCW1vdmxwZAkleG1tMCwgKCVlZGkpCisJbW92bAklZWR4LCA3KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxMSglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTIpOgorCW1vdmxwZAkoJWVzaSksICV4bW0wCisJbW92bAk4KCVlc2kpLCAlZWR4CisJbW92bHBkCSV4bW0wLCAoJWVkaSkKKwltb3ZsCSVlZHgsIDgoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTEyKCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxMyk6CisJbW92bHBkCSglZXNpKSwgJXhtbTAKKwltb3ZscGQJNSglZXNpKSwgJXhtbTEKKwltb3ZscGQJJXhtbTAsICglZWRpKQorCW1vdmxwZAkleG1tMSwgNSglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTMoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDE0KToKKwltb3ZscGQJKCVlc2kpLCAleG1tMAorCW1vdmxwZAk2KCVlc2kpLCAleG1tMQorCW1vdmxwZAkleG1tMCwgKCVlZGkpCisJbW92bHBkCSV4bW0xLCA2KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxNCglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTUpOgorCW1vdmxwZAkoJWVzaSksICV4bW0wCisJbW92bHBkCTcoJWVzaSksICV4bW0xCisJbW92bHBkCSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTEsIDcoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE1KCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxNik6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTYoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDE3KToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmIJMTYoJWVzaSksICVjbAorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92YgklY2wsIDE2KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxNyglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTgpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92dwkxNiglZXNpKSwgJWN4CisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3Z3CSVjeCwgMTYoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE4KCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxOSk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZsCTE1KCVlc2kpLCAlZWN4CisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZsCSVlY3gsIDE1KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxOSglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MjApOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92bAkxNiglZXNpKSwgJWVjeAorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92bAklZWN4LCAxNiglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjAoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDIxKToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmwJMTYoJWVzaSksICVlY3gKKwltb3ZiCTIwKCVlc2kpLCAlZGwKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmwJJWVjeCwgMTYoJWVkaSkKKwltb3ZiCSVkbCwgMjAoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTIxKCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQyMik6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZscGQJMTQoJWVzaSksICV4bW0zCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTMsIDE0KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyMiglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MjMpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92bHBkCTE1KCVlc2kpLCAleG1tMworCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92bHBkCSV4bW0zLCAxNSglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjMoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDI0KToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmxwZAkxNiglZXNpKSwgJXhtbTIKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmxwZAkleG1tMiwgMTYoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTI0KCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQyNSk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZscGQJMTYoJWVzaSksICV4bW0yCisJbW92YgkyNCglZXNpKSwgJWNsCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTIsIDE2KCVlZGkpCisJbW92YgklY2wsIDI0KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyNSglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MjYpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92bHBkCTE2KCVlc2kpLCAleG1tMgorCW1vdncJMjQoJWVzaSksICVjeAorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92bHBkCSV4bW0yLCAxNiglZWRpKQorCW1vdncJJWN4LCAyNCglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjYoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDI3KToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmxwZAkxNiglZXNpKSwgJXhtbTIKKwltb3ZsCTIzKCVlc2kpLCAlZWN4CisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTIsIDE2KCVlZGkpCisJbW92bAklZWN4LCAyMyglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjcoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDI4KToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmxwZAkxNiglZXNpKSwgJXhtbTIKKwltb3ZsCTI0KCVlc2kpLCAlZWN4CisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTIsIDE2KCVlZGkpCisJbW92bAklZWN4LCAyNCglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjgoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDI5KToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmRxdQkxMyglZXNpKSwgJXhtbTIKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmRxdQkleG1tMiwgMTMoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTI5KCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQzMCk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZkcXUJMTQoJWVzaSksICV4bW0yCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZkcXUJJXhtbTIsIDE0KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkzMCglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MzEpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92ZHF1CTE1KCVlc2kpLCAleG1tMgorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92ZHF1CSV4bW0yLCAxNSglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMzEoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDMyKToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmRxdQkxNiglZXNpKSwgJXhtbTIKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmRxdQkleG1tMiwgMTYoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTMyKCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQzMyk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJWVzaSksICV4bW0yCisJbW92YgkzMiglZXNpKSwgJWNsCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZkcXUJJXhtbTIsIDE2KCVlZGkpCisJbW92YgklY2wsIDMyKCVlZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwwKToKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDEpOgorCW1vdmIJJWRsLCAoJWVkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDIpOgorCW1vdncJJWR4LCAoJWVkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDMpOgorCW1vdmwJJWVkeCwgLTEoJWVkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDQpOgorCW1vdmwJJWVkeCwgKCVlZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGw1KToKKwltb3ZsCSVlZHgsICglZWRpKQorCW1vdmIJJWRsLCA0KCVlZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGw2KToKKwltb3ZsCSVlZHgsICglZWRpKQorCW1vdncJJWR4LCA0KCVlZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGw3KToKKwltb3ZscGQJJXhtbTAsIC0xKCVlZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGw4KToKKwltb3ZscGQJJXhtbTAsICglZWRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsOSk6CisJbW92bHBkCSV4bW0wLCAoJWVkaSkKKwltb3ZiCSVkbCwgOCglZWRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsMTApOgorCW1vdmxwZAkleG1tMCwgKCVlZGkpCisJbW92dwklZHgsIDgoJWVkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDExKToKKwltb3ZscGQJJXhtbTAsICglZWRpKQorCW1vdmwJJWVkeCwgNyglZWRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsMTIpOgorCW1vdmxwZAkleG1tMCwgKCVlZGkpCisJbW92bAklZWR4LCA4KCVlZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwxMyk6CisJbW92bHBkCSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTAsIDUoJWVkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDE0KToKKwltb3ZscGQJJXhtbTAsICglZWRpKQorCW1vdmxwZAkleG1tMCwgNiglZWRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsMTUpOgorCW1vdmRxdQkleG1tMCwgLTEoJWVkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDE2KToKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW0yKToKKwltb3ZkcXUJJXhtbTIsICglZWRpLCAlZWN4KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW1FeGl0KToKKwlic2YJJWVkeCwgJWVkeAorCWFkZAkkMTUsICVlYngKKwlhZGQJJWVjeCwgJWVkaQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJKCVlZGksICVlZHgpLCAlZWF4CisjZW5kaWYKKwlzdWIJJWVkeCwgJWVieAorCWxlYQkxKCVlZGksICVlZHgpLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKToKKwlweG9yCSV4bW0wLCAleG1tMAorCXhvcgklZWR4LCAlZWR4CisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlGaWxsRXhpdCkKKworCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJYWRkCSQxNiwgJWVkaQorCisJbW92CSVlZGksICVlc2kKKwlhbmQJJDB4ZiwgJWVzaQorCXN1YgklZXNpLCAlZWRpCisJYWRkCSVlc2ksICVlYngKKwlzdWIJJDY0LCAlZWJ4CisJamIJTChTdHJuY3B5RmlsbExlc3M2NCkKKworTChTdHJuY3B5RmlsbExvb3BNb3ZkcWEpOgorCW1vdmRxYQkleG1tMCwgKCVlZGkpCisJbW92ZHFhCSV4bW0wLCAxNiglZWRpKQorCW1vdmRxYQkleG1tMCwgMzIoJWVkaSkKKwltb3ZkcWEJJXhtbTAsIDQ4KCVlZGkpCisJYWRkCSQ2NCwgJWVkaQorCXN1YgkkNjQsICVlYngKKwlqYWUJTChTdHJuY3B5RmlsbExvb3BNb3ZkcWEpCisKK0woU3RybmNweUZpbGxMZXNzNjQpOgorCWFkZAkkMzIsICVlYngKKwlqbAlMKFN0cm5jcHlGaWxsTGVzczMyKQorCW1vdmRxYQkleG1tMCwgKCVlZGkpCisJbW92ZHFhCSV4bW0wLCAxNiglZWRpKQorCWFkZAkkMzIsICVlZGkKKwlzdWIJJDE2LCAlZWJ4CisJamwJTChTdHJuY3B5RmlsbEV4aXQpCisJbW92ZHFhCSV4bW0wLCAoJWVkaSkKKwlhZGQJJDE2LCAlZWRpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChGaWxsVGFibGUpLCAlZWJ4LCA0KQorCitMKFN0cm5jcHlGaWxsTGVzczMyKToKKwlhZGQJJDE2LCAlZWJ4CisJamwJTChTdHJuY3B5RmlsbEV4aXQpCisJbW92ZHFhCSV4bW0wLCAoJWVkaSkKKwlhZGQJJDE2LCAlZWRpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChGaWxsVGFibGUpLCAlZWJ4LCA0KQorCitMKFN0cm5jcHlGaWxsRXhpdCk6CisJYWRkCSQxNiwgJWVieAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRmlsbFRhYmxlKSwgJWVieCwgNCkKKworCS5wMmFsaWduIDQKK0woQWxpZ25lZExlYXZlQ2FzZTJPckNhc2UzKToKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChBbGlnbmVkNjRMZWF2ZUNhc2UyKQorTChBbGlnbmVkNjRMZWF2ZUNhc2UzKToKKwlsZWEJNjQoJWVieCksICVlY3gKKwlhbmQJJC0xNiwgJWVjeAorCWFkZAkkNDgsICVlYngKKwlqbAlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKQorCW1vdmRxYQkleG1tNCwgKCVlZGkpCisJc3ViCSQxNiwgJWVieAorCWpiCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisJbW92ZHFhCSV4bW01LCAxNiglZWRpKQorCXN1YgkkMTYsICVlYngKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKQorCW1vdmRxYQkleG1tNiwgMzIoJWVkaSkKKwlzdWIJJDE2LCAlZWJ4CisJamIJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKwltb3ZkcWEJJXhtbTcsIDQ4KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk2NCglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEFsaWduZWQ2NExlYXZlQ2FzZTIpOgorCXB4b3IJJXhtbTAsICV4bW0wCisJeG9yCSVlY3gsICVlY3gKKwlwY21wZXFiCSV4bW00LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJYWRkCSQ0OCwgJWVieAorCWpsZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW00KQorCisJcGNtcGVxYgkleG1tNSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCW1vdmRxYQkleG1tNCwgKCVlZGkpCisJYWRkCSQxNiwgJWVjeAorCXN1YgkkMTYsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tNSkKKworCXBjbXBlcWIJJXhtbTYsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwltb3ZkcWEJJXhtbTUsIDE2KCVlZGkpCisJYWRkCSQxNiwgJWVjeAorCXN1YgkkMTYsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tNikKKworCXBjbXBlcWIJJXhtbTcsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwltb3ZkcWEJJXhtbTYsIDMyKCVlZGkpCisJbGVhCTE2KCVlZGksICVlY3gpLCAlZWRpCisJbGVhCTE2KCVlc2ksICVlY3gpLCAlZXNpCisJYnNmCSVlZHgsICVlZHgKKwljbXAJJWVieCwgJWVkeAorCWpiCUwoQ29weUZyb20xVG8xNkJ5dGVzRXhpdCkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRTdHJuY3B5VGFibGUpLCAlZWJ4LCA0KQorCisJLnAyYWxpZ24gNAorTChVbmFsaWduZWRMZWF2ZUNhc2UyT3JDYXNlMyk6CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoVW5hbGlnbmVkNjRMZWF2ZUNhc2UyKQorTChVbmFsaWduZWQ2NExlYXZlQ2FzZTMpOgorCWxlYQk2NCglZWJ4KSwgJWVjeAorCWFuZAkkLTE2LCAlZWN4CisJYWRkCSQ0OCwgJWVieAorCWpsCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisJbW92ZHF1CSV4bW00LCAoJWVkaSkKKwlzdWIJJDE2LCAlZWJ4CisJamIJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKwltb3ZkcXUJJXhtbTUsIDE2KCVlZGkpCisJc3ViCSQxNiwgJWVieAorCWpiCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisJbW92ZHF1CSV4bW02LCAzMiglZWRpKQorCXN1YgkkMTYsICVlYngKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKQorCW1vdmRxdQkleG1tNywgNDgoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTY0KCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woVW5hbGlnbmVkNjRMZWF2ZUNhc2UyKToKKwlweG9yCSV4bW0wLCAleG1tMAorCXhvcgklZWN4LCAlZWN4CisJcGNtcGVxYgkleG1tNCwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWFkZAkkNDgsICVlYngKKwlqbGUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tNCkKKworCXBjbXBlcWIJJXhtbTUsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwltb3ZkcXUJJXhtbTQsICglZWRpKQorCWFkZAkkMTYsICVlY3gKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZFhtbTUpCisKKwlwY21wZXFiCSV4bW02LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJbW92ZHF1CSV4bW01LCAxNiglZWRpKQorCWFkZAkkMTYsICVlY3gKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZFhtbTYpCisKKwlwY21wZXFiCSV4bW03LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJbW92ZHF1CSV4bW02LCAzMiglZWRpKQorCWxlYQkxNiglZWRpLCAlZWN4KSwgJWVkaQorCWxlYQkxNiglZXNpLCAlZWN4KSwgJWVzaQorCWJzZgklZWR4LCAlZWR4CisJY21wCSVlYngsICVlZHgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0V4aXQpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0U3RybmNweVRhYmxlKSwgJWVieCwgNCkKKworCS5wMmFsaWduIDQKK0woRXhpdFplcm8pOgorCW1vdmwJJWVkaSwgJWVheAorCVJFVFVSTgorI2VuZGlmCisKK0VORCAoU1RSQ1BZKQorCisJLnAyYWxpZ24gNAorCS5zZWN0aW9uIC5yb2RhdGEKK0woRXhpdFRhYmxlKToKKwkuaW50CUpNUFRCTChMKEV4aXQxKSwgTChFeGl0VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRXhpdDIpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQ0KSwgTChFeGl0VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRXhpdDUpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0NiksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQ3KSwgTChFeGl0VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRXhpdDgpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0OSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxMCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxMSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxMiksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxMyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxNCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxNSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxNiksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxNyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxOCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxOSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyMCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyMSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyMiksIEwoRXhpdFRhYmxlKSkKKwkuaW50ICAgIEpNUFRCTChMKEV4aXQyMyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyNCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyNSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyNiksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyNyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyOCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyOSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQzMCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQzMSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQzMiksIEwoRXhpdFRhYmxlKSkKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorTChFeGl0U3RybmNweVRhYmxlKToKKwkuaW50CUpNUFRCTChMKEV4aXQwKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MSksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDIpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQzKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0NCksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDUpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQ2KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0NyksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDgpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQ5KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MTApLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQxMSksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDEyKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MTMpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQxNCksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDE1KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MTYpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQxNyksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDE4KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MTkpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQyMCksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDIxKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MjIpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQgICAgSk1QVEJMKEwoU3RybmNweUV4aXQyMyksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDI0KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MjUpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQyNiksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDI3KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MjgpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQyOSksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDMwKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MzEpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQzMiksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDMzKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKworCS5wMmFsaWduIDQKK0woRmlsbFRhYmxlKToKKwkuaW50CUpNUFRCTChMKEZpbGwwKSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDEpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsMiksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGwzKSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDQpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsNSksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGw2KSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDcpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsOCksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGw5KSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDEwKSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDExKSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDEyKSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDEzKSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDE0KSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDE1KSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDE2KSwgTChGaWxsVGFibGUpKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItc3RybGVuLXNsbS5TIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cmxlbi1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yN2NjMDI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cmxlbi1zbG0uUwpAQCAtMCwwICsxLDMyOCBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBTVFJMRU4KKyMgZGVmaW5lIFNUUkxFTiBzdHJsZW4KKyNlbmRpZgorCisjaWZuZGVmIEwKKyMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3N0YXJ0cHJvYworIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkuY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2VuZHByb2MKKyMgZGVmaW5lIGNmaV9lbmRwcm9jCS5jZmlfZW5kcHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKKyMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZXN0b3JlCisjIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCS5jZmlfcmVzdG9yZSByZWcKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9hZGp1c3RfY2ZhX29mZnNldAorIyBkZWZpbmUgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0KG9mZikJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIEVOVFJZCisjIGRlZmluZSBFTlRSWShuYW1lKSAgICAgICAgICAgICBcCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsgIFwKKwkuZ2xvYmwgbmFtZTsgICAgICAgICAgICAgXAorCS5wMmFsaWduIDQ7ICAgICAgICAgICAgICBcCituYW1lOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgRU5ECisjIGRlZmluZSBFTkQobmFtZSkgICAgICAgICAgICAgICBcCisJY2ZpX2VuZHByb2M7ICAgICAgICAgICAgIFwKKwkuc2l6ZSBuYW1lLAkuLW5hbWUKKyNlbmRpZgorCisjZGVmaW5lIENGSV9QVVNIKFJFRykgICAgICAgICAgICAgICAgICAgXAorCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7ICAgICAgXAorCWNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCisKKyNkZWZpbmUgQ0ZJX1BPUChSRUcpICAgICAgICAgICAgICAgICAgICBcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7ICAgICBcCisJY2ZpX3Jlc3RvcmUgKFJFRykKKworI2RlZmluZSBQVVNIKFJFRykgcHVzaGwgUkVHOyBDRklfUFVTSCAoUkVHKQorI2RlZmluZSBQT1AoUkVHKSBwb3BsIFJFRzsgQ0ZJX1BPUCAoUkVHKQorCisJLnNlY3Rpb24gLnRleHQuc3NlMiwiYXgiLEBwcm9nYml0cworRU5UUlkgKFNUUkxFTikKKwltb3YJNCglZXNwKSwgJWVkeAorCW1vdgklZWR4LCAlZWN4CisJYW5kCSQweDNmLCAlZWN4CisJcHhvcgkleG1tMCwgJXhtbTAKKwljbXAJJDB4MzAsICVlY3gKKwlqYQlMKG5leHQpCisJbW92ZHF1CSglZWR4KSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdF9sZXNzMTYpCisJbW92CSVlZHgsICVlYXgKKwlhbmQJJC0xNiwgJWVheAorCWptcAlMKGFsaWduMTZfc3RhcnQpCitMKG5leHQpOgorCW1vdgklZWR4LCAlZWF4CisJYW5kCSQtMTYsICVlYXgKKwlQVVNICSglZWRpKQorCXBjbXBlcWIJKCVlYXgpLCAleG1tMAorCW1vdgkkLTEsICVlZGkKKwlzdWIJJWVheCwgJWVjeAorCXNobAklY2wsICVlZGkKKwlwbW92bXNrYiAleG1tMCwgJWVjeAorCWFuZAklZWRpLCAlZWN4CisJUE9QCSglZWRpKQorCWpueglMKGV4aXRfdW5hbGlnbmVkKQorCXB4b3IJJXhtbTAsICV4bW0wCitMKGFsaWduMTZfc3RhcnQpOgorCXB4b3IJJXhtbTEsICV4bW0xCisJcHhvcgkleG1tMiwgJXhtbTIKKwlweG9yCSV4bW0zLCAleG1tMworCXBjbXBlcWIJMTYoJWVheCksICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlY3gKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChleGl0MTYpCisKKwlwY21wZXFiCTMyKCVlYXgpLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdDMyKQorCisJcGNtcGVxYgk0OCglZWF4KSwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXQ0OCkKKworCXBjbXBlcWIJNjQoJWVheCksICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlY3gKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChleGl0NjQpCisKKwlwY21wZXFiCTgwKCVlYXgpLCAleG1tMAorCWFkZAkkNjQsICVlYXgKKwlwbW92bXNrYiAleG1tMCwgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXQxNikKKworCXBjbXBlcWIJMzIoJWVheCksICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlY3gKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChleGl0MzIpCisKKwlwY21wZXFiCTQ4KCVlYXgpLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdDQ4KQorCisJcGNtcGVxYgk2NCglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXQ2NCkKKworCXBjbXBlcWIJODAoJWVheCksICV4bW0wCisJYWRkCSQ2NCwgJWVheAorCXBtb3Ztc2tiICV4bW0wLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdDE2KQorCisJcGNtcGVxYgkzMiglZWF4KSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXQzMikKKworCXBjbXBlcWIJNDgoJWVheCksICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlY3gKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChleGl0NDgpCisKKwlwY21wZXFiCTY0KCVlYXgpLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdDY0KQorCisJcGNtcGVxYgk4MCglZWF4KSwgJXhtbTAKKwlhZGQJJDY0LCAlZWF4CisJcG1vdm1za2IgJXhtbTAsICVlY3gKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChleGl0MTYpCisKKwlwY21wZXFiCTMyKCVlYXgpLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdDMyKQorCisJcGNtcGVxYgk0OCglZWF4KSwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXQ0OCkKKworCXBjbXBlcWIJNjQoJWVheCksICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlY3gKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChleGl0NjQpCisKKworCXRlc3QJJDB4M2YsICVlYXgKKwlqeglMKGFsaWduNjRfbG9vcCkKKworCXBjbXBlcWIJODAoJWVheCksICV4bW0wCisJYWRkCSQ4MCwgJWVheAorCXBtb3Ztc2tiICV4bW0wLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdCkKKworCXRlc3QJJDB4M2YsICVlYXgKKwlqeglMKGFsaWduNjRfbG9vcCkKKworCXBjbXBlcWIJMTYoJWVheCksICV4bW0xCisJYWRkCSQxNiwgJWVheAorCXBtb3Ztc2tiICV4bW0xLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdCkKKworCXRlc3QJJDB4M2YsICVlYXgKKwlqeglMKGFsaWduNjRfbG9vcCkKKworCXBjbXBlcWIJMTYoJWVheCksICV4bW0yCisJYWRkCSQxNiwgJWVheAorCXBtb3Ztc2tiICV4bW0yLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdCkKKworCXRlc3QJJDB4M2YsICVlYXgKKwlqeglMKGFsaWduNjRfbG9vcCkKKworCXBjbXBlcWIJMTYoJWVheCksICV4bW0zCisJYWRkCSQxNiwgJWVheAorCXBtb3Ztc2tiICV4bW0zLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdCkKKworCWFkZAkkMTYsICVlYXgKKwkucDJhbGlnbiA0CitMKGFsaWduNjRfbG9vcCk6CisJbW92YXBzCSglZWF4KSwJJXhtbTQKKwlwbWludWIJMTYoJWVheCksIAkleG1tNAorCW1vdmFwcwkzMiglZWF4KSwgCSV4bW01CisJcG1pbnViCTQ4KCVlYXgpLCAJJXhtbTUKKwlhZGQJJDY0LCAJJWVheAorCXBtaW51YgkleG1tNCwJJXhtbTUKKwlwY21wZXFiCSV4bW0wLAkleG1tNQorCXBtb3Ztc2tiICV4bW01LAklZWN4CisJdGVzdAklZWN4LAklZWN4CisJanoJTChhbGlnbjY0X2xvb3ApCisKKworCXBjbXBlcWIJLTY0KCVlYXgpLCAleG1tMAorCXN1YgkkODAsIAklZWF4CisJcG1vdm1za2IgJXhtbTAsICVlY3gKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChleGl0MTYpCisKKwlwY21wZXFiCTMyKCVlYXgpLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdDMyKQorCisJcGNtcGVxYgk0OCglZWF4KSwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXQ0OCkKKworCXBjbXBlcWIJNjQoJWVheCksICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlY3gKKwlzdWIJJWVkeCwgJWVheAorCWJzZgklZWN4LCAlZWN4CisJYWRkCSVlY3gsICVlYXgKKwlhZGQJJDY0LCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXQpOgorCXN1YgklZWR4LCAlZWF4CisJYnNmCSVlY3gsICVlY3gKKwlhZGQJJWVjeCwgJWVheAorCXJldAorCitMKGV4aXRfbGVzczE2KToKKwlic2YJJWVjeCwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChleGl0X3VuYWxpZ25lZCk6CisJc3ViCSVlZHgsICVlYXgKKwlic2YJJWVjeCwgJWVjeAorCWFkZAklZWN4LCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXQxNik6CisJc3ViCSVlZHgsICVlYXgKKwlic2YJJWVjeCwgJWVjeAorCWFkZAklZWN4LCAlZWF4CisJYWRkCSQxNiwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChleGl0MzIpOgorCXN1YgklZWR4LCAlZWF4CisJYnNmCSVlY3gsICVlY3gKKwlhZGQJJWVjeCwgJWVheAorCWFkZAkkMzIsICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdDQ4KToKKwlzdWIJJWVkeCwgJWVheAorCWJzZgklZWN4LCAlZWN4CisJYWRkCSVlY3gsICVlYXgKKwlhZGQJJDQ4LCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXQ2NCk6CisJc3ViCSVlZHgsICVlYXgKKwlic2YJJWVjeCwgJWVjeAorCWFkZAklZWN4LCAlZWF4CisJYWRkCSQ2NCwgJWVheAorCXJldAorCitFTkQgKFNUUkxFTikKKwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cm5jcHktc2xtLlMgYi9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItc3RybmNweS1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41OTE0MTlmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cm5jcHktc2xtLlMKQEAgLTAsMCArMSwzMyBAQAorLyoNCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uDQorQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzDQorICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlDQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyovDQorDQorI2RlZmluZSBVU0VfQVNfU1RSTkNQWQ0KKyNkZWZpbmUgU1RSQ1BZIHN0cm5jcHkNCisjaW5jbHVkZSAic3NlMi1zdHJjcHktc2xtLlMiDQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2U0LW1lbWNtcC1zbG0uUyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlNC1tZW1jbXAtc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTUwMjhmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlNC1tZW1jbXAtc2xtLlMKQEAgLTAsMCArMSwxMjc4IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIEwKKyMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3N0YXJ0cHJvYworIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkuY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2VuZHByb2MKKyMgZGVmaW5lIGNmaV9lbmRwcm9jCS5jZmlfZW5kcHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKKyMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZXN0b3JlCisjIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCS5jZmlfcmVzdG9yZSByZWcKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9hZGp1c3RfY2ZhX29mZnNldAorIyBkZWZpbmUgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0KG9mZikJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZW1lbWJlcl9zdGF0ZQorIyBkZWZpbmUgY2ZpX3JlbWVtYmVyX3N0YXRlCS5jZmlfcmVtZW1iZXJfc3RhdGUKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZXN0b3JlX3N0YXRlCisjIGRlZmluZSBjZmlfcmVzdG9yZV9zdGF0ZQkuY2ZpX3Jlc3RvcmVfc3RhdGUKKyNlbmRpZgorCisjaWZuZGVmIEVOVFJZCisjIGRlZmluZSBFTlRSWShuYW1lKSAgICAgICAgICAgICBcCisJLnR5cGUgbmFtZSwgQGZ1bmN0aW9uOyAgIFwKKwkuZ2xvYmwgbmFtZTsgICAgICAgICAgICAgXAorCS5wMmFsaWduIDQ7ICAgICAgICAgICAgICBcCituYW1lOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgRU5ECisjIGRlZmluZSBFTkQobmFtZSkgICAgICAgICAgICAgICBcCisJY2ZpX2VuZHByb2M7ICAgICAgICAgICAgIFwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyNlbmRpZgorCisjaWZuZGVmIE1FTUNNUAorIyBkZWZpbmUgTUVNQ01QCW1lbWNtcAorI2VuZGlmCisKKyNkZWZpbmUgQ0ZJX1BVU0goUkVHKQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICg0KTsJXAorCWNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCisKKyNkZWZpbmUgQ0ZJX1BPUChSRUcpCVwKKwljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJXAorCWNmaV9yZXN0b3JlIChSRUcpCisKKyNkZWZpbmUgUFVTSChSRUcpCXB1c2hsIFJFRzsgQ0ZJX1BVU0ggKFJFRykKKyNkZWZpbmUgUE9QKFJFRykJcG9wbCBSRUc7IENGSV9QT1AgKFJFRykKKworI2RlZmluZSBQQVJNUwk0CisjZGVmaW5lIEJMSzEJUEFSTVMKKyNkZWZpbmUgQkxLMglCTEsxICsgNAorI2RlZmluZSBMRU4JQkxLMiArIDQKKyNkZWZpbmUgUkVUVVJOCVBPUCAoJWVieCk7IHJldDsgQ0ZJX1BVU0ggKCVlYngpCisKKworI2lmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisjIGRlZmluZSBKTVBUQkwoSSwgQikJSSAtIEIKKworLyogTG9hZCBhbiBlbnRyeSBpbiBhIGp1bXAgdGFibGUgaW50byBFQlggYW5kIGJyYW5jaCB0byBpdC4gIFRBQkxFIGlzIGEKKwlqdW1wCXRhYmxlIHdpdGggcmVsYXRpdmUgb2Zmc2V0cy4gIElOREVYIGlzIGEgcmVnaXN0ZXIgY29udGFpbnMgdGhlCisJaW5kZXgJaW50byB0aGUganVtcCB0YWJsZS4gICBTQ0FMRSBpcyB0aGUgc2NhbGUgb2YgSU5ERVguICovCisKKyMgZGVmaW5lIEJSQU5DSF9UT19KTVBUQkxfRU5UUlkoVEFCTEUsIElOREVYLCBTQ0FMRSkJXAorLyogV2UgZmlyc3QgbG9hZCBQQyBpbnRvIEVCWC4gICovCVwKKwljYWxsCV9feDg2LmdldF9wY190aHVuay5ieDsJXAorLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBqdW1wIHRhYmxlLiAgKi8JXAorCWFkZGwJJChUQUJMRSAtIC4pLCAlZWJ4OwlcCisvKiBHZXQgdGhlIGVudHJ5IGFuZCBjb252ZXJ0IHRoZSByZWxhdGl2ZSBvZmZzZXQgdG8gdGhlCVwKKwlhYnNvbHV0ZQlhZGRyZXNzLiAgKi8JXAorCWFkZGwJKCVlYngsSU5ERVgsU0NBTEUpLCAlZWJ4OwlcCisvKiBXZSBsb2FkZWQgdGhlIGp1bXAgdGFibGUgYW5kIGFkanVlc3RlZCBFRFgvRVNJLiBHby4gICovCVwKKwlqbXAJKiVlYngKKyNlbHNlCisjIGRlZmluZSBKTVBUQkwoSSwgQikJSQorCisvKiBMb2FkIGFuIGVudHJ5IGluIGEganVtcCB0YWJsZSBpbnRvIEVCWCBhbmQgYnJhbmNoIHRvIGl0LiAgVEFCTEUgaXMgYQorCWp1bXAJdGFibGUgd2l0aCByZWxhdGl2ZSBvZmZzZXRzLiAgSU5ERVggaXMgYSByZWdpc3RlciBjb250YWlucyB0aGUKKwlpbmRleAlpbnRvIHRoZSBqdW1wIHRhYmxlLiAgIFNDQUxFIGlzIHRoZSBzY2FsZSBvZiBJTkRFWC4gKi8KKyMgZGVmaW5lIEJSQU5DSF9UT19KTVBUQkxfRU5UUlkoVEFCTEUsIElOREVYLCBTQ0FMRSkJXAorCWptcAkqVEFCTEUoLElOREVYLFNDQUxFKQorI2VuZGlmCisKKworLyogV2FybmluZyEKKyAgICAgICAgICAgd21lbWNtcCBoYXMgdG8gdXNlIFNJR05FRCBjb21wYXJpc29uIGZvciBlbGVtZW50cy4KKyAgICAgICAgICAgbWVtY21wIGhhcyB0byB1c2UgVU5TSUdORUQgY29tcGFyaXNvbiBmb3IgZWxlbW50cy4KKyovCisKKwkuc2VjdGlvbiAudGV4dC5zc2U0LjIsImF4IixAcHJvZ2JpdHMKK0VOVFJZIChNRU1DTVApCisJbW92bAlCTEsxKCVlc3ApLCAlZWF4CisJbW92bAlCTEsyKCVlc3ApLCAlZWR4CisJbW92bAlMRU4oJWVzcCksICVlY3gKKworI2lmZGVmIFVTRV9BU19XTUVNQ01QCisJc2hsCSQyLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJanoJTChyZXR1cm4wKQorI2Vsc2UKKwljbXAJJDEsICVlY3gKKwlqYmUJTChsZXNzMWJ5dGVzKQorI2VuZGlmCisKKwlweG9yCSV4bW0wLCAleG1tMAorCWNtcAkkNjQsICVlY3gKKwlqYQlMKDY0Ynl0ZXNvcm1vcmUpCisJY21wCSQ4LCAlZWN4CisKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwlQVVNICSglZWJ4KQorCWpiCUwobGVzczhieXRlcykKKyNlbHNlCisJamIJTChsZXNzOGJ5dGVzKQorCVBVU0gJKCVlYngpCisjZW5kaWYKKworCWFkZAklZWN4LCAlZWR4CisJYWRkCSVlY3gsICVlYXgKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNjRieXRlcyksICVlY3gsIDQpCisKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwkucDJhbGlnbiA0CitMKGxlc3M4Ynl0ZXMpOgorCW1vdgkoJWVheCksICVibAorCWNtcGIJKCVlZHgpLCAlYmwKKwlqbmUJTChub256ZXJvKQorCisJbW92CTEoJWVheCksICVibAorCWNtcGIJMSglZWR4KSwgJWJsCisJam5lCUwobm9uemVybykKKworCWNtcAkkMiwgJWVjeAorCWp6CUwoMGJ5dGVzKQorCisJbW92CTIoJWVheCksICVibAorCWNtcGIJMiglZWR4KSwgJWJsCisJam5lCUwobm9uemVybykKKworCWNtcAkkMywgJWVjeAorCWp6CUwoMGJ5dGVzKQorCisJbW92CTMoJWVheCksICVibAorCWNtcGIJMyglZWR4KSwgJWJsCisJam5lCUwobm9uemVybykKKworCWNtcAkkNCwgJWVjeAorCWp6CUwoMGJ5dGVzKQorCisJbW92CTQoJWVheCksICVibAorCWNtcGIJNCglZWR4KSwgJWJsCisJam5lCUwobm9uemVybykKKworCWNtcAkkNSwgJWVjeAorCWp6CUwoMGJ5dGVzKQorCisJbW92CTUoJWVheCksICVibAorCWNtcGIJNSglZWR4KSwgJWJsCisJam5lCUwobm9uemVybykKKworCWNtcAkkNiwgJWVjeAorCWp6CUwoMGJ5dGVzKQorCisJbW92CTYoJWVheCksICVibAorCWNtcGIJNiglZWR4KSwgJWJsCisJamUJTCgwYnl0ZXMpCisKK0wobm9uemVybyk6CisJUE9QCSglZWJ4KQorCW1vdgkkMSwgJWVheAorCWphCUwoYWJvdmUpCisJbmVnCSVlYXgKK0woYWJvdmUpOgorCXJldAorCUNGSV9QVVNIICglZWJ4KQorI2VuZGlmCisKKwkucDJhbGlnbiA0CitMKDBieXRlcyk6CisJUE9QCSglZWJ4KQorCXhvcgklZWF4LCAlZWF4CisJcmV0CisKKyNpZmRlZiBVU0VfQVNfV01FTUNNUAorCisvKiBmb3Igd21lbWNtcCwgY2FzZSBOID09IDEgKi8KKworCS5wMmFsaWduIDQKK0wobGVzczhieXRlcyk6CisJbW92CSglZWF4KSwgJWVjeAorCWNtcAkoJWVkeCksICVlY3gKKwlqZQlMKHJldHVybjApCisJbW92CSQxLCAlZWF4CisJamcJTChmaW5kX2RpZmZfYmlnZ2VyKQorCW5lZwklZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGZpbmRfZGlmZl9iaWdnZXIpOgorCXJldAorCisJLnAyYWxpZ24gNAorTChyZXR1cm4wKToKKwl4b3IJJWVheCwgJWVheAorCXJldAorI2VuZGlmCisKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwkucDJhbGlnbiA0CitMKGxlc3MxYnl0ZXMpOgorCWpiCUwoMGJ5dGVzZW5kKQorCW1vdnpibAkoJWVheCksICVlYXgKKwltb3Z6YmwJKCVlZHgpLCAlZWR4CisJc3ViCSVlZHgsICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woMGJ5dGVzZW5kKToKKwl4b3IJJWVheCwgJWVheAorCXJldAorI2VuZGlmCisJLnAyYWxpZ24gNAorTCg2NGJ5dGVzb3Jtb3JlKToKKwlQVVNICSglZWJ4KQorCW1vdgklZWN4LCAlZWJ4CisJbW92CSQ2NCwgJWVjeAorCXN1YgkkNjQsICVlYngKK0woNjRieXRlc29ybW9yZV9sb29wKToKKwltb3ZkcXUJKCVlYXgpLCAleG1tMQorCW1vdmRxdQkoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChmaW5kXzE2ZGlmZikKKworCW1vdmRxdQkxNiglZWF4KSwgJXhtbTEKKwltb3ZkcXUJMTYoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChmaW5kXzMyZGlmZikKKworCW1vdmRxdQkzMiglZWF4KSwgJXhtbTEKKwltb3ZkcXUJMzIoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChmaW5kXzQ4ZGlmZikKKworCW1vdmRxdQk0OCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJNDgoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChmaW5kXzY0ZGlmZikKKwlhZGQJJWVjeCwgJWVheAorCWFkZAklZWN4LCAlZWR4CisJc3ViCSVlY3gsICVlYngKKwlqYWUJTCg2NGJ5dGVzb3Jtb3JlX2xvb3ApCisJYWRkCSVlYngsICVlY3gKKwlhZGQJJWVjeCwgJWVkeAorCWFkZAklZWN4LCAlZWF4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzY0Ynl0ZXMpLCAlZWN4LCA0KQorCisjaWZkZWYgVVNFX0FTX1dNRU1DTVAKKworLyogTGFiZWwgbmVlZHMgb25seSBmb3IgdGFibGVfNjRieXRlcyBmaWxsaW5nICovCitMKHVucmVhbF9jYXNlKToKKy8qIG5vIGNvZGUgaGVyZSAqLworCisjZW5kaWYKKwkucDJhbGlnbiA0CitMKGZpbmRfMTZkaWZmKToKKwlzdWIJJDE2LCAlZWN4CitMKGZpbmRfMzJkaWZmKToKKwlzdWIJJDE2LCAlZWN4CitMKGZpbmRfNDhkaWZmKToKKwlzdWIJJDE2LCAlZWN4CitMKGZpbmRfNjRkaWZmKToKKwlhZGQJJWVjeCwgJWVkeAorCWFkZAklZWN4LCAlZWF4CisKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwkucDJhbGlnbiA0CitMKDE2Ynl0ZXMpOgorCW1vdgktMTYoJWVheCksICVlY3gKKwltb3YJLTE2KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDEyYnl0ZXMpOgorCW1vdgktMTIoJWVheCksICVlY3gKKwltb3YJLTEyKCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDhieXRlcyk6CisJbW92CS04KCVlYXgpLCAlZWN4CisJbW92CS04KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDRieXRlcyk6CisJbW92CS00KCVlYXgpLCAlZWN4CisJbW92CS00KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwltb3YJJDAsICVlYXgKKwlqbmUJTChmaW5kX2RpZmYpCisJUkVUVVJOCisjZWxzZQorCS5wMmFsaWduIDQKK0woMTZieXRlcyk6CisJbW92CS0xNiglZWF4KSwgJWVjeAorCWNtcAktMTYoJWVkeCksICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDEyYnl0ZXMpOgorCW1vdgktMTIoJWVheCksICVlY3gKKwljbXAJLTEyKCVlZHgpLCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorTCg4Ynl0ZXMpOgorCW1vdgktOCglZWF4KSwgJWVjeAorCWNtcAktOCglZWR4KSwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woNGJ5dGVzKToKKwltb3YJLTQoJWVheCksICVlY3gKKwljbXAJLTQoJWVkeCksICVlY3gKKwltb3YJJDAsICVlYXgKKwlqbmUJTChmaW5kX2RpZmYpCisJUkVUVVJOCisjZW5kaWYKKworI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorCS5wMmFsaWduIDQKK0woNDlieXRlcyk6CisJbW92ZHF1CS00OSglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTQ5KCVlZHgpLCAleG1tMgorCW1vdgkkLTQ5LCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzNieXRlcyk6CisJbW92ZHF1CS0zMyglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTMzKCVlZHgpLCAleG1tMgorCW1vdgkkLTMzLCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMTdieXRlcyk6CisJbW92CS0xNyglZWF4KSwgJWVjeAorCW1vdgktMTcoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMTNieXRlcyk6CisJbW92CS0xMyglZWF4KSwgJWVjeAorCW1vdgktMTMoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woOWJ5dGVzKToKKwltb3YJLTkoJWVheCksICVlY3gKKwltb3YJLTkoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woNWJ5dGVzKToKKwltb3YJLTUoJWVheCksICVlY3gKKwltb3YJLTUoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKwltb3Z6YmwJLTEoJWVheCksICVlY3gKKwljbXAJLTEoJWVkeCksICVjbAorCW1vdgkkMCwgJWVheAorCWpuZQlMKGVuZCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woNTBieXRlcyk6CisJbW92CSQtNTAsICVlYngKKwltb3ZkcXUJLTUwKCVlYXgpLCAleG1tMQorCW1vdmRxdQktNTAoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzRieXRlcyk6CisJbW92CSQtMzQsICVlYngKKwltb3ZkcXUJLTM0KCVlYXgpLCAleG1tMQorCW1vdmRxdQktMzQoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMThieXRlcyk6CisJbW92CS0xOCglZWF4KSwgJWVjeAorCW1vdgktMTgoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMTRieXRlcyk6CisJbW92CS0xNCglZWF4KSwgJWVjeAorCW1vdgktMTQoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMTBieXRlcyk6CisJbW92CS0xMCglZWF4KSwgJWVjeAorCW1vdgktMTAoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woNmJ5dGVzKToKKwltb3YJLTYoJWVheCksICVlY3gKKwltb3YJLTYoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMmJ5dGVzKToKKwltb3Z6d2wJLTIoJWVheCksICVlY3gKKwltb3Z6d2wJLTIoJWVkeCksICVlYngKKwljbXAJJWJsLCAlY2wKKwlqbmUJTChlbmQpCisJY21wCSViaCwgJWNoCisJbW92CSQwLCAlZWF4CisJam5lCUwoZW5kKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTCg1MWJ5dGVzKToKKwltb3YJJC01MSwgJWVieAorCW1vdmRxdQktNTEoJWVheCksICV4bW0xCisJbW92ZHF1CS01MSglZWR4KSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgzNWJ5dGVzKToKKwltb3YJJC0zNSwgJWVieAorCW1vdmRxdQktMzUoJWVheCksICV4bW0xCisJbW92ZHF1CS0zNSglZWR4KSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgxOWJ5dGVzKToKKwltb3ZsCS0xOSglZWF4KSwgJWVjeAorCW1vdmwJLTE5KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDE1Ynl0ZXMpOgorCW1vdmwJLTE1KCVlYXgpLCAlZWN4CisJbW92bAktMTUoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMTFieXRlcyk6CisJbW92bAktMTEoJWVheCksICVlY3gKKwltb3ZsCS0xMSglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorTCg3Ynl0ZXMpOgorCW1vdmwJLTcoJWVheCksICVlY3gKKwltb3ZsCS03KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDNieXRlcyk6CisJbW92endsCS0zKCVlYXgpLCAlZWN4CisJbW92endsCS0zKCVlZHgpLCAlZWJ4CisJY21wYgklYmwsICVjbAorCWpuZQlMKGVuZCkKKwljbXAJJWJ4LCAlY3gKKwlqbmUJTChlbmQpCitMKDFieXRlcyk6CisJbW92emJsCS0xKCVlYXgpLCAlZWF4CisJY21wYgktMSglZWR4KSwgJWFsCisJbW92CSQwLCAlZWF4CisJam5lCUwoZW5kKQorCVJFVFVSTgorI2VuZGlmCisJLnAyYWxpZ24gNAorTCg1MmJ5dGVzKToKKwltb3ZkcXUJLTUyKCVlYXgpLCAleG1tMQorCW1vdmRxdQktNTIoJWVkeCksICV4bW0yCisJbW92CSQtNTIsICVlYngKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgzNmJ5dGVzKToKKwltb3ZkcXUJLTM2KCVlYXgpLCAleG1tMQorCW1vdmRxdQktMzYoJWVkeCksICV4bW0yCisJbW92CSQtMzYsICVlYngKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgyMGJ5dGVzKToKKwltb3ZkcXUJLTIwKCVlYXgpLCAleG1tMQorCW1vdmRxdQktMjAoJWVkeCksICV4bW0yCisJbW92CSQtMjAsICVlYngKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCW1vdgktNCglZWF4KSwgJWVjeAorI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorCW1vdgktNCglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisjZWxzZQorCWNtcAktNCglZWR4KSwgJWVjeAorI2VuZGlmCisJbW92CSQwLCAlZWF4CisJam5lCUwoZmluZF9kaWZmKQorCVJFVFVSTgorCisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisJLnAyYWxpZ24gNAorTCg1M2J5dGVzKToKKwltb3ZkcXUJLTUzKCVlYXgpLCAleG1tMQorCW1vdmRxdQktNTMoJWVkeCksICV4bW0yCisJbW92CSQtNTMsICVlYngKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgzN2J5dGVzKToKKwltb3YJJC0zNywgJWVieAorCW1vdmRxdQktMzcoJWVheCksICV4bW0xCisJbW92ZHF1CS0zNyglZWR4KSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgyMWJ5dGVzKToKKwltb3YJJC0yMSwgJWVieAorCW1vdmRxdQktMjEoJWVheCksICV4bW0xCisJbW92ZHF1CS0yMSglZWR4KSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCW1vdgktNSglZWF4KSwgJWVjeAorCW1vdgktNSglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCW1vdnpibAktMSglZWF4KSwgJWVjeAorCWNtcAktMSglZWR4KSwgJWNsCisJbW92CSQwLCAlZWF4CisJam5lCUwoZW5kKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTCg1NGJ5dGVzKToKKwltb3ZkcXUJLTU0KCVlYXgpLCAleG1tMQorCW1vdmRxdQktNTQoJWVkeCksICV4bW0yCisJbW92CSQtNTQsICVlYngKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgzOGJ5dGVzKToKKwltb3YJJC0zOCwgJWVieAorCW1vdmRxdQktMzgoJWVheCksICV4bW0xCisJbW92ZHF1CS0zOCglZWR4KSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgyMmJ5dGVzKToKKwltb3YJJC0yMiwgJWVieAorCW1vdmRxdQktMjIoJWVheCksICV4bW0xCisJbW92ZHF1CS0yMiglZWR4KSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCisJbW92CS02KCVlYXgpLCAlZWN4CisJbW92CS02KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCisJbW92endsCS0yKCVlYXgpLCAlZWN4CisJbW92endsCS0yKCVlZHgpLCAlZWJ4CisJY21wCSVibCwgJWNsCisJam5lCUwoZW5kKQorCWNtcAklYmgsICVjaAorCW1vdgkkMCwgJWVheAorCWpuZQlMKGVuZCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woNTVieXRlcyk6CisJbW92ZHF1CS01NSglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTU1KCVlZHgpLCAleG1tMgorCW1vdgkkLTU1LCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzlieXRlcyk6CisJbW92CSQtMzksICVlYngKKwltb3ZkcXUJLTM5KCVlYXgpLCAleG1tMQorCW1vdmRxdQktMzkoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMjNieXRlcyk6CisJbW92CSQtMjMsICVlYngKKwltb3ZkcXUJLTIzKCVlYXgpLCAleG1tMQorCW1vdmRxdQktMjMoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKwltb3ZsCS03KCVlYXgpLCAlZWN4CisJbW92bAktNyglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCW1vdnp3bAktMyglZWF4KSwgJWVjeAorCW1vdnp3bAktMyglZWR4KSwgJWVieAorCWNtcGIJJWJsLCAlY2wKKwlqbmUJTChlbmQpCisJY21wCSVieCwgJWN4CisJam5lCUwoZW5kKQorCW1vdnpibAktMSglZWF4KSwgJWVheAorCWNtcGIJLTEoJWVkeCksICVhbAorCW1vdgkkMCwgJWVheAorCWpuZQlMKGVuZCkKKwlSRVRVUk4KKyNlbmRpZgorCS5wMmFsaWduIDQKK0woNTZieXRlcyk6CisJbW92ZHF1CS01NiglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTU2KCVlZHgpLCAleG1tMgorCW1vdgkkLTU2LCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNDBieXRlcyk6CisJbW92CSQtNDAsICVlYngKKwltb3ZkcXUJLTQwKCVlYXgpLCAleG1tMQorCW1vdmRxdQktNDAoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMjRieXRlcyk6CisJbW92CSQtMjQsICVlYngKKwltb3ZkcXUJLTI0KCVlYXgpLCAleG1tMQorCW1vdmRxdQktMjQoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKworCW1vdgktOCglZWF4KSwgJWVjeAorI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorCW1vdgktOCglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisjZWxzZQorCWNtcAktOCglZWR4KSwgJWVjeAorI2VuZGlmCisJam5lCUwoZmluZF9kaWZmKQorCisJbW92CS00KCVlYXgpLCAlZWN4CisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisJbW92CS00KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKyNlbHNlCisJY21wCS00KCVlZHgpLCAlZWN4CisjZW5kaWYKKwltb3YJJDAsICVlYXgKKwlqbmUJTChmaW5kX2RpZmYpCisJUkVUVVJOCisKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwkucDJhbGlnbiA0CitMKDU3Ynl0ZXMpOgorCW1vdmRxdQktNTcoJWVheCksICV4bW0xCisJbW92ZHF1CS01NyglZWR4KSwgJXhtbTIKKwltb3YJJC01NywgJWVieAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDQxYnl0ZXMpOgorCW1vdgkkLTQxLCAlZWJ4CisJbW92ZHF1CS00MSglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTQxKCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDI1Ynl0ZXMpOgorCW1vdgkkLTI1LCAlZWJ4CisJbW92ZHF1CS0yNSglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTI1KCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCisJbW92CS05KCVlYXgpLCAlZWN4CisJbW92CS05KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCisJbW92CS01KCVlYXgpLCAlZWN4CisJbW92CS01KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCisJbW92emJsCS0xKCVlYXgpLCAlZWN4CisJY21wCS0xKCVlZHgpLCAlY2wKKwltb3YJJDAsICVlYXgKKwlqbmUJTChlbmQpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKDU4Ynl0ZXMpOgorCW1vdmRxdQktNTgoJWVheCksICV4bW0xCisJbW92ZHF1CS01OCglZWR4KSwgJXhtbTIKKwltb3YJJC01OCwgJWVieAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDQyYnl0ZXMpOgorCW1vdgkkLTQyLCAlZWJ4CisJbW92ZHF1CS00MiglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTQyKCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDI2Ynl0ZXMpOgorCW1vdgkkLTI2LCAlZWJ4CisJbW92ZHF1CS0yNiglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTI2KCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCisKKwltb3YJLTEwKCVlYXgpLCAlZWN4CisJbW92CS0xMCglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCisJbW92CS02KCVlYXgpLCAlZWN4CisJbW92CS02KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCisKKwltb3Z6d2wJLTIoJWVheCksICVlY3gKKwltb3Z6d2wJLTIoJWVkeCksICVlYngKKwljbXAJJWJsLCAlY2wKKwlqbmUJTChlbmQpCisJY21wCSViaCwgJWNoCisJbW92CSQwLCAlZWF4CisJam5lCUwoZW5kKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTCg1OWJ5dGVzKToKKwltb3ZkcXUJLTU5KCVlYXgpLCAleG1tMQorCW1vdmRxdQktNTkoJWVkeCksICV4bW0yCisJbW92CSQtNTksICVlYngKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg0M2J5dGVzKToKKwltb3YJJC00MywgJWVieAorCW1vdmRxdQktNDMoJWVheCksICV4bW0xCisJbW92ZHF1CS00MyglZWR4KSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgyN2J5dGVzKToKKwltb3YJJC0yNywgJWVieAorCW1vdmRxdQktMjcoJWVheCksICV4bW0xCisJbW92ZHF1CS0yNyglZWR4KSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCW1vdmwJLTExKCVlYXgpLCAlZWN4CisJbW92bAktMTEoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKwltb3ZsCS03KCVlYXgpLCAlZWN4CisJbW92bAktNyglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCW1vdnp3bAktMyglZWF4KSwgJWVjeAorCW1vdnp3bAktMyglZWR4KSwgJWVieAorCWNtcGIJJWJsLCAlY2wKKwlqbmUJTChlbmQpCisJY21wCSVieCwgJWN4CisJam5lCUwoZW5kKQorCW1vdnpibAktMSglZWF4KSwgJWVheAorCWNtcGIJLTEoJWVkeCksICVhbAorCW1vdgkkMCwgJWVheAorCWpuZQlMKGVuZCkKKwlSRVRVUk4KKyNlbmRpZgorCS5wMmFsaWduIDQKK0woNjBieXRlcyk6CisJbW92ZHF1CS02MCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTYwKCVlZHgpLCAleG1tMgorCW1vdgkkLTYwLCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNDRieXRlcyk6CisJbW92CSQtNDQsICVlYngKKwltb3ZkcXUJLTQ0KCVlYXgpLCAleG1tMQorCW1vdmRxdQktNDQoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMjhieXRlcyk6CisJbW92CSQtMjgsICVlYngKKwltb3ZkcXUJLTI4KCVlYXgpLCAleG1tMQorCW1vdmRxdQktMjgoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKworCW1vdgktMTIoJWVheCksICVlY3gKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwltb3YJLTEyKCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKyNlbHNlCisJY21wCS0xMiglZWR4KSwgJWVjeAorI2VuZGlmCisJam5lCUwoZmluZF9kaWZmKQorCisJbW92CS04KCVlYXgpLCAlZWN4CisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisJbW92CS04KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKyNlbHNlCisJY21wCS04KCVlZHgpLCAlZWN4CisjZW5kaWYKKwlqbmUJTChmaW5kX2RpZmYpCisKKwltb3YJLTQoJWVheCksICVlY3gKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwltb3YJLTQoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorI2Vsc2UKKwljbXAJLTQoJWVkeCksICVlY3gKKyNlbmRpZgorCW1vdgkkMCwgJWVheAorCWpuZQlMKGZpbmRfZGlmZikKKwlSRVRVUk4KKworI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorCS5wMmFsaWduIDQKK0woNjFieXRlcyk6CisJbW92ZHF1CS02MSglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTYxKCVlZHgpLCAleG1tMgorCW1vdgkkLTYxLCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNDVieXRlcyk6CisJbW92CSQtNDUsICVlYngKKwltb3ZkcXUJLTQ1KCVlYXgpLCAleG1tMQorCW1vdmRxdQktNDUoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMjlieXRlcyk6CisJbW92CSQtMjksICVlYngKKwltb3ZkcXUJLTI5KCVlYXgpLCAleG1tMQorCW1vdmRxdQktMjkoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKworCW1vdgktMTMoJWVheCksICVlY3gKKwltb3YJLTEzKCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCisKKwltb3YJLTkoJWVheCksICVlY3gKKwltb3YJLTkoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKworCW1vdgktNSglZWF4KSwgJWVjeAorCW1vdgktNSglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCW1vdnpibAktMSglZWF4KSwgJWVjeAorCWNtcAktMSglZWR4KSwgJWNsCisJbW92CSQwLCAlZWF4CisJam5lCUwoZW5kKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTCg2MmJ5dGVzKToKKwltb3ZkcXUJLTYyKCVlYXgpLCAleG1tMQorCW1vdmRxdQktNjIoJWVkeCksICV4bW0yCisJbW92CSQtNjIsICVlYngKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg0NmJ5dGVzKToKKwltb3YJJC00NiwgJWVieAorCW1vdmRxdQktNDYoJWVheCksICV4bW0xCisJbW92ZHF1CS00NiglZWR4KSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgzMGJ5dGVzKToKKwltb3YJJC0zMCwgJWVieAorCW1vdmRxdQktMzAoJWVheCksICV4bW0xCisJbW92ZHF1CS0zMCglZWR4KSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCW1vdgktMTQoJWVheCksICVlY3gKKwltb3YJLTE0KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCisJbW92CS0xMCglZWF4KSwgJWVjeAorCW1vdgktMTAoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKwltb3YJLTYoJWVheCksICVlY3gKKwltb3YJLTYoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKwltb3Z6d2wJLTIoJWVheCksICVlY3gKKwltb3Z6d2wJLTIoJWVkeCksICVlYngKKwljbXAJJWJsLCAlY2wKKwlqbmUJTChlbmQpCisJY21wCSViaCwgJWNoCisJbW92CSQwLCAlZWF4CisJam5lCUwoZW5kKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTCg2M2J5dGVzKToKKwltb3ZkcXUJLTYzKCVlYXgpLCAleG1tMQorCW1vdmRxdQktNjMoJWVkeCksICV4bW0yCisJbW92CSQtNjMsICVlYngKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg0N2J5dGVzKToKKwltb3YJJC00NywgJWVieAorCW1vdmRxdQktNDcoJWVheCksICV4bW0xCisJbW92ZHF1CS00NyglZWR4KSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgzMWJ5dGVzKToKKwltb3YJJC0zMSwgJWVieAorCW1vdmRxdQktMzEoJWVheCksICV4bW0xCisJbW92ZHF1CS0zMSglZWR4KSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCisJbW92bAktMTUoJWVheCksICVlY3gKKwltb3ZsCS0xNSglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCW1vdmwJLTExKCVlYXgpLCAlZWN4CisJbW92bAktMTEoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKwltb3ZsCS03KCVlYXgpLCAlZWN4CisJbW92bAktNyglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCW1vdnp3bAktMyglZWF4KSwgJWVjeAorCW1vdnp3bAktMyglZWR4KSwgJWVieAorCWNtcGIJJWJsLCAlY2wKKwlqbmUJTChlbmQpCisJY21wCSVieCwgJWN4CisJam5lCUwoZW5kKQorCW1vdnpibAktMSglZWF4KSwgJWVheAorCWNtcGIJLTEoJWVkeCksICVhbAorCW1vdgkkMCwgJWVheAorCWpuZQlMKGVuZCkKKwlSRVRVUk4KKyNlbmRpZgorCisJLnAyYWxpZ24gNAorTCg2NGJ5dGVzKToKKwltb3ZkcXUJLTY0KCVlYXgpLCAleG1tMQorCW1vdmRxdQktNjQoJWVkeCksICV4bW0yCisJbW92CSQtNjQsICVlYngKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg0OGJ5dGVzKToKKwltb3ZkcXUJLTQ4KCVlYXgpLCAleG1tMQorCW1vdmRxdQktNDgoJWVkeCksICV4bW0yCisJbW92CSQtNDgsICVlYngKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgzMmJ5dGVzKToKKwltb3ZkcXUJLTMyKCVlYXgpLCAleG1tMQorCW1vdmRxdQktMzIoJWVkeCksICV4bW0yCisJbW92CSQtMzIsICVlYngKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCisJbW92CS0xNiglZWF4KSwgJWVjeAorI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorCW1vdgktMTYoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorI2Vsc2UKKwljbXAJLTE2KCVlZHgpLCAlZWN4CisjZW5kaWYKKwlqbmUJTChmaW5kX2RpZmYpCisKKwltb3YJLTEyKCVlYXgpLCAlZWN4CisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisJbW92CS0xMiglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisjZWxzZQorCWNtcAktMTIoJWVkeCksICVlY3gKKyNlbmRpZgorCWpuZQlMKGZpbmRfZGlmZikKKworCW1vdgktOCglZWF4KSwgJWVjeAorI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorCW1vdgktOCglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisjZWxzZQorCWNtcAktOCglZWR4KSwgJWVjeAorI2VuZGlmCisJam5lCUwoZmluZF9kaWZmKQorCisJbW92CS00KCVlYXgpLCAlZWN4CisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisJbW92CS00KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKyNlbHNlCisJY21wCS00KCVlZHgpLCAlZWN4CisjZW5kaWYKKwltb3YJJDAsICVlYXgKKwlqbmUJTChmaW5kX2RpZmYpCisJUkVUVVJOCisKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwkucDJhbGlnbiA0CitMKGxlc3MxNmJ5dGVzKToKKwlhZGQJJWVieCwgJWVheAorCWFkZAklZWJ4LCAlZWR4CisKKwltb3YJKCVlYXgpLCAlZWN4CisJbW92CSglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCisJbW92CTQoJWVheCksICVlY3gKKwltb3YJNCglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCisJbW92CTgoJWVheCksICVlY3gKKwltb3YJOCglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCisJbW92CTEyKCVlYXgpLCAlZWN4CisJbW92CTEyKCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwltb3YJJDAsICVlYXgKKwlqbmUJTChmaW5kX2RpZmYpCisJUkVUVVJOCisjZWxzZQorCS5wMmFsaWduIDQKK0wobGVzczE2Ynl0ZXMpOgorCWFkZAklZWJ4LCAlZWF4CisJYWRkCSVlYngsICVlZHgKKworCW1vdgkoJWVheCksICVlY3gKKwljbXAJKCVlZHgpLCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCisJbW92CTQoJWVheCksICVlY3gKKwljbXAJNCglZWR4KSwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKworCW1vdgk4KCVlYXgpLCAlZWN4CisJY21wCTgoJWVkeCksICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCisKKwltb3YJMTIoJWVheCksICVlY3gKKwljbXAJMTIoJWVkeCksICVlY3gKKworCW1vdgkkMCwgJWVheAorCWpuZQlMKGZpbmRfZGlmZikKKwlSRVRVUk4KKyNlbmRpZgorCisJLnAyYWxpZ24gNAorTChmaW5kX2RpZmYpOgorI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorCWNtcGIJJWJsLCAlY2wKKwlqbmUJTChlbmQpCisJY21wCSVieCwgJWN4CisJam5lCUwoZW5kKQorCXNocgkkMTYsJWVjeAorCXNocgkkMTYsJWVieAorCWNtcAklYmwsICVjbAorCWpuZQlMKGVuZCkKKwljbXAJJWJ4LCAlY3gKK0woZW5kKToKKwlQT1AJKCVlYngpCisJbW92CSQxLCAlZWF4CisJamEJTChiaWdnZXIpCisJbmVnCSVlYXgKK0woYmlnZ2VyKToKKwlyZXQKKyNlbHNlCisJUE9QCSglZWJ4KQorCW1vdgkkMSwgJWVheAorCWpnCUwoYmlnZ2VyKQorCW5lZwklZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGJpZ2dlcik6CisJcmV0CisjZW5kaWYKK0VORCAoTUVNQ01QKQorCisJLnNlY3Rpb24gLnJvZGF0YS5zc2U0LjIsImEiLEBwcm9nYml0cworCS5wMmFsaWduIDIKKwkudHlwZQlMKHRhYmxlXzY0Ynl0ZXMpLCBAb2JqZWN0CisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCitMKHRhYmxlXzY0Ynl0ZXMpOgorCS5pbnQJSk1QVEJMIChMKDBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMWJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgyYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDNieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg1Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoN2J5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg4Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDlieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTFieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTNieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTVieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTdieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMThieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTlieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjFieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjNieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjVieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjdieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjhieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjlieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzFieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzNieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzVieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzdieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzhieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzlieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDFieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDNieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDVieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDdieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDhieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDlieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTFieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTNieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTVieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTdieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNThieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTlieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjFieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjNieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisjZWxzZQorTCh0YWJsZV82NGJ5dGVzKToKKwkuaW50CUpNUFRCTCAoTCgwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoOGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgxMmJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgxNmJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgyMGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgyNGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgyOGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgzMmJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgzNmJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg0MGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg0NGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg0OGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg1MmJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg1NmJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg2MGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg2NGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2U0LXdtZW1jbXAtc2xtLlMgYi9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTQtd21lbWNtcC1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYzM1MGJiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2U0LXdtZW1jbXAtc2xtLlMKQEAgLTAsMCArMSwzMyBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2RlZmluZSBVU0VfQVNfV01FTUNNUAorI2RlZmluZSBNRU1DTVAgd21lbWNtcAorI2luY2x1ZGUgInNzZTQtbWVtY21wLXNsbS5TIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvYmNvcHkuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL2Jjb3B5LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZGYxZDAuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvYmNvcHkuUworKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBiY29weS5TLHYgMS41IDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBsb2NvcmUucy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLQkvKgotCSAqIChvdiliY29weSAoc3JjLGRzdCxjbnQpCi0JICogIHdzQHRvb2xzLmRlICAgICAoV29sZmdhbmcgU29sZnJhbmssIFRvb0xzIEdtYkgpICs0OS0yMjgtOTg1ODAwCi0JICovCi0KLSNpZiBkZWZpbmVkKE1FTUNPUFkpCi1FTlRSWShtZW1jcHkpCi0jZWxpZiBkZWZpbmVkKE1FTU1PVkUpCi1FTlRSWShtZW1tb3ZlKQotI2Vsc2UKLUVOVFJZKGJjb3B5KQotI2VuZGlmCi0JcHVzaGwJJWVzaQotCXB1c2hsCSVlZGkKLSNpZiBkZWZpbmVkKE1FTUNPUFkpIHx8IGRlZmluZWQoTUVNTU9WRSkKLQltb3ZsCTEyKCVlc3ApLCVlZGkKLQltb3ZsCTE2KCVlc3ApLCVlc2kKLQltb3ZsCSVlZGksICVlYXgKLSNlbHNlCi0JbW92bAkxMiglZXNwKSwlZXNpCi0JbW92bAkxNiglZXNwKSwlZWRpCi0jZW5kaWYKLQltb3ZsCTIwKCVlc3ApLCVlY3gKLQltb3ZsCSVlY3gsJWVkeAotCWNtcGwJJWVzaSwlZWRpCS8qIHBvdGVudGlhbGx5IG92ZXJsYXBwaW5nPyAqLwotCWpuYgkxZgotCWNsZAkJCS8qIG5vcGUsIGNvcHkgZm9yd2FyZHMuICovCi0Jc2hybAkkMiwlZWN4CQkvKiBjb3B5IGJ5IHdvcmRzICovCi0JcmVwCi0JbW92c2wKLQltb3ZsCSVlZHgsJWVjeAotCWFuZGwJJDMsJWVjeAkJLyogYW55IGJ5dGVzIGxlZnQ/ICovCi0JcmVwCi0JbW92c2IKLQlwb3BsCSVlZGkKLQlwb3BsCSVlc2kKLQlyZXQKLTE6Ci0JYWRkbAklZWN4LCVlZGkJLyogY29weSBiYWNrd2FyZHMuICovCi0JYWRkbAklZWN4LCVlc2kKLQlzdGQKLQlhbmRsCSQzLCVlY3gJCS8qIGFueSBmcmFjdGlvbmFsIGJ5dGVzPyAqLwotCWRlY2wJJWVkaQotCWRlY2wJJWVzaQotCXJlcAotCW1vdnNiCi0JbW92bAklZWR4LCVlY3gKLQlzaHJsCSQyLCVlY3gKLQlzdWJsCSQzLCVlc2kKLQlzdWJsCSQzLCVlZGkKLQlyZXAKLQltb3ZzbAotCXBvcGwJJWVkaQotCXBvcGwJJWVzaQotCWNsZAotCXJldAotI2lmIGRlZmluZWQoTUVNQ09QWSkKLUVORChtZW1jcHkpCi0jZWxpZiBkZWZpbmVkKE1FTU1PVkUpCi1FTkQobWVtbW92ZSkKLSNlbHNlCi1FTkQoYmNvcHkpCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL2NhY2hlLmggYi9saWJjL2FyY2gteDg2L3N0cmluZy9jYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWFmZjVjLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL2NhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgotQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci1MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLUFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0vKiBWYWx1ZXMgYXJlIG9wdGltaXplZCBmb3IgQXRvbSAqLwotI2RlZmluZSBTSEFSRURfQ0FDSEVfU0laRQkoNTEyKjEwMjQpCQkJLyogQXRvbSBMMiBDYWNoZSAqLwotI2RlZmluZSBEQVRBX0NBQ0hFX1NJWkUJCSgyNCoxMDI0KQkJCS8qIEF0b20gTDEgRGF0YSBDYWNoZSAqLwotI2RlZmluZSBTSEFSRURfQ0FDSEVfU0laRV9IQUxGCShTSEFSRURfQ0FDSEVfU0laRSAvIDIpCi0jZGVmaW5lIERBVEFfQ0FDSEVfU0laRV9IQUxGCShEQVRBX0NBQ0hFX1NJWkUgLyAyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvbWVtY21wLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1jbXAuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I1MDUzMC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1jbXAuUworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBtZW1jbXAuUyx2IDEuNCAyMDA1LzA4LzA3IDExOjMwOjM4IGVzcGllIEV4cCAkICovCi0vKgotICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KLSAqIFB1YmxpYyBkb21haW4uCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLUVOVFJZKG1lbWNtcCkKLQlwdXNobAklZWRpCi0JcHVzaGwJJWVzaQotCW1vdmwJMTIoJWVzcCksJWVkaQotCW1vdmwJMTYoJWVzcCksJWVzaQotCWNsZAkJCQkvKiBzZXQgY29tcGFyZSBkaXJlY3Rpb24gZm9yd2FyZCAqLwotCi0JbW92bAkyMCglZXNwKSwlZWN4CQkvKiBjb21wYXJlIGJ5IHdvcmRzICovCi0Jc2hybAkkMiwlZWN4Ci0JcmVwZQotCWNtcHNsCi0Jam5lCUw1CQkJLyogZG8gd2UgbWF0Y2ggc28gZmFyPyAqLwotCi0JbW92bAkyMCglZXNwKSwlZWN4CQkvKiBjb21wYXJlIHJlbWFpbmRlciBieSBieXRlcyAqLwotCWFuZGwJJDMsJWVjeAotCXJlcGUKLQljbXBzYgotCWpuZQlMNgkJCS8qIGRvIHdlIG1hdGNoPyAqLwotCi0JeG9ybAklZWF4LCVlYXgJCS8qIHdlIG1hdGNoLCByZXR1cm4gemVybwkqLwotCXBvcGwJJWVzaQotCXBvcGwJJWVkaQotCXJldAotCi1MNToJbW92bAkkNCwlZWN4CQkJLyogV2Uga25vdyB0aGF0IG9uZSBvZiB0aGUgbmV4dAkqLwotCXN1YmwJJWVjeCwlZWRpCQkvKiBmb3VyIHBhaXJzIG9mIGJ5dGVzIGRvIG5vdAkqLwotCXN1YmwJJWVjeCwlZXNpCQkvKiBtYXRjaC4JCQkqLwotCXJlcGUKLQljbXBzYgotTDY6CW1vdnpibCAgLTEoJWVkaSksJWVheAkJLyogUGVyZm9ybSB1bnNpZ25lZCBjb21wYXJpc29uCSovCi0JbW92emJsCS0xKCVlc2kpLCVlZHgKLQlzdWJsCSVlZHgsJWVheAotCXBvcGwJJWVzaQotCXBvcGwJJWVkaQotCXJldAotRU5EKG1lbWNtcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItaW5kZXgtYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1pbmRleC1hdG9tLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MWUxZDQuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1pbmRleC1hdG9tLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci1MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLUFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jZGVmaW5lIHN0cmNociAgaW5kZXgKLSNpbmNsdWRlICJzc2UyLXN0cmNoci1hdG9tLlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLW1lbXNldC1hdG9tLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLW1lbXNldC1hdG9tLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NGJmNTEuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1tZW1zZXQtYXRvbS5TCisrKyAvZGV2L251bGwKQEAgLTEsOTIxICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgKGMpIDIwMTAsIEludGVsIENvcnBvcmF0aW9uCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi1XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi1ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLUxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi1TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpbmNsdWRlICJjYWNoZS5oIgotI3VuZGVmIF9faTY4NgotCi0jaWZuZGVmIEwKLSMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAotI2VuZGlmCi0KLSNpZm5kZWYgQUxJR04KLSMgZGVmaW5lIEFMSUdOKG4pCS5wMmFsaWduIG4KLSNlbmRpZgotCi0jaWZuZGVmIGNmaV9zdGFydHByb2MKLSMgZGVmaW5lIGNmaV9zdGFydHByb2MJCQkuY2ZpX3N0YXJ0cHJvYwotI2VuZGlmCi0KLSNpZm5kZWYgY2ZpX2VuZHByb2MKLSMgZGVmaW5lIGNmaV9lbmRwcm9jCQkJLmNmaV9lbmRwcm9jCi0jZW5kaWYKLQotI2lmbmRlZiBjZmlfcmVsX29mZnNldAotIyBkZWZpbmUgY2ZpX3JlbF9vZmZzZXQocmVnLCBvZmYpCS5jZmlfcmVsX29mZnNldCByZWcsIG9mZgotI2VuZGlmCi0KLSNpZm5kZWYgY2ZpX3Jlc3RvcmUKLSMgZGVmaW5lIGNmaV9yZXN0b3JlKHJlZykJCS5jZmlfcmVzdG9yZSByZWcKLSNlbmRpZgotCi0jaWZuZGVmIGNmaV9hZGp1c3RfY2ZhX29mZnNldAotIyBkZWZpbmUgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0KG9mZikJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCBvZmYKLSNlbmRpZgotCi0jaWZuZGVmIEVOVFJZCi0jIGRlZmluZSBFTlRSWShuYW1lKQkJCVwKLQkudHlwZSBuYW1lLCAgQGZ1bmN0aW9uOyAJXAotCS5nbG9ibCBuYW1lOwkJCVwKLQkucDJhbGlnbiA0OwkJCVwKLW5hbWU6CQkJCQlcCi0JY2ZpX3N0YXJ0cHJvYwotI2VuZGlmCi0KLSNpZm5kZWYgRU5ECi0jIGRlZmluZSBFTkQobmFtZSkJCQlcCi0JY2ZpX2VuZHByb2M7CQkJXAotCS5zaXplIG5hbWUsIC4tbmFtZQotI2VuZGlmCi0KLSNkZWZpbmUgQ0ZJX1BVU0goUkVHKQkJCQkJCVwKLSAgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICg0KTsJCQkJCVwKLSAgY2ZpX3JlbF9vZmZzZXQgKFJFRywgMCkKLQotI2RlZmluZSBDRklfUE9QKFJFRykJCQkJCQlcCi0gIGNmaV9hZGp1c3RfY2ZhX29mZnNldCAoLTQpOwkJCQkJXAotICBjZmlfcmVzdG9yZSAoUkVHKQotCi0jZGVmaW5lIFBVU0goUkVHKQlwdXNobCBSRUc7IENGSV9QVVNIIChSRUcpCi0jZGVmaW5lIFBPUChSRUcpCXBvcGwgUkVHOyBDRklfUE9QIChSRUcpCi0KLSNpZmRlZiBVU0VfQVNfQlpFUk8KLSMgZGVmaW5lIERFU1QJCVBBUk1TCi0jIGRlZmluZSBMRU4JCURFU1QrNAotIyBkZWZpbmUgU0VUUlROVkFMCi0jZWxzZQotIyBkZWZpbmUgREVTVAkJUEFSTVMKLSMgZGVmaW5lIENIUgkJREVTVCs0Ci0jIGRlZmluZSBMRU4JCUNIUis0Ci0jIGRlZmluZSBTRVRSVE5WQUwJbW92bCBERVNUKCVlc3ApLCAlZWF4Ci0jZW5kaWYKLQotI2lmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0jIGRlZmluZSBFTlRSQU5DRQlQVVNIICglZWJ4KTsKLSMgZGVmaW5lIFJFVFVSTl9FTkQJUE9QICglZWJ4KTsgcmV0Ci0jIGRlZmluZSBSRVRVUk4JCVJFVFVSTl9FTkQ7IENGSV9QVVNIICglZWJ4KQotIyBkZWZpbmUgUEFSTVMJCTgJCS8qIFByZXNlcnZlIEVCWC4gICovCi0jIGRlZmluZSBKTVBUQkwoSSwgQikJSSAtIEIKLQotLyogTG9hZCBhbiBlbnRyeSBpbiBhIGp1bXAgdGFibGUgaW50byBFQlggYW5kIGJyYW5jaCB0byBpdC4gIFRBQkxFIGlzIGEKLSAgIGp1bXAgdGFibGUgd2l0aCByZWxhdGl2ZSBvZmZzZXRzLiAgICovCi0jIGRlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFKQkJCQlcCi0gICAgLyogV2UgZmlyc3QgbG9hZCBQQyBpbnRvIEVCWC4gICovCQkJCVwKLSAgICBjYWxsCV9faTY4Ni5nZXRfcGNfdGh1bmsuYng7CQkJCVwKLSAgICAvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGp1bXAgdGFibGUuICAqLwkJCVwKLSAgICBhZGQJCSQoVEFCTEUgLSAuKSwgJWVieDsJCQkJXAotICAgIC8qIEdldCB0aGUgZW50cnkgYW5kIGNvbnZlcnQgdGhlIHJlbGF0aXZlIG9mZnNldCB0byB0aGUJXAotICAgICAgIGFic29sdXRlIGFkZHJlc3MuICAqLwkJCQkJXAotICAgIGFkZAkJKCVlYngsJWVjeCw0KSwgJWVieDsJCQkJXAotICAgIGFkZAkJJWVjeCwgJWVkeDsJCQkJCVwKLSAgICAvKiBXZSBsb2FkZWQgdGhlIGp1bXAgdGFibGUgYW5kIGFkanVlc3RlZCBFRFguIEdvLiAgKi8JXAotICAgIGptcAkJKiVlYngKLQotCS5zZWN0aW9uCS5nbnUubGlua29uY2UudC5fX2k2ODYuZ2V0X3BjX3RodW5rLmJ4LCJheCIsQHByb2diaXRzCi0JLmdsb2JsCV9faTY4Ni5nZXRfcGNfdGh1bmsuYngKLQkuaGlkZGVuCV9faTY4Ni5nZXRfcGNfdGh1bmsuYngKLQlBTElHTiAoNCkKLQkudHlwZQlfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4LEBmdW5jdGlvbgotX19pNjg2LmdldF9wY190aHVuay5ieDoKLQltb3ZsCSglZXNwKSwgJWVieAotCXJldAotI2Vsc2UKLSMgZGVmaW5lIEVOVFJBTkNFCi0jIGRlZmluZSBSRVRVUk5fRU5ECXJldAotIyBkZWZpbmUgUkVUVVJOCQlSRVRVUk5fRU5ECi0jIGRlZmluZSBQQVJNUwkJNAotIyBkZWZpbmUgSk1QVEJMKEksIEIpCUkKLQotLyogQnJhbmNoIHRvIGFuIGVudHJ5IGluIGEganVtcCB0YWJsZS4gIFRBQkxFIGlzIGEganVtcCB0YWJsZSB3aXRoCi0gICBhYnNvbHV0ZSBvZmZzZXRzLiAgKi8KLSMgZGVmaW5lIEJSQU5DSF9UT19KTVBUQkxfRU5UUlkoVEFCTEUpCQkJCVwKLSAgICBhZGQJCSVlY3gsICVlZHg7CQkJCQlcCi0gICAgam1wCQkqVEFCTEUoLCVlY3gsNCkKLSNlbmRpZgotCi0jaWZuZGVmIE1FTVNFVAotIyBkZWZpbmUgTUVNU0VUIG1lbXNldAotI2VuZGlmCi0KLQkuc2VjdGlvbiAudGV4dC5zc2UyLCJheCIsQHByb2diaXRzCi0JQUxJR04gKDQpCi1FTlRSWSAoTUVNU0VUKQotCUVOVFJBTkNFCi0KLQltb3ZsCUxFTiglZXNwKSwgJWVjeAotI2lmZGVmIFVTRV9BU19CWkVSTwotCXhvcgklZWF4LCAlZWF4Ci0jZWxzZQotCW1vdnpibAlDSFIoJWVzcCksICVlYXgKLQltb3ZiCSVhbCwgJWFoCi0JLyogRmlsbCB0aGUgd2hvbGUgRUFYIHdpdGggcGF0dGVybi4gICovCi0JbW92bAklZWF4LCAlZWR4Ci0Jc2hsCSQxNiwgJWVheAotCW9yCSVlZHgsICVlYXgKLSNlbmRpZgotCW1vdmwJREVTVCglZXNwKSwgJWVkeAotCWNtcAkkMzIsICVlY3gKLQlqYWUJTCgzMmJ5dGVzb3Jtb3JlKQotCi1MKHdyaXRlX2xlc3MzMmJ5dGVzKToKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0KLQotCS5wdXNoc2VjdGlvbiAucm9kYXRhLnNzZTIsImEiLEBwcm9nYml0cwotCUFMSUdOICgyKQotTCh0YWJsZV9sZXNzXzMyYnl0ZXMpOgotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzBieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8xYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMmJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzNieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV80Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfNWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzZieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV83Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfOGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzlieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8xMGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzExYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMTJieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8xM2J5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzE0Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMTVieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8xNmJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzE3Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMThieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8xOWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzIwYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMjFieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8yMmJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzIzYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMjRieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8yNWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzI2Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMjdieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8yOGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzI5Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMzBieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8zMWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5wb3BzZWN0aW9uCi0KLQlBTElHTiAoNCkKLUwod3JpdGVfMjhieXRlcyk6Ci0JbW92bAklZWF4LCAtMjgoJWVkeCkKLUwod3JpdGVfMjRieXRlcyk6Ci0JbW92bAklZWF4LCAtMjQoJWVkeCkKLUwod3JpdGVfMjBieXRlcyk6Ci0JbW92bAklZWF4LCAtMjAoJWVkeCkKLUwod3JpdGVfMTZieXRlcyk6Ci0JbW92bAklZWF4LCAtMTYoJWVkeCkKLUwod3JpdGVfMTJieXRlcyk6Ci0JbW92bAklZWF4LCAtMTIoJWVkeCkKLUwod3JpdGVfOGJ5dGVzKToKLQltb3ZsCSVlYXgsIC04KCVlZHgpCi1MKHdyaXRlXzRieXRlcyk6Ci0JbW92bAklZWF4LCAtNCglZWR4KQotTCh3cml0ZV8wYnl0ZXMpOgotCVNFVFJUTlZBTAotCVJFVFVSTgotCi0JQUxJR04gKDQpCi1MKHdyaXRlXzI5Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTI5KCVlZHgpCi1MKHdyaXRlXzI1Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTI1KCVlZHgpCi1MKHdyaXRlXzIxYnl0ZXMpOgotCW1vdmwJJWVheCwgLTIxKCVlZHgpCi1MKHdyaXRlXzE3Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTE3KCVlZHgpCi1MKHdyaXRlXzEzYnl0ZXMpOgotCW1vdmwJJWVheCwgLTEzKCVlZHgpCi1MKHdyaXRlXzlieXRlcyk6Ci0JbW92bAklZWF4LCAtOSglZWR4KQotTCh3cml0ZV81Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTUoJWVkeCkKLUwod3JpdGVfMWJ5dGVzKToKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTCh3cml0ZV8zMGJ5dGVzKToKLQltb3ZsCSVlYXgsIC0zMCglZWR4KQotTCh3cml0ZV8yNmJ5dGVzKToKLQltb3ZsCSVlYXgsIC0yNiglZWR4KQotTCh3cml0ZV8yMmJ5dGVzKToKLQltb3ZsCSVlYXgsIC0yMiglZWR4KQotTCh3cml0ZV8xOGJ5dGVzKToKLQltb3ZsCSVlYXgsIC0xOCglZWR4KQotTCh3cml0ZV8xNGJ5dGVzKToKLQltb3ZsCSVlYXgsIC0xNCglZWR4KQotTCh3cml0ZV8xMGJ5dGVzKToKLQltb3ZsCSVlYXgsIC0xMCglZWR4KQotTCh3cml0ZV82Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTYoJWVkeCkKLUwod3JpdGVfMmJ5dGVzKToKLQltb3Z3CSVheCwgLTIoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTCh3cml0ZV8zMWJ5dGVzKToKLQltb3ZsCSVlYXgsIC0zMSglZWR4KQotTCh3cml0ZV8yN2J5dGVzKToKLQltb3ZsCSVlYXgsIC0yNyglZWR4KQotTCh3cml0ZV8yM2J5dGVzKToKLQltb3ZsCSVlYXgsIC0yMyglZWR4KQotTCh3cml0ZV8xOWJ5dGVzKToKLQltb3ZsCSVlYXgsIC0xOSglZWR4KQotTCh3cml0ZV8xNWJ5dGVzKToKLQltb3ZsCSVlYXgsIC0xNSglZWR4KQotTCh3cml0ZV8xMWJ5dGVzKToKLQltb3ZsCSVlYXgsIC0xMSglZWR4KQotTCh3cml0ZV83Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTcoJWVkeCkKLUwod3JpdGVfM2J5dGVzKToKLQltb3Z3CSVheCwgLTMoJWVkeCkKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotLyogRUNYID4gMzIgYW5kIEVEWCBpcyA0IGJ5dGUgYWxpZ25lZC4gICovCi1MKDMyYnl0ZXNvcm1vcmUpOgotCS8qIEZpbGwgeG1tMCB3aXRoIHRoZSBwYXR0ZXJuLiAgKi8KLSNpZmRlZiBVU0VfQVNfQlpFUk8KLQlweG9yCSV4bW0wLCAleG1tMAotI2Vsc2UKLQltb3ZkCSVlYXgsICV4bW0wCi0JcHNodWZkCSQwLCAleG1tMCwgJXhtbTAKLSNlbmRpZgotCXRlc3RsCSQweGYsICVlZHgKLQlqeglMKGFsaWduZWRfMTYpCi0vKiBFQ1ggPiAzMiBhbmQgRURYIGlzIG5vdCAxNiBieXRlIGFsaWduZWQuICAqLwotTChub3RfYWxpZ25lZF8xNik6Ci0JbW92ZHF1CSV4bW0wLCAoJWVkeCkKLQltb3ZsCSVlZHgsICVlYXgKLQlhbmQJJC0xNiwgJWVkeAotCWFkZAkkMTYsICVlZHgKLQlzdWIJJWVkeCwgJWVheAotCWFkZAklZWF4LCAlZWN4Ci0JbW92ZAkleG1tMCwgJWVheAotCi0JQUxJR04gKDQpCi1MKGFsaWduZWRfMTYpOgotCWNtcAkkMTI4LCAlZWN4Ci0JamFlCUwoMTI4Ynl0ZXNvcm1vcmUpCi0KLUwoYWxpZ25lZF8xNl9sZXNzMTI4Ynl0ZXMpOgotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCi0JQUxJR04gKDQpCi1MKDEyOGJ5dGVzb3Jtb3JlKToKLSNpZmRlZiBTSEFSRURfQ0FDSEVfU0laRQotCVBVU0ggKCVlYngpCi0JbW92CSRTSEFSRURfQ0FDSEVfU0laRSwgJWVieAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQljYWxsCV9faTY4Ni5nZXRfcGNfdGh1bmsuYngKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCW1vdglfX3g4Nl9zaGFyZWRfY2FjaGVfc2l6ZUBHT1RPRkYoJWVieCksICVlYngKLSMgZWxzZQotCVBVU0ggKCVlYngpCi0JbW92CV9feDg2X3NoYXJlZF9jYWNoZV9zaXplLCAlZWJ4Ci0jIGVuZGlmCi0jZW5kaWYKLQljbXAJJWVieCwgJWVjeAotCWphZQlMKDEyOGJ5dGVzb3Jtb3JlX250X3N0YXJ0KQotCi0KLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkUKLQlQT1AgKCVlYngpCi0jIGRlZmluZSBSRVNUT1JFX0VCWF9TVEFURSBDRklfUFVTSCAoJWVieCkKLQljbXAJJERBVEFfQ0FDSEVfU0laRSwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLSMgIGRlZmluZSBSRVNUT1JFX0VCWF9TVEFURQotCWNhbGwJX19pNjg2LmdldF9wY190aHVuay5ieAotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZUBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCVBPUCAoJWVieCkKLSMgIGRlZmluZSBSRVNUT1JFX0VCWF9TVEFURSBDRklfUFVTSCAoJWVieCkKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQotCWphZQlMKDEyOGJ5dGVzX0wyX25vcm1hbCkKLQlzdWJsCSQxMjgsICVlY3gKLUwoMTI4Ynl0ZXNvcm1vcmVfbm9ybWFsKToKLQlzdWIJJDEyOCwgJWVjeAotCW1vdmRxYQkleG1tMCwgKCVlZHgpCi0JbW92ZHFhCSV4bW0wLCAweDEwKCVlZHgpCi0JbW92ZHFhCSV4bW0wLCAweDIwKCVlZHgpCi0JbW92ZHFhCSV4bW0wLCAweDMwKCVlZHgpCi0JbW92ZHFhCSV4bW0wLCAweDQwKCVlZHgpCi0JbW92ZHFhCSV4bW0wLCAweDUwKCVlZHgpCi0JbW92ZHFhCSV4bW0wLCAweDYwKCVlZHgpCi0JbW92ZHFhCSV4bW0wLCAweDcwKCVlZHgpCi0JbGVhCTEyOCglZWR4KSwgJWVkeAotCWpiCUwoMTI4Ynl0ZXNsZXNzX25vcm1hbCkKLQotCi0Jc3ViCSQxMjgsICVlY3gKLQltb3ZkcWEJJXhtbTAsICglZWR4KQotCW1vdmRxYQkleG1tMCwgMHgxMCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHgyMCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHgzMCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHg0MCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHg1MCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHg2MCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHg3MCglZWR4KQotCWxlYQkxMjgoJWVkeCksICVlZHgKLQlqYWUJTCgxMjhieXRlc29ybW9yZV9ub3JtYWwpCi0KLUwoMTI4Ynl0ZXNsZXNzX25vcm1hbCk6Ci0JYWRkCSQxMjgsICVlY3gKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQotCUFMSUdOICg0KQotTCgxMjhieXRlc19MMl9ub3JtYWwpOgotCXByZWZldGNodDAJMHgzODAoJWVkeCkKLQlwcmVmZXRjaHQwCTB4M2MwKCVlZHgpCi0Jc3ViCSQxMjgsICVlY3gKLQltb3ZkcWEJJXhtbTAsICglZWR4KQotCW1vdmFwcwkleG1tMCwgMHgxMCglZWR4KQotCW1vdmFwcwkleG1tMCwgMHgyMCglZWR4KQotCW1vdmFwcwkleG1tMCwgMHgzMCglZWR4KQotCW1vdmFwcwkleG1tMCwgMHg0MCglZWR4KQotCW1vdmFwcwkleG1tMCwgMHg1MCglZWR4KQotCW1vdmFwcwkleG1tMCwgMHg2MCglZWR4KQotCW1vdmFwcwkleG1tMCwgMHg3MCglZWR4KQotCWFkZAkkMTI4LCAlZWR4Ci0JY21wCSQxMjgsICVlY3gKLQlqYWUJTCgxMjhieXRlc19MMl9ub3JtYWwpCi0KLUwoMTI4Ynl0ZXNsZXNzX0wyX25vcm1hbCk6Ci0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV8xNl8xMjhieXRlcykpCi0KLQlSRVNUT1JFX0VCWF9TVEFURQotTCgxMjhieXRlc29ybW9yZV9udF9zdGFydCk6Ci0Jc3ViCSVlYngsICVlY3gKLQltb3YJJWVieCwgJWVheAotCWFuZAkkMHg3ZiwgJWVheAotCWFkZAklZWF4LCAlZWN4Ci0JbW92ZAkleG1tMCwgJWVheAotCUFMSUdOICg0KQotTCgxMjhieXRlc29ybW9yZV9zaGFyZWRfY2FjaGVfbG9vcCk6Ci0JcHJlZmV0Y2h0MAkweDNjMCglZWR4KQotCXByZWZldGNodDAJMHgzODAoJWVkeCkKLQlzdWIJJDB4ODAsICVlYngKLQltb3ZkcWEJJXhtbTAsICglZWR4KQotCW1vdmRxYQkleG1tMCwgMHgxMCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHgyMCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHgzMCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHg0MCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHg1MCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHg2MCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHg3MCglZWR4KQotCWFkZAkkMHg4MCwgJWVkeAotCWNtcAkkMHg4MCwgJWVieAotCWphZQlMKDEyOGJ5dGVzb3Jtb3JlX3NoYXJlZF9jYWNoZV9sb29wKQotCWNtcAkkMHg4MCwgJWVjeAotCWpiCUwoc2hhcmVkX2NhY2hlX2xvb3BfZW5kKQotCUFMSUdOICg0KQotTCgxMjhieXRlc29ybW9yZV9udCk6Ci0Jc3ViCSQweDgwLCAlZWN4Ci0JbW92bnRkcQkleG1tMCwgKCVlZHgpCi0JbW92bnRkcQkleG1tMCwgMHgxMCglZWR4KQotCW1vdm50ZHEJJXhtbTAsIDB4MjAoJWVkeCkKLQltb3ZudGRxCSV4bW0wLCAweDMwKCVlZHgpCi0JbW92bnRkcQkleG1tMCwgMHg0MCglZWR4KQotCW1vdm50ZHEJJXhtbTAsIDB4NTAoJWVkeCkKLQltb3ZudGRxCSV4bW0wLCAweDYwKCVlZHgpCi0JbW92bnRkcQkleG1tMCwgMHg3MCglZWR4KQotCWFkZAkkMHg4MCwgJWVkeAotCWNtcAkkMHg4MCwgJWVjeAotCWphZQlMKDEyOGJ5dGVzb3Jtb3JlX250KQotCXNmZW5jZQotTChzaGFyZWRfY2FjaGVfbG9vcF9lbmQpOgotI2lmIGRlZmluZWQgREFUQV9DQUNIRV9TSVpFIHx8ICEoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVBPUCAoJWVieCkKLSNlbmRpZgotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCi0KLQkucHVzaHNlY3Rpb24gLnJvZGF0YS5zc2UyLCJhIixAcHJvZ2JpdHMKLQlBTElHTiAoMikKLUwodGFibGVfMTZfMTI4Ynl0ZXMpOgotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfM2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xM2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xNWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xNmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xOGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xOWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yMGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yMmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yM2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yNWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yNmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yOGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yOWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zMGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zMmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zM2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zNWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zNmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zOGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zOWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80MGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80MWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80MmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80M2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80NGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80NWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80NmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80N2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80OGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80OWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81MGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81MWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81MmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81M2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81NGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81NWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81NmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81N2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81OGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81OWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82MGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82MWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82MmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82M2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82NGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82NWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82NmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82N2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82OGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82OWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83MGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83MWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83MmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83M2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83NGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83NWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83NmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83N2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83OGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83OWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84MGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84MWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84MmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84M2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84NGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84NWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84NmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84N2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84OGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84OWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85MGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85MWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85MmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85M2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85NGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85NWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85NmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85N2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85OGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85OWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTAxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwMmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTA0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwNWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTA3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwOGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTEwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTEzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTE2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMThieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTE5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyMGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTIyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyM2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTI1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyNmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5wb3BzZWN0aW9uCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMTJieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTEyKCVlZHgpCi1MKGFsaWduZWRfMTZfOTZieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtOTYoJWVkeCkKLUwoYWxpZ25lZF8xNl84MGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC04MCglZWR4KQotTChhbGlnbmVkXzE2XzY0Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTY0KCVlZHgpCi1MKGFsaWduZWRfMTZfNDhieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNDgoJWVkeCkKLUwoYWxpZ25lZF8xNl8zMmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0zMiglZWR4KQotTChhbGlnbmVkXzE2XzE2Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTE2KCVlZHgpCi1MKGFsaWduZWRfMTZfMGJ5dGVzKToKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzExM2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMTMoJWVkeCkKLUwoYWxpZ25lZF8xNl85N2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC05NyglZWR4KQotTChhbGlnbmVkXzE2XzgxYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTgxKCVlZHgpCi1MKGFsaWduZWRfMTZfNjVieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNjUoJWVkeCkKLUwoYWxpZ25lZF8xNl80OWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC00OSglZWR4KQotTChhbGlnbmVkXzE2XzMzYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTMzKCVlZHgpCi1MKGFsaWduZWRfMTZfMTdieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTcoJWVkeCkKLUwoYWxpZ25lZF8xNl8xYnl0ZXMpOgotCW1vdmIJJWFsLCAtMSglZWR4KQotCVNFVFJUTlZBTAotCVJFVFVSTgotCi0JQUxJR04gKDQpCi1MKGFsaWduZWRfMTZfMTE0Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTExNCglZWR4KQotTChhbGlnbmVkXzE2Xzk4Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTk4KCVlZHgpCi1MKGFsaWduZWRfMTZfODJieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtODIoJWVkeCkKLUwoYWxpZ25lZF8xNl82NmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC02NiglZWR4KQotTChhbGlnbmVkXzE2XzUwYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTUwKCVlZHgpCi1MKGFsaWduZWRfMTZfMzRieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMzQoJWVkeCkKLUwoYWxpZ25lZF8xNl8xOGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xOCglZWR4KQotTChhbGlnbmVkXzE2XzJieXRlcyk6Ci0JbW92dwklYXgsIC0yKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMTVieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTE1KCVlZHgpCi1MKGFsaWduZWRfMTZfOTlieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtOTkoJWVkeCkKLUwoYWxpZ25lZF8xNl84M2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC04MyglZWR4KQotTChhbGlnbmVkXzE2XzY3Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTY3KCVlZHgpCi1MKGFsaWduZWRfMTZfNTFieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNTEoJWVkeCkKLUwoYWxpZ25lZF8xNl8zNWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0zNSglZWR4KQotTChhbGlnbmVkXzE2XzE5Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTE5KCVlZHgpCi1MKGFsaWduZWRfMTZfM2J5dGVzKToKLQltb3Z3CSVheCwgLTMoJWVkeCkKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzExNmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMTYoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMDBieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTAwKCVlZHgpCi1MKGFsaWduZWRfMTZfODRieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtODQoJWVkeCkKLUwoYWxpZ25lZF8xNl82OGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC02OCglZWR4KQotTChhbGlnbmVkXzE2XzUyYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTUyKCVlZHgpCi1MKGFsaWduZWRfMTZfMzZieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMzYoJWVkeCkKLUwoYWxpZ25lZF8xNl8yMGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0yMCglZWR4KQotTChhbGlnbmVkXzE2XzRieXRlcyk6Ci0JbW92bAklZWF4LCAtNCglZWR4KQotCVNFVFJUTlZBTAotCVJFVFVSTgotCi0JQUxJR04gKDQpCi1MKGFsaWduZWRfMTZfMTE3Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTExNyglZWR4KQotTChhbGlnbmVkXzE2XzEwMWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMDEoJWVkeCkKLUwoYWxpZ25lZF8xNl84NWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC04NSglZWR4KQotTChhbGlnbmVkXzE2XzY5Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTY5KCVlZHgpCi1MKGFsaWduZWRfMTZfNTNieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNTMoJWVkeCkKLUwoYWxpZ25lZF8xNl8zN2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0zNyglZWR4KQotTChhbGlnbmVkXzE2XzIxYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTIxKCVlZHgpCi1MKGFsaWduZWRfMTZfNWJ5dGVzKToKLQltb3ZsCSVlYXgsIC01KCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMThieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTE4KCVlZHgpCi1MKGFsaWduZWRfMTZfMTAyYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTEwMiglZWR4KQotTChhbGlnbmVkXzE2Xzg2Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTg2KCVlZHgpCi1MKGFsaWduZWRfMTZfNzBieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNzAoJWVkeCkKLUwoYWxpZ25lZF8xNl81NGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC01NCglZWR4KQotTChhbGlnbmVkXzE2XzM4Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTM4KCVlZHgpCi1MKGFsaWduZWRfMTZfMjJieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMjIoJWVkeCkKLUwoYWxpZ25lZF8xNl82Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTYoJWVkeCkKLQltb3Z3CSVheCwgLTIoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzExOWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMTkoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMDNieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTAzKCVlZHgpCi1MKGFsaWduZWRfMTZfODdieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtODcoJWVkeCkKLUwoYWxpZ25lZF8xNl83MWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC03MSglZWR4KQotTChhbGlnbmVkXzE2XzU1Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTU1KCVlZHgpCi1MKGFsaWduZWRfMTZfMzlieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMzkoJWVkeCkKLUwoYWxpZ25lZF8xNl8yM2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0yMyglZWR4KQotTChhbGlnbmVkXzE2XzdieXRlcyk6Ci0JbW92bAklZWF4LCAtNyglZWR4KQotCW1vdncJJWF4LCAtMyglZWR4KQotCW1vdmIJJWFsLCAtMSglZWR4KQotCVNFVFJUTlZBTAotCVJFVFVSTgotCi0JQUxJR04gKDQpCi1MKGFsaWduZWRfMTZfMTIwYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTEyMCglZWR4KQotTChhbGlnbmVkXzE2XzEwNGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMDQoJWVkeCkKLUwoYWxpZ25lZF8xNl84OGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC04OCglZWR4KQotTChhbGlnbmVkXzE2XzcyYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTcyKCVlZHgpCi1MKGFsaWduZWRfMTZfNTZieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNTYoJWVkeCkKLUwoYWxpZ25lZF8xNl80MGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC00MCglZWR4KQotTChhbGlnbmVkXzE2XzI0Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTI0KCVlZHgpCi1MKGFsaWduZWRfMTZfOGJ5dGVzKToKLQltb3ZxCSV4bW0wLCAtOCglZWR4KQotCVNFVFJUTlZBTAotCVJFVFVSTgotCi0JQUxJR04gKDQpCi1MKGFsaWduZWRfMTZfMTIxYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTEyMSglZWR4KQotTChhbGlnbmVkXzE2XzEwNWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMDUoJWVkeCkKLUwoYWxpZ25lZF8xNl84OWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC04OSglZWR4KQotTChhbGlnbmVkXzE2XzczYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTczKCVlZHgpCi1MKGFsaWduZWRfMTZfNTdieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNTcoJWVkeCkKLUwoYWxpZ25lZF8xNl80MWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC00MSglZWR4KQotTChhbGlnbmVkXzE2XzI1Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTI1KCVlZHgpCi1MKGFsaWduZWRfMTZfOWJ5dGVzKToKLQltb3ZxCSV4bW0wLCAtOSglZWR4KQotCW1vdmIJJWFsLCAtMSglZWR4KQotCVNFVFJUTlZBTAotCVJFVFVSTgotCi0JQUxJR04gKDQpCi1MKGFsaWduZWRfMTZfMTIyYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTEyMiglZWR4KQotTChhbGlnbmVkXzE2XzEwNmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMDYoJWVkeCkKLUwoYWxpZ25lZF8xNl85MGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC05MCglZWR4KQotTChhbGlnbmVkXzE2Xzc0Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTc0KCVlZHgpCi1MKGFsaWduZWRfMTZfNThieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNTgoJWVkeCkKLUwoYWxpZ25lZF8xNl80MmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC00MiglZWR4KQotTChhbGlnbmVkXzE2XzI2Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTI2KCVlZHgpCi1MKGFsaWduZWRfMTZfMTBieXRlcyk6Ci0JbW92cQkleG1tMCwgLTEwKCVlZHgpCi0JbW92dwklYXgsIC0yKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMjNieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTIzKCVlZHgpCi1MKGFsaWduZWRfMTZfMTA3Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTEwNyglZWR4KQotTChhbGlnbmVkXzE2XzkxYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTkxKCVlZHgpCi1MKGFsaWduZWRfMTZfNzVieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNzUoJWVkeCkKLUwoYWxpZ25lZF8xNl81OWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC01OSglZWR4KQotTChhbGlnbmVkXzE2XzQzYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTQzKCVlZHgpCi1MKGFsaWduZWRfMTZfMjdieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMjcoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMWJ5dGVzKToKLQltb3ZxCSV4bW0wLCAtMTEoJWVkeCkKLQltb3Z3CSVheCwgLTMoJWVkeCkKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzEyNGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMjQoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMDhieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTA4KCVlZHgpCi1MKGFsaWduZWRfMTZfOTJieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtOTIoJWVkeCkKLUwoYWxpZ25lZF8xNl83NmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC03NiglZWR4KQotTChhbGlnbmVkXzE2XzYwYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTYwKCVlZHgpCi1MKGFsaWduZWRfMTZfNDRieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNDQoJWVkeCkKLUwoYWxpZ25lZF8xNl8yOGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0yOCglZWR4KQotTChhbGlnbmVkXzE2XzEyYnl0ZXMpOgotCW1vdnEJJXhtbTAsIC0xMiglZWR4KQotCW1vdmwJJWVheCwgLTQoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzEyNWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMjUoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMDlieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTA5KCVlZHgpCi1MKGFsaWduZWRfMTZfOTNieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtOTMoJWVkeCkKLUwoYWxpZ25lZF8xNl83N2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC03NyglZWR4KQotTChhbGlnbmVkXzE2XzYxYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTYxKCVlZHgpCi1MKGFsaWduZWRfMTZfNDVieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNDUoJWVkeCkKLUwoYWxpZ25lZF8xNl8yOWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0yOSglZWR4KQotTChhbGlnbmVkXzE2XzEzYnl0ZXMpOgotCW1vdnEJJXhtbTAsIC0xMyglZWR4KQotCW1vdmwJJWVheCwgLTUoJWVkeCkKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzEyNmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMjYoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMTBieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTEwKCVlZHgpCi1MKGFsaWduZWRfMTZfOTRieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtOTQoJWVkeCkKLUwoYWxpZ25lZF8xNl83OGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC03OCglZWR4KQotTChhbGlnbmVkXzE2XzYyYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTYyKCVlZHgpCi1MKGFsaWduZWRfMTZfNDZieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNDYoJWVkeCkKLUwoYWxpZ25lZF8xNl8zMGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0zMCglZWR4KQotTChhbGlnbmVkXzE2XzE0Ynl0ZXMpOgotCW1vdnEJJXhtbTAsIC0xNCglZWR4KQotCW1vdmwJJWVheCwgLTYoJWVkeCkKLQltb3Z3CSVheCwgLTIoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzEyN2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMjcoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMTFieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTExKCVlZHgpCi1MKGFsaWduZWRfMTZfOTVieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtOTUoJWVkeCkKLUwoYWxpZ25lZF8xNl83OWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC03OSglZWR4KQotTChhbGlnbmVkXzE2XzYzYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTYzKCVlZHgpCi1MKGFsaWduZWRfMTZfNDdieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNDcoJWVkeCkKLUwoYWxpZ25lZF8xNl8zMWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0zMSglZWR4KQotTChhbGlnbmVkXzE2XzE1Ynl0ZXMpOgotCW1vdnEJJXhtbTAsIC0xNSglZWR4KQotCW1vdmwJJWVheCwgLTcoJWVkeCkKLQltb3Z3CSVheCwgLTMoJWVkeCkKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk5fRU5ECi0KLUVORCAoTUVNU0VUKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtY21wMTYtYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtY21wMTYtYXRvbS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmU4ZjNkLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbWNtcDE2LWF0b20uUworKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi1XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi1ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLUxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi1TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNkZWZpbmUgTUVNQ01QICBfX21lbWNtcDE2Ci0KLS8qIGludCBfX21lbWNtcDE2KGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwdHIxLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqcHRyMiwgc2l6ZV90IG4pOyAqLwotCi0jZGVmaW5lIFVTRV9VVEYxNgotI2RlZmluZSBVU0VfQVNfTUVNQ01QMTYgMQotI2luY2x1ZGUgInNzc2UzLW1lbWNtcC1hdG9tLlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1tZW1jcHktYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtY3B5LWF0b20uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA4MGEzOC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1tZW1jcHktYXRvbS5TCisrKyAvZGV2L251bGwKQEAgLTEsMzIwMCArMCwwIEBACi0vKgotQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci1MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLUFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW5jbHVkZSAiY2FjaGUuaCIKLSN1bmRlZiBfX2k2ODYKLQotI2lmbmRlZiBNRU1DUFkKLSMgZGVmaW5lIE1FTUNQWQltZW1jcHkKLSNlbmRpZgotCi0jaWZuZGVmIEwKLSMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAotI2VuZGlmCi0KLSNpZm5kZWYgY2ZpX3N0YXJ0cHJvYwotIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkuY2ZpX3N0YXJ0cHJvYwotI2VuZGlmCi0KLSNpZm5kZWYgY2ZpX2VuZHByb2MKLSMgZGVmaW5lIGNmaV9lbmRwcm9jCS5jZmlfZW5kcHJvYwotI2VuZGlmCi0KLSNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKLSMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKLSNlbmRpZgotCi0jaWZuZGVmIGNmaV9yZXN0b3JlCi0jIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCS5jZmlfcmVzdG9yZSByZWcKLSNlbmRpZgotCi0jaWZuZGVmIGNmaV9hZGp1c3RfY2ZhX29mZnNldAotIyBkZWZpbmUgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0KG9mZikJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCBvZmYKLSNlbmRpZgotCi0jaWZuZGVmIEVOVFJZCi0jIGRlZmluZSBFTlRSWShuYW1lKQkJXAotCS50eXBlIG5hbWUsICBAZnVuY3Rpb247CQlcCi0JLmdsb2JsIG5hbWU7CQlcCi0JLnAyYWxpZ24gNDsJCVwKLW5hbWU6CQlcCi0JY2ZpX3N0YXJ0cHJvYwotI2VuZGlmCi0KLSNpZm5kZWYgRU5ECi0jIGRlZmluZSBFTkQobmFtZSkJCVwKLQljZmlfZW5kcHJvYzsJCVwKLQkuc2l6ZSBuYW1lLCAuLW5hbWUKLSNlbmRpZgotCi0jaWZkZWYgVVNFX0FTX0JDT1BZCi0jIGRlZmluZSBTUkMJCVBBUk1TCi0jIGRlZmluZSBERVNUCQlTUkMrNAotIyBkZWZpbmUgTEVOCQlERVNUKzQKLSNlbHNlCi0jIGRlZmluZSBERVNUCQlQQVJNUwotIyBkZWZpbmUgU1JDCQlERVNUKzQKLSMgZGVmaW5lIExFTgkJU1JDKzQKLSNlbmRpZgotCi0jZGVmaW5lIENGSV9QVVNIKFJFRykJCVwKLSAgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICg0KTsJCVwKLSAgY2ZpX3JlbF9vZmZzZXQgKFJFRywgMCkKLQotI2RlZmluZSBDRklfUE9QKFJFRykJCVwKLSAgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7CQlcCi0gIGNmaV9yZXN0b3JlIChSRUcpCi0KLSNkZWZpbmUgUFVTSChSRUcpCXB1c2hsIFJFRzsgQ0ZJX1BVU0ggKFJFRykKLSNkZWZpbmUgUE9QKFJFRykJcG9wbCBSRUc7IENGSV9QT1AgKFJFRykKLQotI2lmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0jIGRlZmluZSBQQVJNUwkJOAkJLyogUHJlc2VydmUgRUJYLiAgKi8KLSMgZGVmaW5lIEVOVFJBTkNFCVBVU0ggKCVlYngpOwotIyBkZWZpbmUgUkVUVVJOX0VORAlQT1AgKCVlYngpOyByZXQKLSMgZGVmaW5lIFJFVFVSTgkJUkVUVVJOX0VORDsgQ0ZJX1BVU0ggKCVlYngpCi0jIGRlZmluZSBKTVBUQkwoSSwgQikJSSAtIEIKLSMgdW5kZWYgX19pNjg2Ci0KLSMgZGVmaW5lIFNFVFVQX1BJQ19SRUcoeCkJY2FsbAlfX2k2ODYuZ2V0X3BjX3RodW5rLngKLQotLyogTG9hZCBhbiBlbnRyeSBpbiBhIGp1bXAgdGFibGUgaW50byBFQlggYW5kIGJyYW5jaCB0byBpdC4gIFRBQkxFIGlzIGEKLQlqdW1wIHRhYmxlIHdpdGggcmVsYXRpdmUgb2Zmc2V0cy4gIElOREVYIGlzIGEgcmVnaXN0ZXIgY29udGFpbnMgdGhlCi0JaW5kZXggaW50byB0aGUganVtcCB0YWJsZS4gICBTQ0FMRSBpcyB0aGUgc2NhbGUgb2YgSU5ERVguICovCi0KLSMgZGVmaW5lIEJSQU5DSF9UT19KTVBUQkxfRU5UUlkoVEFCTEUsIElOREVYLCBTQ0FMRSkJCVwKLSAgICAvKiBXZSBmaXJzdCBsb2FkIFBDIGludG8gRUJYLiAgKi8JCVwKLQlTRVRVUF9QSUNfUkVHKGJ4KTsJCVwKLSAgICAvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGp1bXAgdGFibGUuICAqLwkJXAotCWFkZGwJJChUQUJMRSAtIC4pLCAlZWJ4OwkJXAotICAgIC8qIEdldCB0aGUgZW50cnkgYW5kIGNvbnZlcnQgdGhlIHJlbGF0aXZlIG9mZnNldCB0byB0aGUJCVwKLQlhYnNvbHV0ZQlhZGRyZXNzLiAgKi8JCVwKLQlhZGRsCSglZWJ4LCBJTkRFWCwgU0NBTEUpLCAlZWJ4OwkJXAotICAgIC8qIFdlIGxvYWRlZCB0aGUganVtcCB0YWJsZS4gIEdvLiAgKi8JCVwKLQlqbXAJKiVlYngKLSNlbHNlCi0KLSMgZGVmaW5lIFBBUk1TCQk0Ci0jIGRlZmluZSBFTlRSQU5DRQotIyBkZWZpbmUgUkVUVVJOX0VORAlyZXQKLSMgZGVmaW5lIFJFVFVSTgkJUkVUVVJOX0VORAotIyBkZWZpbmUgSk1QVEJMKEksIEIpCUkKLQotLyogQnJhbmNoIHRvIGFuIGVudHJ5IGluIGEganVtcCB0YWJsZS4gIFRBQkxFIGlzIGEganVtcCB0YWJsZSB3aXRoCi0JYWJzb2x1dGUgb2Zmc2V0cy4gIElOREVYIGlzIGEgcmVnaXN0ZXIgY29udGFpbnMgdGhlIGluZGV4IGludG8gdGhlCi0JanVtcCB0YWJsZS4gIFNDQUxFIGlzIHRoZSBzY2FsZSBvZiBJTkRFWC4gKi8KLQotIyBkZWZpbmUgQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShUQUJMRSwgSU5ERVgsIFNDQUxFKQkJXAotCWptcAkqVEFCTEUoLCBJTkRFWCwgU0NBTEUpCi0jZW5kaWYKLQotCS5zZWN0aW9uIC50ZXh0LnNzc2UzLCJheCIsQHByb2diaXRzCi1FTlRSWSAoTUVNQ1BZKQotCUVOVFJBTkNFCi0JbW92bAlMRU4oJWVzcCksICVlY3gKLQltb3ZsCVNSQyglZXNwKSwgJWVheAotCW1vdmwJREVTVCglZXNwKSwgJWVkeAotCi0jaWZkZWYgVVNFX0FTX01FTU1PVkUKLQljbXAJJWVheCwgJWVkeAotCWpiCUwoY29weV9mb3J3YXJkKQotCWplCUwoZndkX3dyaXRlXzBieXRlcykKLQljbXAJJDMyLCAlZWN4Ci0JamFlCUwobWVtbW92ZV9id2QpCi0Jam1wCUwoYmtfd3JpdGVfbGVzczMyYnl0ZXNfMikKLQotCS5wMmFsaWduIDQKLUwobWVtbW92ZV9id2QpOgotCWFkZAklZWN4LCAlZWF4Ci0JY21wCSVlYXgsICVlZHgKLQltb3ZsCVNSQyglZXNwKSwgJWVheAotCWpiCUwoY29weV9iYWNrd2FyZCkKLQotTChjb3B5X2ZvcndhcmQpOgotI2VuZGlmCi0JY21wCSQ0OCwgJWVjeAotCWphZQlMKDQ4Ynl0ZXNvcm1vcmUpCi0KLUwoZndkX3dyaXRlX2xlc3MzMmJ5dGVzKToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQljbXAJJWRsLCAlYWwKLQlqYglMKGJrX3dyaXRlKQotI2VuZGlmCi0JYWRkCSVlY3gsICVlZHgKLQlhZGQJJWVjeCwgJWVheAotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCS5wMmFsaWduIDQKLUwoYmtfd3JpdGUpOgotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfNDhfYnl0ZXNfYndkKSwgJWVjeCwgNCkKLSNlbmRpZgotCi0JLnAyYWxpZ24gNAotTCg0OGJ5dGVzb3Jtb3JlKToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZscGQJKCVlYXgpLCAleG1tMAotCW1vdmxwZAk4KCVlYXgpLCAleG1tMQotCW1vdmxwZAkleG1tMCwgKCVlZHgpCi0JbW92bHBkCSV4bW0xLCA4KCVlZHgpCi0jZWxzZQotCW1vdmRxdQkoJWVheCksICV4bW0wCi0jZW5kaWYKLQlQVVNIICglZWRpKQotCW1vdmwJJWVkeCwgJWVkaQotCWFuZAkkLTE2LCAlZWR4Ci0JYWRkCSQxNiwgJWVkeAotCXN1YgklZWR4LCAlZWRpCi0JYWRkCSVlZGksICVlY3gKLQlzdWIJJWVkaSwgJWVheAotCi0jaWZkZWYgU0hBUkVEX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkU0hBUkVEX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X3NoYXJlZF9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfc2hhcmVkX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0KLQltb3YJJWVheCwgJWVkaQotCWphZQlMKGxhcmdlX3BhZ2UpCi0JYW5kCSQweGYsICVlZGkKLQlqeglMKHNobF8wKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoc2hsX3RhYmxlKSwgJWVkaSwgNCkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzApOgotI2lmZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0JeG9yCSVlZGksICVlZGkKLQljbXAJJDEyNywgJWVjeAotCWphCUwoc2hsXzBfZ29iYmxlKQotCWxlYQktMzIoJWVjeCksICVlY3gKLQotCS5wMmFsaWduIDQKLUwoc2hsXzBfbG9vcCk6Ci0JbW92ZHFhCSglZWF4LCAlZWRpKSwgJXhtbTAKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0xCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkleG1tMCwgKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0xLCAxNiglZWR4LCAlZWRpKQotCWxlYQkzMiglZWRpKSwgJWVkaQotCWpiCUwoc2hsXzBfZW5kKQotCi0JbW92ZHFhCSglZWF4LCAlZWRpKSwgJXhtbTAKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0xCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkleG1tMCwgKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0xLCAxNiglZWR4LCAlZWRpKQotCWxlYQkzMiglZWRpKSwgJWVkaQotCWpiCUwoc2hsXzBfZW5kKQotCi0JbW92ZHFhCSglZWF4LCAlZWRpKSwgJXhtbTAKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0xCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkleG1tMCwgKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0xLCAxNiglZWR4LCAlZWRpKQotCWxlYQkzMiglZWRpKSwgJWVkaQotCWpiCUwoc2hsXzBfZW5kKQotCi0JbW92ZHFhCSglZWF4LCAlZWRpKSwgJXhtbTAKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0xCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkleG1tMCwgKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0xLCAxNiglZWR4LCAlZWRpKQotCWxlYQkzMiglZWRpKSwgJWVkaQotCi1MKHNobF8wX2VuZCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JYWRkCSVlY3gsICVlZGkKLQlhZGQJJWVkaSwgJWVkeAotCWFkZAklZWRpLCAlZWF4Ci0JUE9QICglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF8wX2dvYmJsZSk6Ci0jaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCVBPUAkoJWVkaSkKLQlsZWEJLTEyOCglZWN4KSwgJWVjeAotCWphZQlMKHNobF8wX2dvYmJsZV9tZW1fbG9vcCkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzBfZ29iYmxlX2NhY2hlX2xvb3ApOgotCW1vdmRxYQkoJWVheCksICV4bW0wCi0JbW92ZHFhCTB4MTAoJWVheCksICV4bW0xCi0JbW92ZHFhCTB4MjAoJWVheCksICV4bW0yCi0JbW92ZHFhCTB4MzAoJWVheCksICV4bW0zCi0JbW92ZHFhCTB4NDAoJWVheCksICV4bW00Ci0JbW92ZHFhCTB4NTAoJWVheCksICV4bW01Ci0JbW92ZHFhCTB4NjAoJWVheCksICV4bW02Ci0JbW92ZHFhCTB4NzAoJWVheCksICV4bW03Ci0JbGVhCTB4ODAoJWVheCksICVlYXgKLQlzdWIJJDEyOCwgJWVjeAotCW1vdmRxYQkleG1tMCwgKCVlZHgpCi0JbW92ZHFhCSV4bW0xLCAweDEwKCVlZHgpCi0JbW92ZHFhCSV4bW0yLCAweDIwKCVlZHgpCi0JbW92ZHFhCSV4bW0zLCAweDMwKCVlZHgpCi0JbW92ZHFhCSV4bW00LCAweDQwKCVlZHgpCi0JbW92ZHFhCSV4bW01LCAweDUwKCVlZHgpCi0JbW92ZHFhCSV4bW02LCAweDYwKCVlZHgpCi0JbW92ZHFhCSV4bW03LCAweDcwKCVlZHgpCi0JbGVhCTB4ODAoJWVkeCksICVlZHgKLQotCWphZQlMKHNobF8wX2dvYmJsZV9jYWNoZV9sb29wKQotCWNtcAkkLTB4NDAsICVlY3gKLQlsZWEJMHg4MCglZWN4KSwgJWVjeAotCWpsCUwoc2hsXzBfY2FjaGVfbGVzc182NGJ5dGVzKQotCi0JbW92ZHFhCSglZWF4KSwgJXhtbTAKLQlzdWIJJDB4NDAsICVlY3gKLQltb3ZkcWEJMHgxMCglZWF4KSwgJXhtbTEKLQltb3ZkcWEJJXhtbTAsICglZWR4KQotCW1vdmRxYQkleG1tMSwgMHgxMCglZWR4KQotCW1vdmRxYQkweDIwKCVlYXgpLCAleG1tMAotCW1vdmRxYQkweDMwKCVlYXgpLCAleG1tMQotCWFkZAkkMHg0MCwgJWVheAotCW1vdmRxYQkleG1tMCwgMHgyMCglZWR4KQotCW1vdmRxYQkleG1tMSwgMHgzMCglZWR4KQotCWFkZAkkMHg0MCwgJWVkeAotCi1MKHNobF8wX2NhY2hlX2xlc3NfNjRieXRlcyk6Ci0JY21wCSQweDIwLCAlZWN4Ci0JamIJTChzaGxfMF9jYWNoZV9sZXNzXzMyYnl0ZXMpCi0JbW92ZHFhCSglZWF4KSwgJXhtbTAKLQlzdWIJJDB4MjAsICVlY3gKLQltb3ZkcWEJMHgxMCglZWF4KSwgJXhtbTEKLQlhZGQJJDB4MjAsICVlYXgKLQltb3ZkcWEJJXhtbTAsICglZWR4KQotCW1vdmRxYQkleG1tMSwgMHgxMCglZWR4KQotCWFkZAkkMHgyMCwgJWVkeAotCi1MKHNobF8wX2NhY2hlX2xlc3NfMzJieXRlcyk6Ci0JY21wCSQweDEwLCAlZWN4Ci0JamIJTChzaGxfMF9jYWNoZV9sZXNzXzE2Ynl0ZXMpCi0Jc3ViCSQweDEwLCAlZWN4Ci0JbW92ZHFhCSglZWF4KSwgJXhtbTAKLQlhZGQJJDB4MTAsICVlYXgKLQltb3ZkcWEJJXhtbTAsICglZWR4KQotCWFkZAkkMHgxMCwgJWVkeAotCi1MKHNobF8wX2NhY2hlX2xlc3NfMTZieXRlcyk6Ci0JYWRkCSVlY3gsICVlZHgKLQlhZGQJJWVjeCwgJWVheAotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JLnAyYWxpZ24gNAotTChzaGxfMF9nb2JibGVfbWVtX2xvb3ApOgotCXByZWZldGNodDAgMHgxYzAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MjgwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDFjMCglZWR4KQotCi0JbW92ZHFhCSglZWF4KSwgJXhtbTAKLQltb3ZkcWEJMHgxMCglZWF4KSwgJXhtbTEKLQltb3ZkcWEJMHgyMCglZWF4KSwgJXhtbTIKLQltb3ZkcWEJMHgzMCglZWF4KSwgJXhtbTMKLQltb3ZkcWEJMHg0MCglZWF4KSwgJXhtbTQKLQltb3ZkcWEJMHg1MCglZWF4KSwgJXhtbTUKLQltb3ZkcWEJMHg2MCglZWF4KSwgJXhtbTYKLQltb3ZkcWEJMHg3MCglZWF4KSwgJXhtbTcKLQlsZWEJMHg4MCglZWF4KSwgJWVheAotCXN1YgkkMHg4MCwgJWVjeAotCW1vdmRxYQkleG1tMCwgKCVlZHgpCi0JbW92ZHFhCSV4bW0xLCAweDEwKCVlZHgpCi0JbW92ZHFhCSV4bW0yLCAweDIwKCVlZHgpCi0JbW92ZHFhCSV4bW0zLCAweDMwKCVlZHgpCi0JbW92ZHFhCSV4bW00LCAweDQwKCVlZHgpCi0JbW92ZHFhCSV4bW01LCAweDUwKCVlZHgpCi0JbW92ZHFhCSV4bW02LCAweDYwKCVlZHgpCi0JbW92ZHFhCSV4bW03LCAweDcwKCVlZHgpCi0JbGVhCTB4ODAoJWVkeCksICVlZHgKLQotCWphZQlMKHNobF8wX2dvYmJsZV9tZW1fbG9vcCkKLQljbXAJJC0weDQwLCAlZWN4Ci0JbGVhCTB4ODAoJWVjeCksICVlY3gKLQlqbAlMKHNobF8wX21lbV9sZXNzXzY0Ynl0ZXMpCi0KLQltb3ZkcWEJKCVlYXgpLCAleG1tMAotCXN1YgkkMHg0MCwgJWVjeAotCW1vdmRxYQkweDEwKCVlYXgpLCAleG1tMQotCi0JbW92ZHFhCSV4bW0wLCAoJWVkeCkKLQltb3ZkcWEJJXhtbTEsIDB4MTAoJWVkeCkKLQotCW1vdmRxYQkweDIwKCVlYXgpLCAleG1tMAotCW1vdmRxYQkweDMwKCVlYXgpLCAleG1tMQotCWFkZAkkMHg0MCwgJWVheAotCi0JbW92ZHFhCSV4bW0wLCAweDIwKCVlZHgpCi0JbW92ZHFhCSV4bW0xLCAweDMwKCVlZHgpCi0JYWRkCSQweDQwLCAlZWR4Ci0KLUwoc2hsXzBfbWVtX2xlc3NfNjRieXRlcyk6Ci0JY21wCSQweDIwLCAlZWN4Ci0JamIJTChzaGxfMF9tZW1fbGVzc18zMmJ5dGVzKQotCW1vdmRxYQkoJWVheCksICV4bW0wCi0Jc3ViCSQweDIwLCAlZWN4Ci0JbW92ZHFhCTB4MTAoJWVheCksICV4bW0xCi0JYWRkCSQweDIwLCAlZWF4Ci0JbW92ZHFhCSV4bW0wLCAoJWVkeCkKLQltb3ZkcWEJJXhtbTEsIDB4MTAoJWVkeCkKLQlhZGQJJDB4MjAsICVlZHgKLQotTChzaGxfMF9tZW1fbGVzc18zMmJ5dGVzKToKLQljbXAJJDB4MTAsICVlY3gKLQlqYglMKHNobF8wX21lbV9sZXNzXzE2Ynl0ZXMpCi0Jc3ViCSQweDEwLCAlZWN4Ci0JbW92ZHFhCSglZWF4KSwgJXhtbTAKLQlhZGQJJDB4MTAsICVlYXgKLQltb3ZkcWEJJXhtbTAsICglZWR4KQotCWFkZAkkMHgxMCwgJWVkeAotCi1MKHNobF8wX21lbV9sZXNzXzE2Ynl0ZXMpOgotCWFkZAklZWN4LCAlZWR4Ci0JYWRkCSVlY3gsICVlYXgKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSwgJWVjeCwgNCkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzEpOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmFwcwktMSglZWF4KSwgJXhtbTEKLSNlbHNlCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZhcHMJLTEoJWVheCksICV4bW0xCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQlqYiBMKHNoXzFfbm9fcHJlZmV0Y2gpCi0KLQlsZWEJLTY0KCVlY3gpLCAlZWN4Ci0KLQkucDJhbGlnbiA0Ci1MKFNobDFMb29wU3RhcnQpOgotCXByZWZldGNodDAgMHgxYzAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCi0JbW92YXBzCTE1KCVlYXgpLCAleG1tMgotCW1vdmFwcwkzMSglZWF4KSwgJXhtbTMKLQltb3ZhcHMJNDcoJWVheCksICV4bW00Ci0JbW92YXBzCTYzKCVlYXgpLCAleG1tNQotCW1vdmFwcwkleG1tNSwgJXhtbTcKLQlwYWxpZ25yCSQxLCAleG1tNCwgJXhtbTUKLQlwYWxpZ25yCSQxLCAleG1tMywgJXhtbTQKLQltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCi0JcGFsaWducgkkMSwgJXhtbTIsICV4bW0zCi0JbGVhCTY0KCVlYXgpLCAlZWF4Ci0JcGFsaWducgkkMSwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW00LCAzMiglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQltb3ZhcHMJJXhtbTcsICV4bW0xCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQlsZWEJNjQoJWVkeCksICVlZHgKLQlzdWIJJDY0LCAlZWN4Ci0JamEJTChTaGwxTG9vcFN0YXJ0KQotCi1MKFNobDFMb29wTGVhdmUpOgotCWFkZAkkMzIsICVlY3gKLQlqbGUJTChzaGxfZW5kXzApCi0KLQltb3ZhcHMJMTUoJWVheCksICV4bW0yCi0JbW92YXBzCTMxKCVlYXgpLCAleG1tMwotCXBhbGlnbnIJJDEsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDEsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAotCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAotCVBPUCAoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzFfbm9fcHJlZmV0Y2gpOgotCWxlYQktMzIoJWVjeCksICVlY3gKLQlsZWEJLTEoJWVheCksICVlYXgKLQl4b3IJJWVkaSwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChzaF8xX25vX3ByZWZldGNoX2xvb3ApOgotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTQKLQlwYWxpZ25yCSQxLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxLCAleG1tMSwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamIJTChzaF8xX2VuZF9ub19wcmVmZXRjaF9sb29wKQotCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tMQotCXBhbGlnbnIJJDEsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDEsICV4bW00LCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYWUJTChzaF8xX25vX3ByZWZldGNoX2xvb3ApCi0KLUwoc2hfMV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JYWRkCSVlY3gsICVlZGkKLQlhZGQJJWVkaSwgJWVkeAotCWxlYQkxKCVlZGksICVlYXgpLCAlZWF4Ci0JUE9QCSglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzIpOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmFwcwktMiglZWF4KSwgJXhtbTEKLSNlbHNlCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZhcHMJLTIoJWVheCksICV4bW0xCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQlqYiBMKHNoXzJfbm9fcHJlZmV0Y2gpCi0KLQlsZWEJLTY0KCVlY3gpLCAlZWN4Ci0KLQkucDJhbGlnbiA0Ci1MKFNobDJMb29wU3RhcnQpOgotCXByZWZldGNodDAgMHgxYzAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCi0JbW92YXBzCTE0KCVlYXgpLCAleG1tMgotCW1vdmFwcwkzMCglZWF4KSwgJXhtbTMKLQltb3ZhcHMJNDYoJWVheCksICV4bW00Ci0JbW92YXBzCTYyKCVlYXgpLCAleG1tNQotCW1vdmFwcwkleG1tNSwgJXhtbTcKLQlwYWxpZ25yCSQyLCAleG1tNCwgJXhtbTUKLQlwYWxpZ25yCSQyLCAleG1tMywgJXhtbTQKLQltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCi0JcGFsaWducgkkMiwgJXhtbTIsICV4bW0zCi0JbGVhCTY0KCVlYXgpLCAlZWF4Ci0JcGFsaWducgkkMiwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW00LCAzMiglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQltb3ZhcHMJJXhtbTcsICV4bW0xCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQlsZWEJNjQoJWVkeCksICVlZHgKLQlzdWIJJDY0LCAlZWN4Ci0JamEJTChTaGwyTG9vcFN0YXJ0KQotCi1MKFNobDJMb29wTGVhdmUpOgotCWFkZAkkMzIsICVlY3gKLQlqbGUJTChzaGxfZW5kXzApCi0KLQltb3ZhcHMJMTQoJWVheCksICV4bW0yCi0JbW92YXBzCTMwKCVlYXgpLCAleG1tMwotCXBhbGlnbnIJJDIsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDIsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAotCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAotCVBPUCAoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzJfbm9fcHJlZmV0Y2gpOgotCWxlYQktMzIoJWVjeCksICVlY3gKLQlsZWEJLTIoJWVheCksICVlYXgKLQl4b3IJJWVkaSwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChzaF8yX25vX3ByZWZldGNoX2xvb3ApOgotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTQKLQlwYWxpZ25yCSQyLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQyLCAleG1tMSwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamIJTChzaF8yX2VuZF9ub19wcmVmZXRjaF9sb29wKQotCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tMQotCXBhbGlnbnIJJDIsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDIsICV4bW00LCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYWUJTChzaF8yX25vX3ByZWZldGNoX2xvb3ApCi0KLUwoc2hfMl9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JYWRkCSVlY3gsICVlZGkKLQlhZGQJJWVkaSwgJWVkeAotCWxlYQkyKCVlZGksICVlYXgpLCAlZWF4Ci0JUE9QCSglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzMpOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmFwcwktMyglZWF4KSwgJXhtbTEKLSNlbHNlCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZhcHMJLTMoJWVheCksICV4bW0xCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQlqYiBMKHNoXzNfbm9fcHJlZmV0Y2gpCi0KLQlsZWEJLTY0KCVlY3gpLCAlZWN4Ci0KLQkucDJhbGlnbiA0Ci1MKFNobDNMb29wU3RhcnQpOgotCXByZWZldGNodDAgMHgxYzAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCi0JbW92YXBzCTEzKCVlYXgpLCAleG1tMgotCW1vdmFwcwkyOSglZWF4KSwgJXhtbTMKLQltb3ZhcHMJNDUoJWVheCksICV4bW00Ci0JbW92YXBzCTYxKCVlYXgpLCAleG1tNQotCW1vdmFwcwkleG1tNSwgJXhtbTcKLQlwYWxpZ25yCSQzLCAleG1tNCwgJXhtbTUKLQlwYWxpZ25yCSQzLCAleG1tMywgJXhtbTQKLQltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCi0JcGFsaWducgkkMywgJXhtbTIsICV4bW0zCi0JbGVhCTY0KCVlYXgpLCAlZWF4Ci0JcGFsaWducgkkMywgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW00LCAzMiglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQltb3ZhcHMJJXhtbTcsICV4bW0xCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQlsZWEJNjQoJWVkeCksICVlZHgKLQlzdWIJJDY0LCAlZWN4Ci0JamEJTChTaGwzTG9vcFN0YXJ0KQotCi1MKFNobDNMb29wTGVhdmUpOgotCWFkZAkkMzIsICVlY3gKLQlqbGUJTChzaGxfZW5kXzApCi0KLQltb3ZhcHMJMTMoJWVheCksICV4bW0yCi0JbW92YXBzCTI5KCVlYXgpLCAleG1tMwotCXBhbGlnbnIJJDMsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDMsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAotCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAotCVBPUCAoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzNfbm9fcHJlZmV0Y2gpOgotCWxlYQktMzIoJWVjeCksICVlY3gKLQlsZWEJLTMoJWVheCksICVlYXgKLQl4b3IJJWVkaSwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChzaF8zX25vX3ByZWZldGNoX2xvb3ApOgotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTQKLQlwYWxpZ25yCSQzLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQzLCAleG1tMSwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0KLQlqYglMKHNoXzNfZW5kX25vX3ByZWZldGNoX2xvb3ApCi0KLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW0xCi0JcGFsaWducgkkMywgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMywgJXhtbTQsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCi0JamFlCUwoc2hfM19ub19wcmVmZXRjaF9sb29wKQotCi1MKHNoXzNfZW5kX25vX3ByZWZldGNoX2xvb3ApOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWFkZAklZWN4LCAlZWRpCi0JYWRkCSVlZGksICVlZHgKLQlsZWEJMyglZWRpLCAlZWF4KSwgJWVheAotCVBPUAkoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF80KToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZhcHMJLTQoJWVheCksICV4bW0xCi0jZWxzZQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92YXBzCS00KCVlYXgpLCAleG1tMQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0JamIgTChzaF80X25vX3ByZWZldGNoKQotCi0JbGVhCS02NCglZWN4KSwgJWVjeAotCi0JLnAyYWxpZ24gNAotTChTaGw0TG9vcFN0YXJ0KToKLQlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDFjMCglZWR4KQotCW1vdmFwcwkxMiglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjgoJWVheCksICV4bW0zCi0JbW92YXBzCTQ0KCVlYXgpLCAleG1tNAotCW1vdmFwcwk2MCglZWF4KSwgJXhtbTUKLQltb3ZhcHMJJXhtbTUsICV4bW03Ci0JcGFsaWducgkkNCwgJXhtbTQsICV4bW01Ci0JcGFsaWducgkkNCwgJXhtbTMsICV4bW00Ci0JbW92YXBzCSV4bW01LCA0OCglZWR4KQotCXBhbGlnbnIJJDQsICV4bW0yLCAleG1tMwotCWxlYQk2NCglZWF4KSwgJWVheAotCXBhbGlnbnIJJDQsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbW92YXBzCSV4bW03LCAleG1tMQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbGVhCTY0KCVlZHgpLCAlZWR4Ci0Jc3ViCSQ2NCwgJWVjeAotCWphCUwoU2hsNExvb3BTdGFydCkKLQotTChTaGw0TG9vcExlYXZlKToKLQlhZGQJJDMyLCAlZWN4Ci0JamxlCUwoc2hsX2VuZF8wKQotCi0JbW92YXBzCTEyKCVlYXgpLCAleG1tMgotCW1vdmFwcwkyOCglZWF4KSwgJXhtbTMKLQlwYWxpZ25yCSQ0LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ0LCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKLQlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKLQlQT1AgKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaF80X25vX3ByZWZldGNoKToKLQlsZWEJLTMyKCVlY3gpLCAlZWN4Ci0JbGVhCS00KCVlYXgpLCAlZWF4Ci0JeG9yCSVlZGksICVlZGkKLQotCS5wMmFsaWduIDQKLUwoc2hfNF9ub19wcmVmZXRjaF9sb29wKToKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW00Ci0JcGFsaWducgkkNCwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkNCwgJXhtbTEsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCi0JamIJTChzaF80X2VuZF9ub19wcmVmZXRjaF9sb29wKQotCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tMQotCXBhbGlnbnIJJDQsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDQsICV4bW00LCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQotCWphZQlMKHNoXzRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotTChzaF80X2VuZF9ub19wcmVmZXRjaF9sb29wKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlhZGQJJWVjeCwgJWVkaQotCWFkZAklZWRpLCAlZWR4Ci0JbGVhCTQoJWVkaSwgJWVheCksICVlYXgKLQlQT1AJKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaGxfNSk6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92YXBzCS01KCVlYXgpLCAleG1tMQotI2Vsc2UKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmFwcwktNSglZWF4KSwgJXhtbTEKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCWpiIEwoc2hfNV9ub19wcmVmZXRjaCkKLQotCWxlYQktNjQoJWVjeCksICVlY3gKLQotCS5wMmFsaWduIDQKLUwoU2hsNUxvb3BTdGFydCk6Ci0JcHJlZmV0Y2h0MCAweDFjMCglZWF4KQotCXByZWZldGNodDAgMHgxYzAoJWVkeCkKLQltb3ZhcHMJMTEoJWVheCksICV4bW0yCi0JbW92YXBzCTI3KCVlYXgpLCAleG1tMwotCW1vdmFwcwk0MyglZWF4KSwgJXhtbTQKLQltb3ZhcHMJNTkoJWVheCksICV4bW01Ci0JbW92YXBzCSV4bW01LCAleG1tNwotCXBhbGlnbnIJJDUsICV4bW00LCAleG1tNQotCXBhbGlnbnIJJDUsICV4bW0zLCAleG1tNAotCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKLQlwYWxpZ25yCSQ1LCAleG1tMiwgJXhtbTMKLQlsZWEJNjQoJWVheCksICVlYXgKLQlwYWxpZ25yCSQ1LCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCW1vdmFwcwkleG1tNywgJXhtbTEKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCWxlYQk2NCglZWR4KSwgJWVkeAotCXN1YgkkNjQsICVlY3gKLQlqYQlMKFNobDVMb29wU3RhcnQpCi0KLUwoU2hsNUxvb3BMZWF2ZSk6Ci0JYWRkCSQzMiwgJWVjeAotCWpsZQlMKHNobF9lbmRfMCkKLQotCW1vdmFwcwkxMSglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjcoJWVheCksICV4bW0zCi0JcGFsaWducgkkNSwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkNSwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4Ci0JbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4Ci0JUE9QICglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hfNV9ub19wcmVmZXRjaCk6Ci0JbGVhCS0zMiglZWN4KSwgJWVjeAotCWxlYQktNSglZWF4KSwgJWVheAotCXhvcgklZWRpLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzVfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tNAotCXBhbGlnbnIJJDUsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDUsICV4bW0xLCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQotCWpiCUwoc2hfNV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTEKLQlwYWxpZ25yCSQ1LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ1LCAleG1tNCwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0KLQlqYWUJTChzaF81X25vX3ByZWZldGNoX2xvb3ApCi0KLUwoc2hfNV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JYWRkCSVlY3gsICVlZGkKLQlhZGQJJWVkaSwgJWVkeAotCWxlYQk1KCVlZGksICVlYXgpLCAlZWF4Ci0JUE9QCSglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzYpOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmFwcwktNiglZWF4KSwgJXhtbTEKLSNlbHNlCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZhcHMJLTYoJWVheCksICV4bW0xCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQlqYiBMKHNoXzZfbm9fcHJlZmV0Y2gpCi0KLQlsZWEJLTY0KCVlY3gpLCAlZWN4Ci0KLQkucDJhbGlnbiA0Ci1MKFNobDZMb29wU3RhcnQpOgotCXByZWZldGNodDAgMHgxYzAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCi0JbW92YXBzCTEwKCVlYXgpLCAleG1tMgotCW1vdmFwcwkyNiglZWF4KSwgJXhtbTMKLQltb3ZhcHMJNDIoJWVheCksICV4bW00Ci0JbW92YXBzCTU4KCVlYXgpLCAleG1tNQotCW1vdmFwcwkleG1tNSwgJXhtbTcKLQlwYWxpZ25yCSQ2LCAleG1tNCwgJXhtbTUKLQlwYWxpZ25yCSQ2LCAleG1tMywgJXhtbTQKLQltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCi0JcGFsaWducgkkNiwgJXhtbTIsICV4bW0zCi0JbGVhCTY0KCVlYXgpLCAlZWF4Ci0JcGFsaWducgkkNiwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW00LCAzMiglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQltb3ZhcHMJJXhtbTcsICV4bW0xCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQlsZWEJNjQoJWVkeCksICVlZHgKLQlzdWIJJDY0LCAlZWN4Ci0JamEJTChTaGw2TG9vcFN0YXJ0KQotCi1MKFNobDZMb29wTGVhdmUpOgotCWFkZAkkMzIsICVlY3gKLQlqbGUJTChzaGxfZW5kXzApCi0KLQltb3ZhcHMJMTAoJWVheCksICV4bW0yCi0JbW92YXBzCTI2KCVlYXgpLCAleG1tMwotCXBhbGlnbnIJJDYsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDYsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAotCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAotCVBPUCAoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzZfbm9fcHJlZmV0Y2gpOgotCWxlYQktMzIoJWVjeCksICVlY3gKLQlsZWEJLTYoJWVheCksICVlYXgKLQl4b3IJJWVkaSwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChzaF82X25vX3ByZWZldGNoX2xvb3ApOgotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTQKLQlwYWxpZ25yCSQ2LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ2LCAleG1tMSwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0KLQlqYglMKHNoXzZfZW5kX25vX3ByZWZldGNoX2xvb3ApCi0KLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW0xCi0JcGFsaWducgkkNiwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkNiwgJXhtbTQsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCi0JamFlCUwoc2hfNl9ub19wcmVmZXRjaF9sb29wKQotCi1MKHNoXzZfZW5kX25vX3ByZWZldGNoX2xvb3ApOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWFkZAklZWN4LCAlZWRpCi0JYWRkCSVlZGksICVlZHgKLQlsZWEJNiglZWRpLCAlZWF4KSwgJWVheAotCVBPUAkoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF83KToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZhcHMJLTcoJWVheCksICV4bW0xCi0jZWxzZQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92YXBzCS03KCVlYXgpLCAleG1tMQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0JamIgTChzaF83X25vX3ByZWZldGNoKQotCi0JbGVhCS02NCglZWN4KSwgJWVjeAotCi0JLnAyYWxpZ24gNAotTChTaGw3TG9vcFN0YXJ0KToKLQlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDFjMCglZWR4KQotCW1vdmFwcwk5KCVlYXgpLCAleG1tMgotCW1vdmFwcwkyNSglZWF4KSwgJXhtbTMKLQltb3ZhcHMJNDEoJWVheCksICV4bW00Ci0JbW92YXBzCTU3KCVlYXgpLCAleG1tNQotCW1vdmFwcwkleG1tNSwgJXhtbTcKLQlwYWxpZ25yCSQ3LCAleG1tNCwgJXhtbTUKLQlwYWxpZ25yCSQ3LCAleG1tMywgJXhtbTQKLQltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCi0JcGFsaWducgkkNywgJXhtbTIsICV4bW0zCi0JbGVhCTY0KCVlYXgpLCAlZWF4Ci0JcGFsaWducgkkNywgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW00LCAzMiglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQltb3ZhcHMJJXhtbTcsICV4bW0xCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQlsZWEJNjQoJWVkeCksICVlZHgKLQlzdWIJJDY0LCAlZWN4Ci0JamEJTChTaGw3TG9vcFN0YXJ0KQotCi1MKFNobDdMb29wTGVhdmUpOgotCWFkZAkkMzIsICVlY3gKLQlqbGUJTChzaGxfZW5kXzApCi0KLQltb3ZhcHMJOSglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjUoJWVheCksICV4bW0zCi0JcGFsaWducgkkNywgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkNywgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4Ci0JbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4Ci0JUE9QICglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hfN19ub19wcmVmZXRjaCk6Ci0JbGVhCS0zMiglZWN4KSwgJWVjeAotCWxlYQktNyglZWF4KSwgJWVheAotCXhvcgklZWRpLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzdfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tNAotCXBhbGlnbnIJJDcsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDcsICV4bW0xLCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYglMKHNoXzdfZW5kX25vX3ByZWZldGNoX2xvb3ApCi0KLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW0xCi0JcGFsaWducgkkNywgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkNywgJXhtbTQsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWphZQlMKHNoXzdfbm9fcHJlZmV0Y2hfbG9vcCkKLQotTChzaF83X2VuZF9ub19wcmVmZXRjaF9sb29wKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlhZGQJJWVjeCwgJWVkaQotCWFkZAklZWRpLCAlZWR4Ci0JbGVhCTcoJWVkaSwgJWVheCksICVlYXgKLQlQT1AJKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaGxfOCk6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92YXBzCS04KCVlYXgpLCAleG1tMQotI2Vsc2UKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmFwcwktOCglZWF4KSwgJXhtbTEKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCWpiIEwoc2hfOF9ub19wcmVmZXRjaCkKLQotCWxlYQktNjQoJWVjeCksICVlY3gKLQotCS5wMmFsaWduIDQKLUwoU2hsOExvb3BTdGFydCk6Ci0JcHJlZmV0Y2h0MCAweDFjMCglZWF4KQotCXByZWZldGNodDAgMHgxYzAoJWVkeCkKLQltb3ZhcHMJOCglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjQoJWVheCksICV4bW0zCi0JbW92YXBzCTQwKCVlYXgpLCAleG1tNAotCW1vdmFwcwk1NiglZWF4KSwgJXhtbTUKLQltb3ZhcHMJJXhtbTUsICV4bW03Ci0JcGFsaWducgkkOCwgJXhtbTQsICV4bW01Ci0JcGFsaWducgkkOCwgJXhtbTMsICV4bW00Ci0JbW92YXBzCSV4bW01LCA0OCglZWR4KQotCXBhbGlnbnIJJDgsICV4bW0yLCAleG1tMwotCWxlYQk2NCglZWF4KSwgJWVheAotCXBhbGlnbnIJJDgsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbW92YXBzCSV4bW03LCAleG1tMQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbGVhCTY0KCVlZHgpLCAlZWR4Ci0Jc3ViCSQ2NCwgJWVjeAotCWphCUwoU2hsOExvb3BTdGFydCkKLQotTChMb29wTGVhdmU4KToKLQlhZGQJJDMyLCAlZWN4Ci0JamxlCUwoc2hsX2VuZF8wKQotCi0JbW92YXBzCTgoJWVheCksICV4bW0yCi0JbW92YXBzCTI0KCVlYXgpLCAleG1tMwotCXBhbGlnbnIJJDgsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDgsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAotCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAotCVBPUCAoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzhfbm9fcHJlZmV0Y2gpOgotCWxlYQktMzIoJWVjeCksICVlY3gKLQlsZWEJLTgoJWVheCksICVlYXgKLQl4b3IJJWVkaSwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChzaF84X25vX3ByZWZldGNoX2xvb3ApOgotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTQKLQlwYWxpZ25yCSQ4LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ4LCAleG1tMSwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamIJTChzaF84X2VuZF9ub19wcmVmZXRjaF9sb29wKQotCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tMQotCXBhbGlnbnIJJDgsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDgsICV4bW00LCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYWUJTChzaF84X25vX3ByZWZldGNoX2xvb3ApCi0KLUwoc2hfOF9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JYWRkCSVlY3gsICVlZGkKLQlhZGQJJWVkaSwgJWVkeAotCWxlYQk4KCVlZGksICVlYXgpLCAlZWF4Ci0JUE9QCSglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzkpOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmFwcwktOSglZWF4KSwgJXhtbTEKLSNlbHNlCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZhcHMJLTkoJWVheCksICV4bW0xCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQlqYiBMKHNoXzlfbm9fcHJlZmV0Y2gpCi0KLQlsZWEJLTY0KCVlY3gpLCAlZWN4Ci0KLQkucDJhbGlnbiA0Ci1MKFNobDlMb29wU3RhcnQpOgotCXByZWZldGNodDAgMHgxYzAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCi0JbW92YXBzCTcoJWVheCksICV4bW0yCi0JbW92YXBzCTIzKCVlYXgpLCAleG1tMwotCW1vdmFwcwkzOSglZWF4KSwgJXhtbTQKLQltb3ZhcHMJNTUoJWVheCksICV4bW01Ci0JbW92YXBzCSV4bW01LCAleG1tNwotCXBhbGlnbnIJJDksICV4bW00LCAleG1tNQotCXBhbGlnbnIJJDksICV4bW0zLCAleG1tNAotCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKLQlwYWxpZ25yCSQ5LCAleG1tMiwgJXhtbTMKLQlsZWEJNjQoJWVheCksICVlYXgKLQlwYWxpZ25yCSQ5LCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCW1vdmFwcwkleG1tNywgJXhtbTEKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCWxlYQk2NCglZWR4KSwgJWVkeAotCXN1YgkkNjQsICVlY3gKLQlqYQlMKFNobDlMb29wU3RhcnQpCi0KLUwoU2hsOUxvb3BMZWF2ZSk6Ci0JYWRkCSQzMiwgJWVjeAotCWpsZQlMKHNobF9lbmRfMCkKLQotCW1vdmFwcwk3KCVlYXgpLCAleG1tMgotCW1vdmFwcwkyMyglZWF4KSwgJXhtbTMKLQlwYWxpZ25yCSQ5LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ5LCAleG1tMSwgJXhtbTIKLQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAotCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAotCVBPUCAoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzlfbm9fcHJlZmV0Y2gpOgotCWxlYQktMzIoJWVjeCksICVlY3gKLQlsZWEJLTkoJWVheCksICVlYXgKLQl4b3IJJWVkaSwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChzaF85X25vX3ByZWZldGNoX2xvb3ApOgotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTQKLQlwYWxpZ25yCSQ5LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ5LCAleG1tMSwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamIJTChzaF85X2VuZF9ub19wcmVmZXRjaF9sb29wKQotCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tMQotCXBhbGlnbnIJJDksICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDksICV4bW00LCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYWUJTChzaF85X25vX3ByZWZldGNoX2xvb3ApCi0KLUwoc2hfOV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JYWRkCSVlY3gsICVlZGkKLQlhZGQJJWVkaSwgJWVkeAotCWxlYQk5KCVlZGksICVlYXgpLCAlZWF4Ci0JUE9QCSglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzEwKToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZhcHMJLTEwKCVlYXgpLCAleG1tMQotI2Vsc2UKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmFwcwktMTAoJWVheCksICV4bW0xCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQlqYiBMKHNoXzEwX25vX3ByZWZldGNoKQotCi0JbGVhCS02NCglZWN4KSwgJWVjeAotCi0JLnAyYWxpZ24gNAotTChTaGwxMExvb3BTdGFydCk6Ci0JcHJlZmV0Y2h0MCAweDFjMCglZWF4KQotCXByZWZldGNodDAgMHgxYzAoJWVkeCkKLQltb3ZhcHMJNiglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjIoJWVheCksICV4bW0zCi0JbW92YXBzCTM4KCVlYXgpLCAleG1tNAotCW1vdmFwcwk1NCglZWF4KSwgJXhtbTUKLQltb3ZhcHMJJXhtbTUsICV4bW03Ci0JcGFsaWducgkkMTAsICV4bW00LCAleG1tNQotCXBhbGlnbnIJJDEwLCAleG1tMywgJXhtbTQKLQltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCi0JcGFsaWducgkkMTAsICV4bW0yLCAleG1tMwotCWxlYQk2NCglZWF4KSwgJWVheAotCXBhbGlnbnIJJDEwLCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCW1vdmFwcwkleG1tNywgJXhtbTEKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCWxlYQk2NCglZWR4KSwgJWVkeAotCXN1YgkkNjQsICVlY3gKLQlqYQlMKFNobDEwTG9vcFN0YXJ0KQotCi1MKFNobDEwTG9vcExlYXZlKToKLQlhZGQJJDMyLCAlZWN4Ci0JamxlCUwoc2hsX2VuZF8wKQotCi0JbW92YXBzCTYoJWVheCksICV4bW0yCi0JbW92YXBzCTIyKCVlYXgpLCAleG1tMwotCXBhbGlnbnIJJDEwLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxMCwgJXhtbTEsICV4bW0yCi0KLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKLQlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKLQlQT1AgKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaF8xMF9ub19wcmVmZXRjaCk6Ci0JbGVhCS0zMiglZWN4KSwgJWVjeAotCWxlYQktMTAoJWVheCksICVlYXgKLQl4b3IJJWVkaSwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChzaF8xMF9ub19wcmVmZXRjaF9sb29wKToKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW00Ci0JcGFsaWducgkkMTAsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDEwLCAleG1tMSwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamIJTChzaF8xMF9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTEKLQlwYWxpZ25yCSQxMCwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTAsICV4bW00LCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYWUJTChzaF8xMF9ub19wcmVmZXRjaF9sb29wKQotCi1MKHNoXzEwX2VuZF9ub19wcmVmZXRjaF9sb29wKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlhZGQJJWVjeCwgJWVkaQotCWFkZAklZWRpLCAlZWR4Ci0JbGVhCTEwKCVlZGksICVlYXgpLCAlZWF4Ci0JUE9QCSglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzExKToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZhcHMJLTExKCVlYXgpLCAleG1tMQotI2Vsc2UKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmFwcwktMTEoJWVheCksICV4bW0xCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQlqYiBMKHNoXzExX25vX3ByZWZldGNoKQotCi0JbGVhCS02NCglZWN4KSwgJWVjeAotCi0JLnAyYWxpZ24gNAotTChTaGwxMUxvb3BTdGFydCk6Ci0JcHJlZmV0Y2h0MCAweDFjMCglZWF4KQotCXByZWZldGNodDAgMHgxYzAoJWVkeCkKLQltb3ZhcHMJNSglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjEoJWVheCksICV4bW0zCi0JbW92YXBzCTM3KCVlYXgpLCAleG1tNAotCW1vdmFwcwk1MyglZWF4KSwgJXhtbTUKLQltb3ZhcHMJJXhtbTUsICV4bW03Ci0JcGFsaWducgkkMTEsICV4bW00LCAleG1tNQotCXBhbGlnbnIJJDExLCAleG1tMywgJXhtbTQKLQltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCi0JcGFsaWducgkkMTEsICV4bW0yLCAleG1tMwotCWxlYQk2NCglZWF4KSwgJWVheAotCXBhbGlnbnIJJDExLCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCW1vdmFwcwkleG1tNywgJXhtbTEKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCWxlYQk2NCglZWR4KSwgJWVkeAotCXN1YgkkNjQsICVlY3gKLQlqYQlMKFNobDExTG9vcFN0YXJ0KQotCi1MKFNobDExTG9vcExlYXZlKToKLQlhZGQJJDMyLCAlZWN4Ci0JamxlCUwoc2hsX2VuZF8wKQotCi0JbW92YXBzCTUoJWVheCksICV4bW0yCi0JbW92YXBzCTIxKCVlYXgpLCAleG1tMwotCXBhbGlnbnIJJDExLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxMSwgJXhtbTEsICV4bW0yCi0KLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKLQlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKLQlQT1AgKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaF8xMV9ub19wcmVmZXRjaCk6Ci0JbGVhCS0zMiglZWN4KSwgJWVjeAotCWxlYQktMTEoJWVheCksICVlYXgKLQl4b3IJJWVkaSwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChzaF8xMV9ub19wcmVmZXRjaF9sb29wKToKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW00Ci0JcGFsaWducgkkMTEsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDExLCAleG1tMSwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamIJTChzaF8xMV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTEKLQlwYWxpZ25yCSQxMSwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTEsICV4bW00LCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYWUJTChzaF8xMV9ub19wcmVmZXRjaF9sb29wKQotCi1MKHNoXzExX2VuZF9ub19wcmVmZXRjaF9sb29wKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlhZGQJJWVjeCwgJWVkaQotCWFkZAklZWRpLCAlZWR4Ci0JbGVhCTExKCVlZGksICVlYXgpLCAlZWF4Ci0JUE9QCSglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzEyKToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZhcHMJLTEyKCVlYXgpLCAleG1tMQotI2Vsc2UKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmFwcwktMTIoJWVheCksICV4bW0xCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQlqYiBMKHNoXzEyX25vX3ByZWZldGNoKQotCi0JbGVhCS02NCglZWN4KSwgJWVjeAotCi0JLnAyYWxpZ24gNAotTChTaGwxMkxvb3BTdGFydCk6Ci0JcHJlZmV0Y2h0MCAweDFjMCglZWF4KQotCXByZWZldGNodDAgMHgxYzAoJWVkeCkKLQltb3ZhcHMJNCglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjAoJWVheCksICV4bW0zCi0JbW92YXBzCTM2KCVlYXgpLCAleG1tNAotCW1vdmFwcwk1MiglZWF4KSwgJXhtbTUKLQltb3ZhcHMJJXhtbTUsICV4bW03Ci0JcGFsaWducgkkMTIsICV4bW00LCAleG1tNQotCXBhbGlnbnIJJDEyLCAleG1tMywgJXhtbTQKLQltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCi0JcGFsaWducgkkMTIsICV4bW0yLCAleG1tMwotCWxlYQk2NCglZWF4KSwgJWVheAotCXBhbGlnbnIJJDEyLCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCW1vdmFwcwkleG1tNywgJXhtbTEKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCWxlYQk2NCglZWR4KSwgJWVkeAotCXN1YgkkNjQsICVlY3gKLQlqYQlMKFNobDEyTG9vcFN0YXJ0KQotCi1MKFNobDEyTG9vcExlYXZlKToKLQlhZGQJJDMyLCAlZWN4Ci0JamxlCUwoc2hsX2VuZF8wKQotCi0JbW92YXBzCTQoJWVheCksICV4bW0yCi0JbW92YXBzCTIwKCVlYXgpLCAleG1tMwotCXBhbGlnbnIJJDEyLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxMiwgJXhtbTEsICV4bW0yCi0KLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKLQlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKLQlQT1AgKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaF8xMl9ub19wcmVmZXRjaCk6Ci0JbGVhCS0zMiglZWN4KSwgJWVjeAotCWxlYQktMTIoJWVheCksICVlYXgKLQl4b3IJJWVkaSwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChzaF8xMl9ub19wcmVmZXRjaF9sb29wKToKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW00Ci0JcGFsaWducgkkMTIsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDEyLCAleG1tMSwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamIJTChzaF8xMl9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTEKLQlwYWxpZ25yCSQxMiwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTIsICV4bW00LCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYWUJTChzaF8xMl9ub19wcmVmZXRjaF9sb29wKQotCi1MKHNoXzEyX2VuZF9ub19wcmVmZXRjaF9sb29wKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlhZGQJJWVjeCwgJWVkaQotCWFkZAklZWRpLCAlZWR4Ci0JbGVhCTEyKCVlZGksICVlYXgpLCAlZWF4Ci0JUE9QCSglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzEzKToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZhcHMJLTEzKCVlYXgpLCAleG1tMQotI2Vsc2UKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmFwcwktMTMoJWVheCksICV4bW0xCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQlqYiBMKHNoXzEzX25vX3ByZWZldGNoKQotCi0JbGVhCS02NCglZWN4KSwgJWVjeAotCi0JLnAyYWxpZ24gNAotTChTaGwxM0xvb3BTdGFydCk6Ci0JcHJlZmV0Y2h0MCAweDFjMCglZWF4KQotCXByZWZldGNodDAgMHgxYzAoJWVkeCkKLQltb3ZhcHMJMyglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMTkoJWVheCksICV4bW0zCi0JbW92YXBzCTM1KCVlYXgpLCAleG1tNAotCW1vdmFwcwk1MSglZWF4KSwgJXhtbTUKLQltb3ZhcHMJJXhtbTUsICV4bW03Ci0JcGFsaWducgkkMTMsICV4bW00LCAleG1tNQotCXBhbGlnbnIJJDEzLCAleG1tMywgJXhtbTQKLQltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCi0JcGFsaWducgkkMTMsICV4bW0yLCAleG1tMwotCWxlYQk2NCglZWF4KSwgJWVheAotCXBhbGlnbnIJJDEzLCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCW1vdmFwcwkleG1tNywgJXhtbTEKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCWxlYQk2NCglZWR4KSwgJWVkeAotCXN1YgkkNjQsICVlY3gKLQlqYQlMKFNobDEzTG9vcFN0YXJ0KQotCi1MKFNobDEzTG9vcExlYXZlKToKLQlhZGQJJDMyLCAlZWN4Ci0JamxlCUwoc2hsX2VuZF8wKQotCi0JbW92YXBzCTMoJWVheCksICV4bW0yCi0JbW92YXBzCTE5KCVlYXgpLCAleG1tMwotCXBhbGlnbnIJJDEzLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxMywgJXhtbTEsICV4bW0yCi0KLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKLQlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKLQlQT1AgKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaF8xM19ub19wcmVmZXRjaCk6Ci0JbGVhCS0zMiglZWN4KSwgJWVjeAotCWxlYQktMTMoJWVheCksICVlYXgKLQl4b3IJJWVkaSwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChzaF8xM19ub19wcmVmZXRjaF9sb29wKToKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW00Ci0JcGFsaWducgkkMTMsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDEzLCAleG1tMSwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamIJTChzaF8xM19lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTEKLQlwYWxpZ25yCSQxMywgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTMsICV4bW00LCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYWUJTChzaF8xM19ub19wcmVmZXRjaF9sb29wKQotCi1MKHNoXzEzX2VuZF9ub19wcmVmZXRjaF9sb29wKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlhZGQJJWVjeCwgJWVkaQotCWFkZAklZWRpLCAlZWR4Ci0JbGVhCTEzKCVlZGksICVlYXgpLCAlZWF4Ci0JUE9QCSglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzE0KToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZhcHMJLTE0KCVlYXgpLCAleG1tMQotI2Vsc2UKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmFwcwktMTQoJWVheCksICV4bW0xCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQlqYiBMKHNoXzE0X25vX3ByZWZldGNoKQotCi0JbGVhCS02NCglZWN4KSwgJWVjeAotCi0JLnAyYWxpZ24gNAotTChTaGwxNExvb3BTdGFydCk6Ci0JcHJlZmV0Y2h0MCAweDFjMCglZWF4KQotCXByZWZldGNodDAgMHgxYzAoJWVkeCkKLQltb3ZhcHMJMiglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMTgoJWVheCksICV4bW0zCi0JbW92YXBzCTM0KCVlYXgpLCAleG1tNAotCW1vdmFwcwk1MCglZWF4KSwgJXhtbTUKLQltb3ZhcHMJJXhtbTUsICV4bW03Ci0JcGFsaWducgkkMTQsICV4bW00LCAleG1tNQotCXBhbGlnbnIJJDE0LCAleG1tMywgJXhtbTQKLQltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCi0JcGFsaWducgkkMTQsICV4bW0yLCAleG1tMwotCWxlYQk2NCglZWF4KSwgJWVheAotCXBhbGlnbnIJJDE0LCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCW1vdmFwcwkleG1tNywgJXhtbTEKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCWxlYQk2NCglZWR4KSwgJWVkeAotCXN1YgkkNjQsICVlY3gKLQlqYQlMKFNobDE0TG9vcFN0YXJ0KQotCi1MKFNobDE0TG9vcExlYXZlKToKLQlhZGQJJDMyLCAlZWN4Ci0JamxlCUwoc2hsX2VuZF8wKQotCi0JbW92YXBzCTIoJWVheCksICV4bW0yCi0JbW92YXBzCTE4KCVlYXgpLCAleG1tMwotCXBhbGlnbnIJJDE0LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxNCwgJXhtbTEsICV4bW0yCi0KLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKLQlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKLQlQT1AgKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaF8xNF9ub19wcmVmZXRjaCk6Ci0JbGVhCS0zMiglZWN4KSwgJWVjeAotCWxlYQktMTQoJWVheCksICVlYXgKLQl4b3IJJWVkaSwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChzaF8xNF9ub19wcmVmZXRjaF9sb29wKToKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW00Ci0JcGFsaWducgkkMTQsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDE0LCAleG1tMSwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamIJTChzaF8xNF9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTEKLQlwYWxpZ25yCSQxNCwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTQsICV4bW00LCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYWUJTChzaF8xNF9ub19wcmVmZXRjaF9sb29wKQotCi1MKHNoXzE0X2VuZF9ub19wcmVmZXRjaF9sb29wKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlhZGQJJWVjeCwgJWVkaQotCWFkZAklZWRpLCAlZWR4Ci0JbGVhCTE0KCVlZGksICVlYXgpLCAlZWF4Ci0JUE9QCSglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzE1KToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZhcHMJLTE1KCVlYXgpLCAleG1tMQotI2Vsc2UKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmFwcwktMTUoJWVheCksICV4bW0xCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQlqYiBMKHNoXzE1X25vX3ByZWZldGNoKQotCi0JbGVhCS02NCglZWN4KSwgJWVjeAotCi0JLnAyYWxpZ24gNAotTChTaGwxNUxvb3BTdGFydCk6Ci0JcHJlZmV0Y2h0MCAweDFjMCglZWF4KQotCXByZWZldGNodDAgMHgxYzAoJWVkeCkKLQltb3ZhcHMJMSglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMTcoJWVheCksICV4bW0zCi0JbW92YXBzCTMzKCVlYXgpLCAleG1tNAotCW1vdmFwcwk0OSglZWF4KSwgJXhtbTUKLQltb3ZhcHMJJXhtbTUsICV4bW03Ci0JcGFsaWducgkkMTUsICV4bW00LCAleG1tNQotCXBhbGlnbnIJJDE1LCAleG1tMywgJXhtbTQKLQltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCi0JcGFsaWducgkkMTUsICV4bW0yLCAleG1tMwotCWxlYQk2NCglZWF4KSwgJWVheAotCXBhbGlnbnIJJDE1LCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCW1vdmFwcwkleG1tNywgJXhtbTEKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCWxlYQk2NCglZWR4KSwgJWVkeAotCXN1YgkkNjQsICVlY3gKLQlqYQlMKFNobDE1TG9vcFN0YXJ0KQotCi1MKFNobDE1TG9vcExlYXZlKToKLQlhZGQJJDMyLCAlZWN4Ci0JamxlCUwoc2hsX2VuZF8wKQotCi0JbW92YXBzCTEoJWVheCksICV4bW0yCi0JbW92YXBzCTE3KCVlYXgpLCAleG1tMwotCXBhbGlnbnIJJDE1LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxNSwgJXhtbTEsICV4bW0yCi0KLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKLQlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKLQlQT1AgKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaF8xNV9ub19wcmVmZXRjaCk6Ci0JbGVhCS0zMiglZWN4KSwgJWVjeAotCWxlYQktMTUoJWVheCksICVlYXgKLQl4b3IJJWVkaSwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChzaF8xNV9ub19wcmVmZXRjaF9sb29wKToKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW00Ci0JcGFsaWducgkkMTUsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDE1LCAleG1tMSwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamIJTChzaF8xNV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTEKLQlwYWxpZ25yCSQxNSwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTUsICV4bW00LCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYWUJTChzaF8xNV9ub19wcmVmZXRjaF9sb29wKQotCi1MKHNoXzE1X2VuZF9ub19wcmVmZXRjaF9sb29wKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlhZGQJJWVjeCwgJWVkaQotCWFkZAklZWRpLCAlZWR4Ci0JbGVhCTE1KCVlZGksICVlYXgpLCAlZWF4Ci0JUE9QCSglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hsX2VuZF8wKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlsZWEJKCVlZHgsICVlY3gpLCAlZWR4Ci0JbGVhCSglZWF4LCAlZWN4KSwgJWVheAotCVBPUAkoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNDRieXRlcyk6Ci0JbW92cQktNDQoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTQ0KCVlZHgpCi1MKGZ3ZF93cml0ZV8zNmJ5dGVzKToKLQltb3ZxCS0zNiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMzYoJWVkeCkKLUwoZndkX3dyaXRlXzI4Ynl0ZXMpOgotCW1vdnEJLTI4KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0yOCglZWR4KQotTChmd2Rfd3JpdGVfMjBieXRlcyk6Ci0JbW92cQktMjAoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTIwKCVlZHgpCi1MKGZ3ZF93cml0ZV8xMmJ5dGVzKToKLQltb3ZxCS0xMiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTIoJWVkeCkKLUwoZndkX3dyaXRlXzRieXRlcyk6Ci0JbW92bAktNCglZWF4KSwgJWVjeAotCW1vdmwJJWVjeCwgLTQoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNDBieXRlcyk6Ci0JbW92cQktNDAoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTQwKCVlZHgpCi1MKGZ3ZF93cml0ZV8zMmJ5dGVzKToKLQltb3ZxCS0zMiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMzIoJWVkeCkKLUwoZndkX3dyaXRlXzI0Ynl0ZXMpOgotCW1vdnEJLTI0KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0yNCglZWR4KQotTChmd2Rfd3JpdGVfMTZieXRlcyk6Ci0JbW92cQktMTYoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTE2KCVlZHgpCi1MKGZ3ZF93cml0ZV84Ynl0ZXMpOgotCW1vdnEJLTgoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTgoJWVkeCkKLUwoZndkX3dyaXRlXzBieXRlcyk6Ci0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzVieXRlcyk6Ci0JbW92bAktNSglZWF4KSwgJWVjeAotCW1vdmwJLTQoJWVheCksICVlYXgKLQltb3ZsCSVlY3gsIC01KCVlZHgpCi0JbW92bAklZWF4LCAtNCglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV80NWJ5dGVzKToKLQltb3ZxCS00NSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtNDUoJWVkeCkKLUwoZndkX3dyaXRlXzM3Ynl0ZXMpOgotCW1vdnEJLTM3KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0zNyglZWR4KQotTChmd2Rfd3JpdGVfMjlieXRlcyk6Ci0JbW92cQktMjkoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTI5KCVlZHgpCi1MKGZ3ZF93cml0ZV8yMWJ5dGVzKToKLQltb3ZxCS0yMSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMjEoJWVkeCkKLUwoZndkX3dyaXRlXzEzYnl0ZXMpOgotCW1vdnEJLTEzKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xMyglZWR4KQotCW1vdmwJLTUoJWVheCksICVlY3gKLQltb3ZsCSVlY3gsIC01KCVlZHgpCi0JbW92emJsCS0xKCVlYXgpLCAlZWN4Ci0JbW92YgklY2wsIC0xKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzQxYnl0ZXMpOgotCW1vdnEJLTQxKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC00MSglZWR4KQotTChmd2Rfd3JpdGVfMzNieXRlcyk6Ci0JbW92cQktMzMoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTMzKCVlZHgpCi1MKGZ3ZF93cml0ZV8yNWJ5dGVzKToKLQltb3ZxCS0yNSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMjUoJWVkeCkKLUwoZndkX3dyaXRlXzE3Ynl0ZXMpOgotCW1vdnEJLTE3KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xNyglZWR4KQotTChmd2Rfd3JpdGVfOWJ5dGVzKToKLQltb3ZxCS05KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC05KCVlZHgpCi1MKGZ3ZF93cml0ZV8xYnl0ZXMpOgotCW1vdnpibAktMSglZWF4KSwgJWVjeAotCW1vdmIJJWNsLCAtMSglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV80NmJ5dGVzKToKLQltb3ZxCS00NiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtNDYoJWVkeCkKLUwoZndkX3dyaXRlXzM4Ynl0ZXMpOgotCW1vdnEJLTM4KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0zOCglZWR4KQotTChmd2Rfd3JpdGVfMzBieXRlcyk6Ci0JbW92cQktMzAoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTMwKCVlZHgpCi1MKGZ3ZF93cml0ZV8yMmJ5dGVzKToKLQltb3ZxCS0yMiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMjIoJWVkeCkKLUwoZndkX3dyaXRlXzE0Ynl0ZXMpOgotCW1vdnEJLTE0KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xNCglZWR4KQotTChmd2Rfd3JpdGVfNmJ5dGVzKToKLQltb3ZsCS02KCVlYXgpLCAlZWN4Ci0JbW92bAklZWN4LCAtNiglZWR4KQotCW1vdnp3bAktMiglZWF4KSwgJWVjeAotCW1vdncJJWN4LCAtMiglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV80MmJ5dGVzKToKLQltb3ZxCS00MiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtNDIoJWVkeCkKLUwoZndkX3dyaXRlXzM0Ynl0ZXMpOgotCW1vdnEJLTM0KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0zNCglZWR4KQotTChmd2Rfd3JpdGVfMjZieXRlcyk6Ci0JbW92cQktMjYoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTI2KCVlZHgpCi1MKGZ3ZF93cml0ZV8xOGJ5dGVzKToKLQltb3ZxCS0xOCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTgoJWVkeCkKLUwoZndkX3dyaXRlXzEwYnl0ZXMpOgotCW1vdnEJLTEwKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xMCglZWR4KQotTChmd2Rfd3JpdGVfMmJ5dGVzKToKLQltb3Z6d2wJLTIoJWVheCksICVlY3gKLQltb3Z3CSVjeCwgLTIoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNDdieXRlcyk6Ci0JbW92cQktNDcoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTQ3KCVlZHgpCi1MKGZ3ZF93cml0ZV8zOWJ5dGVzKToKLQltb3ZxCS0zOSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMzkoJWVkeCkKLUwoZndkX3dyaXRlXzMxYnl0ZXMpOgotCW1vdnEJLTMxKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0zMSglZWR4KQotTChmd2Rfd3JpdGVfMjNieXRlcyk6Ci0JbW92cQktMjMoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTIzKCVlZHgpCi1MKGZ3ZF93cml0ZV8xNWJ5dGVzKToKLQltb3ZxCS0xNSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTUoJWVkeCkKLUwoZndkX3dyaXRlXzdieXRlcyk6Ci0JbW92bAktNyglZWF4KSwgJWVjeAotCW1vdmwJJWVjeCwgLTcoJWVkeCkKLQltb3Z6d2wJLTMoJWVheCksICVlY3gKLQltb3Z6YmwJLTEoJWVheCksICVlYXgKLQltb3Z3CSVjeCwgLTMoJWVkeCkKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNDNieXRlcyk6Ci0JbW92cQktNDMoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTQzKCVlZHgpCi1MKGZ3ZF93cml0ZV8zNWJ5dGVzKToKLQltb3ZxCS0zNSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMzUoJWVkeCkKLUwoZndkX3dyaXRlXzI3Ynl0ZXMpOgotCW1vdnEJLTI3KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0yNyglZWR4KQotTChmd2Rfd3JpdGVfMTlieXRlcyk6Ci0JbW92cQktMTkoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTE5KCVlZHgpCi1MKGZ3ZF93cml0ZV8xMWJ5dGVzKToKLQltb3ZxCS0xMSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTEoJWVkeCkKLUwoZndkX3dyaXRlXzNieXRlcyk6Ci0JbW92endsCS0zKCVlYXgpLCAlZWN4Ci0JbW92emJsCS0xKCVlYXgpLCAlZWF4Ci0JbW92dwklY3gsIC0zKCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzQwYnl0ZXNfYWxpZ24pOgotCW1vdmRxYQktNDAoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtNDAoJWVkeCkKLUwoZndkX3dyaXRlXzI0Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMjQoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMjQoJWVkeCkKLUwoZndkX3dyaXRlXzhieXRlc19hbGlnbik6Ci0JbW92cQktOCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtOCglZWR4KQotTChmd2Rfd3JpdGVfMGJ5dGVzX2FsaWduKToKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfMzJieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0zMiglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0zMiglZWR4KQotTChmd2Rfd3JpdGVfMTZieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0xNiglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0xNiglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV81Ynl0ZXNfYWxpZ24pOgotCW1vdmwJLTUoJWVheCksICVlY3gKLQltb3ZsCS00KCVlYXgpLCAlZWF4Ci0JbW92bAklZWN4LCAtNSglZWR4KQotCW1vdmwJJWVheCwgLTQoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNDVieXRlc19hbGlnbik6Ci0JbW92ZHFhCS00NSglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC00NSglZWR4KQotTChmd2Rfd3JpdGVfMjlieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0yOSglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0yOSglZWR4KQotTChmd2Rfd3JpdGVfMTNieXRlc19hbGlnbik6Ci0JbW92cQktMTMoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTEzKCVlZHgpCi0JbW92bAktNSglZWF4KSwgJWVjeAotCW1vdmwJJWVjeCwgLTUoJWVkeCkKLQltb3Z6YmwJLTEoJWVheCksICVlY3gKLQltb3ZiCSVjbCwgLTEoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfMzdieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0zNyglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0zNyglZWR4KQotTChmd2Rfd3JpdGVfMjFieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0yMSglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0yMSglZWR4KQotCW1vdmwJLTUoJWVheCksICVlY3gKLQltb3ZsCSVlY3gsIC01KCVlZHgpCi0JbW92emJsCS0xKCVlYXgpLCAlZWN4Ci0JbW92YgklY2wsIC0xKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzQxYnl0ZXNfYWxpZ24pOgotCW1vdmRxYQktNDEoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtNDEoJWVkeCkKLUwoZndkX3dyaXRlXzI1Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMjUoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMjUoJWVkeCkKLUwoZndkX3dyaXRlXzlieXRlc19hbGlnbik6Ci0JbW92cQktOSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtOSglZWR4KQotTChmd2Rfd3JpdGVfMWJ5dGVzX2FsaWduKToKLQltb3Z6YmwJLTEoJWVheCksICVlY3gKLQltb3ZiCSVjbCwgLTEoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfMzNieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0zMyglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0zMyglZWR4KQotTChmd2Rfd3JpdGVfMTdieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0xNyglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0xNyglZWR4KQotCW1vdnpibAktMSglZWF4KSwgJWVjeAotCW1vdmIJJWNsLCAtMSglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV80NmJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTQ2KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTQ2KCVlZHgpCi1MKGZ3ZF93cml0ZV8zMGJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTMwKCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTMwKCVlZHgpCi1MKGZ3ZF93cml0ZV8xNGJ5dGVzX2FsaWduKToKLQltb3ZxCS0xNCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTQoJWVkeCkKLUwoZndkX3dyaXRlXzZieXRlc19hbGlnbik6Ci0JbW92bAktNiglZWF4KSwgJWVjeAotCW1vdmwJJWVjeCwgLTYoJWVkeCkKLQltb3Z6d2wJLTIoJWVheCksICVlY3gKLQltb3Z3CSVjeCwgLTIoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfMzhieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0zOCglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0zOCglZWR4KQotTChmd2Rfd3JpdGVfMjJieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0yMiglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0yMiglZWR4KQotCW1vdmwJLTYoJWVheCksICVlY3gKLQltb3ZsCSVlY3gsIC02KCVlZHgpCi0JbW92endsCS0yKCVlYXgpLCAlZWN4Ci0JbW92dwklY3gsIC0yKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzQyYnl0ZXNfYWxpZ24pOgotCW1vdmRxYQktNDIoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtNDIoJWVkeCkKLUwoZndkX3dyaXRlXzI2Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMjYoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMjYoJWVkeCkKLUwoZndkX3dyaXRlXzEwYnl0ZXNfYWxpZ24pOgotCW1vdnEJLTEwKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xMCglZWR4KQotTChmd2Rfd3JpdGVfMmJ5dGVzX2FsaWduKToKLQltb3Z6d2wJLTIoJWVheCksICVlY3gKLQltb3Z3CSVjeCwgLTIoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfMzRieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0zNCglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0zNCglZWR4KQotTChmd2Rfd3JpdGVfMThieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0xOCglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0xOCglZWR4KQotCW1vdnp3bAktMiglZWF4KSwgJWVjeAotCW1vdncJJWN4LCAtMiglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV80N2J5dGVzX2FsaWduKToKLQltb3ZkcWEJLTQ3KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTQ3KCVlZHgpCi1MKGZ3ZF93cml0ZV8zMWJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTMxKCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTMxKCVlZHgpCi1MKGZ3ZF93cml0ZV8xNWJ5dGVzX2FsaWduKToKLQltb3ZxCS0xNSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTUoJWVkeCkKLUwoZndkX3dyaXRlXzdieXRlc19hbGlnbik6Ci0JbW92bAktNyglZWF4KSwgJWVjeAotCW1vdmwJJWVjeCwgLTcoJWVkeCkKLQltb3Z6d2wJLTMoJWVheCksICVlY3gKLQltb3Z6YmwJLTEoJWVheCksICVlYXgKLQltb3Z3CSVjeCwgLTMoJWVkeCkKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfMzlieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0zOSglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0zOSglZWR4KQotTChmd2Rfd3JpdGVfMjNieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0yMyglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0yMyglZWR4KQotCW1vdmwJLTcoJWVheCksICVlY3gKLQltb3ZsCSVlY3gsIC03KCVlZHgpCi0JbW92endsCS0zKCVlYXgpLCAlZWN4Ci0JbW92emJsCS0xKCVlYXgpLCAlZWF4Ci0JbW92dwklY3gsIC0zKCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzQzYnl0ZXNfYWxpZ24pOgotCW1vdmRxYQktNDMoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtNDMoJWVkeCkKLUwoZndkX3dyaXRlXzI3Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMjcoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMjcoJWVkeCkKLUwoZndkX3dyaXRlXzExYnl0ZXNfYWxpZ24pOgotCW1vdnEJLTExKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xMSglZWR4KQotTChmd2Rfd3JpdGVfM2J5dGVzX2FsaWduKToKLQltb3Z6d2wJLTMoJWVheCksICVlY3gKLQltb3Z6YmwJLTEoJWVheCksICVlYXgKLQltb3Z3CSVjeCwgLTMoJWVkeCkKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfMzVieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0zNSglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0zNSglZWR4KQotTChmd2Rfd3JpdGVfMTlieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0xOSglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0xOSglZWR4KQotCW1vdnp3bAktMyglZWF4KSwgJWVjeAotCW1vdnpibAktMSglZWF4KSwgJWVheAotCW1vdncJJWN4LCAtMyglZWR4KQotCW1vdmIJJWFsLCAtMSglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV80NGJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTQ0KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTQ0KCVlZHgpCi1MKGZ3ZF93cml0ZV8yOGJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTI4KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTI4KCVlZHgpCi1MKGZ3ZF93cml0ZV8xMmJ5dGVzX2FsaWduKToKLQltb3ZxCS0xMiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTIoJWVkeCkKLUwoZndkX3dyaXRlXzRieXRlc19hbGlnbik6Ci0JbW92bAktNCglZWF4KSwgJWVjeAotCW1vdmwJJWVjeCwgLTQoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfMzZieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0zNiglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0zNiglZWR4KQotTChmd2Rfd3JpdGVfMjBieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0yMCglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0yMCglZWR4KQotCW1vdmwJLTQoJWVheCksICVlY3gKLQltb3ZsCSVlY3gsIC00KCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk5fRU5ECi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwobGFyZ2VfcGFnZSk6Ci0JbW92ZHF1CSglZWF4KSwgJXhtbTEKLSNpZmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotCWxlYQkxNiglZWF4KSwgJWVheAotCW1vdm50ZHEJJXhtbTEsICglZWR4KQotCWxlYQkxNiglZWR4KSwgJWVkeAotCWxlYQktMHg5MCglZWN4KSwgJWVjeAotCVBPUCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwobGFyZ2VfcGFnZV9sb29wKToKLQltb3ZkcXUJKCVlYXgpLCAleG1tMAotCW1vdmRxdQkweDEwKCVlYXgpLCAleG1tMQotCW1vdmRxdQkweDIwKCVlYXgpLCAleG1tMgotCW1vdmRxdQkweDMwKCVlYXgpLCAleG1tMwotCW1vdmRxdQkweDQwKCVlYXgpLCAleG1tNAotCW1vdmRxdQkweDUwKCVlYXgpLCAleG1tNQotCW1vdmRxdQkweDYwKCVlYXgpLCAleG1tNgotCW1vdmRxdQkweDcwKCVlYXgpLCAleG1tNwotCWxlYQkweDgwKCVlYXgpLCAlZWF4Ci0KLQlzdWIJJDB4ODAsICVlY3gKLQltb3ZudGRxCSV4bW0wLCAoJWVkeCkKLQltb3ZudGRxCSV4bW0xLCAweDEwKCVlZHgpCi0JbW92bnRkcQkleG1tMiwgMHgyMCglZWR4KQotCW1vdm50ZHEJJXhtbTMsIDB4MzAoJWVkeCkKLQltb3ZudGRxCSV4bW00LCAweDQwKCVlZHgpCi0JbW92bnRkcQkleG1tNSwgMHg1MCglZWR4KQotCW1vdm50ZHEJJXhtbTYsIDB4NjAoJWVkeCkKLQltb3ZudGRxCSV4bW03LCAweDcwKCVlZHgpCi0JbGVhCTB4ODAoJWVkeCksICVlZHgKLQlqYWUJTChsYXJnZV9wYWdlX2xvb3ApCi0JY21wCSQtMHg0MCwgJWVjeAotCWxlYQkweDgwKCVlY3gpLCAlZWN4Ci0JamwJTChsYXJnZV9wYWdlX2xlc3NfNjRieXRlcykKLQotCW1vdmRxdQkoJWVheCksICV4bW0wCi0JbW92ZHF1CTB4MTAoJWVheCksICV4bW0xCi0JbW92ZHF1CTB4MjAoJWVheCksICV4bW0yCi0JbW92ZHF1CTB4MzAoJWVheCksICV4bW0zCi0JbGVhCTB4NDAoJWVheCksICVlYXgKLQotCW1vdm50ZHEJJXhtbTAsICglZWR4KQotCW1vdm50ZHEJJXhtbTEsIDB4MTAoJWVkeCkKLQltb3ZudGRxCSV4bW0yLCAweDIwKCVlZHgpCi0JbW92bnRkcQkleG1tMywgMHgzMCglZWR4KQotCWxlYQkweDQwKCVlZHgpLCAlZWR4Ci0Jc3ViCSQweDQwLCAlZWN4Ci1MKGxhcmdlX3BhZ2VfbGVzc182NGJ5dGVzKToKLQljbXAJJDMyLCAlZWN4Ci0JamIJTChsYXJnZV9wYWdlX2xlc3NfMzJieXRlcykKLQltb3ZkcXUJKCVlYXgpLCAleG1tMAotCW1vdmRxdQkweDEwKCVlYXgpLCAleG1tMQotCWxlYQkweDIwKCVlYXgpLCAlZWF4Ci0JbW92bnRkcQkleG1tMCwgKCVlZHgpCi0JbW92bnRkcQkleG1tMSwgMHgxMCglZWR4KQotCWxlYQkweDIwKCVlZHgpLCAlZWR4Ci0Jc3ViCSQweDIwLCAlZWN4Ci1MKGxhcmdlX3BhZ2VfbGVzc18zMmJ5dGVzKToKLQlhZGQJJWVjeCwgJWVkeAotCWFkZAklZWN4LCAlZWF4Ci0Jc2ZlbmNlCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQkucDJhbGlnbiA0Ci1MKGJrX3dyaXRlXzQ0Ynl0ZXMpOgotCW1vdnEJMzYoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMzYoJWVkeCkKLUwoYmtfd3JpdGVfMzZieXRlcyk6Ci0JbW92cQkyOCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAyOCglZWR4KQotTChia193cml0ZV8yOGJ5dGVzKToKLQltb3ZxCTIwKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDIwKCVlZHgpCi1MKGJrX3dyaXRlXzIwYnl0ZXMpOgotCW1vdnEJMTIoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMTIoJWVkeCkKLUwoYmtfd3JpdGVfMTJieXRlcyk6Ci0JbW92cQk0KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDQoJWVkeCkKLUwoYmtfd3JpdGVfNGJ5dGVzKToKLQltb3ZsCSglZWF4KSwgJWVjeAotCW1vdmwJJWVjeCwgKCVlZHgpCi1MKGJrX3dyaXRlXzBieXRlcyk6Ci0jaWZuZGVmIFVTRV9BU19CQ09QWQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJTEVOKCVlc3ApLCAlZWN4Ci0JYWRkCSVlY3gsICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChia193cml0ZV80MGJ5dGVzKToKLQltb3ZxCTMyKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDMyKCVlZHgpCi1MKGJrX3dyaXRlXzMyYnl0ZXMpOgotCW1vdnEJMjQoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMjQoJWVkeCkKLUwoYmtfd3JpdGVfMjRieXRlcyk6Ci0JbW92cQkxNiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAxNiglZWR4KQotTChia193cml0ZV8xNmJ5dGVzKToKLQltb3ZxCTgoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgOCglZWR4KQotTChia193cml0ZV84Ynl0ZXMpOgotCW1vdnEJKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsICglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCUxFTiglZXNwKSwgJWVjeAotCWFkZAklZWN4LCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoYmtfd3JpdGVfNDVieXRlcyk6Ci0JbW92cQkzNyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAzNyglZWR4KQotTChia193cml0ZV8zN2J5dGVzKToKLQltb3ZxCTI5KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDI5KCVlZHgpCi1MKGJrX3dyaXRlXzI5Ynl0ZXMpOgotCW1vdnEJMjEoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMjEoJWVkeCkKLUwoYmtfd3JpdGVfMjFieXRlcyk6Ci0JbW92cQkxMyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAxMyglZWR4KQotTChia193cml0ZV8xM2J5dGVzKToKLQltb3ZxCTUoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgNSglZWR4KQotTChia193cml0ZV81Ynl0ZXMpOgotCW1vdmwJMSglZWF4KSwgJWVjeAotCW1vdmwJJWVjeCwgMSglZWR4KQotTChia193cml0ZV8xYnl0ZXMpOgotCW1vdnpibAkoJWVheCksICVlY3gKLQltb3ZiCSVjbCwgKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJTEVOKCVlc3ApLCAlZWN4Ci0JYWRkCSVlY3gsICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChia193cml0ZV80MWJ5dGVzKToKLQltb3ZxCTMzKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDMzKCVlZHgpCi1MKGJrX3dyaXRlXzMzYnl0ZXMpOgotCW1vdnEJMjUoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMjUoJWVkeCkKLUwoYmtfd3JpdGVfMjVieXRlcyk6Ci0JbW92cQkxNyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAxNyglZWR4KQotTChia193cml0ZV8xN2J5dGVzKToKLQltb3ZxCTkoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgOSglZWR4KQotTChia193cml0ZV85Ynl0ZXMpOgotCW1vdnEJMSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAxKCVlZHgpCi0JbW92emJsCSglZWF4KSwgJWVjeAotCW1vdmIJJWNsLCAoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAlMRU4oJWVzcCksICVlY3gKLQlhZGQJJWVjeCwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGJrX3dyaXRlXzQ2Ynl0ZXMpOgotCW1vdnEJMzgoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMzgoJWVkeCkKLUwoYmtfd3JpdGVfMzhieXRlcyk6Ci0JbW92cQkzMCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAzMCglZWR4KQotTChia193cml0ZV8zMGJ5dGVzKToKLQltb3ZxCTIyKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDIyKCVlZHgpCi1MKGJrX3dyaXRlXzIyYnl0ZXMpOgotCW1vdnEJMTQoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMTQoJWVkeCkKLUwoYmtfd3JpdGVfMTRieXRlcyk6Ci0JbW92cQk2KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDYoJWVkeCkKLUwoYmtfd3JpdGVfNmJ5dGVzKToKLQltb3ZsCTIoJWVheCksICVlY3gKLQltb3ZsCSVlY3gsIDIoJWVkeCkKLQltb3Z6d2wJKCVlYXgpLCAlZWN4Ci0JbW92dwklY3gsICglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCUxFTiglZXNwKSwgJWVjeAotCWFkZAklZWN4LCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoYmtfd3JpdGVfNDJieXRlcyk6Ci0JbW92cQkzNCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAzNCglZWR4KQotTChia193cml0ZV8zNGJ5dGVzKToKLQltb3ZxCTI2KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDI2KCVlZHgpCi1MKGJrX3dyaXRlXzI2Ynl0ZXMpOgotCW1vdnEJMTgoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMTgoJWVkeCkKLUwoYmtfd3JpdGVfMThieXRlcyk6Ci0JbW92cQkxMCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAxMCglZWR4KQotTChia193cml0ZV8xMGJ5dGVzKToKLQltb3ZxCTIoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMiglZWR4KQotTChia193cml0ZV8yYnl0ZXMpOgotCW1vdnp3bAkoJWVheCksICVlY3gKLQltb3Z3CSVjeCwgKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJTEVOKCVlc3ApLCAlZWN4Ci0JYWRkCSVlY3gsICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChia193cml0ZV80N2J5dGVzKToKLQltb3ZxCTM5KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDM5KCVlZHgpCi1MKGJrX3dyaXRlXzM5Ynl0ZXMpOgotCW1vdnEJMzEoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMzEoJWVkeCkKLUwoYmtfd3JpdGVfMzFieXRlcyk6Ci0JbW92cQkyMyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAyMyglZWR4KQotTChia193cml0ZV8yM2J5dGVzKToKLQltb3ZxCTE1KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDE1KCVlZHgpCi1MKGJrX3dyaXRlXzE1Ynl0ZXMpOgotCW1vdnEJNyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCA3KCVlZHgpCi1MKGJrX3dyaXRlXzdieXRlcyk6Ci0JbW92bAkzKCVlYXgpLCAlZWN4Ci0JbW92bAklZWN4LCAzKCVlZHgpCi0JbW92endsCTEoJWVheCksICVlY3gKLQltb3Z3CSVjeCwgMSglZWR4KQotCW1vdnpibAkoJWVheCksICVlYXgKLQltb3ZiCSVhbCwgKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJTEVOKCVlc3ApLCAlZWN4Ci0JYWRkCSVlY3gsICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChia193cml0ZV80M2J5dGVzKToKLQltb3ZxCTM1KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDM1KCVlZHgpCi1MKGJrX3dyaXRlXzM1Ynl0ZXMpOgotCW1vdnEJMjcoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMjcoJWVkeCkKLUwoYmtfd3JpdGVfMjdieXRlcyk6Ci0JbW92cQkxOSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAxOSglZWR4KQotTChia193cml0ZV8xOWJ5dGVzKToKLQltb3ZxCTExKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDExKCVlZHgpCi1MKGJrX3dyaXRlXzExYnl0ZXMpOgotCW1vdnEJMyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAzKCVlZHgpCi1MKGJrX3dyaXRlXzNieXRlcyk6Ci0JbW92endsCTEoJWVheCksICVlY3gKLQltb3Z3CSVjeCwgMSglZWR4KQotCW1vdnpibAkoJWVheCksICVlYXgKLQltb3ZiCSVhbCwgKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJTEVOKCVlc3ApLCAlZWN4Ci0JYWRkCSVlY3gsICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTl9FTkQKLQotCi0JLnB1c2hzZWN0aW9uIC5yb2RhdGEuc3NzZTMsImEiLEBwcm9nYml0cwotCS5wMmFsaWduIDIKLUwodGFibGVfNDhieXRlc19md2QpOgotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8wYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzJieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzVieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV82Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfN2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzhieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV85Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTBieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xMWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzEyYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTNieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xNGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE1Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTZieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xN2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE4Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTlieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yMGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzIxYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjJieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yM2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI0Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjVieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yNmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI3Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjhieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yOWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzMwYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzFieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zMmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzMzYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzRieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zNWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM2Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzdieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zOGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM5Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDBieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80MWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQyYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDNieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80NGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQ1Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDZieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80N2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0KLQkucDJhbGlnbiAyCi1MKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKToKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzFieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfM2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzRieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV81Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzdieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV84Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfOWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzEwYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTFieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xMmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzEzYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTRieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xNWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE2Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTdieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xOGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE5Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjBieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yMWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzIyYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjNieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yNGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI1Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjZieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yN2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI4Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjlieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zMGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzMxYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzJieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zM2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM0Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzVieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zNmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM3Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzhieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zOWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQwYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDFieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80MmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQzYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDRieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80NWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQ2Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDdieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCi0JLnAyYWxpZ24gMgotTChzaGxfdGFibGUpOgotCS5pbnQJSk1QVEJMIChMKHNobF8wKSwgTChzaGxfdGFibGUpKQotCS5pbnQJSk1QVEJMIChMKHNobF8xKSwgTChzaGxfdGFibGUpKQotCS5pbnQJSk1QVEJMIChMKHNobF8yKSwgTChzaGxfdGFibGUpKQotCS5pbnQJSk1QVEJMIChMKHNobF8zKSwgTChzaGxfdGFibGUpKQotCS5pbnQJSk1QVEJMIChMKHNobF80KSwgTChzaGxfdGFibGUpKQotCS5pbnQJSk1QVEJMIChMKHNobF81KSwgTChzaGxfdGFibGUpKQotCS5pbnQJSk1QVEJMIChMKHNobF82KSwgTChzaGxfdGFibGUpKQotCS5pbnQJSk1QVEJMIChMKHNobF83KSwgTChzaGxfdGFibGUpKQotCS5pbnQJSk1QVEJMIChMKHNobF84KSwgTChzaGxfdGFibGUpKQotCS5pbnQJSk1QVEJMIChMKHNobF85KSwgTChzaGxfdGFibGUpKQotCS5pbnQJSk1QVEJMIChMKHNobF8xMCksIEwoc2hsX3RhYmxlKSkKLQkuaW50CUpNUFRCTCAoTChzaGxfMTEpLCBMKHNobF90YWJsZSkpCi0JLmludAlKTVBUQkwgKEwoc2hsXzEyKSwgTChzaGxfdGFibGUpKQotCS5pbnQJSk1QVEJMIChMKHNobF8xMyksIEwoc2hsX3RhYmxlKSkKLQkuaW50CUpNUFRCTCAoTChzaGxfMTQpLCBMKHNobF90YWJsZSkpCi0JLmludAlKTVBUQkwgKEwoc2hsXzE1KSwgTChzaGxfdGFibGUpKQotCi0JLnAyYWxpZ24gMgotTCh0YWJsZV80OF9ieXRlc19id2QpOgotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzBieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8xYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzNieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV80Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzZieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV83Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfOGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzlieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8xMGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzExYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTJieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8xM2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzE0Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTVieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8xNmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzE3Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMThieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8xOWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzIwYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjFieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8yMmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzIzYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjRieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8yNWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzI2Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjdieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8yOGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzI5Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzBieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8zMWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzMyYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzNieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8zNGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzM1Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzZieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8zN2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzM4Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzlieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV80MGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzQxYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNDJieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV80M2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzQ0Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNDVieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV80NmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzQ3Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0KLQkucG9wc2VjdGlvbgotCi0jaWZkZWYgVVNFX0FTX01FTU1PVkUKLQkucDJhbGlnbiA0Ci1MKGNvcHlfYmFja3dhcmQpOgotCVBVU0ggKCVlZGkpCi0JbW92bAklZWF4LCAlZWRpCi0JbGVhCSglZWN4LCVlZHgsMSksJWVkeAotCWxlYQkoJWVjeCwlZWRpLDEpLCVlZGkKLQl0ZXN0bAkkMHgzLCAlZWR4Ci0Jam56CUwoYmtfYWxpZ24pCi0KLUwoYmtfYWxpZ25lZF80KToKLQljbXAJJDY0LCAlZWN4Ci0JamFlCUwoYmtfd3JpdGVfbW9yZTY0Ynl0ZXMpCi0KLUwoYmtfd3JpdGVfNjRieXRlc2xlc3MpOgotCWNtcAkkMzIsICVlY3gKLQlqYglMKGJrX3dyaXRlX2xlc3MzMmJ5dGVzKQotCi1MKGJrX3dyaXRlX21vcmUzMmJ5dGVzKToKLQkvKiBDb3B5IDMyIGJ5dGVzIGF0IGEgdGltZS4gICovCi0Jc3ViCSQzMiwgJWVjeAotCW1vdnEJLTgoJWVkaSksICV4bW0wCi0JbW92cQkleG1tMCwgLTgoJWVkeCkKLQltb3ZxCS0xNiglZWRpKSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTYoJWVkeCkKLQltb3ZxCS0yNCglZWRpKSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMjQoJWVkeCkKLQltb3ZxCS0zMiglZWRpKSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMzIoJWVkeCkKLQlzdWIJJDMyLCAlZWR4Ci0Jc3ViCSQzMiwgJWVkaQotCi1MKGJrX3dyaXRlX2xlc3MzMmJ5dGVzKToKLQltb3ZsCSVlZGksICVlYXgKLQlzdWIJJWVjeCwgJWVkeAotCXN1YgklZWN4LCAlZWF4Ci0JUE9QICglZWRpKQotTChia193cml0ZV9sZXNzMzJieXRlc18yKToKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzQ4X2J5dGVzX2J3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoYmtfYWxpZ24pOgotCWNtcAkkOCwgJWVjeAotCWpiZQlMKGJrX3dyaXRlX2xlc3MzMmJ5dGVzKQotCXRlc3RsCSQxLCAlZWR4Ci0JLyogV2UgZ2V0IGhlcmUgb25seSBpZiAoRURYICYgMyApICE9IDAgc28gaWYgKEVEWCAmIDEpID09MCwKLQl0aGVuCShFRFggJiAyKSBtdXN0IGJlICE9IDAuICAqLwotCWp6CUwoYmtfZ290MikKLQlzdWIJJDEsICVlZGkKLQlzdWIJJDEsICVlY3gKLQlzdWIJJDEsICVlZHgKLQltb3Z6YmwJKCVlZGkpLCAlZWF4Ci0JbW92YgklYWwsICglZWR4KQotCi0JdGVzdGwJJDIsICVlZHgKLQlqeglMKGJrX2FsaWduZWRfNCkKLQotTChia19nb3QyKToKLQlzdWIJJDIsICVlZGkKLQlzdWIJJDIsICVlY3gKLQlzdWIJJDIsICVlZHgKLQltb3Z6d2wJKCVlZGkpLCAlZWF4Ci0JbW92dwklYXgsICglZWR4KQotCWptcAlMKGJrX2FsaWduZWRfNCkKLQotCS5wMmFsaWduIDQKLUwoYmtfd3JpdGVfbW9yZTY0Ynl0ZXMpOgotCS8qIENoZWNrIGFsaWdubWVudCBvZiBsYXN0IGJ5dGUuICAqLwotCXRlc3RsCSQxNSwgJWVkeAotCWp6CUwoYmtfc3NzZTNfY3B5X3ByZSkKLQotLyogRURYIGlzIGFsaWduZWQgNCBieXRlcywgYnV0IG5vdCAxNiBieXRlcy4gICovCi1MKGJrX3Nzc2UzX2FsaWduKToKLQlzdWIJJDQsICVlZGkKLQlzdWIJJDQsICVlY3gKLQlzdWIJJDQsICVlZHgKLQltb3ZsCSglZWRpKSwgJWVheAotCW1vdmwJJWVheCwgKCVlZHgpCi0KLQl0ZXN0bAkkMTUsICVlZHgKLQlqeglMKGJrX3Nzc2UzX2NweV9wcmUpCi0KLQlzdWIJJDQsICVlZGkKLQlzdWIJJDQsICVlY3gKLQlzdWIJJDQsICVlZHgKLQltb3ZsCSglZWRpKSwgJWVheAotCW1vdmwJJWVheCwgKCVlZHgpCi0KLQl0ZXN0bAkkMTUsICVlZHgKLQlqeglMKGJrX3Nzc2UzX2NweV9wcmUpCi0KLQlzdWIJJDQsICVlZGkKLQlzdWIJJDQsICVlY3gKLQlzdWIJJDQsICVlZHgKLQltb3ZsCSglZWRpKSwgJWVheAotCW1vdmwJJWVheCwgKCVlZHgpCi0KLUwoYmtfc3NzZTNfY3B5X3ByZSk6Ci0JY21wCSQ2NCwgJWVjeAotCWpiCUwoYmtfd3JpdGVfbW9yZTMyYnl0ZXMpCi0KLQkucDJhbGlnbiA0Ci1MKGJrX3Nzc2UzX2NweSk6Ci0Jc3ViCSQ2NCwgJWVkaQotCXN1YgkkNjQsICVlY3gKLQlzdWIJJDY0LCAlZWR4Ci0JbW92ZHF1CTB4MzAoJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAweDMwKCVlZHgpCi0JbW92ZHF1CTB4MjAoJWVkaSksICV4bW0yCi0JbW92ZHFhCSV4bW0yLCAweDIwKCVlZHgpCi0JbW92ZHF1CTB4MTAoJWVkaSksICV4bW0xCi0JbW92ZHFhCSV4bW0xLCAweDEwKCVlZHgpCi0JbW92ZHF1CSglZWRpKSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsICglZWR4KQotCWNtcAkkNjQsICVlY3gKLQlqYWUJTChia19zc3NlM19jcHkpCi0Jam1wCUwoYmtfd3JpdGVfNjRieXRlc2xlc3MpCi0KLSNlbmRpZgotCi1FTkQgKE1FTUNQWSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNhdC5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY2F0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NWYzOGEuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY2F0LlMKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgkkT3BlbkJTRDogc3RyY2F0LlMsdiAxLjggMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLwotLyoKLSAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCi0gKiBQdWJsaWMgZG9tYWluLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi0jaWYgZGVmaW5lZChBUElXQVJOKQotI0FQUAotCS5zZWN0aW9uIC5nbnUud2FybmluZy5zdHJjYXQKLQkuYXNjaWkgIndhcm5pbmc6IHN0cmNhdCgpIGlzIGFsbW9zdCBhbHdheXMgbWlzdXNlZCwgcGxlYXNlIHVzZSBzdHJsY2F0KCkiCi0jTk9fQVBQCi0jZW5kaWYKLQotLyoKLSAqIE5PVEU6IEkndmUgdW5yb2xsZWQgdGhlIGxvb3AgZWlnaHQgdGltZXM6IGxhcmdlIGVub3VnaCB0byBtYWtlIGEKLSAqIHNpZ25pZmljYW50IGRpZmZlcmVuY2UsIGFuZCBzbWFsbCBlbm91Z2ggbm90IHRvIHRvdGFsbHkgdHJhc2ggdGhlCi0gKiBjYWNoZS4KLSAqLwotCi1FTlRSWShzdHJjYXQpCi0JcHVzaGwJJWVkaQkJCS8qIHNhdmUgZWRpICovCi0JbW92bAk4KCVlc3ApLCVlZGkJCS8qIGRzdCBhZGRyZXNzICovCi0JbW92bAkxMiglZXNwKSwlZWR4CQkvKiBzcmMgYWRkcmVzcyAqLwotCXB1c2hsCSVlZGkJCQkvKiBwdXNoIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KLQotCWNsZAkJCQkvKiBzZXQgc2VhcmNoIGZvcndhcmQgKi8KLQl4b3JsCSVlYXgsJWVheAkJLyogc2V0IHNlYXJjaCBmb3IgbnVsbCB0ZXJtaW5hdG9yICovCi0JbW92bAkkLTEsJWVjeAkJLyogc2V0IHNlYXJjaCBmb3IgbG90cyBvZiBjaGFyYWN0ZXJzICovCi0JcmVwbmUJCQkJLyogc2VhcmNoISAqLwotCXNjYXNiCi0KLQlsZWFsCS0xKCVlZGkpLCVlY3gJCS8qIGNvcnJlY3QgZHN0IGFkZHJlc3MgKi8KLQotCS5hbGlnbiAyLDB4OTAKLUwxOgltb3ZiCSglZWR4KSwlYWwJCS8qIHVucm9sbCBsb29wLCBidXQgbm90IHRvbyBtdWNoICovCi0JbW92YgklYWwsKCVlY3gpCi0JdGVzdGIJJWFsLCVhbAotCWp6CUwyCi0JbW92YgkxKCVlZHgpLCVhbAotCW1vdmIJJWFsLDEoJWVjeCkKLQl0ZXN0YgklYWwsJWFsCi0JanoJTDIKLQltb3ZiCTIoJWVkeCksJWFsCi0JbW92YgklYWwsMiglZWN4KQotCXRlc3RiCSVhbCwlYWwKLQlqeglMMgotCW1vdmIJMyglZWR4KSwlYWwKLQltb3ZiCSVhbCwzKCVlY3gpCi0JdGVzdGIJJWFsLCVhbAotCWp6CUwyCi0JbW92Ygk0KCVlZHgpLCVhbAotCW1vdmIJJWFsLDQoJWVjeCkKLQl0ZXN0YgklYWwsJWFsCi0JanoJTDIKLQltb3ZiCTUoJWVkeCksJWFsCi0JbW92YgklYWwsNSglZWN4KQotCXRlc3RiCSVhbCwlYWwKLQlqeglMMgotCW1vdmIJNiglZWR4KSwlYWwKLQltb3ZiCSVhbCw2KCVlY3gpCi0JdGVzdGIJJWFsLCVhbAotCWp6CUwyCi0JbW92Ygk3KCVlZHgpLCVhbAotCW1vdmIJJWFsLDcoJWVjeCkKLQlhZGRsCSQ4LCVlZHgKLQlhZGRsCSQ4LCVlY3gKLQl0ZXN0YgklYWwsJWFsCi0Jam56CUwxCi1MMjoJcG9wbAklZWF4CQkJLyogcG9wIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KLQlwb3BsCSVlZGkJCQkvKiByZXN0b3JlIGVkaSAqLwotCXJldAotRU5EKHN0cmNhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNtcC5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY21wLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkM2Y0ZmMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY21wLlMKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgkkT3BlbkJTRDogc3RyY21wLlMsdiAxLjMgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLwotLyoKLSAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCi0gKiBQdWJsaWMgZG9tYWluLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi0vKgotICogTk9URTogSSd2ZSB1bnJvbGxlZCB0aGUgbG9vcCBlaWdodCB0aW1lczogbGFyZ2UgZW5vdWdoIHRvIG1ha2UgYQotICogc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSwgYW5kIHNtYWxsIGVub3VnaCBub3QgdG8gdG90YWxseSB0cmFzaCB0aGUKLSAqIGNhY2hlLgotICovCi0KLUVOVFJZKHN0cmNtcCkKLQltb3ZsCTB4MDQoJWVzcCksJWVheAotCW1vdmwJMHgwOCglZXNwKSwlZWR4Ci0Jam1wCUwyCQkJLyogSnVtcCBpbnRvIHRoZSBsb29wISAqLwotCi0JLmFsaWduCTIsMHg5MAotTDE6CWluY2wJJWVheAotCWluY2wJJWVkeAotTDI6CW1vdmIJKCVlYXgpLCVjbAotCXRlc3RiCSVjbCwlY2wJCQkvKiBudWxsIHRlcm1pbmF0b3I/Pz8gKi8KLQlqeglMMwotCWNtcGIJJWNsLCglZWR4KQkJLyogY2hhcnMgbWF0Y2g/Pz8gKi8KLQlqbmUJTDMKLQlpbmNsCSVlYXgKLQlpbmNsCSVlZHgKLQltb3ZiCSglZWF4KSwlY2wKLQl0ZXN0YgklY2wsJWNsCi0JanoJTDMKLQljbXBiCSVjbCwoJWVkeCkKLQlqbmUJTDMKLQlpbmNsCSVlYXgKLQlpbmNsCSVlZHgKLQltb3ZiCSglZWF4KSwlY2wKLQl0ZXN0YgklY2wsJWNsCi0JanoJTDMKLQljbXBiCSVjbCwoJWVkeCkKLQlqbmUJTDMKLQlpbmNsCSVlYXgKLQlpbmNsCSVlZHgKLQltb3ZiCSglZWF4KSwlY2wKLQl0ZXN0YgklY2wsJWNsCi0JanoJTDMKLQljbXBiCSVjbCwoJWVkeCkKLQlqbmUJTDMKLQlpbmNsCSVlYXgKLQlpbmNsCSVlZHgKLQltb3ZiCSglZWF4KSwlY2wKLQl0ZXN0YgklY2wsJWNsCi0JanoJTDMKLQljbXBiCSVjbCwoJWVkeCkKLQlqbmUJTDMKLQlpbmNsCSVlYXgKLQlpbmNsCSVlZHgKLQltb3ZiCSglZWF4KSwlY2wKLQl0ZXN0YgklY2wsJWNsCi0JanoJTDMKLQljbXBiCSVjbCwoJWVkeCkKLQlqbmUJTDMKLQlpbmNsCSVlYXgKLQlpbmNsCSVlZHgKLQltb3ZiCSglZWF4KSwlY2wKLQl0ZXN0YgklY2wsJWNsCi0JanoJTDMKLQljbXBiCSVjbCwoJWVkeCkKLQlqbmUJTDMKLQlpbmNsCSVlYXgKLQlpbmNsCSVlZHgKLQltb3ZiCSglZWF4KSwlY2wKLQl0ZXN0YgklY2wsJWNsCi0JanoJTDMKLQljbXBiCSVjbCwoJWVkeCkKLQlqZQlMMQotCS5hbGlnbiAyLCAweDkwCi1MMzoJbW92emJsCSglZWF4KSwlZWF4CQkvKiB1bnNpZ25lZCBjb21wYXJpc29uICovCi0JbW92emJsCSglZWR4KSwlZWR4Ci0Jc3VibAklZWR4LCVlYXgKLQlyZXQKLUVORChzdHJjbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJuY21wLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJuY21wLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NDk0NzMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RybmNtcC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBzdHJuY21wLlMsdiAxLjMgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLwotLyoKLSAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCi0gKiBQdWJsaWMgZG9tYWluLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi0vKgotICogTk9URTogSSd2ZSB1bnJvbGxlZCB0aGUgbG9vcCBlaWdodCB0aW1lczogbGFyZ2UgZW5vdWdoIHRvIG1ha2UgYQotICogc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSwgYW5kIHNtYWxsIGVub3VnaCBub3QgdG8gdG90YWxseSB0cmFzaCB0aGUKLSAqIGNhY2hlLgotICovCi0KLUVOVFJZKHN0cm5jbXApCi0JcHVzaGwJJWVieAotCW1vdmwJOCglZXNwKSwlZWF4Ci0JbW92bAkxMiglZXNwKSwlZWN4Ci0JbW92bAkxNiglZXNwKSwlZWR4Ci0JdGVzdGwJJWVkeCwlZWR4Ci0Jam1wCUwyCQkJLyogSnVtcCBpbnRvIHRoZSBsb29wISAqLwotCi0JLmFsaWduIDIsMHg5MAotTDE6CWluY2wJJWVheAotCWluY2wJJWVjeAotCWRlY2wJJWVkeAotTDI6CWp6CUw0CQkJLyogc3RyaW5ncyBhcmUgZXF1YWwgKi8KLQltb3ZiCSglZWF4KSwlYmwKLQl0ZXN0YgklYmwsJWJsCi0JanoJTDMKLQljbXBiCSVibCwoJWVjeCkKLQlqbmUJTDMKLQotCWluY2wJJWVheAotCWluY2wJJWVjeAotCWRlY2wJJWVkeAotCWp6CUw0Ci0JbW92YgkoJWVheCksJWJsCi0JdGVzdGIJJWJsLCVibAotCWp6CUwzCi0JY21wYgklYmwsKCVlY3gpCi0Jam5lCUwzCi0KLQlpbmNsCSVlYXgKLQlpbmNsCSVlY3gKLQlkZWNsCSVlZHgKLQlqeglMNAotCW1vdmIJKCVlYXgpLCVibAotCXRlc3RiCSVibCwlYmwKLQlqeglMMwotCWNtcGIJJWJsLCglZWN4KQotCWpuZQlMMwotCi0JaW5jbAklZWF4Ci0JaW5jbAklZWN4Ci0JZGVjbAklZWR4Ci0JanoJTDQKLQltb3ZiCSglZWF4KSwlYmwKLQl0ZXN0YgklYmwsJWJsCi0JanoJTDMKLQljbXBiCSVibCwoJWVjeCkKLQlqbmUJTDMKLQotCWluY2wJJWVheAotCWluY2wJJWVjeAotCWRlY2wJJWVkeAotCWp6CUw0Ci0JbW92YgkoJWVheCksJWJsCi0JdGVzdGIJJWJsLCVibAotCWp6CUwzCi0JY21wYgklYmwsKCVlY3gpCi0Jam5lCUwzCi0KLQlpbmNsCSVlYXgKLQlpbmNsCSVlY3gKLQlkZWNsCSVlZHgKLQlqeglMNAotCW1vdmIJKCVlYXgpLCVibAotCXRlc3RiCSVibCwlYmwKLQlqeglMMwotCWNtcGIJJWJsLCglZWN4KQotCWpuZQlMMwotCi0JaW5jbAklZWF4Ci0JaW5jbAklZWN4Ci0JZGVjbAklZWR4Ci0JanoJTDQKLQltb3ZiCSglZWF4KSwlYmwKLQl0ZXN0YgklYmwsJWJsCi0JanoJTDMKLQljbXBiCSVibCwoJWVjeCkKLQlqbmUJTDMKLQotCWluY2wJJWVheAotCWluY2wJJWVjeAotCWRlY2wJJWVkeAotCWp6CUw0Ci0JbW92YgkoJWVheCksJWJsCi0JdGVzdGIJJWJsLCVibAotCWp6CUwzCi0JY21wYgklYmwsKCVlY3gpCi0JamUJTDEKLQotCS5hbGlnbiAyLDB4OTAKLUwzOgltb3Z6YmwJKCVlYXgpLCVlYXgJCS8qIHVuc2lnbmVkIGNvbXBhcmlzaW9uICovCi0JbW92emJsCSglZWN4KSwlZWN4Ci0Jc3VibAklZWN4LCVlYXgKLQlwb3BsCSVlYngKLQlyZXQKLQkuYWxpZ24gMiwweDkwCi1MNDoJeG9ybAklZWF4LCVlYXgKLQlwb3BsCSVlYngKLQlyZXQKLUVORChzdHJuY21wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3dhYi5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3dhYi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjZjZmIyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N3YWIuUworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBzd2FiLlMsdiAxLjMgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLwotLyoKLSAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCi0gKiBQdWJsaWMgZG9tYWluLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi0vKgotICogT24gdGhlIGk0ODYsIHRoaXMgY29kZSBpcyBuZWdsaWdpYmx5IGZhc3RlciB0aGFuIHRoZSBjb2RlIGdlbmVyYXRlZAotICogYnkgZ2NjIGF0IGFib3V0IGhhbGYgdGhlIHNpemUuICBJZiBteSBpMzg2IGRhdGFib29rIGlzIGNvcnJlY3QsIGl0Ci0gKiBzaG91bGQgYmUgY29uc2lkZXJhYmx5IGZhc3RlciB0aGFuIHRoZSBnY2MgY29kZSBvbiBhIGkzODYuCi0gKi8KLQotRU5UUlkoc3dhYikKLQlwdXNobAklZXNpCi0JcHVzaGwJJWVkaQotCW1vdmwJMTIoJWVzcCksJWVzaQotCW1vdmwJMTYoJWVzcCksJWVkaQotCW1vdmwJMjAoJWVzcCksJWVjeAotCi0JY2xkCQkJCSMgc2V0IGRpcmVjdGlvbiBmb3J3YXJkCi0KLQlzaHJsCSQxLCVlY3gKLQl0ZXN0bAkkNywlZWN4CQkJIyBjb3B5IGZpcnN0IGdyb3VwIG9mIDEgdG8gNyB3b3JkcwotCWp6CUwyCQkJIyB3aGlsZSBzd2FwaW5nIGFsdGVybmF0ZSBieXRlcy4KLQkuYWxpZ24JMiwweDkwCi1MMToJbG9kc3cKLQlyb3J3CSQ4LCVheAotCXN0b3N3Ci0JZGVjbAklZWN4Ci0JdGVzdGwJJDcsJWVjeAotCWpueglMMQotCi1MMjoJc2hybAkkMywlZWN4CQkJIyBjb3B5IHJlbWFpbmRlciA4IHdvcmRzIGF0IGEgdGltZQotCWp6CUw0CQkJIyB3aGlsZSBzd2FwcGluZyBhbHRlcm5hdGUgYnl0ZXMuCi0JLmFsaWduCTIsMHg5MAotTDM6CWxvZHN3Ci0Jcm9ydwkkOCwlYXgKLQlzdG9zdwotCWxvZHN3Ci0Jcm9ydwkkOCwlYXgKLQlzdG9zdwotCWxvZHN3Ci0Jcm9ydwkkOCwlYXgKLQlzdG9zdwotCWxvZHN3Ci0Jcm9ydwkkOCwlYXgKLQlzdG9zdwotCWxvZHN3Ci0Jcm9ydwkkOCwlYXgKLQlzdG9zdwotCWxvZHN3Ci0Jcm9ydwkkOCwlYXgKLQlzdG9zdwotCWxvZHN3Ci0Jcm9ydwkkOCwlYXgKLQlzdG9zdwotCWxvZHN3Ci0Jcm9ydwkkOCwlYXgKLQlzdG9zdwotCWRlY2wJJWVjeAotCWpueglMMwotCi1MNDoJcG9wbAklZWRpCi0JcG9wbAklZXNpCi0JcmV0Ci1FTkQoc3dhYikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMubWsgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2QxZTA4Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMubWsKKysrIC9kZXYvbnVsbApAQCAtMSwxOTYgKzAsMCBAQAotIyBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0Lgotc3lzY2FsbF9zcmMgOj0KLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fYnJrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19leGl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fZmNudGw2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX2ZzdGF0ZnM2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX2dldGNwdS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX2dldGN3ZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19faW9jdGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19sbHNlZWsuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19tbWFwMi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX29wZW5hdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3Bwb2xsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fcHNlbGVjdDYuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19wdHJhY2UuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19yZWJvb3QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19zZXRfdGhyZWFkX2FyZWEuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19zaWdhY3Rpb24uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19zdGF0ZnM2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3N5c2xvZy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3dhaXRpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fZXhpdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9hY2NlcHQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvYWNjdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9iaW5kLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2NhcGdldC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9jYXBzZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvY2hkaXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvY2hyb290LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Nsb3NlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Nvbm5lY3QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9kdXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZHVwMy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2N0bC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9ldmVudGZkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2V4ZWN2ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9mYWNjZXNzYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZmNoZGlyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2ZjaG1vZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9mY2htb2RhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9mY2hvd24uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZmNob3duYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZmRhdGFzeW5jLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2ZnZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9mbGlzdHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Zsb2NrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9mc2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZnN0YXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZnN0YXRhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9mc3luYy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9mdHJ1bmNhdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZnRydW5jYXRlNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZnV0ZXguUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZGVudHMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZWdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRldWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldGdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRncm91cHMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0aXRpbWVyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldHBnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldHBwaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldHJlc3VpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRybGltaXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0cnVzYWdlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldHNpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldHRpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0dWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9pb3ByaW9fZ2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2lvcHJpb19zZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMva2lsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9rbG9nY3RsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2xnZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9saW5rYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbGlzdGVuLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2xpc3R4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9sbGlzdHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9sc2Vlay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9sc2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbWFkdmlzZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9taW5jb3JlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL21rZGlyYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbWtub2RhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9tbG9jay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9tbG9ja2FsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9tb3VudC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9tcHJvdGVjdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9tcmVtYXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbXN5bmMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbXVubG9jay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9tdW5sb2NrYWxsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL211bm1hcC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9uYW5vc2xlZXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3BpcGUyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3ByY3RsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3ByZWFkNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcHJsaW1pdDY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3B3cml0ZTY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3JlYWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcmVhZGFoZWFkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3JlYWRsaW5rYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcmVhZHYuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcmVjdmZyb20uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcmVjdm1zZy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9yZW1vdmV4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9yZW5hbWVhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfeWllbGQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2VuZGZpbGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2VuZGZpbGU2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZW5kbXNnLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NlbmR0by5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXRnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2V0Z3JvdXBzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldGl0aW1lci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXRucy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXRwZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldHByaW9yaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldHJlZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldHJlc2dpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXN1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2V0cmV1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2V0cmxpbWl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldHNpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXRzb2Nrb3B0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXR1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2h1dGRvd24uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2lnYWx0c3RhY2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2lnbmFsZmQ0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NvY2tldC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zb2NrZXRwYWlyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3N3YXBvZmYuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc3dhcG9uLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3N5bWxpbmthdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zeW5jLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3N5c2luZm8uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvdGdraWxsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvdGltZXMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvdGtpbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvdHJ1bmNhdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvdHJ1bmNhdGU2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy91bWFzay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy91bW91bnQyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3VuYW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3VubGlua2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3Vuc2hhcmUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvdXRpbWVuc2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3dhaXQ0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3dyaXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3dyaXRldi5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fYWNjZXB0NC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2FjY2VwdDQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjE2ZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2FjY2VwdDQuUwpAQCAtMCwwICsxLDI3IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fYWNjZXB0NCkKKyAgICBwdXNobCAgICVlYngKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIG1vdiAgICAgJDE4LCAlZWJ4CisgICAgbW92ICAgICAlZXNwLCAlZWN4CisgICAgYWRkbCAgICAkMTIsICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NvY2tldGNhbGwsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgYWRkbCAgICAkNCwgJWVzcAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORChfX2FjY2VwdDQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fYnJrLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fYnJrLlMKaW5kZXggNzI4YmY4MS4uMjJhY2RhZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2Jyay5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19icmsuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoX19icmspCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfYnJrLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2Nvbm5lY3QuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19jb25uZWN0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1ZDQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19jb25uZWN0LlMKQEAgLTAsMCArMSwyNyBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2Nvbm5lY3QpCisgICAgcHVzaGwgICAlZWJ4CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBtb3YgICAgICQzLCAlZWJ4CisgICAgbW92ICAgICAlZXNwLCAlZWN4CisgICAgYWRkbCAgICAkMTIsICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NvY2tldGNhbGwsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgYWRkbCAgICAkNCwgJWVzcAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORChfX2Nvbm5lY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCmluZGV4IDliY2MxNDIuLjE3MWNhYTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCkBAIC00LDE4ICs0LDIzIEBACiAKIEVOVFJZKF9fZXBvbGxfcHdhaXQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgcHVzaGwgICAlZWRpCi0gICAgcHVzaGwgICAlZWJwCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAyNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMTYKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWJwLCAyMAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAorICAgIHB1c2hsICAgJWVkaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDAKKyAgICBwdXNobCAgICVlYnAKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJwLCAwCiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMzIoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDM2KCVlc3ApLCAlZWR4CkBAIC0yOCw5ICszMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVicAogICAgIHBvcGwgICAgJWVkaQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2V4aXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19leGl0LlMKaW5kZXggZWFkZGM1ZS4uOGNmMzY2MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2V4aXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZXhpdC5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShfX2V4aXQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfZXhpdCwgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19mYWR2aXNlNjQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19mYWR2aXNlNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTQyOThhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2ZhZHZpc2U2NC5TCkBAIC0wLDAgKzEsNDYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19mYWR2aXNlNjQpCisgICAgcHVzaGwgICAlZWJ4CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAorICAgIHB1c2hsICAgJWVkaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDAKKyAgICBwdXNobCAgICVlYnAKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJwLCAwCisgICAgbW92ICAgICAyOCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDM2KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICA0MCglZXNwKSwgJWVzaQorICAgIG1vdiAgICAgNDQoJWVzcCksICVlZGkKKyAgICBtb3YgICAgIDQ4KCVlc3ApLCAlZWJwCisgICAgbW92bCAgICAkX19OUl9mYWR2aXNlNjRfNjQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgYWRkbCAgICAkNCwgJWVzcAorMToKKyAgICBwb3BsICAgICVlYnAKKyAgICBwb3BsICAgICVlZGkKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORChfX2ZhZHZpc2U2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19mY250bDY0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZmNudGw2NC5TCmluZGV4IGZhZWZhNjUuLmQ5MDBhNTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19mY250bDY0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2ZjbnRsNjQuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShfX2ZjbnRsNjQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2ZzdGF0ZnM2NC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2ZzdGF0ZnM2NC5TCmluZGV4IGRmZDA0YWYuLjliNDQ3NDMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19mc3RhdGZzNjQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZnN0YXRmczY0LlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkoX19mc3RhdGZzNjQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldGNwdS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldGNwdS5TCmluZGV4IGQxZGE4NzEuLmJiNGM0MWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRjcHUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0Y3B1LlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkoX19nZXRjcHUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldGN3ZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldGN3ZC5TCmluZGV4IGE5ODM0ZTIuLjhkZWNkOTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRjd2QuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0Y3dkLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoX19nZXRjd2QpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2dldGN3ZCwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRkZW50czY0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0ZGVudHM2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOTBhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0ZGVudHM2NC5TCkBAIC0wLDAgKzEsMzEgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19nZXRkZW50czY0KQorICAgIHB1c2hsICAgJWVieAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAorICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfZ2V0ZGVudHM2NCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBhZGRsICAgICQ0LCAlZXNwCisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldAorRU5EKF9fZ2V0ZGVudHM2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRwaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRwaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTcyMDJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldHBpZC5TCkBAIC0wLDAgKzEsMTYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19nZXRwaWQpCisgICAgbW92bCAgICAkX19OUl9nZXRwaWQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgYWRkbCAgICAkNCwgJWVzcAorMToKKyAgICByZXQKK0VORChfX2dldHBpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKaW5kZXggOTlkMzNiYi4uZGQ1NTkxZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoX19nZXRwcmlvcml0eSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfZ2V0cHJpb3JpdHksICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19faW9jdGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19pb2N0bC5TCmluZGV4IGFkNjE3ZjAuLmI2ZWU5ZjIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19pb2N0bC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19pb2N0bC5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKF9faW9jdGwpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2xsc2Vlay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2xsc2Vlay5TCmluZGV4IDJkYWI4YTkuLjVjYzkwN2EgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19sbHNlZWsuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fbGxzZWVrLlMKQEAgLTQsMTYgKzQsMjAgQEAKIAogRU5UUlkoX19sbHNlZWspCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgcHVzaGwgICAlZWRpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAyMAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMTYKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBwdXNobCAgICVlZGkKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAwCiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWR4CkBAIC0yNSw5ICsyOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkaQogICAgIHBvcGwgICAgJWVzaQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX21tYXAyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fbW1hcDIuUwppbmRleCA5NjNhYmYzLi4wODMxNGM4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fbW1hcDIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fbW1hcDIuUwpAQCAtNCwxOCArNCwyMyBAQAogCiBFTlRSWShfX21tYXAyKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIHB1c2hsICAgJWVkaQotICAgIHB1c2hsICAgJWVicAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMjQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgotICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDE2Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVicCwgMjAKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBwdXNobCAgICVlZGkKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAwCisgICAgcHVzaGwgICAlZWJwCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVicCwgMAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlYngKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAzNiglZXNwKSwgJWVkeApAQCAtMjgsOSArMzMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYnAKICAgICBwb3BsICAgICVlZGkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19vcGVuYXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19vcGVuYXQuUwppbmRleCA2YjA1YmVjLi40YzExNzA5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fb3BlbmF0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX29wZW5hdC5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKF9fb3BlbmF0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19wcG9sbC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3Bwb2xsLlMKaW5kZXggZTVhZjkzYy4uMmExZjc2ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3Bwb2xsLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3Bwb2xsLlMKQEAgLTQsMTYgKzQsMjAgQEAKIAogRU5UUlkoX19wcG9sbCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICBwdXNobCAgICVlZGkKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDIwCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAxNgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAorICAgIHB1c2hsICAgJWVkaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMzIoJWVzcCksICVlZHgKQEAgLTI1LDkgKzI5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWRpCiAgICAgcG9wbCAgICAlZXNpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcHNlbGVjdDYuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19wc2VsZWN0Ni5TCmluZGV4IDk4NGE2N2UuLjhmZjEwMmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19wc2VsZWN0Ni5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19wc2VsZWN0Ni5TCkBAIC00LDE4ICs0LDIzIEBACiAKIEVOVFJZKF9fcHNlbGVjdDYpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgcHVzaGwgICAlZWRpCi0gICAgcHVzaGwgICAlZWJwCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAyNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMTYKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWJwLCAyMAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAorICAgIHB1c2hsICAgJWVkaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDAKKyAgICBwdXNobCAgICVlYnAKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJwLCAwCiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMzIoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDM2KCVlc3ApLCAlZWR4CkBAIC0yOCw5ICszMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVicAogICAgIHBvcGwgICAgJWVkaQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3B0cmFjZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3B0cmFjZS5TCmluZGV4IGQzYjgwMzEuLmQ5ODJjZWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19wdHJhY2UuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcHRyYWNlLlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkoX19wdHJhY2UpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3JlYm9vdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3JlYm9vdC5TCmluZGV4IGI2NDQ5MDYuLjNkMTY5YmYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19yZWJvb3QuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcmVib290LlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkoX19yZWJvb3QpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCmluZGV4IDFjNWZkY2MuLjU5YzM4ODIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkoX19ydF9zaWdhY3Rpb24pCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMKaW5kZXggNTUyMjE5NS4uOWM2YTEwNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKF9fcnRfc2lncGVuZGluZykKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfcnRfc2lncGVuZGluZywgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKaW5kZXggMGRmNzMwMS4uOWIxNTMyZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkoX19ydF9zaWdwcm9jbWFzaykKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKQEAgLTIyLDkgKzI1LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZXNpCiAgICAgcG9wbCAgICAlZWR4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3N1c3BlbmQuUwppbmRleCAwZTdkYmRmLi5iMDVhY2Q4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoX19ydF9zaWdzdXNwZW5kKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9ydF9zaWdzdXNwZW5kLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCmluZGV4IGNmYmM3YTYuLjE0Y2I3MGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkoX19ydF9zaWd0aW1lZHdhaXQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUwppbmRleCBhOWI5Zjc5Li4wYjBhOTcwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShfX3NjaGVkX2dldGFmZmluaXR5KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zZXRfdGhyZWFkX2FyZWEuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zZXRfdGhyZWFkX2FyZWEuUwppbmRleCBjZTA2MjMzLi44Y2Q2ODgwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2V0X3RocmVhZF9hcmVhLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NldF90aHJlYWRfYXJlYS5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShfX3NldF90aHJlYWRfYXJlYSkKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9zZXRfdGhyZWFkX2FyZWEsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMKaW5kZXggNmEzOTQzZC4uMDhhY2NlOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoX19zZXRfdGlkX2FkZHJlc3MpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfc2V0X3RpZF9hZGRyZXNzLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NpZ2FjdGlvbi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NpZ2FjdGlvbi5TCmluZGV4IDg4MjRhODUuLjAyMzgyNDcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zaWdhY3Rpb24uUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2lnYWN0aW9uLlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkoX19zaWdhY3Rpb24pCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NpZ25hbGZkNC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NpZ25hbGZkNC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZGRjNzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2lnbmFsZmQ0LlMKQEAgLTAsMCArMSwzNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3NpZ25hbGZkNCkKKyAgICBwdXNobCAgICVlYngKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQorICAgIG1vdmwgICAgJF9fTlJfc2lnbmFsZmQ0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGFkZGwgICAgJDQsICVlc3AKKzE6CisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQoX19zaWduYWxmZDQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc29ja2V0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc29ja2V0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5NTJlZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zb2NrZXQuUwpAQCAtMCwwICsxLDI3IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fc29ja2V0KQorICAgIHB1c2hsICAgJWVieAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAorICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgbW92ICAgICAkMSwgJWVieAorICAgIG1vdiAgICAgJWVzcCwgJWVjeAorICAgIGFkZGwgICAgJDEyLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGFkZGwgICAgJDQsICVlc3AKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQoX19zb2NrZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc3RhdGZzNjQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zdGF0ZnM2NC5TCmluZGV4IDdhOTFmMWQuLmI5YmNjYjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zdGF0ZnM2NC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zdGF0ZnM2NC5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKF9fc3RhdGZzNjQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3N5c2xvZy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3N5c2xvZy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGEwMWJlLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zeXNsb2cuUworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoX19zeXNsb2cpCi0gICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgotICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKLSAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4Ci0gICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAotICAgIG1vdmwgICAgJF9fTlJfc3lzbG9nLCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAotMToKLSAgICBwb3BsICAgICVlZHgKLSAgICBwb3BsICAgICVlY3gKLSAgICBwb3BsICAgICVlYngKLSAgICByZXQKLUVORChfX3N5c2xvZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUwppbmRleCA2ODQ4MGQxLi5iMjJmNDA4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKF9fdGltZXJfY3JlYXRlKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUwppbmRleCBhMjczMmUxLi5kNzdhZTNlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShfX3RpbWVyX2RlbGV0ZSkKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl90aW1lcl9kZWxldGUsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwppbmRleCBhMzQwYmZlLi5mMjFiMDhmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKF9fdGltZXJfZ2V0b3ZlcnJ1bikKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl90aW1lcl9nZXRvdmVycnVuLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKaW5kZXggNGFlYjhlYi4uNzNjODUzOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKF9fdGltZXJfZ2V0dGltZSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfdGltZXJfZ2V0dGltZSwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCmluZGV4IGY5M2JjYTQuLjFhNmE4ZWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUwpAQCAtNCwxNCArNCwxNyBAQAogCiBFTlRSWShfX3RpbWVyX3NldHRpbWUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3dhaXRpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3dhaXRpZC5TCmluZGV4IGNkYTUyMzguLjIwNjFhYmMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX193YWl0aWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fd2FpdGlkLlMKQEAgLTQsMTYgKzQsMjAgQEAKIAogRU5UUlkoX193YWl0aWQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgcHVzaGwgICAlZWRpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAyMAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMTYKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBwdXNobCAgICVlZGkKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAwCiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWR4CkBAIC0yNSw5ICsyOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkaQogICAgIHBvcGwgICAgJWVzaQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fZXhpdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fZXhpdC5TCmluZGV4IDJmZjVmYWYuLjg1MjhlZTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX2V4aXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19leGl0LlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKF9leGl0KQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX2V4aXRfZ3JvdXAsICVlYXgKQEAgLTEzLDEwICsxMywxMiBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKIEVORChfZXhpdCkKKworICAgIC5nbG9ibCBfRXhpdAorICAgIC5lcXUgX0V4aXQsIF9leGl0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2FjY2VwdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2NlcHQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdlOGE1OC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2FjY2VwdC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShhY2NlcHQpCi0gICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICBtb3YgICAgICQ1LCAlZWJ4Ci0gICAgbW92ICAgICAlZXNwLCAlZWN4Ci0gICAgYWRkbCAgICAkMTIsICVlY3gKLSAgICBtb3ZsICAgICRfX05SX3NvY2tldGNhbGwsICVlYXgKLSAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4Ci0xOgotICAgIHBvcGwgICAgJWVjeAotICAgIHBvcGwgICAgJWVieAotICAgIHJldAotRU5EKGFjY2VwdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYWNjdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2N0LlMKaW5kZXggNmFiYWZmYy4uZDgzMTc3MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2N0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2N0LlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKGFjY3QpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfYWNjdCwgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYmluZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9iaW5kLlMKaW5kZXggN2MyYWNiNS4uOWVmODE3ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9iaW5kLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9iaW5kLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoYmluZCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgICQyLCAlZWJ4CiAgICAgbW92ICAgICAlZXNwLCAlZWN4CiAgICAgYWRkbCAgICAkMTIsICVlY3gKQEAgLTE3LDkgKzE4LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NhcGdldC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jYXBnZXQuUwppbmRleCBhYTdiNDMyLi44MWMyNGU4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NhcGdldC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2FwZ2V0LlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoY2FwZ2V0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9jYXBnZXQsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NhcHNldC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jYXBzZXQuUwppbmRleCA2YzMxMDgzLi40ZTMxMWU5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NhcHNldC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2Fwc2V0LlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoY2Fwc2V0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9jYXBzZXQsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NoZGlyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NoZGlyLlMKaW5kZXggYTUxYWM2ZS4uMjIyNmExYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaGRpci5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2hkaXIuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoY2hkaXIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfY2hkaXIsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nocm9vdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaHJvb3QuUwppbmRleCBiZThmNjg2Li45NWVkMGI1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nocm9vdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2hyb290LlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKGNocm9vdCkKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9jaHJvb3QsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19nZXRyZXMuUwppbmRleCBjZTdlNmY3Li45NTAxNzk5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoY2xvY2tfZ2V0cmVzKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9jbG9ja19nZXRyZXMsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCmluZGV4IGIxY2RiMWEuLjA4NzVjZmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGNsb2NrX2dldHRpbWUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2Nsb2NrX2dldHRpbWUsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwppbmRleCA2YzAyNWUzLi41ZTJjYzAzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkoY2xvY2tfbmFub3NsZWVwKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKaW5kZXggN2M4NjNlMS4uOTZmYWZlZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoY2xvY2tfc2V0dGltZSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfY2xvY2tfc2V0dGltZSwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvc2UuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvc2UuUwppbmRleCAzZWIzYmUxLi5mNmNjZTYyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb3NlLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9zZS5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShjbG9zZSkKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9jbG9zZSwgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY29ubmVjdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jb25uZWN0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwZDczY2EuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jb25uZWN0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGNvbm5lY3QpCi0gICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICBtb3YgICAgICQzLCAlZWJ4Ci0gICAgbW92ICAgICAlZXNwLCAlZWN4Ci0gICAgYWRkbCAgICAkMTIsICVlY3gKLSAgICBtb3ZsICAgICRfX05SX3NvY2tldGNhbGwsICVlYXgKLSAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4Ci0xOgotICAgIHBvcGwgICAgJWVjeAotICAgIHBvcGwgICAgJWVieAotICAgIHJldAotRU5EKGNvbm5lY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCmluZGV4IDExZmY3NjIuLjU4YjhkNmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGRlbGV0ZV9tb2R1bGUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2RlbGV0ZV9tb2R1bGUsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2R1cC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9kdXAuUwppbmRleCA5ODA3MGUyLi4wZmQ5Y2NlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2R1cC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZHVwLlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKGR1cCkKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9kdXAsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2R1cDMuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZHVwMy5TCmluZGV4IDQzODBlNmEuLjgzNDg2NjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZHVwMy5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZHVwMy5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKGR1cDMpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUwppbmRleCBjYTVkNGQxLi4wZmNkMDljIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoZXBvbGxfY3JlYXRlMSkKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9lcG9sbF9jcmVhdGUxLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jdGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXBvbGxfY3RsLlMKaW5kZXggZGYzNDVjZC4uMDkyYzFlMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jdGwuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2N0bC5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKGVwb2xsX2N0bCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKQEAgLTIyLDkgKzI1LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZXNpCiAgICAgcG9wbCAgICAlZWR4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2V2ZW50ZmQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXZlbnRmZC5TCmluZGV4IDMzM2JjYTQuLmNjMTY1ZTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXZlbnRmZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXZlbnRmZC5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGV2ZW50ZmQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2V2ZW50ZmQyLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9leGVjdmUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXhlY3ZlLlMKaW5kZXggOTU1MjNiYy4uZTFjMDI1MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9leGVjdmUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2V4ZWN2ZS5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKGV4ZWN2ZSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZhY2Nlc3NhdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mYWNjZXNzYXQuUwppbmRleCAwYWQ2MjI0Li45ZDUyMjMxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZhY2Nlc3NhdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmFjY2Vzc2F0LlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkoZmFjY2Vzc2F0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmFsbG9jYXRlNjQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmFsbG9jYXRlNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmE3YzNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mYWxsb2NhdGU2NC5TCkBAIC0wLDAgKzEsNDYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZmFsbG9jYXRlNjQpCisgICAgcHVzaGwgICAlZWJ4CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAorICAgIHB1c2hsICAgJWVkaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDAKKyAgICBwdXNobCAgICVlYnAKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJwLCAwCisgICAgbW92ICAgICAyOCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDM2KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICA0MCglZXNwKSwgJWVzaQorICAgIG1vdiAgICAgNDQoJWVzcCksICVlZGkKKyAgICBtb3YgICAgIDQ4KCVlc3ApLCAlZWJwCisgICAgbW92bCAgICAkX19OUl9mYWxsb2NhdGUsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgYWRkbCAgICAkNCwgJWVzcAorMToKKyAgICBwb3BsICAgICVlYnAKKyAgICBwb3BsICAgICVlZGkKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORChmYWxsb2NhdGU2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNoZGlyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaGRpci5TCmluZGV4IDQyOThjMmEuLmM0MGMyYzEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNoZGlyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2hkaXIuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoZmNoZGlyKQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX2ZjaGRpciwgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNobW9kLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG1vZC5TCmluZGV4IGQ0ZWYzNmYuLjM3ODUxZmYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNobW9kLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2htb2QuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShmY2htb2QpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2ZjaG1vZCwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNobW9kYXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNobW9kYXQuUwppbmRleCA0ZmI2OTk1Li5mNTE1NTEyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG1vZGF0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2htb2RhdC5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKGZjaG1vZGF0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNob3duLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG93bi5TCmluZGV4IDMyNmZlMTYuLjFhNGY3NDkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNob3duLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2hvd24uUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShmY2hvd24pCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2hvd25hdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2hvd25hdC5TCmluZGV4IDgwMmRjNDQuLmMyYjM1OGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNob3duYXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG93bmF0LlMKQEAgLTQsMTYgKzQsMjAgQEAKIAogRU5UUlkoZmNob3duYXQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgcHVzaGwgICAlZWRpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAyMAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMTYKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBwdXNobCAgICVlZGkKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAwCiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWR4CkBAIC0yNSw5ICsyOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkaQogICAgIHBvcGwgICAgJWVzaQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mZGF0YXN5bmMuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmRhdGFzeW5jLlMKaW5kZXggMDJlMDliZS4uZGViZDRlMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mZGF0YXN5bmMuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZkYXRhc3luYy5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShmZGF0YXN5bmMpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfZmRhdGFzeW5jLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mZ2V0eGF0dHIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmdldHhhdHRyLlMKaW5kZXggOTlhOTIwZC4uMWVmZjkzMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mZ2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZnZXR4YXR0ci5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKGZnZXR4YXR0cikKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKQEAgLTIyLDkgKzI1LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZXNpCiAgICAgcG9wbCAgICAlZWR4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZsaXN0eGF0dHIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmxpc3R4YXR0ci5TCmluZGV4IGExNjkxZmMuLmZjODFhMzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmxpc3R4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmxpc3R4YXR0ci5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKGZsaXN0eGF0dHIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mbG9jay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mbG9jay5TCmluZGV4IGE0Mzg4ZTkuLjBmYzc2YTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmxvY2suUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Zsb2NrLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoZmxvY2spCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2Zsb2NrLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKaW5kZXggNjM3Nzk3NC4uMjA1M2E5YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGZyZW1vdmV4YXR0cikKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfZnJlbW92ZXhhdHRyLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc2V0eGF0dHIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnNldHhhdHRyLlMKaW5kZXggMmY5MjZhNS4uN2FmMGVmMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzZXR4YXR0ci5TCkBAIC00LDE2ICs0LDIwIEBACiAKIEVOVFJZKGZzZXR4YXR0cikKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICBwdXNobCAgICVlZGkKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDIwCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAxNgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAorICAgIHB1c2hsICAgJWVkaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMzIoJWVzcCksICVlZHgKQEAgLTI1LDkgKzI5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWRpCiAgICAgcG9wbCAgICAlZXNpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYTRkN2YuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3RhdC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShmc3RhdCkKLSAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKLSAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4Ci0gICAgbW92bCAgICAkX19OUl9mc3RhdDY0LCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAotMToKLSAgICBwb3BsICAgICVlY3gKLSAgICBwb3BsICAgICVlYngKLSAgICByZXQKLUVORChmc3RhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN0YXQ2NC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3RhdDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMxNjIzMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN0YXQ2NC5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZnN0YXQ2NCkKKyAgICBwdXNobCAgICVlYngKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9mc3RhdDY0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGFkZGwgICAgJDQsICVlc3AKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQoZnN0YXQ2NCkKKworICAgIC5nbG9ibCBmc3RhdAorICAgIC5lcXUgZnN0YXQsIGZzdGF0NjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN0YXRhdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3RhdGF0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZTg2OGMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3RhdGF0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGZzdGF0YXQpCi0gICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgotICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCi0gICAgbW92ICAgICAyMCglZXNwKSwgJWVieAotICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKLSAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4Ci0gICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQotICAgIG1vdmwgICAgJF9fTlJfZnN0YXRhdDY0LCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAotMToKLSAgICBwb3BsICAgICVlc2kKLSAgICBwb3BsICAgICVlZHgKLSAgICBwb3BsICAgICVlY3gKLSAgICBwb3BsICAgICVlYngKLSAgICByZXQKLUVORChmc3RhdGF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3RhdGF0NjQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN0YXRhdDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM2OTdlNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN0YXRhdDY0LlMKQEAgLTAsMCArMSwzOSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmc3RhdGF0NjQpCisgICAgcHVzaGwgICAlZWJ4CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKKyAgICBtb3ZsICAgICRfX05SX2ZzdGF0YXQ2NCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBhZGRsICAgICQ0LCAlZXNwCisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldAorRU5EKGZzdGF0YXQ2NCkKKworICAgIC5nbG9ibCBmc3RhdGF0CisgICAgLmVxdSBmc3RhdGF0LCBmc3RhdGF0NjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN5bmMuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN5bmMuUwppbmRleCA3MTE4M2NiLi5iMTlhM2FiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzeW5jLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3luYy5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShmc3luYykKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9mc3luYywgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnRydW5jYXRlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Z0cnVuY2F0ZS5TCmluZGV4IDEwMDMwNzcuLjc4ZDFlMTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnRydW5jYXRlLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mdHJ1bmNhdGUuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShmdHJ1bmNhdGUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2Z0cnVuY2F0ZSwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnRydW5jYXRlNjQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnRydW5jYXRlNjQuUwppbmRleCA1ODYwODZkLi43MjMzNDQ3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Z0cnVuY2F0ZTY0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mdHJ1bmNhdGU2NC5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKGZ0cnVuY2F0ZTY0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnV0ZXguUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnV0ZXguUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E1MjkxMy4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Z1dGV4LlMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGZ1dGV4KQotICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIHB1c2hsICAgJWVkaQotICAgIHB1c2hsICAgJWVicAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMjQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgotICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDE2Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVicCwgMjAKLSAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWJ4Ci0gICAgbW92ICAgICAzMiglZXNwKSwgJWVjeAotICAgIG1vdiAgICAgMzYoJWVzcCksICVlZHgKLSAgICBtb3YgICAgIDQwKCVlc3ApLCAlZXNpCi0gICAgbW92ICAgICA0NCglZXNwKSwgJWVkaQotICAgIG1vdiAgICAgNDgoJWVzcCksICVlYnAKLSAgICBtb3ZsICAgICRfX05SX2Z1dGV4LCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAotMToKLSAgICBwb3BsICAgICVlYnAKLSAgICBwb3BsICAgICVlZGkKLSAgICBwb3BsICAgICVlc2kKLSAgICBwb3BsICAgICVlZHgKLSAgICBwb3BsICAgICVlY3gKLSAgICBwb3BsICAgICVlYngKLSAgICByZXQKLUVORChmdXRleCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZGVudHMuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZGVudHMuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTgyM2ZlYi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGRlbnRzLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGdldGRlbnRzKQotICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4Ci0gICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAotICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKLSAgICBtb3ZsICAgICRfX05SX2dldGRlbnRzNjQsICVlYXgKLSAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4Ci0xOgotICAgIHBvcGwgICAgJWVkeAotICAgIHBvcGwgICAgJWVjeAotICAgIHBvcGwgICAgJWVieAotICAgIHJldAotRU5EKGdldGRlbnRzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRlZ2lkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGVnaWQuUwppbmRleCA2MWU3ODM5Li43MjliN2FkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGVnaWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGVnaWQuUwpAQCAtOSw5ICs5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcmV0CiBFTkQoZ2V0ZWdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZXVpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRldWlkLlMKaW5kZXggODBiY2Y3YS4uZGNjNzZiMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRldWlkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRldWlkLlMKQEAgLTksOSArOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHJldAogRU5EKGdldGV1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGdpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRnaWQuUwppbmRleCA4N2QzMWE3Li5iMzZhMmM5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGdpZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0Z2lkLlMKQEAgLTksOSArOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHJldAogRU5EKGdldGdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGdyb3Vwcy5TCmluZGV4IGU0MjQ3ZTcuLjBhNWRlMzUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRncm91cHMuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShnZXRncm91cHMpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2dldGdyb3VwczMyLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRpdGltZXIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0aXRpbWVyLlMKaW5kZXggMmRlZWJjOS4uYTBjYjc2MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRpdGltZXIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGl0aW1lci5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGdldGl0aW1lcikKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfZ2V0aXRpbWVyLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwZWVybmFtZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwZWVybmFtZS5TCmluZGV4IGU4OTQwOTMuLjY3NzNlNmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoZ2V0cGVlcm5hbWUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAkNywgJWVieAogICAgIG1vdiAgICAgJWVzcCwgJWVjeAogICAgIGFkZGwgICAgJDEyLCAlZWN4CkBAIC0xNyw5ICsxOCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwZ2lkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBnaWQuUwppbmRleCBjNTBhMDlmLi5mNzAyY2ZkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBnaWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBnaWQuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoZ2V0cGdpZCkKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9nZXRwZ2lkLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGlkLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlY2FmNzQuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwaWQuUworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZ2V0cGlkKQotICAgIG1vdmwgICAgJF9fTlJfZ2V0cGlkLCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAotMToKLSAgICByZXQKLUVORChnZXRwaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBwaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cHBpZC5TCmluZGV4IGI5MzIwNDQuLmVkYmUzODQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cHBpZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cHBpZC5TCkBAIC05LDkgKzksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICByZXQKIEVORChnZXRwcGlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRyZXNnaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKaW5kZXggYWQ3NGU1Ni4uOWYxYTlkZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRyZXNnaWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJlc2dpZC5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKGdldHJlc2dpZCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJlc3VpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRyZXN1aWQuUwppbmRleCA2Y2Y2MGIzLi42MWUxMzcwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJlc3VpZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmVzdWlkLlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkoZ2V0cmVzdWlkKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmxpbWl0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJsaW1pdC5TCmluZGV4IDVlNzViNmIuLmMzYWNmZjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmxpbWl0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRybGltaXQuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShnZXRybGltaXQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3VnZXRybGltaXQsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJ1c2FnZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRydXNhZ2UuUwppbmRleCAyZGZkMDA1Li4wZDcxNWNkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJ1c2FnZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cnVzYWdlLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoZ2V0cnVzYWdlKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9nZXRydXNhZ2UsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHNpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRzaWQuUwppbmRleCAxZjYwMzA5Li5lMTQyYzA1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHNpZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0c2lkLlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKGdldHNpZCkKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9nZXRzaWQsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHNvY2tuYW1lLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKaW5kZXggNWMyMmJkZi4uNjA1MDE5MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0c29ja25hbWUuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShnZXRzb2NrbmFtZSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgICQ2LCAlZWJ4CiAgICAgbW92ICAgICAlZXNwLCAlZWN4CiAgICAgYWRkbCAgICAkMTIsICVlY3gKQEAgLTE3LDkgKzE4LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHNvY2tvcHQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0c29ja29wdC5TCmluZGV4IDljMDJkMjMuLmFlYzQwY2YgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0c29ja29wdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0c29ja29wdC5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGdldHNvY2tvcHQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAkMTUsICVlYngKICAgICBtb3YgICAgICVlc3AsICVlY3gKICAgICBhZGRsICAgICQxMiwgJWVjeApAQCAtMTcsOSArMTgsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGlkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHRpZC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjI2NGIxLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGlkLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGdldHRpZCkKLSAgICBtb3ZsICAgICRfX05SX2dldHRpZCwgJWVheAotICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKLTE6Ci0gICAgcmV0Ci1FTkQoZ2V0dGlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKaW5kZXggMTBjNWRlOS4uYTUwOGMxNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGdldHRpbWVvZmRheSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfZ2V0dGltZW9mZGF5LCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR1aWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dWlkLlMKaW5kZXggZTkxMzA1YS4uY2M2Mjg4NCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR1aWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHVpZC5TCkBAIC05LDkgKzksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICByZXQKIEVORChnZXR1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHhhdHRyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHhhdHRyLlMKaW5kZXggZjQ5MWEwYy4uYTJjZjEzNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0eGF0dHIuUwpAQCAtNCwxNCArNCwxNyBAQAogCiBFTlRSWShnZXR4YXR0cikKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKQEAgLTIyLDkgKzI1LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZXNpCiAgICAgcG9wbCAgICAlZWR4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKaW5kZXggMWExNTlkMy4uMWQwZjExMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbml0X21vZHVsZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShpbml0X21vZHVsZSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKaW5kZXggNDI0Njk4ZC4uOGNhZGM2ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShpbm90aWZ5X2FkZF93YXRjaCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCmluZGV4IDFiNDM3YzYuLjIzNjcxZTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShpbm90aWZ5X2luaXQxKQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX2lub3RpZnlfaW5pdDEsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCmluZGV4IDE4ZWMzY2EuLmMyNDZjMDAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGlub3RpZnlfcm1fd2F0Y2gpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2lub3RpZnlfcm1fd2F0Y2gsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lvcHJpb19nZXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW9wcmlvX2dldC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGZjNzY3Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW9wcmlvX2dldC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShpb3ByaW9fZ2V0KQotICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAotICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgbW92ICAgICAxMiglZXNwKSwgJWVieAotICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKLSAgICBtb3ZsICAgICRfX05SX2lvcHJpb19nZXQsICVlYXgKLSAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4Ci0xOgotICAgIHBvcGwgICAgJWVjeAotICAgIHBvcGwgICAgJWVieAotICAgIHJldAotRU5EKGlvcHJpb19nZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lvcHJpb19zZXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW9wcmlvX3NldC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2VmYWNiLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW9wcmlvX3NldC5TCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShpb3ByaW9fc2V0KQotICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4Ci0gICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAotICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKLSAgICBtb3ZsICAgICRfX05SX2lvcHJpb19zZXQsICVlYXgKLSAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4Ci0xOgotICAgIHBvcGwgICAgJWVkeAotICAgIHBvcGwgICAgJWVjeAotICAgIHBvcGwgICAgJWVieAotICAgIHJldAotRU5EKGlvcHJpb19zZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tpbGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMva2lsbC5TCmluZGV4IDQ5OTE1OGIuLmVkYzljZGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMva2lsbC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMva2lsbC5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGtpbGwpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2tpbGwsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tsb2djdGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMva2xvZ2N0bC5TCmluZGV4IGY0MjJhYzguLjVkZTlhMzFlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tsb2djdGwuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tsb2djdGwuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShrbG9nY3RsKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGdldHhhdHRyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xnZXR4YXR0ci5TCmluZGV4IGRlZjdjNjYuLjU1Njk3YTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGdldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sZ2V0eGF0dHIuUwpAQCAtNCwxNCArNCwxNyBAQAogCiBFTlRSWShsZ2V0eGF0dHIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9saW5rYXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGlua2F0LlMKaW5kZXggZmZiMWI1ZC4uOGIyNjQ2ZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9saW5rYXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xpbmthdC5TCkBAIC00LDE2ICs0LDIwIEBACiAKIEVOVFJZKGxpbmthdCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICBwdXNobCAgICVlZGkKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDIwCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAxNgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAorICAgIHB1c2hsICAgJWVkaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMzIoJWVzcCksICVlZHgKQEAgLTI1LDkgKzI5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWRpCiAgICAgcG9wbCAgICAlZXNpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xpc3Rlbi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9saXN0ZW4uUwppbmRleCA3ZTRkMmYzLi44YWU0MTg2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xpc3Rlbi5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGlzdGVuLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkobGlzdGVuKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgJDQsICVlYngKICAgICBtb3YgICAgICVlc3AsICVlY3gKICAgICBhZGRsICAgICQxMiwgJWVjeApAQCAtMTcsOSArMTgsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGlzdHhhdHRyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xpc3R4YXR0ci5TCmluZGV4IDViOTRhNzIuLmE3M2RjMWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGlzdHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9saXN0eGF0dHIuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShsaXN0eGF0dHIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sbGlzdHhhdHRyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xsaXN0eGF0dHIuUwppbmRleCAxYzY0NTkxLi42M2Q0NDg5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xsaXN0eGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xsaXN0eGF0dHIuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShsbGlzdHhhdHRyKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TCmluZGV4IGQ2N2IyMjEuLjQyYzdlMGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9scmVtb3ZleGF0dHIuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShscmVtb3ZleGF0dHIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2xyZW1vdmV4YXR0ciwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHNlZWsuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHNlZWsuUwppbmRleCA1YTU4YjgxLi5iZmU5ZTYzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xzZWVrLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sc2Vlay5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKGxzZWVrKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHNldHhhdHRyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xzZXR4YXR0ci5TCmluZGV4IGYyZGJhMzkuLmYzNmZjNmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHNldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sc2V0eGF0dHIuUwpAQCAtNCwxNiArNCwyMCBAQAogCiBFTlRSWShsc2V0eGF0dHIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgcHVzaGwgICAlZWRpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAyMAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMTYKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBwdXNobCAgICVlZGkKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAwCiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWR4CkBAIC0yNSw5ICsyOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkaQogICAgIHBvcGwgICAgJWVzaQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tYWR2aXNlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21hZHZpc2UuUwppbmRleCBlZGQzN2I1Li5iNjlmNWQ0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21hZHZpc2UuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21hZHZpc2UuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShtYWR2aXNlKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWluY29yZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9taW5jb3JlLlMKaW5kZXggNDRlYTM2NC4uNmQxZGY2NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9taW5jb3JlLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9taW5jb3JlLlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkobWluY29yZSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rZGlyYXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWtkaXJhdC5TCmluZGV4IGQ4MGUzZmIuLjViNmFlMTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWtkaXJhdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWtkaXJhdC5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKG1rZGlyYXQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ta25vZGF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rbm9kYXQuUwppbmRleCAyMDU2MGRmLi5iMTlkOTcyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rbm9kYXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rbm9kYXQuUwpAQCAtNCwxNCArNCwxNyBAQAogCiBFTlRSWShta25vZGF0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWxvY2suUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWxvY2suUwppbmRleCA3OGNmYTU4Li41MTdlNWE1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21sb2NrLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tbG9jay5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKG1sb2NrKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9tbG9jaywgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWxvY2thbGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWxvY2thbGwuUwppbmRleCA0ZTc4ZmVmLi43NTZjYTE2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21sb2NrYWxsLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tbG9ja2FsbC5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShtbG9ja2FsbCkKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9tbG9ja2FsbCwgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbW91bnQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbW91bnQuUwppbmRleCBjYzFhNTE4Li4wNTM3NTI4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21vdW50LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tb3VudC5TCkBAIC00LDE2ICs0LDIwIEBACiAKIEVOVFJZKG1vdW50KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIHB1c2hsICAgJWVkaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMjAKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgotICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDE2CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCisgICAgcHVzaGwgICAlZWRpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAzMiglZXNwKSwgJWVkeApAQCAtMjUsOSArMjksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZGkKICAgICBwb3BsICAgICVlc2kKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXByb3RlY3QuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXByb3RlY3QuUwppbmRleCA5YzMwYWY0Li4xYmExODZjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21wcm90ZWN0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tcHJvdGVjdC5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKG1wcm90ZWN0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXJlbWFwLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21yZW1hcC5TCmluZGV4IDE0MzllZjUuLjg2OWVmNWQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXJlbWFwLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tcmVtYXAuUwpAQCAtNCwxNCArNCwxNyBAQAogCiBFTlRSWShtcmVtYXApCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tc3luYy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tc3luYy5TCmluZGV4IGQzMzA5NjcuLjgxYmQ1OTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXN5bmMuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21zeW5jLlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkobXN5bmMpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5sb2NrLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL211bmxvY2suUwppbmRleCBjZTYxOTdkLi42N2NhM2ZlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL211bmxvY2suUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL211bmxvY2suUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShtdW5sb2NrKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9tdW5sb2NrLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5sb2NrYWxsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL211bmxvY2thbGwuUwppbmRleCAyMzhmODEyLi5iZjBiZmExIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL211bmxvY2thbGwuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL211bmxvY2thbGwuUwpAQCAtOSw5ICs5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcmV0CiBFTkQobXVubG9ja2FsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXVubWFwLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL211bm1hcC5TCmluZGV4IGJlN2VlYzYuLjI3MmNiNTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXVubWFwLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5tYXAuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShtdW5tYXApCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX211bm1hcCwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbmFub3NsZWVwLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL25hbm9zbGVlcC5TCmluZGV4IDlmYWEwNmIuLjVjNDZhNGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbmFub3NsZWVwLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9uYW5vc2xlZXAuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShuYW5vc2xlZXApCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX25hbm9zbGVlcCwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmJlMWYwLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKHBlcmZfZXZlbnRfb3BlbikKLSAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICBwdXNobCAgICVlZGkKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDIwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAxNgotICAgIG1vdiAgICAgMjQoJWVzcCksICVlYngKLSAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWN4Ci0gICAgbW92ICAgICAzMiglZXNwKSwgJWVkeAotICAgIG1vdiAgICAgMzYoJWVzcCksICVlc2kKLSAgICBtb3YgICAgIDQwKCVlc3ApLCAlZWRpCi0gICAgbW92bCAgICAkX19OUl9wZXJmX2V2ZW50X29wZW4sICVlYXgKLSAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4Ci0xOgotICAgIHBvcGwgICAgJWVkaQotICAgIHBvcGwgICAgJWVzaQotICAgIHBvcGwgICAgJWVkeAotICAgIHBvcGwgICAgJWVjeAotICAgIHBvcGwgICAgJWVieAotICAgIHJldAotRU5EKHBlcmZfZXZlbnRfb3BlbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGVyc29uYWxpdHkuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGVyc29uYWxpdHkuUwppbmRleCA4MTE2ZTJkLi5kNjBjZWQxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wZXJzb25hbGl0eS5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShwZXJzb25hbGl0eSkKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9wZXJzb25hbGl0eSwgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGlwZTIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGlwZTIuUwppbmRleCBjMmUxMWEyLi5lZTQ5ZmY4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BpcGUyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9waXBlMi5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHBpcGUyKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9waXBlMiwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHJjdGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHJjdGwuUwppbmRleCAxYTVkYWNhLi40OTY1OTFlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3ByY3RsLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wcmN0bC5TCkBAIC00LDE2ICs0LDIwIEBACiAKIEVOVFJZKHByY3RsKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIHB1c2hsICAgJWVkaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMjAKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgotICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDE2CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCisgICAgcHVzaGwgICAlZWRpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAzMiglZXNwKSwgJWVkeApAQCAtMjUsOSArMjksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZGkKICAgICBwb3BsICAgICVlc2kKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHJlYWQ2NC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wcmVhZDY0LlMKaW5kZXggMzJhNzZjNS4uNDJlNTRlYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wcmVhZDY0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wcmVhZDY0LlMKQEAgLTQsMTYgKzQsMjAgQEAKIAogRU5UUlkocHJlYWQ2NCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICBwdXNobCAgICVlZGkKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDIwCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAxNgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAorICAgIHB1c2hsICAgJWVkaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMzIoJWVzcCksICVlZHgKQEAgLTI1LDkgKzI5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWRpCiAgICAgcG9wbCAgICAlZXNpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BybGltaXQ2NC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wcmxpbWl0NjQuUwppbmRleCAyMjU2NDI1Li4wN2I1NTg1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BybGltaXQ2NC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHJsaW1pdDY0LlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkocHJsaW1pdDY0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHdyaXRlNjQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHdyaXRlNjQuUwppbmRleCBiMDAzNDM1Li5kNWM5YjMxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3B3cml0ZTY0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wd3JpdGU2NC5TCkBAIC00LDE2ICs0LDIwIEBACiAKIEVOVFJZKHB3cml0ZTY0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIHB1c2hsICAgJWVkaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMjAKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgotICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDE2CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCisgICAgcHVzaGwgICAlZWRpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAzMiglZXNwKSwgJWVkeApAQCAtMjUsOSArMjksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZGkKICAgICBwb3BsICAgICVlc2kKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkLlMKaW5kZXggYWQxYzE5YS4uYzEwYTgzYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkLlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkocmVhZCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWRhaGVhZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkYWhlYWQuUwppbmRleCBhNGQ2MzRmLi4xYzBjY2ZjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWRhaGVhZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZGFoZWFkLlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkocmVhZGFoZWFkKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZGxpbmthdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkbGlua2F0LlMKaW5kZXggMzdkZjhkOC4uNGEyNGMyYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkbGlua2F0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkbGlua2F0LlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkocmVhZGxpbmthdCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKQEAgLTIyLDkgKzI1LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZXNpCiAgICAgcG9wbCAgICAlZWR4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWR2LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWR2LlMKaW5kZXggMDU0NDVjMC4uYzE4YzFiMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkdi5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZHYuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShyZWFkdikKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlY3Zmcm9tLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlY3Zmcm9tLlMKaW5kZXggZGY0ODljOC4uODhjOWQwYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWN2ZnJvbS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVjdmZyb20uUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShyZWN2ZnJvbSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgICQxMiwgJWVieAogICAgIG1vdiAgICAgJWVzcCwgJWVjeAogICAgIGFkZGwgICAgJDEyLCAlZWN4CkBAIC0xNyw5ICsxOCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWN2bW1zZy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWN2bW1zZy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NDA0ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlY3ZtbXNnLlMKQEAgLTAsMCArMSwyNyBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShyZWN2bW1zZykKKyAgICBwdXNobCAgICVlYngKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIG1vdiAgICAgJDE5LCAlZWJ4CisgICAgbW92ICAgICAlZXNwLCAlZWN4CisgICAgYWRkbCAgICAkMTIsICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NvY2tldGNhbGwsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgYWRkbCAgICAkNCwgJWVzcAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORChyZWN2bW1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVjdm1zZy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWN2bXNnLlMKaW5kZXggYTU4N2IwMC4uNmNmY2Q2MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWN2bXNnLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWN2bXNnLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkocmVjdm1zZykKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgICQxNywgJWVieAogICAgIG1vdiAgICAgJWVzcCwgJWVjeAogICAgIGFkZGwgICAgJDEyLCAlZWN4CkBAIC0xNyw5ICsxOCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZW1vdmV4YXR0ci5TCmluZGV4IDk5MTkyZjAuLmIwNjdhOWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkocmVtb3ZleGF0dHIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3JlbW92ZXhhdHRyLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZW5hbWVhdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZW5hbWVhdC5TCmluZGV4IDgzMWIyNGMuLmJiMjE4MWUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVuYW1lYXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlbmFtZWF0LlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkocmVuYW1lYXQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUwppbmRleCAwYjdjMjY5Li5iZTY2Y2ZiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoc2NoZWRfZ2V0X3ByaW9yaXR5X21heCkKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUwppbmRleCBjZTI4ZjhjLi44ZGRlNjdiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoc2NoZWRfZ2V0X3ByaW9yaXR5X21pbikKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCmluZGV4IDJjM2I3YjkuLmQwNTUxZWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoc2NoZWRfZ2V0cGFyYW0pCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NjaGVkX2dldHBhcmFtLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKaW5kZXggNmEzODQyYS4uNWI3YzgxNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShzY2hlZF9nZXRzY2hlZHVsZXIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKaW5kZXggYzEwNTVkYS4uMDczZjNjNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHNjaGVkX3JyX2dldF9pbnRlcnZhbCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCmluZGV4IGJkM2QwYWIuLjc5ZWMxMTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkoc2NoZWRfc2V0YWZmaW5pdHkpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCmluZGV4IDIzMjkyNjguLjk3MDc0N2QgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoc2NoZWRfc2V0cGFyYW0pCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NjaGVkX3NldHBhcmFtLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKaW5kZXggYTNjZThhYi4uZGE1MGFhZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKHNjaGVkX3NldHNjaGVkdWxlcikKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKaW5kZXggZmI1NjNjNC4uZTM4NzhlMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF95aWVsZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfeWllbGQuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoc2NoZWRfeWllbGQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfc2NoZWRfeWllbGQsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmRmaWxlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmRmaWxlLlMKaW5kZXggMjgwYTRhZS4uYzVmOWEyZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kZmlsZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZGZpbGUuUwpAQCAtNCwxNCArNCwxNyBAQAogCiBFTlRSWShzZW5kZmlsZSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKQEAgLTIyLDkgKzI1LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZXNpCiAgICAgcG9wbCAgICAlZWR4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmRmaWxlNjQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZGZpbGU2NC5TCmluZGV4IDM4M2M4YzYuLmJjNWQwZGQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZGZpbGU2NC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZGZpbGU2NC5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKHNlbmRmaWxlNjQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kbW1zZy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kbW1zZy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NGM2YjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmRtbXNnLlMKQEAgLTAsMCArMSwyNyBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZW5kbW1zZykKKyAgICBwdXNobCAgICVlYngKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIG1vdiAgICAgJDIwLCAlZWJ4CisgICAgbW92ICAgICAlZXNwLCAlZWN4CisgICAgYWRkbCAgICAkMTIsICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NvY2tldGNhbGwsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgYWRkbCAgICAkNCwgJWVzcAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORChzZW5kbW1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZG1zZy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kbXNnLlMKaW5kZXggNzBiYWQyOS4uYmYwZDFmYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kbXNnLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kbXNnLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoc2VuZG1zZykKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgICQxNiwgJWVieAogICAgIG1vdiAgICAgJWVzcCwgJWVjeAogICAgIGFkZGwgICAgJDEyLCAlZWN4CkBAIC0xNyw5ICsxOCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kdG8uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZHRvLlMKaW5kZXggZGJlNTIwZC4uYjM5ZWFmMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kdG8uUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmR0by5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHNlbmR0bykKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgICQxMSwgJWVieAogICAgIG1vdiAgICAgJWVzcCwgJWVjeAogICAgIGFkZGwgICAgJDEyLCAlZWN4CkBAIC0xNyw5ICsxOCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRmc2dpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRmc2dpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjODFmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGZzZ2lkLlMKQEAgLTAsMCArMSwyMSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRmc2dpZCkKKyAgICBwdXNobCAgICVlYngKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9zZXRmc2dpZCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBhZGRsICAgICQ0LCAlZXNwCisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldAorRU5EKHNldGZzZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRmc3VpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRmc3VpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZjc4NTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGZzdWlkLlMKQEAgLTAsMCArMSwyMSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRmc3VpZCkKKyAgICBwdXNobCAgICVlYngKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9zZXRmc3VpZCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBhZGRsICAgICQ0LCAlZXNwCisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldAorRU5EKHNldGZzdWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRnaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0Z2lkLlMKaW5kZXggNjlhYzE1Yi4uY2U2ZWUyNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRnaWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGdpZC5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShzZXRnaWQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfc2V0Z2lkMzIsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGdyb3Vwcy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRncm91cHMuUwppbmRleCBmNzA0YzQ2Li43ZTQ2YWQwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGdyb3Vwcy5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0Z3JvdXBzLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoc2V0Z3JvdXBzKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zZXRncm91cHMzMiwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0aXRpbWVyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGl0aW1lci5TCmluZGV4IDE1NzM4MTYuLjM3MGFiNWUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0aXRpbWVyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRpdGltZXIuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShzZXRpdGltZXIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRucy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRucy5TCmluZGV4IDJjMzlhMjEuLjczNmRmNTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0bnMuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldG5zLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoc2V0bnMpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NldG5zLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwZ2lkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHBnaWQuUwppbmRleCBhZTY5NjMzLi4wYmZmMTBhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHBnaWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHBnaWQuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShzZXRwZ2lkKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zZXRwZ2lkLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwcmlvcml0eS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwcmlvcml0eS5TCmluZGV4IGI1OGNkMTMuLjQyMzM4NzEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cHJpb3JpdHkuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHByaW9yaXR5LlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkoc2V0cHJpb3JpdHkpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZWdpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZWdpZC5TCmluZGV4IDU2MWE2NTguLmE1NmNjZmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmVnaWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlZ2lkLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoc2V0cmVnaWQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NldHJlZ2lkMzIsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlc2dpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXNnaWQuUwppbmRleCBhMjEwOTc1Li4yMjk5ODMxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlc2dpZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmVzZ2lkLlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkoc2V0cmVzZ2lkKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmVzdWlkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlc3VpZC5TCmluZGV4IDkyMGU2OGIuLjg2MjRlMTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmVzdWlkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXN1aWQuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShzZXRyZXN1aWQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXVpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXVpZC5TCmluZGV4IDdmOTExYWQuLjlmNmUxMTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmV1aWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJldWlkLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoc2V0cmV1aWQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NldHJldWlkMzIsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJsaW1pdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRybGltaXQuUwppbmRleCBlMTAzZWNmLi4yMDI0Njg4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJsaW1pdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmxpbWl0LlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoc2V0cmxpbWl0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zZXRybGltaXQsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHNpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRzaWQuUwppbmRleCAzODJhZDBjLi5kZGE2YWQ4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHNpZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0c2lkLlMKQEAgLTksOSArOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHJldAogRU5EKHNldHNpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0c29ja29wdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRzb2Nrb3B0LlMKaW5kZXggZjU2ZjgxMi4uMjllNzNiYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRzb2Nrb3B0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRzb2Nrb3B0LlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoc2V0c29ja29wdCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgICQxNCwgJWVieAogICAgIG1vdiAgICAgJWVzcCwgJWVjeAogICAgIGFkZGwgICAgJDEyLCAlZWN4CkBAIC0xNyw5ICsxOCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKaW5kZXggMWFlNGQ1OC4uNGE4NjFhYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHNldHRpbWVvZmRheSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfc2V0dGltZW9mZGF5LCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXR1aWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0dWlkLlMKaW5kZXggNjU0OWZkNC4uMDQ4ZTBjMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXR1aWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHVpZC5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShzZXR1aWQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfc2V0dWlkMzIsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHhhdHRyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHhhdHRyLlMKaW5kZXggZmFlMDRkZi4uMWU4N2JmMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0eGF0dHIuUwpAQCAtNCwxNiArNCwyMCBAQAogCiBFTlRSWShzZXR4YXR0cikKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICBwdXNobCAgICVlZGkKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDIwCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAxNgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAorICAgIHB1c2hsICAgJWVkaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMzIoJWVzcCksICVlZHgKQEAgLTI1LDkgKzI5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWRpCiAgICAgcG9wbCAgICAlZXNpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NodXRkb3duLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NodXRkb3duLlMKaW5kZXggMTNlOGZkOS4uZjIyNGZjNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaHV0ZG93bi5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2h1dGRvd24uUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShzaHV0ZG93bikKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgICQxMywgJWVieAogICAgIG1vdiAgICAgJWVzcCwgJWVjeAogICAgIGFkZGwgICAgJDEyLCAlZWN4CkBAIC0xNyw5ICsxOCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaWdhbHRzdGFjay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaWdhbHRzdGFjay5TCmluZGV4IDcxZmRiMTIuLjg3NWVmOGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lnYWx0c3RhY2suUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoc2lnYWx0c3RhY2spCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NpZ2FsdHN0YWNrLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaWduYWxmZDQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lnbmFsZmQ0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZTZjNjguLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaWduYWxmZDQuUworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoc2lnbmFsZmQ0KQotICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgotICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKLSAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4Ci0gICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAotICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKLSAgICBtb3ZsICAgICRfX05SX3NpZ25hbGZkNCwgJWVheAotICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKLTE6Ci0gICAgcG9wbCAgICAlZXNpCi0gICAgcG9wbCAgICAlZWR4Ci0gICAgcG9wbCAgICAlZWN4Ci0gICAgcG9wbCAgICAlZWJ4Ci0gICAgcmV0Ci1FTkQoc2lnbmFsZmQ0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zb2NrZXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc29ja2V0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MjY4MWUuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zb2NrZXQuUworKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoc29ja2V0KQotICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAotICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgbW92ICAgICAkMSwgJWVieAotICAgIG1vdiAgICAgJWVzcCwgJWVjeAotICAgIGFkZGwgICAgJDEyLCAlZWN4Ci0gICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAotMToKLSAgICBwb3BsICAgICVlY3gKLSAgICBwb3BsICAgICVlYngKLSAgICByZXQKLUVORChzb2NrZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NvY2tldHBhaXIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc29ja2V0cGFpci5TCmluZGV4IDM2ODFjNGYuLjRjNTE1NGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc29ja2V0cGFpci5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc29ja2V0cGFpci5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHNvY2tldHBhaXIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAkOCwgJWVieAogICAgIG1vdiAgICAgJWVzcCwgJWVjeAogICAgIGFkZGwgICAgJDEyLCAlZWN4CkBAIC0xNyw5ICsxOCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zcGxpY2UuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3BsaWNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjOTAzNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3BsaWNlLlMKQEAgLTAsMCArMSw0NiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzcGxpY2UpCisgICAgcHVzaGwgICAlZWJ4CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAorICAgIHB1c2hsICAgJWVkaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDAKKyAgICBwdXNobCAgICVlYnAKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJwLCAwCisgICAgbW92ICAgICAyOCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDM2KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICA0MCglZXNwKSwgJWVzaQorICAgIG1vdiAgICAgNDQoJWVzcCksICVlZGkKKyAgICBtb3YgICAgIDQ4KCVlc3ApLCAlZWJwCisgICAgbW92bCAgICAkX19OUl9zcGxpY2UsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgYWRkbCAgICAkNCwgJWVzcAorMToKKyAgICBwb3BsICAgICVlYnAKKyAgICBwb3BsICAgICVlZGkKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORChzcGxpY2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N3YXBvZmYuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3dhcG9mZi5TCmluZGV4IDMxZjhiZTEuLjA3ODg1MjkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3dhcG9mZi5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3dhcG9mZi5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShzd2Fwb2ZmKQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX3N3YXBvZmYsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N3YXBvbi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zd2Fwb24uUwppbmRleCA2ODdjNDkyLi4xMDcwZDhlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N3YXBvbi5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3dhcG9uLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoc3dhcG9uKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zd2Fwb24sICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N5bWxpbmthdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zeW1saW5rYXQuUwppbmRleCAxZjMzZjdiLi5lN2ZlNjllIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N5bWxpbmthdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3ltbGlua2F0LlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkoc3ltbGlua2F0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3luYy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zeW5jLlMKaW5kZXggZjgwMjk2Zi4uMjUyYzY2NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zeW5jLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zeW5jLlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKHN5bmMpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfc3luYywgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3lzaW5mby5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zeXNpbmZvLlMKaW5kZXggOGI5YTIzZS4uZjU5YTBjMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zeXNpbmZvLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zeXNpbmZvLlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKHN5c2luZm8pCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfc3lzaW5mbywgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGVlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RlZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0N2M0NjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RlZS5TCkBAIC0wLDAgKzEsMzYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkodGVlKQorICAgIHB1c2hsICAgJWVieAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAorICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCisgICAgbW92bCAgICAkX19OUl90ZWUsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgYWRkbCAgICAkNCwgJWVzcAorMToKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORCh0ZWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3Rna2lsbC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90Z2tpbGwuUwppbmRleCBlNTc2NDVjLi43YTQzYTAxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3Rna2lsbC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGdraWxsLlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkodGdraWxsKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUwppbmRleCAzM2IyOTgwLi5hZDA5OWE1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHRpbWVyZmRfY3JlYXRlKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl90aW1lcmZkX2NyZWF0ZSwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCmluZGV4IDY2YjAwNGIuLmM2NzliN2MgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWSh0aW1lcmZkX2dldHRpbWUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3RpbWVyZmRfZ2V0dGltZSwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TCmluZGV4IDNmNDAzNWUuLjRlODg5ZWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUwpAQCAtNCwxNCArNCwxNyBAQAogCiBFTlRSWSh0aW1lcmZkX3NldHRpbWUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcy5TCmluZGV4IGI5ZTI4NDUuLjBiYTBiNmYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXMuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVzLlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKHRpbWVzKQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX3RpbWVzLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90a2lsbC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90a2lsbC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGRhMzY5Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGtpbGwuUworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkodGtpbGwpCi0gICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4Ci0gICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAotICAgIG1vdmwgICAgJF9fTlJfdGtpbGwsICVlYXgKLSAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4Ci0xOgotICAgIHBvcGwgICAgJWVjeAotICAgIHBvcGwgICAgJWVieAotICAgIHJldAotRU5EKHRraWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90cnVuY2F0ZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90cnVuY2F0ZS5TCmluZGV4IDAxOTg5NGMuLjMxZmVjMTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdHJ1bmNhdGUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RydW5jYXRlLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkodHJ1bmNhdGUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3RydW5jYXRlLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90cnVuY2F0ZTY0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RydW5jYXRlNjQuUwppbmRleCA5OWI3MWIwLi40NWUyNGQwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RydW5jYXRlNjQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RydW5jYXRlNjQuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWSh0cnVuY2F0ZTY0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW1hc2suUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW1hc2suUwppbmRleCA0ODViMzI2Li45YjRkM2M3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VtYXNrLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bWFzay5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWSh1bWFzaykKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl91bWFzaywgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW1vdW50Mi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bW91bnQyLlMKaW5kZXggMTAwZDM4Yy4uMTM3NTdhYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bW91bnQyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bW91bnQyLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkodW1vdW50MikKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfdW1vdW50MiwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW5hbWUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW5hbWUuUwppbmRleCBmMWJhM2I5Li5kYWI3ZTBkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VuYW1lLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bmFtZS5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWSh1bmFtZSkKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl91bmFtZSwgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW5saW5rYXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW5saW5rYXQuUwppbmRleCAxYTU3M2Q0Li42ZmFmNzFlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VubGlua2F0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bmxpbmthdC5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKHVubGlua2F0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW5zaGFyZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bnNoYXJlLlMKaW5kZXggOTVmZGJmNi4uYjcyNDc5OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bnNoYXJlLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bnNoYXJlLlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKHVuc2hhcmUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfdW5zaGFyZSwgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdXRpbWVuc2F0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3V0aW1lbnNhdC5TCmluZGV4IDA5OWY1NTEuLjA3ZWNhNDUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdXRpbWVuc2F0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91dGltZW5zYXQuUwpAQCAtNCwxNCArNCwxNyBAQAogCiBFTlRSWSh1dGltZW5zYXQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy92bXNwbGljZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy92bXNwbGljZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMmNjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3Ztc3BsaWNlLlMKQEAgLTAsMCArMSwzNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWSh2bXNwbGljZSkKKyAgICBwdXNobCAgICVlYngKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQorICAgIG1vdmwgICAgJF9fTlJfdm1zcGxpY2UsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgYWRkbCAgICAkNCwgJWVzcAorMToKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORCh2bXNwbGljZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd2FpdDQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd2FpdDQuUwppbmRleCBiNjE5NmY4Li5iZWQ3YzQwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3dhaXQ0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy93YWl0NC5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKHdhaXQ0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd3JpdGUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd3JpdGUuUwppbmRleCA5NzFjYjMwLi5lMTQ3MjA4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3dyaXRlLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy93cml0ZS5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKHdyaXRlKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd3JpdGV2LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3dyaXRldi5TCmluZGV4IGFiOGU3MDUuLjA3YmE3YjUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd3JpdGV2LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy93cml0ZXYuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWSh3cml0ZXYpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni94ODYubWsgYi9saWJjL2FyY2gteDg2L3g4Ni5tawppbmRleCA5Yzc0MDg0Li4yYTA2MDlkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3g4Ni5taworKysgYi9saWJjL2FyY2gteDg2L3g4Ni5tawpAQCAtMSw4ICsxLDMxIEBACi1fTElCQ19BUkNIX0NPTU1PTl9TUkNfRklMRVMgOj0gXAorIyB4ODYgc3BlY2lmaWMgY29uZmlncworCisjIFRoZXNlIGFyZSBzaGFyZWQgYnkgYWxsIHRoZSAzMi1iaXQgdGFyZ2V0cywgYnV0IG5vdCB0aGUgNjQtYml0IG9uZXMuCitsaWJjX2NvbW1vbl9zcmNfZmlsZXNfeDg2IDo9IFwKKyAgICBiaW9uaWMvbGVnYWN5XzMyX2JpdF9zdXBwb3J0LmNwcCBcCisgICAgYmlvbmljL25ka19jcnVmdC5jcHAgXAorICAgIGJpb25pYy90aW1lNjQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXR3LmMgXAorCisjIEZvcnRpZnkgaW1wbGVtZW50YXRpb25zIG9mIGxpYmMgZnVuY3Rpb25zLgorbGliY19jb21tb25fc3JjX2ZpbGVzX3g4NiArPSBcCisgICAgYmlvbmljL19fbWVtY3B5X2Noay5jcHAgXAorICAgIGJpb25pYy9fX21lbXNldF9jaGsuY3BwIFwKKyAgICBiaW9uaWMvX19zdHJjcHlfY2hrLmNwcCBcCisgICAgYmlvbmljL19fc3RyY2F0X2Noay5jcHAgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1tb3ZlLmMgXAorCisKKyMgVGhlc2UgYXJlIHNoYXJlZCBieSBhbGwgdGhlIDMyLWJpdCB0YXJnZXRzLCBidXQgbm90IHRoZSA2NC1iaXQgb25lcy4KK2xpYmNfYmlvbmljX3NyY19maWxlc194ODYgOj0gXAorICAgIGJpb25pYy9tbWFwLmNwcAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyBDUFUgc3BlY2lmaWMgc291cmNlIGZpbGVzCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfeDg2ICs9IFwKICAgICBhcmNoLXg4Ni9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUyBcCiAgICAgYXJjaC14ODYvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBcCi0gICAgYXJjaC14ODYvYmlvbmljL2Z1dGV4X3g4Ni5TIFwKLSAgICBhcmNoLXg4Ni9iaW9uaWMvX19nZXRfc3AuUyBcCisgICAgYXJjaC14ODYvYmlvbmljL2xpYmdjY19jb21wYXQuYyBcCiAgICAgYXJjaC14ODYvYmlvbmljL19zZXRqbXAuUyBcCiAgICAgYXJjaC14ODYvYmlvbmljL3NldGptcC5TIFwKICAgICBhcmNoLXg4Ni9iaW9uaWMvX19zZXRfdGxzLmMgXApAQCAtMTAsNjAgKzMzLDMwIEBACiAgICAgYXJjaC14ODYvYmlvbmljL3N5c2NhbGwuUyBcCiAgICAgYXJjaC14ODYvYmlvbmljL3Zmb3JrLlMgXAogCi1pZmVxICgkKEFSQ0hfWDg2X0hBVkVfU1NTRTMpLHRydWUpCi1fTElCQ19BUkNIX0NPTU1PTl9TUkNfRklMRVMgKz0gXAotCWFyY2gteDg2L3N0cmluZy9zc3NlMy1tZW1jcHktYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtbW92ZS1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc3NlMy1iY29weS1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJuY2F0LWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cm5jcHktYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RybGNhdC1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJsY3B5LWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmNtcC1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJuY21wLWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmNhdC1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJjcHktYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtY21wLWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXdtZW1jbXAtYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtY21wMTYtYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NzZTMtd2NzY2F0LWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXdjc2NweS1hdG9tLlMKLWVsc2UKLV9MSUJDX0FSQ0hfQ09NTU9OX1NSQ19GSUxFUyArPSBcCi0JYXJjaC14ODYvc3RyaW5nL21lbWNweS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvbWVtbW92ZS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvYmNvcHkuUyBcCi0JYXJjaC14ODYvc3RyaW5nL3N0cmNtcC5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3RybmNtcC5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3RyY2F0LlMgXAotCWFyY2gteDg2L3N0cmluZy9tZW1jbXAuUyBcCi0Jc3RyaW5nL21lbWNtcDE2LmMgXAotCXN0cmluZy9zdHJjcHkuYyBcCi0Jc3RyaW5nL3N0cm5jYXQuYyBcCi0Jc3RyaW5nL3N0cm5jcHkuYyBcCi0Jc3RyaW5nL3N0cmxjYXQuYyBcCi0Jc3RyaW5nL3N0cmxjcHkuYyBcCi0JdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY3B5LmMgXAotCXVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NhdC5jIFwKLQl1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtY21wLmMKKyMjIEFSQ0ggdmFyaWFudCBzcGVjaWZpYyBzb3VyY2UgZmlsZXMKK2FyY2hfdmFyaWFudF9tayA6PSAkKExPQ0FMX1BBVEgpL2FyY2gteDg2LyQoVEFSR0VUX0FSQ0hfVkFSSUFOVCkvJChUQVJHRVRfQVJDSF9WQVJJQU5UKS5taworaWZlcSAoJCh3aWxkY2FyZCAkKGFyY2hfdmFyaWFudF9taykpLCkKKyAgICBhcmNoX3ZhcmlhbnRfbWsgOj0gJChMT0NBTF9QQVRIKS9hcmNoLXg4Ni9nZW5lcmljL2dlbmVyaWMubWsKIGVuZGlmCitpbmNsdWRlICQoYXJjaF92YXJpYW50X21rKQorbGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMgKz0gJChhcmNoX3ZhcmlhbnRfbWspCiAKLV9MSUJDX0FSQ0hfQ09NTU9OX1NSQ19GSUxFUyArPSBcCi0JYXJjaC14ODYvc3RyaW5nL3NzZTItbWVtc2V0LWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3NzZTItYnplcm8tYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NlMi1tZW1jaHItYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NlMi1tZW1yY2hyLWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3NzZTItc3RyY2hyLWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3NzZTItc3RycmNoci1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc2UyLWluZGV4LWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3NzZTItc3RybGVuLWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3NzZTItc3Rybmxlbi1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc2UyLXdjc2Noci1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc2UyLXdjc3JjaHItYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NlMi13Y3NsZW4tYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NlMi13Y3NjbXAtYXRvbS5TIFwKK2xpYmNfbmV0YnNkX3NyY19maWxlc194ODYgOj0gXAorICAgIHVwc3RyZWFtLW5ldGJzZC9jb21tb24vbGliL2xpYmMvaGFzaC9zaGExL3NoYTEuYyBcCiAKLV9MSUJDX0FSQ0hfU1RBVElDX1NSQ19GSUxFUyA6PSBcCi0gICAgYmlvbmljL2RsX2l0ZXJhdGVfcGhkcl9zdGF0aWMuYyBcCithcmNoX3ZhcmlhbnRfbWsgOj0KIAotX0xJQkNfQVJDSF9EWU5BTUlDX1NSQ19GSUxFUyA6PQorbGliY19jcnRfdGFyZ2V0X2NmbGFnc194ODYgOj0gXAorICAgIC1tMzIgXAorICAgIC1JJChMT0NBTF9QQVRIKS9hcmNoLXg4Ni9pbmNsdWRlCisKK2xpYmNfY3J0X3RhcmdldF9sZGZsYWdzX3g4NiA6PSAtbWVsZl9pMzg2CisKK2xpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9maWxlX3g4NiA6PSBcCisgICAgICQoTE9DQUxfUEFUSCkvYXJjaC1jb21tb24vYmlvbmljL2NydGJlZ2luLmMKKworbGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX3NvX2ZpbGVfeDg2IDo9IFwKKyAgICAkKExPQ0FMX1BBVEgpL2FyY2gtY29tbW9uL2Jpb25pYy9jcnRiZWdpbl9zby5jCisKK2xpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3NfeDg2IDo9IFwKKyAgICAtZlBJQwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUyBiL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL19fYmlvbmljX2Nsb25lLlMKaW5kZXggNzY5MjAxMy4uMGM3M2U1ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUworKysgYi9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TCkBAIC0yNiwxNCArMjYsMTAgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogLy8gcGlkX3QgX19iaW9uaWNfY2xvbmUoaW50IGZsYWdzLCB2b2lkKiBjaGlsZF9zdGFjaywgcGlkX3QqIHBhcmVudF90aWQsIHZvaWQqIHRscywgcGlkX3QqIGNoaWxkX3RpZCwgaW50ICgqZm4pKHZvaWQqKSwgdm9pZCogYXJnKTsKIEVOVFJZKF9fYmlvbmljX2Nsb25lKQotICAgICAgICAjIEVuZm9yY2UgMTYtYnl0ZSBhbGlnbm1lbnQgZm9yIGNoaWxkIHN0YWNrLgotICAgICAgICBhbmRxICAgICR+MTUsICVyc2kKLQogICAgICAgICAjIENvcHkgJ2ZuJyBhbmQgJ2FyZycgb250byB0aGUgY2hpbGQgc3RhY2suCiAgICAgICAgIG1vdnEgICAgJXI5LCAtMTYoJXJzaSkgICMgZm4KICAgICAgICAgbW92cSAgICA4KCVyc3ApLCAlcmF4ICAgIyBSZWFkICdhcmcnLgpAQCAtNDksMjUgKzQ1LDMzIEBACiAgICAgICAgICMgTWFrZSB0aGUgc3lzdGVtIGNhbGwuCiAgICAgICAgIG1vdmwgICAgJF9fTlJfY2xvbmUsICVlYXgKICAgICAgICAgc3lzY2FsbAotICAgICAgICB0ZXN0bCAgICVlYXgsICVlYXgKLSAgICAgICAgam5zICAgICAxZgorCisgICAgICAgICMgQ2hlY2sgcmVzdWx0LgorICAgICAgICB0ZXN0cSAgICVyYXgsICVyYXgKKyAgICAgICAganogICAgICAuTF9iY19jaGlsZAorICAgICAgICBqZyAgICAgIC5MX2JjX3BhcmVudAogCiAgICAgICAgICMgQW4gZXJyb3Igb2NjdXJyZWQsIHNldCBlcnJubyBhbmQgcmV0dXJuIC0xLgogICAgICAgICBuZWdsICAgICVlYXgKICAgICAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICAgICAgb3JsICAgICAkLTEsICVlYXgKLSAgICAgICAgam1wICAgICAyZgotMToKLSAgICAgICAgam56ICAgICAyZgorICAgICAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgICAgIHJldAogCi0gICAgICAgICMgV2UncmUgaW4gdGhlIGNoaWxkIG5vdywgc28gY2FsbCBfX2Jpb25pY19jbG9uZV9lbnRyeQorLkxfYmNfY2hpbGQ6CisgICAgICAgICMgV2UgZG9uJ3Qgd2FudCBhbnlvbmUgdG8gdW53aW5kIHBhc3QgdGhpcyBwb2ludC4KKyAgICAgICAgLmNmaV91bmRlZmluZWQgJXJpcAorICAgICAgICAuY2ZpX3VuZGVmaW5lZCAlcmJwCisKKyAgICAgICAgIyBXZSdyZSBpbiB0aGUgY2hpbGQgbm93LCBzbyBjYWxsIF9fc3RhcnRfdGhyZWFkCiAgICAgICAgICMgd2l0aCB0aGUgYXJndW1lbnRzIGZyb20gdGhlIGNoaWxkIHN0YWNrIG1vdmVkIGludG8KICAgICAgICAgIyB0aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXJzLgogICAgICAgICBwb3BxICAgICVyZGkgICMgZm4KICAgICAgICAgcG9wcSAgICAlcnNpICAjIGFyZwotICAgICAgICBjYWxsICAgIF9fYmlvbmljX2Nsb25lX2VudHJ5CisgICAgICAgIGNhbGwgICAgX19zdGFydF90aHJlYWQKICAgICAgICAgaGx0Ci0yOgorCisuTF9iY19wYXJlbnQ6CisgICAgICAgICMgV2UncmUgdGhlIHBhcmVudDsgbm90aGluZyB0byBkby4KICAgICAgICAgcmV0CiBFTkQoX19iaW9uaWNfY2xvbmUpCisuaGlkZGVuIF9fYmlvbmljX2Nsb25lCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9fX2dldF9zcC5TIGIvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvX19nZXRfc3AuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM2OTNiMy4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9fX2dldF9zcC5TCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotRU5UUlkoX19nZXRfc3ApCi0gIG1vdiAgJXJzcCwgJXJheAotICByZXQKLUVORChfX2dldF9zcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL19fcnRfc2lncmV0dXJuLlMgYi9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9fX3J0X3NpZ3JldHVybi5TCmluZGV4IGUwM2JiODguLmVkZGNlYjEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL19fcnRfc2lncmV0dXJuLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvX19ydF9zaWdyZXR1cm4uUwpAQCAtMjYsMTEgKzI2LDkgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotRU5UUlkoX19ydF9zaWdyZXR1cm4pCi0gIC5oaWRkZW4gX0NfTEFCRUwoX19ydF9zaWdyZXR1cm4pIC8vIFRPRE86IGFkZCBhbiBFTlRSWV9QUklWQVRFIG1hY3JvIGZvciB4ODZfNjQuCitFTlRSWV9QUklWQVRFKF9fcnRfc2lncmV0dXJuKQogICBtb3ZsICRfX05SX3J0X3NpZ3JldHVybiwgJWVheAogICBzeXNjYWxsCiBFTkQoX19ydF9zaWdyZXR1cm4pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9fX3NldF90bHMuYyBiL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL19fc2V0X3Rscy5jCmluZGV4IDlhNjk0NDkuLjEwZmQzNmYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL19fc2V0X3Rscy5jCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL19fc2V0X3Rscy5jCkBAIC0yNiwxMyArMjYsMTIgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KICNpbmNsdWRlIDxhc20vcHJjdGwuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KIAogZXh0ZXJuIGludCBfX2FyY2hfcHJjdGwoaW50LCB1bnNpZ25lZCBsb25nKTsKIAotaW50IF9fc2V0X3Rscyh2b2lkKiBwdHIpIHsKLSAgLy8gV2UgYWxzbyBuZWVkIHRvIHdyaXRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgdGxzIHRvIHB0clswXS4KLSAgKih2b2lkKiopIHB0ciA9IHB0cjsKK19fTElCQ19ISURERU5fXyBpbnQgX19zZXRfdGxzKHZvaWQqIHB0cikgewogICByZXR1cm4gX19hcmNoX3ByY3RsKEFSQ0hfU0VUX0ZTLCAodWludHB0cl90KSBwdHIpOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TIGIvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TCmluZGV4IGY3YmM5NjIuLmQxZjUzYWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUworKysgYi9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogLy8gdm9pZCBfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKHZvaWQqIHN0YWNrQmFzZSwgc2l6ZV90IHN0YWNrU2l6ZSkKLUVOVFJZKF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24pCitFTlRSWV9QUklWQVRFKF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24pCiAgIG1vdiAkX19OUl9tdW5tYXAsICVlYXgKICAgc3lzY2FsbAogICAvLyBJZiBtdW5tYXAgZmFpbGVkLCB3ZSBpZ25vcmUgdGhlIGZhaWx1cmUgYW5kIGV4aXQgYW55d2F5LgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvX3NldGptcC5TIGIvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvX3NldGptcC5TCmluZGV4IGU5YjhkYmIuLmM2MTcwMzAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL19zZXRqbXAuUworKysgYi9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9fc2V0am1wLlMKQEAgLTM2LDggKzM2LDcgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9zZXRqbXAuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL2Z1dGV4X3g4Nl82NC5TIGIvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvZnV0ZXhfeDg2XzY0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NWQ1ODMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvZnV0ZXhfeDg2XzY0LlMKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotI2RlZmluZSBGVVRFWF9XQUlUIDAKLSNkZWZpbmUgRlVURVhfV0FLRSAxCi0KLS8vIGludCBfX2Z1dGV4X3dhaXQodm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgdmFsLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqIHRpbWVvdXQpCi1FTlRSWShfX2Z1dGV4X3dhaXQpCi0gICAgbW92ICAgICAlcmR4LCAlcjEwICAgICAgICAgICAvKiB0aW1lb3V0ICovCi0gICAgbW92ICAgICAlZXNpLCAlZWR4ICAgICAgICAgICAvKiB2YWwgKi8KLSAgICBtb3YgICAgICRGVVRFWF9XQUlULCAlZXNpICAgIC8qIG9wICovCi0gICAgbW92ICAgICAkX19OUl9mdXRleCwgJWVheAotICAgIHN5c2NhbGwKLSAgICByZXQKLUVORChfX2Z1dGV4X3dhaXQpCi0KLS8vIGludCBfX2Z1dGV4X3dha2Uodm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgY291bnQpCi1FTlRSWShfX2Z1dGV4X3dha2UpCi0gICAgbW92ICAgICAlZXNpLCAlZWR4Ci0gICAgbW92ICAgICAkRlVURVhfV0FLRSwgJWVzaQotICAgIG1vdiAgICAgJF9fTlJfZnV0ZXgsICVlYXgKLSAgICBzeXNjYWxsCi0gICAgcmV0Ci1FTkQoX19mdXRleF93YWtlKQotCi0vLyBpbnQgX19mdXRleF9zeXNjYWxsMyh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCBvcCwgaW50IGNvdW50KQotRU5UUlkoX19mdXRleF9zeXNjYWxsMykKLSAgICBtb3YgICAgICRfX05SX2Z1dGV4LCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIHJldAotRU5EKF9fZnV0ZXhfc3lzY2FsbDMpCi0KLS8vIGludCBfX2Z1dGV4X3N5c2NhbGw0KHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IG9wLCBpbnQgdmFsLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqIHRpbWVvdXQpCi1FTlRSWShfX2Z1dGV4X3N5c2NhbGw0KQotICAgIG1vdiAgICAgJXJjeCwgJXIxMCAgICAgIC8qIHRpbWVvdXQgKi8KLSAgICBtb3YgICAgICRfX05SX2Z1dGV4LCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIHJldAotRU5EKF9fZnV0ZXhfc3lzY2FsbDQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9zZXRqbXAuUyBiL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL3NldGptcC5TCmluZGV4IDRkZDkwMjguLmYzNTY4NzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL3NldGptcC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL3NldGptcC5TCkBAIC0zNiw4ICszNiw3IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogI2luY2x1ZGUgPG1hY2hpbmUvc2V0am1wLmg+CiAKIC8qCkBAIC01MywxMSArNTIsNyBAQAogRU5UUlkoc2V0am1wKQogCXB1c2hxCSVyZGkKIAl4b3JxCSVyZGksJXJkaQotI2lmZGVmIF9fUElDX18KLQljYWxsCVBJQ19QTFQoX0NfTEFCRUwoc2lnYmxvY2spKQotI2Vsc2UKLQljYWxsCV9DX0xBQkVMKHNpZ2Jsb2NrKQotI2VuZGlmCisJY2FsbAlQSUNfUExUKHNpZ2Jsb2NrKQogCXBvcHEJJXJkaQogCW1vdnEJJXJheCwoX0pCX1NJR01BU0sgKiA4KSglcmRpKQogCkBAIC04MSwxMSArNzYsNyBAQAogCiAJbW92cQkoX0pCX1NJR01BU0sgKiA4KSglcmRpKSwlcmRpCiAJcHVzaHEJJXI4Ci0jaWZkZWYgX19QSUNfXwotCWNhbGwJUElDX1BMVChfQ19MQUJFTChzaWdzZXRtYXNrKSkKLSNlbHNlCi0JY2FsbAlfQ19MQUJFTChzaWdzZXRtYXNrKQotI2VuZGlmCisJY2FsbAlQSUNfUExUKHNpZ3NldG1hc2spCiAJcG9wcQklcjgKIAltb3ZxCShfSkJfUkJYICogOCkoJXIxMiksJXJieAogCW1vdnEJKF9KQl9SQlAgKiA4KSglcjEyKSwlcmJwCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9zaWdzZXRqbXAuUyBiL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL3NpZ3NldGptcC5TCmluZGV4IDg0MmQ2ZmYuLjU3MWZlYTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL3NpZ3NldGptcC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL3NpZ3NldGptcC5TCkBAIC0zNyw3ICszNyw3IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KICNpbmNsdWRlIDxtYWNoaW5lL3NldGptcC5oPgogCiAvKgpAQCAtNTcsMTEgKzU3LDcgQEAKIAogCXB1c2hxCSVyZGkKIAl4b3JxCSVyZGksJXJkaQotI2lmZGVmIF9fUElDX18KLQljYWxsCVBJQ19QTFQoX0NfTEFCRUwoc2lnYmxvY2spKQotI2Vsc2UKLQljYWxsCV9DX0xBQkVMKHNpZ2Jsb2NrKQotI2VuZGlmCisJY2FsbAlQSUNfUExUKHNpZ2Jsb2NrKQogCXBvcHEJJXJkaQogCW1vdnEJJXJheCwoX0pCX1NJR01BU0sgKiA4KSglcmRpKQogCkBAIC04NiwxMSArODIsNyBAQAogCWp6ICAgICAgMmYKIAogCW1vdnEJKF9KQl9TSUdNQVNLICogOCkoJXJkaSksJXJkaQotI2lmZGVmIF9fUElDX18KLQljYWxsCVBJQ19QTFQoX0NfTEFCRUwoc2lnc2V0bWFzaykpCi0jZWxzZQotCWNhbGwJX0NfTEFCRUwoc2lnc2V0bWFzaykKLSNlbmRpZgorCWNhbGwJUElDX1BMVChzaWdzZXRtYXNrKQogMjoJcG9wcQklcmF4CiAJbW92cQkoX0pCX1JCWCAqIDgpKCVyMTIpLCVyYngKIAltb3ZxCShfSkJfUkJQICogOCkoJXIxMiksJXJicApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvc3lzY2FsbC5TIGIvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvc3lzY2FsbC5TCmluZGV4IGE5OGE0MzYuLjg3OTM5YmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL3N5c2NhbGwuUworKysgYi9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9zeXNjYWxsLlMKQEAgLTU3LDggKzU3LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzeXNjYWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvdmZvcmsuUyBiL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL3Zmb3JrLlMKaW5kZXggYjMyM2YzMC4uMTI5ZjFkYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvdmZvcmsuUworKysgYi9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy92Zm9yay5TCkBAIC0zOSw4ICszOSw3IEBACiAgIGpiICAgICAgMWYKICAgbmVnbCAgICAlZWF4CiAgIG1vdmwgICAgJWVheCwgJWVkaQotICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gIG9ycSAgICAgJC0xLCAlcmF4CisgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgIHJldAogRU5EKHZmb3JrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmggYi9saWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM0ZTY1Mi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKgkkT3BlbkJTRDogX3R5cGVzLmgsdiAxLjEzIDIwMTMvMDcvMDUgMTk6NDY6MjcgZ3VlbnRoZXIgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglAKCMpdHlwZXMuaAk4LjMgKEJlcmtlbGV5KSAxLzUvOTQKLSAqCUAoIylhbnNpLmgJOC4yIChCZXJrZWxleSkgMS80Lzk0Ci0gKi8KLQotI2lmbmRlZiBfTUFDSElORV9fVFlQRVNfSF8KLSNkZWZpbmUgX01BQ0hJTkVfX1RZUEVTX0hfCi0KLS8qCi0gKiBfQUxJR04ocCkgcm91bmRzIHAgKHBvaW50ZXIgb3IgYnl0ZSBpbmRleCkgdXAgdG8gYSBjb3JyZWN0bHktYWxpZ25lZAotICogdmFsdWUgZm9yIGFsbCBkYXRhIHR5cGVzIChpbnQsIGxvbmcsIC4uLikuICAgVGhlIHJlc3VsdCBpcyBhbgotICogdW5zaWduZWQgbG9uZyBhbmQgbXVzdCBiZSBjYXN0IHRvIGFueSBkZXNpcmVkIHBvaW50ZXIgdHlwZS4KLSAqCi0gKiBfQUxJR05FRF9QT0lOVEVSIGlzIGEgYm9vbGVhbiBtYWNybyB0aGF0IGNoZWNrcyB3aGV0aGVyIGFuIGFkZHJlc3MKLSAqIGlzIHZhbGlkIHRvIGZldGNoIGRhdGEgZWxlbWVudHMgb2YgdHlwZSB0IGZyb20gb24gdGhpcyBhcmNoaXRlY3R1cmUuCi0gKiBUaGlzIGRvZXMgbm90IHJlZmxlY3QgdGhlIG9wdGltYWwgYWxpZ25tZW50LCBqdXN0IHRoZSBwb3NzaWJpbGl0eQotICogKHdpdGhpbiByZWFzb25hYmxlIGxpbWl0cykuIAotICovCi0jZGVmaW5lCV9BTElHTkJZVEVTCShzaXplb2YobG9uZykgLSAxKQotI2RlZmluZQlfQUxJR04ocCkJKCgodW5zaWduZWQgbG9uZykocCkgKyBfQUxJR05CWVRFUykgJn5fQUxJR05CWVRFUykKLSNkZWZpbmUJX0FMSUdORURfUE9JTlRFUihwLHQpCTEKLQotI2lmIGRlZmluZWQoX0tFUk5FTCkKLXR5cGVkZWYgc3RydWN0IGxhYmVsX3QgewotCWxvbmcgdmFsWzhdOwotfSBsYWJlbF90OwotI2VuZGlmCi0KLS8qIDcuMTguMS4xIEV4YWN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KLXR5cGVkZWYJX19zaWduZWQgY2hhcgkJX19pbnQ4X3Q7Ci10eXBlZGVmCXVuc2lnbmVkIGNoYXIJCV9fdWludDhfdDsKLXR5cGVkZWYJc2hvcnQJCQlfX2ludDE2X3Q7Ci10eXBlZGVmCXVuc2lnbmVkIHNob3J0CQlfX3VpbnQxNl90OwotdHlwZWRlZglpbnQJCQlfX2ludDMyX3Q7Ci10eXBlZGVmCXVuc2lnbmVkIGludAkJX191aW50MzJfdDsKLXR5cGVkZWYJbG9uZyAgICAgICAgICAgICAgICAgICAgX19pbnQ2NF90OwotdHlwZWRlZgl1bnNpZ25lZCBsb25nICAgICAgICAgICBfX3VpbnQ2NF90OwotCi0vKiA3LjE4LjEuMiBNaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMgKi8KLXR5cGVkZWYJX19pbnQ4X3QJCV9faW50X2xlYXN0OF90OwotdHlwZWRlZglfX3VpbnQ4X3QJCV9fdWludF9sZWFzdDhfdDsKLXR5cGVkZWYJX19pbnQxNl90CQlfX2ludF9sZWFzdDE2X3Q7Ci10eXBlZGVmCV9fdWludDE2X3QJCV9fdWludF9sZWFzdDE2X3Q7Ci10eXBlZGVmCV9faW50MzJfdAkJX19pbnRfbGVhc3QzMl90OwotdHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfbGVhc3QzMl90OwotdHlwZWRlZglfX2ludDY0X3QJCV9faW50X2xlYXN0NjRfdDsKLXR5cGVkZWYJX191aW50NjRfdAkJX191aW50X2xlYXN0NjRfdDsKLQotLyogNy4xOC4xLjMgRmFzdGVzdCBtaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMgKi8KLXR5cGVkZWYJX19pbnQzMl90CQlfX2ludF9mYXN0OF90OwotdHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfZmFzdDhfdDsKLXR5cGVkZWYJX19pbnQzMl90CQlfX2ludF9mYXN0MTZfdDsKLXR5cGVkZWYJX191aW50MzJfdAkJX191aW50X2Zhc3QxNl90OwotdHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3QzMl90OwotdHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfZmFzdDMyX3Q7Ci10eXBlZGVmCV9faW50NjRfdAkJX19pbnRfZmFzdDY0X3Q7Ci10eXBlZGVmCV9fdWludDY0X3QJCV9fdWludF9mYXN0NjRfdDsKLSNkZWZpbmUJX19JTlRfRkFTVDhfTUlOCQlJTlQzMl9NSU4KLSNkZWZpbmUJX19JTlRfRkFTVDE2X01JTglJTlQzMl9NSU4KLSNkZWZpbmUJX19JTlRfRkFTVDMyX01JTglJTlQzMl9NSU4KLSNkZWZpbmUJX19JTlRfRkFTVDY0X01JTglJTlQ2NF9NSU4KLSNkZWZpbmUJX19JTlRfRkFTVDhfTUFYCQlJTlQzMl9NQVgKLSNkZWZpbmUJX19JTlRfRkFTVDE2X01BWAlJTlQzMl9NQVgKLSNkZWZpbmUJX19JTlRfRkFTVDMyX01BWAlJTlQzMl9NQVgKLSNkZWZpbmUJX19JTlRfRkFTVDY0X01BWAlJTlQ2NF9NQVgKLSNkZWZpbmUJX19VSU5UX0ZBU1Q4X01BWAlVSU5UMzJfTUFYCi0jZGVmaW5lCV9fVUlOVF9GQVNUMTZfTUFYCVVJTlQzMl9NQVgKLSNkZWZpbmUJX19VSU5UX0ZBU1QzMl9NQVgJVUlOVDMyX01BWAotI2RlZmluZQlfX1VJTlRfRkFTVDY0X01BWAlVSU5UNjRfTUFYCi0KLS8qIDcuMTguMS40IEludGVnZXIgdHlwZXMgY2FwYWJsZSBvZiBob2xkaW5nIG9iamVjdCBwb2ludGVycyAqLwotdHlwZWRlZglsb25nCQkJX19pbnRwdHJfdDsKLXR5cGVkZWYJdW5zaWduZWQgbG9uZwkJX191aW50cHRyX3Q7Ci0KLS8qIDcuMTguMS41IEdyZWF0ZXN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KLXR5cGVkZWYJX19pbnQ2NF90CQlfX2ludG1heF90OwotdHlwZWRlZglfX3VpbnQ2NF90CQlfX3VpbnRtYXhfdDsKLQotLyogUmVnaXN0ZXIgc2l6ZSAqLwotdHlwZWRlZiBsb25nCQkJX19yZWdpc3Rlcl90OwotCi0vKiBWTSBzeXN0ZW0gdHlwZXMgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZwkJX192YWRkcl90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3BhZGRyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fdnNpemVfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZwkJX19wc2l6ZV90OwotCi0vKiBTdGFuZGFyZCBzeXN0ZW0gdHlwZXMgKi8KLXR5cGVkZWYJZG91YmxlCQkJX19kb3VibGVfdDsKLXR5cGVkZWYJZmxvYXQJCQlfX2Zsb2F0X3Q7Ci10eXBlZGVmIGxvbmcJCQlfX3B0cmRpZmZfdDsKLXR5cGVkZWYJbG9uZwkJCV9fc3NpemVfdDsKLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCi10eXBlZGVmCV9fYnVpbHRpbl92YV9saXN0CV9fdmFfbGlzdDsKLSNlbHNlCi10eXBlZGVmIGNoYXIgKgkJCV9fdmFfbGlzdDsKLSNlbmRpZgotCi0vKiBXaWRlIGNoYXJhY3RlciBzdXBwb3J0IHR5cGVzICovCi0jaWZuZGVmIF9fY3BsdXNwbHVzCi10eXBlZGVmCWludAkJCV9fd2NoYXJfdDsKLSNlbmRpZgotdHlwZWRlZiBpbnQJCQlfX3dpbnRfdDsKLXR5cGVkZWYJaW50CQkJX19ydW5lX3Q7Ci10eXBlZGVmCXZvaWQgKgkJCV9fd2N0cmFuc190OwotdHlwZWRlZgl2b2lkICoJCQlfX3djdHlwZV90OwotCi0jZW5kaWYJLyogX01BQ0hJTkVfX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9hc20uaCBiL2xpYmMvYXJjaC14ODZfNjQvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCmluZGV4IDMxMGIyMzAuLjA2ZGEzOWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCkBAIC0zNywyOCArMzcsOCBAQAogI2lmbmRlZiBfQU1ENjRfQVNNX0hfCiAjZGVmaW5lIF9BTUQ2NF9BU01fSF8KIAotI2lmZGVmIF9feDg2XzY0X18KLQotI2lmZGVmIF9fUElDX18KICNkZWZpbmUgUElDX1BMVCh4KQl4QFBMVAogI2RlZmluZSBQSUNfR09UKHgpCXhAR09UUENSRUwoJXJpcCkKLSNlbHNlCi0jZGVmaW5lIFBJQ19QTFQoeCkJeAotI2RlZmluZSBQSUNfR09UKHgpCXgKLSNlbmRpZgotCi0jIGRlZmluZSBfQ19MQUJFTCh4KQl4Ci0jZGVmaW5lCV9BU01fTEFCRUwoeCkJeAotCi0jZGVmaW5lIENWQVJPRkYoeCx5KQkJKF9DX0xBQkVMKHgpK3kpKCVyaXApCi0KLSNpZmRlZiBfX1NURENfXwotIyBkZWZpbmUgX19DT05DQVQoeCx5KQl4ICMjIHkKLSMgZGVmaW5lIF9fU1RSSU5HKHgpCSN4Ci0jZWxzZQotIyBkZWZpbmUgX19DT05DQVQoeCx5KQl4LyoqL3kKLSMgZGVmaW5lIF9fU1RSSU5HKHgpCSJ4IgotI2VuZGlmCiAKIC8qIGxldCBrZXJuZWxzIGFuZCBvdGhlcnMgb3ZlcnJpZGUgZW50cnlwb2ludCBhbGlnbm1lbnQgKi8KICNpZm5kZWYgX0FMSUdOX1RFWFQKQEAgLTY5LDc4ICs0OSw0IEBACiAjIGVuZGlmCiAjZW5kaWYKIAotI2RlZmluZSBfRU5UUlkoeCkgXAotCS50ZXh0OyBfQUxJR05fVEVYVDsgLmdsb2JsIHg7IC50eXBlIHgsQGZ1bmN0aW9uOyB4OiAuY2ZpX3N0YXJ0cHJvYzsKLSNkZWZpbmUgX0xBQkVMKHgpIFwKLQkuZ2xvYmwgeDsgeDoKLQotI2lmZGVmIF9LRVJORUwKLS8qIFhYWCBDYW4ndCB1c2UgX19DT05DQVQoKSBoZXJlLCBhcyBpdCB3b3VsZCBiZSBldmFsdWF0ZWQgaW5jb3JyZWN0bHkuICovCi0jaWZkZWYgX19TVERDX18KLSNkZWZpbmUJSURUVkVDKG5hbWUpIFwKLQlBTElHTl9URVhUOyAuZ2xvYmwgWCAjIyBuYW1lOyAudHlwZSBYICMjIG5hbWUsQGZ1bmN0aW9uOyBYICMjIG5hbWU6Ci0jZGVmaW5lCUlEVFZFQ19FTkQobmFtZSkgXAotCS5zaXplIFggIyMgbmFtZSwgLiAtIFggIyMgbmFtZQotI2Vsc2UgCi0jZGVmaW5lCUlEVFZFQyhuYW1lKSBcCi0JQUxJR05fVEVYVDsgLmdsb2JsIFgvKiovbmFtZTsgLnR5cGUgWC8qKi9uYW1lLEBmdW5jdGlvbjsgWC8qKi9uYW1lOgotI2RlZmluZQlJRFRWRUNfRU5EKG5hbWUpIFwKLQkuc2l6ZSBYLyoqL25hbWUsIC4gLSBYLyoqL25hbWUKLSNlbmRpZiAvKiBfX1NURENfXyAqLyAKLSNlbmRpZiAvKiBfS0VSTkVMICovCi0KLSNpZmRlZiBfX1NURENfXwotI2RlZmluZSBDUFVWQVIob2ZmKQklZ3M6Q1BVX0lORk9fICMjIG9mZgotI2Vsc2UKLSNkZWZpbmUgQ1BVVkFSKG9mZikgICAgICVnczpDUFVfSU5GT18vKiovb2ZmCi0jZW5kaWYKLQotCi0jaWZkZWYgR1BST0YKLSMgZGVmaW5lIF9QUk9GX1BST0xPR1VFCVwKLQlwdXNocSAlcmJwOyBsZWFxICglcnNwKSwlcmJwOyBjYWxsIFBJQ19QTFQoX19tY291bnQpOyBwb3BxICVyYnAKLSNlbHNlCi0jIGRlZmluZSBfUFJPRl9QUk9MT0dVRQotI2VuZGlmCi0KLSNkZWZpbmUJRU5UUlkoeSkJX0VOVFJZKF9DX0xBQkVMKHkpKTsgX1BST0ZfUFJPTE9HVUUKLSNkZWZpbmUJTkVOVFJZKHkpCV9FTlRSWShfQ19MQUJFTCh5KSkKLSNkZWZpbmUJQUxURU5UUlkoeCkJTkVOVFJZKHgpCi0jZGVmaW5lCUFTRU5UUlkoeSkJX0VOVFJZKF9BU01fTEFCRUwoeSkpOyBfUFJPRl9QUk9MT0dVRQotI2RlZmluZQlMQUJFTCh5KQlfTEFCRUwoX0NfTEFCRUwoeSkpCi0jZGVmaW5lCUVORCh5KQkJLmNmaV9lbmRwcm9jOyAuc2l6ZSB5LCAuIC0geQotCi0jZGVmaW5lCUFTTVNUUgkJLmFzY2l6Ci0KLSNkZWZpbmUgUkNTSUQoeCkJLnB1c2hzZWN0aW9uICIuaWRlbnQiOyAuYXNjaXogeDsgLnBvcHNlY3Rpb24KLQotI2RlZmluZQlXRUFLX0FMSUFTKGFsaWFzLHN5bSkJCQkJCQlcCi0JLndlYWsgYWxpYXM7CQkJCQkJCVwKLQlhbGlhcyA9IHN5bQotCi0vKgotICogU1RST05HX0FMSUFTOiBjcmVhdGUgYSBzdHJvbmcgYWxpYXMuCi0gKi8KLSNkZWZpbmUgU1RST05HX0FMSUFTKGFsaWFzLHN5bSkJCQkJCQlcCi0JLmdsb2JsIGFsaWFzOwkJCQkJCQlcCi0JYWxpYXMgPSBzeW0KLQotI2lmZGVmIF9fU1REQ19fCi0jZGVmaW5lCVdBUk5fUkVGRVJFTkNFUyhzeW0sbXNnKQkJCQkJXAotCS5wdXNoc2VjdGlvbiAuZ251Lndhcm5pbmcuICMjIHN5bTsJCQkJXAotCS5hc2NpaSBtc2c7CQkJCQkJCVwKLQkucG9wc2VjdGlvbgotI2Vsc2UKLSNkZWZpbmUJV0FSTl9SRUZFUkVOQ0VTKHN5bSxtc2cpCQkJCQlcCi0JLnB1c2hzZWN0aW9uIC5nbnUud2FybmluZy4vKiovc3ltOwkJCQlcCi0JLmFzY2lpIG1zZzsJCQkJCQkJXAotCS5wb3BzZWN0aW9uCi0jZW5kaWYgLyogX19TVERDX18gKi8KLQotI2Vsc2UJLyoJX194ODZfNjRfXwkqLwotCi0jaW5jbHVkZSA8aTM4Ni9hc20uaD4KLQotI2VuZGlmCS8qCV9feDg2XzY0X18JKi8KLQogI2VuZGlmIC8qICFfQU1ENjRfQVNNX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9pZWVlLmggYi9saWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9pZWVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ODU2YjIuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9pbmNsdWRlL21hY2hpbmUvaWVlZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qCSRPcGVuQlNEOiBpZWVlLmgsdiAxLjIgMjAwOC8wOS8wNyAyMDozNjowNiBtYXJ0eW5hcyBFeHAgJCAqLwotLyoJJE5ldEJTRDogaWVlZS5oLHYgMS4xIDE5OTYvMDkvMzAgMTY6MzQ6MjUgd3MgRXhwICQgKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IHRoZSBDb21wdXRlciBTeXN0ZW1zIEVuZ2luZWVyaW5nIGdyb3VwCi0gKiBhdCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IHVuZGVyIERBUlBBIGNvbnRyYWN0IEJHIDkxLTY2IGFuZAotICogY29udHJpYnV0ZWQgdG8gQmVya2VsZXkuCi0gKgotICogQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKglDYWxpZm9ybmlhLCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglAKCMpaWVlZS5oCTguMSAoQmVya2VsZXkpIDYvMTEvOTMKLSAqLwotCi0vKgotICogaWVlZS5oIGRlZmluZXMgdGhlIG1hY2hpbmUtZGVwZW5kZW50IGxheW91dCBvZiB0aGUgbWFjaGluZSdzIElFRUUKLSAqIGZsb2F0aW5nIHBvaW50LiAgSXQgZG9lcyAqbm90KiBkZWZpbmUgKHlldD8pIGFueSBvZiB0aGUgcm91bmRpbmcKLSAqIG1vZGUgYml0cywgZXhjZXB0aW9ucywgYW5kIHNvIGZvcnRoLgotICovCi0KLS8qCi0gKiBEZWZpbmUgdGhlIG51bWJlciBvZiBiaXRzIGluIGVhY2ggZnJhY3Rpb24gYW5kIGV4cG9uZW50LgotICoKLSAqCQkgICAgIGsJICAgICAgICAgaysxCi0gKiBOb3RlIHRoYXQgIDEuMCB4IDIgID09IDAuMSB4IDIgICAgICBhbmQgdGhhdCBkZW5vcm1zIGFyZSByZXByZXNlbnRlZAotICoKLSAqCQkJCQkgICgtZXhwX2JpYXMrMSkKLSAqIGFzIGZyYWN0aW9ucyB0aGF0IGxvb2sgbGlrZSAwLmZmZmZmIHggMiAgICAgICAgICAgICAuICBUaGlzIG1lYW5zIHRoYXQKLSAqCi0gKgkJCSAtMTI2Ci0gKiB0aGUgbnVtYmVyIDAuMTAwMDAgeCAyICAgICwgZm9yIGluc3RhbmNlLCBpcyB0aGUgc2FtZSBhcyB0aGUgbm9ybWFsaXplZAotICoKLSAqCQktMTI3CQkJICAgLTEyOAotICogZmxvYXQgMS4wIHggMiAgICAuICBUaHVzLCB0byByZXByZXNlbnQgMiAgICAsIHdlIG5lZWQgb25lIGxlYWRpbmcgemVybwotICoKLSAqCQkJCSAgLTEyOQotICogaW4gdGhlIGZyYWN0aW9uOyB0byByZXByZXNlbnQgMiAgICAsIHdlIG5lZWQgdHdvLCBhbmQgc28gb24uICBUaGlzCi0gKgotICoJCQkJCQkgICAgICgtZXhwX2JpYXMtZnJhY2JpdHMrMSkKLSAqIGltcGxpZXMgdGhhdCB0aGUgc21hbGxlc3QgZGVub3JtYWxpemVkIG51bWJlciBpcyAyCi0gKgotICogZm9yIHdoaWNoZXZlciBmb3JtYXQgd2UgYXJlIHRhbGtpbmcgYWJvdXQ6IGZvciBzaW5nbGUgcHJlY2lzaW9uLCBmb3IKLSAqCi0gKgkJCQkJCS0xMjYJCS0xNDkKLSAqIGluc3RhbmNlLCB3ZSBnZXQgLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIHggMiAgICAsIG9yIDEuMCB4IDIgICAgLCBhbmQKLSAqCi0gKiAtMTQ5ID09IC0xMjcgLSAyMyArIDEuCi0gKi8KLSNkZWZpbmUJU05HX0VYUEJJVFMJOAotI2RlZmluZQlTTkdfRlJBQ0JJVFMJMjMKLQotI2RlZmluZQlEQkxfRVhQQklUUwkxMQotI2RlZmluZQlEQkxfRlJBQ0hCSVRTCTIwCi0jZGVmaW5lCURCTF9GUkFDTEJJVFMJMzIKLSNkZWZpbmUJREJMX0ZSQUNCSVRTCTUyCi0KLSNkZWZpbmUJRVhUX0VYUEJJVFMJMTUKLSNkZWZpbmUJRVhUX0ZSQUNIQklUUwkzMgotI2RlZmluZQlFWFRfRlJBQ0xCSVRTCTMyCi0jZGVmaW5lCUVYVF9GUkFDQklUUwk2NAotCi0jZGVmaW5lCUVYVF9UT19BUlJBWTMyKHAsIGEpIGRvIHsJCVwKLQkoYSlbMF0gPSAodWludDMyX3QpKHApLT5leHRfZnJhY2w7CVwKLQkoYSlbMV0gPSAodWludDMyX3QpKHApLT5leHRfZnJhY2g7CVwKLX0gd2hpbGUoMCkKLQotc3RydWN0IGllZWVfc2luZ2xlIHsKLQl1X2ludAlzbmdfZnJhYzoyMzsKLQl1X2ludAlzbmdfZXhwOjg7Ci0JdV9pbnQJc25nX3NpZ246MTsKLX07Ci0KLXN0cnVjdCBpZWVlX2RvdWJsZSB7Ci0JdV9pbnQJZGJsX2ZyYWNsOwotCXVfaW50CWRibF9mcmFjaDoyMDsKLQl1X2ludAlkYmxfZXhwOjExOwotCXVfaW50CWRibF9zaWduOjE7Ci19OwotCi1zdHJ1Y3QgaWVlZV9leHQgewotCXVfaW50CWV4dF9mcmFjbDsKLQl1X2ludAlleHRfZnJhY2g7Ci0JdV9pbnQJZXh0X2V4cDoxNTsKLQl1X2ludAlleHRfc2lnbjoxOwotCXVfaW50CWV4dF9wYWRsOjE2OwotCXVfaW50CWV4dF9wYWRoOwotfTsKLQotLyoKLSAqIEZsb2F0cyB3aG9zZSBleHBvbmVudCBpcyBpbiBbMS4uSU5GTkFOKSAob2Ygd2hhdGV2ZXIgdHlwZSkgYXJlCi0gKiBgbm9ybWFsJy4gIEZsb2F0cyB3aG9zZSBleHBvbmVudCBpcyBJTkZOQU4gYXJlIGVpdGhlciBJbmYgb3IgTmFOLgotICogRmxvYXRzIHdob3NlIGV4cG9uZW50IGlzIHplcm8gYXJlIGVpdGhlciB6ZXJvIChpZmYgYWxsIGZyYWN0aW9uCi0gKiBiaXRzIGFyZSB6ZXJvKSBvciBzdWJub3JtYWwgdmFsdWVzLgotICoKLSAqIEEgTmFOIGlzIGEgYHNpZ25hbGxpbmcgTmFOJyBpZiBpdHMgUVVJRVROQU4gYml0IGlzIGNsZWFyIGluIGl0cwotICogaGlnaCBmcmFjdGlvbjsgaWYgdGhlIGJpdCBpcyBzZXQsIGl0IGlzIGEgYHF1aWV0IE5hTicuCi0gKi8KLSNkZWZpbmUJU05HX0VYUF9JTkZOQU4JMjU1Ci0jZGVmaW5lCURCTF9FWFBfSU5GTkFOCTIwNDcKLSNkZWZpbmUJRVhUX0VYUF9JTkZOQU4JMzI3NjcKLQotI2lmIDAKLSNkZWZpbmUJU05HX1FVSUVUTkFOCSgxIDw8IDIyKQotI2RlZmluZQlEQkxfUVVJRVROQU4JKDEgPDwgMTkpCi0jZGVmaW5lCUVYVF9RVUlFVE5BTgkoMSA8PCAxNSkKLSNlbmRpZgotCi0vKgotICogRXhwb25lbnQgYmlhc2VzLgotICovCi0jZGVmaW5lCVNOR19FWFBfQklBUwkxMjcKLSNkZWZpbmUJREJMX0VYUF9CSUFTCTEwMjMKLSNkZWZpbmUJRVhUX0VYUF9CSUFTCTE2MzgzCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaCBiL2xpYmMvYXJjaC14ODZfNjQvaW5jbHVkZS9tYWNoaW5lL2xpbWl0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGM0YTg4Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODZfNjQvaW5jbHVkZS9tYWNoaW5lL2xpbWl0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGxpbWl0cy5oLHYgMS41IDIwMDkvMTEvMjcgMTk6NTQ6MzUgZ3VlbnRoZXIgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICoJQCgjKWxpbWl0cy5oCTcuMiAoQmVya2VsZXkpIDYvMjgvOTAKLSAqLwotCi0jaWZuZGVmCV9NQUNISU5FX0xJTUlUU19IXwotI2RlZmluZQlfTUFDSElORV9MSU1JVFNfSF8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotCi0jaWYgX19QT1NJWF9WSVNJQkxFIHx8IF9fWFBHX1ZJU0lCTEUKLSNpZm5kZWYJU0laRV9NQVgKLSNkZWZpbmUgU0laRV9NQVgJVUxPTkdfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYSBzaXplX3QgKi8KLSNlbmRpZgotI2RlZmluZSBTU0laRV9NQVgJTE9OR19NQVgJLyogbWF4IHZhbHVlIGZvciBhIHNzaXplX3QgKi8KLSNlbmRpZgotCi0jaWYgX19CU0RfVklTSUJMRQotI2RlZmluZQlTSVpFX1RfTUFYCVVMT05HX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgc2l6ZV90IChoaXN0b3JpYykgKi8KLQotI2RlZmluZQlVUVVBRF9NQVgJMHhmZmZmZmZmZmZmZmZmZmZmVUxMCQkvKiBtYXggdW5zaWduZWQgcXVhZCAqLwotI2RlZmluZQlRVUFEX01BWAkweDdmZmZmZmZmZmZmZmZmZmZMTAkJLyogbWF4IHNpZ25lZCBxdWFkICovCi0jZGVmaW5lCVFVQURfTUlOCSgtMHg3ZmZmZmZmZmZmZmZmZmZmTEwtMSkJLyogbWluIHNpZ25lZCBxdWFkICovCi0KLSNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCi0KLSNlbmRpZiAvKiBfTUFDSElORV9MSU1JVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL2NhY2hlLmggYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YWNjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9jYWNoZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qIFZhbHVlcyBhcmUgb3B0aW1pemVkIGZvciBTaWx2ZXJtb250ICovCisjZGVmaW5lIFNIQVJFRF9DQUNIRV9TSVpFCSgxMDI0KjEwMjQpCQkJLyogU2lsdmVybW9udCBMMiBDYWNoZSAqLworI2RlZmluZSBEQVRBX0NBQ0hFX1NJWkUJCSgyNCoxMDI0KQkJCS8qIFNpbHZlcm1vbnQgTDEgRGF0YSBDYWNoZSAqLworCisjZGVmaW5lIFNIQVJFRF9DQUNIRV9TSVpFX0hBTEYJKFNIQVJFRF9DQUNIRV9TSVpFIC8gMikKKyNkZWZpbmUgREFUQV9DQUNIRV9TSVpFX0hBTEYJKERBVEFfQ0FDSEVfU0laRSAvIDIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLW1lbWNweS1zbG0uUyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItbWVtY3B5LXNsbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzBmYjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLW1lbWNweS1zbG0uUwpAQCAtMCwwICsxLDI5OSBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisKKyNpZm5kZWYgTUVNQ1BZCisjIGRlZmluZSBNRU1DUFkJCW1lbWNweQorI2VuZGlmCisKKyNpZm5kZWYgTAorIyBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCisjZW5kaWYKKworI2lmbmRlZiBjZmlfc3RhcnRwcm9jCisjIGRlZmluZSBjZmlfc3RhcnRwcm9jCS5jZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfZW5kcHJvYworIyBkZWZpbmUgY2ZpX2VuZHByb2MJLmNmaV9lbmRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVsX29mZnNldAorIyBkZWZpbmUgY2ZpX3JlbF9vZmZzZXQocmVnLCBvZmYpCS5jZmlfcmVsX29mZnNldCByZWcsIG9mZgorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3Jlc3RvcmUKKyMgZGVmaW5lIGNmaV9yZXN0b3JlKHJlZykJLmNmaV9yZXN0b3JlIHJlZworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0CisjIGRlZmluZSBjZmlfYWRqdXN0X2NmYV9vZmZzZXQob2ZmKQkuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IG9mZgorI2VuZGlmCisKKyNpZm5kZWYgRU5UUlkKKyMgZGVmaW5lIEVOVFJZKG5hbWUpCQlcCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsJCVwKKwkuZ2xvYmwgbmFtZTsJCVwKKwkucDJhbGlnbiA0OwkJXAorbmFtZToJCVwKKwljZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBFTkQKKyMgZGVmaW5lIEVORChuYW1lKQkJXAorCWNmaV9lbmRwcm9jOwkJXAorCS5zaXplIG5hbWUsIC4tbmFtZQorI2VuZGlmCisKKyNkZWZpbmUgQ0ZJX1BVU0goUkVHKQkJXAorCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7CQlcCisJY2ZpX3JlbF9vZmZzZXQgKFJFRywgMCkKKworI2RlZmluZSBDRklfUE9QKFJFRykJCVwKKwljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJCVwKKwljZmlfcmVzdG9yZSAoUkVHKQorCisjZGVmaW5lIFBVU0goUkVHKQlwdXNoIFJFRzsKKyNkZWZpbmUgUE9QKFJFRykJcG9wIFJFRzsKKworI2RlZmluZSBFTlRSQU5DRQlQVVNIICglcmJ4KTsKKyNkZWZpbmUgUkVUVVJOX0VORAlQT1AgKCVyYngpOyByZXQKKyNkZWZpbmUgUkVUVVJOCQlSRVRVUk5fRU5EOworCisJLnNlY3Rpb24gLnRleHQuc3NlMiwiYXgiLEBwcm9nYml0cworRU5UUlkgKE1FTUNQWSkKKwlFTlRSQU5DRQorCWNtcAklcnNpLCAlcmRpCisJamUJTChyZXR1cm4pCisKKwljbXAJJDE2LCAlcmR4CisJamJlCUwobGVuXzBfMTZfYnl0ZXMpCisKKwljbXAJJFNIQVJFRF9DQUNIRV9TSVpFX0hBTEYsICVyZHgKKwlqYWUJTChsYXJnZV9wYWdlKQorCisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJLTE2KCVyc2ksICVyZHgpLCAleG1tMQorCWNtcAkkMzIsICVyZHgKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdmRxdQkleG1tMSwgLTE2KCVyZGksICVyZHgpCisJamJlCUwocmV0dXJuKQorCisJbW92ZHF1CTE2KCVyc2kpLCAleG1tMAorCW1vdmRxdQktMzIoJXJzaSwgJXJkeCksICV4bW0xCisJY21wCSQ2NCwgJXJkeAorCW1vdmRxdQkleG1tMCwgMTYoJXJkaSkKKwltb3ZkcXUJJXhtbTEsIC0zMiglcmRpLCAlcmR4KQorCWpiZQlMKHJldHVybikKKworCW1vdmRxdQkzMiglcnNpKSwgJXhtbTAKKwltb3ZkcXUJNDgoJXJzaSksICV4bW0xCisJbW92ZHF1CS00OCglcnNpLCAlcmR4KSwgJXhtbTIKKwltb3ZkcXUJLTY0KCVyc2ksICVyZHgpLCAleG1tMworCWNtcAkkMTI4LCAlcmR4CisJbW92ZHF1CSV4bW0wLCAzMiglcmRpKQorCW1vdmRxdQkleG1tMSwgNDgoJXJkaSkKKwltb3ZkcXUJJXhtbTIsIC00OCglcmRpLCAlcmR4KQorCW1vdmRxdQkleG1tMywgLTY0KCVyZGksICVyZHgpCisJamJlCUwocmV0dXJuKQorCisvKiBOb3cgdGhlIG1haW4gbG9vcDogd2UgYWxpZ24gdGhlIGFkZHJlc3Mgb2YgdGhlIGRlc3RpbmF0aW9uLiAgKi8KKwlsZWEJNjQoJXJkaSksICVyOAorCWFuZAkkLTY0LCAlcjgKKworCWFkZAklcmRpLCAlcmR4CisJYW5kCSQtNjQsICVyZHgKKworCXN1YgklcmRpLCAlcnNpCisKKy8qIFdlIHNob3VsZCBzdG9wIHR3byBpdGVyYXRpb25zIGJlZm9yZSB0aGUgdGVybWluYXRpb24KKwkoaW4gb3JkZXIgbm90IHRvIG1pc3ByZWZldGNoKS4gICovCisJc3ViCSQ2NCwgJXJkeAorCWNtcAklcjgsICVyZHgKKwlqZQlMKG1haW5fbG9vcF9qdXN0X29uZV9pdGVyYXRpb24pCisKKwlzdWIJJDY0LCAlcmR4CisJY21wCSVyOCwgJXJkeAorCWplCUwobWFpbl9sb29wX2xhc3RfdHdvX2l0ZXJhdGlvbnMpCisKKworCS5wMmFsaWduIDQKK0wobWFpbl9sb29wX2NhY2hlKToKKworCXByZWZldGNodDAgMTI4KCVyOCwgJXJzaSkKKworCW1vdmRxdQkoJXI4LCAlcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJXI4LCAlcnNpKSwgJXhtbTEKKwltb3ZkcXUJMzIoJXI4LCAlcnNpKSwgJXhtbTIKKwltb3ZkcXUJNDgoJXI4LCAlcnNpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTAsICglcjgpCisJbW92ZHFhCSV4bW0xLCAxNiglcjgpCisJbW92ZHFhCSV4bW0yLCAzMiglcjgpCisJbW92ZHFhCSV4bW0zLCA0OCglcjgpCisJbGVhCTY0KCVyOCksICVyOAorCWNtcAklcjgsICVyZHgKKwlqbmUJTChtYWluX2xvb3BfY2FjaGUpCisKK0wobWFpbl9sb29wX2xhc3RfdHdvX2l0ZXJhdGlvbnMpOgorCW1vdmRxdQkoJXI4LCAlcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJXI4LCAlcnNpKSwgJXhtbTEKKwltb3ZkcXUJMzIoJXI4LCAlcnNpKSwgJXhtbTIKKwltb3ZkcXUJNDgoJXI4LCAlcnNpKSwgJXhtbTMKKwltb3ZkcXUJNjQoJXI4LCAlcnNpKSwgJXhtbTQKKwltb3ZkcXUJODAoJXI4LCAlcnNpKSwgJXhtbTUKKwltb3ZkcXUJOTYoJXI4LCAlcnNpKSwgJXhtbTYKKwltb3ZkcXUJMTEyKCVyOCwgJXJzaSksICV4bW03CisJbW92ZHFhCSV4bW0wLCAoJXI4KQorCW1vdmRxYQkleG1tMSwgMTYoJXI4KQorCW1vdmRxYQkleG1tMiwgMzIoJXI4KQorCW1vdmRxYQkleG1tMywgNDgoJXI4KQorCW1vdmRxYQkleG1tNCwgNjQoJXI4KQorCW1vdmRxYQkleG1tNSwgODAoJXI4KQorCW1vdmRxYQkleG1tNiwgOTYoJXI4KQorCW1vdmRxYQkleG1tNywgMTEyKCVyOCkKKwlqbXAJTChyZXR1cm4pCisKK0wobWFpbl9sb29wX2p1c3Rfb25lX2l0ZXJhdGlvbik6CisJbW92ZHF1CSglcjgsICVyc2kpLCAleG1tMAorCW1vdmRxdQkxNiglcjgsICVyc2kpLCAleG1tMQorCW1vdmRxdQkzMiglcjgsICVyc2kpLCAleG1tMgorCW1vdmRxdQk0OCglcjgsICVyc2kpLCAleG1tMworCW1vdmRxYQkleG1tMCwgKCVyOCkKKwltb3ZkcWEJJXhtbTEsIDE2KCVyOCkKKwltb3ZkcWEJJXhtbTIsIDMyKCVyOCkKKwltb3ZkcWEJJXhtbTMsIDQ4KCVyOCkKKwlqbXAJTChyZXR1cm4pCisKK0wobGFyZ2VfcGFnZSk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJXJzaSksICV4bW0xCisJbW92ZHF1CTMyKCVyc2kpLCAleG1tMgorCW1vdmRxdQk0OCglcnNpKSwgJXhtbTMKKwltb3ZkcXUJLTY0KCVyc2ksICVyZHgpLCAleG1tNAorCW1vdmRxdQktNDgoJXJzaSwgJXJkeCksICV4bW01CisJbW92ZHF1CS0zMiglcnNpLCAlcmR4KSwgJXhtbTYKKwltb3ZkcXUJLTE2KCVyc2ksICVyZHgpLCAleG1tNworCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0xLCAxNiglcmRpKQorCW1vdmRxdQkleG1tMiwgMzIoJXJkaSkKKwltb3ZkcXUJJXhtbTMsIDQ4KCVyZGkpCisJbW92ZHF1CSV4bW00LCAtNjQoJXJkaSwgJXJkeCkKKwltb3ZkcXUJJXhtbTUsIC00OCglcmRpLCAlcmR4KQorCW1vdmRxdQkleG1tNiwgLTMyKCVyZGksICVyZHgpCisJbW92ZHF1CSV4bW03LCAtMTYoJXJkaSwgJXJkeCkKKworCW1vdmRxdQk2NCglcnNpKSwgJXhtbTAKKwltb3ZkcXUJODAoJXJzaSksICV4bW0xCisJbW92ZHF1CTk2KCVyc2kpLCAleG1tMgorCW1vdmRxdQkxMTIoJXJzaSksICV4bW0zCisJbW92ZHF1CS0xMjgoJXJzaSwgJXJkeCksICV4bW00CisJbW92ZHF1CS0xMTIoJXJzaSwgJXJkeCksICV4bW01CisJbW92ZHF1CS05NiglcnNpLCAlcmR4KSwgJXhtbTYKKwltb3ZkcXUJLTgwKCVyc2ksICVyZHgpLCAleG1tNworCW1vdmRxdQkleG1tMCwgNjQoJXJkaSkKKwltb3ZkcXUJJXhtbTEsIDgwKCVyZGkpCisJbW92ZHF1CSV4bW0yLCA5NiglcmRpKQorCW1vdmRxdQkleG1tMywgMTEyKCVyZGkpCisJbW92ZHF1CSV4bW00LCAtMTI4KCVyZGksICVyZHgpCisJbW92ZHF1CSV4bW01LCAtMTEyKCVyZGksICVyZHgpCisJbW92ZHF1CSV4bW02LCAtOTYoJXJkaSwgJXJkeCkKKwltb3ZkcXUJJXhtbTcsIC04MCglcmRpLCAlcmR4KQorCisvKiBOb3cgdGhlIG1haW4gbG9vcCB3aXRoIG5vbiB0ZW1wb3JhbCBzdG9yZXMuIFdlIGFsaWduCisJdGhlIGFkZHJlc3Mgb2YgdGhlIGRlc3RpbmF0aW9uLiAgKi8KKwlsZWEJMTI4KCVyZGkpLCAlcjgKKwlhbmQJJC0xMjgsICVyOAorCisJYWRkCSVyZGksICVyZHgKKwlhbmQJJC0xMjgsICVyZHgKKworCXN1YgklcmRpLCAlcnNpCisKKwkucDJhbGlnbiA0CitMKG1haW5fbG9vcF9sYXJnZV9wYWdlKToKKwltb3ZkcXUJKCVyOCwgJXJzaSksICV4bW0wCisJbW92ZHF1CTE2KCVyOCwgJXJzaSksICV4bW0xCisJbW92ZHF1CTMyKCVyOCwgJXJzaSksICV4bW0yCisJbW92ZHF1CTQ4KCVyOCwgJXJzaSksICV4bW0zCisJbW92ZHF1CTY0KCVyOCwgJXJzaSksICV4bW00CisJbW92ZHF1CTgwKCVyOCwgJXJzaSksICV4bW01CisJbW92ZHF1CTk2KCVyOCwgJXJzaSksICV4bW02CisJbW92ZHF1CTExMiglcjgsICVyc2kpLCAleG1tNworCW1vdm50ZHEJJXhtbTAsICglcjgpCisJbW92bnRkcQkleG1tMSwgMTYoJXI4KQorCW1vdm50ZHEJJXhtbTIsIDMyKCVyOCkKKwltb3ZudGRxCSV4bW0zLCA0OCglcjgpCisJbW92bnRkcQkleG1tNCwgNjQoJXI4KQorCW1vdm50ZHEJJXhtbTUsIDgwKCVyOCkKKwltb3ZudGRxCSV4bW02LCA5NiglcjgpCisJbW92bnRkcQkleG1tNywgMTEyKCVyOCkKKwlsZWEJMTI4KCVyOCksICVyOAorCWNtcAklcjgsICVyZHgKKwlqbmUJTChtYWluX2xvb3BfbGFyZ2VfcGFnZSkKKwlzZmVuY2UKKwlqbXAJTChyZXR1cm4pCisKK0wobGVuXzBfMTZfYnl0ZXMpOgorCXRlc3RiCSQyNCwgJWRsCisJam5lCUwobGVuXzlfMTZfYnl0ZXMpCisJdGVzdGIJJDQsICVkbAorCS5wMmFsaWduIDQsLDUKKwlqbmUJTChsZW5fNV84X2J5dGVzKQorCXRlc3QJJXJkeCwgJXJkeAorCS5wMmFsaWduIDQsLDIKKwlqZQlMKHJldHVybikKKwltb3Z6YmwJKCVyc2kpLCAlZWJ4CisJdGVzdGIJJDIsICVkbAorCW1vdmIJJWJsLCAoJXJkaSkKKwlqZQlMKHJldHVybikKKwltb3Z6d2wJLTIoJXJzaSwlcmR4KSwgJWVieAorCW1vdncJJWJ4LCAtMiglcmRpLCVyZHgpCisJam1wCUwocmV0dXJuKQorCitMKGxlbl85XzE2X2J5dGVzKToKKwltb3ZxCSglcnNpKSwgJXhtbTAKKwltb3ZxCS04KCVyc2ksICVyZHgpLCAleG1tMQorCW1vdnEJJXhtbTAsICglcmRpKQorCW1vdnEJJXhtbTEsIC04KCVyZGksICVyZHgpCisJam1wCUwocmV0dXJuKQorCitMKGxlbl81XzhfYnl0ZXMpOgorCW1vdmwJKCVyc2kpLCAlZWJ4CisJbW92bAklZWJ4LCAoJXJkaSkKKwltb3ZsCS00KCVyc2ksJXJkeCksICVlYngKKwltb3ZsCSVlYngsIC00KCVyZGksJXJkeCkKKwlqbXAJTChyZXR1cm4pCisKK0wocmV0dXJuKToKKwltb3YgCSVyZGksICVyYXgKKwlSRVRVUk4KKworRU5EIChNRU1DUFkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLW1lbW1vdmUtc2xtLlMgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLW1lbW1vdmUtc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRiZmZhZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItbWVtbW92ZS1zbG0uUwpAQCAtMCwwICsxLDUxMyBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisKKyNpZm5kZWYgTUVNTU9WRQorIyBkZWZpbmUgTUVNTU9WRQkJbWVtbW92ZQorI2VuZGlmCisKKyNpZm5kZWYgTAorIyBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCisjZW5kaWYKKworI2lmbmRlZiBjZmlfc3RhcnRwcm9jCisjIGRlZmluZSBjZmlfc3RhcnRwcm9jCS5jZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfZW5kcHJvYworIyBkZWZpbmUgY2ZpX2VuZHByb2MJLmNmaV9lbmRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVsX29mZnNldAorIyBkZWZpbmUgY2ZpX3JlbF9vZmZzZXQocmVnLCBvZmYpCS5jZmlfcmVsX29mZnNldCByZWcsIG9mZgorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3Jlc3RvcmUKKyMgZGVmaW5lIGNmaV9yZXN0b3JlKHJlZykJLmNmaV9yZXN0b3JlIHJlZworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0CisjIGRlZmluZSBjZmlfYWRqdXN0X2NmYV9vZmZzZXQob2ZmKQkuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IG9mZgorI2VuZGlmCisKKyNpZm5kZWYgRU5UUlkKKyMgZGVmaW5lIEVOVFJZKG5hbWUpCQlcCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsJCVwKKwkuZ2xvYmwgbmFtZTsJCVwKKwkucDJhbGlnbiA0OwkJXAorbmFtZToJCVwKKwljZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBFTkQKKyMgZGVmaW5lIEVORChuYW1lKQkJXAorCWNmaV9lbmRwcm9jOwkJXAorCS5zaXplIG5hbWUsIC4tbmFtZQorI2VuZGlmCisKKyNkZWZpbmUgQ0ZJX1BVU0goUkVHKQkJXAorCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7CQlcCisJY2ZpX3JlbF9vZmZzZXQgKFJFRywgMCkKKworI2RlZmluZSBDRklfUE9QKFJFRykJCVwKKwljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJCVwKKwljZmlfcmVzdG9yZSAoUkVHKQorCisjZGVmaW5lIFBVU0goUkVHKQlwdXNoIFJFRzsKKyNkZWZpbmUgUE9QKFJFRykJcG9wIFJFRzsKKworI2RlZmluZSBFTlRSQU5DRQlQVVNIICglcmJ4KTsKKyNkZWZpbmUgUkVUVVJOX0VORAlQT1AgKCVyYngpOyByZXQKKyNkZWZpbmUgUkVUVVJOCQlSRVRVUk5fRU5EOworCisJLnNlY3Rpb24gLnRleHQuc3NlMiwiYXgiLEBwcm9nYml0cworRU5UUlkgKE1FTU1PVkUpCisJRU5UUkFOQ0UKKyNpZmRlZiBVU0VfQVNfQkNPUFkKKwl4Y2hnCSVyc2ksICVyZGkKKyNlbmRpZgorCW1vdgklcmRpLCAlcmF4CisKKy8qIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGNvcHkgYmFja3dhcmQgb3IgZm9yd2FyZC4gICovCisJY21wCSVyc2ksICVyZGkKKwlqZQlMKG1tX3JldHVybikKKwlqZwlMKG1tX2xlbl8wX29yX21vcmVfYmFja3dhcmQpCisKKy8qIE5vdyBkbyBjaGVja3MgZm9yIGxlbmd0aHMuIFdlIGRvIFswLi4xNl0sIFswLi4zMl0sIFswLi42NF0sIFswLi4xMjhdCisJc2VwYXJhdGVseS4gICovCisJY21wCSQxNiwgJXJkeAorCWpiZQlMKG1tX2xlbl8wXzE2X2J5dGVzX2ZvcndhcmQpCisKKwljbXAJJDMyLCAlcmR4CisJamEJTChtbV9sZW5fMzJfb3JfbW9yZV9mb3J3YXJkKQorCisvKiBDb3B5IFswLi4zMl0gYW5kIHJldHVybi4gICovCisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJLTE2KCVyc2ksICVyZHgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0xLCAtMTYoJXJkaSwgJXJkeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzMyX29yX21vcmVfZm9yd2FyZCk6CisJY21wCSQ2NCwgJXJkeAorCWphCUwobW1fbGVuXzY0X29yX21vcmVfZm9yd2FyZCkKKworLyogQ29weSBbMC4uNjRdIGFuZCByZXR1cm4uICAqLworCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CTE2KCVyc2kpLCAleG1tMQorCW1vdmRxdQktMTYoJXJzaSwgJXJkeCksICV4bW0yCisJbW92ZHF1CS0zMiglcnNpLCAlcmR4KSwgJXhtbTMKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdmRxdQkleG1tMSwgMTYoJXJkaSkKKwltb3ZkcXUJJXhtbTIsIC0xNiglcmRpLCAlcmR4KQorCW1vdmRxdQkleG1tMywgLTMyKCVyZGksICVyZHgpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX2xlbl82NF9vcl9tb3JlX2ZvcndhcmQpOgorCWNtcAkkMTI4LCAlcmR4CisJamEJTChtbV9sZW5fMTI4X29yX21vcmVfZm9yd2FyZCkKKworLyogQ29weSBbMC4uMTI4XSBhbmQgcmV0dXJuLiAgKi8KKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdmRxdQkxNiglcnNpKSwgJXhtbTEKKwltb3ZkcXUJMzIoJXJzaSksICV4bW0yCisJbW92ZHF1CTQ4KCVyc2kpLCAleG1tMworCW1vdmRxdQktNjQoJXJzaSwgJXJkeCksICV4bW00CisJbW92ZHF1CS00OCglcnNpLCAlcmR4KSwgJXhtbTUKKwltb3ZkcXUJLTMyKCVyc2ksICVyZHgpLCAleG1tNgorCW1vdmRxdQktMTYoJXJzaSwgJXJkeCksICV4bW03CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZkcXUJJXhtbTEsIDE2KCVyZGkpCisJbW92ZHF1CSV4bW0yLCAzMiglcmRpKQorCW1vdmRxdQkleG1tMywgNDgoJXJkaSkKKwltb3ZkcXUJJXhtbTQsIC02NCglcmRpLCAlcmR4KQorCW1vdmRxdQkleG1tNSwgLTQ4KCVyZGksICVyZHgpCisJbW92ZHF1CSV4bW02LCAtMzIoJXJkaSwgJXJkeCkKKwltb3ZkcXUJJXhtbTcsIC0xNiglcmRpLCAlcmR4KQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9sZW5fMTI4X29yX21vcmVfZm9yd2FyZCk6CisvKiBBbGlnbmluZyB0aGUgYWRkcmVzcyBvZiBkZXN0aW5hdGlvbi4gICovCisvKiAgc2F2ZSBmaXJzdCB1bmFsaWduZWQgNjQgYnl0ZXMgKi8KKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdmRxdQkxNiglcnNpKSwgJXhtbTEKKwltb3ZkcXUJMzIoJXJzaSksICV4bW0yCisJbW92ZHF1CTQ4KCVyc2kpLCAleG1tMworCisJbGVhCTY0KCVyZGkpLCAlcjgKKwlhbmQJJC02NCwgJXI4ICAvKiByOCBub3cgYWxpZ25lZCB0byBuZXh0IDY0IGJ5dGUgYm91bmRhcnkgKi8KKwlzdWIJJXJkaSwgJXJzaSAvKiByc2kgPSBzcmMgLSBkc3QgPSBkaWZmICovCisKKwltb3ZkcXUJKCVyOCwgJXJzaSksICV4bW00CisJbW92ZHF1CTE2KCVyOCwgJXJzaSksICV4bW01CisJbW92ZHF1CTMyKCVyOCwgJXJzaSksICV4bW02CisJbW92ZHF1CTQ4KCVyOCwgJXJzaSksICV4bW03CisKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdmRxdQkleG1tMSwgMTYoJXJkaSkKKwltb3ZkcXUJJXhtbTIsIDMyKCVyZGkpCisJbW92ZHF1CSV4bW0zLCA0OCglcmRpKQorCW1vdmRxYQkleG1tNCwgKCVyOCkKKwltb3ZhcHMJJXhtbTUsIDE2KCVyOCkKKwltb3ZhcHMJJXhtbTYsIDMyKCVyOCkKKwltb3ZhcHMJJXhtbTcsIDQ4KCVyOCkKKwlhZGQJJDY0LCAlcjgKKworCWxlYQkoJXJkaSwgJXJkeCksICVyYngKKwlhbmQJJC02NCwgJXJieAorCWNtcAklcjgsICVyYngKKwlqYmUJTChtbV9jb3B5X3JlbWFpbmluZ19mb3J3YXJkKQorCisJY21wCSRTSEFSRURfQ0FDSEVfU0laRV9IQUxGLCAlcmR4CisJamFlCUwobW1fbGFyZ2VfcGFnZV9sb29wX2ZvcndhcmQpCisKKwkucDJhbGlnbiA0CitMKG1tX21haW5fbG9vcF9mb3J3YXJkKToKKworCXByZWZldGNodDAgMTI4KCVyOCwgJXJzaSkKKworCW1vdmRxdQkoJXI4LCAlcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJXI4LCAlcnNpKSwgJXhtbTEKKwltb3ZkcXUJMzIoJXI4LCAlcnNpKSwgJXhtbTIKKwltb3ZkcXUJNDgoJXI4LCAlcnNpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTAsICglcjgpCisJbW92YXBzCSV4bW0xLCAxNiglcjgpCisJbW92YXBzCSV4bW0yLCAzMiglcjgpCisJbW92YXBzCSV4bW0zLCA0OCglcjgpCisJbGVhCTY0KCVyOCksICVyOAorCWNtcAklcjgsICVyYngKKwlqYQlMKG1tX21haW5fbG9vcF9mb3J3YXJkKQorCitMKG1tX2NvcHlfcmVtYWluaW5nX2ZvcndhcmQpOgorCWFkZAklcmRpLCAlcmR4CisJc3ViCSVyOCwgJXJkeAorLyogV2UgY29waWVkIGFsbCB1cCB0aWxsICVyZGkgcG9zaXRpb24gaW4gdGhlIGRzdC4KKwlJbiAlcmR4IG5vdyBpcyBob3cgbWFueSBieXRlcyBhcmUgbGVmdCB0byBjb3B5LgorCU5vdyB3ZSBuZWVkIHRvIGFkdmFuY2UgJXI4LiAqLworCWxlYQkoJXI4LCAlcnNpKSwgJXI5CisKK0wobW1fcmVtYWluaW5nXzBfNjRfYnl0ZXNfZm9yd2FyZCk6CisJY21wCSQzMiwgJXJkeAorCWphCUwobW1fcmVtYWluaW5nXzMzXzY0X2J5dGVzX2ZvcndhcmQpCisJY21wCSQxNiwgJXJkeAorCWphCUwobW1fcmVtYWluaW5nXzE3XzMyX2J5dGVzX2ZvcndhcmQpCisJdGVzdAklcmR4LCAlcmR4CisJLnAyYWxpZ24gNCwsMgorCWplCUwobW1fcmV0dXJuKQorCisJY21wYgkkOCwgJWRsCisJamEJTChtbV9yZW1haW5pbmdfOV8xNl9ieXRlc19mb3J3YXJkKQorCWNtcGIJJDQsICVkbAorCS5wMmFsaWduIDQsLDUKKwlqYQlMKG1tX3JlbWFpbmluZ181XzhfYnl0ZXNfZm9yd2FyZCkKKwljbXBiCSQyLCAlZGwKKwkucDJhbGlnbiA0LCwxCisJamEJTChtbV9yZW1haW5pbmdfM180X2J5dGVzX2ZvcndhcmQpCisJbW92emJsCS0xKCVyOSwlcmR4KSwgJWVzaQorCW1vdnpibAkoJXI5KSwgJWVieAorCW1vdmIJJXNpbCwgLTEoJXI4LCVyZHgpCisJbW92YgklYmwsICglcjgpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX3JlbWFpbmluZ18zM182NF9ieXRlc19mb3J3YXJkKToKKwltb3ZkcXUJKCVyOSksICV4bW0wCisJbW92ZHF1CTE2KCVyOSksICV4bW0xCisJbW92ZHF1CS0zMiglcjksICVyZHgpLCAleG1tMgorCW1vdmRxdQktMTYoJXI5LCAlcmR4KSwgJXhtbTMKKwltb3ZkcXUJJXhtbTAsICglcjgpCisJbW92ZHF1CSV4bW0xLCAxNiglcjgpCisJbW92ZHF1CSV4bW0yLCAtMzIoJXI4LCAlcmR4KQorCW1vdmRxdQkleG1tMywgLTE2KCVyOCwgJXJkeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fcmVtYWluaW5nXzE3XzMyX2J5dGVzX2ZvcndhcmQpOgorCW1vdmRxdQkoJXI5KSwgJXhtbTAKKwltb3ZkcXUJLTE2KCVyOSwgJXJkeCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJXI4KQorCW1vdmRxdQkleG1tMSwgLTE2KCVyOCwgJXJkeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fcmVtYWluaW5nXzVfOF9ieXRlc19mb3J3YXJkKToKKwltb3ZsCSglcjkpLCAlZXNpCisJbW92bAktNCglcjksJXJkeCksICVlYngKKwltb3ZsCSVlc2ksICglcjgpCisJbW92bAklZWJ4LCAtNCglcjgsJXJkeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fcmVtYWluaW5nXzlfMTZfYnl0ZXNfZm9yd2FyZCk6CisJbW92CSglcjkpLCAlcnNpCisJbW92CS04KCVyOSwgJXJkeCksICVyYngKKwltb3YJJXJzaSwgKCVyOCkKKwltb3YJJXJieCwgLTgoJXI4LCAlcmR4KQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9yZW1haW5pbmdfM180X2J5dGVzX2ZvcndhcmQpOgorCW1vdnp3bAktMiglcjksJXJkeCksICVlc2kKKwltb3Z6d2wJKCVyOSksICVlYngKKwltb3Z3CSVzaSwgLTIoJXI4LCVyZHgpCisJbW92dwklYngsICglcjgpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX2xlbl8wXzE2X2J5dGVzX2ZvcndhcmQpOgorCXRlc3RiCSQyNCwgJWRsCisJam5lCUwobW1fbGVuXzlfMTZfYnl0ZXNfZm9yd2FyZCkKKwl0ZXN0YgkkNCwgJWRsCisJLnAyYWxpZ24gNCwsNQorCWpuZQlMKG1tX2xlbl81XzhfYnl0ZXNfZm9yd2FyZCkKKwl0ZXN0CSVyZHgsICVyZHgKKwkucDJhbGlnbiA0LCwyCisJamUJTChtbV9yZXR1cm4pCisJdGVzdGIJJDIsICVkbAorCS5wMmFsaWduIDQsLDEKKwlqbmUJTChtbV9sZW5fMl80X2J5dGVzX2ZvcndhcmQpCisJbW92emJsCS0xKCVyc2ksJXJkeCksICVlYngKKwltb3Z6YmwJKCVyc2kpLCAlZXNpCisJbW92YgklYmwsIC0xKCVyZGksJXJkeCkKKwltb3ZiCSVzaWwsICglcmRpKQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9sZW5fMl80X2J5dGVzX2ZvcndhcmQpOgorCW1vdnp3bAktMiglcnNpLCVyZHgpLCAlZWJ4CisJbW92endsCSglcnNpKSwgJWVzaQorCW1vdncJJWJ4LCAtMiglcmRpLCVyZHgpCisJbW92dwklc2ksICglcmRpKQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9sZW5fNV84X2J5dGVzX2ZvcndhcmQpOgorCW1vdmwJKCVyc2kpLCAlZWJ4CisJbW92bAktNCglcnNpLCVyZHgpLCAlZXNpCisJbW92bAklZWJ4LCAoJXJkaSkKKwltb3ZsCSVlc2ksIC00KCVyZGksJXJkeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzlfMTZfYnl0ZXNfZm9yd2FyZCk6CisJbW92CSglcnNpKSwgJXJieAorCW1vdgktOCglcnNpLCAlcmR4KSwgJXJzaQorCW1vdgklcmJ4LCAoJXJkaSkKKwltb3YJJXJzaSwgLTgoJXJkaSwgJXJkeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fcmVjYWxjX2xlbik6CisvKiBDb21wdXRlIGluICVyZHggaG93IG1hbnkgYnl0ZXMgYXJlIGxlZnQgdG8gY29weSBhZnRlcgorCXRoZSBtYWluIGxvb3Agc3RvcHMuICAqLworCW1vdiAJJXJieCwgJXJkeAorCXN1YiAJJXJkaSwgJXJkeAorLyogVGhlIGNvZGUgZm9yIGNvcHlpbmcgYmFja3dhcmRzLiAgKi8KK0wobW1fbGVuXzBfb3JfbW9yZV9iYWNrd2FyZCk6CisKKy8qIE5vdyBkbyBjaGVja3MgZm9yIGxlbmd0aHMuIFdlIGRvIFswLi4xNl0sIFsxNi4uMzJdLCBbMzIuLjY0XSwgWzY0Li4xMjhdCisJc2VwYXJhdGVseS4gICovCisJY21wCSQxNiwgJXJkeAorCWpiZQlMKG1tX2xlbl8wXzE2X2J5dGVzX2JhY2t3YXJkKQorCisJY21wCSQzMiwgJXJkeAorCWphCUwobW1fbGVuXzMyX29yX21vcmVfYmFja3dhcmQpCisKKy8qIENvcHkgWzAuLjMyXSBhbmQgcmV0dXJuLiAgKi8KKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdmRxdQktMTYoJXJzaSwgJXJkeCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZkcXUJJXhtbTEsIC0xNiglcmRpLCAlcmR4KQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9sZW5fMzJfb3JfbW9yZV9iYWNrd2FyZCk6CisJY21wCSQ2NCwgJXJkeAorCWphCUwobW1fbGVuXzY0X29yX21vcmVfYmFja3dhcmQpCisKKy8qIENvcHkgWzAuLjY0XSBhbmQgcmV0dXJuLiAgKi8KKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdmRxdQkxNiglcnNpKSwgJXhtbTEKKwltb3ZkcXUJLTE2KCVyc2ksICVyZHgpLCAleG1tMgorCW1vdmRxdQktMzIoJXJzaSwgJXJkeCksICV4bW0zCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZkcXUJJXhtbTEsIDE2KCVyZGkpCisJbW92ZHF1CSV4bW0yLCAtMTYoJXJkaSwgJXJkeCkKKwltb3ZkcXUJJXhtbTMsIC0zMiglcmRpLCAlcmR4KQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9sZW5fNjRfb3JfbW9yZV9iYWNrd2FyZCk6CisJY21wCSQxMjgsICVyZHgKKwlqYQlMKG1tX2xlbl8xMjhfb3JfbW9yZV9iYWNrd2FyZCkKKworLyogQ29weSBbMC4uMTI4XSBhbmQgcmV0dXJuLiAgKi8KKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdmRxdQkxNiglcnNpKSwgJXhtbTEKKwltb3ZkcXUJMzIoJXJzaSksICV4bW0yCisJbW92ZHF1CTQ4KCVyc2kpLCAleG1tMworCW1vdmRxdQktNjQoJXJzaSwgJXJkeCksICV4bW00CisJbW92ZHF1CS00OCglcnNpLCAlcmR4KSwgJXhtbTUKKwltb3ZkcXUJLTMyKCVyc2ksICVyZHgpLCAleG1tNgorCW1vdmRxdQktMTYoJXJzaSwgJXJkeCksICV4bW03CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZkcXUJJXhtbTEsIDE2KCVyZGkpCisJbW92ZHF1CSV4bW0yLCAzMiglcmRpKQorCW1vdmRxdQkleG1tMywgNDgoJXJkaSkKKwltb3ZkcXUJJXhtbTQsIC02NCglcmRpLCAlcmR4KQorCW1vdmRxdQkleG1tNSwgLTQ4KCVyZGksICVyZHgpCisJbW92ZHF1CSV4bW02LCAtMzIoJXJkaSwgJXJkeCkKKwltb3ZkcXUJJXhtbTcsIC0xNiglcmRpLCAlcmR4KQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9sZW5fMTI4X29yX21vcmVfYmFja3dhcmQpOgorLyogQWxpZ25pbmcgdGhlIGFkZHJlc3Mgb2YgZGVzdGluYXRpb24uIFdlIG5lZWQgdG8gc2F2ZQorCTE2IGJpdHMgZnJvbSB0aGUgc291cmNlIGluIG9yZGVyIG5vdCB0byBvdmVyd3JpdGUgdGhlbS4gICovCisJbW92ZHF1CS0xNiglcnNpLCAlcmR4KSwgJXhtbTAKKwltb3ZkcXUJLTMyKCVyc2ksICVyZHgpLCAleG1tMQorCW1vdmRxdQktNDgoJXJzaSwgJXJkeCksICV4bW0yCisJbW92ZHF1CS02NCglcnNpLCAlcmR4KSwgJXhtbTMKKworCWxlYQkoJXJkaSwgJXJkeCksICVyOQorCWFuZAkkLTY0LCAlcjkgLyogcjkgPSBhbGlnbmVkIGRzdCAqLworCisJbW92CSVyc2ksICVyOAorCXN1YgklcmRpLCAlcjggLyogcjggPSBzcmMgLSBkc3QsIGRpZmYgKi8KKworCW1vdmRxdQktMTYoJXI5LCAlcjgpLCAleG1tNAorCW1vdmRxdQktMzIoJXI5LCAlcjgpLCAleG1tNQorCW1vdmRxdQktNDgoJXI5LCAlcjgpLCAleG1tNgorCW1vdmRxdQktNjQoJXI5LCAlcjgpLCAleG1tNworCisJbW92ZHF1CSV4bW0wLCAtMTYoJXJkaSwgJXJkeCkKKwltb3ZkcXUJJXhtbTEsIC0zMiglcmRpLCAlcmR4KQorCW1vdmRxdQkleG1tMiwgLTQ4KCVyZGksICVyZHgpCisJbW92ZHF1CSV4bW0zLCAtNjQoJXJkaSwgJXJkeCkKKwltb3ZkcWEJJXhtbTQsIC0xNiglcjkpCisJbW92YXBzCSV4bW01LCAtMzIoJXI5KQorCW1vdmFwcwkleG1tNiwgLTQ4KCVyOSkKKwltb3ZhcHMJJXhtbTcsIC02NCglcjkpCisJbGVhCS02NCglcjkpLCAlcjkKKworCWxlYQk2NCglcmRpKSwgJXJieAorCWFuZAkkLTY0LCAlcmJ4CisKKwljbXAJJXI5LCAlcmJ4CisJamFlCUwobW1fcmVjYWxjX2xlbikKKworCWNtcAkkU0hBUkVEX0NBQ0hFX1NJWkVfSEFMRiwgJXJkeAorCWphZQlMKG1tX2xhcmdlX3BhZ2VfbG9vcF9iYWNrd2FyZCkKKworCS5wMmFsaWduIDQKK0wobW1fbWFpbl9sb29wX2JhY2t3YXJkKToKKworCXByZWZldGNodDAgLTEyOCglcjksICVyOCkKKworCW1vdmRxdQktNjQoJXI5LCAlcjgpLCAleG1tMAorCW1vdmRxdQktNDgoJXI5LCAlcjgpLCAleG1tMQorCW1vdmRxdQktMzIoJXI5LCAlcjgpLCAleG1tMgorCW1vdmRxdQktMTYoJXI5LCAlcjgpLCAleG1tMworCW1vdmRxYQkleG1tMCwgLTY0KCVyOSkKKwltb3ZhcHMJJXhtbTEsIC00OCglcjkpCisJbW92YXBzCSV4bW0yLCAtMzIoJXI5KQorCW1vdmFwcwkleG1tMywgLTE2KCVyOSkKKwlsZWEJLTY0KCVyOSksICVyOQorCWNtcAklcjksICVyYngKKwlqYglMKG1tX21haW5fbG9vcF9iYWNrd2FyZCkKKwlqbXAJTChtbV9yZWNhbGNfbGVuKQorCisvKiBDb3B5IFswLi4xNl0gYW5kIHJldHVybi4gICovCitMKG1tX2xlbl8wXzE2X2J5dGVzX2JhY2t3YXJkKToKKwl0ZXN0YgkkMjQsICVkbAorCWpueglMKG1tX2xlbl85XzE2X2J5dGVzX2JhY2t3YXJkKQorCXRlc3RiCSQ0LCAlZGwKKwkucDJhbGlnbiA0LCw1CisJam56CUwobW1fbGVuXzVfOF9ieXRlc19iYWNrd2FyZCkKKwl0ZXN0CSVyZHgsICVyZHgKKwkucDJhbGlnbiA0LCwyCisJamUJTChtbV9yZXR1cm4pCisJdGVzdGIJJDIsICVkbAorCS5wMmFsaWduIDQsLDEKKwlqbmUJTChtbV9sZW5fM180X2J5dGVzX2JhY2t3YXJkKQorCW1vdnpibAktMSglcnNpLCVyZHgpLCAlZWJ4CisJbW92emJsCSglcnNpKSwgJWVjeAorCW1vdmIJJWJsLCAtMSglcmRpLCVyZHgpCisJbW92YgklY2wsICglcmRpKQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9sZW5fM180X2J5dGVzX2JhY2t3YXJkKToKKwltb3Z6d2wJLTIoJXJzaSwlcmR4KSwgJWVieAorCW1vdnp3bAkoJXJzaSksICVlY3gKKwltb3Z3CSVieCwgLTIoJXJkaSwlcmR4KQorCW1vdncJJWN4LCAoJXJkaSkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzlfMTZfYnl0ZXNfYmFja3dhcmQpOgorCW1vdmwJLTQoJXJzaSwlcmR4KSwgJWVieAorCW1vdmwJLTgoJXJzaSwlcmR4KSwgJWVjeAorCW1vdmwJJWVieCwgLTQoJXJkaSwlcmR4KQorCW1vdmwJJWVjeCwgLTgoJXJkaSwlcmR4KQorCXN1YgkkOCwgJXJkeAorCWptcAlMKG1tX2xlbl8wXzE2X2J5dGVzX2JhY2t3YXJkKQorCitMKG1tX2xlbl81XzhfYnl0ZXNfYmFja3dhcmQpOgorCW1vdmwJKCVyc2kpLCAlZWJ4CisJbW92bAktNCglcnNpLCVyZHgpLCAlZWN4CisJbW92bAklZWJ4LCAoJXJkaSkKKwltb3ZsCSVlY3gsIC00KCVyZGksJXJkeCkKKworTChtbV9yZXR1cm4pOgorCVJFVFVSTgorCisvKiBCaWcgbGVuZ3RoIGNvcHkgZm9yd2FyZCBwYXJ0LiAgKi8KKworCS5wMmFsaWduIDQKK0wobW1fbGFyZ2VfcGFnZV9sb29wX2ZvcndhcmQpOgorCW1vdmRxdQkoJXI4LCAlcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJXI4LCAlcnNpKSwgJXhtbTEKKwltb3ZkcXUJMzIoJXI4LCAlcnNpKSwgJXhtbTIKKwltb3ZkcXUJNDgoJXI4LCAlcnNpKSwgJXhtbTMKKwltb3ZudGRxCSV4bW0wLCAoJXI4KQorCW1vdm50ZHEJJXhtbTEsIDE2KCVyOCkKKwltb3ZudGRxCSV4bW0yLCAzMiglcjgpCisJbW92bnRkcQkleG1tMywgNDgoJXI4KQorCWxlYSAJNjQoJXI4KSwgJXI4CisJY21wCSVyOCwgJXJieAorCWphCUwobW1fbGFyZ2VfcGFnZV9sb29wX2ZvcndhcmQpCisJc2ZlbmNlCisJam1wCUwobW1fY29weV9yZW1haW5pbmdfZm9yd2FyZCkKKworLyogQmlnIGxlbmd0aCBjb3B5IGJhY2t3YXJkIHBhcnQuICAqLworCS5wMmFsaWduIDQKK0wobW1fbGFyZ2VfcGFnZV9sb29wX2JhY2t3YXJkKToKKwltb3ZkcXUJLTY0KCVyOSwgJXI4KSwgJXhtbTAKKwltb3ZkcXUJLTQ4KCVyOSwgJXI4KSwgJXhtbTEKKwltb3ZkcXUJLTMyKCVyOSwgJXI4KSwgJXhtbTIKKwltb3ZkcXUJLTE2KCVyOSwgJXI4KSwgJXhtbTMKKwltb3ZudGRxCSV4bW0wLCAtNjQoJXI5KQorCW1vdm50ZHEJJXhtbTEsIC00OCglcjkpCisJbW92bnRkcQkleG1tMiwgLTMyKCVyOSkKKwltb3ZudGRxCSV4bW0zLCAtMTYoJXI5KQorCWxlYSAJLTY0KCVyOSksICVyOQorCWNtcAklcjksICVyYngKKwlqYglMKG1tX2xhcmdlX3BhZ2VfbG9vcF9iYWNrd2FyZCkKKwlzZmVuY2UKKwlqbXAJTChtbV9yZWNhbGNfbGVuKQorCitFTkQgKE1FTU1PVkUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLW1lbXNldC1zbG0uUyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItbWVtc2V0LXNsbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmY2FmYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLW1lbXNldC1zbG0uUwpAQCAtMCwwICsxLDE3MyBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisKKyNpZm5kZWYgTUVNU0VUCisjIGRlZmluZSBNRU1TRVQJCW1lbXNldAorI2VuZGlmCisKKyNpZm5kZWYgTAorIyBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCisjZW5kaWYKKworI2lmbmRlZiBBTElHTgorIyBkZWZpbmUgQUxJR04obikJLnAyYWxpZ24gbgorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3N0YXJ0cHJvYworIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkJCS5jZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfZW5kcHJvYworIyBkZWZpbmUgY2ZpX2VuZHByb2MJCQkuY2ZpX2VuZHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVOVFJZCisjIGRlZmluZSBFTlRSWShuYW1lKQkJCVwKKwkudHlwZSBuYW1lLCAgQGZ1bmN0aW9uOwlcCisJLmdsb2JsIG5hbWU7CQkJXAorbmFtZToJCQkJCVwKKwljZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBFTkQKKyMgZGVmaW5lIEVORChuYW1lKQkJCVwKKwljZmlfZW5kcHJvYzsJCQlcCisJLnNpemUgbmFtZSwgLi1uYW1lCisjZW5kaWYKKworCS5zZWN0aW9uIC50ZXh0LnNzZTIsImF4IixAcHJvZ2JpdHMKK0VOVFJZIChNRU1TRVQpCisJbW92cQklcmRpLCAlcmF4CisjaWZkZWYgVVNFX0FTX0JaRVJPX1AKKwltb3YJJXJzaSwgJXJkeAorCXhvcgklcmN4LCAlcmN4CisjZWxzZQorCWFuZAkkMHhmZiwgJXJzaQorCW1vdgkkMHgwMTAxMDEwMTAxMDEwMTAxLCAlcmN4CisJaW11bAklcnNpLCAlcmN4CisjZW5kaWYKKwljbXBxCSQxNiwgJXJkeAorCWphZQlMKDE2Ynl0ZXNvcm1vcmUpCisJdGVzdGIJJDgsICVkbAorCWpueglMKDhfMTVieXRlcykKKwl0ZXN0YgkkNCwgJWRsCisJam56CUwoNF83Ynl0ZXMpCisJdGVzdGIJJDIsICVkbAorCWpueglMKDJfM2J5dGVzKQorCXRlc3RiCSQxLCAlZGwKKwlqeglMKHJldHVybikKKwltb3ZiCSVjbCwgKCVyZGkpCitMKHJldHVybik6CisJcmV0CisKK0woOF8xNWJ5dGVzKToKKwltb3ZxCSVyY3gsICglcmRpKQorCW1vdnEJJXJjeCwgLTgoJXJkaSwgJXJkeCkKKwlyZXQKKworTCg0XzdieXRlcyk6CisJbW92bAklZWN4LCAoJXJkaSkKKwltb3ZsCSVlY3gsIC00KCVyZGksICVyZHgpCisJcmV0CisKK0woMl8zYnl0ZXMpOgorCW1vdncJJWN4LCAoJXJkaSkKKwltb3Z3CSVjeCwgLTIoJXJkaSwgJXJkeCkKKwlyZXQKKworCUFMSUdOICg0KQorTCgxNmJ5dGVzb3Jtb3JlKToKKyNpZmRlZiBVU0VfQVNfQlpFUk9fUAorCXB4b3IJJXhtbTAsICV4bW0wCisjZWxzZQorCW1vdmQJJXJjeCwgJXhtbTAKKwlwc2h1ZmQJJDAsICV4bW0wLCAleG1tMAorI2VuZGlmCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZkcXUJJXhtbTAsIC0xNiglcmRpLCAlcmR4KQorCWNtcHEJJDMyLCAlcmR4CisJamJlCUwoMzJieXRlc2xlc3MpCisJbW92ZHF1CSV4bW0wLCAxNiglcmRpKQorCW1vdmRxdQkleG1tMCwgLTMyKCVyZGksICVyZHgpCisJY21wcQkkNjQsICVyZHgKKwlqYmUJTCg2NGJ5dGVzbGVzcykKKwltb3ZkcXUJJXhtbTAsIDMyKCVyZGkpCisJbW92ZHF1CSV4bW0wLCA0OCglcmRpKQorCW1vdmRxdQkleG1tMCwgLTY0KCVyZGksICVyZHgpCisJbW92ZHF1CSV4bW0wLCAtNDgoJXJkaSwgJXJkeCkKKwljbXBxCSQxMjgsICVyZHgKKwlqYQlMKDEyOGJ5dGVzbW9yZSkKK0woMzJieXRlc2xlc3MpOgorTCg2NGJ5dGVzbGVzcyk6CisJcmV0CisKKwlBTElHTiAoNCkKK0woMTI4Ynl0ZXNtb3JlKToKKwlsZWFxCTY0KCVyZGkpLCAlcmN4CisJYW5kcQkkLTY0LCAlcmN4CisJbW92cQklcmR4LCAlcjgKKwlhZGRxCSVyZGksICVyZHgKKwlhbmRxCSQtNjQsICVyZHgKKwljbXBxCSVyY3gsICVyZHgKKwlqZQlMKHJldHVybikKKworI2lmZGVmIFNIQVJFRF9DQUNIRV9TSVpFCisJY21wCSRTSEFSRURfQ0FDSEVfU0laRSwgJXI4CisjZWxzZQorCWNtcAlfX3g4Nl82NF9zaGFyZWRfY2FjaGVfc2l6ZSglcmlwKSwgJXI4CisjZW5kaWYKKwlqYQlMKDEyOGJ5dGVzbW9yZV9udCkKKworCUFMSUdOICg0KQorTCgxMjhieXRlc21vcmVfbm9ybWFsKToKKwltb3ZkcWEJJXhtbTAsICglcmN4KQorCW1vdmFwcwkleG1tMCwgMHgxMCglcmN4KQorCW1vdmFwcwkleG1tMCwgMHgyMCglcmN4KQorCW1vdmFwcwkleG1tMCwgMHgzMCglcmN4KQorCWFkZHEJJDY0LCAlcmN4CisJY21wcQklcmN4LCAlcmR4CisJam5lCUwoMTI4Ynl0ZXNtb3JlX25vcm1hbCkKKwlyZXQKKworCUFMSUdOICg0KQorTCgxMjhieXRlc21vcmVfbnQpOgorCW1vdm50ZHEJJXhtbTAsICglcmN4KQorCW1vdm50ZHEJJXhtbTAsIDB4MTAoJXJjeCkKKwltb3ZudGRxCSV4bW0wLCAweDIwKCVyY3gpCisJbW92bnRkcQkleG1tMCwgMHgzMCglcmN4KQorCWxlYXEJNjQoJXJjeCksICVyY3gKKwljbXBxCSVyY3gsICVyZHgKKwlqbmUJTCgxMjhieXRlc21vcmVfbnQpCisJc2ZlbmNlCisJcmV0CisKK0VORCAoTUVNU0VUKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHBjcHktc2xtLlMgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cGNweS1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWQyZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHBjcHktc2xtLlMKQEAgLTAsMCArMSwzMyBAQAorLyoNCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uDQorQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzDQorICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlDQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyovDQorDQorI2RlZmluZSBVU0VfQVNfU1RQQ1BZDQorI2RlZmluZSBTVFJDUFkJCXN0cGNweQ0KKyNpbmNsdWRlICJzc2UyLXN0cmNweS1zbG0uUyINCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cG5jcHktc2xtLlMgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cG5jcHktc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA2NjY4NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RwbmNweS1zbG0uUwpAQCAtMCwwICsxLDM0IEBACisvKg0KK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24NCitBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMNCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUNCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorKi8NCisNCisjZGVmaW5lIFVTRV9BU19TVFJOQ1BZDQorI2RlZmluZSBVU0VfQVNfU1RQQ1BZDQorI2RlZmluZSBTVFJDUFkJCXN0cG5jcHkNCisjaW5jbHVkZSAic3NlMi1zdHJjcHktc2xtLlMiDQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJjYXQtc2xtLlMgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cmNhdC1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDgyMDdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJjYXQtc2xtLlMKQEAgLTAsMCArMSw4NyBAQAorLyoNCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uDQorQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzDQorICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlDQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyovDQorDQorI2lmbmRlZiBTVFJDQVQNCisjIGRlZmluZSBTVFJDQVQJCXN0cmNhdA0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgTA0KKyMgZGVmaW5lIEwobGFiZWwpCQkuTCMjbGFiZWwNCisjZW5kaWYNCisNCisjaWZuZGVmIGNmaV9zdGFydHByb2MNCisjIGRlZmluZSBjZmlfc3RhcnRwcm9jCQkgLmNmaV9zdGFydHByb2MNCisjZW5kaWYNCisNCisjaWZuZGVmIGNmaV9lbmRwcm9jDQorIyBkZWZpbmUgY2ZpX2VuZHByb2MJCS5jZmlfZW5kcHJvYw0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgRU5UUlkNCisjIGRlZmluZSBFTlRSWShuYW1lKQkJXA0KKwkudHlwZSBuYW1lLCAgQGZ1bmN0aW9uOwkJXA0KKwkuZ2xvYmwgbmFtZTsJCVwNCisJLnAyYWxpZ24gNDsJCVwNCituYW1lOgkJXA0KKwljZmlfc3RhcnRwcm9jDQorI2VuZGlmDQorDQorI2lmbmRlZiBFTkQNCisjIGRlZmluZSBFTkQobmFtZSkJCVwNCisJY2ZpX2VuZHByb2M7CQlcDQorCS5zaXplIG5hbWUsIC4tbmFtZQ0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgVVNFX0FTX1NUUkNBVA0KKw0KKy50ZXh0DQorRU5UUlkgKFNUUkNBVCkNCisJbW92CSVyZGksICVyOQ0KKyNpZmRlZiBVU0VfQVNfU1RSTkNBVA0KKwltb3YJJXJkeCwgJXI4DQorI2VuZGlmDQorDQorI2RlZmluZSBSRVRVUk4gam1wIEwoU3RyY3B5KQ0KKyNpbmNsdWRlICJzc2UyLXN0cmxlbi1zbG0uUyINCisNCisjdW5kZWYgUkVUVVJODQorI2RlZmluZSBSRVRVUk4gcmV0DQorDQorTChTdHJjcHkpOg0KKwlsZWEJKCVyOSwgJXJheCksICVyZGkNCisJbW92CSVyc2ksICVyY3gNCisJbW92CSVyOSwgJXJheAkvKiBzYXZlIHJlc3VsdCAqLw0KKw0KKyNpZmRlZiBVU0VfQVNfU1RSTkNBVA0KKwl0ZXN0CSVyOCwgJXI4DQorCWp6CUwoRXhpdFplcm8pDQorIyBkZWZpbmUgVVNFX0FTX1NUUk5DUFkNCisjZW5kaWYNCisjaW5jbHVkZSAic3NlMi1zdHJjcHktc2xtLlMiDQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJjcHktc2xtLlMgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cmNweS1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTE0NmJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJjcHktc2xtLlMKQEAgLTAsMCArMSwxOTIxIEBACisvKgorQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIFVTRV9BU19TVFJDQVQKKworIyBpZm5kZWYgU1RSQ1BZCisjICBkZWZpbmUgU1RSQ1BZCXN0cmNweQorIyBlbmRpZgorCisjIGlmbmRlZiBMCisjICBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCisjIGVuZGlmCisKKyMgaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgIGRlZmluZSBjZmlfc3RhcnRwcm9jCS5jZmlfc3RhcnRwcm9jCisjIGVuZGlmCisKKyMgaWZuZGVmIGNmaV9lbmRwcm9jCisjICBkZWZpbmUgY2ZpX2VuZHByb2MJLmNmaV9lbmRwcm9jCisjIGVuZGlmCisKKyMgaWZuZGVmIEVOVFJZCisjICBkZWZpbmUgRU5UUlkobmFtZSkJXAorCS50eXBlIG5hbWUsIEBmdW5jdGlvbjsJXAorCS5nbG9ibCBuYW1lOwlcCisJLnAyYWxpZ24gNDsJXAorbmFtZToJXAorCWNmaV9zdGFydHByb2MKKyMgZW5kaWYKKworIyBpZm5kZWYgRU5ECisjICBkZWZpbmUgRU5EKG5hbWUpCVwKKwljZmlfZW5kcHJvYzsJXAorCS5zaXplIG5hbWUsIC4tbmFtZQorIyBlbmRpZgorCisjZW5kaWYKKworI2RlZmluZSBKTVBUQkwoSSwgQikJSSAtIEIKKyNkZWZpbmUgQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShUQUJMRSwgSU5ERVgsIFNDQUxFKQlcCisJbGVhCVRBQkxFKCVyaXApLCAlcjExOwlcCisJbW92c2xxCSglcjExLCBJTkRFWCwgU0NBTEUpLCAlcmN4OwlcCisJbGVhCSglcjExLCAlcmN4KSwgJXJjeDsJXAorCWptcAkqJXJjeAorCisjaWZuZGVmIFVTRV9BU19TVFJDQVQKKworIyBkZWZpbmUgUkVUVVJOIHJldAorCisudGV4dAorRU5UUlkgKFNUUkNQWSkKKyMgaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwltb3YJJXJkeCwgJXI4CisJdGVzdAklcjgsICVyOAorCWp6CUwoRXhpdFplcm8pCisjIGVuZGlmCisJbW92CSVyc2ksICVyY3gKKyMgaWZuZGVmIFVTRV9BU19TVFBDUFkKKwltb3YJJXJkaSwgJXJheCAgICAgIC8qIHNhdmUgcmVzdWx0ICovCisjIGVuZGlmCisKKyNlbmRpZgorCWFuZAkkNjMsICVyY3gKKwljbXAJJDMyLCAlcmN4CisJamJlCUwoU291cmNlU3RyaW5nQWxpZ25tZW50TGVzczMyKQorCisJYW5kCSQtMTYsICVyc2kKKwlhbmQJJDE1LCAlcmN4CisJcHhvcgkleG1tMCwgJXhtbTAKKwlweG9yCSV4bW0xLCAleG1tMQorCisJcGNtcGVxYgkoJXJzaSksICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVyZHgKKwlzaHIJJWNsLCAlcmR4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKyMgaWYgZGVmaW5lZCBVU0VfQVNfU1RQQ1BZIHx8IGRlZmluZWQgVVNFX0FTX1NUUkNBVAorCW1vdgkkMTYsICVyMTAKKwlzdWIJJXJjeCwgJXIxMAorCWNtcAklcjEwLCAlcjgKKyMgZWxzZQorCW1vdgkkMTcsICVyMTAKKwlzdWIJJXJjeCwgJXIxMAorCWNtcAklcjEwLCAlcjgKKyMgZW5kaWYKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklcmR4LCAlcmR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVGFpbCkKKworCXBjbXBlcWIJMTYoJXJzaSksICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVyZHgKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCWFkZAkkMTYsICVyMTAKKwljbXAJJXIxMCwgJXI4CisJamJlCUwoQ29weUZyb20xVG8zMkJ5dGVzQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklcmR4LCAlcmR4CisJam56CUwoQ29weUZyb20xVG8zMkJ5dGVzKQorCisJbW92ZHF1CSglcnNpLCAlcmN4KSwgJXhtbTEgICAvKiBjb3B5IDE2IGJ5dGVzICovCisJbW92ZHF1CSV4bW0xLCAoJXJkaSkKKworLyogSWYgc291cmNlIGFkcmVzcyBhbGlnbm1lbnQgIT0gZGVzdGluYXRpb24gYWRyZXNzIGFsaWdubWVudCAqLworCS5wMmFsaWduIDQKK0woVW5hbGlnbjE2Qm90aCk6CisJc3ViCSVyY3gsICVyZGkKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCWFkZAklcmN4LCAlcjgKKyNlbmRpZgorCW1vdgkkMTYsICVyY3gKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmFwcwkxNiglcnNpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcXUJJXhtbTEsICglcmRpLCAlcmN4KQorCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVyZHgKKwlhZGQJJDE2LCAlcmN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDQ4LCAlcjgKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVyZHgsICVyZHgKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW0yKQorI2Vsc2UKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCW1vdmFwcwkxNiglcnNpLCAlcmN4KSwgJXhtbTMKKwltb3ZkcXUJJXhtbTIsICglcmRpLCAlcmN4KQorCXBjbXBlcWIJJXhtbTMsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVyZHgKKwlhZGQJJDE2LCAlcmN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlcjgKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVyZHgsICVyZHgKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW0zKQorI2Vsc2UKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCW1vdmFwcwkxNiglcnNpLCAlcmN4KSwgJXhtbTQKKwltb3ZkcXUJJXhtbTMsICglcmRpLCAlcmN4KQorCXBjbXBlcWIJJXhtbTQsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVyZHgKKwlhZGQJJDE2LCAlcmN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlcjgKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVyZHgsICVyZHgKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW00KQorI2Vsc2UKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCW1vdmFwcwkxNiglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTQsICglcmRpLCAlcmN4KQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVyZHgKKwlhZGQJJDE2LCAlcmN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlcjgKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVyZHgsICVyZHgKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW0xKQorI2Vsc2UKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCW1vdmFwcwkxNiglcnNpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcXUJJXhtbTEsICglcmRpLCAlcmN4KQorCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVyZHgKKwlhZGQJJDE2LCAlcmN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlcjgKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVyZHgsICVyZHgKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW0yKQorI2Vsc2UKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCW1vdmFwcwkxNiglcnNpLCAlcmN4KSwgJXhtbTMKKwltb3ZkcXUJJXhtbTIsICglcmRpLCAlcmN4KQorCXBjbXBlcWIJJXhtbTMsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVyZHgKKwlhZGQJJDE2LCAlcmN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlcjgKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVyZHgsICVyZHgKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW0zKQorI2Vsc2UKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCW1vdmRxdQkleG1tMywgKCVyZGksICVyY3gpCisJbW92CSVyc2ksICVyZHgKKwlsZWEJMTYoJXJzaSwgJXJjeCksICVyc2kKKwlhbmQJJC0weDQwLCAlcnNpCisJc3ViCSVyc2ksICVyZHgKKwlzdWIJJXJkeCwgJXJkaQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJbGVhCTEyOCglcjgsICVyZHgpLCAlcjgKKyNlbmRpZgorTChVbmFsaWduZWQ2NExvb3ApOgorCW1vdmFwcwkoJXJzaSksICV4bW0yCisJbW92YXBzCSV4bW0yLCAleG1tNAorCW1vdmFwcwkxNiglcnNpKSwgJXhtbTUKKwltb3ZhcHMJMzIoJXJzaSksICV4bW0zCisJbW92YXBzCSV4bW0zLCAleG1tNgorCW1vdmFwcwk0OCglcnNpKSwgJXhtbTcKKwlwbWludWIJJXhtbTUsICV4bW0yCisJcG1pbnViCSV4bW03LCAleG1tMworCXBtaW51YgkleG1tMiwgJXhtbTMKKwlwY21wZXFiCSV4bW0wLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlcmR4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDY0LCAlcjgKKwlqYmUJTChVbmFsaWduZWRMZWF2ZUNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJXJkeCwgJXJkeAorCWpueglMKFVuYWxpZ25lZDY0TGVhdmUpCisKK0woVW5hbGlnbmVkNjRMb29wX3N0YXJ0KToKKwlhZGQJJDY0LCAlcmRpCisJYWRkCSQ2NCwgJXJzaQorCW1vdmRxdQkleG1tNCwgLTY0KCVyZGkpCisJbW92YXBzCSglcnNpKSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisJbW92ZHF1CSV4bW01LCAtNDgoJXJkaSkKKwltb3ZhcHMJMTYoJXJzaSksICV4bW01CisJcG1pbnViCSV4bW01LCAleG1tMgorCW1vdmFwcwkzMiglcnNpKSwgJXhtbTMKKwltb3ZkcXUJJXhtbTYsIC0zMiglcmRpKQorCW1vdmFwcwkleG1tMywgJXhtbTYKKwltb3ZkcXUJJXhtbTcsIC0xNiglcmRpKQorCW1vdmFwcwk0OCglcnNpKSwgJXhtbTcKKwlwbWludWIJJXhtbTcsICV4bW0zCisJcG1pbnViCSV4bW0yLCAleG1tMworCXBjbXBlcWIJJXhtbTAsICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVyZHgKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNjQsICVyOAorCWpiZQlMKFVuYWxpZ25lZExlYXZlQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklcmR4LCAlcmR4CisJanoJTChVbmFsaWduZWQ2NExvb3Bfc3RhcnQpCisKK0woVW5hbGlnbmVkNjRMZWF2ZSk6CisJcHhvcgkleG1tMSwgJXhtbTEKKworCXBjbXBlcWIJJXhtbTQsICV4bW0wCisJcGNtcGVxYgkleG1tNSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMCwgJXJkeAorCXBtb3Ztc2tiICV4bW0xLCAlcmN4CisJdGVzdAklcmR4LCAlcmR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkXzApCisJdGVzdAklcmN4LCAlcmN4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkXzE2KQorCisJcGNtcGVxYgkleG1tNiwgJXhtbTAKKwlwY21wZXFiCSV4bW03LCAleG1tMQorCXBtb3Ztc2tiICV4bW0wLCAlcmR4CisJcG1vdm1za2IgJXhtbTEsICVyY3gKKwl0ZXN0CSVyZHgsICVyZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRfMzIpCisKKwlic2YJJXJjeCwgJXJkeAorCW1vdmRxdQkleG1tNCwgKCVyZGkpCisJbW92ZHF1CSV4bW01LCAxNiglcmRpKQorCW1vdmRxdQkleG1tNiwgMzIoJXJkaSkKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKyMgaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk0OCglcmRpLCAlcmR4KSwgJXJheAorIyBlbmRpZgorCW1vdmRxdQkleG1tNywgNDgoJXJkaSkKKwlhZGQJJDE1LCAlcjgKKwlzdWIJJXJkeCwgJXI4CisJbGVhCTQ5KCVyZGksICVyZHgpLCAlcmRpCisJam1wCUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZWxzZQorCWFkZAkkNDgsICVyc2kKKwlhZGQJJDQ4LCAlcmRpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0VGFibGUpLCAlcmR4LCA0KQorI2VuZGlmCisKKy8qIElmIHNvdXJjZSBhZHJlc3MgYWxpZ25tZW50ID09IGRlc3RpbmF0aW9uIGFkcmVzcyBhbGlnbm1lbnQgKi8KKworTChTb3VyY2VTdHJpbmdBbGlnbm1lbnRMZXNzMzIpOgorCXB4b3IJJXhtbTAsICV4bW0wCisJbW92ZHF1CSglcnNpKSwgJXhtbTEKKwltb3ZkcXUJMTYoJXJzaSksICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJXJkeAorCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKyMgaWYgZGVmaW5lZCBVU0VfQVNfU1RQQ1BZIHx8IGRlZmluZWQgVVNFX0FTX1NUUkNBVAorCWNtcAkkMTYsICVyOAorIyBlbHNlCisJY21wCSQxNywgJXI4CisjIGVuZGlmCisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzVGFpbDFDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVyZHgsICVyZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsMSkKKworCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJbW92ZHF1CSV4bW0xLCAoJXJkaSkKKwlwbW92bXNrYiAleG1tMCwgJXJkeAorCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKyMgaWYgZGVmaW5lZCBVU0VfQVNfU1RQQ1BZIHx8IGRlZmluZWQgVVNFX0FTX1NUUkNBVAorCWNtcAkkMzIsICVyOAorIyBlbHNlCisJY21wCSQzMywgJXI4CisjIGVuZGlmCisJamJlCUwoQ29weUZyb20xVG8zMkJ5dGVzMUNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJXJkeCwgJXJkeAorCWpueglMKENvcHlGcm9tMVRvMzJCeXRlczEpCisKKwlhbmQJJDE1LCAlcmN4CisJYW5kCSQtMTYsICVyc2kKKworCWptcAlMKFVuYWxpZ24xNkJvdGgpCisKKy8qLS0tLS0tRW5kIG9mIG1haW4gcGFydCB3aXRoIGxvb3BzLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQ2FzZTEgKi8KKworI2lmICghZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSkgfHwgKGRlZmluZWQgVVNFX0FTX1NUUkNBVCkKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlcyk6CisJYWRkCSVyY3gsICVyZGkKKwlhZGQJJXJjeCwgJXJzaQorCWJzZgklcmR4LCAlcmR4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0VGFibGUpLCAlcmR4LCA0KQorI2VuZGlmCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsKToKKwlhZGQJJXJjeCwgJXJzaQorCWJzZgklcmR4LCAlcmR4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0VGFibGUpLCAlcmR4LCA0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzMyQnl0ZXMxKToKKwlhZGQJJDE2LCAlcnNpCisJYWRkCSQxNiwgJXJkaQorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMTYsICVyOAorI2VuZGlmCitMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwxKToKKwlic2YJJXJkeCwgJXJkeAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJXJkeCwgNCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8zMkJ5dGVzKToKKwlic2YJJXJkeCwgJXJkeAorCWFkZAklcmN4LCAlcnNpCisJYWRkCSQxNiwgJXJkeAorCXN1YgklcmN4LCAlcmR4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0VGFibGUpLCAlcmR4LCA0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRfMCk6CisJYnNmCSVyZHgsICVyZHgKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKyMgaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkoJXJkaSwgJXJkeCksICVyYXgKKyMgZW5kaWYKKwltb3ZkcXUJJXhtbTQsICglcmRpKQorCWFkZAkkNjMsICVyOAorCXN1YgklcmR4LCAlcjgKKwlsZWEJMSglcmRpLCAlcmR4KSwgJXJkaQorCWptcAlMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2Vsc2UKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRUYWJsZSksICVyZHgsIDQpCisjZW5kaWYKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkXzE2KToKKwlic2YJJXJjeCwgJXJkeAorCW1vdmRxdQkleG1tNCwgKCVyZGkpCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisjIGlmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTYoJXJkaSwgJXJkeCksICVyYXgKKyMgZW5kaWYKKwltb3ZkcXUJJXhtbTUsIDE2KCVyZGkpCisJYWRkCSQ0NywgJXI4CisJc3ViCSVyZHgsICVyOAorCWxlYQkxNyglcmRpLCAlcmR4KSwgJXJkaQorCWptcAlMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2Vsc2UKKwlhZGQJJDE2LCAlcnNpCisJYWRkCSQxNiwgJXJkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJXJkeCwgNCkKKyNlbmRpZgorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRfMzIpOgorCWJzZgklcmR4LCAlcmR4CisJbW92ZHF1CSV4bW00LCAoJXJkaSkKKwltb3ZkcXUJJXhtbTUsIDE2KCVyZGkpCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisjIGlmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMzIoJXJkaSwgJXJkeCksICVyYXgKKyMgZW5kaWYKKwltb3ZkcXUJJXhtbTYsIDMyKCVyZGkpCisJYWRkCSQzMSwgJXI4CisJc3ViCSVyZHgsICVyOAorCWxlYQkzMyglcmRpLCAlcmR4KSwgJXJkaQorCWptcAlMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2Vsc2UKKwlhZGQJJDMyLCAlcnNpCisJYWRkCSQzMiwgJXJkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJXJkeCwgNCkKKyNlbmRpZgorCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKyMgaWZuZGVmIFVTRV9BU19TVFJDQVQgCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW02KToKKwltb3ZkcXUJJXhtbTYsICglcmRpLCAlcmN4KQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc1htbUV4aXQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZFhtbTUpOgorCW1vdmRxdQkleG1tNSwgKCVyZGksICVyY3gpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tRXhpdCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tNCk6CisJbW92ZHF1CSV4bW00LCAoJXJkaSwgJXJjeCkKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW1FeGl0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW0zKToKKwltb3ZkcXUJJXhtbTMsICglcmRpLCAlcmN4KQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc1htbUV4aXQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZFhtbTEpOgorCW1vdmRxdQkleG1tMSwgKCVyZGksICVyY3gpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tRXhpdCkKKyMgZW5kaWYKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzRXhpdCk6CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0VGFibGUpLCAlcmR4LCA0KQorCisvKiBDYXNlMiAqLworCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMik6CisJYWRkCSQxNiwgJXI4CisJYWRkCSVyY3gsICVyZGkKKwlhZGQJJXJjeCwgJXJzaQorCWJzZgklcmR4LCAlcmR4CisJY21wCSVyOCwgJXJkeAorCWpiCUwoQ29weUZyb20xVG8xNkJ5dGVzRXhpdCkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRTdHJuY3B5VGFibGUpLCAlcjgsIDQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMzJCeXRlc0Nhc2UyKToKKwlhZGQJJXJjeCwgJXJzaQorCWJzZgklcmR4LCAlcmR4CisJYWRkCSQxNiwgJXJkeAorCXN1YgklcmN4LCAlcmR4CisJY21wCSVyOCwgJXJkeAorCWpiCUwoQ29weUZyb20xVG8xNkJ5dGVzRXhpdCkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRTdHJuY3B5VGFibGUpLCAlcjgsIDQpCisKK0woQ29weUZyb20xVG8xNkJ5dGVzVGFpbENhc2UyKToKKwlhZGQJJXJjeCwgJXJzaQorCWJzZgklcmR4LCAlcmR4CisJY21wCSVyOCwgJXJkeAorCWpiCUwoQ29weUZyb20xVG8xNkJ5dGVzRXhpdCkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRTdHJuY3B5VGFibGUpLCAlcjgsIDQpCisKK0woQ29weUZyb20xVG8xNkJ5dGVzVGFpbDFDYXNlMik6CisJYnNmCSVyZHgsICVyZHgKKwljbXAJJXI4LCAlcmR4CisJamIJTChDb3B5RnJvbTFUbzE2Qnl0ZXNFeGl0KQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFN0cm5jcHlUYWJsZSksICVyOCwgNCkKKworLyogQ2FzZTIgb3IgQ2FzZTMsICBDYXNlMyAqLworCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpOgorCXRlc3QJJXJkeCwgJXJkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyKQorTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMyk6CisJYWRkCSQxNiwgJXI4CisJYWRkCSVyY3gsICVyZGkKKwlhZGQJJXJjeCwgJXJzaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFN0cm5jcHlUYWJsZSksICVyOCwgNCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8zMkJ5dGVzQ2FzZTJPckNhc2UzKToKKwl0ZXN0CSVyZHgsICVyZHgKKwlqbnoJTChDb3B5RnJvbTFUbzMyQnl0ZXNDYXNlMikKKwlhZGQJJXJjeCwgJXJzaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFN0cm5jcHlUYWJsZSksICVyOCwgNCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzVGFpbENhc2UyT3JDYXNlMyk6CisJdGVzdAklcmR4LCAlcmR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVGFpbENhc2UyKQorCWFkZAklcmN4LCAlcnNpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0U3RybmNweVRhYmxlKSwgJXI4LCA0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzMyQnl0ZXMxQ2FzZTJPckNhc2UzKToKKwlhZGQJJDE2LCAlcmRpCisJYWRkCSQxNiwgJXJzaQorCXN1YgkkMTYsICVyOAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsMUNhc2UyT3JDYXNlMyk6CisJdGVzdAklcmR4LCAlcmR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVGFpbDFDYXNlMikKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRTdHJuY3B5VGFibGUpLCAlcjgsIDQpCisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLUVuZCBsYWJlbHMgcmVnYXJkaW5nIHdpdGggY29weWluZyAxLTE2IGJ5dGVzLS1hbmQgMS0zMiBieXRlcy0tLS0qLworCisJLnAyYWxpZ24gNAorTChFeGl0MSk6CisJbW92CSVkaCwgKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMSwgJXI4CisJbGVhCTEoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0Mik6CisJbW92CSglcnNpKSwgJWR4CisJbW92CSVkeCwgKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDIsICVyOAorCWxlYQkyKCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDMpOgorCW1vdgkoJXJzaSksICVjeAorCW1vdgklY3gsICglcmRpKQorCW1vdgklZGgsIDIoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTIoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMywgJXI4CisJbGVhCTMoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0NCk6CisJbW92CSglcnNpKSwgJWVkeAorCW1vdgklZWR4LCAoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTMoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkNCwgJXI4CisJbGVhCTQoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0NSk6CisJbW92CSglcnNpKSwgJWVjeAorCW1vdgklZGgsIDQoJXJkaSkKKwltb3YJJWVjeCwgKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk0KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDUsICVyOAorCWxlYQk1KCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDYpOgorCW1vdgkoJXJzaSksICVlY3gKKwltb3YJNCglcnNpKSwgJWR4CisJbW92CSVlY3gsICglcmRpKQorCW1vdgklZHgsIDQoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTUoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkNiwgJXI4CisJbGVhCTYoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0Nyk6CisJbW92CSglcnNpKSwgJWVjeAorCW1vdgkzKCVyc2kpLCAlZWR4CisJbW92CSVlY3gsICglcmRpKQorCW1vdgklZWR4LCAzKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk2KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDcsICVyOAorCWxlYQk3KCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDgpOgorCW1vdgkoJXJzaSksICVyZHgKKwltb3YJJXJkeCwgKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk3KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDgsICVyOAorCWxlYQk4KCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDkpOgorCW1vdgkoJXJzaSksICVyY3gKKwltb3YJJWRoLCA4KCVyZGkpCisJbW92CSVyY3gsICglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJOCglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQ5LCAlcjgKKwlsZWEJOSglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxMCk6CisJbW92CSglcnNpKSwgJXJjeAorCW1vdgk4KCVyc2kpLCAlZHgKKwltb3YJJXJjeCwgKCVyZGkpCisJbW92CSVkeCwgOCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJOSglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQxMCwgJXI4CisJbGVhCTEwKCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDExKToKKwltb3YJKCVyc2kpLCAlcmN4CisJbW92CTcoJXJzaSksICVlZHgKKwltb3YJJXJjeCwgKCVyZGkpCisJbW92CSVlZHgsIDcoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTEwKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDExLCAlcjgKKwlsZWEJMTEoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTIpOgorCW1vdgkoJXJzaSksICVyY3gKKwltb3YJOCglcnNpKSwgJWVkeAorCW1vdgklcmN4LCAoJXJkaSkKKwltb3YJJWVkeCwgOCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTEoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMTIsICVyOAorCWxlYQkxMiglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxMyk6CisJbW92CSglcnNpKSwgJXJjeAorCW1vdgk1KCVyc2kpLCAlcmR4CisJbW92CSVyY3gsICglcmRpKQorCW1vdgklcmR4LCA1KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxMiglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQxMywgJXI4CisJbGVhCTEzKCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDE0KToKKwltb3YJKCVyc2kpLCAlcmN4CisJbW92CTYoJXJzaSksICVyZHgKKwltb3YJJXJjeCwgKCVyZGkpCisJbW92CSVyZHgsIDYoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTEzKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDE0LCAlcjgKKwlsZWEJMTQoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTUpOgorCW1vdgkoJXJzaSksICVyY3gKKwltb3YJNyglcnNpKSwgJXJkeAorCW1vdgklcmN4LCAoJXJkaSkKKwltb3YJJXJkeCwgNyglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTQoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMTUsICVyOAorCWxlYQkxNSglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxNik6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTUoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMTYsICVyOAorCWxlYQkxNiglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxNyk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklZGgsIDE2KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxNiglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQxNywgJXI4CisJbGVhCTE3KCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDE4KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNiglcnNpKSwgJWN4CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJWN4LCAxNiglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTcoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMTgsICVyOAorCWxlYQkxOCglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxOSk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTUoJXJzaSksICVlY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklZWN4LCAxNSglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTgoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMTksICVyOAorCWxlYQkxOSglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyMCk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTYoJXJzaSksICVlY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklZWN4LCAxNiglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTkoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMjAsICVyOAorCWxlYQkyMCglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyMSk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTYoJXJzaSksICVlY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklZWN4LCAxNiglcmRpKQorCW1vdgklZGgsIDIwKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyMCglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQyMSwgJXI4CisJbGVhCTIxKCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDIyKToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNCglcnNpKSwgJXJjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92CSVyY3gsIDE0KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyMSglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQyMiwgJXI4CisJbGVhCTIyKCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDIzKToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNSglcnNpKSwgJXJjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92CSVyY3gsIDE1KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyMiglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQyMywgJXI4CisJbGVhCTIzKCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDI0KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNiglcnNpKSwgJXJjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92CSVyY3gsIDE2KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyMyglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQyNCwgJXI4CisJbGVhCTI0KCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDI1KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNiglcnNpKSwgJXJjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92CSVyY3gsIDE2KCVyZGkpCisJbW92CSVkaCwgMjQoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTI0KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDI1LCAlcjgKKwlsZWEJMjUoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MjYpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE2KCVyc2kpLCAlcmR4CisJbW92CTI0KCVyc2kpLCAlY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklcmR4LCAxNiglcmRpKQorCW1vdgklY3gsIDI0KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyNSglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQyNiwgJXI4CisJbGVhCTI2KCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDI3KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNiglcnNpKSwgJXJkeAorCW1vdgkyMyglcnNpKSwgJWVjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92CSVyZHgsIDE2KCVyZGkpCisJbW92CSVlY3gsIDIzKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyNiglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQyNywgJXI4CisJbGVhCTI3KCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDI4KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNiglcnNpKSwgJXJkeAorCW1vdgkyNCglcnNpKSwgJWVjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92CSVyZHgsIDE2KCVyZGkpCisJbW92CSVlY3gsIDI0KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyNyglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQyOCwgJXI4CisJbGVhCTI4KCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDI5KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdmRxdQkxMyglcnNpKSwgJXhtbTIKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdmRxdQkleG1tMiwgMTMoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTI4KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDI5LCAlcjgKKwlsZWEJMjkoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MzApOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CTE0KCVyc2kpLCAleG1tMgorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0yLCAxNCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjkoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMzAsICVyOAorCWxlYQkzMCglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQzMSk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTUoJXJzaSksICV4bW0yCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZkcXUJJXhtbTIsIDE1KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkzMCglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQzMSwgJXI4CisJbGVhCTMxKCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDMyKToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdmRxdQkxNiglcnNpKSwgJXhtbTIKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdmRxdQkleG1tMiwgMTYoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTMxKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDMyLCAlcjgKKwlsZWEJMzIoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQwKToKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbW92CSVyZGksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgKCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxKToKKwltb3YJKCVyc2kpLCAlZGwKKwltb3YJJWRsLCAoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTEoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgMSglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0Mik6CisJbW92CSglcnNpKSwgJWR4CisJbW92CSVkeCwgKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDIoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDMpOgorCW1vdgkoJXJzaSksICVjeAorCW1vdgkyKCVyc2kpLCAlZGwKKwltb3YJJWN4LCAoJXJkaSkKKwltb3YJJWRsLCAyKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkzKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDMoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDQpOgorCW1vdgkoJXJzaSksICVlZHgKKwltb3YJJWVkeCwgKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk0KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDQoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDUpOgorCW1vdgkoJXJzaSksICVlY3gKKwltb3YJNCglcnNpKSwgJWRsCisJbW92CSVlY3gsICglcmRpKQorCW1vdgklZGwsIDQoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTUoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgNSglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0Nik6CisJbW92CSglcnNpKSwgJWVjeAorCW1vdgk0KCVyc2kpLCAlZHgKKwltb3YJJWVjeCwgKCVyZGkpCisJbW92CSVkeCwgNCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJNiglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCA2KCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQ3KToKKwltb3YJKCVyc2kpLCAlZWN4CisJbW92CTMoJXJzaSksICVlZHgKKwltb3YJJWVjeCwgKCVyZGkpCisJbW92CSVlZHgsIDMoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTcoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgNyglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0OCk6CisJbW92CSglcnNpKSwgJXJkeAorCW1vdgklcmR4LCAoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTgoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgOCglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0OSk6CisJbW92CSglcnNpKSwgJXJjeAorCW1vdgk4KCVyc2kpLCAlZGwKKwltb3YJJXJjeCwgKCVyZGkpCisJbW92CSVkbCwgOCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJOSglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCA5KCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxMCk6CisJbW92CSglcnNpKSwgJXJjeAorCW1vdgk4KCVyc2kpLCAlZHgKKwltb3YJJXJjeCwgKCVyZGkpCisJbW92CSVkeCwgOCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTAoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgMTAoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDExKToKKwltb3YJKCVyc2kpLCAlcmN4CisJbW92CTcoJXJzaSksICVlZHgKKwltb3YJJXJjeCwgKCVyZGkpCisJbW92CSVlZHgsIDcoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTExKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDExKCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxMik6CisJbW92CSglcnNpKSwgJXJjeAorCW1vdgk4KCVyc2kpLCAlZWR4CisJbW92CSVyY3gsICglcmRpKQorCW1vdgklZWR4LCA4KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxMiglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAxMiglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTMpOgorCW1vdgkoJXJzaSksICVyY3gKKwltb3YJNSglcnNpKSwgJXJkeAorCW1vdgklcmN4LCAoJXJkaSkKKwltb3YJJXJkeCwgNSglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTMoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgMTMoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDE0KToKKwltb3YJKCVyc2kpLCAlcmN4CisJbW92CTYoJXJzaSksICVyZHgKKwltb3YJJXJjeCwgKCVyZGkpCisJbW92CSVyZHgsIDYoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE0KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDE0KCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxNSk6CisJbW92CSglcnNpKSwgJXJjeAorCW1vdgk3KCVyc2kpLCAlcmR4CisJbW92CSVyY3gsICglcmRpKQorCW1vdgklcmR4LCA3KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxNSglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAxNSglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTYpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE2KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDE2KCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxNyk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTYoJXJzaSksICVjbAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92CSVjbCwgMTYoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE3KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDE3KCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxOCk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTYoJXJzaSksICVjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92CSVjeCwgMTYoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE4KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDE4KCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxOSk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTUoJXJzaSksICVlY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklZWN4LCAxNSglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTkoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgMTkoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDIwKToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNiglcnNpKSwgJWVjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92CSVlY3gsIDE2KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyMCglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAyMCglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MjEpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE2KCVyc2kpLCAlZWN4CisJbW92CTIwKCVyc2kpLCAlZGwKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklZWN4LCAxNiglcmRpKQorCW1vdgklZGwsIDIwKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyMSglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAyMSglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MjIpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE0KCVyc2kpLCAlcmN4CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJXJjeCwgMTQoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTIyKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDIyKCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQyMyk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTUoJXJzaSksICVyY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklcmN4LCAxNSglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjMoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgMjMoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDI0KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNiglcnNpKSwgJXJjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92CSVyY3gsIDE2KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyNCglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAyNCglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MjUpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE2KCVyc2kpLCAlcmR4CisJbW92CTI0KCVyc2kpLCAlY2wKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklcmR4LCAxNiglcmRpKQorCW1vdgklY2wsIDI0KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyNSglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAyNSglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MjYpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE2KCVyc2kpLCAlcmR4CisJbW92CTI0KCVyc2kpLCAlY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklcmR4LCAxNiglcmRpKQorCW1vdgklY3gsIDI0KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyNiglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAyNiglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MjcpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE2KCVyc2kpLCAlcmR4CisJbW92CTIzKCVyc2kpLCAlZWN4CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJXJkeCwgMTYoJXJkaSkKKwltb3YJJWVjeCwgMjMoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTI3KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDI3KCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQyOCk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTYoJXJzaSksICVyZHgKKwltb3YJMjQoJXJzaSksICVlY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklcmR4LCAxNiglcmRpKQorCW1vdgklZWN4LCAyNCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjgoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgMjgoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDI5KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdmRxdQkxMyglcnNpKSwgJXhtbTIKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdmRxdQkleG1tMiwgMTMoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTI5KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDI5KCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQzMCk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTQoJXJzaSksICV4bW0yCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZkcXUJJXhtbTIsIDE0KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkzMCglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAzMCglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MzEpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CTE1KCVyc2kpLCAleG1tMgorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0yLCAxNSglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMzEoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgMzEoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDMyKToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdmRxdQkxNiglcnNpKSwgJXhtbTIKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdmRxdQkleG1tMiwgMTYoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTMyKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDMyKCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQzMyk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJXJzaSksICV4bW0yCisJbW92CTMyKCVyc2kpLCAlY2wKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdmRxdQkleG1tMiwgMTYoJXJkaSkKKwltb3YJJWNsLCAzMiglcmRpKQorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgMzMoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisjaWZuZGVmIFVTRV9BU19TVFJDQVQKKworCS5wMmFsaWduIDQKK0woRmlsbDApOgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsMSk6CisJbW92CSVkbCwgKCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwyKToKKwltb3YJJWR4LCAoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDMpOgorCW1vdgklZWR4LCAtMSglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsNCk6CisJbW92CSVlZHgsICglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsNSk6CisJbW92CSVlZHgsICglcmRpKQorCW1vdgklZGwsIDQoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDYpOgorCW1vdgklZWR4LCAoJXJkaSkKKwltb3YJJWR4LCA0KCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGw3KToKKwltb3YJJXJkeCwgLTEoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDgpOgorCW1vdgklcmR4LCAoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDkpOgorCW1vdgklcmR4LCAoJXJkaSkKKwltb3YJJWRsLCA4KCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwxMCk6CisJbW92CSVyZHgsICglcmRpKQorCW1vdgklZHgsIDgoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDExKToKKwltb3YJJXJkeCwgKCVyZGkpCisJbW92CSVlZHgsIDcoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDEyKToKKwltb3YJJXJkeCwgKCVyZGkpCisJbW92CSVlZHgsIDgoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDEzKToKKwltb3YJJXJkeCwgKCVyZGkpCisJbW92CSVyZHgsIDUoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDE0KToKKwltb3YJJXJkeCwgKCVyZGkpCisJbW92CSVyZHgsIDYoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDE1KToKKwltb3ZkcXUJJXhtbTAsIC0xKCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwxNik6CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tMik6CisJbW92ZHF1CSV4bW0yLCAoJXJkaSwgJXJjeCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzWG1tRXhpdCk6CisJYnNmCSVyZHgsICVyZHgKKwlhZGQJJDE1LCAlcjgKKwlhZGQJJXJjeCwgJXJkaQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJKCVyZGksICVyZHgpLCAlcmF4CisjZW5kaWYKKwlzdWIJJXJkeCwgJXI4CisJbGVhCTEoJXJkaSwgJXJkeCksICVyZGkKKworCS5wMmFsaWduIDQKK0woU3RybmNweUZpbGxUYWlsV2l0aFplcm8pOgorCXB4b3IJJXhtbTAsICV4bW0wCisJeG9yCSVyZHgsICVyZHgKKwlzdWIJJDE2LCAlcjgKKwlqYmUJTChTdHJuY3B5RmlsbEV4aXQpCisKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCWFkZAkkMTYsICVyZGkKKworCW1vdgklcmRpLCAlcnNpCisJYW5kCSQweGYsICVyc2kKKwlzdWIJJXJzaSwgJXJkaQorCWFkZAklcnNpLCAlcjgKKwlzdWIJJDY0LCAlcjgKKwlqYglMKFN0cm5jcHlGaWxsTGVzczY0KQorCitMKFN0cm5jcHlGaWxsTG9vcE1vdmRxYSk6CisJbW92ZHFhCSV4bW0wLCAoJXJkaSkKKwltb3ZkcWEJJXhtbTAsIDE2KCVyZGkpCisJbW92ZHFhCSV4bW0wLCAzMiglcmRpKQorCW1vdmRxYQkleG1tMCwgNDgoJXJkaSkKKwlhZGQJJDY0LCAlcmRpCisJc3ViCSQ2NCwgJXI4CisJamFlCUwoU3RybmNweUZpbGxMb29wTW92ZHFhKQorCitMKFN0cm5jcHlGaWxsTGVzczY0KToKKwlhZGQJJDMyLCAlcjgKKwlqbAlMKFN0cm5jcHlGaWxsTGVzczMyKQorCW1vdmRxYQkleG1tMCwgKCVyZGkpCisJbW92ZHFhCSV4bW0wLCAxNiglcmRpKQorCWFkZAkkMzIsICVyZGkKKwlzdWIJJDE2LCAlcjgKKwlqbAlMKFN0cm5jcHlGaWxsRXhpdCkKKwltb3ZkcWEJJXhtbTAsICglcmRpKQorCWFkZAkkMTYsICVyZGkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEZpbGxUYWJsZSksICVyOCwgNCkKKworTChTdHJuY3B5RmlsbExlc3MzMik6CisJYWRkCSQxNiwgJXI4CisJamwJTChTdHJuY3B5RmlsbEV4aXQpCisJbW92ZHFhCSV4bW0wLCAoJXJkaSkKKwlhZGQJJDE2LCAlcmRpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChGaWxsVGFibGUpLCAlcjgsIDQpCisKK0woU3RybmNweUZpbGxFeGl0KToKKwlhZGQJJDE2LCAlcjgKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEZpbGxUYWJsZSksICVyOCwgNCkKKworLyogZW5kIG9mIGlmbmRlZiBVU0VfQVNfU1RSQ0FUICovCisjZW5kaWYKKworCS5wMmFsaWduIDQKK0woVW5hbGlnbmVkTGVhdmVDYXNlMk9yQ2FzZTMpOgorCXRlc3QJJXJkeCwgJXJkeAorCWpueglMKFVuYWxpZ25lZDY0TGVhdmVDYXNlMikKK0woVW5hbGlnbmVkNjRMZWF2ZUNhc2UzKToKKwlsZWEJNjQoJXI4KSwgJXJjeAorCWFuZAkkLTE2LCAlcmN4CisJYWRkCSQ0OCwgJXI4CisJamwJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKwltb3ZkcXUJJXhtbTQsICglcmRpKQorCXN1YgkkMTYsICVyOAorCWpiCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisJbW92ZHF1CSV4bW01LCAxNiglcmRpKQorCXN1YgkkMTYsICVyOAorCWpiCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisJbW92ZHF1CSV4bW02LCAzMiglcmRpKQorCXN1YgkkMTYsICVyOAorCWpiCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisJbW92ZHF1CSV4bW03LCA0OCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJNjQoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgNjQoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChVbmFsaWduZWQ2NExlYXZlQ2FzZTIpOgorCXhvcgklcmN4LCAlcmN4CisJcGNtcGVxYgkleG1tNCwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJXJkeAorCWFkZAkkNDgsICVyOAorCWpsZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKwl0ZXN0CSVyZHgsICVyZHgKKyNpZm5kZWYgVVNFX0FTX1NUUkNBVAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZFhtbTQpCisjZWxzZQorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlcykKKyNlbmRpZgorCXBjbXBlcWIJJXhtbTUsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVyZHgKKwltb3ZkcXUJJXhtbTQsICglcmRpKQorCWFkZAkkMTYsICVyY3gKKwlzdWIJJDE2LCAlcjgKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisJdGVzdAklcmR4LCAlcmR4CisjaWZuZGVmIFVTRV9BU19TVFJDQVQKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW01KQorI2Vsc2UKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCXBjbXBlcWIJJXhtbTYsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVyZHgKKwltb3ZkcXUJJXhtbTUsIDE2KCVyZGkpCisJYWRkCSQxNiwgJXJjeAorCXN1YgkkMTYsICVyOAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKwl0ZXN0CSVyZHgsICVyZHgKKyNpZm5kZWYgVVNFX0FTX1NUUkNBVAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZFhtbTYpCisjZWxzZQorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlcykKKyNlbmRpZgorCisJcGNtcGVxYgkleG1tNywgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJXJkeAorCW1vdmRxdQkleG1tNiwgMzIoJXJkaSkKKwlsZWEJMTYoJXJkaSwgJXJjeCksICVyZGkKKwlsZWEJMTYoJXJzaSwgJXJjeCksICVyc2kKKwlic2YJJXJkeCwgJXJkeAorCWNtcAklcjgsICVyZHgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0V4aXQpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0U3RybmNweVRhYmxlKSwgJXI4LCA0KQorCisJLnAyYWxpZ24gNAorTChFeGl0WmVybyk6CisjaWZuZGVmIFVTRV9BU19TVFJDQVQKKwltb3YJJXJkaSwgJXJheAorI2VuZGlmCisJUkVUVVJOCisKKyNlbmRpZgorCisjaWZuZGVmIFVTRV9BU19TVFJDQVQKK0VORCAoU1RSQ1BZKQorI2Vsc2UKK0VORCAoU1RSQ0FUKQorI2VuZGlmCisJLnAyYWxpZ24gNAorCS5zZWN0aW9uIC5yb2RhdGEKK0woRXhpdFRhYmxlKToKKwkuaW50CUpNUFRCTChMKEV4aXQxKSwgTChFeGl0VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRXhpdDIpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQ0KSwgTChFeGl0VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRXhpdDUpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0NiksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQ3KSwgTChFeGl0VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRXhpdDgpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0OSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxMCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxMSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxMiksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxMyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxNCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxNSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxNiksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxNyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxOCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQxOSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyMCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyMSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyMiksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyMyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyNCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyNSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyNiksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyNyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyOCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyOSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQzMCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQzMSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQzMiksIEwoRXhpdFRhYmxlKSkKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorTChFeGl0U3RybmNweVRhYmxlKToKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MCksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDEpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQyKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MyksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDQpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQ1KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0NiksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDcpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQ4KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0OSksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDEwKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MTEpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQxMiksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDEzKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MTQpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQxNSksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDE2KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MTcpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQxOCksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDE5KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MjApLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQyMSksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDIyKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MjMpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQyNCksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDI1KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MjYpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQyNyksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDI4KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MjkpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQzMCksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDMxKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MzIpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQzMyksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisjIGlmbmRlZiBVU0VfQVNfU1RSQ0FUCisJLnAyYWxpZ24gNAorTChGaWxsVGFibGUpOgorCS5pbnQJSk1QVEJMKEwoRmlsbDApLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsMSksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGwyKSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDMpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsNCksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGw1KSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDYpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsNyksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGw4KSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDkpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsMTApLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsMTEpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsMTIpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsMTMpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsMTQpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsMTUpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsMTYpLCBMKEZpbGxUYWJsZSkpCisjIGVuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RybGVuLXNsbS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJsZW4tc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc3MmZlNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RybGVuLXNsbS5TCkBAIC0wLDAgKzEsMjk0IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIFVTRV9BU19TVFJDQVQKKworI2lmbmRlZiBTVFJMRU4KKyMgZGVmaW5lIFNUUkxFTgkJc3RybGVuCisjZW5kaWYKKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJCQkuY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2VuZHByb2MKKyMgZGVmaW5lIGNmaV9lbmRwcm9jCQkJLmNmaV9lbmRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkJCQlcCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsgCVwKKwkuZ2xvYmwgbmFtZTsJCQlcCisJLnAyYWxpZ24gNDsJCQlcCituYW1lOgkJCQkJXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpCQkJXAorCWNmaV9lbmRwcm9jOwkJCVwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyNlbmRpZgorI2RlZmluZSBSRVRVUk4gcmV0CisJLnNlY3Rpb24gLnRleHQuc3NlMiwiYXgiLEBwcm9nYml0cworRU5UUlkgKFNUUkxFTikKKy8qIGVuZCBpZm5kZWYgVVNFX0FTX1NUUkNBVCAqLworI2VuZGlmCisJeG9yCSVyYXgsICVyYXgKKwltb3YJJWVkaSwgJWVjeAorCWFuZAkkMHgzZiwgJWVjeAorCXB4b3IJJXhtbTAsICV4bW0wCisJY21wCSQweDMwLCAlZWN4CisJamEJTChuZXh0KQorCW1vdmRxdQkoJXJkaSksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXRfbGVzczE2KQorCW1vdgklcmRpLCAlcmF4CisJYW5kCSQtMTYsICVyYXgKKwlqbXAJTChhbGlnbjE2X3N0YXJ0KQorTChuZXh0KToKKwltb3YJJXJkaSwgJXJheAorCWFuZAkkLTE2LCAlcmF4CisJcGNtcGVxYgkoJXJheCksICV4bW0wCisJbW92CSQtMSwgJXIxMGQKKwlzdWIJJXJheCwgJXJjeAorCXNobAklY2wsICVyMTBkCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwlhbmQJJXIxMGQsICVlZHgKKwlqbnoJTChleGl0KQorTChhbGlnbjE2X3N0YXJ0KToKKwlweG9yCSV4bW0wLCAleG1tMAorCXB4b3IJJXhtbTEsICV4bW0xCisJcHhvcgkleG1tMiwgJXhtbTIKKwlweG9yCSV4bW0zLCAleG1tMworCXBjbXBlcWIJMTYoJXJheCksICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0MTYpCisKKwlwY21wZXFiCTMyKCVyYXgpLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdDMyKQorCisJcGNtcGVxYgk0OCglcmF4KSwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQ0OCkKKworCXBjbXBlcWIJNjQoJXJheCksICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0NjQpCisKKwlwY21wZXFiCTgwKCVyYXgpLCAleG1tMAorCWFkZAkkNjQsICVyYXgKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQxNikKKworCXBjbXBlcWIJMzIoJXJheCksICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0MzIpCisKKwlwY21wZXFiCTQ4KCVyYXgpLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdDQ4KQorCisJcGNtcGVxYgk2NCglcmF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQ2NCkKKworCXBjbXBlcWIJODAoJXJheCksICV4bW0wCisJYWRkCSQ2NCwgJXJheAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdDE2KQorCisJcGNtcGVxYgkzMiglcmF4KSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQzMikKKworCXBjbXBlcWIJNDgoJXJheCksICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0NDgpCisKKwlwY21wZXFiCTY0KCVyYXgpLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdDY0KQorCQorCXBjbXBlcWIJODAoJXJheCksICV4bW0wCisJYWRkCSQ2NCwgJXJheAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdDE2KQorCisJcGNtcGVxYgkzMiglcmF4KSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQzMikKKworCXBjbXBlcWIJNDgoJXJheCksICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0NDgpCisKKwlwY21wZXFiCTY0KCVyYXgpLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdDY0KQorCQorCisJdGVzdAkkMHgzZiwgJXJheAorCWp6CUwoYWxpZ242NF9sb29wKQorCisJcGNtcGVxYgk4MCglcmF4KSwgJXhtbTAKKwlhZGQJJDgwLCAlcmF4CisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJdGVzdAkkMHgzZiwgJXJheAorCWp6CUwoYWxpZ242NF9sb29wKQorCisJcGNtcGVxYgkxNiglcmF4KSwgJXhtbTEKKwlhZGQJJDE2LCAlcmF4CisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJdGVzdAkkMHgzZiwgJXJheAorCWp6CUwoYWxpZ242NF9sb29wKQorCisJcGNtcGVxYgkxNiglcmF4KSwgJXhtbTIKKwlhZGQJJDE2LCAlcmF4CisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJdGVzdAkkMHgzZiwgJXJheAorCWp6CUwoYWxpZ242NF9sb29wKQorCisJcGNtcGVxYgkxNiglcmF4KSwgJXhtbTMKKwlhZGQJJDE2LCAlcmF4CisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJYWRkCSQxNiwgJXJheAorCS5wMmFsaWduIDQKKwlMKGFsaWduNjRfbG9vcCk6CisJbW92YXBzCSglcmF4KSwJJXhtbTQKKwlwbWludWIJMTYoJXJheCksIAkleG1tNAorCW1vdmFwcwkzMiglcmF4KSwgCSV4bW01CisJcG1pbnViCTQ4KCVyYXgpLCAJJXhtbTUKKwlhZGQJJDY0LCAJJXJheAorCXBtaW51YgkleG1tNCwJJXhtbTUKKwlwY21wZXFiCSV4bW0wLAkleG1tNQorCXBtb3Ztc2tiICV4bW01LAklZWR4CisJdGVzdAklZWR4LAklZWR4CisJanoJTChhbGlnbjY0X2xvb3ApCisKKworCXBjbXBlcWIJLTY0KCVyYXgpLCAleG1tMAorCXN1YgkkODAsIAklcmF4CisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0MTYpCisKKwlwY21wZXFiCTMyKCVyYXgpLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdDMyKQorCisJcGNtcGVxYgk0OCglcmF4KSwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQ0OCkKKworCXBjbXBlcWIJNjQoJXJheCksICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwlzdWIJJXJkaSwgJXJheAorCWJzZgklcmR4LCAlcmR4CisJYWRkCSVyZHgsICVyYXgKKwlhZGQJJDY0LCAlcmF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXQpOgorCXN1YgklcmRpLCAlcmF4CitMKGV4aXRfbGVzczE2KToKKwlic2YJJXJkeCwgJXJkeAorCWFkZAklcmR4LCAlcmF4CisJUkVUVVJOCisJLnAyYWxpZ24gNAorTChleGl0MTYpOgorCXN1YgklcmRpLCAlcmF4CisJYnNmCSVyZHgsICVyZHgKKwlhZGQJJXJkeCwgJXJheAorCWFkZAkkMTYsICVyYXgKKwlSRVRVUk4KKwkucDJhbGlnbiA0CitMKGV4aXQzMik6CisJc3ViCSVyZGksICVyYXgKKwlic2YJJXJkeCwgJXJkeAorCWFkZAklcmR4LCAlcmF4CisJYWRkCSQzMiwgJXJheAorCVJFVFVSTgorCS5wMmFsaWduIDQKK0woZXhpdDQ4KToKKwlzdWIJJXJkaSwgJXJheAorCWJzZgklcmR4LCAlcmR4CisJYWRkCSVyZHgsICVyYXgKKwlhZGQJJDQ4LCAlcmF4CisJUkVUVVJOCisJLnAyYWxpZ24gNAorTChleGl0NjQpOgorCXN1YgklcmRpLCAlcmF4CisJYnNmCSVyZHgsICVyZHgKKwlhZGQJJXJkeCwgJXJheAorCWFkZAkkNjQsICVyYXgKKyNpZm5kZWYgVVNFX0FTX1NUUkNBVAorCVJFVFVSTgorCitFTkQgKFNUUkxFTikKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJuY2F0LXNsbS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJuY2F0LXNsbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNGE0MzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cm5jYXQtc2xtLlMKQEAgLTAsMCArMSwzMyBAQAorLyoNCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uDQorQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzDQorICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlDQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyovDQorDQorI2RlZmluZSBVU0VfQVNfU1RSTkNBVA0KKyNkZWZpbmUgU1RSQ0FUCQlzdHJuY2F0DQorI2luY2x1ZGUgInNzZTItc3RyY2F0LXNsbS5TIg0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RybmNweS1zbG0uUyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RybmNweS1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTRlNzhmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJuY3B5LXNsbS5TCkBAIC0wLDAgKzEsMzMgQEAKKy8qDQorQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbg0KK0FsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycw0KKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQ0KKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisqLw0KKw0KKyNkZWZpbmUgVVNFX0FTX1NUUk5DUFkNCisjZGVmaW5lIFNUUkNQWQkJc3RybmNweQ0KKyNpbmNsdWRlICJzc2UyLXN0cmNweS1zbG0uUyINCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2U0LW1lbWNtcC1zbG0uUyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTQtbWVtY21wLXNsbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOGIxODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2U0LW1lbWNtcC1zbG0uUwpAQCAtMCwwICsxLDE3OTkgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorCisjaWZuZGVmIE1FTUNNUAorIyBkZWZpbmUgTUVNQ01QCQltZW1jbXAKKyNlbmRpZgorCisjaWZuZGVmIEwKKyMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorI2VuZGlmCisKKyNpZm5kZWYgQUxJR04KKyMgZGVmaW5lIEFMSUdOKG4pCS5wMmFsaWduIG4KKyNlbmRpZgorCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJCQkuY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2VuZHByb2MKKyMgZGVmaW5lIGNmaV9lbmRwcm9jCQkJLmNmaV9lbmRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkJCQlcCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsgCVwKKwkuZ2xvYmwgbmFtZTsJCQlcCisJLnAyYWxpZ24gNDsJCQlcCituYW1lOgkJCQkJXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpCQkJXAorCWNmaV9lbmRwcm9jOwkJCVwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyNlbmRpZgorCisjaWZuZGVmIEFMSUdOCisjIGRlZmluZSBBTElHTihuKQkucDJhbGlnbiBuCisjZW5kaWYKKworI2RlZmluZSBKTVBUQkwoSSwgQikJKEkgLSBCKQorCisjZGVmaW5lIEJSQU5DSF9UT19KTVBUQkxfRU5UUlkoVEFCTEUsIElOREVYLCBTQ0FMRSkJCVwKKyAgbGVhCQlUQUJMRSglcmlwKSwgJXIxMTsJCQkJXAorICBtb3ZzbHEJKCVyMTEsIElOREVYLCBTQ0FMRSksICVyY3g7CQkJXAorICBhZGQJCSVyMTEsICVyY3g7CQkJCQlcCisgIGptcAkJKiVyY3g7CQkJCQkJXAorICB1ZDIKKworCS5zZWN0aW9uIC50ZXh0LnNzZTQuMSwiYXgiLEBwcm9nYml0cworRU5UUlkgKE1FTUNNUCkKKyNpZmRlZiBVU0VfQVNfV01FTUNNUAorCXNobAkkMiwgJXJkeAorI2VuZGlmCisJcHhvcgkleG1tMCwgJXhtbTAKKwljbXAJJDc5LCAlcmR4CisJamEJTCg3OWJ5dGVzb3Jtb3JlKQorI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorCWNtcAkkMSwgJXJkeAorCWplCUwoZmlyc3RieXRlKQorI2VuZGlmCisJYWRkCSVyZHgsICVyc2kKKwlhZGQJJXJkeCwgJXJkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV82NGJ5dGVzKSwgJXJkeCwgNCkKKworI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorCUFMSUdOICg0KQorTChmaXJzdGJ5dGUpOgorCW1vdnpibAkoJXJkaSksICVlYXgKKwltb3Z6YmwJKCVyc2kpLCAlZWN4CisJc3ViCSVlY3gsICVlYXgKKwlyZXQKKyNlbmRpZgorCisJQUxJR04gKDQpCitMKDc5Ynl0ZXNvcm1vcmUpOgorCW1vdmRxdQkoJXJzaSksICV4bW0xCisJbW92ZHF1CSglcmRpKSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDE2Ynl0ZXNpbjI1NikKKwltb3YJJXJzaSwgJXJjeAorCWFuZAkkLTE2LCAlcnNpCisJYWRkCSQxNiwgJXJzaQorCXN1YgklcnNpLCAlcmN4CisKKwlzdWIJJXJjeCwgJXJkaQorCWFkZAklcmN4LCAlcmR4CisJdGVzdAkkMHhmLCAlcmRpCisJanoJTCgyYWxpZ25lZCkKKworCWNtcAkkMTI4LCAlcmR4CisJamEJTCgxMjhieXRlc29ybW9yZSkKK0wobGVzczEyOGJ5dGVzKToKKwlzdWIJJDY0LCAlcmR4CisKKwltb3ZkcXUJKCVyZGkpLCAleG1tMgorCXB4b3IJKCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDE2Ynl0ZXNpbjI1NikKKworCW1vdmRxdQkxNiglcmRpKSwgJXhtbTIKKwlweG9yCTE2KCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDMyYnl0ZXNpbjI1NikKKworCW1vdmRxdQkzMiglcmRpKSwgJXhtbTIKKwlweG9yCTMyKCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDQ4Ynl0ZXNpbjI1NikKKworCW1vdmRxdQk0OCglcmRpKSwgJXhtbTIKKwlweG9yCTQ4KCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDY0Ynl0ZXNpbjI1NikKKwljbXAJJDMyLCAlcmR4CisJamIJTChsZXNzMzJieXRlc2luNjQpCisKKwltb3ZkcXUJNjQoJXJkaSksICV4bW0yCisJcHhvcgk2NCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg4MGJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJODAoJXJkaSksICV4bW0yCisJcHhvcgk4MCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg5NmJ5dGVzaW4yNTYpCisJc3ViCSQzMiwgJXJkeAorCWFkZAkkMzIsICVyZGkKKwlhZGQJJDMyLCAlcnNpCitMKGxlc3MzMmJ5dGVzaW42NCk6CisJYWRkCSQ2NCwgJXJkaQorCWFkZAkkNjQsICVyc2kKKwlhZGQJJXJkeCwgJXJzaQorCWFkZAklcmR4LCAlcmRpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzY0Ynl0ZXMpLCAlcmR4LCA0KQorCitMKDEyOGJ5dGVzb3Jtb3JlKToKKwljbXAJJDUxMiwgJXJkeAorCWphCUwoNTEyYnl0ZXNvcm1vcmUpCisJY21wCSQyNTYsICVyZHgKKwlqYQlMKGxlc3M1MTJieXRlcykKK0wobGVzczI1NmJ5dGVzKToKKwlzdWIJJDEyOCwgJXJkeAorCisJbW92ZHF1CSglcmRpKSwgJXhtbTIKKwlweG9yCSglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxNmJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJMTYoJXJkaSksICV4bW0yCisJcHhvcgkxNiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgzMmJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJMzIoJXJkaSksICV4bW0yCisJcHhvcgkzMiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg0OGJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJNDgoJXJkaSksICV4bW0yCisJcHhvcgk0OCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg2NGJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJNjQoJXJkaSksICV4bW0yCisJcHhvcgk2NCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg4MGJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJODAoJXJkaSksICV4bW0yCisJcHhvcgk4MCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg5NmJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJOTYoJXJkaSksICV4bW0yCisJcHhvcgk5NiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxMTJieXRlc2luMjU2KQorCisJbW92ZHF1CTExMiglcmRpKSwgJXhtbTIKKwlweG9yCTExMiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxMjhieXRlc2luMjU2KQorCisJYWRkCSQxMjgsICVyc2kKKwlhZGQJJDEyOCwgJXJkaQorCisJY21wCSQ2NCwgJXJkeAorCWphZQlMKGxlc3MxMjhieXRlcykKKworCWNtcAkkMzIsICVyZHgKKwlqYglMKGxlc3MzMmJ5dGVzaW4xMjgpCisKKwltb3ZkcXUJKCVyZGkpLCAleG1tMgorCXB4b3IJKCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDE2Ynl0ZXNpbjI1NikKKworCW1vdmRxdQkxNiglcmRpKSwgJXhtbTIKKwlweG9yCTE2KCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDMyYnl0ZXNpbjI1NikKKwlzdWIJJDMyLCAlcmR4CisJYWRkCSQzMiwgJXJkaQorCWFkZAkkMzIsICVyc2kKK0wobGVzczMyYnl0ZXNpbjEyOCk6CisJYWRkCSVyZHgsICVyc2kKKwlhZGQJJXJkeCwgJXJkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV82NGJ5dGVzKSwgJXJkeCwgNCkKKworTChsZXNzNTEyYnl0ZXMpOgorCXN1YgkkMjU2LCAlcmR4CisJbW92ZHF1CSglcmRpKSwgJXhtbTIKKwlweG9yCSglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxNmJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJMTYoJXJkaSksICV4bW0yCisJcHhvcgkxNiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgzMmJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJMzIoJXJkaSksICV4bW0yCisJcHhvcgkzMiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg0OGJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJNDgoJXJkaSksICV4bW0yCisJcHhvcgk0OCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg2NGJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJNjQoJXJkaSksICV4bW0yCisJcHhvcgk2NCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg4MGJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJODAoJXJkaSksICV4bW0yCisJcHhvcgk4MCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg5NmJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJOTYoJXJkaSksICV4bW0yCisJcHhvcgk5NiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxMTJieXRlc2luMjU2KQorCisJbW92ZHF1CTExMiglcmRpKSwgJXhtbTIKKwlweG9yCTExMiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxMjhieXRlc2luMjU2KQorCisJbW92ZHF1CTEyOCglcmRpKSwgJXhtbTIKKwlweG9yCTEyOCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxNDRieXRlc2luMjU2KQorCisJbW92ZHF1CTE0NCglcmRpKSwgJXhtbTIKKwlweG9yCTE0NCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxNjBieXRlc2luMjU2KQorCisJbW92ZHF1CTE2MCglcmRpKSwgJXhtbTIKKwlweG9yCTE2MCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxNzZieXRlc2luMjU2KQorCisJbW92ZHF1CTE3NiglcmRpKSwgJXhtbTIKKwlweG9yCTE3NiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxOTJieXRlc2luMjU2KQorCisJbW92ZHF1CTE5MiglcmRpKSwgJXhtbTIKKwlweG9yCTE5MiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgyMDhieXRlc2luMjU2KQorCisJbW92ZHF1CTIwOCglcmRpKSwgJXhtbTIKKwlweG9yCTIwOCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgyMjRieXRlc2luMjU2KQorCisJbW92ZHF1CTIyNCglcmRpKSwgJXhtbTIKKwlweG9yCTIyNCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgyNDBieXRlc2luMjU2KQorCisJbW92ZHF1CTI0MCglcmRpKSwgJXhtbTIKKwlweG9yCTI0MCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgyNTZieXRlc2luMjU2KQorCisJYWRkCSQyNTYsICVyc2kKKwlhZGQJJDI1NiwgJXJkaQorCisJY21wCSQxMjgsICVyZHgKKwlqYWUJTChsZXNzMjU2Ynl0ZXMpCisKKwljbXAJJDY0LCAlcmR4CisJamFlCUwobGVzczEyOGJ5dGVzKQorCisJY21wCSQzMiwgJXJkeAorCWpiCUwobGVzczMyYnl0ZXNpbjI1NikKKworCW1vdmRxdQkoJXJkaSksICV4bW0yCisJcHhvcgkoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTZieXRlc2luMjU2KQorCisJbW92ZHF1CTE2KCVyZGkpLCAleG1tMgorCXB4b3IJMTYoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMzJieXRlc2luMjU2KQorCXN1YgkkMzIsICVyZHgKKwlhZGQJJDMyLCAlcmRpCisJYWRkCSQzMiwgJXJzaQorTChsZXNzMzJieXRlc2luMjU2KToKKwlhZGQJJXJkeCwgJXJzaQorCWFkZAklcmR4LCAlcmRpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzY0Ynl0ZXMpLCAlcmR4LCA0KQorCisJQUxJR04gKDQpCitMKDUxMmJ5dGVzb3Jtb3JlKToKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCW1vdgkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVyOAorI2Vsc2UKKwltb3YJX194ODZfNjRfZGF0YV9jYWNoZV9zaXplX2hhbGYoJXJpcCksICVyOAorI2VuZGlmCisJbW92CSVyOCwgJXI5CisJc2hyCSQxLCAlcjgKKwlhZGQJJXI5LCAlcjgKKwljbXAJJXI4LCAlcmR4CisJamEJTChMMl9MM19jYWNoZV91bmFnbGluZWQpCisJc3ViCSQ2NCwgJXJkeAorCUFMSUdOICg0KQorTCg2NGJ5dGVzb3Jtb3JlX2xvb3ApOgorCW1vdmRxdQkoJXJkaSksICV4bW0yCisJcHhvcgkoJXJzaSksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tMQorCisJbW92ZHF1CTE2KCVyZGkpLCAleG1tMworCXB4b3IJMTYoJXJzaSksICV4bW0zCisJcG9yCSV4bW0zLCAleG1tMQorCisJbW92ZHF1CTMyKCVyZGkpLCAleG1tNAorCXB4b3IJMzIoJXJzaSksICV4bW00CisJcG9yCSV4bW00LCAleG1tMQorCisJbW92ZHF1CTQ4KCVyZGkpLCAleG1tNQorCXB4b3IJNDgoJXJzaSksICV4bW01CisJcG9yCSV4bW01LCAleG1tMQorCisJcHRlc3QJJXhtbTEsICV4bW0wCisJam5jCUwoNjRieXRlc29ybW9yZV9sb29wX2VuZCkKKwlhZGQJJDY0LCAlcnNpCisJYWRkCSQ2NCwgJXJkaQorCXN1YgkkNjQsICVyZHgKKwlqYWUJTCg2NGJ5dGVzb3Jtb3JlX2xvb3ApCisKKwlhZGQJJDY0LCAlcmR4CisJYWRkCSVyZHgsICVyc2kKKwlhZGQJJXJkeCwgJXJkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV82NGJ5dGVzKSwgJXJkeCwgNCkKKworTChMMl9MM19jYWNoZV91bmFnbGluZWQpOgorCXN1YgkkNjQsICVyZHgKKwlBTElHTiAoNCkKK0woTDJfTDNfdW5hbGlnbmVkXzEyOGJ5dGVzX2xvb3ApOgorCXByZWZldGNobnRhIDB4MWMwKCVyZGkpCisJcHJlZmV0Y2hudGEgMHgxYzAoJXJzaSkKKwltb3ZkcXUJKCVyZGkpLCAleG1tMgorCXB4b3IJKCVyc2kpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTEKKworCW1vdmRxdQkxNiglcmRpKSwgJXhtbTMKKwlweG9yCTE2KCVyc2kpLCAleG1tMworCXBvcgkleG1tMywgJXhtbTEKKworCW1vdmRxdQkzMiglcmRpKSwgJXhtbTQKKwlweG9yCTMyKCVyc2kpLCAleG1tNAorCXBvcgkleG1tNCwgJXhtbTEKKworCW1vdmRxdQk0OCglcmRpKSwgJXhtbTUKKwlweG9yCTQ4KCVyc2kpLCAleG1tNQorCXBvcgkleG1tNSwgJXhtbTEKKworCXB0ZXN0CSV4bW0xLCAleG1tMAorCWpuYwlMKDY0Ynl0ZXNvcm1vcmVfbG9vcF9lbmQpCisJYWRkCSQ2NCwgJXJzaQorCWFkZAkkNjQsICVyZGkKKwlzdWIJJDY0LCAlcmR4CisJamFlCUwoTDJfTDNfdW5hbGlnbmVkXzEyOGJ5dGVzX2xvb3ApCisKKwlhZGQJJDY0LCAlcmR4CisJYWRkCSVyZHgsICVyc2kKKwlhZGQJJXJkeCwgJXJkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV82NGJ5dGVzKSwgJXJkeCwgNCkKKworLyoKKyAqIFRoaXMgY2FzZSBpcyBmb3IgbWFjaGluZXMgd2hpY2ggYXJlIHNlbnNpdGl2ZSBmb3IgdW5hbGlnbmVkIGluc3RydWN0aW9ucy4KKyAqLworCUFMSUdOICg0KQorTCgyYWxpZ25lZCk6CisJY21wCSQxMjgsICVyZHgKKwlqYQlMKDEyOGJ5dGVzb3Jtb3JlaW4yYWxpZ25lZCkKK0wobGVzczEyOGJ5dGVzaW4yYWxpZ25lZCk6CisJc3ViCSQ2NCwgJXJkeAorCisJbW92ZHFhCSglcmRpKSwgJXhtbTIKKwlweG9yCSglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxNmJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJMTYoJXJkaSksICV4bW0yCisJcHhvcgkxNiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgzMmJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJMzIoJXJkaSksICV4bW0yCisJcHhvcgkzMiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg0OGJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJNDgoJXJkaSksICV4bW0yCisJcHhvcgk0OCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg2NGJ5dGVzaW4yNTYpCisJY21wCSQzMiwgJXJkeAorCWpiCUwobGVzczMyYnl0ZXNpbjY0aW4yYWxpbmdlZCkKKworCW1vdmRxYQk2NCglcmRpKSwgJXhtbTIKKwlweG9yCTY0KCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDgwYnl0ZXNpbjI1NikKKworCW1vdmRxYQk4MCglcmRpKSwgJXhtbTIKKwlweG9yCTgwKCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDk2Ynl0ZXNpbjI1NikKKwlzdWIJJDMyLCAlcmR4CisJYWRkCSQzMiwgJXJkaQorCWFkZAkkMzIsICVyc2kKK0wobGVzczMyYnl0ZXNpbjY0aW4yYWxpbmdlZCk6CisJYWRkCSQ2NCwgJXJkaQorCWFkZAkkNjQsICVyc2kKKwlhZGQJJXJkeCwgJXJzaQorCWFkZAklcmR4LCAlcmRpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzY0Ynl0ZXMpLCAlcmR4LCA0KQorCisJQUxJR04gKDQpCitMKDEyOGJ5dGVzb3Jtb3JlaW4yYWxpZ25lZCk6CisJY21wCSQ1MTIsICVyZHgKKwlqYQlMKDUxMmJ5dGVzb3Jtb3JlaW4yYWxpZ25lZCkKKwljbXAJJDI1NiwgJXJkeAorCWphCUwoMjU2Ynl0ZXNvcm1vcmVpbjJhbGlnbmVkKQorTChsZXNzMjU2Ynl0ZXNpbjJhbGluZ2VkKToKKwlzdWIJJDEyOCwgJXJkeAorCisJbW92ZHFhCSglcmRpKSwgJXhtbTIKKwlweG9yCSglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxNmJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJMTYoJXJkaSksICV4bW0yCisJcHhvcgkxNiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgzMmJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJMzIoJXJkaSksICV4bW0yCisJcHhvcgkzMiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg0OGJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJNDgoJXJkaSksICV4bW0yCisJcHhvcgk0OCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg2NGJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJNjQoJXJkaSksICV4bW0yCisJcHhvcgk2NCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg4MGJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJODAoJXJkaSksICV4bW0yCisJcHhvcgk4MCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg5NmJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJOTYoJXJkaSksICV4bW0yCisJcHhvcgk5NiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxMTJieXRlc2luMjU2KQorCisJbW92ZHFhCTExMiglcmRpKSwgJXhtbTIKKwlweG9yCTExMiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxMjhieXRlc2luMjU2KQorCisJYWRkCSQxMjgsICVyc2kKKwlhZGQJJDEyOCwgJXJkaQorCisJY21wCSQ2NCwgJXJkeAorCWphZQlMKGxlc3MxMjhieXRlc2luMmFsaWduZWQpCisKKwljbXAJJDMyLCAlcmR4CisJamIJTChsZXNzMzJieXRlc2luMTI4aW4yYWxpZ25lZCkKKworCW1vdmRxdQkoJXJkaSksICV4bW0yCisJcHhvcgkoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTZieXRlc2luMjU2KQorCisJbW92ZHF1CTE2KCVyZGkpLCAleG1tMgorCXB4b3IJMTYoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMzJieXRlc2luMjU2KQorCXN1YgkkMzIsICVyZHgKKwlhZGQJJDMyLCAlcmRpCisJYWRkCSQzMiwgJXJzaQorTChsZXNzMzJieXRlc2luMTI4aW4yYWxpZ25lZCk6CisJYWRkCSVyZHgsICVyc2kKKwlhZGQJJXJkeCwgJXJkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV82NGJ5dGVzKSwgJXJkeCwgNCkKKworCUFMSUdOICg0KQorTCgyNTZieXRlc29ybW9yZWluMmFsaWduZWQpOgorCisJc3ViCSQyNTYsICVyZHgKKwltb3ZkcWEJKCVyZGkpLCAleG1tMgorCXB4b3IJKCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDE2Ynl0ZXNpbjI1NikKKworCW1vdmRxYQkxNiglcmRpKSwgJXhtbTIKKwlweG9yCTE2KCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDMyYnl0ZXNpbjI1NikKKworCW1vdmRxYQkzMiglcmRpKSwgJXhtbTIKKwlweG9yCTMyKCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDQ4Ynl0ZXNpbjI1NikKKworCW1vdmRxYQk0OCglcmRpKSwgJXhtbTIKKwlweG9yCTQ4KCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDY0Ynl0ZXNpbjI1NikKKworCW1vdmRxYQk2NCglcmRpKSwgJXhtbTIKKwlweG9yCTY0KCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDgwYnl0ZXNpbjI1NikKKworCW1vdmRxYQk4MCglcmRpKSwgJXhtbTIKKwlweG9yCTgwKCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDk2Ynl0ZXNpbjI1NikKKworCW1vdmRxYQk5NiglcmRpKSwgJXhtbTIKKwlweG9yCTk2KCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDExMmJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJMTEyKCVyZGkpLCAleG1tMgorCXB4b3IJMTEyKCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDEyOGJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJMTI4KCVyZGkpLCAleG1tMgorCXB4b3IJMTI4KCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDE0NGJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJMTQ0KCVyZGkpLCAleG1tMgorCXB4b3IJMTQ0KCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDE2MGJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJMTYwKCVyZGkpLCAleG1tMgorCXB4b3IJMTYwKCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDE3NmJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJMTc2KCVyZGkpLCAleG1tMgorCXB4b3IJMTc2KCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDE5MmJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJMTkyKCVyZGkpLCAleG1tMgorCXB4b3IJMTkyKCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDIwOGJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJMjA4KCVyZGkpLCAleG1tMgorCXB4b3IJMjA4KCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDIyNGJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJMjI0KCVyZGkpLCAleG1tMgorCXB4b3IJMjI0KCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDI0MGJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJMjQwKCVyZGkpLCAleG1tMgorCXB4b3IJMjQwKCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDI1NmJ5dGVzaW4yNTYpCisKKwlhZGQJJDI1NiwgJXJzaQorCWFkZAkkMjU2LCAlcmRpCisKKwljbXAJJDEyOCwgJXJkeAorCWphZQlMKGxlc3MyNTZieXRlc2luMmFsaW5nZWQpCisKKwljbXAJJDY0LCAlcmR4CisJamFlCUwobGVzczEyOGJ5dGVzaW4yYWxpZ25lZCkKKworCWNtcAkkMzIsICVyZHgKKwlqYglMKGxlc3MzMmJ5dGVzaW4yNTZpbjJhbGluZ2VkKQorCisJbW92ZHFhCSglcmRpKSwgJXhtbTIKKwlweG9yCSglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxNmJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJMTYoJXJkaSksICV4bW0yCisJcHhvcgkxNiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgzMmJ5dGVzaW4yNTYpCisJc3ViCSQzMiwgJXJkeAorCWFkZAkkMzIsICVyZGkKKwlhZGQJJDMyLCAlcnNpCitMKGxlc3MzMmJ5dGVzaW4yNTZpbjJhbGluZ2VkKToKKwlhZGQJJXJkeCwgJXJzaQorCWFkZAklcmR4LCAlcmRpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzY0Ynl0ZXMpLCAlcmR4LCA0KQorCisJQUxJR04gKDQpCitMKDUxMmJ5dGVzb3Jtb3JlaW4yYWxpZ25lZCk6CisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwltb3YJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlcjgKKyNlbHNlCisJbW92CV9feDg2XzY0X2RhdGFfY2FjaGVfc2l6ZV9oYWxmKCVyaXApLCAlcjgKKyNlbmRpZgorCW1vdgklcjgsICVyOQorCXNocgkkMSwgJXI4CisJYWRkCSVyOSwgJXI4CisJY21wCSVyOCwgJXJkeAorCWphCUwoTDJfTDNfY2FjaGVfYWdsaW5lZCkKKworCXN1YgkkNjQsICVyZHgKKwlBTElHTiAoNCkKK0woNjRieXRlc29ybW9yZV9sb29waW4yYWxpZ25lZCk6CisJbW92ZHFhCSglcmRpKSwgJXhtbTIKKwlweG9yCSglcnNpKSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW0xCisKKwltb3ZkcWEJMTYoJXJkaSksICV4bW0zCisJcHhvcgkxNiglcnNpKSwgJXhtbTMKKwlwb3IJJXhtbTMsICV4bW0xCisKKwltb3ZkcWEJMzIoJXJkaSksICV4bW00CisJcHhvcgkzMiglcnNpKSwgJXhtbTQKKwlwb3IJJXhtbTQsICV4bW0xCisKKwltb3ZkcWEJNDgoJXJkaSksICV4bW01CisJcHhvcgk0OCglcnNpKSwgJXhtbTUKKwlwb3IJJXhtbTUsICV4bW0xCisKKwlwdGVzdAkleG1tMSwgJXhtbTAKKwlqbmMJTCg2NGJ5dGVzb3Jtb3JlX2xvb3BfZW5kKQorCWFkZAkkNjQsICVyc2kKKwlhZGQJJDY0LCAlcmRpCisJc3ViCSQ2NCwgJXJkeAorCWphZQlMKDY0Ynl0ZXNvcm1vcmVfbG9vcGluMmFsaWduZWQpCisKKwlhZGQJJDY0LCAlcmR4CisJYWRkCSVyZHgsICVyc2kKKwlhZGQJJXJkeCwgJXJkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV82NGJ5dGVzKSwgJXJkeCwgNCkKK0woTDJfTDNfY2FjaGVfYWdsaW5lZCk6CisJc3ViCSQ2NCwgJXJkeAorCUFMSUdOICg0KQorTChMMl9MM19hbGlnbmVkXzEyOGJ5dGVzX2xvb3ApOgorCXByZWZldGNobnRhIDB4MWMwKCVyZGkpCisJcHJlZmV0Y2hudGEgMHgxYzAoJXJzaSkKKwltb3ZkcWEJKCVyZGkpLCAleG1tMgorCXB4b3IJKCVyc2kpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTEKKworCW1vdmRxYQkxNiglcmRpKSwgJXhtbTMKKwlweG9yCTE2KCVyc2kpLCAleG1tMworCXBvcgkleG1tMywgJXhtbTEKKworCW1vdmRxYQkzMiglcmRpKSwgJXhtbTQKKwlweG9yCTMyKCVyc2kpLCAleG1tNAorCXBvcgkleG1tNCwgJXhtbTEKKworCW1vdmRxYQk0OCglcmRpKSwgJXhtbTUKKwlweG9yCTQ4KCVyc2kpLCAleG1tNQorCXBvcgkleG1tNSwgJXhtbTEKKworCXB0ZXN0CSV4bW0xLCAleG1tMAorCWpuYwlMKDY0Ynl0ZXNvcm1vcmVfbG9vcF9lbmQpCisJYWRkCSQ2NCwgJXJzaQorCWFkZAkkNjQsICVyZGkKKwlzdWIJJDY0LCAlcmR4CisJamFlCUwoTDJfTDNfYWxpZ25lZF8xMjhieXRlc19sb29wKQorCisJYWRkCSQ2NCwgJXJkeAorCWFkZAklcmR4LCAlcnNpCisJYWRkCSVyZHgsICVyZGkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNjRieXRlcyksICVyZHgsIDQpCisKKworCUFMSUdOICg0KQorTCg2NGJ5dGVzb3Jtb3JlX2xvb3BfZW5kKToKKwlhZGQJJDE2LCAlcmRpCisJYWRkCSQxNiwgJXJzaQorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDE2Ynl0ZXMpCisKKwlhZGQJJDE2LCAlcmRpCisJYWRkCSQxNiwgJXJzaQorCXB0ZXN0CSV4bW0zLCAleG1tMAorCWpuYwlMKDE2Ynl0ZXMpCisKKwlhZGQJJDE2LCAlcmRpCisJYWRkCSQxNiwgJXJzaQorCXB0ZXN0CSV4bW00LCAleG1tMAorCWpuYwlMKDE2Ynl0ZXMpCisKKwlhZGQJJDE2LCAlcmRpCisJYWRkCSQxNiwgJXJzaQorCWptcAlMKDE2Ynl0ZXMpCisKK0woMjU2Ynl0ZXNpbjI1Nik6CisJYWRkCSQyNTYsICVyZGkKKwlhZGQJJDI1NiwgJXJzaQorCWptcAlMKDE2Ynl0ZXMpCitMKDI0MGJ5dGVzaW4yNTYpOgorCWFkZAkkMjQwLCAlcmRpCisJYWRkCSQyNDAsICVyc2kKKwlqbXAJTCgxNmJ5dGVzKQorTCgyMjRieXRlc2luMjU2KToKKwlhZGQJJDIyNCwgJXJkaQorCWFkZAkkMjI0LCAlcnNpCisJam1wCUwoMTZieXRlcykKK0woMjA4Ynl0ZXNpbjI1Nik6CisJYWRkCSQyMDgsICVyZGkKKwlhZGQJJDIwOCwgJXJzaQorCWptcAlMKDE2Ynl0ZXMpCitMKDE5MmJ5dGVzaW4yNTYpOgorCWFkZAkkMTkyLCAlcmRpCisJYWRkCSQxOTIsICVyc2kKKwlqbXAJTCgxNmJ5dGVzKQorTCgxNzZieXRlc2luMjU2KToKKwlhZGQJJDE3NiwgJXJkaQorCWFkZAkkMTc2LCAlcnNpCisJam1wCUwoMTZieXRlcykKK0woMTYwYnl0ZXNpbjI1Nik6CisJYWRkCSQxNjAsICVyZGkKKwlhZGQJJDE2MCwgJXJzaQorCWptcAlMKDE2Ynl0ZXMpCitMKDE0NGJ5dGVzaW4yNTYpOgorCWFkZAkkMTQ0LCAlcmRpCisJYWRkCSQxNDQsICVyc2kKKwlqbXAJTCgxNmJ5dGVzKQorTCgxMjhieXRlc2luMjU2KToKKwlhZGQJJDEyOCwgJXJkaQorCWFkZAkkMTI4LCAlcnNpCisJam1wCUwoMTZieXRlcykKK0woMTEyYnl0ZXNpbjI1Nik6CisJYWRkCSQxMTIsICVyZGkKKwlhZGQJJDExMiwgJXJzaQorCWptcAlMKDE2Ynl0ZXMpCitMKDk2Ynl0ZXNpbjI1Nik6CisJYWRkCSQ5NiwgJXJkaQorCWFkZAkkOTYsICVyc2kKKwlqbXAJTCgxNmJ5dGVzKQorTCg4MGJ5dGVzaW4yNTYpOgorCWFkZAkkODAsICVyZGkKKwlhZGQJJDgwLCAlcnNpCisJam1wCUwoMTZieXRlcykKK0woNjRieXRlc2luMjU2KToKKwlhZGQJJDY0LCAlcmRpCisJYWRkCSQ2NCwgJXJzaQorCWptcAlMKDE2Ynl0ZXMpCitMKDQ4Ynl0ZXNpbjI1Nik6CisJYWRkCSQxNiwgJXJkaQorCWFkZAkkMTYsICVyc2kKK0woMzJieXRlc2luMjU2KToKKwlhZGQJJDE2LCAlcmRpCisJYWRkCSQxNiwgJXJzaQorTCgxNmJ5dGVzaW4yNTYpOgorCWFkZAkkMTYsICVyZGkKKwlhZGQJJDE2LCAlcnNpCitMKDE2Ynl0ZXMpOgorCW1vdgktMTYoJXJkaSksICVyYXgKKwltb3YJLTE2KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCitMKDhieXRlcyk6CisJbW92CS04KCVyZGkpLCAlcmF4CisJbW92CS04KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKworCUFMSUdOICg0KQorTCgxMmJ5dGVzKToKKwltb3YJLTEyKCVyZGkpLCAlcmF4CisJbW92CS0xMiglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorTCg0Ynl0ZXMpOgorCW1vdgktNCglcnNpKSwgJWVjeAorCW1vdgktNCglcmRpKSwgJWVheAorCWNtcAklZWF4LCAlZWN4CisJam5lCUwoZGlmZmluNGJ5dGVzKQorTCgwYnl0ZXMpOgorCXhvcgklZWF4LCAlZWF4CisJcmV0CisKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKy8qIHVucmVhbCBjYXNlIGZvciB3bWVtY21wICovCisJQUxJR04gKDQpCitMKDY1Ynl0ZXMpOgorCW1vdmRxdQktNjUoJXJkaSksICV4bW0xCisJbW92ZHF1CS02NSglcnNpKSwgJXhtbTIKKwltb3YJJC02NSwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNDlieXRlcyk6CisJbW92ZHF1CS00OSglcmRpKSwgJXhtbTEKKwltb3ZkcXUJLTQ5KCVyc2kpLCAleG1tMgorCW1vdgkkLTQ5LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgzM2J5dGVzKToKKwltb3ZkcXUJLTMzKCVyZGkpLCAleG1tMQorCW1vdmRxdQktMzMoJXJzaSksICV4bW0yCisJbW92CSQtMzMsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDE3Ynl0ZXMpOgorCW1vdgktMTcoJXJkaSksICVyYXgKKwltb3YJLTE3KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCitMKDlieXRlcyk6CisJbW92CS05KCVyZGkpLCAlcmF4CisJbW92CS05KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJbW92emJsCS0xKCVyZGkpLCAlZWF4CisJbW92emJsCS0xKCVyc2kpLCAlZWR4CisJc3ViCSVlZHgsICVlYXgKKwlyZXQKKworCUFMSUdOICg0KQorTCgxM2J5dGVzKToKKwltb3YJLTEzKCVyZGkpLCAlcmF4CisJbW92CS0xMyglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCW1vdgktOCglcmRpKSwgJXJheAorCW1vdgktOCglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCXhvcgklZWF4LCAlZWF4CisJcmV0CisKKwlBTElHTiAoNCkKK0woNWJ5dGVzKToKKwltb3YJLTUoJXJkaSksICVlYXgKKwltb3YJLTUoJXJzaSksICVlY3gKKwljbXAJJWVheCwgJWVjeAorCWpuZQlMKGRpZmZpbjRieXRlcykKKwltb3Z6YmwJLTEoJXJkaSksICVlYXgKKwltb3Z6YmwJLTEoJXJzaSksICVlZHgKKwlzdWIJJWVkeCwgJWVheAorCXJldAorCisJQUxJR04gKDQpCitMKDY2Ynl0ZXMpOgorCW1vdmRxdQktNjYoJXJkaSksICV4bW0xCisJbW92ZHF1CS02NiglcnNpKSwgJXhtbTIKKwltb3YJJC02NiwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNTBieXRlcyk6CisJbW92ZHF1CS01MCglcmRpKSwgJXhtbTEKKwltb3ZkcXUJLTUwKCVyc2kpLCAleG1tMgorCW1vdgkkLTUwLCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgzNGJ5dGVzKToKKwltb3ZkcXUJLTM0KCVyZGkpLCAleG1tMQorCW1vdmRxdQktMzQoJXJzaSksICV4bW0yCisJbW92CSQtMzQsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDE4Ynl0ZXMpOgorCW1vdgktMTgoJXJkaSksICVyYXgKKwltb3YJLTE4KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCitMKDEwYnl0ZXMpOgorCW1vdgktMTAoJXJkaSksICVyYXgKKwltb3YJLTEwKCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJbW92endsCS0yKCVyZGkpLCAlZWF4CisJbW92endsCS0yKCVyc2kpLCAlZWN4CisJY21wCSVjbCwgJWFsCisJam5lCUwoZW5kKQorCWFuZAkkMHhmZmZmLCAlZWF4CisJYW5kCSQweGZmZmYsICVlY3gKKwlzdWIJJWVjeCwgJWVheAorCXJldAorCisJQUxJR04gKDQpCitMKDE0Ynl0ZXMpOgorCW1vdgktMTQoJXJkaSksICVyYXgKKwltb3YJLTE0KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJbW92CS04KCVyZGkpLCAlcmF4CisJbW92CS04KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKworCUFMSUdOICg0KQorTCg2Ynl0ZXMpOgorCW1vdgktNiglcmRpKSwgJWVheAorCW1vdgktNiglcnNpKSwgJWVjeAorCWNtcAklZWF4LCAlZWN4CisJam5lCUwoZGlmZmluNGJ5dGVzKQorTCgyYnl0ZXMpOgorCW1vdnp3bAktMiglcnNpKSwgJWVjeAorCW1vdnp3bAktMiglcmRpKSwgJWVheAorCWNtcAklY2wsICVhbAorCWpuZQlMKGVuZCkKKwlhbmQJJDB4ZmZmZiwgJWVheAorCWFuZAkkMHhmZmZmLCAlZWN4CisJc3ViCSVlY3gsICVlYXgKKwlyZXQKKworCUFMSUdOICg0KQorTCg2N2J5dGVzKToKKwltb3ZkcXUJLTY3KCVyZGkpLCAleG1tMgorCW1vdmRxdQktNjcoJXJzaSksICV4bW0xCisJbW92CSQtNjcsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDUxYnl0ZXMpOgorCW1vdmRxdQktNTEoJXJkaSksICV4bW0yCisJbW92ZHF1CS01MSglcnNpKSwgJXhtbTEKKwltb3YJJC01MSwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzVieXRlcyk6CisJbW92ZHF1CS0zNSglcnNpKSwgJXhtbTEKKwltb3ZkcXUJLTM1KCVyZGkpLCAleG1tMgorCW1vdgkkLTM1LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgxOWJ5dGVzKToKKwltb3YJLTE5KCVyZGkpLCAlcmF4CisJbW92CS0xOSglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorTCgxMWJ5dGVzKToKKwltb3YJLTExKCVyZGkpLCAlcmF4CisJbW92CS0xMSglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCW1vdgktNCglcmRpKSwgJWVheAorCW1vdgktNCglcnNpKSwgJWVjeAorCWNtcAklZWF4LCAlZWN4CisJam5lCUwoZGlmZmluNGJ5dGVzKQorCXhvcgklZWF4LCAlZWF4CisJcmV0CisKKwlBTElHTiAoNCkKK0woMTVieXRlcyk6CisJbW92CS0xNSglcmRpKSwgJXJheAorCW1vdgktMTUoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKwltb3YJLTgoJXJkaSksICVyYXgKKwltb3YJLTgoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKwl4b3IJJWVheCwgJWVheAorCXJldAorCisJQUxJR04gKDQpCitMKDdieXRlcyk6CisJbW92CS03KCVyZGkpLCAlZWF4CisJbW92CS03KCVyc2kpLCAlZWN4CisJY21wCSVlYXgsICVlY3gKKwlqbmUJTChkaWZmaW40Ynl0ZXMpCisJbW92CS00KCVyZGkpLCAlZWF4CisJbW92CS00KCVyc2kpLCAlZWN4CisJY21wCSVlYXgsICVlY3gKKwlqbmUJTChkaWZmaW40Ynl0ZXMpCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKworCUFMSUdOICg0KQorTCgzYnl0ZXMpOgorCW1vdnp3bAktMyglcmRpKSwgJWVheAorCW1vdnp3bAktMyglcnNpKSwgJWVjeAorCWNtcAklZWF4LCAlZWN4CisJam5lCUwoZGlmZmluMmJ5dGVzKQorTCgxYnl0ZXMpOgorCW1vdnpibAktMSglcmRpKSwgJWVheAorCW1vdnpibAktMSglcnNpKSwgJWVjeAorCXN1YgklZWN4LCAlZWF4CisJcmV0CisjZW5kaWYKKworCUFMSUdOICg0KQorTCg2OGJ5dGVzKToKKwltb3ZkcXUJLTY4KCVyZGkpLCAleG1tMgorCW1vdmRxdQktNjgoJXJzaSksICV4bW0xCisJbW92CSQtNjgsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDUyYnl0ZXMpOgorCW1vdmRxdQktNTIoJXJkaSksICV4bW0yCisJbW92ZHF1CS01MiglcnNpKSwgJXhtbTEKKwltb3YJJC01MiwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzZieXRlcyk6CisJbW92ZHF1CS0zNiglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTM2KCVyc2kpLCAleG1tMQorCW1vdgkkLTM2LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgyMGJ5dGVzKToKKwltb3ZkcXUJLTIwKCVyZGkpLCAleG1tMgorCW1vdmRxdQktMjAoJXJzaSksICV4bW0xCisJbW92CSQtMjAsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCisJbW92CS00KCVyZGkpLCAlZWF4CisJbW92CS00KCVyc2kpLCAlZWN4CisJY21wCSVlYXgsICVlY3gKKwlqbmUJTChkaWZmaW40Ynl0ZXMpCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKworI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorLyogdW5yZWFsIGNhc2VzIGZvciB3bWVtY21wICovCisJQUxJR04gKDQpCitMKDY5Ynl0ZXMpOgorCW1vdmRxdQktNjkoJXJzaSksICV4bW0xCisJbW92ZHF1CS02OSglcmRpKSwgJXhtbTIKKwltb3YJJC02OSwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNTNieXRlcyk6CisJbW92ZHF1CS01MyglcnNpKSwgJXhtbTEKKwltb3ZkcXUJLTUzKCVyZGkpLCAleG1tMgorCW1vdgkkLTUzLCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgzN2J5dGVzKToKKwltb3ZkcXUJLTM3KCVyc2kpLCAleG1tMQorCW1vdmRxdQktMzcoJXJkaSksICV4bW0yCisJbW92CSQtMzcsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDIxYnl0ZXMpOgorCW1vdmRxdQktMjEoJXJzaSksICV4bW0xCisJbW92ZHF1CS0yMSglcmRpKSwgJXhtbTIKKwltb3YJJC0yMSwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKwltb3YJLTgoJXJkaSksICVyYXgKKwltb3YJLTgoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKwl4b3IJJWVheCwgJWVheAorCXJldAorCisJQUxJR04gKDQpCitMKDcwYnl0ZXMpOgorCW1vdmRxdQktNzAoJXJzaSksICV4bW0xCisJbW92ZHF1CS03MCglcmRpKSwgJXhtbTIKKwltb3YJJC03MCwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNTRieXRlcyk6CisJbW92ZHF1CS01NCglcnNpKSwgJXhtbTEKKwltb3ZkcXUJLTU0KCVyZGkpLCAleG1tMgorCW1vdgkkLTU0LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgzOGJ5dGVzKToKKwltb3ZkcXUJLTM4KCVyc2kpLCAleG1tMQorCW1vdmRxdQktMzgoJXJkaSksICV4bW0yCisJbW92CSQtMzgsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDIyYnl0ZXMpOgorCW1vdmRxdQktMjIoJXJzaSksICV4bW0xCisJbW92ZHF1CS0yMiglcmRpKSwgJXhtbTIKKwltb3YJJC0yMiwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKwltb3YJLTgoJXJkaSksICVyYXgKKwltb3YJLTgoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKwl4b3IJJWVheCwgJWVheAorCXJldAorCisJQUxJR04gKDQpCitMKDcxYnl0ZXMpOgorCW1vdmRxdQktNzEoJXJzaSksICV4bW0xCisJbW92ZHF1CS03MSglcmRpKSwgJXhtbTIKKwltb3YJJC03MSwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNTVieXRlcyk6CisJbW92ZHF1CS01NSglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTU1KCVyc2kpLCAleG1tMQorCW1vdgkkLTU1LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgzOWJ5dGVzKToKKwltb3ZkcXUJLTM5KCVyZGkpLCAleG1tMgorCW1vdmRxdQktMzkoJXJzaSksICV4bW0xCisJbW92CSQtMzksICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDIzYnl0ZXMpOgorCW1vdmRxdQktMjMoJXJkaSksICV4bW0yCisJbW92ZHF1CS0yMyglcnNpKSwgJXhtbTEKKwltb3YJJC0yMywgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKwltb3YJLTgoJXJkaSksICVyYXgKKwltb3YJLTgoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKwl4b3IJJWVheCwgJWVheAorCXJldAorI2VuZGlmCisKKwlBTElHTiAoNCkKK0woNzJieXRlcyk6CisJbW92ZHF1CS03MiglcnNpKSwgJXhtbTEKKwltb3ZkcXUJLTcyKCVyZGkpLCAleG1tMgorCW1vdgkkLTcyLCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg1NmJ5dGVzKToKKwltb3ZkcXUJLTU2KCVyZGkpLCAleG1tMgorCW1vdmRxdQktNTYoJXJzaSksICV4bW0xCisJbW92CSQtNTYsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDQwYnl0ZXMpOgorCW1vdmRxdQktNDAoJXJkaSksICV4bW0yCisJbW92ZHF1CS00MCglcnNpKSwgJXhtbTEKKwltb3YJJC00MCwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMjRieXRlcyk6CisJbW92ZHF1CS0yNCglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTI0KCVyc2kpLCAleG1tMQorCW1vdgkkLTI0LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCW1vdgktOCglcmRpKSwgJXJheAorCW1vdgktOCglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCXhvcgklZWF4LCAlZWF4CisJcmV0CisKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKy8qIHVucmVhbCBjYXNlcyBmb3Igd21lbWNtcCAqLworCUFMSUdOICg0KQorTCg3M2J5dGVzKToKKwltb3ZkcXUJLTczKCVyc2kpLCAleG1tMQorCW1vdmRxdQktNzMoJXJkaSksICV4bW0yCisJbW92CSQtNzMsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDU3Ynl0ZXMpOgorCW1vdmRxdQktNTcoJXJkaSksICV4bW0yCisJbW92ZHF1CS01NyglcnNpKSwgJXhtbTEKKwltb3YJJC01NywgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNDFieXRlcyk6CisJbW92ZHF1CS00MSglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTQxKCVyc2kpLCAleG1tMQorCW1vdgkkLTQxLCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgyNWJ5dGVzKToKKwltb3ZkcXUJLTI1KCVyZGkpLCAleG1tMgorCW1vdmRxdQktMjUoJXJzaSksICV4bW0xCisJbW92CSQtMjUsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCisJbW92CS05KCVyZGkpLCAlcmF4CisJbW92CS05KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJbW92emJsCS0xKCVyZGkpLCAlZWF4CisJbW92emJsCS0xKCVyc2kpLCAlZWN4CisJc3ViCSVlY3gsICVlYXgKKwlyZXQKKworCUFMSUdOICg0KQorTCg3NGJ5dGVzKToKKwltb3ZkcXUJLTc0KCVyc2kpLCAleG1tMQorCW1vdmRxdQktNzQoJXJkaSksICV4bW0yCisJbW92CSQtNzQsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDU4Ynl0ZXMpOgorCW1vdmRxdQktNTgoJXJkaSksICV4bW0yCisJbW92ZHF1CS01OCglcnNpKSwgJXhtbTEKKwltb3YJJC01OCwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNDJieXRlcyk6CisJbW92ZHF1CS00MiglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTQyKCVyc2kpLCAleG1tMQorCW1vdgkkLTQyLCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgyNmJ5dGVzKToKKwltb3ZkcXUJLTI2KCVyZGkpLCAleG1tMgorCW1vdmRxdQktMjYoJXJzaSksICV4bW0xCisJbW92CSQtMjYsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCisJbW92CS0xMCglcmRpKSwgJXJheAorCW1vdgktMTAoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKwltb3Z6d2wJLTIoJXJkaSksICVlYXgKKwltb3Z6d2wJLTIoJXJzaSksICVlY3gKKwlqbXAJTChkaWZmaW4yYnl0ZXMpCisKKwlBTElHTiAoNCkKK0woNzVieXRlcyk6CisJbW92ZHF1CS03NSglcnNpKSwgJXhtbTEKKwltb3ZkcXUJLTc1KCVyZGkpLCAleG1tMgorCW1vdgkkLTc1LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg1OWJ5dGVzKToKKwltb3ZkcXUJLTU5KCVyZGkpLCAleG1tMgorCW1vdmRxdQktNTkoJXJzaSksICV4bW0xCisJbW92CSQtNTksICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDQzYnl0ZXMpOgorCW1vdmRxdQktNDMoJXJkaSksICV4bW0yCisJbW92ZHF1CS00MyglcnNpKSwgJXhtbTEKKwltb3YJJC00MywgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMjdieXRlcyk6CisJbW92ZHF1CS0yNyglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTI3KCVyc2kpLCAleG1tMQorCW1vdgkkLTI3LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCW1vdgktMTEoJXJkaSksICVyYXgKKwltb3YJLTExKCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJbW92CS00KCVyZGkpLCAlZWF4CisJbW92CS00KCVyc2kpLCAlZWN4CisJY21wCSVlYXgsICVlY3gKKwlqbmUJTChkaWZmaW40Ynl0ZXMpCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKyNlbmRpZgorCUFMSUdOICg0KQorTCg3NmJ5dGVzKToKKwltb3ZkcXUJLTc2KCVyc2kpLCAleG1tMQorCW1vdmRxdQktNzYoJXJkaSksICV4bW0yCisJbW92CSQtNzYsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDYwYnl0ZXMpOgorCW1vdmRxdQktNjAoJXJkaSksICV4bW0yCisJbW92ZHF1CS02MCglcnNpKSwgJXhtbTEKKwltb3YJJC02MCwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNDRieXRlcyk6CisJbW92ZHF1CS00NCglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTQ0KCVyc2kpLCAleG1tMQorCW1vdgkkLTQ0LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgyOGJ5dGVzKToKKwltb3ZkcXUJLTI4KCVyZGkpLCAleG1tMgorCW1vdmRxdQktMjgoJXJzaSksICV4bW0xCisJbW92CSQtMjgsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCisJbW92CS0xMiglcmRpKSwgJXJheAorCW1vdgktMTIoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKwltb3YJLTQoJXJkaSksICVlYXgKKwltb3YJLTQoJXJzaSksICVlY3gKKwljbXAJJWVheCwgJWVjeAorCWpuZQlMKGRpZmZpbjRieXRlcykKKwl4b3IJJWVheCwgJWVheAorCXJldAorCisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisvKiB1bnJlYWwgY2FzZXMgZm9yIHdtZW1jbXAgKi8KKwlBTElHTiAoNCkKK0woNzdieXRlcyk6CisJbW92ZHF1CS03NyglcnNpKSwgJXhtbTEKKwltb3ZkcXUJLTc3KCVyZGkpLCAleG1tMgorCW1vdgkkLTc3LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg2MWJ5dGVzKToKKwltb3ZkcXUJLTYxKCVyZGkpLCAleG1tMgorCW1vdmRxdQktNjEoJXJzaSksICV4bW0xCisJbW92CSQtNjEsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDQ1Ynl0ZXMpOgorCW1vdmRxdQktNDUoJXJkaSksICV4bW0yCisJbW92ZHF1CS00NSglcnNpKSwgJXhtbTEKKwltb3YJJC00NSwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMjlieXRlcyk6CisJbW92ZHF1CS0yOSglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTI5KCVyc2kpLCAleG1tMQorCW1vdgkkLTI5LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCisJbW92CS0xMyglcmRpKSwgJXJheAorCW1vdgktMTMoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKworCW1vdgktOCglcmRpKSwgJXJheAorCW1vdgktOCglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCXhvcgklZWF4LCAlZWF4CisJcmV0CisKKwlBTElHTiAoNCkKK0woNzhieXRlcyk6CisJbW92ZHF1CS03OCglcnNpKSwgJXhtbTEKKwltb3ZkcXUJLTc4KCVyZGkpLCAleG1tMgorCW1vdgkkLTc4LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg2MmJ5dGVzKToKKwltb3ZkcXUJLTYyKCVyZGkpLCAleG1tMgorCW1vdmRxdQktNjIoJXJzaSksICV4bW0xCisJbW92CSQtNjIsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDQ2Ynl0ZXMpOgorCW1vdmRxdQktNDYoJXJkaSksICV4bW0yCisJbW92ZHF1CS00NiglcnNpKSwgJXhtbTEKKwltb3YJJC00NiwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzBieXRlcyk6CisJbW92ZHF1CS0zMCglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTMwKCVyc2kpLCAleG1tMQorCW1vdgkkLTMwLCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCW1vdgktMTQoJXJkaSksICVyYXgKKwltb3YJLTE0KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJbW92CS04KCVyZGkpLCAlcmF4CisJbW92CS04KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKworCUFMSUdOICg0KQorTCg3OWJ5dGVzKToKKwltb3ZkcXUJLTc5KCVyc2kpLCAleG1tMQorCW1vdmRxdQktNzkoJXJkaSksICV4bW0yCisJbW92CSQtNzksICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDYzYnl0ZXMpOgorCW1vdmRxdQktNjMoJXJkaSksICV4bW0yCisJbW92ZHF1CS02MyglcnNpKSwgJXhtbTEKKwltb3YJJC02MywgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNDdieXRlcyk6CisJbW92ZHF1CS00NyglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTQ3KCVyc2kpLCAleG1tMQorCW1vdgkkLTQ3LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgzMWJ5dGVzKToKKwltb3ZkcXUJLTMxKCVyZGkpLCAleG1tMgorCW1vdmRxdQktMzEoJXJzaSksICV4bW0xCisJbW92CSQtMzEsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCisJbW92CS0xNSglcmRpKSwgJXJheAorCW1vdgktMTUoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKwltb3YJLTgoJXJkaSksICVyYXgKKwltb3YJLTgoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKwl4b3IJJWVheCwgJWVheAorCXJldAorI2VuZGlmCisJQUxJR04gKDQpCitMKDY0Ynl0ZXMpOgorCW1vdmRxdQktNjQoJXJkaSksICV4bW0yCisJbW92ZHF1CS02NCglcnNpKSwgJXhtbTEKKwltb3YJJC02NCwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNDhieXRlcyk6CisJbW92ZHF1CS00OCglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTQ4KCVyc2kpLCAleG1tMQorCW1vdgkkLTQ4LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgzMmJ5dGVzKToKKwltb3ZkcXUJLTMyKCVyZGkpLCAleG1tMgorCW1vdmRxdQktMzIoJXJzaSksICV4bW0xCisJbW92CSQtMzIsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCisKKwltb3YJLTE2KCVyZGkpLCAlcmF4CisJbW92CS0xNiglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCisJbW92CS04KCVyZGkpLCAlcmF4CisJbW92CS04KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKworLyoKKyAqIEFsaWduZWQgOCBieXRlcyB0byBhdm9pZCAyIGJyYW5jaCAidGFrZW4iIGluIG9uZSAxNiBhbGluZ2VkIGNvZGUgYmxvY2suCisgKi8KKwlBTElHTiAoMykKK0wobGVzczE2Ynl0ZXMpOgorCW1vdnNicQklZGwsICVyZHgKKwltb3YJKCVyc2ksICVyZHgpLCAlcmN4CisJbW92CSglcmRpLCAlcmR4KSwgJXJheAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCW1vdgk4KCVyc2ksICVyZHgpLCAlcmN4CisJbW92CTgoJXJkaSwgJXJkeCksICVyYXgKK0woZGlmZmluOGJ5dGVzKToKKwljbXAJJWVheCwgJWVjeAorCWpuZQlMKGRpZmZpbjRieXRlcykKKwlzaHIJJDMyLCAlcmN4CisJc2hyCSQzMiwgJXJheAorCisjaWZkZWYgVVNFX0FTX1dNRU1DTVAKKy8qIGZvciB3bWVtY21wICovCisJY21wCSVlYXgsICVlY3gKKwlqbmUJTChkaWZmaW40Ynl0ZXMpCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKyNlbmRpZgorCitMKGRpZmZpbjRieXRlcyk6CisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisJY21wCSVjeCwgJWF4CisJam5lCUwoZGlmZmluMmJ5dGVzKQorCXNocgkkMTYsICVlY3gKKwlzaHIJJDE2LCAlZWF4CitMKGRpZmZpbjJieXRlcyk6CisJY21wCSVjbCwgJWFsCisJam5lCUwoZW5kKQorCWFuZAkkMHhmZmZmLCAlZWF4CisJYW5kCSQweGZmZmYsICVlY3gKKwlzdWIJJWVjeCwgJWVheAorCXJldAorI2Vsc2UKKworLyogZm9yIHdtZW1jbXAgKi8KKwltb3YJJDEsICVlYXgKKwlqbAlMKG5lcXVhbF9iaWdnZXIpCisJbmVnCSVlYXgKKwlyZXQKKworCUFMSUdOICg0KQorTChuZXF1YWxfYmlnZ2VyKToKKwlyZXQKKworTCh1bnJlYWxfY2FzZSk6CisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKyNlbmRpZgorCisJQUxJR04gKDQpCitMKGVuZCk6CisJYW5kCSQweGZmLCAlZWF4CisJYW5kCSQweGZmLCAlZWN4CisJc3ViCSVlY3gsICVlYXgKKwlyZXQKKworRU5EIChNRU1DTVApCisKKwkuc2VjdGlvbiAucm9kYXRhLnNzZTQuMSwiYSIsQHByb2diaXRzCisJQUxJR04gKDMpCisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCitMKHRhYmxlXzY0Ynl0ZXMpOgorCS5pbnQJSk1QVEJMIChMKDBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMWJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgyYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDNieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg1Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoN2J5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg4Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDlieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTFieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTNieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTVieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTdieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMThieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTlieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjFieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjNieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjVieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjdieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjhieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjlieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzFieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzNieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzVieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzdieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzhieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzlieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDFieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDNieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDVieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDdieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDhieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDlieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTFieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTNieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTVieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTdieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNThieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTlieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjFieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjNieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjVieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjdieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjhieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjlieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNzBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNzFieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNzJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNzNieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNzRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNzVieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNzZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNzdieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNzhieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNzlieXRlcyksIEwodGFibGVfNjRieXRlcykpCisjZWxzZQorTCh0YWJsZV82NGJ5dGVzKToKKwkuaW50CUpNUFRCTCAoTCgwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoOGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgxMmJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgxNmJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgyMGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgyNGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgyOGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgzMmJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgzNmJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg0MGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg0NGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg0OGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg1MmJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg1NmJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg2MGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg2NGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg2OGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg3MmJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg3NmJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NzZTMtc3RyY21wLXNsbS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NzZTMtc3RyY21wLXNsbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZDhjMjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc3NlMy1zdHJjbXAtc2xtLlMKQEAgLTAsMCArMSwxOTI1IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKy8qIFNpbmNlIHRoZSBjb3VudGVyLCAlcjExLCBpcyB1bnNpZ25lZCwgd2UgYnJhbmNoIHRvIHN0cmNtcF9leGl0egorICAgaWYgdGhlIG5ldyBjb3VudGVyID4gdGhlIG9sZCBvbmUgb3IgaXMgMC4gICovCisjZGVmaW5lIFVQREFURV9TVFJOQ01QX0NPVU5URVIJCQkJXAorCS8qIGNhbGN1bGF0ZSBsZWZ0IG51bWJlciB0byBjb21wYXJlICovCQlcCisJbGVhCS0xNiglcmN4LCAlcjExKSwgJXI5OwkJCVwKKwljbXAJJXI5LCAlcjExOwkJCQlcCisJamIJTChzdHJjbXBfZXhpdHopOwkJCVwKKwl0ZXN0CSVyOSwgJXI5OwkJCQlcCisJamUJTChzdHJjbXBfZXhpdHopOwkJCVwKKwltb3YJJXI5LCAlcjExCisKKyNlbHNlCisjZGVmaW5lIFVQREFURV9TVFJOQ01QX0NPVU5URVIKKyNpZm5kZWYgU1RSQ01QCisjZGVmaW5lIFNUUkNNUAkJc3RyY21wCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIEwKKyMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3N0YXJ0cHJvYworIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkJCS5jZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfZW5kcHJvYworIyBkZWZpbmUgY2ZpX2VuZHByb2MJCQkuY2ZpX2VuZHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVOVFJZCisjIGRlZmluZSBFTlRSWShuYW1lKQkJCVwKKwkudHlwZSBuYW1lLCAgQGZ1bmN0aW9uOyAJXAorCS5nbG9ibCBuYW1lOwkJCVwKKwkucDJhbGlnbiA0OwkJCVwKK25hbWU6CQkJCQlcCisJY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgRU5ECisjIGRlZmluZSBFTkQobmFtZSkJCQlcCisJY2ZpX2VuZHByb2M7CQkJXAorCS5zaXplIG5hbWUsIC4tbmFtZQorI2VuZGlmCisjZGVmaW5lIFJFVFVSTiByZXQKKwkuc2VjdGlvbiAudGV4dC5zc3NlMywiYXgiLEBwcm9nYml0cworRU5UUlkgKFNUUkNNUCkKKy8qCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgU1NFIHRvIGNvbXBhcmUgdXAgdG8gMTYgYnl0ZXMgYXQgYSB0aW1lLgorICovCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwl0ZXN0CSVyZHgsICVyZHgKKwlqZQlMKHN0cmNtcF9leGl0eikKKwljbXAJJDEsICVyZHgKKwlqZQlMKEJ5dGUwKQorCW1vdgklcmR4LCAlcjExCisjZW5kaWYKKwltb3YJJWVzaSwgJWVjeAorCW1vdgklZWRpLCAlZWF4CisvKiBVc2UgNjRiaXQgQU5EIGhlcmUgdG8gYXZvaWQgbG9uZyBOT1AgcGFkZGluZy4gICovCisJYW5kCSQweDNmLCAlcmN4CQkvKiByc2kgYWxpZ25tZW50IGluIGNhY2hlIGxpbmUgKi8KKwlhbmQJJDB4M2YsICVyYXgJCS8qIHJkaSBhbGlnbm1lbnQgaW4gY2FjaGUgbGluZSAqLworCWNtcAkkMHgzMCwgJWVjeAorCWphCUwoY3Jvc3NjYWNoZSkJLyogcnNpOiAxNi1ieXRlIGxvYWQgd2lsbCBjcm9zcyBjYWNoZSBsaW5lICovCisJY21wCSQweDMwLCAlZWF4CisJamEJTChjcm9zc2NhY2hlKQkvKiByZGk6IDE2LWJ5dGUgbG9hZCB3aWxsIGNyb3NzIGNhY2hlIGxpbmUgKi8KKwltb3ZscGQJKCVyZGkpLCAleG1tMQorCW1vdmxwZAkoJXJzaSksICV4bW0yCisJbW92aHBkCTgoJXJkaSksICV4bW0xCisJbW92aHBkCTgoJXJzaSksICV4bW0yCisJcHhvcgkleG1tMCwgJXhtbTAJCS8qIGNsZWFyICV4bW0wIGZvciBudWxsIGNoYXIgY2hlY2tzICovCisJcGNtcGVxYgkleG1tMSwgJXhtbTAJCS8qIEFueSBudWxsIGNoYXJzPyAqLworCXBjbXBlcWIJJXhtbTIsICV4bW0xCQkvKiBjb21wYXJlIGZpcnN0IDE2IGJ5dGVzIGZvciBlcXVhbGl0eSAqLworCXBzdWJiCSV4bW0wLCAleG1tMQkJLyogcGFja2VkIHN1YiBvZiBjb21wYXJpc29uIHJlc3VsdHMqLworCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgJCS8qIGlmIGZpcnN0IDE2IGJ5dGVzIGFyZSBzYW1lLCBlZHggPT0gMHhmZmZmICovCisJam56CUwobGVzczE2Ynl0ZXMpCS8qIElmIG5vdCwgZmluZCBkaWZmZXJlbnQgdmFsdWUgb3IgbnVsbCBjaGFyICovCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQkvKiBmaW5pc2ggY29tcGFyaXNpb24gKi8KKyNlbmRpZgorCWFkZAkkMTYsICVyc2kJCS8qIHByZXBhcmUgdG8gc2VhcmNoIG5leHQgMTYgYnl0ZXMgKi8KKwlhZGQJJDE2LCAlcmRpCQkvKiBwcmVwYXJlIHRvIHNlYXJjaCBuZXh0IDE2IGJ5dGVzICovCisKKwkvKgorCSAqIERldGVybWluZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHN0cmluZyBvZmZzZXRzIGZyb20gMTYtYnl0ZSBhbGlnbm1lbnQuCisJICogVXNlIHJlbGF0aXZlIG9mZnNldCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byB0byBkZXRlcm1pbmUgd2hpY2ggY2FzZQorCSAqIGJlbG93IHRvIHVzZS4KKwkgKi8KKwkucDJhbGlnbiA0CitMKGNyb3NzY2FjaGUpOgorCWFuZAkkMHhmZmZmZmZmZmZmZmZmZmYwLCAlcnNpCS8qIGZvcmNlICVyc2kgaXMgMTYgYnl0ZSBhbGlnbmVkICovCisJYW5kCSQweGZmZmZmZmZmZmZmZmZmZjAsICVyZGkJLyogZm9yY2UgJXJkaSBpcyAxNiBieXRlIGFsaWduZWQgKi8KKwltb3YJJDB4ZmZmZiwgJWVkeAkJCS8qIGZvciBlcXVpdmFsZW50IG9mZnNldCAqLworCXhvcgklcjhkLCAlcjhkCisJYW5kCSQweGYsICVlY3gJCQkvKiBvZmZzZXQgb2YgcnNpICovCisJYW5kCSQweGYsICVlYXgJCQkvKiBvZmZzZXQgb2YgcmRpICovCisJY21wCSVlYXgsICVlY3gKKwlqZQlMKGFzaHJfMCkJCQkvKiByc2kgYW5kIHJkaSByZWxhdGl2ZSBvZmZzZXQgc2FtZSAqLworCWphCUwoYmlnZ2VyKQorCW1vdgklZWR4LCAlcjhkCQkJLyogcjhkIGlzIG9mZnNldCBmbGFnIGZvciBleGl0IHRhaWwgKi8KKwl4Y2hnCSVlY3gsICVlYXgKKwl4Y2hnCSVyc2ksICVyZGkKK0woYmlnZ2VyKToKKwlsZWEJMTUoJXJheCksICVyOQorCXN1YgklcmN4LCAlcjkKKwlsZWEJTCh1bmFsaWduZWRfdGFibGUpKCVyaXApLCAlcjEwCisJbW92c2xxCSglcjEwLCAlcjksNCksICVyOQorCWxlYQkoJXIxMCwgJXI5KSwgJXIxMAorCWptcAkqJXIxMAkJCQkvKiBqdW1wIHRvIGNvcnJlc3BvbmRpbmcgY2FzZSAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl8wCisgKiAgcmN4KG9mZnNldCBvZiByc2kpICByYXgob2Zmc2V0IG9mIHJkaSkgIHJlbGF0aXZlIG9mZnNldCAgY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbigwfjE1KSAgICAgICAgICAgIG4oMH4xNSkgICAgICAgICAgIDE1KDE1KyBuLW4pICAgICAgICAgYXNocl8wCisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfMCk6CisKKwltb3ZkcWEJKCVyc2kpLCAleG1tMQorCXB4b3IJJXhtbTAsICV4bW0wCQkJLyogY2xlYXIgJXhtbTAgZm9yIG51bGwgY2hhciBjaGVjayAqLworCXBjbXBlcWIJJXhtbTEsICV4bW0wCQkJLyogQW55IG51bGwgY2hhcnM/ICovCisJcGNtcGVxYgkoJXJkaSksICV4bW0xCQkJLyogY29tcGFyZSAxNiBieXRlcyBmb3IgZXF1YWxpdHkgKi8KKwlwc3ViYgkleG1tMCwgJXhtbTEJCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTEsICVyOWQKKwlzaHIJJWNsLCAlZWR4CQkJLyogYWRqdXN0IDB4ZmZmZiBmb3Igb2Zmc2V0ICovCisJc2hyCSVjbCwgJXI5ZAkJCS8qIGFkanVzdCBmb3IgMTYtYnl0ZSBvZmZzZXQgKi8KKwlzdWIJJXI5ZCwgJWVkeAorCS8qCisJICogZWR4IG11c3QgYmUgdGhlIHNhbWUgd2l0aCByOWQgaWYgaW4gbGVmdCBieXRlICgxNi1yY3gpIGlzIGVxdWFsIHRvCisJICogdGhlIHN0YXJ0IGZyb20gKDE2LXJheCkgYW5kIG5vIG51bGwgY2hhciB3YXMgc2Vlbi4KKwkgKi8KKwlqbmUJTChsZXNzMzJieXRlcykJCS8qIG1pc21hdGNoIG9yIG51bGwgY2hhciAqLworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKwltb3YJJDE2LCAlcmN4CisJbW92CSQxNiwgJXI5CisJcHhvcgkleG1tMCwgJXhtbTAJCQkvKiBjbGVhciB4bW0wLCBtYXkgaGF2ZSBjaGFuZ2VkIGFib3ZlICovCisKKwkvKgorCSAqIE5vdyBib3RoIHN0cmluZ3MgYXJlIGFsaWduZWQgYXQgMTYtYnl0ZSBib3VuZGFyeS4gTG9vcCBvdmVyIHN0cmluZ3MKKwkgKiBjaGVja2luZyAzMi1ieXRlcyBwZXIgaXRlcmF0aW9uLgorCSAqLworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzApOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkJCS8qIG1pc21hdGNoIG9yIG51bGwgY2hhciBzZWVuICovCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCWFkZAkkMTYsICVyY3gKKwlqbXAJTChsb29wX2FzaHJfMCkKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfMQorICogcmN4KG9mZnNldCBvZiByc2kpICByYXgob2Zmc2V0IG9mIHJkaSkgICByZWxhdGl2ZSBvZmZzZXQgICAJY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbigxNSkgICAgICAgICAgICBuIC0xNSAgICAgICAgICAgIDAoMTUgKyhuLTE1KSAtIG4pICAgICAgICAgYXNocl8xCisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfMSk6CisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVyZGkpLCAleG1tMgorCW1vdmRxYQkoJXJzaSksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAJCS8qIEFueSBudWxsIGNoYXJzPyAqLworCXBzbGxkcQkkMTUsICV4bW0yCQkvKiBzaGlmdCBmaXJzdCBzdHJpbmcgdG8gYWxpZ24gd2l0aCBzZWNvbmQgKi8KKwlwY21wZXFiCSV4bW0xLCAleG1tMgkJLyogY29tcGFyZSAxNiBieXRlcyBmb3IgZXF1YWxpdHkgKi8KKwlwc3ViYgkleG1tMCwgJXhtbTIJCS8qIHBhY2tlZCBzdWIgb2YgY29tcGFyaXNvbiByZXN1bHRzKi8KKwlwbW92bXNrYiAleG1tMiwgJXI5ZAorCXNocgklY2wsICVlZHgJCS8qIGFkanVzdCAweGZmZmYgZm9yIG9mZnNldCAqLworCXNocgklY2wsICVyOWQJCS8qIGFkanVzdCBmb3IgMTYtYnl0ZSBvZmZzZXQgKi8KKwlzdWIJJXI5ZCwgJWVkeAorCWpueglMKGxlc3MzMmJ5dGVzKQkvKiBtaXNtYXRjaCBvciBudWxsIGNoYXIgc2VlbiAqLworCW1vdmRxYQkoJXJkaSksICV4bW0zCisJVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlcmN4CQkvKiBpbmRleCBmb3IgbG9hZHMqLworCW1vdgkkMSwgJXI5ZAkJLyogYnl0ZSBwb3NpdGlvbiBsZWZ0IG92ZXIgZnJvbSBsZXNzMzJieXRlcyBjYXNlICovCisJLyoKKwkgKiBTZXR1cCAlcjEwIHZhbHVlIGFsbG93cyB1cyB0byBkZXRlY3QgY3Jvc3NpbmcgYSBwYWdlIGJvdW5kYXJ5LgorCSAqIFdoZW4gJXIxMCBnb2VzIHBvc2l0aXZlIHdlIGhhdmUgY3Jvc3NlZCBhIHBhZ2UgYm91bmRhcnkgYW5kCisJICogbmVlZCB0byBkbyBhIG5pYmJsZS4KKwkgKi8KKwlsZWEJMSglcmRpKSwgJXIxMAorCWFuZAkkMHhmZmYsICVyMTAJCS8qIG9mZnNldCBpbnRvIDRLIHBhZ2UgKi8KKwlzdWIJJDB4MTAwMCwgJXIxMAkJLyogc3VidHJhY3QgNEsgcGFnZXNpemUgKi8KKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzEpOgorCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzEpCS8qIGNyb3NzIHBhZ2UgYm91bmRhcnkgKi8KKworTChnb2JibGVfYXNocl8xKToKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAkJIC8qIHN0b3JlIGZvciBuZXh0IGN5Y2xlICovCisKKwlwYWxpZ25yICQxLCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKworCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzEpCS8qIGNyb3NzIHBhZ2UgYm91bmRhcnkgKi8KKworCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CQkvKiBzdG9yZSBmb3IgbmV4dCBjeWNsZSAqLworCisJcGFsaWduciAkMSwgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisJam1wCUwobG9vcF9hc2hyXzEpCisKKwkvKgorCSAqIE5pYmJsZSBhdm9pZHMgbG9hZHMgYWNyb3NzIHBhZ2UgYm91bmRhcnkuIFRoaXMgaXMgdG8gYXZvaWQgYSBwb3RlbnRpYWwKKwkgKiBhY2Nlc3MgaW50byB1bm1hcHBlZCBtZW1vcnkuCisJICovCisJLnAyYWxpZ24gNAorTChuaWJibGVfYXNocl8xKToKKwlwY21wZXFiCSV4bW0zLCAleG1tMAkJIC8qIGNoZWNrIG5pYmJsZSBmb3IgbnVsbCBjaGFyKi8KKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCXRlc3QJJDB4ZmZmZSwgJWVkeAorCWpueglMKGFzaHJfMV9leGl0dGFpbCkJLyogZmluZCBudWxsIGNoYXIqLworCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXAJJDE0LCAlcjExCisJamJlCUwoYXNocl8xX2V4aXR0YWlsKQorI2VuZGlmCisKKwlweG9yCSV4bW0wLCAleG1tMAorCXN1YgkkMHgxMDAwLCAlcjEwCQkvKiBzdWJzdHJhY3QgNEsgZnJvbSAlcjEwICovCisJam1wCUwoZ29iYmxlX2FzaHJfMSkKKworCS8qCisJICogT25jZSBmaW5kIG51bGwgY2hhciwgZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgc3RyaW5nIG1pc21hdGNoCisJICogYmVmb3JlIHRoZSBudWxsIGNoYXIuCisJICovCisJLnAyYWxpZ24gNAorTChhc2hyXzFfZXhpdHRhaWwpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJcHNybGRxCSQxLCAleG1tMAorCXBzcmxkcQkkMSwgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzIKKyAqIHJjeChvZmZzZXQgb2YgcnNpKSAgcmF4KG9mZnNldCBvZiByZGkpICAgcmVsYXRpdmUgb2Zmc2V0ICAgCWNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oMTR+MTUpICAgICAgICAgICAgbiAtMTQgICAgICAgICAxKDE1ICsobi0xNCkgLSBuKSAgICAgICAgIGFzaHJfMgorICovCisJLnAyYWxpZ24gNAorTChhc2hyXzIpOgorCXB4b3IJJXhtbTAsICV4bW0wCisJbW92ZHFhCSglcmRpKSwgJXhtbTIKKwltb3ZkcWEJKCVyc2kpLCAleG1tMQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcHNsbGRxCSQxNCwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMgorCXBzdWJiCSV4bW0wLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlcjlkCisJc2hyCSVjbCwgJWVkeAorCXNocgklY2wsICVyOWQKKwlzdWIJJXI5ZCwgJWVkeAorCWpueglMKGxlc3MzMmJ5dGVzKQorCW1vdmRxYQkoJXJkaSksICV4bW0zCisJVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlcmN4CS8qIGluZGV4IGZvciBsb2FkcyAqLworCW1vdgkkMiwgJXI5ZAkvKiBieXRlIHBvc2l0aW9uIGxlZnQgb3ZlciBmcm9tIGxlc3MzMmJ5dGVzIGNhc2UgKi8KKwkvKgorCSAqIFNldHVwICVyMTAgdmFsdWUgYWxsb3dzIHVzIHRvIGRldGVjdCBjcm9zc2luZyBhIHBhZ2UgYm91bmRhcnkuCisJICogV2hlbiAlcjEwIGdvZXMgcG9zaXRpdmUgd2UgaGF2ZSBjcm9zc2VkIGEgcGFnZSBib3VuZGFyeSBhbmQKKwkgKiBuZWVkIHRvIGRvIGEgbmliYmxlLgorCSAqLworCWxlYQkyKCVyZGkpLCAlcjEwCisJYW5kCSQweGZmZiwgJXIxMAkvKiBvZmZzZXQgaW50byA0SyBwYWdlICovCisJc3ViCSQweDEwMDAsICVyMTAJLyogc3VidHJhY3QgNEsgcGFnZXNpemUgKi8KKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzIpOgorCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzIpCisKK0woZ29iYmxlX2FzaHJfMik6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDIsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl8yKQkvKiBjcm9zcyBwYWdlIGJvdW5kYXJ5ICovCisKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWduciAkMiwgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKwlqbXAJTChsb29wX2FzaHJfMikKKworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfMik6CisJcGNtcGVxYgkleG1tMywgJXhtbTAJCS8qIGNoZWNrIG5pYmJsZSBmb3IgbnVsbCBjaGFyICovCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwl0ZXN0CSQweGZmZmMsICVlZHgKKwlqbnoJTChhc2hyXzJfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcAkkMTMsICVyMTEKKwlqYmUJTChhc2hyXzJfZXhpdHRhaWwpCisjZW5kaWYKKworCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVyMTAKKwlqbXAJTChnb2JibGVfYXNocl8yKQorCisJLnAyYWxpZ24gNAorTChhc2hyXzJfZXhpdHRhaWwpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJcHNybGRxCSQyLCAleG1tMAorCXBzcmxkcQkkMiwgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzMKKyAqICByY3gob2Zmc2V0IG9mIHJzaSkgIHJheChvZmZzZXQgb2YgcmRpKSAgcmVsYXRpdmUgb2Zmc2V0CSBjb3JyZXNwb25kaW5nIGNhc2UKKyAqICAgICAgICBuKDEzfjE1KSAgICAgICAgICAgIG4gLTEzICAgICAgICAgMigxNSArKG4tMTMpIC0gbikgICAgICAgICBhc2hyXzMKKyAqLworCS5wMmFsaWduIDQKK0woYXNocl8zKToKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxYQkoJXJkaSksICV4bW0yCisJbW92ZHFhCSglcnNpKSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBzbGxkcQkkMTMsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJXI5ZAorCXNocgklY2wsICVlZHgKKwlzaHIJJWNsLCAlcjlkCisJc3ViCSVyOWQsICVlZHgKKwlqbnoJTChsZXNzMzJieXRlcykKKwltb3ZkcWEJKCVyZGkpLCAleG1tMworCisJVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlcmN4CS8qIGluZGV4IGZvciBsb2FkcyAqLworCW1vdgkkMywgJXI5ZAkvKiBieXRlIHBvc2l0aW9uIGxlZnQgb3ZlciBmcm9tIGxlc3MzMmJ5dGVzIGNhc2UgKi8KKwkvKgorCSAqIFNldHVwICVyMTAgdmFsdWUgYWxsb3dzIHVzIHRvIGRldGVjdCBjcm9zc2luZyBhIHBhZ2UgYm91bmRhcnkuCisJICogV2hlbiAlcjEwIGdvZXMgcG9zaXRpdmUgd2UgaGF2ZSBjcm9zc2VkIGEgcGFnZSBib3VuZGFyeSBhbmQKKwkgKiBuZWVkIHRvIGRvIGEgbmliYmxlLgorCSAqLworCWxlYQkzKCVyZGkpLCAlcjEwCisJYW5kCSQweGZmZiwgJXIxMAkvKiBvZmZzZXQgaW50byA0SyBwYWdlICovCisJc3ViCSQweDEwMDAsICVyMTAJLyogc3VidHJhY3QgNEsgcGFnZXNpemUgKi8KKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzMpOgorCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzMpCisKK0woZ29iYmxlX2FzaHJfMyk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDMsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl8zKQkvKiBjcm9zcyBwYWdlIGJvdW5kYXJ5ICovCisKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWduciAkMywgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKwlqbXAJTChsb29wX2FzaHJfMykKKworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfMyk6CisJcGNtcGVxYgkleG1tMywgJXhtbTAJCS8qIGNoZWNrIG5pYmJsZSBmb3IgbnVsbCBjaGFyICovCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwl0ZXN0CSQweGZmZjgsICVlZHgKKwlqbnoJTChhc2hyXzNfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcAkkMTIsICVyMTEKKwlqYmUJTChhc2hyXzNfZXhpdHRhaWwpCisjZW5kaWYKKworCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVyMTAKKwlqbXAJTChnb2JibGVfYXNocl8zKQorCisJLnAyYWxpZ24gNAorTChhc2hyXzNfZXhpdHRhaWwpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJcHNybGRxCSQzLCAleG1tMAorCXBzcmxkcQkkMywgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzQKKyAqICByY3gob2Zmc2V0IG9mIHJzaSkgIHJheChvZmZzZXQgb2YgcmRpKSAgcmVsYXRpdmUgb2Zmc2V0CSBjb3JyZXNwb25kaW5nIGNhc2UKKyAqICAgICAgICBuKDEyfjE1KSAgICAgICAgICAgIG4gLTEyICAgICAgICAgMygxNSArKG4tMTIpIC0gbikgICAgICAgICBhc2hyXzQKKyAqLworCS5wMmFsaWduIDQKK0woYXNocl80KToKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxYQkoJXJkaSksICV4bW0yCisJbW92ZHFhCSglcnNpKSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBzbGxkcQkkMTIsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJXI5ZAorCXNocgklY2wsICVlZHgKKwlzaHIJJWNsLCAlcjlkCisJc3ViCSVyOWQsICVlZHgKKwlqbnoJTChsZXNzMzJieXRlcykKKwltb3ZkcWEJKCVyZGkpLCAleG1tMworCisJVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlcmN4CS8qIGluZGV4IGZvciBsb2FkcyAqLworCW1vdgkkNCwgJXI5ZAkvKiBieXRlIHBvc2l0aW9uIGxlZnQgb3ZlciBmcm9tIGxlc3MzMmJ5dGVzIGNhc2UgKi8KKwkvKgorCSAqIFNldHVwICVyMTAgdmFsdWUgYWxsb3dzIHVzIHRvIGRldGVjdCBjcm9zc2luZyBhIHBhZ2UgYm91bmRhcnkuCisJICogV2hlbiAlcjEwIGdvZXMgcG9zaXRpdmUgd2UgaGF2ZSBjcm9zc2VkIGEgcGFnZSBib3VuZGFyeSBhbmQKKwkgKiBuZWVkIHRvIGRvIGEgbmliYmxlLgorCSAqLworCWxlYQk0KCVyZGkpLCAlcjEwCisJYW5kCSQweGZmZiwgJXIxMAkvKiBvZmZzZXQgaW50byA0SyBwYWdlICovCisJc3ViCSQweDEwMDAsICVyMTAJLyogc3VidHJhY3QgNEsgcGFnZXNpemUgKi8KKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzQpOgorCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzQpCisKK0woZ29iYmxlX2FzaHJfNCk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDQsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl80KQkvKiBjcm9zcyBwYWdlIGJvdW5kYXJ5ICovCisKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWduciAkNCwgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKwlqbXAJTChsb29wX2FzaHJfNCkKKworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfNCk6CisJcGNtcGVxYgkleG1tMywgJXhtbTAJCS8qIGNoZWNrIG5pYmJsZSBmb3IgbnVsbCBjaGFyICovCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwl0ZXN0CSQweGZmZjAsICVlZHgKKwlqbnoJTChhc2hyXzRfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcAkkMTEsICVyMTEKKwlqYmUJTChhc2hyXzRfZXhpdHRhaWwpCisjZW5kaWYKKworCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVyMTAKKwlqbXAJTChnb2JibGVfYXNocl80KQorCisJLnAyYWxpZ24gNAorTChhc2hyXzRfZXhpdHRhaWwpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJcHNybGRxCSQ0LCAleG1tMAorCXBzcmxkcQkkNCwgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzUKKyAqICByY3gob2Zmc2V0IG9mIHJzaSkgIHJheChvZmZzZXQgb2YgcmRpKSAgICAgICAgcmVsYXRpdmUgb2Zmc2V0ICAgICAgY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbigxMX4xNSkgICAgICAgICAgbiAtIDExICAgICAgCSAgNCgxNSArKG4tMTEpIC0gbikgICAgICAgICBhc2hyXzUKKyAqLworCS5wMmFsaWduIDQKK0woYXNocl81KToKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxYQkoJXJkaSksICV4bW0yCisJbW92ZHFhCSglcnNpKSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBzbGxkcQkkMTEsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJXI5ZAorCXNocgklY2wsICVlZHgKKwlzaHIJJWNsLCAlcjlkCisJc3ViCSVyOWQsICVlZHgKKwlqbnoJTChsZXNzMzJieXRlcykKKwltb3ZkcWEJKCVyZGkpLCAleG1tMworCisJVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlcmN4CS8qIGluZGV4IGZvciBsb2FkcyAqLworCW1vdgkkNSwgJXI5ZAkvKiBieXRlIHBvc2l0aW9uIGxlZnQgb3ZlciBmcm9tIGxlc3MzMmJ5dGVzIGNhc2UgKi8KKwkvKgorCSAqIFNldHVwICVyMTAgdmFsdWUgYWxsb3dzIHVzIHRvIGRldGVjdCBjcm9zc2luZyBhIHBhZ2UgYm91bmRhcnkuCisJICogV2hlbiAlcjEwIGdvZXMgcG9zaXRpdmUgd2UgaGF2ZSBjcm9zc2VkIGEgcGFnZSBib3VuZGFyeSBhbmQKKwkgKiBuZWVkIHRvIGRvIGEgbmliYmxlLgorCSAqLworCWxlYQk1KCVyZGkpLCAlcjEwCisJYW5kCSQweGZmZiwgJXIxMAkvKiBvZmZzZXQgaW50byA0SyBwYWdlICovCisJc3ViCSQweDEwMDAsICVyMTAJLyogc3VidHJhY3QgNEsgcGFnZXNpemUgKi8KKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzUpOgorCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzUpCisKK0woZ29iYmxlX2FzaHJfNSk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDUsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl81KQkvKiBjcm9zcyBwYWdlIGJvdW5kYXJ5ICovCisKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWduciAkNSwgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKwlqbXAJTChsb29wX2FzaHJfNSkKKworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfNSk6CisJcGNtcGVxYgkleG1tMywgJXhtbTAJCS8qIGNoZWNrIG5pYmJsZSBmb3IgbnVsbCBjaGFyICovCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwl0ZXN0CSQweGZmZTAsICVlZHgKKwlqbnoJTChhc2hyXzVfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcAkkMTAsICVyMTEKKwlqYmUJTChhc2hyXzVfZXhpdHRhaWwpCisjZW5kaWYKKworCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVyMTAKKwlqbXAJTChnb2JibGVfYXNocl81KQorCisJLnAyYWxpZ24gNAorTChhc2hyXzVfZXhpdHRhaWwpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJcHNybGRxCSQ1LCAleG1tMAorCXBzcmxkcQkkNSwgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzYKKyAqICByY3gob2Zmc2V0IG9mIHJzaSkgIHJheChvZmZzZXQgb2YgcmRpKSAgICAgICAgcmVsYXRpdmUgb2Zmc2V0ICAgICAgY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbigxMH4xNSkgICAgICAgICAgbiAtIDEwICAgICAgCSAgNSgxNSArKG4tMTApIC0gbikgICAgICAgICBhc2hyXzYKKyAqLworCS5wMmFsaWduIDQKK0woYXNocl82KToKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxYQkoJXJkaSksICV4bW0yCisJbW92ZHFhCSglcnNpKSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBzbGxkcQkkMTAsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJXI5ZAorCXNocgklY2wsICVlZHgKKwlzaHIJJWNsLCAlcjlkCisJc3ViCSVyOWQsICVlZHgKKwlqbnoJTChsZXNzMzJieXRlcykKKwltb3ZkcWEJKCVyZGkpLCAleG1tMworCisJVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlcmN4CS8qIGluZGV4IGZvciBsb2FkcyAqLworCW1vdgkkNiwgJXI5ZAkvKiBieXRlIHBvc2l0aW9uIGxlZnQgb3ZlciBmcm9tIGxlc3MzMmJ5dGVzIGNhc2UgKi8KKwkvKgorCSAqIFNldHVwICVyMTAgdmFsdWUgYWxsb3dzIHVzIHRvIGRldGVjdCBjcm9zc2luZyBhIHBhZ2UgYm91bmRhcnkuCisJICogV2hlbiAlcjEwIGdvZXMgcG9zaXRpdmUgd2UgaGF2ZSBjcm9zc2VkIGEgcGFnZSBib3VuZGFyeSBhbmQKKwkgKiBuZWVkIHRvIGRvIGEgbmliYmxlLgorCSAqLworCWxlYQk2KCVyZGkpLCAlcjEwCisJYW5kCSQweGZmZiwgJXIxMAkvKiBvZmZzZXQgaW50byA0SyBwYWdlICovCisJc3ViCSQweDEwMDAsICVyMTAJLyogc3VidHJhY3QgNEsgcGFnZXNpemUgKi8KKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzYpOgorCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzYpCisKK0woZ29iYmxlX2FzaHJfNik6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDYsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl82KQkvKiBjcm9zcyBwYWdlIGJvdW5kYXJ5ICovCisKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWduciAkNiwgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKwlqbXAJTChsb29wX2FzaHJfNikKKworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfNik6CisJcGNtcGVxYgkleG1tMywgJXhtbTAJCS8qIGNoZWNrIG5pYmJsZSBmb3IgbnVsbCBjaGFyICovCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwl0ZXN0CSQweGZmYzAsICVlZHgKKwlqbnoJTChhc2hyXzZfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcAkkOSwgJXIxMQorCWpiZQlMKGFzaHJfNl9leGl0dGFpbCkKKyNlbmRpZgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwlzdWIJJDB4MTAwMCwgJXIxMAorCWptcAlMKGdvYmJsZV9hc2hyXzYpCisKKwkucDJhbGlnbiA0CitMKGFzaHJfNl9leGl0dGFpbCk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwlwc3JsZHEJJDYsICV4bW0wCisJcHNybGRxCSQ2LCAleG1tMworCWptcAlMKGFmdGVydGFpbCkKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfNworICogIHJjeChvZmZzZXQgb2YgcnNpKSAgcmF4KG9mZnNldCBvZiByZGkpICAgICAgICByZWxhdGl2ZSBvZmZzZXQgICAgICBjb3JyZXNwb25kaW5nIGNhc2UKKyAqICAgICAgICBuKDl+MTUpICAgICAgICAgIG4gLSA5ICAgICAgCSAgICAgICAgNigxNSArKG4gLSA5KSAtIG4pICAgICAgICAgYXNocl83CisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfNyk6CisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVyZGkpLCAleG1tMgorCW1vdmRxYQkoJXJzaSksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEJJDksICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJXI5ZAorCXNocgklY2wsICVlZHgKKwlzaHIJJWNsLCAlcjlkCisJc3ViCSVyOWQsICVlZHgKKwlqbnoJTChsZXNzMzJieXRlcykKKwltb3ZkcWEJKCVyZGkpLCAleG1tMworCisJVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlcmN4CS8qIGluZGV4IGZvciBsb2FkcyAqLworCW1vdgkkNywgJXI5ZAkvKiBieXRlIHBvc2l0aW9uIGxlZnQgb3ZlciBmcm9tIGxlc3MzMmJ5dGVzIGNhc2UgKi8KKwkvKgorCSAqIFNldHVwICVyMTAgdmFsdWUgYWxsb3dzIHVzIHRvIGRldGVjdCBjcm9zc2luZyBhIHBhZ2UgYm91bmRhcnkuCisJICogV2hlbiAlcjEwIGdvZXMgcG9zaXRpdmUgd2UgaGF2ZSBjcm9zc2VkIGEgcGFnZSBib3VuZGFyeSBhbmQKKwkgKiBuZWVkIHRvIGRvIGEgbmliYmxlLgorCSAqLworCWxlYQk3KCVyZGkpLCAlcjEwCisJYW5kCSQweGZmZiwgJXIxMAkvKiBvZmZzZXQgaW50byA0SyBwYWdlICovCisJc3ViCSQweDEwMDAsICVyMTAJLyogc3VidHJhY3QgNEsgcGFnZXNpemUgKi8KKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzcpOgorCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzcpCisKK0woZ29iYmxlX2FzaHJfNyk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDcsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl83KQkvKiBjcm9zcyBwYWdlIGJvdW5kYXJ5ICovCisKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWduciAkNywgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKwlqbXAJTChsb29wX2FzaHJfNykKKworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfNyk6CisJcGNtcGVxYgkleG1tMywgJXhtbTAJCS8qIGNoZWNrIG5pYmJsZSBmb3IgbnVsbCBjaGFyICovCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwl0ZXN0CSQweGZmODAsICVlZHgKKwlqbnoJTChhc2hyXzdfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcAkkOCwgJXIxMQorCWpiZQlMKGFzaHJfN19leGl0dGFpbCkKKyNlbmRpZgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwlzdWIJJDB4MTAwMCwgJXIxMAorCWptcAlMKGdvYmJsZV9hc2hyXzcpCisKKwkucDJhbGlnbiA0CitMKGFzaHJfN19leGl0dGFpbCk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwlwc3JsZHEJJDcsICV4bW0wCisJcHNybGRxCSQ3LCAleG1tMworCWptcAlMKGFmdGVydGFpbCkKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzgKKyAqICByY3gob2Zmc2V0IG9mIHJzaSkgIHJheChvZmZzZXQgb2YgcmRpKSAgICAgICAgcmVsYXRpdmUgb2Zmc2V0CSBjb3JyZXNwb25kaW5nIGNhc2UKKyAqICAgICAgICBuKDh+MTUpICAgICAgICAgIG4gLSA4ICAgICAgCSAgICAgICAgNygxNSArKG4gLSA4KSAtIG4pICAgICAgICAgYXNocl84CisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfOCk6CisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVyZGkpLCAleG1tMgorCW1vdmRxYQkoJXJzaSksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEJJDgsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJXI5ZAorCXNocgklY2wsICVlZHgKKwlzaHIJJWNsLCAlcjlkCisJc3ViCSVyOWQsICVlZHgKKwlqbnoJTChsZXNzMzJieXRlcykKKwltb3ZkcWEJKCVyZGkpLCAleG1tMworCisJVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlcmN4CS8qIGluZGV4IGZvciBsb2FkcyAqLworCW1vdgkkOCwgJXI5ZAkvKiBieXRlIHBvc2l0aW9uIGxlZnQgb3ZlciBmcm9tIGxlc3MzMmJ5dGVzIGNhc2UgKi8KKwkvKgorCSAqIFNldHVwICVyMTAgdmFsdWUgYWxsb3dzIHVzIHRvIGRldGVjdCBjcm9zc2luZyBhIHBhZ2UgYm91bmRhcnkuCisJICogV2hlbiAlcjEwIGdvZXMgcG9zaXRpdmUgd2UgaGF2ZSBjcm9zc2VkIGEgcGFnZSBib3VuZGFyeSBhbmQKKwkgKiBuZWVkIHRvIGRvIGEgbmliYmxlLgorCSAqLworCWxlYQk4KCVyZGkpLCAlcjEwCisJYW5kCSQweGZmZiwgJXIxMAkvKiBvZmZzZXQgaW50byA0SyBwYWdlICovCisJc3ViCSQweDEwMDAsICVyMTAJLyogc3VidHJhY3QgNEsgcGFnZXNpemUgKi8KKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzgpOgorCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzgpCisKK0woZ29iYmxlX2FzaHJfOCk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDgsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl84KQkvKiBjcm9zcyBwYWdlIGJvdW5kYXJ5ICovCisKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWduciAkOCwgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKwlqbXAJTChsb29wX2FzaHJfOCkKKworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfOCk6CisJcGNtcGVxYgkleG1tMywgJXhtbTAJCS8qIGNoZWNrIG5pYmJsZSBmb3IgbnVsbCBjaGFyICovCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwl0ZXN0CSQweGZmMDAsICVlZHgKKwlqbnoJTChhc2hyXzhfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcAkkNywgJXIxMQorCWpiZQlMKGFzaHJfOF9leGl0dGFpbCkKKyNlbmRpZgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwlzdWIJJDB4MTAwMCwgJXIxMAorCWptcAlMKGdvYmJsZV9hc2hyXzgpCisKKwkucDJhbGlnbiA0CitMKGFzaHJfOF9leGl0dGFpbCk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwlwc3JsZHEJJDgsICV4bW0wCisJcHNybGRxCSQ4LCAleG1tMworCWptcAlMKGFmdGVydGFpbCkKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzkKKyAqICByY3gob2Zmc2V0IG9mIHJzaSkgIHJheChvZmZzZXQgb2YgcmRpKSAgICAgICAgcmVsYXRpdmUgb2Zmc2V0CSBjb3JyZXNwb25kaW5nIGNhc2UKKyAqICAgICAgICBuKDd+MTUpICAgICAgICAgIG4gLSA3ICAgICAgCSAgICAgICAgOCgxNSArKG4gLSA3KSAtIG4pICAgICAgICAgYXNocl85CisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfOSk6CisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVyZGkpLCAleG1tMgorCW1vdmRxYQkoJXJzaSksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEJJDcsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJXI5ZAorCXNocgklY2wsICVlZHgKKwlzaHIJJWNsLCAlcjlkCisJc3ViCSVyOWQsICVlZHgKKwlqbnoJTChsZXNzMzJieXRlcykKKwltb3ZkcWEJKCVyZGkpLCAleG1tMworCisJVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlcmN4CS8qIGluZGV4IGZvciBsb2FkcyAqLworCW1vdgkkOSwgJXI5ZAkvKiBieXRlIHBvc2l0aW9uIGxlZnQgb3ZlciBmcm9tIGxlc3MzMmJ5dGVzIGNhc2UgKi8KKwkvKgorCSAqIFNldHVwICVyMTAgdmFsdWUgYWxsb3dzIHVzIHRvIGRldGVjdCBjcm9zc2luZyBhIHBhZ2UgYm91bmRhcnkuCisJICogV2hlbiAlcjEwIGdvZXMgcG9zaXRpdmUgd2UgaGF2ZSBjcm9zc2VkIGEgcGFnZSBib3VuZGFyeSBhbmQKKwkgKiBuZWVkIHRvIGRvIGEgbmliYmxlLgorCSAqLworCWxlYQk5KCVyZGkpLCAlcjEwCisJYW5kCSQweGZmZiwgJXIxMAkvKiBvZmZzZXQgaW50byA0SyBwYWdlICovCisJc3ViCSQweDEwMDAsICVyMTAJLyogc3VidHJhY3QgNEsgcGFnZXNpemUgKi8KKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzkpOgorCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzkpCisKK0woZ29iYmxlX2FzaHJfOSk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDksICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl85KQkvKiBjcm9zcyBwYWdlIGJvdW5kYXJ5ICovCisKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWduciAkOSwgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMJCS8qIHN0b3JlIGZvciBuZXh0IGN5Y2xlICovCisJam1wCUwobG9vcF9hc2hyXzkpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzkpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCQkvKiBjaGVjayBuaWJibGUgZm9yIG51bGwgY2hhciAqLworCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAkkMHhmZTAwLCAlZWR4CisJam56CUwoYXNocl85X2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXAJJDYsICVyMTEKKwlqYmUJTChhc2hyXzlfZXhpdHRhaWwpCisjZW5kaWYKKworCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVyMTAKKwlqbXAJTChnb2JibGVfYXNocl85KQorCisJLnAyYWxpZ24gNAorTChhc2hyXzlfZXhpdHRhaWwpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJcHNybGRxCSQ5LCAleG1tMAorCXBzcmxkcQkkOSwgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl8xMAorICogIHJjeChvZmZzZXQgb2YgcnNpKSAgcmF4KG9mZnNldCBvZiByZGkpICAgICAgICByZWxhdGl2ZSBvZmZzZXQJIGNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oNn4xNSkgICAgICAgICAgbiAtIDYgICAgICAJICAgICAgICA5KDE1ICsobiAtIDYpIC0gbikgICAgICAgICBhc2hyXzEwCisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfMTApOgorCXB4b3IJJXhtbTAsICV4bW0wCisJbW92ZHFhCSglcmRpKSwgJXhtbTIKKwltb3ZkcWEJKCVyc2kpLCAleG1tMQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcHNsbGRxCSQ2LCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcHN1YmIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVyOWQKKwlzaHIJJWNsLCAlZWR4CisJc2hyCSVjbCwgJXI5ZAorCXN1YgklcjlkLCAlZWR4CisJam56CUwobGVzczMyYnl0ZXMpCisJbW92ZHFhCSglcmRpKSwgJXhtbTMKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJXJjeAkvKiBpbmRleCBmb3IgbG9hZHMgKi8KKwltb3YJJDEwLCAlcjlkCS8qIGJ5dGUgcG9zaXRpb24gbGVmdCBvdmVyIGZyb20gbGVzczMyYnl0ZXMgY2FzZSAqLworCS8qCisJICogU2V0dXAgJXIxMCB2YWx1ZSBhbGxvd3MgdXMgdG8gZGV0ZWN0IGNyb3NzaW5nIGEgcGFnZSBib3VuZGFyeS4KKwkgKiBXaGVuICVyMTAgZ29lcyBwb3NpdGl2ZSB3ZSBoYXZlIGNyb3NzZWQgYSBwYWdlIGJvdW5kYXJ5IGFuZAorCSAqIG5lZWQgdG8gZG8gYSBuaWJibGUuCisJICovCisJbGVhCTEwKCVyZGkpLCAlcjEwCisJYW5kCSQweGZmZiwgJXIxMAkvKiBvZmZzZXQgaW50byA0SyBwYWdlICovCisJc3ViCSQweDEwMDAsICVyMTAJLyogc3VidHJhY3QgNEsgcGFnZXNpemUgKi8KKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzEwKToKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl8xMCkKKworTChnb2JibGVfYXNocl8xMCk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDEwLCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJXIxMAorCWpnCUwobmliYmxlX2FzaHJfMTApCS8qIGNyb3NzIHBhZ2UgYm91bmRhcnkgKi8KKworCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yICQxMCwgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKwlqbXAJTChsb29wX2FzaHJfMTApCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzEwKToKKwlwY21wZXFiCSV4bW0zLCAleG1tMAkJLyogY2hlY2sgbmliYmxlIGZvciBudWxsIGNoYXIgKi8KKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCXRlc3QJJDB4ZmMwMCwgJWVkeAorCWpueglMKGFzaHJfMTBfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcAkkNSwgJXIxMQorCWpiZQlMKGFzaHJfMTBfZXhpdHRhaWwpCisjZW5kaWYKKworCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVyMTAKKwlqbXAJTChnb2JibGVfYXNocl8xMCkKKworCS5wMmFsaWduIDQKK0woYXNocl8xMF9leGl0dGFpbCk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwlwc3JsZHEJJDEwLCAleG1tMAorCXBzcmxkcQkkMTAsICV4bW0zCisJam1wCUwoYWZ0ZXJ0YWlsKQorCisvKgorICogIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfMTEKKyAqICByY3gob2Zmc2V0IG9mIHJzaSkgIHJheChvZmZzZXQgb2YgcmRpKSAgICAgICAgcmVsYXRpdmUgb2Zmc2V0CSBjb3JyZXNwb25kaW5nIGNhc2UKKyAqICAgICAgICBuKDV+MTUpICAgICAgICAgIG4gLSA1ICAgICAgCSAgICAgICAgMTAoMTUgKyhuIC0gNSkgLSBuKSAgICAgICAgIGFzaHJfMTEKKyAqLworCS5wMmFsaWduIDQKK0woYXNocl8xMSk6CisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVyZGkpLCAleG1tMgorCW1vdmRxYQkoJXJzaSksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEJJDUsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJXI5ZAorCXNocgklY2wsICVlZHgKKwlzaHIJJWNsLCAlcjlkCisJc3ViCSVyOWQsICVlZHgKKwlqbnoJTChsZXNzMzJieXRlcykKKwltb3ZkcWEJKCVyZGkpLCAleG1tMworCisJVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlcmN4CS8qIGluZGV4IGZvciBsb2FkcyAqLworCW1vdgkkMTEsICVyOWQJLyogYnl0ZSBwb3NpdGlvbiBsZWZ0IG92ZXIgZnJvbSBsZXNzMzJieXRlcyBjYXNlICovCisJLyoKKwkgKiBTZXR1cCAlcjEwIHZhbHVlIGFsbG93cyB1cyB0byBkZXRlY3QgY3Jvc3NpbmcgYSBwYWdlIGJvdW5kYXJ5LgorCSAqIFdoZW4gJXIxMCBnb2VzIHBvc2l0aXZlIHdlIGhhdmUgY3Jvc3NlZCBhIHBhZ2UgYm91bmRhcnkgYW5kCisJICogbmVlZCB0byBkbyBhIG5pYmJsZS4KKwkgKi8KKwlsZWEJMTEoJXJkaSksICVyMTAKKwlhbmQJJDB4ZmZmLCAlcjEwCS8qIG9mZnNldCBpbnRvIDRLIHBhZ2UgKi8KKwlzdWIJJDB4MTAwMCwgJXIxMAkvKiBzdWJ0cmFjdCA0SyBwYWdlc2l6ZSAqLworCisJLnAyYWxpZ24gNAorTChsb29wX2FzaHJfMTEpOgorCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzExKQorCitMKGdvYmJsZV9hc2hyXzExKToKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWduciAkMTEsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl8xMSkJLyogY3Jvc3MgcGFnZSBib3VuZGFyeSAqLworCisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDExLCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCWptcAlMKGxvb3BfYXNocl8xMSkKKworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfMTEpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCQkvKiBjaGVjayBuaWJibGUgZm9yIG51bGwgY2hhciAqLworCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAkkMHhmODAwLCAlZWR4CisJam56CUwoYXNocl8xMV9leGl0dGFpbCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wCSQ0LCAlcjExCisJamJlCUwoYXNocl8xMV9leGl0dGFpbCkKKyNlbmRpZgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwlzdWIJJDB4MTAwMCwgJXIxMAorCWptcAlMKGdvYmJsZV9hc2hyXzExKQorCisJLnAyYWxpZ24gNAorTChhc2hyXzExX2V4aXR0YWlsKToKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCXBzcmxkcQkkMTEsICV4bW0wCisJcHNybGRxCSQxMSwgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl8xMgorICogIHJjeChvZmZzZXQgb2YgcnNpKSAgcmF4KG9mZnNldCBvZiByZGkpICAgICAgICByZWxhdGl2ZSBvZmZzZXQJIGNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oNH4xNSkgICAgICAgICAgbiAtIDQgICAgICAJICAgICAgICAxMSgxNSArKG4gLSA0KSAtIG4pICAgICAgICAgYXNocl8xMgorICovCisJLnAyYWxpZ24gNAorTChhc2hyXzEyKToKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxYQkoJXJkaSksICV4bW0yCisJbW92ZHFhCSglcnNpKSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBzbGxkcQkkNCwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMgorCXBzdWJiCSV4bW0wLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlcjlkCisJc2hyCSVjbCwgJWVkeAorCXNocgklY2wsICVyOWQKKwlzdWIJJXI5ZCwgJWVkeAorCWpueglMKGxlc3MzMmJ5dGVzKQorCW1vdmRxYQkoJXJkaSksICV4bW0zCisKKwlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCisKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdgkkMTYsICVyY3gJLyogaW5kZXggZm9yIGxvYWRzICovCisJbW92CSQxMiwgJXI5ZAkvKiBieXRlIHBvc2l0aW9uIGxlZnQgb3ZlciBmcm9tIGxlc3MzMmJ5dGVzIGNhc2UgKi8KKwkvKgorCSAqIFNldHVwICVyMTAgdmFsdWUgYWxsb3dzIHVzIHRvIGRldGVjdCBjcm9zc2luZyBhIHBhZ2UgYm91bmRhcnkuCisJICogV2hlbiAlcjEwIGdvZXMgcG9zaXRpdmUgd2UgaGF2ZSBjcm9zc2VkIGEgcGFnZSBib3VuZGFyeSBhbmQKKwkgKiBuZWVkIHRvIGRvIGEgbmliYmxlLgorCSAqLworCWxlYQkxMiglcmRpKSwgJXIxMAorCWFuZAkkMHhmZmYsICVyMTAJLyogb2Zmc2V0IGludG8gNEsgcGFnZSAqLworCXN1YgkkMHgxMDAwLCAlcjEwCS8qIHN1YnRyYWN0IDRLIHBhZ2VzaXplICovCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl8xMik6CisJYWRkCSQxNiwgJXIxMAorCWpnCUwobmliYmxlX2FzaHJfMTIpCisKK0woZ29iYmxlX2FzaHJfMTIpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yICQxMiwgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKworCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzEyKQkvKiBjcm9zcyBwYWdlIGJvdW5kYXJ5ICovCisKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWduciAkMTIsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisJam1wCUwobG9vcF9hc2hyXzEyKQorCisJLnAyYWxpZ24gNAorTChuaWJibGVfYXNocl8xMik6CisJcGNtcGVxYgkleG1tMywgJXhtbTAJCS8qIGNoZWNrIG5pYmJsZSBmb3IgbnVsbCBjaGFyICovCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwl0ZXN0CSQweGYwMDAsICVlZHgKKwlqbnoJTChhc2hyXzEyX2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXAJJDMsICVyMTEKKwlqYmUJTChhc2hyXzEyX2V4aXR0YWlsKQorI2VuZGlmCisKKwlweG9yCSV4bW0wLCAleG1tMAorCXN1YgkkMHgxMDAwLCAlcjEwCisJam1wCUwoZ29iYmxlX2FzaHJfMTIpCisKKwkucDJhbGlnbiA0CitMKGFzaHJfMTJfZXhpdHRhaWwpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJcHNybGRxCSQxMiwgJXhtbTAKKwlwc3JsZHEJJDEyLCAleG1tMworCWptcAlMKGFmdGVydGFpbCkKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzEzCisgKiAgcmN4KG9mZnNldCBvZiByc2kpICByYXgob2Zmc2V0IG9mIHJkaSkgICAgICAgIHJlbGF0aXZlIG9mZnNldAkgY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbigzfjE1KSAgICAgICAgICBuIC0gMyAgICAgIAkgICAgICAgIDEyKDE1ICsobiAtIDMpIC0gbikgICAgICAgICBhc2hyXzEzCisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfMTMpOgorCXB4b3IJJXhtbTAsICV4bW0wCisJbW92ZHFhCSglcmRpKSwgJXhtbTIKKwltb3ZkcWEJKCVyc2kpLCAleG1tMQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcHNsbGRxCSQzLCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcHN1YmIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVyOWQKKwlzaHIJJWNsLCAlZWR4CisJc2hyCSVjbCwgJXI5ZAorCXN1YgklcjlkLCAlZWR4CisJam56CUwobGVzczMyYnl0ZXMpCisJbW92ZHFhCSglcmRpKSwgJXhtbTMKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJXJjeAkvKiBpbmRleCBmb3IgbG9hZHMgKi8KKwltb3YJJDEzLCAlcjlkCS8qIGJ5dGUgcG9zaXRpb24gbGVmdCBvdmVyIGZyb20gbGVzczMyYnl0ZXMgY2FzZSAqLworCS8qCisJICogU2V0dXAgJXIxMCB2YWx1ZSBhbGxvd3MgdXMgdG8gZGV0ZWN0IGNyb3NzaW5nIGEgcGFnZSBib3VuZGFyeS4KKwkgKiBXaGVuICVyMTAgZ29lcyBwb3NpdGl2ZSB3ZSBoYXZlIGNyb3NzZWQgYSBwYWdlIGJvdW5kYXJ5IGFuZAorCSAqIG5lZWQgdG8gZG8gYSBuaWJibGUuCisJICovCisJbGVhCTEzKCVyZGkpLCAlcjEwCisJYW5kCSQweGZmZiwgJXIxMAkvKiBvZmZzZXQgaW50byA0SyBwYWdlICovCisJc3ViCSQweDEwMDAsICVyMTAJLyogc3VidHJhY3QgNEsgcGFnZXNpemUgKi8KKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzEzKToKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl8xMykKKworTChnb2JibGVfYXNocl8xMyk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDEzLCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJXIxMAorCWpnCUwobmliYmxlX2FzaHJfMTMpCS8qIGNyb3NzIHBhZ2UgYm91bmRhcnkgKi8KKworCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yICQxMywgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKwlqbXAJTChsb29wX2FzaHJfMTMpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzEzKToKKwlwY21wZXFiCSV4bW0zLCAleG1tMAkJLyogY2hlY2sgbmliYmxlIGZvciBudWxsIGNoYXIgKi8KKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCXRlc3QJJDB4ZTAwMCwgJWVkeAorCWpueglMKGFzaHJfMTNfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcAkkMiwgJXIxMQorCWpiZQlMKGFzaHJfMTNfZXhpdHRhaWwpCisjZW5kaWYKKworCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVyMTAKKwlqbXAJTChnb2JibGVfYXNocl8xMykKKworCS5wMmFsaWduIDQKK0woYXNocl8xM19leGl0dGFpbCk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwlwc3JsZHEgICQxMywgJXhtbTAKKwlwc3JsZHEgICQxMywgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl8xNAorICogIHJjeChvZmZzZXQgb2YgcnNpKSAgcmF4KG9mZnNldCBvZiByZGkpICAgICAgICByZWxhdGl2ZSBvZmZzZXQJIGNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oMn4xNSkgICAgICAgICAgbiAtIDIgICAgICAJICAgICAgICAxMygxNSArKG4gLSAyKSAtIG4pICAgICAgICAgYXNocl8xNAorICovCisJLnAyYWxpZ24gNAorTChhc2hyXzE0KToKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxYQkoJXJkaSksICV4bW0yCisJbW92ZHFhCSglcnNpKSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBzbGxkcSAgJDIsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJXI5ZAorCXNocgklY2wsICVlZHgKKwlzaHIJJWNsLCAlcjlkCisJc3ViCSVyOWQsICVlZHgKKwlqbnoJTChsZXNzMzJieXRlcykKKwltb3ZkcWEJKCVyZGkpLCAleG1tMworCisJVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlcmN4CS8qIGluZGV4IGZvciBsb2FkcyAqLworCW1vdgkkMTQsICVyOWQJLyogYnl0ZSBwb3NpdGlvbiBsZWZ0IG92ZXIgZnJvbSBsZXNzMzJieXRlcyBjYXNlICovCisJLyoKKwkgKiBTZXR1cCAlcjEwIHZhbHVlIGFsbG93cyB1cyB0byBkZXRlY3QgY3Jvc3NpbmcgYSBwYWdlIGJvdW5kYXJ5LgorCSAqIFdoZW4gJXIxMCBnb2VzIHBvc2l0aXZlIHdlIGhhdmUgY3Jvc3NlZCBhIHBhZ2UgYm91bmRhcnkgYW5kCisJICogbmVlZCB0byBkbyBhIG5pYmJsZS4KKwkgKi8KKwlsZWEJMTQoJXJkaSksICVyMTAKKwlhbmQJJDB4ZmZmLCAlcjEwCS8qIG9mZnNldCBpbnRvIDRLIHBhZ2UgKi8KKwlzdWIJJDB4MTAwMCwgJXIxMAkvKiBzdWJ0cmFjdCA0SyBwYWdlc2l6ZSAqLworCisJLnAyYWxpZ24gNAorTChsb29wX2FzaHJfMTQpOgorCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzE0KQorCitMKGdvYmJsZV9hc2hyXzE0KToKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWduciAkMTQsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl8xNCkJLyogY3Jvc3MgcGFnZSBib3VuZGFyeSAqLworCisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDE0LCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCWptcAlMKGxvb3BfYXNocl8xNCkKKworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfMTQpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCQkvKiBjaGVjayBuaWJibGUgZm9yIG51bGwgY2hhciAqLworCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAkkMHhjMDAwLCAlZWR4CisJam56CUwoYXNocl8xNF9leGl0dGFpbCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wCSQxLCAlcjExCisJamJlCUwoYXNocl8xNF9leGl0dGFpbCkKKyNlbmRpZgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwlzdWIJJDB4MTAwMCwgJXIxMAorCWptcAlMKGdvYmJsZV9hc2hyXzE0KQorCisJLnAyYWxpZ24gNAorTChhc2hyXzE0X2V4aXR0YWlsKToKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCXBzcmxkcQkkMTQsICV4bW0wCisJcHNybGRxCSQxNCwgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl8xNQorICogIHJjeChvZmZzZXQgb2YgcnNpKSAgcmF4KG9mZnNldCBvZiByZGkpICAgICAgICByZWxhdGl2ZSBvZmZzZXQJIGNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oMX4xNSkgICAgICAgICAgbiAtIDEgICAgICAJICAgICAgICAxNCgxNSArKG4gLSAxKSAtIG4pICAgICAgICAgYXNocl8xNQorICovCisJLnAyYWxpZ24gNAorTChhc2hyXzE1KToKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxYQkoJXJkaSksICV4bW0yCisJbW92ZHFhCSglcnNpKSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBzbGxkcQkkMSwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMgorCXBzdWJiCSV4bW0wLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlcjlkCisJc2hyCSVjbCwgJWVkeAorCXNocgklY2wsICVyOWQKKwlzdWIJJXI5ZCwgJWVkeAorCWpueglMKGxlc3MzMmJ5dGVzKQorCisJbW92ZHFhCSglcmRpKSwgJXhtbTMKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJXJjeAkvKiBpbmRleCBmb3IgbG9hZHMgKi8KKwltb3YJJDE1LCAlcjlkCS8qIGJ5dGUgcG9zaXRpb24gbGVmdCBvdmVyIGZyb20gbGVzczMyYnl0ZXMgY2FzZSAqLworCS8qCisJICogU2V0dXAgJXIxMCB2YWx1ZSBhbGxvd3MgdXMgdG8gZGV0ZWN0IGNyb3NzaW5nIGEgcGFnZSBib3VuZGFyeS4KKwkgKiBXaGVuICVyMTAgZ29lcyBwb3NpdGl2ZSB3ZSBoYXZlIGNyb3NzZWQgYSBwYWdlIGJvdW5kYXJ5IGFuZAorCSAqIG5lZWQgdG8gZG8gYSBuaWJibGUuCisJICovCisJbGVhCTE1KCVyZGkpLCAlcjEwCisJYW5kCSQweGZmZiwgJXIxMAkvKiBvZmZzZXQgaW50byA0SyBwYWdlICovCisKKwlzdWIJJDB4MTAwMCwgJXIxMAkvKiBzdWJ0cmFjdCA0SyBwYWdlc2l6ZSAqLworCisJLnAyYWxpZ24gNAorTChsb29wX2FzaHJfMTUpOgorCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzE1KQorCitMKGdvYmJsZV9hc2hyXzE1KToKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWduciAkMTUsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl8xNSkJLyogY3Jvc3MgcGFnZSBib3VuZGFyeSAqLworCisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDE1LCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCWptcAlMKGxvb3BfYXNocl8xNSkKKworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfMTUpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCQkvKiBjaGVjayBuaWJibGUgZm9yIG51bGwgY2hhciAqLworCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAkkMHg4MDAwLCAlZWR4CisJam56CUwoYXNocl8xNV9leGl0dGFpbCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJdGVzdAklcjExLCAlcjExCisJamUJTChhc2hyXzE1X2V4aXR0YWlsKQorI2VuZGlmCisKKwlweG9yCSV4bW0wLCAleG1tMAorCXN1YgkkMHgxMDAwLCAlcjEwCisJam1wCUwoZ29iYmxlX2FzaHJfMTUpCisKKwkucDJhbGlnbiA0CitMKGFzaHJfMTVfZXhpdHRhaWwpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJcHNybGRxCSQxNSwgJXhtbTMKKwlwc3JsZHEJJDE1LCAleG1tMAorCisJLnAyYWxpZ24gNAorTChhZnRlcnRhaWwpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlub3QJJWVkeAorCisJLnAyYWxpZ24gNAorTChleGl0KToKKwlsZWEJLTE2KCVyOSwgJXJjeCksICVyYXgJLyogbG9jYXRlIHRoZSBleGFjdCBvZmZzZXQgZm9yIHJkaSAqLworTChsZXNzMzJieXRlcyk6CisJbGVhCSglcmRpLCAlcmF4KSwgJXJkaQkvKiBsb2NhdGUgdGhlIGV4YWN0IGFkZHJlc3MgZm9yIGZpcnN0IG9wZXJhbmQocmRpKSAqLworCWxlYQkoJXJzaSwgJXJjeCksICVyc2kJLyogbG9jYXRlIHRoZSBleGFjdCBhZGRyZXNzIGZvciBzZWNvbmQgb3BlcmFuZChyc2kpICovCisJdGVzdAklcjhkLCAlcjhkCisJanoJTChyZXQpCisJeGNoZwklcnNpLCAlcmRpCQkvKiByZWNvdmVyIG9yaWdpbmFsIG9yZGVyIGFjY29yZGluZyB0byBmbGFnKCVyOGQpICovCisKKwkucDJhbGlnbiA0CitMKHJldCk6CitMKGxlc3MxNmJ5dGVzKToKKwlic2YJJXJkeCwgJXJkeAkJLyogZmluZCBhbmQgc3RvcmUgYml0IGluZGV4IGluICVyZHggKi8KKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSVyZHgsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKwltb3Z6YmwJKCVyc2ksICVyZHgpLCAlZWN4CisJbW92emJsCSglcmRpLCAlcmR4KSwgJWVheAorCisJc3ViCSVlY3gsICVlYXgKKwlyZXQKKworTChzdHJjbXBfZXhpdHopOgorCXhvcgklZWF4LCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKEJ5dGUwKToKKwltb3Z6eAkoJXJzaSksICVlY3gKKwltb3Z6eAkoJXJkaSksICVlYXgKKworCXN1YgklZWN4LCAlZWF4CisJcmV0CitFTkQgKFNUUkNNUCkKKworCS5zZWN0aW9uIC5yb2RhdGEsImEiLEBwcm9nYml0cworCS5wMmFsaWduIDMKK0wodW5hbGlnbmVkX3RhYmxlKToKKwkuaW50CUwoYXNocl8xKSAtIEwodW5hbGlnbmVkX3RhYmxlKQorCS5pbnQJTChhc2hyXzIpIC0gTCh1bmFsaWduZWRfdGFibGUpCisJLmludAlMKGFzaHJfMykgLSBMKHVuYWxpZ25lZF90YWJsZSkKKwkuaW50CUwoYXNocl80KSAtIEwodW5hbGlnbmVkX3RhYmxlKQorCS5pbnQJTChhc2hyXzUpIC0gTCh1bmFsaWduZWRfdGFibGUpCisJLmludAlMKGFzaHJfNikgLSBMKHVuYWxpZ25lZF90YWJsZSkKKwkuaW50CUwoYXNocl83KSAtIEwodW5hbGlnbmVkX3RhYmxlKQorCS5pbnQJTChhc2hyXzgpIC0gTCh1bmFsaWduZWRfdGFibGUpCisJLmludAlMKGFzaHJfOSkgLSBMKHVuYWxpZ25lZF90YWJsZSkKKwkuaW50CUwoYXNocl8xMCkgLSBMKHVuYWxpZ25lZF90YWJsZSkKKwkuaW50CUwoYXNocl8xMSkgLSBMKHVuYWxpZ25lZF90YWJsZSkKKwkuaW50CUwoYXNocl8xMikgLSBMKHVuYWxpZ25lZF90YWJsZSkKKwkuaW50CUwoYXNocl8xMykgLSBMKHVuYWxpZ25lZF90YWJsZSkKKwkuaW50CUwoYXNocl8xNCkgLSBMKHVuYWxpZ25lZF90YWJsZSkKKwkuaW50CUwoYXNocl8xNSkgLSBMKHVuYWxpZ25lZF90YWJsZSkKKwkuaW50CUwoYXNocl8wKSAtIEwodW5hbGlnbmVkX3RhYmxlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NzZTMtc3RybmNtcC1zbG0uUyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3Nzc2UzLXN0cm5jbXAtc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU0MDc3NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3Nzc2UzLXN0cm5jbXAtc2xtLlMKQEAgLTAsMCArMSwzMyBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2RlZmluZSBVU0VfQVNfU1RSTkNNUAorI2RlZmluZSBTVFJDTVAJCXN0cm5jbXAKKyNpbmNsdWRlICJzc3NlMy1zdHJjbXAtc2xtLlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzLm1rIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMwOWU3Ny4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4KLXN5c2NhbGxfc3JjIDo9Ci1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX2FyY2hfcHJjdGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19icmsuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX2V4aXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19nZXRjcHUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19nZXRjd2QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX2lvY3RsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL19fb3BlbmF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL19fcHBvbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19wc2VsZWN0Ni5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX3B0cmFjZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX3JlYm9vdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ3N1c3BlbmQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX3N5c2xvZy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX3dhaXRpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fZXhpdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9hY2NlcHQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvYWNjdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9iaW5kLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2NhcGdldC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9jYXBzZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvY2hkaXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvY2hyb290LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb3NlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2Nvbm5lY3QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9kdXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZHVwMy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2Vwb2xsX2N0bC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9ldmVudGZkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2V4ZWN2ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9mYWNjZXNzYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNoZGlyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaG1vZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9mY2htb2RhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9mY2hvd24uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNob3duYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNudGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZmRhdGFzeW5jLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2ZnZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9mbGlzdHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2Zsb2NrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9mc2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZnN0YXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZnN0YXRhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9mc3RhdGZzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2ZzeW5jLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2Z0cnVuY2F0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9mdXRleC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRkZW50cy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRlZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2dldGV1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0Z2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2dldGdyb3Vwcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRpdGltZXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cGdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRwaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cHBpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRyZXNnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cmVzdWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2dldHJsaW1pdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRydXNhZ2UuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0c2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2dldHNvY2tvcHQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0dGlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9nZXR1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2lvcHJpb19nZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvaW9wcmlvX3NldC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9raWxsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2tsb2djdGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvbGdldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2xpbmthdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9saXN0ZW4uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvbGlzdHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2xsaXN0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2xzZWVrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2xzZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9tYWR2aXNlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL21pbmNvcmUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvbWtkaXJhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9ta25vZGF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL21sb2NrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL21sb2NrYWxsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL21tYXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvbW91bnQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvbXByb3RlY3QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvbXJlbWFwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL21zeW5jLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL211bmxvY2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvbXVubG9ja2FsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9tdW5tYXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvbmFub3NsZWVwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9wZXJzb25hbGl0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9waXBlMi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9wcmN0bC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9wcmVhZDY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3BybGltaXQ2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9wd3JpdGU2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9yZWFkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3JlYWRhaGVhZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9yZWFkbGlua2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3JlYWR2LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3JlY3Zmcm9tLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3JlY3Ztc2cuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVuYW1lYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NlbmRmaWxlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NlbmRtc2cuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2VuZHRvLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NldGdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRncm91cHMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0aXRpbWVyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NldG5zLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NldHBnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cHJpb3JpdHkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cmVnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cmVzZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJlc3VpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRyZXVpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRybGltaXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0c2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NldHNvY2tvcHQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NldHVpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zaHV0ZG93bi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zaWdhbHRzdGFjay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zaWduYWxmZDQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc29ja2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NvY2tldHBhaXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc3RhdGZzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3N3YXBvZmYuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc3dhcG9uLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3N5bWxpbmthdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zeW5jLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3N5c2luZm8uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvdGdraWxsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvdGltZXMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvdGtpbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvdHJ1bmNhdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvdW1hc2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvdW1vdW50Mi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy91bmFtZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy91bmxpbmthdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy91bnNoYXJlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3V0aW1lbnNhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy93YWl0NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy93cml0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy93cml0ZXYuUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2FjY2VwdDQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19hY2NlcHQ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE1YmViYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19hY2NlcHQ0LlMKQEAgLTAsMCArMSwxNyBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2FjY2VwdDQpCisgICAgbW92cSAgICAlcmN4LCAlcjEwCisgICAgbW92bCAgICAkX19OUl9hY2NlcHQ0LCAlZWF4CisgICAgc3lzY2FsbAorICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgbW92bCAgICAlZWF4LCAlZWRpCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorMToKKyAgICByZXQKK0VORChfX2FjY2VwdDQpCisuaGlkZGVuIF9fYWNjZXB0NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2FyY2hfcHJjdGwuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19hcmNoX3ByY3RsLlMKaW5kZXggZTg3ODY3OS4uMGE2MDRmNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2FyY2hfcHJjdGwuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fYXJjaF9wcmN0bC5TCkBAIC05LDkgKzksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fYXJjaF9wcmN0bCkKLS5oaWRkZW4gX0NfTEFCRUwoX19hcmNoX3ByY3RsKQorLmhpZGRlbiBfX2FyY2hfcHJjdGwKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19icmsuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19icmsuUwppbmRleCAxOGMyOTk3Li5iNmMwZjJmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fYnJrLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2Jyay5TCkBAIC05LDkgKzksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fYnJrKQotLmhpZGRlbiBfQ19MQUJFTChfX2JyaykKKy5oaWRkZW4gX19icmsKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19jbG9ja19nZXR0aW1lLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fY2xvY2tfZ2V0dGltZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYWNkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fY2xvY2tfZ2V0dGltZS5TCkBAIC0wLDAgKzEsMTYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19jbG9ja19nZXR0aW1lKQorICAgIG1vdmwgICAgJF9fTlJfY2xvY2tfZ2V0dGltZSwgJWVheAorICAgIHN5c2NhbGwKKyAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIG1vdmwgICAgJWVheCwgJWVkaQorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKzE6CisgICAgcmV0CitFTkQoX19jbG9ja19nZXR0aW1lKQorLmhpZGRlbiBfX2Nsb2NrX2dldHRpbWUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19jb25uZWN0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fY29ubmVjdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NTMxYWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fY29ubmVjdC5TCkBAIC0wLDAgKzEsMTYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19jb25uZWN0KQorICAgIG1vdmwgICAgJF9fTlJfY29ubmVjdCwgJWVheAorICAgIHN5c2NhbGwKKyAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIG1vdmwgICAgJWVheCwgJWVkaQorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKzE6CisgICAgcmV0CitFTkQoX19jb25uZWN0KQorLmhpZGRlbiBfX2Nvbm5lY3QKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2Vwb2xsX3B3YWl0LlMKaW5kZXggZWQ5MTNiMC4uYjQ4NmM0YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2Vwb2xsX3B3YWl0LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2Vwb2xsX3B3YWl0LlMKQEAgLTEwLDkgKzEwLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX2Vwb2xsX3B3YWl0KQotLmhpZGRlbiBfQ19MQUJFTChfX2Vwb2xsX3B3YWl0KQorLmhpZGRlbiBfX2Vwb2xsX3B3YWl0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZXhpdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2V4aXQuUwppbmRleCBkYTFmOWY4Li45OWIxMWZjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZXhpdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19leGl0LlMKQEAgLTksOSArOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX19leGl0KQotLmhpZGRlbiBfQ19MQUJFTChfX2V4aXQpCisuaGlkZGVuIF9fZXhpdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2ZhZHZpc2U2NC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2ZhZHZpc2U2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MTBkODgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZmFkdmlzZTY0LlMKQEAgLTAsMCArMSwxNyBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2ZhZHZpc2U2NCkKKyAgICBtb3ZxICAgICVyY3gsICVyMTAKKyAgICBtb3ZsICAgICRfX05SX2ZhZHZpc2U2NCwgJWVheAorICAgIHN5c2NhbGwKKyAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIG1vdmwgICAgJWVheCwgJWVkaQorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKzE6CisgICAgcmV0CitFTkQoX19mYWR2aXNlNjQpCisuaGlkZGVuIF9fZmFkdmlzZTY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZ2V0Y3B1LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZ2V0Y3B1LlMKaW5kZXggNWExODQ5NC4uMzkwM2U5ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldGNwdS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19nZXRjcHUuUwpAQCAtOSw5ICs5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX2dldGNwdSkKLS5oaWRkZW4gX0NfTEFCRUwoX19nZXRjcHUpCisuaGlkZGVuIF9fZ2V0Y3B1CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZ2V0Y3dkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZ2V0Y3dkLlMKaW5kZXggYzllOTk0Mi4uZDM5YzFkNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldGN3ZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19nZXRjd2QuUwpAQCAtOSw5ICs5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX2dldGN3ZCkKLS5oaWRkZW4gX0NfTEFCRUwoX19nZXRjd2QpCisuaGlkZGVuIF9fZ2V0Y3dkCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZ2V0ZGVudHM2NC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldGRlbnRzNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWViOTQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldGRlbnRzNjQuUwpAQCAtMCwwICsxLDE2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fZ2V0ZGVudHM2NCkKKyAgICBtb3ZsICAgICRfX05SX2dldGRlbnRzNjQsICVlYXgKKyAgICBzeXNjYWxsCisgICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBtb3ZsICAgICVlYXgsICVlZGkKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisxOgorICAgIHJldAorRU5EKF9fZ2V0ZGVudHM2NCkKKy5oaWRkZW4gX19nZXRkZW50czY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZ2V0cGlkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZ2V0cGlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0MzE2ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19nZXRwaWQuUwpAQCAtMCwwICsxLDE2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fZ2V0cGlkKQorICAgIG1vdmwgICAgJF9fTlJfZ2V0cGlkLCAlZWF4CisgICAgc3lzY2FsbAorICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgbW92bCAgICAlZWF4LCAlZWRpCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorMToKKyAgICByZXQKK0VORChfX2dldHBpZCkKKy5oaWRkZW4gX19nZXRwaWQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKaW5kZXggZjUyMzBlMS4uN2M2MThhMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKQEAgLTksOSArOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX19nZXRwcmlvcml0eSkKLS5oaWRkZW4gX0NfTEFCRUwoX19nZXRwcmlvcml0eSkKKy5oaWRkZW4gX19nZXRwcmlvcml0eQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldHRpbWVvZmRheS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldHRpbWVvZmRheS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YjliNmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZ2V0dGltZW9mZGF5LlMKQEAgLTAsMCArMSwxNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2dldHRpbWVvZmRheSkKKyAgICBtb3ZsICAgICRfX05SX2dldHRpbWVvZmRheSwgJWVheAorICAgIHN5c2NhbGwKKyAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIG1vdmwgICAgJWVheCwgJWVkaQorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKzE6CisgICAgcmV0CitFTkQoX19nZXR0aW1lb2ZkYXkpCisuaGlkZGVuIF9fZ2V0dGltZW9mZGF5CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19faW9jdGwuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19pb2N0bC5TCmluZGV4IDhmMzBlYjYuLjBlYjM0ZjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19pb2N0bC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19pb2N0bC5TCkBAIC05LDkgKzksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9faW9jdGwpCi0uaGlkZGVuIF9DX0xBQkVMKF9faW9jdGwpCisuaGlkZGVuIF9faW9jdGwKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19vcGVuYXQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19vcGVuYXQuUwppbmRleCBjZDZhMDdmLi4xNGY1M2NhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fb3BlbmF0LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX29wZW5hdC5TCkBAIC0xMCw5ICsxMCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX19vcGVuYXQpCi0uaGlkZGVuIF9DX0xBQkVMKF9fb3BlbmF0KQorLmhpZGRlbiBfX29wZW5hdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3Bwb2xsLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcHBvbGwuUwppbmRleCBkZDYzOWFlLi44MmI5N2RkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcHBvbGwuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcHBvbGwuUwpAQCAtMTAsOSArMTAsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fcHBvbGwpCi0uaGlkZGVuIF9DX0xBQkVMKF9fcHBvbGwpCisuaGlkZGVuIF9fcHBvbGwKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19wc2VsZWN0Ni5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3BzZWxlY3Q2LlMKaW5kZXggYzM3NDgzYS4uYzExZDgxNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3BzZWxlY3Q2LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3BzZWxlY3Q2LlMKQEAgLTEwLDkgKzEwLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX3BzZWxlY3Q2KQotLmhpZGRlbiBfQ19MQUJFTChfX3BzZWxlY3Q2KQorLmhpZGRlbiBfX3BzZWxlY3Q2CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcHRyYWNlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcHRyYWNlLlMKaW5kZXggYmU0MmI5MS4uNzI5ZTAwNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3B0cmFjZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19wdHJhY2UuUwpAQCAtMTAsOSArMTAsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fcHRyYWNlKQotLmhpZGRlbiBfQ19MQUJFTChfX3B0cmFjZSkKKy5oaWRkZW4gX19wdHJhY2UKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19yZWJvb3QuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19yZWJvb3QuUwppbmRleCBmYzhlNThkLi5iNDYyZGM3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcmVib290LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3JlYm9vdC5TCkBAIC0xMCw5ICsxMCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX19yZWJvb3QpCi0uaGlkZGVuIF9DX0xBQkVMKF9fcmVib290KQorLmhpZGRlbiBfX3JlYm9vdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCmluZGV4IDcwNjAyZGYuLjE3YzU5OTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKQEAgLTEwLDkgKzEwLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX3J0X3NpZ2FjdGlvbikKLS5oaWRkZW4gX0NfTEFCRUwoX19ydF9zaWdhY3Rpb24pCisuaGlkZGVuIF9fcnRfc2lnYWN0aW9uCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUwppbmRleCAxY2FmMTMxLi5iNWI4MWJiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMKQEAgLTksOSArOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX19ydF9zaWdwZW5kaW5nKQotLmhpZGRlbiBfQ19MQUJFTChfX3J0X3NpZ3BlbmRpbmcpCisuaGlkZGVuIF9fcnRfc2lncGVuZGluZwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUwppbmRleCBkN2U0NGE3Li5lOGIzZjJhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUwpAQCAtMTAsOSArMTAsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fcnRfc2lncHJvY21hc2spCi0uaGlkZGVuIF9DX0xBQkVMKF9fcnRfc2lncHJvY21hc2spCisuaGlkZGVuIF9fcnRfc2lncHJvY21hc2sKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TCmluZGV4IDg1MWI5M2UuLmY2MzY2YTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ3N1c3BlbmQuUwpAQCAtOSw5ICs5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX3J0X3NpZ3N1c3BlbmQpCi0uaGlkZGVuIF9DX0xBQkVMKF9fcnRfc2lnc3VzcGVuZCkKKy5oaWRkZW4gX19ydF9zaWdzdXNwZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKaW5kZXggNjk2MmQ0YS4uOWJjYjgxMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUwpAQCAtMTAsOSArMTAsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fcnRfc2lndGltZWR3YWl0KQotLmhpZGRlbiBfQ19MQUJFTChfX3J0X3NpZ3RpbWVkd2FpdCkKKy5oaWRkZW4gX19ydF9zaWd0aW1lZHdhaXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKaW5kZXggODYxZjA2Yi4uMGNhNjgxOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKQEAgLTksOSArOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX19zY2hlZF9nZXRhZmZpbml0eSkKLS5oaWRkZW4gX0NfTEFCRUwoX19zY2hlZF9nZXRhZmZpbml0eSkKKy5oaWRkZW4gX19zY2hlZF9nZXRhZmZpbml0eQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TCmluZGV4IGZlNzI2MGYuLjNkYWQ2NjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMKQEAgLTksOSArOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX19zZXRfdGlkX2FkZHJlc3MpCi0uaGlkZGVuIF9DX0xBQkVMKF9fc2V0X3RpZF9hZGRyZXNzKQorLmhpZGRlbiBfX3NldF90aWRfYWRkcmVzcwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3NpZ25hbGZkNC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3NpZ25hbGZkNC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NGJmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fc2lnbmFsZmQ0LlMKQEAgLTAsMCArMSwxNyBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3NpZ25hbGZkNCkKKyAgICBtb3ZxICAgICVyY3gsICVyMTAKKyAgICBtb3ZsICAgICRfX05SX3NpZ25hbGZkNCwgJWVheAorICAgIHN5c2NhbGwKKyAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIG1vdmwgICAgJWVheCwgJWVkaQorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKzE6CisgICAgcmV0CitFTkQoX19zaWduYWxmZDQpCisuaGlkZGVuIF9fc2lnbmFsZmQ0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fc29ja2V0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fc29ja2V0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU2M2QyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19zb2NrZXQuUwpAQCAtMCwwICsxLDE2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fc29ja2V0KQorICAgIG1vdmwgICAgJF9fTlJfc29ja2V0LCAlZWF4CisgICAgc3lzY2FsbAorICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgbW92bCAgICAlZWF4LCAlZWRpCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorMToKKyAgICByZXQKK0VORChfX3NvY2tldCkKKy5oaWRkZW4gX19zb2NrZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19zeXNsb2cuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19zeXNsb2cuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU0MTE0OS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fc3lzbG9nLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKF9fc3lzbG9nKQotICAgIG1vdmwgICAgJF9fTlJfc3lzbG9nLCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4Ci0xOgotICAgIHJldAotRU5EKF9fc3lzbG9nKQotLmhpZGRlbiBfQ19MQUJFTChfX3N5c2xvZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUwppbmRleCAxYzVjNjhlLi5jYjk1NWE0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCkBAIC05LDkgKzksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fdGltZXJfY3JlYXRlKQotLmhpZGRlbiBfQ19MQUJFTChfX3RpbWVyX2NyZWF0ZSkKKy5oaWRkZW4gX190aW1lcl9jcmVhdGUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUwppbmRleCBjODI2NzU3Li43YWJjN2Q4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCkBAIC05LDkgKzksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fdGltZXJfZGVsZXRlKQotLmhpZGRlbiBfQ19MQUJFTChfX3RpbWVyX2RlbGV0ZSkKKy5oaWRkZW4gX190aW1lcl9kZWxldGUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TCmluZGV4IDc3MmIwNWUuLmYyYTBlMjQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwpAQCAtOSw5ICs5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX3RpbWVyX2dldG92ZXJydW4pCi0uaGlkZGVuIF9DX0xBQkVMKF9fdGltZXJfZ2V0b3ZlcnJ1bikKKy5oaWRkZW4gX190aW1lcl9nZXRvdmVycnVuCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUwppbmRleCAxODEwNjliLi42MmMyYjQ3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKQEAgLTksOSArOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX190aW1lcl9nZXR0aW1lKQotLmhpZGRlbiBfQ19MQUJFTChfX3RpbWVyX2dldHRpbWUpCisuaGlkZGVuIF9fdGltZXJfZ2V0dGltZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKaW5kZXggMTFmZTA0ZS4uMjI1ZmE4ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCkBAIC0xMCw5ICsxMCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX190aW1lcl9zZXR0aW1lKQotLmhpZGRlbiBfQ19MQUJFTChfX3RpbWVyX3NldHRpbWUpCisuaGlkZGVuIF9fdGltZXJfc2V0dGltZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3dhaXRpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3dhaXRpZC5TCmluZGV4IDQzMTdkNzguLmZmOGEzYzUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX193YWl0aWQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fd2FpdGlkLlMKQEAgLTEwLDkgKzEwLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX3dhaXRpZCkKLS5oaWRkZW4gX0NfTEFCRUwoX193YWl0aWQpCisuaGlkZGVuIF9fd2FpdGlkCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19leGl0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19leGl0LlMKaW5kZXggZjQwY2ZlMy4uYzc5MDkxZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fZXhpdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX2V4aXQuUwpAQCAtOSw4ICs5LDEwIEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX2V4aXQpCisKKyAgICAuZ2xvYmwgX0V4aXQKKyAgICAuZXF1IF9FeGl0LCBfZXhpdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9hY2NlcHQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvYWNjZXB0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4OGZiODIuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9hY2NlcHQuUworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoYWNjZXB0KQotICAgIG1vdmwgICAgJF9fTlJfYWNjZXB0LCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4Ci0xOgotICAgIHJldAotRU5EKGFjY2VwdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvYWNjdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9hY2N0LlMKaW5kZXggNTlhZjE3ZC4uYTczOTcwNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9hY2N0LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9hY2N0LlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoYWNjdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvYmluZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9iaW5kLlMKaW5kZXggMjBkZmEyZC4uZTViYzI2MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9iaW5kLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9iaW5kLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoYmluZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2FwZ2V0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2NhcGdldC5TCmluZGV4IDljZjczZmIuLjljZTE1ODMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2FwZ2V0LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jYXBnZXQuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChjYXBnZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2NhcHNldC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jYXBzZXQuUwppbmRleCBmNmNmMmViLi4yNzc2NzU2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2NhcHNldC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2Fwc2V0LlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoY2Fwc2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jaGRpci5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jaGRpci5TCmluZGV4IGEwNGYzYWEuLjI2OTkwNWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2hkaXIuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2NoZGlyLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoY2hkaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nocm9vdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jaHJvb3QuUwppbmRleCA0OTEwODZkLi43MTNiMWIzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nocm9vdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2hyb290LlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoY2hyb290KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9ja19nZXRyZXMuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKaW5kZXggZDFkNDkxZS4uZjY1ZDEyNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9ja19nZXRyZXMuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGNsb2NrX2dldHJlcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YWU2MTYuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGNsb2NrX2dldHRpbWUpCi0gICAgbW92bCAgICAkX19OUl9jbG9ja19nZXR0aW1lLCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4Ci0xOgotICAgIHJldAotRU5EKGNsb2NrX2dldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwppbmRleCAzODMzMTEzLi4yYTc5YmRkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChjbG9ja19uYW5vc2xlZXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCmluZGV4IDE1YjI3YWEuLjI2MDcwYTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGNsb2NrX3NldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb3NlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb3NlLlMKaW5kZXggMzYxZDgyZi4uOGE3YWRhMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9zZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvc2UuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChjbG9zZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY29ubmVjdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jb25uZWN0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzY2RiYWUuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jb25uZWN0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGNvbm5lY3QpCi0gICAgbW92bCAgICAkX19OUl9jb25uZWN0LCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4Ci0xOgotICAgIHJldAotRU5EKGNvbm5lY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCmluZGV4IDMzZjIzNTQuLjYzZjE3YWQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGRlbGV0ZV9tb2R1bGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2R1cC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9kdXAuUwppbmRleCBkZmMwZGVmLi41MDE2Zjc3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2R1cC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZHVwLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZHVwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9kdXAzLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2R1cDMuUwppbmRleCBkY2I0MTU1Li45YWJkMTY4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2R1cDMuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2R1cDMuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChkdXAzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUwppbmRleCBmYTNjNmQ3Li5kMWU0YmZjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChlcG9sbF9jcmVhdGUxKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9lcG9sbF9jdGwuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZXBvbGxfY3RsLlMKaW5kZXggNzJkZjk3Zi4uZjQyOWI5NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9lcG9sbF9jdGwuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Vwb2xsX2N0bC5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZXBvbGxfY3RsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9ldmVudGZkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2V2ZW50ZmQuUwppbmRleCA5OWY1ODVjLi5kY2M1MTA1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2V2ZW50ZmQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2V2ZW50ZmQuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChldmVudGZkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9leGVjdmUuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZXhlY3ZlLlMKaW5kZXggZWE4OWQ3ZC4uOTQ3YmFhNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9leGVjdmUuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2V4ZWN2ZS5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGV4ZWN2ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmFjY2Vzc2F0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZhY2Nlc3NhdC5TCmluZGV4IDIzOGE0ZTEuLjA1YTZlNzggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmFjY2Vzc2F0LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mYWNjZXNzYXQuUwpAQCAtMTAsOCArMTAsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGZhY2Nlc3NhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmFsbG9jYXRlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZhbGxvY2F0ZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDdmN2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZhbGxvY2F0ZS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZmFsbG9jYXRlKQorICAgIG1vdnEgICAgJXJjeCwgJXIxMAorICAgIG1vdmwgICAgJF9fTlJfZmFsbG9jYXRlLCAlZWF4CisgICAgc3lzY2FsbAorICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgbW92bCAgICAlZWF4LCAlZWRpCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorMToKKyAgICByZXQKK0VORChmYWxsb2NhdGUpCisKKyAgICAuZ2xvYmwgZmFsbG9jYXRlNjQKKyAgICAuZXF1IGZhbGxvY2F0ZTY0LCBmYWxsb2NhdGUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNoZGlyLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaGRpci5TCmluZGV4IGRhMTRlZGQuLmQwMDVjMTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNoZGlyLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mY2hkaXIuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChmY2hkaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaG1vZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mY2htb2QuUwppbmRleCBhNmQxNWZjLi5iMzViZDIxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaG1vZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNobW9kLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZmNobW9kKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mY2htb2RhdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mY2htb2RhdC5TCmluZGV4IGRhZjcxYWIuLjJkNzhkOGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNobW9kYXQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaG1vZGF0LlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChmY2htb2RhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNob3duLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaG93bi5TCmluZGV4IDhjNjhhMTUuLmQ1YmRjNzEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNob3duLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mY2hvd24uUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChmY2hvd24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaG93bmF0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaG93bmF0LlMKaW5kZXggZTUyNjVkZC4uZmYwNWU5ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mY2hvd25hdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNob3duYXQuUwpAQCAtMTAsOCArMTAsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGZjaG93bmF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mY250bC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mY250bC5TCmluZGV4IGM1NjIzODUuLmYyODE5NWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNudGwuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZjbnRsLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZmNudGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZkYXRhc3luYy5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mZGF0YXN5bmMuUwppbmRleCAzZjllZTcyLi4yNzIzOWI5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZkYXRhc3luYy5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmRhdGFzeW5jLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZmRhdGFzeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mZ2V0eGF0dHIuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmdldHhhdHRyLlMKaW5kZXggNzdmMDk1Yi4uNzc2MjQ3NCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mZ2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZnZXR4YXR0ci5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZmdldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mbGlzdHhhdHRyLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZsaXN0eGF0dHIuUwppbmRleCBjZDM5Mjk4Li5hYTAyZGIxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZsaXN0eGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZsaXN0eGF0dHIuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChmbGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mbG9jay5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mbG9jay5TCmluZGV4IGFmMmRiZWYuLjFiYzY2NzggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmxvY2suUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Zsb2NrLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZmxvY2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUwppbmRleCA0Mzg3NTYzLi41MTcwOTRjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZnJlbW92ZXhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc2V0eGF0dHIuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnNldHhhdHRyLlMKaW5kZXggNjEwODkwYy4uOTc4MjJjNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzZXR4YXR0ci5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZnNldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc3RhdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc3RhdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWY0ODdkLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnN0YXQuUworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZnN0YXQpCi0gICAgbW92bCAgICAkX19OUl9mc3RhdCwgJWVheAotICAgIHN5c2NhbGwKLSAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAotMToKLSAgICByZXQKLUVORChmc3RhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnN0YXQ2NC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc3RhdDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1NzY2OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnN0YXQ2NC5TCkBAIC0wLDAgKzEsMTggQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZnN0YXQ2NCkKKyAgICBtb3ZsICAgICRfX05SX2ZzdGF0LCAlZWF4CisgICAgc3lzY2FsbAorICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgbW92bCAgICAlZWF4LCAlZWRpCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorMToKKyAgICByZXQKK0VORChmc3RhdDY0KQorCisgICAgLmdsb2JsIGZzdGF0CisgICAgLmVxdSBmc3RhdCwgZnN0YXQ2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc3RhdGF0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzdGF0YXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVkNzliZC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzdGF0YXQuUworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZnN0YXRhdCkKLSAgICBtb3ZxICAgICVyY3gsICVyMTAKLSAgICBtb3ZsICAgICRfX05SX25ld2ZzdGF0YXQsICVlYXgKLSAgICBzeXNjYWxsCi0gICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKLTE6Ci0gICAgcmV0Ci1FTkQoZnN0YXRhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnN0YXRhdDY0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzdGF0YXQ2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3Nzg1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzdGF0YXQ2NC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZnN0YXRhdDY0KQorICAgIG1vdnEgICAgJXJjeCwgJXIxMAorICAgIG1vdmwgICAgJF9fTlJfbmV3ZnN0YXRhdCwgJWVheAorICAgIHN5c2NhbGwKKyAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIG1vdmwgICAgJWVheCwgJWVkaQorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKzE6CisgICAgcmV0CitFTkQoZnN0YXRhdDY0KQorCisgICAgLmdsb2JsIGZzdGF0YXQKKyAgICAuZXF1IGZzdGF0YXQsIGZzdGF0YXQ2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc3RhdGZzLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzdGF0ZnMuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlhOTBmYi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzdGF0ZnMuUworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZnN0YXRmcykKLSAgICBtb3ZsICAgICRfX05SX2ZzdGF0ZnMsICVlYXgKLSAgICBzeXNjYWxsCi0gICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKLTE6Ci0gICAgcmV0Ci1FTkQoZnN0YXRmcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnN0YXRmczY0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzdGF0ZnM2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MjczNTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzdGF0ZnM2NC5TCkBAIC0wLDAgKzEsMTggQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZnN0YXRmczY0KQorICAgIG1vdmwgICAgJF9fTlJfZnN0YXRmcywgJWVheAorICAgIHN5c2NhbGwKKyAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIG1vdmwgICAgJWVheCwgJWVkaQorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKzE6CisgICAgcmV0CitFTkQoZnN0YXRmczY0KQorCisgICAgLmdsb2JsIGZzdGF0ZnMKKyAgICAuZXF1IGZzdGF0ZnMsIGZzdGF0ZnM2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc3luYy5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc3luYy5TCmluZGV4IDAzOTI2MjAuLmU3ZWM2ZGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnN5bmMuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzeW5jLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZnN5bmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Z0cnVuY2F0ZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mdHJ1bmNhdGUuUwppbmRleCA4MGNiZTc5Li4wMzY1MzY4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Z0cnVuY2F0ZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnRydW5jYXRlLlMKQEAgLTksMTEgKzksMTAgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChmdHJ1bmNhdGUpCiAKLSAgICAuZ2xvYmwgX0NfTEFCRUwoZnRydW5jYXRlNjQpCi0gICAgLmVxdSBfQ19MQUJFTChmdHJ1bmNhdGU2NCksIF9DX0xBQkVMKGZ0cnVuY2F0ZSkKKyAgICAuZ2xvYmwgZnRydW5jYXRlNjQKKyAgICAuZXF1IGZ0cnVuY2F0ZTY0LCBmdHJ1bmNhdGUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnV0ZXguUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnV0ZXguUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJmNjRiZC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Z1dGV4LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGZ1dGV4KQotICAgIG1vdnEgICAgJXJjeCwgJXIxMAotICAgIG1vdmwgICAgJF9fTlJfZnV0ZXgsICVlYXgKLSAgICBzeXNjYWxsCi0gICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKLTE6Ci0gICAgcmV0Ci1FTkQoZnV0ZXgpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGRlbnRzLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGRlbnRzLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0N2MyNmIuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRkZW50cy5TCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShnZXRkZW50cykKLSAgICBtb3ZsICAgICRfX05SX2dldGRlbnRzNjQsICVlYXgKLSAgICBzeXNjYWxsCi0gICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKLTE6Ci0gICAgcmV0Ci1FTkQoZ2V0ZGVudHMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGVnaWQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0ZWdpZC5TCmluZGV4IGMxYjhmYWUuLjg0YmEyNDAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0ZWdpZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0ZWdpZC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGdldGVnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGV1aWQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0ZXVpZC5TCmluZGV4IGYyZjEwMzUuLjE4YTk5MWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0ZXVpZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0ZXVpZC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGdldGV1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGdpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRnaWQuUwppbmRleCBlOWIzOGM3Li41ZTRiMGVmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGdpZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0Z2lkLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZ2V0Z2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRncm91cHMuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKaW5kZXggYjEyODM2ZS4uYjVkZDgxYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRncm91cHMuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGdyb3Vwcy5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGdldGdyb3VwcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0aXRpbWVyLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGl0aW1lci5TCmluZGV4IDc5NDg0ZDEuLmM0YmIxMjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0aXRpbWVyLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRpdGltZXIuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChnZXRpdGltZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHBlZXJuYW1lLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKaW5kZXggYTI3NmNhYy4uMGIyMTJiZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRwZWVybmFtZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChnZXRwZWVybmFtZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cGdpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRwZ2lkLlMKaW5kZXggYzJmNWMwOS4uZDFiMGU4YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRwZ2lkLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRwZ2lkLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZ2V0cGdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cGlkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHBpZC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWI4ZGY0Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cGlkLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGdldHBpZCkKLSAgICBtb3ZsICAgICRfX05SX2dldHBpZCwgJWVheAotICAgIHN5c2NhbGwKLSAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAotMToKLSAgICByZXQKLUVORChnZXRwaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHBwaWQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cHBpZC5TCmluZGV4IGNlM2RiZGEuLmUxY2ZlZTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cHBpZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cHBpZC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGdldHBwaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHJlc2dpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRyZXNnaWQuUwppbmRleCAwZWRjMjBhLi4wYjdlYTdhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHJlc2dpZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZ2V0cmVzZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRyZXN1aWQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cmVzdWlkLlMKaW5kZXggYjkwMGM5OS4uMGQ3YTA1NCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRyZXN1aWQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHJlc3VpZC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGdldHJlc3VpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cmxpbWl0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHJsaW1pdC5TCmluZGV4IDBiMzUzNmMuLjJkMjcyYTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cmxpbWl0LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRybGltaXQuUwpAQCAtOSwxMSArOSwxMCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGdldHJsaW1pdCkKIAotICAgIC5nbG9ibCBfQ19MQUJFTChnZXRybGltaXQ2NCkKLSAgICAuZXF1IF9DX0xBQkVMKGdldHJsaW1pdDY0KSwgX0NfTEFCRUwoZ2V0cmxpbWl0KQorICAgIC5nbG9ibCBnZXRybGltaXQ2NAorICAgIC5lcXUgZ2V0cmxpbWl0NjQsIGdldHJsaW1pdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRydXNhZ2UuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cnVzYWdlLlMKaW5kZXggMjEwZDU4Ni4uZWVmN2ZiOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRydXNhZ2UuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHJ1c2FnZS5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGdldHJ1c2FnZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0c2lkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHNpZC5TCmluZGV4IGRlM2UzYzAuLjAyMmY5NTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0c2lkLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRzaWQuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChnZXRzaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHNvY2tuYW1lLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKaW5kZXggY2NhYmY3MS4uMzZmZGNmNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0c29ja25hbWUuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChnZXRzb2NrbmFtZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0c29ja29wdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKaW5kZXggYzRmNDU2ZS4uYzFlMTFlNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChnZXRzb2Nrb3B0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXR0aWQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0dGlkLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZWNjMTYuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXR0aWQuUworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZ2V0dGlkKQotICAgIG1vdmwgICAgJF9fTlJfZ2V0dGlkLCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4Ci0xOgotICAgIHJldAotRU5EKGdldHRpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjFiYjZlLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGdldHRpbWVvZmRheSkKLSAgICBtb3ZsICAgICRfX05SX2dldHRpbWVvZmRheSwgJWVheAotICAgIHN5c2NhbGwKLSAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAotMToKLSAgICByZXQKLUVORChnZXR0aW1lb2ZkYXkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHVpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXR1aWQuUwppbmRleCA0Y2I5ZWZkLi45M2NkMGY4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHVpZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0dWlkLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZ2V0dWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXR4YXR0ci5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXR4YXR0ci5TCmluZGV4IDZiZGI3NjIuLjAxMzc4YjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHhhdHRyLlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChnZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUwppbmRleCBlYjA0OGMwLi5jMDA1ZGU0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9pbml0X21vZHVsZS5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGluaXRfbW9kdWxlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCmluZGV4IDNlMTI0ZTcuLmVkZjI5MzAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoaW5vdGlmeV9hZGRfd2F0Y2gpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCmluZGV4IDhkODIxMTUuLmIxNTgwMTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGlub3RpZnlfaW5pdDEpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCmluZGV4IGVjZTE1MTAuLmYyZmMxMGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGlub3RpZnlfcm1fd2F0Y2gpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2lvcHJpb19nZXQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvaW9wcmlvX2dldC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGMxNDAyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvaW9wcmlvX2dldC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShpb3ByaW9fZ2V0KQotICAgIG1vdmwgICAgJF9fTlJfaW9wcmlvX2dldCwgJWVheAotICAgIHN5c2NhbGwKLSAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAotMToKLSAgICByZXQKLUVORChpb3ByaW9fZ2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9pb3ByaW9fc2V0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2lvcHJpb19zZXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNkYzhiMy4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2lvcHJpb19zZXQuUworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoaW9wcmlvX3NldCkKLSAgICBtb3ZsICAgICRfX05SX2lvcHJpb19zZXQsICVlYXgKLSAgICBzeXNjYWxsCi0gICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKLTE6Ci0gICAgcmV0Ci1FTkQoaW9wcmlvX3NldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMva2lsbC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9raWxsLlMKaW5kZXggNTFjYTM1Yy4uZmU5M2YzNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9raWxsLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9raWxsLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoa2lsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMva2xvZ2N0bC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9rbG9nY3RsLlMKaW5kZXggOGMwY2NjZS4uZmIyYWNhMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9rbG9nY3RsLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9rbG9nY3RsLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoa2xvZ2N0bCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbGdldHhhdHRyLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xnZXR4YXR0ci5TCmluZGV4IDZmMTk1ZWEuLjM2MjAyYTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbGdldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9sZ2V0eGF0dHIuUwpAQCAtMTAsOCArMTAsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGxnZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbGlua2F0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xpbmthdC5TCmluZGV4IGI5YTJiMTQuLmQxOTVlMTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbGlua2F0LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9saW5rYXQuUwpAQCAtMTAsOCArMTAsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGxpbmthdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbGlzdGVuLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xpc3Rlbi5TCmluZGV4IDEwNGI1MTQuLjc1NmI2MjkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbGlzdGVuLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9saXN0ZW4uUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChsaXN0ZW4pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xpc3R4YXR0ci5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9saXN0eGF0dHIuUwppbmRleCBmZTU3ZTM5Li5kMGIyMTEyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xpc3R4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbGlzdHhhdHRyLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQobGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9sbGlzdHhhdHRyLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xsaXN0eGF0dHIuUwppbmRleCBhYTBhNTRkLi40OWZiOTY5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xsaXN0eGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xsaXN0eGF0dHIuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChsbGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9scmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKaW5kZXggNGI1ZWU2NS4uMWUxYmMzMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9scmVtb3ZleGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGxyZW1vdmV4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbHNlZWsuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbHNlZWsuUwppbmRleCBhMDZiM2VjLi4xNTNiOTM1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xzZWVrLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9sc2Vlay5TCkBAIC05LDExICs5LDEwIEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQobHNlZWspCiAKLSAgICAuZ2xvYmwgX0NfTEFCRUwobHNlZWs2NCkKLSAgICAuZXF1IF9DX0xBQkVMKGxzZWVrNjQpLCBfQ19MQUJFTChsc2VlaykKKyAgICAuZ2xvYmwgbHNlZWs2NAorICAgIC5lcXUgbHNlZWs2NCwgbHNlZWsKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbHNldHhhdHRyLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xzZXR4YXR0ci5TCmluZGV4IDY3ZDkzZWIuLjk2NWVlMDMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbHNldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9sc2V0eGF0dHIuUwpAQCAtMTAsOCArMTAsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGxzZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWFkdmlzZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tYWR2aXNlLlMKaW5kZXggZTRlZjkyMy4uNzVkNDdmNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tYWR2aXNlLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tYWR2aXNlLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQobWFkdmlzZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWluY29yZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9taW5jb3JlLlMKaW5kZXggZDkyNzU1Yy4uMmQ4YTI4YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9taW5jb3JlLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9taW5jb3JlLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQobWluY29yZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWtkaXJhdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9ta2RpcmF0LlMKaW5kZXggOWU1ZGJkNi4uOGE3NjAxMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9ta2RpcmF0LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9ta2RpcmF0LlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQobWtkaXJhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWtub2RhdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9ta25vZGF0LlMKaW5kZXggNDlhYWMzNS4uYTg4NTlkNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9ta25vZGF0LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9ta25vZGF0LlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChta25vZGF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tbG9jay5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tbG9jay5TCmluZGV4IGYwYjBjNmUuLmQzNGIzYWUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWxvY2suUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21sb2NrLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQobWxvY2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21sb2NrYWxsLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21sb2NrYWxsLlMKaW5kZXggNDIwY2IwMy4uMzFjY2FhMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tbG9ja2FsbC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWxvY2thbGwuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChtbG9ja2FsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbW1hcC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tbWFwLlMKaW5kZXggZDZmOTY4Ny4uOGFhNDc4MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tbWFwLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tbWFwLlMKQEAgLTEwLDExICsxMCwxMCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKG1tYXApCiAKLSAgICAuZ2xvYmwgX0NfTEFCRUwobW1hcDY0KQotICAgIC5lcXUgX0NfTEFCRUwobW1hcDY0KSwgX0NfTEFCRUwobW1hcCkKKyAgICAuZ2xvYmwgbW1hcDY0CisgICAgLmVxdSBtbWFwNjQsIG1tYXAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbW91bnQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbW91bnQuUwppbmRleCBkZjQ4OGMzLi5kY2JkNDczIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21vdW50LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tb3VudC5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQobW91bnQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21wcm90ZWN0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21wcm90ZWN0LlMKaW5kZXggOWVmNjFiNS4uMmFkNGIyNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tcHJvdGVjdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbXByb3RlY3QuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChtcHJvdGVjdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbXJlbWFwLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21yZW1hcC5TCmluZGV4IDU1ZTI0YmYuLmE2MDQyY2IgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbXJlbWFwLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tcmVtYXAuUwpAQCAtMTAsOCArMTAsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKG1yZW1hcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbXN5bmMuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbXN5bmMuUwppbmRleCA0MDUyNGUzLi4wOTlkYmJmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21zeW5jLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tc3luYy5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKG1zeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tdW5sb2NrLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL211bmxvY2suUwppbmRleCBiNTA4MjU5Li5iYjU5NDBjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL211bmxvY2suUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL211bmxvY2suUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChtdW5sb2NrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tdW5sb2NrYWxsLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL211bmxvY2thbGwuUwppbmRleCA0MzE0ZTJiLi5mOTU3OWRmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL211bmxvY2thbGwuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL211bmxvY2thbGwuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChtdW5sb2NrYWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tdW5tYXAuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbXVubWFwLlMKaW5kZXggMTVkNTAzYy4uZDFjNTgwZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tdW5tYXAuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL211bm1hcC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKG11bm1hcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbmFub3NsZWVwLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL25hbm9zbGVlcC5TCmluZGV4IGQzMDNmY2IuLmIxOWY3ZjUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbmFub3NsZWVwLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9uYW5vc2xlZXAuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChuYW5vc2xlZXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlmYzcxZS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShwZXJmX2V2ZW50X29wZW4pCi0gICAgbW92cSAgICAlcmN4LCAlcjEwCi0gICAgbW92bCAgICAkX19OUl9wZXJmX2V2ZW50X29wZW4sICVlYXgKLSAgICBzeXNjYWxsCi0gICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKLTE6Ci0gICAgcmV0Ci1FTkQocGVyZl9ldmVudF9vcGVuKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9wZXJzb25hbGl0eS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9wZXJzb25hbGl0eS5TCmluZGV4IDAzNzk3MDcuLjY5MzdlNGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcGVyc29uYWxpdHkuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQocGVyc29uYWxpdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3BpcGUyLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3BpcGUyLlMKaW5kZXggZDBhNjc2OC4uZDQ4OGM4NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9waXBlMi5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcGlwZTIuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChwaXBlMikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcHJjdGwuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcHJjdGwuUwppbmRleCBmN2Y1NjFiLi40ZjNkMmFlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3ByY3RsLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9wcmN0bC5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQocHJjdGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3ByZWFkNjQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcHJlYWQ2NC5TCmluZGV4IDU4YjMxNzYuLjNhYTU2ZTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcHJlYWQ2NC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcHJlYWQ2NC5TCkBAIC0xMCwxMSArMTAsMTAgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChwcmVhZDY0KQogCi0gICAgLmdsb2JsIF9DX0xBQkVMKHByZWFkKQotICAgIC5lcXUgX0NfTEFCRUwocHJlYWQpLCBfQ19MQUJFTChwcmVhZDY0KQorICAgIC5nbG9ibCBwcmVhZAorICAgIC5lcXUgcHJlYWQsIHByZWFkNjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcHJsaW1pdDY0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3BybGltaXQ2NC5TCmluZGV4IGI0NTFlOGYuLjYzZWM0OTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcHJsaW1pdDY0LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9wcmxpbWl0NjQuUwpAQCAtMTAsMTEgKzEwLDEwIEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQocHJsaW1pdDY0KQogCi0gICAgLmdsb2JsIF9DX0xBQkVMKHBybGltaXQpCi0gICAgLmVxdSBfQ19MQUJFTChwcmxpbWl0KSwgX0NfTEFCRUwocHJsaW1pdDY0KQorICAgIC5nbG9ibCBwcmxpbWl0CisgICAgLmVxdSBwcmxpbWl0LCBwcmxpbWl0NjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcHdyaXRlNjQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcHdyaXRlNjQuUwppbmRleCA5NjIxNWNlLi4yNzc5ZmI0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3B3cml0ZTY0LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9wd3JpdGU2NC5TCkBAIC0xMCwxMSArMTAsMTAgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChwd3JpdGU2NCkKIAotICAgIC5nbG9ibCBfQ19MQUJFTChwd3JpdGUpCi0gICAgLmVxdSBfQ19MQUJFTChwd3JpdGUpLCBfQ19MQUJFTChwd3JpdGU2NCkKKyAgICAuZ2xvYmwgcHdyaXRlCisgICAgLmVxdSBwd3JpdGUsIHB3cml0ZTY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlYWQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVhZC5TCmluZGV4IDBmZjZjMmEuLmRmNzBlN2YgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVhZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVhZC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHJlYWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlYWRhaGVhZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWFkYWhlYWQuUwppbmRleCBhMzJjMWMyLi4zOGNiMWMwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlYWRhaGVhZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVhZGFoZWFkLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQocmVhZGFoZWFkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWFkbGlua2F0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlYWRsaW5rYXQuUwppbmRleCBhMWMzYWRlLi45ZmQ2NGU1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlYWRsaW5rYXQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlYWRsaW5rYXQuUwpAQCAtMTAsOCArMTAsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHJlYWRsaW5rYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlYWR2LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlYWR2LlMKaW5kZXggYTZmNTFjZi4uMjUxMGM1NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWFkdi5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVhZHYuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChyZWFkdikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVjdmZyb20uUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVjdmZyb20uUwppbmRleCBmZWIzYTYzLi42YzA5MDc4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlY3Zmcm9tLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWN2ZnJvbS5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQocmVjdmZyb20pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlY3ZtbXNnLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlY3ZtbXNnLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhkYTY5MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVjdm1tc2cuUwpAQCAtMCwwICsxLDE2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHJlY3ZtbXNnKQorICAgIG1vdnEgICAgJXJjeCwgJXIxMAorICAgIG1vdmwgICAgJF9fTlJfcmVjdm1tc2csICVlYXgKKyAgICBzeXNjYWxsCisgICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBtb3ZsICAgICVlYXgsICVlZGkKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisxOgorICAgIHJldAorRU5EKHJlY3ZtbXNnKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWN2bXNnLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlY3Ztc2cuUwppbmRleCA2NzE2YWNhLi45NDVmMTdiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlY3Ztc2cuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlY3Ztc2cuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChyZWN2bXNnKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZW1vdmV4YXR0ci5TCmluZGV4IDg5YjJjNGYuLjliNDc2MTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQocmVtb3ZleGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlbmFtZWF0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlbmFtZWF0LlMKaW5kZXggOWQ2OWMzZS4uM2E5NGE3NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZW5hbWVhdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVuYW1lYXQuUwpAQCAtMTAsOCArMTAsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHJlbmFtZWF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUwppbmRleCA0MWIyZDFkLi4xYTBkYTIzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzY2hlZF9nZXRfcHJpb3JpdHlfbWF4KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUwppbmRleCA2MWI3NDZmLi4zNzg1ODc3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzY2hlZF9nZXRfcHJpb3JpdHlfbWluKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCmluZGV4IDIzZDM0YjIuLjQwOWI1MDEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2NoZWRfZ2V0cGFyYW0pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUwppbmRleCAxMmYwYmEwLi41MjAwNTA0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2NoZWRfZ2V0c2NoZWR1bGVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKaW5kZXggMGZmODUyZi4uMjc2ZmViMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNjaGVkX3JyX2dldF9pbnRlcnZhbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUwppbmRleCAyNTBlY2I2Li4xZmI4N2U1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNjaGVkX3NldGFmZmluaXR5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCmluZGV4IDMwYTc5NjMuLjkxY2E4M2IgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2NoZWRfc2V0cGFyYW0pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUwppbmRleCAxMzdmOWYwLi43ZmE0OTlhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2NoZWRfc2V0c2NoZWR1bGVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF95aWVsZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF95aWVsZC5TCmluZGV4IDA5N2M3ZGMuLjhlYjEwZjYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfeWllbGQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2NoZWRfeWllbGQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NlbmRmaWxlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NlbmRmaWxlLlMKaW5kZXggYjU2ZjQ4Ny4uMTE3YjBhYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZW5kZmlsZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2VuZGZpbGUuUwpAQCAtMTAsMTEgKzEwLDEwIEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2VuZGZpbGUpCiAKLSAgICAuZ2xvYmwgX0NfTEFCRUwoc2VuZGZpbGU2NCkKLSAgICAuZXF1IF9DX0xBQkVMKHNlbmRmaWxlNjQpLCBfQ19MQUJFTChzZW5kZmlsZSkKKyAgICAuZ2xvYmwgc2VuZGZpbGU2NAorICAgIC5lcXUgc2VuZGZpbGU2NCwgc2VuZGZpbGUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2VuZG1tc2cuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2VuZG1tc2cuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjRhNzhkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZW5kbW1zZy5TCkBAIC0wLDAgKzEsMTYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2VuZG1tc2cpCisgICAgbW92cSAgICAlcmN4LCAlcjEwCisgICAgbW92bCAgICAkX19OUl9zZW5kbW1zZywgJWVheAorICAgIHN5c2NhbGwKKyAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIG1vdmwgICAgJWVheCwgJWVkaQorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKzE6CisgICAgcmV0CitFTkQoc2VuZG1tc2cpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NlbmRtc2cuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2VuZG1zZy5TCmluZGV4IGU1NmU1OGMuLjg0NTY2YjUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2VuZG1zZy5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2VuZG1zZy5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNlbmRtc2cpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NlbmR0by5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZW5kdG8uUwppbmRleCBmMGMxNGIwLi5iZTNiYWNlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NlbmR0by5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2VuZHRvLlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzZW5kdG8pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldGZzZ2lkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldGZzZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJhMzZiMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0ZnNnaWQuUwpAQCAtMCwwICsxLDE1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldGZzZ2lkKQorICAgIG1vdmwgICAgJF9fTlJfc2V0ZnNnaWQsICVlYXgKKyAgICBzeXNjYWxsCisgICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBtb3ZsICAgICVlYXgsICVlZGkKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisxOgorICAgIHJldAorRU5EKHNldGZzZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRmc3VpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRmc3VpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZDBjOTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldGZzdWlkLlMKQEAgLTAsMCArMSwxNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRmc3VpZCkKKyAgICBtb3ZsICAgICRfX05SX3NldGZzdWlkLCAlZWF4CisgICAgc3lzY2FsbAorICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgbW92bCAgICAlZWF4LCAlZWRpCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorMToKKyAgICByZXQKK0VORChzZXRmc3VpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0Z2lkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldGdpZC5TCmluZGV4IGFiYWYzNDMuLjY1MGY4ZTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0Z2lkLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRnaWQuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzZXRnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldGdyb3Vwcy5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRncm91cHMuUwppbmRleCA0YmJjN2VjLi5jNzk4YzE0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldGdyb3Vwcy5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0Z3JvdXBzLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2V0Z3JvdXBzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRpdGltZXIuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0aXRpbWVyLlMKaW5kZXggZGE4MWQwYi4uYzVmYWJiMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRpdGltZXIuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldGl0aW1lci5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNldGl0aW1lcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0bnMuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0bnMuUwppbmRleCBiYWIxNDdiLi5jMmFlOTdkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldG5zLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRucy5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNldG5zKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRwZ2lkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHBnaWQuUwppbmRleCA2ZGZlZmEzLi40ZDQzMTNjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHBnaWQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHBnaWQuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzZXRwZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRwcmlvcml0eS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRwcmlvcml0eS5TCmluZGV4IDg5NzcwZTkuLjNjNTA4YzMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cHJpb3JpdHkuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHByaW9yaXR5LlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2V0cHJpb3JpdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJlZ2lkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJlZ2lkLlMKaW5kZXggOWVhYTdlOS4uMTgxYThiOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRyZWdpZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cmVnaWQuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzZXRyZWdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cmVzZ2lkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJlc2dpZC5TCmluZGV4IDk1MjA2YjMuLmZlNDQ3ODYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cmVzZ2lkLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRyZXNnaWQuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzZXRyZXNnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJlc3VpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRyZXN1aWQuUwppbmRleCBjNDJkZGE5Li41OGNkMmNhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJlc3VpZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cmVzdWlkLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2V0cmVzdWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRyZXVpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRyZXVpZC5TCmluZGV4IDkzNWY3NTEuLmUyNTY1OGIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cmV1aWQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJldWlkLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2V0cmV1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJsaW1pdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRybGltaXQuUwppbmRleCBlNDQ1ZWMwLi5lZjAzMDY4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJsaW1pdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cmxpbWl0LlMKQEAgLTksMTEgKzksMTAgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzZXRybGltaXQpCiAKLSAgICAuZ2xvYmwgX0NfTEFCRUwoc2V0cmxpbWl0NjQpCi0gICAgLmVxdSBfQ19MQUJFTChzZXRybGltaXQ2NCksIF9DX0xBQkVMKHNldHJsaW1pdCkKKyAgICAuZ2xvYmwgc2V0cmxpbWl0NjQKKyAgICAuZXF1IHNldHJsaW1pdDY0LCBzZXRybGltaXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0c2lkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHNpZC5TCmluZGV4IDljNTBhODkuLjAxZDkyNjkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0c2lkLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRzaWQuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzZXRzaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHNvY2tvcHQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0c29ja29wdC5TCmluZGV4IDIzMzJlYzkuLjYyOWZkZjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0c29ja29wdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0c29ja29wdC5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2V0c29ja29wdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCmluZGV4IDEyMWMwYjYuLmFjNWI5YjEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzZXR0aW1lb2ZkYXkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHVpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXR1aWQuUwppbmRleCBmNDI2NzA1Li5mMzM1YTc2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHVpZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0dWlkLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2V0dWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXR4YXR0ci5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXR4YXR0ci5TCmluZGV4IGMwMmFhODQuLmQ3NTA0MjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHhhdHRyLlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2h1dGRvd24uUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2h1dGRvd24uUwppbmRleCA5NmE2NWY4Li5hMDMwYzk3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NodXRkb3duLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zaHV0ZG93bi5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNodXRkb3duKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zaWdhbHRzdGFjay5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zaWdhbHRzdGFjay5TCmluZGV4IDU3ZGM0MWEuLjcxY2U1MzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2lnYWx0c3RhY2suUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2lnYWx0c3RhY2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NpZ25hbGZkNC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zaWduYWxmZDQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ4YTFiNi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NpZ25hbGZkNC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShzaWduYWxmZDQpCi0gICAgbW92cSAgICAlcmN4LCAlcjEwCi0gICAgbW92bCAgICAkX19OUl9zaWduYWxmZDQsICVlYXgKLSAgICBzeXNjYWxsCi0gICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKLTE6Ci0gICAgcmV0Ci1FTkQoc2lnbmFsZmQ0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zb2NrZXQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc29ja2V0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NjVlZTQuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zb2NrZXQuUworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoc29ja2V0KQotICAgIG1vdmwgICAgJF9fTlJfc29ja2V0LCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4Ci0xOgotICAgIHJldAotRU5EKHNvY2tldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc29ja2V0cGFpci5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zb2NrZXRwYWlyLlMKaW5kZXggNGU3NmU4My4uZGJjZjUwZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zb2NrZXRwYWlyLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zb2NrZXRwYWlyLlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzb2NrZXRwYWlyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zcGxpY2UuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3BsaWNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyZWM4NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3BsaWNlLlMKQEAgLTAsMCArMSwxNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzcGxpY2UpCisgICAgbW92cSAgICAlcmN4LCAlcjEwCisgICAgbW92bCAgICAkX19OUl9zcGxpY2UsICVlYXgKKyAgICBzeXNjYWxsCisgICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBtb3ZsICAgICVlYXgsICVlZGkKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisxOgorICAgIHJldAorRU5EKHNwbGljZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3RhdGZzLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N0YXRmcy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjRiMmU1Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3RhdGZzLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKHN0YXRmcykKLSAgICBtb3ZsICAgICRfX05SX3N0YXRmcywgJWVheAotICAgIHN5c2NhbGwKLSAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAotMToKLSAgICByZXQKLUVORChzdGF0ZnMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N0YXRmczY0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N0YXRmczY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZmNmJkZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3RhdGZzNjQuUwpAQCAtMCwwICsxLDE4IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHN0YXRmczY0KQorICAgIG1vdmwgICAgJF9fTlJfc3RhdGZzLCAlZWF4CisgICAgc3lzY2FsbAorICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgbW92bCAgICAlZWF4LCAlZWRpCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorMToKKyAgICByZXQKK0VORChzdGF0ZnM2NCkKKworICAgIC5nbG9ibCBzdGF0ZnMKKyAgICAuZXF1IHN0YXRmcywgc3RhdGZzNjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3dhcG9mZi5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zd2Fwb2ZmLlMKaW5kZXggMmYyZGFmZS4uZGY5MjJhMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zd2Fwb2ZmLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zd2Fwb2ZmLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc3dhcG9mZikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3dhcG9uLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N3YXBvbi5TCmluZGV4IDNkYjc5MjEuLjAzNmI0MjIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3dhcG9uLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zd2Fwb24uUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzd2Fwb24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N5bWxpbmthdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zeW1saW5rYXQuUwppbmRleCA1NGI0ZDRlLi5mZGJjZWQ1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N5bWxpbmthdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3ltbGlua2F0LlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc3ltbGlua2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zeW5jLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N5bmMuUwppbmRleCBmNThjNzg4Li5hNDE1M2ZkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N5bmMuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N5bmMuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zeXNpbmZvLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N5c2luZm8uUwppbmRleCBkNDgzNjkzLi43NTRlZjYxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N5c2luZm8uUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N5c2luZm8uUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzeXNpbmZvKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90ZWUuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGVlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkNjZkYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGVlLlMKQEAgLTAsMCArMSwxNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWSh0ZWUpCisgICAgbW92cSAgICAlcmN4LCAlcjEwCisgICAgbW92bCAgICAkX19OUl90ZWUsICVlYXgKKyAgICBzeXNjYWxsCisgICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBtb3ZsICAgICVlYXgsICVlZGkKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisxOgorICAgIHJldAorRU5EKHRlZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGdraWxsLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3Rna2lsbC5TCmluZGV4IDdkMjE3YjAuLjljNDY4ODcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGdraWxsLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90Z2tpbGwuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORCh0Z2tpbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKaW5kZXggYTUxOGU0Zi4uNTZiNDVlOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORCh0aW1lcmZkX2NyZWF0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCmluZGV4IDFkMDg1M2EuLjhjOWI1ZDYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORCh0aW1lcmZkX2dldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUwppbmRleCBhMjNhZjRlLi5hNTI0YzBjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORCh0aW1lcmZkX3NldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RpbWVzLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RpbWVzLlMKaW5kZXggNTIwZDA2Mi4uODk1MDJiZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90aW1lcy5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGltZXMuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORCh0aW1lcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGtpbGwuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGtpbGwuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg1MjllZi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RraWxsLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKHRraWxsKQotICAgIG1vdmwgICAgJF9fTlJfdGtpbGwsICVlYXgKLSAgICBzeXNjYWxsCi0gICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKLTE6Ci0gICAgcmV0Ci1FTkQodGtpbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RydW5jYXRlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RydW5jYXRlLlMKaW5kZXggNWU1ZWI4ZS4uMmVjZDA1YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90cnVuY2F0ZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdHJ1bmNhdGUuUwpAQCAtOSwxMSArOSwxMCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHRydW5jYXRlKQogCi0gICAgLmdsb2JsIF9DX0xBQkVMKHRydW5jYXRlNjQpCi0gICAgLmVxdSBfQ19MQUJFTCh0cnVuY2F0ZTY0KSwgX0NfTEFCRUwodHJ1bmNhdGUpCisgICAgLmdsb2JsIHRydW5jYXRlNjQKKyAgICAuZXF1IHRydW5jYXRlNjQsIHRydW5jYXRlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3VtYXNrLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3VtYXNrLlMKaW5kZXggMzYwYWQ3MS4uYWNkMzdlOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy91bWFzay5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdW1hc2suUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORCh1bWFzaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdW1vdW50Mi5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy91bW91bnQyLlMKaW5kZXggZTJkZTQ0Yi4uNDM4YWVkYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy91bW91bnQyLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy91bW91bnQyLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQodW1vdW50MikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdW5hbWUuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdW5hbWUuUwppbmRleCA4YWQ0MGZhLi42ZjA3N2RmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3VuYW1lLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy91bmFtZS5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHVuYW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy91bmxpbmthdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy91bmxpbmthdC5TCmluZGV4IDgzYmI1OWYuLjgwZjAyNTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdW5saW5rYXQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3VubGlua2F0LlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQodW5saW5rYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3Vuc2hhcmUuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdW5zaGFyZS5TCmluZGV4IDA0NGFmOTkuLjgzMTZkMjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdW5zaGFyZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdW5zaGFyZS5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHVuc2hhcmUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3V0aW1lbnNhdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy91dGltZW5zYXQuUwppbmRleCA0ZDI2M2ZmLi4zZTQzODI2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3V0aW1lbnNhdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdXRpbWVuc2F0LlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORCh1dGltZW5zYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3Ztc3BsaWNlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3Ztc3BsaWNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3NzVjNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdm1zcGxpY2UuUwpAQCAtMCwwICsxLDE2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHZtc3BsaWNlKQorICAgIG1vdnEgICAgJXJjeCwgJXIxMAorICAgIG1vdmwgICAgJF9fTlJfdm1zcGxpY2UsICVlYXgKKyAgICBzeXNjYWxsCisgICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBtb3ZsICAgICVlYXgsICVlZGkKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisxOgorICAgIHJldAorRU5EKHZtc3BsaWNlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy93YWl0NC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy93YWl0NC5TCmluZGV4IDdkZTc4YWMuLmQzOTJkYzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvd2FpdDQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3dhaXQ0LlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORCh3YWl0NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvd3JpdGUuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvd3JpdGUuUwppbmRleCBlYWIzOTA0Li4xNDVjNzkzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3dyaXRlLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy93cml0ZS5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHdyaXRlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy93cml0ZXYuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvd3JpdGV2LlMKaW5kZXggYjIxZTNkNi4uOGY4OTU2ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy93cml0ZXYuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3dyaXRldi5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHdyaXRldikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQveDg2XzY0Lm1rIGIvbGliYy9hcmNoLXg4Nl82NC94ODZfNjQubWsKaW5kZXggMjYxNDUzNy4uYjAwMWI1ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC94ODZfNjQubWsKKysrIGIvbGliYy9hcmNoLXg4Nl82NC94ODZfNjQubWsKQEAgLTEsOCArMSwzNSBAQAotX0xJQkNfQVJDSF9DT01NT05fU1JDX0ZJTEVTIDo9IFwKKyMgeDg2XzY0IHNwZWNpZmljIGNvbmZpZ3MKKworbGliY19jb21tb25fc3JjX2ZpbGVzX3g4Nl82NCA6PSBcCisgICAgYmlvbmljL21lbWNoci5jIFwKKyAgICBiaW9uaWMvbWVtcmNoci5jIFwKKyAgICBiaW9uaWMvc3RyY2hyLmNwcCBcCisgICAgYmlvbmljL3N0cm5sZW4uYyBcCisgICAgYmlvbmljL3N0cnJjaHIuY3BwIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjYXQuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2hyLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NtcC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjcHkuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzbGVuLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc3JjaHIuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbWNtcC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtbW92ZS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJsY2F0LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmxjcHkuYyBcCisKKyMgRm9ydGlmeSBpbXBsZW1lbnRhdGlvbnMgb2YgbGliYyBmdW5jdGlvbnMuCitsaWJjX2NvbW1vbl9zcmNfZmlsZXNfeDg2XzY0ICs9IFwKKyAgICBiaW9uaWMvX19tZW1jcHlfY2hrLmNwcCBcCisgICAgYmlvbmljL19fbWVtc2V0X2Noay5jcHAgXAorICAgIGJpb25pYy9fX3N0cmNweV9jaGsuY3BwIFwKKyAgICBiaW9uaWMvX19zdHJjYXRfY2hrLmNwcCBcCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgQ1BVIHNwZWNpZmljIHNvdXJjZSBmaWxlcworbGliY19iaW9uaWNfc3JjX2ZpbGVzX3g4Nl82NCA6PSBcCiAgICAgYXJjaC14ODZfNjQvYmlvbmljL19fYmlvbmljX2Nsb25lLlMgXAogICAgIGFyY2gteDg2XzY0L2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMgXAotICAgIGFyY2gteDg2XzY0L2Jpb25pYy9mdXRleF94ODZfNjQuUyBcCi0gICAgYXJjaC14ODZfNjQvYmlvbmljL19fZ2V0X3NwLlMgXAogICAgIGFyY2gteDg2XzY0L2Jpb25pYy9fX3J0X3NpZ3JldHVybi5TIFwKICAgICBhcmNoLXg4Nl82NC9iaW9uaWMvX3NldGptcC5TIFwKICAgICBhcmNoLXg4Nl82NC9iaW9uaWMvc2V0am1wLlMgXApAQCAtMTAsOSArMzcsMzMgQEAKICAgICBhcmNoLXg4Nl82NC9iaW9uaWMvc2lnc2V0am1wLlMgXAogICAgIGFyY2gteDg2XzY0L2Jpb25pYy9zeXNjYWxsLlMgXAogICAgIGFyY2gteDg2XzY0L2Jpb25pYy92Zm9yay5TIFwKLSAgICBzdHJpbmcvbWVtY21wMTYuYyBcCiAKLV9MSUJDX0FSQ0hfU1RBVElDX1NSQ19GSUxFUyA6PSBcCi0gICAgYmlvbmljL2RsX2l0ZXJhdGVfcGhkcl9zdGF0aWMuYyBcCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfeDg2XzY0ICs9IFwKKyAgICBhcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1tZW1jcHktc2xtLlMgXAorICAgIGFyY2gteDg2XzY0L3N0cmluZy9zc2UyLW1lbW1vdmUtc2xtLlMgXAorICAgIGFyY2gteDg2XzY0L3N0cmluZy9zc2UyLW1lbXNldC1zbG0uUyBcCisgICAgYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RwY3B5LXNsbS5TIFwKKyAgICBhcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHBuY3B5LXNsbS5TIFwKKyAgICBhcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJjYXQtc2xtLlMgXAorICAgIGFyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cmNweS1zbG0uUyBcCisgICAgYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RybGVuLXNsbS5TIFwKKyAgICBhcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJuY2F0LXNsbS5TIFwKKyAgICBhcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJuY3B5LXNsbS5TIFwKKyAgICBhcmNoLXg4Nl82NC9zdHJpbmcvc3NlNC1tZW1jbXAtc2xtLlMgXAorICAgIGFyY2gteDg2XzY0L3N0cmluZy9zc3NlMy1zdHJjbXAtc2xtLlMgXAorICAgIGFyY2gteDg2XzY0L3N0cmluZy9zc3NlMy1zdHJuY21wLXNsbS5TIFwKIAotX0xJQkNfQVJDSF9EWU5BTUlDX1NSQ19GSUxFUyA6PQorbGliY19jcnRfdGFyZ2V0X2NmbGFnc194ODZfNjQgKz0gXAorICAgIC1tNjQgXAorICAgIC1JJChMT0NBTF9QQVRIKS9hcmNoLXg4Nl82NC9pbmNsdWRlCisKK2xpYmNfY3J0X3RhcmdldF9sZGZsYWdzX3g4Nl82NCA6PSAtbWVsZl94ODZfNjQKKworbGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX2ZpbGVfeDg2XzY0IDo9IFwKKyAgICAkKExPQ0FMX1BBVEgpL2FyY2gtY29tbW9uL2Jpb25pYy9jcnRiZWdpbi5jCisKK2xpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9zb19maWxlX3g4Nl82NCA6PSBcCisgICAgJChMT0NBTF9QQVRIKS9hcmNoLWNvbW1vbi9iaW9uaWMvY3J0YmVnaW5fc28uYworCitsaWJjX2NydF90YXJnZXRfc29fY2ZsYWdzX3g4Nl82NCA6PSBcCisgICAgLWZQSUMKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL05ldGRDbGllbnQuY3BwIGIvbGliYy9iaW9uaWMvTmV0ZENsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIwZjRmZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL05ldGRDbGllbnQuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZkZWYgTElCQ19TVEFUSUMKKyNlcnJvciBOZXRkQ2xpZW50LmNwcCBzaG91bGQgTk9UIGJlIGluY2x1ZGVkIGluIHN0YXRpYyBsaWJjIGJ1aWxkcy4KKyNlbmRpZgorCisjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJwcml2YXRlL05ldGRDbGllbnREaXNwYXRjaC5oIgorCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvblR5cGU+CitzdGF0aWMgdm9pZCBuZXRkQ2xpZW50SW5pdEZ1bmN0aW9uKHZvaWQqIGhhbmRsZSwgY29uc3QgY2hhciogc3ltYm9sLCBGdW5jdGlvblR5cGUqIGZ1bmN0aW9uKSB7CisgICAgdHlwZWRlZiB2b2lkICgqSW5pdEZ1bmN0aW9uVHlwZSkoRnVuY3Rpb25UeXBlKik7CisgICAgSW5pdEZ1bmN0aW9uVHlwZSBpbml0RnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEluaXRGdW5jdGlvblR5cGU+KGRsc3ltKGhhbmRsZSwgc3ltYm9sKSk7CisgICAgaWYgKGluaXRGdW5jdGlvbiAhPSBOVUxMKSB7CisgICAgICAgIGluaXRGdW5jdGlvbihmdW5jdGlvbik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBuZXRkQ2xpZW50SW5pdEltcGwoKSB7CisgICAgdm9pZCogbmV0ZENsaWVudEhhbmRsZSA9IGRsb3BlbigibGlibmV0ZF9jbGllbnQuc28iLCBSVExEX0xBWlkpOworICAgIGlmIChuZXRkQ2xpZW50SGFuZGxlID09IE5VTEwpIHsKKyAgICAgICAgLy8gSWYgdGhlIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZSwgaXQncyBub3QgYW4gZXJyb3IuIFdlJ2xsIGp1c3QgdXNlCisgICAgICAgIC8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIG9mIGZ1bmN0aW9ucyB0aGF0IGl0IHdvdWxkJ3ZlIG92ZXJyaWRkZW4uCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbmV0ZENsaWVudEluaXRGdW5jdGlvbihuZXRkQ2xpZW50SGFuZGxlLCAibmV0ZENsaWVudEluaXRBY2NlcHQ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX25ldGRDbGllbnREaXNwYXRjaC5hY2NlcHQ0KTsKKyAgICBuZXRkQ2xpZW50SW5pdEZ1bmN0aW9uKG5ldGRDbGllbnRIYW5kbGUsICJuZXRkQ2xpZW50SW5pdENvbm5lY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fbmV0ZENsaWVudERpc3BhdGNoLmNvbm5lY3QpOworICAgIG5ldGRDbGllbnRJbml0RnVuY3Rpb24obmV0ZENsaWVudEhhbmRsZSwgIm5ldGRDbGllbnRJbml0TmV0SWRGb3JSZXNvbHYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fbmV0ZENsaWVudERpc3BhdGNoLm5ldElkRm9yUmVzb2x2KTsKKyAgICBuZXRkQ2xpZW50SW5pdEZ1bmN0aW9uKG5ldGRDbGllbnRIYW5kbGUsICJuZXRkQ2xpZW50SW5pdFNvY2tldCIsICZfX25ldGRDbGllbnREaXNwYXRjaC5zb2NrZXQpOworfQorCitzdGF0aWMgcHRocmVhZF9vbmNlX3QgbmV0ZENsaWVudEluaXRPbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7CisKK2V4dGVybiAiQyIgX19MSUJDX0hJRERFTl9fIHZvaWQgbmV0ZENsaWVudEluaXQoKSB7CisgICAgaWYgKHB0aHJlYWRfb25jZSgmbmV0ZENsaWVudEluaXRPbmNlLCBuZXRkQ2xpZW50SW5pdEltcGwpKSB7CisgICAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0VSUk9SLCAibmV0ZENsaWVudCIsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBuZXRkX2NsaWVudCIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL05ldGRDbGllbnREaXNwYXRjaC5jcHAgYi9saWJjL2Jpb25pYy9OZXRkQ2xpZW50RGlzcGF0Y2guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZmExOTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9OZXRkQ2xpZW50RGlzcGF0Y2guY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAicHJpdmF0ZS9OZXRkQ2xpZW50RGlzcGF0Y2guaCIKKworI2lmZGVmIF9faTM4Nl9fCisjZGVmaW5lIF9fc29ja2V0Y2FsbCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKQorI2Vsc2UKKyNkZWZpbmUgX19zb2NrZXRjYWxsCisjZW5kaWYKKworZXh0ZXJuICJDIiBfX3NvY2tldGNhbGwgaW50IF9fYWNjZXB0NChpbnQsIHNvY2thZGRyKiwgc29ja2xlbl90KiwgaW50KTsKK2V4dGVybiAiQyIgX19zb2NrZXRjYWxsIGludCBfX2Nvbm5lY3QoaW50LCBjb25zdCBzb2NrYWRkciosIHNvY2tsZW5fdCk7CitleHRlcm4gIkMiIF9fc29ja2V0Y2FsbCBpbnQgX19zb2NrZXQoaW50LCBpbnQsIGludCk7CisKK3N0YXRpYyB1bnNpZ25lZCBmYWxsQmFja05ldElkRm9yUmVzb2x2KHVuc2lnbmVkIG5ldElkKSB7CisgICAgcmV0dXJuIG5ldElkOworfQorCisvLyBUaGlzIHN0cnVjdHVyZSBpcyBtb2RpZmllZCBvbmx5IGF0IHN0YXJ0dXAgKHdoZW4gbGliYy5zbyBpcyBsb2FkZWQpIGFuZCBuZXZlcgorLy8gYWZ0ZXJ3YXJkcywgc28gaXQncyBva2F5IHRoYXQgaXQncyByZWFkIGxhdGVyIGF0IHJ1bnRpbWUgd2l0aG91dCBhIGxvY2suCitfX0xJQkNfSElEREVOX18gTmV0ZENsaWVudERpc3BhdGNoIF9fbmV0ZENsaWVudERpc3BhdGNoIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMzIpKSkgPSB7CisgICAgX19hY2NlcHQ0LAorICAgIF9fY29ubmVjdCwKKyAgICBfX3NvY2tldCwKKyAgICBmYWxsQmFja05ldElkRm9yUmVzb2x2LAorfTsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fY21zZ19ueHRoZHIuY3BwIGIvbGliYy9iaW9uaWMvX19jbXNnX254dGhkci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2Mjc4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL19fY21zZ19ueHRoZHIuY3BwCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworY21zZ2hkciogX19jbXNnX254dGhkcihtc2doZHIqIG1zZywgY21zZ2hkciogY21zZykgeworICBjbXNnaGRyKiBwdHI7CisgIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y21zZ2hkcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNtc2cpICsgQ01TR19BTElHTihjbXNnLT5jbXNnX2xlbikpOworICBzaXplX3QgbGVuID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocHRyKzEpIC0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obXNnLT5tc2dfY29udHJvbCk7CisgIGlmIChsZW4gPiBtc2ctPm1zZ19jb250cm9sbGVuKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgcmV0dXJuIHB0cjsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fY3hhX2d1YXJkLmNwcCBiL2xpYmMvYmlvbmljL19fY3hhX2d1YXJkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjBkNTdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX19jeGFfZ3VhcmQuY3BwCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPGVuZGlhbi5oPgorCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfYXRvbWljX2lubGluZS5oIgorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2Z1dGV4LmgiCisKKy8vIFRoaXMgZmlsZSBjb250YWlucyBDKysgQUJJIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBvbmUgdGltZQorLy8gY29uc3RydWN0b3JzIGFzIGRlZmluZWQgaW4gdGhlICJSdW4tdGltZSBBQkkgZm9yIHRoZSBBUk0gQXJjaGl0ZWN0dXJlIgorLy8gc2VjdGlvbiA0LjQuMgorLy8KKy8vIEFSTSBDKysgQUJJIGFuZCBJdGFuaXVtL3g4NiBDKysgQUJJIGhhcyBkaWZmZXJlbnQgZGVmaW5pdGlvbiBmb3IKKy8vIG9uZSB0aW1lIGNvbnN0cnVjdGlvbjoKKy8vCisvLyAgICBBUk0gQysrIEFCSSBkZWZpbmVzIHRoZSBMU0Igb2YgZ3VhcmQgdmFyaWFibGUgc2hvdWxkIGJlIHRlc3RlZAorLy8gICAgYnkgY29tcGlsZXItZ2VuZXJhdGVkIGNvZGUgYmVmb3JlIGNhbGxpbmcgX19jeGFfZ3VhcmRfYWNxdWlyZSBldCBhbC4KKy8vCisvLyAgICBUaGUgSXRhbml1bS94ODYgQysrIEFCSSBkZWZpbmVzIHRoZSBsb3ctb3JkZXIgX2J5dGVfIHNob3VsZCBiZQorLy8gICAgdGVzdGVkIGluc3RlYWQuCisvLworLy8gICAgTWVhbndoaWxlLCBndWFyZCB2YXJpYWJsZSBhcmUgMzJiaXQgYWxpZ25lZCBmb3IgQVJNLCBhbmQgNjRiaXQKKy8vICAgIGFsaWduZWQgZm9yIHg4Ni4KKy8vCisvLyBSZWZlcmVuY2UgZG9jdW1lbnRhdGlvbjoKKy8vCisvLyAgICBzZWN0aW9uIDMuMi4zIG9mIEFSTSBJSEkgMDA0MUMgKGZvciBBUk0pCisvLyAgICBzZWN0aW9uIDMuMy4yIG9mIHRoZSBJdGFuaXVtIEMrKyBBQkkgc3BlY2lmaWNhdGlvbiB2MS44MyAoZm9yIHg4NikuCisvLworLy8gVGhlcmUgaXMgbm8gQysrIEFCSSBhdmFpbGFibGUgZm9yIG90aGVyIEFSQ0guIEJ1dCB0aGUgZ2NjIHNvdXJjZQorLy8gc2hvd3MgYWxsIG90aGVyIEFSQ0ggZm9sbG93IHRoZSBkZWZpbml0aW9uIG9mIEl0YW5pdW0veDg2IEMrKyBBQkkuCisKKyNpZiBkZWZpbmVkKF9fYXJtX18pCisvLyBUaGUgQVJNIEMrKyBBQkkgbWFuZGF0ZXMgdGhhdCBndWFyZCB2YXJpYWJsZXMgYXJlIDMyLWJpdCBhbGlnbmVkLCAzMi1iaXQKKy8vIHZhbHVlcy4gVGhlIExTQiBpcyB0ZXN0ZWQgYnkgdGhlIGNvbXBpbGVyLWdlbmVyYXRlZCBjb2RlIGJlZm9yZSBjYWxsaW5nCisvLyBfX2N4YV9ndWFyZF9hY3F1aXJlLgordW5pb24gX2d1YXJkX3QgeworICAgIGludCB2b2xhdGlsZSBzdGF0ZTsKKyAgICBpbnQzMl90IGFsaWduZXI7Cit9OworCitjb25zdCBzdGF0aWMgaW50IHJlYWR5ID0gMHgxOworY29uc3Qgc3RhdGljIGludCBwZW5kaW5nID0gMHgyOworY29uc3Qgc3RhdGljIGludCB3YWl0aW5nID0gMHg2OworCisjZWxzZQorLy8gVGhlIEl0YW5pdW0veDg2IEMrKyBBQkkgKHVzZWQgYnkgYWxsIG90aGVyIGFyY2hpdGVjdHVyZXMpIG1hbmRhdGVzIHRoYXQKKy8vIGd1YXJkIHZhcmlhYmxlcyBhcmUgNjQtYml0IGFsaWduZWQsIDY0LWJpdCB2YWx1ZXMuIFRoZSBMU0IgaXMgdGVzdGVkIGJ5CisvLyB0aGUgY29tcGlsZXItZ2VuZXJhdGVkIGNvZGUgYmVmb3JlIGNhbGxpbmcgX19jeGFfZ3VhcmRfYWNxdWlyZS4KK3VuaW9uIF9ndWFyZF90IHsKKyAgICBpbnQgdm9sYXRpbGUgc3RhdGU7CisgICAgaW50NjRfdCBhbGlnbmVyOworfTsKKworY29uc3Qgc3RhdGljIGludCByZWFkeSAgICAgPSBsZXRvaDMyKDB4MSk7Citjb25zdCBzdGF0aWMgaW50IHBlbmRpbmcgICA9IGxldG9oMzIoMHgxMDApOworY29uc3Qgc3RhdGljIGludCB3YWl0aW5nICAgPSBsZXRvaDMyKDB4MTAwMDApOworI2VuZGlmCisKK2V4dGVybiAiQyIgaW50IF9fY3hhX2d1YXJkX2FjcXVpcmUoX2d1YXJkX3QqIGd2KSB7CisgICAgLy8gMCAtPiBwZW5kaW5nLCByZXR1cm4gMQorICAgIC8vIHBlbmRpbmcgLT4gd2FpdGluZywgd2FpdCBhbmQgcmV0dXJuIDAKKyAgICAvLyB3YWl0aW5nOiB1bnRvdWNoZWQsIHdhaXQgYW5kIHJldHVybiAwCisgICAgLy8gcmVhZHk6IHVudG91Y2hlZCwgcmV0dXJuIDAKKworcmV0cnk6CisgICAgaWYgKF9fYmlvbmljX2NtcHhjaGcoMCwgcGVuZGluZywgJmd2LT5zdGF0ZSkgPT0gMCkgeworICAgICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBfX2Jpb25pY19jbXB4Y2hnKHBlbmRpbmcsIHdhaXRpbmcsICZndi0+c3RhdGUpOyAvLyBJbmRpY2F0ZSB0aGVyZSBpcyBhIHdhaXRlcgorICAgIF9fZnV0ZXhfd2FpdCgmZ3YtPnN0YXRlLCB3YWl0aW5nLCBOVUxMKTsKKworICAgIGlmIChndi0+c3RhdGUgIT0gcmVhZHkpIHsKKyAgICAgICAgLy8gX19jeGFfZ3VhcmRfYWJvcnQgd2FzIGNhbGxlZCwgbGV0IGV2ZXJ5IHRocmVhZCB0cnkgc2luY2UgdGhlcmUgaXMgbm8gcmV0dXJuIGNvZGUgZm9yIHRoaXMgY29uZGl0aW9uCisgICAgICAgIGdvdG8gcmV0cnk7CisgICAgfQorCisgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgIHJldHVybiAwOworfQorCitleHRlcm4gIkMiIHZvaWQgX19jeGFfZ3VhcmRfcmVsZWFzZShfZ3VhcmRfdCogZ3YpIHsKKyAgICAvLyBwZW5kaW5nIC0+IHJlYWR5CisgICAgLy8gd2FpdGluZyAtPiByZWFkeSwgYW5kIHdha2UKKworICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKKyAgICBpZiAoX19iaW9uaWNfY21weGNoZyhwZW5kaW5nLCByZWFkeSwgJmd2LT5zdGF0ZSkgPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ3YtPnN0YXRlID0gcmVhZHk7CisgICAgX19mdXRleF93YWtlKCZndi0+c3RhdGUsIDB4N2ZmZmZmZmYpOworfQorCitleHRlcm4gIkMiIHZvaWQgX19jeGFfZ3VhcmRfYWJvcnQoX2d1YXJkX3QqIGd2KSB7CisgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgIGd2LT5zdGF0ZT0gMDsKKyAgICBfX2Z1dGV4X3dha2UoJmd2LT5zdGF0ZSwgMHg3ZmZmZmZmZik7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9fX2N4YV9wdXJlX3ZpcnR1YWwuY3BwIGIvbGliYy9iaW9uaWMvX19jeGFfcHVyZV92aXJ0dWFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGI1ODFmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX19jeGFfcHVyZV92aXJ0dWFsLmNwcApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHByaXZhdGUvbGliY19sb2dnaW5nLmg+CisKK2V4dGVybiAiQyIgdm9pZCBfX2N4YV9wdXJlX3ZpcnR1YWwoKSB7CisgIF9fbGliY19mYXRhbCgiUHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxlZC4gQXJlIHlvdSBjYWxsaW5nIHZpcnR1YWwgbWV0aG9kcyBmcm9tIGEgZGVzdHJ1Y3Rvcj8iKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fbGliY19jdXJyZW50X3NpZ3J0bWF4LmNwcCBiL2xpYmMvYmlvbmljL19fbGliY19jdXJyZW50X3NpZ3J0bWF4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2ZjYjM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX19saWJjX2N1cnJlbnRfc2lncnRtYXguY3BwCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHNpZ25hbC5oPgorCitpbnQgX19saWJjX2N1cnJlbnRfc2lncnRtYXgodm9pZCkgeworICByZXR1cm4gX19TSUdSVE1BWDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fbGliY19jdXJyZW50X3NpZ3J0bWluLmNwcCBiL2xpYmMvYmlvbmljL19fbGliY19jdXJyZW50X3NpZ3J0bWluLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmIwMzdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX19saWJjX2N1cnJlbnRfc2lncnRtaW4uY3BwCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHNpZ25hbC5oPgorCisvLyBQT1NJWCB0aW1lcnMgdXNlIF9fU0lHUlRNSU4gKyAwLgorLy8gbGliYmFja3RyYWNlIHVzZXMgX19TSUdSVE1JTiArIDEuCisvLyBsaWJjb3JlIHVzZXMgX19TSUdSVE1JTiArIDIuCisKK2ludCBfX2xpYmNfY3VycmVudF9zaWdydG1pbih2b2lkKSB7CisgIHJldHVybiBfX1NJR1JUTUlOICsgMzsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fc2V0X2Vycm5vLmNwcCBiL2xpYmMvYmlvbmljL19fc2V0X2Vycm5vLmNwcAppbmRleCBhZjZhNjhlLi4zMGRmMzUwIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9fX3NldF9lcnJuby5jcHAKKysrIGIvbGliYy9iaW9uaWMvX19zZXRfZXJybm8uY3BwCkBAIC0zMSw4ICszMSwyNSBAQAogLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBvdXIgYXNzZW1ibGVyIHN5c2NhbGwgc3R1YnMuCiAvLyBDL0MrKyBjb2RlIHNob3VsZCBqdXN0IGFzc2lnbiAnZXJybm8nIGluc3RlYWQuCiAKLS8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIF9fTElCQ19ISURERU5fXyBidXQgd2FzIGV4cG9zZWQgaW4gPGVycm5vLmg+IGluIHRoZSBOREsuCi1leHRlcm4gIkMiIGludCBfX3NldF9lcnJubyhpbnQgbikgeworLy8gVGhlIHJldHVybiB0eXBlIGlzICdsb25nJyBiZWNhdXNlIHdlIHVzZSB0aGUgc2FtZSByb3V0aW5lIGluIGNhbGxzCisvLyB0aGF0IHJldHVybiBhbiBpbnQgYXMgaW4gb25lcyB0aGF0IHJldHVybiBhIHNzaXplX3QuIE9uIGEgMzItYml0CisvLyBzeXN0ZW0gdGhlc2UgYXJlIHRoZSBzYW1lIHNpemUsIGJ1dCBvbiBhIDY0LWJpdCBzeXN0ZW0gdGhleSdyZSBub3QuCisvLyAnbG9uZycgZ2l2ZXMgdXMgMzItYml0IG9uIDMyLWJpdCBzeXN0ZW1zLCA2NC1iaXQgb24gNjQtYml0IHN5c3RlbXMuCisKKy8vIF9fc2V0X2Vycm5vIHdhcyBtaXN0YWtlbmx5IGV4cG9zZWQgaW4gPGVycm5vLmg+IGluIHRoZSAzMi1iaXQgTkRLLgorLy8gV2UgbmVlZCB0aGUgZXh0cmEgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gc28gdGhhdCB0aGUgLmhpZGRlbiBkaXJlY3RpdmVzCisvLyBpbiB0aGUgc3lzdGVtIGNhbGwgc3R1YnMgZG9uJ3QgY2F1c2UgX19zZXRfZXJybm8gdG8gYmUgaGlkZGVuLCBicmVha2luZworLy8gb2xkIE5ESyBhcHBzLgorCisvLyBUaGlzIG9uZSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgYW5kIHVzZWQgYnkgYm90aCBMUDMyIGFuZCBMUDY0IGFzc2VtYmxlci4KK2V4dGVybiAiQyIgX19MSUJDX0hJRERFTl9fIGxvbmcgX19zZXRfZXJybm9faW50ZXJuYWwoaW50IG4pIHsKICAgZXJybm8gPSBuOwogICByZXR1cm4gLTE7CiB9CisKKy8vIFRoaXMgb25lIGV4aXN0cyBmb3IgdGhlIExQMzIgTkRLIGFuZCBpcyBub3QgcHJlc2VudCBhdCBhbGwgaW4gTFA2NC4KKyNpZiAhZGVmaW5lZChfX0xQNjRfXykKK2V4dGVybiAiQyIgbG9uZyBfX3NldF9lcnJubyhpbnQgbikgeworICByZXR1cm4gX19zZXRfZXJybm9faW50ZXJuYWwobik7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fc3RwY3B5X2Noay5jcHAgYi9saWJjL2Jpb25pYy9fX3N0cGNweV9jaGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZTgxZWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9fX3N0cGNweV9jaGsuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI3VuZGVmIF9GT1JUSUZZX1NPVVJDRQorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKKworLyoKKyAqIFJ1bnRpbWUgaW1wbGVtZW50YXRpb24gb2YgX19idWlsdGluX19fX3N0cGNweV9jaGsuCisgKgorICogU2VlCisgKiAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9PYmplY3QtU2l6ZS1DaGVja2luZy5odG1sCisgKiAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDA0LTA5L21zZzAyMDU1Lmh0bWwKKyAqIGZvciBkZXRhaWxzLgorICoKKyAqIFRoaXMgc3RwY3B5IGNoZWNrIGlzIGNhbGxlZCBpZiBfRk9SVElGWV9TT1VSQ0UgaXMgZGVmaW5lZCBhbmQKKyAqIGdyZWF0ZXIgdGhhbiAwLgorICovCitleHRlcm4gIkMiIGNoYXIqIF9fc3RwY3B5X2NoayhjaGFyKiBkZXN0LCBjb25zdCBjaGFyKiBzcmMsIHNpemVfdCBkZXN0X2xlbikgeworICAvLyBUT0RPOiBvcHRpbWl6ZSBzbyB3ZSBkb24ndCBzY2FuIHNyYyB0d2ljZS4KKyAgc2l6ZV90IHNyY19sZW4gPSBzdHJsZW4oc3JjKSArIDE7CisgIGlmIChfX3ByZWRpY3RfZmFsc2Uoc3JjX2xlbiA+IGRlc3RfbGVuKSkgeworICAgIF9fZm9ydGlmeV9jaGtfZmFpbCgic3RwY3B5OiBwcmV2ZW50ZWQgd3JpdGUgcGFzdCBlbmQgb2YgYnVmZmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgQklPTklDX0VWRU5UX1NUUENQWV9CVUZGRVJfT1ZFUkZMT1cpOworICB9CisKKyAgcmV0dXJuIHN0cGNweShkZXN0LCBzcmMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvX19zdHBuY3B5X2Noay5jcHAgYi9saWJjL2Jpb25pYy9fX3N0cG5jcHlfY2hrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzkyMTVjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX19zdHBuY3B5X2Noay5jcHAKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjdW5kZWYgX0ZPUlRJRllfU09VUkNFCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgorCisvKgorICogUnVudGltZSBpbXBsZW1lbnRhdGlvbiBvZiBfX2J1aWx0aW5fX19fc3RwbmNweV9jaGsuCisgKgorICogU2VlCisgKiAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9PYmplY3QtU2l6ZS1DaGVja2luZy5odG1sCisgKiAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDA0LTA5L21zZzAyMDU1Lmh0bWwKKyAqIGZvciBkZXRhaWxzLgorICoKKyAqIFRoaXMgc3RwbmNweSBjaGVjayBpcyBjYWxsZWQgaWYgX0ZPUlRJRllfU09VUkNFIGlzIGRlZmluZWQgYW5kCisgKiBncmVhdGVyIHRoYW4gMC4KKyAqLworZXh0ZXJuICJDIiBjaGFyKiBfX3N0cG5jcHlfY2hrKGNoYXIqIF9fcmVzdHJpY3QgZGVzdCwgY29uc3QgY2hhciogX19yZXN0cmljdCBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgc2l6ZV90IGRlc3RfbGVuKSB7CisgIGlmIChfX3ByZWRpY3RfZmFsc2UobGVuID4gZGVzdF9sZW4pKSB7CisgICAgX19mb3J0aWZ5X2Noa19mYWlsKCJzdHBuY3B5OiBwcmV2ZW50ZWQgd3JpdGUgcGFzdCBlbmQgb2YgYnVmZmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgQklPTklDX0VWRU5UX1NUUE5DUFlfQlVGRkVSX09WRVJGTE9XKTsKKyAgfQorCisgIHJldHVybiBzdHBuY3B5KGRlc3QsIHNyYywgbGVuKTsKK30KKworLyoKKyAqIF9fc3RwbmNweV9jaGsyCisgKgorICogVGhpcyBpcyBhIHZhcmlhbnQgb2YgX19zdHBuY3B5X2NoaywgYnV0IGl0IGFsc28gY2hlY2tzIHRvIG1ha2UKKyAqIHN1cmUgd2UgZG9uJ3QgcmVhZCBiZXlvbmQgdGhlIGVuZCBvZiAic3JjIi4gVGhlIGNvZGUgZm9yIHRoaXMgaXMKKyAqIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHN0cG5jcHksIGJ1dCBtb2RpZmllZCB0byBjaGVjaworICogaG93IG11Y2ggd2UgcmVhZCBmcm9tICJzcmMiIGF0IHRoZSBlbmQgb2YgdGhlIGNvcHkgb3BlcmF0aW9uLgorICovCitleHRlcm4gIkMiIGNoYXIqIF9fc3RwbmNweV9jaGsyKGNoYXIqIF9fcmVzdHJpY3QgZHN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0IHNyYywKKyAgICAgICAgICAgICAgc2l6ZV90IG4sIHNpemVfdCBkZXN0X2xlbiwgc2l6ZV90IHNyY19sZW4pCit7CisgIGlmIChfX3ByZWRpY3RfZmFsc2UobiA+IGRlc3RfbGVuKSkgeworICAgIF9fZm9ydGlmeV9jaGtfZmFpbCgic3RwbmNweTogcHJldmVudGVkIHdyaXRlIHBhc3QgZW5kIG9mIGJ1ZmZlciIsCisgICAgICAgICAgICAgICAgICAgICAgIEJJT05JQ19FVkVOVF9TVFBOQ1BZX0JVRkZFUl9PVkVSRkxPVyk7CisgIH0KKyAgaWYgKG4gIT0gMCkgeworICAgIGNoYXIqIGQgPSBkc3Q7CisgICAgY29uc3QgY2hhciogcyA9IHNyYzsKKworICAgIGRvIHsKKyAgICAgIGlmICgoKmQrKyA9ICpzKyspID09IDApIHsKKyAgICAgICAgLyogTlVMIHBhZCB0aGUgcmVtYWluaW5nIG4tMSBieXRlcyAqLworICAgICAgICB3aGlsZSAoLS1uICE9IDApIHsKKyAgICAgICAgICAqZCsrID0gMDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9IHdoaWxlICgtLW4gIT0gMCk7CisKKyAgICBzaXplX3Qgc19jb3B5X2xlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4ocyAtIHNyYyk7CisgICAgaWYgKF9fcHJlZGljdF9mYWxzZShzX2NvcHlfbGVuID4gc3JjX2xlbikpIHsKKyAgICAgIF9fZm9ydGlmeV9jaGtfZmFpbCgic3RwbmNweTogcHJldmVudGVkIHJlYWQgcGFzdCBlbmQgb2YgYnVmZmVyIiwgMCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGRzdDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fc3RyY3B5X2Noay5jcHAgYi9saWJjL2Jpb25pYy9fX3N0cmNweV9jaGsuY3BwCmluZGV4IDFmNmJjODAuLmFkM2VmNTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL19fc3RyY3B5X2Noay5jcHAKKysrIGIvbGliYy9iaW9uaWMvX19zdHJjcHlfY2hrLmNwcApAQCAtMjYsNiArMjYsOCBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAorI3VuZGVmIF9GT1JUSUZZX1NPVVJDRQorCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKQEAgLTQxLDcgKzQzLDcgQEAKICAqIFRoaXMgc3RyY3B5IGNoZWNrIGlzIGNhbGxlZCBpZiBfRk9SVElGWV9TT1VSQ0UgaXMgZGVmaW5lZCBhbmQKICAqIGdyZWF0ZXIgdGhhbiAwLgogICovCi1leHRlcm4gIkMiIGNoYXIqIF9fc3RyY3B5X2NoayAoY2hhciogZGVzdCwgY29uc3QgY2hhciogc3JjLCBzaXplX3QgZGVzdF9sZW4pIHsKK2V4dGVybiAiQyIgY2hhciogX19zdHJjcHlfY2hrKGNoYXIqIGRlc3QsIGNvbnN0IGNoYXIqIHNyYywgc2l6ZV90IGRlc3RfbGVuKSB7CiAgIC8vIFRPRE86IG9wdGltaXplIHNvIHdlIGRvbid0IHNjYW4gc3JjIHR3aWNlLgogICBzaXplX3Qgc3JjX2xlbiA9IHN0cmxlbihzcmMpICsgMTsKICAgaWYgKF9fcHJlZGljdF9mYWxzZShzcmNfbGVuID4gZGVzdF9sZW4pKSB7CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9fX3N0cnJjaHJfY2hrLmNwcCBiL2xpYmMvYmlvbmljL19fc3RycmNocl9jaGsuY3BwCmluZGV4IDQwMzcyMDcuLjY5MTk4YzAgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL19fc3RycmNocl9jaGsuY3BwCisrKyBiL2xpYmMvYmlvbmljL19fc3RycmNocl9jaGsuY3BwCkBAIC0xLDQgKzEsMyBAQAotLyoJJE9wZW5CU0Q6IHJpbmRleC5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDE5ODggUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2Fib3J0LmNwcCBiL2xpYmMvYmlvbmljL2Fib3J0LmNwcAppbmRleCA2ZmNkZmRhLi43NTQxM2M2IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9hYm9ydC5jcHAKKysrIGIvbGliYy9iaW9uaWMvYWJvcnQuY3BwCkBAIC0zMCw5ICszMCw2IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSAiYXRleGl0LmgiCi0KLV9fTElCQ19ISURERU5fXyB2b2lkICgqX19jbGVhbnVwKSgpOwogCiAjaWZkZWYgX19hcm1fXwogZXh0ZXJuICJDIiBfX0xJQkNfSElEREVOX18gdm9pZCBfX2xpYmNfYW5kcm9pZF9hYm9ydCgpCkBAIC00NywxMSArNDQsNiBAQAogICBzaWdkZWxzZXQoJm1hc2ssIFNJR0FCUlQpOwogICBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm1hc2ssIE5VTEwpOwogCi0gIC8vIFBPU0lYIHJlcXVpcmVzIHdlIGZsdXNoIHN0ZGlvIGJ1ZmZlcnMgb24gYWJvcnQuCi0gIGlmIChfX2NsZWFudXApIHsKLSAgICAoKl9fY2xlYW51cCkoKTsKLSAgfQotCiAgIHJhaXNlKFNJR0FCUlQpOwogCiAgIC8vIElmIFNJR0FCUlQgaWdub3JlZCwgb3IgY2F1Z2h0IGFuZCB0aGUgaGFuZGxlciByZXR1cm5zLApkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYWNjZXB0LmNwcCBiL2xpYmMvYmlvbmljL2FjY2VwdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y3YWEwNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2FjY2VwdC5jcHAKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKK2ludCBhY2NlcHQoaW50IHNvY2tmZCwgc29ja2FkZHIqIGFkZHIsIHNvY2tsZW5fdCogYWRkcmxlbikgeworICAgIHJldHVybiBhY2NlcHQ0KHNvY2tmZCwgYWRkciwgYWRkcmxlbiwgMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9hY2NlcHQ0LmNwcCBiL2xpYmMvYmlvbmljL2FjY2VwdDQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNThkYzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9hY2NlcHQ0LmNwcApAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgInByaXZhdGUvTmV0ZENsaWVudERpc3BhdGNoLmgiCisKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKK2ludCBhY2NlcHQ0KGludCBzb2NrZmQsIHNvY2thZGRyKiBhZGRyLCBzb2NrbGVuX3QqIGFkZHJsZW4sIGludCBmbGFncykgeworICAgIHJldHVybiBfX25ldGRDbGllbnREaXNwYXRjaC5hY2NlcHQ0KHNvY2tmZCwgYWRkciwgYWRkcmxlbiwgZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYXJjNHJhbmRvbS5jIGIvbGliYy9iaW9uaWMvYXJjNHJhbmRvbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWM0YjBjLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL2FyYzRyYW5kb20uYworKysgL2Rldi9udWxsCkBAIC0xLDMwOCArMCwwIEBACi0vKiAgICAgICRPcGVuQlNEOiBhcmM0cmFuZG9tLmMsdiAxLjE5IDIwMDgvMDYvMDQgMDA6NTA6MjMgZGptIEV4cCAkICAgICAgICAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTk2LCBEYXZpZCBNYXppZXJlcyA8ZG1AdXVuLm9yZz4KLSAqIENvcHlyaWdodCAoYykgMjAwOCwgRGFtaWVuIE1pbGxlciA8ZGptQG9wZW5ic2Qub3JnPgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0gKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLS8qCi0gKiBBcmM0IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGZvciBPcGVuQlNELgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc2VjdGlvbiAxNy4xIG9mIEFwcGxpZWQgQ3J5cHRvZ3JhcGh5LAotICogc2Vjb25kIGVkaXRpb24sIHdoaWNoIGRlc2NyaWJlcyBhIHN0cmVhbSBjaXBoZXIgYWxsZWdlZGx5Ci0gKiBjb21wYXRpYmxlIHdpdGggUlNBIExhYnMgIlJDNCIgY2lwaGVyICh0aGUgYWN0dWFsIGRlc2NyaXB0aW9uIG9mCi0gKiB3aGljaCBpcyBhIHRyYWRlIHNlY3JldCkuICBUaGUgc2FtZSBhbGdvcml0aG0gaXMgdXNlZCBhcyBhIHN0cmVhbQotICogY2lwaGVyIGNhbGxlZCAiYXJjZm91ciIgaW4gVGF0dSBZbG9uZW4ncyBzc2ggcGFja2FnZS4KLSAqCi0gKiBIZXJlIHRoZSBzdHJlYW0gY2lwaGVyIGhhcyBiZWVuIG1vZGlmaWVkIGFsd2F5cyB0byBpbmNsdWRlIHRoZSB0aW1lCi0gKiB3aGVuIGluaXRpYWxpemluZyB0aGUgc3RhdGUuICBUaGF0IG1ha2VzIGl0IGltcG9zc2libGUgdG8KLSAqIHJlZ2VuZXJhdGUgdGhlIHNhbWUgcmFuZG9tIHNlcXVlbmNlIHR3aWNlLCBzbyB0aGlzIGNhbid0IGJlIHVzZWQKLSAqIGZvciBlbmNyeXB0aW9uLCBidXQgd2lsbCBnZW5lcmF0ZSBnb29kIHJhbmRvbSBudW1iZXJzLgotICoKLSAqIFJDNCBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIFJTQSBMYWJvcmF0b3JpZXMuCi0gKi8KLQotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlICJwcml2YXRlL3RocmVhZF9wcml2YXRlLmgiCi0KLS8qIEJJT05JQy1CRUdJTiAqLwotLyogdGhpcyBsb2NrIHNob3VsZCBwcm90ZWN0IHRoZSBnbG9iYWwgdmFyaWFibGVzIGluIHRoaXMgZmlsZSAqLwotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCAgX2FyYzRfbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7Ci0jZGVmaW5lICBfQVJDNF9MT0NLKCkgICAgICBwdGhyZWFkX211dGV4X2xvY2soJl9hcmM0X2xvY2spCi0jZGVmaW5lICBfQVJDNF9VTkxPQ0soKSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX2FyYzRfbG9jaykKLS8qIEJJT05JQy1FTkQgKi8KLQotI2lmZGVmIF9fR05VQ19fCi0jZGVmaW5lIGlubGluZSBfX2lubGluZQotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhX19HTlVDX18gKi8KLSNkZWZpbmUgaW5saW5lCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFfX0dOVUNfXyAqLwotCi1zdHJ1Y3QgYXJjNF9zdHJlYW0gewotICAgICAgICB1X2ludDhfdCBpOwotICAgICAgICB1X2ludDhfdCBqOwotICAgICAgICB1X2ludDhfdCBzWzI1Nl07Ci19OwotCi1zdGF0aWMgaW50IHJzX2luaXRpYWxpemVkOwotc3RhdGljIHN0cnVjdCBhcmM0X3N0cmVhbSByczsKLXN0YXRpYyBwaWRfdCBhcmM0X3N0aXJfcGlkOwotc3RhdGljIGludCBhcmM0X2NvdW50OwotCi1zdGF0aWMgaW5saW5lIHVfaW50OF90IGFyYzRfZ2V0Ynl0ZSh2b2lkKTsKLQotc3RhdGljIGlubGluZSB2b2lkCi1hcmM0X2luaXQodm9pZCkKLXsKLSAgICAgICAgaW50ICAgICBuOwotCi0gICAgICAgIGZvciAobiA9IDA7IG4gPCAyNTY7IG4rKykKLSAgICAgICAgICAgICAgICBycy5zW25dID0gbjsKLSAgICAgICAgcnMuaSA9IDA7Ci0gICAgICAgIHJzLmogPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWFyYzRfYWRkcmFuZG9tKHVfY2hhciAqZGF0LCBpbnQgZGF0bGVuKQotewotICAgICAgICBpbnQgICAgIG47Ci0gICAgICAgIHVfaW50OF90IHNpOwotCi0gICAgICAgIHJzLmktLTsKLSAgICAgICAgZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKSB7Ci0gICAgICAgICAgICAgICAgcnMuaSA9IChycy5pICsgMSk7Ci0gICAgICAgICAgICAgICAgc2kgPSBycy5zW3JzLmldOwotICAgICAgICAgICAgICAgIHJzLmogPSAocnMuaiArIHNpICsgZGF0W24gJSBkYXRsZW5dKTsKLSAgICAgICAgICAgICAgICBycy5zW3JzLmldID0gcnMuc1tycy5qXTsKLSAgICAgICAgICAgICAgICBycy5zW3JzLmpdID0gc2k7Ci0gICAgICAgIH0KLSAgICAgICAgcnMuaiA9IHJzLmk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hcmM0X3N0aXIodm9pZCkKLXsKLSNpZiAxICAvKiBCSU9OSUMtQkVHSU4gKi8KLQlpbnQgICAgIGksIGZkOwotCXVuaW9uIHsKLQkJc3RydWN0IHRpbWV2YWwgdHY7Ci0JCXVfaW50IHJuZFsxMjggLyBzaXplb2YodV9pbnQpXTsKLQl9ICAgICAgIHJkYXQ7Ci0JaW50CW47Ci0KLSAgICAgICAgaWYgKCFyc19pbml0aWFsaXplZCkgewotICAgICAgICAgICAgICAgIGFyYzRfaW5pdCgpOwotICAgICAgICAgICAgICAgIHJzX2luaXRpYWxpemVkID0gMTsKLSAgICAgICAgfQotCi0JZmQgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7Ci0JaWYgKGZkICE9IC0xKSB7Ci0JCXJlYWQoZmQsIHJkYXQucm5kLCBzaXplb2YocmRhdC5ybmQpKTsKLQkJY2xvc2UoZmQpOwotCX0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0JICAgIC8qIGZkIDwgMCA/ICBBaCwgd2hhdCB0aGUgaGVjay4gV2UnbGwganVzdCB0YWtlCi0JICAgICAqIHdoYXRldmVyIHdhcyBvbiB0aGUgc3RhY2suIGp1c3QgYWRkIGEgbGl0dGxlIG1vcmUKLSAgICAgICAgICAgICAqIHRpbWUtYmFzZWQgcmFuZG9tbmVzcyB0aG91Z2gKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZ2V0dGltZW9mZGF5KCZyZGF0LnR2LCBOVUxMKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFyYzRfc3Rpcl9waWQgPSBnZXRwaWQoKTsKLQlhcmM0X2FkZHJhbmRvbSgodm9pZCAqKSAmcmRhdCwgc2l6ZW9mKHJkYXQpKTsKLSNlbHNlICAvKiBCSU9OSUMtRU5EICovCi0gICAgICAgIGludCAgICAgaSwgbWliWzJdOwotICAgICAgICBzaXplX3QgICAgICAgIGxlbjsKLSAgICAgICAgdV9jaGFyIHJuZFsxMjhdOwotCi0gICAgICAgIGlmICghcnNfaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgICAgICBhcmM0X2luaXQoKTsKLSAgICAgICAgICAgICAgICByc19pbml0aWFsaXplZCA9IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBtaWJbMF0gPSBDVExfS0VSTjsKLSAgICAgICAgbWliWzFdID0gS0VSTl9BUk5EOwotCi0gICAgICAgIGxlbiA9IHNpemVvZihybmQpOwotICAgICAgICBzeXNjdGwobWliLCAyLCBybmQsICZsZW4sIE5VTEwsIDApOwotCi0gICAgICAgIGFyYzRfc3Rpcl9waWQgPSBnZXRwaWQoKTsKLSAgICAgICAgYXJjNF9hZGRyYW5kb20ocm5kLCBzaXplb2Yocm5kKSk7Ci0jZW5kaWYKLSAgICAgICAgLyoKLSAgICAgICAgICogRGlzY2FyZCBlYXJseSBrZXlzdHJlYW0sIGFzIHBlciByZWNvbW1lbmRhdGlvbnMgaW46Ci0gICAgICAgICAqIGh0dHA6Ly93d3cud2lzZG9tLndlaXptYW5uLmFjLmlsL35pdHNpay9SQzQvUGFwZXJzL1JjNF9rc2EucHMKLSAgICAgICAgICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLSAgICAgICAgICAgICAgICAodm9pZClhcmM0X2dldGJ5dGUoKTsKLSAgICAgICAgYXJjNF9jb3VudCA9IDE2MDAwMDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdV9pbnQ4X3QKLWFyYzRfZ2V0Ynl0ZSh2b2lkKQotewotICAgICAgICB1X2ludDhfdCBzaSwgc2o7Ci0KLSAgICAgICAgcnMuaSA9IChycy5pICsgMSk7Ci0gICAgICAgIHNpID0gcnMuc1tycy5pXTsKLSAgICAgICAgcnMuaiA9IChycy5qICsgc2kpOwotICAgICAgICBzaiA9IHJzLnNbcnMual07Ci0gICAgICAgIHJzLnNbcnMuaV0gPSBzajsKLSAgICAgICAgcnMuc1tycy5qXSA9IHNpOwotICAgICAgICByZXR1cm4gKHJzLnNbKHNpICsgc2opICYgMHhmZl0pOwotfQotCi11X2ludDhfdAotX19hcmM0X2dldGJ5dGUodm9pZCkKLXsKLSAgICAgICAgdV9pbnQ4X3QgdmFsOwotCi0gICAgICAgIF9BUkM0X0xPQ0soKTsKLSAgICAgICAgaWYgKC0tYXJjNF9jb3VudCA9PSAwIHx8ICFyc19pbml0aWFsaXplZCkKLSAgICAgICAgICAgICAgICBhcmM0X3N0aXIoKTsKLSAgICAgICAgdmFsID0gYXJjNF9nZXRieXRlKCk7Ci0gICAgICAgIF9BUkM0X1VOTE9DSygpOwotICAgICAgICByZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgaW5saW5lIHVfaW50MzJfdAotYXJjNF9nZXR3b3JkKHZvaWQpCi17Ci0gICAgICAgIHVfaW50MzJfdCB2YWw7Ci0gICAgICAgIHZhbCA9IGFyYzRfZ2V0Ynl0ZSgpIDw8IDI0OwotICAgICAgICB2YWwgfD0gYXJjNF9nZXRieXRlKCkgPDwgMTY7Ci0gICAgICAgIHZhbCB8PSBhcmM0X2dldGJ5dGUoKSA8PCA4OwotICAgICAgICB2YWwgfD0gYXJjNF9nZXRieXRlKCk7Ci0gICAgICAgIHJldHVybiB2YWw7Ci19Ci0KLXZvaWQKLWFyYzRyYW5kb21fc3Rpcih2b2lkKQotewotICAgICAgICBfQVJDNF9MT0NLKCk7Ci0gICAgICAgIGFyYzRfc3RpcigpOwotICAgICAgICBfQVJDNF9VTkxPQ0soKTsKLX0KLQotdm9pZAotYXJjNHJhbmRvbV9hZGRyYW5kb20odV9jaGFyICpkYXQsIGludCBkYXRsZW4pCi17Ci0gICAgICAgIF9BUkM0X0xPQ0soKTsKLSAgICAgICAgaWYgKCFyc19pbml0aWFsaXplZCkKLSAgICAgICAgICAgICAgICBhcmM0X3N0aXIoKTsKLSAgICAgICAgYXJjNF9hZGRyYW5kb20oZGF0LCBkYXRsZW4pOwotICAgICAgICBfQVJDNF9VTkxPQ0soKTsKLX0KLQotdV9pbnQzMl90Ci1hcmM0cmFuZG9tKHZvaWQpCi17Ci0gICAgICAgIHVfaW50MzJfdCB2YWw7Ci0gICAgICAgIF9BUkM0X0xPQ0soKTsKLSAgICAgICAgYXJjNF9jb3VudCAtPSA0OwotICAgICAgICBpZiAoYXJjNF9jb3VudCA8PSAwIHx8ICFyc19pbml0aWFsaXplZCB8fCBhcmM0X3N0aXJfcGlkICE9IGdldHBpZCgpKQotICAgICAgICAgICAgICAgIGFyYzRfc3RpcigpOwotICAgICAgICB2YWwgPSBhcmM0X2dldHdvcmQoKTsKLSAgICAgICAgX0FSQzRfVU5MT0NLKCk7Ci0gICAgICAgIHJldHVybiB2YWw7Ci19Ci0KLXZvaWQKLWFyYzRyYW5kb21fYnVmKHZvaWQgKl9idWYsIHNpemVfdCBuKQotewotICAgICAgICB1X2NoYXIgKmJ1ZiA9ICh1X2NoYXIgKilfYnVmOwotICAgICAgICBfQVJDNF9MT0NLKCk7Ci0gICAgICAgIGlmICghcnNfaW5pdGlhbGl6ZWQgfHwgYXJjNF9zdGlyX3BpZCAhPSBnZXRwaWQoKSkKLSAgICAgICAgICAgICAgICBhcmM0X3N0aXIoKTsKLSAgICAgICAgd2hpbGUgKG4tLSkgewotICAgICAgICAgICAgICAgIGlmICgtLWFyYzRfY291bnQgPD0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyYzRfc3RpcigpOwotICAgICAgICAgICAgICAgIGJ1ZltuXSA9IGFyYzRfZ2V0Ynl0ZSgpOwotICAgICAgICB9Ci0gICAgICAgIF9BUkM0X1VOTE9DSygpOwotfQotCi0vKgotICogQ2FsY3VsYXRlIGEgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIHJhbmRvbSBudW1iZXIgbGVzcyB0aGFuIHVwcGVyX2JvdW5kCi0gKiBhdm9pZGluZyAibW9kdWxvIGJpYXMiLgotICoKLSAqIFVuaWZvcm1pdHkgaXMgYWNoaWV2ZWQgYnkgZ2VuZXJhdGluZyBuZXcgcmFuZG9tIG51bWJlcnMgdW50aWwgdGhlIG9uZQotICogcmV0dXJuZWQgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWzAsIDIqKjMyICUgdXBwZXJfYm91bmQpLiAgVGhpcwotICogZ3VhcmFudGVlcyB0aGUgc2VsZWN0ZWQgcmFuZG9tIG51bWJlciB3aWxsIGJlIGluc2lkZQotICogWzIqKjMyICUgdXBwZXJfYm91bmQsIDIqKjMyKSB3aGljaCBtYXBzIGJhY2sgdG8gWzAsIHVwcGVyX2JvdW5kKQotICogYWZ0ZXIgcmVkdWN0aW9uIG1vZHVsbyB1cHBlcl9ib3VuZC4KLSAqLwotdV9pbnQzMl90Ci1hcmM0cmFuZG9tX3VuaWZvcm0odV9pbnQzMl90IHVwcGVyX2JvdW5kKQotewotICAgICAgICB1X2ludDMyX3QgciwgbWluOwotCi0gICAgICAgIGlmICh1cHBlcl9ib3VuZCA8IDIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSNpZiAoVUxPTkdfTUFYID4gMHhmZmZmZmZmZlVMKQotICAgICAgICBtaW4gPSAweDEwMDAwMDAwMFVMICUgdXBwZXJfYm91bmQ7Ci0jZWxzZQotICAgICAgICAvKiBDYWxjdWxhdGUgKDIqKjMyICUgdXBwZXJfYm91bmQpIGF2b2lkaW5nIDY0LWJpdCBtYXRoICovCi0gICAgICAgIGlmICh1cHBlcl9ib3VuZCA+IDB4ODAwMDAwMDApCi0gICAgICAgICAgICAgICAgbWluID0gMSArIH51cHBlcl9ib3VuZDsgICAgICAgICAgICAgICAgLyogMioqMzIgLSB1cHBlcl9ib3VuZCAqLwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiAoMioqMzIgLSAoeCAqIDIpKSAlIHggPT0gMioqMzIgJSB4IHdoZW4geCA8PSAyKiozMSAqLwotICAgICAgICAgICAgICAgIG1pbiA9ICgoMHhmZmZmZmZmZiAtICh1cHBlcl9ib3VuZCAqIDIpKSArIDEpICUgdXBwZXJfYm91bmQ7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgY291bGQgdGhlb3JldGljYWxseSBsb29wIGZvcmV2ZXIgYnV0IGVhY2ggcmV0cnkgaGFzCi0gICAgICAgICAqIHAgPiAwLjUgKHdvcnN0IGNhc2UsIHVzdWFsbHkgZmFyIGJldHRlcikgb2Ygc2VsZWN0aW5nIGEKLSAgICAgICAgICogbnVtYmVyIGluc2lkZSB0aGUgcmFuZ2Ugd2UgbmVlZCwgc28gaXQgc2hvdWxkIHJhcmVseSBuZWVkCi0gICAgICAgICAqIHRvIHJlLXJvbGwuCi0gICAgICAgICAqLwotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgciA9IGFyYzRyYW5kb20oKTsKLSAgICAgICAgICAgICAgICBpZiAociA+PSBtaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByICUgdXBwZXJfYm91bmQ7Ci19Ci0KLSNpZiAwCi0vKi0tLS0tLS0tIFRlc3QgY29kZSBmb3IgaTM4NiAtLS0tLS0tLSovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxtYWNoaW5lL3BjdHIuaD4KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgICAgIGNvbnN0IGludCBpdGVyID0gMTAwMDAwMDsKLSAgICAgICAgaW50ICAgICBpOwotICAgICAgICBwY3RydmFsIHY7Ci0KLSAgICAgICAgdiA9IHJkdHNjKCk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVyOyBpKyspCi0gICAgICAgICAgICAgICAgYXJjNHJhbmRvbSgpOwotICAgICAgICB2ID0gcmR0c2MoKSAtIHY7Ci0gICAgICAgIHYgLz0gaXRlcjsKLQotICAgICAgICBwcmludGYoIiVxZCBjeWNsZXNcbiIsIHYpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9hc3NlcnQuY3BwIGIvbGliYy9iaW9uaWMvYXNzZXJ0LmNwcAppbmRleCBiYTY3MTQzLi45ODVmYzM4IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9hc3NlcnQuY3BwCisrKyBiL2xpYmMvYmlvbmljL2Fzc2VydC5jcHAKQEAgLTM0LDEwICszNCwxMiBAQAogCiB2b2lkIF9fYXNzZXJ0KGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmYWlsZWRfZXhwcmVzc2lvbikgewogICBfX2xpYmNfZmF0YWwoIiVzOiVkOiBhc3NlcnRpb24gXCIlc1wiIGZhaWxlZCIsIGZpbGUsIGxpbmUsIGZhaWxlZF9leHByZXNzaW9uKTsKLSAgLyogTk9UUkVBQ0hFRCAqLwogfQogCiB2b2lkIF9fYXNzZXJ0Mihjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGZhaWxlZF9leHByZXNzaW9uKSB7CiAgIF9fbGliY19mYXRhbCgiJXM6JWQ6ICVzOiBhc3NlcnRpb24gXCIlc1wiIGZhaWxlZCIsIGZpbGUsIGxpbmUsIGZ1bmN0aW9uLCBmYWlsZWRfZXhwcmVzc2lvbik7Ci0gIC8qIE5PVFJFQUNIRUQgKi8KK30KKworZXh0ZXJuICJDIiBfX0xJQkNfSElEREVOX18gdm9pZCBsb25nam1wZXJyb3IoKSB7CisgIF9fbGliY19mYXRhbCgibG9uZ2ptcCBib3RjaCIpOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYXRvZi5jcHAgYi9saWJjL2Jpb25pYy9hdG9mLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzdjY2RkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvYXRvZi5jcHAKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2RvdWJsZSBhdG9mKGNvbnN0IGNoYXIqIHMpIHsKKyAgLy8gRGVzcGl0ZSB0aGUgJ2YnIGluIHRoZSBuYW1lLCB0aGlzIHJldHVybnMgYSBkb3VibGUgYW5kIGlzCisgIC8vIHNwZWNpZmllZCB0byBiZSBlcXVpdmFsZW50IHRvIHN0cnRvZC4KKyAgcmV0dXJuIHN0cnRvZChzLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2F0b2kuYyBiL2xpYmMvYmlvbmljL2F0b2kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE2NTU0My4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9hdG9pLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLQotaW50ICBhdG9pKGNvbnN0IGNoYXIqICBzKQotewotICAgIHJldHVybiAoaW50KXN0cnRvaW1heChzLCBOVUxMLCAxMCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9hdG9sLmMgYi9saWJjL2Jpb25pYy9hdG9sLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZGMwNWMuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvYXRvbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0KLWxvbmcgIGF0b2woY29uc3QgY2hhciogIHMpCi17Ci0gICAgcmV0dXJuIChsb25nKXN0cnRvaW1heChzLCBOVUxMLCAxMCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9hdG9sbC5jIGIvbGliYy9iaW9uaWMvYXRvbGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUzODc4Zi4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9hdG9sbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0KLWxvbmcgbG9uZyBhdG9sbChjb25zdCBjaGFyKiAgcykKLXsKLSAgICByZXR1cm4gKGxvbmcgbG9uZylzdHJ0b2ltYXgocywgTlVMTCwgMTApOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYnJrLmNwcCBiL2xpYmMvYmlvbmljL2Jyay5jcHAKaW5kZXggNjMzYjkxNC4uNGU0NjE5MyAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvYnJrLmNwcAorKysgYi9saWJjL2Jpb25pYy9icmsuY3BwCkBAIC0yNiwxNiArMjYsNDkgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKKyNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCi0vKiBTaGFyZWQgd2l0aCBzYnJrLmMuICovCi1leHRlcm4gIkMiIHZvaWQqIF9fYmlvbmljX2JyazsgLy8gVE9ETzogc2hvdWxkIGJlIF9fTElCQ19ISURERU5fXyBidXQgYWNjaWRlbnRhbGx5IGV4cG9ydGVkIGJ5IE5ESyA6LSgKKyNpZiBfX0xQNjRfXworc3RhdGljIHZvaWQqIF9fYmlvbmljX2JyazsKKyNlbHNlCit2b2lkKiBfX2Jpb25pY19icms7IC8vIEFjY2lkZW50YWxseSBleHBvcnRlZCBieSB0aGUgTkRLLgorI2VuZGlmCiAKIGludCBicmsodm9pZCogZW5kX2RhdGEpIHsKLSAgdm9pZCogbmV3X2JyayA9IF9fYnJrKGVuZF9kYXRhKTsKLSAgaWYgKG5ld19icmsgIT0gZW5kX2RhdGEpIHsKKyAgX19iaW9uaWNfYnJrID0gX19icmsoZW5kX2RhdGEpOworICBpZiAoX19iaW9uaWNfYnJrIDwgZW5kX2RhdGEpIHsKKyAgICBlcnJubyA9IEVOT01FTTsKICAgICByZXR1cm4gLTE7CiAgIH0KLSAgX19iaW9uaWNfYnJrID0gbmV3X2JyazsKICAgcmV0dXJuIDA7CiB9CisKK3ZvaWQqIHNicmsocHRyZGlmZl90IGluY3JlbWVudCkgeworICAvLyBJbml0aWFsaXplIF9fYmlvbmljX2JyayBpZiBuZWNlc3NhcnkuCisgIGlmIChfX2Jpb25pY19icmsgPT0gTlVMTCkgeworICAgIF9fYmlvbmljX2JyayA9IF9fYnJrKE5VTEwpOworICB9CisKKyAgLy8gRG9uJ3QgYXNrIHRoZSBrZXJuZWwgaWYgd2UgYWxyZWFkeSBrbm93IHRoZSBhbnN3ZXIuCisgIGlmIChpbmNyZW1lbnQgPT0gMCkgeworICAgIHJldHVybiBfX2Jpb25pY19icms7CisgIH0KKworICAvLyBBdm9pZCBvdmVyZmxvdy4KKyAgdWludHB0cl90IG9sZF9icmsgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oX19iaW9uaWNfYnJrKTsKKyAgaWYgKChpbmNyZW1lbnQgPiAwICYmIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oaW5jcmVtZW50KSA+IChVSU5UUFRSX01BWCAtIG9sZF9icmspKSB8fAorICAgICAgKGluY3JlbWVudCA8IDAgJiYgc3RhdGljX2Nhc3Q8dWludHB0cl90PigtaW5jcmVtZW50KSA+IG9sZF9icmspKSB7CisgICAgZXJybm8gPSBFTk9NRU07CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKTsKKyAgfQorCisgIHZvaWQqIGRlc2lyZWRfYnJrID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob2xkX2JyayArIGluY3JlbWVudCk7CisgIF9fYmlvbmljX2JyayA9IF9fYnJrKGRlc2lyZWRfYnJrKTsKKyAgaWYgKF9fYmlvbmljX2JyayA8IGRlc2lyZWRfYnJrKSB7CisgICAgZXJybm8gPSBFTk9NRU07CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKTsKKyAgfQorCisgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihvbGRfYnJrKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2MxNnJ0b21iLmNwcCBiL2xpYmMvYmlvbmljL2MxNnJ0b21iLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzUxMmJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvYzE2cnRvbWIuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dWNoYXIuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfbWJzdGF0ZS5oIgorCitzdGF0aWMgaW5saW5lIGNvbnN0ZXhwciBib29sIGlzX2hpZ2hfc3Vycm9nYXRlKGNoYXIxNl90IGMxNikgeworICByZXR1cm4gYzE2ID49IDB4ZDgwMCAmJiBjMTYgPCAweGRjMDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3RleHByIGJvb2wgaXNfbG93X3N1cnJvZ2F0ZShjaGFyMTZfdCBjMTYpIHsKKyAgcmV0dXJuIGMxNiA+PSAweGRjMDAgJiYgYzE2IDwgMHhlMDAwOworfQorCitzaXplX3QgYzE2cnRvbWIoY2hhciogcywgY2hhcjE2X3QgYzE2LCBtYnN0YXRlX3QqIHBzKSB7CisgIHN0YXRpYyBtYnN0YXRlX3QgX19wcml2YXRlX3N0YXRlOworICBtYnN0YXRlX3QqIHN0YXRlID0gKHBzID09IE5VTEwpID8gJl9fcHJpdmF0ZV9zdGF0ZSA6IHBzOworICBpZiAobWJzaW5pdChzdGF0ZSkpIHsKKyAgICBpZiAoaXNfaGlnaF9zdXJyb2dhdGUoYzE2KSkgeworICAgICAgY2hhcjMyX3QgYzMyID0gKGMxNiAmIH4weGQ4MDApIDw8IDEwOworICAgICAgbWJzdGF0ZV9zZXRfYnl0ZShzdGF0ZSwgMywgKGMzMiAmIDB4ZmYwMDAwKSA+PiAxNik7CisgICAgICBtYnN0YXRlX3NldF9ieXRlKHN0YXRlLCAyLCAoYzMyICYgMHgwMGZmMDApID4+IDgpOworICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIGlmIChpc19sb3dfc3Vycm9nYXRlKGMxNikpIHsKKyAgICAgIHJldHVybiByZXNldF9hbmRfcmV0dXJuX2lsbGVnYWwoRUlOVkFMLCBzdGF0ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBjMzJydG9tYihzLCBzdGF0aWNfY2FzdDxjaGFyMzJfdD4oYzE2KSwgc3RhdGUpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAoIWlzX2xvd19zdXJyb2dhdGUoYzE2KSkgeworICAgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm5faWxsZWdhbChFSU5WQUwsIHN0YXRlKTsKKyAgICB9CisKKyAgICBjaGFyMzJfdCBjMzIgPSAoKG1ic3RhdGVfZ2V0X2J5dGUoc3RhdGUsIDMpIDw8IDE2KSB8CisgICAgICAgICAgICAgICAgICAgIChtYnN0YXRlX2dldF9ieXRlKHN0YXRlLCAyKSA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgIChjMTYgJiB+MHhkYzAwKSkgKyAweDEwMDAwOworICAgIHJldHVybiByZXNldF9hbmRfcmV0dXJuKGMzMnJ0b21iKHMsIGMzMiwgTlVMTCksIHN0YXRlKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYzMycnRvbWIuY3BwIGIvbGliYy9iaW9uaWMvYzMycnRvbWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMjMxYzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9jMzJydG9tYi5jcHAKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1Y2hhci5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19tYnN0YXRlLmgiCisKK3NpemVfdCBjMzJydG9tYihjaGFyKiBzLCBjaGFyMzJfdCBjMzIsIG1ic3RhdGVfdCogcHMpIHsKKyAgc3RhdGljIG1ic3RhdGVfdCBfX3ByaXZhdGVfc3RhdGU7CisgIG1ic3RhdGVfdCogc3RhdGUgPSAocHMgPT0gTlVMTCkgPyAmX19wcml2YXRlX3N0YXRlIDogcHM7CisKKyAgaWYgKHMgPT0gTlVMTCkgeworICAgIC8vIEVxdWl2YWxlbnQgdG8gYzMycnRvbWIoYnVmLCBVJ1wwJywgcHMpLgorICAgIHJldHVybiByZXNldF9hbmRfcmV0dXJuKDEsIHN0YXRlKTsKKyAgfQorCisgIC8vIFBPU0lYIHN0YXRlcyB0aGF0IGlmIGNoYXIzMl90IGlzIGEgbnVsbCB3aWRlIGNoYXJhY3RlciwgYSBudWxsIGJ5dGUgc2hhbGwKKyAgLy8gYmUgc3RvcmVkLCBwcmVjZWRlZCBieSBhbnkgc2hpZnQgc2VxdWVuY2UgbmVlZGVkIHRvIHJlc3RvcmUgdGhlIGluaXRpYWwKKyAgLy8gc2hpZnQgc3RhdGUuIFNpbmNlIHNoaWZ0IHN0YXRlcyBhcmUgbm90IHN1cHBvcnRlZCwgb25seSB0aGUgbnVsbCBieXRlIGlzCisgIC8vIHN0b3JlZC4KKyAgaWYgKGMzMiA9PSBVJ1wwJykgeworICAgICpzID0gJ1wwJzsKKyAgICByZXNldF9hbmRfcmV0dXJuKDEsIHN0YXRlKTsKKyAgfQorCisgIGlmICghbWJzaW5pdChzdGF0ZSkpIHsKKyAgICByZXR1cm4gcmVzZXRfYW5kX3JldHVybl9pbGxlZ2FsKEVJTFNFUSwgc3RhdGUpOworICB9CisKKyAgaWYgKChjMzIgJiB+MHg3ZikgPT0gMCkgeworICAgIC8vIEZhc3QgcGF0aCBmb3IgcGxhaW4gQVNDSUkgY2hhcmFjdGVycy4KKyAgICAqcyA9IGMzMjsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIG9jdGV0cyBuZWVkZWQgdG8gcmVwcmVzZW50IHRoaXMgY2hhcmFjdGVyLgorICAvLyBXZSBhbHdheXMgb3V0cHV0IHRoZSBzaG9ydGVzdCBzZXF1ZW5jZSBwb3NzaWJsZS4gQWxzbyBzcGVjaWZ5IHRoZQorICAvLyBmaXJzdCBmZXcgYml0cyBvZiB0aGUgZmlyc3Qgb2N0ZXQsIHdoaWNoIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbgorICAvLyBhYm91dCB0aGUgc2VxdWVuY2UgbGVuZ3RoLgorICB1aW50OF90IGxlYWQ7CisgIHNpemVfdCBsZW5ndGg7CisgIGlmICgoYzMyICYgfjB4N2YpID09IDApIHsKKyAgICBsZWFkID0gMDsKKyAgICBsZW5ndGggPSAxOworICB9IGVsc2UgaWYgKChjMzIgJiB+MHg3ZmYpID09IDApIHsKKyAgICBsZWFkID0gMHhjMDsKKyAgICBsZW5ndGggPSAyOworICB9IGVsc2UgaWYgKChjMzIgJiB+MHhmZmZmKSA9PSAwKSB7CisgICAgbGVhZCA9IDB4ZTA7CisgICAgbGVuZ3RoID0gMzsKKyAgfSBlbHNlIGlmICgoYzMyICYgfjB4MWZmZmZmKSA9PSAwKSB7CisgICAgbGVhZCA9IDB4ZjA7CisgICAgbGVuZ3RoID0gNDsKKyAgfSBlbHNlIHsKKyAgICBlcnJubyA9IEVJTFNFUTsKKyAgICByZXR1cm4gX19NQl9FUlJfSUxMRUdBTF9TRVFVRU5DRTsKKyAgfQorCisgIC8vIE91dHB1dCB0aGUgb2N0ZXRzIHJlcHJlc2VudGluZyB0aGUgY2hhcmFjdGVyIGluIGNodW5rcworICAvLyBvZiA2IGJpdHMsIGxlYXN0IHNpZ25pZmljYW50IGxhc3QuIFRoZSBmaXJzdCBvY3RldCBpcworICAvLyBhIHNwZWNpYWwgY2FzZSBiZWNhdXNlIGl0IGNvbnRhaW5zIHRoZSBzZXF1ZW5jZSBsZW5ndGgKKyAgLy8gaW5mb3JtYXRpb24uCisgIGZvciAoc2l6ZV90IGkgPSBsZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7CisgICAgc1tpXSA9IChjMzIgJiAweDNmKSB8IDB4ODA7CisgICAgYzMyID4+PSA2OworICB9CisgICpzID0gKGMzMiAmIDB4ZmYpIHwgbGVhZDsKKworICByZXR1cm4gbGVuZ3RoOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvY2xlYXJlbnYuYyBiL2xpYmMvYmlvbmljL2NsZWFyZW52LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNmYwNjYuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvY2xlYXJlbnYuYworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGRlZi5oPgotCi1leHRlcm4gY2hhcioqIGVudmlyb247Ci0KLWludCBjbGVhcmVudih2b2lkKQotewotICAgIGNoYXIgKipQID0gZW52aXJvbjsKLQotICAgIGlmIChQICE9IE5VTEwpIHsKLSAgICAgICAgZm9yICg7ICpQOyArK1ApCi0gICAgICAgICAgICAqUCA9IE5VTEw7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvY2xlYXJlbnYuY3BwIGIvbGliYy9iaW9uaWMvY2xlYXJlbnYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MGNjM2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9jbGVhcmVudi5jcHAKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2ludCBjbGVhcmVudigpIHsKKyAgY2hhcioqIGUgPSBlbnZpcm9uOworICBpZiAoZSAhPSBOVUxMKSB7CisgICAgZm9yICg7ICplOyArK2UpIHsKKyAgICAgICplID0gTlVMTDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9jbG9jay5jcHAgYi9saWJjL2Jpb25pYy9jbG9jay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJkMzJmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2Nsb2NrLmNwcApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NvbmYuaD4KKyNpbmNsdWRlIDxzeXMvdGltZXMuaD4KKworI2RlZmluZSBOU19QRVJfUyAxMDAwMDAwMDAwIC8vIE5vICJwcml2YXRlL2Jpb25pY19jb25zdGFudHMuaCIgaW4gbG1wLWRldi4KKworLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL2Nsb2NrLmh0bWwKK2Nsb2NrX3QgY2xvY2soKSB7CisgIHRpbWVzcGVjIHRzOworICBpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQsICZ0cykgPT0gLTEpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgcmV0dXJuICh0cy50dl9zZWMgKiBDTE9DS1NfUEVSX1NFQykgKyAodHMudHZfbnNlYyAvIChOU19QRVJfUyAvIENMT0NLU19QRVJfU0VDKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9jbG9uZS5jcHAgYi9saWJjL2Jpb25pYy9jbG9uZS5jcHAKaW5kZXggMWQ5OTdmZS4uMGEwZmRkNSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvY2xvbmUuY3BwCisrKyBiL2xpYmMvYmlvbmljL2Nsb25lLmNwcApAQCAtMzEsMTEgKzMxLDEzIEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAKKyNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCisKIGV4dGVybiAiQyIgcGlkX3QgX19iaW9uaWNfY2xvbmUodWludDMyX3QgZmxhZ3MsIHZvaWQqIGNoaWxkX3N0YWNrLCBpbnQqIHBhcmVudF90aWQsIHZvaWQqIHRscywgaW50KiBjaGlsZF90aWQsIGludCAoKmZuKSh2b2lkKiksIHZvaWQqIGFyZyk7Ci1leHRlcm4gIkMiIHZvaWQgX19leGl0KGludCBzdGF0dXMpOworZXh0ZXJuICJDIiBfX25vcmV0dXJuIHZvaWQgX19leGl0KGludCBzdGF0dXMpOwogCiAvLyBDYWxsZWQgZnJvbSB0aGUgX19iaW9uaWNfY2xvbmUgYXNzZW1ibGVyIHRvIGNhbGwgdGhlIHRocmVhZCBmdW5jdGlvbiB0aGVuIGV4aXQuCi1leHRlcm4gIkMiIHZvaWQgX19iaW9uaWNfY2xvbmVfZW50cnkoaW50ICgqZm4pKHZvaWQqKSwgdm9pZCogYXJnKSB7CitleHRlcm4gIkMiIF9fTElCQ19ISURERU5fXyB2b2lkIF9fc3RhcnRfdGhyZWFkKGludCAoKmZuKSh2b2lkKiksIHZvaWQqIGFyZykgewogICBpbnQgc3RhdHVzID0gKCpmbikoYXJnKTsKICAgX19leGl0KHN0YXR1cyk7CiB9CkBAIC01OSw1ICs2MSwyMyBAQAogICB9CiAgIHZhX2VuZChhcmdzKTsKIAotICByZXR1cm4gX19iaW9uaWNfY2xvbmUoZmxhZ3MsIGNoaWxkX3N0YWNrLCBwYXJlbnRfdGlkLCBuZXdfdGxzLCBjaGlsZF90aWQsIGZuLCBhcmcpOworICAvLyBBbGlnbiAnY2hpbGRfc3RhY2snIHRvIDE2IGJ5dGVzLgorICB1aW50cHRyX3QgY2hpbGRfc3RhY2tfYWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjaGlsZF9zdGFjayk7CisgIGNoaWxkX3N0YWNrX2FkZHIgJj0gfjB4ZjsKKyAgY2hpbGRfc3RhY2sgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihjaGlsZF9zdGFja19hZGRyKTsKKworICAvLyBSZW1lbWJlciB0aGUgcGFyZW50IHBpZCBhbmQgaW52YWxpZGF0ZSB0aGUgY2FjaGVkIHZhbHVlIHdoaWxlIHdlIGNsb25lLgorICBwdGhyZWFkX2ludGVybmFsX3QqIHNlbGYgPSBfX2dldF90aHJlYWQoKTsKKyAgcGlkX3QgcGFyZW50X3BpZCA9IHNlbGYtPmludmFsaWRhdGVfY2FjaGVkX3BpZCgpOworCisgIC8vIEFjdHVhbGx5IGRvIHRoZSBjbG9uZS4KKyAgaW50IGNsb25lX3Jlc3VsdCA9IF9fYmlvbmljX2Nsb25lKGZsYWdzLCBjaGlsZF9zdGFjaywgcGFyZW50X3RpZCwgbmV3X3RscywgY2hpbGRfdGlkLCBmbiwgYXJnKTsKKworICAvLyBXZSdyZSB0aGUgcGFyZW50LCBzbyBwdXQgb3VyIGtub3duIHBpZCBiYWNrIGluIHBsYWNlLgorICAvLyBXZSBsZWF2ZSB0aGUgY2hpbGQgd2l0aG91dCBhIGNhY2hlZCBwaWQsIGJ1dDoKKyAgLy8gMS4gcHRocmVhZF9jcmVhdGUgZ2l2ZXMgaXRzIGNoaWxkcmVuIHRoZWlyIG93biBwdGhyZWFkX2ludGVybmFsX3Qgd2l0aCB0aGUgY29ycmVjdCBwaWQuCisgIC8vIDIuIGZvcmsgbWFrZXMgYSBjbG9uZSBzeXN0ZW0gY2FsbCBkaXJlY3RseS4KKyAgLy8gSWYgYW55IG90aGVyIGNhc2VzIGJlY29tZSBpbXBvcnRhbnQsIHdlIGNvdWxkIHVzZSBhIGRvdWJsZSB0cmFtcG9saW5lIGxpa2UgX19wdGhyZWFkX3N0YXJ0LgorICBzZWxmLT5zZXRfY2FjaGVkX3BpZChwYXJlbnRfcGlkKTsKKyAgcmV0dXJuIGNsb25lX3Jlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2Nvbm5lY3QuY3BwIGIvbGliYy9iaW9uaWMvY29ubmVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY3M2Y0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2Nvbm5lY3QuY3BwCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAicHJpdmF0ZS9OZXRkQ2xpZW50RGlzcGF0Y2guaCIKKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworaW50IGNvbm5lY3QoaW50IHNvY2tmZCwgY29uc3Qgc29ja2FkZHIqIGFkZHIsIHNvY2tsZW5fdCBhZGRybGVuKSB7CisgICAgcmV0dXJuIF9fbmV0ZENsaWVudERpc3BhdGNoLmNvbm5lY3Qoc29ja2ZkLCBhZGRyLCBhZGRybGVuKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2N0eXBlLmNwcCBiL2xpYmMvYmlvbmljL2N0eXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjMxZDUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvY3R5cGUuY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK2ludCBpc2FsbnVtX2woaW50IGMsIGxvY2FsZV90KSB7CisgIHJldHVybiBpc2FsbnVtKGMpOworfQorCitpbnQgaXNhbHBoYV9sKGludCBjLCBsb2NhbGVfdCkgeworICByZXR1cm4gaXNhbHBoYShjKTsKK30KKworaW50IGlzYmxhbmtfbChpbnQgYywgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIGlzYmxhbmsoYyk7Cit9CisKK2ludCBpc2NudHJsX2woaW50IGMsIGxvY2FsZV90KSB7CisgIHJldHVybiBpc2NudHJsKGMpOworfQorCitpbnQgaXNkaWdpdF9sKGludCBjLCBsb2NhbGVfdCkgeworICByZXR1cm4gaXNkaWdpdChjKTsKK30KKworaW50IGlzZ3JhcGhfbChpbnQgYywgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIGlzZ3JhcGgoYyk7Cit9CisKK2ludCBpc2xvd2VyX2woaW50IGMsIGxvY2FsZV90KSB7CisgIHJldHVybiBpc2xvd2VyKGMpOworfQorCitpbnQgaXNwcmludF9sKGludCBjLCBsb2NhbGVfdCkgeworICByZXR1cm4gaXNwcmludChjKTsKK30KKworaW50IGlzcHVuY3RfbChpbnQgYywgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIGlzcHVuY3QoYyk7Cit9CisKK2ludCBpc3NwYWNlX2woaW50IGMsIGxvY2FsZV90KSB7CisgIHJldHVybiBpc3NwYWNlKGMpOworfQorCitpbnQgaXN1cHBlcl9sKGludCBjLCBsb2NhbGVfdCkgeworICByZXR1cm4gaXN1cHBlcihjKTsKK30KKworaW50IGlzeGRpZ2l0X2woaW50IGMsIGxvY2FsZV90KSB7CisgIHJldHVybiBpc3hkaWdpdChjKTsKK30KKworaW50IHRvdXBwZXJfbChpbnQgYywgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIHRvdXBwZXIoYyk7Cit9CisKK2ludCB0b2xvd2VyX2woaW50IGMsIGxvY2FsZV90KSB7CisgIHJldHVybiB0b2xvd2VyKGMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZGVidWdfbWFwaW5mby5jcHAgYi9saWJjL2Jpb25pYy9kZWJ1Z19tYXBpbmZvLmNwcAppbmRleCBjNWI5YWE3Li5kODM3OTlhIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9kZWJ1Z19tYXBpbmZvLmNwcAorKysgYi9saWJjL2Jpb25pYy9kZWJ1Z19tYXBpbmZvLmNwcApAQCAtMjYsMzggKzI2LDQ4IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKLSNpbmNsdWRlICJkbG1hbGxvYy5oIgogI2luY2x1ZGUgImRlYnVnX21hcGluZm8uaCIKKyNpbmNsdWRlICJtYWxsb2NfZGVidWdfZGlzYWJsZS5oIgogCi0vLyA2ZjAwMDAwMC02ZjAxZTAwMCByd3hwIDAwMDAwMDAwIDAwOjBjIDE2Mzg5NDE5ICAgL3N5c3RlbS9saWIvbGliY29tcG9zZXIuc28KLS8vIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQotLy8gMCAgICAgICAgIDEgICAgICAgICAyICAgICAgICAgMyAgICAgICAgIDQgICAgICAgICA1Ci0KKy8vIEZvcm1hdCBvZiAvcHJvYy88UElEPi9tYXBzOgorLy8gICA2ZjAwMDAwMC02ZjAxZTAwMCByd3hwIDAwMDAwMDAwIDAwOjBjIDE2Mzg5NDE5ICAgL3N5c3RlbS9saWIvbGliY29tcG9zZXIuc28KIHN0YXRpYyBtYXBpbmZvX3QqIHBhcnNlX21hcHNfbGluZShjaGFyKiBsaW5lKSB7Ci0gIGludCBsZW4gPSBzdHJsZW4obGluZSk7CisgIHVpbnRwdHJfdCBzdGFydDsKKyAgdWludHB0cl90IGVuZDsKKyAgaW50IG5hbWVfcG9zOworICBpZiAoc3NjYW5mKGxpbmUsICIlIiBQUkl4UFRSICItJSIgUFJJeFBUUiAiICUqNHMgJSp4ICUqeDolKnggJSpkJW4iLCAmc3RhcnQsCisgICAgICAgICAgICAgJmVuZCwgJm5hbWVfcG9zKSA8IDIpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQogCi0gIGlmIChsZW4gPCAxKSByZXR1cm4gMDsKLSAgbGluZVstLWxlbl0gPSAwOworICB3aGlsZSAoaXNzcGFjZShsaW5lW25hbWVfcG9zXSkpIHsKKyAgICBuYW1lX3BvcyArPSAxOworICB9CisgIGNvbnN0IGNoYXIqIG5hbWUgPSBsaW5lICsgbmFtZV9wb3M7CisgIHNpemVfdCBuYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKKyAgaWYgKG5hbWVfbGVuICYmIG5hbWVbbmFtZV9sZW4gLSAxXSA9PSAnXG4nKSB7CisgICAgbmFtZV9sZW4gLT0gMTsKKyAgfQogCi0gIGlmIChsZW4gPCA1MCkgcmV0dXJuIDA7Ci0gIGlmIChsaW5lWzIwXSAhPSAneCcpIHJldHVybiAwOwotCi0gIG1hcGluZm9fdCogbWkgPSBzdGF0aWNfY2FzdDxtYXBpbmZvX3QqPihkbG1hbGxvYyhzaXplb2YobWFwaW5mb190KSArIChsZW4gLSA0NykpKTsKLSAgaWYgKG1pID09IDApIHJldHVybiAwOwotCi0gIG1pLT5zdGFydCA9IHN0cnRvdWwobGluZSwgMCwgMTYpOwotICBtaS0+ZW5kID0gc3RydG91bChsaW5lICsgOSwgMCwgMTYpOwotICBtaS0+bmV4dCA9IDA7Ci0gIHN0cmNweShtaS0+bmFtZSwgbGluZSArIDQ5KTsKLQorICBtYXBpbmZvX3QqIG1pID0gcmVpbnRlcnByZXRfY2FzdDxtYXBpbmZvX3QqPihjYWxsb2MoMSwgc2l6ZW9mKG1hcGluZm9fdCkgKyBuYW1lX2xlbiArIDEpKTsKKyAgaWYgKG1pKSB7CisgICAgbWktPnN0YXJ0ID0gc3RhcnQ7CisgICAgbWktPmVuZCA9IGVuZDsKKyAgICBtZW1jcHkobWktPm5hbWUsIG5hbWUsIG5hbWVfbGVuKTsKKyAgICBtaS0+bmFtZVtuYW1lX2xlbl0gPSAnXDAnOworICB9CiAgIHJldHVybiBtaTsKIH0KIAogX19MSUJDX0hJRERFTl9fIG1hcGluZm9fdCogbWFwaW5mb19jcmVhdGUocGlkX3QgcGlkKSB7CisgIFNjb3BlZERpc2FibGVEZWJ1Z0NhbGxzIGRpc2FibGU7CisKICAgc3RydWN0IG1hcGluZm9fdCogbWlsaXN0ID0gTlVMTDsKICAgY2hhciBkYXRhWzEwMjRdOyAvLyBVc2VkIHRvIHJlYWQgbGluZXMgYXMgd2VsbCBhcyB0byBjb25zdHJ1Y3QgdGhlIGZpbGVuYW1lLgogICBzbnByaW50ZihkYXRhLCBzaXplb2YoZGF0YSksICIvcHJvYy8lZC9tYXBzIiwgcGlkKTsKQEAgLTc2LDEwICs4NiwxMiBAQAogfQogCiBfX0xJQkNfSElEREVOX18gdm9pZCBtYXBpbmZvX2Rlc3Ryb3kobWFwaW5mb190KiBtaSkgeworICBTY29wZWREaXNhYmxlRGVidWdDYWxscyBkaXNhYmxlOworCiAgIHdoaWxlIChtaSAhPSBOVUxMKSB7CiAgICAgbWFwaW5mb190KiBkZWwgPSBtaTsKICAgICBtaSA9IG1pLT5uZXh0OwotICAgIGRsZnJlZShkZWwpOworICAgIGZyZWUoZGVsKTsKICAgfQogfQogCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9kZWJ1Z19tYXBpbmZvLmggYi9saWJjL2Jpb25pYy9kZWJ1Z19tYXBpbmZvLmgKaW5kZXggY2NjZDJlMy4uOTI2YjM3NyAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvZGVidWdfbWFwaW5mby5oCisrKyBiL2xpYmMvYmlvbmljL2RlYnVnX21hcGluZm8uaApAQCAtMzMsOCArMzMsOCBAQAogCiBzdHJ1Y3QgbWFwaW5mb190IHsKICAgc3RydWN0IG1hcGluZm9fdCogbmV4dDsKLSAgdW5zaWduZWQgc3RhcnQ7Ci0gIHVuc2lnbmVkIGVuZDsKKyAgdWludHB0cl90IHN0YXJ0OworICB1aW50cHRyX3QgZW5kOwogICBjaGFyIG5hbWVbXTsKIH07CiAKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2RlYnVnX3N0YWNrdHJhY2UuY3BwIGIvbGliYy9iaW9uaWMvZGVidWdfc3RhY2t0cmFjZS5jcHAKaW5kZXggNWRkYzAwYy4uYjg2ZTJhZiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvZGVidWdfc3RhY2t0cmFjZS5jcHAKKysrIGIvbGliYy9iaW9uaWMvZGVidWdfc3RhY2t0cmFjZS5jcHAKQEAgLTM1LDggKzM1LDE1IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKICNpbmNsdWRlICJkZWJ1Z19tYXBpbmZvLmgiCisjaW5jbHVkZSAibWFsbG9jX2RlYnVnX2Rpc2FibGUuaCIKICNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgogCisjaWYgZGVmaW5lZChfX0xQNjRfXykKKyNkZWZpbmUgUEFEX1BUUiAiMDE2IiBQUkl4UFRSCisjZWxzZQorI2RlZmluZSBQQURfUFRSICIwOCIgUFJJeFBUUgorI2VuZGlmCisKIC8qIGRlcGVuZHMgaG93IHRoZSBzeXN0ZW0gaW5jbHVkZXMgZGVmaW5lIHRoaXMgKi8KICNpZmRlZiBIQVZFX1VOV0lORF9DT05URVhUX1NUUlVDVAogdHlwZWRlZiBzdHJ1Y3QgX1Vud2luZF9Db250ZXh0IF9fdW53aW5kX2NvbnRleHQ7CkBAIC00NCwzMCArNTEsMzQgQEAKIHR5cGVkZWYgX1Vud2luZF9Db250ZXh0IF9fdW53aW5kX2NvbnRleHQ7CiAjZW5kaWYKIAotc3RhdGljIG1hcGluZm9fdCogZ01hcEluZm8gPSBOVUxMOwotc3RhdGljIHZvaWQqIGdEZW1hbmdsZXI7CitzdGF0aWMgbWFwaW5mb190KiBnX21hcF9pbmZvID0gTlVMTDsKK3N0YXRpYyB2b2lkKiBnX2RlbWFuZ2xlcjsKIHR5cGVkZWYgY2hhciogKCpEZW1hbmdsZXJGbikoY29uc3QgY2hhciosIGNoYXIqLCBzaXplX3QqLCBpbnQqKTsKLXN0YXRpYyBEZW1hbmdsZXJGbiBnRGVtYW5nbGVyRm4gPSBOVUxMOworc3RhdGljIERlbWFuZ2xlckZuIGdfZGVtYW5nbGVyX2ZuID0gTlVMTDsKIAogX19MSUJDX0hJRERFTl9fIHZvaWQgYmFja3RyYWNlX3N0YXJ0dXAoKSB7Ci0gIGdNYXBJbmZvID0gbWFwaW5mb19jcmVhdGUoZ2V0cGlkKCkpOwotICBnRGVtYW5nbGVyID0gZGxvcGVuKCJsaWJnY2NkZW1hbmdsZS5zbyIsIFJUTERfTk9XKTsKLSAgaWYgKGdEZW1hbmdsZXIgIT0gTlVMTCkgewotICAgIHZvaWQqIHN5bSA9IGRsc3ltKGdEZW1hbmdsZXIsICJfX2N4YV9kZW1hbmdsZSIpOwotICAgIGdEZW1hbmdsZXJGbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGVtYW5nbGVyRm4+KHN5bSk7CisgIFNjb3BlZERpc2FibGVEZWJ1Z0NhbGxzIGRpc2FibGU7CisKKyAgZ19tYXBfaW5mbyA9IG1hcGluZm9fY3JlYXRlKGdldHBpZCgpKTsKKyAgZ19kZW1hbmdsZXIgPSBkbG9wZW4oImxpYmdjY2RlbWFuZ2xlLnNvIiwgUlRMRF9OT1cpOworICBpZiAoZ19kZW1hbmdsZXIgIT0gTlVMTCkgeworICAgIHZvaWQqIHN5bSA9IGRsc3ltKGdfZGVtYW5nbGVyLCAiX19jeGFfZGVtYW5nbGUiKTsKKyAgICBnX2RlbWFuZ2xlcl9mbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGVtYW5nbGVyRm4+KHN5bSk7CiAgIH0KIH0KIAogX19MSUJDX0hJRERFTl9fIHZvaWQgYmFja3RyYWNlX3NodXRkb3duKCkgewotICBtYXBpbmZvX2Rlc3Ryb3koZ01hcEluZm8pOwotICBkbGNsb3NlKGdEZW1hbmdsZXIpOworICBTY29wZWREaXNhYmxlRGVidWdDYWxscyBkaXNhYmxlOworCisgIG1hcGluZm9fZGVzdHJveShnX21hcF9pbmZvKTsKKyAgZGxjbG9zZShnX2RlbWFuZ2xlcik7CiB9CiAKIHN0YXRpYyBjaGFyKiBkZW1hbmdsZShjb25zdCBjaGFyKiBzeW1ib2wpIHsKLSAgaWYgKGdEZW1hbmdsZXJGbiA9PSBOVUxMKSB7CisgIGlmIChnX2RlbWFuZ2xlcl9mbiA9PSBOVUxMKSB7CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KLSAgcmV0dXJuICgqZ0RlbWFuZ2xlckZuKShzeW1ib2wsIE5VTEwsIE5VTEwsIE5VTEwpOworICByZXR1cm4gKCpnX2RlbWFuZ2xlcl9mbikoc3ltYm9sLCBOVUxMLCBOVUxMLCBOVUxMKTsKIH0KIAogc3RydWN0IHN0YWNrX2NyYXdsX3N0YXRlX3QgewpAQCAtODEsMTggKzkyLDYgQEAKICAgfQogfTsKIAotI2lmIGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX1Vud2luZF9HZXRJUCkKLS8vIE9sZGVyIHZlcnNpb25zIG9mIENsYW5nIGRvbid0IHByb3ZpZGUgYSBkZWZpbml0aW9uIG9mIF9VbndpbmRfR2V0SVAoKSwgc28KLS8vIHdlIGluY2x1ZGUgYW4gYXBwcm9wcmlhdGUgdmVyc2lvbiBvZiBvdXIgb3duLiBPbmNlIHdlIGhhdmUgdXBkYXRlZCB0bwotLy8gQ2xhbmcgMy40LCB0aGlzIGNvZGUgY2FuIGJlIHJlbW92ZWQuCi1zdGF0aWMgX19pbmxpbmVfXwotdWludHB0cl90IF9VbndpbmRfR2V0SVAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqX19jb250ZXh0KSB7Ci0gIHVpbnRwdHJfdCBfX2lwID0gMDsKLSAgX1Vud2luZF9WUlNfR2V0KF9fY29udGV4dCwgX1VWUlNDX0NPUkUsIDE1LCBfVVZSU0RfVUlOVDMyLCAmX19pcCk7Ci0gIHJldHVybiBfX2lwICYgfjB4MTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgX1Vud2luZF9SZWFzb25fQ29kZSB0cmFjZV9mdW5jdGlvbihfX3Vud2luZF9jb250ZXh0KiBjb250ZXh0LCB2b2lkKiBhcmcpIHsKICAgc3RhY2tfY3Jhd2xfc3RhdGVfdCogc3RhdGUgPSBzdGF0aWNfY2FzdDxzdGFja19jcmF3bF9zdGF0ZV90Kj4oYXJnKTsKIApAQCAtMTA0LDcgKzEwMyw3IEBACiAgICAgcmV0dXJuIF9VUkNfTk9fUkVBU09OOwogICB9CiAKLSNpZmRlZiBfX2FybV9fCisjaWYgZGVmaW5lZChfX2FybV9fKQogICAvKgogICAgKiBUaGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciBpcyBwb2ludGluZyBhdCB0aGUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgdGhlIGJsKHgpLCBhbmQKICAgICogdGhlIF9VbndpbmRfQmFja3RyYWNlIHJvdXRpbmUgYWxyZWFkeSBtYXNrcyB0aGUgVGh1bWIgbW9kZSBpbmRpY2F0b3IgKExTQgpAQCAtMTI3LDEyICsxMjYsMTYgQEAKIH0KIAogX19MSUJDX0hJRERFTl9fIGludCBnZXRfYmFja3RyYWNlKHVpbnRwdHJfdCogZnJhbWVzLCBzaXplX3QgbWF4X2RlcHRoKSB7CisgIFNjb3BlZERpc2FibGVEZWJ1Z0NhbGxzIGRpc2FibGU7CisKICAgc3RhY2tfY3Jhd2xfc3RhdGVfdCBzdGF0ZShmcmFtZXMsIG1heF9kZXB0aCk7CiAgIF9VbndpbmRfQmFja3RyYWNlKHRyYWNlX2Z1bmN0aW9uLCAmc3RhdGUpOwogICByZXR1cm4gc3RhdGUuZnJhbWVfY291bnQ7CiB9CiAKIF9fTElCQ19ISURERU5fXyB2b2lkIGxvZ19iYWNrdHJhY2UodWludHB0cl90KiBmcmFtZXMsIHNpemVfdCBmcmFtZV9jb3VudCkgeworICBTY29wZWREaXNhYmxlRGVidWdDYWxscyBkaXNhYmxlOworCiAgIHVpbnRwdHJfdCBzZWxmX2J0WzE2XTsKICAgaWYgKGZyYW1lcyA9PSBOVUxMKSB7CiAgICAgZnJhbWVfY291bnQgPSBnZXRfYmFja3RyYWNlKHNlbGZfYnQsIDE2KTsKQEAgLTE1Miw4ICsxNTUsOCBAQAogICAgICAgc3ltYm9sID0gaW5mby5kbGlfc25hbWU7CiAgICAgfQogCi0gICAgdWludHB0cl90IHJlbF9wYzsKLSAgICBjb25zdCBtYXBpbmZvX3QqIG1pID0gKGdNYXBJbmZvICE9IE5VTEwpID8gbWFwaW5mb19maW5kKGdNYXBJbmZvLCBmcmFtZXNbaV0sICZyZWxfcGMpIDogTlVMTDsKKyAgICB1aW50cHRyX3QgcmVsX3BjID0gb2Zmc2V0OworICAgIGNvbnN0IG1hcGluZm9fdCogbWkgPSAoZ19tYXBfaW5mbyAhPSBOVUxMKSA/IG1hcGluZm9fZmluZChnX21hcF9pbmZvLCBmcmFtZXNbaV0sICZyZWxfcGMpIDogTlVMTDsKICAgICBjb25zdCBjaGFyKiBzb25hbWUgPSAobWkgIT0gTlVMTCkgPyBtaS0+bmFtZSA6IGluZm8uZGxpX2ZuYW1lOwogICAgIGlmIChzb25hbWUgPT0gTlVMTCkgewogICAgICAgc29uYW1lID0gIjx1bmtub3duPiI7CkBAIC0xNjQsMTkgKzE2NywxNCBAQAogICAgICAgY29uc3QgY2hhciogYmVzdF9uYW1lID0gKGRlbWFuZ2xlZF9zeW1ib2wgIT0gTlVMTCkgPyBkZW1hbmdsZWRfc3ltYm9sIDogc3ltYm9sOwogCiAgICAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19FUlJPUiwgImxpYmMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAjJTAyemQgIHBjICUwKiIgUFJJeFBUUiAiICAlcyAoJXMrJSIgUFJJdVBUUiAiKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PigyICogc2l6ZW9mKHZvaWQqKSksIHJlbF9wYywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RfbmFtZSwgZnJhbWVzW2ldIC0gb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgIyUwMnpkICBwYyAlIiBQQURfUFRSICIgICVzICglcyslIiBQUkl1UFRSICIpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGksIHJlbF9wYywgc29uYW1lLCBiZXN0X25hbWUsIGZyYW1lc1tpXSAtIG9mZnNldCk7CiAKICAgICAgIGZyZWUoZGVtYW5nbGVkX3N5bWJvbCk7CiAgICAgfSBlbHNlIHsKICAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0VSUk9SLCAibGliYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICMlMDJ6ZCAgcGMgJTAqIiBQUkl4UFRSICIgICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGksCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KDIgKiBzaXplb2Yodm9pZCopKSwgcmVsX3BjLAotICAgICAgICAgICAgICAgICAgICAgICAgc29uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgIyUwMnpkICBwYyAlIiBQQURfUFRSICIgICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGksIHJlbF9wYywgc29uYW1lKTsKICAgICB9CiAgIH0KIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2RpcmVudC5jcHAgYi9saWJjL2Jpb25pYy9kaXJlbnQuY3BwCmluZGV4IDA1NjU2OTguLjdhYmM3ZjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL2RpcmVudC5jcHAKKysrIGIvbGliYy9iaW9uaWMvZGlyZW50LmNwcApAQCAtMzcsNiArMzcsOCBAQAogI2luY2x1ZGUgInByaXZhdGUvRXJybm9SZXN0b3Jlci5oIgogI2luY2x1ZGUgInByaXZhdGUvU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmgiCiAKK2V4dGVybiAiQyIgaW50IF9fZ2V0ZGVudHM2NCh1bnNpZ25lZCBpbnQsIGRpcmVudCosIHVuc2lnbmVkIGludCk7CisKIHN0cnVjdCBESVIgewogICBpbnQgZmRfOwogICBzaXplX3QgYXZhaWxhYmxlX2J5dGVzXzsKQEAgLTgxLDcgKzgzLDcgQEAKIH0KIAogc3RhdGljIGJvb2wgX19maWxsX0RJUihESVIqIGQpIHsKLSAgaW50IHJjID0gVEVNUF9GQUlMVVJFX1JFVFJZKGdldGRlbnRzKGQtPmZkXywgZC0+YnVmZl8sIHNpemVvZihkLT5idWZmXykpKTsKKyAgaW50IHJjID0gVEVNUF9GQUlMVVJFX1JFVFJZKF9fZ2V0ZGVudHM2NChkLT5mZF8sIGQtPmJ1ZmZfLCBzaXplb2YoZC0+YnVmZl8pKSk7CiAgIGlmIChyYyA8PSAwKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CkBAIC0xMDUsNiArMTA3LDcgQEAKICAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZC0+bXV0ZXhfKTsKICAgcmV0dXJuIF9fcmVhZGRpcl9sb2NrZWQoZCk7CiB9CitfX3N0cm9uZ19hbGlhcyhyZWFkZGlyNjQsIHJlYWRkaXIpOwogCiBpbnQgcmVhZGRpcl9yKERJUiogZCwgZGlyZW50KiBlbnRyeSwgZGlyZW50KiogcmVzdWx0KSB7CiAgIEVycm5vUmVzdG9yZXIgZXJybm9fcmVzdG9yZXI7CkBAIC0xMjUsNiArMTI4LDcgQEAKICAgfQogICByZXR1cm4gMDsKIH0KK19fc3Ryb25nX2FsaWFzKHJlYWRkaXI2NF9yLCByZWFkZGlyX3IpOwogCiBpbnQgY2xvc2VkaXIoRElSKiBkKSB7CiAgIGlmIChkID09IE5VTEwpIHsKQEAgLTE0NywzICsxNTEsNCBAQAogaW50IGFscGhhc29ydChjb25zdCBkaXJlbnQqKiBhLCBjb25zdCBkaXJlbnQqKiBiKSB7CiAgIHJldHVybiBzdHJjb2xsKCgqYSktPmRfbmFtZSwgKCpiKS0+ZF9uYW1lKTsKIH0KK19fc3Ryb25nX2FsaWFzKGFscGhhc29ydDY0LCBhbHBoYXNvcnQpOwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZGxfaXRlcmF0ZV9waGRyX3N0YXRpYy5jIGIvbGliYy9iaW9uaWMvZGxfaXRlcmF0ZV9waGRyX3N0YXRpYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDNkM2QyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL2RsX2l0ZXJhdGVfcGhkcl9zdGF0aWMuYworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGVsZi5oPgotI2luY2x1ZGUgPHN5cy9hdXh2Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGluay5oPgotCi0vKiBsZCBwcm92aWRlcyB0aGlzIHRvIHVzIGluIHRoZSBkZWZhdWx0IGxpbmsgc2NyaXB0ICovCi1leHRlcm4gdm9pZCogX19leGVjdXRhYmxlX3N0YXJ0OwotCi1pbnQgZGxfaXRlcmF0ZV9waGRyKGludCAoKmNiKShzdHJ1Y3QgZGxfcGhkcl9pbmZvKiBpbmZvLCBzaXplX3Qgc2l6ZSwgdm9pZCogZGF0YSksIHZvaWQqIGRhdGEpIHsKLSAgICBFbGZfRWhkciogZWhkciA9IChFbGZfRWhkciopICZfX2V4ZWN1dGFibGVfc3RhcnQ7Ci0KLSAgICAvLyBUT0RPOiBhZ2FpbiwgY29waWVkIGZyb20gbGlua2VyLmMuIEZpbmQgYSBiZXR0ZXIgaG9tZSBmb3IgdGhpcyBsYXRlci4KLSAgICBpZiAoZWhkci0+ZV9pZGVudFtFSV9NQUcwXSAhPSBFTEZNQUcwKSByZXR1cm4gLTE7Ci0gICAgaWYgKGVoZHItPmVfaWRlbnRbRUlfTUFHMV0gIT0gRUxGTUFHMSkgcmV0dXJuIC0xOwotICAgIGlmIChlaGRyLT5lX2lkZW50W0VJX01BRzJdICE9IEVMRk1BRzIpIHJldHVybiAtMTsKLSAgICBpZiAoZWhkci0+ZV9pZGVudFtFSV9NQUczXSAhPSBFTEZNQUczKSByZXR1cm4gLTE7Ci0KLSAgICAvLyBEeW5hbWljIGJpbmFyaWVzIGdldCB0aGVpciBkbF9pdGVyYXRlX3BoZHIgZnJvbSB0aGUgZHluYW1pYyBsaW5rZXIsIGJ1dAotICAgIC8vIHN0YXRpYyBiaW5hcmllcyBnZXQgdGhpcy4gV2UgZG9uJ3QgaGF2ZSBhIGxpc3Qgb2Ygc2hhcmVkIG9iamVjdHMgdG8KLSAgICAvLyBpdGVyYXRlIG92ZXIsIHNpbmNlIHRoZXJlJ3MgcmVhbGx5IG9ubHkgYSBzaW5nbGUgbW9ub2xpdGhpYyBibG9iIG9mCi0gICAgLy8gY29kZS9kYXRhLCBwbHVzIG9wdGlvbmFsbHkgYSBWRFNPLgotCi0gICAgc3RydWN0IGRsX3BoZHJfaW5mbyBleGVfaW5mbzsKLSAgICBleGVfaW5mby5kbHBpX2FkZHIgPSAwOwotICAgIGV4ZV9pbmZvLmRscGlfbmFtZSA9IE5VTEw7Ci0gICAgZXhlX2luZm8uZGxwaV9waGRyID0gKEVsZl9QaGRyKikgKCh1bnNpZ25lZCBsb25nKSBlaGRyICsgZWhkci0+ZV9waG9mZik7Ci0gICAgZXhlX2luZm8uZGxwaV9waG51bSA9IGVoZHItPmVfcGhudW07Ci0KLSNpZmRlZiBBVF9TWVNJTkZPX0VIRFIKLSAgICAvLyBUcnkgdGhlIGV4ZWN1dGFibGUgZmlyc3QuCi0gICAgaW50IHJjID0gY2IoJmV4ZV9pbmZvLCBzaXplb2YoZXhlX2luZm8pLCBkYXRhKTsKLSAgICBpZiAocmMgIT0gMCkgewotICAgICAgICByZXR1cm4gcmM7Ci0gICAgfQotCi0gICAgLy8gVHJ5IHRoZSBWRFNPIGlmIHRoYXQgZGlkbid0IHdvcmsuCi0gICAgRWxmX0VoZHIqIGVoZHJfdmRzbyA9IChFbGZfRWhkciopIGdldGF1eHZhbChBVF9TWVNJTkZPX0VIRFIpOwotICAgIHN0cnVjdCBkbF9waGRyX2luZm8gdmRzb19pbmZvOwotICAgIHZkc29faW5mby5kbHBpX2FkZHIgPSAwOwotICAgIHZkc29faW5mby5kbHBpX25hbWUgPSBOVUxMOwotICAgIHZkc29faW5mby5kbHBpX3BoZHIgPSAoRWxmX1BoZHIqKSAoKGNoYXIqKSBlaGRyX3Zkc28gKyBlaGRyX3Zkc28tPmVfcGhvZmYpOwotICAgIHZkc29faW5mby5kbHBpX3BobnVtID0gZWhkcl92ZHNvLT5lX3BobnVtOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmRzb19pbmZvLmRscGlfcGhudW07ICsraSkgewotICAgICAgICBpZiAodmRzb19pbmZvLmRscGlfcGhkcltpXS5wX3R5cGUgPT0gUFRfTE9BRCkgewotICAgICAgICAgICAgdmRzb19pbmZvLmRscGlfYWRkciA9IChFbGZfQWRkcikgZWhkcl92ZHNvIC0gdmRzb19pbmZvLmRscGlfcGhkcltpXS5wX3ZhZGRyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGNiKCZ2ZHNvX2luZm8sIHNpemVvZih2ZHNvX2luZm8pLCBkYXRhKTsKLSNlbHNlCi0gICAgLy8gVGhlcmUncyBvbmx5IHRoZSBleGVjdXRhYmxlIHRvIHRyeS4KLSAgICByZXR1cm4gY2IoJmV4ZV9pbmZvLCBzaXplb2YoZXhlX2luZm8pLCBkYXRhKTsKLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZGxfaXRlcmF0ZV9waGRyX3N0YXRpYy5jcHAgYi9saWJjL2Jpb25pYy9kbF9pdGVyYXRlX3BoZHJfc3RhdGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTVhN2EwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZGxfaXRlcmF0ZV9waGRyX3N0YXRpYy5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZWxmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL2F1eHYuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW5rLmg+CisKKy8qIGxkIHByb3ZpZGVzIHRoaXMgdG8gdXMgaW4gdGhlIGRlZmF1bHQgbGluayBzY3JpcHQgKi8KK2V4dGVybiAiQyIgdm9pZCogX19leGVjdXRhYmxlX3N0YXJ0OworCitpbnQgZGxfaXRlcmF0ZV9waGRyKGludCAoKmNiKShzdHJ1Y3QgZGxfcGhkcl9pbmZvKiBpbmZvLCBzaXplX3Qgc2l6ZSwgdm9pZCogZGF0YSksIHZvaWQqIGRhdGEpIHsKKyAgRWxmVyhFaGRyKSogZWhkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhFaGRyKSo+KCZfX2V4ZWN1dGFibGVfc3RhcnQpOworCisgIGlmIChtZW1jbXAoZWhkci0+ZV9pZGVudCwgRUxGTUFHLCBTRUxGTUFHKSAhPSAwKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgLy8gRHluYW1pYyBiaW5hcmllcyBnZXQgdGhlaXIgZGxfaXRlcmF0ZV9waGRyIGZyb20gdGhlIGR5bmFtaWMgbGlua2VyLCBidXQKKyAgLy8gc3RhdGljIGJpbmFyaWVzIGdldCB0aGlzLiBXZSBkb24ndCBoYXZlIGEgbGlzdCBvZiBzaGFyZWQgb2JqZWN0cyB0bworICAvLyBpdGVyYXRlIG92ZXIsIHNpbmNlIHRoZXJlJ3MgcmVhbGx5IG9ubHkgYSBzaW5nbGUgbW9ub2xpdGhpYyBibG9iIG9mCisgIC8vIGNvZGUvZGF0YSwgcGx1cyBvcHRpb25hbGx5IGEgVkRTTy4KKworICBzdHJ1Y3QgZGxfcGhkcl9pbmZvIGV4ZV9pbmZvOworICBleGVfaW5mby5kbHBpX2FkZHIgPSAwOworICBleGVfaW5mby5kbHBpX25hbWUgPSBOVUxMOworICBleGVfaW5mby5kbHBpX3BoZHIgPSByZWludGVycHJldF9jYXN0PEVsZlcoUGhkcikqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZWhkcikgKyBlaGRyLT5lX3Bob2ZmKTsKKyAgZXhlX2luZm8uZGxwaV9waG51bSA9IGVoZHItPmVfcGhudW07CisKKyNpZiBkZWZpbmVkKEFUX1NZU0lORk9fRUhEUikKKyAgLy8gVHJ5IHRoZSBleGVjdXRhYmxlIGZpcnN0LgorICBpbnQgcmMgPSBjYigmZXhlX2luZm8sIHNpemVvZihleGVfaW5mbyksIGRhdGEpOworICBpZiAocmMgIT0gMCkgeworICAgIHJldHVybiByYzsKKyAgfQorCisgIC8vIFRyeSB0aGUgVkRTTyBpZiB0aGF0IGRpZG4ndCB3b3JrLgorICBFbGZXKEVoZHIpKiBlaGRyX3Zkc28gPSByZWludGVycHJldF9jYXN0PEVsZlcoRWhkcikqPihnZXRhdXh2YWwoQVRfU1lTSU5GT19FSERSKSk7CisgIHN0cnVjdCBkbF9waGRyX2luZm8gdmRzb19pbmZvOworICB2ZHNvX2luZm8uZGxwaV9hZGRyID0gMDsKKyAgdmRzb19pbmZvLmRscGlfbmFtZSA9IE5VTEw7CisgIHZkc29faW5mby5kbHBpX3BoZHIgPSByZWludGVycHJldF9jYXN0PEVsZlcoUGhkcikqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihlaGRyX3Zkc28pICsgZWhkcl92ZHNvLT5lX3Bob2ZmKTsKKyAgdmRzb19pbmZvLmRscGlfcGhudW0gPSBlaGRyX3Zkc28tPmVfcGhudW07CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmRzb19pbmZvLmRscGlfcGhudW07ICsraSkgeworICAgIGlmICh2ZHNvX2luZm8uZGxwaV9waGRyW2ldLnBfdHlwZSA9PSBQVF9MT0FEKSB7CisgICAgICB2ZHNvX2luZm8uZGxwaV9hZGRyID0gKEVsZlcoQWRkcikpIGVoZHJfdmRzbyAtIHZkc29faW5mby5kbHBpX3BoZHJbaV0ucF92YWRkcjsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICByZXR1cm4gY2IoJnZkc29faW5mbywgc2l6ZW9mKHZkc29faW5mbyksIGRhdGEpOworI2Vsc2UKKyAgLy8gVGhlcmUncyBvbmx5IHRoZSBleGVjdXRhYmxlIHRvIHRyeS4KKyAgcmV0dXJuIGNiKCZleGVfaW5mbywgc2l6ZW9mKGV4ZV9pbmZvKSwgZGF0YSk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2RsbWFsbG9jLmMgYi9saWJjL2Jpb25pYy9kbG1hbGxvYy5jCmluZGV4IDY2YTgyNWIuLmU4OWM1ZDEgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL2RsbWFsbG9jLmMKKysrIGIvbGliYy9iaW9uaWMvZGxtYWxsb2MuYwpAQCAtMTYsNyArMTYsNyBAQAogCiAjaW5jbHVkZSAiZGxtYWxsb2MuaCIKIAotI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX25hbWVfbWVtLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfcHJjdGwuaCIKICNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgogCiAvLyBTZW5kIGRsbWFsbG9jIGVycm9ycyB0byB0aGUgbG9nLgpAQCAtMjYsNyArMjYsNyBAQAogI2RlZmluZSBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKSBfX2Jpb25pY19oZWFwX2NvcnJ1cHRpb25fZXJyb3IoX19GVU5DVElPTl9fKQogI2RlZmluZSBVU0FHRV9FUlJPUl9BQ1RJT04obSxwKSBfX2Jpb25pY19oZWFwX3VzYWdlX2Vycm9yKF9fRlVOQ1RJT05fXywgcCkKIAotLyogQmlvbmljIG5hbWVkIGFub255bW91cyBtZW1vcnkgZGVjbGFyYXRpb25zICovCisvLyBCaW9uaWMgbmFtZWQgYW5vbnltb3VzIG1lbW9yeSBkZWNsYXJhdGlvbnMuCiBzdGF0aWMgdm9pZCogbmFtZWRfYW5vbnltb3VzX21tYXAoc2l6ZV90IGxlbmd0aCk7CiAjZGVmaW5lIE1NQVAocykgbmFtZWRfYW5vbnltb3VzX21tYXAocykKICNkZWZpbmUgRElSRUNUX01NQVAocykgbmFtZWRfYW5vbnltb3VzX21tYXAocykKQEAgLTM0LDEwICszNCw3IEBACiAvLyBVZ2x5IGluY2x1c2lvbiBvZiBDIGZpbGUgc28gdGhhdCBiaW9uaWMgc3BlY2lmaWMgI2RlZmluZXMgY29uZmlndXJlIGRsbWFsbG9jLgogI2luY2x1ZGUgIi4uL3Vwc3RyZWFtLWRsbWFsbG9jL21hbGxvYy5jIgogCi1leHRlcm4gdm9pZCAoKl9fY2xlYW51cCkoKTsKLQogc3RhdGljIHZvaWQgX19iaW9uaWNfaGVhcF9jb3JydXB0aW9uX2Vycm9yKGNvbnN0IGNoYXIqIGZ1bmN0aW9uKSB7Ci0gIF9fY2xlYW51cCA9IE5VTEw7IC8vIFRoZSBoZWFwIGlzIGNvcnJ1cHQuIFdlIGNhbiBmb3JnZXQgdHJ5aW5nIHRvIHNodXQgZG93biBzdGRpby4KICAgX19saWJjX2ZhdGFsKCJoZWFwIGNvcnJ1cHRpb24gZGV0ZWN0ZWQgYnkgJXMiLCBmdW5jdGlvbik7CiB9CiAKQEAgLTQ5LDE0ICs0NiwxMSBAQAogICAqKChpbnQqKikgMHhkZWFkYmFhZCkgPSAoaW50KikgYWRkcmVzczsKIH0KIAotc3RhdGljIHZvaWQqIG5hbWVkX2Fub255bW91c19tbWFwKHNpemVfdCBsZW5ndGgpCi17Ci0gICAgdm9pZCogcmV0OwotICAgIHJldCA9IG1tYXAoTlVMTCwgbGVuZ3RoLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywgLTEsIDApOwotICAgIGlmIChyZXQgPT0gTUFQX0ZBSUxFRCkKLSAgICAgICAgcmV0dXJuIHJldDsKLQotICAgIF9fYmlvbmljX25hbWVfbWVtKHJldCwgbGVuZ3RoLCAibGliY19tYWxsb2MiKTsKLQotICAgIHJldHVybiByZXQ7CitzdGF0aWMgdm9pZCogbmFtZWRfYW5vbnltb3VzX21tYXAoc2l6ZV90IGxlbmd0aCkgeworICB2b2lkKiBtYXAgPSBtbWFwKE5VTEwsIGxlbmd0aCwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKKyAgaWYgKG1hcCA9PSBNQVBfRkFJTEVEKSB7CisgICAgcmV0dXJuIG1hcDsKKyAgfQorICBwcmN0bChQUl9TRVRfVk1BLCBQUl9TRVRfVk1BX0FOT05fTkFNRSwgbWFwLCBsZW5ndGgsICJsaWJjX21hbGxvYyIpOworICByZXR1cm4gbWFwOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZGxtYWxsb2MuaCBiL2xpYmMvYmlvbmljL2RsbWFsbG9jLmgKaW5kZXggNzFiM2JlOC4uZWY3ODgxNCAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvZGxtYWxsb2MuaAorKysgYi9saWJjL2Jpb25pYy9kbG1hbGxvYy5oCkBAIC0xNyw2ICsxNyw5IEBACiAjaWZuZGVmIExJQkNfQklPTklDX0RMTUFMTE9DX0hfCiAjZGVmaW5lIExJQkNfQklPTklDX0RMTUFMTE9DX0hfCiAKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKwogLyogQ29uZmlndXJlIGRsbWFsbG9jLiAqLwogI2RlZmluZSBIQVZFX0dFVFBBR0VTSVpFIDEKICNkZWZpbmUgTUFMTE9DX0lOU1BFQ1RfQUxMIDEKQEAgLTI5LDYgKzMyLDIxIEBACiAjZGVmaW5lIFVTRV9TUElOX0xPQ0tTIDAKICNkZWZpbmUgREVGQVVMVF9NTUFQX1RIUkVTSE9MRCAoNjRVICogMTAyNFUpCiAKKyNkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIGdldHBhZ2VzaXplKCkKKworLyogZGxtYWxsb2NfdXNhYmxlX3NpemUgd2FzIGV4cG9zZWQgaW4gdGhlIE5ESywgc28gY2hhbmdlIHRoZSBuYW1lCisgKiBvZiB0aGUgZnVuY3Rpb24gb24gMzIgYml0IGFyY2hpdGVjdHVyZXMuCisgKi8KKyNpZiAhZGVmaW5lZChfX0xQNjRfXykKKyNkZWZpbmUgZGxtYWxsb2NfdXNhYmxlX3NpemUgZGxtYWxsb2NfdXNhYmxlX3NpemVfcmVhbAorI2VuZGlmCisKKy8qIEV4cG9ydCB0d28gc3ltYm9scyB1c2VkIGJ5IHRoZSBWTS4gKi8KK19fQkVHSU5fREVDTFMKK2ludCBkbG1hbGxvY190cmltKHNpemVfdCkgX19MSUJDX0FCSV9QVUJMSUNfXzsKK3ZvaWQgZGxtYWxsb2NfaW5zcGVjdF9hbGwodm9pZCAoKmhhbmRsZXIpKHZvaWQqLCB2b2lkKiwgc2l6ZV90LCB2b2lkKiksIHZvaWQqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOworX19FTkRfREVDTFMKKwogLyogSW5jbHVkZSB0aGUgcHJvcGVyIGRlZmluaXRpb25zLiAqLwogI2luY2x1ZGUgIi4uL3Vwc3RyZWFtLWRsbWFsbG9jL21hbGxvYy5oIgogCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9mZHByaW50Zi5jIGIvbGliYy9iaW9uaWMvZmRwcmludGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFkMDVhZC4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9mZHByaW50Zi5jCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotaW50IHZmZHByaW50ZihpbnQgZmQsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IGZvcm1hdCwgX192YV9saXN0IGFwKQotewotCWNoYXIgKmJ1Zj0wOwotCWludCByZXQ7Ci0JcmV0ID0gdmFzcHJpbnRmKCZidWYsIGZvcm1hdCwgYXApOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVuZDsKLQotCXJldCA9IHdyaXRlKGZkLCBidWYsIHJldCk7Ci0JZnJlZShidWYpOwotZW5kOgotCXJldHVybiByZXQ7Ci19Ci0KLWludCBmZHByaW50ZihpbnQgZmQsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IGZvcm1hdCwgLi4uKQotewotCV9fdmFfbGlzdCBhcDsKLQlpbnQgcmV0OwotCi0JdmFfc3RhcnQoYXAsIGZvcm1hdCk7Ci0JcmV0ID0gdmZkcHJpbnRmKGZkLCBmb3JtYXQsIGFwKTsKLQl2YV9lbmQoYXApOwotCi0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2Zsb2NrZmlsZS5jIGIvbGliYy9iaW9uaWMvZmxvY2tmaWxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2OGZiMTUuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvZmxvY2tmaWxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qIGltcGxlbWVudCBmbG9ja2ZpbGUoKSwgZnRyeWxvY2tmaWxlKCkgYW5kIGZ1bmxvY2tmaWxlKCkKLSAqCi0gKiB3ZSBjYW4ndCB1c2UgdGhlIE9wZW5CU0QgaW1wbGVtZW50YXRpb24gd2hpY2ggdXNlcyBrZXJuZWwtc3BlY2lmaWMKLSAqIEFQSXMgbm90IGF2YWlsYWJsZSBvbiBMaW51eC4KLSAqCi0gKiBJbnN0ZWFkLCB3ZSB1c2UgYSBwdGhyZWFkX211dGV4X3Qgd2l0aGluIHRoZSBGSUxFKiBpbnRlcm5hbCBzdGF0ZS4KLSAqIFNlZSBmaWxlZXh0LmggZm9yIGRldGFpbHMuCi0gKgotICogdGhlIGJlaGF2aW91ciwgaWYgZmNsb3NlKCkgaXMgY2FsbGVkIHdoaWxlIHRoZSBjb3JyZXNwb25kaW5nCi0gKiBmaWxlIGlzIGxvY2tlZCBpcyB0b3RhbGx5IHVuZGVmaW5lZC4KLSAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlICJmaWxlZXh0LmgiCi0KLQotdm9pZAotZmxvY2tmaWxlKEZJTEUgKiBmcCkKLXsKLSAgICBpZiAoZnAgIT0gTlVMTCkgewotICAgICAgICBfRkxPQ0tfTE9DSyhmcCk7Ci0gICAgfQotfQotCi0KLWludAotZnRyeWxvY2tmaWxlKEZJTEUgKmZwKQotewotICAgIC8qIFRoZSBzcGVjaWZpY2F0aW9uIGZvciBmdHJ5bG9ja2ZpbGUoKSBzYXlzIGl0IHJldHVybnMgMCBvbiBzdWNjZXNzLAotICAgICAqIG9yIG5vbi16ZXJvIG9uIGVycm9yLiBTbyByZXR1cm4gYW4gZXJybm8gY29kZSBkaXJlY3RseSBvbiBlcnJvci4KLSAgICAgKi8KLSAgICBpbnQgIHJldCA9IEVJTlZBTDsKLQotICAgIGlmIChmcCAhPSBOVUxMKSB7Ci0gICAgICAgIHJldCA9IF9GTE9DS19UUllMT0NLKGZwKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotdm9pZAotZnVubG9ja2ZpbGUoRklMRSAqIGZwKQotewotICAgIGlmIChmcCAhPSBOVUxMKSB7Ci0gICAgICAgIF9GTE9DS19VTkxPQ0soZnApOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2Zsb2NrZmlsZS5jcHAgYi9saWJjL2Jpb25pYy9mbG9ja2ZpbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzODFlOGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9mbG9ja2ZpbGUuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxvY2FsLmgiCisKKy8vIFdlIGNhbid0IHVzZSB0aGUgT3BlbkJTRCBpbXBsZW1lbnRhdGlvbiB3aGljaCB1c2VzIGtlcm5lbC1zcGVjaWZpYworLy8gQVBJcyBub3QgYXZhaWxhYmxlIG9uIExpbnV4LiBJbnN0ZWFkIHdlIHVzZSBhIHB0aHJlYWRfbXV0ZXhfdCB3aXRoaW4KKy8vIHN0cnVjdCBfX3NmaWxlZXh0IChzZWUgZmlsZWV4dC5oKS4KKwordm9pZCBmbG9ja2ZpbGUoRklMRSogZnApIHsKKyAgaWYgKGZwICE9IE5VTEwpIHsKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJl9GTE9DSyhmcCkpOworICB9Cit9CisKK2ludCBmdHJ5bG9ja2ZpbGUoRklMRSogZnApIHsKKyAgLy8gVGhlIHNwZWNpZmljYXRpb24gZm9yIGZ0cnlsb2NrZmlsZSgpIHNheXMgaXQgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsCisgIC8vIG9yIG5vbi16ZXJvIG9uIGVycm9yLiBTbyByZXR1cm4gYW4gZXJybm8gY29kZSBkaXJlY3RseSBvbiBlcnJvci4KKyAgaWYgKGZwID09IE5VTEwpIHsKKyAgICByZXR1cm4gRUlOVkFMOworICB9CisKKyAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmX0ZMT0NLKGZwKSk7Cit9CisKK3ZvaWQgZnVubG9ja2ZpbGUoRklMRSogZnApIHsKKyAgaWYgKGZwICE9IE5VTEwpIHsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX0ZMT0NLKGZwKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2ZvcmsuY3BwIGIvbGliYy9iaW9uaWMvZm9yay5jcHAKaW5kZXggOWZhNWZjZi4uNmNmYzczNiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvZm9yay5jcHAKKysrIGIvbGliYy9iaW9uaWMvZm9yay5jcHAKQEAgLTI5LDI4ICsyOSwyOCBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiAKLSNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgogI2luY2x1ZGUgInB0aHJlYWRfaW50ZXJuYWwuaCIKIAorI2RlZmluZSBGT1JLX0ZMQUdTIChDTE9ORV9DSElMRF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8IFNJR0NITEQpCisKIGludCBmb3JrKCkgewotICAvLyBQT1NJWCBtYW5kYXRlcyB0aGF0IHRoZSB0aW1lcnMgb2YgYSBmb3JrIGNoaWxkIHByb2Nlc3MgYmUKLSAgLy8gZGlzYXJtZWQsIGJ1dCBub3QgZGVzdHJveWVkLiBUbyBhdm9pZCBhIHJhY2UgY29uZGl0aW9uLCB3ZSdyZQotICAvLyBnb2luZyB0byBzdG9wIGFsbCB0aW1lcnMgbm93LCBhbmQgb25seSByZS1zdGFydCB0aGVtIGluIGNhc2UKLSAgLy8gb2YgZXJyb3IsIG9yIGluIHRoZSBwYXJlbnQgcHJvY2VzcwotICBfX3RpbWVyX3RhYmxlX3N0YXJ0X3N0b3AoMSk7CiAgIF9fYmlvbmljX2F0Zm9ya19ydW5fcHJlcGFyZSgpOwogCiAgIHB0aHJlYWRfaW50ZXJuYWxfdCogc2VsZiA9IF9fZ2V0X3RocmVhZCgpOwotICBpbnQgZmxhZ3MgPSBDTE9ORV9DSElMRF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8IFNJR0NITEQ7CisKKyAgLy8gUmVtZW1iZXIgdGhlIHBhcmVudCBwaWQgYW5kIGludmFsaWRhdGUgdGhlIGNhY2hlZCB2YWx1ZSB3aGlsZSB3ZSBmb3JrLgorICBwaWRfdCBwYXJlbnRfcGlkID0gc2VsZi0+aW52YWxpZGF0ZV9jYWNoZWRfcGlkKCk7CisKICNpZiBkZWZpbmVkKF9feDg2XzY0X18pIC8vIHN5c19jbG9uZSdzIGxhc3QgdHdvIGFyZ3VtZW50cyBhcmUgZmxpcHBlZCBvbiB4ODYtNjQuCi0gIGludCByZXN1bHQgPSBzeXNjYWxsKF9fTlJfY2xvbmUsIGZsYWdzLCBOVUxMLCBOVUxMLCAmKHNlbGYtPnRpZCksIE5VTEwpOworICBpbnQgcmVzdWx0ID0gc3lzY2FsbChfX05SX2Nsb25lLCBGT1JLX0ZMQUdTLCBOVUxMLCBOVUxMLCAmKHNlbGYtPnRpZCksIE5VTEwpOwogI2Vsc2UKLSAgaW50IHJlc3VsdCA9IHN5c2NhbGwoX19OUl9jbG9uZSwgZmxhZ3MsIE5VTEwsIE5VTEwsIE5VTEwsICYoc2VsZi0+dGlkKSk7CisgIGludCByZXN1bHQgPSBzeXNjYWxsKF9fTlJfY2xvbmUsIEZPUktfRkxBR1MsIE5VTEwsIE5VTEwsIE5VTEwsICYoc2VsZi0+dGlkKSk7CiAjZW5kaWYKICAgaWYgKHJlc3VsdCA9PSAwKSB7CisgICAgc2VsZi0+c2V0X2NhY2hlZF9waWQoZ2V0dGlkKCkpOwogICAgIF9fYmlvbmljX2F0Zm9ya19ydW5fY2hpbGQoKTsKICAgfSBlbHNlIHsKLSAgICBfX3RpbWVyX3RhYmxlX3N0YXJ0X3N0b3AoMCk7CisgICAgc2VsZi0+c2V0X2NhY2hlZF9waWQocGFyZW50X3BpZCk7CiAgICAgX19iaW9uaWNfYXRmb3JrX3J1bl9wYXJlbnQoKTsKICAgfQogICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZnBjbGFzc2lmeS5jcHAgYi9saWJjL2Jpb25pYy9mcGNsYXNzaWZ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWZmOTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZnBjbGFzc2lmeS5jcHAKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPG1hY2hpbmUvaWVlZS5oPgorCisvLyBUaGVzZSBhcmVuJ3QgZGVjbGFyZWQgaW4gb3VyIDxtYXRoLmg+LgorZXh0ZXJuICJDIiBpbnQgX19pc2luZihkb3VibGUpOworZXh0ZXJuICJDIiBpbnQgX19pc25hbihkb3VibGUpOworCit1bmlvbiBmbG9hdF91IHsKKyAgZmxvYXQgZjsKKyAgaWVlZV9zaW5nbGUgYml0czsKK307CisKK3VuaW9uIGRvdWJsZV91IHsKKyAgZG91YmxlIGQ7CisgIGllZWVfZG91YmxlIGJpdHM7Cit9OworCitpbnQgX19mcGNsYXNzaWZ5ZChkb3VibGUgZCkgeworICBkb3VibGVfdSB1OworICB1LmQgPSBkOworICBpZiAodS5iaXRzLmRibF9leHAgPT0gMCkgeworICAgIHJldHVybiAoKHUuYml0cy5kYmxfZnJhY2wgfCB1LmJpdHMuZGJsX2ZyYWNoKSA9PSAwKSA/IEZQX1pFUk8gOiBGUF9TVUJOT1JNQUw7CisgIH0KKyAgaWYgKHUuYml0cy5kYmxfZXhwID09IERCTF9FWFBfSU5GTkFOKSB7CisgICAgcmV0dXJuICgodS5iaXRzLmRibF9mcmFjbCB8IHUuYml0cy5kYmxfZnJhY2gpID09IDApID8gRlBfSU5GSU5JVEUgOiBGUF9OQU47CisgIH0KKyAgcmV0dXJuIEZQX05PUk1BTDsKK30KK19fc3Ryb25nX2FsaWFzKF9fZnBjbGFzc2lmeSwgX19mcGNsYXNzaWZ5ZCk7IC8vIGdsaWJjIHVzZXMgX19mcGNsYXNzaWZ5LCBCU0QgX19mcGNsYXNzaWZ5ZC4KKworaW50IF9fZnBjbGFzc2lmeWYoZmxvYXQgZikgeworICBmbG9hdF91IHU7CisgIHUuZiA9IGY7CisgIGlmICh1LmJpdHMuc25nX2V4cCA9PSAwKSB7CisgICAgcmV0dXJuICh1LmJpdHMuc25nX2ZyYWMgPT0gMCkgPyBGUF9aRVJPIDogRlBfU1VCTk9STUFMOworICB9CisgIGlmICh1LmJpdHMuc25nX2V4cCA9PSBTTkdfRVhQX0lORk5BTikgeworICAgIHJldHVybiAodS5iaXRzLnNuZ19mcmFjID09IDApID8gRlBfSU5GSU5JVEUgOiBGUF9OQU47CisgIH0KKyAgcmV0dXJuIEZQX05PUk1BTDsKK30KKworaW50IF9faXNpbmYoZG91YmxlIGQpIHsKKyAgcmV0dXJuIChfX2ZwY2xhc3NpZnlkKGQpID09IEZQX0lORklOSVRFKTsKK30KK19fc3Ryb25nX2FsaWFzKGlzaW5mLCBfX2lzaW5mKTsKKworaW50IF9faXNpbmZmKGZsb2F0IGYpIHsKKyAgcmV0dXJuIChfX2ZwY2xhc3NpZnlmKGYpID09IEZQX0lORklOSVRFKTsKK30KK19fc3Ryb25nX2FsaWFzKGlzaW5mZiwgX19pc2luZmYpOworCitpbnQgX19pc25hbihkb3VibGUgZCkgeworICByZXR1cm4gKF9fZnBjbGFzc2lmeWQoZCkgPT0gRlBfTkFOKTsKK30KK19fc3Ryb25nX2FsaWFzKGlzbmFuLCBfX2lzbmFuKTsKKworaW50IF9faXNuYW5mKGZsb2F0IGYpIHsKKyAgcmV0dXJuIChfX2ZwY2xhc3NpZnlmKGYpID09IEZQX05BTik7Cit9CitfX3N0cm9uZ19hbGlhcyhpc25hbmYsIF9faXNuYW5mKTsKKworaW50IF9faXNmaW5pdGUoZG91YmxlIGQpIHsKKyAgaW50IHR5cGUgPSBfX2ZwY2xhc3NpZnlkKGQpOworICByZXR1cm4gKCh0eXBlICE9IEZQX05BTikgJiYgKHR5cGUgIT0gRlBfSU5GSU5JVEUpKTsKK30KK19fc3Ryb25nX2FsaWFzKGlzZmluaXRlLCBfX2lzZmluaXRlKTsKKworaW50IF9faXNmaW5pdGVmKGZsb2F0IGYpIHsKKyAgaW50IHR5cGUgPSBfX2ZwY2xhc3NpZnlmKGYpOworICByZXR1cm4gKCh0eXBlICE9IEZQX05BTikgJiYgKHR5cGUgIT0gRlBfSU5GSU5JVEUpKTsKK30KK19fc3Ryb25nX2FsaWFzKGlzZmluaXRlZiwgX19pc2Zpbml0ZWYpOworCitpbnQgX19pc25vcm1hbChkb3VibGUgZCkgeworICByZXR1cm4gKF9fZnBjbGFzc2lmeWQoZCkgPT0gRlBfTk9STUFMKTsKK30KK19fc3Ryb25nX2FsaWFzKGlzbm9ybWFsLCBfX2lzbm9ybWFsKTsKKworaW50IF9faXNub3JtYWxmKGZsb2F0IGYpIHsKKyAgcmV0dXJuIChfX2ZwY2xhc3NpZnlmKGYpID09IEZQX05PUk1BTCk7Cit9CitfX3N0cm9uZ19hbGlhcyhpc25vcm1hbGYsIF9faXNub3JtYWxmKTsKKworI2lmIF9fTFA2NF9fCisKKy8vIExQNjQgdXNlcyAxMjgtYml0IGxvbmcgZG91Ymxlcy4KKwordW5pb24gbG9uZ19kb3VibGVfdSB7CisgIGxvbmcgZG91YmxlIGxkOworICBpZWVlX2V4dCBiaXRzOworfTsKKworI2RlZmluZSB6ZXJvX2ZyYWMoYikgKChiLmV4dF9mcmFjbCB8IGIuZXh0X2ZyYWNsbSB8IGIuZXh0X2ZyYWNobSB8IGIuZXh0X2ZyYWNoKSA9PSAwKQorCitpbnQgX19mcGNsYXNzaWZ5bChsb25nIGRvdWJsZSBsZCkgeworICBsb25nX2RvdWJsZV91IHU7CisgIHUubGQgPSBsZDsKKyAgaWYgKHUuYml0cy5leHRfZXhwID09IDApIHsKKyAgICByZXR1cm4gemVyb19mcmFjKHUuYml0cykgPyBGUF9aRVJPIDogRlBfU1VCTk9STUFMOworICB9CisgIGlmICh1LmJpdHMuZXh0X2V4cCA9PSBFWFRfRVhQX0lORk5BTikgeworICAgIHJldHVybiB6ZXJvX2ZyYWModS5iaXRzKSA/IEZQX0lORklOSVRFIDogRlBfTkFOOworICB9CisgIHJldHVybiBGUF9OT1JNQUw7Cit9CisKK2ludCBfX2lzaW5mbChsb25nIGRvdWJsZSBsZCkgeworICByZXR1cm4gKF9fZnBjbGFzc2lmeWwobGQpID09IEZQX0lORklOSVRFKTsKK30KKworaW50IF9faXNuYW5sKGxvbmcgZG91YmxlIGxkKSB7CisgIHJldHVybiAoX19mcGNsYXNzaWZ5bChsZCkgPT0gRlBfTkFOKTsKK30KKworaW50IF9faXNmaW5pdGVsKGxvbmcgZG91YmxlIGxkKSB7CisgIGludCB0eXBlID0gX19mcGNsYXNzaWZ5bChsZCk7CisgIHJldHVybiAoKHR5cGUgIT0gRlBfTkFOKSAmJiAodHlwZSAhPSBGUF9JTkZJTklURSkpOworfQorCitpbnQgX19pc25vcm1hbGwobG9uZyBkb3VibGUgbGQpIHsKKyAgcmV0dXJuIChfX2ZwY2xhc3NpZnlsKGxkKSA9PSBGUF9OT1JNQUwpOworfQorCisjZWxzZQorCisvLyBMUDMyIHVzZXMgZG91YmxlIGFzIGxvbmcgZG91YmxlLgorCitfX3N0cm9uZ19hbGlhcyhfX2ZwY2xhc3NpZnlsLCBfX2ZwY2xhc3NpZnkpOworX19zdHJvbmdfYWxpYXMoX19pc2luZmwsIF9faXNpbmYpOworX19zdHJvbmdfYWxpYXMoX19pc25hbmwsIF9faXNuYW4pOworX19zdHJvbmdfYWxpYXMoX19pc2Zpbml0ZWwsIF9faXNmaW5pdGUpOworX19zdHJvbmdfYWxpYXMoX19pc25vcm1hbGwsIF9faXNub3JtYWwpOworCisjZW5kaWYKKworX19zdHJvbmdfYWxpYXMoaXNpbmZsLCBfX2lzaW5mbCk7CitfX3N0cm9uZ19hbGlhcyhpc25hbmwsIF9faXNuYW5sKTsKK19fc3Ryb25nX2FsaWFzKGlzZmluaXRlbCwgX19pc2Zpbml0ZWwpOworX19zdHJvbmdfYWxpYXMoaXNub3JtYWxsLCBfX2lzbm9ybWFsbCk7CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9mdGltZS5jIGIvbGliYy9iaW9uaWMvZnRpbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUxMzU5My4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9mdGltZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHN5cy90aW1lYi5oPgotCi1pbnQgZnRpbWUoc3RydWN0IHRpbWViICp0YikKLXsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgdHY7Ci0gICAgc3RydWN0IHRpbWV6b25lIHR6OwotCi0gICAgaWYgKGdldHRpbWVvZmRheSAoJnR2LCAmdHopIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgdGItPnRpbWUgICAgPSB0di50dl9zZWM7Ci0gICAgdGItPm1pbGxpdG0gPSAodHYudHZfdXNlYyArIDUwMCkgLyAxMDAwOwotCi0gICAgaWYgKHRiLT5taWxsaXRtID09IDEwMDApIHsKLSAgICAgICAgKyt0Yi0+dGltZTsKLSAgICAgICAgdGItPm1pbGxpdG0gPSAwOwotICAgIH0KLSAgICB0Yi0+dGltZXpvbmUgPSB0ei50el9taW51dGVzd2VzdDsKLSAgICB0Yi0+ZHN0ZmxhZyAgPSB0ei50el9kc3R0aW1lOwotCi0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9mdG9rLmMgYi9saWJjL2Jpb25pYy9mdG9rLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOGJkMGEuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvZnRvay5jCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy9pcGMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotCi1rZXlfdCAgZnRvayhjb25zdCBjaGFyKiAgcGF0aCwgaW50ICBpZCkKLXsKLSAgICBzdHJ1Y3Qgc3RhdCAgIHN0OwotCi0gICAgaWYgKCBsc3RhdChwYXRoLCAmc3QpIDwgMCApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHJldHVybiAoa2V5X3QpKCAoc3Quc3RfaW5vICYgMHhmZmZmKSB8ICgoc3Quc3RfZGV2ICYgMHhmZikgPDwgMTYpIHwgKChpZCAmIDI1NSkgPDwgMjQpICk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9mdHMuYyBiL2xpYmMvYmlvbmljL2Z0cy5jCmluZGV4IGM3NzcwYjYuLmM0OTFiNmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL2Z0cy5jCisrKyBiL2xpYmMvYmlvbmljL2Z0cy5jCkBAIC0xLDQgKzEsNCBAQAotLyoJJE9wZW5CU0Q6IGZ0cy5jLHYgMS40MyAyMDA5LzA4LzI3IDE2OjE5OjI3IG1pbGxlcnQgRXhwICQJKi8KKy8qCSRPcGVuQlNEOiBmdHMuYyx2IDEuNDYgMjAxNC8wNS8yNSAxNzo0NzowNCB0ZWR1IEV4cCAkCSovCiAKIC8qLQogICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzLCAxOTk0CkBAIC0zNiwxMiArMzYsMTEgQEAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8ZnRzLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLSNkZWZpbmUgTUFYKGEsYikgKChhKT4oYik/KGEpOihiKSkKLQogc3RhdGljIEZUU0VOVAkqZnRzX2FsbG9jKEZUUyAqLCBjaGFyICosIHNpemVfdCk7CiBzdGF0aWMgRlRTRU5UCSpmdHNfYnVpbGQoRlRTICosIGludCk7CiBzdGF0aWMgdm9pZAkgZnRzX2xmcmVlKEZUU0VOVCAqKTsKQEAgLTUzLDYgKzUyLDkgQEAKIHN0YXRpYyB1X3Nob3J0CSBmdHNfc3RhdChGVFMgKiwgRlRTRU5UICosIGludCk7CiBzdGF0aWMgaW50CSBmdHNfc2FmZV9jaGFuZ2VkaXIoRlRTICosIEZUU0VOVCAqLCBpbnQsIGNoYXIgKik7CiAKKyNkZWZpbmUgQUxJR05CWVRFUyAoc2l6ZW9mKHVpbnRwdHJfdCkgLSAxKQorI2RlZmluZSBBTElHTihwKSAoKCh1aW50cHRyX3QpKHApICsgQUxJR05CWVRFUykgJn4gQUxJR05CWVRFUykKKwogI2RlZmluZQlJU0RPVChhKQkoYVswXSA9PSAnLicgJiYgKCFhWzFdIHx8IChhWzFdID09ICcuJyAmJiAhYVsyXSkpKQogCiAjZGVmaW5lCUNMUihvcHQpCShzcC0+ZnRzX29wdGlvbnMgJj0gfihvcHQpKQpAQCAtOTYsNyArOTgsNyBAQAogCSAqIFN0YXJ0IG91dCB3aXRoIDFLIG9mIHBhdGggc3BhY2UsIGFuZCBlbm91Z2gsIGluIGFueSBjYXNlLAogCSAqIHRvIGhvbGQgdGhlIHVzZXIncyBwYXRocy4KIAkgKi8KLQlpZiAoZnRzX3BhbGxvYyhzcCwgTUFYKGZ0c19tYXhhcmdsZW4oYXJndiksIE1BWFBBVEhMRU4pKSkKKwlpZiAoZnRzX3BhbGxvYyhzcCwgTUFYKGZ0c19tYXhhcmdsZW4oYXJndiksIFBBVEhfTUFYKSkpCiAJCWdvdG8gbWVtMTsKIAogCS8qIEFsbG9jYXRlL2luaXRpYWxpemUgcm9vdCdzIHBhcmVudC4gKi8KQEAgLTQ0Niw3ICs0NDgsNyBAQAogICovCiAvKiBBUkdTVVNFRCAqLwogaW50Ci1mdHNfc2V0KEZUUyAqc3AsIEZUU0VOVCAqcCwgaW50IGluc3RyKQorZnRzX3NldChGVFMgKnNwIF9fdW51c2VkLCBGVFNFTlQgKnAsIGludCBpbnN0cikKIHsKIAlpZiAoaW5zdHIgJiYgaW5zdHIgIT0gRlRTX0FHQUlOICYmIGluc3RyICE9IEZUU19GT0xMT1cgJiYKIAkgICAgaW5zdHIgIT0gRlRTX05PSU5TVFIgJiYgaW5zdHIgIT0gRlRTX1NLSVApIHsKQEAgLTYzNiw3ICs2MzgsNyBAQAogCW1heGxlbiA9IHNwLT5mdHNfcGF0aGxlbiAtIGxlbjsKIAogCS8qCi0JICogZnRzX2xldmVsIGlzIGEgc2hvcnQgc28gd2UgbXVzdCBwcmV2ZW50IGl0IGZyb20gd3JhcHBpbmcKKwkgKiBmdHNfbGV2ZWwgaXMgc2lnbmVkIHNvIHdlIG11c3QgcHJldmVudCBpdCBmcm9tIHdyYXBwaW5nCiAJICogYXJvdW5kIHRvIEZUU19ST09UTEVWRUwgYW5kIEZUU19ST09UUEFSRU5UTEVWRUwuCiAJICovCiAJbGV2ZWwgPSBjdXItPmZ0c19sZXZlbDsKQEAgLTkwNywxMCArOTA5LDkgQEAKIAlsZW4gPSBzaXplb2YoRlRTRU5UKSArIG5hbWVsZW47CiAJaWYgKCFJU1NFVChGVFNfTk9TVEFUKSkKIAkJbGVuICs9IHNpemVvZihzdHJ1Y3Qgc3RhdCkgKyBBTElHTkJZVEVTOwotCWlmICgocCA9IG1hbGxvYyhsZW4pKSA9PSBOVUxMKQorCWlmICgocCA9IGNhbGxvYygxLCBsZW4pKSA9PSBOVUxMKQogCQlyZXR1cm4gKE5VTEwpOwogCi0JbWVtc2V0KHAsIDAsIGxlbik7CiAJcC0+ZnRzX3BhdGggPSBzcC0+ZnRzX3BhdGg7CiAJcC0+ZnRzX25hbWVsZW4gPSBuYW1lbGVuOwogCXAtPmZ0c19pbnN0ciA9IEZUU19OT0lOU1RSOwpAQCAtOTM1LDcgKzkzNiw3IEBACiAKIC8qCiAgKiBBbGxvdyBlc3NlbnRpYWxseSB1bmxpbWl0ZWQgcGF0aHM7IGZpbmQsIHJtLCBscyBzaG91bGQgYWxsIHdvcmsgb24gYW55IHRyZWUuCi0gKiBNb3N0IHN5c3RlbXMgd2lsbCBhbGxvdyBjcmVhdGlvbiBvZiBwYXRocyBtdWNoIGxvbmdlciB0aGFuIE1BWFBBVEhMRU4sIGV2ZW4KKyAqIE1vc3Qgc3lzdGVtcyB3aWxsIGFsbG93IGNyZWF0aW9uIG9mIHBhdGhzIG11Y2ggbG9uZ2VyIHRoYW4gUEFUSF9NQVgsIGV2ZW4KICAqIHRob3VnaCB0aGUga2VybmVsIHdvbid0IHJlc29sdmUgdGhlbS4gIEFkZCB0aGUgc2l6ZSAobm90IGp1c3Qgd2hhdCdzIG5lZWRlZCkKICAqIHBsdXMgMjU2IGJ5dGVzIHNvIGRvbid0IHJlYWxsb2MgdGhlIHBhdGggMiBieXRlcyBhdCBhIHRpbWUuCiAgKi8KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2dldGF1eHZhbC5jcHAgYi9saWJjL2Jpb25pYy9nZXRhdXh2YWwuY3BwCmluZGV4IDNlZTMxZDYuLmJjNDE4MjQgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL2dldGF1eHZhbC5jcHAKKysrIGIvbGliYy9iaW9uaWMvZ2V0YXV4dmFsLmNwcApAQCAtMzIsMTAgKzMyLDEwIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXV4di5oPgogI2luY2x1ZGUgPGVsZi5oPgogCi1fX0xJQkNfSElEREVOX18gRWxmX2F1eHZfdCogX19saWJjX2F1eHYgPSBOVUxMOworX19MSUJDX0hJRERFTl9fIEVsZlcoYXV4dl90KSogX19saWJjX2F1eHYgPSBOVUxMOwogCiBleHRlcm4gIkMiIHVuc2lnbmVkIGxvbmcgaW50IGdldGF1eHZhbCh1bnNpZ25lZCBsb25nIGludCB0eXBlKSB7Ci0gIGZvciAoRWxmX2F1eHZfdCogdiA9IF9fbGliY19hdXh2OyB2LT5hX3R5cGUgIT0gQVRfTlVMTDsgKyt2KSB7CisgIGZvciAoRWxmVyhhdXh2X3QpKiB2ID0gX19saWJjX2F1eHY7IHYtPmFfdHlwZSAhPSBBVF9OVUxMOyArK3YpIHsKICAgICBpZiAodi0+YV90eXBlID09IHR5cGUpIHsKICAgICAgIHJldHVybiB2LT5hX3VuLmFfdmFsOwogICAgIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2dldGR0YWJsZXNpemUuYyBiL2xpYmMvYmlvbmljL2dldGR0YWJsZXNpemUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEzMTVhNS4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9nZXRkdGFibGVzaXplLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+Ci0jaW5jbHVkZSA8c3lzL3N5c2NvbmYuaD4KLQotaW50IGdldGR0YWJsZXNpemUoKQotewotICAgIHN0cnVjdCBybGltaXQgcjsKLQotICAgIGlmIChnZXRybGltaXQoUkxJTUlUX05PRklMRSwgJnIpIDwgMCkgewotICAgICAgICByZXR1cm4gc3lzY29uZihfU0NfT1BFTl9NQVgpOwotICAgIH0KLSAgICByZXR1cm4gci5ybGltX2N1cjsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2dldGVudHJvcHlfbGludXguYyBiL2xpYmMvYmlvbmljL2dldGVudHJvcHlfbGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDliZDdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZ2V0ZW50cm9weV9saW51eC5jCkBAIC0wLDAgKzEsNTY1IEBACisvKgkkT3BlbkJTRDogZ2V0ZW50cm9weV9saW51eC5jLHYgMS4yOCAyMDE0LzA3LzIwIDAzOjI0OjEwIGRlcmFhZHQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBUaGVvIGRlIFJhYWR0IDxkZXJhYWR0QG9wZW5ic2Qub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDE0IEJvYiBCZWNrIDxiZWNrQG9idHVzZS5jb20+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogRW11bGF0aW9uIG9mIGdldGVudHJvcHkoMikgYXMgZG9jdW1lbnRlZCBhdDoKKyAqIGh0dHA6Ly93d3cub3BlbmJzZC5vcmcvY2dpLWJpbi9tYW4uY2dpL09wZW5CU0QtY3VycmVudC9tYW4yL2dldGVudHJvcHkuMgorICovCisKKyNkZWZpbmUJX1BPU0lYX0NfU09VUkNFCTE5OTMwOUwKKyNkZWZpbmUJX0dOVV9TT1VSQ0UJMQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaWZkZWYgSEFWRV9TWVNfU1lTQ1RMX0gKKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGxpbmsuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX09QRU5TU0wKKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpZmRlZiBIQVZFX0dFVEFVWFZBTAorI2luY2x1ZGUgPHN5cy9hdXh2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdmZzLmg+CisKKyNkZWZpbmUgUkVQRUFUIDUKKyNkZWZpbmUgbWluKGEsIGIpICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKworI2RlZmluZSBIWChhLCBiKSBcCisJZG8geyBcCisJCWlmICgoYSkpIFwKKwkJCUhEKGVycm5vKTsgXAorCQllbHNlIFwKKwkJCUhEKGIpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBIUih4LCBsKSAoU0hBNTEyX1VwZGF0ZSgmY3R4LCAoY2hhciAqKSh4KSwgKGwpKSkKKyNkZWZpbmUgSEQoeCkJIChTSEE1MTJfVXBkYXRlKCZjdHgsIChjaGFyICopJih4KSwgc2l6ZW9mICh4KSkpCisjZGVmaW5lIEhGKHgpICAgIChTSEE1MTJfVXBkYXRlKCZjdHgsIChjaGFyICopJih4KSwgc2l6ZW9mICh2b2lkKikpKQorCitpbnQJZ2V0ZW50cm9weSh2b2lkICpidWYsIHNpemVfdCBsZW4pOworCitzdGF0aWMgaW50IGdvdGRhdGEoY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKKyNpZmRlZiBTWVNfX2dldHJhbmRvbQorc3RhdGljIGludCBnZXRlbnRyb3B5X2dldHJhbmRvbSh2b2lkICpidWYsIHNpemVfdCBsZW4pOworI2VuZGlmCitzdGF0aWMgaW50IGdldGVudHJvcHlfdXJhbmRvbSh2b2lkICpidWYsIHNpemVfdCBsZW4pOworI2lmZGVmIFNZU19fc3lzY3RsCitzdGF0aWMgaW50IGdldGVudHJvcHlfc3lzY3RsKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7CisjZW5kaWYKKyNpZmRlZiBIQVZFX09QRU5TU0wKK3N0YXRpYyBpbnQgZ2V0ZW50cm9weV9mYWxsYmFjayh2b2lkICpidWYsIHNpemVfdCBsZW4pOworc3RhdGljIGludCBnZXRlbnRyb3B5X3BoZHIoc3RydWN0IGRsX3BoZHJfaW5mbyAqaW5mbywgc2l6ZV90IHNpemUsIHZvaWQgKmRhdGEpOworI2VuZGlmCisKK2ludAorZ2V0ZW50cm9weSh2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJaW50IHJldCA9IC0xOworCisJaWYgKGxlbiA+IDI1NikgeworCQllcnJubyA9IEVJTzsKKwkJcmV0dXJuIC0xOworCX0KKworI2lmZGVmIFNZU19fZ2V0cmFuZG9tCisJLyoKKwkgKiBUcnkgZGVzY3JpcHRvci1sZXNzIGdldHJhbmRvbSgpCisJICovCisJcmV0ID0gZ2V0ZW50cm9weV9nZXRyYW5kb20oYnVmLCBsZW4pOworCWlmIChyZXQgIT0gLTEpCisJCXJldHVybiAocmV0KTsKKyNlbmRpZgorCisJLyoKKwkgKiBUcnkgdG8gZ2V0IGVudHJvcHkgd2l0aCAvZGV2L3VyYW5kb20KKwkgKgorCSAqIFRoaXMgY2FuIGZhaWwgaWYgdGhlIHByb2Nlc3MgaXMgaW5zaWRlIGEgY2hyb290IG9yIGlmIGZpbGUKKwkgKiBkZXNjcmlwdG9ycyBhcmUgZXhoYXVzdGVkLgorCSAqLworCXJldCA9IGdldGVudHJvcHlfdXJhbmRvbShidWYsIGxlbik7CisJaWYgKHJldCAhPSAtMSkKKwkJcmV0dXJuIChyZXQpOworCisjaWZkZWYgU1lTX19zeXNjdGwKKwkvKgorCSAqIFRyeSB0byB1c2Ugc3lzY3RsIENUTF9LRVJOLCBLRVJOX1JBTkRPTSwgUkFORE9NX1VVSUQuCisJICogc3lzY3RsIGlzIGEgZmFpbHNhZmUgQVBJLCBzbyBpdCBndWFyYW50ZWVzIGEgcmVzdWx0LiAgVGhpcworCSAqIHNob3VsZCB3b3JrIGluc2lkZSBhIGNocm9vdCwgb3Igd2hlbiBmaWxlIGRlc2NyaXB0b3JzIGFyZQorCSAqIGV4aHVhc3RlZC4KKwkgKgorCSAqIEhvd2V2ZXIgdGhpcyBjYW4gZmFpbCBpZiB0aGUgTGludXgga2VybmVsIHJlbW92ZXMgc3VwcG9ydAorCSAqIGZvciBzeXNjdGwuICBTdGFydGluZyBpbiAyMDA3LCB0aGVyZSBoYXZlIGJlZW4gZWZmb3J0cyB0bworCSAqIGRlcHJlY2F0ZSB0aGUgc3lzY3RsIEFQSS9BQkksIGFuZCBwdXNoIGNhbGxlcnMgdG93YXJkcyB1c2UKKwkgKiBvZiB0aGUgY2hyb290LXVuYXZhaWxhYmxlIGZkLXVzaW5nIC9wcm9jIG1lY2hhbmlzbSAtLQorCSAqIGVzc2VudGlhbGx5IHRoZSBzYW1lIHByb2JsZW1zIGFzIC9kZXYvdXJhbmRvbS4KKwkgKgorCSAqIE51bWVyb3VzIHNldGJhY2tzIGhhdmUgYmVlbiBlbmNvdW50ZXJlZCBpbiB0aGVpciBkZXByZWNhdGlvbgorCSAqIHNjaGVkdWxlLCBzbyBhcyBvZiBKdW5lIDIwMTQgdGhlIGtlcm5lbCBBQkkgc3RpbGwgZXhpc3RzIG9uCisJICogbW9zdCBMaW51eCBhcmNoaXRlY3R1cmVzLiBUaGUgc3lzY3RsKCkgc3R1YiBpbiBsaWJjIGlzIG1pc3NpbmcKKwkgKiBvbiBzb21lIHN5c3RlbXMuICBUaGVyZSBhcmUgYWxzbyByZXBvcnRzIHRoYXQgc29tZSBrZXJuZWxzCisJICogc3BldyBtZXNzYWdlcyB0byB0aGUgY29uc29sZS4KKwkgKi8KKwlyZXQgPSBnZXRlbnRyb3B5X3N5c2N0bChidWYsIGxlbik7CisJaWYgKHJldCAhPSAtMSkKKwkJcmV0dXJuIChyZXQpOworI2VuZGlmIC8qIFNZU19fc3lzY3RsICovCisKKwkvKgorCSAqIEVudHJvcHkgY29sbGVjdGlvbiB2aWEgL2Rldi91cmFuZG9tIGFuZCBzeXNjdGwgaGF2ZSBmYWlsZWQuCisJICoKKwkgKiBObyBvdGhlciBBUEkgZXhpc3RzIGZvciBjb2xsZWN0aW5nIGVudHJvcHkuICBTZWUgdGhlIGxhcmdlCisJICogY29tbWVudCBibG9jayBhYm92ZS4KKwkgKgorCSAqIFdlIGhhdmUgdmVyeSBmZXcgb3B0aW9uczoKKwkgKiAgICAgLSBFdmVuIHN5c2xvZ19yIGlzIHVuc2FmZSB0byBjYWxsIGF0IHRoaXMgbG93IGxldmVsLCBzbworCSAqCSB0aGVyZSBpcyBubyB3YXkgdG8gYWxlcnQgdGhlIHVzZXIgb3IgcHJvZ3JhbS4KKwkgKiAgICAgLSBDYW5ub3QgY2FsbCBhYm9ydCgpIGJlY2F1c2Ugc29tZSBzeXN0ZW1zIGhhdmUgdW5zYWZlCisJICoJIGNvcmVmaWxlcy4KKwkgKiAgICAgLSBDb3VsZCByYWlzZShTSUdLSUxMKSByZXN1bHRpbmcgaW4gc2lsZW50IHByb2dyYW0gdGVybWluYXRpb24uCisJICogICAgIC0gUmV0dXJuIEVJTywgdG8gaGludCB0aGF0IGFyYzRyYW5kb20ncyBzdGlyIGZ1bmN0aW9uCisJICogICAgICAgc2hvdWxkIHJhaXNlKFNJR0tJTEwpCisJICogICAgIC0gRG8gdGhlIGJlc3QgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMuLi4uCisJICoKKwkgKiBUaGlzIGNvZGUgcGF0aCBleGlzdHMgdG8gYnJpbmcgbGlnaHQgdG8gdGhlIGlzc3VlIHRoYXQgTGludXgKKwkgKiBkb2VzIG5vdCBwcm92aWRlIGEgZmFpbHNhZmUgQVBJIGZvciBlbnRyb3B5IGNvbGxlY3Rpb24uCisJICoKKwkgKiBXZSBob3BlIHRoaXMgZGVtb25zdHJhdGVzIHRoYXQgTGludXggc2hvdWxkIGVpdGhlciByZXRhaW4gdGhlaXIKKwkgKiBzeXNjdGwgQUJJLCBvciBjb25zaWRlciBwcm92aWRpbmcgYSBuZXcgZmFpbHNhZmUgQVBJIHdoaWNoCisJICogd29ya3MgaW4gYSBjaHJvb3Qgb3Igd2hlbiBmaWxlIGRlc2NyaXB0b3JzIGFyZSBleGhhdXN0ZWQuCisJICovCisjdW5kZWYgRkFJTF9JTlNURUFEX09GX1RSWUlOR19GQUxMQkFDSworI2lmZGVmIEZBSUxfSU5TVEVBRF9PRl9UUllJTkdfRkFMTEJBQ0sKKwlyYWlzZShTSUdLSUxMKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfT1BFTlNTTAorCXJldCA9IGdldGVudHJvcHlfZmFsbGJhY2soYnVmLCBsZW4pOworCWlmIChyZXQgIT0gLTEpCisJCXJldHVybiAocmV0KTsKKyNlbmRpZgorCisJZXJybm8gPSBFSU87CisJcmV0dXJuIChyZXQpOworfQorCisvKgorICogQmFzaWMgc2FuaXR5IGNoZWNraW5nOyB3aXNoIHdlIGNvdWxkIGRvIGJldHRlci4KKyAqLworc3RhdGljIGludAorZ290ZGF0YShjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJY2hhcglhbnlfc2V0ID0gMDsKKwlzaXplX3QJaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKKwkJYW55X3NldCB8PSBidWZbaV07CisJaWYgKGFueV9zZXQgPT0gMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCisjaWZkZWYgU1lTX19nZXRyYW5kb20KK3N0YXRpYyBpbnQKK2dldGVudHJvcHlfZ2V0cmFuZG9tKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKyNpZiAwCisKKy8qIEhhbmQtZGVmaW5pdGlvbnMgdW50aWwgdGhlIEFQSSBiZWNvbWVzIGNvbW1vbnBsYWNlICovCisjaWZuZGVmIFNZU19fZ2V0cmFuZG9tCisjaWZkZWYgX19MUDY0X18KKyNkZWZpbmUgU1lTX19nZXRyYW5kb20gMzE3CisjZWxzZQorI2RlZmluZSBTWVNfX2dldHJhbmRvbSAzNTQKKyNlbmRpZgorI2VuZGlmCisJc3RydWN0IF9fZ2V0cmFuZG9tX2FyZ3MgYXJncyA9IHsKKwkJLmJ1ZiA9IGJ1ZjsKKwkJLmxlbiA9IGxlbjsKKwkJLmZsYWdzID0gMDsKKwl9OworCisJaWYgKGxlbiA+IDI1NikKKwkJcmV0dXJuICgtMSk7CisJcmV0ID0gc3lzY2FsbChTWVNfX2dldHJhbmRvbSwgJmFyZ3MpOworCWlmIChyZXQgPT0gbGVuKQorCQlyZXR1cm4gKDApOworI2VuZGlmCisJcmV0dXJuIC0xOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK2dldGVudHJvcHlfdXJhbmRvbSh2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHN0YXQgc3Q7CisJc2l6ZV90IGk7CisJaW50IGZkLCBjbnQsIGZsYWdzOworCWludCBzYXZlX2Vycm5vID0gZXJybm87CisKK3N0YXJ0OgorCisJZmxhZ3MgPSBPX1JET05MWTsKKyNpZmRlZiBPX05PRk9MTE9XCisJZmxhZ3MgfD0gT19OT0ZPTExPVzsKKyNlbmRpZgorI2lmZGVmIE9fQ0xPRVhFQworCWZsYWdzIHw9IE9fQ0xPRVhFQzsKKyNlbmRpZgorCWZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgZmxhZ3MsIDApOworCWlmIChmZCA9PSAtMSkgeworCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQlnb3RvIHN0YXJ0OworCQlnb3RvIG5vZGV2cmFuZG9tOworCX0KKyNpZm5kZWYgT19DTE9FWEVDCisJZmNudGwoZmQsIEZfU0VURkQsIGZjbnRsKGZkLCBGX0dFVEZEKSB8IEZEX0NMT0VYRUMpOworI2VuZGlmCisKKwkvKiBMaWdodGx5IHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugbm9kZSBsb29rcyBzYW5lICovCisJaWYgKGZzdGF0KGZkLCAmc3QpID09IC0xIHx8ICFTX0lTQ0hSKHN0LnN0X21vZGUpKSB7CisJCWNsb3NlKGZkKTsKKwkJZ290byBub2RldnJhbmRvbTsKKwl9CisJaWYgKGlvY3RsKGZkLCBSTkRHRVRFTlRDTlQsICZjbnQpID09IC0xKSB7CisJCWNsb3NlKGZkKTsKKwkJZ290byBub2RldnJhbmRvbTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGxlbjsgKSB7CisJCXNpemVfdCB3YW50ZWQgPSBsZW4gLSBpOworCQlzc2l6ZV90IHJldCA9IHJlYWQoZmQsIChjaGFyICopYnVmICsgaSwgd2FudGVkKTsKKworCQlpZiAocmV0ID09IC0xKSB7CisJCQlpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKQorCQkJCWNvbnRpbnVlOworCQkJY2xvc2UoZmQpOworCQkJZ290byBub2RldnJhbmRvbTsKKwkJfQorCQlpICs9IHJldDsKKwl9CisJY2xvc2UoZmQpOworCWlmIChnb3RkYXRhKGJ1ZiwgbGVuKSA9PSAwKSB7CisJCWVycm5vID0gc2F2ZV9lcnJubzsKKwkJcmV0dXJuIDA7CQkvKiBzYXRpc2ZpZWQgKi8KKwl9Citub2RldnJhbmRvbToKKwllcnJubyA9IEVJTzsKKwlyZXR1cm4gLTE7Cit9CisKKyNpZmRlZiBTWVNfX3N5c2N0bAorc3RhdGljIGludAorZ2V0ZW50cm9weV9zeXNjdGwodm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0YXRpYyBpbnQgbWliW10gPSB7IENUTF9LRVJOLCBLRVJOX1JBTkRPTSwgUkFORE9NX1VVSUQgfTsKKwlzaXplX3QgaTsKKwlpbnQgc2F2ZV9lcnJubyA9IGVycm5vOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgKSB7CisJCXNpemVfdCBjaHVuayA9IG1pbihsZW4gLSBpLCAxNik7CisKKwkJLyogU1lTX19zeXNjdGwgYmVjYXVzZSBzb21lIHN5c3RlbXMgYWxyZWFkeSByZW1vdmVkIHN5c2N0bCgpICovCisJCXN0cnVjdCBfX3N5c2N0bF9hcmdzIGFyZ3MgPSB7CisJCQkubmFtZSA9IG1pYiwKKwkJCS5ubGVuID0gMywKKwkJCS5vbGR2YWwgPSAoY2hhciopIGJ1ZiArIGksCisJCQkub2xkbGVucCA9ICZjaHVuaywKKwkJfTsKKwkJaWYgKHN5c2NhbGwoU1lTX19zeXNjdGwsICZhcmdzKSAhPSAwKQorCQkJZ290byBzeXNjdGxmYWlsZWQ7CisJCWkgKz0gY2h1bms7CisJfQorCWlmIChnb3RkYXRhKGJ1ZiwgbGVuKSA9PSAwKSB7CisJCWVycm5vID0gc2F2ZV9lcnJubzsKKwkJcmV0dXJuICgwKTsJCQkvKiBzYXRpc2ZpZWQgKi8KKwl9CitzeXNjdGxmYWlsZWQ6CisJZXJybm8gPSBFSU87CisJcmV0dXJuIC0xOworfQorI2VuZGlmIC8qIFNZU19fc3lzY3RsICovCisKKyNpZmRlZiBIQVZFX09QRU5TU0wKKworc3RhdGljIGludCBjbFtdID0geworCUNMT0NLX1JFQUxUSU1FLAorI2lmZGVmIENMT0NLX01PTk9UT05JQworCUNMT0NLX01PTk9UT05JQywKKyNlbmRpZgorI2lmZGVmIENMT0NLX01PTk9UT05JQ19SQVcKKwlDTE9DS19NT05PVE9OSUNfUkFXLAorI2VuZGlmCisjaWZkZWYgQ0xPQ0tfVEFJCisJQ0xPQ0tfVEFJLAorI2VuZGlmCisjaWZkZWYgQ0xPQ0tfVklSVFVBTAorCUNMT0NLX1ZJUlRVQUwsCisjZW5kaWYKKyNpZmRlZiBDTE9DS19VUFRJTUUKKwlDTE9DS19VUFRJTUUsCisjZW5kaWYKKyNpZmRlZiBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQKKwlDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQsCisjZW5kaWYKKyNpZmRlZiBDTE9DS19USFJFQURfQ1BVVElNRV9JRAorCUNMT0NLX1RIUkVBRF9DUFVUSU1FX0lELAorI2VuZGlmCit9OworCitzdGF0aWMgaW50CitnZXRlbnRyb3B5X3BoZHIoc3RydWN0IGRsX3BoZHJfaW5mbyAqaW5mbywgc2l6ZV90IHNpemUsIHZvaWQgKmRhdGEpCit7CisJU0hBNTEyX0NUWCAqY3R4ID0gZGF0YTsKKworCVNIQTUxMl9VcGRhdGUoY3R4LCAmaW5mby0+ZGxwaV9hZGRyLCBzaXplb2YgKGluZm8tPmRscGlfYWRkcikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitnZXRlbnRyb3B5X2ZhbGxiYWNrKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwl1aW50OF90IHJlc3VsdHNbU0hBNTEyX0RJR0VTVF9MRU5HVEhdOworCWludCBzYXZlX2Vycm5vID0gZXJybm8sIGUsIHBncyA9IGdldHBhZ2VzaXplKCksIGZhc3RlciA9IDAsIHJlcGVhdDsKKwlzdGF0aWMgaW50IGNudDsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJc3RydWN0IHJ1c2FnZSBydTsKKwlzaWdzZXRfdCBzaWdzZXQ7CisJc3RydWN0IHN0YXQgc3Q7CisJU0hBNTEyX0NUWCBjdHg7CisJc3RhdGljIHBpZF90IGxhc3RwaWQ7CisJcGlkX3QgcGlkOworCXNpemVfdCBpLCBpaSwgbTsKKwljaGFyICpwOworCisJcGlkID0gZ2V0cGlkKCk7CisJaWYgKGxhc3RwaWQgPT0gcGlkKSB7CisJCWZhc3RlciA9IDE7CisJCXJlcGVhdCA9IDI7CisJfSBlbHNlIHsKKwkJZmFzdGVyID0gMDsKKwkJbGFzdHBpZCA9IHBpZDsKKwkJcmVwZWF0ID0gUkVQRUFUOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyApIHsKKwkJaW50IGo7CisJCVNIQTUxMl9Jbml0KCZjdHgpOworCQlmb3IgKGogPSAwOyBqIDwgcmVwZWF0OyBqKyspIHsKKwkJCUhYKChlID0gZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCkpID09IC0xLCB0dik7CisJCQlpZiAoZSAhPSAtMSkgeworCQkJCWNudCArPSAoaW50KXR2LnR2X3NlYzsKKwkJCQljbnQgKz0gKGludCl0di50dl91c2VjOworCQkJfQorCisJCQlkbF9pdGVyYXRlX3BoZHIoZ2V0ZW50cm9weV9waGRyLCAmY3R4KTsKKworCQkJZm9yIChpaSA9IDA7IGlpIDwgc2l6ZW9mKGNsKS9zaXplb2YoY2xbMF0pOyBpaSsrKQorCQkJCUhYKGNsb2NrX2dldHRpbWUoY2xbaWldLCAmdHMpID09IC0xLCB0cyk7CisKKwkJCUhYKChwaWQgPSBnZXRwaWQoKSkgPT0gLTEsIHBpZCk7CisJCQlIWCgocGlkID0gZ2V0c2lkKHBpZCkpID09IC0xLCBwaWQpOworCQkJSFgoKHBpZCA9IGdldHBwaWQoKSkgPT0gLTEsIHBpZCk7CisJCQlIWCgocGlkID0gZ2V0cGdpZCgwKSkgPT0gLTEsIHBpZCk7CisJCQlIWCgoZSA9IGdldHByaW9yaXR5KDAsIDApKSA9PSAtMSwgZSk7CisKKwkJCWlmICghZmFzdGVyKSB7CisJCQkJdHMudHZfc2VjID0gMDsKKwkJCQl0cy50dl9uc2VjID0gMTsKKwkJCQkodm9pZCkgbmFub3NsZWVwKCZ0cywgTlVMTCk7CisJCQl9CisKKwkJCUhYKHNpZ3BlbmRpbmcoJnNpZ3NldCkgPT0gLTEsIHNpZ3NldCk7CisJCQlIWChzaWdwcm9jbWFzayhTSUdfQkxPQ0ssIE5VTEwsICZzaWdzZXQpID09IC0xLAorCQkJICAgIHNpZ3NldCk7CisKKwkJCUhGKGdldGVudHJvcHkpOwkvKiBhbiBhZGRyIGluIHRoaXMgbGlicmFyeSAqLworCQkJSEYocHJpbnRmKTsJCS8qIGFuIGFkZHIgaW4gbGliYyAqLworCQkJcCA9IChjaGFyICopJnA7CisJCQlIRChwKTsJCS8qIGFuIGFkZHIgb24gc3RhY2sgKi8KKwkJCXAgPSAoY2hhciAqKSZlcnJubzsKKwkJCUhEKHApOwkJLyogdGhlIGFkZHIgb2YgZXJybm8gKi8KKworCQkJaWYgKGkgPT0gMCkgeworCQkJCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzOworCQkJCXN0cnVjdCBzdGF0dmZzIHN0dmZzOworCQkJCXN0cnVjdCB0ZXJtaW9zIHRpb3M7CisJCQkJc3RydWN0IHN0YXRmcyBzdGZzOworCQkJCXNvY2tsZW5fdCBzc2w7CisJCQkJb2ZmX3Qgb2ZmOworCisJCQkJLyoKKwkJCQkgKiBQcmltZS1zaXplZCBtYXBwaW5ncyBlbmNvdXJhZ2UgZnJhZ21lbnRhdGlvbjsKKwkJCQkgKiB0aHVzIGV4cG9zaW5nIHNvbWUgYWRkcmVzcyBlbnRyb3B5LgorCQkJCSAqLworCQkJCXN0cnVjdCBtbSB7CisJCQkJCXNpemVfdAlucGc7CisJCQkJCXZvaWQJKnA7CisJCQkJfSBtbVtdID0JIHsKKwkJCQkJeyAxNywgTUFQX0ZBSUxFRCB9LCB7IDMsIE1BUF9GQUlMRUQgfSwKKwkJCQkJeyAxMSwgTUFQX0ZBSUxFRCB9LCB7IDIsIE1BUF9GQUlMRUQgfSwKKwkJCQkJeyA1LCBNQVBfRkFJTEVEIH0sIHsgMywgTUFQX0ZBSUxFRCB9LAorCQkJCQl7IDcsIE1BUF9GQUlMRUQgfSwgeyAxLCBNQVBfRkFJTEVEIH0sCisJCQkJCXsgNTcsIE1BUF9GQUlMRUQgfSwgeyAzLCBNQVBfRkFJTEVEIH0sCisJCQkJCXsgMTMxLCBNQVBfRkFJTEVEIH0sIHsgMSwgTUFQX0ZBSUxFRCB9LAorCQkJCX07CisKKwkJCQlmb3IgKG0gPSAwOyBtIDwgc2l6ZW9mIG1tL3NpemVvZihtbVswXSk7IG0rKykgeworCQkJCQlIWChtbVttXS5wID0gbW1hcChOVUxMLAorCQkJCQkgICAgbW1bbV0ubnBnICogcGdzLAorCQkJCQkgICAgUFJPVF9SRUFEfFBST1RfV1JJVEUsCisJCQkJCSAgICBNQVBfUFJJVkFURXxNQVBfQU5PTiwgLTEsCisJCQkJCSAgICAob2ZmX3QpMCksIG1tW21dLnApOworCQkJCQlpZiAobW1bbV0ucCAhPSBNQVBfRkFJTEVEKSB7CisJCQkJCQlzaXplX3QgbW87CisKKwkJCQkJCS8qIFRvdWNoIHNvbWUgbWVtb3J5Li4uICovCisJCQkJCQlwID0gbW1bbV0ucDsKKwkJCQkJCW1vID0gY250ICUKKwkJCQkJCSAgICAobW1bbV0ubnBnICogcGdzIC0gMSk7CisJCQkJCQlwW21vXSA9IDE7CisJCQkJCQljbnQgKz0gKGludCkoKGxvbmcpKG1tW21dLnApCisJCQkJCQkgICAgLyBwZ3MpOworCQkJCQl9CisKKwkJCQkJLyogQ2hlY2sgY250cyBhbmQgdGltZXMuLi4gKi8KKwkJCQkJZm9yIChpaSA9IDA7IGlpIDwgc2l6ZW9mKGNsKS9zaXplb2YoY2xbMF0pOworCQkJCQkgICAgaWkrKykgeworCQkJCQkJSFgoKGUgPSBjbG9ja19nZXR0aW1lKGNsW2lpXSwKKwkJCQkJCSAgICAmdHMpKSA9PSAtMSwgdHMpOworCQkJCQkJaWYgKGUgIT0gLTEpCisJCQkJCQkJY250ICs9IChpbnQpdHMudHZfbnNlYzsKKwkJCQkJfQorCisJCQkJCUhYKChlID0gZ2V0cnVzYWdlKFJVU0FHRV9TRUxGLAorCQkJCQkgICAgJnJ1KSkgPT0gLTEsIHJ1KTsKKwkJCQkJaWYgKGUgIT0gLTEpIHsKKwkJCQkJCWNudCArPSAoaW50KXJ1LnJ1X3V0aW1lLnR2X3NlYzsKKwkJCQkJCWNudCArPSAoaW50KXJ1LnJ1X3V0aW1lLnR2X3VzZWM7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlmb3IgKG0gPSAwOyBtIDwgc2l6ZW9mIG1tL3NpemVvZihtbVswXSk7IG0rKykgeworCQkJCQlpZiAobW1bbV0ucCAhPSBNQVBfRkFJTEVEKQorCQkJCQkJbXVubWFwKG1tW21dLnAsIG1tW21dLm5wZyAqIHBncyk7CisJCQkJCW1tW21dLnAgPSBNQVBfRkFJTEVEOworCQkJCX0KKworCQkJCUhYKHN0YXQoIi4iLCAmc3QpID09IC0xLCBzdCk7CisJCQkJSFgoc3RhdHZmcygiLiIsICZzdHZmcykgPT0gLTEsIHN0dmZzKTsKKwkJCQlIWChzdGF0ZnMoIi4iLCAmc3RmcykgPT0gLTEsIHN0ZnMpOworCisJCQkJSFgoc3RhdCgiLyIsICZzdCkgPT0gLTEsIHN0KTsKKwkJCQlIWChzdGF0dmZzKCIvIiwgJnN0dmZzKSA9PSAtMSwgc3R2ZnMpOworCQkJCUhYKHN0YXRmcygiLyIsICZzdGZzKSA9PSAtMSwgc3Rmcyk7CisKKwkJCQlIWCgoZSA9IGZzdGF0KDAsICZzdCkpID09IC0xLCBzdCk7CisJCQkJaWYgKGUgPT0gLTEpIHsKKwkJCQkJaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkgfHwKKwkJCQkJICAgIFNfSVNGSUZPKHN0LnN0X21vZGUpIHx8CisJCQkJCSAgICBTX0lTU09DSyhzdC5zdF9tb2RlKSkgeworCQkJCQkJSFgoZnN0YXR2ZnMoMCwgJnN0dmZzKSA9PSAtMSwKKwkJCQkJCSAgICBzdHZmcyk7CisJCQkJCQlIWChmc3RhdGZzKDAsICZzdGZzKSA9PSAtMSwKKwkJCQkJCSAgICBzdGZzKTsKKwkJCQkJCUhYKChvZmYgPSBsc2VlaygwLCAob2ZmX3QpMCwKKwkJCQkJCSAgICBTRUVLX0NVUikpIDwgMCwgb2ZmKTsKKwkJCQkJfQorCQkJCQlpZiAoU19JU0NIUihzdC5zdF9tb2RlKSkgeworCQkJCQkJSFgodGNnZXRhdHRyKDAsICZ0aW9zKSA9PSAtMSwKKwkJCQkJCSAgICB0aW9zKTsKKwkJCQkJfSBlbHNlIGlmIChTX0lTU09DSyhzdC5zdF9tb2RlKSkgeworCQkJCQkJbWVtc2V0KCZzcywgMCwgc2l6ZW9mIHNzKTsKKwkJCQkJCXNzbCA9IHNpemVvZihzcyk7CisJCQkJCQlIWChnZXRwZWVybmFtZSgwLAorCQkJCQkJICAgICh2b2lkICopJnNzLCAmc3NsKSA9PSAtMSwKKwkJCQkJCSAgICBzcyk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlIWCgoZSA9IGdldHJ1c2FnZShSVVNBR0VfQ0hJTERSRU4sCisJCQkJICAgICZydSkpID09IC0xLCBydSk7CisJCQkJaWYgKGUgIT0gLTEpIHsKKwkJCQkJY250ICs9IChpbnQpcnUucnVfdXRpbWUudHZfc2VjOworCQkJCQljbnQgKz0gKGludClydS5ydV91dGltZS50dl91c2VjOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogU3Vic2VxdWVudCBoYXNoZXMgYWJzb3JiIHByZXZpb3VzIHJlc3VsdCAqLworCQkJCUhEKHJlc3VsdHMpOworCQkJfQorCisJCQlIWCgoZSA9IGdldHRpbWVvZmRheSgmdHYsIE5VTEwpKSA9PSAtMSwgdHYpOworCQkJaWYgKGUgIT0gLTEpIHsKKwkJCQljbnQgKz0gKGludCl0di50dl9zZWM7CisJCQkJY250ICs9IChpbnQpdHYudHZfdXNlYzsKKwkJCX0KKworCQkJSEQoY250KTsKKwkJfQorI2lmZGVmIEhBVkVfR0VUQVVYVkFMCisjaWZkZWYgQVRfUkFORE9NCisJCS8qIE5vdCBhcyByYW5kb20gYXMgeW91IHRoaW5rIGJ1dCB3ZSB0YWtlIHdoYXQgd2UgYXJlIGdpdmVuICovCisJCXAgPSAoY2hhciAqKSBnZXRhdXh2YWwoQVRfUkFORE9NKTsKKwkJaWYgKHApCisJCQlIUihwLCAxNik7CisjZW5kaWYKKyNpZmRlZiBBVF9TWVNJTkZPX0VIRFIKKwkJcCA9IChjaGFyICopIGdldGF1eHZhbChBVF9TWVNJTkZPX0VIRFIpOworCQlpZiAocCkKKwkJCUhSKHAsIHBncyk7CisjZW5kaWYKKyNpZmRlZiBBVF9CQVNFCisJCXAgPSAoY2hhciAqKSBnZXRhdXh2YWwoQVRfQkFTRSk7CisJCWlmIChwKQorCQkJSEQocCk7CisjZW5kaWYKKyNlbmRpZgorCisJCVNIQTUxMl9GaW5hbChyZXN1bHRzLCAmY3R4KTsKKwkJbWVtY3B5KChjaGFyICopYnVmICsgaSwgcmVzdWx0cywgbWluKHNpemVvZihyZXN1bHRzKSwgbGVuIC0gaSkpOworCQlpICs9IG1pbihzaXplb2YocmVzdWx0cyksIGxlbiAtIGkpOworCX0KKwltZW1zZXQocmVzdWx0cywgMCwgc2l6ZW9mIHJlc3VsdHMpOworCWlmIChnb3RkYXRhKGJ1ZiwgbGVuKSA9PSAwKSB7CisJCWVycm5vID0gc2F2ZV9lcnJubzsKKwkJcmV0dXJuIDA7CQkvKiBzYXRpc2ZpZWQgKi8KKwl9CisJZXJybm8gPSBFSU87CisJcmV0dXJuIC0xOworfQorCisjZW5kaWYgLyogSEFWRV9PUEVOU1NMICovCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9nZXRwZ3JwLmMgYi9saWJjL2Jpb25pYy9nZXRwZ3JwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmN2NlZDUuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvZ2V0cGdycC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi1waWRfdCAgZ2V0cGdycCh2b2lkKSAKLXsKLSAgcmV0dXJuIGdldHBnaWQoMCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9nZXRwZ3JwLmNwcCBiL2xpYmMvYmlvbmljL2dldHBncnAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYWNiYjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9nZXRwZ3JwLmNwcApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworcGlkX3QgZ2V0cGdycCgpIHsKKyAgcmV0dXJuIGdldHBnaWQoMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9nZXRwaWQuY3BwIGIvbGliYy9iaW9uaWMvZ2V0cGlkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2Q1YjM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZ2V0cGlkLmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgInB0aHJlYWRfaW50ZXJuYWwuaCIKKworZXh0ZXJuICJDIiBwaWRfdCBfX2dldHBpZCgpOworCitwaWRfdCBnZXRwaWQoKSB7CisgIHB0aHJlYWRfaW50ZXJuYWxfdCogc2VsZiA9IF9fZ2V0X3RocmVhZCgpOworCisgIC8vIERvIHdlIGhhdmUgYSB2YWxpZCBjYWNoZWQgcGlkPworICBwaWRfdCBjYWNoZWRfcGlkOworICBpZiAoX19wcmVkaWN0X3RydWUoc2VsZi0+Z2V0X2NhY2hlZF9waWQoJmNhY2hlZF9waWQpKSkgeworICAgIHJldHVybiBjYWNoZWRfcGlkOworICB9CisKKyAgLy8gV2UncmUgc3RpbGwgaW4gdGhlIGR5bmFtaWMgbGlua2VyIG9yIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgZm9ya2luZywgc28gYXNrIHRoZSBrZXJuZWwuCisgIC8vIFdlIGRvbid0IGtub3cgd2hldGhlciBpdCdzIHNhZmUgdG8gdXBkYXRlIHRoZSBjYWNoZWQgdmFsdWUsIHNvIGRvbid0IHRyeS4KKyAgcmV0dXJuIF9fZ2V0cGlkKCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9nZXRwdC5jIGIvbGliYy9iaW9uaWMvZ2V0cHQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJiNWMxMS4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9nZXRwdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0KLWludCBnZXRwdCh2b2lkKQotewotICByZXR1cm4gb3BlbigiL2Rldi9wdG14IiwgT19SRFdSfE9fTk9DVFRZKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2dldHRpZC5jcHAgYi9saWJjL2Jpb25pYy9nZXR0aWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MmUzNmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9nZXR0aWQuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgorCitwaWRfdCBnZXR0aWQoKSB7CisgIHJldHVybiBfX2dldF90aHJlYWQoKS0+dGlkOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvaWZfaW5kZXh0b25hbWUuYyBiL2xpYmMvYmlvbmljL2lmX2luZGV4dG9uYW1lLmMKaW5kZXggZGMwOGIyOC4uZjBkYjUxMiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvaWZfaW5kZXh0b25hbWUuYworKysgYi9saWJjL2Jpb25pYy9pZl9pbmRleHRvbmFtZS5jCkBAIC00MSw3ICs0MSw2IEBACiBjaGFyKgogaWZfaW5kZXh0b25hbWUodW5zaWduZWQgaWZpbmRleCwgY2hhciAqaWZuYW1lKQogewotICAgIGludCBpbmRleDsKICAgICBpbnQgY3RsX3NvY2s7CiAgICAgc3RydWN0IGlmcmVxIGlmcjsKICAgICBjaGFyKiAgcmV0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2lzc2V0dWdpZC5jIGIvbGliYy9iaW9uaWMvaXNzZXR1Z2lkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxZjhlNDEuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvaXNzZXR1Z2lkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLWludCAgaXNzZXR1Z2lkKHZvaWQpCi17Ci0gICAgLyogZm9yIEJpb25pYywgdGhpcyBpcyBzdWZmaWNpZW50ICovCi0gICAgcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2plbWFsbG9jLmggYi9saWJjL2Jpb25pYy9qZW1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYjFmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9qZW1hbGxvYy5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIExJQkNfQklPTklDX0pFTUFMTE9DX0hfCisjZGVmaW5lIExJQkNfQklPTklDX0pFTUFMTE9DX0hfCisKKyNpbmNsdWRlIDxqZW1hbGxvYy9qZW1hbGxvYy5oPgorCisvLyBOZWVkIHRvIHdyYXAgbWVtYWxpZ24gc2luY2UgamVfbWVtYWxpZ24gZmFpbHMgb24gbm9uLXBvd2VyIG9mIDIgYWxpZ25tZW50cy4KKyNkZWZpbmUgamVfbWVtYWxpZ24gamVfbWVtYWxpZ25fcm91bmRfdXBfYm91bmRhcnkKKworX19CRUdJTl9ERUNMUworCitzdHJ1Y3QgbWFsbGluZm8gamVfbWFsbGluZm8oKTsKK3ZvaWQqIGplX21lbWFsaWduX3JvdW5kX3VwX2JvdW5kYXJ5KHNpemVfdCwgc2l6ZV90KTsKK3ZvaWQqIGplX3B2YWxsb2Moc2l6ZV90KTsKKworX19FTkRfREVDTFMKKworI2VuZGlmICAvLyBMSUJDX0JJT05JQ19ETE1BTExPQ19IXwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvamVtYWxsb2Nfd3JhcHBlci5jcHAgYi9saWJjL2Jpb25pYy9qZW1hbGxvY193cmFwcGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzNkNTYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvamVtYWxsb2Nfd3JhcHBlci5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImplbWFsbG9jLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfbWFjcm9zLmgiCisKK3ZvaWQqIGplX3B2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHNpemVfdCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisgIHNpemVfdCBzaXplID0gQklPTklDX0FMSUdOKGJ5dGVzLCBwYWdlc2l6ZSk7CisgIGlmIChzaXplIDwgYnl0ZXMpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICByZXR1cm4gamVfbWVtYWxpZ24ocGFnZXNpemUsIHNpemUpOworfQorCisjaWZkZWYgamVfbWVtYWxpZ24KKyN1bmRlZiBqZV9tZW1hbGlnbgorI2VuZGlmCisKKy8vIFRoZSBtYW4gcGFnZSBmb3IgbWVtYWxpZ24gc2F5cyBpdCBmYWlscyBpZiBib3VuZGFyeSBpcyBub3QgYSBwb3dlciBvZiAyLAorLy8gYnV0IHRoaXMgaXMgbm90IHRydWUuIEJvdGggZ2xpYmMgYW5kIGRsbWFsbG9jIHJvdW5kIHVwIHRvIHRoZSBuZXh0IHBvd2VyCisvLyBvZiAyLCBzbyB3ZSdsbCBkbyB0aGUgc2FtZS4KK3ZvaWQqIGplX21lbWFsaWduX3JvdW5kX3VwX2JvdW5kYXJ5KHNpemVfdCBib3VuZGFyeSwgc2l6ZV90IHNpemUpIHsKKyAgaWYgKGJvdW5kYXJ5ICE9IDApIHsKKyAgICBpZiAoIXBvd2Vyb2YyKGJvdW5kYXJ5KSkgeworICAgICAgYm91bmRhcnkgPSBCSU9OSUNfUk9VTkRfVVBfUE9XRVJfT0ZfMihib3VuZGFyeSk7CisgICAgfQorICB9IGVsc2UgeworICAgIGJvdW5kYXJ5ID0gMTsKKyAgfQorICByZXR1cm4gamVfbWVtYWxpZ24oYm91bmRhcnksIHNpemUpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbGRleHAuYyBiL2xpYmMvYmlvbmljL2xkZXhwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMWYzZGQuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvbGRleHAuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKiBAKCMpc19zY2FsYm4uYyA1LjEgOTMvMDkvMjQgKi8KLS8qIEAoIylmZGxpYm0uaCA1LjEgOTMvMDkvMjQgKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8ZW5kaWFuLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0vKiBCaXQgZmlkZGxpbmcgcm91dGluZXMgY29waWVkIGZyb20gbXN1bi9zcmMvbWF0aF9wcml2YXRlLmgsdiAxLjE1ICovCi0KLSNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KLQotdHlwZWRlZiB1bmlvbgotewotICBkb3VibGUgdmFsdWU7Ci0gIHN0cnVjdAotICB7Ci0gICAgdV9pbnQzMl90IG1zdzsKLSAgICB1X2ludDMyX3QgbHN3OwotICB9IHBhcnRzOwotfSBpZWVlX2RvdWJsZV9zaGFwZV90eXBlOwotCi0jZW5kaWYKLQotI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgotCi10eXBlZGVmIHVuaW9uCi17Ci0gIGRvdWJsZSB2YWx1ZTsKLSAgc3RydWN0Ci0gIHsKLSAgICB1X2ludDMyX3QgbHN3OwotICAgIHVfaW50MzJfdCBtc3c7Ci0gIH0gcGFydHM7Ci19IGllZWVfZG91YmxlX3NoYXBlX3R5cGU7Ci0KLSNlbmRpZgotCi0vKiBHZXQgdHdvIDMyIGJpdCBpbnRzIGZyb20gYSBkb3VibGUuICAqLwotCi0jZGVmaW5lIEVYVFJBQ1RfV09SRFMoaXgwLGl4MSxkKQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0gIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgZXdfdTsJCQkJCVwKLSAgZXdfdS52YWx1ZSA9IChkKTsJCQkJCQlcCi0gIChpeDApID0gZXdfdS5wYXJ0cy5tc3c7CQkJCQlcCi0gIChpeDEpID0gZXdfdS5wYXJ0cy5sc3c7CQkJCQlcCi19IHdoaWxlICgwKQotCi0vKiBHZXQgdGhlIG1vcmUgc2lnbmlmaWNhbnQgMzIgYml0IGludCBmcm9tIGEgZG91YmxlLiAgKi8KLQotI2RlZmluZSBHRVRfSElHSF9XT1JEKGksZCkJCQkJCVwKLWRvIHsJCQkJCQkJCVwKLSAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSBnaF91OwkJCQkJXAotICBnaF91LnZhbHVlID0gKGQpOwkJCQkJCVwKLSAgKGkpID0gZ2hfdS5wYXJ0cy5tc3c7CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotLyogU2V0IHRoZSBtb3JlIHNpZ25pZmljYW50IDMyIGJpdHMgb2YgYSBkb3VibGUgZnJvbSBhbiBpbnQuICAqLwotCi0jZGVmaW5lIFNFVF9ISUdIX1dPUkQoZCx2KQkJCQkJXAotZG8gewkJCQkJCQkJXAotICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHNoX3U7CQkJCQlcCi0gIHNoX3UudmFsdWUgPSAoZCk7CQkJCQkJXAotICBzaF91LnBhcnRzLm1zdyA9ICh2KTsJCQkJCQlcCi0gIChkKSA9IHNoX3UudmFsdWU7CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotCi1zdGF0aWMgY29uc3QgZG91YmxlCi10d281NCAgID0gIDEuODAxNDM5ODUwOTQ4MTk4NDAwMDBlKzE2LCAvKiAweDQzNTAwMDAwLCAweDAwMDAwMDAwICovCi10d29tNTQgID0gIDUuNTUxMTE1MTIzMTI1NzgyNzAyMTJlLTE3LCAvKiAweDNDOTAwMDAwLCAweDAwMDAwMDAwICovCi1odWdlICAgPSAxLjBlKzMwMCwKLXRpbnkgICA9IDEuMGUtMzAwOwotCi1zdGF0aWMgZG91YmxlCi1fY29weXNpZ24oZG91YmxlIHgsIGRvdWJsZSB5KQotewotCXVfaW50MzJfdCBoeCxoeTsKLQlHRVRfSElHSF9XT1JEKGh4LHgpOwotCUdFVF9ISUdIX1dPUkQoaHkseSk7Ci0JU0VUX0hJR0hfV09SRCh4LChoeCYweDdmZmZmZmZmKXwoaHkmMHg4MDAwMDAwMCkpOwotCXJldHVybiB4OwotfQotCi1kb3VibGUKLWxkZXhwKGRvdWJsZSB4LCBpbnQgbikKLXsKLQlpbnQzMl90IGssaHgsbHg7Ci0JRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKLSAgICAgICAgayA9IChoeCYweDdmZjAwMDAwKT4+MjA7CQkvKiBleHRyYWN0IGV4cG9uZW50ICovCi0gICAgICAgIGlmIChrPT0wKSB7CQkJCS8qIDAgb3Igc3Vibm9ybWFsIHggKi8KLSAgICAgICAgICAgIGlmICgobHh8KGh4JjB4N2ZmZmZmZmYpKT09MCkgcmV0dXJuIHg7IC8qICstMCAqLwotCSAgICB4ICo9IHR3bzU0OwotCSAgICBHRVRfSElHSF9XT1JEKGh4LHgpOwotCSAgICBrID0gKChoeCYweDdmZjAwMDAwKT4+MjApIC0gNTQ7Ci0gICAgICAgICAgICBpZiAobjwgLTUwMDAwKSByZXR1cm4gdGlueSp4OyAJLyp1bmRlcmZsb3cqLwotCSAgICB9Ci0gICAgICAgIGlmIChrPT0weDdmZikgcmV0dXJuIHgreDsJCS8qIE5hTiBvciBJbmYgKi8KLSAgICAgICAgayA9IGsrbjsKLSAgICAgICAgaWYgKGsgPiAgMHg3ZmUpIHJldHVybiBodWdlKl9jb3B5c2lnbihodWdlLHgpOyAvKiBvdmVyZmxvdyAgKi8KLSAgICAgICAgaWYgKGsgPiAwKSAJCQkJLyogbm9ybWFsIHJlc3VsdCAqLwotCSAgICB7U0VUX0hJR0hfV09SRCh4LChoeCYweDgwMGZmZmZmKXwoazw8MjApKTsgcmV0dXJuIHg7fQotICAgICAgICBpZiAoayA8PSAtNTQpIHsKLSAgICAgICAgICAgIGlmIChuID4gNTAwMDApIAkvKiBpbiBjYXNlIGludGVnZXIgb3ZlcmZsb3cgaW4gbitrICovCi0JCXJldHVybiBodWdlKl9jb3B5c2lnbihodWdlLHgpOwkvKm92ZXJmbG93Ki8KLQkgICAgZWxzZSByZXR1cm4gdGlueSpfY29weXNpZ24odGlueSx4KTsgCS8qdW5kZXJmbG93Ki8KLQl9Ci0gICAgICAgIGsgKz0gNTQ7CQkJCS8qIHN1Ym5vcm1hbCByZXN1bHQgKi8KLQlTRVRfSElHSF9XT1JEKHgsKGh4JjB4ODAwZmZmZmYpfChrPDwyMCkpOwotICAgICAgICByZXR1cm4geCp0d29tNTQ7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9sZWdhY3lfMzJfYml0X3N1cHBvcnQuY3BwIGIvbGliYy9iaW9uaWMvbGVnYWN5XzMyX2JpdF9zdXBwb3J0LmNwcAppbmRleCBkN2NjZGI5Li43M2Y3N2JlIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9sZWdhY3lfMzJfYml0X3N1cHBvcnQuY3BwCisrKyBiL2xpYmMvYmlvbmljL2xlZ2FjeV8zMl9iaXRfc3VwcG9ydC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtNTgsMTEgKzU5LDEzIEBACiBpbnQgZnN0YXRmcyhpbnQgZmQsIHN0cnVjdCBzdGF0ZnMqIHN0YXQpIHsKICAgcmV0dXJuIF9fZnN0YXRmczY0KGZkLCBzaXplb2YoKnN0YXQpLCBzdGF0KTsKIH0KK19fc3Ryb25nX2FsaWFzKGZzdGF0ZnM2NCwgZnN0YXRmcyk7CiAKIC8vIEZvciBzdGF0ZnMgd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIGFyZ3VtZW50IGdpdmluZyB0aGUga2VybmVsIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuCiBpbnQgc3RhdGZzKGNvbnN0IGNoYXIqIHBhdGgsIHN0cnVjdCBzdGF0ZnMqIHN0YXQpIHsKICAgcmV0dXJuIF9fc3RhdGZzNjQocGF0aCwgc2l6ZW9mKCpzdGF0KSwgc3RhdCk7CiB9CitfX3N0cm9uZ19hbGlhcyhzdGF0ZnM2NCwgc3RhdGZzKTsKIAogLy8gRm9yIGxzZWVrNjQgd2UgbmVlZCB0byB1c2UgdGhlIGxsc2VlayBzeXN0ZW0gY2FsbCB3aGljaCBzcGxpdHMgdGhlIG9mZjY0X3QgaW4gdHdvIGFuZAogLy8gcmV0dXJucyB0aGUgb2ZmNjRfdCByZXN1bHQgdmlhIGEgcG9pbnRlciBiZWNhdXNlIDMyLWJpdCBrZXJuZWxzIGNhbid0IHJldHVybiA2NC1iaXQgcmVzdWx0cy4KQEAgLTg2LDYgKzg5LDExIEBACiAgIHJldHVybiBwd3JpdGU2NChmZCwgYnVmLCBieXRlX2NvdW50LCBzdGF0aWNfY2FzdDxvZmY2NF90PihvZmZzZXQpKTsKIH0KIAorLy8gVGhlcmUgaXMgbm8gZmFsbG9jYXRlIGZvciAzMi1iaXQgb2ZmX3QsIHNvIHdlIG5lZWQgdG8gd2lkZW4gYW5kIGNhbGwgZmFsbG9jYXRlNjQuCitpbnQgZmFsbG9jYXRlKGludCBmZCwgaW50IG1vZGUsIG9mZl90IG9mZnNldCwgb2ZmX3QgbGVuZ3RoKSB7CisgIHJldHVybiBmYWxsb2NhdGU2NChmZCwgbW9kZSwgc3RhdGljX2Nhc3Q8b2ZmNjRfdD4ob2Zmc2V0KSwgc3RhdGljX2Nhc3Q8b2ZmNjRfdD4obGVuZ3RoKSk7Cit9CisKIC8vIFRoZXJlIGlzIG5vIGdldHJsaW1pdDY0IHN5c3RlbSBjYWxsLCBzbyB3ZSBuZWVkIHRvIHVzZSBwcmxpbWl0NjQuCiBpbnQgZ2V0cmxpbWl0NjQoaW50IHJlc291cmNlLCBybGltaXQ2NCogbGltaXRzNjQpIHsKICAgcmV0dXJuIHBybGltaXQ2NCgwLCByZXNvdXJjZSwgTlVMTCwgbGltaXRzNjQpOwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbGZzNjRfc3VwcG9ydC5jcHAgYi9saWJjL2Jpb25pYy9sZnM2NF9zdXBwb3J0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjc5NWY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbGZzNjRfc3VwcG9ydC5jcHAKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxmdHcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworaW50IG1rc3RlbXA2NChjaGFyKiBmaWxlbmFtZSkgeworICAvLyBEZWxlZ2F0aW9uIHdpbGwgd29yayBpbiB0aGlzIGNhc2UgYmVjYXVzZSBhbGwgdGhlIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzCisgIC8vIGFyZSBhbHJlYWR5IDY0LWJpdCByZWFkeS4gSW4gcGFydGljdWxhciwgd2UgZG9uJ3QgaGF2ZSBub24tT19MQVJHRUZJTEUKKyAgLy8gb3BlbiAob3VyIG9wZW4gaXMgYWN0dWFsbHkgb3BlbjY0KSBhbmQgc3RhdCBhbmQgc3RhdDY0IGFyZSB0aGUgc2FtZS4KKyAgcmV0dXJuIG1rc3RlbXAoZmlsZW5hbWUpOworfQorCit0eXBlZGVmIGludCAoKmZ0d19mbikoY29uc3QgY2hhciosIGNvbnN0IHN0cnVjdCBzdGF0KiwgaW50KTsKK3R5cGVkZWYgaW50ICgqbmZ0d19mbikoY29uc3QgY2hhciosIGNvbnN0IHN0cnVjdCBzdGF0KiwgaW50LCBzdHJ1Y3QgRlRXKik7CisKK2ludCBmdHc2NChjb25zdCBjaGFyICpkaXJwYXRoLAorICAgIGludCAoKmZuKShjb25zdCBjaGFyKiwgY29uc3Qgc3RydWN0IHN0YXQ2NCosIGludCksIGludCBub3BlbmZkKSB7CisgIHJldHVybiBmdHcoZGlycGF0aCwgcmVpbnRlcnByZXRfY2FzdDxmdHdfZm4+KGZuKSwgbm9wZW5mZCk7Cit9CisKK2ludCBuZnR3NjQoY29uc3QgY2hhciAqIGRpcnBhdGgsCisgICAgaW50ICgqZm4pKGNvbnN0IGNoYXIqLCBjb25zdCBzdHJ1Y3Qgc3RhdDY0KiwgaW50LCBzdHJ1Y3QgRlRXKiksCisgICAgaW50IG5vcGVuZmQsIGludCBmbGFncykgeworICByZXR1cm4gbmZ0dyhkaXJwYXRoLCByZWludGVycHJldF9jYXN0PG5mdHdfZm4+KGZuKSwgbm9wZW5mZCwgZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbGliY19pbml0X2NvbW1vbi5jcHAgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmNwcAppbmRleCAxY2ZhZjUwLi45NTAwNzNhIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmNwcAorKysgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmNwcApAQCAtMzYsMTAgKzM2LDggQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzeXMvYXV4di5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLSNpbmNsdWRlICJhdGV4aXQuaCIKICNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19hdXh2LmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfc3NwLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfdGxzLmgiCkBAIC00NywxMSArNDUsMTIgQEAKICNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCiAKIGV4dGVybiAiQyIgYWJvcnRfbXNnX3QqKiBfX2Fib3J0X21lc3NhZ2VfcHRyOwotZXh0ZXJuICJDIiB1aW50cHRyX3QgX19nZXRfc3Aodm9pZCk7CiBleHRlcm4gIkMiIGludCBfX3N5c3RlbV9wcm9wZXJ0aWVzX2luaXQodm9pZCk7CiBleHRlcm4gIkMiIGludCBfX3NldF90bHModm9pZCogcHRyKTsKIGV4dGVybiAiQyIgaW50IF9fc2V0X3RpZF9hZGRyZXNzKGludCogdGlkX2FkZHJlc3MpOwogCit2b2lkIF9fbGliY19pbml0X3Zkc28oKTsKKwogLy8gTm90IHB1YmxpYywgYnV0IHdlbGwta25vd24gaW4gdGhlIEJTRHMuCiBjb25zdCBjaGFyKiBfX3Byb2duYW1lOwogCkBAIC02MSwyMyArNjAsMTIgQEAKIC8vIERlY2xhcmVkIGluICJwcml2YXRlL2Jpb25pY19zc3AuaCIuCiB1aW50cHRyX3QgX19zdGFja19jaGtfZ3VhcmQgPSAwOwogCi1zdGF0aWMgc2l6ZV90IGdldF9tYWluX3RocmVhZF9zdGFja19zaXplKCkgewotICBybGltaXQgc3RhY2tfbGltaXQ7Ci0gIGludCBybGltaXRfcmVzdWx0ID0gZ2V0cmxpbWl0KFJMSU1JVF9TVEFDSywgJnN0YWNrX2xpbWl0KTsKLSAgaWYgKChybGltaXRfcmVzdWx0ID09IDApICYmCi0gICAgICAoc3RhY2tfbGltaXQucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSkgJiYKLSAgICAgIChzdGFja19saW1pdC5ybGltX2N1ciA+IFBUSFJFQURfU1RBQ0tfTUlOKSkgewotICAgIHJldHVybiAoc3RhY2tfbGltaXQucmxpbV9jdXIgJiB+KFBBR0VfU0laRSAtIDEpKTsKLSAgfQotICByZXR1cm4gUFRIUkVBRF9TVEFDS19TSVpFX0RFRkFVTFQ7Ci19Ci0KIC8qIEluaXQgVExTIGZvciB0aGUgaW5pdGlhbCB0aHJlYWQuIENhbGxlZCBieSB0aGUgbGlua2VyIF9iZWZvcmVfIGxpYmMgaXMgbWFwcGVkCiAgKiBpbiBtZW1vcnkuIEJld2FyZTogYWxsIHdyaXRlcyB0byBsaWJjIGdsb2JhbHMgZnJvbSB0aGlzIGZ1bmN0aW9uIHdpbGwKICAqIGFwcGx5IHRvIGxpbmtlci1wcml2YXRlIGNvcGllcyBhbmQgd2lsbCBub3QgYmUgdmlzaWJsZSBmcm9tIGxpYmMgbGF0ZXIgb24uCiAgKgogICogTm90ZTogdGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgcHRocmVhZF9pbnRlcm5hbF90IGZvciB0aGUgaW5pdGlhbCB0aHJlYWQgYW5kCi0gKiBzdG9yZXMgdGhlIHBvaW50ZXIgaW4gVExTLCBidXQgZG9lcyBub3QgYWRkIGl0IHRvIHB0aHJlYWQncyBnVGhyZWFkTGlzdC4gVGhpcworICogc3RvcmVzIHRoZSBwb2ludGVyIGluIFRMUywgYnV0IGRvZXMgbm90IGFkZCBpdCB0byBwdGhyZWFkJ3MgdGhyZWFkIGxpc3QuIFRoaXMKICAqIGhhcyB0byBiZSBkb25lIGxhdGVyIGZyb20gbGliYyBpdHNlbGYgKHNlZSBfX2xpYmNfaW5pdF9jb21tb24pLgogICoKICAqIFRoaXMgZnVuY3Rpb24gYWxzbyBzdG9yZXMgYSBwb2ludGVyIHRvIHRoZSBrZXJuZWwgYXJndW1lbnQgYmxvY2sgaW4gYSBUTFMgc2xvdCB0byBiZQpAQCAtODYsMjIgKzc0LDI0IEBACiB2b2lkIF9fbGliY19pbml0X3RscyhLZXJuZWxBcmd1bWVudEJsb2NrJiBhcmdzKSB7CiAgIF9fbGliY19hdXh2ID0gYXJncy5hdXh2OwogCi0gIHVpbnRwdHJfdCBzdGFja190b3AgPSAoX19nZXRfc3AoKSAmIH4oUEFHRV9TSVpFIC0gMSkpICsgUEFHRV9TSVpFOwotICBzaXplX3Qgc3RhY2tfc2l6ZSA9IGdldF9tYWluX3RocmVhZF9zdGFja19zaXplKCk7Ci0gIHVpbnRwdHJfdCBzdGFja19ib3R0b20gPSBzdGFja190b3AgLSBzdGFja19zaXplOwotCiAgIHN0YXRpYyB2b2lkKiB0bHNbQklPTklDX1RMU19TTE9UU107CiAgIHN0YXRpYyBwdGhyZWFkX2ludGVybmFsX3QgbWFpbl90aHJlYWQ7CiAgIG1haW5fdGhyZWFkLnRscyA9IHRsczsKIAogICAvLyBUZWxsIHRoZSBrZXJuZWwgdG8gY2xlYXIgb3VyIHRpZCBmaWVsZCB3aGVuIHdlIGV4aXQsIHNvIHdlJ3JlIGxpa2UgYW55IG90aGVyIHB0aHJlYWQuCisgIC8vIEFzIGEgc2lkZS1lZmZlY3QsIHRoaXMgdGVsbHMgdXMgb3VyIHBpZCAod2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIG1haW4gdGhyZWFkJ3MgdGlkKS4KICAgbWFpbl90aHJlYWQudGlkID0gX19zZXRfdGlkX2FkZHJlc3MoJm1haW5fdGhyZWFkLnRpZCk7CisgIG1haW5fdGhyZWFkLnNldF9jYWNoZWRfcGlkKG1haW5fdGhyZWFkLnRpZCk7CiAKLSAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgc3RhY2ssIGFuZCB3ZSBkb24ndCB3YW50IHRvIGZyZWUgaXQgdXAgb24gZXhpdCAoYmVjYXVzZSB0aGluZ3MgbGlrZQotICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCBnbG9iYWwgc2NvcGUgbGl2ZSBvbiBpdCkuCisgIC8vIFdlIGRvbid0IHdhbnQgdG8gZnJlZSB0aGUgbWFpbiB0aHJlYWQncyBzdGFjayBldmVuIHdoZW4gdGhlIG1haW4gdGhyZWFkIGV4aXRzCisgIC8vIGJlY2F1c2UgdGhpbmdzIGxpa2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggZ2xvYmFsIHNjb3BlIGxpdmUgb24gaXQuCisgIC8vIFdlIGFsc28gY2FuJ3QgZnJlZSB0aGUgcHRocmVhZF9pbnRlcm5hbF90IGl0c2VsZiwgc2luY2UgdGhhdCBsaXZlcyBvbiB0aGUgbWFpbgorICAvLyB0aHJlYWQncyBzdGFjayByYXRoZXIgdGhhbiBvbiB0aGUgaGVhcC4KICAgcHRocmVhZF9hdHRyX2luaXQoJm1haW5fdGhyZWFkLmF0dHIpOwotICBwdGhyZWFkX2F0dHJfc2V0c3RhY2soJm1haW5fdGhyZWFkLmF0dHIsICh2b2lkKikgc3RhY2tfYm90dG9tLCBzdGFja19zaXplKTsKICAgbWFpbl90aHJlYWQuYXR0ci5mbGFncyA9IFBUSFJFQURfQVRUUl9GTEFHX1VTRVJfQUxMT0NBVEVEX1NUQUNLIHwgUFRIUkVBRF9BVFRSX0ZMQUdfTUFJTl9USFJFQUQ7CisgIG1haW5fdGhyZWFkLmF0dHIuZ3VhcmRfc2l6ZSA9IDA7IC8vIFRoZSBtYWluIHRocmVhZCBoYXMgbm8gZ3VhcmQgcGFnZS4KKyAgbWFpbl90aHJlYWQuYXR0ci5zdGFja19zaXplID0gMDsgLy8gVXNlciBjb2RlIHNob3VsZCBuZXZlciBzZWUgdGhpczsgd2UnbGwgY29tcHV0ZSBpdCB3aGVuIGFza2VkLgorICAvLyBUT0RPOiB0aGUgbWFpbiB0aHJlYWQncyBzY2hlZF9wb2xpY3kgYW5kIHNjaGVkX3ByaW9yaXR5IG5lZWQgdG8gYmUgcXVlcmllZC4KIAogICBfX2luaXRfdGhyZWFkKCZtYWluX3RocmVhZCwgZmFsc2UpOwogICBfX2luaXRfdGxzKCZtYWluX3RocmVhZCk7CkBAIC0xMjcsNiArMTE3LDggQEAKICAgX3B0aHJlYWRfaW50ZXJuYWxfYWRkKG1haW5fdGhyZWFkKTsKIAogICBfX3N5c3RlbV9wcm9wZXJ0aWVzX2luaXQoKTsgLy8gUmVxdWlyZXMgJ2Vudmlyb24nLgorCisgIF9fbGliY19pbml0X3Zkc28oKTsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgbm9ybWFsIHByb2dyYW0gdGVybWluYXRpb24KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9jb21tb24uaCBiL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9jb21tb24uaAppbmRleCA1OWRjN2RmLi4zMDMyZjk5IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmgKKysrIGIvbGliYy9iaW9uaWMvbGliY19pbml0X2NvbW1vbi5oCkBAIC00MywxNCArNDMsMTQgQEAKIF9fbm9yZXR1cm4gdm9pZCBfX2xpYmNfaW5pdCh2b2lkKiByYXdfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqb25leGl0KSh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpzbGluZ3Nob3QpKGludCwgY2hhcioqLCBjaGFyKiopLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdG9yc19hcnJheV90IGNvbnN0ICogY29uc3Qgc3RydWN0b3JzKTsKLXZvaWQgX19saWJjX2Zpbmkodm9pZCogZmluaXRfYXJyYXkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdG9yc19hcnJheV90IGNvbnN0KiBjb25zdCBzdHJ1Y3RvcnMpOworX19MSUJDX0hJRERFTl9fIHZvaWQgX19saWJjX2Zpbmkodm9pZCogZmluaXRfYXJyYXkpOwogCiBfX0VORF9ERUNMUwogCiAjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKIGNsYXNzIEtlcm5lbEFyZ3VtZW50QmxvY2s7Ci12b2lkIF9fTElCQ19ISURERU5fXyBfX2xpYmNfaW5pdF9jb21tb24oS2VybmVsQXJndW1lbnRCbG9jayYgYXJncyk7CitfX0xJQkNfSElEREVOX18gdm9pZCBfX2xpYmNfaW5pdF9jb21tb24oS2VybmVsQXJndW1lbnRCbG9jayYgYXJncyk7CiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9saWJjX2luaXRfZHluYW1pYy5jcHAgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfZHluYW1pYy5jcHAKaW5kZXggNjFmYjg4Ny4uNzgxMjVmOSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbGliY19pbml0X2R5bmFtaWMuY3BwCisrKyBiL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9keW5hbWljLmNwcApAQCAtNDgsMTYgKzQ4LDE2IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8ZWxmLmg+Ci0jaW5jbHVkZSAiYXRleGl0LmgiCiAjaW5jbHVkZSAibGliY19pbml0X2NvbW1vbi5oIgogCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfdGxzLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9LZXJuZWxBcmd1bWVudEJsb2NrLmgiCiAKIGV4dGVybiAiQyIgewotICBleHRlcm4gdm9pZCBwdGhyZWFkX2RlYnVnX2luaXQodm9pZCk7CiAgIGV4dGVybiB2b2lkIG1hbGxvY19kZWJ1Z19pbml0KHZvaWQpOwogICBleHRlcm4gdm9pZCBtYWxsb2NfZGVidWdfZmluaSh2b2lkKTsKKyAgZXh0ZXJuIHZvaWQgbmV0ZENsaWVudEluaXQodm9pZCk7CisgIGV4dGVybiBpbnQgX19jeGFfYXRleGl0KHZvaWQgKCopKHZvaWQgKiksIHZvaWQgKiwgdm9pZCAqKTsKIH07CiAKIC8vIFdlIGZsYWcgdGhlIF9fbGliY19wcmVpbml0IGZ1bmN0aW9uIGFzIGEgY29uc3RydWN0b3IgdG8gZW5zdXJlCkBAIC03Niw5ICs3Niw5IEBACiAKICAgX19saWJjX2luaXRfY29tbW9uKCphcmdzKTsKIAotICAvLyBIb29rcyBmb3IgdGhlIGRlYnVnIG1hbGxvYyBhbmQgcHRocmVhZCBsaWJyYXJpZXMgdG8gbGV0IHRoZW0ga25vdyB0aGF0IHdlJ3JlIHN0YXJ0aW5nIHVwLgotICBwdGhyZWFkX2RlYnVnX2luaXQoKTsKKyAgLy8gSG9va3MgZm9yIHZhcmlvdXMgbGlicmFyaWVzIHRvIGxldCB0aGVtIGtub3cgdGhhdCB3ZSdyZSBzdGFydGluZyB1cC4KICAgbWFsbG9jX2RlYnVnX2luaXQoKTsKKyAgbmV0ZENsaWVudEluaXQoKTsKIH0KIAogX19MSUJDX0hJRERFTl9fIHZvaWQgX19saWJjX3Bvc3RmaW5pKCkgewpAQCAtOTQsNyArOTQsNyBAQAogLy8gTm90ZSB0aGF0IHRoZSBkeW5hbWljIGxpbmtlciBoYXMgYWxzbyBydW4gYWxsIGNvbnN0cnVjdG9ycyBpbiB0aGUKIC8vIGV4ZWN1dGFibGUgYXQgdGhpcyBwb2ludC4KIF9fbm9yZXR1cm4gdm9pZCBfX2xpYmNfaW5pdCh2b2lkKiByYXdfYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqb25leGl0KSh2b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqb25leGl0KSh2b2lkKSBfX3VudXNlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpzbGluZ3Nob3QpKGludCwgY2hhcioqLCBjaGFyKiopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdG9yc19hcnJheV90IGNvbnN0ICogY29uc3Qgc3RydWN0b3JzKSB7CiAKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9zdGF0aWMuY3BwIGIvbGliYy9iaW9uaWMvbGliY19pbml0X3N0YXRpYy5jcHAKaW5kZXggMTgyNTE2Ny4uYmMxMWYzZCAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbGliY19pbml0X3N0YXRpYy5jcHAKKysrIGIvbGliYy9iaW9uaWMvbGliY19pbml0X3N0YXRpYy5jcHAKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxzeXMvYXV4di5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAKLSNpbmNsdWRlICJhdGV4aXQuaCIKICNpbmNsdWRlICJsaWJjX2luaXRfY29tbW9uLmgiCiAjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgogCkBAIC02MCw2ICs1OSw4IEBACiAvLyBpdHNlbGYgYXQgdGhlIHN0YXJ0IG9mIGEgcGFnZS4KICNkZWZpbmUgUEFHRV9FTkQoeCkgICAgUEFHRV9TVEFSVCgoeCkgKyAoUEFHRV9TSVpFLTEpKQogCitleHRlcm4gIkMiIGludCBfX2N4YV9hdGV4aXQodm9pZCAoKikodm9pZCAqKSwgdm9pZCAqLCB2b2lkICopOworCiBzdGF0aWMgdm9pZCBjYWxsX2FycmF5KHZvaWQoKipsaXN0KSgpKSB7CiAgIC8vIEZpcnN0IGVsZW1lbnQgaXMgLTEsIGxpc3QgaXMgbnVsbC10ZXJtaW5hdGVkCiAgIHdoaWxlICgqKytsaXN0KSB7CkBAIC02OCwxNiArNjksMTYgQEAKIH0KIAogc3RhdGljIHZvaWQgYXBwbHlfZ251X3JlbHJvKCkgewotICBFbGZfUGhkciogcGhkcl9zdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmX1BoZHIqPihnZXRhdXh2YWwoQVRfUEhEUikpOworICBFbGZXKFBoZHIpKiBwaGRyX3N0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFBoZHIpKj4oZ2V0YXV4dmFsKEFUX1BIRFIpKTsKICAgdW5zaWduZWQgbG9uZyBpbnQgcGhkcl9jdCA9IGdldGF1eHZhbChBVF9QSE5VTSk7CiAKLSAgZm9yIChFbGZfUGhkciogcGhkciA9IHBoZHJfc3RhcnQ7IHBoZHIgPCAocGhkcl9zdGFydCArIHBoZHJfY3QpOyBwaGRyKyspIHsKKyAgZm9yIChFbGZXKFBoZHIpKiBwaGRyID0gcGhkcl9zdGFydDsgcGhkciA8IChwaGRyX3N0YXJ0ICsgcGhkcl9jdCk7IHBoZHIrKykgewogICAgIGlmIChwaGRyLT5wX3R5cGUgIT0gUFRfR05VX1JFTFJPKSB7CiAgICAgICBjb250aW51ZTsKICAgICB9CiAKLSAgICBFbGZfQWRkciBzZWdfcGFnZV9zdGFydCA9IFBBR0VfU1RBUlQocGhkci0+cF92YWRkcik7Ci0gICAgRWxmX0FkZHIgc2VnX3BhZ2VfZW5kID0gUEFHRV9FTkQocGhkci0+cF92YWRkciArIHBoZHItPnBfbWVtc3opOworICAgIEVsZlcoQWRkcikgc2VnX3BhZ2Vfc3RhcnQgPSBQQUdFX1NUQVJUKHBoZHItPnBfdmFkZHIpOworICAgIEVsZlcoQWRkcikgc2VnX3BhZ2VfZW5kID0gUEFHRV9FTkQocGhkci0+cF92YWRkciArIHBoZHItPnBfbWVtc3opOwogCiAgICAgLy8gQ2hlY2sgcmV0dXJuIHZhbHVlIGhlcmU/IFdoYXQgZG8gd2UgZG8gaWYgd2UgZmFpbD8KICAgICBtcHJvdGVjdChyZWludGVycHJldF9jYXN0PHZvaWQqPihzZWdfcGFnZV9zdGFydCksIHNlZ19wYWdlX2VuZCAtIHNlZ19wYWdlX3N0YXJ0LCBQUk9UX1JFQUQpOwpAQCAtODUsNyArODYsNyBAQAogfQogCiBfX25vcmV0dXJuIHZvaWQgX19saWJjX2luaXQodm9pZCogcmF3X2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKm9uZXhpdCkodm9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKm9uZXhpdCkodm9pZCkgX191bnVzZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqc2xpbmdzaG90KShpbnQsIGNoYXIqKiwgY2hhcioqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RvcnNfYXJyYXlfdCBjb25zdCAqIGNvbnN0IHN0cnVjdG9ycykgewogICBLZXJuZWxBcmd1bWVudEJsb2NrIGFyZ3MocmF3X2FyZ3MpOwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbGliY19sb2dnaW5nLmNwcCBiL2xpYmMvYmlvbmljL2xpYmNfbG9nZ2luZy5jcHAKaW5kZXggMmQwMDU5Ni4uNTY1NTUyNiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbGliY19sb2dnaW5nLmNwcAorKysgYi9saWJjL2Jpb25pYy9saWJjX2xvZ2dpbmcuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiLi4vcHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIgLy8gUmVsYXRpdmUgcGF0aCBzbyB3ZSBjYW4gI2luY2x1ZGUgdGhpcyAuY3BwIGZpbGUgZm9yIHRlc3RpbmcuCiAjaW5jbHVkZSAiLi4vcHJpdmF0ZS9TY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIuaCIKIAorI2luY2x1ZGUgPGFuZHJvaWQvc2V0X2Fib3J0X21lc3NhZ2UuaD4KICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CkBAIC0zOCwxMCArMzksMTQgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvdWlvLmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CisjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCi1zdGF0aWMgcHRocmVhZF9tdXRleF90IGdBYm9ydE1zZ0xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnX2Fib3J0X21zZ19sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKIAogX19MSUJDX0hJRERFTl9fIGFib3J0X21zZ190KiogX19hYm9ydF9tZXNzYWdlX3B0cjsgLy8gQWNjZXNzaWJsZSB0byBfX2xpYmNfaW5pdF9jb21tb24uCiAKQEAgLTEzNiw3ICsxNDEsNyBAQAogCiAgICAgZm9yICg7OykgewogICAgICAgICBpbnQgY2ggPSAqcDsKLSAgICAgICAgdW5zaWduZWQgZCA9ICh1bnNpZ25lZCkoY2ggLSAnMCcpOworICAgICAgICB1bnNpZ25lZCBkID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoIC0gJzAnKTsKIAogICAgICAgICBpZiAoZCA+PSAxMFUpIHsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjg5LDEzICsyOTQsMTMgQEAKICAgICAgICAgLyogcGFyc2UgZmllbGQgd2lkdGggKi8KICAgICAgICAgaWYgKChjID49ICcwJyAmJiBjIDw9ICc5JykpIHsKICAgICAgICAgICAgIG5uIC0tOwotICAgICAgICAgICAgd2lkdGggPSAoaW50KXBhcnNlX2RlY2ltYWwoZm9ybWF0LCAmbm4pOworICAgICAgICAgICAgd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlX2RlY2ltYWwoZm9ybWF0LCAmbm4pKTsKICAgICAgICAgICAgIGMgPSBmb3JtYXRbbm4rK107CiAgICAgICAgIH0KIAogICAgICAgICAvKiBwYXJzZSBwcmVjaXNpb24gKi8KICAgICAgICAgaWYgKGMgPT0gJy4nKSB7Ci0gICAgICAgICAgICBwcmVjID0gKGludClwYXJzZV9kZWNpbWFsKGZvcm1hdCwgJm5uKTsKKyAgICAgICAgICAgIHByZWMgPSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlX2RlY2ltYWwoZm9ybWF0LCAmbm4pKTsKICAgICAgICAgICAgIGMgPSBmb3JtYXRbbm4rK107CiAgICAgICAgIH0KIApAQCAtMzQwLDEwICszNDUsMTAgQEAKICAgICAgICAgfSBlbHNlIGlmIChjID09ICdjJykgewogICAgICAgICAgICAgLyogY2hhcmFjdGVyICovCiAgICAgICAgICAgICAvKiBOT1RFOiBjaGFyIGlzIHByb21vdGVkIHRvIGludCB3aGVuIHBhc3NlZCB0aHJvdWdoIHRoZSBzdGFjayAqLwotICAgICAgICAgICAgYnVmZmVyWzBdID0gKGNoYXIpIHZhX2FyZyhhcmdzLCBpbnQpOworICAgICAgICAgICAgYnVmZmVyWzBdID0gc3RhdGljX2Nhc3Q8Y2hhcj4odmFfYXJnKGFyZ3MsIGludCkpOwogICAgICAgICAgICAgYnVmZmVyWzFdID0gJ1wwJzsKICAgICAgICAgfSBlbHNlIGlmIChjID09ICdwJykgewotICAgICAgICAgICAgdWludDY0X3QgIHZhbHVlID0gKHVpbnRwdHJfdCkgdmFfYXJnKGFyZ3MsIHZvaWQqKTsKKyAgICAgICAgICAgIHVpbnQ2NF90ICB2YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2YV9hcmcoYXJncywgdm9pZCopKTsKICAgICAgICAgICAgIGJ1ZmZlclswXSA9ICcwJzsKICAgICAgICAgICAgIGJ1ZmZlclsxXSA9ICd4JzsKICAgICAgICAgICAgIGZvcm1hdF9pbnRlZ2VyKGJ1ZmZlciArIDIsIHNpemVvZihidWZmZXIpIC0gMiwgdmFsdWUsICd4Jyk7CkBAIC0zNTYsOCArMzYxLDggQEAKICAgICAgICAgICAgICAqICAgICAgIHRocm91Z2ggdGhlIHN0YWNrCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHN3aXRjaCAoYnl0ZWxlbikgewotICAgICAgICAgICAgY2FzZSAxOiB2YWx1ZSA9ICh1aW50OF90KSAgdmFfYXJnKGFyZ3MsIGludCk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyOiB2YWx1ZSA9ICh1aW50MTZfdCkgdmFfYXJnKGFyZ3MsIGludCk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOiB2YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhX2FyZyhhcmdzLCBpbnQpKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6IHZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHZhX2FyZyhhcmdzLCBpbnQpKTsgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIDQ6IHZhbHVlID0gdmFfYXJnKGFyZ3MsIHVpbnQzMl90KTsgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIDg6IHZhbHVlID0gdmFfYXJnKGFyZ3MsIHVpbnQ2NF90KTsgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm47ICAvKiBzaG91bGQgbm90IGhhcHBlbiAqLwpAQCAtMzY2LDcgKzM3MSw3IEBACiAgICAgICAgICAgICAvKiBzaWduIGV4dGVuc2lvbiwgaWYgbmVlZGVkICovCiAgICAgICAgICAgICBpZiAoaXNfc2lnbmVkKSB7CiAgICAgICAgICAgICAgICAgaW50IHNoaWZ0ID0gNjQgLSA4KmJ5dGVsZW47Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSAodWludDY0X3QpKCgoaW50NjRfdCkodmFsdWUgPDwgc2hpZnQpKSA+PiBzaGlmdCk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oKHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlIDw8IHNoaWZ0KSkgPj4gc2hpZnQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKiBmb3JtYXQgdGhlIG51bWJlciBwcm9wZXJseSBpbnRvIG91ciBidWZmZXIgKi8KQEAgLTQ0MCw3ICs0NDUsNzggQEAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lmZGVmIFRBUkdFVF9VU0VTX0xPR0QKK3N0YXRpYyBpbnQgX19saWJjX29wZW5fbG9nX3NvY2tldCgpCit7CisgIC8vIFRvRG86IElkZWFsbHkgd2Ugd2FudCB0aGlzIHRvIGZhaWwgaWYgdGhlIGdpZCBvZiB0aGUgY3VycmVudAorICAvLyBwcm9jZXNzIGlzIEFJRF9MT0dELCBidXQgd2lsbCBoYXZlIHRvIHdhaXQgdW50aWwgd2UgaGF2ZQorICAvLyByZWdpc3RlcmVkIHRoaXMgaW4gcHJpdmF0ZS9hbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnLmguIFdlIGhhdmUKKyAgLy8gZm91bmQgdGhhdCBhbGwgbG9nZCBjcmFzaGVzIHRodXMgZmFyIGhhdmUgaGFkIG5vIHByb2JsZW0gc3R1ZmZpbmcKKyAgLy8gdGhlIFVOSVggZG9tYWluIHNvY2tldCBhbmQgbW92aW5nIG9uIHNvIG5vdCBjcml0aWNhbCAqdG9kYXkqLgorCisgIGludCBsb2dfZmQgPSBURU1QX0ZBSUxVUkVfUkVUUlkoc29ja2V0KFBGX1VOSVgsIFNPQ0tfREdSQU0gfCBTT0NLX0NMT0VYRUMsIDApKTsKKyAgaWYgKGxvZ19mZCA8IDApIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZiAoZmNudGwobG9nX2ZkLCBGX1NFVEZMLCBPX05PTkJMT0NLKSA9PSAtMSkgeworICAgIGNsb3NlKGxvZ19mZCk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgdW5pb24geworICAgIHN0cnVjdCBzb2NrYWRkciAgICBhZGRyOworICAgIHN0cnVjdCBzb2NrYWRkcl91biBhZGRyVW47CisgIH0gdTsKKyAgbWVtc2V0KCZ1LCAwLCBzaXplb2YodSkpOworICB1LmFkZHJVbi5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKyAgc3RybGNweSh1LmFkZHJVbi5zdW5fcGF0aCwgIi9kZXYvc29ja2V0L2xvZ2R3Iiwgc2l6ZW9mKHUuYWRkclVuLnN1bl9wYXRoKSk7CisKKyAgaWYgKFRFTVBfRkFJTFVSRV9SRVRSWShjb25uZWN0KGxvZ19mZCwgJnUuYWRkciwgc2l6ZW9mKHUuYWRkclVuKSkpICE9IDApIHsKKyAgICBjbG9zZShsb2dfZmQpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHJldHVybiBsb2dfZmQ7Cit9CisKK3N0cnVjdCBsb2dfdGltZSB7IC8vIFdpcmUgZm9ybWF0CisgIHVpbnQzMl90IHR2X3NlYzsKKyAgdWludDMyX3QgdHZfbnNlYzsKK307CisjZW5kaWYKKwogc3RhdGljIGludCBfX2xpYmNfd3JpdGVfbG9nKGludCBwcmlvcml0eSwgY29uc3QgY2hhciogdGFnLCBjb25zdCBjaGFyKiBtc2cpIHsKKyNpZmRlZiBUQVJHRVRfVVNFU19MT0dECisgIGludCBtYWluX2xvZ19mZCA9IF9fbGliY19vcGVuX2xvZ19zb2NrZXQoKTsKKworICBpZiAobWFpbl9sb2dfZmQgPT0gLTEpIHsKKyAgICAvLyBUcnkgc3RkZXJyIGluc3RlYWQuCisgICAgcmV0dXJuIF9fbGliY193cml0ZV9zdGRlcnIodGFnLCBtc2cpOworICB9CisKKyAgaW92ZWMgdmVjWzZdOworICBjaGFyIGxvZ19pZCA9IChwcmlvcml0eSA9PSBBTkRST0lEX0xPR19GQVRBTCkgPyBMT0dfSURfQ1JBU0ggOiBMT0dfSURfTUFJTjsKKyAgdmVjWzBdLmlvdl9iYXNlID0gJmxvZ19pZDsKKyAgdmVjWzBdLmlvdl9sZW4gPSBzaXplb2YobG9nX2lkKTsKKyAgdWludDE2X3QgdGlkID0gZ2V0dGlkKCk7CisgIHZlY1sxXS5pb3ZfYmFzZSA9ICZ0aWQ7CisgIHZlY1sxXS5pb3ZfbGVuID0gc2l6ZW9mKHRpZCk7CisgIHRpbWVzcGVjIHRzOworICBjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHMpOworICBsb2dfdGltZSByZWFsdGltZV90czsKKyAgcmVhbHRpbWVfdHMudHZfc2VjID0gdHMudHZfc2VjOworICByZWFsdGltZV90cy50dl9uc2VjID0gdHMudHZfbnNlYzsKKyAgdmVjWzJdLmlvdl9iYXNlID0gJnJlYWx0aW1lX3RzOworICB2ZWNbMl0uaW92X2xlbiA9IHNpemVvZihyZWFsdGltZV90cyk7CisKKyAgdmVjWzNdLmlvdl9iYXNlID0gJnByaW9yaXR5OworICB2ZWNbM10uaW92X2xlbiA9IDE7CisgIHZlY1s0XS5pb3ZfYmFzZSA9IGNvbnN0X2Nhc3Q8Y2hhcio+KHRhZyk7CisgIHZlY1s0XS5pb3ZfbGVuID0gc3RybGVuKHRhZykgKyAxOworICB2ZWNbNV0uaW92X2Jhc2UgPSBjb25zdF9jYXN0PGNoYXIqPihtc2cpOworICB2ZWNbNV0uaW92X2xlbiA9IHN0cmxlbihtc2cpICsgMTsKKyNlbHNlCiAgIGludCBtYWluX2xvZ19mZCA9IFRFTVBfRkFJTFVSRV9SRVRSWShvcGVuKCIvZGV2L2xvZy9tYWluIiwgT19DTE9FWEVDIHwgT19XUk9OTFkpKTsKICAgaWYgKG1haW5fbG9nX2ZkID09IC0xKSB7CiAgICAgaWYgKGVycm5vID09IEVOT1RESVIpIHsKQEAgLTQ1Nyw4ICs1MzMsOSBAQAogICB2ZWNbMV0uaW92X2xlbiA9IHN0cmxlbih0YWcpICsgMTsKICAgdmVjWzJdLmlvdl9iYXNlID0gY29uc3RfY2FzdDxjaGFyKj4obXNnKTsKICAgdmVjWzJdLmlvdl9sZW4gPSBzdHJsZW4obXNnKSArIDE7CisjZW5kaWYKIAotICBpbnQgcmVzdWx0ID0gVEVNUF9GQUlMVVJFX1JFVFJZKHdyaXRldihtYWluX2xvZ19mZCwgdmVjLCAzKSk7CisgIGludCByZXN1bHQgPSBURU1QX0ZBSUxVUkVfUkVUUlkod3JpdGV2KG1haW5fbG9nX2ZkLCB2ZWMsIHNpemVvZih2ZWMpIC8gc2l6ZW9mKHZlY1swXSkpKTsKICAgY2xvc2UobWFpbl9sb2dfZmQpOwogICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDc5LDYgKzU1NiwzMSBAQAogfQogCiBzdGF0aWMgaW50IF9fbGliY19hbmRyb2lkX2xvZ19ldmVudChpbnQzMl90IHRhZywgY2hhciB0eXBlLCBjb25zdCB2b2lkKiBwYXlsb2FkLCBzaXplX3QgbGVuKSB7CisjaWZkZWYgVEFSR0VUX1VTRVNfTE9HRAorICBpb3ZlYyB2ZWNbNl07CisgIGNoYXIgbG9nX2lkID0gTE9HX0lEX0VWRU5UUzsKKyAgdmVjWzBdLmlvdl9iYXNlID0gJmxvZ19pZDsKKyAgdmVjWzBdLmlvdl9sZW4gPSBzaXplb2YobG9nX2lkKTsKKyAgdWludDE2X3QgdGlkID0gZ2V0dGlkKCk7CisgIHZlY1sxXS5pb3ZfYmFzZSA9ICZ0aWQ7CisgIHZlY1sxXS5pb3ZfbGVuID0gc2l6ZW9mKHRpZCk7CisgIHRpbWVzcGVjIHRzOworICBjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHMpOworICBsb2dfdGltZSByZWFsdGltZV90czsKKyAgcmVhbHRpbWVfdHMudHZfc2VjID0gdHMudHZfc2VjOworICByZWFsdGltZV90cy50dl9uc2VjID0gdHMudHZfbnNlYzsKKyAgdmVjWzJdLmlvdl9iYXNlID0gJnJlYWx0aW1lX3RzOworICB2ZWNbMl0uaW92X2xlbiA9IHNpemVvZihyZWFsdGltZV90cyk7CisKKyAgdmVjWzNdLmlvdl9iYXNlID0gJnRhZzsKKyAgdmVjWzNdLmlvdl9sZW4gPSBzaXplb2YodGFnKTsKKyAgdmVjWzRdLmlvdl9iYXNlID0gJnR5cGU7CisgIHZlY1s0XS5pb3ZfbGVuID0gc2l6ZW9mKHR5cGUpOworICB2ZWNbNV0uaW92X2Jhc2UgPSBjb25zdF9jYXN0PHZvaWQqPihwYXlsb2FkKTsKKyAgdmVjWzVdLmlvdl9sZW4gPSBsZW47CisKKyAgaW50IGV2ZW50X2xvZ19mZCA9IF9fbGliY19vcGVuX2xvZ19zb2NrZXQoKTsKKyNlbHNlCiAgIGlvdmVjIHZlY1szXTsKICAgdmVjWzBdLmlvdl9iYXNlID0gJnRhZzsKICAgdmVjWzBdLmlvdl9sZW4gPSBzaXplb2YodGFnKTsKQEAgLTQ4OCwxMCArNTkwLDEyIEBACiAgIHZlY1syXS5pb3ZfbGVuID0gbGVuOwogCiAgIGludCBldmVudF9sb2dfZmQgPSBURU1QX0ZBSUxVUkVfUkVUUlkob3BlbigiL2Rldi9sb2cvZXZlbnRzIiwgT19DTE9FWEVDIHwgT19XUk9OTFkpKTsKKyNlbmRpZgorCiAgIGlmIChldmVudF9sb2dfZmQgPT0gLTEpIHsKICAgICByZXR1cm4gLTE7CiAgIH0KLSAgaW50IHJlc3VsdCA9IFRFTVBfRkFJTFVSRV9SRVRSWSh3cml0ZXYoZXZlbnRfbG9nX2ZkLCB2ZWMsIDMpKTsKKyAgaW50IHJlc3VsdCA9IFRFTVBfRkFJTFVSRV9SRVRSWSh3cml0ZXYoZXZlbnRfbG9nX2ZkLCB2ZWMsIHNpemVvZih2ZWMpIC8gc2l6ZW9mKHZlY1swXSkpKTsKICAgY2xvc2UoZXZlbnRfbG9nX2ZkKTsKICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTUxNiwxMiArNjIwLDE3IEBACiAgIEJ1ZmZlck91dHB1dFN0cmVhbSBvcyhtc2csIHNpemVvZihtc2cpKTsKICAgb3V0X3Zmb3JtYXQob3MsIGZvcm1hdCwgYXJncyk7CiAKLSAgLy8gVE9ETzogbG9nIHRvIHN0ZGVyciBmb3IgdGhlIGJlbmVmaXQgb2YgImFkYiBzaGVsbCIgdXNlcnMuCisgIC8vIGxvZyB0byBzdGRlcnIgZm9yIHRoZSBiZW5lZml0IG9mICJhZGIgc2hlbGwiIHVzZXJzLgorICBzdHJ1Y3QgaW92ZWMgaW92WzJdID0geworICAgIHttc2csIHN0cmxlbihtc2cpfSwKKyAgICB7Y29uc3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJcbiIpKSwgMX0sCisgIH07CisgIHdyaXRldigyLCBpb3YsIDIpOwogCiAgIC8vIExvZyB0byB0aGUgbG9nIGZvciB0aGUgYmVuZWZpdCBvZiByZWd1bGFyIGFwcCBkZXZlbG9wZXJzICh3aG9zZSBzdGRvdXQgYW5kIHN0ZGVyciBhcmUgY2xvc2VkKS4KICAgX19saWJjX3dyaXRlX2xvZyhBTkRST0lEX0xPR19GQVRBTCwgImxpYmMiLCBtc2cpOwogCi0gIF9fbGliY19zZXRfYWJvcnRfbWVzc2FnZShtc2cpOworICBhbmRyb2lkX3NldF9hYm9ydF9tZXNzYWdlKG1zZyk7CiB9CiAKIHZvaWQgX19saWJjX2ZhdGFsX25vX2Fib3J0KGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSB7CkBAIC01MzksMjEgKzY0OCwzMyBAQAogICBhYm9ydCgpOwogfQogCi12b2lkIF9fbGliY19zZXRfYWJvcnRfbWVzc2FnZShjb25zdCBjaGFyKiBtc2cpIHsKK3ZvaWQgYW5kcm9pZF9zZXRfYWJvcnRfbWVzc2FnZShjb25zdCBjaGFyKiBtc2cpIHsKKyAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ19hYm9ydF9tc2dfbG9jayk7CisKKyAgaWYgKF9fYWJvcnRfbWVzc2FnZV9wdHIgPT0gTlVMTCkgeworICAgIC8vIFdlIG11c3QgaGF2ZSBjcmFzaGVkIF92ZXJ5XyBlYXJseS4KKyAgICByZXR1cm47CisgIH0KKworICBpZiAoKl9fYWJvcnRfbWVzc2FnZV9wdHIgIT0gTlVMTCkgeworICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBhYm9ydCBtZXNzYWdlLgorICAgIC8vIEFzc3VtZSB0aGF0IHRoZSBmaXJzdCBjcmFzaCBpcyB0aGUgb25lIG1vc3Qgd29ydGggcmVwb3J0aW5nLgorICAgIHJldHVybjsKKyAgfQorCiAgIHNpemVfdCBzaXplID0gc2l6ZW9mKGFib3J0X21zZ190KSArIHN0cmxlbihtc2cpICsgMTsKICAgdm9pZCogbWFwID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfQU5PTiB8IE1BUF9QUklWQVRFLCAtMSwgMCk7CiAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgewogICAgIHJldHVybjsKICAgfQogCi0gIGlmIChfX2Fib3J0X21lc3NhZ2VfcHRyICE9IE5VTEwpIHsKLSAgICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnQWJvcnRNc2dMb2NrKTsKLSAgICBpZiAoKl9fYWJvcnRfbWVzc2FnZV9wdHIgIT0gTlVMTCkgewotICAgICAgbXVubWFwKCpfX2Fib3J0X21lc3NhZ2VfcHRyLCAoKl9fYWJvcnRfbWVzc2FnZV9wdHIpLT5zaXplKTsKLSAgICB9Ci0gICAgYWJvcnRfbXNnX3QqIG5ld19hYm9ydF9tZXNzYWdlID0gcmVpbnRlcnByZXRfY2FzdDxhYm9ydF9tc2dfdCo+KG1hcCk7Ci0gICAgbmV3X2Fib3J0X21lc3NhZ2UtPnNpemUgPSBzaXplOwotICAgIHN0cmNweShuZXdfYWJvcnRfbWVzc2FnZS0+bXNnLCBtc2cpOwotICAgICpfX2Fib3J0X21lc3NhZ2VfcHRyID0gbmV3X2Fib3J0X21lc3NhZ2U7CisgIC8vIFRPRE86IGlmIHdlIHN0aWNrIHRvIHRoZSBjdXJyZW50ICJvbmUtc2hvdCIgc2NoZW1lLCB3ZSBjYW4gcmVtb3ZlIHRoaXMgY29kZSBhbmQKKyAgLy8gc3RvcCBzdG9yaW5nIHRoZSBzaXplLgorICBpZiAoKl9fYWJvcnRfbWVzc2FnZV9wdHIgIT0gTlVMTCkgeworICAgIG11bm1hcCgqX19hYm9ydF9tZXNzYWdlX3B0ciwgKCpfX2Fib3J0X21lc3NhZ2VfcHRyKS0+c2l6ZSk7CiAgIH0KKyAgYWJvcnRfbXNnX3QqIG5ld19hYm9ydF9tZXNzYWdlID0gcmVpbnRlcnByZXRfY2FzdDxhYm9ydF9tc2dfdCo+KG1hcCk7CisgIG5ld19hYm9ydF9tZXNzYWdlLT5zaXplID0gc2l6ZTsKKyAgc3RyY3B5KG5ld19hYm9ydF9tZXNzYWdlLT5tc2csIG1zZyk7CisgICpfX2Fib3J0X21lc3NhZ2VfcHRyID0gbmV3X2Fib3J0X21lc3NhZ2U7CiB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9saWJnZW4uY3BwIGIvbGliYy9iaW9uaWMvbGliZ2VuLmNwcAppbmRleCBkOGRmNDk0Li5iOThmNTA0IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9saWJnZW4uY3BwCisrKyBiL2xpYmMvYmlvbmljL2xpYmdlbi5jcHAKQEAgLTM2LDIyICszNiw3IEBACiAKICNpbmNsdWRlICJwcml2YXRlL1RocmVhZExvY2FsQnVmZmVyLmgiCiAKLUdMT0JBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVIoYmFzZW5hbWUpOwotR0xPQkFMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUihkaXJuYW1lKTsKLQotY2hhciogYmFzZW5hbWUoY29uc3QgY2hhciogcGF0aCkgewotICBMT0NBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVIoY2hhciosIGJhc2VuYW1lLCBNQVhQQVRITEVOKTsKLSAgaW50IHJjID0gYmFzZW5hbWVfcihwYXRoLCBiYXNlbmFtZV90bHNfYnVmZmVyLCBiYXNlbmFtZV90bHNfYnVmZmVyX3NpemUpOwotICByZXR1cm4gKHJjIDwgMCkgPyBOVUxMIDogYmFzZW5hbWVfdGxzX2J1ZmZlcjsKLX0KLQotY2hhciogZGlybmFtZShjb25zdCBjaGFyKiBwYXRoKSB7Ci0gIExPQ0FMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUihjaGFyKiwgZGlybmFtZSwgTUFYUEFUSExFTik7Ci0gIGludCByYyA9IGRpcm5hbWVfcihwYXRoLCBkaXJuYW1lX3Rsc19idWZmZXIsIGRpcm5hbWVfdGxzX2J1ZmZlcl9zaXplKTsKLSAgcmV0dXJuIChyYyA8IDApID8gTlVMTCA6IGRpcm5hbWVfdGxzX2J1ZmZlcjsKLX0KLQotaW50IGJhc2VuYW1lX3IoY29uc3QgY2hhciogcGF0aCwgY2hhciogYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpIHsKK19fTElCQzY0X0hJRERFTl9fIGludCBiYXNlbmFtZV9yKGNvbnN0IGNoYXIqIHBhdGgsIGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplKSB7CiAgIGNvbnN0IGNoYXIqIHN0YXJ0cCA9IE5VTEw7CiAgIGNvbnN0IGNoYXIqIGVuZHAgPSBOVUxMOwogICBpbnQgbGVuOwpAQCAtMTAzLDcgKzg4LDcgQEAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW50IGRpcm5hbWVfcihjb25zdCBjaGFyKiBwYXRoLCBjaGFyKiBidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSkgeworX19MSUJDNjRfSElEREVOX18gaW50IGRpcm5hbWVfcihjb25zdCBjaGFyKiBwYXRoLCBjaGFyKiBidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSkgewogICBjb25zdCBjaGFyKiBlbmRwID0gTlVMTDsKICAgaW50IGxlbjsKICAgaW50IHJlc3VsdDsKQEAgLTE2MSwzICsxNDYsMTggQEAKICAgfQogICByZXR1cm4gcmVzdWx0OwogfQorCitHTE9CQUxfSU5JVF9USFJFQURfTE9DQUxfQlVGRkVSKGJhc2VuYW1lKTsKK0dMT0JBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVIoZGlybmFtZSk7CisKK2NoYXIqIGJhc2VuYW1lKGNvbnN0IGNoYXIqIHBhdGgpIHsKKyAgTE9DQUxfSU5JVF9USFJFQURfTE9DQUxfQlVGRkVSKGNoYXIqLCBiYXNlbmFtZSwgTUFYUEFUSExFTik7CisgIGludCByYyA9IGJhc2VuYW1lX3IocGF0aCwgYmFzZW5hbWVfdGxzX2J1ZmZlciwgYmFzZW5hbWVfdGxzX2J1ZmZlcl9zaXplKTsKKyAgcmV0dXJuIChyYyA8IDApID8gTlVMTCA6IGJhc2VuYW1lX3Rsc19idWZmZXI7Cit9CisKK2NoYXIqIGRpcm5hbWUoY29uc3QgY2hhciogcGF0aCkgeworICBMT0NBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVIoY2hhciosIGRpcm5hbWUsIE1BWFBBVEhMRU4pOworICBpbnQgcmMgPSBkaXJuYW1lX3IocGF0aCwgZGlybmFtZV90bHNfYnVmZmVyLCBkaXJuYW1lX3Rsc19idWZmZXJfc2l6ZSk7CisgIHJldHVybiAocmMgPCAwKSA/IE5VTEwgOiBkaXJuYW1lX3Rsc19idWZmZXI7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9sb2NhbGUuY3BwIGIvbGliYy9iaW9uaWMvbG9jYWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGI0OWNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbG9jYWxlLmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfbWFjcm9zLmgiCisKKy8vIFdlIGN1cnJlbnRseSBzdXBwb3J0IGEgc2luZ2xlIGxvY2FsZSwgdGhlICJDIiBsb2NhbGUgKGFsc28ga25vd24gYXMgIlBPU0lYIikuCisKK3N0YXRpYyBib29sIF9fYmlvbmljX2N1cnJlbnRfbG9jYWxlX2lzX3V0ZjggPSB0cnVlOworCitzdHJ1Y3QgX19sb2NhbGVfdCB7CisgIHNpemVfdCBtYl9jdXJfbWF4OworCisgIF9fbG9jYWxlX3Qoc2l6ZV90IG1iX2N1cl9tYXgpIDogbWJfY3VyX21heChtYl9jdXJfbWF4KSB7CisgIH0KKworICBfX2xvY2FsZV90KGNvbnN0IF9fbG9jYWxlX3QqIG90aGVyKSB7CisgICAgaWYgKG90aGVyID09IExDX0dMT0JBTF9MT0NBTEUpIHsKKyAgICAgIG1iX2N1cl9tYXggPSBfX2Jpb25pY19jdXJyZW50X2xvY2FsZV9pc191dGY4ID8gNCA6IDE7CisgICAgfSBlbHNlIHsKKyAgICAgIG1iX2N1cl9tYXggPSBvdGhlci0+bWJfY3VyX21heDsKKyAgICB9CisgIH0KKworICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oX19sb2NhbGVfdCk7Cit9OworCitzdGF0aWMgcHRocmVhZF9vbmNlX3QgZ19sb2NhbGVfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOworc3RhdGljIGxjb252IGdfbG9jYWxlOworCisvLyBXZSBkb24ndCB1c2UgcHRocmVhZF9vbmNlIGZvciB0aGlzIHNvIHRoYXQgd2Uga25vdyB3aGVuIHRoZSByZXNvdXJjZSAoYSBUTFMgc2xvdCkgd2lsbCBiZSB0YWtlbi4KK3N0YXRpYyBwdGhyZWFkX2tleV90IGdfdXNlbG9jYWxlX2tleTsKK19fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgc3RhdGljIHZvaWQgX19iaW9uaWNfdGxzX3VzZWxvY2FsZV9rZXlfaW5pdCgpIHsKKyAgcHRocmVhZF9rZXlfY3JlYXRlKCZnX3VzZWxvY2FsZV9rZXksIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBfX2xvY2FsZV9pbml0KCkgeworICBnX2xvY2FsZS5kZWNpbWFsX3BvaW50ID0gY29uc3RfY2FzdDxjaGFyKj4oIi4iKTsKKworICBjaGFyKiBub3RfYXZhaWxhYmxlID0gY29uc3RfY2FzdDxjaGFyKj4oIiIpOworICBnX2xvY2FsZS50aG91c2FuZHNfc2VwID0gbm90X2F2YWlsYWJsZTsKKyAgZ19sb2NhbGUuZ3JvdXBpbmcgPSBub3RfYXZhaWxhYmxlOworICBnX2xvY2FsZS5pbnRfY3Vycl9zeW1ib2wgPSBub3RfYXZhaWxhYmxlOworICBnX2xvY2FsZS5jdXJyZW5jeV9zeW1ib2wgPSBub3RfYXZhaWxhYmxlOworICBnX2xvY2FsZS5tb25fZGVjaW1hbF9wb2ludCA9IG5vdF9hdmFpbGFibGU7CisgIGdfbG9jYWxlLm1vbl90aG91c2FuZHNfc2VwID0gbm90X2F2YWlsYWJsZTsKKyAgZ19sb2NhbGUubW9uX2dyb3VwaW5nID0gbm90X2F2YWlsYWJsZTsKKyAgZ19sb2NhbGUucG9zaXRpdmVfc2lnbiA9IG5vdF9hdmFpbGFibGU7CisgIGdfbG9jYWxlLm5lZ2F0aXZlX3NpZ24gPSBub3RfYXZhaWxhYmxlOworCisgIGdfbG9jYWxlLmludF9mcmFjX2RpZ2l0cyA9IENIQVJfTUFYOworICBnX2xvY2FsZS5mcmFjX2RpZ2l0cyA9IENIQVJfTUFYOworICBnX2xvY2FsZS5wX2NzX3ByZWNlZGVzID0gQ0hBUl9NQVg7CisgIGdfbG9jYWxlLnBfc2VwX2J5X3NwYWNlID0gQ0hBUl9NQVg7CisgIGdfbG9jYWxlLm5fY3NfcHJlY2VkZXMgPSBDSEFSX01BWDsKKyAgZ19sb2NhbGUubl9zZXBfYnlfc3BhY2UgPSBDSEFSX01BWDsKKyAgZ19sb2NhbGUucF9zaWduX3Bvc24gPSBDSEFSX01BWDsKKyAgZ19sb2NhbGUubl9zaWduX3Bvc24gPSBDSEFSX01BWDsKKyAgZ19sb2NhbGUuaW50X3BfY3NfcHJlY2VkZXMgPSBDSEFSX01BWDsKKyAgZ19sb2NhbGUuaW50X3Bfc2VwX2J5X3NwYWNlID0gQ0hBUl9NQVg7CisgIGdfbG9jYWxlLmludF9uX2NzX3ByZWNlZGVzID0gQ0hBUl9NQVg7CisgIGdfbG9jYWxlLmludF9uX3NlcF9ieV9zcGFjZSA9IENIQVJfTUFYOworICBnX2xvY2FsZS5pbnRfcF9zaWduX3Bvc24gPSBDSEFSX01BWDsKKyAgZ19sb2NhbGUuaW50X25fc2lnbl9wb3NuID0gQ0hBUl9NQVg7Cit9CisKK3NpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4KCkgeworICBsb2NhbGVfdCBsID0gcmVpbnRlcnByZXRfY2FzdDxsb2NhbGVfdD4ocHRocmVhZF9nZXRzcGVjaWZpYyhnX3VzZWxvY2FsZV9rZXkpKTsKKyAgaWYgKGwgPT0gbnVsbHB0ciB8fCBsID09IExDX0dMT0JBTF9MT0NBTEUpIHsKKyAgICByZXR1cm4gX19iaW9uaWNfY3VycmVudF9sb2NhbGVfaXNfdXRmOCA/IDQgOiAxOworICB9IGVsc2UgeworICAgIHJldHVybiBsLT5tYl9jdXJfbWF4OworICB9Cit9CisKK3N0YXRpYyBib29sIF9faXNfc3VwcG9ydGVkX2xvY2FsZShjb25zdCBjaGFyKiBsb2NhbGUpIHsKKyAgcmV0dXJuIChzdHJjbXAobG9jYWxlLCAiIikgPT0gMCB8fAorICAgICAgICAgIHN0cmNtcChsb2NhbGUsICJDIikgPT0gMCB8fAorICAgICAgICAgIHN0cmNtcChsb2NhbGUsICJDLlVURi04IikgPT0gMCB8fAorICAgICAgICAgIHN0cmNtcChsb2NhbGUsICJlbl9VUy5VVEYtOCIpID09IDAgfHwKKyAgICAgICAgICBzdHJjbXAobG9jYWxlLCAiUE9TSVgiKSA9PSAwKTsKK30KKworbGNvbnYqIGxvY2FsZWNvbnYoKSB7CisgIHB0aHJlYWRfb25jZSgmZ19sb2NhbGVfb25jZSwgX19sb2NhbGVfaW5pdCk7CisgIHJldHVybiAmZ19sb2NhbGU7Cit9CisKK2xvY2FsZV90IGR1cGxvY2FsZShsb2NhbGVfdCBsKSB7CisgIHJldHVybiBuZXcgX19sb2NhbGVfdChsKTsKK30KKwordm9pZCBmcmVlbG9jYWxlKGxvY2FsZV90IGwpIHsKKyAgZGVsZXRlIGw7Cit9CisKK2xvY2FsZV90IG5ld2xvY2FsZShpbnQgY2F0ZWdvcnlfbWFzaywgY29uc3QgY2hhciogbG9jYWxlX25hbWUsIGxvY2FsZV90IC8qYmFzZSovKSB7CisgIC8vIElzICdjYXRlZ29yeV9tYXNrJyB2YWxpZD8KKyAgaWYgKChjYXRlZ29yeV9tYXNrICYgfkxDX0FMTF9NQVNLKSAhPSAwKSB7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBpZiAoIV9faXNfc3VwcG9ydGVkX2xvY2FsZShsb2NhbGVfbmFtZSkpIHsKKyAgICBlcnJubyA9IEVOT0VOVDsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIHJldHVybiBuZXcgX19sb2NhbGVfdChzdHJzdHIobG9jYWxlX25hbWUsICJVVEYtOCIpICE9IE5VTEwgPyA0IDogMSk7Cit9CisKK2NoYXIqIHNldGxvY2FsZShpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIqIGxvY2FsZV9uYW1lKSB7CisgIC8vIElzICdjYXRlZ29yeScgdmFsaWQ/CisgIGlmIChjYXRlZ29yeSA8IExDX0NUWVBFIHx8IGNhdGVnb3J5ID4gTENfSURFTlRJRklDQVRJT04pIHsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIC8vIENhbGxlciB3YW50cyB0byBzZXQgdGhlIGxvY2FsZSByYXRoZXIgdGhhbiBqdXN0IHF1ZXJ5PworICBpZiAobG9jYWxlX25hbWUgIT0gTlVMTCkgeworICAgIGlmICghX19pc19zdXBwb3J0ZWRfbG9jYWxlKGxvY2FsZV9uYW1lKSkgeworICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIGxvY2FsZS4KKyAgICAgIGVycm5vID0gRU5PRU5UOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIF9fYmlvbmljX2N1cnJlbnRfbG9jYWxlX2lzX3V0ZjggPSAoc3Ryc3RyKGxvY2FsZV9uYW1lLCAiVVRGLTgiKSAhPSBOVUxMKTsKKyAgfQorCisgIHJldHVybiBjb25zdF9jYXN0PGNoYXIqPihfX2Jpb25pY19jdXJyZW50X2xvY2FsZV9pc191dGY4ID8gIkMuVVRGLTgiIDogIkMiKTsKK30KKworbG9jYWxlX3QgdXNlbG9jYWxlKGxvY2FsZV90IG5ld19sb2NhbGUpIHsKKyAgbG9jYWxlX3Qgb2xkX2xvY2FsZSA9IHN0YXRpY19jYXN0PGxvY2FsZV90PihwdGhyZWFkX2dldHNwZWNpZmljKGdfdXNlbG9jYWxlX2tleSkpOworCisgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgdG8gdXNlbG9jYWxlKDMpIG9uIHRoaXMgdGhyZWFkLCB3ZSByZXR1cm4gTENfR0xPQkFMX0xPQ0FMRS4KKyAgaWYgKG9sZF9sb2NhbGUgPT0gTlVMTCkgeworICAgIG9sZF9sb2NhbGUgPSBMQ19HTE9CQUxfTE9DQUxFOworICB9CisKKyAgaWYgKG5ld19sb2NhbGUgIT0gTlVMTCkgeworICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMoZ191c2Vsb2NhbGVfa2V5LCBuZXdfbG9jYWxlKTsKKyAgfQorCisgIHJldHVybiBvbGRfbG9jYWxlOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbHN0YXQuY3BwIGIvbGliYy9iaW9uaWMvbHN0YXQuY3BwCmluZGV4IDMwMGQ3ZmEuLjg0ZDE3ZTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL2xzdGF0LmNwcAorKysgYi9saWJjL2Jpb25pYy9sc3RhdC5jcHAKQEAgLTM0LDMgKzM0LDQgQEAKIGludCBsc3RhdChjb25zdCBjaGFyKiBwYXRoLCBzdHJ1Y3Qgc3RhdCogc2IpIHsKICAgcmV0dXJuIGZzdGF0YXQoQVRfRkRDV0QsIHBhdGgsIHNiLCBBVF9TWU1MSU5LX05PRk9MTE9XKTsKIH0KK19fc3Ryb25nX2FsaWFzKGxzdGF0NjQsIGxzdGF0KTsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19iYWNrdHJhY2UuaCBiL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19iYWNrdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzQ1NDhiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2JhY2t0cmFjZS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNQUxMT0NfREVCVUdfQkFDS1RSQUNFX0gKKyNkZWZpbmUgTUFMTE9DX0RFQlVHX0JBQ0tUUkFDRV9ICisKK2V4dGVybiBib29sIGdfYmFja3RyYWNlX2VuYWJsZWQ7CisKKyNkZWZpbmUgR0VUX0JBQ0tUUkFDRShidCwgZGVwdGgpIFwKKyAgKGdfYmFja3RyYWNlX2VuYWJsZWQgPyBnZXRfYmFja3RyYWNlKGJ0LCBkZXB0aCkgOiAwKQorCisjZW5kaWYgIC8vIE1BTExPQ19ERUJVR19CQUNLVFJBQ0VfSApkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NoZWNrLmNwcCBiL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19jaGVjay5jcHAKaW5kZXggN2RkOGUzYy4uZGVlMDNmYSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NoZWNrLmNwcAorKysgYi9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfY2hlY2suY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVkZSA8c3lzL3N5c3RlbV9wcm9wZXJ0aWVzLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC00NywxNSArNDgsMTMgQEAKIAogI2luY2x1ZGUgImRlYnVnX21hcGluZm8uaCIKICNpbmNsdWRlICJkZWJ1Z19zdGFja3RyYWNlLmgiCi0jaW5jbHVkZSAiZGxtYWxsb2MuaCIKLSNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgorI2luY2x1ZGUgIm1hbGxvY19kZWJ1Z19iYWNrdHJhY2UuaCIKICNpbmNsdWRlICJtYWxsb2NfZGVidWdfY29tbW9uLmgiCisjaW5jbHVkZSAibWFsbG9jX2RlYnVnX2Rpc2FibGUuaCIKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19tYWNyb3MuaCIKKyNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgogI2luY2x1ZGUgInByaXZhdGUvU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmgiCiAKLS8qIGxpYmMuZGVidWcubWFsbG9jLmJhY2tsb2cgKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgZ01hbGxvY0RlYnVnQmFja2xvZzsKLWV4dGVybiBpbnQgZ01hbGxvY0RlYnVnTGV2ZWw7Ci0KICNkZWZpbmUgTUFYX0JBQ0tUUkFDRV9ERVBUSCAxNgogI2RlZmluZSBBTExPQ0FUSU9OX1RBRyAgICAgIDB4MWVlN2QwMGQKICNkZWZpbmUgQkFDS0xPR19UQUcgICAgICAgICAweGJhYmVjYWZlCkBAIC03NCw3ICs3Myw3IEBACiAKIHN0cnVjdCBoZHJfdCB7CiAgICAgdWludDMyX3QgdGFnOwotICAgIHZvaWQqIGJhc2U7ICAvLyBBbHdheXMgcG9pbnRzIHRvIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHVzaW5nIGRsbWFsbG9jLgorICAgIHZvaWQqIGJhc2U7ICAvLyBBbHdheXMgcG9pbnRzIHRvIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHVzaW5nIG1hbGxvYy4KICAgICAgICAgICAgICAgICAgLy8gRm9yIG1lbW9yeSBhbGxvY2F0ZWQgaW4gY2hrX21lbWFsaWduLCB0aGlzIHZhbHVlIHdpbGwKICAgICAgICAgICAgICAgICAgLy8gbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhpcwogICAgICAgICAgICAgICAgICAvLyBzdHJ1Y3R1cmUuCkBAIC0xMDgsOCArMTA3LDEwIEBACiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaGRyX3QqPih1c2VyKSAtIDE7CiB9CiAKLQotc3RhdGljIHVuc2lnbmVkIGdBbGxvY2F0ZWRCbG9ja0NvdW50OworLy8gVE9ETzogaW50cm9kdWNlIGEgc3RydWN0IGZvciB0aGlzIGdsb2JhbCBzdGF0ZS4KKy8vIFRoZXJlIGFyZSBiYXNpY2FsbHkgdHdvIGxpc3RzIGhlcmUsIHRoZSByZWd1bGFyIGxpc3QgYW5kIHRoZSBiYWNrbG9nIGxpc3QuCisvLyBXZSBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgdGhlIGR1cGxpY2F0aW9uLgorc3RhdGljIHVuc2lnbmVkIGdfYWxsb2NhdGVkX2Jsb2NrX2NvdW50Owogc3RhdGljIGhkcl90KiB0YWlsOwogc3RhdGljIGhkcl90KiBoZWFkOwogc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBsb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKQEAgLTExOSw2ICsxMjAsMTcgQEAKIHN0YXRpYyBoZHJfdCogYmFja2xvZ19oZWFkOwogc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBiYWNrbG9nX2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwogCisvLyBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgcHJvcGVydHkgbGliYy5kZWJ1Zy5tYWxsb2MuYmFja2xvZy4KKy8vIEl0IGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGJhY2tsb2cgd2UgdXNlIHRvIGRldGVjdCBtdWx0aXBsZSBmcmVlcy4KK3N0YXRpYyB1bnNpZ25lZCBnX21hbGxvY19kZWJ1Z19iYWNrbG9nID0gMTAwOworCisvLyBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byBmYWxzZSBpZiB0aGUgcHJvcGVydHkgbGliYy5kZWJ1Zy5tYWxsb2Mubm9iYWNrdHJhY2UKKy8vIGlzIHNldCB0byBub24temVyby4KK19fTElCQ19ISURERU5fXyBib29sIGdfYmFja3RyYWNlX2VuYWJsZWQgPSB0cnVlOworCitfX0xJQkNfSElEREVOX18gSGFzaFRhYmxlKiBnX2hhc2hfdGFibGU7CitfX0xJQkNfSElEREVOX18gY29uc3QgTWFsbG9jRGVidWcqIGdfbWFsbG9jX2Rpc3BhdGNoOworCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9mcm9udF9ndWFyZChoZHJfdCogaGRyKSB7CiAgICAgbWVtc2V0KGhkci0+ZnJvbnRfZ3VhcmQsIEZST05UX0dVQVJELCBGUk9OVF9HVUFSRF9MRU4pOwogfQpAQCAtMTg4LDcgKzIwMCw3IEBACiAgICAgaGRyLT5zaXplID0gc2l6ZTsKICAgICBpbml0X2Zyb250X2d1YXJkKGhkcik7CiAgICAgaW5pdF9yZWFyX2d1YXJkKGhkcik7Ci0gICAgKytnQWxsb2NhdGVkQmxvY2tDb3VudDsKKyAgICArK2dfYWxsb2NhdGVkX2Jsb2NrX2NvdW50OwogICAgIGFkZF9sb2NrZWQoaGRyLCAmdGFpbCwgJmhlYWQpOwogfQogCkBAIC0xOTksNyArMjExLDcgQEAKIAogICAgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmxvY2spOwogICAgIGRlbF9sb2NrZWQoaGRyLCAmdGFpbCwgJmhlYWQpOwotICAgIC0tZ0FsbG9jYXRlZEJsb2NrQ291bnQ7CisgICAgLS1nX2FsbG9jYXRlZF9ibG9ja19jb3VudDsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjY2LDcgKzI3OCw3IEBACiAgICAgICAgIHZhbGlkID0gY2hlY2tfZ3VhcmRzKGhkciwgc2FmZSk7CiAgICAgfQogCi0gICAgaWYgKCF2YWxpZCAmJiAqc2FmZSkgeworICAgIGlmICghdmFsaWQgJiYgKnNhZmUgJiYgZ19iYWNrdHJhY2VfZW5hYmxlZCkgewogICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgU0laRSAlZCBBTExPQ0FURUQgSEVSRTpcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyKGhkciksIGhkci0+c2l6ZSk7CiAgICAgICAgIGxvZ19iYWNrdHJhY2UoaGRyLT5idCwgaGRyLT5idF9kZXB0aCk7CkBAIC0zMDYsNyArMzE4LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgZGVsX2xlYWsoaGRyX3QqIGhkciwgaW50KiBzYWZlKSB7CiAgICAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmbG9jayk7Ci0gICAgcmV0dXJuIGRlbF9hbmRfY2hlY2tfbG9ja2VkKGhkciwgJnRhaWwsICZoZWFkLCAmZ0FsbG9jYXRlZEJsb2NrQ291bnQsIHNhZmUpOworICAgIHJldHVybiBkZWxfYW5kX2NoZWNrX2xvY2tlZChoZHIsICZ0YWlsLCAmaGVhZCwgJmdfYWxsb2NhdGVkX2Jsb2NrX2NvdW50LCBzYWZlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGFkZF90b19iYWNrbG9nKGhkcl90KiBoZHIpIHsKQEAgLTMxNiwzNCArMzI4LDQ2IEBACiAgICAgYWRkX2xvY2tlZChoZHIsICZiYWNrbG9nX3RhaWwsICZiYWNrbG9nX2hlYWQpOwogICAgIHBvaXNvbihoZHIpOwogICAgIC8qIElmIHdlJ3ZlIGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGJhY2tsb2csIGNsZWFyIGl0IHVwICovCi0gICAgd2hpbGUgKGJhY2tsb2dfbnVtID4gZ01hbGxvY0RlYnVnQmFja2xvZykgeworICAgIHdoaWxlIChiYWNrbG9nX251bSA+IGdfbWFsbG9jX2RlYnVnX2JhY2tsb2cpIHsKICAgICAgICAgaGRyX3QqIGdvbmUgPSBiYWNrbG9nX3RhaWw7CiAgICAgICAgIGRlbF9mcm9tX2JhY2tsb2dfbG9ja2VkKGdvbmUpOwotICAgICAgICBkbGZyZWUoZ29uZS0+YmFzZSk7CisgICAgICAgIGdfbWFsbG9jX2Rpc3BhdGNoLT5mcmVlKGdvbmUtPmJhc2UpOwogICAgIH0KIH0KIAotZXh0ZXJuICJDIiB2b2lkKiBjaGtfbWFsbG9jKHNpemVfdCBzaXplKSB7CitleHRlcm4gIkMiIHZvaWQqIGNoa19tYWxsb2Moc2l6ZV90IGJ5dGVzKSB7CiAvLyAgbG9nX21lc3NhZ2UoIiVzOiAlc1xuIiwgX19GSUxFX18sIF9fRlVOQ1RJT05fXyk7CisgICAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+bWFsbG9jKGJ5dGVzKTsKKyAgICB9CiAKLSAgICBoZHJfdCogaGRyID0gc3RhdGljX2Nhc3Q8aGRyX3QqPihkbG1hbGxvYyhzaXplb2YoaGRyX3QpICsgc2l6ZSArIHNpemVvZihmdHJfdCkpKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihoZHJfdCkgKyBieXRlcyArIHNpemVvZihmdHJfdCk7CisgICAgaWYgKHNpemUgPCBieXRlcykgeyAvLyBPdmVyZmxvdworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGhkcl90KiBoZHIgPSBzdGF0aWNfY2FzdDxoZHJfdCo+KGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2Moc2l6ZSkpOwogICAgIGlmIChoZHIpIHsKICAgICAgICAgaGRyLT5iYXNlID0gaGRyOwotICAgICAgICBoZHItPmJ0X2RlcHRoID0gZ2V0X2JhY2t0cmFjZShoZHItPmJ0LCBNQVhfQkFDS1RSQUNFX0RFUFRIKTsKLSAgICAgICAgYWRkKGhkciwgc2l6ZSk7CisgICAgICAgIGhkci0+YnRfZGVwdGggPSBHRVRfQkFDS1RSQUNFKGhkci0+YnQsIE1BWF9CQUNLVFJBQ0VfREVQVEgpOworICAgICAgICBhZGQoaGRyLCBieXRlcyk7CiAgICAgICAgIHJldHVybiB1c2VyKGhkcik7CiAgICAgfQogICAgIHJldHVybiBOVUxMOwogfQogCiBleHRlcm4gIkMiIHZvaWQqIGNoa19tZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKKyAgICBpZiAoRGVidWdDYWxsc0Rpc2FibGVkKCkpIHsKKyAgICAgICAgcmV0dXJuIGdfbWFsbG9jX2Rpc3BhdGNoLT5tZW1hbGlnbihhbGlnbm1lbnQsIGJ5dGVzKTsKKyAgICB9CisKICAgICBpZiAoYWxpZ25tZW50IDw9IE1BTExPQ19BTElHTk1FTlQpIHsKICAgICAgICAgcmV0dXJuIGNoa19tYWxsb2MoYnl0ZXMpOwogICAgIH0KIAogICAgIC8vIE1ha2UgdGhlIGFsaWdubWVudCBhIHBvd2VyIG9mIHR3by4KLSAgICBpZiAoYWxpZ25tZW50ICYgKGFsaWdubWVudC0xKSkgewotICAgICAgICBhbGlnbm1lbnQgPSAxTCA8PCAoMzEgLSBfX2J1aWx0aW5fY2x6KGFsaWdubWVudCkpOworICAgIGlmICghcG93ZXJvZjIoYWxpZ25tZW50KSkgeworICAgICAgICBhbGlnbm1lbnQgPSBCSU9OSUNfUk9VTkRfVVBfUE9XRVJfT0ZfMihhbGlnbm1lbnQpOwogICAgIH0KIAogICAgIC8vIGhlcmUsIGFsaWdubWVudCBpcyBhdCBsZWFzdCBNQUxMT0NfQUxJR05NRU5UPDwxIGJ5dGVzCkBAIC0zNTQsNyArMzc4LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdm9pZCogYmFzZSA9IGRsbWFsbG9jKHNpemVvZihoZHJfdCkgKyBzaXplICsgc2l6ZW9mKGZ0cl90KSk7CisgICAgdm9pZCogYmFzZSA9IGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2Moc2l6ZW9mKGhkcl90KSArIHNpemUgKyBzaXplb2YoZnRyX3QpKTsKICAgICBpZiAoYmFzZSAhPSBOVUxMKSB7CiAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGFjdHVhbCBwb2ludGVyIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBpcyBhbGlnbmVkCiAgICAgICAgIC8vIHByb3Blcmx5LgpAQCAtMzY2LDcgKzM5MCw3IEBACiAKICAgICAgICAgaGRyX3QqIGhkciA9IG1ldGEocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyKSk7CiAgICAgICAgIGhkci0+YmFzZSA9IGJhc2U7Ci0gICAgICAgIGhkci0+YnRfZGVwdGggPSBnZXRfYmFja3RyYWNlKGhkci0+YnQsIE1BWF9CQUNLVFJBQ0VfREVQVEgpOworICAgICAgICBoZHItPmJ0X2RlcHRoID0gR0VUX0JBQ0tUUkFDRShoZHItPmJ0LCBNQVhfQkFDS1RSQUNFX0RFUFRIKTsKICAgICAgICAgYWRkKGhkciwgYnl0ZXMpOwogICAgICAgICByZXR1cm4gdXNlcihoZHIpOwogICAgIH0KQEAgLTM3NSw2ICszOTksOSBAQAogCiBleHRlcm4gIkMiIHZvaWQgY2hrX2ZyZWUodm9pZCogcHRyKSB7CiAvLyAgbG9nX21lc3NhZ2UoIiVzOiAlc1xuIiwgX19GSUxFX18sIF9fRlVOQ1RJT05fXyk7CisgICAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShwdHIpOworICAgIH0KIAogICAgIGlmICghcHRyKSAvKiBpZ25vcmUgZnJlZShOVUxMKSAqLwogICAgICAgICByZXR1cm47CkBAIC0zODMsNDAgKzQxMCw0NyBAQAogCiAgICAgaWYgKGRlbChoZHIpIDwgMCkgewogICAgICAgICB1aW50cHRyX3QgYnRbTUFYX0JBQ0tUUkFDRV9ERVBUSF07Ci0gICAgICAgIGludCBkZXB0aCA9IGdldF9iYWNrdHJhY2UoYnQsIE1BWF9CQUNLVFJBQ0VfREVQVEgpOworICAgICAgICBpbnQgZGVwdGggPSBHRVRfQkFDS1RSQUNFKGJ0LCBNQVhfQkFDS1RSQUNFX0RFUFRIKTsKICAgICAgICAgaWYgKGhkci0+dGFnID09IEJBQ0tMT0dfVEFHKSB7CiAgICAgICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgU0laRSAlZCBCWVRFUyBNVUxUSVBMWSBGUkVFRCFcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgaGRyLT5zaXplKTsKLSAgICAgICAgICAgIGxvZ19tZXNzYWdlKCIrKysgQUxMT0NBVElPTiAlcCBTSVpFICVkIEFMTE9DQVRFRCBIRVJFOlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBoZHItPnNpemUpOwotICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShoZHItPmJ0LCBoZHItPmJ0X2RlcHRoKTsKLSAgICAgICAgICAgIC8qIGhkci0+ZnJlZWRfYnRfZGVwdGggc2hvdWxkIGJlIG5vbnplcm8gaGVyZSAqLwotICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIFNJWkUgJWQgRklSU1QgRlJFRUQgSEVSRTpcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgaGRyLT5zaXplKTsKLSAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoaGRyLT5mcmVlZF9idCwgaGRyLT5mcmVlZF9idF9kZXB0aCk7Ci0gICAgICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgU0laRSAlZCBOT1cgQkVJTkcgRlJFRUQgSEVSRTpcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgaGRyLT5zaXplKTsKLSAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoYnQsIGRlcHRoKTsKKyAgICAgICAgICAgIGlmIChnX2JhY2t0cmFjZV9lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIFNJWkUgJWQgQUxMT0NBVEVEIEhFUkU6XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyKGhkciksIGhkci0+c2l6ZSk7CisgICAgICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShoZHItPmJ0LCBoZHItPmJ0X2RlcHRoKTsKKyAgICAgICAgICAgICAgICAvKiBoZHItPmZyZWVkX2J0X2RlcHRoIHNob3VsZCBiZSBub256ZXJvIGhlcmUgKi8KKyAgICAgICAgICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgU0laRSAlZCBGSVJTVCBGUkVFRCBIRVJFOlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBoZHItPnNpemUpOworICAgICAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoaGRyLT5mcmVlZF9idCwgaGRyLT5mcmVlZF9idF9kZXB0aCk7CisgICAgICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIFNJWkUgJWQgTk9XIEJFSU5HIEZSRUVEIEhFUkU6XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyKGhkciksIGhkci0+c2l6ZSk7CisgICAgICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShidCwgZGVwdGgpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIElTIENPUlJVUFRFRCBPUiBOT1QgQUxMT0NBVEVEIFZJQSBUUkFDS0VSIVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpKTsKLSAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoYnQsIGRlcHRoKTsKKyAgICAgICAgICAgIGlmIChnX2JhY2t0cmFjZV9lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShidCwgZGVwdGgpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaGRyLT5mcmVlZF9idF9kZXB0aCA9IGdldF9iYWNrdHJhY2UoaGRyLT5mcmVlZF9idCwgTUFYX0JBQ0tUUkFDRV9ERVBUSCk7CisgICAgICAgIGhkci0+ZnJlZWRfYnRfZGVwdGggPSBHRVRfQkFDS1RSQUNFKGhkci0+ZnJlZWRfYnQsIE1BWF9CQUNLVFJBQ0VfREVQVEgpOwogICAgICAgICBhZGRfdG9fYmFja2xvZyhoZHIpOwogICAgIH0KIH0KIAotZXh0ZXJuICJDIiB2b2lkKiBjaGtfcmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKSB7CitleHRlcm4gIkMiIHZvaWQqIGNoa19yZWFsbG9jKHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKSB7CiAvLyAgbG9nX21lc3NhZ2UoIiVzOiAlc1xuIiwgX19GSUxFX18sIF9fRlVOQ1RJT05fXyk7CisgICAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+cmVhbGxvYyhwdHIsIGJ5dGVzKTsKKyAgICB9CiAKICAgICBpZiAoIXB0cikgewotICAgICAgICByZXR1cm4gY2hrX21hbGxvYyhzaXplKTsKKyAgICAgICAgcmV0dXJuIGNoa19tYWxsb2MoYnl0ZXMpOwogICAgIH0KIAogI2lmZGVmIFJFQUxMT0NfWkVST19CWVRFU19GUkVFCi0gICAgaWYgKCFzaXplKSB7CisgICAgaWYgKCFieXRlcykgewogICAgICAgICBjaGtfZnJlZShwdHIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC00MjYsNzYgKzQ2MCw5NSBAQAogCiAgICAgaWYgKGRlbChoZHIpIDwgMCkgewogICAgICAgICB1aW50cHRyX3QgYnRbTUFYX0JBQ0tUUkFDRV9ERVBUSF07Ci0gICAgICAgIGludCBkZXB0aCA9IGdldF9iYWNrdHJhY2UoYnQsIE1BWF9CQUNLVFJBQ0VfREVQVEgpOworICAgICAgICBpbnQgZGVwdGggPSBHRVRfQkFDS1RSQUNFKGJ0LCBNQVhfQkFDS1RSQUNFX0RFUFRIKTsKICAgICAgICAgaWYgKGhkci0+dGFnID09IEJBQ0tMT0dfVEFHKSB7CiAgICAgICAgICAgICBsb2dfbWVzc2FnZSgiKysrIFJFQUxMT0NBVElPTiAlcCBTSVpFICVkIE9GIEZSRUVEIE1FTU9SWSFcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgc2l6ZSwgaGRyLT5zaXplKTsKLSAgICAgICAgICAgIGxvZ19tZXNzYWdlKCIrKysgQUxMT0NBVElPTiAlcCBTSVpFICVkIEFMTE9DQVRFRCBIRVJFOlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBoZHItPnNpemUpOwotICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShoZHItPmJ0LCBoZHItPmJ0X2RlcHRoKTsKLSAgICAgICAgICAgIC8qIGhkci0+ZnJlZWRfYnRfZGVwdGggc2hvdWxkIGJlIG5vbnplcm8gaGVyZSAqLwotICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIFNJWkUgJWQgRklSU1QgRlJFRUQgSEVSRTpcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgaGRyLT5zaXplKTsKLSAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoaGRyLT5mcmVlZF9idCwgaGRyLT5mcmVlZF9idF9kZXB0aCk7Ci0gICAgICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgU0laRSAlZCBOT1cgQkVJTkcgUkVBTExPQ0FURUQgSEVSRTpcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgaGRyLT5zaXplKTsKLSAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoYnQsIGRlcHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBieXRlcywgaGRyLT5zaXplKTsKKyAgICAgICAgICAgIGlmIChnX2JhY2t0cmFjZV9lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIFNJWkUgJWQgQUxMT0NBVEVEIEhFUkU6XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyKGhkciksIGhkci0+c2l6ZSk7CisgICAgICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShoZHItPmJ0LCBoZHItPmJ0X2RlcHRoKTsKKyAgICAgICAgICAgICAgICAvKiBoZHItPmZyZWVkX2J0X2RlcHRoIHNob3VsZCBiZSBub256ZXJvIGhlcmUgKi8KKyAgICAgICAgICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgU0laRSAlZCBGSVJTVCBGUkVFRCBIRVJFOlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBoZHItPnNpemUpOworICAgICAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoaGRyLT5mcmVlZF9idCwgaGRyLT5mcmVlZF9idF9kZXB0aCk7CisgICAgICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIFNJWkUgJWQgTk9XIEJFSU5HIFJFQUxMT0NBVEVEIEhFUkU6XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyKGhkciksIGhkci0+c2l6ZSk7CisgICAgICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShidCwgZGVwdGgpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgLyogV2UgdGFrZSB0aGUgbWVtb3J5IG91dCBvZiB0aGUgYmFja2xvZyBhbmQgZmFsbCB0aHJvdWdoIHNvIHRoZQorICAgICAgICAgICAgLyogV2UgdGFrZSB0aGUgbWVtb3J5IG91dCBvZiB0aGUgYmFja2xvZyBhbmQgZmFsbCB0aHJvdWdoIHNvIHRoZQogICAgICAgICAgICAgICogcmVhbGxvY2F0aW9uIGJlbG93IHN1Y2NlZWRzLiAgU2luY2Ugd2UgZGlkbid0IHJlYWxseSBmcmVlIGl0LCB3ZQogICAgICAgICAgICAgICogY2FuIGRlZmF1bHQgdG8gdGhpcyBiZWhhdmlvci4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgZGVsX2Zyb21fYmFja2xvZyhoZHIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBSRUFMTE9DQVRJT04gJXAgU0laRSAlZCBJUyBDT1JSVVBURUQgT1IgTk9UIEFMTE9DQVRFRCBWSUEgVFJBQ0tFUiFcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgc2l6ZSk7Ci0gICAgICAgICAgICBsb2dfYmFja3RyYWNlKGJ0LCBkZXB0aCk7CisgICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgYnl0ZXMpOworICAgICAgICAgICAgaWYgKGdfYmFja3RyYWNlX2VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBsb2dfYmFja3RyYWNlKGJ0LCBkZXB0aCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBqdXN0IGdldCBhIHdob2xlIG5ldyBhbGxvY2F0aW9uIGFuZCBsZWFrIHRoZSBvbGQgb25lCi0gICAgICAgICAgICByZXR1cm4gZGxyZWFsbG9jKDAsIHNpemUpOwotICAgICAgICAgICAgLy8gcmV0dXJuIGRscmVhbGxvYyh1c2VyKGhkciksIHNpemUpOyAvLyBhc3N1bWluZyBpdCB3YXMgYWxsb2NhdGVkIGV4dGVybmFsbHkKKyAgICAgICAgICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+cmVhbGxvYygwLCBieXRlcyk7CisgICAgICAgICAgICAvLyByZXR1cm4gcmVhbGxvYyh1c2VyKGhkciksIGJ5dGVzKTsgLy8gYXNzdW1pbmcgaXQgd2FzIGFsbG9jYXRlZCBleHRlcm5hbGx5CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihoZHJfdCkgKyBieXRlcyArIHNpemVvZihmdHJfdCk7CisgICAgaWYgKHNpemUgPCBieXRlcykgeyAvLyBPdmVyZmxvdworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGlmIChoZHItPmJhc2UgIT0gaGRyKSB7CiAgICAgICAgIC8vIEFuIGFsbG9jYXRpb24gZnJvbSBtZW1hbGlnbiwgc28gY3JlYXRlIGFub3RoZXIgYWxsb2NhdGlvbiBhbmQKICAgICAgICAgLy8gY29weSB0aGUgZGF0YSBvdXQuCi0gICAgICAgIHZvaWQqIG5ld01lbSA9IGRsbWFsbG9jKHNpemVvZihoZHJfdCkgKyBzaXplICsgc2l6ZW9mKGZ0cl90KSk7Ci0gICAgICAgIGlmIChuZXdNZW0pIHsKLSAgICAgICAgICAgIG1lbWNweShuZXdNZW0sIGhkciwgc2l6ZW9mKGhkcl90KSArIGhkci0+c2l6ZSk7Ci0gICAgICAgICAgICBkbGZyZWUoaGRyLT5iYXNlKTsKLSAgICAgICAgICAgIGhkciA9IHN0YXRpY19jYXN0PGhkcl90Kj4obmV3TWVtKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRsZnJlZShoZHItPmJhc2UpOwotICAgICAgICAgICAgaGRyID0gTlVMTDsKKyAgICAgICAgdm9pZCogbmV3TWVtID0gZ19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxvYyhzaXplKTsKKyAgICAgICAgaWYgKG5ld01lbSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBtZW1jcHkobmV3TWVtLCBoZHIsIHNpemVvZihoZHJfdCkgKyBoZHItPnNpemUpOworICAgICAgICBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShoZHItPmJhc2UpOworICAgICAgICBoZHIgPSBzdGF0aWNfY2FzdDxoZHJfdCo+KG5ld01lbSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaGRyID0gc3RhdGljX2Nhc3Q8aGRyX3QqPihkbHJlYWxsb2MoaGRyLCBzaXplb2YoaGRyX3QpICsgc2l6ZSArIHNpemVvZihmdHJfdCkpKTsKKyAgICAgICAgaGRyID0gc3RhdGljX2Nhc3Q8aGRyX3QqPihnX21hbGxvY19kaXNwYXRjaC0+cmVhbGxvYyhoZHIsIHNpemUpKTsKICAgICB9CiAgICAgaWYgKGhkcikgewogICAgICAgICBoZHItPmJhc2UgPSBoZHI7Ci0gICAgICAgIGhkci0+YnRfZGVwdGggPSBnZXRfYmFja3RyYWNlKGhkci0+YnQsIE1BWF9CQUNLVFJBQ0VfREVQVEgpOwotICAgICAgICBhZGQoaGRyLCBzaXplKTsKKyAgICAgICAgaGRyLT5idF9kZXB0aCA9IEdFVF9CQUNLVFJBQ0UoaGRyLT5idCwgTUFYX0JBQ0tUUkFDRV9ERVBUSCk7CisgICAgICAgIGFkZChoZHIsIGJ5dGVzKTsKICAgICAgICAgcmV0dXJuIHVzZXIoaGRyKTsKICAgICB9Ci0KICAgICByZXR1cm4gTlVMTDsKIH0KIAotZXh0ZXJuICJDIiB2b2lkKiBjaGtfY2FsbG9jKGludCBubWVtYiwgc2l6ZV90IHNpemUpIHsKK2V4dGVybiAiQyIgdm9pZCogY2hrX2NhbGxvYyhzaXplX3Qgbm1lbWIsIHNpemVfdCBieXRlcykgewogLy8gIGxvZ19tZXNzYWdlKCIlczogJXNcbiIsIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18pOwotICAgIHNpemVfdCB0b3RhbF9zaXplID0gbm1lbWIgKiBzaXplOwotICAgIGhkcl90KiBoZHIgPSBzdGF0aWNfY2FzdDxoZHJfdCo+KGRsY2FsbG9jKDEsIHNpemVvZihoZHJfdCkgKyB0b3RhbF9zaXplICsgc2l6ZW9mKGZ0cl90KSkpOworICAgIGlmIChEZWJ1Z0NhbGxzRGlzYWJsZWQoKSkgeworICAgICAgICByZXR1cm4gZ19tYWxsb2NfZGlzcGF0Y2gtPmNhbGxvYyhubWVtYiwgYnl0ZXMpOworICAgIH0KKworICAgIHNpemVfdCB0b3RhbF9ieXRlcyA9IG5tZW1iICogYnl0ZXM7CisgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoaGRyX3QpICsgdG90YWxfYnl0ZXMgKyBzaXplb2YoZnRyX3QpOworICAgIGlmIChzaXplIDwgdG90YWxfYnl0ZXMgfHwgKG5tZW1iICYmIFNJWkVfTUFYIC8gbm1lbWIgPCBieXRlcykpIHsgLy8gT3ZlcmZsb3cKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBoZHJfdCogaGRyID0gc3RhdGljX2Nhc3Q8aGRyX3QqPihnX21hbGxvY19kaXNwYXRjaC0+Y2FsbG9jKDEsIHNpemUpKTsKICAgICBpZiAoaGRyKSB7CiAgICAgICAgIGhkci0+YmFzZSA9IGhkcjsKLSAgICAgICAgaGRyLT5idF9kZXB0aCA9IGdldF9iYWNrdHJhY2UoaGRyLT5idCwgTUFYX0JBQ0tUUkFDRV9ERVBUSCk7Ci0gICAgICAgIGFkZChoZHIsIHRvdGFsX3NpemUpOworICAgICAgICBoZHItPmJ0X2RlcHRoID0gR0VUX0JBQ0tUUkFDRShoZHItPmJ0LCBNQVhfQkFDS1RSQUNFX0RFUFRIKTsKKyAgICAgICAgYWRkKGhkciwgdG90YWxfYnl0ZXMpOwogICAgICAgICByZXR1cm4gdXNlcihoZHIpOwogICAgIH0KICAgICByZXR1cm4gTlVMTDsKIH0KIAogZXh0ZXJuICJDIiBzaXplX3QgY2hrX21hbGxvY191c2FibGVfc2l6ZShjb25zdCB2b2lkKiBwdHIpIHsKLSAgICAvLyBkbG1hbGxvY191c2FibGVfc2l6ZSByZXR1cm5zIDAgZm9yIE5VTEwgYW5kIHVua25vd24gYmxvY2tzLgorICAgIGlmIChEZWJ1Z0NhbGxzRGlzYWJsZWQoKSkgeworICAgICAgICByZXR1cm4gZ19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxvY191c2FibGVfc2l6ZShwdHIpOworICAgIH0KKworICAgIC8vIG1hbGxvY191c2FibGVfc2l6ZSByZXR1cm5zIDAgZm9yIE5VTEwgYW5kIHVua25vd24gYmxvY2tzLgogICAgIGlmIChwdHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTUwNiwxMiArNTU5LDQ5IEBACiAgICAgcmV0dXJuIGhkci0+c2l6ZTsKIH0KIAotc3RhdGljIHZvaWQgUmVwb3J0TWVtb3J5TGVha3MoKSB7Ci0gIC8vIFdlIG9ubHkgdHJhY2sgbGVha3MgYXQgbGV2ZWwgMTAuCi0gIGlmIChnTWFsbG9jRGVidWdMZXZlbCAhPSAxMCkgewotICAgIHJldHVybjsKK2V4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZvIGNoa19tYWxsaW5mbygpIHsKKyAgcmV0dXJuIGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsaW5mbygpOworfQorCitleHRlcm4gIkMiIGludCBjaGtfcG9zaXhfbWVtYWxpZ24odm9pZCoqIG1lbXB0ciwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIHsKKyAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgcmV0dXJuIGdfbWFsbG9jX2Rpc3BhdGNoLT5wb3NpeF9tZW1hbGlnbihtZW1wdHIsIGFsaWdubWVudCwgc2l6ZSk7CiAgIH0KIAorICBpZiAoIXBvd2Vyb2YyKGFsaWdubWVudCkpIHsKKyAgICByZXR1cm4gRUlOVkFMOworICB9CisgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAqbWVtcHRyID0gY2hrX21lbWFsaWduKGFsaWdubWVudCwgc2l6ZSk7CisgIGVycm5vID0gc2F2ZWRfZXJybm87CisgIHJldHVybiAoKm1lbXB0ciAhPSBOVUxMKSA/IDAgOiBFTk9NRU07Cit9CisKKyNpZiBkZWZpbmVkKEhBVkVfREVQUkVDQVRFRF9NQUxMT0NfRlVOQ1MpCitleHRlcm4gIkMiIHZvaWQqIGNoa19wdmFsbG9jKHNpemVfdCBieXRlcykgeworICBpZiAoRGVidWdDYWxsc0Rpc2FibGVkKCkpIHsKKyAgICByZXR1cm4gZ19tYWxsb2NfZGlzcGF0Y2gtPnB2YWxsb2MoYnl0ZXMpOworICB9CisKKyAgc2l6ZV90IHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKKyAgc2l6ZV90IHNpemUgPSBCSU9OSUNfQUxJR04oYnl0ZXMsIHBhZ2VzaXplKTsKKyAgaWYgKHNpemUgPCBieXRlcykgeyAvLyBPdmVyZmxvdworICAgIHJldHVybiBOVUxMOworICB9CisgIHJldHVybiBjaGtfbWVtYWxpZ24ocGFnZXNpemUsIHNpemUpOworfQorCitleHRlcm4gIkMiIHZvaWQqIGNoa192YWxsb2Moc2l6ZV90IHNpemUpIHsKKyAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgcmV0dXJuIGdfbWFsbG9jX2Rpc3BhdGNoLT52YWxsb2Moc2l6ZSk7CisgIH0KKyAgcmV0dXJuIGNoa19tZW1hbGlnbihnZXRwYWdlc2l6ZSgpLCBzaXplKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBSZXBvcnRNZW1vcnlMZWFrcygpIHsKKyAgU2NvcGVkRGlzYWJsZURlYnVnQ2FsbHMgZGlzYWJsZTsKKwogICAvLyBVc2UgL3Byb2Mvc2VsZi9leGUgbGluayB0byBvYnRhaW4gdGhlIHByb2dyYW0gbmFtZSBmb3IgbG9nZ2luZwogICAvLyBwdXJwb3Nlcy4gSWYgaXQncyBub3QgYXZhaWxhYmxlLCB3ZSBzZXQgaXQgdG8gIjx1bmtub3duPiIuCiAgIGNoYXIgZXhlW1BBVEhfTUFYXTsKQEAgLTUyMiwxOSArNjEyLDE5IEBACiAgICAgZXhlW2NvdW50XSA9ICdcMCc7CiAgIH0KIAotICBpZiAoZ0FsbG9jYXRlZEJsb2NrQ291bnQgPT0gMCkgeworICBpZiAoZ19hbGxvY2F0ZWRfYmxvY2tfY291bnQgPT0gMCkgewogICAgIGxvZ19tZXNzYWdlKCIrKysgJXMgZGlkIG5vdCBsZWFrIiwgZXhlKTsKICAgICByZXR1cm47CiAgIH0KIAogICBzaXplX3QgaW5kZXggPSAxOwotICBjb25zdCBzaXplX3QgdG90YWwgPSBnQWxsb2NhdGVkQmxvY2tDb3VudDsKKyAgY29uc3Qgc2l6ZV90IHRvdGFsID0gZ19hbGxvY2F0ZWRfYmxvY2tfY291bnQ7CiAgIHdoaWxlIChoZWFkICE9IE5VTEwpIHsKICAgICBpbnQgc2FmZTsKICAgICBoZHJfdCogYmxvY2sgPSBoZWFkOwogICAgIGxvZ19tZXNzYWdlKCIrKysgJXMgbGVha2VkIGJsb2NrIG9mIHNpemUgJWQgYXQgJXAgKGxlYWsgJWQgb2YgJWQpIiwKICAgICAgICAgICAgICAgICBleGUsIGJsb2NrLT5zaXplLCB1c2VyKGJsb2NrKSwgaW5kZXgrKywgdG90YWwpOwotICAgIGlmIChkZWxfbGVhayhibG9jaywgJnNhZmUpKSB7CisgICAgaWYgKGRlbF9sZWFrKGJsb2NrLCAmc2FmZSkgJiYgZ19iYWNrdHJhY2VfZW5hYmxlZCkgewogICAgICAgLyogc2FmZSA9PSAxLCBiZWNhdXNlIHRoZSBhbGxvY2F0aW9uIGlzIHZhbGlkICovCiAgICAgICBsb2dfYmFja3RyYWNlKGJsb2NrLT5idCwgYmxvY2stPmJ0X2RlcHRoKTsKICAgICB9CkBAIC01NDUsMTIgKzYzNSw0MiBAQAogICB9CiB9CiAKLWV4dGVybiAiQyIgaW50IG1hbGxvY19kZWJ1Z19pbml0aWFsaXplKCkgewotICBiYWNrdHJhY2Vfc3RhcnR1cCgpOwotICByZXR1cm4gMDsKK3B0aHJlYWRfa2V5X3QgZ19kZWJ1Z19jYWxsc19kaXNhYmxlZDsKKworZXh0ZXJuICJDIiBib29sIG1hbGxvY19kZWJ1Z19pbml0aWFsaXplKEhhc2hUYWJsZSogaGFzaF90YWJsZSwgY29uc3QgTWFsbG9jRGVidWcqIG1hbGxvY19kaXNwYXRjaCkgeworICBnX2hhc2hfdGFibGUgPSBoYXNoX3RhYmxlOworICBnX21hbGxvY19kaXNwYXRjaCA9IG1hbGxvY19kaXNwYXRjaDsKKworICBwdGhyZWFkX2tleV9jcmVhdGUoJmdfZGVidWdfY2FsbHNfZGlzYWJsZWQsIE5VTEwpOworCisgIGNoYXIgZGVidWdfYmFja2xvZ1tQUk9QX1ZBTFVFX01BWF07CisgIGlmIChfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoImxpYmMuZGVidWcubWFsbG9jLmJhY2tsb2ciLCBkZWJ1Z19iYWNrbG9nKSkgeworICAgIGdfbWFsbG9jX2RlYnVnX2JhY2tsb2cgPSBhdG9pKGRlYnVnX2JhY2tsb2cpOworICAgIGluZm9fbG9nKCIlczogc2V0dGluZyBiYWNrbG9nIGxlbmd0aCB0byAlZFxuIiwgZ2V0cHJvZ25hbWUoKSwgZ19tYWxsb2NfZGVidWdfYmFja2xvZyk7CisgIH0KKworICAvLyBDaGVjayBpZiBiYWNrdHJhY2luZyBzaG91bGQgYmUgZGlzYWJsZWQuCisgIGNoYXIgZW52W1BST1BfVkFMVUVfTUFYXTsKKyAgaWYgKF9fc3lzdGVtX3Byb3BlcnR5X2dldCgibGliYy5kZWJ1Zy5tYWxsb2Mubm9iYWNrdHJhY2UiLCBlbnYpICYmIGF0b2koZW52KSAhPSAwKSB7CisgICAgZ19iYWNrdHJhY2VfZW5hYmxlZCA9IGZhbHNlOworICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0lORk8sICJsaWJjIiwgIm5vdCBnYXRoZXJpbmcgYmFja3RyYWNlIGluZm9ybWF0aW9uXG4iKTsKKyAgfQorCisgIGlmIChnX2JhY2t0cmFjZV9lbmFibGVkKSB7CisgICAgYmFja3RyYWNlX3N0YXJ0dXAoKTsKKyAgfQorCisgIHJldHVybiB0cnVlOwogfQogCi1leHRlcm4gIkMiIHZvaWQgbWFsbG9jX2RlYnVnX2ZpbmFsaXplKCkgewotICBSZXBvcnRNZW1vcnlMZWFrcygpOwotICBiYWNrdHJhY2Vfc2h1dGRvd24oKTsKK2V4dGVybiAiQyIgdm9pZCBtYWxsb2NfZGVidWdfZmluYWxpemUoaW50IG1hbGxvY19kZWJ1Z19sZXZlbCkgeworICAvLyBXZSBvbmx5IHRyYWNrIGxlYWtzIGF0IGxldmVsIDEwLgorICBpZiAobWFsbG9jX2RlYnVnX2xldmVsID09IDEwKSB7CisgICAgUmVwb3J0TWVtb3J5TGVha3MoKTsKKyAgfQorICBpZiAoZ19iYWNrdHJhY2VfZW5hYmxlZCkgeworICAgIGJhY2t0cmFjZV9zaHV0ZG93bigpOworICB9CisKKyAgcHRocmVhZF9zZXRzcGVjaWZpYyhnX2RlYnVnX2NhbGxzX2Rpc2FibGVkLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19jb21tb24uY3BwIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5jcHAKaW5kZXggODVmNzc5MS4uMGI2YTE0MiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5jcHAKKysrIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5jcHAKQEAgLTI2LDE5ICsyNiwxNyBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotLyoKLSAqIENvbnRhaW5zIGRlZmluaXRpb24gb2Ygc3RydWN0dXJlcywgZ2xvYmFsIHZhcmlhYmxlcywgYW5kIGltcGxlbWVudGF0aW9uIG9mCi0gKiByb3V0aW5lcyB0aGF0IGFyZSB1c2VkIGJ5IG1hbGxvYyBsZWFrIGRldGVjdGlvbiBjb2RlIGFuZCBvdGhlciBjb21wb25lbnRzIGluCi0gKiB0aGUgc3lzdGVtLiBUaGUgdHJpY2sgaXMgdGhhdCBzb21lIGNvbXBvbmVudHMgZXhwZWN0IHRoZXNlIGRhdGEgYW5kCi0gKiByb3V0aW5lcyB0byBiZSBkZWZpbmVkIC8gaW1wbGVtZW50ZWQgaW4gbGliYy5zbyBsaWJyYXJ5LCByZWdhcmRsZXNzCi0gKiB3aGV0aGVyIG9yIG5vdCBNQUxMT0NfTEVBS19DSEVDSyBtYWNybyBpcyBkZWZpbmVkLiBUbyBtYWtlIHRoaW5ncyBldmVuCi0gKiBtb3JlIHRyaWNreSwgbWFsbG9jIGxlYWsgZGV0ZWN0aW9uIGNvZGUsIGltcGxlbWVudGVkIGluCi0gKiBsaWJjX21hbGxvY19kZWJ1Zy5zbyBhbHNvIHJlcXVpcmVzIGFjY2VzcyB0byB0aGVzZSB2YXJpYWJsZXMgYW5kIHJvdXRpbmVzCi0gKiAodG8gZmlsbCBhbGxvY2F0aW9uIGVudHJ5IGhhc2ggdGFibGUsIGZvciBleGFtcGxlKS4gU28sIGFsbCByZWxldmFudAotICogdmFyaWFibGVzIGFuZCByb3V0aW5lcyBhcmUgZGVmaW5lZCAvIGltcGxlbWVudGVkIGhlcmUgYW5kIGV4cG9ydGVkCi0gKiB0byBhbGwsIGxlYWsgZGV0ZWN0aW9uIGNvZGUgYW5kIG90aGVyIGNvbXBvbmVudHMgdmlhIGR5bmFtaWMgKGxpYmMuc28pLAotICogb3Igc3RhdGljIChsaWJjLmEpIGxpbmtpbmcuCi0gKi8KKy8vIENvbnRhaW5zIGRlZmluaXRpb24gb2Ygc3RydWN0dXJlcywgZ2xvYmFsIHZhcmlhYmxlcywgYW5kIGltcGxlbWVudGF0aW9uIG9mCisvLyByb3V0aW5lcyB0aGF0IGFyZSB1c2VkIGJ5IG1hbGxvYyBsZWFrIGRldGVjdGlvbiBjb2RlIGFuZCBvdGhlciBjb21wb25lbnRzIGluCisvLyB0aGUgc3lzdGVtLiBUaGUgdHJpY2sgaXMgdGhhdCBzb21lIGNvbXBvbmVudHMgZXhwZWN0IHRoZXNlIGRhdGEgYW5kCisvLyByb3V0aW5lcyB0byBiZSBkZWZpbmVkIC8gaW1wbGVtZW50ZWQgaW4gbGliYy5zbyBsaWJyYXJ5LCByZWdhcmRsZXNzCisvLyB3aGV0aGVyIG9yIG5vdCBNQUxMT0NfTEVBS19DSEVDSyBtYWNybyBpcyBkZWZpbmVkLiBUbyBtYWtlIHRoaW5ncyBldmVuCisvLyBtb3JlIHRyaWNreSwgbWFsbG9jIGxlYWsgZGV0ZWN0aW9uIGNvZGUsIGltcGxlbWVudGVkIGluCisvLyBsaWJjX21hbGxvY19kZWJ1Zy5zbyBhbHNvIHJlcXVpcmVzIGFjY2VzcyB0byB0aGVzZSB2YXJpYWJsZXMgYW5kIHJvdXRpbmVzCisvLyAodG8gZmlsbCBhbGxvY2F0aW9uIGVudHJ5IGhhc2ggdGFibGUsIGZvciBleGFtcGxlKS4gU28sIGFsbCByZWxldmFudAorLy8gdmFyaWFibGVzIGFuZCByb3V0aW5lcyBhcmUgZGVmaW5lZCAvIGltcGxlbWVudGVkIGhlcmUgYW5kIGV4cG9ydGVkCisvLyB0byBhbGwsIGxlYWsgZGV0ZWN0aW9uIGNvZGUgYW5kIG90aGVyIGNvbXBvbmVudHMgdmlhIGR5bmFtaWMgKGxpYmMuc28pLAorLy8gb3Igc3RhdGljIChsaWJjLmEpIGxpbmtpbmcuCiAKICNpbmNsdWRlICJtYWxsb2NfZGVidWdfY29tbW9uLmgiCiAKQEAgLTQ2LDQ4MyArNDQsNDg0IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLSNpbmNsdWRlICJkbG1hbGxvYy5oIgogI2luY2x1ZGUgInByaXZhdGUvU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmgiCiAKLS8qCi0gKiBJbiBhIFZNIHByb2Nlc3MsIHRoaXMgaXMgc2V0IHRvIDEgYWZ0ZXIgZm9yaygpaW5nIG91dCBvZiB6eWdvdGUuCi0gKi8KKyNpZiBkZWZpbmVkKFVTRV9KRU1BTExPQykKKyNpbmNsdWRlICJqZW1hbGxvYy5oIgorI2RlZmluZSBNYWxsb2MoZnVuY3Rpb24pICBqZV8gIyMgZnVuY3Rpb24KKyNlbGlmIGRlZmluZWQoVVNFX0RMTUFMTE9DKQorI2luY2x1ZGUgImRsbWFsbG9jLmgiCisjZGVmaW5lIE1hbGxvYyhmdW5jdGlvbikgIGRsICMjIGZ1bmN0aW9uCisjZWxzZQorI2Vycm9yICJFaXRoZXIgb25lIG9mIFVTRV9ETE1BTExPQyBvciBVU0VfSkVNQUxMT0MgbXVzdCBiZSBkZWZpbmVkLiIKKyNlbmRpZgorCisvLyBJbiBhIFZNIHByb2Nlc3MsIHRoaXMgaXMgc2V0IHRvIDEgYWZ0ZXIgZm9yaygpaW5nIG91dCBvZiB6eWdvdGUuCiBpbnQgZ01hbGxvY0xlYWtaeWdvdGVDaGlsZCA9IDA7CiAKLXB0aHJlYWRfbXV0ZXhfdCBnQWxsb2NhdGlvbnNNdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7Ci1IYXNoVGFibGUgZ0hhc2hUYWJsZTsKK3N0YXRpYyBIYXNoVGFibGUgZ19oYXNoX3RhYmxlOworCisvLyBTdXBwb3J0IGZvciBtYWxsb2MgZGVidWdnaW5nLgorLy8gVGFibGUgZm9yIGRpc3BhdGNoaW5nIG1hbGxvYyBjYWxscywgaW5pdGlhbGl6ZWQgd2l0aCBkZWZhdWx0IGRpc3BhdGNoZXJzLgorc3RhdGljIGNvbnN0IE1hbGxvY0RlYnVnIF9fbGliY19tYWxsb2NfZGVmYXVsdF9kaXNwYXRjaCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDMyKSkpID0geworICBNYWxsb2MoY2FsbG9jKSwKKyAgTWFsbG9jKGZyZWUpLAorICBNYWxsb2MobWFsbGluZm8pLAorICBNYWxsb2MobWFsbG9jKSwKKyAgTWFsbG9jKG1hbGxvY191c2FibGVfc2l6ZSksCisgIE1hbGxvYyhtZW1hbGlnbiksCisgIE1hbGxvYyhwb3NpeF9tZW1hbGlnbiksCisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorICBNYWxsb2MocHZhbGxvYyksCisjZW5kaWYKKyAgTWFsbG9jKHJlYWxsb2MpLAorI2lmIGRlZmluZWQoSEFWRV9ERVBSRUNBVEVEX01BTExPQ19GVU5DUykKKyAgTWFsbG9jKHZhbGxvYyksCisjZW5kaWYKK307CisKKy8vIFNlbGVjdG9yIG9mIGRpc3BhdGNoIHRhYmxlIHRvIHVzZSBmb3IgZGlzcGF0Y2hpbmcgbWFsbG9jIGNhbGxzLgorc3RhdGljIGNvbnN0IE1hbGxvY0RlYnVnKiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoID0gJl9fbGliY19tYWxsb2NfZGVmYXVsdF9kaXNwYXRjaDsKKworLy8gSGFuZGxlIHRvIHNoYXJlZCBsaWJyYXJ5IHdoZXJlIGFjdHVhbCBtZW1vcnkgYWxsb2NhdGlvbiBpcyBpbXBsZW1lbnRlZC4KKy8vIFRoaXMgbGlicmFyeSBpcyBsb2FkZWQgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzIGFyZSByZWRpcmVjdGVkIHRoZXJlCisvLyB3aGVuIGxpYmMuZGVidWcubWFsbG9jIGVudmlyb25tZW50IHZhcmlhYmxlIGNvbnRhaW5zIHZhbHVlIG90aGVyIHRoYW4KKy8vIHplcm86CisvLyAxICAtIEZvciBtZW1vcnkgbGVhayBkZXRlY3Rpb25zLgorLy8gNSAgLSBGb3IgZmlsbGluZyBhbGxvY2F0ZWQgLyBmcmVlZCBtZW1vcnkgd2l0aCBwYXR0ZXJucyBkZWZpbmVkIGJ5CisvLyAgICAgIENIS19TRU5USU5FTF9WQUxVRSwgYW5kIENIS19GSUxMX0ZSRUUgbWFjcm9zLgorLy8gMTAgLSBGb3IgYWRkaW5nIHByZS0sIGFuZCBwb3N0LSBhbGxvY2F0aW9uIHN0dWJzIGluIG9yZGVyIHRvIGRldGVjdAorLy8gICAgICBidWZmZXIgb3ZlcnJ1bnMuCisvLyBOb3RlIHRoYXQgZW11bGF0b3IncyBtZW1vcnkgYWxsb2NhdGlvbiBpbnN0cnVtZW50YXRpb24gaXMgbm90IGNvbnRyb2xsZWQgYnkKKy8vIGxpYmMuZGVidWcubWFsbG9jIHZhbHVlLCBidXQgcmF0aGVyIGJ5IGVtdWxhdG9yLCBzdGFydGVkIHdpdGggLW1lbWNoZWNrCisvLyBvcHRpb24uIE5vdGUgYWxzbywgdGhhdCBpZiBlbXVsYXRvciBoYXMgc3RhcnRlZCB3aXRoIC1tZW1jaGVjayBvcHRpb24sCisvLyBlbXVsYXRvcidzIGluc3RydW1lbnRlZCBtZW1vcnkgYWxsb2NhdGlvbiB3aWxsIHRha2Ugb3ZlciB2YWx1ZSBzYXZlZCBpbgorLy8gbGliYy5kZWJ1Zy5tYWxsb2MuIEluIG90aGVyIHdvcmRzLCBpZiBlbXVsYXRvciBoYXMgc3RhcnRlZCB3aXRoIC1tZW1jaGVjaworLy8gb3B0aW9uLCBsaWJjLmRlYnVnLm1hbGxvYyB2YWx1ZSBpcyBpZ25vcmVkLgorLy8gQWN0dWFsIGZ1bmN0aW9uYWxpdHkgZm9yIGRlYnVnIGxldmVscyAxLTEwIGlzIGltcGxlbWVudGVkIGluCisvLyBsaWJjX21hbGxvY19kZWJ1Z19sZWFrLnNvLCB3aGlsZSBmdW5jdGlvbmFsaXR5IGZvciBlbXVsYXRvcidzIGluc3RydW1lbnRlZAorLy8gYWxsb2NhdGlvbnMgaXMgaW1wbGVtZW50ZWQgaW4gbGliY19tYWxsb2NfZGVidWdfcWVtdS5zbyBhbmQgY2FuIGJlIHJ1biBpbnNpZGUKKy8vIHRoZSBlbXVsYXRvciBvbmx5LgorI2lmICFkZWZpbmVkKExJQkNfU1RBVElDKQorc3RhdGljIHZvaWQqIGxpYmNfbWFsbG9jX2ltcGxfaGFuZGxlID0gTlVMTDsKKyNlbmRpZgorCisKKy8vIFRoZSB2YWx1ZSBvZiBsaWJjLmRlYnVnLm1hbGxvYy4KKyNpZiAhZGVmaW5lZChMSUJDX1NUQVRJQykKK3N0YXRpYyBpbnQgZ19tYWxsb2NfZGVidWdfbGV2ZWwgPSAwOworI2VuZGlmCiAKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBvdXRwdXQgZnVuY3Rpb25zCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBzdGF0aWMgaW50IGhhc2hfZW50cnlfY29tcGFyZShjb25zdCB2b2lkKiBhcmcxLCBjb25zdCB2b2lkKiBhcmcyKSB7Ci0gICAgaW50IHJlc3VsdDsKKyAgaW50IHJlc3VsdDsKIAotICAgIGNvbnN0IEhhc2hFbnRyeSogZTEgPSAqc3RhdGljX2Nhc3Q8SGFzaEVudHJ5KiBjb25zdCo+KGFyZzEpOwotICAgIGNvbnN0IEhhc2hFbnRyeSogZTIgPSAqc3RhdGljX2Nhc3Q8SGFzaEVudHJ5KiBjb25zdCo+KGFyZzIpOworICBjb25zdCBIYXNoRW50cnkqIGUxID0gKnN0YXRpY19jYXN0PEhhc2hFbnRyeSogY29uc3QqPihhcmcxKTsKKyAgY29uc3QgSGFzaEVudHJ5KiBlMiA9ICpzdGF0aWNfY2FzdDxIYXNoRW50cnkqIGNvbnN0Kj4oYXJnMik7CiAKLSAgICAvLyBpZiBvbmUgb3IgYm90aCBhcmcgcG9pbnRlcnMgYXJlIG51bGwsIGRlYWwgZ3JhY2VmdWxseQotICAgIGlmIChlMSA9PSBOVUxMKSB7Ci0gICAgICAgIHJlc3VsdCA9IChlMiA9PSBOVUxMKSA/IDAgOiAxOwotICAgIH0gZWxzZSBpZiAoZTIgPT0gTlVMTCkgewotICAgICAgICByZXN1bHQgPSAtMTsKKyAgLy8gaWYgb25lIG9yIGJvdGggYXJnIHBvaW50ZXJzIGFyZSBudWxsLCBkZWFsIGdyYWNlZnVsbHkKKyAgaWYgKGUxID09IE5VTEwpIHsKKyAgICByZXN1bHQgPSAoZTIgPT0gTlVMTCkgPyAwIDogMTsKKyAgfSBlbHNlIGlmIChlMiA9PSBOVUxMKSB7CisgICAgcmVzdWx0ID0gLTE7CisgIH0gZWxzZSB7CisgICAgc2l6ZV90IG5iQWxsb2MxID0gZTEtPmFsbG9jYXRpb25zOworICAgIHNpemVfdCBuYkFsbG9jMiA9IGUyLT5hbGxvY2F0aW9uczsKKyAgICBzaXplX3Qgc2l6ZTEgPSBlMS0+c2l6ZSAmIH5TSVpFX0ZMQUdfTUFTSzsKKyAgICBzaXplX3Qgc2l6ZTIgPSBlMi0+c2l6ZSAmIH5TSVpFX0ZMQUdfTUFTSzsKKyAgICBzaXplX3QgYWxsb2MxID0gbmJBbGxvYzEgKiBzaXplMTsKKyAgICBzaXplX3QgYWxsb2MyID0gbmJBbGxvYzIgKiBzaXplMjsKKworICAgIC8vIHNvcnQgaW4gZGVzY2VuZGluZyBvcmRlciBieToKKyAgICAvLyAxKSB0b3RhbCBzaXplCisgICAgLy8gMikgbnVtYmVyIG9mIGFsbG9jYXRpb25zCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIHVzZWQgZm9yIHNvcnRpbmcsIG5vdCBkZXRlcm1pbmF0aW9uIG9mIGVxdWFsaXR5LCBzbyB3ZSBkb24ndAorICAgIC8vIG5lZWQgdG8gY29tcGFyZSB0aGUgYml0IGZsYWdzLgorICAgIGlmIChhbGxvYzEgPiBhbGxvYzIpIHsKKyAgICAgIHJlc3VsdCA9IC0xOworICAgIH0gZWxzZSBpZiAoYWxsb2MxIDwgYWxsb2MyKSB7CisgICAgICByZXN1bHQgPSAxOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNpemVfdCBuYkFsbG9jMSA9IGUxLT5hbGxvY2F0aW9uczsKLSAgICAgICAgc2l6ZV90IG5iQWxsb2MyID0gZTItPmFsbG9jYXRpb25zOwotICAgICAgICBzaXplX3Qgc2l6ZTEgPSBlMS0+c2l6ZSAmIH5TSVpFX0ZMQUdfTUFTSzsKLSAgICAgICAgc2l6ZV90IHNpemUyID0gZTItPnNpemUgJiB+U0laRV9GTEFHX01BU0s7Ci0gICAgICAgIHNpemVfdCBhbGxvYzEgPSBuYkFsbG9jMSAqIHNpemUxOwotICAgICAgICBzaXplX3QgYWxsb2MyID0gbmJBbGxvYzIgKiBzaXplMjsKLQotICAgICAgICAvLyBzb3J0IGluIGRlc2NlbmRpbmcgb3JkZXIgYnk6Ci0gICAgICAgIC8vIDEpIHRvdGFsIHNpemUKLSAgICAgICAgLy8gMikgbnVtYmVyIG9mIGFsbG9jYXRpb25zCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBmb3Igc29ydGluZywgbm90IGRldGVybWluYXRpb24gb2YgZXF1YWxpdHksIHNvIHdlIGRvbid0Ci0gICAgICAgIC8vIG5lZWQgdG8gY29tcGFyZSB0aGUgYml0IGZsYWdzLgotICAgICAgICBpZiAoYWxsb2MxID4gYWxsb2MyKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSAtMTsKLSAgICAgICAgfSBlbHNlIGlmIChhbGxvYzEgPCBhbGxvYzIpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobmJBbGxvYzEgPiBuYkFsbG9jMikgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IC0xOwotICAgICAgICAgICAgfSBlbHNlIGlmIChuYkFsbG9jMSA8IG5iQWxsb2MyKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gMTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgaWYgKG5iQWxsb2MxID4gbmJBbGxvYzIpIHsKKyAgICAgICAgcmVzdWx0ID0gLTE7CisgICAgICB9IGVsc2UgaWYgKG5iQWxsb2MxIDwgbmJBbGxvYzIpIHsKKyAgICAgICAgcmVzdWx0ID0gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICB9CiAgICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKIH0KIAotLyoKLSAqIFJldHJpZXZlIG5hdGl2ZSBoZWFwIGluZm9ybWF0aW9uLgotICoKLSAqICIqaW5mbyIgaXMgc2V0IHRvIGEgYnVmZmVyIHdlIGFsbG9jYXRlCi0gKiAiKm92ZXJhbGxTaXplIiBpcyBzZXQgdG8gdGhlIHNpemUgb2YgdGhlICJpbmZvIiBidWZmZXIKLSAqICIqaW5mb1NpemUiIGlzIHNldCB0byB0aGUgc2l6ZSBvZiBhIHNpbmdsZSBlbnRyeQotICogIip0b3RhbE1lbW9yeSIgaXMgc2V0IHRvIHRoZSBzdW0gb2YgYWxsIGFsbG9jYXRpb25zIHdlJ3JlIHRyYWNraW5nOyBkb2VzCi0gKiAgIG5vdCBpbmNsdWRlIGhlYXAgb3ZlcmhlYWQKLSAqICIqYmFja3RyYWNlU2l6ZSIgaXMgc2V0IHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBiYWNrIHRyYWNlCi0gKi8KKy8vIFJldHJpZXZlIG5hdGl2ZSBoZWFwIGluZm9ybWF0aW9uLgorLy8KKy8vICIqaW5mbyIgaXMgc2V0IHRvIGEgYnVmZmVyIHdlIGFsbG9jYXRlCisvLyAiKm92ZXJhbGxTaXplIiBpcyBzZXQgdG8gdGhlIHNpemUgb2YgdGhlICJpbmZvIiBidWZmZXIKKy8vICIqaW5mb1NpemUiIGlzIHNldCB0byB0aGUgc2l6ZSBvZiBhIHNpbmdsZSBlbnRyeQorLy8gIip0b3RhbE1lbW9yeSIgaXMgc2V0IHRvIHRoZSBzdW0gb2YgYWxsIGFsbG9jYXRpb25zIHdlJ3JlIHRyYWNraW5nOyBkb2VzCisvLyAgIG5vdCBpbmNsdWRlIGhlYXAgb3ZlcmhlYWQKKy8vICIqYmFja3RyYWNlU2l6ZSIgaXMgc2V0IHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBiYWNrIHRyYWNlCisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBFeHBvcnRlZCBmb3IgdXNlIGJ5IGRkbXMuCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogZXh0ZXJuICJDIiB2b2lkIGdldF9tYWxsb2NfbGVha19pbmZvKHVpbnQ4X3QqKiBpbmZvLCBzaXplX3QqIG92ZXJhbGxTaXplLAotICAgICAgICBzaXplX3QqIGluZm9TaXplLCBzaXplX3QqIHRvdGFsTWVtb3J5LCBzaXplX3QqIGJhY2t0cmFjZVNpemUpIHsKLSAgICAvLyBkb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIGludmFsaWQgYXJndW1lbnRzCi0gICAgaWYgKGluZm8gPT0gTlVMTCB8fCBvdmVyYWxsU2l6ZSA9PSBOVUxMIHx8IGluZm9TaXplID09IE5VTEwgfHwKLSAgICAgICAgICAgIHRvdGFsTWVtb3J5ID09IE5VTEwgfHwgYmFja3RyYWNlU2l6ZSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybjsKKyAgICBzaXplX3QqIGluZm9TaXplLCBzaXplX3QqIHRvdGFsTWVtb3J5LCBzaXplX3QqIGJhY2t0cmFjZVNpemUpIHsKKyAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBpbnZhbGlkIGFyZ3VtZW50cy4KKyAgaWYgKGluZm8gPT0gTlVMTCB8fCBvdmVyYWxsU2l6ZSA9PSBOVUxMIHx8IGluZm9TaXplID09IE5VTEwgfHwKKyAgICB0b3RhbE1lbW9yeSA9PSBOVUxMIHx8IGJhY2t0cmFjZVNpemUgPT0gTlVMTCkgeworICAgIHJldHVybjsKKyAgfQorICAqdG90YWxNZW1vcnkgPSAwOworCisgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdfaGFzaF90YWJsZS5sb2NrKTsKKyAgaWYgKGdfaGFzaF90YWJsZS5jb3VudCA9PSAwKSB7CisgICAgKmluZm8gPSBOVUxMOworICAgICpvdmVyYWxsU2l6ZSA9IDA7CisgICAgKmluZm9TaXplID0gMDsKKyAgICAqYmFja3RyYWNlU2l6ZSA9IDA7CisgICAgcmV0dXJuOworICB9CisKKyAgSGFzaEVudHJ5KiogbGlzdCA9IHN0YXRpY19jYXN0PEhhc2hFbnRyeSoqPihNYWxsb2MobWFsbG9jKShzaXplb2Yodm9pZCopICogZ19oYXNoX3RhYmxlLmNvdW50KSk7CisKKyAgLy8gR2V0IHRoZSBlbnRyaWVzIGludG8gYW4gYXJyYXkgdG8gYmUgc29ydGVkLgorICBzaXplX3QgaW5kZXggPSAwOworICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBIQVNIVEFCTEVfU0laRSA7ICsraSkgeworICAgIEhhc2hFbnRyeSogZW50cnkgPSBnX2hhc2hfdGFibGUuc2xvdHNbaV07CisgICAgd2hpbGUgKGVudHJ5ICE9IE5VTEwpIHsKKyAgICAgIGxpc3RbaW5kZXhdID0gZW50cnk7CisgICAgICAqdG90YWxNZW1vcnkgPSAqdG90YWxNZW1vcnkgKyAoKGVudHJ5LT5zaXplICYgflNJWkVfRkxBR19NQVNLKSAqIGVudHJ5LT5hbGxvY2F0aW9ucyk7CisgICAgICBpbmRleCsrOworICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKICAgICB9Ci0gICAgKnRvdGFsTWVtb3J5ID0gMDsKKyAgfQogCi0gICAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ0FsbG9jYXRpb25zTXV0ZXgpOworICAvLyBYWFg6IHRoZSBwcm90b2NvbCBkb2Vzbid0IGFsbG93IHZhcmlhYmxlIHNpemUgZm9yIHRoZSBzdGFjayB0cmFjZSAoeWV0KQorICAqaW5mb1NpemUgPSAoc2l6ZW9mKHNpemVfdCkgKiAyKSArIChzaXplb2YodWludHB0cl90KSAqIEJBQ0tUUkFDRV9TSVpFKTsKKyAgKm92ZXJhbGxTaXplID0gKmluZm9TaXplICogZ19oYXNoX3RhYmxlLmNvdW50OworICAqYmFja3RyYWNlU2l6ZSA9IEJBQ0tUUkFDRV9TSVpFOwogCi0gICAgaWYgKGdIYXNoVGFibGUuY291bnQgPT0gMCkgewotICAgICAgICAqaW5mbyA9IE5VTEw7Ci0gICAgICAgICpvdmVyYWxsU2l6ZSA9IDA7Ci0gICAgICAgICppbmZvU2l6ZSA9IDA7Ci0gICAgICAgICpiYWNrdHJhY2VTaXplID0gMDsKLSAgICAgICAgcmV0dXJuOworICAvLyBub3cgZ2V0IGEgYnl0ZSBhcnJheSBiaWcgZW5vdWdoIGZvciB0aGlzCisgICppbmZvID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KE1hbGxvYyhtYWxsb2MpKCpvdmVyYWxsU2l6ZSkpOworICBpZiAoKmluZm8gPT0gTlVMTCkgeworICAgICpvdmVyYWxsU2l6ZSA9IDA7CisgICAgTWFsbG9jKGZyZWUpKGxpc3QpOworICAgIHJldHVybjsKKyAgfQorCisgIHFzb3J0KGxpc3QsIGdfaGFzaF90YWJsZS5jb3VudCwgc2l6ZW9mKHZvaWQqKSwgaGFzaF9lbnRyeV9jb21wYXJlKTsKKworICB1aW50OF90KiBoZWFkID0gKmluZm87CisgIGNvbnN0IHNpemVfdCBjb3VudCA9IGdfaGFzaF90YWJsZS5jb3VudDsKKyAgZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgY291bnQgOyArK2kpIHsKKyAgICBIYXNoRW50cnkqIGVudHJ5ID0gbGlzdFtpXTsKKyAgICBzaXplX3QgZW50cnlTaXplID0gKHNpemVvZihzaXplX3QpICogMikgKyAoc2l6ZW9mKHVpbnRwdHJfdCkgKiBlbnRyeS0+bnVtRW50cmllcyk7CisgICAgaWYgKGVudHJ5U2l6ZSA8ICppbmZvU2l6ZSkgeworICAgICAgLy8gV2UncmUgd3JpdGluZyBsZXNzIHRoYW4gYSBmdWxsIGVudHJ5LCBjbGVhciBvdXQgdGhlIHJlc3QuCisgICAgICBtZW1zZXQoaGVhZCArIGVudHJ5U2l6ZSwgMCwgKmluZm9TaXplIC0gZW50cnlTaXplKTsKKyAgICB9IGVsc2UgeworICAgICAgLy8gTWFrZSBzdXJlIHRoZSBhbW91bnQgd2UncmUgY29weWluZyBkb2Vzbid0IGV4Y2VlZCB0aGUgbGltaXQuCisgICAgICBlbnRyeVNpemUgPSAqaW5mb1NpemU7CiAgICAgfQorICAgIG1lbWNweShoZWFkLCAmKGVudHJ5LT5zaXplKSwgZW50cnlTaXplKTsKKyAgICBoZWFkICs9ICppbmZvU2l6ZTsKKyAgfQogCi0gICAgSGFzaEVudHJ5KiogbGlzdCA9IHN0YXRpY19jYXN0PEhhc2hFbnRyeSoqPihkbG1hbGxvYyhzaXplb2Yodm9pZCopICogZ0hhc2hUYWJsZS5jb3VudCkpOwotCi0gICAgLy8gZ2V0IHRoZSBlbnRyaWVzIGludG8gYW4gYXJyYXkgdG8gYmUgc29ydGVkCi0gICAgaW50IGluZGV4ID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBIQVNIVEFCTEVfU0laRSA7ICsraSkgewotICAgICAgICBIYXNoRW50cnkqIGVudHJ5ID0gZ0hhc2hUYWJsZS5zbG90c1tpXTsKLSAgICAgICAgd2hpbGUgKGVudHJ5ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGxpc3RbaW5kZXhdID0gZW50cnk7Ci0gICAgICAgICAgICAqdG90YWxNZW1vcnkgPSAqdG90YWxNZW1vcnkgKwotICAgICAgICAgICAgICAgICgoZW50cnktPnNpemUgJiB+U0laRV9GTEFHX01BU0spICogZW50cnktPmFsbG9jYXRpb25zKTsKLSAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgICBlbnRyeSA9IGVudHJ5LT5uZXh0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gWFhYOiB0aGUgcHJvdG9jb2wgZG9lc24ndCBhbGxvdyB2YXJpYWJsZSBzaXplIGZvciB0aGUgc3RhY2sgdHJhY2UgKHlldCkKLSAgICAqaW5mb1NpemUgPSAoc2l6ZW9mKHNpemVfdCkgKiAyKSArIChzaXplb2YodWludHB0cl90KSAqIEJBQ0tUUkFDRV9TSVpFKTsKLSAgICAqb3ZlcmFsbFNpemUgPSAqaW5mb1NpemUgKiBnSGFzaFRhYmxlLmNvdW50OwotICAgICpiYWNrdHJhY2VTaXplID0gQkFDS1RSQUNFX1NJWkU7Ci0KLSAgICAvLyBub3cgZ2V0IGEgYnl0ZSBhcnJheSBiaWcgZW5vdWdoIGZvciB0aGlzCi0gICAgKmluZm8gPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGxtYWxsb2MoKm92ZXJhbGxTaXplKSk7Ci0KLSAgICBpZiAoKmluZm8gPT0gTlVMTCkgewotICAgICAgICAqb3ZlcmFsbFNpemUgPSAwOwotICAgICAgICBkbGZyZWUobGlzdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBxc29ydChsaXN0LCBnSGFzaFRhYmxlLmNvdW50LCBzaXplb2Yodm9pZCopLCBoYXNoX2VudHJ5X2NvbXBhcmUpOwotCi0gICAgdWludDhfdCogaGVhZCA9ICppbmZvOwotICAgIGNvbnN0IGludCBjb3VudCA9IGdIYXNoVGFibGUuY291bnQ7Ci0gICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgY291bnQgOyArK2kpIHsKLSAgICAgICAgSGFzaEVudHJ5KiBlbnRyeSA9IGxpc3RbaV07Ci0gICAgICAgIHNpemVfdCBlbnRyeVNpemUgPSAoc2l6ZW9mKHNpemVfdCkgKiAyKSArIChzaXplb2YodWludHB0cl90KSAqIGVudHJ5LT5udW1FbnRyaWVzKTsKLSAgICAgICAgaWYgKGVudHJ5U2l6ZSA8ICppbmZvU2l6ZSkgewotICAgICAgICAgICAgLyogd2UncmUgd3JpdGluZyBsZXNzIHRoYW4gYSBmdWxsIGVudHJ5LCBjbGVhciBvdXQgdGhlIHJlc3QgKi8KLSAgICAgICAgICAgIG1lbXNldChoZWFkICsgZW50cnlTaXplLCAwLCAqaW5mb1NpemUgLSBlbnRyeVNpemUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogbWFrZSBzdXJlIHRoZSBhbW91bnQgd2UncmUgY29weWluZyBkb2Vzbid0IGV4Y2VlZCB0aGUgbGltaXQgKi8KLSAgICAgICAgICAgIGVudHJ5U2l6ZSA9ICppbmZvU2l6ZTsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkoaGVhZCwgJihlbnRyeS0+c2l6ZSksIGVudHJ5U2l6ZSk7Ci0gICAgICAgIGhlYWQgKz0gKmluZm9TaXplOwotICAgIH0KLQotICAgIGRsZnJlZShsaXN0KTsKKyAgTWFsbG9jKGZyZWUpKGxpc3QpOwogfQogCiBleHRlcm4gIkMiIHZvaWQgZnJlZV9tYWxsb2NfbGVha19pbmZvKHVpbnQ4X3QqIGluZm8pIHsKLSAgICBkbGZyZWUoaW5mbyk7CisgIE1hbGxvYyhmcmVlKShpbmZvKTsKIH0KIAotZXh0ZXJuICJDIiBzdHJ1Y3QgbWFsbGluZm8gbWFsbGluZm8oKSB7Ci0gICAgcmV0dXJuIGRsbWFsbGluZm8oKTsKLX0KLQotZXh0ZXJuICJDIiB2b2lkKiB2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7Ci0gICAgcmV0dXJuIGRsdmFsbG9jKGJ5dGVzKTsKLX0KLQotZXh0ZXJuICJDIiB2b2lkKiBwdmFsbG9jKHNpemVfdCBieXRlcykgewotICAgIHJldHVybiBkbHB2YWxsb2MoYnl0ZXMpOwotfQotCi1leHRlcm4gIkMiIGludCBwb3NpeF9tZW1hbGlnbih2b2lkKiogbWVtcHRyLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgewotICAgIHJldHVybiBkbHBvc2l4X21lbWFsaWduKG1lbXB0ciwgYWxpZ25tZW50LCBzaXplKTsKLX0KLQotLyogU3VwcG9ydCBmb3IgbWFsbG9jIGRlYnVnZ2luZy4KLSAqIE5vdGUgdGhhdCBpZiBVU0VfRExfUFJFRklYIGlzIG5vdCBkZWZpbmVkLCBpdCdzIGFzc3VtZWQgdGhhdCBtZW1vcnkKLSAqIGFsbG9jYXRpb24gcm91dGluZXMgYXJlIGltcGxlbWVudGVkIHNvbWV3aGVyZSBlbHNlLCBzbyBhbGwgb3VyIGN1c3RvbQotICogbWFsbG9jIHJvdXRpbmVzIHNob3VsZCBub3QgYmUgY29tcGlsZWQgYXQgYWxsLgotICovCi0jaWZkZWYgVVNFX0RMX1BSRUZJWAotCi0vKiBUYWJsZSBmb3IgZGlzcGF0Y2hpbmcgbWFsbG9jIGNhbGxzLCBpbml0aWFsaXplZCB3aXRoIGRlZmF1bHQgZGlzcGF0Y2hlcnMuICovCi1leHRlcm4gY29uc3QgTWFsbG9jRGVidWcgX19saWJjX21hbGxvY19kZWZhdWx0X2Rpc3BhdGNoOwotY29uc3QgTWFsbG9jRGVidWcgX19saWJjX21hbGxvY19kZWZhdWx0X2Rpc3BhdGNoIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMzIpKSkgPQotewotICAgIGRsbWFsbG9jLCBkbGZyZWUsIGRsY2FsbG9jLCBkbHJlYWxsb2MsIGRsbWVtYWxpZ24sIGRsbWFsbG9jX3VzYWJsZV9zaXplLAotfTsKLQotLyogU2VsZWN0b3Igb2YgZGlzcGF0Y2ggdGFibGUgdG8gdXNlIGZvciBkaXNwYXRjaGluZyBtYWxsb2MgY2FsbHMuICovCi1jb25zdCBNYWxsb2NEZWJ1ZyogX19saWJjX21hbGxvY19kaXNwYXRjaCA9ICZfX2xpYmNfbWFsbG9jX2RlZmF1bHRfZGlzcGF0Y2g7Ci0KLWV4dGVybiAiQyIgdm9pZCogbWFsbG9jKHNpemVfdCBieXRlcykgewotICAgIHJldHVybiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2MoYnl0ZXMpOworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEFsbG9jYXRpb24gZnVuY3Rpb25zCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZXh0ZXJuICJDIiB2b2lkKiBjYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpIHsKKyAgcmV0dXJuIF9fbGliY19tYWxsb2NfZGlzcGF0Y2gtPmNhbGxvYyhuX2VsZW1lbnRzLCBlbGVtX3NpemUpOwogfQogCiBleHRlcm4gIkMiIHZvaWQgZnJlZSh2b2lkKiBtZW0pIHsKLSAgICBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoLT5mcmVlKG1lbSk7CisgIF9fbGliY19tYWxsb2NfZGlzcGF0Y2gtPmZyZWUobWVtKTsKIH0KIAotZXh0ZXJuICJDIiB2b2lkKiBjYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpIHsKLSAgICByZXR1cm4gX19saWJjX21hbGxvY19kaXNwYXRjaC0+Y2FsbG9jKG5fZWxlbWVudHMsIGVsZW1fc2l6ZSk7CitleHRlcm4gIkMiIHN0cnVjdCBtYWxsaW5mbyBtYWxsaW5mbygpIHsKKyAgcmV0dXJuIF9fbGliY19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxpbmZvKCk7CiB9CiAKLWV4dGVybiAiQyIgdm9pZCogcmVhbGxvYyh2b2lkKiBvbGRNZW0sIHNpemVfdCBieXRlcykgewotICAgIHJldHVybiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoLT5yZWFsbG9jKG9sZE1lbSwgYnl0ZXMpOwotfQotCi1leHRlcm4gIkMiIHZvaWQqIG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgewotICAgIHJldHVybiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoLT5tZW1hbGlnbihhbGlnbm1lbnQsIGJ5dGVzKTsKK2V4dGVybiAiQyIgdm9pZCogbWFsbG9jKHNpemVfdCBieXRlcykgeworICByZXR1cm4gX19saWJjX21hbGxvY19kaXNwYXRjaC0+bWFsbG9jKGJ5dGVzKTsKIH0KIAogZXh0ZXJuICJDIiBzaXplX3QgbWFsbG9jX3VzYWJsZV9zaXplKGNvbnN0IHZvaWQqIG1lbSkgewotICAgIHJldHVybiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2NfdXNhYmxlX3NpemUobWVtKTsKKyAgcmV0dXJuIF9fbGliY19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxvY191c2FibGVfc2l6ZShtZW0pOwogfQogCi0vKiBXZSBpbXBsZW1lbnQgbWFsbG9jIGRlYnVnZ2luZyBvbmx5IGluIGxpYmMuc28sIHNvIGNvZGUgYmVsb3cKLSAqIG11c3QgYmUgZXhjbHVkZWQgaWYgd2UgY29tcGlsZSB0aGlzIGZpbGUgZm9yIHN0YXRpYyBsaWJjLmEKLSAqLworZXh0ZXJuICJDIiB2b2lkKiBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKKyAgcmV0dXJuIF9fbGliY19tYWxsb2NfZGlzcGF0Y2gtPm1lbWFsaWduKGFsaWdubWVudCwgYnl0ZXMpOworfQorCitleHRlcm4gIkMiIGludCBwb3NpeF9tZW1hbGlnbih2b2lkKiogbWVtcHRyLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gX19saWJjX21hbGxvY19kaXNwYXRjaC0+cG9zaXhfbWVtYWxpZ24obWVtcHRyLCBhbGlnbm1lbnQsIHNpemUpOworfQorCisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorZXh0ZXJuICJDIiB2b2lkKiBwdmFsbG9jKHNpemVfdCBieXRlcykgeworICByZXR1cm4gX19saWJjX21hbGxvY19kaXNwYXRjaC0+cHZhbGxvYyhieXRlcyk7Cit9CisjZW5kaWYKKworZXh0ZXJuICJDIiB2b2lkKiByZWFsbG9jKHZvaWQqIG9sZE1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIHJldHVybiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoLT5yZWFsbG9jKG9sZE1lbSwgYnl0ZXMpOworfQorCisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorZXh0ZXJuICJDIiB2b2lkKiB2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHJldHVybiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoLT52YWxsb2MoYnl0ZXMpOworfQorI2VuZGlmCisKKy8vIFdlIGltcGxlbWVudCBtYWxsb2MgZGVidWdnaW5nIG9ubHkgaW4gbGliYy5zbywgc28gdGhlIGNvZGUgYmVsb3cKKy8vIG11c3QgYmUgZXhjbHVkZWQgaWYgd2UgY29tcGlsZSB0aGlzIGZpbGUgZm9yIHN0YXRpYyBsaWJjLmEKICNpZm5kZWYgTElCQ19TVEFUSUMKICNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KICNpbmNsdWRlIDxkbGZjbi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKIAotLyogVGFibGUgZm9yIGRpc3BhdGNoaW5nIG1hbGxvYyBjYWxscywgZGVwZW5kaW5nIG9uIGVudmlyb25tZW50LiAqLwotc3RhdGljIE1hbGxvY0RlYnVnIGdNYWxsb2NVc2UgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKSA9IHsKLSAgICBkbG1hbGxvYywgZGxmcmVlLCBkbGNhbGxvYywgZGxyZWFsbG9jLCBkbG1lbWFsaWduLCBkbG1hbGxvY191c2FibGVfc2l6ZQotfTsKLQotZXh0ZXJuIGNvbnN0IGNoYXIqIF9fcHJvZ25hbWU7Ci0KLS8qIEhhbmRsZSB0byBzaGFyZWQgbGlicmFyeSB3aGVyZSBhY3R1YWwgbWVtb3J5IGFsbG9jYXRpb24gaXMgaW1wbGVtZW50ZWQuCi0gKiBUaGlzIGxpYnJhcnkgaXMgbG9hZGVkIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBjYWxscyBhcmUgcmVkaXJlY3RlZCB0aGVyZQotICogd2hlbiBsaWJjLmRlYnVnLm1hbGxvYyBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb250YWlucyB2YWx1ZSBvdGhlciB0aGFuCi0gKiB6ZXJvOgotICogMSAgLSBGb3IgbWVtb3J5IGxlYWsgZGV0ZWN0aW9ucy4KLSAqIDUgIC0gRm9yIGZpbGxpbmcgYWxsb2NhdGVkIC8gZnJlZWQgbWVtb3J5IHdpdGggcGF0dGVybnMgZGVmaW5lZCBieQotICogICAgICBDSEtfU0VOVElORUxfVkFMVUUsIGFuZCBDSEtfRklMTF9GUkVFIG1hY3Jvcy4KLSAqIDEwIC0gRm9yIGFkZGluZyBwcmUtLCBhbmQgcG9zdC0gYWxsb2NhdGlvbiBzdHVicyBpbiBvcmRlciB0byBkZXRlY3QKLSAqICAgICAgYnVmZmVyIG92ZXJydW5zLgotICogTm90ZSB0aGF0IGVtdWxhdG9yJ3MgbWVtb3J5IGFsbG9jYXRpb24gaW5zdHJ1bWVudGF0aW9uIGlzIG5vdCBjb250cm9sbGVkIGJ5Ci0gKiBsaWJjLmRlYnVnLm1hbGxvYyB2YWx1ZSwgYnV0IHJhdGhlciBieSBlbXVsYXRvciwgc3RhcnRlZCB3aXRoIC1tZW1jaGVjawotICogb3B0aW9uLiBOb3RlIGFsc28sIHRoYXQgaWYgZW11bGF0b3IgaGFzIHN0YXJ0ZWQgd2l0aCAtbWVtY2hlY2sgb3B0aW9uLAotICogZW11bGF0b3IncyBpbnN0cnVtZW50ZWQgbWVtb3J5IGFsbG9jYXRpb24gd2lsbCB0YWtlIG92ZXIgdmFsdWUgc2F2ZWQgaW4KLSAqIGxpYmMuZGVidWcubWFsbG9jLiBJbiBvdGhlciB3b3JkcywgaWYgZW11bGF0b3IgaGFzIHN0YXJ0ZWQgd2l0aCAtbWVtY2hlY2sKLSAqIG9wdGlvbiwgbGliYy5kZWJ1Zy5tYWxsb2MgdmFsdWUgaXMgaWdub3JlZC4KLSAqIEFjdHVhbCBmdW5jdGlvbmFsaXR5IGZvciBkZWJ1ZyBsZXZlbHMgMS0xMCBpcyBpbXBsZW1lbnRlZCBpbgotICogbGliY19tYWxsb2NfZGVidWdfbGVhay5zbywgd2hpbGUgZnVuY3Rpb25hbGl0eSBmb3IgZW11bHRvcidzIGluc3RydW1lbnRlZAotICogYWxsb2NhdGlvbnMgaXMgaW1wbGVtZW50ZWQgaW4gbGliY19tYWxsb2NfZGVidWdfcWVtdS5zbyBhbmQgY2FuIGJlIHJ1biBpbnNpZGUKLSAqIHRoZSBlbXVsYXRvciBvbmx5LgotICovCi1zdGF0aWMgdm9pZCogbGliY19tYWxsb2NfaW1wbF9oYW5kbGUgPSBOVUxMOwotCi0vKiBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgcHJvcGVydHkgbGliYy5kZWJ1Zy5tYWxsb2MuYmFja2xvZywKLSAqIHdoZW4gdGhlIHZhbHVlIG9mIGxpYmMuZGVidWcubWFsbG9jID0gMTAuICBJdCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZQotICogYmFja2xvZyB3ZSB1c2UgdG8gZGV0ZWN0IG11bHRpcGxlIGZyZWVzLiAgSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBzZXQsIHRoZQotICogYmFja2xvZyBsZW5ndGggZGVmYXVsdHMgdG8gQkFDS0xPR19ERUZBVUxUX0xFTi4KLSAqLwotdW5zaWduZWQgaW50IGdNYWxsb2NEZWJ1Z0JhY2tsb2c7Ci0jZGVmaW5lIEJBQ0tMT0dfREVGQVVMVF9MRU4gMTAwCi0KLS8qIFRoZSB2YWx1ZSBvZiBsaWJjLmRlYnVnLm1hbGxvYy4gKi8KLWludCBnTWFsbG9jRGVidWdMZXZlbDsKLQogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgogc3RhdGljIHZvaWQgSW5pdE1hbGxvY0Z1bmN0aW9uKHZvaWQqIG1hbGxvY19pbXBsX2hhbmRsZXIsIEZ1bmN0aW9uVHlwZSogZnVuYywgY29uc3QgY2hhciogcHJlZml4LCBjb25zdCBjaGFyKiBzdWZmaXgpIHsKLSAgICBjaGFyIHN5bWJvbFsxMjhdOwotICAgIHNucHJpbnRmKHN5bWJvbCwgc2l6ZW9mKHN5bWJvbCksICIlc18lcyIsIHByZWZpeCwgc3VmZml4KTsKLSAgICAqZnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihkbHN5bShtYWxsb2NfaW1wbF9oYW5kbGVyLCBzeW1ib2wpKTsKLSAgICBpZiAoKmZ1bmMgPT0gTlVMTCkgewotICAgICAgICBlcnJvcl9sb2coIiVzOiBkbHN5bShcIiVzXCIpIGZhaWxlZCIsIF9fcHJvZ25hbWUsIHN5bWJvbCk7Ci0gICAgfQorICBjaGFyIHN5bWJvbFsxMjhdOworICBzbnByaW50ZihzeW1ib2wsIHNpemVvZihzeW1ib2wpLCAiJXNfJXMiLCBwcmVmaXgsIHN1ZmZpeCk7CisgICpmdW5jID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KGRsc3ltKG1hbGxvY19pbXBsX2hhbmRsZXIsIHN5bWJvbCkpOworICBpZiAoKmZ1bmMgPT0gTlVMTCkgeworICAgIGVycm9yX2xvZygiJXM6IGRsc3ltKFwiJXNcIikgZmFpbGVkIiwgZ2V0cHJvZ25hbWUoKSwgc3ltYm9sKTsKKyAgfQogfQogCiBzdGF0aWMgdm9pZCBJbml0TWFsbG9jKHZvaWQqIG1hbGxvY19pbXBsX2hhbmRsZXIsIE1hbGxvY0RlYnVnKiB0YWJsZSwgY29uc3QgY2hhciogcHJlZml4KSB7Ci0gICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfSU5GTywgImxpYmMiLCAiJXM6IHVzaW5nIGxpYmMuZGVidWcubWFsbG9jICVkICglcylcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgX19wcm9nbmFtZSwgZ01hbGxvY0RlYnVnTGV2ZWwsIHByZWZpeCk7CisgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0lORk8sICJsaWJjIiwgIiVzOiB1c2luZyBsaWJjLmRlYnVnLm1hbGxvYyAlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgICBnZXRwcm9nbmFtZSgpLCBnX21hbGxvY19kZWJ1Z19sZXZlbCwgcHJlZml4KTsKIAotICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z01hbGxvYz4obWFsbG9jX2ltcGxfaGFuZGxlciwgJnRhYmxlLT5tYWxsb2MsIHByZWZpeCwgIm1hbGxvYyIpOwotICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z0ZyZWU+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+ZnJlZSwgcHJlZml4LCAiZnJlZSIpOwotICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z0NhbGxvYz4obWFsbG9jX2ltcGxfaGFuZGxlciwgJnRhYmxlLT5jYWxsb2MsIHByZWZpeCwgImNhbGxvYyIpOwotICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z1JlYWxsb2M+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+cmVhbGxvYywgcHJlZml4LCAicmVhbGxvYyIpOwotICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z01lbWFsaWduPihtYWxsb2NfaW1wbF9oYW5kbGVyLCAmdGFibGUtPm1lbWFsaWduLCBwcmVmaXgsICJtZW1hbGlnbiIpOwotICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z01hbGxvY1VzYWJsZVNpemU+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+bWFsbG9jX3VzYWJsZV9zaXplLCBwcmVmaXgsICJtYWxsb2NfdXNhYmxlX3NpemUiKTsKKyAgSW5pdE1hbGxvY0Z1bmN0aW9uPE1hbGxvY0RlYnVnQ2FsbG9jPihtYWxsb2NfaW1wbF9oYW5kbGVyLCAmdGFibGUtPmNhbGxvYywgcHJlZml4LCAiY2FsbG9jIik7CisgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z0ZyZWU+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+ZnJlZSwgcHJlZml4LCAiZnJlZSIpOworICBJbml0TWFsbG9jRnVuY3Rpb248TWFsbG9jRGVidWdNYWxsaW5mbz4obWFsbG9jX2ltcGxfaGFuZGxlciwgJnRhYmxlLT5tYWxsaW5mbywgcHJlZml4LCAibWFsbGluZm8iKTsKKyAgSW5pdE1hbGxvY0Z1bmN0aW9uPE1hbGxvY0RlYnVnTWFsbG9jPihtYWxsb2NfaW1wbF9oYW5kbGVyLCAmdGFibGUtPm1hbGxvYywgcHJlZml4LCAibWFsbG9jIik7CisgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z01hbGxvY1VzYWJsZVNpemU+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+bWFsbG9jX3VzYWJsZV9zaXplLCBwcmVmaXgsICJtYWxsb2NfdXNhYmxlX3NpemUiKTsKKyAgSW5pdE1hbGxvY0Z1bmN0aW9uPE1hbGxvY0RlYnVnTWVtYWxpZ24+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+bWVtYWxpZ24sIHByZWZpeCwgIm1lbWFsaWduIik7CisgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z1Bvc2l4TWVtYWxpZ24+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+cG9zaXhfbWVtYWxpZ24sIHByZWZpeCwgInBvc2l4X21lbWFsaWduIik7CisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorICBJbml0TWFsbG9jRnVuY3Rpb248TWFsbG9jRGVidWdQdmFsbG9jPihtYWxsb2NfaW1wbF9oYW5kbGVyLCAmdGFibGUtPnB2YWxsb2MsIHByZWZpeCwgInB2YWxsb2MiKTsKKyNlbmRpZgorICBJbml0TWFsbG9jRnVuY3Rpb248TWFsbG9jRGVidWdSZWFsbG9jPihtYWxsb2NfaW1wbF9oYW5kbGVyLCAmdGFibGUtPnJlYWxsb2MsIHByZWZpeCwgInJlYWxsb2MiKTsKKyNpZiBkZWZpbmVkKEhBVkVfREVQUkVDQVRFRF9NQUxMT0NfRlVOQ1MpCisgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z1ZhbGxvYz4obWFsbG9jX2ltcGxfaGFuZGxlciwgJnRhYmxlLT52YWxsb2MsIHByZWZpeCwgInZhbGxvYyIpOworI2VuZGlmCiB9CiAKLS8qIEluaXRpYWxpemVzIG1lbW9yeSBhbGxvY2F0aW9uIGZyYW1ld29yayBvbmNlIHBlciBwcm9jZXNzLiAqLworLy8gSW5pdGlhbGl6ZXMgbWVtb3J5IGFsbG9jYXRpb24gZnJhbWV3b3JrIG9uY2UgcGVyIHByb2Nlc3MuCiBzdGF0aWMgdm9pZCBtYWxsb2NfaW5pdF9pbXBsKCkgewotICAgIGNvbnN0IGNoYXIqIHNvX25hbWUgPSBOVUxMOwotICAgIE1hbGxvY0RlYnVnSW5pdCBtYWxsb2NfZGVidWdfaW5pdGlhbGl6ZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IHFlbXVfcnVubmluZyA9IDA7Ci0gICAgdW5zaWduZWQgaW50IG1lbWNoZWNrX2VuYWJsZWQgPSAwOwotICAgIGNoYXIgZW52W1BST1BfVkFMVUVfTUFYXTsKLSAgICBjaGFyIG1lbWNoZWNrX3RyYWNpbmdbUFJPUF9WQUxVRV9NQVhdOwotICAgIGNoYXIgZGVidWdfcHJvZ3JhbVtQUk9QX1ZBTFVFX01BWF07CisgIGNvbnN0IGNoYXIqIHNvX25hbWUgPSBOVUxMOworICBNYWxsb2NEZWJ1Z0luaXQgbWFsbG9jX2RlYnVnX2luaXRpYWxpemUgPSBOVUxMOworICB1bnNpZ25lZCBpbnQgcWVtdV9ydW5uaW5nID0gMDsKKyAgdW5zaWduZWQgaW50IG1lbWNoZWNrX2VuYWJsZWQgPSAwOworICBjaGFyIGVudltQUk9QX1ZBTFVFX01BWF07CisgIGNoYXIgbWVtY2hlY2tfdHJhY2luZ1tQUk9QX1ZBTFVFX01BWF07CisgIGNoYXIgZGVidWdfcHJvZ3JhbVtQUk9QX1ZBTFVFX01BWF07CiAKLSAgICAvKiBHZXQgY3VzdG9tIG1hbGxvYyBkZWJ1ZyBsZXZlbC4gTm90ZSB0aGF0IGVtdWxhdG9yIHN0YXJ0ZWQgd2l0aAotICAgICAqIG1lbW9yeSBjaGVja2luZyBvcHRpb24gd2lsbCBoYXZlIHByaW9yaXR5IG92ZXIgZGVidWcgbGV2ZWwgc2V0IGluCi0gICAgICogbGliYy5kZWJ1Zy5tYWxsb2Mgc3lzdGVtIHByb3BlcnR5LiAqLwotICAgIGlmIChfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoInJvLmtlcm5lbC5xZW11IiwgZW52KSAmJiBhdG9pKGVudikpIHsKLSAgICAgICAgcWVtdV9ydW5uaW5nID0gMTsKLSAgICAgICAgaWYgKF9fc3lzdGVtX3Byb3BlcnR5X2dldCgicm8ua2VybmVsLm1lbWNoZWNrIiwgbWVtY2hlY2tfdHJhY2luZykpIHsKLSAgICAgICAgICAgIGlmIChtZW1jaGVja190cmFjaW5nWzBdICE9ICcwJykgewotICAgICAgICAgICAgICAgIC8vIEVtdWxhdG9yIGhhcyBzdGFydGVkIHdpdGggbWVtb3J5IHRyYWNpbmcgZW5hYmxlZC4gRW5mb3JjZSBpdC4KLSAgICAgICAgICAgICAgICBnTWFsbG9jRGVidWdMZXZlbCA9IDIwOwotICAgICAgICAgICAgICAgIG1lbWNoZWNrX2VuYWJsZWQgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgIC8vIEdldCBjdXN0b20gbWFsbG9jIGRlYnVnIGxldmVsLiBOb3RlIHRoYXQgZW11bGF0b3Igc3RhcnRlZCB3aXRoCisgIC8vIG1lbW9yeSBjaGVja2luZyBvcHRpb24gd2lsbCBoYXZlIHByaW9yaXR5IG92ZXIgZGVidWcgbGV2ZWwgc2V0IGluCisgIC8vIGxpYmMuZGVidWcubWFsbG9jIHN5c3RlbSBwcm9wZXJ0eS4KKyAgaWYgKF9fc3lzdGVtX3Byb3BlcnR5X2dldCgicm8ua2VybmVsLnFlbXUiLCBlbnYpICYmIGF0b2koZW52KSkgeworICAgIHFlbXVfcnVubmluZyA9IDE7CisgICAgaWYgKF9fc3lzdGVtX3Byb3BlcnR5X2dldCgicm8ua2VybmVsLm1lbWNoZWNrIiwgbWVtY2hlY2tfdHJhY2luZykpIHsKKyAgICAgIGlmIChtZW1jaGVja190cmFjaW5nWzBdICE9ICcwJykgeworICAgICAgICAvLyBFbXVsYXRvciBoYXMgc3RhcnRlZCB3aXRoIG1lbW9yeSB0cmFjaW5nIGVuYWJsZWQuIEVuZm9yY2UgaXQuCisgICAgICAgIGdfbWFsbG9jX2RlYnVnX2xldmVsID0gMjA7CisgICAgICAgIG1lbWNoZWNrX2VuYWJsZWQgPSAxOworICAgICAgfQogICAgIH0KKyAgfQogCi0gICAgLyogSWYgZGVidWcgbGV2ZWwgaGFzIG5vdCBiZWVuIHNldCBieSBtZW1jaGVjayBvcHRpb24gaW4gdGhlIGVtdWxhdG9yLAotICAgICAqIGxldHMgZ3JhYiBpdCBmcm9tIGxpYmMuZGVidWcubWFsbG9jIHN5c3RlbSBwcm9wZXJ0eS4gKi8KLSAgICBpZiAoZ01hbGxvY0RlYnVnTGV2ZWwgPT0gMCAmJiBfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoImxpYmMuZGVidWcubWFsbG9jIiwgZW52KSkgewotICAgICAgICBnTWFsbG9jRGVidWdMZXZlbCA9IGF0b2koZW52KTsKKyAgLy8gSWYgZGVidWcgbGV2ZWwgaGFzIG5vdCBiZWVuIHNldCBieSBtZW1jaGVjayBvcHRpb24gaW4gdGhlIGVtdWxhdG9yLAorICAvLyBsZXRzIGdyYWIgaXQgZnJvbSBsaWJjLmRlYnVnLm1hbGxvYyBzeXN0ZW0gcHJvcGVydHkuCisgIGlmIChnX21hbGxvY19kZWJ1Z19sZXZlbCA9PSAwICYmIF9fc3lzdGVtX3Byb3BlcnR5X2dldCgibGliYy5kZWJ1Zy5tYWxsb2MiLCBlbnYpKSB7CisgICAgZ19tYWxsb2NfZGVidWdfbGV2ZWwgPSBhdG9pKGVudik7CisgIH0KKworICAvLyBEZWJ1ZyBsZXZlbCAwIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIHVzZSBkZWZhdWx0IGFsbG9jYXRpb24gcm91dGluZXMuCisgIGlmIChnX21hbGxvY19kZWJ1Z19sZXZlbCA9PSAwKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gSWYgbGliYy5kZWJ1Zy5tYWxsb2MucHJvZ3JhbSBpcyBzZXQgYW5kIGlzIG5vdCBhIHN1YnN0cmluZyBvZiBwcm9nbmFtZSwKKyAgLy8gdGhlbiBleGl0LgorICBpZiAoX19zeXN0ZW1fcHJvcGVydHlfZ2V0KCJsaWJjLmRlYnVnLm1hbGxvYy5wcm9ncmFtIiwgZGVidWdfcHJvZ3JhbSkpIHsKKyAgICBpZiAoIXN0cnN0cihnZXRwcm9nbmFtZSgpLCBkZWJ1Z19wcm9ncmFtKSkgeworICAgICAgcmV0dXJuOwogICAgIH0KKyAgfQogCi0gICAgLyogRGVidWcgbGV2ZWwgMCBtZWFucyB0aGF0IHdlIHNob3VsZCB1c2UgZGx4eHggYWxsb2NhdGlvbgotICAgICAqIHJvdXRpbmVzIChkZWZhdWx0KS4gKi8KLSAgICBpZiAoZ01hbGxvY0RlYnVnTGV2ZWwgPT0gMCkgeworICAvLyBta3NoIGlzIHdheSB0b28gbGVha3kuIGh0dHA6Ly9iLzcyOTEyODcuCisgIGlmIChnX21hbGxvY19kZWJ1Z19sZXZlbCA+PSAxMCkgeworICAgIGlmIChzdHJjbXAoZ2V0cHJvZ25hbWUoKSwgInNoIikgPT0gMCB8fCBzdHJjbXAoZ2V0cHJvZ25hbWUoKSwgIi9zeXN0ZW0vYmluL3NoIikgPT0gMCkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIC8vIENob29zZSB0aGUgYXBwcm9wcmlhdGUgLnNvIGZvciB0aGUgcmVxdWVzdGVkIGRlYnVnIGxldmVsLgorICBzd2l0Y2ggKGdfbWFsbG9jX2RlYnVnX2xldmVsKSB7CisgICAgY2FzZSAxOgorICAgIGNhc2UgNToKKyAgICBjYXNlIDEwOgorICAgICAgc29fbmFtZSA9ICJsaWJjX21hbGxvY19kZWJ1Z19sZWFrLnNvIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjA6CisgICAgICAvLyBRdWljayBjaGVjazogZGVidWcgbGV2ZWwgMjAgY2FuIG9ubHkgYmUgaGFuZGxlZCBpbiBlbXVsYXRvci4KKyAgICAgIGlmICghcWVtdV9ydW5uaW5nKSB7CisgICAgICAgIGVycm9yX2xvZygiJXM6IERlYnVnIGxldmVsICVkIGNhbiBvbmx5IGJlIHNldCBpbiBlbXVsYXRvclxuIiwKKyAgICAgICAgICAgICAgICAgIGdldHByb2duYW1lKCksIGdfbWFsbG9jX2RlYnVnX2xldmVsKTsKICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8qIElmIGxpYmMuZGVidWcubWFsbG9jLnByb2dyYW0gaXMgc2V0IGFuZCBpcyBub3QgYSBzdWJzdHJpbmcgb2YgcHJvZ25hbWUsCi0gICAgICogdGhlbiBleGl0LgotICAgICAqLwotICAgIGlmIChfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoImxpYmMuZGVidWcubWFsbG9jLnByb2dyYW0iLCBkZWJ1Z19wcm9ncmFtKSkgewotICAgICAgICBpZiAoIXN0cnN0cihfX3Byb2duYW1lLCBkZWJ1Z19wcm9ncmFtKSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gbWtzaCBpcyB3YXkgdG9vIGxlYWt5LiBodHRwOi8vYi83MjkxMjg3LgotICAgIGlmIChnTWFsbG9jRGVidWdMZXZlbCA+PSAxMCkgewotICAgICAgICBpZiAoc3RyY21wKF9fcHJvZ25hbWUsICJzaCIpID09IDAgfHwgc3RyY21wKF9fcHJvZ25hbWUsICIvc3lzdGVtL2Jpbi9zaCIpID09IDApIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIENob29zZSB0aGUgYXBwcm9wcmlhdGUgLnNvIGZvciB0aGUgcmVxdWVzdGVkIGRlYnVnIGxldmVsLgotICAgIHN3aXRjaCAoZ01hbGxvY0RlYnVnTGV2ZWwpIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICBjYXNlIDU6Ci0gICAgICAgIGNhc2UgMTA6IHsKLSAgICAgICAgICAgIGNoYXIgZGVidWdfYmFja2xvZ1tQUk9QX1ZBTFVFX01BWF07Ci0gICAgICAgICAgICBpZiAoX19zeXN0ZW1fcHJvcGVydHlfZ2V0KCJsaWJjLmRlYnVnLm1hbGxvYy5iYWNrbG9nIiwgZGVidWdfYmFja2xvZykpIHsKLSAgICAgICAgICAgICAgICBnTWFsbG9jRGVidWdCYWNrbG9nID0gYXRvaShkZWJ1Z19iYWNrbG9nKTsKLSAgICAgICAgICAgICAgICBpbmZvX2xvZygiJXM6IHNldHRpbmcgYmFja2xvZyBsZW5ndGggdG8gJWRcbiIsIF9fcHJvZ25hbWUsIGdNYWxsb2NEZWJ1Z0JhY2tsb2cpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGdNYWxsb2NEZWJ1Z0JhY2tsb2cgPT0gMCkgewotICAgICAgICAgICAgICAgIGdNYWxsb2NEZWJ1Z0JhY2tsb2cgPSBCQUNLTE9HX0RFRkFVTFRfTEVOOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc29fbmFtZSA9ICIvc3lzdGVtL2xpYi9saWJjX21hbGxvY19kZWJ1Z19sZWFrLnNvIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgMjA6Ci0gICAgICAgICAgICAvLyBRdWljayBjaGVjazogZGVidWcgbGV2ZWwgMjAgY2FuIG9ubHkgYmUgaGFuZGxlZCBpbiBlbXVsYXRvci4KLSAgICAgICAgICAgIGlmICghcWVtdV9ydW5uaW5nKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3JfbG9nKCIlczogRGVidWcgbGV2ZWwgJWQgY2FuIG9ubHkgYmUgc2V0IGluIGVtdWxhdG9yXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Byb2duYW1lLCBnTWFsbG9jRGVidWdMZXZlbCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbWVtb3J5IGNoZWNraW5nIGhhcyBiZWVuIGVuYWJsZWQgaW4gZW11bGF0b3IuCi0gICAgICAgICAgICBpZiAoIW1lbWNoZWNrX2VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBlcnJvcl9sb2coIiVzOiBNZW1vcnkgY2hlY2tpbmcgaXMgbm90IGVuYWJsZWQgaW4gdGhlIGVtdWxhdG9yXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Byb2duYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzb19uYW1lID0gIi9zeXN0ZW0vbGliL2xpYmNfbWFsbG9jX2RlYnVnX3FlbXUuc28iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBlcnJvcl9sb2coIiVzOiBEZWJ1ZyBsZXZlbCAlZCBpcyB1bmtub3duXG4iLCBfX3Byb2duYW1lLCBnTWFsbG9jRGVidWdMZXZlbCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gTG9hZCAuc28gdGhhdCBpbXBsZW1lbnRzIHRoZSByZXF1aXJlZCBtYWxsb2MgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdHkuCi0gICAgdm9pZCogbWFsbG9jX2ltcGxfaGFuZGxlID0gZGxvcGVuKHNvX25hbWUsIFJUTERfTEFaWSk7Ci0gICAgaWYgKG1hbGxvY19pbXBsX2hhbmRsZSA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm9yX2xvZygiJXM6IE1pc3NpbmcgbW9kdWxlICVzIHJlcXVpcmVkIGZvciBtYWxsb2MgZGVidWcgbGV2ZWwgJWQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgIF9fcHJvZ25hbWUsIHNvX25hbWUsIGdNYWxsb2NEZWJ1Z0xldmVsLCBkbGVycm9yKCkpOworICAgICAgfQorICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbWVtb3J5IGNoZWNraW5nIGhhcyBiZWVuIGVuYWJsZWQgaW4gZW11bGF0b3IuCisgICAgICBpZiAoIW1lbWNoZWNrX2VuYWJsZWQpIHsKKyAgICAgICAgZXJyb3JfbG9nKCIlczogTWVtb3J5IGNoZWNraW5nIGlzIG5vdCBlbmFibGVkIGluIHRoZSBlbXVsYXRvclxuIiwgZ2V0cHJvZ25hbWUoKSk7CiAgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHNvX25hbWUgPSAibGliY19tYWxsb2NfZGVidWdfcWVtdS5zbyI7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZXJyb3JfbG9nKCIlczogRGVidWcgbGV2ZWwgJWQgaXMgdW5rbm93blxuIiwgZ2V0cHJvZ25hbWUoKSwgZ19tYWxsb2NfZGVidWdfbGV2ZWwpOworICAgICAgcmV0dXJuOworICB9CisKKyAgLy8gTG9hZCAuc28gdGhhdCBpbXBsZW1lbnRzIHRoZSByZXF1aXJlZCBtYWxsb2MgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdHkuCisgIHZvaWQqIG1hbGxvY19pbXBsX2hhbmRsZSA9IGRsb3Blbihzb19uYW1lLCBSVExEX0xBWlkpOworICBpZiAobWFsbG9jX2ltcGxfaGFuZGxlID09IE5VTEwpIHsKKyAgICBlcnJvcl9sb2coIiVzOiBNaXNzaW5nIG1vZHVsZSAlcyByZXF1aXJlZCBmb3IgbWFsbG9jIGRlYnVnIGxldmVsICVkOiAlcyIsCisgICAgICAgICAgICAgIGdldHByb2duYW1lKCksIHNvX25hbWUsIGdfbWFsbG9jX2RlYnVnX2xldmVsLCBkbGVycm9yKCkpOworICAgIHJldHVybjsKKyAgfQorCisgIC8vIEluaXRpYWxpemUgbWFsbG9jIGRlYnVnZ2luZyBpbiB0aGUgbG9hZGVkIG1vZHVsZS4KKyAgbWFsbG9jX2RlYnVnX2luaXRpYWxpemUgPSByZWludGVycHJldF9jYXN0PE1hbGxvY0RlYnVnSW5pdD4oZGxzeW0obWFsbG9jX2ltcGxfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFsbG9jX2RlYnVnX2luaXRpYWxpemUiKSk7CisgIGlmIChtYWxsb2NfZGVidWdfaW5pdGlhbGl6ZSA9PSBOVUxMKSB7CisgICAgZXJyb3JfbG9nKCIlczogSW5pdGlhbGl6YXRpb24gcm91dGluZSBpcyBub3QgZm91bmQgaW4gJXNcbiIsIGdldHByb2duYW1lKCksIHNvX25hbWUpOworICAgIGRsY2xvc2UobWFsbG9jX2ltcGxfaGFuZGxlKTsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKCFtYWxsb2NfZGVidWdfaW5pdGlhbGl6ZSgmZ19oYXNoX3RhYmxlLCAmX19saWJjX21hbGxvY19kZWZhdWx0X2Rpc3BhdGNoKSkgeworICAgIGRsY2xvc2UobWFsbG9jX2ltcGxfaGFuZGxlKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAoZ19tYWxsb2NfZGVidWdfbGV2ZWwgPT0gMjApIHsKKyAgICAvLyBGb3IgbWVtb3J5IGNoZWNrZXIgd2UgbmVlZCB0byBkbyBleHRyYSBpbml0aWFsaXphdGlvbi4KKyAgICB0eXBlZGVmIGludCAoKk1lbUNoZWNrSW5pdCkoaW50LCBjb25zdCBjaGFyKik7CisgICAgTWVtQ2hlY2tJbml0IG1lbWNoZWNrX2luaXRpYWxpemUgPQorICAgICAgcmVpbnRlcnByZXRfY2FzdDxNZW1DaGVja0luaXQ+KGRsc3ltKG1hbGxvY19pbXBsX2hhbmRsZSwgIm1lbWNoZWNrX2luaXRpYWxpemUiKSk7CisgICAgaWYgKG1lbWNoZWNrX2luaXRpYWxpemUgPT0gTlVMTCkgeworICAgICAgZXJyb3JfbG9nKCIlczogbWVtY2hlY2tfaW5pdGlhbGl6ZSByb3V0aW5lIGlzIG5vdCBmb3VuZCBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICBnZXRwcm9nbmFtZSgpLCBzb19uYW1lKTsKKyAgICAgIGRsY2xvc2UobWFsbG9jX2ltcGxfaGFuZGxlKTsKKyAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBJbml0aWFsaXplIG1hbGxvYyBkZWJ1Z2dpbmcgaW4gdGhlIGxvYWRlZCBtb2R1bGUuCi0gICAgbWFsbG9jX2RlYnVnX2luaXRpYWxpemUgPSByZWludGVycHJldF9jYXN0PE1hbGxvY0RlYnVnSW5pdD4oZGxzeW0obWFsbG9jX2ltcGxfaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWxsb2NfZGVidWdfaW5pdGlhbGl6ZSIpKTsKLSAgICBpZiAobWFsbG9jX2RlYnVnX2luaXRpYWxpemUgPT0gTlVMTCkgewotICAgICAgICBlcnJvcl9sb2coIiVzOiBJbml0aWFsaXphdGlvbiByb3V0aW5lIGlzIG5vdCBmb3VuZCBpbiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgIF9fcHJvZ25hbWUsIHNvX25hbWUpOwotICAgICAgICBkbGNsb3NlKG1hbGxvY19pbXBsX2hhbmRsZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAobWVtY2hlY2tfaW5pdGlhbGl6ZShNQUxMT0NfQUxJR05NRU5ULCBtZW1jaGVja190cmFjaW5nKSkgeworICAgICAgZGxjbG9zZShtYWxsb2NfaW1wbF9oYW5kbGUpOworICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobWFsbG9jX2RlYnVnX2luaXRpYWxpemUoKSA9PSAtMSkgewotICAgICAgICBkbGNsb3NlKG1hbGxvY19pbXBsX2hhbmRsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgIH0KIAotICAgIGlmIChnTWFsbG9jRGVidWdMZXZlbCA9PSAyMCkgewotICAgICAgICAvLyBGb3IgbWVtb3J5IGNoZWNrZXIgd2UgbmVlZCB0byBkbyBleHRyYSBpbml0aWFsaXphdGlvbi4KLSAgICAgICAgdHlwZWRlZiBpbnQgKCpNZW1DaGVja0luaXQpKGludCwgY29uc3QgY2hhciopOwotICAgICAgICBNZW1DaGVja0luaXQgbWVtY2hlY2tfaW5pdGlhbGl6ZSA9Ci0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PE1lbUNoZWNrSW5pdD4oZGxzeW0obWFsbG9jX2ltcGxfaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1jaGVja19pbml0aWFsaXplIikpOwotICAgICAgICBpZiAobWVtY2hlY2tfaW5pdGlhbGl6ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBlcnJvcl9sb2coIiVzOiBtZW1jaGVja19pbml0aWFsaXplIHJvdXRpbmUgaXMgbm90IGZvdW5kIGluICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgIF9fcHJvZ25hbWUsIHNvX25hbWUpOwotICAgICAgICAgICAgZGxjbG9zZShtYWxsb2NfaW1wbF9oYW5kbGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgIC8vIE5vIG5lZWQgdG8gaW5pdCB0aGUgZGlzcGF0Y2ggdGFibGUgYmVjYXVzZSB3ZSBjYW4gb25seSBnZXQKKyAgLy8gaGVyZSBpZiBkZWJ1ZyBsZXZlbCBpcyAxLCA1LCAxMCwgb3IgMjAuCisgIHN0YXRpYyBNYWxsb2NEZWJ1ZyBtYWxsb2NfZGlzcGF0Y2hfdGFibGUgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKTsKKyAgc3dpdGNoIChnX21hbGxvY19kZWJ1Z19sZXZlbCkgeworICAgIGNhc2UgMToKKyAgICAgIEluaXRNYWxsb2MobWFsbG9jX2ltcGxfaGFuZGxlLCAmbWFsbG9jX2Rpc3BhdGNoX3RhYmxlLCAibGVhayIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSA1OgorICAgICAgSW5pdE1hbGxvYyhtYWxsb2NfaW1wbF9oYW5kbGUsICZtYWxsb2NfZGlzcGF0Y2hfdGFibGUsICJmaWxsIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIDEwOgorICAgICAgSW5pdE1hbGxvYyhtYWxsb2NfaW1wbF9oYW5kbGUsICZtYWxsb2NfZGlzcGF0Y2hfdGFibGUsICJjaGsiKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjA6CisgICAgICBJbml0TWFsbG9jKG1hbGxvY19pbXBsX2hhbmRsZSwgJm1hbGxvY19kaXNwYXRjaF90YWJsZSwgInFlbXVfaW5zdHJ1bWVudGVkIik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KIAotICAgICAgICBpZiAobWVtY2hlY2tfaW5pdGlhbGl6ZShNQUxMT0NfQUxJR05NRU5ULCBtZW1jaGVja190cmFjaW5nKSkgewotICAgICAgICAgICAgZGxjbG9zZShtYWxsb2NfaW1wbF9oYW5kbGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICAvLyBJbml0aWFsaXplIG1hbGxvYyBkaXNwYXRjaCB0YWJsZSB3aXRoIGFwcHJvcHJpYXRlIHJvdXRpbmVzLgotICAgIHN3aXRjaCAoZ01hbGxvY0RlYnVnTGV2ZWwpIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgSW5pdE1hbGxvYyhtYWxsb2NfaW1wbF9oYW5kbGUsICZnTWFsbG9jVXNlLCAibGVhayIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIEluaXRNYWxsb2MobWFsbG9jX2ltcGxfaGFuZGxlLCAmZ01hbGxvY1VzZSwgImZpbGwiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDEwOgotICAgICAgICAgICAgSW5pdE1hbGxvYyhtYWxsb2NfaW1wbF9oYW5kbGUsICZnTWFsbG9jVXNlLCAiY2hrIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyMDoKLSAgICAgICAgICAgIEluaXRNYWxsb2MobWFsbG9jX2ltcGxfaGFuZGxlLCAmZ01hbGxvY1VzZSwgInFlbXVfaW5zdHJ1bWVudGVkIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSBkaXNwYXRjaCB0YWJsZSBpcyBpbml0aWFsaXplZAotICAgIGlmICgoZ01hbGxvY1VzZS5tYWxsb2MgPT0gTlVMTCkgfHwKLSAgICAgICAgKGdNYWxsb2NVc2UuZnJlZSA9PSBOVUxMKSB8fAotICAgICAgICAoZ01hbGxvY1VzZS5jYWxsb2MgPT0gTlVMTCkgfHwKLSAgICAgICAgKGdNYWxsb2NVc2UucmVhbGxvYyA9PSBOVUxMKSB8fAotICAgICAgICAoZ01hbGxvY1VzZS5tZW1hbGlnbiA9PSBOVUxMKSB8fAotICAgICAgICAoZ01hbGxvY1VzZS5tYWxsb2NfdXNhYmxlX3NpemUgPT0gTlVMTCkpIHsKLSAgICAgICAgZXJyb3JfbG9nKCIlczogc29tZSBzeW1ib2xzIGZvciBsaWJjLmRlYnVnLm1hbGxvYyBsZXZlbCAlZCB3ZXJlIG5vdCBmb3VuZCAoc2VlIGFib3ZlKSIsCi0gICAgICAgICAgICAgICAgICBfX3Byb2duYW1lLCBnTWFsbG9jRGVidWdMZXZlbCk7Ci0gICAgICAgIGRsY2xvc2UobWFsbG9jX2ltcGxfaGFuZGxlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoID0gJmdNYWxsb2NVc2U7Ci0gICAgICAgIGxpYmNfbWFsbG9jX2ltcGxfaGFuZGxlID0gbWFsbG9jX2ltcGxfaGFuZGxlOwotICAgIH0KKyAgLy8gTWFrZSBzdXJlIGRpc3BhdGNoIHRhYmxlIGlzIGluaXRpYWxpemVkCisgIGlmICgobWFsbG9jX2Rpc3BhdGNoX3RhYmxlLmNhbGxvYyA9PSBOVUxMKSB8fAorICAgICAgKG1hbGxvY19kaXNwYXRjaF90YWJsZS5mcmVlID09IE5VTEwpIHx8CisgICAgICAobWFsbG9jX2Rpc3BhdGNoX3RhYmxlLm1hbGxpbmZvID09IE5VTEwpIHx8CisgICAgICAobWFsbG9jX2Rpc3BhdGNoX3RhYmxlLm1hbGxvYyA9PSBOVUxMKSB8fAorICAgICAgKG1hbGxvY19kaXNwYXRjaF90YWJsZS5tYWxsb2NfdXNhYmxlX3NpemUgPT0gTlVMTCkgfHwKKyAgICAgIChtYWxsb2NfZGlzcGF0Y2hfdGFibGUubWVtYWxpZ24gPT0gTlVMTCkgfHwKKyAgICAgIChtYWxsb2NfZGlzcGF0Y2hfdGFibGUucG9zaXhfbWVtYWxpZ24gPT0gTlVMTCkgfHwKKyNpZiBkZWZpbmVkKEhBVkVfREVQUkVDQVRFRF9NQUxMT0NfRlVOQ1MpCisgICAgICAobWFsbG9jX2Rpc3BhdGNoX3RhYmxlLnB2YWxsb2MgPT0gTlVMTCkgfHwKKyNlbmRpZgorICAgICAgKG1hbGxvY19kaXNwYXRjaF90YWJsZS5yZWFsbG9jID09IE5VTEwpCisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorICAgICAgfHwgKG1hbGxvY19kaXNwYXRjaF90YWJsZS52YWxsb2MgPT0gTlVMTCkKKyNlbmRpZgorICAgICAgKSB7CisgICAgZXJyb3JfbG9nKCIlczogc29tZSBzeW1ib2xzIGZvciBsaWJjLmRlYnVnLm1hbGxvYyBsZXZlbCAlZCB3ZXJlIG5vdCBmb3VuZCAoc2VlIGFib3ZlKSIsCisgICAgICAgICAgICAgIGdldHByb2duYW1lKCksIGdfbWFsbG9jX2RlYnVnX2xldmVsKTsKKyAgICBkbGNsb3NlKG1hbGxvY19pbXBsX2hhbmRsZSk7CisgIH0gZWxzZSB7CisgICAgX19saWJjX21hbGxvY19kaXNwYXRjaCA9ICZtYWxsb2NfZGlzcGF0Y2hfdGFibGU7CisgICAgbGliY19tYWxsb2NfaW1wbF9oYW5kbGUgPSBtYWxsb2NfaW1wbF9oYW5kbGU7CisgIH0KIH0KIAogc3RhdGljIHZvaWQgbWFsbG9jX2ZpbmlfaW1wbCgpIHsKLSAgICAvLyBPdXIgQlNEIHN0ZGlvIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY2xvc2UgdGhlIHN0YW5kYXJkIHN0cmVhbXMsIGl0IG9ubHkgZmx1c2hlcyB0aGVtLgotICAgIC8vIEFuZCBpdCBkb2Vzbid0IGRvIHRoYXQgdW50aWwgaXRzIGF0ZXhpdCBoYW5kbGVyIChfY2xlYW51cCkgaXMgcnVuLCBhbmQgd2UgcnVuIGZpcnN0IQotICAgIC8vIEl0J3MgZ3JlYXQgdGhhdCBvdGhlciB1bmNsb3NlZCBGSUxFKnMgc2hvdyB1cCBhcyBtYWxsb2MgbGVha3MsIGJ1dCB3ZSBuZWVkIHRvIG1hbnVhbGx5Ci0gICAgLy8gY2xlYW4gdXAgdGhlIHN0YW5kYXJkIHN0cmVhbXMgb3Vyc2VsdmVzLgotICAgIGZjbG9zZShzdGRpbik7Ci0gICAgZmNsb3NlKHN0ZG91dCk7Ci0gICAgZmNsb3NlKHN0ZGVycik7CisgIC8vIE91ciBCU0Qgc3RkaW8gaW1wbGVtZW50YXRpb24gZG9lc24ndCBjbG9zZSB0aGUgc3RhbmRhcmQgc3RyZWFtcywgaXQgb25seSBmbHVzaGVzIHRoZW0uCisgIC8vIEFuZCBpdCBkb2Vzbid0IGRvIHRoYXQgdW50aWwgaXRzIGF0ZXhpdCBoYW5kbGVyIGlzIHJ1biwgYW5kIHdlIHJ1biBmaXJzdCEKKyAgLy8gSXQncyBncmVhdCB0aGF0IG90aGVyIHVuY2xvc2VkIEZJTEUqcyBzaG93IHVwIGFzIG1hbGxvYyBsZWFrcywgYnV0IHdlIG5lZWQgdG8gbWFudWFsbHkKKyAgLy8gY2xlYW4gdXAgdGhlIHN0YW5kYXJkIHN0cmVhbXMgb3Vyc2VsdmVzLgorICBmY2xvc2Uoc3RkaW4pOworICBmY2xvc2Uoc3Rkb3V0KTsKKyAgZmNsb3NlKHN0ZGVycik7CiAKLSAgICBpZiAobGliY19tYWxsb2NfaW1wbF9oYW5kbGUgIT0gTlVMTCkgewotICAgICAgICBNYWxsb2NEZWJ1Z0ZpbmkgbWFsbG9jX2RlYnVnX2ZpbmFsaXplID0KLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TWFsbG9jRGVidWdGaW5pPihkbHN5bShsaWJjX21hbGxvY19pbXBsX2hhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFsbG9jX2RlYnVnX2ZpbmFsaXplIikpOwotICAgICAgICBpZiAobWFsbG9jX2RlYnVnX2ZpbmFsaXplICE9IE5VTEwpIHsKLSAgICAgICAgICAgIG1hbGxvY19kZWJ1Z19maW5hbGl6ZSgpOwotICAgICAgICB9CisgIGlmIChsaWJjX21hbGxvY19pbXBsX2hhbmRsZSAhPSBOVUxMKSB7CisgICAgTWFsbG9jRGVidWdGaW5pIG1hbGxvY19kZWJ1Z19maW5hbGl6ZSA9CisgICAgICByZWludGVycHJldF9jYXN0PE1hbGxvY0RlYnVnRmluaT4oZGxzeW0obGliY19tYWxsb2NfaW1wbF9oYW5kbGUsICJtYWxsb2NfZGVidWdfZmluYWxpemUiKSk7CisgICAgaWYgKG1hbGxvY19kZWJ1Z19maW5hbGl6ZSAhPSBOVUxMKSB7CisgICAgICBtYWxsb2NfZGVidWdfZmluYWxpemUoZ19tYWxsb2NfZGVidWdfbGV2ZWwpOwogICAgIH0KKyAgfQogfQogCi1zdGF0aWMgcHRocmVhZF9vbmNlX3QgIG1hbGxvY19pbml0X29uY2VfY3RsID0gUFRIUkVBRF9PTkNFX0lOSVQ7Ci1zdGF0aWMgcHRocmVhZF9vbmNlX3QgIG1hbGxvY19maW5pX29uY2VfY3RsID0gUFRIUkVBRF9PTkNFX0lOSVQ7Ci0KICNlbmRpZiAgLy8gIUxJQkNfU1RBVElDCi0jZW5kaWYgIC8vIFVTRV9ETF9QUkVGSVgKIAotLyogSW5pdGlhbGl6ZXMgbWVtb3J5IGFsbG9jYXRpb24gZnJhbWV3b3JrLgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIF9fbGliY19pbml0IHJvdXRpbmVzIGltcGxlbWVudGVkCi0gKiBpbiBsaWJjX2luaXRfc3RhdGljLmMgYW5kIGxpYmNfaW5pdF9keW5hbWljLmMgZmlsZXMuCi0gKi8KKy8vIEluaXRpYWxpemVzIG1lbW9yeSBhbGxvY2F0aW9uIGZyYW1ld29yay4KKy8vIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZnJvbSBfX2xpYmNfaW5pdCByb3V0aW5lcyBpbXBsZW1lbnRlZAorLy8gaW4gbGliY19pbml0X3N0YXRpYy5jIGFuZCBsaWJjX2luaXRfZHluYW1pYy5jIGZpbGVzLgogZXh0ZXJuICJDIiBfX0xJQkNfSElEREVOX18gdm9pZCBtYWxsb2NfZGVidWdfaW5pdCgpIHsKLSAgICAvKiBXZSBuZWVkIHRvIGluaXRpYWxpemUgbWFsbG9jIGlmZiB3ZSBpbXBsZW1lbnQgaGVyZSBjdXN0b20KLSAgICAgKiBtYWxsb2Mgcm91dGluZXMgKGkuZS4gVVNFX0RMX1BSRUZJWCBpcyBkZWZpbmVkKSBmb3IgbGliYy5zbyAqLwotI2lmIGRlZmluZWQoVVNFX0RMX1BSRUZJWCkgJiYgIWRlZmluZWQoTElCQ19TVEFUSUMpCi0gICAgaWYgKHB0aHJlYWRfb25jZSgmbWFsbG9jX2luaXRfb25jZV9jdGwsIG1hbGxvY19pbml0X2ltcGwpKSB7Ci0gICAgICAgIGVycm9yX2xvZygiVW5hYmxlIHRvIGluaXRpYWxpemUgbWFsbG9jX2RlYnVnIGNvbXBvbmVudC4iKTsKLSAgICB9Ci0jZW5kaWYgIC8vIFVTRV9ETF9QUkVGSVggJiYgIUxJQkNfU1RBVElDCisjaWYgIWRlZmluZWQoTElCQ19TVEFUSUMpCisgIHN0YXRpYyBwdGhyZWFkX29uY2VfdCBtYWxsb2NfaW5pdF9vbmNlX2N0bCA9IFBUSFJFQURfT05DRV9JTklUOworICBpZiAocHRocmVhZF9vbmNlKCZtYWxsb2NfaW5pdF9vbmNlX2N0bCwgbWFsbG9jX2luaXRfaW1wbCkpIHsKKyAgICBlcnJvcl9sb2coIlVuYWJsZSB0byBpbml0aWFsaXplIG1hbGxvY19kZWJ1ZyBjb21wb25lbnQuIik7CisgIH0KKyNlbmRpZiAgLy8gIUxJQkNfU1RBVElDCiB9CiAKIGV4dGVybiAiQyIgX19MSUJDX0hJRERFTl9fIHZvaWQgbWFsbG9jX2RlYnVnX2ZpbmkoKSB7Ci0gICAgLyogV2UgbmVlZCB0byBmaW5hbGl6ZSBtYWxsb2MgaWZmIHdlIGltcGxlbWVudCBoZXJlIGN1c3RvbQotICAgICAqIG1hbGxvYyByb3V0aW5lcyAoaS5lLiBVU0VfRExfUFJFRklYIGlzIGRlZmluZWQpIGZvciBsaWJjLnNvICovCi0jaWYgZGVmaW5lZChVU0VfRExfUFJFRklYKSAmJiAhZGVmaW5lZChMSUJDX1NUQVRJQykKLSAgICBpZiAocHRocmVhZF9vbmNlKCZtYWxsb2NfZmluaV9vbmNlX2N0bCwgbWFsbG9jX2ZpbmlfaW1wbCkpIHsKLSAgICAgICAgZXJyb3JfbG9nKCJVbmFibGUgdG8gZmluYWxpemUgbWFsbG9jX2RlYnVnIGNvbXBvbmVudC4iKTsKLSAgICB9Ci0jZW5kaWYgIC8vIFVTRV9ETF9QUkVGSVggJiYgIUxJQkNfU1RBVElDCisjaWYgIWRlZmluZWQoTElCQ19TVEFUSUMpCisgIHN0YXRpYyBwdGhyZWFkX29uY2VfdCBtYWxsb2NfZmluaV9vbmNlX2N0bCA9IFBUSFJFQURfT05DRV9JTklUOworICBpZiAocHRocmVhZF9vbmNlKCZtYWxsb2NfZmluaV9vbmNlX2N0bCwgbWFsbG9jX2ZpbmlfaW1wbCkpIHsKKyAgICBlcnJvcl9sb2coIlVuYWJsZSB0byBmaW5hbGl6ZSBtYWxsb2NfZGVidWcgY29tcG9uZW50LiIpOworICB9CisjZW5kaWYgIC8vICFMSUJDX1NUQVRJQwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5oIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5oCmluZGV4IDI4YmUwNDIuLjVjNzNkYTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19jb21tb24uaAorKysgYi9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfY29tbW9uLmgKQEAgLTMzLDggKzMzLDExIEBACiAjaWZuZGVmIE1BTExPQ19ERUJVR19DT01NT05fSAogI2RlZmluZSBNQUxMT0NfREVCVUdfQ09NTU9OX0gKIAorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KIAorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2NvbmZpZy5oIgogI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCiAKICNkZWZpbmUgSEFTSFRBQkxFX1NJWkUgICAgICAxNTQzCkBAIC00Myw5ICs0Niw3IEBACiAjZGVmaW5lIFNJWkVfRkxBR19aWUdPVEVfQ0hJTEQgICgxPDwzMSkKICNkZWZpbmUgU0laRV9GTEFHX01BU0sgICAgICAgICAgKFNJWkVfRkxBR19aWUdPVEVfQ0hJTEQpCiAKLSNkZWZpbmUgTUFYX1NJWkVfVCAgICAgICAgICAgKH4oc2l6ZV90KTApCi0KLS8vIFRoaXMgbXVzdCBtYXRjaCB0aGUgYWxpZ25tZW50IHVzZWQgYnkgZGxtYWxsb2MuCisvLyBUaGlzIG11c3QgbWF0Y2ggdGhlIGFsaWdubWVudCB1c2VkIGJ5IHRoZSBtYWxsb2MgaW1wbGVtZW50YXRpb24uCiAjaWZuZGVmIE1BTExPQ19BTElHTk1FTlQKICNkZWZpbmUgTUFMTE9DX0FMSUdOTUVOVCAoKHNpemVfdCkoMiAqIHNpemVvZih2b2lkICopKSkKICNlbmRpZgpAQCAtNjYsNDAgKzY3LDQ2IEBACiB9OwogCiBzdHJ1Y3QgSGFzaFRhYmxlIHsKKyAgICBwdGhyZWFkX211dGV4X3QgbG9jazsKICAgICBzaXplX3QgY291bnQ7CiAgICAgSGFzaEVudHJ5KiBzbG90c1tIQVNIVEFCTEVfU0laRV07CiB9OwogCiAvKiBFbnRyeSBpbiBtYWxsb2MgZGlzcGF0Y2ggdGFibGUuICovCi10eXBlZGVmIHZvaWQqICgqTWFsbG9jRGVidWdNYWxsb2MpKHNpemVfdCk7Ci10eXBlZGVmIHZvaWQgKCpNYWxsb2NEZWJ1Z0ZyZWUpKHZvaWQqKTsKIHR5cGVkZWYgdm9pZCogKCpNYWxsb2NEZWJ1Z0NhbGxvYykoc2l6ZV90LCBzaXplX3QpOwotdHlwZWRlZiB2b2lkKiAoKk1hbGxvY0RlYnVnUmVhbGxvYykodm9pZCosIHNpemVfdCk7Ci10eXBlZGVmIHZvaWQqICgqTWFsbG9jRGVidWdNZW1hbGlnbikoc2l6ZV90LCBzaXplX3QpOwordHlwZWRlZiB2b2lkICgqTWFsbG9jRGVidWdGcmVlKSh2b2lkKik7Cit0eXBlZGVmIHN0cnVjdCBtYWxsaW5mbyAoKk1hbGxvY0RlYnVnTWFsbGluZm8pKCk7Cit0eXBlZGVmIHZvaWQqICgqTWFsbG9jRGVidWdNYWxsb2MpKHNpemVfdCk7CiB0eXBlZGVmIHNpemVfdCAoKk1hbGxvY0RlYnVnTWFsbG9jVXNhYmxlU2l6ZSkoY29uc3Qgdm9pZCopOwordHlwZWRlZiB2b2lkKiAoKk1hbGxvY0RlYnVnTWVtYWxpZ24pKHNpemVfdCwgc2l6ZV90KTsKK3R5cGVkZWYgaW50ICgqTWFsbG9jRGVidWdQb3NpeE1lbWFsaWduKSh2b2lkKiosIHNpemVfdCwgc2l6ZV90KTsKKyNpZiBkZWZpbmVkKEhBVkVfREVQUkVDQVRFRF9NQUxMT0NfRlVOQ1MpCit0eXBlZGVmIHZvaWQqICgqTWFsbG9jRGVidWdQdmFsbG9jKShzaXplX3QpOworI2VuZGlmCit0eXBlZGVmIHZvaWQqICgqTWFsbG9jRGVidWdSZWFsbG9jKSh2b2lkKiwgc2l6ZV90KTsKKyNpZiBkZWZpbmVkKEhBVkVfREVQUkVDQVRFRF9NQUxMT0NfRlVOQ1MpCit0eXBlZGVmIHZvaWQqICgqTWFsbG9jRGVidWdWYWxsb2MpKHNpemVfdCk7CisjZW5kaWYKKwogc3RydWN0IE1hbGxvY0RlYnVnIHsKLSAgTWFsbG9jRGVidWdNYWxsb2MgbWFsbG9jOwotICBNYWxsb2NEZWJ1Z0ZyZWUgZnJlZTsKICAgTWFsbG9jRGVidWdDYWxsb2MgY2FsbG9jOwotICBNYWxsb2NEZWJ1Z1JlYWxsb2MgcmVhbGxvYzsKLSAgTWFsbG9jRGVidWdNZW1hbGlnbiBtZW1hbGlnbjsKKyAgTWFsbG9jRGVidWdGcmVlIGZyZWU7CisgIE1hbGxvY0RlYnVnTWFsbGluZm8gbWFsbGluZm87CisgIE1hbGxvY0RlYnVnTWFsbG9jIG1hbGxvYzsKICAgTWFsbG9jRGVidWdNYWxsb2NVc2FibGVTaXplIG1hbGxvY191c2FibGVfc2l6ZTsKKyAgTWFsbG9jRGVidWdNZW1hbGlnbiBtZW1hbGlnbjsKKyAgTWFsbG9jRGVidWdQb3NpeE1lbWFsaWduIHBvc2l4X21lbWFsaWduOworI2lmIGRlZmluZWQoSEFWRV9ERVBSRUNBVEVEX01BTExPQ19GVU5DUykKKyAgTWFsbG9jRGVidWdQdmFsbG9jIHB2YWxsb2M7CisjZW5kaWYKKyAgTWFsbG9jRGVidWdSZWFsbG9jIHJlYWxsb2M7CisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorICBNYWxsb2NEZWJ1Z1ZhbGxvYyB2YWxsb2M7CisjZW5kaWYKIH07CiAKLS8qIE1hbGxvYyBkZWJ1Z2dpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGZpbmFsaXphdGlvbiByb3V0aW5lcy4KLSAqCi0gKiBUaGVzZSByb3V0aW5lcyBtdXN0IGJlIGltcGxlbWVudGVkIGluIC5zbyBtb2R1bGVzIHRoYXQgaW1wbGVtZW50IG1hbGxvYwotICogZGVidWdnaW5nLiBUaGUgYXJlIGlzIGNhbGxlZCBvbmNlIHBlciBwcm9jZXNzIGZyb20gbWFsbG9jX2luaXRfaW1wbCBhbmQKLSAqIG1hbGxvY19maW5pX2ltcGwgcmVzcGVjdGl2ZWx5LgotICoKLSAqIFRoZXkgYXJlIGltcGxlbWVudGVkIGluIGJpb25pYy9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfY29tbW9uLmMgd2hlbiBtYWxsb2MKLSAqIGRlYnVnZ2luZyBnZXRzIGluaXRpYWxpemVkIGZvciB0aGUgcHJvY2Vzcy4KLSAqCi0gKiBNYWxsb2NEZWJ1Z0luaXQgcmV0dXJuczoKLSAqICAgIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KLSAqLwotdHlwZWRlZiBpbnQgKCpNYWxsb2NEZWJ1Z0luaXQpKCk7Ci10eXBlZGVmIHZvaWQgKCpNYWxsb2NEZWJ1Z0ZpbmkpKCk7Cit0eXBlZGVmIGJvb2wgKCpNYWxsb2NEZWJ1Z0luaXQpKEhhc2hUYWJsZSosIGNvbnN0IE1hbGxvY0RlYnVnKik7Cit0eXBlZGVmIHZvaWQgKCpNYWxsb2NEZWJ1Z0ZpbmkpKGludCk7CiAKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBsb2cgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfZGlzYWJsZS5oIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2Rpc2FibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTAzMTI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2Rpc2FibGUuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTUFMTE9DX0RFQlVHX0RJU0FCTEVfSAorI2RlZmluZSBNQUxMT0NfREVCVUdfRElTQUJMRV9ICisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19tYWNyb3MuaCIKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFVzZWQgdG8gZGlzYWJsZSB0aGUgZGVidWcgYWxsb2NhdGlvbiBjYWxscy4KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitleHRlcm4gcHRocmVhZF9rZXlfdCBnX2RlYnVnX2NhbGxzX2Rpc2FibGVkOworCitzdGF0aWMgaW5saW5lIGJvb2wgRGVidWdDYWxsc0Rpc2FibGVkKCkgeworICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyhnX2RlYnVnX2NhbGxzX2Rpc2FibGVkKSAhPSBOVUxMOworfQorCitjbGFzcyBTY29wZWREaXNhYmxlRGVidWdDYWxscyB7CisgcHVibGljOgorICBTY29wZWREaXNhYmxlRGVidWdDYWxscygpIDogZGlzYWJsZWRfKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgaWYgKCFkaXNhYmxlZF8pIHsKKyAgICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMoZ19kZWJ1Z19jYWxsc19kaXNhYmxlZCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4oMSkpOworICAgIH0KKyAgfQorICB+U2NvcGVkRGlzYWJsZURlYnVnQ2FsbHMoKSB7CisgICAgaWYgKCFkaXNhYmxlZF8pIHsKKyAgICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMoZ19kZWJ1Z19jYWxsc19kaXNhYmxlZCwgTlVMTCk7CisgICAgfQorICB9CisKKyBwcml2YXRlOgorICBib29sIGRpc2FibGVkXzsKKworICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU2NvcGVkRGlzYWJsZURlYnVnQ2FsbHMpOworfTsKKworI2VuZGlmICAvLyBNQUxMT0NfREVCVUdfRElTQUJMRV9ICmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfbGVhay5jcHAgYi9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfbGVhay5jcHAKaW5kZXggMzM5N2RlZi4uZGYwZjk5NyAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2xlYWsuY3BwCisrKyBiL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19sZWFrLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KQEAgLTQ2LDkgKzQ3LDExIEBACiAjaW5jbHVkZSA8dW53aW5kLmg+CiAKICNpbmNsdWRlICJkZWJ1Z19zdGFja3RyYWNlLmgiCi0jaW5jbHVkZSAiZGxtYWxsb2MuaCIKKyNpbmNsdWRlICJtYWxsb2NfZGVidWdfYmFja3RyYWNlLmgiCiAjaW5jbHVkZSAibWFsbG9jX2RlYnVnX2NvbW1vbi5oIgorI2luY2x1ZGUgIm1hbGxvY19kZWJ1Z19kaXNhYmxlLmgiCiAKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19tYWNyb3MuaCIKICNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgogI2luY2x1ZGUgInByaXZhdGUvU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmgiCiAKQEAgLTU5LDEwICs2Miw5IEBACiAjZXJyb3IgTUFMTE9DX0xFQUtfQ0hFQ0sgaXMgbm90IGRlZmluZWQuCiAjZW5kaWYgIC8vICFNQUxMT0NfTEVBS19DSEVDSwogCi0vLyBHbG9iYWwgdmFyaWFibGVzIGRlZmluZWQgaW4gbWFsbG9jX2RlYnVnX2NvbW1vbi5jCiBleHRlcm4gaW50IGdNYWxsb2NMZWFrWnlnb3RlQ2hpbGQ7Ci1leHRlcm4gcHRocmVhZF9tdXRleF90IGdBbGxvY2F0aW9uc011dGV4OwotZXh0ZXJuIEhhc2hUYWJsZSBnSGFzaFRhYmxlOworZXh0ZXJuIEhhc2hUYWJsZSogZ19oYXNoX3RhYmxlOworZXh0ZXJuIGNvbnN0IE1hbGxvY0RlYnVnKiBnX21hbGxvY19kaXNwYXRjaDsKIAogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIHN0YWNrIHRyYWNlIGZ1bmN0aW9ucwpAQCAtMTM4LDcxICsxNDAsNjcgQEAKICAgICAgICAgc2l6ZSB8PSBTSVpFX0ZMQUdfWllHT1RFX0NISUxEOwogICAgIH0KIAotICAgIEhhc2hFbnRyeSogZW50cnkgPSBmaW5kX2VudHJ5KCZnSGFzaFRhYmxlLCBzbG90LCBiYWNrdHJhY2UsIG51bUVudHJpZXMsIHNpemUpOworICAgIEhhc2hFbnRyeSogZW50cnkgPSBmaW5kX2VudHJ5KGdfaGFzaF90YWJsZSwgc2xvdCwgYmFja3RyYWNlLCBudW1FbnRyaWVzLCBzaXplKTsKIAogICAgIGlmIChlbnRyeSAhPSBOVUxMKSB7CiAgICAgICAgIGVudHJ5LT5hbGxvY2F0aW9ucysrOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBlbnRyeQotICAgICAgICBlbnRyeSA9IHN0YXRpY19jYXN0PEhhc2hFbnRyeSo+KGRsbWFsbG9jKHNpemVvZihIYXNoRW50cnkpICsgbnVtRW50cmllcypzaXplb2YodWludHB0cl90KSkpOworICAgICAgICBlbnRyeSA9IHN0YXRpY19jYXN0PEhhc2hFbnRyeSo+KGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2Moc2l6ZW9mKEhhc2hFbnRyeSkgKyBudW1FbnRyaWVzKnNpemVvZih1aW50cHRyX3QpKSk7CiAgICAgICAgIGlmICghZW50cnkpIHsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGVudHJ5LT5hbGxvY2F0aW9ucyA9IDE7CiAgICAgICAgIGVudHJ5LT5zbG90ID0gc2xvdDsKICAgICAgICAgZW50cnktPnByZXYgPSBOVUxMOwotICAgICAgICBlbnRyeS0+bmV4dCA9IGdIYXNoVGFibGUuc2xvdHNbc2xvdF07CisgICAgICAgIGVudHJ5LT5uZXh0ID0gZ19oYXNoX3RhYmxlLT5zbG90c1tzbG90XTsKICAgICAgICAgZW50cnktPm51bUVudHJpZXMgPSBudW1FbnRyaWVzOwogICAgICAgICBlbnRyeS0+c2l6ZSA9IHNpemU7CiAKICAgICAgICAgbWVtY3B5KGVudHJ5LT5iYWNrdHJhY2UsIGJhY2t0cmFjZSwgbnVtRW50cmllcyAqIHNpemVvZih1aW50cHRyX3QpKTsKIAotICAgICAgICBnSGFzaFRhYmxlLnNsb3RzW3Nsb3RdID0gZW50cnk7CisgICAgICAgIGdfaGFzaF90YWJsZS0+c2xvdHNbc2xvdF0gPSBlbnRyeTsKIAogICAgICAgICBpZiAoZW50cnktPm5leHQgIT0gTlVMTCkgewogICAgICAgICAgICAgZW50cnktPm5leHQtPnByZXYgPSBlbnRyeTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIHdlIGp1c3QgYWRkZWQgYW4gZW50cnksIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBoYXNodGFibGUKLSAgICAgICAgZ0hhc2hUYWJsZS5jb3VudCsrOworICAgICAgICBnX2hhc2hfdGFibGUtPmNvdW50Kys7CiAgICAgfQogCiAgICAgcmV0dXJuIGVudHJ5OwogfQogCiBzdGF0aWMgaW50IGlzX3ZhbGlkX2VudHJ5KEhhc2hFbnRyeSogZW50cnkpIHsKLSAgICBpZiAoZW50cnkgIT0gTlVMTCkgewotICAgICAgICBpbnQgaTsKLSAgICAgICAgZm9yIChpID0gMCA7IGkgPCBIQVNIVEFCTEVfU0laRSA7IGkrKykgewotICAgICAgICAgICAgSGFzaEVudHJ5KiBlMSA9IGdIYXNoVGFibGUuc2xvdHNbaV07Ci0KLSAgICAgICAgICAgIHdoaWxlIChlMSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGUxID09IGVudHJ5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGUxID0gZTEtPm5leHQ7Ci0gICAgICAgICAgICB9CisgIGlmIChlbnRyeSAhPSBOVUxMKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBIQVNIVEFCTEVfU0laRTsgKytpKSB7CisgICAgICBIYXNoRW50cnkqIGUxID0gZ19oYXNoX3RhYmxlLT5zbG90c1tpXTsKKyAgICAgIHdoaWxlIChlMSAhPSBOVUxMKSB7CisgICAgICAgIGlmIChlMSA9PSBlbnRyeSkgeworICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CisgICAgICAgIGUxID0gZTEtPm5leHQ7CisgICAgICB9CiAgICAgfQotCi0gICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbW92ZV9lbnRyeShIYXNoRW50cnkqIGVudHJ5KSB7Ci0gICAgSGFzaEVudHJ5KiBwcmV2ID0gZW50cnktPnByZXY7Ci0gICAgSGFzaEVudHJ5KiBuZXh0ID0gZW50cnktPm5leHQ7CisgIEhhc2hFbnRyeSogcHJldiA9IGVudHJ5LT5wcmV2OworICBIYXNoRW50cnkqIG5leHQgPSBlbnRyeS0+bmV4dDsKIAotICAgIGlmIChwcmV2ICE9IE5VTEwpIGVudHJ5LT5wcmV2LT5uZXh0ID0gbmV4dDsKLSAgICBpZiAobmV4dCAhPSBOVUxMKSBlbnRyeS0+bmV4dC0+cHJldiA9IHByZXY7CisgIGlmIChwcmV2ICE9IE5VTEwpIGVudHJ5LT5wcmV2LT5uZXh0ID0gbmV4dDsKKyAgaWYgKG5leHQgIT0gTlVMTCkgZW50cnktPm5leHQtPnByZXYgPSBwcmV2OwogCi0gICAgaWYgKHByZXYgPT0gTlVMTCkgewotICAgICAgICAvLyB3ZSBhcmUgdGhlIGhlYWQgb2YgdGhlIGxpc3QuIHNldCB0aGUgaGVhZCB0byBiZSBuZXh0Ci0gICAgICAgIGdIYXNoVGFibGUuc2xvdHNbZW50cnktPnNsb3RdID0gZW50cnktPm5leHQ7Ci0gICAgfQorICBpZiAocHJldiA9PSBOVUxMKSB7CisgICAgLy8gd2UgYXJlIHRoZSBoZWFkIG9mIHRoZSBsaXN0LiBzZXQgdGhlIGhlYWQgdG8gYmUgbmV4dAorICAgIGdfaGFzaF90YWJsZS0+c2xvdHNbZW50cnktPnNsb3RdID0gZW50cnktPm5leHQ7CisgIH0KIAotICAgIC8vIHdlIGp1c3QgcmVtb3ZlZCBhbmQgZW50cnksIGRlY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBoYXNodGFibGUKLSAgICBnSGFzaFRhYmxlLmNvdW50LS07CisgIC8vIHdlIGp1c3QgcmVtb3ZlZCBhbmQgZW50cnksIGRlY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBoYXNodGFibGUKKyAgZ19oYXNoX3RhYmxlLT5jb3VudC0tOwogfQogCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjEzLDExICsyMTEsMTEgQEAKICNkZWZpbmUgQ0hLX1NFTlRJTkVMX1ZBTFVFICAgICAgMHhlYgogCiBleHRlcm4gIkMiIHZvaWQqIGZpbGxfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKSB7Ci0gICAgcmV0dXJuIGRsY2FsbG9jKG5fZWxlbWVudHMsIGVsZW1fc2l6ZSk7CisgICAgcmV0dXJuIGdfbWFsbG9jX2Rpc3BhdGNoLT5jYWxsb2Mobl9lbGVtZW50cywgZWxlbV9zaXplKTsKIH0KIAogZXh0ZXJuICJDIiB2b2lkKiBmaWxsX21hbGxvYyhzaXplX3QgYnl0ZXMpIHsKLSAgICB2b2lkKiBidWZmZXIgPSBkbG1hbGxvYyhieXRlcyk7CisgICAgdm9pZCogYnVmZmVyID0gZ19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxvYyhieXRlcyk7CiAgICAgaWYgKGJ1ZmZlcikgewogICAgICAgICBtZW1zZXQoYnVmZmVyLCBDSEtfU0VOVElORUxfVkFMVUUsIGJ5dGVzKTsKICAgICB9CkBAIC0yMjUsMTcgKzIyMywxNyBAQAogfQogCiBleHRlcm4gIkMiIHZvaWQgZmlsbF9mcmVlKHZvaWQqIG1lbSkgewotICAgIHNpemVfdCBieXRlcyA9IGRsbWFsbG9jX3VzYWJsZV9zaXplKG1lbSk7CisgICAgc2l6ZV90IGJ5dGVzID0gZ19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxvY191c2FibGVfc2l6ZShtZW0pOwogICAgIG1lbXNldChtZW0sIENIS19GSUxMX0ZSRUUsIGJ5dGVzKTsKLSAgICBkbGZyZWUobWVtKTsKKyAgICBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShtZW0pOwogfQogCiBleHRlcm4gIkMiIHZvaWQqIGZpbGxfcmVhbGxvYyh2b2lkKiBtZW0sIHNpemVfdCBieXRlcykgewotICAgIHNpemVfdCBvbGRTaXplID0gZGxtYWxsb2NfdXNhYmxlX3NpemUobWVtKTsKLSAgICB2b2lkKiBuZXdNZW0gPSBkbHJlYWxsb2MobWVtLCBieXRlcyk7CisgICAgc2l6ZV90IG9sZFNpemUgPSBnX21hbGxvY19kaXNwYXRjaC0+bWFsbG9jX3VzYWJsZV9zaXplKG1lbSk7CisgICAgdm9pZCogbmV3TWVtID0gZ19tYWxsb2NfZGlzcGF0Y2gtPnJlYWxsb2MobWVtLCBieXRlcyk7CiAgICAgaWYgKG5ld01lbSkgewogICAgICAgICAvLyBJZiB0aGlzIGlzIGxhcmdlciB0aGFuIGJlZm9yZSwgZmlsbCB0aGUgZXh0cmEgd2l0aCBvdXIgcGF0dGVybi4KLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBkbG1hbGxvY191c2FibGVfc2l6ZShuZXdNZW0pOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2NfdXNhYmxlX3NpemUobmV3TWVtKTsKICAgICAgICAgaWYgKG5ld1NpemUgPiBvbGRTaXplKSB7CiAgICAgICAgICAgICBtZW1zZXQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5ld01lbSkrb2xkU2l6ZSksIENIS19GSUxMX0ZSRUUsIG5ld1NpemUtb2xkU2l6ZSk7CiAgICAgICAgIH0KQEAgLTI0NCw3ICsyNDIsNyBAQAogfQogCiBleHRlcm4gIkMiIHZvaWQqIGZpbGxfbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7Ci0gICAgdm9pZCogYnVmZmVyID0gZGxtZW1hbGlnbihhbGlnbm1lbnQsIGJ5dGVzKTsKKyAgICB2b2lkKiBidWZmZXIgPSBnX21hbGxvY19kaXNwYXRjaC0+bWVtYWxpZ24oYWxpZ25tZW50LCBieXRlcyk7CiAgICAgaWYgKGJ1ZmZlcikgewogICAgICAgICBtZW1zZXQoYnVmZmVyLCBDSEtfU0VOVElORUxfVkFMVUUsIGJ5dGVzKTsKICAgICB9CkBAIC0yNTQsOSArMjUyLDM4IEBACiBleHRlcm4gIkMiIHNpemVfdCBmaWxsX21hbGxvY191c2FibGVfc2l6ZShjb25zdCB2b2lkKiBtZW0pIHsKICAgICAvLyBTaW5jZSB3ZSBkaWRuJ3QgYWxsb2NhdGUgZXh0cmEgYnl0ZXMgYmVmb3JlIG9yIGFmdGVyLCB3ZSBjYW4KICAgICAvLyByZXBvcnQgdGhlIG5vcm1hbCB1c2FibGUgc2l6ZSBoZXJlLgotICAgIHJldHVybiBkbG1hbGxvY191c2FibGVfc2l6ZShtZW0pOworICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+bWFsbG9jX3VzYWJsZV9zaXplKG1lbSk7CiB9CiAKK2V4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZvIGZpbGxfbWFsbGluZm8oKSB7CisgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+bWFsbGluZm8oKTsKK30KKworZXh0ZXJuICJDIiBpbnQgZmlsbF9wb3NpeF9tZW1hbGlnbih2b2lkKiogbWVtcHRyLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgeworICBpZiAoIXBvd2Vyb2YyKGFsaWdubWVudCkpIHsKKyAgICByZXR1cm4gRUlOVkFMOworICB9CisgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAqbWVtcHRyID0gZmlsbF9tZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOworICBlcnJubyA9IHNhdmVkX2Vycm5vOworICByZXR1cm4gKCptZW1wdHIgIT0gTlVMTCkgPyAwIDogRU5PTUVNOworfQorCisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorZXh0ZXJuICJDIiB2b2lkKiBmaWxsX3B2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHNpemVfdCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisgIHNpemVfdCBzaXplID0gQklPTklDX0FMSUdOKGJ5dGVzLCBwYWdlc2l6ZSk7CisgIGlmIChzaXplIDwgYnl0ZXMpIHsgLy8gT3ZlcmZsb3cKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICByZXR1cm4gZmlsbF9tZW1hbGlnbihwYWdlc2l6ZSwgc2l6ZSk7Cit9CisKK2V4dGVybiAiQyIgdm9pZCogZmlsbF92YWxsb2Moc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIGZpbGxfbWVtYWxpZ24oZ2V0cGFnZXNpemUoKSwgc2l6ZSk7Cit9CisjZW5kaWYKKwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIG1hbGxvYyBsZWFrIGZ1bmN0aW9ucwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTI2NCw2ICsyOTEsMTAgQEAKIHN0YXRpYyB1aW50MzJfdCBNRU1BTElHTl9HVUFSRCAgICAgID0gMHhBMUE0MTUyMDsKIAogZXh0ZXJuICJDIiB2b2lkKiBsZWFrX21hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgICBpZiAoRGVidWdDYWxsc0Rpc2FibGVkKCkpIHsKKyAgICAgICAgcmV0dXJuIGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2MoYnl0ZXMpOworICAgIH0KKwogICAgIC8vIGFsbG9jYXRlIGVub3VnaCBzcGFjZSBpbmZyb250IG9mIHRoZSBhbGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBwb2ludGVyIGZvcgogICAgIC8vIHRoZSBhbGxvYyBzdHJ1Y3R1cmUuIFRoaXMgd2lsbCBtYWtpbmcgZnJlZSdpbmcgdGhlIHN0cnVjdGVyIHJlYWxseSBmYXN0IQogCkBAIC0yNzIsMTUgKzMwMywxNiBAQAogCiAgICAgc2l6ZV90IHNpemUgPSBieXRlcyArIHNpemVvZihBbGxvY2F0aW9uRW50cnkpOwogICAgIGlmIChzaXplIDwgYnl0ZXMpIHsgLy8gT3ZlcmZsb3cuCisgICAgICAgIGVycm5vID0gRU5PTUVNOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICB2b2lkKiBiYXNlID0gZGxtYWxsb2Moc2l6ZSk7CisgICAgdm9pZCogYmFzZSA9IGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2Moc2l6ZSk7CiAgICAgaWYgKGJhc2UgIT0gTlVMTCkgewotICAgICAgICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnQWxsb2NhdGlvbnNNdXRleCk7CisgICAgICAgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdfaGFzaF90YWJsZS0+bG9jayk7CiAKICAgICAgICAgdWludHB0cl90IGJhY2t0cmFjZVtCQUNLVFJBQ0VfU0laRV07Ci0gICAgICAgIHNpemVfdCBudW1FbnRyaWVzID0gZ2V0X2JhY2t0cmFjZShiYWNrdHJhY2UsIEJBQ0tUUkFDRV9TSVpFKTsKKyAgICAgICAgc2l6ZV90IG51bUVudHJpZXMgPSBHRVRfQkFDS1RSQUNFKGJhY2t0cmFjZSwgQkFDS1RSQUNFX1NJWkUpOwogCiAgICAgICAgIEFsbG9jYXRpb25FbnRyeSogaGVhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxBbGxvY2F0aW9uRW50cnkqPihiYXNlKTsKICAgICAgICAgaGVhZGVyLT5lbnRyeSA9IHJlY29yZF9iYWNrdHJhY2UoYmFja3RyYWNlLCBudW1FbnRyaWVzLCBieXRlcyk7CkBAIC0yOTUsNDMgKzMyNyw1NCBAQAogfQogCiBleHRlcm4gIkMiIHZvaWQgbGVha19mcmVlKHZvaWQqIG1lbSkgewotICAgIGlmIChtZW0gIT0gTlVMTCkgewotICAgICAgICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnQWxsb2NhdGlvbnNNdXRleCk7CisgIGlmIChEZWJ1Z0NhbGxzRGlzYWJsZWQoKSkgeworICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShtZW0pOworICB9CiAKLSAgICAgICAgLy8gY2hlY2sgdGhlIGd1YXJkIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZAotICAgICAgICBBbGxvY2F0aW9uRW50cnkqIGhlYWRlciA9IHRvX2hlYWRlcihtZW0pOworICBpZiAobWVtID09IE5VTEwpIHsKKyAgICByZXR1cm47CisgIH0KIAotICAgICAgICBpZiAoaGVhZGVyLT5ndWFyZCAhPSBHVUFSRCkgewotICAgICAgICAgICAgLy8gY291bGQgYmUgYSBtZW1hbGlnbmVkIGJsb2NrCi0gICAgICAgICAgICBpZiAoaGVhZGVyLT5ndWFyZCA9PSBNRU1BTElHTl9HVUFSRCkgewotICAgICAgICAgICAgICAgIC8vIEZvciBtZW1hbGlnbmVkIGJsb2NrcywgaGVhZGVyLT5lbnRyeSBwb2ludHMgdG8gdGhlIG1lbW9yeQotICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlZCB0aHJvdWdoIGxlYWtfbWFsbG9jLgotICAgICAgICAgICAgICAgIGhlYWRlciA9IHRvX2hlYWRlcihoZWFkZXItPmVudHJ5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnX2hhc2hfdGFibGUtPmxvY2spOwogCi0gICAgICAgIGlmIChoZWFkZXItPmd1YXJkID09IEdVQVJEIHx8IGlzX3ZhbGlkX2VudHJ5KGhlYWRlci0+ZW50cnkpKSB7Ci0gICAgICAgICAgICAvLyBkZWNyZW1lbnQgdGhlIGFsbG9jYXRpb25zCi0gICAgICAgICAgICBIYXNoRW50cnkqIGVudHJ5ID0gaGVhZGVyLT5lbnRyeTsKLSAgICAgICAgICAgIGVudHJ5LT5hbGxvY2F0aW9ucy0tOwotICAgICAgICAgICAgaWYgKGVudHJ5LT5hbGxvY2F0aW9ucyA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlX2VudHJ5KGVudHJ5KTsKLSAgICAgICAgICAgICAgICBkbGZyZWUoZW50cnkpOwotICAgICAgICAgICAgfQorICAvLyBjaGVjayB0aGUgZ3VhcmQgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkCisgIEFsbG9jYXRpb25FbnRyeSogaGVhZGVyID0gdG9faGVhZGVyKG1lbSk7CiAKLSAgICAgICAgICAgIC8vIG5vdyBmcmVlIHRoZSBtZW1vcnkhCi0gICAgICAgICAgICBkbGZyZWUoaGVhZGVyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlYnVnX2xvZygiV0FSTklORyBiYWQgaGVhZGVyIGd1YXJkOiAnMHgleCchIGFuZCBpbnZhbGlkIGVudHJ5OiAlcFxuIiwKLSAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT5ndWFyZCwgaGVhZGVyLT5lbnRyeSk7Ci0gICAgICAgIH0KKyAgaWYgKGhlYWRlci0+Z3VhcmQgIT0gR1VBUkQpIHsKKyAgICAvLyBjb3VsZCBiZSBhIG1lbWFsaWduZWQgYmxvY2sKKyAgICBpZiAoaGVhZGVyLT5ndWFyZCA9PSBNRU1BTElHTl9HVUFSRCkgeworICAgICAgLy8gRm9yIG1lbWFsaWduZWQgYmxvY2tzLCBoZWFkZXItPmVudHJ5IHBvaW50cyB0byB0aGUgbWVtb3J5CisgICAgICAvLyBhbGxvY2F0ZWQgdGhyb3VnaCBsZWFrX21hbGxvYy4KKyAgICAgIGhlYWRlciA9IHRvX2hlYWRlcihoZWFkZXItPmVudHJ5KTsKICAgICB9CisgIH0KKworICBpZiAoaGVhZGVyLT5ndWFyZCA9PSBHVUFSRCB8fCBpc192YWxpZF9lbnRyeShoZWFkZXItPmVudHJ5KSkgeworICAgIC8vIGRlY3JlbWVudCB0aGUgYWxsb2NhdGlvbnMKKyAgICBIYXNoRW50cnkqIGVudHJ5ID0gaGVhZGVyLT5lbnRyeTsKKyAgICBlbnRyeS0+YWxsb2NhdGlvbnMtLTsKKyAgICBpZiAoZW50cnktPmFsbG9jYXRpb25zIDw9IDApIHsKKyAgICAgIHJlbW92ZV9lbnRyeShlbnRyeSk7CisgICAgICBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShlbnRyeSk7CisgICAgfQorCisgICAgLy8gbm93IGZyZWUgdGhlIG1lbW9yeSEKKyAgICBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShoZWFkZXIpOworICB9IGVsc2UgeworICAgIGRlYnVnX2xvZygiV0FSTklORyBiYWQgaGVhZGVyIGd1YXJkOiAnMHgleCchIGFuZCBpbnZhbGlkIGVudHJ5OiAlcFxuIiwKKyAgICAgICAgICAgICAgaGVhZGVyLT5ndWFyZCwgaGVhZGVyLT5lbnRyeSk7CisgIH0KIH0KIAogZXh0ZXJuICJDIiB2b2lkKiBsZWFrX2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkgewotICAgIC8qIEZhaWwgb24gb3ZlcmZsb3cgLSBqdXN0IHRvIGJlIHNhZmUgZXZlbiB0aG91Z2ggdGhpcyBjb2RlIHJ1bnMgb25seQotICAgICAqIHdpdGhpbiB0aGUgZGVidWdnaW5nIEMgbGlicmFyeSwgbm90IHRoZSBwcm9kdWN0aW9uIG9uZSAqLwotICAgIGlmIChuX2VsZW1lbnRzICYmIE1BWF9TSVpFX1QgLyBuX2VsZW1lbnRzIDwgZWxlbV9zaXplKSB7CisgICAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+Y2FsbG9jKG5fZWxlbWVudHMsIGVsZW1fc2l6ZSk7CisgICAgfQorCisgICAgLy8gRmFpbCBvbiBvdmVyZmxvdyAtIGp1c3QgdG8gYmUgc2FmZSBldmVuIHRob3VnaCB0aGlzIGNvZGUgcnVucyBvbmx5CisgICAgLy8gd2l0aGluIHRoZSBkZWJ1Z2dpbmcgQyBsaWJyYXJ5LCBub3QgdGhlIHByb2R1Y3Rpb24gb25lLgorICAgIGlmIChuX2VsZW1lbnRzICYmIFNJWkVfTUFYIC8gbl9lbGVtZW50cyA8IGVsZW1fc2l6ZSkgeworICAgICAgICBlcnJubyA9IEVOT01FTTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHNpemVfdCBzaXplID0gbl9lbGVtZW50cyAqIGVsZW1fc2l6ZTsKQEAgLTM0Miw3ICszODUsNDEgQEAKICAgICByZXR1cm4gcHRyOwogfQogCitleHRlcm4gIkMiIHNpemVfdCBsZWFrX21hbGxvY191c2FibGVfc2l6ZShjb25zdCB2b2lkKiBtZW0pIHsKKyAgICBpZiAoRGVidWdDYWxsc0Rpc2FibGVkKCkpIHsKKyAgICAgICAgcmV0dXJuIGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2NfdXNhYmxlX3NpemUobWVtKTsKKyAgICB9CisKKyAgICBpZiAobWVtID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gQ2hlY2sgdGhlIGd1YXJkIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC4KKyAgICBjb25zdCBBbGxvY2F0aW9uRW50cnkqIGhlYWRlciA9IGNvbnN0X3RvX2hlYWRlcihtZW0pOworCisgICAgaWYgKGhlYWRlci0+Z3VhcmQgPT0gTUVNQUxJR05fR1VBUkQpIHsKKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIG1lbWFsaWduJ2QgcG9pbnRlciwgdGhlbiBncmFiIHRoZSBoZWFkZXIgZnJvbQorICAgICAgICAvLyBlbnRyeS4KKyAgICAgICAgaGVhZGVyID0gY29uc3RfdG9faGVhZGVyKGhlYWRlci0+ZW50cnkpOworICAgIH0gZWxzZSBpZiAoaGVhZGVyLT5ndWFyZCAhPSBHVUFSRCkgeworICAgICAgICBkZWJ1Z19sb2coIldBUk5JTkcgYmFkIGhlYWRlciBndWFyZDogJzB4JXgnISBhbmQgaW52YWxpZCBlbnRyeTogJXBcbiIsCisgICAgICAgICAgICAgICAgICBoZWFkZXItPmd1YXJkLCBoZWFkZXItPmVudHJ5KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc2l6ZV90IHJldCA9IGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2NfdXNhYmxlX3NpemUoaGVhZGVyKTsKKyAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgLy8gVGhlIHVzYWJsZSBhcmVhIHN0YXJ0cyBhdCAnbWVtJyBhbmQgc3RvcHMgYXQgJ2hlYWRlcityZXQnLgorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhlYWRlcikgKyByZXQgLSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obWVtKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIGV4dGVybiAiQyIgdm9pZCogbGVha19yZWFsbG9jKHZvaWQqIG9sZE1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgICAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+cmVhbGxvYyhvbGRNZW0sIGJ5dGVzKTsKKyAgICB9CisKICAgICBpZiAob2xkTWVtID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIGxlYWtfbWFsbG9jKGJ5dGVzKTsKICAgICB9CkBAIC0zNTUsMjkgKzQzMiwzNCBAQAogICAgIH0gZWxzZSBpZiAoaGVhZGVyLT5ndWFyZCAhPSBHVUFSRCkgewogICAgICAgICBkZWJ1Z19sb2coIldBUk5JTkcgYmFkIGhlYWRlciBndWFyZDogJzB4JXgnISBhbmQgaW52YWxpZCBlbnRyeTogJXBcbiIsCiAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT5ndWFyZCwgaGVhZGVyLT5lbnRyeSk7CisgICAgICAgIGVycm5vID0gRU5PTUVNOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBuZXdNZW0gPSBsZWFrX21hbGxvYyhieXRlcyk7CiAgICAgaWYgKG5ld01lbSAhPSBOVUxMKSB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gaGVhZGVyLT5lbnRyeS0+c2l6ZSAmIH5TSVpFX0ZMQUdfTUFTSzsKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBsZWFrX21hbGxvY191c2FibGVfc2l6ZShvbGRNZW0pOwogICAgICAgICBzaXplX3QgY29weVNpemUgPSAob2xkU2l6ZSA8PSBieXRlcykgPyBvbGRTaXplIDogYnl0ZXM7CiAgICAgICAgIG1lbWNweShuZXdNZW0sIG9sZE1lbSwgY29weVNpemUpOworICAgICAgICBsZWFrX2ZyZWUob2xkTWVtKTsKICAgICB9Ci0gICAgbGVha19mcmVlKG9sZE1lbSk7CiAKICAgICByZXR1cm4gbmV3TWVtOwogfQogCiBleHRlcm4gIkMiIHZvaWQqIGxlYWtfbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgICAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+bWVtYWxpZ24oYWxpZ25tZW50LCBieXRlcyk7CisgICAgfQorCiAgICAgLy8gd2UgY2FuIGp1c3QgdXNlIG1hbGxvYwogICAgIGlmIChhbGlnbm1lbnQgPD0gTUFMTE9DX0FMSUdOTUVOVCkgewogICAgICAgICByZXR1cm4gbGVha19tYWxsb2MoYnl0ZXMpOwogICAgIH0KIAogICAgIC8vIG5lZWQgdG8gbWFrZSBzdXJlIGl0J3MgYSBwb3dlciBvZiB0d28KLSAgICBpZiAoYWxpZ25tZW50ICYgKGFsaWdubWVudC0xKSkgewotICAgICAgICBhbGlnbm1lbnQgPSAxTCA8PCAoMzEgLSBfX2J1aWx0aW5fY2x6KGFsaWdubWVudCkpOworICAgIGlmICghcG93ZXJvZjIoYWxpZ25tZW50KSkgeworICAgICAgICBhbGlnbm1lbnQgPSBCSU9OSUNfUk9VTkRfVVBfUE9XRVJfT0ZfMihhbGlnbm1lbnQpOwogICAgIH0KIAogICAgIC8vIGhlcmUsIGFsaWdubWVudCBpcyBhdCBsZWFzdCBNQUxMT0NfQUxJR05NRU5UPDwxIGJ5dGVzCkBAIC00MTAsMjYgKzQ5Miw0MyBAQAogICAgIHJldHVybiBiYXNlOwogfQogCi1leHRlcm4gIkMiIHNpemVfdCBsZWFrX21hbGxvY191c2FibGVfc2l6ZShjb25zdCB2b2lkKiBtZW0pIHsKLSAgICBpZiAobWVtICE9IE5VTEwpIHsKLSAgICAgICAgLy8gQ2hlY2sgdGhlIGd1YXJkIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC4KLSAgICAgICAgY29uc3QgQWxsb2NhdGlvbkVudHJ5KiBoZWFkZXIgPSBjb25zdF90b19oZWFkZXIoKHZvaWQqKW1lbSk7Ci0KLSAgICAgICAgaWYgKGhlYWRlci0+Z3VhcmQgPT0gTUVNQUxJR05fR1VBUkQpIHsKLSAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBtZW1hbGlnbidkIHBvaW50ZXIsIHRoZW4gZ3JhYiB0aGUgaGVhZGVyIGZyb20KLSAgICAgICAgICAgIC8vIGVudHJ5LgotICAgICAgICAgICAgaGVhZGVyID0gY29uc3RfdG9faGVhZGVyKGhlYWRlci0+ZW50cnkpOwotICAgICAgICB9IGVsc2UgaWYgKGhlYWRlci0+Z3VhcmQgIT0gR1VBUkQpIHsKLSAgICAgICAgICAgIGRlYnVnX2xvZygiV0FSTklORyBiYWQgaGVhZGVyIGd1YXJkOiAnMHgleCchIGFuZCBpbnZhbGlkIGVudHJ5OiAlcFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICBoZWFkZXItPmd1YXJkLCBoZWFkZXItPmVudHJ5KTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgc2l6ZV90IHJldCA9IGRsbWFsbG9jX3VzYWJsZV9zaXplKGhlYWRlcik7Ci0gICAgICAgIGlmIChyZXQgIT0gMCkgewotICAgICAgICAgICAgLy8gVGhlIHVzYWJsZSBhcmVhIHN0YXJ0cyBhdCAnbWVtJyBhbmQgc3RvcHMgYXQgJ2hlYWRlcityZXQnLgotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihoZWFkZXIpICsgcmV0IC0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1lbSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7CitleHRlcm4gIkMiIHN0cnVjdCBtYWxsaW5mbyBsZWFrX21hbGxpbmZvKCkgeworICByZXR1cm4gZ19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxpbmZvKCk7CiB9CisKK2V4dGVybiAiQyIgaW50IGxlYWtfcG9zaXhfbWVtYWxpZ24odm9pZCoqIG1lbXB0ciwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIHsKKyAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgcmV0dXJuIGdfbWFsbG9jX2Rpc3BhdGNoLT5wb3NpeF9tZW1hbGlnbihtZW1wdHIsIGFsaWdubWVudCwgc2l6ZSk7CisgIH0KKworICBpZiAoIXBvd2Vyb2YyKGFsaWdubWVudCkpIHsKKyAgICByZXR1cm4gRUlOVkFMOworICB9CisgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAqbWVtcHRyID0gbGVha19tZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOworICBlcnJubyA9IHNhdmVkX2Vycm5vOworICByZXR1cm4gKCptZW1wdHIgIT0gTlVMTCkgPyAwIDogRU5PTUVNOworfQorCisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorZXh0ZXJuICJDIiB2b2lkKiBsZWFrX3B2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChEZWJ1Z0NhbGxzRGlzYWJsZWQoKSkgeworICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+cHZhbGxvYyhieXRlcyk7CisgIH0KKworICBzaXplX3QgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOworICBzaXplX3Qgc2l6ZSA9IEJJT05JQ19BTElHTihieXRlcywgcGFnZXNpemUpOworICBpZiAoc2l6ZSA8IGJ5dGVzKSB7IC8vIE92ZXJmbG93CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgcmV0dXJuIGxlYWtfbWVtYWxpZ24ocGFnZXNpemUsIHNpemUpOworfQorCitleHRlcm4gIkMiIHZvaWQqIGxlYWtfdmFsbG9jKHNpemVfdCBzaXplKSB7CisgIGlmIChEZWJ1Z0NhbGxzRGlzYWJsZWQoKSkgeworICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+dmFsbG9jKHNpemUpOworICB9CisKKyAgcmV0dXJuIGxlYWtfbWVtYWxpZ24oZ2V0cGFnZXNpemUoKSwgc2l6ZSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19xZW11LmNwcCBiL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19xZW11LmNwcAppbmRleCA1YTkxZGFhLi5iM2I2MDRkIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfcWVtdS5jcHAKKysrIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX3FlbXUuY3BwCkBAIC00NywxMiArNDcsMTMgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlICJkbG1hbGxvYy5oIgotI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCiAjaW5jbHVkZSAibWFsbG9jX2RlYnVnX2NvbW1vbi5oIgorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX21hY3Jvcy5oIgorI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCiAKIC8qIFRoaXMgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgaW50byB0aGUgYnVpbGQgb25seSB3aGVuCiAgKiBNQUxMT0NfUUVNVV9JTlNUUlVNRU5UIG1hY3JvIGlzIGRlZmluZWQuICovCkBAIC0zMzUsNiArMzM2LDkgQEAKIC8vIFN0YXRpYyBkYXRhCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisvLyBUaGUgdW5kZXJseWluZyBtYWxsb2MgaW1wbGVtZW50YXRpb24gdG8gdXNlIHRvIGdldCBtZW1vcnkuCitzdGF0aWMgY29uc3QgTWFsbG9jRGVidWcqIGdfbWFsbG9jX2Rpc3BhdGNoID0gTlVMTDsKKwogLyogRW11bGF0b3IncyBtYWdpYyBwYWdlIGFkZHJlc3MuCiAgKiBUaGlzIHBhZ2UgKG1hcHBlZCBvbiAvZGV2L3FlbXVfdHJhY2UgZGV2aWNlKSBpcyB1c2VkIHRvIGZpcmUgdXAgZXZlbnRzCiAgKiBpbiB0aGUgZW11bGF0b3IuICovCkBAIC0zNDQsNyArMzQ4LDcgQEAKICAqIGhhcyBiZWVuIGluaXRpYWxpemVkLiAqLwogc3RhdGljIHVpbnQzMl90IG1hbGxvY19waWQgPSAwOwogCi0vKiBNZW1vcnkgYWxsb2NhdGlvbiBhbGlnbm1lbnQgdGhhdCBpcyB1c2VkIGluIGRsbWFsbG9jLgorLyogTWVtb3J5IGFsbG9jYXRpb24gYWxpZ25tZW50IHRoYXQgaXMgdXNlZCBpbiB0aGUgbWFsbG9jIGltcGxlbWVudGF0aW9uLgogICogVGhpcyB2YXJpYWJsZSBpcyB1cGRhdGVkIGJ5IG1lbWNoZWNrX2luaXRpYWxpemUgcm91dGluZS4gKi8KIHN0YXRpYyB1aW50MzJfdCBtYWxsb2NfYWxpZ25tZW50ID0gODsKIApAQCAtNTc0LDEyICs1NzgsMTYgQEAKIC8vIEFQSSByb3V0aW5lcwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotZXh0ZXJuICJDIiB2b2lkKiBxZW11X2luc3RydW1lbnRlZF9tYWxsb2Moc2l6ZV90IGJ5dGVzKTsKLWV4dGVybiAiQyIgdm9pZCAgcWVtdV9pbnN0cnVtZW50ZWRfZnJlZSh2b2lkKiBtZW0pOwotZXh0ZXJuICJDIiB2b2lkKiBxZW11X2luc3RydW1lbnRlZF9jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpOwotZXh0ZXJuICJDIiB2b2lkKiBxZW11X2luc3RydW1lbnRlZF9yZWFsbG9jKHZvaWQqIG1lbSwgc2l6ZV90IGJ5dGVzKTsKLWV4dGVybiAiQyIgdm9pZCogcWVtdV9pbnN0cnVtZW50ZWRfbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKTsKLWV4dGVybiAiQyIgc2l6ZV90IHFlbXVfaW5zdHJ1bWVudGVkX21hbGxvY191c2FibGVfc2l6ZShjb25zdCB2b2lkKiBtZW0pOworZXh0ZXJuICJDIiB2b2lkKiBxZW11X2luc3RydW1lbnRlZF9jYWxsb2Moc2l6ZV90LCBzaXplX3QpOworZXh0ZXJuICJDIiB2b2lkICBxZW11X2luc3RydW1lbnRlZF9mcmVlKHZvaWQqKTsKK2V4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZvIHFlbXVfaW5zdHJ1bWVudGVkX21hbGxpbmZvKCk7CitleHRlcm4gIkMiIHZvaWQqIHFlbXVfaW5zdHJ1bWVudGVkX21hbGxvYyhzaXplX3QpOworZXh0ZXJuICJDIiBzaXplX3QgcWVtdV9pbnN0cnVtZW50ZWRfbWFsbG9jX3VzYWJsZV9zaXplKGNvbnN0IHZvaWQqKTsKK2V4dGVybiAiQyIgdm9pZCogcWVtdV9pbnN0cnVtZW50ZWRfbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpOworZXh0ZXJuICJDIiBpbnQgcWVtdV9pbnN0cnVtZW50ZWRfcG9zaXhfbWVtYWxpZ24odm9pZCoqLCBzaXplX3QsIHNpemVfdCk7CitleHRlcm4gIkMiIHZvaWQqIHFlbXVfaW5zdHJ1bWVudGVkX3B2YWxsb2Moc2l6ZV90KTsKK2V4dGVybiAiQyIgdm9pZCogcWVtdV9pbnN0cnVtZW50ZWRfcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKK2V4dGVybiAiQyIgdm9pZCogcWVtdV9pbnN0cnVtZW50ZWRfdmFsbG9jKHNpemVfdCk7CiAKIC8qIEluaXRpYWxpemVzIG1hbGxvYyBkZWJ1Z2dpbmcgaW5zdHJ1bWVudGF0aW9uIGZvciB0aGUgZW11bGF0b3IuCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGZyb20gbWFsbG9jX2luaXRfaW1wbCByb3V0aW5lIGltcGxlbWVudGVkIGluCkBAIC01OTAsNyArNTk4LDkgQEAKICAqIFJldHVybjoKICAqICAwIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGZhaWx1cmUuCiAqLwotZXh0ZXJuICJDIiBpbnQgbWFsbG9jX2RlYnVnX2luaXRpYWxpemUoKSB7CitleHRlcm4gIkMiIGJvb2wgbWFsbG9jX2RlYnVnX2luaXRpYWxpemUoSGFzaFRhYmxlKiwgY29uc3QgTWFsbG9jRGVidWcqIG1hbGxvY19kaXNwYXRjaCkgeworICAgIGdfbWFsbG9jX2Rpc3BhdGNoID0gbWFsbG9jX2Rpc3BhdGNoOworCiAgICAgLyogV2Ugd2lsbCBiZSB1c2luZyBlbXVsYXRvcidzIG1hZ2ljIHBhZ2UgdG8gcmVwb3J0IG1lbW9yeSBhbGxvY2F0aW9uCiAgICAgICogYWN0aXZpdGllcy4gSW4gZXNzZW5jZSwgd2hhdCBtYWdpYyBwYWdlIGRvZXMsIGl0IHRyYW5zbGF0ZXMgd3JpdGVzIHRvCiAgICAgICogdGhlIG1lbW9yeSBtYXBwZWQgc3BhY2VzIGludG8gd3JpdGVzIHRvIGFuIEkvTyBwb3J0IHRoYXQgZW11bGF0b3IKQEAgLTU5OSw3ICs2MDksNyBAQAogICAgIGludCBmZCA9IG9wZW4oIi9kZXYvcWVtdV90cmFjZSIsIE9fUkRXUik7CiAgICAgaWYgKGZkIDwgMCkgewogICAgICAgICBlcnJvcl9sb2coIlVuYWJsZSB0byBvcGVuIC9kZXYvcWVtdV90cmFjZSIpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UgewogICAgICAgICBxdHJhY2UgPSBtbWFwKE5VTEwsIFBBR0VTSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7CiAgICAgICAgIGNsb3NlKGZkKTsKQEAgLTYwNywxNCArNjE3LDEzIEBACiAgICAgICAgIGlmIChxdHJhY2UgPT0gTUFQX0ZBSUxFRCkgewogICAgICAgICAgICAgcXRyYWNlID0gTlVMTDsKICAgICAgICAgICAgIGVycm9yX2xvZygiVW5hYmxlIHRvIG1tYXAgL2Rldi9xZW11X3RyYWNlIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKiBDYWNoZSBwaWQgb2YgdGhlIHByb2Nlc3MgdGhpcyBsaWJyYXJ5IGhhcyBiZWVuIGluaXRpYWxpemVkIGZvci4gKi8KICAgICBtYWxsb2NfcGlkID0gZ2V0cGlkKCk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLyogQ29tcGxldGVzIG1hbGxvYyBkZWJ1Z2dpbmcgaW5zdHJ1bWVudGF0aW9uIGZvciB0aGUgZW11bGF0b3IuCkBAIC02NzcsMTUgKzY4NiwyMiBAQAogZXh0ZXJuICJDIiB2b2lkKiBxZW11X2luc3RydW1lbnRlZF9tYWxsb2Moc2l6ZV90IGJ5dGVzKSB7CiAgICAgTWFsbG9jRGVzYyBkZXNjOwogCi0gICAgLyogSW5pdGlhbGl6ZSBibG9jayBkZXNjcmlwdG9yIGFuZCBhbGxvY2F0ZSBtZW1vcnkuIE5vdGUgdGhhdCBkbG1hbGxvYworICAgIC8qIEluaXRpYWxpemUgYmxvY2sgZGVzY3JpcHRvciBhbmQgYWxsb2NhdGUgbWVtb3J5LiBOb3RlIHRoYXQgbWFsbG9jCiAgICAgICogcmV0dXJucyBhIHZhbGlkIHBvaW50ZXIgb24gemVybyBhbGxvY2F0aW9uLiBMZXRzIG1pbWljIHRoaXMgYmVoYXZpb3IuICovCiAgICAgZGVzYy5wcmVmaXhfc2l6ZSA9IERFRkFVTFRfUFJFRklYX1NJWkU7CiAgICAgZGVzYy5yZXF1ZXN0ZWRfYnl0ZXMgPSBieXRlczsKICAgICBkZXNjLnN1ZmZpeF9zaXplID0gREVGQVVMVF9TVUZGSVhfU0laRTsKLSAgICBkZXNjLnB0ciA9IGRsbWFsbG9jKG1hbGxvY2Rlc2NfYWxsb2Nfc2l6ZSgmZGVzYykpOworICAgIHNpemVfdCBzaXplID0gbWFsbG9jZGVzY19hbGxvY19zaXplKCZkZXNjKTsKKyAgICBpZiAoc2l6ZSA8IGJ5dGVzKSB7IC8vIE92ZXJmbG93CisgICAgICAgIHFlbXVfZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IG1hbGxvYzogbWFsbG9jKCV6dSkgb3ZlcmZsb3cgY2F1c2VkIGZhaWx1cmUuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIGJ5dGVzKTsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBkZXNjLnB0ciA9IGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2Moc2l6ZSk7CiAgICAgaWYgKGRlc2MucHRyID09IE5VTEwpIHsKLSAgICAgICAgcWVtdV9lcnJvcl9sb2coIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gbWFsbG9jKCV6ZCk6IGRsbWFsbG9jKCV1KSBmYWlsZWQuIiwKLSAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBieXRlcywgbWFsbG9jZGVzY19hbGxvY19zaXplKCZkZXNjKSk7CisgICAgICAgIHFlbXVfZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IG1hbGxvYyglenUpOiBtYWxsb2MoJXp1KSBmYWlsZWQuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIGJ5dGVzLCBzaXplKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC02OTMsMTMgKzcwOSwxNCBAQAogICAgIGlmIChub3RpZnlfcWVtdV9tYWxsb2MoJmRlc2MpKSB7CiAgICAgICAgIGxvZ19tZGVzYyhlcnJvciwgJmRlc2MsICI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiBtYWxsb2M6IG5vdGlmeV9tYWxsb2MgZmFpbGVkIGZvciAiLAogICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCkpOwotICAgICAgICBkbGZyZWUoZGVzYy5wdHIpOworICAgICAgICBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShkZXNjLnB0cik7CisgICAgICAgIGVycm5vID0gRU5PTUVNOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewogI2lmIFRFU1RfQUNDRVNTX1ZJT0xBVElPTlMKICAgICAgICAgdGVzdF9hY2Nlc3NfdmlvbGF0aW9uKCZkZXNjKTsKICNlbmRpZiAgLy8gVEVTVF9BQ0NFU1NfVklPTEFUSU9OUwotICAgICAgICBsb2dfbWRlc2MoaW5mbywgJmRlc2MsICIrKysgPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PiBtYWxsb2MoJXpkKSAtPiAiLAorICAgICAgICBsb2dfbWRlc2MoaW5mbywgJmRlc2MsICIrKysgPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PiBtYWxsb2MoJXp1KSAtPiAiLAogICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIGJ5dGVzKTsKICAgICAgICAgcmV0dXJuIG1hbGxvY2Rlc2NfdXNlcl9wdHIoJmRlc2MpOwogICAgIH0KQEAgLTcxNCw3ICs3MzEsNyBAQAogCiAgICAgaWYgKG1lbSA9PSBOVUxMKSB7CiAgICAgICAgIC8vIEp1c3QgbGV0IGdvIE5VTEwgZnJlZQotICAgICAgICBkbGZyZWUobWVtKTsKKyAgICAgICAgZ19tYWxsb2NfZGlzcGF0Y2gtPmZyZWUobWVtKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzQ1LDcgKzc2Miw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgbG9nX21kZXNjKGluZm8sICZkZXNjLCAiLS0tIDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gZnJlZSglcCkgLT4gIiwKICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0pOwotICAgICAgICBkbGZyZWUoZGVzYy5wdHIpOworICAgICAgICBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShkZXNjLnB0cik7CiAgICAgfQogfQogCkBAIC03NTYsMTMgKzc3MywxNiBAQAogICAgIGlmIChuX2VsZW1lbnRzID09IDAgfHwgZWxlbV9zaXplID09IDApIHsKICAgICAgICAgLy8gSnVzdCBsZXQgZ28gemVybyBieXRlcyBhbGxvY2F0aW9uLgogICAgICAgICBxZW11X2luZm9fbG9nKCI6OjogPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogWmVybyBjYWxsb2MgcmVkaXIgdG8gbWFsbG9jIiwKLSAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCkpOworICAgICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpKTsKICAgICAgICAgcmV0dXJuIHFlbXVfaW5zdHJ1bWVudGVkX21hbGxvYygwKTsKICAgICB9CiAKLSAgICAvKiBGYWlsIG9uIG92ZXJmbG93IC0ganVzdCB0byBiZSBzYWZlIGV2ZW4gdGhvdWdoIHRoaXMgY29kZSBydW5zIG9ubHkKLSAgICAgKiB3aXRoaW4gdGhlIGRlYnVnZ2luZyBDIGxpYnJhcnksIG5vdCB0aGUgcHJvZHVjdGlvbiBvbmUgKi8KLSAgICBpZiAobl9lbGVtZW50cyAmJiBNQVhfU0laRV9UIC8gbl9lbGVtZW50cyA8IGVsZW1fc2l6ZSkgeworICAgIC8vIEZhaWwgb24gb3ZlcmZsb3cgLSBqdXN0IHRvIGJlIHNhZmUgZXZlbiB0aG91Z2ggdGhpcyBjb2RlIHJ1bnMgb25seQorICAgIC8vIHdpdGhpbiB0aGUgZGVidWdnaW5nIEMgbGlicmFyeSwgbm90IHRoZSBwcm9kdWN0aW9uIG9uZS4KKyAgICBpZiAobl9lbGVtZW50cyAmJiBTSVpFX01BWCAvIG5fZWxlbWVudHMgPCBlbGVtX3NpemUpIHsKKyAgICAgICAgcWVtdV9lcnJvcl9sb2coIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gY2FsbG9jOiBjYWxsb2MoJXp1LCAlenUpIG92ZXJmbG93IGNhdXNlZCBmYWlsdXJlLiIsCisgICAgICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBuX2VsZW1lbnRzLCBlbGVtX3NpemUpOworICAgICAgICBlcnJubyA9IEVOT01FTTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC03ODgsNiArODA4LDEyIEBACiAgICAgfQogICAgIGRlc2MucmVxdWVzdGVkX2J5dGVzID0gbl9lbGVtZW50cyAqIGVsZW1fc2l6ZTsKICAgICBzaXplX3QgdG90YWxfc2l6ZSA9IGRlc2MucmVxdWVzdGVkX2J5dGVzICsgZGVzYy5wcmVmaXhfc2l6ZSArIGRlc2Muc3VmZml4X3NpemU7CisgICAgaWYgKHRvdGFsX3NpemUgPCBkZXNjLnJlcXVlc3RlZF9ieXRlcykgeyAvLyBPdmVyZmxvdworICAgICAgICBxZW11X2Vycm9yX2xvZygiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PiBjYWxsb2M6IGNhbGxvYyglenUsICV6dSkgb3ZlcmZsb3cgY2F1c2VkIGZhaWx1cmUuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG5fZWxlbWVudHMsIGVsZW1fc2l6ZSk7CisgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgc2l6ZV90IHRvdGFsX2VsZW1lbnRzID0gdG90YWxfc2l6ZSAvIGVsZW1fc2l6ZTsKICAgICB0b3RhbF9zaXplICU9IGVsZW1fc2l6ZTsKICAgICBpZiAodG90YWxfc2l6ZSAhPSAwKSB7CkBAIC03OTUsMjQgKzgyMSwyNSBAQAogICAgICAgICB0b3RhbF9lbGVtZW50cysrOwogICAgICAgICBkZXNjLnN1ZmZpeF9zaXplICs9IChlbGVtX3NpemUgLSB0b3RhbF9zaXplKTsKICAgICB9Ci0gICAgZGVzYy5wdHIgPSBkbGNhbGxvYyh0b3RhbF9lbGVtZW50cywgZWxlbV9zaXplKTsKKyAgICBkZXNjLnB0ciA9IGdfbWFsbG9jX2Rpc3BhdGNoLT5jYWxsb2ModG90YWxfZWxlbWVudHMsIGVsZW1fc2l6ZSk7CiAgICAgaWYgKGRlc2MucHRyID09IE5VTEwpIHsKLSAgICAgICAgZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IGNhbGxvYzogZGxjYWxsb2MoJXpkKCV6ZCksICV6ZCkgKHByeD0ldSwgc2Z4PSV1KSBmYWlsZWQuIiwKKyAgICAgICAgZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IGNhbGxvYzogY2FsbG9jKCV6dSglenUpLCAlenUpIChwcng9JXUsIHNmeD0ldSkgZmFpbGVkLiIsCiAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG5fZWxlbWVudHMsIHRvdGFsX2VsZW1lbnRzLCBlbGVtX3NpemUsCiAgICAgICAgICAgICAgICAgICAgZGVzYy5wcmVmaXhfc2l6ZSwgZGVzYy5zdWZmaXhfc2l6ZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGlmIChub3RpZnlfcWVtdV9tYWxsb2MoJmRlc2MpKSB7Ci0gICAgICAgIGxvZ19tZGVzYyhlcnJvciwgJmRlc2MsICI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiBjYWxsb2MoJXpkKCV6ZCksICV6ZCk6IG5vdGlmeV9tYWxsb2MgZmFpbGVkIGZvciAiLAorICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZkZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogY2FsbG9jKCV6dSglenUpLCAlenUpOiBub3RpZnlfbWFsbG9jIGZhaWxlZCBmb3IgIiwKICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBuX2VsZW1lbnRzLCB0b3RhbF9lbGVtZW50cywgZWxlbV9zaXplKTsKLSAgICAgICAgZGxmcmVlKGRlc2MucHRyKTsKKyAgICAgICAgZ19tYWxsb2NfZGlzcGF0Y2gtPmZyZWUoZGVzYy5wdHIpOworICAgICAgICBlcnJubyA9IEVOT01FTTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIHsKICNpZiBURVNUX0FDQ0VTU19WSU9MQVRJT05TCiAgICAgICAgIHRlc3RfYWNjZXNzX3Zpb2xhdGlvbigmZGVzYyk7CiAjZW5kaWYgIC8vIFRFU1RfQUNDRVNTX1ZJT0xBVElPTlMKLSAgICAgICAgbG9nX21kZXNjKGluZm8sICZkZXNjLCAiIyMjIDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gY2FsbG9jKCV6ZCglemQpLCAlemQpIC0+ICIsCisgICAgICAgIGxvZ19tZGVzYyhpbmZvLCAmZGVzYywgIiMjIyA8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IGNhbGxvYyglenUoJXp1KSwgJXp1KSAtPiAiLAogICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG5fZWxlbWVudHMsIHRvdGFsX2VsZW1lbnRzLCBlbGVtX3NpemUpOwogICAgICAgICByZXR1cm4gbWFsbG9jZGVzY191c2VyX3B0cigmZGVzYyk7CiAgICAgfQpAQCAtODI1LDMzICs4NTIsMzAgQEAKICAqIHNob3VsZCBub3QgZXhwZWN0IHRoYXQgcG9pbnRlciByZXR1cm5lZCBhZnRlciBzaHJpbmtpbmcgd2lsbCByZW1haW4gdGhlIHNhbWUuCiAgKi8KIGV4dGVybiAiQyIgdm9pZCogcWVtdV9pbnN0cnVtZW50ZWRfcmVhbGxvYyh2b2lkKiBtZW0sIHNpemVfdCBieXRlcykgewotICAgIE1hbGxvY0Rlc2MgbmV3X2Rlc2M7Ci0gICAgTWFsbG9jRGVzYyBjdXJfZGVzYzsKLSAgICBzaXplX3QgdG9fY29weTsKLSAgICB2b2lkKiByZXQ7Ci0KICAgICBpZiAobWVtID09IE5VTEwpIHsKICAgICAgICAgLy8gTm90aGluZyB0byByZWFsbG9jLiBqdXN0IGRvIHJlZ3VsYXIgbWFsbG9jLgotICAgICAgICBxZW11X2luZm9fbG9nKCI6OjogPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXpkKSByZWRpciB0byBtYWxsb2MiLAotICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgbWVtLCBieXRlcyk7CisgICAgICAgIHFlbXVfaW5mb19sb2coIjo6OiA8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiByZWFsbG9jKCVwLCAlenUpIHJlZGlyIHRvIG1hbGxvYyIsCisgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMpOwogICAgICAgICByZXR1cm4gcWVtdV9pbnN0cnVtZW50ZWRfbWFsbG9jKGJ5dGVzKTsKICAgICB9CiAKICAgICBpZiAoYnl0ZXMgPT0gMCkgewogICAgICAgICAvLyBUaGlzIGlzIGEgImZyZWUiIGNvbmRpdGlvbi4KLSAgICAgICAgcWVtdV9pbmZvX2xvZygiOjo6IDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV6ZCkgcmVkaXIgdG8gZnJlZSBhbmQgbWFsbG9jIiwKLSAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMpOworICAgICAgICBxZW11X2luZm9fbG9nKCI6OjogPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXp1KSByZWRpciB0byBmcmVlIGFuZCBtYWxsb2MiLAorICAgICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0sIGJ5dGVzKTsKICAgICAgICAgcWVtdV9pbnN0cnVtZW50ZWRfZnJlZShtZW0pOwogCi0gICAgICAgIC8vIFRoaXMgaXMgd2hhdCBkbHJlYWxsb2MgZG9lcyBmb3IgYSAiZnJlZSIgcmVhbGxvYy4KKyAgICAgICAgLy8gVGhpcyBpcyB3aGF0IHJlYWxsb2MgZG9lcyBmb3IgYSAiZnJlZSIgcmVhbGxvYy4KICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgLy8gUXVlcnkgZW11bGF0b3IgZm9yIHRoZSByZWFsbG9jYXRpbmcgYmxvY2sgaW5mb3JtYXRpb24uCisgICAgTWFsbG9jRGVzYyBjdXJfZGVzYzsKICAgICBpZiAocXVlcnlfcWVtdV9tYWxsb2NfaW5mbyhtZW0sICZjdXJfZGVzYywgMikpIHsKICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdmlvbGF0aW9uIHNob3VsZCBiZSBhbHJlYWR5IGNhdWdodCBpbiB0aGUgZW11bGF0b3IuCi0gICAgICAgIGVycm9yX2xvZygiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXpkKSBxdWVyeV9pbmZvIGZhaWxlZC4iLAorICAgICAgICBlcnJvcl9sb2coIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV6dSkgcXVlcnlfaW5mbyBmYWlsZWQuIiwKICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0sIGJ5dGVzKTsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtODYzLDggKzg4Nyw5IEBACiAgICAgICogZm9yIHRoaXMgbWVtb3J5IGJsb2NrLiBOb3RlIHRoYXQgdGhpcyB2aW9sYXRpb24gc2hvdWxkIGJlIGFscmVhZHkgY2F1Z2h0CiAgICAgICogaW4gdGhlIGVtdWxhdG9yLiovCiAgICAgaWYgKG1lbSAhPSBtYWxsb2NkZXNjX3VzZXJfcHRyKCZjdXJfZGVzYykpIHsKLSAgICAgICAgbG9nX21kZXNjKGVycm9yLCAmY3VyX2Rlc2MsICI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiByZWFsbG9jKCVwLCAlemQpIGlzIGludmFsaWQgZm9yICIsCisgICAgICAgIGxvZ19tZGVzYyhlcnJvciwgJmN1cl9kZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXp1KSBpcyBpbnZhbGlkIGZvciAiLAogICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMpOworICAgICAgICBlcnJubyA9IEVOT01FTTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC04NzQsMzEgKzg5OSwzOCBAQAogICAgICAqIGZvciB0aGlzIGJsb2NrIHRoYXQgaXMgc3RvcmVkIGluIHRoZSBlbXVsYXRvci4gKi8KIAogICAgIC8vIEluaXRpYWxpemUgZGVzY3JpcHRvciBmb3IgdGhlIG5ldyBibG9jay4KKyAgICBNYWxsb2NEZXNjIG5ld19kZXNjOwogICAgIG5ld19kZXNjLnByZWZpeF9zaXplID0gREVGQVVMVF9QUkVGSVhfU0laRTsKICAgICBuZXdfZGVzYy5yZXF1ZXN0ZWRfYnl0ZXMgPSBieXRlczsKICAgICBuZXdfZGVzYy5zdWZmaXhfc2l6ZSA9IERFRkFVTFRfU1VGRklYX1NJWkU7Ci0gICAgbmV3X2Rlc2MucHRyID0gZGxtYWxsb2MobWFsbG9jZGVzY19hbGxvY19zaXplKCZuZXdfZGVzYykpOwotICAgIGlmIChuZXdfZGVzYy5wdHIgPT0gTlVMTCkgewotICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZjdXJfZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV6ZCk6IGRsbWFsbG9jKCV1KSBmYWlsZWQgb24gIiwKLSAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0sIGJ5dGVzLAotICAgICAgICAgICAgICAgICAgbWFsbG9jZGVzY19hbGxvY19zaXplKCZuZXdfZGVzYykpOworICAgIHNpemVfdCBuZXdfc2l6ZSA9IG1hbGxvY2Rlc2NfYWxsb2Nfc2l6ZSgmbmV3X2Rlc2MpOworICAgIGlmIChuZXdfc2l6ZSA8IGJ5dGVzKSB7IC8vIE92ZXJmbG93CisgICAgICAgIHFlbXVfZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiByZWFsbG9jKCVwLCAlenUpOiBtYWxsb2MoJXp1KSBmYWlsZWQgZHVlIHRvIG92ZXJmbG93IiwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMsIG5ld19zaXplKTsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZXQgPSBtYWxsb2NkZXNjX3VzZXJfcHRyKCZuZXdfZGVzYyk7CisgICAgbmV3X2Rlc2MucHRyID0gZ19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxvYyhuZXdfc2l6ZSk7CisgICAgaWYgKG5ld19kZXNjLnB0ciA9PSBOVUxMKSB7CisgICAgICAgIGxvZ19tZGVzYyhlcnJvciwgJmN1cl9kZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXp1KTogbWFsbG9jKCV6dSkgZmFpbGVkIG9uICIsCisgICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgbWVtLCBieXRlcywgbmV3X3NpemUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdm9pZCogbmV3X21lbSA9IG1hbGxvY2Rlc2NfdXNlcl9wdHIoJm5ld19kZXNjKTsKIAogICAgIC8vIENvcHkgdXNlciBkYXRhIGZyb20gb2xkIGJsb2NrIHRvIHRoZSBuZXcgb25lLgotICAgIHRvX2NvcHkgPSBieXRlcyA8IGN1cl9kZXNjLnJlcXVlc3RlZF9ieXRlcyA/IGJ5dGVzIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfZGVzYy5yZXF1ZXN0ZWRfYnl0ZXM7CisgICAgc2l6ZV90IHRvX2NvcHkgPSBieXRlcyA8IGN1cl9kZXNjLnJlcXVlc3RlZF9ieXRlcyA/IGJ5dGVzIDogY3VyX2Rlc2MucmVxdWVzdGVkX2J5dGVzOwogICAgIGlmICh0b19jb3B5ICE9IDApIHsKLSAgICAgICAgbWVtY3B5KHJldCwgbWFsbG9jZGVzY191c2VyX3B0cigmY3VyX2Rlc2MpLCB0b19jb3B5KTsKKyAgICAgICAgbWVtY3B5KG5ld19tZW0sIG1hbGxvY2Rlc2NfdXNlcl9wdHIoJmN1cl9kZXNjKSwgdG9fY29weSk7CiAgICAgfQogCiAgICAgLy8gUmVnaXN0ZXIgbmV3IGJsb2NrIHdpdGggZW11bGF0b3IuCiAgICAgaWYgKG5vdGlmeV9xZW11X21hbGxvYygmbmV3X2Rlc2MpKSB7Ci0gICAgICAgIGxvZ19tZGVzYyhlcnJvciwgJm5ld19kZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXpkKSBub3RpZnlfbWFsbG9jIGZhaWxlZCAtPiAiLAorICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZuZXdfZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV6dSkgbm90aWZ5X21hbGxvYyBmYWlsZWQgLT4gIiwKICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0sIGJ5dGVzKTsKICAgICAgICAgbG9nX21kZXNjKGVycm9yLCAmY3VyX2Rlc2MsICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0gIik7Ci0gICAgICAgIGRsZnJlZShuZXdfZGVzYy5wdHIpOworICAgICAgICBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShuZXdfZGVzYy5wdHIpOworICAgICAgICBlcnJubyA9IEVOT01FTTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC05MDgsMjEgKzk0MCwyMiBAQAogCiAgICAgLy8gRnJlZSBvbGQgYmxvY2suCiAgICAgaWYgKG5vdGlmeV9xZW11X2ZyZWUobWVtKSkgewotICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZjdXJfZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV6ZCk6IG5vdGlmeV9mcmVlIGZhaWxlZCBmb3IgIiwKKyAgICAgICAgbG9nX21kZXNjKGVycm9yLCAmY3VyX2Rlc2MsICI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiByZWFsbG9jKCVwLCAlenUpOiBub3RpZnlfZnJlZSBmYWlsZWQgZm9yICIsCiAgICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgbWVtLCBieXRlcyk7CiAgICAgICAgIC8qIFNpbmNlIHdlIHJlZ2lzdGVyZWQgbmV3IGRlY3JpcHRvciB3aXRoIHRoZSBlbXVsYXRvciwgd2UgbmVlZAogICAgICAgICAgKiB0byB1bnJlZ2lzdGVyIGl0IGJlZm9yZSBmcmVlaW5nIG5ld2x5IGFsbG9jYXRlZCBibG9jay4gKi8KICAgICAgICAgbm90aWZ5X3FlbXVfZnJlZShtYWxsb2NkZXNjX3VzZXJfcHRyKCZuZXdfZGVzYykpOwotICAgICAgICBkbGZyZWUobmV3X2Rlc2MucHRyKTsKKyAgICAgICAgZ19tYWxsb2NfZGlzcGF0Y2gtPmZyZWUobmV3X2Rlc2MucHRyKTsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBkbGZyZWUoY3VyX2Rlc2MucHRyKTsKKyAgICBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShjdXJfZGVzYy5wdHIpOwogCi0gICAgbG9nX21kZXNjKGluZm8sICZuZXdfZGVzYywgIj09PSA8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiByZWFsbG9jKCVwLCAlemQpIC0+ICIsCisgICAgbG9nX21kZXNjKGluZm8sICZuZXdfZGVzYywgIj09PSA8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiByZWFsbG9jKCVwLCAlenUpIC0+ICIsCiAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0sIGJ5dGVzKTsKICAgICBsb2dfbWRlc2MoaW5mbywgJmN1cl9kZXNjLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8LSAiKTsKIAotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIG5ld19tZW07CiB9CiAKIC8qIFRoaXMgcm91dGluZSBzZXJ2ZXMgYXMgZW50cnkgcG9pbnQgZm9yICdtZW1hbGlnbicuCkBAIC05MzMsMzAgKzk2Niw0MCBAQAogCiAgICAgaWYgKGJ5dGVzID09IDApIHsKICAgICAgICAgLy8gSnVzdCBsZXQgZ28gemVybyBieXRlcyBhbGxvY2F0aW9uLgotICAgICAgICBxZW11X2luZm9fbG9nKCI6OjogPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogbWVtYWxpZ24oJXp4LCAlemQpIHJlZGlyIHRvIG1hbGxvYyIsCisgICAgICAgIHFlbXVfaW5mb19sb2coIjo6OiA8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiBtZW1hbGlnbiglengsICV6dSkgcmVkaXIgdG8gbWFsbG9jIiwKICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIGFsaWdubWVudCwgYnl0ZXMpOwogICAgICAgICByZXR1cm4gcWVtdV9pbnN0cnVtZW50ZWRfbWFsbG9jKDApOwogICAgIH0KIAotICAgIC8qIFByZWZpeCBzaXplIGZvciBhbGlnbmVkIGFsbG9jYXRpb24gbXVzdCBiZSBlcXVhbCB0byB0aGUgYWxpZ25tZW50IHVzZWQKLSAgICAgKiBmb3IgYWxsb2NhdGlvbiBpbiBvcmRlciB0byBlbnN1cmUgcHJvcGVyIGFsaWdubWVudCBvZiB0aGUgcmV0dXJuZWQKLSAgICAgKiBwb2ludGVyLCBpbiBjYXNlIHRoYXQgYWxpZ25tZW50IHJlcXVpcmVtZW50IGlzIGdyZWF0ZXIgdGhhbiBwcmVmaXgKLSAgICAgKiBzaXplLiAqLwotICAgIGRlc2MucHJlZml4X3NpemUgPSBhbGlnbm1lbnQgPiBERUZBVUxUX1BSRUZJWF9TSVpFID8gYWxpZ25tZW50IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfUFJFRklYX1NJWkU7CisgICAgLy8gUHJlZml4IHNpemUgZm9yIGFsaWduZWQgYWxsb2NhdGlvbiBtdXN0IGJlIGVxdWFsIHRvIHRoZSBhbGlnbm1lbnQgdXNlZAorICAgIC8vIGZvciBhbGxvY2F0aW9uIGluIG9yZGVyIHRvIGVuc3VyZSBwcm9wZXIgYWxpZ25tZW50IG9mIHRoZSByZXR1cm5lZAorICAgIC8vIHBvaW50ZXIuIGluIGNhc2UgdGhhdCBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgaXMgZ3JlYXRlciB0aGFuIHByZWZpeAorICAgIC8vIHNpemUuCisgICAgaWYgKGFsaWdubWVudCA8IERFRkFVTFRfUFJFRklYX1NJWkUpIHsKKyAgICAgICAgYWxpZ25tZW50ID0gREVGQVVMVF9QUkVGSVhfU0laRTsKKyAgICB9IGVsc2UgaWYgKCFwb3dlcm9mMihhbGlnbm1lbnQpKSB7CisgICAgICAgIGFsaWdubWVudCA9IEJJT05JQ19ST1VORF9VUF9QT1dFUl9PRl8yKGFsaWdubWVudCk7CisgICAgfQorICAgIGRlc2MucHJlZml4X3NpemUgPSBhbGlnbm1lbnQ7CiAgICAgZGVzYy5yZXF1ZXN0ZWRfYnl0ZXMgPSBieXRlczsKICAgICBkZXNjLnN1ZmZpeF9zaXplID0gREVGQVVMVF9TVUZGSVhfU0laRTsKLSAgICBkZXNjLnB0ciA9IGRsbWVtYWxpZ24oZGVzYy5wcmVmaXhfc2l6ZSwgbWFsbG9jZGVzY19hbGxvY19zaXplKCZkZXNjKSk7CisgICAgc2l6ZV90IHNpemUgPSBtYWxsb2NkZXNjX2FsbG9jX3NpemUoJmRlc2MpOworICAgIGlmIChzaXplIDwgYnl0ZXMpIHsgLy8gT3ZlcmZsb3cKKyAgICAgICAgcWVtdV9lcnJvcl9sb2coIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gbWVtYWxpZ24oJXp4LCAlenUpOiBtYWxsb2MoJXp1KSBmYWlsZWQgZHVlIHRvIG92ZXJmbG93LiIsCisgICAgICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBhbGlnbm1lbnQsIGJ5dGVzLCBzaXplKTsKKworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZGVzYy5wdHIgPSBnX21hbGxvY19kaXNwYXRjaC0+bWVtYWxpZ24oZGVzYy5wcmVmaXhfc2l6ZSwgc2l6ZSk7CiAgICAgaWYgKGRlc2MucHRyID09IE5VTEwpIHsKLSAgICAgICAgZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IG1lbWFsaWduKCV6eCwgJXpkKTogZGxtYWxsb2MoJXUpIGZhaWxlZC4iLAotICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIGFsaWdubWVudCwgYnl0ZXMsCi0gICAgICAgICAgICAgICAgICBtYWxsb2NkZXNjX2FsbG9jX3NpemUoJmRlc2MpKTsKKyAgICAgICAgZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IG1lbWFsaWduKCV6eCwgJXp1KTogbWFsbG9jKCV6dSkgZmFpbGVkLiIsCisgICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgYWxpZ25tZW50LCBieXRlcywgc2l6ZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAobm90aWZ5X3FlbXVfbWFsbG9jKCZkZXNjKSkgewotICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZkZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogbWVtYWxpZ24oJXp4LCAlemQpOiBub3RpZnlfbWFsbG9jIGZhaWxlZCBmb3IgIiwKKyAgICAgICAgbG9nX21kZXNjKGVycm9yLCAmZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IG1lbWFsaWduKCV6eCwgJXp1KTogbm90aWZ5X21hbGxvYyBmYWlsZWQgZm9yICIsCiAgICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgYWxpZ25tZW50LCBieXRlcyk7Ci0gICAgICAgIGRsZnJlZShkZXNjLnB0cik7CisgICAgICAgIGdfbWFsbG9jX2Rpc3BhdGNoLT5mcmVlKGRlc2MucHRyKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC05NjQsNyArMTAwNyw3IEBACiAgICAgdGVzdF9hY2Nlc3NfdmlvbGF0aW9uKCZkZXNjKTsKICNlbmRpZiAgLy8gVEVTVF9BQ0NFU1NfVklPTEFUSU9OUwogCi0gICAgbG9nX21kZXNjKGluZm8sICZkZXNjLCAiQEBAIDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gbWVtYWxpZ24oJXp4LCAlemQpIC0+ICIsCisgICAgbG9nX21kZXNjKGluZm8sICZkZXNjLCAiQEBAIDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gbWVtYWxpZ24oJXp4LCAlenUpIC0+ICIsCiAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBhbGlnbm1lbnQsIGJ5dGVzKTsKICAgICByZXR1cm4gbWFsbG9jZGVzY191c2VyX3B0cigmZGVzYyk7CiB9CkBAIC05OTIsMyArMTAzNSwzNCBAQAogICAgIC8qIGR1cmluZyBpbnN0cnVtZW50YXRpb24sIHdlIGNhbid0IHJlYWxseSByZXBvcnQgYW55dGhpbmcgbW9yZSB0aGFuIHJlcXVlc3RlZF9ieXRlcyAqLwogICAgIHJldHVybiBjdXJfZGVzYy5yZXF1ZXN0ZWRfYnl0ZXM7CiB9CisKK2V4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZvIHFlbXVfaW5zdHJ1bWVudGVkX21hbGxpbmZvKCkgeworICByZXR1cm4gZ19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxpbmZvKCk7Cit9CisKK2V4dGVybiAiQyIgaW50IHFlbXVfaW5zdHJ1bWVudGVkX3Bvc2l4X21lbWFsaWduKHZvaWQqKiBtZW1wdHIsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSB7CisgIGlmICgoYWxpZ25tZW50ICYgKGFsaWdubWVudCAtIDEpKSAhPSAwKSB7CisgICAgcWVtdV9lcnJvcl9sb2coIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gcG9zaXhfbWVtYWxpZ24oJXAsICV6dSwgJXp1KTogaW52YWxpZCBhbGlnbm1lbnQuIiwKKyAgICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgbWVtcHRyLCBhbGlnbm1lbnQsIHNpemUpOworICAgIHJldHVybiBFSU5WQUw7CisgIH0KKyAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisgICptZW1wdHIgPSBxZW11X2luc3RydW1lbnRlZF9tZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOworICBlcnJubyA9IHNhdmVkX2Vycm5vOworICByZXR1cm4gKCptZW1wdHIgIT0gTlVMTCkgPyAwIDogRU5PTUVNOworfQorCitleHRlcm4gIkMiIHZvaWQqIHFlbXVfaW5zdHJ1bWVudGVkX3B2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHNpemVfdCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisgIHNpemVfdCBzaXplID0gQklPTklDX0FMSUdOKGJ5dGVzLCBwYWdlc2l6ZSk7CisgIGlmIChzaXplIDwgYnl0ZXMpIHsgLy8gT3ZlcmZsb3cKKyAgICBxZW11X2Vycm9yX2xvZygiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PiBwdmFsbG9jKCV6dSk6IG92ZXJmbG93ICglenUpLiIsCisgICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIGJ5dGVzLCBzaXplKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICByZXR1cm4gcWVtdV9pbnN0cnVtZW50ZWRfbWVtYWxpZ24ocGFnZXNpemUsIHNpemUpOworfQorCitleHRlcm4gIkMiIHZvaWQqIHFlbXVfaW5zdHJ1bWVudGVkX3ZhbGxvYyhzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gcWVtdV9pbnN0cnVtZW50ZWRfbWVtYWxpZ24oZ2V0cGFnZXNpemUoKSwgc2l6ZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tYnJ0b2MxNi5jcHAgYi9saWJjL2Jpb25pYy9tYnJ0b2MxNi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg3OGExMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL21icnRvYzE2LmNwcApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVjaGFyLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX21ic3RhdGUuaCIKKworc3RhdGljIGlubGluZSBib29sIG1ic3BhcnRpYWxjMTYoY29uc3QgbWJzdGF0ZV90KiBzdGF0ZSkgeworICByZXR1cm4gbWJzdGF0ZV9nZXRfYnl0ZShzdGF0ZSwgMykgIT0gMDsKK30KKworc3RhdGljIHNpemVfdCBiZWdpbl9zdXJyb2dhdGUoY2hhcjMyX3QgYzMyLCBjaGFyMTZfdCogcGMxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuY29udiwgbWJzdGF0ZV90KiBzdGF0ZSkgeworICBjMzIgLT0gMHgxMDAwMDsKKyAgY2hhcjE2X3QgdHJhaWwgPSAoYzMyICYgMHgzZmYpIHwgMHhkYzAwOworCisgIG1ic3RhdGVfc2V0X2J5dGUoc3RhdGUsIDAsIHRyYWlsICYgMHgwMGZmKTsKKyAgbWJzdGF0ZV9zZXRfYnl0ZShzdGF0ZSwgMSwgKHRyYWlsICYgMHhmZjAwKSA+PiA4KTsKKyAgbWJzdGF0ZV9zZXRfYnl0ZShzdGF0ZSwgMywgbmNvbnYgJiAweGZmKTsKKworICAqcGMxNiA9ICgoYzMyICYgMHhmZmMwMCkgPj4gMTApIHwgMHhkODAwOworICAvLyBEZWZpbmVkIGJ5IFBPU0lYIGFzIHJldHVybiB2YWx1ZSBmb3IgZmlyc3Qgc3Vycm9nYXRlIGNoYXJhY3Rlci4KKyAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oLTMpOworfQorCitzdGF0aWMgc2l6ZV90IGZpbmlzaF9zdXJyb2dhdGUoY2hhcjE2X3QqIHBjMTYsIG1ic3RhdGVfdCogc3RhdGUpIHsKKyAgY2hhcjE2X3QgdHJhaWwgPSBtYnN0YXRlX2dldF9ieXRlKHN0YXRlLCAxKSA8PCA4IHwKKyAgICAgICAgICAgICAgICAgICBtYnN0YXRlX2dldF9ieXRlKHN0YXRlLCAwKTsKKyAgKnBjMTYgPSB0cmFpbDsKKyAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm4obWJzdGF0ZV9nZXRfYnl0ZShzdGF0ZSwgMyksIHN0YXRlKTsKK30KKworc2l6ZV90IG1icnRvYzE2KGNoYXIxNl90KiBwYzE2LCBjb25zdCBjaGFyKiBzLCBzaXplX3QgbiwgbWJzdGF0ZV90KiBwcykgeworICBzdGF0aWMgbWJzdGF0ZV90IF9fcHJpdmF0ZV9zdGF0ZTsKKyAgbWJzdGF0ZV90KiBzdGF0ZSA9IChwcyA9PSBOVUxMKSA/ICZfX3ByaXZhdGVfc3RhdGUgOiBwczsKKworICBjaGFyMTZfdCBfX3ByaXZhdGVfcGMxNjsKKyAgaWYgKHBjMTYgPT0gTlVMTCkgeworICAgIHBjMTYgPSAmX19wcml2YXRlX3BjMTY7CisgIH0KKworICBpZiAobWJzcGFydGlhbGMxNihzdGF0ZSkpIHsKKyAgICByZXR1cm4gZmluaXNoX3N1cnJvZ2F0ZShwYzE2LCBzdGF0ZSk7CisgIH0KKworICBjaGFyMzJfdCBjMzI7CisgIHNpemVfdCBuY29udiA9IG1icnRvYzMyKCZjMzIsIHMsIG4sIHN0YXRlKTsKKyAgaWYgKF9fTUJfSVNfRVJSKG5jb252KSkgeworICAgIHJldHVybiBuY29udjsKKyAgfSBlbHNlIGlmIChuY29udiA9PSAwKSB7CisgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm4obmNvbnYsIHN0YXRlKTsKKyAgfSBlbHNlIGlmIChjMzIgPiAweDEwZmZmZikgeworICAgIC8vIElucHV0IGNhbm5vdCBiZSBlbmNvZGVkIGFzIFVURi0xNi4KKyAgICByZXR1cm4gcmVzZXRfYW5kX3JldHVybl9pbGxlZ2FsKEVJTFNFUSwgc3RhdGUpOworICB9IGVsc2UgaWYgKGMzMiA8IDB4MTAwMDApIHsKKyAgICAqcGMxNiA9IHN0YXRpY19jYXN0PGNoYXIxNl90PihjMzIpOworICAgIHJldHVybiByZXNldF9hbmRfcmV0dXJuKG5jb252LCBzdGF0ZSk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGJlZ2luX3N1cnJvZ2F0ZShjMzIsIHBjMTYsIG5jb252LCBzdGF0ZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21icnRvYzMyLmNwcCBiL2xpYmMvYmlvbmljL21icnRvYzMyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDQwZWNmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbWJydG9jMzIuY3BwCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHVjaGFyLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX21ic3RhdGUuaCIKKworc2l6ZV90IG1icnRvYzMyKGNoYXIzMl90KiBwYzMyLCBjb25zdCBjaGFyKiBzLCBzaXplX3QgbiwgbWJzdGF0ZV90KiBwcykgeworICBzdGF0aWMgbWJzdGF0ZV90IF9fcHJpdmF0ZV9zdGF0ZTsKKyAgbWJzdGF0ZV90KiBzdGF0ZSA9IChwcyA9PSBOVUxMKSA/ICZfX3ByaXZhdGVfc3RhdGUgOiBwczsKKworICAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IHRvIGEgc3RhdGUgd2hpY2ggaGFzIGFsbCA0IGJ5dGVzIG9mIHRoZSBzZXF1ZW5jZSBzZXQuCisgIC8vIEZ1bGwgc3RhdGUgdmVyaWZpY2F0aW9uIGlzIGRvbmUgd2hlbiBkZWNvZGluZyB0aGUgc2VxdWVuY2UgKGFmdGVyIHdlIGhhdmUKKyAgLy8gYWxsIHRoZSBieXRlcykuCisgIGlmIChtYnN0YXRlX2dldF9ieXRlKHN0YXRlLCAzKSAhPSAwKSB7CisgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm5faWxsZWdhbChFSU5WQUwsIHN0YXRlKTsKKyAgfQorCisgIGlmIChzID09IE5VTEwpIHsKKyAgICBzID0gIiI7CisgICAgbiA9IDE7CisgICAgcGMzMiA9IE5VTEw7CisgIH0KKworICBpZiAobiA9PSAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICB1aW50OF90IGNoOworICBpZiAobWJzaW5pdChzdGF0ZSkgJiYgKCgoY2ggPSBzdGF0aWNfY2FzdDx1aW50OF90PigqcykpICYgfjB4N2YpID09IDApKSB7CisgICAgLy8gRmFzdCBwYXRoIGZvciBwbGFpbiBBU0NJSSBjaGFyYWN0ZXJzLgorICAgIGlmIChwYzMyICE9IE5VTEwpIHsKKyAgICAgICpwYzMyID0gY2g7CisgICAgfQorICAgIHJldHVybiAoY2ggIT0gJ1wwJyA/IDEgOiAwKTsKKyAgfQorCisgIC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIG9jdGV0cyB0aGF0IG1ha2UgdXAgdGhpcyBjaGFyYWN0ZXIKKyAgLy8gZnJvbSB0aGUgZmlyc3Qgb2N0ZXQsIGFuZCBhIG1hc2sgdGhhdCBleHRyYWN0cyB0aGUKKyAgLy8gaW50ZXJlc3RpbmcgYml0cyBvZiB0aGUgZmlyc3Qgb2N0ZXQuIFdlIGFscmVhZHkga25vdworICAvLyB0aGUgY2hhcmFjdGVyIGlzIGF0IGxlYXN0IHR3byBieXRlcyBsb25nLgorICBzaXplX3QgbGVuZ3RoOworICBpbnQgbWFzazsKKworICAvLyBXZSBhbHNvIHNwZWNpZnkgYSBsb3dlciBib3VuZCBmb3IgdGhlIGNoYXJhY3RlciBjb2RlIHRvCisgIC8vIGRldGVjdCByZWR1bmRhbnQsIG5vbi0ic2hvcnRlc3QgZm9ybSIgZW5jb2RpbmdzLiBGb3IKKyAgLy8gZXhhbXBsZSwgdGhlIHNlcXVlbmNlIEMwIDgwIGlzIF9ub3RfIGEgbGVnYWwgcmVwcmVzZW50YXRpb24KKyAgLy8gb2YgdGhlIG51bGwgY2hhcmFjdGVyLiBUaGlzIGVuZm9yY2VzIGEgMS10by0xIG1hcHBpbmcKKyAgLy8gYmV0d2VlbiBjaGFyYWN0ZXIgY29kZXMgYW5kIHRoZWlyIG11bHRpYnl0ZSByZXByZXNlbnRhdGlvbnMuCisgIGNoYXIzMl90IGxvd2VyX2JvdW5kOworCisgIC8vIFRoZSBmaXJzdCBieXRlIGluIHRoZSBzdGF0ZSAoaWYgYW55KSB0ZWxscyB0aGUgbGVuZ3RoLgorICBzaXplX3QgYnl0ZXNfc29fZmFyID0gbWJzdGF0ZV9ieXRlc19zb19mYXIoc3RhdGUpOworICBjaCA9IGJ5dGVzX3NvX2ZhciA+IDAgPyBtYnN0YXRlX2dldF9ieXRlKHN0YXRlLCAwKSA6IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KCpzKTsKKyAgaWYgKChjaCAmIDB4ODApID09IDApIHsKKyAgICBtYXNrID0gMHg3ZjsKKyAgICBsZW5ndGggPSAxOworICAgIGxvd2VyX2JvdW5kID0gMDsKKyAgfSBlbHNlIGlmICgoY2ggJiAweGUwKSA9PSAweGMwKSB7CisgICAgbWFzayA9IDB4MWY7CisgICAgbGVuZ3RoID0gMjsKKyAgICBsb3dlcl9ib3VuZCA9IDB4ODA7CisgIH0gZWxzZSBpZiAoKGNoICYgMHhmMCkgPT0gMHhlMCkgeworICAgIG1hc2sgPSAweDBmOworICAgIGxlbmd0aCA9IDM7CisgICAgbG93ZXJfYm91bmQgPSAweDgwMDsKKyAgfSBlbHNlIGlmICgoY2ggJiAweGY4KSA9PSAweGYwKSB7CisgICAgbWFzayA9IDB4MDc7CisgICAgbGVuZ3RoID0gNDsKKyAgICBsb3dlcl9ib3VuZCA9IDB4MTAwMDA7CisgIH0gZWxzZSB7CisgICAgLy8gTWFsZm9ybWVkIGlucHV0OyBpbnB1dCBpcyBub3QgVVRGLTguIFNlZSBSRkMgMzYyOS4KKyAgICByZXR1cm4gcmVzZXRfYW5kX3JldHVybl9pbGxlZ2FsKEVJTFNFUSwgc3RhdGUpOworICB9CisKKyAgLy8gRmlsbCBpbiB0aGUgc3RhdGUuCisgIHNpemVfdCBieXRlc193YW50ZWQgPSBsZW5ndGggLSBieXRlc19zb19mYXI7CisgIHNpemVfdCBpOworICBmb3IgKGkgPSAwOyBpIDwgTUlOKGJ5dGVzX3dhbnRlZCwgbik7IGkrKykgeworICAgIGlmICghbWJzaW5pdChzdGF0ZSkgJiYgKCgqcyAmIDB4YzApICE9IDB4ODApKSB7CisgICAgICAvLyBNYWxmb3JtZWQgaW5wdXQ7IGJhZCBjaGFyYWN0ZXJzIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFyYWN0ZXIuCisgICAgICByZXR1cm4gcmVzZXRfYW5kX3JldHVybl9pbGxlZ2FsKEVJTFNFUSwgc3RhdGUpOworICAgIH0KKyAgICBtYnN0YXRlX3NldF9ieXRlKHN0YXRlLCBieXRlc19zb19mYXIgKyBpLCAqcysrKTsKKyAgfQorICBpZiAoaSA8IGJ5dGVzX3dhbnRlZCkgeworICAgIHJldHVybiBfX01CX0VSUl9JTkNPTVBMRVRFX1NFUVVFTkNFOworICB9CisKKyAgLy8gRGVjb2RlIHRoZSBvY3RldCBzZXF1ZW5jZSByZXByZXNlbnRpbmcgdGhlIGNoYXJhY3RlciBpbiBjaHVua3MKKyAgLy8gb2YgNiBiaXRzLCBtb3N0IHNpZ25pZmljYW50IGZpcnN0LgorICBjaGFyMzJfdCBjMzIgPSBtYnN0YXRlX2dldF9ieXRlKHN0YXRlLCAwKSAmIG1hc2s7CisgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykgeworICAgIGMzMiA8PD0gNjsKKyAgICBjMzIgfD0gbWJzdGF0ZV9nZXRfYnl0ZShzdGF0ZSwgaSkgJiAweDNmOworICB9CisKKyAgaWYgKGMzMiA8IGxvd2VyX2JvdW5kKSB7CisgICAgLy8gTWFsZm9ybWVkIGlucHV0OyByZWR1bmRhbnQgZW5jb2RpbmcuCisgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm5faWxsZWdhbChFSUxTRVEsIHN0YXRlKTsKKyAgfQorICBpZiAoKGMzMiA+PSAweGQ4MDAgJiYgYzMyIDw9IDB4ZGZmZikgfHwgYzMyID09IDB4ZmZmZSB8fCBjMzIgPT0gMHhmZmZmKSB7CisgICAgLy8gTWFsZm9ybWVkIGlucHV0OyBpbnZhbGlkIGNvZGUgcG9pbnRzLgorICAgIHJldHVybiByZXNldF9hbmRfcmV0dXJuX2lsbGVnYWwoRUlMU0VRLCBzdGF0ZSk7CisgIH0KKyAgaWYgKHBjMzIgIT0gTlVMTCkgeworICAgICpwYzMyID0gYzMyOworICB9CisgIHJldHVybiByZXNldF9hbmRfcmV0dXJuKGMzMiA9PSBVJ1wwJyA/IDAgOiBieXRlc193YW50ZWQsIHN0YXRlKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21ic3RhdGUuY3BwIGIvbGliYy9iaW9uaWMvbWJzdGF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzMjdkOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL21ic3RhdGUuY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX21ic3RhdGUuaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisKK19fTElCQ19ISURERU5fXyBzaXplX3QgbWJzdGF0ZV9ieXRlc19zb19mYXIoY29uc3QgbWJzdGF0ZV90KiBwcykgeworICByZXR1cm4KKyAgICAocHMtPl9fc2VxWzJdICE9IDApID8gMyA6CisgICAgKHBzLT5fX3NlcVsxXSAhPSAwKSA/IDIgOgorICAgIChwcy0+X19zZXFbMF0gIT0gMCkgPyAxIDogMDsKK30KKworX19MSUJDX0hJRERFTl9fIHZvaWQgbWJzdGF0ZV9zZXRfYnl0ZShtYnN0YXRlX3QqIHBzLCBpbnQgaSwgY2hhciBieXRlKSB7CisgIHBzLT5fX3NlcVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGJ5dGUpOworfQorCitfX0xJQkNfSElEREVOX18gdWludDhfdCBtYnN0YXRlX2dldF9ieXRlKGNvbnN0IG1ic3RhdGVfdCogcHMsIGludCBuKSB7CisgIHJldHVybiBwcy0+X19zZXFbbl07Cit9CisKK19fTElCQ19ISURERU5fXyBzaXplX3QgcmVzZXRfYW5kX3JldHVybl9pbGxlZ2FsKGludCBfZXJybm8sIG1ic3RhdGVfdCogcHMpIHsKKyAgZXJybm8gPSBfZXJybm87CisgICoocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHBzLT5fX3NlcSkpID0gMDsKKyAgcmV0dXJuIF9fTUJfRVJSX0lMTEVHQUxfU0VRVUVOQ0U7Cit9CisKK19fTElCQ19ISURERU5fXyBzaXplX3QgcmVzZXRfYW5kX3JldHVybihpbnQgX3JldHVybiwgbWJzdGF0ZV90KiBwcykgeworICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihwcy0+X19zZXEpKSA9IDA7CisgIHJldHVybiBfcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbWQ1LmMgYi9saWJjL2Jpb25pYy9tZDUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE0YWFlZC4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9tZDUuYworKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTk1IC0gMjAwMSBLdW5nbGlnYSBUZWtuaXNrYSBI9mdza29sYW4KLSAqIChSb3lhbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgU3RvY2tob2xtLCBTd2VkZW4pLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBJbnN0aXR1dGUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBJTlNUSVRVVEUgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBJTlNUSVRVVEUgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotCi1fX1JDU0lEKCIkSGVpbWRhbDogbWQ1LmMsdiAxLjE1IDIwMDEvMDEvMjkgMDQ6MzM6NDQgYXNzYXIgRXhwICQiCi0gICAgICAgICIkTmV0QlNEOiBtZDUuYyx2IDEuMS4xLjQgMjAwMi8wOS8xMiAxMjo0MTo0MiBqb2RhIEV4cCAkIik7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGVuZGlhbi5oPgotI2luY2x1ZGUgIm1kNS5oIgotI2luY2x1ZGUgImhhc2guaCIKLQotI2RlZmluZSBBIG0tPmNvdW50ZXJbMF0KLSNkZWZpbmUgQiBtLT5jb3VudGVyWzFdCi0jZGVmaW5lIEMgbS0+Y291bnRlclsyXQotI2RlZmluZSBEIG0tPmNvdW50ZXJbM10KLSNkZWZpbmUgWCBkYXRhCi0KLXZvaWQKLU1ENV9Jbml0IChzdHJ1Y3QgbWQ1ICptKQotewotICBtLT5zelswXSA9IDA7Ci0gIG0tPnN6WzFdID0gMDsKLSAgRCA9IDB4MTAzMjU0NzY7Ci0gIEMgPSAweDk4YmFkY2ZlOwotICBCID0gMHhlZmNkYWI4OTsKLSAgQSA9IDB4Njc0NTIzMDE7Ci19Ci0KLSNkZWZpbmUgRih4LHkseikgQ1JBWUZJWCgoeCAmIHkpIHwgKH54ICYgeikpCi0jZGVmaW5lIEcoeCx5LHopIENSQVlGSVgoKHggJiB6KSB8ICh5ICYgfnopKQotI2RlZmluZSBIKHgseSx6KSAoeCBeIHkgXiB6KQotI2RlZmluZSBJKHgseSx6KSBDUkFZRklYKHkgXiAoeCB8IH56KSkKLQotI2RlZmluZSBET0lUKGEsYixjLGQsayxzLGksT1ApIFwKLWEgPSBiICsgY3NoaWZ0KGEgKyBPUChiLGMsZCkgKyBYW2tdICsgKGkpLCBzKQotCi0jZGVmaW5lIERPMShhLGIsYyxkLGsscyxpKSBET0lUKGEsYixjLGQsayxzLGksRikKLSNkZWZpbmUgRE8yKGEsYixjLGQsayxzLGkpIERPSVQoYSxiLGMsZCxrLHMsaSxHKQotI2RlZmluZSBETzMoYSxiLGMsZCxrLHMsaSkgRE9JVChhLGIsYyxkLGsscyxpLEgpCi0jZGVmaW5lIERPNChhLGIsYyxkLGsscyxpKSBET0lUKGEsYixjLGQsayxzLGksSSkKLQotc3RhdGljIGlubGluZSB2b2lkCi1jYWxjIChzdHJ1Y3QgbWQ1ICptLCB1X2ludDMyX3QgKmRhdGEpCi17Ci0gIHVfaW50MzJfdCBBQSwgQkIsIENDLCBERDsKLQotICBBQSA9IEE7Ci0gIEJCID0gQjsKLSAgQ0MgPSBDOwotICBERCA9IEQ7Ci0KLSAgLyogUm91bmQgMSAqLwotCi0gIERPMShBLEIsQyxELDAsNywweGQ3NmFhNDc4KTsKLSAgRE8xKEQsQSxCLEMsMSwxMiwweGU4YzdiNzU2KTsKLSAgRE8xKEMsRCxBLEIsMiwxNywweDI0MjA3MGRiKTsKLSAgRE8xKEIsQyxELEEsMywyMiwweGMxYmRjZWVlKTsKLQotICBETzEoQSxCLEMsRCw0LDcsMHhmNTdjMGZhZik7Ci0gIERPMShELEEsQixDLDUsMTIsMHg0Nzg3YzYyYSk7Ci0gIERPMShDLEQsQSxCLDYsMTcsMHhhODMwNDYxMyk7Ci0gIERPMShCLEMsRCxBLDcsMjIsMHhmZDQ2OTUwMSk7Ci0KLSAgRE8xKEEsQixDLEQsOCw3LDB4Njk4MDk4ZDgpOwotICBETzEoRCxBLEIsQyw5LDEyLDB4OGI0NGY3YWYpOwotICBETzEoQyxELEEsQiwxMCwxNywweGZmZmY1YmIxKTsKLSAgRE8xKEIsQyxELEEsMTEsMjIsMHg4OTVjZDdiZSk7Ci0KLSAgRE8xKEEsQixDLEQsMTIsNywweDZiOTAxMTIyKTsKLSAgRE8xKEQsQSxCLEMsMTMsMTIsMHhmZDk4NzE5Myk7Ci0gIERPMShDLEQsQSxCLDE0LDE3LDB4YTY3OTQzOGUpOwotICBETzEoQixDLEQsQSwxNSwyMiwweDQ5YjQwODIxKTsKLQotICAvKiBSb3VuZCAyICovCi0KLSAgRE8yKEEsQixDLEQsMSw1LDB4ZjYxZTI1NjIpOwotICBETzIoRCxBLEIsQyw2LDksMHhjMDQwYjM0MCk7Ci0gIERPMihDLEQsQSxCLDExLDE0LDB4MjY1ZTVhNTEpOwotICBETzIoQixDLEQsQSwwLDIwLDB4ZTliNmM3YWEpOwotCi0gIERPMihBLEIsQyxELDUsNSwweGQ2MmYxMDVkKTsKLSAgRE8yKEQsQSxCLEMsMTAsOSwweDI0NDE0NTMpOwotICBETzIoQyxELEEsQiwxNSwxNCwweGQ4YTFlNjgxKTsKLSAgRE8yKEIsQyxELEEsNCwyMCwweGU3ZDNmYmM4KTsKLQotICBETzIoQSxCLEMsRCw5LDUsMHgyMWUxY2RlNik7Ci0gIERPMihELEEsQixDLDE0LDksMHhjMzM3MDdkNik7Ci0gIERPMihDLEQsQSxCLDMsMTQsMHhmNGQ1MGQ4Nyk7Ci0gIERPMihCLEMsRCxBLDgsMjAsMHg0NTVhMTRlZCk7Ci0KLSAgRE8yKEEsQixDLEQsMTMsNSwweGE5ZTNlOTA1KTsKLSAgRE8yKEQsQSxCLEMsMiw5LDB4ZmNlZmEzZjgpOwotICBETzIoQyxELEEsQiw3LDE0LDB4Njc2ZjAyZDkpOwotICBETzIoQixDLEQsQSwxMiwyMCwweDhkMmE0YzhhKTsKLQotICAvKiBSb3VuZCAzICovCi0KLSAgRE8zKEEsQixDLEQsNSw0LDB4ZmZmYTM5NDIpOwotICBETzMoRCxBLEIsQyw4LDExLDB4ODc3MWY2ODEpOwotICBETzMoQyxELEEsQiwxMSwxNiwweDZkOWQ2MTIyKTsKLSAgRE8zKEIsQyxELEEsMTQsMjMsMHhmZGU1MzgwYyk7Ci0KLSAgRE8zKEEsQixDLEQsMSw0LDB4YTRiZWVhNDQpOwotICBETzMoRCxBLEIsQyw0LDExLDB4NGJkZWNmYTkpOwotICBETzMoQyxELEEsQiw3LDE2LDB4ZjZiYjRiNjApOwotICBETzMoQixDLEQsQSwxMCwyMywweGJlYmZiYzcwKTsKLQotICBETzMoQSxCLEMsRCwxMyw0LDB4Mjg5YjdlYzYpOwotICBETzMoRCxBLEIsQywwLDExLDB4ZWFhMTI3ZmEpOwotICBETzMoQyxELEEsQiwzLDE2LDB4ZDRlZjMwODUpOwotICBETzMoQixDLEQsQSw2LDIzLDB4NDg4MWQwNSk7Ci0KLSAgRE8zKEEsQixDLEQsOSw0LDB4ZDlkNGQwMzkpOwotICBETzMoRCxBLEIsQywxMiwxMSwweGU2ZGI5OWU1KTsKLSAgRE8zKEMsRCxBLEIsMTUsMTYsMHgxZmEyN2NmOCk7Ci0gIERPMyhCLEMsRCxBLDIsMjMsMHhjNGFjNTY2NSk7Ci0KLSAgLyogUm91bmQgNCAqLwotCi0gIERPNChBLEIsQyxELDAsNiwweGY0MjkyMjQ0KTsKLSAgRE80KEQsQSxCLEMsNywxMCwweDQzMmFmZjk3KTsKLSAgRE80KEMsRCxBLEIsMTQsMTUsMHhhYjk0MjNhNyk7Ci0gIERPNChCLEMsRCxBLDUsMjEsMHhmYzkzYTAzOSk7Ci0KLSAgRE80KEEsQixDLEQsMTIsNiwweDY1NWI1OWMzKTsKLSAgRE80KEQsQSxCLEMsMywxMCwweDhmMGNjYzkyKTsKLSAgRE80KEMsRCxBLEIsMTAsMTUsMHhmZmVmZjQ3ZCk7Ci0gIERPNChCLEMsRCxBLDEsMjEsMHg4NTg0NWRkMSk7Ci0KLSAgRE80KEEsQixDLEQsOCw2LDB4NmZhODdlNGYpOwotICBETzQoRCxBLEIsQywxNSwxMCwweGZlMmNlNmUwKTsKLSAgRE80KEMsRCxBLEIsNiwxNSwweGEzMDE0MzE0KTsKLSAgRE80KEIsQyxELEEsMTMsMjEsMHg0ZTA4MTFhMSk7Ci0KLSAgRE80KEEsQixDLEQsNCw2LDB4Zjc1MzdlODIpOwotICBETzQoRCxBLEIsQywxMSwxMCwweGJkM2FmMjM1KTsKLSAgRE80KEMsRCxBLEIsMiwxNSwweDJhZDdkMmJiKTsKLSAgRE80KEIsQyxELEEsOSwyMSwweGViODZkMzkxKTsKLQotICBBICs9IEFBOwotICBCICs9IEJCOwotICBDICs9IENDOwotICBEICs9IEREOwotfQotCi0vKgotICogRnJvbSBgUGVyZm9ybWFuY2UgYW5hbHlzaXMgb2YgTUQ1JyBieSBKb3NlcGggRC4gVG91Y2ggPHRvdWNoQGlzaS5lZHU+Ci0gKi8KLSNpZiAhZGVmaW5lZChfX0JZVEVfT1JERVIpIHx8ICFkZWZpbmVkIChfX0JJR19FTkRJQU4pCi0jZXJyb3IgX19CWVRFX09SREVSIG1hY3JvcyBub3QgZGVmaW5lZAotI2VuZGlmCi0KLSNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCi1zdGF0aWMgaW5saW5lIHVfaW50MzJfdAotc3dhcF91X2ludDMyX3QgKHVfaW50MzJfdCB0KQotewotICB1X2ludDMyX3QgdGVtcDEsIHRlbXAyOwotCi0gIHRlbXAxICAgPSBjc2hpZnQodCwgMTYpOwotICB0ZW1wMiAgID0gdGVtcDEgPj4gODsKLSAgdGVtcDEgICY9IDB4MDBmZjAwZmY7Ci0gIHRlbXAyICAmPSAweDAwZmYwMGZmOwotICB0ZW1wMSA8PD0gODsKLSAgcmV0dXJuIHRlbXAxIHwgdGVtcDI7Ci19Ci0jZW5kaWYKLQotc3RydWN0IHgzMnsKLSAgdW5zaWduZWQgaW50IGE6MzI7Ci0gIHVuc2lnbmVkIGludCBiOjMyOwotfTsKLQotdm9pZAotTUQ1X1VwZGF0ZSAoc3RydWN0IG1kNSAqbSwgY29uc3Qgdm9pZCAqdiwgc2l6ZV90IGxlbikKLXsKLSAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHY7Ci0gIHNpemVfdCBvbGRfc3ogPSBtLT5zelswXTsKLSAgc2l6ZV90IG9mZnNldDsKLQotICBtLT5zelswXSArPSBsZW4gKiA4OwotICBpZiAobS0+c3pbMF0gPCBvbGRfc3opCi0gICAgICArK20tPnN6WzFdOwotICBvZmZzZXQgPSAob2xkX3N6IC8gOCkgICUgNjQ7Ci0gIHdoaWxlKGxlbiA+IDApewotICAgIHNpemVfdCBsID0gbWluKGxlbiwgNjQgLSBvZmZzZXQpOwotICAgIG1lbWNweShtLT5zYXZlICsgb2Zmc2V0LCBwLCBsKTsKLSAgICBvZmZzZXQgKz0gbDsKLSAgICBwICs9IGw7Ci0gICAgbGVuIC09IGw7Ci0gICAgaWYob2Zmc2V0ID09IDY0KXsKLSNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCi0gICAgICBpbnQgaTsKLSAgICAgIHVfaW50MzJfdCBjdXJyZW50WzE2XTsKLSAgICAgIHN0cnVjdCB4MzIgKnUgPSAoc3RydWN0IHgzMiopbS0+c2F2ZTsKLSAgICAgIGZvcihpID0gMDsgaSA8IDg7IGkrKyl7Ci0JY3VycmVudFsyKmkrMF0gPSBzd2FwX3VfaW50MzJfdCh1W2ldLmEpOwotCWN1cnJlbnRbMippKzFdID0gc3dhcF91X2ludDMyX3QodVtpXS5iKTsKLSAgICAgIH0KLSAgICAgIGNhbGMobSwgY3VycmVudCk7Ci0jZWxzZQotICAgICAgY2FsYyhtLCAodV9pbnQzMl90KiltLT5zYXZlKTsKLSNlbmRpZgotICAgICAgb2Zmc2V0ID0gMDsKLSAgICB9Ci0gIH0KLX0KLQotdm9pZAotTUQ1X0ZpbmFsICh2b2lkICpyZXMsIHN0cnVjdCBtZDUgKm0pCi17Ci0gIHVuc2lnbmVkIGNoYXIgemVyb3NbNzJdOwotICB1bnNpZ25lZCBvZmZzZXQgPSAobS0+c3pbMF0gLyA4KSAlIDY0OwotICB1bnNpZ25lZCBpbnQgZHN0YXJ0ID0gKDEyMCAtIG9mZnNldCAtIDEpICUgNjQgKyAxOwotCi0gICp6ZXJvcyA9IDB4ODA7Ci0gIG1lbXNldCAoemVyb3MgKyAxLCAwLCBzaXplb2YoemVyb3MpIC0gMSk7Ci0gIHplcm9zW2RzdGFydCswXSA9IChtLT5zelswXSA+PiAwKSAmIDB4ZmY7Ci0gIHplcm9zW2RzdGFydCsxXSA9IChtLT5zelswXSA+PiA4KSAmIDB4ZmY7Ci0gIHplcm9zW2RzdGFydCsyXSA9IChtLT5zelswXSA+PiAxNikgJiAweGZmOwotICB6ZXJvc1tkc3RhcnQrM10gPSAobS0+c3pbMF0gPj4gMjQpICYgMHhmZjsKLSAgemVyb3NbZHN0YXJ0KzRdID0gKG0tPnN6WzFdID4+IDApICYgMHhmZjsKLSAgemVyb3NbZHN0YXJ0KzVdID0gKG0tPnN6WzFdID4+IDgpICYgMHhmZjsKLSAgemVyb3NbZHN0YXJ0KzZdID0gKG0tPnN6WzFdID4+IDE2KSAmIDB4ZmY7Ci0gIHplcm9zW2RzdGFydCs3XSA9IChtLT5zelsxXSA+PiAyNCkgJiAweGZmOwotICBNRDVfVXBkYXRlIChtLCB6ZXJvcywgZHN0YXJ0ICsgOCk7Ci0gIHsKLSAgICAgIGludCBpOwotICAgICAgdW5zaWduZWQgY2hhciAqciA9ICh1bnNpZ25lZCBjaGFyICopcmVzOwotCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0JICByWzQqaV0gICA9IG0tPmNvdW50ZXJbaV0gJiAweEZGOwotCSAgcls0KmkrMV0gPSAobS0+Y291bnRlcltpXSA+PiA4KSAmIDB4RkY7Ci0JICByWzQqaSsyXSA9IChtLT5jb3VudGVyW2ldID4+IDE2KSAmIDB4RkY7Ci0JICByWzQqaSszXSA9IChtLT5jb3VudGVyW2ldID4+IDI0KSAmIDB4RkY7Ci0gICAgICB9Ci0gIH0KLSNpZiAwCi0gIHsKLSAgICBpbnQgaTsKLSAgICB1X2ludDMyX3QgKnIgPSAodV9pbnQzMl90ICopcmVzOwotCi0gICAgZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgIHJbaV0gPSBzd2FwX3VfaW50MzJfdCAobS0+Y291bnRlcltpXSk7Ci0gIH0KLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbWQ1LmggYi9saWJjL2Jpb25pYy9tZDUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM4MTk5NC4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9tZDUuaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTUgLSAyMDAxIEt1bmdsaWdhIFRla25pc2thIEj2Z3Nrb2xhbgotICogKFJveWFsIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBTdG9ja2hvbG0sIFN3ZWRlbikuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIAotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEluc3RpdHV0ZSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIElOU1RJVFVURSBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIElOU1RJVFVURSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qICRIZWltZGFsOiBtZDUuaCx2IDEuOCAyMDAxLzAxLzI5IDAyOjA4OjU3IGFzc2FyIEV4cCAkCi0gICAkTmV0QlNEOiBtZDUuaCx2IDEuMS4xLjQgMjAwMi8wOS8xMiAxMjo0MTo0MiBqb2RhIEV4cCAkICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotc3RydWN0IG1kNSB7Ci0gIHVuc2lnbmVkIGludCBzelsyXTsKLSAgdV9pbnQzMl90IGNvdW50ZXJbNF07Ci0gIHVuc2lnbmVkIGNoYXIgc2F2ZVs2NF07Ci19OwotCi10eXBlZGVmIHN0cnVjdCBtZDUgTUQ1X0NUWDsKLQotdm9pZCBNRDVfSW5pdCAoc3RydWN0IG1kNSAqbSk7Ci12b2lkIE1ENV9VcGRhdGUgKHN0cnVjdCBtZDUgKm0sIGNvbnN0IHZvaWQgKnAsIHNpemVfdCBsZW4pOwotdm9pZCBNRDVfRmluYWwgKHZvaWQgKnJlcywgc3RydWN0IG1kNSAqbSk7IC8qIHVfaW50MzJfdCByZXNbNF0gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21lbWNweS5jIGIvbGliYy9iaW9uaWMvbWVtY3B5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYTc4YjIuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvbWVtY3B5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jZGVmaW5lIE1FTUNPUFkKLSNpbmNsdWRlICJiY29weS5jIgpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbWVtY3B5LmNwcCBiL2xpYmMvYmlvbmljL21lbWNweS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyN2U4NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL21lbWNweS5jcHAKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjdW5kZWYgX0ZPUlRJRllfU09VUkNFCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorCisvLyBPdXIgdW5vcHRpbWl6ZWQgbWVtY3B5IGp1c3QgY2FsbHMgdGhlIGJlc3QgYmNvcHkgYXZhaWxhYmxlLgorLy8gKEl0J3MgdGhpcyB3YXkgcm91bmQgcmF0aGVyIHRoYW4gdGhlIG9wcG9zaXRlIGJlY2F1c2Ugd2UncmUgYmFzZWQgb24gQlNEIHNvdXJjZS4pCit2b2lkKiBtZW1jcHkodm9pZCogZHN0LCBjb25zdCB2b2lkKiBzcmMsIHNpemVfdCBuKSB7CisgIGJjb3B5KHNyYywgZHN0LCBuKTsKKyAgcmV0dXJuIGRzdDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21lbW1vdmUuYyBiL2xpYmMvYmlvbmljL21lbW1vdmUuYwppbmRleCBhOWZjMWI1Li4zOWM3NjZlIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9tZW1tb3ZlLmMKKysrIGIvbGliYy9iaW9uaWMvbWVtbW92ZS5jCkBAIC0yNSwyMiArMjUsNiBAQAogICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KICAqLwotI3VuZGVmIF9GT1JUSUZZX1NPVVJDRQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KIAotdm9pZCAqbWVtbW92ZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCi17Ci0gIGNvbnN0IGNoYXIgKnAgPSBzcmM7Ci0gIGNoYXIgKnEgPSBkc3Q7Ci0gIC8qIFdlIGNhbiB1c2UgdGhlIG9wdGltaXplZCBtZW1jcHkgaWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24KLSAgICogZG9uJ3Qgb3ZlcmxhcC4KLSAgICovCi0gIGlmIChfX2J1aWx0aW5fZXhwZWN0KCgocSA8IHApICYmICgoc2l6ZV90KShwIC0gcSkgPj0gbikpCi0gICAgICAgICAgICAgICAgICAgIHx8ICgocCA8IHEpICYmICgoc2l6ZV90KShxIC0gcCkgPj0gbikpLCAxKSkgewotICAgIHJldHVybiBtZW1jcHkoZHN0LCBzcmMsIG4pOwotICB9IGVsc2UgewotICAgIGJjb3B5KHNyYywgZHN0LCBuKTsKLSAgICByZXR1cm4gZHN0OwotICB9Ci19CisjZGVmaW5lIE1FTU1PVkUKKyNpbmNsdWRlICJ1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9iY29weS5jIgpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbWVtc3dhcC5jIGIvbGliYy9iaW9uaWMvbWVtc3dhcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWIwYjMyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL21lbXN3YXAuYworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotdm9pZCBtZW1zd2FwKHZvaWQgKm0xLCB2b2lkICptMiwgc2l6ZV90IG4pCi17Ci0gICAgY2hhciogIHAgICAgID0gbTE7Ci0gICAgY2hhciogIHBfZW5kID0gcCArIG47Ci0gICAgY2hhciogIHEgICAgID0gbTI7Ci0KLSAgICB3aGlsZSAocCA8IHBfZW5kKSB7Ci0gICAgICAgIGNoYXIgIHRtcCA9ICpwOwotICAgICAgICAqcCA9ICpxOwotICAgICAgICAqcSA9IHRtcDsKLSAgICAgICAgcCsrOwotICAgICAgICBxKys7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbW1hcC5jcHAgYi9saWJjL2Jpb25pYy9tbWFwLmNwcAppbmRleCAyOGE0N2NjLi44ZjI1YTg5IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9tbWFwLmNwcAorKysgYi9saWJjL2Jpb25pYy9tbWFwLmNwcApAQCAtMzcsMTYgKzM3LDIzIEBACiAKICNkZWZpbmUgTU1BUDJfU0hJRlQgMTIgLy8gMioqMTIgPT0gNDA5NgogCitzdGF0aWMgYm9vbCBrZXJuZWxfaGFzX01BRFZfTUVSR0VBQkxFID0gdHJ1ZTsKKwogdm9pZCogbW1hcDY0KHZvaWQqIGFkZHIsIHNpemVfdCBzaXplLCBpbnQgcHJvdCwgaW50IGZsYWdzLCBpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0KSB7CiAgIGlmIChvZmZzZXQgPCAwIHx8IChvZmZzZXQgJiAoKDFVTCA8PCBNTUFQMl9TSElGVCktMSkpICE9IDApIHsKICAgICBlcnJubyA9IEVJTlZBTDsKICAgICByZXR1cm4gTUFQX0ZBSUxFRDsKICAgfQogCisgIGJvb2wgaXNfcHJpdmF0ZV9hbm9ueW1vdXMgPSAoZmxhZ3MgJiAoTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTKSkgIT0gMDsKICAgdm9pZCogcmVzdWx0ID0gX19tbWFwMihhZGRyLCBzaXplLCBwcm90LCBmbGFncywgZmQsIG9mZnNldCA+PiBNTUFQMl9TSElGVCk7Ci0gIGlmIChyZXN1bHQgIT0gTUFQX0ZBSUxFRCAmJiAoZmxhZ3MgJiAoTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTKSkgIT0gMCkgeworCisgIGlmIChyZXN1bHQgIT0gTUFQX0ZBSUxFRCAmJiBrZXJuZWxfaGFzX01BRFZfTUVSR0VBQkxFICYmIGlzX3ByaXZhdGVfYW5vbnltb3VzKSB7CiAgICAgRXJybm9SZXN0b3JlciBlcnJub19yZXN0b3JlcjsKLSAgICBtYWR2aXNlKHJlc3VsdCwgc2l6ZSwgTUFEVl9NRVJHRUFCTEUpOworICAgIGludCByYyA9IG1hZHZpc2UocmVzdWx0LCBzaXplLCBNQURWX01FUkdFQUJMRSk7CisgICAgaWYgKHJjID09IC0xICYmIGVycm5vID09IEVJTlZBTCkgeworICAgICAga2VybmVsX2hhc19NQURWX01FUkdFQUJMRSA9IGZhbHNlOworICAgIH0KICAgfQogCiAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tbnRlbnQuY3BwIGIvbGliYy9iaW9uaWMvbW50ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2I2OTE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbW50ZW50LmNwcApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxtbnRlbnQuaD4KKworbW50ZW50KiBnZXRtbnRlbnQoRklMRSopIHsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK21udGVudCogZ2V0bW50ZW50X3IoRklMRSosIHN0cnVjdCBtbnRlbnQqLCBjaGFyKiwgaW50KSB7CisgIHJldHVybiBOVUxMOworfQorCitGSUxFKiBzZXRtbnRlbnQoY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciogbW9kZSkgeworICByZXR1cm4gZm9wZW4ocGF0aCwgbW9kZSk7Cit9CisKK2ludCBlbmRtbnRlbnQoRklMRSogZnApIHsKKyAgaWYgKGZwICE9IE5VTEwpIHsKKyAgICBmY2xvc2UoZnApOworICB9CisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbmFtZV9tZW0uYyBiL2xpYmMvYmlvbmljL25hbWVfbWVtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZTEwYzIuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvbmFtZV9tZW0uYworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX25hbWVfbWVtLmgiCi0KLS8qCi0gKiBMb2NhbCBkZWZpbml0aW9ucyBvZiBjdXN0b20gcHJjdGwgYXJndW1lbnRzIHRvIHNldCBhIHZtYSBuYW1lIGluIHNvbWUga2VybmVscwotICovCi0jZGVmaW5lIEJJT05JQ19QUl9TRVRfVk1BICAgICAgICAgICAgICAgMHg1MzU2NGQ0MQotI2RlZmluZSBCSU9OSUNfUFJfU0VUX1ZNQV9BTk9OX05BTUUgICAgIDAKLQotLyoKLSAqIE5hbWVzIGEgcmVnaW9uIG9mIG1lbW9yeS4gIFRoZSBuYW1lIGlzIGV4cGVjdGVkIHRvIHNob3cgdXAgaW4gL3Byb2MvcGlkL21hcHMKLSAqIGFuZCAvcHJvYy9waWQvc21hcHMuICBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBpdCB3aWxsIHdvcmssIGFuZCBpdCBpZiBpdAotICogZG9lcyB3b3JrIGl0IGlzIGxpa2VseSB0byBvbmx5IHdvcmsgb24gbWVtb3J5IHRoYXQgd2FzIGFsbG9jYXRlZCB3aXRoCi0gKiBtbWFwKE1BUF9BTk9OWU1PVVMpLCBhbmQgb25seSBvbiByZWdpb25zIHRoYXQgYXJlIHBhZ2UgYWxpZ25lZC4gIG5hbWUgc2hvdWxkCi0gKiBiZSBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgdGhhdCBpcyB2YWxpZCBmb3IgYXMgbG9uZyBhcyB0aGUgbWVtb3J5IGlzIG1hcHBlZCwKLSAqIHByZWZlcmFibHkgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgc3RyaW5nLgotICoKLSAqIFJldHVybnMgLTEgb24gZXJyb3IgYW5kIHNldHMgZXJybm8uICBJZiBpdCByZXR1cm5zIGFuIGVycm9yIG5hbWluZyBwYWdlCi0gKiBhbGlnbmVkIGFub255bW91cyBtZW1vcnkgdGhlIGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgbmFtaW5nLCBhbmQgYW4gYWx0ZXJuYXRlCi0gKiBtZXRob2Qgb2YgbmFtaW5nIG1lbW9yeSBzaG91bGQgYmUgdXNlZCAobGlrZSBhc2htZW0pLgotICovCi1pbnQgX19iaW9uaWNfbmFtZV9tZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICByZXR1cm4gcHJjdGwoQklPTklDX1BSX1NFVF9WTUEsIEJJT05JQ19QUl9TRVRfVk1BX0FOT05fTkFNRSwKLSAgICAgICAgICAgICAgICAgYWRkciwgbGVuLCBuYW1lKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL25ka19jcnVmdC5jcHAgYi9saWJjL2Jpb25pYy9uZGtfY3J1ZnQuY3BwCmluZGV4IDM2MzdjM2UuLjgyOWU4ZjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL25ka19jcnVmdC5jcHAKKysrIGIvbGliYy9iaW9uaWMvbmRrX2NydWZ0LmNwcApAQCAtMjksMTggKzI5LDI3IEBACiAvLyBUaGlzIGZpbGUgcGVycGV0dWF0ZXMgdGhlIG1pc3Rha2VzIG9mIHRoZSBwYXN0LCBidXQgb25seSBmb3IgMzItYml0IHRhcmdldHMuCiAjaWYgIWRlZmluZWQoX19MUDY0X18pCiAKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KIAogLy8gVGhlc2Ugd2VyZSBhY2NpZGVudGFsbHkgZGVjbGFyZWQgaW4gPHVuaXN0ZC5oPiBiZWNhdXNlIHdlIHN0dXBpZGx5IHVzZWQgdG8gaW5saW5lCiAvLyBnZXRwYWdlc2l6ZSgpIGFuZCBfX2dldHBhZ2VzaGlmdCgpLiBOZWVkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkIE5ESyBhcHBzLgogZXh0ZXJuICJDIiB7CiAgIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZSA9IFBBR0VfU0laRTsKLSAgdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7CisgIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQgPSAxMjsKIH0KIAogLy8gVE9ETzogcmVtb3ZlIHRoaXMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBoYWNrIChmb3IgamItbXIxIHN0cmFjZSBiaW5hcmllcykuCkBAIC01OSw0ICs2OCwyNTYgQEAKICAgcmV0dXJuIF9fZ2V0X3RscygpOwogfQogCisvLyBUaGlzIG5vbi1zdGFuZGFyZCBmdW5jdGlvbiB3YXMgaW4gb3VyIDxzdHJpbmcuaD4gZm9yIHNvbWUgcmVhc29uLgorZXh0ZXJuICJDIiB2b2lkIG1lbXN3YXAodm9pZCogbTEsIHZvaWQqIG0yLCBzaXplX3QgbikgeworICBjaGFyKiBwID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obTEpOworICBjaGFyKiBwX2VuZCA9IHAgKyBuOworICBjaGFyKiBxID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obTIpOworICB3aGlsZSAocCA8IHBfZW5kKSB7CisgICAgY2hhciB0bXAgPSAqcDsKKyAgICAqcCA9ICpxOworICAgICpxID0gdG1wOworICAgIHArKzsKKyAgICBxKys7CisgIH0KK30KKworZXh0ZXJuICJDIiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkcihwdGhyZWFkX2F0dHJfdCosIHZvaWQqKSB7CisgIC8vIFRoaXMgd2FzIHJlbW92ZWQgZnJvbSBQT1NJWC4xLTIwMDgsIGFuZCBpcyBub3QgaW1wbGVtZW50ZWQgb24gYmlvbmljLgorICAvLyBOZWVkZWQgZm9yIEFCSSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIE5ESy4KKyAgcmV0dXJuIEVOT1NZUzsKK30KKworZXh0ZXJuICJDIiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkcihjb25zdCBwdGhyZWFkX2F0dHJfdCogYXR0ciwgdm9pZCoqIHN0YWNrX2FkZHIpIHsKKyAgLy8gVGhpcyB3YXMgcmVtb3ZlZCBmcm9tIFBPU0lYLjEtMjAwOC4KKyAgLy8gTmVlZGVkIGZvciBBQkkgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBOREsuCisgICpzdGFja19hZGRyID0gKGNoYXIqKWF0dHItPnN0YWNrX2Jhc2UgKyBhdHRyLT5zdGFja19zaXplOworICByZXR1cm4gMDsKK30KKworLy8gTm9uLXN0YW5kYXJkIGNydWZ0IHRoYXQgc2hvdWxkIG9ubHkgZXZlciBoYXZlIGJlZW4gaW4gc3lzdGVtL2NvcmUvdG9vbGJveC4KK2V4dGVybiAiQyIgY2hhciogc3RydG90aW1ldmFsKGNvbnN0IGNoYXIqIHN0ciwgc3RydWN0IHRpbWV2YWwqIHRzKSB7CisgIGNoYXIqIHM7CisgIHRzLT50dl9zZWMgPSBzdHJ0b3VtYXgoc3RyLCAmcywgMTApOworCisgIGxvbmcgZnJhY3Rpb25hbF9zZWNvbmRzID0gMDsKKyAgaWYgKCpzID09ICcuJykgeworICAgIHMrKzsKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgLy8gUmVhZCB1cCB0byA2IGRpZ2l0cyAobWljcm9zZWNvbmRzKS4KKyAgICB3aGlsZSAoKnMgJiYgaXNkaWdpdCgqcykpIHsKKyAgICAgIGlmICgrK2NvdW50IDwgNykgeworICAgICAgICBmcmFjdGlvbmFsX3NlY29uZHMgPSBmcmFjdGlvbmFsX3NlY29uZHMqMTAgKyAoKnMgLSAnMCcpOworICAgICAgfQorICAgICAgcysrOworICAgIH0KKworICAgIGZvciAoOyBjb3VudCA8IDY7IGNvdW50KyspIHsKKyAgICAgIGZyYWN0aW9uYWxfc2Vjb25kcyAqPSAxMDsKKyAgICB9CisgIH0KKworICB0cy0+dHZfdXNlYyA9IGZyYWN0aW9uYWxfc2Vjb25kczsKKyAgcmV0dXJuIHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRpZ2l0dmFsKGludCBjaCkgeworICB1bnNpZ25lZCBkOworCisgIGQgPSAodW5zaWduZWQpKGNoIC0gJzAnKTsKKyAgaWYgKGQgPCAxMCkgcmV0dXJuIChpbnQpZDsKKworICBkID0gKHVuc2lnbmVkKShjaCAtICdhJyk7CisgIGlmIChkIDwgNikgcmV0dXJuIChpbnQpKGQrMTApOworCisgIGQgPSAodW5zaWduZWQpKGNoIC0gJ0EnKTsKKyAgaWYgKGQgPCA2KSByZXR1cm4gKGludCkoZCsxMCk7CisKKyAgcmV0dXJuIC0xOworfQorCisvLyBUaGlzIG5vbi1zdGFuZGFyZCBmdW5jdGlvbiB3YXMgaW4gb3VyIDxpbnR0eXBlcy5oPiBmb3Igc29tZSByZWFzb24uCitleHRlcm4gIkMiIHVpbnRtYXhfdCBzdHJudG91bWF4KGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlLCBzaXplX3QgbikgeworICBjb25zdCB1bnNpZ25lZCBjaGFyKiAgcCAgID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilucHRyOworICBjb25zdCB1bnNpZ25lZCBjaGFyKiAgZW5kID0gcCArIG47CisgIGludCAgICAgICAgICAgICAgICAgICBtaW51cyA9IDA7CisgIHVpbnRtYXhfdCAgICAgICAgICAgICB2ID0gMDsKKyAgaW50ICAgICAgICAgICAgICAgICAgIGQ7CisKKyAgd2hpbGUgKHAgPCBlbmQgJiYgaXNzcGFjZSgqcCkpIHsKKyAgICBwKys7CisgIH0KKworICBpZiAocCA8IGVuZCkgeworICAgIGNoYXIgYyA9IHBbMF07CisgICAgaWYgKGMgPT0gJy0nIHx8IGMgPT0gJysnKSB7CisgICAgICBtaW51cyA9IChjID09ICctJyk7CisgICAgICBwKys7CisgICAgfQorICB9CisKKyAgaWYgKGJhc2UgPT0gMCkgeworICAgIGlmIChwKzIgPCBlbmQgJiYgcFswXSA9PSAnMCcgJiYgKHBbMV0gPT0gJ3gnIHx8IHBbMV0gPT0gJ1gnKSkgeworICAgICAgcCArPSAyOworICAgICAgYmFzZSA9IDE2OworICAgIH0gZWxzZSBpZiAocCsxIDwgZW5kICYmIHBbMF0gPT0gJzAnKSB7CisgICAgICBwICAgKz0gMTsKKyAgICAgIGJhc2UgPSA4OworICAgIH0gZWxzZSB7CisgICAgICBiYXNlID0gMTA7CisgICAgfQorICB9IGVsc2UgaWYgKGJhc2UgPT0gMTYpIHsKKyAgICBpZiAocCsyIDwgZW5kICYmIHBbMF0gPT0gJzAnICYmIChwWzFdID09ICd4JyB8fCBwWzFdID09ICdYJykpIHsKKyAgICAgIHAgKz0gMjsKKyAgICB9CisgIH0KKworICB3aGlsZSAocCA8IGVuZCAmJiAoZCA9IGRpZ2l0dmFsKCpwKSkgPj0gMCAmJiBkIDwgYmFzZSkgeworICAgIHYgPSB2KmJhc2UgKyBkOworICAgIHAgKz0gMTsKKyAgfQorCisgIGlmIChlbmRwdHIpIHsKKyAgICAqZW5kcHRyID0gKGNoYXIqKSBwOworICB9CisKKyAgcmV0dXJuIG1pbnVzID8gLXYgOiB2OworfQorCisvLyBUaGlzIG5vbi1zdGFuZGFyZCBmdW5jdGlvbiB3YXMgaW4gb3VyIDxpbnR0eXBlcy5oPiBmb3Igc29tZSByZWFzb24uCitleHRlcm4gIkMiIGludG1heF90IHN0cm50b2ltYXgoY29uc3QgY2hhciogbnB0ciwgY2hhcioqIGVuZHB0ciwgaW50IGJhc2UsIHNpemVfdCBuKSB7CisgIHJldHVybiAoaW50bWF4X3QpIHN0cm50b3VtYXgobnB0ciwgZW5kcHRyLCBiYXNlLCBuKTsKK30KKworLy8gUE9TSVggY2FsbHMgdGhpcyBkcHJpbnRmLCBidXQgTFAzMiBBbmRyb2lkIGhhZCBmZHByaW50ZiBpbnN0ZWFkLgorZXh0ZXJuICJDIiBpbnQgZmRwcmludGYoaW50IGZkLCBjb25zdCBjaGFyKiBmbXQsIC4uLikgeworICB2YV9saXN0IGFwOworICB2YV9zdGFydChhcCwgZm10KTsKKyAgaW50IHJjID0gdmRwcmludGYoZmQsIGZtdCwgYXApOworICB2YV9lbmQoYXApOworICByZXR1cm4gcmM7Cit9CisKKy8vIFBPU0lYIGNhbGxzIHRoaXMgdmRwcmludGYsIGJ1dCBMUDMyIEFuZHJvaWQgaGFkIGZkcHJpbnRmIGluc3RlYWQuCitleHRlcm4gIkMiIGludCB2ZmRwcmludGYoaW50IGZkLCBjb25zdCBjaGFyKiBmbXQsIHZhX2xpc3QgYXApIHsKKyAgcmV0dXJuIHZkcHJpbnRmKGZkLCBmbXQsIGFwKTsKK30KKworI2RlZmluZSBfX2Z1dGV4X3dha2UgX19yZWFsX2Z1dGV4X3dha2UKKyNkZWZpbmUgX19mdXRleF93YWl0IF9fcmVhbF9mdXRleF93YWl0CisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfZnV0ZXguaCIKKyN1bmRlZiBfX2Z1dGV4X3dha2UKKyN1bmRlZiBfX2Z1dGV4X3dhaXQKKworLy8gVGhpcyB1c2VkIHRvIGJlIGluIDxzeXMvYXRvbWljcy5oPi4KK2V4dGVybiAiQyIgaW50IF9fZnV0ZXhfd2FrZSh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCBjb3VudCkgeworICByZXR1cm4gX19yZWFsX2Z1dGV4X3dha2UoZnR4LCBjb3VudCk7Cit9CisKKy8vIFRoaXMgdXNlZCB0byBiZSBpbiA8c3lzL2F0b21pY3MuaD4uCitleHRlcm4gIkMiIGludCBfX2Z1dGV4X3dhaXQodm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgdmFsdWUsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogdGltZW91dCkgeworICByZXR1cm4gX19yZWFsX2Z1dGV4X3dhaXQoZnR4LCB2YWx1ZSwgdGltZW91dCk7Cit9CisKKy8vIFVuaXR5J3MgbGlibW9ubyB1c2VzIHRoaXMuCitleHRlcm4gIkMiIGludCB0a2lsbChwaWRfdCB0aWQsIGludCBzaWcpIHsKKyAgcmV0dXJuIHN5c2NhbGwoX19OUl90a2lsbCwgdGlkLCBzaWcpOworfQorCisvLyBUaGlzIHdhcyByZW1vdmVkIGZyb20gUE9TSVggMjAwOC4KK2V4dGVybiAiQyIgd2NoYXJfdCogd2Nzd2NzKHdjaGFyX3QqIGhheXN0YWNrLCB3Y2hhcl90KiBuZWVkbGUpIHsKKyAgcmV0dXJuIHdjc3N0cihoYXlzdGFjaywgbmVlZGxlKTsKK30KKworLy8gVGhpcyB3YXMgcmVtb3ZlZCBmcm9tIFBPU0lYIDIwMDguCitleHRlcm4gIkMiIHNpZ2hhbmRsZXJfdCBic2Rfc2lnbmFsKGludCBzaWdudW0sIHNpZ2hhbmRsZXJfdCBoYW5kbGVyKSB7CisgIHJldHVybiBzaWduYWwoc2lnbnVtLCBoYW5kbGVyKTsKK30KKworLy8gc3lzdl9zaWduYWwoKSB3YXMgbmV2ZXIgaW4gUE9TSVguCitleHRlcm4gc2lnaGFuZGxlcl90IF9zaWduYWwoaW50IHNpZ251bSwgc2lnaGFuZGxlcl90IGhhbmRsZXIsIGludCBmbGFncyk7CitleHRlcm4gIkMiIHNpZ2hhbmRsZXJfdCBzeXN2X3NpZ25hbChpbnQgc2lnbnVtLCBzaWdoYW5kbGVyX3QgaGFuZGxlcikgeworICByZXR1cm4gX3NpZ25hbChzaWdudW0sIGhhbmRsZXIsIFNBX1JFU0VUSEFORCk7Cit9CisKKy8vIFRoaXMgaXMgYSBzeXN0ZW0gY2FsbCB0aGF0IHdhcyBuZXZlciBpbiBQT1NJWC4gVXNlIHJlYWRkaXIoMykgaW5zdGVhZC4KK2V4dGVybiAiQyIgaW50IF9fZ2V0ZGVudHM2NCh1bnNpZ25lZCBpbnQsIGRpcmVudCosIHVuc2lnbmVkIGludCk7CitleHRlcm4gIkMiIGludCBnZXRkZW50cyh1bnNpZ25lZCBpbnQgZmQsIGRpcmVudCogZGlycCwgdW5zaWduZWQgaW50IGNvdW50KSB7CisgIHJldHVybiBfX2dldGRlbnRzNjQoZmQsIGRpcnAsIGNvdW50KTsKK30KKworLy8gVGhpcyBpcyBhIEJTRGlzbSB0aGF0IHdlIG5ldmVyIGltcGxlbWVudGVkIGNvcnJlY3RseS4gVXNlZCBieSBGaXJlZm94LgorZXh0ZXJuICJDIiBpbnQgaXNzZXR1Z2lkKCkgeworICByZXR1cm4gMDsKK30KKworLy8gVGhpcyB3YXMgcmVtb3ZlZCBmcm9tIFBPU0lYIDIwMDQuCitleHRlcm4gIkMiIHBpZF90IHdhaXQzKGludCogc3RhdHVzLCBpbnQgb3B0aW9ucywgc3RydWN0IHJ1c2FnZSogcnVzYWdlKSB7CisgIHJldHVybiB3YWl0NCgtMSwgc3RhdHVzLCBvcHRpb25zLCBydXNhZ2UpOworfQorCisvLyBUaGlzIHdhcyByZW1vdmVkIGZyb20gUE9TSVggMjAwNC4KK2V4dGVybiAiQyIgaW50IGdldGR0YWJsZXNpemUoKSB7CisgIHN0cnVjdCBybGltaXQgcjsKKworICBpZiAoZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZyKSA8IDApIHsKKyAgICByZXR1cm4gc3lzY29uZihfU0NfT1BFTl9NQVgpOworICB9CisKKyAgcmV0dXJuIHIucmxpbV9jdXI7Cit9CisKKy8vIE9ubHkgdXNlZCBieSBmdGltZSwgd2hpY2ggd2FzIHJlbW92ZWQgZnJvbSBQT1NJWCAyMDA4Lgorc3RydWN0IHRpbWViIHsKKyAgdGltZV90ICAgICAgICAgIHRpbWU7CisgIHVuc2lnbmVkIHNob3J0ICBtaWxsaXRtOworICBzaG9ydCAgICAgICAgICAgdGltZXpvbmU7CisgIHNob3J0ICAgICAgICAgICBkc3RmbGFnOworfTsKKworLy8gVGhpcyB3YXMgcmVtb3ZlZCBmcm9tIFBPU0lYIDIwMDguCitleHRlcm4gIkMiIGludCBmdGltZShzdHJ1Y3QgdGltZWIqIHRiKSB7CisgIHN0cnVjdCB0aW1ldmFsICB0djsKKyAgc3RydWN0IHRpbWV6b25lIHR6OworCisgIGlmIChnZXR0aW1lb2ZkYXkoJnR2LCAmdHopIDwgMCkKKyAgICByZXR1cm4gLTE7CisKKyAgdGItPnRpbWUgICAgPSB0di50dl9zZWM7CisgIHRiLT5taWxsaXRtID0gKHR2LnR2X3VzZWMgKyA1MDApIC8gMTAwMDsKKworICBpZiAodGItPm1pbGxpdG0gPT0gMTAwMCkgeworICAgICsrdGItPnRpbWU7CisgICAgdGItPm1pbGxpdG0gPSAwOworICB9CisKKyAgdGItPnRpbWV6b25lID0gdHoudHpfbWludXRlc3dlc3Q7CisgIHRiLT5kc3RmbGFnICA9IHR6LnR6X2RzdHRpbWU7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8vIFRoaXMgd2FzIHJlbW92ZWQgZnJvbSBQT1NJWCAyMDA4LgorZXh0ZXJuICJDIiBjaGFyKiBpbmRleChjb25zdCBjaGFyKiBzdHIsIGludCBjaCkgeworICByZXR1cm4gc3RyY2hyKHN0ciwgY2gpOworfQorCisvLyBUaGlzIHdhcyByZW1vdmVkIGZyb20gQlNELgorZXh0ZXJuICJDIiB2b2lkIGFyYzRyYW5kb21fc3Rpcih2b2lkKSB7CisgIC8vIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHN0aXJzIGl0c2VsZiBhcyBuZWVkZWQuCit9CisKKy8vIFRoaXMgd2FzIHJlbW92ZWQgZnJvbSBCU0QuCitleHRlcm4gIkMiIHZvaWQgYXJjNHJhbmRvbV9hZGRyYW5kb20odW5zaWduZWQgY2hhciosIGludCkgeworICAvLyBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhZGRzIHJhbmRvbW5lc3MgYXMgbmVlZGVkLgorfQorCisvLyBPbGQgdmVyc2lvbnMgb2YgdGhlIE5ESyBkaWQgbm90IGV4cG9ydCBtYWxsb2NfdXNhYmxlX3NpemUsIGJ1dCBkaWQKKy8vIGV4cG9ydCBkbG1hbGxvY191c2FibGVfc2l6ZS4gV2UgYXJlIG1vdmluZyBhd2F5IGZyb20gZGxtYWxsb2MgaW4gTAorLy8gc28gbWFrZSB0aGlzIGNhbGwgbWFsbG9jX3VzYWJsZV9zaXplLgorZXh0ZXJuICJDIiBzaXplX3QgZGxtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogcHRyKSB7CisgIHJldHVybiBtYWxsb2NfdXNhYmxlX3NpemUocHRyKTsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9uZXcuY3BwIGIvbGliYy9iaW9uaWMvbmV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2ZkMWJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbmV3LmNwcApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bmV3PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKKworY29uc3Qgc3RkOjpub3Rocm93X3Qgc3RkOjpub3Rocm93ID0ge307CisKK3ZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCBzaXplKSB7CisgICAgdm9pZCogcCA9IG1hbGxvYyhzaXplKTsKKyAgICBpZiAocCA9PSBOVUxMKSB7CisgICAgICAgIF9fbGliY19mYXRhbCgibmV3IGZhaWxlZCB0byBhbGxvY2F0ZSAlenUgYnl0ZXMiLCBzaXplKTsKKyAgICB9CisgICAgcmV0dXJuIHA7Cit9CisKK3ZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90IHNpemUpIHsKKyAgICB2b2lkKiBwID0gbWFsbG9jKHNpemUpOworICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgX19saWJjX2ZhdGFsKCJuZXdbXSBmYWlsZWQgdG8gYWxsb2NhdGUgJXp1IGJ5dGVzIiwgc2l6ZSk7CisgICAgfQorICAgIHJldHVybiBwOworfQorCit2b2lkICBvcGVyYXRvciBkZWxldGUodm9pZCogcHRyKSB7CisgICAgZnJlZShwdHIpOworfQorCit2b2lkICBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiBwdHIpIHsKKyAgICBmcmVlKHB0cik7Cit9CisKK3ZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCBzaXplLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHsKKyAgICByZXR1cm4gbWFsbG9jKHNpemUpOworfQorCit2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCBzaXplLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHsKKyAgICByZXR1cm4gbWFsbG9jKHNpemUpOworfQorCit2b2lkICBvcGVyYXRvciBkZWxldGUodm9pZCogcHRyLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHsKKyAgICBmcmVlKHB0cik7Cit9CisKK3ZvaWQgIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqIHB0ciwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB7CisgICAgZnJlZShwdHIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvb3Blbi5jcHAgYi9saWJjL2Jpb25pYy9vcGVuLmNwcAppbmRleCA5ODZlZDFjLi5iZDgzMmMwIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9vcGVuLmNwcAorKysgYi9saWJjL2Jpb25pYy9vcGVuLmNwcApAQCAtNDMsNiArNDMsMTEgQEAKICNlbmRpZgogfQogCitpbnQgY3JlYXQoY29uc3QgY2hhciogcGF0aG5hbWUsIG1vZGVfdCBtb2RlKSB7CisgIHJldHVybiBvcGVuKHBhdGhuYW1lLCBPX0NSRUFUIHwgT19UUlVOQyB8IE9fV1JPTkxZLCBtb2RlKTsKK30KK19fc3Ryb25nX2FsaWFzKGNyZWF0NjQsIGNyZWF0KTsKKwogaW50IG9wZW4oY29uc3QgY2hhciogcGF0aG5hbWUsIGludCBmbGFncywgLi4uKSB7CiAgIG1vZGVfdCBtb2RlID0gMDsKIApAQCAtNTUsNiArNjAsNyBAQAogCiAgIHJldHVybiBfX29wZW5hdChBVF9GRENXRCwgcGF0aG5hbWUsIGZvcmNlX09fTEFSR0VGSUxFKGZsYWdzKSwgbW9kZSk7CiB9CitfX3N0cm9uZ19hbGlhcyhvcGVuNjQsIG9wZW4pOwogCiBpbnQgX19vcGVuXzIoY29uc3QgY2hhciogcGF0aG5hbWUsIGludCBmbGFncykgewogICBpZiAoX19wcmVkaWN0X2ZhbHNlKChmbGFncyAmIE9fQ1JFQVQpICE9IDApKSB7CkBAIC03Niw2ICs4Miw3IEBACiAKICAgcmV0dXJuIF9fb3BlbmF0KGZkLCBwYXRobmFtZSwgZm9yY2VfT19MQVJHRUZJTEUoZmxhZ3MpLCBtb2RlKTsKIH0KK19fc3Ryb25nX2FsaWFzKG9wZW5hdDY0LCBvcGVuYXQpOwogCiBpbnQgX19vcGVuYXRfMihpbnQgZmQsIGNvbnN0IGNoYXIqIHBhdGhuYW1lLCBpbnQgZmxhZ3MpIHsKICAgaWYgKChmbGFncyAmIE9fQ1JFQVQpICE9IDApIHsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3BlcnJvci5jIGIvbGliYy9iaW9uaWMvcGVycm9yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNTVmNzIuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvcGVycm9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotdm9pZCBwZXJyb3IoY29uc3QgY2hhciAqcHJlZml4KQotewotICAgIGNoYXIgICBidWZmWzI1Nl07Ci0KLSAgICBzdHJlcnJvcl9yKCBlcnJubywgYnVmZiwgc2l6ZW9mKGJ1ZmYpICk7Ci0KLSAgICBpZiAocHJlZml4KSB7Ci0gICAgICAgIHdyaXRlKCAyLCBwcmVmaXgsIHN0cmxlbihwcmVmaXgpICk7Ci0gICAgICAgIHdyaXRlKCAyLCAiOiAiLCAyICk7Ci0gICAgfQotICAgIHdyaXRlKCAyLCBidWZmLCBzdHJsZW4oYnVmZikgKTsKLSAgICB3cml0ZSggMiwgIlxuIiwgMSApOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcG9zaXhfZmFkdmlzZS5jcHAgYi9saWJjL2Jpb25pYy9wb3NpeF9mYWR2aXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTc0YWYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvcG9zaXhfZmFkdmlzZS5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgInByaXZhdGUvRXJybm9SZXN0b3Jlci5oIgorCitleHRlcm4gIkMiIGludCBfX2FybV9mYWR2aXNlNjRfNjQoaW50LCBpbnQsIG9mZjY0X3QsIG9mZjY0X3QpOworZXh0ZXJuICJDIiBpbnQgX19mYWR2aXNlNjQoaW50LCBvZmY2NF90LCBvZmY2NF90LCBpbnQpOworCisvLyBObyBhcmNoaXRlY3R1cmUgYWN0dWFsbHkgaGFzIHRoZSAzMi1iaXQgb2ZmX3Qgc3lzdGVtIGNhbGwuCitpbnQgcG9zaXhfZmFkdmlzZShpbnQgZmQsIG9mZl90IG9mZnNldCwgb2ZmX3QgbGVuZ3RoLCBpbnQgYWR2aWNlKSB7CisgIHJldHVybiBwb3NpeF9mYWR2aXNlNjQoZmQsIG9mZnNldCwgbGVuZ3RoLCBhZHZpY2UpOworfQorCisjaWYgZGVmaW5lZChfX2FybV9fKQoraW50IHBvc2l4X2ZhZHZpc2U2NChpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LCBvZmY2NF90IGxlbmd0aCwgaW50IGFkdmljZSkgeworICBFcnJub1Jlc3RvcmVyIGVycm5vX3Jlc3RvcmVyOworICByZXR1cm4gKF9fYXJtX2ZhZHZpc2U2NF82NChmZCwgYWR2aWNlLCBvZmZzZXQsIGxlbmd0aCkgPT0gMCkgPyAwIDogZXJybm87Cit9CisjZWxzZQoraW50IHBvc2l4X2ZhZHZpc2U2NChpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LCBvZmY2NF90IGxlbmd0aCwgaW50IGFkdmljZSkgeworICBFcnJub1Jlc3RvcmVyIGVycm5vX3Jlc3RvcmVyOworICByZXR1cm4gKF9fZmFkdmlzZTY0KGZkLCBvZmZzZXQsIGxlbmd0aCwgYWR2aWNlKSA9PSAwKSA/IDAgOiBlcnJubzsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcG9zaXhfZmFsbG9jYXRlLmNwcCBiL2xpYmMvYmlvbmljL3Bvc2l4X2ZhbGxvY2F0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRjMTYzNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3Bvc2l4X2ZhbGxvY2F0ZS5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgInByaXZhdGUvRXJybm9SZXN0b3Jlci5oIgorCitpbnQgcG9zaXhfZmFsbG9jYXRlKGludCBmZCwgb2ZmX3Qgb2Zmc2V0LCBvZmZfdCBsZW5ndGgpIHsKKyAgRXJybm9SZXN0b3JlciBlcnJub19yZXN0b3JlcjsKKyAgcmV0dXJuIChmYWxsb2NhdGUoZmQsIDAsIG9mZnNldCwgbGVuZ3RoKSA9PSAwKSA/IDAgOiBlcnJubzsKK30KKworaW50IHBvc2l4X2ZhbGxvY2F0ZTY0KGludCBmZCwgb2ZmNjRfdCBvZmZzZXQsIG9mZjY0X3QgbGVuZ3RoKSB7CisgIEVycm5vUmVzdG9yZXIgZXJybm9fcmVzdG9yZXI7CisgIHJldHVybiAoZmFsbG9jYXRlNjQoZmQsIDAsIG9mZnNldCwgbGVuZ3RoKSA9PSAwKSA/IDAgOiBlcnJubzsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3Bvc2l4X3RpbWVycy5jcHAgYi9saWJjL2Jpb25pYy9wb3NpeF90aW1lcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZDBlZjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9wb3NpeF90aW1lcnMuY3BwCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfZnV0ZXguaCIKKyNpbmNsdWRlICJwcml2YXRlL2tlcm5lbF9zaWdzZXRfdC5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvLyBTeXN0ZW0gY2FsbHMuCitleHRlcm4gIkMiIGludCBfX3J0X3NpZ3RpbWVkd2FpdChjb25zdCBzaWdzZXRfdCosIHNpZ2luZm9fdCosIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyosIHNpemVfdCk7CitleHRlcm4gIkMiIGludCBfX3RpbWVyX2NyZWF0ZShjbG9ja2lkX3QsIHNpZ2V2ZW50KiwgX19rZXJuZWxfdGltZXJfdCopOworZXh0ZXJuICJDIiBpbnQgX190aW1lcl9kZWxldGUoX19rZXJuZWxfdGltZXJfdCk7CitleHRlcm4gIkMiIGludCBfX3RpbWVyX2dldG92ZXJydW4oX19rZXJuZWxfdGltZXJfdCk7CitleHRlcm4gIkMiIGludCBfX3RpbWVyX2dldHRpbWUoX19rZXJuZWxfdGltZXJfdCwgaXRpbWVyc3BlYyopOworZXh0ZXJuICJDIiBpbnQgX190aW1lcl9zZXR0aW1lKF9fa2VybmVsX3RpbWVyX3QsIGludCwgY29uc3QgaXRpbWVyc3BlYyosIGl0aW1lcnNwZWMqKTsKKworLy8gTW9zdCBQT1NJWCB0aW1lcnMgYXJlIGhhbmRsZWQgZGlyZWN0bHkgYnkgdGhlIGtlcm5lbC4gV2UgdHJhbnNsYXRlIFNJR0VWX1RIUkVBRCB0aW1lcnMKKy8vIGludG8gU0lHRVZfVEhSRUFEX0lEIHRpbWVycyBzbyB0aGUga2VybmVsIGhhbmRsZXMgYWxsIHRoZSB0aW1lLXJlbGF0ZWQgc3R1ZmYgYW5kIHdlIGp1c3QKKy8vIG5lZWQgdG8gd29ycnkgYWJvdXQgcnVubmluZyB1c2VyIGNvZGUgb24gYSB0aHJlYWQuCisKKy8vIFdlIGNhbid0IHVzZSBTSUdBTFJNIGJlY2F1c2UgdG9vIG1hbnkgb3RoZXIgQyBsaWJyYXJ5IGZ1bmN0aW9ucyB0aHJvdyB0aGF0IGFyb3VuZCwgYW5kIHNpbmNlCisvLyB0aGV5IGRvbid0IHNlbmQgdG8gYSBzcGVjaWZpYyB0aHJlYWQsIGFsbCB0aHJlYWRzIGFyZSBlbGlnaWJsZSB0byBoYW5kbGUgdGhlIHNpZ25hbCBhbmQgd2UgY2FuCisvLyBlbmQgdXAgd2l0aCBvbmUgb2Ygb3VyIFBPU0lYIHRpbWVyIHRocmVhZHMgaGFuZGxpbmcgaXQgKG1lYW5pbmcgdGhhdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50CisvLyBkb2Vzbid0KS4gZ2xpYmMgdXNlcyBTSUdSVE1JTiBmb3IgaXRzIFBPU0lYIHRpbWVyIGltcGxlbWVudGF0aW9uLCBzbyBpbiB0aGUgYWJzZW5jZSBvZiBhbnkKKy8vIHJlYXNvbiB0byB1c2UgYW55dGhpbmcgZWxzZSwgd2UgdXNlIHRoYXQgdG9vLgorc3RhdGljIGNvbnN0IGludCBUSU1FUl9TSUdOQUwgPSAoX19TSUdSVE1JTiArIDApOworCitzdHJ1Y3QgUG9zaXhUaW1lciB7CisgIF9fa2VybmVsX3RpbWVyX3Qga2VybmVsX3RpbWVyX2lkOworCisgIGludCBzaWdldl9ub3RpZnk7CisKKyAgLy8gVGhlc2UgZmllbGRzIGFyZSBvbmx5IG5lZWRlZCBmb3IgYSBTSUdFVl9USFJFQUQgdGltZXIuCisgIHB0aHJlYWRfdCBjYWxsYmFja190aHJlYWQ7CisgIHZvaWQgKCpjYWxsYmFjaykoc2lndmFsX3QpOworICBzaWd2YWxfdCBjYWxsYmFja19hcmd1bWVudDsKK307CisKK3N0YXRpYyBfX2tlcm5lbF90aW1lcl90IHRvX2tlcm5lbF90aW1lcl9pZCh0aW1lcl90IHRpbWVyKSB7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PFBvc2l4VGltZXIqPih0aW1lciktPmtlcm5lbF90aW1lcl9pZDsKK30KKworc3RhdGljIHZvaWQqIF9fdGltZXJfdGhyZWFkX3N0YXJ0KHZvaWQqIGFyZykgeworICBQb3NpeFRpbWVyKiB0aW1lciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UG9zaXhUaW1lcio+KGFyZyk7CisKKyAga2VybmVsX3NpZ3NldF90IHNpZ3NldDsKKyAgc2lnYWRkc2V0KHNpZ3NldC5nZXQoKSwgVElNRVJfU0lHTkFMKTsKKworICB3aGlsZSAodHJ1ZSkgeworICAgIC8vIFdhaXQgZm9yIGEgc2lnbmFsLi4uCisgICAgc2lnaW5mb190IHNpOworICAgIG1lbXNldCgmc2ksIDAsIHNpemVvZihzaSkpOworICAgIGludCByYyA9IF9fcnRfc2lndGltZWR3YWl0KHNpZ3NldC5nZXQoKSwgJnNpLCBOVUxMLCBzaXplb2Yoc2lnc2V0KSk7CisgICAgaWYgKHJjID09IC0xKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZiAoc2kuc2lfY29kZSA9PSBTSV9USU1FUikgeworICAgICAgLy8gVGhpcyBzaWduYWwgd2FzIHNlbnQgYmVjYXVzZSBhIHRpbWVyIGZpcmVkLCBzbyBjYWxsIHRoZSBjYWxsYmFjay4KKyAgICAgIHRpbWVyLT5jYWxsYmFjayh0aW1lci0+Y2FsbGJhY2tfYXJndW1lbnQpOworICAgIH0gZWxzZSBpZiAoc2kuc2lfY29kZSA9PSBTSV9US0lMTCkgeworICAgICAgLy8gVGhpcyBzaWduYWwgd2FzIHNlbnQgYmVjYXVzZSBzb21lb25lIHdhbnRzIHVzIHRvIGV4aXQuCisgICAgICBmcmVlKHRpbWVyKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgdm9pZCBfX3RpbWVyX3RocmVhZF9zdG9wKFBvc2l4VGltZXIqIHRpbWVyKSB7CisgIHB0aHJlYWRfa2lsbCh0aW1lci0+Y2FsbGJhY2tfdGhyZWFkLCBUSU1FUl9TSUdOQUwpOworfQorCisvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvdGltZXJfY3JlYXRlLmh0bWwKK2ludCB0aW1lcl9jcmVhdGUoY2xvY2tpZF90IGNsb2NrX2lkLCBzaWdldmVudCogZXZwLCB0aW1lcl90KiB0aW1lcl9pZCkgeworICBQb3NpeFRpbWVyKiB0aW1lciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UG9zaXhUaW1lcio+KG1hbGxvYyhzaXplb2YoUG9zaXhUaW1lcikpKTsKKyAgaWYgKHRpbWVyID09IE5VTEwpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICB0aW1lci0+c2lnZXZfbm90aWZ5ID0gKGV2cCA9PSBOVUxMKSA/IFNJR0VWX1NJR05BTCA6IGV2cC0+c2lnZXZfbm90aWZ5OworCisgIC8vIElmIG5vdCBhIFNJR0VWX1RIUkVBRCB0aW1lciwgdGhlIGtlcm5lbCBjYW4gaGFuZGxlIGl0IHdpdGhvdXQgb3VyIGhlbHAuCisgIGlmICh0aW1lci0+c2lnZXZfbm90aWZ5ICE9IFNJR0VWX1RIUkVBRCkgeworICAgIGlmIChfX3RpbWVyX2NyZWF0ZShjbG9ja19pZCwgZXZwLCAmdGltZXItPmtlcm5lbF90aW1lcl9pZCkgPT0gLTEpIHsKKyAgICAgIGZyZWUodGltZXIpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgICp0aW1lcl9pZCA9IHRpbWVyOworICAgIHJldHVybiAwOworICB9CisKKyAgLy8gT3RoZXJ3aXNlLCB0aGlzIG11c3QgYmUgU0lHRVZfVEhSRUFEIHRpbWVyLi4uCisgIHRpbWVyLT5jYWxsYmFjayA9IGV2cC0+c2lnZXZfbm90aWZ5X2Z1bmN0aW9uOworICB0aW1lci0+Y2FsbGJhY2tfYXJndW1lbnQgPSBldnAtPnNpZ2V2X3ZhbHVlOworCisgIC8vIENoZWNrIGFyZ3VtZW50cyB0aGF0IHRoZSBrZXJuZWwgZG9lc24ndCBjYXJlIGFib3V0IGJ1dCB3ZSBkby4KKyAgaWYgKHRpbWVyLT5jYWxsYmFjayA9PSBOVUxMKSB7CisgICAgZnJlZSh0aW1lcik7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgLy8gQ3JlYXRlIHRoaXMgdGltZXIncyB0aHJlYWQuCisgIHB0aHJlYWRfYXR0cl90IHRocmVhZF9hdHRyaWJ1dGVzOworICBpZiAoZXZwLT5zaWdldl9ub3RpZnlfYXR0cmlidXRlcyA9PSBOVUxMKSB7CisgICAgcHRocmVhZF9hdHRyX2luaXQoJnRocmVhZF9hdHRyaWJ1dGVzKTsKKyAgfSBlbHNlIHsKKyAgICB0aHJlYWRfYXR0cmlidXRlcyA9ICpyZWludGVycHJldF9jYXN0PHB0aHJlYWRfYXR0cl90Kj4oZXZwLT5zaWdldl9ub3RpZnlfYXR0cmlidXRlcyk7CisgIH0KKyAgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKCZ0aHJlYWRfYXR0cmlidXRlcywgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQpOworCisgIC8vIFdlIHN0YXJ0IHRoZSB0aHJlYWQgd2l0aCBUSU1FUl9TSUdOQUwgYmxvY2tlZCBieSBibG9ja2luZyB0aGUgc2lnbmFsIGhlcmUgYW5kIGxldHRpbmcgaXQKKyAgLy8gaW5oZXJpdC4gSWYgaXQgdHJpZWQgdG8gYmxvY2sgdGhlIHNpZ25hbCBpdHNlbGYsIHRoZXJlIHdvdWxkIGJlIGEgcmFjZS4KKyAga2VybmVsX3NpZ3NldF90IHNpZ3NldDsKKyAgc2lnYWRkc2V0KHNpZ3NldC5nZXQoKSwgVElNRVJfU0lHTkFMKTsKKyAga2VybmVsX3NpZ3NldF90IG9sZF9zaWdzZXQ7CisgIHB0aHJlYWRfc2lnbWFzayhTSUdfQkxPQ0ssIHNpZ3NldC5nZXQoKSwgb2xkX3NpZ3NldC5nZXQoKSk7CisKKyAgaW50IHJjID0gcHRocmVhZF9jcmVhdGUoJnRpbWVyLT5jYWxsYmFja190aHJlYWQsICZ0aHJlYWRfYXR0cmlidXRlcywgX190aW1lcl90aHJlYWRfc3RhcnQsIHRpbWVyKTsKKworICBwdGhyZWFkX3NpZ21hc2soU0lHX1NFVE1BU0ssIG9sZF9zaWdzZXQuZ2V0KCksIE5VTEwpOworCisgIGlmIChyYyAhPSAwKSB7CisgICAgZnJlZSh0aW1lcik7CisgICAgZXJybm8gPSByYzsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBzaWdldmVudCBzZSA9ICpldnA7CisgIHNlLnNpZ2V2X3NpZ25vID0gVElNRVJfU0lHTkFMOworICBzZS5zaWdldl9ub3RpZnkgPSBTSUdFVl9USFJFQURfSUQ7CisgIHNlLnNpZ2V2X25vdGlmeV90aHJlYWRfaWQgPSBwdGhyZWFkX2dldHRpZF9ucCh0aW1lci0+Y2FsbGJhY2tfdGhyZWFkKTsKKyAgaWYgKF9fdGltZXJfY3JlYXRlKGNsb2NrX2lkLCAmc2UsICZ0aW1lci0+a2VybmVsX3RpbWVyX2lkKSA9PSAtMSkgeworICAgIF9fdGltZXJfdGhyZWFkX3N0b3AodGltZXIpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIC8vIEdpdmUgdGhlIHRocmVhZCBhIG1lYW5pbmdmdWwgbmFtZS4KKyAgLy8gSXQgY2FuJ3QgZG8gdGhpcyBpdHNlbGYgYmVjYXVzZSB0aGUga2VybmVsIHRpbWVyIGlzbid0IGNyZWF0ZWQgdW50aWwgYWZ0ZXIgaXQncyBydW5uaW5nLgorICBjaGFyIG5hbWVbMzJdOworICBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJQT1NJWCBpbnRlcnZhbCB0aW1lciAlZCIsIHRvX2tlcm5lbF90aW1lcl9pZCh0aW1lcikpOworICBwdGhyZWFkX3NldG5hbWVfbnAodGltZXItPmNhbGxiYWNrX3RocmVhZCwgbmFtZSk7CisKKyAgKnRpbWVyX2lkID0gdGltZXI7CisgIHJldHVybiAwOworfQorCisvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvdGltZXJfZGVsZXRlLmh0bWwKK2ludCB0aW1lcl9kZWxldGUodGltZXJfdCBpZCkgeworICBpbnQgcmMgPSBfX3RpbWVyX2RlbGV0ZSh0b19rZXJuZWxfdGltZXJfaWQoaWQpKTsKKyAgaWYgKHJjID09IC0xKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgUG9zaXhUaW1lciogdGltZXIgPSByZWludGVycHJldF9jYXN0PFBvc2l4VGltZXIqPihpZCk7CisgIGlmICh0aW1lci0+c2lnZXZfbm90aWZ5ID09IFNJR0VWX1RIUkVBRCkgeworICAgIC8vIFN0b3BwaW5nIHRoZSB0aW1lcidzIHRocmVhZCBmcmVlcyB0aGUgdGltZXIgZGF0YSB3aGVuIGl0J3Mgc2FmZS4KKyAgICBfX3RpbWVyX3RocmVhZF9zdG9wKHRpbWVyKTsKKyAgfSBlbHNlIHsKKyAgICAvLyBGb3IgdGltZXJzIHdpdGhvdXQgdGhyZWFkcywgd2UgY2FuIGp1c3QgZnJlZSByaWdodCBhd2F5LgorICAgIGZyZWUodGltZXIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy90aW1lcl9nZXRvdmVycnVuLmh0bWwKK2ludCB0aW1lcl9nZXR0aW1lKHRpbWVyX3QgaWQsIGl0aW1lcnNwZWMqIHRzKSB7CisgIHJldHVybiBfX3RpbWVyX2dldHRpbWUodG9fa2VybmVsX3RpbWVyX2lkKGlkKSwgdHMpOworfQorCisvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvdGltZXJfZ2V0b3ZlcnJ1bi5odG1sCitpbnQgdGltZXJfc2V0dGltZSh0aW1lcl90IGlkLCBpbnQgZmxhZ3MsIGNvbnN0IGl0aW1lcnNwZWMqIHRzLCBpdGltZXJzcGVjKiBvdHMpIHsKKyAgcmV0dXJuIF9fdGltZXJfc2V0dGltZSh0b19rZXJuZWxfdGltZXJfaWQoaWQpLCBmbGFncywgdHMsIG90cyk7Cit9CisKKy8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy90aW1lcl9nZXRvdmVycnVuLmh0bWwKK2ludCB0aW1lcl9nZXRvdmVycnVuKHRpbWVyX3QgaWQpIHsKKyAgcmV0dXJuIF9fdGltZXJfZ2V0b3ZlcnJ1bih0b19rZXJuZWxfdGltZXJfaWQoaWQpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfYWNjZXNzb3IuaCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfYWNjZXNzb3IuaAppbmRleCAyYTMyMGY2Li5kZjRhNWEyIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9wdGhyZWFkX2FjY2Vzc29yLmgKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9hY2Nlc3Nvci5oCkBAIC0xOSwxMyArMTksMTQgQEAKIAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KIAorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX21hY3Jvcy5oIgogI2luY2x1ZGUgInB0aHJlYWRfaW50ZXJuYWwuaCIKIAogY2xhc3MgcHRocmVhZF9hY2Nlc3NvciB7CiAgcHVibGljOgogICBleHBsaWNpdCBwdGhyZWFkX2FjY2Vzc29yKHB0aHJlYWRfdCBkZXNpcmVkX3RocmVhZCkgewogICAgIExvY2soKTsKLSAgICBmb3IgKHRocmVhZF8gPSBnVGhyZWFkTGlzdDsgdGhyZWFkXyAhPSBOVUxMOyB0aHJlYWRfID0gdGhyZWFkXy0+bmV4dCkgeworICAgIGZvciAodGhyZWFkXyA9IGdfdGhyZWFkX2xpc3Q7IHRocmVhZF8gIT0gTlVMTDsgdGhyZWFkXyA9IHRocmVhZF8tPm5leHQpIHsKICAgICAgIGlmICh0aHJlYWRfID09IHJlaW50ZXJwcmV0X2Nhc3Q8cHRocmVhZF9pbnRlcm5hbF90Kj4oZGVzaXJlZF90aHJlYWQpKSB7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQpAQCAtNDAsNyArNDEsNyBAQAogICAgIGlmIChpc19sb2NrZWRfKSB7CiAgICAgICBpc19sb2NrZWRfID0gZmFsc2U7CiAgICAgICB0aHJlYWRfID0gTlVMTDsKLSAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnVGhyZWFkTGlzdExvY2spOworICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdfdGhyZWFkX2xpc3RfbG9jayk7CiAgICAgfQogICB9CiAKQEAgLTUzLDEzICs1NCwxMSBAQAogICBib29sIGlzX2xvY2tlZF87CiAKICAgdm9pZCBMb2NrKCkgewotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ1RocmVhZExpc3RMb2NrKTsKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJmdfdGhyZWFkX2xpc3RfbG9jayk7CiAgICAgaXNfbG9ja2VkXyA9IHRydWU7CiAgIH0KIAotICAvLyBEaXNhbGxvdyBjb3B5IGFuZCBhc3NpZ25tZW50LgotICBwdGhyZWFkX2FjY2Vzc29yKGNvbnN0IHB0aHJlYWRfYWNjZXNzb3ImKTsKLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgcHRocmVhZF9hY2Nlc3NvciYpOworICBESVNBTExPV19DT1BZX0FORF9BU1NJR04ocHRocmVhZF9hY2Nlc3Nvcik7CiB9OwogCiAjZW5kaWYgLy8gUFRIUkVBRF9BQ0NFU1NPUl9ICmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX2F0Zm9yay5jcHAgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2F0Zm9yay5jcHAKaW5kZXggNWJmNjNmYi4uYjg0NWY3ZCAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcHRocmVhZF9hdGZvcmsuY3BwCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfYXRmb3JrLmNwcApAQCAtMjksOCArMjksNiBAQAogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8cHRocmVhZC5oPgogCi1zdGF0aWMgcHRocmVhZF9tdXRleF90IGdBdEZvcmtMaXN0TXV0ZXggPSBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUjsKLQogc3RydWN0IGF0Zm9ya190IHsKICAgYXRmb3JrX3QqIG5leHQ7CiAgIGF0Zm9ya190KiBwcmV2OwpAQCAtNDUsMjMgKzQzLDIyIEBACiAgIGF0Zm9ya190KiBsYXN0OwogfTsKIAotc3RhdGljIGF0Zm9ya19saXN0X3QgZ0F0Rm9ya0xpc3QgPSB7IE5VTEwsIE5VTEwgfTsKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgZ19hdGZvcmtfbGlzdF9tdXRleCA9IFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIGF0Zm9ya19saXN0X3QgZ19hdGZvcmtfbGlzdCA9IHsgTlVMTCwgTlVMTCB9OwogCiB2b2lkIF9fYmlvbmljX2F0Zm9ya19ydW5fcHJlcGFyZSgpIHsKLSAgLy8gV2Ugd2lsbCBsb2NrIHRoaXMgaGVyZSwgYW5kIHVubG9jayBpdCBpbiB0aGUgcGFyZW50IGFuZCBjaGlsZCBmdW5jdGlvbnMuCisgIC8vIFdlIGxvY2sgdGhlIGF0Zm9yayBsaXN0IGhlcmUsIHVubG9jayBpdCBpbiB0aGUgcGFyZW50LCBhbmQgcmVzZXQgaXQgaW4gdGhlIGNoaWxkLgogICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBub2JvZHkgY2FuIG1vZGlmeSB0aGUgaGFuZGxlciBhcnJheSBiZXR3ZWVuIHRoZSBjYWxscwogICAvLyB0byB0aGUgcHJlcGFyZSBhbmQgcGFyZW50L2NoaWxkIGhhbmRsZXJzLgogICAvLwotICAvLyBUT0RPOiBJZiBhIGhhbmRsZXIgbXVja3Mgd2l0aCB0aGUgbGlzdCwgaXQgY291bGQgY2F1c2UgcHJvYmxlbXMuICBSaWdodAotICAvLyAgICAgICBub3cgaXQncyBvayBiZWNhdXNlIGFsbCB0aGV5IGNhbiBkbyBpcyBhZGQgbmV3IGl0ZW1zIHRvIHRoZSBlbmQKLSAgLy8gICAgICAgb2YgdGhlIGxpc3QsIGJ1dCBpZi93aGVuIHdlIGltcGxlbWVudCBjbGVhbnVwIGluIGRsY2xvc2UoKSB0aGluZ3MKLSAgLy8gICAgICAgd2lsbCBnZXQgbW9yZSBpbnRlcmVzdGluZy4uLgotICBwdGhyZWFkX211dGV4X2xvY2soJmdBdEZvcmtMaXN0TXV0ZXgpOworICAvLyBUT0RPOiBJZiBhIGhhbmRsZXIgdHJpZXMgdG8gbXV0YXRlIHRoZSBsaXN0LCB0aGV5J2xsIGJsb2NrLiBXZSBzaG91bGQgcHJvYmFibHkgY29weQorICAvLyB0aGUgbGlzdCBiZWZvcmUgZm9ya2luZywgYW5kIGhhdmUgcHJlcGFyZSwgcGFyZW50LCBhbmQgY2hpbGQgYWxsIHdvcmsgb24gdGhlIGNvbnNpc3RlbnQgY29weS4KKyAgcHRocmVhZF9tdXRleF9sb2NrKCZnX2F0Zm9ya19saXN0X211dGV4KTsKIAogICAvLyBDYWxsIHB0aHJlYWRfYXRmb3JrKCkgcHJlcGFyZSBoYW5kbGVycy4gUE9TSVggc3RhdGVzIHRoYXQgdGhlIHByZXBhcmUKICAgLy8gaGFuZGxlcnMgc2hvdWxkIGJlIGNhbGxlZCBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZiB0aGUgcGFyZW50L2NoaWxkCiAgIC8vIGhhbmRsZXJzLCBzbyB3ZSBpdGVyYXRlIGJhY2t3YXJkcy4KLSAgZm9yIChhdGZvcmtfdCogaXQgPSBnQXRGb3JrTGlzdC5sYXN0OyBpdCAhPSBOVUxMOyBpdCA9IGl0LT5wcmV2KSB7CisgIGZvciAoYXRmb3JrX3QqIGl0ID0gZ19hdGZvcmtfbGlzdC5sYXN0OyBpdCAhPSBOVUxMOyBpdCA9IGl0LT5wcmV2KSB7CiAgICAgaWYgKGl0LT5wcmVwYXJlICE9IE5VTEwpIHsKICAgICAgIGl0LT5wcmVwYXJlKCk7CiAgICAgfQpAQCAtNjksMjYgKzY2LDIzIEBACiB9CiAKIHZvaWQgX19iaW9uaWNfYXRmb3JrX3J1bl9jaGlsZCgpIHsKLSAgZm9yIChhdGZvcmtfdCogaXQgPSBnQXRGb3JrTGlzdC5maXJzdDsgaXQgIT0gTlVMTDsgaXQgPSBpdC0+bmV4dCkgeworICBmb3IgKGF0Zm9ya190KiBpdCA9IGdfYXRmb3JrX2xpc3QuZmlyc3Q7IGl0ICE9IE5VTEw7IGl0ID0gaXQtPm5leHQpIHsKICAgICBpZiAoaXQtPmNoaWxkICE9IE5VTEwpIHsKICAgICAgIGl0LT5jaGlsZCgpOwogICAgIH0KICAgfQogCi0gIHB0aHJlYWRfbXV0ZXhhdHRyX3QgYXR0cjsKLSAgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgmYXR0cik7Ci0gIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmF0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKTsKLSAgcHRocmVhZF9tdXRleF9pbml0KCZnQXRGb3JrTGlzdE11dGV4LCAmYXR0cik7CisgIGdfYXRmb3JrX2xpc3RfbXV0ZXggPSBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUjsKIH0KIAogdm9pZCBfX2Jpb25pY19hdGZvcmtfcnVuX3BhcmVudCgpIHsKLSAgZm9yIChhdGZvcmtfdCogaXQgPSBnQXRGb3JrTGlzdC5maXJzdDsgaXQgIT0gTlVMTDsgaXQgPSBpdC0+bmV4dCkgeworICBmb3IgKGF0Zm9ya190KiBpdCA9IGdfYXRmb3JrX2xpc3QuZmlyc3Q7IGl0ICE9IE5VTEw7IGl0ID0gaXQtPm5leHQpIHsKICAgICBpZiAoaXQtPnBhcmVudCAhPSBOVUxMKSB7CiAgICAgICBpdC0+cGFyZW50KCk7CiAgICAgfQogICB9CiAKLSAgcHRocmVhZF9tdXRleF91bmxvY2soJmdBdEZvcmtMaXN0TXV0ZXgpOworICBwdGhyZWFkX211dGV4X3VubG9jaygmZ19hdGZvcmtfbGlzdF9tdXRleCk7CiB9CiAKIGludCBwdGhyZWFkX2F0Zm9yayh2b2lkICgqcHJlcGFyZSkodm9pZCksIHZvaWQgKCpwYXJlbnQpKHZvaWQpLCB2b2lkKCpjaGlsZCkodm9pZCkpIHsKQEAgLTEwMSwyMCArOTUsMjAgQEAKICAgZW50cnktPnBhcmVudCA9IHBhcmVudDsKICAgZW50cnktPmNoaWxkID0gY2hpbGQ7CiAKLSAgcHRocmVhZF9tdXRleF9sb2NrKCZnQXRGb3JrTGlzdE11dGV4KTsKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZnX2F0Zm9ya19saXN0X211dGV4KTsKIAogICAvLyBBcHBlbmQgJ2VudHJ5JyB0byB0aGUgbGlzdC4KICAgZW50cnktPm5leHQgPSBOVUxMOwotICBlbnRyeS0+cHJldiA9IGdBdEZvcmtMaXN0Lmxhc3Q7CisgIGVudHJ5LT5wcmV2ID0gZ19hdGZvcmtfbGlzdC5sYXN0OwogICBpZiAoZW50cnktPnByZXYgIT0gTlVMTCkgewogICAgIGVudHJ5LT5wcmV2LT5uZXh0ID0gZW50cnk7CiAgIH0KLSAgaWYgKGdBdEZvcmtMaXN0LmZpcnN0ID09IE5VTEwpIHsKLSAgICBnQXRGb3JrTGlzdC5maXJzdCA9IGVudHJ5OworICBpZiAoZ19hdGZvcmtfbGlzdC5maXJzdCA9PSBOVUxMKSB7CisgICAgZ19hdGZvcmtfbGlzdC5maXJzdCA9IGVudHJ5OwogICB9Ci0gIGdBdEZvcmtMaXN0Lmxhc3QgPSBlbnRyeTsKKyAgZ19hdGZvcmtfbGlzdC5sYXN0ID0gZW50cnk7CiAKLSAgcHRocmVhZF9tdXRleF91bmxvY2soJmdBdEZvcmtMaXN0TXV0ZXgpOworICBwdGhyZWFkX211dGV4X3VubG9jaygmZ19hdGZvcmtfbGlzdF9tdXRleCk7CiAKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX2F0dHIuY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9hdHRyLmNwcAppbmRleCBmZGYyOTY1Li5jOTM5NzBhIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9wdGhyZWFkX2F0dHIuY3BwCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfYXR0ci5jcHAKQEAgLTI4LDYgKzI4LDEzIEBACiAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19zdHJpbmdfdXRpbHMuaCIKKyNpbmNsdWRlICJwcml2YXRlL0Vycm5vUmVzdG9yZXIuaCIKKyNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgogI2luY2x1ZGUgInB0aHJlYWRfaW50ZXJuYWwuaCIKIAogaW50IHB0aHJlYWRfYXR0cl9pbml0KHB0aHJlYWRfYXR0cl90KiBhdHRyKSB7CkBAIC05MCwyMSArOTcsOCBAQAogfQogCiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZShjb25zdCBwdGhyZWFkX2F0dHJfdCogYXR0ciwgc2l6ZV90KiBzdGFja19zaXplKSB7Ci0gICpzdGFja19zaXplID0gYXR0ci0+c3RhY2tfc2l6ZTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyKHB0aHJlYWRfYXR0cl90Kiwgdm9pZCopIHsKLSAgLy8gVGhpcyB3YXMgcmVtb3ZlZCBmcm9tIFBPU0lYLjEtMjAwOCwgYW5kIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBiaW9uaWMuCi0gIC8vIE5lZWRlZCBmb3IgQUJJIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgTkRLLgotICByZXR1cm4gRU5PU1lTOwotfQotCi1pbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkcihjb25zdCBwdGhyZWFkX2F0dHJfdCogYXR0ciwgdm9pZCoqIHN0YWNrX2FkZHIpIHsKLSAgLy8gVGhpcyB3YXMgcmVtb3ZlZCBmcm9tIFBPU0lYLjEtMjAwOC4KLSAgLy8gTmVlZGVkIGZvciBBQkkgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBOREsuCi0gICpzdGFja19hZGRyID0gKGNoYXIqKWF0dHItPnN0YWNrX2Jhc2UgKyBhdHRyLT5zdGFja19zaXplOwotICByZXR1cm4gMDsKKyAgdm9pZCogdW51c2VkOworICByZXR1cm4gcHRocmVhZF9hdHRyX2dldHN0YWNrKGF0dHIsICZ1bnVzZWQsIHN0YWNrX3NpemUpOwogfQogCiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrKHB0aHJlYWRfYXR0cl90KiBhdHRyLCB2b2lkKiBzdGFja19iYXNlLCBzaXplX3Qgc3RhY2tfc2l6ZSkgewpAQCAtMTE5LDcgKzExMyw0MyBAQAogICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX3B0aHJlYWRfYXR0cl9nZXRzdGFja19tYWluX3RocmVhZCh2b2lkKiogc3RhY2tfYmFzZSwgc2l6ZV90KiBzdGFja19zaXplKSB7CisgIEVycm5vUmVzdG9yZXIgZXJybm9fcmVzdG9yZXI7CisKKyAgcmxpbWl0IHN0YWNrX2xpbWl0OworICBpZiAoZ2V0cmxpbWl0KFJMSU1JVF9TVEFDSywgJnN0YWNrX2xpbWl0KSA9PSAtMSkgeworICAgIHJldHVybiBlcnJubzsKKyAgfQorCisgIC8vIElmIHRoZSBjdXJyZW50IFJMSU1JVF9TVEFDSyBpcyBSTElNX0lORklOSVRZLCBvbmx5IGFkbWl0IHRvIGFuIDhNaUIgc3RhY2sgZm9yIHNhbml0eSdzIHNha2UuCisgIGlmIChzdGFja19saW1pdC5ybGltX2N1ciA9PSBSTElNX0lORklOSVRZKSB7CisgICAgc3RhY2tfbGltaXQucmxpbV9jdXIgPSA4ICogMTAyNCAqIDEwMjQ7CisgIH0KKworICAvLyBJdCBkb2Vzbid0IG1hdHRlciB3aGljaCB0aHJlYWQgd2UgYXJlOyB3ZSdyZSBqdXN0IGxvb2tpbmcgZm9yICJbc3RhY2tdIi4KKyAgRklMRSogZnAgPSBmb3BlbigiL3Byb2Mvc2VsZi9tYXBzIiwgInJlIik7CisgIGlmIChmcCA9PSBOVUxMKSB7CisgICAgcmV0dXJuIGVycm5vOworICB9CisgIGNoYXIgbGluZVtCVUZTSVpdOworICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkgIT0gTlVMTCkgeworICAgIGlmIChlbmRzX3dpdGgobGluZSwgIiBbc3RhY2tdXG4iKSkgeworICAgICAgdWludHB0cl90IGxvLCBoaTsKKyAgICAgIGlmIChzc2NhbmYobGluZSwgIiUiIFNDTnhQVFIgIi0lIiBTQ054UFRSLCAmbG8sICZoaSkgPT0gMikgeworICAgICAgICAqc3RhY2tfc2l6ZSA9IHN0YWNrX2xpbWl0LnJsaW1fY3VyOworICAgICAgICAqc3RhY2tfYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhpIC0gKnN0YWNrX3NpemUpOworICAgICAgICBmY2xvc2UoZnApOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgX19saWJjX2ZhdGFsKCJObyBbc3RhY2tdIGxpbmUgZm91bmQgaW4gL3Byb2Mvc2VsZi9tYXBzISIpOworfQorCiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrKGNvbnN0IHB0aHJlYWRfYXR0cl90KiBhdHRyLCB2b2lkKiogc3RhY2tfYmFzZSwgc2l6ZV90KiBzdGFja19zaXplKSB7CisgIGlmICgoYXR0ci0+ZmxhZ3MgJiBQVEhSRUFEX0FUVFJfRkxBR19NQUlOX1RIUkVBRCkgIT0gMCkgeworICAgIHJldHVybiBfX3B0aHJlYWRfYXR0cl9nZXRzdGFja19tYWluX3RocmVhZChzdGFja19iYXNlLCBzdGFja19zaXplKTsKKyAgfQogICAqc3RhY2tfYmFzZSA9IGF0dHItPnN0YWNrX2Jhc2U7CiAgICpzdGFja19zaXplID0gYXR0ci0+c3RhY2tfc2l6ZTsKICAgcmV0dXJuIDA7CkBAIC0xMzUsOSArMTY1LDggQEAKICAgcmV0dXJuIDA7CiB9CiAKLWludCBwdGhyZWFkX2dldGF0dHJfbnAocHRocmVhZF90IHRoaWQsIHB0aHJlYWRfYXR0cl90KiBhdHRyKSB7Ci0gIHB0aHJlYWRfaW50ZXJuYWxfdCogdGhyZWFkID0gKHB0aHJlYWRfaW50ZXJuYWxfdCopIHRoaWQ7Ci0gICphdHRyID0gdGhyZWFkLT5hdHRyOworaW50IHB0aHJlYWRfZ2V0YXR0cl9ucChwdGhyZWFkX3QgdCwgcHRocmVhZF9hdHRyX3QqIGF0dHIpIHsKKyAgKmF0dHIgPSByZWludGVycHJldF9jYXN0PHB0aHJlYWRfaW50ZXJuYWxfdCo+KHQpLT5hdHRyOwogICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9jb25kLmNwcCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfY29uZC5jcHAKaW5kZXggNDU4M2NlZi4uZTYyM2I2MiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcHRocmVhZF9jb25kLmNwcAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2NvbmQuY3BwCkBAIC0zMCw4ICszMCw4IEBACiAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHN5cy9hdG9taWNzLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCkBAIC00MCw1MCArNDAsNjQgQEAKICNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19mdXRleC5oIgogI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX3RpbWVfY29udmVyc2lvbnMuaCIKICNpbmNsdWRlICJwcml2YXRlL2Jpb25pY190bHMuaCIKLSNpbmNsdWRlICJwcml2YXRlL3RocmVhZF9wcml2YXRlLmgiCisKKy8vIFdlIHVzZSBvbmUgYml0IGluIHB0aHJlYWRfY29uZGF0dHJfdCAobG9uZykgdmFsdWVzIGFzIHRoZSAnc2hhcmVkJyBmbGFnCisvLyBhbmQgb25lIGJpdCBmb3IgdGhlIGNsb2NrIHR5cGUgKENMT0NLX1JFQUxUSU1FIGlzICgoY2xvY2tpZF90KSAxKSwgYW5kCisvLyBDTE9DS19NT05PVE9OSUMgaXMgKChjbG9ja2lkX3QpIDApLikuIFRoZSByZXN0IG9mIHRoZSBiaXRzIGFyZSBhIGNvdW50ZXIuCisvLworLy8gVGhlICd2YWx1ZScgZmllbGQgcHRocmVhZF9jb25kX3QgaGFzIHRoZSBzYW1lIGxheW91dC4KKworI2RlZmluZSBDT05EX1NIQVJFRF9NQVNLIDB4MDAwMQorI2RlZmluZSBDT05EX0NMT0NLX01BU0sgMHgwMDAyCisjZGVmaW5lIENPTkRfQ09VTlRFUl9TVEVQIDB4MDAwNAorI2RlZmluZSBDT05EX0ZMQUdTX01BU0sgKENPTkRfU0hBUkVEX01BU0sgfCBDT05EX0NMT0NLX01BU0spCisjZGVmaW5lIENPTkRfQ09VTlRFUl9NQVNLICh+Q09ORF9GTEFHU19NQVNLKQorCisjZGVmaW5lIENPTkRfSVNfU0hBUkVEKGMpICgoKGMpICYgQ09ORF9TSEFSRURfTUFTSykgIT0gMCkKKyNkZWZpbmUgQ09ORF9HRVRfQ0xPQ0soYykgKCgoYykgJiBDT05EX0NMT0NLX01BU0spID4+IDEpCisjZGVmaW5lIENPTkRfU0VUX0NMT0NLKGF0dHIsIGMpICgoYXR0cikgfCAoYyA8PCAxKSkKKwogCiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0KHB0aHJlYWRfY29uZGF0dHJfdCogYXR0cikgewotICBpZiAoYXR0ciA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIEVJTlZBTDsKLSAgfQotICAqYXR0ciA9IFBUSFJFQURfUFJPQ0VTU19QUklWQVRFOworICAqYXR0ciA9IDA7CisgICphdHRyIHw9IFBUSFJFQURfUFJPQ0VTU19QUklWQVRFOworICAqYXR0ciB8PSAoQ0xPQ0tfUkVBTFRJTUUgPDwgMSk7CiAgIHJldHVybiAwOwogfQogCiBpbnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkKGNvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCogYXR0ciwgaW50KiBwc2hhcmVkKSB7Ci0gIGlmIChhdHRyID09IE5VTEwgfHwgcHNoYXJlZCA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIEVJTlZBTDsKLSAgfQotICAqcHNoYXJlZCA9ICphdHRyOworICAqcHNoYXJlZCA9IHN0YXRpY19jYXN0PGludD4oQ09ORF9JU19TSEFSRUQoKmF0dHIpKTsKICAgcmV0dXJuIDA7CiB9CiAKIGludCBwdGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQocHRocmVhZF9jb25kYXR0cl90KiBhdHRyLCBpbnQgcHNoYXJlZCkgewotICBpZiAoYXR0ciA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIEVJTlZBTDsKLSAgfQogICBpZiAocHNoYXJlZCAhPSBQVEhSRUFEX1BST0NFU1NfU0hBUkVEICYmIHBzaGFyZWQgIT0gUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUpIHsKICAgICByZXR1cm4gRUlOVkFMOwogICB9Ci0gICphdHRyID0gcHNoYXJlZDsKKworICAqYXR0ciB8PSBwc2hhcmVkOworICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0Y2xvY2soY29uc3QgcHRocmVhZF9jb25kYXR0cl90KiBhdHRyLCBjbG9ja2lkX3QqIGNsb2NrKSB7CisgICpjbG9jayA9IENPTkRfR0VUX0NMT0NLKCphdHRyKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2NvbmRhdHRyX3NldGNsb2NrKHB0aHJlYWRfY29uZGF0dHJfdCogYXR0ciwgY2xvY2tpZF90IGNsb2NrKSB7CisgIGlmIChjbG9jayAhPSBDTE9DS19NT05PVE9OSUMgJiYgY2xvY2sgIT0gQ0xPQ0tfUkVBTFRJTUUpIHsKKyAgICByZXR1cm4gRUlOVkFMOworICB9CisKKyAgKmF0dHIgPSBDT05EX1NFVF9DTE9DSygqYXR0ciwgY2xvY2spOwogICByZXR1cm4gMDsKIH0KIAogaW50IHB0aHJlYWRfY29uZGF0dHJfZGVzdHJveShwdGhyZWFkX2NvbmRhdHRyX3QqIGF0dHIpIHsKLSAgaWYgKGF0dHIgPT0gTlVMTCkgewotICAgIHJldHVybiBFSU5WQUw7Ci0gIH0KICAgKmF0dHIgPSAweGRlYWRhMTFkOwogICByZXR1cm4gMDsKIH0KIAotLy8gV2UgdXNlIG9uZSBiaXQgaW4gY29uZGl0aW9uIHZhcmlhYmxlIHZhbHVlcyBhcyB0aGUgJ3NoYXJlZCcgZmxhZwotLy8gVGhlIHJlc3QgaXMgYSBjb3VudGVyLgotI2RlZmluZSBDT05EX1NIQVJFRF9NQVNLICAgICAgICAweDAwMDEKLSNkZWZpbmUgQ09ORF9DT1VOVEVSX0lOQ1JFTUVOVCAgMHgwMDAyCi0jZGVmaW5lIENPTkRfQ09VTlRFUl9NQVNLICAgICAgICh+Q09ORF9TSEFSRURfTUFTSykKLQotI2RlZmluZSBDT05EX0lTX1NIQVJFRChjKSAgKCgoYyktPnZhbHVlICYgQ09ORF9TSEFSRURfTUFTSykgIT0gMCkKIAogLy8gWFhYICp0ZWNobmljYWxseSogdGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGFsbG93CiAvLyBYWFggYSBzaWduYWwgdG8gYmUgbWlzc2VkLiAgSWYgdGhyZWFkIEEgaXMgcHJlZW1wdGVkIGluIF93YWl0KCkKQEAgLTkzLDI0ICsxMDcsMTYgQEAKIC8vIFhYWCB0aGVuIHRoZSBzaWduYWwgd2lsbCBiZSBsb3N0LgogCiBpbnQgcHRocmVhZF9jb25kX2luaXQocHRocmVhZF9jb25kX3QqIGNvbmQsIGNvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCogYXR0cikgewotICBpZiAoY29uZCA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIEVJTlZBTDsKLSAgfQotCi0gIGNvbmQtPnZhbHVlID0gMDsKLQotICBpZiAoYXR0ciAhPSBOVUxMICYmICphdHRyID09IFBUSFJFQURfUFJPQ0VTU19TSEFSRUQpIHsKLSAgICBjb25kLT52YWx1ZSB8PSBDT05EX1NIQVJFRF9NQVNLOworICBpZiAoYXR0ciAhPSBOVUxMKSB7CisgICAgY29uZC0+dmFsdWUgPSAoKmF0dHIgJiBDT05EX0ZMQUdTX01BU0spOworICB9IGVsc2UgeworICAgIGNvbmQtPnZhbHVlID0gMDsKICAgfQogCiAgIHJldHVybiAwOwogfQogCiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kocHRocmVhZF9jb25kX3QqIGNvbmQpIHsKLSAgaWYgKGNvbmQgPT0gTlVMTCkgewotICAgIHJldHVybiBFSU5WQUw7Ci0gIH0KLQogICBjb25kLT52YWx1ZSA9IDB4ZGVhZGMwNGQ7CiAgIHJldHVybiAwOwogfQpAQCAtMTE5LDE0ICsxMjUsMTAgQEAKIC8vIHB0aHJlYWRfY29uZF9zaWduYWwgdG8gYXRvbWljYWxseSBkZWNyZW1lbnQgdGhlIGNvdW50ZXIKIC8vIHRoZW4gd2FrZSB1cCAnY291bnRlcicgdGhyZWFkcy4KIHN0YXRpYyBpbnQgX19wdGhyZWFkX2NvbmRfcHVsc2UocHRocmVhZF9jb25kX3QqIGNvbmQsIGludCBjb3VudGVyKSB7Ci0gIGlmIChfX3ByZWRpY3RfZmFsc2UoY29uZCA9PSBOVUxMKSkgewotICAgIHJldHVybiBFSU5WQUw7Ci0gIH0KLQotICBsb25nIGZsYWdzID0gKGNvbmQtPnZhbHVlICYgfkNPTkRfQ09VTlRFUl9NQVNLKTsKKyAgaW50IGZsYWdzID0gKGNvbmQtPnZhbHVlICYgQ09ORF9GTEFHU19NQVNLKTsKICAgd2hpbGUgKHRydWUpIHsKLSAgICBsb25nIG9sZF92YWx1ZSA9IGNvbmQtPnZhbHVlOwotICAgIGxvbmcgbmV3X3ZhbHVlID0gKChvbGRfdmFsdWUgLSBDT05EX0NPVU5URVJfSU5DUkVNRU5UKSAmIENPTkRfQ09VTlRFUl9NQVNLKSB8IGZsYWdzOworICAgIGludCBvbGRfdmFsdWUgPSBjb25kLT52YWx1ZTsKKyAgICBpbnQgbmV3X3ZhbHVlID0gKChvbGRfdmFsdWUgLSBDT05EX0NPVU5URVJfU1RFUCkgJiBDT05EX0NPVU5URVJfTUFTSykgfCBmbGFnczsKICAgICBpZiAoX19iaW9uaWNfY21weGNoZyhvbGRfdmFsdWUsIG5ld192YWx1ZSwgJmNvbmQtPnZhbHVlKSA9PSAwKSB7CiAgICAgICBicmVhazsKICAgICB9CkBAIC0xNDIsNyArMTQ0LDcgQEAKICAgLy8gaG9sZCB0aGUgbXV0ZXgsIHRoZXkncmUgc3ViamVjdCB0byByYWNlIGNvbmRpdGlvbnMgYW55d2F5LgogICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CiAKLSAgX19mdXRleF93YWtlX2V4KCZjb25kLT52YWx1ZSwgQ09ORF9JU19TSEFSRUQoY29uZCksIGNvdW50ZXIpOworICBfX2Z1dGV4X3dha2VfZXgoJmNvbmQtPnZhbHVlLCBDT05EX0lTX1NIQVJFRChjb25kLT52YWx1ZSksIGNvdW50ZXIpOwogICByZXR1cm4gMDsKIH0KIApAQCAtMTUxLDcgKzE1Myw3IEBACiAgIGludCBvbGRfdmFsdWUgPSBjb25kLT52YWx1ZTsKIAogICBwdGhyZWFkX211dGV4X3VubG9jayhtdXRleCk7Ci0gIGludCBzdGF0dXMgPSBfX2Z1dGV4X3dhaXRfZXgoJmNvbmQtPnZhbHVlLCBDT05EX0lTX1NIQVJFRChjb25kKSwgb2xkX3ZhbHVlLCByZWx0aW1lKTsKKyAgaW50IHN0YXR1cyA9IF9fZnV0ZXhfd2FpdF9leCgmY29uZC0+dmFsdWUsIENPTkRfSVNfU0hBUkVEKGNvbmQtPnZhbHVlKSwgb2xkX3ZhbHVlLCByZWx0aW1lKTsKICAgcHRocmVhZF9tdXRleF9sb2NrKG11dGV4KTsKIAogICBpZiAoc3RhdHVzID09IC1FVElNRURPVVQpIHsKQEAgLTE2Niw3ICsxNjgsNyBAQAogICB0aW1lc3BlYyogdHNwOwogCiAgIGlmIChhYnN0aW1lICE9IE5VTEwpIHsKLSAgICBpZiAoX190aW1lc3BlY190b19hYnNvbHV0ZSgmdHMsIGFic3RpbWUsIGNsb2NrKSA8IDApIHsKKyAgICBpZiAoX190aW1lc3BlY19mcm9tX2Fic29sdXRlKCZ0cywgYWJzdGltZSwgY2xvY2spIDwgMCkgewogICAgICAgcmV0dXJuIEVUSU1FRE9VVDsKICAgICB9CiAgICAgdHNwID0gJnRzOwpAQCAtMTg2LDI4ICsxODgsMzAgQEAKIH0KIAogaW50IHB0aHJlYWRfY29uZF93YWl0KHB0aHJlYWRfY29uZF90KiBjb25kLCBwdGhyZWFkX211dGV4X3QqIG11dGV4KSB7Ci0gIHJldHVybiBfX3B0aHJlYWRfY29uZF90aW1lZHdhaXQoY29uZCwgbXV0ZXgsIE5VTEwsIENMT0NLX1JFQUxUSU1FKTsKKyAgcmV0dXJuIF9fcHRocmVhZF9jb25kX3RpbWVkd2FpdChjb25kLCBtdXRleCwgTlVMTCwgQ09ORF9HRVRfQ0xPQ0soY29uZC0+dmFsdWUpKTsKIH0KIAogaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQocHRocmVhZF9jb25kX3QgKmNvbmQsIHB0aHJlYWRfbXV0ZXhfdCAqIG11dGV4LCBjb25zdCB0aW1lc3BlYyAqYWJzdGltZSkgewotICByZXR1cm4gX19wdGhyZWFkX2NvbmRfdGltZWR3YWl0KGNvbmQsIG11dGV4LCBhYnN0aW1lLCBDTE9DS19SRUFMVElNRSk7CisgIHJldHVybiBfX3B0aHJlYWRfY29uZF90aW1lZHdhaXQoY29uZCwgbXV0ZXgsIGFic3RpbWUsIENPTkRfR0VUX0NMT0NLKGNvbmQtPnZhbHVlKSk7CiB9CiAKLS8vIFRPRE86IHRoaXMgZXhpc3RzIG9ubHkgZm9yIGJhY2t3YXJkIGJpbmFyeSBjb21wYXRpYmlsaXR5LgotaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXRfbW9ub3RvbmljKHB0aHJlYWRfY29uZF90KiBjb25kLCBwdGhyZWFkX211dGV4X3QqIG11dGV4LCBjb25zdCB0aW1lc3BlYyogYWJzdGltZSkgeworI2lmICFkZWZpbmVkKF9fTFA2NF9fKQorLy8gVE9ETzogdGhpcyBleGlzdHMgb25seSBmb3IgYmFja3dhcmQgYmluYXJ5IGNvbXBhdGliaWxpdHkgb24gMzIgYml0IHBsYXRmb3Jtcy4KK2V4dGVybiAiQyIgaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXRfbW9ub3RvbmljKHB0aHJlYWRfY29uZF90KiBjb25kLCBwdGhyZWFkX211dGV4X3QqIG11dGV4LCBjb25zdCB0aW1lc3BlYyogYWJzdGltZSkgewogICByZXR1cm4gX19wdGhyZWFkX2NvbmRfdGltZWR3YWl0KGNvbmQsIG11dGV4LCBhYnN0aW1lLCBDTE9DS19NT05PVE9OSUMpOwogfQogCi1pbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdF9tb25vdG9uaWNfbnAocHRocmVhZF9jb25kX3QqIGNvbmQsIHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgsIGNvbnN0IHRpbWVzcGVjKiBhYnN0aW1lKSB7CitleHRlcm4gIkMiIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0X21vbm90b25pY19ucChwdGhyZWFkX2NvbmRfdCogY29uZCwgcHRocmVhZF9tdXRleF90KiBtdXRleCwgY29uc3QgdGltZXNwZWMqIGFic3RpbWUpIHsKICAgcmV0dXJuIF9fcHRocmVhZF9jb25kX3RpbWVkd2FpdChjb25kLCBtdXRleCwgYWJzdGltZSwgQ0xPQ0tfTU9OT1RPTklDKTsKIH0KIAotaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXRfcmVsYXRpdmVfbnAocHRocmVhZF9jb25kX3QqIGNvbmQsIHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgsIGNvbnN0IHRpbWVzcGVjKiByZWx0aW1lKSB7CitleHRlcm4gIkMiIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0X3JlbGF0aXZlX25wKHB0aHJlYWRfY29uZF90KiBjb25kLCBwdGhyZWFkX211dGV4X3QqIG11dGV4LCBjb25zdCB0aW1lc3BlYyogcmVsdGltZSkgewogICByZXR1cm4gX19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3JlbGF0aXZlKGNvbmQsIG11dGV4LCByZWx0aW1lKTsKIH0KIAotaW50IHB0aHJlYWRfY29uZF90aW1lb3V0X25wKHB0aHJlYWRfY29uZF90KiBjb25kLCBwdGhyZWFkX211dGV4X3QqIG11dGV4LCB1bnNpZ25lZCBtcykgeworZXh0ZXJuICJDIiBpbnQgcHRocmVhZF9jb25kX3RpbWVvdXRfbnAocHRocmVhZF9jb25kX3QqIGNvbmQsIHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgsIHVuc2lnbmVkIG1zKSB7CiAgIHRpbWVzcGVjIHRzOwogICB0aW1lc3BlY19mcm9tX21zKHRzLCBtcyk7CiAgIHJldHVybiBfX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcmVsYXRpdmUoY29uZCwgbXV0ZXgsICZ0cyk7CiB9CisjZW5kaWYgLy8gIWRlZmluZWQoX19MUDY0X18pCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX2NyZWF0ZS5jcHAgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2NyZWF0ZS5jcHAKaW5kZXggYjc5MGUyYi4uZmM4YWZhMiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcHRocmVhZF9jcmVhdGUuY3BwCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfY3JlYXRlLmNwcApAQCAtMzAsNDEgKzMwLDMyIEBACiAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCiAKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19tYWNyb3MuaCIKICNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19zc3AuaCIKICNpbmNsdWRlICJwcml2YXRlL2Jpb25pY190bHMuaCIKICNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgotI2luY2x1ZGUgInByaXZhdGUvdGhyZWFkX3ByaXZhdGUuaCIKICNpbmNsdWRlICJwcml2YXRlL0Vycm5vUmVzdG9yZXIuaCIKICNpbmNsdWRlICJwcml2YXRlL1Njb3BlZFB0aHJlYWRNdXRleExvY2tlci5oIgogCi1leHRlcm4gIkMiIHBpZF90IF9fYmlvbmljX2Nsb25lKHVpbnQzMl90IGZsYWdzLCB2b2lkKiBjaGlsZF9zdGFjaywgaW50KiBwYXJlbnRfdGlkLCB2b2lkKiB0bHMsIGludCogY2hpbGRfdGlkLCBpbnQgKCpmbikodm9pZCopLCB2b2lkKiBhcmcpOwotZXh0ZXJuICJDIiBpbnQgX19zZXRfdGxzKHZvaWQqKTsKLQotLy8gVXNlZCBieSBnZGIgdG8gdHJhY2sgdGhyZWFkIGNyZWF0aW9uLiBTZWUgbGlidGhyZWFkX2RiLgotI2lmZGVmIF9faTM4Nl9fCi1leHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkgX19hdHRyaWJ1dGVfXygoZmFzdGNhbGwpKSB2b2lkIF90aHJlYWRfY3JlYXRlZF9ob29rKHBpZF90KSB7fQotI2Vsc2UKLWV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSB2b2lkIF90aHJlYWRfY3JlYXRlZF9ob29rKHBpZF90KSB7fQorLy8geDg2IHVzZXMgc2VnbWVudCBkZXNjcmlwdG9ycyByYXRoZXIgdGhhbiBhIGRpcmVjdCBwb2ludGVyIHRvIFRMUy4KKyNpZiBfX2kzODZfXworI2luY2x1ZGUgPGFzbS9sZHQuaD4KK2V4dGVybiAiQyIgX19MSUJDX0hJRERFTl9fIHZvaWQgX19pbml0X3VzZXJfZGVzYyhzdHJ1Y3QgdXNlcl9kZXNjKiwgaW50LCB2b2lkKik7CiAjZW5kaWYKIAotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnUHRocmVhZFN0YWNrQ3JlYXRpb25Mb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKLQotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnRGVidWdnZXJOb3RpZmljYXRpb25Mb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKK2V4dGVybiAiQyIgaW50IF9faXN0aHJlYWRlZDsKIAogLy8gVGhpcyBjb2RlIGlzIHVzZWQgYm90aCBieSBlYWNoIG5ldyBwdGhyZWFkIGFuZCB0aGUgY29kZSB0aGF0IGluaXRpYWxpemVzIHRoZSBtYWluIHRocmVhZC4KIHZvaWQgX19pbml0X3RscyhwdGhyZWFkX2ludGVybmFsX3QqIHRocmVhZCkgewotICAvLyBaZXJvLWluaXRpYWxpemUgYWxsIHRoZSBzbG90cyBhZnRlciBUTFNfU0xPVF9TRUxGIGFuZCBUTFNfU0xPVF9USFJFQURfSUQuCi0gIGZvciAoc2l6ZV90IGkgPSBUTFNfU0xPVF9FUlJOTzsgaSA8IEJJT05JQ19UTFNfU0xPVFM7ICsraSkgewotICAgIHRocmVhZC0+dGxzW2ldID0gTlVMTDsKKyAgaWYgKHRocmVhZC0+dXNlcl9hbGxvY2F0ZWRfc3RhY2soKSkgeworICAgIC8vIFdlIGRvbid0IGtub3cgd2hlcmUgdGhlIHVzZXIgZ290IHRoZWlyIHN0YWNrLCBzbyBhc3N1bWUgdGhlIHdvcnN0IGFuZCB6ZXJvIHRoZSBUTFMgYXJlYS4KKyAgICBtZW1zZXQoJnRocmVhZC0+dGxzWzBdLCAwLCBCSU9OSUNfVExTX1NMT1RTICogc2l6ZW9mKHZvaWQqKSk7CiAgIH0KIAotI2lmIGRlZmluZWQoX19pMzg2X18pCi0gIF9fc2V0X3Rscyh0aHJlYWQtPnRscyk7Ci0jZW5kaWYKLQogICAvLyBTbG90IDAgbXVzdCBwb2ludCB0byBpdHNlbGYuIFRoZSB4ODYgTGludXgga2VybmVsIHJlYWRzIHRoZSBUTFMgZnJvbSAlZnM6MC4KICAgdGhyZWFkLT50bHNbVExTX1NMT1RfU0VMRl0gPSB0aHJlYWQtPnRsczsKICAgdGhyZWFkLT50bHNbVExTX1NMT1RfVEhSRUFEX0lEXSA9IHRocmVhZDsKQEAgLTc1LDcgKzY2LDcgQEAKIHZvaWQgX19pbml0X2FsdGVybmF0ZV9zaWduYWxfc3RhY2socHRocmVhZF9pbnRlcm5hbF90KiB0aHJlYWQpIHsKICAgLy8gQ3JlYXRlIGFuZCBzZXQgYW4gYWx0ZXJuYXRlIHNpZ25hbCBzdGFjay4KICAgc3RhY2tfdCBzczsKLSAgc3Muc3Nfc3AgPSBtbWFwKE5VTEwsIFNJR1NUS1NaLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywgMCwgMCk7CisgIHNzLnNzX3NwID0gbW1hcChOVUxMLCBTSUdTVEtTWiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKICAgaWYgKHNzLnNzX3NwICE9IE1BUF9GQUlMRUQpIHsKICAgICBzcy5zc19zaXplID0gU0lHU1RLU1o7CiAgICAgc3Muc3NfZmxhZ3MgPSAwOwpAQCAtMTExLDggKzEwMiw2IEBACiB9CiAKIHN0YXRpYyB2b2lkKiBfX2NyZWF0ZV90aHJlYWRfc3RhY2socHRocmVhZF9pbnRlcm5hbF90KiB0aHJlYWQpIHsKLSAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2soJmdQdGhyZWFkU3RhY2tDcmVhdGlvbkxvY2spOwotCiAgIC8vIENyZWF0ZSBhIG5ldyBwcml2YXRlIGFub255bW91cyBtYXAuCiAgIGludCBwcm90ID0gUFJPVF9SRUFEIHwgUFJPVF9XUklURTsKICAgaW50IGZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRTsKQEAgLTE0NCwxMSArMTMzLDggQEAKICAgLy8gbm90aWZ5IGdkYiBhYm91dCB0aGlzIHRocmVhZCBiZWZvcmUgd2Ugc3RhcnQgZG9pbmcgYW55dGhpbmcuCiAgIC8vIFRoaXMgYWxzbyBwcm92aWRlcyB0aGUgbWVtb3J5IGJhcnJpZXIgbmVlZGVkIHRvIGVuc3VyZSB0aGF0IGFsbCBtZW1vcnkKICAgLy8gYWNjZXNzZXMgcHJldmlvdXNseSBtYWRlIGJ5IHRoZSBjcmVhdGluZyB0aHJlYWQgYXJlIHZpc2libGUgdG8gdXMuCi0gIHB0aHJlYWRfbXV0ZXhfdCogc3RhcnRfbXV0ZXggPSAocHRocmVhZF9tdXRleF90KikgJnRocmVhZC0+dGxzW1RMU19TTE9UX1NUQVJUX01VVEVYXTsKLSAgcHRocmVhZF9tdXRleF9sb2NrKHN0YXJ0X211dGV4KTsKLSAgcHRocmVhZF9tdXRleF9kZXN0cm95KHN0YXJ0X211dGV4KTsKLQotICBfX2luaXRfdGxzKHRocmVhZCk7CisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmdGhyZWFkLT5zdGFydHVwX2hhbmRzaGFrZV9tdXRleCk7CisgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmdGhyZWFkLT5zdGFydHVwX2hhbmRzaGFrZV9tdXRleCk7CiAKICAgX19pbml0X2FsdGVybmF0ZV9zaWduYWxfc3RhY2sodGhyZWFkKTsKIApAQCAtMTY5LDExICsxNTUsNyBAQAogICAgICAgICAgICAgICAgICAgIHZvaWQqICgqc3RhcnRfcm91dGluZSkodm9pZCopLCB2b2lkKiBhcmcpIHsKICAgRXJybm9SZXN0b3JlciBlcnJub19yZXN0b3JlcjsKIAotICAvLyBJbmZvcm0gdGhlIHJlc3Qgb2YgdGhlIEMgbGlicmFyeSB0aGF0IGF0IGxlYXN0IG9uZSB0aHJlYWQKLSAgLy8gd2FzIGNyZWF0ZWQuIFRoaXMgd2lsbCBlbmZvcmNlIGNlcnRhaW4gZnVuY3Rpb25zIHRvIGFjcXVpcmUvcmVsZWFzZQotICAvLyBsb2NrcyAoZS5nLiBhdGV4aXQoKSkgdG8gcHJvdGVjdCBzaGFyZWQgZ2xvYmFsIHN0cnVjdHVyZXMuCi0gIC8vIFRoaXMgd29ya3MgYmVjYXVzZSBwdGhyZWFkX2NyZWF0ZSgpIGlzIG5vdCBjYWxsZWQgYnkgdGhlIEMgbGlicmFyeQotICAvLyBpbml0aWFsaXphdGlvbiByb3V0aW5lIHRoYXQgc2V0cyB1cCB0aGUgbWFpbiB0aHJlYWQncyBkYXRhIHN0cnVjdHVyZXMuCisgIC8vIEluZm9ybSB0aGUgcmVzdCBvZiB0aGUgQyBsaWJyYXJ5IHRoYXQgYXQgbGVhc3Qgb25lIHRocmVhZCB3YXMgY3JlYXRlZC4KICAgX19pc3RocmVhZGVkID0gMTsKIAogICBwdGhyZWFkX2ludGVybmFsX3QqIHRocmVhZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8cHRocmVhZF9pbnRlcm5hbF90Kj4oY2FsbG9jKHNpemVvZigqdGhyZWFkKSwgMSkpOwpAQCAtMTkwLDggKzE3Miw4IEBACiAgIH0KIAogICAvLyBNYWtlIHN1cmUgdGhlIHN0YWNrIHNpemUgYW5kIGd1YXJkIHNpemUgYXJlIG11bHRpcGxlcyBvZiBQQUdFX1NJWkUuCi0gIHRocmVhZC0+YXR0ci5zdGFja19zaXplID0gKHRocmVhZC0+YXR0ci5zdGFja19zaXplICsgKFBBR0VfU0laRS0xKSkgJiB+KFBBR0VfU0laRS0xKTsKLSAgdGhyZWFkLT5hdHRyLmd1YXJkX3NpemUgPSAodGhyZWFkLT5hdHRyLmd1YXJkX3NpemUgKyAoUEFHRV9TSVpFLTEpKSAmIH4oUEFHRV9TSVpFLTEpOworICB0aHJlYWQtPmF0dHIuc3RhY2tfc2l6ZSA9IEJJT05JQ19BTElHTih0aHJlYWQtPmF0dHIuc3RhY2tfc2l6ZSwgUEFHRV9TSVpFKTsKKyAgdGhyZWFkLT5hdHRyLmd1YXJkX3NpemUgPSBCSU9OSUNfQUxJR04odGhyZWFkLT5hdHRyLmd1YXJkX3NpemUsIFBBR0VfU0laRSk7CiAKICAgaWYgKHRocmVhZC0+YXR0ci5zdGFja19iYXNlID09IE5VTEwpIHsKICAgICAvLyBUaGUgY2FsbGVyIGRpZG4ndCBwcm92aWRlIGEgc3RhY2ssIHNvIGFsbG9jYXRlIG9uZS4KQEAgLTIwOSw4ICsxOTEsMTAgQEAKICAgLy8gVGhlIGNoaWxkIHN0YWNrIGlzIHRoZSBzYW1lIGFkZHJlc3MsIGp1c3QgZ3Jvd2luZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLgogICAvLyBBdCBvZmZzZXRzID49IDAsIHdlIGhhdmUgdGhlIFRMUyBzbG90cy4KICAgLy8gQXQgb2Zmc2V0cyA8IDAsIHdlIGhhdmUgdGhlIGNoaWxkIHN0YWNrLgotICB0aHJlYWQtPnRscyA9ICh2b2lkKiopKCh1aW50OF90KikodGhyZWFkLT5hdHRyLnN0YWNrX2Jhc2UpICsgdGhyZWFkLT5hdHRyLnN0YWNrX3NpemUgLSBCSU9OSUNfVExTX1NMT1RTICogc2l6ZW9mKHZvaWQqKSk7CisgIHRocmVhZC0+dGxzID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRocmVhZC0+YXR0ci5zdGFja19iYXNlKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZC0+YXR0ci5zdGFja19zaXplIC0gQklPTklDX1RMU19TTE9UUyAqIHNpemVvZih2b2lkKikpOwogICB2b2lkKiBjaGlsZF9zdGFjayA9IHRocmVhZC0+dGxzOworICBfX2luaXRfdGxzKHRocmVhZCk7CiAKICAgLy8gQ3JlYXRlIGEgbXV0ZXggZm9yIHRoZSB0aHJlYWQgaW4gVExTIHRvIHdhaXQgb24gb25jZSBpdCBzdGFydHMgc28gd2UgY2FuIGtlZXAKICAgLy8gaXQgZnJvbSBkb2luZyBhbnl0aGluZyB1bnRpbCBhZnRlciB3ZSBub3RpZnkgdGhlIGRlYnVnZ2VyIGFib3V0IGl0CkBAIC0yMTgsMzEgKzIwMiwzMiBAQAogICAvLyBUaGlzIGFsc28gcHJvdmlkZXMgdGhlIG1lbW9yeSBiYXJyaWVyIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgYWxsCiAgIC8vIG1lbW9yeSBhY2Nlc3NlcyBwcmV2aW91c2x5IHBlcmZvcm1lZCBieSB0aGlzIHRocmVhZCBhcmUgdmlzaWJsZSB0bwogICAvLyB0aGUgbmV3IHRocmVhZC4KLSAgcHRocmVhZF9tdXRleF90KiBzdGFydF9tdXRleCA9IChwdGhyZWFkX211dGV4X3QqKSAmdGhyZWFkLT50bHNbVExTX1NMT1RfU1RBUlRfTVVURVhdOwotICBwdGhyZWFkX211dGV4X2luaXQoc3RhcnRfbXV0ZXgsIE5VTEwpOwotICBwdGhyZWFkX211dGV4X2xvY2soc3RhcnRfbXV0ZXgpOwotCi0gIHRocmVhZC0+dGxzW1RMU19TTE9UX1RIUkVBRF9JRF0gPSB0aHJlYWQ7CisgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmdGhyZWFkLT5zdGFydHVwX2hhbmRzaGFrZV9tdXRleCwgTlVMTCk7CisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmdGhyZWFkLT5zdGFydHVwX2hhbmRzaGFrZV9tdXRleCk7CiAKICAgdGhyZWFkLT5zdGFydF9yb3V0aW5lID0gc3RhcnRfcm91dGluZTsKICAgdGhyZWFkLT5zdGFydF9yb3V0aW5lX2FyZyA9IGFyZzsKIAorICB0aHJlYWQtPnNldF9jYWNoZWRfcGlkKGdldHBpZCgpKTsKKwogICBpbnQgZmxhZ3MgPSBDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfCBDTE9ORV9TSUdIQU5EIHwgQ0xPTkVfVEhSRUFEIHwgQ0xPTkVfU1lTVlNFTSB8CiAgICAgICBDTE9ORV9TRVRUTFMgfCBDTE9ORV9QQVJFTlRfU0VUVElEIHwgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQ7CisgIHZvaWQqIHRscyA9IHRocmVhZC0+dGxzOwogI2lmIGRlZmluZWQoX19pMzg2X18pCiAgIC8vIE9uIHg4NiAoYnV0IG5vdCB4ODYtNjQpLCBDTE9ORV9TRVRUTFMgdGFrZXMgYSBwb2ludGVyIHRvIGEgc3RydWN0IHVzZXJfZGVzYyByYXRoZXIgdGhhbgotICAvLyBhIHBvaW50ZXIgdG8gdGhlIFRMUyBpdHNlbGYuIFJhdGhlciB0aGFuIHRyeSB0byBkZWFsIHdpdGggdGhhdCBoZXJlLCB3ZSBqdXN0IGxldCB4ODYgc2V0Ci0gIC8vIHRoZSBUTFMgbWFudWFsbHkgaW4gX19pbml0X3RscywgbGlrZSBhbGwgYXJjaGl0ZWN0dXJlcyB1c2VkIHRvLgotICBmbGFncyAmPSB+Q0xPTkVfU0VUVExTOworICAvLyBhIHBvaW50ZXIgdG8gdGhlIFRMUyBpdHNlbGYuCisgIHVzZXJfZGVzYyB0bHNfZGVzY3JpcHRvcjsKKyAgX19pbml0X3VzZXJfZGVzYygmdGxzX2Rlc2NyaXB0b3IsIGZhbHNlLCB0bHMpOworICB0bHMgPSAmdGxzX2Rlc2NyaXB0b3I7CiAjZW5kaWYKLSAgaW50IHJjID0gX19iaW9uaWNfY2xvbmUoZmxhZ3MsIGNoaWxkX3N0YWNrLCAmKHRocmVhZC0+dGlkKSwgdGhyZWFkLT50bHMsICYodGhyZWFkLT50aWQpLCBfX3B0aHJlYWRfc3RhcnQsIHRocmVhZCk7CisgIGludCByYyA9IGNsb25lKF9fcHRocmVhZF9zdGFydCwgY2hpbGRfc3RhY2ssIGZsYWdzLCB0aHJlYWQsICYodGhyZWFkLT50aWQpLCB0bHMsICYodGhyZWFkLT50aWQpKTsKICAgaWYgKHJjID09IC0xKSB7CiAgICAgaW50IGNsb25lX2Vycm5vID0gZXJybm87CiAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB1bmxvY2sgdGhlIG11dGV4IGF0IGFsbCBiZWNhdXNlIGNsb25lKDIpIGZhaWxlZCBzbyB0aGVyZSdzIG5vIGNoaWxkIHdhaXRpbmcgdG8KICAgICAvLyBiZSB1bmJsb2NrZWQsIGJ1dCB3ZSdyZSBhYm91dCB0byB1bm1hcCB0aGUgbWVtb3J5IHRoZSBtdXRleCBpcyBzdG9yZWQgaW4sIHNvIHRoaXMgc2VydmVzIGFzIGEKICAgICAvLyByZW1pbmRlciB0aGF0IHlvdSBjYW4ndCByZXdyaXRlIHRoaXMgZnVuY3Rpb24gdG8gdXNlIGEgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLgotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKHN0YXJ0X211dGV4KTsKLSAgICBpZiAoKHRocmVhZC0+YXR0ci5mbGFncyAmIFBUSFJFQURfQVRUUl9GTEFHX1VTRVJfQUxMT0NBVEVEX1NUQUNLKSA9PSAwKSB7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnRocmVhZC0+c3RhcnR1cF9oYW5kc2hha2VfbXV0ZXgpOworICAgIGlmICghdGhyZWFkLT51c2VyX2FsbG9jYXRlZF9zdGFjaygpKSB7CiAgICAgICBtdW5tYXAodGhyZWFkLT5hdHRyLnN0YWNrX2Jhc2UsIHRocmVhZC0+YXR0ci5zdGFja19zaXplKTsKICAgICB9CiAgICAgZnJlZSh0aHJlYWQpOwpAQCAtMjU2LDE5ICsyNDEsMTMgQEAKICAgICAvLyBMZXR0aW5nIHRoZSB0aHJlYWQgcnVuIGlzIHRoZSBlYXNpZXN0IHdheSB0byBjbGVhbiB1cCBpdHMgcmVzb3VyY2VzLgogICAgIHRocmVhZC0+YXR0ci5mbGFncyB8PSBQVEhSRUFEX0FUVFJfRkxBR19ERVRBQ0hFRDsKICAgICB0aHJlYWQtPnN0YXJ0X3JvdXRpbmUgPSBfX2RvX25vdGhpbmc7Ci0gICAgcHRocmVhZF9tdXRleF91bmxvY2soc3RhcnRfbXV0ZXgpOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0aHJlYWQtPnN0YXJ0dXBfaGFuZHNoYWtlX211dGV4KTsKICAgICByZXR1cm4gaW5pdF9lcnJubzsKICAgfQogCi0gIC8vIE5vdGlmeSBhbnkgZGVidWdnZXJzIGFib3V0IHRoZSBuZXcgdGhyZWFkLgotICB7Ci0gICAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGRlYnVnZ2VyX2xvY2tlcigmZ0RlYnVnZ2VyTm90aWZpY2F0aW9uTG9jayk7Ci0gICAgX3RocmVhZF9jcmVhdGVkX2hvb2sodGhyZWFkLT50aWQpOwotICB9Ci0KICAgLy8gUHVibGlzaCB0aGUgcHRocmVhZF90IGFuZCB1bmxvY2sgdGhlIG11dGV4IHRvIGxldCB0aGUgbmV3IHRocmVhZCBzdGFydCBydW5uaW5nLgogICAqdGhyZWFkX291dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8cHRocmVhZF90Pih0aHJlYWQpOwotICBwdGhyZWFkX211dGV4X3VubG9jayhzdGFydF9tdXRleCk7CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0aHJlYWQtPnN0YXJ0dXBfaGFuZHNoYWtlX211dGV4KTsKIAogICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfZGVidWcuY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9kZWJ1Zy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMWYwNDAuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvcHRocmVhZF9kZWJ1Zy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3MTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2F0b21pY3MuaD4KLSNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDx1bndpbmQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX3Rscy5oIgotI2luY2x1ZGUgImRlYnVnX21hcGluZm8uaCIKLSNpbmNsdWRlICJkZWJ1Z19zdGFja3RyYWNlLmgiCi0jaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogICAgICBEZWFkbG9jayBwcmVkaWN0aW9uCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotLyoKLVRoZSBpZGVhIGlzIHRvIHByZWRpY3QgdGhlIHBvc3NpYmlsaXR5IG9mIGRlYWRsb2NrIGJ5IHJlY29yZGluZyB0aGUgb3JkZXIKLWluIHdoaWNoIGxvY2tzIGFyZSBhY3F1aXJlZC4gIElmIHdlIHNlZSBhbiBhdHRlbXB0IHRvIGFjcXVpcmUgYSBsb2NrCi1vdXQgb2Ygb3JkZXIsIHdlIGNhbiBpZGVudGlmeSB0aGUgbG9ja3MgYW5kIG9mZmVuZGluZyBjb2RlLgotCi1UbyBtYWtlIHRoaXMgd29yaywgd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBsb2NrcyBoZWxkIGJ5IGVhY2ggdGhyZWFkLAotYW5kIGNyZWF0ZSBoaXN0b3J5IHRyZWVzIGZvciBlYWNoIGxvY2suICBXaGVuIGEgdGhyZWFkIHRyaWVzIHRvIGFjcXVpcmUKLWEgbmV3IGxvY2ssIHdlIHdhbGsgdGhyb3VnaCB0aGUgImhpc3RvcnkgY2hpbGRyZW4iIG9mIHRoZSBsb2NrLCBsb29raW5nCi1mb3IgYSBtYXRjaCB3aXRoIGxvY2tzIHRoZSB0aHJlYWQgYWxyZWFkeSBob2xkcy4gIElmIHdlIGZpbmQgYSBtYXRjaCwKLWl0IG1lYW5zIHRoZSB0aHJlYWQgaGFzIG1hZGUgYSByZXF1ZXN0IHRoYXQgY291bGQgcmVzdWx0IGluIGEgZGVhZGxvY2suCi0KLVRvIHN1cHBvcnQgcmVjdXJzaXZlIGxvY2tzLCB3ZSBhbHdheXMgYWxsb3cgcmUtbG9ja2luZyBhIGN1cnJlbnRseS1oZWxkCi1sb2NrLCBhbmQgbWFpbnRhaW4gYSByZWN1cnNpb24gZGVwdGggY291bnQuCi0KLUFuIEFTQ0lJLWFydCBleGFtcGxlLCB3aGVyZSBsZXR0ZXJzIHJlcHJlc2VudCBsb2NrczoKLQotICAgICAgICBBCi0gICAgICAgL3xcCi0gICAgICAvIHwgXAotICAgICBCICB8ICBECi0gICAgICBcIHwKLSAgICAgICBcfAotICAgICAgICBDCi0KLVRoZSBhYm92ZSBpcyB0aGUgdHJlZSB3ZSdkIGhhdmUgYWZ0ZXIgaGFuZGxpbmcgbG9jayBzeW5jaHJvbml6YXRpb24KLXNlcXVlbmNlcyAiQUJDIiwgIkFDIiwgIkFEIi4gIEEgaGFzIHRocmVlIGNoaWxkcmVuLCB7QiwgQywgRH0uICBDIGlzIGFsc28KLWEgY2hpbGQgb2YgQi4gIChUaGUgbGluZXMgcmVwcmVzZW50IHBvaW50ZXJzIGJldHdlZW4gcGFyZW50IGFuZCBjaGlsZC4KLUV2ZXJ5IG5vZGUgY2FuIGhhdmUgbXVsdGlwbGUgcGFyZW50cyBhbmQgbXVsdGlwbGUgY2hpbGRyZW4uKQotCi1JZiB3ZSBob2xkIEFDLCBhbmQgd2FudCB0byBsb2NrIEIsIHdlIHJlY3Vyc2l2ZWx5IHNlYXJjaCB0aHJvdWdoIEIncwotY2hpbGRyZW4gdG8gc2VlIGlmIEEgb3IgQyBhcHBlYXJzLiAgSXQgZG9lcywgc28gd2UgcmVqZWN0IHRoZSBhdHRlbXB0LgotKEEgc3RyYWlnaHRmb3J3YXJkIHdheSB0byBpbXBsZW1lbnQgaXQ6IGFkZCBhIGxpbmsgZnJvbSBDIHRvIEIsIHRoZW4KLWRldGVybWluZSB3aGV0aGVyIHRoZSBncmFwaCBzdGFydGluZyBhdCBCIGNvbnRhaW5zIGEgY3ljbGUuKQotCi1JZiB3ZSBob2xkIEFDIGFuZCB3YW50IHRvIGxvY2sgRCwgd2Ugd291bGQgc3VjY2VlZCwgY3JlYXRpbmcgYSBuZXcgbGluawotZnJvbSBDIHRvIEQuCi0KLVVwZGF0ZXMgdG8gTXV0ZXhJbmZvIHN0cnVjdHMgYXJlIG9ubHkgYWxsb3dlZCBmb3IgdGhlIHRocmVhZCB0aGF0IGhvbGRzCi10aGUgbG9jaywgc28gd2UgYWN0dWFsbHkgZG8gbW9zdCBvZiBvdXIgZGVhZGxvY2sgcHJlZGljdGlvbiB3b3JrIGFmdGVyCi10aGUgbG9jayBoYXMgYmVlbiBhY3F1aXJlZC4KLSovCi0KLSNpZiBQVEhSRUFEX0RFQlVHX0VOQUJMRUQKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGxvZyBmdW5jdGlvbnMKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSNkZWZpbmUgTE9HRChmb3JtYXQsIC4uLikgIFwKLSAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgInB0aHJlYWRfZGVidWciLCAoZm9ybWF0KSwgIyNfX1ZBX0FSR1NfXyApCi0KLSNkZWZpbmUgTE9HVyhmb3JtYXQsIC4uLikgIFwKLSAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19XQVJOLCAicHRocmVhZF9kZWJ1ZyIsIChmb3JtYXQpLCAjI19fVkFfQVJHU19fICkKLQotI2RlZmluZSBMT0dFKGZvcm1hdCwgLi4uKSAgXAotICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0VSUk9SLCAicHRocmVhZF9kZWJ1ZyIsIChmb3JtYXQpLCAjI19fVkFfQVJHU19fICkKLQotI2RlZmluZSBMT0dJKGZvcm1hdCwgLi4uKSAgXAotICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0lORk8sICJwdGhyZWFkX2RlYnVnIiwgKGZvcm1hdCksICMjX19WQV9BUkdTX18gKQotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qga1N0YXJ0QmFubmVyID0KLSAgICAgICAgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBrRW5kQmFubmVyID0KLSAgICAgICAgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSI7Ci0KLWV4dGVybiBjb25zdCBjaGFyKiBfX3Byb2duYW1lOwotCi0jZGVmaW5lIFNUQUNLX1RSQUNFX0RFUFRIIDE2Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogbGV2ZWwgPD0gMCA6IGRlYWRsb2NrIHByZWRpY3Rpb24gZGlzYWJsZWQKLSAqIGxldmVsICAgIDEgOiBkZWFkbG9jayBwcmVkaWN0aW9uIGVuYWJsZWQsIHcvbyBjYWxsIHN0YWNrcwotICogbGV2ZWwgICAgMiA6IGRlYWRsb2NrIHByZWRpY3Rpb24gZW5hYmxlZCB3LyBjYWxsIHN0YWNrcwotICovCi0jZGVmaW5lIENBUFRVUkVfQ0FMTFNUQUNLIDIKLXN0YXRpYyBpbnQgc1B0aHJlYWREZWJ1Z0xldmVsID0gMDsKLXN0YXRpYyBwaWRfdCBzUHRocmVhZERlYnVnRGlzYWJsZWRUaHJlYWQgPSAtMTsKLXN0YXRpYyBwdGhyZWFkX211dGV4X3Qgc0RiZ0xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogc29tZSBzaW1wbGUvbGFtZSBtYWxsb2MgcmVwbGFjZW1lbnQKLSAqIE5PVCB0aHJlYWQtc2FmZSBhbmQgbGVha3MgZXZlcnl0aGluZwotICovCi0KLSNkZWZpbmUgREJHX0FMTE9DX0JMT0NLX1NJWkUgUEFHRVNJWkUKLXN0YXRpYyBzaXplX3Qgc0RiZ0FsbG9jT2Zmc2V0ID0gREJHX0FMTE9DX0JMT0NLX1NJWkU7Ci1zdGF0aWMgY2hhciogc0RiZ0FsbG9jUHRyID0gTlVMTDsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgVCogRGJnQWxsb2NMb2NrZWQoc2l6ZV90IGNvdW50ID0gMSkgewotICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKFQpICogY291bnQ7Ci0gICAgaWYgKChzRGJnQWxsb2NPZmZzZXQgKyBzaXplKSA+IERCR19BTExPQ19CTE9DS19TSVpFKSB7Ci0gICAgICAgIHNEYmdBbGxvY09mZnNldCA9IDA7Ci0gICAgICAgIHNEYmdBbGxvY1B0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1tYXAoTlVMTCwgREJHX0FMTE9DX0JMT0NLX1NJWkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVF9SRUFEfFBST1RfV1JJVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX0FOT04gfCBNQVBfUFJJVkFURSwgMCwgMCkpOwotICAgICAgICBpZiAoc0RiZ0FsbG9jUHRyID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgIHZvaWQqIGFkZHIgPSBzRGJnQWxsb2NQdHIgKyBzRGJnQWxsb2NPZmZzZXQ7Ci0gICAgc0RiZ0FsbG9jT2Zmc2V0ICs9IHNpemU7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KGFkZHIpOwotfQotCi1zdGF0aWMgdm9pZCogZGVidWdfcmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgb2xkX3NpemUpIHsKLSAgICB2b2lkKiBhZGRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwKLSAgICAgICAgICAgIE1BUF9BTk9OIHwgTUFQX1BSSVZBVEUsIDAsIDApOwotICAgIGlmIChhZGRyICE9IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgaWYgKHB0cikgewotICAgICAgICAgICAgbWVtY3B5KGFkZHIsIHB0ciwgb2xkX3NpemUpOwotICAgICAgICAgICAgbXVubWFwKHB0ciwgb2xkX3NpemUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYWRkciA9IE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBhZGRyOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBNdXRleEluZm87Ci0KLXR5cGVkZWYgc3RydWN0IENhbGxTdGFjayB7Ci0gICAgdWludHB0cl90ICAgIGRlcHRoOwotICAgIHVpbnRwdHJfdCogICBhZGRyczsKLX0gQ2FsbFN0YWNrOwotCi10eXBlZGVmIHN0cnVjdCBNdXRleEluZm8qIE11dGV4SW5mb0xpc3RFbnRyeTsKLXR5cGVkZWYgc3RydWN0IENhbGxTdGFjayAgQ2FsbFN0YWNrTGlzdEVudHJ5OwotCi10eXBlZGVmIHN0cnVjdCBHcm93aW5nTGlzdCB7Ci0gICAgaW50IGFsbG9jOwotICAgIGludCBjb3VudDsKLSAgICB1bmlvbiB7Ci0gICAgICAgIHZvaWQqICAgICAgICAgICAgICAgZGF0YTsKLSAgICAgICAgTXV0ZXhJbmZvTGlzdEVudHJ5KiBsaXN0OwotICAgICAgICBDYWxsU3RhY2tMaXN0RW50cnkqIHN0YWNrOwotICAgIH07Ci19IEdyb3dpbmdMaXN0OwotCi10eXBlZGVmIEdyb3dpbmdMaXN0IE11dGV4SW5mb0xpc3Q7Ci10eXBlZGVmIEdyb3dpbmdMaXN0IENhbGxTdGFja0xpc3Q7Ci0KLXR5cGVkZWYgc3RydWN0IE11dGV4SW5mbyB7Ci0gICAgLy8gdGhyZWFkIGN1cnJlbnRseSBob2xkaW5nIHRoZSBsb2NrIG9yIDAKLSAgICBwaWRfdCAgICAgICAgICAgICAgIG93bmVyOwotCi0gICAgLy8gbW9zdC1yZWNlbnRseS1sb2NrZWQgZG91Ymx5LWxpbmtlZCBsaXN0Ci0gICAgc3RydWN0IE11dGV4SW5mbyogICBwcmV2OwotICAgIHN0cnVjdCBNdXRleEluZm8qICAgbmV4dDsKLQotICAgIC8vIGZvciByZWVudHJhbnQgbG9ja3MKLSAgICBpbnQgICAgICAgICAgICAgICAgIGxvY2tDb3VudDsKLSAgICAvLyB3aGVuIGxvb2tpbmcgZm9yIGxvb3BzIGluIHRoZSBncmFwaCwgbWFya3MgdmlzaXRlZCBub2RlcwotICAgIGludCAgICAgICAgICAgICAgICAgaGlzdG9yeU1hcms7Ci0gICAgLy8gdGhlIGFjdHVhbCBtdXRleAotICAgIHB0aHJlYWRfbXV0ZXhfdCogICAgbXV0ZXg7Ci0gICAgLy8gbGlzdCBvZiBsb2NrcyBkaXJlY3RseSBhY3F1aXJlZCBBRlRFUiB0aGlzIG9uZSBpbiB0aGUgc2FtZSB0aHJlYWQKLSAgICBNdXRleEluZm9MaXN0ICAgICAgIGNoaWxkcmVuOwotICAgIC8vIGxpc3Qgb2YgbG9ja3MgZGlyZWN0bHkgYWNxdWlyZWQgQkVGT1JFIHRoaXMgb25lIGluIHRoZSBzYW1lIHRocmVhZAotICAgIE11dGV4SW5mb0xpc3QgICAgICAgcGFyZW50czsKLSAgICAvLyBsaXN0IG9mIGNhbGwgc3RhY2tzIHdoZW4gYSBuZXcgbGluayBpcyBlc3RhYmxpc2hlZCB0byB0aGlzIGxvY2sgZm9ybSBpdHMgcGFyZW50Ci0gICAgQ2FsbFN0YWNrTGlzdCAgICAgICBzdGFja3M7Ci0gICAgLy8gY2FsbCBzdGFjayB3aGVuIHRoaXMgbG9jayB3YXMgYWNxdWlyZWQgbGFzdAotICAgIGludCAgICAgICAgICAgICAgICAgc3RhY2tEZXB0aDsKLSAgICB1aW50cHRyX3QgICAgICAgICAgIHN0YWNrVHJhY2VbU1RBQ0tfVFJBQ0VfREVQVEhdOwotfSBNdXRleEluZm87Ci0KLXN0YXRpYyB2b2lkIGdyb3dpbmdMaXN0SW5pdChHcm93aW5nTGlzdCogbGlzdCkgewotICAgIGxpc3QtPmFsbG9jID0gMDsKLSAgICBsaXN0LT5jb3VudCA9IDA7Ci0gICAgbGlzdC0+ZGF0YSA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIGdyb3dpbmdMaXN0QWRkKEdyb3dpbmdMaXN0KiBwTGlzdCwgc2l6ZV90IG9ialNpemUpIHsKLSAgICBpZiAocExpc3QtPmNvdW50ID09IHBMaXN0LT5hbGxvYykgewotICAgICAgICBzaXplX3Qgb2xkc2l6ZSA9IHBMaXN0LT5hbGxvYyAqIG9ialNpemU7Ci0gICAgICAgIHBMaXN0LT5hbGxvYyArPSBQQUdFU0laRSAvIG9ialNpemU7Ci0gICAgICAgIHNpemVfdCBzaXplID0gcExpc3QtPmFsbG9jICogb2JqU2l6ZTsKLSAgICAgICAgcExpc3QtPmRhdGEgPSBkZWJ1Z19yZWFsbG9jKHBMaXN0LT5kYXRhLCBzaXplLCBvbGRzaXplKTsKLSAgICB9Ci0gICAgcExpc3QtPmNvdW50Kys7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRNdXRleEluZm8oTXV0ZXhJbmZvKiBvYmplY3QsIHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgpIHsKLSAgICBvYmplY3QtPm93bmVyID0gMDsKLSAgICBvYmplY3QtPnByZXYgPSAwOwotICAgIG9iamVjdC0+bmV4dCA9IDA7Ci0gICAgb2JqZWN0LT5sb2NrQ291bnQgPSAwOwotICAgIG9iamVjdC0+aGlzdG9yeU1hcmsgPSAwOwotICAgIG9iamVjdC0+bXV0ZXggPSBtdXRleDsKLSAgICBncm93aW5nTGlzdEluaXQoJm9iamVjdC0+Y2hpbGRyZW4pOwotICAgIGdyb3dpbmdMaXN0SW5pdCgmb2JqZWN0LT5wYXJlbnRzKTsKLSAgICBncm93aW5nTGlzdEluaXQoJm9iamVjdC0+c3RhY2tzKTsKLSAgICBvYmplY3QtPnN0YWNrRGVwdGggPSAwOwotfQotCi10eXBlZGVmIHN0cnVjdCBUaHJlYWRJbmZvIHsKLSAgICBwaWRfdCAgICAgICBwaWQ7Ci0gICAgTXV0ZXhJbmZvKiAgbXJsOwotfSBUaHJlYWRJbmZvOwotCi1zdGF0aWMgdm9pZCBpbml0VGhyZWFkSW5mbyhUaHJlYWRJbmZvKiBvYmplY3QsIHBpZF90IHBpZCkgewotICAgIG9iamVjdC0+cGlkID0gcGlkOwotICAgIG9iamVjdC0+bXJsID0gTlVMTDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBNdXRleEluZm8qIGdldF9tdXRleF9pbmZvKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpOwotc3RhdGljIHZvaWQgbXV0ZXhfbG9ja19jaGVja2VkKE11dGV4SW5mbyogbXJsLCBNdXRleEluZm8qIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBtdXRleF91bmxvY2tfY2hlY2tlZChNdXRleEluZm8qIG9iamVjdCk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1leHRlcm4gIkMiIGludCBwdGhyZWFkX211dGV4X2xvY2tfaW1wbChwdGhyZWFkX211dGV4X3QgKm11dGV4KTsKLWV4dGVybiAiQyIgaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrX2ltcGwocHRocmVhZF9tdXRleF90ICptdXRleCk7Ci0KLXN0YXRpYyBpbnQgcHRocmVhZF9tdXRleF9sb2NrX3VuY2hlY2tlZChwdGhyZWFkX211dGV4X3QgKm11dGV4KSB7Ci0gICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfbG9ja19pbXBsKG11dGV4KTsKLX0KLQotc3RhdGljIGludCBwdGhyZWFkX211dGV4X3VubG9ja191bmNoZWNrZWQocHRocmVhZF9tdXRleF90ICptdXRleCkgewotICAgIHJldHVybiBwdGhyZWFkX211dGV4X3VubG9ja19pbXBsKG11dGV4KTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIGR1cF9iYWNrdHJhY2UoQ2FsbFN0YWNrKiBzdGFjaywgc2l6ZV90IGNvdW50LCB1aW50cHRyX3QgY29uc3QqIGFkZHJzKSB7Ci0gICAgc3RhY2stPmRlcHRoID0gY291bnQ7Ci0gICAgc3RhY2stPmFkZHJzID0gRGJnQWxsb2NMb2NrZWQ8dWludHB0cl90Pihjb3VudCk7Ci0gICAgbWVtY3B5KHN0YWNrLT5hZGRycywgYWRkcnMsIGNvdW50ICogc2l6ZW9mKHVpbnRwdHJfdCkpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBoaXN0b3J5TGlzdEhhcygKLSAgICAgICAgY29uc3QgTXV0ZXhJbmZvTGlzdCogbGlzdCwgTXV0ZXhJbmZvIGNvbnN0ICogb2JqKSB7Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpPTA7IGk8bGlzdC0+Y291bnQ7IGkrKykgewotICAgICAgICBpZiAobGlzdC0+bGlzdFtpXSA9PSBvYmopIHsKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIHZvaWQgaGlzdG9yeUxpc3RBZGQoTXV0ZXhJbmZvTGlzdCogcExpc3QsIE11dGV4SW5mbyogb2JqKSB7Ci0gICAgZ3Jvd2luZ0xpc3RBZGQocExpc3QsIHNpemVvZihNdXRleEluZm9MaXN0RW50cnkpKTsKLSAgICBwTGlzdC0+bGlzdFtwTGlzdC0+Y291bnQgLSAxXSA9IG9iajsKLX0KLQotc3RhdGljIGludCBoaXN0b3J5TGlzdFJlbW92ZShNdXRleEluZm9MaXN0KiBwTGlzdCwgTXV0ZXhJbmZvKiBvYmopIHsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSBwTGlzdC0+Y291bnQtMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgaWYgKHBMaXN0LT5saXN0W2ldID09IG9iaikgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGkgPCAwKSB7Ci0gICAgICAgIC8vIG5vdCBmb3VuZCEKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKGkgIT0gcExpc3QtPmNvdW50LTEpIHsKLSAgICAgICAgLy8gY29weSB0aGUgbGFzdCBlbnRyeSB0byB0aGUgbmV3IGZyZWUgc2xvdAotICAgICAgICBwTGlzdC0+bGlzdFtpXSA9IHBMaXN0LT5saXN0W3BMaXN0LT5jb3VudC0xXTsKLSAgICB9Ci0gICAgcExpc3QtPmNvdW50LS07Ci0gICAgbWVtc2V0KCZwTGlzdC0+bGlzdFtwTGlzdC0+Y291bnRdLCAwLCBzaXplb2YoTXV0ZXhJbmZvTGlzdEVudHJ5KSk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtQYXJlbnRUb0NoaWxkKE11dGV4SW5mbyogcGFyZW50LCBNdXRleEluZm8qIGNoaWxkKSB7Ci0gICAgaGlzdG9yeUxpc3RBZGQoJnBhcmVudC0+Y2hpbGRyZW4sIGNoaWxkKTsKLSAgICBoaXN0b3J5TGlzdEFkZCgmY2hpbGQtPnBhcmVudHMsIHBhcmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVubGlua1BhcmVudEZyb21DaGlsZChNdXRleEluZm8qIHBhcmVudCwgTXV0ZXhJbmZvKiBjaGlsZCkgewotICAgIGhpc3RvcnlMaXN0UmVtb3ZlKCZwYXJlbnQtPmNoaWxkcmVuLCBjaGlsZCk7Ci0gICAgaGlzdG9yeUxpc3RSZW1vdmUoJmNoaWxkLT5wYXJlbnRzLCBwYXJlbnQpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgY2FsbHN0YWNrTGlzdEFkZChDYWxsU3RhY2tMaXN0KiBwTGlzdCwKLSAgICAgICAgaW50IGNvdW50LCB1aW50cHRyX3QgY29uc3QqIGFkZHJzKSB7Ci0gICAgZ3Jvd2luZ0xpc3RBZGQocExpc3QsIHNpemVvZihDYWxsU3RhY2tMaXN0RW50cnkpKTsKLSAgICBkdXBfYmFja3RyYWNlKCZwTGlzdC0+c3RhY2tbcExpc3QtPmNvdW50IC0gMV0sIGNvdW50LCBhZGRycyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogUmVjdXJzaXZlbHkgdHJhdmVyc2UgdGhlIG9iamVjdCBoaWVyYXJjaHkgc3RhcnRpbmcgYXQgIm9iaiIuICBXZSBtYXJrCi0gKiBvdXJzZWx2ZXMgb24gZW50cnkgYW5kIGNsZWFyIHRoZSBtYXJrIG9uIGV4aXQuICBJZiB3ZSBldmVyIGVuY291bnRlcgotICogYSBtYXJrZWQgb2JqZWN0LCB3ZSBoYXZlIGEgY3ljbGUuCi0gKgotICogUmV0dXJucyAidHJ1ZSIgaWYgYWxsIGlzIHdlbGwsICJmYWxzZSIgaWYgd2UgZm91bmQgYSBjeWNsZS4KLSAqLwotCi1zdGF0aWMgaW50IHRyYXZlcnNlVHJlZShNdXRleEluZm8qIG9iaiwgTXV0ZXhJbmZvIGNvbnN0KiBvYmpQYXJlbnQpCi17Ci0gICAgLyoKLSAgICAgKiBIYXZlIHdlIGJlZW4gaGVyZSBiZWZvcmU/Ci0gICAgICovCi0gICAgaWYgKG9iai0+aGlzdG9yeU1hcmspIHsKLSAgICAgICAgaW50IHN0YWNrRGVwdGg7Ci0gICAgICAgIHVpbnRwdHJfdCBhZGRyc1tTVEFDS19UUkFDRV9ERVBUSF07Ci0KLSAgICAgICAgLyogVHVybiBvZmYgcHJlZGljdGlvbiB0ZW1wb3JhcmlseSBpbiB0aGlzIHRocmVhZCB3aGlsZSBsb2dnaW5nICovCi0gICAgICAgIHNQdGhyZWFkRGVidWdEaXNhYmxlZFRocmVhZCA9IGdldHRpZCgpOwotCi0gICAgICAgIGJhY2t0cmFjZV9zdGFydHVwKCk7Ci0KLSAgICAgICAgTE9HVygiJXNcbiIsIGtTdGFydEJhbm5lcik7Ci0gICAgICAgIExPR1coInBpZDogJWQsIHRpZDogJWQgPj4+ICVzIDw8PCIsIGdldHBpZCgpLCBnZXR0aWQoKSwgX19wcm9nbmFtZSk7Ci0gICAgICAgIExPR1coIklsbGVnYWwgbG9jayBhdHRlbXB0OlxuIik7Ci0gICAgICAgIExPR1coIi0tLSBwdGhyZWFkX211dGV4X3QgYXQgJXBcbiIsIG9iai0+bXV0ZXgpOwotICAgICAgICBzdGFja0RlcHRoID0gZ2V0X2JhY2t0cmFjZShhZGRycywgU1RBQ0tfVFJBQ0VfREVQVEgpOwotICAgICAgICBsb2dfYmFja3RyYWNlKGFkZHJzLCBzdGFja0RlcHRoKTsKLQotICAgICAgICBMT0dXKCIrKysgQ3VycmVudGx5IGhlbGQgbG9ja3MgaW4gdGhpcyB0aHJlYWQgKGluIHJldmVyc2Ugb3JkZXIpOiIpOwotICAgICAgICBNdXRleEluZm8qIGN1ciA9IG9iajsKLSAgICAgICAgcGlkX3Qgb3VydGlkID0gZ2V0dGlkKCk7Ci0gICAgICAgIGludCBpOwotICAgICAgICBmb3IgKGk9MCA7IGk8Y3VyLT5wYXJlbnRzLmNvdW50IDsgaSsrKSB7Ci0gICAgICAgICAgICBNdXRleEluZm8qIHBhcmVudCA9IGN1ci0+cGFyZW50cy5saXN0W2ldOwotICAgICAgICAgICAgaWYgKHBhcmVudC0+b3duZXIgPT0gb3VydGlkKSB7Ci0gICAgICAgICAgICAgICAgTE9HVygiLS0tIHB0aHJlYWRfbXV0ZXhfdCBhdCAlcFxuIiwgcGFyZW50LT5tdXRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNQdGhyZWFkRGVidWdMZXZlbCA+PSBDQVBUVVJFX0NBTExTVEFDSykgewotICAgICAgICAgICAgICAgICAgICBsb2dfYmFja3RyYWNlKHBhcmVudC0+c3RhY2tUcmFjZSwgcGFyZW50LT5zdGFja0RlcHRoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY3VyID0gcGFyZW50OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgTE9HVygiKysrIEVhcmxpZXIsIHRoZSBmb2xsb3dpbmcgbG9jayBvcmRlciAoZnJvbSBsYXN0IHRvIGZpcnN0KSB3YXMgZXN0YWJsaXNoZWRcbiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBvYmotPmhpc3RvcnlNYXJrID0gMTsKLQotICAgIE11dGV4SW5mb0xpc3QqIHBMaXN0ID0gJm9iai0+Y2hpbGRyZW47Ci0gICAgaW50IHJlc3VsdCA9IDE7Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gcExpc3QtPmNvdW50LTE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIE11dGV4SW5mbyogY2hpbGQgPSBwTGlzdC0+bGlzdFtpXTsKLSAgICAgICAgaWYgKCF0cmF2ZXJzZVRyZWUoY2hpbGQsICBvYmopKSB7Ci0gICAgICAgICAgICBMT0dXKCItLS0gcHRocmVhZF9tdXRleF90IGF0ICVwXG4iLCBvYmotPm11dGV4KTsKLSAgICAgICAgICAgIGlmIChzUHRocmVhZERlYnVnTGV2ZWwgPj0gQ0FQVFVSRV9DQUxMU1RBQ0spIHsKLSAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBoaXN0b3J5TGlzdEhhcygmb2JqLT5wYXJlbnRzLCBvYmpQYXJlbnQpOwotICAgICAgICAgICAgICAgIGlmICgoc2l6ZV90KWluZGV4IDwgKHNpemVfdClvYmotPnN0YWNrcy5jb3VudCkgewotICAgICAgICAgICAgICAgICAgICBsb2dfYmFja3RyYWNlKG9iai0+c3RhY2tzLnN0YWNrW2luZGV4XS5hZGRycywgb2JqLT5zdGFja3Muc3RhY2tbaW5kZXhdLmRlcHRoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBsb2dfYmFja3RyYWNlKG9iai0+c3RhY2tUcmFjZSwgb2JqLT5zdGFja0RlcHRoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBvYmotPmhpc3RvcnlNYXJrID0gMDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgbXV0ZXhfbG9ja19jaGVja2VkKE11dGV4SW5mbyogbXJsLCBNdXRleEluZm8qIG9iamVjdCkKLXsKLSAgICBwaWRfdCB0aWQgPSBnZXR0aWQoKTsKLSAgICBpZiAob2JqZWN0LT5vd25lciA9PSB0aWQpIHsKLSAgICAgICAgb2JqZWN0LT5sb2NrQ291bnQrKzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG9iamVjdC0+b3duZXIgPSB0aWQ7Ci0gICAgb2JqZWN0LT5sb2NrQ291bnQgPSAwOwotCi0gICAgaWYgKHNQdGhyZWFkRGVidWdMZXZlbCA+PSBDQVBUVVJFX0NBTExTVEFDSykgewotICAgICAgICAvLyBhbHdheXMgcmVjb3JkIHRoZSBjYWxsIHN0YWNrIHdoZW4gYWNxdWlyaW5nIGEgbG9jay4KLSAgICAgICAgLy8gaXQncyBub3QgZWZmaWNpZW50LCBidXQgaXMgdXNlZnVsIGR1cmluZyBkaWFnbm9zdGljcwotICAgICAgICBvYmplY3QtPnN0YWNrRGVwdGggPSBnZXRfYmFja3RyYWNlKG9iamVjdC0+c3RhY2tUcmFjZSwgU1RBQ0tfVFJBQ0VfREVQVEgpOwotICAgIH0KLQotICAgIC8vIG5vIG90aGVyIGxvY2tzIGhlbGQgaW4gdGhpcyB0aHJlYWQgLS0gbm8gZGVhZGxvY2sgcG9zc2libGUhCi0gICAgaWYgKG1ybCA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBjaGVjayBpZiB0aGUgbG9jayB3ZSdyZSB0cnlpbmcgdG8gYWNxdWlyZSBpcyBhIGRpcmVjdCBkZXNjZW5kYW50IG9mCi0gICAgLy8gdGhlIG1vc3QgcmVjZW50bHkgbG9ja2VkIG11dGV4IGluIHRoaXMgdGhyZWFkLCBpbiB3aGljaCBjYXNlIHdlJ3JlCi0gICAgLy8gaW4gYSBnb29kIHNpdHVhdGlvbiAtLSBubyBkZWFkbG9jayBwb3NzaWJsZQotICAgIGlmIChoaXN0b3J5TGlzdEhhcygmbXJsLT5jaGlsZHJlbiwgb2JqZWN0KSA+PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwdGhyZWFkX211dGV4X2xvY2tfdW5jaGVja2VkKCZzRGJnTG9jayk7Ci0KLSAgICBsaW5rUGFyZW50VG9DaGlsZChtcmwsIG9iamVjdCk7Ci0gICAgaWYgKCF0cmF2ZXJzZVRyZWUob2JqZWN0LCBtcmwpKSB7Ci0gICAgICAgIGJhY2t0cmFjZV9zaHV0ZG93bigpOwotICAgICAgICBMT0dXKCIlc1xuIiwga0VuZEJhbm5lcik7Ci0gICAgICAgIHVubGlua1BhcmVudEZyb21DaGlsZChtcmwsIG9iamVjdCk7Ci0gICAgICAgIC8vIHJlZW5hYmxlIHB0aHJlYWQgZGVidWdnaW5nIGZvciB0aGlzIHRocmVhZAotICAgICAgICBzUHRocmVhZERlYnVnRGlzYWJsZWRUaHJlYWQgPSAtMTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyByZWNvcmQgdGhlIGNhbGwgc3RhY2sgZm9yIHRoaXMgbGluawotICAgICAgICAvLyBOT1RFOiB0aGUgY2FsbCBzdGFjayBpcyBhZGRlZCBhdCB0aGUgc2FtZSBpbmRleAotICAgICAgICAvLyBhcyBtcmwgaW4gb2JqZWN0LT5wYXJlbnRzW10KLSAgICAgICAgLy8gaWU6IG9iamVjdC0+cGFyZW50cy5jb3VudCA9PSBvYmplY3QtPnN0YWNrcy5jb3VudCwgd2hpY2ggaXMKLSAgICAgICAgLy8gYWxzbyB0aGUgaW5kZXguCi0gICAgICAgIGlmIChzUHRocmVhZERlYnVnTGV2ZWwgPj0gQ0FQVFVSRV9DQUxMU1RBQ0spIHsKLSAgICAgICAgICAgIGNhbGxzdGFja0xpc3RBZGQoJm9iamVjdC0+c3RhY2tzLAotICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnN0YWNrRGVwdGgsIG9iamVjdC0+c3RhY2tUcmFjZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdGhyZWFkX211dGV4X3VubG9ja191bmNoZWNrZWQoJnNEYmdMb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgbXV0ZXhfdW5sb2NrX2NoZWNrZWQoTXV0ZXhJbmZvKiBvYmplY3QpCi17Ci0gICAgcGlkX3QgdGlkID0gZ2V0dGlkKCk7Ci0gICAgaWYgKG9iamVjdC0+b3duZXIgPT0gdGlkKSB7Ci0gICAgICAgIGlmIChvYmplY3QtPmxvY2tDb3VudCA9PSAwKSB7Ci0gICAgICAgICAgICBvYmplY3QtPm93bmVyID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG9iamVjdC0+bG9ja0NvdW50LS07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEhhc2ggVGFibGUgZnVuY3Rpb25zCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBIQVNIVEFCTEVfU0laRSAgICAgIDI1NgotCi10eXBlZGVmIHN0cnVjdCBIYXNoRW50cnkgSGFzaEVudHJ5Owotc3RydWN0IEhhc2hFbnRyeSB7Ci0gICAgc2l6ZV90IHNsb3Q7Ci0gICAgSGFzaEVudHJ5KiBwcmV2OwotICAgIEhhc2hFbnRyeSogbmV4dDsKLSAgICB2b2lkKiBkYXRhOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgSGFzaFRhYmxlIEhhc2hUYWJsZTsKLXN0cnVjdCBIYXNoVGFibGUgewotICAgIEhhc2hFbnRyeSogc2xvdHNbSEFTSFRBQkxFX1NJWkVdOwotfTsKLQotc3RhdGljIEhhc2hUYWJsZSBzTXV0ZXhNYXA7Ci1zdGF0aWMgSGFzaFRhYmxlIHNUaHJlYWRNYXA7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdWludDMyX3QgZ2V0X2hhc2hjb2RlKHZvaWQgY29uc3QgKiBrZXksIHNpemVfdCBrZXlTaXplKQotewotICAgIHVpbnQzMl90IGggPSBrZXlTaXplOwotICAgIGNoYXIgY29uc3QqIGRhdGEgPSAoY2hhciBjb25zdCopa2V5OwotICAgIHNpemVfdCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBrZXlTaXplOyBpKyspIHsKLSAgICAgICAgaCA9IGggKiAzMSArICpkYXRhOwotICAgICAgICBkYXRhKys7Ci0gICAgfQotICAgIHJldHVybiAodWludDMyX3QpaDsKLX0KLQotc3RhdGljIHNpemVfdCBnZXRfaW5kZXgodWludDMyX3QgaCkKLXsKLSAgICAvLyBXZSBhcHBseSB0aGlzIHNlY29uZGFyeSBoYXNoaW5nIGRpc2NvdmVyZWQgYnkgRG91ZyBMZWEgdG8gZGVmZW5kCi0gICAgLy8gYWdhaW5zdCBiYWQgaGFzaGVzLgotICAgIGggKz0gfihoIDw8IDkpOwotICAgIGggXj0gKCgodW5zaWduZWQgaW50KSBoKSA+PiAxNCk7Ci0gICAgaCArPSAoaCA8PCA0KTsKLSAgICBoIF49ICgoKHVuc2lnbmVkIGludCkgaCkgPj4gMTApOwotICAgIHJldHVybiAoc2l6ZV90KWggJiAoSEFTSFRBQkxFX1NJWkUgLSAxKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIGhhc2htYXBfaW5pdChIYXNoVGFibGUqIHRhYmxlKSB7Ci0gICAgbWVtc2V0KHRhYmxlLCAwLCBzaXplb2YoSGFzaFRhYmxlKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhc2htYXBfcmVtb3ZlRW50cnkoSGFzaFRhYmxlKiB0YWJsZSwgSGFzaEVudHJ5KiBlbnRyeSkKLXsKLSAgICBIYXNoRW50cnkqIHByZXYgPSBlbnRyeS0+cHJldjsKLSAgICBIYXNoRW50cnkqIG5leHQgPSBlbnRyeS0+bmV4dDsKLSAgICBpZiAocHJldiAhPSBOVUxMKSBlbnRyeS0+cHJldi0+bmV4dCA9IG5leHQ7Ci0gICAgaWYgKG5leHQgIT0gTlVMTCkgZW50cnktPm5leHQtPnByZXYgPSBwcmV2OwotICAgIGlmIChwcmV2ID09IE5VTEwpIHsKLSAgICAgICAgLy8gd2UgYXJlIHRoZSBoZWFkIG9mIHRoZSBsaXN0LiBzZXQgdGhlIGhlYWQgdG8gYmUgbmV4dAotICAgICAgICB0YWJsZS0+c2xvdHNbZW50cnktPnNsb3RdID0gZW50cnktPm5leHQ7Ci0gICAgfQotfQotCi1zdGF0aWMgSGFzaEVudHJ5KiBoYXNobWFwX2xvb2t1cChIYXNoVGFibGUqIHRhYmxlLAotICAgICAgICB2b2lkIGNvbnN0KiBrZXksIHNpemVfdCBrc2l6ZSwKLSAgICAgICAgaW50ICgqZXF1YWxzKSh2b2lkIGNvbnN0KiBkYXRhLCB2b2lkIGNvbnN0KiBrZXkpKQotewotICAgIGNvbnN0IHVpbnQzMl90IGhhc2ggPSBnZXRfaGFzaGNvZGUoa2V5LCBrc2l6ZSk7Ci0gICAgY29uc3Qgc2l6ZV90IHNsb3QgPSBnZXRfaW5kZXgoaGFzaCk7Ci0KLSAgICBIYXNoRW50cnkqIGVudHJ5ID0gdGFibGUtPnNsb3RzW3Nsb3RdOwotICAgIHdoaWxlIChlbnRyeSkgewotICAgICAgICBpZiAoZXF1YWxzKGVudHJ5LT5kYXRhLCBrZXkpKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBlbnRyeSA9IGVudHJ5LT5uZXh0OwotICAgIH0KLQotICAgIGlmIChlbnRyeSA9PSBOVUxMKSB7Ci0gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBlbnRyeQotICAgICAgICBlbnRyeSA9IERiZ0FsbG9jTG9ja2VkPEhhc2hFbnRyeT4oKTsKLSAgICAgICAgZW50cnktPmRhdGEgPSBOVUxMOwotICAgICAgICBlbnRyeS0+c2xvdCA9IHNsb3Q7Ci0gICAgICAgIGVudHJ5LT5wcmV2ID0gTlVMTDsKLSAgICAgICAgZW50cnktPm5leHQgPSB0YWJsZS0+c2xvdHNbc2xvdF07Ci0gICAgICAgIGlmIChlbnRyeS0+bmV4dCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBlbnRyeS0+bmV4dC0+cHJldiA9IGVudHJ5OwotICAgICAgICB9Ci0gICAgICAgIHRhYmxlLT5zbG90c1tzbG90XSA9IGVudHJ5OwotICAgIH0KLSAgICByZXR1cm4gZW50cnk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50IE11dGV4SW5mb19lcXVhbHModm9pZCBjb25zdCogZGF0YSwgdm9pZCBjb25zdCoga2V5KSB7Ci0gICAgcmV0dXJuICgoTXV0ZXhJbmZvIGNvbnN0ICopZGF0YSktPm11dGV4ID09ICoocHRocmVhZF9tdXRleF90ICoqKWtleTsKLX0KLQotc3RhdGljIE11dGV4SW5mbyogZ2V0X211dGV4X2luZm8ocHRocmVhZF9tdXRleF90ICptdXRleCkKLXsKLSAgICBwdGhyZWFkX211dGV4X2xvY2tfdW5jaGVja2VkKCZzRGJnTG9jayk7Ci0KLSAgICBIYXNoRW50cnkqIGVudHJ5ID0gaGFzaG1hcF9sb29rdXAoJnNNdXRleE1hcCwKLSAgICAgICAgICAgICZtdXRleCwgc2l6ZW9mKG11dGV4KSwKLSAgICAgICAgICAgICZNdXRleEluZm9fZXF1YWxzKTsKLSAgICBpZiAoZW50cnktPmRhdGEgPT0gTlVMTCkgewotICAgICAgICBNdXRleEluZm8qIG11dGV4X2luZm8gPSBEYmdBbGxvY0xvY2tlZDxNdXRleEluZm8+KCk7Ci0gICAgICAgIGVudHJ5LT5kYXRhID0gbXV0ZXhfaW5mbzsKLSAgICAgICAgaW5pdE11dGV4SW5mbyhtdXRleF9pbmZvLCBtdXRleCk7Ci0gICAgfQotCi0gICAgcHRocmVhZF9tdXRleF91bmxvY2tfdW5jaGVja2VkKCZzRGJnTG9jayk7Ci0KLSAgICByZXR1cm4gKE11dGV4SW5mbyAqKWVudHJ5LT5kYXRhOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBUaHJlYWRJbmZvX2VxdWFscyh2b2lkIGNvbnN0KiBkYXRhLCB2b2lkIGNvbnN0KiBrZXkpIHsKLSAgICByZXR1cm4gKChUaHJlYWRJbmZvIGNvbnN0ICopZGF0YSktPnBpZCA9PSAqKHBpZF90ICopa2V5OwotfQotCi1zdGF0aWMgVGhyZWFkSW5mbyogZ2V0X3RocmVhZF9pbmZvKHBpZF90IHBpZCkKLXsKLSAgICBwdGhyZWFkX211dGV4X2xvY2tfdW5jaGVja2VkKCZzRGJnTG9jayk7Ci0KLSAgICBIYXNoRW50cnkqIGVudHJ5ID0gaGFzaG1hcF9sb29rdXAoJnNUaHJlYWRNYXAsCi0gICAgICAgICAgICAmcGlkLCBzaXplb2YocGlkKSwKLSAgICAgICAgICAgICZUaHJlYWRJbmZvX2VxdWFscyk7Ci0gICAgaWYgKGVudHJ5LT5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgVGhyZWFkSW5mbyogdGhyZWFkX2luZm8gPSBEYmdBbGxvY0xvY2tlZDxUaHJlYWRJbmZvPigpOwotICAgICAgICBlbnRyeS0+ZGF0YSA9IHRocmVhZF9pbmZvOwotICAgICAgICBpbml0VGhyZWFkSW5mbyh0aHJlYWRfaW5mbywgcGlkKTsKLSAgICB9Ci0KLSAgICBwdGhyZWFkX211dGV4X3VubG9ja191bmNoZWNrZWQoJnNEYmdMb2NrKTsKLQotICAgIHJldHVybiAoVGhyZWFkSW5mbyAqKWVudHJ5LT5kYXRhOwotfQotCi1zdGF0aWMgdm9pZCBwdXNoX21vc3RfcmVjZW50bHlfbG9ja2VkKE11dGV4SW5mbyogbXJsKSB7Ci0gICAgVGhyZWFkSW5mbyogdGluZm8gPSBnZXRfdGhyZWFkX2luZm8oZ2V0dGlkKCkpOwotICAgIG1ybC0+bmV4dCA9IE5VTEw7Ci0gICAgbXJsLT5wcmV2ID0gdGluZm8tPm1ybDsKLSAgICB0aW5mby0+bXJsID0gbXJsOwotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVfbW9zdF9yZWNlbnRseV9sb2NrZWQoTXV0ZXhJbmZvKiBtcmwpIHsKLSAgICBUaHJlYWRJbmZvKiB0aW5mbyA9IGdldF90aHJlYWRfaW5mbyhnZXR0aWQoKSk7Ci0gICAgaWYgKG1ybC0+bmV4dCkgewotICAgICAgICAobXJsLT5uZXh0KS0+cHJldiA9IG1ybC0+cHJldjsKLSAgICB9Ci0gICAgaWYgKG1ybC0+cHJldikgewotICAgICAgICAobXJsLT5wcmV2KS0+bmV4dCA9IG1ybC0+bmV4dDsKLSAgICB9Ci0gICAgaWYgKHRpbmZvLT5tcmwgPT0gbXJsKSB7Ci0gICAgICAgIHRpbmZvLT5tcmwgPSBtcmwtPm5leHQ7Ci0gICAgfQotfQotCi1zdGF0aWMgTXV0ZXhJbmZvKiBnZXRfbW9zdF9yZWNlbnRseV9sb2NrZWQoKSB7Ci0gICAgVGhyZWFkSW5mbyogdGluZm8gPSBnZXRfdGhyZWFkX2luZm8oZ2V0dGlkKCkpOwotICAgIHJldHVybiB0aW5mby0+bXJsOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFNlZSBpZiB3ZSB3ZXJlIGFsbG93ZWQgdG8gZ3JhYiB0aGUgbG9jayBhdCB0aGlzIHRpbWUuICBXZSBkbyBpdAotICogKmFmdGVyKiBhY3F1aXJpbmcgdGhlIGxvY2ssIHJhdGhlciB0aGFuIGJlZm9yZSwgc28gdGhhdCB3ZSBjYW4KLSAqIGZyZWVseSB1cGRhdGUgdGhlIE11dGV4SW5mbyBzdHJ1Y3QuICBUaGlzIHNlZW1zIGNvdW50ZXItaW50dWl0aXZlLAotICogYnV0IG91ciBnb2FsIGlzIGRlYWRsb2NrICpwcmVkaWN0aW9uKiBub3QgZGVhZGxvY2sgKnByZXZlbnRpb24qLgotICogKElmIHdlIGFjdHVhbGx5IGRlYWRsb2NrLCB0aGUgc2l0dWF0aW9uIGlzIGVhc3kgdG8gZGlhZ25vc2UgZnJvbQotICogYSB0aHJlYWQgZHVtcCwgc28gdGhlcmUncyBubyBwb2ludCBtYWtpbmcgYSBzcGVjaWFsIGVmZm9ydCB0byBkbwotICogdGhlIGNoZWNrcyBiZWZvcmUgdGhlIGxvY2sgaXMgaGVsZC4pCi0gKi8KLQotZXh0ZXJuICJDIiBfX0xJQkNfSElEREVOX18gdm9pZCBwdGhyZWFkX2RlYnVnX211dGV4X2xvY2tfY2hlY2socHRocmVhZF9tdXRleF90ICptdXRleCkKLXsKLSAgICBpZiAoc1B0aHJlYWREZWJ1Z0xldmVsID09IDApIHJldHVybjsKLSAgICAvLyBwcmVkaWN0aW9uIGRpc2FibGVkIGZvciB0aGlzIHRocmVhZAotICAgIGlmIChzUHRocmVhZERlYnVnRGlzYWJsZWRUaHJlYWQgPT0gZ2V0dGlkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBNdXRleEluZm8qIG9iamVjdCA9IGdldF9tdXRleF9pbmZvKG11dGV4KTsKLSAgICBNdXRleEluZm8qIG1ybCA9IGdldF9tb3N0X3JlY2VudGx5X2xvY2tlZCgpOwotICAgIG11dGV4X2xvY2tfY2hlY2tlZChtcmwsIG9iamVjdCk7Ci0gICAgcHVzaF9tb3N0X3JlY2VudGx5X2xvY2tlZChvYmplY3QpOwotfQotCi0vKgotICogcHRocmVhZF9kZWJ1Z19tdXRleF91bmxvY2tfY2hlY2soKSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBtdXRleAotICogc3RpbGwgaGVsZCAoaWU6IGJlZm9yZSBjYWxsaW5nIHRoZSByZWFsIHVubG9jaykKLSAqLwotCi1leHRlcm4gIkMiIF9fTElCQ19ISURERU5fXyB2b2lkIHB0aHJlYWRfZGVidWdfbXV0ZXhfdW5sb2NrX2NoZWNrKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCi17Ci0gICAgaWYgKHNQdGhyZWFkRGVidWdMZXZlbCA9PSAwKSByZXR1cm47Ci0gICAgLy8gcHJlZGljdGlvbiBkaXNhYmxlZCBmb3IgdGhpcyB0aHJlYWQKLSAgICBpZiAoc1B0aHJlYWREZWJ1Z0Rpc2FibGVkVGhyZWFkID09IGdldHRpZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgTXV0ZXhJbmZvKiBvYmplY3QgPSBnZXRfbXV0ZXhfaW5mbyhtdXRleCk7Ci0gICAgcmVtb3ZlX21vc3RfcmVjZW50bHlfbG9ja2VkKG9iamVjdCk7Ci0gICAgbXV0ZXhfdW5sb2NrX2NoZWNrZWQob2JqZWN0KTsKLX0KLQotI2VuZGlmIC8vIFBUSFJFQURfREVCVUdfRU5BQkxFRAotCi0vLyBDYWxsZWQgZnJvbSBsaWJjX2luaXRfZHluYW1pYygpIGp1c3QgYWZ0ZXIgc3lzdGVtIHByb3BlcnRpZXMgaGF2ZSBiZWVuIGluaXRpYWxpemVkLgotZXh0ZXJuICJDIiBfX0xJQkNfSElEREVOX18gdm9pZCBwdGhyZWFkX2RlYnVnX2luaXQoKSB7Ci0jaWYgUFRIUkVBRF9ERUJVR19FTkFCTEVECi0gICAgY2hhciBlbnZbUFJPUF9WQUxVRV9NQVhdOwotICAgIGlmIChfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoImRlYnVnLmxpYmMucHRocmVhZCIsIGVudikpIHsKLSAgICAgICAgaW50IGxldmVsID0gYXRvaShlbnYpOwotICAgICAgICBpZiAobGV2ZWwpIHsKLSAgICAgICAgICAgIExPR0koInB0aHJlYWQgZGVhZGxvY2sgZGV0ZWN0aW9uIGxldmVsICVkIGVuYWJsZWQgZm9yIHBpZCAlZCAoJXMpIiwKLSAgICAgICAgICAgICAgICAgICAgbGV2ZWwsIGdldHBpZCgpLCBfX3Byb2duYW1lKTsKLSAgICAgICAgICAgIGhhc2htYXBfaW5pdCgmc011dGV4TWFwKTsKLSAgICAgICAgICAgIHNQdGhyZWFkRGVidWdMZXZlbCA9IGxldmVsOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX2RldGFjaC5jcHAgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2RldGFjaC5jcHAKaW5kZXggOTVmMTFhYy4uYTg2MDhlMyAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcHRocmVhZF9kZXRhY2guY3BwCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfZGV0YWNoLmNwcApAQCAtNDQsNiArNDQsMTIgQEAKICAgICByZXR1cm4gMDsgLy8gQWxyZWFkeSBiZWluZyBqb2luZWQ7IHNpbGVudGx5IGRvIG5vdGhpbmcsIGxpa2UgZ2xpYmMuCiAgIH0KIAorICBpZiAodGhyZWFkLT50aWQgPT0gMCkgeworICAgIC8vIEFscmVhZHkgZXhpdGVkOyBjbGVhbiB1cC4KKyAgICBfcHRocmVhZF9pbnRlcm5hbF9yZW1vdmVfbG9ja2VkKHRocmVhZC5nZXQoKSk7CisgICAgcmV0dXJuIDA7CisgIH0KKwogICB0aHJlYWQtPmF0dHIuZmxhZ3MgfD0gUFRIUkVBRF9BVFRSX0ZMQUdfREVUQUNIRUQ7CiAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9leGl0LmNwcCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfZXhpdC5jcHAKaW5kZXggMjY5Mjc2Mi4uNmNkNTMxMSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcHRocmVhZF9leGl0LmNwcAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2V4aXQuY3BwCkBAIC0zNCw4ICszNCw4IEBACiAKICNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCiAKLWV4dGVybiAiQyIgdm9pZCBfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKHZvaWQqLCBzaXplX3QpOwotZXh0ZXJuICJDIiB2b2lkIF9fZXhpdChpbnQpOworZXh0ZXJuICJDIiBfX25vcmV0dXJuIHZvaWQgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bih2b2lkKiwgc2l6ZV90KTsKK2V4dGVybiAiQyIgX19ub3JldHVybiB2b2lkIF9fZXhpdChpbnQpOwogZXh0ZXJuICJDIiBpbnQgX19zZXRfdGlkX2FkZHJlc3MoaW50Kik7CiAKIC8qIENBVkVBVDogb3VyIGltcGxlbWVudGF0aW9uIG9mIHB0aHJlYWRfY2xlYW51cF9wdXNoL3BvcCBkb2Vzbid0IHN1cHBvcnQgQysrIGV4Y2VwdGlvbnMKQEAgLTkwLDkgKzkwLDkgQEAKICAgLy8gS2VlcCB0cmFjayBvZiB3aGF0IHdlIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgc3RhY2sgYmVmb3JlIHdlIGxvc2UgdGhlIHB0aHJlYWRfaW50ZXJuYWxfdC4KICAgdm9pZCogc3RhY2tfYmFzZSA9IHRocmVhZC0+YXR0ci5zdGFja19iYXNlOwogICBzaXplX3Qgc3RhY2tfc2l6ZSA9IHRocmVhZC0+YXR0ci5zdGFja19zaXplOwotICBib29sIHVzZXJfYWxsb2NhdGVkX3N0YWNrID0gKCh0aHJlYWQtPmF0dHIuZmxhZ3MgJiBQVEhSRUFEX0FUVFJfRkxBR19VU0VSX0FMTE9DQVRFRF9TVEFDSykgIT0gMCk7CisgIGJvb2wgdXNlcl9hbGxvY2F0ZWRfc3RhY2sgPSB0aHJlYWQtPnVzZXJfYWxsb2NhdGVkX3N0YWNrKCk7CiAKLSAgcHRocmVhZF9tdXRleF9sb2NrKCZnVGhyZWFkTGlzdExvY2spOworICBwdGhyZWFkX211dGV4X2xvY2soJmdfdGhyZWFkX2xpc3RfbG9jayk7CiAgIGlmICgodGhyZWFkLT5hdHRyLmZsYWdzICYgUFRIUkVBRF9BVFRSX0ZMQUdfREVUQUNIRUQpICE9IDApIHsKICAgICAvLyBUaGUgdGhyZWFkIGlzIGRldGFjaGVkLCBzbyB3ZSBjYW4gZnJlZSB0aGUgcHRocmVhZF9pbnRlcm5hbF90LgogICAgIC8vIEZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBrZXJuZWwgZG9lcyBub3QgdHJ5IHRvIGNsZWFyIHRoZSB0aWQgZmllbGQKQEAgLTExMCw3ICsxMTAsMTMgQEAKICAgICAvLyBwdGhyZWFkX2pvaW4gaXMgcmVzcG9uc2libGUgZm9yIGRlc3Ryb3lpbmcgdGhlIHB0aHJlYWRfaW50ZXJuYWxfdCBmb3Igbm9uLWRldGFjaGVkIHRocmVhZHMuCiAgICAgLy8gVGhlIGtlcm5lbCB3aWxsIGZ1dGV4X3dha2Ugb24gdGhlIHB0aHJlYWRfaW50ZXJuYWxfdDo6dGlkIGZpZWxkIHRvIHdha2UgcHRocmVhZF9qb2luLgogICB9Ci0gIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnVGhyZWFkTGlzdExvY2spOworICBwdGhyZWFkX211dGV4X3VubG9jaygmZ190aHJlYWRfbGlzdF9sb2NrKTsKKworICAvLyBQZXJmb3JtIGEgc2Vjb25kIGtleSBjbGVhbnVwLiBXaGVuIHVzaW5nIGplbWFsbG9jLCBhIGNhbGwgdG8gZnJlZSBmcm9tCisgIC8vIF9wdGhyZWFkX2ludGVybmFsX3JlbW92ZV9sb2NrZWQgY2F1c2VzIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEga2V5CisgIC8vIHRvIGJlIHJlYWxsb2NhdGVkLgorICAvLyBUT0RPOiBXaGVuIGIvMTY4NDcyODQgaXMgZml4ZWQgdGhpcyBjYWxsIGNhbiBiZSByZW1vdmVkLgorICBwdGhyZWFkX2tleV9jbGVhbl9hbGwoKTsKIAogICBpZiAodXNlcl9hbGxvY2F0ZWRfc3RhY2spIHsKICAgICAvLyBDbGVhbmluZyB1cCB0aGlzIHRocmVhZCdzIHN0YWNrIGlzIHRoZSBjcmVhdG9yJ3MgcmVzcG9uc2liaWxpdHksIG5vdCBvdXJzLgpAQCAtMTI3LDcgKzEzMyw0IEBACiAKICAgICBfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKHN0YWNrX2Jhc2UsIHN0YWNrX3NpemUpOwogICB9Ci0KLSAgLy8gTk9UUkVBQ0hFRCwgYnV0IHdlIHRvbGQgdGhlIGNvbXBpbGVyIHRoaXMgZnVuY3Rpb24gaXMgbm9yZXR1cm4sIGFuZCBpdCBkb2Vzbid0IGJlbGlldmUgdXMuCi0gIGFib3J0KCk7CiB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX2dldHRpZF9ucC5jcHAgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2dldHRpZF9ucC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ2NjNhNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfZ2V0dGlkX25wLmNwcApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfcHRocmVhZC5oIgorCitwaWRfdCBwdGhyZWFkX2dldHRpZF9ucChwdGhyZWFkX3QgdCkgeworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwdGhyZWFkX2ludGVybmFsX3QqPih0KS0+dGlkOworfQorCisvLyBUT0RPOiBtb3ZlIGNhbGxlcnMgb3ZlciB0byBwdGhyZWFkX2dldHRpZF9ucCBhbmQgcmVtb3ZlIHRoaXMuCitwaWRfdCBfX3B0aHJlYWRfZ2V0dGlkKHB0aHJlYWRfdCB0KSB7CisgIHJldHVybiBwdGhyZWFkX2dldHRpZF9ucCh0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfaW50ZXJuYWwuaCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfaW50ZXJuYWwuaAppbmRleCAzMWVkMDdjLi5hNWIzMDAyIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9wdGhyZWFkX2ludGVybmFsLmgKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9pbnRlcm5hbC5oCkBAIC0zMCwxMiArMzAsNDggQEAKIAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KIAorLyogSGFzIHRoZSB0aHJlYWQgYmVlbiBkZXRhY2hlZCBieSBhIHB0aHJlYWRfam9pbiBvciBwdGhyZWFkX2RldGFjaCBjYWxsPyAqLworI2RlZmluZSBQVEhSRUFEX0FUVFJfRkxBR19ERVRBQ0hFRCAweDAwMDAwMDAxCisKKy8qIFdhcyB0aGUgdGhyZWFkJ3Mgc3RhY2sgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIHJhdGhlciB0aGFuIGJ5IHVzPyAqLworI2RlZmluZSBQVEhSRUFEX0FUVFJfRkxBR19VU0VSX0FMTE9DQVRFRF9TVEFDSyAweDAwMDAwMDAyCisKKy8qIEhhcyB0aGUgdGhyZWFkIGJlZW4gam9pbmVkIGJ5IGFub3RoZXIgdGhyZWFkPyAqLworI2RlZmluZSBQVEhSRUFEX0FUVFJfRkxBR19KT0lORUQgMHgwMDAwMDAwNAorCisvKiBJcyB0aGlzIHRoZSBtYWluIHRocmVhZD8gKi8KKyNkZWZpbmUgUFRIUkVBRF9BVFRSX0ZMQUdfTUFJTl9USFJFQUQgMHg4MDAwMDAwMAorCiBzdHJ1Y3QgcHRocmVhZF9pbnRlcm5hbF90IHsKICAgc3RydWN0IHB0aHJlYWRfaW50ZXJuYWxfdCogbmV4dDsKICAgc3RydWN0IHB0aHJlYWRfaW50ZXJuYWxfdCogcHJldjsKIAogICBwaWRfdCB0aWQ7CiAKKyBwcml2YXRlOgorICBwaWRfdCBjYWNoZWRfcGlkXzsKKworIHB1YmxpYzoKKyAgcGlkX3QgaW52YWxpZGF0ZV9jYWNoZWRfcGlkKCkgeworICAgIHBpZF90IG9sZF92YWx1ZTsKKyAgICBnZXRfY2FjaGVkX3BpZCgmb2xkX3ZhbHVlKTsKKyAgICBzZXRfY2FjaGVkX3BpZCgwKTsKKyAgICByZXR1cm4gb2xkX3ZhbHVlOworICB9CisKKyAgdm9pZCBzZXRfY2FjaGVkX3BpZChwaWRfdCB2YWx1ZSkgeworICAgIGNhY2hlZF9waWRfID0gdmFsdWU7CisgIH0KKworICBib29sIGdldF9jYWNoZWRfcGlkKHBpZF90KiBjYWNoZWRfcGlkKSB7CisgICAgKmNhY2hlZF9waWQgPSBjYWNoZWRfcGlkXzsKKyAgICByZXR1cm4gKCpjYWNoZWRfcGlkICE9IDApOworICB9CisKKyAgYm9vbCB1c2VyX2FsbG9jYXRlZF9zdGFjaygpIHsKKyAgICByZXR1cm4gKGF0dHIuZmxhZ3MgJiBQVEhSRUFEX0FUVFJfRkxBR19VU0VSX0FMTE9DQVRFRF9TVEFDSykgIT0gMDsKKyAgfQorCiAgIHZvaWQqKiB0bHM7CiAKICAgcHRocmVhZF9hdHRyX3QgYXR0cjsKQEAgLTQ4LDYgKzg0LDggQEAKIAogICB2b2lkKiBhbHRlcm5hdGVfc2lnbmFsX3N0YWNrOwogCisgIHB0aHJlYWRfbXV0ZXhfdCBzdGFydHVwX2hhbmRzaGFrZV9tdXRleDsKKwogICAvKgogICAgKiBUaGUgZHluYW1pYyBsaW5rZXIgaW1wbGVtZW50cyBkbGVycm9yKDMpLCB3aGljaCBtYWtlcyBpdCBoYXJkIGZvciB1cyB0byBpbXBsZW1lbnQgdGhpcwogICAgKiBwZXItdGhyZWFkIGJ1ZmZlciBieSBzaW1wbHkgdXNpbmcgbWFsbG9jKDMpIGFuZCBmcmVlKDMpLgpAQCAtNjAsMjUgKzk4LDE1IEBACiBfX0xJQkNfSElEREVOX18gdm9pZCBfX2luaXRfdGxzKHB0aHJlYWRfaW50ZXJuYWxfdCogdGhyZWFkKTsKIF9fTElCQ19ISURERU5fXyB2b2lkIF9faW5pdF9hbHRlcm5hdGVfc2lnbmFsX3N0YWNrKHB0aHJlYWRfaW50ZXJuYWxfdCopOwogX19MSUJDX0hJRERFTl9fIHZvaWQgX3B0aHJlYWRfaW50ZXJuYWxfYWRkKHB0aHJlYWRfaW50ZXJuYWxfdCogdGhyZWFkKTsKLV9fTElCQ19ISURERU5fXyBwdGhyZWFkX2ludGVybmFsX3QqIF9fZ2V0X3RocmVhZCh2b2lkKTsKKworLyogVmFyaW91cyB0aGlyZC1wYXJ0eSBhcHBzIGNvbnRhaW4gYSBiYWNrcG9ydCBvZiBvdXIgcHRocmVhZF9yd2xvY2sgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIHRoaXMuICovCitleHRlcm4gIkMiIF9fTElCQzY0X0hJRERFTl9fIHB0aHJlYWRfaW50ZXJuYWxfdCogX19nZXRfdGhyZWFkKHZvaWQpOwogCiBfX0xJQkNfSElEREVOX18gdm9pZCBwdGhyZWFkX2tleV9jbGVhbl9hbGwodm9pZCk7CiBfX0xJQkNfSElEREVOX18gdm9pZCBfcHRocmVhZF9pbnRlcm5hbF9yZW1vdmVfbG9ja2VkKHB0aHJlYWRfaW50ZXJuYWxfdCogdGhyZWFkKTsKIAotLyogSGFzIHRoZSB0aHJlYWQgYmVlbiBkZXRhY2hlZCBieSBhIHB0aHJlYWRfam9pbiBvciBwdGhyZWFkX2RldGFjaCBjYWxsPyAqLwotI2RlZmluZSBQVEhSRUFEX0FUVFJfRkxBR19ERVRBQ0hFRCAweDAwMDAwMDAxCi0KLS8qIFdhcyB0aGUgdGhyZWFkJ3Mgc3RhY2sgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIHJhdGhlciB0aGFuIGJ5IHVzPyAqLwotI2RlZmluZSBQVEhSRUFEX0FUVFJfRkxBR19VU0VSX0FMTE9DQVRFRF9TVEFDSyAweDAwMDAwMDAyCi0KLS8qIEhhcyB0aGUgdGhyZWFkIGJlZW4gam9pbmVkIGJ5IGFub3RoZXIgdGhyZWFkPyAqLwotI2RlZmluZSBQVEhSRUFEX0FUVFJfRkxBR19KT0lORUQgMHgwMDAwMDAwNAotCi0vKiBJcyB0aGlzIHRoZSBtYWluIHRocmVhZD8gKi8KLSNkZWZpbmUgUFRIUkVBRF9BVFRSX0ZMQUdfTUFJTl9USFJFQUQgMHg4MDAwMDAwMAotCiAvKgotICogVHJhZGl0aW9uYWxseSB3ZSBnaXZlIHRocmVhZHMgYSAxTWlCIHN0YWNrLiBXaGVuIHdlIHN0YXJ0ZWQKKyAqIFRyYWRpdGlvbmFsbHkgd2UgZ2F2ZSB0aHJlYWRzIGEgMU1pQiBzdGFjay4gV2hlbiB3ZSBzdGFydGVkCiAgKiBhbGxvY2F0aW5nIHBlci10aHJlYWQgYWx0ZXJuYXRlIHNpZ25hbCBzdGFja3MgdG8gZWFzZSBkZWJ1Z2dpbmcgb2YKICAqIHN0YWNrIG92ZXJmbG93cywgd2Ugc3VidHJhY3RlZCB0aGUgc2FtZSBhbW91bnQgd2Ugd2VyZSB1c2luZyB0aGVyZQogICogZnJvbSB0aGUgZGVmYXVsdCB0aHJlYWQgc3RhY2sgc2l6ZS4gVGhpcyBzaG91bGQga2VlcCBtZW1vcnkgdXNhZ2UKQEAgLTg2LDEzICsxMTQsMTIgQEAKICAqLwogI2RlZmluZSBQVEhSRUFEX1NUQUNLX1NJWkVfREVGQVVMVCAoKDEgKiAxMDI0ICogMTAyNCkgLSBTSUdTVEtTWikKIAotX19MSUJDX0hJRERFTl9fIGV4dGVybiBwdGhyZWFkX2ludGVybmFsX3QqIGdUaHJlYWRMaXN0OwotX19MSUJDX0hJRERFTl9fIGV4dGVybiBwdGhyZWFkX211dGV4X3QgZ1RocmVhZExpc3RMb2NrOworX19MSUJDX0hJRERFTl9fIGV4dGVybiBwdGhyZWFkX2ludGVybmFsX3QqIGdfdGhyZWFkX2xpc3Q7CitfX0xJQkNfSElEREVOX18gZXh0ZXJuIHB0aHJlYWRfbXV0ZXhfdCBnX3RocmVhZF9saXN0X2xvY2s7CiAKLV9fTElCQ19ISURERU5fXyBpbnQgX190aW1lc3BlY190b19hYnNvbHV0ZSh0aW1lc3BlYyosIGNvbnN0IHRpbWVzcGVjKiwgY2xvY2tpZF90KTsKK19fTElCQ19ISURERU5fXyBpbnQgX190aW1lc3BlY19mcm9tX2Fic29sdXRlKHRpbWVzcGVjKiwgY29uc3QgdGltZXNwZWMqLCBjbG9ja2lkX3QpOwogCi0vKiBuZWVkZWQgYnkgZm9yay5jICovCi1fX0xJQkNfSElEREVOX18gZXh0ZXJuIHZvaWQgX190aW1lcl90YWJsZV9zdGFydF9zdG9wKGludCk7CisvKiBOZWVkZWQgYnkgZm9yay4gKi8KIF9fTElCQ19ISURERU5fXyBleHRlcm4gdm9pZCBfX2Jpb25pY19hdGZvcmtfcnVuX3ByZXBhcmUoKTsKIF9fTElCQ19ISURERU5fXyBleHRlcm4gdm9pZCBfX2Jpb25pY19hdGZvcmtfcnVuX2NoaWxkKCk7CiBfX0xJQkNfSElEREVOX18gZXh0ZXJuIHZvaWQgX19iaW9uaWNfYXRmb3JrX3J1bl9wYXJlbnQoKTsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfaW50ZXJuYWxzLmNwcCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfaW50ZXJuYWxzLmNwcAppbmRleCAwOWM0OGRjLi40YzA4YmE4IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9wdGhyZWFkX2ludGVybmFscy5jcHAKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9pbnRlcm5hbHMuY3BwCkBAIC0yOSwxMiArMjksMTEgQEAKICNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCiAKICNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19mdXRleC5oIgotI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX3B0aHJlYWQuaCIKICNpbmNsdWRlICJwcml2YXRlL2Jpb25pY190bHMuaCIKICNpbmNsdWRlICJwcml2YXRlL1Njb3BlZFB0aHJlYWRNdXRleExvY2tlci5oIgogCi1wdGhyZWFkX2ludGVybmFsX3QqIGdUaHJlYWRMaXN0ID0gTlVMTDsKLXB0aHJlYWRfbXV0ZXhfdCBnVGhyZWFkTGlzdExvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworcHRocmVhZF9pbnRlcm5hbF90KiBnX3RocmVhZF9saXN0ID0gTlVMTDsKK3B0aHJlYWRfbXV0ZXhfdCBnX3RocmVhZF9saXN0X2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwogCiB2b2lkIF9wdGhyZWFkX2ludGVybmFsX3JlbW92ZV9sb2NrZWQocHRocmVhZF9pbnRlcm5hbF90KiB0aHJlYWQpIHsKICAgaWYgKHRocmVhZC0+bmV4dCAhPSBOVUxMKSB7CkBAIC00Myw3ICs0Miw3IEBACiAgIGlmICh0aHJlYWQtPnByZXYgIT0gTlVMTCkgewogICAgIHRocmVhZC0+cHJldi0+bmV4dCA9IHRocmVhZC0+bmV4dDsKICAgfSBlbHNlIHsKLSAgICBnVGhyZWFkTGlzdCA9IHRocmVhZC0+bmV4dDsKKyAgICBnX3RocmVhZF9saXN0ID0gdGhyZWFkLT5uZXh0OwogICB9CiAKICAgLy8gVGhlIG1haW4gdGhyZWFkIGlzIG5vdCBoZWFwLWFsbG9jYXRlZC4gU2VlIF9fbGliY19pbml0X3RscyBmb3IgdGhlIGRlY2xhcmF0aW9uLApAQCAtNTQsMjggKzUzLDI0IEBACiB9CiAKIHZvaWQgX3B0aHJlYWRfaW50ZXJuYWxfYWRkKHB0aHJlYWRfaW50ZXJuYWxfdCogdGhyZWFkKSB7Ci0gIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdUaHJlYWRMaXN0TG9jayk7CisgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdfdGhyZWFkX2xpc3RfbG9jayk7CiAKICAgLy8gV2UgaW5zZXJ0IGF0IHRoZSBoZWFkLgotICB0aHJlYWQtPm5leHQgPSBnVGhyZWFkTGlzdDsKKyAgdGhyZWFkLT5uZXh0ID0gZ190aHJlYWRfbGlzdDsKICAgdGhyZWFkLT5wcmV2ID0gTlVMTDsKICAgaWYgKHRocmVhZC0+bmV4dCAhPSBOVUxMKSB7CiAgICAgdGhyZWFkLT5uZXh0LT5wcmV2ID0gdGhyZWFkOwogICB9Ci0gIGdUaHJlYWRMaXN0ID0gdGhyZWFkOworICBnX3RocmVhZF9saXN0ID0gdGhyZWFkOwogfQogCiBwdGhyZWFkX2ludGVybmFsX3QqIF9fZ2V0X3RocmVhZCh2b2lkKSB7CiAgIHJldHVybiByZWludGVycHJldF9jYXN0PHB0aHJlYWRfaW50ZXJuYWxfdCo+KF9fZ2V0X3RscygpW1RMU19TTE9UX1RIUkVBRF9JRF0pOwogfQogCi1waWRfdCBfX3B0aHJlYWRfZ2V0dGlkKHB0aHJlYWRfdCB0KSB7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PHB0aHJlYWRfaW50ZXJuYWxfdCo+KHQpLT50aWQ7Ci19Ci0KIC8vIEluaXRpYWxpemUgJ3RzJyB3aXRoIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gJ2Fic3RpbWUnIGFuZCB0aGUgY3VycmVudCB0aW1lCiAvLyBhY2NvcmRpbmcgdG8gJ2Nsb2NrJy4gUmV0dXJucyAtMSBpZiBhYnN0aW1lIGFscmVhZHkgZXhwaXJlZCwgb3IgMCBvdGhlcndpc2UuCi1pbnQgX190aW1lc3BlY190b19hYnNvbHV0ZSh0aW1lc3BlYyogdHMsIGNvbnN0IHRpbWVzcGVjKiBhYnN0aW1lLCBjbG9ja2lkX3QgY2xvY2spIHsKK2ludCBfX3RpbWVzcGVjX2Zyb21fYWJzb2x1dGUodGltZXNwZWMqIHRzLCBjb25zdCB0aW1lc3BlYyogYWJzdGltZSwgY2xvY2tpZF90IGNsb2NrKSB7CiAgIGNsb2NrX2dldHRpbWUoY2xvY2ssIHRzKTsKICAgdHMtPnR2X3NlYyAgPSBhYnN0aW1lLT50dl9zZWMgLSB0cy0+dHZfc2VjOwogICB0cy0+dHZfbnNlYyA9IGFic3RpbWUtPnR2X25zZWMgLSB0cy0+dHZfbnNlYzsKQEAgLTg4LDExICs4MywzIEBACiAgIH0KICAgcmV0dXJuIDA7CiB9Ci0KLWludCBfX2Z1dGV4X3dha2VfZXgodm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgcHNoYXJlZCwgaW50IHZhbCkgewotICByZXR1cm4gX19mdXRleF9zeXNjYWxsMyhmdHgsIHBzaGFyZWQgPyBGVVRFWF9XQUtFIDogRlVURVhfV0FLRV9QUklWQVRFLCB2YWwpOwotfQotCi1pbnQgX19mdXRleF93YWl0X2V4KHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IHBzaGFyZWQsIGludCB2YWwsIGNvbnN0IHRpbWVzcGVjKiB0aW1lb3V0KSB7Ci0gIHJldHVybiBfX2Z1dGV4X3N5c2NhbGw0KGZ0eCwgcHNoYXJlZCA/IEZVVEVYX1dBSVQgOiBGVVRFWF9XQUlUX1BSSVZBVEUsIHZhbCwgdGltZW91dCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX2tleS5jcHAgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2tleS5jcHAKaW5kZXggNmNjNjhhZi4uMjdlYWIyNyAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcHRocmVhZF9rZXkuY3BwCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfa2V5LmNwcApAQCAtMjEwLDggKzIxMCw4IEBACiAgIH0KIAogICAvLyBDbGVhciB2YWx1ZSBpbiBhbGwgdGhyZWFkcy4KLSAgcHRocmVhZF9tdXRleF9sb2NrKCZnVGhyZWFkTGlzdExvY2spOwotICBmb3IgKHB0aHJlYWRfaW50ZXJuYWxfdCogIHQgPSBnVGhyZWFkTGlzdDsgdCAhPSBOVUxMOyB0ID0gdC0+bmV4dCkgeworICBwdGhyZWFkX211dGV4X2xvY2soJmdfdGhyZWFkX2xpc3RfbG9jayk7CisgIGZvciAocHRocmVhZF9pbnRlcm5hbF90KiAgdCA9IGdfdGhyZWFkX2xpc3Q7IHQgIT0gTlVMTDsgdCA9IHQtPm5leHQpIHsKICAgICAvLyBTa2lwIHpvbWJpZSB0aHJlYWRzLiBUaGV5IGRvbid0IGhhdmUgYSB2YWxpZCBUTFMgYXJlYSBhbnkgbW9yZS4KICAgICAvLyBTaW1pbGFybHksIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgdC0+dGxzID09IE5VTEwgZm9yIHRocmVhZHMgdGhhdAogICAgIC8vIHdlcmUganVzdCByZWNlbnRseSBjcmVhdGVkIHRocm91Z2ggcHRocmVhZF9jcmVhdGUoKSBidXQgd2hvc2UKQEAgLTIyNiw3ICsyMjYsNyBAQAogICB9CiAgIHRsc19tYXAuRGVsZXRlS2V5KGtleSk7CiAKLSAgcHRocmVhZF9tdXRleF91bmxvY2soJmdUaHJlYWRMaXN0TG9jayk7CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnX3RocmVhZF9saXN0X2xvY2spOwogICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9tdXRleC5jcHAgYi9saWJjL2Jpb25pYy9wdGhyZWFkX211dGV4LmNwcAppbmRleCAwZDk5MmIzLi41NDYxNjYxIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9wdGhyZWFkX211dGV4LmNwcAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX211dGV4LmNwcApAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzeXMvYXRvbWljcy5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKQEAgLTM5LDcgKzM4LDYgQEAKICNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19hdG9taWNfaW5saW5lLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfZnV0ZXguaCIKICNpbmNsdWRlICJwcml2YXRlL2Jpb25pY190bHMuaCIKLSNpbmNsdWRlICJwcml2YXRlL3RocmVhZF9wcml2YXRlLmgiCiAKIGV4dGVybiB2b2lkIHB0aHJlYWRfZGVidWdfbXV0ZXhfbG9ja19jaGVjayhwdGhyZWFkX211dGV4X3QgKm11dGV4KTsKIGV4dGVybiB2b2lkIHB0aHJlYWRfZGVidWdfbXV0ZXhfdW5sb2NrX2NoZWNrKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpOwpAQCAtMjA3LDU1ICsyMDUsNDIgQEAKIAogaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQocHRocmVhZF9tdXRleGF0dHJfdCAqYXR0cikKIHsKLSAgICBpZiAoYXR0cikgewotICAgICAgICAqYXR0ciA9IFBUSFJFQURfTVVURVhfREVGQVVMVDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKLSAgICB9CisgICAgKmF0dHIgPSBQVEhSRUFEX01VVEVYX0RFRkFVTFQ7CisgICAgcmV0dXJuIDA7CiB9CiAKIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKmF0dHIpCiB7Ci0gICAgaWYgKGF0dHIpIHsKLSAgICAgICAgKmF0dHIgPSAtMTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKLSAgICB9CisgICAgKmF0dHIgPSAtMTsKKyAgICByZXR1cm4gMDsKIH0KIAotaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUoY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqYXR0ciwgaW50ICp0eXBlKQoraW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUoY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqYXR0ciwgaW50ICp0eXBlX3ApCiB7Ci0gICAgaWYgKGF0dHIpIHsKLSAgICAgICAgaW50ICBhdHlwZSA9ICgqYXR0ciAmIE1VVEVYQVRUUl9UWVBFX01BU0spOworICAgIGludCB0eXBlID0gKCphdHRyICYgTVVURVhBVFRSX1RZUEVfTUFTSyk7CiAKLSAgICAgICAgIGlmIChhdHlwZSA+PSBQVEhSRUFEX01VVEVYX05PUk1BTCAmJgotICAgICAgICAgICAgIGF0eXBlIDw9IFBUSFJFQURfTVVURVhfRVJST1JDSEVDSykgewotICAgICAgICAgICAgKnR5cGUgPSBhdHlwZTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CisgICAgaWYgKHR5cGUgPCBQVEhSRUFEX01VVEVYX05PUk1BTCB8fCB0eXBlID4gUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLKSB7CisgICAgICAgIHJldHVybiBFSU5WQUw7CiAgICAgfQotICAgIHJldHVybiBFSU5WQUw7CisKKyAgICAqdHlwZV9wID0gdHlwZTsKKyAgICByZXR1cm4gMDsKIH0KIAogaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUocHRocmVhZF9tdXRleGF0dHJfdCAqYXR0ciwgaW50IHR5cGUpCiB7Ci0gICAgaWYgKGF0dHIgJiYgdHlwZSA+PSBQVEhSRUFEX01VVEVYX05PUk1BTCAmJgotICAgICAgICAgICAgICAgIHR5cGUgPD0gUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLICkgewotICAgICAgICAqYXR0ciA9ICgqYXR0ciAmIH5NVVRFWEFUVFJfVFlQRV9NQVNLKSB8IHR5cGU7Ci0gICAgICAgIHJldHVybiAwOworICAgIGlmICh0eXBlIDwgUFRIUkVBRF9NVVRFWF9OT1JNQUwgfHwgdHlwZSA+IFBUSFJFQURfTVVURVhfRVJST1JDSEVDSyApIHsKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKICAgICB9Ci0gICAgcmV0dXJuIEVJTlZBTDsKKworICAgICphdHRyID0gKCphdHRyICYgfk1VVEVYQVRUUl9UWVBFX01BU0spIHwgdHlwZTsKKyAgICByZXR1cm4gMDsKIH0KIAogLyogcHJvY2Vzcy1zaGFyZWQgbXV0ZXhlcyBhcmUgbm90IHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50ICovCiAKIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXRwc2hhcmVkKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKmF0dHIsIGludCAgcHNoYXJlZCkKIHsKLSAgICBpZiAoIWF0dHIpCi0gICAgICAgIHJldHVybiBFSU5WQUw7Ci0KICAgICBzd2l0Y2ggKHBzaGFyZWQpIHsKICAgICBjYXNlIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFOgogICAgICAgICAqYXR0ciAmPSB+TVVURVhBVFRSX1NIQVJFRF9NQVNLOwpAQCAtMjc0LDExICsyNTksNyBAQAogfQogCiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHNoYXJlZChjb25zdCBwdGhyZWFkX211dGV4YXR0cl90KiBhdHRyLCBpbnQqIHBzaGFyZWQpIHsKLSAgICBpZiAoIWF0dHIgfHwgIXBzaGFyZWQpCi0gICAgICAgIHJldHVybiBFSU5WQUw7Ci0KLSAgICAqcHNoYXJlZCA9ICgqYXR0ciAmIE1VVEVYQVRUUl9TSEFSRURfTUFTSykgPyBQVEhSRUFEX1BST0NFU1NfU0hBUkVECi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEU7CisgICAgKnBzaGFyZWQgPSAoKmF0dHIgJiBNVVRFWEFUVFJfU0hBUkVEX01BU0spID8gUFRIUkVBRF9QUk9DRVNTX1NIQVJFRCA6IFBUSFJFQURfUFJPQ0VTU19QUklWQVRFOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMjQsOSArMzA1LDcgQEAKICAqICJ0eXBlIiB2YWx1ZSBpcyB6ZXJvLCBzbyB0aGUgb25seSBiaXRzIHRoYXQgd2lsbCBiZSBzZXQgYXJlIHRoZSBvbmVzIGluCiAgKiB0aGUgbG9jayBzdGF0ZSBmaWVsZC4KICAqLwotc3RhdGljIF9faW5saW5lX18gdm9pZAotX25vcm1hbF9sb2NrKHB0aHJlYWRfbXV0ZXhfdCogIG11dGV4LCBpbnQgc2hhcmVkKQoteworc3RhdGljIGlubGluZSB2b2lkIF9ub3JtYWxfbG9jayhwdGhyZWFkX211dGV4X3QqIG11dGV4LCBpbnQgc2hhcmVkKSB7CiAgICAgLyogY29udmVuaWVuY2Ugc2hvcnRjdXRzICovCiAgICAgY29uc3QgaW50IHVubG9ja2VkICAgICAgICAgICA9IHNoYXJlZCB8IE1VVEVYX1NUQVRFX0JJVFNfVU5MT0NLRUQ7CiAgICAgY29uc3QgaW50IGxvY2tlZF91bmNvbnRlbmRlZCA9IHNoYXJlZCB8IE1VVEVYX1NUQVRFX0JJVFNfTE9DS0VEX1VOQ09OVEVOREVEOwpAQCAtMzU0LDggKzMzMyw5IEBACiAgICAgICAgICAqIHRoYXQgdGhlIG11dGV4IGlzIGluIHN0YXRlIDIgd2hlbiB3ZSBnbyB0byBzbGVlcCBvbiBpdCwgd2hpY2gKICAgICAgICAgICogZ3VhcmFudGVlcyBhIHdha2UtdXAgY2FsbC4KICAgICAgICAgICovCi0gICAgICAgIHdoaWxlIChfX2Jpb25pY19zd2FwKGxvY2tlZF9jb250ZW5kZWQsICZtdXRleC0+dmFsdWUpICE9IHVubG9ja2VkKQotICAgICAgICAgICAgX19mdXRleF93YWl0X2V4KCZtdXRleC0+dmFsdWUsIHNoYXJlZCwgbG9ja2VkX2NvbnRlbmRlZCwgMCk7CisgICAgICAgIHdoaWxlIChfX2Jpb25pY19zd2FwKGxvY2tlZF9jb250ZW5kZWQsICZtdXRleC0+dmFsdWUpICE9IHVubG9ja2VkKSB7CisgICAgICAgICAgICBfX2Z1dGV4X3dhaXRfZXgoJm11dGV4LT52YWx1ZSwgc2hhcmVkLCBsb2NrZWRfY29udGVuZGVkLCBOVUxMKTsKKyAgICAgICAgfQogICAgIH0KICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CiB9CkBAIC0zNjQsOSArMzQ0LDcgQEAKICAqIFJlbGVhc2UgYSBub24tcmVjdXJzaXZlIG11dGV4LiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcKICAqIHRoYXQgd2UgYXJlIGluIGZhY3QgdGhlIG93bmVyIG9mIHRoaXMgbG9jay4KICAqLwotc3RhdGljIF9faW5saW5lX18gdm9pZAotX25vcm1hbF91bmxvY2socHRocmVhZF9tdXRleF90KiAgbXV0ZXgsIGludCBzaGFyZWQpCi17CitzdGF0aWMgaW5saW5lIHZvaWQgX25vcm1hbF91bmxvY2socHRocmVhZF9tdXRleF90KiBtdXRleCwgaW50IHNoYXJlZCkgewogICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKIAogICAgIC8qCkBAIC00MjgsOSArNDA2LDcgQEAKICAqIG12YWx1ZSBpcyB0aGUgY3VycmVudCBtdXRleCB2YWx1ZSAoYWxyZWFkeSBsb2FkZWQpCiAgKiBtdXRleCBwb2ludGVycyB0byB0aGUgbXV0ZXguCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbnQKLV9yZWN1cnNpdmVfaW5jcmVtZW50KHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgsIGludCBtdmFsdWUsIGludCBtdHlwZSkKLXsKK3N0YXRpYyBpbmxpbmUgX19hbHdheXNfaW5saW5lIGludCBfcmVjdXJzaXZlX2luY3JlbWVudChwdGhyZWFkX211dGV4X3QqIG11dGV4LCBpbnQgbXZhbHVlLCBpbnQgbXR5cGUpIHsKICAgICBpZiAobXR5cGUgPT0gTVVURVhfVFlQRV9CSVRTX0VSUk9SQ0hFQ0spIHsKICAgICAgICAgLyogdHJ5aW5nIHRvIHJlLWxvY2sgYSBtdXRleCB3ZSBhbHJlYWR5IGFjcXVpcmVkICovCiAgICAgICAgIHJldHVybiBFREVBRExLOwpAQCAtNDYzLDE2ICs0MzksMTQgQEAKICAgICB9CiB9CiAKLV9fTElCQ19ISURERU5fXwotaW50IHB0aHJlYWRfbXV0ZXhfbG9ja19pbXBsKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCi17CitpbnQgcHRocmVhZF9tdXRleF9sb2NrKHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgpIHsKICAgICBpbnQgbXZhbHVlLCBtdHlwZSwgdGlkLCBzaGFyZWQ7CiAKICAgICBtdmFsdWUgPSBtdXRleC0+dmFsdWU7CiAgICAgbXR5cGUgPSAobXZhbHVlICYgTVVURVhfVFlQRV9NQVNLKTsKICAgICBzaGFyZWQgPSAobXZhbHVlICYgTVVURVhfU0hBUkVEX01BU0spOwogCi0gICAgLyogSGFuZGxlIG5vcm1hbCBjYXNlIGZpcnN0ICovCisgICAgLyogSGFuZGxlIG5vbi1yZWN1cnNpdmUgY2FzZSBmaXJzdCAqLwogICAgIGlmICggX19wcmVkaWN0X3RydWUobXR5cGUgPT0gTVVURVhfVFlQRV9CSVRTX05PUk1BTCkgKSB7CiAgICAgICAgIF9ub3JtYWxfbG9jayhtdXRleCwgc2hhcmVkKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC01NDEsMjAgKzUxNSw3IEBACiAgICAgLyogTk9UUkVBQ0hFRCAqLwogfQogCi1pbnQgcHRocmVhZF9tdXRleF9sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCi17Ci0gICAgaW50IGVyciA9IHB0aHJlYWRfbXV0ZXhfbG9ja19pbXBsKG11dGV4KTsKLSAgICBpZiAoUFRIUkVBRF9ERUJVR19FTkFCTEVEKSB7Ci0gICAgICAgIGlmICghZXJyKSB7Ci0gICAgICAgICAgICBwdGhyZWFkX2RlYnVnX211dGV4X2xvY2tfY2hlY2sobXV0ZXgpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBlcnI7Ci19Ci0KLV9fTElCQ19ISURERU5fXwotaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrX2ltcGwocHRocmVhZF9tdXRleF90ICptdXRleCkKLXsKK2ludCBwdGhyZWFkX211dGV4X3VubG9jayhwdGhyZWFkX211dGV4X3QqIG11dGV4KSB7CiAgICAgaW50IG12YWx1ZSwgbXR5cGUsIHRpZCwgc2hhcmVkOwogCiAgICAgbXZhbHVlID0gbXV0ZXgtPnZhbHVlOwpAQCAtNjA2LDE3ICs1NjcsNyBAQAogICAgIHJldHVybiAwOwogfQogCi1pbnQgcHRocmVhZF9tdXRleF91bmxvY2socHRocmVhZF9tdXRleF90ICptdXRleCkKLXsKLSAgICBpZiAoUFRIUkVBRF9ERUJVR19FTkFCTEVEKSB7Ci0gICAgICAgIHB0aHJlYWRfZGVidWdfbXV0ZXhfdW5sb2NrX2NoZWNrKG11dGV4KTsKLSAgICB9Ci0gICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5sb2NrX2ltcGwobXV0ZXgpOwotfQotCi1fX0xJQkNfSElEREVOX18KLWludCBwdGhyZWFkX211dGV4X3RyeWxvY2tfaW1wbChwdGhyZWFkX211dGV4X3QgKm11dGV4KQoteworaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhwdGhyZWFkX211dGV4X3QqIG11dGV4KSB7CiAgICAgaW50IG12YWx1ZSwgbXR5cGUsIHRpZCwgc2hhcmVkOwogCiAgICAgbXZhbHVlID0gbXV0ZXgtPnZhbHVlOwpAQCAtNjU2LDE2MyArNjA3LDEzNiBAQAogICAgIHJldHVybiBFQlVTWTsKIH0KIAotaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhwdGhyZWFkX211dGV4X3QgKm11dGV4KQotewotICAgIGludCBlcnIgPSBwdGhyZWFkX211dGV4X3RyeWxvY2tfaW1wbChtdXRleCk7Ci0gICAgaWYgKFBUSFJFQURfREVCVUdfRU5BQkxFRCkgewotICAgICAgICBpZiAoIWVycikgewotICAgICAgICAgICAgcHRocmVhZF9kZWJ1Z19tdXRleF9sb2NrX2NoZWNrKG11dGV4KTsKLSAgICAgICAgfQorc3RhdGljIGludCBfX3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgsIGNvbnN0IHRpbWVzcGVjKiBhYnNfdGltZW91dCwgY2xvY2tpZF90IGNsb2NrKSB7CisgIHRpbWVzcGVjIHRzOworCisgIGludCBtdmFsdWUgPSBtdXRleC0+dmFsdWU7CisgIGludCBtdHlwZSAgPSAobXZhbHVlICYgTVVURVhfVFlQRV9NQVNLKTsKKyAgaW50IHNoYXJlZCA9IChtdmFsdWUgJiBNVVRFWF9TSEFSRURfTUFTSyk7CisKKyAgLy8gSGFuZGxlIGNvbW1vbiBjYXNlIGZpcnN0LgorICBpZiAoX19wcmVkaWN0X3RydWUobXR5cGUgPT0gTVVURVhfVFlQRV9CSVRTX05PUk1BTCkpIHsKKyAgICBjb25zdCBpbnQgdW5sb2NrZWQgICAgICAgICAgID0gc2hhcmVkIHwgTVVURVhfU1RBVEVfQklUU19VTkxPQ0tFRDsKKyAgICBjb25zdCBpbnQgbG9ja2VkX3VuY29udGVuZGVkID0gc2hhcmVkIHwgTVVURVhfU1RBVEVfQklUU19MT0NLRURfVU5DT05URU5ERUQ7CisgICAgY29uc3QgaW50IGxvY2tlZF9jb250ZW5kZWQgICA9IHNoYXJlZCB8IE1VVEVYX1NUQVRFX0JJVFNfTE9DS0VEX0NPTlRFTkRFRDsKKworICAgIC8vIEZhc3QgcGF0aCBmb3IgdW5jb250ZW5kZWQgbG9jay4gTm90ZTogTVVURVhfVFlQRV9CSVRTX05PUk1BTCBpcyAwLgorICAgIGlmIChfX2Jpb25pY19jbXB4Y2hnKHVubG9ja2VkLCBsb2NrZWRfdW5jb250ZW5kZWQsICZtdXRleC0+dmFsdWUpID09IDApIHsKKyAgICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKKyAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICByZXR1cm4gZXJyOwotfQogCi0vKiBpbml0aWFsaXplICdhYnN0aW1lJyB0byB0aGUgY3VycmVudCB0aW1lIGFjY29yZGluZyB0byAnY2xvY2snIHBsdXMgJ21zZWNzJwotICogbWlsbGlzZWNvbmRzLgotICovCi1zdGF0aWMgdm9pZCBfX3RpbWVzcGVjX3RvX3JlbGF0aXZlX21zZWModGltZXNwZWMqIGFic3RpbWUsIHVuc2lnbmVkIG1zZWNzLCBjbG9ja2lkX3QgY2xvY2spIHsKLSAgICBjbG9ja19nZXR0aW1lKGNsb2NrLCBhYnN0aW1lKTsKLSAgICBhYnN0aW1lLT50dl9zZWMgICs9IG1zZWNzLzEwMDA7Ci0gICAgYWJzdGltZS0+dHZfbnNlYyArPSAobXNlY3MlMTAwMCkqMTAwMDAwMDsKLSAgICBpZiAoYWJzdGltZS0+dHZfbnNlYyA+PSAxMDAwMDAwMDAwKSB7Ci0gICAgICAgIGFic3RpbWUtPnR2X3NlYysrOwotICAgICAgICBhYnN0aW1lLT50dl9uc2VjIC09IDEwMDAwMDAwMDA7CisgICAgLy8gTG9vcCB3aGlsZSBuZWVkZWQuCisgICAgd2hpbGUgKF9fYmlvbmljX3N3YXAobG9ja2VkX2NvbnRlbmRlZCwgJm11dGV4LT52YWx1ZSkgIT0gdW5sb2NrZWQpIHsKKyAgICAgIGlmIChfX3RpbWVzcGVjX2Zyb21fYWJzb2x1dGUoJnRzLCBhYnNfdGltZW91dCwgY2xvY2spIDwgMCkgeworICAgICAgICByZXR1cm4gRVRJTUVET1VUOworICAgICAgfQorICAgICAgX19mdXRleF93YWl0X2V4KCZtdXRleC0+dmFsdWUsIHNoYXJlZCwgbG9ja2VkX2NvbnRlbmRlZCwgJnRzKTsKICAgICB9Ci19CisgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgIHJldHVybiAwOworICB9CiAKLV9fTElCQ19ISURERU5fXwotaW50IHB0aHJlYWRfbXV0ZXhfbG9ja190aW1lb3V0X25wX2ltcGwocHRocmVhZF9tdXRleF90ICptdXRleCwgdW5zaWduZWQgbXNlY3MpCi17Ci0gICAgY2xvY2tpZF90ICAgICAgICBjbG9jayA9IENMT0NLX01PTk9UT05JQzsKLSAgICB0aW1lc3BlYyAgYWJzdGltZTsKLSAgICB0aW1lc3BlYyAgdHM7Ci0gICAgaW50ICAgICAgICAgICAgICAgbXZhbHVlLCBtdHlwZSwgdGlkLCBzaGFyZWQ7CisgIC8vIERvIHdlIGFscmVhZHkgb3duIHRoaXMgcmVjdXJzaXZlIG9yIGVycm9yLWNoZWNrIG11dGV4PworICBwaWRfdCB0aWQgPSBfX2dldF90aHJlYWQoKS0+dGlkOworICBpZiAodGlkID09IE1VVEVYX09XTkVSX0ZST01fQklUUyhtdmFsdWUpKSB7CisgICAgcmV0dXJuIF9yZWN1cnNpdmVfaW5jcmVtZW50KG11dGV4LCBtdmFsdWUsIG10eXBlKTsKKyAgfQogCi0gICAgLyogY29tcHV0ZSBhYnNvbHV0ZSBleHBpcmF0aW9uIHRpbWUgKi8KLSAgICBfX3RpbWVzcGVjX3RvX3JlbGF0aXZlX21zZWMoJmFic3RpbWUsIG1zZWNzLCBjbG9jayk7CisgIC8vIFRoZSBmb2xsb3dpbmcgaW1wbGVtZW50cyB0aGUgc2FtZSBsb29wIGFzIHB0aHJlYWRfbXV0ZXhfbG9ja19pbXBsCisgIC8vIGJ1dCBhZGRzIGNoZWNrcyB0byBlbnN1cmUgdGhhdCB0aGUgb3BlcmF0aW9uIG5ldmVyIGV4Y2VlZHMgdGhlCisgIC8vIGFic29sdXRlIGV4cGlyYXRpb24gdGltZS4KKyAgbXR5cGUgfD0gc2hhcmVkOwogCisgIC8vIEZpcnN0IHRyeSBhIHF1aWNrIGxvY2suCisgIGlmIChtdmFsdWUgPT0gbXR5cGUpIHsKKyAgICBtdmFsdWUgPSBNVVRFWF9PV05FUl9UT19CSVRTKHRpZCkgfCBtdHlwZSB8IE1VVEVYX1NUQVRFX0JJVFNfTE9DS0VEX1VOQ09OVEVOREVEOworICAgIGlmIChfX3ByZWRpY3RfdHJ1ZShfX2Jpb25pY19jbXB4Y2hnKG10eXBlLCBtdmFsdWUsICZtdXRleC0+dmFsdWUpID09IDApKSB7CisgICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgbXZhbHVlID0gbXV0ZXgtPnZhbHVlOwotICAgIG10eXBlICA9IChtdmFsdWUgJiBNVVRFWF9UWVBFX01BU0spOwotICAgIHNoYXJlZCA9IChtdmFsdWUgJiBNVVRFWF9TSEFSRURfTUFTSyk7CisgIH0KIAotICAgIC8qIEhhbmRsZSBjb21tb24gY2FzZSBmaXJzdCAqLwotICAgIGlmICggX19wcmVkaWN0X3RydWUobXR5cGUgPT0gTVVURVhfVFlQRV9CSVRTX05PUk1BTCkgKQotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHVubG9ja2VkICAgICAgICAgICA9IHNoYXJlZCB8IE1VVEVYX1NUQVRFX0JJVFNfVU5MT0NLRUQ7Ci0gICAgICAgIGNvbnN0IGludCBsb2NrZWRfdW5jb250ZW5kZWQgPSBzaGFyZWQgfCBNVVRFWF9TVEFURV9CSVRTX0xPQ0tFRF9VTkNPTlRFTkRFRDsKLSAgICAgICAgY29uc3QgaW50IGxvY2tlZF9jb250ZW5kZWQgICA9IHNoYXJlZCB8IE1VVEVYX1NUQVRFX0JJVFNfTE9DS0VEX0NPTlRFTkRFRDsKLQotICAgICAgICAvKiBmYXN0IHBhdGggZm9yIHVuY29udGVuZGVkIGxvY2suIE5vdGU6IE1VVEVYX1RZUEVfQklUU19OT1JNQUwgaXMgMCAqLwotICAgICAgICBpZiAoX19iaW9uaWNfY21weGNoZyh1bmxvY2tlZCwgbG9ja2VkX3VuY29udGVuZGVkLCAmbXV0ZXgtPnZhbHVlKSA9PSAwKSB7Ci0gICAgICAgICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGxvb3Agd2hpbGUgbmVlZGVkICovCi0gICAgICAgIHdoaWxlIChfX2Jpb25pY19zd2FwKGxvY2tlZF9jb250ZW5kZWQsICZtdXRleC0+dmFsdWUpICE9IHVubG9ja2VkKSB7Ci0gICAgICAgICAgICBpZiAoX190aW1lc3BlY190b19hYnNvbHV0ZSgmdHMsICZhYnN0aW1lLCBjbG9jaykgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBFQlVTWTsKLQotICAgICAgICAgICAgX19mdXRleF93YWl0X2V4KCZtdXRleC0+dmFsdWUsIHNoYXJlZCwgbG9ja2VkX2NvbnRlbmRlZCwgJnRzKTsKLSAgICAgICAgfQorICB3aGlsZSAodHJ1ZSkgeworICAgIC8vIElmIHRoZSB2YWx1ZSBpcyAndW5sb2NrZWQnLCB0cnkgdG8gYWNxdWlyZSBpdCBkaXJlY3RseS4KKyAgICAvLyBOT1RFOiBwdXQgc3RhdGUgdG8gMiBzaW5jZSB3ZSBrbm93IHRoZXJlIGlzIGNvbnRlbnRpb24uCisgICAgaWYgKG12YWx1ZSA9PSBtdHlwZSkgeyAvLyBVbmxvY2tlZC4KKyAgICAgIG12YWx1ZSA9IE1VVEVYX09XTkVSX1RPX0JJVFModGlkKSB8IG10eXBlIHwgTVVURVhfU1RBVEVfQklUU19MT0NLRURfQ09OVEVOREVEOworICAgICAgaWYgKF9fYmlvbmljX2NtcHhjaGcobXR5cGUsIG12YWx1ZSwgJm11dGV4LT52YWx1ZSkgPT0gMCkgewogICAgICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CiAgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgLy8gVGhlIHZhbHVlIGNoYW5nZWQgYmVmb3JlIHdlIGNvdWxkIGxvY2sgaXQuIFdlIG5lZWQgdG8gY2hlY2sKKyAgICAgIC8vIHRoZSB0aW1lIHRvIGF2b2lkIGxpdmVsb2NrcywgcmVsb2FkIHRoZSB2YWx1ZSwgdGhlbiBsb29wIGFnYWluLgorICAgICAgaWYgKF9fdGltZXNwZWNfZnJvbV9hYnNvbHV0ZSgmdHMsIGFic190aW1lb3V0LCBjbG9jaykgPCAwKSB7CisgICAgICAgIHJldHVybiBFVElNRURPVVQ7CisgICAgICB9CisKKyAgICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKKyAgICAgIGNvbnRpbnVlOwogICAgIH0KIAotICAgIC8qIERvIHdlIGFscmVhZHkgb3duIHRoaXMgcmVjdXJzaXZlIG9yIGVycm9yLWNoZWNrIG11dGV4ID8gKi8KLSAgICB0aWQgPSBfX2dldF90aHJlYWQoKS0+dGlkOwotICAgIGlmICggdGlkID09IE1VVEVYX09XTkVSX0ZST01fQklUUyhtdmFsdWUpICkKLSAgICAgICAgcmV0dXJuIF9yZWN1cnNpdmVfaW5jcmVtZW50KG11dGV4LCBtdmFsdWUsIG10eXBlKTsKLQotICAgIC8qIHRoZSBmb2xsb3dpbmcgaW1wbGVtZW50cyB0aGUgc2FtZSBsb29wIHRoYW4gcHRocmVhZF9tdXRleF9sb2NrX2ltcGwKLSAgICAgKiBidXQgYWRkcyBjaGVja3MgdG8gZW5zdXJlIHRoYXQgdGhlIG9wZXJhdGlvbiBuZXZlciBleGNlZWRzIHRoZQotICAgICAqIGFic29sdXRlIGV4cGlyYXRpb24gdGltZS4KLSAgICAgKi8KLSAgICBtdHlwZSB8PSBzaGFyZWQ7Ci0KLSAgICAvKiBmaXJzdCB0cnkgYSBxdWljayBsb2NrICovCi0gICAgaWYgKG12YWx1ZSA9PSBtdHlwZSkgewotICAgICAgICBtdmFsdWUgPSBNVVRFWF9PV05FUl9UT19CSVRTKHRpZCkgfCBtdHlwZSB8IE1VVEVYX1NUQVRFX0JJVFNfTE9DS0VEX1VOQ09OVEVOREVEOwotICAgICAgICBpZiAoX19wcmVkaWN0X3RydWUoX19iaW9uaWNfY21weGNoZyhtdHlwZSwgbXZhbHVlLCAmbXV0ZXgtPnZhbHVlKSA9PSAwKSkgewotICAgICAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KKyAgICAvLyBUaGUgdmFsdWUgaXMgbG9ja2VkLiBJZiAndW5jb250ZW5kZWQnLCB0cnkgdG8gc3dpdGNoIGl0cyBzdGF0ZQorICAgIC8vIHRvICdjb250ZW50ZWQnIHRvIGVuc3VyZSB3ZSBnZXQgd29rZW4gdXAgbGF0ZXIuCisgICAgaWYgKE1VVEVYX1NUQVRFX0JJVFNfSVNfTE9DS0VEX1VOQ09OVEVOREVEKG12YWx1ZSkpIHsKKyAgICAgIGludCBuZXd2YWwgPSBNVVRFWF9TVEFURV9CSVRTX0ZMSVBfQ09OVEVOVElPTihtdmFsdWUpOworICAgICAgaWYgKF9fYmlvbmljX2NtcHhjaGcobXZhbHVlLCBuZXd2YWwsICZtdXRleC0+dmFsdWUpICE9IDApIHsKKyAgICAgICAgLy8gVGhpcyBmYWlsZWQgYmVjYXVzZSB0aGUgdmFsdWUgY2hhbmdlZCwgcmVsb2FkIGl0LgogICAgICAgICBtdmFsdWUgPSBtdXRleC0+dmFsdWU7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBUaGlzIHN1Y2NlZWRlZCwgdXBkYXRlIG12YWx1ZS4KKyAgICAgICAgbXZhbHVlID0gbmV3dmFsOworICAgICAgfQogICAgIH0KIAotICAgIGZvciAoOzspIHsKLSAgICAgICAgdGltZXNwZWMgdHM7Ci0KLSAgICAgICAgLyogaWYgdGhlIHZhbHVlIGlzICd1bmxvY2tlZCcsIHRyeSB0byBhY3F1aXJlIGl0IGRpcmVjdGx5ICovCi0gICAgICAgIC8qIE5PVEU6IHB1dCBzdGF0ZSB0byAyIHNpbmNlIHdlIGtub3cgdGhlcmUgaXMgY29udGVudGlvbiAqLwotICAgICAgICBpZiAobXZhbHVlID09IG10eXBlKSAvKiB1bmxvY2tlZCAqLyB7Ci0gICAgICAgICAgICBtdmFsdWUgPSBNVVRFWF9PV05FUl9UT19CSVRTKHRpZCkgfCBtdHlwZSB8IE1VVEVYX1NUQVRFX0JJVFNfTE9DS0VEX0NPTlRFTkRFRDsKLSAgICAgICAgICAgIGlmIChfX2Jpb25pY19jbXB4Y2hnKG10eXBlLCBtdmFsdWUsICZtdXRleC0+dmFsdWUpID09IDApIHsKLSAgICAgICAgICAgICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiB0aGUgdmFsdWUgY2hhbmdlZCBiZWZvcmUgd2UgY291bGQgbG9jayBpdC4gV2UgbmVlZCB0byBjaGVjawotICAgICAgICAgICAgICogdGhlIHRpbWUgdG8gYXZvaWQgbGl2ZWxvY2tzLCByZWxvYWQgdGhlIHZhbHVlLCB0aGVuIGxvb3AgYWdhaW4uICovCi0gICAgICAgICAgICBpZiAoX190aW1lc3BlY190b19hYnNvbHV0ZSgmdHMsICZhYnN0aW1lLCBjbG9jaykgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBFQlVTWTsKLQotICAgICAgICAgICAgbXZhbHVlID0gbXV0ZXgtPnZhbHVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBUaGUgdmFsdWUgaXMgbG9ja2VkLiBJZiAndW5jb250ZW5kZWQnLCB0cnkgdG8gc3dpdGNoIGl0cyBzdGF0ZQotICAgICAgICAgKiB0byAnY29udGVudGVkJyB0byBlbnN1cmUgd2UgZ2V0IHdva2VuIHVwIGxhdGVyLiAqLwotICAgICAgICBpZiAoTVVURVhfU1RBVEVfQklUU19JU19MT0NLRURfVU5DT05URU5ERUQobXZhbHVlKSkgewotICAgICAgICAgICAgaW50IG5ld3ZhbCA9IE1VVEVYX1NUQVRFX0JJVFNfRkxJUF9DT05URU5USU9OKG12YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoX19iaW9uaWNfY21weGNoZyhtdmFsdWUsIG5ld3ZhbCwgJm11dGV4LT52YWx1ZSkgIT0gMCkgewotICAgICAgICAgICAgICAgIC8qIHRoaXMgZmFpbGVkIGJlY2F1c2UgdGhlIHZhbHVlIGNoYW5nZWQsIHJlbG9hZCBpdCAqLwotICAgICAgICAgICAgICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogdGhpcyBzdWNjZWVkZWQsIHVwZGF0ZSBtdmFsdWUgKi8KLSAgICAgICAgICAgICAgICBtdmFsdWUgPSBuZXd2YWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBjaGVjayB0aW1lIGFuZCB1cGRhdGUgJ3RzJyAqLwotICAgICAgICBpZiAoX190aW1lc3BlY190b19hYnNvbHV0ZSgmdHMsICZhYnN0aW1lLCBjbG9jaykgPCAwKQotICAgICAgICAgICAgcmV0dXJuIEVCVVNZOwotCi0gICAgICAgIC8qIE9ubHkgd2FpdCB0byBiZSB3b2tlbiB1cCBpZiB0aGUgc3RhdGUgaXMgJzInLCBvdGhlcndpc2Ugd2UnbGwKLSAgICAgICAgICogc2ltcGx5IGxvb3AgcmlnaHQgbm93LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUgc2Vjb25kIGNtcHhjaGcKLSAgICAgICAgICogaW4gb3VyIGxvb3AgZmFpbGVkIGJlY2F1c2UgdGhlIG11dGV4IHdhcyB1bmxvY2tlZCBieSBhbm90aGVyCi0gICAgICAgICAqIHRocmVhZC4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChNVVRFWF9TVEFURV9CSVRTX0lTX0xPQ0tFRF9DT05URU5ERUQobXZhbHVlKSkgewotICAgICAgICAgICAgaWYgKF9fZnV0ZXhfd2FpdF9leCgmbXV0ZXgtPnZhbHVlLCBzaGFyZWQsIG12YWx1ZSwgJnRzKSA9PSAtRVRJTUVET1VUKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVCVVNZOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbXZhbHVlID0gbXV0ZXgtPnZhbHVlOwotICAgICAgICB9CisgICAgLy8gQ2hlY2sgdGltZSBhbmQgdXBkYXRlICd0cycuCisgICAgaWYgKF9fdGltZXNwZWNfZnJvbV9hYnNvbHV0ZSgmdHMsIGFic190aW1lb3V0LCBjbG9jaykgPCAwKSB7CisgICAgICByZXR1cm4gRVRJTUVET1VUOwogICAgIH0KLSAgICAvKiBOT1RSRUFDSEVEICovCisKKyAgICAvLyBPbmx5IHdhaXQgdG8gYmUgd29rZW4gdXAgaWYgdGhlIHN0YXRlIGlzICcyJywgb3RoZXJ3aXNlIHdlJ2xsCisgICAgLy8gc2ltcGx5IGxvb3AgcmlnaHQgbm93LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUgc2Vjb25kIGNtcHhjaGcKKyAgICAvLyBpbiBvdXIgbG9vcCBmYWlsZWQgYmVjYXVzZSB0aGUgbXV0ZXggd2FzIHVubG9ja2VkIGJ5IGFub3RoZXIgdGhyZWFkLgorICAgIGlmIChNVVRFWF9TVEFURV9CSVRTX0lTX0xPQ0tFRF9DT05URU5ERUQobXZhbHVlKSkgeworICAgICAgaWYgKF9fZnV0ZXhfd2FpdF9leCgmbXV0ZXgtPnZhbHVlLCBzaGFyZWQsIG12YWx1ZSwgJnRzKSA9PSAtRVRJTUVET1VUKSB7CisgICAgICAgIHJldHVybiBFVElNRURPVVQ7CisgICAgICB9CisgICAgICBtdmFsdWUgPSBtdXRleC0+dmFsdWU7CisgICAgfQorICB9CisgIC8qIE5PVFJFQUNIRUQgKi8KIH0KIAotaW50IHB0aHJlYWRfbXV0ZXhfbG9ja190aW1lb3V0X25wKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgsIHVuc2lnbmVkIG1zZWNzKQotewotICAgIGludCBlcnIgPSBwdGhyZWFkX211dGV4X2xvY2tfdGltZW91dF9ucF9pbXBsKG11dGV4LCBtc2Vjcyk7Ci0gICAgaWYgKFBUSFJFQURfREVCVUdfRU5BQkxFRCkgewotICAgICAgICBpZiAoIWVycikgewotICAgICAgICAgICAgcHRocmVhZF9kZWJ1Z19tdXRleF9sb2NrX2NoZWNrKG11dGV4KTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZXJyOworI2lmICFkZWZpbmVkKF9fTFA2NF9fKQorZXh0ZXJuICJDIiBpbnQgcHRocmVhZF9tdXRleF9sb2NrX3RpbWVvdXRfbnAocHRocmVhZF9tdXRleF90KiBtdXRleCwgdW5zaWduZWQgbXMpIHsKKyAgdGltZXNwZWMgYWJzX3RpbWVvdXQ7CisgIGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmYWJzX3RpbWVvdXQpOworICBhYnNfdGltZW91dC50dl9zZWMgICs9IG1zIC8gMTAwMDsKKyAgYWJzX3RpbWVvdXQudHZfbnNlYyArPSAobXMgJSAxMDAwKSAqIDEwMDAwMDA7CisgIGlmIChhYnNfdGltZW91dC50dl9uc2VjID49IDEwMDAwMDAwMDApIHsKKyAgICBhYnNfdGltZW91dC50dl9zZWMrKzsKKyAgICBhYnNfdGltZW91dC50dl9uc2VjIC09IDEwMDAwMDAwMDA7CisgIH0KKworICBpbnQgZXJyb3IgPSBfX3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKG11dGV4LCAmYWJzX3RpbWVvdXQsIENMT0NLX01PTk9UT05JQyk7CisgIGlmIChlcnJvciA9PSBFVElNRURPVVQpIHsKKyAgICBlcnJvciA9IEVCVVNZOworICB9CisgIHJldHVybiBlcnJvcjsKK30KKyNlbmRpZgorCitpbnQgcHRocmVhZF9tdXRleF90aW1lZGxvY2socHRocmVhZF9tdXRleF90KiBtdXRleCwgY29uc3QgdGltZXNwZWMqIGFic190aW1lb3V0KSB7CisgIHJldHVybiBfX3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKG11dGV4LCBhYnNfdGltZW91dCwgQ0xPQ0tfUkVBTFRJTUUpOwogfQogCi1pbnQgcHRocmVhZF9tdXRleF9kZXN0cm95KHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCi17Ci0gICAgaW50IHJldDsKLQotICAgIC8qIHVzZSB0cnlsb2NrIHRvIGVuc3VyZSB0aGF0IHRoZSBtdXRleCB2YWx1ZSBpcwotICAgICAqIHZhbGlkIGFuZCBpcyBub3QgYWxyZWFkeSBsb2NrZWQuICovCi0gICAgcmV0ID0gcHRocmVhZF9tdXRleF90cnlsb2NrX2ltcGwobXV0ZXgpOwotICAgIGlmIChyZXQgIT0gMCkKLSAgICAgICAgcmV0dXJuIHJldDsKLQotICAgIG11dGV4LT52YWx1ZSA9IDB4ZGVhZDEwY2M7Ci0gICAgcmV0dXJuIDA7CitpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95KHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgpIHsKKyAgLy8gVXNlIHRyeWxvY2sgdG8gZW5zdXJlIHRoYXQgdGhlIG11dGV4IGlzIHZhbGlkIGFuZCBub3QgYWxyZWFkeSBsb2NrZWQuCisgIGludCBlcnJvciA9IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhtdXRleCk7CisgIGlmIChlcnJvciAhPSAwKSB7CisgICAgcmV0dXJuIGVycm9yOworICB9CisgIG11dGV4LT52YWx1ZSA9IDB4ZGVhZDEwY2M7CisgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9yd2xvY2suY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9yd2xvY2suY3BwCmluZGV4IDAxODJlZjMuLjA2MzEzN2IgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3B0aHJlYWRfcndsb2NrLmNwcAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX3J3bG9jay5jcHAKQEAgLTI2LDkgKzI2LDExIEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgogI2luY2x1ZGUgPGVycm5vLmg+CiAKKyNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfZnV0ZXguaCIKKwogLyogVGVjaG5pY2FsIG5vdGU6CiAgKgogICogUG9zc2libGUgc3RhdGVzIG9mIGEgcmVhZC93cml0ZSBsb2NrOgpAQCAtNDAsMzAwICs0MiwyMzkgQEAKICAqIEFkZGl0aW9uYWxseToKICAqICAtIHRyeWluZyB0byBnZXQgdGhlIHdyaXRlLWxvY2sgd2hpbGUgdGhlcmUgYXJlIGFueSByZWFkZXJzIGJsb2NrcwogICogIC0gdHJ5aW5nIHRvIGdldCB0aGUgcmVhZC1sb2NrIHdoaWxlIHRoZXJlIGlzIGEgd3JpdGVyIGJsb2NrcwotICogIC0gYSBzaW5nbGUgdGhyZWFkIGNhbiBhY3F1aXJlIHRoZSBsb2NrIG11bHRpcGxlIHRpbWVzIGluIHRoZSBzYW1lIG1vZGUKKyAqICAtIGEgc2luZ2xlIHRocmVhZCBjYW4gYWNxdWlyZSB0aGUgbG9jayBtdWx0aXBsZSB0aW1lcyBpbiByZWFkIG1vZGUKICAqCi0gKiAgLSBQb3NpeCBzdGF0ZXMgdGhhdCBiZWhhdmlvciBpcyB1bmRlZmluZWQgaXQgYSB0aHJlYWQgdHJpZXMgdG8gYWNxdWlyZQotICogICAgdGhlIGxvY2sgaW4gdHdvIGRpc3RpbmN0IG1vZGVzIChlLmcuIHdyaXRlIGFmdGVyIHJlYWQsIG9yIHJlYWQgYWZ0ZXIgd3JpdGUpLgorICogIC0gUG9zaXggc3RhdGVzIHRoYXQgYmVoYXZpb3IgaXMgdW5kZWZpbmVkIChtYXkgZGVhZGxvY2spIGlmIGEgdGhyZWFkIHRyaWVzCisgKiAgICB0byBhY3F1aXJlIHRoZSBsb2NrCisgKiAgICAgIC0gaW4gd3JpdGUgbW9kZSB3aGlsZSBhbHJlYWR5IGhvbGRpbmcgdGhlIGxvY2sgKHdoZXRoZXIgaW4gcmVhZCBvciB3cml0ZSBtb2RlKQorICogICAgICAtIGluIHJlYWQgbW9kZSB3aGlsZSBhbHJlYWR5IGhvbGRpbmcgdGhlIGxvY2sgaW4gd3JpdGUgbW9kZS4KKyAqICAtIFRoaXMgaW1wbGVtZW50YXRpb24gd2lsbCByZXR1cm4gRURFQURMSyBpbiAid3JpdGUgYWZ0ZXIgd3JpdGUiIGFuZCAicmVhZCBhZnRlcgorICogICAgd3JpdGUiIGNhc2VzIGFuZCB3aWxsIGRlYWRsb2NrIGluIHdyaXRlIGFmdGVyIHJlYWQgY2FzZS4KICAqCi0gKiAgLSBUaGlzIGltcGxlbWVudGF0aW9uIHRyaWVzIHRvIGF2b2lkIHdyaXRlciBzdGFydmF0aW9uIGJ5IG1ha2luZyB0aGUgcmVhZGVycwotICogICAgYmxvY2sgYXMgc29vbiBhcyB0aGVyZSBpcyBhIHdhaXRpbmcgd3JpdGVyIG9uIHRoZSBsb2NrLiBIb3dldmVyLCBpdCBjYW5ub3QKLSAqICAgIGNvbXBsZXRlbHkgZWxpbWluYXRlIGl0OiBlYWNoIHRpbWUgdGhlIGxvY2sgaXMgdW5sb2NrZWQsIGFsbCB3YWl0aW5nIHRocmVhZHMKLSAqICAgIGFyZSB3b2tlbiBhbmQgYmF0dGxlIGZvciBpdCwgd2hpY2ggb25lIGdldHMgaXQgZGVwZW5kcyBvbiB0aGUga2VybmVsIHNjaGVkdWxlcgotICogICAgYW5kIGlzIHNlbWktcmFuZG9tLgorICogVE9ETzogVkVSWSBDQVJFRlVMTFkgY29udmVydCB0aGlzIHRvIHVzZSBDKysxMSBhdG9taWNzIHdoZW4gcG9zc2libGUuIEFsbCB2b2xhdGlsZQorICogbWVtYmVycyBvZiBwdGhyZWFkX3J3bG9ja190IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gYXRvbWljczw+IGFuZCBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwCisgKiBzaG91bGQgYmUgY2hhbmdlZCB0byBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyBhY2NvbXBhbmllZCBieSB0aGUgcHJvcGVyIG9yZGVyaW5nCisgKiBjb25zdHJhaW50cyAoY29tbWVudHMgaGF2ZSBiZWVuIGFkZGVkIHdpdGggdGhlIGludGVuZGluZyBvcmRlcmluZyBhY3Jvc3MgdGhlIGNvZGUpLgorICoKKyAqIFRPRE86IEFzIGl0IHN0YW5kcyBub3csIHBlbmRpbmdfcmVhZGVycyBhbmQgcGVuZGluZ193cml0ZXJzIGNvdWxkIGJlIG1lcmdlZCBpbnRvIGEKKyAqIGEgc2luZ2xlIHdhaXRlcnMgdmFyaWFibGUuICBLZWVwaW5nIHRoZW0gc2VwYXJhdGUgYWRkcyBhIGJpdCBvZiBjbGFyaXR5IGFuZCBrZWVwcworICogdGhlIGRvb3Igb3BlbiBmb3IgYSB3cml0ZXItYmlhc2VkIGltcGxlbWVudGF0aW9uLgogICoKICAqLwogCi0jZGVmaW5lICBSV0xPQ0tBVFRSX0RFRkFVTFQgICAgIDAKLSNkZWZpbmUgIFJXTE9DS0FUVFJfU0hBUkVEX01BU0sgMHgwMDEwCisjZGVmaW5lIFJXTE9DS0FUVFJfREVGQVVMVCAgICAgMAorI2RlZmluZSBSV0xPQ0tBVFRSX1NIQVJFRF9NQVNLIDB4MDAxMAogCi1leHRlcm4gcHRocmVhZF9pbnRlcm5hbF90KiBfX2dldF90aHJlYWQodm9pZCk7Ci0KLWludCBwdGhyZWFkX3J3bG9ja2F0dHJfaW5pdChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqYXR0cikKLXsKLSAgICBpZiAoIWF0dHIpCi0gICAgICAgIHJldHVybiBFSU5WQUw7Ci0KLSAgICAqYXR0ciA9IFBUSFJFQURfUFJPQ0VTU19QUklWQVRFOwotICAgIHJldHVybiAwOworc3RhdGljIGlubGluZSBib29sIHJ3bG9ja19pc19zaGFyZWQoY29uc3QgcHRocmVhZF9yd2xvY2tfdCogcndsb2NrKSB7CisgIHJldHVybiByd2xvY2stPmF0dHIgPT0gUFRIUkVBRF9QUk9DRVNTX1NIQVJFRDsKIH0KIAotaW50IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95KHB0aHJlYWRfcndsb2NrYXR0cl90ICphdHRyKQotewotICAgIGlmICghYXR0cikKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKLQotICAgICphdHRyID0gLTE7Ci0gICAgcmV0dXJuIDA7CitzdGF0aWMgYm9vbCB0aW1lc3BlY19mcm9tX2Fic29sdXRlKHRpbWVzcGVjKiByZWxfdGltZW91dCwgY29uc3QgdGltZXNwZWMqIGFic190aW1lb3V0KSB7CisgIGlmIChhYnNfdGltZW91dCAhPSBOVUxMKSB7CisgICAgaWYgKF9fdGltZXNwZWNfZnJvbV9hYnNvbHV0ZShyZWxfdGltZW91dCwgYWJzX3RpbWVvdXQsIENMT0NLX1JFQUxUSU1FKSA8IDApIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHRydWU7CiB9CiAKLWludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0cHNoYXJlZChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqYXR0ciwgaW50ICBwc2hhcmVkKQotewotICAgIGlmICghYXR0cikKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKK2ludCBwdGhyZWFkX3J3bG9ja2F0dHJfaW5pdChwdGhyZWFkX3J3bG9ja2F0dHJfdCogYXR0cikgeworICAqYXR0ciA9IFBUSFJFQURfUFJPQ0VTU19QUklWQVRFOworICByZXR1cm4gMDsKK30KIAotICAgIHN3aXRjaCAocHNoYXJlZCkgeworaW50IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95KHB0aHJlYWRfcndsb2NrYXR0cl90KiBhdHRyKSB7CisgICphdHRyID0gLTE7CisgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQocHRocmVhZF9yd2xvY2thdHRyX3QqIGF0dHIsIGludCBwc2hhcmVkKSB7CisgIHN3aXRjaCAocHNoYXJlZCkgewogICAgIGNhc2UgUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEU6CiAgICAgY2FzZSBQVEhSRUFEX1BST0NFU1NfU0hBUkVEOgotICAgICAgICAqYXR0ciA9IHBzaGFyZWQ7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgKmF0dHIgPSBwc2hhcmVkOworICAgICAgcmV0dXJuIDA7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKLSAgICB9CisgICAgICByZXR1cm4gRUlOVkFMOworICB9CiB9CiAKIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0cHNoYXJlZChjb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCogYXR0ciwgaW50KiBwc2hhcmVkKSB7Ci0gICAgaWYgKCFhdHRyIHx8ICFwc2hhcmVkKQotICAgICAgICByZXR1cm4gRUlOVkFMOwotCi0gICAgKnBzaGFyZWQgPSAqYXR0cjsKLSAgICByZXR1cm4gMDsKKyAgKnBzaGFyZWQgPSAqYXR0cjsKKyAgcmV0dXJuIDA7CiB9CiAKLWludCBwdGhyZWFkX3J3bG9ja19pbml0KHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaywgY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKmF0dHIpCi17Ci0gICAgcHRocmVhZF9tdXRleGF0dHJfdCogIGxvY2tfYXR0ciA9IE5VTEw7Ci0gICAgcHRocmVhZF9jb25kYXR0cl90KiAgIGNvbmRfYXR0ciA9IE5VTEw7Ci0gICAgcHRocmVhZF9tdXRleGF0dHJfdCAgIGxvY2tfYXR0cjA7Ci0gICAgcHRocmVhZF9jb25kYXR0cl90ICAgIGNvbmRfYXR0cjA7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgIHJldDsKLQotICAgIGlmIChyd2xvY2sgPT0gTlVMTCkKK2ludCBwdGhyZWFkX3J3bG9ja19pbml0KHB0aHJlYWRfcndsb2NrX3QqIHJ3bG9jaywgY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QqIGF0dHIpIHsKKyAgaWYgKGF0dHIgIT0gTlVMTCkgeworICAgIHN3aXRjaCAoKmF0dHIpIHsKKyAgICAgIGNhc2UgUFRIUkVBRF9QUk9DRVNTX1NIQVJFRDoKKyAgICAgIGNhc2UgUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEU6CisgICAgICAgIHJ3bG9jay0+YXR0cj0gKmF0dHI7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIEVJTlZBTDsKLQotICAgIGlmIChhdHRyICYmICphdHRyID09IFBUSFJFQURfUFJPQ0VTU19TSEFSRUQpIHsKLSAgICAgICAgbG9ja19hdHRyID0gJmxvY2tfYXR0cjA7Ci0gICAgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQobG9ja19hdHRyKTsKLSAgICAgICAgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZChsb2NrX2F0dHIsIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQpOwotCi0gICAgICAgIGNvbmRfYXR0ciA9ICZjb25kX2F0dHIwOwotICAgICAgICBwdGhyZWFkX2NvbmRhdHRyX2luaXQoY29uZF9hdHRyKTsKLSAgICAgICAgcHRocmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkKGNvbmRfYXR0ciwgUFRIUkVBRF9QUk9DRVNTX1NIQVJFRCk7CiAgICAgfQorICB9CiAKLSAgICByZXQgPSBwdGhyZWFkX211dGV4X2luaXQoJnJ3bG9jay0+bG9jaywgbG9ja19hdHRyKTsKLSAgICBpZiAocmV0ICE9IDApCi0gICAgICAgIHJldHVybiByZXQ7CisgIHJ3bG9jay0+c3RhdGUgPSAwOworICByd2xvY2stPnBlbmRpbmdfcmVhZGVycyA9IDA7CisgIHJ3bG9jay0+cGVuZGluZ193cml0ZXJzID0gMDsKKyAgcndsb2NrLT53cml0ZXJfdGhyZWFkX2lkID0gMDsKIAotICAgIHJldCA9IHB0aHJlYWRfY29uZF9pbml0KCZyd2xvY2stPmNvbmQsIGNvbmRfYXR0cik7Ci0gICAgaWYgKHJldCAhPSAwKSB7Ci0gICAgICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmcndsb2NrLT5sb2NrKTsKLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICByd2xvY2stPm51bUxvY2tzID0gMDsKLSAgICByd2xvY2stPnBlbmRpbmdSZWFkZXJzID0gMDsKLSAgICByd2xvY2stPnBlbmRpbmdXcml0ZXJzID0gMDsKLSAgICByd2xvY2stPndyaXRlclRocmVhZElkID0gMDsKLQotICAgIHJldHVybiAwOworICByZXR1cm4gMDsKIH0KIAotaW50IHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3kocHRocmVhZF9yd2xvY2tfdCAqcndsb2NrKQotewotICAgIGlmIChyd2xvY2sgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKLQotICAgIGlmIChyd2xvY2stPm51bUxvY2tzID4gMCkKLSAgICAgICAgcmV0dXJuIEVCVVNZOwotCi0gICAgcHRocmVhZF9jb25kX2Rlc3Ryb3koJnJ3bG9jay0+Y29uZCk7Ci0gICAgcHRocmVhZF9tdXRleF9kZXN0cm95KCZyd2xvY2stPmxvY2spOwotICAgIHJldHVybiAwOwotfQotCi0vKiBSZXR1cm5zIFRSVUUgaWZmIHdlIGNhbiBhY3F1aXJlIGEgcmVhZCBsb2NrLiAqLwotc3RhdGljIF9faW5saW5lX18gaW50IHJlYWRfcHJlY29uZGl0aW9uKHB0aHJlYWRfcndsb2NrX3QqIHJ3bG9jaywgaW50IHRpZCkKLXsKLSAgICAvKiBXZSBjYW4ndCBoYXZlIHRoZSBsb2NrIGlmIGFueSB3cml0ZXIgaXMgd2FpdGluZyBmb3IgaXQgKHdyaXRlciBiaWFzKS4KLSAgICAgKiBUaGlzIHRyaWVzIHRvIGF2b2lkIHN0YXJ2YXRpb24gd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgcmVhZGVycyByYWNpbmcuCi0gICAgICovCi0gICAgaWYgKHJ3bG9jay0+cGVuZGluZ1dyaXRlcnMgPiAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIFdlIGNhbiBoYXZlIHRoZSBsb2NrIGlmIHRoZXJlIGlzIG5vIHdyaXRlciwgb3IgaWYgd2Ugd3JpdGUtb3duIGl0ICovCi0gICAgLyogVGhlIHNlY29uZCB0ZXN0IGF2b2lkcyBhIHNlbGYtZGVhZCBsb2NrIGluIGNhc2Ugb2YgYnVnZ3kgY29kZS4gKi8KLSAgICBpZiAocndsb2NrLT53cml0ZXJUaHJlYWRJZCA9PSAwIHx8IHJ3bG9jay0+d3JpdGVyVGhyZWFkSWQgPT0gdGlkKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIC8qIE90aGVyd2lzZSwgd2UgY2FuJ3QgaGF2ZSBpdCAqLwotICAgIHJldHVybiAwOwotfQotCi0vKiByZXR1cm5zIFRSVUUgaWZmIHdlIGNhbiBhY3F1aXJlIGEgd3JpdGUgbG9jay4gKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCB3cml0ZV9wcmVjb25kaXRpb24ocHRocmVhZF9yd2xvY2tfdCogcndsb2NrLCBpbnQgdGlkKQotewotICAgIC8qIFdlIGNhbiBnZXQgdGhlIGxvY2sgaWYgbm9ib2R5IGhhcyBpdCAqLwotICAgIGlmIChyd2xvY2stPm51bUxvY2tzID09IDApCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgLyogT3IgaWYgd2UgYWxyZWFkeSBvd24gaXQgKi8KLSAgICBpZiAocndsb2NrLT53cml0ZXJUaHJlYWRJZCA9PSB0aWQpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgLyogT3RoZXJ3aXNlLCBub3QgKi8KLSAgICByZXR1cm4gMDsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHdha2VuIGFueSB3YWl0aW5nIHRocmVhZCBjb250ZW5kaW5nCi0gKiBmb3IgdGhlIGxvY2suIE9uZSBvZiB0aGVtIHNob3VsZCBiZSBhYmxlIHRvIGdyYWIgaXQgYWZ0ZXIKLSAqIHRoYXQuCi0gKi8KLXN0YXRpYyB2b2lkIF9wdGhyZWFkX3J3bG9ja19wdWxzZShwdGhyZWFkX3J3bG9ja190ICpyd2xvY2spCi17Ci0gICAgaWYgKHJ3bG9jay0+cGVuZGluZ1JlYWRlcnMgPiAwIHx8IHJ3bG9jay0+cGVuZGluZ1dyaXRlcnMgPiAwKQotICAgICAgICBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZyd2xvY2stPmNvbmQpOworaW50IHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3kocHRocmVhZF9yd2xvY2tfdCogcndsb2NrKSB7CisgIGlmIChyd2xvY2stPnN0YXRlICE9IDApIHsKKyAgICByZXR1cm4gRUJVU1k7CisgIH0KKyAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19wdGhyZWFkX3J3bG9ja190aW1lZHJkbG9jayhwdGhyZWFkX3J3bG9ja190KiByd2xvY2ssIGNvbnN0IHRpbWVzcGVjKiBhYnNfdGltZW91dCkgewotICBpbnQgcmV0ID0gMDsKLQotICBpZiAocndsb2NrID09IE5VTEwpIHsKLSAgICByZXR1cm4gRUlOVkFMOworICBpZiAoX19wcmVkaWN0X2ZhbHNlKF9fZ2V0X3RocmVhZCgpLT50aWQgPT0gcndsb2NrLT53cml0ZXJfdGhyZWFkX2lkKSkgeworICAgIHJldHVybiBFREVBRExLOwogICB9CiAKLSAgcHRocmVhZF9tdXRleF9sb2NrKCZyd2xvY2stPmxvY2spOwotICBpbnQgdGlkID0gX19nZXRfdGhyZWFkKCktPnRpZDsKLSAgaWYgKF9fcHJlZGljdF9mYWxzZSghcmVhZF9wcmVjb25kaXRpb24ocndsb2NrLCB0aWQpKSkgewotICAgIHJ3bG9jay0+cGVuZGluZ1JlYWRlcnMgKz0gMTsKLSAgICBkbyB7Ci0gICAgICByZXQgPSBwdGhyZWFkX2NvbmRfdGltZWR3YWl0KCZyd2xvY2stPmNvbmQsICZyd2xvY2stPmxvY2ssIGFic190aW1lb3V0KTsKLSAgICB9IHdoaWxlIChyZXQgPT0gMCAmJiAhcmVhZF9wcmVjb25kaXRpb24ocndsb2NrLCB0aWQpKTsKLSAgICByd2xvY2stPnBlbmRpbmdSZWFkZXJzIC09IDE7Ci0gICAgaWYgKHJldCAhPSAwKSB7Ci0gICAgICBnb3RvIEVYSVQ7CisgIHRpbWVzcGVjIHRzOworICB0aW1lc3BlYyogcmVsX3RpbWVvdXQgPSAoYWJzX3RpbWVvdXQgPT0gTlVMTCkgPyBOVUxMIDogJnRzOworICBib29sIGRvbmUgPSBmYWxzZTsKKyAgZG8geworICAgIC8vIFRoaXMgaXMgYWN0dWFsbHkgYSByYWNlIHJlYWQgYXMgdGhlcmUncyBub3RoaW5nIHRoYXQgZ3VhcmFudGVlcyB0aGUgYXRvbWljaXR5IG9mIGludGVnZXIKKyAgICAvLyByZWFkcyAvIHdyaXRlcy4gSG93ZXZlciwgaW4gcHJhY3RpY2UgdGhpcyAibmV2ZXIiIGhhcHBlbnMgc28gdW50aWwgd2Ugc3dpdGNoIHRvIEMrKzExIHRoaXMKKyAgICAvLyBzaG91bGQgd29yayBmaW5lLiBUaGUgc2FtZSBhcHBsaWVzIGluIHRoZSBvdGhlciBwbGFjZXMgdGhpcyBpZGlvbSBpcyB1c2VkLgorICAgIGludDMyX3QgY3VyX3N0YXRlID0gcndsb2NrLT5zdGF0ZTsgIC8vIEMrKzExIHJlbGF4ZWQgYXRvbWljIHJlYWQKKyAgICBpZiAoX19wcmVkaWN0X3RydWUoY3VyX3N0YXRlID49IDApKSB7CisgICAgICAvLyBBZGQgYXMgYW4gZXh0cmEgcmVhZGVyLgorICAgICAgZG9uZSA9IF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAoJnJ3bG9jay0+c3RhdGUsIGN1cl9zdGF0ZSwgY3VyX3N0YXRlICsgMSk7ICAvLyBDKysxMSBtZW1vcnlfb3JkZXJfYXF1aXJlCisgICAgfSBlbHNlIHsKKyAgICAgIGlmICghdGltZXNwZWNfZnJvbV9hYnNvbHV0ZShyZWxfdGltZW91dCwgYWJzX3RpbWVvdXQpKSB7CisgICAgICAgIHJldHVybiBFVElNRURPVVQ7CisgICAgICB9CisgICAgICAvLyBPd25lciBob2xkcyBpdCBpbiB3cml0ZSBtb2RlLCBoYW5nIHVwLgorICAgICAgLy8gVG8gYXZvaWQgbG9zaW5nIHdha2UgdXBzIHRoZSBwZW5kaW5nX3JlYWRlcnMgdXBkYXRlIGFuZCB0aGUgc3RhdGUgcmVhZCBzaG91bGQgYmUKKyAgICAgIC8vIHNlcXVlbnRpYWxseSBjb25zaXN0ZW50LiAoY3VycmVudGx5IGVuZm9yY2VkIGJ5IF9fc3luY19mZXRjaF9hbmRfYWRkIHdoaWNoIGNyZWF0ZXMgYSBmdWxsIGJhcnJpZXIpCisgICAgICBfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmcndsb2NrLT5wZW5kaW5nX3JlYWRlcnMsIDEpOyAgLy8gQysrMTEgbWVtb3J5X29yZGVyX3JlbGF4ZWQgKGlmIHRoZSBmdXRleF93YWl0IGVuc3VyZXMgdGhlIG9yZGVyaW5nKQorICAgICAgaW50IHJldCA9IF9fZnV0ZXhfd2FpdF9leCgmcndsb2NrLT5zdGF0ZSwgcndsb2NrX2lzX3NoYXJlZChyd2xvY2spLCBjdXJfc3RhdGUsIHJlbF90aW1lb3V0KTsKKyAgICAgIF9fc3luY19mZXRjaF9hbmRfc3ViKCZyd2xvY2stPnBlbmRpbmdfcmVhZGVycywgMSk7ICAvLyBDKysxMSBtZW1vcnlfb3JkZXJfcmVsYXhlZAorICAgICAgaWYgKHJldCA9PSAtRVRJTUVET1VUKSB7CisgICAgICAgIHJldHVybiBFVElNRURPVVQ7CisgICAgICB9CiAgICAgfQotICB9Ci0gICsrcndsb2NrLT5udW1Mb2NrczsKLUVYSVQ6Ci0gIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZyd2xvY2stPmxvY2spOwotICByZXR1cm4gcmV0OworICB9IHdoaWxlICghZG9uZSk7CisKKyAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19wdGhyZWFkX3J3bG9ja190aW1lZHdybG9jayhwdGhyZWFkX3J3bG9ja190KiByd2xvY2ssIGNvbnN0IHRpbWVzcGVjKiBhYnNfdGltZW91dCkgewotICBpbnQgcmV0ID0gMDsKLQotICBpZiAocndsb2NrID09IE5VTEwpIHsKLSAgICByZXR1cm4gRUlOVkFMOwotICB9Ci0KLSAgcHRocmVhZF9tdXRleF9sb2NrKCZyd2xvY2stPmxvY2spOwogICBpbnQgdGlkID0gX19nZXRfdGhyZWFkKCktPnRpZDsKLSAgaWYgKF9fcHJlZGljdF9mYWxzZSghd3JpdGVfcHJlY29uZGl0aW9uKHJ3bG9jaywgdGlkKSkpIHsKLSAgICAvLyBJZiB3ZSBjYW4ndCByZWFkIHlldCwgd2FpdCB1bnRpbCB0aGUgcndsb2NrIGlzIHVubG9ja2VkCi0gICAgLy8gYW5kIHRyeSBhZ2Fpbi4gSW5jcmVtZW50IHBlbmRpbmdSZWFkZXJzIHRvIGdldCB0aGUKLSAgICAvLyBjb25kIGJyb2FkY2FzdCB3aGVuIHRoYXQgaGFwcGVucy4KLSAgICByd2xvY2stPnBlbmRpbmdXcml0ZXJzICs9IDE7Ci0gICAgZG8gewotICAgICAgcmV0ID0gcHRocmVhZF9jb25kX3RpbWVkd2FpdCgmcndsb2NrLT5jb25kLCAmcndsb2NrLT5sb2NrLCBhYnNfdGltZW91dCk7Ci0gICAgfSB3aGlsZSAocmV0ID09IDAgJiYgIXdyaXRlX3ByZWNvbmRpdGlvbihyd2xvY2ssIHRpZCkpOwotICAgIHJ3bG9jay0+cGVuZGluZ1dyaXRlcnMgLT0gMTsKLSAgICBpZiAocmV0ICE9IDApIHsKLSAgICAgIGdvdG8gRVhJVDsKLSAgICB9CisgIGlmIChfX3ByZWRpY3RfZmFsc2UodGlkID09IHJ3bG9jay0+d3JpdGVyX3RocmVhZF9pZCkpIHsKKyAgICByZXR1cm4gRURFQURMSzsKICAgfQotICArK3J3bG9jay0+bnVtTG9ja3M7Ci0gIHJ3bG9jay0+d3JpdGVyVGhyZWFkSWQgPSB0aWQ7Ci1FWElUOgotICBwdGhyZWFkX211dGV4X3VubG9jaygmcndsb2NrLT5sb2NrKTsKLSAgcmV0dXJuIHJldDsKKworICB0aW1lc3BlYyB0czsKKyAgdGltZXNwZWMqIHJlbF90aW1lb3V0ID0gKGFic190aW1lb3V0ID09IE5VTEwpID8gTlVMTCA6ICZ0czsKKyAgYm9vbCBkb25lID0gZmFsc2U7CisgIGRvIHsKKyAgICBpbnQzMl90IGN1cl9zdGF0ZSA9IHJ3bG9jay0+c3RhdGU7CisgICAgaWYgKF9fcHJlZGljdF90cnVlKGN1cl9zdGF0ZSA9PSAwKSkgeworICAgICAgLy8gQ2hhbmdlIHN0YXRlIGZyb20gMCB0byAtMS4KKyAgICAgIGRvbmUgPSAgX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCgmcndsb2NrLT5zdGF0ZSwgMCAvKiBjdXIgc3RhdGUgKi8sIC0xIC8qIG5ldyBzdGF0ZSAqLyk7ICAvLyBDKysxMSBtZW1vcnlfb3JkZXJfYXF1aXJlCisgICAgfSBlbHNlIHsKKyAgICAgIGlmICghdGltZXNwZWNfZnJvbV9hYnNvbHV0ZShyZWxfdGltZW91dCwgYWJzX3RpbWVvdXQpKSB7CisgICAgICAgIHJldHVybiBFVElNRURPVVQ7CisgICAgICB9CisgICAgICAvLyBGYWlsZWQgdG8gYWNxdWlyZSwgaGFuZyB1cC4KKyAgICAgIC8vIFRvIGF2b2lkIGxvc2luZyB3YWtlIHVwcyB0aGUgcGVuZGluZ193cml0ZXJzIHVwZGF0ZSBhbmQgdGhlIHN0YXRlIHJlYWQgc2hvdWxkIGJlCisgICAgICAvLyBzZXF1ZW50aWFsbHkgY29uc2lzdGVudC4gKGN1cnJlbnRseSBlbmZvcmNlZCBieSBfX3N5bmNfZmV0Y2hfYW5kX2FkZCB3aGljaCBjcmVhdGVzIGEgZnVsbCBiYXJyaWVyKQorICAgICAgX19zeW5jX2ZldGNoX2FuZF9hZGQoJnJ3bG9jay0+cGVuZGluZ193cml0ZXJzLCAxKTsgIC8vIEMrKzExIG1lbW9yeV9vcmRlcl9yZWxheGVkIChpZiB0aGUgZnV0ZXhfd2FpdCBlbnN1cmVzIHRoZSBvcmRlcmluZykKKyAgICAgIGludCByZXQgPSBfX2Z1dGV4X3dhaXRfZXgoJnJ3bG9jay0+c3RhdGUsIHJ3bG9ja19pc19zaGFyZWQocndsb2NrKSwgY3VyX3N0YXRlLCByZWxfdGltZW91dCk7CisgICAgICBfX3N5bmNfZmV0Y2hfYW5kX3N1Yigmcndsb2NrLT5wZW5kaW5nX3dyaXRlcnMsIDEpOyAgLy8gQysrMTEgbWVtb3J5X29yZGVyX3JlbGF4ZWQKKyAgICAgIGlmIChyZXQgPT0gLUVUSU1FRE9VVCkgeworICAgICAgICByZXR1cm4gRVRJTUVET1VUOworICAgICAgfQorICAgIH0KKyAgfSB3aGlsZSAoIWRvbmUpOworCisgIHJ3bG9jay0+d3JpdGVyX3RocmVhZF9pZCA9IHRpZDsKKyAgcmV0dXJuIDA7CiB9CiAKIGludCBwdGhyZWFkX3J3bG9ja19yZGxvY2socHRocmVhZF9yd2xvY2tfdCogcndsb2NrKSB7CiAgIHJldHVybiBfX3B0aHJlYWRfcndsb2NrX3RpbWVkcmRsb2NrKHJ3bG9jaywgTlVMTCk7CiB9CiAKLWludCBwdGhyZWFkX3J3bG9ja190cnlyZGxvY2socHRocmVhZF9yd2xvY2tfdCAqcndsb2NrKQotewotICAgIGludCByZXQgPSAwOwotCi0gICAgaWYgKHJ3bG9jayA9PSBOVUxMKQotICAgICAgICByZXR1cm4gRUlOVkFMOwotCi0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZyd2xvY2stPmxvY2spOwotICAgIGlmIChfX3ByZWRpY3RfZmFsc2UoIXJlYWRfcHJlY29uZGl0aW9uKHJ3bG9jaywgX19nZXRfdGhyZWFkKCktPnRpZCkpKQotICAgICAgICByZXQgPSBFQlVTWTsKLSAgICBlbHNlCi0gICAgICAgICsrcndsb2NrLT5udW1Mb2NrczsKLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmcndsb2NrLT5sb2NrKTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHJkbG9jayhwdGhyZWFkX3J3bG9ja190KiByd2xvY2ssIGNvbnN0IHRpbWVzcGVjKiBhYnNfdGltZW91dCkgewogICByZXR1cm4gX19wdGhyZWFkX3J3bG9ja190aW1lZHJkbG9jayhyd2xvY2ssIGFic190aW1lb3V0KTsKIH0KIAoraW50IHB0aHJlYWRfcndsb2NrX3RyeXJkbG9jayhwdGhyZWFkX3J3bG9ja190KiByd2xvY2spIHsKKyAgaW50MzJfdCBjdXJfc3RhdGUgPSByd2xvY2stPnN0YXRlOworICBpZiAoKGN1cl9zdGF0ZSA+PSAwKSAmJgorICAgICAgX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCgmcndsb2NrLT5zdGF0ZSwgY3VyX3N0YXRlLCBjdXJfc3RhdGUgKyAxKSkgeyAgLy8gQysrMTEgbWVtb3J5X29yZGVyX2FjcXVpcmUKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gRUJVU1k7Cit9CisKIGludCBwdGhyZWFkX3J3bG9ja193cmxvY2socHRocmVhZF9yd2xvY2tfdCogcndsb2NrKSB7CiAgIHJldHVybiBfX3B0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrKHJ3bG9jaywgTlVMTCk7CiB9CiAKLWludCBwdGhyZWFkX3J3bG9ja190cnl3cmxvY2socHRocmVhZF9yd2xvY2tfdCAqcndsb2NrKQotewotICAgIGludCByZXQgPSAwOwotCi0gICAgaWYgKHJ3bG9jayA9PSBOVUxMKQotICAgICAgICByZXR1cm4gRUlOVkFMOwotCi0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZyd2xvY2stPmxvY2spOwotICAgIGludCB0aWQgPSBfX2dldF90aHJlYWQoKS0+dGlkOwotICAgIGlmIChfX3ByZWRpY3RfZmFsc2UoIXdyaXRlX3ByZWNvbmRpdGlvbihyd2xvY2ssIHRpZCkpKSB7Ci0gICAgICAgIHJldCA9IEVCVVNZOwotICAgIH0gZWxzZSB7Ci0gICAgICAgICsrcndsb2NrLT5udW1Mb2NrczsKLSAgICAgICAgcndsb2NrLT53cml0ZXJUaHJlYWRJZCA9IHRpZDsKLSAgICB9Ci0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJnJ3bG9jay0+bG9jayk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQogaW50IHB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrKHB0aHJlYWRfcndsb2NrX3QqIHJ3bG9jaywgY29uc3QgdGltZXNwZWMqIGFic190aW1lb3V0KSB7CiAgIHJldHVybiBfX3B0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrKHJ3bG9jaywgYWJzX3RpbWVvdXQpOwogfQogCi1pbnQgcHRocmVhZF9yd2xvY2tfdW5sb2NrKHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaykKLXsKLSAgICBpbnQgIHJldCA9IDA7CitpbnQgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrKHB0aHJlYWRfcndsb2NrX3QqIHJ3bG9jaykgeworICBpbnQgdGlkID0gX19nZXRfdGhyZWFkKCktPnRpZDsKKyAgaW50MzJfdCBjdXJfc3RhdGUgPSByd2xvY2stPnN0YXRlOworICBpZiAoKGN1cl9zdGF0ZSA9PSAwKSAmJgorICAgICAgX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCgmcndsb2NrLT5zdGF0ZSwgMCAvKiBjdXIgc3RhdGUgKi8sIC0xIC8qIG5ldyBzdGF0ZSAqLykpIHsgIC8vIEMrKzExIG1lbW9yeV9vcmRlcl9hY3F1aXJlCisgICAgcndsb2NrLT53cml0ZXJfdGhyZWFkX2lkID0gdGlkOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBFQlVTWTsKK30KIAotICAgIGlmIChyd2xvY2sgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKIAotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmcndsb2NrLT5sb2NrKTsKLQotICAgIC8qIFRoZSBsb2NrIG11c3QgYmUgaGVsZCAqLwotICAgIGlmIChyd2xvY2stPm51bUxvY2tzID09IDApIHsKLSAgICAgICAgcmV0ID0gRVBFUk07Ci0gICAgICAgIGdvdG8gRVhJVDsKK2ludCBwdGhyZWFkX3J3bG9ja191bmxvY2socHRocmVhZF9yd2xvY2tfdCogcndsb2NrKSB7CisgIGludCB0aWQgPSBfX2dldF90aHJlYWQoKS0+dGlkOworICBib29sIGRvbmUgPSBmYWxzZTsKKyAgZG8geworICAgIGludDMyX3QgY3VyX3N0YXRlID0gcndsb2NrLT5zdGF0ZTsKKyAgICBpZiAoY3VyX3N0YXRlID09IDApIHsKKyAgICAgIHJldHVybiBFUEVSTTsKICAgICB9CisgICAgaWYgKGN1cl9zdGF0ZSA9PSAtMSkgeworICAgICAgaWYgKHJ3bG9jay0+d3JpdGVyX3RocmVhZF9pZCAhPSB0aWQpIHsKKyAgICAgICAgcmV0dXJuIEVQRVJNOworICAgICAgfQorICAgICAgLy8gV2UncmUgbm8gbG9uZ2VyIHRoZSBvd25lci4KKyAgICAgIHJ3bG9jay0+d3JpdGVyX3RocmVhZF9pZCA9IDA7CisgICAgICAvLyBDaGFuZ2Ugc3RhdGUgZnJvbSAtMSB0byAwLgorICAgICAgLy8gV2UgdXNlIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAgdG8gYWNoaWV2ZSBzZXF1ZW50aWFsIGNvbnNpc3RlbmN5IG9mIHRoZSBzdGF0ZSBzdG9yZSBhbmQKKyAgICAgIC8vIHRoZSBmb2xsb3dpbmcgcGVuZGluZ1ggbG9hZHMuIEEgc2ltcGxlIHN0b3JlIHdpdGggbWVtb3J5X29yZGVyX3JlbGVhc2Ugc2VtYW50aWNzCisgICAgICAvLyBpcyBub3QgZW5vdWdoIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBwZW5kaW5nWCBsb2FkcyBhcmUgbm90IHJlb3JkZXJlZCBiZWZvcmUgdGhlCisgICAgICAvLyBzdG9yZSAod2hpY2ggbWF5IGxlYWQgdG8gYSBsb3N0IHdha2V1cCkuCisgICAgICBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwKCAmcndsb2NrLT5zdGF0ZSwgLTEgLyogY3VyIHN0YXRlKi8sIDAgLyogbmV3IHN0YXRlICovKTsgIC8vIEMrKzExIG1heWJlIG1lbW9yeV9vcmRlcl9zZXFfY3N0PwogCi0gICAgLyogSWYgaXQgaGFzIG9ubHkgcmVhZGVycywgd3JpdGVyVGhyZWFkSWQgaXMgMCAqLwotICAgIGlmIChyd2xvY2stPndyaXRlclRocmVhZElkID09IDApIHsKLSAgICAgICAgaWYgKC0tcndsb2NrLT5udW1Mb2NrcyA9PSAwKQotICAgICAgICAgICAgX3B0aHJlYWRfcndsb2NrX3B1bHNlKHJ3bG9jayk7Ci0gICAgfQotICAgIC8qIE90aGVyd2lzZSwgaXQgaGFzIG9ubHkgYSBzaW5nbGUgd3JpdGVyLCB3aGljaAotICAgICAqIG11c3QgYmUgb3Vyc2VsdmVzLgotICAgICAqLwotICAgIGVsc2UgewotICAgICAgICBpZiAocndsb2NrLT53cml0ZXJUaHJlYWRJZCAhPSBfX2dldF90aHJlYWQoKS0+dGlkKSB7Ci0gICAgICAgICAgICByZXQgPSBFUEVSTTsKLSAgICAgICAgICAgIGdvdG8gRVhJVDsKKyAgICAgIC8vIFdha2UgYW55IHdhaXRlcnMuCisgICAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKHJ3bG9jay0+cGVuZGluZ19yZWFkZXJzID4gMCB8fCByd2xvY2stPnBlbmRpbmdfd3JpdGVycyA+IDApKSB7CisgICAgICAgIF9fZnV0ZXhfd2FrZV9leCgmcndsb2NrLT5zdGF0ZSwgcndsb2NrX2lzX3NoYXJlZChyd2xvY2spLCBJTlRfTUFYKTsKKyAgICAgIH0KKyAgICAgIGRvbmUgPSB0cnVlOworICAgIH0gZWxzZSB7IC8vIGN1cl9zdGF0ZSA+IDAKKyAgICAgIC8vIFJlZHVjZSBzdGF0ZSBieSAxLgorICAgICAgLy8gU2VlIHRoZSBjb21tZW50IGFib3ZlIG9uIHdoeSB3ZSBuZWVkIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAuCisgICAgICBkb25lID0gX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCgmcndsb2NrLT5zdGF0ZSwgY3VyX3N0YXRlLCBjdXJfc3RhdGUgLSAxKTsgIC8vIEMrKzExIG1heWJlIG1lbW9yeV9vcmRlcl9zZXFfY3N0PworICAgICAgaWYgKGRvbmUgJiYgKGN1cl9zdGF0ZSAtIDEpID09IDApIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIG5vIG1vcmUgcmVhZGVycywgd2FrZSBhbnkgd2FpdGVycy4KKyAgICAgICAgaWYgKF9fcHJlZGljdF9mYWxzZShyd2xvY2stPnBlbmRpbmdfcmVhZGVycyA+IDAgfHwgcndsb2NrLT5wZW5kaW5nX3dyaXRlcnMgPiAwKSkgeworICAgICAgICAgIF9fZnV0ZXhfd2FrZV9leCgmcndsb2NrLT5zdGF0ZSwgcndsb2NrX2lzX3NoYXJlZChyd2xvY2spLCBJTlRfTUFYKTsKICAgICAgICAgfQotICAgICAgICBpZiAoLS1yd2xvY2stPm51bUxvY2tzID09IDApIHsKLSAgICAgICAgICAgIHJ3bG9jay0+d3JpdGVyVGhyZWFkSWQgPSAwOwotICAgICAgICAgICAgX3B0aHJlYWRfcndsb2NrX3B1bHNlKHJ3bG9jayk7Ci0gICAgICAgIH0KKyAgICAgIH0KICAgICB9Ci1FWElUOgotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZyd2xvY2stPmxvY2spOwotICAgIHJldHVybiByZXQ7CisgIH0gd2hpbGUgKCFkb25lKTsKKworICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfc2V0bmFtZV9ucC5jcHAgYi9saWJjL2Jpb25pYy9wdGhyZWFkX3NldG5hbWVfbnAuY3BwCmluZGV4IGUwZWNhY2UuLjFkZGY4MTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3B0aHJlYWRfc2V0bmFtZV9ucC5jcHAKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9zZXRuYW1lX25wLmNwcApAQCAtNDYsMTAgKzQ2LDYgQEAKIGludCBwdGhyZWFkX3NldG5hbWVfbnAocHRocmVhZF90IHQsIGNvbnN0IGNoYXIqIHRocmVhZF9uYW1lKSB7CiAgIEVycm5vUmVzdG9yZXIgZXJybm9fcmVzdG9yZXI7CiAKLSAgaWYgKHRocmVhZF9uYW1lID09IE5VTEwpIHsKLSAgICByZXR1cm4gRUlOVkFMOwotICB9Ci0KICAgc2l6ZV90IHRocmVhZF9uYW1lX2xlbiA9IHN0cmxlbih0aHJlYWRfbmFtZSk7CiAgIGlmICh0aHJlYWRfbmFtZV9sZW4gPj0gTUFYX1RBU0tfQ09NTV9MRU4pIHsKICAgICByZXR1cm4gRVJBTkdFOwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRyYWNlLmNwcCBiL2xpYmMvYmlvbmljL3B0cmFjZS5jcHAKaW5kZXggNTcxNWIwOS4uNTE1NmVjMiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcHRyYWNlLmNwcAorKysgYi9saWJjL2Jpb25pYy9wdHJhY2UuY3BwCkBAIC0yNiwyOCArMjYsMzAgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CiAKLWV4dGVybiAiQyIgbG9uZyBfX3B0cmFjZShpbnQgcmVxdWVzdCwgcGlkX3QgcGlkLCB2b2lkKiBhZGRyLCB2b2lkKiBkYXRhKTsKK2V4dGVybiAiQyIgbG9uZyBfX3B0cmFjZShpbnQgcmVxLCBwaWRfdCBwaWQsIHZvaWQqIGFkZHIsIHZvaWQqIGRhdGEpOwogCi1sb25nIHB0cmFjZShpbnQgcmVxdWVzdCwgcGlkX3QgcGlkLCB2b2lkKiBhZGRyLCB2b2lkKiBkYXRhKSB7Ci0gIHN3aXRjaCAocmVxdWVzdCkgewotICAgIGNhc2UgUFRSQUNFX1BFRUtVU1I6Ci0gICAgY2FzZSBQVFJBQ0VfUEVFS1RFWFQ6Ci0gICAgY2FzZSBQVFJBQ0VfUEVFS0RBVEE6Ci0gICAgICB7Ci0gICAgICBsb25nIHdvcmQ7Ci0gICAgICBsb25nIHJldCA9IF9fcHRyYWNlKHJlcXVlc3QsIHBpZCwgYWRkciwgJndvcmQpOwotICAgICAgaWYgKHJldCA9PSAwKSB7Ci0gICAgICAgIHJldHVybiB3b3JkOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gX19wdHJhY2UgYWxyZWFkeSBzZXQgZXJybm8gZm9yIHVzLgotICAgICAgICByZXR1cm4gLTE7Ci0gICAgICB9Ci0gICAgfQorbG9uZyBwdHJhY2UoaW50IHJlcSwgLi4uKSB7CisgIGJvb2wgaXNfcGVlayA9IChyZXEgPT0gUFRSQUNFX1BFRUtVU1IgfHwgcmVxID09IFBUUkFDRV9QRUVLVEVYVCB8fCByZXEgPT0gUFRSQUNFX1BFRUtEQVRBKTsKKyAgbG9uZyBwZWVrX3Jlc3VsdDsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gX19wdHJhY2UocmVxdWVzdCwgcGlkLCBhZGRyLCBkYXRhKTsKKyAgdmFfbGlzdCBhcmdzOworICB2YV9zdGFydChhcmdzLCByZXEpOworICBwaWRfdCBwaWQgPSB2YV9hcmcoYXJncywgcGlkX3QpOworICB2b2lkKiBhZGRyID0gdmFfYXJnKGFyZ3MsIHZvaWQqKTsKKyAgdm9pZCogZGF0YTsKKyAgaWYgKGlzX3BlZWspIHsKKyAgICBkYXRhID0gJnBlZWtfcmVzdWx0OworICB9IGVsc2UgeworICAgIGRhdGEgPSB2YV9hcmcoYXJncywgdm9pZCopOwogICB9CisgIHZhX2VuZChhcmdzKTsKKworICBsb25nIHJlc3VsdCA9IF9fcHRyYWNlKHJlcSwgcGlkLCBhZGRyLCBkYXRhKTsKKyAgaWYgKGlzX3BlZWsgJiYgcmVzdWx0ID09IDApIHsKKyAgICByZXR1cm4gcGVla19yZXN1bHQ7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0c25hbWUuYyBiL2xpYmMvYmlvbmljL3B0c25hbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkNWQzMC4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9wdHNuYW1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx0ZXJtaW9zLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0KLS8qIG5vdCB0aHJlYWQtc2FmZSAqLwotY2hhciogIHB0c25hbWUoIGludCBmZCApCi17Ci0gICAgdW5zaWduZWQgaW50ICBwdHlfbnVtOwotICAgIHN0YXRpYyBjaGFyICAgYnVmZls2NF07Ci0KLSAgICBpZiAoIGlvY3RsKCBmZCwgVElPQ0dQVE4sICZwdHlfbnVtICkgIT0gMCApCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgc25wcmludGYoIGJ1ZmYsIHNpemVvZihidWZmKSwgIi9kZXYvcHRzLyV1IiwgcHR5X251bSApOwotICAgIHJldHVybiBidWZmOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRzbmFtZV9yLmMgYi9saWJjL2Jpb25pYy9wdHNuYW1lX3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZhNGMzZC4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9wdHNuYW1lX3IuYworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHRlcm1pb3MuaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1pbnQgICAgcHRzbmFtZV9yKCBpbnQgIGZkLCBjaGFyKiAgYnVmLCBzaXplX3QgIGJ1ZmxlbikKLXsKLSAgICB1bnNpZ25lZCBpbnQgIHB0eV9udW07Ci0gICAgY2hhciAgICAgICAgICBidWZmWzY0XTsKLSAgICBpbnQgICAgICAgICAgIGxlbjsKLQotICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGlmICggaW9jdGwoIGZkLCBUSU9DR1BUTiwgJnB0eV9udW0gKSAhPSAwICkgewotICAgICAgICBlcnJubyA9IEVOT1RUWTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGxlbiA9IHNucHJpbnRmKCBidWZmLCBzaXplb2YoYnVmZiksICIvZGV2L3B0cy8ldSIsIHB0eV9udW0gKTsKLSAgICBpZiAobGVuKzEgPiAoaW50KWJ1ZmxlbikgewotICAgICAgICBlcnJubyA9IEVSQU5HRTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBtZW1jcHkoIGJ1ZiwgYnVmZiwgbGVuKzEgKTsKLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0eS5jcHAgYi9saWJjL2Jpb25pYy9wdHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NWUwMDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9wdHkuY3BwCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2ludCBnZXRwdCh2b2lkKSB7CisgIHJldHVybiBwb3NpeF9vcGVucHQoT19SRFdSfE9fTk9DVFRZKTsKK30KKworaW50IGdyYW50cHQoaW50KSB7CisgIHJldHVybiAwOworfQorCitpbnQgcG9zaXhfb3BlbnB0KGludCBmbGFncykgeworICByZXR1cm4gb3BlbigiL2Rldi9wdG14IiwgZmxhZ3MpOworfQorCitjaGFyKiBwdHNuYW1lKGludCBmZCkgeworICBzdGF0aWMgY2hhciBidWZbNjRdOworICByZXR1cm4gcHRzbmFtZV9yKGZkLCBidWYsIHNpemVvZihidWYpKSA9PSAwID8gYnVmIDogTlVMTDsKK30KKworaW50IHB0c25hbWVfcihpbnQgZmQsIGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbikgeworICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gZXJybm87CisgIH0KKworICB1bnNpZ25lZCBpbnQgcHR5X251bTsKKyAgaWYgKGlvY3RsKGZkLCBUSU9DR1BUTiwgJnB0eV9udW0pICE9IDApIHsKKyAgICBlcnJubyA9IEVOT1RUWTsKKyAgICByZXR1cm4gZXJybm87CisgIH0KKworICBpZiAoc25wcmludGYoYnVmLCBsZW4sICIvZGV2L3B0cy8ldSIsIHB0eV9udW0pID49IHN0YXRpY19jYXN0PGludD4obGVuKSkgeworICAgIGVycm5vID0gRVJBTkdFOworICAgIHJldHVybiBlcnJubzsKKyAgfQorCisgIHJldHVybiAwOworfQorCitjaGFyKiB0dHluYW1lKGludCBmZCkgeworICBzdGF0aWMgY2hhciBidWZbNjRdOworICByZXR1cm4gdHR5bmFtZV9yKGZkLCBidWYsIHNpemVvZihidWYpKSA9PSAwID8gYnVmIDogTlVMTDsKK30KKworaW50IHR0eW5hbWVfcihpbnQgZmQsIGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbikgeworICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gZXJybm87CisgIH0KKworICBpZiAoIWlzYXR0eShmZCkpIHsKKyAgICByZXR1cm4gZXJybm87CisgIH0KKworICBjaGFyIHBhdGhbNjRdOworICBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIvcHJvYy9zZWxmL2ZkLyVkIiwgZmQpOworCisgIHNzaXplX3QgY291bnQgPSByZWFkbGluayhwYXRoLCBidWYsIGxlbik7CisgIGlmIChjb3VudCA9PSAtMSkgeworICAgIHJldHVybiBlcnJubzsKKyAgfQorICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb3VudCkgPT0gbGVuKSB7CisgICAgZXJybm8gPSBFUkFOR0U7CisgICAgcmV0dXJuIGVycm5vOworICB9CisgIGJ1Zltjb3VudF0gPSAnXDAnOworICByZXR1cm4gMDsKK30KKworaW50IHVubG9ja3B0KGludCBmZCkgeworICBpbnQgdW5sb2NrID0gMDsKKyAgcmV0dXJuIGlvY3RsKGZkLCBUSU9DU1BUTENLLCAmdW5sb2NrKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3JhbmQuY3BwIGIvbGliYy9iaW9uaWMvcmFuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA3NGYyZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3JhbmQuY3BwCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8vIFRoZSBCU0QgcmFuZC9zcmFuZCBpcyB2ZXJ5IHdlYWsuIGdsaWJjIGp1c3QgdXNlcyByYW5kb20vc3JhbmRvbSBpbnN0ZWFkLgorLy8gU2luY2Ugd2UncmUgbGlrZWx5IHRvIHJ1biBjb2RlIGludGVuZGVkIGZvciBnbGliYywgYW5kIFBPU0lYIGRvZXNuJ3Qgc2VlbQorLy8gdG8gZGlzYWxsb3cgdGhpcywgd2UgZ28gdGhhdCByb3V0ZSB0b28uCisKK2ludCByYW5kKCkgeworICByZXR1cm4gcmFuZG9tKCk7Cit9CisKK3ZvaWQgc3JhbmQodW5zaWduZWQgaW50IHNlZWQpIHsKKyAgcmV0dXJuIHNyYW5kb20oc2VlZCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9yZWJvb3QuYyBiL2xpYmMvYmlvbmljL3JlYm9vdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmU4Y2RjLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3JlYm9vdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy9yZWJvb3QuaD4KLQotaW50IHJlYm9vdCAoaW50ICBtb2RlKSAKLXsKLSAgICByZXR1cm4gX19yZWJvb3QoIExJTlVYX1JFQk9PVF9NQUdJQzEsIExJTlVYX1JFQk9PVF9NQUdJQzIsIG1vZGUsIE5VTEwgKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3JlYm9vdC5jcHAgYi9saWJjL2Jpb25pYy9yZWJvb3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZjQ0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9yZWJvb3QuY3BwCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9yZWJvb3QuaD4KKworZXh0ZXJuICJDIiBpbnQgX19yZWJvb3QoaW50LCBpbnQsIGludCwgdm9pZCopOworCitpbnQgcmVib290KGludCBtb2RlKSB7CisgIHJldHVybiBfX3JlYm9vdChMSU5VWF9SRUJPT1RfTUFHSUMxLCBMSU5VWF9SRUJPT1RfTUFHSUMyLCBtb2RlLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3JlY3YuYyBiL2xpYmMvYmlvbmljL3JlY3YuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc5ZDdmYS4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9yZWN2LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotCi1zc2l6ZV90IHJlY3YoaW50IHNvY2tldCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0gICAgcmV0dXJuIHJlY3Zmcm9tKHNvY2tldCwgYnVmLCBidWZsZW4sIGZsYWdzLCBOVUxMLCAwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3JlY3YuY3BwIGIvbGliYy9iaW9uaWMvcmVjdi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYxY2Q0NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3JlY3YuY3BwCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI3VuZGVmIF9GT1JUSUZZX1NPVVJDRQorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworc3NpemVfdCByZWN2KGludCBzb2NrZXQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKSB7CisgIHJldHVybiByZWN2ZnJvbShzb2NrZXQsIGJ1ZiwgbGVuLCBmbGFncywgTlVMTCwgMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zYnJrLmNwcCBiL2xpYmMvYmlvbmljL3NicmsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzliNTM0Li4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3NicmsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotLyogU2hhcmVkIHdpdGggYnJrLmMuICovCi1leHRlcm4gIkMiIHsKLSAgdm9pZCogX19iaW9uaWNfYnJrOyAvLyBUT0RPOiBzaG91bGQgYmUgX19MSUJDX0hJRERFTl9fIGJ1dCBhY2NpZGVudGFsbHkgZXhwb3J0ZWQgYnkgTkRLIDotKAotfQotCi12b2lkKiBzYnJrKHB0cmRpZmZfdCBpbmNyZW1lbnQpIHsKLSAgaWYgKF9fYmlvbmljX2JyayA9PSBOVUxMKSB7Ci0gICAgX19iaW9uaWNfYnJrID0gX19icmsoTlVMTCk7Ci0gIH0KLQotICB2b2lkKiBvcmlnaW5hbF9icmsgPSBfX2Jpb25pY19icms7Ci0gIHZvaWQqIGRlc2lyZWRfYnJrID0gKHZvaWQqKSAoKHVpbnRwdHJfdCkgb3JpZ2luYWxfYnJrICsgaW5jcmVtZW50KTsKLQotICB2b2lkKiBuZXdfYnJrID0gX19icmsoZGVzaXJlZF9icmspOwotICBpZiAobmV3X2JyayA9PSAodm9pZCopIC0xKSB7Ci0gICAgcmV0dXJuIG5ld19icms7Ci0gIH0gZWxzZSBpZiAobmV3X2JyayA8IGRlc2lyZWRfYnJrKSB7Ci0gICAgZXJybm8gPSBFTk9NRU07Ci0gICAgcmV0dXJuICh2b2lkKikgLTE7Ci0gIH0KLQotICBfX2Jpb25pY19icmsgPSBuZXdfYnJrOwotICByZXR1cm4gb3JpZ2luYWxfYnJrOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc2NhbmRpci5jcHAgYi9saWJjL2Jpb25pYy9zY2FuZGlyLmNwcAppbmRleCBkZDIyYjIyLi45ZjczMWFiIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9zY2FuZGlyLmNwcAorKysgYi9saWJjL2Jpb25pYy9zY2FuZGlyLmNwcApAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19tYWNyb3MuaCIKICNpbmNsdWRlICJwcml2YXRlL1Njb3BlZFJlYWRkaXIuaCIKIAogLy8gQSBzbWFydCBwb2ludGVyIHRvIHRoZSBzY2FuZGlyIGRpcmVudCoqLgpAQCAtODQsOSArODUsNyBAQAogICAgIHJldHVybiBjb3B5OwogICB9CiAKLSAgLy8gRGlzYWxsb3cgY29weSBhbmQgYXNzaWdubWVudC4KLSAgU2NhbmRpclJlc3VsdChjb25zdCBTY2FuZGlyUmVzdWx0Jik7Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFNjYW5kaXJSZXN1bHQmKTsKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNjYW5kaXJSZXN1bHQpOwogfTsKIAogaW50IHNjYW5kaXIoY29uc3QgY2hhciogZGlybmFtZSwgZGlyZW50KioqIG5hbWVfbGlzdCwKQEAgLTExMywzICsxMTIsNCBAQAogICAqbmFtZV9saXN0ID0gbmFtZXMucmVsZWFzZSgpOwogICByZXR1cm4gc2l6ZTsKIH0KK19fc3Ryb25nX2FsaWFzKHNjYW5kaXI2NCwgc2NhbmRpcik7CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zY2hlZF9jcHVjb3VudC5jIGIvbGliYy9iaW9uaWMvc2NoZWRfY3B1Y291bnQuYwppbmRleCA5NDU4ZGM4Li4yZWExZDNmIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9zY2hlZF9jcHVjb3VudC5jCisrKyBiL2xpYmMvYmlvbmljL3NjaGVkX2NwdWNvdW50LmMKQEAgLTI4LDEzICsyOCwxNCBAQAogI2RlZmluZSBfR05VX1NPVVJDRSAxCiAjaW5jbHVkZSA8c2NoZWQuaD4KIAotaW50IF9fc2NoZWRfY3B1Y291bnQoc2l6ZV90IHNldHNpemUsIGNwdV9zZXRfdCogc2V0KQotewotICAgIGludCBubiA9IDAsIG5uX21heCA9IHNldHNpemUgLyBzaXplb2YoX19DUFVfQklUVFlQRSk7Ci0gICAgaW50IGNvdW50ID0gMDsKK2ludCBfX3NjaGVkX2NwdWNvdW50KHNpemVfdCBzZXRzaXplLCBjcHVfc2V0X3QqIHNldCkgeworICBpbnQgbm4gPSAwOworICBpbnQgbm5fbWF4ID0gc2V0c2l6ZSAvIHNpemVvZihfX0NQVV9CSVRUWVBFKTsKKyAgaW50IGNvdW50ID0gMDsKIAotICAgIGZvciAoIDsgbm4gPCBubl9tYXg7IG5uKysgKQotICAgICAgICBjb3VudCArPSBfX2J1aWx0aW5fcG9wY291bnQoc2V0LT5fX2JpdHNbbm5dKTsKKyAgZm9yICggOyBubiA8IG5uX21heDsgbm4rKyApIHsKKyAgICBjb3VudCArPSBfX2J1aWx0aW5fcG9wY291bnRsKHNldC0+X19iaXRzW25uXSk7CisgIH0KIAotICAgIHJldHVybiBjb3VudDsKKyAgcmV0dXJuIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc2VtYXBob3JlLmMgYi9saWJjL2Jpb25pYy9zZW1hcGhvcmUuYwppbmRleCAyOGZjYjFiLi4xZmEwMTllIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9zZW1hcGhvcmUuYworKysgYi9saWJjL2Jpb25pYy9zZW1hcGhvcmUuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDxzeXMvYXRvbWljcy5oPgogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KIApAQCAtMTI3LDExICsxMjYsOCBAQAogfQogCiAKLXNlbV90ICpzZW1fb3Blbihjb25zdCBjaGFyICpuYW1lLCBpbnQgb2ZsYWcsIC4uLikKK3NlbV90ICpzZW1fb3Blbihjb25zdCBjaGFyICpuYW1lIF9fdW51c2VkLCBpbnQgb2ZsYWcgX191bnVzZWQsIC4uLikKIHsKLSAgICBuYW1lPW5hbWU7Ci0gICAgb2ZsYWc9b2ZsYWc7Ci0KICAgICBlcnJubyA9IEVOT1NZUzsKICAgICByZXR1cm4gU0VNX0ZBSUxFRDsKIH0KQEAgLTE0OCw3ICsxNDQsNyBAQAogfQogCiAKLWludCBzZW1fdW5saW5rKGNvbnN0IGNoYXIgKiBuYW1lKQoraW50IHNlbV91bmxpbmsoY29uc3QgY2hhciogbmFtZSBfX3VudXNlZCkKIHsKICAgICBlcnJubyA9IEVOT1NZUzsKICAgICByZXR1cm4gLTE7CkBAIC0yNjcsNyArMjYzLDYgQEAKIAogaW50IHNlbV90aW1lZHdhaXQoc2VtX3QgKnNlbSwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICphYnNfdGltZW91dCkKIHsKLSAgICBpbnQgIHJldDsKICAgICB1bnNpZ25lZCBpbnQgc2hhcmVkOwogCiAgICAgaWYgKHNlbSA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zZW5kLmMgYi9saWJjL2Jpb25pYy9zZW5kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5NzhmOTguLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvc2VuZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLQotc3NpemVfdCBzZW5kKGludCBzb2NrZXQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQotewotICAgIHJldHVybiAoc3NpemVfdCkgc2VuZHRvKHNvY2tldCwgYnVmLCBidWZsZW4sIGZsYWdzLCBOVUxMLCAwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NlbmQuY3BwIGIvbGliYy9iaW9uaWMvc2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU1ZDQ1NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3NlbmQuY3BwCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworc3NpemVfdCBzZW5kKGludCBzb2NrZXQsIGNvbnN0IHZvaWQqIGJ1Ziwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKSB7CisgIHJldHVybiBzZW5kdG8oc29ja2V0LCBidWYsIGxlbiwgZmxhZ3MsIE5VTEwsIDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc2V0bG9jYWxlLmNwcCBiL2xpYmMvYmlvbmljL3NldGxvY2FsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZmRjOWUuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvc2V0bG9jYWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGxvY2FsZS5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0vLyBzZXRsb2NhbGUoMykgYWx3YXlzIGZhaWxzIG9uIGJpb25pYy4KLWNoYXIqIHNldGxvY2FsZShpbnQgLypjYXRlZ29yeSovLCBjaGFyIGNvbnN0KiAvKmxvY2FsZSovKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zZXRwZ3JwLmMgYi9saWJjL2Jpb25pYy9zZXRwZ3JwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZmY4MjIuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvc2V0cGdycC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi1pbnQgc2V0cGdycCh2b2lkKQotewotICByZXR1cm4gc2V0cGdpZCgwLDApOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc2V0cGdycC5jcHAgYi9saWJjL2Jpb25pYy9zZXRwZ3JwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzM0Y2QxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc2V0cGdycC5jcHAKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2ludCBzZXRwZ3JwKCkgeworICByZXR1cm4gc2V0cGdpZCgwLCAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NpZ2FjdGlvbi5jcHAgYi9saWJjL2Jpb25pYy9zaWdhY3Rpb24uY3BwCmluZGV4IDY0NjhiMmQuLjIyNWE4MjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3NpZ2FjdGlvbi5jcHAKKysrIGIvbGliYy9iaW9uaWMvc2lnYWN0aW9uLmNwcApAQCAtNDIsMTIgKzQyLDE0IEBACiAgICAga2VybmVsX25ld19hY3Rpb24uc2FfZmxhZ3MgPSBiaW9uaWNfbmV3X2FjdGlvbi0+c2FfZmxhZ3M7CiAgICAga2VybmVsX25ld19hY3Rpb24uc2FfaGFuZGxlciA9IGJpb25pY19uZXdfYWN0aW9uLT5zYV9oYW5kbGVyOwogICAgIGtlcm5lbF9uZXdfYWN0aW9uLnNhX21hc2sgPSBiaW9uaWNfbmV3X2FjdGlvbi0+c2FfbWFzazsKKyNpZmRlZiBTQV9SRVNUT1JFUgogICAgIGtlcm5lbF9uZXdfYWN0aW9uLnNhX3Jlc3RvcmVyID0gYmlvbmljX25ld19hY3Rpb24tPnNhX3Jlc3RvcmVyOwogCiAgICAgaWYgKCEoa2VybmVsX25ld19hY3Rpb24uc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikpIHsKICAgICAgIGtlcm5lbF9uZXdfYWN0aW9uLnNhX2ZsYWdzIHw9IFNBX1JFU1RPUkVSOwogICAgICAga2VybmVsX25ld19hY3Rpb24uc2FfcmVzdG9yZXIgPSAmX19ydF9zaWdyZXR1cm47CiAgICAgfQorI2VuZGlmCiAgIH0KIAogICBfX2tlcm5lbF9zaWdhY3Rpb24ga2VybmVsX29sZF9hY3Rpb247CkBAIC02MCwxMSArNjIsMTMgQEAKICAgICBiaW9uaWNfb2xkX2FjdGlvbi0+c2FfZmxhZ3MgPSBrZXJuZWxfb2xkX2FjdGlvbi5zYV9mbGFnczsKICAgICBiaW9uaWNfb2xkX2FjdGlvbi0+c2FfaGFuZGxlciA9IGtlcm5lbF9vbGRfYWN0aW9uLnNhX2hhbmRsZXI7CiAgICAgYmlvbmljX29sZF9hY3Rpb24tPnNhX21hc2sgPSBrZXJuZWxfb2xkX2FjdGlvbi5zYV9tYXNrOworI2lmZGVmIFNBX1JFU1RPUkVSCiAgICAgYmlvbmljX29sZF9hY3Rpb24tPnNhX3Jlc3RvcmVyID0ga2VybmVsX29sZF9hY3Rpb24uc2FfcmVzdG9yZXI7CiAKICAgICBpZiAoYmlvbmljX29sZF9hY3Rpb24tPnNhX3Jlc3RvcmVyID09ICZfX3J0X3NpZ3JldHVybikgewogICAgICAgYmlvbmljX29sZF9hY3Rpb24tPnNhX2ZsYWdzICY9IH5TQV9SRVNUT1JFUjsKICAgICB9CisjZW5kaWYKICAgfQogCiAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zaWdsaXN0LmMgYi9saWJjL2Jpb25pYy9zaWdsaXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYzMzNzcuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvc2lnbGlzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHNpZ25hbC5oPgotCi1jb25zdCBjaGFyICogY29uc3Qgc3lzX3NpZ2xpc3RbTlNJR10gPSB7Ci0jZGVmaW5lICBfX0JJT05JQ19TSUdERUYoeCx5LHopICAgWyBTSUcjI3ggXSA9IHosCi0jaW5jbHVkZSA8c3lzL19zaWdkZWZzLmg+Ci19OwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc2lnbmFsLmNwcCBiL2xpYmMvYmlvbmljL3NpZ25hbC5jcHAKaW5kZXggNDhiMmU3Mi4uNjZkNzViZCAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvc2lnbmFsLmNwcAorKysgYi9saWJjL2Jpb25pYy9zaWduYWwuY3BwCkBAIC0yOCw3ICsyOCwxMiBAQAogCiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAKLXN0YXRpYyBzaWdoYW5kbGVyX3QgX3NpZ25hbChpbnQgc2lnbnVtLCBzaWdoYW5kbGVyX3QgaGFuZGxlciwgaW50IGZsYWdzKSB7CisjaWZkZWYgX19MUDY0X18KK3N0YXRpYworI2Vsc2UKK19fTElCQ19ISURERU5fXworI2VuZGlmCitzaWdoYW5kbGVyX3QgX3NpZ25hbChpbnQgc2lnbnVtLCBzaWdoYW5kbGVyX3QgaGFuZGxlciwgaW50IGZsYWdzKSB7CiAgIHN0cnVjdCBzaWdhY3Rpb24gc2E7CiAgIHNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKICAgc2Euc2FfaGFuZGxlciA9IGhhbmRsZXI7CkBAIC00MSwxNCArNDYsNiBAQAogICByZXR1cm4gKHNpZ2hhbmRsZXJfdCkgc2Euc2FfaGFuZGxlcjsKIH0KIAotc2lnaGFuZGxlcl90IGJzZF9zaWduYWwoaW50IHNpZ251bSwgc2lnaGFuZGxlcl90IGhhbmRsZXIpIHsKLSAgcmV0dXJuIF9zaWduYWwoc2lnbnVtLCBoYW5kbGVyLCBTQV9SRVNUQVJUKTsKLX0KLQotc2lnaGFuZGxlcl90IHN5c3Zfc2lnbmFsKGludCBzaWdudW0sIHNpZ2hhbmRsZXJfdCBoYW5kbGVyKSB7Ci0gIHJldHVybiBfc2lnbmFsKHNpZ251bSwgaGFuZGxlciwgU0FfUkVTRVRIQU5EKTsKLX0KLQogc2lnaGFuZGxlcl90IHNpZ25hbChpbnQgc2lnbnVtLCBzaWdoYW5kbGVyX3QgaGFuZGxlcikgewotICByZXR1cm4gYnNkX3NpZ25hbChzaWdudW0sIGhhbmRsZXIpOworICByZXR1cm4gX3NpZ25hbChzaWdudW0sIGhhbmRsZXIsIFNBX1JFU1RBUlQpOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc2lnbmFsZmQuY3BwIGIvbGliYy9iaW9uaWMvc2lnbmFsZmQuY3BwCmluZGV4IDM2ZWY4MWQuLjYzZTFkYjQgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3NpZ25hbGZkLmNwcAorKysgYi9saWJjL2Jpb25pYy9zaWduYWxmZC5jcHAKQEAgLTMwLDkgKzMwLDkgQEAKIAogI2luY2x1ZGUgInByaXZhdGUva2VybmVsX3NpZ3NldF90LmgiCiAKLWV4dGVybiAiQyIgaW50IHNpZ25hbGZkNChpbnQgZmQsIGtlcm5lbF9zaWdzZXRfdCogbWFzaywgc2l6ZV90IHNpemVtYXNrLCBpbnQgZmxhZ3MpOworZXh0ZXJuICJDIiBpbnQgX19zaWduYWxmZDQoaW50IGZkLCBrZXJuZWxfc2lnc2V0X3QqIG1hc2ssIHNpemVfdCBzaXplbWFzaywgaW50IGZsYWdzKTsKIAogaW50IHNpZ25hbGZkKGludCBmZCwgY29uc3Qgc2lnc2V0X3QqIG1hc2ssIGludCBmbGFncykgewogICBrZXJuZWxfc2lnc2V0X3QgaW5fc2V0KG1hc2spOwotICByZXR1cm4gc2lnbmFsZmQ0KGZkLCAmaW5fc2V0LCBzaXplb2YoaW5fc2V0KSwgZmxhZ3MpOworICByZXR1cm4gX19zaWduYWxmZDQoZmQsICZpbl9zZXQsIHNpemVvZihpbl9zZXQpLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zaWduYW1lLmMgYi9saWJjL2Jpb25pYy9zaWduYW1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MTFlNDQuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvc2lnbmFtZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHNpZ25hbC5oPgotCi1jb25zdCBjaGFyICogY29uc3Qgc3lzX3NpZ25hbWVbTlNJR10gPSB7Ci0jZGVmaW5lICBfX0JJT05JQ19TSUdERUYoeCx5LHopICAgWyBTSUcjI3ggXSA9ICN4LAotI2luY2x1ZGUgPHN5cy9fc2lnZGVmcy5oPgotfTsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NvY2tldC5jcHAgYi9saWJjL2Jpb25pYy9zb2NrZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmOWUxNDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zb2NrZXQuY3BwCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAicHJpdmF0ZS9OZXRkQ2xpZW50RGlzcGF0Y2guaCIKKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworaW50IHNvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKSB7CisgICAgcmV0dXJuIF9fbmV0ZENsaWVudERpc3BhdGNoLnNvY2tldChkb21haW4sIHR5cGUsIHByb3RvY29sKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0YXQuY3BwIGIvbGliYy9iaW9uaWMvc3RhdC5jcHAKaW5kZXggNjIzODdjNS4uZTcxZDlkNCAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvc3RhdC5jcHAKKysrIGIvbGliYy9iaW9uaWMvc3RhdC5jcHAKQEAgLTM0LDMgKzM0LDQgQEAKIGludCBzdGF0KGNvbnN0IGNoYXIqIHBhdGgsIHN0cnVjdCBzdGF0KiBzYikgewogICByZXR1cm4gZnN0YXRhdChBVF9GRENXRCwgcGF0aCwgc2IsIDApOwogfQorX19zdHJvbmdfYWxpYXMoc3RhdDY0LCBzdGF0KTsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0YXR2ZnMuY3BwIGIvbGliYy9iaW9uaWMvc3RhdHZmcy5jcHAKaW5kZXggMzljOTMzMi4uZjFlMjgzMyAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvc3RhdHZmcy5jcHAKKysrIGIvbGliYy9iaW9uaWMvc3RhdHZmcy5jcHAKQEAgLTUzLDYgKzUzLDcgQEAKICAgX19zdGF0ZnNfdG9fc3RhdHZmcyh0bXAsIHJlc3VsdCk7CiAgIHJldHVybiAwOwogfQorX19zdHJvbmdfYWxpYXMoc3RhdHZmczY0LCBzdGF0dmZzKTsKIAogaW50IGZzdGF0dmZzKGludCBmZCwgc3RydWN0IHN0YXR2ZnMqIHJlc3VsdCkgewogICBzdHJ1Y3Qgc3RhdGZzIHRtcDsKQEAgLTYzLDMgKzY0LDQgQEAKICAgX19zdGF0ZnNfdG9fc3RhdHZmcyh0bXAsIHJlc3VsdCk7CiAgIHJldHVybiAwOwogfQorX19zdHJvbmdfYWxpYXMoZnN0YXR2ZnM2NCwgZnN0YXR2ZnMpOwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3RyY2hyLmNwcCBiL2xpYmMvYmlvbmljL3N0cmNoci5jcHAKaW5kZXggMDI5ZmJkOS4uNWJkM2YxOSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvc3RyY2hyLmNwcAorKysgYi9saWJjL2Jpb25pYy9zdHJjaHIuY3BwCkBAIC0zMCw2ICszMCw2IEBACiAjdW5kZWYgX0ZPUlRJRllfU09VUkNFCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLWV4dGVybiAiQyIgY2hhciogc3RyY2hyKGNvbnN0IGNoYXIqIHAsIGludCBjaCkgeworY2hhciogc3RyY2hyKGNvbnN0IGNoYXIqIHAsIGludCBjaCkgewogICByZXR1cm4gX19zdHJjaHJfY2hrKHAsIGNoLCBfX0JJT05JQ19GT1JUSUZZX1VOS05PV05fU0laRSk7CiB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zdHJjb2xsX2wuY3BwIGIvbGliYy9iaW9uaWMvc3RyY29sbF9sLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDdjMjhiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc3RyY29sbF9sLmNwcApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworaW50IHN0cmNvbGxfbChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGxvY2FsZV90KSB7CisgIHJldHVybiBzdHJjb2xsKHMxLCBzMik7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zdHJlcnJvcl9yLmNwcCBiL2xpYmMvYmlvbmljL3N0cmVycm9yX3IuY3BwCmluZGV4IDgxMTIwZWMuLjFlNTdjYzAgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3N0cmVycm9yX3IuY3BwCisrKyBiL2xpYmMvYmlvbmljL3N0cmVycm9yX3IuY3BwCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjaW5jbHVkZSAicHJpdmF0ZS9FcnJub1Jlc3RvcmVyLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKIAogc3RydWN0IFBhaXIgewogICBpbnQgY29kZTsKQEAgLTM0LDcgKzM1LDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IFBhaXIgX3N5c19zaWduYWxfc3RyaW5nc1tdID0gewotI2RlZmluZSAgX19CSU9OSUNfU0lHREVGKHgseSx6KSAgeyB5LCB6IH0sCisjZGVmaW5lICBfX0JJT05JQ19TSUdERUYoc2lnbmFsX251bWJlciwgc2lnbmFsX2Rlc2NyaXB0aW9uKSAgeyBzaWduYWxfbnVtYmVyLCBzaWduYWxfZGVzY3JpcHRpb24gfSwKICNpbmNsdWRlIDxzeXMvX3NpZ2RlZnMuaD4KICAgeyAwLCBOVUxMIH0KIH07CkBAIC00OSw5ICs1MCw5IEBACiAKICAgY29uc3QgY2hhciogZXJyb3JfbmFtZSA9IF9fc3RyZXJyb3JfbG9va3VwKGVycm9yX251bWJlcik7CiAgIGlmIChlcnJvcl9uYW1lICE9IE5VTEwpIHsKLSAgICBsZW5ndGggPSBzbnByaW50ZihidWYsIGJ1Zl9sZW4sICIlcyIsIGVycm9yX25hbWUpOworICAgIGxlbmd0aCA9IHN0cmxjcHkoYnVmLCBlcnJvcl9uYW1lLCBidWZfbGVuKTsKICAgfSBlbHNlIHsKLSAgICBsZW5ndGggPSBzbnByaW50ZihidWYsIGJ1Zl9sZW4sICJVbmtub3duIGVycm9yICVkIiwgZXJyb3JfbnVtYmVyKTsKKyAgICBsZW5ndGggPSBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIGJ1Zl9sZW4sICJVbmtub3duIGVycm9yICVkIiwgZXJyb3JfbnVtYmVyKTsKICAgfQogICBpZiAobGVuZ3RoID49IGJ1Zl9sZW4pIHsKICAgICBlcnJub19yZXN0b3Jlci5vdmVycmlkZShFUkFOR0UpOwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3RyZnRpbWVfbC5jcHAgYi9saWJjL2Jpb25pYy9zdHJmdGltZV9sLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjAxZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc3RyZnRpbWVfbC5jcHAKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8dGltZS5oPgorCitzaXplX3Qgc3RyZnRpbWVfbChjaGFyICpzLCBzaXplX3QgbWF4LCBjb25zdCBjaGFyICpmb3JtYXQsIGNvbnN0IHN0cnVjdCB0bSAqdG0sCisgICAgICAgICAgICAgICAgICBsb2NhbGVfdCkgeworICByZXR1cm4gc3RyZnRpbWUocywgbWF4LCBmb3JtYXQsIHRtKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0cm5kdXAuYyBiL2xpYmMvYmlvbmljL3N0cm5kdXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRjYTc5Yy4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9zdHJuZHVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLWNoYXIqICBzdHJuZHVwKGNvbnN0IGNoYXIqICBzLCBzaXplX3QgbikKLXsKLSAgICBzaXplX3QgIHNsZW4gPSAoc2l6ZV90KXN0cmxlbihzKTsKLSAgICBjaGFyKiAgIGNvcHk7Ci0KLSAgICBpZiAoc2xlbiA8IG4pCi0gICAgICAgIG4gPSBzbGVuOwotICAgIGNvcHkgPSBtYWxsb2MobisxKTsKLSAgICBpZiAoY29weSkgewotICAgICAgICBtZW1jcHkoY29weSwgcywgbik7Ci0gICAgICAgIGNvcHlbbl0gPSAwOwotICAgIH0KLSAgICByZXR1cm4gY29weTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0cm50b2ltYXguYyBiL2xpYmMvYmlvbmljL3N0cm50b2ltYXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYzY2Q5YS4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9zdHJudG9pbWF4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLQotaW50bWF4X3Qgc3RybnRvaW1heChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSwgc2l6ZV90IG4pCi17Ci0gIHJldHVybiAoaW50bWF4X3QpIHN0cm50b3VtYXgobnB0ciwgZW5kcHRyLCBiYXNlLCBuKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0cm50b3VtYXguYyBiL2xpYmMvYmlvbmljL3N0cm50b3VtYXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUwZDcxOC4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9zdHJudG91bWF4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLQotc3RhdGljIGlubGluZSBpbnQgZGlnaXR2YWwoaW50IGNoKQotewotICAgIHVuc2lnbmVkICBkOwotCi0gICAgZCA9ICh1bnNpZ25lZCkoY2ggLSAnMCcpOwotICAgIGlmIChkIDwgMTApIHJldHVybiAoaW50KWQ7Ci0KLSAgICBkID0gKHVuc2lnbmVkKShjaCAtICdhJyk7Ci0gICAgaWYgKGQgPCA2KSByZXR1cm4gKGludCkoZCsxMCk7Ci0KLSAgICBkID0gKHVuc2lnbmVkKShjaCAtICdBJyk7Ci0gICAgaWYgKGQgPCA2KSByZXR1cm4gKGludCkoZCsxMCk7Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXVpbnRtYXhfdAotc3RybnRvdW1heChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSwgc2l6ZV90IG4pCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciogIHAgICA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopbnB0cjsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAgZW5kID0gcCArIG47Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgIG1pbnVzID0gMDsKLSAgICB1aW50bWF4X3QgICAgICAgICAgICAgdiA9IDA7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgIGQ7Ci0KLSAgICAvKiBza2lwIGxlYWRpbmcgc3BhY2UgKi8KLSAgICB3aGlsZSAocCA8IGVuZCAmJiBpc3NwYWNlKCpwKSkKLSAgICAgICAgcCsrOwotCi0gICAgLyogU2luZ2xlIG9wdGlvbmFsICsgb3IgLSAqLwotICAgIGlmIChwIDwgZW5kKSB7Ci0gICAgICAgIGNoYXIgYyA9IHBbMF07Ci0gICAgICAgIGlmICggYyA9PSAnLScgfHwgYyA9PSAnKycgKSB7Ci0gICAgICAgICAgICBtaW51cyA9IChjID09ICctJyk7Ci0gICAgICAgICAgICBwKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIGJhc2UgPT0gMCApIHsKLSAgICAgICAgaWYgKCBwKzIgPCBlbmQgJiYgcFswXSA9PSAnMCcgJiYgKHBbMV0gPT0gJ3gnIHx8IHBbMV0gPT0gJ1gnKSApIHsKLSAgICAgICAgICAgIHAgKz0gMjsKLSAgICAgICAgICAgIGJhc2UgPSAxNjsKLSAgICAgICAgfSBlbHNlIGlmICggcCsxIDwgZW5kICYmIHBbMF0gPT0gJzAnICkgewotICAgICAgICAgICAgcCAgICs9IDE7Ci0gICAgICAgICAgICBiYXNlID0gODsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJhc2UgPSAxMDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIGJhc2UgPT0gMTYgKSB7Ci0gICAgICAgIGlmICggcCsyIDwgZW5kICYmIHBbMF0gPT0gJzAnICYmIChwWzFdID09ICd4JyB8fCBwWzFdID09ICdYJykgKSB7Ci0gICAgICAgICAgICBwICs9IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB3aGlsZSAoIHAgPCBlbmQgJiYgKGQgPSBkaWdpdHZhbCgqcCkpID49IDAgJiYgZCA8IGJhc2UgKSB7Ci0gICAgICAgIHYgPSB2KmJhc2UgKyBkOwotICAgICAgICBwICs9IDE7Ci0gICAgfQotCi0gICAgaWYgKCBlbmRwdHIgKQotICAgICAgICAqZW5kcHRyID0gKGNoYXIgKilwOwotCi0gICAgcmV0dXJuIG1pbnVzID8gLXYgOiB2OwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3RycmNoci5jcHAgYi9saWJjL2Jpb25pYy9zdHJyY2hyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmRiNDdjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc3RycmNoci5jcHAKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjdW5kZWYgX0ZPUlRJRllfU09VUkNFCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2NoYXIqIHN0cnJjaHIoY29uc3QgY2hhciogcCwgaW50IGNoKSB7CisgIHJldHVybiBfX3N0cnJjaHJfY2hrKHAsIGNoLCBfX0JJT05JQ19GT1JUSUZZX1VOS05PV05fU0laRSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zdHJ0b2xkLmNwcCBiL2xpYmMvYmlvbmljL3N0cnRvbGQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MTZjZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zdHJ0b2xkLmNwcApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitleHRlcm4gIkMiIGludCBfX3N0cnRvclEoY29uc3QgY2hhciosIGNoYXIqKiwgaW50LCB2b2lkKik7CisKK2xvbmcgZG91YmxlIHN0cnRvbGQoY29uc3QgY2hhciogcywgY2hhcioqIGVuZF9wdHIpIHsKKyNpZiBfX0xQNjRfXworICBsb25nIGRvdWJsZSByZXN1bHQ7CisgIF9fc3RydG9yUShzLCBlbmRfcHRyLCBGTFRfUk9VTkRTLCAmcmVzdWx0KTsKKyAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgIC8vIFRoaXMgaXMgZmluZSBmb3IgTFAzMiB3aGVyZSBsb25nIGRvdWJsZSBpcyBqdXN0IGRvdWJsZS4KKyAgcmV0dXJuIHN0cnRvZChzLCBlbmRfcHRyKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3RydG9sZF9sLmNwcCBiL2xpYmMvYmlvbmljL3N0cnRvbGRfbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIyMzBiOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3N0cnRvbGRfbC5jcHAKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2xvbmcgZG91YmxlIHN0cnRvbGRfbChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBsb2NhbGVfdCkgeworICByZXR1cm4gc3RydG9sZChucHRyLCBlbmRwdHIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3RydG9sbF9sLmNwcCBiL2xpYmMvYmlvbmljL3N0cnRvbGxfbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiMTI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3N0cnRvbGxfbC5jcHAKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2xvbmcgbG9uZyBzdHJ0b2xsX2woY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UsIGxvY2FsZV90KSB7CisgIHJldHVybiBzdHJ0b2xsKG5wdHIsIGVuZHB0ciwgYmFzZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zdHJ0b3RpbWV2YWwuYyBiL2xpYmMvYmlvbmljL3N0cnRvdGltZXZhbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzEzMmVjLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3N0cnRvdGltZXZhbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotCi1jaGFyICogc3RydG90aW1ldmFsIChjb25zdCBjaGFyICpzdHIsIHN0cnVjdCB0aW1ldmFsICp0cykKLXsKLSAgICBpbnQgbjsKLSAgICBjaGFyICpzLCAqczA7Ci0gICAgbG9uZyAgZnM7CS8qIEZyYWN0aW9uYWwgc2Vjb25kcyAqLwotCi0gICAgdHMtPnR2X3NlYyA9IHN0cnRvdW1heChzdHIsICZzLCAxMCk7Ci0gICAgZnMgPSAwOwotCi0gICAgaWYgKCAqcyA9PSAnLicgKSB7Ci0JaW50ICBjb3VudDsKLQotICAgICAgICBzMCA9IHMrMTsKLQotCS8qIHJlYWQgdXAgdG8gNiBkaWdpdHMgKi8KLQlmcyAgICA9IDA7Ci0JY291bnQgPSAwOwotCXdoaWxlICggKnMgJiYgaXNkaWdpdCgqcykgKQotCXsKLSAgICAgICAgICAgIGlmICggKytjb3VudCA8IDcgKQotCSAgICAgICAgZnMgPSBmcyoxMCArICgqcyAtICcwJyk7Ci0JICAgIHMrKzsKLQl9Ci0KLQlmb3IgKCA7IGNvdW50IDwgNjsgY291bnQrKyApCi0JICAgIGZzICo9IDEwOwotICAgIH0KLQotICAgIHRzLT50dl91c2VjID0gZnM7Ci0gICAgcmV0dXJuIHM7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zdHJ0b3VsbF9sLmNwcCBiL2xpYmMvYmlvbmljL3N0cnRvdWxsX2wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OGJhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zdHJ0b3VsbF9sLmNwcApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwordW5zaWduZWQgbG9uZyBsb25nIHN0cnRvdWxsX2woY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVfdCkgeworICByZXR1cm4gc3RydG91bGwobnB0ciwgZW5kcHRyLCBiYXNlKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0cnhmcm1fbC5jcHAgYi9saWJjL2Jpb25pYy9zdHJ4ZnJtX2wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZTNiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zdHJ4ZnJtX2wuY3BwCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCitzaXplX3Qgc3RyeGZybV9sKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4sIGxvY2FsZV90KSB7CisgIHJldHVybiBzdHJ4ZnJtKGRlc3QsIHNyYywgbik7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zdHVicy5jcHAgYi9saWJjL2Jpb25pYy9zdHVicy5jcHAKaW5kZXggNzA3MDM2YS4uYjFlMzhiZSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvc3R1YnMuY3BwCisrKyBiL2xpYmMvYmlvbmljL3N0dWJzLmNwcApAQCAtODksOSArODksMTEgQEAKICAgLy8gQ29weSB0aGUgc3RyaW5ncy4KICAgc25wcmludGYoYnVmLCBieXRlX2NvdW50LCAiJXMlYyVzJWMlcyIsIHNyYy0+cHdfbmFtZSwgMCwgc3JjLT5wd19kaXIsIDAsIHNyYy0+cHdfc2hlbGwpOwogCi0gIC8vIHB3X3Bhc3N3ZCBpcyBub24tUE9TSVggYW5kIHVudXNlZCAoYWx3YXlzIE5VTEwpIGluIGJpb25pYy4KLSAgLy8gcHdfZ2Vjb3MgaXMgbm9uLVBPU0lYIGFuZCBtaXNzaW5nIGluIGJpb25pYy4KKyAgLy8gcHdfcGFzc3dkIGFuZCBwd19nZWNvcyBhcmUgbm9uLVBPU0lYIGFuZCB1bnVzZWQgKGFsd2F5cyBOVUxMKSBpbiBiaW9uaWMuCiAgIGRzdC0+cHdfcGFzc3dkID0gTlVMTDsKKyNpZmRlZiBfX0xQNjRfXworICBkc3QtPnB3X2dlY29zID0gTlVMTDsKKyNlbmRpZgogCiAgIC8vIENvcHkgdGhlIGludGVncmFsIGZpZWxkcy4KICAgZHN0LT5wd19naWQgPSBzcmMtPnB3X2dpZDsKQEAgLTQ0MiwzMSArNDQ0LDYgQEAKICAgVU5JTVBMRU1FTlRFRDsKIH0KIAotbW50ZW50KiBnZXRtbnRlbnQoRklMRSogLypmKi8pIHsKLSAgVU5JTVBMRU1FTlRFRDsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLUZJTEUqIHNldG1udGVudChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopIHsKLSAgVU5JTVBMRU1FTlRFRDsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWludCBlbmRtbnRlbnQoRklMRSopIHsKLSAgVU5JTVBMRU1FTlRFRDsKLSAgcmV0dXJuIDE7IC8qIEFsbHdheXMgcmV0dXJucyAxIGFjY29yZGluZyB0byBtYW4gKi8KLX0KLQotY2hhciogdHR5bmFtZShpbnQgLypmZCovKSB7IC8vIE5PTElOVDogaW1wbGVtZW50aW5nIGJhZCBmdW5jdGlvbi4KLSAgVU5JTVBMRU1FTlRFRDsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWludCB0dHluYW1lX3IoaW50IC8qZmQqLywgY2hhciogLypidWYqLywgc2l6ZV90IC8qYnVmbGVuKi8pIHsKLSAgVU5JTVBMRU1FTlRFRDsKLSAgcmV0dXJuIC1FUkFOR0U7Ci19Ci0KIGNoYXIqIGdldHVzZXJzaGVsbCgpIHsKICAgVU5JTVBMRU1FTlRFRDsKICAgcmV0dXJuIE5VTEw7CkBAIC00ODAsNyArNDU3LDggQEAKICAgVU5JTVBMRU1FTlRFRDsKIH0KIAotLy8gUG9ydGFibGUgY29kZSBzaG91bGQgdXNlIHN5c2NvbmYoX1NDX1BBR0VTSVpFKSBkaXJlY3RseSBpbnN0ZWFkLgorLy8gUG9ydGFibGUgY29kZSBzaG91bGQgdXNlIHN5c2NvbmYoX1NDX1BBR0VfU0laRSkgZGlyZWN0bHkgaW5zdGVhZC4KIGludCBnZXRwYWdlc2l6ZSgpIHsKLSAgcmV0dXJuIHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKyAgLy8gV2UgZG9udCB1c2Ugc3lzY29uZigzKSBoZXJlIGJlY2F1c2UgdGhhdCBkcmFncyBpbiBzdGRpbywgd2hpY2ggbWFrZXMgc3RhdGljIGJpbmFyaWVzIGZhdC4KKyAgcmV0dXJuIFBBR0VfU0laRTsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N5c19zaWdsaXN0LmMgYi9saWJjL2Jpb25pYy9zeXNfc2lnbGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZmRkYmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zeXNfc2lnbGlzdC5jCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHNpZ25hbC5oPgorCitjb25zdCBjaGFyKiBjb25zdCBzeXNfc2lnbGlzdFtOU0lHXSA9IHsKKyNkZWZpbmUgX19CSU9OSUNfU0lHREVGKHNpZ25hbF9udW1iZXIsIHNpZ25hbF9kZXNjcmlwdGlvbikgWyBzaWduYWxfbnVtYmVyIF0gPSBzaWduYWxfZGVzY3JpcHRpb24sCisjaW5jbHVkZSA8c3lzL19zaWdkZWZzLmg+Cit9OwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3lzX3NpZ25hbWUuYyBiL2xpYmMvYmlvbmljL3N5c19zaWduYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEyODZmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3N5c19zaWduYW1lLmMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKK2NvbnN0IGNoYXIqIGNvbnN0IHN5c19zaWduYW1lW05TSUddID0geworI2RlZmluZSBfX0JJT05JQ19TSUdERUYoc2lnbmFsX251bWJlciwgdW51c2VkKSBbIHNpZ25hbF9udW1iZXIgXSA9ICNzaWduYWxfbnVtYmVyICsgMywKKyNpbmNsdWRlIDxzeXMvX3NpZ2RlZnMuaD4KK307CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zeXNjb25mLmNwcCBiL2xpYmMvYmlvbmljL3N5c2NvbmYuY3BwCmluZGV4IGRiODA4YzIuLjgzMDlmMDggMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3N5c2NvbmYuY3BwCisrKyBiL2xpYmMvYmlvbmljL3N5c2NvbmYuY3BwCkBAIC0yMjksOCArMjI5LDExIEBACiAjZW5kaWYKICAgICBjYXNlIF9TQ19BVEVYSVRfTUFYOiAgICAgICAgcmV0dXJuIFNZU1RFTV9BVEVYSVRfTUFYOwogICAgIGNhc2UgX1NDX0lPVl9NQVg6ICAgICAgICAgICByZXR1cm4gU1lTVEVNX0lPVl9NQVg7Ci0gICAgY2FzZSBfU0NfUEFHRVNJWkU6ICAgICAgICAgIHJldHVybiBQQUdFX1NJWkU7Ci0gICAgY2FzZSBfU0NfUEFHRV9TSVpFOiAgICAgICAgIHJldHVybiBQQUdFX1NJWkU7CisKKyAgICBjYXNlIF9TQ19QQUdFU0laRToKKyAgICBjYXNlIF9TQ19QQUdFX1NJWkU6CisgICAgICAgIHJldHVybiBQQUdFX1NJWkU7CisKICNpZmRlZiBfWE9QRU5fVU5JWAogICAgIGNhc2UgX1NDX1hPUEVOX1VOSVg6ICAgICAgICByZXR1cm4gX1hPUEVOX1VOSVg7CiAjZW5kaWYKQEAgLTMwNiw3ICszMDksNyBAQAogICAgICAgcmV0dXJuIF9QT1NJWF9USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TOwogCiAgICAgY2FzZSBfU0NfVEhSRUFEX0tFWVNfTUFYOgotICAgICAgcmV0dXJuIChCSU9OSUNfVExTX1NMT1RTIC0gVExTX1NMT1RfRklSU1RfVVNFUl9TTE9UIC0gR0xPQkFMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUl9DT1VOVCk7CisgICAgICByZXR1cm4gKEJJT05JQ19UTFNfU0xPVFMgLSBUTFNfU0xPVF9GSVJTVF9VU0VSX1NMT1QgLSBCSU9OSUNfVExTX1JFU0VSVkVEX1NMT1RTKTsKIAogICAgIGNhc2UgX1NDX1RIUkVBRF9TVEFDS19NSU46ICAgIHJldHVybiBQVEhSRUFEX1NUQUNLX01JTjsKICAgICBjYXNlIF9TQ19USFJFQURfVEhSRUFEU19NQVg6ICByZXR1cm4gU1lTVEVNX1RIUkVBRF9USFJFQURTX01BWDsKQEAgLTMxNCwxMiArMzE3LDEwIEBACiAjaWZkZWYgX1BPU0lYX1RIUkVBRFMKICAgICBjYXNlIF9TQ19USFJFQURTOiAgICAgICAgICAgICByZXR1cm4gX1BPU0lYX1RIUkVBRFM7CiAjZW5kaWYKLSNpZmRlZiBfUE9TSVhfVEhSRUFEX0FUVFJfU1RBQ0tBRERSCi0gICAgY2FzZSBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSOiAgIHJldHVybiBfUE9TSVhfVEhSRUFEX0FUVFJfU1RBQ0tBRERSOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLU0laRQotICAgIGNhc2UgX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRTogICByZXR1cm4gX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLU0laRTsKLSNlbmRpZgorCisgICAgY2FzZSBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSOiAgIHJldHVybiAtMTsgLy8gUmVtb3ZlZCBpbiBQT1NJWCAyMDA4CisgICAgY2FzZSBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFOiAgIHJldHVybiAtMTsgLy8gUmVtb3ZlZCBpbiBQT1NJWCAyMDA4CisKICNpZmRlZiBfUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcKICAgICBjYXNlIF9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORzogIHJldHVybiBfUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkc7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N5c2xvZy5jcHAgYi9saWJjL2Jpb25pYy9zeXNsb2cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YjhiMTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zeXNsb2cuY3BwCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzbG9nLmg+CisKKyNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgorCitzdGF0aWMgY29uc3QgY2hhciogc3lzbG9nX2xvZ190YWcgPSBOVUxMOworc3RhdGljIGludCBzeXNsb2dfcHJpb3JpdHlfbWFzayA9IDB4ZmY7CisKK3ZvaWQgY2xvc2Vsb2coKSB7CisgIHN5c2xvZ19sb2dfdGFnID0gTlVMTDsKK30KKwordm9pZCBvcGVubG9nKGNvbnN0IGNoYXIqIGxvZ190YWcsIGludCAvKm9wdGlvbnMqLywgaW50IC8qZmFjaWxpdHkqLykgeworICBzeXNsb2dfbG9nX3RhZyA9IGxvZ190YWc7Cit9CisKK2ludCBzZXRsb2dtYXNrKGludCBuZXdfbWFzaykgeworICBpbnQgb2xkX21hc2sgPSBzeXNsb2dfcHJpb3JpdHlfbWFzazsKKyAgLy8gMCBpcyB1c2VkIHRvIHF1ZXJ5IHRoZSBjdXJyZW50IG1hc2suCisgIGlmIChuZXdfbWFzayAhPSAwKSB7CisgICAgc3lzbG9nX3ByaW9yaXR5X21hc2sgPSBuZXdfbWFzazsKKyAgfQorICByZXR1cm4gb2xkX21hc2s7Cit9CisKK3ZvaWQgc3lzbG9nKGludCBwcmlvcml0eSwgY29uc3QgY2hhciogZm10LCAuLi4pIHsKKyAgdmFfbGlzdCBhcmdzOworICB2YV9zdGFydChhcmdzLCBmbXQpOworICB2c3lzbG9nKHByaW9yaXR5LCBmbXQsIGFyZ3MpOworICB2YV9lbmQoYXJncyk7Cit9CisKK3ZvaWQgdnN5c2xvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIqIGZtdCwgdmFfbGlzdCBhcmdzKSB7CisgIGludCBjYWxsZXJfZXJybm8gPSBlcnJubzsKKworICAvLyBDaGVjayB3aGV0aGVyIHdlJ3JlIHN1cHBvc2VkIHRvIGJlIGxvZ2dpbmcgbWVzc2FnZXMgb2YgdGhpcyBwcmlvcml0eS4KKyAgaWYgKChzeXNsb2dfcHJpb3JpdHlfbWFzayAmIExPR19NQVNLKExPR19QUkkocHJpb3JpdHkpKSkgPT0gMCkgeworICAgIHJldHVybjsKKyAgfQorCisgIC8vIFdoYXQncyBvdXIgbG9nIHRhZz8KKyAgY29uc3QgY2hhciogbG9nX3RhZyA9IHN5c2xvZ19sb2dfdGFnOworICBpZiAobG9nX3RhZyA9PSBOVUxMKSB7CisgICAgbG9nX3RhZyA9IGdldHByb2duYW1lKCk7CisgIH0KKworICAvLyBXaGF0J3Mgb3VyIEFuZHJvaWQgbG9nIHByaW9yaXR5PworICBwcmlvcml0eSAmPSBMT0dfUFJJTUFTSzsKKyAgaW50IGFuZHJvaWRfbG9nX3ByaW9yaXR5OworICBpZiAocHJpb3JpdHkgPD0gTE9HX0VSUikgeworICAgIGFuZHJvaWRfbG9nX3ByaW9yaXR5ID0gQU5EUk9JRF9MT0dfRVJST1I7CisgIH0gZWxzZSBpZiAocHJpb3JpdHkgPT0gTE9HX1dBUk5JTkcpIHsKKyAgICBhbmRyb2lkX2xvZ19wcmlvcml0eSA9IEFORFJPSURfTE9HX1dBUk47CisgIH0gZWxzZSBpZiAocHJpb3JpdHkgPD0gTE9HX0lORk8pIHsKKyAgICBhbmRyb2lkX2xvZ19wcmlvcml0eSA9IEFORFJPSURfTE9HX0lORk87CisgIH0gZWxzZSB7CisgICAgYW5kcm9pZF9sb2dfcHJpb3JpdHkgPSBBTkRST0lEX0xPR19ERUJVRzsKKyAgfQorCisgIC8vIGdsaWJjJ3MgcHJpbnRmIGZhbWlseSBzdXBwb3J0ICVtIGRpcmVjdGx5LCBidXQgb3VyIEJTRC1iYXNlZCBvbmUgZG9lc24ndC4KKyAgLy8gSWYgdGhlIGZvcm1hdCBzdHJpbmcgc2VlbXMgdG8gY29udGFpbiAiJW0iLCByZXdyaXRlIGl0LgorICBjb25zdCBjaGFyKiBsb2dfZm10ID0gZm10OworICBpZiAoc3Ryc3RyKGZtdCwgIiVtIikgIT0gTlVMTCkgeworICAgIHNpemVfdCBkc3RfbGVuID0gMTAyNDsKKyAgICBjaGFyKiBkc3QgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtYWxsb2MoZHN0X2xlbikpOworICAgIGxvZ19mbXQgPSBkc3Q7CisKKyAgICBjb25zdCBjaGFyKiBzcmMgPSBmbXQ7CisgICAgZm9yICg7IGRzdF9sZW4gPiAwICYmICpzcmMgIT0gJ1wwJzsgKytzcmMpIHsKKyAgICAgIGlmICgqc3JjID09ICclJyAmJiAqKHNyYyArIDEpID09ICdtJykgeworICAgICAgICAvLyBFeHBhbmQgJW0uCisgICAgICAgIHNpemVfdCBuID0gc3RybGNweShkc3QsIHN0cmVycm9yKGNhbGxlcl9lcnJubyksIGRzdF9sZW4pOworICAgICAgICBpZiAobiA+PSBkc3RfbGVuKSB7CisgICAgICAgICAgbiA9IGRzdF9sZW47CisgICAgICAgIH0KKyAgICAgICAgZHN0ICs9IG47CisgICAgICAgIGRzdF9sZW4gLT0gbjsKKyAgICAgICAgKytzcmM7CisgICAgICB9IGVsc2UgaWYgKCpzcmMgPT0gJyUnICYmICooc3JjICsgMSkgPT0gJyUnKSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gY29weSBwYWlycyBvZiAnJSdzIHNvIHRoZSAlbSB0ZXN0IHdvcmtzLgorICAgICAgICBpZiAoZHN0X2xlbiA8PSAyKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgKmRzdCsrID0gJyUnOyAtLWRzdF9sZW47CisgICAgICAgICpkc3QrKyA9ICclJzsgLS1kc3RfbGVuOworICAgICAgICArK3NyYzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICpkc3QrKyA9ICpzcmM7IC0tZHN0X2xlbjsKKyAgICAgIH0KKyAgICB9CisgICAgKmRzdCA9ICdcMCc7CisgIH0KKworICAvLyBXZSBjYW4ndCBsZXQgX19saWJjX2Zvcm1hdF9sb2cgZG8gdGhlIGZvcm1hdHRpbmcgYmVjYXVzZSBpdCBkb2Vzbid0IHN1cHBvcnQKKyAgLy8gYWxsIHRoZSBwcmludGYgZnVuY3Rpb25hbGl0eS4KKyAgY2hhciBsb2dfbGluZVsxMDI0XTsKKyAgdnNucHJpbnRmKGxvZ19saW5lLCBzaXplb2YobG9nX2xpbmUpLCBsb2dfZm10LCBhcmdzKTsKKworICBpZiAobG9nX2ZtdCAhPSBmbXQpIHsKKyAgICBmcmVlKGNvbnN0X2Nhc3Q8Y2hhcio+KGxvZ19mbXQpKTsKKyAgfQorCisgIF9fbGliY19mb3JtYXRfbG9nKGFuZHJvaWRfbG9nX3ByaW9yaXR5LCBsb2dfdGFnLCAiJXMiLCBsb2dfbGluZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zeXN0ZW1fcHJvcGVydGllcy5jIGIvbGliYy9iaW9uaWMvc3lzdGVtX3Byb3BlcnRpZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI1ODk0Zi4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9zeXN0ZW1fcHJvcGVydGllcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8cG9sbC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3RkYm9vbC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLQotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxzeXMvdW4uaD4KLSNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNkZWZpbmUgX1JFQUxMWV9JTkNMVURFX1NZU19fU1lTVEVNX1BST1BFUlRJRVNfSF8KLSNpbmNsdWRlIDxzeXMvX3N5c3RlbV9wcm9wZXJ0aWVzLmg+Ci0KLSNpbmNsdWRlIDxzeXMvYXRvbWljcy5oPgotCi0jaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfYXRvbWljX2lubGluZS5oIgotCi0jZGVmaW5lIEFMSUdOKHgsIGEpICgoKHgpICsgKGEgLSAxKSkgJiB+KGEgLSAxKSkKLQotc3RydWN0IHByb3BfYXJlYSB7Ci0gICAgdW5zaWduZWQgYnl0ZXNfdXNlZDsKLSAgICB1bnNpZ25lZCB2b2xhdGlsZSBzZXJpYWw7Ci0gICAgdW5zaWduZWQgbWFnaWM7Ci0gICAgdW5zaWduZWQgdmVyc2lvbjsKLSAgICB1bnNpZ25lZCByZXNlcnZlZFsyOF07Ci0gICAgY2hhciBkYXRhWzBdOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgcHJvcF9hcmVhIHByb3BfYXJlYTsKLQotc3RydWN0IHByb3BfaW5mbyB7Ci0gICAgdW5zaWduZWQgdm9sYXRpbGUgc2VyaWFsOwotICAgIGNoYXIgdmFsdWVbUFJPUF9WQUxVRV9NQVhdOwotICAgIGNoYXIgbmFtZVswXTsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHByb3BfaW5mbyBwcm9wX2luZm87Ci0KLS8qCi0gKiBQcm9wZXJ0aWVzIGFyZSBzdG9yZWQgaW4gYSBoeWJyaWQgdHJpZS9iaW5hcnkgdHJlZSBzdHJ1Y3R1cmUuCi0gKiBFYWNoIHByb3BlcnR5J3MgbmFtZSBpcyBkZWxpbWl0ZWQgYXQgJy4nIGNoYXJhY3RlcnMsIGFuZCB0aGUgdG9rZW5zIGFyZSBwdXQKLSAqIGludG8gYSB0cmllIHN0cnVjdHVyZS4gIFNpYmxpbmdzIGF0IGVhY2ggbGV2ZWwgb2YgdGhlIHRyaWUgYXJlIHN0b3JlZCBpbiBhCi0gKiBiaW5hcnkgdHJlZS4gIEZvciBpbnN0YW5jZSwgInJvLnNlY3VyZSI9IjEiIGNvdWxkIGJlIHN0b3JlZCBhcyBmb2xsb3dzOgotICoKLSAqICstLS0tLSsgICBjaGlsZHJlbiAgICArLS0tLSsgICBjaGlsZHJlbiAgICArLS0tLS0tLS0rCi0gKiB8ICAgICB8LS0tLS0tLS0tLS0tLS0+fCBybyB8LS0tLS0tLS0tLS0tLS0+fCBzZWN1cmUgfAotICogKy0tLS0tKyAgICAgICAgICAgICAgICstLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLSsKLSAqICAgICAgICAgICAgICAgICAgICAgICAvICAgIFwgICAgICAgICAgICAgICAgLyAgIHwKLSAqICAgICAgICAgICAgICAgICBsZWZ0IC8gICAgICBcIHJpZ2h0ICAgbGVmdCAvICAgIHwgIHByb3AgICArPT09PT09PT09PT0rCi0gKiAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgIHYgICAgICAgICAgICB2ICAgICArLS0tLS0tLS0+fCByby5zZWN1cmUgfAotICogICAgICAgICAgICAgICAgICArLS0tLS0rICAgKy0tLS0tKyAgICAgKy0tLS0tKyAgICAgICAgICAgICstLS0tLS0tLS0tLSsKLSAqICAgICAgICAgICAgICAgICAgfCBuZXQgfCAgIHwgc3lzIHwgICAgIHwgY29tIHwgICAgICAgICAgICB8ICAgICAxICAgICB8Ci0gKiAgICAgICAgICAgICAgICAgICstLS0tLSsgICArLS0tLS0rICAgICArLS0tLS0rICAgICAgICAgICAgKz09PT09PT09PT09KwotICovCi0KLXR5cGVkZWYgdm9sYXRpbGUgdWludDMyX3QgcHJvcF9vZmZfdDsKLXN0cnVjdCBwcm9wX2J0IHsKLSAgICB1aW50OF90IG5hbWVsZW47Ci0gICAgdWludDhfdCByZXNlcnZlZFszXTsKLQotICAgIHByb3Bfb2ZmX3QgcHJvcDsKLQotICAgIHByb3Bfb2ZmX3QgbGVmdDsKLSAgICBwcm9wX29mZl90IHJpZ2h0OwotCi0gICAgcHJvcF9vZmZfdCBjaGlsZHJlbjsKLQotICAgIGNoYXIgbmFtZVswXTsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHByb3BfYnQgcHJvcF9idDsKLQotc3RhdGljIGNvbnN0IGNoYXIgcHJvcGVydHlfc2VydmljZV9zb2NrZXRbXSA9ICIvZGV2L3NvY2tldC8iIFBST1BfU0VSVklDRV9OQU1FOwotc3RhdGljIGNoYXIgcHJvcGVydHlfZmlsZW5hbWVbUEFUSF9NQVhdID0gUFJPUF9GSUxFTkFNRTsKLXN0YXRpYyBib29sIGNvbXBhdF9tb2RlID0gZmFsc2U7Ci0KLXByb3BfYXJlYSAqX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fID0gTlVMTDsKLQotc2l6ZV90IHBhX2RhdGFfc2l6ZTsKLXNpemVfdCBwYV9zaXplOwotCi1zdGF0aWMgaW50IGdldF9mZF9mcm9tX2Vudih2b2lkKQotewotICAgIGNoYXIgKmVudiA9IGdldGVudigiQU5EUk9JRF9QUk9QRVJUWV9XT1JLU1BBQ0UiKTsKLQotICAgIGlmICghZW52KSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXRvaShlbnYpOwotfQotCi1zdGF0aWMgaW50IG1hcF9wcm9wX2FyZWFfcncoKQotewotICAgIHByb3BfYXJlYSAqcGE7Ci0gICAgaW50IGZkOwotICAgIGludCByZXQ7Ci0KLSAgICAvKiBkZXYgaXMgYSB0bXBmcyB0aGF0IHdlIGNhbiB1c2UgdG8gY2FydmUgYSBzaGFyZWQgd29ya3NwYWNlCi0gICAgICogb3V0IG9mLCBzbyBsZXQncyBkbyB0aGF0Li4uCi0gICAgICovCi0gICAgZmQgPSBvcGVuKHByb3BlcnR5X2ZpbGVuYW1lLCBPX1JEV1IgfCBPX0NSRUFUIHwgT19OT0ZPTExPVyB8IE9fQ0xPRVhFQyB8Ci0gICAgICAgICAgICBPX0VYQ0wsIDA0NDQpOwotICAgIGlmIChmZCA8IDApIHsKLSAgICAgICAgaWYgKGVycm5vID09IEVBQ0NFUykgewotICAgICAgICAgICAgLyogZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlIHByb2Nlc3MgaGFzIGFscmVhZHkKLSAgICAgICAgICAgICAqIG1hcHBlZCB0aGUgcGFnZSBpbiBhbmQgc2VnZmF1bHRzIHdoZW4gdHJ5aW5nIHRvIHdyaXRlIHRvIGl0Ci0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGFib3J0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHJldCA9IGZjbnRsKGZkLCBGX1NFVEZELCBGRF9DTE9FWEVDKTsKLSAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgZ290byBvdXQ7Ci0KLSAgICBpZiAoZnRydW5jYXRlKGZkLCBQQV9TSVpFKSA8IDApCi0gICAgICAgIGdvdG8gb3V0OwotCi0gICAgcGFfc2l6ZSA9IFBBX1NJWkU7Ci0gICAgcGFfZGF0YV9zaXplID0gcGFfc2l6ZSAtIHNpemVvZihwcm9wX2FyZWEpOwotICAgIGNvbXBhdF9tb2RlID0gZmFsc2U7Ci0KLSAgICBwYSA9IG1tYXAoTlVMTCwgcGFfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOwotICAgIGlmKHBhID09IE1BUF9GQUlMRUQpCi0gICAgICAgIGdvdG8gb3V0OwotCi0gICAgbWVtc2V0KHBhLCAwLCBwYV9zaXplKTsKLSAgICBwYS0+bWFnaWMgPSBQUk9QX0FSRUFfTUFHSUM7Ci0gICAgcGEtPnZlcnNpb24gPSBQUk9QX0FSRUFfVkVSU0lPTjsKLSAgICAvKiByZXNlcnZlIHJvb3Qgbm9kZSAqLwotICAgIHBhLT5ieXRlc191c2VkID0gc2l6ZW9mKHByb3BfYnQpOwotCi0gICAgLyogcGx1ZyBpbnRvIHRoZSBsaWIgcHJvcGVydHkgc2VydmljZXMgKi8KLSAgICBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX18gPSBwYTsKLQotICAgIGNsb3NlKGZkKTsKLSAgICByZXR1cm4gMDsKLQotb3V0OgotICAgIGNsb3NlKGZkKTsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLWludCBfX3N5c3RlbV9wcm9wZXJ0eV9zZXRfZmlsZW5hbWUoY29uc3QgY2hhciAqZmlsZW5hbWUpCi17Ci0gICAgc2l6ZV90IGxlbiA9IHN0cmxlbihmaWxlbmFtZSk7Ci0gICAgaWYgKGxlbiA+PSBzaXplb2YocHJvcGVydHlfZmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBzdHJjcHkocHJvcGVydHlfZmlsZW5hbWUsIGZpbGVuYW1lKTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfaW5pdCgpCi17Ci0gICAgcmV0dXJuIG1hcF9wcm9wX2FyZWFfcncoKTsKLX0KLQotc3RhdGljIGludCBtYXBfcHJvcF9hcmVhKCkKLXsKLSAgICBib29sIGZyb21GaWxlID0gdHJ1ZTsKLSAgICBpbnQgcmVzdWx0ID0gLTE7Ci0gICAgaW50IGZkOwotICAgIGludCByZXQ7Ci0KLSAgICBmZCA9IG9wZW4ocHJvcGVydHlfZmlsZW5hbWUsIE9fUkRPTkxZIHwgT19OT0ZPTExPVyB8IE9fQ0xPRVhFQyk7Ci0gICAgaWYgKGZkID49IDApIHsKLSAgICAgICAgLyogRm9yIG9sZCBrZXJuZWxzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBPX0NMT0VYRUMgKi8KLSAgICAgICAgcmV0ID0gZmNudGwoZmQsIEZfU0VURkQsIEZEX0NMT0VYRUMpOwotICAgICAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0KLSAgICBpZiAoKGZkIDwgMCkgJiYgKGVycm5vID09IEVOT0VOVCkpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBpZiB0aGUgZmlsZSBkb2Vzbid0Ci0gICAgICAgICAqIGV4aXN0LCB3ZSB1c2UgdGhlIGVudmlyb25tZW50IHRvIGdldCB0aGUgZmlsZSBkZXNjcmlwdG9yLgotICAgICAgICAgKiBGb3Igc2VjdXJpdHkgcmVhc29ucywgd2Ugb25seSB1c2UgdGhpcyBiYWNrdXAgaWYgdGhlIGtlcm5lbAotICAgICAgICAgKiByZXR1cm5zIEVOT0VOVC4gV2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIGJhY2t1cCBpZiB0aGUga2VybmVsCi0gICAgICAgICAqIHJldHVybnMgb3RoZXIgZXJyb3JzIHN1Y2ggYXMgRU5PTUVNIG9yIEVORklMRSwgc2luY2UgaXQKLSAgICAgICAgICogbWlnaHQgYmUgcG9zc2libGUgZm9yIGFuIGV4dGVybmFsIHByb2dyYW0gdG8gdHJpZ2dlciB0aGlzCi0gICAgICAgICAqIGNvbmRpdGlvbi4KLSAgICAgICAgICovCi0gICAgICAgIGZkID0gZ2V0X2ZkX2Zyb21fZW52KCk7Ci0gICAgICAgIGZyb21GaWxlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGZkIDwgMCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgc3RydWN0IHN0YXQgZmRfc3RhdDsKLSAgICBpZiAoZnN0YXQoZmQsICZmZF9zdGF0KSA8IDApIHsKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLQotICAgIGlmICgoZmRfc3RhdC5zdF91aWQgIT0gMCkKLSAgICAgICAgICAgIHx8IChmZF9zdGF0LnN0X2dpZCAhPSAwKQotICAgICAgICAgICAgfHwgKChmZF9zdGF0LnN0X21vZGUgJiAoU19JV0dSUCB8IFNfSVdPVEgpKSAhPSAwKQotICAgICAgICAgICAgfHwgKGZkX3N0YXQuc3Rfc2l6ZSA8IHNpemVvZihwcm9wX2FyZWEpKSApIHsKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLQotICAgIHBhX3NpemUgPSBmZF9zdGF0LnN0X3NpemU7Ci0gICAgcGFfZGF0YV9zaXplID0gcGFfc2l6ZSAtIHNpemVvZihwcm9wX2FyZWEpOwotICAgIHByb3BfYXJlYSAqcGEgPSBtbWFwKE5VTEwsIHBhX3NpemUsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZmQsIDApOwotCi0gICAgaWYgKHBhID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLQotICAgIGlmKChwYS0+bWFnaWMgIT0gUFJPUF9BUkVBX01BR0lDKSB8fCAocGEtPnZlcnNpb24gIT0gUFJPUF9BUkVBX1ZFUlNJT04gJiYKLSAgICAgICAgICAgICAgICBwYS0+dmVyc2lvbiAhPSBQUk9QX0FSRUFfVkVSU0lPTl9DT01QQVQpKSB7Ci0gICAgICAgIG11bm1hcChwYSwgcGFfc2l6ZSk7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0KLSAgICBpZiAocGEtPnZlcnNpb24gPT0gUFJPUF9BUkVBX1ZFUlNJT05fQ09NUEFUKSB7Ci0gICAgICAgIGNvbXBhdF9tb2RlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSAwOwotCi0gICAgX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fID0gcGE7Ci0KLWNsZWFudXA6Ci0gICAgaWYgKGZyb21GaWxlKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbnQgX19zeXN0ZW1fcHJvcGVydGllc19pbml0KCkKLXsKLSAgICByZXR1cm4gbWFwX3Byb3BfYXJlYSgpOwotfQotCi1zdGF0aWMgdm9pZCAqbmV3X3Byb3Bfb2JqKHNpemVfdCBzaXplLCBwcm9wX29mZl90ICpvZmYpCi17Ci0gICAgcHJvcF9hcmVhICpwYSA9IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXzsKLSAgICBzaXplID0gQUxJR04oc2l6ZSwgc2l6ZW9mKHVpbnQzMl90KSk7Ci0KLSAgICBpZiAocGEtPmJ5dGVzX3VzZWQgKyBzaXplID4gcGFfZGF0YV9zaXplKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgICpvZmYgPSBwYS0+Ynl0ZXNfdXNlZDsKLSAgICBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX18tPmJ5dGVzX3VzZWQgKz0gc2l6ZTsKLSAgICByZXR1cm4gX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fLT5kYXRhICsgKm9mZjsKLX0KLQotc3RhdGljIHByb3BfYnQgKm5ld19wcm9wX2J0KGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQ4X3QgbmFtZWxlbiwgcHJvcF9vZmZfdCAqb2ZmKQotewotICAgIHByb3Bfb2ZmX3Qgb2ZmX3RtcDsKLSAgICBwcm9wX2J0ICpidCA9IG5ld19wcm9wX29iaihzaXplb2YocHJvcF9idCkgKyBuYW1lbGVuICsgMSwgJm9mZl90bXApOwotICAgIGlmIChidCkgewotICAgICAgICBtZW1jcHkoYnQtPm5hbWUsIG5hbWUsIG5hbWVsZW4pOwotICAgICAgICBidC0+bmFtZVtuYW1lbGVuXSA9ICdcMCc7Ci0gICAgICAgIGJ0LT5uYW1lbGVuID0gbmFtZWxlbjsKLSAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgICAgICAqb2ZmID0gb2ZmX3RtcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnQ7Ci19Ci0KLXN0YXRpYyBwcm9wX2luZm8gKm5ld19wcm9wX2luZm8oY29uc3QgY2hhciAqbmFtZSwgdWludDhfdCBuYW1lbGVuLAotICAgICAgICBjb25zdCBjaGFyICp2YWx1ZSwgdWludDhfdCB2YWx1ZWxlbiwgcHJvcF9vZmZfdCAqb2ZmKQotewotICAgIHByb3Bfb2ZmX3Qgb2ZmX3RtcDsKLSAgICBwcm9wX2luZm8gKmluZm8gPSBuZXdfcHJvcF9vYmooc2l6ZW9mKHByb3BfaW5mbykgKyBuYW1lbGVuICsgMSwgJm9mZl90bXApOwotICAgIGlmIChpbmZvKSB7Ci0gICAgICAgIG1lbWNweShpbmZvLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKLSAgICAgICAgaW5mby0+bmFtZVtuYW1lbGVuXSA9ICdcMCc7Ci0gICAgICAgIGluZm8tPnNlcmlhbCA9ICh2YWx1ZWxlbiA8PCAyNCk7Ci0gICAgICAgIG1lbWNweShpbmZvLT52YWx1ZSwgdmFsdWUsIHZhbHVlbGVuKTsKLSAgICAgICAgaW5mby0+dmFsdWVbdmFsdWVsZW5dID0gJ1wwJzsKLSAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgICAgICAqb2ZmID0gb2ZmX3RtcDsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW5mbzsKLX0KLQotc3RhdGljIHZvaWQgKnRvX3Byb3Bfb2JqKHByb3Bfb2ZmX3Qgb2ZmKQotewotICAgIGlmIChvZmYgPiBwYV9kYXRhX3NpemUpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHJldHVybiBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX18tPmRhdGEgKyBvZmY7Ci19Ci0KLXN0YXRpYyBwcm9wX2J0ICpyb290X25vZGUoKQotewotICAgIHJldHVybiB0b19wcm9wX29iaigwKTsKLX0KLQotc3RhdGljIGludCBjbXBfcHJvcF9uYW1lKGNvbnN0IGNoYXIgKm9uZSwgdWludDhfdCBvbmVfbGVuLCBjb25zdCBjaGFyICp0d28sCi0gICAgICAgIHVpbnQ4X3QgdHdvX2xlbikKLXsKLSAgICBpZiAob25lX2xlbiA8IHR3b19sZW4pCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBlbHNlIGlmIChvbmVfbGVuID4gdHdvX2xlbikKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gc3RybmNtcChvbmUsIHR3bywgb25lX2xlbik7Ci19Ci0KLXN0YXRpYyBwcm9wX2J0ICpmaW5kX3Byb3BfYnQocHJvcF9idCAqYnQsIGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQ4X3QgbmFtZWxlbiwKLSAgICAgICAgYm9vbCBhbGxvY19pZl9uZWVkZWQpCi17Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgaW50IHJldDsKLSAgICAgICAgaWYgKCFidCkKLSAgICAgICAgICAgIHJldHVybiBidDsKLSAgICAgICAgcmV0ID0gY21wX3Byb3BfbmFtZShuYW1lLCBuYW1lbGVuLCBidC0+bmFtZSwgYnQtPm5hbWVsZW4pOwotCi0gICAgICAgIGlmIChyZXQgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIGJ0OwotICAgICAgICB9IGVsc2UgaWYgKHJldCA8IDApIHsKLSAgICAgICAgICAgIGlmIChidC0+bGVmdCkgewotICAgICAgICAgICAgICAgIGJ0ID0gdG9fcHJvcF9vYmooYnQtPmxlZnQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIWFsbG9jX2lmX25lZWRlZCkKLSAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgICAgICAgICAgICAgIGJ0ID0gbmV3X3Byb3BfYnQobmFtZSwgbmFtZWxlbiwgJmJ0LT5sZWZ0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChidC0+cmlnaHQpIHsKLSAgICAgICAgICAgICAgICBidCA9IHRvX3Byb3Bfb2JqKGJ0LT5yaWdodCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICghYWxsb2NfaWZfbmVlZGVkKQotICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgICAgICAgICAgICAgYnQgPSBuZXdfcHJvcF9idChuYW1lLCBuYW1lbGVuLCAmYnQtPnJpZ2h0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIGNvbnN0IHByb3BfaW5mbyAqZmluZF9wcm9wZXJ0eShwcm9wX2J0ICp0cmllLCBjb25zdCBjaGFyICpuYW1lLAotICAgICAgICB1aW50OF90IG5hbWVsZW4sIGNvbnN0IGNoYXIgKnZhbHVlLCB1aW50OF90IHZhbHVlbGVuLAotICAgICAgICBib29sIGFsbG9jX2lmX25lZWRlZCkKLXsKLSAgICBjb25zdCBjaGFyICpyZW1haW5pbmdfbmFtZSA9IG5hbWU7Ci0KLSAgICBpZiAoIXRyaWUpIHJldHVybiBOVUxMOwotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgY2hhciAqc2VwID0gc3RyY2hyKHJlbWFpbmluZ19uYW1lLCAnLicpOwotICAgICAgICBib29sIHdhbnRfc3VidHJlZSA9IChzZXAgIT0gTlVMTCk7Ci0gICAgICAgIHVpbnQ4X3Qgc3Vic3RyX3NpemU7Ci0KLSAgICAgICAgcHJvcF9idCAqcm9vdDsKLQotICAgICAgICBpZiAod2FudF9zdWJ0cmVlKSB7Ci0gICAgICAgICAgICBzdWJzdHJfc2l6ZSA9IHNlcCAtIHJlbWFpbmluZ19uYW1lOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3Vic3RyX3NpemUgPSBzdHJsZW4ocmVtYWluaW5nX25hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFzdWJzdHJfc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgICAgIGlmICh0cmllLT5jaGlsZHJlbikgewotICAgICAgICAgICAgcm9vdCA9IHRvX3Byb3Bfb2JqKHRyaWUtPmNoaWxkcmVuKTsKLSAgICAgICAgfSBlbHNlIGlmIChhbGxvY19pZl9uZWVkZWQpIHsKLSAgICAgICAgICAgIHJvb3QgPSBuZXdfcHJvcF9idChyZW1haW5pbmdfbmFtZSwgc3Vic3RyX3NpemUsICZ0cmllLT5jaGlsZHJlbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByb290ID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghcm9vdCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgICAgIHRyaWUgPSBmaW5kX3Byb3BfYnQocm9vdCwgcmVtYWluaW5nX25hbWUsIHN1YnN0cl9zaXplLCBhbGxvY19pZl9uZWVkZWQpOwotICAgICAgICBpZiAoIXRyaWUpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgICAgICBpZiAoIXdhbnRfc3VidHJlZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHJlbWFpbmluZ19uYW1lID0gc2VwICsgMTsKLSAgICB9Ci0KLSAgICBpZiAodHJpZS0+cHJvcCkgewotICAgICAgICByZXR1cm4gdG9fcHJvcF9vYmoodHJpZS0+cHJvcCk7Ci0gICAgfSBlbHNlIGlmIChhbGxvY19pZl9uZWVkZWQpIHsKLSAgICAgICAgcmV0dXJuIG5ld19wcm9wX2luZm8obmFtZSwgbmFtZWxlbiwgdmFsdWUsIHZhbHVlbGVuLCAmdHJpZS0+cHJvcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotfQotCi1jb25zdCBwcm9wX2luZm8gKl9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQoY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKGNvbXBhdF9tb2RlKSkgewotICAgICAgICByZXR1cm4gX19zeXN0ZW1fcHJvcGVydHlfZmluZF9jb21wYXQobmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBmaW5kX3Byb3BlcnR5KHJvb3Rfbm9kZSgpLCBuYW1lLCBzdHJsZW4obmFtZSksIE5VTEwsIDAsIGZhbHNlKTsKLX0KLQotaW50IF9fc3lzdGVtX3Byb3BlcnR5X3JlYWQoY29uc3QgcHJvcF9pbmZvICpwaSwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCi17Ci0gICAgdW5zaWduZWQgc2VyaWFsLCBsZW47Ci0KLSAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKGNvbXBhdF9tb2RlKSkgewotICAgICAgICByZXR1cm4gX19zeXN0ZW1fcHJvcGVydHlfcmVhZF9jb21wYXQocGksIG5hbWUsIHZhbHVlKTsKLSAgICB9Ci0KLSAgICBmb3IoOzspIHsKLSAgICAgICAgc2VyaWFsID0gcGktPnNlcmlhbDsKLSAgICAgICAgd2hpbGUoU0VSSUFMX0RJUlRZKHNlcmlhbCkpIHsKLSAgICAgICAgICAgIF9fZnV0ZXhfd2FpdCgodm9sYXRpbGUgdm9pZCAqKSZwaS0+c2VyaWFsLCBzZXJpYWwsIE5VTEwpOwotICAgICAgICAgICAgc2VyaWFsID0gcGktPnNlcmlhbDsKLSAgICAgICAgfQotICAgICAgICBsZW4gPSBTRVJJQUxfVkFMVUVfTEVOKHNlcmlhbCk7Ci0gICAgICAgIG1lbWNweSh2YWx1ZSwgcGktPnZhbHVlLCBsZW4gKyAxKTsKLSAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgICAgICBpZihzZXJpYWwgPT0gcGktPnNlcmlhbCkgewotICAgICAgICAgICAgaWYobmFtZSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KG5hbWUsIHBpLT5uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBsZW47Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWludCBfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCi17Ci0gICAgY29uc3QgcHJvcF9pbmZvICpwaSA9IF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQobmFtZSk7Ci0KLSAgICBpZihwaSAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkKHBpLCAwLCB2YWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdmFsdWVbMF0gPSAwOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLQotc3RhdGljIGludCBzZW5kX3Byb3BfbXNnKHByb3BfbXNnICptc2cpCi17Ci0gICAgc3RydWN0IHBvbGxmZCBwb2xsZmRzWzFdOwotICAgIHN0cnVjdCBzb2NrYWRkcl91biBhZGRyOwotICAgIHNvY2tsZW5fdCBhbGVuOwotICAgIHNpemVfdCBuYW1lbGVuOwotICAgIGludCBzOwotICAgIGludCByOwotICAgIGludCByZXN1bHQgPSAtMTsKLQotICAgIHMgPSBzb2NrZXQoQUZfTE9DQUwsIFNPQ0tfU1RSRUFNLCAwKTsKLSAgICBpZihzIDwgMCkgewotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKLSAgICBuYW1lbGVuID0gc3RybGVuKHByb3BlcnR5X3NlcnZpY2Vfc29ja2V0KTsKLSAgICBzdHJsY3B5KGFkZHIuc3VuX3BhdGgsIHByb3BlcnR5X3NlcnZpY2Vfc29ja2V0LCBzaXplb2YgYWRkci5zdW5fcGF0aCk7Ci0gICAgYWRkci5zdW5fZmFtaWx5ID0gQUZfTE9DQUw7Ci0gICAgYWxlbiA9IG5hbWVsZW4gKyBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKSArIDE7Ci0KLSAgICBpZihURU1QX0ZBSUxVUkVfUkVUUlkoY29ubmVjdChzLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCBhbGVuKSkgPCAwKSB7Ci0gICAgICAgIGNsb3NlKHMpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHIgPSBURU1QX0ZBSUxVUkVfUkVUUlkoc2VuZChzLCBtc2csIHNpemVvZihwcm9wX21zZyksIDApKTsKLQotICAgIGlmKHIgPT0gc2l6ZW9mKHByb3BfbXNnKSkgewotICAgICAgICAvLyBXZSBzdWNjZXNzZnVsbHkgd3JvdGUgdG8gdGhlIHByb3BlcnR5IHNlcnZlciBidXQgbm93IHdlCi0gICAgICAgIC8vIHdhaXQgZm9yIHRoZSBwcm9wZXJ0eSBzZXJ2ZXIgdG8gZmluaXNoIGl0cyB3b3JrLiAgSXQKLSAgICAgICAgLy8gYWNrbm93bGVkZ2VzIGl0cyBjb21wbGV0aW9uIGJ5IGNsb3NpbmcgdGhlIHNvY2tldCBzbyB3ZQotICAgICAgICAvLyBwb2xsIGhlcmUgKG9uIG5vdGhpbmcpLCB3YWl0aW5nIGZvciB0aGUgc29ja2V0IHRvIGNsb3NlLgotICAgICAgICAvLyBJZiB5b3UgJ2FkYiBzaGVsbCBzZXRwcm9wIGZvbyBiYXInIHlvdSdsbCBzZWUgdGhlIFBPTExIVVAKLSAgICAgICAgLy8gb25jZSB0aGUgc29ja2V0IGNsb3Nlcy4gIE91dCBvZiBwYXJhbm9pYSB3ZSBjYXAgb3VyIHBvbGwKLSAgICAgICAgLy8gYXQgMjUwIG1zLgotICAgICAgICBwb2xsZmRzWzBdLmZkID0gczsKLSAgICAgICAgcG9sbGZkc1swXS5ldmVudHMgPSAwOwotICAgICAgICByID0gVEVNUF9GQUlMVVJFX1JFVFJZKHBvbGwocG9sbGZkcywgMSwgMjUwIC8qIG1zICovKSk7Ci0gICAgICAgIGlmIChyID09IDEgJiYgKHBvbGxmZHNbMF0ucmV2ZW50cyAmIFBPTExIVVApICE9IDApIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJZ25vcmUgdGhlIHRpbWVvdXQgYW5kIHRyZWF0IGl0IGxpa2UgYSBzdWNjZXNzIGFueXdheS4KLSAgICAgICAgICAgIC8vIFRoZSBpbml0IHByb2Nlc3MgaXMgc2luZ2xlLXRocmVhZGVkIGFuZCBpdHMgcHJvcGVydHkKLSAgICAgICAgICAgIC8vIHNlcnZpY2UgaXMgc29tZXRpbWVzIHNsb3cgdG8gcmVzcG9uZCAocGVyaGFwcyBpdCdzIG9mZgotICAgICAgICAgICAgLy8gc3RhcnRpbmcgYSBjaGlsZCBwcm9jZXNzIG9yIHNvbWV0aGluZykgYW5kIHRodXMgdGhpcwotICAgICAgICAgICAgLy8gdGltZXMgb3V0IGFuZCB0aGUgY2FsbGVyIHRoaW5rcyBpdCBmYWlsZWQsIGV2ZW4gdGhvdWdoCi0gICAgICAgICAgICAvLyBpdCdzIHN0aWxsIGdldHRpbmcgYXJvdW5kIHRvIGl0LiAgU28gd2UgZmFrZSBpdCBoZXJlLAotICAgICAgICAgICAgLy8gbW9zdGx5IGZvciBjdGwuKiBwcm9wZXJ0aWVzLCBidXQgd2UgZG8gdHJ5IGFuZCB3YWl0IDI1MAotICAgICAgICAgICAgLy8gbXMgc28gY2FsbGVycyB3aG8gZG8gcmVhZC1hZnRlci13cml0ZSBjYW4gcmVsaWFibHkgc2VlCi0gICAgICAgICAgICAvLyB3aGF0IHRoZXkndmUgd3JpdHRlbi4gIE1vc3Qgb2YgdGhlIHRpbWUuCi0gICAgICAgICAgICAvLyBUT0RPOiBmaXggdGhlIHN5c3RlbSBwcm9wZXJ0aWVzIGRlc2lnbi4KLSAgICAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbG9zZShzKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbnQgX19zeXN0ZW1fcHJvcGVydHlfc2V0KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCi17Ci0gICAgaW50IGVycjsKLSAgICBwcm9wX21zZyBtc2c7Ci0KLSAgICBpZihrZXkgPT0gMCkgcmV0dXJuIC0xOwotICAgIGlmKHZhbHVlID09IDApIHZhbHVlID0gIiI7Ci0gICAgaWYoc3RybGVuKGtleSkgPj0gUFJPUF9OQU1FX01BWCkgcmV0dXJuIC0xOwotICAgIGlmKHN0cmxlbih2YWx1ZSkgPj0gUFJPUF9WQUxVRV9NQVgpIHJldHVybiAtMTsKLQotICAgIG1lbXNldCgmbXNnLCAwLCBzaXplb2YgbXNnKTsKLSAgICBtc2cuY21kID0gUFJPUF9NU0dfU0VUUFJPUDsKLSAgICBzdHJsY3B5KG1zZy5uYW1lLCBrZXksIHNpemVvZiBtc2cubmFtZSk7Ci0gICAgc3RybGNweShtc2cudmFsdWUsIHZhbHVlLCBzaXplb2YgbXNnLnZhbHVlKTsKLQotICAgIGVyciA9IHNlbmRfcHJvcF9tc2coJm1zZyk7Ci0gICAgaWYoZXJyIDwgMCkgewotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1pbnQgX19zeXN0ZW1fcHJvcGVydHlfd2FpdChjb25zdCBwcm9wX2luZm8gKnBpKQotewotICAgIHVuc2lnbmVkIG47Ci0gICAgaWYocGkgPT0gMCkgewotICAgICAgICBwcm9wX2FyZWEgKnBhID0gX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fOwotICAgICAgICBuID0gcGEtPnNlcmlhbDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgX19mdXRleF93YWl0KCZwYS0+c2VyaWFsLCBuLCBOVUxMKTsKLSAgICAgICAgfSB3aGlsZShuID09IHBhLT5zZXJpYWwpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG4gPSBwaS0+c2VyaWFsOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBfX2Z1dGV4X3dhaXQoKHZvbGF0aWxlIHZvaWQgKikmcGktPnNlcmlhbCwgbiwgTlVMTCk7Ci0gICAgICAgIH0gd2hpbGUobiA9PSBwaS0+c2VyaWFsKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBfX3N5c3RlbV9wcm9wZXJ0eV91cGRhdGUocHJvcF9pbmZvICpwaSwgY29uc3QgY2hhciAqdmFsdWUsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0gICAgcHJvcF9hcmVhICpwYSA9IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXzsKLQotICAgIGlmIChsZW4gPj0gUFJPUF9WQUxVRV9NQVgpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHBpLT5zZXJpYWwgPSBwaS0+c2VyaWFsIHwgMTsKLSAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7Ci0gICAgbWVtY3B5KHBpLT52YWx1ZSwgdmFsdWUsIGxlbiArIDEpOwotICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKLSAgICBwaS0+c2VyaWFsID0gKGxlbiA8PCAyNCkgfCAoKHBpLT5zZXJpYWwgKyAxKSAmIDB4ZmZmZmZmKTsKLSAgICBfX2Z1dGV4X3dha2UoJnBpLT5zZXJpYWwsIElOVDMyX01BWCk7Ci0KLSAgICBwYS0+c2VyaWFsKys7Ci0gICAgX19mdXRleF93YWtlKCZwYS0+c2VyaWFsLCBJTlQzMl9NQVgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBfX3N5c3RlbV9wcm9wZXJ0eV9hZGQoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IG5hbWVsZW4sCi0gICAgICAgICAgICBjb25zdCBjaGFyICp2YWx1ZSwgdW5zaWduZWQgaW50IHZhbHVlbGVuKQotewotICAgIHByb3BfYXJlYSAqcGEgPSBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX187Ci0gICAgY29uc3QgcHJvcF9pbmZvICpwaTsKLQotICAgIGlmIChuYW1lbGVuID49IFBST1BfTkFNRV9NQVgpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAodmFsdWVsZW4gPj0gUFJPUF9WQUxVRV9NQVgpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAobmFtZWxlbiA8IDEpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHBpID0gZmluZF9wcm9wZXJ0eShyb290X25vZGUoKSwgbmFtZSwgbmFtZWxlbiwgdmFsdWUsIHZhbHVlbGVuLCB0cnVlKTsKLSAgICBpZiAoIXBpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBwYS0+c2VyaWFsKys7Ci0gICAgX19mdXRleF93YWtlKCZwYS0+c2VyaWFsLCBJTlQzMl9NQVgpOwotICAgIHJldHVybiAwOwotfQotCi11bnNpZ25lZCBpbnQgX19zeXN0ZW1fcHJvcGVydHlfc2VyaWFsKGNvbnN0IHByb3BfaW5mbyAqcGkpCi17Ci0gICAgcmV0dXJuIHBpLT5zZXJpYWw7Ci19Ci0KLXVuc2lnbmVkIGludCBfX3N5c3RlbV9wcm9wZXJ0eV93YWl0X2FueSh1bnNpZ25lZCBpbnQgc2VyaWFsKQotewotICAgIHByb3BfYXJlYSAqcGEgPSBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX187Ci0KLSAgICBkbyB7Ci0gICAgICAgIF9fZnV0ZXhfd2FpdCgmcGEtPnNlcmlhbCwgc2VyaWFsLCBOVUxMKTsKLSAgICB9IHdoaWxlKHBhLT5zZXJpYWwgPT0gc2VyaWFsKTsKLQotICAgIHJldHVybiBwYS0+c2VyaWFsOwotfQotCi1zdHJ1Y3QgZmluZF9udGhfY29va2llIHsKLSAgICB1bnNpZ25lZCBjb3VudDsKLSAgICB1bnNpZ25lZCBuOwotICAgIGNvbnN0IHByb3BfaW5mbyAqcGk7Ci19OwotCi1zdGF0aWMgdm9pZCBmaW5kX250aF9mbihjb25zdCBwcm9wX2luZm8gKnBpLCB2b2lkICpwdHIpCi17Ci0gICAgc3RydWN0IGZpbmRfbnRoX2Nvb2tpZSAqY29va2llID0gcHRyOwotCi0gICAgaWYgKGNvb2tpZS0+biA9PSBjb29raWUtPmNvdW50KQotICAgICAgICBjb29raWUtPnBpID0gcGk7Ci0KLSAgICBjb29raWUtPmNvdW50Kys7Ci19Ci0KLWNvbnN0IHByb3BfaW5mbyAqX19zeXN0ZW1fcHJvcGVydHlfZmluZF9udGgodW5zaWduZWQgbikKLXsKLSAgICBzdHJ1Y3QgZmluZF9udGhfY29va2llIGNvb2tpZTsKLSAgICBpbnQgZXJyOwotCi0gICAgbWVtc2V0KCZjb29raWUsIDAsIHNpemVvZihjb29raWUpKTsKLSAgICBjb29raWUubiA9IG47Ci0KLSAgICBlcnIgPSBfX3N5c3RlbV9wcm9wZXJ0eV9mb3JlYWNoKGZpbmRfbnRoX2ZuLCAmY29va2llKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR1cm4gY29va2llLnBpOwotfQotCi1zdGF0aWMgaW50IGZvcmVhY2hfcHJvcGVydHkocHJvcF9vZmZfdCBvZmYsCi0gICAgICAgIHZvaWQgKCpwcm9wZm4pKGNvbnN0IHByb3BfaW5mbyAqcGksIHZvaWQgKmNvb2tpZSksIHZvaWQgKmNvb2tpZSkKLXsKLSAgICBwcm9wX2J0ICp0cmllID0gdG9fcHJvcF9vYmoob2ZmKTsKLSAgICBpZiAoIXRyaWUpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGlmICh0cmllLT5sZWZ0KSB7Ci0gICAgICAgIGludCBlcnIgPSBmb3JlYWNoX3Byb3BlcnR5KHRyaWUtPmxlZnQsIHByb3BmbiwgY29va2llKTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGlmICh0cmllLT5wcm9wKSB7Ci0gICAgICAgIHByb3BfaW5mbyAqaW5mbyA9IHRvX3Byb3Bfb2JqKHRyaWUtPnByb3ApOwotICAgICAgICBpZiAoIWluZm8pCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIHByb3BmbihpbmZvLCBjb29raWUpOwotICAgIH0KLSAgICBpZiAodHJpZS0+Y2hpbGRyZW4pIHsKLSAgICAgICAgaW50IGVyciA9IGZvcmVhY2hfcHJvcGVydHkodHJpZS0+Y2hpbGRyZW4sIHByb3BmbiwgY29va2llKTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGlmICh0cmllLT5yaWdodCkgewotICAgICAgICBpbnQgZXJyID0gZm9yZWFjaF9wcm9wZXJ0eSh0cmllLT5yaWdodCwgcHJvcGZuLCBjb29raWUpOwotICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IF9fc3lzdGVtX3Byb3BlcnR5X2ZvcmVhY2godm9pZCAoKnByb3BmbikoY29uc3QgcHJvcF9pbmZvICpwaSwgdm9pZCAqY29va2llKSwKLSAgICAgICAgdm9pZCAqY29va2llKQotewotICAgIGlmIChfX3ByZWRpY3RfZmFsc2UoY29tcGF0X21vZGUpKSB7Ci0gICAgICAgIHJldHVybiBfX3N5c3RlbV9wcm9wZXJ0eV9mb3JlYWNoX2NvbXBhdChwcm9wZm4sIGNvb2tpZSk7Ci0JfQotICAgIHJldHVybiBmb3JlYWNoX3Byb3BlcnR5KDAsIHByb3BmbiwgY29va2llKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzLmNwcCBiL2xpYmMvYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTY0YzM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc3lzdGVtX3Byb3BlcnRpZXMuY3BwCkBAIC0wLDAgKzEsNzM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8bmV3PgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxwb2xsLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy91bi5oPgorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2RlZmluZSBfUkVBTExZX0lOQ0xVREVfU1lTX19TWVNURU1fUFJPUEVSVElFU19IXworI2luY2x1ZGUgPHN5cy9fc3lzdGVtX3Byb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KKworI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2F0b21pY19pbmxpbmUuaCIKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19mdXRleC5oIgorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX21hY3Jvcy5oIgorCitzdGF0aWMgY29uc3QgY2hhciBwcm9wZXJ0eV9zZXJ2aWNlX3NvY2tldFtdID0gIi9kZXYvc29ja2V0LyIgUFJPUF9TRVJWSUNFX05BTUU7CisKKworLyoKKyAqIFByb3BlcnRpZXMgYXJlIHN0b3JlZCBpbiBhIGh5YnJpZCB0cmllL2JpbmFyeSB0cmVlIHN0cnVjdHVyZS4KKyAqIEVhY2ggcHJvcGVydHkncyBuYW1lIGlzIGRlbGltaXRlZCBhdCAnLicgY2hhcmFjdGVycywgYW5kIHRoZSB0b2tlbnMgYXJlIHB1dAorICogaW50byBhIHRyaWUgc3RydWN0dXJlLiAgU2libGluZ3MgYXQgZWFjaCBsZXZlbCBvZiB0aGUgdHJpZSBhcmUgc3RvcmVkIGluIGEKKyAqIGJpbmFyeSB0cmVlLiAgRm9yIGluc3RhbmNlLCAicm8uc2VjdXJlIj0iMSIgY291bGQgYmUgc3RvcmVkIGFzIGZvbGxvd3M6CisgKgorICogKy0tLS0tKyAgIGNoaWxkcmVuICAgICstLS0tKyAgIGNoaWxkcmVuICAgICstLS0tLS0tLSsKKyAqIHwgICAgIHwtLS0tLS0tLS0tLS0tLT58IHJvIHwtLS0tLS0tLS0tLS0tLT58IHNlY3VyZSB8CisgKiArLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICAgICAgIC8gICAgXCAgICAgICAgICAgICAgICAvICAgfAorICogICAgICAgICAgICAgICAgIGxlZnQgLyAgICAgIFwgcmlnaHQgICBsZWZ0IC8gICAgfCAgcHJvcCAgICs9PT09PT09PT09PSsKKyAqICAgICAgICAgICAgICAgICAgICAgdiAgICAgICAgdiAgICAgICAgICAgIHYgICAgICstLS0tLS0tLT58IHJvLnNlY3VyZSB8CisgKiAgICAgICAgICAgICAgICAgICstLS0tLSsgICArLS0tLS0rICAgICArLS0tLS0rICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICB8IG5ldCB8ICAgfCBzeXMgfCAgICAgfCBjb20gfCAgICAgICAgICAgIHwgICAgIDEgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgKy0tLS0tKyAgICstLS0tLSsgICAgICstLS0tLSsgICAgICAgICAgICArPT09PT09PT09PT0rCisgKi8KKworLy8gUmVwcmVzZW50cyBhIG5vZGUgaW4gdGhlIHRyaWUuCitzdHJ1Y3QgcHJvcF9idCB7CisgICAgdWludDhfdCBuYW1lbGVuOworICAgIHVpbnQ4X3QgcmVzZXJ2ZWRbM107CisKKyAgICB2b2xhdGlsZSB1aW50MzJfdCBwcm9wOworCisgICAgdm9sYXRpbGUgdWludDMyX3QgbGVmdDsKKyAgICB2b2xhdGlsZSB1aW50MzJfdCByaWdodDsKKworICAgIHZvbGF0aWxlIHVpbnQzMl90IGNoaWxkcmVuOworCisgICAgY2hhciBuYW1lWzBdOworCisgICAgcHJvcF9idChjb25zdCBjaGFyICpuYW1lLCBjb25zdCB1aW50OF90IG5hbWVfbGVuZ3RoKSB7CisgICAgICAgIHRoaXMtPm5hbWVsZW4gPSBuYW1lX2xlbmd0aDsKKyAgICAgICAgbWVtY3B5KHRoaXMtPm5hbWUsIG5hbWUsIG5hbWVfbGVuZ3RoKTsKKyAgICAgICAgdGhpcy0+bmFtZVtuYW1lX2xlbmd0aF0gPSAnXDAnOworICAgICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihwcm9wX2J0KTsKK307CisKK3N0cnVjdCBwcm9wX2FyZWEgeworICAgIHVpbnQzMl90IGJ5dGVzX3VzZWQ7CisgICAgdm9sYXRpbGUgdWludDMyX3Qgc2VyaWFsOworICAgIHVpbnQzMl90IG1hZ2ljOworICAgIHVpbnQzMl90IHZlcnNpb247CisgICAgdWludDMyX3QgcmVzZXJ2ZWRbMjhdOworICAgIGNoYXIgZGF0YVswXTsKKworICAgIHByb3BfYXJlYShjb25zdCB1aW50MzJfdCBtYWdpYywgY29uc3QgdWludDMyX3QgdmVyc2lvbikgOgorICAgICAgICBzZXJpYWwoMCksIG1hZ2ljKG1hZ2ljKSwgdmVyc2lvbih2ZXJzaW9uKSB7CisgICAgICAgIG1lbXNldChyZXNlcnZlZCwgMCwgc2l6ZW9mKHJlc2VydmVkKSk7CisgICAgICAgIC8vIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgdGhlIHJvb3Qgbm9kZS4KKyAgICAgICAgYnl0ZXNfdXNlZCA9IHNpemVvZihwcm9wX2J0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKHByb3BfYXJlYSk7Cit9OworCitzdHJ1Y3QgcHJvcF9pbmZvIHsKKyAgICB2b2xhdGlsZSB1aW50MzJfdCBzZXJpYWw7CisgICAgY2hhciB2YWx1ZVtQUk9QX1ZBTFVFX01BWF07CisgICAgY2hhciBuYW1lWzBdOworCisgICAgcHJvcF9pbmZvKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHVpbnQ4X3QgbmFtZWxlbiwgY29uc3QgY2hhciAqdmFsdWUsCisgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgdmFsdWVsZW4pIHsKKyAgICAgICAgbWVtY3B5KHRoaXMtPm5hbWUsIG5hbWUsIG5hbWVsZW4pOworICAgICAgICB0aGlzLT5uYW1lW25hbWVsZW5dID0gJ1wwJzsKKyAgICAgICAgdGhpcy0+c2VyaWFsID0gKHZhbHVlbGVuIDw8IDI0KTsKKyAgICAgICAgbWVtY3B5KHRoaXMtPnZhbHVlLCB2YWx1ZSwgdmFsdWVsZW4pOworICAgICAgICB0aGlzLT52YWx1ZVt2YWx1ZWxlbl0gPSAnXDAnOworICAgICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04ocHJvcF9pbmZvKTsKK307CisKK3N0cnVjdCBmaW5kX250aF9jb29raWUgeworICAgIHVpbnQzMl90IGNvdW50OworICAgIGNvbnN0IHVpbnQzMl90IG47CisgICAgY29uc3QgcHJvcF9pbmZvICpwaTsKKworICAgIGZpbmRfbnRoX2Nvb2tpZSh1aW50MzJfdCBuKSA6IGNvdW50KDApLCBuKG4pLCBwaShOVUxMKSB7CisgICAgfQorfTsKKworc3RhdGljIGNoYXIgcHJvcGVydHlfZmlsZW5hbWVbUEFUSF9NQVhdID0gUFJPUF9GSUxFTkFNRTsKK3N0YXRpYyBib29sIGNvbXBhdF9tb2RlID0gZmFsc2U7CitzdGF0aWMgc2l6ZV90IHBhX2RhdGFfc2l6ZTsKK3N0YXRpYyBzaXplX3QgcGFfc2l6ZTsKKworLy8gTk9URTogVGhpcyBpc24ndCBzdGF0aWMgYmVjYXVzZSBzeXN0ZW1fcHJvcGVydGllc19jb21wYXQuYworLy8gcmVxdWlyZXMgaXQuCitwcm9wX2FyZWEgKl9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXyA9IE5VTEw7CisKK3N0YXRpYyBpbnQgZ2V0X2ZkX2Zyb21fZW52KHZvaWQpCit7CisgICAgLy8gVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb25zaXN0ZXMgb2YgdHdvIGRlY2ltYWwgaW50ZWdlcgorICAgIC8vIHZhbHVlcyBzZXBhcmF0ZWQgYnkgYSAiLCIuIFRoZSBmaXJzdCB2YWx1ZSBpcyBhIGZpbGUgZGVzY3JpcHRvcgorICAgIC8vIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBzaXplIG9mIHRoZSBzeXN0ZW0gcHJvcGVydGllcyBhcmVhLiBUaGUKKyAgICAvLyBzaXplIGlzIGN1cnJlbnRseSB1bnVzZWQuCisgICAgY2hhciAqZW52ID0gZ2V0ZW52KCJBTkRST0lEX1BST1BFUlRZX1dPUktTUEFDRSIpOworCisgICAgaWYgKCFlbnYpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiBhdG9pKGVudik7Cit9CisKK3N0YXRpYyBpbnQgbWFwX3Byb3BfYXJlYV9ydygpCit7CisgICAgLyogZGV2IGlzIGEgdG1wZnMgdGhhdCB3ZSBjYW4gdXNlIHRvIGNhcnZlIGEgc2hhcmVkIHdvcmtzcGFjZQorICAgICAqIG91dCBvZiwgc28gbGV0J3MgZG8gdGhhdC4uLgorICAgICAqLworICAgIGNvbnN0IGludCBmZCA9IG9wZW4ocHJvcGVydHlfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBPX1JEV1IgfCBPX0NSRUFUIHwgT19OT0ZPTExPVyB8IE9fQ0xPRVhFQyB8IE9fRVhDTCwgMDQ0NCk7CisKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIGlmIChlcnJubyA9PSBFQUNDRVMpIHsKKyAgICAgICAgICAgIC8qIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBwcm9jZXNzIGhhcyBhbHJlYWR5CisgICAgICAgICAgICAgKiBtYXBwZWQgdGhlIHBhZ2UgaW4gYW5kIHNlZ2ZhdWx0cyB3aGVuIHRyeWluZyB0byB3cml0ZSB0byBpdAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBhYm9ydCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvLyBUT0RPOiBJcyB0aGlzIHJlYWxseSByZXF1aXJlZCA/IERvZXMgYW5kcm9pZCBydW4gb24gYW55IGtlcm5lbHMgdGhhdAorICAgIC8vIGRvbid0IHN1cHBvcnQgT19DTE9FWEVDID8KKyAgICBjb25zdCBpbnQgcmV0ID0gZmNudGwoZmQsIEZfU0VURkQsIEZEX0NMT0VYRUMpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChmdHJ1bmNhdGUoZmQsIFBBX1NJWkUpIDwgMCkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBwYV9zaXplID0gUEFfU0laRTsKKyAgICBwYV9kYXRhX3NpemUgPSBwYV9zaXplIC0gc2l6ZW9mKHByb3BfYXJlYSk7CisgICAgY29tcGF0X21vZGUgPSBmYWxzZTsKKworICAgIHZvaWQgKmNvbnN0IG1lbW9yeV9hcmVhID0gbW1hcChOVUxMLCBwYV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7CisgICAgaWYgKG1lbW9yeV9hcmVhID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcHJvcF9hcmVhICpwYSA9IG5ldyhtZW1vcnlfYXJlYSkgcHJvcF9hcmVhKFBST1BfQVJFQV9NQUdJQywgUFJPUF9BUkVBX1ZFUlNJT04pOworCisgICAgLyogcGx1ZyBpbnRvIHRoZSBsaWIgcHJvcGVydHkgc2VydmljZXMgKi8KKyAgICBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX18gPSBwYTsKKworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXBfZmRfcm8oY29uc3QgaW50IGZkKSB7CisgICAgc3RydWN0IHN0YXQgZmRfc3RhdDsKKyAgICBpZiAoZnN0YXQoZmQsICZmZF9zdGF0KSA8IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICgoZmRfc3RhdC5zdF91aWQgIT0gMCkKKyAgICAgICAgICAgIHx8IChmZF9zdGF0LnN0X2dpZCAhPSAwKQorICAgICAgICAgICAgfHwgKChmZF9zdGF0LnN0X21vZGUgJiAoU19JV0dSUCB8IFNfSVdPVEgpKSAhPSAwKQorICAgICAgICAgICAgfHwgKGZkX3N0YXQuc3Rfc2l6ZSA8IHN0YXRpY19jYXN0PG9mZl90PihzaXplb2YocHJvcF9hcmVhKSkpICkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcGFfc2l6ZSA9IGZkX3N0YXQuc3Rfc2l6ZTsKKyAgICBwYV9kYXRhX3NpemUgPSBwYV9zaXplIC0gc2l6ZW9mKHByb3BfYXJlYSk7CisKKyAgICB2b2lkKiBjb25zdCBtYXBfcmVzdWx0ID0gbW1hcChOVUxMLCBwYV9zaXplLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGZkLCAwKTsKKyAgICBpZiAobWFwX3Jlc3VsdCA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBwcm9wX2FyZWEqIHBhID0gcmVpbnRlcnByZXRfY2FzdDxwcm9wX2FyZWEqPihtYXBfcmVzdWx0KTsKKyAgICBpZiAoKHBhLT5tYWdpYyAhPSBQUk9QX0FSRUFfTUFHSUMpIHx8IChwYS0+dmVyc2lvbiAhPSBQUk9QX0FSRUFfVkVSU0lPTiAmJgorICAgICAgICAgICAgICAgIHBhLT52ZXJzaW9uICE9IFBST1BfQVJFQV9WRVJTSU9OX0NPTVBBVCkpIHsKKyAgICAgICAgbXVubWFwKHBhLCBwYV9zaXplKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChwYS0+dmVyc2lvbiA9PSBQUk9QX0FSRUFfVkVSU0lPTl9DT01QQVQpIHsKKyAgICAgICAgY29tcGF0X21vZGUgPSB0cnVlOworICAgIH0KKworICAgIF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXyA9IHBhOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hcF9wcm9wX2FyZWEoKQoreworICAgIGludCBmZChvcGVuKHByb3BlcnR5X2ZpbGVuYW1lLCBPX1JET05MWSB8IE9fTk9GT0xMT1cgfCBPX0NMT0VYRUMpKTsKKyAgICBpZiAoZmQgPj0gMCkgeworICAgICAgICAvKiBGb3Igb2xkIGtlcm5lbHMgdGhhdCBkb24ndCBzdXBwb3J0IE9fQ0xPRVhFQyAqLworICAgICAgICBjb25zdCBpbnQgcmV0ID0gZmNudGwoZmQsIEZfU0VURkQsIEZEX0NMT0VYRUMpOworICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBjbG9zZV9mZCA9IHRydWU7CisgICAgaWYgKChmZCA8IDApICYmIChlcnJubyA9PSBFTk9FTlQpKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgaWYgdGhlIGZpbGUgZG9lc24ndAorICAgICAgICAgKiBleGlzdCwgd2UgdXNlIHRoZSBlbnZpcm9ubWVudCB0byBnZXQgdGhlIGZpbGUgZGVzY3JpcHRvci4KKyAgICAgICAgICogRm9yIHNlY3VyaXR5IHJlYXNvbnMsIHdlIG9ubHkgdXNlIHRoaXMgYmFja3VwIGlmIHRoZSBrZXJuZWwKKyAgICAgICAgICogcmV0dXJucyBFTk9FTlQuIFdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBiYWNrdXAgaWYgdGhlIGtlcm5lbAorICAgICAgICAgKiByZXR1cm5zIG90aGVyIGVycm9ycyBzdWNoIGFzIEVOT01FTSBvciBFTkZJTEUsIHNpbmNlIGl0CisgICAgICAgICAqIG1pZ2h0IGJlIHBvc3NpYmxlIGZvciBhbiBleHRlcm5hbCBwcm9ncmFtIHRvIHRyaWdnZXIgdGhpcworICAgICAgICAgKiBjb25kaXRpb24uCisgICAgICAgICAqLworICAgICAgICBmZCA9IGdldF9mZF9mcm9tX2VudigpOworICAgICAgICBjbG9zZV9mZCA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGNvbnN0IGludCBtYXBfcmVzdWx0ID0gbWFwX2ZkX3JvKGZkKTsKKyAgICBpZiAoY2xvc2VfZmQpIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgIH0KKworICAgIHJldHVybiBtYXBfcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCAqYWxsb2NhdGVfb2JqKGNvbnN0IHNpemVfdCBzaXplLCB1aW50MzJfdCAqY29uc3Qgb2ZmKQoreworICAgIHByb3BfYXJlYSAqcGEgPSBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX187CisgICAgY29uc3Qgc2l6ZV90IGFsaWduZWQgPSBCSU9OSUNfQUxJR04oc2l6ZSwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgaWYgKHBhLT5ieXRlc191c2VkICsgYWxpZ25lZCA+IHBhX2RhdGFfc2l6ZSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAqb2ZmID0gcGEtPmJ5dGVzX3VzZWQ7CisgICAgcGEtPmJ5dGVzX3VzZWQgKz0gYWxpZ25lZDsKKyAgICByZXR1cm4gcGEtPmRhdGEgKyAqb2ZmOworfQorCitzdGF0aWMgcHJvcF9idCAqbmV3X3Byb3BfYnQoY29uc3QgY2hhciAqbmFtZSwgdWludDhfdCBuYW1lbGVuLCB1aW50MzJfdCAqY29uc3Qgb2ZmKQoreworICAgIHVpbnQzMl90IG5ld19vZmZzZXQ7CisgICAgdm9pZCAqY29uc3Qgb2Zmc2V0ID0gYWxsb2NhdGVfb2JqKHNpemVvZihwcm9wX2J0KSArIG5hbWVsZW4gKyAxLCAmbmV3X29mZnNldCk7CisgICAgaWYgKG9mZnNldCkgeworICAgICAgICBwcm9wX2J0KiBidCA9IG5ldyhvZmZzZXQpIHByb3BfYnQobmFtZSwgbmFtZWxlbik7CisgICAgICAgICpvZmYgPSBuZXdfb2Zmc2V0OworICAgICAgICByZXR1cm4gYnQ7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBwcm9wX2luZm8gKm5ld19wcm9wX2luZm8oY29uc3QgY2hhciAqbmFtZSwgdWludDhfdCBuYW1lbGVuLAorICAgICAgICBjb25zdCBjaGFyICp2YWx1ZSwgdWludDhfdCB2YWx1ZWxlbiwgdWludDMyX3QgKmNvbnN0IG9mZikKK3sKKyAgICB1aW50MzJfdCBvZmZfdG1wOworICAgIHZvaWQqIGNvbnN0IG9mZnNldCA9IGFsbG9jYXRlX29iaihzaXplb2YocHJvcF9pbmZvKSArIG5hbWVsZW4gKyAxLCAmb2ZmX3RtcCk7CisgICAgaWYgKG9mZnNldCkgeworICAgICAgICBwcm9wX2luZm8qIGluZm8gPSBuZXcob2Zmc2V0KSBwcm9wX2luZm8obmFtZSwgbmFtZWxlbiwgdmFsdWUsIHZhbHVlbGVuKTsKKyAgICAgICAgKm9mZiA9IG9mZl90bXA7CisgICAgICAgIHJldHVybiBpbmZvOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqdG9fcHJvcF9vYmooY29uc3QgdWludDMyX3Qgb2ZmKQoreworICAgIGlmIChvZmYgPiBwYV9kYXRhX3NpemUpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiAoX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fLT5kYXRhICsgb2ZmKTsKK30KKworc3RhdGljIHByb3BfYnQgKnJvb3Rfbm9kZSgpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cHJvcF9idCo+KHRvX3Byb3Bfb2JqKDApKTsKK30KKworc3RhdGljIGludCBjbXBfcHJvcF9uYW1lKGNvbnN0IGNoYXIgKm9uZSwgdWludDhfdCBvbmVfbGVuLCBjb25zdCBjaGFyICp0d28sCisgICAgICAgIHVpbnQ4X3QgdHdvX2xlbikKK3sKKyAgICBpZiAob25lX2xlbiA8IHR3b19sZW4pCisgICAgICAgIHJldHVybiAtMTsKKyAgICBlbHNlIGlmIChvbmVfbGVuID4gdHdvX2xlbikKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RybmNtcChvbmUsIHR3bywgb25lX2xlbik7Cit9CisKK3N0YXRpYyBwcm9wX2J0ICpmaW5kX3Byb3BfYnQocHJvcF9idCAqY29uc3QgYnQsIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbmFtZWxlbiwgYm9vbCBhbGxvY19pZl9uZWVkZWQpCit7CisKKyAgICBwcm9wX2J0KiBjdXJyZW50ID0gYnQ7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKCFjdXJyZW50KSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGludCByZXQgPSBjbXBfcHJvcF9uYW1lKG5hbWUsIG5hbWVsZW4sIGN1cnJlbnQtPm5hbWUsIGN1cnJlbnQtPm5hbWVsZW4pOworICAgICAgICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50LT5sZWZ0KSB7CisgICAgICAgICAgICAgICAgY3VycmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8cHJvcF9idCo+KHRvX3Byb3Bfb2JqKGN1cnJlbnQtPmxlZnQpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFhbGxvY19pZl9uZWVkZWQpIHsKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhlcmUgaXNuJ3QgYSByYWNlIGNvbmRpdGlvbiBoZXJlLiAiY2xpZW50cyIgbmV2ZXIKKyAgICAgICAgICAgICAgICAvLyByZWFjaCB0aGlzIGNvZGUtcGF0aCBzaW5jZSBJdCdzIG9ubHkgdGhlIChzaW5nbGUgdGhyZWFkZWQpIHNlcnZlcgorICAgICAgICAgICAgICAgIC8vIHRoYXQgYWxsb2NhdGVzIG5ldyBub2Rlcy4gVGhvdWdoICJidC0+bGVmdCIgaXMgdm9sYXRpbGUsIGl0IGNhbid0CisgICAgICAgICAgICAgICAgLy8gaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHZhbHVlIHdhcyBsYXN0IHJlYWQuCisgICAgICAgICAgICAgICAgdWludDMyX3QgbmV3X29mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgcHJvcF9idCogbmV3X2J0ID0gbmV3X3Byb3BfYnQobmFtZSwgbmFtZWxlbiwgJm5ld19vZmZzZXQpOworICAgICAgICAgICAgICAgIGlmIChuZXdfYnQpIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudC0+bGVmdCA9IG5ld19vZmZzZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBuZXdfYnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoY3VycmVudC0+cmlnaHQpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gcmVpbnRlcnByZXRfY2FzdDxwcm9wX2J0Kj4odG9fcHJvcF9vYmooY3VycmVudC0+cmlnaHQpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFhbGxvY19pZl9uZWVkZWQpIHsKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBuZXdfb2Zmc2V0OworICAgICAgICAgICAgICAgIHByb3BfYnQqIG5ld19idCA9IG5ld19wcm9wX2J0KG5hbWUsIG5hbWVsZW4sICZuZXdfb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAobmV3X2J0KSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPnJpZ2h0ID0gbmV3X29mZnNldDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ld19idDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGNvbnN0IHByb3BfaW5mbyAqZmluZF9wcm9wZXJ0eShwcm9wX2J0ICpjb25zdCB0cmllLCBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICB1aW50OF90IG5hbWVsZW4sIGNvbnN0IGNoYXIgKnZhbHVlLCB1aW50OF90IHZhbHVlbGVuLAorICAgICAgICBib29sIGFsbG9jX2lmX25lZWRlZCkKK3sKKyAgICBpZiAoIXRyaWUpIHJldHVybiBOVUxMOworCisgICAgY29uc3QgY2hhciAqcmVtYWluaW5nX25hbWUgPSBuYW1lOworICAgIHByb3BfYnQqIGN1cnJlbnQgPSB0cmllOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKnNlcCA9IHN0cmNocihyZW1haW5pbmdfbmFtZSwgJy4nKTsKKyAgICAgICAgY29uc3QgYm9vbCB3YW50X3N1YnRyZWUgPSAoc2VwICE9IE5VTEwpOworICAgICAgICBjb25zdCB1aW50OF90IHN1YnN0cl9zaXplID0gKHdhbnRfc3VidHJlZSkgPworICAgICAgICAgICAgc2VwIC0gcmVtYWluaW5nX25hbWUgOiBzdHJsZW4ocmVtYWluaW5nX25hbWUpOworCisgICAgICAgIGlmICghc3Vic3RyX3NpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgcHJvcF9idCogcm9vdCA9IE5VTEw7CisgICAgICAgIGlmIChjdXJyZW50LT5jaGlsZHJlbikgeworICAgICAgICAgICAgcm9vdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8cHJvcF9idCo+KHRvX3Byb3Bfb2JqKGN1cnJlbnQtPmNoaWxkcmVuKSk7CisgICAgICAgIH0gZWxzZSBpZiAoYWxsb2NfaWZfbmVlZGVkKSB7CisgICAgICAgICAgICB1aW50MzJfdCBuZXdfYnRfb2Zmc2V0OworICAgICAgICAgICAgcm9vdCA9IG5ld19wcm9wX2J0KHJlbWFpbmluZ19uYW1lLCBzdWJzdHJfc2l6ZSwgJm5ld19idF9vZmZzZXQpOworICAgICAgICAgICAgaWYgKHJvb3QpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50LT5jaGlsZHJlbiA9IG5ld19idF9vZmZzZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXJvb3QpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgY3VycmVudCA9IGZpbmRfcHJvcF9idChyb290LCByZW1haW5pbmdfbmFtZSwgc3Vic3RyX3NpemUsIGFsbG9jX2lmX25lZWRlZCk7CisgICAgICAgIGlmICghY3VycmVudCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXdhbnRfc3VidHJlZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHJlbWFpbmluZ19uYW1lID0gc2VwICsgMTsKKyAgICB9CisKKyAgICBpZiAoY3VycmVudC0+cHJvcCkgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwcm9wX2luZm8qPih0b19wcm9wX29iaihjdXJyZW50LT5wcm9wKSk7CisgICAgfSBlbHNlIGlmIChhbGxvY19pZl9uZWVkZWQpIHsKKyAgICAgICAgdWludDMyX3QgbmV3X2luZm9fb2Zmc2V0OworICAgICAgICBwcm9wX2luZm8qIG5ld19pbmZvID0gbmV3X3Byb3BfaW5mbyhuYW1lLCBuYW1lbGVuLCB2YWx1ZSwgdmFsdWVsZW4sICZuZXdfaW5mb19vZmZzZXQpOworICAgICAgICBpZiAobmV3X2luZm8pIHsKKyAgICAgICAgICAgIGN1cnJlbnQtPnByb3AgPSBuZXdfaW5mb19vZmZzZXQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3X2luZm87CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCitzdGF0aWMgaW50IHNlbmRfcHJvcF9tc2coY29uc3QgcHJvcF9tc2cgKm1zZykKK3sKKyAgICBjb25zdCBpbnQgZmQgPSBzb2NrZXQoQUZfTE9DQUwsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBjb25zdCBzaXplX3QgbmFtZWxlbiA9IHN0cmxlbihwcm9wZXJ0eV9zZXJ2aWNlX3NvY2tldCk7CisKKyAgICBzb2NrYWRkcl91biBhZGRyOworICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICBzdHJsY3B5KGFkZHIuc3VuX3BhdGgsIHByb3BlcnR5X3NlcnZpY2Vfc29ja2V0LCBzaXplb2YoYWRkci5zdW5fcGF0aCkpOworICAgIGFkZHIuc3VuX2ZhbWlseSA9IEFGX0xPQ0FMOworICAgIHNvY2tsZW5fdCBhbGVuID0gbmFtZWxlbiArIG9mZnNldG9mKHNvY2thZGRyX3VuLCBzdW5fcGF0aCkgKyAxOworICAgIGlmIChURU1QX0ZBSUxVUkVfUkVUUlkoY29ubmVjdChmZCwgcmVpbnRlcnByZXRfY2FzdDxzb2NrYWRkcio+KCZhZGRyKSwgYWxlbikpIDwgMCkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQgbnVtX2J5dGVzID0gVEVNUF9GQUlMVVJFX1JFVFJZKHNlbmQoZmQsIG1zZywgc2l6ZW9mKHByb3BfbXNnKSwgMCkpOworCisgICAgaW50IHJlc3VsdCA9IC0xOworICAgIGlmIChudW1fYnl0ZXMgPT0gc2l6ZW9mKHByb3BfbXNnKSkgeworICAgICAgICAvLyBXZSBzdWNjZXNzZnVsbHkgd3JvdGUgdG8gdGhlIHByb3BlcnR5IHNlcnZlciBidXQgbm93IHdlCisgICAgICAgIC8vIHdhaXQgZm9yIHRoZSBwcm9wZXJ0eSBzZXJ2ZXIgdG8gZmluaXNoIGl0cyB3b3JrLiAgSXQKKyAgICAgICAgLy8gYWNrbm93bGVkZ2VzIGl0cyBjb21wbGV0aW9uIGJ5IGNsb3NpbmcgdGhlIHNvY2tldCBzbyB3ZQorICAgICAgICAvLyBwb2xsIGhlcmUgKG9uIG5vdGhpbmcpLCB3YWl0aW5nIGZvciB0aGUgc29ja2V0IHRvIGNsb3NlLgorICAgICAgICAvLyBJZiB5b3UgJ2FkYiBzaGVsbCBzZXRwcm9wIGZvbyBiYXInIHlvdSdsbCBzZWUgdGhlIFBPTExIVVAKKyAgICAgICAgLy8gb25jZSB0aGUgc29ja2V0IGNsb3Nlcy4gIE91dCBvZiBwYXJhbm9pYSB3ZSBjYXAgb3VyIHBvbGwKKyAgICAgICAgLy8gYXQgMjUwIG1zLgorICAgICAgICBwb2xsZmQgcG9sbGZkc1sxXTsKKyAgICAgICAgcG9sbGZkc1swXS5mZCA9IGZkOworICAgICAgICBwb2xsZmRzWzBdLmV2ZW50cyA9IDA7CisgICAgICAgIGNvbnN0IGludCBwb2xsX3Jlc3VsdCA9IFRFTVBfRkFJTFVSRV9SRVRSWShwb2xsKHBvbGxmZHMsIDEsIDI1MCAvKiBtcyAqLykpOworICAgICAgICBpZiAocG9sbF9yZXN1bHQgPT0gMSAmJiAocG9sbGZkc1swXS5yZXZlbnRzICYgUE9MTEhVUCkgIT0gMCkgeworICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIElnbm9yZSB0aGUgdGltZW91dCBhbmQgdHJlYXQgaXQgbGlrZSBhIHN1Y2Nlc3MgYW55d2F5LgorICAgICAgICAgICAgLy8gVGhlIGluaXQgcHJvY2VzcyBpcyBzaW5nbGUtdGhyZWFkZWQgYW5kIGl0cyBwcm9wZXJ0eQorICAgICAgICAgICAgLy8gc2VydmljZSBpcyBzb21ldGltZXMgc2xvdyB0byByZXNwb25kIChwZXJoYXBzIGl0J3Mgb2ZmCisgICAgICAgICAgICAvLyBzdGFydGluZyBhIGNoaWxkIHByb2Nlc3Mgb3Igc29tZXRoaW5nKSBhbmQgdGh1cyB0aGlzCisgICAgICAgICAgICAvLyB0aW1lcyBvdXQgYW5kIHRoZSBjYWxsZXIgdGhpbmtzIGl0IGZhaWxlZCwgZXZlbiB0aG91Z2gKKyAgICAgICAgICAgIC8vIGl0J3Mgc3RpbGwgZ2V0dGluZyBhcm91bmQgdG8gaXQuICBTbyB3ZSBmYWtlIGl0IGhlcmUsCisgICAgICAgICAgICAvLyBtb3N0bHkgZm9yIGN0bC4qIHByb3BlcnRpZXMsIGJ1dCB3ZSBkbyB0cnkgYW5kIHdhaXQgMjUwCisgICAgICAgICAgICAvLyBtcyBzbyBjYWxsZXJzIHdobyBkbyByZWFkLWFmdGVyLXdyaXRlIGNhbiByZWxpYWJseSBzZWUKKyAgICAgICAgICAgIC8vIHdoYXQgdGhleSd2ZSB3cml0dGVuLiAgTW9zdCBvZiB0aGUgdGltZS4KKyAgICAgICAgICAgIC8vIFRPRE86IGZpeCB0aGUgc3lzdGVtIHByb3BlcnRpZXMgZGVzaWduLgorICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBmaW5kX250aF9mbihjb25zdCBwcm9wX2luZm8gKnBpLCB2b2lkICpwdHIpCit7CisgICAgZmluZF9udGhfY29va2llICpjb29raWUgPSByZWludGVycHJldF9jYXN0PGZpbmRfbnRoX2Nvb2tpZSo+KHB0cik7CisKKyAgICBpZiAoY29va2llLT5uID09IGNvb2tpZS0+Y291bnQpCisgICAgICAgIGNvb2tpZS0+cGkgPSBwaTsKKworICAgIGNvb2tpZS0+Y291bnQrKzsKK30KKworc3RhdGljIGludCBmb3JlYWNoX3Byb3BlcnR5KGNvbnN0IHVpbnQzMl90IG9mZiwKKyAgICAgICAgdm9pZCAoKnByb3BmbikoY29uc3QgcHJvcF9pbmZvICpwaSwgdm9pZCAqY29va2llKSwgdm9pZCAqY29va2llKQoreworICAgIHByb3BfYnQgKnRyaWUgPSByZWludGVycHJldF9jYXN0PHByb3BfYnQqPih0b19wcm9wX29iaihvZmYpKTsKKyAgICBpZiAoIXRyaWUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICh0cmllLT5sZWZ0KSB7CisgICAgICAgIGNvbnN0IGludCBlcnIgPSBmb3JlYWNoX3Byb3BlcnR5KHRyaWUtPmxlZnQsIHByb3BmbiwgY29va2llKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICh0cmllLT5wcm9wKSB7CisgICAgICAgIHByb3BfaW5mbyAqaW5mbyA9IHJlaW50ZXJwcmV0X2Nhc3Q8cHJvcF9pbmZvKj4odG9fcHJvcF9vYmoodHJpZS0+cHJvcCkpOworICAgICAgICBpZiAoIWluZm8pCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHByb3BmbihpbmZvLCBjb29raWUpOworICAgIH0KKyAgICBpZiAodHJpZS0+Y2hpbGRyZW4pIHsKKyAgICAgICAgY29uc3QgaW50IGVyciA9IGZvcmVhY2hfcHJvcGVydHkodHJpZS0+Y2hpbGRyZW4sIHByb3BmbiwgY29va2llKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICh0cmllLT5yaWdodCkgeworICAgICAgICBjb25zdCBpbnQgZXJyID0gZm9yZWFjaF9wcm9wZXJ0eSh0cmllLT5yaWdodCwgcHJvcGZuLCBjb29raWUpOworICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IF9fc3lzdGVtX3Byb3BlcnRpZXNfaW5pdCgpCit7CisgICAgcmV0dXJuIG1hcF9wcm9wX2FyZWEoKTsKK30KKworaW50IF9fc3lzdGVtX3Byb3BlcnR5X3NldF9maWxlbmFtZShjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBzaXplX3QgbGVuID0gc3RybGVuKGZpbGVuYW1lKTsKKyAgICBpZiAobGVuID49IHNpemVvZihwcm9wZXJ0eV9maWxlbmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHN0cmNweShwcm9wZXJ0eV9maWxlbmFtZSwgZmlsZW5hbWUpOworICAgIHJldHVybiAwOworfQorCitpbnQgX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9pbml0KCkKK3sKKyAgICByZXR1cm4gbWFwX3Byb3BfYXJlYV9ydygpOworfQorCitjb25zdCBwcm9wX2luZm8gKl9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKGNvbXBhdF9tb2RlKSkgeworICAgICAgICByZXR1cm4gX19zeXN0ZW1fcHJvcGVydHlfZmluZF9jb21wYXQobmFtZSk7CisgICAgfQorICAgIHJldHVybiBmaW5kX3Byb3BlcnR5KHJvb3Rfbm9kZSgpLCBuYW1lLCBzdHJsZW4obmFtZSksIE5VTEwsIDAsIGZhbHNlKTsKK30KKworaW50IF9fc3lzdGVtX3Byb3BlcnR5X3JlYWQoY29uc3QgcHJvcF9pbmZvICpwaSwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCit7CisgICAgaWYgKF9fcHJlZGljdF9mYWxzZShjb21wYXRfbW9kZSkpIHsKKyAgICAgICAgcmV0dXJuIF9fc3lzdGVtX3Byb3BlcnR5X3JlYWRfY29tcGF0KHBpLCBuYW1lLCB2YWx1ZSk7CisgICAgfQorCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgdWludDMyX3Qgc2VyaWFsID0gX19zeXN0ZW1fcHJvcGVydHlfc2VyaWFsKHBpKTsKKyAgICAgICAgc2l6ZV90IGxlbiA9IFNFUklBTF9WQUxVRV9MRU4oc2VyaWFsKTsKKyAgICAgICAgbWVtY3B5KHZhbHVlLCBwaS0+dmFsdWUsIGxlbiArIDEpOworICAgICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CisgICAgICAgIGlmIChzZXJpYWwgPT0gcGktPnNlcmlhbCkgeworICAgICAgICAgICAgaWYgKG5hbWUgIT0gMCkgeworICAgICAgICAgICAgICAgIHN0cmNweShuYW1lLCBwaS0+bmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbGVuOworICAgICAgICB9CisgICAgfQorfQorCitpbnQgX19zeXN0ZW1fcHJvcGVydHlfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQoreworICAgIGNvbnN0IHByb3BfaW5mbyAqcGkgPSBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKG5hbWUpOworCisgICAgaWYgKHBpICE9IDApIHsKKyAgICAgICAgcmV0dXJuIF9fc3lzdGVtX3Byb3BlcnR5X3JlYWQocGksIDAsIHZhbHVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YWx1ZVswXSA9IDA7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworaW50IF9fc3lzdGVtX3Byb3BlcnR5X3NldChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICAgIGlmIChrZXkgPT0gMCkgcmV0dXJuIC0xOworICAgIGlmICh2YWx1ZSA9PSAwKSB2YWx1ZSA9ICIiOworICAgIGlmIChzdHJsZW4oa2V5KSA+PSBQUk9QX05BTUVfTUFYKSByZXR1cm4gLTE7CisgICAgaWYgKHN0cmxlbih2YWx1ZSkgPj0gUFJPUF9WQUxVRV9NQVgpIHJldHVybiAtMTsKKworICAgIHByb3BfbXNnIG1zZzsKKyAgICBtZW1zZXQoJm1zZywgMCwgc2l6ZW9mIG1zZyk7CisgICAgbXNnLmNtZCA9IFBST1BfTVNHX1NFVFBST1A7CisgICAgc3RybGNweShtc2cubmFtZSwga2V5LCBzaXplb2YgbXNnLm5hbWUpOworICAgIHN0cmxjcHkobXNnLnZhbHVlLCB2YWx1ZSwgc2l6ZW9mIG1zZy52YWx1ZSk7CisKKyAgICBjb25zdCBpbnQgZXJyID0gc2VuZF9wcm9wX21zZygmbXNnKTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQgX19zeXN0ZW1fcHJvcGVydHlfdXBkYXRlKHByb3BfaW5mbyAqcGksIGNvbnN0IGNoYXIgKnZhbHVlLCB1bnNpZ25lZCBpbnQgbGVuKQoreworICAgIHByb3BfYXJlYSAqcGEgPSBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX187CisKKyAgICBpZiAobGVuID49IFBST1BfVkFMVUVfTUFYKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBwaS0+c2VyaWFsID0gcGktPnNlcmlhbCB8IDE7CisgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgIG1lbWNweShwaS0+dmFsdWUsIHZhbHVlLCBsZW4gKyAxKTsKKyAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CisgICAgcGktPnNlcmlhbCA9IChsZW4gPDwgMjQpIHwgKChwaS0+c2VyaWFsICsgMSkgJiAweGZmZmZmZik7CisgICAgX19mdXRleF93YWtlKCZwaS0+c2VyaWFsLCBJTlQzMl9NQVgpOworCisgICAgcGEtPnNlcmlhbCsrOworICAgIF9fZnV0ZXhfd2FrZSgmcGEtPnNlcmlhbCwgSU5UMzJfTUFYKTsKKworICAgIHJldHVybiAwOworfQorCitpbnQgX19zeXN0ZW1fcHJvcGVydHlfYWRkKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBuYW1lbGVuLAorICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUsIHVuc2lnbmVkIGludCB2YWx1ZWxlbikKK3sKKyAgICBwcm9wX2FyZWEgKnBhID0gX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fOworICAgIGNvbnN0IHByb3BfaW5mbyAqcGk7CisKKyAgICBpZiAobmFtZWxlbiA+PSBQUk9QX05BTUVfTUFYKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHZhbHVlbGVuID49IFBST1BfVkFMVUVfTUFYKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKG5hbWVsZW4gPCAxKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBwaSA9IGZpbmRfcHJvcGVydHkocm9vdF9ub2RlKCksIG5hbWUsIG5hbWVsZW4sIHZhbHVlLCB2YWx1ZWxlbiwgdHJ1ZSk7CisgICAgaWYgKCFwaSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcGEtPnNlcmlhbCsrOworICAgIF9fZnV0ZXhfd2FrZSgmcGEtPnNlcmlhbCwgSU5UMzJfTUFYKTsKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IF9fc3lzdGVtX3Byb3BlcnR5X3NlcmlhbChjb25zdCBwcm9wX2luZm8gKnBpKQoreworICAgIHVpbnQzMl90IHNlcmlhbCA9IHBpLT5zZXJpYWw7CisgICAgd2hpbGUgKFNFUklBTF9ESVJUWShzZXJpYWwpKSB7CisgICAgICAgIF9fZnV0ZXhfd2FpdChjb25zdF9jYXN0PHZvbGF0aWxlIHVpbnQzMl90Kj4oJnBpLT5zZXJpYWwpLCBzZXJpYWwsIE5VTEwpOworICAgICAgICBzZXJpYWwgPSBwaS0+c2VyaWFsOworICAgIH0KKyAgICByZXR1cm4gc2VyaWFsOworfQorCit1bnNpZ25lZCBpbnQgX19zeXN0ZW1fcHJvcGVydHlfd2FpdF9hbnkodW5zaWduZWQgaW50IHNlcmlhbCkKK3sKKyAgICBwcm9wX2FyZWEgKnBhID0gX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fOworCisgICAgZG8geworICAgICAgICBfX2Z1dGV4X3dhaXQoJnBhLT5zZXJpYWwsIHNlcmlhbCwgTlVMTCk7CisgICAgfSB3aGlsZSAocGEtPnNlcmlhbCA9PSBzZXJpYWwpOworCisgICAgcmV0dXJuIHBhLT5zZXJpYWw7Cit9CisKK2NvbnN0IHByb3BfaW5mbyAqX19zeXN0ZW1fcHJvcGVydHlfZmluZF9udGgodW5zaWduZWQgbikKK3sKKyAgICBmaW5kX250aF9jb29raWUgY29va2llKG4pOworCisgICAgY29uc3QgaW50IGVyciA9IF9fc3lzdGVtX3Byb3BlcnR5X2ZvcmVhY2goZmluZF9udGhfZm4sICZjb29raWUpOworICAgIGlmIChlcnIgPCAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBjb29raWUucGk7Cit9CisKK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV9mb3JlYWNoKHZvaWQgKCpwcm9wZm4pKGNvbnN0IHByb3BfaW5mbyAqcGksIHZvaWQgKmNvb2tpZSksCisgICAgICAgIHZvaWQgKmNvb2tpZSkKK3sKKyAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKGNvbXBhdF9tb2RlKSkgeworICAgICAgICByZXR1cm4gX19zeXN0ZW1fcHJvcGVydHlfZm9yZWFjaF9jb21wYXQocHJvcGZuLCBjb29raWUpOworICAgIH0KKworICAgIHJldHVybiBmb3JlYWNoX3Byb3BlcnR5KDAsIHByb3BmbiwgY29va2llKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzX2NvbXBhdC5jIGIvbGliYy9iaW9uaWMvc3lzdGVtX3Byb3BlcnRpZXNfY29tcGF0LmMKaW5kZXggYjRjMjQ5NC4uNmFlYWEwYyAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvc3lzdGVtX3Byb3BlcnRpZXNfY29tcGF0LmMKKysrIGIvbGliYy9iaW9uaWMvc3lzdGVtX3Byb3BlcnRpZXNfY29tcGF0LmMKQEAgLTM1LDcgKzM1LDggQEAKICAqLwogCiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL2F0b21pY3MuaD4KKworI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2Z1dGV4LmgiCiAKICNkZWZpbmUgX1JFQUxMWV9JTkNMVURFX1NZU19fU1lTVEVNX1BST1BFUlRJRVNfSF8KICNpbmNsdWRlIDxzeXMvX3N5c3RlbV9wcm9wZXJ0aWVzLmg+CkBAIC02Nyw3ICs2OCw3IEBACiAKIGV4dGVybiBwcm9wX2FyZWEgKl9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXzsKIAotY29uc3QgcHJvcF9pbmZvICpfX3N5c3RlbV9wcm9wZXJ0eV9maW5kX2NvbXBhdChjb25zdCBjaGFyICpuYW1lKQorX19MSUJDX0hJRERFTl9fIGNvbnN0IHByb3BfaW5mbyAqX19zeXN0ZW1fcHJvcGVydHlfZmluZF9jb21wYXQoY29uc3QgY2hhciAqbmFtZSkKIHsKICAgICBwcm9wX2FyZWFfY29tcGF0ICpwYSA9IChwcm9wX2FyZWFfY29tcGF0ICopX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fOwogICAgIHVuc2lnbmVkIGNvdW50ID0gcGEtPmNvdW50OwpAQCAtOTMsNyArOTQsNyBAQAogICAgIHJldHVybiAwOwogfQogCi1pbnQgX19zeXN0ZW1fcHJvcGVydHlfcmVhZF9jb21wYXQoY29uc3QgcHJvcF9pbmZvICpfcGksIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQorX19MSUJDX0hJRERFTl9fIGludCBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkX2NvbXBhdChjb25zdCBwcm9wX2luZm8gKl9waSwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCiB7CiAgICAgdW5zaWduZWQgc2VyaWFsLCBsZW47CiAgICAgY29uc3QgcHJvcF9pbmZvX2NvbXBhdCAqcGkgPSAoY29uc3QgcHJvcF9pbmZvX2NvbXBhdCAqKV9waTsKQEAgLTExNSw3ICsxMTYsNyBAQAogICAgIH0KIH0KIAotaW50IF9fc3lzdGVtX3Byb3BlcnR5X2ZvcmVhY2hfY29tcGF0KAorX19MSUJDX0hJRERFTl9fIGludCBfX3N5c3RlbV9wcm9wZXJ0eV9mb3JlYWNoX2NvbXBhdCgKICAgICAgICAgdm9pZCAoKnByb3BmbikoY29uc3QgcHJvcF9pbmZvICpwaSwgdm9pZCAqY29va2llKSwKICAgICAgICAgdm9pZCAqY29va2llKQogewpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvdGNnZXRwZ3JwLmMgYi9saWJjL2Jpb25pYy90Y2dldHBncnAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJmZjY2YS4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy90Y2dldHBncnAuYworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0qKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotKioKLSoqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0qKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSoqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSoqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKLSoqICAgICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0qKiAgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSoqCi0qKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdvb2dsZSBJbmMuIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSoqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSoqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PCi0qKiBFVkVOVCBTSEFMTCBHb29nbGUgSW5jLiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7Ci0qKiBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKLSoqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCi0qKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCi0qKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8dGVybWlvcy5oPgotCi1waWRfdCB0Y2dldHBncnAoaW50IGZkKQotewotICAgIHBpZF90IF9waWQ7Ci0gICAgcmV0dXJuIGlvY3RsKGZkLCBUSU9DR1BHUlAsICZfcGlkKSA/IChwaWRfdCktMSA6IF9waWQ7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy90Y3NldHBncnAuYyBiL2xpYmMvYmlvbmljL3Rjc2V0cGdycC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmQ5Y2QwLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3Rjc2V0cGdycC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0qKgotKiogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSoqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQotKiogICAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSoqICAgICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotKioKLSoqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR29vZ2xlIEluYy4gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotKiogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotKiogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8KLSoqIEVWRU5UIFNIQUxMIEdvb2dsZSBJbmMuIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKLSoqIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAotKiogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKLSoqIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKLSoqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx0ZXJtaW9zLmg+Ci0KLWludCB0Y3NldHBncnAoaW50IGZkLCBwaWRfdCBfcGlkKQotewotICAgIHJldHVybiBpb2N0bChmZCwgVElPQ1NQR1JQLCAmX3BpZCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy90ZGVzdHJveS5jcHAgYi9saWJjL2Jpb25pYy90ZGVzdHJveS5jcHAKaW5kZXggZGVjZGU0ZC4uNDk2MTRiOCAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvdGRlc3Ryb3kuY3BwCisrKyBiL2xpYmMvYmlvbmljL3RkZXN0cm95LmNwcApAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCiAvLyBEZXN0cm95IGEgdHJlZSBhbmQgZnJlZSBhbGwgYWxsb2NhdGVkIHJlc291cmNlcy4KLS8vIFRoaXMgaXMgYSBHTlUgZXh0ZW5zaW9uLCBub3QgYXZhaWxhYmxlIGZyb20gTmV0QlNELgorLy8gVGhpcyBpcyBhIEdOVSBleHRlbnNpb24sIG5vdCBhdmFpbGFibGUgZnJvbSBCU0QuCiB2b2lkIHRkZXN0cm95KHZvaWQqIHJvb3QsIHZvaWQgKCpkZXN0cm95X2Z1bmMpKHZvaWQqKSkgewogICBub2RlX3QqIHJvb3Rfbm9kZSA9IChub2RlX3QqKSByb290OwogICBpZiAocm9vdF9ub2RlID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3Rlcm1pb3MuY3BwIGIvbGliYy9iaW9uaWMvdGVybWlvcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgyZGNkYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3Rlcm1pb3MuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3N0YXRpYyBzcGVlZF90IGNmZ2V0c3BlZWQoY29uc3QgdGVybWlvcyogcykgeworICByZXR1cm4gKHMtPmNfY2ZsYWcgJiBDQkFVRCk7Cit9CisKK3NwZWVkX3QgY2ZnZXRpc3BlZWQoY29uc3QgdGVybWlvcyogcykgeworICByZXR1cm4gY2ZnZXRzcGVlZChzKTsKK30KKworc3BlZWRfdCBjZmdldG9zcGVlZChjb25zdCB0ZXJtaW9zKiBzKSB7CisgIHJldHVybiBjZmdldHNwZWVkKHMpOworfQorCit2b2lkIGNmbWFrZXJhdyh0ZXJtaW9zKiBzKSB7CisgIHMtPmNfaWZsYWcgJj0gfihJR05CUkt8QlJLSU5UfFBBUk1SS3xJU1RSSVB8SU5MQ1J8SUdOQ1J8SUNSTkx8SVhPTik7CisgIHMtPmNfb2ZsYWcgJj0gfk9QT1NUOworICBzLT5jX2xmbGFnICY9IH4oRUNIT3xFQ0hPTkx8SUNBTk9OfElTSUd8SUVYVEVOKTsKKyAgcy0+Y19jZmxhZyAmPSB+KENTSVpFfFBBUkVOQik7CisgIHMtPmNfY2ZsYWcgfD0gQ1M4OworfQorCitpbnQgY2ZzZXRpc3BlZWQodGVybWlvcyogcywgc3BlZWRfdCBzcGVlZCkgeworICByZXR1cm4gY2ZzZXRzcGVlZChzLCBzcGVlZCk7Cit9CisKK2ludCBjZnNldG9zcGVlZCh0ZXJtaW9zKiBzLCBzcGVlZF90IHNwZWVkKSB7CisgIHJldHVybiBjZnNldHNwZWVkKHMsIHNwZWVkKTsKK30KKworaW50IGNmc2V0c3BlZWQodGVybWlvcyogcywgc3BlZWRfdCBzcGVlZCkgeworICAvLyBUT0RPOiBjaGVjayAnc3BlZWQnIGlzIHZhbGlkLgorICBzLT5jX2NmbGFnID0gKHMtPmNfY2ZsYWcgJiB+Q0JBVUQpIHwgKHNwZWVkICYgQ0JBVUQpOworICByZXR1cm4gMDsKK30KKworaW50IHRjZHJhaW4oaW50IGZkKSB7CisgIC8vIEEgbm9uLXplcm8gYXJndW1lbnQgdG8gVENTQlJLIG1lYW5zICJkb24ndCBzZW5kIGEgYnJlYWsiLgorICAvLyBUaGUgZHJhaW4gaXMgYSBzaWRlLWVmZmVjdCBvZiB0aGUgaW9jdGwhCisgIHJldHVybiBpb2N0bChmZCwgVENTQlJLLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigxKSk7Cit9CisKK2ludCB0Y2Zsb3coaW50IGZkLCBpbnQgYWN0aW9uKSB7CisgIHJldHVybiBpb2N0bChmZCwgVENYT05DLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihhY3Rpb24pKTsKK30KKworaW50IHRjZmx1c2goaW50IGZkLCBpbnQgcXVldWUpIHsKKyAgcmV0dXJuIGlvY3RsKGZkLCBUQ0ZMU0gsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHF1ZXVlKSk7Cit9CisKK2ludCB0Y2dldGF0dHIoaW50IGZkLCB0ZXJtaW9zKiBzKSB7CisgIHJldHVybiBpb2N0bChmZCwgVENHRVRTLCBzKTsKK30KKworcGlkX3QgdGNnZXRzaWQoaW50IGZkKSB7CisgIHBpZF90IHNpZDsKKyAgaWYgKGlvY3RsKGZkLCBUSU9DR1NJRCwgJnNpZCkgPT0gLTEpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgcmV0dXJuIHNpZDsKK30KKworaW50IHRjc2VuZGJyZWFrKGludCBmZCwgaW50IGR1cmF0aW9uKSB7CisgIHJldHVybiBpb2N0bChmZCwgVENTQlJLUCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oZHVyYXRpb24pKTsKK30KKworaW50IHRjc2V0YXR0cihpbnQgZmQsIGludCBvcHRpb25hbF9hY3Rpb25zLCBjb25zdCB0ZXJtaW9zKiBzKSB7CisgIGludCBjbWQ7CisgIHN3aXRjaCAob3B0aW9uYWxfYWN0aW9ucykgeworICAgIGNhc2UgVENTQU5PVzogY21kID0gVENTRVRTOyBicmVhazsKKyAgICBjYXNlIFRDU0FEUkFJTjogY21kID0gVENTRVRTVzsgYnJlYWs7CisgICAgY2FzZSBUQ1NBRkxVU0g6IGNtZCA9IFRDU0VUU0Y7IGJyZWFrOworICAgIGRlZmF1bHQ6IGVycm5vID0gRUlOVkFMOyByZXR1cm4gLTE7CisgIH0KKyAgcmV0dXJuIGlvY3RsKGZkLCBjbWQsIHMpOworfQorCitwaWRfdCB0Y2dldHBncnAoaW50IGZkKSB7CisgIHBpZF90IHBpZDsKKyAgaWYgKGlvY3RsKGZkLCBUSU9DR1BHUlAsICZwaWQpID09IC0xKSB7CisgICAgcmV0dXJuIC0xOworICB9CisgIHJldHVybiBwaWQ7Cit9CisKK2ludCB0Y3NldHBncnAoaW50IGZkLCBwaWRfdCBwaWQpIHsKKyAgcmV0dXJuIGlvY3RsKGZkLCBUSU9DU1BHUlAsICZwaWQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvdGhyZWFkX2F0ZXhpdC5jcHAgYi9saWJjL2Jpb25pYy90aHJlYWRfYXRleGl0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FkNjVkMy4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy90aHJlYWRfYXRleGl0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotLyogc29tZSBzaW1wbGUgZ2x1ZSB1c2VkIHRvIG1ha2UgdGhlIEJTRCBhdGV4aXQgY29kZSBoYXBweSAqLwotCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotCi1zdGF0aWMgcHRocmVhZF9tdXRleF90IGdBdEV4aXRMb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKLQotX19CRUdJTl9ERUNMUwotX19MSUJDX0hJRERFTl9fIHZvaWQgX3RocmVhZF9hdGV4aXRfbG9jaygpOwotX19MSUJDX0hJRERFTl9fIHZvaWQgX3RocmVhZF9hdGV4aXRfdW5sb2NrKCk7Ci1fX0VORF9ERUNMUwotCi12b2lkIF90aHJlYWRfYXRleGl0X2xvY2soKSB7Ci0gIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ0F0RXhpdExvY2spOwotfQotCi12b2lkIF90aHJlYWRfYXRleGl0X3VubG9jaygpIHsKLSAgcHRocmVhZF9tdXRleF91bmxvY2soJmdBdEV4aXRMb2NrKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3RocmVhZF9wcml2YXRlLmNwcCBiL2xpYmMvYmlvbmljL3RocmVhZF9wcml2YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzA0MDE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvdGhyZWFkX3ByaXZhdGUuY3BwCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlICJwcml2YXRlL3RocmVhZF9wcml2YXRlLmgiCisKKy8vIFNvbWUgc2ltcGxlIGdsdWUgdXNlZCB0byBtYWtlIEJTRCBjb2RlIHRocmVhZC1zYWZlLgorCitzdGF0aWMgcHRocmVhZF9tdXRleF90IGdfYXRleGl0X2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCit2b2lkIF90aHJlYWRfYXRleGl0X2xvY2soKSB7CisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ19hdGV4aXRfbG9jayk7Cit9CisKK3ZvaWQgX3RocmVhZF9hdGV4aXRfdW5sb2NrKCkgeworICBwdGhyZWFkX211dGV4X3VubG9jaygmZ19hdGV4aXRfbG9jayk7Cit9CisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgZ19hcmM0X2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCit2b2lkIF90aHJlYWRfYXJjNF9sb2NrKCkgeworICBwdGhyZWFkX211dGV4X2xvY2soJmdfYXJjNF9sb2NrKTsKK30KKwordm9pZCBfdGhyZWFkX2FyYzRfdW5sb2NrKCkgeworICBwdGhyZWFkX211dGV4X3VubG9jaygmZ19hcmM0X2xvY2spOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvdGltZTY0LmMgYi9saWJjL2Jpb25pYy90aW1lNjQuYwppbmRleCA5YWE1ZDRmLi45NWRmYWI1IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy90aW1lNjQuYworKysgYi9saWJjL2Jpb25pYy90aW1lNjQuYwpAQCAtMjgsNiArMjgsMTAgQEAKIAogLyogU2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC95MjAzOCBmb3IgdGhpcyBjb2RlJ3Mgb3JpZ2luICovCiAKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorI2Vycm9yIFRoaXMgY3J1ZnQgc2hvdWxkIGJlIExQMzIgb25seSEKKyNlbmRpZgorCiAvKgogCiBQcm9ncmFtbWVycyB3aG8gaGF2ZSBhdmFpbGFibGUgdG8gdGhlbSA2NC1iaXQgdGltZSB2YWx1ZXMgYXMgYSAnbG9uZwpAQCAtMTMzLDE3ICsxMzcsNiBAQAogICAgIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsCiB9OwogCi0vKiBUaGlzIGlzbid0IHVzZWQsIGJ1dCBpdCdzIGhhbmR5IHRvIGxvb2sgYXQgKi8KLXN0YXRpYyBjb25zdCBpbnQgZG93X3llYXJfc3RhcnRbU09MQVJfQ1lDTEVfTEVOR1RIXSA9IHsKLSAgICA1LCAwLCAxLCAyLCAgICAgLyogMCAgICAgICAyMDE2IC0gMjAxOSAqLwotICAgIDMsIDUsIDYsIDAsICAgICAvKiA0ICAqLwotICAgIDEsIDMsIDQsIDUsICAgICAvKiA4ICAgICAgIDE5OTYgLSAxOTk4LCAxOTcxKi8KLSAgICA2LCAxLCAyLCAzLCAgICAgLyogMTIgICAgICAxOTcyIC0gMTk3NSAqLwotICAgIDQsIDYsIDAsIDEsICAgICAvKiAxNiAqLwotICAgIDIsIDQsIDUsIDYsICAgICAvKiAyMCAgICAgIDIwMzYsIDIwMzcsIDIwMTAsIDIwMTEgKi8KLSAgICAwLCAyLCAzLCA0ICAgICAgLyogMjQgICAgICAyMDEyLCAyMDEzLCAyMDE0LCAyMDE1ICovCi19OwotCiAvKiBMZXQncyBhc3N1bWUgcGVvcGxlIGFyZSBnb2luZyB0byBiZSBsb29raW5nIGZvciBkYXRlcyBpbiB0aGUgZnV0dXJlLgogICAgTGV0J3MgcHJvdmlkZSBzb21lIGNoZWF0cyBzbyB5b3UgY2FuIHNraXAgYWhlYWQuCiAgICBUaGlzIGhhcyBhIDR4IHNwZWVkIGJvb3N0IHdoZW4gbmVhciAyMDA4LgpAQCAtMjQ4LDYgKzI0MSw3IEBACiB9CiAKIAorI2lmICFkZWZpbmVkKE5ERUJVRykKIHN0YXRpYyBpbnQgY2hlY2tfdG0oc3RydWN0IFRNICp0bSkKIHsKICAgICAvKiBEb24ndCBmb3JnZXQgbGVhcCBzZWNvbmRzICovCkBAIC0yNjgsNyArMjYyLDcgQEAKIAogICAgIGFzc2VydCh0bS0+dG1fd2RheSA+PSAwKTsKICAgICBhc3NlcnQodG0tPnRtX3dkYXkgPD0gNik7Ci0gICAKKwogICAgIGFzc2VydCh0bS0+dG1feWRheSA+PSAwKTsKICAgICBhc3NlcnQodG0tPnRtX3lkYXkgPD0gbGVuZ3RoX29mX3llYXJbSVNfTEVBUCh0bS0+dG1feWVhcildKTsKIApAQCAtMjc5LDYgKzI3Myw3IEBACiAKICAgICByZXR1cm4gMTsKIH0KKyNlbmRpZgogCiAKIC8qIFRoZSBleGNlcHRpb25hbCBjZW50dXJpZXMgd2l0aG91dCBsZWFwIHllYXJzIGNhdXNlIHRoZSBjeWNsZSB0bwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvdGltZXIuY3BwIGIvbGliYy9iaW9uaWMvdGltZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDczODIxLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3RpbWVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLWV4dGVybiBpbnQgX19wdGhyZWFkX2NvbmRfdGltZWR3YWl0KHB0aHJlYWRfY29uZF90KiwgcHRocmVhZF9tdXRleF90KiwgY29uc3QgdGltZXNwZWMqLCBjbG9ja2lkX3QpOwotZXh0ZXJuIGludCBfX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcmVsYXRpdmUocHRocmVhZF9jb25kX3QqLCBwdGhyZWFkX211dGV4X3QqLCBjb25zdCB0aW1lc3BlYyopOwotCi0vLyBOb3JtYWwgKGkuZS4gbm9uLVNJR0VWX1RIUkVBRCkgdGltZXJzIGFyZSBjcmVhdGVkIGRpcmVjdGx5IGJ5IHRoZSBrZXJuZWwKLS8vIGFuZCBhcmUgcGFzc2VkIGFzIGlzIHRvL2Zyb20gdGhlIGNhbGxlci4KLS8vCi0vLyBUaGlzIGZpbGUgYWxzbyBpbXBsZW1lbnRzIHRoZSBzdXBwb3J0IHJlcXVpcmVkIGZvciBTSUdFVl9USFJFQUQgKCJQT1NJWCBpbnRlcnZhbCIpCi0vLyB0aW1lcnMuIFNlZSB0aGUgZm9sbG93aW5nIHBhZ2VzIGZvciBhZGRpdGlvbmFsIGRldGFpbHM6Ci0vLwotLy8gd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDAwOTUzOTkvZnVuY3Rpb25zL3RpbWVyX2NyZWF0ZS5odG1sCi0vLyB3d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwMDA5NTM5OS9mdW5jdGlvbnMvdGltZXJfc2V0dGltZS5odG1sCi0vLyB3d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwMDA5NTM5OS9mdW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sI3RhZ18wMl8wNF8wMQotLy8KLS8vIFRoZSBMaW51eCBrZXJuZWwgZG9lc24ndCBzdXBwb3J0IHRoZXNlLCBzbyB3ZSBuZWVkIHRvIGltcGxlbWVudCB0aGVtIGluIHRoZQotLy8gQyBsaWJyYXJ5LiBXZSB1c2UgYSB2ZXJ5IGJhc2ljIHNjaGVtZSB3aGVyZSBlYWNoIHRpbWVyIGlzIGFzc29jaWF0ZWQgdG8gYQotLy8gdGhyZWFkIHRoYXQgd2lsbCBsb29wLCB3YWl0aW5nIGZvciB0aW1lb3V0cyBvciBtZXNzYWdlcyBmcm9tIHRoZSBwcm9ncmFtCi0vLyBjb3JyZXNwb25kaW5nIHRvIGNhbGxzIHRvIHRpbWVyX3NldHRpbWUoKSBhbmQgdGltZXJfZGVsZXRlKCkuCi0vLwotLy8gTm90ZSBhbHNvIGFuIGltcG9ydGFudCB0aGluZzogUG9zaXggbWFuZGF0ZXMgdGhhdCBpbiB0aGUgY2FzZSBvZiBmb3JrKCksCi0vLyB0aGUgdGltZXJzIG9mIHRoZSBjaGlsZCBwcm9jZXNzIHNob3VsZCBiZSBkaXNhcm1lZCwgYnV0IG5vdCBkZWxldGVkLgotLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBieSBwcm92aWRpbmcgYSBmb3JrKCkgd3JhcHBlciAoc2VlIGJpb25pYy9mb3JrLmMpIHdoaWNoCi0vLyBzdG9wcyBhbGwgdGltZXJzIGJlZm9yZSB0aGUgZm9yaywgYW5kIG9ubHkgcmUtc3RhcnQgdGhlbSBpbiBjYXNlIG9mIGVycm9yCi0vLyBvciBpbiB0aGUgcGFyZW50IHByb2Nlc3MuCi0vLwotLy8gVGhpcyBzdG9wL3N0YXJ0IGlzIGltcGxlbWVudGVkIGJ5IHRoZSBfX3RpbWVyX3RhYmxlX3N0YXJ0X3N0b3AoKSBmdW5jdGlvbgotLy8gYmVsb3cuCi0vLwotLy8gQSBTSUdFVl9USFJFQUQgdGltZXIgSUQgd2lsbCBhbHdheXMgaGF2ZSBpdHMgVElNRVJfSURfV1JBUF9CSVQKLS8vIHNldCB0byAxLiBJbiB0aGlzIGltcGxlbWVudGF0aW9uLCB0aGlzIGlzIGFsd2F5cyBiaXQgMzEsIHdoaWNoIGlzCi0vLyBndWFyYW50ZWVkIHRvIG5ldmVyIGJlIHVzZWQgYnkga2VybmVsLXByb3ZpZGVkIHRpbWVyIGlkcwotLy8KLS8vIChTZWUgY29kZSBpbiA8a2VybmVsPi9saWIvaWRyLmMsIHVzZWQgdG8gbWFuYWdlIElEcywgdG8gc2VlIHdoeS4pCi0KLSNkZWZpbmUgIFRJTUVSX0lEX1dSQVBfQklUICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lICBUSU1FUl9JRF9XUkFQKGlkKSAgICAgICAgKCh0aW1lcl90KSgoaWQpIHwgIFRJTUVSX0lEX1dSQVBfQklUKSkKLSNkZWZpbmUgIFRJTUVSX0lEX1VOV1JBUChpZCkgICAgICAoKHRpbWVyX3QpKChpZCkgJiB+VElNRVJfSURfV1JBUF9CSVQpKQotI2RlZmluZSAgVElNRVJfSURfSVNfV1JBUFBFRChpZCkgICgoKGlkKSAmIFRJTUVSX0lEX1dSQVBfQklUKSAhPSAwKQotCi0vKiB0aGlzIHZhbHVlIGlzIHVzZWQgaW50ZXJuYWxseSB0byBpbmRpY2F0ZSBhICdmcmVlJyBvciAnem9tYmllJwotICogdGhyX3RpbWVyIHN0cnVjdHVyZS4gSGVyZSwgJ3pvbWJpZScgbWVhbnMgdGhhdCB0aW1lcl9kZWxldGUoKQotICogaGFzIGJlZW4gY2FsbGVkLCBidXQgdGhhdCB0aGUgY29ycmVzcG9uZGluZyB0aHJlYWQgaGFzbid0Ci0gKiBleGl0ZWQgeWV0LgotICovCi0jZGVmaW5lICBUSU1FUl9JRF9OT05FICAgICAgICAgICAgKCh0aW1lcl90KTB4ZmZmZmZmZmYpCi0KLS8qIFRydWUgaWZmIGEgdGltZXIgaWQgaXMgdmFsaWQgKi8KLSNkZWZpbmUgIFRJTUVSX0lEX0lTX1ZBTElEKGlkKSAgICAoKGlkKSAhPSBUSU1FUl9JRF9OT05FKQotCi0vKiB0aGUgbWF4aW11bSB2YWx1ZSBvZiBvdmVycnVuIGNvdW50ZXJzICovCi0jZGVmaW5lICBERUxBWVRJTUVSX01BWCAgICAweDdmZmZmZmZmCi0KLXR5cGVkZWYgc3RydWN0IHRocl90aW1lciAgICAgICAgICB0aHJfdGltZXJfdDsKLXR5cGVkZWYgc3RydWN0IHRocl90aW1lcl90YWJsZSAgICB0aHJfdGltZXJfdGFibGVfdDsKLQotLyogVGhlIFBvc2l4IHNwZWMgc2F5cyB0aGUgZnVuY3Rpb24gcmVjZWl2ZXMgYW4gdW5zaWduZWQgcGFyYW1ldGVyLCBidXQKLSAqIGl0J3MgcmVhbGx5IGEgJ3VuaW9uIHNpZ3ZhbCcgYS5rLmEuIHNpZ3ZhbF90ICovCi10eXBlZGVmIHZvaWQgKCp0aHJfdGltZXJfZnVuY190KSggc2lndmFsX3QgKTsKLQotc3RydWN0IHRocl90aW1lciB7Ci0gICAgdGhyX3RpbWVyX3QqICAgICAgIG5leHQ7ICAgICAvKiBuZXh0IGluIGZyZWUgbGlzdCAqLwotICAgIHRpbWVyX3QgICAgICAgICAgICBpZDsgICAgICAgLyogVElNRVJfSURfTk9ORSBpZmYgZnJlZSBvciBkeWluZyAqLwotICAgIGNsb2NraWRfdCAgICAgICAgICBjbG9jazsKLSAgICBwdGhyZWFkX3QgICAgICAgICAgdGhyZWFkOwotICAgIHB0aHJlYWRfYXR0cl90ICAgICBhdHRyaWJ1dGVzOwotICAgIHRocl90aW1lcl9mdW5jX3QgICBjYWxsYmFjazsKLSAgICBzaWd2YWxfdCAgICAgICAgICAgdmFsdWU7Ci0KLSAgICAvKiB0aGUgZm9sbG93aW5nIGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIGJldHdlZW4KLSAgICAgKiB0aGUgdGltZXIgdGhyZWFkIGFuZCB0aGUgdGltZXJfWFhYKCkgZnVuY3Rpb25zCi0gICAgICovCi0gICAgcHRocmVhZF9tdXRleF90ICAgICAgICAgICBtdXRleDsgICAgIC8qIGxvY2sgKi8KLSAgICBwdGhyZWFkX2NvbmRfdCAgICAgICAgICAgIGNvbmQ7ICAgICAgLyogc2lnbmFsIGEgc3RhdGUgY2hhbmdlIHRvIHRocmVhZCAqLwotICAgIGludCB2b2xhdGlsZSAgICAgICAgICAgICAgZG9uZTsgICAgICAvKiBzZXQgYnkgdGltZXJfZGVsZXRlICovCi0gICAgaW50IHZvbGF0aWxlICAgICAgICAgICAgICBzdG9wcGVkOyAgIC8qIHNldCBieSBfc3RhcnRfc3RvcCgpICovCi0gICAgdGltZXNwZWMgdm9sYXRpbGUgIGV4cGlyZXM7ICAgLyogbmV4dCBleHBpcmF0aW9uIHRpbWUsIG9yIDAgKi8KLSAgICB0aW1lc3BlYyB2b2xhdGlsZSAgcGVyaW9kOyAgICAvKiByZWxvYWQgdmFsdWUsIG9yIDAgKi8KLSAgICBpbnQgdm9sYXRpbGUgICAgICAgICAgICAgIG92ZXJydW5zOyAgLyogY3VycmVudCBudW1iZXIgb2Ygb3ZlcnJ1bnMgKi8KLX07Ci0KLSNkZWZpbmUgIE1BWF9USFJFQURfVElNRVJTICAzMgotCi1zdHJ1Y3QgdGhyX3RpbWVyX3RhYmxlIHsKLSAgICBwdGhyZWFkX211dGV4X3QgIGxvY2s7Ci0gICAgdGhyX3RpbWVyX3QqICAgICBmcmVlX3RpbWVyOwotICAgIHRocl90aW1lcl90ICAgICAgdGltZXJzWyBNQVhfVEhSRUFEX1RJTUVSUyBdOwotfTsKLQotLyoqIEdMT0JBTCBUQUJMRSBPRiBUSFJFQUQgVElNRVJTCi0gKiovCi0KLXN0YXRpYyB2b2lkCi10aHJfdGltZXJfdGFibGVfaW5pdCggdGhyX3RpbWVyX3RhYmxlX3QqICB0ICkKLXsKLSAgICBpbnQgIG5uOwotCi0gICAgbWVtc2V0KHQsIDAsIHNpemVvZiAqdCk7Ci0gICAgcHRocmVhZF9tdXRleF9pbml0KCAmdC0+bG9jaywgTlVMTCApOwotCi0gICAgZm9yIChubiA9IDA7IG5uIDwgTUFYX1RIUkVBRF9USU1FUlM7IG5uKyspCi0gICAgICAgIHQtPnRpbWVyc1tubl0uaWQgPSBUSU1FUl9JRF9OT05FOwotCi0gICAgdC0+ZnJlZV90aW1lciA9ICZ0LT50aW1lcnNbMF07Ci0gICAgZm9yIChubiA9IDE7IG5uIDwgTUFYX1RIUkVBRF9USU1FUlM7IG5uKyspCi0gICAgICAgIHQtPnRpbWVyc1tubi0xXS5uZXh0ID0gJnQtPnRpbWVyc1tubl07Ci19Ci0KLQotc3RhdGljIHRocl90aW1lcl90KgotdGhyX3RpbWVyX3RhYmxlX2FsbG9jKCB0aHJfdGltZXJfdGFibGVfdCogIHQgKQotewotICAgIHRocl90aW1lcl90KiAgdGltZXI7Ci0KLSAgICBpZiAodCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmdC0+bG9jayk7Ci0gICAgdGltZXIgPSB0LT5mcmVlX3RpbWVyOwotICAgIGlmICh0aW1lciAhPSBOVUxMKSB7Ci0gICAgICAgIHQtPmZyZWVfdGltZXIgPSB0aW1lci0+bmV4dDsKLSAgICAgICAgdGltZXItPm5leHQgICA9IE5VTEw7Ci0gICAgICAgIHRpbWVyLT5pZCAgICAgPSBUSU1FUl9JRF9XUkFQKCh0aW1lciAtIHQtPnRpbWVycykpOwotICAgIH0KLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmdC0+bG9jayk7Ci0gICAgcmV0dXJuIHRpbWVyOwotfQotCi0KLXN0YXRpYyB2b2lkCi10aHJfdGltZXJfdGFibGVfZnJlZSggdGhyX3RpbWVyX3RhYmxlX3QqICB0LCB0aHJfdGltZXJfdCogIHRpbWVyICkKLXsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soICZ0LT5sb2NrICk7Ci0gICAgdGltZXItPmlkICAgICA9IFRJTUVSX0lEX05PTkU7Ci0gICAgdGltZXItPnRocmVhZCA9IDA7Ci0gICAgdGltZXItPm5leHQgICA9IHQtPmZyZWVfdGltZXI7Ci0gICAgdC0+ZnJlZV90aW1lciA9IHRpbWVyOwotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmdC0+bG9jayApOwotfQotCi0KLXN0YXRpYyB2b2lkIHRocl90aW1lcl90YWJsZV9zdGFydF9zdG9wKHRocl90aW1lcl90YWJsZV90KiB0LCBpbnQgc3RvcCkgewotICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgcHRocmVhZF9tdXRleF9sb2NrKCZ0LT5sb2NrKTsKLSAgZm9yIChpbnQgbm4gPSAwOyBubiA8IE1BWF9USFJFQURfVElNRVJTOyArK25uKSB7Ci0gICAgdGhyX3RpbWVyX3QqICB0aW1lciAgPSAmdC0+dGltZXJzW25uXTsKLSAgICBpZiAoVElNRVJfSURfSVNfVkFMSUQodGltZXItPmlkKSkgewotICAgICAgLy8gVGVsbCB0aGUgdGhyZWFkIHRvIHN0YXJ0L3N0b3AuCi0gICAgICBwdGhyZWFkX211dGV4X2xvY2soJnRpbWVyLT5tdXRleCk7Ci0gICAgICB0aW1lci0+c3RvcHBlZCA9IHN0b3A7Ci0gICAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCAmdGltZXItPmNvbmQgKTsKLSAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0aW1lci0+bXV0ZXgpOwotICAgIH0KLSAgfQotICBwdGhyZWFkX211dGV4X3VubG9jaygmdC0+bG9jayk7Ci19Ci0KLQotLyogY29udmVydCBhIHRpbWVyX2lkIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgdGhyX3RpbWVyX3QqIHBvaW50ZXIKLSAqIHJldHVybnMgTlVMTCBpZiB0aGUgaWQgaXMgbm90IHdyYXBwZWQgb3IgaXMgaW52YWxpZC9mcmVlCi0gKi8KLXN0YXRpYyB0aHJfdGltZXJfdCoKLXRocl90aW1lcl90YWJsZV9mcm9tX2lkKCB0aHJfdGltZXJfdGFibGVfdCogIHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfdCAgICAgICAgICAgICBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgIHJlbW92ZSApCi17Ci0gICAgdW5zaWduZWQgICAgICBpbmRleDsKLSAgICB0aHJfdGltZXJfdCogIHRpbWVyOwotCi0gICAgaWYgKHQgPT0gTlVMTCB8fCAhVElNRVJfSURfSVNfV1JBUFBFRChpZCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaW5kZXggPSAodW5zaWduZWQpIFRJTUVSX0lEX1VOV1JBUChpZCk7Ci0gICAgaWYgKGluZGV4ID49IE1BWF9USFJFQURfVElNRVJTKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmdC0+bG9jayk7Ci0KLSAgICB0aW1lciA9ICZ0LT50aW1lcnNbaW5kZXhdOwotCi0gICAgaWYgKCFUSU1FUl9JRF9JU19WQUxJRCh0aW1lci0+aWQpKSB7Ci0gICAgICAgIHRpbWVyID0gTlVMTDsKLSAgICB9IGVsc2UgewotICAgICAgICAvKiBpZiB3ZSdyZSByZW1vdmluZyB0aGlzIHRpbWVyLCBjbGVhciB0aGUgaWQKLSAgICAgICAgICogcmlnaHQgbm93IHRvIHByZXZlbnQgYW5vdGhlciB0aHJlYWQgdG8KLSAgICAgICAgICogdXNlIHRoZSBzYW1lIGlkIGFmdGVyIHRoZSB1bmxvY2sgKi8KLSAgICAgICAgaWYgKHJlbW92ZSkKLSAgICAgICAgICAgIHRpbWVyLT5pZCA9IFRJTUVSX0lEX05PTkU7Ci0gICAgfQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0LT5sb2NrKTsKLQotICAgIHJldHVybiB0aW1lcjsKLX0KLQotLyogdGhlIHN0YXRpYyB0aW1lciB0YWJsZSAtIHdlIG9ubHkgY3JlYXRlIGl0IGlmIHRoZSBwcm9jZXNzCi0gKiByZWFsbHkgd2FudHMgdG8gdXNlIFNJR0VWX1RIUkVBRCB0aW1lcnMsIHdoaWNoIHNob3VsZCBiZQotICogcHJldHR5IGluZnJlcXVlbnQKLSAqLwotCi1zdGF0aWMgcHRocmVhZF9vbmNlX3QgX190aW1lcl90YWJsZV9vbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7Ci1zdGF0aWMgdGhyX3RpbWVyX3RhYmxlX3QqIF9fdGltZXJfdGFibGU7Ci0KLXN0YXRpYyB2b2lkIF9fdGltZXJfdGFibGVfaW5pdCh2b2lkKSB7Ci0gIF9fdGltZXJfdGFibGUgPSByZWludGVycHJldF9jYXN0PHRocl90aW1lcl90YWJsZV90Kj4oY2FsbG9jKDEsIHNpemVvZigqX190aW1lcl90YWJsZSkpKTsKLSAgaWYgKF9fdGltZXJfdGFibGUgIT0gTlVMTCkgewotICAgIHRocl90aW1lcl90YWJsZV9pbml0KF9fdGltZXJfdGFibGUpOwotICB9Ci19Ci0KLXN0YXRpYyB0aHJfdGltZXJfdGFibGVfdCogX190aW1lcl90YWJsZV9nZXQodm9pZCkgewotICBwdGhyZWFkX29uY2UoJl9fdGltZXJfdGFibGVfb25jZSwgX190aW1lcl90YWJsZV9pbml0KTsKLSAgcmV0dXJuIF9fdGltZXJfdGFibGU7Ci19Ci0KLS8qKiBQT1NJWCBUSFJFQUQgVElNRVJTIENMRUFOVVAgT04gRk9SSwotICoqCi0gKiogdGhpcyBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlICdmb3JrKCknIHdyYXBwZXIgdG8gc3RvcC9zdGFydAotICoqIGFsbCBhY3RpdmUgdGhyZWFkIHRpbWVycy4gdGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCBhIFBvc2l4Ci0gKiogcmVxdWlyZW1lbnRzOiB0aGUgdGltZXJzIG9mIGZvcmsgY2hpbGQgcHJvY2Vzc2VzIG11c3QgYmUKLSAqKiBkaXNhcm1lZCBidXQgbm90IGRlbGV0ZWQuCi0gKiovCi12b2lkIF9fdGltZXJfdGFibGVfc3RhcnRfc3RvcChpbnQgc3RvcCkgewotICAvLyBXZSBhY2Nlc3MgX190aW1lcl90YWJsZSBkaXJlY3RseSBzbyB3ZSBkb24ndCBjcmVhdGUgaXQgaWYgaXQgZG9lc24ndCB5ZXQgZXhpc3QuCi0gIHRocl90aW1lcl90YWJsZV9zdGFydF9zdG9wKF9fdGltZXJfdGFibGUsIHN0b3ApOwotfQotCi1zdGF0aWMgdGhyX3RpbWVyX3QqCi10aHJfdGltZXJfZnJvbV9pZCggdGltZXJfdCAgIGlkICkKLXsKLSAgICB0aHJfdGltZXJfdGFibGVfdCogIHRhYmxlID0gX190aW1lcl90YWJsZV9nZXQoKTsKLSAgICB0aHJfdGltZXJfdCogICAgICAgIHRpbWVyID0gdGhyX3RpbWVyX3RhYmxlX2Zyb21faWQoIHRhYmxlLCBpZCwgMCApOwotCi0gICAgcmV0dXJuIHRpbWVyOwotfQotCi0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLXRocl90aW1lcl9sb2NrKCB0aHJfdGltZXJfdCogIHQgKQotewotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmdC0+bXV0ZXgpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkCi10aHJfdGltZXJfdW5sb2NrKCB0aHJfdGltZXJfdCogIHQgKQotewotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0LT5tdXRleCk7Ci19Ci0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCB0aW1lc3BlY19hZGQodGltZXNwZWMqIGEsIGNvbnN0IHRpbWVzcGVjKiBiKSB7Ci0gIGEtPnR2X3NlYyAgKz0gYi0+dHZfc2VjOwotICBhLT50dl9uc2VjICs9IGItPnR2X25zZWM7Ci0gIGlmIChhLT50dl9uc2VjID49IDEwMDAwMDAwMDApIHsKLSAgICBhLT50dl9uc2VjIC09IDEwMDAwMDAwMDA7Ci0gICAgYS0+dHZfc2VjICArPSAxOwotICB9Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgdGltZXNwZWNfc3ViKHRpbWVzcGVjKiBhLCBjb25zdCB0aW1lc3BlYyogYikgewotICBhLT50dl9zZWMgIC09IGItPnR2X3NlYzsKLSAgYS0+dHZfbnNlYyAtPSBiLT50dl9uc2VjOwotICBpZiAoYS0+dHZfbnNlYyA8IDApIHsKLSAgICBhLT50dl9uc2VjICs9IDEwMDAwMDAwMDA7Ci0gICAgYS0+dHZfc2VjICAtPSAxOwotICB9Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgdGltZXNwZWNfemVybyh0aW1lc3BlYyogYSkgewotICBhLT50dl9zZWMgPSBhLT50dl9uc2VjID0gMDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IHRpbWVzcGVjX2lzX3plcm8oY29uc3QgdGltZXNwZWMqIGEpIHsKLSAgcmV0dXJuIChhLT50dl9zZWMgPT0gMCAmJiBhLT50dl9uc2VjID09IDApOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgdGltZXNwZWNfY21wKGNvbnN0IHRpbWVzcGVjKiBhLCBjb25zdCB0aW1lc3BlYyogYikgewotICBpZiAoYS0+dHZfc2VjICA8IGItPnR2X3NlYykgIHJldHVybiAtMTsKLSAgaWYgKGEtPnR2X3NlYyAgPiBiLT50dl9zZWMpICByZXR1cm4gKzE7Ci0gIGlmIChhLT50dl9uc2VjIDwgYi0+dHZfbnNlYykgcmV0dXJuIC0xOwotICBpZiAoYS0+dHZfbnNlYyA+IGItPnR2X25zZWMpIHJldHVybiArMTsKLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCB0aW1lc3BlY19jbXAwKGNvbnN0IHRpbWVzcGVjKiBhKSB7Ci0gIGlmIChhLT50dl9zZWMgPCAwKSByZXR1cm4gLTE7Ci0gIGlmIChhLT50dl9zZWMgPiAwKSByZXR1cm4gKzE7Ci0gIGlmIChhLT50dl9uc2VjIDwgMCkgcmV0dXJuIC0xOwotICBpZiAoYS0+dHZfbnNlYyA+IDApIHJldHVybiArMTsKLSAgcmV0dXJuIDA7Ci19Ci0KLS8qKiBQT1NJWCBUSU1FUlMgQVBJcyAqLwotCi1leHRlcm4gIkMiIGludCBfX3RpbWVyX2NyZWF0ZShjbG9ja2lkX3QsIHNpZ2V2ZW50KiwgdGltZXJfdCopOwotZXh0ZXJuICJDIiBpbnQgX190aW1lcl9kZWxldGUodGltZXJfdCk7Ci1leHRlcm4gIkMiIGludCBfX3RpbWVyX2dldHRpbWUodGltZXJfdCwgaXRpbWVyc3BlYyopOwotZXh0ZXJuICJDIiBpbnQgX190aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGludCwgY29uc3QgaXRpbWVyc3BlYyosIGl0aW1lcnNwZWMqKTsKLWV4dGVybiAiQyIgaW50IF9fdGltZXJfZ2V0b3ZlcnJ1bih0aW1lcl90KTsKLQotc3RhdGljIHZvaWQqIHRpbWVyX3RocmVhZF9zdGFydCh2b2lkKik7Ci0KLWludCB0aW1lcl9jcmVhdGUoY2xvY2tpZF90IGNsb2NrX2lkLCBzaWdldmVudCogZXZwLCB0aW1lcl90KiB0aW1lcl9pZCkgewotICAvLyBJZiBub3QgYSBTSUdFVl9USFJFQUQgdGltZXIsIHRoZSBrZXJuZWwgY2FuIGhhbmRsZSBpdCB3aXRob3V0IG91ciBoZWxwLgotICBpZiAoX19wcmVkaWN0X3RydWUoZXZwID09IE5VTEwgfHwgZXZwLT5zaWdldl9ub3RpZnkgIT0gU0lHRVZfVEhSRUFEKSkgewotICAgIHJldHVybiBfX3RpbWVyX2NyZWF0ZShjbG9ja19pZCwgZXZwLCB0aW1lcl9pZCk7Ci0gIH0KLQotICAvLyBDaGVjayBhcmd1bWVudHMuCi0gIGlmIChldnAtPnNpZ2V2X25vdGlmeV9mdW5jdGlvbiA9PSBOVUxMKSB7Ci0gICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLy8gQ2hlY2sgdGhhdCB0aGUgY2xvY2sgaWQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwuCi0gIHRpbWVzcGVjIGR1bW15OwotICBpZiAoY2xvY2tfZ2V0dGltZShjbG9ja19pZCwgJmR1bW15KSA8IDAgJiYgZXJybm8gPT0gRUlOVkFMKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLy8gQ3JlYXRlIGEgbmV3IHRpbWVyIGFuZCBpdHMgdGhyZWFkLgotICAvLyBUT0RPOiB1c2UgYSBzaW5nbGUgZ2xvYmFsIHRocmVhZCBmb3IgYWxsIHRpbWVycy4KLSAgdGhyX3RpbWVyX3RhYmxlX3QqIHRhYmxlID0gX190aW1lcl90YWJsZV9nZXQoKTsKLSAgdGhyX3RpbWVyX3QqIHRpbWVyID0gdGhyX3RpbWVyX3RhYmxlX2FsbG9jKHRhYmxlKTsKLSAgaWYgKHRpbWVyID09IE5VTEwpIHsKLSAgICBlcnJubyA9IEVOT01FTTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvLyBDb3B5IHRoZSB0aHJlYWQgYXR0cmlidXRlcy4KLSAgaWYgKGV2cC0+c2lnZXZfbm90aWZ5X2F0dHJpYnV0ZXMgPT0gTlVMTCkgewotICAgIHB0aHJlYWRfYXR0cl9pbml0KCZ0aW1lci0+YXR0cmlidXRlcyk7Ci0gIH0gZWxzZSB7Ci0gICAgdGltZXItPmF0dHJpYnV0ZXMgPSAoKHB0aHJlYWRfYXR0cl90KikgZXZwLT5zaWdldl9ub3RpZnlfYXR0cmlidXRlcylbMF07Ci0gIH0KLQotICAvLyBQb3NpeCBzYXlzIHRoYXQgdGhlIGRlZmF1bHQgaXMgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQgYW5kCi0gIC8vIHRoYXQgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgaGFzIHVuZGVmaW5lZCBiZWhhdmlvci4KLSAgLy8gU28gc2ltcGx5IGFsd2F5cyB1c2UgREVUQUNIRUQgOi0pCi0gIHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSgmdGltZXItPmF0dHJpYnV0ZXMsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTsKLQotICB0aW1lci0+Y2FsbGJhY2sgPSBldnAtPnNpZ2V2X25vdGlmeV9mdW5jdGlvbjsKLSAgdGltZXItPnZhbHVlID0gZXZwLT5zaWdldl92YWx1ZTsKLSAgdGltZXItPmNsb2NrID0gY2xvY2tfaWQ7Ci0KLSAgcHRocmVhZF9tdXRleF9pbml0KCZ0aW1lci0+bXV0ZXgsIE5VTEwpOwotICBwdGhyZWFkX2NvbmRfaW5pdCgmdGltZXItPmNvbmQsIE5VTEwpOwotCi0gIHRpbWVyLT5kb25lID0gMDsKLSAgdGltZXItPnN0b3BwZWQgPSAwOwotICB0aW1lci0+ZXhwaXJlcy50dl9zZWMgPSB0aW1lci0+ZXhwaXJlcy50dl9uc2VjID0gMDsKLSAgdGltZXItPnBlcmlvZC50dl9zZWMgPSB0aW1lci0+cGVyaW9kLnR2X25zZWMgID0gMDsKLSAgdGltZXItPm92ZXJydW5zID0gMDsKLQotICAvLyBDcmVhdGUgdGhlIHRocmVhZC4KLSAgaW50IHJjID0gcHRocmVhZF9jcmVhdGUoJnRpbWVyLT50aHJlYWQsICZ0aW1lci0+YXR0cmlidXRlcywgdGltZXJfdGhyZWFkX3N0YXJ0LCB0aW1lcik7Ci0gIGlmIChyYyAhPSAwKSB7Ci0gICAgdGhyX3RpbWVyX3RhYmxlX2ZyZWUodGFibGUsIHRpbWVyKTsKLSAgICBlcnJubyA9IHJjOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gICp0aW1lcl9pZCA9IHRpbWVyLT5pZDsKLSAgcmV0dXJuIDA7Ci19Ci0KLQotaW50Ci10aW1lcl9kZWxldGUoIHRpbWVyX3QgIGlkICkKLXsKLSAgICBpZiAoIF9fcHJlZGljdF90cnVlKCFUSU1FUl9JRF9JU19XUkFQUEVEKGlkKSkgKQotICAgICAgICByZXR1cm4gX190aW1lcl9kZWxldGUoIGlkICk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgdGhyX3RpbWVyX3RhYmxlX3QqICB0YWJsZSA9IF9fdGltZXJfdGFibGVfZ2V0KCk7Ci0gICAgICAgIHRocl90aW1lcl90KiAgICAgICAgdGltZXIgPSB0aHJfdGltZXJfdGFibGVfZnJvbV9pZCh0YWJsZSwgaWQsIDEpOwotCi0gICAgICAgIGlmICh0aW1lciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIHRlbGwgdGhlIHRpbWVyJ3MgdGhyZWFkIHRvIHN0b3AgKi8KLSAgICAgICAgdGhyX3RpbWVyX2xvY2sodGltZXIpOwotICAgICAgICB0aW1lci0+ZG9uZSA9IDE7Ci0gICAgICAgIHB0aHJlYWRfY29uZF9zaWduYWwoICZ0aW1lci0+Y29uZCApOwotICAgICAgICB0aHJfdGltZXJfdW5sb2NrKHRpbWVyKTsKLQotICAgICAgICAvKiBOT1RFOiB0aGUgdGhyZWFkIHdpbGwgY2FsbCBfX3RpbWVyX3RhYmxlX2ZyZWUoKSB0byBmcmVlIHRoZQotICAgICAgICAgKiB0aW1lciBvYmplY3QuIHRoZSAnMScgcGFyYW1ldGVyIHRvIHRocl90aW1lcl90YWJsZV9mcm9tX2lkCi0gICAgICAgICAqIGFib3ZlIGVuc3VyZWQgdGhhdCB0aGUgb2JqZWN0IGFuZCBpdHMgdGltZXJfaWQgY2Fubm90IGJlCi0gICAgICAgICAqIHJldXNlZCBiZWZvcmUgdGhhdC4KLSAgICAgICAgICovCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotLyogcmV0dXJuIHRoZSByZWxhdGl2ZSB0aW1lIHVudGlsIHRoZSBuZXh0IGV4cGlyYXRpb24sIG9yIDAgaWYKLSAqIHRoZSB0aW1lciBpcyBkaXNhcm1lZCAqLwotc3RhdGljIHZvaWQgdGltZXJfZ2V0dGltZV9pbnRlcm5hbCh0aHJfdGltZXJfdCogdGltZXIsIGl0aW1lcnNwZWMqIHNwZWMpIHsKLSAgdGltZXNwZWMgZGlmZiA9IGNvbnN0X2Nhc3Q8dGltZXNwZWMmPih0aW1lci0+ZXhwaXJlcyk7Ci0gIGlmICghdGltZXNwZWNfaXNfemVybygmZGlmZikpIHsKLSAgICB0aW1lc3BlYyBub3c7Ci0KLSAgICBjbG9ja19nZXR0aW1lKHRpbWVyLT5jbG9jaywgJm5vdyk7Ci0gICAgdGltZXNwZWNfc3ViKCZkaWZmLCAmbm93KTsKLQotICAgIC8qIGluIGNhc2Ugb2Ygb3ZlcnJ1biwgcmV0dXJuIDAgKi8KLSAgICBpZiAodGltZXNwZWNfY21wMCgmZGlmZikgPCAwKSB7Ci0gICAgICB0aW1lc3BlY196ZXJvKCZkaWZmKTsKLSAgICB9Ci0gIH0KLQotICBzcGVjLT5pdF92YWx1ZSA9IGRpZmY7Ci0gIHNwZWMtPml0X2ludGVydmFsID0gY29uc3RfY2FzdDx0aW1lc3BlYyY+KHRpbWVyLT5wZXJpb2QpOwotfQotCi0KLWludCB0aW1lcl9nZXR0aW1lKHRpbWVyX3QgaWQsIGl0aW1lcnNwZWMqIG9zcGVjKSB7Ci0gICAgaWYgKG9zcGVjID09IE5VTEwpIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpZiAoIF9fcHJlZGljdF90cnVlKCFUSU1FUl9JRF9JU19XUkFQUEVEKGlkKSkgKSB7Ci0gICAgICAgIHJldHVybiBfX3RpbWVyX2dldHRpbWUoIGlkLCBvc3BlYyApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRocl90aW1lcl90KiAgdGltZXIgPSB0aHJfdGltZXJfZnJvbV9pZChpZCk7Ci0KLSAgICAgICAgaWYgKHRpbWVyID09IE5VTEwpIHsKLSAgICAgICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIHRocl90aW1lcl9sb2NrKHRpbWVyKTsKLSAgICAgICAgdGltZXJfZ2V0dGltZV9pbnRlcm5hbCggdGltZXIsIG9zcGVjICk7Ci0gICAgICAgIHRocl90aW1lcl91bmxvY2sodGltZXIpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotCi1pbnQKLXRpbWVyX3NldHRpbWUodGltZXJfdCBpZCwgaW50IGZsYWdzLCBjb25zdCBpdGltZXJzcGVjKiBzcGVjLCBpdGltZXJzcGVjKiBvc3BlYykgewotICAgIGlmIChzcGVjID09IE5VTEwpIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpZiAoIF9fcHJlZGljdF90cnVlKCFUSU1FUl9JRF9JU19XUkFQUEVEKGlkKSkgKSB7Ci0gICAgICAgIHJldHVybiBfX3RpbWVyX3NldHRpbWUoIGlkLCBmbGFncywgc3BlYywgb3NwZWMgKTsKLSAgICB9IGVsc2UgewotICAgICAgICB0aHJfdGltZXJfdCogICAgICAgIHRpbWVyID0gdGhyX3RpbWVyX2Zyb21faWQoaWQpOwotICAgICAgICB0aW1lc3BlYyAgICAgZXhwaXJlcywgbm93OwotCi0gICAgICAgIGlmICh0aW1lciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICB0aHJfdGltZXJfbG9jayh0aW1lcik7Ci0KLSAgICAgICAgLyogcmV0dXJuIGN1cnJlbnQgdGltZXIgdmFsdWUgaWYgb3NwZWMgaXNuJ3QgTlVMTCAqLwotICAgICAgICBpZiAob3NwZWMgIT0gTlVMTCkgewotICAgICAgICAgICAgdGltZXJfZ2V0dGltZV9pbnRlcm5hbCh0aW1lciwgb3NwZWMgKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGNvbXB1dGUgbmV4dCBleHBpcmF0aW9uIHRpbWUuIG5vdGUgdGhhdCBpZiB0aGUKLSAgICAgICAgICogbmV3IGl0X2ludGVydmFsIGlzIDAsIHdlIHNob3VsZCBkaXNhcm0gdGhlIHRpbWVyCi0gICAgICAgICAqLwotICAgICAgICBleHBpcmVzID0gc3BlYy0+aXRfdmFsdWU7Ci0gICAgICAgIGlmICghdGltZXNwZWNfaXNfemVybygmZXhwaXJlcykpIHsKLSAgICAgICAgICAgIGNsb2NrX2dldHRpbWUoIHRpbWVyLT5jbG9jaywgJm5vdyApOwotICAgICAgICAgICAgaWYgKCEoZmxhZ3MgJiBUSU1FUl9BQlNUSU1FKSkgewotICAgICAgICAgICAgICAgIHRpbWVzcGVjX2FkZCgmZXhwaXJlcywgJm5vdyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh0aW1lc3BlY19jbXAoJmV4cGlyZXMsICZub3cpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgZXhwaXJlcyA9IG5vdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjb25zdF9jYXN0PHRpbWVzcGVjJj4odGltZXItPmV4cGlyZXMpID0gZXhwaXJlczsKLSAgICAgICAgY29uc3RfY2FzdDx0aW1lc3BlYyY+KHRpbWVyLT5wZXJpb2QpID0gc3BlYy0+aXRfaW50ZXJ2YWw7Ci0gICAgICAgIHRocl90aW1lcl91bmxvY2soIHRpbWVyICk7Ci0KLSAgICAgICAgLyogc2lnbmFsIHRoZSBjaGFuZ2UgdG8gdGhlIHRocmVhZCAqLwotICAgICAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCAmdGltZXItPmNvbmQgKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotaW50Ci10aW1lcl9nZXRvdmVycnVuKHRpbWVyX3QgIGlkKQotewotICAgIGlmICggX19wcmVkaWN0X3RydWUoIVRJTUVSX0lEX0lTX1dSQVBQRUQoaWQpKSApIHsKLSAgICAgICAgcmV0dXJuIF9fdGltZXJfZ2V0b3ZlcnJ1biggaWQgKTsKLSAgICB9IGVsc2UgewotICAgICAgICB0aHJfdGltZXJfdCogIHRpbWVyID0gdGhyX3RpbWVyX2Zyb21faWQoaWQpOwotICAgICAgICBpbnQgICAgICAgICAgIHJlc3VsdDsKLQotICAgICAgICBpZiAodGltZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJfdGltZXJfbG9jayh0aW1lcik7Ci0gICAgICAgIHJlc3VsdCA9IHRpbWVyLT5vdmVycnVuczsKLSAgICAgICAgdGhyX3RpbWVyX3VubG9jayh0aW1lcik7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQqIHRpbWVyX3RocmVhZF9zdGFydCh2b2lkKiBhcmcpIHsKLSAgdGhyX3RpbWVyX3QqIHRpbWVyID0gcmVpbnRlcnByZXRfY2FzdDx0aHJfdGltZXJfdCo+KGFyZyk7Ci0KLSAgdGhyX3RpbWVyX2xvY2sodGltZXIpOwotCi0gIC8vIEdpdmUgdGhpcyB0aHJlYWQgYSBtZWFuaW5nZnVsIG5hbWUuCi0gIGNoYXIgbmFtZVszMl07Ci0gIHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIlBPU0lYIGludGVydmFsIHRpbWVyIDB4JTA4eCIsIHRpbWVyLT5pZCk7Ci0gIHB0aHJlYWRfc2V0bmFtZV9ucChwdGhyZWFkX3NlbGYoKSwgbmFtZSk7Ci0KLSAgLy8gV2UgbG9vcCB1bnRpbCB0aW1lci0+ZG9uZSBpcyBzZXQgaW4gdGltZXJfZGVsZXRlKCkuCi0gIHdoaWxlICghdGltZXItPmRvbmUpIHsKLSAgICB0aW1lc3BlYyBleHBpcmVzID0gY29uc3RfY2FzdDx0aW1lc3BlYyY+KHRpbWVyLT5leHBpcmVzKTsKLSAgICB0aW1lc3BlYyBwZXJpb2QgPSBjb25zdF9jYXN0PHRpbWVzcGVjJj4odGltZXItPnBlcmlvZCk7Ci0KLSAgICAvLyBJZiB0aGUgdGltZXIgaXMgc3RvcHBlZCBvciBkaXNhcm1lZCwgd2FpdCBpbmRlZmluaXRlbHkKLSAgICAvLyBmb3IgYSBzdGF0ZSBjaGFuZ2UgZnJvbSB0aW1lcl9zZXR0aW1lL19kZWxldGUvX3N0YXJ0X3N0b3AuCi0gICAgaWYgKHRpbWVyLT5zdG9wcGVkIHx8IHRpbWVzcGVjX2lzX3plcm8oJmV4cGlyZXMpKSB7Ci0gICAgICBwdGhyZWFkX2NvbmRfd2FpdCgmdGltZXItPmNvbmQsICZ0aW1lci0+bXV0ZXgpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgLy8gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGRvIGEgdGltZWQgd2FpdCB1bnRpbCBlaXRoZXIgYQotICAgIC8vIHN0YXRlIGNoYW5nZSBvZiB0aGUgdGltZXIgZXhwaXJhdGlvbiB0aW1lLgotICAgIHRpbWVzcGVjIG5vdzsKLSAgICBjbG9ja19nZXR0aW1lKHRpbWVyLT5jbG9jaywgJm5vdyk7Ci0KLSAgICBpZiAodGltZXNwZWNfY21wKCZleHBpcmVzLCAmbm93KSA+IDApIHsKLSAgICAgIC8vIENvb2wsIHRoZXJlIHdhcyBubyBvdmVycnVuLCBzbyBjb21wdXRlIHRoZQotICAgICAgLy8gcmVsYXRpdmUgdGltZW91dCBhcyAnZXhwaXJlcyAtIG5vdycsIHRoZW4gd2FpdC4KLSAgICAgIHRpbWVzcGVjIGRpZmYgPSBleHBpcmVzOwotICAgICAgdGltZXNwZWNfc3ViKCZkaWZmLCAmbm93KTsKLQotICAgICAgaW50IHJldCA9IF9fcHRocmVhZF9jb25kX3RpbWVkd2FpdF9yZWxhdGl2ZSgmdGltZXItPmNvbmQsICZ0aW1lci0+bXV0ZXgsICZkaWZmKTsKLQotICAgICAgLy8gSWYgd2UgZGlkbid0IHRpbWUgb3V0LCBpdCBtZWFucyB0aGF0IGEgc3RhdGUgY2hhbmdlCi0gICAgICAvLyBvY2N1cnJlZCwgc28gbG9vcCB0byB0YWtlIGNhcmUgb2YgaXQuCi0gICAgICBpZiAocmV0ICE9IEVUSU1FRE9VVCkgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLy8gT3ZlcnJ1biB3YXMgZGV0ZWN0ZWQgYmVmb3JlIHdlIGNvdWxkIHdhaXQhCi0gICAgICBpZiAoIXRpbWVzcGVjX2lzX3plcm8oJnBlcmlvZCkpIHsKLSAgICAgICAgLy8gRm9yIHBlcmlvZGljIHRpbWVycywgY29tcHV0ZSB0b3RhbCBvdmVycnVuIGNvdW50LgotICAgICAgICBkbyB7Ci0gICAgICAgICAgdGltZXNwZWNfYWRkKCZleHBpcmVzLCAmcGVyaW9kKTsKLSAgICAgICAgICBpZiAodGltZXItPm92ZXJydW5zIDwgREVMQVlUSU1FUl9NQVgpIHsKLSAgICAgICAgICAgIHRpbWVyLT5vdmVycnVucyArPSAxOwotICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAodGltZXNwZWNfY21wKCZleHBpcmVzLCAmbm93KSA8IDApOwotCi0gICAgICAgIC8vIEJhY2t0cmFjayB0aGUgbGFzdCBvbmUsIGJlY2F1c2Ugd2UncmUgZ29pbmcgdG8KLSAgICAgICAgLy8gYWRkIHRoZSBzYW1lIHZhbHVlIGp1c3QgYSBiaXQgbGF0ZXIuCi0gICAgICAgIHRpbWVzcGVjX3N1YigmZXhwaXJlcywgJnBlcmlvZCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBGb3Igbm9uLXBlcmlvZGljIHRpbWVycywgdGhpbmdzIGFyZSBzaW1wbGUuCi0gICAgICAgIHRpbWVyLT5vdmVycnVucyA9IDE7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZ2V0IGhlcmUsIGEgdGltZW91dCB3YXMgZGV0ZWN0ZWQuCi0gICAgLy8gRmlyc3QgcmVsb2FkL2Rpc2FybSB0aGUgdGltZXIgYXMgbmVlZGVkLgotICAgIGlmICghdGltZXNwZWNfaXNfemVybygmcGVyaW9kKSkgewotICAgICAgdGltZXNwZWNfYWRkKCZleHBpcmVzLCAmcGVyaW9kKTsKLSAgICB9IGVsc2UgewotICAgICAgdGltZXNwZWNfemVybygmZXhwaXJlcyk7Ci0gICAgfQotICAgIGNvbnN0X2Nhc3Q8dGltZXNwZWMmPih0aW1lci0+ZXhwaXJlcykgPSBleHBpcmVzOwotCi0gICAgLy8gTm93IGNhbGwgdGhlIHRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9uLiBSZWxlYXNlIHRoZQotICAgIC8vIGxvY2sgdG8gYWxsb3cgdGhlIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgdGltZXIgc2V0dGluZwotICAgIC8vIG9yIGNhbGwgdGltZXJfZ2V0b3ZlcnJ1bigpLgotICAgIC8vIE5PVEU6IGF0IHRoaXMgcG9pbnQgd2UgdHJ1c3QgdGhlIGNhbGxiYWNrIG5vdCB0byBiZSBhCi0gICAgLy8gICAgICB0b3RhbCBtb3JvbiBhbmQgcHRocmVhZF9raWxsKCkgdGhlIHRpbWVyIHRocmVhZAotICAgIHRocl90aW1lcl91bmxvY2sodGltZXIpOwotICAgIHRpbWVyLT5jYWxsYmFjayh0aW1lci0+dmFsdWUpOwotICAgIHRocl90aW1lcl9sb2NrKHRpbWVyKTsKLQotICAgIC8vIE5vdyBjbGVhciB0aGUgb3ZlcnJ1bnMgY291bnRlci4gaXQgb25seSBtYWtlcyBzZW5zZQotICAgIC8vIHdpdGhpbiB0aGUgY2FsbGJhY2suCi0gICAgdGltZXItPm92ZXJydW5zID0gMDsKLSAgfQotCi0gIHRocl90aW1lcl91bmxvY2sodGltZXIpOwotCi0gIC8vIEZyZWUgdGhlIHRpbWVyIG9iamVjdC4KLSAgdGhyX3RpbWVyX3RhYmxlX2ZyZWUoX190aW1lcl90YWJsZV9nZXQoKSwgdGltZXIpOwotCi0gIHJldHVybiBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvdG1wZmlsZS5jcHAgYi9saWJjL2Jpb25pYy90bXBmaWxlLmNwcAppbmRleCA4NDE5ZmY1Li42MDJkNDA3IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy90bXBmaWxlLmNwcAorKysgYi9saWJjL2Jpb25pYy90bXBmaWxlLmNwcApAQCAtNTcsMjIgKzU3LDIzIEBACiB9OwogCiBzdGF0aWMgRklMRSogX190bXBmaWxlX2Rpcihjb25zdCBjaGFyKiB0bXBfZGlyKSB7Ci0gIGNoYXIgYnVmW1BBVEhfTUFYXTsKLSAgaW50IHBhdGhfbGVuZ3RoID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzL3RtcC5YWFhYWFhYWFhYIiwgdG1wX2Rpcik7Ci0gIGlmIChwYXRoX2xlbmd0aCA+PSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihidWYpKSkgeworICBjaGFyKiBwYXRoID0gTlVMTDsKKyAgaWYgKGFzcHJpbnRmKCZwYXRoLCAiJXMvdG1wLlhYWFhYWFhYWFgiLCB0bXBfZGlyKSA9PSAtMSkgewogICAgIHJldHVybiBOVUxMOwogICB9CiAKICAgaW50IGZkOwogICB7CiAgICAgU2NvcGVkU2lnbmFsQmxvY2tlciBzc2I7Ci0gICAgZmQgPSBta3N0ZW1wKGJ1Zik7CisgICAgZmQgPSBta3N0ZW1wKHBhdGgpOwogICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgZnJlZShwYXRoKTsKICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8vIFVubGluayB0aGUgZmlsZSBub3cgc28gdGhhdCBpdCdzIHJlbW92ZWQgd2hlbiBjbG9zZWQuCi0gICAgdW5saW5rKGJ1Zik7CisgICAgdW5saW5rKHBhdGgpOworICAgIGZyZWUocGF0aCk7CiAKICAgICAvLyBDYW4gd2Ugc3RpbGwgdXNlIHRoZSBmaWxlIG5vdyBpdCdzIHVubGlua2VkPwogICAgIC8vIEZpbGUgc3lzdGVtcyB3aXRob3V0IGhhcmQgbGluayBzdXBwb3J0IHdvbid0IGhhdmUgdGhlIHVzdWFsIFVuaXggc2VtYW50aWNzLgpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvdW1vdW50LmMgYi9saWJjL2Jpb25pYy91bW91bnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQyZTQyYy4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy91bW91bnQuYworKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotZXh0ZXJuIGludCAgdW1vdW50Mihjb25zdCBjaGFyKiwgaW50KTsKLQotaW50ICB1bW91bnQoY29uc3QgY2hhciogIGRpcikKLXsKLSAgcmV0dXJuIHVtb3VudDIoZGlyLCAwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3Vtb3VudC5jcHAgYi9saWJjL2Jpb25pYy91bW91bnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjODBiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy91bW91bnQuY3BwCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorCitpbnQgdW1vdW50KGNvbnN0IGNoYXIqIHRhcmdldCkgeworICByZXR1cm4gdW1vdW50Mih0YXJnZXQsIDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvdW5sb2NrcHQuYyBiL2xpYmMvYmlvbmljL3VubG9ja3B0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5OGI3YTMuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvdW5sb2NrcHQuYworKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLQotaW50ICB1bmxvY2twdCggaW50ICBmZCApCi17Ci0gICAgaW50ICB1bmxvY2sgPSAwOwotCi0gICAgcmV0dXJuIGlvY3RsKCBmZCwgVElPQ1NQVExDSywgJnVubG9jayApOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvdXRtcC5jIGIvbGliYy9iaW9uaWMvdXRtcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2I1NWRhLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3V0bXAuYworKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAyIFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgotICogYnkgQ2hyaXN0b3MgWm91bGFzLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNECi0gKiAgICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLSAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTCi0gKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLSAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi0gKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8dXRtcC5oPgotCi1zdGF0aWMgc3RydWN0IHV0bXAgdXRtcDsKLXN0YXRpYyBGSUxFICp1dDsKLXN0YXRpYyBjaGFyIHV0ZmlsZVtNQVhQQVRITEVOXSA9IF9QQVRIX1VUTVA7Ci0KLXZvaWQKLXNldHV0ZW50KHZvaWQpCi17Ci0JaWYgKHV0ID09IE5VTEwpCi0JCXJldHVybjsKLQkodm9pZClmc2Vla28odXQsIChvZmZfdCkwLCBTRUVLX1NFVCk7Ci19Ci0KLXN0cnVjdCB1dG1wICoKLWdldHV0ZW50KHZvaWQpCi17Ci0JaWYgKHV0ID09IE5VTEwpIHsKLQkJaWYgKCh1dCA9IGZvcGVuKHV0ZmlsZSwgInIiKSkgPT0gTlVMTCkKLQkJCXJldHVybiBOVUxMOwotCX0KLQlpZiAoZnJlYWQoJnV0bXAsIHNpemVvZih1dG1wKSwgMSwgdXQpID09IDEpCi0JCXJldHVybiAmdXRtcDsKLQlyZXR1cm4gTlVMTDsKLX0KLQotdm9pZAotZW5kdXRlbnQodm9pZCkKLXsKLQlpZiAodXQgIT0gTlVMTCkgewotCQkodm9pZClmY2xvc2UodXQpOwotCQl1dCA9IE5VTEw7Ci0JfQotfQotCi1pbnQKLXV0bXBuYW1lKGNvbnN0IGNoYXIgKmZuYW1lKQotewotCXNpemVfdCBsZW4gPSBzdHJsZW4oZm5hbWUpOwotCi0JaWYgKGxlbiA+PSBzaXplb2YodXRmaWxlKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBtdXN0IG5vdCBlbmQgaW4geCEgKi8KLQlpZiAoZm5hbWVbbGVuIC0gMV0gPT0gJ3gnKQotCQlyZXR1cm4gMDsKLQotCSh2b2lkKXN0cmxjcHkodXRmaWxlLCBmbmFtZSwgc2l6ZW9mKHV0ZmlsZSkpOwotCWVuZHV0ZW50KCk7Ci0JcmV0dXJuIDE7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy92ZHNvLmNwcCBiL2xpYmMvYmlvbmljL3Zkc28uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NzVlZTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy92ZHNvLmNwcApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxsaW5rLmg+CisjaW5jbHVkZSA8c3lzL2F1eHYuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLy8geDg2IGhhcyBhIHZkc28sIGJ1dCB0aGVyZSdzIG5vdGhpbmcgdXNlZnVsIHRvIHVzIGluIGl0LgorI2lmIGRlZmluZWQoX19hYXJjaDY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKworI2lmIGRlZmluZWQoX19hYXJjaDY0X18pCisjZGVmaW5lIFZEU09fQ0xPQ0tfR0VUVElNRV9TWU1CT0wgIl9fa2VybmVsX2Nsb2NrX2dldHRpbWUiCisjZGVmaW5lIFZEU09fR0VUVElNRU9GREFZX1NZTUJPTCAgIl9fa2VybmVsX2dldHRpbWVvZmRheSIKKyNlbGlmIGRlZmluZWQoX194ODZfNjRfXykKKyNkZWZpbmUgVkRTT19DTE9DS19HRVRUSU1FX1NZTUJPTCAiX192ZHNvX2Nsb2NrX2dldHRpbWUiCisjZGVmaW5lIFZEU09fR0VUVElNRU9GREFZX1NZTUJPTCAgIl9fdmRzb19nZXR0aW1lb2ZkYXkiCisjZW5kaWYKKworI2luY2x1ZGUgPHRpbWUuaD4KKworZXh0ZXJuICJDIiBpbnQgX19jbG9ja19nZXR0aW1lKGludCwgdGltZXNwZWMqKTsKK2V4dGVybiAiQyIgaW50IF9fZ2V0dGltZW9mZGF5KHRpbWV2YWwqLCBzdHJ1Y3QgdGltZXpvbmUqKTsKKworc3RydWN0IHZkc29fZW50cnkgeworICBjb25zdCBjaGFyKiBuYW1lOworICB2b2lkKiBmbjsKK307CisKK2VudW0geworICBWRFNPX0NMT0NLX0dFVFRJTUUgPSAwLAorICBWRFNPX0dFVFRJTUVPRkRBWSwKKyAgVkRTT19FTkQKK307CisKK3N0YXRpYyB2ZHNvX2VudHJ5IHZkc29fZW50cmllc1tdID0geworICBbVkRTT19DTE9DS19HRVRUSU1FXSA9IHsgVkRTT19DTE9DS19HRVRUSU1FX1NZTUJPTCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX19jbG9ja19nZXR0aW1lKSB9LAorICBbVkRTT19HRVRUSU1FT0ZEQVldID0geyBWRFNPX0dFVFRJTUVPRkRBWV9TWU1CT0wsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9fZ2V0dGltZW9mZGF5KSB9LAorfTsKKworaW50IGNsb2NrX2dldHRpbWUoaW50IGNsb2NrX2lkLCB0aW1lc3BlYyogdHApIHsKKyAgc3RhdGljIGludCAoKnZkc29fY2xvY2tfZ2V0dGltZSkoaW50LCB0aW1lc3BlYyopID0KKyAgICAgIChpbnQgKCopKGludCwgdGltZXNwZWMqKSkgdmRzb19lbnRyaWVzW1ZEU09fQ0xPQ0tfR0VUVElNRV0uZm47CisgIHJldHVybiB2ZHNvX2Nsb2NrX2dldHRpbWUoY2xvY2tfaWQsIHRwKTsKK30KKworaW50IGdldHRpbWVvZmRheSh0aW1ldmFsKiB0diwgc3RydWN0IHRpbWV6b25lKiB0eikgeworICBzdGF0aWMgaW50ICgqdmRzb19nZXR0aW1lb2ZkYXkpKHRpbWV2YWwqLCBzdHJ1Y3QgdGltZXpvbmUqKSA9CisgICAgICAoaW50ICgqKSh0aW1ldmFsKiwgc3RydWN0IHRpbWV6b25lKikpIHZkc29fZW50cmllc1tWRFNPX0dFVFRJTUVPRkRBWV0uZm47CisgIHJldHVybiB2ZHNvX2dldHRpbWVvZmRheSh0diwgdHopOworfQorCit2b2lkIF9fbGliY19pbml0X3Zkc28oKSB7CisgIC8vIERvIHdlIGhhdmUgYSB2ZHNvPworICB1aW50cHRyX3QgdmRzb19laGRyX2FkZHIgPSBnZXRhdXh2YWwoQVRfU1lTSU5GT19FSERSKTsKKyAgRWxmVyhFaGRyKSogdmRzb19laGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEVoZHIpKj4odmRzb19laGRyX2FkZHIpOworICBpZiAodmRzb19laGRyID09IE5VTEwpIHsKKyAgICByZXR1cm47CisgIH0KKworICAvLyBIb3cgbWFueSBzeW1ib2xzIGRvZXMgaXQgaGF2ZT8KKyAgc2l6ZV90IHN5bWJvbF9jb3VudCA9IDA7CisgIEVsZlcoU2hkcikqIHZkc29fc2hkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhTaGRyKSo+KHZkc29fZWhkcl9hZGRyICsgdmRzb19laGRyLT5lX3Nob2ZmKTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZHNvX2VoZHItPmVfc2hudW07ICsraSkgeworICAgIGlmICh2ZHNvX3NoZHJbaV0uc2hfdHlwZSA9PSBTSFRfRFlOU1lNKSB7CisgICAgICBzeW1ib2xfY291bnQgPSB2ZHNvX3NoZHJbaV0uc2hfc2l6ZSAvIHNpemVvZihFbGZXKFN5bSkpOworICAgIH0KKyAgfQorICBpZiAoc3ltYm9sX2NvdW50ID09IDApIHsKKyAgICByZXR1cm47CisgIH0KKworICAvLyBXaGVyZSdzIHRoZSBkeW5hbWljIHRhYmxlPworICBFbGZXKEFkZHIpIHZkc29fYWRkciA9IDA7CisgIEVsZlcoRHluKSogdmRzb19keW4gPSBOVUxMOworICBFbGZXKFBoZHIpKiB2ZHNvX3BoZHIgPSByZWludGVycHJldF9jYXN0PEVsZlcoUGhkcikqPih2ZHNvX2VoZHJfYWRkciArIHZkc29fZWhkci0+ZV9waG9mZik7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmRzb19laGRyLT5lX3BobnVtOyArK2kpIHsKKyAgICBpZiAodmRzb19waGRyW2ldLnBfdHlwZSA9PSBQVF9EWU5BTUlDKSB7CisgICAgICB2ZHNvX2R5biA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhEeW4pKj4odmRzb19laGRyX2FkZHIgKyB2ZHNvX3BoZHJbaV0ucF9vZmZzZXQpOworICAgIH0gZWxzZSBpZiAodmRzb19waGRyW2ldLnBfdHlwZSA9PSBQVF9MT0FEKSB7CisgICAgICB2ZHNvX2FkZHIgPSB2ZHNvX2VoZHJfYWRkciArIHZkc29fcGhkcltpXS5wX29mZnNldCAtIHZkc29fcGhkcltpXS5wX3ZhZGRyOworICAgIH0KKyAgfQorICBpZiAodmRzb19hZGRyID09IDAgfHwgdmRzb19keW4gPT0gTlVMTCkgeworICAgIHJldHVybjsKKyAgfQorCisgIC8vIFdoZXJlIGFyZSB0aGUgc3RyaW5nIGFuZCBzeW1ib2wgdGFibGVzPworICBjb25zdCBjaGFyKiBzdHJ0YWIgPSBOVUxMOworICBFbGZXKFN5bSkqIHN5bXRhYiA9IE5VTEw7CisgIGZvciAoRWxmVyhEeW4pKiBkID0gdmRzb19keW47IGQtPmRfdGFnICE9IERUX05VTEw7ICsrZCkgeworICAgIGlmIChkLT5kX3RhZyA9PSBEVF9TVFJUQUIpIHsKKyAgICAgIHN0cnRhYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZkc29fYWRkciArIGQtPmRfdW4uZF9wdHIpOworICAgIH0gZWxzZSBpZiAoZC0+ZF90YWcgPT0gRFRfU1lNVEFCKSB7CisgICAgICBzeW10YWIgPSByZWludGVycHJldF9jYXN0PEVsZlcoU3ltKSo+KHZkc29fYWRkciArIGQtPmRfdW4uZF9wdHIpOworICAgIH0KKyAgfQorICBpZiAoc3RydGFiID09IE5VTEwgfHwgc3ltdGFiID09IE5VTEwpIHsKKyAgICByZXR1cm47CisgIH0KKworICAvLyBBcmUgdGhlcmUgYW55IHN5bWJvbHMgd2Ugd2FudD8KKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzeW1ib2xfY291bnQ7ICsraSkgeworICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgVkRTT19FTkQ7ICsraikgeworICAgICAgaWYgKHN0cmNtcCh2ZHNvX2VudHJpZXNbal0ubmFtZSwgc3RydGFiICsgc3ltdGFiW2ldLnN0X25hbWUpID09IDApIHsKKyAgICAgICAgdmRzb19lbnRyaWVzW2pdLmZuID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmRzb19hZGRyICsgc3ltdGFiW2ldLnN0X3ZhbHVlKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworI2Vsc2UKKwordm9pZCBfX2xpYmNfaW5pdF92ZHNvKCkgeworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3dhaXQuY3BwIGIvbGliYy9iaW9uaWMvd2FpdC5jcHAKaW5kZXggY2Q3NWMxMC4uZTVjOTNhYSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvd2FpdC5jcHAKKysrIGIvbGliYy9iaW9uaWMvd2FpdC5jcHAKQEAgLTM1LDEwICszNSw2IEBACiAgIHJldHVybiB3YWl0NCgtMSwgc3RhdHVzLCAwLCBOVUxMKTsKIH0KIAotcGlkX3Qgd2FpdDMoaW50KiBzdGF0dXMsIGludCBvcHRpb25zLCBzdHJ1Y3QgcnVzYWdlKiBydXNhZ2UpIHsKLSAgcmV0dXJuIHdhaXQ0KC0xLCBzdGF0dXMsIG9wdGlvbnMsIHJ1c2FnZSk7Ci19Ci0KIHBpZF90IHdhaXRwaWQocGlkX3QgcGlkLCBpbnQqIHN0YXR1cywgaW50IG9wdGlvbnMpIHsKICAgcmV0dXJuIHdhaXQ0KHBpZCwgc3RhdHVzLCBvcHRpb25zLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3djaGFyLmNwcCBiL2xpYmMvYmlvbmljL3djaGFyLmNwcAppbmRleCA1MGEzODc1Li5lMDg3OWI5IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy93Y2hhci5jcHAKKysrIGIvbGliYy9iaW9uaWMvd2NoYXIuY3BwCkBAIC0xLDI4NiArMSwyNDUgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorLyoJJE9wZW5CU0Q6IGNpdHJ1c191dGY4LmMsdiAxLjYgMjAxMi8xMi8wNSAyMzoxOTo1OSBkZXJhYWR0IEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgVGltIEouIFJvYmJpbnMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDx1Y2hhci5oPgogCi0vKiBzdHVicyBmb3Igd2lkZS1jaGFyIGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX21ic3RhdGUuaCIKIAotd2ludF90IGJ0b3djKGludCBjKSB7Ci0gIHJldHVybiAoYyA9PSBFT0YpID8gV0VPRiA6IGM7CisvLworLy8gVGhpcyBmaWxlIGlzIGJhc2ljYWxseSBPcGVuQlNEJ3MgY2l0cnVzX3V0ZjguYyBidXQgcmV3cml0dGVuIHRvIG5vdCByZXF1aXJlIGEKKy8vIDEyLWJ5dGUgbWJzdGF0ZV90IHNvIHdlJ3JlIGJhY2t3YXJkcy1jb21wYXRpYmxlIHdpdGggb3VyIExQMzIgQUJJIHdoZXJlCisvLyBtYnN0YXRlX3Qgd2FzIG9ubHkgNCBieXRlcy4KKy8vCisvLyBUaGUgc3RhdGUgaXMgdGhlIFVURi04IHNlcXVlbmNlLiBXZSBvbmx5IHN1cHBvcnQgPD0gNC1ieXRlcyBzZXF1ZW5jZXMgc28gTFAzMgorLy8gbWJzdGF0ZV90IGFscmVhZHkgaGFzIGVub3VnaCBzcGFjZSAob3V0IG9mIHRoZSA0IGF2YWlsYWJsZSBieXRlcyB3ZSBvbmx5CisvLyBuZWVkIDMgc2luY2Ugd2Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gc3RvcmUgdGhlIGVudGlyZSBzZXF1ZW5jZSBpbiB0aGUKKy8vIGludGVybWVkaWFyeSBzdGF0ZSkuCisvLworLy8gVGhlIEMgc3RhbmRhcmQgbGVhdmVzIHRoZSBjb252ZXJzaW9uIHN0YXRlIHVuZGVmaW5lZCBhZnRlciBhIGJhZCBjb252ZXJzaW9uLgorLy8gVG8gYXZvaWQgdW5leHBlY3RlZCBmYWlsdXJlcyBkdWUgdG8gdGhlIHBvc3NpYmxlIHVzZSBvZiB0aGUgaW50ZXJuYWwgcHJpdmF0ZQorLy8gc3RhdGUgd2UgYWx3YXlzIHJlc2V0IHRoZSBjb252ZXJzaW9uIHN0YXRlIHdoZW4gZW5jb3VudGVyaW5nIGlsbGVnYWwKKy8vIHNlcXVlbmNlcy4KKy8vCisvLyBXZSBhbHNvIGltcGxlbWVudCB0aGUgUE9TSVggaW50ZXJmYWNlIGRpcmVjdGx5IHJhdGhlciB0aGFuIGJlaW5nIGFjY2Vzc2VkIHZpYQorLy8gZnVuY3Rpb24gcG9pbnRlcnMuCisvLworCitpbnQgbWJzaW5pdChjb25zdCBtYnN0YXRlX3QqIHBzKSB7CisgIHJldHVybiAocHMgPT0gTlVMTCB8fCAoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4ocHMtPl9fc2VxKSkgPT0gMCkpOwogfQogCi1pbnQgZndwcmludGYoRklMRSogc3RyZWFtLCBjb25zdCB3Y2hhcl90KiBmb3JtYXQsIC4uLikgewotICB2YV9saXN0IGFyZ3M7Ci0gIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0gIGludCByZXN1bHQgPSB2ZndwcmludGYoc3RyZWFtLCBmb3JtYXQsIGFyZ3MpOwotICB2YV9lbmQoYXJncyk7Ci0gIHJldHVybiByZXN1bHQ7CitzaXplX3QgbWJydG93Yyh3Y2hhcl90KiBwd2MsIGNvbnN0IGNoYXIqIHMsIHNpemVfdCBuLCBtYnN0YXRlX3QqIHBzKSB7CisgIHN0YXRpYyBtYnN0YXRlX3QgX19wcml2YXRlX3N0YXRlOworICBtYnN0YXRlX3QqIHN0YXRlID0gKHBzID09IE5VTEwpID8gJl9fcHJpdmF0ZV9zdGF0ZSA6IHBzOworCisgIC8vIE91ciB3Y2hhcl90IGlzIFVURi0zMgorICByZXR1cm4gbWJydG9jMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyMzJfdCo+KHB3YyksIHMsIG4sIHN0YXRlKTsKIH0KIAotaW50IHdwcmludGYoY29uc3Qgd2NoYXJfdCogZm9ybWF0LCAuLi4pIHsKLSAgdmFfbGlzdCBhcmdzOwotICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICBpbnQgcmVzdWx0ID0gdndwcmludGYoZm9ybWF0LCBhcmdzKTsKLSAgdmFfZW5kKGFyZ3MpOwotICByZXR1cm4gcmVzdWx0OwotfQorc2l6ZV90IG1ic25ydG93Y3Mod2NoYXJfdCogZHN0LCBjb25zdCBjaGFyKiogc3JjLCBzaXplX3Qgbm1jLCBzaXplX3QgbGVuLCBtYnN0YXRlX3QqIHBzKSB7CisgIHN0YXRpYyBtYnN0YXRlX3QgX19wcml2YXRlX3N0YXRlOworICBtYnN0YXRlX3QqIHN0YXRlID0gKHBzID09IE5VTEwpID8gJl9fcHJpdmF0ZV9zdGF0ZSA6IHBzOworICBzaXplX3QgaSwgbywgcjsKIAotaW50IHN3cHJpbnRmKHdjaGFyX3QqIHMsIHNpemVfdCBuLCBjb25zdCB3Y2hhcl90KiBmb3JtYXQsIC4uLikgewotICB2YV9saXN0IGFyZ3M7Ci0gIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0gIGludCByZXN1bHQgPSB2c3dwcmludGYocywgbiwgZm9ybWF0LCBhcmdzKTsKLSAgdmFfZW5kKGFyZ3MpOwotICByZXR1cm4gcmVzdWx0OwotfQotCi1pbnQgdndwcmludGYoY29uc3Qgd2NoYXJfdCogZm9ybWF0LCB2YV9saXN0IGFyZykgewotICByZXR1cm4gdmZ3cHJpbnRmKHN0ZG91dCwgZm9ybWF0LCBhcmcpOwotfQotCi1pbnQgdmZ3cHJpbnRmKEZJTEUqIC8qc3RyZWFtKi8sIGNvbnN0IHdjaGFyX3QqIC8qZm9ybWF0Ki8sIHZhX2xpc3QgLyphcmcqLykgewotICBlcnJubyA9IEVOT1RTVVA7Ci0gIHJldHVybiAtMTsKLX0KLQotaW50IHZzd3ByaW50Zih3Y2hhcl90KiAvKnMqLywgc2l6ZV90IC8qbiovLCBjb25zdCB3Y2hhcl90KiAvKmZvcm1hdCovLCB2YV9saXN0IC8qYXJnKi8pIHsKLSAgZXJybm8gPSBFTk9UU1VQOwotICByZXR1cm4gLTE7Ci19Ci0KLWludCBmd3NjYW5mKEZJTEUqIC8qc3RyZWFtKi8sIGNvbnN0IHdjaGFyX3QqIC8qZm9ybWF0Ki8sIC4uLiApIHsKLSAgZXJybm8gPSBFTk9UU1VQOwotICByZXR1cm4gLTE7Ci19Ci0KLWludCB3c2NhbmYoY29uc3Qgd2NoYXJfdCogZm9ybWF0LCAuLi4gKSB7Ci0gIHZhX2xpc3QgYXJnczsKLSAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7Ci0gIGludCByZXN1bHQgPSBmd3NjYW5mKHN0ZG91dCwgZm9ybWF0LCBhcmdzICk7Ci0gIHZhX2VuZCAoYXJncyk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLWludCBzd3NjYW5mKGNvbnN0IHdjaGFyX3QqIC8qcyovLCBjb25zdCB3Y2hhcl90KiAvKmZvcm1hdCovLCAuLi4gKSB7Ci0gIGVycm5vID0gRU5PVFNVUDsKLSAgcmV0dXJuIC0xOwotfQotCi1pbnQgaXN3YWxudW0od2ludF90IHdjKSB7IHJldHVybiBpc2FsbnVtKHdjKTsgfQotaW50IGlzd2FscGhhKHdpbnRfdCB3YykgeyByZXR1cm4gaXNhbHBoYSh3Yyk7IH0KLWludCBpc3djbnRybCh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzY250cmwod2MpOyB9Ci1pbnQgaXN3ZGlnaXQod2ludF90IHdjKSB7IHJldHVybiBpc2RpZ2l0KHdjKTsgfQotaW50IGlzd2dyYXBoKHdpbnRfdCB3YykgeyByZXR1cm4gaXNncmFwaCh3Yyk7IH0KLWludCBpc3dsb3dlcih3aW50X3Qgd2MpIHsgcmV0dXJuIGlzbG93ZXIod2MpOyB9Ci1pbnQgaXN3cHJpbnQod2ludF90IHdjKSB7IHJldHVybiBpc3ByaW50KHdjKTsgfQotaW50IGlzd3B1bmN0KHdpbnRfdCB3YykgeyByZXR1cm4gaXNwdW5jdCh3Yyk7IH0KLWludCBpc3dzcGFjZSh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzc3BhY2Uod2MpOyB9Ci1pbnQgaXN3dXBwZXIod2ludF90IHdjKSB7IHJldHVybiBpc3VwcGVyKHdjKTsgfQotaW50IGlzd3hkaWdpdCh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzeGRpZ2l0KHdjKTsgfQotCi1pbnQgaXN3Y3R5cGUod2ludF90IHdjLCB3Y3R5cGVfdCBjaGFyX2NsYXNzKSB7Ci0gIHN3aXRjaCAoY2hhcl9jbGFzcykgewotICAgIGNhc2UgV0NfVFlQRV9BTE5VTTogcmV0dXJuIGlzYWxudW0od2MpOwotICAgIGNhc2UgV0NfVFlQRV9BTFBIQTogcmV0dXJuIGlzYWxwaGEod2MpOwotICAgIGNhc2UgV0NfVFlQRV9CTEFOSzogcmV0dXJuIGlzYmxhbmsod2MpOwotICAgIGNhc2UgV0NfVFlQRV9DTlRSTDogcmV0dXJuIGlzY250cmwod2MpOwotICAgIGNhc2UgV0NfVFlQRV9ESUdJVDogcmV0dXJuIGlzZGlnaXQod2MpOwotICAgIGNhc2UgV0NfVFlQRV9HUkFQSDogcmV0dXJuIGlzZ3JhcGgod2MpOwotICAgIGNhc2UgV0NfVFlQRV9MT1dFUjogcmV0dXJuIGlzbG93ZXIod2MpOwotICAgIGNhc2UgV0NfVFlQRV9QUklOVDogcmV0dXJuIGlzcHJpbnQod2MpOwotICAgIGNhc2UgV0NfVFlQRV9QVU5DVDogcmV0dXJuIGlzcHVuY3Qod2MpOwotICAgIGNhc2UgV0NfVFlQRV9TUEFDRTogcmV0dXJuIGlzc3BhY2Uod2MpOwotICAgIGNhc2UgV0NfVFlQRV9VUFBFUjogcmV0dXJuIGlzdXBwZXIod2MpOwotICAgIGNhc2UgV0NfVFlQRV9YRElHSVQ6IHJldHVybiBpc3hkaWdpdCh3Yyk7Ci0gICAgZGVmYXVsdDogcmV0dXJuIDA7CisgIGlmIChkc3QgPT0gTlVMTCkgeworICAgIC8qCisgICAgICogVGhlIGZhc3QgcGF0aCBpbiB0aGUgbG9vcCBiZWxvdyBpcyBub3Qgc2FmZSBpZiBhbiBBU0NJSQorICAgICAqIGNoYXJhY3RlciBhcHBlYXJzIGFzIGFueXRoaW5nIGJ1dCB0aGUgZmlyc3QgYnl0ZSBvZiBhCisgICAgICogbXVsdGlieXRlIHNlcXVlbmNlLiBDaGVjayBub3cgdG8gYXZvaWQgZG9pbmcgaXQgaW4gdGhlIGxvb3AuCisgICAgICovCisgICAgaWYgKChubWMgPiAwKSAmJiAobWJzdGF0ZV9ieXRlc19zb19mYXIoc3RhdGUpID4gMCkKKyAgICAgICAgJiYgKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KCgqc3JjKVswXSkgPCAweDgwKSkgeworICAgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm5faWxsZWdhbChFSUxTRVEsIHN0YXRlKTsKKyAgICB9CisgICAgZm9yIChpID0gbyA9IDA7IGkgPCBubWM7IGkgKz0gciwgbysrKSB7CisgICAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDhfdD4oKCpzcmMpW2ldKSA8IDB4ODApIHsKKyAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBwbGFpbiBBU0NJSSBjaGFyYWN0ZXJzLgorICAgICAgICBpZiAoKCpzcmMpW2ldID09ICdcMCcpIHsKKyAgICAgICAgICAqc3JjID0gbnVsbHB0cjsKKyAgICAgICAgICByZXR1cm4gcmVzZXRfYW5kX3JldHVybihvLCBzdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgciA9IDE7CisgICAgICB9IGVsc2UgeworICAgICAgICByID0gbWJydG93YyhOVUxMLCAqc3JjICsgaSwgbm1jIC0gaSwgc3RhdGUpOworICAgICAgICBpZiAociA9PSBfX01CX0VSUl9JTExFR0FMX1NFUVVFTkNFKSB7CisgICAgICAgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm5faWxsZWdhbChFSUxTRVEsIHN0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAociA9PSBfX01CX0VSUl9JTkNPTVBMRVRFX1NFUVVFTkNFKSB7CisgICAgICAgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm5faWxsZWdhbChFSUxTRVEsIHN0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAociA9PSAwKSB7CisgICAgICAgICAgKnNyYyA9IG51bGxwdHI7CisgICAgICAgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm4obywgc3RhdGUpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXNldF9hbmRfcmV0dXJuKG8sIHN0YXRlKTsKICAgfQotfQogCi13aW50X3QgZmdldHdjKEZJTEUqIHN0cmVhbSkgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8d2ludF90PihmZ2V0YyhzdHJlYW0pKTsKLX0KLQotd2NoYXJfdCogZmdldHdzKHdjaGFyX3QqIHdzLCBpbnQgbiwgRklMRSogc3RyZWFtKSB7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihmZ2V0cyhyZWludGVycHJldF9jYXN0PGNoYXIqPih3cyksIG4sIHN0cmVhbSkpOwotfQotCi13aW50X3QgZnB1dHdjKHdjaGFyX3Qgd2MsIEZJTEUqIHN0cmVhbSkgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8d2ludF90PihmcHV0YyhzdGF0aWNfY2FzdDxjaGFyPih3YyksIHN0cmVhbSkpOwotfQotCi1pbnQgZnB1dHdzKGNvbnN0IHdjaGFyX3QqIHN0ciwgRklMRSogc3RyZWFtKSB7Ci0gIHJldHVybiBmcHV0cyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHIpLCBzdHJlYW0gKTsKLX0KLQotaW50IGZ3aWRlKEZJTEUqIC8qc3RyZWFtKi8sIGludCBtb2RlKSB7Ci0gIHJldHVybiBtb2RlOwotfQotCi13aW50X3QgZ2V0d2MoRklMRSogc3RyZWFtKSB7Ci0gIHJldHVybiBnZXRjKHN0cmVhbSk7Ci19Ci0KLXdpbnRfdCBnZXR3Y2hhcigpIHsKLSAgcmV0dXJuIGdldGNoYXIoKTsKLX0KLQotaW50IG1ic2luaXQoY29uc3QgbWJzdGF0ZV90KiAvKnBzKi8pIHsKLSAgcmV0dXJuIDE7Ci19Ci0KLXNpemVfdCBtYnJsZW4oY29uc3QgY2hhciogLypzKi8sIHNpemVfdCBuLCBtYnN0YXRlX3QqIC8qcHMqLykgewotICByZXR1cm4gKG4gIT0gMCk7Ci19Ci0KLXNpemVfdCBtYnJ0b3djKHdjaGFyX3QqIHB3YywgY29uc3QgY2hhciogcywgc2l6ZV90IG4sIG1ic3RhdGVfdCogLypwcyovKSB7Ci0gIGlmIChzID09IE5VTEwpIHsKLSAgICBzICAgPSAiIjsKLSAgICBwd2MgPSBOVUxMOworICAvKgorICAgKiBUaGUgZmFzdCBwYXRoIGluIHRoZSBsb29wIGJlbG93IGlzIG5vdCBzYWZlIGlmIGFuIEFTQ0lJCisgICAqIGNoYXJhY3RlciBhcHBlYXJzIGFzIGFueXRoaW5nIGJ1dCB0aGUgZmlyc3QgYnl0ZSBvZiBhCisgICAqIG11bHRpYnl0ZSBzZXF1ZW5jZS4gQ2hlY2sgbm93IHRvIGF2b2lkIGRvaW5nIGl0IGluIHRoZSBsb29wLgorICAgKi8KKyAgaWYgKChubWMgPiAwKSAmJiAobWJzdGF0ZV9ieXRlc19zb19mYXIoc3RhdGUpID4gMCkKKyAgICAgICYmIChzdGF0aWNfY2FzdDx1aW50OF90PigoKnNyYylbMF0pIDwgMHg4MCkpIHsKKyAgICByZXR1cm4gcmVzZXRfYW5kX3JldHVybl9pbGxlZ2FsKEVJTFNFUSwgc3RhdGUpOwogICB9Ci0gIGlmIChuID09IDApIHsKLSAgICBpZiAocHdjKSB7Ci0gICAgICAqcHdjID0gMDsKLSAgICAgIHJldHVybiAwOworICBmb3IgKGkgPSBvID0gMDsgaSA8IG5tYyAmJiBvIDwgbGVuOyBpICs9IHIsIG8rKykgeworICAgIGlmIChzdGF0aWNfY2FzdDx1aW50OF90PigoKnNyYylbaV0pIDwgMHg4MCkgeworICAgICAgLy8gRmFzdCBwYXRoIGZvciBwbGFpbiBBU0NJSSBjaGFyYWN0ZXJzLgorICAgICAgZHN0W29dID0gKCpzcmMpW2ldOworICAgICAgciA9IDE7CisgICAgICBpZiAoKCpzcmMpW2ldID09ICdcMCcpIHsKKyAgICAgICAgKnNyYyA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiByZXNldF9hbmRfcmV0dXJuKG8sIHN0YXRlKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgciA9IG1icnRvd2MoZHN0ICsgbywgKnNyYyArIGksIG5tYyAtIGksIHN0YXRlKTsKKyAgICAgIGlmIChyID09IF9fTUJfRVJSX0lMTEVHQUxfU0VRVUVOQ0UpIHsKKyAgICAgICAgKnNyYyArPSBpOworICAgICAgICByZXR1cm4gcmVzZXRfYW5kX3JldHVybl9pbGxlZ2FsKEVJTFNFUSwgc3RhdGUpOworICAgICAgfQorICAgICAgaWYgKHIgPT0gX19NQl9FUlJfSU5DT01QTEVURV9TRVFVRU5DRSkgeworICAgICAgICAqc3JjICs9IG5tYzsKKyAgICAgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm4oRUlMU0VRLCBzdGF0ZSk7CisgICAgICB9CisgICAgICBpZiAociA9PSAwKSB7CisgICAgICAgICpzcmMgPSBOVUxMOworICAgICAgICByZXR1cm4gcmVzZXRfYW5kX3JldHVybihvLCBzdGF0ZSk7CisgICAgICB9CiAgICAgfQogICB9Ci0gIGlmIChwd2MpIHsKLSAgICAqcHdjID0gKnM7Ci0gIH0KLSAgcmV0dXJuICgqcyAhPSAwKTsKKyAgKnNyYyArPSBpOworICByZXR1cm4gcmVzZXRfYW5kX3JldHVybihvLCBzdGF0ZSk7CiB9CiAKLXNpemVfdCBtYnNydG93Y3Mod2NoYXJfdCogZHN0LCBjb25zdCBjaGFyKiogc3JjLCBzaXplX3QgbGVuLCBtYnN0YXRlX3QqIC8qcHMqLykgewotICBjb25zdCBjaGFyKiBzICA9ICpzcmM7Ci0gIGNvbnN0IGNoYXIqIHMyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obWVtY2hyKHMsIDAsIGxlbikpOworc2l6ZV90IG1ic3J0b3djcyh3Y2hhcl90KiBkc3QsIGNvbnN0IGNoYXIqKiBzcmMsIHNpemVfdCBsZW4sIG1ic3RhdGVfdCogcHMpIHsKKyAgcmV0dXJuIG1ic25ydG93Y3MoZHN0LCBzcmMsIFNJWkVfTUFYLCBsZW4sIHBzKTsKK30KIAotICBpZiAoczIgIT0gTlVMTCkgewotICAgIGxlbiA9IChzaXplX3QpKHMyIC0gcykgKyAxVTsKK3NpemVfdCB3Y3J0b21iKGNoYXIqIHMsIHdjaGFyX3Qgd2MsIG1ic3RhdGVfdCogcHMpIHsKKyAgc3RhdGljIG1ic3RhdGVfdCBfX3ByaXZhdGVfc3RhdGU7CisgIG1ic3RhdGVfdCogc3RhdGUgPSAocHMgPT0gTlVMTCkgPyAmX19wcml2YXRlX3N0YXRlIDogcHM7CisKKyAgLy8gT3VyIHdjaGFyX3QgaXMgVVRGLTMyCisgIHJldHVybiBjMzJydG9tYihzLCBzdGF0aWNfY2FzdDxjaGFyMzJfdD4od2MpLCBzdGF0ZSk7Cit9CisKK3NpemVfdCB3Y3NucnRvbWJzKGNoYXIqIGRzdCwgY29uc3Qgd2NoYXJfdCoqIHNyYywgc2l6ZV90IG53Yywgc2l6ZV90IGxlbiwgbWJzdGF0ZV90KiBwcykgeworICBzdGF0aWMgbWJzdGF0ZV90IF9fcHJpdmF0ZV9zdGF0ZTsKKyAgbWJzdGF0ZV90KiBzdGF0ZSA9IChwcyA9PSBOVUxMKSA/ICZfX3ByaXZhdGVfc3RhdGUgOiBwczsKKworICBpZiAoIW1ic2luaXQoc3RhdGUpKSB7CisgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm5faWxsZWdhbChFSUxTRVEsIHN0YXRlKTsKICAgfQogCi0gIGlmIChkc3QpIHsKLSAgICBtZW1jcHkocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZHN0KSwgcywgbGVuICk7CisgIGNoYXIgYnVmW01CX0xFTl9NQVhdOworICBzaXplX3QgaSwgbywgcjsKKyAgaWYgKGRzdCA9PSBOVUxMKSB7CisgICAgZm9yIChpID0gbyA9IDA7IGkgPCBud2M7IGkrKywgbyArPSByKSB7CisgICAgICB3Y2hhcl90IHdjID0gKCpzcmMpW2ldOworICAgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQzMl90Pih3YykgPCAweDgwKSB7CisgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgcGxhaW4gQVNDSUkgY2hhcmFjdGVycy4KKyAgICAgICAgaWYgKHdjID09IDApIHsKKyAgICAgICAgICByZXR1cm4gbzsKKyAgICAgICAgfQorICAgICAgICByID0gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHIgPSB3Y3J0b21iKGJ1Ziwgd2MsIHN0YXRlKTsKKyAgICAgICAgaWYgKHIgPT0gX19NQl9FUlJfSUxMRUdBTF9TRVFVRU5DRSkgeworICAgICAgICAgIHJldHVybiByOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBvOwogICB9CiAKLSAgKnNyYyA9IHMgKyBsZW47Ci0gIHJldHVybiBsZW47Ci19Ci0KLXNpemVfdCBtYnN0b3djcyh3Y2hhcl90KiBkc3QsIGNvbnN0IGNoYXIqIHNyYywgc2l6ZV90IGxlbikgewotICByZXR1cm4gbWJzcnRvd2NzKGRzdCwgJnNyYywgbGVuLCBOVUxMKTsKLX0KLQotd2ludF90IHB1dHdjKHdjaGFyX3Qgd2MsIEZJTEUqIHN0cmVhbSkgewotICByZXR1cm4gZnB1dGMoc3RhdGljX2Nhc3Q8Y2hhcj4od2MpLCBzdHJlYW0pOwotfQotCi13aW50X3QgcHV0d2NoYXIod2NoYXJfdCB3YykgewotICByZXR1cm4gcHV0Y2hhcihzdGF0aWNfY2FzdDxjaGFyPih3YykpOwotfQotCi13aW50X3QgdG93bG93ZXIod2ludF90IHdjKSB7Ci0gIHJldHVybiB0b2xvd2VyKHdjKTsKLX0KLQotd2ludF90IHRvd3VwcGVyKHdpbnRfdCB3YykgewotICByZXR1cm4gdG91cHBlcih3Yyk7Ci19Ci0KLXdpbnRfdCB1bmdldHdjKHdpbnRfdCB3YywgRklMRSogc3RyZWFtKSB7Ci0gIHJldHVybiB1bmdldGMoc3RhdGljX2Nhc3Q8Y2hhcj4od2MpLCBzdHJlYW0pOwotfQotCi1zaXplX3Qgd2NydG9tYihjaGFyKiBzLCB3Y2hhcl90IC8qd2MqLywgbWJzdGF0ZV90KiAvKnBzKi8pIHsKLSAgaWYgKHMgIT0gTlVMTCkgewotICAgICpzID0gMTsKLSAgfQotICByZXR1cm4gMTsKLX0KLQotc2l6ZV90IHdjc2Z0aW1lKHdjaGFyX3QqIHdjcywgc2l6ZV90IG1heHNpemUsIGNvbnN0IHdjaGFyX3QqIGZvcm1hdCwgIGNvbnN0IHN0cnVjdCB0bSogdGltcHRyKSB7Ci0gIHJldHVybiBzdHJmdGltZShyZWludGVycHJldF9jYXN0PGNoYXIqPih3Y3MpLCBtYXhzaXplLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihmb3JtYXQpLCB0aW1wdHIpOwotfQotCi1zaXplX3Qgd2NzcnRvbWJzKGNoYXIqIGRzdCwgY29uc3Qgd2NoYXJfdCoqIHNyYywgc2l6ZV90IGxlbiwgbWJzdGF0ZV90KiAvKnBzKi8pIHsKLSAgY29uc3QgY2hhciogcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCpzcmMpOwotICBjb25zdCBjaGFyKiBzMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1lbWNocihzLCAwLCBsZW4pKTsKLSAgaWYgKHMyICE9IE5VTEwpIHsKLSAgICBsZW4gPSAoczIgLSBzKSsxOwotICB9Ci0gIGlmIChkc3QgIT0gTlVMTCkgewotICAgIG1lbWNweSggZHN0LCBzLCBsZW4gKTsKLSAgfQotICAqc3JjID0gKHdjaGFyX3QqKShzICsgbGVuKTsKLSAgcmV0dXJuIGxlbjsKLX0KLQotc2l6ZV90IHdjc3RvbWJzKGNoYXIqIGRzdCwgY29uc3Qgd2NoYXJfdCogc3JjLCBzaXplX3QgbGVuKSB7Ci0gIHJldHVybiB3Y3NydG9tYnMoZHN0LCAmc3JjLCBsZW4sIE5VTEwpOwotfQotCi1kb3VibGUgd2NzdG9kKGNvbnN0IHdjaGFyX3QqIG5wdHIsIHdjaGFyX3QqKiBlbmRwdHIpIHsKLSAgcmV0dXJuIHN0cnRvZChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihucHRyKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KGVuZHB0cikpOwotfQotCi1sb25nIGludCB3Y3N0b2woY29uc3Qgd2NoYXJfdCogbnB0ciwgd2NoYXJfdCoqIGVuZHB0ciwgaW50IGJhc2UpIHsKLSAgcmV0dXJuIHN0cnRvbChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihucHRyKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KGVuZHB0ciksIGJhc2UpOwotfQotCi11bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsKGNvbnN0IHdjaGFyX3QqIG5wdHIsIHdjaGFyX3QqKiBlbmRwdHIsIGludCBiYXNlKSB7Ci0gIHJldHVybiBzdHJ0b3VsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG5wdHIpLCByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZW5kcHRyKSwgYmFzZSk7Ci19Ci0KLXdjaGFyX3QqIHdjc3djcyhjb25zdCB3Y2hhcl90KiB3czEsIGNvbnN0IHdjaGFyX3QqIHdzMikgewotICBjb25zdCBjaGFyKiBzMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHdzMSk7Ci0gIGNvbnN0IGNoYXIqIHMyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4od3MyKTsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KHN0cnN0cihzMSwgczIpKTsKLX0KLQotaW50IHdjdG9iKHdpbnRfdCBjKSB7Ci0gIHJldHVybiBjOwotfQotCi13Y3R5cGVfdCB3Y3R5cGUoY29uc3QgY2hhciogcHJvcGVydHkpIHsKLSAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0ICBwcm9wZXJ0aWVzW1dDX1RZUEVfTUFYXSA9IHsKLSAgICAiPGludmFsaWQ+IiwKLSAgICAiYWxudW0iLCAiYWxwaGEiLCAiYmxhbmsiLCAiY250cmwiLCAiZGlnaXQiLCAiZ3JhcGgiLAotICAgICJsb3dlciIsICJwcmludCIsICJwdW5jdCIsICJzcGFjZSIsICJ1cHBlciIsICJ4ZGlnaXQiCi0gIH07Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV0NfVFlQRV9NQVg7ICsraSkgewotICAgIGlmICghc3RyY21wKHByb3BlcnRpZXNbaV0sIHByb3BlcnR5KSkgewotICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHdjdHlwZV90PihpKTsKKyAgZm9yIChpID0gbyA9IDA7IGkgPCBud2MgJiYgbyA8IGxlbjsgaSsrLCBvICs9IHIpIHsKKyAgICB3Y2hhcl90IHdjID0gKCpzcmMpW2ldOworICAgIGlmIChzdGF0aWNfY2FzdDx1aW50MzJfdD4od2MpIDwgMHg4MCkgeworICAgICAgLy8gRmFzdCBwYXRoIGZvciBwbGFpbiBBU0NJSSBjaGFyYWN0ZXJzLgorICAgICAgZHN0W29dID0gd2M7CisgICAgICBpZiAod2MgPT0gMCkgeworICAgICAgICAqc3JjID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIG87CisgICAgICB9CisgICAgICByID0gMTsKKyAgICB9IGVsc2UgaWYgKGxlbiAtIG8gPj0gc2l6ZW9mKGJ1ZikpIHsKKyAgICAgIC8vIEVub3VnaCBzcGFjZSB0byB0cmFuc2xhdGUgaW4tcGxhY2UuCisgICAgICByID0gd2NydG9tYihkc3QgKyBvLCB3Yywgc3RhdGUpOworICAgICAgaWYgKHIgPT0gX19NQl9FUlJfSUxMRUdBTF9TRVFVRU5DRSkgeworICAgICAgICAqc3JjICs9IGk7CisgICAgICAgIHJldHVybiByOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAvLyBNYXkgbm90IGJlIGVub3VnaCBzcGFjZTsgdXNlIHRlbXAgYnVmZmVyLgorICAgICAgciA9IHdjcnRvbWIoYnVmLCB3Yywgc3RhdGUpOworICAgICAgaWYgKHIgPT0gX19NQl9FUlJfSUxMRUdBTF9TRVFVRU5DRSkgeworICAgICAgICAqc3JjICs9IGk7CisgICAgICAgIHJldHVybiByOworICAgICAgfQorICAgICAgaWYgKHIgPiBsZW4gLSBvKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgbWVtY3B5KGRzdCArIG8sIGJ1Ziwgcik7CiAgICAgfQogICB9Ci0gIHJldHVybiBzdGF0aWNfY2FzdDx3Y3R5cGVfdD4oMCk7CisgICpzcmMgKz0gaTsKKyAgcmV0dXJuIG87CiB9CiAKLWludCB3Y3dpZHRoKHdjaGFyX3Qgd2MpIHsKLSAgcmV0dXJuICh3YyA+IDApOworc2l6ZV90IHdjc3J0b21icyhjaGFyKiBkc3QsIGNvbnN0IHdjaGFyX3QqKiBzcmMsIHNpemVfdCBsZW4sIG1ic3RhdGVfdCogcHMpIHsKKyAgcmV0dXJuIHdjc25ydG9tYnMoZHN0LCBzcmMsIFNJWkVfTUFYLCBsZW4sIHBzKTsKK30KKworaW50IHdjc2NvbGxfbChjb25zdCB3Y2hhcl90ICp3czEsIGNvbnN0IHdjaGFyX3QgKndzMiwgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIHdjc2NvbGwod3MxLCB3czIpOworfQorCitzaXplX3Qgd2NzeGZybV9sKHdjaGFyX3QgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYywgc2l6ZV90IG4sIGxvY2FsZV90KSB7CisgIHJldHVybiB3Y3N4ZnJtKGRlc3QsIHNyYywgbik7Cit9CisKK2xvbmcgbG9uZyB3Y3N0b2xsX2woY29uc3Qgd2NoYXJfdCAqbnB0ciwgd2NoYXJfdCAqKmVuZHB0ciwgaW50IGJhc2UsCisgICAgICAgICAgICAgICAgICAgIGxvY2FsZV90KSB7CisgIHJldHVybiB3Y3N0b2xsKG5wdHIsIGVuZHB0ciwgYmFzZSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyB3Y3N0b3VsbF9sKGNvbnN0IHdjaGFyX3QgKm5wdHIsIHdjaGFyX3QgKiplbmRwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZSwgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIHdjc3RvdWxsKG5wdHIsIGVuZHB0ciwgYmFzZSk7Cit9CisKK2xvbmcgZG91YmxlIHdjc3RvbGRfbChjb25zdCB3Y2hhcl90ICpucHRyLCB3Y2hhcl90ICoqZW5kcHRyLCBsb2NhbGVfdCkgeworICByZXR1cm4gd2NzdG9sZChucHRyLCBlbmRwdHIpOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvd2NzY29sbC5jIGIvbGliYy9iaW9uaWMvd2NzY29sbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTg0M2I3Li4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3djc2NvbGwuYworKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDx3Y2hhci5oPgotLyoKLSAqIENvbXBhcmUgc3RyaW5ncyB1c2luZyB0aGUgY3VycmVudCBsb2NhbGUuICBTaW5jZSBCaW9uaWMgcmVhbGx5IGRvZXMgbm90Ci0gKiBzdXBwb3J0IGxvY2FsZXMsIHdlIGFzc3VtZSB3ZSBhbHdheXMgdXNlIHRoZSBDIGxvY2FsZSBhbmQgY2FsbCB3Y3NjbXAuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBtYWtlIGxpYnN0ZGMrKy12MyB1c2FibGUuCi0gKi8KLWludAotd2NzY29sbChjb25zdCB3Y2hhcl90ICp3czEsIGNvbnN0IHdjaGFyX3QgKndzMikKLXsKLSAgICByZXR1cm4gd2NzY21wKHdzMSwgd3MyKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3djdHlwZS5jcHAgYi9saWJjL2Jpb25pYy93Y3R5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZDc4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy93Y3R5cGUuY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8d2N0eXBlLmg+CisKKy8vIFRPRE86IHRoZXNlIG9ubHkgd29yayBmb3IgdGhlIEFTQ0lJIHJhbmdlOyByZXdyaXRlIHRvIGRsc3ltIGljdTRjPyBodHRwOi8vYi8xNDQ5OTY1NAorCitpbnQgaXN3YWxudW0od2ludF90IHdjKSB7IHJldHVybiBpc2FsbnVtKHdjKTsgfQoraW50IGlzd2FscGhhKHdpbnRfdCB3YykgeyByZXR1cm4gaXNhbHBoYSh3Yyk7IH0KK2ludCBpc3dibGFuayh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzYmxhbmsod2MpOyB9CitpbnQgaXN3Y250cmwod2ludF90IHdjKSB7IHJldHVybiBpc2NudHJsKHdjKTsgfQoraW50IGlzd2RpZ2l0KHdpbnRfdCB3YykgeyByZXR1cm4gaXNkaWdpdCh3Yyk7IH0KK2ludCBpc3dncmFwaCh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzZ3JhcGgod2MpOyB9CitpbnQgaXN3bG93ZXIod2ludF90IHdjKSB7IHJldHVybiBpc2xvd2VyKHdjKTsgfQoraW50IGlzd3ByaW50KHdpbnRfdCB3YykgeyByZXR1cm4gaXNwcmludCh3Yyk7IH0KK2ludCBpc3dwdW5jdCh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzcHVuY3Qod2MpOyB9CitpbnQgaXN3c3BhY2Uod2ludF90IHdjKSB7IHJldHVybiBpc3NwYWNlKHdjKTsgfQoraW50IGlzd3VwcGVyKHdpbnRfdCB3YykgeyByZXR1cm4gaXN1cHBlcih3Yyk7IH0KK2ludCBpc3d4ZGlnaXQod2ludF90IHdjKSB7IHJldHVybiBpc3hkaWdpdCh3Yyk7IH0KKworaW50IGlzd2FsbnVtX2wod2ludF90IGMsIGxvY2FsZV90KSB7IHJldHVybiBpc3dhbG51bShjKTsgfQoraW50IGlzd2FscGhhX2wod2ludF90IGMsIGxvY2FsZV90KSB7IHJldHVybiBpc3dhbHBoYShjKTsgfQoraW50IGlzd2JsYW5rX2wod2ludF90IGMsIGxvY2FsZV90KSB7IHJldHVybiBpc3dibGFuayhjKTsgfQoraW50IGlzd2NudHJsX2wod2ludF90IGMsIGxvY2FsZV90KSB7IHJldHVybiBpc3djbnRybChjKTsgfQoraW50IGlzd2RpZ2l0X2wod2ludF90IGMsIGxvY2FsZV90KSB7IHJldHVybiBpc3dkaWdpdChjKTsgfQoraW50IGlzd2dyYXBoX2wod2ludF90IGMsIGxvY2FsZV90KSB7IHJldHVybiBpc3dncmFwaChjKTsgfQoraW50IGlzd2xvd2VyX2wod2ludF90IGMsIGxvY2FsZV90KSB7IHJldHVybiBpc3dsb3dlcihjKTsgfQoraW50IGlzd3ByaW50X2wod2ludF90IGMsIGxvY2FsZV90KSB7IHJldHVybiBpc3dwcmludChjKTsgfQoraW50IGlzd3B1bmN0X2wod2ludF90IGMsIGxvY2FsZV90KSB7IHJldHVybiBpc3dwdW5jdChjKTsgfQoraW50IGlzd3NwYWNlX2wod2ludF90IGMsIGxvY2FsZV90KSB7IHJldHVybiBpc3dzcGFjZShjKTsgfQoraW50IGlzd3VwcGVyX2wod2ludF90IGMsIGxvY2FsZV90KSB7IHJldHVybiBpc3d1cHBlcihjKTsgfQoraW50IGlzd3hkaWdpdF9sKHdpbnRfdCBjLCBsb2NhbGVfdCkgeyByZXR1cm4gaXN3eGRpZ2l0KGMpOyB9CisKK2ludCBpc3djdHlwZSh3aW50X3Qgd2MsIHdjdHlwZV90IGNoYXJfY2xhc3MpIHsKKyAgc3dpdGNoIChjaGFyX2NsYXNzKSB7CisgICAgY2FzZSBXQ19UWVBFX0FMTlVNOiByZXR1cm4gaXN3YWxudW0od2MpOworICAgIGNhc2UgV0NfVFlQRV9BTFBIQTogcmV0dXJuIGlzd2FscGhhKHdjKTsKKyAgICBjYXNlIFdDX1RZUEVfQkxBTks6IHJldHVybiBpc3dibGFuayh3Yyk7CisgICAgY2FzZSBXQ19UWVBFX0NOVFJMOiByZXR1cm4gaXN3Y250cmwod2MpOworICAgIGNhc2UgV0NfVFlQRV9ESUdJVDogcmV0dXJuIGlzd2RpZ2l0KHdjKTsKKyAgICBjYXNlIFdDX1RZUEVfR1JBUEg6IHJldHVybiBpc3dncmFwaCh3Yyk7CisgICAgY2FzZSBXQ19UWVBFX0xPV0VSOiByZXR1cm4gaXN3bG93ZXIod2MpOworICAgIGNhc2UgV0NfVFlQRV9QUklOVDogcmV0dXJuIGlzd3ByaW50KHdjKTsKKyAgICBjYXNlIFdDX1RZUEVfUFVOQ1Q6IHJldHVybiBpc3dwdW5jdCh3Yyk7CisgICAgY2FzZSBXQ19UWVBFX1NQQUNFOiByZXR1cm4gaXN3c3BhY2Uod2MpOworICAgIGNhc2UgV0NfVFlQRV9VUFBFUjogcmV0dXJuIGlzd3VwcGVyKHdjKTsKKyAgICBjYXNlIFdDX1RZUEVfWERJR0lUOiByZXR1cm4gaXN3eGRpZ2l0KHdjKTsKKyAgICBkZWZhdWx0OiByZXR1cm4gMDsKKyAgfQorfQorCitpbnQgaXN3Y3R5cGVfbCh3aW50X3Qgd2MsIHdjdHlwZV90IGNoYXJfY2xhc3MsIGxvY2FsZV90KSB7CisgIHJldHVybiBpc3djdHlwZSh3YywgY2hhcl9jbGFzcyk7Cit9CisKK3dpbnRfdCB0b3dsb3dlcih3aW50X3Qgd2MpIHsgcmV0dXJuIHRvbG93ZXIod2MpOyB9Cit3aW50X3QgdG93dXBwZXIod2ludF90IHdjKSB7IHJldHVybiB0b3VwcGVyKHdjKTsgfQorCitpbnQgdG93dXBwZXJfbChpbnQgYywgbG9jYWxlX3QpIHsgcmV0dXJuIHRvd3VwcGVyKGMpOyB9CitpbnQgdG93bG93ZXJfbChpbnQgYywgbG9jYWxlX3QpIHsgcmV0dXJuIHRvd2xvd2VyKGMpOyB9CisKK3djdHlwZV90IHdjdHlwZShjb25zdCBjaGFyKiBwcm9wZXJ0eSkgeworICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgIHByb3BlcnRpZXNbV0NfVFlQRV9NQVhdID0geworICAgICI8aW52YWxpZD4iLAorICAgICJhbG51bSIsICJhbHBoYSIsICJibGFuayIsICJjbnRybCIsICJkaWdpdCIsICJncmFwaCIsCisgICAgImxvd2VyIiwgInByaW50IiwgInB1bmN0IiwgInNwYWNlIiwgInVwcGVyIiwgInhkaWdpdCIKKyAgfTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXQ19UWVBFX01BWDsgKytpKSB7CisgICAgaWYgKCFzdHJjbXAocHJvcGVydGllc1tpXSwgcHJvcGVydHkpKSB7CisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8d2N0eXBlX3Q+KGkpOworICAgIH0KKyAgfQorICByZXR1cm4gc3RhdGljX2Nhc3Q8d2N0eXBlX3Q+KDApOworfQorCit3Y3R5cGVfdCB3Y3R5cGVfbChjb25zdCBjaGFyKiBwcm9wZXJ0eSwgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIHdjdHlwZShwcm9wZXJ0eSk7Cit9CisKK2ludCB3Y3dpZHRoKHdjaGFyX3Qgd2MpIHsKKyAgcmV0dXJuICh3YyA+IDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9jcnQubWsgYi9saWJjL2NydC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2JhNTRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9jcnQubWsKQEAgLTAsMCArMSwxNDkgQEAKKyMgRGVmaW5lIHRoZSBsaWJjIHJ1bi10aW1lIChjcnQpIHN1cHBvcnQgb2JqZWN0IGZpbGVzIHRoYXQgbXVzdCBiZSBidWlsdCwKKyMgd2hpY2ggYXJlIG5lZWRlZCB0byBidWlsZCBhbGwgb3RoZXIgb2JqZWN0cyAoc2hhcmVkL3N0YXRpYyBsaWJzIGFuZAorIyBleGVjdXRhYmxlcykKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgQUFyY2g2NCwgQVJNLCBNSVBTLCBhbmQgeDg2IGFsbCBuZWVkIGNydGJlZ2luX3NvL2NydGVuZF9zby4KKyMKKyMgRm9yIHg4NiwgdGhlIC5pbml0IHNlY3Rpb24gbXVzdCBwb2ludCB0byBhIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYWxsCisjIGVudHJpZXMgaW4gdGhlIC5jdG9ycyBzZWN0aW9uLiAob24gQVJNIHRoaXMgaXMgZG9uZSB0aHJvdWdoIHRoZQorIyAuaW5pdF9hcnJheSBzZWN0aW9uIGluc3RlYWQpLgorIworIyBGb3IgYWxsIHRoZSBwbGF0Zm9ybXMsIHRoZSAuZmluaV9hcnJheSBzZWN0aW9uIG11c3QgcG9pbnQgdG8gYSBmdW5jdGlvbgorIyB0aGF0IHdpbGwgY2FsbCBfX2N4YV9maW5hbGl6ZSgmX19kc29faGFuZGxlKSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdAorIyBzdGF0aWMgQysrIGRlc3RydWN0b3JzIGFyZSBwcm9wZXJseSBjYWxsZWQgb24gZGxjbG9zZSgpLgorIworIyBBcmdzOgorIyAgICAgbXlfMm5kX2FyY2hfcHJlZml4OiBzZXQgdG8gJChUQVJHRVRfMk5EX0FSQ0hfVkFSX1BSRUZJWCkgaWYgaXQncworIyAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIDJuZCBhcmNoOyBvdGhlcndpc2UgZW1wdHkuCisKK215X2FyY2ggOj0gJChUQVJHRVRfJChteV8ybmRfYXJjaF9wcmVmaXgpQVJDSCkKKworbXlfbGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX2ZpbGUgOj0gJChsaWJjX2NydF90YXJnZXRfY3J0YmVnaW5fZmlsZV8kKG15X2FyY2gpKQorbXlfbGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX3NvX2ZpbGUgOj0gJChsaWJjX2NydF90YXJnZXRfY3J0YmVnaW5fc29fZmlsZV8kKG15X2FyY2gpKQorCitteV9saWJjX2NydF90YXJnZXRfY2ZsYWdzIDo9IFwKKyAgICAkKGxpYmNfY3J0X3RhcmdldF9jZmxhZ3MpIFwKKyAgICAkKGxpYmNfY3J0X3RhcmdldF9jZmxhZ3NfJChteV9hcmNoKSkKKworbXlfbGliY19jcnRfdGFyZ2V0X3NvX2NmbGFncyA6PSBcCisgICAgJChsaWJjX2NydF90YXJnZXRfc29fY2ZsYWdzXyQobXlfYXJjaCkpIFwKKyAgICAkKG15X2xpYmNfY3J0X3RhcmdldF9jZmxhZ3MpCisKK215X2xpYmNfY3J0X3RhcmdldF9sZGZsYWdzIDo9ICQobGliY19jcnRfdGFyZ2V0X2xkZmxhZ3NfJChteV9hcmNoKSkKKworCisjIFNlZSB0aGUgY29tbWVudCBpbiBjcnRicmFuZC5jIGZvciB0aGUgcmVhc29uIHdoeSB3ZSBuZWVkIHRvIGdlbmVyYXRlCisjIGNydGJyYW5kLnMgYmVmb3JlIGdlbmVyYXRpbmcgY3J0YnJhbmQuby4KK0dFTiA6PSAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YnJhbmQucworJChHRU4pOiBQUklWQVRFX0NDIDo9ICQoJChteV8ybmRfYXJjaF9wcmVmaXgpVEFSR0VUX0NDKQorJChHRU4pOiBQUklWQVRFX0NGTEFHUyA6PSAkKG15X2xpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3MpCiskKEdFTik6ICQoTE9DQUxfUEFUSCkvYmlvbmljL2NydGJyYW5kLmMKKwlAbWtkaXIgLXAgJChkaXIgJEApCisJJChoaWRlKSAkKFBSSVZBVEVfQ0MpICQoUFJJVkFURV9DRkxBR1MpIC1TIFwKKwkJLU1EIC1NRiAkKEA6JS5zPSUuZCkgLW8gJEAgJDwKKwkkKGhpZGUpIHNlZCAtaSAtZSAnL1wubm90ZVwuQUJJLXRhZy9zL3Byb2diaXRzL25vdGUvJyAkQAorCSQoY2FsbCB0cmFuc2Zvcm0tZC10by1wLWFyZ3MsJChAOiUucz0lLmQpLCQoQDolLnM9JS5QKSkKKy1pbmNsdWRlICQoR0VOOiUucz0lLlApCisKKworR0VOIDo9ICQoJChteV8ybmRfYXJjaF9wcmVmaXgpVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRicmFuZC5vCiskKEdFTik6IFBSSVZBVEVfQ0MgOj0gJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfQ0MpCiskKEdFTik6IFBSSVZBVEVfQ0ZMQUdTIDo9ICQobXlfbGliY19jcnRfdGFyZ2V0X3NvX2NmbGFncykKKyQoR0VOKTogJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGJyYW5kLnMKKwlAbWtkaXIgLXAgJChkaXIgJEApCisJJChoaWRlKSAkKFBSSVZBVEVfQ0MpICQoUFJJVkFURV9DRkxBR1MpIC1vICRAIC1jICQ8CisKKworR0VOIDo9ICQoJChteV8ybmRfYXJjaF9wcmVmaXgpVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRiZWdpbl9zby5vCiskKEdFTik6IFBSSVZBVEVfQ0MgOj0gJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfQ0MpCiskKEdFTik6IFBSSVZBVEVfQ0ZMQUdTIDo9ICQobXlfbGliY19jcnRfdGFyZ2V0X3NvX2NmbGFncykKKyQoR0VOKTogJChteV9saWJjX2NydF90YXJnZXRfY3J0YmVnaW5fc29fZmlsZSkKKwlAbWtkaXIgLXAgJChkaXIgJEApCisJJChoaWRlKSAkKFBSSVZBVEVfQ0MpICQoUFJJVkFURV9DRkxBR1MpIFwKKwkJLU1EIC1NRiAkKEA6JS5vPSUuZCkgLW8gJEAgLWMgJDwKKwkkKHRyYW5zZm9ybS1kLXRvLXApCistaW5jbHVkZSAkKEdFTjolLm89JS5QKQorCisKK0dFTiA6PSAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0ZW5kX3NvLm8KKyQoR0VOKTogUFJJVkFURV9DQyA6PSAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9DQykKKyQoR0VOKTogUFJJVkFURV9DRkxBR1MgOj0gJChteV9saWJjX2NydF90YXJnZXRfc29fY2ZsYWdzKQorJChHRU4pOiAkKExPQ0FMX1BBVEgpL2FyY2gtY29tbW9uL2Jpb25pYy9jcnRlbmRfc28uUworCUBta2RpciAtcCAkKGRpciAkQCkKKwkkKGhpZGUpICQoUFJJVkFURV9DQykgJChQUklWQVRFX0NGTEFHUykgXAorCQktTUQgLU1GICQoQDolLm89JS5kKSAtbyAkQCAtYyAkPAorCSQodHJhbnNmb3JtLWQtdG8tcCkKKy1pbmNsdWRlICQoR0VOOiUubz0lLlApCisKKworIyBUaGUgZm9sbG93aW5nIHR3byBhcmUgaW5zdGFsbGVkIHRvIGRldmljZQorR0VOIDo9ICQoJChteV8ybmRfYXJjaF9wcmVmaXgpVEFSR0VUX09VVF9TSEFSRURfTElCUkFSSUVTKS9jcnRiZWdpbl9zby5vCiskKEdFTik6ICQoJChteV8ybmRfYXJjaF9wcmVmaXgpVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRiZWdpbl9zby5vCisJJChoaWRlKSBta2RpciAtcCAkKGRpciAkQCkgJiYgY3AgLWYgJDwgJEAKK0FMTF9HRU5FUkFURURfU09VUkNFUyArPSAkKEdFTikKKworR0VOIDo9ICQoJChteV8ybmRfYXJjaF9wcmVmaXgpVEFSR0VUX09VVF9TSEFSRURfTElCUkFSSUVTKS9jcnRlbmRfc28ubworJChHRU4pOiAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0ZW5kX3NvLm8KKwkkKGhpZGUpIG1rZGlyIC1wICQoZGlyICRAKSAmJiBjcCAtZiAkPCAkQAorQUxMX0dFTkVSQVRFRF9TT1VSQ0VTICs9ICQoR0VOKQorCisKK0dFTiA6PSAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fc3RhdGljMS5vCiskKEdFTik6IFBSSVZBVEVfQ0MgOj0gJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfQ0MpCiskKEdFTik6IFBSSVZBVEVfQ0ZMQUdTIDo9ICQobXlfbGliY19jcnRfdGFyZ2V0X2NmbGFncykKKyQoR0VOKTogJChteV9saWJjX2NydF90YXJnZXRfY3J0YmVnaW5fZmlsZSkKKwlAbWtkaXIgLXAgJChkaXIgJEApCisJJChoaWRlKSAkKFBSSVZBVEVfQ0MpICQoUFJJVkFURV9DRkxBR1MpIFwKKwkJLU1EIC1NRiAkKEA6JS5vPSUuZCkgLW8gJEAgLWMgJDwKKwkkKHRyYW5zZm9ybS1kLXRvLXApCistaW5jbHVkZSAkKEdFTjolLm89JS5QKQorCisKK0dFTiA6PSAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fc3RhdGljLm8KKyQoR0VOKTogUFJJVkFURV9MRCA6PSAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9MRCkKKyQoR0VOKTogUFJJVkFURV9MREZMQUdTIDo9ICQobXlfbGliY19jcnRfdGFyZ2V0X2xkZmxhZ3MpCiskKEdFTik6ICQoJChteV8ybmRfYXJjaF9wcmVmaXgpVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRiZWdpbl9zdGF0aWMxLm8gXAorICAgICQoJChteV8ybmRfYXJjaF9wcmVmaXgpVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRicmFuZC5vCisJQG1rZGlyIC1wICQoZGlyICRAKQorCSQoaGlkZSkgJChQUklWQVRFX0xEKSAkKFBSSVZBVEVfTERGTEFHUykgLXIgLW8gJEAgJF4KKworCitHRU4gOj0gJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGJlZ2luX2R5bmFtaWMxLm8KKyQoR0VOKTogUFJJVkFURV9DQyA6PSAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9DQykKKyQoR0VOKTogUFJJVkFURV9DRkxBR1MgOj0gJChteV9saWJjX2NydF90YXJnZXRfY2ZsYWdzKQorJChHRU4pOiAkKG15X2xpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9maWxlKQorCUBta2RpciAtcCAkKGRpciAkQCkKKwkkKGhpZGUpICQoUFJJVkFURV9DQykgJChQUklWQVRFX0NGTEFHUykgXAorCQktTUQgLU1GICQoQDolLm89JS5kKSAtbyAkQCAtYyAkPAorCSQodHJhbnNmb3JtLWQtdG8tcCkKKy1pbmNsdWRlICQoR0VOOiUubz0lLlApCisKKworR0VOIDo9ICQoJChteV8ybmRfYXJjaF9wcmVmaXgpVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRiZWdpbl9keW5hbWljLm8KKyQoR0VOKTogUFJJVkFURV9MRCA6PSAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9MRCkKKyQoR0VOKTogUFJJVkFURV9MREZMQUdTIDo9ICQobXlfbGliY19jcnRfdGFyZ2V0X2xkZmxhZ3MpCiskKEdFTik6ICQoJChteV8ybmRfYXJjaF9wcmVmaXgpVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRiZWdpbl9keW5hbWljMS5vIFwKKyAgICAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YnJhbmQubworCUBta2RpciAtcCAkKGRpciAkQCkKKwkkKGhpZGUpICQoUFJJVkFURV9MRCkgJChQUklWQVRFX0xERkxBR1MpIC1yIC1vICRAICReCisKKworIyBXZSByZW5hbWUgY3J0ZW5kLm8gdG8gY3J0ZW5kX2FuZHJvaWQubyB0byBhdm9pZCBhCisjIG5hbWUgY2xhc2ggYmV0d2VlbiBnY2MgYW5kIGJpb25pYy4KK0dFTiA6PSAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0ZW5kX2FuZHJvaWQubworJChHRU4pOiBQUklWQVRFX0NDIDo9ICQoJChteV8ybmRfYXJjaF9wcmVmaXgpVEFSR0VUX0NDKQorJChHRU4pOiBQUklWQVRFX0NGTEFHUyA6PSAkKG15X2xpYmNfY3J0X3RhcmdldF9jZmxhZ3MpCiskKEdFTik6ICQoTE9DQUxfUEFUSCkvYXJjaC1jb21tb24vYmlvbmljL2NydGVuZC5TCisJQG1rZGlyIC1wICQoZGlyICRAKQorCSQoaGlkZSkgJChQUklWQVRFX0NDKSAkKFBSSVZBVEVfQ0ZMQUdTKSBcCisJCS1NRCAtTUYgJChAOiUubz0lLmQpIC1vICRAIC1jICQ8CisJJCh0cmFuc2Zvcm0tZC10by1wKQorLWluY2x1ZGUgJChHRU46JS5vPSUuUCkKKworIyBDbGVhciB0ZW1wIHZhcnMKK215X2xpYmNfY3J0X3RhcmdldF9sZGZsYWdzIDo9CitteV9saWJjX2NydF90YXJnZXRfc29fY2ZsYWdzIDo9CitteV9saWJjX2NydF90YXJnZXRfY2ZsYWdzIDo9CitteV9saWJjX2NydF90YXJnZXRfY3J0YmVnaW5fc29fZmlsZSA6PQorbXlfbGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX2ZpbGUgOj0KK215X2FyY2ggOj0KZGlmZiAtLWdpdCBhL2xpYmMvZG5zL2dldGhuYW1hZGRyLmMgYi9saWJjL2Rucy9nZXRobmFtYWRkci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkODQ3YjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Rucy9nZXRobmFtYWRkci5jCkBAIC0wLDAgKzEsMTQxNiBAQAorLyoJJE5ldEJTRDogZ2V0aG5hbWFkZHIuYyx2IDEuNzAgMjAwNi8wMy8yMiAwMDowMzo1MSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogKytDb3B5cmlnaHQrKyAxOTg1LCAxOTg4LCAxOTkzCisgKiAtCisgKiBDb3B5cmlnaHQgKGMpIDE5ODUsIDE5ODgsIDE5OTMKKyAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIC0KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5MyBieSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0CisgKiB0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0CisgKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCisgKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKKyAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKiAtCisgKiAtLUNvcHlyaWdodC0tCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy91bi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNpbmNsdWRlICJOZXRkQ2xpZW50RGlzcGF0Y2guaCIKKyNpbmNsdWRlICJyZXNvbHZfbmV0aWQuaCIKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2luY2x1ZGUgInJlc29sdl9jYWNoZS5oIgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2luY2x1ZGUgPHN5c2xvZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjZGVmaW5lIEFMSUdOQllURVMgKHNpemVvZih1aW50cHRyX3QpIC0gMSkKKyNkZWZpbmUgQUxJR04ocCkgKCgodWludHB0cl90KShwKSArIEFMSUdOQllURVMpICZ+IEFMSUdOQllURVMpCisKKyNpZm5kZWYgTE9HX0FVVEgKKyMgZGVmaW5lIExPR19BVVRIIDAKKyNlbmRpZgorCisjZGVmaW5lIE1VTFRJX1BUUlNfQVJFX0FMSUFTRVMgMQkvKiBYWFggLSBleHBlcmltZW50YWwgKi8KKworI2luY2x1ZGUgIm5zc3dpdGNoLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8vIFRoaXMgc2hvdWxkIGJlIHN5bmNocm9uaXplZCB0byBSZXNwb25zZUNvZGUuaAorc3RhdGljIGNvbnN0IGludCBEbnNQcm94eVF1ZXJ5UmVzdWx0ID0gMjIyOworCitzdGF0aWMgY29uc3QgY2hhciBBc2tlZEZvckdvdFtdID0KKwkJCSAgImdldGhvc3RieSouZ2V0YW5zd2VyOiBhc2tlZCBmb3IgXCIlc1wiLCBnb3QgXCIlc1wiIjsKKworI2RlZmluZQlNQVhQQUNLRVQJKDY0KjEwMjQpCisKK3R5cGVkZWYgdW5pb24geworICAgIEhFQURFUiBoZHI7CisgICAgdV9jaGFyIGJ1ZltNQVhQQUNLRVRdOworfSBxdWVyeWJ1ZjsKKwordHlwZWRlZiB1bmlvbiB7CisgICAgaW50MzJfdCBhbDsKKyAgICBjaGFyIGFjOworfSBhbGlnbjsKKworI2lmZGVmIERFQlVHCitzdGF0aWMgdm9pZCBkcHJpbnRmKGNvbnN0IGNoYXIgKiwgcmVzX3N0YXRlLCAuLi4pCisJX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyhfX3ByaW50Zl9fLCAxLCAzKSkpOworI2VuZGlmCitzdGF0aWMgc3RydWN0IGhvc3RlbnQgKmdldGFuc3dlcihjb25zdCBxdWVyeWJ1ZiAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50LAorICAgIHJlc19zdGF0ZSk7CitzdGF0aWMgdm9pZCBtYXBfdjR2Nl9hZGRyZXNzKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKK3N0YXRpYyB2b2lkIG1hcF92NHY2X2hvc3RlbnQoc3RydWN0IGhvc3RlbnQgKiwgY2hhciAqKiwgY2hhciAqKTsKK3N0YXRpYyB2b2lkIGFkZHJzb3J0KGNoYXIgKiosIGludCwgcmVzX3N0YXRlKTsKKworc3RhdGljIHZvaWQgX3NldGh0ZW50KGludCk7CitzdGF0aWMgdm9pZCBfZW5kaHRlbnQodm9pZCk7CitzdGF0aWMgc3RydWN0IGhvc3RlbnQgKl9nZXRodGVudCh2b2lkKTsKK3ZvaWQgaHRfc2V0aG9zdGVudChpbnQpOwordm9pZCBodF9lbmRob3N0ZW50KHZvaWQpOworc3RydWN0IGhvc3RlbnQgKmh0X2dldGhvc3RieW5hbWUoY2hhciAqKTsKK3N0cnVjdCBob3N0ZW50ICpodF9nZXRob3N0YnlhZGRyKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOwordm9pZCBkbnNfc2VydmljZSh2b2lkKTsKKyN1bmRlZiBkbl9za2lwbmFtZQoraW50IGRuX3NraXBuYW1lKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKik7CitzdGF0aWMgaW50IF9nZXRodGJ5YWRkcih2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7CitzdGF0aWMgaW50IF9nZXRodGJ5bmFtZSh2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7CitzdGF0aWMgc3RydWN0IGhvc3RlbnQgKl9nZXRodGJ5bmFtZTIoY29uc3QgY2hhciAqLCBpbnQpOworc3RhdGljIGludCBfZG5zX2dldGh0YnlhZGRyKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKK3N0YXRpYyBpbnQgX2Ruc19nZXRodGJ5bmFtZSh2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7CisKK3N0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5bmFtZV9pbnRlcm5hbChjb25zdCBjaGFyICosIGludCwgcmVzX3N0YXRlLCB1bnNpZ25lZCwgdW5zaWduZWQpOworCitzdGF0aWMgY29uc3QgbnNfc3JjIGRlZmF1bHRfZG5zX2ZpbGVzW10gPSB7CisJeyBOU1NSQ19GSUxFUywgCU5TX1NVQ0NFU1MgfSwKKwl7IE5TU1JDX0ROUywgCU5TX1NVQ0NFU1MgfSwKKwl7IDAsIDAgfQorfTsKKworCisjaWZkZWYgREVCVUcKK3N0YXRpYyB2b2lkCitkcHJpbnRmKGNvbnN0IGNoYXIgKm1zZywgcmVzX3N0YXRlIHJlcywgLi4uKQoreworCWFzc2VydChtc2cgIT0gTlVMTCk7CisKKwlpZiAocmVzLT5vcHRpb25zICYgUkVTX0RFQlVHKSB7CisJCWludCBzYXZlID0gZXJybm87CisJCXZhX2xpc3QgYXA7CisKKwkJdmFfc3RhcnQgKGFwLCByZXMpOworCQl2cHJpbnRmKG1zZywgYXApOworCQl2YV9lbmQgKGFwKTsKKworCQllcnJubyA9IHNhdmU7CisJfQorfQorI2Vsc2UKKyMgZGVmaW5lIGRwcmludGYobXNnLCByZXMsIG51bSkgKCh2b2lkKTApIC8qbmFkYSovCisjZW5kaWYKKworI2RlZmluZSBCT1VOREVEX0lOQ1IoeCkgXAorCWRvIHsgXAorCQljcCArPSAoeCk7IFwKKwkJaWYgKGNwID4gZW9tKSB7IFwKKwkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsgXAorCQkJcmV0dXJuIE5VTEw7IFwKKwkJfSBcCisJfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgQk9VTkRTX0NIRUNLKHB0ciwgY291bnQpIFwKKwlkbyB7IFwKKwkJaWYgKChwdHIpICsgKGNvdW50KSA+IGVvbSkgeyBcCisJCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7IFwKKwkJCXJldHVybiBOVUxMOyBcCisJCX0gXAorCX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCitzdGF0aWMgc3RydWN0IGhvc3RlbnQgKgorZ2V0YW5zd2VyKGNvbnN0IHF1ZXJ5YnVmICphbnN3ZXIsIGludCBhbnNsZW4sIGNvbnN0IGNoYXIgKnFuYW1lLCBpbnQgcXR5cGUsCisgICAgcmVzX3N0YXRlIHJlcykKK3sKKwljb25zdCBIRUFERVIgKmhwOworCWNvbnN0IHVfY2hhciAqY3A7CisJaW50IG47CisJY29uc3QgdV9jaGFyICplb20sICplcmRhdGE7CisJY2hhciAqYnAsICoqYXAsICoqaGFwLCAqZXA7CisJaW50IHR5cGUsIGNsYXNzLCBhbmNvdW50LCBxZGNvdW50OworCWludCBoYXZlYW5zd2VyLCBoYWRfZXJyb3I7CisJaW50IHRvb2JpZyA9IDA7CisJY2hhciB0YnVmW01BWEROQU1FXTsKKwljb25zdCBjaGFyICp0bmFtZTsKKwlpbnQgKCpuYW1lX29rKShjb25zdCBjaGFyICopOworCXJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworCisJYXNzZXJ0KGFuc3dlciAhPSBOVUxMKTsKKwlhc3NlcnQocW5hbWUgIT0gTlVMTCk7CisKKwl0bmFtZSA9IHFuYW1lOworCXJzLT5ob3N0LmhfbmFtZSA9IE5VTEw7CisJZW9tID0gYW5zd2VyLT5idWYgKyBhbnNsZW47CisJc3dpdGNoIChxdHlwZSkgeworCWNhc2UgVF9BOgorCWNhc2UgVF9BQUFBOgorCQluYW1lX29rID0gcmVzX2hub2s7CisJCWJyZWFrOworCWNhc2UgVF9QVFI6CisJCW5hbWVfb2sgPSByZXNfZG5vazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CS8qIFhYWCBzaG91bGQgYmUgYWJvcnQoKTsgKi8KKwl9CisJLyoKKwkgKiBmaW5kIGZpcnN0IHNhdGlzZmFjdG9yeSBhbnN3ZXIKKwkgKi8KKwlocCA9ICZhbnN3ZXItPmhkcjsKKwlhbmNvdW50ID0gbnRvaHMoaHAtPmFuY291bnQpOworCXFkY291bnQgPSBudG9ocyhocC0+cWRjb3VudCk7CisJYnAgPSBycy0+aG9zdGJ1ZjsKKwllcCA9IHJzLT5ob3N0YnVmICsgc2l6ZW9mIHJzLT5ob3N0YnVmOworCWNwID0gYW5zd2VyLT5idWY7CisJQk9VTkRFRF9JTkNSKEhGSVhFRFNaKTsKKwlpZiAocWRjb3VudCAhPSAxKSB7CisJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIGJwLCBlcCAtIGJwKTsKKwlpZiAoKG4gPCAwKSB8fCAhKCpuYW1lX29rKShicCkpIHsKKwkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQlyZXR1cm4gTlVMTDsKKwl9CisJQk9VTkRFRF9JTkNSKG4gKyBRRklYRURTWik7CisJaWYgKHF0eXBlID09IFRfQSB8fCBxdHlwZSA9PSBUX0FBQUEpIHsKKwkJLyogcmVzX3NlbmQoKSBoYXMgYWxyZWFkeSB2ZXJpZmllZCB0aGF0IHRoZSBxdWVyeSBuYW1lIGlzIHRoZQorCQkgKiBzYW1lIGFzIHRoZSBvbmUgd2Ugc2VudDsgdGhpcyBqdXN0IGdldHMgdGhlIGV4cGFuZGVkIG5hbWUKKwkJICogKGkuZS4sIHdpdGggdGhlIHN1Y2NlZWRpbmcgc2VhcmNoLWRvbWFpbiB0YWNrZWQgb24pLgorCQkgKi8KKwkJbiA9IHN0cmxlbihicCkgKyAxOwkJLyogZm9yIHRoZSBcMCAqLworCQlpZiAobiA+PSBNQVhIT1NUTkFNRUxFTikgeworCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJcnMtPmhvc3QuaF9uYW1lID0gYnA7CisJCWJwICs9IG47CisJCS8qIFRoZSBxbmFtZSBjYW4gYmUgYWJicmV2aWF0ZWQsIGJ1dCBoX25hbWUgaXMgbm93IGFic29sdXRlLiAqLworCQlxbmFtZSA9IHJzLT5ob3N0LmhfbmFtZTsKKwl9CisJYXAgPSBycy0+aG9zdF9hbGlhc2VzOworCSphcCA9IE5VTEw7CisJcnMtPmhvc3QuaF9hbGlhc2VzID0gcnMtPmhvc3RfYWxpYXNlczsKKwloYXAgPSBycy0+aF9hZGRyX3B0cnM7CisJKmhhcCA9IE5VTEw7CisJcnMtPmhvc3QuaF9hZGRyX2xpc3QgPSBycy0+aF9hZGRyX3B0cnM7CisJaGF2ZWFuc3dlciA9IDA7CisJaGFkX2Vycm9yID0gMDsKKwl3aGlsZSAoYW5jb3VudC0tID4gMCAmJiBjcCA8IGVvbSAmJiAhaGFkX2Vycm9yKSB7CisJCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIGJwLCBlcCAtIGJwKTsKKwkJaWYgKChuIDwgMCkgfHwgISgqbmFtZV9vaykoYnApKSB7CisJCQloYWRfZXJyb3IrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNwICs9IG47CQkJLyogbmFtZSAqLworCQlCT1VORFNfQ0hFQ0soY3AsIDMgKiBJTlQxNlNaICsgSU5UMzJTWik7CisJCXR5cGUgPSBfZ2V0c2hvcnQoY3ApOworIAkJY3AgKz0gSU5UMTZTWjsJCQkvKiB0eXBlICovCisJCWNsYXNzID0gX2dldHNob3J0KGNwKTsKKyAJCWNwICs9IElOVDE2U1ogKyBJTlQzMlNaOwkvKiBjbGFzcywgVFRMICovCisJCW4gPSBfZ2V0c2hvcnQoY3ApOworCQljcCArPSBJTlQxNlNaOwkJCS8qIGxlbiAqLworCQlCT1VORFNfQ0hFQ0soY3AsIG4pOworCQllcmRhdGEgPSBjcCArIG47CisJCWlmIChjbGFzcyAhPSBDX0lOKSB7CisJCQkvKiBYWFggLSBkZWJ1Zz8gc3lzbG9nPyAqLworCQkJY3AgKz0gbjsKKwkJCWNvbnRpbnVlOwkJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLworCQl9CisJCWlmICgocXR5cGUgPT0gVF9BIHx8IHF0eXBlID09IFRfQUFBQSkgJiYgdHlwZSA9PSBUX0NOQU1FKSB7CisJCQlpZiAoYXAgPj0gJnJzLT5ob3N0X2FsaWFzZXNbTUFYQUxJQVNFUy0xXSkKKwkJCQljb250aW51ZTsKKwkJCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIHRidWYsIHNpemVvZiB0YnVmKTsKKwkJCWlmICgobiA8IDApIHx8ICEoKm5hbWVfb2spKHRidWYpKSB7CisJCQkJaGFkX2Vycm9yKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQljcCArPSBuOworCQkJaWYgKGNwICE9IGVyZGF0YSkgeworCQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCS8qIFN0b3JlIGFsaWFzLiAqLworCQkJKmFwKysgPSBicDsKKwkJCW4gPSBzdHJsZW4oYnApICsgMTsJLyogZm9yIHRoZSBcMCAqLworCQkJaWYgKG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKKwkJCQloYWRfZXJyb3IrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWJwICs9IG47CisJCQkvKiBHZXQgY2Fub25pY2FsIG5hbWUuICovCisJCQluID0gc3RybGVuKHRidWYpICsgMTsJLyogZm9yIHRoZSBcMCAqLworCQkJaWYgKG4gPiBlcCAtIGJwIHx8IG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKKwkJCQloYWRfZXJyb3IrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXN0cmxjcHkoYnAsIHRidWYsIChzaXplX3QpKGVwIC0gYnApKTsKKwkJCXJzLT5ob3N0LmhfbmFtZSA9IGJwOworCQkJYnAgKz0gbjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChxdHlwZSA9PSBUX1BUUiAmJiB0eXBlID09IFRfQ05BTUUpIHsKKwkJCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIHRidWYsIHNpemVvZiB0YnVmKTsKKwkJCWlmIChuIDwgMCB8fCAhcmVzX2Rub2sodGJ1ZikpIHsKKwkJCQloYWRfZXJyb3IrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNwICs9IG47CisJCQlpZiAoY3AgIT0gZXJkYXRhKSB7CisJCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJLyogR2V0IGNhbm9uaWNhbCBuYW1lLiAqLworCQkJbiA9IHN0cmxlbih0YnVmKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KKwkJCWlmIChuID4gZXAgLSBicCB8fCBuID49IE1BWEhPU1ROQU1FTEVOKSB7CisJCQkJaGFkX2Vycm9yKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzdHJsY3B5KGJwLCB0YnVmLCAoc2l6ZV90KShlcCAtIGJwKSk7CisJCQl0bmFtZSA9IGJwOworCQkJYnAgKz0gbjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0eXBlICE9IHF0eXBlKSB7CisJCQlpZiAodHlwZSAhPSBUX0tFWSAmJiB0eXBlICE9IFRfU0lHKQorCQkJCXN5c2xvZyhMT0dfTk9USUNFfExPR19BVVRILAorCSAgICAgICAiZ2V0aG9zdGJ5Ki5nZXRhbnN3ZXI6IGFza2VkIGZvciBcIiVzICVzICVzXCIsIGdvdCB0eXBlIFwiJXNcIiIsCisJCQkJICAgICAgIHFuYW1lLCBwX2NsYXNzKENfSU4pLCBwX3R5cGUocXR5cGUpLAorCQkJCSAgICAgICBwX3R5cGUodHlwZSkpOworCQkJY3AgKz0gbjsKKwkJCWNvbnRpbnVlOwkJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLworCQl9CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIFRfUFRSOgorCQkJaWYgKHN0cmNhc2VjbXAodG5hbWUsIGJwKSAhPSAwKSB7CisJCQkJc3lzbG9nKExPR19OT1RJQ0V8TE9HX0FVVEgsCisJCQkJICAgICAgIEFza2VkRm9yR290LCBxbmFtZSwgYnApOworCQkJCWNwICs9IG47CisJCQkJY29udGludWU7CS8qIFhYWCAtIGhhZF9lcnJvcisrID8gKi8KKwkJCX0KKwkJCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIGJwLCBlcCAtIGJwKTsKKwkJCWlmICgobiA8IDApIHx8ICFyZXNfaG5vayhicCkpIHsKKwkJCQloYWRfZXJyb3IrKzsKKwkJCQlicmVhazsKKwkJCX0KKyNpZiBNVUxUSV9QVFJTX0FSRV9BTElBU0VTCisJCQljcCArPSBuOworCQkJaWYgKGNwICE9IGVyZGF0YSkgeworCQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCWlmICghaGF2ZWFuc3dlcikKKwkJCQlycy0+aG9zdC5oX25hbWUgPSBicDsKKwkJCWVsc2UgaWYgKGFwIDwgJnJzLT5ob3N0X2FsaWFzZXNbTUFYQUxJQVNFUy0xXSkKKwkJCQkqYXArKyA9IGJwOworCQkJZWxzZQorCQkJCW4gPSAtMTsKKwkJCWlmIChuICE9IC0xKSB7CisJCQkJbiA9IHN0cmxlbihicCkgKyAxOwkvKiBmb3IgdGhlIFwwICovCisJCQkJaWYgKG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKKwkJCQkJaGFkX2Vycm9yKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlicCArPSBuOworCQkJfQorCQkJYnJlYWs7CisjZWxzZQorCQkJcnMtPmhvc3QuaF9uYW1lID0gYnA7CisJCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikgeworCQkJCW4gPSBzdHJsZW4oYnApICsgMTsJLyogZm9yIHRoZSBcMCAqLworCQkJCWlmIChuID49IE1BWEhPU1ROQU1FTEVOKSB7CisJCQkJCWhhZF9lcnJvcisrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnAgKz0gbjsKKwkJCQltYXBfdjR2Nl9ob3N0ZW50KCZycy0+aG9zdCwgJmJwLCBlcCk7CisJCQl9CisJCQloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKKwkJCXJldHVybiAmcnMtPmhvc3Q7CisjZW5kaWYKKwkJY2FzZSBUX0E6CisJCWNhc2UgVF9BQUFBOgorCQkJaWYgKHN0cmNhc2VjbXAocnMtPmhvc3QuaF9uYW1lLCBicCkgIT0gMCkgeworCQkJCXN5c2xvZyhMT0dfTk9USUNFfExPR19BVVRILAorCQkJCSAgICAgICBBc2tlZEZvckdvdCwgcnMtPmhvc3QuaF9uYW1lLCBicCk7CisJCQkJY3AgKz0gbjsKKwkJCQljb250aW51ZTsJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLworCQkJfQorCQkJaWYgKG4gIT0gcnMtPmhvc3QuaF9sZW5ndGgpIHsKKwkJCQljcCArPSBuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHR5cGUgPT0gVF9BQUFBKSB7CisJCQkJc3RydWN0IGluNl9hZGRyIGluNjsKKwkJCQltZW1jcHkoJmluNiwgY3AsIElONkFERFJTWik7CisJCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZpbjYpKSB7CisJCQkJCWNwICs9IG47CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWlmICghaGF2ZWFuc3dlcikgeworCQkJCWludCBubjsKKworCQkJCXJzLT5ob3N0LmhfbmFtZSA9IGJwOworCQkJCW5uID0gc3RybGVuKGJwKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KKwkJCQlicCArPSBubjsKKwkJCX0KKworCQkJYnAgKz0gc2l6ZW9mKGFsaWduKSAtCisJCQkgICAgKHNpemVfdCkoKHVfbG9uZylicCAlIHNpemVvZihhbGlnbikpOworCisJCQlpZiAoYnAgKyBuID49ICZycy0+aG9zdGJ1ZltzaXplb2YgcnMtPmhvc3RidWZdKSB7CisJCQkJZHByaW50Zigic2l6ZSAoJWQpIHRvbyBiaWdcbiIsIHJlcywgbik7CisJCQkJaGFkX2Vycm9yKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoaGFwID49ICZycy0+aF9hZGRyX3B0cnNbTUFYQUREUlMtMV0pIHsKKwkJCQlpZiAoIXRvb2JpZysrKQorCQkJCQlkcHJpbnRmKCJUb28gbWFueSBhZGRyZXNzZXMgKCVkKVxuIiwKKwkJCQkJCXJlcywgTUFYQUREUlMpOworCQkJCWNwICs9IG47CisJCQkJY29udGludWU7CisJCQl9CisJCQkodm9pZCltZW1jcHkoKmhhcCsrID0gYnAsIGNwLCAoc2l6ZV90KW4pOworCQkJYnAgKz0gbjsKKwkJCWNwICs9IG47CisJCQlpZiAoY3AgIT0gZXJkYXRhKSB7CisJCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhYm9ydCgpOworCQl9CisJCWlmICghaGFkX2Vycm9yKQorCQkJaGF2ZWFuc3dlcisrOworCX0KKwlpZiAoaGF2ZWFuc3dlcikgeworCQkqYXAgPSBOVUxMOworCQkqaGFwID0gTlVMTDsKKwkJLyoKKwkJICogTm90ZTogd2Ugc29ydCBldmVuIGlmIGhvc3QgY2FuIHRha2Ugb25seSBvbmUgYWRkcmVzcworCQkgKiBpbiBpdHMgcmV0dXJuIHN0cnVjdHVyZXMgLSBzaG91bGQgZ2l2ZSBpdCB0aGUgImJlc3QiCisJCSAqIGFkZHJlc3MgaW4gdGhhdCBjYXNlLCBub3Qgc29tZSByYW5kb20gb25lCisJCSAqLworCQlpZiAocmVzLT5uc29ydCAmJiBoYXZlYW5zd2VyID4gMSAmJiBxdHlwZSA9PSBUX0EpCisJCQlhZGRyc29ydChycy0+aF9hZGRyX3B0cnMsIGhhdmVhbnN3ZXIsIHJlcyk7CisJCWlmICghcnMtPmhvc3QuaF9uYW1lKSB7CisJCQluID0gc3RybGVuKHFuYW1lKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KKwkJCWlmIChuID4gZXAgLSBicCB8fCBuID49IE1BWEhPU1ROQU1FTEVOKQorCQkJCWdvdG8gbm9fcmVjb3Zlcnk7CisJCQlzdHJsY3B5KGJwLCBxbmFtZSwgKHNpemVfdCkoZXAgLSBicCkpOworCQkJcnMtPmhvc3QuaF9uYW1lID0gYnA7CisJCQlicCArPSBuOworCQl9CisJCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0lORVQ2KQorCQkJbWFwX3Y0djZfaG9zdGVudCgmcnMtPmhvc3QsICZicCwgZXApOworCQloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKKwkJcmV0dXJuICZycy0+aG9zdDsKKwl9Cisgbm9fcmVjb3Zlcnk6CisJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCXJldHVybiBOVUxMOworfQorCitpbnQKK2dldGhvc3RieW5hbWVfcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgaG9zdGVudCAqaHAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKyAgICBzdHJ1Y3QgaG9zdGVudCoqcmVzdWx0LCBpbnQgKmVycm9ycCkKK3sKKyAgICAgICAgc3RydWN0IGhvc3RlbnQgKnJlczsKKworICAgICAgICByZXMgPSBnZXRob3N0YnluYW1lKG5hbWUpOworICAgICAgICAqZXJyb3JwID0gaF9lcnJubzsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgKnJlc3VsdCA9IE5VTEw7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIG1lbWNweShocCwgcmVzLCBzaXplb2YgKmhwKTsKKyAgICAgICAgKnJlc3VsdCA9IGhwOworICAgICAgICByZXR1cm4gMDsKK30KKworc3RydWN0IGhvc3RlbnQgKgorZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBob3N0ZW50ICpocDsKKwlyZXNfc3RhdGUgcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7CisKKwlpZiAocmVzID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJYXNzZXJ0KG5hbWUgIT0gTlVMTCk7CisKKwkvKiB0cnkgSVB2NiBmaXJzdCAtIGlmIHRoYXQgZmFpbHMgZG8gSVB2NCAqLworCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0lORVQ2KSB7CisJCWhwID0gZ2V0aG9zdGJ5bmFtZV9pbnRlcm5hbChuYW1lLCBBRl9JTkVUNiwgcmVzLCBORVRJRF9VTlNFVCwgTUFSS19VTlNFVCk7CisJCWlmIChocCkgeworCQkJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJCQlyZXR1cm4gaHA7CisJCX0KKwl9CisJaHAgPSBnZXRob3N0YnluYW1lX2ludGVybmFsKG5hbWUsIEFGX0lORVQsIHJlcywgTkVUSURfVU5TRVQsIE1BUktfVU5TRVQpOworCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCXJldHVybiBocDsKK30KKworc3RydWN0IGhvc3RlbnQgKgorZ2V0aG9zdGJ5bmFtZTIoY29uc3QgY2hhciAqbmFtZSwgaW50IGFmKQoreworCXJldHVybiBhbmRyb2lkX2dldGhvc3RieW5hbWVmb3JuZXQobmFtZSwgYWYsIE5FVElEX1VOU0VULCBNQVJLX1VOU0VUKTsKK30KKworc3RydWN0IGhvc3RlbnQgKgorYW5kcm9pZF9nZXRob3N0YnluYW1lZm9ybmV0KGNvbnN0IGNoYXIgKm5hbWUsIGludCBhZiwgdW5zaWduZWQgbmV0aWQsIHVuc2lnbmVkIG1hcmspCit7CisJc3RydWN0IGhvc3RlbnQgKmhwOworCXJlc19zdGF0ZSByZXMgPSBfX3Jlc19nZXRfc3RhdGUoKTsKKworCWlmIChyZXMgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaHAgPSBnZXRob3N0YnluYW1lX2ludGVybmFsKG5hbWUsIGFmLCByZXMsIG5ldGlkLCBtYXJrKTsKKwlfX3Jlc19wdXRfc3RhdGUocmVzKTsKKwlyZXR1cm4gaHA7Cit9CisKKworc3RhdGljIEZJTEUqIGFuZHJvaWRfb3Blbl9wcm94eSgpCit7CisJaW50IHNvY2s7CisJY29uc3QgaW50IG9uZSA9IDE7CisJc3RydWN0IHNvY2thZGRyX3VuIHByb3h5X2FkZHI7CisKKwlzb2NrID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNIHwgU09DS19DTE9FWEVDLCAwKTsKKwlpZiAoc29jayA8IDApIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsICZvbmUsIHNpemVvZihvbmUpKTsKKwltZW1zZXQoJnByb3h5X2FkZHIsIDAsIHNpemVvZihwcm94eV9hZGRyKSk7CisJcHJveHlfYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKwlzdHJsY3B5KHByb3h5X2FkZHIuc3VuX3BhdGgsICIvZGV2L3NvY2tldC9kbnNwcm94eWQiLCBzaXplb2YocHJveHlfYWRkci5zdW5fcGF0aCkpOworCWlmIChURU1QX0ZBSUxVUkVfUkVUUlkoY29ubmVjdChzb2NrLAorCQkJKGNvbnN0IHN0cnVjdCBzb2NrYWRkciopICZwcm94eV9hZGRyLAorCQkJc2l6ZW9mKHByb3h5X2FkZHIpKSkgIT0gMCkgeworCQljbG9zZShzb2NrKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGZkb3Blbihzb2NrLCAicisiKTsKK30KKworc3RhdGljIHN0cnVjdCBob3N0ZW50ICoKK2FuZHJvaWRfcmVhZF9ob3N0ZW50KEZJTEUqIHByb3h5KQoreworCXVpbnQzMl90IHNpemU7CisJY2hhciBidWZbNF07CisJaWYgKGZyZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1ZiksIHByb3h5KSAhPSBzaXplb2YoYnVmKSkgcmV0dXJuIE5VTEw7CisKKwkvKiBUaGlzIGlzIHJlYWRpbmcgc2VyaWFsaXplZCBkYXRhIGZyb20gc3lzdGVtL25ldGQvc2VydmVyL0Ruc1Byb3h5TGlzdGVuZXIuY3BwCisJICogYW5kIGNoYW5nZXMgaGVyZSBuZWVkIHRvIGJlIG1hdGNoZWQgdGhlcmUgKi8KKwlpbnQgcmVzdWx0X2NvZGUgPSBzdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJaWYgKHJlc3VsdF9jb2RlICE9IERuc1Byb3h5UXVlcnlSZXN1bHQpIHsKKwkJZnJlYWQoJnNpemUsIDEsIHNpemVvZihzaXplKSwgcHJveHkpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoZnJlYWQoJnNpemUsIDEsIHNpemVvZihzaXplKSwgcHJveHkpICE9IHNpemVvZihzaXplKSkgcmV0dXJuIE5VTEw7CisJc2l6ZSA9IG50b2hsKHNpemUpOworCXJlc19zdGF0aWMgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisJbWVtc2V0KCZycy0+aG9zdCwgMCwgc2l6ZW9mKHJzLT5ob3N0KSk7CisJY2hhciAqcHRyID0gcnMtPmhvc3RidWY7CisKKwlpZiAoZnJlYWQocHRyLCAxLCBzaXplLCBwcm94eSkgIT0gc2l6ZSkgcmV0dXJuIE5VTEw7CisJcHRyICs9IHNpemU7CisJcnMtPmhvc3QuaF9uYW1lID0gcnMtPmhvc3RidWY7CisKKwljaGFyICoqYWxpYXNlcyA9IHJzLT5ob3N0X2FsaWFzZXM7CisJcnMtPmhvc3QuaF9hbGlhc2VzID0gcnMtPmhvc3RfYWxpYXNlczsKKwl3aGlsZSAoMSkgeworCQlpZiAoZnJlYWQoJnNpemUsIDEsIHNpemVvZihzaXplKSwgcHJveHkpICE9IHNpemVvZihzaXplKSkgcmV0dXJuIE5VTEw7CisJCXNpemUgPSBudG9obChzaXplKTsKKworCQlpZiAoc2l6ZSA9PSAwKSB7CisJCQkqYWxpYXNlcyA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZnJlYWQocHRyLCAxLCBzaXplLCBwcm94eSkgIT0gc2l6ZSkgcmV0dXJuIE5VTEw7CisJCSphbGlhc2VzKysgPSBwdHI7CisJCXB0ciArPSBzaXplOworCX0KKworCWlmIChmcmVhZCgmc2l6ZSwgMSwgc2l6ZW9mKHNpemUpLCBwcm94eSkgIT0gc2l6ZW9mKHNpemUpKSByZXR1cm4gTlVMTDsKKwlycy0+aG9zdC5oX2FkZHJ0eXBlID0gbnRvaGwoc2l6ZSk7CisKKwlpZiAoZnJlYWQoJnNpemUsIDEsIHNpemVvZihzaXplKSwgcHJveHkpICE9IHNpemVvZihzaXplKSkgcmV0dXJuIE5VTEw7CisJcnMtPmhvc3QuaF9sZW5ndGggPSBudG9obChzaXplKTsKKworCWNoYXIgKiphZGRycyA9IHJzLT5oX2FkZHJfcHRyczsKKwlycy0+aG9zdC5oX2FkZHJfbGlzdCA9IHJzLT5oX2FkZHJfcHRyczsKKwl3aGlsZSAoMSkgeworCQlpZiAoZnJlYWQoJnNpemUsIDEsIHNpemVvZihzaXplKSwgcHJveHkpICE9IHNpemVvZihzaXplKSkgcmV0dXJuIE5VTEw7CisJCXNpemUgPSBudG9obChzaXplKTsKKwkJaWYgKHNpemUgPT0gMCkgeworCQkJKmFkZHJzID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChmcmVhZChwdHIsIDEsIHNpemUsIHByb3h5KSAhPSBzaXplKSByZXR1cm4gTlVMTDsKKwkJKmFkZHJzKysgPSBwdHI7CisJCXB0ciArPSBzaXplOworCX0KKworCXJldHVybiAmcnMtPmhvc3Q7Cit9CisKKworc3RhdGljIHN0cnVjdCBob3N0ZW50ICoKK2dldGhvc3RieW5hbWVfaW50ZXJuYWxfcmVhbChjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYsIHJlc19zdGF0ZSByZXMpCit7CisJY29uc3QgY2hhciAqY3A7CisJY2hhciAqYnAsICplcDsKKwlpbnQgc2l6ZTsKKwlzdHJ1Y3QgaG9zdGVudCAqaHA7CisJcmVzX3N0YXRpYyBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKKworCXN0YXRpYyBjb25zdCBuc19kdGFiIGR0YWJbXSA9IHsKKwkJTlNfRklMRVNfQ0IoX2dldGh0YnluYW1lLCBOVUxMKQorCQl7IE5TU1JDX0ROUywgX2Ruc19nZXRodGJ5bmFtZSwgTlVMTCB9LAkvKiBmb3JjZSAtREhFU0lPRCAqLworCQl7IDAsIDAsIDAgfQorCX07CisKKwlhc3NlcnQobmFtZSAhPSBOVUxMKTsKKworCXN3aXRjaCAoYWYpIHsKKwljYXNlIEFGX0lORVQ6CisJCXNpemUgPSBJTkFERFJTWjsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJc2l6ZSA9IElONkFERFJTWjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcnMtPmhvc3QuaF9hZGRydHlwZSA9IGFmOworCXJzLT5ob3N0LmhfbGVuZ3RoID0gc2l6ZTsKKworCS8qCisJICogaWYgdGhlcmUgYXJlbid0IGFueSBkb3RzLCBpdCBjb3VsZCBiZSBhIHVzZXItbGV2ZWwgYWxpYXMuCisJICogdGhpcyBpcyBhbHNvIGRvbmUgaW4gcmVzX25xdWVyeSgpIHNpbmNlIHdlIGFyZSBub3QgdGhlIG9ubHkKKwkgKiBmdW5jdGlvbiB0aGF0IGxvb2tzIHVwIGhvc3QgbmFtZXMuCisJICovCisJaWYgKCFzdHJjaHIobmFtZSwgJy4nKSAmJiAoY3AgPSBfX2hvc3RhbGlhcyhuYW1lKSkpCisJCW5hbWUgPSBjcDsKKworCS8qCisJICogZGlzYWxsb3cgbmFtZXMgY29uc2lzdGluZyBvbmx5IG9mIGRpZ2l0cy9kb3RzLCB1bmxlc3MKKwkgKiB0aGV5IGVuZCBpbiBhIGRvdC4KKwkgKi8KKwlpZiAoaXNkaWdpdCgodV9jaGFyKSBuYW1lWzBdKSkKKwkJZm9yIChjcCA9IG5hbWU7OyArK2NwKSB7CisJCQlpZiAoISpjcCkgeworCQkJCWlmICgqLS1jcCA9PSAnLicpCisJCQkJCWJyZWFrOworCQkJCS8qCisJCQkJICogQWxsLW51bWVyaWMsIG5vIGRvdCBhdCB0aGUgZW5kLgorCQkJCSAqIEZha2UgdXAgYSBob3N0ZW50IGFzIGlmIHdlJ2QgYWN0dWFsbHkKKwkJCQkgKiBkb25lIGEgbG9va3VwLgorCQkJCSAqLworCQkJCWlmIChpbmV0X3B0b24oYWYsIG5hbWUsCisJCQkJICAgIChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyKSA8PSAwKSB7CisJCQkJCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQkJfQorCQkJCXN0cm5jcHkocnMtPmhvc3RidWYsIG5hbWUsIE1BWEROQU1FKTsKKwkJCQlycy0+aG9zdGJ1ZltNQVhETkFNRV0gPSAnXDAnOworCQkJCWJwID0gcnMtPmhvc3RidWYgKyBNQVhETkFNRTsKKwkJCQllcCA9IHJzLT5ob3N0YnVmICsgc2l6ZW9mIHJzLT5ob3N0YnVmOworCQkJCXJzLT5ob3N0LmhfbmFtZSA9IHJzLT5ob3N0YnVmOworCQkJCXJzLT5ob3N0LmhfYWxpYXNlcyA9IHJzLT5ob3N0X2FsaWFzZXM7CisJCQkJcnMtPmhvc3RfYWxpYXNlc1swXSA9IE5VTEw7CisJCQkJcnMtPmhfYWRkcl9wdHJzWzBdID0gKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHI7CisJCQkJcnMtPmhfYWRkcl9wdHJzWzFdID0gTlVMTDsKKwkJCQlycy0+aG9zdC5oX2FkZHJfbGlzdCA9IHJzLT5oX2FkZHJfcHRyczsKKwkJCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikKKwkJCQkJbWFwX3Y0djZfaG9zdGVudCgmcnMtPmhvc3QsICZicCwgZXApOworCQkJCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOworCQkJCXJldHVybiAmcnMtPmhvc3Q7CisJCQl9CisJCQlpZiAoIWlzZGlnaXQoKHVfY2hhcikgKmNwKSAmJiAqY3AgIT0gJy4nKQorCQkJCWJyZWFrOworCQl9CisJaWYgKChpc3hkaWdpdCgodV9jaGFyKSBuYW1lWzBdKSAmJiBzdHJjaHIobmFtZSwgJzonKSAhPSBOVUxMKSB8fAorCSAgICBuYW1lWzBdID09ICc6JykKKwkJZm9yIChjcCA9IG5hbWU7OyArK2NwKSB7CisJCQlpZiAoISpjcCkgeworCQkJCWlmICgqLS1jcCA9PSAnLicpCisJCQkJCWJyZWFrOworCQkJCS8qCisJCQkJICogQWxsLUlQdjYtbGVnYWwsIG5vIGRvdCBhdCB0aGUgZW5kLgorCQkJCSAqIEZha2UgdXAgYSBob3N0ZW50IGFzIGlmIHdlJ2QgYWN0dWFsbHkKKwkJCQkgKiBkb25lIGEgbG9va3VwLgorCQkJCSAqLworCQkJCWlmIChpbmV0X3B0b24oYWYsIG5hbWUsCisJCQkJICAgIChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyKSA8PSAwKSB7CisJCQkJCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQkJfQorCQkJCXN0cm5jcHkocnMtPmhvc3RidWYsIG5hbWUsIE1BWEROQU1FKTsKKwkJCQlycy0+aG9zdGJ1ZltNQVhETkFNRV0gPSAnXDAnOworCQkJCWJwID0gcnMtPmhvc3RidWYgKyBNQVhETkFNRTsKKwkJCQllcCA9IHJzLT5ob3N0YnVmICsgc2l6ZW9mIHJzLT5ob3N0YnVmOworCQkJCXJzLT5ob3N0LmhfbmFtZSA9IHJzLT5ob3N0YnVmOworCQkJCXJzLT5ob3N0LmhfYWxpYXNlcyA9IHJzLT5ob3N0X2FsaWFzZXM7CisJCQkJcnMtPmhvc3RfYWxpYXNlc1swXSA9IE5VTEw7CisJCQkJcnMtPmhfYWRkcl9wdHJzWzBdID0gKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHI7CisJCQkJcnMtPmhfYWRkcl9wdHJzWzFdID0gTlVMTDsKKwkJCQlycy0+aG9zdC5oX2FkZHJfbGlzdCA9IHJzLT5oX2FkZHJfcHRyczsKKwkJCQloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKKwkJCQlyZXR1cm4gJnJzLT5ob3N0OworCQkJfQorCQkJaWYgKCFpc3hkaWdpdCgodV9jaGFyKSAqY3ApICYmICpjcCAhPSAnOicgJiYgKmNwICE9ICcuJykKKwkJCQlicmVhazsKKwkJfQorCisJaHAgPSBOVUxMOworCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKKwlpZiAobnNkaXNwYXRjaCgmaHAsIGR0YWIsIE5TREJfSE9TVFMsICJnZXRob3N0YnluYW1lIiwKKwkgICAgZGVmYXVsdF9kbnNfZmlsZXMsIG5hbWUsIHN0cmxlbihuYW1lKSwgYWYpICE9IE5TX1NVQ0NFU1MpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOworCXJldHVybiBocDsKK30KKworCisvLyB2ZXJ5IHNpbWlsYXIgaW4gcHJveHktbmVzcyB0byBhbmRyb2lkX2dldGFkZHJpbmZvX3Byb3h5CitzdGF0aWMgc3RydWN0IGhvc3RlbnQgKgorZ2V0aG9zdGJ5bmFtZV9pbnRlcm5hbChjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYsIHJlc19zdGF0ZSByZXMsIHVuc2lnbmVkIG5ldGlkLCB1bnNpZ25lZCBtYXJrKQoreworCWNvbnN0IGNoYXIgKmNhY2hlX21vZGUgPSBnZXRlbnYoIkFORFJPSURfRE5TX01PREUiKTsKKwlGSUxFKiBwcm94eSA9IE5VTEw7CisJc3RydWN0IGhvc3RlbnQgKnJlc3VsdCA9IE5VTEw7CisKKwlpZiAoY2FjaGVfbW9kZSAhPSBOVUxMICYmIHN0cmNtcChjYWNoZV9tb2RlLCAibG9jYWwiKSA9PSAwKSB7CisJCXJlc19zZXRuZXRpZChyZXMsIG5ldGlkKTsKKwkJcmVzX3NldG1hcmsocmVzLCBtYXJrKTsKKwkJcmV0dXJuIGdldGhvc3RieW5hbWVfaW50ZXJuYWxfcmVhbChuYW1lLCBhZiwgcmVzKTsKKwl9CisKKwlwcm94eSA9IGFuZHJvaWRfb3Blbl9wcm94eSgpOworCWlmIChwcm94eSA9PSBOVUxMKSBnb3RvIGV4aXQ7CisKKwluZXRpZCA9IF9fbmV0ZENsaWVudERpc3BhdGNoLm5ldElkRm9yUmVzb2x2KG5ldGlkKTsKKworCS8qIFRoaXMgaXMgd3JpdGluZyB0byBzeXN0ZW0vbmV0ZC9zZXJ2ZXIvRG5zUHJveHlMaXN0ZW5lci5jcHAgYW5kIGNoYW5nZXMKKwkgKiBoZXJlIG5lZWQgdG8gYmUgbWF0Y2hlZCB0aGVyZSAqLworCWlmIChmcHJpbnRmKHByb3h5LCAiZ2V0aG9zdGJ5bmFtZSAldSAlcyAlZCIsCisJCQluZXRpZCwKKwkJCW5hbWUgPT0gTlVMTCA/ICJeIiA6IG5hbWUsCisJCQlhZikgPCAwKSB7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoZnB1dGMoMCwgcHJveHkpID09IEVPRiB8fCBmZmx1c2gocHJveHkpICE9IDApIHsKKwkJZ290byBleGl0OworCX0KKworCXJlc3VsdCA9IGFuZHJvaWRfcmVhZF9ob3N0ZW50KHByb3h5KTsKKworZXhpdDoKKwlpZiAocHJveHkgIT0gTlVMTCkgeworCQlmY2xvc2UocHJveHkpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3N0cnVjdCBob3N0ZW50ICoKK2FuZHJvaWRfZ2V0aG9zdGJ5YWRkcmZvcm5ldF9wcm94eShjb25zdCB2b2lkICphZGRyLAorICAgIHNvY2tsZW5fdCBsZW4sIGludCBhZiwgdW5zaWduZWQgbmV0aWQpCit7CisJc3RydWN0IGhvc3RlbnQgKnJlc3VsdCA9IE5VTEw7CisJRklMRSogcHJveHkgPSBhbmRyb2lkX29wZW5fcHJveHkoKTsKKworCWlmIChwcm94eSA9PSBOVUxMKSBnb3RvIGV4aXQ7CisKKwljaGFyIGJ1ZltJTkVUNl9BRERSU1RSTEVOXTsgIC8vYmlnIGVub3VnaCBmb3IgSVB2NCBhbmQgSVB2NgorCWNvbnN0IGNoYXIgKiBhZGRyU3RyID0gaW5ldF9udG9wKGFmLCBhZGRyLCBidWYsIHNpemVvZihidWYpKTsKKwlpZiAoYWRkclN0ciA9PSBOVUxMKSBnb3RvIGV4aXQ7CisKKwluZXRpZCA9IF9fbmV0ZENsaWVudERpc3BhdGNoLm5ldElkRm9yUmVzb2x2KG5ldGlkKTsKKworCWlmIChmcHJpbnRmKHByb3h5LCAiZ2V0aG9zdGJ5YWRkciAlcyAlZCAlZCAldSIsCisJCQlhZGRyU3RyLCBsZW4sIGFmLCBuZXRpZCkgPCAwKSB7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoZnB1dGMoMCwgcHJveHkpID09IEVPRiB8fCBmZmx1c2gocHJveHkpICE9IDApIHsKKwkJZ290byBleGl0OworCX0KKworCXJlc3VsdCA9IGFuZHJvaWRfcmVhZF9ob3N0ZW50KHByb3h5KTsKK2V4aXQ6CisJaWYgKHByb3h5ICE9IE5VTEwpIHsKKwkJZmNsb3NlKHByb3h5KTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RydWN0IGhvc3RlbnQgKgorYW5kcm9pZF9nZXRob3N0YnlhZGRyZm9ybmV0X3JlYWwoY29uc3Qgdm9pZCAqYWRkciwKKyAgICBzb2NrbGVuX3QgbGVuLCBpbnQgYWYsIHVuc2lnbmVkIG5ldGlkLCB1bnNpZ25lZCBtYXJrKQoreworCWNvbnN0IHVfY2hhciAqdWFkZHIgPSAoY29uc3QgdV9jaGFyICopYWRkcjsKKwlzb2NrbGVuX3Qgc2l6ZTsKKwlzdHJ1Y3QgaG9zdGVudCAqaHA7CisJc3RhdGljIGNvbnN0IG5zX2R0YWIgZHRhYltdID0geworCQlOU19GSUxFU19DQihfZ2V0aHRieWFkZHIsIE5VTEwpCisJCXsgTlNTUkNfRE5TLCBfZG5zX2dldGh0YnlhZGRyLCBOVUxMIH0sCS8qIGZvcmNlIC1ESEVTSU9EICovCisJCXsgMCwgMCwgMCB9CisJfTsKKworCWFzc2VydChhZGRyICE9IE5VTEwpOworCisJaWYgKGFmID09IEFGX0lORVQ2ICYmIGxlbiA9PSBOU19JTjZBRERSU1ogJiYKKwkgICAgKElONl9JU19BRERSX0xJTktMT0NBTCgoY29uc3Qgc3RydWN0IGluNl9hZGRyICopYWRkcikgfHwKKwkgICAgIElONl9JU19BRERSX1NJVEVMT0NBTCgoY29uc3Qgc3RydWN0IGluNl9hZGRyICopYWRkcikpKSB7CisJCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChhZiA9PSBBRl9JTkVUNiAmJiBsZW4gPT0gTlNfSU42QUREUlNaICYmCisJICAgIChJTjZfSVNfQUREUl9WNE1BUFBFRCgoY29uc3Qgc3RydWN0IGluNl9hZGRyICopYWRkcikgfHwKKwkgICAgIElONl9JU19BRERSX1Y0Q09NUEFUKChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKilhZGRyKSkpIHsKKwkJLyogVW5tYXAuICovCisJCXVhZGRyICs9IE5TX0lONkFERFJTWiAtIE5TX0lOQUREUlNaOworCQlhZGRyID0gdWFkZHI7CisJCWFmID0gQUZfSU5FVDsKKwkJbGVuID0gTlNfSU5BRERSU1o7CisJfQorCXN3aXRjaCAoYWYpIHsKKwljYXNlIEFGX0lORVQ6CisJCXNpemUgPSBOU19JTkFERFJTWjsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJc2l6ZSA9IE5TX0lONkFERFJTWjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7CisJCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChzaXplICE9IGxlbikgeworCQllcnJubyA9IEVJTlZBTDsKKwkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaHAgPSBOVUxMOworCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKKwlpZiAobnNkaXNwYXRjaCgmaHAsIGR0YWIsIE5TREJfSE9TVFMsICJnZXRob3N0YnlhZGRyIiwKKwkJZGVmYXVsdF9kbnNfZmlsZXMsIHVhZGRyLCBsZW4sIGFmLCBuZXRpZCwgbWFyaykgIT0gTlNfU1VDQ0VTUykKKwkJcmV0dXJuIE5VTEw7CisJaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7CisJcmV0dXJuIGhwOworfQorCitzdHJ1Y3QgaG9zdGVudCAqCithbmRyb2lkX2dldGhvc3RieWFkZHJmb3JuZXQoY29uc3Qgdm9pZCAqYWRkciwgc29ja2xlbl90IGxlbiwgaW50IGFmLCB1bnNpZ25lZCBuZXRpZCwgdW5zaWduZWQgbWFyaykKK3sKKwljb25zdCBjaGFyICpjYWNoZV9tb2RlID0gZ2V0ZW52KCJBTkRST0lEX0ROU19NT0RFIik7CisKKwlpZiAoY2FjaGVfbW9kZSA9PSBOVUxMIHx8IHN0cmNtcChjYWNoZV9tb2RlLCAibG9jYWwiKSAhPSAwKSB7CisJCXJldHVybiBhbmRyb2lkX2dldGhvc3RieWFkZHJmb3JuZXRfcHJveHkoYWRkciwgbGVuLCBhZiwgbmV0aWQpOworCX0gZWxzZSB7CisJCXJldHVybiBhbmRyb2lkX2dldGhvc3RieWFkZHJmb3JuZXRfcmVhbChhZGRyLGxlbiwgYWYsIG5ldGlkLCBtYXJrKTsKKwl9Cit9CisKK3N0cnVjdCBob3N0ZW50ICoKK2dldGhvc3RieWFkZHIoY29uc3Qgdm9pZCAqYWRkciwgc29ja2xlbl90IGxlbiwgaW50IGFmKQoreworCXJldHVybiBhbmRyb2lkX2dldGhvc3RieWFkZHJmb3JuZXQoYWRkciwgbGVuLCBhZiwgTkVUSURfVU5TRVQsIE1BUktfVU5TRVQpOworfQorCisKK3N0YXRpYyB2b2lkCitfc2V0aHRlbnQoaW50IGYpCit7CisgICAgcmVzX3N0YXRpYyAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisgICAgaWYgKHJzID09IE5VTEwpIHJldHVybjsKKwlpZiAoIXJzLT5ob3N0ZikKKwkJcnMtPmhvc3RmID0gZm9wZW4oX1BBVEhfSE9TVFMsICJyIiApOworCWVsc2UKKwkJcmV3aW5kKHJzLT5ob3N0Zik7CisJcnMtPnN0YXlvcGVuID0gZjsKK30KKworc3RhdGljIHZvaWQKK19lbmRodGVudCh2b2lkKQoreworICAgIHJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworICAgIGlmIChycyA9PSBOVUxMKSByZXR1cm47CisKKwlpZiAocnMtPmhvc3RmICYmICFycy0+c3RheW9wZW4pIHsKKwkJKHZvaWQpIGZjbG9zZShycy0+aG9zdGYpOworCQlycy0+aG9zdGYgPSBOVUxMOworCX0KK30KKworc3RhdGljIHN0cnVjdCBob3N0ZW50ICoKK19nZXRodGVudCh2b2lkKQoreworCWNoYXIgKnA7CisJY2hhciAqY3AsICoqcTsKKwlpbnQgYWYsIGxlbjsKKwlyZXNfc3RhdGljICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKKworCWlmICghcnMtPmhvc3RmICYmICEocnMtPmhvc3RmID0gZm9wZW4oX1BBVEhfSE9TVFMsICJyIiApKSkgeworCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCXJldHVybiBOVUxMOworCX0KKyBhZ2FpbjoKKwlpZiAoIShwID0gZmdldHMocnMtPmhvc3RidWYsIHNpemVvZiBycy0+aG9zdGJ1ZiwgcnMtPmhvc3RmKSkpIHsKKwkJaF9lcnJubyA9IEhPU1RfTk9UX0ZPVU5EOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKCpwID09ICcjJykKKwkJZ290byBhZ2FpbjsKKwlpZiAoIShjcCA9IHN0cnBicmsocCwgIiNcbiIpKSkKKwkJZ290byBhZ2FpbjsKKwkqY3AgPSAnXDAnOworCWlmICghKGNwID0gc3RycGJyayhwLCAiIFx0IikpKQorCQlnb3RvIGFnYWluOworCSpjcCsrID0gJ1wwJzsKKwlpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBwLCAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcikgPiAwKSB7CisJCWFmID0gQUZfSU5FVDY7CisJCWxlbiA9IElONkFERFJTWjsKKwl9IGVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVULCBwLCAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcikgPiAwKSB7CisJCXJlc19zdGF0ZSByZXMgPSBfX3Jlc19nZXRfc3RhdGUoKTsKKwkJaWYgKHJlcyA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0lORVQ2KSB7CisJCQltYXBfdjR2Nl9hZGRyZXNzKChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyLAorCQkJICAgIChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyKTsKKwkJCWFmID0gQUZfSU5FVDY7CisJCQlsZW4gPSBJTjZBRERSU1o7CisJCX0gZWxzZSB7CisJCQlhZiA9IEFGX0lORVQ7CisJCQlsZW4gPSBJTkFERFJTWjsKKwkJfQorCQlfX3Jlc19wdXRfc3RhdGUocmVzKTsKKwl9IGVsc2UgeworCQlnb3RvIGFnYWluOworCX0KKwkvKiBpZiB0aGlzIGlzIG5vdCBzb21ldGhpbmcgd2UncmUgbG9va2luZyBmb3IsIHNraXAgaXQuICovCisJaWYgKHJzLT5ob3N0LmhfYWRkcnR5cGUgIT0gMCAmJiBycy0+aG9zdC5oX2FkZHJ0eXBlICE9IGFmKQorCQlnb3RvIGFnYWluOworCWlmIChycy0+aG9zdC5oX2xlbmd0aCAhPSAwICYmIHJzLT5ob3N0LmhfbGVuZ3RoICE9IGxlbikKKwkJZ290byBhZ2FpbjsKKwlycy0+aF9hZGRyX3B0cnNbMF0gPSAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcjsKKwlycy0+aF9hZGRyX3B0cnNbMV0gPSBOVUxMOworCXJzLT5ob3N0LmhfYWRkcl9saXN0ID0gcnMtPmhfYWRkcl9wdHJzOworCXJzLT5ob3N0LmhfbGVuZ3RoID0gbGVuOworCXJzLT5ob3N0LmhfYWRkcnR5cGUgPSBhZjsKKwl3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKKwkJY3ArKzsKKwlycy0+aG9zdC5oX25hbWUgPSBjcDsKKwlxID0gcnMtPmhvc3QuaF9hbGlhc2VzID0gcnMtPmhvc3RfYWxpYXNlczsKKwlpZiAoKGNwID0gc3RycGJyayhjcCwgIiBcdCIpKSAhPSBOVUxMKQorCQkqY3ArKyA9ICdcMCc7CisJd2hpbGUgKGNwICYmICpjcCkgeworCQlpZiAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykgeworCQkJY3ArKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChxIDwgJnJzLT5ob3N0X2FsaWFzZXNbTUFYQUxJQVNFUyAtIDFdKQorCQkJKnErKyA9IGNwOworCQlpZiAoKGNwID0gc3RycGJyayhjcCwgIiBcdCIpKSAhPSBOVUxMKQorCQkJKmNwKysgPSAnXDAnOworCX0KKwkqcSA9IE5VTEw7CisJaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7CisJcmV0dXJuICZycy0+aG9zdDsKK30KKworLypBUkdTVVNFRCovCitpbnQKK19nZXRodGJ5bmFtZSh2b2lkICpydiwgdm9pZCAqY2JfZGF0YSwgdmFfbGlzdCBhcCkKK3sKKwlzdHJ1Y3QgaG9zdGVudCAqaHA7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgYWY7CisKKwlhc3NlcnQocnYgIT0gTlVMTCk7CisKKwluYW1lID0gdmFfYXJnKGFwLCBjaGFyICopOworCS8qIE5PU1RSSUNUIHNraXAgbGVuICovKHZvaWQpdmFfYXJnKGFwLCBpbnQpOworCWFmID0gdmFfYXJnKGFwLCBpbnQpOworCisJaHAgPSBOVUxMOworI2lmIDAKKwl7CisJCXJlc19zdGF0ZSByZXMgPSBfX3Jlc19nZXRfc3RhdGUoKTsKKwkJaWYgKHJlcyA9PSBOVUxMKQorCQkJcmV0dXJuIE5TX05PVEZPVU5EOworCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikKKwkJCWhwID0gX2dldGh0YnluYW1lMihuYW1lLCBBRl9JTkVUNik7CisJCWlmIChocD09TlVMTCkKKwkJCWhwID0gX2dldGh0YnluYW1lMihuYW1lLCBBRl9JTkVUKTsKKwkJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJfQorI2Vsc2UKKwlocCA9IF9nZXRodGJ5bmFtZTIobmFtZSwgYWYpOworI2VuZGlmCisJKigoc3RydWN0IGhvc3RlbnQgKiopcnYpID0gaHA7CisJaWYgKGhwID09IE5VTEwpIHsKKwkJaF9lcnJubyA9IEhPU1RfTk9UX0ZPVU5EOworCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJfQorCXJldHVybiBOU19TVUNDRVNTOworfQorCitzdGF0aWMgc3RydWN0IGhvc3RlbnQgKgorX2dldGh0YnluYW1lMihjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYpCit7CisJc3RydWN0IGhvc3RlbnQgKnA7CisJY2hhciAqdG1wYnVmLCAqcHRyLCAqKmNwOworCWludCBudW07CisJc2l6ZV90IGxlbjsKKwlyZXNfc3RhdGljIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworCisJYXNzZXJ0KG5hbWUgIT0gTlVMTCk7CisKKwlfc2V0aHRlbnQocnMtPnN0YXlvcGVuKTsKKwlwdHIgPSB0bXBidWYgPSBOVUxMOworCW51bSA9IDA7CisJd2hpbGUgKChwID0gX2dldGh0ZW50KCkpICE9IE5VTEwgJiYgbnVtIDwgTUFYQUREUlMpIHsKKwkJaWYgKHAtPmhfYWRkcnR5cGUgIT0gYWYpCisJCQljb250aW51ZTsKKwkJaWYgKHN0cmNhc2VjbXAocC0+aF9uYW1lLCBuYW1lKSAhPSAwKSB7CisJCQlmb3IgKGNwID0gcC0+aF9hbGlhc2VzOyAqY3AgIT0gTlVMTDsgY3ArKykKKwkJCQlpZiAoc3RyY2FzZWNtcCgqY3AsIG5hbWUpID09IDApCisJCQkJCWJyZWFrOworCQkJaWYgKCpjcCA9PSBOVUxMKSBjb250aW51ZTsKKwkJfQorCisJCWlmIChudW0gPT0gMCkgeworCQkJc2l6ZV90IGJ1ZnNpemU7CisJCQljaGFyICpzcmM7CisKKwkJCWJ1ZnNpemUgPSBzdHJsZW4ocC0+aF9uYW1lKSArIDIgKworCQkJCSAgTUFYQUREUlMgKiBwLT5oX2xlbmd0aCArCisJCQkJICBBTElHTkJZVEVTOworCQkJZm9yIChjcCA9IHAtPmhfYWxpYXNlczsgKmNwICE9IE5VTEw7IGNwKyspCisJCQkJYnVmc2l6ZSArPSBzdHJsZW4oKmNwKSArIDE7CisKKwkJCWlmICgodG1wYnVmID0gbWFsbG9jKGJ1ZnNpemUpKSA9PSBOVUxMKSB7CisJCQkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCisJCQlwdHIgPSB0bXBidWY7CisJCQlzcmMgPSBwLT5oX25hbWU7CisJCQl3aGlsZSAoKCpwdHIrKyA9ICpzcmMrKykgIT0gJ1wwJyk7CisJCQlmb3IgKGNwID0gcC0+aF9hbGlhc2VzOyAqY3AgIT0gTlVMTDsgY3ArKykgeworCQkJCXNyYyA9ICpjcDsKKwkJCQl3aGlsZSAoKCpwdHIrKyA9ICpzcmMrKykgIT0gJ1wwJyk7CisJCQl9CisJCQkqcHRyKysgPSAnXDAnOworCisJCQlwdHIgPSAoY2hhciAqKSh2b2lkICopQUxJR04ocHRyKTsKKwkJfQorCisJCSh2b2lkKW1lbWNweShwdHIsIHAtPmhfYWRkcl9saXN0WzBdLCAoc2l6ZV90KXAtPmhfbGVuZ3RoKTsKKwkJcHRyICs9IHAtPmhfbGVuZ3RoOworCQludW0rKzsKKwl9CisJX2VuZGh0ZW50KCk7CisJaWYgKG51bSA9PSAwKSByZXR1cm4gTlVMTDsKKworCWxlbiA9IHB0ciAtIHRtcGJ1ZjsKKwlpZiAobGVuID4gKHNpemVvZihycy0+aG9zdGJ1ZikgLSBBTElHTkJZVEVTKSkgeworCQlmcmVlKHRtcGJ1Zik7CisJCWVycm5vID0gRU5PU1BDOworCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCXJldHVybiBOVUxMOworCX0KKwlwdHIgPSBtZW1jcHkoKHZvaWQgKilBTElHTihycy0+aG9zdGJ1ZiksIHRtcGJ1ZiwgbGVuKTsKKwlmcmVlKHRtcGJ1Zik7CisKKwlycy0+aG9zdC5oX25hbWUgPSBwdHI7CisJd2hpbGUgKCpwdHIrKyk7CisKKwljcCA9IHJzLT5ob3N0X2FsaWFzZXM7CisJd2hpbGUgKCpwdHIpIHsKKwkJKmNwKysgPSBwdHI7CisJCXdoaWxlICgqcHRyKyspOworCX0KKwlwdHIrKzsKKwkqY3AgPSBOVUxMOworCisJcHRyID0gKGNoYXIgKikodm9pZCAqKUFMSUdOKHB0cik7CisJY3AgPSBycy0+aF9hZGRyX3B0cnM7CisJd2hpbGUgKG51bS0tKSB7CisJCSpjcCsrID0gcHRyOworCQlwdHIgKz0gcnMtPmhvc3QuaF9sZW5ndGg7CisJfQorCSpjcCA9IE5VTEw7CisKKwlyZXR1cm4gJnJzLT5ob3N0OworfQorCisvKkFSR1NVU0VEKi8KK3N0YXRpYyBpbnQKK19nZXRodGJ5YWRkcih2b2lkICpydiwgdm9pZCAqY2JfZGF0YSwgdmFfbGlzdCBhcCkKK3sKKwlzdHJ1Y3QgaG9zdGVudCAqcDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyOworCWludCBsZW4sIGFmOworCXJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworCisJYXNzZXJ0KHJ2ICE9IE5VTEwpOworCisJYWRkciA9IHZhX2FyZyhhcCwgdW5zaWduZWQgY2hhciAqKTsKKwlsZW4gPSB2YV9hcmcoYXAsIGludCk7CisJYWYgPSB2YV9hcmcoYXAsIGludCk7CisKKwlycy0+aG9zdC5oX2xlbmd0aCA9IGxlbjsKKwlycy0+aG9zdC5oX2FkZHJ0eXBlID0gYWY7CisKKwlfc2V0aHRlbnQocnMtPnN0YXlvcGVuKTsKKwl3aGlsZSAoKHAgPSBfZ2V0aHRlbnQoKSkgIT0gTlVMTCkKKwkJaWYgKHAtPmhfYWRkcnR5cGUgPT0gYWYgJiYgIW1lbWNtcChwLT5oX2FkZHIsIGFkZHIsCisJCSAgICAoc2l6ZV90KWxlbikpCisJCQlicmVhazsKKwlfZW5kaHRlbnQoKTsKKwkqKChzdHJ1Y3QgaG9zdGVudCAqKilydikgPSBwOworCWlmIChwPT1OVUxMKSB7CisJCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKwlyZXR1cm4gTlNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQKK21hcF92NHY2X2FkZHJlc3MoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QpCit7CisJdV9jaGFyICpwID0gKHVfY2hhciAqKWRzdDsKKwljaGFyIHRtcFtJTkFERFJTWl07CisJaW50IGk7CisKKwlhc3NlcnQoc3JjICE9IE5VTEwpOworCWFzc2VydChkc3QgIT0gTlVMTCk7CisKKwkvKiBTdGFzaCBhIHRlbXBvcmFyeSBjb3B5IHNvIG91ciBjYWxsZXIgY2FuIHVwZGF0ZSBpbiBwbGFjZS4gKi8KKwkodm9pZCltZW1jcHkodG1wLCBzcmMsIElOQUREUlNaKTsKKwkvKiBNYXJrIHRoaXMgaXB2NiBhZGRyIGFzIGEgbWFwcGVkIGlwdjQuICovCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCSpwKysgPSAweDAwOworCSpwKysgPSAweGZmOworCSpwKysgPSAweGZmOworCS8qIFJldHJpZXZlIHRoZSBzYXZlZCBjb3B5IGFuZCB3ZSdyZSBkb25lLiAqLworCSh2b2lkKW1lbWNweSgodm9pZCAqKXAsIHRtcCwgSU5BRERSU1opOworfQorCitzdGF0aWMgdm9pZAorbWFwX3Y0djZfaG9zdGVudChzdHJ1Y3QgaG9zdGVudCAqaHAsIGNoYXIgKipicHAsIGNoYXIgKmVwKQoreworCWNoYXIgKiphcDsKKworCWFzc2VydChocCAhPSBOVUxMKTsKKwlhc3NlcnQoYnBwICE9IE5VTEwpOworCWFzc2VydChlcCAhPSBOVUxMKTsKKworCWlmIChocC0+aF9hZGRydHlwZSAhPSBBRl9JTkVUIHx8IGhwLT5oX2xlbmd0aCAhPSBJTkFERFJTWikKKwkJcmV0dXJuOworCWhwLT5oX2FkZHJ0eXBlID0gQUZfSU5FVDY7CisJaHAtPmhfbGVuZ3RoID0gSU42QUREUlNaOworCWZvciAoYXAgPSBocC0+aF9hZGRyX2xpc3Q7ICphcDsgYXArKykgeworCQlpbnQgaSA9IHNpemVvZihhbGlnbikgLSAoc2l6ZV90KSgodV9sb25nKSpicHAgJSBzaXplb2YoYWxpZ24pKTsKKworCQlpZiAoZXAgLSAqYnBwIDwgKGkgKyBJTjZBRERSU1opKSB7CisJCQkvKiBPdXQgb2YgbWVtb3J5LiAgVHJ1bmNhdGUgYWRkcmVzcyBsaXN0IGhlcmUuICBYWFggKi8KKwkJCSphcCA9IE5VTEw7CisJCQlyZXR1cm47CisJCX0KKwkJKmJwcCArPSBpOworCQltYXBfdjR2Nl9hZGRyZXNzKCphcCwgKmJwcCk7CisJCSphcCA9ICpicHA7CisJCSpicHAgKz0gSU42QUREUlNaOworCX0KK30KKworc3RhdGljIHZvaWQKK2FkZHJzb3J0KGNoYXIgKiphcCwgaW50IG51bSwgcmVzX3N0YXRlIHJlcykKK3sKKwlpbnQgaSwgajsKKwljaGFyICoqcDsKKwlzaG9ydCBhdmFsW01BWEFERFJTXTsKKwlpbnQgbmVlZHNvcnQgPSAwOworCisJYXNzZXJ0KGFwICE9IE5VTEwpOworCisJcCA9IGFwOworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKywgcCsrKSB7CisJICAgIGZvciAoaiA9IDAgOyAodW5zaWduZWQpaiA8IHJlcy0+bnNvcnQ7IGorKykKKwkJaWYgKHJlcy0+c29ydF9saXN0W2pdLmFkZHIuc19hZGRyID09CisJCSAgICAoKChzdHJ1Y3QgaW5fYWRkciAqKSh2b2lkICopKCpwKSktPnNfYWRkciAmCisJCSAgICByZXMtPnNvcnRfbGlzdFtqXS5tYXNrKSkKKwkJCWJyZWFrOworCSAgICBhdmFsW2ldID0gajsKKwkgICAgaWYgKG5lZWRzb3J0ID09IDAgJiYgaSA+IDAgJiYgaiA8IGF2YWxbaS0xXSkKKwkJbmVlZHNvcnQgPSBpOworCX0KKwlpZiAoIW5lZWRzb3J0KQorCSAgICByZXR1cm47CisKKwl3aGlsZSAobmVlZHNvcnQgPCBudW0pIHsKKwkgICAgZm9yIChqID0gbmVlZHNvcnQgLSAxOyBqID49IDA7IGotLSkgeworCQlpZiAoYXZhbFtqXSA+IGF2YWxbaisxXSkgeworCQkgICAgY2hhciAqaHA7CisKKwkJICAgIGkgPSBhdmFsW2pdOworCQkgICAgYXZhbFtqXSA9IGF2YWxbaisxXTsKKwkJICAgIGF2YWxbaisxXSA9IGk7CisKKwkJICAgIGhwID0gYXBbal07CisJCSAgICBhcFtqXSA9IGFwW2orMV07CisJCSAgICBhcFtqKzFdID0gaHA7CisJCX0gZWxzZQorCQkgICAgYnJlYWs7CisJICAgIH0KKwkgICAgbmVlZHNvcnQrKzsKKwl9Cit9CisKK3N0cnVjdCBob3N0ZW50ICoKK2dldGhvc3RlbnQodm9pZCkKK3sKKyAgICByZXNfc3RhdGljICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKKwlycy0+aG9zdC5oX2FkZHJ0eXBlID0gMDsKKwlycy0+aG9zdC5oX2xlbmd0aCA9IDA7CisJcmV0dXJuIF9nZXRodGVudCgpOworfQorCisvKkFSR1NVU0VEKi8KK3N0YXRpYyBpbnQKK19kbnNfZ2V0aHRieW5hbWUodm9pZCAqcnYsIHZvaWQgKmNiX2RhdGEsIHZhX2xpc3QgYXApCit7CisJcXVlcnlidWYgKmJ1ZjsKKwlpbnQgbiwgdHlwZTsKKwlzdHJ1Y3QgaG9zdGVudCAqaHA7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgYWY7CisJcmVzX3N0YXRlIHJlczsKKworCWFzc2VydChydiAhPSBOVUxMKTsKKworCW5hbWUgPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJLyogTk9TVFJJQ1Qgc2tpcCBsZW4gKi8odm9pZCl2YV9hcmcoYXAsIGludCk7CisJYWYgPSB2YV9hcmcoYXAsIGludCk7CisKKwlzd2l0Y2ggKGFmKSB7CisJY2FzZSBBRl9JTkVUOgorCQl0eXBlID0gVF9BOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQl0eXBlID0gVF9BQUFBOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlNfVU5BVkFJTDsKKwl9CisJYnVmID0gbWFsbG9jKHNpemVvZigqYnVmKSk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKwlyZXMgPSBfX3Jlc19nZXRfc3RhdGUoKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZnJlZShidWYpOworCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJfQorCW4gPSByZXNfbnNlYXJjaChyZXMsIG5hbWUsIENfSU4sIHR5cGUsIGJ1Zi0+YnVmLCBzaXplb2YoYnVmLT5idWYpKTsKKwlpZiAobiA8IDApIHsKKwkJZnJlZShidWYpOworCQlkcHJpbnRmKCJyZXNfbnNlYXJjaCBmYWlsZWQgKCVkKVxuIiwgcmVzLCBuKTsKKwkJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisJaHAgPSBnZXRhbnN3ZXIoYnVmLCBuLCBuYW1lLCB0eXBlLCByZXMpOworCWZyZWUoYnVmKTsKKwlfX3Jlc19wdXRfc3RhdGUocmVzKTsKKwlpZiAoaHAgPT0gTlVMTCkKKwkJc3dpdGNoIChoX2Vycm5vKSB7CisJCWNhc2UgSE9TVF9OT1RfRk9VTkQ6CisJCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJCWNhc2UgVFJZX0FHQUlOOgorCQkJcmV0dXJuIE5TX1RSWUFHQUlOOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIE5TX1VOQVZBSUw7CisJCX0KKwkqKChzdHJ1Y3QgaG9zdGVudCAqKilydikgPSBocDsKKwlyZXR1cm4gTlNfU1VDQ0VTUzsKK30KKworLypBUkdTVVNFRCovCitzdGF0aWMgaW50CitfZG5zX2dldGh0YnlhZGRyKHZvaWQgKnJ2LCB2b2lkCSpjYl9kYXRhLCB2YV9saXN0IGFwKQoreworCWNoYXIgcWJ1ZltNQVhETkFNRSArIDFdLCAqcXAsICplcDsKKwlpbnQgbjsKKwlxdWVyeWJ1ZiAqYnVmOworCXN0cnVjdCBob3N0ZW50ICpocDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICp1YWRkcjsKKwlpbnQgbGVuLCBhZiwgYWR2YW5jZTsKKwlyZXNfc3RhdGUgcmVzOworCXVuc2lnbmVkIG5ldGlkLCBtYXJrOworCXJlc19zdGF0aWMgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisKKwlhc3NlcnQocnYgIT0gTlVMTCk7CisKKwl1YWRkciA9IHZhX2FyZyhhcCwgdW5zaWduZWQgY2hhciAqKTsKKwlsZW4gPSB2YV9hcmcoYXAsIGludCk7CisJYWYgPSB2YV9hcmcoYXAsIGludCk7CisJbmV0aWQgPSB2YV9hcmcoYXAsIHVuc2lnbmVkKTsKKwltYXJrID0gdmFfYXJnKGFwLCB1bnNpZ25lZCk7CisKKwlzd2l0Y2ggKGFmKSB7CisJY2FzZSBBRl9JTkVUOgorCQkodm9pZClzbnByaW50ZihxYnVmLCBzaXplb2YocWJ1ZiksICIldS4ldS4ldS4ldS5pbi1hZGRyLmFycGEiLAorCQkgICAgKHVhZGRyWzNdICYgMHhmZiksICh1YWRkclsyXSAmIDB4ZmYpLAorCQkgICAgKHVhZGRyWzFdICYgMHhmZiksICh1YWRkclswXSAmIDB4ZmYpKTsKKwkJYnJlYWs7CisKKwljYXNlIEFGX0lORVQ2OgorCQlxcCA9IHFidWY7CisJCWVwID0gcWJ1ZiArIHNpemVvZihxYnVmKSAtIDE7CisJCWZvciAobiA9IElONkFERFJTWiAtIDE7IG4gPj0gMDsgbi0tKSB7CisJCQlhZHZhbmNlID0gc25wcmludGYocXAsIChzaXplX3QpKGVwIC0gcXApLCAiJXguJXguIiwKKwkJCSAgICB1YWRkcltuXSAmIDB4ZiwKKwkJCSAgICAoKHVuc2lnbmVkIGludCl1YWRkcltuXSA+PiA0KSAmIDB4Zik7CisJCQlpZiAoYWR2YW5jZSA+IDAgJiYgcXAgKyBhZHZhbmNlIDwgZXApCisJCQkJcXAgKz0gYWR2YW5jZTsKKwkJCWVsc2UgeworCQkJCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKKwkJCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJCQl9CisJCX0KKwkJaWYgKHN0cmxjYXQocWJ1ZiwgImlwNi5hcnBhIiwgc2l6ZW9mKHFidWYpKSA+PSBzaXplb2YocWJ1ZikpIHsKKwkJCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKKwkJCXJldHVybiBOU19OT1RGT1VORDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlhYm9ydCgpOworCX0KKworCWJ1ZiA9IG1hbGxvYyhzaXplb2YoKmJ1ZikpOworCWlmIChidWYgPT0gTlVMTCkgeworCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisJcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWZyZWUoYnVmKTsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKwlyZXNfc2V0bmV0aWQocmVzLCBuZXRpZCk7CisJcmVzX3NldG1hcmsocmVzLCBtYXJrKTsKKwluID0gcmVzX25xdWVyeShyZXMsIHFidWYsIENfSU4sIFRfUFRSLCBidWYtPmJ1Ziwgc2l6ZW9mKGJ1Zi0+YnVmKSk7CisJaWYgKG4gPCAwKSB7CisJCWZyZWUoYnVmKTsKKwkJZHByaW50ZigicmVzX25xdWVyeSBmYWlsZWQgKCVkKVxuIiwgcmVzLCBuKTsKKwkJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisJaHAgPSBnZXRhbnN3ZXIoYnVmLCBuLCBxYnVmLCBUX1BUUiwgcmVzKTsKKwlmcmVlKGJ1Zik7CisJaWYgKGhwID09IE5VTEwpIHsKKwkJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJCXN3aXRjaCAoaF9lcnJubykgeworCQljYXNlIEhPU1RfTk9UX0ZPVU5EOgorCQkJcmV0dXJuIE5TX05PVEZPVU5EOworCQljYXNlIFRSWV9BR0FJTjoKKwkJCXJldHVybiBOU19UUllBR0FJTjsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBOU19VTkFWQUlMOworCQl9CisJfQorCWhwLT5oX2FkZHJ0eXBlID0gYWY7CisJaHAtPmhfbGVuZ3RoID0gbGVuOworCSh2b2lkKW1lbWNweShycy0+aG9zdF9hZGRyLCB1YWRkciwgKHNpemVfdClsZW4pOworCXJzLT5oX2FkZHJfcHRyc1swXSA9IChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyOworCXJzLT5oX2FkZHJfcHRyc1sxXSA9IE5VTEw7CisJaWYgKGFmID09IEFGX0lORVQgJiYgKHJlcy0+b3B0aW9ucyAmIFJFU19VU0VfSU5FVDYpKSB7CisJCW1hcF92NHY2X2FkZHJlc3MoKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIsCisJCSAgICAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcik7CisJCWhwLT5oX2FkZHJ0eXBlID0gQUZfSU5FVDY7CisJCWhwLT5oX2xlbmd0aCA9IElONkFERFJTWjsKKwl9CisKKwlfX3Jlc19wdXRfc3RhdGUocmVzKTsKKwkqKChzdHJ1Y3QgaG9zdGVudCAqKilydikgPSBocDsKKwloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKKwlyZXR1cm4gTlNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2xpYmMvZG5zL2luY2x1ZGUvcmVzb2x2X2NhY2hlLmggYi9saWJjL2Rucy9pbmNsdWRlL3Jlc29sdl9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNDlkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Rucy9pbmNsdWRlL3Jlc29sdl9jYWNoZS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1JFU09MVl9DQUNIRV9IXworI2RlZmluZSBfUkVTT0xWX0NBQ0hFX0hfCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworc3RydWN0IF9fcmVzX3N0YXRlOworCisvKiBzZXRzIHRoZSBuYW1lIHNlcnZlciBhZGRyZXNzZXMgdG8gdGhlIHByb3ZpZGVkIHJlc19zdGF0ZSBzdHJ1Y3R1cmUuIFRoZQorICogbmFtZSBzZXJ2ZXJzIGFyZSByZXRyaWV2ZWQgZnJvbSB0aGUgY2FjaGUgd2hpY2ggaXMgYXNzb2NpYXRlZAorICogd2l0aCB0aGUgbmV0d29yayB0byB3aGljaCB0aGUgcmVzX3N0YXRlIHN0cnVjdHVyZSBpcyBhc3NvY2lhdGVkICovCitfX0xJQkNfSElEREVOX18KK2V4dGVybiB2b2lkIF9yZXNvbHZfcG9wdWxhdGVfcmVzX2Zvcl9uZXQoc3RydWN0IF9fcmVzX3N0YXRlKiBzdGF0cCk7CisKK3R5cGVkZWYgZW51bSB7CisgICAgUkVTT0xWX0NBQ0hFX1VOU1VQUE9SVEVELCAgLyogdGhlIGNhY2hlIGNhbid0IGhhbmRsZSB0aGF0IGtpbmQgb2YgcXVlcmllcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9yIHRoZSBhbnN3ZXIgYnVmZmVyIGlzIHRvbyBzbWFsbCAqLworICAgIFJFU09MVl9DQUNIRV9OT1RGT1VORCwgICAgIC8qIHRoZSBjYWNoZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyBxdWVyeSAqLworICAgIFJFU09MVl9DQUNIRV9GT1VORCAgICAgICAgIC8qIHRoZSBjYWNoZSBmb3VuZCB0aGUgYW5zd2VyICovCit9IFJlc29sdkNhY2hlU3RhdHVzOworCitfX0xJQkNfSElEREVOX18KK2V4dGVybiBSZXNvbHZDYWNoZVN0YXR1cworX3Jlc29sdl9jYWNoZV9sb29rdXAoIHVuc2lnbmVkICAgICAgICAgICAgICBuZXRpZCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgICAgICAgICAgcXVlcnksCisgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIHF1ZXJ5bGVuLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICBhbnN3ZXIsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGFuc3dlcnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgKmFuc3dlcmxlbiApOworCisvKiBhZGQgYSAocXVlcnksYW5zd2VyKSB0byB0aGUgY2FjaGUsIG9ubHkgY2FsbCBpZiBfcmVzb2x2X2NhY2hlX2xvb2t1cAorICogZGlkIHJldHVybiBSRVNPTFZfQ0FDSEVfTk9URk9VTkQKKyAqLworX19MSUJDX0hJRERFTl9fCitleHRlcm4gdm9pZAorX3Jlc29sdl9jYWNoZV9hZGQoIHVuc2lnbmVkICAgICAgICAgICAgICBuZXRpZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgICAgICAgICAgcXVlcnksCisgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIHF1ZXJ5bGVuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICAgICAgICAgICBhbnN3ZXIsCisgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGFuc3dlcmxlbiApOworCisvKiBOb3RpZnkgdGhlIGNhY2hlIGEgcmVxdWVzdCBmYWlsZWQgKi8KK19fTElCQ19ISURERU5fXworZXh0ZXJuIHZvaWQKK19yZXNvbHZfY2FjaGVfcXVlcnlfZmFpbGVkKCB1bnNpZ25lZCAgICAgbmV0aWQsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogcXVlcnksCisgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgcXVlcnlsZW4pOworCisjZW5kaWYgLyogX1JFU09MVl9DQUNIRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvaW5jbHVkZS9yZXNvbHZfbmV0aWQuaCBiL2xpYmMvZG5zL2luY2x1ZGUvcmVzb2x2X25ldGlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU1MjFiOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL2luY2x1ZGUvcmVzb2x2X25ldGlkLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfUkVTT0xWX05FVElEX0gKKyNkZWZpbmUgX1JFU09MVl9ORVRJRF9ICisKKy8qIFRoaXMgaGVhZGVyIGNvbnRhaW5zIGRlY2xhcmF0aW9ucyByZWxhdGVkIHRvIHBlci1uZXR3b3JrIEROUworICogc2VydmVyIHNlbGVjdGlvbi4gVGhleSBhcmUgdXNlZCBieSBzeXN0ZW0vbmV0ZC8gYW5kIHNob3VsZCBub3QgYmUKKyAqIGV4cG9zZWQgYnkgdGhlIEMgbGlicmFyeSdzIHB1YmxpYyBOREsgaGVhZGVycy4KKyAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKworLyoKKyAqIFBhc3NpbmcgTkVUSURfVU5TRVQgYXMgdGhlIG5ldElkIGNhdXNlcyBzeXN0ZW0vbmV0ZC9zZXJ2ZXIvRG5zUHJveHlMaXN0ZW5lci5jcHAgdG8KKyAqIGZpbGwgaW4gdGhlIGFwcHJvcHJpYXRlIGRlZmF1bHQgbmV0SWQgZm9yIHRoZSBxdWVyeS4KKyAqLworI2RlZmluZSBORVRJRF9VTlNFVCAwdQorCisvKgorICogTUFSS19VTlNFVCByZXByZXNlbnRzIHRoZSBkZWZhdWx0IChpLmUuIHVuc2V0KSB2YWx1ZSBmb3IgYSBzb2NrZXQgbWFyay4KKyAqLworI2RlZmluZSBNQVJLX1VOU0VUIDB1CisKK19fQkVHSU5fREVDTFMKKworc3RydWN0IGFkZHJpbmZvOworCisjZGVmaW5lIF9fdXNlZF9pbl9uZXRkIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorCitzdHJ1Y3QgaG9zdGVudCAqYW5kcm9pZF9nZXRob3N0YnlhZGRyZm9ybmV0KGNvbnN0IHZvaWQgKiwgc29ja2xlbl90LCBpbnQsIHVuc2lnbmVkLCB1bnNpZ25lZCkgX191c2VkX2luX25ldGQ7CitzdHJ1Y3QgaG9zdGVudCAqYW5kcm9pZF9nZXRob3N0YnluYW1lZm9ybmV0KGNvbnN0IGNoYXIgKiwgaW50LCB1bnNpZ25lZCwgdW5zaWduZWQpIF9fdXNlZF9pbl9uZXRkOworaW50IGFuZHJvaWRfZ2V0YWRkcmluZm9mb3JuZXQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLCB1bnNpZ25lZCwKKwkJdW5zaWduZWQsIHN0cnVjdCBhZGRyaW5mbyAqKikgX191c2VkX2luX25ldGQ7CisKKy8qIHNldCBuYW1lIHNlcnZlcnMgZm9yIGEgbmV0d29yayAqLworZXh0ZXJuIHZvaWQgX3Jlc29sdl9zZXRfbmFtZXNlcnZlcnNfZm9yX25ldCh1bnNpZ25lZCBuZXRpZCwKKyAgICBjb25zdCBjaGFyKiogc2VydmVycywgaW50IG51bXNlcnZlcnMsIGNvbnN0IGNoYXIgKmRvbWFpbnMpIF9fdXNlZF9pbl9uZXRkOworCisvKiBmbHVzaCB0aGUgY2FjaGUgYXNzb2NpYXRlZCB3aXRoIGEgY2VydGFpbiBuZXR3b3JrICovCitleHRlcm4gdm9pZCBfcmVzb2x2X2ZsdXNoX2NhY2hlX2Zvcl9uZXQodW5zaWduZWQgbmV0aWQpIF9fdXNlZF9pbl9uZXRkOworCisvKiBkZWxldGUgdGhlIGNhY2hlIGFzc29jaWF0ZWQgd2l0aCBhIGNlcnRhaW4gbmV0d29yayAqLworZXh0ZXJuIHZvaWQgX3Jlc29sdl9kZWxldGVfY2FjaGVfZm9yX25ldCh1bnNpZ25lZCBuZXRpZCkgX191c2VkX2luX25ldGQ7CisKKy8qIEludGVybmFsIHVzZSBvbmx5LiAqLworc3RydWN0IGhvc3RlbnQgKmFuZHJvaWRfZ2V0aG9zdGJ5YWRkcmZvcm5ldF9wcm94eShjb25zdCB2b2lkICosIHNvY2tsZW5fdCwgaW50ICwgdW5zaWduZWQpOworaW50IGFuZHJvaWRfZ2V0bmFtZWluZm9mb3JuZXQoY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCwgY2hhciAqLCBzaXplX3QsIGNoYXIgKiwgc2l6ZV90LAorCQkgaW50LCB1bnNpZ25lZCwgdW5zaWduZWQpOworCisvKiBkZWxldGUgdGhlIGNhY2hlIGFzc29jaWF0ZWQgd2l0aCBhIGNlcnRhaW4gbmV0d29yayAqLworZXh0ZXJuIHZvaWQgX3Jlc29sdl9kZWxldGVfY2FjaGVfZm9yX25ldCh1bnNpZ25lZCBuZXRpZCk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfUkVTT0xWX05FVElEX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvZG5zL2luY2x1ZGUvcmVzb2x2X3ByaXZhdGUuaCBiL2xpYmMvZG5zL2luY2x1ZGUvcmVzb2x2X3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTFhNGI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvaW5jbHVkZS9yZXNvbHZfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTE1IEBACisvKgkkTmV0QlNEOiByZXNvbHYuaCx2IDEuMzEgMjAwNS8xMi8yNiAxOTowMTo0NyBwZXJyeSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTg3LCAxOTg5CisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKy8qCisgKglAKCMpcmVzb2x2LmgJOC4xIChCZXJrZWxleSkgNi8yLzkzCisgKglJZDogcmVzb2x2LmgsdiAxLjcuMi4xMS40LjIgMjAwNC8wNi8yNSAwMDo0MTowNSBtYXJrYSBFeHAKKyAqLworCisjaWZuZGVmIF9SRVNPTFZfUFJJVkFURV9IXworI2RlZmluZQlfUkVTT0xWX1BSSVZBVEVfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjaW5jbHVkZSAicmVzb2x2X3N0YXRpYy5oIgorI2luY2x1ZGUgPG5ldC9pZi5oPgorCisvKiBEZXNwaXRlIHRoaXMgZmlsZSdzIG5hbWUsIGl0J3MgcGFydCBvZiBsaWJyZXNvbHYuIE9uIEFuZHJvaWQsIHRoYXQgbWVhbnMgaXQncyBwYXJ0IG9mIGxpYmMgOi0oICovCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goZGVmYXVsdCkKKworLyoKKyAqIFJldmlzaW9uIGluZm9ybWF0aW9uLiAgVGhpcyBpcyB0aGUgcmVsZWFzZSBkYXRlIGluIFlZWVlNTUREIGZvcm1hdC4KKyAqIEl0IGNhbiBjaGFuZ2UgZXZlcnkgZGF5IHNvIHRoZSByaWdodCB0aGluZyB0byBkbyB3aXRoIGl0IGlzIHVzZSBpdAorICogaW4gcHJlcHJvY2Vzc29yIGNvbW1hbmRzIHN1Y2ggYXMgIiNpZiAoX19SRVMgPiAxOTkzMTEwNCkiLiAgRG8gbm90CisgKiBjb21wYXJlIGZvciBlcXVhbGl0eTsgcmF0aGVyLCB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgeW91ciByZXNvbHZlcgorICogaXMgbmV3IGVub3VnaCB0byBjb250YWluIGEgY2VydGFpbiBmZWF0dXJlLgorICovCisKKyNkZWZpbmUJX19SRVMJMjAwMzAxMjQKKworLyoKKyAqIFRoaXMgdXNlZCB0byBiZSBkZWZpbmVkIGluIHJlc19xdWVyeS5jLCBub3cgaXQncyBpbiBoZXJyb3IuYy4KKyAqIFtYWFggbm8gaXQncyBub3QuICBJdCdzIGluIGlycy9pcnNfZGF0YS5jXQorICogSXQgd2FzCisgKiBuZXZlciBleHRlcm4nZCBieSBhbnkgKi5oIGZpbGUgYmVmb3JlIGl0IHdhcyBwbGFjZWQgaGVyZS4gIEZvciB0aHJlYWQKKyAqIGF3YXJlIHByb2dyYW1zLCB0aGUgbGFzdCBoX2Vycm5vIHZhbHVlIHNldCBpcyBzdG9yZWQgaW4gcmVzLT5oX2Vycm5vLgorICoKKyAqIFhYWDoJVGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgZ29vZCByZWFzb24gZm9yIGV4cG9zaW5nIFJFU19TRVRfSF9FUlJOTworICoJKGFuZCBfX2hfZXJybm9fc2V0KSB0byB0aGUgcHVibGljIHZpYSA8cmVzb2x2Lmg+LgorICogWFhYOglfX2hfZXJybm9fc2V0IGlzIHJlYWxseSBwYXJ0IG9mIElSUywgbm90IHBhcnQgb2YgdGhlIHJlc29sdmVyLgorICoJSWYgc29tZWJvZHkgd2FudHMgdG8gYnVpbGQgYW5kIHVzZSBhIHJlc29sdmVyIHRoYXQgZG9lc24ndCB1c2UgSVJTLAorICoJd2hhdCBkbyB0aGV5IGRvPyAgUGVyaGFwcyBzb21ldGhpbmcgbGlrZQorICoJCSNpZmRlZiBXQU5UX0lSUworICoJCSMgZGVmaW5lIFJFU19TRVRfSF9FUlJOTyhyLHgpIF9faF9lcnJub19zZXQocix4KQorICoJCSNlbHNlCisgKgkJIyBkZWZpbmUgUkVTX1NFVF9IX0VSUk5PKHIseCkgKGhfZXJybm8gPSAociktPnJlc19oX2Vycm5vID0gKHgpKQorICoJCSNlbmRpZgorICovCisKKyNkZWZpbmUgUkVTX1NFVF9IX0VSUk5PKHIseCkgKGhfZXJybm8gPSAociktPnJlc19oX2Vycm5vID0gKHgpKQorc3RydWN0IF9fcmVzX3N0YXRlOyAvKiBmb3J3YXJkICovCisKKy8qCisgKiBSZXNvbHZlciBjb25maWd1cmF0aW9uIGZpbGUuCisgKiBOb3JtYWxseSBub3QgcHJlc2VudCwgYnV0IG1heSBjb250YWluIHRoZSBhZGRyZXNzIG9mIHRoZQorICogaW5pdGlhbCBuYW1lIHNlcnZlcihzKSB0byBxdWVyeSBhbmQgdGhlIGRvbWFpbiBzZWFyY2ggbGlzdC4KKyAqLworCisjaWZuZGVmIF9QQVRIX1JFU0NPTkYKKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNkZWZpbmUgX1BBVEhfUkVTQ09ORiAgICAgICAgIi9ldGMvcHBwL3Jlc29sdi5jb25mIgorI2Vsc2UKKyNkZWZpbmUgX1BBVEhfUkVTQ09ORiAgICAgICAgIi9ldGMvcmVzb2x2LmNvbmYiCisjZW5kaWYKKyNlbmRpZgorCit0eXBlZGVmIGVudW0geyByZXNfZ29haGVhZCwgcmVzX25leHRucywgcmVzX21vZGlmaWVkLCByZXNfZG9uZSwgcmVzX2Vycm9yIH0KKwlyZXNfc2VuZGhvb2thY3Q7CisKK3R5cGVkZWYgcmVzX3NlbmRob29rYWN0ICgqcmVzX3NlbmRfcWhvb2spKHN0cnVjdCBzb2NrYWRkciAqIGNvbnN0ICosCisJCQkJCSAgICAgIGNvbnN0IHVfY2hhciAqKiwgaW50ICosCisJCQkJCSAgICAgIHVfY2hhciAqLCBpbnQsIGludCAqKTsKKwordHlwZWRlZiByZXNfc2VuZGhvb2thY3QgKCpyZXNfc2VuZF9yaG9vaykoY29uc3Qgc3RydWN0IHNvY2thZGRyICosCisJCQkJCSAgICAgIGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLAorCQkJCQkgICAgICBpbnQsIGludCAqKTsKKworc3RydWN0IHJlc19zeW0geworCWludAkJbnVtYmVyOwkgICAvKiBJZGVudGlmeWluZyBudW1iZXIsIGxpa2UgVF9NWCAqLworCWNvbnN0IGNoYXIgKgluYW1lOwkgICAvKiBJdHMgc3ltYm9saWMgbmFtZSwgbGlrZSAiTVgiICovCisJY29uc3QgY2hhciAqCWh1bWFubmFtZTsgLyogSXRzIGZ1biBuYW1lLCBsaWtlICJtYWlsIGV4Y2hhbmdlciIgKi8KK307CisKKy8qCisgKiBHbG9iYWwgZGVmaW5lcyBhbmQgdmFyaWFibGVzIGZvciByZXNvbHZlciBzdHViLgorICovCisjZGVmaW5lCU1BWE5TCQkJMwkvKiBtYXggIyBuYW1lIHNlcnZlcnMgd2UnbGwgdHJhY2sgKi8KKyNkZWZpbmUJTUFYREZMU1JDSAkJMwkvKiAjIGRlZmF1bHQgZG9tYWluIGxldmVscyB0byB0cnkgKi8KKyNkZWZpbmUJTUFYRE5TUkNICQk2CS8qIG1heCAjIGRvbWFpbnMgaW4gc2VhcmNoIHBhdGggKi8KKyNkZWZpbmUJTE9DQUxET01BSU5QQVJUUwkyCS8qIG1pbiBsZXZlbHMgaW4gbmFtZSB0aGF0IGlzICJsb2NhbCIgKi8KKworI2RlZmluZQlSRVNfVElNRU9VVAkJNQkvKiBtaW4uIHNlY29uZHMgYmV0d2VlbiByZXRyaWVzICovCisjZGVmaW5lCU1BWFJFU09MVlNPUlQJCTEwCS8qIG51bWJlciBvZiBuZXQgdG8gc29ydCBvbiAqLworI2RlZmluZQlSRVNfTUFYTkRPVFMJCTE1CS8qIHNob3VsZCByZWZsZWN0IGJpdCBmaWVsZCBzaXplICovCisjZGVmaW5lCVJFU19NQVhSRVRSQU5TCQkzMAkvKiBvbmx5IGZvciByZXNvbHYuY29uZi9SRVNfT1BUSU9OUyAqLworI2RlZmluZQlSRVNfTUFYUkVUUlkJCTUJLyogb25seSBmb3IgcmVzb2x2LmNvbmYvUkVTX09QVElPTlMgKi8KKyNkZWZpbmUJUkVTX0RGTFJFVFJZCQkyCS8qIERlZmF1bHQgIy90cmllcy4gKi8KKyNkZWZpbmUJUkVTX01BWFRJTUUJCTY1NTM1CS8qIEluZmluaXR5LCBpbiBtaWxsaXNlY29uZHMuICovCisKK3N0cnVjdCBfX3Jlc19zdGF0ZV9leHQ7CisKK3N0cnVjdCBfX3Jlc19zdGF0ZSB7CisJdW5zaWduZWQJbmV0aWQ7CQkJLyogTmV0SWQ6IGNhY2hlIGtleSBhbmQgc29ja2V0IG1hcmsgKi8KKwlpbnQJcmV0cmFuczsJIAkvKiByZXRyYW5zbWlzc2lvbiB0aW1lIGludGVydmFsICovCisJaW50CXJldHJ5OwkJCS8qIG51bWJlciBvZiB0aW1lcyB0byByZXRyYW5zbWl0ICovCisjaWZkZWYgc3VuCisJdV9pbnQJb3B0aW9uczsJCS8qIG9wdGlvbiBmbGFncyAtIHNlZSBiZWxvdy4gKi8KKyNlbHNlCisJdV9sb25nCW9wdGlvbnM7CQkvKiBvcHRpb24gZmxhZ3MgLSBzZWUgYmVsb3cuICovCisjZW5kaWYKKwlpbnQJbnNjb3VudDsJCS8qIG51bWJlciBvZiBuYW1lIHNlcnZlcnMgKi8KKwlzdHJ1Y3Qgc29ja2FkZHJfaW4KKwkJbnNhZGRyX2xpc3RbTUFYTlNdOwkvKiBhZGRyZXNzIG9mIG5hbWUgc2VydmVyICovCisjZGVmaW5lCW5zYWRkcgluc2FkZHJfbGlzdFswXQkJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKwl1X3Nob3J0CWlkOwkJCS8qIGN1cnJlbnQgbWVzc2FnZSBpZCAqLworCWNoYXIJKmRuc3JjaFtNQVhETlNSQ0grMV07CS8qIGNvbXBvbmVudHMgb2YgZG9tYWluIHRvIHNlYXJjaCAqLworCWNoYXIJZGVmZG5hbWVbMjU2XTsJCS8qIGRlZmF1bHQgZG9tYWluIChkZXByZWNhdGVkKSAqLworI2lmZGVmIHN1bgorCXVfaW50CXBmY29kZTsJCQkvKiBSRVNfUFJGXyBmbGFncyAtIHNlZSBiZWxvdy4gKi8KKyNlbHNlCisJdV9sb25nCXBmY29kZTsJCQkvKiBSRVNfUFJGXyBmbGFncyAtIHNlZSBiZWxvdy4gKi8KKyNlbmRpZgorCXVuc2lnbmVkIG5kb3RzOjQ7CQkvKiB0aHJlc2hvbGQgZm9yIGluaXRpYWwgYWJzLiBxdWVyeSAqLworCXVuc2lnbmVkIG5zb3J0OjQ7CQkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gc29ydF9saXN0W10gKi8KKwljaGFyCXVudXNlZFszXTsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgaW5fYWRkcglhZGRyOworCQl1aW50MzJfdAltYXNrOworCX0gc29ydF9saXN0W01BWFJFU09MVlNPUlRdOworI2lmZGVmIF9fT0xEX1JFU19TVEFURQorCWNoYXIgbG9va3Vwc1s0XTsKKyNlbHNlCisJcmVzX3NlbmRfcWhvb2sgcWhvb2s7CQkvKiBxdWVyeSBob29rICovCisJcmVzX3NlbmRfcmhvb2sgcmhvb2s7CQkvKiByZXNwb25zZSBob29rICovCisJaW50CXJlc19oX2Vycm5vOwkJLyogbGFzdCBvbmUgc2V0IGZvciB0aGlzIGNvbnRleHQgKi8KKwl1bnNpZ25lZCBfbWFyazsJCQkvKiBJZiBub24tMCBTRVRfTUFSSyB0byBfbWFyayBvbiBhbGwgcmVxdWVzdCBzb2NrZXRzICovCisJaW50CV92Y3NvY2s7CQkvKiBQUklWQVRFOiBmb3IgcmVzX3NlbmQgVkMgaS9vICovCisJdV9pbnQJX2ZsYWdzOwkJCS8qIFBSSVZBVEU6IHNlZSBiZWxvdyAqLworCXVfaW50CV9wYWQ7CQkJLyogbWFrZSBfdSA2NCBiaXQgYWxpZ25lZCAqLworCXVuaW9uIHsKKwkJLyogT24gYW4gMzItYml0IGFyY2ggdGhpcyBtZWFucyA1MTJiIHRvdGFsLiAqLworCQljaGFyCXBhZFs3MiAtIDQqc2l6ZW9mIChpbnQpIC0gMipzaXplb2YgKHZvaWQgKildOworCQlzdHJ1Y3QgeworCQkJdWludDE2X3QJCW5zY291bnQ7CisJCQl1aW50MTZfdAkJbnN0aW1lc1tNQVhOU107CS8qIG1zLiAqLworCQkJaW50CQkJbnNzb2Nrc1tNQVhOU107CisJCQlzdHJ1Y3QgX19yZXNfc3RhdGVfZXh0ICpleHQ7CS8qIGV4dGVudGlvbiBmb3IgSVB2NiAqLworCQl9IF9leHQ7CisJfSBfdTsKKyNlbmRpZgorICAgICAgICBzdHJ1Y3QgcmVzX3N0YXRpYyAgIHJzdGF0aWNbMV07Cit9OworCit0eXBlZGVmIHN0cnVjdCBfX3Jlc19zdGF0ZSAqcmVzX3N0YXRlOworCit1bmlvbiByZXNfc29ja2FkZHJfdW5pb24geworCXN0cnVjdCBzb2NrYWRkcl9pbglzaW47CisjaWZkZWYgSU42QUREUl9BTllfSU5JVAorCXN0cnVjdCBzb2NrYWRkcl9pbjYJc2luNjsKKyNlbmRpZgorI2lmZGVmIElTQ19BTElHTjY0CisJaW50NjRfdAkJCV9fYWxpZ242NDsJLyogNjRiaXQgYWxpZ25tZW50ICovCisjZWxzZQorCWludDMyX3QJCQlfX2FsaWduMzI7CS8qIDMyYml0IGFsaWdubWVudCAqLworI2VuZGlmCisJY2hhcgkJCV9fc3BhY2VbMTI4XTsgICAvKiBtYXggc2l6ZSAqLworfTsKKworLyoKKyAqIFJlc29sdmVyIGZsYWdzICh1c2VkIHRvIGJlIGRpc2NyZXRlIHBlci1tb2R1bGUgc3RhdGljcyBpbnRzKS4KKyAqLworI2RlZmluZQlSRVNfRl9WQwkweDAwMDAwMDAxCS8qIHNvY2tldCBpcyBUQ1AgKi8KKyNkZWZpbmUJUkVTX0ZfQ09OTgkweDAwMDAwMDAyCS8qIHNvY2tldCBpcyBjb25uZWN0ZWQgKi8KKyNkZWZpbmUJUkVTX0ZfRUROUzBFUlIJMHgwMDAwMDAwNAkvKiBFRE5TMCBjYXVzZWQgZXJyb3JzICovCisjZGVmaW5lCVJFU19GX19VTlVTRUQJMHgwMDAwMDAwOAkvKiAodW51c2VkKSAqLworI2RlZmluZQlSRVNfRl9MQVNUTUFTSwkweDAwMDAwMEYwCS8qIG9yZGluYWwgc2VydmVyIG9mIGxhc3QgcmVzX25zZW5kICovCisjZGVmaW5lCVJFU19GX0xBU1RTSElGVAk0CQkvKiBiaXQgcG9zaXRpb24gb2YgTEFTVE1BU0sgImZsYWciICovCisjZGVmaW5lCVJFU19HRVRMQVNUKHJlcykgKCgocmVzKS5fZmxhZ3MgJiBSRVNfRl9MQVNUTUFTSykgPj4gUkVTX0ZfTEFTVFNISUZUKQorCisvKiByZXNfZmluZHpvbmVjdXQyKCkgb3B0aW9ucyAqLworI2RlZmluZQlSRVNfRVhIQVVTVElWRQkweDAwMDAwMDAxCS8qIGFsd2F5cyBkbyBhbGwgcXVlcmllcyAqLworI2RlZmluZQlSRVNfSVBWNE9OTFkJMHgwMDAwMDAwMgkvKiBJUHY0IG9ubHkgKi8KKyNkZWZpbmUJUkVTX0lQVjZPTkxZCTB4MDAwMDAwMDQJLyogSVB2NiBvbmx5ICovCisKKy8qCisgKiBSZXNvbHZlciBvcHRpb25zIChrZWVwIHRoZXNlIGluIHN5bmNoIHdpdGggcmVzX2RlYnVnLmMsIHBsZWFzZSkKKyAqLworI2RlZmluZSBSRVNfSU5JVAkweDAwMDAwMDAxCS8qIGFkZHJlc3MgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgUkVTX0RFQlVHCTB4MDAwMDAwMDIJLyogcHJpbnQgZGVidWcgbWVzc2FnZXMgKi8KKyNkZWZpbmUgUkVTX0FBT05MWQkweDAwMDAwMDA0CS8qIGF1dGhvcml0YXRpdmUgYW5zd2VycyBvbmx5ICghSU1QTCkqLworI2RlZmluZSBSRVNfVVNFVkMJMHgwMDAwMDAwOAkvKiB1c2UgdmlydHVhbCBjaXJjdWl0ICovCisjZGVmaW5lIFJFU19QUklNQVJZCTB4MDAwMDAwMTAJLyogcXVlcnkgcHJpbWFyeSBzZXJ2ZXIgb25seSAoIUlNUEwpICovCisjZGVmaW5lIFJFU19JR05UQwkweDAwMDAwMDIwCS8qIGlnbm9yZSB0cnVjYXRpb24gZXJyb3JzICovCisjZGVmaW5lIFJFU19SRUNVUlNFCTB4MDAwMDAwNDAJLyogcmVjdXJzaW9uIGRlc2lyZWQgKi8KKyNkZWZpbmUgUkVTX0RFRk5BTUVTCTB4MDAwMDAwODAJLyogdXNlIGRlZmF1bHQgZG9tYWluIG5hbWUgKi8KKyNkZWZpbmUgUkVTX1NUQVlPUEVOCTB4MDAwMDAxMDAJLyogS2VlcCBUQ1Agc29ja2V0IG9wZW4gKi8KKyNkZWZpbmUgUkVTX0ROU1JDSAkweDAwMDAwMjAwCS8qIHNlYXJjaCB1cCBsb2NhbCBkb21haW4gdHJlZSAqLworI2RlZmluZQlSRVNfSU5TRUNVUkUxCTB4MDAwMDA0MDAJLyogdHlwZSAxIHNlY3VyaXR5IGRpc2FibGVkICovCisjZGVmaW5lCVJFU19JTlNFQ1VSRTIJMHgwMDAwMDgwMAkvKiB0eXBlIDIgc2VjdXJpdHkgZGlzYWJsZWQgKi8KKyNkZWZpbmUJUkVTX05PQUxJQVNFUwkweDAwMDAxMDAwCS8qIHNodXRzIG9mZiBIT1NUQUxJQVNFUyBmZWF0dXJlICovCisjZGVmaW5lCVJFU19VU0VfSU5FVDYJMHgwMDAwMjAwMAkvKiB1c2UvbWFwIElQdjYgaW4gZ2V0aG9zdGJ5bmFtZSgpICovCisjZGVmaW5lIFJFU19ST1RBVEUJMHgwMDAwNDAwMAkvKiByb3RhdGUgbnMgbGlzdCBhZnRlciBlYWNoIHF1ZXJ5ICovCisjZGVmaW5lCVJFU19OT0NIRUNLTkFNRQkweDAwMDA4MDAwCS8qIGRvIG5vdCBjaGVjayBuYW1lcyBmb3Igc2FuaXR5LiAqLworI2RlZmluZQlSRVNfS0VFUFRTSUcJMHgwMDAxMDAwMAkvKiBkbyBub3Qgc3RyaXAgVFNJRyByZWNvcmRzICovCisjZGVmaW5lCVJFU19CTEFTVAkweDAwMDIwMDAwCS8qIGJsYXN0IGFsbCByZWN1cnNpdmUgc2VydmVycyAqLworI2RlZmluZSBSRVNfTk9UTERRVUVSWQkweDAwMTAwMDAwCS8qIGRvbid0IHVucXVhbGlmaWVkIG5hbWUgYXMgYSB0bGQgKi8KKyNkZWZpbmUgUkVTX1VTRV9ETlNTRUMJMHgwMDIwMDAwMAkvKiB1c2UgRE5TU0VDIHVzaW5nIE9LIGJpdCBpbiBPUFQgKi8KKy8qICNkZWZpbmUgUkVTX0RFQlVHMgkweDAwNDAwMDAwICovCS8qIG5zbG9va3VwIGludGVybmFsICovCisvKiBLQU1FIGV4dGVuc2lvbnM6IHVzZSBoaWdoZXIgYml0IHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggSVNDIHVzZSAqLworI2RlZmluZSBSRVNfVVNFX0ROQU1FCTB4MTAwMDAwMDAJLyogdXNlIEROQU1FICovCisjZGVmaW5lIFJFU19VU0VfRUROUzAJMHg0MDAwMDAwMAkvKiB1c2UgRUROUzAgaWYgY29uZmlndXJlZCAqLworI2RlZmluZSBSRVNfTk9fTklCQkxFMgkweDgwMDAwMDAwCS8qIGRpc2FibGUgYWx0ZXJuYXRlIG5pYmJsZSBsb29rdXAgKi8KKworI2RlZmluZSBSRVNfREVGQVVMVAkoUkVTX1JFQ1VSU0UgfCBSRVNfREVGTkFNRVMgfCBcCisJCQkgUkVTX0ROU1JDSCB8IFJFU19OT19OSUJCTEUyKQorCisvKgorICogUmVzb2x2ZXIgInBmY29kZSIgdmFsdWVzLiAgVXNlZCBieSBkaWcuCisgKi8KKyNkZWZpbmUgUkVTX1BSRl9TVEFUUwkweDAwMDAwMDAxCisjZGVmaW5lIFJFU19QUkZfVVBEQVRFCTB4MDAwMDAwMDIKKyNkZWZpbmUgUkVTX1BSRl9DTEFTUyAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUkVTX1BSRl9DTUQJMHgwMDAwMDAwOAorI2RlZmluZSBSRVNfUFJGX1FVRVMJMHgwMDAwMDAxMAorI2RlZmluZSBSRVNfUFJGX0FOUwkweDAwMDAwMDIwCisjZGVmaW5lIFJFU19QUkZfQVVUSAkweDAwMDAwMDQwCisjZGVmaW5lIFJFU19QUkZfQURECTB4MDAwMDAwODAKKyNkZWZpbmUgUkVTX1BSRl9IRUFEMQkweDAwMDAwMTAwCisjZGVmaW5lIFJFU19QUkZfSEVBRDIJMHgwMDAwMDIwMAorI2RlZmluZSBSRVNfUFJGX1RUTElECTB4MDAwMDA0MDAKKyNkZWZpbmUgUkVTX1BSRl9IRUFEWAkweDAwMDAwODAwCisjZGVmaW5lIFJFU19QUkZfUVVFUlkJMHgwMDAwMTAwMAorI2RlZmluZSBSRVNfUFJGX1JFUExZCTB4MDAwMDIwMDAKKyNkZWZpbmUgUkVTX1BSRl9JTklUCTB4MDAwMDQwMDAKKyNkZWZpbmUgUkVTX1BSRl9UUlVOQwkweDAwMDA4MDAwCisvKgkJCTB4MDAwMTAwMDAJKi8KKworLyogVGhpbmdzIGludm9sdmluZyBhbiBpbnRlcm5hbCAoc3RhdGljKSByZXNvbHZlciBjb250ZXh0LiAqLworX19CRUdJTl9ERUNMUworCitfX0xJQkNfSElEREVOX18gZXh0ZXJuIHN0cnVjdCBfX3Jlc19zdGF0ZSAqX19yZXNfZ2V0X3N0YXRlKHZvaWQpOworX19MSUJDX0hJRERFTl9fIGV4dGVybiB2b2lkIF9fcmVzX3B1dF9zdGF0ZShzdHJ1Y3QgX19yZXNfc3RhdGUgKik7CisKKyNpZm5kZWYgQU5EUk9JRF9DSEFOR0VTCisvKgorICogU291cmNlIGFuZCBCaW5hcnkgY29tcGF0aWJpbGl0eTsgX3JlcyB3aWxsIG5vdCB3b3JrIHByb3Blcmx5CisgKiB3aXRoIG11bHRpLXRocmVhZGVkIHByb2dyYW1zLgorICovCitleHRlcm4gc3RydWN0IF9fcmVzX3N0YXRlICpfX3Jlc19zdGF0ZSh2b2lkKTsKKyNkZWZpbmUgX3JlcyAoKl9fcmVzX3N0YXRlKCkpCisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2lmbmRlZiBfX0JJTkRfTk9TVEFUSUMKKyNkZWZpbmUgZnBfbnF1ZXJ5CQlfX2ZwX25xdWVyeQorI2RlZmluZSBmcF9xdWVyeQkJX19mcF9xdWVyeQorI2RlZmluZSBob3N0YWxpYXMJCV9faG9zdGFsaWFzCisjZGVmaW5lIHBfcXVlcnkJCQlfX3BfcXVlcnkKKyNkZWZpbmUgcmVzX2Nsb3NlCQlfX3Jlc19jbG9zZQorI2RlZmluZSByZXNfb3B0CQkJX19yZXNfb3B0CisjZGVmaW5lIHJlc19pc291cnNlcnZlcgkJX19yZXNfaXNvdXJzZXJ2ZXIKKyNkZWZpbmUJcmVzX3F1ZXJ5ZG9tYWluCQlfX3Jlc19xdWVyeWRvbWFpbgorI2RlZmluZSByZXNfc2VuZAkJX19yZXNfc2VuZAorI2RlZmluZSByZXNfc2VuZHNpZ25lZAkJX19yZXNfc2VuZHNpZ25lZAorCisjaWZkZWYgQklORF9SRVNfUE9TSVgzCisjZGVmaW5lCWRuX2V4cGFuZAlfX2RuX2V4cGFuZAorI2RlZmluZQlyZXNfaW5pdAlfX3Jlc19pbml0CisjZGVmaW5lCXJlc19xdWVyeQlfX3Jlc19xdWVyeQorI2RlZmluZQlyZXNfc2VhcmNoCV9fcmVzX3NlYXJjaAorI2RlZmluZQlyZXNfbWtxdWVyeQlfX3Jlc19ta3F1ZXJ5CisjZW5kaWYKKworX19CRUdJTl9ERUNMUwordm9pZAkJZnBfbnF1ZXJ5KGNvbnN0IHVfY2hhciAqLCBpbnQsIEZJTEUgKik7Cit2b2lkCQlmcF9xdWVyeShjb25zdCB1X2NoYXIgKiwgRklMRSAqKTsKK2NvbnN0IGNoYXIgKglob3N0YWxpYXMoY29uc3QgY2hhciAqKTsKK3ZvaWQJCXBfcXVlcnkoY29uc3QgdV9jaGFyICopOwordm9pZAkJcmVzX2Nsb3NlKHZvaWQpOworaW50CQlyZXNfaW5pdCh2b2lkKTsKK19fTElCQ19ISURERU5fXyBpbnQJCXJlc19vcHQoaW50LCB1X2NoYXIgKiwgaW50LCBpbnQpOworaW50CQlyZXNfaXNvdXJzZXJ2ZXIoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopOworaW50CQlyZXNfbWtxdWVyeShpbnQsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGNvbnN0IHVfY2hhciAqLCBpbnQsIGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgaW50KTsKK2ludAkJcmVzX3F1ZXJ5KGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHVfY2hhciAqLCBpbnQpOworaW50CQlyZXNfcXVlcnlkb21haW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCwgaW50LCB1X2NoYXIgKiwgaW50KTsKK2ludAkJcmVzX3NlYXJjaChjb25zdCBjaGFyICosIGludCwgaW50LCB1X2NoYXIgKiwgaW50KTsKK2ludAkJcmVzX3NlbmQoY29uc3QgdV9jaGFyICosIGludCwgdV9jaGFyICosIGludCk7CitpbnQJCXJlc19zZW5kc2lnbmVkKGNvbnN0IHVfY2hhciAqLCBpbnQsIG5zX3RzaWdfa2V5ICosIHVfY2hhciAqLCBpbnQpOworX19FTkRfREVDTFMKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU0hBUkVEX0xJQkJJTkQpIHx8IGRlZmluZWQoTElCKQorLyoKKyAqIElmIGxpYmJpbmQgaXMgYSBzaGFyZWQgb2JqZWN0ICh3ZWxsLCBETEwgYW55d2F5KQorICogdGhlc2UgZXh0ZXJucyBicmVhayB0aGUgbGlua2VyIHdoZW4gcmVzb2x2LmggaXMKKyAqIGluY2x1ZGVkIGJ5IGEgbGliIGNsaWVudCAobGlrZSBuYW1lZCkKKyAqIE1ha2UgdGhlbSBnbyBhd2F5IGlmIGEgY2xpZW50IGlzIGluY2x1ZGluZyB0aGlzCisgKgorICovCitfX0xJQkNfSElEREVOX18gZXh0ZXJuIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9rZXlfc3ltc1tdOworX19MSUJDX0hJRERFTl9fIGV4dGVybiBjb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3BfY2VydF9zeW1zW107CitleHRlcm4gY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2NsYXNzX3N5bXNbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3BfdHlwZV9zeW1zW107CitfX0xJQkNfSElEREVOX18gZXh0ZXJuIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9yY29kZV9zeW1zW107CisjZW5kaWYgLyogU0hBUkVEX0xJQkJJTkQgKi8KKworI2lmbmRlZiBBTkRST0lEX0NIQU5HRVMKKyNkZWZpbmUgZG5fY29tcAkJCV9fZG5fY29tcAorI2VuZGlmCisjZGVmaW5lIGRuX2NvdW50X2xhYmVscwkJX19kbl9jb3VudF9sYWJlbHMKKyNkZWZpbmUgZG5fc2tpcG5hbWUJCV9fZG5fc2tpcG5hbWUKKyNkZWZpbmUgZnBfcmVzc3RhdAkJX19mcF9yZXNzdGF0CisjZGVmaW5lIGxvY19hdG9uCQlfX2xvY19hdG9uCisjZGVmaW5lIGxvY19udG9hCQlfX2xvY19udG9hCisjZGVmaW5lIHBfY2RuYW1lCQlfX3BfY2RuYW1lCisjZGVmaW5lIHBfY2RubmFtZQkJX19wX2Nkbm5hbWUKKyNkZWZpbmUgcF9jbGFzcwkJCV9fcF9jbGFzcworI2RlZmluZSBwX2ZxbmFtZQkJX19wX2ZxbmFtZQorI2RlZmluZSBwX2Zxbm5hbWUJCV9fcF9mcW5uYW1lCisjZGVmaW5lIHBfb3B0aW9uCQlfX3Bfb3B0aW9uCisjZGVmaW5lIHBfc2Vjc3RvZGF0ZQkJX19wX3NlY3N0b2RhdGUKKyNkZWZpbmUgcF9zZWN0aW9uCQlfX3Bfc2VjdGlvbgorI2RlZmluZSBwX3RpbWUJCQlfX3BfdGltZQorI2RlZmluZSBwX3R5cGUJCQlfX3BfdHlwZQorI2RlZmluZSBwX3Jjb2RlCQkJX19wX3Jjb2RlCisjZGVmaW5lIHBfc29ja3VuCQlfX3Bfc29ja3VuCisjZGVmaW5lIHB1dGxvbmcJCQlfX3B1dGxvbmcKKyNkZWZpbmUgcHV0c2hvcnQJCV9fcHV0c2hvcnQKKyNkZWZpbmUgcmVzX2Rub2sJCV9fcmVzX2Rub2sKKyNkZWZpbmUgcmVzX2ZpbmR6b25lY3V0CQlfX3Jlc19maW5kem9uZWN1dAorI2RlZmluZSByZXNfZmluZHpvbmVjdXQyCV9fcmVzX2ZpbmR6b25lY3V0MgorI2RlZmluZSByZXNfaG5vawkJX19yZXNfaG5vaworI2RlZmluZSByZXNfaG9zdGFsaWFzCQlfX3Jlc19ob3N0YWxpYXMKKyNkZWZpbmUgcmVzX21haWxvawkJX19yZXNfbWFpbG9rCisjZGVmaW5lIHJlc19uYW1laW5xdWVyeQkJX19yZXNfbmFtZWlucXVlcnkKKyNkZWZpbmUgcmVzX25jbG9zZQkJX19yZXNfbmNsb3NlCisjZGVmaW5lIHJlc19uaW5pdAkJX19yZXNfbmluaXQKKyNkZWZpbmUgcmVzX25ta3F1ZXJ5CQlfX3Jlc19ubWtxdWVyeQorI2RlZmluZSByZXNfcHF1ZXJ5CQlfX3Jlc19wcXVlcnkKKyNkZWZpbmUgcmVzX25xdWVyeQkJX19yZXNfbnF1ZXJ5CisjZGVmaW5lIHJlc19ucXVlcnlkb21haW4JX19yZXNfbnF1ZXJ5ZG9tYWluCisjZGVmaW5lIHJlc19uc2VhcmNoCQlfX3Jlc19uc2VhcmNoCisjZGVmaW5lIHJlc19uc2VuZAkJX19yZXNfbnNlbmQKKyNkZWZpbmUgcmVzX25zZW5kc2lnbmVkCQlfX3Jlc19uc2VuZHNpZ25lZAorI2RlZmluZSByZXNfbmlzb3Vyc2VydmVyCV9fcmVzX25pc291cnNlcnZlcgorI2RlZmluZSByZXNfb3dub2sJCV9fcmVzX293bm9rCisjZGVmaW5lIHJlc19xdWVyaWVzbWF0Y2gJX19yZXNfcXVlcmllc21hdGNoCisjZGVmaW5lIHJlc19yYW5kb21pZAkJX19yZXNfcmFuZG9taWQKKyNkZWZpbmUgc3ltX250b3AJCV9fc3ltX250b3AKKyNkZWZpbmUgc3ltX250b3MJCV9fc3ltX250b3MKKyNkZWZpbmUgc3ltX3N0b24JCV9fc3ltX3N0b24KKyNkZWZpbmUgcmVzX25vcHQJCV9fcmVzX25vcHQKKyNkZWZpbmUgcmVzX25kZXN0cm95CQlfX3Jlc19uZGVzdHJveQorI2RlZmluZQlyZXNfbmFtZXRvY2xhc3MJCV9fcmVzX25hbWV0b2NsYXNzCisjZGVmaW5lCXJlc19uYW1ldG90eXBlCQlfX3Jlc19uYW1ldG90eXBlCisjZGVmaW5lCXJlc19zZXRzZXJ2ZXJzCQlfX3Jlc19zZXRzZXJ2ZXJzCisjZGVmaW5lCXJlc19nZXRzZXJ2ZXJzCQlfX3Jlc19nZXRzZXJ2ZXJzCisjZGVmaW5lCXJlc19idWlsZHByb3RvbGlzdAlfX3Jlc19idWlsZHByb3RvbGlzdAorI2RlZmluZQlyZXNfZGVzdHJveXByb3RvbGlzdAlfX3Jlc19kZXN0cm95cHJvdG9saXN0CisjZGVmaW5lCXJlc19kZXN0cm95c2VydmljZWxpc3QJX19yZXNfZGVzdHJveXNlcnZpY2VsaXN0CisjZGVmaW5lCXJlc19nZXRfbmliYmxlc3VmZml4CV9fcmVzX2dldF9uaWJibGVzdWZmaXgKKyNkZWZpbmUJcmVzX2dldF9uaWJibGVzdWZmaXgyCV9fcmVzX2dldF9uaWJibGVzdWZmaXgyCisjZGVmaW5lCXJlc19vdXJzZXJ2ZXJfcAkJX19yZXNfb3Vyc2VydmVyX3AKKyNkZWZpbmUJcmVzX3Byb3RvY29sbmFtZQlfX3Jlc19wcm90b2NvbG5hbWUKKyNkZWZpbmUJcmVzX3Byb3RvY29sbnVtYmVyCV9fcmVzX3Byb3RvY29sbnVtYmVyCisjZGVmaW5lCXJlc19zZW5kX3NldHFob29rCV9fcmVzX3NlbmRfc2V0cWhvb2sKKyNkZWZpbmUJcmVzX3NlbmRfc2V0cmhvb2sJX19yZXNfc2VuZF9zZXRyaG9vaworI2RlZmluZQlyZXNfc2VydmljZW5hbWUJCV9fcmVzX3NlcnZpY2VuYW1lCisjZGVmaW5lCXJlc19zZXJ2aWNlbnVtYmVyCV9fcmVzX3NlcnZpY2VudW1iZXIKK19fQkVHSU5fREVDTFMKK2ludAkJcmVzX2hub2soY29uc3QgY2hhciAqKTsKK2ludAkJcmVzX293bm9rKGNvbnN0IGNoYXIgKik7CitpbnQJCXJlc19tYWlsb2soY29uc3QgY2hhciAqKTsKK2ludAkJcmVzX2Rub2soY29uc3QgY2hhciAqKTsKK2ludAkJc3ltX3N0b24oY29uc3Qgc3RydWN0IHJlc19zeW0gKiwgY29uc3QgY2hhciAqLCBpbnQgKik7Citjb25zdCBjaGFyICoJc3ltX250b3MoY29uc3Qgc3RydWN0IHJlc19zeW0gKiwgaW50LCBpbnQgKik7Citjb25zdCBjaGFyICoJc3ltX250b3AoY29uc3Qgc3RydWN0IHJlc19zeW0gKiwgaW50LCBpbnQgKik7CisjaWZuZGVmIEFORFJPSURfQ0hBTkdFUworaW50CQliNjRfbnRvcCh1X2NoYXIgY29uc3QgKiwgc2l6ZV90LCBjaGFyICosIHNpemVfdCk7CitpbnQJCWI2NF9wdG9uKGNoYXIgY29uc3QgKiwgdV9jaGFyICosIHNpemVfdCk7CisjZW5kaWYKK2ludAkJbG9jX2F0b24oY29uc3QgY2hhciAqLCB1X2NoYXIgKik7Citjb25zdCBjaGFyICoJbG9jX250b2EoY29uc3QgdV9jaGFyICosIGNoYXIgKik7CitpbnQJCWRuX3NraXBuYW1lKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKik7Cit2b2lkCQlwdXRsb25nKHVpbnQzMl90LCB1X2NoYXIgKik7Cit2b2lkCQlwdXRzaG9ydCh1aW50MTZfdCwgdV9jaGFyICopOworI2lmbmRlZiBfX3VsdHJpeF9fCit1aW50MTZfdAlfZ2V0c2hvcnQoY29uc3QgdV9jaGFyICopOwordWludDMyX3QJX2dldGxvbmcoY29uc3QgdV9jaGFyICopOworI2VuZGlmCitjb25zdCBjaGFyICoJcF9jbGFzcyhpbnQpOworY29uc3QgY2hhciAqCXBfdGltZSh1aW50MzJfdCk7Citjb25zdCBjaGFyICoJcF90eXBlKGludCk7Citjb25zdCBjaGFyICoJcF9yY29kZShpbnQpOworX19MSUJDX0hJRERFTl9fIGNvbnN0IGNoYXIgKglwX3NvY2t1bih1bmlvbiByZXNfc29ja2FkZHJfdW5pb24sIGNoYXIgKiwgc2l6ZV90KTsKK2NvbnN0IHVfY2hhciAqCXBfY2RubmFtZShjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosIGludCwgRklMRSAqKTsKK2NvbnN0IHVfY2hhciAqCXBfY2RuYW1lKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgRklMRSAqKTsKK2NvbnN0IHVfY2hhciAqCXBfZnFubmFtZShjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosCisJCQkgICAgICAgaW50LCBjaGFyICosIGludCk7Citjb25zdCB1X2NoYXIgKglwX2ZxbmFtZShjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosIEZJTEUgKik7Citjb25zdCBjaGFyICoJcF9vcHRpb24odV9sb25nKTsKK2NoYXIgKgkJcF9zZWNzdG9kYXRlKHVfbG9uZyk7CitpbnQJCWRuX2NvdW50X2xhYmVscyhjb25zdCBjaGFyICopOwordV9pbnQJCXJlc19yYW5kb21pZCh2b2lkKTsKK2ludAkJcmVzX25hbWVpbnF1ZXJ5KGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGNvbnN0IHVfY2hhciAqLAorCQkJCSAgICAgY29uc3QgdV9jaGFyICopOworaW50CQlyZXNfcXVlcmllc21hdGNoKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwKKwkJCQkgICAgICBjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICopOworX19MSUJDX0hJRERFTl9fIGNvbnN0IGNoYXIgKglwX3NlY3Rpb24oaW50LCBpbnQpOworLyogVGhpbmdzIGludm9sdmluZyBhIHJlc29sdmVyIGNvbnRleHQuICovCitpbnQJCXJlc19uaW5pdChyZXNfc3RhdGUpOworaW50CQlyZXNfbmlzb3Vyc2VydmVyKGNvbnN0IHJlc19zdGF0ZSwgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopOwordm9pZAkJZnBfcmVzc3RhdChjb25zdCByZXNfc3RhdGUsIEZJTEUgKik7CitfX0xJQkNfSElEREVOX18gdm9pZAkJcmVzX3BxdWVyeShjb25zdCByZXNfc3RhdGUsIGNvbnN0IHVfY2hhciAqLCBpbnQsIEZJTEUgKik7Citjb25zdCBjaGFyICoJcmVzX2hvc3RhbGlhcyhjb25zdCByZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpOworaW50CQlyZXNfbnF1ZXJ5KHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBpbnQsIGludCwgdV9jaGFyICosIGludCk7CitpbnQJCXJlc19uc2VhcmNoKHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBpbnQsIGludCwgdV9jaGFyICosIGludCk7CitpbnQJCXJlc19ucXVlcnlkb21haW4ocmVzX3N0YXRlLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKKwkJCQkgICAgICBpbnQsIGludCwgdV9jaGFyICosIGludCk7CitpbnQJCXJlc19ubWtxdWVyeShyZXNfc3RhdGUsIGludCwgY29uc3QgY2hhciAqLCBpbnQsIGludCwKKwkJCQkgIGNvbnN0IHVfY2hhciAqLCBpbnQsIGNvbnN0IHVfY2hhciAqLAorCQkJCSAgdV9jaGFyICosIGludCk7CitpbnQJCXJlc19uc2VuZChyZXNfc3RhdGUsIGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLCBpbnQpOworaW50CQlyZXNfbnNlbmRzaWduZWQocmVzX3N0YXRlLCBjb25zdCB1X2NoYXIgKiwgaW50LAorCQkJCSAgICAgbnNfdHNpZ19rZXkgKiwgdV9jaGFyICosIGludCk7CitpbnQJCXJlc19maW5kem9uZWN1dChyZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgbnNfY2xhc3MsIGludCwKKwkJCQkgICAgIGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgaW5fYWRkciAqLCBpbnQpOworaW50CQlyZXNfZmluZHpvbmVjdXQyKHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBuc19jbGFzcywgaW50LAorCQkJCSAgICAgIGNoYXIgKiwgc2l6ZV90LAorCQkJCSAgICAgIHVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiAqLCBpbnQpOwordm9pZAkJcmVzX25jbG9zZShyZXNfc3RhdGUpOworX19MSUJDX0hJRERFTl9fIGludAkJcmVzX25vcHQocmVzX3N0YXRlLCBpbnQsIHVfY2hhciAqLCBpbnQsIGludCk7Cit2b2lkCQlyZXNfc2VuZF9zZXRxaG9vayhyZXNfc2VuZF9xaG9vayk7Cit2b2lkCQlyZXNfc2VuZF9zZXRyaG9vayhyZXNfc2VuZF9yaG9vayk7CitfX0xJQkNfSElEREVOX18gaW50CQlfX3Jlc192aW5pdChyZXNfc3RhdGUsIGludCk7Cit2b2lkCQlyZXNfZGVzdHJveXNlcnZpY2VsaXN0KHZvaWQpOworY29uc3QgY2hhciAqCXJlc19zZXJ2aWNlbmFtZSh1aW50MTZfdCwgY29uc3QgY2hhciAqKTsKK2NvbnN0IGNoYXIgKglyZXNfcHJvdG9jb2xuYW1lKGludCk7Cit2b2lkCQlyZXNfZGVzdHJveXByb3RvbGlzdCh2b2lkKTsKK3ZvaWQJCXJlc19idWlsZHByb3RvbGlzdCh2b2lkKTsKK19fTElCQ19ISURERU5fXyBjb25zdCBjaGFyICoJcmVzX2dldF9uaWJibGVzdWZmaXgocmVzX3N0YXRlKTsKK19fTElCQ19ISURERU5fXyBjb25zdCBjaGFyICoJcmVzX2dldF9uaWJibGVzdWZmaXgyKHJlc19zdGF0ZSk7CitfX0xJQkNfSElEREVOX18gdm9pZAkJcmVzX25kZXN0cm95KHJlc19zdGF0ZSk7CitfX0xJQkNfSElEREVOX18gdWludDE2X3QJcmVzX25hbWV0b2NsYXNzKGNvbnN0IGNoYXIgKiwgaW50ICopOworX19MSUJDX0hJRERFTl9fIHVpbnQxNl90CXJlc19uYW1ldG90eXBlKGNvbnN0IGNoYXIgKiwgaW50ICopOworX19MSUJDX0hJRERFTl9fIHZvaWQJCXJlc19zZXRzZXJ2ZXJzKHJlc19zdGF0ZSwKKwkJCQkgICAgY29uc3QgdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uICosIGludCk7CitfX0xJQkNfSElEREVOX18gaW50CQlyZXNfZ2V0c2VydmVycyhyZXNfc3RhdGUsCisJCQkJICAgIHVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiAqLCBpbnQpOworCitfX0xJQkNfSElEREVOX18gdm9pZCByZXNfc2V0bmV0aWQocmVzX3N0YXRlLCB1bnNpZ25lZCk7CitfX0xJQkNfSElEREVOX18gdm9pZCByZXNfc2V0bWFyayhyZXNfc3RhdGUsIHVuc2lnbmVkKTsKK3VfaW50ICByZXNfcmFuZG9taWQodm9pZCk7CisKKyNpZmRlZiBfX2kzODZfXworIyBkZWZpbmUgX19zb2NrZXRjYWxsIGV4dGVybiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKQorI2Vsc2UKKyMgZGVmaW5lIF9fc29ja2V0Y2FsbCBleHRlcm4KKyNlbmRpZgorCitfX3NvY2tldGNhbGwgaW50IF9fY29ubmVjdChpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCk7CisKKyN1bmRlZiBfX3NvY2tldGNhbGwKKworX19FTkRfREVDTFMKKworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKKworI2VuZGlmIC8qICFfUkVTT0xWX1BSSVZBVEVfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9yZXNvbHZfc3RhdGljLmggYi9saWJjL2Rucy9pbmNsdWRlL3Jlc29sdl9zdGF0aWMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9wcml2YXRlL3Jlc29sdl9zdGF0aWMuaApyZW5hbWUgdG8gbGliYy9kbnMvaW5jbHVkZS9yZXNvbHZfc3RhdGljLmgKZGlmZiAtLWdpdCBhL2xpYmMvZG5zL25hbWVzZXIvbnNfbmFtZS5jIGIvbGliYy9kbnMvbmFtZXNlci9uc19uYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3NTlhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL25hbWVzZXIvbnNfbmFtZS5jCkBAIC0wLDAgKzEsMTE3NSBAQAorLyoJJE5ldEJTRDogbnNfbmFtZS5jLHYgMS45IDIwMTIvMDMvMTMgMjE6MTM6MzkgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZm5kZWYgbGludAorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogbnNfbmFtZS5jLHYgMS4xMSAyMDA5LzAxLzIzIDE5OjU5OjE2IGVhY2ggRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBuc19uYW1lLmMsdiAxLjkgMjAxMi8wMy8xMyAyMToxMzozOSBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpZmRlZiBTUFJJTlRGX0NIQVIKKyMgZGVmaW5lIFNQUklOVEYoeCkgKChpbnQpc3RybGVuKHNwcmludGYvKioveCkpCisjZWxzZQorIyBkZWZpbmUgU1BSSU5URih4KSAoc3ByaW50ZiB4KQorI2VuZGlmCisKKyNkZWZpbmUgTlNfVFlQRV9FTFQJCQkweDQwIC8qIEVETlMwIGV4dGVuZGVkIGxhYmVsIHR5cGUgKi8KKyNkZWZpbmUgRE5TX0xBQkVMVFlQRV9CSVRTVFJJTkcJCTB4NDEKKworLyogRGF0YS4gKi8KKworc3RhdGljIGNvbnN0IGNoYXIJZGlnaXRzW10gPSAiMDEyMzQ1Njc4OSI7CisKK3N0YXRpYyBjb25zdCBjaGFyIGRpZ2l0dmFsdWVbMjU2XSA9IHsKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJLyoxNiovCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qMzIqLworCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjQ4Ki8KKwkgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyo2NCovCisJLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qODAqLworCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjk2Ki8KKwktMSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyoxMTIqLworCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjEyOCovCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qMjU2Ki8KK307CisKKy8qIEZvcndhcmQuICovCisKK3N0YXRpYyBpbnQJCXNwZWNpYWwoaW50KTsKK3N0YXRpYyBpbnQJCXByaW50YWJsZShpbnQpOworc3RhdGljIGludAkJZG5fZmluZChjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosCisJCQkJY29uc3QgdV9jaGFyICogY29uc3QgKiwKKwkJCQljb25zdCB1X2NoYXIgKiBjb25zdCAqKTsKK3N0YXRpYyBpbnQJCWVuY29kZV9iaXRzcmluZyhjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICosCisJCQkJCXVuc2lnbmVkIGNoYXIgKiosIHVuc2lnbmVkIGNoYXIgKiosCisJCQkJCXVuc2lnbmVkIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgaW50CQlsYWJlbGxlbihjb25zdCB1X2NoYXIgKik7CitzdGF0aWMgaW50CQlkZWNvZGVfYml0c3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiosCisJCQkJCSBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qIFB1YmxpYy4gKi8KKworLyoKKyAqCUNvbnZlcnQgYW4gZW5jb2RlZCBkb21haW4gbmFtZSB0byBwcmludGFibGUgYXNjaWkgYXMgcGVyIFJGQzEwMzUuCisgKiByZXR1cm46CisgKglOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byBidWZmZXIsIG9yIC0xICh3aXRoIGVycm5vIHNldCkKKyAqCisgKiBub3RlczoKKyAqCVRoZSByb290IGlzIHJldHVybmVkIGFzICIuIgorICoJQWxsIG90aGVyIGRvbWFpbnMgYXJlIHJldHVybmVkIGluIG5vbiBhYnNvbHV0ZSBmb3JtCisgKi8KK2ludAorbnNfbmFtZV9udG9wKGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBkc3RzaXopCit7CisJY29uc3QgdV9jaGFyICpjcDsKKwljaGFyICpkbiwgKmVvbTsKKwl1X2NoYXIgYzsKKwl1X2ludCBuOworCWludCBsOworCisJY3AgPSBzcmM7CisJZG4gPSBkc3Q7CisJZW9tID0gZHN0ICsgZHN0c2l6OworCisJd2hpbGUgKChuID0gKmNwKyspICE9IDApIHsKKwkJaWYgKChuICYgTlNfQ01QUlNGTEdTKSA9PSBOU19DTVBSU0ZMR1MpIHsKKwkJCS8qIFNvbWUga2luZCBvZiBjb21wcmVzc2lvbiBwb2ludGVyLiAqLworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCWlmIChkbiAhPSBkc3QpIHsKKwkJCWlmIChkbiA+PSBlb20pIHsKKwkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJKmRuKysgPSAnLic7CisJCX0KKwkJaWYgKChsID0gbGFiZWxsZW4oY3AgLSAxKSkgPCAwKSB7CisJCQllcnJubyA9IEVNU0dTSVpFOyAvKiBYWFggKi8KKwkJCXJldHVybigtMSk7CisJCX0KKwkJaWYgKGRuICsgbCA+PSBlb20pIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlpZiAoKG4gJiBOU19DTVBSU0ZMR1MpID09IE5TX1RZUEVfRUxUKSB7CisJCQlpbnQgbTsKKworCQkJaWYgKG4gIT0gRE5TX0xBQkVMVFlQRV9CSVRTVFJJTkcpIHsKKwkJCQkvKiBYWFg6IGxhYmVsbGVuIHNob3VsZCByZWplY3QgdGhpcyBjYXNlICovCisJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJcmV0dXJuKC0xKTsKKwkJCX0KKwkJCWlmICgobSA9IGRlY29kZV9iaXRzdHJpbmcoJmNwLCBkbiwgZW9tKSkgPCAwKQorCQkJeworCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJcmV0dXJuKC0xKTsKKwkJCX0KKwkJCWRuICs9IG07CisJCQljb250aW51ZTsKKwkJfQorCQlmb3IgKDsgbCA+IDA7IGwtLSkgeworCQkJYyA9ICpjcCsrOworCQkJaWYgKHNwZWNpYWwoYykpIHsKKwkJCQlpZiAoZG4gKyAxID49IGVvbSkgeworCQkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl9CisJCQkJKmRuKysgPSAnXFwnOworCQkJCSpkbisrID0gKGNoYXIpYzsKKwkJCX0gZWxzZSBpZiAoIXByaW50YWJsZShjKSkgeworCQkJCWlmIChkbiArIDMgPj0gZW9tKSB7CisJCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJCXJldHVybiAoLTEpOworCQkJCX0KKwkJCQkqZG4rKyA9ICdcXCc7CisJCQkJKmRuKysgPSBkaWdpdHNbYyAvIDEwMF07CisJCQkJKmRuKysgPSBkaWdpdHNbKGMgJSAxMDApIC8gMTBdOworCQkJCSpkbisrID0gZGlnaXRzW2MgJSAxMF07CisJCQl9IGVsc2UgeworCQkJCWlmIChkbiA+PSBlb20pIHsKKwkJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJfQorCQkJCSpkbisrID0gKGNoYXIpYzsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZG4gPT0gZHN0KSB7CisJCWlmIChkbiA+PSBlb20pIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQkqZG4rKyA9ICcuJzsKKwl9CisJaWYgKGRuID49IGVvbSkgeworCQllcnJubyA9IEVNU0dTSVpFOworCQlyZXR1cm4gKC0xKTsKKwl9CisJKmRuKysgPSAnXDAnOworCV9ESUFHQVNTRVJUKF9fdHlwZV9maXQoaW50LCBkbiAtIGRzdCkpOworCXJldHVybiAoaW50KShkbiAtIGRzdCk7Cit9CisKKy8qCisgKglDb252ZXJ0IGEgYXNjaWkgc3RyaW5nIGludG8gYW4gZW5jb2RlZCBkb21haW4gbmFtZSBhcyBwZXIgUkZDMTAzNS4KKyAqCisgKiByZXR1cm46CisgKgorICoJLTEgaWYgaXQgZmFpbHMKKyAqCTEgaWYgc3RyaW5nIHdhcyBmdWxseSBxdWFsaWZpZWQKKyAqCTAgaXMgc3RyaW5nIHdhcyBub3QgZnVsbHkgcXVhbGlmaWVkCisgKgorICogbm90ZXM6CisgKglFbmZvcmNlcyBsYWJlbCBhbmQgZG9tYWluIGxlbmd0aCBsaW1pdHMuCisgKi8KK2ludAorbnNfbmFtZV9wdG9uKGNvbnN0IGNoYXIgKnNyYywgdV9jaGFyICpkc3QsIHNpemVfdCBkc3RzaXopIHsKKwlyZXR1cm4gKG5zX25hbWVfcHRvbjIoc3JjLCBkc3QsIGRzdHNpeiwgTlVMTCkpOworfQorCisvKgorICogbnNfbmFtZV9wdG9uMihzcmMsIGRzdCwgZHN0c2l6LCAqZHN0bGVuKQorICoJQ29udmVydCBhIGFzY2lpIHN0cmluZyBpbnRvIGFuIGVuY29kZWQgZG9tYWluIG5hbWUgYXMgcGVyIFJGQzEwMzUuCisgKiByZXR1cm46CisgKgktMSBpZiBpdCBmYWlscworICoJMSBpZiBzdHJpbmcgd2FzIGZ1bGx5IHF1YWxpZmllZAorICoJMCBpcyBzdHJpbmcgd2FzIG5vdCBmdWxseSBxdWFsaWZpZWQKKyAqIHNpZGUgZWZmZWN0czoKKyAqCWZpbGxzIGluICpkc3RsZW4gKGlmIG5vbi1OVUxMKQorICogbm90ZXM6CisgKglFbmZvcmNlcyBsYWJlbCBhbmQgZG9tYWluIGxlbmd0aCBsaW1pdHMuCisgKi8KKworaW50Cituc19uYW1lX3B0b24yKGNvbnN0IGNoYXIgKnNyYywgdV9jaGFyICpkc3QsIHNpemVfdCBkc3RzaXosIHNpemVfdCAqZHN0bGVuKSB7CisJdV9jaGFyICpsYWJlbCwgKmJwLCAqZW9tOworCWludCBjLCBuLCBlc2NhcGVkLCBlID0gMDsKKwljaGFyICpjcDsKKworCWVzY2FwZWQgPSAwOworCWJwID0gZHN0OworCWVvbSA9IGRzdCArIGRzdHNpejsKKwlsYWJlbCA9IGJwKys7CisKKwl3aGlsZSAoKGMgPSAqc3JjKyspICE9IDApIHsKKwkJaWYgKGVzY2FwZWQpIHsKKwkJCWlmIChjID09ICdbJykgeyAvKiBzdGFydCBhIGJpdCBzdHJpbmcgbGFiZWwgKi8KKwkJCQlpZiAoKGNwID0gc3RyY2hyKHNyYywgJ10nKSkgPT0gTlVMTCkgeworCQkJCQllcnJubyA9IEVJTlZBTDsgLyogPz8/ICovCisJCQkJCXJldHVybigtMSk7CisJCQkJfQorCQkJCWlmICgoZSA9IGVuY29kZV9iaXRzcmluZygmc3JjLCBjcCArIDIsCisJCQkJCQkJICZsYWJlbCwgJmJwLCBlb20pKQorCQkJCSAgICAhPSAwKSB7CisJCQkJCWVycm5vID0gZTsKKwkJCQkJcmV0dXJuKC0xKTsKKwkJCQl9CisJCQkJZXNjYXBlZCA9IDA7CisJCQkJbGFiZWwgPSBicCsrOworCQkJCWlmICgoYyA9ICpzcmMrKykgPT0gMCkKKwkJCQkJZ290byBkb25lOworCQkJCWVsc2UgaWYgKGMgIT0gJy4nKSB7CisJCQkJCWVycm5vID0gRUlOVkFMOworCQkJCQlyZXR1cm4oLTEpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWVsc2UgaWYgKChjcCA9IHN0cmNocihkaWdpdHMsIGMpKSAhPSBOVUxMKSB7CisJCQkJbiA9IChpbnQpKGNwIC0gZGlnaXRzKSAqIDEwMDsKKwkJCQlpZiAoKGMgPSAqc3JjKyspID09IDAgfHwKKwkJCQkgICAgKGNwID0gc3RyY2hyKGRpZ2l0cywgYykpID09IE5VTEwpIHsKKwkJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJfQorCQkJCW4gKz0gKGludCkoY3AgLSBkaWdpdHMpICogMTA7CisJCQkJaWYgKChjID0gKnNyYysrKSA9PSAwIHx8CisJCQkJICAgIChjcCA9IHN0cmNocihkaWdpdHMsIGMpKSA9PSBOVUxMKSB7CisJCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJCXJldHVybiAoLTEpOworCQkJCX0KKwkJCQluICs9IChpbnQpKGNwIC0gZGlnaXRzKTsKKwkJCQlpZiAobiA+IDI1NSkgeworCQkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl9CisJCQkJYyA9IG47CisJCQl9CisJCQllc2NhcGVkID0gMDsKKwkJfSBlbHNlIGlmIChjID09ICdcXCcpIHsKKwkJCWVzY2FwZWQgPSAxOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoYyA9PSAnLicpIHsKKwkJCWMgPSAoaW50KShicCAtIGxhYmVsIC0gMSk7CisJCQlpZiAoKGMgJiBOU19DTVBSU0ZMR1MpICE9IDApIHsJLyogTGFiZWwgdG9vIGJpZy4gKi8KKwkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJaWYgKGxhYmVsID49IGVvbSkgeworCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQkqbGFiZWwgPSBjOworCQkJLyogRnVsbHkgcXVhbGlmaWVkID8gKi8KKwkJCWlmICgqc3JjID09ICdcMCcpIHsKKwkJCQlpZiAoYyAhPSAwKSB7CisJCQkJCWlmIChicCA+PSBlb20pIHsKKwkJCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQkJfQorCQkJCQkqYnArKyA9ICdcMCc7CisJCQkJfQorCQkJCWlmICgoYnAgLSBkc3QpID4gTUFYQ0ROQU1FKSB7CisJCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJCXJldHVybiAoLTEpOworCQkJCX0KKwkJCQlpZiAoZHN0bGVuICE9IE5VTEwpCisJCQkJCSpkc3RsZW4gPSAoYnAgLSBkc3QpOworCQkJCXJldHVybiAoMSk7CisJCQl9CisJCQlpZiAoYyA9PSAwIHx8ICpzcmMgPT0gJy4nKSB7CisJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCWxhYmVsID0gYnArKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChicCA+PSBlb20pIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQkqYnArKyA9ICh1X2NoYXIpYzsKKwl9CisJYyA9IChpbnQpKGJwIC0gbGFiZWwgLSAxKTsKKwlpZiAoKGMgJiBOU19DTVBSU0ZMR1MpICE9IDApIHsJCS8qIExhYmVsIHRvbyBiaWcuICovCisJCWVycm5vID0gRU1TR1NJWkU7CisJCXJldHVybiAoLTEpOworCX0KKyAgZG9uZToKKwlpZiAobGFiZWwgPj0gZW9tKSB7CisJCWVycm5vID0gRU1TR1NJWkU7CisJCXJldHVybiAoLTEpOworCX0KKwkqbGFiZWwgPSBjOworCWlmIChjICE9IDApIHsKKwkJaWYgKGJwID49IGVvbSkgeworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCSpicCsrID0gMDsKKwl9CisJaWYgKChicCAtIGRzdCkgPiBNQVhDRE5BTUUpIHsJLyogc3JjIHRvbyBiaWcgKi8KKwkJZXJybm8gPSBFTVNHU0laRTsKKwkJcmV0dXJuICgtMSk7CisJfQorCWlmIChkc3RsZW4gIT0gTlVMTCkKKwkJKmRzdGxlbiA9IChicCAtIGRzdCk7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqCUNvbnZlcnQgYSBuZXR3b3JrIHN0cmluZ3MgbGFiZWxzIGludG8gYWxsIGxvd2VyY2FzZS4KKyAqCisgKiByZXR1cm46CisgKglOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byBidWZmZXIsIG9yIC0xICh3aXRoIGVycm5vIHNldCkKKyAqCisgKiBub3RlczoKKyAqCUVuZm9yY2VzIGxhYmVsIGFuZCBkb21haW4gbGVuZ3RoIGxpbWl0cy4KKyAqLworCitpbnQKK25zX25hbWVfbnRvbChjb25zdCB1X2NoYXIgKnNyYywgdV9jaGFyICpkc3QsIHNpemVfdCBkc3RzaXopCit7CisJY29uc3QgdV9jaGFyICpjcDsKKwl1X2NoYXIgKmRuLCAqZW9tOworCXVfY2hhciBjOworCXVfaW50IG47CisJaW50IGw7CisKKwljcCA9IHNyYzsKKwlkbiA9IGRzdDsKKwllb20gPSBkc3QgKyBkc3RzaXo7CisKKwlpZiAoZG4gPj0gZW9tKSB7CisJCWVycm5vID0gRU1TR1NJWkU7CisJCXJldHVybiAoLTEpOworCX0KKwl3aGlsZSAoKG4gPSAqY3ArKykgIT0gMCkgeworCQlpZiAoKG4gJiBOU19DTVBSU0ZMR1MpID09IE5TX0NNUFJTRkxHUykgeworCQkJLyogU29tZSBraW5kIG9mIGNvbXByZXNzaW9uIHBvaW50ZXIuICovCisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJKmRuKysgPSBuOworCQlpZiAoKGwgPSBsYWJlbGxlbihjcCAtIDEpKSA8IDApIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlpZiAoZG4gKyBsID49IGVvbSkgeworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCWZvciAoOyBsID4gMDsgbC0tKSB7CisJCQljID0gKmNwKys7CisJCQlpZiAoaXNhc2NpaShjKSAmJiBpc3VwcGVyKGMpKQorCQkJCSpkbisrID0gdG9sb3dlcihjKTsKKwkJCWVsc2UKKwkJCQkqZG4rKyA9IGM7CisJCX0KKwl9CisJKmRuKysgPSAnXDAnOworCV9ESUFHQVNTRVJUKF9fdHlwZV9maXQoaW50LCBkbiAtIGRzdCkpOworCXJldHVybiAoaW50KShkbiAtIGRzdCk7Cit9CisKKy8qCisgKglVbnBhY2sgYSBkb21haW4gbmFtZSBmcm9tIGEgbWVzc2FnZSwgc291cmNlIG1heSBiZSBjb21wcmVzc2VkLgorICoKKyAqIHJldHVybjoKKyAqCS0xIGlmIGl0IGZhaWxzLCBvciBjb25zdW1lZCBvY3RldHMgaWYgaXQgc3VjY2VlZHMuCisgKi8KK2ludAorbnNfbmFtZV91bnBhY2soY29uc3QgdV9jaGFyICptc2csIGNvbnN0IHVfY2hhciAqZW9tLCBjb25zdCB1X2NoYXIgKnNyYywKKwkgICAgICAgdV9jaGFyICpkc3QsIHNpemVfdCBkc3RzaXopCit7CisJcmV0dXJuIChuc19uYW1lX3VucGFjazIobXNnLCBlb20sIHNyYywgZHN0LCBkc3RzaXosIE5VTEwpKTsKK30KKworLyoKKyAqIG5zX25hbWVfdW5wYWNrMihtc2csIGVvbSwgc3JjLCBkc3QsIGRzdHNpeiwgKmRzdGxlbikKKyAqCVVucGFjayBhIGRvbWFpbiBuYW1lIGZyb20gYSBtZXNzYWdlLCBzb3VyY2UgbWF5IGJlIGNvbXByZXNzZWQuCisgKiByZXR1cm46CisgKgktMSBpZiBpdCBmYWlscywgb3IgY29uc3VtZWQgb2N0ZXRzIGlmIGl0IHN1Y2NlZWRzLgorICogc2lkZSBlZmZlY3Q6CisgKglmaWxscyBpbiAqZHN0bGVuIChpZiBub24tTlVMTCkuCisgKi8KK2ludAorbnNfbmFtZV91bnBhY2syKGNvbnN0IHVfY2hhciAqbXNnLCBjb25zdCB1X2NoYXIgKmVvbSwgY29uc3QgdV9jaGFyICpzcmMsCisJCXVfY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6LCBzaXplX3QgKmRzdGxlbikKK3sKKwljb25zdCB1X2NoYXIgKnNyY3AsICpkc3RsaW07CisJdV9jaGFyICpkc3RwOworCWludCBuLCBsZW4sIGNoZWNrZWQsIGw7CisKKwlsZW4gPSAtMTsKKwljaGVja2VkID0gMDsKKwlkc3RwID0gZHN0OworCXNyY3AgPSBzcmM7CisJZHN0bGltID0gZHN0ICsgZHN0c2l6OworCWlmIChzcmNwIDwgbXNnIHx8IHNyY3AgPj0gZW9tKSB7CisJCWVycm5vID0gRU1TR1NJWkU7CisJCXJldHVybiAoLTEpOworCX0KKwkvKiBGZXRjaCBuZXh0IGxhYmVsIGluIGRvbWFpbiBuYW1lLiAqLworCXdoaWxlICgobiA9ICpzcmNwKyspICE9IDApIHsKKwkJLyogQ2hlY2sgZm9yIGluZGlyZWN0aW9uLiAqLworCQlzd2l0Y2ggKG4gJiBOU19DTVBSU0ZMR1MpIHsKKwkJY2FzZSAwOgorCQljYXNlIE5TX1RZUEVfRUxUOgorCQkJLyogTGltaXQgY2hlY2tzLiAqLworCQkJaWYgKChsID0gbGFiZWxsZW4oc3JjcCAtIDEpKSA8IDApIHsKKwkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCXJldHVybigtMSk7CisJCQl9CisJCQlpZiAoZHN0cCArIGwgKyAxID49IGRzdGxpbSB8fCBzcmNwICsgbCA+PSBlb20pIHsKKwkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJY2hlY2tlZCArPSBsICsgMTsKKwkJCSpkc3RwKysgPSBuOworCQkJbWVtY3B5KGRzdHAsIHNyY3AsIChzaXplX3QpbCk7CisJCQlkc3RwICs9IGw7CisJCQlzcmNwICs9IGw7CisJCQlicmVhazsKKworCQljYXNlIE5TX0NNUFJTRkxHUzoKKwkJCWlmIChzcmNwID49IGVvbSkgeworCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQlpZiAobGVuIDwgMCkgeworCQkJCV9ESUFHQVNTRVJUKF9fdHlwZV9maXQoaW50LCBzcmNwIC0gc3JjICsgMSkpOworCQkJCWxlbiA9IChpbnQpKHNyY3AgLSBzcmMgKyAxKTsKKwkJCX0KKwkJCS8vIEJFR0lOIGFuZHJvaWQtY2hhbmdlZDogc2FmZXIgcG9pbnRlciBvdmVyZmxvdyBjaGVjaworCQkJbCA9ICgoKG4gJiAweDNmKSA8PCA4KSB8ICgqc3JjcCAmIDB4ZmYpKTsKKwkJCWlmIChsID49IGVvbSAtIG1zZykgeyAgLyogT3V0IG9mIHJhbmdlLiAqLworCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQlzcmNwID0gbXNnICsgbDsKKwkJCS8vIEVORCBhbmRyb2lkLWNoYW5nZWQKKwkJCWNoZWNrZWQgKz0gMjsKKwkJCS8qCisJCQkgKiBDaGVjayBmb3IgbG9vcHMgaW4gdGhlIGNvbXByZXNzZWQgbmFtZTsKKwkJCSAqIGlmIHdlJ3ZlIGxvb2tlZCBhdCB0aGUgd2hvbGUgbWVzc2FnZSwKKwkJCSAqIHRoZXJlIG11c3QgYmUgYSBsb29wLgorCQkJICovCisJCQlpZiAoY2hlY2tlZCA+PSBlb20gLSBtc2cpIHsKKwkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsJCQkvKiBmbGFnIGVycm9yICovCisJCX0KKwl9CisJKmRzdHArKyA9IDA7CisJaWYgKGRzdGxlbiAhPSBOVUxMKQorCQkqZHN0bGVuID0gZHN0cCAtIGRzdDsKKwlpZiAobGVuIDwgMCkgeworCQlfRElBR0FTU0VSVChfX3R5cGVfZml0KGludCwgc3JjcCAtIHNyYykpOworCQlsZW4gPSAoaW50KShzcmNwIC0gc3JjKTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworLyoKKyAqCVBhY2sgZG9tYWluIG5hbWUgJ2RvbWFpbicgaW50byAnY29tcF9kbicuCisgKgorICogcmV0dXJuOgorICoJU2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBuYW1lLCBvciAtMS4KKyAqCisgKiBub3RlczoKKyAqCSdkbnB0cnMnIGlzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHByZXZpb3VzIGNvbXByZXNzZWQgbmFtZXMuCisgKglkbnB0cnNbMF0gaXMgYSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1lc3NhZ2UuIFRoZSBhcnJheQorICoJZW5kcyB3aXRoIE5VTEwuCisgKgknbGFzdGRucHRyJyBpcyBhIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkgcG9pbnRlZCB0bworICoJYnkgJ2RucHRycycuCisgKgorICogU2lkZSBlZmZlY3RzOgorICoJVGhlIGxpc3Qgb2YgcG9pbnRlcnMgaW4gZG5wdHJzIGlzIHVwZGF0ZWQgZm9yIGxhYmVscyBpbnNlcnRlZCBpbnRvCisgKgl0aGUgbWVzc2FnZSBhcyB3ZSBjb21wcmVzcyB0aGUgbmFtZS4gIElmICdkbnB0cicgaXMgTlVMTCwgd2UgZG9uJ3QKKyAqCXRyeSB0byBjb21wcmVzcyBuYW1lcy4gSWYgJ2xhc3RkbnB0cicgaXMgTlVMTCwgd2UgZG9uJ3QgdXBkYXRlIHRoZQorICoJbGlzdC4KKyAqLworaW50Cituc19uYW1lX3BhY2soY29uc3QgdV9jaGFyICpzcmMsIHVfY2hhciAqZHN0LCBpbnQgZHN0c2l6LAorCSAgICAgY29uc3QgdV9jaGFyICoqZG5wdHJzLCBjb25zdCB1X2NoYXIgKipsYXN0ZG5wdHIpCit7CisJdV9jaGFyICpkc3RwOworCWNvbnN0IHVfY2hhciAqKmNwcCwgKipscHAsICplb2IsICptc2c7CisJY29uc3QgdV9jaGFyICpzcmNwOworCWludCBuLCBsLCBmaXJzdCA9IDE7CisKKwlzcmNwID0gc3JjOworCWRzdHAgPSBkc3Q7CisJZW9iID0gZHN0cCArIGRzdHNpejsKKwlscHAgPSBjcHAgPSBOVUxMOworCWlmIChkbnB0cnMgIT0gTlVMTCkgeworCQlpZiAoKG1zZyA9ICpkbnB0cnMrKykgIT0gTlVMTCkgeworCQkJZm9yIChjcHAgPSBkbnB0cnM7ICpjcHAgIT0gTlVMTDsgY3BwKyspCisJCQkJY29udGludWU7CisJCQlscHAgPSBjcHA7CS8qIGVuZCBvZiBsaXN0IHRvIHNlYXJjaCAqLworCQl9CisJfSBlbHNlCisJCW1zZyA9IE5VTEw7CisKKwkvKiBtYWtlIHN1cmUgdGhlIGRvbWFpbiB3ZSBhcmUgYWJvdXQgdG8gYWRkIGlzIGxlZ2FsICovCisJbCA9IDA7CisJZG8geworCQlpbnQgbDA7CisKKwkJbiA9ICpzcmNwOworCQlpZiAoKG4gJiBOU19DTVBSU0ZMR1MpID09IE5TX0NNUFJTRkxHUykgeworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCWlmICgobDAgPSBsYWJlbGxlbihzcmNwKSkgPCAwKSB7CisJCQllcnJubyA9IEVJTlZBTDsKKwkJCXJldHVybigtMSk7CisJCX0KKwkJbCArPSBsMCArIDE7CisJCWlmIChsID4gTUFYQ0ROQU1FKSB7CisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJc3JjcCArPSBsMCArIDE7CisJfSB3aGlsZSAobiAhPSAwKTsKKworCS8qIGZyb20gaGVyZSBvbiB3ZSBuZWVkIHRvIHJlc2V0IGNvbXByZXNzaW9uIHBvaW50ZXIgYXJyYXkgb24gZXJyb3IgKi8KKwlzcmNwID0gc3JjOworCWRvIHsKKwkJLyogTG9vayB0byBzZWUgaWYgd2UgY2FuIHVzZSBwb2ludGVycy4gKi8KKwkJbiA9ICpzcmNwOworCQlpZiAobiAhPSAwICYmIG1zZyAhPSBOVUxMKSB7CisJCQlsID0gZG5fZmluZChzcmNwLCBtc2csIChjb25zdCB1X2NoYXIgKiBjb25zdCAqKWRucHRycywKKwkJCQkgICAgKGNvbnN0IHVfY2hhciAqIGNvbnN0ICopbHBwKTsKKwkJCWlmIChsID49IDApIHsKKwkJCQlpZiAoZHN0cCArIDEgPj0gZW9iKSB7CisJCQkJCWdvdG8gY2xlYW51cDsKKwkJCQl9CisJCQkJKmRzdHArKyA9ICgodV9pbnQzMl90KWwgPj4gOCkgfCBOU19DTVBSU0ZMR1M7CisJCQkJKmRzdHArKyA9IGwgJSAyNTY7CisJCQkJX0RJQUdBU1NFUlQoX190eXBlX2ZpdChpbnQsIGRzdHAgLSBkc3QpKTsKKwkJCQlyZXR1cm4gKGludCkoZHN0cCAtIGRzdCk7CisJCQl9CisJCQkvKiBOb3QgZm91bmQsIHNhdmUgaXQuICovCisJCQlpZiAobGFzdGRucHRyICE9IE5VTEwgJiYgY3BwIDwgbGFzdGRucHRyIC0gMSAmJgorCQkJICAgIChkc3RwIC0gbXNnKSA8IDB4NDAwMCAmJiBmaXJzdCkgeworCQkJCSpjcHArKyA9IGRzdHA7CisJCQkJKmNwcCA9IE5VTEw7CisJCQkJZmlyc3QgPSAwOworCQkJfQorCQl9CisJCS8qIGNvcHkgbGFiZWwgdG8gYnVmZmVyICovCisJCWlmICgobiAmIE5TX0NNUFJTRkxHUykgPT0gTlNfQ01QUlNGTEdTKSB7CisJCQkvKiBTaG91bGQgbm90IGhhcHBlbi4gKi8KKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQluID0gbGFiZWxsZW4oc3JjcCk7CisJCWlmIChkc3RwICsgMSArIG4gPj0gZW9iKSB7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJbWVtY3B5KGRzdHAsIHNyY3AsIChzaXplX3QpKG4gKyAxKSk7CisJCXNyY3AgKz0gbiArIDE7CisJCWRzdHAgKz0gbiArIDE7CisJfSB3aGlsZSAobiAhPSAwKTsKKworCWlmIChkc3RwID4gZW9iKSB7CitjbGVhbnVwOgorCQlpZiAobXNnICE9IE5VTEwpCisJCQkqbHBwID0gTlVMTDsKKwkJZXJybm8gPSBFTVNHU0laRTsKKwkJcmV0dXJuICgtMSk7CisJfQorCV9ESUFHQVNTRVJUKF9fdHlwZV9maXQoaW50LCBkc3RwIC0gZHN0KSk7CisJcmV0dXJuIChpbnQpKGRzdHAgLSBkc3QpOworfQorCisvKgorICoJRXhwYW5kIGNvbXByZXNzZWQgZG9tYWluIG5hbWUgdG8gcHJlc2VudGF0aW9uIGZvcm1hdC4KKyAqCisgKiByZXR1cm46CisgKglOdW1iZXIgb2YgYnl0ZXMgcmVhZCBvdXQgb2YgYHNyYycsIG9yIC0xICh3aXRoIGVycm5vIHNldCkuCisgKgorICogbm90ZToKKyAqCVJvb3QgZG9tYWluIHJldHVybnMgYXMgIi4iIG5vdCAiIi4KKyAqLworaW50Cituc19uYW1lX3VuY29tcHJlc3MoY29uc3QgdV9jaGFyICptc2csIGNvbnN0IHVfY2hhciAqZW9tLCBjb25zdCB1X2NoYXIgKnNyYywKKwkJICAgY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6KQoreworCXVfY2hhciB0bXBbTlNfTUFYQ0ROQU1FXTsKKwlpbnQgbjsKKworCWlmICgobiA9IG5zX25hbWVfdW5wYWNrKG1zZywgZW9tLCBzcmMsIHRtcCwgc2l6ZW9mIHRtcCkpID09IC0xKQorCQlyZXR1cm4gKC0xKTsKKwlpZiAobnNfbmFtZV9udG9wKHRtcCwgZHN0LCBkc3RzaXopID09IC0xKQorCQlyZXR1cm4gKC0xKTsKKwlyZXR1cm4gKG4pOworfQorCisvKgorICoJQ29tcHJlc3MgYSBkb21haW4gbmFtZSBpbnRvIHdpcmUgZm9ybWF0LCB1c2luZyBjb21wcmVzc2lvbiBwb2ludGVycy4KKyAqCisgKiByZXR1cm46CisgKglOdW1iZXIgb2YgYnl0ZXMgY29uc3VtZWQgaW4gYGRzdCcgb3IgLTEgKHdpdGggZXJybm8gc2V0KS4KKyAqCisgKiBub3RlczoKKyAqCSdkbnB0cnMnIGlzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHByZXZpb3VzIGNvbXByZXNzZWQgbmFtZXMuCisgKglkbnB0cnNbMF0gaXMgYSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1lc3NhZ2UuCisgKglUaGUgbGlzdCBlbmRzIHdpdGggTlVMTC4gICdsYXN0ZG5wdHInIGlzIGEgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZQorICoJYXJyYXkgcG9pbnRlZCB0byBieSAnZG5wdHJzJy4gU2lkZSBlZmZlY3QgaXMgdG8gdXBkYXRlIHRoZSBsaXN0IG9mCisgKglwb2ludGVycyBmb3IgbGFiZWxzIGluc2VydGVkIGludG8gdGhlIG1lc3NhZ2UgYXMgd2UgY29tcHJlc3MgdGhlIG5hbWUuCisgKglJZiAnZG5wdHInIGlzIE5VTEwsIHdlIGRvbid0IHRyeSB0byBjb21wcmVzcyBuYW1lcy4gSWYgJ2xhc3RkbnB0cicKKyAqCWlzIE5VTEwsIHdlIGRvbid0IHVwZGF0ZSB0aGUgbGlzdC4KKyAqLworaW50Cituc19uYW1lX2NvbXByZXNzKGNvbnN0IGNoYXIgKnNyYywgdV9jaGFyICpkc3QsIHNpemVfdCBkc3RzaXosCisJCSBjb25zdCB1X2NoYXIgKipkbnB0cnMsIGNvbnN0IHVfY2hhciAqKmxhc3RkbnB0cikKK3sKKwl1X2NoYXIgdG1wW05TX01BWENETkFNRV07CisKKwlpZiAobnNfbmFtZV9wdG9uKHNyYywgdG1wLCBzaXplb2YgdG1wKSA9PSAtMSkKKwkJcmV0dXJuICgtMSk7CisJcmV0dXJuIChuc19uYW1lX3BhY2sodG1wLCBkc3QsIChpbnQpZHN0c2l6LCBkbnB0cnMsIGxhc3RkbnB0cikpOworfQorCisvKgorICogUmVzZXQgZG5wdHJzIHNvIHRoYXQgdGhlcmUgYXJlIG5vIGFjdGl2ZSByZWZlcmVuY2VzIHRvIHBvaW50ZXJzIGF0IG9yCisgKiBhZnRlciBzcmMuCisgKi8KK3ZvaWQKK25zX25hbWVfcm9sbGJhY2soY29uc3QgdV9jaGFyICpzcmMsIGNvbnN0IHVfY2hhciAqKmRucHRycywKKwkJIGNvbnN0IHVfY2hhciAqKmxhc3RkbnB0cikKK3sKKwl3aGlsZSAoZG5wdHJzIDwgbGFzdGRucHRyICYmICpkbnB0cnMgIT0gTlVMTCkgeworCQlpZiAoKmRucHRycyA+PSBzcmMpIHsKKwkJCSpkbnB0cnMgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJZG5wdHJzKys7CisJfQorfQorCisvKgorICoJQWR2YW5jZSAqcHRycHRyIHRvIHNraXAgb3ZlciB0aGUgY29tcHJlc3NlZCBuYW1lIGl0IHBvaW50cyBhdC4KKyAqCisgKiByZXR1cm46CisgKgkwIG9uIHN1Y2Nlc3MsIC0xICh3aXRoIGVycm5vIHNldCkgb24gZmFpbHVyZS4KKyAqLworaW50Cituc19uYW1lX3NraXAoY29uc3QgdV9jaGFyICoqcHRycHRyLCBjb25zdCB1X2NoYXIgKmVvbSkKK3sKKwljb25zdCB1X2NoYXIgKmNwOworCXVfaW50IG47CisJaW50IGw7CisKKwljcCA9ICpwdHJwdHI7CisJd2hpbGUgKGNwIDwgZW9tICYmIChuID0gKmNwKyspICE9IDApIHsKKwkJLyogQ2hlY2sgZm9yIGluZGlyZWN0aW9uLiAqLworCQlzd2l0Y2ggKG4gJiBOU19DTVBSU0ZMR1MpIHsKKwkJY2FzZSAwOgkJCS8qIG5vcm1hbCBjYXNlLCBuID09IGxlbiAqLworCQkJY3AgKz0gbjsKKwkJCWNvbnRpbnVlOworCQljYXNlIE5TX1RZUEVfRUxUOiAvKiBFRE5TMCBleHRlbmRlZCBsYWJlbCAqLworCQkJaWYgKChsID0gbGFiZWxsZW4oY3AgLSAxKSkgPCAwKSB7CisJCQkJZXJybm8gPSBFTVNHU0laRTsgLyogWFhYICovCisJCQkJcmV0dXJuKC0xKTsKKwkJCX0KKwkJCWNwICs9IGw7CisJCQljb250aW51ZTsKKwkJY2FzZSBOU19DTVBSU0ZMR1M6CS8qIGluZGlyZWN0aW9uICovCisJCQljcCsrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CQkvKiBpbGxlZ2FsIHR5cGUgKi8KKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlicmVhazsKKwl9CisJaWYgKGNwID4gZW9tKSB7CisJCWVycm5vID0gRU1TR1NJWkU7CisJCXJldHVybiAoLTEpOworCX0KKwkqcHRycHRyID0gY3A7CisJcmV0dXJuICgwKTsKK30KKworLyogRmluZCB0aGUgbnVtYmVyIG9mIG9jdGV0cyBhbiBubmFtZSB0YWtlcyB1cCwgaW5jbHVkaW5nIHRoZSByb290IGxhYmVsLgorICogKFRoaXMgaXMgYmFzaWNhbGx5IG5zX25hbWVfc2tpcCgpIHdpdGhvdXQgY29tcHJlc3Npb24tcG9pbnRlciBzdXBwb3J0LikKKyAqICgoTk9URTogY2FuIG9ubHkgcmV0dXJuIHplcm8gaWYgcGFzc2VkLWluIG5hbWVzaXogYXJndW1lbnQgaXMgemVyby4pKQorICovCitzc2l6ZV90Cituc19uYW1lX2xlbmd0aChuc19ubmFtZV9jdCBubmFtZSwgc2l6ZV90IG5hbWVzaXopIHsKKwluc19ubmFtZV9jdCBvcmlnID0gbm5hbWU7CisJdV9pbnQgbjsKKworCXdoaWxlIChuYW1lc2l6LS0gPiAwICYmIChuID0gKm5uYW1lKyspICE9IDApIHsKKwkJaWYgKChuICYgTlNfQ01QUlNGTEdTKSAhPSAwKSB7CisJCQllcnJubyA9IEVJU0RJUjsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCWlmIChuID4gbmFtZXNpeikgeworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCW5uYW1lICs9IG47CisJCW5hbWVzaXogLT0gbjsKKwl9CisJcmV0dXJuIChubmFtZSAtIG9yaWcpOworfQorCisvKiBDb21wYXJlIHR3byBubmFtZSdzIGZvciBlcXVhbGl0eS4gIFJldHVybiAtMSBvbiBlcnJvciAoc2V0dGluZyBlcnJubykuCisgKi8KK2ludAorbnNfbmFtZV9lcShuc19ubmFtZV9jdCBhLCBzaXplX3QgYXMsIG5zX25uYW1lX2N0IGIsIHNpemVfdCBicykgeworCW5zX25uYW1lX2N0IGFlID0gYSArIGFzLCBiZSA9IGIgKyBiczsKKwlpbnQgYWMsIGJjOworCisJd2hpbGUgKGFjID0gKmEsIGJjID0gKmIsIGFjICE9IDAgJiYgYmMgIT0gMCkgeworCQlpZiAoKGFjICYgTlNfQ01QUlNGTEdTKSAhPSAwIHx8IChiYyAmIE5TX0NNUFJTRkxHUykgIT0gMCkgeworCQkJZXJybm8gPSBFSVNESVI7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlpZiAoYSArIGFjID49IGFlIHx8IGIgKyBiYyA+PSBiZSkgeworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCWlmIChhYyAhPSBiYyB8fCBzdHJuY2FzZWNtcCgoY29uc3QgY2hhciAqKSArK2EsCisJCQkJCSAgICAoY29uc3QgY2hhciAqKSArK2IsCisJCQkJCSAgICAoc2l6ZV90KWFjKSAhPSAwKQorCQkJcmV0dXJuICgwKTsKKwkJYSArPSBhYywgYiArPSBiYzsKKwl9CisJcmV0dXJuIChhYyA9PSAwICYmIGJjID09IDApOworfQorCisvKiBJcyBkb21haW4gIkEiIG93bmVkIGJ5IChhdCBvciBiZWxvdykgZG9tYWluICJCIj8KKyAqLworaW50Cituc19uYW1lX293bmVkKG5zX25hbWVtYXBfY3QgYSwgaW50IGFuLCBuc19uYW1lbWFwX2N0IGIsIGludCBibikgeworCS8qIElmIEEgaXMgc2hvcnRlciwgaXQgY2Fubm90IGJlIG93bmVkIGJ5IEIuICovCisJaWYgKGFuIDwgYm4pCisJCXJldHVybiAoMCk7CisKKwkvKiBJZiB0aGV5IGFyZSB1bmVxdWFsIGJlZm9yZSB0aGUgbGVuZ3RoIG9mIHRoZSBzaG9ydGVyLCBBIGNhbm5vdC4uLiAqLworCXdoaWxlIChibiA+IDApIHsKKwkJaWYgKGEtPmxlbiAhPSBiLT5sZW4gfHwKKwkJICAgIHN0cm5jYXNlY21wKChjb25zdCBjaGFyICopIGEtPmJhc2UsCisJCQkJKGNvbnN0IGNoYXIgKikgYi0+YmFzZSwgKHNpemVfdClhLT5sZW4pICE9IDApCisJCQlyZXR1cm4gKDApOworCQlhKyssIGFuLS07CisJCWIrKywgYm4tLTsKKwl9CisKKwkvKiBBIG1pZ2h0IGJlIGxvbmdlciBvciBub3QsIGJ1dCBlaXRoZXIgd2F5LCBCIG93bnMgaXQuICovCisJcmV0dXJuICgxKTsKK30KKworLyogQnVpbGQgYW4gYXJyYXkgb2YgPGJhc2UsbGVuPiB0dXBsZXMgZnJvbSBhbiBubmFtZSwgdG9wLWRvd24gb3JkZXIuCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiB0dXBsZXMgKGxhYmVscykgdGh1cyBkaXNjb3ZlcmVkLgorICovCitpbnQKK25zX25hbWVfbWFwKG5zX25uYW1lX2N0IG5uYW1lLCBzaXplX3QgbmFtZWxlbiwgbnNfbmFtZW1hcF90IG1hcCwgaW50IG1hcHNpemUpIHsKKwl1X2ludCBuOworCWludCBsOworCisJbiA9ICpubmFtZSsrOworCW5hbWVsZW4tLTsKKworCS8qIFJvb3Qgem9uZT8gKi8KKwlpZiAobiA9PSAwKSB7CisJCS8qIEV4dHJhIGRhdGEgZm9sbG93cyBuYW1lPyAqLworCQlpZiAobmFtZWxlbiA+IDApIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlyZXR1cm4gKDApOworCX0KKworCS8qIENvbXByZXNzaW9uIHBvaW50ZXI/ICovCisJaWYgKChuICYgTlNfQ01QUlNGTEdTKSAhPSAwKSB7CisJCWVycm5vID0gRUlTRElSOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwkvKiBMYWJlbCB0b28gbG9uZz8gKi8KKwlpZiAobiA+IG5hbWVsZW4pIHsKKwkJZXJybm8gPSBFTVNHU0laRTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJLyogUmVjdXJzZSB0byBnZXQgcmVzdCBvZiBuYW1lIGRvbmUgZmlyc3QuICovCisJbCA9IG5zX25hbWVfbWFwKG5uYW1lICsgbiwgbmFtZWxlbiAtIG4sIG1hcCwgbWFwc2l6ZSk7CisJaWYgKGwgPCAwKQorCQlyZXR1cm4gKC0xKTsKKworCS8qIFRvbyBtYW55IGxhYmVscz8gKi8KKwlpZiAobCA+PSBtYXBzaXplKSB7CisJCWVycm5vID0gRU5BTUVUT09MT05HOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwkvKiBXZSdyZSBvbiBvdXIgd2F5IGJhY2sgdXAtc3RhY2ssIHN0b3JlIGN1cnJlbnQgbWFwIGRhdGEuICovCisJbWFwW2xdLmJhc2UgPSBubmFtZTsKKwltYXBbbF0ubGVuID0gbjsKKwlyZXR1cm4gKGwgKyAxKTsKK30KKworLyogQ291bnQgdGhlIGxhYmVscyBpbiBhIGRvbWFpbiBuYW1lLiAgUm9vdCBjb3VudHMsIHNvIENPTS4gaGFzIHR3by4gIFRoaXMKKyAqIGlzIHRvIG1ha2UgdGhlIHJlc3VsdCBjb21wYXJhYmxlIHRvIHRoZSByZXN1bHQgb2YgbnNfbmFtZV9tYXAoKS4KKyAqLworaW50Cituc19uYW1lX2xhYmVscyhuc19ubmFtZV9jdCBubmFtZSwgc2l6ZV90IG5hbWVzaXopIHsKKwlpbnQgcmV0ID0gMDsKKwl1X2ludCBuOworCisJd2hpbGUgKG5hbWVzaXotLSA+IDAgJiYgKG4gPSAqbm5hbWUrKykgIT0gMCkgeworCQlpZiAoKG4gJiBOU19DTVBSU0ZMR1MpICE9IDApIHsKKwkJCWVycm5vID0gRUlTRElSOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJaWYgKG4gPiBuYW1lc2l6KSB7CisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJbm5hbWUgKz0gbjsKKwkJbmFtZXNpeiAtPSBuOworCQlyZXQrKzsKKwl9CisJcmV0dXJuIChyZXQgKyAxKTsKK30KKy8qIFByaXZhdGUuICovCisKKy8qCisgKglUaGlua2luZyBpbiBub25pbnRlcm5hdGlvbmFsaXplZCBVU0FTQ0lJIChwZXIgdGhlIEROUyBzcGVjKSwKKyAqCWlzIHRoaXMgY2hhcmFjdGVkIHNwZWNpYWwgKCJpbiBuZWVkIG9mIHF1b3RpbmciKSA/CisgKgorICogcmV0dXJuOgorICoJYm9vbGVhbi4KKyAqLworc3RhdGljIGludAorc3BlY2lhbChpbnQgY2gpIHsKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAweDIyOiAvKiAnIicgKi8KKwljYXNlIDB4MkU6IC8qICcuJyAqLworCWNhc2UgMHgzQjogLyogJzsnICovCisJY2FzZSAweDVDOiAvKiAnXFwnICovCisJY2FzZSAweDI4OiAvKiAnKCcgKi8KKwljYXNlIDB4Mjk6IC8qICcpJyAqLworCS8qIFNwZWNpYWwgbW9kaWZpZXJzIGluIHpvbmUgZmlsZXMuICovCisJY2FzZSAweDQwOiAvKiAnQCcgKi8KKwljYXNlIDB4MjQ6IC8qICckJyAqLworCQlyZXR1cm4gKDEpOworCWRlZmF1bHQ6CisJCXJldHVybiAoMCk7CisJfQorfQorCisvKgorICoJVGhpbmtpbmcgaW4gbm9uaW50ZXJuYXRpb25hbGl6ZWQgVVNBU0NJSSAocGVyIHRoZSBETlMgc3BlYyksCisgKglpcyB0aGlzIGNoYXJhY3RlciB2aXNpYmxlIGFuZCBub3QgYSBzcGFjZSB3aGVuIHByaW50ZWQgPworICoKKyAqIHJldHVybjoKKyAqCWJvb2xlYW4uCisgKi8KK3N0YXRpYyBpbnQKK3ByaW50YWJsZShpbnQgY2gpIHsKKwlyZXR1cm4gKGNoID4gMHgyMCAmJiBjaCA8IDB4N2YpOworfQorCisvKgorICoJVGhpbmtpbmcgaW4gbm9uaW50ZXJuYXRpb25hbGl6ZWQgVVNBU0NJSSAocGVyIHRoZSBETlMgc3BlYyksCisgKgljb252ZXJ0IHRoaXMgY2hhcmFjdGVyIHRvIGxvd2VyIGNhc2UgaWYgaXQncyB1cHBlciBjYXNlLgorICovCitzdGF0aWMgaW50Citta2xvd2VyKGludCBjaCkgeworCWlmIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpCisJCXJldHVybiAoY2ggKyAweDIwKTsKKwlyZXR1cm4gKGNoKTsKK30KKworLyoKKyAqCVNlYXJjaCBmb3IgdGhlIGNvdW50ZWQtbGFiZWwgbmFtZSBpbiBhbiBhcnJheSBvZiBjb21wcmVzc2VkIG5hbWVzLgorICoKKyAqIHJldHVybjoKKyAqCW9mZnNldCBmcm9tIG1zZyBpZiBmb3VuZCwgb3IgLTEuCisgKgorICogbm90ZXM6CisgKglkbnB0cnMgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG5hbWUgb24gdGhlIGxpc3QsCisgKglub3QgdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtZXNzYWdlLgorICovCitzdGF0aWMgaW50Citkbl9maW5kKGNvbnN0IHVfY2hhciAqZG9tYWluLCBjb25zdCB1X2NoYXIgKm1zZywKKwljb25zdCB1X2NoYXIgKiBjb25zdCAqZG5wdHJzLAorCWNvbnN0IHVfY2hhciAqIGNvbnN0ICpsYXN0ZG5wdHIpCit7CisJY29uc3QgdV9jaGFyICpkbiwgKmNwLCAqc3A7CisJY29uc3QgdV9jaGFyICogY29uc3QgKmNwcDsKKwl1X2ludCBuOworCisJZm9yIChjcHAgPSBkbnB0cnM7IGNwcCA8IGxhc3RkbnB0cjsgY3BwKyspIHsKKwkJc3AgPSAqY3BwOworCQkvKgorCQkgKiB0ZXJtaW5hdGUgc2VhcmNoIG9uOgorCQkgKiByb290IGxhYmVsCisJCSAqIGNvbXByZXNzaW9uIHBvaW50ZXIKKwkJICogdW51c2FibGUgb2Zmc2V0CisJCSAqLworCQl3aGlsZSAoKnNwICE9IDAgJiYgKCpzcCAmIE5TX0NNUFJTRkxHUykgPT0gMCAmJgorCQkgICAgICAgKHNwIC0gbXNnKSA8IDB4NDAwMCkgeworCQkJZG4gPSBkb21haW47CisJCQljcCA9IHNwOworCQkJd2hpbGUgKChuID0gKmNwKyspICE9IDApIHsKKwkJCQkvKgorCQkJCSAqIGNoZWNrIGZvciBpbmRpcmVjdGlvbgorCQkJCSAqLworCQkJCXN3aXRjaCAobiAmIE5TX0NNUFJTRkxHUykgeworCQkJCWNhc2UgMDoJCS8qIG5vcm1hbCBjYXNlLCBuID09IGxlbiAqLworCQkJCQluID0gbGFiZWxsZW4oY3AgLSAxKTsgLyogWFhYICovCisKKwkJCQkJaWYgKG4gIT0gKmRuKyspCisJCQkJCQlnb3RvIG5leHQ7CisKKwkJCQkJZm9yICg7IG4gPiAwOyBuLS0pCisJCQkJCQlpZiAobWtsb3dlcigqZG4rKykgIT0KKwkJCQkJCSAgICBta2xvd2VyKCpjcCsrKSkKKwkJCQkJCQlnb3RvIG5leHQ7CisJCQkJCS8qIElzIG5leHQgcm9vdCBmb3IgYm90aCA/ICovCisJCQkJCWlmICgqZG4gPT0gJ1wwJyAmJiAqY3AgPT0gJ1wwJykgeworCQkJCQkJX0RJQUdBU1NFUlQoX190eXBlX2ZpdChpbnQsCisJCQkJCQkgICAgc3AgLSBtc2cpKTsKKwkJCQkJCXJldHVybiAoaW50KShzcCAtIG1zZyk7CisJCQkJCX0KKwkJCQkJaWYgKCpkbikKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlnb3RvIG5leHQ7CisJCQkJY2FzZSBOU19DTVBSU0ZMR1M6CS8qIGluZGlyZWN0aW9uICovCisJCQkJCWNwID0gbXNnICsgKCgobiAmIDB4M2YpIDw8IDgpIHwgKmNwKTsKKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgkvKiBpbGxlZ2FsIHR5cGUgKi8KKwkJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJfQorCQkJfQorIG5leHQ6IDsKKwkJCXNwICs9ICpzcCArIDE7CisJCX0KKwl9CisJZXJybm8gPSBFTk9FTlQ7CisJcmV0dXJuICgtMSk7Cit9CisKK3N0YXRpYyBpbnQKK2RlY29kZV9iaXRzdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqKmNwcCwgY2hhciAqZG4sIGNvbnN0IGNoYXIgKmVvbSkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjcCA9ICpjcHA7CisJY2hhciAqYmVnID0gZG4sIHRjOworCWludCBiLCBibGVuLCBwbGVuLCBpOworCisJaWYgKChibGVuID0gKCpjcCAmIDB4ZmYpKSA9PSAwKQorCQlibGVuID0gMjU2OworCXBsZW4gPSAoYmxlbiArIDMpIC8gNDsKKwlwbGVuICs9IChpbnQpc2l6ZW9mKCJcXFt4L10iKSArIChibGVuID4gOTkgPyAzIDogKGJsZW4gPiA5KSA/IDIgOiAxKTsKKwlpZiAoZG4gKyBwbGVuID49IGVvbSkKKwkJcmV0dXJuKC0xKTsKKworCWNwKys7CisJaSA9IFNQUklOVEYoKGRuLCAiXFxbeCIpKTsKKwlpZiAoaSA8IDApCisJCXJldHVybiAoLTEpOworCWRuICs9IGk7CisJZm9yIChiID0gYmxlbjsgYiA+IDc7IGIgLT0gOCwgY3ArKykgeworCQlpID0gU1BSSU5URigoZG4sICIlMDJ4IiwgKmNwICYgMHhmZikpOworCQlpZiAoaSA8IDApCisJCQlyZXR1cm4gKC0xKTsKKwkJZG4gKz0gaTsKKwl9CisJaWYgKGIgPiA0KSB7CisJCXRjID0gKmNwKys7CisJCWkgPSBTUFJJTlRGKChkbiwgIiUwMngiLCB0YyAmICgweGZmIDw8ICg4IC0gYikpKSk7CisJCWlmIChpIDwgMCkKKwkJCXJldHVybiAoLTEpOworCQlkbiArPSBpOworCX0gZWxzZSBpZiAoYiA+IDApIHsKKwkJdGMgPSAqY3ArKzsKKwkJaSA9IFNQUklOVEYoKGRuLCAiJTF4IiwKKwkJCSAgICAgICAoKCh1X2ludDMyX3QpdGMgPj4gNCkgJiAweDBmKSAmICgweDBmIDw8ICg0IC0gYikpKSk7CisJCWlmIChpIDwgMCkKKwkJCXJldHVybiAoLTEpOworCQlkbiArPSBpOworCX0KKwlpID0gU1BSSU5URigoZG4sICIvJWRdIiwgYmxlbikpOworCWlmIChpIDwgMCkKKwkJcmV0dXJuICgtMSk7CisJZG4gKz0gaTsKKworCSpjcHAgPSBjcDsKKwlfRElBR0FTU0VSVChfX3R5cGVfZml0KGludCwgZG4gLSBiZWcpKTsKKwlyZXR1cm4gKGludCkoZG4gLSBiZWcpOworfQorCitzdGF0aWMgaW50CitlbmNvZGVfYml0c3JpbmcoY29uc3QgY2hhciAqKmJwLCBjb25zdCBjaGFyICplbmQsIHVuc2lnbmVkIGNoYXIgKipsYWJlbHAsCisJICAgICAgICB1bnNpZ25lZCBjaGFyICoqIGRzdCwgdW5zaWduZWQgY29uc3QgY2hhciAqZW9tKQoreworCWludCBhZnRlcnNsYXNoID0gMDsKKwljb25zdCBjaGFyICpjcCA9ICpicDsKKwl1bnNpZ25lZCBjaGFyICp0cDsKKwljaGFyIGM7CisJY29uc3QgY2hhciAqYmVnX2JsZW47CisJY2hhciAqZW5kX2JsZW4gPSBOVUxMOworCWludCB2YWx1ZSA9IDAsIGNvdW50ID0gMCwgdGJjb3VudCA9IDAsIGJsZW4gPSAwOworCisJYmVnX2JsZW4gPSBlbmRfYmxlbiA9IE5VTEw7CisKKwkvKiBhIGJpdHN0cmluZyBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgMiBjaGFyYWN0ZXJzICovCisJaWYgKGVuZCAtIGNwIDwgMikKKwkJcmV0dXJuKEVJTlZBTCk7CisKKwkvKiBYWFg6IGN1cnJlbnRseSwgb25seSBoZXggc3RyaW5ncyBhcmUgc3VwcG9ydGVkICovCisJaWYgKCpjcCsrICE9ICd4JykKKwkJcmV0dXJuKEVJTlZBTCk7CisJaWYgKCFpc3hkaWdpdCgoKmNwKSAmIDB4ZmYpKSAvKiByZWplY3QgJ1xbeC9CTEVOXScgKi8KKwkJcmV0dXJuKEVJTlZBTCk7CisKKwlmb3IgKHRwID0gKmRzdCArIDE7IGNwIDwgZW5kICYmIHRwIDwgZW9tOyBjcCsrKSB7CisJCXN3aXRjaCgoYyA9ICpjcCkpIHsKKwkJY2FzZSAnXSc6CS8qIGVuZCBvZiB0aGUgYml0c3RyaW5nICovCisJCQlpZiAoYWZ0ZXJzbGFzaCkgeworCQkJCWlmIChiZWdfYmxlbiA9PSBOVUxMKQorCQkJCQlyZXR1cm4oRUlOVkFMKTsKKwkJCQlibGVuID0gKGludClzdHJ0b2woYmVnX2JsZW4sICZlbmRfYmxlbiwgMTApOworCQkJCWlmICgqZW5kX2JsZW4gIT0gJ10nKQorCQkJCQlyZXR1cm4oRUlOVkFMKTsKKwkJCX0KKwkJCWlmIChjb3VudCkKKwkJCQkqdHArKyA9ICgodmFsdWUgPDwgNCkgJiAweGZmKTsKKwkJCWNwKys7CS8qIHNraXAgJ10nICovCisJCQlnb3RvIGRvbmU7CisJCWNhc2UgJy8nOgorCQkJYWZ0ZXJzbGFzaCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmIChhZnRlcnNsYXNoKSB7CisJCQkJaWYgKCFpc2RpZ2l0KGMmMHhmZikpCisJCQkJCXJldHVybihFSU5WQUwpOworCQkJCWlmIChiZWdfYmxlbiA9PSBOVUxMKSB7CisKKwkJCQkJaWYgKGMgPT0gJzAnKSB7CisJCQkJCQkvKiBibGVuIG5ldmVyIGJlZ2luZ3Mgd2l0aCAwICovCisJCQkJCQlyZXR1cm4oRUlOVkFMKTsKKwkJCQkJfQorCQkJCQliZWdfYmxlbiA9IGNwOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKCFpc3hkaWdpdChjJjB4ZmYpKQorCQkJCQlyZXR1cm4oRUlOVkFMKTsKKwkJCQl2YWx1ZSA8PD0gNDsKKwkJCQl2YWx1ZSArPSBkaWdpdHZhbHVlWyhpbnQpY107CisJCQkJY291bnQgKz0gNDsKKwkJCQl0YmNvdW50ICs9IDQ7CisJCQkJaWYgKHRiY291bnQgPiAyNTYpCisJCQkJCXJldHVybihFSU5WQUwpOworCQkJCWlmIChjb3VudCA9PSA4KSB7CisJCQkJCSp0cCsrID0gdmFsdWU7CisJCQkJCWNvdW50ID0gMDsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKyAgZG9uZToKKwlpZiAoY3AgPj0gZW5kIHx8IHRwID49IGVvbSkKKwkJcmV0dXJuKEVNU0dTSVpFKTsKKworCS8qCisJICogYml0IGxlbmd0aCB2YWxpZGF0aW9uOgorCSAqIElmIGEgPGxlbmd0aD4gaXMgcHJlc2VudCwgdGhlIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIDxiaXQtZGF0YT4KKwkgKiBNVVNUIGJlIGp1c3Qgc3VmZmljaWVudCB0byBjb250YWluIHRoZSBudW1iZXIgb2YgYml0cyBzcGVjaWZpZWQKKwkgKiBieSB0aGUgPGxlbmd0aD4uIElmIHRoZXJlIGFyZSBpbnNpZ25pZmljYW50IGJpdHMgaW4gYSBmaW5hbAorCSAqIGhleGFkZWNpbWFsIG9yIG9jdGFsIGRpZ2l0LCB0aGV5IE1VU1QgYmUgemVyby4KKwkgKiBSRkMgMjY3MywgU2VjdGlvbiAzLjIuCisJICovCisJaWYgKGJsZW4gPiAwKSB7CisJCWludCB0cmFpbGxlbjsKKworCQlpZiAoKChibGVuICsgMykgJiB+MykgIT0gdGJjb3VudCkKKwkJCXJldHVybihFSU5WQUwpOworCQl0cmFpbGxlbiA9IHRiY291bnQgLSBibGVuOyAvKiBiZXR3ZWVuIDAgYW5kIDMgKi8KKwkJaWYgKCgodmFsdWUgPDwgKDggLSB0cmFpbGxlbikpICYgMHhmZikgIT0gMCkKKwkJCXJldHVybihFSU5WQUwpOworCX0KKwllbHNlCisJCWJsZW4gPSB0YmNvdW50OworCWlmIChibGVuID09IDI1NikKKwkJYmxlbiA9IDA7CisKKwkvKiBlbmNvZGUgdGhlIHR5cGUgYW5kIHRoZSBzaWduaWZpY2FudCBiaXQgZmllbGRzICovCisJKipsYWJlbHAgPSBETlNfTEFCRUxUWVBFX0JJVFNUUklORzsKKwkqKmRzdCA9IGJsZW47CisKKwkqYnAgPSBjcDsKKwkqZHN0ID0gdHA7CisKKwlyZXR1cm4oMCk7Cit9CisKK3N0YXRpYyBpbnQKK2xhYmVsbGVuKGNvbnN0IHVfY2hhciAqbHApCit7CisJaW50IGJpdGxlbjsKKwl1X2NoYXIgbCA9ICpscDsKKworCWlmICgobCAmIE5TX0NNUFJTRkxHUykgPT0gTlNfQ01QUlNGTEdTKSB7CisJCS8qIHNob3VsZCBiZSBhdm9pZGVkIGJ5IHRoZSBjYWxsZXIgKi8KKwkJcmV0dXJuKC0xKTsKKwl9CisKKwlpZiAoKGwgJiBOU19DTVBSU0ZMR1MpID09IE5TX1RZUEVfRUxUKSB7CisJCWlmIChsID09IEROU19MQUJFTFRZUEVfQklUU1RSSU5HKSB7CisJCQlpZiAoKGJpdGxlbiA9ICoobHAgKyAxKSkgPT0gMCkKKwkJCQliaXRsZW4gPSAyNTY7CisJCQlyZXR1cm4oKGJpdGxlbiArIDcgKSAvIDggKyAxKTsKKwkJfQorCQlyZXR1cm4oLTEpOwkvKiB1bmtud29uIEVMVCAqLworCX0KKwlyZXR1cm4obCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Rucy9uYW1lc2VyL25zX25ldGludC5jIGIvbGliYy9kbnMvbmFtZXNlci9uc19uZXRpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjU0NmY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvbmFtZXNlci9uc19uZXRpbnQuYwpAQCAtMCwwICsxLDU5IEBACisvKgkkTmV0QlNEOiBuc19uZXRpbnQuYyx2IDEuNyAyMDEyLzAzLzEzIDIxOjEzOjM5IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWZuZGVmIGxpbnQKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zX25ldGludC5jLHYgMS4zIDIwMDUvMDQvMjcgMDQ6NTY6NDAgc3JhIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogbnNfbmV0aW50LmMsdiAxLjcgMjAxMi8wMy8xMyAyMToxMzozOSBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYKKworLyogSW1wb3J0LiAqLworCisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisKKy8qIFB1YmxpYy4gKi8KKwordWludDE2X3QKK25zX2dldDE2KGNvbnN0IHVfY2hhciAqc3JjKSB7CisJdWludDE2X3QgZHN0OworCisJTlNfR0VUMTYoZHN0LCBzcmMpOworCXJldHVybiBkc3Q7Cit9CisKK3VpbnQzMl90Cituc19nZXQzMihjb25zdCB1X2NoYXIgKnNyYykgeworCXVfaW50MzJfdCBkc3Q7CisKKwlOU19HRVQzMihkc3QsIHNyYyk7CisJcmV0dXJuIGRzdDsKK30KKwordm9pZAorbnNfcHV0MTYodWludDE2X3Qgc3JjLCB1X2NoYXIgKmRzdCkgeworCU5TX1BVVDE2KHNyYywgZHN0KTsKK30KKwordm9pZAorbnNfcHV0MzIodWludDMyX3Qgc3JjLCB1X2NoYXIgKmRzdCkgeworCU5TX1BVVDMyKHNyYywgZHN0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvZG5zL25hbWVzZXIvbnNfcGFyc2UuYyBiL2xpYmMvZG5zL25hbWVzZXIvbnNfcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDZkNTMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvbmFtZXNlci9uc19wYXJzZS5jCkBAIC0wLDAgKzEsMjc1IEBACisvKgkkTmV0QlNEOiBuc19wYXJzZS5jLHYgMS45IDIwMTIvMDMvMTMgMjE6MTM6MzkgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZm5kZWYgbGludAorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogbnNfcGFyc2UuYyx2IDEuMTAgMjAwOS8wMS8yMyAxOTo1OToxNiBlYWNoIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogbnNfcGFyc2UuYyx2IDEuOSAyMDEyLzAzLzEzIDIxOjEzOjM5IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZgorCisvKiBJbXBvcnQuICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogRm9yd2FyZC4gKi8KKworc3RhdGljIHZvaWQJc2V0c2VjdGlvbihuc19tc2cgKm1zZywgbnNfc2VjdCBzZWN0KTsKKworLyogTWFjcm9zLiAqLworCisjZGVmaW5lIFJFVEVSUihlcnIpIGRvIHsgZXJybm8gPSAoZXJyKTsgcmV0dXJuICgtMSk7IH0gd2hpbGUgKC8qTk9UUkVBQ0hFRCovLypDT05TVENPTkQqLzApCisKKy8qIFB1YmxpYy4gKi8KKworLyogVGhlc2UgbmVlZCB0byBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgbnJlcy5oOm5zX2ZsYWcgZW51bS4gKi8KK2NvbnN0IHN0cnVjdCBfbnNfZmxhZ2RhdGEgX25zX2ZsYWdkYXRhWzE2XSA9IHsKKwl7IDB4ODAwMCwgMTUgfSwJCS8qIHFyLiAqLworCXsgMHg3ODAwLCAxMSB9LAkJLyogb3Bjb2RlLiAqLworCXsgMHgwNDAwLCAxMCB9LAkJLyogYWEuICovCisJeyAweDAyMDAsIDkgfSwJCS8qIHRjLiAqLworCXsgMHgwMTAwLCA4IH0sCQkvKiByZC4gKi8KKwl7IDB4MDA4MCwgNyB9LAkJLyogcmEuICovCisJeyAweDAwNDAsIDYgfSwJCS8qIHouICovCisJeyAweDAwMjAsIDUgfSwJCS8qIGFkLiAqLworCXsgMHgwMDEwLCA0IH0sCQkvKiBjZC4gKi8KKwl7IDB4MDAwZiwgMCB9LAkJLyogcmNvZGUuICovCisJeyAweDAwMDAsIDAgfSwJCS8qIGV4cGFuc2lvbiAoMS82KS4gKi8KKwl7IDB4MDAwMCwgMCB9LAkJLyogZXhwYW5zaW9uICgyLzYpLiAqLworCXsgMHgwMDAwLCAwIH0sCQkvKiBleHBhbnNpb24gKDMvNikuICovCisJeyAweDAwMDAsIDAgfSwJCS8qIGV4cGFuc2lvbiAoNC82KS4gKi8KKwl7IDB4MDAwMCwgMCB9LAkJLyogZXhwYW5zaW9uICg1LzYpLiAqLworCXsgMHgwMDAwLCAwIH0sCQkvKiBleHBhbnNpb24gKDYvNikuICovCit9OworCitpbnQgbnNfbXNnX2dldGZsYWcobnNfbXNnIGhhbmRsZSwgaW50IGZsYWcpIHsKKwlyZXR1cm4oKHVfaW50MzJfdCkoKGhhbmRsZSkuX2ZsYWdzICYgX25zX2ZsYWdkYXRhW2ZsYWddLm1hc2spID4+IF9uc19mbGFnZGF0YVtmbGFnXS5zaGlmdCk7Cit9CisKK2ludAorbnNfc2tpcHJyKGNvbnN0IHVfY2hhciAqcHRyLCBjb25zdCB1X2NoYXIgKmVvbSwgbnNfc2VjdCBzZWN0aW9uLCBpbnQgY291bnQpIHsKKwljb25zdCB1X2NoYXIgKm9wdHIgPSBwdHI7CisKKwlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKSB7CisJCWludCBiLCByZGxlbmd0aDsKKworCQliID0gZG5fc2tpcG5hbWUocHRyLCBlb20pOworCQlpZiAoYiA8IDApCisJCQlSRVRFUlIoRU1TR1NJWkUpOworCQlwdHIgKz0gYi8qTmFtZSovICsgTlNfSU5UMTZTWi8qVHlwZSovICsgTlNfSU5UMTZTWi8qQ2xhc3MqLzsKKwkJaWYgKHNlY3Rpb24gIT0gbnNfc19xZCkgeworCQkJaWYgKHB0ciArIE5TX0lOVDMyU1ogKyBOU19JTlQxNlNaID4gZW9tKQorCQkJCVJFVEVSUihFTVNHU0laRSk7CisJCQlwdHIgKz0gTlNfSU5UMzJTWi8qVFRMKi87CisJCQlOU19HRVQxNihyZGxlbmd0aCwgcHRyKTsKKwkJCXB0ciArPSByZGxlbmd0aC8qUkRhdGEqLzsKKwkJfQorCX0KKwlpZiAocHRyID4gZW9tKQorCQlSRVRFUlIoRU1TR1NJWkUpOworCV9ESUFHQVNTRVJUKF9fdHlwZV9maXQoaW50LCBwdHIgLSBvcHRyKSk7CisJcmV0dXJuIChpbnQpKHB0ciAtIG9wdHIpOworfQorCitpbnQKK25zX2luaXRwYXJzZShjb25zdCB1X2NoYXIgKm1zZywgaW50IG1zZ2xlbiwgbnNfbXNnICpoYW5kbGUpIHsKKwljb25zdCB1X2NoYXIgKmVvbSA9IG1zZyArIG1zZ2xlbjsKKwlpbnQgaTsKKworCWhhbmRsZS0+X21zZyA9IG1zZzsKKwloYW5kbGUtPl9lb20gPSBlb207CisJaWYgKG1zZyArIE5TX0lOVDE2U1ogPiBlb20pCisJCVJFVEVSUihFTVNHU0laRSk7CisJTlNfR0VUMTYoaGFuZGxlLT5faWQsIG1zZyk7CisJaWYgKG1zZyArIE5TX0lOVDE2U1ogPiBlb20pCisJCVJFVEVSUihFTVNHU0laRSk7CisJTlNfR0VUMTYoaGFuZGxlLT5fZmxhZ3MsIG1zZyk7CisJZm9yIChpID0gMDsgaSA8IG5zX3NfbWF4OyBpKyspIHsKKwkJaWYgKG1zZyArIE5TX0lOVDE2U1ogPiBlb20pCisJCQlSRVRFUlIoRU1TR1NJWkUpOworCQlOU19HRVQxNihoYW5kbGUtPl9jb3VudHNbaV0sIG1zZyk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBuc19zX21heDsgaSsrKQorCQlpZiAoaGFuZGxlLT5fY291bnRzW2ldID09IDApCisJCQloYW5kbGUtPl9zZWN0aW9uc1tpXSA9IE5VTEw7CisJCWVsc2UgeworCQkJaW50IGIgPSBuc19za2lwcnIobXNnLCBlb20sIChuc19zZWN0KWksCisJCQkJCSAgaGFuZGxlLT5fY291bnRzW2ldKTsKKworCQkJaWYgKGIgPCAwKQorCQkJCXJldHVybiAoLTEpOworCQkJaGFuZGxlLT5fc2VjdGlvbnNbaV0gPSBtc2c7CisJCQltc2cgKz0gYjsKKwkJfQorCWlmIChtc2cgIT0gZW9tKQorCQlSRVRFUlIoRU1TR1NJWkUpOworCXNldHNlY3Rpb24oaGFuZGxlLCBuc19zX21heCk7CisJcmV0dXJuICgwKTsKK30KKworaW50Cituc19wYXJzZXJyKG5zX21zZyAqaGFuZGxlLCBuc19zZWN0IHNlY3Rpb24sIGludCBycm51bSwgbnNfcnIgKnJyKSB7CisJaW50IGI7CisJaW50IHRtcDsKKworCS8qIE1ha2Ugc2VjdGlvbiByaWdodC4gKi8KKwl0bXAgPSBzZWN0aW9uOworCWlmICh0bXAgPCAwIHx8IHNlY3Rpb24gPj0gbnNfc19tYXgpCisJCVJFVEVSUihFTk9ERVYpOworCWlmIChzZWN0aW9uICE9IGhhbmRsZS0+X3NlY3QpCisJCXNldHNlY3Rpb24oaGFuZGxlLCBzZWN0aW9uKTsKKworCS8qIE1ha2UgcnJudW0gcmlnaHQuICovCisJaWYgKHJybnVtID09IC0xKQorCQlycm51bSA9IGhhbmRsZS0+X3JybnVtOworCWlmIChycm51bSA8IDAgfHwgcnJudW0gPj0gaGFuZGxlLT5fY291bnRzWyhpbnQpc2VjdGlvbl0pCisJCVJFVEVSUihFTk9ERVYpOworCWlmIChycm51bSA8IGhhbmRsZS0+X3JybnVtKQorCQlzZXRzZWN0aW9uKGhhbmRsZSwgc2VjdGlvbik7CisJaWYgKHJybnVtID4gaGFuZGxlLT5fcnJudW0pIHsKKwkJYiA9IG5zX3NraXBycihoYW5kbGUtPl9tc2dfcHRyLCBoYW5kbGUtPl9lb20sIHNlY3Rpb24sCisJCQkgICAgICBycm51bSAtIGhhbmRsZS0+X3JybnVtKTsKKworCQlpZiAoYiA8IDApCisJCQlyZXR1cm4gKC0xKTsKKwkJaGFuZGxlLT5fbXNnX3B0ciArPSBiOworCQloYW5kbGUtPl9ycm51bSA9IHJybnVtOworCX0KKworCS8qIERvIHRoZSBwYXJzZS4gKi8KKwliID0gZG5fZXhwYW5kKGhhbmRsZS0+X21zZywgaGFuZGxlLT5fZW9tLAorCQkgICAgICBoYW5kbGUtPl9tc2dfcHRyLCByci0+bmFtZSwgTlNfTUFYRE5BTUUpOworCWlmIChiIDwgMCkKKwkJcmV0dXJuICgtMSk7CisJaGFuZGxlLT5fbXNnX3B0ciArPSBiOworCWlmIChoYW5kbGUtPl9tc2dfcHRyICsgTlNfSU5UMTZTWiArIE5TX0lOVDE2U1ogPiBoYW5kbGUtPl9lb20pCisJCVJFVEVSUihFTVNHU0laRSk7CisJTlNfR0VUMTYocnItPnR5cGUsIGhhbmRsZS0+X21zZ19wdHIpOworCU5TX0dFVDE2KHJyLT5ycl9jbGFzcywgaGFuZGxlLT5fbXNnX3B0cik7CisJaWYgKHNlY3Rpb24gPT0gbnNfc19xZCkgeworCQlyci0+dHRsID0gMDsKKwkJcnItPnJkbGVuZ3RoID0gMDsKKwkJcnItPnJkYXRhID0gTlVMTDsKKwl9IGVsc2UgeworCQlpZiAoaGFuZGxlLT5fbXNnX3B0ciArIE5TX0lOVDMyU1ogKyBOU19JTlQxNlNaID4gaGFuZGxlLT5fZW9tKQorCQkJUkVURVJSKEVNU0dTSVpFKTsKKwkJTlNfR0VUMzIocnItPnR0bCwgaGFuZGxlLT5fbXNnX3B0cik7CisJCU5TX0dFVDE2KHJyLT5yZGxlbmd0aCwgaGFuZGxlLT5fbXNnX3B0cik7CisJCWlmIChoYW5kbGUtPl9tc2dfcHRyICsgcnItPnJkbGVuZ3RoID4gaGFuZGxlLT5fZW9tKQorCQkJUkVURVJSKEVNU0dTSVpFKTsKKwkJcnItPnJkYXRhID0gaGFuZGxlLT5fbXNnX3B0cjsKKwkJaGFuZGxlLT5fbXNnX3B0ciArPSByci0+cmRsZW5ndGg7CisJfQorCWlmICgrK2hhbmRsZS0+X3JybnVtID4gaGFuZGxlLT5fY291bnRzWyhpbnQpc2VjdGlvbl0pCisJCXNldHNlY3Rpb24oaGFuZGxlLCAobnNfc2VjdCkoKGludClzZWN0aW9uICsgMSkpOworCisJLyogQWxsIGRvbmUuICovCisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIFRoaXMgaXMgaWRlbnRpY2FsIHRvIHRoZSBhYm92ZSBidXQgdXNlcyBuZXR3b3JrLWZvcm1hdCAodW5jb21wcmVzc2VkKSBuYW1lcy4KKyAqLworaW50Cituc19wYXJzZXJyMihuc19tc2cgKmhhbmRsZSwgbnNfc2VjdCBzZWN0aW9uLCBpbnQgcnJudW0sIG5zX3JyMiAqcnIpIHsKKwlpbnQgYjsKKwlpbnQgdG1wOworCisJLyogTWFrZSBzZWN0aW9uIHJpZ2h0LiAqLworCXRtcCA9IHNlY3Rpb247CisJaWYgKHRtcCA8IDAgfHwgc2VjdGlvbiA+PSBuc19zX21heCkKKwkJUkVURVJSKEVOT0RFVik7CisJaWYgKHNlY3Rpb24gIT0gaGFuZGxlLT5fc2VjdCkKKwkJc2V0c2VjdGlvbihoYW5kbGUsIHNlY3Rpb24pOworCisJLyogTWFrZSBycm51bSByaWdodC4gKi8KKwlpZiAocnJudW0gPT0gLTEpCisJCXJybnVtID0gaGFuZGxlLT5fcnJudW07CisJaWYgKHJybnVtIDwgMCB8fCBycm51bSA+PSBoYW5kbGUtPl9jb3VudHNbKGludClzZWN0aW9uXSkKKwkJUkVURVJSKEVOT0RFVik7CisJaWYgKHJybnVtIDwgaGFuZGxlLT5fcnJudW0pCisJCXNldHNlY3Rpb24oaGFuZGxlLCBzZWN0aW9uKTsKKwlpZiAocnJudW0gPiBoYW5kbGUtPl9ycm51bSkgeworCQliID0gbnNfc2tpcHJyKGhhbmRsZS0+X21zZ19wdHIsIGhhbmRsZS0+X2VvbSwgc2VjdGlvbiwKKwkJCSAgICAgIHJybnVtIC0gaGFuZGxlLT5fcnJudW0pOworCisJCWlmIChiIDwgMCkKKwkJCXJldHVybiAoLTEpOworCQloYW5kbGUtPl9tc2dfcHRyICs9IGI7CisJCWhhbmRsZS0+X3JybnVtID0gcnJudW07CisJfQorCisJLyogRG8gdGhlIHBhcnNlLiAqLworCWIgPSBuc19uYW1lX3VucGFjazIoaGFuZGxlLT5fbXNnLCBoYW5kbGUtPl9lb20sIGhhbmRsZS0+X21zZ19wdHIsCisJCQkgICAgcnItPm5uYW1lLCBOU19NQVhOTkFNRSwgJnJyLT5ubmFtZWwpOworCWlmIChiIDwgMCkKKwkJcmV0dXJuICgtMSk7CisJaGFuZGxlLT5fbXNnX3B0ciArPSBiOworCWlmIChoYW5kbGUtPl9tc2dfcHRyICsgTlNfSU5UMTZTWiArIE5TX0lOVDE2U1ogPiBoYW5kbGUtPl9lb20pCisJCVJFVEVSUihFTVNHU0laRSk7CisJTlNfR0VUMTYocnItPnR5cGUsIGhhbmRsZS0+X21zZ19wdHIpOworCU5TX0dFVDE2KHJyLT5ycl9jbGFzcywgaGFuZGxlLT5fbXNnX3B0cik7CisJaWYgKHNlY3Rpb24gPT0gbnNfc19xZCkgeworCQlyci0+dHRsID0gMDsKKwkJcnItPnJkbGVuZ3RoID0gMDsKKwkJcnItPnJkYXRhID0gTlVMTDsKKwl9IGVsc2UgeworCQlpZiAoaGFuZGxlLT5fbXNnX3B0ciArIE5TX0lOVDMyU1ogKyBOU19JTlQxNlNaID4gaGFuZGxlLT5fZW9tKQorCQkJUkVURVJSKEVNU0dTSVpFKTsKKwkJTlNfR0VUMzIocnItPnR0bCwgaGFuZGxlLT5fbXNnX3B0cik7CisJCU5TX0dFVDE2KHJyLT5yZGxlbmd0aCwgaGFuZGxlLT5fbXNnX3B0cik7CisJCWlmIChoYW5kbGUtPl9tc2dfcHRyICsgcnItPnJkbGVuZ3RoID4gaGFuZGxlLT5fZW9tKQorCQkJUkVURVJSKEVNU0dTSVpFKTsKKwkJcnItPnJkYXRhID0gaGFuZGxlLT5fbXNnX3B0cjsKKwkJaGFuZGxlLT5fbXNnX3B0ciArPSByci0+cmRsZW5ndGg7CisJfQorCWlmICgrK2hhbmRsZS0+X3JybnVtID4gaGFuZGxlLT5fY291bnRzWyhpbnQpc2VjdGlvbl0pCisJCXNldHNlY3Rpb24oaGFuZGxlLCAobnNfc2VjdCkoKGludClzZWN0aW9uICsgMSkpOworCisJLyogQWxsIGRvbmUuICovCisJcmV0dXJuICgwKTsKK30KKworLyogUHJpdmF0ZS4gKi8KKworc3RhdGljIHZvaWQKK3NldHNlY3Rpb24obnNfbXNnICptc2csIG5zX3NlY3Qgc2VjdCkgeworCW1zZy0+X3NlY3QgPSBzZWN0OworCWlmIChzZWN0ID09IG5zX3NfbWF4KSB7CisJCW1zZy0+X3JybnVtID0gLTE7CisJCW1zZy0+X21zZ19wdHIgPSBOVUxMOworCX0gZWxzZSB7CisJCW1zZy0+X3JybnVtID0gMDsKKwkJbXNnLT5fbXNnX3B0ciA9IG1zZy0+X3NlY3Rpb25zWyhpbnQpc2VjdF07CisJfQorfQpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvbmFtZXNlci9uc19wcmludC5jIGIvbGliYy9kbnMvbmFtZXNlci9uc19wcmludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNmExZDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Rucy9uYW1lc2VyL25zX3ByaW50LmMKQEAgLTAsMCArMSwxMjY1IEBACisvKgkkTmV0QlNEOiBuc19wcmludC5jLHYgMS4xMSAyMDEyLzAzLzEzIDIxOjEzOjM5IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWZuZGVmIGxpbnQKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zX3ByaW50LmMsdiAxLjEyIDIwMDkvMDMvMDMgMDU6Mjk6NTggZWFjaCBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IG5zX3ByaW50LmMsdiAxLjExIDIwMTIvMDMvMTMgMjE6MTM6MzkgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmCisKKy8qIEltcG9ydC4gKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKworI2luY2x1ZGUgPGlzYy9hc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8aXNjL2RzdC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaWZkZWYgU1BSSU5URl9DSEFSCisjIGRlZmluZSBTUFJJTlRGKHgpICgoaW50KXN0cmxlbihzcHJpbnRmLyoqL3gpKQorI2Vsc2UKKyMgZGVmaW5lIFNQUklOVEYoeCkgKHNwcmludGYgeCkKKyNlbmRpZgorCisjaWZuZGVmIE1JTgorI2RlZmluZQlNSU4oeCx5KQkoKHgpPCh5KT8oeCk6KHkpKQorI2VuZGlmCisKKy8qIEZvcndhcmQuICovCisKK3N0YXRpYyBzaXplX3QJcHJ1bmVfb3JpZ2luKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKm9yaWdpbik7CitzdGF0aWMgaW50CWNoYXJzdHIoY29uc3QgdV9jaGFyICpyZGF0YSwgY29uc3QgdV9jaGFyICplZGF0YSwKKwkJCWNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsKK3N0YXRpYyBpbnQJYWRkbmFtZShjb25zdCB1X2NoYXIgKm1zZywgc2l6ZV90IG1zZ2xlbiwKKwkJCWNvbnN0IHVfY2hhciAqKnAsIGNvbnN0IGNoYXIgKm9yaWdpbiwKKwkJCWNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsKK3N0YXRpYyB2b2lkCWFkZGxlbihzaXplX3QgbGVuLCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1Zmxlbik7CitzdGF0aWMgaW50CWFkZHN0cihjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sCisJCSAgICAgICBjaGFyICoqYnVmLCBzaXplX3QgKmJ1Zmxlbik7CitzdGF0aWMgaW50CWFkZHRhYihzaXplX3QgbGVuLCBzaXplX3QgdGFyZ2V0LCBpbnQgc3BhY2VkLAorCQkgICAgICAgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pOworCisvKiBNYWNyb3MuICovCisKKyNkZWZpbmUJVCh4KSBcCisJZG8geyBcCisJCWlmICgoeCkgPCAwKSBcCisJCQlyZXR1cm4gKC0xKTsgXAorCX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCitzdGF0aWMgY29uc3QgY2hhciBiYXNlMzJoZXhbXSA9CisgICAgICAgICIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVj0wMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1diI7CisvKiBQdWJsaWMuICovCisKKy8qCisgKglDb252ZXJ0IGFuIFJSIHRvIHByZXNlbnRhdGlvbiBmb3JtYXQuCisgKgorICogcmV0dXJuOgorICoJTnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiB0byBidWYsIG9yIC0xIChjaGVjayBlcnJubykuCisgKi8KK2ludAorbnNfc3ByaW50cnIoY29uc3QgbnNfbXNnICpoYW5kbGUsIGNvbnN0IG5zX3JyICpyciwKKwkgICAgY29uc3QgY2hhciAqbmFtZV9jdHgsIGNvbnN0IGNoYXIgKm9yaWdpbiwKKwkgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworCWludCBuOworCisJbiA9IG5zX3NwcmludHJyZihuc19tc2dfYmFzZSgqaGFuZGxlKSwgbnNfbXNnX3NpemUoKmhhbmRsZSksCisJCQkgbnNfcnJfbmFtZSgqcnIpLCBuc19ycl9jbGFzcygqcnIpLCBuc19ycl90eXBlKCpyciksCisJCQkgbnNfcnJfdHRsKCpyciksIG5zX3JyX3JkYXRhKCpyciksIG5zX3JyX3JkbGVuKCpyciksCisJCQkgbmFtZV9jdHgsIG9yaWdpbiwgYnVmLCBidWZsZW4pOworCXJldHVybiAobik7Cit9CisKKy8qCisgKglDb252ZXJ0IHRoZSBmaWVsZHMgb2YgYW4gUlIgaW50byBwcmVzZW50YXRpb24gZm9ybWF0LgorICoKKyAqIHJldHVybjoKKyAqCU51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gdG8gYnVmLCBvciAtMSAoY2hlY2sgZXJybm8pLgorICovCitpbnQKK25zX3NwcmludHJyZihjb25zdCB1X2NoYXIgKm1zZywgc2l6ZV90IG1zZ2xlbiwKKwkgICAgY29uc3QgY2hhciAqbmFtZSwgbnNfY2xhc3MgY2xhc3MsIG5zX3R5cGUgdHlwZSwKKwkgICAgdV9sb25nIHR0bCwgY29uc3QgdV9jaGFyICpyZGF0YSwgc2l6ZV90IHJkbGVuLAorCSAgICBjb25zdCBjaGFyICpuYW1lX2N0eCwgY29uc3QgY2hhciAqb3JpZ2luLAorCSAgICBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisJY29uc3QgY2hhciAqb2J1ZiA9IGJ1ZjsKKwljb25zdCB1X2NoYXIgKmVkYXRhID0gcmRhdGEgKyByZGxlbjsKKwlpbnQgc3BhY2VkID0gMDsKKworCWNvbnN0IGNoYXIgKmNvbW1lbnQ7CisJY2hhciB0bXBbMTAwXTsKKwlpbnQgbGVuLCB4OworCisJLyoKKwkgKiBPd25lci4KKwkgKi8KKwlpZiAobmFtZV9jdHggIT0gTlVMTCAmJiBuc19zYW1lbmFtZShuYW1lX2N0eCwgbmFtZSkgPT0gMSkgeworCQlUKGFkZHN0cigiXHRcdFx0IiwgKHNpemVfdCkzLCAmYnVmLCAmYnVmbGVuKSk7CisJfSBlbHNlIHsKKwkJbGVuID0gKGludClwcnVuZV9vcmlnaW4obmFtZSwgb3JpZ2luKTsKKwkJaWYgKCpuYW1lID09ICdcMCcpIHsKKwkJCWdvdG8gcm9vdDsKKwkJfSBlbHNlIGlmIChsZW4gPT0gMCkgeworCQkJVChhZGRzdHIoIkBcdFx0XHQiLCAoc2l6ZV90KTQsICZidWYsICZidWZsZW4pKTsKKwkJfSBlbHNlIHsKKwkJCVQoYWRkc3RyKG5hbWUsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCQkvKiBPcmlnaW4gbm90IHVzZWQgb3Igbm90IHJvb3QsIGFuZCBubyB0cmFpbGluZyBkb3Q/ICovCisJCQlpZiAoKChvcmlnaW4gPT0gTlVMTCB8fCBvcmlnaW5bMF0gPT0gJ1wwJykgfHwKKwkJCSAgICAob3JpZ2luWzBdICE9ICcuJyAmJiBvcmlnaW5bMV0gIT0gJ1wwJyAmJgorCQkJICAgIG5hbWVbbGVuXSA9PSAnXDAnKSkgJiYgbmFtZVtsZW4gLSAxXSAhPSAnLicpIHsKKyByb290OgorCQkJCVQoYWRkc3RyKCIuIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisJCQkJbGVuKys7CisJCQl9CisJCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgMjQsIHNwYWNlZCwgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9CisJfQorCisJLyoKKwkgKiBUVEwsIENsYXNzLCBUeXBlLgorCSAqLworCVQoeCA9IG5zX2Zvcm1hdF90dGwodHRsLCBidWYsIGJ1ZmxlbikpOworCWFkZGxlbigoc2l6ZV90KXgsICZidWYsICZidWZsZW4pOworCWxlbiA9IFNQUklOVEYoKHRtcCwgIiAlcyAlcyIsIHBfY2xhc3MoY2xhc3MpLCBwX3R5cGUodHlwZSkpKTsKKwlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJVChzcGFjZWQgPSBhZGR0YWIoKHNpemVfdCkoeCArIGxlbiksIChzaXplX3QpMTYsIHNwYWNlZCwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJLyoKKwkgKiBSRGF0YS4KKwkgKi8KKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIG5zX3RfYToKKwkJaWYgKHJkbGVuICE9IChzaXplX3QpTlNfSU5BRERSU1opCisJCQlnb3RvIGZvcm1lcnI7CisJCSh2b2lkKSBpbmV0X250b3AoQUZfSU5FVCwgcmRhdGEsIGJ1ZiwgKHNvY2tsZW5fdClidWZsZW4pOworCQlhZGRsZW4oc3RybGVuKGJ1ZiksICZidWYsICZidWZsZW4pOworCQlicmVhazsKKworCWNhc2UgbnNfdF9jbmFtZToKKwljYXNlIG5zX3RfbWI6CisJY2FzZSBuc190X21nOgorCWNhc2UgbnNfdF9tcjoKKwljYXNlIG5zX3RfbnM6CisJY2FzZSBuc190X3B0cjoKKwljYXNlIG5zX3RfZG5hbWU6CisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKwkJYnJlYWs7CisKKwljYXNlIG5zX3RfaGluZm86CisJY2FzZSBuc190X2lzZG46CisJCS8qIEZpcnN0IHdvcmQuICovCisJCVQobGVuID0gY2hhcnN0cihyZGF0YSwgZWRhdGEsICZidWYsICZidWZsZW4pKTsKKwkJaWYgKGxlbiA9PSAwKQorCQkJZ290byBmb3JtZXJyOworCQlyZGF0YSArPSBsZW47CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisKKworCQkvKiBTZWNvbmQgd29yZCwgb3B0aW9uYWwgaW4gSVNETiByZWNvcmRzLiAqLworCQlpZiAodHlwZSA9PSBuc190X2lzZG4gJiYgcmRhdGEgPT0gZWRhdGEpCisJCQlicmVhazsKKworCQlUKGxlbiA9IGNoYXJzdHIocmRhdGEsIGVkYXRhLCAmYnVmLCAmYnVmbGVuKSk7CisJCWlmIChsZW4gPT0gMCkKKwkJCWdvdG8gZm9ybWVycjsKKwkJcmRhdGEgKz0gbGVuOworCQlicmVhazsKKworCWNhc2UgbnNfdF9zb2E6IHsKKwkJdV9sb25nIHQ7CisKKwkJLyogU2VydmVyIG5hbWUuICovCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKwkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKKworCQkvKiBBZG1pbmlzdHJhdG9yIG5hbWUuICovCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKwkJVChhZGRzdHIoIiAoXG4iLCAoc2l6ZV90KTMsICZidWYsICZidWZsZW4pKTsKKwkJc3BhY2VkID0gMDsKKworCQlpZiAoKGVkYXRhIC0gcmRhdGEpICE9IDUqTlNfSU5UMzJTWikKKwkJCWdvdG8gZm9ybWVycjsKKworCQkvKiBTZXJpYWwgbnVtYmVyLiAqLworCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKKwkJVChhZGRzdHIoIlx0XHRcdFx0XHQiLCAoc2l6ZV90KTUsICZidWYsICZidWZsZW4pKTsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJWx1IiwgdCkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoc3BhY2VkID0gYWRkdGFiKChzaXplX3QpbGVuLCAoc2l6ZV90KTE2LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKKwkJVChhZGRzdHIoIjsgc2VyaWFsXG4iLCAoc2l6ZV90KTksICZidWYsICZidWZsZW4pKTsKKwkJc3BhY2VkID0gMDsKKworCQkvKiBSZWZyZXNoIGludGVydmFsLiAqLworCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKKwkJVChhZGRzdHIoIlx0XHRcdFx0XHQiLCAoc2l6ZV90KTUsICZidWYsICZidWZsZW4pKTsKKwkJVChsZW4gPSBuc19mb3JtYXRfdHRsKHQsIGJ1ZiwgYnVmbGVuKSk7CisJCWFkZGxlbigoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1Zmxlbik7CisJCVQoc3BhY2VkID0gYWRkdGFiKChzaXplX3QpbGVuLCAoc2l6ZV90KTE2LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKKwkJVChhZGRzdHIoIjsgcmVmcmVzaFxuIiwgKHNpemVfdCkxMCwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlzcGFjZWQgPSAwOworCisJCS8qIFJldHJ5IGludGVydmFsLiAqLworCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKKwkJVChhZGRzdHIoIlx0XHRcdFx0XHQiLCAoc2l6ZV90KTUsICZidWYsICZidWZsZW4pKTsKKwkJVChsZW4gPSBuc19mb3JtYXRfdHRsKHQsIGJ1ZiwgYnVmbGVuKSk7CisJCWFkZGxlbigoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1Zmxlbik7CisJCVQoc3BhY2VkID0gYWRkdGFiKChzaXplX3QpbGVuLCAoc2l6ZV90KTE2LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKKwkJVChhZGRzdHIoIjsgcmV0cnlcbiIsIChzaXplX3QpOCwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlzcGFjZWQgPSAwOworCisJCS8qIEV4cGlyeS4gKi8KKwkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7CisJCVQoYWRkc3RyKCJcdFx0XHRcdFx0IiwgKHNpemVfdCk1LCAmYnVmLCAmYnVmbGVuKSk7CisJCVQobGVuID0gbnNfZm9ybWF0X3R0bCh0LCBidWYsIGJ1ZmxlbikpOworCQlhZGRsZW4oKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pOworCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCI7IGV4cGlyeVxuIiwgKHNpemVfdCk5LCAmYnVmLCAmYnVmbGVuKSk7CisJCXNwYWNlZCA9IDA7CisKKwkJLyogTWluaW11bSBUVEwuICovCisJCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOworCQlUKGFkZHN0cigiXHRcdFx0XHRcdCIsIChzaXplX3QpNSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKGxlbiA9IG5zX2Zvcm1hdF90dGwodCwgYnVmLCBidWZsZW4pKTsKKwkJYWRkbGVuKChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKTsKKwkJVChhZGRzdHIoIiApIiwgKHNpemVfdCkyLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoc3BhY2VkID0gYWRkdGFiKChzaXplX3QpbGVuLCAoc2l6ZV90KTE2LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKKwkJVChhZGRzdHIoIjsgbWluaW11bVxuIiwgKHNpemVfdCkxMCwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3RfbXg6CisJY2FzZSBuc190X2Fmc2RiOgorCWNhc2UgbnNfdF9ydDoKKwljYXNlIG5zX3Rfa3g6IHsKKwkJdV9pbnQgdDsKKworCQlpZiAocmRsZW4gPCAoc2l6ZV90KU5TX0lOVDE2U1opCisJCQlnb3RvIGZvcm1lcnI7CisKKwkJLyogUHJpb3JpdHkuICovCisJCXQgPSBuc19nZXQxNihyZGF0YSk7CisJCXJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICIsIHQpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIFRhcmdldC4gKi8KKwkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3RfcHg6IHsKKwkJdV9pbnQgdDsKKworCQlpZiAocmRsZW4gPCAoc2l6ZV90KU5TX0lOVDE2U1opCisJCQlnb3RvIGZvcm1lcnI7CisKKwkJLyogUHJpb3JpdHkuICovCisJCXQgPSBuc19nZXQxNihyZGF0YSk7CisJCXJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICIsIHQpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIE5hbWUxLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogTmFtZTIuICovCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X3gyNToKKwkJVChsZW4gPSBjaGFyc3RyKHJkYXRhLCBlZGF0YSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlpZiAobGVuID09IDApCisJCQlnb3RvIGZvcm1lcnI7CisJCXJkYXRhICs9IGxlbjsKKwkJYnJlYWs7CisKKwljYXNlIG5zX3RfdHh0OgorCWNhc2UgbnNfdF9zcGY6CisJCXdoaWxlIChyZGF0YSA8IGVkYXRhKSB7CisJCQlUKGxlbiA9IGNoYXJzdHIocmRhdGEsIGVkYXRhLCAmYnVmLCAmYnVmbGVuKSk7CisJCQlpZiAobGVuID09IDApCisJCQkJZ290byBmb3JtZXJyOworCQkJcmRhdGEgKz0gbGVuOworCQkJaWYgKHJkYXRhIDwgZWRhdGEpCisJCQkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgbnNfdF9uc2FwOiB7CisJCWNoYXIgdFsyKzI1NSozXTsKKworCQkodm9pZCkgaW5ldF9uc2FwX250b2EoKGludClyZGxlbiwgcmRhdGEsIHQpOworCQlUKGFkZHN0cih0LCBzdHJsZW4odCksICZidWYsICZidWZsZW4pKTsKKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF9hYWFhOgorCQlpZiAocmRsZW4gIT0gKHNpemVfdClOU19JTjZBRERSU1opCisJCQlnb3RvIGZvcm1lcnI7CisJCSh2b2lkKSBpbmV0X250b3AoQUZfSU5FVDYsIHJkYXRhLCBidWYsIChzb2NrbGVuX3QpYnVmbGVuKTsKKwkJYWRkbGVuKHN0cmxlbihidWYpLCAmYnVmLCAmYnVmbGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIG5zX3RfbG9jOiB7CisJCWNoYXIgdFsyNTVdOworCisJCS8qIFhYWCBwcm90b2NvbCBmb3JtYXQgY2hlY2tpbmc/ICovCisJCSh2b2lkKSBsb2NfbnRvYShyZGF0YSwgdCk7CisJCVQoYWRkc3RyKHQsIHN0cmxlbih0KSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X25hcHRyOiB7CisJCXVfaW50IG9yZGVyLCBwcmVmZXJlbmNlOworCQljaGFyIHRbNTBdOworCisJCWlmIChyZGxlbiA8IDJVKk5TX0lOVDE2U1opCisJCQlnb3RvIGZvcm1lcnI7CisKKwkJLyogT3JkZXIsIFByZWNlZGVuY2UuICovCisJCW9yZGVyID0gbnNfZ2V0MTYocmRhdGEpOwlyZGF0YSArPSBOU19JTlQxNlNaOworCQlwcmVmZXJlbmNlID0gbnNfZ2V0MTYocmRhdGEpOwlyZGF0YSArPSBOU19JTlQxNlNaOworCQlsZW4gPSBTUFJJTlRGKCh0LCAiJXUgJXUgIiwgb3JkZXIsIHByZWZlcmVuY2UpKTsKKwkJVChhZGRzdHIodCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBGbGFncy4gKi8KKwkJVChsZW4gPSBjaGFyc3RyKHJkYXRhLCBlZGF0YSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlpZiAobGVuID09IDApCisJCQlnb3RvIGZvcm1lcnI7CisJCXJkYXRhICs9IGxlbjsKKwkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKKworCQkvKiBTZXJ2aWNlLiAqLworCQlUKGxlbiA9IGNoYXJzdHIocmRhdGEsIGVkYXRhLCAmYnVmLCAmYnVmbGVuKSk7CisJCWlmIChsZW4gPT0gMCkKKwkJCWdvdG8gZm9ybWVycjsKKwkJcmRhdGEgKz0gbGVuOworCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIFJlZ2V4cC4gKi8KKwkJVChsZW4gPSBjaGFyc3RyKHJkYXRhLCBlZGF0YSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlpZiAobGVuIDwgMCkKKwkJCXJldHVybiAoLTEpOworCQlpZiAobGVuID09IDApCisJCQlnb3RvIGZvcm1lcnI7CisJCXJkYXRhICs9IGxlbjsKKwkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKKworCQkvKiBTZXJ2ZXIuICovCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF9zcnY6IHsKKwkJdV9pbnQgcHJpb3JpdHksIHdlaWdodCwgcG9ydDsKKwkJY2hhciB0WzUwXTsKKworCQlpZiAocmRsZW4gPCAzVSpOU19JTlQxNlNaKQorCQkJZ290byBmb3JtZXJyOworCisJCS8qIFByaW9yaXR5LCBXZWlnaHQsIFBvcnQuICovCisJCXByaW9yaXR5ID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJd2VpZ2h0ICAgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOworCQlwb3J0ICAgICA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWxlbiA9IFNQUklOVEYoKHQsICIldSAldSAldSAiLCBwcmlvcml0eSwgd2VpZ2h0LCBwb3J0KSk7CisJCVQoYWRkc3RyKHQsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogU2VydmVyLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3RfbWluZm86CisJY2FzZSBuc190X3JwOgorCQkvKiBOYW1lMS4gKi8KKwkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIE5hbWUyLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJYnJlYWs7CisKKwljYXNlIG5zX3Rfd2tzOiB7CisJCWludCBuLCBsY250OworCisJCWlmIChyZGxlbiA8IDFVICsgTlNfSU5UMzJTWikKKwkJCWdvdG8gZm9ybWVycjsKKworCQkvKiBBZGRyZXNzLiAqLworCQkodm9pZCkgaW5ldF9udG9wKEFGX0lORVQsIHJkYXRhLCBidWYsIChzb2NrbGVuX3QpYnVmbGVuKTsKKwkJYWRkbGVuKHN0cmxlbihidWYpLCAmYnVmLCAmYnVmbGVuKTsKKwkJcmRhdGEgKz0gTlNfSU5BRERSU1o7CisKKwkJLyogUHJvdG9jb2wuICovCisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiAldSAoICIsICpyZGF0YSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCXJkYXRhICs9IE5TX0lOVDhTWjsKKworCQkvKiBCaXQgbWFwLiAqLworCQluID0gMDsKKwkJbGNudCA9IDA7CisJCXdoaWxlIChyZGF0YSA8IGVkYXRhKSB7CisJCQl1X2ludCBjID0gKnJkYXRhKys7CisJCQlkbyB7CisJCQkJaWYgKGMgJiAwMjAwKSB7CisJCQkJCWlmIChsY250ID09IDApIHsKKwkJCQkJCVQoYWRkc3RyKCJcblx0XHRcdFx0IiwgKHNpemVfdCk1LAorCQkJCQkJCSAmYnVmLCAmYnVmbGVuKSk7CisJCQkJCQlsY250ID0gMTA7CisJCQkJCQlzcGFjZWQgPSAwOworCQkJCQl9CisJCQkJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVkICIsIG4pKTsKKwkJCQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJCQlsY250LS07CisJCQkJfQorCQkJCWMgPDw9IDE7CisJCQl9IHdoaWxlICgrK24gJiAwNyk7CisJCX0KKwkJVChhZGRzdHIoIikiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKKworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X2tleToKKwljYXNlIG5zX3RfZG5za2V5OiB7CisJCWNoYXIgYmFzZTY0X2tleVtOU19NRDVSU0FfTUFYX0JBU0U2NF07CisJCXVfaW50IGtleWZsYWdzLCBwcm90b2NvbCwgYWxnb3JpdGhtLCBrZXlfaWQ7CisJCWNvbnN0IGNoYXIgKmxlYWRlcjsKKwkJaW50IG47CisKKwkJaWYgKHJkbGVuIDwgMFUgKyBOU19JTlQxNlNaICsgTlNfSU5UOFNaICsgTlNfSU5UOFNaKQorCQkJZ290byBmb3JtZXJyOworCisJCS8qIEtleSBmbGFncywgUHJvdG9jb2wsIEFsZ29yaXRobS4gKi8KKyNpZm5kZWYgX0xJQkMKKwkJa2V5X2lkID0gZHN0X3NfZG5zX2tleV9pZChyZGF0YSwgZWRhdGEtcmRhdGEpOworI2Vsc2UKKwkJa2V5X2lkID0gMDsKKyNlbmRpZgorCQlrZXlmbGFncyA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCXByb3RvY29sID0gKnJkYXRhKys7CisJCWFsZ29yaXRobSA9ICpyZGF0YSsrOworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIweCUwNHggJXUgJXUiLAorCQkJICAgICAgIGtleWZsYWdzLCBwcm90b2NvbCwgYWxnb3JpdGhtKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBQdWJsaWMga2V5IGRhdGEuICovCisJCWxlbiA9IGI2NF9udG9wKHJkYXRhLCAoc2l6ZV90KShlZGF0YSAtIHJkYXRhKSwKKwkJCSAgICAgICBiYXNlNjRfa2V5LCBzaXplb2YgYmFzZTY0X2tleSk7CisJCWlmIChsZW4gPCAwKQorCQkJZ290byBmb3JtZXJyOworCQlpZiAobGVuID4gMTUpIHsKKwkJCVQoYWRkc3RyKCIgKCIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJbGVhZGVyID0gIlxuXHRcdCI7CisJCQlzcGFjZWQgPSAwOworCQl9IGVsc2UKKwkJCWxlYWRlciA9ICIgIjsKKwkJZm9yIChuID0gMDsgbiA8IGxlbjsgbiArPSA0OCkgeworCQkJVChhZGRzdHIobGVhZGVyLCBzdHJsZW4obGVhZGVyKSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJVChhZGRzdHIoYmFzZTY0X2tleSArIG4sIChzaXplX3QpTUlOKGxlbiAtIG4sIDQ4KSwKKwkJCQkgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9CisJCWlmIChsZW4gPiAxNSkKKwkJCVQoYWRkc3RyKCIgKSIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQluID0gU1BSSU5URigodG1wLCAiIDsga2V5X3RhZz0gJXUiLCBrZXlfaWQpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KW4sICZidWYsICZidWZsZW4pKTsKKworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X3NpZzoKKwljYXNlIG5zX3RfcnJzaWc6IHsKKwkJY2hhciBiYXNlNjRfa2V5W05TX01ENVJTQV9NQVhfQkFTRTY0XTsKKwkJdV9pbnQgdHlwLCBhbGdvcml0aG0sIGxhYmVscywgZm9vdHByaW50OworCQljb25zdCBjaGFyICpsZWFkZXI7CisJCXVfbG9uZyB0OworCQlpbnQgbjsKKworCQlpZiAocmRsZW4gPCAyMlUpCisJCQlnb3RvIGZvcm1lcnI7CisKKwkJLyogVHlwZSBjb3ZlcmVkLCBBbGdvcml0aG0sIExhYmVsIGNvdW50LCBPcmlnaW5hbCBUVEwuICovCisJICAgICAgICB0eXAgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOworCQlhbGdvcml0aG0gPSAqcmRhdGErKzsKKwkJbGFiZWxzID0gKnJkYXRhKys7CisJCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIlcyAlZCAlZCAlbHUgIiwKKwkJCSAgICAgICBwX3R5cGUoKGludCl0eXApLCBhbGdvcml0aG0sIGxhYmVscywgdCkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCWlmIChsYWJlbHMgPiAodV9pbnQpZG5fY291bnRfbGFiZWxzKG5hbWUpKQorCQkJZ290byBmb3JtZXJyOworCisJCS8qIFNpZ25hdHVyZSBleHBpcnkuICovCisJCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIlcyAiLCBwX3NlY3N0b2RhdGUodCkpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIFRpbWUgc2lnbmVkLiAqLworCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXMgIiwgcF9zZWNzdG9kYXRlKHQpKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBTaWduYXR1cmUgRm9vdHByaW50LiAqLworCQlmb290cHJpbnQgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCBmb290cHJpbnQpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIFNpZ25lcidzIG5hbWUuICovCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBTaWduYXR1cmUuICovCisJCWxlbiA9IGI2NF9udG9wKHJkYXRhLCAoc2l6ZV90KShlZGF0YSAtIHJkYXRhKSwKKwkJCSAgICAgICBiYXNlNjRfa2V5LCBzaXplb2YgYmFzZTY0X2tleSk7CisJCWlmIChsZW4gPiAxNSkgeworCQkJVChhZGRzdHIoIiAoIiwgKHNpemVfdCkyLCAmYnVmLCAmYnVmbGVuKSk7CisJCQlsZWFkZXIgPSAiXG5cdFx0IjsKKwkJCXNwYWNlZCA9IDA7CisJCX0gZWxzZQorCQkJbGVhZGVyID0gIiAiOworCQlpZiAobGVuIDwgMCkKKwkJCWdvdG8gZm9ybWVycjsKKwkJZm9yIChuID0gMDsgbiA8IGxlbjsgbiArPSA0OCkgeworCQkJVChhZGRzdHIobGVhZGVyLCBzdHJsZW4obGVhZGVyKSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJVChhZGRzdHIoYmFzZTY0X2tleSArIG4sIChzaXplX3QpTUlOKGxlbiAtIG4sIDQ4KSwKKwkJCQkgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9CisJCWlmIChsZW4gPiAxNSkKKwkJCVQoYWRkc3RyKCIgKSIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X254dDogeworCQlwdHJkaWZmX3QgbiwgYzsKKworCQkvKiBOZXh0IGRvbWFpbiBuYW1lLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogVHlwZSBiaXQgbWFwLiAqLworCQluID0gZWRhdGEgLSByZGF0YTsKKwkJZm9yIChjID0gMDsgYyA8IG4qODsgYysrKQorCQkJaWYgKE5TX05YVF9CSVRfSVNTRVQoYywgcmRhdGEpKSB7CisJCQkJbGVuID0gU1BSSU5URigodG1wLCAiICVzIiwgcF90eXBlKChpbnQpYykpKTsKKwkJCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCQl9CisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3RfY2VydDogeworCQl1X2ludCBjX3R5cGUsIGtleV90YWcsIGFsZzsKKwkJaW50IG47CisJCXNpemVfdCBzaXo7CisJCWNoYXIgYmFzZTY0X2NlcnRbODE5Ml0sIHRtcDFbNDBdOworCQljb25zdCBjaGFyICpsZWFkZXI7CisKKwkJY190eXBlICA9IG5zX2dldDE2KHJkYXRhKTsgcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJa2V5X3RhZyA9IG5zX2dldDE2KHJkYXRhKTsgcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJYWxnID0gKHVfaW50KSAqcmRhdGErKzsKKworCQlsZW4gPSBTUFJJTlRGKCh0bXAxLCAiJWQgJWQgJWQgIiwgY190eXBlLCBrZXlfdGFnLCBhbGcpKTsKKwkJVChhZGRzdHIodG1wMSwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJc2l6ID0gKGVkYXRhLXJkYXRhKSo0LzMgKyA0OyAvKiAiKzQiIGFjY291bnRzIGZvciB0cmFpbGluZyBcMCAqLworCQlpZiAoc2l6ID4gc2l6ZW9mKGJhc2U2NF9jZXJ0KSAqIDMvNCkgeworCQkJY29uc3QgY2hhciAqc3RyID0gInJlY29yZCB0b28gbG9uZyB0byBwcmludCI7CisJCQlUKGFkZHN0cihzdHIsIHN0cmxlbihzdHIpLCAmYnVmLCAmYnVmbGVuKSk7CisJCX0KKwkJZWxzZSB7CisJCQlsZW4gPSBiNjRfbnRvcChyZGF0YSwgKHNpemVfdCkoZWRhdGEtcmRhdGEpLAorCQkJICAgIGJhc2U2NF9jZXJ0LCBzaXopOworCisJCQlpZiAobGVuIDwgMCkKKwkJCQlnb3RvIGZvcm1lcnI7CisJCQllbHNlIGlmIChsZW4gPiAxNSkgeworCQkJCVQoYWRkc3RyKCIgKCIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJCWxlYWRlciA9ICJcblx0XHQiOworCQkJCXNwYWNlZCA9IDA7CisJCQl9CisJCQllbHNlCisJCQkJbGVhZGVyID0gIiAiOworCisJCQlmb3IgKG4gPSAwOyBuIDwgbGVuOyBuICs9IDQ4KSB7CisJCQkJVChhZGRzdHIobGVhZGVyLCBzdHJsZW4obGVhZGVyKSwKKwkJCQkJICZidWYsICZidWZsZW4pKTsKKwkJCQlUKGFkZHN0cihiYXNlNjRfY2VydCArIG4sIChzaXplX3QpTUlOKGxlbiAtIG4sIDQ4KSwKKwkJCQkJICZidWYsICZidWZsZW4pKTsKKwkJCX0KKwkJCWlmIChsZW4gPiAxNSkKKwkJCQlUKGFkZHN0cigiICkiLCAoc2l6ZV90KTIsICZidWYsICZidWZsZW4pKTsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X3RrZXk6IHsKKwkJLyogS0pEIC0gbmVlZCB0byBjb21wbGV0ZSB0aGlzICovCisJCXVfbG9uZyB0OworCQlpbnQgbW9kZSwgZXJyLCBrZXlzaXplOworCisJCS8qIEFsZ29yaXRobSBuYW1lLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogSW5jZXB0aW9uLiAqLworCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXMgIiwgcF9zZWNzdG9kYXRlKHQpKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBFeHBlcmF0aW9uLiAqLworCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXMgIiwgcF9zZWNzdG9kYXRlKHQpKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBNb2RlICwgRXJyb3IsIEtleSBTaXplLiAqLworCQkvKiBQcmlvcml0eSwgV2VpZ2h0LCBQb3J0LiAqLworCQltb2RlID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJZXJyICA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWtleXNpemUgID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgJXUgJXUgIiwgbW9kZSwgZXJyLCBrZXlzaXplKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBYWFggbmVlZCB0byBkdW1wIGtleSwgcHJpbnQgb3RoZXJkYXRhIGxlbmd0aCAmIG90aGVyIGRhdGEgKi8KKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF90c2lnOiB7CisJCS8qIEJFVyAtIG5lZWQgdG8gY29tcGxldGUgdGhpcyAqLworCQlpbnQgbjsKKworCQlUKGxlbiA9IGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisJCXJkYXRhICs9IDg7IC8qIHRpbWUgKi8KKwkJbiA9IG5zX2dldDE2KHJkYXRhKTsgcmRhdGEgKz0gSU5UMTZTWjsKKwkJcmRhdGEgKz0gbjsgLyogc2lnICovCisJCW4gPSBuc19nZXQxNihyZGF0YSk7IHJkYXRhICs9IElOVDE2U1o7IC8qIG9yaWdpbmFsIGlkICovCisJCXNwcmludGYoYnVmLCAiJWQiLCBuc19nZXQxNihyZGF0YSkpOworCQlyZGF0YSArPSBJTlQxNlNaOworCQlhZGRsZW4oc3RybGVuKGJ1ZiksICZidWYsICZidWZsZW4pOworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X2E2OiB7CisJCXN0cnVjdCBpbjZfYWRkciBhOworCQlpbnQgcGJ5dGUsIHBiaXQ7CisKKwkJLyogcHJlZml4IGxlbmd0aCAqLworCQlpZiAocmRsZW4gPT0gMFUpIGdvdG8gZm9ybWVycjsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJWQgIiwgKnJkYXRhKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJcGJpdCA9ICpyZGF0YTsKKwkJaWYgKHBiaXQgPiAxMjgpIGdvdG8gZm9ybWVycjsKKwkJcGJ5dGUgPSAocGJpdCAmIH43KSAvIDg7CisJCXJkYXRhKys7CisKKwkJLyogYWRkcmVzcyBzdWZmaXg6IHByb3ZpZGVkIG9ubHkgd2hlbiBwcmVmaXggbGVuICE9IDEyOCAqLworCQlpZiAocGJpdCA8IDEyOCkgeworCQkJaWYgKHJkYXRhICsgcGJ5dGUgPj0gZWRhdGEpIGdvdG8gZm9ybWVycjsKKwkJCW1lbXNldCgmYSwgMCwgc2l6ZW9mKGEpKTsKKwkJCW1lbWNweSgmYS5zNl9hZGRyW3BieXRlXSwgcmRhdGEsIHNpemVvZihhKSAtIHBieXRlKTsKKwkJCSh2b2lkKSBpbmV0X250b3AoQUZfSU5FVDYsICZhLCBidWYsIChzb2NrbGVuX3QpYnVmbGVuKTsKKwkJCWFkZGxlbihzdHJsZW4oYnVmKSwgJmJ1ZiwgJmJ1Zmxlbik7CisJCQlyZGF0YSArPSBzaXplb2YoYSkgLSBwYnl0ZTsKKwkJfQorCisJCS8qIHByZWZpeCBuYW1lOiBwcm92aWRlZCBvbmx5IHdoZW4gcHJlZml4IGxlbiA+IDAgKi8KKwkJaWYgKHBiaXQgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAocmRhdGEgPj0gZWRhdGEpIGdvdG8gZm9ybWVycjsKKwkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKKwkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3Rfb3B0OiB7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1IGJ5dGVzIiwgY2xhc3MpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X2RzOgorCWNhc2UgbnNfdF9kbHY6CisJY2FzZSBuc190X3NzaGZwOiB7CisJCXVfaW50IHQ7CisKKwkJaWYgKHR5cGUgPT0gbnNfdF9kcyB8fCB0eXBlID09IG5zX3RfZGx2KSB7CisJCQlpZiAocmRsZW4gPCA0VSkgZ290byBmb3JtZXJyOworCQkJdCA9IG5zX2dldDE2KHJkYXRhKTsKKwkJCXJkYXRhICs9IE5TX0lOVDE2U1o7CisJCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCB0KSk7CisJCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCX0gZWxzZQorCQkJaWYgKHJkbGVuIDwgMlUpIGdvdG8gZm9ybWVycjsKKworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCAqcmRhdGEpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlyZGF0YSsrOworCisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICIsICpyZGF0YSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCXJkYXRhKys7CisKKwkJd2hpbGUgKHJkYXRhIDwgZWRhdGEpIHsKKwkJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiUwMlgiLCAqcmRhdGEpKTsKKwkJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJCXJkYXRhKys7CisJCX0KKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF9uc2VjMzoKKwljYXNlIG5zX3RfbnNlYzNwYXJhbTogeworCQl1X2ludCB0LCB3LCBsLCBqLCBrLCBjOworCisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICIsICpyZGF0YSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCXJkYXRhKys7CisKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgIiwgKnJkYXRhKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJcmRhdGErKzsKKworCQl0ID0gbnNfZ2V0MTYocmRhdGEpOworCQlyZGF0YSArPSBOU19JTlQxNlNaOworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCB0KSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQl0ID0gKnJkYXRhKys7CisJCWlmICh0ID09IDApIHsKKwkJCVQoYWRkc3RyKCItIiwgMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9IGVsc2UgeworCQkJd2hpbGUgKHQtLSA+IDApIHsKKwkJCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIlMDJYIiwgKnJkYXRhKSk7CisJCQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJCXJkYXRhKys7CisJCQl9CisJCX0KKwkJaWYgKHR5cGUgPT0gbnNfdF9uc2VjM3BhcmFtKQorCQkJYnJlYWs7CisJCVQoYWRkc3RyKCIgIiwgMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCXQgPSAqcmRhdGErKzsKKwkJd2hpbGUgKHQgPiAwKSB7CisJCQlzd2l0Y2ggKHQpIHsKKwkJCWNhc2UgMToKKwkJCQl0bXBbMF0gPSBiYXNlMzJoZXhbKCgodWludDMyX3QpcmRhdGFbMF0+PjMpJjB4MWYpXTsKKwkJCQl0bXBbMV0gPSBiYXNlMzJoZXhbKCgodWludDMyX3QpcmRhdGFbMF08PDIpJjB4MWMpXTsKKwkJCQl0bXBbMl0gPSB0bXBbM10gPSB0bXBbNF0gPSAnPSc7CisJCQkJdG1wWzVdID0gdG1wWzZdID0gdG1wWzddID0gJz0nOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCXRtcFswXSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVswXT4+MykmMHgxZildOworCQkJCXRtcFsxXSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVswXTw8MikmMHgxYyl8CisJCQkJCQkgICAoKCh1aW50MzJfdClyZGF0YVsxXT4+NikmMHgwMyldOworCQkJCXRtcFsyXSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVsxXT4+MSkmMHgxZildOworCQkJCXRtcFszXSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVsxXTw8NCkmMHgxMCldOworCQkJCXRtcFs0XSA9IHRtcFs1XSA9IHRtcFs2XSA9IHRtcFs3XSA9ICc9JzsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzoKKwkJCQl0bXBbMF0gPSBiYXNlMzJoZXhbKCgodWludDMyX3QpcmRhdGFbMF0+PjMpJjB4MWYpXTsKKwkJCQl0bXBbMV0gPSBiYXNlMzJoZXhbKCgodWludDMyX3QpcmRhdGFbMF08PDIpJjB4MWMpfAorCQkJCQkJICAgKCgodWludDMyX3QpcmRhdGFbMV0+PjYpJjB4MDMpXTsKKwkJCQl0bXBbMl0gPSBiYXNlMzJoZXhbKCgodWludDMyX3QpcmRhdGFbMV0+PjEpJjB4MWYpXTsKKwkJCQl0bXBbM10gPSBiYXNlMzJoZXhbKCgodWludDMyX3QpcmRhdGFbMV08PDQpJjB4MTApfAorCQkJCQkJICAgKCgodWludDMyX3QpcmRhdGFbMl0+PjQpJjB4MGYpXTsKKwkJCQl0bXBbNF0gPSBiYXNlMzJoZXhbKCgodWludDMyX3QpcmRhdGFbMl08PDEpJjB4MWUpXTsKKwkJCQl0bXBbNV0gPSB0bXBbNl0gPSB0bXBbN10gPSAnPSc7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ6CisJCQkJdG1wWzBdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzBdPj4zKSYweDFmKV07CisJCQkJdG1wWzFdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzBdPDwyKSYweDFjKXwKKwkJCQkJCSAgICgoKHVpbnQzMl90KXJkYXRhWzFdPj42KSYweDAzKV07CisJCQkJdG1wWzJdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzFdPj4xKSYweDFmKV07CisJCQkJdG1wWzNdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzFdPDw0KSYweDEwKXwKKwkJCQkJCSAgICgoKHVpbnQzMl90KXJkYXRhWzJdPj40KSYweDBmKV07CisJCQkJdG1wWzRdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzJdPDwxKSYweDFlKXwKKwkJCQkJCSAgICgoKHVpbnQzMl90KXJkYXRhWzNdPj43KSYweDAxKV07CisJCQkJdG1wWzVdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzNdPj4yKSYweDFmKV07CisJCQkJdG1wWzZdID0gYmFzZTMyaGV4WygodWludDMyX3QpcmRhdGFbM108PDMpJjB4MThdOworCQkJCXRtcFs3XSA9ICc9JzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdG1wWzBdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzBdPj4zKSYweDFmKV07CisJCQkJdG1wWzFdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzBdPDwyKSYweDFjKXwKKwkJCQkJCSAgICgoKHVpbnQzMl90KXJkYXRhWzFdPj42KSYweDAzKV07CisJCQkJdG1wWzJdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzFdPj4xKSYweDFmKV07CisJCQkJdG1wWzNdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzFdPDw0KSYweDEwKXwKKwkJCQkJCSAgICgoKHVpbnQzMl90KXJkYXRhWzJdPj40KSYweDBmKV07CisJCQkJdG1wWzRdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzJdPDwxKSYweDFlKXwKKwkJCQkJCSAgICgoKHVpbnQzMl90KXJkYXRhWzNdPj43KSYweDAxKV07CisJCQkJdG1wWzVdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzNdPj4yKSYweDFmKV07CisJCQkJdG1wWzZdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzNdPDwzKSYweDE4KXwKKwkJCQkJCSAgICgoKHVpbnQzMl90KXJkYXRhWzRdPj41KSYweDA3KV07CisJCQkJdG1wWzddID0gYmFzZTMyaGV4WyhyZGF0YVs0XSYweDFmKV07CisJCQkJYnJlYWs7CisJCQl9CisJCQlUKGFkZHN0cih0bXAsIDgsICZidWYsICZidWZsZW4pKTsKKwkJCWlmICh0ID49IDUpIHsKKwkJCQlyZGF0YSArPSA1OworCQkJCXQgLT0gNTsKKwkJCX0gZWxzZSB7CisJCQkJcmRhdGEgKz0gdDsKKwkJCQl0IC09IHQ7CisJCQl9CisJCX0KKworCQl3aGlsZSAocmRhdGEgPCBlZGF0YSkgeworCQkJdyA9ICpyZGF0YSsrOworCQkJbCA9ICpyZGF0YSsrOworCQkJZm9yIChqID0gMDsgaiA8IGw7IGorKykgeworCQkJCWlmIChyZGF0YVtqXSA9PSAwKQorCQkJCQljb250aW51ZTsKKwkJCQlmb3IgKGsgPSAwOyBrIDwgODsgaysrKSB7CisJCQkJCWlmICgocmRhdGFbal0gJiAoMHg4MCA+PiBrKSkgPT0gMCkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQljID0gdyAqIDI1NiArIGogKiA4ICsgazsKKwkJCQkJbGVuID0gU1BSSU5URigodG1wLCAiICVzIiwgcF90eXBlKChuc190eXBlKWMpKSk7CisJCQkJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJCQl9CisJCQl9CisJCQlyZGF0YSArPSBsOworCQl9CisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3RfbnNlYzogeworCQl1X2ludCB3LCBsLCBqLCBrLCBjOworCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKworCQl3aGlsZSAocmRhdGEgPCBlZGF0YSkgeworCQkJdyA9ICpyZGF0YSsrOworCQkJbCA9ICpyZGF0YSsrOworCQkJZm9yIChqID0gMDsgaiA8IGw7IGorKykgeworCQkJCWlmIChyZGF0YVtqXSA9PSAwKQorCQkJCQljb250aW51ZTsKKwkJCQlmb3IgKGsgPSAwOyBrIDwgODsgaysrKSB7CisJCQkJCWlmICgocmRhdGFbal0gJiAoMHg4MCA+PiBrKSkgPT0gMCkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQljID0gdyAqIDI1NiArIGogKiA4ICsgazsKKwkJCQkJbGVuID0gU1BSSU5URigodG1wLCAiICVzIiwgcF90eXBlKChuc190eXBlKWMpKSk7CisJCQkJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJCQl9CisJCQl9CisJCQlyZGF0YSArPSBsOworCQl9CisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3RfZGhjaWQ6IHsKKwkJaW50IG47CisJCXVuc2lnbmVkIGludCBzaXo7CisJCWNoYXIgYmFzZTY0X2RoY2lkWzgxOTJdOworCQljb25zdCBjaGFyICpsZWFkZXI7CisKKwkJc2l6ID0gKGludCkoZWRhdGEtcmRhdGEpKjQvMyArIDQ7IC8qICIrNCIgYWNjb3VudHMgZm9yIHRyYWlsaW5nIFwwICovCisJCWlmIChzaXogPiBzaXplb2YoYmFzZTY0X2RoY2lkKSAqIDMvNCkgeworCQkJY29uc3QgY2hhciAqc3RyID0gInJlY29yZCB0b28gbG9uZyB0byBwcmludCI7CisJCQlUKGFkZHN0cihzdHIsIHN0cmxlbihzdHIpLCAmYnVmLCAmYnVmbGVuKSk7CisJCX0gZWxzZSB7CisJCQlsZW4gPSBiNjRfbnRvcChyZGF0YSwgKHNpemVfdCkoZWRhdGEtcmRhdGEpLAorCQkJICAgIGJhc2U2NF9kaGNpZCwgc2l6KTsKKworCQkJaWYgKGxlbiA8IDApCisJCQkJZ290byBmb3JtZXJyOworCisJCQllbHNlIGlmIChsZW4gPiAxNSkgeworCQkJCVQoYWRkc3RyKCIgKCIsIDIsICZidWYsICZidWZsZW4pKTsKKwkJCQlsZWFkZXIgPSAiXG5cdFx0IjsKKwkJCQlzcGFjZWQgPSAwOworCQkJfQorCQkJZWxzZQorCQkJCWxlYWRlciA9ICIgIjsKKworCQkJZm9yIChuID0gMDsgbiA8IGxlbjsgbiArPSA0OCkgeworCQkJCVQoYWRkc3RyKGxlYWRlciwgc3RybGVuKGxlYWRlciksCisJCQkJCSAmYnVmLCAmYnVmbGVuKSk7CisJCQkJVChhZGRzdHIoYmFzZTY0X2RoY2lkICsgbiwKKwkJCQkgICAgKHNpemVfdClNSU4obGVuIC0gbiwgNDgpLCAmYnVmLCAmYnVmbGVuKSk7CisJCQl9CisJCQlpZiAobGVuID4gMTUpCisJCQkJVChhZGRzdHIoIiApIiwgMiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9CisJCWJyZWFrOworCX0KKworCWNhc2UgbnNfdF9pcHNlY2tleTogeworCQlpbnQgbjsKKwkJdW5zaWduZWQgaW50IHNpejsKKwkJY2hhciBiYXNlNjRfa2V5WzgxOTJdOworCQljb25zdCBjaGFyICpsZWFkZXI7CisKKwkJaWYgKHJkbGVuIDwgMikKKwkJCWdvdG8gZm9ybWVycjsKKworCQlzd2l0Y2ggKHJkYXRhWzFdKSB7CisJCWNhc2UgMDoKKwkJY2FzZSAzOgorCQkJaWYgKHJkbGVuIDwgMykKKwkJCQlnb3RvIGZvcm1lcnI7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJaWYgKHJkbGVuIDwgNykKKwkJCQlnb3RvIGZvcm1lcnI7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJaWYgKHJkbGVuIDwgMTkpCisJCQkJZ290byBmb3JtZXJyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb21tZW50ID0gInVua25vd24gSVBTRUNLRVkgZ2F0ZXdheSB0eXBlIjsKKwkJCWdvdG8gaGV4aWZ5OworCQl9CisKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgIiwgKnJkYXRhKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJcmRhdGErKzsKKworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCAqcmRhdGEpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlyZGF0YSsrOworCisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICIsICpyZGF0YSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCXJkYXRhKys7CisKKwkJc3dpdGNoIChyZGF0YVstMl0pIHsKKwkJY2FzZSAwOgorCQkJVChhZGRzdHIoIi4iLCAxLCAmYnVmLCAmYnVmbGVuKSk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJKHZvaWQpIGluZXRfbnRvcChBRl9JTkVULCByZGF0YSwgYnVmLCAoc29ja2xlbl90KWJ1Zmxlbik7CisJCQlhZGRsZW4oc3RybGVuKGJ1ZiksICZidWYsICZidWZsZW4pOworCQkJcmRhdGEgKz0gNDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQkodm9pZCkgaW5ldF9udG9wKEFGX0lORVQ2LCByZGF0YSwgYnVmLCAoc29ja2xlbl90KWJ1Zmxlbik7CisJCQlhZGRsZW4oc3RybGVuKGJ1ZiksICZidWYsICZidWZsZW4pOworCQkJcmRhdGEgKz0gMTY7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocmRhdGEgPj0gZWRhdGEpCisJCQlicmVhazsKKworCQlzaXogPSAoaW50KShlZGF0YS1yZGF0YSkqNC8zICsgNDsgLyogIis0IiBhY2NvdW50cyBmb3IgdHJhaWxpbmcgXDAgKi8KKwkJaWYgKHNpeiA+IHNpemVvZihiYXNlNjRfa2V5KSAqIDMvNCkgeworCQkJY29uc3QgY2hhciAqc3RyID0gInJlY29yZCB0b28gbG9uZyB0byBwcmludCI7CisJCQlUKGFkZHN0cihzdHIsIHN0cmxlbihzdHIpLCAmYnVmLCAmYnVmbGVuKSk7CisJCX0gZWxzZSB7CisJCQlsZW4gPSBiNjRfbnRvcChyZGF0YSwgKHNpemVfdCkoZWRhdGEtcmRhdGEpLAorCQkJICAgIGJhc2U2NF9rZXksIHNpeik7CisKKwkJCWlmIChsZW4gPCAwKQorCQkJCWdvdG8gZm9ybWVycjsKKworCQkJZWxzZSBpZiAobGVuID4gMTUpIHsKKwkJCQlUKGFkZHN0cigiICgiLCAyLCAmYnVmLCAmYnVmbGVuKSk7CisJCQkJbGVhZGVyID0gIlxuXHRcdCI7CisJCQkJc3BhY2VkID0gMDsKKwkJCX0KKwkJCWVsc2UKKwkJCQlsZWFkZXIgPSAiICI7CisKKwkJCWZvciAobiA9IDA7IG4gPCBsZW47IG4gKz0gNDgpIHsKKwkJCQlUKGFkZHN0cihsZWFkZXIsIHN0cmxlbihsZWFkZXIpLAorCQkJCQkgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJCVQoYWRkc3RyKGJhc2U2NF9rZXkgKyBuLAorCQkJCSAgICAoc2l6ZV90KU1JTihsZW4gLSBuLCA0OCksICZidWYsICZidWZsZW4pKTsKKwkJCX0KKwkJCWlmIChsZW4gPiAxNSkKKwkJCQlUKGFkZHN0cigiICkiLCAyLCAmYnVmLCAmYnVmbGVuKSk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJY2FzZSBuc190X2hpcDogeworCQl1bnNpZ25lZCBpbnQgaSwgaGlwX2xlbiwgYWxnb3JpdGhtLCBrZXlfbGVuOworCQljaGFyIGJhc2U2NF9rZXlbTlNfTUQ1UlNBX01BWF9CQVNFNjRdOworCQl1bnNpZ25lZCBpbnQgc2l6OworCQljb25zdCBjaGFyICpsZWFkZXIgPSAiXG5cdFx0XHRcdFx0IjsKKworCQloaXBfbGVuID0gKnJkYXRhKys7CisJCWFsZ29yaXRobSA9ICpyZGF0YSsrOworCQlrZXlfbGVuID0gbnNfZ2V0MTYocmRhdGEpOworCQlyZGF0YSArPSBOU19JTlQxNlNaOworCisJCXNpeiA9IGtleV9sZW4qNC8zICsgNDsgLyogIis0IiBhY2NvdW50cyBmb3IgdHJhaWxpbmcgXDAgKi8KKwkJaWYgKHNpeiA+IHNpemVvZihiYXNlNjRfa2V5KSAqIDMvNCkgeworCQkJY29uc3QgY2hhciAqc3RyID0gInJlY29yZCB0b28gbG9uZyB0byBwcmludCI7CisJCQlUKGFkZHN0cihzdHIsIHN0cmxlbihzdHIpLCAmYnVmLCAmYnVmbGVuKSk7CisJCX0gZWxzZSB7CisJCQlsZW4gPSBzcHJpbnRmKHRtcCwgIiggJXUgIiwgYWxnb3JpdGhtKTsKKwkJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkJZm9yIChpID0gMDsgaSA8IGhpcF9sZW47IGkrKykgeworCQkJCWxlbiA9IHNwcmludGYodG1wLCAiJTAyWCIsICpyZGF0YSk7CisJCQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJCXJkYXRhKys7CisJCQl9CisJCQlUKGFkZHN0cihsZWFkZXIsIHN0cmxlbihsZWFkZXIpLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJCWxlbiA9IGI2NF9udG9wKHJkYXRhLCBrZXlfbGVuLCBiYXNlNjRfa2V5LCBzaXopOworCQkJaWYgKGxlbiA8IDApCisJCQkJZ290byBmb3JtZXJyOworCisJCQlUKGFkZHN0cihiYXNlNjRfa2V5LCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCQlyZGF0YSArPSBrZXlfbGVuOworCQkJd2hpbGUgKHJkYXRhIDwgZWRhdGEpIHsKKwkJCQlUKGFkZHN0cihsZWFkZXIsIHN0cmxlbihsZWFkZXIpLCAmYnVmLCAmYnVmbGVuKSk7CisJCQkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwKKwkJCQkJICAmYnVmLCAmYnVmbGVuKSk7CisJCQl9CisJCQlUKGFkZHN0cigiICkiLCAyLCAmYnVmLCAmYnVmbGVuKSk7CisJCX0KKwkJYnJlYWs7CisJICAgIH0KKworCWRlZmF1bHQ6CisJCWNvbW1lbnQgPSAidW5rbm93biBSUiB0eXBlIjsKKwkJZ290byBoZXhpZnk7CisJfQorCV9ESUFHQVNTRVJUKF9fdHlwZV9maXQoaW50LCBidWYgLSBvYnVmKSk7CisJcmV0dXJuIChpbnQpKGJ1ZiAtIG9idWYpOworIGZvcm1lcnI6CisJY29tbWVudCA9ICJSUiBmb3JtYXQgZXJyb3IiOworIGhleGlmeTogeworCWludCBuLCBtOworCWNoYXIgKnA7CisKKwlsZW4gPSBTUFJJTlRGKCh0bXAsICJcXCMgJXUlc1x0OyAlcyIsICh1bnNpZ25lZCkoZWRhdGEgLSByZGF0YSksCisJCSAgICAgICByZGxlbiAhPSAwVSA/ICIgKCIgOiAiIiwgY29tbWVudCkpOworCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwl3aGlsZSAocmRhdGEgPCBlZGF0YSkgeworCQlwID0gdG1wOworCQlwICs9IFNQUklOVEYoKHAsICJcblx0IikpOworCQlzcGFjZWQgPSAwOworCQluID0gTUlOKDE2LCAoaW50KShlZGF0YSAtIHJkYXRhKSk7CisJCWZvciAobSA9IDA7IG0gPCBuOyBtKyspCisJCQlwICs9IFNQUklOVEYoKHAsICIlMDJ4ICIsIHJkYXRhW21dKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdCkocCAtIHRtcCksICZidWYsICZidWZsZW4pKTsKKwkJaWYgKG4gPCAxNikgeworCQkJVChhZGRzdHIoIikiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKKwkJCVQoYWRkdGFiKChzaXplX3QpKHAgLSB0bXAgKyAxKSwgKHNpemVfdCk0OCwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7CisJCX0KKwkJcCA9IHRtcDsKKwkJcCArPSBTUFJJTlRGKChwLCAiOyAiKSk7CisJCWZvciAobSA9IDA7IG0gPCBuOyBtKyspCisJCQkqcCsrID0gKGlzYXNjaWkocmRhdGFbbV0pICYmIGlzcHJpbnQocmRhdGFbbV0pKQorCQkJCT8gcmRhdGFbbV0KKwkJCQk6ICcuJzsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KShwIC0gdG1wKSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlyZGF0YSArPSBuOworCX0KKwlfRElBR0FTU0VSVChfX3R5cGVfZml0KGludCwgYnVmIC0gb2J1ZikpOworCXJldHVybiAoaW50KShidWYgLSBvYnVmKTsKKyAgICB9Cit9CisKKy8qIFByaXZhdGUuICovCisKKy8qCisgKiBzaXplX3QKKyAqIHBydW5lX29yaWdpbihuYW1lLCBvcmlnaW4pCisgKglGaW5kIG91dCBpZiB0aGUgbmFtZSBpcyBhdCBvciB1bmRlciB0aGUgY3VycmVudCBvcmlnaW4uCisgKiByZXR1cm46CisgKglOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBuYW1lIGJlZm9yZSBzdGFydCBvZiBvcmlnaW4sCisgKglvciBsZW5ndGggb2YgbmFtZSBpZiBvcmlnaW4gZG9lcyBub3QgbWF0Y2guCisgKiBub3RlczoKKyAqCVRoaXMgZnVuY3Rpb24gc2hvdWxkIHNoYXJlIGNvZGUgd2l0aCBzYW1lZG9tYWluKCkuCisgKi8KK3N0YXRpYyBzaXplX3QKK3BydW5lX29yaWdpbihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpvcmlnaW4pIHsKKwljb25zdCBjaGFyICpvbmFtZSA9IG5hbWU7CisKKwl3aGlsZSAoKm5hbWUgIT0gJ1wwJykgeworCQlpZiAob3JpZ2luICE9IE5VTEwgJiYgbnNfc2FtZW5hbWUobmFtZSwgb3JpZ2luKSA9PSAxKQorCQkJcmV0dXJuIChuYW1lIC0gb25hbWUgLSAobmFtZSA+IG9uYW1lKSk7CisJCXdoaWxlICgqbmFtZSAhPSAnXDAnKSB7CisJCQlpZiAoKm5hbWUgPT0gJ1xcJykgeworCQkJCW5hbWUrKzsKKwkJCQkvKiBYWFggbmVlZCB0byBoYW5kbGUgXG5ubiBmb3JtLiAqLworCQkJCWlmICgqbmFtZSA9PSAnXDAnKQorCQkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoKm5hbWUgPT0gJy4nKSB7CisJCQkJbmFtZSsrOworCQkJCWJyZWFrOworCQkJfQorCQkJbmFtZSsrOworCQl9CisJfQorCXJldHVybiAobmFtZSAtIG9uYW1lKTsKK30KKworLyoKKyAqIGludAorICogY2hhcnN0cihyZGF0YSwgZWRhdGEsIGJ1ZiwgYnVmbGVuKQorICoJRm9ybWF0IGEgPGNoYXJhY3Rlci1zdHJpbmc+IGludG8gdGhlIHByZXNlbnRhdGlvbiBidWZmZXIuCisgKiByZXR1cm46CisgKglOdW1iZXIgb2YgcmRhdGEgb2N0ZXRzIGNvbnN1bWVkCisgKgkwIGZvciBwcm90b2NvbCBmb3JtYXQgZXJyb3IKKyAqCS0xIGZvciBvdXRwdXQgYnVmZmVyIGVycm9yCisgKiBzaWRlIGVmZmVjdHM6CisgKglidWZmZXIgaXMgYWR2YW5jZWQgb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludAorY2hhcnN0cihjb25zdCB1X2NoYXIgKnJkYXRhLCBjb25zdCB1X2NoYXIgKmVkYXRhLCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1ZmxlbikgeworCWNvbnN0IHVfY2hhciAqb2RhdGEgPSByZGF0YTsKKwlzaXplX3Qgc2F2ZV9idWZsZW4gPSAqYnVmbGVuOworCWNoYXIgKnNhdmVfYnVmID0gKmJ1ZjsKKworCWlmIChhZGRzdHIoIlwiIiwgKHNpemVfdCkxLCBidWYsIGJ1ZmxlbikgPCAwKQorCQlnb3RvIGVub3NwYzsKKwlpZiAocmRhdGEgPCBlZGF0YSkgeworCQlpbnQgbiA9ICpyZGF0YTsKKworCQlpZiAocmRhdGEgKyAxICsgbiA8PSBlZGF0YSkgeworCQkJcmRhdGErKzsKKwkJCXdoaWxlIChuLS0gPiAwKSB7CisJCQkJaWYgKHN0cmNocigiXG5cIlxcIiwgKnJkYXRhKSAhPSBOVUxMKQorCQkJCQlpZiAoYWRkc3RyKCJcXCIsIChzaXplX3QpMSwgYnVmLCBidWZsZW4pIDwgMCkKKwkJCQkJCWdvdG8gZW5vc3BjOworCQkJCWlmIChhZGRzdHIoKGNvbnN0IGNoYXIgKilyZGF0YSwgKHNpemVfdCkxLAorCQkJCQkgICBidWYsIGJ1ZmxlbikgPCAwKQorCQkJCQlnb3RvIGVub3NwYzsKKwkJCQlyZGF0YSsrOworCQkJfQorCQl9CisJfQorCWlmIChhZGRzdHIoIlwiIiwgKHNpemVfdCkxLCBidWYsIGJ1ZmxlbikgPCAwKQorCQlnb3RvIGVub3NwYzsKKwlfRElBR0FTU0VSVChfX3R5cGVfZml0KGludCwgcmRhdGEgLSBvZGF0YSkpOworCXJldHVybiAoaW50KShyZGF0YSAtIG9kYXRhKTsKKyBlbm9zcGM6CisJZXJybm8gPSBFTk9TUEM7CisJKmJ1ZiA9IHNhdmVfYnVmOworCSpidWZsZW4gPSBzYXZlX2J1ZmxlbjsKKwlyZXR1cm4gKC0xKTsKK30KKworc3RhdGljIGludAorYWRkbmFtZShjb25zdCB1X2NoYXIgKm1zZywgc2l6ZV90IG1zZ2xlbiwKKwljb25zdCB1X2NoYXIgKipwcCwgY29uc3QgY2hhciAqb3JpZ2luLAorCWNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKQoreworCXNpemVfdCBuZXdsZW4sIHNhdmVfYnVmbGVuID0gKmJ1ZmxlbjsKKwljaGFyICpzYXZlX2J1ZiA9ICpidWY7CisJaW50IG47CisKKwluID0gZG5fZXhwYW5kKG1zZywgbXNnICsgbXNnbGVuLCAqcHAsICpidWYsIChpbnQpKmJ1Zmxlbik7CisJaWYgKG4gPCAwKQorCQlnb3RvIGVub3NwYzsJLyogR3Vlc3MuICovCisJbmV3bGVuID0gcHJ1bmVfb3JpZ2luKCpidWYsIG9yaWdpbik7CisJaWYgKCoqYnVmID09ICdcMCcpIHsKKwkJZ290byByb290OworCX0gZWxzZSBpZiAobmV3bGVuID09IDBVKSB7CisJCS8qIFVzZSAiQCIgaW5zdGVhZCBvZiBuYW1lLiAqLworCQlpZiAobmV3bGVuICsgMiA+ICpidWZsZW4pCisJCQlnb3RvIGVub3NwYzsgICAgICAgIC8qIE5vIHJvb20gZm9yICJAXDAiLiAqLworCQkoKmJ1ZilbbmV3bGVuKytdID0gJ0AnOworCQkoKmJ1ZilbbmV3bGVuXSA9ICdcMCc7CisJfSBlbHNlIHsKKwkJaWYgKCgob3JpZ2luID09IE5VTEwgfHwgb3JpZ2luWzBdID09ICdcMCcpIHx8CisJCSAgICAob3JpZ2luWzBdICE9ICcuJyAmJiBvcmlnaW5bMV0gIT0gJ1wwJyAmJgorCQkgICAgKCpidWYpW25ld2xlbl0gPT0gJ1wwJykpICYmICgqYnVmKVtuZXdsZW4gLSAxXSAhPSAnLicpIHsKKwkJCS8qIE5vIHRyYWlsaW5nIGRvdC4gKi8KKyByb290OgorCQkJaWYgKG5ld2xlbiArIDIgPiAqYnVmbGVuKQorCQkJCWdvdG8gZW5vc3BjOwkvKiBObyByb29tIGZvciAiLlwwIi4gKi8KKwkJCSgqYnVmKVtuZXdsZW4rK10gPSAnLic7CisJCQkoKmJ1ZilbbmV3bGVuXSA9ICdcMCc7CisJCX0KKwl9CisJKnBwICs9IG47CisJYWRkbGVuKG5ld2xlbiwgYnVmLCBidWZsZW4pOworCSoqYnVmID0gJ1wwJzsKKwlfRElBR0FTU0VSVChfX3R5cGVfZml0KGludCwgbmV3bGVuKSk7CisJcmV0dXJuIChpbnQpbmV3bGVuOworIGVub3NwYzoKKwllcnJubyA9IEVOT1NQQzsKKwkqYnVmID0gc2F2ZV9idWY7CisJKmJ1ZmxlbiA9IHNhdmVfYnVmbGVuOworCXJldHVybiAoLTEpOworfQorCitzdGF0aWMgdm9pZAorYWRkbGVuKHNpemVfdCBsZW4sIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKSB7CisJYXNzZXJ0KGxlbiA8PSAqYnVmbGVuKTsKKwkqYnVmICs9IGxlbjsKKwkqYnVmbGVuIC09IGxlbjsKK30KKworc3RhdGljIGludAorYWRkc3RyKGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pIHsKKwlpZiAobGVuID49ICpidWZsZW4pIHsKKwkJZXJybm8gPSBFTk9TUEM7CisJCXJldHVybiAoLTEpOworCX0KKwltZW1jcHkoKmJ1Ziwgc3JjLCBsZW4pOworCWFkZGxlbihsZW4sIGJ1ZiwgYnVmbGVuKTsKKwkqKmJ1ZiA9ICdcMCc7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorYWRkdGFiKHNpemVfdCBsZW4sIHNpemVfdCB0YXJnZXQsIGludCBzcGFjZWQsIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKSB7CisJc2l6ZV90IHNhdmVfYnVmbGVuID0gKmJ1ZmxlbjsKKwljaGFyICpzYXZlX2J1ZiA9ICpidWY7CisJcHRyZGlmZl90IHQ7CisKKwlpZiAoc3BhY2VkIHx8IGxlbiA+PSB0YXJnZXQgLSAxKSB7CisJCVQoYWRkc3RyKCIgICIsIChzaXplX3QpMiwgYnVmLCBidWZsZW4pKTsKKwkJc3BhY2VkID0gMTsKKwl9IGVsc2UgeworCQlmb3IgKHQgPSAodGFyZ2V0IC0gbGVuIC0gMSkgLyA4OyB0ID49IDA7IHQtLSkKKwkJCWlmIChhZGRzdHIoIlx0IiwgKHNpemVfdCkxLCBidWYsIGJ1ZmxlbikgPCAwKSB7CisJCQkJKmJ1ZmxlbiA9IHNhdmVfYnVmbGVuOworCQkJCSpidWYgPSBzYXZlX2J1ZjsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJc3BhY2VkID0gMDsKKwl9CisJcmV0dXJuIChzcGFjZWQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvbmFtZXNlci9uc19zYW1lZG9tYWluLmMgYi9saWJjL2Rucy9uYW1lc2VyL25zX3NhbWVkb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmUwYzI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvbmFtZXNlci9uc19zYW1lZG9tYWluLmMKQEAgLTAsMCArMSwyMTAgQEAKKy8qCSROZXRCU0Q6IG5zX3NhbWVkb21haW4uYyx2IDEuOCAyMDEyLzExLzIyIDIwOjIyOjMxIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NSwxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWZuZGVmIGxpbnQKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zX3NhbWVkb21haW4uYyx2IDEuNiAyMDA1LzA0LzI3IDA0OjU2OjQwIHNyYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IG5zX3NhbWVkb21haW4uYyx2IDEuOCAyMDEyLzExLzIyIDIwOjIyOjMxIGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmZGVmIF9MSUJSRVNPTFYKKy8qCisgKglDaGVjayB3aGV0aGVyIGEgbmFtZSBiZWxvbmdzIHRvIGEgZG9tYWluLgorICoKKyAqIElucHV0czoKKyAqCWEgLSB0aGUgZG9tYWluIHdob3NlIGFuY2VzdG9yeSBpcyBiZWluZyB2ZXJpZmllZAorICoJYiAtIHRoZSBwb3RlbnRpYWwgYW5jZXN0b3Igd2UncmUgY2hlY2tpbmcgYWdhaW5zdAorICoKKyAqIFJldHVybjoKKyAqCWJvb2xlYW4gLSBpcyBhIGF0IG9yIGJlbG93IGI/CisgKgorICogTm90ZXM6CisgKglUcmFpbGluZyBkb3RzIGFyZSBmaXJzdCByZW1vdmVkIGZyb20gbmFtZSBhbmQgZG9tYWluLgorICoJQWx3YXlzIGNvbXBhcmUgY29tcGxldGUgc3ViZG9tYWlucywgbm90IG9ubHkgd2hldGhlciB0aGUKKyAqCWRvbWFpbiBuYW1lIGlzIHRoZSB0cmFpbGluZyBzdHJpbmcgb2YgdGhlIGdpdmVuIG5hbWUuCisgKgorICoJImhvc3QuZm9vYmFyLnRvcCIgbGllcyBpbiAiZm9vYmFyLnRvcCIgYW5kIGluICJ0b3AiIGFuZCBpbiAiIgorICoJYnV0IE5PVCBpbiAiYmFyLnRvcCIKKyAqLworCitpbnQKK25zX3NhbWVkb21haW4oY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikgeworCXNpemVfdCBsYSwgbGIsIGk7CisJaW50IGRpZmYsIGVzY2FwZWQ7CisJY29uc3QgY2hhciAqY3A7CisKKwlsYSA9IHN0cmxlbihhKTsKKwlsYiA9IHN0cmxlbihiKTsKKworCS8qIElnbm9yZSBhIHRyYWlsaW5nIGxhYmVsIHNlcGFyYXRvciAoaS5lLiBhbiB1bmVzY2FwZWQgZG90KSBpbiAnYScuICovCisJaWYgKGxhICE9IDBVICYmIGFbbGEgLSAxXSA9PSAnLicpIHsKKwkJZXNjYXBlZCA9IDA7CisJCS8qIE5vdGUgdGhpcyBsb29wIGRvZXNuJ3QgZ2V0IGV4ZWN1dGVkIGlmIGxhPT0xLiAqLworCQlmb3IgKGkgPSBsYSAtIDE7IGkgPiAwOyBpLS0pCisJCQlpZiAoYVtpIC0gMV0gPT0gJ1xcJykgeworCQkJCWlmIChlc2NhcGVkKQorCQkJCQllc2NhcGVkID0gMDsKKwkJCQllbHNlCisJCQkJCWVzY2FwZWQgPSAxOworCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCWlmICghZXNjYXBlZCkKKwkJCWxhLS07CisJfQorCisJLyogSWdub3JlIGEgdHJhaWxpbmcgbGFiZWwgc2VwYXJhdG9yIChpLmUuIGFuIHVuZXNjYXBlZCBkb3QpIGluICdiJy4gKi8KKwlpZiAobGIgIT0gMFUgJiYgYltsYiAtIDFdID09ICcuJykgeworCQllc2NhcGVkID0gMDsKKwkJLyogbm90ZSB0aGlzIGxvb3AgZG9lc24ndCBnZXQgZXhlY3V0ZWQgaWYgbGI9PTEgKi8KKwkJZm9yIChpID0gbGIgLSAxOyBpID4gMDsgaS0tKQorCQkJaWYgKGJbaSAtIDFdID09ICdcXCcpIHsKKwkJCQlpZiAoZXNjYXBlZCkKKwkJCQkJZXNjYXBlZCA9IDA7CisJCQkJZWxzZQorCQkJCQllc2NhcGVkID0gMTsKKwkJCX0gZWxzZQorCQkJCWJyZWFrOworCQlpZiAoIWVzY2FwZWQpCisJCQlsYi0tOworCX0KKworCS8qIGxiID09IDAgbWVhbnMgJ2InIGlzIHRoZSByb290IGRvbWFpbiwgc28gJ2EnIG11c3QgYmUgaW4gJ2InLiAqLworCWlmIChsYiA9PSAwVSkKKwkJcmV0dXJuICgxKTsKKworCS8qICdiJyBsb25nZXIgdGhhbiAnYScgbWVhbnMgJ2EnIGNhbid0IGJlIGluICdiJy4gKi8KKwlpZiAobGIgPiBsYSkKKwkJcmV0dXJuICgwKTsKKworCS8qICdhJyBhbmQgJ2InIGJlaW5nIGVxdWFsIGF0IHRoaXMgcG9pbnQgaW5kaWNhdGVzIHNhbWVuZXNzLiAqLworCWlmIChsYiA9PSBsYSkKKwkJcmV0dXJuIChzdHJuY2FzZWNtcChhLCBiLCBsYikgPT0gMCk7CisKKwkvKiBPaywgd2Uga25vdyBsYSA+IGxiLiAqLworCisJZGlmZiA9IChpbnQpKGxhIC0gbGIpOworCisJLyoKKwkgKiBJZiAnYScgaXMgb25seSAxIGNoYXJhY3RlciBsb25nZXIgdGhhbiAnYicsIHRoZW4gaXQgY2FuJ3QgYmUKKwkgKiBhIHN1YmRvbWFpbiBvZiAnYicgKGJlY2F1c2Ugb2YgdGhlIG5lZWQgZm9yIHRoZSAnLicgbGFiZWwKKwkgKiBzZXBhcmF0b3IpLgorCSAqLworCWlmIChkaWZmIDwgMikKKwkJcmV0dXJuICgwKTsKKworCS8qCisJICogSWYgdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlIGxhc3QgJ2xiJyBjaGFyYWN0ZXJzIG9mICdiJworCSAqIGlzbid0ICcuJywgdGhlbiBpdCBjYW4ndCBiZSBhIG1hdGNoICh0aGlzIGxldHMgdXMgYXZvaWQKKwkgKiBoYXZpbmcgImZvb2Jhci5jb20iIG1hdGNoICJiYXIuY29tIikuCisJICovCisJaWYgKGFbZGlmZiAtIDFdICE9ICcuJykKKwkJcmV0dXJuICgwKTsKKworCS8qCisJICogV2UncmUgbm90IHN1cmUgYWJvdXQgdGhhdCAnLicsIGhvd2V2ZXIuICBJdCBjb3VsZCBiZSBlc2NhcGVkCisgICAgICAgICAqIGFuZCB0aHVzIG5vdCBhIHJlYWxseSBhIGxhYmVsIHNlcGFyYXRvci4KKwkgKi8KKwllc2NhcGVkID0gMDsKKwlmb3IgKGkgPSBkaWZmIC0gMTsgaSA+IDA7IGktLSkKKwkJaWYgKGFbaSAtIDFdID09ICdcXCcpIHsKKwkJCWlmIChlc2NhcGVkKQorCQkJCWVzY2FwZWQgPSAwOworCQkJZWxzZQorCQkJCWVzY2FwZWQgPSAxOworCQl9IGVsc2UKKwkJCWJyZWFrOworCWlmIChlc2NhcGVkKQorCQlyZXR1cm4gKDApOworCisJLyogTm93IGNvbXBhcmUgYWxpZ25lZCB0cmFpbGluZyBzdWJzdHJpbmcuICovCisJY3AgPSBhICsgZGlmZjsKKwlyZXR1cm4gKHN0cm5jYXNlY21wKGNwLCBiLCBsYikgPT0gMCk7Cit9CisKKy8qCisgKglpcyAiYSIgYSBzdWJkb21haW4gb2YgImIiPworICovCitpbnQKK25zX3N1YmRvbWFpbihjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKSB7CisJcmV0dXJuIChuc19zYW1lbmFtZShhLCBiKSAhPSAxICYmIG5zX3NhbWVkb21haW4oYSwgYikpOworfQorI2VuZGlmCisKKyNpZmRlZiBfTElCQworLyoKKyAqCW1ha2UgYSBjYW5vbmljYWwgY29weSBvZiBkb21haW4gbmFtZSAic3JjIgorICoKKyAqIG5vdGVzOgorICoJZm9vIC0+IGZvby4KKyAqCWZvby4gLT4gZm9vLgorICoJZm9vLi4gLT4gZm9vLgorICoJZm9vXC4gLT4gZm9vXC4uCisgKglmb29cXC4gLT4gZm9vXFwuCisgKi8KKworaW50Cituc19tYWtlY2Fub24oY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplKSB7CisJc2l6ZV90IG4gPSBzdHJsZW4oc3JjKTsKKworCWlmIChuICsgc2l6ZW9mICIuIiA+IGRzdHNpemUpIHsJCQkvKiBOb3RlOiBzaXplb2YgPT0gMiAqLworCQllcnJubyA9IEVNU0dTSVpFOworCQlyZXR1cm4gKC0xKTsKKwl9CisJc3RyY3B5KGRzdCwgc3JjKTsKKwl3aGlsZSAobiA+PSAxVSAmJiBkc3RbbiAtIDFdID09ICcuJykJCS8qIEVuZHMgaW4gIi4iICovCisJCWlmIChuID49IDJVICYmIGRzdFtuIC0gMl0gPT0gJ1xcJyAmJgkvKiBFbmRzIGluICJcLiIgKi8KKwkJICAgIChuIDwgM1UgfHwgZHN0W24gLSAzXSAhPSAnXFwnKSkJLyogQnV0IG5vdCAiXFwuIiAqLworCQkJYnJlYWs7CisJCWVsc2UKKwkJCWRzdFstLW5dID0gJ1wwJzsKKwlkc3RbbisrXSA9ICcuJzsKKwlkc3Rbbl0gPSAnXDAnOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKglkZXRlcm1pbmUgd2hldGhlciBkb21haW4gbmFtZSAiYSIgaXMgdGhlIHNhbWUgYXMgZG9tYWluIG5hbWUgImIiCisgKgorICogcmV0dXJuOgorICoJLTEgb24gZXJyb3IKKyAqCTAgaWYgbmFtZXMgZGlmZmVyCisgKgkxIGlmIG5hbWVzIGFyZSB0aGUgc2FtZQorICovCisKK2ludAorbnNfc2FtZW5hbWUoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikgeworCWNoYXIgdGFbTlNfTUFYRE5BTUVdLCB0YltOU19NQVhETkFNRV07CisKKwlpZiAobnNfbWFrZWNhbm9uKGEsIHRhLCBzaXplb2YgdGEpIDwgMCB8fAorCSAgICBuc19tYWtlY2Fub24oYiwgdGIsIHNpemVvZiB0YikgPCAwKQorCQlyZXR1cm4gKC0xKTsKKwlpZiAoc3RyY2FzZWNtcCh0YSwgdGIpID09IDApCisJCXJldHVybiAoMSk7CisJZWxzZQorCQlyZXR1cm4gKDApOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2Rucy9uYW1lc2VyL25zX3R0bC5jIGIvbGliYy9kbnMvbmFtZXNlci9uc190dGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzk1Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvbmFtZXNlci9uc190dGwuYwpAQCAtMCwwICsxLDE2NyBAQAorLyoJJE5ldEJTRDogbnNfdHRsLmMsdiAxLjggMjAxMi8wMy8xMyAyMToxMzozOSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmbmRlZiBsaW50CisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBuc190dGwuYyx2IDEuNCAyMDA1LzA3LzI4IDA2OjUxOjQ5IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogbnNfdHRsLmMsdiAxLjggMjAxMi8wMy8xMyAyMToxMzozOSBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYKKworLyogSW1wb3J0LiAqLworCisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmZGVmIFNQUklOVEZfQ0hBUgorIyBkZWZpbmUgU1BSSU5URih4KSBzdHJsZW4oc3ByaW50Zi8qKi94KQorI2Vsc2UKKyMgZGVmaW5lIFNQUklOVEYoeCkgKChzaXplX3Qpc3ByaW50ZiB4KQorI2VuZGlmCisKKy8qIEZvcndhcmQuICovCisKK3N0YXRpYyBpbnQJZm10MShpbnQgdCwgY2hhciBzLCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1Zmxlbik7CisKKy8qIE1hY3Jvcy4gKi8KKworI2RlZmluZSBUKHgpIGRvIHsgaWYgKCh4KSA8IDApIHJldHVybiAoLTEpOyB9IHdoaWxlKDApCisKKy8qIFB1YmxpYy4gKi8KKworaW50Cituc19mb3JtYXRfdHRsKHVfbG9uZyBzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IGRzdGxlbikgeworCWNoYXIgKm9kc3QgPSBkc3Q7CisJaW50IHNlY3MsIG1pbnMsIGhvdXJzLCBkYXlzLCB3ZWVrcywgeDsKKwljaGFyICpwOworCisJc2VjcyA9IChpbnQpKHNyYyAlIDYwKTsgICBzcmMgLz0gNjA7CisJbWlucyA9IChpbnQpKHNyYyAlIDYwKTsgICBzcmMgLz0gNjA7CisJaG91cnMgPSAoaW50KShzcmMgJSAyNCk7ICBzcmMgLz0gMjQ7CisJZGF5cyA9IChpbnQpKHNyYyAlIDcpOyAgICBzcmMgLz0gNzsKKwl3ZWVrcyA9IChpbnQpc3JjOyAgICAgICBzcmMgPSAwOworCisJeCA9IDA7CisJaWYgKHdlZWtzKSB7CisJCVQoZm10MSh3ZWVrcywgJ1cnLCAmZHN0LCAmZHN0bGVuKSk7CisJCXgrKzsKKwl9CisJaWYgKGRheXMpIHsKKwkJVChmbXQxKGRheXMsICdEJywgJmRzdCwgJmRzdGxlbikpOworCQl4Kys7CisJfQorCWlmIChob3VycykgeworCQlUKGZtdDEoaG91cnMsICdIJywgJmRzdCwgJmRzdGxlbikpOworCQl4Kys7CisJfQorCWlmIChtaW5zKSB7CisJCVQoZm10MShtaW5zLCAnTScsICZkc3QsICZkc3RsZW4pKTsKKwkJeCsrOworCX0KKwlpZiAoc2VjcyB8fCAhKHdlZWtzIHx8IGRheXMgfHwgaG91cnMgfHwgbWlucykpIHsKKwkJVChmbXQxKHNlY3MsICdTJywgJmRzdCwgJmRzdGxlbikpOworCQl4Kys7CisJfQorCisJaWYgKHggPiAxKSB7CisJCWludCBjaDsKKworCQlmb3IgKHAgPSBvZHN0OyAoY2ggPSAqcCkgIT0gJ1wwJzsgcCsrKQorCQkJaWYgKGlzYXNjaWkoY2gpICYmIGlzdXBwZXIoY2gpKQorCQkJCSpwID0gdG9sb3dlcihjaCk7CisJfQorCisJX0RJQUdBU1NFUlQoX190eXBlX2ZpdChpbnQsIGRzdCAtIG9kc3QpKTsKKwlyZXR1cm4gKGludCkoZHN0IC0gb2RzdCk7Cit9CisKKyNpZm5kZWYgX0xJQkMKK2ludAorbnNfcGFyc2VfdHRsKGNvbnN0IGNoYXIgKnNyYywgdV9sb25nICpkc3QpIHsKKwl1X2xvbmcgdHRsLCB0bXA7CisJaW50IGNoLCBkaWdpdHMsIGRpcnR5OworCisJdHRsID0gMDsKKwl0bXAgPSAwOworCWRpZ2l0cyA9IDA7CisJZGlydHkgPSAwOworCXdoaWxlICgoY2ggPSAqc3JjKyspICE9ICdcMCcpIHsKKwkJaWYgKCFpc2FzY2lpKGNoKSB8fCAhaXNwcmludChjaCkpCisJCQlnb3RvIGVpbnZhbDsKKwkJaWYgKGlzZGlnaXQoY2gpKSB7CisJCQl0bXAgKj0gMTA7CisJCQl0bXAgKz0gKGNoIC0gJzAnKTsKKwkJCWRpZ2l0cysrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGRpZ2l0cyA9PSAwKQorCQkJZ290byBlaW52YWw7CisJCWlmIChpc2xvd2VyKGNoKSkKKwkJCWNoID0gdG91cHBlcihjaCk7CisJCXN3aXRjaCAoY2gpIHsKKwkJY2FzZSAnVyc6ICB0bXAgKj0gNzsJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ0QnOiAgdG1wICo9IDI0OwkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAnSCc6ICB0bXAgKj0gNjA7CS8qRkFMTFRIUk9VR0gqLworCQljYXNlICdNJzogIHRtcCAqPSA2MDsJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ1MnOiAgYnJlYWs7CisJCWRlZmF1bHQ6ICAgZ290byBlaW52YWw7CisJCX0KKwkJdHRsICs9IHRtcDsKKwkJdG1wID0gMDsKKwkJZGlnaXRzID0gMDsKKwkJZGlydHkgPSAxOworCX0KKwlpZiAoZGlnaXRzID4gMCkgeworCQlpZiAoZGlydHkpCisJCQlnb3RvIGVpbnZhbDsKKwkJZWxzZQorCQkJdHRsICs9IHRtcDsKKwl9IGVsc2UgaWYgKCFkaXJ0eSkKKwkJZ290byBlaW52YWw7CisJKmRzdCA9IHR0bDsKKwlyZXR1cm4gKDApOworCisgZWludmFsOgorCWVycm5vID0gRUlOVkFMOworCXJldHVybiAoLTEpOworfQorI2VuZGlmCisKKy8qIFByaXZhdGUuICovCisKK3N0YXRpYyBpbnQKK2ZtdDEoaW50IHQsIGNoYXIgcywgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pIHsKKwljaGFyIHRtcFs1MF07CisJc2l6ZV90IGxlbjsKKworCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVkJWMiLCB0LCBzKSk7CisJaWYgKGxlbiArIDEgPiAqYnVmbGVuKQorCQlyZXR1cm4gKC0xKTsKKwlzdHJjcHkoKmJ1ZiwgdG1wKTsKKwkqYnVmICs9IGxlbjsKKwkqYnVmbGVuIC09IGxlbjsKKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvbmV0L2Jhc2U2NC5jIGIvbGliYy9kbnMvbmV0L2Jhc2U2NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ODY5ODYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Rucy9uZXQvYmFzZTY0LmMKQEAgLTAsMCArMSwzNDAgQEAKKy8qCSROZXRCU0Q6IGJhc2U2NC5jLHYgMS44IDIwMDIvMTEvMTEgMDE6MTU6MTcgdGhvcnBlaiBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk2IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJTlRFUk5FVCBTT0ZUV0FSRSBDT05TT1JUSVVNIERJU0NMQUlNUworICogQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBJTlRFUk5FVCBTT0ZUV0FSRQorICogQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTUgYnkgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgSW5jLgorICoKKyAqIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEluYy4gKGhlcmVpbmFmdGVyIGNhbGxlZCBJQk0pIGdyYW50cworICogcGVybWlzc2lvbiB1bmRlciBpdHMgY29weXJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogU29mdHdhcmUgd2l0aCBvciB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQKKyAqIGFsbCBwYXJhZ3JhcGhzIG9mIHRoaXMgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBJQk0KKyAqIG5vdCBiZSB1c2VkIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgbWFya2V0aW5nIG9mIGFueSBwcm9kdWN0IGluY29ycG9yYXRpbmcKKyAqIHRoZSBTb2Z0d2FyZSBvciBtb2RpZmljYXRpb25zIHRoZXJlb2YsIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKKyAqIHBlcm1pc3Npb24uCisgKgorICogVG8gdGhlIGV4dGVudCBpdCBoYXMgYSByaWdodCB0byBkbyBzbywgSUJNIGdyYW50cyBhbiBpbW11bml0eSBmcm9tIHN1aXQKKyAqIHVuZGVyIGl0cyBwYXRlbnRzLCBpZiBhbnksIGZvciB0aGUgdXNlLCBzYWxlIG9yIG1hbnVmYWN0dXJlIG9mIHByb2R1Y3RzIHRvCisgKiB0aGUgZXh0ZW50IHRoYXQgc3VjaCBwcm9kdWN0cyBhcmUgdXNlZCBmb3IgcGVyZm9ybWluZyBEb21haW4gTmFtZSBTeXN0ZW0KKyAqIGR5bmFtaWMgdXBkYXRlcyBpbiBUQ1AvSVAgbmV0d29ya3MgYnkgbWVhbnMgb2YgdGhlIFNvZnR3YXJlLiAgTm8gaW1tdW5pdHkgaXMKKyAqIGdyYW50ZWQgZm9yIGFueSBwcm9kdWN0IHBlciBzZSBvciBmb3IgYW55IG90aGVyIGZ1bmN0aW9uIG9mIGFueSBwcm9kdWN0LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBBTkQgSUJNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICogUEFSVElDVUxBUiBQVVJQT1NFLiAgSU4gTk8gRVZFTlQgU0hBTEwgSUJNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsCisgKiBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBBUklTSU5HCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorICogSUYgSUJNIElTIEFQUFJJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorX19SQ1NJRCgiJE5ldEJTRDogYmFzZTY0LmMsdiAxLjggMjAwMi8xMS8xMSAwMToxNToxNyB0aG9ycGVqIEV4cCAkIik7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyIEJhc2U2NFtdID0KKwkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CitzdGF0aWMgY29uc3QgY2hhciBQYWQ2NCA9ICc9JzsKKworLyogKEZyb20gUkZDMTUyMSBhbmQgZHJhZnQtaWV0Zi1kbnNzZWMtc2VjZXh0LTAzLnR4dCkKKyAgIFRoZSBmb2xsb3dpbmcgZW5jb2RpbmcgdGVjaG5pcXVlIGlzIHRha2VuIGZyb20gUkZDIDE1MjEgYnkgQm9yZW5zdGVpbgorICAgYW5kIEZyZWVkLiAgSXQgaXMgcmVwcm9kdWNlZCBoZXJlIGluIGEgc2xpZ2h0bHkgZWRpdGVkIGZvcm0gZm9yCisgICBjb252ZW5pZW5jZS4KKworICAgQSA2NS1jaGFyYWN0ZXIgc3Vic2V0IG9mIFVTLUFTQ0lJIGlzIHVzZWQsIGVuYWJsaW5nIDYgYml0cyB0byBiZQorICAgcmVwcmVzZW50ZWQgcGVyIHByaW50YWJsZSBjaGFyYWN0ZXIuIChUaGUgZXh0cmEgNjV0aCBjaGFyYWN0ZXIsICI9IiwKKyAgIGlzIHVzZWQgdG8gc2lnbmlmeSBhIHNwZWNpYWwgcHJvY2Vzc2luZyBmdW5jdGlvbi4pCisKKyAgIFRoZSBlbmNvZGluZyBwcm9jZXNzIHJlcHJlc2VudHMgMjQtYml0IGdyb3VwcyBvZiBpbnB1dCBiaXRzIGFzIG91dHB1dAorICAgc3RyaW5ncyBvZiA0IGVuY29kZWQgY2hhcmFjdGVycy4gUHJvY2VlZGluZyBmcm9tIGxlZnQgdG8gcmlnaHQsIGEKKyAgIDI0LWJpdCBpbnB1dCBncm91cCBpcyBmb3JtZWQgYnkgY29uY2F0ZW5hdGluZyAzIDgtYml0IGlucHV0IGdyb3Vwcy4KKyAgIFRoZXNlIDI0IGJpdHMgYXJlIHRoZW4gdHJlYXRlZCBhcyA0IGNvbmNhdGVuYXRlZCA2LWJpdCBncm91cHMsIGVhY2gKKyAgIG9mIHdoaWNoIGlzIHRyYW5zbGF0ZWQgaW50byBhIHNpbmdsZSBkaWdpdCBpbiB0aGUgYmFzZTY0IGFscGhhYmV0LgorCisgICBFYWNoIDYtYml0IGdyb3VwIGlzIHVzZWQgYXMgYW4gaW5kZXggaW50byBhbiBhcnJheSBvZiA2NCBwcmludGFibGUKKyAgIGNoYXJhY3RlcnMuIFRoZSBjaGFyYWN0ZXIgcmVmZXJlbmNlZCBieSB0aGUgaW5kZXggaXMgcGxhY2VkIGluIHRoZQorICAgb3V0cHV0IHN0cmluZy4KKworICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlIDE6IFRoZSBCYXNlNjQgQWxwaGFiZXQKKworICAgICAgVmFsdWUgRW5jb2RpbmcgIFZhbHVlIEVuY29kaW5nICBWYWx1ZSBFbmNvZGluZyAgVmFsdWUgRW5jb2RpbmcKKyAgICAgICAgICAwIEEgICAgICAgICAgICAxNyBSICAgICAgICAgICAgMzQgaSAgICAgICAgICAgIDUxIHoKKyAgICAgICAgICAxIEIgICAgICAgICAgICAxOCBTICAgICAgICAgICAgMzUgaiAgICAgICAgICAgIDUyIDAKKyAgICAgICAgICAyIEMgICAgICAgICAgICAxOSBUICAgICAgICAgICAgMzYgayAgICAgICAgICAgIDUzIDEKKyAgICAgICAgICAzIEQgICAgICAgICAgICAyMCBVICAgICAgICAgICAgMzcgbCAgICAgICAgICAgIDU0IDIKKyAgICAgICAgICA0IEUgICAgICAgICAgICAyMSBWICAgICAgICAgICAgMzggbSAgICAgICAgICAgIDU1IDMKKyAgICAgICAgICA1IEYgICAgICAgICAgICAyMiBXICAgICAgICAgICAgMzkgbiAgICAgICAgICAgIDU2IDQKKyAgICAgICAgICA2IEcgICAgICAgICAgICAyMyBYICAgICAgICAgICAgNDAgbyAgICAgICAgICAgIDU3IDUKKyAgICAgICAgICA3IEggICAgICAgICAgICAyNCBZICAgICAgICAgICAgNDEgcCAgICAgICAgICAgIDU4IDYKKyAgICAgICAgICA4IEkgICAgICAgICAgICAyNSBaICAgICAgICAgICAgNDIgcSAgICAgICAgICAgIDU5IDcKKyAgICAgICAgICA5IEogICAgICAgICAgICAyNiBhICAgICAgICAgICAgNDMgciAgICAgICAgICAgIDYwIDgKKyAgICAgICAgIDEwIEsgICAgICAgICAgICAyNyBiICAgICAgICAgICAgNDQgcyAgICAgICAgICAgIDYxIDkKKyAgICAgICAgIDExIEwgICAgICAgICAgICAyOCBjICAgICAgICAgICAgNDUgdCAgICAgICAgICAgIDYyICsKKyAgICAgICAgIDEyIE0gICAgICAgICAgICAyOSBkICAgICAgICAgICAgNDYgdSAgICAgICAgICAgIDYzIC8KKyAgICAgICAgIDEzIE4gICAgICAgICAgICAzMCBlICAgICAgICAgICAgNDcgdgorICAgICAgICAgMTQgTyAgICAgICAgICAgIDMxIGYgICAgICAgICAgICA0OCB3ICAgICAgICAgKHBhZCkgPQorICAgICAgICAgMTUgUCAgICAgICAgICAgIDMyIGcgICAgICAgICAgICA0OSB4CisgICAgICAgICAxNiBRICAgICAgICAgICAgMzMgaCAgICAgICAgICAgIDUwIHkKKworICAgU3BlY2lhbCBwcm9jZXNzaW5nIGlzIHBlcmZvcm1lZCBpZiBmZXdlciB0aGFuIDI0IGJpdHMgYXJlIGF2YWlsYWJsZQorICAgYXQgdGhlIGVuZCBvZiB0aGUgZGF0YSBiZWluZyBlbmNvZGVkLiAgQSBmdWxsIGVuY29kaW5nIHF1YW50dW0gaXMKKyAgIGFsd2F5cyBjb21wbGV0ZWQgYXQgdGhlIGVuZCBvZiBhIHF1YW50aXR5LiAgV2hlbiBmZXdlciB0aGFuIDI0IGlucHV0CisgICBiaXRzIGFyZSBhdmFpbGFibGUgaW4gYW4gaW5wdXQgZ3JvdXAsIHplcm8gYml0cyBhcmUgYWRkZWQgKG9uIHRoZQorICAgcmlnaHQpIHRvIGZvcm0gYW4gaW50ZWdyYWwgbnVtYmVyIG9mIDYtYml0IGdyb3Vwcy4gIFBhZGRpbmcgYXQgdGhlCisgICBlbmQgb2YgdGhlIGRhdGEgaXMgcGVyZm9ybWVkIHVzaW5nIHRoZSAnPScgY2hhcmFjdGVyLgorCisgICBTaW5jZSBhbGwgYmFzZTY0IGlucHV0IGlzIGFuIGludGVncmFsIG51bWJlciBvZiBvY3RldHMsIG9ubHkgdGhlCisgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmb2xsb3dpbmcgY2FzZXMgY2FuIGFyaXNlOgorCisgICAgICAgKDEpIHRoZSBmaW5hbCBxdWFudHVtIG9mIGVuY29kaW5nIGlucHV0IGlzIGFuIGludGVncmFsCisgICAgICAgICAgIG11bHRpcGxlIG9mIDI0IGJpdHM7IGhlcmUsIHRoZSBmaW5hbCB1bml0IG9mIGVuY29kZWQKKwkgICBvdXRwdXQgd2lsbCBiZSBhbiBpbnRlZ3JhbCBtdWx0aXBsZSBvZiA0IGNoYXJhY3RlcnMKKwkgICB3aXRoIG5vICI9IiBwYWRkaW5nLAorICAgICAgICgyKSB0aGUgZmluYWwgcXVhbnR1bSBvZiBlbmNvZGluZyBpbnB1dCBpcyBleGFjdGx5IDggYml0czsKKyAgICAgICAgICAgaGVyZSwgdGhlIGZpbmFsIHVuaXQgb2YgZW5jb2RlZCBvdXRwdXQgd2lsbCBiZSB0d28KKwkgICBjaGFyYWN0ZXJzIGZvbGxvd2VkIGJ5IHR3byAiPSIgcGFkZGluZyBjaGFyYWN0ZXJzLCBvcgorICAgICAgICgzKSB0aGUgZmluYWwgcXVhbnR1bSBvZiBlbmNvZGluZyBpbnB1dCBpcyBleGFjdGx5IDE2IGJpdHM7CisgICAgICAgICAgIGhlcmUsIHRoZSBmaW5hbCB1bml0IG9mIGVuY29kZWQgb3V0cHV0IHdpbGwgYmUgdGhyZWUKKwkgICBjaGFyYWN0ZXJzIGZvbGxvd2VkIGJ5IG9uZSAiPSIgcGFkZGluZyBjaGFyYWN0ZXIuCisgICAqLworCitpbnQKK2I2NF9udG9wKHNyYywgc3JjbGVuZ3RoLCB0YXJnZXQsIHRhcmdzaXplKQorCXVfY2hhciBjb25zdCAqc3JjOworCXNpemVfdCBzcmNsZW5ndGg7CisJY2hhciAqdGFyZ2V0OworCXNpemVfdCB0YXJnc2l6ZTsKK3sKKwlzaXplX3QgZGF0YWxlbmd0aCA9IDA7CisJdV9jaGFyIGlucHV0WzNdID0geyAwLCAwLCAwIH07ICAvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisJdV9jaGFyIG91dHB1dFs0XTsKKwlzaXplX3QgaTsKKworCWFzc2VydChzcmMgIT0gTlVMTCk7CisJYXNzZXJ0KHRhcmdldCAhPSBOVUxMKTsKKworCXdoaWxlICgyIDwgc3JjbGVuZ3RoKSB7CisJCWlucHV0WzBdID0gKnNyYysrOworCQlpbnB1dFsxXSA9ICpzcmMrKzsKKwkJaW5wdXRbMl0gPSAqc3JjKys7CisJCXNyY2xlbmd0aCAtPSAzOworCisJCW91dHB1dFswXSA9ICh1X2ludDMyX3QpaW5wdXRbMF0gPj4gMjsKKwkJb3V0cHV0WzFdID0gKCh1X2ludDMyX3QpKGlucHV0WzBdICYgMHgwMykgPDwgNCkgKworCQkgICAgKCh1X2ludDMyX3QpaW5wdXRbMV0gPj4gNCk7CisJCW91dHB1dFsyXSA9ICgodV9pbnQzMl90KShpbnB1dFsxXSAmIDB4MGYpIDw8IDIpICsKKwkJICAgICgodV9pbnQzMl90KWlucHV0WzJdID4+IDYpOworCQlvdXRwdXRbM10gPSBpbnB1dFsyXSAmIDB4M2Y7CisJCWFzc2VydChvdXRwdXRbMF0gPCA2NCk7CisJCWFzc2VydChvdXRwdXRbMV0gPCA2NCk7CisJCWFzc2VydChvdXRwdXRbMl0gPCA2NCk7CisJCWFzc2VydChvdXRwdXRbM10gPCA2NCk7CisKKwkJaWYgKGRhdGFsZW5ndGggKyA0ID4gdGFyZ3NpemUpCisJCQlyZXR1cm4gKC0xKTsKKwkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzBdXTsKKwkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzFdXTsKKwkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzJdXTsKKwkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzNdXTsKKwl9CisKKwkvKiBOb3cgd2Ugd29ycnkgYWJvdXQgcGFkZGluZy4gKi8KKwlpZiAoMCAhPSBzcmNsZW5ndGgpIHsKKwkJLyogR2V0IHdoYXQncyBsZWZ0LiAqLworCQlpbnB1dFswXSA9IGlucHV0WzFdID0gaW5wdXRbMl0gPSAnXDAnOworCQlmb3IgKGkgPSAwOyBpIDwgc3JjbGVuZ3RoOyBpKyspCisJCQlpbnB1dFtpXSA9ICpzcmMrKzsKKworCQlvdXRwdXRbMF0gPSAodV9pbnQzMl90KWlucHV0WzBdID4+IDI7CisJCW91dHB1dFsxXSA9ICgodV9pbnQzMl90KShpbnB1dFswXSAmIDB4MDMpIDw8IDQpICsKKwkJICAgICgodV9pbnQzMl90KWlucHV0WzFdID4+IDQpOworCQlvdXRwdXRbMl0gPSAoKHVfaW50MzJfdCkoaW5wdXRbMV0gJiAweDBmKSA8PCAyKSArCisJCSAgICAoKHVfaW50MzJfdClpbnB1dFsyXSA+PiA2KTsKKwkJYXNzZXJ0KG91dHB1dFswXSA8IDY0KTsKKwkJYXNzZXJ0KG91dHB1dFsxXSA8IDY0KTsKKwkJYXNzZXJ0KG91dHB1dFsyXSA8IDY0KTsKKworCQlpZiAoZGF0YWxlbmd0aCArIDQgPiB0YXJnc2l6ZSkKKwkJCXJldHVybiAoLTEpOworCQl0YXJnZXRbZGF0YWxlbmd0aCsrXSA9IEJhc2U2NFtvdXRwdXRbMF1dOworCQl0YXJnZXRbZGF0YWxlbmd0aCsrXSA9IEJhc2U2NFtvdXRwdXRbMV1dOworCQlpZiAoc3JjbGVuZ3RoID09IDEpCisJCQl0YXJnZXRbZGF0YWxlbmd0aCsrXSA9IFBhZDY0OworCQllbHNlCisJCQl0YXJnZXRbZGF0YWxlbmd0aCsrXSA9IEJhc2U2NFtvdXRwdXRbMl1dOworCQl0YXJnZXRbZGF0YWxlbmd0aCsrXSA9IFBhZDY0OworCX0KKwlpZiAoZGF0YWxlbmd0aCA+PSB0YXJnc2l6ZSkKKwkJcmV0dXJuICgtMSk7CisJdGFyZ2V0W2RhdGFsZW5ndGhdID0gJ1wwJzsJLyogUmV0dXJuZWQgdmFsdWUgZG9lc24ndCBjb3VudCBcMC4gKi8KKwlyZXR1cm4gKGRhdGFsZW5ndGgpOworfQorCisvKiBza2lwcyBhbGwgd2hpdGVzcGFjZSBhbnl3aGVyZS4KKyAgIGNvbnZlcnRzIGNoYXJhY3RlcnMsIGZvdXIgYXQgYSB0aW1lLCBzdGFydGluZyBhdCAob3IgYWZ0ZXIpCisgICBzcmMgZnJvbSBiYXNlIC0gNjQgbnVtYmVycyBpbnRvIHRocmVlIDggYml0IGJ5dGVzIGluIHRoZSB0YXJnZXQgYXJlYS4KKyAgIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiBkYXRhIGJ5dGVzIHN0b3JlZCBhdCB0aGUgdGFyZ2V0LCBvciAtMSBvbiBlcnJvci4KKyAqLworCitpbnQKK2I2NF9wdG9uKHNyYywgdGFyZ2V0LCB0YXJnc2l6ZSkKKwljaGFyIGNvbnN0ICpzcmM7CisJdV9jaGFyICp0YXJnZXQ7CisJc2l6ZV90IHRhcmdzaXplOworeworCXNpemVfdCB0YXJpbmRleDsKKwlpbnQgc3RhdGUsIGNoOworCWNoYXIgKnBvczsKKworCWFzc2VydChzcmMgIT0gTlVMTCk7CisJYXNzZXJ0KHRhcmdldCAhPSBOVUxMKTsKKworCXN0YXRlID0gMDsKKwl0YXJpbmRleCA9IDA7CisKKwl3aGlsZSAoKGNoID0gKHVfY2hhcikgKnNyYysrKSAhPSAnXDAnKSB7CisJCWlmIChpc3NwYWNlKGNoKSkJLyogU2tpcCB3aGl0ZXNwYWNlIGFueXdoZXJlLiAqLworCQkJY29udGludWU7CisKKwkJaWYgKGNoID09IFBhZDY0KQorCQkJYnJlYWs7CisKKwkJcG9zID0gc3RyY2hyKEJhc2U2NCwgY2gpOworCQlpZiAocG9zID09IDApIAkJLyogQSBub24tYmFzZTY0IGNoYXJhY3Rlci4gKi8KKwkJCXJldHVybiAoLTEpOworCisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSAwOgorCQkJaWYgKHRhcmdldCkgeworCQkJCWlmICh0YXJpbmRleCA+PSB0YXJnc2l6ZSkKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJdGFyZ2V0W3RhcmluZGV4XSA9IChwb3MgLSBCYXNlNjQpIDw8IDI7CisJCQl9CisJCQlzdGF0ZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJaWYgKHRhcmdldCkgeworCQkJCWlmICh0YXJpbmRleCArIDEgPj0gdGFyZ3NpemUpCisJCQkJCXJldHVybiAoLTEpOworCQkJCXRhcmdldFt0YXJpbmRleF0gfD0KKwkJCQkgICAgKHVfaW50MzJfdCkocG9zIC0gQmFzZTY0KSA+PiA0OworCQkJCXRhcmdldFt0YXJpbmRleCsxXSAgPSAoKHBvcyAtIEJhc2U2NCkgJiAweDBmKQorCQkJCQkJCTw8IDQgOworCQkJfQorCQkJdGFyaW5kZXgrKzsKKwkJCXN0YXRlID0gMjsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlpZiAodGFyZ2V0KSB7CisJCQkJaWYgKHRhcmluZGV4ICsgMSA+PSB0YXJnc2l6ZSkKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJdGFyZ2V0W3RhcmluZGV4XSB8PQorCQkJCQkodV9pbnQzMl90KShwb3MgLSBCYXNlNjQpID4+IDI7CisJCQkJdGFyZ2V0W3RhcmluZGV4KzFdID0gKChwb3MgLSBCYXNlNjQpICYgMHgwMykKKwkJCQkJCQk8PCA2OworCQkJfQorCQkJdGFyaW5kZXgrKzsKKwkJCXN0YXRlID0gMzsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlpZiAodGFyZ2V0KSB7CisJCQkJaWYgKHRhcmluZGV4ID49IHRhcmdzaXplKQorCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl0YXJnZXRbdGFyaW5kZXhdIHw9IChwb3MgLSBCYXNlNjQpOworCQkJfQorCQkJdGFyaW5kZXgrKzsKKwkJCXN0YXRlID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYWJvcnQoKTsKKwkJfQorCX0KKworCS8qCisJICogV2UgYXJlIGRvbmUgZGVjb2RpbmcgQmFzZS02NCBjaGFycy4gIExldCdzIHNlZSBpZiB3ZSBlbmRlZAorCSAqIG9uIGEgYnl0ZSBib3VuZGFyeSwgYW5kL29yIHdpdGggZXJyb25lb3VzIHRyYWlsaW5nIGNoYXJhY3RlcnMuCisJICovCisKKwlpZiAoY2ggPT0gUGFkNjQpIHsJCS8qIFdlIGdvdCBhIHBhZCBjaGFyLiAqLworCQljaCA9ICpzcmMrKzsJCS8qIFNraXAgaXQsIGdldCBuZXh0LiAqLworCQlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2UgMDoJCS8qIEludmFsaWQgPSBpbiBmaXJzdCBwb3NpdGlvbiAqLworCQljYXNlIDE6CQkvKiBJbnZhbGlkID0gaW4gc2Vjb25kIHBvc2l0aW9uICovCisJCQlyZXR1cm4gKC0xKTsKKworCQljYXNlIDI6CQkvKiBWYWxpZCwgbWVhbnMgb25lIGJ5dGUgb2YgaW5mbyAqLworCQkJLyogU2tpcCBhbnkgbnVtYmVyIG9mIHNwYWNlcy4gKi8KKwkJCWZvciAoOyBjaCAhPSAnXDAnOyBjaCA9ICh1X2NoYXIpICpzcmMrKykKKwkJCQlpZiAoIWlzc3BhY2UoY2gpKQorCQkJCQlicmVhazsKKwkJCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBhbm90aGVyIHRyYWlsaW5nID0gc2lnbi4gKi8KKwkJCWlmIChjaCAhPSBQYWQ2NCkKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCWNoID0gKnNyYysrOwkJLyogU2tpcCB0aGUgPSAqLworCQkJLyogRmFsbCB0aHJvdWdoIHRvICJzaW5nbGUgdHJhaWxpbmcgPSIgY2FzZS4gKi8KKwkJCS8qIEZBTExUSFJPVUdIICovCisKKwkJY2FzZSAzOgkJLyogVmFsaWQsIG1lYW5zIHR3byBieXRlcyBvZiBpbmZvICovCisJCQkvKgorCQkJICogV2Uga25vdyB0aGlzIGNoYXIgaXMgYW4gPS4gIElzIHRoZXJlIGFueXRoaW5nIGJ1dAorCQkJICogd2hpdGVzcGFjZSBhZnRlciBpdD8KKwkJCSAqLworCQkJZm9yICg7IGNoICE9ICdcMCc7IGNoID0gKHVfY2hhcikgKnNyYysrKQorCQkJCWlmICghaXNzcGFjZShjaCkpCisJCQkJCXJldHVybiAoLTEpOworCisJCQkvKgorCQkJICogTm93IG1ha2Ugc3VyZSBmb3IgY2FzZXMgMiBhbmQgMyB0aGF0IHRoZSAiZXh0cmEiCisJCQkgKiBiaXRzIHRoYXQgc2xvcHBlZCBwYXN0IHRoZSBsYXN0IGZ1bGwgYnl0ZSB3ZXJlCisJCQkgKiB6ZXJvcy4gIElmIHdlIGRvbid0IGNoZWNrIHRoZW0sIHRoZXkgYmVjb21lIGEKKwkJCSAqIHN1YmxpbWluYWwgY2hhbm5lbC4KKwkJCSAqLworCQkJaWYgKHRhcmdldCAmJiB0YXJnZXRbdGFyaW5kZXhdICE9IDApCisJCQkJcmV0dXJuICgtMSk7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBXZSBlbmRlZCBieSBzZWVpbmcgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLiAgTWFrZSBzdXJlIHdlCisJCSAqIGhhdmUgbm8gcGFydGlhbCBieXRlcyBseWluZyBhcm91bmQuCisJCSAqLworCQlpZiAoc3RhdGUgIT0gMCkKKwkJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAodGFyaW5kZXgpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvbmV0L2dldGFkZHJpbmZvLmMgYi9saWJjL2Rucy9uZXQvZ2V0YWRkcmluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjEyZDZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvbmV0L2dldGFkZHJpbmZvLmMKQEAgLTAsMCArMSwyNDM4IEBACisvKgkkTmV0QlNEOiBnZXRhZGRyaW5mby5jLHYgMS44MiAyMDA2LzAzLzI1IDEyOjA5OjQwIHJwYXVsbyBFeHAgJAkqLworLyoJJEtBTUU6IGdldGFkZHJpbmZvLmMsdiAxLjI5IDIwMDAvMDgvMzEgMTc6MjY6NTcgaXRvanVuIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVjdC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBJc3N1ZXMgdG8gYmUgZGlzY3Vzc2VkOgorICogLSBUaHJlYWQgc2FmZS1uZXNzIG11c3QgYmUgY2hlY2tlZC4KKyAqIC0gUmV0dXJuIHZhbHVlcy4gIFRoZXJlIGFyZSBub25zdGFuZGFyZCByZXR1cm4gdmFsdWVzIGRlZmluZWQgYW5kIHVzZWQKKyAqICAgaW4gdGhlIHNvdXJjZSBjb2RlLiAgVGhpcyBpcyBiZWNhdXNlIFJGQzI1NTMgaXMgc2lsZW50IGFib3V0IHdoaWNoIGVycm9yCisgKiAgIGNvZGUgbXVzdCBiZSByZXR1cm5lZCBmb3Igd2hpY2ggc2l0dWF0aW9uLgorICogLSBJUHY0IGNsYXNzZnVsIChzaG9ydGVuZWQpIGZvcm0uICBSRkMyNTUzIGlzIHNpbGVudCBhYm91dCBpdC4gIFhORVQgNS4yCisgKiAgIHNheXMgdG8gdXNlIGluZXRfYXRvbigpIHRvIGNvbnZlcnQgSVB2NCBudW1lcmljIHRvIGJpbmFyeSAoYWxvd3MKKyAqICAgY2xhc3NmdWwgZm9ybSBhcyBhIHJlc3VsdCkuCisgKiAgIGN1cnJlbnQgY29kZSAtIGRpc2FsbG93IGNsYXNzZnVsIGZvcm0gZm9yIElQdjQgKGR1ZSB0byB1c2Ugb2YgaW5ldF9wdG9uKS4KKyAqIC0gZnJlZWFkZHJpbmZvKE5VTEwpLiAgUkZDMjU1MyBpcyBzaWxlbnQgYWJvdXQgaXQuICBYTkVUIDUuMiBzYXlzIGl0IGlzCisgKiAgIGludmFsaWQuCisgKiAgIGN1cnJlbnQgY29kZSAtIFNFR1Ygb24gZnJlZWFkZHJpbmZvKE5VTEwpCisgKiBOb3RlOgorICogLSBXZSB1c2UgZ2V0aXBub2RlYnluYW1lKCkganVzdCBmb3IgdGhyZWFkLXNhZmVuZXNzLiAgVGhlcmUncyBubyBpbnRlbnQKKyAqICAgdG8gbGV0IGl0IGRvIFBGX1VOU1BFQyAoYWN0dWFsbHkgd2UgbmV2ZXIgcGFzcyBQRl9VTlNQRUMgdG8KKyAqICAgZ2V0aXBub2RlYnluYW1lKCkuCisgKiAtIFRoZSBjb2RlIGZpbHRlcnMgb3V0IEFGcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwsCisgKiAgIHdoZW4gZ2xvYmJpbmcgTlVMTCBob3N0bmFtZSAodG8gbG9vcGJhY2ssIG9yIHdpbGRjYXJkKS4gIElzIGl0IHRoZSByaWdodAorICogICB0aGluZyB0byBkbz8gIFdoYXQgaXMgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHBvc3QtUkZDMjU1MyBBSV9BRERSQ09ORklHCisgKiAgIGluIGFpX2ZsYWdzPworICogLSAocG9zdC0yNTUzKSBzZW1hbnRpY3Mgb2YgQUlfQUREUkNPTkZJRyBpdHNlbGYgaXMgdG9vIHZhZ3VlLgorICogICAoMSkgd2hhdCBzaG91bGQgd2UgZG8gYWdhaW5zdCBudW1lcmljIGhvc3RuYW1lICgyKSB3aGF0IHNob3VsZCB3ZSBkbworICogICBhZ2FpbnN0IE5VTEwgaG9zdG5hbWUgKDMpIHdoYXQgaXMgQUlfQUREUkNPTkZJRyBpdHNlbGYuICBBRiBub3QgcmVhZHk/CisgKiAgIG5vbi1sb29wYmFjayBhZGRyZXNzIGNvbmZpZ3VyZWQ/ICBnbG9iYWwgYWRkcmVzcyBjb25maWd1cmVkPworICogLSBUbyBhdm9pZCBzZWFyY2ggb3JkZXIgaXNzdWUsIHdlIGhhdmUgYSBiaWcgYW1vdW50IG9mIGNvZGUgZHVwbGljYXRlCisgKiAgIGZyb20gZ2V0aG5hbWFkZHIuYyBhbmQgc29tZSBvdGhlciBwbGFjZXMuICBUaGUgaXNzdWVzIHRoYXQgdGhlcmUncyBubworICogICBsb3dlciBsYXllciBmdW5jdGlvbiB0byBsb29rdXAgIklQdjQgb3IgSVB2NiIgcmVjb3JkLiAgQ2FsbGluZworICogICBnZXRob3N0YnluYW1lMiBmcm9tIGdldGFkZHJpbmZvIHdpbGwgZW5kIHVwIGluIHdyb25nIHNlYXJjaCBvcmRlciwgYXMKKyAqICAgZm9sbG93czoKKyAqCS0gVGhlIGNvZGUgbWFrZXMgdXNlIG9mIGZvbGxvd2luZyBjYWxscyB3aGVuIGFza2VkIHRvIHJlc29sdmVyIHdpdGgKKyAqCSAgYWlfZmFtaWx5ICA9IFBGX1VOU1BFQzoKKyAqCQlnZXRpcG5vZGVieW5hbWUoaG9zdCwgQUZfSU5FVDYpOworICoJCWdldGlwbm9kZWJ5bmFtZShob3N0LCBBRl9JTkVUKTsKKyAqCSAgVGhpcyB3aWxsIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIHF1ZXJpZXMgaWYgdGhlIG5vZGUgaXMgY29uZmlndXJlIHRvCisgKgkgIHByZWZlciAvZXRjL2hvc3RzIHRoYW4gRE5TOgorICoJCWxvb2t1cCAvZXRjL2hvc3RzIGZvciBJUHY2IGFkZHJlc3MKKyAqCQlsb29rdXAgRE5TIGZvciBJUHY2IGFkZHJlc3MKKyAqCQlsb29rdXAgL2V0Yy9ob3N0cyBmb3IgSVB2NCBhZGRyZXNzCisgKgkJbG9va3VwIEROUyBmb3IgSVB2NCBhZGRyZXNzCisgKgkgIHdoaWNoIG1heSBub3QgbWVldCBwZW9wbGUncyByZXF1aXJlbWVudC4KKyAqCSAgVGhlIHJpZ2h0IHRoaW5nIHRvIGhhcHBlbiBpcyB0byBoYXZlIHVuZGVybHlpbmcgbGF5ZXIgd2hpY2ggZG9lcworICoJICBQRl9VTlNQRUMgbG9va3VwIChsb29rdXAgYm90aCkgYW5kIHJldHVybiBjaGFpbiBvZiBhZGRyaW5mb3MuCisgKgkgIFRoaXMgd291bGQgcmVzdWx0IGluIGEgYml0IG9mIGNvZGUgZHVwbGljYXRlIHdpdGggX2Ruc19naGJ5bmFtZSgpIGFuZAorICoJICBmcmllbmRzLgorICovCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy91bi5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlICJOZXRkQ2xpZW50RGlzcGF0Y2guaCIKKyNpbmNsdWRlICJyZXNvbHZfY2FjaGUuaCIKKyNpbmNsdWRlICJyZXNvbHZfbmV0aWQuaCIKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPHN5c2xvZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgIm5zc3dpdGNoLmgiCisKKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KKyNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KKwordHlwZWRlZiB1bmlvbiBzb2NrYWRkcl91bmlvbiB7CisgICAgc3RydWN0IHNvY2thZGRyICAgICBnZW5lcmljOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgaW47CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBpbjY7Cit9IHNvY2thZGRyX3VuaW9uOworCisjZGVmaW5lIFNVQ0NFU1MgMAorI2RlZmluZSBBTlkgMAorI2RlZmluZSBZRVMgMQorI2RlZmluZSBOTyAgMAorCitzdGF0aWMgY29uc3QgY2hhciBpbl9hZGRyYW55W10gPSB7IDAsIDAsIDAsIDAgfTsKK3N0YXRpYyBjb25zdCBjaGFyIGluX2xvb3BiYWNrW10gPSB7IDEyNywgMCwgMCwgMSB9OworI2lmZGVmIElORVQ2CitzdGF0aWMgY29uc3QgY2hhciBpbjZfYWRkcmFueVtdID0geworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKK307CitzdGF0aWMgY29uc3QgY2hhciBpbjZfbG9vcGJhY2tbXSA9IHsKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxCit9OworI2VuZGlmCisKKy8vIFRoaXMgc2hvdWxkIGJlIHN5bmNocm9uaXplZCB0byBSZXNwb25zZUNvZGUuaAorc3RhdGljIGNvbnN0IGludCBEbnNQcm94eVF1ZXJ5UmVzdWx0ID0gMjIyOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFmZCB7CisJaW50IGFfYWY7CisJaW50IGFfYWRkcmxlbjsKKwlpbnQgYV9zb2NrbGVuOworCWludCBhX29mZjsKKwljb25zdCBjaGFyICphX2FkZHJhbnk7CisJY29uc3QgY2hhciAqYV9sb29wYmFjazsKKwlpbnQgYV9zY29wZWQ7Cit9IGFmZGwgW10gPSB7CisjaWZkZWYgSU5FVDYKKwl7UEZfSU5FVDYsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLAorCSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNiksCisJIG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl9pbjYsIHNpbjZfYWRkciksCisJIGluNl9hZGRyYW55LCBpbjZfbG9vcGJhY2ssIDF9LAorI2VuZGlmCisJe1BGX0lORVQsIHNpemVvZihzdHJ1Y3QgaW5fYWRkciksCisJIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pLAorCSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfaW4sIHNpbl9hZGRyKSwKKwkgaW5fYWRkcmFueSwgaW5fbG9vcGJhY2ssIDB9LAorCXswLCAwLCAwLCAwLCBOVUxMLCBOVUxMLCAwfSwKK307CisKK3N0cnVjdCBleHBsb3JlIHsKKwlpbnQgZV9hZjsKKwlpbnQgZV9zb2NrdHlwZTsKKwlpbnQgZV9wcm90b2NvbDsKKwljb25zdCBjaGFyICplX3Byb3Rvc3RyOworCWludCBlX3dpbGQ7CisjZGVmaW5lIFdJTERfQUYoZXgpCQkoKGV4KS0+ZV93aWxkICYgMHgwMSkKKyNkZWZpbmUgV0lMRF9TT0NLVFlQRShleCkJKChleCktPmVfd2lsZCAmIDB4MDIpCisjZGVmaW5lIFdJTERfUFJPVE9DT0woZXgpCSgoZXgpLT5lX3dpbGQgJiAweDA0KQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBleHBsb3JlIGV4cGxvcmVbXSA9IHsKKyNpZiAwCisJeyBQRl9MT0NBTCwgMCwgQU5ZLCBBTlksIE5VTEwsIDB4MDEgfSwKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJeyBQRl9JTkVUNiwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICJ1ZHAiLCAweDA3IH0sCisJeyBQRl9JTkVUNiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQLCAidGNwIiwgMHgwNyB9LAorCXsgUEZfSU5FVDYsIFNPQ0tfUkFXLCBBTlksIE5VTEwsIDB4MDUgfSwKKyNlbmRpZgorCXsgUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICJ1ZHAiLCAweDA3IH0sCisJeyBQRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1AsICJ0Y3AiLCAweDA3IH0sCisJeyBQRl9JTkVULCBTT0NLX1JBVywgQU5ZLCBOVUxMLCAweDA1IH0sCisJeyBQRl9VTlNQRUMsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLCAidWRwIiwgMHgwNyB9LAorCXsgUEZfVU5TUEVDLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1AsICJ0Y3AiLCAweDA3IH0sCisJeyBQRl9VTlNQRUMsIFNPQ0tfUkFXLCBBTlksIE5VTEwsIDB4MDUgfSwKKwl7IC0xLCAwLCAwLCBOVUxMLCAwIH0sCit9OworCisjaWZkZWYgSU5FVDYKKyNkZWZpbmUgUFRPTl9NQVgJMTYKKyNlbHNlCisjZGVmaW5lIFBUT05fTUFYCTQKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgbnNfc3JjIGRlZmF1bHRfZG5zX2ZpbGVzW10gPSB7CisJeyBOU1NSQ19GSUxFUywgCU5TX1NVQ0NFU1MgfSwKKwl7IE5TU1JDX0ROUywgCU5TX1NVQ0NFU1MgfSwKKwl7IDAsIDAgfQorfTsKKworI2RlZmluZSBNQVhQQUNLRVQJKDY0KjEwMjQpCisKK3R5cGVkZWYgdW5pb24geworCUhFQURFUiBoZHI7CisJdV9jaGFyIGJ1ZltNQVhQQUNLRVRdOworfSBxdWVyeWJ1ZjsKKworc3RydWN0IHJlc190YXJnZXQgeworCXN0cnVjdCByZXNfdGFyZ2V0ICpuZXh0OworCWNvbnN0IGNoYXIgKm5hbWU7CS8qIGRvbWFpbiBuYW1lICovCisJaW50IHFjbGFzcywgcXR5cGU7CS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJdV9jaGFyICphbnN3ZXI7CQkvKiBidWZmZXIgdG8gcHV0IGFuc3dlciAqLworCWludCBhbnNsZW47CQkvKiBzaXplIG9mIGFuc3dlciBidWZmZXIgKi8KKwlpbnQgbjsJCQkvKiByZXN1bHQgbGVuZ3RoICovCit9OworCitzdGF0aWMgaW50IHN0cjJudW1iZXIoY29uc3QgY2hhciAqKTsKK3N0YXRpYyBpbnQgZXhwbG9yZV9mcWRuKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLCBjb25zdCBjaGFyICosCisJY29uc3QgY2hhciAqLCBzdHJ1Y3QgYWRkcmluZm8gKiosIHVuc2lnbmVkIG5ldGlkLCB1bnNpZ25lZCBtYXJrKTsKK3N0YXRpYyBpbnQgZXhwbG9yZV9udWxsKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLAorCWNvbnN0IGNoYXIgKiwgc3RydWN0IGFkZHJpbmZvICoqKTsKK3N0YXRpYyBpbnQgZXhwbG9yZV9udW1lcmljKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLCBjb25zdCBjaGFyICosCisJY29uc3QgY2hhciAqLCBzdHJ1Y3QgYWRkcmluZm8gKiosIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgaW50IGV4cGxvcmVfbnVtZXJpY19zY29wZShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqLAorCWNvbnN0IGNoYXIgKiwgc3RydWN0IGFkZHJpbmZvICoqKTsKK3N0YXRpYyBpbnQgZ2V0X2Nhbm9ubmFtZShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwKKwlzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqKTsKK3N0YXRpYyBzdHJ1Y3QgYWRkcmluZm8gKmdldF9haShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwKKwljb25zdCBzdHJ1Y3QgYWZkICosIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgaW50IGdldF9wb3J0bWF0Y2goY29uc3Qgc3RydWN0IGFkZHJpbmZvICosIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgaW50IGdldF9wb3J0KGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLCBjb25zdCBjaGFyICosIGludCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFmZCAqZmluZF9hZmQoaW50KTsKKyNpZmRlZiBJTkVUNgorc3RhdGljIGludCBpcDZfc3RyMnNjb3BlaWQoY2hhciAqLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIHVfaW50MzJfdCAqKTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGFkZHJpbmZvICpnZXRhbnN3ZXIoY29uc3QgcXVlcnlidWYgKiwgaW50LCBjb25zdCBjaGFyICosIGludCwKKwljb25zdCBzdHJ1Y3QgYWRkcmluZm8gKik7CitzdGF0aWMgaW50IF9kbnNfZ2V0YWRkcmluZm8odm9pZCAqLCB2b2lkICosIHZhX2xpc3QpOworc3RhdGljIHZvaWQgX3NldGh0ZW50KEZJTEUgKiopOworc3RhdGljIHZvaWQgX2VuZGh0ZW50KEZJTEUgKiopOworc3RhdGljIHN0cnVjdCBhZGRyaW5mbyAqX2dldGh0ZW50KEZJTEUgKiosIGNvbnN0IGNoYXIgKiwKKyAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKik7CitzdGF0aWMgaW50IF9maWxlc19nZXRhZGRyaW5mbyh2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7CisKK3N0YXRpYyBpbnQgcmVzX3F1ZXJ5Tihjb25zdCBjaGFyICosIHN0cnVjdCByZXNfdGFyZ2V0ICosIHJlc19zdGF0ZSk7CitzdGF0aWMgaW50IHJlc19zZWFyY2hOKGNvbnN0IGNoYXIgKiwgc3RydWN0IHJlc190YXJnZXQgKiwgcmVzX3N0YXRlKTsKK3N0YXRpYyBpbnQgcmVzX3F1ZXJ5ZG9tYWluTihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKKwlzdHJ1Y3QgcmVzX3RhcmdldCAqLCByZXNfc3RhdGUpOworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFpX2Vycmxpc3RbXSA9IHsKKwkiU3VjY2VzcyIsCisJIkFkZHJlc3MgZmFtaWx5IGZvciBob3N0bmFtZSBub3Qgc3VwcG9ydGVkIiwJLyogRUFJX0FERFJGQU1JTFkgKi8KKwkiVGVtcG9yYXJ5IGZhaWx1cmUgaW4gbmFtZSByZXNvbHV0aW9uIiwJCS8qIEVBSV9BR0FJTiAgICAgICovCisJIkludmFsaWQgdmFsdWUgZm9yIGFpX2ZsYWdzIiwJCSAgICAgICAJLyogRUFJX0JBREZMQUdTICAgKi8KKwkiTm9uLXJlY292ZXJhYmxlIGZhaWx1cmUgaW4gbmFtZSByZXNvbHV0aW9uIiwgCS8qIEVBSV9GQUlMICAgICAgICovCisJImFpX2ZhbWlseSBub3Qgc3VwcG9ydGVkIiwJCQkvKiBFQUlfRkFNSUxZICAgICAqLworCSJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIiwgCQkJLyogRUFJX01FTU9SWSAgICAgKi8KKwkiTm8gYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggaG9zdG5hbWUiLCAJCS8qIEVBSV9OT0RBVEEgICAgICovCisJImhvc3RuYW1lIG5vciBzZXJ2bmFtZSBwcm92aWRlZCwgb3Igbm90IGtub3duIiwJLyogRUFJX05PTkFNRSAgICAgKi8KKwkic2Vydm5hbWUgbm90IHN1cHBvcnRlZCBmb3IgYWlfc29ja3R5cGUiLAkvKiBFQUlfU0VSVklDRSAgICAqLworCSJhaV9zb2NrdHlwZSBub3Qgc3VwcG9ydGVkIiwgCQkJLyogRUFJX1NPQ0tUWVBFICAgKi8KKwkiU3lzdGVtIGVycm9yIHJldHVybmVkIGluIGVycm5vIiwgCQkvKiBFQUlfU1lTVEVNICAgICAqLworCSJJbnZhbGlkIHZhbHVlIGZvciBoaW50cyIsCQkJLyogRUFJX0JBREhJTlRTCSAgKi8KKwkiUmVzb2x2ZWQgcHJvdG9jb2wgaXMgdW5rbm93biIsCQkJLyogRUFJX1BST1RPQ09MICAgKi8KKwkiQXJndW1lbnQgYnVmZmVyIG92ZXJmbG93IiwJCQkvKiBFQUlfT1ZFUkZMT1cgICAqLworCSJVbmtub3duIGVycm9yIiwgCQkJCS8qIEVBSV9NQVggICAgICAgICovCit9OworCisvKiBYWFggbWFjcm9zIHRoYXQgbWFrZSBleHRlcm5hbCByZWZlcmVuY2UgaXMgQkFELiAqLworCisjZGVmaW5lIEdFVF9BSShhaSwgYWZkLCBhZGRyKSAJCQkJCVwKK2RvIHsgCQkJCQkJCQlcCisJLyogZXh0ZXJuYWwgcmVmZXJlbmNlOiBwYWksIGVycm9yLCBhbmQgbGFiZWwgZnJlZSAqLyAJXAorCShhaSkgPSBnZXRfYWkocGFpLCAoYWZkKSwgKGFkZHIpKTsgCQkJXAorCWlmICgoYWkpID09IE5VTEwpIHsgCQkJCQlcCisJCWVycm9yID0gRUFJX01FTU9SWTsgCQkJCVwKKwkJZ290byBmcmVlOyAJCQkJCVwKKwl9IAkJCQkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBHRVRfUE9SVChhaSwgc2VydikgCQkJCQlcCitkbyB7IAkJCQkJCQkJXAorCS8qIGV4dGVybmFsIHJlZmVyZW5jZTogZXJyb3IgYW5kIGxhYmVsIGZyZWUgKi8gCQlcCisJZXJyb3IgPSBnZXRfcG9ydCgoYWkpLCAoc2VydiksIDApOyAJCQlcCisJaWYgKGVycm9yICE9IDApIAkJCQkJXAorCQlnb3RvIGZyZWU7IAkJCQkJXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgR0VUX0NBTk9OTkFNRShhaSwgc3RyKSAJCQkJCVwKK2RvIHsgCQkJCQkJCQlcCisJLyogZXh0ZXJuYWwgcmVmZXJlbmNlOiBwYWksIGVycm9yIGFuZCBsYWJlbCBmcmVlICovIAlcCisJZXJyb3IgPSBnZXRfY2Fub25uYW1lKHBhaSwgKGFpKSwgKHN0cikpOyAJCVwKKwlpZiAoZXJyb3IgIT0gMCkgCQkJCQlcCisJCWdvdG8gZnJlZTsgCQkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBFUlIoZXJyKSAJCQkJCQlcCitkbyB7IAkJCQkJCQkJXAorCS8qIGV4dGVybmFsIHJlZmVyZW5jZTogZXJyb3IsIGFuZCBsYWJlbCBiYWQgKi8gCQlcCisJZXJyb3IgPSAoZXJyKTsgCQkJCQkJXAorCWdvdG8gYmFkOyAJCQkJCQlcCisJLypOT1RSRUFDSEVEKi8gCQkJCQkJXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgTUFUQ0hfRkFNSUxZKHgsIHksIHcpIAkJCQkJCVwKKwkoKHgpID09ICh5KSB8fCAoLypDT05TVENPTkQqLyh3KSAmJiAoKHgpID09IFBGX1VOU1BFQyB8fCAJXAorCSAgICAoeSkgPT0gUEZfVU5TUEVDKSkpCisjZGVmaW5lIE1BVENIKHgsIHksIHcpIAkJCQkJCQlcCisJKCh4KSA9PSAoeSkgfHwgKC8qQ09OU1RDT05EKi8odykgJiYgKCh4KSA9PSBBTlkgfHwgKHkpID09IEFOWSkpKQorCitjb25zdCBjaGFyICoKK2dhaV9zdHJlcnJvcihpbnQgZWNvZGUpCit7CisJaWYgKGVjb2RlIDwgMCB8fCBlY29kZSA+IEVBSV9NQVgpCisJCWVjb2RlID0gRUFJX01BWDsKKwlyZXR1cm4gYWlfZXJybGlzdFtlY29kZV07Cit9CisKK3ZvaWQKK2ZyZWVhZGRyaW5mbyhzdHJ1Y3QgYWRkcmluZm8gKmFpKQoreworCXN0cnVjdCBhZGRyaW5mbyAqbmV4dDsKKworCWFzc2VydChhaSAhPSBOVUxMKTsKKworCWRvIHsKKwkJbmV4dCA9IGFpLT5haV9uZXh0OworCQlpZiAoYWktPmFpX2Nhbm9ubmFtZSkKKwkJCWZyZWUoYWktPmFpX2Nhbm9ubmFtZSk7CisJCS8qIG5vIG5lZWQgdG8gZnJlZShhaS0+YWlfYWRkcikgKi8KKwkJZnJlZShhaSk7CisJCWFpID0gbmV4dDsKKwl9IHdoaWxlIChhaSk7Cit9CisKK3N0YXRpYyBpbnQKK3N0cjJudW1iZXIoY29uc3QgY2hhciAqcCkKK3sKKwljaGFyICplcDsKKwl1bnNpZ25lZCBsb25nIHY7CisKKwlhc3NlcnQocCAhPSBOVUxMKTsKKworCWlmICgqcCA9PSAnXDAnKQorCQlyZXR1cm4gLTE7CisJZXAgPSBOVUxMOworCWVycm5vID0gMDsKKwl2ID0gc3RydG91bChwLCAmZXAsIDEwKTsKKwlpZiAoZXJybm8gPT0gMCAmJiBlcCAmJiAqZXAgPT0gJ1wwJyAmJiB2IDw9IFVJTlRfTUFYKQorCQlyZXR1cm4gdjsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworLyoKKyAqIENvbm5lY3QgYSBVRFAgc29ja2V0IHRvIGEgZ2l2ZW4gdW5pY2FzdCBhZGRyZXNzLiBUaGlzIHdpbGwgY2F1c2Ugbm8gbmV0d29yaworICogdHJhZmZpYywgYnV0IHdpbGwgZmFpbCBmYXN0IGlmIHRoZSBzeXN0ZW0gaGFzIG5vIG9yIGxpbWl0ZWQgcmVhY2hhYmlsaXR5IHRvCisgKiB0aGUgZGVzdGluYXRpb24gKGUuZy4sIG5vIElQdjQgYWRkcmVzcywgbm8gSVB2NiBkZWZhdWx0IHJvdXRlLCAuLi4pLgorICovCitzdGF0aWMgaW50CitfdGVzdF9jb25uZWN0KGludCBwZiwgc3RydWN0IHNvY2thZGRyICphZGRyLCBzaXplX3QgYWRkcmxlbiwgdW5zaWduZWQgbWFyaykgeworCWludCBzID0gc29ja2V0KHBmLCBTT0NLX0RHUkFNIHwgU09DS19DTE9FWEVDLCBJUFBST1RPX1VEUCk7CisJaWYgKHMgPCAwKQorCQlyZXR1cm4gMDsKKwlpZiAobWFyayAhPSBNQVJLX1VOU0VUICYmIHNldHNvY2tvcHQocywgU09MX1NPQ0tFVCwgU09fTUFSSywgJm1hcmssIHNpemVvZihtYXJrKSkgPCAwKQorCQlyZXR1cm4gMDsKKwlpbnQgcmV0OworCWRvIHsKKwkJcmV0ID0gX19jb25uZWN0KHMsIGFkZHIsIGFkZHJsZW4pOworCX0gd2hpbGUgKHJldCA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOworCWludCBzdWNjZXNzID0gKHJldCA9PSAwKTsKKwlkbyB7CisJCXJldCA9IGNsb3NlKHMpOworCX0gd2hpbGUgKHJldCA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOworCXJldHVybiBzdWNjZXNzOworfQorCisvKgorICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgZGV0ZXJtaW5lIHdoZXRoZXIgSVB2NCBvciBJUHY2IGNvbm5lY3Rpdml0eSBpcworICogYXZhaWxhYmxlIGluIG9yZGVyIHRvIGltcGxlbWVudCBBSV9BRERSQ09ORklHLgorICoKKyAqIFN0cmljdGx5IHNwZWFraW5nLCBBSV9BRERSQ09ORklHIHNob3VsZCBub3QgbG9vayBhdCB3aGV0aGVyIGNvbm5lY3Rpdml0eSBpcworICogYXZhaWxhYmxlLCBidXQgd2hldGhlciBhZGRyZXNzZXMgb2YgdGhlIHNwZWNpZmllZCBmYW1pbHkgYXJlICJjb25maWd1cmVkCisgKiBvbiB0aGUgbG9jYWwgc3lzdGVtIi4gSG93ZXZlciwgYmlvbmljIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgZ2V0aWZhZGRycywKKyAqIHNvIGNoZWNraW5nIGZvciBjb25uZWN0aXZpdHkgaXMgdGhlIG5leHQgYmVzdCB0aGluZy4KKyAqLworc3RhdGljIGludAorX2hhdmVfaXB2Nih1bnNpZ25lZCBtYXJrKSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNl90ZXN0ID0geworCQkuc2luNl9mYW1pbHkgPSBBRl9JTkVUNiwKKwkJLnNpbjZfYWRkci5zNl9hZGRyID0geyAgLy8gMjAwMDo6CisJCQkweDIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfQorCQl9OworCXNvY2thZGRyX3VuaW9uIGFkZHIgPSB7IC5pbjYgPSBzaW42X3Rlc3QgfTsKKwlyZXR1cm4gX3Rlc3RfY29ubmVjdChQRl9JTkVUNiwgJmFkZHIuZ2VuZXJpYywgc2l6ZW9mKGFkZHIuaW42KSwgbWFyayk7Cit9CisKK3N0YXRpYyBpbnQKK19oYXZlX2lwdjQodW5zaWduZWQgbWFyaykgeworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3Rlc3QgPSB7CisJCS5zaW5fZmFtaWx5ID0gQUZfSU5FVCwKKwkJLnNpbl9hZGRyLnNfYWRkciA9IF9fY29uc3RhbnRfaHRvbmwoMHgwODA4MDgwOEwpICAvLyA4LjguOC44CisJfTsKKwlzb2NrYWRkcl91bmlvbiBhZGRyID0geyAuaW4gPSBzaW5fdGVzdCB9OworCXJldHVybiBfdGVzdF9jb25uZWN0KFBGX0lORVQsICZhZGRyLmdlbmVyaWMsIHNpemVvZihhZGRyLmluKSwgbWFyayk7Cit9CisKKy8vIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIHJldHVybnMgb24gZXJyb3IuCitzdGF0aWMgaW50CithbmRyb2lkX2dldGFkZHJpbmZvX3Byb3h5KAorICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLCBjb25zdCBjaGFyICpzZXJ2bmFtZSwKKyAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmhpbnRzLCBzdHJ1Y3QgYWRkcmluZm8gKipyZXMsIHVuc2lnbmVkIG5ldGlkKQoreworCWludCBzb2NrOworCWNvbnN0IGludCBvbmUgPSAxOworCXN0cnVjdCBzb2NrYWRkcl91biBwcm94eV9hZGRyOworCUZJTEUqIHByb3h5ID0gTlVMTDsKKwlpbnQgc3VjY2VzcyA9IDA7CisKKwkvLyBDbGVhciB0aGlzIGF0IHN0YXJ0LCBhcyB3ZSB1c2UgaXRzIG5vbi1OVUxMbmVzcyBsYXRlciAoaW4gdGhlCisJLy8gZXJyb3IgcGF0aCkgdG8gZGVjaWRlIGlmIHdlIGhhdmUgdG8gZnJlZSB1cCBhbnkgbWVtb3J5IHdlCisJLy8gYWxsb2NhdGVkIGluIHRoZSBwcm9jZXNzIChiZWZvcmUgZmFpbGluZykuCisJKnJlcyA9IE5VTEw7CisKKwkvLyBCb2d1cyB0aGluZ3Mgd2UgY2FuJ3Qgc2VyaWFsaXplLiAgRG9uJ3QgdXNlIHRoZSBwcm94eS4gIFRoZXNlIHdpbGwgZmFpbCAtIGxldCB0aGVtLgorCWlmICgoaG9zdG5hbWUgIT0gTlVMTCAmJgorCSAgICAgc3RyY3Nwbihob3N0bmFtZSwgIiBcblxyXHReJ1wiIikgIT0gc3RybGVuKGhvc3RuYW1lKSkgfHwKKwkgICAgKHNlcnZuYW1lICE9IE5VTEwgJiYKKwkgICAgIHN0cmNzcG4oc2Vydm5hbWUsICIgXG5cclx0XidcIiIpICE9IHN0cmxlbihzZXJ2bmFtZSkpKSB7CisJCXJldHVybiBFQUlfTk9EQVRBOworCX0KKworCXNvY2sgPSBzb2NrZXQoQUZfVU5JWCwgU09DS19TVFJFQU0gfCBTT0NLX0NMT0VYRUMsIDApOworCWlmIChzb2NrIDwgMCkgeworCQlyZXR1cm4gRUFJX05PREFUQTsKKwl9CisKKwlzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJm9uZSwgc2l6ZW9mKG9uZSkpOworCW1lbXNldCgmcHJveHlfYWRkciwgMCwgc2l6ZW9mKHByb3h5X2FkZHIpKTsKKwlwcm94eV9hZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworCXN0cmxjcHkocHJveHlfYWRkci5zdW5fcGF0aCwgIi9kZXYvc29ja2V0L2Ruc3Byb3h5ZCIsCisJCXNpemVvZihwcm94eV9hZGRyLnN1bl9wYXRoKSk7CisJaWYgKFRFTVBfRkFJTFVSRV9SRVRSWShjb25uZWN0KHNvY2ssCisJCQkJICAgICAgIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSAmcHJveHlfYWRkciwKKwkJCQkgICAgICAgc2l6ZW9mKHByb3h5X2FkZHIpKSkgIT0gMCkgeworCQljbG9zZShzb2NrKTsKKwkJcmV0dXJuIEVBSV9OT0RBVEE7CisJfQorCisJbmV0aWQgPSBfX25ldGRDbGllbnREaXNwYXRjaC5uZXRJZEZvclJlc29sdihuZXRpZCk7CisKKwkvLyBTZW5kIHRoZSByZXF1ZXN0LgorCXByb3h5ID0gZmRvcGVuKHNvY2ssICJyKyIpOworCWlmIChmcHJpbnRmKHByb3h5LCAiZ2V0YWRkcmluZm8gJXMgJXMgJWQgJWQgJWQgJWQgJXUiLAorCQkgICAgaG9zdG5hbWUgPT0gTlVMTCA/ICJeIiA6IGhvc3RuYW1lLAorCQkgICAgc2Vydm5hbWUgPT0gTlVMTCA/ICJeIiA6IHNlcnZuYW1lLAorCQkgICAgaGludHMgPT0gTlVMTCA/IC0xIDogaGludHMtPmFpX2ZsYWdzLAorCQkgICAgaGludHMgPT0gTlVMTCA/IC0xIDogaGludHMtPmFpX2ZhbWlseSwKKwkJICAgIGhpbnRzID09IE5VTEwgPyAtMSA6IGhpbnRzLT5haV9zb2NrdHlwZSwKKwkJICAgIGhpbnRzID09IE5VTEwgPyAtMSA6IGhpbnRzLT5haV9wcm90b2NvbCwKKwkJICAgIG5ldGlkKSA8IDApIHsKKwkJZ290byBleGl0OworCX0KKwkvLyBsaXRlcmFsIE5VTEwgYnl0ZSBhdCBlbmQsIHJlcXVpcmVkIGJ5IEZyYW1ld29ya0xpc3RlbmVyCisJaWYgKGZwdXRjKDAsIHByb3h5KSA9PSBFT0YgfHwKKwkgICAgZmZsdXNoKHByb3h5KSAhPSAwKSB7CisJCWdvdG8gZXhpdDsKKwl9CisKKwljaGFyIGJ1Zls0XTsKKwkvLyByZWFkIHJlc3VsdCBjb2RlIGZvciBnZXRob3N0YnlhZGRyCisJaWYgKGZyZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1ZiksIHByb3h5KSAhPSBzaXplb2YoYnVmKSkgeworCQlnb3RvIGV4aXQ7CisJfQorCisJaW50IHJlc3VsdF9jb2RlID0gKGludClzdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJLy8gdmVyaWZ5IHRoZSBjb2RlIGl0c2VsZgorCWlmIChyZXN1bHRfY29kZSAhPSBEbnNQcm94eVF1ZXJ5UmVzdWx0ICkgeworCQlmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBwcm94eSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdHJ1Y3QgYWRkcmluZm8qIGFpID0gTlVMTDsKKwlzdHJ1Y3QgYWRkcmluZm8qKiBuZXh0cmVzID0gcmVzOworCXdoaWxlICgxKSB7CisJCXVpbnQzMl90IGFkZHJpbmZvX2xlbjsKKwkJaWYgKGZyZWFkKCZhZGRyaW5mb19sZW4sIHNpemVvZihhZGRyaW5mb19sZW4pLAorCQkJICAxLCBwcm94eSkgIT0gMSkgeworCQkJYnJlYWs7CisJCX0KKwkJYWRkcmluZm9fbGVuID0gbnRvaGwoYWRkcmluZm9fbGVuKTsKKwkJaWYgKGFkZHJpbmZvX2xlbiA9PSAwKSB7CisJCQlzdWNjZXNzID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGFkZHJpbmZvX2xlbiA8IHNpemVvZihzdHJ1Y3QgYWRkcmluZm8pKSB7CisJCQlicmVhazsKKwkJfQorCQlzdHJ1Y3QgYWRkcmluZm8qIGFpID0gY2FsbG9jKDEsIGFkZHJpbmZvX2xlbiArCisJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKSk7CisJCWlmIChhaSA9PSBOVUxMKSB7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChmcmVhZChhaSwgYWRkcmluZm9fbGVuLCAxLCBwcm94eSkgIT0gMSkgeworCQkJLy8gRXJyb3I7IGZhbGwgdGhyb3VnaC4KKwkJCWJyZWFrOworCQl9CisKKwkJLy8gWmVybyBvdXQgdGhlIHBvaW50ZXIgZmllbGRzIHdlIGNvcGllZCB3aGljaCBhcmVuJ3QKKwkJLy8gdmFsaWQgaW4gdGhpcyBhZGRyZXNzIHNwYWNlLgorCQlhaS0+YWlfYWRkciA9IE5VTEw7CisJCWFpLT5haV9jYW5vbm5hbWUgPSBOVUxMOworCQlhaS0+YWlfbmV4dCA9IE5VTEw7CisKKwkJLy8gc3RydWN0IHNvY2thZGRyCisJCXVpbnQzMl90IGFkZHJfbGVuOworCQlpZiAoZnJlYWQoJmFkZHJfbGVuLCBzaXplb2YoYWRkcl9sZW4pLCAxLCBwcm94eSkgIT0gMSkgeworCQkJYnJlYWs7CisJCX0KKwkJYWRkcl9sZW4gPSBudG9obChhZGRyX2xlbik7CisJCWlmIChhZGRyX2xlbiAhPSAwKSB7CisJCQlpZiAoYWRkcl9sZW4gPiBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpKSB7CisJCQkJLy8gQm9ndXM7IHRvbyBiaWcuCisJCQkJYnJlYWs7CisJCQl9CisJCQlzdHJ1Y3Qgc29ja2FkZHIqIGFkZHIgPSAoc3RydWN0IHNvY2thZGRyKikoYWkgKyAxKTsKKwkJCWlmIChmcmVhZChhZGRyLCBhZGRyX2xlbiwgMSwgcHJveHkpICE9IDEpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWFpLT5haV9hZGRyID0gYWRkcjsKKwkJfQorCisJCS8vIGNhbm5vbm5hbWUKKwkJdWludDMyX3QgbmFtZV9sZW47CisJCWlmIChmcmVhZCgmbmFtZV9sZW4sIHNpemVvZihuYW1lX2xlbiksIDEsIHByb3h5KSAhPSAxKSB7CisJCQlicmVhazsKKwkJfQorCQluYW1lX2xlbiA9IG50b2hsKG5hbWVfbGVuKTsKKwkJaWYgKG5hbWVfbGVuICE9IDApIHsKKwkJCWFpLT5haV9jYW5vbm5hbWUgPSAoY2hhciopIG1hbGxvYyhuYW1lX2xlbik7CisJCQlpZiAoZnJlYWQoYWktPmFpX2Nhbm9ubmFtZSwgbmFtZV9sZW4sIDEsIHByb3h5KSAhPSAxKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoYWktPmFpX2Nhbm9ubmFtZVtuYW1lX2xlbiAtIDFdICE9ICdcMCcpIHsKKwkJCQkvLyBUaGUgcHJveHkgc2hvdWxkIGJlIHJldHVybmluZyB0aGlzCisJCQkJLy8gTlVMTC10ZXJtaW5hdGVkLgorCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJKm5leHRyZXMgPSBhaTsKKwkJbmV4dHJlcyA9ICZhaS0+YWlfbmV4dDsKKwkJYWkgPSBOVUxMOworCX0KKworCWlmIChhaSAhPSBOVUxMKSB7CisJCS8vIENsZWFuIHVwIHBhcnRpYWxseS1idWlsdCBhZGRyaW5mbyB0aGF0IHdlIG5ldmVyIGVuZGVkIHVwCisJCS8vIGF0dGFjaGluZyB0byB0aGUgcmVzcG9uc2UuCisJCWZyZWVhZGRyaW5mbyhhaSk7CisJfQorZXhpdDoKKwlpZiAocHJveHkgIT0gTlVMTCkgeworCQlmY2xvc2UocHJveHkpOworCX0KKworCWlmIChzdWNjZXNzKSB7CisJCXJldHVybiAwOworCX0KKworCS8vIFByb3h5IGZhaWxlZDsKKwkvLyBjbGVhbiB1cCBtZW1vcnkgd2UgbWlnaHQndmUgYWxsb2NhdGVkLgorCWlmICgqcmVzKSB7CisJCWZyZWVhZGRyaW5mbygqcmVzKTsKKwkJKnJlcyA9IE5VTEw7CisJfQorCXJldHVybiBFQUlfTk9EQVRBOworfQorCitpbnQKK2dldGFkZHJpbmZvKGNvbnN0IGNoYXIgKmhvc3RuYW1lLCBjb25zdCBjaGFyICpzZXJ2bmFtZSwKKyAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmhpbnRzLCBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpCit7CisJcmV0dXJuIGFuZHJvaWRfZ2V0YWRkcmluZm9mb3JuZXQoaG9zdG5hbWUsIHNlcnZuYW1lLCBoaW50cywgTkVUSURfVU5TRVQsIE1BUktfVU5TRVQsIHJlcyk7Cit9CisKK2ludAorYW5kcm9pZF9nZXRhZGRyaW5mb2Zvcm5ldChjb25zdCBjaGFyICpob3N0bmFtZSwgY29uc3QgY2hhciAqc2Vydm5hbWUsCisgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywgdW5zaWduZWQgbmV0aWQsIHVuc2lnbmVkIG1hcmssIHN0cnVjdCBhZGRyaW5mbyAqKnJlcykKK3sKKwlzdHJ1Y3QgYWRkcmluZm8gc2VudGluZWw7CisJc3RydWN0IGFkZHJpbmZvICpjdXI7CisJaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgYWRkcmluZm8gYWk7CisJc3RydWN0IGFkZHJpbmZvIGFpMDsKKwlzdHJ1Y3QgYWRkcmluZm8gKnBhaTsKKwljb25zdCBzdHJ1Y3QgZXhwbG9yZSAqZXg7CisJY29uc3QgY2hhciogY2FjaGVfbW9kZSA9IGdldGVudigiQU5EUk9JRF9ETlNfTU9ERSIpOworCisJLyogaG9zdG5hbWUgaXMgYWxsb3dlZCB0byBiZSBOVUxMICovCisJLyogc2Vydm5hbWUgaXMgYWxsb3dlZCB0byBiZSBOVUxMICovCisJLyogaGludHMgaXMgYWxsb3dlZCB0byBiZSBOVUxMICovCisJYXNzZXJ0KHJlcyAhPSBOVUxMKTsKKwltZW1zZXQoJnNlbnRpbmVsLCAwLCBzaXplb2Yoc2VudGluZWwpKTsKKwljdXIgPSAmc2VudGluZWw7CisJcGFpID0gJmFpOworCXBhaS0+YWlfZmxhZ3MgPSAwOworCXBhaS0+YWlfZmFtaWx5ID0gUEZfVU5TUEVDOworCXBhaS0+YWlfc29ja3R5cGUgPSBBTlk7CisJcGFpLT5haV9wcm90b2NvbCA9IEFOWTsKKwlwYWktPmFpX2FkZHJsZW4gPSAwOworCXBhaS0+YWlfY2Fub25uYW1lID0gTlVMTDsKKwlwYWktPmFpX2FkZHIgPSBOVUxMOworCXBhaS0+YWlfbmV4dCA9IE5VTEw7CisKKwlpZiAoaG9zdG5hbWUgPT0gTlVMTCAmJiBzZXJ2bmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gRUFJX05PTkFNRTsKKwlpZiAoaGludHMpIHsKKwkJLyogZXJyb3IgY2hlY2sgZm9yIGhpbnRzICovCisJCWlmIChoaW50cy0+YWlfYWRkcmxlbiB8fCBoaW50cy0+YWlfY2Fub25uYW1lIHx8CisJCSAgICBoaW50cy0+YWlfYWRkciB8fCBoaW50cy0+YWlfbmV4dCkKKwkJCUVSUihFQUlfQkFESElOVFMpOyAvKiB4eHggKi8KKwkJaWYgKGhpbnRzLT5haV9mbGFncyAmIH5BSV9NQVNLKQorCQkJRVJSKEVBSV9CQURGTEFHUyk7CisJCXN3aXRjaCAoaGludHMtPmFpX2ZhbWlseSkgeworCQljYXNlIFBGX1VOU1BFQzoKKwkJY2FzZSBQRl9JTkVUOgorI2lmZGVmIElORVQ2CisJCWNhc2UgUEZfSU5FVDY6CisjZW5kaWYKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRVJSKEVBSV9GQU1JTFkpOworCQl9CisJCW1lbWNweShwYWksIGhpbnRzLCBzaXplb2YoKnBhaSkpOworCisJCS8qCisJCSAqIGlmIGJvdGggc29ja3R5cGUvcHJvdG9jb2wgYXJlIHNwZWNpZmllZCwgY2hlY2sgaWYgdGhleQorCQkgKiBhcmUgbWVhbmluZ2Z1bCBjb21iaW5hdGlvbi4KKwkJICovCisJCWlmIChwYWktPmFpX3NvY2t0eXBlICE9IEFOWSAmJiBwYWktPmFpX3Byb3RvY29sICE9IEFOWSkgeworCQkJZm9yIChleCA9IGV4cGxvcmU7IGV4LT5lX2FmID49IDA7IGV4KyspIHsKKwkJCQlpZiAocGFpLT5haV9mYW1pbHkgIT0gZXgtPmVfYWYpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChleC0+ZV9zb2NrdHlwZSA9PSBBTlkpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChleC0+ZV9wcm90b2NvbCA9PSBBTlkpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChwYWktPmFpX3NvY2t0eXBlID09IGV4LT5lX3NvY2t0eXBlCisJCQkJICYmIHBhaS0+YWlfcHJvdG9jb2wgIT0gZXgtPmVfcHJvdG9jb2wpIHsKKwkJCQkJRVJSKEVBSV9CQURISU5UUyk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBjaGVjayBmb3Igc3BlY2lhbCBjYXNlcy4gICgxKSBudW1lcmljIHNlcnZuYW1lIGlzIGRpc2FsbG93ZWQgaWYKKwkgKiBzb2NrdHlwZS9wcm90b2NvbCBhcmUgbGVmdCB1bnNwZWNpZmllZC4gKDIpIHNlcnZuYW1lIGlzIGRpc2FsbG93ZWQKKwkgKiBmb3IgcmF3IGFuZCBvdGhlciBpbmV0eyw2fSBzb2NrZXRzLgorCSAqLworCWlmIChNQVRDSF9GQU1JTFkocGFpLT5haV9mYW1pbHksIFBGX0lORVQsIDEpCisjaWZkZWYgUEZfSU5FVDYKKwkgfHwgTUFUQ0hfRkFNSUxZKHBhaS0+YWlfZmFtaWx5LCBQRl9JTkVUNiwgMSkKKyNlbmRpZgorCSAgICApIHsKKwkJYWkwID0gKnBhaTsJLyogYmFja3VwICpwYWkgKi8KKworCQlpZiAocGFpLT5haV9mYW1pbHkgPT0gUEZfVU5TUEVDKSB7CisjaWZkZWYgUEZfSU5FVDYKKwkJCXBhaS0+YWlfZmFtaWx5ID0gUEZfSU5FVDY7CisjZWxzZQorCQkJcGFpLT5haV9mYW1pbHkgPSBQRl9JTkVUOworI2VuZGlmCisJCX0KKwkJZXJyb3IgPSBnZXRfcG9ydG1hdGNoKHBhaSwgc2Vydm5hbWUpOworCQlpZiAoZXJyb3IpCisJCQlFUlIoZXJyb3IpOworCisJCSpwYWkgPSBhaTA7CisJfQorCisJYWkwID0gKnBhaTsKKworCS8qIE5VTEwgaG9zdG5hbWUsIG9yIG51bWVyaWMgaG9zdG5hbWUgKi8KKwlmb3IgKGV4ID0gZXhwbG9yZTsgZXgtPmVfYWYgPj0gMDsgZXgrKykgeworCQkqcGFpID0gYWkwOworCisJCS8qIFBGX1VOU1BFQyBlbnRyaWVzIGFyZSBwcmVwYXJlZCBmb3IgRE5TIHF1ZXJpZXMgb25seSAqLworCQlpZiAoZXgtPmVfYWYgPT0gUEZfVU5TUEVDKQorCQkJY29udGludWU7CisKKwkJaWYgKCFNQVRDSF9GQU1JTFkocGFpLT5haV9mYW1pbHksIGV4LT5lX2FmLCBXSUxEX0FGKGV4KSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFNQVRDSChwYWktPmFpX3NvY2t0eXBlLCBleC0+ZV9zb2NrdHlwZSwgV0lMRF9TT0NLVFlQRShleCkpKQorCQkJY29udGludWU7CisJCWlmICghTUFUQ0gocGFpLT5haV9wcm90b2NvbCwgZXgtPmVfcHJvdG9jb2wsIFdJTERfUFJPVE9DT0woZXgpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwYWktPmFpX2ZhbWlseSA9PSBQRl9VTlNQRUMpCisJCQlwYWktPmFpX2ZhbWlseSA9IGV4LT5lX2FmOworCQlpZiAocGFpLT5haV9zb2NrdHlwZSA9PSBBTlkgJiYgZXgtPmVfc29ja3R5cGUgIT0gQU5ZKQorCQkJcGFpLT5haV9zb2NrdHlwZSA9IGV4LT5lX3NvY2t0eXBlOworCQlpZiAocGFpLT5haV9wcm90b2NvbCA9PSBBTlkgJiYgZXgtPmVfcHJvdG9jb2wgIT0gQU5ZKQorCQkJcGFpLT5haV9wcm90b2NvbCA9IGV4LT5lX3Byb3RvY29sOworCisJCWlmIChob3N0bmFtZSA9PSBOVUxMKQorCQkJZXJyb3IgPSBleHBsb3JlX251bGwocGFpLCBzZXJ2bmFtZSwgJmN1ci0+YWlfbmV4dCk7CisJCWVsc2UKKwkJCWVycm9yID0gZXhwbG9yZV9udW1lcmljX3Njb3BlKHBhaSwgaG9zdG5hbWUsIHNlcnZuYW1lLAorCQkJICAgICZjdXItPmFpX25leHQpOworCisJCWlmIChlcnJvcikKKwkJCWdvdG8gZnJlZTsKKworCQl3aGlsZSAoY3VyLT5haV9uZXh0KQorCQkJY3VyID0gY3VyLT5haV9uZXh0OworCX0KKworCS8qCisJICogWFhYCisJICogSWYgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiBBRjEgY2FuIGJlIGludGVycHJldGVkIGFzIEZRRE4KKwkgKiByZXByZXNlbnRhdGlvbiBvZiBBRjIsIHdlIG5lZWQgdG8gdGhpbmsgYWdhaW4gYWJvdXQgdGhlIGNvZGUgYmVsb3cuCisJICovCisJaWYgKHNlbnRpbmVsLmFpX25leHQpCisJCWdvdG8gZ29vZDsKKworCWlmIChob3N0bmFtZSA9PSBOVUxMKQorCQlFUlIoRUFJX05PREFUQSk7CisJaWYgKHBhaS0+YWlfZmxhZ3MgJiBBSV9OVU1FUklDSE9TVCkKKwkJRVJSKEVBSV9OT05BTUUpOworCisgICAgICAgIC8qCisgICAgICAgICAqIEJFR0lOIEFORFJPSUQgQ0hBTkdFUzsgcHJveHlpbmcgdG8gdGhlIGNhY2hlCisgICAgICAgICAqLworCWlmIChjYWNoZV9tb2RlID09IE5VTEwgfHwgc3RyY21wKGNhY2hlX21vZGUsICJsb2NhbCIpICE9IDApIHsKKwkJLy8gd2UncmUgbm90IHRoZSBwcm94eSAtIHBhc3MgdGhlIHJlcXVlc3QgdG8gdGhlbQorCQlyZXR1cm4gYW5kcm9pZF9nZXRhZGRyaW5mb19wcm94eShob3N0bmFtZSwgc2Vydm5hbWUsIGhpbnRzLCByZXMsIG5ldGlkKTsKKwl9CisKKwkvKgorCSAqIGhvc3RuYW1lIGFzIGFscGhhYmV0aWNhbCBuYW1lLgorCSAqIHdlIHdvdWxkIGxpa2UgdG8gcHJlZmVyIEFGX0lORVQ2IHRoYW4gQUZfSU5FVCwgc28gd2UnbGwgbWFrZSBhCisJICogb3V0ZXIgbG9vcCBieSBBRnMuCisJICovCisJZm9yIChleCA9IGV4cGxvcmU7IGV4LT5lX2FmID49IDA7IGV4KyspIHsKKwkJKnBhaSA9IGFpMDsKKworCQkvKiByZXF1aXJlIGV4YWN0IG1hdGNoIGZvciBmYW1pbHkgZmllbGQgKi8KKwkJaWYgKHBhaS0+YWlfZmFtaWx5ICE9IGV4LT5lX2FmKQorCQkJY29udGludWU7CisKKwkJaWYgKCFNQVRDSChwYWktPmFpX3NvY2t0eXBlLCBleC0+ZV9zb2NrdHlwZSwKKwkJCQlXSUxEX1NPQ0tUWVBFKGV4KSkpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghTUFUQ0gocGFpLT5haV9wcm90b2NvbCwgZXgtPmVfcHJvdG9jb2wsCisJCQkJV0lMRF9QUk9UT0NPTChleCkpKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChwYWktPmFpX3NvY2t0eXBlID09IEFOWSAmJiBleC0+ZV9zb2NrdHlwZSAhPSBBTlkpCisJCQlwYWktPmFpX3NvY2t0eXBlID0gZXgtPmVfc29ja3R5cGU7CisJCWlmIChwYWktPmFpX3Byb3RvY29sID09IEFOWSAmJiBleC0+ZV9wcm90b2NvbCAhPSBBTlkpCisJCQlwYWktPmFpX3Byb3RvY29sID0gZXgtPmVfcHJvdG9jb2w7CisKKwkJZXJyb3IgPSBleHBsb3JlX2ZxZG4ocGFpLCBob3N0bmFtZSwgc2Vydm5hbWUsCisJCQkmY3VyLT5haV9uZXh0LCBuZXRpZCwgbWFyayk7CisKKwkJd2hpbGUgKGN1ciAmJiBjdXItPmFpX25leHQpCisJCQljdXIgPSBjdXItPmFpX25leHQ7CisJfQorCisJLyogWFhYICovCisJaWYgKHNlbnRpbmVsLmFpX25leHQpCisJCWVycm9yID0gMDsKKworCWlmIChlcnJvcikKKwkJZ290byBmcmVlOworCWlmIChlcnJvciA9PSAwKSB7CisJCWlmIChzZW50aW5lbC5haV9uZXh0KSB7CisgZ29vZDoKKwkJCSpyZXMgPSBzZW50aW5lbC5haV9uZXh0OworCQkJcmV0dXJuIFNVQ0NFU1M7CisJCX0gZWxzZQorCQkJZXJyb3IgPSBFQUlfRkFJTDsKKwl9CisgZnJlZToKKyBiYWQ6CisJaWYgKHNlbnRpbmVsLmFpX25leHQpCisJCWZyZWVhZGRyaW5mbyhzZW50aW5lbC5haV9uZXh0KTsKKwkqcmVzID0gTlVMTDsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiBGUUROIGhvc3RuYW1lLCBETlMgbG9va3VwCisgKi8KK3N0YXRpYyBpbnQKK2V4cGxvcmVfZnFkbihjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaSwgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgY29uc3QgY2hhciAqc2Vydm5hbWUsIHN0cnVjdCBhZGRyaW5mbyAqKnJlcywgdW5zaWduZWQgbmV0aWQsIHVuc2lnbmVkIG1hcmspCit7CisJc3RydWN0IGFkZHJpbmZvICpyZXN1bHQ7CisJc3RydWN0IGFkZHJpbmZvICpjdXI7CisJaW50IGVycm9yID0gMDsKKwlzdGF0aWMgY29uc3QgbnNfZHRhYiBkdGFiW10gPSB7CisJCU5TX0ZJTEVTX0NCKF9maWxlc19nZXRhZGRyaW5mbywgTlVMTCkKKwkJeyBOU1NSQ19ETlMsIF9kbnNfZ2V0YWRkcmluZm8sIE5VTEwgfSwJLyogZm9yY2UgLURIRVNJT0QgKi8KKwkJTlNfTklTX0NCKF95cF9nZXRhZGRyaW5mbywgTlVMTCkKKwkJeyAwLCAwLCAwIH0KKwl9OworCisJYXNzZXJ0KHBhaSAhPSBOVUxMKTsKKwkvKiBob3N0bmFtZSBtYXkgYmUgTlVMTCAqLworCS8qIHNlcnZuYW1lIG1heSBiZSBOVUxMICovCisJYXNzZXJ0KHJlcyAhPSBOVUxMKTsKKworCXJlc3VsdCA9IE5VTEw7CisKKwkvKgorCSAqIGlmIHRoZSBzZXJ2bmFtZSBkb2VzIG5vdCBtYXRjaCBzb2NrdHlwZS9wcm90b2NvbCwgaWdub3JlIGl0LgorCSAqLworCWlmIChnZXRfcG9ydG1hdGNoKHBhaSwgc2Vydm5hbWUpICE9IDApCisJCXJldHVybiAwOworCisJc3dpdGNoIChuc2Rpc3BhdGNoKCZyZXN1bHQsIGR0YWIsIE5TREJfSE9TVFMsICJnZXRhZGRyaW5mbyIsCisJCQlkZWZhdWx0X2Ruc19maWxlcywgaG9zdG5hbWUsIHBhaSwgbmV0aWQsIG1hcmspKSB7CisJY2FzZSBOU19UUllBR0FJTjoKKwkJZXJyb3IgPSBFQUlfQUdBSU47CisJCWdvdG8gZnJlZTsKKwljYXNlIE5TX1VOQVZBSUw6CisJCWVycm9yID0gRUFJX0ZBSUw7CisJCWdvdG8gZnJlZTsKKwljYXNlIE5TX05PVEZPVU5EOgorCQllcnJvciA9IEVBSV9OT0RBVEE7CisJCWdvdG8gZnJlZTsKKwljYXNlIE5TX1NVQ0NFU1M6CisJCWVycm9yID0gMDsKKwkJZm9yIChjdXIgPSByZXN1bHQ7IGN1cjsgY3VyID0gY3VyLT5haV9uZXh0KSB7CisJCQlHRVRfUE9SVChjdXIsIHNlcnZuYW1lKTsKKwkJCS8qIGNhbm9ubmFtZSBzaG91bGQgYmUgZmlsbGVkIGFscmVhZHkgKi8KKwkJfQorCQlicmVhazsKKwl9CisKKwkqcmVzID0gcmVzdWx0OworCisJcmV0dXJuIDA7CisKK2ZyZWU6CisJaWYgKHJlc3VsdCkKKwkJZnJlZWFkZHJpbmZvKHJlc3VsdCk7CisJcmV0dXJuIGVycm9yOworfQorCisvKgorICogaG9zdG5hbWUgPT0gTlVMTC4KKyAqIHBhc3NpdmUgc29ja2V0IC0+IGFueWFkZHIgKDAuMC4wLjAgb3IgOjopCisgKiBub24tcGFzc2l2ZSBzb2NrZXQgLT4gbG9jYWxob3N0ICgxMjcuMC4wLjEgb3IgOjoxKQorICovCitzdGF0aWMgaW50CitleHBsb3JlX251bGwoY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWksIGNvbnN0IGNoYXIgKnNlcnZuYW1lLAorICAgIHN0cnVjdCBhZGRyaW5mbyAqKnJlcykKK3sKKwlpbnQgczsKKwljb25zdCBzdHJ1Y3QgYWZkICphZmQ7CisJc3RydWN0IGFkZHJpbmZvICpjdXI7CisJc3RydWN0IGFkZHJpbmZvIHNlbnRpbmVsOworCWludCBlcnJvcjsKKworCWFzc2VydChwYWkgIT0gTlVMTCk7CisJLyogc2Vydm5hbWUgbWF5IGJlIE5VTEwgKi8KKwlhc3NlcnQocmVzICE9IE5VTEwpOworCisJKnJlcyA9IE5VTEw7CisJc2VudGluZWwuYWlfbmV4dCA9IE5VTEw7CisJY3VyID0gJnNlbnRpbmVsOworCisJLyoKKwkgKiBmaWx0ZXIgb3V0IEFGcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwKKwkgKiBYWFggZXJybm8/CisJICovCisJcyA9IHNvY2tldChwYWktPmFpX2ZhbWlseSwgU09DS19ER1JBTSB8IFNPQ0tfQ0xPRVhFQywgMCk7CisJaWYgKHMgPCAwKSB7CisJCWlmIChlcnJubyAhPSBFTUZJTEUpCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJY2xvc2Uocyk7CisKKwkvKgorCSAqIGlmIHRoZSBzZXJ2bmFtZSBkb2VzIG5vdCBtYXRjaCBzb2NrdHlwZS9wcm90b2NvbCwgaWdub3JlIGl0LgorCSAqLworCWlmIChnZXRfcG9ydG1hdGNoKHBhaSwgc2Vydm5hbWUpICE9IDApCisJCXJldHVybiAwOworCisJYWZkID0gZmluZF9hZmQocGFpLT5haV9mYW1pbHkpOworCWlmIChhZmQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAocGFpLT5haV9mbGFncyAmIEFJX1BBU1NJVkUpIHsKKwkJR0VUX0FJKGN1ci0+YWlfbmV4dCwgYWZkLCBhZmQtPmFfYWRkcmFueSk7CisJCS8qIHh4eCBtZWFuaW5nbGVzcz8KKwkJICogR0VUX0NBTk9OTkFNRShjdXItPmFpX25leHQsICJhbnlhZGRyIik7CisJCSAqLworCQlHRVRfUE9SVChjdXItPmFpX25leHQsIHNlcnZuYW1lKTsKKwl9IGVsc2UgeworCQlHRVRfQUkoY3VyLT5haV9uZXh0LCBhZmQsIGFmZC0+YV9sb29wYmFjayk7CisJCS8qIHh4eCBtZWFuaW5nbGVzcz8KKwkJICogR0VUX0NBTk9OTkFNRShjdXItPmFpX25leHQsICJsb2NhbGhvc3QiKTsKKwkJICovCisJCUdFVF9QT1JUKGN1ci0+YWlfbmV4dCwgc2Vydm5hbWUpOworCX0KKwljdXIgPSBjdXItPmFpX25leHQ7CisKKwkqcmVzID0gc2VudGluZWwuYWlfbmV4dDsKKwlyZXR1cm4gMDsKKworZnJlZToKKwlpZiAoc2VudGluZWwuYWlfbmV4dCkKKwkJZnJlZWFkZHJpbmZvKHNlbnRpbmVsLmFpX25leHQpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIG51bWVyaWMgaG9zdG5hbWUKKyAqLworc3RhdGljIGludAorZXhwbG9yZV9udW1lcmljKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpLCBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICBjb25zdCBjaGFyICpzZXJ2bmFtZSwgc3RydWN0IGFkZHJpbmZvICoqcmVzLCBjb25zdCBjaGFyICpjYW5vbm5hbWUpCit7CisJY29uc3Qgc3RydWN0IGFmZCAqYWZkOworCXN0cnVjdCBhZGRyaW5mbyAqY3VyOworCXN0cnVjdCBhZGRyaW5mbyBzZW50aW5lbDsKKwlpbnQgZXJyb3I7CisJY2hhciBwdG9uW1BUT05fTUFYXTsKKworCWFzc2VydChwYWkgIT0gTlVMTCk7CisJLyogaG9zdG5hbWUgbWF5IGJlIE5VTEwgKi8KKwkvKiBzZXJ2bmFtZSBtYXkgYmUgTlVMTCAqLworCWFzc2VydChyZXMgIT0gTlVMTCk7CisKKwkqcmVzID0gTlVMTDsKKwlzZW50aW5lbC5haV9uZXh0ID0gTlVMTDsKKwljdXIgPSAmc2VudGluZWw7CisKKwkvKgorCSAqIGlmIHRoZSBzZXJ2bmFtZSBkb2VzIG5vdCBtYXRjaCBzb2NrdHlwZS9wcm90b2NvbCwgaWdub3JlIGl0LgorCSAqLworCWlmIChnZXRfcG9ydG1hdGNoKHBhaSwgc2Vydm5hbWUpICE9IDApCisJCXJldHVybiAwOworCisJYWZkID0gZmluZF9hZmQocGFpLT5haV9mYW1pbHkpOworCWlmIChhZmQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGFmZC0+YV9hZikgeworI2lmIDAgLypYL09wZW4gc3BlYyovCisJY2FzZSBBRl9JTkVUOgorCQlpZiAoaW5ldF9hdG9uKGhvc3RuYW1lLCAoc3RydWN0IGluX2FkZHIgKilwdG9uKSA9PSAxKSB7CisJCQlpZiAocGFpLT5haV9mYW1pbHkgPT0gYWZkLT5hX2FmIHx8CisJCQkgICAgcGFpLT5haV9mYW1pbHkgPT0gUEZfVU5TUEVDIC8qPyovKSB7CisJCQkJR0VUX0FJKGN1ci0+YWlfbmV4dCwgYWZkLCBwdG9uKTsKKwkJCQlHRVRfUE9SVChjdXItPmFpX25leHQsIHNlcnZuYW1lKTsKKwkJCQlpZiAoKHBhaS0+YWlfZmxhZ3MgJiBBSV9DQU5PTk5BTUUpKSB7CisJCQkJCS8qCisJCQkJCSAqIFNldCB0aGUgbnVtZXJpYyBhZGRyZXNzIGl0c2VsZiBhcworCQkJCQkgKiB0aGUgY2Fub25pY2FsIG5hbWUsIGJhc2VkIG9uIGEKKwkJCQkJICogY2xhcmlmaWNhdGlvbiBpbiByZmMyNTUzYmlzLTAzLgorCQkJCQkgKi8KKwkJCQkJR0VUX0NBTk9OTkFNRShjdXItPmFpX25leHQsIGNhbm9ubmFtZSk7CisJCQkJfQorCQkJCXdoaWxlIChjdXIgJiYgY3VyLT5haV9uZXh0KQorCQkJCQljdXIgPSBjdXItPmFpX25leHQ7CisJCQl9IGVsc2UKKwkJCQlFUlIoRUFJX0ZBTUlMWSk7CS8qeHh4Ki8KKwkJfQorCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWlmIChpbmV0X3B0b24oYWZkLT5hX2FmLCBob3N0bmFtZSwgcHRvbikgPT0gMSkgeworCQkJaWYgKHBhaS0+YWlfZmFtaWx5ID09IGFmZC0+YV9hZiB8fAorCQkJICAgIHBhaS0+YWlfZmFtaWx5ID09IFBGX1VOU1BFQyAvKj8qLykgeworCQkJCUdFVF9BSShjdXItPmFpX25leHQsIGFmZCwgcHRvbik7CisJCQkJR0VUX1BPUlQoY3VyLT5haV9uZXh0LCBzZXJ2bmFtZSk7CisJCQkJaWYgKChwYWktPmFpX2ZsYWdzICYgQUlfQ0FOT05OQU1FKSkgeworCQkJCQkvKgorCQkJCQkgKiBTZXQgdGhlIG51bWVyaWMgYWRkcmVzcyBpdHNlbGYgYXMKKwkJCQkJICogdGhlIGNhbm9uaWNhbCBuYW1lLCBiYXNlZCBvbiBhCisJCQkJCSAqIGNsYXJpZmljYXRpb24gaW4gcmZjMjU1M2Jpcy0wMy4KKwkJCQkJICovCisJCQkJCUdFVF9DQU5PTk5BTUUoY3VyLT5haV9uZXh0LCBjYW5vbm5hbWUpOworCQkJCX0KKwkJCQl3aGlsZSAoY3VyLT5haV9uZXh0KQorCQkJCQljdXIgPSBjdXItPmFpX25leHQ7CisJCQl9IGVsc2UKKwkJCQlFUlIoRUFJX0ZBTUlMWSk7CS8qeHh4Ki8KKwkJfQorCQlicmVhazsKKwl9CisKKwkqcmVzID0gc2VudGluZWwuYWlfbmV4dDsKKwlyZXR1cm4gMDsKKworZnJlZToKK2JhZDoKKwlpZiAoc2VudGluZWwuYWlfbmV4dCkKKwkJZnJlZWFkZHJpbmZvKHNlbnRpbmVsLmFpX25leHQpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIG51bWVyaWMgaG9zdG5hbWUgd2l0aCBzY29wZQorICovCitzdGF0aWMgaW50CitleHBsb3JlX251bWVyaWNfc2NvcGUoY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWksIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgIGNvbnN0IGNoYXIgKnNlcnZuYW1lLCBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpCit7CisjaWYgIWRlZmluZWQoU0NPUEVfREVMSU1JVEVSKSB8fCAhZGVmaW5lZChJTkVUNikKKwlyZXR1cm4gZXhwbG9yZV9udW1lcmljKHBhaSwgaG9zdG5hbWUsIHNlcnZuYW1lLCByZXMsIGhvc3RuYW1lKTsKKyNlbHNlCisJY29uc3Qgc3RydWN0IGFmZCAqYWZkOworCXN0cnVjdCBhZGRyaW5mbyAqY3VyOworCWludCBlcnJvcjsKKwljaGFyICpjcCwgKmhvc3RuYW1lMiA9IE5VTEwsICpzY29wZSwgKmFkZHI7CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCWFzc2VydChwYWkgIT0gTlVMTCk7CisJLyogaG9zdG5hbWUgbWF5IGJlIE5VTEwgKi8KKwkvKiBzZXJ2bmFtZSBtYXkgYmUgTlVMTCAqLworCWFzc2VydChyZXMgIT0gTlVMTCk7CisKKwkvKgorCSAqIGlmIHRoZSBzZXJ2bmFtZSBkb2VzIG5vdCBtYXRjaCBzb2NrdHlwZS9wcm90b2NvbCwgaWdub3JlIGl0LgorCSAqLworCWlmIChnZXRfcG9ydG1hdGNoKHBhaSwgc2Vydm5hbWUpICE9IDApCisJCXJldHVybiAwOworCisJYWZkID0gZmluZF9hZmQocGFpLT5haV9mYW1pbHkpOworCWlmIChhZmQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWFmZC0+YV9zY29wZWQpCisJCXJldHVybiBleHBsb3JlX251bWVyaWMocGFpLCBob3N0bmFtZSwgc2Vydm5hbWUsIHJlcywgaG9zdG5hbWUpOworCisJY3AgPSBzdHJjaHIoaG9zdG5hbWUsIFNDT1BFX0RFTElNSVRFUik7CisJaWYgKGNwID09IE5VTEwpCisJCXJldHVybiBleHBsb3JlX251bWVyaWMocGFpLCBob3N0bmFtZSwgc2Vydm5hbWUsIHJlcywgaG9zdG5hbWUpOworCisJLyoKKwkgKiBIYW5kbGUgc3BlY2lhbCBjYXNlIG9mIDxzY29wZWRfYWRkcmVzcz48ZGVsaW1pdGVyPjxzY29wZSBpZD4KKwkgKi8KKwlob3N0bmFtZTIgPSBzdHJkdXAoaG9zdG5hbWUpOworCWlmIChob3N0bmFtZTIgPT0gTlVMTCkKKwkJcmV0dXJuIEVBSV9NRU1PUlk7CisJLyogdGVybWluYXRlIGF0IHRoZSBkZWxpbWl0ZXIgKi8KKwlob3N0bmFtZTJbY3AgLSBob3N0bmFtZV0gPSAnXDAnOworCWFkZHIgPSBob3N0bmFtZTI7CisJc2NvcGUgPSBjcCArIDE7CisKKwllcnJvciA9IGV4cGxvcmVfbnVtZXJpYyhwYWksIGFkZHIsIHNlcnZuYW1lLCByZXMsIGhvc3RuYW1lKTsKKwlpZiAoZXJyb3IgPT0gMCkgeworCQl1X2ludDMyX3Qgc2NvcGVpZDsKKworCQlmb3IgKGN1ciA9ICpyZXM7IGN1cjsgY3VyID0gY3VyLT5haV9uZXh0KSB7CisJCQlpZiAoY3VyLT5haV9mYW1pbHkgIT0gQUZfSU5FVDYpCisJCQkJY29udGludWU7CisJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKWN1ci0+YWlfYWRkcjsKKwkJCWlmIChpcDZfc3RyMnNjb3BlaWQoc2NvcGUsIHNpbjYsICZzY29wZWlkKSA9PSAtMSkgeworCQkJCWZyZWUoaG9zdG5hbWUyKTsKKwkJCQlyZXR1cm4oRUFJX05PREFUQSk7IC8qIFhYWDogaXMgcmV0dXJuIE9LPyAqLworCQkJfQorCQkJc2luNi0+c2luNl9zY29wZV9pZCA9IHNjb3BlaWQ7CisJCX0KKwl9CisKKwlmcmVlKGhvc3RuYW1lMik7CisKKwlyZXR1cm4gZXJyb3I7CisjZW5kaWYKK30KKworc3RhdGljIGludAorZ2V0X2Nhbm9ubmFtZShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaSwgc3RydWN0IGFkZHJpbmZvICphaSwgY29uc3QgY2hhciAqc3RyKQoreworCisJYXNzZXJ0KHBhaSAhPSBOVUxMKTsKKwlhc3NlcnQoYWkgIT0gTlVMTCk7CisJYXNzZXJ0KHN0ciAhPSBOVUxMKTsKKworCWlmICgocGFpLT5haV9mbGFncyAmIEFJX0NBTk9OTkFNRSkgIT0gMCkgeworCQlhaS0+YWlfY2Fub25uYW1lID0gc3RyZHVwKHN0cik7CisJCWlmIChhaS0+YWlfY2Fub25uYW1lID09IE5VTEwpCisJCQlyZXR1cm4gRUFJX01FTU9SWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWRkcmluZm8gKgorZ2V0X2FpKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpLCBjb25zdCBzdHJ1Y3QgYWZkICphZmQsIGNvbnN0IGNoYXIgKmFkZHIpCit7CisJY2hhciAqcDsKKwlzdHJ1Y3QgYWRkcmluZm8gKmFpOworCisJYXNzZXJ0KHBhaSAhPSBOVUxMKTsKKwlhc3NlcnQoYWZkICE9IE5VTEwpOworCWFzc2VydChhZGRyICE9IE5VTEwpOworCisJYWkgPSAoc3RydWN0IGFkZHJpbmZvICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWRkcmluZm8pCisJCSsgKGFmZC0+YV9zb2NrbGVuKSk7CisJaWYgKGFpID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbWVtY3B5KGFpLCBwYWksIHNpemVvZihzdHJ1Y3QgYWRkcmluZm8pKTsKKwlhaS0+YWlfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKShhaSArIDEpOworCW1lbXNldChhaS0+YWlfYWRkciwgMCwgKHNpemVfdClhZmQtPmFfc29ja2xlbik7CisKKyNpZmRlZiBIQVZFX1NBX0xFTgorCWFpLT5haV9hZGRyLT5zYV9sZW4gPSBhZmQtPmFfc29ja2xlbjsKKyNlbmRpZgorCisJYWktPmFpX2FkZHJsZW4gPSBhZmQtPmFfc29ja2xlbjsKKyNpZiBkZWZpbmVkIChfX2FscGhhX18pIHx8IChkZWZpbmVkKF9faTM4Nl9fKSAmJiBkZWZpbmVkKF9MUDY0KSkgfHwgZGVmaW5lZChfX3NwYXJjNjRfXykKKwlhaS0+X19haV9wYWQwID0gMDsKKyNlbmRpZgorCWFpLT5haV9hZGRyLT5zYV9mYW1pbHkgPSBhaS0+YWlfZmFtaWx5ID0gYWZkLT5hX2FmOworCXAgPSAoY2hhciAqKSh2b2lkICopKGFpLT5haV9hZGRyKTsKKwltZW1jcHkocCArIGFmZC0+YV9vZmYsIGFkZHIsIChzaXplX3QpYWZkLT5hX2FkZHJsZW4pOworCXJldHVybiBhaTsKK30KKworc3RhdGljIGludAorZ2V0X3BvcnRtYXRjaChjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmFpLCBjb25zdCBjaGFyICpzZXJ2bmFtZSkKK3sKKworCWFzc2VydChhaSAhPSBOVUxMKTsKKwkvKiBzZXJ2bmFtZSBtYXkgYmUgTlVMTCAqLworCisJcmV0dXJuIGdldF9wb3J0KGFpLCBzZXJ2bmFtZSwgMSk7Cit9CisKK3N0YXRpYyBpbnQKK2dldF9wb3J0KGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqYWksIGNvbnN0IGNoYXIgKnNlcnZuYW1lLCBpbnQgbWF0Y2hvbmx5KQoreworCWNvbnN0IGNoYXIgKnByb3RvOworCXN0cnVjdCBzZXJ2ZW50ICpzcDsKKwlpbnQgcG9ydDsKKwlpbnQgYWxsb3dudW1lcmljOworCisJYXNzZXJ0KGFpICE9IE5VTEwpOworCS8qIHNlcnZuYW1lIG1heSBiZSBOVUxMICovCisKKwlpZiAoc2Vydm5hbWUgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJc3dpdGNoIChhaS0+YWlfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorI2lmZGVmIEFGX0lORVQ2CisJY2FzZSBBRl9JTkVUNjoKKyNlbmRpZgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKGFpLT5haV9zb2NrdHlwZSkgeworCWNhc2UgU09DS19SQVc6CisJCXJldHVybiBFQUlfU0VSVklDRTsKKwljYXNlIFNPQ0tfREdSQU06CisJY2FzZSBTT0NLX1NUUkVBTToKKwkJYWxsb3dudW1lcmljID0gMTsKKwkJYnJlYWs7CisJY2FzZSBBTlk6CisjaWYgMSAgLyogQU5EUk9JRC1TUEVDSUZJQyBDSEFOR0UgVE8gTUFUQ0ggR0xJQkMgKi8KKwkJYWxsb3dudW1lcmljID0gMTsKKyNlbHNlCisJCWFsbG93bnVtZXJpYyA9IDA7CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEVBSV9TT0NLVFlQRTsKKwl9CisKKwlwb3J0ID0gc3RyMm51bWJlcihzZXJ2bmFtZSk7CisJaWYgKHBvcnQgPj0gMCkgeworCQlpZiAoIWFsbG93bnVtZXJpYykKKwkJCXJldHVybiBFQUlfU0VSVklDRTsKKwkJaWYgKHBvcnQgPCAwIHx8IHBvcnQgPiA2NTUzNSkKKwkJCXJldHVybiBFQUlfU0VSVklDRTsKKwkJcG9ydCA9IGh0b25zKHBvcnQpOworCX0gZWxzZSB7CisJCWlmIChhaS0+YWlfZmxhZ3MgJiBBSV9OVU1FUklDU0VSVikKKwkJCXJldHVybiBFQUlfTk9OQU1FOworCisJCXN3aXRjaCAoYWktPmFpX3NvY2t0eXBlKSB7CisJCWNhc2UgU09DS19ER1JBTToKKwkJCXByb3RvID0gInVkcCI7CisJCQlicmVhazsKKwkJY2FzZSBTT0NLX1NUUkVBTToKKwkJCXByb3RvID0gInRjcCI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByb3RvID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKChzcCA9IGdldHNlcnZieW5hbWUoc2Vydm5hbWUsIHByb3RvKSkgPT0gTlVMTCkKKwkJCXJldHVybiBFQUlfU0VSVklDRTsKKwkJcG9ydCA9IHNwLT5zX3BvcnQ7CisJfQorCisJaWYgKCFtYXRjaG9ubHkpIHsKKwkJc3dpdGNoIChhaS0+YWlfZmFtaWx5KSB7CisJCWNhc2UgQUZfSU5FVDoKKwkJCSgoc3RydWN0IHNvY2thZGRyX2luICopKHZvaWQgKikKKwkJCSAgICBhaS0+YWlfYWRkciktPnNpbl9wb3J0ID0gcG9ydDsKKwkJCWJyZWFrOworI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKQorCQkJICAgIGFpLT5haV9hZGRyKS0+c2luNl9wb3J0ID0gcG9ydDsKKwkJCWJyZWFrOworI2VuZGlmCisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZmQgKgorZmluZF9hZmQoaW50IGFmKQoreworCWNvbnN0IHN0cnVjdCBhZmQgKmFmZDsKKworCWlmIChhZiA9PSBQRl9VTlNQRUMpCisJCXJldHVybiBOVUxMOworCWZvciAoYWZkID0gYWZkbDsgYWZkLT5hX2FmOyBhZmQrKykgeworCQlpZiAoYWZkLT5hX2FmID09IGFmKQorCQkJcmV0dXJuIGFmZDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKyNpZmRlZiBJTkVUNgorLyogY29udmVydCBhIHN0cmluZyB0byBhIHNjb3BlIGlkZW50aWZpZXIuIFhYWDogSVB2NiBzcGVjaWZpYyAqLworc3RhdGljIGludAoraXA2X3N0cjJzY29wZWlkKGNoYXIgKnNjb3BlLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42LCB1X2ludDMyX3QgKnNjb3BlaWQpCit7CisJdV9sb25nIGxzY29wZWlkOworCXN0cnVjdCBpbjZfYWRkciAqYTY7CisJY2hhciAqZXA7CisKKwlhc3NlcnQoc2NvcGUgIT0gTlVMTCk7CisJYXNzZXJ0KHNpbjYgIT0gTlVMTCk7CisJYXNzZXJ0KHNjb3BlaWQgIT0gTlVMTCk7CisKKwlhNiA9ICZzaW42LT5zaW42X2FkZHI7CisKKwkvKiBlbXB0eSBzY29wZWlkIHBvcnRpb24gaXMgaW52YWxpZCAqLworCWlmICgqc2NvcGUgPT0gJ1wwJykKKwkJcmV0dXJuIC0xOworCisJaWYgKElONl9JU19BRERSX0xJTktMT0NBTChhNikgfHwgSU42X0lTX0FERFJfTUNfTElOS0xPQ0FMKGE2KSkgeworCQkvKgorCQkgKiBXZSBjdXJyZW50bHkgYXNzdW1lIGEgb25lLXRvLW9uZSBtYXBwaW5nIGJldHdlZW4gbGlua3MKKwkJICogYW5kIGludGVyZmFjZXMsIHNvIHdlIHNpbXBseSB1c2UgaW50ZXJmYWNlIGluZGljZXMgZm9yCisJCSAqIGxpa2UtbG9jYWwgc2NvcGVzLgorCQkgKi8KKwkJKnNjb3BlaWQgPSBpZl9uYW1ldG9pbmRleChzY29wZSk7CisJCWlmICgqc2NvcGVpZCA9PSAwKQorCQkJZ290byB0cnludW1lcmljOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBzdGlsbCB1bmNsZWFyIGFib3V0IGxpdGVyYWwsIGFsbG93IG51bWVyaWMgb25seSAtIHBsYWNlaG9sZGVyICovCisJaWYgKElONl9JU19BRERSX1NJVEVMT0NBTChhNikgfHwgSU42X0lTX0FERFJfTUNfU0lURUxPQ0FMKGE2KSkKKwkJZ290byB0cnludW1lcmljOworCWlmIChJTjZfSVNfQUREUl9NQ19PUkdMT0NBTChhNikpCisJCWdvdG8gdHJ5bnVtZXJpYzsKKwllbHNlCisJCWdvdG8gdHJ5bnVtZXJpYzsJLyogZ2xvYmFsICovCisKKwkvKiB0cnkgdG8gY29udmVydCB0byBhIG51bWVyaWMgaWQgYXMgYSBsYXN0IHJlc29ydCAqLworICB0cnludW1lcmljOgorCWVycm5vID0gMDsKKwlsc2NvcGVpZCA9IHN0cnRvdWwoc2NvcGUsICZlcCwgMTApOworCSpzY29wZWlkID0gKHVfaW50MzJfdCkobHNjb3BlaWQgJiAweGZmZmZmZmZmVUwpOworCWlmIChlcnJubyA9PSAwICYmIGVwICYmICplcCA9PSAnXDAnICYmICpzY29wZWlkID09IGxzY29wZWlkKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKyNlbmRpZgorCisvKiBjb2RlIGR1cGxpY2F0ZSB3aXRoIGdldGhuYW1hZGRyLmMgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgQXNrZWRGb3JHb3RbXSA9CisJImdldGhvc3RieSouZ2V0YW5zd2VyOiBhc2tlZCBmb3IgXCIlc1wiLCBnb3QgXCIlc1wiIjsKKworc3RhdGljIHN0cnVjdCBhZGRyaW5mbyAqCitnZXRhbnN3ZXIoY29uc3QgcXVlcnlidWYgKmFuc3dlciwgaW50IGFuc2xlbiwgY29uc3QgY2hhciAqcW5hbWUsIGludCBxdHlwZSwKKyAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaSkKK3sKKwlzdHJ1Y3QgYWRkcmluZm8gc2VudGluZWwsICpjdXI7CisJc3RydWN0IGFkZHJpbmZvIGFpOworCWNvbnN0IHN0cnVjdCBhZmQgKmFmZDsKKwljaGFyICpjYW5vbm5hbWU7CisJY29uc3QgSEVBREVSICpocDsKKwljb25zdCB1X2NoYXIgKmNwOworCWludCBuOworCWNvbnN0IHVfY2hhciAqZW9tOworCWNoYXIgKmJwLCAqZXA7CisJaW50IHR5cGUsIGNsYXNzLCBhbmNvdW50LCBxZGNvdW50OworCWludCBoYXZlYW5zd2VyLCBoYWRfZXJyb3I7CisJY2hhciB0YnVmW01BWEROQU1FXTsKKwlpbnQgKCpuYW1lX29rKSAoY29uc3QgY2hhciAqKTsKKwljaGFyIGhvc3RidWZbOCoxMDI0XTsKKworCWFzc2VydChhbnN3ZXIgIT0gTlVMTCk7CisJYXNzZXJ0KHFuYW1lICE9IE5VTEwpOworCWFzc2VydChwYWkgIT0gTlVMTCk7CisKKwltZW1zZXQoJnNlbnRpbmVsLCAwLCBzaXplb2Yoc2VudGluZWwpKTsKKwljdXIgPSAmc2VudGluZWw7CisKKwljYW5vbm5hbWUgPSBOVUxMOworCWVvbSA9IGFuc3dlci0+YnVmICsgYW5zbGVuOworCXN3aXRjaCAocXR5cGUpIHsKKwljYXNlIFRfQToKKwljYXNlIFRfQUFBQToKKwljYXNlIFRfQU5ZOgkvKnVzZSBUX0FOWSBvbmx5IGZvciBUX0EvVF9BQUFBIGxvb2t1cCovCisJCW5hbWVfb2sgPSByZXNfaG5vazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CS8qIFhYWCBzaG91bGQgYmUgYWJvcnQoKTsgKi8KKwl9CisJLyoKKwkgKiBmaW5kIGZpcnN0IHNhdGlzZmFjdG9yeSBhbnN3ZXIKKwkgKi8KKwlocCA9ICZhbnN3ZXItPmhkcjsKKwlhbmNvdW50ID0gbnRvaHMoaHAtPmFuY291bnQpOworCXFkY291bnQgPSBudG9ocyhocC0+cWRjb3VudCk7CisJYnAgPSBob3N0YnVmOworCWVwID0gaG9zdGJ1ZiArIHNpemVvZiBob3N0YnVmOworCWNwID0gYW5zd2VyLT5idWYgKyBIRklYRURTWjsKKwlpZiAocWRjb3VudCAhPSAxKSB7CisJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJbiA9IGRuX2V4cGFuZChhbnN3ZXItPmJ1ZiwgZW9tLCBjcCwgYnAsIGVwIC0gYnApOworCWlmICgobiA8IDApIHx8ICEoKm5hbWVfb2spKGJwKSkgeworCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWNwICs9IG4gKyBRRklYRURTWjsKKwlpZiAocXR5cGUgPT0gVF9BIHx8IHF0eXBlID09IFRfQUFBQSB8fCBxdHlwZSA9PSBUX0FOWSkgeworCQkvKiByZXNfc2VuZCgpIGhhcyBhbHJlYWR5IHZlcmlmaWVkIHRoYXQgdGhlIHF1ZXJ5IG5hbWUgaXMgdGhlCisJCSAqIHNhbWUgYXMgdGhlIG9uZSB3ZSBzZW50OyB0aGlzIGp1c3QgZ2V0cyB0aGUgZXhwYW5kZWQgbmFtZQorCQkgKiAoaS5lLiwgd2l0aCB0aGUgc3VjY2VlZGluZyBzZWFyY2gtZG9tYWluIHRhY2tlZCBvbikuCisJCSAqLworCQluID0gc3RybGVuKGJwKSArIDE7CQkvKiBmb3IgdGhlIFwwICovCisJCWlmIChuID49IE1BWEhPU1ROQU1FTEVOKSB7CisJCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCWNhbm9ubmFtZSA9IGJwOworCQlicCArPSBuOworCQkvKiBUaGUgcW5hbWUgY2FuIGJlIGFiYnJldmlhdGVkLCBidXQgaF9uYW1lIGlzIG5vdyBhYnNvbHV0ZS4gKi8KKwkJcW5hbWUgPSBjYW5vbm5hbWU7CisJfQorCWhhdmVhbnN3ZXIgPSAwOworCWhhZF9lcnJvciA9IDA7CisJd2hpbGUgKGFuY291bnQtLSA+IDAgJiYgY3AgPCBlb20gJiYgIWhhZF9lcnJvcikgeworCQluID0gZG5fZXhwYW5kKGFuc3dlci0+YnVmLCBlb20sIGNwLCBicCwgZXAgLSBicCk7CisJCWlmICgobiA8IDApIHx8ICEoKm5hbWVfb2spKGJwKSkgeworCQkJaGFkX2Vycm9yKys7CisJCQljb250aW51ZTsKKwkJfQorCQljcCArPSBuOwkJCS8qIG5hbWUgKi8KKwkJdHlwZSA9IF9nZXRzaG9ydChjcCk7CisgCQljcCArPSBJTlQxNlNaOwkJCS8qIHR5cGUgKi8KKwkJY2xhc3MgPSBfZ2V0c2hvcnQoY3ApOworIAkJY3AgKz0gSU5UMTZTWiArIElOVDMyU1o7CS8qIGNsYXNzLCBUVEwgKi8KKwkJbiA9IF9nZXRzaG9ydChjcCk7CisJCWNwICs9IElOVDE2U1o7CQkJLyogbGVuICovCisJCWlmIChjbGFzcyAhPSBDX0lOKSB7CisJCQkvKiBYWFggLSBkZWJ1Zz8gc3lzbG9nPyAqLworCQkJY3AgKz0gbjsKKwkJCWNvbnRpbnVlOwkJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLworCQl9CisJCWlmICgocXR5cGUgPT0gVF9BIHx8IHF0eXBlID09IFRfQUFBQSB8fCBxdHlwZSA9PSBUX0FOWSkgJiYKKwkJICAgIHR5cGUgPT0gVF9DTkFNRSkgeworCQkJbiA9IGRuX2V4cGFuZChhbnN3ZXItPmJ1ZiwgZW9tLCBjcCwgdGJ1Ziwgc2l6ZW9mIHRidWYpOworCQkJaWYgKChuIDwgMCkgfHwgISgqbmFtZV9vaykodGJ1ZikpIHsKKwkJCQloYWRfZXJyb3IrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNwICs9IG47CisJCQkvKiBHZXQgY2Fub25pY2FsIG5hbWUuICovCisJCQluID0gc3RybGVuKHRidWYpICsgMTsJLyogZm9yIHRoZSBcMCAqLworCQkJaWYgKG4gPiBlcCAtIGJwIHx8IG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKKwkJCQloYWRfZXJyb3IrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXN0cmxjcHkoYnAsIHRidWYsIChzaXplX3QpKGVwIC0gYnApKTsKKwkJCWNhbm9ubmFtZSA9IGJwOworCQkJYnAgKz0gbjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChxdHlwZSA9PSBUX0FOWSkgeworCQkJaWYgKCEodHlwZSA9PSBUX0EgfHwgdHlwZSA9PSBUX0FBQUEpKSB7CisJCQkJY3AgKz0gbjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlIGlmICh0eXBlICE9IHF0eXBlKSB7CisJCQlpZiAodHlwZSAhPSBUX0tFWSAmJiB0eXBlICE9IFRfU0lHKQorCQkJCXN5c2xvZyhMT0dfTk9USUNFfExPR19BVVRILAorCSAgICAgICAiZ2V0aG9zdGJ5Ki5nZXRhbnN3ZXI6IGFza2VkIGZvciBcIiVzICVzICVzXCIsIGdvdCB0eXBlIFwiJXNcIiIsCisJCQkJICAgICAgIHFuYW1lLCBwX2NsYXNzKENfSU4pLCBwX3R5cGUocXR5cGUpLAorCQkJCSAgICAgICBwX3R5cGUodHlwZSkpOworCQkJY3AgKz0gbjsKKwkJCWNvbnRpbnVlOwkJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLworCQl9CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIFRfQToKKwkJY2FzZSBUX0FBQUE6CisJCQlpZiAoc3RyY2FzZWNtcChjYW5vbm5hbWUsIGJwKSAhPSAwKSB7CisJCQkJc3lzbG9nKExPR19OT1RJQ0V8TE9HX0FVVEgsCisJCQkJICAgICAgIEFza2VkRm9yR290LCBjYW5vbm5hbWUsIGJwKTsKKwkJCQljcCArPSBuOworCQkJCWNvbnRpbnVlOwkvKiBYWFggLSBoYWRfZXJyb3IrKyA/ICovCisJCQl9CisJCQlpZiAodHlwZSA9PSBUX0EgJiYgbiAhPSBJTkFERFJTWikgeworCQkJCWNwICs9IG47CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAodHlwZSA9PSBUX0FBQUEgJiYgbiAhPSBJTjZBRERSU1opIHsKKwkJCQljcCArPSBuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHR5cGUgPT0gVF9BQUFBKSB7CisJCQkJc3RydWN0IGluNl9hZGRyIGluNjsKKwkJCQltZW1jcHkoJmluNiwgY3AsIElONkFERFJTWik7CisJCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZpbjYpKSB7CisJCQkJCWNwICs9IG47CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWlmICghaGF2ZWFuc3dlcikgeworCQkJCWludCBubjsKKworCQkJCWNhbm9ubmFtZSA9IGJwOworCQkJCW5uID0gc3RybGVuKGJwKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KKwkJCQlicCArPSBubjsKKwkJCX0KKworCQkJLyogZG9uJ3Qgb3ZlcndyaXRlIHBhaSAqLworCQkJYWkgPSAqcGFpOworCQkJYWkuYWlfZmFtaWx5ID0gKHR5cGUgPT0gVF9BKSA/IEFGX0lORVQgOiBBRl9JTkVUNjsKKwkJCWFmZCA9IGZpbmRfYWZkKGFpLmFpX2ZhbWlseSk7CisJCQlpZiAoYWZkID09IE5VTEwpIHsKKwkJCQljcCArPSBuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY3VyLT5haV9uZXh0ID0gZ2V0X2FpKCZhaSwgYWZkLCAoY29uc3QgY2hhciAqKWNwKTsKKwkJCWlmIChjdXItPmFpX25leHQgPT0gTlVMTCkKKwkJCQloYWRfZXJyb3IrKzsKKwkJCXdoaWxlIChjdXIgJiYgY3VyLT5haV9uZXh0KQorCQkJCWN1ciA9IGN1ci0+YWlfbmV4dDsKKwkJCWNwICs9IG47CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFib3J0KCk7CisJCX0KKwkJaWYgKCFoYWRfZXJyb3IpCisJCQloYXZlYW5zd2VyKys7CisJfQorCWlmIChoYXZlYW5zd2VyKSB7CisJCWlmICghY2Fub25uYW1lKQorCQkJKHZvaWQpZ2V0X2Nhbm9ubmFtZShwYWksIHNlbnRpbmVsLmFpX25leHQsIHFuYW1lKTsKKwkJZWxzZQorCQkJKHZvaWQpZ2V0X2Nhbm9ubmFtZShwYWksIHNlbnRpbmVsLmFpX25leHQsIGNhbm9ubmFtZSk7CisJCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOworCQlyZXR1cm4gc2VudGluZWwuYWlfbmV4dDsKKwl9CisKKwloX2Vycm5vID0gTk9fUkVDT1ZFUlk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBhZGRyaW5mb19zb3J0X2VsZW0geworCXN0cnVjdCBhZGRyaW5mbyAqYWk7CisJaW50IGhhc19zcmNfYWRkcjsKKwlzb2NrYWRkcl91bmlvbiBzcmNfYWRkcjsKKwlpbnQgb3JpZ2luYWxfb3JkZXI7Cit9OworCisvKkFSR1NVU0VEKi8KK3N0YXRpYyBpbnQKK19nZXRfc2NvcGUoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyKQoreworCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqYWRkcjYgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisJCWlmIChJTjZfSVNfQUREUl9NVUxUSUNBU1QoJmFkZHI2LT5zaW42X2FkZHIpKSB7CisJCQlyZXR1cm4gSVBWNl9BRERSX01DX1NDT1BFKCZhZGRyNi0+c2luNl9hZGRyKTsKKwkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9MT09QQkFDSygmYWRkcjYtPnNpbjZfYWRkcikgfHwKKwkJCSAgIElONl9JU19BRERSX0xJTktMT0NBTCgmYWRkcjYtPnNpbjZfYWRkcikpIHsKKwkJCS8qCisJCQkgKiBSRkMgNDI5MSBzZWN0aW9uIDIuNS4zIHNheXMgbG9vcGJhY2sgaXMgdG8gYmUgdHJlYXRlZCBhcyBoYXZpbmcKKwkJCSAqIGxpbmstbG9jYWwgc2NvcGUuCisJCQkgKi8KKwkJCXJldHVybiBJUFY2X0FERFJfU0NPUEVfTElOS0xPQ0FMOworCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1NJVEVMT0NBTCgmYWRkcjYtPnNpbjZfYWRkcikpIHsKKwkJCXJldHVybiBJUFY2X0FERFJfU0NPUEVfU0lURUxPQ0FMOworCQl9IGVsc2UgeworCQkJcmV0dXJuIElQVjZfQUREUl9TQ09QRV9HTE9CQUw7CisJCX0KKwl9IGVsc2UgaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkcjQgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKKwkJdW5zaWduZWQgbG9uZyBpbnQgbmEgPSBudG9obChhZGRyNC0+c2luX2FkZHIuc19hZGRyKTsKKworCQlpZiAoSU5fTE9PUEJBQ0sobmEpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMjcuMC4wLjAvOCAqLworCQkgICAgKG5hICYgMHhmZmZmMDAwMCkgPT0gMHhhOWZlMDAwMCkgeyAgICAgICAgICAvKiAxNjkuMjU0LjAuMC8xNiAqLworCQkJcmV0dXJuIElQVjZfQUREUl9TQ09QRV9MSU5LTE9DQUw7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogUkZDIDY3MjQgc2VjdGlvbiAzLjIuIE90aGVyIElQdjQgYWRkcmVzc2VzLCBpbmNsdWRpbmcgcHJpdmF0ZSBhZGRyZXNzZXMKKwkJCSAqIGFuZCBzaGFyZWQgYWRkcmVzc2VzICgxMDAuNjQuMC4wLzEwKSwgYXJlIGFzc2lnbmVkIGdsb2JhbCBzY29wZS4KKwkJCSAqLworCQkJcmV0dXJuIElQVjZfQUREUl9TQ09QRV9HTE9CQUw7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uCisJCSAqIFJldHVybiBhIHNjb3BlIHdpdGggbG93IHByaW9yaXR5IGFzIGEgbGFzdCByZXNvcnQuCisJCSAqLworCQlyZXR1cm4gSVBWNl9BRERSX1NDT1BFX05PREVMT0NBTDsKKwl9Cit9CisKKy8qIFRoZXNlIG1hY3JvcyBhcmUgbW9kZWxsZWQgYWZ0ZXIgdGhlIG9uZXMgaW4gPG5ldGluZXQvaW42Lmg+LiAqLworCisvKiBSRkMgNDM4MCwgc2VjdGlvbiAyLjYgKi8KKyNkZWZpbmUgSU42X0lTX0FERFJfVEVSRURPKGEpCSBcCisJKCgqKGNvbnN0IHVpbnQzMl90ICopKGNvbnN0IHZvaWQgKikoJihhKS0+czZfYWRkclswXSkgPT0gbnRvaGwoMHgyMDAxMDAwMCkpKQorCisvKiBSRkMgMzA1Niwgc2VjdGlvbiAyLiAqLworI2RlZmluZSBJTjZfSVNfQUREUl82VE80KGEpCSBcCisJKCgoYSktPnM2X2FkZHJbMF0gPT0gMHgyMCkgJiYgKChhKS0+czZfYWRkclsxXSA9PSAweDAyKSkKKworLyogNmJvbmUgdGVzdGluZyBhZGRyZXNzIGFyZWEgKDNmZmU6Oi8xNiksIGRlcHJlY2F0ZWQgaW4gUkZDIDM3MDEuICovCisjZGVmaW5lIElONl9JU19BRERSXzZCT05FKGEpICAgICAgXAorCSgoKGEpLT5zNl9hZGRyWzBdID09IDB4M2YpICYmICgoYSktPnM2X2FkZHJbMV0gPT0gMHhmZSkpCisKKy8qCisgKiBHZXQgdGhlIGxhYmVsIGZvciBhIGdpdmVuIElQdjQvSVB2NiBhZGRyZXNzLgorICogUkZDIDY3MjQsIHNlY3Rpb24gMi4xLgorICovCisKKy8qQVJHU1VTRUQqLworc3RhdGljIGludAorX2dldF9sYWJlbChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCXJldHVybiA0OworCX0gZWxzZSBpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkcjsKKwkJaWYgKElONl9JU19BRERSX0xPT1BCQUNLKCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJmFkZHI2LT5zaW42X2FkZHIpKSB7CisJCQlyZXR1cm4gNDsKKwkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl82VE80KCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDI7CisJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfVEVSRURPKCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDU7CisJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfVUxBKCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDEzOworCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1Y0Q09NUEFUKCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDM7CisJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfU0lURUxPQ0FMKCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDExOworCQl9IGVsc2UgaWYgKElONl9JU19BRERSXzZCT05FKCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDEyOworCQl9IGVsc2UgeworCQkJLyogQWxsIG90aGVyIElQdjYgYWRkcmVzc2VzLCBpbmNsdWRpbmcgZ2xvYmFsIHVuaWNhc3QgYWRkcmVzc2VzLiAqLworCQkJcmV0dXJuIDE7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uCisJCSAqIFJldHVybiBhIHNlbWktcmFuZG9tIGxhYmVsIGFzIGEgbGFzdCByZXNvcnQuCisJCSAqLworCQlyZXR1cm4gMTsKKwl9Cit9CisKKy8qCisgKiBHZXQgdGhlIHByZWNlZGVuY2UgZm9yIGEgZ2l2ZW4gSVB2NC9JUHY2IGFkZHJlc3MuCisgKiBSRkMgNjcyNCwgc2VjdGlvbiAyLjEuCisgKi8KKworLypBUkdTVVNFRCovCitzdGF0aWMgaW50CitfZ2V0X3ByZWNlZGVuY2UoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyKQoreworCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCQlyZXR1cm4gMzU7CisJfSBlbHNlIGlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqYWRkcjYgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisJCWlmIChJTjZfSVNfQUREUl9MT09QQkFDSygmYWRkcjYtPnNpbjZfYWRkcikpIHsKKwkJCXJldHVybiA1MDsKKwkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmYWRkcjYtPnNpbjZfYWRkcikpIHsKKwkJCXJldHVybiAzNTsKKwkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl82VE80KCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDMwOworCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1RFUkVETygmYWRkcjYtPnNpbjZfYWRkcikpIHsKKwkJCXJldHVybiA1OworCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1VMQSgmYWRkcjYtPnNpbjZfYWRkcikpIHsKKwkJCXJldHVybiAzOworCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1Y0Q09NUEFUKCZhZGRyNi0+c2luNl9hZGRyKSB8fAorCQkgICAgICAgICAgIElONl9JU19BRERSX1NJVEVMT0NBTCgmYWRkcjYtPnNpbjZfYWRkcikgfHwKKwkJICAgICAgICAgICBJTjZfSVNfQUREUl82Qk9ORSgmYWRkcjYtPnNpbjZfYWRkcikpIHsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJLyogQWxsIG90aGVyIElQdjYgYWRkcmVzc2VzLCBpbmNsdWRpbmcgZ2xvYmFsIHVuaWNhc3QgYWRkcmVzc2VzLiAqLworCQkJcmV0dXJuIDQwOworCQl9CisJfSBlbHNlIHsKKwkJcmV0dXJuIDE7CisJfQorfQorCisvKgorICogRmluZCBudW1iZXIgb2YgbWF0Y2hpbmcgaW5pdGlhbCBiaXRzIGJldHdlZW4gdGhlIHR3byBhZGRyZXNzZXMgYTEgYW5kIGEyLgorICovCisKKy8qQVJHU1VTRUQqLworc3RhdGljIGludAorX2NvbW1vbl9wcmVmaXhfbGVuKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTEsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTIpCit7CisJY29uc3QgY2hhciAqcDEgPSAoY29uc3QgY2hhciAqKWExOworCWNvbnN0IGNoYXIgKnAyID0gKGNvbnN0IGNoYXIgKilhMjsKKwl1bnNpZ25lZCBpOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZigqYTEpOyArK2kpIHsKKwkJaW50IHgsIGo7CisKKwkJaWYgKHAxW2ldID09IHAyW2ldKSB7CisJCQljb250aW51ZTsKKwkJfQorCQl4ID0gcDFbaV0gXiBwMltpXTsKKwkJZm9yIChqID0gMDsgaiA8IENIQVJfQklUOyArK2opIHsKKwkJCWlmICh4ICYgKDEgPDwgKENIQVJfQklUIC0gMSkpKSB7CisJCQkJcmV0dXJuIGkgKiBDSEFSX0JJVCArIGo7CisJCQl9CisJCQl4IDw8PSAxOworCQl9CisJfQorCXJldHVybiBzaXplb2YoKmExKSAqIENIQVJfQklUOworfQorCisvKgorICogQ29tcGFyZSB0d28gc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgcGFpcnMuCisgKiBSRkMgNjcyNCwgc2VjdGlvbiA2LgorICovCisKKy8qQVJHU1VTRUQqLworc3RhdGljIGludAorX3JmYzY3MjRfY29tcGFyZShjb25zdCB2b2lkICpwdHIxLCBjb25zdCB2b2lkKiBwdHIyKQoreworCWNvbnN0IHN0cnVjdCBhZGRyaW5mb19zb3J0X2VsZW0gKmExID0gKGNvbnN0IHN0cnVjdCBhZGRyaW5mb19zb3J0X2VsZW0gKilwdHIxOworCWNvbnN0IHN0cnVjdCBhZGRyaW5mb19zb3J0X2VsZW0gKmEyID0gKGNvbnN0IHN0cnVjdCBhZGRyaW5mb19zb3J0X2VsZW0gKilwdHIyOworCWludCBzY29wZV9zcmMxLCBzY29wZV9kc3QxLCBzY29wZV9tYXRjaDE7CisJaW50IHNjb3BlX3NyYzIsIHNjb3BlX2RzdDIsIHNjb3BlX21hdGNoMjsKKwlpbnQgbGFiZWxfc3JjMSwgbGFiZWxfZHN0MSwgbGFiZWxfbWF0Y2gxOworCWludCBsYWJlbF9zcmMyLCBsYWJlbF9kc3QyLCBsYWJlbF9tYXRjaDI7CisJaW50IHByZWNlZGVuY2UxLCBwcmVjZWRlbmNlMjsKKwlpbnQgcHJlZml4bGVuMSwgcHJlZml4bGVuMjsKKworCS8qIFJ1bGUgMTogQXZvaWQgdW51c2FibGUgZGVzdGluYXRpb25zLiAqLworCWlmIChhMS0+aGFzX3NyY19hZGRyICE9IGEyLT5oYXNfc3JjX2FkZHIpIHsKKwkJcmV0dXJuIGEyLT5oYXNfc3JjX2FkZHIgLSBhMS0+aGFzX3NyY19hZGRyOworCX0KKworCS8qIFJ1bGUgMjogUHJlZmVyIG1hdGNoaW5nIHNjb3BlLiAqLworCXNjb3BlX3NyYzEgPSBfZ2V0X3Njb3BlKCZhMS0+c3JjX2FkZHIuZ2VuZXJpYyk7CisJc2NvcGVfZHN0MSA9IF9nZXRfc2NvcGUoYTEtPmFpLT5haV9hZGRyKTsKKwlzY29wZV9tYXRjaDEgPSAoc2NvcGVfc3JjMSA9PSBzY29wZV9kc3QxKTsKKworCXNjb3BlX3NyYzIgPSBfZ2V0X3Njb3BlKCZhMi0+c3JjX2FkZHIuZ2VuZXJpYyk7CisJc2NvcGVfZHN0MiA9IF9nZXRfc2NvcGUoYTItPmFpLT5haV9hZGRyKTsKKwlzY29wZV9tYXRjaDIgPSAoc2NvcGVfc3JjMiA9PSBzY29wZV9kc3QyKTsKKworCWlmIChzY29wZV9tYXRjaDEgIT0gc2NvcGVfbWF0Y2gyKSB7CisJCXJldHVybiBzY29wZV9tYXRjaDIgLSBzY29wZV9tYXRjaDE7CisJfQorCisJLyoKKwkgKiBSdWxlIDM6IEF2b2lkIGRlcHJlY2F0ZWQgYWRkcmVzc2VzLgorCSAqIFRPRE8oc2Vzc2UpOiBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIGdvb2Qgd2F5IG9mIGZpbmRpbmcgdGhpcy4KKwkgKi8KKworCS8qCisJICogUnVsZSA0OiBQcmVmZXIgaG9tZSBhZGRyZXNzZXMuCisJICogVE9ETyhzZXNzZSk6IFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgZ29vZCB3YXkgb2YgZmluZGluZyB0aGlzLgorCSAqLworCisJLyogUnVsZSA1OiBQcmVmZXIgbWF0Y2hpbmcgbGFiZWwuICovCisJbGFiZWxfc3JjMSA9IF9nZXRfbGFiZWwoJmExLT5zcmNfYWRkci5nZW5lcmljKTsKKwlsYWJlbF9kc3QxID0gX2dldF9sYWJlbChhMS0+YWktPmFpX2FkZHIpOworCWxhYmVsX21hdGNoMSA9IChsYWJlbF9zcmMxID09IGxhYmVsX2RzdDEpOworCisJbGFiZWxfc3JjMiA9IF9nZXRfbGFiZWwoJmEyLT5zcmNfYWRkci5nZW5lcmljKTsKKwlsYWJlbF9kc3QyID0gX2dldF9sYWJlbChhMi0+YWktPmFpX2FkZHIpOworCWxhYmVsX21hdGNoMiA9IChsYWJlbF9zcmMyID09IGxhYmVsX2RzdDIpOworCisJaWYgKGxhYmVsX21hdGNoMSAhPSBsYWJlbF9tYXRjaDIpIHsKKwkJcmV0dXJuIGxhYmVsX21hdGNoMiAtIGxhYmVsX21hdGNoMTsKKwl9CisKKwkvKiBSdWxlIDY6IFByZWZlciBoaWdoZXIgcHJlY2VkZW5jZS4gKi8KKwlwcmVjZWRlbmNlMSA9IF9nZXRfcHJlY2VkZW5jZShhMS0+YWktPmFpX2FkZHIpOworCXByZWNlZGVuY2UyID0gX2dldF9wcmVjZWRlbmNlKGEyLT5haS0+YWlfYWRkcik7CisJaWYgKHByZWNlZGVuY2UxICE9IHByZWNlZGVuY2UyKSB7CisJCXJldHVybiBwcmVjZWRlbmNlMiAtIHByZWNlZGVuY2UxOworCX0KKworCS8qCisJICogUnVsZSA3OiBQcmVmZXIgbmF0aXZlIHRyYW5zcG9ydC4KKwkgKiBUT0RPKHNlc3NlKTogV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBnb29kIHdheSBvZiBmaW5kaW5nIHRoaXMuCisJICovCisKKwkvKiBSdWxlIDg6IFByZWZlciBzbWFsbGVyIHNjb3BlLiAqLworCWlmIChzY29wZV9kc3QxICE9IHNjb3BlX2RzdDIpIHsKKwkJcmV0dXJuIHNjb3BlX2RzdDEgLSBzY29wZV9kc3QyOworCX0KKworCS8qCisJICogUnVsZSA5OiBVc2UgbG9uZ2VzdCBtYXRjaGluZyBwcmVmaXguCisgICAgICAgICAqIFdlIGltcGxlbWVudCB0aGlzIGZvciBJUHY2IG9ubHksIGFzIHRoZSBydWxlcyBpbiBSRkMgNjcyNCBkb24ndCBzZWVtCisgICAgICAgICAqIHRvIHdvcmsgdmVyeSB3ZWxsIGRpcmVjdGx5IGFwcGxpZWQgdG8gSVB2NC4gKGdsaWJjIHVzZXMgaW5mb3JtYXRpb24gZnJvbQorICAgICAgICAgKiB0aGUgcm91dGluZyB0YWJsZSBmb3IgYSBjdXN0b20gSVB2NCBpbXBsZW1lbnRhdGlvbiBoZXJlLikKKwkgKi8KKwlpZiAoYTEtPmhhc19zcmNfYWRkciAmJiBhMS0+YWktPmFpX2FkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNiAmJgorCSAgICBhMi0+aGFzX3NyY19hZGRyICYmIGEyLT5haS0+YWlfYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmExX3NyYyA9ICZhMS0+c3JjX2FkZHIuaW42OworCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICphMV9kc3QgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKWExLT5haS0+YWlfYWRkcjsKKwkJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqYTJfc3JjID0gJmEyLT5zcmNfYWRkci5pbjY7CisJCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmEyX2RzdCA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYTItPmFpLT5haV9hZGRyOworCQlwcmVmaXhsZW4xID0gX2NvbW1vbl9wcmVmaXhfbGVuKCZhMV9zcmMtPnNpbjZfYWRkciwgJmExX2RzdC0+c2luNl9hZGRyKTsKKwkJcHJlZml4bGVuMiA9IF9jb21tb25fcHJlZml4X2xlbigmYTJfc3JjLT5zaW42X2FkZHIsICZhMl9kc3QtPnNpbjZfYWRkcik7CisJCWlmIChwcmVmaXhsZW4xICE9IHByZWZpeGxlbjIpIHsKKwkJCXJldHVybiBwcmVmaXhsZW4yIC0gcHJlZml4bGVuMTsKKwkJfQorCX0KKworCS8qCisJICogUnVsZSAxMDogTGVhdmUgdGhlIG9yZGVyIHVuY2hhbmdlZC4KKwkgKiBXZSBuZWVkIHRoaXMgc2luY2UgcXNvcnQoKSBpcyBub3QgbmVjZXNzYXJpbHkgc3RhYmxlLgorCSAqLworCXJldHVybiBhMS0+b3JpZ2luYWxfb3JkZXIgLSBhMi0+b3JpZ2luYWxfb3JkZXI7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBzb3VyY2UgYWRkcmVzcyB0aGF0IHdpbGwgYmUgdXNlZCBpZiB0cnlpbmcgdG8gY29ubmVjdCB0byB0aGUgZ2l2ZW4KKyAqIGFkZHJlc3MuIHNyY19hZGRyIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSBzdHJ1Y3Qgc29ja2FkZHJfaW42LgorICoKKyAqIFJldHVybnMgMSBpZiBhIHNvdXJjZSBhZGRyZXNzIHdhcyBmb3VuZCwgMCBpZiB0aGUgYWRkcmVzcyBpcyB1bnJlYWNoYWJsZSwKKyAqIGFuZCAtMSBpZiBhIGZhdGFsIGVycm9yIG9jY3VycmVkLiBJZiAwIG9yIDEsIHRoZSBjb250ZW50cyBvZiBzcmNfYWRkciBhcmUKKyAqIHVuZGVmaW5lZC4KKyAqLworCisvKkFSR1NVU0VEKi8KK3N0YXRpYyBpbnQKK19maW5kX3NyY19hZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0IHNvY2thZGRyICpzcmNfYWRkciwgdW5zaWduZWQgbWFyaykKK3sKKwlpbnQgc29jazsKKwlpbnQgcmV0OworCXNvY2tsZW5fdCBsZW47CisKKwlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogTm8ga25vd24gdXNhYmxlIHNvdXJjZSBhZGRyZXNzIGZvciBub24tSU5FVCBmYW1pbGllcy4gKi8KKwkJcmV0dXJuIDA7CisJfQorCisJc29jayA9IHNvY2tldChhZGRyLT5zYV9mYW1pbHksIFNPQ0tfREdSQU0gfCBTT0NLX0NMT0VYRUMsIElQUFJPVE9fVURQKTsKKwlpZiAoc29jayA9PSAtMSkgeworCQlpZiAoZXJybm8gPT0gRUFGTk9TVVBQT1JUKSB7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlpZiAobWFyayAhPSBNQVJLX1VOU0VUICYmIHNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fTUFSSywgJm1hcmssIHNpemVvZihtYXJrKSkgPCAwKQorCQlyZXR1cm4gMDsKKwlkbyB7CisJCXJldCA9IF9fY29ubmVjdChzb2NrLCBhZGRyLCBsZW4pOworCX0gd2hpbGUgKHJldCA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisKKwlpZiAocmV0ID09IC0xKSB7CisJCWNsb3NlKHNvY2spOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZ2V0c29ja25hbWUoc29jaywgc3JjX2FkZHIsICZsZW4pID09IC0xKSB7CisJCWNsb3NlKHNvY2spOworCQlyZXR1cm4gLTE7CisJfQorCWNsb3NlKHNvY2spOworCXJldHVybiAxOworfQorCisvKgorICogU29ydCB0aGUgbGlua2VkIGxpc3Qgc3RhcnRpbmcgYXQgc2VudGluZWwtPmFpX25leHQgaW4gUkZDNjcyNCBvcmRlci4KKyAqIFdpbGwgbGVhdmUgdGhlIGxpc3QgdW5jaGFuZ2VkIGlmIGFuIGVycm9yIG9jY3Vycy4KKyAqLworCisvKkFSR1NVU0VEKi8KK3N0YXRpYyB2b2lkCitfcmZjNjcyNF9zb3J0KHN0cnVjdCBhZGRyaW5mbyAqbGlzdF9zZW50aW5lbCwgdW5zaWduZWQgbWFyaykKK3sKKwlzdHJ1Y3QgYWRkcmluZm8gKmN1cjsKKwlpbnQgbmVsZW0gPSAwLCBpOworCXN0cnVjdCBhZGRyaW5mb19zb3J0X2VsZW0gKmVsZW1zOworCisJY3VyID0gbGlzdF9zZW50aW5lbC0+YWlfbmV4dDsKKwl3aGlsZSAoY3VyKSB7CisJCSsrbmVsZW07CisJCWN1ciA9IGN1ci0+YWlfbmV4dDsKKwl9CisKKwllbGVtcyA9IChzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtICopbWFsbG9jKG5lbGVtICogc2l6ZW9mKHN0cnVjdCBhZGRyaW5mb19zb3J0X2VsZW0pKTsKKwlpZiAoZWxlbXMgPT0gTlVMTCkgeworCQlnb3RvIGVycm9yOworCX0KKworCS8qCisJICogQ29udmVydCB0aGUgbGlua2VkIGxpc3QgdG8gYW4gYXJyYXkgdGhhdCBhbHNvIGNvbnRhaW5zIHRoZSBjYW5kaWRhdGUKKwkgKiBzb3VyY2UgYWRkcmVzcyBmb3IgZWFjaCBkZXN0aW5hdGlvbiBhZGRyZXNzLgorCSAqLworCWZvciAoaSA9IDAsIGN1ciA9IGxpc3Rfc2VudGluZWwtPmFpX25leHQ7IGkgPCBuZWxlbTsgKytpLCBjdXIgPSBjdXItPmFpX25leHQpIHsKKwkJaW50IGhhc19zcmNfYWRkcjsKKwkJYXNzZXJ0KGN1ciAhPSBOVUxMKTsKKwkJZWxlbXNbaV0uYWkgPSBjdXI7CisJCWVsZW1zW2ldLm9yaWdpbmFsX29yZGVyID0gaTsKKworCQloYXNfc3JjX2FkZHIgPSBfZmluZF9zcmNfYWRkcihjdXItPmFpX2FkZHIsICZlbGVtc1tpXS5zcmNfYWRkci5nZW5lcmljLCBtYXJrKTsKKwkJaWYgKGhhc19zcmNfYWRkciA9PSAtMSkgeworCQkJZ290byBlcnJvcjsKKwkJfQorCQllbGVtc1tpXS5oYXNfc3JjX2FkZHIgPSBoYXNfc3JjX2FkZHI7CisJfQorCisJLyogU29ydCB0aGUgYWRkcmVzc2VzLCBhbmQgcmVhcnJhbmdlIHRoZSBsaW5rZWQgbGlzdCBzbyBpdCBtYXRjaGVzIHRoZSBzb3J0ZWQgb3JkZXIuICovCisJcXNvcnQoKHZvaWQgKillbGVtcywgbmVsZW0sIHNpemVvZihzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtKSwgX3JmYzY3MjRfY29tcGFyZSk7CisKKwlsaXN0X3NlbnRpbmVsLT5haV9uZXh0ID0gZWxlbXNbMF0uYWk7CisJZm9yIChpID0gMDsgaSA8IG5lbGVtIC0gMTsgKytpKSB7CisJCWVsZW1zW2ldLmFpLT5haV9uZXh0ID0gZWxlbXNbaSArIDFdLmFpOworCX0KKwllbGVtc1tuZWxlbSAtIDFdLmFpLT5haV9uZXh0ID0gTlVMTDsKKworZXJyb3I6CisJZnJlZShlbGVtcyk7Cit9CisKKy8qQVJHU1VTRUQqLworc3RhdGljIGludAorX2Ruc19nZXRhZGRyaW5mbyh2b2lkICpydiwgdm9pZAkqY2JfZGF0YSwgdmFfbGlzdCBhcCkKK3sKKwlzdHJ1Y3QgYWRkcmluZm8gKmFpOworCXF1ZXJ5YnVmICpidWYsICpidWYyOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWk7CisJc3RydWN0IGFkZHJpbmZvIHNlbnRpbmVsLCAqY3VyOworCXN0cnVjdCByZXNfdGFyZ2V0IHEsIHEyOworCXJlc19zdGF0ZSByZXM7CisJdW5zaWduZWQgbmV0aWQsIG1hcms7CisKKwluYW1lID0gdmFfYXJnKGFwLCBjaGFyICopOworCXBhaSA9IHZhX2FyZyhhcCwgY29uc3Qgc3RydWN0IGFkZHJpbmZvICopOworCW5ldGlkID0gdmFfYXJnKGFwLCB1bnNpZ25lZCk7CisJbWFyayA9IHZhX2FyZyhhcCwgdW5zaWduZWQpOworCS8vZnByaW50ZihzdGRlcnIsICJfZG5zX2dldGFkZHJpbmZvKCkgbmFtZSA9ICclcydcbiIsIG5hbWUpOworCisJbWVtc2V0KCZxLCAwLCBzaXplb2YocSkpOworCW1lbXNldCgmcTIsIDAsIHNpemVvZihxMikpOworCW1lbXNldCgmc2VudGluZWwsIDAsIHNpemVvZihzZW50aW5lbCkpOworCWN1ciA9ICZzZW50aW5lbDsKKworCWJ1ZiA9IG1hbGxvYyhzaXplb2YoKmJ1ZikpOworCWlmIChidWYgPT0gTlVMTCkgeworCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisJYnVmMiA9IG1hbGxvYyhzaXplb2YoKmJ1ZjIpKTsKKwlpZiAoYnVmMiA9PSBOVUxMKSB7CisJCWZyZWUoYnVmKTsKKwkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJfQorCisJc3dpdGNoIChwYWktPmFpX2ZhbWlseSkgeworCWNhc2UgQUZfVU5TUEVDOgorCQkvKiBwcmVmZXIgSVB2NiAqLworCQlxLm5hbWUgPSBuYW1lOworCQlxLnFjbGFzcyA9IENfSU47CisJCXEuYW5zd2VyID0gYnVmLT5idWY7CisJCXEuYW5zbGVuID0gc2l6ZW9mKGJ1Zi0+YnVmKTsKKwkJaW50IHF1ZXJ5X2lwdjYgPSAxLCBxdWVyeV9pcHY0ID0gMTsKKwkJaWYgKHBhaS0+YWlfZmxhZ3MgJiBBSV9BRERSQ09ORklHKSB7CisJCQlxdWVyeV9pcHY2ID0gX2hhdmVfaXB2NihtYXJrKTsKKwkJCXF1ZXJ5X2lwdjQgPSBfaGF2ZV9pcHY0KG1hcmspOworCQl9CisJCWlmIChxdWVyeV9pcHY2KSB7CisJCQlxLnF0eXBlID0gVF9BQUFBOworCQkJaWYgKHF1ZXJ5X2lwdjQpIHsKKwkJCQlxLm5leHQgPSAmcTI7CisJCQkJcTIubmFtZSA9IG5hbWU7CisJCQkJcTIucWNsYXNzID0gQ19JTjsKKwkJCQlxMi5xdHlwZSA9IFRfQTsKKwkJCQlxMi5hbnN3ZXIgPSBidWYyLT5idWY7CisJCQkJcTIuYW5zbGVuID0gc2l6ZW9mKGJ1ZjItPmJ1Zik7CisJCQl9CisJCX0gZWxzZSBpZiAocXVlcnlfaXB2NCkgeworCQkJcS5xdHlwZSA9IFRfQTsKKwkJfSBlbHNlIHsKKwkJCWZyZWUoYnVmKTsKKwkJCWZyZWUoYnVmMik7CisJCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUOgorCQlxLm5hbWUgPSBuYW1lOworCQlxLnFjbGFzcyA9IENfSU47CisJCXEucXR5cGUgPSBUX0E7CisJCXEuYW5zd2VyID0gYnVmLT5idWY7CisJCXEuYW5zbGVuID0gc2l6ZW9mKGJ1Zi0+YnVmKTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJcS5uYW1lID0gbmFtZTsKKwkJcS5xY2xhc3MgPSBDX0lOOworCQlxLnF0eXBlID0gVF9BQUFBOworCQlxLmFuc3dlciA9IGJ1Zi0+YnVmOworCQlxLmFuc2xlbiA9IHNpemVvZihidWYtPmJ1Zik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZyZWUoYnVmKTsKKwkJZnJlZShidWYyKTsKKwkJcmV0dXJuIE5TX1VOQVZBSUw7CisJfQorCisJcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWZyZWUoYnVmKTsKKwkJZnJlZShidWYyKTsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKworCS8qIHRoaXMganVzdCBzZXRzIG91ciBuZXRpZCB2YWwgaW4gdGhlIHRocmVhZCBwcml2YXRlIGRhdGEgc28gd2UgZG9uJ3QgaGF2ZSB0bworCSAqIG1vZGlmeSB0aGUgYXBpJ3MgYWxsIHRoZSB3YXkgZG93biB0byByZXNfc2VuZC5jJ3MgcmVzX25zZW5kLiAgV2UgY291bGQKKwkgKiBmdWxseSBwb3B1bGF0ZSB0aGUgdGhyZWFkIHByaXZhdGUgZGF0YSBoZXJlLCBidXQgaWYgd2UgZ2V0IGRvd24gdGhlcmUKKwkgKiBhbmQgaGF2ZSBhIGNhY2hlIGhpdCB0aGF0IHdvdWxkIGJlIHdhc3RlZCwgc28gd2UgZG8gdGhlIHJlc3QgdGhlcmUgb24gbWlzcworCSAqLworCXJlc19zZXRuZXRpZChyZXMsIG5ldGlkKTsKKwlyZXNfc2V0bWFyayhyZXMsIG1hcmspOworCWlmIChyZXNfc2VhcmNoTihuYW1lLCAmcSwgcmVzKSA8IDApIHsKKwkJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJCWZyZWUoYnVmKTsKKwkJZnJlZShidWYyKTsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKwlhaSA9IGdldGFuc3dlcihidWYsIHEubiwgcS5uYW1lLCBxLnF0eXBlLCBwYWkpOworCWlmIChhaSkgeworCQljdXItPmFpX25leHQgPSBhaTsKKwkJd2hpbGUgKGN1ciAmJiBjdXItPmFpX25leHQpCisJCQljdXIgPSBjdXItPmFpX25leHQ7CisJfQorCWlmIChxLm5leHQpIHsKKwkJYWkgPSBnZXRhbnN3ZXIoYnVmMiwgcTIubiwgcTIubmFtZSwgcTIucXR5cGUsIHBhaSk7CisJCWlmIChhaSkKKwkJCWN1ci0+YWlfbmV4dCA9IGFpOworCX0KKwlmcmVlKGJ1Zik7CisJZnJlZShidWYyKTsKKwlpZiAoc2VudGluZWwuYWlfbmV4dCA9PSBOVUxMKSB7CisJCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCQlzd2l0Y2ggKGhfZXJybm8pIHsKKwkJY2FzZSBIT1NUX05PVF9GT1VORDoKKwkJCXJldHVybiBOU19OT1RGT1VORDsKKwkJY2FzZSBUUllfQUdBSU46CisJCQlyZXR1cm4gTlNfVFJZQUdBSU47CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gTlNfVU5BVkFJTDsKKwkJfQorCX0KKworCV9yZmM2NzI0X3NvcnQoJnNlbnRpbmVsLCBuZXRpZCk7CisKKwlfX3Jlc19wdXRfc3RhdGUocmVzKTsKKworCSooKHN0cnVjdCBhZGRyaW5mbyAqKilydikgPSBzZW50aW5lbC5haV9uZXh0OworCXJldHVybiBOU19TVUNDRVNTOworfQorCitzdGF0aWMgdm9pZAorX3NldGh0ZW50KEZJTEUgKipob3N0ZikKK3sKKworCWlmICghKmhvc3RmKQorCQkqaG9zdGYgPSBmb3BlbihfUEFUSF9IT1NUUywgInIiICk7CisJZWxzZQorCQlyZXdpbmQoKmhvc3RmKTsKK30KKworc3RhdGljIHZvaWQKK19lbmRodGVudChGSUxFICoqaG9zdGYpCit7CisKKwlpZiAoKmhvc3RmKSB7CisJCSh2b2lkKSBmY2xvc2UoKmhvc3RmKTsKKwkJKmhvc3RmID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWRkcmluZm8gKgorX2dldGh0ZW50KEZJTEUgKipob3N0ZiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWkpCit7CisJY2hhciAqcDsKKwljaGFyICpjcCwgKnRuYW1lLCAqY25hbWU7CisJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzMCwgKnJlczsKKwlpbnQgZXJyb3I7CisJY29uc3QgY2hhciAqYWRkcjsKKwljaGFyIGhvc3RidWZbOCoxMDI0XTsKKworLy8JZnByaW50ZihzdGRlcnIsICJfZ2V0aHRlbnQoKSBuYW1lID0gJyVzJ1xuIiwgbmFtZSk7CisJYXNzZXJ0KG5hbWUgIT0gTlVMTCk7CisJYXNzZXJ0KHBhaSAhPSBOVUxMKTsKKworCWlmICghKmhvc3RmICYmICEoKmhvc3RmID0gZm9wZW4oX1BBVEhfSE9TVFMsICJyIiApKSkKKwkJcmV0dXJuIChOVUxMKTsKKyBhZ2FpbjoKKwlpZiAoIShwID0gZmdldHMoaG9zdGJ1Ziwgc2l6ZW9mIGhvc3RidWYsICpob3N0ZikpKQorCQlyZXR1cm4gKE5VTEwpOworCWlmICgqcCA9PSAnIycpCisJCWdvdG8gYWdhaW47CisJaWYgKCEoY3AgPSBzdHJwYnJrKHAsICIjXG4iKSkpCisJCWdvdG8gYWdhaW47CisJKmNwID0gJ1wwJzsKKwlpZiAoIShjcCA9IHN0cnBicmsocCwgIiBcdCIpKSkKKwkJZ290byBhZ2FpbjsKKwkqY3ArKyA9ICdcMCc7CisJYWRkciA9IHA7CisJLyogaWYgdGhpcyBpcyBub3Qgc29tZXRoaW5nIHdlJ3JlIGxvb2tpbmcgZm9yLCBza2lwIGl0LiAqLworCWNuYW1lID0gTlVMTDsKKwl3aGlsZSAoY3AgJiYgKmNwKSB7CisJCWlmICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSB7CisJCQljcCsrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFjbmFtZSkKKwkJCWNuYW1lID0gY3A7CisJCXRuYW1lID0gY3A7CisJCWlmICgoY3AgPSBzdHJwYnJrKGNwLCAiIFx0IikpICE9IE5VTEwpCisJCQkqY3ArKyA9ICdcMCc7CisvLwkJZnByaW50ZihzdGRlcnIsICJcdHRuYW1lID0gJyVzJyIsIHRuYW1lKTsKKwkJaWYgKHN0cmNhc2VjbXAobmFtZSwgdG5hbWUpID09IDApCisJCQlnb3RvIGZvdW5kOworCX0KKwlnb3RvIGFnYWluOworCitmb3VuZDoKKwloaW50cyA9ICpwYWk7CisJaGludHMuYWlfZmxhZ3MgPSBBSV9OVU1FUklDSE9TVDsKKwllcnJvciA9IGdldGFkZHJpbmZvKGFkZHIsIE5VTEwsICZoaW50cywgJnJlczApOworCWlmIChlcnJvcikKKwkJZ290byBhZ2FpbjsKKwlmb3IgKHJlcyA9IHJlczA7IHJlczsgcmVzID0gcmVzLT5haV9uZXh0KSB7CisJCS8qIGNvdmVyIGl0IHVwICovCisJCXJlcy0+YWlfZmxhZ3MgPSBwYWktPmFpX2ZsYWdzOworCisJCWlmIChwYWktPmFpX2ZsYWdzICYgQUlfQ0FOT05OQU1FKSB7CisJCQlpZiAoZ2V0X2Nhbm9ubmFtZShwYWksIHJlcywgY25hbWUpICE9IDApIHsKKwkJCQlmcmVlYWRkcmluZm8ocmVzMCk7CisJCQkJZ290byBhZ2FpbjsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmVzMDsKK30KKworLypBUkdTVVNFRCovCitzdGF0aWMgaW50CitfZmlsZXNfZ2V0YWRkcmluZm8odm9pZCAqcnYsIHZvaWQgKmNiX2RhdGEsIHZhX2xpc3QgYXApCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaTsKKwlzdHJ1Y3QgYWRkcmluZm8gc2VudGluZWwsICpjdXI7CisJc3RydWN0IGFkZHJpbmZvICpwOworCUZJTEUgKmhvc3RmID0gTlVMTDsKKworCW5hbWUgPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJcGFpID0gdmFfYXJnKGFwLCBzdHJ1Y3QgYWRkcmluZm8gKik7CisKKy8vCWZwcmludGYoc3RkZXJyLCAiX2ZpbGVzX2dldGFkZHJpbmZvKCkgbmFtZSA9ICclcydcbiIsIG5hbWUpOworCW1lbXNldCgmc2VudGluZWwsIDAsIHNpemVvZihzZW50aW5lbCkpOworCWN1ciA9ICZzZW50aW5lbDsKKworCV9zZXRodGVudCgmaG9zdGYpOworCXdoaWxlICgocCA9IF9nZXRodGVudCgmaG9zdGYsIG5hbWUsIHBhaSkpICE9IE5VTEwpIHsKKwkJY3VyLT5haV9uZXh0ID0gcDsKKwkJd2hpbGUgKGN1ciAmJiBjdXItPmFpX25leHQpCisJCQljdXIgPSBjdXItPmFpX25leHQ7CisJfQorCV9lbmRodGVudCgmaG9zdGYpOworCisJKigoc3RydWN0IGFkZHJpbmZvICoqKXJ2KSA9IHNlbnRpbmVsLmFpX25leHQ7CisJaWYgKHNlbnRpbmVsLmFpX25leHQgPT0gTlVMTCkKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCXJldHVybiBOU19TVUNDRVNTOworfQorCisvKiByZXNvbHZlciBsb2dpYyAqLworCisvKgorICogRm9ybXVsYXRlIGEgbm9ybWFsIHF1ZXJ5LCBzZW5kLCBhbmQgYXdhaXQgYW5zd2VyLgorICogUmV0dXJuZWQgYW5zd2VyIGlzIHBsYWNlZCBpbiBzdXBwbGllZCBidWZmZXIgImFuc3dlciIuCisgKiBQZXJmb3JtIHByZWxpbWluYXJ5IGNoZWNrIG9mIGFuc3dlciwgcmV0dXJuaW5nIHN1Y2Nlc3Mgb25seQorICogaWYgbm8gZXJyb3IgaXMgaW5kaWNhdGVkIGFuZCB0aGUgYW5zd2VyIGNvdW50IGlzIG5vbnplcm8uCisgKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHJlc3BvbnNlIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICogRXJyb3IgbnVtYmVyIGlzIGxlZnQgaW4gaF9lcnJuby4KKyAqCisgKiBDYWxsZXIgbXVzdCBwYXJzZSBhbnN3ZXIgYW5kIGRldGVybWluZSB3aGV0aGVyIGl0IGFuc3dlcnMgdGhlIHF1ZXN0aW9uLgorICovCitzdGF0aWMgaW50CityZXNfcXVlcnlOKGNvbnN0IGNoYXIgKm5hbWUsIC8qIGRvbWFpbiBuYW1lICovIHN0cnVjdCByZXNfdGFyZ2V0ICp0YXJnZXQsCisgICAgcmVzX3N0YXRlIHJlcykKK3sKKwl1X2NoYXIgYnVmW01BWFBBQ0tFVF07CisJSEVBREVSICpocDsKKwlpbnQgbjsKKwlzdHJ1Y3QgcmVzX3RhcmdldCAqdDsKKwlpbnQgcmNvZGU7CisJaW50IGFuY291bnQ7CisKKwlhc3NlcnQobmFtZSAhPSBOVUxMKTsKKwkvKiBYWFg6IHRhcmdldCBtYXkgYmUgTlVMTD8/PyAqLworCisJcmNvZGUgPSBOT0VSUk9SOworCWFuY291bnQgPSAwOworCisJZm9yICh0ID0gdGFyZ2V0OyB0OyB0ID0gdC0+bmV4dCkgeworCQlpbnQgY2xhc3MsIHR5cGU7CisJCXVfY2hhciAqYW5zd2VyOworCQlpbnQgYW5zbGVuOworCisJCWhwID0gKEhFQURFUiAqKSh2b2lkICopdC0+YW5zd2VyOworCQlocC0+cmNvZGUgPSBOT0VSUk9SOwkvKiBkZWZhdWx0ICovCisKKwkJLyogbWFrZSBpdCBlYXNpZXIuLi4gKi8KKwkJY2xhc3MgPSB0LT5xY2xhc3M7CisJCXR5cGUgPSB0LT5xdHlwZTsKKwkJYW5zd2VyID0gdC0+YW5zd2VyOworCQlhbnNsZW4gPSB0LT5hbnNsZW47CisjaWZkZWYgREVCVUcKKwkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJCXByaW50ZigiOzsgcmVzX25xdWVyeSglcywgJWQsICVkKVxuIiwgbmFtZSwgY2xhc3MsIHR5cGUpOworI2VuZGlmCisKKwkJbiA9IHJlc19ubWtxdWVyeShyZXMsIFFVRVJZLCBuYW1lLCBjbGFzcywgdHlwZSwgTlVMTCwgMCwgTlVMTCwKKwkJICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworI2lmZGVmIFJFU19VU0VfRUROUzAKKwkJaWYgKG4gPiAwICYmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0VETlMwKSAhPSAwKQorCQkJbiA9IHJlc19ub3B0KHJlcywgbiwgYnVmLCBzaXplb2YoYnVmKSwgYW5zbGVuKTsKKyNlbmRpZgorCQlpZiAobiA8PSAwKSB7CisjaWZkZWYgREVCVUcKKwkJCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQkJcHJpbnRmKCI7OyByZXNfbnF1ZXJ5OiBta3F1ZXJ5IGZhaWxlZFxuIik7CisjZW5kaWYKKwkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCXJldHVybiBuOworCQl9CisJCW4gPSByZXNfbnNlbmQocmVzLCBidWYsIG4sIGFuc3dlciwgYW5zbGVuKTsKKyNpZiAwCisJCWlmIChuIDwgMCkgeworI2lmZGVmIERFQlVHCisJCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQkJCXByaW50ZigiOzsgcmVzX3F1ZXJ5OiBzZW5kIGVycm9yXG4iKTsKKyNlbmRpZgorCQkJaF9lcnJubyA9IFRSWV9BR0FJTjsKKwkJCXJldHVybiBuOworCQl9CisjZW5kaWYKKworCQlpZiAobiA8IDAgfHwgaHAtPnJjb2RlICE9IE5PRVJST1IgfHwgbnRvaHMoaHAtPmFuY291bnQpID09IDApIHsKKwkJCXJjb2RlID0gaHAtPnJjb2RlOwkvKiByZWNvcmQgbW9zdCByZWNlbnQgZXJyb3IgKi8KKyNpZmRlZiBERUJVRworCQkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJCQlwcmludGYoIjs7IHJjb2RlID0gJXUsIGFuY291bnQ9JXVcbiIsIGhwLT5yY29kZSwKKwkJCQkgICAgbnRvaHMoaHAtPmFuY291bnQpKTsKKyNlbmRpZgorCQkJY29udGludWU7CisJCX0KKworCQlhbmNvdW50ICs9IG50b2hzKGhwLT5hbmNvdW50KTsKKworCQl0LT5uID0gbjsKKwl9CisKKwlpZiAoYW5jb3VudCA9PSAwKSB7CisJCXN3aXRjaCAocmNvZGUpIHsKKwkJY2FzZSBOWERPTUFJTjoKKwkJCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKKwkJCWJyZWFrOworCQljYXNlIFNFUlZGQUlMOgorCQkJaF9lcnJubyA9IFRSWV9BR0FJTjsKKwkJCWJyZWFrOworCQljYXNlIE5PRVJST1I6CisJCQloX2Vycm5vID0gTk9fREFUQTsKKwkJCWJyZWFrOworCQljYXNlIEZPUk1FUlI6CisJCWNhc2UgTk9USU1QOgorCQljYXNlIFJFRlVTRUQ6CisJCWRlZmF1bHQ6CisJCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBhbmNvdW50OworfQorCisvKgorICogRm9ybXVsYXRlIGEgbm9ybWFsIHF1ZXJ5LCBzZW5kLCBhbmQgcmV0cmlldmUgYW5zd2VyIGluIHN1cHBsaWVkIGJ1ZmZlci4KKyAqIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgcmVzcG9uc2Ugb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCisgKiBJZiBlbmFibGVkLCBpbXBsZW1lbnQgc2VhcmNoIHJ1bGVzIHVudGlsIGFuc3dlciBvciB1bnJlY292ZXJhYmxlIGZhaWx1cmUKKyAqIGlzIGRldGVjdGVkLiAgRXJyb3IgY29kZSwgaWYgYW55LCBpcyBsZWZ0IGluIGhfZXJybm8uCisgKi8KK3N0YXRpYyBpbnQKK3Jlc19zZWFyY2hOKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCByZXNfdGFyZ2V0ICp0YXJnZXQsIHJlc19zdGF0ZSByZXMpCit7CisJY29uc3QgY2hhciAqY3AsICogY29uc3QgKmRvbWFpbjsKKwlIRUFERVIgKmhwOworCXVfaW50IGRvdHM7CisJaW50IHRyYWlsaW5nX2RvdCwgcmV0LCBzYXZlZF9oZXJybm87CisJaW50IGdvdF9ub2RhdGEgPSAwLCBnb3Rfc2VydmZhaWwgPSAwLCB0cmllZF9hc19pcyA9IDA7CisKKwlhc3NlcnQobmFtZSAhPSBOVUxMKTsKKwlhc3NlcnQodGFyZ2V0ICE9IE5VTEwpOworCisJaHAgPSAoSEVBREVSICopKHZvaWQgKil0YXJnZXQtPmFuc3dlcjsJLypYWFgqLworCisJZXJybm8gPSAwOworCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsJLyogZGVmYXVsdCwgaWYgd2UgbmV2ZXIgcXVlcnkgKi8KKwlkb3RzID0gMDsKKwlmb3IgKGNwID0gbmFtZTsgKmNwOyBjcCsrKQorCQlkb3RzICs9ICgqY3AgPT0gJy4nKTsKKwl0cmFpbGluZ19kb3QgPSAwOworCWlmIChjcCA+IG5hbWUgJiYgKi0tY3AgPT0gJy4nKQorCQl0cmFpbGluZ19kb3QrKzsKKworCisgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJyZXNfc2VhcmNoTigpIG5hbWUgPSAnJXMnXG4iLCBuYW1lKTsKKworCS8qCisJICogaWYgdGhlcmUgYXJlbid0IGFueSBkb3RzLCBpdCBjb3VsZCBiZSBhIHVzZXItbGV2ZWwgYWxpYXMKKwkgKi8KKwlpZiAoIWRvdHMgJiYgKGNwID0gX19ob3N0YWxpYXMobmFtZSkpICE9IE5VTEwpIHsKKwkJcmV0ID0gcmVzX3F1ZXJ5TihjcCwgdGFyZ2V0LCByZXMpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qCisJICogSWYgdGhlcmUgYXJlIGRvdHMgaW4gdGhlIG5hbWUgYWxyZWFkeSwgbGV0J3MganVzdCBnaXZlIGl0IGEgdHJ5CisJICogJ2FzIGlzJy4gIFRoZSB0aHJlc2hvbGQgY2FuIGJlIHNldCB3aXRoIHRoZSAibmRvdHMiIG9wdGlvbi4KKwkgKi8KKwlzYXZlZF9oZXJybm8gPSAtMTsKKwlpZiAoZG90cyA+PSByZXMtPm5kb3RzKSB7CisJCXJldCA9IHJlc19xdWVyeWRvbWFpbk4obmFtZSwgTlVMTCwgdGFyZ2V0LCByZXMpOworCQlpZiAocmV0ID4gMCkKKwkJCXJldHVybiAocmV0KTsKKwkJc2F2ZWRfaGVycm5vID0gaF9lcnJubzsKKwkJdHJpZWRfYXNfaXMrKzsKKwl9CisKKwkvKgorCSAqIFdlIGRvIGF0IGxlYXN0IG9uZSBsZXZlbCBvZiBzZWFyY2ggaWYKKwkgKgktIHRoZXJlIGlzIG5vIGRvdCBhbmQgUkVTX0RFRk5BTUUgaXMgc2V0LCBvcgorCSAqCS0gdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGRvdCwgdGhlcmUgaXMgbm8gdHJhaWxpbmcgZG90LAorCSAqCSAgYW5kIFJFU19ETlNSQ0ggaXMgc2V0LgorCSAqLworCWlmICgoIWRvdHMgJiYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUZOQU1FUykpIHx8CisJICAgIChkb3RzICYmICF0cmFpbGluZ19kb3QgJiYgKHJlcy0+b3B0aW9ucyAmIFJFU19ETlNSQ0gpKSkgeworCQlpbnQgZG9uZSA9IDA7CisKKwkJLyogVW5mb3J0dW5hdGVseSB3ZSBuZWVkIHRvIHNldCBzdHVmZiB1cCBiZWZvcmUKKwkJICogdGhlIGRvbWFpbiBzdHVmZiBpcyB0cmllZC4gIFdpbGwgaGF2ZSBhIGJldHRlcgorCQkgKiBmaXggYWZ0ZXIgdGhyZWFkIHBvb2xzIGFyZSB1c2VkLgorCQkgKi8KKwkJX3Jlc29sdl9wb3B1bGF0ZV9yZXNfZm9yX25ldChyZXMpOworCisJCWZvciAoZG9tYWluID0gKGNvbnN0IGNoYXIgKiBjb25zdCAqKXJlcy0+ZG5zcmNoOworCQkgICAqZG9tYWluICYmICFkb25lOworCQkgICBkb21haW4rKykgeworCisJCQlyZXQgPSByZXNfcXVlcnlkb21haW5OKG5hbWUsICpkb21haW4sIHRhcmdldCwgcmVzKTsKKwkJCWlmIChyZXQgPiAwKQorCQkJCXJldHVybiByZXQ7CisKKwkJCS8qCisJCQkgKiBJZiBubyBzZXJ2ZXIgcHJlc2VudCwgZ2l2ZSB1cC4KKwkJCSAqIElmIG5hbWUgaXNuJ3QgZm91bmQgaW4gdGhpcyBkb21haW4sCisJCQkgKiBrZWVwIHRyeWluZyBoaWdoZXIgZG9tYWlucyBpbiB0aGUgc2VhcmNoIGxpc3QKKwkJCSAqIChpZiB0aGF0J3MgZW5hYmxlZCkuCisJCQkgKiBPbiBhIE5PX0RBVEEgZXJyb3IsIGtlZXAgdHJ5aW5nLCBvdGhlcndpc2UKKwkJCSAqIGEgd2lsZGNhcmQgZW50cnkgb2YgYW5vdGhlciB0eXBlIGNvdWxkIGtlZXAgdXMKKwkJCSAqIGZyb20gZmluZGluZyB0aGlzIGVudHJ5IGhpZ2hlciBpbiB0aGUgZG9tYWluLgorCQkJICogSWYgd2UgZ2V0IHNvbWUgb3RoZXIgZXJyb3IgKG5lZ2F0aXZlIGFuc3dlciBvcgorCQkJICogc2VydmVyIGZhaWx1cmUpLCB0aGVuIHN0b3Agc2VhcmNoaW5nIHVwLAorCQkJICogYnV0IHRyeSB0aGUgaW5wdXQgbmFtZSBiZWxvdyBpbiBjYXNlIGl0J3MKKwkJCSAqIGZ1bGx5LXF1YWxpZmllZC4KKwkJCSAqLworCQkJaWYgKGVycm5vID09IEVDT05OUkVGVVNFRCkgeworCQkJCWhfZXJybm8gPSBUUllfQUdBSU47CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQlzd2l0Y2ggKGhfZXJybm8pIHsKKwkJCWNhc2UgTk9fREFUQToKKwkJCQlnb3Rfbm9kYXRhKys7CisJCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJCWNhc2UgSE9TVF9OT1RfRk9VTkQ6CisJCQkJLyoga2VlcCB0cnlpbmcgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgVFJZX0FHQUlOOgorCQkJCWlmIChocC0+cmNvZGUgPT0gU0VSVkZBSUwpIHsKKwkJCQkJLyogdHJ5IG5leHQgc2VhcmNoIGVsZW1lbnQsIGlmIGFueSAqLworCQkJCQlnb3Rfc2VydmZhaWwrKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8qIEZBTExUSFJPVUdIICovCisJCQlkZWZhdWx0OgorCQkJCS8qIGFueXRoaW5nIGVsc2UgaW1wbGllcyB0aGF0IHdlJ3JlIGRvbmUgKi8KKwkJCQlkb25lKys7CisJCQl9CisJCQkvKgorCQkJICogaWYgd2UgZ290IGhlcmUgZm9yIHNvbWUgcmVhc29uIG90aGVyIHRoYW4gRE5TUkNILAorCQkJICogd2Ugb25seSB3YW50ZWQgb25lIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCwgc28gc3RvcC4KKwkJCSAqLworCQkJaWYgKCEocmVzLT5vcHRpb25zICYgUkVTX0ROU1JDSCkpCisJCQkgICAgICAgIGRvbmUrKzsKKwkJfQorCX0KKworCS8qCisJICogaWYgd2UgaGF2ZSBub3QgYWxyZWFkeSB0cmllZCB0aGUgbmFtZSAiYXMgaXMiLCBkbyB0aGF0IG5vdy4KKwkgKiBub3RlIHRoYXQgd2UgZG8gdGhpcyByZWdhcmRsZXNzIG9mIGhvdyBtYW55IGRvdHMgd2VyZSBpbiB0aGUKKwkgKiBuYW1lIG9yIHdoZXRoZXIgaXQgZW5kcyB3aXRoIGEgZG90LgorCSAqLworCWlmICghdHJpZWRfYXNfaXMpIHsKKwkJcmV0ID0gcmVzX3F1ZXJ5ZG9tYWluTihuYW1lLCBOVUxMLCB0YXJnZXQsIHJlcyk7CisJCWlmIChyZXQgPiAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKgorCSAqIGlmIHdlIGdvdCBoZXJlLCB3ZSBkaWRuJ3Qgc2F0aXNmeSB0aGUgc2VhcmNoLgorCSAqIGlmIHdlIGRpZCBhbiBpbml0aWFsIGZ1bGwgcXVlcnksIHJldHVybiB0aGF0IHF1ZXJ5J3MgaF9lcnJubworCSAqIChub3RlIHRoYXQgd2Ugd291bGRuJ3QgYmUgaGVyZSBpZiB0aGF0IHF1ZXJ5IGhhZCBzdWNjZWVkZWQpLgorCSAqIGVsc2UgaWYgd2UgZXZlciBnb3QgYSBub2RhdGEsIHNlbmQgdGhhdCBiYWNrIGFzIHRoZSByZWFzb24uCisJICogZWxzZSBzZW5kIGJhY2sgbWVhbmluZ2xlc3MgaF9lcnJubywgdGhhdCBiZWluZyB0aGUgb25lIGZyb20KKwkgKiB0aGUgbGFzdCBETlNSQ0ggd2UgZGlkLgorCSAqLworCWlmIChzYXZlZF9oZXJybm8gIT0gLTEpCisJCWhfZXJybm8gPSBzYXZlZF9oZXJybm87CisJZWxzZSBpZiAoZ290X25vZGF0YSkKKwkJaF9lcnJubyA9IE5PX0RBVEE7CisJZWxzZSBpZiAoZ290X3NlcnZmYWlsKQorCQloX2Vycm5vID0gVFJZX0FHQUlOOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFBlcmZvcm0gYSBjYWxsIG9uIHJlc19xdWVyeSBvbiB0aGUgY29uY2F0ZW5hdGlvbiBvZiBuYW1lIGFuZCBkb21haW4sCisgKiByZW1vdmluZyBhIHRyYWlsaW5nIGRvdCBmcm9tIG5hbWUgaWYgZG9tYWluIGlzIE5VTEwuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc19xdWVyeWRvbWFpbk4oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZG9tYWluLAorICAgIHN0cnVjdCByZXNfdGFyZ2V0ICp0YXJnZXQsIHJlc19zdGF0ZSByZXMpCit7CisJY2hhciBuYnVmW01BWEROQU1FXTsKKwljb25zdCBjaGFyICpsb25nbmFtZSA9IG5idWY7CisJc2l6ZV90IG4sIGQ7CisKKwlhc3NlcnQobmFtZSAhPSBOVUxMKTsKKwkvKiBYWFg6IHRhcmdldCBtYXkgYmUgTlVMTD8/PyAqLworCisjaWZkZWYgREVCVUcKKwlpZiAocmVzLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQlwcmludGYoIjs7IHJlc19xdWVyeWRvbWFpbiglcywgJXMpXG4iLAorCQkJbmFtZSwgZG9tYWluP2RvbWFpbjoiPE5pbD4iKTsKKyNlbmRpZgorCWlmIChkb21haW4gPT0gTlVMTCkgeworCQkvKgorCQkgKiBDaGVjayBmb3IgdHJhaWxpbmcgJy4nOworCQkgKiBjb3B5IHdpdGhvdXQgJy4nIGlmIHByZXNlbnQuCisJCSAqLworCQluID0gc3RybGVuKG5hbWUpOworCQlpZiAobiArIDEgPiBzaXplb2YobmJ1ZikpIHsKKwkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAobiA+IDAgJiYgbmFtZVstLW5dID09ICcuJykgeworCQkJc3RybmNweShuYnVmLCBuYW1lLCBuKTsKKwkJCW5idWZbbl0gPSAnXDAnOworCQl9IGVsc2UKKwkJCWxvbmduYW1lID0gbmFtZTsKKwl9IGVsc2UgeworCQluID0gc3RybGVuKG5hbWUpOworCQlkID0gc3RybGVuKGRvbWFpbik7CisJCWlmIChuICsgMSArIGQgKyAxID4gc2l6ZW9mKG5idWYpKSB7CisJCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJc25wcmludGYobmJ1Ziwgc2l6ZW9mKG5idWYpLCAiJXMuJXMiLCBuYW1lLCBkb21haW4pOworCX0KKwlyZXR1cm4gcmVzX3F1ZXJ5Tihsb25nbmFtZSwgdGFyZ2V0LCByZXMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvbmV0L2dldG5hbWVpbmZvLmMgYi9saWJjL2Rucy9uZXQvZ2V0bmFtZWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWMwMjgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvbmV0L2dldG5hbWVpbmZvLmMKQEAgLTAsMCArMSw0MzMgQEAKKy8qCSROZXRCU0Q6IGdldG5hbWVpbmZvLmMsdiAxLjUzIDIwMTIvMDkvMjYgMjM6MTM6MDAgY2hyaXN0b3MgRXhwICQJKi8KKy8qCSRLQU1FOiBnZXRuYW1laW5mby5jLHYgMS40NSAyMDAwLzA5LzI1IDIyOjQzOjU2IGl0b2p1biBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAwIEJlbiBIYXJyaXMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVjdC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBJc3N1ZXMgdG8gYmUgZGlzY3Vzc2VkOgorICogLSBUaHJlYWQgc2FmZS1uZXNzIG11c3QgYmUgY2hlY2tlZAorICogLSBSRkMyNTUzIHNheXMgdGhhdCB3ZSBzaG91bGQgcmFpc2UgZXJyb3Igb24gc2hvcnQgYnVmZmVyLiAgWC9PcGVuIHNheXMKKyAqICAgd2UgbmVlZCB0byB0cnVuY2F0ZSB0aGUgcmVzdWx0LiAgV2Ugb2JleSBSRkMyNTUzIChhbmQgWC9PcGVuIHNob3VsZCBiZQorICogICBtb2RpZmllZCkuICBpcG5nd2cgcm91Z2ggY29uc2Vuc3VzIHNlZW1zIHRvIGZvbGxvdyBSRkMyNTUzLgorICogLSBXaGF0IGlzICJsb2NhbCIgaW4gTklfRlFETj8KKyAqIC0gTklfTkFNRVJFUUQgYW5kIE5JX05VTUVSSUNIT1NUIGNvbmZsaWN0IHdpdGggZWFjaCBvdGhlci4KKyAqIC0gKEtBTUUgZXh0ZW5zaW9uKSBhbHdheXMgYXR0YWNoIHRleHR1YWwgc2NvcGVpZCAoZmU4MDo6MSVsbzApLCBpZgorICogICBzaW42X3Njb3BlX2lkIGlzIGZpbGxlZCAtIHN0YW5kYXJkaXphdGlvbiBzdGF0dXM/CisgKiAgIFhYWCBicmVha3MgYmFja3dhcmQgY29tcGF0IGZvciBjb2RlIHRoYXQgZXhwZWN0cyBubyBzY29wZWlkLgorICogICBiZXdhcmUgb24gbWVyZ2UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorX19SQ1NJRCgiJE5ldEJTRDogZ2V0bmFtZWluZm8uYyx2IDEuNTMgMjAxMi8wOS8yNiAyMzoxMzowMCBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfaWVlZTEzOTQuaD4KKyNpbmNsdWRlIDxuZXQvaWZfdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNpbmNsdWRlICJyZXNvbHZfbmV0aWQuaCIKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHN5cy9zeXN0ZW1fcHJvcGVydGllcy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWZkIHsKKwlpbnQJCWFfYWY7CisJc29ja2xlbl90CWFfYWRkcmxlbjsKKwlzb2NrbGVuX3QJYV9zb2NrbGVuOworCWludAkJYV9vZmY7Cit9IGFmZGwgW10gPSB7CisjaWZkZWYgSU5FVDYKKwl7UEZfSU5FVDYsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNiksCisJCW9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl9pbjYsIHNpbjZfYWRkcil9LAorI2VuZGlmCisJe1BGX0lORVQsIHNpemVvZihzdHJ1Y3QgaW5fYWRkciksIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pLAorCQlvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfaW4sIHNpbl9hZGRyKX0sCisJezAsIDAsIDAsIDB9LAorfTsKKworc3RydWN0IHNvY2tpbmV0IHsKKwl1X2NoYXIJc2lfbGVuOworCXVfY2hhcglzaV9mYW1pbHk7CisJdV9zaG9ydAlzaV9wb3J0OworfTsKKworc3RhdGljIGludCBnZXRuYW1laW5mb19pbmV0KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QsIGNoYXIgKiwKKyAgICBzb2NrbGVuX3QsIGNoYXIgKiwgc29ja2xlbl90LCBpbnQsIHVuc2lnbmVkLCB1bnNpZ25lZCk7CisjaWZkZWYgSU5FVDYKK3N0YXRpYyBpbnQgaXA2X3BhcnNlbnVtZXJpYyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgY29uc3QgY2hhciAqLCBjaGFyICosCisJCQkJIHNvY2tsZW5fdCwgaW50KTsKK3N0YXRpYyBpbnQgaXA2X3NhMnN0cihjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIGNoYXIgKiwgc2l6ZV90LCBpbnQpOworI2VuZGlmCitzdGF0aWMgaW50IGdldG5hbWVpbmZvX2xvY2FsKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QsIGNoYXIgKiwKKyAgICBzb2NrbGVuX3QsIGNoYXIgKiwgc29ja2xlbl90LCBpbnQpOworCisvKgorICogVG9wLWxldmVsIGdldG5hbWVpbmZvKCkgY29kZS4gIExvb2sgYXQgdGhlIGFkZHJlc3MgZmFtaWx5LCBhbmQgcGljayBhbgorICogYXBwcm9wcmlhdGUgZnVuY3Rpb24gdG8gY2FsbC4KKyAqLworaW50IGdldG5hbWVpbmZvKGNvbnN0IHN0cnVjdCBzb2NrYWRkciogc2EsIHNvY2tsZW5fdCBzYWxlbiwgY2hhciogaG9zdCwgc2l6ZV90IGhvc3RsZW4sCisJCWNoYXIqIHNlcnYsIHNpemVfdCBzZXJ2bGVuLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGFuZHJvaWRfZ2V0bmFtZWluZm9mb3JuZXQoc2EsIHNhbGVuLCBob3N0LCBob3N0bGVuLCBzZXJ2LCBzZXJ2bGVuLCBmbGFncywKKwkJCU5FVElEX1VOU0VULCBNQVJLX1VOU0VUKTsKK30KKworaW50IGFuZHJvaWRfZ2V0bmFtZWluZm9mb3JuZXQoY29uc3Qgc3RydWN0IHNvY2thZGRyKiBzYSwgc29ja2xlbl90IHNhbGVuLCBjaGFyKiBob3N0LAorCQlzaXplX3QgaG9zdGxlbiwgY2hhciogc2Vydiwgc2l6ZV90IHNlcnZsZW4sIGludCBmbGFncywgdW5zaWduZWQgbmV0aWQsCisJCXVuc2lnbmVkIG1hcmspCit7CisJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiBnZXRuYW1laW5mb19pbmV0KHNhLCBzYWxlbiwgaG9zdCwgaG9zdGxlbiwKKwkJCQlzZXJ2LCBzZXJ2bGVuLCBmbGFncywgbmV0aWQsIG1hcmspOworCWNhc2UgQUZfTE9DQUw6CisJCXJldHVybiBnZXRuYW1laW5mb19sb2NhbChzYSwgc2FsZW4sIGhvc3QsIGhvc3RsZW4sCisJCSAgICBzZXJ2LCBzZXJ2bGVuLCBmbGFncyk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEVBSV9GQU1JTFk7CisJfQorfQorCisvKgorICogZ2V0bmFtZWluZm9fbG9jYWwoKToKKyAqIEZvcm1hdCBhbiBsb2NhbCBhZGRyZXNzIGludG8gYSBwcmludGFibGUgZm9ybWF0LgorICovCisvKiBBUkdTVVNFRCAqLworc3RhdGljIGludAorZ2V0bmFtZWluZm9fbG9jYWwoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSwgc29ja2xlbl90IHNhbGVuLAorICAgIGNoYXIgKmhvc3QsIHNvY2tsZW5fdCBob3N0bGVuLCBjaGFyICpzZXJ2LCBzb2NrbGVuX3Qgc2VydmxlbiwKKyAgICBpbnQgZmxhZ3MgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCit7CisgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX3VuICpzdW4gPQorICAgICAgICAgICAoY29uc3Qgc3RydWN0IHNvY2thZGRyX3VuICopKGNvbnN0IHZvaWQgKilzYTsKKworICAgICAgIGlmIChzYWxlbiA8IChzb2NrbGVuX3QpIG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpKSB7CisgICAgICAgICAgIHJldHVybiBFQUlfRkFNSUxZOworICAgICAgIH0KKworICAgICAgIGlmIChzZXJ2ICE9IE5VTEwgJiYgc2VydmxlbiA+IDApCisgICAgICAgICAgICAgICBzZXJ2WzBdID0gJ1wwJzsKKworICAgICAgIGlmIChob3N0ICYmIGhvc3RsZW4gPiAwKQorICAgICAgICAgICAgICAgc3RybGNweShob3N0LCBzdW4tPnN1bl9wYXRoLAorICAgICAgICAgICAgICAgICAgIE1JTigoc29ja2xlbl90KSBzaXplb2Yoc3VuLT5zdW5fcGF0aCkgKyAxLCBob3N0bGVuKSk7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGdldG5hbWVpbmZvX2luZXQoKToKKyAqIEZvcm1hdCBhbiBJUHY0IG9yIElQdjYgc29ja2FkZHIgaW50byBhIHByaW50YWJsZSBzdHJpbmcuCisgKi8KK3N0YXRpYyBpbnQKK2dldG5hbWVpbmZvX2luZXQoY29uc3Qgc3RydWN0IHNvY2thZGRyKiBzYSwgc29ja2xlbl90IHNhbGVuLAorICAgICAgIGNoYXIgKmhvc3QsIHNvY2tsZW5fdCBob3N0bGVuLAorICAgICAgIGNoYXIgKnNlcnYsIHNvY2tsZW5fdCBzZXJ2bGVuLAorICAgICAgIGludCBmbGFncywgdW5zaWduZWQgbmV0aWQsIHVuc2lnbmVkIG1hcmspCit7CisJY29uc3Qgc3RydWN0IGFmZCAqYWZkOworCXN0cnVjdCBzZXJ2ZW50ICpzcDsKKwlzdHJ1Y3QgaG9zdGVudCAqaHA7CisJdV9zaG9ydCBwb3J0OworCWludCBmYW1pbHksIGk7CisJY29uc3QgY2hhciAqYWRkcjsKKwl1aW50MzJfdCB2NGE7CisJY2hhciBudW1zZXJ2WzUxMl07CisJY2hhciBudW1hZGRyWzUxMl07CisKKwkvKiBzYSBpcyBjaGVja2VkIGJlbG93ICovCisJLyogaG9zdCBtYXkgYmUgTlVMTCAqLworCS8qIHNlcnYgbWF5IGJlIE5VTEwgKi8KKworCWlmIChzYSA9PSBOVUxMKQorCQlyZXR1cm4gRUFJX0ZBSUw7CisKKwlmYW1pbHkgPSBzYS0+c2FfZmFtaWx5OworCWZvciAoaSA9IDA7IGFmZGxbaV0uYV9hZjsgaSsrKQorCQlpZiAoYWZkbFtpXS5hX2FmID09IGZhbWlseSkgeworCQkJYWZkID0gJmFmZGxbaV07CisJCQlnb3RvIGZvdW5kOworCQl9CisJcmV0dXJuIEVBSV9GQU1JTFk7CisKKyBmb3VuZDoKKwkvLyBodHRwOi8vYi8xODg5Mjc1OiBjYWxsZXJzIHNob3VsZCBiZSBhbGxvd2VkIHRvIHByb3ZpZGUgdG9vIG11Y2gKKwkvLyBzcGFjZSwgYnV0IG5vdCB0b28gbGl0dGxlLgorCWlmIChzYWxlbiA8IGFmZC0+YV9zb2NrbGVuKSB7CisJCXJldHVybiBFQUlfRkFNSUxZOworCX0KKworCS8qIG5ldHdvcmsgYnl0ZSBvcmRlciAqLworCXBvcnQgPSAoKGNvbnN0IHN0cnVjdCBzb2NraW5ldCAqKShjb25zdCB2b2lkICopc2EpLT5zaV9wb3J0OworCWFkZHIgPSAoY29uc3QgY2hhciAqKShjb25zdCB2b2lkICopc2EgKyBhZmQtPmFfb2ZmOworCisJaWYgKHNlcnYgPT0gTlVMTCB8fCBzZXJ2bGVuID09IDApIHsKKwkJLyoKKwkJICogZG8gbm90aGluZyBpbiB0aGlzIGNhc2UuCisJCSAqIGluIGNhc2UgeW91IGFyZSB3b25kZXJpbmcgaWYgIiYmIiBpcyBtb3JlIGNvcnJlY3QgdGhhbgorCQkgKiAifHwiIGhlcmU6IHJmYzI1NTNiaXMtMDMgc2F5cyB0aGF0IHNlcnYgPT0gTlVMTCBPUgorCQkgKiBzZXJ2bGVuID09IDAgbWVhbnMgdGhhdCB0aGUgY2FsbGVyIGRvZXMgbm90IHdhbnQgdGhlIHJlc3VsdC4KKwkJICovCisJfSBlbHNlIHsKKwkJaWYgKGZsYWdzICYgTklfTlVNRVJJQ1NFUlYpCisJCQlzcCA9IE5VTEw7CisJCWVsc2UgeworCQkJc3AgPSBnZXRzZXJ2Ynlwb3J0KHBvcnQsCisJCQkJKGZsYWdzICYgTklfREdSQU0pID8gInVkcCIgOiAidGNwIik7CisJCX0KKwkJaWYgKHNwKSB7CisJCQlpZiAoc3RybGVuKHNwLT5zX25hbWUpICsgMSA+IChzaXplX3Qpc2VydmxlbikKKwkJCQlyZXR1cm4gRUFJX01FTU9SWTsKKwkJCXN0cmxjcHkoc2Vydiwgc3AtPnNfbmFtZSwgc2Vydmxlbik7CisJCX0gZWxzZSB7CisJCQlzbnByaW50ZihudW1zZXJ2LCBzaXplb2YobnVtc2VydiksICIldSIsIG50b2hzKHBvcnQpKTsKKwkJCWlmIChzdHJsZW4obnVtc2VydikgKyAxID4gKHNpemVfdClzZXJ2bGVuKQorCQkJCXJldHVybiBFQUlfTUVNT1JZOworCQkJc3RybGNweShzZXJ2LCBudW1zZXJ2LCBzZXJ2bGVuKTsKKwkJfQorCX0KKworCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJdjRhID0gKHVpbnQzMl90KQorCQkgICAgbnRvaGwoKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKikKKwkJICAgIChjb25zdCB2b2lkICopc2EpLT5zaW5fYWRkci5zX2FkZHIpOworCQlpZiAoSU5fTVVMVElDQVNUKHY0YSkgfHwgSU5fRVhQRVJJTUVOVEFMKHY0YSkpCisJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKKwkJdjRhID4+PSBJTl9DTEFTU0FfTlNISUZUOworCQlpZiAodjRhID09IDApCisJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKKwkJYnJlYWs7CisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCSAgICB7CisJCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisJCXNpbjYgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKShjb25zdCB2b2lkICopc2E7CisJCXN3aXRjaCAoc2luNi0+c2luNl9hZGRyLnM2X2FkZHJbMF0pIHsKKwkJY2FzZSAweDAwOgorCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKQorCQkJCTsKKwkJCWVsc2UgaWYgKElONl9JU19BRERSX0xPT1BCQUNLKCZzaW42LT5zaW42X2FkZHIpKQorCQkJCTsKKwkJCWVsc2UKKwkJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKElONl9JU19BRERSX0xJTktMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJCWZsYWdzIHw9IE5JX05VTUVSSUNIT1NUOworCQkJfQorCQkJZWxzZSBpZiAoSU42X0lTX0FERFJfTVVMVElDQVNUKCZzaW42LT5zaW42X2FkZHIpKQorCQkJCWZsYWdzIHw9IE5JX05VTUVSSUNIT1NUOworCQkJYnJlYWs7CisJCX0KKwkgICAgfQorCQlicmVhazsKKyNlbmRpZgorCX0KKwlpZiAoaG9zdCA9PSBOVUxMIHx8IGhvc3RsZW4gPT0gMCkgeworCQkvKgorCQkgKiBkbyBub3RoaW5nIGluIHRoaXMgY2FzZS4KKwkJICogaW4gY2FzZSB5b3UgYXJlIHdvbmRlcmluZyBpZiAiJiYiIGlzIG1vcmUgY29ycmVjdCB0aGFuCisJCSAqICJ8fCIgaGVyZTogcmZjMjU1M2Jpcy0wMyBzYXlzIHRoYXQgaG9zdCA9PSBOVUxMIG9yCisJCSAqIGhvc3RsZW4gPT0gMCBtZWFucyB0aGF0IHRoZSBjYWxsZXIgZG9lcyBub3Qgd2FudCB0aGUgcmVzdWx0LgorCQkgKi8KKwl9IGVsc2UgaWYgKGZsYWdzICYgTklfTlVNRVJJQ0hPU1QpIHsKKwkJc2l6ZV90IG51bWFkZHJsZW47CisKKwkJLyogTlVNRVJJQ0hPU1QgYW5kIE5BTUVSRVFEIGNvbmZsaWN0cyB3aXRoIGVhY2ggb3RoZXIgKi8KKwkJaWYgKGZsYWdzICYgTklfTkFNRVJFUUQpCisJCQlyZXR1cm4gRUFJX05PTkFNRTsKKworCQlzd2l0Y2goYWZkLT5hX2FmKSB7CisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJeworCQkJaW50IGVycm9yOworCisJCQlpZiAoKGVycm9yID0gaXA2X3BhcnNlbnVtZXJpYyhzYSwgYWRkciwgaG9zdCwKKwkJCQkJCSAgICAgIGhvc3RsZW4sIGZsYWdzKSkgIT0gMCkKKwkJCQlyZXR1cm4oZXJyb3IpOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJaWYgKGluZXRfbnRvcChhZmQtPmFfYWYsIGFkZHIsIG51bWFkZHIsIHNpemVvZihudW1hZGRyKSkKKwkJCSAgICA9PSBOVUxMKQorCQkJCXJldHVybiBFQUlfU1lTVEVNOworCQkJbnVtYWRkcmxlbiA9IHN0cmxlbihudW1hZGRyKTsKKwkJCWlmIChudW1hZGRybGVuICsgMSA+IChzaXplX3QpaG9zdGxlbikgLyogZG9uJ3QgZm9yZ2V0IHRlcm1pbmF0b3IgKi8KKwkJCQlyZXR1cm4gRUFJX01FTU9SWTsKKwkJCXN0cmxjcHkoaG9zdCwgbnVtYWRkciwgaG9zdGxlbik7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCWhwID0gYW5kcm9pZF9nZXRob3N0YnlhZGRyZm9ybmV0X3Byb3h5KGFkZHIsIGFmZC0+YV9hZGRybGVuLCBhZmQtPmFfYWYsIG5ldGlkKTsKKwkJaWYgKGhwKSB7CisjaWYgMAorCQkJLyoKKwkJCSAqIGNvbW1lbnRlZCBvdXQsIHNpbmNlICJmb3IgbG9jYWwgaG9zdCIgaXMgbm90CisJCQkgKiBpbXBsZW1lbnRlZCBoZXJlIC0gc2VlIFJGQzI1NTMgcDMwCisJCQkgKi8KKwkJCWlmIChmbGFncyAmIE5JX05PRlFETikgeworCQkJCWNoYXIgKnA7CisJCQkJcCA9IHN0cmNocihocC0+aF9uYW1lLCAnLicpOworCQkJCWlmIChwKQorCQkJCQlUT0RPOiBCZWZvcmUgdW5jb21tZW50aW5nIHJld3JpdGUgdG8gYXZvaWQgbW9kaWZ5aW5nIGhwLgorCQkJCQkqcCA9ICdcMCc7CisJCQl9CisjZW5kaWYKKwkJCWlmIChzdHJsZW4oaHAtPmhfbmFtZSkgKyAxID4gKHNpemVfdClob3N0bGVuKSB7CisJCQkJcmV0dXJuIEVBSV9NRU1PUlk7CisJCQl9CisJCQlzdHJsY3B5KGhvc3QsIGhwLT5oX25hbWUsIGhvc3RsZW4pOworCQl9IGVsc2UgeworCQkJaWYgKGZsYWdzICYgTklfTkFNRVJFUUQpCisJCQkJcmV0dXJuIEVBSV9OT05BTUU7CisJCQlzd2l0Y2goYWZkLT5hX2FmKSB7CisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQl7CisJCQkJaW50IGVycm9yOworCisJCQkJaWYgKChlcnJvciA9IGlwNl9wYXJzZW51bWVyaWMoc2EsIGFkZHIsIGhvc3QsCisJCQkJCQkJICAgICAgaG9zdGxlbiwKKwkJCQkJCQkgICAgICBmbGFncykpICE9IDApCisJCQkJCXJldHVybihlcnJvcik7CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKGluZXRfbnRvcChhZmQtPmFfYWYsIGFkZHIsIGhvc3QsCisJCQkJICAgIGhvc3RsZW4pID09IE5VTEwpCisJCQkJCXJldHVybiBFQUlfU1lTVEVNOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXJldHVybigwKTsKK30KKworI2lmZGVmIElORVQ2CitzdGF0aWMgaW50CitpcDZfcGFyc2VudW1lcmljKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EsIGNvbnN0IGNoYXIgKmFkZHIsIGNoYXIgKmhvc3QsCisgICAgICAgc29ja2xlbl90IGhvc3RsZW4sIGludCBmbGFncykKK3sKKwlzaXplX3QgbnVtYWRkcmxlbjsKKwljaGFyIG51bWFkZHJbNTEyXTsKKworCWFzc2VydChzYSAhPSBOVUxMKTsKKwlhc3NlcnQoYWRkciAhPSBOVUxMKTsKKwlhc3NlcnQoaG9zdCAhPSBOVUxMKTsKKworCWlmIChpbmV0X250b3AoQUZfSU5FVDYsIGFkZHIsIG51bWFkZHIsIHNpemVvZihudW1hZGRyKSkgPT0gTlVMTCkKKwkJcmV0dXJuIEVBSV9TWVNURU07CisKKwludW1hZGRybGVuID0gc3RybGVuKG51bWFkZHIpOworCWlmIChudW1hZGRybGVuICsgMSA+IChzaXplX3QpaG9zdGxlbikgLyogZG9uJ3QgZm9yZ2V0IHRlcm1pbmF0b3IgKi8KKwkJcmV0dXJuIEVBSV9PVkVSRkxPVzsKKwlzdHJsY3B5KGhvc3QsIG51bWFkZHIsIGhvc3RsZW4pOworCisJaWYgKCgoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKShjb25zdCB2b2lkICopc2EpLT5zaW42X3Njb3BlX2lkKSB7CisJCWNoYXIgem9uZWJ1ZltNQVhIT1NUTkFNRUxFTl07CisJCWludCB6b25lbGVuOworCisJCXpvbmVsZW4gPSBpcDZfc2Eyc3RyKAorCQkgICAgKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikoY29uc3Qgdm9pZCAqKXNhLAorCQkgICAgem9uZWJ1Ziwgc2l6ZW9mKHpvbmVidWYpLCBmbGFncyk7CisJCWlmICh6b25lbGVuIDwgMCkKKwkJCXJldHVybiBFQUlfT1ZFUkZMT1c7CisJCWlmICgoc2l6ZV90KSB6b25lbGVuICsgMSArIG51bWFkZHJsZW4gKyAxID4gKHNpemVfdClob3N0bGVuKQorCQkJcmV0dXJuIEVBSV9PVkVSRkxPVzsKKwkJLyogY29uc3RydWN0IDxudW1lcmljLWFkZHI+PGRlbGltPjx6b25laWQ+ICovCisJCW1lbWNweShob3N0ICsgbnVtYWRkcmxlbiArIDEsIHpvbmVidWYsCisJCSAgICAoc2l6ZV90KXpvbmVsZW4pOworCQlob3N0W251bWFkZHJsZW5dID0gU0NPUEVfREVMSU1JVEVSOworCQlob3N0W251bWFkZHJsZW4gKyAxICsgem9uZWxlbl0gPSAnXDAnOworCX0KKworCXJldHVybiAwOworfQorCisvKiBBUkdTVVNFRCAqLworc3RhdGljIGludAoraXA2X3NhMnN0cihjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYTYsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpeiwgaW50IGZsYWdzKQoreworCXVuc2lnbmVkIGludCBpZmluZGV4OworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTY7CisJaW50IG47CisKKwlhc3NlcnQoc2E2ICE9IE5VTEwpOworCWFzc2VydChidWYgIT0gTlVMTCk7CisKKwlpZmluZGV4ID0gKHVuc2lnbmVkIGludClzYTYtPnNpbjZfc2NvcGVfaWQ7CisJYTYgPSAmc2E2LT5zaW42X2FkZHI7CisKKyNpZmRlZiBOSV9OVU1FUklDU0NPUEUKKwlpZiAoKGZsYWdzICYgTklfTlVNRVJJQ1NDT1BFKSAhPSAwKSB7CisJCW4gPSBzbnByaW50ZihidWYsIGJ1ZnNpeiwgIiV1Iiwgc2E2LT5zaW42X3Njb3BlX2lkKTsKKwkJaWYgKG4gPCAwIHx8IG4gPj0gYnVmc2l6KQorCQkJcmV0dXJuIC0xOworCQllbHNlCisJCQlyZXR1cm4gbjsKKwl9CisjZW5kaWYKKworCS8qIGlmX2luZGV4dG9uYW1lKCkgZG9lcyBub3QgdGFrZSBidWZmZXIgc2l6ZS4gIG5vdCBhIGdvb2QgYXBpLi4uICovCisJaWYgKChJTjZfSVNfQUREUl9MSU5LTE9DQUwoYTYpIHx8IElONl9JU19BRERSX01DX0xJTktMT0NBTChhNikpICYmCisJICAgIGJ1ZnNpeiA+PSBJRl9OQU1FU0laRSkgeworCQljaGFyICpwID0gaWZfaW5kZXh0b25hbWUoaWZpbmRleCwgYnVmKTsKKwkJaWYgKHApIHsKKwkJCXJldHVybihzdHJsZW4ocCkpOworCQl9CisJfQorCisJLyogbGFzdCByZXNvcnQgKi8KKwluID0gc25wcmludGYoYnVmLCBidWZzaXosICIldSIsIHNhNi0+c2luNl9zY29wZV9pZCk7CisJaWYgKG4gPCAwIHx8IChzaXplX3QpIG4gPj0gYnVmc2l6KQorCQlyZXR1cm4gLTE7CisJZWxzZQorCQlyZXR1cm4gbjsKK30KKyNlbmRpZiAvKiBJTkVUNiAqLwpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvbmV0L2dldHNlcnZieW5hbWUuYyBiL2xpYmMvZG5zL25ldC9nZXRzZXJ2YnluYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1YzliMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL25ldC9nZXRzZXJ2YnluYW1lLmMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSAic2VydmVudC5oIgorCitzdHJ1Y3Qgc2VydmVudCAqCitnZXRzZXJ2YnluYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnByb3RvKQoreworICAgIHJlc19zdGF0aWMgICAgICAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisKKyAgICBpZiAocnMgPT0gTlVMTCB8fCBwcm90byA9PSBOVUxMIHx8IG5hbWUgPT0gTlVMTCkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcnMtPnNlcnZlbnRfcHRyID0gTlVMTDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBzdHJ1Y3Qgc2VydmVudCogIHMgPSBnZXRzZXJ2ZW50X3IocnMpOworICAgICAgICBpZiAocyA9PSBOVUxMKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICggIXN0cmNtcCggcy0+c19uYW1lLCBuYW1lICkgJiYgIXN0cmNtcCggcy0+c19wcm90bywgcHJvdG8gKSApCisgICAgICAgICAgICByZXR1cm4gczsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvZG5zL25ldC9nZXRzZXJ2Ynlwb3J0LmMgYi9saWJjL2Rucy9uZXQvZ2V0c2VydmJ5cG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkY2FhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Rucy9uZXQvZ2V0c2VydmJ5cG9ydC5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgInNlcnZlbnQuaCIKKworc3RydWN0IHNlcnZlbnQgKgorZ2V0c2VydmJ5cG9ydChpbnQgcG9ydCwgY29uc3QgY2hhciAqcHJvdG8pCit7CisgICAgcmVzX3N0YXRpYyAgICAgICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKKworICAgIGlmIChycyA9PSBOVUxMIHx8IHByb3RvID09IE5VTEwpIHsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJzLT5zZXJ2ZW50X3B0ciA9IE5VTEw7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgc3RydWN0IHNlcnZlbnQqICBzID0gZ2V0c2VydmVudF9yKHJzKTsKKyAgICAgICAgaWYgKHMgPT0gTlVMTCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoIHMtPnNfcG9ydCA9PSBwb3J0ICYmICFzdHJjbXAoIHMtPnNfcHJvdG8sIHByb3RvICkgKQorICAgICAgICAgICAgcmV0dXJuIHM7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmVudC5jIGIvbGliYy9kbnMvbmV0L2dldHNlcnZlbnQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9uZXRic2QvbmV0L2dldHNlcnZlbnQuYwpyZW5hbWUgdG8gbGliYy9kbnMvbmV0L2dldHNlcnZlbnQuYwpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvbmV0L25zZGlzcGF0Y2guYyBiL2xpYmMvZG5zL25ldC9uc2Rpc3BhdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI2ZDhmNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL25ldC9uc2Rpc3BhdGNoLmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qCSROZXRCU0Q6IG5zZGlzcGF0Y2guYyx2IDEuMzAgMjAwNS8xMS8yOSAwMzoxMTo1OSBjaHJpc3RvcyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5NywgMTk5OCwgMTk5OSwgMjAwNCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IEx1a2UgTWV3YnVybjsgYW5kIGJ5IEphc29uIFIuIFRob3JwZS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAorICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgTmV0d29ya3MgQXNzb2NpYXRlcyBUZWNobm9sb2d5LCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgd2VyZSBkZXZlbG9wZWQgZm9yIHRoZSBGcmVlQlNEIFByb2plY3QgYnkKKyAqIEphY3F1ZXMgQS4gVmlkcmluZSwgU2FmZXBvcnQgTmV0d29yayBTZXJ2aWNlcywgYW5kIE5ldHdvcmsKKyAqIEFzc29jaWF0ZXMgTGFib3JhdG9yaWVzLCB0aGUgU2VjdXJpdHkgUmVzZWFyY2ggRGl2aXNpb24gb2YgTmV0d29yaworICogQXNzb2NpYXRlcywgSW5jLiB1bmRlciBEQVJQQS9TUEFXQVIgY29udHJhY3QgTjY2MDAxLTAxLUMtODAzNQorICogKCJDQk9TUyIpLCBhcyBwYXJ0IG9mIHRoZSBEQVJQQSBDSEFUUyByZXNlYXJjaCBwcm9ncmFtLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPG5zc3dpdGNoLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorCitzdGF0aWMgbnNzX21ldGhvZAorX25zbWV0aG9kKGNvbnN0IGNoYXIgKnNvdXJjZSwgY29uc3QgY2hhciAqZGF0YWJhc2UgX191bnVzZWQsIGNvbnN0IGNoYXIgKm1ldGhvZCBfX3VudXNlZCwKKyAgICBjb25zdCBuc19kdGFiIGRpc3BfdGFiW10sIHZvaWQgKipjYl9kYXRhKQoreworCWludAljdXJkaXNwOworCisJaWYgKGRpc3BfdGFiICE9IE5VTEwpIHsKKwkJZm9yIChjdXJkaXNwID0gMDsgZGlzcF90YWJbY3VyZGlzcF0uc3JjICE9IE5VTEw7IGN1cmRpc3ArKykgeworCQkJaWYgKHN0cmNhc2VjbXAoc291cmNlLCBkaXNwX3RhYltjdXJkaXNwXS5zcmMpID09IDApIHsKKwkJCQkqY2JfZGF0YSA9IGRpc3BfdGFiW2N1cmRpc3BdLmNiX2RhdGE7CisJCQkJcmV0dXJuIChkaXNwX3RhYltjdXJkaXNwXS5jYWxsYmFjayk7CisJCQl9CisJCX0KKwl9CisKKwkqY2JfZGF0YSA9IE5VTEw7CisJcmV0dXJuIChOVUxMKTsKK30KKworaW50CisvKkFSR1NVU0VEKi8KK25zZGlzcGF0Y2godm9pZCAqcmV0dmFsLCBjb25zdCBuc19kdGFiIGRpc3BfdGFiW10sIGNvbnN0IGNoYXIgKmRhdGFiYXNlLAorCSAgICBjb25zdCBjaGFyICptZXRob2QsIGNvbnN0IG5zX3NyYyBkZWZhdWx0c1tdLCAuLi4pCit7CisJdmFfbGlzdAkJIGFwOworCWludAkJIGksIHJlc3VsdDsKKwljb25zdCBuc19zcmMJKnNyY2xpc3Q7CisJaW50CQkgc3JjbGlzdHNpemU7CisJbnNzX21ldGhvZAkgY2I7CisJdm9pZAkJKmNiX2RhdGE7CisKKwkvKiByZXR2YWwgbWF5IGJlIE5VTEwgKi8KKwkvKiBkaXNwX3RhYiBtYXkgYmUgTlVMTCAqLworCWFzc2VydChkYXRhYmFzZSAhPSBOVUxMKTsKKwlhc3NlcnQobWV0aG9kICE9IE5VTEwpOworCWFzc2VydChkZWZhdWx0cyAhPSBOVUxMKTsKKwlpZiAoZGF0YWJhc2UgPT0gTlVMTCB8fCBtZXRob2QgPT0gTlVMTCB8fCBkZWZhdWx0cyA9PSBOVUxMKQorCQlyZXR1cm4gKE5TX1VOQVZBSUwpOworCisgICAgICAgIHNyY2xpc3QgPSBkZWZhdWx0czsKKyAgICAgICAgc3JjbGlzdHNpemUgPSAwOworICAgICAgICB3aGlsZSAoc3JjbGlzdFtzcmNsaXN0c2l6ZV0ubmFtZSAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHNyY2xpc3RzaXplKys7CisKKwlyZXN1bHQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHNyY2xpc3RzaXplOyBpKyspIHsKKwkJY2IgPSBfbnNtZXRob2Qoc3JjbGlzdFtpXS5uYW1lLCBkYXRhYmFzZSwgbWV0aG9kLAorCQkgICAgZGlzcF90YWIsICZjYl9kYXRhKTsKKwkJcmVzdWx0ID0gMDsKKwkJaWYgKGNiICE9IE5VTEwpIHsKKwkJCXZhX3N0YXJ0KGFwLCBkZWZhdWx0cyk7CisJCQlyZXN1bHQgPSAoKmNiKShyZXR2YWwsIGNiX2RhdGEsIGFwKTsKKwkJCXZhX2VuZChhcCk7CisJCQlpZiAoZGVmYXVsdHNbMF0uZmxhZ3MgJiBOU19GT1JDRUFMTCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChyZXN1bHQgJiBzcmNsaXN0W2ldLmZsYWdzKQorCQkJCWJyZWFrOworCQl9CisJfQorCXJlc3VsdCAmPSBOU19TVEFUVVNNQVNLOwkvKiBjbGVhciBwcml2YXRlIGZsYWdzIGluIHJlc3VsdCAqLworCisJcmV0dXJuIChyZXN1bHQgPyByZXN1bHQgOiBOU19OT1RGT1VORCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvc2VydmVudC5oIGIvbGliYy9kbnMvbmV0L3NlcnZlbnQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9uZXRic2QvbmV0L3NlcnZlbnQuaApyZW5hbWUgdG8gbGliYy9kbnMvbmV0L3NlcnZlbnQuaApkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmV0L3NlcnZpY2VzLmggYi9saWJjL2Rucy9uZXQvc2VydmljZXMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9uZXRic2QvbmV0L3NlcnZpY2VzLmgKcmVuYW1lIHRvIGxpYmMvZG5zL25ldC9zZXJ2aWNlcy5oCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvX19kbl9jb21wLmMgYi9saWJjL2Rucy9yZXNvbHYvX19kbl9jb21wLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvbmV0YnNkL3Jlc29sdi9fX2RuX2NvbXAuYwpyZW5hbWUgdG8gbGliYy9kbnMvcmVzb2x2L19fZG5fY29tcC5jCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvX19yZXNfY2xvc2UuYyBiL2xpYmMvZG5zL3Jlc29sdi9fX3Jlc19jbG9zZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL25ldGJzZC9yZXNvbHYvX19yZXNfY2xvc2UuYwpyZW5hbWUgdG8gbGliYy9kbnMvcmVzb2x2L19fcmVzX2Nsb3NlLmMKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9fX3Jlc19zZW5kLmMgYi9saWJjL2Rucy9yZXNvbHYvX19yZXNfc2VuZC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL25ldGJzZC9yZXNvbHYvX19yZXNfc2VuZC5jCnJlbmFtZSB0byBsaWJjL2Rucy9yZXNvbHYvX19yZXNfc2VuZC5jCmRpZmYgLS1naXQgYS9saWJjL2Rucy9yZXNvbHYvaGVycm9yLmMgYi9saWJjL2Rucy9yZXNvbHYvaGVycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFhZjY5NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL3Jlc29sdi9oZXJyb3IuYwpAQCAtMCwwICsxLDEzMyBAQAorLyoJJE5ldEJTRDogaGVycm9yLmMsdiAxLjQgMjAwNC8wNS8yMyAwNTowOTo1MiBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg3LCAxOTkzCisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqIAlDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHNjY3NpZFtdID0gIkAoIyloZXJyb3IuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogaGVycm9yLmMsdiAxLjIuMjA2LjEgMjAwNC8wMy8wOSAwODozMzo1NCBtYXJrYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IGhlcnJvci5jLHYgMS40IDIwMDQvMDUvMjMgMDU6MDk6NTIgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKworI2luY2x1ZGUgPG5ldGRiLmg+CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmbmRlZiBERV9DT05TVAorI2RlZmluZSBERV9DT05TVChjLHYpICAgdiA9ICgoYykgPyBcCisgICAgc3RyY2hyKChjb25zdCB2b2lkICopKGMpLCAqKGNvbnN0IGNoYXIgKikoY29uc3Qgdm9pZCAqKShjKSkgOiBOVUxMKQorI2VuZGlmCisKK2NvbnN0IGNoYXIgKiBjb25zdCBoX2Vycmxpc3RbXSA9IHsKKwkiUmVzb2x2ZXIgRXJyb3IgMCAobm8gZXJyb3IpIiwKKwkiVW5rbm93biBob3N0IiwJCQkJLyogMSBIT1NUX05PVF9GT1VORCAqLworCSJIb3N0IG5hbWUgbG9va3VwIGZhaWx1cmUiLAkJLyogMiBUUllfQUdBSU4gKi8KKwkiVW5rbm93biBzZXJ2ZXIgZXJyb3IiLAkJCS8qIDMgTk9fUkVDT1ZFUlkgKi8KKwkiTm8gYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggbmFtZSIsCS8qIDQgTk9fQUREUkVTUyAqLworfTsKK2NvbnN0IGludAloX25lcnIgPSB7IHNpemVvZiBoX2Vycmxpc3QgLyBzaXplb2YgaF9lcnJsaXN0WzBdIH07CisKKy8qCisgKiBoZXJyb3IgLS0KKyAqCXByaW50IHRoZSBlcnJvciBpbmRpY2F0ZWQgYnkgdGhlIGhfZXJybm8gdmFsdWUuCisgKi8KK3ZvaWQKK2hlcnJvcihjb25zdCBjaGFyICpzKSB7CisJc3RydWN0IGlvdmVjIGlvdls0XSwgKnYgPSBpb3Y7CisJY2hhciAqdDsKKworCWlmIChzICE9IE5VTEwgJiYgKnMgIT0gJ1wwJykgeworCQlERV9DT05TVChzLCB0KTsKKwkJdi0+aW92X2Jhc2UgPSB0OworCQl2LT5pb3ZfbGVuID0gc3RybGVuKHQpOworCQl2Kys7CisJCURFX0NPTlNUKCI6ICIsIHQpOworCQl2LT5pb3ZfYmFzZSA9IHQ7CisJCXYtPmlvdl9sZW4gPSAyOworCQl2Kys7CisJfQorCURFX0NPTlNUKGhzdHJlcnJvcihoX2Vycm5vKSwgdCk7CisJdi0+aW92X2Jhc2UgPSB0OworCXYtPmlvdl9sZW4gPSBzdHJsZW4odi0+aW92X2Jhc2UpOworCXYrKzsKKwlERV9DT05TVCgiXG4iLCB0KTsKKwl2LT5pb3ZfYmFzZSA9IHQ7CisJdi0+aW92X2xlbiA9IDE7CisJd3JpdGV2KFNUREVSUl9GSUxFTk8sIGlvdiwgKHYgLSBpb3YpICsgMSk7Cit9CisKKy8qCisgKiBoc3RyZXJyb3IgLS0KKyAqCXJldHVybiB0aGUgc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuICJob3N0IiBlcnJubyB2YWx1ZS4KKyAqLworY29uc3QgY2hhciAqCitoc3RyZXJyb3IoaW50IGVycikgeworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gKCJSZXNvbHZlciBpbnRlcm5hbCBlcnJvciIpOworCWVsc2UgaWYgKGVyciA8IGhfbmVycikKKwkJcmV0dXJuIChoX2Vycmxpc3RbZXJyXSk7CisJcmV0dXJuICgiVW5rbm93biByZXNvbHZlciBlcnJvciIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvcmVzb2x2L3Jlc19jYWNoZS5jIGIvbGliYy9kbnMvcmVzb2x2L3Jlc19jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OGVjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Rucy9yZXNvbHYvcmVzX2NhY2hlLmMKQEAgLTAsMCArMSwyMDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJyZXNvbHZfY2FjaGUuaCIKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSAicHRocmVhZC5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2luY2x1ZGUgInJlc29sdl9uZXRpZC5oIgorI2luY2x1ZGUgInJlc19wcml2YXRlLmgiCisKKy8qIFRoaXMgY29kZSBpbXBsZW1lbnRzIGEgc21hbGwgYW5kICpzaW1wbGUqIEROUyByZXNvbHZlciBjYWNoZS4KKyAqCisgKiBJdCBpcyBvbmx5IHVzZWQgdG8gY2FjaGUgRE5TIGFuc3dlcnMgZm9yIGEgdGltZSBkZWZpbmVkIGJ5IHRoZSBzbWFsbGVzdCBUVEwKKyAqIGFtb25nIHRoZSBhbnN3ZXIgcmVjb3JkcyBpbiBvcmRlciB0byByZWR1Y2UgRE5TIHRyYWZmaWMuIEl0IGlzIG5vdCBzdXBwb3NlZAorICogdG8gYmUgYSBmdWxsIEROUyBjYWNoZSwgc2luY2Ugd2UgcGxhbiB0byBpbXBsZW1lbnQgdGhhdCBpbiB0aGUgZnV0dXJlIGluIGEKKyAqIGRlZGljYXRlZCBwcm9jZXNzIHJ1bm5pbmcgb24gdGhlIHN5c3RlbS4KKyAqCisgKiBOb3RlIHRoYXQgaXRzIGRlc2lnbiBpcyBrZXB0IHNpbXBsZSB2ZXJ5IGludGVudGlvbmFsbHksIGkuZS46CisgKgorICogIC0gaXQgdGFrZXMgcmF3IEROUyBxdWVyeSBwYWNrZXQgZGF0YSBhcyBpbnB1dCwgYW5kIHJldHVybnMgcmF3IEROUworICogICAgYW5zd2VyIHBhY2tldCBkYXRhIGFzIG91dHB1dAorICoKKyAqICAgICh0aGlzIG1lYW5zIHRoYXQgdHdvIHNpbWlsYXIgcXVlcmllcyB0aGF0IGVuY29kZSB0aGUgRE5TIG5hbWUKKyAqICAgICBkaWZmZXJlbnRseSB3aWxsIGJlIHRyZWF0ZWQgZGlzdGluY3RseSkuCisgKgorICogICAgdGhlIHNtYWxsZXN0IFRUTCB2YWx1ZSBhbW9uZyB0aGUgYW5zd2VyIHJlY29yZHMgYXJlIHVzZWQgYXMgdGhlIHRpbWUKKyAqICAgIHRvIGtlZXAgYW4gYW5zd2VyIGluIHRoZSBjYWNoZS4KKyAqCisgKiAgICB0aGlzIGlzIGJhZCwgYnV0IHdlIGFic29sdXRlbHkgd2FudCB0byBhdm9pZCBwYXJzaW5nIHRoZSBhbnN3ZXIgcGFja2V0cworICogICAgKGFuZCBzaG91bGQgYmUgc29sdmVkIGJ5IHRoZSBsYXRlciBmdWxsIEROUyBjYWNoZSBwcm9jZXNzKS4KKyAqCisgKiAgLSB0aGUgaW1wbGVtZW50YXRpb24gaXMganVzdCBhIChxdWVyeS1kYXRhKSA9PiAoYW5zd2VyLWRhdGEpIGhhc2ggdGFibGUKKyAqICAgIHdpdGggYSB0cml2aWFsIGxlYXN0LXJlY2VudGx5LXVzZWQgZXhwaXJhdGlvbiBwb2xpY3kuCisgKgorICogRG9pbmcgdGhpcyBrZWVwcyB0aGUgY29kZSBzaW1wbGUgYW5kIGF2b2lkcyB0byBkZWFsIHdpdGggYSBsb3Qgb2YgdGhpbmdzCisgKiB0aGF0IGEgZnVsbCBETlMgY2FjaGUgaXMgZXhwZWN0ZWQgdG8gZG8uCisgKgorICogVGhlIEFQSSBpcyBhbHNvIHZlcnkgc2ltcGxlOgorICoKKyAqICAgLSB0aGUgY2xpZW50IGNhbGxzIF9yZXNvbHZfY2FjaGVfZ2V0KCkgdG8gb2J0YWluIGEgaGFuZGxlIHRvIHRoZSBjYWNoZS4KKyAqICAgICB0aGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgY2FjaGUgb24gZmlyc3QgdXNhZ2UuIHRoZSByZXN1bHQgY2FuIGJlIE5VTEwKKyAqICAgICBpZiB0aGUgY2FjaGUgaXMgZGlzYWJsZWQuCisgKgorICogICAtIHRoZSBjbGllbnQgY2FsbHMgX3Jlc29sdl9jYWNoZV9sb29rdXAoKSBiZWZvcmUgcGVyZm9ybWluZyBhIHF1ZXJ5CisgKgorICogICAgIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIFJFU09MVl9DQUNIRV9GT1VORCwgYSBjb3B5IG9mIHRoZSBhbnN3ZXIgZGF0YQorICogICAgIGhhcyBiZWVuIGNvcGllZCBpbnRvIHRoZSBjbGllbnQtcHJvdmlkZWQgYW5zd2VyIGJ1ZmZlci4KKyAqCisgKiAgICAgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgUkVTT0xWX0NBQ0hFX05PVEZPVU5ELCB0aGUgY2xpZW50IHNob3VsZCBwZXJmb3JtCisgKiAgICAgYSByZXF1ZXN0IG5vcm1hbGx5LCAqdGhlbiogY2FsbCBfcmVzb2x2X2NhY2hlX2FkZCgpIHRvIGFkZCB0aGUgcmVjZWl2ZWQKKyAqICAgICBhbnN3ZXIgdG8gdGhlIGNhY2hlLgorICoKKyAqICAgICBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBSRVNPTFZfQ0FDSEVfVU5TVVBQT1JURUQsIHRoZSBjbGllbnQgc2hvdWxkCisgKiAgICAgcGVyZm9ybSBhIHJlcXVlc3Qgbm9ybWFsbHksIGFuZCAqbm90KiBjYWxsIF9yZXNvbHZfY2FjaGVfYWRkKCkKKyAqCisgKiAgICAgbm90ZSB0aGF0IFJFU09MVl9DQUNIRV9VTlNVUFBPUlRFRCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBhbnN3ZXIgYnVmZmVyCisgKiAgICAgaXMgdG9vIHNob3J0IHRvIGFjY29tb2RhdGUgdGhlIGNhY2hlZCByZXN1bHQuCisgKi8KKworLyogdGhlIG5hbWUgb2YgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdGhhdCB3aWxsIGJlIGNoZWNrZWQgdGhlIGZpcnN0IHRpbWUKKyAqIHRoaXMgY29kZSBpcyBjYWxsZWQgaWYgaXRzIHZhbHVlIGlzICIwIiwgdGhlbiB0aGUgcmVzb2x2ZXIgY2FjaGUgaXMKKyAqIGRpc2FibGVkLgorICovCisjZGVmaW5lICBDT05GSUdfRU5WICAiQklPTklDX0ROU0NBQ0hFIgorCisvKiBlbnRyaWVzIG9sZGVyIHRoYW4gQ09ORklHX1NFQ09ORFMgc2Vjb25kcyBhcmUgYWx3YXlzIGRpc2NhcmRlZC4KKyAqLworI2RlZmluZSAgQ09ORklHX1NFQ09ORFMgICAgKDYwKjEwKSAgICAvKiAxMCBtaW51dGVzICovCisKKy8qIGRlZmF1bHQgbnVtYmVyIG9mIGVudHJpZXMga2VwdCBpbiB0aGUgY2FjaGUuIFRoaXMgdmFsdWUgaGFzIGJlZW4KKyAqIGRldGVybWluZWQgYnkgYnJvd3NpbmcgdGhyb3VnaCB2YXJpb3VzIHNpdGVzIGFuZCBjb3VudGluZyB0aGUgbnVtYmVyCisgKiBvZiBjb3JyZXNwb25kaW5nIHJlcXVlc3RzLiBLZWVwIGluIG1pbmQgdGhhdCBvdXIgZnJhbWV3b3JrIGlzIGN1cnJlbnRseQorICogcGVyZm9ybWluZyB0d28gcmVxdWVzdHMgcGVyIG5hbWUgbG9va3VwIChvbmUgZm9yIElQdjQsIHRoZSBvdGhlciBmb3IgSVB2NikKKyAqCisgKiAgICB3d3cuZ29vZ2xlLmNvbSAgICAgIDQKKyAqICAgIHd3dy55c2VhcmNoLmNvbSAgICAgNgorICogICAgd3d3LmFtYXpvbi5jb20gICAgICA4CisgKiAgICB3d3cubnl0aW1lcy5jb20gICAgIDIyCisgKiAgICB3d3cuZXNwbi5jb20gICAgICAgIDI4CisgKiAgICB3d3cubXNuLmNvbSAgICAgICAgIDI4CisgKiAgICB3d3cubGVtb25kZS5mciAgICAgIDM1CisgKgorICogKGRldGVybWluZWQgaW4gMjAwOS0yLTE3IGZyb20gUGFyaXMsIEZyYW5jZSwgcmVzdWx0cyBtYXkgdmFyeSBkZXBlbmRpbmcKKyAqICBvbiBsb2NhdGlvbikKKyAqCisgKiBtb3N0IGhpZ2gtbGV2ZWwgd2Vic2l0ZXMgdXNlIGxvdHMgb2YgbWVkaWEvYWQgc2VydmVycyB3aXRoIGRpZmZlcmVudCBuYW1lcworICogYnV0IHRoZXNlIGFyZSBnZW5lcmFsbHkgcmV1c2VkIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCB0aGUgc2l0ZS4KKyAqCisgKiBBcyBzdWNoLCBhIHZhbHVlIG9mIDY0IHNob3VsZCBiZSByZWxhdGl2ZWx5IGNvbWZvcnRhYmxlIGF0IHRoZSBtb21lbnQuCisgKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqIE5PVEUgLSB0aGlzIGhhcyBjaGFuZ2VkLgorICogKiAxKSB3ZSd2ZSBhZGRlZCBJUHY2IHN1cHBvcnQgc28gZWFjaCBkbnMgcXVlcnkgcmVzdWx0cyBpbiAyIHJlc3BvbnNlcworICogKiAyKSB3ZSd2ZSBtYWRlIHRoaXMgYSBzeXN0ZW0td2lkZSBjYWNoZSwgc28gdGhlIGNvc3QgaXMgbGVzcyAoaXQncyBub3QKKyAqICogICAgZHVwbGljYXRlZCBpbiBlYWNoIHByb2Nlc3MpIGFuZCB0aGUgbmVlZCBpcyBncmVhdGVyIChtb3JlIHByb2Nlc3NlcworICogKiAgICBtYWtpbmcgZGlmZmVyZW50IHJlcXVlc3RzKS4KKyAqICogVXBwaW5nIGJ5IDJ4IGZvciBJUHY2CisgKiAqIFVwcGluZyBieSBhbm90aGVyIDV4IGZvciB0aGUgY2VudHJhbGl6ZWQgbmF0dXJlCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisjZGVmaW5lICBDT05GSUdfTUFYX0VOVFJJRVMgICAgNjQgKiAyICogNQorLyogbmFtZSBvZiB0aGUgc3lzdGVtIHByb3BlcnR5IHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBjYWNoZSBzaXplICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBzZXQgdG8gMSB0byBkZWJ1ZyBjYWNoZSBvcGVyYXRpb25zICovCisjZGVmaW5lICBERUJVRyAgICAgICAwCisKKy8qIHNldCB0byAxIHRvIGRlYnVnIHF1ZXJ5IGRhdGEgKi8KKyNkZWZpbmUgIERFQlVHX0RBVEEgIDAKKworI3VuZGVmIFhMT0cKKyNpZiBERUJVRworIyAgaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKKyMgIGRlZmluZSBYTE9HKC4uLikgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCJsaWJjIixfX1ZBX0FSR1NfXykKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKy8qKiBCT1VOREVEIEJVRkZFUiBGT1JNQVRUSU5HCisgKiovCisKKy8qIHRlY2huaWNhbCBub3RlOgorICoKKyAqICAgdGhlIGZvbGxvd2luZyBkZWJ1Z2dpbmcgcm91dGluZXMgYXJlIHVzZWQgdG8gYXBwZW5kIGRhdGEgdG8gYSBib3VuZGVkCisgKiAgIGJ1ZmZlciB0aGV5IHRha2UgdHdvIHBhcmFtZXRlcnMgdGhhdCBhcmU6CisgKgorICogICAtIHAgOiBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBidWZmZXIKKyAqICAgICAgICAgdGhpcyB2YWx1ZSBpcyBpbml0aWFsbHkgc2V0IHRvIHRoZSBidWZmZXIncyBhZGRyZXNzLgorICoKKyAqICAgLSBlbmQgOiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVmZmVyJ3MgbGltaXQsIGkuZS4gb2YgdGhlIGZpcnN0IGJ5dGUKKyAqICAgICAgICAgICBhZnRlciB0aGUgYnVmZmVyLiB0aGlzIGFkZHJlc3Mgc2hvdWxkIG5ldmVyIGJlIHRvdWNoZWQuCisgKgorICogICAgICAgICAgIElNUE9SVEFOVDogaXQgaXMgYXNzdW1lZCB0aGF0IGVuZCA+IGJ1ZmZlcl9hZGRyZXNzLCBpLmUuCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSBidWZmZXIgaXMgYXQgbGVhc3Qgb25lIGJ5dGUuCisgKgorICogICB0aGUgX2JwcmludF8oKSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBuZXcgdmFsdWUgb2YgJ3AnIGFmdGVyIHRoZSBkYXRhCisgKiAgIGhhcyBiZWVuIGFwcGVuZGVkLCBhbmQgYWxzbyBlbnN1cmUgdGhlIGZvbGxvd2luZzoKKyAqCisgKiAgIC0gdGhlIHJldHVybmVkIHZhbHVlIHdpbGwgbmV2ZXIgYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuICdlbmQnCisgKgorICogICAtIGEgcmV0dXJuIHZhbHVlIGVxdWFsIHRvICdlbmQnIG1lYW5zIHRoYXQgdHJ1bmNhdGlvbiBvY2N1cmVkCisgKiAgICAgKGluIHdoaWNoIGNhc2UsIGVuZFstMV0gd2lsbCBiZSBzZXQgdG8gMCkKKyAqCisgKiAgIC0gYWZ0ZXIgcmV0dXJuaW5nIGZyb20gYSBfYnByaW50XygpIGZ1bmN0aW9uLCB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyCisgKiAgICAgaXMgYWx3YXlzIDAtdGVybWluYXRlZCwgZXZlbiBpbiB0aGUgZXZlbnQgb2YgdHJ1bmNhdGlvbi4KKyAqCisgKiAgdGhlc2UgY29udmVudGlvbnMgYWxsb3cgeW91IHRvIGNhbGwgX2JwcmludF8gZnVuY3Rpb25zIG11bHRpcGxlIHRpbWVzIGFuZAorICogIG9ubHkgY2hlY2sgZm9yIHRydW5jYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UsIGFzIGluOgorICoKKyAqICAgICBjaGFyICBidWZmWzEwMDBdLCAqcCA9IGJ1ZmYsICplbmQgPSBwICsgc2l6ZW9mKGJ1ZmYpOworICoKKyAqICAgICBwID0gX2JwcmludF9jKHAsIGVuZCwgJyInKTsKKyAqICAgICBwID0gX2JwcmludF9zKHAsIGVuZCwgbXlfc3RyaW5nKTsKKyAqICAgICBwID0gX2JwcmludF9jKHAsIGVuZCwgJyInKTsKKyAqCisgKiAgICAgaWYgKHAgPj0gZW5kKSB7CisgKiAgICAgICAgLy8gYnVmZmVyIHdhcyB0b28gc21hbGwKKyAqICAgICB9CisgKgorICogICAgIHByaW50ZiggIiVzIiwgYnVmZiApOworICovCisKKy8qIGFkZCBhIGNoYXIgdG8gYSBib3VuZGVkIGJ1ZmZlciAqLworc3RhdGljIGNoYXIqCitfYnByaW50X2MoIGNoYXIqICBwLCBjaGFyKiAgZW5kLCBpbnQgIGMgKQoreworICAgIGlmIChwIDwgZW5kKSB7CisgICAgICAgIGlmIChwKzEgPT0gZW5kKQorICAgICAgICAgICAgKnArKyA9IDA7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgKnArKyA9IChjaGFyKSBjOworICAgICAgICAgICAgKnAgICA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHA7Cit9CisKKy8qIGFkZCBhIHNlcXVlbmNlIG9mIGJ5dGVzIHRvIGEgYm91bmRlZCBidWZmZXIgKi8KK3N0YXRpYyBjaGFyKgorX2JwcmludF9iKCBjaGFyKiAgcCwgY2hhciogIGVuZCwgY29uc3QgY2hhciogIGJ1ZiwgaW50ICBsZW4gKQoreworICAgIGludCAgYXZhaWwgPSBlbmQgLSBwOworCisgICAgaWYgKGF2YWlsIDw9IDAgfHwgbGVuIDw9IDApCisgICAgICAgIHJldHVybiBwOworCisgICAgaWYgKGF2YWlsID4gbGVuKQorICAgICAgICBhdmFpbCA9IGxlbjsKKworICAgIG1lbWNweSggcCwgYnVmLCBhdmFpbCApOworICAgIHAgKz0gYXZhaWw7CisKKyAgICBpZiAocCA8IGVuZCkKKyAgICAgICAgcFswXSA9IDA7CisgICAgZWxzZQorICAgICAgICBlbmRbLTFdID0gMDsKKworICAgIHJldHVybiBwOworfQorCisvKiBhZGQgYSBzdHJpbmcgdG8gYSBib3VuZGVkIGJ1ZmZlciAqLworc3RhdGljIGNoYXIqCitfYnByaW50X3MoIGNoYXIqICBwLCBjaGFyKiAgZW5kLCBjb25zdCBjaGFyKiAgc3RyICkKK3sKKyAgICByZXR1cm4gX2JwcmludF9iKHAsIGVuZCwgc3RyLCBzdHJsZW4oc3RyKSk7Cit9CisKKy8qIGFkZCBhIGZvcm1hdHRlZCBzdHJpbmcgdG8gYSBib3VuZGVkIGJ1ZmZlciAqLworc3RhdGljIGNoYXIqCitfYnByaW50KCBjaGFyKiAgcCwgY2hhciogIGVuZCwgY29uc3QgY2hhciogIGZvcm1hdCwgLi4uICkKK3sKKyAgICBpbnQgICAgICBhdmFpbCwgbjsKKyAgICB2YV9saXN0ICBhcmdzOworCisgICAgYXZhaWwgPSBlbmQgLSBwOworCisgICAgaWYgKGF2YWlsIDw9IDApCisgICAgICAgIHJldHVybiBwOworCisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICBuID0gdnNucHJpbnRmKCBwLCBhdmFpbCwgZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICAvKiBjZXJ0YWluIEMgbGlicmFyaWVzIHJldHVybiAtMSBpbiBjYXNlIG9mIHRydW5jYXRpb24gKi8KKyAgICBpZiAobiA8IDAgfHwgbiA+IGF2YWlsKQorICAgICAgICBuID0gYXZhaWw7CisKKyAgICBwICs9IG47CisgICAgLyogY2VydGFpbiBDIGxpYnJhcmllcyBkbyBub3QgemVyby10ZXJtaW5hdGUgaW4gY2FzZSBvZiB0cnVuY2F0aW9uICovCisgICAgaWYgKHAgPT0gZW5kKQorICAgICAgICBwWy0xXSA9IDA7CisKKyAgICByZXR1cm4gcDsKK30KKworLyogYWRkIGEgaGV4IHZhbHVlIHRvIGEgYm91bmRlZCBidWZmZXIsIHVwIHRvIDggZGlnaXRzICovCitzdGF0aWMgY2hhcioKK19icHJpbnRfaGV4KCBjaGFyKiAgcCwgY2hhciogIGVuZCwgdW5zaWduZWQgIHZhbHVlLCBpbnQgIG51bURpZ2l0cyApCit7CisgICAgY2hhciAgIHRleHRbc2l6ZW9mKHVuc2lnbmVkKSoyXTsKKyAgICBpbnQgICAgbm4gPSAwOworCisgICAgd2hpbGUgKG51bURpZ2l0cy0tID4gMCkgeworICAgICAgICB0ZXh0W25uKytdID0gIjAxMjM0NTY3ODlhYmNkZWYiWyh2YWx1ZSA+PiAobnVtRGlnaXRzKjQpKSAmIDE1XTsKKyAgICB9CisgICAgcmV0dXJuIF9icHJpbnRfYihwLCBlbmQsIHRleHQsIG5uKTsKK30KKworLyogYWRkIHRoZSBoZXhhZGVjaW1hbCBkdW1wIG9mIHNvbWUgbWVtb3J5IGFyZWEgdG8gYSBib3VuZGVkIGJ1ZmZlciAqLworc3RhdGljIGNoYXIqCitfYnByaW50X2hleGR1bXAoIGNoYXIqICBwLCBjaGFyKiAgZW5kLCBjb25zdCB1aW50OF90KiAgZGF0YSwgaW50ICBkYXRhbGVuICkKK3sKKyAgICBpbnQgICBsaW5lU2l6ZSA9IDE2OworCisgICAgd2hpbGUgKGRhdGFsZW4gPiAwKSB7CisgICAgICAgIGludCAgYXZhaWwgPSBkYXRhbGVuOworICAgICAgICBpbnQgIG5uOworCisgICAgICAgIGlmIChhdmFpbCA+IGxpbmVTaXplKQorICAgICAgICAgICAgYXZhaWwgPSBsaW5lU2l6ZTsKKworICAgICAgICBmb3IgKG5uID0gMDsgbm4gPCBhdmFpbDsgbm4rKykgeworICAgICAgICAgICAgaWYgKG5uID4gMCkKKyAgICAgICAgICAgICAgICBwID0gX2JwcmludF9jKHAsIGVuZCwgJyAnKTsKKyAgICAgICAgICAgIHAgPSBfYnByaW50X2hleChwLCBlbmQsIGRhdGFbbm5dLCAyKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKCA7IG5uIDwgbGluZVNpemU7IG5uKysgKSB7CisgICAgICAgICAgICBwID0gX2JwcmludF9zKHAsIGVuZCwgIiAgICIpOworICAgICAgICB9CisgICAgICAgIHAgPSBfYnByaW50X3MocCwgZW5kLCAiICAiKTsKKworICAgICAgICBmb3IgKG5uID0gMDsgbm4gPCBhdmFpbDsgbm4rKykgeworICAgICAgICAgICAgaW50ICBjID0gZGF0YVtubl07CisKKyAgICAgICAgICAgIGlmIChjIDwgMzIgfHwgYyA+IDEyNykKKyAgICAgICAgICAgICAgICBjID0gJy4nOworCisgICAgICAgICAgICBwID0gX2JwcmludF9jKHAsIGVuZCwgYyk7CisgICAgICAgIH0KKyAgICAgICAgcCA9IF9icHJpbnRfYyhwLCBlbmQsICdcbicpOworCisgICAgICAgIGRhdGEgICAgKz0gYXZhaWw7CisgICAgICAgIGRhdGFsZW4gLT0gYXZhaWw7CisgICAgfQorICAgIHJldHVybiBwOworfQorCisvKiBkdW1wIHRoZSBjb250ZW50IG9mIGEgcXVlcnkgb2YgcGFja2V0IHRvIHRoZSBsb2cgKi8KK3N0YXRpYyB2b2lkCitYTE9HX0JZVEVTKCBjb25zdCB2b2lkKiAgYmFzZSwgaW50ICBsZW4gKQoreworICAgIGNoYXIgIGJ1ZmZbMTAyNF07CisgICAgY2hhciogIHAgPSBidWZmLCAqZW5kID0gcCArIHNpemVvZihidWZmKTsKKworICAgIHAgPSBfYnByaW50X2hleGR1bXAocCwgZW5kLCBiYXNlLCBsZW4pOworICAgIFhMT0coIiVzIixidWZmKTsKK30KKworI2Vsc2UgLyogIURFQlVHICovCisjICBkZWZpbmUgIFhMT0coLi4uKSAgICAgICAgKCh2b2lkKTApCisjICBkZWZpbmUgIFhMT0dfQllURVMoYSxiKSAgKCh2b2lkKTApCisjZW5kaWYKKworc3RhdGljIHRpbWVfdAorX3RpbWVfbm93KCB2b2lkICkKK3sKKyAgICBzdHJ1Y3QgdGltZXZhbCAgdHY7CisKKyAgICBnZXR0aW1lb2ZkYXkoICZ0diwgTlVMTCApOworICAgIHJldHVybiB0di50dl9zZWM7Cit9CisKKy8qIHJlbWluZGVyOiB0aGUgZ2VuZXJhbCBmb3JtYXQgb2YgYSBETlMgcGFja2V0IGlzIHRoZSBmb2xsb3dpbmc6CisgKgorICogICAgSEVBREVSICAoMTIgYnl0ZXMpCisgKiAgICBRVUVTVElPTiAgKHZhcmlhYmxlKQorICogICAgQU5TV0VSICh2YXJpYWJsZSkKKyAqICAgIEFVVEhPUklUWSAodmFyaWFibGUpCisgKiAgICBBRERJVElPTk5BTCAodmFyaWFibGUpCisgKgorICogdGhlIEhFQURFUiBpcyBtYWRlIG9mOgorICoKKyAqICAgSUQgICAgIDogMTYgOiAxNi1iaXQgdW5pcXVlIHF1ZXJ5IGlkZW50aWZpY2F0aW9uIGZpZWxkCisgKgorICogICBRUiAgICAgOiAgMSA6IHNldCB0byAwIGZvciBxdWVyaWVzLCBhbmQgMSBmb3IgcmVzcG9uc2VzCisgKiAgIE9wY29kZSA6ICA0IDogc2V0IHRvIDAgZm9yIHF1ZXJpZXMKKyAqICAgQUEgICAgIDogIDEgOiBzZXQgdG8gMCBmb3IgcXVlcmllcworICogICBUQyAgICAgOiAgMSA6IHRydW5jYXRpb24gZmxhZywgd2lsbCBiZSBzZXQgdG8gMCBpbiBxdWVyaWVzCisgKiAgIFJEICAgICA6ICAxIDogcmVjdXJzaW9uIGRlc2lyZWQKKyAqCisgKiAgIFJBICAgICA6ICAxIDogcmVjdXJzaW9uIGF2YWlsYWJsZSAoMCBpbiBxdWVyaWVzKQorICogICBaICAgICAgOiAgMyA6IHRocmVlIHJlc2VydmVkIHplcm8gYml0cworICogICBSQ09ERSAgOiAgNCA6IHJlc3BvbnNlIGNvZGUgKGFsd2F5cyAwPU5PRVJST1IgaW4gcXVlcmllcykKKyAqCisgKiAgIFFEQ291bnQ6IDE2IDogcXVlc3Rpb24gY291bnQKKyAqICAgQU5Db3VudDogMTYgOiBBbnN3ZXIgY291bnQgKDAgaW4gcXVlcmllcykKKyAqICAgTlNDb3VudDogMTY6IEF1dGhvcml0eSBSZWNvcmQgY291bnQgKDAgaW4gcXVlcmllcykKKyAqICAgQVJDb3VudDogMTY6IEFkZGl0aW9ubmFsIFJlY29yZCBjb3VudCAoMCBpbiBxdWVyaWVzKQorICoKKyAqIHRoZSBRVUVTVElPTiBpcyBtYWRlIG9mIFFEQ291bnQgUXVlc3Rpb24gUmVjb3JkIChRUnMpCisgKiB0aGUgQU5TV0VSIGlzIG1hZGUgb2YgQU5Db3VudCBSUnMKKyAqIHRoZSBBVVRIT1JJVFkgaXMgbWFkZSBvZiBOU0NvdW50IFJScworICogdGhlIEFERElUSU9OTkFMIGlzIG1hZGUgb2YgQVJDb3VudCBSUnMKKyAqCisgKiBFYWNoIFF1ZXN0aW9uIFJlY29yZCAoUVIpIGlzIG1hZGUgb2Y6CisgKgorICogICBRTkFNRSAgIDogdmFyaWFibGUgOiBRdWVyeSBETlMgTkFNRQorICogICBUWVBFICAgIDogMTYgICAgICAgOiB0eXBlIG9mIHF1ZXJ5IChBPTEsIFBUUj0xMiwgTVg9MTUsIEFBQUE9MjgsIEFMTD0yNTUpCisgKiAgIENMQVNTICAgOiAxNiAgICAgICA6IGNsYXNzIG9mIHF1ZXJ5IChJTj0xKQorICoKKyAqIEVhY2ggUmVzb3VyY2UgUmVjb3JkIChSUikgaXMgbWFkZSBvZjoKKyAqCisgKiAgIE5BTUUgICAgOiB2YXJpYWJsZSA6IEROUyBOQU1FCisgKiAgIFRZUEUgICAgOiAxNiAgICAgICA6IHR5cGUgb2YgcXVlcnkgKEE9MSwgUFRSPTEyLCBNWD0xNSwgQUFBQT0yOCwgQUxMPTI1NSkKKyAqICAgQ0xBU1MgICA6IDE2ICAgICAgIDogY2xhc3Mgb2YgcXVlcnkgKElOPTEpCisgKiAgIFRUTCAgICAgOiAzMiAgICAgICA6IHNlY29uZHMgdG8gY2FjaGUgdGhpcyBSUiAoMD1ub25lKQorICogICBSRExFTkdUSDogMTYgICAgICAgOiBzaXplIG9mIFJEREFUQSBpbiBieXRlcworICogICBSRERBVEEgIDogdmFyaWFibGUgOiBSUiBkYXRhIChkZXBlbmRzIG9uIFRZUEUpCisgKgorICogRWFjaCBRTkFNRSBjb250YWlucyBhIGRvbWFpbiBuYW1lIGVuY29kZWQgYXMgYSBzZXF1ZW5jZSBvZiAnbGFiZWxzJworICogdGVybWluYXRlZCBieSBhIHplcm8uIEVhY2ggbGFiZWwgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICoKKyAqICAgIExFTiAgOiA4ICAgICA6IGxlbmdodCBvZiBsYWJlbCAoTVVTVCBiZSA8IDY0KQorICogICAgTkFNRSA6IDgqTEVOIDogbGFiZWwgbGVuZ3RoIChtdXN0IGV4Y2x1ZGUgZG90cykKKyAqCisgKiBBIHZhbHVlIG9mIDAgaW4gdGhlIGVuY29kaW5nIGlzIGludGVycHJldGVkIGFzIHRoZSAncm9vdCcgZG9tYWluIGFuZAorICogdGVybWluYXRlcyB0aGUgZW5jb2RpbmcuIFNvICd3d3cuYW5kcm9pZC5jb20nIHdpbGwgYmUgZW5jb2RlZCBhczoKKyAqCisgKiAgIDwzPnd3dzw3PmFuZHJvaWQ8Mz5jb208MD4KKyAqCisgKiBXaGVyZSA8bj4gcmVwcmVzZW50cyB0aGUgYnl0ZSB3aXRoIHZhbHVlICduJworICoKKyAqIEVhY2ggTkFNRSByZWZsZWN0cyB0aGUgUU5BTUUgb2YgdGhlIHF1ZXN0aW9uLCBidXQgaGFzIGEgc2xpZ2h0bHkgbW9yZQorICogY29tcGxleCBlbmNvZGluZyBpbiBvcmRlciB0byBwcm92aWRlIG1lc3NhZ2UgY29tcHJlc3Npb24uIFRoaXMgaXMgYWNoaWV2ZWQKKyAqIGJ5IHVzaW5nIGEgMi1ieXRlIHBvaW50ZXIsIHdpdGggZm9ybWF0OgorICoKKyAqICAgIFRZUEUgICA6IDIgIDogMGIxMSB0byBpbmRpY2F0ZSBhIHBvaW50ZXIsIDBiMDEgYW5kIDBiMTAgYXJlIHJlc2VydmVkCisgKiAgICBPRkZTRVQgOiAxNCA6IG9mZnNldCB0byBhbm90aGVyIHBhcnQgb2YgdGhlIEROUyBwYWNrZXQKKyAqCisgKiBUaGUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgRE5TIHBhY2tldCBhbmQgbXVzdCBwb2ludAorICogQSBwb2ludGVyIHRlcm1pbmF0ZXMgdGhlIGVuY29kaW5nLgorICoKKyAqIFRoZSBOQU1FIGNhbiBiZSBlbmNvZGVkIGluIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6CisgKgorICogICAtIGEgc2VxdWVuY2Ugb2Ygc2ltcGxlIGxhYmVscyB0ZXJtaW5hdGVkIGJ5IDAgKGxpa2UgUU5BTUVzKQorICogICAtIGEgc2luZ2xlIHBvaW50ZXIKKyAqICAgLSBhIHNlcXVlbmNlIG9mIHNpbXBsZSBsYWJlbHMgdGVybWluYXRlZCBieSBhIHBvaW50ZXIKKyAqCisgKiBBIHBvaW50ZXIgc2hhbGwgYWx3YXlzIHBvaW50IHRvIGVpdGhlciBhIHBvaW50ZXIgb2YgYSBzZXF1ZW5jZSBvZgorICogbGFiZWxzICh3aGljaCBjYW4gdGhlbXNlbHZlcyBiZSB0ZXJtaW5hdGVkIGJ5IGVpdGhlciBhIDAgb3IgYSBwb2ludGVyKQorICoKKyAqIFRoZSBleHBhbmRlZCBsZW5ndGggb2YgYSBnaXZlbiBkb21haW4gbmFtZSBzaG91bGQgbm90IGV4Y2VlZCAyNTUgYnl0ZXMuCisgKgorICogTk9URTogd2UgZG9uJ3QgcGFyc2UgdGhlIGFuc3dlciBwYWNrZXRzLCBzbyBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBOQU1FCisgKiAgICAgICByZWNvcmRzLCBvbmx5IFFOQU1Fcy4KKyAqLworCisjZGVmaW5lICBETlNfSEVBREVSX1NJWkUgIDEyCisKKyNkZWZpbmUgIEROU19UWVBFX0EgICAiXDAwXDAxIiAgIC8qIGJpZy1lbmRpYW4gZGVjaW1hbCAxICovCisjZGVmaW5lICBETlNfVFlQRV9QVFIgIlwwMFwwMTQiICAvKiBiaWctZW5kaWFuIGRlY2ltYWwgMTIgKi8KKyNkZWZpbmUgIEROU19UWVBFX01YICAiXDAwXDAxNyIgIC8qIGJpZy1lbmRpYW4gZGVjaW1hbCAxNSAqLworI2RlZmluZSAgRE5TX1RZUEVfQUFBQSAiXDAwXDAzNCIgLyogYmlnLWVuZGlhbiBkZWNpbWFsIDI4ICovCisjZGVmaW5lICBETlNfVFlQRV9BTEwgIlwwMFwwMzc3IiAvKiBiaWctZW5kaWFuIGRlY2ltYWwgMjU1ICovCisKKyNkZWZpbmUgIEROU19DTEFTU19JTiAiXDAwXDAxIiAgIC8qIGJpZy1lbmRpYW4gZGVjaW1hbCAxICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCB1aW50OF90KiAgYmFzZTsKKyAgICBjb25zdCB1aW50OF90KiAgZW5kOworICAgIGNvbnN0IHVpbnQ4X3QqICBjdXJzb3I7Cit9IERuc1BhY2tldDsKKworc3RhdGljIHZvaWQKK19kbnNQYWNrZXRfaW5pdCggRG5zUGFja2V0KiAgcGFja2V0LCBjb25zdCB1aW50OF90KiAgYnVmZiwgaW50ICBidWZmbGVuICkKK3sKKyAgICBwYWNrZXQtPmJhc2UgICA9IGJ1ZmY7CisgICAgcGFja2V0LT5lbmQgICAgPSBidWZmICsgYnVmZmxlbjsKKyAgICBwYWNrZXQtPmN1cnNvciA9IGJ1ZmY7Cit9CisKK3N0YXRpYyB2b2lkCitfZG5zUGFja2V0X3Jld2luZCggRG5zUGFja2V0KiAgcGFja2V0ICkKK3sKKyAgICBwYWNrZXQtPmN1cnNvciA9IHBhY2tldC0+YmFzZTsKK30KKworc3RhdGljIHZvaWQKK19kbnNQYWNrZXRfc2tpcCggRG5zUGFja2V0KiAgcGFja2V0LCBpbnQgIGNvdW50ICkKK3sKKyAgICBjb25zdCB1aW50OF90KiAgcCA9IHBhY2tldC0+Y3Vyc29yICsgY291bnQ7CisKKyAgICBpZiAocCA+IHBhY2tldC0+ZW5kKQorICAgICAgICBwID0gcGFja2V0LT5lbmQ7CisKKyAgICBwYWNrZXQtPmN1cnNvciA9IHA7Cit9CisKK3N0YXRpYyBpbnQKK19kbnNQYWNrZXRfcmVhZEludDE2KCBEbnNQYWNrZXQqICBwYWNrZXQgKQoreworICAgIGNvbnN0IHVpbnQ4X3QqICBwID0gcGFja2V0LT5jdXJzb3I7CisKKyAgICBpZiAocCsyID4gcGFja2V0LT5lbmQpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHBhY2tldC0+Y3Vyc29yID0gcCsyOworICAgIHJldHVybiAocFswXTw8IDgpIHwgcFsxXTsKK30KKworLyoqIFFVRVJZIENIRUNLSU5HCisgKiovCisKKy8qIGNoZWNrIGJ5dGVzIGluIGEgZG5zIHBhY2tldC4gcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZS4KKyAqIHRoZSBjdXJzb3IgaXMgb25seSBhZHZhbmNlZCBpbiB0aGUgY2FzZSBvZiBzdWNjZXNzCisgKi8KK3N0YXRpYyBpbnQKK19kbnNQYWNrZXRfY2hlY2tCeXRlcyggRG5zUGFja2V0KiAgcGFja2V0LCBpbnQgIG51bUJ5dGVzLCBjb25zdCB2b2lkKiAgYnl0ZXMgKQoreworICAgIGNvbnN0IHVpbnQ4X3QqICBwID0gcGFja2V0LT5jdXJzb3I7CisKKyAgICBpZiAocCArIG51bUJ5dGVzID4gcGFja2V0LT5lbmQpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG1lbWNtcChwLCBieXRlcywgbnVtQnl0ZXMpICE9IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgcGFja2V0LT5jdXJzb3IgPSBwICsgbnVtQnl0ZXM7CisgICAgcmV0dXJuIDE7Cit9CisKKy8qIHBhcnNlIGFuZCBza2lwIGEgZ2l2ZW4gUU5BTUUgc3RvcmVkIGluIGEgcXVlcnkgcGFja2V0LAorICogZnJvbSB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uIHJldHVybnMgMSBvbiBzdWNjZXNzLAorICogb3IgMCBmb3IgbWFsZm9ybWVkIGRhdGEuCisgKi8KK3N0YXRpYyBpbnQKK19kbnNQYWNrZXRfY2hlY2tRTmFtZSggRG5zUGFja2V0KiAgcGFja2V0ICkKK3sKKyAgICBjb25zdCB1aW50OF90KiAgcCAgID0gcGFja2V0LT5jdXJzb3I7CisgICAgY29uc3QgdWludDhfdCogIGVuZCA9IHBhY2tldC0+ZW5kOworCisgICAgZm9yICg7OykgeworICAgICAgICBpbnQgIGM7CisKKyAgICAgICAgaWYgKHAgPj0gZW5kKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYyA9ICpwKys7CisKKyAgICAgICAgaWYgKGMgPT0gMCkgeworICAgICAgICAgICAgcGFja2V0LT5jdXJzb3IgPSBwOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICAvKiB3ZSBkb24ndCBleHBlY3QgbGFiZWwgY29tcHJlc3Npb24gaW4gUU5BTUVzICovCisgICAgICAgIGlmIChjID49IDY0KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcCArPSBjOworICAgICAgICAvKiB3ZSByZWx5IG9uIHRoZSBib3VuZCBjaGVjayBhdCB0aGUgc3RhcnQKKyAgICAgICAgICogb2YgdGhlIGxvb3AgaGVyZSAqLworICAgIH0KKyAgICAvKiBtYWxmb3JtZWQgZGF0YSAqLworICAgIFhMT0coIm1hbGZvcm1lZCBRTkFNRSIpOworICAgIHJldHVybiAwOworfQorCisvKiBwYXJzZSBhbmQgc2tpcCBhIGdpdmVuIFFSIHN0b3JlZCBpbiBhIHBhY2tldC4KKyAqIHJldHVybnMgMSBvbiBzdWNjZXNzLCBhbmQgMCBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQKK19kbnNQYWNrZXRfY2hlY2tRUiggRG5zUGFja2V0KiAgcGFja2V0ICkKK3sKKyAgICBpZiAoIV9kbnNQYWNrZXRfY2hlY2tRTmFtZShwYWNrZXQpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIFRZUEUgbXVzdCBiZSBvbmUgb2YgdGhlIHRoaW5ncyB3ZSBzdXBwb3J0ICovCisgICAgaWYgKCFfZG5zUGFja2V0X2NoZWNrQnl0ZXMocGFja2V0LCAyLCBETlNfVFlQRV9BKSAmJgorICAgICAgICAhX2Ruc1BhY2tldF9jaGVja0J5dGVzKHBhY2tldCwgMiwgRE5TX1RZUEVfUFRSKSAmJgorICAgICAgICAhX2Ruc1BhY2tldF9jaGVja0J5dGVzKHBhY2tldCwgMiwgRE5TX1RZUEVfTVgpICYmCisgICAgICAgICFfZG5zUGFja2V0X2NoZWNrQnl0ZXMocGFja2V0LCAyLCBETlNfVFlQRV9BQUFBKSAmJgorICAgICAgICAhX2Ruc1BhY2tldF9jaGVja0J5dGVzKHBhY2tldCwgMiwgRE5TX1RZUEVfQUxMKSkKKyAgICB7CisgICAgICAgIFhMT0coInVuc3VwcG9ydGVkIFRZUEUiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIC8qIENMQVNTIG11c3QgYmUgSU4gKi8KKyAgICBpZiAoIV9kbnNQYWNrZXRfY2hlY2tCeXRlcyhwYWNrZXQsIDIsIEROU19DTEFTU19JTikpIHsKKyAgICAgICAgWExPRygidW5zdXBwb3J0ZWQgQ0xBU1MiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKKy8qIGNoZWNrIHRoZSBoZWFkZXIgb2YgYSBETlMgUXVlcnkgcGFja2V0LCByZXR1cm4gMSBpZiBpdCBpcyBvbmUKKyAqIHR5cGUgb2YgcXVlcnkgd2UgY2FuIGNhY2hlLCBvciAwIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50CitfZG5zUGFja2V0X2NoZWNrUXVlcnkoIERuc1BhY2tldCogIHBhY2tldCApCit7CisgICAgY29uc3QgdWludDhfdCogIHAgPSBwYWNrZXQtPmJhc2U7CisgICAgaW50ICAgICAgICAgICAgIHFkQ291bnQsIGFuQ291bnQsIGRuQ291bnQsIGFyQ291bnQ7CisKKyAgICBpZiAocCArIEROU19IRUFERVJfU0laRSA+IHBhY2tldC0+ZW5kKSB7CisgICAgICAgIFhMT0coInF1ZXJ5IHBhY2tldCB0b28gc21hbGwiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogUVIgbXVzdCBiZSBzZXQgdG8gMCwgb3Bjb2RlIG11c3QgYmUgMCBhbmQgQUEgbXVzdCBiZSAwICovCisgICAgLyogUkEsIFosIGFuZCBSQ09ERSBtdXN0IGJlIDAgKi8KKyAgICBpZiAoKHBbMl0gJiAweEZDKSAhPSAwIHx8IHBbM10gIT0gMCkgeworICAgICAgICBYTE9HKCJxdWVyeSBwYWNrZXQgZmxhZ3MgdW5zdXBwb3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogTm90ZSB0aGF0IHdlIGlnbm9yZSB0aGUgVEMgYW5kIFJEIGJpdHMgaGVyZSBmb3IgdGhlCisgICAgICogZm9sbG93aW5nIHJlYXNvbnM6CisgICAgICoKKyAgICAgKiAtIHRoZXJlIGlzIG5vIHBvaW50IGZvciBhIHF1ZXJ5IHBhY2tldCBzZW50IHRvIGEgc2VydmVyCisgICAgICogICB0byBoYXZlIHRoZSBUQyBiaXQgc2V0LCBidXQgdGhlIGltcGxlbWVudGF0aW9uIG1pZ2h0CisgICAgICogICBzZXQgdGhlIGJpdCBpbiB0aGUgcXVlcnkgYnVmZmVyIGZvciBpdHMgb3duIG5lZWRzCisgICAgICogICBiZXR3ZWVuIGEgX3Jlc29sdl9jYWNoZV9sb29rdXAgYW5kIGEKKyAgICAgKiAgIF9yZXNvbHZfY2FjaGVfYWRkLiBXZSBzaG91bGQgbm90IGZyZWFrIG91dCBpZiB0aGlzCisgICAgICogICBpcyB0aGUgY2FzZS4KKyAgICAgKgorICAgICAqIC0gd2UgY29uc2lkZXIgdGhhdCB0aGUgcmVzdWx0IGZyb20gYSBSRD0wIG9yIGEgUkQ9MQorICAgICAqICAgcXVlcnkgbWlnaHQgYmUgZGlmZmVyZW50LCBoZW5jZSB0aGF0IHRoZSBSRCBiaXQKKyAgICAgKiAgIHNob3VsZCBiZSB1c2VkIHRvIGRpZmZlcmVudGlhdGUgY2FjaGVkIHJlc3VsdC4KKyAgICAgKgorICAgICAqICAgdGhpcyBpbXBsaWVzIHRoYXQgUkQgaXMgY2hlY2tlZCB3aGVuIGhhc2hpbmcgb3IKKyAgICAgKiAgIGNvbXBhcmluZyBxdWVyeSBwYWNrZXRzLCBidXQgbm90IFRDCisgICAgICovCisKKyAgICAvKiBBTkNPVU5ULCBETkNPVU5UIGFuZCBBUkNPVU5UIG11c3QgYmUgMCAqLworICAgIHFkQ291bnQgPSAocFs0XSA8PCA4KSB8IHBbNV07CisgICAgYW5Db3VudCA9IChwWzZdIDw8IDgpIHwgcFs3XTsKKyAgICBkbkNvdW50ID0gKHBbOF0gPDwgOCkgfCBwWzldOworICAgIGFyQ291bnQgPSAocFsxMF08PCA4KSB8IHBbMTFdOworCisgICAgaWYgKGFuQ291bnQgIT0gMCB8fCBkbkNvdW50ICE9IDAgfHwgYXJDb3VudCAhPSAwKSB7CisgICAgICAgIFhMT0coInF1ZXJ5IHBhY2tldCBjb250YWlucyBub24tcXVlcnkgcmVjb3JkcyIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAocWRDb3VudCA9PSAwKSB7CisgICAgICAgIFhMT0coInF1ZXJ5IHBhY2tldCBkb2Vzbid0IGNvbnRhaW4gcXVlcnkgcmVjb3JkIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIENoZWNrIFFEQ09VTlQgUVJzICovCisgICAgcGFja2V0LT5jdXJzb3IgPSBwICsgRE5TX0hFQURFUl9TSVpFOworCisgICAgZm9yICg7cWRDb3VudCA+IDA7IHFkQ291bnQtLSkKKyAgICAgICAgaWYgKCFfZG5zUGFja2V0X2NoZWNrUVIocGFja2V0KSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIDE7Cit9CisKKy8qKiBRVUVSWSBERUJVR0dJTkcKKyAqKi8KKyNpZiBERUJVRworc3RhdGljIGNoYXIqCitfZG5zUGFja2V0X2JwcmludFFOYW1lKERuc1BhY2tldCogIHBhY2tldCwgY2hhciogIGJwLCBjaGFyKiAgYmVuZCkKK3sKKyAgICBjb25zdCB1aW50OF90KiAgcCAgID0gcGFja2V0LT5jdXJzb3I7CisgICAgY29uc3QgdWludDhfdCogIGVuZCA9IHBhY2tldC0+ZW5kOworICAgIGludCAgICAgICAgICAgICBmaXJzdCA9IDE7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGludCAgYzsKKworICAgICAgICBpZiAocCA+PSBlbmQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjID0gKnArKzsKKworICAgICAgICBpZiAoYyA9PSAwKSB7CisgICAgICAgICAgICBwYWNrZXQtPmN1cnNvciA9IHA7CisgICAgICAgICAgICByZXR1cm4gYnA7CisgICAgICAgIH0KKworICAgICAgICAvKiB3ZSBkb24ndCBleHBlY3QgbGFiZWwgY29tcHJlc3Npb24gaW4gUU5BTUVzICovCisgICAgICAgIGlmIChjID49IDY0KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGZpcnN0KQorICAgICAgICAgICAgZmlyc3QgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBicCA9IF9icHJpbnRfYyhicCwgYmVuZCwgJy4nKTsKKworICAgICAgICBicCA9IF9icHJpbnRfYihicCwgYmVuZCwgKGNvbnN0IGNoYXIqKXAsIGMpOworCisgICAgICAgIHAgKz0gYzsKKyAgICAgICAgLyogd2UgcmVseSBvbiB0aGUgYm91bmQgY2hlY2sgYXQgdGhlIHN0YXJ0CisgICAgICAgICAqIG9mIHRoZSBsb29wIGhlcmUgKi8KKyAgICB9CisgICAgLyogbWFsZm9ybWVkIGRhdGEgKi8KKyAgICBicCA9IF9icHJpbnRfcyhicCwgYmVuZCwgIjxNQUxGT1JNRUQ+Iik7CisgICAgcmV0dXJuIGJwOworfQorCitzdGF0aWMgY2hhcioKK19kbnNQYWNrZXRfYnByaW50UVIoRG5zUGFja2V0KiAgcGFja2V0LCBjaGFyKiAgcCwgY2hhciogIGVuZCkKK3sKKyNkZWZpbmUgIFFRKHgpICAgeyBETlNfVFlQRV8jI3gsICN4IH0KKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICAgY29uc3QgY2hhciogIHR5cGVCeXRlczsKKyAgICAgICAgY29uc3QgY2hhciogIHR5cGVTdHJpbmc7CisgICAgfSBxVHlwZXNbXSA9CisgICAgeworICAgICAgICBRUShBKSwgUVEoUFRSKSwgUVEoTVgpLCBRUShBQUFBKSwgUVEoQUxMKSwKKyAgICAgICAgeyBOVUxMLCBOVUxMIH0KKyAgICB9OworICAgIGludCAgICAgICAgICBubjsKKyAgICBjb25zdCBjaGFyKiAgdHlwZVN0cmluZyA9IE5VTEw7CisKKyAgICAvKiBkdW1wIFFOQU1FICovCisgICAgcCA9IF9kbnNQYWNrZXRfYnByaW50UU5hbWUocGFja2V0LCBwLCBlbmQpOworCisgICAgLyogZHVtcCBUWVBFICovCisgICAgcCA9IF9icHJpbnRfcyhwLCBlbmQsICIgKCIpOworCisgICAgZm9yIChubiA9IDA7IHFUeXBlc1tubl0udHlwZUJ5dGVzICE9IE5VTEw7IG5uKyspIHsKKyAgICAgICAgaWYgKF9kbnNQYWNrZXRfY2hlY2tCeXRlcyhwYWNrZXQsIDIsIHFUeXBlc1tubl0udHlwZUJ5dGVzKSkgeworICAgICAgICAgICAgdHlwZVN0cmluZyA9IHFUeXBlc1tubl0udHlwZVN0cmluZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHR5cGVTdHJpbmcgIT0gTlVMTCkKKyAgICAgICAgcCA9IF9icHJpbnRfcyhwLCBlbmQsIHR5cGVTdHJpbmcpOworICAgIGVsc2UgeworICAgICAgICBpbnQgIHR5cGVDb2RlID0gX2Ruc1BhY2tldF9yZWFkSW50MTYocGFja2V0KTsKKyAgICAgICAgcCA9IF9icHJpbnQocCwgZW5kLCAiVU5LTk9XTi0lZCIsIHR5cGVDb2RlKTsKKyAgICB9CisKKyAgICBwID0gX2JwcmludF9jKHAsIGVuZCwgJyknKTsKKworICAgIC8qIHNraXAgQ0xBU1MgKi8KKyAgICBfZG5zUGFja2V0X3NraXAocGFja2V0LCAyKTsKKyAgICByZXR1cm4gcDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoZSBwYWNrZXQgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkICovCitzdGF0aWMgY2hhcioKK19kbnNQYWNrZXRfYnByaW50UXVlcnkoIERuc1BhY2tldCogIHBhY2tldCwgY2hhciogIHAsIGNoYXIqICBlbmQgKQoreworICAgIGludCAgIHFkQ291bnQ7CisKKyAgICBpZiAocGFja2V0LT5iYXNlWzJdICYgMHgxKSB7CisgICAgICAgIHAgPSBfYnByaW50X3MocCwgZW5kLCAiUkVDVVJTSVZFICIpOworICAgIH0KKworICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrZXQsIDQpOworICAgIHFkQ291bnQgPSBfZG5zUGFja2V0X3JlYWRJbnQxNihwYWNrZXQpOworICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrZXQsIDYpOworCisgICAgZm9yICggOyBxZENvdW50ID4gMDsgcWRDb3VudC0tICkgeworICAgICAgICBwID0gX2Ruc1BhY2tldF9icHJpbnRRUihwYWNrZXQsIHAsIGVuZCk7CisgICAgfQorICAgIHJldHVybiBwOworfQorI2VuZGlmCisKKworLyoqIFFVRVJZIEhBU0hJTkcgU1VQUE9SVAorICoqCisgKiogVEhFIEZPTExPV0lORyBDT0RFIEFTU1VNRVMgVEhBVCBUSEUgSU5QVVQgUEFDS0VUIEhBUyBBTFJFQURZCisgKiogQkVFTiBTVUNDRVNGVUxMWSBDSEVDS0VELgorICoqLworCisvKiB1c2UgMzItYml0IEZOViBoYXNoIGZ1bmN0aW9uICovCisjZGVmaW5lICBGTlZfTVVMVCAgIDE2Nzc3NjE5VQorI2RlZmluZSAgRk5WX0JBU0lTICAyMTY2MTM2MjYxVQorCitzdGF0aWMgdW5zaWduZWQKK19kbnNQYWNrZXRfaGFzaEJ5dGVzKCBEbnNQYWNrZXQqICBwYWNrZXQsIGludCAgbnVtQnl0ZXMsIHVuc2lnbmVkICBoYXNoICkKK3sKKyAgICBjb25zdCB1aW50OF90KiAgcCAgID0gcGFja2V0LT5jdXJzb3I7CisgICAgY29uc3QgdWludDhfdCogIGVuZCA9IHBhY2tldC0+ZW5kOworCisgICAgd2hpbGUgKG51bUJ5dGVzID4gMCAmJiBwIDwgZW5kKSB7CisgICAgICAgIGhhc2ggPSBoYXNoKkZOVl9NVUxUIF4gKnArKzsKKyAgICB9CisgICAgcGFja2V0LT5jdXJzb3IgPSBwOworICAgIHJldHVybiBoYXNoOworfQorCisKK3N0YXRpYyB1bnNpZ25lZAorX2Ruc1BhY2tldF9oYXNoUU5hbWUoIERuc1BhY2tldCogIHBhY2tldCwgdW5zaWduZWQgIGhhc2ggKQoreworICAgIGNvbnN0IHVpbnQ4X3QqICBwICAgPSBwYWNrZXQtPmN1cnNvcjsKKyAgICBjb25zdCB1aW50OF90KiAgZW5kID0gcGFja2V0LT5lbmQ7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGludCAgYzsKKworICAgICAgICBpZiAocCA+PSBlbmQpIHsgIC8qIHNob3VsZCBub3QgaGFwcGVuICovCisgICAgICAgICAgICBYTE9HKCIlczogSU5URVJOQUxfRVJST1I6IHJlYWQtb3ZlcmZsb3cgISFcbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGMgPSAqcCsrOworCisgICAgICAgIGlmIChjID09IDApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoYyA+PSA2NCkgeworICAgICAgICAgICAgWExPRygiJXM6IElOVEVSTkFMX0VSUk9SOiBtYWxmb3JtZWQgZG9tYWluICEhXG4iLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHAgKyBjID49IGVuZCkgeworICAgICAgICAgICAgWExPRygiJXM6IElOVEVSTkFMX0VSUk9SOiBzaW1wbGUgbGFiZWwgcmVhZC1vdmVyZmxvdyAhIVxuIiwKKyAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChjID4gMCkgeworICAgICAgICAgICAgaGFzaCA9IGhhc2gqRk5WX01VTFQgXiAqcCsrOworICAgICAgICAgICAgYyAgIC09IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgcGFja2V0LT5jdXJzb3IgPSBwOworICAgIHJldHVybiBoYXNoOworfQorCitzdGF0aWMgdW5zaWduZWQKK19kbnNQYWNrZXRfaGFzaFFSKCBEbnNQYWNrZXQqICBwYWNrZXQsIHVuc2lnbmVkICBoYXNoICkKK3sKKyAgICBoYXNoID0gX2Ruc1BhY2tldF9oYXNoUU5hbWUocGFja2V0LCBoYXNoKTsKKyAgICBoYXNoID0gX2Ruc1BhY2tldF9oYXNoQnl0ZXMocGFja2V0LCA0LCBoYXNoKTsgLyogVFlQRSBhbmQgQ0xBU1MgKi8KKyAgICByZXR1cm4gaGFzaDsKK30KKworc3RhdGljIHVuc2lnbmVkCitfZG5zUGFja2V0X2hhc2hRdWVyeSggRG5zUGFja2V0KiAgcGFja2V0ICkKK3sKKyAgICB1bnNpZ25lZCAgaGFzaCA9IEZOVl9CQVNJUzsKKyAgICBpbnQgICAgICAgY291bnQ7CisgICAgX2Ruc1BhY2tldF9yZXdpbmQocGFja2V0KTsKKworICAgIC8qIHdlIGlnbm9yZSB0aGUgVEMgYml0IGZvciByZWFzb25zIGV4cGxhaW5lZCBpbgorICAgICAqIF9kbnNQYWNrZXRfY2hlY2tRdWVyeSgpLgorICAgICAqCisgICAgICogaG93ZXZlciB3ZSBoYXNoIHRoZSBSRCBiaXQgdG8gZGlmZmVyZW50aWF0ZQorICAgICAqIGJldHdlZW4gYW5zd2VycyBmb3IgcmVjdXJzaXZlIGFuZCBub24tcmVjdXJzaXZlCisgICAgICogcXVlcmllcy4KKyAgICAgKi8KKyAgICBoYXNoID0gaGFzaCpGTlZfTVVMVCBeIChwYWNrZXQtPmJhc2VbMl0gJiAxKTsKKworICAgIC8qIGFzc3VtZTogb3RoZXIgZmxhZ3MgYXJlIDAgKi8KKyAgICBfZG5zUGFja2V0X3NraXAocGFja2V0LCA0KTsKKworICAgIC8qIHJlYWQgUURDT1VOVCAqLworICAgIGNvdW50ID0gX2Ruc1BhY2tldF9yZWFkSW50MTYocGFja2V0KTsKKworICAgIC8qIGFzc3VtZTogQU5jb3VudCwgTlNjb3VudCwgQVJjb3VudCBhcmUgMCAqLworICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrZXQsIDYpOworCisgICAgLyogaGFzaCBRRENPVU5UIFFScyAqLworICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tICkKKyAgICAgICAgaGFzaCA9IF9kbnNQYWNrZXRfaGFzaFFSKHBhY2tldCwgaGFzaCk7CisKKyAgICByZXR1cm4gaGFzaDsKK30KKworCisvKiogUVVFUlkgQ09NUEFSSVNPTgorICoqCisgKiogVEhFIEZPTExPV0lORyBDT0RFIEFTU1VNRVMgVEhBVCBUSEUgSU5QVVQgUEFDS0VUUyBIQVZFIEFMUkVBRFkKKyAqKiBCRUVOIFNVQ0NFU0ZVTExZIENIRUNLRUQuCisgKiovCisKK3N0YXRpYyBpbnQKK19kbnNQYWNrZXRfaXNFcXVhbERvbWFpbk5hbWUoIERuc1BhY2tldCogIHBhY2sxLCBEbnNQYWNrZXQqICBwYWNrMiApCit7CisgICAgY29uc3QgdWludDhfdCogIHAxICAgPSBwYWNrMS0+Y3Vyc29yOworICAgIGNvbnN0IHVpbnQ4X3QqICBlbmQxID0gcGFjazEtPmVuZDsKKyAgICBjb25zdCB1aW50OF90KiAgcDIgICA9IHBhY2syLT5jdXJzb3I7CisgICAgY29uc3QgdWludDhfdCogIGVuZDIgPSBwYWNrMi0+ZW5kOworCisgICAgZm9yICg7OykgeworICAgICAgICBpbnQgIGMxLCBjMjsKKworICAgICAgICBpZiAocDEgPj0gZW5kMSB8fCBwMiA+PSBlbmQyKSB7CisgICAgICAgICAgICBYTE9HKCIlczogSU5URVJOQUxfRVJST1I6IHJlYWQtb3ZlcmZsb3cgISFcbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjMSA9ICpwMSsrOworICAgICAgICBjMiA9ICpwMisrOworICAgICAgICBpZiAoYzEgIT0gYzIpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoYzEgPT0gMCkgeworICAgICAgICAgICAgcGFjazEtPmN1cnNvciA9IHAxOworICAgICAgICAgICAgcGFjazItPmN1cnNvciA9IHAyOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGMxID49IDY0KSB7CisgICAgICAgICAgICBYTE9HKCIlczogSU5URVJOQUxfRVJST1I6IG1hbGZvcm1lZCBkb21haW4gISFcbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHAxK2MxID4gZW5kMSkgfHwgKHAyK2MxID4gZW5kMikpIHsKKyAgICAgICAgICAgIFhMT0coIiVzOiBJTlRFUk5BTF9FUlJPUjogc2ltcGxlIGxhYmVsIHJlYWQtb3ZlcmZsb3cgISFcbiIsCisgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAobWVtY21wKHAxLCBwMiwgYzEpICE9IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcDEgKz0gYzE7CisgICAgICAgIHAyICs9IGMxOworICAgICAgICAvKiB3ZSByZWx5IG9uIHRoZSBib3VuZCBjaGVja3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsb29wICovCisgICAgfQorICAgIC8qIG5vdCB0aGUgc2FtZSwgb3Igb25lIGlzIG1hbGZvcm1lZCAqLworICAgIFhMT0coImRpZmZlcmVudCBETiIpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfZG5zUGFja2V0X2lzRXF1YWxCeXRlcyggRG5zUGFja2V0KiAgcGFjazEsIERuc1BhY2tldCogIHBhY2syLCBpbnQgIG51bUJ5dGVzICkKK3sKKyAgICBjb25zdCB1aW50OF90KiAgcDEgPSBwYWNrMS0+Y3Vyc29yOworICAgIGNvbnN0IHVpbnQ4X3QqICBwMiA9IHBhY2syLT5jdXJzb3I7CisKKyAgICBpZiAoIHAxICsgbnVtQnl0ZXMgPiBwYWNrMS0+ZW5kIHx8IHAyICsgbnVtQnl0ZXMgPiBwYWNrMi0+ZW5kICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIG1lbWNtcChwMSwgcDIsIG51bUJ5dGVzKSAhPSAwICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBwYWNrMS0+Y3Vyc29yICs9IG51bUJ5dGVzOworICAgIHBhY2syLT5jdXJzb3IgKz0gbnVtQnl0ZXM7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19kbnNQYWNrZXRfaXNFcXVhbFFSKCBEbnNQYWNrZXQqICBwYWNrMSwgRG5zUGFja2V0KiAgcGFjazIgKQoreworICAgIC8qIGNvbXBhcmUgZG9tYWluIG5hbWUgZW5jb2RpbmcgKyBUWVBFICsgQ0xBU1MgKi8KKyAgICBpZiAoICFfZG5zUGFja2V0X2lzRXF1YWxEb21haW5OYW1lKHBhY2sxLCBwYWNrMikgfHwKKyAgICAgICAgICFfZG5zUGFja2V0X2lzRXF1YWxCeXRlcyhwYWNrMSwgcGFjazIsIDIrMikgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitfZG5zUGFja2V0X2lzRXF1YWxRdWVyeSggRG5zUGFja2V0KiAgcGFjazEsIERuc1BhY2tldCogIHBhY2syICkKK3sKKyAgICBpbnQgIGNvdW50MSwgY291bnQyOworCisgICAgLyogY29tcGFyZSB0aGUgaGVhZGVycywgaWdub3JlIG1vc3QgZmllbGRzICovCisgICAgX2Ruc1BhY2tldF9yZXdpbmQocGFjazEpOworICAgIF9kbnNQYWNrZXRfcmV3aW5kKHBhY2syKTsKKworICAgIC8qIGNvbXBhcmUgUkQsIGlnbm9yZSBUQywgc2VlIGNvbW1lbnQgaW4gX2Ruc1BhY2tldF9jaGVja1F1ZXJ5ICovCisgICAgaWYgKChwYWNrMS0+YmFzZVsyXSAmIDEpICE9IChwYWNrMi0+YmFzZVsyXSAmIDEpKSB7CisgICAgICAgIFhMT0coImRpZmZlcmVudCBSRCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBhc3N1bWU6IG90aGVyIGZsYWdzIGFyZSBhbGwgMCAqLworICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrMSwgNCk7CisgICAgX2Ruc1BhY2tldF9za2lwKHBhY2syLCA0KTsKKworICAgIC8qIGNvbXBhcmUgUURDT1VOVCAqLworICAgIGNvdW50MSA9IF9kbnNQYWNrZXRfcmVhZEludDE2KHBhY2sxKTsKKyAgICBjb3VudDIgPSBfZG5zUGFja2V0X3JlYWRJbnQxNihwYWNrMik7CisgICAgaWYgKGNvdW50MSAhPSBjb3VudDIgfHwgY291bnQxIDwgMCkgeworICAgICAgICBYTE9HKCJkaWZmZXJlbnQgUURDT1VOVCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBhc3N1bWU6IEFOY291bnQsIE5TY291bnQgYW5kIEFSY291bnQgYXJlIGFsbCAwICovCisgICAgX2Ruc1BhY2tldF9za2lwKHBhY2sxLCA2KTsKKyAgICBfZG5zUGFja2V0X3NraXAocGFjazIsIDYpOworCisgICAgLyogY29tcGFyZSB0aGUgUURDT1VOVCBRUnMgKi8KKyAgICBmb3IgKCA7IGNvdW50MSA+IDA7IGNvdW50MS0tICkgeworICAgICAgICBpZiAoIV9kbnNQYWNrZXRfaXNFcXVhbFFSKHBhY2sxLCBwYWNrMikpIHsKKyAgICAgICAgICAgIFhMT0coImRpZmZlcmVudCBRUiIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBjYWNoZSBlbnRyeS4gZm9yIHNpbXBsaWNpdHksICdoYXNoJyBhbmQgJ2hsaW5rJyBhcmUgaW5saW5lZCBpbiB0aGlzCisgKiBzdHJ1Y3R1cmUgdGhvdWdoIHRoZXkgYXJlIGNvbmNlcHR1YWxseSBwYXJ0IG9mIHRoZSBoYXNoIHRhYmxlLgorICoKKyAqIHNpbWlsYXJseSwgbXJ1X25leHQgYW5kIG1ydV9wcmV2IGFyZSBwYXJ0IG9mIHRoZSBnbG9iYWwgTVJVIGxpc3QKKyAqLwordHlwZWRlZiBzdHJ1Y3QgRW50cnkgeworICAgIHVuc2lnbmVkIGludCAgICAgaGFzaDsgICAvKiBoYXNoIHZhbHVlICovCisgICAgc3RydWN0IEVudHJ5KiAgICBobGluazsgIC8qIG5leHQgaW4gY29sbGlzaW9uIGNoYWluICovCisgICAgc3RydWN0IEVudHJ5KiAgICBtcnVfcHJldjsKKyAgICBzdHJ1Y3QgRW50cnkqICAgIG1ydV9uZXh0OworCisgICAgY29uc3QgdWludDhfdCogICBxdWVyeTsKKyAgICBpbnQgICAgICAgICAgICAgIHF1ZXJ5bGVuOworICAgIGNvbnN0IHVpbnQ4X3QqICAgYW5zd2VyOworICAgIGludCAgICAgICAgICAgICAgYW5zd2VybGVuOworICAgIHRpbWVfdCAgICAgICAgICAgZXhwaXJlczsgICAvKiB0aW1lX3Qgd2hlbiB0aGUgZW50cnkgaXNuJ3QgdmFsaWQgYW55IG1vcmUgKi8KKyAgICBpbnQgICAgICAgICAgICAgIGlkOyAgICAgICAgLyogZm9yIGRlYnVnZ2luZyBwdXJwb3NlICovCit9IEVudHJ5OworCisvKioKKyAqIEZpbmQgdGhlIFRUTCBmb3IgYSBuZWdhdGl2ZSBETlMgcmVzdWx0LiAgVGhpcyBpcyBkZWZpbmVkIGFzIHRoZSBtaW5pbXVtCisgKiBvZiB0aGUgU09BIHJlY29yZHMgVFRMIGFuZCB0aGUgTUlOSU1VTS1UVEwgZmllbGQgKFJGQy0yMzA4KS4KKyAqCisgKiBSZXR1cm4gMCBpZiBub3QgZm91bmQuCisgKi8KK3N0YXRpYyB1X2xvbmcKK2Fuc3dlcl9nZXROZWdhdGl2ZVRUTChuc19tc2cgaGFuZGxlKSB7CisgICAgaW50IG4sIG5zY291bnQ7CisgICAgdV9sb25nIHJlc3VsdCA9IDA7CisgICAgbnNfcnIgcnI7CisKKyAgICBuc2NvdW50ID0gbnNfbXNnX2NvdW50KGhhbmRsZSwgbnNfc19ucyk7CisgICAgZm9yIChuID0gMDsgbiA8IG5zY291bnQ7IG4rKykgeworICAgICAgICBpZiAoKG5zX3BhcnNlcnIoJmhhbmRsZSwgbnNfc19ucywgbiwgJnJyKSA9PSAwKSAmJiAobnNfcnJfdHlwZShycikgPT0gbnNfdF9zb2EpKSB7CisgICAgICAgICAgICBjb25zdCB1X2NoYXIgKnJkYXRhID0gbnNfcnJfcmRhdGEocnIpOyAvLyBmaW5kIHRoZSBkYXRhCisgICAgICAgICAgICBjb25zdCB1X2NoYXIgKmVkYXRhID0gcmRhdGEgKyBuc19ycl9yZGxlbihycik7IC8vIGFkZCB0aGUgbGVuIHRvIGZpbmQgdGhlIGVuZAorICAgICAgICAgICAgaW50IGxlbjsKKyAgICAgICAgICAgIHVfbG9uZyB0dGwsIHJlY19yZXN1bHQgPSBuc19ycl90dGwocnIpOworCisgICAgICAgICAgICAvLyBmaW5kIHRoZSBNSU5JTVVNLVRUTCBmaWVsZCBmcm9tIHRoZSBibG9iIG9mIGJpbmFyeSBkYXRhIGZvciB0aGlzIHJlY29yZAorICAgICAgICAgICAgLy8gc2tpcCB0aGUgc2VydmVyIG5hbWUKKyAgICAgICAgICAgIGxlbiA9IGRuX3NraXBuYW1lKHJkYXRhLCBlZGF0YSk7CisgICAgICAgICAgICBpZiAobGVuID09IC0xKSBjb250aW51ZTsgLy8gZXJyb3Igc2tpcHBpbmcKKyAgICAgICAgICAgIHJkYXRhICs9IGxlbjsKKworICAgICAgICAgICAgLy8gc2tpcCB0aGUgYWRtaW4gbmFtZQorICAgICAgICAgICAgbGVuID0gZG5fc2tpcG5hbWUocmRhdGEsIGVkYXRhKTsKKyAgICAgICAgICAgIGlmIChsZW4gPT0gLTEpIGNvbnRpbnVlOyAvLyBlcnJvciBza2lwcGluZworICAgICAgICAgICAgcmRhdGEgKz0gbGVuOworCisgICAgICAgICAgICBpZiAoZWRhdGEgLSByZGF0YSAhPSA1Kk5TX0lOVDMyU1opIGNvbnRpbnVlOworICAgICAgICAgICAgLy8gc2tpcDogc2VyaWFsIG51bWJlciArIHJlZnJlc2ggaW50ZXJ2YWwgKyByZXRyeSBpbnRlcnZhbCArIGV4cGlyeQorICAgICAgICAgICAgcmRhdGEgKz0gTlNfSU5UMzJTWiAqIDQ7CisgICAgICAgICAgICAvLyBmaW5hbGx5IHJlYWQgdGhlIE1JTklNVU0gVFRMCisgICAgICAgICAgICB0dGwgPSBuc19nZXQzMihyZGF0YSk7CisgICAgICAgICAgICBpZiAodHRsIDwgcmVjX3Jlc3VsdCkgeworICAgICAgICAgICAgICAgIHJlY19yZXN1bHQgPSB0dGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBOb3cgdGhhdCB0aGUgcmVjb3JkIGlzIHJlYWQgc3VjY2Vzc2Z1bGx5LCBhcHBseSB0aGUgbmV3IG1pbiBUVEwKKyAgICAgICAgICAgIGlmIChuID09IDAgfHwgcmVjX3Jlc3VsdCA8IHJlc3VsdCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlY19yZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBQYXJzZSB0aGUgYW5zd2VyIHJlY29yZHMgYW5kIGZpbmQgdGhlIGFwcHJvcHJpYXRlCisgKiBzbWFsbGVzdCBUVEwgYW1vbmcgdGhlIHJlY29yZHMuICBUaGlzIG1pZ2h0IGJlIGZyb20KKyAqIHRoZSBhbnN3ZXIgcmVjb3JkcyBpZiBmb3VuZCBvciBmcm9tIHRoZSBTT0EgcmVjb3JkCisgKiBpZiBpdCdzIGEgbmVnYXRpdmUgcmVzdWx0LgorICoKKyAqIFRoZSByZXR1cm5lZCBUVEwgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRvCisgKiBrZWVwIHRoZSBhbnN3ZXIgaW4gdGhlIGNhY2hlLgorICoKKyAqIEluIGNhc2Ugb2YgcGFyc2UgZXJyb3IgemVybyAoMCkgaXMgcmV0dXJuZWQgd2hpY2gKKyAqIGluZGljYXRlcyB0aGF0IHRoZSBhbnN3ZXIgc2hhbGwgbm90IGJlIGNhY2hlZC4KKyAqLworc3RhdGljIHVfbG9uZworYW5zd2VyX2dldFRUTChjb25zdCB2b2lkKiBhbnN3ZXIsIGludCBhbnN3ZXJsZW4pCit7CisgICAgbnNfbXNnIGhhbmRsZTsKKyAgICBpbnQgYW5jb3VudCwgbjsKKyAgICB1X2xvbmcgcmVzdWx0LCB0dGw7CisgICAgbnNfcnIgcnI7CisKKyAgICByZXN1bHQgPSAwOworICAgIGlmIChuc19pbml0cGFyc2UoYW5zd2VyLCBhbnN3ZXJsZW4sICZoYW5kbGUpID49IDApIHsKKyAgICAgICAgLy8gZ2V0IG51bWJlciBvZiBhbnN3ZXIgcmVjb3JkcworICAgICAgICBhbmNvdW50ID0gbnNfbXNnX2NvdW50KGhhbmRsZSwgbnNfc19hbik7CisKKyAgICAgICAgaWYgKGFuY291bnQgPT0gMCkgeworICAgICAgICAgICAgLy8gYSByZXNwb25zZSB3aXRoIG5vIGFuc3dlcnM/ICBDYWNoZSB0aGlzIG5lZ2F0aXZlIHJlc3VsdC4KKyAgICAgICAgICAgIHJlc3VsdCA9IGFuc3dlcl9nZXROZWdhdGl2ZVRUTChoYW5kbGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IGFuY291bnQ7IG4rKykgeworICAgICAgICAgICAgICAgIGlmIChuc19wYXJzZXJyKCZoYW5kbGUsIG5zX3NfYW4sIG4sICZycikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICB0dGwgPSBuc19ycl90dGwocnIpOworICAgICAgICAgICAgICAgICAgICBpZiAobiA9PSAwIHx8IHR0bCA8IHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHRsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgWExPRygibnNfcGFyc2VyciBmYWlsZWQgYW5jb3VudCBubyA9ICVkLiBlcnJubyA9ICVzXG4iLCBuLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFhMT0coIm5zX3BhcnNlcnIgZmFpbGVkLiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisKKyAgICBYTE9HKCJUVEwgPSAlZFxuIiwgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitlbnRyeV9mcmVlKCBFbnRyeSogIGUgKQoreworICAgIC8qIGV2ZXJ5dGhpbmcgaXMgYWxsb2NhdGVkIGluIGEgc2luZ2xlIG1lbW9yeSBibG9jayAqLworICAgIGlmIChlKSB7CisgICAgICAgIGZyZWUoZSk7CisgICAgfQorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitlbnRyeV9tcnVfcmVtb3ZlKCBFbnRyeSogIGUgKQoreworICAgIGUtPm1ydV9wcmV2LT5tcnVfbmV4dCA9IGUtPm1ydV9uZXh0OworICAgIGUtPm1ydV9uZXh0LT5tcnVfcHJldiA9IGUtPm1ydV9wcmV2OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitlbnRyeV9tcnVfYWRkKCBFbnRyeSogIGUsIEVudHJ5KiAgbGlzdCApCit7CisgICAgRW50cnkqICBmaXJzdCA9IGxpc3QtPm1ydV9uZXh0OworCisgICAgZS0+bXJ1X25leHQgPSBmaXJzdDsKKyAgICBlLT5tcnVfcHJldiA9IGxpc3Q7CisKKyAgICBsaXN0LT5tcnVfbmV4dCAgPSBlOworICAgIGZpcnN0LT5tcnVfcHJldiA9IGU7Cit9CisKKy8qIGNvbXB1dGUgdGhlIGhhc2ggb2YgYSBnaXZlbiBlbnRyeSwgdGhpcyBpcyBhIGhhc2ggb2YgbW9zdAorICogZGF0YSBpbiB0aGUgcXVlcnkgKGtleSkgKi8KK3N0YXRpYyB1bnNpZ25lZAorZW50cnlfaGFzaCggY29uc3QgRW50cnkqICBlICkKK3sKKyAgICBEbnNQYWNrZXQgIHBhY2tbMV07CisKKyAgICBfZG5zUGFja2V0X2luaXQocGFjaywgZS0+cXVlcnksIGUtPnF1ZXJ5bGVuKTsKKyAgICByZXR1cm4gX2Ruc1BhY2tldF9oYXNoUXVlcnkocGFjayk7Cit9CisKKy8qIGluaXRpYWxpemUgYW4gRW50cnkgYXMgYSBzZWFyY2gga2V5LCB0aGlzIGFsc28gY2hlY2tzIHRoZSBpbnB1dCBxdWVyeSBwYWNrZXQKKyAqIHJldHVybnMgMSBvbiBzdWNjZXNzLCBvciAwIGluIGNhc2Ugb2YgdW5zdXBwb3J0ZWQvbWFsZm9ybWVkIGRhdGEgKi8KK3N0YXRpYyBpbnQKK2VudHJ5X2luaXRfa2V5KCBFbnRyeSogIGUsIGNvbnN0IHZvaWQqICBxdWVyeSwgaW50ICBxdWVyeWxlbiApCit7CisgICAgRG5zUGFja2V0ICBwYWNrWzFdOworCisgICAgbWVtc2V0KGUsIDAsIHNpemVvZigqZSkpOworCisgICAgZS0+cXVlcnkgICAgPSBxdWVyeTsKKyAgICBlLT5xdWVyeWxlbiA9IHF1ZXJ5bGVuOworICAgIGUtPmhhc2ggICAgID0gZW50cnlfaGFzaChlKTsKKworICAgIF9kbnNQYWNrZXRfaW5pdChwYWNrLCBxdWVyeSwgcXVlcnlsZW4pOworCisgICAgcmV0dXJuIF9kbnNQYWNrZXRfY2hlY2tRdWVyeShwYWNrKTsKK30KKworLyogYWxsb2NhdGUgYSBuZXcgZW50cnkgYXMgYSBjYWNoZSBub2RlICovCitzdGF0aWMgRW50cnkqCitlbnRyeV9hbGxvYyggY29uc3QgRW50cnkqICBpbml0LCBjb25zdCB2b2lkKiAgYW5zd2VyLCBpbnQgIGFuc3dlcmxlbiApCit7CisgICAgRW50cnkqICBlOworICAgIGludCAgICAgc2l6ZTsKKworICAgIHNpemUgPSBzaXplb2YoKmUpICsgaW5pdC0+cXVlcnlsZW4gKyBhbnN3ZXJsZW47CisgICAgZSAgICA9IGNhbGxvYyhzaXplLCAxKTsKKyAgICBpZiAoZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gZTsKKworICAgIGUtPmhhc2ggICAgID0gaW5pdC0+aGFzaDsKKyAgICBlLT5xdWVyeSAgICA9IChjb25zdCB1aW50OF90KikoZSsxKTsKKyAgICBlLT5xdWVyeWxlbiA9IGluaXQtPnF1ZXJ5bGVuOworCisgICAgbWVtY3B5KCAoY2hhciopZS0+cXVlcnksIGluaXQtPnF1ZXJ5LCBlLT5xdWVyeWxlbiApOworCisgICAgZS0+YW5zd2VyICAgID0gZS0+cXVlcnkgKyBlLT5xdWVyeWxlbjsKKyAgICBlLT5hbnN3ZXJsZW4gPSBhbnN3ZXJsZW47CisKKyAgICBtZW1jcHkoIChjaGFyKillLT5hbnN3ZXIsIGFuc3dlciwgZS0+YW5zd2VybGVuICk7CisKKyAgICByZXR1cm4gZTsKK30KKworc3RhdGljIGludAorZW50cnlfZXF1YWxzKCBjb25zdCBFbnRyeSogIGUxLCBjb25zdCBFbnRyeSogIGUyICkKK3sKKyAgICBEbnNQYWNrZXQgIHBhY2sxWzFdLCBwYWNrMlsxXTsKKworICAgIGlmIChlMS0+cXVlcnlsZW4gIT0gZTItPnF1ZXJ5bGVuKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBfZG5zUGFja2V0X2luaXQocGFjazEsIGUxLT5xdWVyeSwgZTEtPnF1ZXJ5bGVuKTsKKyAgICBfZG5zUGFja2V0X2luaXQocGFjazIsIGUyLT5xdWVyeSwgZTItPnF1ZXJ5bGVuKTsKKworICAgIHJldHVybiBfZG5zUGFja2V0X2lzRXF1YWxRdWVyeShwYWNrMSwgcGFjazIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogV2UgdXNlIGEgc2ltcGxlIGhhc2ggdGFibGUgd2l0aCBleHRlcm5hbCBjb2xsaXNpb24gbGlzdHMKKyAqIGZvciBzaW1wbGljaXR5LCB0aGUgaGFzaC10YWJsZSBmaWVsZHMgJ2hhc2gnIGFuZCAnaGxpbmsnIGFyZQorICogaW5saW5lZCBpbiB0aGUgRW50cnkgc3RydWN0dXJlLgorICovCisKKy8qIE1heGltdW0gdGltZSBmb3IgYSB0aHJlYWQgdG8gd2FpdCBmb3IgYW4gcGVuZGluZyByZXF1ZXN0ICovCisjZGVmaW5lIFBFTkRJTkdfUkVRVUVTVF9USU1FT1VUIDIwOworCit0eXBlZGVmIHN0cnVjdCBwZW5kaW5nX3JlcV9pbmZvIHsKKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgaGFzaDsKKyAgICBwdGhyZWFkX2NvbmRfdCAgICAgICAgICAgICAgY29uZDsKKyAgICBzdHJ1Y3QgcGVuZGluZ19yZXFfaW5mbyogICAgbmV4dDsKK30gUGVuZGluZ1JlcUluZm87CisKK3R5cGVkZWYgc3RydWN0IHJlc29sdl9jYWNoZSB7CisgICAgaW50ICAgICAgICAgICAgICBtYXhfZW50cmllczsKKyAgICBpbnQgICAgICAgICAgICAgIG51bV9lbnRyaWVzOworICAgIEVudHJ5ICAgICAgICAgICAgbXJ1X2xpc3Q7CisgICAgaW50ICAgICAgICAgICAgICBsYXN0X2lkOworICAgIEVudHJ5KiAgICAgICAgICAgZW50cmllczsKKyAgICBQZW5kaW5nUmVxSW5mbyAgIHBlbmRpbmdfcmVxdWVzdHM7Cit9IENhY2hlOworCitzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8geworICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICBuZXRpZDsKKyAgICBDYWNoZSogICAgICAgICAgICAgICAgICAgICAgY2FjaGU7CisgICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiAgIG5leHQ7CisgICAgY2hhciogICAgICAgICAgICAgICAgICAgICAgIG5hbWVzZXJ2ZXJzW01BWE5TICsxXTsKKyAgICBzdHJ1Y3QgYWRkcmluZm8qICAgICAgICAgICAgbnNhZGRyaW5mb1tNQVhOUyArIDFdOworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICBkZWZkbmFtZVsyNTZdOworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBkbnNyY2hfb2Zmc2V0W01BWEROU1JDSCsxXTsgIC8vIG9mZnNldHMgaW50byBkZWZkbmFtZQorfTsKKworI2RlZmluZSAgSFRBQkxFX1ZBTElEKHgpICAoKHgpICE9IE5VTEwgJiYgKHgpICE9IEhUQUJMRV9ERUxFVEVEKQorCitzdGF0aWMgcHRocmVhZF9vbmNlX3QgICAgICAgIF9yZXNfY2FjaGVfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOworc3RhdGljIHZvaWQgX3Jlc19jYWNoZV9pbml0KHZvaWQpOworCisvLyBsb2NrIHByb3RlY3RpbmcgZXZlcnl0aGluZyBpbiB0aGUgX3Jlc29sdmVfY2FjaGVfaW5mbyBzdHJ1Y3RzIChuZXh0IHB0ciwgZXRjKQorc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBfcmVzX2NhY2hlX2xpc3RfbG9jazsKKworLyogZ2V0cyBjYWNoZSBhc3NvY2lhdGVkIHdpdGggYSBuZXR3b3JrLCBvciBOVUxMIGlmIG5vbmUgZXhpc3RzICovCitzdGF0aWMgc3RydWN0IHJlc29sdl9jYWNoZSogX2ZpbmRfbmFtZWRfY2FjaGVfbG9ja2VkKHVuc2lnbmVkIG5ldGlkKTsKKworc3RhdGljIHZvaWQKK19jYWNoZV9mbHVzaF9wZW5kaW5nX3JlcXVlc3RzX2xvY2tlZCggc3RydWN0IHJlc29sdl9jYWNoZSogY2FjaGUgKQoreworICAgIHN0cnVjdCBwZW5kaW5nX3JlcV9pbmZvICpyaSwgKnRtcDsKKyAgICBpZiAoY2FjaGUpIHsKKyAgICAgICAgcmkgPSBjYWNoZS0+cGVuZGluZ19yZXF1ZXN0cy5uZXh0OworCisgICAgICAgIHdoaWxlIChyaSkgeworICAgICAgICAgICAgdG1wID0gcmk7CisgICAgICAgICAgICByaSA9IHJpLT5uZXh0OworICAgICAgICAgICAgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmdG1wLT5jb25kKTsKKworICAgICAgICAgICAgcHRocmVhZF9jb25kX2Rlc3Ryb3koJnRtcC0+Y29uZCk7CisgICAgICAgICAgICBmcmVlKHRtcCk7CisgICAgICAgIH0KKworICAgICAgICBjYWNoZS0+cGVuZGluZ19yZXF1ZXN0cy5uZXh0ID0gTlVMTDsKKyAgICB9Cit9CisKKy8qIFJldHVybiAwIGlmIG5vIHBlbmRpbmcgcmVxdWVzdCBpcyBmb3VuZCBtYXRjaGluZyB0aGUga2V5LgorICogSWYgYSBtYXRjaGluZyByZXF1ZXN0IGlzIGZvdW5kIHRoZSBjYWxsaW5nIHRocmVhZCB3aWxsIHdhaXQgdW50aWwKKyAqIHRoZSBtYXRjaGluZyByZXF1ZXN0IGNvbXBsZXRlcywgdGhlbiB1cGRhdGUgKmNhY2hlIGFuZCByZXR1cm4gMS4gKi8KK3N0YXRpYyBpbnQKK19jYWNoZV9jaGVja19wZW5kaW5nX3JlcXVlc3RfbG9ja2VkKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiogY2FjaGUsIEVudHJ5KiBrZXksIHVuc2lnbmVkIG5ldGlkICkKK3sKKyAgICBzdHJ1Y3QgcGVuZGluZ19yZXFfaW5mbyAqcmksICpwcmV2OworICAgIGludCBleGlzdCA9IDA7CisKKyAgICBpZiAoKmNhY2hlICYmIGtleSkgeworICAgICAgICByaSA9ICgqY2FjaGUpLT5wZW5kaW5nX3JlcXVlc3RzLm5leHQ7CisgICAgICAgIHByZXYgPSAmKCpjYWNoZSktPnBlbmRpbmdfcmVxdWVzdHM7CisgICAgICAgIHdoaWxlIChyaSkgeworICAgICAgICAgICAgaWYgKHJpLT5oYXNoID09IGtleS0+aGFzaCkgeworICAgICAgICAgICAgICAgIGV4aXN0ID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByZXYgPSByaTsKKyAgICAgICAgICAgIHJpID0gcmktPm5leHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWV4aXN0KSB7CisgICAgICAgICAgICByaSA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBlbmRpbmdfcmVxX2luZm8pKTsKKyAgICAgICAgICAgIGlmIChyaSkgeworICAgICAgICAgICAgICAgIHJpLT5oYXNoID0ga2V5LT5oYXNoOworICAgICAgICAgICAgICAgIHB0aHJlYWRfY29uZF9pbml0KCZyaS0+Y29uZCwgTlVMTCk7CisgICAgICAgICAgICAgICAgcHJldi0+bmV4dCA9IHJpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzID0gezAsMH07CisgICAgICAgICAgICBYTE9HKCJXYWl0aW5nIGZvciBwcmV2aW91cyByZXF1ZXN0Iik7CisgICAgICAgICAgICB0cy50dl9zZWMgPSBfdGltZV9ub3coKSArIFBFTkRJTkdfUkVRVUVTVF9USU1FT1VUOworICAgICAgICAgICAgcHRocmVhZF9jb25kX3RpbWVkd2FpdCgmcmktPmNvbmQsICZfcmVzX2NhY2hlX2xpc3RfbG9jaywgJnRzKTsKKyAgICAgICAgICAgIC8qIE11c3QgdXBkYXRlICpjYWNoZSBhcyBpdCBjb3VsZCBoYXZlIGJlZW4gZGVsZXRlZC4gKi8KKyAgICAgICAgICAgICpjYWNoZSA9IF9maW5kX25hbWVkX2NhY2hlX2xvY2tlZChuZXRpZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXhpc3Q7Cit9CisKKy8qIG5vdGlmeSBhbnkgd2FpdGluZyB0aHJlYWQgdGhhdCB3YWl0aW5nIG9uIGEgcmVxdWVzdAorICogbWF0Y2hpbmcgdGhlIGtleSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgY2FjaGUgKi8KK3N0YXRpYyB2b2lkCitfY2FjaGVfbm90aWZ5X3dhaXRpbmdfdGlkX2xvY2tlZCggc3RydWN0IHJlc29sdl9jYWNoZSogY2FjaGUsIEVudHJ5KiBrZXkgKQoreworICAgIHN0cnVjdCBwZW5kaW5nX3JlcV9pbmZvICpyaSwgKnByZXY7CisKKyAgICBpZiAoY2FjaGUgJiYga2V5KSB7CisgICAgICAgIHJpID0gY2FjaGUtPnBlbmRpbmdfcmVxdWVzdHMubmV4dDsKKyAgICAgICAgcHJldiA9ICZjYWNoZS0+cGVuZGluZ19yZXF1ZXN0czsKKyAgICAgICAgd2hpbGUgKHJpKSB7CisgICAgICAgICAgICBpZiAocmktPmhhc2ggPT0ga2V5LT5oYXNoKSB7CisgICAgICAgICAgICAgICAgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmcmktPmNvbmQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJldiA9IHJpOworICAgICAgICAgICAgcmkgPSByaS0+bmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHJlbW92ZSBpdGVtIGZyb20gbGlzdCBhbmQgZGVzdHJveQorICAgICAgICBpZiAocmkpIHsKKyAgICAgICAgICAgIHByZXYtPm5leHQgPSByaS0+bmV4dDsKKyAgICAgICAgICAgIHB0aHJlYWRfY29uZF9kZXN0cm95KCZyaS0+Y29uZCk7CisgICAgICAgICAgICBmcmVlKHJpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyogbm90aWZ5IHRoZSBjYWNoZSB0aGF0IHRoZSBxdWVyeSBmYWlsZWQgKi8KK3ZvaWQKK19yZXNvbHZfY2FjaGVfcXVlcnlfZmFpbGVkKCB1bnNpZ25lZCAgICBuZXRpZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBxdWVyeSwKKyAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICBxdWVyeWxlbikKK3sKKyAgICBFbnRyeSAgICBrZXlbMV07CisgICAgQ2FjaGUqICAgY2FjaGU7CisKKyAgICBpZiAoIWVudHJ5X2luaXRfa2V5KGtleSwgcXVlcnksIHF1ZXJ5bGVuKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7CisKKyAgICBjYWNoZSA9IF9maW5kX25hbWVkX2NhY2hlX2xvY2tlZChuZXRpZCk7CisKKyAgICBpZiAoY2FjaGUpIHsKKyAgICAgICAgX2NhY2hlX25vdGlmeV93YWl0aW5nX3RpZF9sb2NrZWQoY2FjaGUsIGtleSk7CisgICAgfQorCisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQKK19jYWNoZV9mbHVzaF9sb2NrZWQoIENhY2hlKiAgY2FjaGUgKQoreworICAgIGludCAgICAgbm47CisKKyAgICBmb3IgKG5uID0gMDsgbm4gPCBjYWNoZS0+bWF4X2VudHJpZXM7IG5uKyspCisgICAgeworICAgICAgICBFbnRyeSoqICBwbm9kZSA9IChFbnRyeSoqKSAmY2FjaGUtPmVudHJpZXNbbm5dOworCisgICAgICAgIHdoaWxlICgqcG5vZGUgIT0gTlVMTCkgeworICAgICAgICAgICAgRW50cnkqICBub2RlID0gKnBub2RlOworICAgICAgICAgICAgKnBub2RlID0gbm9kZS0+aGxpbms7CisgICAgICAgICAgICBlbnRyeV9mcmVlKG5vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gZmx1c2ggcGVuZGluZyByZXF1ZXN0CisgICAgX2NhY2hlX2ZsdXNoX3BlbmRpbmdfcmVxdWVzdHNfbG9ja2VkKGNhY2hlKTsKKworICAgIGNhY2hlLT5tcnVfbGlzdC5tcnVfbmV4dCA9IGNhY2hlLT5tcnVfbGlzdC5tcnVfcHJldiA9ICZjYWNoZS0+bXJ1X2xpc3Q7CisgICAgY2FjaGUtPm51bV9lbnRyaWVzICAgICAgID0gMDsKKyAgICBjYWNoZS0+bGFzdF9pZCAgICAgICAgICAgPSAwOworCisgICAgWExPRygiKioqKioqKioqKioqKioqKioqKioqKioqKlxuIgorICAgICAgICAgIioqKiBETlMgQ0FDSEUgRkxVU0hFRCAqKipcbiIKKyAgICAgICAgICIqKioqKioqKioqKioqKioqKioqKioqKioqIik7Cit9CisKK3N0YXRpYyBpbnQKK19yZXNfY2FjaGVfZ2V0X21heF9lbnRyaWVzKCB2b2lkICkKK3sKKyAgICBpbnQgY2FjaGVfc2l6ZSA9IENPTkZJR19NQVhfRU5UUklFUzsKKworICAgIGNvbnN0IGNoYXIqIGNhY2hlX21vZGUgPSBnZXRlbnYoIkFORFJPSURfRE5TX01PREUiKTsKKyAgICBpZiAoY2FjaGVfbW9kZSA9PSBOVUxMIHx8IHN0cmNtcChjYWNoZV9tb2RlLCAibG9jYWwiKSAhPSAwKSB7CisgICAgICAgIC8vIERvbid0IHVzZSB0aGUgY2FjaGUgaW4gbG9jYWwgbW9kZS4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBwcm94eSBpdHNlbGYuCisgICAgICAgIGNhY2hlX3NpemUgPSAwOworICAgIH0KKworICAgIFhMT0coImNhY2hlIHNpemU6ICVkIiwgY2FjaGVfc2l6ZSk7CisgICAgcmV0dXJuIGNhY2hlX3NpemU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlKgorX3Jlc29sdl9jYWNoZV9jcmVhdGUoIHZvaWQgKQoreworICAgIHN0cnVjdCByZXNvbHZfY2FjaGUqICBjYWNoZTsKKworICAgIGNhY2hlID0gY2FsbG9jKHNpemVvZigqY2FjaGUpLCAxKTsKKyAgICBpZiAoY2FjaGUpIHsKKyAgICAgICAgY2FjaGUtPm1heF9lbnRyaWVzID0gX3Jlc19jYWNoZV9nZXRfbWF4X2VudHJpZXMoKTsKKyAgICAgICAgY2FjaGUtPmVudHJpZXMgPSBjYWxsb2Moc2l6ZW9mKCpjYWNoZS0+ZW50cmllcyksIGNhY2hlLT5tYXhfZW50cmllcyk7CisgICAgICAgIGlmIChjYWNoZS0+ZW50cmllcykgeworICAgICAgICAgICAgY2FjaGUtPm1ydV9saXN0Lm1ydV9wcmV2ID0gY2FjaGUtPm1ydV9saXN0Lm1ydV9uZXh0ID0gJmNhY2hlLT5tcnVfbGlzdDsKKyAgICAgICAgICAgIFhMT0coIiVzOiBjYWNoZSBjcmVhdGVkXG4iLCBfX0ZVTkNUSU9OX18pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZnJlZShjYWNoZSk7CisgICAgICAgICAgICBjYWNoZSA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNhY2hlOworfQorCisKKyNpZiBERUJVRworc3RhdGljIHZvaWQKK19kdW1wX3F1ZXJ5KCBjb25zdCB1aW50OF90KiAgcXVlcnksIGludCAgcXVlcnlsZW4gKQoreworICAgIGNoYXIgICAgICAgdGVtcFsyNTZdLCAqcD10ZW1wLCAqZW5kPXArc2l6ZW9mKHRlbXApOworICAgIERuc1BhY2tldCAgcGFja1sxXTsKKworICAgIF9kbnNQYWNrZXRfaW5pdChwYWNrLCBxdWVyeSwgcXVlcnlsZW4pOworICAgIHAgPSBfZG5zUGFja2V0X2JwcmludFF1ZXJ5KHBhY2ssIHAsIGVuZCk7CisgICAgWExPRygiUVVFUlk6ICVzIiwgdGVtcCk7Cit9CisKK3N0YXRpYyB2b2lkCitfY2FjaGVfZHVtcF9tcnUoIENhY2hlKiAgY2FjaGUgKQoreworICAgIGNoYXIgICAgdGVtcFs1MTJdLCAqcD10ZW1wLCAqZW5kPXArc2l6ZW9mKHRlbXApOworICAgIEVudHJ5KiAgZTsKKworICAgIHAgPSBfYnByaW50KHRlbXAsIGVuZCwgIk1SVSBMSVNUICglMmQpOiAiLCBjYWNoZS0+bnVtX2VudHJpZXMpOworICAgIGZvciAoZSA9IGNhY2hlLT5tcnVfbGlzdC5tcnVfbmV4dDsgZSAhPSAmY2FjaGUtPm1ydV9saXN0OyBlID0gZS0+bXJ1X25leHQpCisgICAgICAgIHAgPSBfYnByaW50KHAsIGVuZCwgIiAlZCIsIGUtPmlkKTsKKworICAgIFhMT0coIiVzIiwgdGVtcCk7Cit9CisKK3N0YXRpYyB2b2lkCitfZHVtcF9hbnN3ZXIoY29uc3Qgdm9pZCogYW5zd2VyLCBpbnQgYW5zd2VybGVuKQoreworICAgIHJlc19zdGF0ZSBzdGF0ZXA7CisgICAgRklMRSogZnA7CisgICAgY2hhciogYnVmOworICAgIGludCBmaWxlTGVuOworCisgICAgZnAgPSBmb3BlbigiL2RhdGEvcmVzbG9nLnR4dCIsICJ3KyIpOworICAgIGlmIChmcCAhPSBOVUxMKSB7CisgICAgICAgIHN0YXRlcCA9IF9fcmVzX2dldF9zdGF0ZSgpOworCisgICAgICAgIHJlc19wcXVlcnkoc3RhdGVwLCBhbnN3ZXIsIGFuc3dlcmxlbiwgZnApOworCisgICAgICAgIC8vR2V0IGZpbGUgbGVuZ3RoCisgICAgICAgIGZzZWVrKGZwLCAwLCBTRUVLX0VORCk7CisgICAgICAgIGZpbGVMZW49ZnRlbGwoZnApOworICAgICAgICBmc2VlayhmcCwgMCwgU0VFS19TRVQpOworICAgICAgICBidWYgPSAoY2hhciAqKW1hbGxvYyhmaWxlTGVuKzEpOworICAgICAgICBpZiAoYnVmICE9IE5VTEwpIHsKKyAgICAgICAgICAgIC8vUmVhZCBmaWxlIGNvbnRlbnRzIGludG8gYnVmZmVyCisgICAgICAgICAgICBmcmVhZChidWYsIGZpbGVMZW4sIDEsIGZwKTsKKyAgICAgICAgICAgIFhMT0coIiVzXG4iLCBidWYpOworICAgICAgICAgICAgZnJlZShidWYpOworICAgICAgICB9CisgICAgICAgIGZjbG9zZShmcCk7CisgICAgICAgIHJlbW92ZSgiL2RhdGEvcmVzbG9nLnR4dCIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZXJybm8gPSAwOyAvLyBlbHNlIGRlYnVnIGlzIGludHJvZHVjaW5nIGVycm9yIHNpZ25hbHMKKyAgICAgICAgWExPRygiJXM6IGNhbid0IG9wZW4gZmlsZVxuIiwgX19GVU5DVElPTl9fKTsKKyAgICB9Cit9CisjZW5kaWYKKworI2lmIERFQlVHCisjICBkZWZpbmUgIFhMT0dfUVVFUlkocSxsZW4pICAgX2R1bXBfcXVlcnkoKHEpLCAobGVuKSkKKyMgIGRlZmluZSAgWExPR19BTlNXRVIoYSwgbGVuKSBfZHVtcF9hbnN3ZXIoKGEpLCAobGVuKSkKKyNlbHNlCisjICBkZWZpbmUgIFhMT0dfUVVFUlkocSxsZW4pICAgKCh2b2lkKTApCisjICBkZWZpbmUgIFhMT0dfQU5TV0VSKGEsbGVuKSAgKCh2b2lkKTApCisjZW5kaWYKKworLyogVGhpcyBmdW5jdGlvbiB0cmllcyB0byBmaW5kIGEga2V5IHdpdGhpbiB0aGUgaGFzaCB0YWJsZQorICogSW4gY2FzZSBvZiBzdWNjZXNzLCBpdCB3aWxsIHJldHVybiBhICpwb2ludGVyKiB0byB0aGUgaGFzaGVkIGtleS4KKyAqIEluIGNhc2Ugb2YgZmFpbHVyZSwgaXQgd2lsbCByZXR1cm4gYSAqcG9pbnRlciogdG8gTlVMTAorICoKKyAqIFNvLCB0aGUgY2FsbGVyIG11c3QgY2hlY2sgJypyZXN1bHQnIHRvIGNoZWNrIGZvciBzdWNjZXNzL2ZhaWx1cmUuCisgKgorICogVGhlIG1haW4gaWRlYSBpcyB0aGF0IHRoZSByZXN1bHQgY2FuIGxhdGVyIGJlIHVzZWQgZGlyZWN0bHkgaW4KKyAqIGNhbGxzIHRvIF9yZXNvbHZfY2FjaGVfYWRkIG9yIF9yZXNvbHZfY2FjaGVfcmVtb3ZlIGFzIHRoZSAnbG9va3VwJworICogcGFyYW1ldGVyLiBUaGlzIG1ha2VzIHRoZSBjb2RlIHNpbXBsZXIgYW5kIGF2b2lkcyByZS1zZWFyY2hpbmcKKyAqIGZvciB0aGUga2V5IHBvc2l0aW9uIGluIHRoZSBodGFibGUuCisgKgorICogVGhlIHJlc3VsdCBvZiBhIGxvb2t1cF9wIGlzIG9ubHkgdmFsaWQgdW50aWwgeW91IGFsdGVyIHRoZSBoYXNoCisgKiB0YWJsZS4KKyAqLworc3RhdGljIEVudHJ5KioKK19jYWNoZV9sb29rdXBfcCggQ2FjaGUqICAgY2FjaGUsCisgICAgICAgICAgICAgICAgIEVudHJ5KiAgIGtleSApCit7CisgICAgaW50ICAgICAgaW5kZXggPSBrZXktPmhhc2ggJSBjYWNoZS0+bWF4X2VudHJpZXM7CisgICAgRW50cnkqKiAgcG5vZGUgPSAoRW50cnkqKikgJmNhY2hlLT5lbnRyaWVzWyBpbmRleCBdOworCisgICAgd2hpbGUgKCpwbm9kZSAhPSBOVUxMKSB7CisgICAgICAgIEVudHJ5KiAgbm9kZSA9ICpwbm9kZTsKKworICAgICAgICBpZiAobm9kZSA9PSBOVUxMKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKG5vZGUtPmhhc2ggPT0ga2V5LT5oYXNoICYmIGVudHJ5X2VxdWFscyhub2RlLCBrZXkpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcG5vZGUgPSAmbm9kZS0+aGxpbms7CisgICAgfQorICAgIHJldHVybiBwbm9kZTsKK30KKworLyogQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBoYXNoIHRhYmxlLiAnbG9va3VwJyBtdXN0IGJlIHRoZQorICogcmVzdWx0IG9mIGFuIGltbWVkaWF0ZSBwcmV2aW91cyBmYWlsZWQgX2xvb2t1cF9wKCkgY2FsbAorICogKGkuZS4gd2l0aCAqbG9va3VwID09IE5VTEwpLCBhbmQgJ2UnIGlzIHRoZSBwb2ludGVyIHRvIHRoZQorICogbmV3bHkgY3JlYXRlZCBlbnRyeQorICovCitzdGF0aWMgdm9pZAorX2NhY2hlX2FkZF9wKCBDYWNoZSogICBjYWNoZSwKKyAgICAgICAgICAgICAgRW50cnkqKiAgbG9va3VwLAorICAgICAgICAgICAgICBFbnRyeSogICBlICkKK3sKKyAgICAqbG9va3VwID0gZTsKKyAgICBlLT5pZCA9ICsrY2FjaGUtPmxhc3RfaWQ7CisgICAgZW50cnlfbXJ1X2FkZChlLCAmY2FjaGUtPm1ydV9saXN0KTsKKyAgICBjYWNoZS0+bnVtX2VudHJpZXMgKz0gMTsKKworICAgIFhMT0coIiVzOiBlbnRyeSAlZCBhZGRlZCAoY291bnQ9JWQpIiwgX19GVU5DVElPTl9fLAorICAgICAgICAgZS0+aWQsIGNhY2hlLT5udW1fZW50cmllcyk7Cit9CisKKy8qIFJlbW92ZSBhbiBleGlzdGluZyBlbnRyeSBmcm9tIHRoZSBoYXNoIHRhYmxlLAorICogJ2xvb2t1cCcgbXVzdCBiZSB0aGUgcmVzdWx0IG9mIGFuIGltbWVkaWF0ZSBwcmV2aW91cworICogYW5kIHN1Y2Nlc2Z1bCBfbG9va3VwX3AoKSBjYWxsLgorICovCitzdGF0aWMgdm9pZAorX2NhY2hlX3JlbW92ZV9wKCBDYWNoZSogICBjYWNoZSwKKyAgICAgICAgICAgICAgICAgRW50cnkqKiAgbG9va3VwICkKK3sKKyAgICBFbnRyeSogIGUgID0gKmxvb2t1cDsKKworICAgIFhMT0coIiVzOiBlbnRyeSAlZCByZW1vdmVkIChjb3VudD0lZCkiLCBfX0ZVTkNUSU9OX18sCisgICAgICAgICBlLT5pZCwgY2FjaGUtPm51bV9lbnRyaWVzLTEpOworCisgICAgZW50cnlfbXJ1X3JlbW92ZShlKTsKKyAgICAqbG9va3VwID0gZS0+aGxpbms7CisgICAgZW50cnlfZnJlZShlKTsKKyAgICBjYWNoZS0+bnVtX2VudHJpZXMgLT0gMTsKK30KKworLyogUmVtb3ZlIHRoZSBvbGRlc3QgZW50cnkgZnJvbSB0aGUgaGFzaCB0YWJsZS4KKyAqLworc3RhdGljIHZvaWQKK19jYWNoZV9yZW1vdmVfb2xkZXN0KCBDYWNoZSogIGNhY2hlICkKK3sKKyAgICBFbnRyeSogICBvbGRlc3QgPSBjYWNoZS0+bXJ1X2xpc3QubXJ1X3ByZXY7CisgICAgRW50cnkqKiAgbG9va3VwID0gX2NhY2hlX2xvb2t1cF9wKGNhY2hlLCBvbGRlc3QpOworCisgICAgaWYgKCpsb29rdXAgPT0gTlVMTCkgeyAvKiBzaG91bGQgbm90IGhhcHBlbiAqLworICAgICAgICBYTE9HKCIlczogT0xERVNUIE5PVCBJTiBIVEFCTEUgPyIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKERFQlVHKSB7CisgICAgICAgIFhMT0coIkNhY2hlIGZ1bGwgLSByZW1vdmluZyBvbGRlc3QiKTsKKyAgICAgICAgWExPR19RVUVSWShvbGRlc3QtPnF1ZXJ5LCBvbGRlc3QtPnF1ZXJ5bGVuKTsKKyAgICB9CisgICAgX2NhY2hlX3JlbW92ZV9wKGNhY2hlLCBsb29rdXApOworfQorCisvKiBSZW1vdmUgYWxsIGV4cGlyZWQgZW50cmllcyBmcm9tIHRoZSBoYXNoIHRhYmxlLgorICovCitzdGF0aWMgdm9pZCBfY2FjaGVfcmVtb3ZlX2V4cGlyZWQoQ2FjaGUqIGNhY2hlKSB7CisgICAgRW50cnkqIGU7CisgICAgdGltZV90IG5vdyA9IF90aW1lX25vdygpOworCisgICAgZm9yIChlID0gY2FjaGUtPm1ydV9saXN0Lm1ydV9uZXh0OyBlICE9ICZjYWNoZS0+bXJ1X2xpc3Q7KSB7CisgICAgICAgIC8vIEVudHJ5IGlzIG9sZCwgcmVtb3ZlCisgICAgICAgIGlmIChub3cgPj0gZS0+ZXhwaXJlcykgeworICAgICAgICAgICAgRW50cnkqKiBsb29rdXAgPSBfY2FjaGVfbG9va3VwX3AoY2FjaGUsIGUpOworICAgICAgICAgICAgaWYgKCpsb29rdXAgPT0gTlVMTCkgeyAvKiBzaG91bGQgbm90IGhhcHBlbiAqLworICAgICAgICAgICAgICAgIFhMT0coIiVzOiBFTlRSWSBOT1QgSU4gSFRBQkxFID8iLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGUgPSBlLT5tcnVfbmV4dDsKKyAgICAgICAgICAgIF9jYWNoZV9yZW1vdmVfcChjYWNoZSwgbG9va3VwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGUgPSBlLT5tcnVfbmV4dDsKKyAgICAgICAgfQorICAgIH0KK30KKworUmVzb2x2Q2FjaGVTdGF0dXMKK19yZXNvbHZfY2FjaGVfbG9va3VwKCB1bnNpZ25lZCAgICAgICAgICAgICAgbmV0aWQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogICAgICAgICAgIHF1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICBxdWVyeWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICAgICAgYW5zd2VyLAorICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICBhbnN3ZXJzaXplLAorICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICphbnN3ZXJsZW4gKQoreworICAgIEVudHJ5ICAgICAga2V5WzFdOworICAgIEVudHJ5KiogICAgbG9va3VwOworICAgIEVudHJ5KiAgICAgZTsKKyAgICB0aW1lX3QgICAgIG5vdzsKKyAgICBDYWNoZSogICAgIGNhY2hlOworCisgICAgUmVzb2x2Q2FjaGVTdGF0dXMgIHJlc3VsdCA9IFJFU09MVl9DQUNIRV9OT1RGT1VORDsKKworICAgIFhMT0coIiVzOiBsb29rdXAiLCBfX0ZVTkNUSU9OX18pOworICAgIFhMT0dfUVVFUlkocXVlcnksIHF1ZXJ5bGVuKTsKKworICAgIC8qIHdlIGRvbid0IGNhY2hlIG1hbGZvcm1lZCBxdWVyaWVzICovCisgICAgaWYgKCFlbnRyeV9pbml0X2tleShrZXksIHF1ZXJ5LCBxdWVyeWxlbikpIHsKKyAgICAgICAgWExPRygiJXM6IHVuc3VwcG9ydGVkIHF1ZXJ5IiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0dXJuIFJFU09MVl9DQUNIRV9VTlNVUFBPUlRFRDsKKyAgICB9CisgICAgLyogbG9va3VwIGNhY2hlICovCisgICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7CisKKyAgICBjYWNoZSA9IF9maW5kX25hbWVkX2NhY2hlX2xvY2tlZChuZXRpZCk7CisgICAgaWYgKGNhY2hlID09IE5VTEwpIHsKKyAgICAgICAgcmVzdWx0ID0gUkVTT0xWX0NBQ0hFX1VOU1VQUE9SVEVEOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBfbG9va3VwX3AgdG8gdW5kZXJzdGFuZCB0aGlzLgorICAgICAqIHRoZSBmdW5jdGlvbiBhbHdheXMgcmV0dXJuIGEgbm9uLU5VTEwgcG9pbnRlci4KKyAgICAgKi8KKyAgICBsb29rdXAgPSBfY2FjaGVfbG9va3VwX3AoY2FjaGUsIGtleSk7CisgICAgZSAgICAgID0gKmxvb2t1cDsKKworICAgIGlmIChlID09IE5VTEwpIHsKKyAgICAgICAgWExPRyggIk5PVCBJTiBDQUNIRSIpOworICAgICAgICAvLyBjYWxsaW5nIHRocmVhZCB3aWxsIHdhaXQgaWYgYW4gb3V0c3RhbmRpbmcgcmVxdWVzdCBpcyBmb3VuZAorICAgICAgICAvLyB0aGF0IG1hdGNoaW5nIHRoaXMgcXVlcnkKKyAgICAgICAgaWYgKCFfY2FjaGVfY2hlY2tfcGVuZGluZ19yZXF1ZXN0X2xvY2tlZCgmY2FjaGUsIGtleSwgbmV0aWQpIHx8IGNhY2hlID09IE5VTEwpIHsKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvb2t1cCA9IF9jYWNoZV9sb29rdXBfcChjYWNoZSwga2V5KTsKKyAgICAgICAgICAgIGUgPSAqbG9va3VwOworICAgICAgICAgICAgaWYgKGUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIG5vdyA9IF90aW1lX25vdygpOworCisgICAgLyogcmVtb3ZlIHN0YWxlIGVudHJpZXMgaGVyZSAqLworICAgIGlmIChub3cgPj0gZS0+ZXhwaXJlcykgeworICAgICAgICBYTE9HKCAiIE5PVCBJTiBDQUNIRSAoU1RBTEUgRU5UUlkgJXAgRElTQ0FSREVEKSIsICpsb29rdXAgKTsKKyAgICAgICAgWExPR19RVUVSWShlLT5xdWVyeSwgZS0+cXVlcnlsZW4pOworICAgICAgICBfY2FjaGVfcmVtb3ZlX3AoY2FjaGUsIGxvb2t1cCk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAqYW5zd2VybGVuID0gZS0+YW5zd2VybGVuOworICAgIGlmIChlLT5hbnN3ZXJsZW4gPiBhbnN3ZXJzaXplKSB7CisgICAgICAgIC8qIE5PVEU6IHdlIHJldHVybiBVTlNVUFBPUlRFRCBpZiB0aGUgYW5zd2VyIGJ1ZmZlciBpcyB0b28gc2hvcnQgKi8KKyAgICAgICAgcmVzdWx0ID0gUkVTT0xWX0NBQ0hFX1VOU1VQUE9SVEVEOworICAgICAgICBYTE9HKCIgQU5TV0VSIFRPTyBMT05HIik7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBtZW1jcHkoIGFuc3dlciwgZS0+YW5zd2VyLCBlLT5hbnN3ZXJsZW4gKTsKKworICAgIC8qIGJ1bXAgdXAgdGhpcyBlbnRyeSB0byB0aGUgdG9wIG9mIHRoZSBNUlUgbGlzdCAqLworICAgIGlmIChlICE9IGNhY2hlLT5tcnVfbGlzdC5tcnVfbmV4dCkgeworICAgICAgICBlbnRyeV9tcnVfcmVtb3ZlKCBlICk7CisgICAgICAgIGVudHJ5X21ydV9hZGQoIGUsICZjYWNoZS0+bXJ1X2xpc3QgKTsKKyAgICB9CisKKyAgICBYTE9HKCAiRk9VTkQgSU4gQ0FDSEUgZW50cnk9JXAiLCBlICk7CisgICAgcmVzdWx0ID0gUkVTT0xWX0NBQ0hFX0ZPVU5EOworCitFeGl0OgorICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCit2b2lkCitfcmVzb2x2X2NhY2hlX2FkZCggdW5zaWduZWQgICAgICAgICAgICAgIG5ldGlkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICAgICAgICAgICBxdWVyeSwKKyAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgcXVlcnlsZW4sCisgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogICAgICAgICAgIGFuc3dlciwKKyAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgYW5zd2VybGVuICkKK3sKKyAgICBFbnRyeSAgICBrZXlbMV07CisgICAgRW50cnkqICAgZTsKKyAgICBFbnRyeSoqICBsb29rdXA7CisgICAgdV9sb25nICAgdHRsOworICAgIENhY2hlKiAgIGNhY2hlID0gTlVMTDsKKworICAgIC8qIGRvbid0IGFzc3VtZSB0aGF0IHRoZSBxdWVyeSBoYXMgYWxyZWFkeSBiZWVuIGNhY2hlZAorICAgICAqLworICAgIGlmICghZW50cnlfaW5pdF9rZXkoIGtleSwgcXVlcnksIHF1ZXJ5bGVuICkpIHsKKyAgICAgICAgWExPRyggIiVzOiBwYXNzZWQgaW52YWxpZCBxdWVyeSA/IiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOworCisgICAgY2FjaGUgPSBfZmluZF9uYW1lZF9jYWNoZV9sb2NrZWQobmV0aWQpOworICAgIGlmIChjYWNoZSA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBYTE9HKCAiJXM6IHF1ZXJ5OiIsIF9fRlVOQ1RJT05fXyApOworICAgIFhMT0dfUVVFUlkocXVlcnkscXVlcnlsZW4pOworICAgIFhMT0dfQU5TV0VSKGFuc3dlciwgYW5zd2VybGVuKTsKKyNpZiBERUJVR19EQVRBCisgICAgWExPRyggImFuc3dlcjoiKTsKKyAgICBYTE9HX0JZVEVTKGFuc3dlcixhbnN3ZXJsZW4pOworI2VuZGlmCisKKyAgICBsb29rdXAgPSBfY2FjaGVfbG9va3VwX3AoY2FjaGUsIGtleSk7CisgICAgZSAgICAgID0gKmxvb2t1cDsKKworICAgIGlmIChlICE9IE5VTEwpIHsgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KKyAgICAgICAgWExPRygiJXM6IEFMUkVBRFkgSU4gQ0FDSEUgKCVwKSA/IElHTk9SSU5HIEFERCIsCisgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBlKTsKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmIChjYWNoZS0+bnVtX2VudHJpZXMgPj0gY2FjaGUtPm1heF9lbnRyaWVzKSB7CisgICAgICAgIF9jYWNoZV9yZW1vdmVfZXhwaXJlZChjYWNoZSk7CisgICAgICAgIGlmIChjYWNoZS0+bnVtX2VudHJpZXMgPj0gY2FjaGUtPm1heF9lbnRyaWVzKSB7CisgICAgICAgICAgICBfY2FjaGVfcmVtb3ZlX29sZGVzdChjYWNoZSk7CisgICAgICAgIH0KKyAgICAgICAgLyogbmVlZCB0byBsb29rdXAgYWdhaW4gKi8KKyAgICAgICAgbG9va3VwID0gX2NhY2hlX2xvb2t1cF9wKGNhY2hlLCBrZXkpOworICAgICAgICBlICAgICAgPSAqbG9va3VwOworICAgICAgICBpZiAoZSAhPSBOVUxMKSB7CisgICAgICAgICAgICBYTE9HKCIlczogQUxSRUFEWSBJTiBDQUNIRSAoJXApID8gSUdOT1JJTkcgQUREIiwKKyAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGUpOworICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisgICAgfQorCisgICAgdHRsID0gYW5zd2VyX2dldFRUTChhbnN3ZXIsIGFuc3dlcmxlbik7CisgICAgaWYgKHR0bCA+IDApIHsKKyAgICAgICAgZSA9IGVudHJ5X2FsbG9jKGtleSwgYW5zd2VyLCBhbnN3ZXJsZW4pOworICAgICAgICBpZiAoZSAhPSBOVUxMKSB7CisgICAgICAgICAgICBlLT5leHBpcmVzID0gdHRsICsgX3RpbWVfbm93KCk7CisgICAgICAgICAgICBfY2FjaGVfYWRkX3AoY2FjaGUsIGxvb2t1cCwgZSk7CisgICAgICAgIH0KKyAgICB9CisjaWYgREVCVUcKKyAgICBfY2FjaGVfZHVtcF9tcnUoY2FjaGUpOworI2VuZGlmCitFeGl0OgorICAgIGlmIChjYWNoZSAhPSBOVUxMKSB7CisgICAgICBfY2FjaGVfbm90aWZ5X3dhaXRpbmdfdGlkX2xvY2tlZChjYWNoZSwga2V5KTsKKyAgICB9CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIEhlYWQgb2YgdGhlIGxpc3Qgb2YgY2FjaGVzLiAgUHJvdGVjdGVkIGJ5IF9yZXNfY2FjaGVfbGlzdF9sb2NrLgorc3RhdGljIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyBfcmVzX2NhY2hlX2xpc3Q7CisKKy8qIGluc2VydCByZXNvbHZfY2FjaGVfaW5mbyBpbnRvIHRoZSBsaXN0IG9mIHJlc29sdl9jYWNoZV9pbmZvcyAqLworc3RhdGljIHZvaWQgX2luc2VydF9jYWNoZV9pbmZvX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8pOworLyogY3JlYXRlcyBhIHJlc29sdl9jYWNoZV9pbmZvICovCitzdGF0aWMgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBfY3JlYXRlX2NhY2hlX2luZm8oIHZvaWQgKTsKKy8qIGdldHMgYSByZXNvbHZfY2FjaGVfaW5mbyBhc3NvY2lhdGVkIHdpdGggYSBuZXR3b3JrLCBvciBOVUxMIGlmIG5vdCBmb3VuZCAqLworc3RhdGljIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogX2ZpbmRfY2FjaGVfaW5mb19sb2NrZWQodW5zaWduZWQgbmV0aWQpOworLyogbG9vayB1cCB0aGUgbmFtZWQgY2FjaGUsIGFuZCBjcmVhdGVzIG9uZSBpZiBuZWVkZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiBfZ2V0X3Jlc19jYWNoZV9mb3JfbmV0X2xvY2tlZCh1bnNpZ25lZCBuZXRpZCk7CisvKiBlbXB0eSB0aGUgbmFtZWQgY2FjaGUgKi8KK3N0YXRpYyB2b2lkIF9mbHVzaF9jYWNoZV9mb3JfbmV0X2xvY2tlZCh1bnNpZ25lZCBuZXRpZCk7CisvKiBlbXB0eSB0aGUgbmFtZXNlcnZlcnMgc2V0IGZvciB0aGUgbmFtZWQgY2FjaGUgKi8KK3N0YXRpYyB2b2lkIF9mcmVlX25hbWVzZXJ2ZXJzX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8pOworLyogcmV0dXJuIDEgaWYgdGhlIHByb3ZpZGVkIGxpc3Qgb2YgbmFtZSBzZXJ2ZXJzIGRpZmZlcnMgZnJvbSB0aGUgbGlzdCBvZiBuYW1lIHNlcnZlcnMKKyAqIGN1cnJlbnRseSBhdHRhY2hlZCB0byB0aGUgcHJvdmlkZWQgY2FjaGVfaW5mbyAqLworc3RhdGljIGludCBfcmVzb2x2X2lzX25hbWVzZXJ2ZXJzX2VxdWFsX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8sCisgICAgICAgIGNvbnN0IGNoYXIqKiBzZXJ2ZXJzLCBpbnQgbnVtc2VydmVycyk7CisKK3N0YXRpYyB2b2lkCitfcmVzX2NhY2hlX2luaXQodm9pZCkKK3sKKyAgICBjb25zdCBjaGFyKiAgZW52ID0gZ2V0ZW52KENPTkZJR19FTlYpOworCisgICAgaWYgKGVudiAmJiBhdG9pKGVudikgPT0gMCkgeworICAgICAgICAvKiB0aGUgY2FjaGUgaXMgZGlzYWJsZWQgKi8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1lbXNldCgmX3Jlc19jYWNoZV9saXN0LCAwLCBzaXplb2YoX3Jlc19jYWNoZV9saXN0KSk7CisgICAgcHRocmVhZF9tdXRleF9pbml0KCZfcmVzX2NhY2hlX2xpc3RfbG9jaywgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlKgorX2dldF9yZXNfY2FjaGVfZm9yX25ldF9sb2NrZWQodW5zaWduZWQgbmV0aWQpCit7CisgICAgc3RydWN0IHJlc29sdl9jYWNoZSogY2FjaGUgPSBfZmluZF9uYW1lZF9jYWNoZV9sb2NrZWQobmV0aWQpOworICAgIGlmICghY2FjaGUpIHsKKyAgICAgICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBjYWNoZV9pbmZvID0gX2NyZWF0ZV9jYWNoZV9pbmZvKCk7CisgICAgICAgIGlmIChjYWNoZV9pbmZvKSB7CisgICAgICAgICAgICBjYWNoZSA9IF9yZXNvbHZfY2FjaGVfY3JlYXRlKCk7CisgICAgICAgICAgICBpZiAoY2FjaGUpIHsKKyAgICAgICAgICAgICAgICBjYWNoZV9pbmZvLT5jYWNoZSA9IGNhY2hlOworICAgICAgICAgICAgICAgIGNhY2hlX2luZm8tPm5ldGlkID0gbmV0aWQ7CisgICAgICAgICAgICAgICAgX2luc2VydF9jYWNoZV9pbmZvX2xvY2tlZChjYWNoZV9pbmZvKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZnJlZShjYWNoZV9pbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY2FjaGU7Cit9CisKK3ZvaWQKK19yZXNvbHZfZmx1c2hfY2FjaGVfZm9yX25ldCh1bnNpZ25lZCBuZXRpZCkKK3sKKyAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKKworICAgIF9mbHVzaF9jYWNoZV9mb3JfbmV0X2xvY2tlZChuZXRpZCk7CisKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOworfQorCitzdGF0aWMgdm9pZAorX2ZsdXNoX2NhY2hlX2Zvcl9uZXRfbG9ja2VkKHVuc2lnbmVkIG5ldGlkKQoreworICAgIHN0cnVjdCByZXNvbHZfY2FjaGUqIGNhY2hlID0gX2ZpbmRfbmFtZWRfY2FjaGVfbG9ja2VkKG5ldGlkKTsKKyAgICBpZiAoY2FjaGUpIHsKKyAgICAgICAgX2NhY2hlX2ZsdXNoX2xvY2tlZChjYWNoZSk7CisgICAgfQorfQorCit2b2lkIF9yZXNvbHZfZGVsZXRlX2NhY2hlX2Zvcl9uZXQodW5zaWduZWQgbmV0aWQpCit7CisgICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7CisKKyAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIHByZXZfY2FjaGVfaW5mbyA9ICZfcmVzX2NhY2hlX2xpc3Q7CisKKyAgICB3aGlsZSAocHJldl9jYWNoZV9pbmZvLT5uZXh0KSB7CisgICAgICAgIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogY2FjaGVfaW5mbyA9IHByZXZfY2FjaGVfaW5mby0+bmV4dDsKKworICAgICAgICBpZiAoY2FjaGVfaW5mby0+bmV0aWQgPT0gbmV0aWQpIHsKKyAgICAgICAgICAgIHByZXZfY2FjaGVfaW5mby0+bmV4dCA9IGNhY2hlX2luZm8tPm5leHQ7CisgICAgICAgICAgICBfY2FjaGVfZmx1c2hfbG9ja2VkKGNhY2hlX2luZm8tPmNhY2hlKTsKKyAgICAgICAgICAgIGZyZWUoY2FjaGVfaW5mby0+Y2FjaGUtPmVudHJpZXMpOworICAgICAgICAgICAgZnJlZShjYWNoZV9pbmZvLT5jYWNoZSk7CisgICAgICAgICAgICBfZnJlZV9uYW1lc2VydmVyc19sb2NrZWQoY2FjaGVfaW5mbyk7CisgICAgICAgICAgICBmcmVlKGNhY2hlX2luZm8pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwcmV2X2NhY2hlX2luZm8gPSBwcmV2X2NhY2hlX2luZm8tPm5leHQ7CisgICAgfQorCisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKK30KKworc3RhdGljIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyoKK19jcmVhdGVfY2FjaGVfaW5mbyh2b2lkKQoreworICAgIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogY2FjaGVfaW5mbzsKKworICAgIGNhY2hlX2luZm8gPSBjYWxsb2Moc2l6ZW9mKCpjYWNoZV9pbmZvKSwgMSk7CisgICAgcmV0dXJuIGNhY2hlX2luZm87Cit9CisKK3N0YXRpYyB2b2lkCitfaW5zZXJ0X2NhY2hlX2luZm9fbG9ja2VkKHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogY2FjaGVfaW5mbykKK3sKKyAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGxhc3Q7CisKKyAgICBmb3IgKGxhc3QgPSAmX3Jlc19jYWNoZV9saXN0OyBsYXN0LT5uZXh0OyBsYXN0ID0gbGFzdC0+bmV4dCk7CisKKyAgICBsYXN0LT5uZXh0ID0gY2FjaGVfaW5mbzsKKworfQorCitzdGF0aWMgc3RydWN0IHJlc29sdl9jYWNoZSoKK19maW5kX25hbWVkX2NhY2hlX2xvY2tlZCh1bnNpZ25lZCBuZXRpZCkgeworCisgICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBpbmZvID0gX2ZpbmRfY2FjaGVfaW5mb19sb2NrZWQobmV0aWQpOworCisgICAgaWYgKGluZm8gIT0gTlVMTCkgcmV0dXJuIGluZm8tPmNhY2hlOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qCitfZmluZF9jYWNoZV9pbmZvX2xvY2tlZCh1bnNpZ25lZCBuZXRpZCkKK3sKKyAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8gPSBfcmVzX2NhY2hlX2xpc3QubmV4dDsKKworICAgIHdoaWxlIChjYWNoZV9pbmZvKSB7CisgICAgICAgIGlmIChjYWNoZV9pbmZvLT5uZXRpZCA9PSBuZXRpZCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYWNoZV9pbmZvID0gY2FjaGVfaW5mby0+bmV4dDsKKyAgICB9CisgICAgcmV0dXJuIGNhY2hlX2luZm87Cit9CisKK3ZvaWQKK19yZXNvbHZfc2V0X25hbWVzZXJ2ZXJzX2Zvcl9uZXQodW5zaWduZWQgbmV0aWQsIGNvbnN0IGNoYXIqKiBzZXJ2ZXJzLCBpbnQgbnVtc2VydmVycywKKyAgICAgICAgY29uc3QgY2hhciAqZG9tYWlucykKK3sKKyAgICBpbnQgaSwgcnQsIGluZGV4OworICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50czsKKyAgICBjaGFyIHNidWZbTklfTUFYU0VSVl07CisgICAgcmVnaXN0ZXIgY2hhciAqY3A7CisgICAgaW50ICpvZmZzZXQ7CisKKyAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKKworICAgIC8vIGNyZWF0ZXMgdGhlIGNhY2hlIGlmIG5vdCBjcmVhdGVkCisgICAgX2dldF9yZXNfY2FjaGVfZm9yX25ldF9sb2NrZWQobmV0aWQpOworCisgICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBjYWNoZV9pbmZvID0gX2ZpbmRfY2FjaGVfaW5mb19sb2NrZWQobmV0aWQpOworCisgICAgaWYgKGNhY2hlX2luZm8gIT0gTlVMTCAmJgorICAgICAgICAgICAgIV9yZXNvbHZfaXNfbmFtZXNlcnZlcnNfZXF1YWxfbG9ja2VkKGNhY2hlX2luZm8sIHNlcnZlcnMsIG51bXNlcnZlcnMpKSB7CisgICAgICAgIC8vIGZyZWUgY3VycmVudCBiZWZvcmUgYWRkaW5nIG5ldworICAgICAgICBfZnJlZV9uYW1lc2VydmVyc19sb2NrZWQoY2FjaGVfaW5mbyk7CisKKyAgICAgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisgICAgICAgIGhpbnRzLmFpX2ZhbWlseSA9IFBGX1VOU1BFQzsKKyAgICAgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX0RHUkFNOyAvKmR1bW15Ki8KKyAgICAgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9OVU1FUklDSE9TVDsKKyAgICAgICAgc3ByaW50ZihzYnVmLCAiJXUiLCBOQU1FU0VSVkVSX1BPUlQpOworCisgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bXNlcnZlcnMgJiYgaSA8IE1BWE5TOyBpKyspIHsKKyAgICAgICAgICAgIHJ0ID0gZ2V0YWRkcmluZm8oc2VydmVyc1tpXSwgc2J1ZiwgJmhpbnRzLCAmY2FjaGVfaW5mby0+bnNhZGRyaW5mb1tpbmRleF0pOworICAgICAgICAgICAgaWYgKHJ0ID09IDApIHsKKyAgICAgICAgICAgICAgICBjYWNoZV9pbmZvLT5uYW1lc2VydmVyc1tpbmRleF0gPSBzdHJkdXAoc2VydmVyc1tpXSk7CisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgICAgICBYTE9HKCIlczogbmV0aWQgPSAldSwgYWRkciA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIG5ldGlkLCBzZXJ2ZXJzW2ldKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2FjaGVfaW5mby0+bnNhZGRyaW5mb1tpbmRleF0gPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gY29kZSBtb3ZlZCBmcm9tIHJlc19pbml0LmMsIGxvYWRfZG9tYWluX3NlYXJjaF9saXN0CisgICAgICAgIHN0cmxjcHkoY2FjaGVfaW5mby0+ZGVmZG5hbWUsIGRvbWFpbnMsIHNpemVvZihjYWNoZV9pbmZvLT5kZWZkbmFtZSkpOworICAgICAgICBpZiAoKGNwID0gc3RyY2hyKGNhY2hlX2luZm8tPmRlZmRuYW1lLCAnXG4nKSkgIT0gTlVMTCkKKyAgICAgICAgICAgICpjcCA9ICdcMCc7CisgICAgICAgIGNwID0gY2FjaGVfaW5mby0+ZGVmZG5hbWU7CisgICAgICAgIG9mZnNldCA9IGNhY2hlX2luZm8tPmRuc3JjaF9vZmZzZXQ7CisgICAgICAgIHdoaWxlIChvZmZzZXQgPCBjYWNoZV9pbmZvLT5kbnNyY2hfb2Zmc2V0ICsgTUFYRE5TUkNIKSB7CisgICAgICAgICAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykgLyogc2tpcCBsZWFkaW5nIHdoaXRlIHNwYWNlICovCisgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgIGlmICgqY3AgPT0gJ1wwJykgLyogc3RvcCBpZiBub3RoaW5nIG1vcmUgdG8gZG8gKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICpvZmZzZXQrKyA9IGNwIC0gY2FjaGVfaW5mby0+ZGVmZG5hbWU7IC8qIHJlY29yZCB0aGlzIHNlYXJjaCBkb21haW4gKi8KKyAgICAgICAgICAgIHdoaWxlICgqY3ApIHsgLyogemVyby10ZXJtaW5hdGUgaXQgKi8KKyAgICAgICAgICAgICAgICBpZiAoKmNwID09ICcgJ3x8ICpjcCA9PSAnXHQnKSB7CisgICAgICAgICAgICAgICAgICAgICpjcCsrID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNwKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKm9mZnNldCA9IC0xOyAvKiBjYWNoZV9pbmZvLT5kbnNyY2hfb2Zmc2V0IGhhcyBNQVhETlNSQ0grMSBpdGVtcyAqLworCisgICAgICAgIC8vIGZsdXNoIGNhY2hlIHNpbmNlIG5ldyBzZXR0aW5ncworICAgICAgICBfZmx1c2hfY2FjaGVfZm9yX25ldF9sb2NrZWQobmV0aWQpOworCisgICAgfQorCisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKK30KKworc3RhdGljIGludAorX3Jlc29sdl9pc19uYW1lc2VydmVyc19lcXVhbF9sb2NrZWQoc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBjYWNoZV9pbmZvLAorICAgICAgICBjb25zdCBjaGFyKiogc2VydmVycywgaW50IG51bXNlcnZlcnMpCit7CisgICAgaW50IGk7CisgICAgY2hhcioqIG5zOworICAgIGludCBjdXJyZW50c2VydmVyczsKKyAgICBpbnQgZXF1YWwgPSAxOworCisgICAgaWYgKG51bXNlcnZlcnMgPiBNQVhOUykgbnVtc2VydmVycyA9IE1BWE5TOworCisgICAgLy8gRmluZCBvdXQgaG93IG1hbnkgbmFtZXNlcnZlcnMgd2UgaGFkIGJlZm9yZS4KKyAgICBjdXJyZW50c2VydmVycyA9IDA7CisgICAgZm9yIChucyA9IGNhY2hlX2luZm8tPm5hbWVzZXJ2ZXJzOyAqbnM7IG5zKyspCisgICAgICAgIGN1cnJlbnRzZXJ2ZXJzKys7CisKKyAgICBpZiAoY3VycmVudHNlcnZlcnMgIT0gbnVtc2VydmVycykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBDb21wYXJlIGVhY2ggbmFtZSBzZXJ2ZXIgYWdhaW5zdCBjdXJyZW50IG5hbWUgc2VydmVycy4KKyAgICAvLyBUT0RPOiB0aGlzIGlzIGluY29ycmVjdCBpZiB0aGUgbGlzdCBvZiBjdXJyZW50IG9yIHByZXZpb3VzIG5hbWVzZXJ2ZXJzCisgICAgLy8gY29udGFpbnMgZHVwbGljYXRlcy4gVGhpcyBkb2VzIG5vdCByZWFsbHkgbWF0dGVyIGJlY2F1c2UgdGhlIGZyYW1ld29yaworICAgIC8vIGZpbHRlcnMgb3V0IGR1cGxpY2F0ZXMsIGJ1dCB3ZSBzaG91bGQgcHJvYmFibHkgZml4IGl0LiBJdCdzIGFsc28KKyAgICAvLyBpbnNlbnNpdGl2ZSB0byB0aGUgb3JkZXIgb2YgdGhlIG5hbWVzZXJ2ZXJzOyB3ZSBzaG91bGQgcHJvYmFibHkgZml4IHRoYXQKKyAgICAvLyB0b28uCisgICAgZm9yIChpID0gMDsgaSA8IG51bXNlcnZlcnMgJiYgZXF1YWw7IGkrKykgeworICAgICAgICBucyA9IGNhY2hlX2luZm8tPm5hbWVzZXJ2ZXJzOworICAgICAgICBlcXVhbCA9IDA7CisgICAgICAgIHdoaWxlKCpucykgeworICAgICAgICAgICAgaWYgKHN0cmNtcCgqbnMsIHNlcnZlcnNbaV0pID09IDApIHsKKyAgICAgICAgICAgICAgICBlcXVhbCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBucysrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVxdWFsOworfQorCitzdGF0aWMgdm9pZAorX2ZyZWVfbmFtZXNlcnZlcnNfbG9ja2VkKHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogY2FjaGVfaW5mbykKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IE1BWE5TOyBpKyspIHsKKyAgICAgICAgZnJlZShjYWNoZV9pbmZvLT5uYW1lc2VydmVyc1tpXSk7CisgICAgICAgIGNhY2hlX2luZm8tPm5hbWVzZXJ2ZXJzW2ldID0gTlVMTDsKKyAgICAgICAgaWYgKGNhY2hlX2luZm8tPm5zYWRkcmluZm9baV0gIT0gTlVMTCkgeworICAgICAgICAgICAgZnJlZWFkZHJpbmZvKGNhY2hlX2luZm8tPm5zYWRkcmluZm9baV0pOworICAgICAgICAgICAgY2FjaGVfaW5mby0+bnNhZGRyaW5mb1tpXSA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQKK19yZXNvbHZfcG9wdWxhdGVfcmVzX2Zvcl9uZXQocmVzX3N0YXRlIHN0YXRwKQoreworICAgIGlmIChzdGF0cCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKKworICAgIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogaW5mbyA9IF9maW5kX2NhY2hlX2luZm9fbG9ja2VkKHN0YXRwLT5uZXRpZCk7CisgICAgaWYgKGluZm8gIT0gTlVMTCkgeworICAgICAgICBpbnQgbnNlcnY7CisgICAgICAgIHN0cnVjdCBhZGRyaW5mbyogYWk7CisgICAgICAgIFhMT0coIiVzOiAldVxuIiwgX19GVU5DVElPTl9fLCBzdGF0cC0+bmV0aWQpOworICAgICAgICBmb3IgKG5zZXJ2ID0gMDsgbnNlcnYgPCBNQVhOUzsgbnNlcnYrKykgeworICAgICAgICAgICAgYWkgPSBpbmZvLT5uc2FkZHJpbmZvW25zZXJ2XTsKKyAgICAgICAgICAgIGlmIChhaSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoc2l6ZV90KSBhaS0+YWlfYWRkcmxlbiA8PSBzaXplb2Yoc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzWzBdKSkgeworICAgICAgICAgICAgICAgIGlmIChzdGF0cC0+X3UuX2V4dC5leHQgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tuc2Vydl0sIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbik7CisgICAgICAgICAgICAgICAgICAgIHN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0uc2luX2ZhbWlseSA9IEFGX1VOU1BFQzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHNpemVfdCkgYWktPmFpX2FkZHJsZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PSBzaXplb2Yoc3RhdHAtPm5zYWRkcl9saXN0WzBdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLCBhaS0+YWlfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWktPmFpX2FkZHJsZW4pOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XS5zaW5fZmFtaWx5ID0gQUZfVU5TUEVDOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBYTE9HKCIlczogZm91bmQgdG9vIGxvbmcgYWRkcmxlbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RhdHAtPm5zY291bnQgPSBuc2VydjsKKyAgICAgICAgLy8gbm93IGRvIHNlYXJjaCBkb21haW5zLiAgTm90ZSB0aGF0IHdlIGNhY2hlIHRoZSBvZmZzZXRzIGFzIHRoaXMgY29kZSBydW5zIGFsb3QKKyAgICAgICAgLy8gYnV0IHRoZSBzZXR0aW5nL29mZnNldC1jb21wdXRlciBvbmx5IHJ1bnMgd2hlbiBzZXQvY2hhbmdlZAorICAgICAgICBzdHJsY3B5KHN0YXRwLT5kZWZkbmFtZSwgaW5mby0+ZGVmZG5hbWUsIHNpemVvZihzdGF0cC0+ZGVmZG5hbWUpKTsKKyAgICAgICAgcmVnaXN0ZXIgY2hhciAqKnBwID0gc3RhdHAtPmRuc3JjaDsKKyAgICAgICAgcmVnaXN0ZXIgaW50ICpwID0gaW5mby0+ZG5zcmNoX29mZnNldDsKKyAgICAgICAgd2hpbGUgKHBwIDwgc3RhdHAtPmRuc3JjaCArIE1BWEROU1JDSCAmJiAqcCAhPSAtMSkgeworICAgICAgICAgICAgKnBwKysgPSAmc3RhdHAtPmRlZmRuYW1lWzBdICsgKnArKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOworfQpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvcmVzb2x2L3Jlc19jb21wLmMgYi9saWJjL2Rucy9yZXNvbHYvcmVzX2NvbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODdiMjI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvcmVzb2x2L3Jlc19jb21wLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qCSROZXRCU0Q6IHJlc19jb21wLmMsdiAxLjYgMjAwNC8wNS8yMiAyMzo0NzowOSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg1LCAxOTkzCisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqIAlDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5MyBieSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0CisgKiB0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0CisgKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCisgKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKKyAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX2NvbXAuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX2NvbXAuYyx2IDEuMS4yLjEuNC4xIDIwMDQvMDMvMDkgMDg6MzM6NTQgbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiByZXNfY29tcC5jLHYgMS42IDIwMDQvMDUvMjIgMjM6NDc6MDkgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjZWxzZQorI2luY2x1ZGUgPHJlc29sdi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyoKKyAqIEV4cGFuZCBjb21wcmVzc2VkIGRvbWFpbiBuYW1lICdzcmMnIHRvIGZ1bGwgZG9tYWluIG5hbWUuCisgKiAnbXNnJyBpcyBhIHBvaW50ZXIgdG8gdGhlIGJlZ2luaW5nIG9mIHRoZSBtZXNzYWdlLAorICogJ2VvbScgcG9pbnRzIHRvIHRoZSBmaXJzdCBsb2NhdGlvbiBhZnRlciB0aGUgbWVzc2FnZSwKKyAqICdkc3QnIGlzIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBvZiBzaXplICdkc3RzaXonIGZvciB0aGUgcmVzdWx0LgorICogUmV0dXJuIHNpemUgb2YgY29tcHJlc3NlZCBuYW1lIG9yIC0xIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKyAqLworaW50Citkbl9leHBhbmQoY29uc3QgdV9jaGFyICptc2csIGNvbnN0IHVfY2hhciAqZW9tLCBjb25zdCB1X2NoYXIgKnNyYywKKwkgIGNoYXIgKmRzdCwgaW50IGRzdHNpeikKK3sKKwlpbnQgbiA9IG5zX25hbWVfdW5jb21wcmVzcyhtc2csIGVvbSwgc3JjLCBkc3QsIChzaXplX3QpZHN0c2l6KTsKKworCWlmIChuID4gMCAmJiBkc3RbMF0gPT0gJy4nKQorCQlkc3RbMF0gPSAnXDAnOworCXJldHVybiAobik7Cit9CisKKy8qCisgKiBQYWNrIGRvbWFpbiBuYW1lICdleHBfZG4nIGluIHByZXNlbnRhdGlvbiBmb3JtIGludG8gJ2NvbXBfZG4nLgorICogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBjb21wcmVzc2VkIG5hbWUgb3IgLTEuCisgKiAnbGVuZ3RoJyBpcyB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSAnY29tcF9kbicuCisgKi8KK2ludAorZG5fY29tcChjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0LCBpbnQgZHN0c2l6LAorCXVfY2hhciAqKmRucHRycywgdV9jaGFyICoqbGFzdGRucHRyKQoreworCXJldHVybiAobnNfbmFtZV9jb21wcmVzcyhzcmMsIGRzdCwgKHNpemVfdClkc3RzaXosCisJCQkJIChjb25zdCB1X2NoYXIgKiopZG5wdHJzLAorCQkJCSAoY29uc3QgdV9jaGFyICoqKWxhc3RkbnB0cikpOworfQorCisvKgorICogU2tpcCBvdmVyIGEgY29tcHJlc3NlZCBkb21haW4gbmFtZS4gUmV0dXJuIHRoZSBzaXplIG9yIC0xLgorICovCitpbnQKK2RuX3NraXBuYW1lKGNvbnN0IHVfY2hhciAqcHRyLCBjb25zdCB1X2NoYXIgKmVvbSkgeworCWNvbnN0IHVfY2hhciAqc2F2ZXB0ciA9IHB0cjsKKworCWlmIChuc19uYW1lX3NraXAoJnB0ciwgZW9tKSA9PSAtMSkKKwkJcmV0dXJuICgtMSk7CisJcmV0dXJuIChwdHIgLSBzYXZlcHRyKTsKK30KKworLyoKKyAqIFZlcmlmeSB0aGF0IGEgZG9tYWluIG5hbWUgdXNlcyBhbiBhY2NlcHRhYmxlIGNoYXJhY3RlciBzZXQuCisgKi8KKworLyoKKyAqIE5vdGUgdGhlIGNvbnNwaWN1b3VzIGFic2VuY2Ugb2YgY3R5cGUgbWFjcm9zIGluIHRoZXNlIGRlZmluaXRpb25zLiAgT24KKyAqIG5vbi1BU0NJSSBob3N0cywgd2UgY2FuJ3QgZGVwZW5kIG9uIHN0cmluZyBsaXRlcmFscyBvciBjdHlwZSBtYWNyb3MgdG8KKyAqIHRlbGwgdXMgYW55dGhpbmcgYWJvdXQgbmV0d29yay1mb3JtYXQgZGF0YS4gIFRoZSByZXN0IG9mIHRoZSBCSU5EIHN5c3RlbQorICogaXMgbm90IGNhcmVmdWwgYWJvdXQgdGhpcywgYnV0IGZvciBzb21lIHJlYXNvbiwgd2UncmUgZG9pbmcgaXQgcmlnaHQgaGVyZS4KKyAqLworCisvKiBCSU9OSUM6IFdlIGFsc28gYWNjZXB0IHVuZGVyc2NvcmVzIGluIHRoZSBtaWRkbGUgb2YgbGFiZWxzLgorICogICAgICAgICBUaGlzIGV4dGVuc2lvbiBpcyBuZWVkZWQgdG8gbWFrZSByZXNvbHV0aW9uIG9uIHNvbWUgVlBOIG5ldHdvcmtzCisgKiAgICAgICAgIHdvcmsgcHJvcGVybHkuCisgKi8KKworI2RlZmluZSBQRVJJT0QgMHgyZQorI2RlZmluZQloeXBoZW5jaGFyKGMpICgoYykgPT0gMHgyZCkKKyNkZWZpbmUgYnNsYXNoY2hhcihjKSAoKGMpID09IDB4NWMpCisjZGVmaW5lIHBlcmlvZGNoYXIoYykgKChjKSA9PSBQRVJJT0QpCisjZGVmaW5lIGFzdGVyY2hhcihjKSAoKGMpID09IDB4MmEpCisjZGVmaW5lIGFscGhhY2hhcihjKSAoKChjKSA+PSAweDQxICYmIChjKSA8PSAweDVhKSBcCisJCSAgIHx8ICgoYykgPj0gMHg2MSAmJiAoYykgPD0gMHg3YSkpCisjZGVmaW5lIGRpZ2l0Y2hhcihjKSAoKGMpID49IDB4MzAgJiYgKGMpIDw9IDB4MzkpCisjZGVmaW5lIHVuZGVyc2NvcmVjaGFyKGMpICAoKGMpID09IDB4NWYpCisKKyNkZWZpbmUgYm9yZGVyY2hhcihjKSAoYWxwaGFjaGFyKGMpIHx8IGRpZ2l0Y2hhcihjKSkKKyNkZWZpbmUgbWlkZGxlY2hhcihjKSAoYm9yZGVyY2hhcihjKSB8fCBoeXBoZW5jaGFyKGMpIHx8IHVuZGVyc2NvcmVjaGFyKGMpKQorI2RlZmluZQlkb21haW5jaGFyKGMpICgoYykgPiAweDIwICYmIChjKSA8IDB4N2YpCisKK2ludAorcmVzX2hub2soY29uc3QgY2hhciAqZG4pIHsKKwlpbnQgcGNoID0gUEVSSU9ELCBjaCA9ICpkbisrOworCisJd2hpbGUgKGNoICE9ICdcMCcpIHsKKwkJaW50IG5jaCA9ICpkbisrOworCisJCWlmIChwZXJpb2RjaGFyKGNoKSkgeworCQkJOworCQl9IGVsc2UgaWYgKHBlcmlvZGNoYXIocGNoKSkgeworCQkJaWYgKCFib3JkZXJjaGFyKGNoKSkKKwkJCQlyZXR1cm4gKDApOworCQl9IGVsc2UgaWYgKHBlcmlvZGNoYXIobmNoKSB8fCBuY2ggPT0gJ1wwJykgeworCQkJaWYgKCFib3JkZXJjaGFyKGNoKSkKKwkJCQlyZXR1cm4gKDApOworCQl9IGVsc2UgeworCQkJaWYgKCFtaWRkbGVjaGFyKGNoKSkKKwkJCQlyZXR1cm4gKDApOworCQl9CisJCXBjaCA9IGNoLCBjaCA9IG5jaDsKKwl9CisJcmV0dXJuICgxKTsKK30KKworLyoKKyAqIGhvc3RuYW1lLWxpa2UgKEEsIE1YLCBXS1MpIG93bmVycyBjYW4gaGF2ZSAiKiIgYXMgdGhlaXIgZmlyc3QgbGFiZWwKKyAqIGJ1dCBtdXN0IG90aGVyd2lzZSBiZSBhcyBhIGhvc3QgbmFtZS4KKyAqLworaW50CityZXNfb3dub2soY29uc3QgY2hhciAqZG4pIHsKKwlpZiAoYXN0ZXJjaGFyKGRuWzBdKSkgeworCQlpZiAocGVyaW9kY2hhcihkblsxXSkpCisJCQlyZXR1cm4gKHJlc19obm9rKGRuKzIpKTsKKwkJaWYgKGRuWzFdID09ICdcMCcpCisJCQlyZXR1cm4gKDEpOworCX0KKwlyZXR1cm4gKHJlc19obm9rKGRuKSk7Cit9CisKKy8qCisgKiBTT0EgUk5BTUVzIGFuZCBSUCBSTkFNRXMgY2FuIGhhdmUgYW55IHByaW50YWJsZSBjaGFyYWN0ZXIgaW4gdGhlaXIgZmlyc3QKKyAqIGxhYmVsLCBidXQgdGhlIHJlc3Qgb2YgdGhlIG5hbWUgaGFzIHRvIGxvb2sgbGlrZSBhIGhvc3QgbmFtZS4KKyAqLworaW50CityZXNfbWFpbG9rKGNvbnN0IGNoYXIgKmRuKSB7CisJaW50IGNoLCBlc2NhcGVkID0gMDsKKworCS8qICIuIiBpcyBhIHZhbGlkIG1pc3NpbmcgcmVwcmVzZW50YXRpb24gKi8KKwlpZiAoKmRuID09ICdcMCcpCisJCXJldHVybiAoMSk7CisKKwkvKiBvdGhlcndpc2UgPGxhYmVsPi48aG9zdG5hbWU+ICovCisJd2hpbGUgKChjaCA9ICpkbisrKSAhPSAnXDAnKSB7CisJCWlmICghZG9tYWluY2hhcihjaCkpCisJCQlyZXR1cm4gKDApOworCQlpZiAoIWVzY2FwZWQgJiYgcGVyaW9kY2hhcihjaCkpCisJCQlicmVhazsKKwkJaWYgKGVzY2FwZWQpCisJCQllc2NhcGVkID0gMDsKKwkJZWxzZSBpZiAoYnNsYXNoY2hhcihjaCkpCisJCQllc2NhcGVkID0gMTsKKwl9CisJaWYgKHBlcmlvZGNoYXIoY2gpKQorCQlyZXR1cm4gKHJlc19obm9rKGRuKSk7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgcXVpdGUgbGliZXJhbCwgc2luY2UgUkZDIDEwMzQncyBjaGFyYWN0ZXIgc2V0cyBhcmUgb25seQorICogcmVjb21tZW5kYXRpb25zLgorICovCitpbnQKK3Jlc19kbm9rKGNvbnN0IGNoYXIgKmRuKSB7CisJaW50IGNoOworCisJd2hpbGUgKChjaCA9ICpkbisrKSAhPSAnXDAnKQorCQlpZiAoIWRvbWFpbmNoYXIoY2gpKQorCQkJcmV0dXJuICgwKTsKKwlyZXR1cm4gKDEpOworfQorCisjaWZkZWYgQklORF80X0NPTVBBVAorLyoKKyAqIFRoaXMgbW9kdWxlIG11c3QgZXhwb3J0IHRoZSBmb2xsb3dpbmcgZXh0ZXJuYWxseS12aXNpYmxlIHN5bWJvbHM6CisgKglfX19wdXRsb25nCisgKglfX19wdXRzaG9ydAorICoJX19nZXRsb25nCisgKglfX2dldHNob3J0CisgKiBOb3RlIHRoYXQgb25lIF8gY29tZXMgZnJvbSBDIGFuZCB0aGUgb3RoZXJzIGNvbWUgZnJvbSB1cy4KKyAqLwordm9pZCBfX3B1dGxvbmcodV9pbnQzMl90IHNyYywgdV9jaGFyICpkc3QpIHsgbnNfcHV0MzIoc3JjLCBkc3QpOyB9Cit2b2lkIF9fcHV0c2hvcnQodV9pbnQxNl90IHNyYywgdV9jaGFyICpkc3QpIHsgbnNfcHV0MTYoc3JjLCBkc3QpOyB9CisjaWZuZGVmIF9fdWx0cml4X18KK3VfaW50MzJfdCBfZ2V0bG9uZyhjb25zdCB1X2NoYXIgKnNyYykgeyByZXR1cm4gKG5zX2dldDMyKHNyYykpOyB9Cit1X2ludDE2X3QgX2dldHNob3J0KGNvbnN0IHVfY2hhciAqc3JjKSB7IHJldHVybiAobnNfZ2V0MTYoc3JjKSk7IH0KKyNlbmRpZiAvKl9fdWx0cml4X18qLworI2VuZGlmIC8qQklORF80X0NPTVBBVCovCmRpZmYgLS1naXQgYS9saWJjL2Rucy9yZXNvbHYvcmVzX2RhdGEuYyBiL2xpYmMvZG5zL3Jlc29sdi9yZXNfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYzAyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Rucy9yZXNvbHYvcmVzX2RhdGEuYwpAQCAtMCwwICsxLDMyNyBAQAorLyoJJE5ldEJTRDogcmVzX2RhdGEuYyx2IDEuOCAyMDA0LzA2LzA5IDE4OjA3OjAzIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NS0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiByZXNfZGF0YS5jLHYgMS4xLjIwNi4yIDIwMDQvMDMvMTYgMTI6MzQ6MTggbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiByZXNfZGF0YS5jLHYgMS44IDIwMDQvMDYvMDkgMTg6MDc6MDMgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKworX19MSUJDX0hJRERFTl9fCitjb25zdCBjaGFyICogY29uc3QgX3Jlc19vcGNvZGVzW10gPSB7CisJIlFVRVJZIiwKKwkiSVFVRVJZIiwKKwkiQ1FVRVJZTSIsCisJIkNRVUVSWVUiLAkvKiBleHBlcmltZW50YWwgKi8KKwkiTk9USUZZIiwJLyogZXhwZXJpbWVudGFsICovCisJIlVQREFURSIsCisJIjYiLAorCSI3IiwKKwkiOCIsCisJIjkiLAorCSIxMCIsCisJIjExIiwKKwkiMTIiLAorCSIxMyIsCisJIlpPTkVJTklUIiwKKwkiWk9ORVJFRiIsCit9OworCisjaWZkZWYgQklORF9VUERBVEUKK2NvbnN0IGNoYXIgKiBjb25zdCBfcmVzX3NlY3Rpb25jb2Rlc1tdID0geworCSJaT05FIiwKKwkiUFJFUkVRVUlTSVRFUyIsCisJIlVQREFURSIsCisJIkFERElUSU9OQUwiLAorfTsKKyNlbmRpZgorCisjaWZuZGVmIF9fQklORF9OT1NUQVRJQworZXh0ZXJuIHN0cnVjdCBfX3Jlc19zdGF0ZSBfbnJlczsKKworLyogUHJvdG8uICovCisKK2ludCAgcmVzX291cnNlcnZlcl9wKGNvbnN0IHJlc19zdGF0ZSwgY29uc3Qgc3RydWN0IHNvY2thZGRyICopOworCisjZGVmaW5lIHJlc19uZWVkX2luaXQoKSAgICgoX25yZXMub3B0aW9ucyAmIFJFU19JTklUKSA9PSAwVSkKKworaW50CityZXNfaW5pdCh2b2lkKSB7CisJaW50IHJ2OworCWV4dGVybiBpbnQgX19yZXNfdmluaXQocmVzX3N0YXRlLCBpbnQpOworI2lmZGVmIENPTVBBVF9fUkVTCisJLyoKKwkgKiBDb21wYXRpYmlsaXR5IHdpdGggcHJvZ3JhbSB0aGF0IHdlcmUgYWNjZXNzaW5nIF9yZXMgZGlyZWN0bHkKKwkgKiB0byBzZXQgb3B0aW9ucy4gV2Uga2VlcCBhbm90aGVyIHN0cnVjdCByZXMgdGhhdCBpcyB0aGUgc2FtZQorCSAqIHNpemUgYXMgdGhlIG9yaWdpbmFsIHJlcyBzdHJ1Y3R1cmUsIGFuZCB0aGVuIGNvcHkgZmllbGRzIHRvCisJICogaXQgc28gdGhhdCB3ZSBhY2hpZXZlIHRoZSBzYW1lIGluaXRpYWxpemF0aW9uCisJICovCisJZXh0ZXJuIHZvaWQgKl9fcmVzX2dldF9vbGRfc3RhdGUodm9pZCk7CisJZXh0ZXJuIHZvaWQgX19yZXNfcHV0X29sZF9zdGF0ZSh2b2lkICopOworCXJlc19zdGF0ZSBvcmVzID0gX19yZXNfZ2V0X29sZF9zdGF0ZSgpOworCisJaWYgKG9yZXMtPm9wdGlvbnMgIT0gMCkKKwkJX25yZXMub3B0aW9ucyA9IG9yZXMtPm9wdGlvbnM7CisJaWYgKG9yZXMtPnJldHJhbnMgIT0gMCkKKwkJX25yZXMucmV0cmFucyA9IG9yZXMtPnJldHJhbnM7CisJaWYgKG9yZXMtPnJldHJ5ICE9IDApCisJCV9ucmVzLnJldHJ5ID0gb3Jlcy0+cmV0cnk7CisjZW5kaWYKKworCS8qCisJICogVGhlc2UgdGhyZWUgZmllbGRzIHVzZWQgdG8gYmUgc3RhdGljYWxseSBpbml0aWFsaXplZC4gIFRoaXMgbWFkZQorCSAqIGl0IGhhcmQgdG8gdXNlIHRoaXMgY29kZSBpbiBhIHNoYXJlZCBsaWJyYXJ5LiAgSXQgaXMgbmVjZXNzYXJ5LAorCSAqIG5vdyB0aGF0IHdlJ3JlIGRvaW5nIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24gaGVyZSwgdGhhdCB3ZSBwcmVzZXJ2ZQorCSAqIHRoZSBvbGQgc2VtYW50aWNzOiBpZiBhbiBhcHBsaWNhdGlvbiBtb2RpZmllcyBvbmUgb2YgdGhlc2UgdGhyZWUKKwkgKiBmaWVsZHMgb2YgX3JlcyBiZWZvcmUgcmVzX2luaXQoKSBpcyBjYWxsZWQsIHJlc19pbml0KCkgd2lsbCBub3QKKwkgKiBhbHRlciB0aGVtLiAgT2YgY291cnNlLCBpZiBhbiBhcHBsaWNhdGlvbiBpcyBzZXR0aW5nIHRoZW0gdG8KKwkgKiBfemVyb18gYmVmb3JlIGNhbGxpbmcgcmVzX2luaXQoKSwgaG9waW5nIHRvIG92ZXJyaWRlIHdoYXQgdXNlZAorCSAqIHRvIGJlIHRoZSBzdGF0aWMgZGVmYXVsdCwgd2UgY2FuJ3QgZGV0ZWN0IGl0IGFuZCB1bmV4cGVjdGVkIHJlc3VsdHMKKwkgKiB3aWxsIGZvbGxvdy4gIFplcm8gZm9yIGFueSBvZiB0aGVzZSBmaWVsZHMgd291bGQgbWFrZSBubyBzZW5zZSwKKwkgKiBzbyBvbmUgY2FuIHNhZmVseSBhc3N1bWUgdGhhdCB0aGUgYXBwbGljYXRpb25zIHdlcmUgYWxyZWFkeSBnZXR0aW5nCisJICogdW5leHBlY3RlZCByZXN1bHRzLgorCSAqCisJICogX25yZXMub3B0aW9ucyBpcyB0cmlja3kgc2luY2Ugc29tZSBhcHBzIHdlcmUga25vd24gdG8gZGlkZGxlIHRoZSBiaXRzCisJICogYmVmb3JlIHJlc19pbml0KCkgd2FzIGZpcnN0IGNhbGxlZC4gV2UgY2FuJ3QgcmVwbGljYXRlIHRoYXQgc2VtYW50aWMKKwkgKiB3aXRoIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24gKHRoZXkgbWF5IGhhdmUgdHVybmVkIGJpdHMgb2ZmIHRoYXQgYXJlCisJICogc2V0IGluIFJFU19ERUZBVUxUKS4gIE91ciBzb2x1dGlvbiBpcyB0byBkZWNsYXJlIHN1Y2ggYXBwbGljYXRpb25zCisJICogImJyb2tlbiIuICBUaGV5IGNvdWxkIGZvb2wgdXMgYnkgc2V0dGluZyBSRVNfSU5JVCBidXQgbm9uZSBkbyAoeWV0KS4KKwkgKi8KKwlpZiAoIV9ucmVzLnJldHJhbnMpCisJCV9ucmVzLnJldHJhbnMgPSBSRVNfVElNRU9VVDsKKwlpZiAoIV9ucmVzLnJldHJ5KQorCQlfbnJlcy5yZXRyeSA9IDQ7CisJaWYgKCEoX25yZXMub3B0aW9ucyAmIFJFU19JTklUKSkKKwkJX25yZXMub3B0aW9ucyA9IFJFU19ERUZBVUxUOworCisJLyoKKwkgKiBUaGlzIG9uZSB1c2VkIHRvIGluaXRpYWxpemUgaW1wbGljaXRseSB0byB6ZXJvLCBzbyB1bmxlc3MgdGhlIGFwcAorCSAqIGhhcyBzZXQgaXQgdG8gc29tZXRoaW5nIGluIHBhcnRpY3VsYXIsIHdlIGNhbiByYW5kb21pemUgaXQgbm93LgorCSAqLworCWlmICghX25yZXMuaWQpCisJCV9ucmVzLmlkID0gcmVzX3JhbmRvbWlkKCk7CisKKwlydiA9IF9fcmVzX3Zpbml0KCZfbnJlcywgMSk7CisjaWZkZWYgQ09NUEFUX19SRVMKKwlfX3Jlc19wdXRfb2xkX3N0YXRlKCZfbnJlcyk7CisjZW5kaWYKKwlyZXR1cm4gcnY7Cit9CisKK3ZvaWQKK3BfcXVlcnkoY29uc3QgdV9jaGFyICptc2cpIHsKKwlmcF9xdWVyeShtc2csIHN0ZG91dCk7Cit9CisKK3ZvaWQKK2ZwX3F1ZXJ5KGNvbnN0IHVfY2hhciAqbXNnLCBGSUxFICpmaWxlKSB7CisJZnBfbnF1ZXJ5KG1zZywgUEFDS0VUU1osIGZpbGUpOworfQorCit2b2lkCitmcF9ucXVlcnkoY29uc3QgdV9jaGFyICptc2csIGludCBsZW4sIEZJTEUgKmZpbGUpIHsKKwlpZiAocmVzX25lZWRfaW5pdCgpICYmIHJlc19pbml0KCkgPT0gLTEpCisJCXJldHVybjsKKworCXJlc19wcXVlcnkoJl9ucmVzLCBtc2csIGxlbiwgZmlsZSk7Cit9CisKK2ludAorcmVzX21rcXVlcnkoaW50IG9wLAkJCS8qIG9wY29kZSBvZiBxdWVyeSAqLworCSAgICBjb25zdCBjaGFyICpkbmFtZSwJCS8qIGRvbWFpbiBuYW1lICovCisJICAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJICAgIGNvbnN0IHVfY2hhciAqZGF0YSwJCS8qIHJlc291cmNlIHJlY29yZCBkYXRhICovCisJICAgIGludCBkYXRhbGVuLAkJLyogbGVuZ3RoIG9mIGRhdGEgKi8KKwkgICAgY29uc3QgdV9jaGFyICpuZXdycl9pbiwJLyogbmV3IHJyIGZvciBtb2RpZnkgb3IgYXBwZW5kICovCisJICAgIHVfY2hhciAqYnVmLAkJLyogYnVmZmVyIHRvIHB1dCBxdWVyeSAqLworCSAgICBpbnQgYnVmbGVuKQkJCS8qIHNpemUgb2YgYnVmZmVyICovCit7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCVJFU19TRVRfSF9FUlJOTygmX25yZXMsIE5FVERCX0lOVEVSTkFMKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXJldHVybiAocmVzX25ta3F1ZXJ5KCZfbnJlcywgb3AsIGRuYW1lLCBjbGFzcywgdHlwZSwKKwkJCSAgICAgZGF0YSwgZGF0YWxlbiwKKwkJCSAgICAgbmV3cnJfaW4sIGJ1ZiwgYnVmbGVuKSk7Cit9CisKKyNpZmRlZiBfTElCUkVTT0xWCitpbnQKK3Jlc19ta3VwZGF0ZShuc191cGRyZWMgKnJyZWNwX2luLCB1X2NoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikgeworCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgeworCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7CisJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAocmVzX25ta3VwZGF0ZSgmX25yZXMsIHJyZWNwX2luLCBidWYsIGJ1ZmxlbikpOworfQorI2VuZGlmCisKK2ludAorcmVzX3F1ZXJ5KGNvbnN0IGNoYXIgKm5hbWUsCS8qIGRvbWFpbiBuYW1lICovCisJICBpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLworCSAgdV9jaGFyICphbnN3ZXIsCS8qIGJ1ZmZlciB0byBwdXQgYW5zd2VyICovCisJICBpbnQgYW5zbGVuKQkJLyogc2l6ZSBvZiBhbnN3ZXIgYnVmZmVyICovCit7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCVJFU19TRVRfSF9FUlJOTygmX25yZXMsIE5FVERCX0lOVEVSTkFMKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXJldHVybiAocmVzX25xdWVyeSgmX25yZXMsIG5hbWUsIGNsYXNzLCB0eXBlLCBhbnN3ZXIsIGFuc2xlbikpOworfQorCit2b2lkCityZXNfc2VuZF9zZXRxaG9vayhyZXNfc2VuZF9xaG9vayBob29rKSB7CisJX25yZXMucWhvb2sgPSBob29rOworfQorCit2b2lkCityZXNfc2VuZF9zZXRyaG9vayhyZXNfc2VuZF9yaG9vayBob29rKSB7CisJX25yZXMucmhvb2sgPSBob29rOworfQorCitpbnQKK3Jlc19pc291cnNlcnZlcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmlucCkgeworCXJldHVybiAocmVzX291cnNlcnZlcl9wKCZfbnJlcywgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKShjb25zdCB2b2lkICopaW5wKSk7Cit9CisKK2ludAorcmVzX3NlbmQoY29uc3QgdV9jaGFyICpidWYsIGludCBidWZsZW4sIHVfY2hhciAqYW5zLCBpbnQgYW5zc2l6KSB7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCS8qIGVycm5vIHNob3VsZCBoYXZlIGJlZW4gc2V0IGJ5IHJlc19pbml0KCkgaW4gdGhpcyBjYXNlLiAqLworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKHJlc19uc2VuZCgmX25yZXMsIGJ1ZiwgYnVmbGVuLCBhbnMsIGFuc3NpeikpOworfQorCisjaWZkZWYgX0xJQlJFU09MVgoraW50CityZXNfc2VuZHNpZ25lZChjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgbnNfdHNpZ19rZXkgKmtleSwKKwkgICAgICAgdV9jaGFyICphbnMsIGludCBhbnNzaXopCit7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCS8qIGVycm5vIHNob3VsZCBoYXZlIGJlZW4gc2V0IGJ5IHJlc19pbml0KCkgaW4gdGhpcyBjYXNlLiAqLworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKHJlc19uc2VuZHNpZ25lZCgmX25yZXMsIGJ1ZiwgYnVmbGVuLCBrZXksIGFucywgYW5zc2l6KSk7Cit9CisjZW5kaWYKKwordm9pZAorcmVzX2Nsb3NlKHZvaWQpIHsKKwlyZXNfbmNsb3NlKCZfbnJlcyk7Cit9CisKKyNpZmRlZiBfTElCUkVTT0xWCitpbnQKK3Jlc191cGRhdGUobnNfdXBkcmVjICpycmVjcF9pbikgeworCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgeworCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7CisJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAocmVzX251cGRhdGUoJl9ucmVzLCBycmVjcF9pbiwgTlVMTCkpOworfQorI2VuZGlmCisKK2ludAorcmVzX3NlYXJjaChjb25zdCBjaGFyICpuYW1lLAkvKiBkb21haW4gbmFtZSAqLworCSAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJICAgdV9jaGFyICphbnN3ZXIsCS8qIGJ1ZmZlciB0byBwdXQgYW5zd2VyICovCisJICAgaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyICovCit7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCVJFU19TRVRfSF9FUlJOTygmX25yZXMsIE5FVERCX0lOVEVSTkFMKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJcmV0dXJuIChyZXNfbnNlYXJjaCgmX25yZXMsIG5hbWUsIGNsYXNzLCB0eXBlLCBhbnN3ZXIsIGFuc2xlbikpOworfQorCitpbnQKK3Jlc19xdWVyeWRvbWFpbihjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCBjaGFyICpkb21haW4sCisJCWludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJCXVfY2hhciAqYW5zd2VyLAkJLyogYnVmZmVyIHRvIHB1dCBhbnN3ZXIgKi8KKwkJaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyICovCit7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCVJFU19TRVRfSF9FUlJOTygmX25yZXMsIE5FVERCX0lOVEVSTkFMKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJcmV0dXJuIChyZXNfbnF1ZXJ5ZG9tYWluKCZfbnJlcywgbmFtZSwgZG9tYWluLAorCQkJCSBjbGFzcywgdHlwZSwKKwkJCQkgYW5zd2VyLCBhbnNsZW4pKTsKK30KKworaW50CityZXNfb3B0KGludCBhLCB1X2NoYXIgKmIsIGludCBjLCBpbnQgZCkKK3sKKwlyZXR1cm4gcmVzX25vcHQoJl9ucmVzLCBhLCBiLCBjLCBkKTsKK30KKworY29uc3QgY2hhciAqCitob3N0YWxpYXMoY29uc3QgY2hhciAqbmFtZSkgeworCXJldHVybiBOVUxMOworfQorCisjaWZkZWYgdWx0cml4CitpbnQKK2xvY2FsX2hvc3RuYW1lX2xlbmd0aChjb25zdCBjaGFyICpob3N0bmFtZSkgeworCWludCBsZW5faG9zdCwgbGVuX2RvbWFpbjsKKworCWlmICghKl9ucmVzLmRlZmRuYW1lKQorCQlyZXNfaW5pdCgpOworCWxlbl9ob3N0ID0gc3RybGVuKGhvc3RuYW1lKTsKKwlsZW5fZG9tYWluID0gc3RybGVuKF9ucmVzLmRlZmRuYW1lKTsKKwlpZiAobGVuX2hvc3QgPiBsZW5fZG9tYWluICYmCisJICAgICFzdHJjYXNlY21wKGhvc3RuYW1lICsgbGVuX2hvc3QgLSBsZW5fZG9tYWluLCBfbnJlcy5kZWZkbmFtZSkgJiYKKwkgICAgaG9zdG5hbWVbbGVuX2hvc3QgLSBsZW5fZG9tYWluIC0gMV0gPT0gJy4nKQorCQlyZXR1cm4gKGxlbl9ob3N0IC0gbGVuX2RvbWFpbiAtIDEpOworCXJldHVybiAoMCk7Cit9CisjZW5kaWYgLyp1bHRyaXgqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvZG5zL3Jlc29sdi9yZXNfZGVidWcuYyBiL2xpYmMvZG5zL3Jlc29sdi9yZXNfZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTA1YTVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvcmVzb2x2L3Jlc19kZWJ1Zy5jCkBAIC0wLDAgKzEsMTIzMyBAQAorLyoJJE5ldEJTRDogcmVzX2RlYnVnLmMsdiAxLjEzIDIwMTIvMDYvMjUgMjI6MzI6NDUgYWJzIEV4cCAkCSovCisKKy8qCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDgsIDIwMDkgIEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMyAgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAorICogUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCisgKiBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCisgKiBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KKyAqIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFCisgKiBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCisgKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODUKKyAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKKyAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAorICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisvKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk1IGJ5IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEluYy4KKyAqCisgKiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBJbmMuIChoZXJlaW5hZnRlciBjYWxsZWQgSUJNKSBncmFudHMKKyAqIHBlcm1pc3Npb24gdW5kZXIgaXRzIGNvcHlyaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIFNvZnR3YXJlIHdpdGggb3Igd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCisgKiBhbGwgcGFyYWdyYXBocyBvZiB0aGlzIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgdGhlIG5hbWUgb2YgSUJNCisgKiBub3QgYmUgdXNlZCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIG1hcmtldGluZyBvZiBhbnkgcHJvZHVjdCBpbmNvcnBvcmF0aW5nCisgKiB0aGUgU29mdHdhcmUgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZW9mLCB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCisgKiBwZXJtaXNzaW9uLgorICoKKyAqIFRvIHRoZSBleHRlbnQgaXQgaGFzIGEgcmlnaHQgdG8gZG8gc28sIElCTSBncmFudHMgYW4gaW1tdW5pdHkgZnJvbSBzdWl0CisgKiB1bmRlciBpdHMgcGF0ZW50cywgaWYgYW55LCBmb3IgdGhlIHVzZSwgc2FsZSBvciBtYW51ZmFjdHVyZSBvZiBwcm9kdWN0cyB0bworICogdGhlIGV4dGVudCB0aGF0IHN1Y2ggcHJvZHVjdHMgYXJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgRG9tYWluIE5hbWUgU3lzdGVtCisgKiBkeW5hbWljIHVwZGF0ZXMgaW4gVENQL0lQIG5ldHdvcmtzIGJ5IG1lYW5zIG9mIHRoZSBTb2Z0d2FyZS4gIE5vIGltbXVuaXR5IGlzCisgKiBncmFudGVkIGZvciBhbnkgcHJvZHVjdCBwZXIgc2Ugb3IgZm9yIGFueSBvdGhlciBmdW5jdGlvbiBvZiBhbnkgcHJvZHVjdC4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgQU5EIElCTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLAorICogRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgQVJJU0lORworICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KKyAqIElGIElCTSBJUyBBUFBSSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHNjY3NpZFtdID0gIkAoIylyZXNfZGVidWcuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX2RlYnVnLmMsdiAxLjE5IDIwMDkvMDIvMjYgMTE6MjA6MjAgdGJveCBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IHJlc19kZWJ1Zy5jLHYgMS4xMyAyMDEyLzA2LzI1IDIyOjMyOjQ1IGFicyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworCisKKyNpZmRlZiBTUFJJTlRGX0NIQVIKKyMgZGVmaW5lIFNQUklOVEYoeCkgc3RybGVuKHNwcmludGYvKioveCkKKyNlbHNlCisjIGRlZmluZSBTUFJJTlRGKHgpIHNwcmludGYgeAorI2VuZGlmCisKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgX3Jlc19vcGNvZGVzW107CitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IF9yZXNfc2VjdGlvbmNvZGVzW107CisKKyNpZm5kZWYgX0xJQkMKKy8qCisgKiBQcmludCB0aGUgY3VycmVudCBvcHRpb25zLgorICovCit2b2lkCitmcF9yZXNzdGF0KGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwgRklMRSAqZmlsZSkgeworCXVfbG9uZyBtYXNrOworCisJZnByaW50ZihmaWxlLCAiOzsgcmVzIG9wdGlvbnM6Iik7CisJZm9yIChtYXNrID0gMTsgIG1hc2sgIT0gMFU7ICBtYXNrIDw8PSAxKQorCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBtYXNrKQorCQkJZnByaW50ZihmaWxlLCAiICVzIiwgcF9vcHRpb24obWFzaykpOworCXB1dGMoJ1xuJywgZmlsZSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQKK2RvX3NlY3Rpb24oY29uc3QgcmVzX3N0YXRlIHN0YXRwLAorCSAgIG5zX21zZyAqaGFuZGxlLCBuc19zZWN0IHNlY3Rpb24sCisJICAgaW50IHBmbGFnLCBGSUxFICpmaWxlKQoreworCWludCBuLCBzZmxhZywgcnJudW07CisJaW50IGJ1ZmxlbiA9IDIwNDg7CisJY2hhciAqYnVmOworCW5zX29wY29kZSBvcGNvZGU7CisJbnNfcnIgcnI7CisKKwkvKgorCSAqIFByaW50IGFuc3dlciByZWNvcmRzLgorCSAqLworCXNmbGFnID0gKGludCkoc3RhdHAtPnBmY29kZSAmIHBmbGFnKTsKKwlpZiAoc3RhdHAtPnBmY29kZSAmJiAhc2ZsYWcpCisJCXJldHVybjsKKworCWJ1ZiA9IG1hbGxvYygoc2l6ZV90KWJ1Zmxlbik7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCWZwcmludGYoZmlsZSwgIjs7IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOworCQlyZXR1cm47CisJfQorCisJb3Bjb2RlID0gKG5zX29wY29kZSkgbnNfbXNnX2dldGZsYWcoKmhhbmRsZSwgbnNfZl9vcGNvZGUpOworCXJybnVtID0gMDsKKwlmb3IgKDs7KSB7CisJCWlmIChuc19wYXJzZXJyKGhhbmRsZSwgc2VjdGlvbiwgcnJudW0sICZycikpIHsKKwkJCWlmIChlcnJubyAhPSBFTk9ERVYpCisJCQkJZnByaW50ZihmaWxlLCAiOzsgbnNfcGFyc2VycjogJXNcbiIsCisJCQkJCXN0cmVycm9yKGVycm5vKSk7CisJCQllbHNlIGlmIChycm51bSA+IDAgJiYgc2ZsYWcgIT0gMCAmJgorCQkJCSAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfSEVBRDEpKQorCQkJCXB1dGMoJ1xuJywgZmlsZSk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJaWYgKHJybnVtID09IDAgJiYgc2ZsYWcgIT0gMCAmJiAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfSEVBRDEpKQorCQkJZnByaW50ZihmaWxlLCAiOzsgJXMgU0VDVElPTjpcbiIsCisJCQkJcF9zZWN0aW9uKHNlY3Rpb24sIG9wY29kZSkpOworCQlpZiAoc2VjdGlvbiA9PSBuc19zX3FkKQorCQkJZnByaW50ZihmaWxlLCAiOztcdCVzLCB0eXBlID0gJXMsIGNsYXNzID0gJXNcbiIsCisJCQkJbnNfcnJfbmFtZShyciksCisJCQkJcF90eXBlKG5zX3JyX3R5cGUocnIpKSwKKwkJCQlwX2NsYXNzKG5zX3JyX2NsYXNzKHJyKSkpOworCQllbHNlIGlmIChzZWN0aW9uID09IG5zX3NfYXIgJiYgbnNfcnJfdHlwZShycikgPT0gbnNfdF9vcHQpIHsKKwkJCXNpemVfdCByZGF0YWxlbiwgdHRsOworCQkJdWludDE2X3Qgb3B0Y29kZSwgb3B0bGVuOworCisJCQlyZGF0YWxlbiA9IG5zX3JyX3JkbGVuKHJyKTsKKwkJCXR0bCA9IG5zX3JyX3R0bChycik7CisJCQlmcHJpbnRmKGZpbGUsCisJCQkJIjsgRUROUzogdmVyc2lvbjogJXp1LCB1ZHA9JXUsIGZsYWdzPSUwNHp4XG4iLAorCQkJCSh0dGw+PjE2KSYweGZmLCBuc19ycl9jbGFzcyhyciksIHR0bCYweGZmZmYpOworCQkJd2hpbGUgKHJkYXRhbGVuID49IDQpIHsKKwkJCQljb25zdCB1X2NoYXIgKmNwID0gbnNfcnJfcmRhdGEocnIpOworCQkJCWludCBpOworCisJCQkJR0VUU0hPUlQob3B0Y29kZSwgY3ApOworCQkJCUdFVFNIT1JUKG9wdGxlbiwgY3ApOworCisJCQkJaWYgKG9wdGNvZGUgPT0gTlNfT1BUX05TSUQpIHsKKwkJCQkJZnB1dHMoIjsgTlNJRDogIiwgZmlsZSk7CisJCQkJCWlmIChvcHRsZW4gPT0gMCkgeworCQkJCQkJZnB1dHMoIjsgTlNJRFxuIiwgZmlsZSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlmcHV0cygiOyBOU0lEOiAiLCBmaWxlKTsKKwkJCQkJCWZvciAoaSA9IDA7IGkgPCBvcHRsZW47IGkrKykKKwkJCQkJCQlmcHJpbnRmKGZpbGUsICIlMDJ4ICIsCisJCQkJCQkJCWNwW2ldKTsKKwkJCQkJCWZwdXRzKCIgKCIsZmlsZSk7CisJCQkJCQlmb3IgKGkgPSAwOyBpIDwgb3B0bGVuOyBpKyspCisJCQkJCQkJZnByaW50ZihmaWxlLCAiJWMiLAorCQkJCQkJCQlpc3ByaW50KGNwW2ldKT8KKwkJCQkJCQkJY3BbaV0gOiAnLicpOworCQkJCQkJZnB1dHMoIilcbiIsIGZpbGUpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKG9wdGxlbiA9PSAwKSB7CisJCQkJCQlmcHJpbnRmKGZpbGUsICI7IE9QVD0ldVxuIiwKKwkJCQkJCQlvcHRjb2RlKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWZwcmludGYoZmlsZSwgIjsgT1BUPSV1OiAiLAorCQkJCQkJCW9wdGNvZGUpOworCQkJCQkJZm9yIChpID0gMDsgaSA8IG9wdGxlbjsgaSsrKQorCQkJCQkJCWZwcmludGYoZmlsZSwgIiUwMnggIiwKKwkJCQkJCQkJY3BbaV0pOworCQkJCQkJZnB1dHMoIiAoIixmaWxlKTsKKwkJCQkJCWZvciAoaSA9IDA7IGkgPCBvcHRsZW47IGkrKykKKwkJCQkJCQlmcHJpbnRmKGZpbGUsICIlYyIsCisJCQkJCQkJCWlzcHJpbnQoY3BbaV0pID8KKwkJCQkJCQkJCWNwW2ldIDogJy4nKTsKKwkJCQkJCWZwdXRzKCIpXG4iLCBmaWxlKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlyZGF0YWxlbiAtPSA0ICsgb3B0bGVuOworCQkJfQorCQl9IGVsc2UgeworCQkJbiA9IG5zX3NwcmludHJyKGhhbmRsZSwgJnJyLCBOVUxMLCBOVUxMLAorCQkJCQlidWYsICh1X2ludClidWZsZW4pOworCQkJaWYgKG4gPCAwKSB7CisJCQkJaWYgKGVycm5vID09IEVOT1NQQykgeworCQkJCQlmcmVlKGJ1Zik7CisJCQkJCWJ1ZiA9IE5VTEw7CisJCQkJCWlmIChidWZsZW4gPCAxMzEwNzIpCisJCQkJCQlidWYgPSBtYWxsb2MoKHNpemVfdCkoYnVmbGVuICs9IDEwMjQpKTsKKwkJCQkJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCQkJCQlmcHJpbnRmKGZpbGUsCisJCQkJICAgICAgICAgICAgICAiOzsgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisJCQkJCSAgICAgIHJldHVybjsKKwkJCQkJfQorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJZnByaW50ZihmaWxlLCAiOzsgbnNfc3ByaW50cnI6ICVzXG4iLAorCQkJCQlzdHJlcnJvcihlcnJubykpOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KKwkJCWZwdXRzKGJ1ZiwgZmlsZSk7CisJCQlmcHV0YygnXG4nLCBmaWxlKTsKKwkJfQorCQlycm51bSsrOworCX0KKyBjbGVhbnVwOgorCWlmIChidWYgIT0gTlVMTCkKKwkJZnJlZShidWYpOworfQorCisvKgorICogUHJpbnQgdGhlIGNvbnRlbnRzIG9mIGEgcXVlcnkuCisgKiBUaGlzIGlzIGludGVuZGVkIHRvIGJlIHByaW1hcmlseSBhIGRlYnVnZ2luZyByb3V0aW5lLgorICovCit2b2lkCityZXNfcHF1ZXJ5KGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwgY29uc3QgdV9jaGFyICptc2csIGludCBsZW4sIEZJTEUgKmZpbGUpIHsKKwluc19tc2cgaGFuZGxlOworCWludCBxZGNvdW50LCBhbmNvdW50LCBuc2NvdW50LCBhcmNvdW50OworCXVfaW50IG9wY29kZSwgcmNvZGUsIGlkOworCisJaWYgKG5zX2luaXRwYXJzZShtc2csIGxlbiwgJmhhbmRsZSkgPCAwKSB7CisJCWZwcmludGYoZmlsZSwgIjs7IG5zX2luaXRwYXJzZTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybjsKKwl9CisJb3Bjb2RlID0gbnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX29wY29kZSk7CisJcmNvZGUgPSBuc19tc2dfZ2V0ZmxhZyhoYW5kbGUsIG5zX2ZfcmNvZGUpOworCWlkID0gbnNfbXNnX2lkKGhhbmRsZSk7CisJcWRjb3VudCA9IG5zX21zZ19jb3VudChoYW5kbGUsIG5zX3NfcWQpOworCWFuY291bnQgPSBuc19tc2dfY291bnQoaGFuZGxlLCBuc19zX2FuKTsKKwluc2NvdW50ID0gbnNfbXNnX2NvdW50KGhhbmRsZSwgbnNfc19ucyk7CisJYXJjb3VudCA9IG5zX21zZ19jb3VudChoYW5kbGUsIG5zX3NfYXIpOworCisJLyoKKwkgKiBQcmludCBoZWFkZXIgZmllbGRzLgorCSAqLworCWlmICgoIXN0YXRwLT5wZmNvZGUpIHx8IChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEWCkgfHwgcmNvZGUpCisJCWZwcmludGYoZmlsZSwKKwkJCSI7OyAtPj5IRUFERVI8PC0gb3Bjb2RlOiAlcywgc3RhdHVzOiAlcywgaWQ6ICVkXG4iLAorCQkJX3Jlc19vcGNvZGVzW29wY29kZV0sIHBfcmNvZGUoKGludClyY29kZSksIGlkKTsKKwlpZiAoKCFzdGF0cC0+cGZjb2RlKSB8fCAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfSEVBRFgpKQorCQlwdXRjKCc7JywgZmlsZSk7CisJaWYgKCghc3RhdHAtPnBmY29kZSkgfHwgKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX0hFQUQyKSkgeworCQlmcHJpbnRmKGZpbGUsICI7IGZsYWdzOiIpOworCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX3FyKSkKKwkJCWZwcmludGYoZmlsZSwgIiBxciIpOworCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX2FhKSkKKwkJCWZwcmludGYoZmlsZSwgIiBhYSIpOworCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX3RjKSkKKwkJCWZwcmludGYoZmlsZSwgIiB0YyIpOworCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX3JkKSkKKwkJCWZwcmludGYoZmlsZSwgIiByZCIpOworCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX3JhKSkKKwkJCWZwcmludGYoZmlsZSwgIiByYSIpOworCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX3opKQorCQkJZnByaW50ZihmaWxlLCAiID8/Iik7CisJCWlmIChuc19tc2dfZ2V0ZmxhZyhoYW5kbGUsIG5zX2ZfYWQpKQorCQkJZnByaW50ZihmaWxlLCAiIGFkIik7CisJCWlmIChuc19tc2dfZ2V0ZmxhZyhoYW5kbGUsIG5zX2ZfY2QpKQorCQkJZnByaW50ZihmaWxlLCAiIGNkIik7CisJfQorCWlmICgoIXN0YXRwLT5wZmNvZGUpIHx8IChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEMSkpIHsKKwkJZnByaW50ZihmaWxlLCAiOyAlczogJWQiLAorCQkJcF9zZWN0aW9uKG5zX3NfcWQsIChpbnQpb3Bjb2RlKSwgcWRjb3VudCk7CisJCWZwcmludGYoZmlsZSwgIiwgJXM6ICVkIiwKKwkJCXBfc2VjdGlvbihuc19zX2FuLCAoaW50KW9wY29kZSksIGFuY291bnQpOworCQlmcHJpbnRmKGZpbGUsICIsICVzOiAlZCIsCisJCQlwX3NlY3Rpb24obnNfc19ucywgKGludClvcGNvZGUpLCBuc2NvdW50KTsKKwkJZnByaW50ZihmaWxlLCAiLCAlczogJWQiLAorCQkJcF9zZWN0aW9uKG5zX3NfYXIsIChpbnQpb3Bjb2RlKSwgYXJjb3VudCk7CisJfQorCWlmICgoIXN0YXRwLT5wZmNvZGUpIHx8IChzdGF0cC0+cGZjb2RlICYKKwkJKFJFU19QUkZfSEVBRFggfCBSRVNfUFJGX0hFQUQyIHwgUkVTX1BSRl9IRUFEMSkpKSB7CisJCXB1dGMoJ1xuJyxmaWxlKTsKKwl9CisJLyoKKwkgKiBQcmludCB0aGUgdmFyaW91cyBzZWN0aW9ucy4KKwkgKi8KKwlkb19zZWN0aW9uKHN0YXRwLCAmaGFuZGxlLCBuc19zX3FkLCBSRVNfUFJGX1FVRVMsIGZpbGUpOworCWRvX3NlY3Rpb24oc3RhdHAsICZoYW5kbGUsIG5zX3NfYW4sIFJFU19QUkZfQU5TLCBmaWxlKTsKKwlkb19zZWN0aW9uKHN0YXRwLCAmaGFuZGxlLCBuc19zX25zLCBSRVNfUFJGX0FVVEgsIGZpbGUpOworCWRvX3NlY3Rpb24oc3RhdHAsICZoYW5kbGUsIG5zX3NfYXIsIFJFU19QUkZfQURELCBmaWxlKTsKKwlpZiAocWRjb3VudCA9PSAwICYmIGFuY291bnQgPT0gMCAmJgorCSAgICBuc2NvdW50ID09IDAgJiYgYXJjb3VudCA9PSAwKQorCQlwdXRjKCdcbicsIGZpbGUpOworfQorCitjb25zdCB1X2NoYXIgKgorcF9jZG5uYW1lKGNvbnN0IHVfY2hhciAqY3AsIGNvbnN0IHVfY2hhciAqbXNnLCBpbnQgbGVuLCBGSUxFICpmaWxlKSB7CisJY2hhciBuYW1lW01BWEROQU1FXTsKKwlpbnQgbjsKKworCWlmICgobiA9IGRuX2V4cGFuZChtc2csIG1zZyArIGxlbiwgY3AsIG5hbWUsIChpbnQpc2l6ZW9mIG5hbWUpKSA8IDApCisJCXJldHVybiAoTlVMTCk7CisJaWYgKG5hbWVbMF0gPT0gJ1wwJykKKwkJcHV0YygnLicsIGZpbGUpOworCWVsc2UKKwkJZnB1dHMobmFtZSwgZmlsZSk7CisJcmV0dXJuIChjcCArIG4pOworfQorCitjb25zdCB1X2NoYXIgKgorcF9jZG5hbWUoY29uc3QgdV9jaGFyICpjcCwgY29uc3QgdV9jaGFyICptc2csIEZJTEUgKmZpbGUpIHsKKwlyZXR1cm4gKHBfY2RubmFtZShjcCwgbXNnLCBQQUNLRVRTWiwgZmlsZSkpOworfQorCisvKiBSZXR1cm4gYSBmdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgZnJvbSBhIGNvbXByZXNzZWQgbmFtZSAod2l0aAorICAgbGVuZ3RoIHN1cHBsaWVkKS4gICovCisKK2NvbnN0IHVfY2hhciAqCitwX2Zxbm5hbWUoY29uc3QgdV9jaGFyICpjcCwgY29uc3QgdV9jaGFyICptc2csIGludCBtc2dsZW4sIGNoYXIgKm5hbWUsCisgICAgaW50IG5hbWVsZW4pCit7CisJaW50IG47CisJc2l6ZV90IG5ld2xlbjsKKworCWlmICgobiA9IGRuX2V4cGFuZChtc2csIGNwICsgbXNnbGVuLCBjcCwgbmFtZSwgbmFtZWxlbikpIDwgMCkKKwkJcmV0dXJuIChOVUxMKTsKKwluZXdsZW4gPSBzdHJsZW4obmFtZSk7CisJaWYgKG5ld2xlbiA9PSAwIHx8IG5hbWVbbmV3bGVuIC0gMV0gIT0gJy4nKSB7CisJCWlmICgoaW50KW5ld2xlbiArIDEgPj0gbmFtZWxlbikJLyogTGFjayBzcGFjZSBmb3IgZmluYWwgZG90ICovCisJCQlyZXR1cm4gKE5VTEwpOworCQllbHNlCisJCQlzdHJjcHkobmFtZSArIG5ld2xlbiwgIi4iKTsKKwl9CisJcmV0dXJuIChjcCArIG4pOworfQorCisvKiBYWFg6CXRoZSByZXN0IG9mIHRoZXNlIGZ1bmN0aW9ucyBuZWVkIHRvIGJlY29tZSBsZW5ndGgtbGltaXRlZCwgdG9vLiAqLworCitjb25zdCB1X2NoYXIgKgorcF9mcW5hbWUoY29uc3QgdV9jaGFyICpjcCwgY29uc3QgdV9jaGFyICptc2csIEZJTEUgKmZpbGUpIHsKKwljaGFyIG5hbWVbTUFYRE5BTUVdOworCWNvbnN0IHVfY2hhciAqbjsKKworCW4gPSBwX2Zxbm5hbWUoY3AsIG1zZywgTUFYQ0ROQU1FLCBuYW1lLCAoaW50KXNpemVvZiBuYW1lKTsKKwlpZiAobiA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWZwdXRzKG5hbWUsIGZpbGUpOworCXJldHVybiAobik7Cit9CisKKy8qCisgKiBOYW1lcyBvZiBSUiBjbGFzc2VzIGFuZCBxY2xhc3Nlcy4gIENsYXNzZXMgYW5kIHFjbGFzc2VzIGFyZSB0aGUgc2FtZSwgZXhjZXB0CisgKiB0aGF0IENfQU5ZIGlzIGEgcWNsYXNzIGJ1dCBub3QgYSBjbGFzcy4gIChZb3UgY2FuIGFzayBmb3IgcmVjb3JkcyBvZiBjbGFzcworICogQ19BTlksIGJ1dCB5b3UgY2FuJ3QgaGF2ZSBhbnkgcmVjb3JkcyBvZiB0aGF0IGNsYXNzIGluIHRoZSBkYXRhYmFzZS4pCisgKi8KK2NvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9jbGFzc19zeW1zW10gPSB7CisJe0NfSU4sCQkiSU4iLAkJKGNoYXIgKikwfSwKKwl7Q19DSEFPUywJIkNIIiwJCShjaGFyICopMH0sCisJe0NfQ0hBT1MsCSJDSEFPUyIsCShjaGFyICopMH0sCisJe0NfSFMsCQkiSFMiLAkJKGNoYXIgKikwfSwKKwl7Q19IUywJCSJIRVNJT0QiLAkoY2hhciAqKTB9LAorCXtDX0FOWSwJCSJBTlkiLAkJKGNoYXIgKikwfSwKKwl7Q19OT05FLAkiTk9ORSIsCQkoY2hhciAqKTB9LAorCXtDX0lOLCAJCShjaGFyICopMCwJKGNoYXIgKikwfQorfTsKKworLyoKKyAqIE5hbWVzIG9mIG1lc3NhZ2Ugc2VjdGlvbnMuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3BfZGVmYXVsdF9zZWN0aW9uX3N5bXNbXSA9IHsKKwl7bnNfc19xZCwJIlFVRVJZIiwJKGNoYXIgKikwfSwKKwl7bnNfc19hbiwJIkFOU1dFUiIsCShjaGFyICopMH0sCisJe25zX3NfbnMsCSJBVVRIT1JJVFkiLAkoY2hhciAqKTB9LAorCXtuc19zX2FyLAkiQURESVRJT05BTCIsCShjaGFyICopMH0sCisJezAsICAgICAgICAgICAgIChjaGFyICopMCwJKGNoYXIgKikwfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF91cGRhdGVfc2VjdGlvbl9zeW1zW10gPSB7CisJe1NfWk9ORSwJIlpPTkUiLAkJKGNoYXIgKikwfSwKKwl7U19QUkVSRVEsCSJQUkVSRVFVSVNJVEUiLAkoY2hhciAqKTB9LAorCXtTX1VQREFURSwJIlVQREFURSIsCShjaGFyICopMH0sCisJe1NfQUREVCwJIkFERElUSU9OQUwiLAkoY2hhciAqKTB9LAorCXswLCAgICAgICAgICAgICAoY2hhciAqKTAsCShjaGFyICopMH0KK307CisKK2NvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9rZXlfc3ltc1tdID0geworCXtOU19BTEdfTUQ1UlNBLAkJIlJTQSIsCQkiUlNBIEtFWSB3aXRoIE1ENSBoYXNoIn0sCisJe05TX0FMR19ESCwJCSJESCIsCQkiRGlmZmllIEhlbGxtYW4ifSwKKwl7TlNfQUxHX0RTQSwJCSJEU0EiLAkJIkRpZ2l0YWwgU2lnbmF0dXJlIEFsZ29yaXRobSJ9LAorCXtOU19BTEdfRVhQSVJFX09OTFksCSJFWFBJUkVPTkxZIiwJIk5vIGFsZ29yaXRobSJ9LAorCXtOU19BTEdfUFJJVkFURV9PSUQsCSJQUklWQVRFIiwJIkFsZ29yaXRobSBvYnRhaW5lZCBmcm9tIE9JRCJ9LAorCXswLAkJCU5VTEwsCQlOVUxMfQorfTsKKworY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2NlcnRfc3ltc1tdID0geworCXtjZXJ0X3RfcGtpeCwJIlBLSVgiLAkJIlBLSVggKFguNTA5djMpIENlcnRpZmljYXRlIn0sCisJe2NlcnRfdF9zcGtpLAkiU1BLSSIsCQkiU1BLSSBjZXJ0aWZpY2F0ZSJ9LAorCXtjZXJ0X3RfcGdwLAkiUEdQIiwJCSJQR1AgY2VydGlmaWNhdGUifSwKKwl7Y2VydF90X3VybCwJIlVSTCIsCQkiVVJMIFByaXZhdGUifSwKKwl7Y2VydF90X29pZCwJIk9JRCIsCQkiT0lEIFByaXZhdGUifSwKKwl7MCwJCU5VTEwsCQlOVUxMfQorfTsKKworLyoKKyAqIE5hbWVzIG9mIFJSIHR5cGVzIGFuZCBxdHlwZXMuICBUeXBlcyBhbmQgcXR5cGVzIGFyZSB0aGUgc2FtZSwgZXhjZXB0CisgKiB0aGF0IFRfQU5ZIGlzIGEgcXR5cGUgYnV0IG5vdCBhIHR5cGUuICAoWW91IGNhbiBhc2sgZm9yIHJlY29yZHMgb2YgdHlwZQorICogVF9BTlksIGJ1dCB5b3UgY2FuJ3QgaGF2ZSBhbnkgcmVjb3JkcyBvZiB0aGF0IHR5cGUgaW4gdGhlIGRhdGFiYXNlLikKKyAqLworY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX3R5cGVfc3ltc1tdID0geworCXtuc190X2EsCSJBIiwJCSJhZGRyZXNzIn0sCisJe25zX3RfbnMsCSJOUyIsCQkibmFtZSBzZXJ2ZXIifSwKKwl7bnNfdF9tZCwJIk1EIiwJCSJtYWlsIGRlc3RpbmF0aW9uIChkZXByZWNhdGVkKSJ9LAorCXtuc190X21mLAkiTUYiLAkJIm1haWwgZm9yd2FyZGVyIChkZXByZWNhdGVkKSJ9LAorCXtuc190X2NuYW1lLAkiQ05BTUUiLAkiY2Fub25pY2FsIG5hbWUifSwKKwl7bnNfdF9zb2EsCSJTT0EiLAkJInN0YXJ0IG9mIGF1dGhvcml0eSJ9LAorCXtuc190X21iLAkiTUIiLAkJIm1haWxib3gifSwKKwl7bnNfdF9tZywJIk1HIiwJCSJtYWlsIGdyb3VwIG1lbWJlciJ9LAorCXtuc190X21yLAkiTVIiLAkJIm1haWwgcmVuYW1lIn0sCisJe25zX3RfbnVsbCwJIk5VTEwiLAkJIm51bGwifSwKKwl7bnNfdF93a3MsCSJXS1MiLAkJIndlbGwta25vd24gc2VydmljZSAoZGVwcmVjYXRlZCkifSwKKwl7bnNfdF9wdHIsCSJQVFIiLAkJImRvbWFpbiBuYW1lIHBvaW50ZXIifSwKKwl7bnNfdF9oaW5mbywJIkhJTkZPIiwJImhvc3QgaW5mb3JtYXRpb24ifSwKKwl7bnNfdF9taW5mbywJIk1JTkZPIiwJIm1haWxib3ggaW5mb3JtYXRpb24ifSwKKwl7bnNfdF9teCwJIk1YIiwJCSJtYWlsIGV4Y2hhbmdlciJ9LAorCXtuc190X3R4dCwJIlRYVCIsCQkidGV4dCJ9LAorCXtuc190X3JwLAkiUlAiLAkJInJlc3BvbnNpYmxlIHBlcnNvbiJ9LAorCXtuc190X2Fmc2RiLAkiQUZTREIiLAkiRENFIG9yIEFGUyBzZXJ2ZXIifSwKKwl7bnNfdF94MjUsCSJYMjUiLAkJIlgyNSBhZGRyZXNzIn0sCisJe25zX3RfaXNkbiwJIklTRE4iLAkJIklTRE4gYWRkcmVzcyJ9LAorCXtuc190X3J0LAkiUlQiLAkJInJvdXRlciJ9LAorCXtuc190X25zYXAsCSJOU0FQIiwJCSJuc2FwIGFkZHJlc3MifSwKKwl7bnNfdF9uc2FwX3B0ciwJIk5TQVBfUFRSIiwJImRvbWFpbiBuYW1lIHBvaW50ZXIifSwKKwl7bnNfdF9zaWcsCSJTSUciLAkJInNpZ25hdHVyZSJ9LAorCXtuc190X2tleSwJIktFWSIsCQkia2V5In0sCisJe25zX3RfcHgsCSJQWCIsCQkibWFwcGluZyBpbmZvcm1hdGlvbiJ9LAorCXtuc190X2dwb3MsCSJHUE9TIiwJCSJnZW9ncmFwaGljYWwgcG9zaXRpb24gKHdpdGhkcmF3bikifSwKKwl7bnNfdF9hYWFhLAkiQUFBQSIsCQkiSVB2NiBhZGRyZXNzIn0sCisJe25zX3RfbG9jLAkiTE9DIiwJCSJsb2NhdGlvbiJ9LAorCXtuc190X254dCwJIk5YVCIsCQkibmV4dCB2YWxpZCBuYW1lICh1bmltcGxlbWVudGVkKSJ9LAorCXtuc190X2VpZCwJIkVJRCIsCQkiZW5kcG9pbnQgaWRlbnRpZmllciAodW5pbXBsZW1lbnRlZCkifSwKKwl7bnNfdF9uaW1sb2MsCSJOSU1MT0MiLAkiTklNUk9EIGxvY2F0b3IgKHVuaW1wbGVtZW50ZWQpIn0sCisJe25zX3Rfc3J2LAkiU1JWIiwJCSJzZXJ2ZXIgc2VsZWN0aW9uIn0sCisJe25zX3RfYXRtYSwJIkFUTUEiLAkJIkFUTSBhZGRyZXNzICh1bmltcGxlbWVudGVkKSJ9LAorCXtuc190X25hcHRyLAkiTkFQVFIiLAkibmFwdHIifSwKKwl7bnNfdF9reCwJIktYIiwJCSJrZXkgZXhjaGFuZ2UifSwKKwl7bnNfdF9jZXJ0LAkiQ0VSVCIsCQkiY2VydGlmaWNhdGUifSwKKwl7bnNfdF9hNiwJIkEiLAkJIklQdjYgYWRkcmVzcyAoZXhwZXJtaW5lbnRhbCkifSwKKwl7bnNfdF9kbmFtZSwJIkROQU1FIiwJIm5vbi10ZXJtaW5hbCByZWRpcmVjdGlvbiJ9LAorCXtuc190X29wdCwJIk9QVCIsCQkib3B0In0sCisJe25zX3RfYXBsLAkiYXBsIiwJCSJhcGwifSwKKwl7bnNfdF9kcywJIkRTIiwJCSJkZWxlZ2F0aW9uIHNpZ25lciJ9LAorCXtuc190X3NzaGZwLAkiU1NGUCIsCQkiU1NIIGZpbmdlcnByaW50In0sCisJe25zX3RfaXBzZWNrZXksCSJJUFNFQ0tFWSIsCSJJUFNFQyBrZXkifSwKKwl7bnNfdF9ycnNpZywJIlJSU0lHIiwJInJyc2lnIn0sCisJe25zX3RfbnNlYywJIk5TRUMiLAkJIm5zZWMifSwKKwl7bnNfdF9kbnNrZXksCSJETlNLRVkiLAkiRE5TIGtleSJ9LAorCXtuc190X2RoY2lkLAkiREhDSUQiLCAgICAgICAiZHluYW1pYyBob3N0IGNvbmZpZ3VyYXRpb24gaWRlbnRpZmllciJ9LAorCXtuc190X25zZWMzLAkiTlNFQzMiLAkibnNlYzMifSwKKwl7bnNfdF9uc2VjM3BhcmFtLCAiTlNFQzNQQVJBTSIsICJOU0VDMyBwYXJhbWV0ZXJzIn0sCisJe25zX3RfaGlwLAkiSElQIiwJCSJob3N0IGlkZW50aXR5IHByb3RvY29sIn0sCisJe25zX3Rfc3BmLAkiU1BGIiwJCSJzZW5kZXIgcG9saWN5IGZyYW1ld29yayJ9LAorCXtuc190X3RrZXksCSJUS0VZIiwJCSJ0a2V5In0sCisJe25zX3RfdHNpZywJIlRTSUciLAkJInRyYW5zYWN0aW9uIHNpZ25hdHVyZSJ9LAorCXtuc190X2l4ZnIsCSJJWEZSIiwJCSJpbmNyZW1lbnRhbCB6b25lIHRyYW5zZmVyIn0sCisJe25zX3RfYXhmciwJIkFYRlIiLAkJInpvbmUgdHJhbnNmZXIifSwKKwl7bnNfdF96eGZyLAkiWlhGUiIsCQkiY29tcHJlc3NlZCB6b25lIHRyYW5zZmVyIn0sCisJe25zX3RfbWFpbGIsCSJNQUlMQiIsCSJtYWlsYm94LXJlbGF0ZWQgZGF0YSAoZGVwcmVjYXRlZCkifSwKKwl7bnNfdF9tYWlsYSwJIk1BSUxBIiwJIm1haWwgYWdlbnQgKGRlcHJlY2F0ZWQpIn0sCisJe25zX3RfbmFwdHIsCSJOQVBUUiIsCSJVUk4gTmFtaW5nIEF1dGhvcml0eSJ9LAorCXtuc190X2t4LAkiS1giLAkJIktleSBFeGNoYW5nZSJ9LAorCXtuc190X2NlcnQsCSJDRVJUIiwJCSJDZXJ0aWZpY2F0ZSJ9LAorCXtuc190X2E2LAkiQTYiLAkJIklQdjYgQWRkcmVzcyJ9LAorCXtuc190X2RuYW1lLAkiRE5BTUUiLAkiZG5hbWUifSwKKwl7bnNfdF9zaW5rLAkiU0lOSyIsCQkiS2l0Y2hlbiBTaW5rIChleHBlcmltZW50YWwpIn0sCisJe25zX3Rfb3B0LAkiT1BUIiwJCSJFRE5TIE9wdGlvbnMifSwKKwl7bnNfdF9hbnksCSJBTlkiLAkJIlwiYW55XCIifSwKKwl7bnNfdF9kbHYsCSJETFYiLAkJIkROU1NFQyBsb29rLWFzaWRlIHZhbGlkYXRpb24ifSwKKwl7MCwgCQlOVUxMLAkJTlVMTH0KK307CisKKy8qCisgKiBOYW1lcyBvZiBETlMgcmNvZGVzLgorICovCitjb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3BfcmNvZGVfc3ltc1tdID0geworCXtuc19yX25vZXJyb3IsCSJOT0VSUk9SIiwJCSJubyBlcnJvciJ9LAorCXtuc19yX2Zvcm1lcnIsCSJGT1JNRVJSIiwJCSJmb3JtYXQgZXJyb3IifSwKKwl7bnNfcl9zZXJ2ZmFpbCwJIlNFUlZGQUlMIiwJCSJzZXJ2ZXIgZmFpbGVkIn0sCisJe25zX3Jfbnhkb21haW4sCSJOWERPTUFJTiIsCQkibm8gc3VjaCBkb21haW4gbmFtZSJ9LAorCXtuc19yX25vdGltcGwsCSJOT1RJTVAiLAkJIm5vdCBpbXBsZW1lbnRlZCJ9LAorCXtuc19yX3JlZnVzZWQsCSJSRUZVU0VEIiwJCSJyZWZ1c2VkIn0sCisJe25zX3JfeXhkb21haW4sCSJZWERPTUFJTiIsCQkiZG9tYWluIG5hbWUgZXhpc3RzIn0sCisJe25zX3JfeXhycnNldCwJIllYUlJTRVQiLAkJInJyc2V0IGV4aXN0cyJ9LAorCXtuc19yX254cnJzZXQsCSJOWFJSU0VUIiwJCSJycnNldCBkb2Vzbid0IGV4aXN0In0sCisJe25zX3Jfbm90YXV0aCwJIk5PVEFVVEgiLAkJIm5vdCBhdXRob3JpdGF0aXZlIn0sCisJe25zX3Jfbm90em9uZSwJIk5PVFpPTkUiLAkJIk5vdCBpbiB6b25lIn0sCisJe25zX3JfbWF4LAkiIiwJCQkiIn0sCisJe25zX3JfYmFkc2lnLAkiQkFEU0lHIiwJCSJiYWQgc2lnbmF0dXJlIn0sCisJe25zX3JfYmFka2V5LAkiQkFES0VZIiwJCSJiYWQga2V5In0sCisJe25zX3JfYmFkdGltZSwJIkJBRFRJTUUiLAkJImJhZCB0aW1lIn0sCisJezAsIAkJTlVMTCwJCQlOVUxMfQorfTsKKworaW50CitzeW1fc3Rvbihjb25zdCBzdHJ1Y3QgcmVzX3N5bSAqc3ltcywgY29uc3QgY2hhciAqbmFtZSwgaW50ICpzdWNjZXNzKSB7CisJZm9yICg7IHN5bXMtPm5hbWUgIT0gMDsgc3ltcysrKSB7CisJCWlmIChzdHJjYXNlY21wIChuYW1lLCBzeW1zLT5uYW1lKSA9PSAwKSB7CisJCQlpZiAoc3VjY2VzcykKKwkJCQkqc3VjY2VzcyA9IDE7CisJCQlyZXR1cm4gKHN5bXMtPm51bWJlcik7CisJCX0KKwl9CisJaWYgKHN1Y2Nlc3MpCisJCSpzdWNjZXNzID0gMDsKKwlyZXR1cm4gKHN5bXMtPm51bWJlcik7CQkvKiBUaGUgZGVmYXVsdCB2YWx1ZS4gKi8KK30KKworY29uc3QgY2hhciAqCitzeW1fbnRvcyhjb25zdCBzdHJ1Y3QgcmVzX3N5bSAqc3ltcywgaW50IG51bWJlciwgaW50ICpzdWNjZXNzKSB7CisJc3RhdGljIGNoYXIgdW5uYW1lWzIwXTsKKworCWZvciAoOyBzeW1zLT5uYW1lICE9IDA7IHN5bXMrKykgeworCQlpZiAobnVtYmVyID09IHN5bXMtPm51bWJlcikgeworCQkJaWYgKHN1Y2Nlc3MpCisJCQkJKnN1Y2Nlc3MgPSAxOworCQkJcmV0dXJuIChzeW1zLT5uYW1lKTsKKwkJfQorCX0KKworCXNwcmludGYodW5uYW1lLCAiJWQiLCBudW1iZXIpOwkJLyogWFhYIG5vbnJlZW50cmFudCAqLworCWlmIChzdWNjZXNzKQorCQkqc3VjY2VzcyA9IDA7CisJcmV0dXJuICh1bm5hbWUpOworfQorCitjb25zdCBjaGFyICoKK3N5bV9udG9wKGNvbnN0IHN0cnVjdCByZXNfc3ltICpzeW1zLCBpbnQgbnVtYmVyLCBpbnQgKnN1Y2Nlc3MpIHsKKwlzdGF0aWMgY2hhciB1bm5hbWVbMjBdOworCisJZm9yICg7IHN5bXMtPm5hbWUgIT0gMDsgc3ltcysrKSB7CisJCWlmIChudW1iZXIgPT0gc3ltcy0+bnVtYmVyKSB7CisJCQlpZiAoc3VjY2VzcykKKwkJCQkqc3VjY2VzcyA9IDE7CisJCQlyZXR1cm4gKHN5bXMtPmh1bWFubmFtZSk7CisJCX0KKwl9CisJc3ByaW50Zih1bm5hbWUsICIlZCIsIG51bWJlcik7CQkvKiBYWFggbm9ucmVlbnRyYW50ICovCisJaWYgKHN1Y2Nlc3MpCisJCSpzdWNjZXNzID0gMDsKKwlyZXR1cm4gKHVubmFtZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBzdHJpbmcgZm9yIHRoZSB0eXBlLgorICovCitjb25zdCBjaGFyICoKK3BfdHlwZShpbnQgdHlwZSkgeworCWludCBzdWNjZXNzOworCWNvbnN0IGNoYXIgKnJlc3VsdDsKKwlzdGF0aWMgY2hhciB0eXBlYnVmWzIwXTsKKworCXJlc3VsdCA9IHN5bV9udG9zKF9fcF90eXBlX3N5bXMsIHR5cGUsICZzdWNjZXNzKTsKKwlpZiAoc3VjY2VzcykKKwkJcmV0dXJuIChyZXN1bHQpOworCWlmICh0eXBlIDwgMCB8fCB0eXBlID4gMHhmZmZmKQorCQlyZXR1cm4gKCJCQURUWVBFIik7CisJc3ByaW50Zih0eXBlYnVmLCAiVFlQRSVkIiwgdHlwZSk7CisJcmV0dXJuICh0eXBlYnVmKTsKK30KKworLyoKKyAqIFJldHVybiBhIHN0cmluZyBmb3IgdGhlIHR5cGUuCisgKi8KK2NvbnN0IGNoYXIgKgorcF9zZWN0aW9uKGludCBzZWN0aW9uLCBpbnQgb3Bjb2RlKSB7CisJY29uc3Qgc3RydWN0IHJlc19zeW0gKnN5bWJvbHM7CisKKwlzd2l0Y2ggKG9wY29kZSkgeworCWNhc2UgbnNfb191cGRhdGU6CisJCXN5bWJvbHMgPSBfX3BfdXBkYXRlX3NlY3Rpb25fc3ltczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3ltYm9scyA9IF9fcF9kZWZhdWx0X3NlY3Rpb25fc3ltczsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoc3ltX250b3Moc3ltYm9scywgc2VjdGlvbiwgKGludCAqKTApKTsKK30KKworLyoKKyAqIFJldHVybiBhIG1uZW1vbmljIGZvciBjbGFzcy4KKyAqLworY29uc3QgY2hhciAqCitwX2NsYXNzKGludCBjbGFzcykgeworCWludCBzdWNjZXNzOworCWNvbnN0IGNoYXIgKnJlc3VsdDsKKwlzdGF0aWMgY2hhciBjbGFzc2J1ZlsyMF07CisKKwlyZXN1bHQgPSBzeW1fbnRvcyhfX3BfY2xhc3Nfc3ltcywgY2xhc3MsICZzdWNjZXNzKTsKKwlpZiAoc3VjY2VzcykKKwkJcmV0dXJuIChyZXN1bHQpOworCWlmIChjbGFzcyA8IDAgfHwgY2xhc3MgPiAweGZmZmYpCisJCXJldHVybiAoIkJBRENMQVNTIik7CisJc3ByaW50ZihjbGFzc2J1ZiwgIkNMQVNTJWQiLCBjbGFzcyk7CisJcmV0dXJuIChjbGFzc2J1Zik7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBtbmVtb25pYyBmb3IgYW4gb3B0aW9uCisgKi8KK2NvbnN0IGNoYXIgKgorcF9vcHRpb24odV9sb25nIG9wdGlvbikgeworCXN0YXRpYyBjaGFyIG5idWZbNDBdOworCisJc3dpdGNoIChvcHRpb24pIHsKKwljYXNlIFJFU19JTklUOgkJcmV0dXJuICJpbml0IjsKKwljYXNlIFJFU19ERUJVRzoJCXJldHVybiAiZGVidWciOworCWNhc2UgUkVTX0FBT05MWToJcmV0dXJuICJhYW9ubHkodW5pbXBsKSI7CisJY2FzZSBSRVNfVVNFVkM6CQlyZXR1cm4gInVzZXZjIjsKKwljYXNlIFJFU19QUklNQVJZOglyZXR1cm4gInByaW1yeSh1bmltcGwpIjsKKwljYXNlIFJFU19JR05UQzoJCXJldHVybiAiaWdudGMiOworCWNhc2UgUkVTX1JFQ1VSU0U6CXJldHVybiAicmVjdXJzIjsKKwljYXNlIFJFU19ERUZOQU1FUzoJcmV0dXJuICJkZWZuYW0iOworCWNhc2UgUkVTX1NUQVlPUEVOOglyZXR1cm4gInN0eW9wbiI7CisJY2FzZSBSRVNfRE5TUkNIOglyZXR1cm4gImRuc3JjaCI7CisJY2FzZSBSRVNfSU5TRUNVUkUxOglyZXR1cm4gImluc2VjdXJlMSI7CisJY2FzZSBSRVNfSU5TRUNVUkUyOglyZXR1cm4gImluc2VjdXJlMiI7CisJY2FzZSBSRVNfTk9BTElBU0VTOglyZXR1cm4gIm5vYWxpYXNlcyI7CisJY2FzZSBSRVNfVVNFX0lORVQ2OglyZXR1cm4gImluZXQ2IjsKKyNpZmRlZiBSRVNfVVNFX0VETlMwCS8qIEtBTUUgZXh0ZW5zaW9uICovCisJY2FzZSBSRVNfVVNFX0VETlMwOglyZXR1cm4gImVkbnMwIjsKKyNlbmRpZgorI2lmZGVmIFJFU19VU0VfRE5BTUUKKwljYXNlIFJFU19VU0VfRE5BTUU6CXJldHVybiAiZG5hbWUiOworI2VuZGlmCisjaWZkZWYgUkVTX1VTRV9ETlNTRUMKKwljYXNlIFJFU19VU0VfRE5TU0VDOglyZXR1cm4gImRuc3NlYyI7CisjZW5kaWYKKyNpZmRlZiBSRVNfTk9UTERRVUVSWQorCWNhc2UgUkVTX05PVExEUVVFUlk6CXJldHVybiAibm8tdGxkLXF1ZXJ5IjsKKyNlbmRpZgorI2lmZGVmIFJFU19OT19OSUJCTEUyCisJY2FzZSBSRVNfTk9fTklCQkxFMjoJcmV0dXJuICJuby1uaWJibGUyIjsKKyNlbmRpZgorCQkJCS8qIFhYWCBub25yZWVudHJhbnQgKi8KKwlkZWZhdWx0OgkJc3ByaW50ZihuYnVmLCAiPzB4JWx4PyIsICh1X2xvbmcpb3B0aW9uKTsKKwkJCQlyZXR1cm4gKG5idWYpOworCX0KK30KKworLyoKKyAqIFJldHVybiBhIG1uZW1vbmljIGZvciBhIHRpbWUgdG8gbGl2ZS4KKyAqLworY29uc3QgY2hhciAqCitwX3RpbWUodV9pbnQzMl90IHZhbHVlKSB7CisJc3RhdGljIGNoYXIgbmJ1Zls0MF07CQkvKiBYWFggbm9ucmVlbnRyYW50ICovCisKKwlpZiAobnNfZm9ybWF0X3R0bCgodV9sb25nKXZhbHVlLCBuYnVmLCBzaXplb2YgbmJ1ZikgPCAwKQorCQlzcHJpbnRmKG5idWYsICIldSIsIHZhbHVlKTsKKwlyZXR1cm4gKG5idWYpOworfQorCisvKgorICogUmV0dXJuIGEgc3RyaW5nIGZvciB0aGUgcmNvZGUuCisgKi8KK2NvbnN0IGNoYXIgKgorcF9yY29kZShpbnQgcmNvZGUpIHsKKwlyZXR1cm4gKHN5bV9udG9zKF9fcF9yY29kZV9zeW1zLCByY29kZSwgKGludCAqKTApKTsKK30KKworLyoKKyAqIFJldHVybiBhIHN0cmluZyBmb3IgYSByZXNfc29ja2FkZHJfdW5pb24uCisgKi8KK2NvbnN0IGNoYXIgKgorcF9zb2NrdW4odW5pb24gcmVzX3NvY2thZGRyX3VuaW9uIHUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpIHsKKwljaGFyIHJldFtzaXplb2YgImZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOjEyMy4xMjMuMTIzLjEyMyJdOworCisJc3dpdGNoICh1LnNpbi5zaW5fZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlpbmV0X250b3AoQUZfSU5FVCwgJnUuc2luLnNpbl9hZGRyLCByZXQsIChzb2NrbGVuX3Qpc2l6ZW9mIHJldCk7CisJCWJyZWFrOworI2lmZGVmIEhBU19JTkVUNl9TVFJVQ1RTCisJY2FzZSBBRl9JTkVUNjoKKwkJaW5ldF9udG9wKEFGX0lORVQ2LCAmdS5zaW42LnNpbjZfYWRkciwgcmV0LCBzaXplb2YgcmV0KTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlzcHJpbnRmKHJldCwgIlthZiVkXSIsIHUuc2luLnNpbl9mYW1pbHkpOworCQlicmVhazsKKwl9CisJaWYgKHNpemUgPiAwVSkgeworCQlzdHJuY3B5KGJ1ZiwgcmV0LCBzaXplIC0gMSk7CisJCWJ1ZltzaXplIC0gMV0gPSAnMCc7CisJfQorCXJldHVybiAoYnVmKTsKK30KKworLyoKKyAqIHJvdXRpbmVzIHRvIGNvbnZlcnQgYmV0d2VlbiBvbi10aGUtd2lyZSBSUiBmb3JtYXQgYW5kIHpvbmUgZmlsZSBmb3JtYXQuCisgKiBEb2VzIG5vdCBjb250YWluIGNvbnZlcnNpb24gdG8vZnJvbSBkZWNpbWFsIGRlZ3JlZXM7IGRpdmlkZSBvciBtdWx0aXBseQorICogYnkgNjAqNjAqMTAwMCBmb3IgdGhhdC4KKyAqLworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBvd2Vyb2Z0ZW5bMTBdID0gezEsIDEwLCAxMDAsIDEwMDAsIDEwMDAwLCAxMDAwMDAsCisJCQkJICAgICAgMTAwMDAwMCwxMDAwMDAwMCwxMDAwMDAwMDAsMTAwMDAwMDAwMH07CisKKy8qIHRha2VzIGFuIFhlWSBwcmVjaXNpb24vc2l6ZSB2YWx1ZSwgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK3ByZWNzaXplX250b2EodV9pbnQzMl90IHByZWMpCit7CisJc3RhdGljIGNoYXIgcmV0YnVmW3NpemVvZiAiOTAwMDAwMDAuMDAiXTsJLyogWFhYIG5vbnJlZW50cmFudCAqLworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBtYW50aXNzYSwgZXhwb25lbnQ7CisKKwltYW50aXNzYSA9IChpbnQpKChwcmVjID4+IDQpICYgMHgwZikgJSAxMDsKKwlleHBvbmVudCA9IChpbnQpKChwcmVjID4+IDApICYgMHgwZikgJSAxMDsKKworCXZhbCA9IG1hbnRpc3NhICogcG93ZXJvZnRlbltleHBvbmVudF07CisKKwkodm9pZCkgc3ByaW50ZihyZXRidWYsICIlbHUuJS4ybHUiLCB2YWwvMTAwLCB2YWwlMTAwKTsKKwlyZXR1cm4gKHJldGJ1Zik7Cit9CisKKy8qIGNvbnZlcnRzIGFzY2lpIHNpemUvcHJlY2lzaW9uIFggKiAxMCoqWShjbSkgdG8gMHhYWS4gIG1vdmVzIHBvaW50ZXIuICovCitzdGF0aWMgdV9pbnQ4X3QKK3ByZWNzaXplX2F0b24oY29uc3QgY2hhciAqKnN0cnB0cikgeworCXVuc2lnbmVkIGludCBtdmFsID0gMCwgY212YWwgPSAwOworCXVfaW50OF90IHJldHZhbCA9IDA7CisJY29uc3QgY2hhciAqY3A7CisJaW50IGV4cG9uZW50OworCWludCBtYW50aXNzYTsKKworCWNwID0gKnN0cnB0cjsKKworCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJCW12YWwgPSBtdmFsICogMTAgKyAoKmNwKysgLSAnMCcpOworCisJaWYgKCpjcCA9PSAnLicpIHsJCS8qIGNlbnRpbWV0ZXJzICovCisJCWNwKys7CisJCWlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpIHsKKwkJCWNtdmFsID0gKCpjcCsrIC0gJzAnKSAqIDEwOworCQkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgeworCQkJCWNtdmFsICs9ICgqY3ArKyAtICcwJyk7CisJCQl9CisJCX0KKwl9CisJY212YWwgPSAobXZhbCAqIDEwMCkgKyBjbXZhbDsKKworCWZvciAoZXhwb25lbnQgPSAwOyBleHBvbmVudCA8IDk7IGV4cG9uZW50KyspCisJCWlmIChjbXZhbCA8IHBvd2Vyb2Z0ZW5bZXhwb25lbnQrMV0pCisJCQlicmVhazsKKworCW1hbnRpc3NhID0gY212YWwgLyBwb3dlcm9mdGVuW2V4cG9uZW50XTsKKwlpZiAobWFudGlzc2EgPiA5KQorCQltYW50aXNzYSA9IDk7CisKKwlyZXR2YWwgPSAobWFudGlzc2EgPDwgNCkgfCBleHBvbmVudDsKKworCSpzdHJwdHIgPSBjcDsKKworCXJldHVybiAocmV0dmFsKTsKK30KKworLyogY29udmVydHMgYXNjaWkgbGF0L2xvbiB0byB1bnNpZ25lZCBlbmNvZGVkIDMyLWJpdCBudW1iZXIuICBtb3ZlcyBwb2ludGVyLiAqLworc3RhdGljIHVfaW50MzJfdAorbGF0bG9uMnVsKGNvbnN0IGNoYXIgKipsYXRsb25zdHJwdHIsIGludCAqd2hpY2gpIHsKKwljb25zdCBjaGFyICpjcDsKKwl1X2ludDMyX3QgcmV0dmFsOworCWludCBkZWcgPSAwLCBtaW4gPSAwLCBzZWNzID0gMCwgc2Vjc2ZyYWMgPSAwOworCisJY3AgPSAqbGF0bG9uc3RycHRyOworCisJd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkKKwkJZGVnID0gZGVnICogMTAgKyAoKmNwKysgLSAnMCcpOworCisJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkKKwkJY3ArKzsKKworCWlmICghKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkpCisJCWdvdG8gZm5kaGVtaTsKKworCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJCW1pbiA9IG1pbiAqIDEwICsgKCpjcCsrIC0gJzAnKTsKKworCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJCWNwKys7CisKKwlpZiAoIShpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpKQorCQlnb3RvIGZuZGhlbWk7CisKKwl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKQorCQlzZWNzID0gc2VjcyAqIDEwICsgKCpjcCsrIC0gJzAnKTsKKworCWlmICgqY3AgPT0gJy4nKSB7CQkvKiBkZWNpbWFsIHNlY29uZHMgKi8KKwkJY3ArKzsKKwkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgeworCQkJc2Vjc2ZyYWMgPSAoKmNwKysgLSAnMCcpICogMTAwOworCQkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgeworCQkJCXNlY3NmcmFjICs9ICgqY3ArKyAtICcwJykgKiAxMDsKKwkJCQlpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKSB7CisJCQkJCXNlY3NmcmFjICs9ICgqY3ArKyAtICcwJyk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJd2hpbGUgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCS8qIGlmIGFueSB0cmFpbGluZyBnYXJiYWdlICovCisJCWNwKys7CisKKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApKQorCQljcCsrOworCisgZm5kaGVtaToKKwlzd2l0Y2ggKCpjcCkgeworCWNhc2UgJ04nOiBjYXNlICduJzoKKwljYXNlICdFJzogY2FzZSAnZSc6CisJCXJldHZhbCA9ICgodW5zaWduZWQpMTw8MzEpCisJCQkrICgoKCgoZGVnICogNjApICsgbWluKSAqIDYwKSArIHNlY3MpICogMTAwMCkKKwkJCSsgc2Vjc2ZyYWM7CisJCWJyZWFrOworCWNhc2UgJ1MnOiBjYXNlICdzJzoKKwljYXNlICdXJzogY2FzZSAndyc6CisJCXJldHZhbCA9ICgodW5zaWduZWQpMTw8MzEpCisJCQktICgoKCgoZGVnICogNjApICsgbWluKSAqIDYwKSArIHNlY3MpICogMTAwMCkKKwkJCS0gc2Vjc2ZyYWM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IDA7CS8qIGludmFsaWQgdmFsdWUgLS0gaW5kaWNhdGVzIGVycm9yICovCisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoKmNwKSB7CisJY2FzZSAnTic6IGNhc2UgJ24nOgorCWNhc2UgJ1MnOiBjYXNlICdzJzoKKwkJKndoaWNoID0gMTsJLyogbGF0aXR1ZGUgKi8KKwkJYnJlYWs7CisJY2FzZSAnRSc6IGNhc2UgJ2UnOgorCWNhc2UgJ1cnOiBjYXNlICd3JzoKKwkJKndoaWNoID0gMjsJLyogbG9uZ2l0dWRlICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSp3aGljaCA9IDA7CS8qIGVycm9yICovCisJCWJyZWFrOworCX0KKworCWNwKys7CQkJLyogc2tpcCB0aGUgaGVtaXNwaGVyZSAqLworCisJd2hpbGUgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCS8qIGlmIGFueSB0cmFpbGluZyBnYXJiYWdlICovCisJCWNwKys7CisKKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApKQkvKiBtb3ZlIHRvIG5leHQgZmllbGQgKi8KKwkJY3ArKzsKKworCSpsYXRsb25zdHJwdHIgPSBjcDsKKworCXJldHVybiAocmV0dmFsKTsKK30KKworLyogY29udmVydHMgYSB6b25lIGZpbGUgcmVwcmVzZW50YXRpb24gaW4gYSBzdHJpbmcgdG8gYW4gUkRBVEEgb24tdGhlLXdpcmUKKyAqIHJlcHJlc2VudGF0aW9uLiAqLworaW50Citsb2NfYXRvbihjb25zdCBjaGFyICphc2NpaSwgdV9jaGFyICpiaW5hcnkpCit7CisJY29uc3QgY2hhciAqY3AsICptYXhjcDsKKwl1X2NoYXIgKmJjcDsKKworCXVfaW50MzJfdCBsYXRpdCA9IDAsIGxvbmdpdCA9IDAsIGFsdCA9IDA7CisJdV9pbnQzMl90IGxsdGVtcDEgPSAwLCBsbHRlbXAyID0gMDsKKwlpbnQgYWx0bWV0ZXJzID0gMCwgYWx0ZnJhYyA9IDAsIGFsdHNpZ24gPSAxOworCXVfaW50OF90IGhwID0gMHgxNjsJLyogZGVmYXVsdCA9IDFlNiBjbSA9IDEwMDAwLjAwbSA9IDEwa20gKi8KKwl1X2ludDhfdCB2cCA9IDB4MTM7CS8qIGRlZmF1bHQgPSAxZTMgY20gPSAxMC4wMG0gKi8KKwl1X2ludDhfdCBzaXogPSAweDEyOwkvKiBkZWZhdWx0ID0gMWUyIGNtID0gMS4wMG0gKi8KKwlpbnQgd2hpY2gxID0gMCwgd2hpY2gyID0gMDsKKworCWNwID0gYXNjaWk7CisJbWF4Y3AgPSBjcCArIHN0cmxlbihhc2NpaSk7CisKKwlsbHRlbXAxID0gbGF0bG9uMnVsKCZjcCwgJndoaWNoMSk7CisKKwlsbHRlbXAyID0gbGF0bG9uMnVsKCZjcCwgJndoaWNoMik7CisKKwlzd2l0Y2ggKHdoaWNoMSArIHdoaWNoMikgeworCWNhc2UgMzoJCQkvKiAxICsgMiwgdGhlIG9ubHkgdmFsaWQgY29tYmluYXRpb24gKi8KKwkJaWYgKCh3aGljaDEgPT0gMSkgJiYgKHdoaWNoMiA9PSAyKSkgeyAvKiBub3JtYWwgY2FzZSAqLworCQkJbGF0aXQgPSBsbHRlbXAxOworCQkJbG9uZ2l0ID0gbGx0ZW1wMjsKKwkJfSBlbHNlIGlmICgod2hpY2gxID09IDIpICYmICh3aGljaDIgPT0gMSkpIHsgLyogcmV2ZXJzZWQgKi8KKwkJCWxvbmdpdCA9IGxsdGVtcDE7CisJCQlsYXRpdCA9IGxsdGVtcDI7CisJCX0gZWxzZSB7CS8qIHNvbWUga2luZCBvZiBicm9rZW5uZXNzICovCisJCQlyZXR1cm4gKDApOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CQkvKiB3ZSBkaWRuJ3QgZ2V0IG9uZSBvZiBlYWNoICovCisJCXJldHVybiAoMCk7CisJfQorCisJLyogYWx0aXR1ZGUgKi8KKwlpZiAoKmNwID09ICctJykgeworCQlhbHRzaWduID0gLTE7CisJCWNwKys7CisJfQorCisJaWYgKCpjcCA9PSAnKycpCisJCWNwKys7CisKKwl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKQorCQlhbHRtZXRlcnMgPSBhbHRtZXRlcnMgKiAxMCArICgqY3ArKyAtICcwJyk7CisKKwlpZiAoKmNwID09ICcuJykgewkJLyogZGVjaW1hbCBtZXRlcnMgKi8KKwkJY3ArKzsKKwkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgeworCQkJYWx0ZnJhYyA9ICgqY3ArKyAtICcwJykgKiAxMDsKKwkJCWlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpIHsKKwkJCQlhbHRmcmFjICs9ICgqY3ArKyAtICcwJyk7CisJCQl9CisJCX0KKwl9CisKKwlhbHQgPSAoMTAwMDAwMDAgKyAoYWx0c2lnbiAqIChhbHRtZXRlcnMgKiAxMDAgKyBhbHRmcmFjKSkpOworCisJd2hpbGUgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKSAvKiBpZiB0cmFpbGluZyBnYXJiYWdlIG9yIG0gKi8KKwkJY3ArKzsKKworCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKQorCQljcCsrOworCisJaWYgKGNwID49IG1heGNwKQorCQlnb3RvIGRlZmF1bHRzOworCisJc2l6ID0gcHJlY3NpemVfYXRvbigmY3ApOworCisJd2hpbGUgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKQkvKiBpZiB0cmFpbGluZyBnYXJiYWdlIG9yIG0gKi8KKwkJY3ArKzsKKworCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKQorCQljcCsrOworCisJaWYgKGNwID49IG1heGNwKQorCQlnb3RvIGRlZmF1bHRzOworCisJaHAgPSBwcmVjc2l6ZV9hdG9uKCZjcCk7CisKKwl3aGlsZSAoIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSAmJiAoY3AgPCBtYXhjcCkpCS8qIGlmIHRyYWlsaW5nIGdhcmJhZ2Ugb3IgbSAqLworCQljcCsrOworCisJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSAmJiAoY3AgPCBtYXhjcCkpCisJCWNwKys7CisKKwlpZiAoY3AgPj0gbWF4Y3ApCisJCWdvdG8gZGVmYXVsdHM7CisKKwl2cCA9IHByZWNzaXplX2F0b24oJmNwKTsKKworIGRlZmF1bHRzOgorCisJYmNwID0gYmluYXJ5OworCSpiY3ArKyA9ICh1X2ludDhfdCkgMDsJLyogdmVyc2lvbiBieXRlICovCisJKmJjcCsrID0gc2l6OworCSpiY3ArKyA9IGhwOworCSpiY3ArKyA9IHZwOworCVBVVExPTkcobGF0aXQsYmNwKTsKKwlQVVRMT05HKGxvbmdpdCxiY3ApOworCVBVVExPTkcoYWx0LGJjcCk7CisKKwlyZXR1cm4gKDE2KTsJCS8qIHNpemUgb2YgUlIgaW4gb2N0ZXRzICovCit9CisKKy8qIHRha2VzIGFuIG9uLXRoZS13aXJlIExPQyBSUiBhbmQgZm9ybWF0cyBpdCBpbiBhIGh1bWFuIHJlYWRhYmxlIGZvcm1hdC4gKi8KK2NvbnN0IGNoYXIgKgorbG9jX250b2EoY29uc3QgdV9jaGFyICpiaW5hcnksIGNoYXIgKmFzY2lpKQoreworCXN0YXRpYyBjb25zdCBjaGFyICplcnJvciA9ICI/IjsKKwlzdGF0aWMgY2hhciB0bXBidWZbc2l6ZW9mCisiMTAwMCA2MCA2MC4wMDAgTiAxMDAwIDYwIDYwLjAwMCBXIC0xMjM0NTY3OC4wMG0gOTAwMDAwMDAuMDBtIDkwMDAwMDAwLjAwbSA5MDAwMDAwMC4wMG0iXTsKKwljb25zdCB1X2NoYXIgKmNwID0gYmluYXJ5OworCisJaW50IGxhdGRlZywgbGF0bWluLCBsYXRzZWMsIGxhdHNlY2ZyYWM7CisJaW50IGxvbmdkZWcsIGxvbmdtaW4sIGxvbmdzZWMsIGxvbmdzZWNmcmFjOworCWNoYXIgbm9ydGhzb3V0aCwgZWFzdHdlc3Q7CisJY29uc3QgY2hhciAqYWx0c2lnbjsKKwlpbnQgYWx0bWV0ZXJzLCBhbHRmcmFjOworCisJY29uc3QgdV9pbnQzMl90IHJlZmVyZW5jZWFsdCA9IDEwMDAwMCAqIDEwMDsKKworCWludDMyX3QgbGF0dmFsLCBsb25ndmFsLCBhbHR2YWw7CisJdV9pbnQzMl90IHRlbXBsOworCXVfaW50OF90IHNpemV2YWwsIGhwdmFsLCB2cHZhbCwgdmVyc2lvbnZhbDsKKworCWNoYXIgKnNpemVzdHIsICpocHN0ciwgKnZwc3RyOworCisJdmVyc2lvbnZhbCA9ICpjcCsrOworCisJaWYgKGFzY2lpID09IE5VTEwpCisJCWFzY2lpID0gdG1wYnVmOworCisJaWYgKHZlcnNpb252YWwpIHsKKwkJKHZvaWQpIHNwcmludGYoYXNjaWksICI7IGVycm9yOiB1bmtub3duIExPQyBSUiB2ZXJzaW9uIik7CisJCXJldHVybiAoYXNjaWkpOworCX0KKworCXNpemV2YWwgPSAqY3ArKzsKKworCWhwdmFsID0gKmNwKys7CisJdnB2YWwgPSAqY3ArKzsKKworCUdFVExPTkcodGVtcGwsIGNwKTsKKwlsYXR2YWwgPSAodGVtcGwgLSAoKHVuc2lnbmVkKTE8PDMxKSk7CisKKwlHRVRMT05HKHRlbXBsLCBjcCk7CisJbG9uZ3ZhbCA9ICh0ZW1wbCAtICgodW5zaWduZWQpMTw8MzEpKTsKKworCUdFVExPTkcodGVtcGwsIGNwKTsKKwlpZiAodGVtcGwgPCByZWZlcmVuY2VhbHQpIHsgLyogYmVsb3cgV0dTIDg0IHNwaGVyb2lkICovCisJCWFsdHZhbCA9IHJlZmVyZW5jZWFsdCAtIHRlbXBsOworCQlhbHRzaWduID0gIi0iOworCX0gZWxzZSB7CisJCWFsdHZhbCA9IHRlbXBsIC0gcmVmZXJlbmNlYWx0OworCQlhbHRzaWduID0gIiI7CisJfQorCisJaWYgKGxhdHZhbCA8IDApIHsKKwkJbm9ydGhzb3V0aCA9ICdTJzsKKwkJbGF0dmFsID0gLWxhdHZhbDsKKwl9IGVsc2UKKwkJbm9ydGhzb3V0aCA9ICdOJzsKKworCWxhdHNlY2ZyYWMgPSBsYXR2YWwgJSAxMDAwOworCWxhdHZhbCA9IGxhdHZhbCAvIDEwMDA7CisJbGF0c2VjID0gbGF0dmFsICUgNjA7CisJbGF0dmFsID0gbGF0dmFsIC8gNjA7CisJbGF0bWluID0gbGF0dmFsICUgNjA7CisJbGF0dmFsID0gbGF0dmFsIC8gNjA7CisJbGF0ZGVnID0gbGF0dmFsOworCisJaWYgKGxvbmd2YWwgPCAwKSB7CisJCWVhc3R3ZXN0ID0gJ1cnOworCQlsb25ndmFsID0gLWxvbmd2YWw7CisJfSBlbHNlCisJCWVhc3R3ZXN0ID0gJ0UnOworCisJbG9uZ3NlY2ZyYWMgPSBsb25ndmFsICUgMTAwMDsKKwlsb25ndmFsID0gbG9uZ3ZhbCAvIDEwMDA7CisJbG9uZ3NlYyA9IGxvbmd2YWwgJSA2MDsKKwlsb25ndmFsID0gbG9uZ3ZhbCAvIDYwOworCWxvbmdtaW4gPSBsb25ndmFsICUgNjA7CisJbG9uZ3ZhbCA9IGxvbmd2YWwgLyA2MDsKKwlsb25nZGVnID0gbG9uZ3ZhbDsKKworCWFsdGZyYWMgPSBhbHR2YWwgJSAxMDA7CisJYWx0bWV0ZXJzID0gKGFsdHZhbCAvIDEwMCk7CisKKwlzaXplc3RyID0gc3RyZHVwKHByZWNzaXplX250b2EoKHVfaW50MzJfdClzaXpldmFsKSk7CisJaHBzdHIgPSBzdHJkdXAocHJlY3NpemVfbnRvYSgodV9pbnQzMl90KWhwdmFsKSk7CisJdnBzdHIgPSBzdHJkdXAocHJlY3NpemVfbnRvYSgodV9pbnQzMl90KXZwdmFsKSk7CisKKwlzcHJpbnRmKGFzY2lpLAorCSAgICAiJWQgJS4yZCAlLjJkLiUuM2QgJWMgJWQgJS4yZCAlLjJkLiUuM2QgJWMgJXMlZC4lLjJkbSAlc20gJXNtICVzbSIsCisJCWxhdGRlZywgbGF0bWluLCBsYXRzZWMsIGxhdHNlY2ZyYWMsIG5vcnRoc291dGgsCisJCWxvbmdkZWcsIGxvbmdtaW4sIGxvbmdzZWMsIGxvbmdzZWNmcmFjLCBlYXN0d2VzdCwKKwkJYWx0c2lnbiwgYWx0bWV0ZXJzLCBhbHRmcmFjLAorCQkoc2l6ZXN0ciAhPSBOVUxMKSA/IHNpemVzdHIgOiBlcnJvciwKKwkJKGhwc3RyICE9IE5VTEwpID8gaHBzdHIgOiBlcnJvciwKKwkJKHZwc3RyICE9IE5VTEwpID8gdnBzdHIgOiBlcnJvcik7CisKKwlpZiAoc2l6ZXN0ciAhPSBOVUxMKQorCQlmcmVlKHNpemVzdHIpOworCWlmIChocHN0ciAhPSBOVUxMKQorCQlmcmVlKGhwc3RyKTsKKwlpZiAodnBzdHIgIT0gTlVMTCkKKwkJZnJlZSh2cHN0cik7CisKKwlyZXR1cm4gKGFzY2lpKTsKK30KKworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBETlMgaGllcmFyY2h5IGxldmVscyBpbiB0aGUgbmFtZS4gKi8KK2ludAorZG5fY291bnRfbGFiZWxzKGNvbnN0IGNoYXIgKm5hbWUpIHsKKwlzaXplX3QgbGVuLCBpLCBjb3VudDsKKworCWxlbiA9IHN0cmxlbihuYW1lKTsKKwlmb3IgKGkgPSAwLCBjb3VudCA9IDA7IGkgPCBsZW47IGkrKykgeworCQkvKiBYWFggbmVlZCB0byBjaGVjayBmb3IgXC4gb3IgdXNlIG5hbWVkJ3MgbmxhYmVscygpLiAqLworCQlpZiAobmFtZVtpXSA9PSAnLicpCisJCQljb3VudCsrOworCX0KKworCS8qIGRvbid0IGNvdW50IGluaXRpYWwgd2lsZGNhcmQgKi8KKwlpZiAobmFtZVswXSA9PSAnKicpCisJCWlmIChjb3VudCkKKwkJCWNvdW50LS07CisKKwkvKiBkb24ndCBjb3VudCB0aGUgbnVsbCBsYWJlbCBmb3Igcm9vdC4gKi8KKwkvKiBpZiB0ZXJtaW5hdGluZyAnLicgbm90IGZvdW5kLCBtdXN0IGFkanVzdCAqLworCS8qIGNvdW50IHRvIGluY2x1ZGUgbGFzdCBsYWJlbCAqLworCWlmIChsZW4gPiAwICYmIG5hbWVbbGVuLTFdICE9ICcuJykKKwkJY291bnQrKzsKKwlfRElBR0FTU0VSVChfX3R5cGVfZml0KGludCwgY291bnQpKTsKKwlyZXR1cm4gKGludCljb3VudDsKK30KKworCisvKgorICogTWFrZSBkYXRlcyBleHByZXNzZWQgaW4gc2Vjb25kcy1zaW5jZS1KYW4tMS0xOTcwIGVhc3kgdG8gcmVhZC4KKyAqIFNJRyByZWNvcmRzIGFyZSByZXF1aXJlZCB0byBiZSBwcmludGVkIGxpa2UgdGhpcywgYnkgdGhlIFNlY3VyZSBETlMgUkZDLgorICovCitjaGFyICoKK3Bfc2Vjc3RvZGF0ZSAodV9sb25nIHNlY3MpIHsKKwkvKiBYWFggbm9ucmVlbnRyYW50ICovCisJc3RhdGljIGNoYXIgb3V0cHV0WzE1XTsJCS8qIFlZWVlNTURESEhNTVNTIGFuZCBudWxsICovCisJdGltZV90IG15Y2xvY2sgPSBzZWNzOworCXN0cnVjdCB0bSAqbXl0aW1lOworI2lmZGVmIEhBVkVfVElNRV9SCisJc3RydWN0IHRtIHJlczsKKworCW15dGltZSA9IGdtdGltZV9yKCZteWNsb2NrLCAmcmVzKTsKKyNlbHNlCisJbXl0aW1lID0gZ210aW1lKCZteWNsb2NrKTsKKyNlbmRpZgorCW15dGltZS0+dG1feWVhciArPSAxOTAwOworCW15dGltZS0+dG1fbW9uICs9IDE7CisJc3ByaW50ZihvdXRwdXQsICIlMDRkJTAyZCUwMmQlMDJkJTAyZCUwMmQiLAorCQlteXRpbWUtPnRtX3llYXIsIG15dGltZS0+dG1fbW9uLCBteXRpbWUtPnRtX21kYXksCisJCW15dGltZS0+dG1faG91ciwgbXl0aW1lLT50bV9taW4sIG15dGltZS0+dG1fc2VjKTsKKwlyZXR1cm4gKG91dHB1dCk7Cit9CisKK3VfaW50MTZfdAorcmVzX25hbWV0b2NsYXNzKGNvbnN0IGNoYXIgKmJ1ZiwgaW50ICpzdWNjZXNzcCkgeworCXVuc2lnbmVkIGxvbmcgcmVzdWx0OworCWNoYXIgKmVuZHB0cjsKKwlpbnQgc3VjY2VzczsKKworCXJlc3VsdCA9IHN5bV9zdG9uKF9fcF9jbGFzc19zeW1zLCBidWYsICZzdWNjZXNzKTsKKwlpZiAoc3VjY2VzcykKKwkJZ290byBkb25lOworCisJaWYgKHN0cm5jYXNlY21wKGJ1ZiwgIkNMQVNTIiwgNSkgIT0gMCB8fAorCSAgICAhaXNkaWdpdCgodW5zaWduZWQgY2hhcilidWZbNV0pKQorCQlnb3RvIGRvbmU7CisJZXJybm8gPSAwOworCXJlc3VsdCA9IHN0cnRvdWwoYnVmICsgNSwgJmVuZHB0ciwgMTApOworCWlmIChlcnJubyA9PSAwICYmICplbmRwdHIgPT0gJ1wwJyAmJiByZXN1bHQgPD0gMHhmZmZmVSkKKwkJc3VjY2VzcyA9IDE7CisgZG9uZToKKwlpZiAoc3VjY2Vzc3ApCisJCSpzdWNjZXNzcCA9IHN1Y2Nlc3M7CisJcmV0dXJuICh1X2ludDE2X3QpKHJlc3VsdCk7Cit9CisKK3VfaW50MTZfdAorcmVzX25hbWV0b3R5cGUoY29uc3QgY2hhciAqYnVmLCBpbnQgKnN1Y2Nlc3NwKSB7CisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CisJY2hhciAqZW5kcHRyOworCWludCBzdWNjZXNzOworCisJcmVzdWx0ID0gc3ltX3N0b24oX19wX3R5cGVfc3ltcywgYnVmLCAmc3VjY2Vzcyk7CisJaWYgKHN1Y2Nlc3MpCisJCWdvdG8gZG9uZTsKKworCWlmIChzdHJuY2FzZWNtcChidWYsICJ0eXBlIiwgNCkgIT0gMCB8fAorCSAgICAhaXNkaWdpdCgodW5zaWduZWQgY2hhcilidWZbNF0pKQorCQlnb3RvIGRvbmU7CisJZXJybm8gPSAwOworCXJlc3VsdCA9IHN0cnRvdWwoYnVmICsgNCwgJmVuZHB0ciwgMTApOworCWlmIChlcnJubyA9PSAwICYmICplbmRwdHIgPT0gJ1wwJyAmJiByZXN1bHQgPD0gMHhmZmZmVSkKKwkJc3VjY2VzcyA9IDE7CisgZG9uZToKKwlpZiAoc3VjY2Vzc3ApCisJCSpzdWNjZXNzcCA9IHN1Y2Nlc3M7CisJcmV0dXJuICh1X2ludDE2X3QpKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RlYnVnLmggYi9saWJjL2Rucy9yZXNvbHYvcmVzX2RlYnVnLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvbmV0YnNkL3Jlc29sdi9yZXNfZGVidWcuaApyZW5hbWUgdG8gbGliYy9kbnMvcmVzb2x2L3Jlc19kZWJ1Zy5oCmRpZmYgLS1naXQgYS9saWJjL2Rucy9yZXNvbHYvcmVzX2luaXQuYyBiL2xpYmMvZG5zL3Jlc29sdi9yZXNfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxY2JlZDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Rucy9yZXNvbHYvcmVzX2luaXQuYwpAQCAtMCwwICsxLDgyNSBAQAorLyoJJE5ldEJTRDogcmVzX2luaXQuYyx2IDEuOCAyMDA2LzAzLzE5IDAzOjEwOjA4IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODUsIDE5ODksIDE5OTMKKyAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKKyAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAorICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgc2Njc2lkW10gPSAiQCgjKXJlc19pbml0LmMJOC4xIChCZXJrZWxleSkgNi83LzkzIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IHJlc19pbml0LmMsdiAxLjkuMi41LjQuMiAyMDA0LzAzLzE2IDEyOjM0OjE4IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogcmVzX2luaXQuYyx2IDEuOCAyMDA2LzAzLzE5IDAzOjEwOjA4IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKworI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KKyNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KKworLyogZW5zdXJlIHRoYXQgc29ja2FkZHJfaW42IGFuZCBJTjZBRERSX0FOWV9JTklUIGFyZSBkZWNsYXJlZCAvIGRlZmluZWQgKi8KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfbmV0aWQuaCIKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAicmVzX3ByaXZhdGUuaCIKKworLyogT3B0aW9ucy4gIFNob3VsZCBhbGwgYmUgbGVmdCBhbG9uZS4gKi8KKyNpZm5kZWYgREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbmRpZgorCitzdGF0aWMgdm9pZCByZXNfc2V0b3B0aW9ucyBfX1AoKHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKKworI2lmZGVmIFJFU09MVlNPUlQKK3N0YXRpYyBjb25zdCBjaGFyIHNvcnRfbWFza1tdID0gIi8mIjsKKyNkZWZpbmUgSVNTT1JUTUFTSyhjaCkgKHN0cmNocihzb3J0X21hc2ssIGNoKSAhPSBOVUxMKQorc3RhdGljIHVpbnQzMl90IG5ldF9tYXNrKHN0cnVjdCBpbl9hZGRyKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoaXNhc2NpaSkJLyogWFhYIC0gY291bGQgYmUgYSBmdW5jdGlvbiAqLworIyBkZWZpbmUgaXNhc2NpaShjKSAoIShjICYgMDIwMCkpCisjZW5kaWYKKworLyoKKyAqIFJlc29sdmVyIHN0YXRlIGRlZmF1bHQgc2V0dGluZ3MuCisgKi8KKworLyoKKyAqIFNldCB1cCBkZWZhdWx0IHNldHRpbmdzLiAgSWYgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBleGlzdCwgdGhlIHZhbHVlcworICogdGhlcmUgd2lsbCBoYXZlIHByZWNlZGVuY2UuICBPdGhlcndpc2UsIHRoZSBzZXJ2ZXIgYWRkcmVzcyBpcyBzZXQgdG8KKyAqIElOQUREUl9BTlkgYW5kIHRoZSBkZWZhdWx0IGRvbWFpbiBuYW1lIGNvbWVzIGZyb20gdGhlIGdldGhvc3RuYW1lKCkuCisgKgorICogQW4gaW50ZXJyaW0gdmVyc2lvbiBvZiB0aGlzIGNvZGUgKEJJTkQgNC45LCBwcmUtNC40QlNEKSB1c2VkIDEyNy4wLjAuMQorICogcmF0aGVyIHRoYW4gSU5BRERSX0FOWSAoIjAuMC4wLjAiKSBhcyB0aGUgZGVmYXVsdCBuYW1lIHNlcnZlciBhZGRyZXNzCisgKiBzaW5jZSBpdCB3YXMgbm90ZWQgdGhhdCBJTkFERFJfQU5ZIGFjdHVhbGx5IG1lYW50IGBgdGhlIGZpcnN0IGludGVyZmFjZQorICogeW91ICJpZmNvbmZpZyInZCBhdCBib290IHRpbWUnJyBhbmQgaWYgdGhpcyB3YXMgYSBTTElQIG9yIFBQUCBpbnRlcmZhY2UsCisgKiBpdCBoYWQgdG8gYmUgInVwIiBpbiBvcmRlciBmb3IgeW91IHRvIHJlYWNoIHlvdXIgb3duIG5hbWUgc2VydmVyLiAgSXQKKyAqIHdhcyBsYXRlciBkZWNpZGVkIHRoYXQgc2luY2UgdGhlIHJlY29tbWVuZGVkIHByYWN0aWNlIGlzIHRvIGFsd2F5cworICogaW5zdGFsbCBsb2NhbCBzdGF0aWMgcm91dGVzIHRocm91Z2ggMTI3LjAuMC4xIGZvciBhbGwgeW91ciBuZXR3b3JrCisgKiBpbnRlcmZhY2VzLCB0aGF0IHdlIGNvdWxkIHNvbHZlIHRoaXMgcHJvYmxlbSB3aXRob3V0IGEgY29kZSBjaGFuZ2UuCisgKgorICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBzaG91bGQgYWx3YXlzIGJlIHVzZWQsIHNpbmNlIGl0IGlzIHRoZSBvbmx5IHdheQorICogdG8gc3BlY2lmeSBhIGRlZmF1bHQgZG9tYWluLiAgSWYgeW91IGFyZSBydW5uaW5nIGEgc2VydmVyIG9uIHlvdXIgbG9jYWwKKyAqIG1hY2hpbmUsIHlvdSBzaG91bGQgc2F5ICJuYW1lc2VydmVyIDAuMC4wLjAiIG9yICJuYW1lc2VydmVyIDEyNy4wLjAuMSIKKyAqIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisgKgorICogUmV0dXJuIDAgaWYgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSwgLTEgb24gZXJyb3IKKyAqLworaW50CityZXNfbmluaXQocmVzX3N0YXRlIHN0YXRwKSB7CisJZXh0ZXJuIGludCBfX3Jlc192aW5pdChyZXNfc3RhdGUsIGludCk7CisKKwlyZXR1cm4gKF9fcmVzX3Zpbml0KHN0YXRwLCAwKSk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaGFzIHRvIGJlIHJlYWNoYWJsZSBieSByZXNfZGF0YS5jIGJ1dCBub3QgcHVibGljbHkuICovCitpbnQKK19fcmVzX3Zpbml0KHJlc19zdGF0ZSBzdGF0cCwgaW50IHByZWluaXQpIHsKKyNpZiAhZGVmaW5lZChfX0FORFJPSURfXykKKwlyZWdpc3RlciBGSUxFICpmcDsKKyNlbmRpZgorCXJlZ2lzdGVyIGNoYXIgKmNwLCAqKnBwOworI2lmICFkZWZpbmVkKF9fQU5EUk9JRF9fKQorCXJlZ2lzdGVyIGludCBuOworI2VuZGlmCisJY2hhciBidWZbQlVGU0laXTsKKwlpbnQgbnNlcnYgPSAwOyAgICAvKiBudW1iZXIgb2YgbmFtZXNlcnZlciByZWNvcmRzIHJlYWQgZnJvbSBmaWxlICovCisjaWYgIWRlZmluZWQoX19BTkRST0lEX18pCisJaW50IGhhdmVlbnYgPSAwOworI2VuZGlmCisJaW50IGhhdmVzZWFyY2ggPSAwOworI2lmZGVmIFJFU09MVlNPUlQKKwlpbnQgbnNvcnQgPSAwOworI2VuZGlmCisjaWYgIWRlZmluZWQoX19BTkRST0lEX18pCisJY2hhciAqbmV0OworI2VuZGlmCisJaW50IGRvdHM7CisJdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uIHVbMl07CisKKyAgICAgICAgaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19JTklUKSAhPSAwVSkKKyAgICAgICAgICAgICAgICByZXNfbmRlc3Ryb3koc3RhdHApOworCisJaWYgKCFwcmVpbml0KSB7CisJCXN0YXRwLT5uZXRpZCA9IE5FVElEX1VOU0VUOworCQlzdGF0cC0+cmV0cmFucyA9IFJFU19USU1FT1VUOworCQlzdGF0cC0+cmV0cnkgPSBSRVNfREZMUkVUUlk7CisJCXN0YXRwLT5vcHRpb25zID0gUkVTX0RFRkFVTFQ7CisJCXN0YXRwLT5pZCA9IHJlc19yYW5kb21pZCgpOworCQlzdGF0cC0+X21hcmsgPSBNQVJLX1VOU0VUOworCX0KKworCW1lbXNldCh1LCAwLCBzaXplb2YodSkpOworI2lmZGVmIFVTRUxPT1BCQUNLCisJdVtuc2Vydl0uc2luLnNpbl9hZGRyID0gaW5ldF9tYWtlYWRkcihJTl9MT09QQkFDS05FVCwgMSk7CisjZWxzZQorCXVbbnNlcnZdLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworI2VuZGlmCisJdVtuc2Vydl0uc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXVbbnNlcnZdLnNpbi5zaW5fcG9ydCA9IGh0b25zKE5BTUVTRVJWRVJfUE9SVCk7CisjaWZkZWYgSEFWRV9TQV9MRU4KKwl1W25zZXJ2XS5zaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJbnNlcnYrKzsKKyNpZmRlZiBIQVNfSU5FVDZfU1RSVUNUUworI2lmZGVmIFVTRUxPT1BCQUNLCisJdVtuc2Vydl0uc2luNi5zaW42X2FkZHIgPSBpbjZhZGRyX2xvb3BiYWNrOworI2Vsc2UKKwl1W25zZXJ2XS5zaW42LnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworI2VuZGlmCisJdVtuc2Vydl0uc2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCXVbbnNlcnZdLnNpbjYuc2luNl9wb3J0ID0gaHRvbnMoTkFNRVNFUlZFUl9QT1JUKTsKKyNpZmRlZiBIQVZFX1NBX0xFTgorCXVbbnNlcnZdLnNpbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwluc2VydisrOworI2VuZGlmCisJc3RhdHAtPm5zY291bnQgPSAwOworCXN0YXRwLT5uZG90cyA9IDE7CisJc3RhdHAtPnBmY29kZSA9IDA7CisJc3RhdHAtPl92Y3NvY2sgPSAtMTsKKwlzdGF0cC0+X2ZsYWdzID0gMDsKKwlzdGF0cC0+cWhvb2sgPSBOVUxMOworCXN0YXRwLT5yaG9vayA9IE5VTEw7CisJc3RhdHAtPl91Ll9leHQubnNjb3VudCA9IDA7CisJc3RhdHAtPl91Ll9leHQuZXh0ID0gbWFsbG9jKHNpemVvZigqc3RhdHAtPl91Ll9leHQuZXh0KSk7CisJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCAhPSBOVUxMKSB7CisJICAgICAgICBtZW1zZXQoc3RhdHAtPl91Ll9leHQuZXh0LCAwLCBzaXplb2YoKnN0YXRwLT5fdS5fZXh0LmV4dCkpOworCQlzdGF0cC0+X3UuX2V4dC5leHQtPm5zYWRkcnNbMF0uc2luID0gc3RhdHAtPm5zYWRkcjsKKwkJc3RyY3B5KHN0YXRwLT5fdS5fZXh0LmV4dC0+bnN1ZmZpeCwgImlwNi5hcnBhIik7CisJCXN0cmNweShzdGF0cC0+X3UuX2V4dC5leHQtPm5zdWZmaXgyLCAiaXA2LmludCIpOworCX0KKwlzdGF0cC0+bnNvcnQgPSAwOworCXJlc19zZXRzZXJ2ZXJzKHN0YXRwLCB1LCBuc2Vydik7CisKKyNpZiAhZGVmaW5lZChfX0FORFJPSURfXykgLyogSUdOT1JFIFRIRSBFTlZJUk9OTUVOVCAqLworCS8qIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlIGxvY2FsIGRvbWFpbiBkZWZpbml0aW9uICovCisJaWYgKChjcCA9IGdldGVudigiTE9DQUxET01BSU4iKSkgIT0gTlVMTCkgeworCQkodm9pZClzdHJuY3B5KHN0YXRwLT5kZWZkbmFtZSwgY3AsIHNpemVvZihzdGF0cC0+ZGVmZG5hbWUpIC0gMSk7CisJCXN0YXRwLT5kZWZkbmFtZVtzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDFdID0gJ1wwJzsKKwkJaGF2ZWVudisrOworCisJCS8qCisJCSAqIFNldCBzZWFyY2ggbGlzdCB0byBiZSBibGFuay1zZXBhcmF0ZWQgc3RyaW5ncworCQkgKiBmcm9tIHJlc3Qgb2YgZW52IHZhbHVlLiAgUGVybWl0cyB1c2VycyBvZiBMT0NBTERPTUFJTgorCQkgKiB0byBzdGlsbCBoYXZlIGEgc2VhcmNoIGxpc3QsIGFuZCBhbnlvbmUgdG8gc2V0IHRoZQorCQkgKiBvbmUgdGhhdCB0aGV5IHdhbnQgdG8gdXNlIGFzIGFuIGluZGl2aWR1YWwgKGV2ZW4gbW9yZQorCQkgKiBpbXBvcnRhbnQgbm93IHRoYXQgdGhlIHJmYzE1MzUgc3R1ZmYgcmVzdHJpY3RzIHNlYXJjaGVzKQorCQkgKi8KKwkJY3AgPSBzdGF0cC0+ZGVmZG5hbWU7CisJCXBwID0gc3RhdHAtPmRuc3JjaDsKKwkJKnBwKysgPSBjcDsKKwkJZm9yIChuID0gMDsgKmNwICYmIHBwIDwgc3RhdHAtPmRuc3JjaCArIE1BWEROU1JDSDsgY3ArKykgeworCQkJaWYgKCpjcCA9PSAnXG4nKQkvKiBzaWxseSBiYWNrd2FyZHMgY29tcGF0ICovCisJCQkJYnJlYWs7CisJCQllbHNlIGlmICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSB7CisJCQkJKmNwID0gMDsKKwkJCQluID0gMTsKKwkJCX0gZWxzZSBpZiAobikgeworCQkJCSpwcCsrID0gY3A7CisJCQkJbiA9IDA7CisJCQkJaGF2ZXNlYXJjaCA9IDE7CisJCQl9CisJCX0KKwkJLyogbnVsbCB0ZXJtaW5hdGUgbGFzdCBkb21haW4gaWYgdGhlcmUgYXJlIGV4Y2VzcyAqLworCQl3aGlsZSAoKmNwICE9ICdcMCcgJiYgKmNwICE9ICcgJyAmJiAqY3AgIT0gJ1x0JyAmJiAqY3AgIT0gJ1xuJykKKwkJCWNwKys7CisJCSpjcCA9ICdcMCc7CisJCSpwcCsrID0gMDsKKwl9CisJaWYgKG5zZXJ2ID4gMCkKKwkJc3RhdHAtPm5zY291bnQgPSBuc2VydjsKKyNlbmRpZgorCisjaWZuZGVmIEFORFJPSURfQ0hBTkdFUyAvKiAhQU5EUk9JRF9DSEFOR0VTIC0gSUdOT1JFIHJlc29sdi5jb25mIGluIEFuZHJvaWQgKi8KKyNkZWZpbmUJTUFUQ0gobGluZSwgbmFtZSkgXAorCSghc3RybmNtcChsaW5lLCBuYW1lLCBzaXplb2YobmFtZSkgLSAxKSAmJiBcCisJKGxpbmVbc2l6ZW9mKG5hbWUpIC0gMV0gPT0gJyAnIHx8IFwKKwkgbGluZVtzaXplb2YobmFtZSkgLSAxXSA9PSAnXHQnKSkKKworCW5zZXJ2ID0gMDsKKwlpZiAoKGZwID0gZm9wZW4oX1BBVEhfUkVTQ09ORiwgInIiKSkgIT0gTlVMTCkgeworCSAgICAvKiByZWFkIHRoZSBjb25maWcgZmlsZSAqLworCSAgICB3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApICE9IE5VTEwpIHsKKwkJLyogc2tpcCBjb21tZW50cyAqLworCQlpZiAoKmJ1ZiA9PSAnOycgfHwgKmJ1ZiA9PSAnIycpCisJCQljb250aW51ZTsKKwkJLyogcmVhZCBkZWZhdWx0IGRvbWFpbiBuYW1lICovCisJCWlmIChNQVRDSChidWYsICJkb21haW4iKSkgeworCQkgICAgaWYgKGhhdmVlbnYpCS8qIHNraXAgaWYgaGF2ZSBmcm9tIGVudmlyb24gKi8KKwkJCSAgICBjb250aW51ZTsKKwkJICAgIGNwID0gYnVmICsgc2l6ZW9mKCJkb21haW4iKSAtIDE7CisJCSAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKKwkJCSAgICBjcCsrOworCQkgICAgaWYgKCgqY3AgPT0gJ1wwJykgfHwgKCpjcCA9PSAnXG4nKSkKKwkJCSAgICBjb250aW51ZTsKKwkJICAgIHN0cm5jcHkoc3RhdHAtPmRlZmRuYW1lLCBjcCwgc2l6ZW9mKHN0YXRwLT5kZWZkbmFtZSkgLSAxKTsKKwkJICAgIHN0YXRwLT5kZWZkbmFtZVtzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDFdID0gJ1wwJzsKKwkJICAgIGlmICgoY3AgPSBzdHJwYnJrKHN0YXRwLT5kZWZkbmFtZSwgIiBcdFxuIikpICE9IE5VTEwpCisJCQkgICAgKmNwID0gJ1wwJzsKKwkJICAgIGhhdmVzZWFyY2ggPSAwOworCQkgICAgY29udGludWU7CisJCX0KKwkJLyogc2V0IHNlYXJjaCBsaXN0ICovCisJCWlmIChNQVRDSChidWYsICJzZWFyY2giKSkgeworCQkgICAgaWYgKGhhdmVlbnYpCS8qIHNraXAgaWYgaGF2ZSBmcm9tIGVudmlyb24gKi8KKwkJCSAgICBjb250aW51ZTsKKwkJICAgIGNwID0gYnVmICsgc2l6ZW9mKCJzZWFyY2giKSAtIDE7CisJCSAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKKwkJCSAgICBjcCsrOworCQkgICAgaWYgKCgqY3AgPT0gJ1wwJykgfHwgKCpjcCA9PSAnXG4nKSkKKwkJCSAgICBjb250aW51ZTsKKwkJICAgIHN0cm5jcHkoc3RhdHAtPmRlZmRuYW1lLCBjcCwgc2l6ZW9mKHN0YXRwLT5kZWZkbmFtZSkgLSAxKTsKKwkJICAgIHN0YXRwLT5kZWZkbmFtZVtzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDFdID0gJ1wwJzsKKwkJICAgIGlmICgoY3AgPSBzdHJjaHIoc3RhdHAtPmRlZmRuYW1lLCAnXG4nKSkgIT0gTlVMTCkKKwkJCSAgICAqY3AgPSAnXDAnOworCQkgICAgLyoKKwkJICAgICAqIFNldCBzZWFyY2ggbGlzdCB0byBiZSBibGFuay1zZXBhcmF0ZWQgc3RyaW5ncworCQkgICAgICogb24gcmVzdCBvZiBsaW5lLgorCQkgICAgICovCisJCSAgICBjcCA9IHN0YXRwLT5kZWZkbmFtZTsKKwkJICAgIHBwID0gc3RhdHAtPmRuc3JjaDsKKwkJICAgICpwcCsrID0gY3A7CisJCSAgICBmb3IgKG4gPSAwOyAqY3AgJiYgcHAgPCBzdGF0cC0+ZG5zcmNoICsgTUFYRE5TUkNIOyBjcCsrKSB7CisJCQkgICAgaWYgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpIHsKKwkJCQkgICAgKmNwID0gMDsKKwkJCQkgICAgbiA9IDE7CisJCQkgICAgfSBlbHNlIGlmIChuKSB7CisJCQkJICAgICpwcCsrID0gY3A7CisJCQkJICAgIG4gPSAwOworCQkJICAgIH0KKwkJICAgIH0KKwkJICAgIC8qIG51bGwgdGVybWluYXRlIGxhc3QgZG9tYWluIGlmIHRoZXJlIGFyZSBleGNlc3MgKi8KKwkJICAgIHdoaWxlICgqY3AgIT0gJ1wwJyAmJiAqY3AgIT0gJyAnICYmICpjcCAhPSAnXHQnKQorCQkJICAgIGNwKys7CisJCSAgICAqY3AgPSAnXDAnOworCQkgICAgKnBwKysgPSAwOworCQkgICAgaGF2ZXNlYXJjaCA9IDE7CisJCSAgICBjb250aW51ZTsKKwkJfQorCQkvKiByZWFkIG5hbWVzZXJ2ZXJzIHRvIHF1ZXJ5ICovCisJCWlmIChNQVRDSChidWYsICJuYW1lc2VydmVyIikgJiYgbnNlcnYgPCBNQVhOUykgeworCQkgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWk7CisJCSAgICBjaGFyIHNidWZbTklfTUFYU0VSVl07CisJCSAgICBjb25zdCBzaXplX3QgbWluc2l6ID0KKwkJICAgICAgICBzaXplb2Yoc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzWzBdKTsKKworCQkgICAgY3AgPSBidWYgKyBzaXplb2YoIm5hbWVzZXJ2ZXIiKSAtIDE7CisJCSAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKKwkJCWNwKys7CisJCSAgICBjcFtzdHJjc3BuKGNwLCAiOyMgXHRcbiIpXSA9ICdcMCc7CisJCSAgICBpZiAoKCpjcCAhPSAnXDAnKSAmJiAoKmNwICE9ICdcbicpKSB7CisJCQltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKwkJCWhpbnRzLmFpX2ZhbWlseSA9IFBGX1VOU1BFQzsKKwkJCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19ER1JBTTsJLypkdW1teSovCisJCQloaW50cy5haV9mbGFncyA9IEFJX05VTUVSSUNIT1NUOworCQkJc3ByaW50ZihzYnVmLCAiJXUiLCBOQU1FU0VSVkVSX1BPUlQpOworCQkJaWYgKGdldGFkZHJpbmZvKGNwLCBzYnVmLCAmaGludHMsICZhaSkgPT0gMCAmJgorCQkJICAgIGFpLT5haV9hZGRybGVuIDw9IG1pbnNpeikgeworCQkJICAgIGlmIChzdGF0cC0+X3UuX2V4dC5leHQgIT0gTlVMTCkgeworCQkJCW1lbWNweSgmc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW25zZXJ2XSwKKwkJCQkgICAgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKTsKKwkJCSAgICB9CisJCQkgICAgaWYgKGFpLT5haV9hZGRybGVuIDw9CisJCQkgICAgICAgIHNpemVvZihzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdKSkgeworCQkJCW1lbWNweSgmc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSwKKwkJCQkgICAgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKTsKKwkJCSAgICB9IGVsc2UKKwkJCQlzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLnNpbl9mYW1pbHkgPSAwOworCQkJICAgIGZyZWVhZGRyaW5mbyhhaSk7CisJCQkgICAgbnNlcnYrKzsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGNvbnRpbnVlOworCQl9CisJCWlmIChNQVRDSChidWYsICJzb3J0bGlzdCIpKSB7CisJCSAgICBzdHJ1Y3QgaW5fYWRkciBhOworCisJCSAgICBjcCA9IGJ1ZiArIHNpemVvZigic29ydGxpc3QiKSAtIDE7CisJCSAgICB3aGlsZSAobnNvcnQgPCBNQVhSRVNPTFZTT1JUKSB7CisJCQl3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKKwkJCSAgICBjcCsrOworCQkJaWYgKCpjcCA9PSAnXDAnIHx8ICpjcCA9PSAnXG4nIHx8ICpjcCA9PSAnOycpCisJCQkgICAgYnJlYWs7CisJCQluZXQgPSBjcDsKKwkJCXdoaWxlICgqY3AgJiYgIUlTU09SVE1BU0soKmNwKSAmJiAqY3AgIT0gJzsnICYmCisJCQkgICAgICAgaXNhc2NpaSgqY3ApICYmICFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJCQkJY3ArKzsKKwkJCW4gPSAqY3A7CisJCQkqY3AgPSAwOworCQkJaWYgKGluZXRfYXRvbihuZXQsICZhKSkgeworCQkJICAgIHN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLmFkZHIgPSBhOworCQkJICAgIGlmIChJU1NPUlRNQVNLKG4pKSB7CisJCQkJKmNwKysgPSBuOworCQkJCW5ldCA9IGNwOworCQkJCXdoaWxlICgqY3AgJiYgKmNwICE9ICc7JyAmJgorCQkJCQlpc2FzY2lpKCpjcCkgJiYKKwkJCQkJIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkKKwkJCQkgICAgY3ArKzsKKwkJCQluID0gKmNwOworCQkJCSpjcCA9IDA7CisJCQkJaWYgKGluZXRfYXRvbihuZXQsICZhKSkgeworCQkJCSAgICBzdGF0cC0+c29ydF9saXN0W25zb3J0XS5tYXNrID0gYS5zX2FkZHI7CisJCQkJfSBlbHNlIHsKKwkJCQkgICAgc3RhdHAtPnNvcnRfbGlzdFtuc29ydF0ubWFzayA9CisJCQkJCW5ldF9tYXNrKHN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLmFkZHIpOworCQkJCX0KKwkJCSAgICB9IGVsc2UgeworCQkJCXN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLm1hc2sgPQorCQkJCSAgICBuZXRfbWFzayhzdGF0cC0+c29ydF9saXN0W25zb3J0XS5hZGRyKTsKKwkJCSAgICB9CisJCQkgICAgbnNvcnQrKzsKKwkJCX0KKwkJCSpjcCA9IG47CisJCSAgICB9CisJCSAgICBjb250aW51ZTsKKwkJfQorCQlpZiAoTUFUQ0goYnVmLCAib3B0aW9ucyIpKSB7CisJCSAgICByZXNfc2V0b3B0aW9ucyhzdGF0cCwgYnVmICsgc2l6ZW9mKCJvcHRpb25zIikgLSAxLCAiY29uZiIpOworCQkgICAgY29udGludWU7CisJCX0KKwkgICAgfQorCSAgICBpZiAobnNlcnYgPiAwKQorCQlzdGF0cC0+bnNjb3VudCA9IG5zZXJ2OworCSAgICBzdGF0cC0+bnNvcnQgPSBuc29ydDsKKwkgICAgKHZvaWQpIGZjbG9zZShmcCk7CisJfQorI2VuZGlmIC8qICFBTkRST0lEX0NIQU5HRVMgKi8KKy8qCisgKiBMYXN0IGNoYW5jZSB0byBnZXQgYSBuYW1lc2VydmVyLiAgVGhpcyBzaG91bGQgbm90IG5vcm1hbGx5CisgKiBiZSBuZWNlc3NhcnkKKyAqLworI2lmZGVmIE5PX1JFU09MVl9DT05GCisJaWYobnNlcnYgPT0gMCkKKwkJbnNlcnYgPSBnZXRfbmFtZXNlcnZlcnMoc3RhdHApOworI2VuZGlmCisKKwlpZiAoc3RhdHAtPmRlZmRuYW1lWzBdID09IDAgJiYKKwkgICAgZ2V0aG9zdG5hbWUoYnVmLCBzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDEpID09IDAgJiYKKwkgICAgKGNwID0gc3RyY2hyKGJ1ZiwgJy4nKSkgIT0gTlVMTCkKKwkJc3RyY3B5KHN0YXRwLT5kZWZkbmFtZSwgY3AgKyAxKTsKKworCS8qIGZpbmQgY29tcG9uZW50cyBvZiBsb2NhbCBkb21haW4gdGhhdCBtaWdodCBiZSBzZWFyY2hlZCAqLworCWlmIChoYXZlc2VhcmNoID09IDApIHsKKwkJcHAgPSBzdGF0cC0+ZG5zcmNoOworCQkqcHArKyA9IHN0YXRwLT5kZWZkbmFtZTsKKwkJKnBwID0gTlVMTDsKKworCQlkb3RzID0gMDsKKwkJZm9yIChjcCA9IHN0YXRwLT5kZWZkbmFtZTsgKmNwOyBjcCsrKQorCQkJZG90cyArPSAoKmNwID09ICcuJyk7CisKKwkJY3AgPSBzdGF0cC0+ZGVmZG5hbWU7CisJCXdoaWxlIChwcCA8IHN0YXRwLT5kbnNyY2ggKyBNQVhERkxTUkNIKSB7CisJCQlpZiAoZG90cyA8IExPQ0FMRE9NQUlOUEFSVFMpCisJCQkJYnJlYWs7CisJCQljcCA9IHN0cmNocihjcCwgJy4nKSArIDE7ICAgIC8qIHdlIGtub3cgdGhlcmUgaXMgb25lICovCisJCQkqcHArKyA9IGNwOworCQkJZG90cy0tOworCQl9CisJCSpwcCA9IE5VTEw7CisjaWZkZWYgREVCVUcKKwkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB7CisJCQlwcmludGYoIjs7IHJlc19pbml0KCkuLi4gZGVmYXVsdCBkbnNyY2ggbGlzdDpcbiIpOworCQkJZm9yIChwcCA9IHN0YXRwLT5kbnNyY2g7ICpwcDsgcHArKykKKwkJCQlwcmludGYoIjs7XHQlc1xuIiwgKnBwKTsKKwkJCXByaW50ZigiOztcdC4uRU5ELi5cbiIpOworCQl9CisjZW5kaWYKKwl9CisKKwlpZiAoKGNwID0gZ2V0ZW52KCJSRVNfT1BUSU9OUyIpKSAhPSBOVUxMKQorCQlyZXNfc2V0b3B0aW9ucyhzdGF0cCwgY3AsICJlbnYiKTsKKwlpZiAobnNlcnYgPiAwKSB7CisJCXN0YXRwLT5uc2NvdW50ID0gbnNlcnY7CisJCXN0YXRwLT5vcHRpb25zIHw9IFJFU19JTklUOworCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorcmVzX3NldG9wdGlvbnMocmVzX3N0YXRlIHN0YXRwLCBjb25zdCBjaGFyICpvcHRpb25zLCBjb25zdCBjaGFyICpzb3VyY2UpCit7CisJY29uc3QgY2hhciAqY3AgPSBvcHRpb25zOworCWludCBpOworCXN0cnVjdCBfX3Jlc19zdGF0ZV9leHQgKmV4dCA9IHN0YXRwLT5fdS5fZXh0LmV4dDsKKworI2lmZGVmIERFQlVHCisJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQlwcmludGYoIjs7IHJlc19zZXRvcHRpb25zKFwiJXNcIiwgXCIlc1wiKS4uLlxuIiwKKwkJICAgICAgIG9wdGlvbnMsIHNvdXJjZSk7CisjZW5kaWYKKwl3aGlsZSAoKmNwKSB7CisJCS8qIHNraXAgbGVhZGluZyBhbmQgaW5uZXIgcnVucyBvZiBzcGFjZXMgKi8KKwkJd2hpbGUgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpCisJCQljcCsrOworCQkvKiBzZWFyY2ggZm9yIGFuZCBwcm9jZXNzIGluZGl2aWR1YWwgb3B0aW9ucyAqLworCQlpZiAoIXN0cm5jbXAoY3AsICJuZG90czoiLCBzaXplb2YoIm5kb3RzOiIpIC0gMSkpIHsKKwkJCWkgPSBhdG9pKGNwICsgc2l6ZW9mKCJuZG90czoiKSAtIDEpOworCQkJaWYgKGkgPD0gUkVTX01BWE5ET1RTKQorCQkJCXN0YXRwLT5uZG90cyA9IGk7CisJCQllbHNlCisJCQkJc3RhdHAtPm5kb3RzID0gUkVTX01BWE5ET1RTOworI2lmZGVmIERFQlVHCisJCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQkJcHJpbnRmKCI7O1x0bmRvdHM9JWRcbiIsIHN0YXRwLT5uZG90cyk7CisjZW5kaWYKKwkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgInRpbWVvdXQ6Iiwgc2l6ZW9mKCJ0aW1lb3V0OiIpIC0gMSkpIHsKKwkJCWkgPSBhdG9pKGNwICsgc2l6ZW9mKCJ0aW1lb3V0OiIpIC0gMSk7CisJCQlpZiAoaSA8PSBSRVNfTUFYUkVUUkFOUykKKwkJCQlzdGF0cC0+cmV0cmFucyA9IGk7CisJCQllbHNlCisJCQkJc3RhdHAtPnJldHJhbnMgPSBSRVNfTUFYUkVUUkFOUzsKKyNpZmRlZiBERUJVRworCQkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQkJCXByaW50ZigiOztcdHRpbWVvdXQ9JWRcbiIsIHN0YXRwLT5yZXRyYW5zKTsKKyNlbmRpZgorCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAiYXR0ZW1wdHM6Iiwgc2l6ZW9mKCJhdHRlbXB0czoiKSAtIDEpKXsKKwkJCWkgPSBhdG9pKGNwICsgc2l6ZW9mKCJhdHRlbXB0czoiKSAtIDEpOworCQkJaWYgKGkgPD0gUkVTX01BWFJFVFJZKQorCQkJCXN0YXRwLT5yZXRyeSA9IGk7CisJCQllbHNlCisJCQkJc3RhdHAtPnJldHJ5ID0gUkVTX01BWFJFVFJZOworI2lmZGVmIERFQlVHCisJCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQkJcHJpbnRmKCI7O1x0YXR0ZW1wdHM9JWRcbiIsIHN0YXRwLT5yZXRyeSk7CisjZW5kaWYKKwkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgImRlYnVnIiwgc2l6ZW9mKCJkZWJ1ZyIpIC0gMSkpIHsKKyNpZmRlZiBERUJVRworCQkJaWYgKCEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpKSB7CisJCQkJcHJpbnRmKCI7OyByZXNfc2V0b3B0aW9ucyhcIiVzXCIsIFwiJXNcIikuLlxuIiwKKwkJCQkgICAgICAgb3B0aW9ucywgc291cmNlKTsKKwkJCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfREVCVUc7CisJCQl9CisJCQlwcmludGYoIjs7XHRkZWJ1Z1xuIik7CisjZW5kaWYKKwkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgIm5vX3RsZF9xdWVyeSIsCisJCQkJICAgIHNpemVvZigibm9fdGxkX3F1ZXJ5IikgLSAxKSB8fAorCQkJICAgIXN0cm5jbXAoY3AsICJuby10bGQtcXVlcnkiLAorCQkJCSAgICBzaXplb2YoIm5vLXRsZC1xdWVyeSIpIC0gMSkpIHsKKwkJCXN0YXRwLT5vcHRpb25zIHw9IFJFU19OT1RMRFFVRVJZOworCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAiaW5ldDYiLCBzaXplb2YoImluZXQ2IikgLSAxKSkgeworCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX1VTRV9JTkVUNjsKKwkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgInJvdGF0ZSIsIHNpemVvZigicm90YXRlIikgLSAxKSkgeworCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX1JPVEFURTsKKwkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgIm5vLWNoZWNrLW5hbWVzIiwKKwkJCQkgICAgc2l6ZW9mKCJuby1jaGVjay1uYW1lcyIpIC0gMSkpIHsKKwkJCXN0YXRwLT5vcHRpb25zIHw9IFJFU19OT0NIRUNLTkFNRTsKKwkJfQorI2lmZGVmIFJFU19VU0VfRUROUzAKKwkJZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJlZG5zMCIsIHNpemVvZigiZWRuczAiKSAtIDEpKSB7CisJCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfVVNFX0VETlMwOworCQl9CisjZW5kaWYKKwkJZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJkbmFtZSIsIHNpemVvZigiZG5hbWUiKSAtIDEpKSB7CisJCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfVVNFX0ROQU1FOworCQl9CisJCWVsc2UgaWYgKCFzdHJuY21wKGNwLCAibmliYmxlOiIsIHNpemVvZigibmliYmxlOiIpIC0gMSkpIHsKKwkJCWlmIChleHQgPT0gTlVMTCkKKwkJCQlnb3RvIHNraXA7CisJCQljcCArPSBzaXplb2YoIm5pYmJsZToiKSAtIDE7CisJCQlpID0gTUlOKHN0cmNzcG4oY3AsICIgXHQiKSwgc2l6ZW9mKGV4dC0+bnN1ZmZpeCkgLSAxKTsKKwkJCXN0cm5jcHkoZXh0LT5uc3VmZml4LCBjcCwgKHNpemVfdClpKTsKKwkJCWV4dC0+bnN1ZmZpeFtpXSA9ICdcMCc7CisJCX0KKwkJZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJuaWJibGUyOiIsIHNpemVvZigibmliYmxlMjoiKSAtIDEpKSB7CisJCQlpZiAoZXh0ID09IE5VTEwpCisJCQkJZ290byBza2lwOworCQkJY3AgKz0gc2l6ZW9mKCJuaWJibGUyOiIpIC0gMTsKKwkJCWkgPSBNSU4oc3RyY3NwbihjcCwgIiBcdCIpLCBzaXplb2YoZXh0LT5uc3VmZml4MikgLSAxKTsKKwkJCXN0cm5jcHkoZXh0LT5uc3VmZml4MiwgY3AsIChzaXplX3QpaSk7CisJCQlleHQtPm5zdWZmaXgyW2ldID0gJ1wwJzsKKwkJfQorCQllbHNlIGlmICghc3RybmNtcChjcCwgInY2cmV2bW9kZToiLCBzaXplb2YoInY2cmV2bW9kZToiKSAtIDEpKSB7CisJCQljcCArPSBzaXplb2YoInY2cmV2bW9kZToiKSAtIDE7CisJCQkvKiAibmliYmxlIiBhbmQgImJpdHN0cmluZyIgdXNlZCB0byBiZSB2YWxpZCAqLworCQkJaWYgKCFzdHJuY21wKGNwLCAic2luZ2xlIiwgc2l6ZW9mKCJzaW5nbGUiKSAtIDEpKSB7CisJCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX05PX05JQkJMRTI7CisJCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAiYm90aCIsIHNpemVvZigiYm90aCIpIC0gMSkpIHsKKwkJCQlzdGF0cC0+b3B0aW9ucyAmPQorCQkJCQkgflJFU19OT19OSUJCTEUyOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJLyogWFhYIC0gcHJpbnQgYSB3YXJuaW5nIGhlcmU/ICovCisJCX0KKyAgIHNraXA6CisJCS8qIHNraXAgdG8gbmV4dCBydW4gb2Ygc3BhY2VzICovCisJCXdoaWxlICgqY3AgJiYgKmNwICE9ICcgJyAmJiAqY3AgIT0gJ1x0JykKKwkJCWNwKys7CisJfQorfQorCisjaWZkZWYgUkVTT0xWU09SVAorLyogWFhYIC0gc2hvdWxkIHJlYWxseSBzdXBwb3J0IENJRFIgd2hpY2ggbWVhbnMgZXhwbGljaXQgbWFza3MgYWx3YXlzLiAqLworc3RhdGljIHVpbnQzMl90CituZXRfbWFzayhzdHJ1Y3QgaW5fYWRkciBpbikJLyohPCBYWFggLSBzaG91bGQgcmVhbGx5IHVzZSBzeXN0ZW0ncyB2ZXJzaW9uIG9mIHRoaXMgKi8KK3sKKwlyZWdpc3RlciB1aW50MzJfdCBpID0gbnRvaGwoaW4uc19hZGRyKTsKKworCWlmIChJTl9DTEFTU0EoaSkpCisJCXJldHVybiAoaHRvbmwoSU5fQ0xBU1NBX05FVCkpOworCWVsc2UgaWYgKElOX0NMQVNTQihpKSkKKwkJcmV0dXJuIChodG9ubChJTl9DTEFTU0JfTkVUKSk7CisJcmV0dXJuIChodG9ubChJTl9DTEFTU0NfTkVUKSk7Cit9CisjZW5kaWYKKworI2lmZGVmIEFORFJPSURfQ0hBTkdFUworc3RhdGljIGludAorcmVhbF9yYW5kb21pZCh1X2ludCAqcmFuZG9tX3ZhbHVlKSB7CisJLyogb3BlbiB0aGUgbm9uYmxvY2tpbmcgcmFuZG9tIGRldmljZSwgcmV0dXJuaW5nIC0xIG9uIGZhaWx1cmUgKi8KKwlpbnQgcmFuZG9tX2RldmljZSA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTsKKwlpZiAocmFuZG9tX2RldmljZSA8IDApIHsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIHJlYWQgZnJvbSB0aGUgcmFuZG9tIGRldmljZSwgcmV0dXJuaW5nIC0xIG9uIGZhaWx1cmUgKG9yIHRvbyBtYW55IHJldHJpZXMpKi8KKwlmb3IgKHVfaW50IHJldHJ5ID0gNTsgcmV0cnkgPiAwOyByZXRyeS0tKSB7CisJCWludCByZXR2YWwgPSByZWFkKHJhbmRvbV9kZXZpY2UsIHJhbmRvbV92YWx1ZSwgc2l6ZW9mKHVfaW50KSk7CisJCWlmIChyZXR2YWwgPT0gc2l6ZW9mKHVfaW50KSkgeworCQkJKnJhbmRvbV92YWx1ZSAmPSAweGZmZmY7CisJCQljbG9zZShyYW5kb21fZGV2aWNlKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKChyZXR2YWwgPCAwKSAmJiAoZXJybm8gIT0gRUlOVFIpKSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCWNsb3NlKHJhbmRvbV9kZXZpY2UpOworCXJldHVybiAtMTsKK30KKyNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KKwordV9pbnQKK3Jlc19yYW5kb21pZCh2b2lkKSB7CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisJaW50IHN0YXR1cyA9IDA7CisJdV9pbnQgb3V0cHV0ID0gMDsKKwlzdGF0dXMgPSByZWFsX3JhbmRvbWlkKCZvdXRwdXQpOworCWlmIChzdGF0dXMgIT0gLTEpIHsKKwkJcmV0dXJuIG91dHB1dDsKKwl9CisjZW5kaWYgLyogQU5EUk9JRF9DSEFOR0VTICovCisJc3RydWN0IHRpbWV2YWwgbm93OworCWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKwlyZXR1cm4gKDB4ZmZmZiAmIChub3cudHZfc2VjIF4gbm93LnR2X3VzZWMgXiBnZXRwaWQoKSkpOworfQorCisvKiUKKyAqIFRoaXMgcm91dGluZSBpcyBmb3IgY2xvc2luZyB0aGUgc29ja2V0IGlmIGEgdmlydHVhbCBjaXJjdWl0IGlzIHVzZWQgYW5kCisgKiB0aGUgcHJvZ3JhbSB3YW50cyB0byBjbG9zZSBpdC4gIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgZW5kaG9zdGVudCgpCisgKiB3aGljaCBleHBlY3RzIHRvIGNsb3NlIHRoZSBzb2NrZXQuCisgKgorICogVGhpcyByb3V0aW5lIGlzIG5vdCBleHBlY3RlZCB0byBiZSB1c2VyIHZpc2libGUuCisgKi8KK3ZvaWQKK3Jlc19uY2xvc2UocmVzX3N0YXRlIHN0YXRwKQoreworCWludCBuczsKKworCWlmIChzdGF0cC0+X3Zjc29jayA+PSAwKSB7CisJCSh2b2lkKSBjbG9zZShzdGF0cC0+X3Zjc29jayk7CisJCXN0YXRwLT5fdmNzb2NrID0gLTE7CisJCXN0YXRwLT5fZmxhZ3MgJj0gfihSRVNfRl9WQyB8IFJFU19GX0NPTk4pOworCX0KKwlmb3IgKG5zID0gMDsgbnMgPCBzdGF0cC0+X3UuX2V4dC5uc2NvdW50OyBucysrKSB7CisJCWlmIChzdGF0cC0+X3UuX2V4dC5uc3NvY2tzW25zXSAhPSAtMSkgeworCQkJKHZvaWQpIGNsb3NlKHN0YXRwLT5fdS5fZXh0Lm5zc29ja3NbbnNdKTsKKwkJCXN0YXRwLT5fdS5fZXh0Lm5zc29ja3NbbnNdID0gLTE7CisJCX0KKwl9Cit9CisKK3ZvaWQKK3Jlc19uZGVzdHJveShyZXNfc3RhdGUgc3RhdHApCit7CisJcmVzX25jbG9zZShzdGF0cCk7CisJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCAhPSBOVUxMKQorCQlmcmVlKHN0YXRwLT5fdS5fZXh0LmV4dCk7CisJc3RhdHAtPm9wdGlvbnMgJj0gflJFU19JTklUOworCXN0YXRwLT5fdS5fZXh0LmV4dCA9IE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKgorcmVzX2dldF9uaWJibGVzdWZmaXgocmVzX3N0YXRlIHN0YXRwKQoreworCWlmIChzdGF0cC0+X3UuX2V4dC5leHQpCisJCXJldHVybiAoc3RhdHAtPl91Ll9leHQuZXh0LT5uc3VmZml4KTsKKwlyZXR1cm4gKCJpcDYuYXJwYSIpOworfQorCitjb25zdCBjaGFyICoKK3Jlc19nZXRfbmliYmxlc3VmZml4MihyZXNfc3RhdGUgc3RhdHApCit7CisJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCkKKwkJcmV0dXJuIChzdGF0cC0+X3UuX2V4dC5leHQtPm5zdWZmaXgyKTsKKwlyZXR1cm4gKCJpcDYuaW50Iik7Cit9CisKK3ZvaWQKK3Jlc19zZXRzZXJ2ZXJzKHJlc19zdGF0ZSBzdGF0cCwgY29uc3QgdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uICpzZXQsIGludCBjbnQpCit7CisJaW50IGksIG5zZXJ2OworCXNpemVfdCBzaXplOworCisJLyogY2xvc2Ugb3BlbiBzZXJ2ZXJzICovCisJcmVzX25jbG9zZShzdGF0cCk7CisKKwkvKiBjYXVzZSBydHQgdGltZXMgdG8gYmUgZm9yZ290dGVuICovCisJc3RhdHAtPl91Ll9leHQubnNjb3VudCA9IDA7CisKKwluc2VydiA9IDA7CisJZm9yIChpID0gMDsgaSA8IGNudCAmJiBuc2VydiA8IE1BWE5TOyBpKyspIHsKKwkJc3dpdGNoIChzZXQtPnNpbi5zaW5fZmFtaWx5KSB7CisJCWNhc2UgQUZfSU5FVDoKKwkJCXNpemUgPSBzaXplb2Yoc2V0LT5zaW4pOworCQkJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCkKKwkJCQltZW1jcHkoJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tuc2Vydl0sCisJCQkJCSZzZXQtPnNpbiwgc2l6ZSk7CisJCQlpZiAoc2l6ZSA8PSBzaXplb2Yoc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSkpCisJCQkJbWVtY3B5KCZzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLAorCQkJCQkmc2V0LT5zaW4sIHNpemUpOworCQkJZWxzZQorCQkJCXN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0uc2luX2ZhbWlseSA9IDA7CisJCQluc2VydisrOworCQkJYnJlYWs7CisKKyNpZmRlZiBIQVNfSU5FVDZfU1RSVUNUUworCQljYXNlIEFGX0lORVQ2OgorCQkJc2l6ZSA9IHNpemVvZihzZXQtPnNpbjYpOworCQkJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCkKKwkJCQltZW1jcHkoJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tuc2Vydl0sCisJCQkJCSZzZXQtPnNpbjYsIHNpemUpOworCQkJaWYgKHNpemUgPD0gc2l6ZW9mKHN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0pKQorCQkJCW1lbWNweSgmc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSwKKwkJCQkJJnNldC0+c2luNiwgc2l6ZSk7CisJCQllbHNlCisJCQkJc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XS5zaW5fZmFtaWx5ID0gMDsKKwkJCW5zZXJ2Kys7CisJCQlicmVhazsKKyNlbmRpZgorCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlzZXQrKzsKKwl9CisJc3RhdHAtPm5zY291bnQgPSBuc2VydjsKKworfQorCitpbnQKK3Jlc19nZXRzZXJ2ZXJzKHJlc19zdGF0ZSBzdGF0cCwgdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uICpzZXQsIGludCBjbnQpCit7CisJaW50IGk7CisJc2l6ZV90IHNpemU7CisJdWludDE2X3QgZmFtaWx5OworCisJZm9yIChpID0gMDsgaSA8IHN0YXRwLT5uc2NvdW50ICYmIGkgPCBjbnQ7IGkrKykgeworCQlpZiAoc3RhdHAtPl91Ll9leHQuZXh0KQorCQkJZmFtaWx5ID0gc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW2ldLnNpbi5zaW5fZmFtaWx5OworCQllbHNlCisJCQlmYW1pbHkgPSBzdGF0cC0+bnNhZGRyX2xpc3RbaV0uc2luX2ZhbWlseTsKKworCQlzd2l0Y2ggKGZhbWlseSkgeworCQljYXNlIEFGX0lORVQ6CisJCQlzaXplID0gc2l6ZW9mKHNldC0+c2luKTsKKwkJCWlmIChzdGF0cC0+X3UuX2V4dC5leHQpCisJCQkJbWVtY3B5KCZzZXQtPnNpbiwKKwkJCQkgICAgICAgJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tpXSwKKwkJCQkgICAgICAgc2l6ZSk7CisJCQllbHNlCisJCQkJbWVtY3B5KCZzZXQtPnNpbiwgJnN0YXRwLT5uc2FkZHJfbGlzdFtpXSwKKwkJCQkgICAgICAgc2l6ZSk7CisJCQlicmVhazsKKworI2lmZGVmIEhBU19JTkVUNl9TVFJVQ1RTCisJCWNhc2UgQUZfSU5FVDY6CisJCQlzaXplID0gc2l6ZW9mKHNldC0+c2luNik7CisJCQlpZiAoc3RhdHAtPl91Ll9leHQuZXh0KQorCQkJCW1lbWNweSgmc2V0LT5zaW42LAorCQkJCSAgICAgICAmc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW2ldLAorCQkJCSAgICAgICBzaXplKTsKKwkJCWVsc2UKKwkJCQltZW1jcHkoJnNldC0+c2luNiwgJnN0YXRwLT5uc2FkZHJfbGlzdFtpXSwKKwkJCQkgICAgICAgc2l6ZSk7CisJCQlicmVhazsKKyNlbmRpZgorCisJCWRlZmF1bHQ6CisJCQlzZXQtPnNpbi5zaW5fZmFtaWx5ID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXNldCsrOworCX0KKwlyZXR1cm4gKHN0YXRwLT5uc2NvdW50KTsKK30KKworI2lmZGVmIEFORFJPSURfQ0hBTkdFUwordm9pZCByZXNfc2V0bmV0aWQocmVzX3N0YXRlIHN0YXRwLCB1bnNpZ25lZCBuZXRpZCkKK3sKKwlpZiAoc3RhdHAgIT0gTlVMTCkgeworCQlzdGF0cC0+bmV0aWQgPSBuZXRpZDsKKwl9Cit9CisKK3ZvaWQgcmVzX3NldG1hcmsocmVzX3N0YXRlIHN0YXRwLCB1bnNpZ25lZCBtYXJrKQoreworCWlmIChzdGF0cCAhPSBOVUxMKSB7CisJCXN0YXRwLT5fbWFyayA9IG1hcms7CisJfQorfQorCisjZW5kaWYgLyogQU5EUk9JRF9DSEFOR0VTICovCmRpZmYgLS1naXQgYS9saWJjL2Rucy9yZXNvbHYvcmVzX21rcXVlcnkuYyBiL2xpYmMvZG5zL3Jlc29sdi9yZXNfbWtxdWVyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MzZhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Rucy9yZXNvbHYvcmVzX21rcXVlcnkuYwpAQCAtMCwwICsxLDI3NiBAQAorLyoJJE5ldEJTRDogcmVzX21rcXVlcnkuYyx2IDEuNiAyMDA2LzAxLzI0IDE3OjQwOjMyIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAocXVlcnkgaWQgcmFuZG9taXphdGlvbikKKyAqIENvcHlyaWdodCAoYykgMTk4NSwgMTk5MworICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAorICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAorICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAorICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCisgKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX21rcXVlcnkuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX21rcXVlcnkuYyx2IDEuMS4yLjIuNC4yIDIwMDQvMDMvMTYgMTI6MzQ6MTggbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiByZXNfbWtxdWVyeS5jLHYgMS42IDIwMDYvMDEvMjQgMTc6NDA6MzIgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIE9wdGlvbnMuICBMZWF2ZSB0aGVtIG9uLiAqLworI2lmbmRlZiBERUJVRworI2RlZmluZSBERUJVRworI2VuZGlmCisKKyNpZm5kZWYgbGludAorI2RlZmluZSBVTlVTRUQoYSkJKHZvaWQpJmEKKyNlbHNlCisjZGVmaW5lIFVOVVNFRChhKQlhID0gYQorI2VuZGlmCisKK2V4dGVybiBjb25zdCBjaGFyICpfcmVzX29wY29kZXNbXTsKKworLyoKKyAqIEZvcm0gYWxsIHR5cGVzIG9mIHF1ZXJpZXMuCisgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSByZXN1bHQgb3IgLTEuCisgKi8KK2ludAorcmVzX25ta3F1ZXJ5KHJlc19zdGF0ZSBzdGF0cCwKKwkgICAgIGludCBvcCwJCQkvKiBvcGNvZGUgb2YgcXVlcnkgKi8KKwkgICAgIGNvbnN0IGNoYXIgKmRuYW1lLAkJLyogZG9tYWluIG5hbWUgKi8KKwkgICAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJICAgICBjb25zdCB1X2NoYXIgKmRhdGEsCS8qIHJlc291cmNlIHJlY29yZCBkYXRhICovCisJICAgICBpbnQgZGF0YWxlbiwJCS8qIGxlbmd0aCBvZiBkYXRhICovCisJICAgICBjb25zdCB1X2NoYXIgKm5ld3JyX2luLAkvKiBuZXcgcnIgZm9yIG1vZGlmeSBvciBhcHBlbmQgKi8KKwkgICAgIHVfY2hhciAqYnVmLAkJLyogYnVmZmVyIHRvIHB1dCBxdWVyeSAqLworCSAgICAgaW50IGJ1ZmxlbikJCS8qIHNpemUgb2YgYnVmZmVyICovCit7CisJcmVnaXN0ZXIgSEVBREVSICpocDsKKwlyZWdpc3RlciB1X2NoYXIgKmNwLCAqZXA7CisJcmVnaXN0ZXIgaW50IG47CisJdV9jaGFyICpkbnB0cnNbMjBdLCAqKmRwcCwgKipsYXN0ZG5wdHI7CisKKwlVTlVTRUQobmV3cnJfaW4pOworCisjaWZkZWYgREVCVUcKKwlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCXByaW50ZigiOzsgcmVzX25ta3F1ZXJ5KCVzLCAlcywgJXMsICVzKVxuIiwKKwkJICAgICAgIF9yZXNfb3Bjb2Rlc1tvcF0sIGRuYW1lLCBwX2NsYXNzKGNsYXNzKSwgcF90eXBlKHR5cGUpKTsKKyNlbmRpZgorCS8qCisJICogSW5pdGlhbGl6ZSBoZWFkZXIgZmllbGRzLgorCSAqLworCWlmICgoYnVmID09IE5VTEwpIHx8IChidWZsZW4gPCBIRklYRURTWikpCisJCXJldHVybiAoLTEpOworCW1lbXNldChidWYsIDAsIEhGSVhFRFNaKTsKKwlocCA9IChIRUFERVIgKikodm9pZCAqKWJ1ZjsKKwlocC0+aWQgPSBodG9ucyhyZXNfcmFuZG9taWQoKSk7CisJaHAtPm9wY29kZSA9IG9wOworCWhwLT5yZCA9IChzdGF0cC0+b3B0aW9ucyAmIFJFU19SRUNVUlNFKSAhPSAwVTsKKwlocC0+cmNvZGUgPSBOT0VSUk9SOworCWNwID0gYnVmICsgSEZJWEVEU1o7CisJZXAgPSBidWYgKyBidWZsZW47CisJZHBwID0gZG5wdHJzOworCSpkcHArKyA9IGJ1ZjsKKwkqZHBwKysgPSBOVUxMOworCWxhc3RkbnB0ciA9IGRucHRycyArIHNpemVvZiBkbnB0cnMgLyBzaXplb2YgZG5wdHJzWzBdOworCS8qCisJICogcGVyZm9ybSBvcGNvZGUgc3BlY2lmaWMgcHJvY2Vzc2luZworCSAqLworCXN3aXRjaCAob3ApIHsKKwljYXNlIFFVRVJZOgkvKkZBTExUSFJPVUdIKi8KKwljYXNlIE5TX05PVElGWV9PUDoKKwkJaWYgKGVwIC0gY3AgPCBRRklYRURTWikKKwkJCXJldHVybiAoLTEpOworCQlpZiAoKG4gPSBkbl9jb21wKGRuYW1lLCBjcCwgZXAgLSBjcCAtIFFGSVhFRFNaLCBkbnB0cnMsCisJCSAgICBsYXN0ZG5wdHIpKSA8IDApCisJCQlyZXR1cm4gKC0xKTsKKwkJY3AgKz0gbjsKKwkJbnNfcHV0MTYodHlwZSwgY3ApOworCQljcCArPSBJTlQxNlNaOworCQluc19wdXQxNihjbGFzcywgY3ApOworCQljcCArPSBJTlQxNlNaOworCQlocC0+cWRjb3VudCA9IGh0b25zKDEpOworCQlpZiAob3AgPT0gUVVFUlkgfHwgZGF0YSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCS8qCisJCSAqIE1ha2UgYW4gYWRkaXRpb25hbCByZWNvcmQgZm9yIGNvbXBsZXRpb24gZG9tYWluLgorCQkgKi8KKwkJaWYgKChlcCAtIGNwKSA8IFJSRklYRURTWikKKwkJCXJldHVybiAoLTEpOworCQluID0gZG5fY29tcCgoY29uc3QgY2hhciAqKWRhdGEsIGNwLCBlcCAtIGNwIC0gUlJGSVhFRFNaLAorCQkJICAgIGRucHRycywgbGFzdGRucHRyKTsKKwkJaWYgKG4gPCAwKQorCQkJcmV0dXJuICgtMSk7CisJCWNwICs9IG47CisJCW5zX3B1dDE2KFRfTlVMTCwgY3ApOworCQljcCArPSBJTlQxNlNaOworCQluc19wdXQxNihjbGFzcywgY3ApOworCQljcCArPSBJTlQxNlNaOworCQluc19wdXQzMigwLCBjcCk7CisJCWNwICs9IElOVDMyU1o7CisJCW5zX3B1dDE2KDAsIGNwKTsKKwkJY3AgKz0gSU5UMTZTWjsKKwkJaHAtPmFyY291bnQgPSBodG9ucygxKTsKKwkJYnJlYWs7CisKKwljYXNlIElRVUVSWToKKwkJLyoKKwkJICogSW5pdGlhbGl6ZSBhbnN3ZXIgc2VjdGlvbgorCQkgKi8KKwkJaWYgKGVwIC0gY3AgPCAxICsgUlJGSVhFRFNaICsgZGF0YWxlbikKKwkJCXJldHVybiAoLTEpOworCQkqY3ArKyA9ICdcMCc7CS8qIG5vIGRvbWFpbiBuYW1lICovCisJCW5zX3B1dDE2KHR5cGUsIGNwKTsKKwkJY3AgKz0gSU5UMTZTWjsKKwkJbnNfcHV0MTYoY2xhc3MsIGNwKTsKKwkJY3AgKz0gSU5UMTZTWjsKKwkJbnNfcHV0MzIoMCwgY3ApOworCQljcCArPSBJTlQzMlNaOworCQluc19wdXQxNihkYXRhbGVuLCBjcCk7CisJCWNwICs9IElOVDE2U1o7CisJCWlmIChkYXRhbGVuKSB7CisJCQltZW1jcHkoY3AsIGRhdGEsIChzaXplX3QpZGF0YWxlbik7CisJCQljcCArPSBkYXRhbGVuOworCQl9CisJCWhwLT5hbmNvdW50ID0gaHRvbnMoMSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuICgtMSk7CisJfQorCXJldHVybiAoY3AgLSBidWYpOworfQorCisjaWZkZWYgUkVTX1VTRV9FRE5TMAorLyogYXR0YWNoIE9QVCBwc2V1ZG8tUlIsIGFzIGRvY3VtZW50ZWQgaW4gUkZDMjY3MSAoRUROUzApLiAqLworI2lmbmRlZiBUX09QVAorI2RlZmluZSBUX09QVAk0MQorI2VuZGlmCisKK2ludAorcmVzX25vcHQocmVzX3N0YXRlIHN0YXRwLAorCSBpbnQgbjAsCQkvKiBjdXJyZW50IG9mZnNldCBpbiBidWZmZXIgKi8KKwkgdV9jaGFyICpidWYsCQkvKiBidWZmZXIgdG8gcHV0IHF1ZXJ5ICovCisJIGludCBidWZsZW4sCQkvKiBzaXplIG9mIGJ1ZmZlciAqLworCSBpbnQgYW5zbGVuKQkJLyogVURQIGFuc3dlciBidWZmZXIgc2l6ZSAqLworeworCXJlZ2lzdGVyIEhFQURFUiAqaHA7CisJcmVnaXN0ZXIgdV9jaGFyICpjcCwgKmVwOworCXVfaW50MTZfdCBmbGFncyA9IDA7CisKKyNpZmRlZiBERUJVRworCWlmICgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpICE9IDBVKQorCQlwcmludGYoIjs7IHJlc19ub3B0KClcbiIpOworI2VuZGlmCisKKwlocCA9IChIRUFERVIgKikodm9pZCAqKWJ1ZjsKKwljcCA9IGJ1ZiArIG4wOworCWVwID0gYnVmICsgYnVmbGVuOworCisJaWYgKChlcCAtIGNwKSA8IDEgKyBSUkZJWEVEU1opCisJCXJldHVybiAoLTEpOworCisJKmNwKysgPSAwOwkvKiAiLiIgKi8KKworCW5zX3B1dDE2KFRfT1BULCBjcCk7CS8qIFRZUEUgKi8KKwljcCArPSBJTlQxNlNaOworCW5zX3B1dDE2KGFuc2xlbiAmIDB4ZmZmZiwgY3ApOwkvKiBDTEFTUyA9IFVEUCBwYXlsb2FkIHNpemUgKi8KKwljcCArPSBJTlQxNlNaOworCSpjcCsrID0gTk9FUlJPUjsJLyogZXh0ZW5kZWQgUkNPREUgKi8KKwkqY3ArKyA9IDA7CQkvKiBFRE5TIHZlcnNpb24gKi8KKwlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfVVNFX0ROU1NFQykgeworI2lmZGVmIERFQlVHCisJCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJCXByaW50ZigiOzsgcmVzX29wdCgpLi4uIEVORFMwIEROU1NFQ1xuIik7CisjZW5kaWYKKwkJZmxhZ3MgfD0gTlNfT1BUX0ROU1NFQ19PSzsKKwl9CisJbnNfcHV0MTYoZmxhZ3MsIGNwKTsKKwljcCArPSBJTlQxNlNaOworCW5zX3B1dDE2KDAsIGNwKTsJLyogUkRMRU4gKi8KKwljcCArPSBJTlQxNlNaOworCWhwLT5hcmNvdW50ID0gaHRvbnMobnRvaHMoaHAtPmFyY291bnQpICsgMSk7CisKKwlyZXR1cm4gKGNwIC0gYnVmKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19wcml2YXRlLmggYi9saWJjL2Rucy9yZXNvbHYvcmVzX3ByaXZhdGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9uZXRic2QvcmVzb2x2L3Jlc19wcml2YXRlLmgKcmVuYW1lIHRvIGxpYmMvZG5zL3Jlc29sdi9yZXNfcHJpdmF0ZS5oCmRpZmYgLS1naXQgYS9saWJjL2Rucy9yZXNvbHYvcmVzX3F1ZXJ5LmMgYi9saWJjL2Rucy9yZXNvbHYvcmVzX3F1ZXJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkOWIxNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL3Jlc29sdi9yZXNfcXVlcnkuYwpAQCAtMCwwICsxLDQyNSBAQAorLyoJJE5ldEJTRDogcmVzX3F1ZXJ5LmMsdiAxLjcgMjAwNi8wMS8yNCAxNzo0MToyNSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkzCisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqIAlDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5MyBieSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0CisgKiB0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0CisgKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCisgKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKKyAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHNjY3NpZFtdID0gIkAoIylyZXNfcXVlcnkuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX3F1ZXJ5LmMsdiAxLjIuMi4zLjQuMiAyMDA0LzAzLzE2IDEyOjM0OjE5IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogcmVzX3F1ZXJ5LmMsdiAxLjcgMjAwNi8wMS8yNCAxNzo0MToyNSBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfY2FjaGUuaCIKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgRElTQUJMRV9IT1NUX0FMSUFTIDEKKworLyogT3B0aW9ucy4gIExlYXZlIHRoZW0gb24uICovCisjaWZuZGVmIERFQlVHCisjZGVmaW5lIERFQlVHCisjZW5kaWYKKworI2lmIFBBQ0tFVFNaID4gMTAyNAorI2RlZmluZSBNQVhQQUNLRVQJUEFDS0VUU1oKKyNlbHNlCisjZGVmaW5lIE1BWFBBQ0tFVAkxMDI0CisjZW5kaWYKKworLyoKKyAqIEZvcm11bGF0ZSBhIG5vcm1hbCBxdWVyeSwgc2VuZCwgYW5kIGF3YWl0IGFuc3dlci4KKyAqIFJldHVybmVkIGFuc3dlciBpcyBwbGFjZWQgaW4gc3VwcGxpZWQgYnVmZmVyICJhbnN3ZXIiLgorICogUGVyZm9ybSBwcmVsaW1pbmFyeSBjaGVjayBvZiBhbnN3ZXIsIHJldHVybmluZyBzdWNjZXNzIG9ubHkKKyAqIGlmIG5vIGVycm9yIGlzIGluZGljYXRlZCBhbmQgdGhlIGFuc3dlciBjb3VudCBpcyBub256ZXJvLgorICogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSByZXNwb25zZSBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqIEVycm9yIG51bWJlciBpcyBsZWZ0IGluIEhfRVJSTk8uCisgKgorICogQ2FsbGVyIG11c3QgcGFyc2UgYW5zd2VyIGFuZCBkZXRlcm1pbmUgd2hldGhlciBpdCBhbnN3ZXJzIHRoZSBxdWVzdGlvbi4KKyAqLworaW50CityZXNfbnF1ZXJ5KHJlc19zdGF0ZSBzdGF0cCwKKwkgICBjb25zdCBjaGFyICpuYW1lLAkvKiBkb21haW4gbmFtZSAqLworCSAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJICAgdV9jaGFyICphbnN3ZXIsCS8qIGJ1ZmZlciB0byBwdXQgYW5zd2VyICovCisJICAgaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyIGJ1ZmZlciAqLworeworCXVfY2hhciBidWZbTUFYUEFDS0VUXTsKKwlIRUFERVIgKmhwID0gKEhFQURFUiAqKSh2b2lkICopYW5zd2VyOworCWludCBuOworCXVfaW50IG9mbGFnczsKKworCW9mbGFncyA9IHN0YXRwLT5fZmxhZ3M7CisKK2FnYWluOgorCWhwLT5yY29kZSA9IE5PRVJST1I7CS8qIGRlZmF1bHQgKi8KKworI2lmZGVmIERFQlVHCisJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQlwcmludGYoIjs7IHJlc19xdWVyeSglcywgJWQsICVkKVxuIiwgbmFtZSwgY2xhc3MsIHR5cGUpOworI2VuZGlmCisKKwluID0gcmVzX25ta3F1ZXJ5KHN0YXRwLCBRVUVSWSwgbmFtZSwgY2xhc3MsIHR5cGUsIE5VTEwsIDAsIE5VTEwsCisJCQkgYnVmLCBzaXplb2YoYnVmKSk7CisjaWZkZWYgUkVTX1VTRV9FRE5TMAorCWlmIChuID4gMCAmJiAoc3RhdHAtPl9mbGFncyAmIFJFU19GX0VETlMwRVJSKSA9PSAwICYmCisJICAgIChzdGF0cC0+b3B0aW9ucyAmIChSRVNfVVNFX0VETlMwfFJFU19VU0VfRE5TU0VDKSkgIT0gMFUpCisJCW4gPSByZXNfbm9wdChzdGF0cCwgbiwgYnVmLCBzaXplb2YoYnVmKSwgYW5zbGVuKTsKKyNlbmRpZgorCWlmIChuIDw9IDApIHsKKyNpZmRlZiBERUJVRworCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQlwcmludGYoIjs7IHJlc19xdWVyeTogbWtxdWVyeSBmYWlsZWRcbiIpOworI2VuZGlmCisJCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgTk9fUkVDT1ZFUlkpOworCQlyZXR1cm4gKG4pOworCX0KKwluID0gcmVzX25zZW5kKHN0YXRwLCBidWYsIG4sIGFuc3dlciwgYW5zbGVuKTsKKwlpZiAobiA8IDApIHsKKyNpZmRlZiBSRVNfVVNFX0VETlMwCisJCS8qIGlmIHRoZSBxdWVyeSBjaG9rZWQgd2l0aCBFRE5TMCwgcmV0cnkgd2l0aG91dCBFRE5TMCAqLworCQlpZiAoKHN0YXRwLT5vcHRpb25zICYgKFJFU19VU0VfRUROUzB8UkVTX1VTRV9ETlNTRUMpKSAhPSAwVSAmJgorCQkgICAgKChvZmxhZ3MgXiBzdGF0cC0+X2ZsYWdzKSAmIFJFU19GX0VETlMwRVJSKSAhPSAwKSB7CisJCQlzdGF0cC0+X2ZsYWdzIHw9IFJFU19GX0VETlMwRVJSOworCQkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQkJCXByaW50ZigiOzsgcmVzX25xdWVyeTogcmV0cnkgd2l0aG91dCBFRE5TMFxuIik7CisJCQlnb3RvIGFnYWluOworCQl9CisjZW5kaWYKKyNpZmRlZiBERUJVRworCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQlwcmludGYoIjs7IHJlc19xdWVyeTogc2VuZCBlcnJvclxuIik7CisjZW5kaWYKKwkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBUUllfQUdBSU4pOworCQlyZXR1cm4gKG4pOworCX0KKworCWlmIChocC0+cmNvZGUgIT0gTk9FUlJPUiB8fCBudG9ocyhocC0+YW5jb3VudCkgPT0gMCkgeworI2lmZGVmIERFQlVHCisJCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJCXByaW50ZigiOzsgcmNvZGUgPSAoJXMpLCBjb3VudHMgPSBhbjolZCBuczolZCBhcjolZFxuIiwKKwkJCSAgICAgICBwX3Jjb2RlKGhwLT5yY29kZSksCisJCQkgICAgICAgbnRvaHMoaHAtPmFuY291bnQpLAorCQkJICAgICAgIG50b2hzKGhwLT5uc2NvdW50KSwKKwkJCSAgICAgICBudG9ocyhocC0+YXJjb3VudCkpOworI2VuZGlmCisJCXN3aXRjaCAoaHAtPnJjb2RlKSB7CisJCWNhc2UgTlhET01BSU46CisJCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIEhPU1RfTk9UX0ZPVU5EKTsKKwkJCWJyZWFrOworCQljYXNlIFNFUlZGQUlMOgorCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBUUllfQUdBSU4pOworCQkJYnJlYWs7CisJCWNhc2UgTk9FUlJPUjoKKwkJCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgTk9fREFUQSk7CisJCQlicmVhazsKKwkJY2FzZSBGT1JNRVJSOgorCQljYXNlIE5PVElNUDoKKwkJY2FzZSBSRUZVU0VEOgorCQlkZWZhdWx0OgorCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBOT19SRUNPVkVSWSk7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gKC0xKTsKKwl9CisJcmV0dXJuIChuKTsKK30KKworLyoKKyAqIEZvcm11bGF0ZSBhIG5vcm1hbCBxdWVyeSwgc2VuZCwgYW5kIHJldHJpZXZlIGFuc3dlciBpbiBzdXBwbGllZCBidWZmZXIuCisgKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHJlc3BvbnNlIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICogSWYgZW5hYmxlZCwgaW1wbGVtZW50IHNlYXJjaCBydWxlcyB1bnRpbCBhbnN3ZXIgb3IgdW5yZWNvdmVyYWJsZSBmYWlsdXJlCisgKiBpcyBkZXRlY3RlZC4gIEVycm9yIGNvZGUsIGlmIGFueSwgaXMgbGVmdCBpbiBIX0VSUk5PLgorICovCitpbnQKK3Jlc19uc2VhcmNoKHJlc19zdGF0ZSBzdGF0cCwKKwkgICAgY29uc3QgY2hhciAqbmFtZSwJLyogZG9tYWluIG5hbWUgKi8KKwkgICAgaW50IGNsYXNzLCBpbnQgdHlwZSwJLyogY2xhc3MgYW5kIHR5cGUgb2YgcXVlcnkgKi8KKwkgICAgdV9jaGFyICphbnN3ZXIsCS8qIGJ1ZmZlciB0byBwdXQgYW5zd2VyICovCisJICAgIGludCBhbnNsZW4pCQkvKiBzaXplIG9mIGFuc3dlciAqLworeworCWNvbnN0IGNoYXIgKmNwLCAqIGNvbnN0ICpkb21haW47CisJSEVBREVSICpocCA9IChIRUFERVIgKikodm9pZCAqKWFuc3dlcjsKKwljaGFyIHRtcFtOU19NQVhETkFNRV07CisJdV9pbnQgZG90czsKKwlpbnQgdHJhaWxpbmdfZG90LCByZXQsIHNhdmVkX2hlcnJubzsKKwlpbnQgZ290X25vZGF0YSA9IDAsIGdvdF9zZXJ2ZmFpbCA9IDAsIHJvb3Rfb25fbGlzdCA9IDA7CisJaW50IHRyaWVkX2FzX2lzID0gMDsKKwlpbnQgc2VhcmNoZWQgPSAwOworCisJZXJybm8gPSAwOworCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgSE9TVF9OT1RfRk9VTkQpOyAgLyogVHJ1ZSBpZiB3ZSBuZXZlciBxdWVyeS4gKi8KKworCWRvdHMgPSAwOworCWZvciAoY3AgPSBuYW1lOyAqY3AgIT0gJ1wwJzsgY3ArKykKKwkJZG90cyArPSAoKmNwID09ICcuJyk7CisJdHJhaWxpbmdfZG90ID0gMDsKKwlpZiAoY3AgPiBuYW1lICYmICotLWNwID09ICcuJykKKwkJdHJhaWxpbmdfZG90Kys7CisKKwkvKiBJZiB0aGVyZSBhcmVuJ3QgYW55IGRvdHMsIGl0IGNvdWxkIGJlIGEgdXNlci1sZXZlbCBhbGlhcy4gKi8KKwlpZiAoIWRvdHMgJiYgKGNwID0gcmVzX2hvc3RhbGlhcyhzdGF0cCwgbmFtZSwgdG1wLCBzaXplb2YgdG1wKSkhPSBOVUxMKQorCQlyZXR1cm4gKHJlc19ucXVlcnkoc3RhdHAsIGNwLCBjbGFzcywgdHlwZSwgYW5zd2VyLCBhbnNsZW4pKTsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIGVub3VnaCBkb3RzIGluIHRoZSBuYW1lLCBsZXQncyBqdXN0IGdpdmUgaXQgYQorCSAqIHRyeSAnYXMgaXMnLiBUaGUgdGhyZXNob2xkIGNhbiBiZSBzZXQgd2l0aCB0aGUgIm5kb3RzIiBvcHRpb24uCisJICogQWxzbywgcXVlcnkgJ2FzIGlzJywgaWYgdGhlcmUgaXMgYSB0cmFpbGluZyBkb3QgaW4gdGhlIG5hbWUuCisJICovCisJc2F2ZWRfaGVycm5vID0gLTE7CisJaWYgKGRvdHMgPj0gc3RhdHAtPm5kb3RzIHx8IHRyYWlsaW5nX2RvdCkgeworCQlyZXQgPSByZXNfbnF1ZXJ5ZG9tYWluKHN0YXRwLCBuYW1lLCBOVUxMLCBjbGFzcywgdHlwZSwKKwkJCQkJIGFuc3dlciwgYW5zbGVuKTsKKwkJaWYgKHJldCA+IDAgfHwgdHJhaWxpbmdfZG90KQorCQkJcmV0dXJuIChyZXQpOworCQlzYXZlZF9oZXJybm8gPSBzdGF0cC0+cmVzX2hfZXJybm87CisJCXRyaWVkX2FzX2lzKys7CisJfQorCisJLyoKKwkgKiBXZSBkbyBhdCBsZWFzdCBvbmUgbGV2ZWwgb2Ygc2VhcmNoIGlmCisJICoJLSB0aGVyZSBpcyBubyBkb3QgYW5kIFJFU19ERUZOQU1FIGlzIHNldCwgb3IKKwkgKgktIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBkb3QsIHRoZXJlIGlzIG5vIHRyYWlsaW5nIGRvdCwKKwkgKgkgIGFuZCBSRVNfRE5TUkNIIGlzIHNldC4KKwkgKi8KKwlpZiAoKCFkb3RzICYmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUZOQU1FUykgIT0gMFUpIHx8CisJICAgIChkb3RzICYmICF0cmFpbGluZ19kb3QgJiYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0ROU1JDSCkgIT0gMFUpKSB7CisJCWludCBkb25lID0gMDsKKworCQkvKiBVbmZvcnR1bmF0ZWx5IHdlIG5lZWQgdG8gbG9hZCBuZXR3b3JrLXNwZWNpZmljIGluZm8KKwkJICogKGRucyBzZXJ2ZXJzLCBzZWFyY2ggZG9tYWlucykgYmVmb3JlCisJCSAqIHRoZSBkb21haW4gc3R1ZmYgaXMgdHJpZWQuICBXaWxsIGhhdmUgYSBiZXR0ZXIKKwkJICogZml4IGFmdGVyIHRocmVhZCBwb29scyBhcmUgdXNlZCBhcyB0aGlzIHdpbGwKKwkJICogYmUgbG9hZGVkIG9uY2UgZm9yIHRoZSB0aHJlYWQgaW5zdGVhZCBvZiBlYWNoCisJCSAqIHRpbWUgYSBxdWVyeSBpcyB0cmllZC4KKwkJICovCisJCV9yZXNvbHZfcG9wdWxhdGVfcmVzX2Zvcl9uZXQoc3RhdHApOworCisJCWZvciAoZG9tYWluID0gKGNvbnN0IGNoYXIgKiBjb25zdCAqKXN0YXRwLT5kbnNyY2g7CisJCSAgICAgKmRvbWFpbiAmJiAhZG9uZTsKKwkJICAgICBkb21haW4rKykgeworCQkJc2VhcmNoZWQgPSAxOworCisJCQlpZiAoZG9tYWluWzBdWzBdID09ICdcMCcgfHwKKwkJCSAgICAoZG9tYWluWzBdWzBdID09ICcuJyAmJiBkb21haW5bMF1bMV0gPT0gJ1wwJykpCisJCQkJcm9vdF9vbl9saXN0Kys7CisKKwkJCXJldCA9IHJlc19ucXVlcnlkb21haW4oc3RhdHAsIG5hbWUsICpkb21haW4sCisJCQkJCSAgICAgICBjbGFzcywgdHlwZSwKKwkJCQkJICAgICAgIGFuc3dlciwgYW5zbGVuKTsKKwkJCWlmIChyZXQgPiAwKQorCQkJCXJldHVybiAocmV0KTsKKworCQkJLyoKKwkJCSAqIElmIG5vIHNlcnZlciBwcmVzZW50LCBnaXZlIHVwLgorCQkJICogSWYgbmFtZSBpc24ndCBmb3VuZCBpbiB0aGlzIGRvbWFpbiwKKwkJCSAqIGtlZXAgdHJ5aW5nIGhpZ2hlciBkb21haW5zIGluIHRoZSBzZWFyY2ggbGlzdAorCQkJICogKGlmIHRoYXQncyBlbmFibGVkKS4KKwkJCSAqIE9uIGEgTk9fREFUQSBlcnJvciwga2VlcCB0cnlpbmcsIG90aGVyd2lzZQorCQkJICogYSB3aWxkY2FyZCBlbnRyeSBvZiBhbm90aGVyIHR5cGUgY291bGQga2VlcCB1cworCQkJICogZnJvbSBmaW5kaW5nIHRoaXMgZW50cnkgaGlnaGVyIGluIHRoZSBkb21haW4uCisJCQkgKiBJZiB3ZSBnZXQgc29tZSBvdGhlciBlcnJvciAobmVnYXRpdmUgYW5zd2VyIG9yCisJCQkgKiBzZXJ2ZXIgZmFpbHVyZSksIHRoZW4gc3RvcCBzZWFyY2hpbmcgdXAsCisJCQkgKiBidXQgdHJ5IHRoZSBpbnB1dCBuYW1lIGJlbG93IGluIGNhc2UgaXQncworCQkJICogZnVsbHktcXVhbGlmaWVkLgorCQkJICovCisJCQlpZiAoZXJybm8gPT0gRUNPTk5SRUZVU0VEKSB7CisJCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBUUllfQUdBSU4pOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCisJCQlzd2l0Y2ggKHN0YXRwLT5yZXNfaF9lcnJubykgeworCQkJY2FzZSBOT19EQVRBOgorCQkJCWdvdF9ub2RhdGErKzsKKwkJCQkvKiBGQUxMVEhST1VHSCAqLworCQkJY2FzZSBIT1NUX05PVF9GT1VORDoKKwkJCQkvKiBrZWVwIHRyeWluZyAqLworCQkJCWJyZWFrOworCQkJY2FzZSBUUllfQUdBSU46CisJCQkJaWYgKGhwLT5yY29kZSA9PSBTRVJWRkFJTCkgeworCQkJCQkvKiB0cnkgbmV4dCBzZWFyY2ggZWxlbWVudCwgaWYgYW55ICovCisJCQkJCWdvdF9zZXJ2ZmFpbCsrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJCWRlZmF1bHQ6CisJCQkJLyogYW55dGhpbmcgZWxzZSBpbXBsaWVzIHRoYXQgd2UncmUgZG9uZSAqLworCQkJCWRvbmUrKzsKKwkJCX0KKworCQkJLyogaWYgd2UgZ290IGhlcmUgZm9yIHNvbWUgcmVhc29uIG90aGVyIHRoYW4gRE5TUkNILAorCQkJICogd2Ugb25seSB3YW50ZWQgb25lIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCwgc28gc3RvcC4KKwkJCSAqLworCQkJaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ETlNSQ0gpID09IDBVKQorCQkJCWRvbmUrKzsKKwkJfQorCX0KKworCS8qCisJICogSWYgdGhlIHF1ZXJ5IGhhcyBub3QgYWxyZWFkeSBiZWVuIHRyaWVkIGFzIGlzIHRoZW4gdHJ5IGl0CisJICogdW5sZXNzIFJFU19OT1RMRFFVRVJZIGlzIHNldCBhbmQgdGhlcmUgd2VyZSBubyBkb3RzLgorCSAqLworCWlmICgoZG90cyB8fCAhc2VhcmNoZWQgfHwgKHN0YXRwLT5vcHRpb25zICYgUkVTX05PVExEUVVFUlkpID09IDBVKSAmJgorCSAgICAhKHRyaWVkX2FzX2lzIHx8IHJvb3Rfb25fbGlzdCkpIHsKKwkJcmV0ID0gcmVzX25xdWVyeWRvbWFpbihzdGF0cCwgbmFtZSwgTlVMTCwgY2xhc3MsIHR5cGUsCisJCQkJICAgICAgIGFuc3dlciwgYW5zbGVuKTsKKwkJaWYgKHJldCA+IDApCisJCQlyZXR1cm4gKHJldCk7CisJfQorCisJLyogaWYgd2UgZ290IGhlcmUsIHdlIGRpZG4ndCBzYXRpc2Z5IHRoZSBzZWFyY2guCisJICogaWYgd2UgZGlkIGFuIGluaXRpYWwgZnVsbCBxdWVyeSwgcmV0dXJuIHRoYXQgcXVlcnkncyBIX0VSUk5PCisJICogKG5vdGUgdGhhdCB3ZSB3b3VsZG4ndCBiZSBoZXJlIGlmIHRoYXQgcXVlcnkgaGFkIHN1Y2NlZWRlZCkuCisJICogZWxzZSBpZiB3ZSBldmVyIGdvdCBhIG5vZGF0YSwgc2VuZCB0aGF0IGJhY2sgYXMgdGhlIHJlYXNvbi4KKwkgKiBlbHNlIHNlbmQgYmFjayBtZWFuaW5nbGVzcyBIX0VSUk5PLCB0aGF0IGJlaW5nIHRoZSBvbmUgZnJvbQorCSAqIHRoZSBsYXN0IEROU1JDSCB3ZSBkaWQuCisJICovCisJaWYgKHNhdmVkX2hlcnJubyAhPSAtMSkKKwkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBzYXZlZF9oZXJybm8pOworCWVsc2UgaWYgKGdvdF9ub2RhdGEpCisJCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgTk9fREFUQSk7CisJZWxzZSBpZiAoZ290X3NlcnZmYWlsKQorCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIFRSWV9BR0FJTik7CisJcmV0dXJuICgtMSk7Cit9CisKKy8qCisgKiBQZXJmb3JtIGEgY2FsbCBvbiByZXNfcXVlcnkgb24gdGhlIGNvbmNhdGVuYXRpb24gb2YgbmFtZSBhbmQgZG9tYWluLAorICogcmVtb3ZpbmcgYSB0cmFpbGluZyBkb3QgZnJvbSBuYW1lIGlmIGRvbWFpbiBpcyBOVUxMLgorICovCitpbnQKK3Jlc19ucXVlcnlkb21haW4ocmVzX3N0YXRlIHN0YXRwLAorCSAgICBjb25zdCBjaGFyICpuYW1lLAorCSAgICBjb25zdCBjaGFyICpkb21haW4sCisJICAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJICAgIHVfY2hhciAqYW5zd2VyLAkJLyogYnVmZmVyIHRvIHB1dCBhbnN3ZXIgKi8KKwkgICAgaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyICovCit7CisJY2hhciBuYnVmW01BWEROQU1FXTsKKwljb25zdCBjaGFyICpsb25nbmFtZSA9IG5idWY7CisJaW50IG4sIGQ7CisKKyNpZmRlZiBERUJVRworCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJcHJpbnRmKCI7OyByZXNfbnF1ZXJ5ZG9tYWluKCVzLCAlcywgJWQsICVkKVxuIiwKKwkJICAgICAgIG5hbWUsIGRvbWFpbj9kb21haW46IjxOaWw+IiwgY2xhc3MsIHR5cGUpOworI2VuZGlmCisJaWYgKGRvbWFpbiA9PSBOVUxMKSB7CisJCS8qCisJCSAqIENoZWNrIGZvciB0cmFpbGluZyAnLic7CisJCSAqIGNvcHkgd2l0aG91dCAnLicgaWYgcHJlc2VudC4KKwkJICovCisJCW4gPSBzdHJsZW4obmFtZSk7CisJCWlmIChuID49IE1BWEROQU1FKSB7CisJCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIE5PX1JFQ09WRVJZKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCW4tLTsKKwkJaWYgKG4gPj0gMCAmJiBuYW1lW25dID09ICcuJykgeworCQkJc3RybmNweShuYnVmLCBuYW1lLCAoc2l6ZV90KW4pOworCQkJbmJ1ZltuXSA9ICdcMCc7CisJCX0gZWxzZQorCQkJbG9uZ25hbWUgPSBuYW1lOworCX0gZWxzZSB7CisJCW4gPSBzdHJsZW4obmFtZSk7CisJCWQgPSBzdHJsZW4oZG9tYWluKTsKKwkJaWYgKG4gKyBkICsgMSA+PSBNQVhETkFNRSkgeworCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBOT19SRUNPVkVSWSk7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlzcHJpbnRmKG5idWYsICIlcy4lcyIsIG5hbWUsIGRvbWFpbik7CisJfQorCXJldHVybiAocmVzX25xdWVyeShzdGF0cCwgbG9uZ25hbWUsIGNsYXNzLCB0eXBlLCBhbnN3ZXIsIGFuc2xlbikpOworfQorCitjb25zdCBjaGFyICoKK3Jlc19ob3N0YWxpYXMoY29uc3QgcmVzX3N0YXRlIHN0YXRwLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICpkc3QsIHNpemVfdCBzaXopIHsKKwlyZXR1cm4gKE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvcmVzb2x2L3Jlc19zZW5kLmMgYi9saWJjL2Rucy9yZXNvbHYvcmVzX3NlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDM5ZTMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvcmVzb2x2L3Jlc19zZW5kLmMKQEAgLTAsMCArMSwxMzQ5IEBACisvKgkkTmV0QlNEOiByZXNfc2VuZC5jLHYgMS45IDIwMDYvMDEvMjQgMTc6NDE6MjUgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAyMDA4ICBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgKHNvdXJjZSBwb3J0IHJhbmRvbWl6YXRpb24pCisgKiBDb3B5cmlnaHQgKGMpIDE5ODUsIDE5ODksIDE5OTMKKyAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKKyAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAorICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgc2Njc2lkW10gPSAiQCgjKXJlc19zZW5kLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IHJlc19zZW5kLmMsdiAxLjUuMi4yLjQuNSAyMDA0LzA4LzEwIDAyOjE5OjU2IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogcmVzX3NlbmQuYyx2IDEuOSAyMDA2LzAxLzI0IDE3OjQxOjI1IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKy8qIHNldCB0byAxIHRvIHVzZSBvdXIgc21hbGwvc2ltcGxlL2xpbWl0ZWQgRE5TIGNhY2hlICovCisjZGVmaW5lICBVU0VfUkVTT0xWX0NBQ0hFICAxCisKKy8qCisgKiBTZW5kIHF1ZXJ5IHRvIG5hbWUgc2VydmVyIGFuZCB3YWl0IGZvciByZXBseS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X25ldGlkLmgiCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPGlzYy9ldmVudGxpYi5oPgorCisjaWYgVVNFX1JFU09MVl9DQUNIRQorIyAgaW5jbHVkZSA8cmVzb2x2X2NhY2hlLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCisKKyNpZm5kZWYgREVfQ09OU1QKKyNkZWZpbmUgREVfQ09OU1QoYyx2KSAgIHYgPSAoKGMpID8gXAorICAgIHN0cmNocigoY29uc3Qgdm9pZCAqKShjKSwgKihjb25zdCBjaGFyICopKGNvbnN0IHZvaWQgKikoYykpIDogTlVMTCkKKyNlbmRpZgorCisvKiBPcHRpb25zLiAgTGVhdmUgdGhlbSBvbi4gKi8KKyNpZm5kZWYgREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbmRpZgorI2luY2x1ZGUgInJlc19kZWJ1Zy5oIgorI2luY2x1ZGUgInJlc19wcml2YXRlLmgiCisKKyNkZWZpbmUgRVhUKHJlcykgKChyZXMpLT5fdS5fZXh0KQorI2RlZmluZSBEQkcgMAorCitzdGF0aWMgY29uc3QgaW50IGhpZ2hlc3RGRCA9IEZEX1NFVFNJWkUgLSAxOworCisvKiBGb3J3YXJkLiAqLworCitzdGF0aWMgaW50CQlnZXRfc2FsZW4gX19QKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikpOworc3RhdGljIHN0cnVjdCBzb2NrYWRkciAqIGdldF9uc2FkZHIgX19QKChyZXNfc3RhdGUsIHNpemVfdCkpOworc3RhdGljIGludAkJc2VuZF92YyhyZXNfc3RhdGUsIGNvbnN0IHVfY2hhciAqLCBpbnQsCisJCQkJdV9jaGFyICosIGludCwgaW50ICosIGludCk7CitzdGF0aWMgaW50CQlzZW5kX2RnKHJlc19zdGF0ZSwgY29uc3QgdV9jaGFyICosIGludCwKKwkJCQl1X2NoYXIgKiwgaW50LCBpbnQgKiwgaW50LAorCQkJCWludCAqLCBpbnQgKik7CitzdGF0aWMgdm9pZAkJQWVycm9yKGNvbnN0IHJlc19zdGF0ZSwgRklMRSAqLCBjb25zdCBjaGFyICosIGludCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50KTsKK3N0YXRpYyB2b2lkCQlQZXJyb3IoY29uc3QgcmVzX3N0YXRlLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK3N0YXRpYyBpbnQJCXNvY2tfZXEoc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2NrYWRkciAqKTsKKyNpZmRlZiBORUVEX1BTRUxFQ1QKK3N0YXRpYyBpbnQJCXBzZWxlY3QoaW50LCB2b2lkICosIHZvaWQgKiwgdm9pZCAqLAorCQkJCXN0cnVjdCB0aW1lc3BlYyAqLAorCQkJCWNvbnN0IHNpZ3NldF90ICopOworI2VuZGlmCit2b2lkIHJlc19wcXVlcnkoY29uc3QgcmVzX3N0YXRlLCBjb25zdCB1X2NoYXIgKiwgaW50LCBGSUxFICopOworc3RhdGljIGludCBjb25uZWN0X3dpdGhfdGltZW91dChpbnQgc29jaywgY29uc3Qgc3RydWN0IHNvY2thZGRyICpuc2FwLAorCQkJc29ja2xlbl90IHNhbGVuLCBpbnQgc2VjKTsKK3N0YXRpYyBpbnQgcmV0cnlpbmdfc2VsZWN0KGNvbnN0IGludCBzb2NrLCBmZF9zZXQgKnJlYWRzZXQsIGZkX3NldCAqd3JpdGVzZXQsCisJCQljb25zdCBzdHJ1Y3QgdGltZXNwZWMgKmZpbmlzaCk7CisKKy8qIEJJT05JQy1CRUdJTjogaW1wbGVtZW50IHNvdXJjZSBwb3J0IHJhbmRvbWl6YXRpb24gKi8KK3R5cGVkZWYgdW5pb24geworICAgIHN0cnVjdCBzb2NrYWRkciAgICAgIHNhOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgIHNpbjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICBzaW42OworfSBfc29ja2FkZHJfdW5pb247CisKK3N0YXRpYyBpbnQKK3JhbmRvbV9iaW5kKCBpbnQgIHMsIGludCAgZmFtaWx5ICkKK3sKKyAgICBfc29ja2FkZHJfdW5pb24gIHU7CisgICAgaW50ICAgICAgICAgICAgICBqOworICAgIHNvY2tsZW5fdCAgICAgICAgc2xlbjsKKworICAgIC8qIGNsZWFyIGFsbCwgdGhpcyBhbHNvIHNldHMgdGhlIElQNC82IGFkZHJlc3MgdG8gJ2FueScgKi8KKyAgICBtZW1zZXQoICZ1LCAwLCBzaXplb2YgdSApOworCisgICAgc3dpdGNoIChmYW1pbHkpIHsKKyAgICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICAgICAgdS5zaW4uc2luX2ZhbWlseSA9IGZhbWlseTsKKyAgICAgICAgICAgIHNsZW4gICAgICAgICAgICAgPSBzaXplb2YgdS5zaW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgICAgIHUuc2luNi5zaW42X2ZhbWlseSA9IGZhbWlseTsKKyAgICAgICAgICAgIHNsZW4gICAgICAgICAgICAgICA9IHNpemVvZiB1LnNpbjY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGVycm5vID0gRVBST1RPOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIGZpcnN0IHRyeSB0byBiaW5kIHRvIGEgcmFuZG9tIHNvdXJjZSBwb3J0IGEgZmV3IHRpbWVzICovCisgICAgZm9yIChqID0gMDsgaiA8IDEwOyBqKyspIHsKKyAgICAgICAgLyogZmluZCBhIHJhbmRvbSBwb3J0IGJldHdlZW4gMTAyNSAuLiA2NTUzNCAqLworICAgICAgICBpbnQgIHBvcnQgPSAxMDI1ICsgKHJlc19yYW5kb21pZCgpICUgKDY1NTM1LTEwMjUpKTsKKyAgICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICAgICAgdS5zaW4uc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdS5zaW42LnNpbjZfcG9ydCA9IGh0b25zKHBvcnQpOworCisgICAgICAgIGlmICggIWJpbmQoIHMsICZ1LnNhLCBzbGVuICkgKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogbm90aGluZyBhZnRlciAxMCB0cmllcywgb3VyIG5ldHdvcmsgdGFibGUgaXMgcHJvYmFibHkgYnVzeSAqLworICAgIC8qIGxldCB0aGUgc3lzdGVtIGRlY2lkZSB3aGljaCBwb3J0IGlzIGJlc3QgKi8KKyAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgIHUuc2luLnNpbl9wb3J0ID0gMDsKKyAgICBlbHNlCisgICAgICAgIHUuc2luNi5zaW42X3BvcnQgPSAwOworCisgICAgcmV0dXJuIGJpbmQoIHMsICZ1LnNhLCBzbGVuICk7Cit9CisvKiBCSU9OSUMtRU5EICovCisKK3N0YXRpYyBjb25zdCBpbnQgbmlmbGFncyA9IE5JX05VTUVSSUNIT1NUIHwgTklfTlVNRVJJQ1NFUlY7CisKKy8qIFB1YmxpYy4gKi8KKworLyogaW50CisgKiByZXNfaXNvdXJzZXJ2ZXIoaW5hKQorICoJbG9va3MgdXAgImluYSIgaW4gX3Jlcy5uc19hZGRyX2xpc3RbXQorICogcmV0dXJuczoKKyAqCTAgIDogbm90IGZvdW5kCisgKgk+MCA6IGZvdW5kCisgKiBhdXRob3I6CisgKglwYXVsIHZpeGllLCAyOW1heTk0CisgKi8KK19fTElCQ19ISURERU5fXyBpbnQKK3Jlc19vdXJzZXJ2ZXJfcChjb25zdCByZXNfc3RhdGUgc3RhdHAsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EpIHsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmlucCwgKnNydjsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICppbjZwLCAqc3J2NjsKKwlpbnQgbnM7CisKKwlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWlucCA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKikoY29uc3Qgdm9pZCAqKXNhOworCQlmb3IgKG5zID0gMDsgIG5zIDwgc3RhdHAtPm5zY291bnQ7ICBucysrKSB7CisJCQlzcnYgPSAoc3RydWN0IHNvY2thZGRyX2luICopKHZvaWQgKilnZXRfbnNhZGRyKHN0YXRwLCAoc2l6ZV90KW5zKTsKKwkJCWlmIChzcnYtPnNpbl9mYW1pbHkgPT0gaW5wLT5zaW5fZmFtaWx5ICYmCisJCQkgICAgc3J2LT5zaW5fcG9ydCA9PSBpbnAtPnNpbl9wb3J0ICYmCisJCQkgICAgKHNydi0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkgfHwKKwkJCSAgICAgc3J2LT5zaW5fYWRkci5zX2FkZHIgPT0gaW5wLT5zaW5fYWRkci5zX2FkZHIpKQorCQkJCXJldHVybiAoMSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJaWYgKEVYVChzdGF0cCkuZXh0ID09IE5VTEwpCisJCQlicmVhazsKKwkJaW42cCA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKGNvbnN0IHZvaWQgKilzYTsKKwkJZm9yIChucyA9IDA7ICBucyA8IHN0YXRwLT5uc2NvdW50OyAgbnMrKykgeworCQkJc3J2NiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKHZvaWQgKilnZXRfbnNhZGRyKHN0YXRwLCAoc2l6ZV90KW5zKTsKKwkJCWlmIChzcnY2LT5zaW42X2ZhbWlseSA9PSBpbjZwLT5zaW42X2ZhbWlseSAmJgorCQkJICAgIHNydjYtPnNpbjZfcG9ydCA9PSBpbjZwLT5zaW42X3BvcnQgJiYKKyNpZmRlZiBIQVZFX1NJTjZfU0NPUEVfSUQKKwkJCSAgICAoc3J2Ni0+c2luNl9zY29wZV9pZCA9PSAwIHx8CisJCQkgICAgIHNydjYtPnNpbjZfc2NvcGVfaWQgPT0gaW42cC0+c2luNl9zY29wZV9pZCkgJiYKKyNlbmRpZgorCQkJICAgIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc3J2Ni0+c2luNl9hZGRyKSB8fAorCQkJICAgICBJTjZfQVJFX0FERFJfRVFVQUwoJnNydjYtPnNpbjZfYWRkciwgJmluNnAtPnNpbjZfYWRkcikpKQorCQkJCXJldHVybiAoMSk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8qIGludAorICogcmVzX25hbWVpbnF1ZXJ5KG5hbWUsIHR5cGUsIGNsYXNzLCBidWYsIGVvbSkKKyAqCWxvb2sgZm9yIChuYW1lLHR5cGUsY2xhc3MpIGluIHRoZSBxdWVyeSBzZWN0aW9uIG9mIHBhY2tldCAoYnVmLGVvbSkKKyAqIHJlcXVpcmVzOgorICoJYnVmICsgSEZJWEVEU1ogPD0gZW9tCisgKiByZXR1cm5zOgorICoJLTEgOiBmb3JtYXQgZXJyb3IKKyAqCTAgIDogbm90IGZvdW5kCisgKgk+MCA6IGZvdW5kCisgKiBhdXRob3I6CisgKglwYXVsIHZpeGllLCAyOW1heTk0CisgKi8KK2ludAorcmVzX25hbWVpbnF1ZXJ5KGNvbnN0IGNoYXIgKm5hbWUsIGludCB0eXBlLCBpbnQgY2xhc3MsCisJCWNvbnN0IHVfY2hhciAqYnVmLCBjb25zdCB1X2NoYXIgKmVvbSkKK3sKKwljb25zdCB1X2NoYXIgKmNwID0gYnVmICsgSEZJWEVEU1o7CisJaW50IHFkY291bnQgPSBudG9ocygoKGNvbnN0IEhFQURFUiopKGNvbnN0IHZvaWQgKilidWYpLT5xZGNvdW50KTsKKworCXdoaWxlIChxZGNvdW50LS0gPiAwKSB7CisJCWNoYXIgdG5hbWVbTUFYRE5BTUUrMV07CisJCWludCBuLCB0dHlwZSwgdGNsYXNzOworCisJCW4gPSBkbl9leHBhbmQoYnVmLCBlb20sIGNwLCB0bmFtZSwgc2l6ZW9mIHRuYW1lKTsKKwkJaWYgKG4gPCAwKQorCQkJcmV0dXJuICgtMSk7CisJCWNwICs9IG47CisJCWlmIChjcCArIDIgKiBJTlQxNlNaID4gZW9tKQorCQkJcmV0dXJuICgtMSk7CisJCXR0eXBlID0gbnNfZ2V0MTYoY3ApOyBjcCArPSBJTlQxNlNaOworCQl0Y2xhc3MgPSBuc19nZXQxNihjcCk7IGNwICs9IElOVDE2U1o7CisJCWlmICh0dHlwZSA9PSB0eXBlICYmIHRjbGFzcyA9PSBjbGFzcyAmJgorCQkgICAgbnNfc2FtZW5hbWUodG5hbWUsIG5hbWUpID09IDEpCisJCQlyZXR1cm4gKDEpOworCX0KKwlyZXR1cm4gKDApOworfQorCisvKiBpbnQKKyAqIHJlc19xdWVyaWVzbWF0Y2goYnVmMSwgZW9tMSwgYnVmMiwgZW9tMikKKyAqCWlzIHRoZXJlIGEgMToxIG1hcHBpbmcgb2YgKG5hbWUsdHlwZSxjbGFzcykKKyAqCWluIChidWYxLGVvbTEpIGFuZCAoYnVmMixlb20yKT8KKyAqIHJldHVybnM6CisgKgktMSA6IGZvcm1hdCBlcnJvcgorICoJMCAgOiBub3QgYSAxOjEgbWFwcGluZworICoJPjAgOiBpcyBhIDE6MSBtYXBwaW5nCisgKiBhdXRob3I6CisgKglwYXVsIHZpeGllLCAyOW1heTk0CisgKi8KK2ludAorcmVzX3F1ZXJpZXNtYXRjaChjb25zdCB1X2NoYXIgKmJ1ZjEsIGNvbnN0IHVfY2hhciAqZW9tMSwKKwkJIGNvbnN0IHVfY2hhciAqYnVmMiwgY29uc3QgdV9jaGFyICplb20yKQoreworCWNvbnN0IHVfY2hhciAqY3AgPSBidWYxICsgSEZJWEVEU1o7CisJaW50IHFkY291bnQgPSBudG9ocygoKGNvbnN0IEhFQURFUiopKGNvbnN0IHZvaWQgKilidWYxKS0+cWRjb3VudCk7CisKKwlpZiAoYnVmMSArIEhGSVhFRFNaID4gZW9tMSB8fCBidWYyICsgSEZJWEVEU1ogPiBlb20yKQorCQlyZXR1cm4gKC0xKTsKKworCS8qCisJICogT25seSBoZWFkZXIgc2VjdGlvbiBwcmVzZW50IGluIHJlcGxpZXMgdG8KKwkgKiBkeW5hbWljIHVwZGF0ZSBwYWNrZXRzLgorCSAqLworCWlmICgoKChjb25zdCBIRUFERVIgKikoY29uc3Qgdm9pZCAqKWJ1ZjEpLT5vcGNvZGUgPT0gbnNfb191cGRhdGUpICYmCisJICAgICgoKGNvbnN0IEhFQURFUiAqKShjb25zdCB2b2lkICopYnVmMiktPm9wY29kZSA9PSBuc19vX3VwZGF0ZSkpCisJCXJldHVybiAoMSk7CisKKwlpZiAocWRjb3VudCAhPSBudG9ocygoKGNvbnN0IEhFQURFUiopKGNvbnN0IHZvaWQgKilidWYyKS0+cWRjb3VudCkpCisJCXJldHVybiAoMCk7CisJd2hpbGUgKHFkY291bnQtLSA+IDApIHsKKwkJY2hhciB0bmFtZVtNQVhETkFNRSsxXTsKKwkJaW50IG4sIHR0eXBlLCB0Y2xhc3M7CisKKwkJbiA9IGRuX2V4cGFuZChidWYxLCBlb20xLCBjcCwgdG5hbWUsIHNpemVvZiB0bmFtZSk7CisJCWlmIChuIDwgMCkKKwkJCXJldHVybiAoLTEpOworCQljcCArPSBuOworCQlpZiAoY3AgKyAyICogSU5UMTZTWiA+IGVvbTEpCisJCQlyZXR1cm4gKC0xKTsKKwkJdHR5cGUgPSBuc19nZXQxNihjcCk7CWNwICs9IElOVDE2U1o7CisJCXRjbGFzcyA9IG5zX2dldDE2KGNwKTsgY3AgKz0gSU5UMTZTWjsKKwkJaWYgKCFyZXNfbmFtZWlucXVlcnkodG5hbWUsIHR0eXBlLCB0Y2xhc3MsIGJ1ZjIsIGVvbTIpKQorCQkJcmV0dXJuICgwKTsKKwl9CisJcmV0dXJuICgxKTsKK30KKworCitpbnQKK3Jlc19uc2VuZChyZXNfc3RhdGUgc3RhdHAsCisJICBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgdV9jaGFyICphbnMsIGludCBhbnNzaXopCit7CisJaW50IGdvdHNvbWV3aGVyZSwgdGVycm5vLCB0cnksIHZfY2lyY3VpdCwgcmVzcGxlbiwgbnMsIG47CisJY2hhciBhYnVmW05JX01BWEhPU1RdOworI2lmIFVTRV9SRVNPTFZfQ0FDSEUKKyAgICAgICAgUmVzb2x2Q2FjaGVTdGF0dXMgICAgIGNhY2hlX3N0YXR1cyA9IFJFU09MVl9DQUNIRV9VTlNVUFBPUlRFRDsKKyNlbmRpZgorCisjaWYgIVVTRV9SRVNPTFZfQ0FDSEUKKwlpZiAoc3RhdHAtPm5zY291bnQgPT0gMCkgeworCQllcnJubyA9IEVTUkNIOworCQlyZXR1cm4gKC0xKTsKKwl9CisjZW5kaWYKKworCWlmIChhbnNzaXogPCBIRklYRURTWikgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCURwcmludFEoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fCAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfUVVFUlkpLAorCQkoc3Rkb3V0LCAiOzsgcmVzX3NlbmQoKVxuIiksIGJ1ZiwgYnVmbGVuKTsKKwl2X2NpcmN1aXQgPSAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfVVNFVkMpIHx8IGJ1ZmxlbiA+IFBBQ0tFVFNaOworCWdvdHNvbWV3aGVyZSA9IDA7CisJdGVycm5vID0gRVRJTUVET1VUOworCisjaWYgVVNFX1JFU09MVl9DQUNIRQorCWludCAgYW5zbGVuID0gMDsKKwljYWNoZV9zdGF0dXMgPSBfcmVzb2x2X2NhY2hlX2xvb2t1cCgKKwkJCXN0YXRwLT5uZXRpZCwgYnVmLCBidWZsZW4sCisJCQlhbnMsIGFuc3NpeiwgJmFuc2xlbik7CisKKwlpZiAoY2FjaGVfc3RhdHVzID09IFJFU09MVl9DQUNIRV9GT1VORCkgeworCQlyZXR1cm4gYW5zbGVuOworCX0gZWxzZSBpZiAoY2FjaGVfc3RhdHVzICE9IFJFU09MVl9DQUNIRV9VTlNVUFBPUlRFRCkgeworCQkvLyBoYWQgYSBjYWNoZSBtaXNzIGZvciBhIGtub3duIG5ldHdvcmssIHNvIHBvcHVsYXRlIHRoZSB0aHJlYWQgcHJpdmF0ZQorCQkvLyBkYXRhIHNvIHRoZSBub3JtYWwgcmVzb2x2ZSBwYXRoIGNhbiBkbyBpdHMgdGhpbmcKKwkJX3Jlc29sdl9wb3B1bGF0ZV9yZXNfZm9yX25ldChzdGF0cCk7CisJfQorCisJaWYgKHN0YXRwLT5uc2NvdW50ID09IDApIHsKKwkJZXJybm8gPSBFU1JDSDsKKwkJcmV0dXJuICgtMSk7CisJfQorI2VuZGlmCisKKwkvKgorCSAqIElmIHRoZSBuc19hZGRyX2xpc3QgaW4gdGhlIHJlc29sdmVyIGNvbnRleHQgaGFzIGNoYW5nZWQsIHRoZW4KKwkgKiBpbnZhbGlkYXRlIG91ciBjYWNoZWQgY29weSBhbmQgdGhlIGFzc29jaWF0ZWQgdGltaW5nIGRhdGEuCisJICovCisJaWYgKEVYVChzdGF0cCkubnNjb3VudCAhPSAwKSB7CisJCWludCBuZWVkY2xvc2UgPSAwOworCQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBwZWVyOworCQlzb2NrbGVuX3QgcGVlcmxlbjsKKworCQlpZiAoRVhUKHN0YXRwKS5uc2NvdW50ICE9IHN0YXRwLT5uc2NvdW50KQorCQkJbmVlZGNsb3NlKys7CisJCWVsc2UKKwkJCWZvciAobnMgPSAwOyBucyA8IHN0YXRwLT5uc2NvdW50OyBucysrKSB7CisJCQkJaWYgKHN0YXRwLT5uc2FkZHJfbGlzdFtuc10uc2luX2ZhbWlseSAmJgorCQkJCSAgICAhc29ja19lcSgoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikmc3RhdHAtPm5zYWRkcl9saXN0W25zXSwKKwkJCQkJICAgICAoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikmRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbnNdKSkgeworCQkJCQluZWVkY2xvc2UrKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJaWYgKEVYVChzdGF0cCkubnNzb2Nrc1tuc10gPT0gLTEpCisJCQkJCWNvbnRpbnVlOworCQkJCXBlZXJsZW4gPSBzaXplb2YocGVlcik7CisJCQkJaWYgKGdldHBlZXJuYW1lKEVYVChzdGF0cCkubnNzb2Nrc1tuc10sCisJCQkJICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZwZWVyLCAmcGVlcmxlbikgPCAwKSB7CisJCQkJCW5lZWRjbG9zZSsrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKCFzb2NrX2VxKChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZwZWVyLAorCQkJCSAgICBnZXRfbnNhZGRyKHN0YXRwLCAoc2l6ZV90KW5zKSkpIHsKKwkJCQkJbmVlZGNsb3NlKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJaWYgKG5lZWRjbG9zZSkgeworCQkJcmVzX25jbG9zZShzdGF0cCk7CisJCQlFWFQoc3RhdHApLm5zY291bnQgPSAwOworCQl9CisJfQorCisJLyoKKwkgKiBNYXliZSBpbml0aWFsaXplIG91ciBwcml2YXRlIGNvcHkgb2YgdGhlIG5zX2FkZHJfbGlzdC4KKwkgKi8KKwlpZiAoRVhUKHN0YXRwKS5uc2NvdW50ID09IDApIHsKKwkJZm9yIChucyA9IDA7IG5zIDwgc3RhdHAtPm5zY291bnQ7IG5zKyspIHsKKwkJCUVYVChzdGF0cCkubnN0aW1lc1tuc10gPSBSRVNfTUFYVElNRTsKKwkJCUVYVChzdGF0cCkubnNzb2Nrc1tuc10gPSAtMTsKKwkJCWlmICghc3RhdHAtPm5zYWRkcl9saXN0W25zXS5zaW5fZmFtaWx5KQorCQkJCWNvbnRpbnVlOworCQkJRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbnNdLnNpbiA9CisJCQkJIHN0YXRwLT5uc2FkZHJfbGlzdFtuc107CisJCX0KKwkJRVhUKHN0YXRwKS5uc2NvdW50ID0gc3RhdHAtPm5zY291bnQ7CisJfQorCisJLyoKKwkgKiBTb21lIHJlc29sdmVycyB3YW50IHRvIGV2ZW4gb3V0IHRoZSBsb2FkIG9uIHRoZWlyIG5hbWVzZXJ2ZXJzLgorCSAqIE5vdGUgdGhhdCBSRVNfQkxBU1Qgb3ZlcnJpZGVzIFJFU19ST1RBVEUuCisJICovCisJaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ST1RBVEUpICE9IDBVICYmCisJICAgIChzdGF0cC0+b3B0aW9ucyAmIFJFU19CTEFTVCkgPT0gMFUpIHsKKwkJdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uIGludTsKKwkJc3RydWN0IHNvY2thZGRyX2luIGluYTsKKwkJaW50IGxhc3RucyA9IHN0YXRwLT5uc2NvdW50IC0gMTsKKwkJaW50IGZkOworCQl1X2ludDE2X3QgbnN0aW1lOworCisJCWlmIChFWFQoc3RhdHApLmV4dCAhPSBOVUxMKQorCQkJaW51ID0gRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbMF07CisJCWluYSA9IHN0YXRwLT5uc2FkZHJfbGlzdFswXTsKKwkJZmQgPSBFWFQoc3RhdHApLm5zc29ja3NbMF07CisJCW5zdGltZSA9IEVYVChzdGF0cCkubnN0aW1lc1swXTsKKwkJZm9yIChucyA9IDA7IG5zIDwgbGFzdG5zOyBucysrKSB7CisJCQlpZiAoRVhUKHN0YXRwKS5leHQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbnNdID0KKwkJCQkJRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbnMgKyAxXTsKKwkJCXN0YXRwLT5uc2FkZHJfbGlzdFtuc10gPSBzdGF0cC0+bnNhZGRyX2xpc3RbbnMgKyAxXTsKKwkJCUVYVChzdGF0cCkubnNzb2Nrc1tuc10gPSBFWFQoc3RhdHApLm5zc29ja3NbbnMgKyAxXTsKKwkJCUVYVChzdGF0cCkubnN0aW1lc1tuc10gPSBFWFQoc3RhdHApLm5zdGltZXNbbnMgKyAxXTsKKwkJfQorCQlpZiAoRVhUKHN0YXRwKS5leHQgIT0gTlVMTCkKKwkJCUVYVChzdGF0cCkuZXh0LT5uc2FkZHJzW2xhc3Ruc10gPSBpbnU7CisJCXN0YXRwLT5uc2FkZHJfbGlzdFtsYXN0bnNdID0gaW5hOworCQlFWFQoc3RhdHApLm5zc29ja3NbbGFzdG5zXSA9IGZkOworCQlFWFQoc3RhdHApLm5zdGltZXNbbGFzdG5zXSA9IG5zdGltZTsKKwl9CisKKwkvKgorCSAqIFNlbmQgcmVxdWVzdCwgUkVUUlkgdGltZXMsIG9yIHVudGlsIHN1Y2Nlc3NmdWwuCisJICovCisJZm9yICh0cnkgPSAwOyB0cnkgPCBzdGF0cC0+cmV0cnk7IHRyeSsrKSB7CisJICAgIGZvciAobnMgPSAwOyBucyA8IHN0YXRwLT5uc2NvdW50OyBucysrKSB7CisJCXN0cnVjdCBzb2NrYWRkciAqbnNhcDsKKwkJaW50IG5zYXBsZW47CisJCW5zYXAgPSBnZXRfbnNhZGRyKHN0YXRwLCAoc2l6ZV90KW5zKTsKKwkJbnNhcGxlbiA9IGdldF9zYWxlbihuc2FwKTsKKwkJc3RhdHAtPl9mbGFncyAmPSB+UkVTX0ZfTEFTVE1BU0s7CisJCXN0YXRwLT5fZmxhZ3MgfD0gKG5zIDw8IFJFU19GX0xBU1RTSElGVCk7Cisgc2FtZV9uczoKKwkJaWYgKHN0YXRwLT5xaG9vaykgeworCQkJaW50IGRvbmUgPSAwLCBsb29wcyA9IDA7CisKKwkJCWRvIHsKKwkJCQlyZXNfc2VuZGhvb2thY3QgYWN0OworCisJCQkJYWN0ID0gKCpzdGF0cC0+cWhvb2spKCZuc2FwLCAmYnVmLCAmYnVmbGVuLAorCQkJCQkJICAgICAgYW5zLCBhbnNzaXosICZyZXNwbGVuKTsKKwkJCQlzd2l0Y2ggKGFjdCkgeworCQkJCWNhc2UgcmVzX2dvYWhlYWQ6CisJCQkJCWRvbmUgPSAxOworCQkJCQlicmVhazsKKwkJCQljYXNlIHJlc19uZXh0bnM6CisJCQkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJCQlnb3RvIG5leHRfbnM7CisJCQkJY2FzZSByZXNfZG9uZToKKwkJCQkJcmV0dXJuIChyZXNwbGVuKTsKKwkJCQljYXNlIHJlc19tb2RpZmllZDoKKwkJCQkJLyogZ2l2ZSB0aGUgaG9vayBhbm90aGVyIHRyeSAqLworCQkJCQlpZiAoKytsb29wcyA8IDQyKSAvKmRvdWcgYWRhbXMqLworCQkJCQkJYnJlYWs7CisJCQkJCS8qRkFMTFRIUk9VR0gqLworCQkJCWNhc2UgcmVzX2Vycm9yOgorCQkJCQkvKkZBTExUSFJPVUdIKi8KKwkJCQlkZWZhdWx0OgorCQkJCQlnb3RvIGZhaWw7CisJCQkJfQorCQkJfSB3aGlsZSAoIWRvbmUpOworCQl9CisKKwkJRHByaW50KCgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpICYmCisJCQlnZXRuYW1laW5mbyhuc2FwLCAoc29ja2xlbl90KW5zYXBsZW4sIGFidWYsIHNpemVvZihhYnVmKSwKKwkJCQlOVUxMLCAwLCBuaWZsYWdzKSA9PSAwKSwKKwkJCQkoc3Rkb3V0LCAiOzsgUXVlcnlpbmcgc2VydmVyICgjICVkKSBhZGRyZXNzID0gJXNcbiIsCisJCQkJbnMgKyAxLCBhYnVmKSk7CisKKworCQlpZiAodl9jaXJjdWl0KSB7CisJCQkvKiBVc2UgVkM7IGF0IG1vc3Qgb25lIGF0dGVtcHQgcGVyIHNlcnZlci4gKi8KKwkJCXRyeSA9IHN0YXRwLT5yZXRyeTsKKworCQkJbiA9IHNlbmRfdmMoc3RhdHAsIGJ1ZiwgYnVmbGVuLCBhbnMsIGFuc3NpeiwgJnRlcnJubywKKwkJCQkgICAgbnMpOworCisJCQlpZiAoREJHKSB7CisJCQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwKKwkJCQkJInVzZWQgc2VuZF92YyAlZFxuIiwgbik7CisJCQl9CisKKwkJCWlmIChuIDwgMCkKKwkJCQlnb3RvIGZhaWw7CisJCQlpZiAobiA9PSAwKQorCQkJCWdvdG8gbmV4dF9uczsKKwkJCXJlc3BsZW4gPSBuOworCQl9IGVsc2UgeworCQkJLyogVXNlIGRhdGFncmFtcy4gKi8KKwkJCWlmIChEQkcpIHsKKwkJCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLCAidXNpbmcgc2VuZF9kZ1xuIik7CisJCQl9CisKKwkJCW4gPSBzZW5kX2RnKHN0YXRwLCBidWYsIGJ1ZmxlbiwgYW5zLCBhbnNzaXosICZ0ZXJybm8sCisJCQkJICAgIG5zLCAmdl9jaXJjdWl0LCAmZ290c29tZXdoZXJlKTsKKwkJCWlmIChEQkcpIHsKKwkJCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLCAidXNlZCBzZW5kX2RnICVkXG4iLG4pOworCQkJfQorCisJCQlpZiAobiA8IDApCisJCQkJZ290byBmYWlsOworCQkJaWYgKG4gPT0gMCkKKwkJCQlnb3RvIG5leHRfbnM7CisJCQlpZiAoREJHKSB7CisJCQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwgInRpbWU9JWxkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lKE5VTEwpKTsKKwkJCX0KKwkJCWlmICh2X2NpcmN1aXQpCisJCQkJZ290byBzYW1lX25zOworCQkJcmVzcGxlbiA9IG47CisJCX0KKworCQlEcHJpbnQoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fAorCQkgICAgICAgKChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9SRVBMWSkgJiYKKwkJCShzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEMSkpLAorCQkgICAgICAgKHN0ZG91dCwgIjs7IGdvdCBhbnN3ZXI6XG4iKSk7CisKKwkJRHByaW50USgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpIHx8CisJCQkoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfUkVQTFkpLAorCQkJKHN0ZG91dCwgIiVzIiwgIiIpLAorCQkJYW5zLCAocmVzcGxlbiA+IGFuc3NpeikgPyBhbnNzaXogOiByZXNwbGVuKTsKKworI2lmIFVTRV9SRVNPTFZfQ0FDSEUKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVfc3RhdHVzID09IFJFU09MVl9DQUNIRV9OT1RGT1VORCkgeworICAgICAgICAgICAgICAgICAgICBfcmVzb2x2X2NhY2hlX2FkZChzdGF0cC0+bmV0aWQsIGJ1ZiwgYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnMsIHJlc3BsZW4pOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCQkvKgorCQkgKiBJZiB3ZSBoYXZlIHRlbXBvcmFyaWx5IG9wZW5lZCBhIHZpcnR1YWwgY2lyY3VpdCwKKwkJICogb3IgaWYgd2UgaGF2ZW4ndCBiZWVuIGFza2VkIHRvIGtlZXAgYSBzb2NrZXQgb3BlbiwKKwkJICogY2xvc2UgdGhlIHNvY2tldC4KKwkJICovCisJCWlmICgodl9jaXJjdWl0ICYmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19VU0VWQykgPT0gMFUpIHx8CisJCSAgICAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfU1RBWU9QRU4pID09IDBVKSB7CisJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJfQorCQlpZiAoc3RhdHAtPnJob29rKSB7CisJCQlpbnQgZG9uZSA9IDAsIGxvb3BzID0gMDsKKworCQkJZG8geworCQkJCXJlc19zZW5kaG9va2FjdCBhY3Q7CisKKwkJCQlhY3QgPSAoKnN0YXRwLT5yaG9vaykobnNhcCwgYnVmLCBidWZsZW4sCisJCQkJCQkgICAgICBhbnMsIGFuc3NpeiwgJnJlc3BsZW4pOworCQkJCXN3aXRjaCAoYWN0KSB7CisJCQkJY2FzZSByZXNfZ29haGVhZDoKKwkJCQljYXNlIHJlc19kb25lOgorCQkJCQlkb25lID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSByZXNfbmV4dG5zOgorCQkJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJCQkJZ290byBuZXh0X25zOworCQkJCWNhc2UgcmVzX21vZGlmaWVkOgorCQkJCQkvKiBnaXZlIHRoZSBob29rIGFub3RoZXIgdHJ5ICovCisJCQkJCWlmICgrK2xvb3BzIDwgNDIpIC8qZG91ZyBhZGFtcyovCisJCQkJCQlicmVhazsKKwkJCQkJLypGQUxMVEhST1VHSCovCisJCQkJY2FzZSByZXNfZXJyb3I6CisJCQkJCS8qRkFMTFRIUk9VR0gqLworCQkJCWRlZmF1bHQ6CisJCQkJCWdvdG8gZmFpbDsKKwkJCQl9CisJCQl9IHdoaWxlICghZG9uZSk7CisKKwkJfQorCQlyZXR1cm4gKHJlc3BsZW4pOworIG5leHRfbnM6IDsKKwkgICB9IC8qZm9yZWFjaCBucyovCisJfSAvKmZvcmVhY2ggcmV0cnkqLworCXJlc19uY2xvc2Uoc3RhdHApOworCWlmICghdl9jaXJjdWl0KSB7CisJCWlmICghZ290c29tZXdoZXJlKQorCQkJZXJybm8gPSBFQ09OTlJFRlVTRUQ7CS8qIG5vIG5hbWVzZXJ2ZXJzIGZvdW5kICovCisJCWVsc2UKKwkJCWVycm5vID0gRVRJTUVET1VUOwkvKiBubyBhbnN3ZXIgb2J0YWluZWQgKi8KKwl9IGVsc2UKKwkJZXJybm8gPSB0ZXJybm87CisKKyNpZiBVU0VfUkVTT0xWX0NBQ0hFCisgICAgICAgIF9yZXNvbHZfY2FjaGVfcXVlcnlfZmFpbGVkKHN0YXRwLT5uZXRpZCwgYnVmLCBidWZsZW4pOworI2VuZGlmCisKKwlyZXR1cm4gKC0xKTsKKyBmYWlsOgorI2lmIFVTRV9SRVNPTFZfQ0FDSEUKKwlfcmVzb2x2X2NhY2hlX3F1ZXJ5X2ZhaWxlZChzdGF0cC0+bmV0aWQsIGJ1ZiwgYnVmbGVuKTsKKyNlbmRpZgorCXJlc19uY2xvc2Uoc3RhdHApOworCXJldHVybiAoLTEpOworfQorCisvKiBQcml2YXRlICovCisKK3N0YXRpYyBpbnQKK2dldF9zYWxlbihzYSkKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhOworeworCisjaWZkZWYgSEFWRV9TQV9MRU4KKwkvKiBUaGVyZSBhcmUgcGVvcGxlIGRvIG5vdCBzZXQgc2FfbGVuLiAgQmUgZm9yZ2l2aW5nIHRvIHRoZW0uICovCisJaWYgKHNhLT5zYV9sZW4pCisJCXJldHVybiAoc2EtPnNhX2xlbik7CisjZW5kaWYKKworCWlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQpCisJCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCWVsc2UgaWYgKHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCisJCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwllbHNlCisJCXJldHVybiAoMCk7CS8qIHVua25vd24sIGRpZSBvbiBjb25uZWN0ICovCit9CisKKy8qCisgKiBwaWNrIGFwcHJvcHJpYXRlIG5zYWRkcl9saXN0IGZvciB1c2UuICBzZWUgcmVzX2luaXQoKSBmb3IgaW5pdGlhbGl6YXRpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc29ja2FkZHIgKgorZ2V0X25zYWRkcihzdGF0cCwgbikKKwlyZXNfc3RhdGUgc3RhdHA7CisJc2l6ZV90IG47Cit7CisKKwlpZiAoIXN0YXRwLT5uc2FkZHJfbGlzdFtuXS5zaW5fZmFtaWx5ICYmIEVYVChzdGF0cCkuZXh0KSB7CisJCS8qCisJCSAqIC0gRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbl0gaG9sZHMgYW4gYWRkcmVzcyB0aGF0IGlzIGxhcmdlcgorCQkgKiAgIHRoYW4gc3RydWN0IHNvY2thZGRyLCBhbmQKKwkJICogLSB1c2VyIGNvZGUgZGlkIG5vdCB1cGRhdGUgc3RhdHAtPm5zYWRkcl9saXN0W25dLgorCQkgKi8KKwkJcmV0dXJuIChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tuXTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiAtIHVzZXIgY29kZSB1cGRhdGVkIHN0YXRwLT5uc2FkZHJfbGlzdFtuXSwgb3IKKwkJICogLSBzdGF0cC0+bnNhZGRyX2xpc3Rbbl0gaGFzIHRoZSBzYW1lIGNvbnRlbnQgYXMKKwkJICogICBFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tuXS4KKwkJICovCisJCXJldHVybiAoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikmc3RhdHAtPm5zYWRkcl9saXN0W25dOworCX0KK30KKworc3RhdGljIGludCBnZXRfdGltZW91dChjb25zdCByZXNfc3RhdGUgc3RhdHAsIGNvbnN0IGludCBucykKK3sKKwlpbnQgdGltZW91dCA9IChzdGF0cC0+cmV0cmFucyA8PCBucyk7CisJaWYgKG5zID4gMCkgeworCQl0aW1lb3V0IC89IHN0YXRwLT5uc2NvdW50OworCX0KKwlpZiAodGltZW91dCA8PSAwKSB7CisJCXRpbWVvdXQgPSAxOworCX0KKwlpZiAoREJHKSB7CisJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICJ1c2luZyB0aW1lb3V0IG9mICVkIHNlY1xuIiwgdGltZW91dCk7CisJfQorCisJcmV0dXJuIHRpbWVvdXQ7Cit9CisKK3N0YXRpYyBpbnQKK3NlbmRfdmMocmVzX3N0YXRlIHN0YXRwLAorCWNvbnN0IHVfY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1X2NoYXIgKmFucywgaW50IGFuc3NpeiwKKwlpbnQgKnRlcnJubywgaW50IG5zKQoreworCWNvbnN0IEhFQURFUiAqaHAgPSAoY29uc3QgSEVBREVSICopKGNvbnN0IHZvaWQgKilidWY7CisJSEVBREVSICphbmhwID0gKEhFQURFUiAqKSh2b2lkICopYW5zOworCXN0cnVjdCBzb2NrYWRkciAqbnNhcDsKKwlpbnQgbnNhcGxlbjsKKwlpbnQgdHJ1bmNhdGluZywgY29ubnJlc2V0LCByZXNwbGVuLCBuOworCXN0cnVjdCBpb3ZlYyBpb3ZbMl07CisJdV9zaG9ydCBsZW47CisJdV9jaGFyICpjcDsKKwl2b2lkICp0bXA7CisKKwlpZiAoREJHKSB7CisJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICJ1c2luZyBzZW5kX3ZjXG4iKTsKKwl9CisKKwluc2FwID0gZ2V0X25zYWRkcihzdGF0cCwgKHNpemVfdClucyk7CisJbnNhcGxlbiA9IGdldF9zYWxlbihuc2FwKTsKKworCWNvbm5yZXNldCA9IDA7Cisgc2FtZV9uczoKKwl0cnVuY2F0aW5nID0gMDsKKworCS8qIEFyZSB3ZSBzdGlsbCB0YWxraW5nIHRvIHdob20gd2Ugd2FudCB0byB0YWxrIHRvPyAqLworCWlmIChzdGF0cC0+X3Zjc29jayA+PSAwICYmIChzdGF0cC0+X2ZsYWdzICYgUkVTX0ZfVkMpICE9IDApIHsKKwkJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgcGVlcjsKKwkJc29ja2xlbl90IHNpemUgPSBzaXplb2YgcGVlcjsKKwkJdW5zaWduZWQgb2xkX21hcms7CisJCXNvY2tsZW5fdCBtYXJrX3NpemUgPSBzaXplb2Yob2xkX21hcmspOworCQlpZiAoZ2V0cGVlcm5hbWUoc3RhdHAtPl92Y3NvY2ssCisJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJnBlZXIsICZzaXplKSA8IDAgfHwKKwkJICAgICFzb2NrX2VxKChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZwZWVyLCBuc2FwKSB8fAorCQkJZ2V0c29ja29wdChzdGF0cC0+X3Zjc29jaywgU09MX1NPQ0tFVCwgU09fTUFSSywgJm9sZF9tYXJrLCAmbWFya19zaXplKSA8IDAgfHwKKwkJCW9sZF9tYXJrICE9IHN0YXRwLT5fbWFyaykgeworCQkJcmVzX25jbG9zZShzdGF0cCk7CisJCQlzdGF0cC0+X2ZsYWdzICY9IH5SRVNfRl9WQzsKKwkJfQorCX0KKworCWlmIChzdGF0cC0+X3Zjc29jayA8IDAgfHwgKHN0YXRwLT5fZmxhZ3MgJiBSRVNfRl9WQykgPT0gMCkgeworCQlpZiAoc3RhdHAtPl92Y3NvY2sgPj0gMCkKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCisJCXN0YXRwLT5fdmNzb2NrID0gc29ja2V0KG5zYXAtPnNhX2ZhbWlseSwgU09DS19TVFJFQU0gfCBTT0NLX0NMT0VYRUMsIDApOworCQlpZiAoc3RhdHAtPl92Y3NvY2sgPiBoaWdoZXN0RkQpIHsKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJZXJybm8gPSBFTk9UU09DSzsKKwkJfQorCQlpZiAoc3RhdHAtPl92Y3NvY2sgPCAwKSB7CisJCQlzd2l0Y2ggKGVycm5vKSB7CisJCQljYXNlIEVQUk9UT05PU1VQUE9SVDoKKyNpZmRlZiBFUEZOT1NVUFBPUlQKKwkJCWNhc2UgRVBGTk9TVVBQT1JUOgorI2VuZGlmCisJCQljYXNlIEVBRk5PU1VQUE9SVDoKKwkJCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNvY2tldCh2YykiLCBlcnJubyk7CisJCQkJcmV0dXJuICgwKTsKKwkJCWRlZmF1bHQ6CisJCQkJKnRlcnJubyA9IGVycm5vOworCQkJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAic29ja2V0KHZjKSIsIGVycm5vKTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJfQorCQlpZiAoc3RhdHAtPl9tYXJrICE9IE1BUktfVU5TRVQpIHsKKwkJCWlmIChzZXRzb2Nrb3B0KHN0YXRwLT5fdmNzb2NrLCBTT0xfU09DS0VULAorCQkJCSAgICAgICAgU09fTUFSSywgJnN0YXRwLT5fbWFyaywgc2l6ZW9mKHN0YXRwLT5fbWFyaykpIDwgMCkgeworCQkJCSp0ZXJybm8gPSBlcnJubzsKKwkJCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNldHNvY2tvcHQiLCBlcnJubyk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJCWVycm5vID0gMDsKKwkJaWYgKHJhbmRvbV9iaW5kKHN0YXRwLT5fdmNzb2NrLG5zYXAtPnNhX2ZhbWlseSkgPCAwKSB7CisJCQkqdGVycm5vID0gZXJybm87CisJCQlBZXJyb3Ioc3RhdHAsIHN0ZGVyciwgImJpbmQvdmMiLCBlcnJubywgbnNhcCwKKwkJCSAgICBuc2FwbGVuKTsKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJcmV0dXJuICgwKTsKKwkJfQorCQlpZiAoY29ubmVjdF93aXRoX3RpbWVvdXQoc3RhdHAtPl92Y3NvY2ssIG5zYXAsIChzb2NrbGVuX3QpbnNhcGxlbiwKKwkJCQlnZXRfdGltZW91dChzdGF0cCwgbnMpKSA8IDApIHsKKwkJCSp0ZXJybm8gPSBlcnJubzsKKwkJCUFlcnJvcihzdGF0cCwgc3RkZXJyLCAiY29ubmVjdC92YyIsIGVycm5vLCBuc2FwLAorCQkJICAgIG5zYXBsZW4pOworCQkJcmVzX25jbG9zZShzdGF0cCk7CisJCQlyZXR1cm4gKDApOworCQl9CisJCXN0YXRwLT5fZmxhZ3MgfD0gUkVTX0ZfVkM7CisJfQorCisJLyoKKwkgKiBTZW5kIGxlbmd0aCAmIG1lc3NhZ2UKKwkgKi8KKwluc19wdXQxNigodV9zaG9ydClidWZsZW4sICh1X2NoYXIqKSh2b2lkICopJmxlbik7CisJaW92WzBdID0gZXZDb25zSW92ZWMoJmxlbiwgSU5UMTZTWik7CisJREVfQ09OU1QoYnVmLCB0bXApOworCWlvdlsxXSA9IGV2Q29uc0lvdmVjKHRtcCwgKHNpemVfdClidWZsZW4pOworCWlmICh3cml0ZXYoc3RhdHAtPl92Y3NvY2ssIGlvdiwgMikgIT0gKElOVDE2U1ogKyBidWZsZW4pKSB7CisJCSp0ZXJybm8gPSBlcnJubzsKKwkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJ3cml0ZSBmYWlsZWQiLCBlcnJubyk7CisJCXJlc19uY2xvc2Uoc3RhdHApOworCQlyZXR1cm4gKDApOworCX0KKwkvKgorCSAqIFJlY2VpdmUgbGVuZ3RoICYgcmVzcG9uc2UKKwkgKi8KKyByZWFkX2xlbjoKKwljcCA9IGFuczsKKwlsZW4gPSBJTlQxNlNaOworCXdoaWxlICgobiA9IHJlYWQoc3RhdHAtPl92Y3NvY2ssIChjaGFyICopY3AsIChzaXplX3QpbGVuKSkgPiAwKSB7CisJCWNwICs9IG47CisJCWlmICgobGVuIC09IG4pID09IDApCisJCQlicmVhazsKKwl9CisJaWYgKG4gPD0gMCkgeworCQkqdGVycm5vID0gZXJybm87CisJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAicmVhZCBmYWlsZWQiLCBlcnJubyk7CisJCXJlc19uY2xvc2Uoc3RhdHApOworCQkvKgorCQkgKiBBIGxvbmcgcnVubmluZyBwcm9jZXNzIG1pZ2h0IGdldCBpdHMgVENQCisJCSAqIGNvbm5lY3Rpb24gcmVzZXQgaWYgdGhlIHJlbW90ZSBzZXJ2ZXIgd2FzCisJCSAqIHJlc3RhcnRlZC4gIFJlcXVlcnkgdGhlIHNlcnZlciBpbnN0ZWFkIG9mCisJCSAqIHRyeWluZyBhIG5ldyBvbmUuICBXaGVuIHRoZXJlIGlzIG9ubHkgb25lCisJCSAqIHNlcnZlciwgdGhpcyBtZWFucyB0aGF0IGEgcXVlcnkgbWlnaHQgd29yaworCQkgKiBpbnN0ZWFkIG9mIGZhaWxpbmcuICBXZSBvbmx5IGFsbG93IG9uZSByZXNldAorCQkgKiBwZXIgcXVlcnkgdG8gcHJldmVudCBsb29waW5nLgorCQkgKi8KKwkJaWYgKCp0ZXJybm8gPT0gRUNPTk5SRVNFVCAmJiAhY29ubnJlc2V0KSB7CisJCQljb25ucmVzZXQgPSAxOworCQkJcmVzX25jbG9zZShzdGF0cCk7CisJCQlnb3RvIHNhbWVfbnM7CisJCX0KKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMCk7CisJfQorCXJlc3BsZW4gPSBuc19nZXQxNihhbnMpOworCWlmIChyZXNwbGVuID4gYW5zc2l6KSB7CisJCURwcmludChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywKKwkJICAgICAgIChzdGRvdXQsICI7OyByZXNwb25zZSB0cnVuY2F0ZWRcbiIpCisJCSAgICAgICApOworCQl0cnVuY2F0aW5nID0gMTsKKwkJbGVuID0gYW5zc2l6OworCX0gZWxzZQorCQlsZW4gPSByZXNwbGVuOworCWlmIChsZW4gPCBIRklYRURTWikgeworCQkvKgorCQkgKiBVbmRlcnNpemVkIG1lc3NhZ2UuCisJCSAqLworCQlEcHJpbnQoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCSAgICAgICAoc3Rkb3V0LCAiOzsgdW5kZXJzaXplZDogJWRcbiIsIGxlbikpOworCQkqdGVycm5vID0gRU1TR1NJWkU7CisJCXJlc19uY2xvc2Uoc3RhdHApOworCQlyZXR1cm4gKDApOworCX0KKwljcCA9IGFuczsKKwl3aGlsZSAobGVuICE9IDAgJiYgKG4gPSByZWFkKHN0YXRwLT5fdmNzb2NrLCAoY2hhciAqKWNwLCAoc2l6ZV90KWxlbikpID4gMCl7CisJCWNwICs9IG47CisJCWxlbiAtPSBuOworCX0KKwlpZiAobiA8PSAwKSB7CisJCSp0ZXJybm8gPSBlcnJubzsKKwkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJyZWFkKHZjKSIsIGVycm5vKTsKKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMCk7CisJfQorCWlmICh0cnVuY2F0aW5nKSB7CisJCS8qCisJCSAqIEZsdXNoIHJlc3Qgb2YgYW5zd2VyIHNvIGNvbm5lY3Rpb24gc3RheXMgaW4gc3luY2guCisJCSAqLworCQlhbmhwLT50YyA9IDE7CisJCWxlbiA9IHJlc3BsZW4gLSBhbnNzaXo7CisJCXdoaWxlIChsZW4gIT0gMCkgeworCQkJY2hhciBqdW5rW1BBQ0tFVFNaXTsKKworCQkJbiA9IHJlYWQoc3RhdHAtPl92Y3NvY2ssIGp1bmssCisJCQkJIChsZW4gPiBzaXplb2YganVuaykgPyBzaXplb2YganVuayA6IGxlbik7CisJCQlpZiAobiA+IDApCisJCQkJbGVuIC09IG47CisJCQllbHNlCisJCQkJYnJlYWs7CisJCX0KKwl9CisJLyoKKwkgKiBJZiB0aGUgY2FsbGluZyBhcHBsaWNhdGluZyBoYXMgYmFpbGVkIG91dCBvZgorCSAqIGEgcHJldmlvdXMgY2FsbCBhbmQgZmFpbGVkIHRvIGFycmFuZ2UgdG8gaGF2ZQorCSAqIHRoZSBjaXJjdWl0IGNsb3NlZCBvciB0aGUgc2VydmVyIGhhcyBnb3QKKwkgKiBpdHNlbGYgY29uZnVzZWQsIHRoZW4gZHJvcCB0aGUgcGFja2V0IGFuZAorCSAqIHdhaXQgZm9yIHRoZSBjb3JyZWN0IG9uZS4KKwkgKi8KKwlpZiAoaHAtPmlkICE9IGFuaHAtPmlkKSB7CisJCURwcmludFEoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fAorCQkJKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1JFUExZKSwKKwkJCShzdGRvdXQsICI7OyBvbGQgYW5zd2VyICh1bmV4cGVjdGVkKTpcbiIpLAorCQkJYW5zLCAocmVzcGxlbiA+IGFuc3NpeikgPyBhbnNzaXo6IHJlc3BsZW4pOworCQlnb3RvIHJlYWRfbGVuOworCX0KKworCS8qCisJICogQWxsIGlzIHdlbGwsIG9yIHRoZSBlcnJvciBpcyBmYXRhbC4gIFNpZ25hbCB0aGF0IHRoZQorCSAqIG5leHQgbmFtZXNlcnZlciBvdWdodCBub3QgYmUgdHJpZWQuCisJICovCisJcmV0dXJuIChyZXNwbGVuKTsKK30KKworLyogcmV0dXJuIC0xIG9uIGVycm9yIChlcnJubyBzZXQpLCAwIG9uIHN1Y2Nlc3MgKi8KK3N0YXRpYyBpbnQKK2Nvbm5lY3Rfd2l0aF90aW1lb3V0KGludCBzb2NrLCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKm5zYXAsIHNvY2tsZW5fdCBzYWxlbiwgaW50IHNlYykKK3sKKwlpbnQgcmVzLCBvcmlnZmxhZ3M7CisJZmRfc2V0IHJzZXQsIHdzZXQ7CisJc3RydWN0IHRpbWVzcGVjIG5vdywgdGltZW91dCwgZmluaXNoOworCisJb3JpZ2ZsYWdzID0gZmNudGwoc29jaywgRl9HRVRGTCwgMCk7CisJZmNudGwoc29jaywgRl9TRVRGTCwgb3JpZ2ZsYWdzIHwgT19OT05CTE9DSyk7CisKKwlyZXMgPSBfX2Nvbm5lY3Qoc29jaywgbnNhcCwgc2FsZW4pOworCWlmIChyZXMgPCAwICYmIGVycm5vICE9IEVJTlBST0dSRVNTKSB7CisgICAgICAgICAgICAgICAgcmVzID0gLTE7CisgICAgICAgICAgICAgICAgZ290byBkb25lOworCX0KKwlpZiAocmVzICE9IDApIHsKKwkJbm93ID0gZXZOb3dUaW1lKCk7CisJCXRpbWVvdXQgPSBldkNvbnNUaW1lKChsb25nKXNlYywgMEwpOworCQlmaW5pc2ggPSBldkFkZFRpbWUobm93LCB0aW1lb3V0KTsKKwkJaWYgKERCRykgeworCQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwgIiAgJWQgc2VuZF92Y1xuIiwgc29jayk7CisJCX0KKworCQlyZXMgPSByZXRyeWluZ19zZWxlY3Qoc29jaywgJnJzZXQsICZ3c2V0LCAmZmluaXNoKTsKKwkJaWYgKHJlcyA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSAtMTsKKwkJfQorCX0KK2RvbmU6CisJZmNudGwoc29jaywgRl9TRVRGTCwgb3JpZ2ZsYWdzKTsKKwlpZiAoREJHKSB7CisJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsCisJCQkiICAlZCBjb25uZWN0X3dpdGhfdGltZW91dCByZXR1cm5pbmcgJWRcbiIsIHNvY2ssIHJlcyk7CisJfQorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQKK3JldHJ5aW5nX3NlbGVjdChjb25zdCBpbnQgc29jaywgZmRfc2V0ICpyZWFkc2V0LCBmZF9zZXQgKndyaXRlc2V0LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKmZpbmlzaCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgbm93LCB0aW1lb3V0OworCWludCBuLCBlcnJvcjsKKwlzb2NrbGVuX3QgbGVuOworCisKK3JldHJ5OgorCWlmIChEQkcpIHsKKwkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwgIiAgJWQgcmV0eWluZ19zZWxlY3RcbiIsIHNvY2spOworCX0KKworCW5vdyA9IGV2Tm93VGltZSgpOworCWlmIChyZWFkc2V0KSB7CisJCUZEX1pFUk8ocmVhZHNldCk7CisJCUZEX1NFVChzb2NrLCByZWFkc2V0KTsKKwl9CisJaWYgKHdyaXRlc2V0KSB7CisJCUZEX1pFUk8od3JpdGVzZXQpOworCQlGRF9TRVQoc29jaywgd3JpdGVzZXQpOworCX0KKwlpZiAoZXZDbXBUaW1lKCpmaW5pc2gsIG5vdykgPiAwKQorCQl0aW1lb3V0ID0gZXZTdWJUaW1lKCpmaW5pc2gsIG5vdyk7CisJZWxzZQorCQl0aW1lb3V0ID0gZXZDb25zVGltZSgwTCwgMEwpOworCisJbiA9IHBzZWxlY3Qoc29jayArIDEsIHJlYWRzZXQsIHdyaXRlc2V0LCBOVUxMLCAmdGltZW91dCwgTlVMTCk7CisJaWYgKG4gPT0gMCkgeworCQlpZiAoREJHKSB7CisJCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgIiBsaWJjIiwKKwkJCQkiICAlZCByZXRyeWluZ19zZWxlY3QgdGltZW91dFxuIiwgc29jayk7CisJCX0KKwkJZXJybm8gPSBFVElNRURPVVQ7CisJCXJldHVybiAwOworCX0KKwlpZiAobiA8IDApIHsKKwkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJZ290byByZXRyeTsKKwkJaWYgKERCRykgeworCQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwKKwkJCQkiICAlZCByZXRyeWluZ19zZWxlY3QgZ290IGVycm9yICVkXG4iLHNvY2ssIG4pOworCQl9CisJCXJldHVybiBuOworCX0KKwlpZiAoKHJlYWRzZXQgJiYgRkRfSVNTRVQoc29jaywgcmVhZHNldCkpIHx8ICh3cml0ZXNldCAmJiBGRF9JU1NFVChzb2NrLCB3cml0ZXNldCkpKSB7CisJCWxlbiA9IHNpemVvZihlcnJvcik7CisJCWlmIChnZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX0VSUk9SLCAmZXJyb3IsICZsZW4pIDwgMCB8fCBlcnJvcikgeworCQkJZXJybm8gPSBlcnJvcjsKKwkJCWlmIChEQkcpIHsKKwkJCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLAorCQkJCQkiICAlZCByZXRyeWluZ19zZWxlY3QgZG90IGVycm9yMiAlZFxuIiwgc29jaywgZXJybm8pOworCQkJfQorCisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJaWYgKERCRykgeworCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLAorCQkJIiAgJWQgcmV0cnlpbmdfc2VsZWN0IHJldHVybmluZyAlZFxuIixzb2NrLCBuKTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworCitzdGF0aWMgaW50CitzZW5kX2RnKHJlc19zdGF0ZSBzdGF0cCwKKwljb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgdV9jaGFyICphbnMsIGludCBhbnNzaXosCisJaW50ICp0ZXJybm8sIGludCBucywgaW50ICp2X2NpcmN1aXQsIGludCAqZ290c29tZXdoZXJlKQoreworCWNvbnN0IEhFQURFUiAqaHAgPSAoY29uc3QgSEVBREVSICopKGNvbnN0IHZvaWQgKilidWY7CisJSEVBREVSICphbmhwID0gKEhFQURFUiAqKSh2b2lkICopYW5zOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqbnNhcDsKKwlpbnQgbnNhcGxlbjsKKwlzdHJ1Y3QgdGltZXNwZWMgbm93LCB0aW1lb3V0LCBmaW5pc2g7CisJZmRfc2V0IGRzbWFzazsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBmcm9tOworCXNvY2tsZW5fdCBmcm9tbGVuOworCWludCByZXNwbGVuLCBzZWNvbmRzLCBuLCBzOworCisJbnNhcCA9IGdldF9uc2FkZHIoc3RhdHAsIChzaXplX3QpbnMpOworCW5zYXBsZW4gPSBnZXRfc2FsZW4obnNhcCk7CisJaWYgKEVYVChzdGF0cCkubnNzb2Nrc1tuc10gPT0gLTEpIHsKKwkJRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA9IHNvY2tldChuc2FwLT5zYV9mYW1pbHksIFNPQ0tfREdSQU0gfCBTT0NLX0NMT0VYRUMsIDApOworCQlpZiAoRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA+IGhpZ2hlc3RGRCkgeworCQkJcmVzX25jbG9zZShzdGF0cCk7CisJCQllcnJubyA9IEVOT1RTT0NLOworCQl9CisJCWlmIChFWFQoc3RhdHApLm5zc29ja3NbbnNdIDwgMCkgeworCQkJc3dpdGNoIChlcnJubykgeworCQkJY2FzZSBFUFJPVE9OT1NVUFBPUlQ6CisjaWZkZWYgRVBGTk9TVVBQT1JUCisJCQljYXNlIEVQRk5PU1VQUE9SVDoKKyNlbmRpZgorCQkJY2FzZSBFQUZOT1NVUFBPUlQ6CisJCQkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJzb2NrZXQoZGcpIiwgZXJybm8pOworCQkJCXJldHVybiAoMCk7CisJCQlkZWZhdWx0OgorCQkJCSp0ZXJybm8gPSBlcnJubzsKKwkJCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNvY2tldChkZykiLCBlcnJubyk7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCX0KKworCQlpZiAoc3RhdHAtPl9tYXJrICE9IE1BUktfVU5TRVQpIHsKKwkJCWlmIChzZXRzb2Nrb3B0KEVYVChzdGF0cCkubnNzb2Nrc1tuc10sIFNPTF9TT0NLRVQsCisJCQkJCVNPX01BUkssICYoc3RhdHAtPl9tYXJrKSwgc2l6ZW9mKHN0YXRwLT5fbWFyaykpIDwgMCkgeworCQkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorI2lmbmRlZiBDQU5OT1RfQ09OTkVDVF9ER1JBTQorCQkvKgorCQkgKiBPbiBhIDQuM0JTRCsgbWFjaGluZSAoY2xpZW50IGFuZCBzZXJ2ZXIsCisJCSAqIGFjdHVhbGx5KSwgc2VuZGluZyB0byBhIG5hbWVzZXJ2ZXIgZGF0YWdyYW0KKwkJICogcG9ydCB3aXRoIG5vIG5hbWVzZXJ2ZXIgd2lsbCBjYXVzZSBhbgorCQkgKiBJQ01QIHBvcnQgdW5yZWFjaGFibGUgbWVzc2FnZSB0byBiZSByZXR1cm5lZC4KKwkJICogSWYgb3VyIGRhdGFncmFtIHNvY2tldCBpcyAiY29ubmVjdGVkIiB0byB0aGUKKwkJICogc2VydmVyLCB3ZSBnZXQgYW4gRUNPTk5SRUZVU0VEIGVycm9yIG9uIHRoZSBuZXh0CisJCSAqIHNvY2tldCBvcGVyYXRpb24sIGFuZCBzZWxlY3QgcmV0dXJucyBpZiB0aGUKKwkJICogZXJyb3IgbWVzc2FnZSBpcyByZWNlaXZlZC4gIFdlIGNhbiB0aHVzIGRldGVjdAorCQkgKiB0aGUgYWJzZW5jZSBvZiBhIG5hbWVzZXJ2ZXIgd2l0aG91dCB0aW1pbmcgb3V0LgorCQkgKi8KKwkJaWYgKHJhbmRvbV9iaW5kKEVYVChzdGF0cCkubnNzb2Nrc1tuc10sIG5zYXAtPnNhX2ZhbWlseSkgPCAwKSB7CisJCQlBZXJyb3Ioc3RhdHAsIHN0ZGVyciwgImJpbmQoZGcpIiwgZXJybm8sIG5zYXAsCisJCQkgICAgbnNhcGxlbik7CisJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJaWYgKF9fY29ubmVjdChFWFQoc3RhdHApLm5zc29ja3NbbnNdLCBuc2FwLCAoc29ja2xlbl90KW5zYXBsZW4pIDwgMCkgeworCQkJQWVycm9yKHN0YXRwLCBzdGRlcnIsICJjb25uZWN0KGRnKSIsIGVycm5vLCBuc2FwLAorCQkJICAgIG5zYXBsZW4pOworCQkJcmVzX25jbG9zZShzdGF0cCk7CisJCQlyZXR1cm4gKDApOworCQl9CisjZW5kaWYgLyogIUNBTk5PVF9DT05ORUNUX0RHUkFNICovCisJCURwcmludChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywKKwkJICAgICAgIChzdGRvdXQsICI7OyBuZXcgREcgc29ja2V0XG4iKSkKKworCX0KKwlzID0gRVhUKHN0YXRwKS5uc3NvY2tzW25zXTsKKyNpZm5kZWYgQ0FOTk9UX0NPTk5FQ1RfREdSQU0KKwlpZiAoc2VuZChzLCAoY29uc3QgY2hhciopYnVmLCAoc2l6ZV90KWJ1ZmxlbiwgMCkgIT0gYnVmbGVuKSB7CisJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAic2VuZCIsIGVycm5vKTsKKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMCk7CisJfQorI2Vsc2UgLyogIUNBTk5PVF9DT05ORUNUX0RHUkFNICovCisJaWYgKHNlbmR0byhzLCAoY29uc3QgY2hhciopYnVmLCBidWZsZW4sIDAsIG5zYXAsIG5zYXBsZW4pICE9IGJ1ZmxlbikKKwl7CisJCUFlcnJvcihzdGF0cCwgc3RkZXJyLCAic2VuZHRvIiwgZXJybm8sIG5zYXAsIG5zYXBsZW4pOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJcmV0dXJuICgwKTsKKwl9CisjZW5kaWYgLyogIUNBTk5PVF9DT05ORUNUX0RHUkFNICovCisKKwkvKgorCSAqIFdhaXQgZm9yIHJlcGx5LgorCSAqLworCXNlY29uZHMgPSBnZXRfdGltZW91dChzdGF0cCwgbnMpOworCW5vdyA9IGV2Tm93VGltZSgpOworCXRpbWVvdXQgPSBldkNvbnNUaW1lKChsb25nKXNlY29uZHMsIDBMKTsKKwlmaW5pc2ggPSBldkFkZFRpbWUobm93LCB0aW1lb3V0KTsKK3JldHJ5OgorCW4gPSByZXRyeWluZ19zZWxlY3QocywgJmRzbWFzaywgTlVMTCwgJmZpbmlzaCk7CisKKwlpZiAobiA9PSAwKSB7CisJCURwcmludChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywgKHN0ZG91dCwgIjs7IHRpbWVvdXRcbiIpKTsKKwkJKmdvdHNvbWV3aGVyZSA9IDE7CisJCXJldHVybiAoMCk7CisJfQorCWlmIChuIDwgMCkgeworCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNlbGVjdCIsIGVycm5vKTsKKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMCk7CisJfQorCWVycm5vID0gMDsKKwlmcm9tbGVuID0gc2l6ZW9mKGZyb20pOworCXJlc3BsZW4gPSByZWN2ZnJvbShzLCAoY2hhciopYW5zLCAoc2l6ZV90KWFuc3NpeiwwLAorCQkJICAgKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJmZyb20sICZmcm9tbGVuKTsKKwlpZiAocmVzcGxlbiA8PSAwKSB7CisJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAicmVjdmZyb20iLCBlcnJubyk7CisJCXJlc19uY2xvc2Uoc3RhdHApOworCQlyZXR1cm4gKDApOworCX0KKwkqZ290c29tZXdoZXJlID0gMTsKKwlpZiAocmVzcGxlbiA8IEhGSVhFRFNaKSB7CisJCS8qCisJCSAqIFVuZGVyc2l6ZWQgbWVzc2FnZS4KKwkJICovCisJCURwcmludChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywKKwkJICAgICAgIChzdGRvdXQsICI7OyB1bmRlcnNpemVkOiAlZFxuIiwKKwkJCXJlc3BsZW4pKTsKKwkJKnRlcnJubyA9IEVNU0dTSVpFOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKGhwLT5pZCAhPSBhbmhwLT5pZCkgeworCQkvKgorCQkgKiByZXNwb25zZSBmcm9tIG9sZCBxdWVyeSwgaWdub3JlIGl0LgorCQkgKiBYWFggLSBwb3RlbnRpYWwgc2VjdXJpdHkgaGF6YXJkIGNvdWxkCisJCSAqCSBiZSBkZXRlY3RlZCBoZXJlLgorCQkgKi8KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKwkJX19saWJjX2FuZHJvaWRfbG9nX2V2ZW50X3VpZChCSU9OSUNfRVZFTlRfUkVTT0xWRVJfT0xEX1JFU1BPTlNFKTsKKyNlbmRpZgorCQlEcHJpbnRRKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgfHwKKwkJCShzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9SRVBMWSksCisJCQkoc3Rkb3V0LCAiOzsgb2xkIGFuc3dlcjpcbiIpLAorCQkJYW5zLCAocmVzcGxlbiA+IGFuc3NpeikgPyBhbnNzaXogOiByZXNwbGVuKTsKKwkJZ290byByZXRyeTsKKwl9CisJaWYgKCEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfSU5TRUNVUkUxKSAmJgorCSAgICAhcmVzX291cnNlcnZlcl9wKHN0YXRwLCAoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikmZnJvbSkpIHsKKwkJLyoKKwkJICogcmVzcG9uc2UgZnJvbSB3cm9uZyBzZXJ2ZXI/IGlnbm9yZSBpdC4KKwkJICogWFhYIC0gcG90ZW50aWFsIHNlY3VyaXR5IGhhemFyZCBjb3VsZAorCQkgKgkgYmUgZGV0ZWN0ZWQgaGVyZS4KKwkJICovCisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisJCV9fbGliY19hbmRyb2lkX2xvZ19ldmVudF91aWQoQklPTklDX0VWRU5UX1JFU09MVkVSX1dST05HX1NFUlZFUik7CisjZW5kaWYKKwkJRHByaW50USgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpIHx8CisJCQkoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfUkVQTFkpLAorCQkJKHN0ZG91dCwgIjs7IG5vdCBvdXIgc2VydmVyOlxuIiksCisJCQlhbnMsIChyZXNwbGVuID4gYW5zc2l6KSA/IGFuc3NpeiA6IHJlc3BsZW4pOworCQlnb3RvIHJldHJ5OworCX0KKyNpZmRlZiBSRVNfVVNFX0VETlMwCisJaWYgKGFuaHAtPnJjb2RlID09IEZPUk1FUlIgJiYgKHN0YXRwLT5vcHRpb25zICYgUkVTX1VTRV9FRE5TMCkgIT0gMFUpIHsKKwkJLyoKKwkJICogRG8gbm90IHJldHJ5IGlmIHRoZSBzZXJ2ZXIgZG8gbm90IHVuZGVyc3RhbmQgRUROUzAuCisJCSAqIFRoZSBjYXNlIGhhcyB0byBiZSBjYXB0dXJlZCBoZXJlLCBhcyBGT1JNRVJSIHBhY2tldCBkbyBub3QKKwkJICogY2FycnkgcXVlcnkgc2VjdGlvbiwgaGVuY2UgcmVzX3F1ZXJpZXNtYXRjaCgpIHJldHVybnMgMC4KKwkJICovCisJCURwcmludFEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCQkoc3Rkb3V0LCAic2VydmVyIHJlamVjdGVkIHF1ZXJ5IHdpdGggRUROUzA6XG4iKSwKKwkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6IDogcmVzcGxlbik7CisJCS8qIHJlY29yZCB0aGUgZXJyb3IgKi8KKwkJc3RhdHAtPl9mbGFncyB8PSBSRVNfRl9FRE5TMEVSUjsKKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMCk7CisJfQorI2VuZGlmCisJaWYgKCEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfSU5TRUNVUkUyKSAmJgorCSAgICAhcmVzX3F1ZXJpZXNtYXRjaChidWYsIGJ1ZiArIGJ1ZmxlbiwKKwkJCSAgICAgIGFucywgYW5zICsgYW5zc2l6KSkgeworCQkvKgorCQkgKiByZXNwb25zZSBjb250YWlucyB3cm9uZyBxdWVyeT8gaWdub3JlIGl0LgorCQkgKiBYWFggLSBwb3RlbnRpYWwgc2VjdXJpdHkgaGF6YXJkIGNvdWxkCisJCSAqCSBiZSBkZXRlY3RlZCBoZXJlLgorCQkgKi8KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKwkJX19saWJjX2FuZHJvaWRfbG9nX2V2ZW50X3VpZChCSU9OSUNfRVZFTlRfUkVTT0xWRVJfV1JPTkdfUVVFUlkpOworI2VuZGlmCisJCURwcmludFEoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fAorCQkJKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1JFUExZKSwKKwkJCShzdGRvdXQsICI7OyB3cm9uZyBxdWVyeSBuYW1lOlxuIiksCisJCQlhbnMsIChyZXNwbGVuID4gYW5zc2l6KSA/IGFuc3NpeiA6IHJlc3BsZW4pOworCQlnb3RvIHJldHJ5OzsKKwl9CisJaWYgKGFuaHAtPnJjb2RlID09IFNFUlZGQUlMIHx8CisJICAgIGFuaHAtPnJjb2RlID09IE5PVElNUCB8fAorCSAgICBhbmhwLT5yY29kZSA9PSBSRUZVU0VEKSB7CisJCURwcmludFEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCQkoc3Rkb3V0LCAic2VydmVyIHJlamVjdGVkIHF1ZXJ5OlxuIiksCisJCQlhbnMsIChyZXNwbGVuID4gYW5zc2l6KSA/IGFuc3NpeiA6IHJlc3BsZW4pOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJLyogZG9uJ3QgcmV0cnkgaWYgY2FsbGVkIGZyb20gZGlnICovCisJCWlmICghc3RhdHAtPnBmY29kZSkKKwkJCXJldHVybiAoMCk7CisJfQorCWlmICghKHN0YXRwLT5vcHRpb25zICYgUkVTX0lHTlRDKSAmJiBhbmhwLT50YykgeworCQkvKgorCQkgKiBUbyBnZXQgdGhlIHJlc3Qgb2YgYW5zd2VyLAorCQkgKiB1c2UgVENQIHdpdGggc2FtZSBzZXJ2ZXIuCisJCSAqLworCQlEcHJpbnQoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCSAgICAgICAoc3Rkb3V0LCAiOzsgdHJ1bmNhdGVkIGFuc3dlclxuIikpOworCQkqdl9jaXJjdWl0ID0gMTsKKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMSk7CisJfQorCS8qCisJICogQWxsIGlzIHdlbGwsIG9yIHRoZSBlcnJvciBpcyBmYXRhbC4gIFNpZ25hbCB0aGF0IHRoZQorCSAqIG5leHQgbmFtZXNlcnZlciBvdWdodCBub3QgYmUgdHJpZWQuCisJICovCisJcmV0dXJuIChyZXNwbGVuKTsKK30KKworc3RhdGljIHZvaWQKK0FlcnJvcihjb25zdCByZXNfc3RhdGUgc3RhdHAsIEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGVycm9yLAorICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgaW50IGFsZW4pCit7CisJaW50IHNhdmUgPSBlcnJubzsKKwljaGFyIGhidWZbTklfTUFYSE9TVF07CisJY2hhciBzYnVmW05JX01BWFNFUlZdOworCisJaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgIT0gMFUpIHsKKwkJaWYgKGdldG5hbWVpbmZvKGFkZHJlc3MsIChzb2NrbGVuX3QpYWxlbiwgaGJ1Ziwgc2l6ZW9mKGhidWYpLAorCQkgICAgc2J1Ziwgc2l6ZW9mKHNidWYpLCBuaWZsYWdzKSkgeworCQkJc3RybmNweShoYnVmLCAiPyIsIHNpemVvZihoYnVmKSAtIDEpOworCQkJaGJ1ZltzaXplb2YoaGJ1ZikgLSAxXSA9ICdcMCc7CisJCQlzdHJuY3B5KHNidWYsICI/Iiwgc2l6ZW9mKHNidWYpIC0gMSk7CisJCQlzYnVmW3NpemVvZihzYnVmKSAtIDFdID0gJ1wwJzsKKwkJfQorCQlmcHJpbnRmKGZpbGUsICJyZXNfc2VuZDogJXMgKFslc10uJXMpOiAlc1xuIiwKKwkJCXN0cmluZywgaGJ1Ziwgc2J1Ziwgc3RyZXJyb3IoZXJyb3IpKTsKKwl9CisJZXJybm8gPSBzYXZlOworfQorCitzdGF0aWMgdm9pZAorUGVycm9yKGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwgRklMRSAqZmlsZSwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZXJyb3IpIHsKKwlpbnQgc2F2ZSA9IGVycm5vOworCisJaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgIT0gMFUpCisJCWZwcmludGYoZmlsZSwgInJlc19zZW5kOiAlczogJXNcbiIsCisJCQlzdHJpbmcsIHN0cmVycm9yKGVycm9yKSk7CisJZXJybm8gPSBzYXZlOworfQorCitzdGF0aWMgaW50Citzb2NrX2VxKHN0cnVjdCBzb2NrYWRkciAqYSwgc3RydWN0IHNvY2thZGRyICpiKSB7CisJc3RydWN0IHNvY2thZGRyX2luICphNCwgKmI0OworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmE2LCAqYjY7CisKKwlpZiAoYS0+c2FfZmFtaWx5ICE9IGItPnNhX2ZhbWlseSkKKwkJcmV0dXJuIDA7CisJc3dpdGNoIChhLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWE0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSh2b2lkICopYTsKKwkJYjQgPSAoc3RydWN0IHNvY2thZGRyX2luICopKHZvaWQgKiliOworCQlyZXR1cm4gYTQtPnNpbl9wb3J0ID09IGI0LT5zaW5fcG9ydCAmJgorCQkgICAgYTQtPnNpbl9hZGRyLnNfYWRkciA9PSBiNC0+c2luX2FkZHIuc19hZGRyOworCWNhc2UgQUZfSU5FVDY6CisJCWE2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKWE7CisJCWI2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKWI7CisJCXJldHVybiBhNi0+c2luNl9wb3J0ID09IGI2LT5zaW42X3BvcnQgJiYKKyNpZmRlZiBIQVZFX1NJTjZfU0NPUEVfSUQKKwkJICAgIGE2LT5zaW42X3Njb3BlX2lkID09IGI2LT5zaW42X3Njb3BlX2lkICYmCisjZW5kaWYKKwkJICAgIElONl9BUkVfQUREUl9FUVVBTCgmYTYtPnNpbjZfYWRkciwgJmI2LT5zaW42X2FkZHIpOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworI2lmZGVmIE5FRURfUFNFTEVDVAorLyogWFhYIG5lZWRzIHRvIG1vdmUgdG8gdGhlIHBvcnRpbmcgbGlicmFyeS4gKi8KK3N0YXRpYyBpbnQKK3BzZWxlY3QoaW50IG5mZHMsIHZvaWQgKnJmZHMsIHZvaWQgKndmZHMsIHZvaWQgKmVmZHMsCisJc3RydWN0IHRpbWVzcGVjICp0c3AsIGNvbnN0IHNpZ3NldF90ICpzaWdtYXNrKQoreworCXN0cnVjdCB0aW1ldmFsIHR2LCAqdHZwOworCXNpZ3NldF90IHNpZ3M7CisJaW50IG47CisKKwlpZiAodHNwKSB7CisJCXR2cCA9ICZ0djsKKwkJdHYgPSBldlRpbWVWYWwoKnRzcCk7CisJfSBlbHNlCisJCXR2cCA9IE5VTEw7CisJaWYgKHNpZ21hc2spCisJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCBzaWdtYXNrLCAmc2lncyk7CisJbiA9IHNlbGVjdChuZmRzLCByZmRzLCB3ZmRzLCBlZmRzLCB0dnApOworCWlmIChzaWdtYXNrKQorCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJnNpZ3MsIE5VTEwpOworCWlmICh0c3ApCisJCSp0c3AgPSBldlRpbWVTcGVjKHR2KTsKKwlyZXR1cm4gKG4pOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2Rucy9yZXNvbHYvcmVzX3N0YXRlLmMgYi9saWJjL2Rucy9yZXNvbHYvcmVzX3N0YXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3OTFkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL3Jlc29sdi9yZXNfc3RhdGUuYwpAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJyZXNvbHZfY2FjaGUuaCIKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgX1JFQUxMWV9JTkNMVURFX1NZU19fU1lTVEVNX1BST1BFUlRJRVNfSF8KKyNpbmNsdWRlIDxzeXMvX3N5c3RlbV9wcm9wZXJ0aWVzLmg+CisKKy8qIFNldCB0byAxIHRvIGVuYWJsZSBkZWJ1ZyB0cmFjZXMgKi8KKyNkZWZpbmUgREVCVUcgMAorCisjaWYgREVCVUcKKyMgIGluY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCisjICBpbmNsdWRlIDx1bmlzdGQuaD4gIC8qIGZvciBnZXR0aWQoKSAqLworIyAgZGVmaW5lIEQoLi4uKSBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywibGliYyIsIF9fVkFfQVJHU19fKQorI2Vsc2UKKyMgIGRlZmluZSBEKC4uLikgIGRve313aGlsZSgwKQorI2VuZGlmCisKK3N0YXRpYyBwdGhyZWFkX2tleV90ICAgX3Jlc19rZXk7CitzdGF0aWMgcHRocmVhZF9vbmNlX3QgIF9yZXNfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50ICAgICAgICAgICAgICAgICAgX2hfZXJybm87CisgICAgLy8gVE9ETzogSGF2ZSBvbmUgX19yZXNfc3RhdGUgcGVyIG5ldHdvcmsgc28gd2UgZG9uJ3QgaGF2ZSB0byByZXBvcHVsYXRlIGZyZXF1ZW50bHkuCisgICAgc3RydWN0IF9fcmVzX3N0YXRlICBfbnJlc1sxXTsKKyAgICB1bnNpZ25lZCAgICAgICAgICAgICBfc2VyaWFsOworICAgIHN0cnVjdCBwcm9wX2luZm8qICAgX3BpOworICAgIHN0cnVjdCByZXNfc3RhdGljICAgX3JzdGF0aWNbMV07Cit9IF9yZXNfdGhyZWFkOworCitzdGF0aWMgX3Jlc190aHJlYWQqCitfcmVzX3RocmVhZF9hbGxvYyh2b2lkKQoreworICAgIF9yZXNfdGhyZWFkKiAgcnQgPSBjYWxsb2MoMSwgc2l6ZW9mKCpydCkpOworCisgICAgaWYgKHJ0KSB7CisgICAgICAgIHJ0LT5faF9lcnJubyA9IDA7CisgICAgICAgIC8qIFNwZWNpYWwgc3lzdGVtIHByb3BlcnR5IHdoaWNoIHRyYWNrcyBhbnkgY2hhbmdlcyB0byAnbmV0LionLiAqLworICAgICAgICBydC0+X3NlcmlhbCA9IDA7CisgICAgICAgIHJ0LT5fcGkgPSAoc3RydWN0IHByb3BfaW5mbyopIF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQoIm5ldC5jaGFuZ2UiKTsKKyAgICAgICAgaWYgKHJ0LT5fcGkpIHsKKyAgICAgICAgICAgIHJ0LT5fc2VyaWFsID0gX19zeXN0ZW1fcHJvcGVydHlfc2VyaWFsKHJ0LT5fcGkpOworICAgICAgICB9CisgICAgICAgIG1lbXNldChydC0+X3JzdGF0aWMsIDAsIHNpemVvZiBydC0+X3JzdGF0aWMpOworICAgIH0KKyAgICByZXR1cm4gcnQ7Cit9CisKK3N0YXRpYyB2b2lkCitfcmVzX3N0YXRpY19kb25lKCByZXNfc3RhdGljICBycyApCit7CisgICAgLyogZm9ydHVuYXRlbHksIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gaGVyZSwgc2luY2UgdGhlCisgICAgICogcG9pbnRzIGluIGhfYWRkcl9wdHJzIGFuZCBob3N0X2FsaWFzZXMgc2hvdWxkIGFsbAorICAgICAqIHBvaW50IHRvICdob3N0YnVmJworICAgICAqLworICAgIGlmIChycy0+aG9zdGYpIHsgIC8qIHNob3VsZCBub3QgaGFwcGVuIGluIHRoZW9yeSwgYnV0IGp1c3QgYmUgc2FmZSAqLworICAgICAgICBmY2xvc2UocnMtPmhvc3RmKTsKKyAgICAgICAgcnMtPmhvc3RmID0gTlVMTDsKKyAgICB9CisgICAgZnJlZShycy0+c2VydmVudC5zX2FsaWFzZXMpOworfQorCitzdGF0aWMgdm9pZAorX3Jlc190aHJlYWRfZnJlZSggdm9pZCogIF9ydCApCit7CisgICAgX3Jlc190aHJlYWQqICBydCA9IF9ydDsKKworICAgIEQoIiVzOiBydD0lcCBmb3IgdGhyZWFkPSVkIiwgX19GVU5DVElPTl9fLCBydCwgZ2V0dGlkKCkpOworCisgICAgX3Jlc19zdGF0aWNfZG9uZShydC0+X3JzdGF0aWMpOworICAgIHJlc19uZGVzdHJveShydC0+X25yZXMpOworICAgIGZyZWUocnQpOworfQorCitzdGF0aWMgdm9pZAorX3Jlc19pbml0X2tleSggdm9pZCApCit7CisgICAgcHRocmVhZF9rZXlfY3JlYXRlKCAmX3Jlc19rZXksIF9yZXNfdGhyZWFkX2ZyZWUgKTsKK30KKworc3RhdGljIF9yZXNfdGhyZWFkKgorX3Jlc190aHJlYWRfZ2V0KHZvaWQpCit7CisgICAgX3Jlc190aHJlYWQqICBydDsKKyAgICBwdGhyZWFkX29uY2UoICZfcmVzX29uY2UsIF9yZXNfaW5pdF9rZXkgKTsKKyAgICBydCA9IHB0aHJlYWRfZ2V0c3BlY2lmaWMoIF9yZXNfa2V5ICk7CisKKyAgICBpZiAocnQgIT0gTlVMTCkgeworICAgICAgICAvKiBXZSBhbHJlYWR5IGhhdmUgb25lIHRocmVhZC1zcGVjaWZpYyBETlMgc3RhdGUgb2JqZWN0LgorICAgICAgICAgKiBDaGVjayB0aGUgc2VyaWFsIHZhbHVlIGZvciBhbnkgY2hhbmdlcyB0byBuZXQuKiBwcm9wZXJ0aWVzICovCisgICAgICAgIEQoIiVzOiBDYWxsZWQgZm9yIHRpZD0lZCBydD0lcCBydC0+cGk9JXAgcnQtPnNlcmlhbD0lZCIsCisgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZ2V0dGlkKCksIHJ0LCBydC0+X3BpLCBydC0+X3NlcmlhbCk7CisgICAgICAgIGlmIChydC0+X3BpID09IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIFRoZSBwcm9wZXJ0eSB3YXNuJ3QgY3JlYXRlZCB3aGVuIF9yZXNfdGhyZWFkX2dldCgpIHdhcworICAgICAgICAgICAgICogY2FsbGVkIHRoZSBsYXN0IHRpbWUuIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIHZlcnkKKyAgICAgICAgICAgICAqIGVhcmx5IGR1cmluZyB0aGUgYm9vdCBzZXF1ZW5jZS4gRmlyc3QsIGxldCdzIHRyeSB0byBzZWUgaWYgaXQKKyAgICAgICAgICAgICAqIGlzIGhlcmUgbm93LiAqLworICAgICAgICAgICAgcnQtPl9waSA9IChzdHJ1Y3QgcHJvcF9pbmZvKikgX19zeXN0ZW1fcHJvcGVydHlfZmluZCgibmV0LmNoYW5nZSIpOworICAgICAgICAgICAgaWYgKHJ0LT5fcGkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIC8qIFN0aWxsIG5vdGhpbmcsIHJldHVybiBjdXJyZW50IHN0YXRlICovCisgICAgICAgICAgICAgICAgRCgiJXM6IGV4aXRpbmcgZm9yIHRpZD0lZCBydD0lZCBzaW5jZSBzeXN0ZW0gcHJvcGVydHkgbm90IGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZ2V0dGlkKCksIHJ0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJ0LT5fc2VyaWFsID09IF9fc3lzdGVtX3Byb3BlcnR5X3NlcmlhbChydC0+X3BpKSkgeworICAgICAgICAgICAgLyogTm90aGluZyBjaGFuZ2VkLCBzbyByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUgKi8KKyAgICAgICAgICAgIEQoIiVzOiB0aWQ9JWQgcnQ9JXAgbm90aGluZyBjaGFuZ2VkLCByZXR1cm5pbmciLAorICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGdldHRpZCgpLCBydCk7CisgICAgICAgICAgICByZXR1cm4gcnQ7CisgICAgICAgIH0KKyAgICAgICAgLyogVXBkYXRlIHRoZSByZWNvcmRlZCBzZXJpYWwgbnVtYmVyLCBhbmQgZ28gcmVzZXQgdGhlIHN0YXRlICovCisgICAgICAgIHJ0LT5fc2VyaWFsID0gX19zeXN0ZW1fcHJvcGVydHlfc2VyaWFsKHJ0LT5fcGkpOworICAgICAgICBnb3RvIFJFU0VUX1NUQVRFOworICAgIH0KKworICAgIC8qIEl0IGlzIHRoZSBmaXJzdCB0aW1lIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHRoaXMgdGhyZWFkLAorICAgICAqIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IHRocmVhZC1zcGVjaWZpYyBETlMgcmVzb2x2ZXIgc3RhdGUuICovCisgICAgcnQgPSBfcmVzX3RocmVhZF9hbGxvYygpOworICAgIGlmIChydCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwdGhyZWFkX3NldHNwZWNpZmljKCBfcmVzX2tleSwgcnQgKTsKKyAgICBEKCIlczogdGlkPSVkIENyZWF0ZWQgbmV3IEROUyBzdGF0ZSBydD0lcCIsCisgICAgICBfX0ZVTkNUSU9OX18sIGdldHRpZCgpLCBydCk7CisKK1JFU0VUX1NUQVRFOgorICAgIC8qIFJlc2V0IHRoZSBzdGF0ZSwgbm90ZSB0aGF0IHJlc19uaW5pdCgpIGNhbiBub3cgcHJvcGVybHkgcmVzZXQKKyAgICAgKiBhbiBleGlzdGluZyBzdGF0ZSB3aXRob3V0IGxlYWtpbmcgbWVtb3J5LgorICAgICAqLworICAgIEQoIiVzOiB0aWQ9JWQsIHJ0PSVwLCByZXNldHRpbmcgRE5TIHN0YXRlIChvcHRpb25zIFJFU19JTklUPSVkKSIsCisgICAgICBfX0ZVTkNUSU9OX18sIGdldHRpZCgpLCBydCwgKHJ0LT5fbnJlcy0+b3B0aW9ucyAmIFJFU19JTklUKSAhPSAwKTsKKyAgICBpZiAoIHJlc19uaW5pdCggcnQtPl9ucmVzICkgPCAwICkgeworICAgICAgICAvKiBUaGlzIHNob3VsZCBub3QgaGFwcGVuICovCisgICAgICAgIEQoIiVzOiB0aWQ9JWQgcnQ9JXAsIHdvb3QsIHJlc19uaW5pdCgpIHJldHVybmVkIDwgMCIsCisgICAgICAgICAgX19GVU5DVElPTl9fLCBnZXR0aWQoKSwgcnQpOworICAgICAgICBfcmVzX3RocmVhZF9mcmVlKHJ0KTsKKyAgICAgICAgcHRocmVhZF9zZXRzcGVjaWZpYyggX3Jlc19rZXksIE5VTEwgKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBydDsKK30KKworX19MSUJDX0hJRERFTl9fCitzdHJ1Y3QgX19yZXNfc3RhdGUgX25yZXM7CisKKyNpZiAwCitzdHJ1Y3QgcmVzb2x2X2NhY2hlKgorX19nZXRfcmVzX2NhY2hlKHZvaWQpCit7CisgICAgX3Jlc190aHJlYWQqICBydCA9IF9yZXNfdGhyZWFkX2dldCgpOworCisgICAgaWYgKCFydCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIXJ0LT5fY2FjaGUpIHsKKyAgICAgICAgcnQtPl9jYWNoZSA9IF9yZXNvbHZfY2FjaGVfY3JlYXRlKCk7CisgICAgfQorICAgIHJldHVybiBydC0+X2NhY2hlOworfQorI2VuZGlmCisKK2ludCoKK19fZ2V0X2hfZXJybm8odm9pZCkKK3sKKyAgICBfcmVzX3RocmVhZCogIHJ0ICAgID0gX3Jlc190aHJlYWRfZ2V0KCk7CisgICAgc3RhdGljIGludCAgICBwYW5pYyA9IE5FVERCX0lOVEVSTkFMOworCisgICAgcmV0dXJuIHJ0ID8gJnJ0LT5faF9lcnJubyA6ICZwYW5pYzsKK30KKworcmVzX3N0YXRlCitfX3Jlc19nZXRfc3RhdGUodm9pZCkKK3sKKyAgICBfcmVzX3RocmVhZCogIHJ0ID0gX3Jlc190aHJlYWRfZ2V0KCk7CisKKyAgICByZXR1cm4gcnQgPyBydC0+X25yZXMgOiBOVUxMOworfQorCit2b2lkCitfX3Jlc19wdXRfc3RhdGUocmVzX3N0YXRlIHJlcyBfX3VudXNlZCkKK3sKKyAgICAvKiBub3RoaW5nIHRvIGRvICovCit9CisKK3Jlc19zdGF0aWMKK19fcmVzX2dldF9zdGF0aWModm9pZCkKK3sKKyAgICBfcmVzX3RocmVhZCogIHJ0ID0gX3Jlc190aHJlYWRfZ2V0KCk7CisKKyAgICByZXR1cm4gcnQgPyBydC0+X3JzdGF0aWMgOiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2FuZHJvaWQvYXBpLWxldmVsLmggYi9saWJjL2luY2x1ZGUvYW5kcm9pZC9hcGktbGV2ZWwuaAppbmRleCA2MTFmZGZiLi4yZDJmMDk2IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvYW5kcm9pZC9hcGktbGV2ZWwuaAorKysgYi9saWJjL2luY2x1ZGUvYW5kcm9pZC9hcGktbGV2ZWwuaApAQCAtMjUsOSArMjUsMTQgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBBTkRST0lEX0FQSV9MRVZFTF9ICiAjZGVmaW5lIEFORFJPSURfQVBJX0xFVkVMX0gKIAotI2RlZmluZSBfX0FORFJPSURfQVBJX18gMTAKKy8qCisgKiBNYWdpYyB2ZXJzaW9uIG51bWJlciBmb3IgYSBjdXJyZW50IGRldmVsb3BtZW50IGJ1aWxkLCB3aGljaCBoYXMKKyAqIG5vdCB5ZXQgdHVybmVkIGludG8gYW4gb2ZmaWNpYWwgcmVsZWFzZS4KKyAqLworI2RlZmluZSBfX0FORFJPSURfQVBJX18gMTAwMDAKIAogI2VuZGlmIC8qIEFORFJPSURfQVBJX0xFVkVMX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9hbmRyb2lkL2RsZXh0LmggYi9saWJjL2luY2x1ZGUvYW5kcm9pZC9kbGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjM2EyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvYW5kcm9pZC9kbGV4dC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfX0FORFJPSURfRExFWFRfSF9fCisjZGVmaW5lIF9fQU5EUk9JRF9ETEVYVF9IX18KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIGJpdGZpZWxkIGRlZmluaXRpb25zIGZvciBhbmRyb2lkX2RsZXh0aW5mby5mbGFncyAqLworZW51bSB7CisgIC8qIFdoZW4gc2V0LCB0aGUgcmVzZXJ2ZWRfYWRkciBhbmQgcmVzZXJ2ZWRfc2l6ZSBmaWVsZHMgbXVzdCBwb2ludCB0byBhbgorICAgKiBhbHJlYWR5LXJlc2VydmVkIHJlZ2lvbiBvZiBhZGRyZXNzIHNwYWNlIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBsb2FkIHRoZQorICAgKiBsaWJyYXJ5IGlmIGl0IGZpdHMuIElmIHRoZSByZXNlcnZlZCByZWdpb24gaXMgbm90IGxhcmdlIGVub3VnaCwgdGhlIGxvYWQKKyAgICogd2lsbCBmYWlsLgorICAgKi8KKyAgQU5EUk9JRF9ETEVYVF9SRVNFUlZFRF9BRERSRVNTICAgICAgPSAweDEsCisKKyAgLyogQXMgRExFWFRfUkVTRVJWRURfQUREUkVTUywgYnV0IGlmIHRoZSByZXNlcnZlZCByZWdpb24gaXMgbm90IGxhcmdlIGVub3VnaCwKKyAgICogdGhlIGxpbmtlciB3aWxsIGNob29zZSBhbiBhdmFpbGFibGUgYWRkcmVzcyBpbnN0ZWFkLgorICAgKi8KKyAgQU5EUk9JRF9ETEVYVF9SRVNFUlZFRF9BRERSRVNTX0hJTlQgPSAweDIsCisKKyAgLyogV2hlbiBzZXQsIHdyaXRlIHRoZSBHTlUgUkVMUk8gc2VjdGlvbiBvZiB0aGUgbWFwcGVkIGxpYnJhcnkgdG8gcmVscm9fZmQKKyAgICogYWZ0ZXIgcmVsb2NhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQsIHRvIGFsbG93IGl0IHRvIGJlIHJldXNlZCBieSBhbm90aGVyCisgICAqIHByb2Nlc3MgbG9hZGluZyB0aGUgc2FtZSBsaWJyYXJ5IGF0IHRoZSBzYW1lIGFkZHJlc3MuIFRoaXMgaW1wbGllcworICAgKiBBTkRST0lEX0RMRVhUX1VTRV9SRUxSTy4KKyAgICovCisgIEFORFJPSURfRExFWFRfV1JJVEVfUkVMUk8gICAgICAgICAgID0gMHg0LAorCisgIC8qIFdoZW4gc2V0LCBjb21wYXJlIHRoZSBHTlUgUkVMUk8gc2VjdGlvbiBvZiB0aGUgbWFwcGVkIGxpYnJhcnkgdG8gcmVscm9fZmQKKyAgICogYWZ0ZXIgcmVsb2NhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQsIGFuZCByZXBsYWNlIGFueSByZWxvY2F0ZWQgcGFnZXMgdGhhdAorICAgKiBhcmUgaWRlbnRpY2FsIHdpdGggYSB2ZXJzaW9uIG1hcHBlZCBmcm9tIHRoZSBmaWxlLgorICAgKi8KKyAgQU5EUk9JRF9ETEVYVF9VU0VfUkVMUk8gICAgICAgICAgICAgPSAweDgsCisKKyAgLyogSW5zdHJ1Y3QgZGxvcGVuIHRvIHVzZSBsaWJyYXJ5X2ZkIGluc3RlYWQgb2Ygb3BlbmluZyBmaWxlIGJ5IG5hbWUuCisgICAqIFRoZSBmaWxlbmFtZSBwYXJhbWV0ZXIgaXMgc3RpbGwgdXNlZCB0byBpZGVudGlmeSB0aGUgbGlicmFyeS4KKyAgICovCisgIEFORFJPSURfRExFWFRfVVNFX0xJQlJBUllfRkQgICAgICAgID0gMHgxMCwKKworICAvKiBNYXNrIG9mIHZhbGlkIGJpdHMgKi8KKyAgQU5EUk9JRF9ETEVYVF9WQUxJRF9GTEFHX0JJVFMgICAgICAgPSBBTkRST0lEX0RMRVhUX1JFU0VSVkVEX0FERFJFU1MgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORFJPSURfRExFWFRfUkVTRVJWRURfQUREUkVTU19ISU5UIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkRST0lEX0RMRVhUX1dSSVRFX1JFTFJPIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkRST0lEX0RMRVhUX1VTRV9SRUxSTyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EUk9JRF9ETEVYVF9VU0VfTElCUkFSWV9GRCwKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDY0X3QgZmxhZ3M7CisgIHZvaWQqICAgcmVzZXJ2ZWRfYWRkcjsKKyAgc2l6ZV90ICByZXNlcnZlZF9zaXplOworICBpbnQgICAgIHJlbHJvX2ZkOworICBpbnQgICAgIGxpYnJhcnlfZmQ7Cit9IGFuZHJvaWRfZGxleHRpbmZvOworCitleHRlcm4gdm9pZCogYW5kcm9pZF9kbG9wZW5fZXh0KGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgZmxhZywgY29uc3QgYW5kcm9pZF9kbGV4dGluZm8qIGV4dGluZm8pOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX19BTkRST0lEX0RMRVhUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2FuZHJvaWQvc2V0X2Fib3J0X21lc3NhZ2UuaCBiL2xpYmMvaW5jbHVkZS9hbmRyb2lkL3NldF9hYm9ydF9tZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzZDgyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9hbmRyb2lkL3NldF9hYm9ydF9tZXNzYWdlLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9TRVRfQUJPUlRfTUVTU0FHRV9ICisjZGVmaW5lIF9TRVRfQUJPUlRfTUVTU0FHRV9ICisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCit2b2lkIGFuZHJvaWRfc2V0X2Fib3J0X21lc3NhZ2UoY29uc3QgY2hhciogbXNnKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8vIF9TRVRfQUJPUlRfTUVTU0FHRV9ICmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvYXJwYS9pbmV0LmggYi9saWJjL2luY2x1ZGUvYXJwYS9pbmV0LmgKaW5kZXggYjAwODgxMi4uMDY3YmUxZiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2FycGEvaW5ldC5oCisrKyBiL2xpYmMvaW5jbHVkZS9hcnBhL2luZXQuaApAQCAtMzYsMTkgKzM2LDE4IEBACiAKIHR5cGVkZWYgdWludDMyX3QgaW5fYWRkcl90OwogCi1leHRlcm4gdWludDMyX3QgICAgICBpbmV0X2FkZHIoY29uc3QgY2hhciAqKTsKLQotZXh0ZXJuIGludCAgICAgICAgICAgaW5ldF9hdG9uKGNvbnN0IGNoYXIgKiwgc3RydWN0IGluX2FkZHIgKik7Ci1leHRlcm4gY2hhciogICAgICAgICBpbmV0X250b2Eoc3RydWN0IGluX2FkZHIpOwotCi1leHRlcm4gaW50ICAgICAgICAgICBpbmV0X3B0b24oaW50LCBjb25zdCBjaGFyICosIHZvaWQgKik7Ci1leHRlcm4gY29uc3QgY2hhciogICBpbmV0X250b3AoaW50LCBjb25zdCB2b2lkICosIGNoYXIgKiwgc29ja2xlbl90KTsKLQotZXh0ZXJuIHVuc2lnbmVkIGludCAgaW5ldF9uc2FwX2FkZHIoY29uc3QgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7Ci1leHRlcm4gY2hhciogICAgICAgICBpbmV0X25zYXBfbnRvYShpbnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgY2hhciAqKTsKK2luX2FkZHJfdCBpbmV0X2FkZHIoY29uc3QgY2hhciopOworaW50IGluZXRfYXRvbihjb25zdCBjaGFyKiwgc3RydWN0IGluX2FkZHIqKTsKK2luX2FkZHJfdCBpbmV0X2xuYW9mKHN0cnVjdCBpbl9hZGRyKTsKK3N0cnVjdCBpbl9hZGRyIGluZXRfbWFrZWFkZHIoaW5fYWRkcl90LCBpbl9hZGRyX3QpOworaW5fYWRkcl90IGluZXRfbmV0b2Yoc3RydWN0IGluX2FkZHIpOworaW5fYWRkcl90IGluZXRfbmV0d29yayhjb25zdCBjaGFyKik7CitjaGFyKiBpbmV0X250b2Eoc3RydWN0IGluX2FkZHIpOworY29uc3QgY2hhciogaW5ldF9udG9wKGludCwgY29uc3Qgdm9pZCosIGNoYXIqLCBzb2NrbGVuX3QpOwordW5zaWduZWQgaW50IGluZXRfbnNhcF9hZGRyKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBjaGFyKiwgaW50KTsKK2NoYXIqIGluZXRfbnNhcF9udG9hKGludCwgY29uc3QgdW5zaWduZWQgY2hhciosIGNoYXIqKTsKK2ludCBpbmV0X3B0b24oaW50LCBjb25zdCBjaGFyKiwgdm9pZCopOwogCiBfX0VORF9ERUNMUwogCiAjZW5kaWYgLyogX0FSUEFfSU5FVF9IXyAqLwotCi0KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9hcnBhL25hbWVzZXIuaCBiL2xpYmMvaW5jbHVkZS9hcnBhL25hbWVzZXIuaAppbmRleCAwMjhlYWRjLi5hODdhYzkxIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvYXJwYS9uYW1lc2VyLmgKKysrIGIvbGliYy9pbmNsdWRlL2FycGEvbmFtZXNlci5oCkBAIC0xLDQxICsxLDY2OCBAQAorLyoJJE5ldEJTRDogbmFtZXNlci5oLHYgMS4yNSAyMDA5LzA0LzEyIDE3OjA3OjM0IGNocmlzdG9zIEV4cCAkCSovCisKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwOCwgMjAwOSAgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzICBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICisgKiBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQorICogTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKKyAqIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk4OSwgMTk5MworICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KICAqLwotI2lmbmRlZiBfYXJwYV9uYW1lc2VyX2gKLSNkZWZpbmUgX2FycGFfbmFtZXNlcl9oCisKKy8qCisgKglJZDogbmFtZXNlci5oLHYgMS4xNiAyMDA5LzAzLzAzIDAxOjUyOjQ4IGVhY2ggRXhwCisgKi8KKworI2lmbmRlZiBfQVJQQV9OQU1FU0VSX0hfCisjZGVmaW5lIF9BUlBBX05BTUVTRVJfSF8KKworI2RlZmluZSBCSU5EXzRfQ09NUEFUCiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KIAotLyogdGhpcyBoZWFkZXIgaW50ZW50aW9uYWxseSBibGFuawotICoKLSAqIHRoZSBkZWZpbml0aW9ucyBub3JtYWxseSBmb3VuZCBpbiA8YXJwYS9uYW1lc2VyLmg+IGFyZQotICogcmVhbGx5IGEgYnVuY2ggb2YgcmVzb2x2ZXIncyBpbnRlcm5hbCBkZWNsYXJhdGlvbnMgdGhhdAotICogc2hvdWxkIG5vdCBiZSBleHBvc2VkIHRvIGNsaWVudCBjb2RlIGluIGFueSB3YXkKKy8qCisgKiBSZXZpc2lvbiBpbmZvcm1hdGlvbi4gIFRoaXMgaXMgdGhlIHJlbGVhc2UgZGF0ZSBpbiBZWVlZTU1ERCBmb3JtYXQuCisgKiBJdCBjYW4gY2hhbmdlIGV2ZXJ5IGRheSBzbyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gd2l0aCBpdCBpcyB1c2UgaXQKKyAqIGluIHByZXByb2Nlc3NvciBjb21tYW5kcyBzdWNoIGFzICIjaWYgKF9fTkFNRVNFUiA+IDE5OTMxMTA0KSIuICBEbyBub3QKKyAqIGNvbXBhcmUgZm9yIGVxdWFsaXR5OyByYXRoZXIsIHVzZSBpdCB0byBkZXRlcm1pbmUgd2hldGhlciB5b3VyIGxpYmJpbmQuYQorICogY29udGFpbnMgYSBuZXcgZW5vdWdoIGxpYi9uYW1lc2VyLyB0byBzdXBwb3J0IHRoZSBmZWF0dXJlIHlvdSBuZWVkLgogICovCiAKLSNlbmRpZiAvKiBfYXJwYV9uYW1lc2VyX2ggKi8KKyNkZWZpbmUgX19OQU1FU0VSCTIwMDkwMzAyCS8qJTwgTmV3IGludGVyZmFjZSB2ZXJzaW9uIHN0YW1wLiAqLworCisvKgorICogRGVmaW5lIGNvbnN0YW50cyBiYXNlZCBvbiBSRkMwODgzLCBSRkMxMDM0LCBSRkMgMTAzNQorICovCisjZGVmaW5lIE5TX1BBQ0tFVFNaCTUxMgkvKiBkZWZhdWx0IFVEUCBwYWNrZXQgc2l6ZSAqLworI2RlZmluZSBOU19NQVhETkFNRQkxMDI1CS8qIG1heGltdW0gZG9tYWluIG5hbWUgKHByZXNlbnRhdGlvbiBmb3JtYXQpKi8KKyNkZWZpbmUgTlNfTUFYTVNHCTY1NTM1CS8qIG1heGltdW0gbWVzc2FnZSBzaXplICovCisjZGVmaW5lIE5TX01BWENETkFNRQkyNTUJLyogbWF4aW11bSBjb21wcmVzc2VkIGRvbWFpbiBuYW1lICovCisjZGVmaW5lIE5TX01BWExBQkVMCTYzCS8qIG1heGltdW0gbGVuZ3RoIG9mIGRvbWFpbiBsYWJlbCAqLworI2RlZmluZSBOU19NQVhMQUJFTFMJMTI4CS8qIHRoZW9yZXRpY2FsIG1heCAjL2xhYmVscyBwZXIgZG9tYWluIG5hbWUgKi8KKyNkZWZpbmUgTlNfTUFYTk5BTUUJMjU2CS8qIG1heGltdW0gdW5jb21wcmVzc2VkIChiaW5hcnkpIGRvbWFpbiBuYW1lKi8KKyNkZWZpbmUJTlNfTUFYUEFERFIJKHNpemVvZiAiZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmIikKKyNkZWZpbmUgTlNfSEZJWEVEU1oJMTIJLyogIy9ieXRlcyBvZiBmaXhlZCBkYXRhIGluIGhlYWRlciAqLworI2RlZmluZSBOU19RRklYRURTWgk0CS8qICMvYnl0ZXMgb2YgZml4ZWQgZGF0YSBpbiBxdWVyeSAqLworI2RlZmluZSBOU19SUkZJWEVEU1oJMTAJLyogIy9ieXRlcyBvZiBmaXhlZCBkYXRhIGluIHIgcmVjb3JkICovCisjZGVmaW5lIE5TX0lOVDMyU1oJNAkvKiAjL2J5dGVzIG9mIGRhdGEgaW4gYSB1aW50MzJfdCAqLworI2RlZmluZSBOU19JTlQxNlNaCTIJLyogIy9ieXRlcyBvZiBkYXRhIGluIGEgdWludDE2X3QgKi8KKyNkZWZpbmUgTlNfSU5UOFNaCTEJLyogIy9ieXRlcyBvZiBkYXRhIGluIGEgdWludDhfdCAqLworI2RlZmluZSBOU19JTkFERFJTWgk0CS8qIElQdjQgVF9BICovCisjZGVmaW5lIE5TX0lONkFERFJTWgkxNgkvKiBJUHY2IFRfQUFBQSAqLworI2RlZmluZSBOU19DTVBSU0ZMR1MJMHhjMAkvKiBGbGFnIGJpdHMgaW5kaWNhdGluZyBuYW1lIGNvbXByZXNzaW9uLiAqLworI2RlZmluZSBOU19ERUZBVUxUUE9SVAk1MwkvKiBGb3IgYm90aCBUQ1AgYW5kIFVEUC4gKi8KKworLyoKKyAqIFRoZXNlIGNhbiBiZSBleHBhbmRlZCB3aXRoIHN5bm9ueW1zLCBqdXN0IGtlZXAgbnNfcGFyc2UuYzpuc19wYXJzZXJlY29yZCgpCisgKiBpbiBzeW5jaCB3aXRoIGl0LgorICovCit0eXBlZGVmIGVudW0gX19uc19zZWN0IHsKKwluc19zX3FkID0gMCwJCS8qIFF1ZXJ5OiBRdWVzdGlvbi4gKi8KKwluc19zX3puID0gMCwJCS8qIFVwZGF0ZTogWm9uZS4gKi8KKwluc19zX2FuID0gMSwJCS8qIFF1ZXJ5OiBBbnN3ZXIuICovCisJbnNfc19wciA9IDEsCQkvKiBVcGRhdGU6IFByZXJlcXVpc2l0ZXMuICovCisJbnNfc19ucyA9IDIsCQkvKiBRdWVyeTogTmFtZSBzZXJ2ZXJzLiAqLworCW5zX3NfdWQgPSAyLAkJLyogVXBkYXRlOiBVcGRhdGUuICovCisJbnNfc19hciA9IDMsCQkvKiBRdWVyeXxVcGRhdGU6IEFkZGl0aW9uYWwgcmVjb3Jkcy4gKi8KKwluc19zX21heCA9IDQKK30gbnNfc2VjdDsKKworLyoKKyAqIE5ldHdvcmsgbmFtZSAoY29tcHJlc3NlZCBvciBub3QpIHR5cGUuICBFcXVpdmlsZW50IHRvIGEgcG9pbnRlciB3aGVuIHVzZWQKKyAqIGluIGEgZnVuY3Rpb24gcHJvdG90eXBlLiAgQ2FuIGJlIGNvbnN0J2QuCisgKi8KK3R5cGVkZWYgdV9jaGFyIG5zX25uYW1lW05TX01BWE5OQU1FXTsKK3R5cGVkZWYgY29uc3QgdV9jaGFyICpuc19ubmFtZV9jdDsKK3R5cGVkZWYgdV9jaGFyICpuc19ubmFtZV90OworCitzdHJ1Y3QgbnNfbmFtZW1hcCB7IG5zX25uYW1lX2N0IGJhc2U7IGludCBsZW47IH07Cit0eXBlZGVmIHN0cnVjdCBuc19uYW1lbWFwICpuc19uYW1lbWFwX3Q7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBuc19uYW1lbWFwICpuc19uYW1lbWFwX2N0OworCisvKgorICogVGhpcyBpcyBhIG1lc3NhZ2UgaGFuZGxlLiAgSXQgaXMgY2FsbGVyIGFsbG9jYXRlZCBhbmQgaGFzIG5vIGR5bmFtaWMgZGF0YS4KKyAqIFRoaXMgc3RydWN0dXJlIGlzIGludGVuZGVkIHRvIGJlIG9wYXF1ZSB0byBhbGwgYnV0IG5zX3BhcnNlLmMsIHRodXMgdGhlCisgKiBsZWFkaW5nIF8ncyBvbiB0aGUgbWVtYmVyIG5hbWVzLiAgVXNlIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMsIG5vdCB0aGUgXydzLgorICovCit0eXBlZGVmIHN0cnVjdCBfX25zX21zZyB7CisJY29uc3QgdV9jaGFyCSpfbXNnLCAqX2VvbTsKKwl1aW50MTZfdAlfaWQsIF9mbGFncywgX2NvdW50c1tuc19zX21heF07CisJY29uc3QgdV9jaGFyCSpfc2VjdGlvbnNbbnNfc19tYXhdOworCW5zX3NlY3QJCV9zZWN0OworCWludAkJX3JybnVtOworCWNvbnN0IHVfY2hhcgkqX21zZ19wdHI7Cit9IG5zX21zZzsKKy8qCisgKiBUaGlzIGlzIGEgbmV3bXNnIGhhbmRsZSwgdXNlZCB3aGVuIGNvbnN0cnVjdGluZyBuZXcgbWVzc2FnZXMgd2l0aAorICogbnNfbmV3bXNnX2luaXQsIGV0IGFsLgorICovCitzdHJ1Y3QgbnNfbmV3bXNnIHsKKwluc19tc2cJCW1zZzsKKwljb25zdCB1X2NoYXIJKmRucHRyc1syNV07CisJY29uc3QgdV9jaGFyCSoqbGFzdGRucHRyOworfTsKK3R5cGVkZWYgc3RydWN0IG5zX25ld21zZyBuc19uZXdtc2c7CisKKy8qIFByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgLSBkbyBub3QgdXNlIGZyb20gb3V0c2lkZSBsaWJyYXJ5LiAqLworc3RydWN0IF9uc19mbGFnZGF0YSB7ICBpbnQgbWFzaywgc2hpZnQ7ICB9OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBfbnNfZmxhZ2RhdGEgX25zX2ZsYWdkYXRhW107CisKKy8qIEFjY2Vzc29yIG1hY3JvcyAtIHRoaXMgaXMgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gKi8KKworI2RlZmluZSBuc19tc2dfaWQoaGFuZGxlKSAoKGhhbmRsZSkuX2lkICsgMCkKKyNkZWZpbmUgbnNfbXNnX2Jhc2UoaGFuZGxlKSAoKGhhbmRsZSkuX21zZyArIDApCisjZGVmaW5lIG5zX21zZ19lbmQoaGFuZGxlKSAoKGhhbmRsZSkuX2VvbSArIDApCisjZGVmaW5lIG5zX21zZ19zaXplKGhhbmRsZSkgKChzaXplX3QpKChoYW5kbGUpLl9lb20gLSAoaGFuZGxlKS5fbXNnKSkKKyNkZWZpbmUgbnNfbXNnX2NvdW50KGhhbmRsZSwgc2VjdGlvbikgKChoYW5kbGUpLl9jb3VudHNbc2VjdGlvbl0gKyAwKQorCisvKgorICogVGhpcyBpcyBhIHBhcnNlZCByZWNvcmQuICBJdCBpcyBjYWxsZXIgYWxsb2NhdGVkIGFuZCBoYXMgbm8gZHluYW1pYyBkYXRhLgorICovCit0eXBlZGVmCXN0cnVjdCBfX25zX3JyIHsKKwljaGFyCQluYW1lW05TX01BWEROQU1FXTsKKwl1aW50MTZfdAl0eXBlOworCXVpbnQxNl90CXJyX2NsYXNzOworCXVpbnQzMl90CXR0bDsKKwl1aW50MTZfdAlyZGxlbmd0aDsKKwljb25zdCB1X2NoYXIgKglyZGF0YTsKK30gbnNfcnI7CisKKy8qCisgKiBTYW1lIHRoaW5nLCBidXQgdXNpbmcgdW5jb21wcmVzc2VkIG5ldHdvcmsgYmluYXJ5IG5hbWVzLCBhbmQgcmVhbCBDIHR5cGVzLgorICovCit0eXBlZGVmCXN0cnVjdCBfX25zX3JyMiB7CisJbnNfbm5hbWUJbm5hbWU7CisJc2l6ZV90CQlubmFtZWw7CisJaW50CQl0eXBlOworCWludAkJcnJfY2xhc3M7CisJdV9pbnQJCXR0bDsKKwlpbnQJCXJkbGVuZ3RoOworCWNvbnN0IHVfY2hhciAqCXJkYXRhOworfSBuc19ycjI7CisvKiBBY2Nlc3NvciBtYWNyb3MgLSB0aGlzIGlzIHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuICovCisjZGVmaW5lIG5zX3JyX25hbWUocnIpCSgoKHJyKS5uYW1lWzBdICE9ICdcMCcpID8gKHJyKS5uYW1lIDogIi4iKQorI2RlZmluZSBuc19ycl9ubmFtZShycikJKChjb25zdCBuc19ubmFtZV90KShycikubm5hbWUpCisjZGVmaW5lIG5zX3JyX25uYW1lbChycikgKChycikubm5hbWVsICsgMCkKKyNkZWZpbmUgbnNfcnJfdHlwZShycikJKChuc190eXBlKSgocnIpLnR5cGUgKyAwKSkKKyNkZWZpbmUgbnNfcnJfY2xhc3MocnIpCSgobnNfY2xhc3MpKChycikucnJfY2xhc3MgKyAwKSkKKyNkZWZpbmUgbnNfcnJfdHRsKHJyKQkoKHVfbG9uZykocnIpLnR0bCArIDApCisjZGVmaW5lIG5zX3JyX3JkbGVuKHJyKQkoKHNpemVfdCkocnIpLnJkbGVuZ3RoICsgMCkKKyNkZWZpbmUgbnNfcnJfcmRhdGEocnIpCSgocnIpLnJkYXRhICsgMCkKKworLyoKKyAqIFRoZXNlIGRvbid0IGhhdmUgdG8gYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgaW4gdGhlIHBhY2tldCBmbGFncyB3b3JkLAorICogYW5kIHRoZXkgY2FuIGV2ZW4gb3ZlcmxhcCBpbiBzb21lIGNhc2VzLCBidXQgdGhleSB3aWxsIG5lZWQgdG8gYmUga2VwdAorICogaW4gc3luY2ggd2l0aCBuc19wYXJzZS5jOm5zX2ZsYWdkYXRhW10uCisgKi8KK3R5cGVkZWYgZW51bSBfX25zX2ZsYWcgeworCW5zX2ZfcXIsCQkvKiBRdWVzdGlvbi9SZXNwb25zZS4gKi8KKwluc19mX29wY29kZSwJCS8qIE9wZXJhdGlvbiBjb2RlLiAqLworCW5zX2ZfYWEsCQkvKiBBdXRob3JpdGF0aXZlIEFuc3dlci4gKi8KKwluc19mX3RjLAkJLyogVHJ1bmNhdGlvbiBvY2N1cnJlZC4gKi8KKwluc19mX3JkLAkJLyogUmVjdXJzaW9uIERlc2lyZWQuICovCisJbnNfZl9yYSwJCS8qIFJlY3Vyc2lvbiBBdmFpbGFibGUuICovCisJbnNfZl96LAkJCS8qIE1CWi4gKi8KKwluc19mX2FkLAkJLyogQXV0aGVudGljIERhdGEgKEROU1NFQykuICovCisJbnNfZl9jZCwJCS8qIENoZWNraW5nIERpc2FibGVkIChETlNTRUMpLiAqLworCW5zX2ZfcmNvZGUsCQkvKiBSZXNwb25zZSBjb2RlLiAqLworCW5zX2ZfbWF4Cit9IG5zX2ZsYWc7CisKKy8qCisgKiBDdXJyZW50bHkgZGVmaW5lZCBvcGNvZGVzLgorICovCit0eXBlZGVmIGVudW0gX19uc19vcGNvZGUgeworCW5zX29fcXVlcnkgPSAwLAkJLyogU3RhbmRhcmQgcXVlcnkuICovCisJbnNfb19pcXVlcnkgPSAxLAkvKiBJbnZlcnNlIHF1ZXJ5IChkZXByZWNhdGVkL3Vuc3VwcG9ydGVkKS4gKi8KKwluc19vX3N0YXR1cyA9IDIsCS8qIE5hbWUgc2VydmVyIHN0YXR1cyBxdWVyeSAodW5zdXBwb3J0ZWQpLiAqLworCQkJCS8qIE9wY29kZSAzIGlzIHVuZGVmaW5lZC9yZXNlcnZlZC4gKi8KKwluc19vX25vdGlmeSA9IDQsCS8qIFpvbmUgY2hhbmdlIG5vdGlmaWNhdGlvbi4gKi8KKwluc19vX3VwZGF0ZSA9IDUsCS8qIFpvbmUgdXBkYXRlIG1lc3NhZ2UuICovCisJbnNfb19tYXggPSA2Cit9IG5zX29wY29kZTsKKworLyoKKyAqIEN1cnJlbnRseSBkZWZpbmVkIHJlc3BvbnNlIGNvZGVzLgorICovCit0eXBlZGVmCWVudW0gX19uc19yY29kZSB7CisJbnNfcl9ub2Vycm9yID0gMCwJLyogTm8gZXJyb3Igb2NjdXJyZWQuICovCisJbnNfcl9mb3JtZXJyID0gMSwJLyogRm9ybWF0IGVycm9yLiAqLworCW5zX3Jfc2VydmZhaWwgPSAyLAkvKiBTZXJ2ZXIgZmFpbHVyZS4gKi8KKwluc19yX254ZG9tYWluID0gMywJLyogTmFtZSBlcnJvci4gKi8KKwluc19yX25vdGltcGwgPSA0LAkvKiBVbmltcGxlbWVudGVkLiAqLworCW5zX3JfcmVmdXNlZCA9IDUsCS8qIE9wZXJhdGlvbiByZWZ1c2VkLiAqLworCS8qIHRoZXNlIGFyZSBmb3IgQklORF9VUERBVEUgKi8KKwluc19yX3l4ZG9tYWluID0gNiwJLyogTmFtZSBleGlzdHMgKi8KKwluc19yX3l4cnJzZXQgPSA3LAkvKiBSUnNldCBleGlzdHMgKi8KKwluc19yX254cnJzZXQgPSA4LAkvKiBSUnNldCBkb2VzIG5vdCBleGlzdCAqLworCW5zX3Jfbm90YXV0aCA9IDksCS8qIE5vdCBhdXRob3JpdGF0aXZlIGZvciB6b25lICovCisJbnNfcl9ub3R6b25lID0gMTAsCS8qIFpvbmUgb2YgcmVjb3JkIGRpZmZlcmVudCBmcm9tIHpvbmUgc2VjdGlvbiAqLworCW5zX3JfbWF4ID0gMTEsCisJLyogVGhlIGZvbGxvd2luZyBhcmUgRUROUyBleHRlbmRlZCByY29kZXMgKi8KKwluc19yX2JhZHZlcnMgPSAxNiwKKwkvKiBUaGUgZm9sbG93aW5nIGFyZSBUU0lHIGVycm9ycyAqLworCW5zX3JfYmFkc2lnID0gMTYsCisJbnNfcl9iYWRrZXkgPSAxNywKKwluc19yX2JhZHRpbWUgPSAxOAorfSBuc19yY29kZTsKKworLyogQklORF9VUERBVEUgKi8KK3R5cGVkZWYgZW51bSBfX25zX3VwZGF0ZV9vcGVyYXRpb24geworCW5zX3VvcF9kZWxldGUgPSAwLAorCW5zX3VvcF9hZGQgPSAxLAorCW5zX3VvcF9tYXggPSAyCit9IG5zX3VwZGF0ZV9vcGVyYXRpb247CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciBUU0lHIGF1dGhlbnRpY2F0ZWQgbWVzc2FnZXMKKyAqLworc3RydWN0IG5zX3RzaWdfa2V5IHsKKyAgICAgICAgY2hhciBuYW1lW05TX01BWEROQU1FXSwgYWxnW05TX01BWEROQU1FXTsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICAgICAgaW50IGxlbjsKK307Cit0eXBlZGVmIHN0cnVjdCBuc190c2lnX2tleSBuc190c2lnX2tleTsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIFRTSUcgYXV0aGVudGljYXRlZCBUQ1AgbWVzc2FnZXMKKyAqLworc3RydWN0IG5zX3RjcF90c2lnX3N0YXRlIHsKKwlpbnQgY291bnRlcjsKKwlzdHJ1Y3QgZHN0X2tleSAqa2V5OworCXZvaWQgKmN0eDsKKwl1bnNpZ25lZCBjaGFyIHNpZ1tOU19QQUNLRVRTWl07CisJaW50IHNpZ2xlbjsKK307Cit0eXBlZGVmIHN0cnVjdCBuc190Y3BfdHNpZ19zdGF0ZSBuc190Y3BfdHNpZ19zdGF0ZTsKKworI2RlZmluZSBOU19UU0lHX0ZVREdFIDMwMAorI2RlZmluZSBOU19UU0lHX1RDUF9DT1VOVCAxMDAKKyNkZWZpbmUgTlNfVFNJR19BTEdfSE1BQ19NRDUgIkhNQUMtTUQ1LlNJRy1BTEcuUkVHLklOVCIKKworI2RlZmluZSBOU19UU0lHX0VSUk9SX05PX1RTSUcgLTEwCisjZGVmaW5lIE5TX1RTSUdfRVJST1JfTk9fU1BBQ0UgLTExCisjZGVmaW5lIE5TX1RTSUdfRVJST1JfRk9STUVSUiAtMTIKKworLyoKKyAqIEN1cnJlbnRseSBkZWZpbmVkIHR5cGUgdmFsdWVzIGZvciByZXNvdXJjZXMgYW5kIHF1ZXJpZXMuCisgKi8KK3R5cGVkZWYgZW51bSBfX25zX3R5cGUgeworCW5zX3RfaW52YWxpZCA9IDAsCS8qIENvb2tpZS4gKi8KKwluc190X2EgPSAxLAkJLyogSG9zdCBhZGRyZXNzLiAqLworCW5zX3RfbnMgPSAyLAkJLyogQXV0aG9yaXRhdGl2ZSBzZXJ2ZXIuICovCisJbnNfdF9tZCA9IDMsCQkvKiBNYWlsIGRlc3RpbmF0aW9uLiAqLworCW5zX3RfbWYgPSA0LAkJLyogTWFpbCBmb3J3YXJkZXIuICovCisJbnNfdF9jbmFtZSA9IDUsCQkvKiBDYW5vbmljYWwgbmFtZS4gKi8KKwluc190X3NvYSA9IDYsCQkvKiBTdGFydCBvZiBhdXRob3JpdHkgem9uZS4gKi8KKwluc190X21iID0gNywJCS8qIE1haWxib3ggZG9tYWluIG5hbWUuICovCisJbnNfdF9tZyA9IDgsCQkvKiBNYWlsIGdyb3VwIG1lbWJlci4gKi8KKwluc190X21yID0gOSwJCS8qIE1haWwgcmVuYW1lIG5hbWUuICovCisJbnNfdF9udWxsID0gMTAsCQkvKiBOdWxsIHJlc291cmNlIHJlY29yZC4gKi8KKwluc190X3drcyA9IDExLAkJLyogV2VsbCBrbm93biBzZXJ2aWNlLiAqLworCW5zX3RfcHRyID0gMTIsCQkvKiBEb21haW4gbmFtZSBwb2ludGVyLiAqLworCW5zX3RfaGluZm8gPSAxMywJLyogSG9zdCBpbmZvcm1hdGlvbi4gKi8KKwluc190X21pbmZvID0gMTQsCS8qIE1haWxib3ggaW5mb3JtYXRpb24uICovCisJbnNfdF9teCA9IDE1LAkJLyogTWFpbCByb3V0aW5nIGluZm9ybWF0aW9uLiAqLworCW5zX3RfdHh0ID0gMTYsCQkvKiBUZXh0IHN0cmluZ3MuICovCisJbnNfdF9ycCA9IDE3LAkJLyogUmVzcG9uc2libGUgcGVyc29uLiAqLworCW5zX3RfYWZzZGIgPSAxOCwJLyogQUZTIGNlbGwgZGF0YWJhc2UuICovCisJbnNfdF94MjUgPSAxOSwJCS8qIFhfMjUgY2FsbGluZyBhZGRyZXNzLiAqLworCW5zX3RfaXNkbiA9IDIwLAkJLyogSVNETiBjYWxsaW5nIGFkZHJlc3MuICovCisJbnNfdF9ydCA9IDIxLAkJLyogUm91dGVyLiAqLworCW5zX3RfbnNhcCA9IDIyLAkJLyogTlNBUCBhZGRyZXNzLiAqLworCW5zX3RfbnNhcF9wdHIgPSAyMywJLyogUmV2ZXJzZSBOU0FQIGxvb2t1cCAoZGVwcmVjYXRlZCkuICovCisJbnNfdF9zaWcgPSAyNCwJCS8qIFNlY3VyaXR5IHNpZ25hdHVyZS4gKi8KKwluc190X2tleSA9IDI1LAkJLyogU2VjdXJpdHkga2V5LiAqLworCW5zX3RfcHggPSAyNiwJCS8qIFguNDAwIG1haWwgbWFwcGluZy4gKi8KKwluc190X2dwb3MgPSAyNywJCS8qIEdlb2dyYXBoaWNhbCBwb3NpdGlvbiAod2l0aGRyYXduKS4gKi8KKwluc190X2FhYWEgPSAyOCwJCS8qIElQdjYgQWRkcmVzcy4gKi8KKwluc190X2xvYyA9IDI5LAkJLyogTG9jYXRpb24gSW5mb3JtYXRpb24uICovCisJbnNfdF9ueHQgPSAzMCwJCS8qIE5leHQgZG9tYWluIChzZWN1cml0eSkuICovCisJbnNfdF9laWQgPSAzMSwJCS8qIEVuZHBvaW50IGlkZW50aWZpZXIuICovCisJbnNfdF9uaW1sb2MgPSAzMiwJLyogTmltcm9kIExvY2F0b3IuICovCisJbnNfdF9zcnYgPSAzMywJCS8qIFNlcnZlciBTZWxlY3Rpb24uICovCisJbnNfdF9hdG1hID0gMzQsCQkvKiBBVE0gQWRkcmVzcyAqLworCW5zX3RfbmFwdHIgPSAzNSwJLyogTmFtaW5nIEF1dGhvcml0eSBQb2luVGVSICovCisJbnNfdF9reCA9IDM2LAkJLyogS2V5IEV4Y2hhbmdlICovCisJbnNfdF9jZXJ0ID0gMzcsCQkvKiBDZXJ0aWZpY2F0aW9uIHJlY29yZCAqLworCW5zX3RfYTYgPSAzOCwJCS8qIElQdjYgYWRkcmVzcyAoZXhwZXJpbWVudGFsKSAqLworCW5zX3RfZG5hbWUgPSAzOSwJLyogTm9uLXRlcm1pbmFsIEROQU1FICovCisJbnNfdF9zaW5rID0gNDAsCQkvKiBLaXRjaGVuIHNpbmsgKGV4cGVyaW1lbnRhdGwpICovCisJbnNfdF9vcHQgPSA0MSwJCS8qIEVETlMwIG9wdGlvbiAobWV0YS1SUikgKi8KKwluc190X2FwbCA9IDQyLAkJLyogQWRkcmVzcyBwcmVmaXggbGlzdCAoUkZDIDMxMjMpICovCisJbnNfdF9kcyA9IDQzLAkJLyogRGVsZWdhdGlvbiBTaWduZXIgKi8KKwluc190X3NzaGZwID0gNDQsCS8qIFNTSCBGaW5nZXJwcmludCAqLworCW5zX3RfaXBzZWNrZXkgPSA0NSwJLyogSVBTRUMgS2V5ICovCisJbnNfdF9ycnNpZyA9IDQ2LAkvKiBSUnNldCBTaWduYXR1cmUgKi8KKwluc190X25zZWMgPSA0NywJCS8qIE5lZ2F0aXZlIHNlY3VyaXR5ICovCisJbnNfdF9kbnNrZXkgPSA0OCwJLyogRE5TIEtleSAqLworCW5zX3RfZGhjaWQgPSA0OSwJLyogRHluYW1pYyBob3N0IGNvbmZpZ3VyYXRpbiBpZGVudGlmaWVyICovCisJbnNfdF9uc2VjMyA9IDUwLAkvKiBOZWdhdGl2ZSBzZWN1cml0eSB0eXBlIDMgKi8KKwluc190X25zZWMzcGFyYW0gPSA1MSwJLyogTmVnYXRpdmUgc2VjdXJpdHkgdHlwZSAzIHBhcmFtZXRlcnMgKi8KKwluc190X2hpcCA9IDU1LAkJLyogSG9zdCBJZGVudGl0eSBQcm90b2NvbCAqLworCW5zX3Rfc3BmID0gOTksCQkvKiBTZW5kZXIgUG9saWN5IEZyYW1ld29yayAqLworCW5zX3RfdGtleSA9IDI0OSwJLyogVHJhbnNhY3Rpb24ga2V5ICovCisJbnNfdF90c2lnID0gMjUwLAkvKiBUcmFuc2FjdGlvbiBzaWduYXR1cmUuICovCisJbnNfdF9peGZyID0gMjUxLAkvKiBJbmNyZW1lbnRhbCB6b25lIHRyYW5zZmVyLiAqLworCW5zX3RfYXhmciA9IDI1MiwJLyogVHJhbnNmZXIgem9uZSBvZiBhdXRob3JpdHkuICovCisJbnNfdF9tYWlsYiA9IDI1MywJLyogVHJhbnNmZXIgbWFpbGJveCByZWNvcmRzLiAqLworCW5zX3RfbWFpbGEgPSAyNTQsCS8qIFRyYW5zZmVyIG1haWwgYWdlbnQgcmVjb3Jkcy4gKi8KKwluc190X2FueSA9IDI1NSwJCS8qIFdpbGRjYXJkIG1hdGNoLiAqLworCW5zX3RfenhmciA9IDI1NiwJLyogQklORC1zcGVjaWZpYywgbm9uc3RhbmRhcmQuICovCisJbnNfdF9kbHYgPSAzMjc2OSwJLyogRE5TU0VDIGxvb2stYXNpZGUgdmFsaWRhdGF0aW9uLiAqLworCW5zX3RfbWF4ID0gNjU1MzYKK30gbnNfdHlwZTsKKworLyogRXhjbHVzaXZlbHkgYSBRVFlQRT8gKG5vdCBhbHNvIGFuIFJUWVBFKSAqLworI2RlZmluZQluc190X3F0X3AodCkgKG5zX3RfeGZyX3AodCkgfHwgKHQpID09IG5zX3RfYW55IHx8IFwKKwkJICAgICAgKHQpID09IG5zX3RfbWFpbGIgfHwgKHQpID09IG5zX3RfbWFpbGEpCisvKiBTb21lIGtpbmQgb2YgbWV0YS1SUj8gKG5vdCBhIFFUWVBFLCBidXQgYWxzbyBub3QgYW4gUlRZUEUpICovCisjZGVmaW5lCW5zX3RfbXJyX3AodCkgKCh0KSA9PSBuc190X3RzaWcgfHwgKHQpID09IG5zX3Rfb3B0KQorLyogRXhjbHVzaXZlbHkgYW4gUlRZUEU/IChub3QgYWxzbyBhIFFUWVBFIG9yIGEgbWV0YS1SUikgKi8KKyNkZWZpbmUgbnNfdF9ycl9wKHQpICghbnNfdF9xdF9wKHQpICYmICFuc190X21ycl9wKHQpKQorI2RlZmluZSBuc190X3VkcF9wKHQpICgodCkgIT0gbnNfdF9heGZyICYmICh0KSAhPSBuc190X3p4ZnIpCisjZGVmaW5lIG5zX3RfeGZyX3AodCkgKCh0KSA9PSBuc190X2F4ZnIgfHwgKHQpID09IG5zX3RfaXhmciB8fCBcCisJCSAgICAgICAodCkgPT0gbnNfdF96eGZyKQorCisvKgorICogVmFsdWVzIGZvciBjbGFzcyBmaWVsZAorICovCit0eXBlZGVmIGVudW0gX19uc19jbGFzcyB7CisJbnNfY19pbnZhbGlkID0gMCwJLyogQ29va2llLiAqLworCW5zX2NfaW4gPSAxLAkJLyogSW50ZXJuZXQuICovCisJbnNfY18yID0gMiwJCS8qIHVuYWxsb2NhdGVkL3Vuc3VwcG9ydGVkLiAqLworCW5zX2NfY2hhb3MgPSAzLAkJLyogTUlUIENoYW9zLW5ldC4gKi8KKwluc19jX2hzID0gNCwJCS8qIE1JVCBIZXNpb2QuICovCisJLyogUXVlcnkgY2xhc3MgdmFsdWVzIHdoaWNoIGRvIG5vdCBhcHBlYXIgaW4gcmVzb3VyY2UgcmVjb3JkcyAqLworCW5zX2Nfbm9uZSA9IDI1NCwJLyogZm9yIHByZXJlcS4gc2VjdGlvbnMgaW4gdXBkYXRlIHJlcXVlc3RzICovCisJbnNfY19hbnkgPSAyNTUsCQkvKiBXaWxkY2FyZCBtYXRjaC4gKi8KKwluc19jX21heCA9IDY1NTM2Cit9IG5zX2NsYXNzOworCisvKiBETlNTRUMgY29uc3RhbnRzLiAqLworCit0eXBlZGVmIGVudW0gX19uc19rZXlfdHlwZXMgeworCW5zX2t0X3JzYSA9IDEsCQkvKiBrZXkgdHlwZSBSU0EvTUQ1ICovCisJbnNfa3RfZGggID0gMiwJCS8qIERpZmZpZSBIZWxsbWFuICovCisJbnNfa3RfZHNhID0gMywJCS8qIERpZ2l0YWwgU2lnbmF0dXJlIFN0YW5kYXJkIChNQU5EQVRPUlkpICovCisJbnNfa3RfcHJpdmF0ZSA9IDI1NAkvKiBQcml2YXRlIGtleSB0eXBlIHN0YXJ0cyB3aXRoIE9JRCAqLworfSBuc19rZXlfdHlwZXM7CisKK3R5cGVkZWYgZW51bSBfX25zX2NlcnRfdHlwZXMgeworCWNlcnRfdF9wa2l4ID0gMSwJLyogUEtJWCAoWC41MDl2MykgKi8KKwljZXJ0X3Rfc3BraSA9IDIsCS8qIFNQS0kgKi8KKwljZXJ0X3RfcGdwICA9IDMsCS8qIFBHUCAqLworCWNlcnRfdF91cmwgID0gMjUzLAkvKiBVUkwgcHJpdmF0ZSB0eXBlICovCisJY2VydF90X29pZCAgPSAyNTQJLyogT0lEIHByaXZhdGUgdHlwZSAqLworfSBuc19jZXJ0X3R5cGVzOworCisvKiBGbGFncyBmaWVsZCBvZiB0aGUgS0VZIFJSIHJkYXRhLiAqLworI2RlZmluZQlOU19LRVlfVFlQRU1BU0sJCTB4QzAwMAkvKiBNYXNrIGZvciAidHlwZSIgYml0cyAqLworI2RlZmluZQlOU19LRVlfVFlQRV9BVVRIX0NPTkYJMHgwMDAwCS8qIEtleSB1c2FibGUgZm9yIGJvdGggKi8KKyNkZWZpbmUJTlNfS0VZX1RZUEVfQ09ORl9PTkxZCTB4ODAwMAkvKiBLZXkgdXNhYmxlIGZvciBjb25maWRlbnRpYWxpdHkgKi8KKyNkZWZpbmUJTlNfS0VZX1RZUEVfQVVUSF9PTkxZCTB4NDAwMAkvKiBLZXkgdXNhYmxlIGZvciBhdXRoZW50aWNhdGlvbiAqLworI2RlZmluZQlOU19LRVlfVFlQRV9OT19LRVkJMHhDMDAwCS8qIE5vIGtleSB1c2FibGUgZm9yIGVpdGhlcjsgbm8ga2V5ICovCisvKiBUaGUgdHlwZSBiaXRzIGNhbiBhbHNvIGJlIGludGVycHJldGVkIGluZGVwZW5kZW50bHksIGFzIHNpbmdsZSBiaXRzOiAqLworI2RlZmluZQlOU19LRVlfTk9fQVVUSAkJMHg4MDAwCS8qIEtleSB1bnVzYWJsZSBmb3IgYXV0aGVudGljYXRpb24gKi8KKyNkZWZpbmUJTlNfS0VZX05PX0NPTkYJCTB4NDAwMAkvKiBLZXkgdW51c2FibGUgZm9yIGNvbmZpZGVudGlhbGl0eSAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRUQyCTB4MjAwMAkvKiBTZWN1cml0eSBpcyAqbWFuZGF0b3J5KiBpZiBiaXQ9MCAqLworI2RlZmluZQlOU19LRVlfRVhURU5ERURfRkxBR1MJMHgxMDAwCS8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisjZGVmaW5lCU5TX0tFWV9SRVNFUlZFRDQJMHgwODAwICAvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRUQ1CTB4MDQwMCAgLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUJTlNfS0VZX05BTUVfVFlQRQkweDAzMDAJLyogdGhlc2UgYml0cyBkZXRlcm1pbmUgdGhlIHR5cGUgKi8KKyNkZWZpbmUJTlNfS0VZX05BTUVfVVNFUgkweDAwMDAJLyoga2V5IGlzIGFzc29jLiB3aXRoIHVzZXIgKi8KKyNkZWZpbmUJTlNfS0VZX05BTUVfRU5USVRZCTB4MDIwMAkvKiBrZXkgaXMgYXNzb2MuIHdpdGggZW50aXR5IGVnIGhvc3QgKi8KKyNkZWZpbmUJTlNfS0VZX05BTUVfWk9ORQkweDAxMDAJLyoga2V5IGlzIHpvbmUga2V5ICovCisjZGVmaW5lCU5TX0tFWV9OQU1FX1JFU0VSVkVECTB4MDMwMAkvKiByZXNlcnZlZCBtZWFuaW5nICovCisjZGVmaW5lCU5TX0tFWV9SRVNFUlZFRDgJMHgwMDgwICAvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRUQ5CTB4MDA0MCAgLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUJTlNfS0VZX1JFU0VSVkVEMTAJMHgwMDIwICAvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRUQxMQkweDAwMTAgIC8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisjZGVmaW5lCU5TX0tFWV9TSUdOQVRPUllNQVNLCTB4MDAwRgkvKiBrZXkgY2FuIHNpZ24gUlIncyBvZiBzYW1lIG5hbWUgKi8KKyNkZWZpbmUJTlNfS0VZX1JFU0VSVkVEX0JJVE1BU0sgKCBOU19LRVlfUkVTRVJWRUQyIHwgXAorCQkJCSAgTlNfS0VZX1JFU0VSVkVENCB8IFwKKwkJCQkgIE5TX0tFWV9SRVNFUlZFRDUgfCBcCisJCQkJICBOU19LRVlfUkVTRVJWRUQ4IHwgXAorCQkJCSAgTlNfS0VZX1JFU0VSVkVEOSB8IFwKKwkJCQkgIE5TX0tFWV9SRVNFUlZFRDEwIHwgXAorCQkJCSAgTlNfS0VZX1JFU0VSVkVEMTEgKQorI2RlZmluZSBOU19LRVlfUkVTRVJWRURfQklUTUFTSzIgMHhGRkZGIC8qIG5vIGJpdHMgZGVmaW5lZCBoZXJlICovCisKKy8qIFRoZSBBbGdvcml0aG0gZmllbGQgb2YgdGhlIEtFWSBhbmQgU0lHIFJSJ3MgaXMgYW4gaW50ZWdlciwgezEuLjI1NH0gKi8KKyNkZWZpbmUJTlNfQUxHX01ENVJTQQkJMQkvKiBNRDUgd2l0aCBSU0EgKi8KKyNkZWZpbmUJTlNfQUxHX0RIICAgICAgICAgICAgICAgMgkvKiBEaWZmaWUgSGVsbG1hbiBLRVkgKi8KKyNkZWZpbmUJTlNfQUxHX0RTQSAgICAgICAgICAgICAgMwkvKiBEU0EgS0VZICovCisjZGVmaW5lCU5TX0FMR19EU1MgICAgICAgICAgICAgIE5TX0FMR19EU0EKKyNkZWZpbmUJTlNfQUxHX0VYUElSRV9PTkxZCTI1MwkvKiBObyBhbGcsIG5vIHNlY3VyaXR5ICovCisjZGVmaW5lCU5TX0FMR19QUklWQVRFX09JRAkyNTQJLyogS2V5IGJlZ2lucyB3aXRoIE9JRCBnaXZpbmcgYWxnICovCisKKy8qIFByb3RvY29sIHZhbHVlcyAgKi8KKy8qIHZhbHVlIDAgaXMgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgTlNfS0VZX1BST1RfVExTICAgICAgICAgMQorI2RlZmluZSBOU19LRVlfUFJPVF9FTUFJTCAgICAgICAyCisjZGVmaW5lIE5TX0tFWV9QUk9UX0ROU1NFQyAgICAgIDMKKyNkZWZpbmUgTlNfS0VZX1BST1RfSVBTRUMgICAgICAgNAorI2RlZmluZSBOU19LRVlfUFJPVF9BTlkJCTI1NQorCisvKiBTaWduYXR1cmVzICovCisjZGVmaW5lCU5TX01ENVJTQV9NSU5fQklUUwkgNTEyCS8qIFNpemUgb2YgYSBtb2Qgb3IgZXhwIGluIGJpdHMgKi8KKyNkZWZpbmUJTlNfTUQ1UlNBX01BWF9CSVRTCTQwOTYKKwkvKiBUb3RhbCBvZiBiaW5hcnkgbW9kIGFuZCBleHAgKi8KKyNkZWZpbmUJTlNfTUQ1UlNBX01BWF9CWVRFUwkoKE5TX01ENVJTQV9NQVhfQklUUys3LzgpKjIrMykKKwkvKiBNYXggbGVuZ3RoIG9mIHRleHQgc2lnIGJsb2NrICovCisjZGVmaW5lCU5TX01ENVJTQV9NQVhfQkFTRTY0CSgoKE5TX01ENVJTQV9NQVhfQllURVMrMikvMykqNCkKKyNkZWZpbmUgTlNfTUQ1UlNBX01JTl9TSVpFCSgoTlNfTUQ1UlNBX01JTl9CSVRTKzcpLzgpCisjZGVmaW5lIE5TX01ENVJTQV9NQVhfU0laRQkoKE5TX01ENVJTQV9NQVhfQklUUys3KS84KQorCisjZGVmaW5lIE5TX0RTQV9TSUdfU0laRSAgICAgICAgIDQxCisjZGVmaW5lIE5TX0RTQV9NSU5fU0laRSAgICAgICAgIDIxMworI2RlZmluZSBOU19EU0FfTUFYX0JZVEVTICAgICAgICA0MDUKKworLyogT2Zmc2V0cyBpbnRvIFNJRyByZWNvcmQgcmRhdGEgdG8gZmluZCB2YXJpb3VzIHZhbHVlcyAqLworI2RlZmluZQlOU19TSUdfVFlQRQkwCS8qIFR5cGUgZmxhZ3MgKi8KKyNkZWZpbmUJTlNfU0lHX0FMRwkyCS8qIEFsZ29yaXRobSAqLworI2RlZmluZQlOU19TSUdfTEFCRUxTCTMJLyogSG93IG1hbnkgbGFiZWxzIGluIG5hbWUgKi8KKyNkZWZpbmUJTlNfU0lHX09UVEwJNAkvKiBPcmlnaW5hbCBUVEwgKi8KKyNkZWZpbmUJTlNfU0lHX0VYUElSCTgJLyogRXhwaXJhdGlvbiB0aW1lICovCisjZGVmaW5lCU5TX1NJR19TSUdORUQJMTIJLyogU2lnbmF0dXJlIHRpbWUgKi8KKyNkZWZpbmUJTlNfU0lHX0ZPT1QJMTYJLyogS2V5IGZvb3RwcmludCAqLworI2RlZmluZQlOU19TSUdfU0lHTkVSCTE4CS8qIERvbWFpbiBuYW1lIG9mIHdobyBzaWduZWQgaXQgKi8KKworLyogSG93IFJSIHR5cGVzIGFyZSByZXByZXNlbnRlZCBhcyBiaXQtZmxhZ3MgaW4gTlhUIHJlY29yZHMgKi8KKyNkZWZpbmUJTlNfTlhUX0JJVFMgOAorI2RlZmluZQlOU19OWFRfQklUX1NFVCggIG4scCkgKHBbKG4pL05TX05YVF9CSVRTXSB8PSAgKDB4ODA+PigobiklTlNfTlhUX0JJVFMpKSkKKyNkZWZpbmUJTlNfTlhUX0JJVF9DTEVBUihuLHApIChwWyhuKS9OU19OWFRfQklUU10gJj0gfigweDgwPj4oKG4pJU5TX05YVF9CSVRTKSkpCisjZGVmaW5lCU5TX05YVF9CSVRfSVNTRVQobixwKSAocFsobikvTlNfTlhUX0JJVFNdICYgICAoMHg4MD4+KChuKSVOU19OWFRfQklUUykpKQorI2RlZmluZSBOU19OWFRfTUFYIDEyNworCisvKgorICogRUROUzAgZXh0ZW5kZWQgZmxhZ3MgYW5kIG9wdGlvbiBjb2RlcywgaG9zdCBvcmRlci4KKyAqLworI2RlZmluZSBOU19PUFRfRE5TU0VDX09LCTB4ODAwMFUKKyNkZWZpbmUgTlNfT1BUX05TSUQgICAgICAgICAgICAgMworCisvKgorICogSW5saW5lIHZlcnNpb25zIG9mIGdldC9wdXQgc2hvcnQvbG9uZy4gIFBvaW50ZXIgaXMgYWR2YW5jZWQuCisgKi8KKyNkZWZpbmUgTlNfR0VUMTYocywgY3ApIGRvIHsgXAorCWNvbnN0IHVfY2hhciAqdF9jcCA9IChjb25zdCB1X2NoYXIgKikoY3ApOyBcCisJKHMpID0gKCh1aW50MTZfdCl0X2NwWzBdIDw8IDgpIFwKKwkgICAgfCAoKHVpbnQxNl90KXRfY3BbMV0pIFwKKwkgICAgOyBcCisJKGNwKSArPSBOU19JTlQxNlNaOyBcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBOU19HRVQzMihsLCBjcCkgZG8geyBcCisJY29uc3QgdV9jaGFyICp0X2NwID0gKGNvbnN0IHVfY2hhciAqKShjcCk7IFwKKwkobCkgPSAoKHVpbnQzMl90KXRfY3BbMF0gPDwgMjQpIFwKKwkgICAgfCAoKHVpbnQzMl90KXRfY3BbMV0gPDwgMTYpIFwKKwkgICAgfCAoKHVpbnQzMl90KXRfY3BbMl0gPDwgOCkgXAorCSAgICB8ICgodWludDMyX3QpdF9jcFszXSkgXAorCSAgICA7IFwKKwkoY3ApICs9IE5TX0lOVDMyU1o7IFwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lIE5TX1BVVDE2KHMsIGNwKSBkbyB7IFwKKwl1aW50MzJfdCB0X3MgPSAodWludDMyX3QpKHMpOyBcCisJdV9jaGFyICp0X2NwID0gKHVfY2hhciAqKShjcCk7IFwKKwkqdF9jcCsrID0gdF9zID4+IDg7IFwKKwkqdF9jcCAgID0gdF9zOyBcCisJKGNwKSArPSBOU19JTlQxNlNaOyBcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBOU19QVVQzMihsLCBjcCkgZG8geyBcCisJdWludDMyX3QgdF9sID0gKHVpbnQzMl90KShsKTsgXAorCXVfY2hhciAqdF9jcCA9ICh1X2NoYXIgKikoY3ApOyBcCisJKnRfY3ArKyA9IHRfbCA+PiAyNDsgXAorCSp0X2NwKysgPSB0X2wgPj4gMTY7IFwKKwkqdF9jcCsrID0gdF9sID4+IDg7IFwKKwkqdF9jcCAgID0gdF9sOyBcCisJKGNwKSArPSBOU19JTlQzMlNaOyBcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworLyoKKyAqIEFOU0kgQyBpZGVudGlmaWVyIGhpZGluZyBmb3IgYmluZCdzIGxpYi9uYW1lc2VyLgorICovCisjZGVmaW5lCW5zX21zZ19nZXRmbGFnCQlfX25zX21zZ19nZXRmbGFnCisjZGVmaW5lIG5zX2dldDE2CQlfX25zX2dldDE2CisjZGVmaW5lIG5zX2dldDMyCQlfX25zX2dldDMyCisjZGVmaW5lIG5zX3B1dDE2CQlfX25zX3B1dDE2CisjZGVmaW5lIG5zX3B1dDMyCQlfX25zX3B1dDMyCisjZGVmaW5lIG5zX2luaXRwYXJzZQkJX19uc19pbml0cGFyc2UKKyNkZWZpbmUgbnNfc2tpcHJyCQlfX25zX3NraXBycgorI2RlZmluZSBuc19wYXJzZXJyCQlfX25zX3BhcnNlcnIKKyNkZWZpbmUgbnNfcGFyc2VycjIJCV9fbnNfcGFyc2VycjIKKyNkZWZpbmUJbnNfc3ByaW50cnIJCV9fbnNfc3ByaW50cnIKKyNkZWZpbmUJbnNfc3ByaW50cnJmCQlfX25zX3NwcmludHJyZgorI2RlZmluZQluc19mb3JtYXRfdHRsCQlfX25zX2Zvcm1hdF90dGwKKyNkZWZpbmUJbnNfcGFyc2VfdHRsCQlfX25zX3BhcnNlX3R0bAorI2RlZmluZSBuc19kYXRldG9zZWNzCQlfX25zX2RhdGV0b3NlY3MKKyNkZWZpbmUJbnNfbmFtZV9udG9sCQlfX25zX25hbWVfbnRvbAorI2RlZmluZQluc19uYW1lX250b3AJCV9fbnNfbmFtZV9udG9wCisjZGVmaW5lCW5zX25hbWVfcHRvbgkJX19uc19uYW1lX3B0b24KKyNkZWZpbmUJbnNfbmFtZV9wdG9uMgkJX19uc19uYW1lX3B0b24yCisjZGVmaW5lCW5zX25hbWVfdW5wYWNrCQlfX25zX25hbWVfdW5wYWNrCisjZGVmaW5lCW5zX25hbWVfdW5wYWNrMgkJX19uc19uYW1lX3VucGFjazIKKyNkZWZpbmUJbnNfbmFtZV9wYWNrCQlfX25zX25hbWVfcGFjaworI2RlZmluZQluc19uYW1lX2NvbXByZXNzCV9fbnNfbmFtZV9jb21wcmVzcworI2RlZmluZQluc19uYW1lX3VuY29tcHJlc3MJX19uc19uYW1lX3VuY29tcHJlc3MKKyNkZWZpbmUJbnNfbmFtZV9za2lwCQlfX25zX25hbWVfc2tpcAorI2RlZmluZQluc19uYW1lX3JvbGxiYWNrCV9fbnNfbmFtZV9yb2xsYmFjaworI2RlZmluZQluc19uYW1lX2xlbmd0aAkJX19uc19uYW1lX2xlbmd0aAorI2RlZmluZQluc19uYW1lX2VxCQlfX25zX25hbWVfZXEKKyNkZWZpbmUJbnNfbmFtZV9vd25lZAkJX19uc19uYW1lX293bmVkCisjZGVmaW5lCW5zX25hbWVfbWFwCQlfX25zX25hbWVfbWFwCisjZGVmaW5lCW5zX25hbWVfbGFiZWxzCQlfX25zX25hbWVfbGFiZWxzCisjZGVmaW5lCW5zX3NpZ24JCQlfX25zX3NpZ24KKyNkZWZpbmUJbnNfc2lnbjIJCV9fbnNfc2lnbjIKKyNkZWZpbmUJbnNfc2lnbl90Y3AJCV9fbnNfc2lnbl90Y3AKKyNkZWZpbmUJbnNfc2lnbl90Y3AyCQlfX25zX3NpZ25fdGNwMgorI2RlZmluZQluc19zaWduX3RjcF9pbml0CV9fbnNfc2lnbl90Y3BfaW5pdAorI2RlZmluZSBuc19maW5kX3RzaWcJCV9fbnNfZmluZF90c2lnCisjZGVmaW5lCW5zX3ZlcmlmeQkJX19uc192ZXJpZnkKKyNkZWZpbmUJbnNfdmVyaWZ5X3RjcAkJX19uc192ZXJpZnlfdGNwCisjZGVmaW5lCW5zX3ZlcmlmeV90Y3BfaW5pdAlfX25zX3ZlcmlmeV90Y3BfaW5pdAorI2RlZmluZQluc19zYW1lZG9tYWluCQlfX25zX3NhbWVkb21haW4KKyNkZWZpbmUJbnNfc3ViZG9tYWluCQlfX25zX3N1YmRvbWFpbgorI2RlZmluZQluc19tYWtlY2Fub24JCV9fbnNfbWFrZWNhbm9uCisjZGVmaW5lCW5zX3NhbWVuYW1lCQlfX25zX3NhbWVuYW1lCisjZGVmaW5lCW5zX25ld21zZ19pbml0CQlfX25zX25ld21zZ19pbml0CisjZGVmaW5lCW5zX25ld21zZ19jb3B5CQlfX25zX25ld21zZ19jb3B5CisjZGVmaW5lCW5zX25ld21zZ19pZAkJX19uc19uZXdtc2dfaWQKKyNkZWZpbmUJbnNfbmV3bXNnX2ZsYWcJCV9fbnNfbmV3bXNnX2ZsYWcKKyNkZWZpbmUJbnNfbmV3bXNnX3EJCV9fbnNfbmV3bXNnX3EKKyNkZWZpbmUJbnNfbmV3bXNnX3JyCQlfX25zX25ld21zZ19ycgorI2RlZmluZQluc19uZXdtc2dfZG9uZQkJX19uc19uZXdtc2dfZG9uZQorI2RlZmluZQluc19yZGF0YV91bnBhY2sJCV9fbnNfcmRhdGFfdW5wYWNrCisjZGVmaW5lCW5zX3JkYXRhX2VxdWFsCQlfX25zX3JkYXRhX2VxdWFsCisjZGVmaW5lCW5zX3JkYXRhX3JlZmVycwkJX19uc19yZGF0YV9yZWZlcnMKKworX19CRUdJTl9ERUNMUworaW50CQluc19tc2dfZ2V0ZmxhZyhuc19tc2csIGludCk7Cit1aW50MTZfdAluc19nZXQxNihjb25zdCB1X2NoYXIgKik7Cit1aW50MzJfdAluc19nZXQzMihjb25zdCB1X2NoYXIgKik7Cit2b2lkCQluc19wdXQxNih1aW50MTZfdCwgdV9jaGFyICopOwordm9pZAkJbnNfcHV0MzIodWludDMyX3QsIHVfY2hhciAqKTsKK2ludAkJbnNfaW5pdHBhcnNlKGNvbnN0IHVfY2hhciAqLCBpbnQsIG5zX21zZyAqKTsKK2ludAkJbnNfc2tpcHJyKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgbnNfc2VjdCwgaW50KTsKK2ludAkJbnNfcGFyc2Vycihuc19tc2cgKiwgbnNfc2VjdCwgaW50LCBuc19yciAqKTsKK2ludAkJbnNfcGFyc2VycjIobnNfbXNnICosIG5zX3NlY3QsIGludCwgbnNfcnIyICopOworaW50CQluc19zcHJpbnRycihjb25zdCBuc19tc2cgKiwgY29uc3QgbnNfcnIgKiwKKwkJCQkgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfc3ByaW50cnJmKGNvbnN0IHVfY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwKKwkJCQkgIG5zX2NsYXNzLCBuc190eXBlLCB1X2xvbmcsIGNvbnN0IHVfY2hhciAqLAorCQkJCSAgc2l6ZV90LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKKwkJCQkgIGNoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfZm9ybWF0X3R0bCh1X2xvbmcsIGNoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfcGFyc2VfdHRsKGNvbnN0IGNoYXIgKiwgdV9sb25nICopOwordWludDMyX3QJbnNfZGF0ZXRvc2Vjcyhjb25zdCBjaGFyICpjcCwgaW50ICplcnJwKTsKK2ludAkJbnNfbmFtZV9udG9sKGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfbmFtZV9udG9wKGNvbnN0IHVfY2hhciAqLCBjaGFyICosIHNpemVfdCk7CitpbnQJCW5zX25hbWVfcHRvbihjb25zdCBjaGFyICosIHVfY2hhciAqLCBzaXplX3QpOworaW50CQluc19uYW1lX3B0b24yKGNvbnN0IGNoYXIgKiwgdV9jaGFyICosIHNpemVfdCwgc2l6ZV90ICopOworaW50CQluc19uYW1lX3VucGFjayhjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosCisJCQkJICAgIGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfbmFtZV91bnBhY2syKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwKKwkJCQkgICAgIGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgc2l6ZV90LAorCQkJCSAgICAgc2l6ZV90ICopOworaW50CQluc19uYW1lX3BhY2soY29uc3QgdV9jaGFyICosIHVfY2hhciAqLCBpbnQsCisJCQkJICBjb25zdCB1X2NoYXIgKiosIGNvbnN0IHVfY2hhciAqKik7CitpbnQJCW5zX25hbWVfdW5jb21wcmVzcyhjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosCisJCQkJCWNvbnN0IHVfY2hhciAqLCBjaGFyICosIHNpemVfdCk7CitpbnQJCW5zX25hbWVfY29tcHJlc3MoY29uc3QgY2hhciAqLCB1X2NoYXIgKiwgc2l6ZV90LAorCQkJCSAgICAgIGNvbnN0IHVfY2hhciAqKiwgY29uc3QgdV9jaGFyICoqKTsKK2ludAkJbnNfbmFtZV9za2lwKGNvbnN0IHVfY2hhciAqKiwgY29uc3QgdV9jaGFyICopOwordm9pZAkJbnNfbmFtZV9yb2xsYmFjayhjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICoqLAorCQkJCSAgICAgIGNvbnN0IHVfY2hhciAqKik7CitpbnQJCW5zX3NpZ24odV9jaGFyICosIGludCAqLCBpbnQsIGludCwgdm9pZCAqLAorCQkJICAgICBjb25zdCB1X2NoYXIgKiwgaW50LCB1X2NoYXIgKiwgaW50ICosIHRpbWVfdCk7CitpbnQJCW5zX3NpZ24yKHVfY2hhciAqLCBpbnQgKiwgaW50LCBpbnQsIHZvaWQgKiwKKwkJCSAgICAgIGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLCBpbnQgKiwgdGltZV90LAorCQkJICAgICAgdV9jaGFyICoqLCB1X2NoYXIgKiopOworc3NpemVfdAkJbnNfbmFtZV9sZW5ndGgobnNfbm5hbWVfY3QsIHNpemVfdCk7CitpbnQJCW5zX25hbWVfZXEobnNfbm5hbWVfY3QsIHNpemVfdCwgbnNfbm5hbWVfY3QsIHNpemVfdCk7CitpbnQJCW5zX25hbWVfb3duZWQobnNfbmFtZW1hcF9jdCwgaW50LCBuc19uYW1lbWFwX2N0LCBpbnQpOworaW50CQluc19uYW1lX21hcChuc19ubmFtZV9jdCwgc2l6ZV90LCBuc19uYW1lbWFwX3QsIGludCk7CitpbnQJCW5zX25hbWVfbGFiZWxzKG5zX25uYW1lX2N0LCBzaXplX3QpOworaW50CQluc19zaWduX3RjcCh1X2NoYXIgKiwgaW50ICosIGludCwgaW50LAorCQkJCSBuc190Y3BfdHNpZ19zdGF0ZSAqLCBpbnQpOworaW50CQluc19zaWduX3RjcDIodV9jaGFyICosIGludCAqLCBpbnQsIGludCwKKwkJCQkgIG5zX3RjcF90c2lnX3N0YXRlICosIGludCwKKwkJCQkgIHVfY2hhciAqKiwgdV9jaGFyICoqKTsKK2ludAkJbnNfc2lnbl90Y3BfaW5pdCh2b2lkICosIGNvbnN0IHVfY2hhciAqLCBpbnQsCisJCQkJCW5zX3RjcF90c2lnX3N0YXRlICopOwordV9jaGFyCQkqbnNfZmluZF90c2lnKHVfY2hhciAqLCB1X2NoYXIgKik7CitpbnQJCW5zX3ZlcmlmeSh1X2NoYXIgKiwgaW50ICosIHZvaWQgKiwKKwkJCSAgICAgICBjb25zdCB1X2NoYXIgKiwgaW50LCB1X2NoYXIgKiwgaW50ICosCisJCQkgICAgICAgdGltZV90ICosIGludCk7CitpbnQJCW5zX3ZlcmlmeV90Y3AodV9jaGFyICosIGludCAqLCBuc190Y3BfdHNpZ19zdGF0ZSAqLCBpbnQpOworaW50CQluc192ZXJpZnlfdGNwX2luaXQodm9pZCAqLCBjb25zdCB1X2NoYXIgKiwgaW50LAorCQkJCQluc190Y3BfdHNpZ19zdGF0ZSAqKTsKK2ludAkJbnNfc2FtZWRvbWFpbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitpbnQJCW5zX3N1YmRvbWFpbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitpbnQJCW5zX21ha2VjYW5vbihjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfc2FtZW5hbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworaW50CQluc19uZXdtc2dfaW5pdCh1X2NoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZnNpeiwgbnNfbmV3bXNnICopOworaW50CQluc19uZXdtc2dfY29weShuc19uZXdtc2cgKiwgbnNfbXNnICopOwordm9pZAkJbnNfbmV3bXNnX2lkKG5zX25ld21zZyAqaGFuZGxlLCB1aW50MTZfdCBpZCk7Cit2b2lkCQluc19uZXdtc2dfZmxhZyhuc19uZXdtc2cgKmhhbmRsZSwgbnNfZmxhZyBmbGFnLCB1X2ludCB2YWx1ZSk7CitpbnQJCW5zX25ld21zZ19xKG5zX25ld21zZyAqaGFuZGxlLCBuc19ubmFtZV9jdCBxbmFtZSwKKwkJCSAgICBuc190eXBlIHF0eXBlLCBuc19jbGFzcyBxY2xhc3MpOworaW50CQluc19uZXdtc2dfcnIobnNfbmV3bXNnICpoYW5kbGUsIG5zX3NlY3Qgc2VjdCwKKwkJCSAgICAgbnNfbm5hbWVfY3QgbmFtZSwgbnNfdHlwZSB0eXBlLAorCQkJICAgICBuc19jbGFzcyBycl9jbGFzcywgdWludDMyX3QgdHRsLAorCQkJICAgICB1aW50MTZfdCByZGxlbiwgY29uc3QgdV9jaGFyICpyZGF0YSk7CitzaXplX3QJCW5zX25ld21zZ19kb25lKG5zX25ld21zZyAqaGFuZGxlKTsKK3NzaXplX3QJCW5zX3JkYXRhX3VucGFjayhjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosIG5zX3R5cGUsCisJCQkJY29uc3QgdV9jaGFyICosIHNpemVfdCwgdV9jaGFyICosIHNpemVfdCk7CitpbnQJCW5zX3JkYXRhX2VxdWFsKG5zX3R5cGUsCisJCQkgICAgICAgY29uc3QgdV9jaGFyICosIHNpemVfdCwKKwkJCSAgICAgICBjb25zdCB1X2NoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfcmRhdGFfcmVmZXJzKG5zX3R5cGUsCisJCQkJY29uc3QgdV9jaGFyICosIHNpemVfdCwKKwkJCQljb25zdCB1X2NoYXIgKik7CitfX0VORF9ERUNMUworCisjaWZkZWYgQklORF80X0NPTVBBVAorI2luY2x1ZGUgPGFycGEvbmFtZXNlcl9jb21wYXQuaD4KKyNlbmRpZgorCisjZW5kaWYgLyogIV9BUlBBX05BTUVTRVJfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9hcnBhL25hbWVzZXJfY29tcGF0LmggYi9saWJjL2luY2x1ZGUvYXJwYS9uYW1lc2VyX2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNjBmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvYXJwYS9uYW1lc2VyX2NvbXBhdC5oCkBAIC0wLDAgKzEsMjM4IEBACisvKgkkTmV0QlNEOiBuYW1lc2VyX2NvbXBhdC5oLHYgMS4xLjEuMiAyMDA0LzExLzA3IDAxOjI4OjI3IGNocmlzdG9zIEV4cCAkCSovCisKKy8qIENvcHlyaWdodCAoYykgMTk4MywgMTk4OQorICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiAgICAgIGZyb20gbmFtZXNlci5oCTguMSAoQmVya2VsZXkpIDYvMi85MworICoJSWQ6IG5hbWVzZXJfY29tcGF0LmgsdiAxLjggMjAwNi8wNS8xOSAwMjozMzo0MCBtYXJrYSBFeHAKKyAqLworCisjaWZuZGVmIF9BUlBBX05BTUVTRVJfQ09NUEFUXworI2RlZmluZQlfQVJQQV9OQU1FU0VSX0NPTVBBVF8KKworI2RlZmluZQlfX0JJTkQJCTE5OTUwNjIxCS8qIChERUFEKSBpbnRlcmZhY2UgdmVyc2lvbiBzdGFtcC4gKi8KKworI2luY2x1ZGUgPGVuZGlhbi5oPgorCisjaWZuZGVmIEJZVEVfT1JERVIKKyNpZiAoQlNEID49IDE5OTEwMykKKyMgaW5jbHVkZSA8bWFjaGluZS9lbmRpYW4uaD4KKyNlbHNlCisjaWZkZWYgX19saW51eF9fCisjIGluY2x1ZGUgPGVuZGlhbi5oPgorI2Vsc2UKKyNkZWZpbmUJTElUVExFX0VORElBTgkxMjM0CS8qIGxlYXN0LXNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKHZheCwgcGMpICovCisjZGVmaW5lCUJJR19FTkRJQU4JNDMyMQkvKiBtb3N0LXNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKElCTSwgbmV0KSAqLworI2RlZmluZQlQRFBfRU5ESUFOCTM0MTIJLyogTFNCIGZpcnN0IGluIHdvcmQsIE1TVyBmaXJzdCBpbiBsb25nIChwZHApKi8KKworI2lmIGRlZmluZWQodmF4KSB8fCBkZWZpbmVkKG5zMzIwMDApIHx8IGRlZmluZWQoc3VuMzg2KSB8fCBkZWZpbmVkKGkzODYpIHx8IFwKKyAgICBkZWZpbmVkKE1JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKEJJVF9aRVJPX09OX1JJR0hUKSB8fCBcCisgICAgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19hbWQ2NF9fKSB8fCBcCisgICAgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKE1JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBcCisgICAgZGVmaW5lZChCSVRfWkVST19PTl9SSUdIVCkgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19hbHBoYSkgfHwgXAorICAgIChkZWZpbmVkKF9fTHlueF9fKSAmJiBkZWZpbmVkKF9feDg2X18pKQorI2RlZmluZSBCWVRFX09SREVSCUxJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChzZWwpIHx8IGRlZmluZWQocHlyKSB8fCBkZWZpbmVkKG1jNjgwMDApIHx8IGRlZmluZWQoc3BhcmMpIHx8IFwKKyAgICBkZWZpbmVkKGlzNjhrKSB8fCBkZWZpbmVkKHRhaG9lKSB8fCBkZWZpbmVkKGlibTAzMikgfHwgZGVmaW5lZChpYm0zNzApIHx8IFwKKyAgICBkZWZpbmVkKE1JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKF9JQk1SMikgfHwgZGVmaW5lZChER1VYKSB8fFwKKyAgICBkZWZpbmVkKGFwb2xsbykgfHwgZGVmaW5lZChfX2NvbnZleF9fKSB8fCBkZWZpbmVkKF9DUkFZKSB8fCBcCisgICAgZGVmaW5lZChfX2hwcGEpIHx8IGRlZmluZWQoX19ocDkwMDApIHx8IFwKKyAgICBkZWZpbmVkKF9faHA5MDAwczMwMCkgfHwgZGVmaW5lZChfX2hwOTAwMHM3MDApIHx8IFwKKyAgICBkZWZpbmVkKF9faHAzMDAwczkwMCkgfHwgZGVmaW5lZChfX2hwdXgpIHx8IGRlZmluZWQoTVBFKSB8fCBcCisgICAgZGVmaW5lZCAoQklUX1pFUk9fT05fTEVGVCkgfHwgZGVmaW5lZChtNjhrKSB8fCBkZWZpbmVkKF9fc3BhcmMpIHx8ICBcCisgICAgKGRlZmluZWQoX19MeW54X18pICYmIFwKKyAgICAgKGRlZmluZWQoX182OGtfXykgfHwgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19wb3dlcnBjX18pKSkKKyNkZWZpbmUgQllURV9PUkRFUglCSUdfRU5ESUFOCisjZW5kaWYKKyNlbmRpZiAvKiBfX2xpbnV4ICovCisjZW5kaWYgLyogQlNEICovCisjZW5kaWYgLyogQllURV9PUkRFUiAqLworCisjaWYgIWRlZmluZWQoQllURV9PUkRFUikgfHwgXAorICAgIChCWVRFX09SREVSICE9IEJJR19FTkRJQU4gJiYgQllURV9PUkRFUiAhPSBMSVRUTEVfRU5ESUFOICYmIFwKKyAgICBCWVRFX09SREVSICE9IFBEUF9FTkRJQU4pCisJLyogeW91IG11c3QgZGV0ZXJtaW5lIHdoYXQgdGhlIGNvcnJlY3QgYml0IG9yZGVyIGlzIGZvcgorCSAqIHlvdXIgY29tcGlsZXIgLSB0aGUgbmV4dCBsaW5lIGlzIGFuIGludGVudGlvbmFsIGVycm9yCisJICogd2hpY2ggd2lsbCBmb3JjZSB5b3VyIGNvbXBpbGVzIHRvIGJvbWIgdW50aWwgeW91IGZpeAorCSAqIHRoZSBhYm92ZSBtYWNyb3MuCisJICovCisgICNlcnJvciAiVW5kZWZpbmVkIG9yIGludmFsaWQgQllURV9PUkRFUiI7CisjZW5kaWYKKworLyoKKyAqIFN0cnVjdHVyZSBmb3IgcXVlcnkgaGVhZGVyLiAgVGhlIG9yZGVyIG9mIHRoZSBmaWVsZHMgaXMgbWFjaGluZS0gYW5kCisgKiBjb21waWxlci1kZXBlbmRlbnQsIGRlcGVuZGluZyBvbiB0aGUgYnl0ZS9iaXQgb3JkZXIgYW5kIHRoZSBsYXlvdXQKKyAqIG9mIGJpdCBmaWVsZHMuICBXZSB1c2UgYml0IGZpZWxkcyBvbmx5IGluIGludCB2YXJpYWJsZXMsIGFzIHRoaXMKKyAqIGlzIGFsbCBBTlNJIHJlcXVpcmVzLiAgVGhpcyByZXF1aXJlcyBhIHNvbWV3aGF0IGNvbmZ1c2luZyByZWFycmFuZ2VtZW50LgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZAlpZCA6MTY7CQkvKiBxdWVyeSBpZGVudGlmaWNhdGlvbiBudW1iZXIgKi8KKyNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKwkJCS8qIGZpZWxkcyBpbiB0aGlyZCBieXRlICovCisJdW5zaWduZWQJcXI6IDE7CQkvKiByZXNwb25zZSBmbGFnICovCisJdW5zaWduZWQJb3Bjb2RlOiA0OwkvKiBwdXJwb3NlIG9mIG1lc3NhZ2UgKi8KKwl1bnNpZ25lZAlhYTogMTsJCS8qIGF1dGhvcml0aXZlIGFuc3dlciAqLworCXVuc2lnbmVkCXRjOiAxOwkJLyogdHJ1bmNhdGVkIG1lc3NhZ2UgKi8KKwl1bnNpZ25lZAlyZDogMTsJCS8qIHJlY3Vyc2lvbiBkZXNpcmVkICovCisJCQkvKiBmaWVsZHMgaW4gZm91cnRoIGJ5dGUgKi8KKwl1bnNpZ25lZAlyYTogMTsJCS8qIHJlY3Vyc2lvbiBhdmFpbGFibGUgKi8KKwl1bnNpZ25lZAl1bnVzZWQgOjE7CS8qIHVudXNlZCBiaXRzIChNQlogYXMgb2YgNC45LjNhMykgKi8KKwl1bnNpZ25lZAlhZDogMTsJCS8qIGF1dGhlbnRpYyBkYXRhIGZyb20gbmFtZWQgKi8KKwl1bnNpZ25lZAljZDogMTsJCS8qIGNoZWNraW5nIGRpc2FibGVkIGJ5IHJlc29sdmVyICovCisJdW5zaWduZWQJcmNvZGUgOjQ7CS8qIHJlc3BvbnNlIGNvZGUgKi8KKyNlbmRpZgorI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTiB8fCBCWVRFX09SREVSID09IFBEUF9FTkRJQU4KKwkJCS8qIGZpZWxkcyBpbiB0aGlyZCBieXRlICovCisJdW5zaWduZWQJcmQgOjE7CQkvKiByZWN1cnNpb24gZGVzaXJlZCAqLworCXVuc2lnbmVkCXRjIDoxOwkJLyogdHJ1bmNhdGVkIG1lc3NhZ2UgKi8KKwl1bnNpZ25lZAlhYSA6MTsJCS8qIGF1dGhvcml0aXZlIGFuc3dlciAqLworCXVuc2lnbmVkCW9wY29kZSA6NDsJLyogcHVycG9zZSBvZiBtZXNzYWdlICovCisJdW5zaWduZWQJcXIgOjE7CQkvKiByZXNwb25zZSBmbGFnICovCisJCQkvKiBmaWVsZHMgaW4gZm91cnRoIGJ5dGUgKi8KKwl1bnNpZ25lZAlyY29kZSA6NDsJLyogcmVzcG9uc2UgY29kZSAqLworCXVuc2lnbmVkCWNkOiAxOwkJLyogY2hlY2tpbmcgZGlzYWJsZWQgYnkgcmVzb2x2ZXIgKi8KKwl1bnNpZ25lZAlhZDogMTsJCS8qIGF1dGhlbnRpYyBkYXRhIGZyb20gbmFtZWQgKi8KKwl1bnNpZ25lZAl1bnVzZWQgOjE7CS8qIHVudXNlZCBiaXRzIChNQlogYXMgb2YgNC45LjNhMykgKi8KKwl1bnNpZ25lZAlyYSA6MTsJCS8qIHJlY3Vyc2lvbiBhdmFpbGFibGUgKi8KKyNlbmRpZgorCQkJLyogcmVtYWluaW5nIGJ5dGVzICovCisJdW5zaWduZWQJcWRjb3VudCA6MTY7CS8qIG51bWJlciBvZiBxdWVzdGlvbiBlbnRyaWVzICovCisJdW5zaWduZWQJYW5jb3VudCA6MTY7CS8qIG51bWJlciBvZiBhbnN3ZXIgZW50cmllcyAqLworCXVuc2lnbmVkCW5zY291bnQgOjE2OwkvKiBudW1iZXIgb2YgYXV0aG9yaXR5IGVudHJpZXMgKi8KKwl1bnNpZ25lZAlhcmNvdW50IDoxNjsJLyogbnVtYmVyIG9mIHJlc291cmNlIGVudHJpZXMgKi8KK30gSEVBREVSOworCisjZGVmaW5lIFBBQ0tFVFNaCU5TX1BBQ0tFVFNaCisjZGVmaW5lIE1BWEROQU1FCU5TX01BWEROQU1FCisjZGVmaW5lIE1BWENETkFNRQlOU19NQVhDRE5BTUUKKyNkZWZpbmUgTUFYTEFCRUwJTlNfTUFYTEFCRUwKKyNkZWZpbmUJSEZJWEVEU1oJTlNfSEZJWEVEU1oKKyNkZWZpbmUgUUZJWEVEU1oJTlNfUUZJWEVEU1oKKyNkZWZpbmUgUlJGSVhFRFNaCU5TX1JSRklYRURTWgorI2RlZmluZQlJTlQzMlNaCQlOU19JTlQzMlNaCisjZGVmaW5lCUlOVDE2U1oJCU5TX0lOVDE2U1oKKyNkZWZpbmUJSU5UOFNaCQlOU19JTlQ4U1oKKyNkZWZpbmUJSU5BRERSU1oJTlNfSU5BRERSU1oKKyNkZWZpbmUJSU42QUREUlNaCU5TX0lONkFERFJTWgorI2RlZmluZQlJTkRJUl9NQVNLCU5TX0NNUFJTRkxHUworI2RlZmluZSBOQU1FU0VSVkVSX1BPUlQJTlNfREVGQVVMVFBPUlQKKworI2RlZmluZSBTX1pPTkUJCW5zX3Nfem4KKyNkZWZpbmUgU19QUkVSRVEJbnNfc19wcgorI2RlZmluZSBTX1VQREFURQluc19zX3VkCisjZGVmaW5lIFNfQUREVAkJbnNfc19hcgorCisjZGVmaW5lIFFVRVJZCQluc19vX3F1ZXJ5CisjZGVmaW5lIElRVUVSWQkJbnNfb19pcXVlcnkKKyNkZWZpbmUgU1RBVFVTCQluc19vX3N0YXR1cworI2RlZmluZQlOU19OT1RJRllfT1AJbnNfb19ub3RpZnkKKyNkZWZpbmUJTlNfVVBEQVRFX09QCW5zX29fdXBkYXRlCisKKyNkZWZpbmUgTk9FUlJPUgkJbnNfcl9ub2Vycm9yCisjZGVmaW5lIEZPUk1FUlIJCW5zX3JfZm9ybWVycgorI2RlZmluZSBTRVJWRkFJTAluc19yX3NlcnZmYWlsCisjZGVmaW5lIE5YRE9NQUlOCW5zX3Jfbnhkb21haW4KKyNkZWZpbmUgTk9USU1QCQluc19yX25vdGltcGwKKyNkZWZpbmUgUkVGVVNFRAkJbnNfcl9yZWZ1c2VkCisjZGVmaW5lIFlYRE9NQUlOCW5zX3JfeXhkb21haW4KKyNkZWZpbmUgWVhSUlNFVAkJbnNfcl95eHJyc2V0CisjZGVmaW5lIE5YUlJTRVQJCW5zX3JfbnhycnNldAorI2RlZmluZSBOT1RBVVRICQluc19yX25vdGF1dGgKKyNkZWZpbmUgTk9UWk9ORQkJbnNfcl9ub3R6b25lCisvKiNkZWZpbmUgQkFEU0lHCQluc19yX2JhZHNpZyovCisvKiNkZWZpbmUgQkFES0VZCQluc19yX2JhZGtleSovCisvKiNkZWZpbmUgQkFEVElNRQkJbnNfcl9iYWR0aW1lKi8KKworCisjZGVmaW5lIERFTEVURQkJbnNfdW9wX2RlbGV0ZQorI2RlZmluZSBBREQJCW5zX3VvcF9hZGQKKworI2RlZmluZSBUX0EJCW5zX3RfYQorI2RlZmluZSBUX05TCQluc190X25zCisjZGVmaW5lIFRfTUQJCW5zX3RfbWQKKyNkZWZpbmUgVF9NRgkJbnNfdF9tZgorI2RlZmluZSBUX0NOQU1FCQluc190X2NuYW1lCisjZGVmaW5lIFRfU09BCQluc190X3NvYQorI2RlZmluZSBUX01CCQluc190X21iCisjZGVmaW5lIFRfTUcJCW5zX3RfbWcKKyNkZWZpbmUgVF9NUgkJbnNfdF9tcgorI2RlZmluZSBUX05VTEwJCW5zX3RfbnVsbAorI2RlZmluZSBUX1dLUwkJbnNfdF93a3MKKyNkZWZpbmUgVF9QVFIJCW5zX3RfcHRyCisjZGVmaW5lIFRfSElORk8JCW5zX3RfaGluZm8KKyNkZWZpbmUgVF9NSU5GTwkJbnNfdF9taW5mbworI2RlZmluZSBUX01YCQluc190X214CisjZGVmaW5lIFRfVFhUCQluc190X3R4dAorI2RlZmluZQlUX1JQCQluc190X3JwCisjZGVmaW5lIFRfQUZTREIJCW5zX3RfYWZzZGIKKyNkZWZpbmUgVF9YMjUJCW5zX3RfeDI1CisjZGVmaW5lIFRfSVNETgkJbnNfdF9pc2RuCisjZGVmaW5lIFRfUlQJCW5zX3RfcnQKKyNkZWZpbmUgVF9OU0FQCQluc190X25zYXAKKyNkZWZpbmUgVF9OU0FQX1BUUgluc190X25zYXBfcHRyCisjZGVmaW5lCVRfU0lHCQluc190X3NpZworI2RlZmluZQlUX0tFWQkJbnNfdF9rZXkKKyNkZWZpbmUJVF9QWAkJbnNfdF9weAorI2RlZmluZQlUX0dQT1MJCW5zX3RfZ3BvcworI2RlZmluZQlUX0FBQUEJCW5zX3RfYWFhYQorI2RlZmluZQlUX0xPQwkJbnNfdF9sb2MKKyNkZWZpbmUJVF9OWFQJCW5zX3Rfbnh0CisjZGVmaW5lCVRfRUlECQluc190X2VpZAorI2RlZmluZQlUX05JTUxPQwluc190X25pbWxvYworI2RlZmluZQlUX1NSVgkJbnNfdF9zcnYKKyNkZWZpbmUgVF9BVE1BCQluc190X2F0bWEKKyNkZWZpbmUgVF9OQVBUUgkJbnNfdF9uYXB0cgorI2RlZmluZSBUX0E2CQluc190X2E2CisjZGVmaW5lCVRfVFNJRwkJbnNfdF90c2lnCisjZGVmaW5lCVRfSVhGUgkJbnNfdF9peGZyCisjZGVmaW5lIFRfQVhGUgkJbnNfdF9heGZyCisjZGVmaW5lIFRfTUFJTEIJCW5zX3RfbWFpbGIKKyNkZWZpbmUgVF9NQUlMQQkJbnNfdF9tYWlsYQorI2RlZmluZSBUX0FOWQkJbnNfdF9hbnkKKworI2RlZmluZSBDX0lOCQluc19jX2luCisjZGVmaW5lIENfQ0hBT1MJCW5zX2NfY2hhb3MKKyNkZWZpbmUgQ19IUwkJbnNfY19ocworLyogQklORF9VUERBVEUgKi8KKyNkZWZpbmUgQ19OT05FCQluc19jX25vbmUKKyNkZWZpbmUgQ19BTlkJCW5zX2NfYW55CisKKyNkZWZpbmUJR0VUU0hPUlQJCU5TX0dFVDE2CisjZGVmaW5lCUdFVExPTkcJCQlOU19HRVQzMgorI2RlZmluZQlQVVRTSE9SVAkJTlNfUFVUMTYKKyNkZWZpbmUJUFVUTE9ORwkJCU5TX1BVVDMyCisKKyNlbmRpZiAvKiBfQVJQQV9OQU1FU0VSX0NPTVBBVF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9hc20vcGFnZS5oIGIvbGliYy9pbmNsdWRlL2FzbS9wYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MDFhM2YuLjAwMDAwMDAKLS0tIGEvbGliYy9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9QQUdFX0gKLSNkZWZpbmUgX19BU01fUEFHRV9ICi0KLS8qIE5ldyBjb2RlIHNob3VsZCB1c2Ugc3lzY29uZihfU0NfUEFHRVNJWkUpIGluc3RlYWQuICovCi0jZGVmaW5lIFBBR0VfU0hJRlQgMTIKLSNkZWZpbmUgUEFHRV9TSVpFICgxVUxMIDw8IFBBR0VfU0hJRlQpCi0jZGVmaW5lIFBBR0VfTUFTSyAofihQQUdFX1NJWkUgLSAxKSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvY3R5cGUuaCBiL2xpYmMvaW5jbHVkZS9jdHlwZS5oCmluZGV4IDU1NTdlMzEuLmQwNWE5NTIgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9jdHlwZS5oCisrKyBiL2xpYmMvaW5jbHVkZS9jdHlwZS5oCkBAIC00MSwzMiArNDEsMjIgQEAKICNkZWZpbmUgX0NUWVBFX0hfCiAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDx4bG9jYWxlLmg+CiAKICNkZWZpbmUJX0NUWVBFX1UJMHgwMQogI2RlZmluZQlfQ1RZUEVfTAkweDAyCi0jZGVmaW5lCV9DVFlQRV9OCTB4MDQKKyNkZWZpbmUJX0NUWVBFX0QJMHgwNAogI2RlZmluZQlfQ1RZUEVfUwkweDA4CiAjZGVmaW5lCV9DVFlQRV9QCTB4MTAKICNkZWZpbmUJX0NUWVBFX0MJMHgyMAogI2RlZmluZQlfQ1RZUEVfWAkweDQwCiAjZGVmaW5lCV9DVFlQRV9CCTB4ODAKKyNkZWZpbmUJX0NUWVBFX1IJKF9DVFlQRV9QfF9DVFlQRV9VfF9DVFlQRV9MfF9DVFlQRV9EfF9DVFlQRV9CKQorI2RlZmluZQlfQ1RZUEVfQQkoX0NUWVBFX0x8X0NUWVBFX1UpCiAKIF9fQkVHSU5fREVDTFMKIAogZXh0ZXJuIGNvbnN0IGNoYXIJKl9jdHlwZV87Ci1leHRlcm4gY29uc3Qgc2hvcnQJKl90b2xvd2VyX3RhYl87Ci1leHRlcm4gY29uc3Qgc2hvcnQJKl90b3VwcGVyX3RhYl87Ci0KLS8qIGV4dGVybiBfX2lubGluZSBpcyBhIEdOVSBDIGV4dGVuc2lvbiAqLwotI2lmZGVmIF9fR05VQ19fCi0jICBpZiBkZWZpbmVkKF9fR05VQ19TVERDX0lOTElORV9fKQotI2RlZmluZQlfX0NUWVBFX0lOTElORQlleHRlcm4gX19pbmxpbmUgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18pKQotIyAgZWxzZQotI2RlZmluZQlfX0NUWVBFX0lOTElORQlleHRlcm4gX19pbmxpbmUKLSMgIGVuZGlmCi0jZWxzZQotI2RlZmluZQlfX0NUWVBFX0lOTElORQlzdGF0aWMgX19pbmxpbmUKLSNlbmRpZgogCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfQU5TSV9MSUJSQVJZKSB8fCBkZWZpbmVkKGxpbnQpCiBpbnQJaXNhbG51bShpbnQpOwpAQCAtODMsNiArNzMsMjEgQEAKIGludAl0b2xvd2VyKGludCk7CiBpbnQJdG91cHBlcihpbnQpOwogCitpbnQgaXNhbG51bV9sKGludCwgbG9jYWxlX3QpOworaW50IGlzYWxwaGFfbChpbnQsIGxvY2FsZV90KTsKK2ludCBpc2JsYW5rX2woaW50LCBsb2NhbGVfdCk7CitpbnQgaXNjbnRybF9sKGludCwgbG9jYWxlX3QpOworaW50IGlzZGlnaXRfbChpbnQsIGxvY2FsZV90KTsKK2ludCBpc2dyYXBoX2woaW50LCBsb2NhbGVfdCk7CitpbnQgaXNsb3dlcl9sKGludCwgbG9jYWxlX3QpOworaW50IGlzcHJpbnRfbChpbnQsIGxvY2FsZV90KTsKK2ludCBpc3B1bmN0X2woaW50LCBsb2NhbGVfdCk7CitpbnQgaXNzcGFjZV9sKGludCwgbG9jYWxlX3QpOworaW50IGlzdXBwZXJfbChpbnQsIGxvY2FsZV90KTsKK2ludCBpc3hkaWdpdF9sKGludCwgbG9jYWxlX3QpOworaW50IHRvbG93ZXJfbChpbnQsIGxvY2FsZV90KTsKK2ludCB0b3VwcGVyX2woaW50LCBsb2NhbGVfdCk7CisKICNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5IHx8IF9fUE9TSVhfVklTSUJMRSA+IDIwMDExMiBcCiAgICAgfHwgX19YUEdfVklTSUJMRSA+IDYwMAogaW50CWlzYmxhbmsoaW50KTsKQEAgLTk3LDExMSArMTAyLDYgQEAKIAogI2VuZGlmIC8qIF9fR05VQ19fIHx8IF9BTlNJX0xJQlJBUlkgfHwgbGludCAqLwogCi0jaWYgZGVmaW5lZChOREVCVUcpCi0KLV9fQ1RZUEVfSU5MSU5FIGludCBpc2FsbnVtKGludCBjKQotewotCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfQ1RZUEVfVXxfQ1RZUEVfTHxfQ1RZUEVfTikpKTsKLX0KLQotX19DVFlQRV9JTkxJTkUgaW50IGlzYWxwaGEoaW50IGMpCi17Ci0JcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgKF9DVFlQRV9VfF9DVFlQRV9MKSkpOwotfQotCi1fX0NUWVBFX0lOTElORSBpbnQgaXNjbnRybChpbnQgYykKLXsKLQlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfQ1RZUEVfQykpOwotfQotCi1fX0NUWVBFX0lOTElORSBpbnQgaXNkaWdpdChpbnQgYykKLXsKLQlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfQ1RZUEVfTikpOwotfQotCi1fX0NUWVBFX0lOTElORSBpbnQgaXNncmFwaChpbnQgYykKLXsKLQlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiAoX0NUWVBFX1B8X0NUWVBFX1V8X0NUWVBFX0x8X0NUWVBFX04pKSk7Ci19Ci0KLV9fQ1RZUEVfSU5MSU5FIGludCBpc2xvd2VyKGludCBjKQotewotCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9DVFlQRV9MKSk7Ci19Ci0KLV9fQ1RZUEVfSU5MSU5FIGludCBpc3ByaW50KGludCBjKQotewotCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfQ1RZUEVfUHxfQ1RZUEVfVXxfQ1RZUEVfTHxfQ1RZUEVfTnxfQ1RZUEVfQikpKTsKLX0KLQotX19DVFlQRV9JTkxJTkUgaW50IGlzcHVuY3QoaW50IGMpCi17Ci0JcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX0NUWVBFX1ApKTsKLX0KLQotX19DVFlQRV9JTkxJTkUgaW50IGlzc3BhY2UoaW50IGMpCi17Ci0JcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX0NUWVBFX1MpKTsKLX0KLQotX19DVFlQRV9JTkxJTkUgaW50IGlzdXBwZXIoaW50IGMpCi17Ci0JcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX0NUWVBFX1UpKTsKLX0KLQotX19DVFlQRV9JTkxJTkUgaW50IGlzeGRpZ2l0KGludCBjKQotewotCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfQ1RZUEVfTnxfQ1RZUEVfWCkpKTsKLX0KLQotX19DVFlQRV9JTkxJTkUgaW50IHRvbG93ZXIoaW50IGMpCi17Ci0JaWYgKCh1bnNpZ25lZCBpbnQpYyA+IDI1NSkKLQkJcmV0dXJuIChjKTsKLQlyZXR1cm4gKChfdG9sb3dlcl90YWJfICsgMSlbY10pOwotfQotCi1fX0NUWVBFX0lOTElORSBpbnQgdG91cHBlcihpbnQgYykKLXsKLQlpZiAoKHVuc2lnbmVkIGludCljID4gMjU1KQotCQlyZXR1cm4gKGMpOwotCXJldHVybiAoKF90b3VwcGVyX3RhYl8gKyAxKVtjXSk7Ci19Ci0KLSNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5IHx8IF9fUE9TSVhfVklTSUJMRSA+IDIwMDExMiBcCi0gICAgfHwgX19YUEdfVklTSUJMRSA+IDYwMAotX19DVFlQRV9JTkxJTkUgaW50IGlzYmxhbmsoaW50IGMpCi17Ci0JcmV0dXJuIChjID09ICcgJyB8fCBjID09ICdcdCcpOwotfQotI2VuZGlmCi0KLSNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fWFBHX1ZJU0lCTEUKLV9fQ1RZUEVfSU5MSU5FIGludCBpc2FzY2lpKGludCBjKQotewotCXJldHVybiAoKHVuc2lnbmVkIGludCljIDw9IDAxNzcpOwotfQotCi1fX0NUWVBFX0lOTElORSBpbnQgdG9hc2NpaShpbnQgYykKLXsKLQlyZXR1cm4gKGMgJiAwMTc3KTsKLX0KLQotX19DVFlQRV9JTkxJTkUgaW50IF90b2xvd2VyKGludCBjKQotewotCXJldHVybiAoYyAtICdBJyArICdhJyk7Ci19Ci0KLV9fQ1RZUEVfSU5MSU5FIGludCBfdG91cHBlcihpbnQgYykKLXsKLQlyZXR1cm4gKGMgLSAnYScgKyAnQScpOwotfQotI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgfHwgX19YUEdfVklTSUJMRSAqLwotCi0jZW5kaWYgLyogTkRFQlVHICovCi0KIF9fRU5EX0RFQ0xTCiAKLSN1bmRlZiBfX0NUWVBFX0lOTElORQotCiAjZW5kaWYgLyogIV9DVFlQRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2RpcmVudC5oIGIvbGliYy9pbmNsdWRlL2RpcmVudC5oCmluZGV4IDEyOWNkZmEuLmE4NDlhNjEgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9kaXJlbnQuaAorKysgYi9saWJjL2luY2x1ZGUvZGlyZW50LmgKQEAgLTQ2LDI4ICs0NiwzNSBAQAogI2RlZmluZSBEVF9XSFQgMTQKICNlbmRpZgogCi1zdHJ1Y3QgZGlyZW50IHsKLSAgdWludDY0X3QgICAgICAgICBkX2lubzsKLSAgaW50NjRfdCAgICAgICAgICBkX29mZjsKLSAgdW5zaWduZWQgc2hvcnQgICBkX3JlY2xlbjsKLSAgdW5zaWduZWQgY2hhciAgICBkX3R5cGU7Ci0gIGNoYXIgICAgICAgICAgICAgZF9uYW1lWzI1Nl07Ci19OworI2RlZmluZSBfX0RJUkVOVDY0X0JPRFkgXAorICAgIHVpbnQ2NF90ICAgICAgICAgZF9pbm87IFwKKyAgICBpbnQ2NF90ICAgICAgICAgIGRfb2ZmOyBcCisgICAgdW5zaWduZWQgc2hvcnQgICBkX3JlY2xlbjsgXAorICAgIHVuc2lnbmVkIGNoYXIgICAgZF90eXBlOyBcCisgICAgY2hhciAgICAgICAgICAgICBkX25hbWVbMjU2XTsgXAorCitzdHJ1Y3QgZGlyZW50IHsgX19ESVJFTlQ2NF9CT0RZIH07CitzdHJ1Y3QgZGlyZW50NjQgeyBfX0RJUkVOVDY0X0JPRFkgfTsKKworI3VuZGVmIF9fRElSRU5UNjRfQk9EWQorCiAjZGVmaW5lIGRfZmlsZW5vIGRfaW5vCi0jZGVmaW5lIGRpcmVudDY0IGRpcmVudAogCiB0eXBlZGVmIHN0cnVjdCBESVIgRElSOwogCiBleHRlcm4gRElSKiBvcGVuZGlyKGNvbnN0IGNoYXIqKTsKIGV4dGVybiBESVIqIGZkb3BlbmRpcihpbnQpOwogZXh0ZXJuIHN0cnVjdCBkaXJlbnQqIHJlYWRkaXIoRElSKik7CitleHRlcm4gc3RydWN0IGRpcmVudDY0KiByZWFkZGlyNjQoRElSKik7CiBleHRlcm4gaW50IHJlYWRkaXJfcihESVIqLCBzdHJ1Y3QgZGlyZW50Kiwgc3RydWN0IGRpcmVudCoqKTsKK2V4dGVybiBpbnQgcmVhZGRpcjY0X3IoRElSKiwgc3RydWN0IGRpcmVudDY0Kiwgc3RydWN0IGRpcmVudDY0KiopOwogZXh0ZXJuIGludCBjbG9zZWRpcihESVIqKTsKIGV4dGVybiB2b2lkIHJld2luZGRpcihESVIqKTsKIGV4dGVybiBpbnQgZGlyZmQoRElSKik7CiBleHRlcm4gaW50IGFscGhhc29ydChjb25zdCBzdHJ1Y3QgZGlyZW50KiosIGNvbnN0IHN0cnVjdCBkaXJlbnQqKik7CitleHRlcm4gaW50IGFscGhhc29ydDY0KGNvbnN0IHN0cnVjdCBkaXJlbnQ2NCoqLCBjb25zdCBzdHJ1Y3QgZGlyZW50NjQqKik7CiBleHRlcm4gaW50IHNjYW5kaXIoY29uc3QgY2hhciosIHN0cnVjdCBkaXJlbnQqKiosIGludCAoKikoY29uc3Qgc3RydWN0IGRpcmVudCopLCBpbnQgKCopKGNvbnN0IHN0cnVjdCBkaXJlbnQqKiwgY29uc3Qgc3RydWN0IGRpcmVudCoqKSk7Ci1leHRlcm4gaW50IGdldGRlbnRzKHVuc2lnbmVkIGludCwgc3RydWN0IGRpcmVudCosIHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IHNjYW5kaXI2NChjb25zdCBjaGFyKiwgc3RydWN0IGRpcmVudDY0KioqLCBpbnQgKCopKGNvbnN0IHN0cnVjdCBkaXJlbnQ2NCopLCBpbnQgKCopKGNvbnN0IHN0cnVjdCBkaXJlbnQ2NCoqLCBjb25zdCBzdHJ1Y3QgZGlyZW50NjQqKikpOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZGxmY24uaCBiL2xpYmMvaW5jbHVkZS9kbGZjbi5oCmluZGV4IDdkYWE4ZjcuLjhkZGUwOGMgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9kbGZjbi5oCisrKyBiL2xpYmMvaW5jbHVkZS9kbGZjbi5oCkBAIC01MCwxNSArNTAsMjkgQEAKIGV4dGVybiBpbnQgICAgICAgICAgZGxhZGRyKGNvbnN0IHZvaWQqIGFkZHIsIERsX2luZm8gKmluZm8pOwogCiBlbnVtIHsKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorICBSVExEX05PVyAgPSAyLAorI2Vsc2UKICAgUlRMRF9OT1cgID0gMCwKKyNlbmRpZgogICBSVExEX0xBWlkgPSAxLAogCiAgIFJUTERfTE9DQUwgID0gMCwKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorICBSVExEX0dMT0JBTCA9IDB4MDAxMDAsCisjZWxzZQogICBSVExEX0dMT0JBTCA9IDIsCisjZW5kaWYKKyAgUlRMRF9OT0xPQUQgPSA0LAogfTsKIAorI2lmIGRlZmluZWQgKF9fTFA2NF9fKQorI2RlZmluZSBSVExEX0RFRkFVTFQgICgodm9pZCopIDApCisjZGVmaW5lIFJUTERfTkVYVCAgICAgKCh2b2lkKikgLTFMKQorI2Vsc2UKICNkZWZpbmUgUlRMRF9ERUZBVUxUICAoKHZvaWQqKSAweGZmZmZmZmZmKQogI2RlZmluZSBSVExEX05FWFQgICAgICgodm9pZCopIDB4ZmZmZmZmZmUpCisjZW5kaWYKIAogX19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2VsZi5oIGIvbGliYy9pbmNsdWRlL2VsZi5oCmluZGV4IDNmMmU0ZjIuLjA5NzViN2EgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9lbGYuaAorKysgYi9saWJjL2luY2x1ZGUvZWxmLmgKQEAgLTI4LDMzICsyOCw1NSBAQAogI2lmbmRlZiBfRUxGX0gKICNkZWZpbmUgX0VMRl9ICiAKLSNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxsaW51eC9hdXh2ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYtZW0uaD4KIAotLyogVE9ETzogY2FuIHdlIHN3aXRjaCB0byA8bGludXgvZWxmLmg+IGluc3RlYWQ/IGh0dHA6Ly9iLzEyNDc2MTI2LiAqLwotI2luY2x1ZGUgPHN5cy9leGVjX2VsZi5oPgorI2luY2x1ZGUgPG1hY2hpbmUvZWxmX21hY2hkZXAuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgewotICB1aW50MzJfdCBhX3R5cGU7CisgIF9fdTMyIGFfdHlwZTsKICAgdW5pb24gewotICAgIHVpbnQzMl90IGFfdmFsOworICAgIF9fdTMyIGFfdmFsOwogICB9IGFfdW47CiB9IEVsZjMyX2F1eHZfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotICB1aW50NjRfdCBhX3R5cGU7CisgIF9fdTY0IGFfdHlwZTsKICAgdW5pb24gewotICAgIHVpbnQ2NF90IGFfdmFsOworICAgIF9fdTY0IGFfdmFsOwogICB9IGFfdW47CiB9IEVsZjY0X2F1eHZfdDsKIAotI2lmZGVmIF9fTFA2NF9fCi0jICBkZWZpbmUgRWxmX2F1eHZfdCBFbGY2NF9hdXh2X3QKLSNlbHNlCi0jICBkZWZpbmUgRWxmX2F1eHZfdCBFbGYzMl9hdXh2X3QKLSNlbmRpZgorI2RlZmluZSBERl9PUklHSU4gICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgREZfU1lNQk9MSUMgICAweDAwMDAwMDAyCisjZGVmaW5lIERGX1RFWFRSRUwgICAgMHgwMDAwMDAwNAorI2RlZmluZSBERl9CSU5EX05PVyAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgREZfU1RBVElDX1RMUyAweDAwMDAwMDEwCiAKLS8qIDxzeXMvZXhlY19lbGYuaD4gZG9lc24ndCBjb250YWluIGFueSBOVF8gY29uc3RhbnRzLiBhYXJjaDY0IHN0cmFjZSBuZWVkcyB0aGlzIG9uZS4gKi8KLSNkZWZpbmUgTlRfUFJTVEFUVVMgMQorI2RlZmluZSBEVF9CSU5EX05PVyAyNAorI2RlZmluZSBEVF9JTklUX0FSUkFZIDI1CisjZGVmaW5lIERUX0ZJTklfQVJSQVkgMjYKKyNkZWZpbmUgRFRfSU5JVF9BUlJBWVNaIDI3CisjZGVmaW5lIERUX0ZJTklfQVJSQVlTWiAyOAorI2RlZmluZSBEVF9SVU5QQVRIIDI5CisjZGVmaW5lIERUX0ZMQUdTIDMwCisvKiBnbGliYyBhbmQgQlNEIGRpc2FncmVlIGZvciBEVF9FTkNPRElORzsgZ2xpYmMgbG9va3Mgd3JvbmcuICovCisjZGVmaW5lIERUX1BSRUlOSVRfQVJSQVkgMzIKKyNkZWZpbmUgRFRfUFJFSU5JVF9BUlJBWVNaIDMzCisKKyNkZWZpbmUgRUxGT1NBQklfU1lTViAwIC8qIFN5bm9ueW0gZm9yIEVMRk9TQUJJX05PTkUgdXNlZCBieSB2YWxncmluZC4gKi8KKworI2RlZmluZSBQVF9HTlVfUkVMUk8gMHg2NDc0ZTU1MgorCisjZGVmaW5lIFNUQl9MT09TICAgMTAKKyNkZWZpbmUgU1RCX0hJT1MgICAxMgorI2RlZmluZSBTVEJfTE9QUk9DIDEzCisjZGVmaW5lIFNUQl9ISVBST0MgMTUKKworI2RlZmluZSBTVFRfTE9PUyAgIDEwCisjZGVmaW5lIFNUVF9ISU9TICAgMTIKKyNkZWZpbmUgU1RUX0xPUFJPQyAxMworI2RlZmluZSBTVFRfSElQUk9DIDE1CiAKICNlbmRpZiAvKiBfRUxGX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9lcnIuaCBiL2xpYmMvaW5jbHVkZS9lcnIuaAppbmRleCBmMjRkYTYxLi5jYTYyYzllIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvZXJyLmgKKysrIGIvbGliYy9pbmNsdWRlL2Vyci5oCkBAIC0zMyw1NyArMzMsMjUgQEAKICAqLwogCiAjaWZuZGVmIF9FUlJfSF8KLSNkZWZpbmUJX0VSUl9IXworI2RlZmluZSBfRVJSX0hfCiAKLS8qCi0gKiBEb24ndCB1c2UgdmFfbGlzdCBpbiB0aGUgZXJyL3dhcm4gcHJvdG90eXBlcy4gICBWYV9saXN0IGlzIHR5cGVkZWYnZCBpbiB0d28KLSAqIHBsYWNlcyAoPG1hY2hpbmUvdmFyYXJncy5oPiBhbmQgPG1hY2hpbmUvc3RkYXJnLmg+KSwgc28gaWYgd2UgaW5jbHVkZSBvbmUKLSAqIG9mIHRoZW0gaGVyZSB3ZSBtYXkgY29sbGlkZSB3aXRoIHRoZSB1dGlsaXR5J3MgaW5jbHVkZXMuICBJdCdzIHVucmVhc29uYWJsZQotICogZm9yIHV0aWxpdGllcyB0byBoYXZlIHRvIGluY2x1ZGUgb25lIG9mIHRoZW0gdG8gaW5jbHVkZSBlcnIuaCwgc28gd2UgZ2V0Ci0gKiBfX3ZhX2xpc3QgZnJvbSA8bWFjaGluZS9fdHlwZXMuaD4gYW5kIHVzZSBpdC4KLSAqLwogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPG1hY2hpbmUvX3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKIF9fQkVHSU5fREVDTFMKIAotX19ub3JldHVybiB2b2lkCWVycihpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKQotCQkJX19wcmludGZsaWtlKDIsIDMpOwotX19ub3JldHVybiB2b2lkCXZlcnIoaW50LCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCkKLQkJCV9fcHJpbnRmbGlrZSgyLCAwKTsKLV9fbm9yZXR1cm4gdm9pZAllcnJ4KGludCwgY29uc3QgY2hhciAqLCAuLi4pCi0JCQlfX3ByaW50Zmxpa2UoMiwgMyk7Ci1fX25vcmV0dXJuIHZvaWQJdmVycngoaW50LCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCkKLQkJCV9fcHJpbnRmbGlrZSgyLCAwKTsKLXZvaWQJCXdhcm4oY29uc3QgY2hhciAqLCAuLi4pCi0JCQlfX3ByaW50Zmxpa2UoMSwgMik7Ci12b2lkCQl2d2Fybihjb25zdCBjaGFyICosIF9fdmFfbGlzdCkKLQkJCV9fcHJpbnRmbGlrZSgxLCAwKTsKLXZvaWQJCXdhcm54KGNvbnN0IGNoYXIgKiwgLi4uKQotCQkJX19wcmludGZsaWtlKDEsIDIpOwotdm9pZAkJdndhcm54KGNvbnN0IGNoYXIgKiwgX192YV9saXN0KQotCQkJX19wcmludGZsaWtlKDEsIDApOworLyogcHJpbnRmJ3MgZm9ybWF0IHN0cmluZyBpc24ndCBudWxsYWJsZTsgdGhlIGVyciBmYW1pbHkncyBvbmUgaXMsCisgKiBzbyB3ZSBjYW4ndCB1c2UgX19lcnJsaWtlIGhlcmUuICovCisjZGVmaW5lIF9fZXJybGlrZSh4LCB5KSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fKHByaW50ZiwgeCwgeSkpKQogCi0vKgotICogVGhlIF8qIHZlcnNpb25zIGFyZSBmb3IgdXNlIGluIGxpYnJhcnkgZnVuY3Rpb25zIHNvIHVzZXItZGVmaW5lZAotICogdmVyc2lvbnMgb2YgZXJyKix3YXJuKiBkbyBub3QgZ2V0IHVzZWQuCi0gKi8KLV9fbm9yZXR1cm4gdm9pZAlfZXJyKGludCwgY29uc3QgY2hhciAqLCAuLi4pCi0JCQlfX3ByaW50Zmxpa2UoMiwgMyk7Ci1fX25vcmV0dXJuIHZvaWQJX3ZlcnIoaW50LCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCkKLQkJCV9fcHJpbnRmbGlrZSgyLCAwKTsKLV9fbm9yZXR1cm4gdm9pZAlfZXJyeChpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKQotCQkJX19wcmludGZsaWtlKDIsIDMpOwotX19ub3JldHVybiB2b2lkCV92ZXJyeChpbnQsIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KQotCQkJX19wcmludGZsaWtlKDIsIDApOwotdm9pZAkJX3dhcm4oY29uc3QgY2hhciAqLCAuLi4pCi0JCQlfX3ByaW50Zmxpa2UoMSwgMik7Ci12b2lkCQlfdndhcm4oY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpCi0JCQlfX3ByaW50Zmxpa2UoMSwgMCk7Ci12b2lkCQlfd2FybngoY29uc3QgY2hhciAqLCAuLi4pCi0JCQlfX3ByaW50Zmxpa2UoMSwgMik7Ci12b2lkCQlfdndhcm54KGNvbnN0IGNoYXIgKiwgX192YV9saXN0KQotCQkJX19wcmludGZsaWtlKDEsIDApOworX19ub3JldHVybiB2b2lkIGVycihpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKSBfX2Vycmxpa2UoMiwgMyk7CitfX25vcmV0dXJuIHZvaWQgdmVycihpbnQsIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KSBfX2Vycmxpa2UoMiwgMCk7CitfX25vcmV0dXJuIHZvaWQgZXJyeChpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKSBfX2Vycmxpa2UoMiwgMyk7CitfX25vcmV0dXJuIHZvaWQgdmVycngoaW50LCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCkgX19lcnJsaWtlKDIsIDApOwordm9pZCB3YXJuKGNvbnN0IGNoYXIgKiwgLi4uKSBfX2Vycmxpa2UoMSwgMik7Cit2b2lkIHZ3YXJuKGNvbnN0IGNoYXIgKiwgX192YV9saXN0KSBfX2Vycmxpa2UoMSwgMCk7Cit2b2lkIHdhcm54KGNvbnN0IGNoYXIgKiwgLi4uKSBfX2Vycmxpa2UoMSwgMik7Cit2b2lkIHZ3YXJueChjb25zdCBjaGFyICosIF9fdmFfbGlzdCkgX19lcnJsaWtlKDEsIDApOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZXJybm8uaCBiL2xpYmMvaW5jbHVkZS9lcnJuby5oCmluZGV4IDJlNWNlNWYuLjFhMzZiN2EgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9lcnJuby5oCisrKyBiL2xpYmMvaW5jbHVkZS9lcnJuby5oCkBAIC00MSw3ICs0MSw3IEBACiAjZW5kaWYKIAogLyogaW50ZXJuYWwgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0aHJlYWQtc3BlY2lmaWMgZXJybm8gKi8KLWV4dGVybiB2b2xhdGlsZSBpbnQqICAgX19lcnJubyh2b2lkKTsKK2V4dGVybiB2b2xhdGlsZSBpbnQqIF9fZXJybm8odm9pZCkgX19wdXJlMjsKIAogLyogYSBtYWNybyBleHBhbmRpbmcgdG8gdGhlIGVycm5vIGwtdmFsdWUgKi8KICNkZWZpbmUgIGVycm5vICAgKCpfX2Vycm5vKCkpCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZmNudGwuaCBiL2xpYmMvaW5jbHVkZS9mY250bC5oCmluZGV4IGY2YTg5ZWYuLjhmODlhZmIgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9mY250bC5oCisrKyBiL2xpYmMvaW5jbHVkZS9mY250bC5oCkBAIC0zMywxOSArMzMsNTMgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mYWR2aXNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC91aW8uaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4gIC8qIHRoaXMgaXMgbm90IHJlcXVpcmVkLCBidXQgbWFrZXMgY2xpZW50IGNvZGUgbXVjaCBoYXBwaWVyICovCiAKIF9fQkVHSU5fREVDTFMKIAotI2lmbmRlZiBPX0FTWU5DCi0jZGVmaW5lIE9fQVNZTkMgIEZBU1lOQworI2lmZGVmIF9fTFA2NF9fCisvKiBMUDY0IGtlcm5lbHMgZG9uJ3QgaGF2ZSBmbG9jazY0IGJlY2F1c2UgdGhlaXIgZmxvY2sgaXMgNjQtYml0LiAqLworc3RydWN0IGZsb2NrNjQgeworICBzaG9ydCBsX3R5cGU7CisgIHNob3J0IGxfd2hlbmNlOworICBvZmY2NF90IGxfc3RhcnQ7CisgIG9mZjY0X3QgbF9sZW47CisgIHBpZF90IGxfcGlkOworfTsKKyNkZWZpbmUgRl9HRVRMSzY0ICBGX0dFVExLCisjZGVmaW5lIEZfU0VUTEs2NCAgRl9TRVRMSworI2RlZmluZSBGX1NFVExLVzY0IEZfU0VUTEtXCiAjZW5kaWYKIAotZXh0ZXJuIGludCAgb3Blbihjb25zdCBjaGFyKiAgcGF0aCwgaW50ICBtb2RlLCAuLi4pOwotZXh0ZXJuIGludCAgb3BlbmF0KGludCBmZCwgY29uc3QgY2hhciogIHBhdGgsIGludCAgbW9kZSwgLi4uKTsKLWV4dGVybiBpbnQgIHVubGlua2F0KGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmbGFncyk7Ci1leHRlcm4gaW50ICBmY250bChpbnQgICBmZCwgaW50ICAgY29tbWFuZCwgLi4uKTsKLWV4dGVybiBpbnQgIGNyZWF0KGNvbnN0IGNoYXIqICBwYXRoLCBtb2RlX3QgIG1vZGUpOworI2RlZmluZSBPX0FTWU5DIEZBU1lOQworCisjZGVmaW5lIFNQTElDRV9GX01PVkUgMQorI2RlZmluZSBTUExJQ0VfRl9OT05CTE9DSyAyCisjZGVmaW5lIFNQTElDRV9GX01PUkUgNAorI2RlZmluZSBTUExJQ0VfRl9HSUZUIDgKKworI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUgMQorI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV1JJVEUgMgorI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUiA0CisKK2V4dGVybiBpbnQgY3JlYXQoY29uc3QgY2hhciosIG1vZGVfdCk7CitleHRlcm4gaW50IGNyZWF0NjQoY29uc3QgY2hhciosIG1vZGVfdCk7CitleHRlcm4gaW50IGZhbGxvY2F0ZTY0KGludCwgaW50LCBvZmY2NF90LCBvZmY2NF90KTsKK2V4dGVybiBpbnQgZmFsbG9jYXRlKGludCwgaW50LCBvZmZfdCwgb2ZmX3QpOworZXh0ZXJuIGludCBmY250bChpbnQsIGludCwgLi4uKTsKK2V4dGVybiBpbnQgb3BlbmF0KGludCwgY29uc3QgY2hhciosIGludCwgLi4uKTsKK2V4dGVybiBpbnQgb3BlbmF0NjQoaW50LCBjb25zdCBjaGFyKiwgaW50LCAuLi4pOworZXh0ZXJuIGludCBvcGVuKGNvbnN0IGNoYXIqLCBpbnQsIC4uLik7CitleHRlcm4gaW50IG9wZW42NChjb25zdCBjaGFyKiwgaW50LCAuLi4pOworZXh0ZXJuIGludCBwb3NpeF9mYWR2aXNlNjQoaW50LCBvZmY2NF90LCBvZmY2NF90LCBpbnQpOworZXh0ZXJuIGludCBwb3NpeF9mYWR2aXNlKGludCwgb2ZmX3QsIG9mZl90LCBpbnQpOworZXh0ZXJuIGludCBwb3NpeF9mYWxsb2NhdGU2NChpbnQsIG9mZjY0X3QsIG9mZjY0X3QpOworZXh0ZXJuIGludCBwb3NpeF9mYWxsb2NhdGUoaW50LCBvZmZfdCwgb2ZmX3QpOworZXh0ZXJuIHNzaXplX3Qgc3BsaWNlKGludCwgb2ZmNjRfdCosIGludCwgb2ZmNjRfdCosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBzc2l6ZV90IHRlZShpbnQsIGludCwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCB1bmxpbmthdChpbnQsIGNvbnN0IGNoYXIqLCBpbnQpOworZXh0ZXJuIHNzaXplX3Qgdm1zcGxpY2UoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMqLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CiAKICNpZiBkZWZpbmVkKF9fQklPTklDX0ZPUlRJRlkpCiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9mdHcuaCBiL2xpYmMvaW5jbHVkZS9mdHcuaAppbmRleCAzYmViZWEzLi5hZjUyNGQwIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvZnR3LmgKKysrIGIvbGliYy9pbmNsdWRlL2Z0dy5oCkBAIC01Nyw2ICs1Nyw5IEBACiBpbnQJZnR3KGNvbnN0IGNoYXIgKiwgaW50ICgqKShjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCBzdGF0ICosIGludCksIGludCk7CiBpbnQJbmZ0dyhjb25zdCBjaGFyICosIGludCAoKikoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3Qgc3RhdCAqLCBpbnQsCiAJICAgIHN0cnVjdCBGVFcgKiksIGludCwgaW50KTsKK2ludAlmdHc2NChjb25zdCBjaGFyICosIGludCAoKikoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3Qgc3RhdDY0ICosIGludCksIGludCk7CitpbnQJbmZ0dzY0KGNvbnN0IGNoYXIgKiwgaW50ICgqKShjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCBzdGF0NjQgKiwgaW50LAorCSAgICBzdHJ1Y3QgRlRXICopLCBpbnQsIGludCk7CiBfX0VORF9ERUNMUwogCiAjZW5kaWYJLyogIV9GVFdfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2dycC5oIGIvbGliYy9pbmNsdWRlL2dycC5oCmluZGV4IDg2ZDk5ZjMuLmZjNGQ1MjAgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9ncnAuaAorKysgYi9saWJjL2luY2x1ZGUvZ3JwLmgKQEAgLTQzLDEwICs0Myw2IEBACiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKLSNpZiBfX0JTRF9WSVNJQkxFCi0jZGVmaW5lCV9QQVRIX0dST1VQCQkiL2V0Yy9ncm91cCIKLSNlbmRpZgotCiBzdHJ1Y3QgZ3JvdXAgewogCWNoYXIJKmdyX25hbWU7CQkvKiBncm91cCBuYW1lICovCiAJY2hhcgkqZ3JfcGFzc3dkOwkJLyogZ3JvdXAgcGFzc3dvcmQgKi8KQEAgLTU3LDcgKzUzLDcgQEAKIF9fQkVHSU5fREVDTFMKIHN0cnVjdCBncm91cAkqZ2V0Z3JnaWQoZ2lkX3QpOwogc3RydWN0IGdyb3VwCSpnZXRncm5hbShjb25zdCBjaGFyICopOwotI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19QT1NJWF9WSVNJQkxFID49IDIwMDExMiB8fCBfX1hQR19WSVNJQkxFCisjaWYgX19QT1NJWF9WSVNJQkxFID49IDIwMDExMiB8fCBfX1hQR19WSVNJQkxFCiBzdHJ1Y3QgZ3JvdXAJKmdldGdyZW50KHZvaWQpOwogdm9pZAkJIHNldGdyZW50KHZvaWQpOwogdm9pZAkJIGVuZGdyZW50KHZvaWQpOwpAQCAtNjYsMTEgKzYyLDYgQEAKIGludAkJIGdldGdybmFtX3IoY29uc3QgY2hhciAqLCBzdHJ1Y3QgZ3JvdXAgKiwgY2hhciAqLAogCQkgICAgc2l6ZV90LCBzdHJ1Y3QgZ3JvdXAgKiopOwogI2VuZGlmCi0jaWYgX19CU0RfVklTSUJMRQotdm9pZAkJIHNldGdyZmlsZShjb25zdCBjaGFyICopOwotaW50CQkgc2V0Z3JvdXBlbnQoaW50KTsKLWNoYXIJCSpncm91cF9mcm9tX2dpZChnaWRfdCwgaW50KTsKLSNlbmRpZgogCiBpbnQgICBnZXRncm91cGxpc3QgKGNvbnN0IGNoYXIgKnVzZXIsIGdpZF90IGdyb3VwLAogICAgICAgICAgICAgICAgICAgZ2lkX3QgKmdyb3VwcywgaW50ICpuZ3JvdXBzKTsKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9pbnR0eXBlcy5oIGIvbGliYy9pbmNsdWRlL2ludHR5cGVzLmgKaW5kZXggMmZkMjQxNS4uODg1M2MwOCAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2ludHR5cGVzLmgKKysrIGIvbGliYy9pbmNsdWRlL2ludHR5cGVzLmgKQEAgLTI1NCwxNiArMjU0LDE0IEBACiB9IGltYXhkaXZfdDsKIAogX19CRUdJTl9ERUNMUwotCiBpbnRtYXhfdAlpbWF4YWJzKGludG1heF90KSBfX3B1cmUyOwogaW1heGRpdl90CWltYXhkaXYoaW50bWF4X3QsIGludG1heF90KSBfX3B1cmUyOwotCiBpbnRtYXhfdAlzdHJ0b2ltYXgoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwogdWludG1heF90CXN0cnRvdW1heChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7Ci0KLWludG1heF90CXN0cm50b2ltYXgoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UsIHNpemVfdCBuKTsKLXVpbnRtYXhfdAlzdHJudG91bWF4KGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlLCBzaXplX3Qgbik7Ci0KK2ludG1heF90CXdjc3RvaW1heChjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCwKKwkJICAgIHdjaGFyX3QgKiogX19yZXN0cmljdCwgaW50KTsKK3VpbnRtYXhfdAl3Y3N0b3VtYXgoY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QsCisJCSAgICB3Y2hhcl90ICoqIF9fcmVzdHJpY3QsIGludCk7CiBfX0VORF9ERUNMUwogCiAjZW5kaWYgLyogX0lOVFRZUEVTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbGliZ2VuLmggYi9saWJjL2luY2x1ZGUvbGliZ2VuLmgKaW5kZXggYzVmYzc2YS4uOWRjZWM3NSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2xpYmdlbi5oCisrKyBiL2xpYmMvaW5jbHVkZS9saWJnZW4uaApAQCAtMzMsMjQgKzMzLDE1IEBACiAKIF9fQkVHSU5fREVDTFMKIAotLyogb3VyIHZlcnNpb24gb2YgZGlybmFtZS9iYXNlbmFtZSBkb24ndCBtb2RpZnkgdGhlIGlucHV0IHBhdGggKi8KLWV4dGVybiBjaGFyKiAgZGlybmFtZSAoY29uc3QgY2hhciogIHBhdGgpOwotZXh0ZXJuIGNoYXIqICBiYXNlbmFtZShjb25zdCBjaGFyKiAgcGF0aCk7CisvKiBPbiBBbmRyb2lkIHRoZXNlIGRvbid0IG1vZGlmeSB0aGVpciBpbnB1dCwgYW5kIHVzZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBmb3IgdGhlaXIgcmVzdWx0cy4gKi8KK2V4dGVybiBjaGFyKiBiYXNlbmFtZShjb25zdCBjaGFyKik7CitleHRlcm4gY2hhciogZGlybmFtZShjb25zdCBjaGFyKik7CiAKLS8qIHNwZWNpYWwgdGhyZWFkLXNhZmUgQmlvbmljIHZlcnNpb25zCi0gKgotICogaWYgJ2J1ZmZlcicgaXMgTlVMTCwgJ2J1ZmZsZW4nIGlzIGlnbm9yZWQgYW5kIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBpcyByZXR1cm5lZAotICogb3RoZXJ3aXNlLCBwbGFjZSByZXN1bHQgaW4gJ2J1ZmZlcicKLSAqCi0gKiBhdCBtb3N0IGJ1ZmZsZW4tMSBjaGFyYWN0ZXJzIHdyaXR0ZW4sIHBsdXMgYSB0ZXJtaW5hdGluZyB6ZXJvCi0gKgotICogcmV0dXJuIGxlbmd0aCBvZiByZXN1bHQsIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IsIHdpdGggZXJybm8gc2V0IHRvOgotICoKLSAqICAgIEVSQU5HRTogICAgICAgIGJ1ZmZlciBpcyB0b28gc2hvcnQKLSAqICAgIEVOQU1FVE9PTE9ORzogIHRoZSByZXN1bHQgaXMgdG9vIGxvbmcgZm9yIGEgdmFsaWQgcGF0aAotICovCi1leHRlcm4gaW50ICAgIGRpcm5hbWVfcihjb25zdCBjaGFyKiAgcGF0aCwgY2hhciogIGJ1ZmZlciwgc2l6ZV90ICBidWZmbGVuKTsKLWV4dGVybiBpbnQgICAgYmFzZW5hbWVfcihjb25zdCBjaGFyKiAgcGF0aCwgY2hhciogIGJ1ZmZlciwgc2l6ZV90ICBidWZmbGVuKTsKKyNpZiAhZGVmaW5lZChfX0xQNjRfXykKKy8qIFRoZXNlIG5vbi1zdGFuZGFyZCBmdW5jdGlvbnMgYXJlIG5vdCBuZWVkZWQgb24gQW5kcm9pZDsgYmFzZW5hbWUgYW5kIGRpcm5hbWUgdXNlIHRocmVhZC1sb2NhbCBzdG9yYWdlLiAqLworZXh0ZXJuIGludCBkaXJuYW1lX3IoY29uc3QgY2hhciosIGNoYXIqLCBzaXplX3QpOworZXh0ZXJuIGludCBiYXNlbmFtZV9yKGNvbnN0IGNoYXIqLCBjaGFyKiwgc2l6ZV90KTsKKyNlbmRpZgogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbGltaXRzLmggYi9saWJjL2luY2x1ZGUvbGltaXRzLmgKaW5kZXggYjlkNDM1NC4uZmIwOTY1NyAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2xpbWl0cy5oCisrKyBiL2xpYmMvaW5jbHVkZS9saW1pdHMuaApAQCAtMTA1LDkgKzEwNSwyNCBAQAogI2RlZmluZSBVTE9OR19MT05HX01BWCAgVUxMT05HX01BWAogI2VuZGlmCiAKKy8qIEJTRCBjb21wYXRpYmlsaXR5IGRlZmluaXRpb25zLiAqLworI2lmIF9fQlNEX1ZJU0lCTEUKKyNkZWZpbmUgU0laRV9UX01BWCBVTE9OR19NQVgKKyNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCisKKyNkZWZpbmUgU1NJWkVfTUFYIExPTkdfTUFYCisKKyNkZWZpbmUgTUJfTEVOX01BWCA0CisKKy8qIE5ldyBjb2RlIHNob3VsZCB1c2Ugc3lzY29uZihfU0NfUEFHRV9TSVpFKSBpbnN0ZWFkLiAqLworI2lmbmRlZiBQQUdFX1NJWkUKKyNkZWZpbmUgUEFHRV9TSVpFIDQwOTYKKyNlbmRpZgogI2lmbmRlZiBQQUdFU0laRQotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjZGVmaW5lICBQQUdFU0laRSAgUEFHRV9TSVpFCiAjZW5kaWYKIAorLyogZ2xpYmMncyBQQUdFX01BU0sgaXMgdGhlIGJpdHdpc2UgbmVnYXRpb24gb2YgQlNEJ3MhIFRPRE86IHJlbW92ZT8gKi8KKyNkZWZpbmUgUEFHRV9NQVNLICh+KFBBR0VfU0laRSAtIDEpKQorCiAjZW5kaWYgLyogIV9MSU1JVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9saW5rLmggYi9saWJjL2luY2x1ZGUvbGluay5oCmluZGV4IDM0MWZiZjEuLmNiOGUxMzkgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9saW5rLmgKKysrIGIvbGliYy9pbmNsdWRlL2xpbmsuaApAQCAtMzMsNyArMzMsMTEgQEAKIAogX19CRUdJTl9ERUNMUwogCi0jZGVmaW5lIEVsZlcodHlwZSkgRWxmXyMjdHlwZQorI2lmIF9fTFA2NF9fCisjZGVmaW5lIEVsZlcodHlwZSkgRWxmNjRfICMjIHR5cGUKKyNlbHNlCisjZGVmaW5lIEVsZlcodHlwZSkgRWxmMzJfICMjIHR5cGUKKyNlbmRpZgogCiBzdHJ1Y3QgZGxfcGhkcl9pbmZvIHsKICAgRWxmVyhBZGRyKSBkbHBpX2FkZHI7CkBAIC00MiwxMyArNDYsMzUgQEAKICAgRWxmVyhIYWxmKSBkbHBpX3BobnVtOwogfTsKIAotaW50IGRsX2l0ZXJhdGVfcGhkcihpbnQgKCpjYikoc3RydWN0IGRsX3BoZHJfaW5mbyosIHNpemVfdCwgdm9pZCopLCB2b2lkKik7CitpbnQgZGxfaXRlcmF0ZV9waGRyKGludCAoKikoc3RydWN0IGRsX3BoZHJfaW5mbyosIHNpemVfdCwgdm9pZCopLCB2b2lkKik7CiAKICNpZmRlZiBfX2FybV9fCiB0eXBlZGVmIGxvbmcgdW5zaWduZWQgaW50KiBfVW53aW5kX1B0cjsKLV9VbndpbmRfUHRyIGRsX3Vud2luZF9maW5kX2V4aWR4KF9VbndpbmRfUHRyIHBjLCBpbnQqIHBjb3VudCk7CitfVW53aW5kX1B0ciBkbF91bndpbmRfZmluZF9leGlkeChfVW53aW5kX1B0ciwgaW50Kik7CiAjZW5kaWYKIAorLyogVXNlZCBieSB0aGUgZHluYW1pYyBsaW5rZXIgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZGVidWdnZXIuICovCitzdHJ1Y3QgbGlua19tYXAgeworICBFbGZXKEFkZHIpIGxfYWRkcjsKKyAgY2hhciogbF9uYW1lOworICBFbGZXKER5bikqIGxfbGQ7CisgIHN0cnVjdCBsaW5rX21hcCogbF9uZXh0OworICBzdHJ1Y3QgbGlua19tYXAqIGxfcHJldjsKK307CisKKy8qIFVzZWQgYnkgdGhlIGR5bmFtaWMgbGlua2VyIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGRlYnVnZ2VyLiAqLworc3RydWN0IHJfZGVidWcgeworICBpbnQzMl90IHJfdmVyc2lvbjsKKyAgc3RydWN0IGxpbmtfbWFwKiByX21hcDsKKyAgRWxmVyhBZGRyKSByX2JyazsKKyAgZW51bSB7CisgICAgUlRfQ09OU0lTVEVOVCwKKyAgICBSVF9BREQsCisgICAgUlRfREVMRVRFCisgIH0gcl9zdGF0ZTsKKyAgRWxmVyhBZGRyKSByX2xkYmFzZTsKK307CisKIF9fRU5EX0RFQ0xTCiAKICNlbmRpZiAvKiBfTElOS19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2xvY2FsZS5oIGIvbGliYy9pbmNsdWRlL2xvY2FsZS5oCmluZGV4IDY1YjVjN2QuLjdmZDhjMmMgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9sb2NhbGUuaAorKysgYi9saWJjL2luY2x1ZGUvbG9jYWxlLmgKQEAgLTI5LDMxICsyOSw3OCBAQAogI2RlZmluZSBfTE9DQUxFX0hfCiAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDx4bG9jYWxlLmg+CiAKIF9fQkVHSU5fREVDTFMKIAotZW51bSB7Ci0gICAgTENfQ1RZUEUgICAgID0gMCwKLSAgICBMQ19OVU1FUklDICAgPSAxLAotICAgIExDX1RJTUUgICAgICA9IDIsCi0gICAgTENfQ09MTEFURSAgID0gMywKLSAgICBMQ19NT05FVEFSWSAgPSA0LAotICAgIExDX01FU1NBR0VTICA9IDUsCi0gICAgTENfQUxMICAgICAgID0gNiwKLSAgICBMQ19QQVBFUiAgICAgPSA3LAotICAgIExDX05BTUUgICAgICA9IDgsCi0gICAgTENfQUREUkVTUyAgID0gOSwKKyNkZWZpbmUgTENfQ1RZUEUgICAgICAgICAgIDAKKyNkZWZpbmUgTENfTlVNRVJJQyAgICAgICAgIDEKKyNkZWZpbmUgTENfVElNRSAgICAgICAgICAgIDIKKyNkZWZpbmUgTENfQ09MTEFURSAgICAgICAgIDMKKyNkZWZpbmUgTENfTU9ORVRBUlkgICAgICAgIDQKKyNkZWZpbmUgTENfTUVTU0FHRVMgICAgICAgIDUKKyNkZWZpbmUgTENfQUxMICAgICAgICAgICAgIDYKKyNkZWZpbmUgTENfUEFQRVIgICAgICAgICAgIDcKKyNkZWZpbmUgTENfTkFNRSAgICAgICAgICAgIDgKKyNkZWZpbmUgTENfQUREUkVTUyAgICAgICAgIDkKKyNkZWZpbmUgTENfVEVMRVBIT05FICAgICAgMTAKKyNkZWZpbmUgTENfTUVBU1VSRU1FTlQgICAgMTEKKyNkZWZpbmUgTENfSURFTlRJRklDQVRJT04gMTIKIAotICAgIExDX1RFTEVQSE9ORSAgICAgID0gMTAsCi0gICAgTENfTUVBU1VSRU1FTlQgICAgPSAxMSwKLSAgICBMQ19JREVOVElGSUNBVElPTiA9IDEyCisjZGVmaW5lIExDX0NUWVBFX01BU0sgICAgICAgICAgKDEgPDwgTENfQ1RZUEUpCisjZGVmaW5lIExDX05VTUVSSUNfTUFTSyAgICAgICAgKDEgPDwgTENfTlVNRVJJQykKKyNkZWZpbmUgTENfVElNRV9NQVNLICAgICAgICAgICAoMSA8PCBMQ19USU1FKQorI2RlZmluZSBMQ19DT0xMQVRFX01BU0sgICAgICAgICgxIDw8IExDX0NPTExBVEUpCisjZGVmaW5lIExDX01PTkVUQVJZX01BU0sgICAgICAgKDEgPDwgTENfTU9ORVRBUlkpCisjZGVmaW5lIExDX01FU1NBR0VTX01BU0sgICAgICAgKDEgPDwgTENfTUVTU0FHRVMpCisjZGVmaW5lIExDX1BBUEVSX01BU0sgICAgICAgICAgKDEgPDwgTENfUEFQRVIpCisjZGVmaW5lIExDX05BTUVfTUFTSyAgICAgICAgICAgKDEgPDwgTENfTkFNRSkKKyNkZWZpbmUgTENfQUREUkVTU19NQVNLICAgICAgICAoMSA8PCBMQ19BRERSRVNTKQorI2RlZmluZSBMQ19URUxFUEhPTkVfTUFTSyAgICAgICgxIDw8IExDX1RFTEVQSE9ORSkKKyNkZWZpbmUgTENfTUVBU1VSRU1FTlRfTUFTSyAgICAoMSA8PCBMQ19NRUFTVVJFTUVOVCkKKyNkZWZpbmUgTENfSURFTlRJRklDQVRJT05fTUFTSyAoMSA8PCBMQ19JREVOVElGSUNBVElPTikKKworI2RlZmluZSBMQ19BTExfTUFTSyAoTENfQ1RZUEVfTUFTSyB8IExDX05VTUVSSUNfTUFTSyB8IExDX1RJTUVfTUFTSyB8IExDX0NPTExBVEVfTUFTSyB8IFwKKyAgICAgICAgICAgICAgICAgICAgIExDX01PTkVUQVJZX01BU0sgfCBMQ19NRVNTQUdFU19NQVNLIHwgTENfUEFQRVJfTUFTSyB8IExDX05BTUVfTUFTSyB8IFwKKyAgICAgICAgICAgICAgICAgICAgIExDX0FERFJFU1NfTUFTSyB8IExDX1RFTEVQSE9ORV9NQVNLIHwgTENfTUVBU1VSRU1FTlRfTUFTSyB8IFwKKyAgICAgICAgICAgICAgICAgICAgIExDX0lERU5USUZJQ0FUSU9OX01BU0spCisKK3N0cnVjdCBsY29udiB7CisgICAgY2hhciogZGVjaW1hbF9wb2ludDsKKyAgICBjaGFyKiB0aG91c2FuZHNfc2VwOworICAgIGNoYXIqIGdyb3VwaW5nOworICAgIGNoYXIqIGludF9jdXJyX3N5bWJvbDsKKyAgICBjaGFyKiBjdXJyZW5jeV9zeW1ib2w7CisgICAgY2hhciogbW9uX2RlY2ltYWxfcG9pbnQ7CisgICAgY2hhciogbW9uX3Rob3VzYW5kc19zZXA7CisgICAgY2hhciogbW9uX2dyb3VwaW5nOworICAgIGNoYXIqIHBvc2l0aXZlX3NpZ247CisgICAgY2hhciogbmVnYXRpdmVfc2lnbjsKKyAgICBjaGFyICBpbnRfZnJhY19kaWdpdHM7CisgICAgY2hhciAgZnJhY19kaWdpdHM7CisgICAgY2hhciAgcF9jc19wcmVjZWRlczsKKyAgICBjaGFyICBwX3NlcF9ieV9zcGFjZTsKKyAgICBjaGFyICBuX2NzX3ByZWNlZGVzOworICAgIGNoYXIgIG5fc2VwX2J5X3NwYWNlOworICAgIGNoYXIgIHBfc2lnbl9wb3NuOworICAgIGNoYXIgIG5fc2lnbl9wb3NuOworICAgIGNoYXIgIGludF9wX2NzX3ByZWNlZGVzOworICAgIGNoYXIgIGludF9wX3NlcF9ieV9zcGFjZTsKKyAgICBjaGFyICBpbnRfbl9jc19wcmVjZWRlczsKKyAgICBjaGFyICBpbnRfbl9zZXBfYnlfc3BhY2U7CisgICAgY2hhciAgaW50X3Bfc2lnbl9wb3NuOworICAgIGNoYXIgIGludF9uX3NpZ25fcG9zbjsKIH07CiAKLWV4dGVybiBjaGFyICpzZXRsb2NhbGUoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpOworc3RydWN0IGxjb252KiBsb2NhbGVjb252KHZvaWQpOwogCi0vKiBNYWtlIGxpYnN0ZGMrKy12MyBoYXBweS4gICovCi1zdHJ1Y3QgbGNvbnYgeyB9Owotc3RydWN0IGxjb252ICpsb2NhbGVjb252KHZvaWQpOworbG9jYWxlX3QgZHVwbG9jYWxlKGxvY2FsZV90KTsKK3ZvaWQgZnJlZWxvY2FsZShsb2NhbGVfdCk7Citsb2NhbGVfdCBuZXdsb2NhbGUoaW50LCBjb25zdCBjaGFyKiwgbG9jYWxlX3QpOworY2hhciogc2V0bG9jYWxlKGludCwgY29uc3QgY2hhciopOworbG9jYWxlX3QgdXNlbG9jYWxlKGxvY2FsZV90KTsKKworI2RlZmluZSBMQ19HTE9CQUxfTE9DQUxFICgobG9jYWxlX3QpIC0xTCkKIAogX19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL21hY2hpbmUvaWVlZS5oIGIvbGliYy9pbmNsdWRlL21hY2hpbmUvaWVlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1Nzk5NjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbWFjaGluZS9pZWVlLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCSRPcGVuQlNEOiBpZWVlLmgsdiAxLjQgMjAxMS8xMS8wOCAxNzowNjo1MSBkZXJhYWR0IEV4cCAkCSovCisvKgkkTmV0QlNEOiBpZWVlLmgsdiAxLjIgMjAwMS8wMi8yMSAxNzo0Mzo1MCBiamgyMSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgdGhlIENvbXB1dGVyIFN5c3RlbXMgRW5naW5lZXJpbmcgZ3JvdXAKKyAqIGF0IExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkgdW5kZXIgREFSUEEgY29udHJhY3QgQkcgOTEtNjYgYW5kCisgKiBjb250cmlidXRlZCB0byBCZXJrZWxleS4KKyAqCisgKiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpaWVlZS5oCTguMSAoQmVya2VsZXkpIDYvMTEvOTMKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX0lFRUVfSF8KKyNkZWZpbmUgX01BQ0hJTkVfSUVFRV9IXworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19fQkVHSU5fREVDTFMKKworI2RlZmluZSBTTkdfRVhQQklUUwk4CisjZGVmaW5lIFNOR19GUkFDQklUUwkyMworCisjZGVmaW5lIFNOR19FWFBfSU5GTkFOCTI1NQorI2RlZmluZSBTTkdfRVhQX0JJQVMJMTI3CisKK3N0cnVjdCBpZWVlX3NpbmdsZSB7CisgIHVuc2lnbmVkIHNuZ19mcmFjOjIzOworICB1bnNpZ25lZCBzbmdfZXhwOjg7CisgIHVuc2lnbmVkIHNuZ19zaWduOjE7Cit9OworCisjZGVmaW5lIERCTF9FWFBCSVRTCTExCisjZGVmaW5lIERCTF9GUkFDSEJJVFMJMjAKKyNkZWZpbmUgREJMX0ZSQUNMQklUUwkzMgorI2RlZmluZSBEQkxfRlJBQ0JJVFMJNTIKKworI2RlZmluZSBEQkxfRVhQX0lORk5BTgkyMDQ3CisjZGVmaW5lIERCTF9FWFBfQklBUwkxMDIzCisKK3N0cnVjdCBpZWVlX2RvdWJsZSB7CisgIHVuc2lnbmVkIGRibF9mcmFjbDsKKyAgdW5zaWduZWQgZGJsX2ZyYWNoOjIwOworICB1bnNpZ25lZCBkYmxfZXhwOjExOworICB1bnNpZ25lZCBkYmxfc2lnbjoxOworfTsKKworI2lmIF9fTFA2NF9fCisKKy8qIDY0LWJpdCBBbmRyb2lkIHVzZXMgbGQxMjggbG9uZyBkb3VibGVzLiAqLworCisjZGVmaW5lIEVYVF9FWFBCSVRTCTE1CisjZGVmaW5lIEVYVF9GUkFDSEJJVFMJMTYKKyNkZWZpbmUgRVhUX0ZSQUNITUJJVFMJMzIKKyNkZWZpbmUgRVhUX0ZSQUNMTUJJVFMJMzIKKyNkZWZpbmUgRVhUX0ZSQUNMQklUUwkzMgorI2RlZmluZSBFWFRfRlJBQ0JJVFMJMTEyCisKKyNkZWZpbmUgRVhUX0VYUF9JTkZOQU4JMzI3NjcKKyNkZWZpbmUgRVhUX0VYUF9CSUFTCTE2MzgzCisKKyNkZWZpbmUgRVhUX0lNUExJQ0lUX05CSVQKKworI2RlZmluZSBFWFRfVE9fQVJSQVkzMihwLCBhKSBkbyB7IFwKKyAgKGEpWzBdID0gKHVpbnQzMl90KShwKS0+ZXh0X2ZyYWNsOyBcCisgIChhKVsxXSA9ICh1aW50MzJfdCkocCktPmV4dF9mcmFjbG07IFwKKyAgKGEpWzJdID0gKHVpbnQzMl90KShwKS0+ZXh0X2ZyYWNobTsgXAorICAoYSlbM10gPSAodWludDMyX3QpKHApLT5leHRfZnJhY2g7IFwKK30gd2hpbGUoMCkKKworc3RydWN0IGllZWVfZXh0IHsKKyAgdW5zaWduZWQgZXh0X2ZyYWNsOworICB1bnNpZ25lZCBleHRfZnJhY2xtOworICB1bnNpZ25lZCBleHRfZnJhY2htOworICB1bnNpZ25lZCBleHRfZnJhY2g6MTY7CisgIHVuc2lnbmVkIGV4dF9leHA6MTU7CisgIHVuc2lnbmVkIGV4dF9zaWduOjE7Cit9OworCisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9NQUNISU5FX0lFRUVfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9tYWNoaW5lL3djaGFyX2xpbWl0cy5oIGIvbGliYy9pbmNsdWRlL21hY2hpbmUvd2NoYXJfbGltaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjYmQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9tYWNoaW5lL3djaGFyX2xpbWl0cy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9XQ0hBUl9MSU1JVFNfSF8KKyNkZWZpbmUgX01BQ0hJTkVfV0NIQVJfTElNSVRTX0hfCisKKy8qIEJvdGggR0NDIGFuZCBjbGFuZyBkZWZpbmUgX19XQ0hBUl9NQVhfXy4gKi8KKyNkZWZpbmUgV0NIQVJfTUFYIF9fV0NIQVJfTUFYX18KKworLyogQXMgb2YgMy40LCBjbGFuZyBzdGlsbCBkb2Vzbid0IGRlZmluZSBfX1dDSEFSX01JTl9fLiAqLworI2lmIGRlZmluZWQoX19XQ0hBUl9VTlNJR05FRF9fKQorIyAgZGVmaW5lIFdDSEFSX01JTiBMJ1wwJworI2Vsc2UKKyMgIGRlZmluZSBXQ0hBUl9NSU4gKC0oV0NIQVJfTUFYKSAtIDEpCisjZW5kaWYKKworI2VuZGlmIC8qIF9NQUNISU5FX1dDSEFSX0xJTUlUU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL21hbGxvYy5oIGIvbGliYy9pbmNsdWRlL21hbGxvYy5oCmluZGV4IDlhNGUzMjQuLmU2ZWEyNzYgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9tYWxsb2MuaAorKysgYi9saWJjL2luY2x1ZGUvbWFsbG9jLmgKQEAgLTM1LDkgKzM1LDYgQEAKIGV4dGVybiB2b2lkKiBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZV9jb3VudCkgX19tYWxsb2NmdW5jIF9fd3VyIF9fYXR0cmlidXRlX18oKGFsbG9jX3NpemUoMikpKTsKIGV4dGVybiBzaXplX3QgbWFsbG9jX3VzYWJsZV9zaXplKGNvbnN0IHZvaWQqIHApOwogCi1leHRlcm4gdm9pZCogdmFsbG9jKHNpemVfdCBieXRlX2NvdW50KSBfX21hbGxvY2Z1bmMgX193dXIgX19hdHRyaWJ1dGVfXygoYWxsb2Nfc2l6ZSgxKSkpOwotZXh0ZXJuIHZvaWQqIHB2YWxsb2Moc2l6ZV90IGJ5dGVfY291bnQpIF9fbWFsbG9jZnVuYyBfX3d1ciBfX2F0dHJpYnV0ZV9fKChhbGxvY19zaXplKDEpKSk7Ci0KICNpZm5kZWYgU1RSVUNUX01BTExJTkZPX0RFQ0xBUkVECiAjZGVmaW5lIFNUUlVDVF9NQUxMSU5GT19ERUNMQVJFRCAxCiBzdHJ1Y3QgbWFsbGluZm8gewpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL21udGVudC5oIGIvbGliYy9pbmNsdWRlL21udGVudC5oCmluZGV4IDZjYzBiMTguLmRlMjg1ZDAgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9tbnRlbnQuaAorKysgYi9saWJjL2luY2x1ZGUvbW50ZW50LmgKQEAgLTM1LDIzICszNSwyMSBAQAogI2RlZmluZSBNT1VOVEVEIF9QQVRIX01PVU5URUQKICNkZWZpbmUgTU5UVFlQRV9JR05PUkUgImlnbm9yZSIKIAotc3RydWN0IG1udGVudAotewotICAgIGNoYXIqIG1udF9mc25hbWU7Ci0gICAgY2hhciogbW50X2RpcjsKLSAgICBjaGFyKiBtbnRfdHlwZTsKLSAgICBjaGFyKiBtbnRfb3B0czsKLSAgICBpbnQgbW50X2ZyZXE7Ci0gICAgaW50IG1udF9wYXNzbm87CitzdHJ1Y3QgbW50ZW50IHsKKyAgY2hhciogbW50X2ZzbmFtZTsKKyAgY2hhciogbW50X2RpcjsKKyAgY2hhciogbW50X3R5cGU7CisgIGNoYXIqIG1udF9vcHRzOworICBpbnQgbW50X2ZyZXE7CisgIGludCBtbnRfcGFzc25vOwogfTsKIAotCiBfX0JFR0lOX0RFQ0xTCiAKLQotc3RydWN0IG1udGVudCogZ2V0bW50ZW50KEZJTEUqKTsKLUZJTEUqIHNldG1udGVudChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogaW50IGVuZG1udGVudChGSUxFKik7CitzdHJ1Y3QgbW50ZW50KiBnZXRtbnRlbnQoRklMRSopOworc3RydWN0IG1udGVudCogZ2V0bW50ZW50X3IoRklMRSosIHN0cnVjdCBtbnRlbnQqLCBjaGFyKiwgaW50KTsKK0ZJTEUqIHNldG1udGVudChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbmV0ZGIuaCBiL2xpYmMvaW5jbHVkZS9uZXRkYi5oCmluZGV4IDYyYTdhM2MuLjUyN2Q1YzEgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9uZXRkYi5oCisrKyBiL2xpYmMvaW5jbHVkZS9uZXRkYi5oCkBAIC0xOTYsNiArMTk2LDggQEAKICNkZWZpbmUJU0NPUEVfREVMSU1JVEVSCSclJwogCiBfX0JFR0lOX0RFQ0xTCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goZGVmYXVsdCkKKwogLyogQklPTklDLUJFR0lOICovCiAjZGVmaW5lICBoX2Vycm5vICAgKCpfX2dldF9oX2Vycm5vKCkpCiBpbnQqICBfX2dldF9oX2Vycm5vKHZvaWQpOwpAQCAtMjA3LDEzICsyMDksMTEgQEAKIHZvaWQgZW5kc2VydmVudCh2b2lkKTsKIHZvaWQgZnJlZWhvc3RlbnQoc3RydWN0IGhvc3RlbnQgKik7CiBzdHJ1Y3QgaG9zdGVudAkqZ2V0aG9zdGJ5YWRkcihjb25zdCB2b2lkICosIHNvY2tsZW5fdCwgaW50KTsKLXN0cnVjdCBob3N0ZW50CSphbmRyb2lkX2dldGhvc3RieWFkZHJmb3JpZmFjZShjb25zdCB2b2lkICosIHNvY2tsZW5fdCwgaW50LCBjb25zdCBjaGFyKiwgaW50KTsKIGludCBnZXRob3N0YnlhZGRyX3IoY29uc3Qgdm9pZCAqLCBpbnQsIGludCwgc3RydWN0IGhvc3RlbnQgKiwgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBob3N0ZW50ICoqLCBpbnQgKik7CiBzdHJ1Y3QgaG9zdGVudAkqZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICopOwogaW50IGdldGhvc3RieW5hbWVfcihjb25zdCBjaGFyICosIHN0cnVjdCBob3N0ZW50ICosIGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgaG9zdGVudCAqKiwgaW50ICopOwogc3RydWN0IGhvc3RlbnQJKmdldGhvc3RieW5hbWUyKGNvbnN0IGNoYXIgKiwgaW50KTsKIGludCBnZXRob3N0YnluYW1lMl9yKGNvbnN0IGNoYXIgKiwgaW50LCBzdHJ1Y3QgaG9zdGVudCAqLCBjaGFyICosIHNpemVfdCwgc3RydWN0IGhvc3RlbnQgKiosIGludCAqKTsKLXN0cnVjdCBob3N0ZW50CSphbmRyb2lkX2dldGhvc3RieW5hbWVmb3JpZmFjZShjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqLCBpbnQpOwogc3RydWN0IGhvc3RlbnQJKmdldGhvc3RlbnQodm9pZCk7CiBpbnQgZ2V0aG9zdGVudF9yKHN0cnVjdCBob3N0ZW50ICosIGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgaG9zdGVudCAqKiwgaW50ICopOwogc3RydWN0IGhvc3RlbnQJKmdldGlwbm9kZWJ5YWRkcihjb25zdCB2b2lkICosIHNpemVfdCwgaW50LCBpbnQgKik7CkBAIC0yNDEsMTQgKzI0MSwxMyBAQAogdm9pZCBzZXRuZXRlbnQoaW50KTsKIHZvaWQgc2V0cHJvdG9lbnQoaW50KTsKIGludCBnZXRhZGRyaW5mbyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IGFkZHJpbmZvICosIHN0cnVjdCBhZGRyaW5mbyAqKik7Ci1pbnQgYW5kcm9pZF9nZXRhZGRyaW5mb2ZvcmlmYWNlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqLCBpbnQsIHN0cnVjdCBhZGRyaW5mbyAqKik7CiBpbnQgZ2V0bmFtZWluZm8oY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCwgY2hhciAqLCBzaXplX3QsIGNoYXIgKiwgc2l6ZV90LCBpbnQpOwotaW50IGFuZHJvaWRfZ2V0bmFtZWluZm9mb3JpZmFjZShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90LCBjaGFyICosIHNpemVfdCwgY2hhciAqLCBzaXplX3QsIGludCwgY29uc3QgY2hhciAqLCBpbnQpOwogdm9pZCBmcmVlYWRkcmluZm8oc3RydWN0IGFkZHJpbmZvICopOwogY29uc3QgY2hhcgkqZ2FpX3N0cmVycm9yKGludCk7CiB2b2lkIHNldG5ldGdyZW50KGNvbnN0IGNoYXIgKik7CiB2b2lkIHNldHNlcnZlbnQoaW50KTsKIAorI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKIF9fRU5EX0RFQ0xTCiAKICNlbmRpZiAvKiAhX05FVERCX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbnNzd2l0Y2guaCBiL2xpYmMvaW5jbHVkZS9uc3N3aXRjaC5oCmluZGV4IGQxOWQwNTUuLmFmODg0MzMgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9uc3N3aXRjaC5oCisrKyBiL2xpYmMvaW5jbHVkZS9uc3N3aXRjaC5oCkBAIC0xLDQgKzEsNCBAQAotLyoJJE5ldEJTRDogbnNzd2l0Y2guaCx2IDEuMTggMjAwNS8xMS8yOSAwMzoxMjo1OCBjaHJpc3RvcyBFeHAgJAkqLworLyoJJE5ldEJTRDogbnNzd2l0Y2guaCx2IDEuMjEgMjAxMS8wNy8xNyAyMDo1NDozNCBqb2VyZyBFeHAgJAkqLwogCiAvKi0KICAqIENvcHlyaWdodCAoYykgMTk5NywgMTk5OCwgMTk5OSwgMjAwNCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KQEAgLTE1LDEzICsxNSw2IEBACiAgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAotICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUwogICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECkBAIC01NCw3ICs0Nyw3IEBACiAvKgogICogTGF5b3V0IG9mOgogICoJdWludDMyX3QgbnNfc3JjLmZsYWdzCi0gKi8gCisgKi8KIAkvKiBuc3N3aXRjaC5jb25mIHN0YXR1cyBjb2RlcyBhbmQgbnNkaXNwYXRjaCgzKSByZXR1cm4gdmFsdWVzICovCiAjZGVmaW5lCU5TX1NVQ0NFU1MJKDE8PDApCQkvKiBlbnRyeSB3YXMgZm91bmQgKi8KICNkZWZpbmUJTlNfVU5BVkFJTAkoMTw8MSkJCS8qIHNvdXJjZSBub3QgcmVzcG9uZGluZywgb3IgY29ycnVwdCAqLwpAQCAtMTI1LDcgKzExOCw3IEBACiAgKi8KICNkZWZpbmUgTlNfRklMRVNfQ0IoRixDKQl7IE5TU1JDX0ZJTEVTLAlGLAlfX1VOQ09OU1QoQykgfSwKICNkZWZpbmUgTlNfQ09NUEFUX0NCKEYsQykJeyBOU1NSQ19DT01QQVQsCUYsCV9fVU5DT05TVChDKSB9LAotIAorCiAjaWZkZWYgSEVTSU9ECiAjICAgZGVmaW5lIE5TX0ROU19DQihGLEMpCXsgTlNTUkNfRE5TLAlGLAlfX1VOQ09OU1QoQykgfSwKICNlbHNlCkBAIC0xMzcsNiArMTMwLDcgQEAKICNlbHNlCiAjICAgZGVmaW5lIE5TX05JU19DQihGLEMpCiAjZW5kaWYKKyNkZWZpbmUJTlNfTlVMTF9DQgkJeyAuc3JjID0gTlVMTCB9LAogCiAvKgogICogbnNfc3JjIC0gYG5zc3dpdGNoIHNvdXJjZScKQEAgLTIyMSw3ICsyMTUsNyBAQAogCiBfX0JFR0lOX0RFQ0xTCiBpbnQJbnNkaXNwYXRjaCh2b2lkICosIGNvbnN0IG5zX2R0YWIgW10sIGNvbnN0IGNoYXIgKiwKLQkJCWNvbnN0IGNoYXIgKiwgY29uc3QgbnNfc3JjIFtdLCAuLi4pOworCQkJY29uc3QgY2hhciAqLCBjb25zdCBuc19zcmMgW10sIC4uLikgX19MSUJDX0FCSV9QVUJMSUNfXzsKIAogI2lmZGVmIF9OU19QUklWQVRFCiBpbnQJCSBfbnNkYnRhZGRzcmMobnNfZGJ0ICosIGNvbnN0IG5zX3NyYyAqKTsKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9wdGhyZWFkLmggYi9saWJjL2luY2x1ZGUvcHRocmVhZC5oCmluZGV4IGM1MzgwYmUuLjg2YTEwMDUgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9wdGhyZWFkLmgKKysrIGIvbGliYy9pbmNsdWRlL3B0aHJlYWQuaApAQCAtMzUsMTcgKzM1LDI2IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorICAjZGVmaW5lIF9fUkVTRVJWRURfSU5JVElBTElaRVIgLCB7MH0KKyNlbHNlCisgICNkZWZpbmUgX19SRVNFUlZFRF9JTklUSUFMSVpFUgorI2VuZGlmCisKIHR5cGVkZWYgc3RydWN0IHsKICAgaW50IHZvbGF0aWxlIHZhbHVlOworI2lmZGVmIF9fTFA2NF9fCisgIGNoYXIgX19yZXNlcnZlZFszNl07CisjZW5kaWYKIH0gcHRocmVhZF9tdXRleF90OwogCiAjZGVmaW5lICBfX1BUSFJFQURfTVVURVhfSU5JVF9WQUxVRSAgICAgICAgICAgIDAKICNkZWZpbmUgIF9fUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVF9WQUxVRSAgMHg0MDAwCiAjZGVmaW5lICBfX1BUSFJFQURfRVJST1JDSEVDS19NVVRFWF9JTklUX1ZBTFVFIDB4ODAwMAogCi0jZGVmaW5lICBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSICAgICAgICAgICAgIHtfX1BUSFJFQURfTVVURVhfSU5JVF9WQUxVRX0KLSNkZWZpbmUgIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSICAge19fUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVF9WQUxVRX0KLSNkZWZpbmUgIFBUSFJFQURfRVJST1JDSEVDS19NVVRFWF9JTklUSUFMSVpFUiAge19fUFRIUkVBRF9FUlJPUkNIRUNLX01VVEVYX0lOSVRfVkFMVUV9CisjZGVmaW5lICBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSICAgICAgICAgICAgIHtfX1BUSFJFQURfTVVURVhfSU5JVF9WQUxVRSBfX1JFU0VSVkVEX0lOSVRJQUxJWkVSfQorI2RlZmluZSAgUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVIgICB7X19QVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUX1ZBTFVFIF9fUkVTRVJWRURfSU5JVElBTElaRVJ9CisjZGVmaW5lICBQVEhSRUFEX0VSUk9SQ0hFQ0tfTVVURVhfSU5JVElBTElaRVIgIHtfX1BUSFJFQURfRVJST1JDSEVDS19NVVRFWF9JTklUX1ZBTFVFIF9fUkVTRVJWRURfSU5JVElBTElaRVJ9CiAKIGVudW0gewogICAgIFBUSFJFQURfTVVURVhfTk9STUFMID0gMCwKQEAgLTYwLDkgKzY5LDEyIEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgaW50IHZvbGF0aWxlIHZhbHVlOworI2lmZGVmIF9fTFA2NF9fCisgIGNoYXIgX19yZXNlcnZlZFs0NF07CisjZW5kaWYKIH0gcHRocmVhZF9jb25kX3Q7CiAKLSNkZWZpbmUgUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSICB7MH0KKyNkZWZpbmUgUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSICB7MCBfX1JFU0VSVkVEX0lOSVRJQUxJWkVSfQogCiB0eXBlZGVmIHN0cnVjdCB7CiAgIHVpbnQzMl90IGZsYWdzOwpAQCAtNzEsMzMgKzgzLDUyIEBACiAgIHNpemVfdCBndWFyZF9zaXplOwogICBpbnQzMl90IHNjaGVkX3BvbGljeTsKICAgaW50MzJfdCBzY2hlZF9wcmlvcml0eTsKKyNpZmRlZiBfX0xQNjRfXworICBjaGFyIF9fcmVzZXJ2ZWRbMTZdOworI2VuZGlmCiB9IHB0aHJlYWRfYXR0cl90OwogCiB0eXBlZGVmIGxvbmcgcHRocmVhZF9tdXRleGF0dHJfdDsKIHR5cGVkZWYgbG9uZyBwdGhyZWFkX2NvbmRhdHRyX3Q7CiAKLXR5cGVkZWYgaW50IHB0aHJlYWRfcndsb2NrYXR0cl90OwordHlwZWRlZiBsb25nIHB0aHJlYWRfcndsb2NrYXR0cl90OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gIHB0aHJlYWRfbXV0ZXhfdCAgbG9jazsKLSAgcHRocmVhZF9jb25kX3QgICBjb25kOwotICBpbnQgICAgICAgICAgICAgIG51bUxvY2tzOwotICBpbnQgICAgICAgICAgICAgIHdyaXRlclRocmVhZElkOwotICBpbnQgICAgICAgICAgICAgIHBlbmRpbmdSZWFkZXJzOwotICBpbnQgICAgICAgICAgICAgIHBlbmRpbmdXcml0ZXJzOwotICB2b2lkKiAgICAgICAgICAgIHJlc2VydmVkWzRdOyAgLyogZm9yIGZ1dHVyZSBleHRlbnNpYmlsaXR5ICovCisjaWYgIWRlZmluZWQoX19MUDY0X18pCisgIHB0aHJlYWRfbXV0ZXhfdCBfX3VudXNlZF9sb2NrOworICBwdGhyZWFkX2NvbmRfdCBfX3VudXNlZF9jb25kOworI2VuZGlmCisgIHZvbGF0aWxlIGludDMyX3Qgc3RhdGU7IC8vIDA9dW5sb2NrLCAtMT13cml0ZXIgbG9jaywgK249cmVhZGVyIGxvY2sKKyAgdm9sYXRpbGUgaW50MzJfdCB3cml0ZXJfdGhyZWFkX2lkOworICB2b2xhdGlsZSBpbnQzMl90IHBlbmRpbmdfcmVhZGVyczsKKyAgdm9sYXRpbGUgaW50MzJfdCBwZW5kaW5nX3dyaXRlcnM7CisgIGludDMyX3QgYXR0cjsKKyNpZmRlZiBfX0xQNjRfXworICBjaGFyIF9fcmVzZXJ2ZWRbMzZdOworI2Vsc2UKKyAgY2hhciBfX3Jlc2VydmVkWzEyXTsKKyNlbmRpZgorCiB9IHB0aHJlYWRfcndsb2NrX3Q7CiAKLSNkZWZpbmUgUFRIUkVBRF9SV0xPQ0tfSU5JVElBTElaRVIgIHsgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiwgUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSLCAwLCAwLCAwLCAwLCB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSB9CisjaWZkZWYgX19MUDY0X18KKyAgI2RlZmluZSBQVEhSRUFEX1JXTE9DS19JTklUSUFMSVpFUiAgeyAwLCAwLCAwLCAwLCAwLCB7IDAgfSB9CisjZWxzZQorICAjZGVmaW5lIFBUSFJFQURfUldMT0NLX0lOSVRJQUxJWkVSICB7IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIsIFBUSFJFQURfQ09ORF9JTklUSUFMSVpFUiwgMCwgMCwgMCwgMCwgMCwgeyAwIH0gfQorI2VuZGlmCiAKIHR5cGVkZWYgaW50IHB0aHJlYWRfa2V5X3Q7CiB0eXBlZGVmIGxvbmcgcHRocmVhZF90OwogCiB0eXBlZGVmIHZvbGF0aWxlIGludCBwdGhyZWFkX29uY2VfdDsKIAotI2RlZmluZSBQVEhSRUFEX09OQ0VfSU5JVCAgICAwCisjZGVmaW5lIFBUSFJFQURfT05DRV9JTklUIDAKIAorI2lmIGRlZmluZWQoX19MUDY0X18pCisjZGVmaW5lIFBUSFJFQURfU1RBQ0tfTUlOICg0ICogUEFHRV9TSVpFKQorI2Vsc2UKICNkZWZpbmUgUFRIUkVBRF9TVEFDS19NSU4gKDIgKiBQQUdFX1NJWkUpCisjZW5kaWYKIAogI2RlZmluZSBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCAgMHgwMDAwMDAwMQogI2RlZmluZSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSAgMHgwMDAwMDAwMApAQCAtMTI3LDExICsxNTgsMTMgQEAKIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kocHRocmVhZF9hdHRyX3QqLCBpbnQpIF9fbm9ubnVsbCgoMSkpOwogaW50IHB0aHJlYWRfYXR0cl9zZXRzY29wZShwdGhyZWFkX2F0dHJfdCosIGludCkgX19ub25udWxsKCgxKSk7CiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrKHB0aHJlYWRfYXR0cl90Kiwgdm9pZCosIHNpemVfdCkgX19ub25udWxsKCgxKSk7Ci1pbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZShwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIHNpemVfdCBzdGFja19zaXplKSBfX25vbm51bGwoKDEpKTsKK2ludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplKHB0aHJlYWRfYXR0cl90Kiwgc2l6ZV90IHN0YWNrX3NpemUpIF9fbm9ubnVsbCgoMSkpOwogCiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95KHB0aHJlYWRfY29uZGF0dHJfdCopIF9fbm9ubnVsbCgoMSkpOworaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0Y2xvY2soY29uc3QgcHRocmVhZF9jb25kYXR0cl90KiwgY2xvY2tpZF90KikgX19ub25udWxsKCgxLCAyKSk7CiBpbnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkKGNvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCosIGludCopIF9fbm9ubnVsbCgoMSwgMikpOwogaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdChwdGhyZWFkX2NvbmRhdHRyX3QqKSBfX25vbm51bGwoKDEpKTsKK2ludCBwdGhyZWFkX2NvbmRhdHRyX3NldGNsb2NrKHB0aHJlYWRfY29uZGF0dHJfdCosIGNsb2NraWRfdCkgX19ub25udWxsKCgxKSk7CiBpbnQgcHRocmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkKHB0aHJlYWRfY29uZGF0dHJfdCosIGludCkgX19ub25udWxsKCgxKSk7CiAKIGludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KHB0aHJlYWRfY29uZF90KikgX19ub25udWxsKCgxKSk7CkBAIC0xNTUsNiArMTg4LDggQEAKIAogdm9pZCogcHRocmVhZF9nZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90KTsKIAorcGlkX3QgcHRocmVhZF9nZXR0aWRfbnAocHRocmVhZF90KTsKKwogaW50IHB0aHJlYWRfam9pbihwdGhyZWFkX3QsIHZvaWQqKik7CiAKIGludCBwdGhyZWFkX2tleV9jcmVhdGUocHRocmVhZF9rZXlfdCosIHZvaWQgKCopKHZvaWQqKSkgX19ub25udWxsKCgxKSk7CkBAIC0xNzIsNyArMjA3LDcgQEAKIGludCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kocHRocmVhZF9tdXRleF90KikgX19ub25udWxsKCgxKSk7CiBpbnQgcHRocmVhZF9tdXRleF9pbml0KHB0aHJlYWRfbXV0ZXhfdCosIGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QqKSBfX25vbm51bGwoKDEpKTsKIGludCBwdGhyZWFkX211dGV4X2xvY2socHRocmVhZF9tdXRleF90KikgX19ub25udWxsKCgxKSk7Ci1pbnQgcHRocmVhZF9tdXRleF90aW1lZGxvY2socHRocmVhZF9tdXRleF90Kiwgc3RydWN0IHRpbWVzcGVjKikgX19ub25udWxsKCgxLCAyKSk7CitpbnQgcHRocmVhZF9tdXRleF90aW1lZGxvY2socHRocmVhZF9tdXRleF90KiwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKikgX19ub25udWxsKCgxLCAyKSk7CiBpbnQgcHRocmVhZF9tdXRleF90cnlsb2NrKHB0aHJlYWRfbXV0ZXhfdCopIF9fbm9ubnVsbCgoMSkpOwogaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKHB0aHJlYWRfbXV0ZXhfdCopIF9fbm9ubnVsbCgoMSkpOwogCkBAIC0xOTMsNyArMjI4LDcgQEAKIGludCBwdGhyZWFkX3J3bG9ja191bmxvY2socHRocmVhZF9yd2xvY2tfdCAqcndsb2NrKSBfX25vbm51bGwoKDEpKTsKIGludCBwdGhyZWFkX3J3bG9ja193cmxvY2socHRocmVhZF9yd2xvY2tfdCopIF9fbm9ubnVsbCgoMSkpOwogCi1wdGhyZWFkX3QgcHRocmVhZF9zZWxmKHZvaWQpOworcHRocmVhZF90IHB0aHJlYWRfc2VsZih2b2lkKSBfX3B1cmUyOwogCiBpbnQgcHRocmVhZF9zZXRuYW1lX25wKHB0aHJlYWRfdCwgY29uc3QgY2hhciopIF9fbm9ubnVsbCgoMikpOwogCkBAIC0yMzIsMzIgKzI2NywxNyBAQAogCiAjaWYgIWRlZmluZWQoX19MUDY0X18pCiAKLS8qIERlcHJlY2F0ZWQgYnkgUE9TSVguIFRPRE86IHN1cHBvcnQgZm9yIExQNjQgYnV0IGFkZCBkZXByZWNhdGVkIGF0dHJpYnV0ZSBpbnN0ZWFkPyAqLwotaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIoY29uc3QgcHRocmVhZF9hdHRyX3QqLCB2b2lkKiopIF9fbm9ubnVsbCgoMSwgMikpOyAvKiBkZXByZWNhdGVkICovCi1pbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkcihwdGhyZWFkX2F0dHJfdCosIHZvaWQqKSBfX25vbm51bGwoKDEpKTsgLyogZGVwcmVjYXRlZCAqLwotCi0vKiBCaW9uaWMgYWRkaXRpb25zIHRoYXQgYXJlIGRlcHJlY2F0ZWQgZXZlbiBpbiB0aGUgMzItYml0IEFCSS4gKi8KKy8vIEJpb25pYyBhZGRpdGlvbnMgdGhhdCBhcmUgZGVwcmVjYXRlZCBldmVuIGluIHRoZSAzMi1iaXQgQUJJLgorLy8KKy8vIFRPRE86IFJlbW92ZSB0aGVtIG9uY2UgY2hyb21pdW1fb3JnIC8gTkZDIGhhdmUgc3dpdGNoZWQgb3Zlci4KIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0X21vbm90b25pY19ucChwdGhyZWFkX2NvbmRfdCosIHB0aHJlYWRfbXV0ZXhfdCosIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyopOwogaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXRfbW9ub3RvbmljKHB0aHJlYWRfY29uZF90KiwgcHRocmVhZF9tdXRleF90KiwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKik7Ci0jZGVmaW5lIEhBVkVfUFRIUkVBRF9DT05EX1RJTUVEV0FJVF9NT05PVE9OSUMgMQogCi0vKgotICogTGlrZSBwdGhyZWFkX2NvbmRfdGltZWR3YWl0IGV4Y2VwdCAncmVsdGltZScgaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGltZS4KLSAqIFRPRE86IG5vdCBsaWtlIGdsaWJjOyBpbmNsdWRlIGluIExQNjQ/Ci0gKi8KLWludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0X3JlbGF0aXZlX25wKHB0aHJlYWRfY29uZF90KiwgcHRocmVhZF9tdXRleF90KiwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKik7Ci0jZGVmaW5lIEhBVkVfUFRIUkVBRF9DT05EX1RJTUVEV0FJVF9SRUxBVElWRSAxCitpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdF9yZWxhdGl2ZV9ucChwdGhyZWFkX2NvbmRfdCosIHB0aHJlYWRfbXV0ZXhfdCosIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyopIC8qIFRPRE86IF9fYXR0cmlidXRlX18oKGRlcHJlY2F0ZWQoInVzZSBwdGhyZWFkX2NvbmRfdGltZWR3YWl0IGluc3RlYWQiKSkpKi87CisjZGVmaW5lIEhBVkVfUFRIUkVBRF9DT05EX1RJTUVEV0FJVF9SRUxBVElWRSAxIC8qIFRPRE86IHN0b3AgZGVmaW5pbmcgdGhpcyB0byBwdXNoIExQMzIgb2ZmIHRoaXMgQVBJIHNvb25lci4gKi8KK2ludCBwdGhyZWFkX2NvbmRfdGltZW91dF9ucChwdGhyZWFkX2NvbmRfdCosIHB0aHJlYWRfbXV0ZXhfdCosIHVuc2lnbmVkKSAvKiBUT0RPOiBfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKCJ1c2UgcHRocmVhZF9jb25kX3RpbWVkd2FpdCBpbnN0ZWFkIikpKSovOwogCi0vKiBUT0RPOiBub3QgbGlrZSBnbGliYzsgaW5jbHVkZSBpbiBMUDY0PyAqLwotaW50IHB0aHJlYWRfY29uZF90aW1lb3V0X25wKHB0aHJlYWRfY29uZF90KiwgcHRocmVhZF9tdXRleF90KiwgdW5zaWduZWQpOwotCi0vKiBMaWtlIHB0aHJlYWRfbXV0ZXhfbG9jaygpLCBidXQgd2lsbCB3YWl0IHVwIHRvICdtc2VjcycgbWlsbGktc2Vjb25kcwotICogYmVmb3JlIHJldHVybmluZy4gU2FtZSByZXR1cm4gdmFsdWVzIGFzIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayB0aG91Z2gsIGkuZS4KLSAqIHJldHVybnMgRUJVU1kgaWYgdGhlIGxvY2sgY291bGQgbm90IGJlIGFjcXVpcmVkIGFmdGVyIHRoZSB0aW1lb3V0IGV4cGlyZWQuCi0gKgotICogVE9ETzogcmVwbGFjZSB3aXRoIHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrX25wIGZvciBMUDY0LgotICovCi1pbnQgcHRocmVhZF9tdXRleF9sb2NrX3RpbWVvdXRfbnAocHRocmVhZF9tdXRleF90KiwgdW5zaWduZWQpOworaW50IHB0aHJlYWRfbXV0ZXhfbG9ja190aW1lb3V0X25wKHB0aHJlYWRfbXV0ZXhfdCosIHVuc2lnbmVkKSBfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKCJ1c2UgcHRocmVhZF9tdXRleF90aW1lZGxvY2sgaW5zdGVhZCIpKSk7CiAKICNlbmRpZiAvKiAhZGVmaW5lZChfX0xQNjRfXykgKi8KIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3B3ZC5oIGIvbGliYy9pbmNsdWRlL3B3ZC5oCmluZGV4IDZmM2ZhZDUuLjZkNDgzYzAgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9wd2QuaAorKysgYi9saWJjL2luY2x1ZGUvcHdkLmgKQEAgLTEwMCwxMiArMTAwLDE1IEBACiAKIHN0cnVjdCBwYXNzd2QKIHsKLSAgICBjaGFyKiBwd19uYW1lOwotICAgIGNoYXIqIHB3X3Bhc3N3ZDsKLSAgICB1aWRfdCBwd191aWQ7Ci0gICAgZ2lkX3QgcHdfZ2lkOwotICAgIGNoYXIqIHB3X2RpcjsKLSAgICBjaGFyKiBwd19zaGVsbDsKKyAgY2hhciogcHdfbmFtZTsKKyAgY2hhciogcHdfcGFzc3dkOworICB1aWRfdCBwd191aWQ7CisgIGdpZF90IHB3X2dpZDsKKyNpZmRlZiBfX0xQNjRfXworICBjaGFyKiBwd19nZWNvczsKKyNlbmRpZgorICBjaGFyKiBwd19kaXI7CisgIGNoYXIqIHB3X3NoZWxsOwogfTsKIAogX19CRUdJTl9ERUNMUwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3Jlc29sdi5oIGIvbGliYy9pbmNsdWRlL3Jlc29sdi5oCmluZGV4IDM2YjkzZWUuLmM4ODk5ZWQgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9yZXNvbHYuaAorKysgYi9saWJjL2luY2x1ZGUvcmVzb2x2LmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAKIF9fQkVHSU5fREVDTFMKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcHVzaChkZWZhdWx0KQogCiBzdHJ1Y3QgcmVzX3N0YXRlOwogCkBAIC01Miw2ICs1Myw3IEBACiBleHRlcm4gaW50IGRuX2NvbXAoY29uc3QgY2hhciosIHVfY2hhciosIGludCwgdV9jaGFyKiosIHVfY2hhcioqKTsKIGV4dGVybiBpbnQgZG5fZXhwYW5kKGNvbnN0IHVfY2hhciosIGNvbnN0IHVfY2hhciosIGNvbnN0IHVfY2hhciosIGNoYXIqLCBpbnQpOwogCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAogX19FTkRfREVDTFMKIAogI2VuZGlmIC8qIF9SRVNPTFZfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zY2hlZC5oIGIvbGliYy9pbmNsdWRlL3NjaGVkLmgKaW5kZXggNzY0OWU4My4uZTQzYjZjYyAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3NjaGVkLmgKKysrIGIvbGliYy9pbmNsdWRlL3NjaGVkLmgKQEAgLTU5LDE1MSArNTksOTAgQEAKIGV4dGVybiBpbnQgc2NoZWRfZ2V0Y3B1KHZvaWQpOwogZXh0ZXJuIGludCBzZXRucyhpbnQsIGludCk7CiAKLS8qIE91ciBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyB1cCB0byAzMiBpbmRlcGVuZGVudCBDUFVzLCB3aGljaCBpcyBhbHNvCi0gKiB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbCBhdCB0aGUgbW9tZW50LiBHTGliYyB1c2VzIDEwMjQgYnkKLSAqIGRlZmF1bHQuCi0gKgotICogSWYgeW91IHdhbnQgdG8gdXNlIG1vcmUgdGhhbiB0aGF0LCB5b3Ugc2hvdWxkIHVzZSBDUFVfQUxMT0MoKSAvIENQVV9GUkVFKCkKLSAqIGFuZCB0aGUgQ1BVX1hYWF9TKCkgbWFjcm8gdmFyaWFudHMuCi0gKi8KLSNkZWZpbmUgQ1BVX1NFVFNJWkUgICAzMgorI2lmZGVmIF9fTFA2NF9fCisjZGVmaW5lIENQVV9TRVRTSVpFIDEwMjQKKyNlbHNlCisjZGVmaW5lIENQVV9TRVRTSVpFIDMyCisjZW5kaWYKIAotI2RlZmluZSBfX0NQVV9CSVRUWVBFICAgIHVuc2lnbmVkIGxvbmcgaW50ICAvKiBtYW5kYXRlZCBieSB0aGUga2VybmVsICAqLwotI2RlZmluZSBfX0NQVV9CSVRTSElGVCAgIDUgICAgICAgICAgICAgICAgICAvKiBzaG91bGQgYmUgbG9nMihCSVRUWVBFKSAqLwotI2RlZmluZSBfX0NQVV9CSVRTICAgICAgICgxIDw8IF9fQ1BVX0JJVFNISUZUKQotI2RlZmluZSBfX0NQVV9FTFQoeCkgICAgICgoeCkgPj4gX19DUFVfQklUU0hJRlQpCi0jZGVmaW5lIF9fQ1BVX01BU0soeCkgICAgKChfX0NQVV9CSVRUWVBFKTEgPDwgKCh4KSAmIChfX0NQVV9CSVRTLTEpKSkKKyNkZWZpbmUgX19DUFVfQklUVFlQRSAgdW5zaWduZWQgbG9uZyBpbnQgIC8qIG1hbmRhdGVkIGJ5IHRoZSBrZXJuZWwgICovCisjZGVmaW5lIF9fQ1BVX0JJVFMgICAgICg4ICogc2l6ZW9mKF9fQ1BVX0JJVFRZUEUpKQorI2RlZmluZSBfX0NQVV9FTFQoeCkgICAoKHgpIC8gX19DUFVfQklUUykKKyNkZWZpbmUgX19DUFVfTUFTSyh4KSAgKChfX0NQVV9CSVRUWVBFKTEgPDwgKCh4KSAmIChfX0NQVV9CSVRTIC0gMSkpKQogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgX19DUFVfQklUVFlQRSAgX19iaXRzWyBDUFVfU0VUU0laRSAvIF9fQ1BVX0JJVFMgXTsKKyAgX19DUFVfQklUVFlQRSAgX19iaXRzWyBDUFVfU0VUU0laRSAvIF9fQ1BVX0JJVFMgXTsKIH0gY3B1X3NldF90OwogCiBleHRlcm4gaW50IHNjaGVkX3NldGFmZmluaXR5KHBpZF90IHBpZCwgc2l6ZV90IHNldHNpemUsIGNvbnN0IGNwdV9zZXRfdCogc2V0KTsKIAogZXh0ZXJuIGludCBzY2hlZF9nZXRhZmZpbml0eShwaWRfdCBwaWQsIHNpemVfdCBzZXRzaXplLCBjcHVfc2V0X3QqIHNldCk7CiAKLS8qIFByb3ZpZGUgb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciAzMi1iaXQgY3B1X3NldF90ICovCi0jaWYgQ1BVX1NFVFNJWkUgPT0gX19DUFVfQklUUworI2RlZmluZSBDUFVfWkVSTyhzZXQpICAgICAgICAgIENQVV9aRVJPX1Moc2l6ZW9mKGNwdV9zZXRfdCksIHNldCkKKyNkZWZpbmUgQ1BVX1NFVChjcHUsIHNldCkgICAgICBDUFVfU0VUX1MoY3B1LCBzaXplb2YoY3B1X3NldF90KSwgc2V0KQorI2RlZmluZSBDUFVfQ0xSKGNwdSwgc2V0KSAgICAgIENQVV9DTFJfUyhjcHUsIHNpemVvZihjcHVfc2V0X3QpLCBzZXQpCisjZGVmaW5lIENQVV9JU1NFVChjcHUsIHNldCkgICAgQ1BVX0lTU0VUX1MoY3B1LCBzaXplb2YoY3B1X3NldF90KSwgc2V0KQorI2RlZmluZSBDUFVfQ09VTlQoc2V0KSAgICAgICAgIENQVV9DT1VOVF9TKHNpemVvZihjcHVfc2V0X3QpLCBzZXQpCisjZGVmaW5lIENQVV9FUVVBTChzZXQxLCBzZXQyKSAgQ1BVX0VRVUFMX1Moc2l6ZW9mKGNwdV9zZXRfdCksIHNldDEsIHNldDIpCiAKLSMgIGRlZmluZSBDUFVfWkVSTyhzZXRfKSAgIFwKLSAgICBkb3sgXAotICAgICAgICAoc2V0XyktPl9fYml0c1swXSA9IDA7IFwKLSAgICB9d2hpbGUoMCkKKyNkZWZpbmUgQ1BVX0FORChkc3QsIHNldDEsIHNldDIpICBfX0NQVV9PUChkc3QsIHNldDEsIHNldDIsICYpCisjZGVmaW5lIENQVV9PUihkc3QsIHNldDEsIHNldDIpICAgX19DUFVfT1AoZHN0LCBzZXQxLCBzZXQyLCB8KQorI2RlZmluZSBDUFVfWE9SKGRzdCwgc2V0MSwgc2V0MikgIF9fQ1BVX09QKGRzdCwgc2V0MSwgc2V0MiwgXikKIAotIyAgZGVmaW5lIENQVV9TRVQoY3B1XyxzZXRfKSBcCi0gICAgZG8ge1wKLSAgICAgICAgc2l6ZV90IF9fY3B1ID0gKGNwdV8pOyBcCi0gICAgICAgIGlmIChfX2NwdSA8IENQVV9TRVRTSVpFKSBcCi0gICAgICAgICAgICAoc2V0XyktPl9fYml0c1swXSB8PSBfX0NQVV9NQVNLKF9fY3B1KTsgXAotICAgIH13aGlsZSAoMCkKLQotIyAgZGVmaW5lIENQVV9DTFIoY3B1XyxzZXRfKSBcCi0gICAgZG8ge1wKLSAgICAgICAgc2l6ZV90IF9fY3B1ID0gKGNwdV8pOyBcCi0gICAgICAgIGlmIChfX2NwdSA8IENQVV9TRVRTSVpFKSBcCi0gICAgICAgICAgICAoc2V0XyktPl9fYml0c1swXSAmPSB+X19DUFVfTUFTSyhfX2NwdSk7IFwKLSAgICB9d2hpbGUgKDApCi0KLSMgIGRlZmluZSBDUFVfSVNTRVQoY3B1Xywgc2V0XykgXAotICAgIChfX2V4dGVuc2lvbl9fKHtcCi0gICAgICAgIHNpemVfdCAgX19jcHUgPSAoY3B1Xyk7IFwKLSAgICAgICAgKGNwdV8gPCBDUFVfU0VUU0laRSkgXAotICAgICAgICAgICAgPyAoKHNldF8pLT5fX2JpdHNbMF0gJiBfX0NQVV9NQVNLKF9fY3B1KSkgIT0gMCBcCi0gICAgICAgICAgICA6IDA7IFwKLSAgICB9KSkKLQotIyAgZGVmaW5lIENQVV9FUVVBTChzZXQxXywgc2V0Ml8pIFwKLSAgICAoKHNldDFfKS0+X19iaXRzWzBdID09IChzZXQyXyktPl9fYml0c1swXSkKLQotIyAgZGVmaW5lIF9fQ1BVX09QKGRzdF8sIHNldDFfLCBzZXQyXywgb3BfKSBcCi0gICAgZG8geyBcCi0gICAgICAgIChkc3RfKS0+X19iaXRzWzBdID0gKHNldDFfKS0+X19iaXRzWzBdIG9wXyAoc2V0Ml8pLT5fX2JpdHNbMF07IFwKLSAgICB9IHdoaWxlICgwKQotCi0jICBkZWZpbmUgQ1BVX0NPVU5UKHNldF8pICBfX2J1aWx0aW5fcG9wY291bnRsKChzZXRfKS0+X19iaXRzWzBdKQotCi0jZWxzZSAvKiBDUFVfU0VUU0laRSAhPSBfX0NQVV9CSVRTICovCi0KLSMgIGRlZmluZSBDUFVfWkVSTyhzZXRfKSAgICAgICAgICBDUFVfWkVST19TKHNpemVvZihjcHVfc2V0X3QpLCBzZXRfKQotIyAgZGVmaW5lIENQVV9TRVQoY3B1XyxzZXRfKSAgICAgIENQVV9TRVRfUyhjcHVfLHNpemVvZihjcHVfc2V0X3QpLHNldF8pCi0jICBkZWZpbmUgQ1BVX0NMUihjcHVfLHNldF8pICAgICAgQ1BVX0NMUl9TKGNwdV8sc2l6ZW9mKGNwdV9zZXRfdCksc2V0XykKLSMgIGRlZmluZSBDUFVfSVNTRVQoY3B1XyxzZXRfKSAgICBDUFVfSVNTRVRfUyhjcHVfLHNpemVvZihjcHVfc2V0X3QpLHNldF8pCi0jICBkZWZpbmUgQ1BVX0NPVU5UKHNldF8pICAgICAgICAgQ1BVX0NPVU5UX1Moc2l6ZW9mKGNwdV9zZXRfdCksc2V0XykKLSMgIGRlZmluZSBDUFVfRVFVQUwoc2V0MV8sc2V0Ml8pICBDUFVfRVFVQUxfUyhzaXplb2YoY3B1X3NldF90KSxzZXQxXyxzZXQyXykKLQotIyAgZGVmaW5lIF9fQ1BVX09QKGRzdF8sc2V0MV8sc2V0Ml8sb3BfKSAgX19DUFVfT1BfUyhzaXplb2YoY3B1X3NldF90KSxkc3RfLHNldDFfLHNldDJfLG9wXykKLQotI2VuZGlmIC8qIENQVV9TRVRTSVpFICE9IF9fQ1BVX0JJVFMgKi8KLQotI2RlZmluZSBDUFVfQU5EKHNldDFfLHNldDJfKSAgIF9fQ1BVX09QKHNldDFfLHNldDJfLCYpCi0jZGVmaW5lIENQVV9PUihzZXQxXyxzZXQyXykgICAgX19DUFVfT1Aoc2V0MV8sc2V0Ml8sfCkKLSNkZWZpbmUgQ1BVX1hPUihzZXQxXyxzZXQyXykgICBfX0NQVV9PUChzZXQxXyxzZXQyXyxeKQorI2RlZmluZSBfX0NQVV9PUChkc3QsIHNldDEsIHNldDIsIG9wKSAgX19DUFVfT1BfUyhzaXplb2YoY3B1X3NldF90KSwgZHN0LCBzZXQxLCBzZXQyLCBvcCkKIAogLyogU3VwcG9ydCBmb3IgZHluYW1pY2FsbHktYWxsb2NhdGVkIGNwdV9zZXRfdCAqLwogCiAjZGVmaW5lIENQVV9BTExPQ19TSVpFKGNvdW50KSBcCi0gICAgX19DUFVfRUxUKChjb3VudCkgKyAoX19DUFVfQklUUy0xKSkqc2l6ZW9mKF9fQ1BVX0JJVFRZUEUpCisgIF9fQ1BVX0VMVCgoY291bnQpICsgKF9fQ1BVX0JJVFMgLSAxKSkgKiBzaXplb2YoX19DUFVfQklUVFlQRSkKIAotI2RlZmluZSBDUFVfQUxMT0MoY291bnQpICAgX19zY2hlZF9jcHVhbGxvYygoY291bnQpKTsKLSNkZWZpbmUgQ1BVX0ZSRUUoc2V0KSAgICAgIF9fc2NoZWRfY3B1ZnJlZSgoc2V0KSkKKyNkZWZpbmUgQ1BVX0FMTE9DKGNvdW50KSAgX19zY2hlZF9jcHVhbGxvYygoY291bnQpKQorI2RlZmluZSBDUFVfRlJFRShzZXQpICAgICBfX3NjaGVkX2NwdWZyZWUoKHNldCkpCiAKIGV4dGVybiBjcHVfc2V0X3QqIF9fc2NoZWRfY3B1YWxsb2Moc2l6ZV90IGNvdW50KTsKIGV4dGVybiB2b2lkICAgICAgIF9fc2NoZWRfY3B1ZnJlZShjcHVfc2V0X3QqIHNldCk7CiAKLSNkZWZpbmUgQ1BVX1pFUk9fUyhzZXRzaXplXyxzZXRfKSAgXAotICAgIGRvIHsgXAotICAgICAgICBzaXplX3QgX19ubiA9IDA7IFwKLSAgICAgICAgc2l6ZV90IF9fbm5fbWF4ID0gKHNldHNpemVfKS9zaXplb2YoX19DUFVfQklUVFlQRSk7IFwKLSAgICAgICAgZm9yICg7IF9fbm4gPCBfX25uX21heDsgX19ubisrKSBcCi0gICAgICAgICAgICAoc2V0XyktPl9fYml0c1tfX25uXSA9IDA7IFwKLSAgICB9IHdoaWxlICgwKQorI2RlZmluZSBDUFVfWkVST19TKHNldHNpemUsIHNldCkgIF9fYnVpbHRpbl9tZW1zZXQoc2V0LCAwLCBzZXRzaXplKQogCi0jZGVmaW5lIENQVV9TRVRfUyhjcHVfLHNldHNpemVfLHNldF8pIFwKLSAgICBkbyB7IFwKLSAgICAgICAgc2l6ZV90IF9fY3B1ID0gKGNwdV8pOyBcCi0gICAgICAgIGlmIChfX2NwdSA8IDgqKHNldHNpemVfKSkgXAotICAgICAgICAgICAgKHNldF8pLT5fX2JpdHNbX19DUFVfRUxUKF9fY3B1KV0gfD0gX19DUFVfTUFTSyhfX2NwdSk7IFwKLSAgICB9IHdoaWxlICgwKQorI2RlZmluZSBDUFVfU0VUX1MoY3B1LCBzZXRzaXplLCBzZXQpIFwKKyAgZG8geyBcCisgICAgc2l6ZV90IF9fY3B1ID0gKGNwdSk7IFwKKyAgICBpZiAoX19jcHUgPCA4ICogKHNldHNpemUpKSBcCisgICAgICAoc2V0KS0+X19iaXRzW19fQ1BVX0VMVChfX2NwdSldIHw9IF9fQ1BVX01BU0soX19jcHUpOyBcCisgIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgQ1BVX0NMUl9TKGNwdV8sc2V0c2l6ZV8sc2V0XykgXAotICAgIGRvIHsgXAotICAgICAgICBzaXplX3QgX19jcHUgPSAoY3B1Xyk7IFwKLSAgICAgICAgaWYgKF9fY3B1IDwgOCooc2V0c2l6ZV8pKSBcCi0gICAgICAgICAgICAoc2V0XyktPl9fYml0c1tfX0NQVV9FTFQoX19jcHUpXSAmPSB+X19DUFVfTUFTSyhfX2NwdSk7IFwKLSAgICB9IHdoaWxlICgwKQorI2RlZmluZSBDUFVfQ0xSX1MoY3B1LCBzZXRzaXplLCBzZXQpIFwKKyAgZG8geyBcCisgICAgc2l6ZV90IF9fY3B1ID0gKGNwdSk7IFwKKyAgICBpZiAoX19jcHUgPCA4ICogKHNldHNpemUpKSBcCisgICAgICAoc2V0KS0+X19iaXRzW19fQ1BVX0VMVChfX2NwdSldICY9IH5fX0NQVV9NQVNLKF9fY3B1KTsgXAorICB9IHdoaWxlICgwKQogCi0jZGVmaW5lIENQVV9JU1NFVF9TKGNwdV8sIHNldHNpemVfLCBzZXRfKSBcCi0gICAgKF9fZXh0ZW5zaW9uX18gKHsgXAotICAgICAgICBzaXplX3QgX19jcHUgPSAoY3B1Xyk7IFwKLSAgICAgICAgKF9fY3B1IDwgOCooc2V0c2l6ZV8pKSBcCi0gICAgICAgICAgPyAoKHNldF8pLT5fX2JpdHNbX19DUFVfRUxUKF9fY3B1KV0gJiBfX0NQVV9NQVNLKF9fY3B1KSkgIT0gMCBcCi0gICAgICAgICAgOiAwOyBcCi0gICAgfSkpCisjZGVmaW5lIENQVV9JU1NFVF9TKGNwdSwgc2V0c2l6ZSwgc2V0KSBcCisgIChfX2V4dGVuc2lvbl9fICh7IFwKKyAgICBzaXplX3QgX19jcHUgPSAoY3B1KTsgXAorICAgIChfX2NwdSA8IDggKiAoc2V0c2l6ZSkpIFwKKyAgICAgID8gKChzZXQpLT5fX2JpdHNbX19DUFVfRUxUKF9fY3B1KV0gJiBfX0NQVV9NQVNLKF9fY3B1KSkgIT0gMCBcCisgICAgICA6IDA7IFwKKyAgfSkpCiAKLSNkZWZpbmUgQ1BVX0VRVUFMX1Moc2V0c2l6ZV8sIHNldDFfLCBzZXQyXykgXAotICAgIChfX2V4dGVuc2lvbl9fICh7IFwKLSAgICAgICAgX19jb25zdCBfX0NQVV9CSVRUWVBFKiBfX3NyYzEgPSAoc2V0MV8pLT5fX2JpdHM7IFwKLSAgICAgICAgX19jb25zdCBfX0NQVV9CSVRUWVBFKiBfX3NyYzIgPSAoc2V0Ml8pLT5fX2JpdHM7IFwKLSAgICAgICAgc2l6ZV90IF9fbm4gPSAwLCBfX25uX21heCA9IChzZXRzaXplXykvc2l6ZW9mKF9fQ1BVX0JJVFRZUEUpOyBcCi0gICAgICAgIGZvciAoOyBfX25uIDwgX19ubl9tYXg7IF9fbm4rKykgeyBcCi0gICAgICAgICAgICBpZiAoX19zcmMxW19fbm5dICE9IF9fc3JjMltfX25uXSkgXAotICAgICAgICAgICAgICAgIGJyZWFrOyBcCi0gICAgICAgIH0gXAotICAgICAgICBfX25uID09IF9fbm5fbWF4OyBcCi0gICAgfSkpCisjZGVmaW5lIENQVV9FUVVBTF9TKHNldHNpemUsIHNldDEsIHNldDIpICAoX19idWlsdGluX21lbWNtcChzZXQxLCBzZXQyLCBzZXRzaXplKSA9PSAwKQogCi0jZGVmaW5lIF9fQ1BVX09QX1Moc2V0c2l6ZV8sIGRzdHNldF8sIHNyY3NldDFfLCBzcmNzZXQyXywgb3ApIFwKLSAgICBkbyB7IFwKLSAgICAgICAgY3B1X3NldF90KiBfX2RzdCA9IChkc3RzZXQpOyBcCi0gICAgICAgIGNvbnN0IF9fQ1BVX0JJVFRZUEUqIF9fc3JjMSA9IChzcmNzZXQxKS0+X19iaXRzOyBcCi0gICAgICAgIGNvbnN0IF9fQ1BVX0JJVFRZUEUqIF9fc3JjMiA9IChzcmNzZXQyKS0+X19iaXRzOyBcCi0gICAgICAgIHNpemVfdCBfX25uID0gMCwgX19ubl9tYXggPSAoc2V0c2l6ZV8pL3NpemVvZihfX0NQVV9CSVRUWVBFKTsgXAotICAgICAgICBmb3IgKDsgX19ubiA8IF9fbm5fbWF4OyBfX25uKyspIFwKLSAgICAgICAgICAgIChfX2RzdCktPl9fYml0c1tfX25uXSA9IF9fc3JjMVtfX25uXSBvcCBfX3NyYzJbX19ubl07IFwKLSAgICB9IHdoaWxlICgwKQorI2RlZmluZSBDUFVfQU5EX1Moc2V0c2l6ZSwgZHN0LCBzZXQxLCBzZXQyKSAgX19DUFVfT1BfUyhzZXRzaXplLCBkc3QsIHNldDEsIHNldDIsICYpCisjZGVmaW5lIENQVV9PUl9TKHNldHNpemUsIGRzdCwgc2V0MSwgc2V0MikgICBfX0NQVV9PUF9TKHNldHNpemUsIGRzdCwgc2V0MSwgc2V0MiwgfCkKKyNkZWZpbmUgQ1BVX1hPUl9TKHNldHNpemUsIGRzdCwgc2V0MSwgc2V0MikgIF9fQ1BVX09QX1Moc2V0c2l6ZSwgZHN0LCBzZXQxLCBzZXQyLCBeKQogCi0jZGVmaW5lIENQVV9DT1VOVF9TKHNldHNpemVfLCBzZXRfKSBcCi0gICAgX19zY2hlZF9jcHVjb3VudCgoc2V0c2l6ZV8pLCAoc2V0XykpCisjZGVmaW5lIF9fQ1BVX09QX1Moc2V0c2l6ZSwgZHN0c2V0LCBzcmNzZXQxLCBzcmNzZXQyLCBvcCkgXAorICBkbyB7IFwKKyAgICBjcHVfc2V0X3QqIF9fZHN0ID0gKGRzdHNldCk7IFwKKyAgICBjb25zdCBfX0NQVV9CSVRUWVBFKiBfX3NyYzEgPSAoc3Jjc2V0MSktPl9fYml0czsgXAorICAgIGNvbnN0IF9fQ1BVX0JJVFRZUEUqIF9fc3JjMiA9IChzcmNzZXQyKS0+X19iaXRzOyBcCisgICAgc2l6ZV90IF9fbm4gPSAwLCBfX25uX21heCA9IChzZXRzaXplKS9zaXplb2YoX19DUFVfQklUVFlQRSk7IFwKKyAgICBmb3IgKDsgX19ubiA8IF9fbm5fbWF4OyBfX25uKyspIFwKKyAgICAgIChfX2RzdCktPl9fYml0c1tfX25uXSA9IF9fc3JjMVtfX25uXSBvcCBfX3NyYzJbX19ubl07IFwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBDUFVfQ09VTlRfUyhzZXRzaXplLCBzZXQpICBfX3NjaGVkX2NwdWNvdW50KChzZXRzaXplKSwgKHNldCkpCiAKIGV4dGVybiBpbnQgX19zY2hlZF9jcHVjb3VudChzaXplX3Qgc2V0c2l6ZSwgY3B1X3NldF90KiBzZXQpOwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc2VhcmNoLmggYi9saWJjL2luY2x1ZGUvc2VhcmNoLmgKaW5kZXggZTEyZTQ5ZS4uOWIwMWUxMiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3NlYXJjaC5oCisrKyBiL2xpYmMvaW5jbHVkZS9zZWFyY2guaApAQCAtMTAsMzAgKzEwLDM3IEBACiAjZGVmaW5lIF9TRUFSQ0hfSF8KIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPHN5cy9fdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAotdHlwZWRlZgllbnVtIHsKLQlwcmVvcmRlciwKLQlwb3N0b3JkZXIsCi0JZW5kb3JkZXIsCi0JbGVhZgordHlwZWRlZiBlbnVtIHsKKyAgcHJlb3JkZXIsCisgIHBvc3RvcmRlciwKKyAgZW5kb3JkZXIsCisgIGxlYWYKIH0gVklTSVQ7CiAKICNpZmRlZiBfU0VBUkNIX1BSSVZBVEUKLXR5cGVkZWYJc3RydWN0IG5vZGUgewotCWNoYXIgICAgICAgICAqa2V5OwotCXN0cnVjdCBub2RlICAqbGxpbmssICpybGluazsKK3R5cGVkZWYgc3RydWN0IG5vZGUgeworICBjaGFyKiBrZXk7CisgIHN0cnVjdCBub2RlKiBsbGluazsKKyAgc3RydWN0IG5vZGUqIHJsaW5rOwogfSBub2RlX3Q7CiAjZW5kaWYKIAogX19CRUdJTl9ERUNMUwotdm9pZAkqdGRlbGV0ZShjb25zdCB2b2lkICogX19yZXN0cmljdCwgdm9pZCAqKiBfX3Jlc3RyaWN0LAotCSAgICBpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7Ci12b2lkCSp0ZmluZChjb25zdCB2b2lkICosIHZvaWQgKiBjb25zdCAqLAotCSAgICBpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7Ci12b2lkCSp0c2VhcmNoKGNvbnN0IHZvaWQgKiwgdm9pZCAqKiwgaW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwotdm9pZAkgdHdhbGsoY29uc3Qgdm9pZCAqLCB2b2lkICgqKShjb25zdCB2b2lkICosIFZJU0lULCBpbnQpKTsKLXZvaWQJIHRkZXN0cm95KHZvaWQgKiwgdm9pZCAoKikodm9pZCAqKSk7CisKK3ZvaWQgaW5zcXVlKHZvaWQqLCB2b2lkKik7Cit2b2lkIHJlbXF1ZSh2b2lkKik7CisKK3ZvaWQqIGxmaW5kKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKiwgc2l6ZV90Kiwgc2l6ZV90LCBpbnQgKCopKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKikpOwordm9pZCogbHNlYXJjaChjb25zdCB2b2lkKiwgdm9pZCosIHNpemVfdCosIHNpemVfdCwgaW50ICgqKShjb25zdCB2b2lkKiwgY29uc3Qgdm9pZCopKTsKKwordm9pZCogdGRlbGV0ZShjb25zdCB2b2lkKiBfX3Jlc3RyaWN0LCB2b2lkKiogX19yZXN0cmljdCwgaW50ICgqKShjb25zdCB2b2lkKiwgY29uc3Qgdm9pZCopKTsKK3ZvaWQgdGRlc3Ryb3kodm9pZCosIHZvaWQgKCopKHZvaWQqKSk7Cit2b2lkKiB0ZmluZChjb25zdCB2b2lkKiwgdm9pZCogY29uc3QqLCBpbnQgKCopKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKikpOwordm9pZCogdHNlYXJjaChjb25zdCB2b2lkKiwgdm9pZCoqLCBpbnQgKCopKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKikpOwordm9pZCB0d2Fsayhjb25zdCB2b2lkKiwgdm9pZCAoKikoY29uc3Qgdm9pZCosIFZJU0lULCBpbnQpKTsKKwogX19FTkRfREVDTFMKIAogI2VuZGlmIC8qICFfU0VBUkNIX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc2VtYXBob3JlLmggYi9saWJjL2luY2x1ZGUvc2VtYXBob3JlLmgKaW5kZXggMzBlMzEyMy4uN2FlM2MzYSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3NlbWFwaG9yZS5oCisrKyBiL2xpYmMvaW5jbHVkZS9zZW1hcGhvcmUuaApAQCAtMzMsMTAgKzMzLDEzIEBACiBfX0JFR0lOX0RFQ0xTCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgIGNvdW50OworICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY291bnQ7CisjaWZkZWYgX19MUDY0X18KKyAgaW50IF9fcmVzZXJ2ZWRbM107CisjZW5kaWYKIH0gc2VtX3Q7CiAKLSNkZWZpbmUgIFNFTV9GQUlMRUQgIE5VTEwKKyNkZWZpbmUgU0VNX0ZBSUxFRCBOVUxMCiAKIGV4dGVybiBpbnQgc2VtX2luaXQoc2VtX3QgKnNlbSwgaW50IHBzaGFyZWQsIHVuc2lnbmVkIGludCB2YWx1ZSk7CiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zZXRqbXAuaCBiL2xpYmMvaW5jbHVkZS9zZXRqbXAuaAppbmRleCA2OGZkY2VmLi4wMmIwNmY1IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc2V0am1wLmgKKysrIGIvbGliYy9pbmNsdWRlL3NldGptcC5oCkBAIC01MCw3ICs1MCw2IEBACiAKIGludCAgICAgX3NldGptcChqbXBfYnVmKTsKIHZvaWQgICAgX2xvbmdqbXAoam1wX2J1ZiwgaW50KTsKLXZvaWQgICAgbG9uZ2ptcGVycm9yKHZvaWQpOwogCiBpbnQgICAgIHNldGptcChqbXBfYnVmKTsKIHZvaWQgICAgbG9uZ2ptcChqbXBfYnVmLCBpbnQpOwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3NoYTEuaCBiL2xpYmMvaW5jbHVkZS9zaGExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNmNmNWQuLjAwMDAwMDAKLS0tIGEvbGliYy9pbmNsdWRlL3NoYTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIF9TSEExX0hfCi0jZGVmaW5lIF9TSEExX0hfCi0KLSN3YXJuaW5nICJpbmNsdWRlIDxzeXMvc2hhMS5oPiBpbnN0ZWFkIGZvciBiZXR0ZXIgcG9ydGFiaWxpdHkiCi0jaW5jbHVkZSA8c3lzL3NoYTEuaD4KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc2lnbmFsLmggYi9saWJjL2luY2x1ZGUvc2lnbmFsLmgKaW5kZXggMDE1OWJmMi4uZjE4NDljNSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3NpZ25hbC5oCisrKyBiL2xpYmMvaW5jbHVkZS9zaWduYWwuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbWl0cy5oPgkJLyogRm9yIExPTkdfQklUICovCiAjaW5jbHVkZSA8c3RyaW5nLmg+CQkvKiBGb3IgbWVtc2V0KCkgKi8KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgogCiAjaWYgZGVmaW5lZChfX0xQNjRfXykgfHwgZGVmaW5lZChfX21pcHNfXykKIC8qIEZvciA2NC1iaXQgKGFuZCBtaXBzKSwgdGhlIGtlcm5lbCdzIHN0cnVjdCBzaWdhY3Rpb24gZG9lc24ndCBtYXRjaCB0aGUgUE9TSVggb25lLApAQCAtNTEsMjAgKzUyLDI5IEBACiAKIHR5cGVkZWYgaW50IHNpZ19hdG9taWNfdDsKIAotLyogVE9ETzogNjQtYml0OiB3ZSBzaG91bGQgcHJvYmFibHkgI3VuZGVmIHRoZSB1YXBpIE5TSUcgYW5kIGFkZCBhIHVuaXQgdGVzdCB0aGF0IE5TSUcgPT0gX05TSUcgJiYgTlNJRyA+PSA2NC4gKi8KLSNpZm5kZWYgX05TSUcKLSMgIGRlZmluZSBfTlNJRyA2NAotI2VuZGlmCi0jaWZuZGVmIE5TSUcKLSMgIGRlZmluZSBOU0lHIF9OU0lHCisvKiBUaGUgYXJtIGFuZCB4ODYga2VybmVsIGhlYWRlciBmaWxlcyBkb24ndCBkZWZpbmUgX05TSUcuICovCisjaWZuZGVmIF9LRVJORUxfX05TSUcKKyNkZWZpbmUgX0tFUk5FTF9fTlNJRyA2NAogI2VuZGlmCiAKKy8qIFVzZXJzcGFjZSdzIE5TSUcgaXMgdGhlIGtlcm5lbCdzIF9OU0lHICsgMS4gKi8KKyNkZWZpbmUgX05TSUcgKF9LRVJORUxfX05TSUcgKyAxKQorI2RlZmluZSBOU0lHIF9OU0lHCisKKy8qIFdlIHRha2UgYSBmZXcgcmVhbC10aW1lIHNpZ25hbHMgZm9yIG91cnNlbHZlcy4gTWF5IGFzIHdlbGwgdXNlIHRoZSBzYW1lIG5hbWVzIGFzIGdsaWJjLiAqLworI2RlZmluZSBTSUdSVE1JTiAoX19saWJjX2N1cnJlbnRfc2lncnRtaW4oKSkKKyNkZWZpbmUgU0lHUlRNQVggKF9fbGliY19jdXJyZW50X3NpZ3J0bWF4KCkpCitleHRlcm4gaW50IF9fbGliY19jdXJyZW50X3NpZ3J0bWluKHZvaWQpOworZXh0ZXJuIGludCBfX2xpYmNfY3VycmVudF9zaWdydG1heCh2b2lkKTsKKwogZXh0ZXJuIGNvbnN0IGNoYXIqIGNvbnN0IHN5c19zaWdsaXN0W107Ci1leHRlcm4gY29uc3QgY2hhciogY29uc3Qgc3lzX3NpZ25hbWVbXTsKK2V4dGVybiBjb25zdCBjaGFyKiBjb25zdCBzeXNfc2lnbmFtZVtdOyAvKiBCU0QgY29tcGF0aWJpbGl0eS4gKi8KIAogdHlwZWRlZiBfX3NpZ2hhbmRsZXJfdCBzaWdfdDsgLyogQlNEIGNvbXBhdGliaWxpdHkuICovCiB0eXBlZGVmIF9fc2lnaGFuZGxlcl90IHNpZ2hhbmRsZXJfdDsgLyogZ2xpYmMgY29tcGF0aWJpbGl0eS4gKi8KIAorI2RlZmluZSBzaV90aW1lcmlkIHNpX3RpZCAvKiBnbGliYyBjb21wYXRpYmlsaXR5LiAqLworCiAjaWYgZGVmaW5lZChfX0xQNjRfXykKIAogc3RydWN0IHNpZ2FjdGlvbiB7CkBAIC05Myw4ICsxMDMsNiBAQAogZXh0ZXJuIGludCBzaWdhY3Rpb24oaW50LCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uKiwgc3RydWN0IHNpZ2FjdGlvbiopOwogCiBleHRlcm4gc2lnaGFuZGxlcl90IHNpZ25hbChpbnQsIHNpZ2hhbmRsZXJfdCk7Ci1leHRlcm4gc2lnaGFuZGxlcl90IGJzZF9zaWduYWwoaW50LCBzaWdoYW5kbGVyX3QpOwotZXh0ZXJuIHNpZ2hhbmRsZXJfdCBzeXN2X3NpZ25hbChpbnQsIHNpZ2hhbmRsZXJfdCk7CiAKIGV4dGVybiBpbnQgc2lnaW50ZXJydXB0KGludCwgaW50KTsKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N0ZGF0b21pYy5oIGIvbGliYy9pbmNsdWRlL3N0ZGF0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYjI1YTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3RkYXRvbWljLmgKQEAgLTAsMCArMSw1NzUgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDExIEVkIFNjaG91dGVuIDxlZEBGcmVlQlNELm9yZz4KKyAqICAgICAgICAgICAgICAgICAgICBEYXZpZCBDaGlzbmFsbCA8dGhlcmF2ZW5ARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpZm5kZWYgX1NUREFUT01JQ19IXworI2RlZmluZQlfU1REQVRPTUlDX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgZGVmaW5lZChfVVNJTkdfTElCQ1hYKQorIyBpZmRlZiBfX2NsYW5nX18KKyMgIGlmIF9faGFzX2ZlYXR1cmUoY3h4X2F0b21pYykKKyMgICBkZWZpbmUgX1NUREFUT01JQ19IQVZFX0FUT01JQworIyAgZW5kaWYKKyMgZWxzZSAvKiBnY2MgKi8KKyMgIGlmIF9fR05VQ19QUkVSRVEoNCwgNykKKyMgICBkZWZpbmUgX1NUREFUT01JQ19IQVZFX0FUT01JQworIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX1NUREFUT01JQ19IQVZFX0FUT01JQworCisvKiBXZSBoYXZlIGEgdXNhYmxlIEMrKyA8YXRvbWljPjsgdXNlIGl0IGluc3RlYWQuICAqLworCisjaW5jbHVkZSA8YXRvbWljPgorCisjdW5kZWYgX0F0b21pYworICAgICAgICAvKiBBbHNvIGRlZmluZWQgYnkgPGF0b21pYz4gZm9yIGdjYy4gIEJ1dCBub3QgdXNlZCBpbiBtYWNyb3MuICovCisgICAgICAgIC8qIEFsc28gYSBjbGFuZyBpbnRyaW5zaWMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogU2hvdWxkIG5vdCBiZSB1c2VkIGJ5IGNsaWVudCBjb2RlIGJlZm9yZSB0aGlzIGZpbGUgaXMgICAgICAqLworICAgICAgICAvKiBpbmNsdWRlZC4gIFRoZSBkZWZpbml0aW9ucyBpbiA8YXRvbWljPiB0aGVtc2VsdmVzIHNlZSAgICAgICovCisgICAgICAgIC8qIHRoZSBvbGQgZGVmaW5pdGlvbiwgYXMgdGhleSBzaG91bGQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogQ2xpZW50IGNvZGUgc2VlcyB0aGUgZm9sbG93aW5nIGRlZmluaXRpb24uICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIF9BdG9taWModCkgc3RkOjphdG9taWM8dD4KKwordXNpbmcgc3RkOjphdG9taWNfaXNfbG9ja19mcmVlOwordXNpbmcgc3RkOjphdG9taWNfaW5pdDsKK3VzaW5nIHN0ZDo6YXRvbWljX3N0b3JlOwordXNpbmcgc3RkOjphdG9taWNfc3RvcmVfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19sb2FkOwordXNpbmcgc3RkOjphdG9taWNfbG9hZF9leHBsaWNpdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2V4Y2hhbmdlOwordXNpbmcgc3RkOjphdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZzsKK3VzaW5nIHN0ZDo6YXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrOwordXNpbmcgc3RkOjphdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfYWRkOwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfc3ViOwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfb3I7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9vcl9leHBsaWNpdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX3hvcjsKK3VzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX2FuZDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdDsKK3VzaW5nIHN0ZDo6YXRvbWljX3RocmVhZF9mZW5jZTsKK3VzaW5nIHN0ZDo6YXRvbWljX3NpZ25hbF9mZW5jZTsKKwordXNpbmcgc3RkOjptZW1vcnlfb3JkZXI7Cit1c2luZyBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkOwordXNpbmcgc3RkOjptZW1vcnlfb3JkZXJfY29uc3VtZTsKK3VzaW5nIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2U7Cit1c2luZyBzdGQ6Om1lbW9yeV9vcmRlcl9hY3FfcmVsOwordXNpbmcgc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdDsKKwordXNpbmcgc3RkOjphdG9taWNfYm9vbDsKK3VzaW5nIHN0ZDo6YXRvbWljX2NoYXI7Cit1c2luZyBzdGQ6OmF0b21pY19zY2hhcjsKK3VzaW5nIHN0ZDo6YXRvbWljX3VjaGFyOwordXNpbmcgc3RkOjphdG9taWNfc2hvcnQ7Cit1c2luZyBzdGQ6OmF0b21pY191c2hvcnQ7Cit1c2luZyBzdGQ6OmF0b21pY19pbnQ7Cit1c2luZyBzdGQ6OmF0b21pY191aW50OwordXNpbmcgc3RkOjphdG9taWNfbG9uZzsKK3VzaW5nIHN0ZDo6YXRvbWljX3Vsb25nOwordXNpbmcgc3RkOjphdG9taWNfbGxvbmc7Cit1c2luZyBzdGQ6OmF0b21pY191bGxvbmc7Cit1c2luZyBzdGQ6OmF0b21pY19jaGFyMTZfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2NoYXIzMl90OwordXNpbmcgc3RkOjphdG9taWNfd2NoYXJfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludF9sZWFzdDhfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VpbnRfbGVhc3Q4X3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfbGVhc3QxNl90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9sZWFzdDE2X3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfbGVhc3QzMl90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9sZWFzdDMyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfbGVhc3Q2NF90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9sZWFzdDY0X3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfZmFzdDhfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VpbnRfZmFzdDhfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludF9mYXN0MTZfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VpbnRfZmFzdDE2X3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfZmFzdDMyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY191aW50X2Zhc3QzMl90OwordXNpbmcgc3RkOjphdG9taWNfaW50X2Zhc3Q2NF90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9mYXN0NjRfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludHB0cl90OwordXNpbmcgc3RkOjphdG9taWNfdWludHB0cl90OwordXNpbmcgc3RkOjphdG9taWNfc2l6ZV90OwordXNpbmcgc3RkOjphdG9taWNfcHRyZGlmZl90OwordXNpbmcgc3RkOjphdG9taWNfaW50bWF4X3Q7Cit1c2luZyBzdGQ6OmF0b21pY191aW50bWF4X3Q7CisKKyNlbHNlIC8qIDxhdG9taWM+IHVuYXZhaWxhYmxlLCBwb3NzaWJseSBiZWNhdXNlIHRoaXMgaXMgQywgbm90IEMrKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCisvKgorICogQzogRG8gaXQgb3Vyc2VsdmVzLgorICogTm90ZSB0aGF0IHRoZSBydW50aW1lIHJlcHJlc2VudGF0aW9uIGRlZmluZWQgaGVyZSBzaG91bGQgYmUgY29tcGF0aWJsZQorICogd2l0aCB0aGUgQysrIG9uZSwgaS5lLiBhbiBfQXRvbWljKFQpIG5lZWRzIHRvIGNvbnRhaW4gdGhlIHNhbWUKKyAqIGJpdHMgYXMgYSBULgorICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4gIC8qIEZvciBwdHJkaWZmX3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2luY2x1ZGUgPHN0ZGludC5oPiAgLyogVE9ETzogU2hvdWxkIHBvbGx1dGUgbmFtZXNwYWNlIGxlc3MuICAgICovCisjaWYgX19TVERDX1ZFUlNJT05fXyA+PSAyMDExMTJMCisjIGluY2x1ZGUgPHVjaGFyLmg+ICAvKiBGb3IgY2hhcjE2X3QgYW5kIGNoYXIzMl90LiAgICAgICAgICAgICAgKi8KKyNlbmRpZgorCisjaWZkZWYgX19jbGFuZ19fCisjIGlmIF9faGFzX2V4dGVuc2lvbihjX2F0b21pYykgfHwgX19oYXNfZXh0ZW5zaW9uKGN4eF9hdG9taWMpCisjICBkZWZpbmUgICAgICAgX19DTEFOR19BVE9NSUNTCisjIGVsc2UKKyMgIGVycm9yICJzdGRhdG9taWMuaCBkb2VzIG5vdCBzdXBwb3J0IHlvdXIgY29tcGlsZXIiCisjIGVuZGlmCisjIGlmIF9faGFzX2J1aWx0aW4oX19zeW5jX3N3YXApCisjICBkZWZpbmUgX19IQVNfQlVJTFRJTl9TWU5DX1NXQVAKKyMgZW5kaWYKKyNlbHNlCisjIGlmIF9fR05VQ19QUkVSRVEoNCwgNykKKyMgIGRlZmluZQlfX0dOVUNfQVRPTUlDUworIyBlbHNlCisjICBkZWZpbmUJX19TWU5DX0FUT01JQ1MKKyMgIGlmZGVmIF9fY3BsdXNwbHVzCisjICAgZGVmaW5lICAgICAgIF9fQVRPTUlDU19BVk9JRF9ET1RfSU5JVAorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisvKgorICogNy4xNy4xIEF0b21pYyBsb2NrLWZyZWUgbWFjcm9zLgorICovCisKKyNpZmRlZiBfX0dDQ19BVE9NSUNfQk9PTF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0JPT0xfTE9DS19GUkVFCQlfX0dDQ19BVE9NSUNfQk9PTF9MT0NLX0ZSRUUKKyNlbGlmIGRlZmluZWQoX19TWU5DX0FUT01JQ1MpCisjZGVmaW5lCUFUT01JQ19CT09MX0xPQ0tfRlJFRSAgICAgICAgICAgMiAvKiBGb3IgYWxsIG1vZGVybiBwbGF0Zm9ybXMgKi8KKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19DSEFSX0xPQ0tfRlJFRQorI2RlZmluZQlBVE9NSUNfQ0hBUl9MT0NLX0ZSRUUJCV9fR0NDX0FUT01JQ19DSEFSX0xPQ0tfRlJFRQorI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKKyNkZWZpbmUJQVRPTUlDX0NIQVJfTE9DS19GUkVFICAgICAgICAgICAyCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfQ0hBUjE2X1RfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19DSEFSMTZfVF9MT0NLX0ZSRUUJX19HQ0NfQVRPTUlDX0NIQVIxNl9UX0xPQ0tfRlJFRQorI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKKyNkZWZpbmUJQVRPTUlDX0NIQVIxNl9UX0xPQ0tfRlJFRSAgICAgICAyCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfQ0hBUjMyX1RfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19DSEFSMzJfVF9MT0NLX0ZSRUUJX19HQ0NfQVRPTUlDX0NIQVIzMl9UX0xPQ0tfRlJFRQorI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKKyNkZWZpbmUJQVRPTUlDX0NIQVIzMl9UX0xPQ0tfRlJFRSAgICAgICAyCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfV0NIQVJfVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX1dDSEFSX1RfTE9DS19GUkVFCV9fR0NDX0FUT01JQ19XQ0hBUl9UX0xPQ0tfRlJFRQorI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKKyNkZWZpbmUJQVRPTUlDX1dDSEFSX1RfTE9DS19GUkVFICAgICAgICAyCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfU0hPUlRfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19TSE9SVF9MT0NLX0ZSRUUJCV9fR0NDX0FUT01JQ19TSE9SVF9MT0NLX0ZSRUUKKyNlbGlmIGRlZmluZWQoX19TWU5DX0FUT01JQ1MpCisjZGVmaW5lCUFUT01JQ19TSE9SVF9MT0NLX0ZSRUUgICAgICAgICAgMgorI2VuZGlmCisjaWZkZWYgX19HQ0NfQVRPTUlDX0lOVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0lOVF9MT0NLX0ZSRUUJCV9fR0NDX0FUT01JQ19JTlRfTE9DS19GUkVFCisjZWxpZiBkZWZpbmVkKF9fU1lOQ19BVE9NSUNTKQorI2RlZmluZQlBVE9NSUNfSU5UX0xPQ0tfRlJFRSAgICAgICAgICAgIDIKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19MT05HX0xPQ0tfRlJFRQorI2RlZmluZQlBVE9NSUNfTE9OR19MT0NLX0ZSRUUJCV9fR0NDX0FUT01JQ19MT05HX0xPQ0tfRlJFRQorI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKKyNkZWZpbmUJQVRPTUlDX0xPTkdfTE9DS19GUkVFICAgICAgICAgICAyCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfTExPTkdfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19MTE9OR19MT0NLX0ZSRUUJCV9fR0NDX0FUT01JQ19MTE9OR19MT0NLX0ZSRUUKKyNlbGlmIGRlZmluZWQoX19TWU5DX0FUT01JQ1MpCisjZGVmaW5lCUFUT01JQ19MTE9OR19MT0NLX0ZSRUUgICAgICAgICAgMSAvKiBtYXliZSAqLworI2VuZGlmCisjaWZkZWYgX19HQ0NfQVRPTUlDX1BPSU5URVJfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19QT0lOVEVSX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfUE9JTlRFUl9MT0NLX0ZSRUUKKyNlbGlmIGRlZmluZWQoX19TWU5DX0FUT01JQ1MpCisjZGVmaW5lCUFUT01JQ19QT0lOVEVSX0xPQ0tfRlJFRSAgICAgICAgMgorI2VuZGlmCisKKy8qCisgKiA3LjE3LjIgSW5pdGlhbGl6YXRpb24uCisgKi8KKworI2lmIGRlZmluZWQoX19DTEFOR19BVE9NSUNTKQorI2RlZmluZQlBVE9NSUNfVkFSX0lOSVQodmFsdWUpCQkodmFsdWUpCisjZGVmaW5lCWF0b21pY19pbml0KG9iaiwgdmFsdWUpCQlfX2MxMV9hdG9taWNfaW5pdChvYmosIHZhbHVlKQorI2Vsc2UKKyNpZmRlZiBfX0FUT01JQ1NfQVZPSURfRE9UX0lOSVQKKyNkZWZpbmUJQVRPTUlDX1ZBUl9JTklUKHZhbHVlKQkJeyB2YWx1ZSB9CisjZWxzZQorI2RlZmluZQlBVE9NSUNfVkFSX0lOSVQodmFsdWUpCQl7IC5fX3ZhbCA9ICh2YWx1ZSkgfQorI2VuZGlmCisjZGVmaW5lCWF0b21pY19pbml0KG9iaiwgdmFsdWUpCQkoKHZvaWQpKChvYmopLT5fX3ZhbCA9ICh2YWx1ZSkpKQorI2VuZGlmCisKKy8qCisgKiBDbGFuZyBhbmQgcmVjZW50IEdDQyBib3RoIHByb3ZpZGUgcHJlZGVmaW5lZCBtYWNyb3MgZm9yIHRoZSBtZW1vcnkKKyAqIG9yZGVyaW5ncy4gIElmIHdlIGFyZSB1c2luZyBhIGNvbXBpbGVyIHRoYXQgZG9lc24ndCBkZWZpbmUgdGhlbSwgdXNlIHRoZQorICogY2xhbmcgdmFsdWVzIC0gdGhlc2Ugd2lsbCBiZSBpZ25vcmVkIGluIHRoZSBmYWxsYmFjayBwYXRoLgorICovCisKKyNpZm5kZWYgX19BVE9NSUNfUkVMQVhFRAorI2RlZmluZSBfX0FUT01JQ19SRUxBWEVECQkwCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfQ09OU1VNRQorI2RlZmluZSBfX0FUT01JQ19DT05TVU1FCQkxCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfQUNRVUlSRQorI2RlZmluZSBfX0FUT01JQ19BQ1FVSVJFCQkyCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfUkVMRUFTRQorI2RlZmluZSBfX0FUT01JQ19SRUxFQVNFCQkzCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfQUNRX1JFTAorI2RlZmluZSBfX0FUT01JQ19BQ1FfUkVMCQk0CisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfU0VRX0NTVAorI2RlZmluZSBfX0FUT01JQ19TRVFfQ1NUCQk1CisjZW5kaWYKKworLyoKKyAqIDcuMTcuMyBPcmRlciBhbmQgY29uc2lzdGVuY3kuCisgKgorICogVGhlIG1lbW9yeV9vcmRlcl8qIGNvbnN0YW50cyB0aGF0IGRlbm90ZSB0aGUgYmFycmllciBiZWhhdmlvdXIgb2YgdGhlCisgKiBhdG9taWMgb3BlcmF0aW9ucy4KKyAqIFRoZSBlbnVtIHZhbHVlcyBtdXN0IGJlIGlkZW50aWNhbCB0byB0aG9zZSB1c2VkIGJ5IHRoZQorICogQysrIDxhdG9taWM+IGhlYWRlci4KKyAqLworCit0eXBlZGVmIGVudW0geworCW1lbW9yeV9vcmRlcl9yZWxheGVkID0gX19BVE9NSUNfUkVMQVhFRCwKKwltZW1vcnlfb3JkZXJfY29uc3VtZSA9IF9fQVRPTUlDX0NPTlNVTUUsCisJbWVtb3J5X29yZGVyX2FjcXVpcmUgPSBfX0FUT01JQ19BQ1FVSVJFLAorCW1lbW9yeV9vcmRlcl9yZWxlYXNlID0gX19BVE9NSUNfUkVMRUFTRSwKKwltZW1vcnlfb3JkZXJfYWNxX3JlbCA9IF9fQVRPTUlDX0FDUV9SRUwsCisJbWVtb3J5X29yZGVyX3NlcV9jc3QgPSBfX0FUT01JQ19TRVFfQ1NUCit9IG1lbW9yeV9vcmRlcjsKKworLyoKKyAqIDcuMTcuNCBGZW5jZXMuCisgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2F0b21pY190aHJlYWRfZmVuY2UobWVtb3J5X29yZGVyIF9fb3JkZXIgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCit7CisKKyNpZmRlZiBfX0NMQU5HX0FUT01JQ1MKKwlfX2MxMV9hdG9taWNfdGhyZWFkX2ZlbmNlKF9fb3JkZXIpOworI2VsaWYgZGVmaW5lZChfX0dOVUNfQVRPTUlDUykKKwlfX2F0b21pY190aHJlYWRfZmVuY2UoX19vcmRlcik7CisjZWxzZQorCV9fc3luY19zeW5jaHJvbml6ZSgpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCithdG9taWNfc2lnbmFsX2ZlbmNlKG1lbW9yeV9vcmRlciBfX29yZGVyIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQoreworCisjaWZkZWYgX19DTEFOR19BVE9NSUNTCisJX19jMTFfYXRvbWljX3NpZ25hbF9mZW5jZShfX29yZGVyKTsKKyNlbGlmIGRlZmluZWQoX19HTlVDX0FUT01JQ1MpCisJX19hdG9taWNfc2lnbmFsX2ZlbmNlKF9fb3JkZXIpOworI2Vsc2UKKwlfX2FzbSB2b2xhdGlsZSAoIiIgOjo6ICJtZW1vcnkiKTsKKyNlbmRpZgorfQorCisvKgorICogNy4xNy41IExvY2stZnJlZSBwcm9wZXJ0eS4KKyAqLworCisjaWYgZGVmaW5lZChfS0VSTkVMKQorLyogQXRvbWljcyBpbiBrZXJuZWxzcGFjZSBhcmUgYWx3YXlzIGxvY2stZnJlZS4gKi8KKyNkZWZpbmUJYXRvbWljX2lzX2xvY2tfZnJlZShvYmopIFwKKwkoKHZvaWQpKG9iaiksIChfQm9vbCkxKQorI2VsaWYgZGVmaW5lZChfX0NMQU5HX0FUT01JQ1MpCisjZGVmaW5lCWF0b21pY19pc19sb2NrX2ZyZWUob2JqKSBcCisJX19jMTFfYXRvbWljX2lzX2xvY2tfZnJlZShzaXplb2YoKihvYmopKSkKKyNlbGlmIGRlZmluZWQoX19HTlVDX0FUT01JQ1MpCisjZGVmaW5lCWF0b21pY19pc19sb2NrX2ZyZWUob2JqKSBcCisJX19hdG9taWNfaXNfbG9ja19mcmVlKHNpemVvZigob2JqKS0+X192YWwpLCAmKG9iaiktPl9fdmFsKQorI2Vsc2UKKyNkZWZpbmUJYXRvbWljX2lzX2xvY2tfZnJlZShvYmopIFwKKwkoKHZvaWQpKG9iaiksIHNpemVvZigob2JqKS0+X192YWwpIDw9IHNpemVvZih2b2lkICopKQorI2VuZGlmCisKKy8qCisgKiA3LjE3LjYgQXRvbWljIGludGVnZXIgdHlwZXMuCisgKi8KKworI2lmbmRlZiBfX0NMQU5HX0FUT01JQ1MKKy8qCisgKiBObyBuYXRpdmUgc3VwcG9ydCBmb3IgX0F0b21pYygpLiBQbGFjZSBvYmplY3QgaW4gc3RydWN0dXJlIHRvIHByZXZlbnQKKyAqIG1vc3QgZm9ybXMgb2YgZGlyZWN0IG5vbi1hdG9taWMgYWNjZXNzLgorICovCisjZGVmaW5lIF9BdG9taWMoVCkgICAgICAgICAgICAgIHN0cnVjdCB7IFQgdm9sYXRpbGUgX192YWw7IH0KKyNlbmRpZgorCit0eXBlZGVmIF9BdG9taWMoYm9vbCkJCQlhdG9taWNfYm9vbDsKK3R5cGVkZWYgX0F0b21pYyhjaGFyKQkJCWF0b21pY19jaGFyOwordHlwZWRlZiBfQXRvbWljKHNpZ25lZCBjaGFyKQkJYXRvbWljX3NjaGFyOwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIGNoYXIpCQlhdG9taWNfdWNoYXI7Cit0eXBlZGVmIF9BdG9taWMoc2hvcnQpCQkJYXRvbWljX3Nob3J0OwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIHNob3J0KQkJYXRvbWljX3VzaG9ydDsKK3R5cGVkZWYgX0F0b21pYyhpbnQpCQkJYXRvbWljX2ludDsKK3R5cGVkZWYgX0F0b21pYyh1bnNpZ25lZCBpbnQpCQlhdG9taWNfdWludDsKK3R5cGVkZWYgX0F0b21pYyhsb25nKQkJCWF0b21pY19sb25nOwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIGxvbmcpCQlhdG9taWNfdWxvbmc7Cit0eXBlZGVmIF9BdG9taWMobG9uZyBsb25nKQkJYXRvbWljX2xsb25nOwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIGxvbmcgbG9uZykJYXRvbWljX3VsbG9uZzsKKyNpZiBfX1NURENfVkVSU0lPTl9fID49IDIwMTExMkwgfHwgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0eXBlZGVmIF9BdG9taWMoY2hhcjE2X3QpCQlhdG9taWNfY2hhcjE2X3Q7CisgIHR5cGVkZWYgX0F0b21pYyhjaGFyMzJfdCkJCWF0b21pY19jaGFyMzJfdDsKKyNlbmRpZgordHlwZWRlZiBfQXRvbWljKHdjaGFyX3QpCQlhdG9taWNfd2NoYXJfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRfbGVhc3Q4X3QpCQlhdG9taWNfaW50X2xlYXN0OF90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfbGVhc3Q4X3QpCWF0b21pY191aW50X2xlYXN0OF90OwordHlwZWRlZiBfQXRvbWljKGludF9sZWFzdDE2X3QpCWF0b21pY19pbnRfbGVhc3QxNl90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfbGVhc3QxNl90KQlhdG9taWNfdWludF9sZWFzdDE2X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2xlYXN0MzJfdCkJYXRvbWljX2ludF9sZWFzdDMyX3Q7Cit0eXBlZGVmIF9BdG9taWModWludF9sZWFzdDMyX3QpCWF0b21pY191aW50X2xlYXN0MzJfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRfbGVhc3Q2NF90KQlhdG9taWNfaW50X2xlYXN0NjRfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50X2xlYXN0NjRfdCkJYXRvbWljX3VpbnRfbGVhc3Q2NF90OwordHlwZWRlZiBfQXRvbWljKGludF9mYXN0OF90KQkJYXRvbWljX2ludF9mYXN0OF90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfZmFzdDhfdCkJCWF0b21pY191aW50X2Zhc3Q4X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2Zhc3QxNl90KQkJYXRvbWljX2ludF9mYXN0MTZfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50X2Zhc3QxNl90KQlhdG9taWNfdWludF9mYXN0MTZfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRfZmFzdDMyX3QpCQlhdG9taWNfaW50X2Zhc3QzMl90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfZmFzdDMyX3QpCWF0b21pY191aW50X2Zhc3QzMl90OwordHlwZWRlZiBfQXRvbWljKGludF9mYXN0NjRfdCkJCWF0b21pY19pbnRfZmFzdDY0X3Q7Cit0eXBlZGVmIF9BdG9taWModWludF9mYXN0NjRfdCkJYXRvbWljX3VpbnRfZmFzdDY0X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50cHRyX3QpCQlhdG9taWNfaW50cHRyX3Q7Cit0eXBlZGVmIF9BdG9taWModWludHB0cl90KQkJYXRvbWljX3VpbnRwdHJfdDsKK3R5cGVkZWYgX0F0b21pYyhzaXplX3QpCQlhdG9taWNfc2l6ZV90OwordHlwZWRlZiBfQXRvbWljKHB0cmRpZmZfdCkJCWF0b21pY19wdHJkaWZmX3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50bWF4X3QpCQlhdG9taWNfaW50bWF4X3Q7Cit0eXBlZGVmIF9BdG9taWModWludG1heF90KQkJYXRvbWljX3VpbnRtYXhfdDsKKworLyoKKyAqIDcuMTcuNyBPcGVyYXRpb25zIG9uIGF0b21pYyB0eXBlcy4KKyAqLworCisvKgorICogQ29tcGlsZXItc3BlY2lmaWMgb3BlcmF0aW9ucy4KKyAqLworCisjaWYgZGVmaW5lZChfX0NMQU5HX0FUT01JQ1MpCisjZGVmaW5lCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAlcCisgICAgZGVzaXJlZCwgc3VjY2VzcywgZmFpbHVyZSkJCQkJCQlcCisJX19jMTFfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKG9iamVjdCwgZXhwZWN0ZWQsIGRlc2lyZWQsCVwKKwkgICAgc3VjY2VzcywgZmFpbHVyZSkKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAkJXAorICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCQkJCQkJXAorCV9fYzExX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWsob2JqZWN0LCBleHBlY3RlZCwgZGVzaXJlZCwJXAorCSAgICBzdWNjZXNzLCBmYWlsdXJlKQorI2RlZmluZQlhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCVwKKwlfX2MxMV9hdG9taWNfZXhjaGFuZ2Uob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYzExX2F0b21pY19mZXRjaF9hZGQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYzExX2F0b21pY19mZXRjaF9hbmQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19jMTFfYXRvbWljX2ZldGNoX29yKG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2MxMV9hdG9taWNfZmV0Y2hfc3ViKG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF94b3JfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2MxMV9hdG9taWNfZmV0Y2hfeG9yKG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19sb2FkX2V4cGxpY2l0KG9iamVjdCwgb3JkZXIpCQkJCVwKKwlfX2MxMV9hdG9taWNfbG9hZChvYmplY3QsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfc3RvcmVfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCQlcCisJX19jMTFfYXRvbWljX3N0b3JlKG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCisjZWxpZiBkZWZpbmVkKF9fR05VQ19BVE9NSUNTKQorI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJXAorICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCQkJCQkJXAorCV9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbigmKG9iamVjdCktPl9fdmFsLCBleHBlY3RlZCwJCVwKKwkgICAgZGVzaXJlZCwgMCwgc3VjY2VzcywgZmFpbHVyZSkKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAkJXAorICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCQkJCQkJXAorCV9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbigmKG9iamVjdCktPl9fdmFsLCBleHBlY3RlZCwJCVwKKwkgICAgZGVzaXJlZCwgMSwgc3VjY2VzcywgZmFpbHVyZSkKKyNkZWZpbmUJYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCQlcCisJX19hdG9taWNfZXhjaGFuZ2VfbigmKG9iamVjdCktPl9fdmFsLCBkZXNpcmVkLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYXRvbWljX2ZldGNoX2FkZCgmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYXRvbWljX2ZldGNoX2FuZCgmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19hdG9taWNfZmV0Y2hfb3IoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2F0b21pY19mZXRjaF9zdWIoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF94b3JfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2F0b21pY19mZXRjaF94b3IoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19sb2FkX2V4cGxpY2l0KG9iamVjdCwgb3JkZXIpCQkJCVwKKwlfX2F0b21pY19sb2FkX24oJihvYmplY3QpLT5fX3ZhbCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19zdG9yZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJCVwKKwlfX2F0b21pY19zdG9yZV9uKCYob2JqZWN0KS0+X192YWwsIGRlc2lyZWQsIG9yZGVyKQorI2Vsc2UKKyNkZWZpbmUJX19hdG9taWNfYXBwbHlfc3RyaWRlKG9iamVjdCwgb3BlcmFuZCkgXAorCSgoKF9fdHlwZW9mX18oKG9iamVjdCktPl9fdmFsKSkwKSArIChvcGVyYW5kKSkKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KG9iamVjdCwgZXhwZWN0ZWQsCVwKKyAgICBkZXNpcmVkLCBzdWNjZXNzLCBmYWlsdXJlKQlfX2V4dGVuc2lvbl9fICh7CQkJXAorCV9fdHlwZW9mX18oZXhwZWN0ZWQpIF9fZXAgPSAoZXhwZWN0ZWQpOwkJCQlcCisJX190eXBlb2ZfXygqX19lcCkgX19lID0gKl9fZXA7CQkJCQlcCisJKHZvaWQpKHN1Y2Nlc3MpOyAodm9pZCkoZmFpbHVyZSk7CQkJCVwKKwkoYm9vbCkoKCpfX2VwID0gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwKCYob2JqZWN0KS0+X192YWwsCVwKKwkgICAgX19lLCBkZXNpcmVkKSkgPT0gX19lKTsJCQkJCVwKK30pCisjZGVmaW5lCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJCVwKKyAgICBkZXNpcmVkLCBzdWNjZXNzLCBmYWlsdXJlKQkJCQkJCVwKKwlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJXAorCQlkZXNpcmVkLCBzdWNjZXNzLCBmYWlsdXJlKQorI2lmZGVmIF9fSEFTX0JVSUxUSU5fU1lOQ19TV0FQCisvKiBDbGFuZyBwcm92aWRlcyBhIGZ1bGwtYmFycmllciBhdG9taWMgZXhjaGFuZ2UgLSB1c2UgaXQgaWYgYXZhaWxhYmxlLiAqLworI2RlZmluZQlhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCVwKKwkoKHZvaWQpKG9yZGVyKSwgX19zeW5jX3N3YXAoJihvYmplY3QpLT5fX3ZhbCwgZGVzaXJlZCkpCisjZWxzZQorLyoKKyAqIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCgpIGlzIG9ubHkgYW4gYWNxdWlyZSBiYXJyaWVyIGluIHRoZW9yeSAoYWx0aG91Z2ggaW4KKyAqIHByYWN0aWNlIGl0IGlzIHVzdWFsbHkgYSBmdWxsIGJhcnJpZXIpIHNvIHdlIG5lZWQgYW4gZXhwbGljaXQgYmFycmllciBiZWZvcmUKKyAqIGl0LgorICovCisjZGVmaW5lCWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJXAorX19leHRlbnNpb25fXyAoewkJCQkJCQlcCisJX190eXBlb2ZfXyhvYmplY3QpIF9fbyA9IChvYmplY3QpOwkJCQlcCisJX190eXBlb2ZfXyhkZXNpcmVkKSBfX2QgPSAoZGVzaXJlZCk7CQkJCVwKKwkodm9pZCkob3JkZXIpOwkJCQkJCQlcCisJX19zeW5jX3N5bmNocm9uaXplKCk7CQkJCQkJXAorCV9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCgmKF9fbyktPl9fdmFsLCBfX2QpOwkJCVwKK30pCisjZW5kaWYKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmKG9iamVjdCktPl9fdmFsLAkJXAorCSAgICBfX2F0b21pY19hcHBseV9zdHJpZGUob2JqZWN0LCBvcGVyYW5kKSkpCisjZGVmaW5lCWF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwkoKHZvaWQpKG9yZGVyKSwgX19zeW5jX2ZldGNoX2FuZF9hbmQoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCkpCisjZGVmaW5lCWF0b21pY19mZXRjaF9vcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfZmV0Y2hfYW5kX29yKCYob2JqZWN0KS0+X192YWwsIG9wZXJhbmQpKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfc3ViKCYob2JqZWN0KS0+X192YWwsCQlcCisJICAgIF9fYXRvbWljX2FwcGx5X3N0cmlkZShvYmplY3QsIG9wZXJhbmQpKSkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfZmV0Y2hfYW5kX3hvcigmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kKSkKKyNkZWZpbmUJYXRvbWljX2xvYWRfZXhwbGljaXQob2JqZWN0LCBvcmRlcikJCQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmKG9iamVjdCktPl9fdmFsLCAwKSkKKyNkZWZpbmUJYXRvbWljX3N0b3JlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCQkJXAorCSgodm9pZClhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikpCisjZW5kaWYKKworLyoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9ucy4KKyAqCisgKiBEb24ndCBwcm92aWRlIHRoZXNlIGluIGtlcm5lbCBzcGFjZS4gSW4ga2VybmVsIHNwYWNlLCB3ZSBzaG91bGQgYmUKKyAqIGRpc2NpcGxpbmVkIGVub3VnaCB0byBhbHdheXMgcHJvdmlkZSBleHBsaWNpdCBiYXJyaWVycy4KKyAqLworCisjaWZuZGVmIF9LRVJORUwKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKG9iamVjdCwgZXhwZWN0ZWQsIGRlc2lyZWQpCVwKKwlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJXAorCSAgICBkZXNpcmVkLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWsob2JqZWN0LCBleHBlY3RlZCwgZGVzaXJlZCkJCVwKKwlhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KG9iamVjdCwgZXhwZWN0ZWQsCQlcCisJICAgIGRlc2lyZWQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0LCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2V4Y2hhbmdlKG9iamVjdCwgZGVzaXJlZCkJCQkJXAorCWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZQlhdG9taWNfZmV0Y2hfYWRkKG9iamVjdCwgb3BlcmFuZCkJCQkJXAorCWF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FuZChvYmplY3QsIG9wZXJhbmQpCQkJCVwKKwlhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19mZXRjaF9vcihvYmplY3QsIG9wZXJhbmQpCQkJCVwKKwlhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3N1YihvYmplY3QsIG9wZXJhbmQpCQkJCVwKKwlhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19mZXRjaF94b3Iob2JqZWN0LCBvcGVyYW5kKQkJCQlcCisJYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZQlhdG9taWNfbG9hZChvYmplY3QpCQkJCQkJXAorCWF0b21pY19sb2FkX2V4cGxpY2l0KG9iamVjdCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19zdG9yZShvYmplY3QsIGRlc2lyZWQpCQkJCQlcCisJYXRvbWljX3N0b3JlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZW5kaWYgLyogIV9LRVJORUwgKi8KKworLyoKKyAqIDcuMTcuOCBBdG9taWMgZmxhZyB0eXBlIGFuZCBvcGVyYXRpb25zLgorICoKKyAqIFhYWDogQXNzdW1lIGF0b21pY19ib29sIGNhbiBiZSB1c2VkIGFzIGFuIGF0b21pY19mbGFnLiBJcyB0aGVyZSBzb21lCisgKiBraW5kIG9mIGNvbXBpbGVyIGJ1aWx0LWluIHR5cGUgd2UgY291bGQgdXNlPworICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlhdG9taWNfYm9vbAlfX2ZsYWc7Cit9IGF0b21pY19mbGFnOworCisjZGVmaW5lCUFUT01JQ19GTEFHX0lOSVQJCXsgQVRPTUlDX1ZBUl9JTklUKGZhbHNlKSB9CisKK3N0YXRpYyBfX2lubGluZSBib29sCithdG9taWNfZmxhZ190ZXN0X2FuZF9zZXRfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2ZsYWcgKl9fb2JqZWN0LAorICAgIG1lbW9yeV9vcmRlciBfX29yZGVyKQoreworCXJldHVybiAoYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KCZfX29iamVjdC0+X19mbGFnLCAxLCBfX29yZGVyKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCithdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxhZyAqX19vYmplY3QsIG1lbW9yeV9vcmRlciBfX29yZGVyKQoreworCisJYXRvbWljX3N0b3JlX2V4cGxpY2l0KCZfX29iamVjdC0+X19mbGFnLCAwLCBfX29yZGVyKTsKK30KKworI2lmbmRlZiBfS0VSTkVMCitzdGF0aWMgX19pbmxpbmUgYm9vbAorYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0KHZvbGF0aWxlIGF0b21pY19mbGFnICpfX29iamVjdCkKK3sKKworCXJldHVybiAoYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0X2V4cGxpY2l0KF9fb2JqZWN0LAorCSAgICBtZW1vcnlfb3JkZXJfc2VxX2NzdCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYXRvbWljX2ZsYWdfY2xlYXIodm9sYXRpbGUgYXRvbWljX2ZsYWcgKl9fb2JqZWN0KQoreworCisJYXRvbWljX2ZsYWdfY2xlYXJfZXhwbGljaXQoX19vYmplY3QsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKK30KKyNlbmRpZiAvKiAhX0tFUk5FTCAqLworCisjZW5kaWYgLyogPGF0b21pYz4gdW5hdmFpbGFibGUgKi8KKworI2VuZGlmIC8qICFfU1REQVRPTUlDX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3RkaW50LmggYi9saWJjL2luY2x1ZGUvc3RkaW50LmgKaW5kZXggYmU0OTQ4NS4uYTZmODUwNSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N0ZGludC5oCisrKyBiL2xpYmMvaW5jbHVkZS9zdGRpbnQuaApAQCAtMzAsNyArMzAsMjkgQEAKICNkZWZpbmUgX1NURElOVF9ICiAKICNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzeXMvX3R5cGVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS93Y2hhcl9saW1pdHMuaD4KKwordHlwZWRlZiBfX3NpZ25lZCBjaGFyIF9faW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsKK3R5cGVkZWYgc2hvcnQgX19pbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3VpbnQxNl90OwordHlwZWRlZiBpbnQgX19pbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKKyNpZiBfX0xQNjRfXwordHlwZWRlZiBsb25nIF9faW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VpbnQ2NF90OworI2Vsc2UKK3R5cGVkZWYgbG9uZyBsb25nIF9faW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdWludDY0X3Q7CisjZW5kaWYKKworI2lmIF9fTFA2NF9fCit0eXBlZGVmIGxvbmcgX19pbnRwdHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VpbnRwdHJfdDsKKyNlbHNlCit0eXBlZGVmIGludCBfX2ludHB0cl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50cHRyX3Q7CisjZW5kaWYKIAogdHlwZWRlZiBfX2ludDhfdCAgICAgIGludDhfdDsKIHR5cGVkZWYgX191aW50OF90ICAgICB1aW50OF90OwpAQCAtNDQsNDAgKzY2LDQxIEBACiB0eXBlZGVmIF9faW50NjRfdCAgICAgaW50NjRfdDsKIHR5cGVkZWYgX191aW50NjRfdCAgICB1aW50NjRfdDsKIAotdHlwZWRlZiBpbnQ4X3QgICAgICAgIGludF9sZWFzdDhfdDsKLXR5cGVkZWYgaW50OF90ICAgICAgICBpbnRfZmFzdDhfdDsKK3R5cGVkZWYgX19pbnRwdHJfdCAgICBpbnRwdHJfdDsKK3R5cGVkZWYgX191aW50cHRyX3QgICB1aW50cHRyX3Q7CiAKK3R5cGVkZWYgaW50OF90ICAgICAgICBpbnRfbGVhc3Q4X3Q7CiB0eXBlZGVmIHVpbnQ4X3QgICAgICAgdWludF9sZWFzdDhfdDsKLXR5cGVkZWYgdWludDhfdCAgICAgICB1aW50X2Zhc3Q4X3Q7CiAKIHR5cGVkZWYgaW50MTZfdCAgICAgICBpbnRfbGVhc3QxNl90OwotdHlwZWRlZiBpbnQzMl90ICAgICAgIGludF9mYXN0MTZfdDsKLQogdHlwZWRlZiB1aW50MTZfdCAgICAgIHVpbnRfbGVhc3QxNl90OwotdHlwZWRlZiB1aW50MzJfdCAgICAgIHVpbnRfZmFzdDE2X3Q7CiAKIHR5cGVkZWYgaW50MzJfdCAgICAgICBpbnRfbGVhc3QzMl90OwotdHlwZWRlZiBpbnQzMl90ICAgICAgIGludF9mYXN0MzJfdDsKLQogdHlwZWRlZiB1aW50MzJfdCAgICAgIHVpbnRfbGVhc3QzMl90OwotdHlwZWRlZiB1aW50MzJfdCAgICAgIHVpbnRfZmFzdDMyX3Q7CiAKIHR5cGVkZWYgaW50NjRfdCAgICAgICBpbnRfbGVhc3Q2NF90OwotdHlwZWRlZiBpbnQ2NF90ICAgICAgIGludF9mYXN0NjRfdDsKLQogdHlwZWRlZiB1aW50NjRfdCAgICAgIHVpbnRfbGVhc3Q2NF90OworCit0eXBlZGVmIGludDhfdCAgICAgICAgaW50X2Zhc3Q4X3Q7Cit0eXBlZGVmIHVpbnQ4X3QgICAgICAgdWludF9mYXN0OF90OworCit0eXBlZGVmIGludDY0X3QgICAgICAgaW50X2Zhc3Q2NF90OwogdHlwZWRlZiB1aW50NjRfdCAgICAgIHVpbnRfZmFzdDY0X3Q7CiAKLSNpZmRlZiBfX0xQNjRfXwotdHlwZWRlZiBsb25nICAgICAgICAgIGludHB0cl90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVpbnRwdHJfdDsKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQordHlwZWRlZiBpbnQ2NF90ICAgICAgIGludF9mYXN0MTZfdDsKK3R5cGVkZWYgdWludDY0X3QgICAgICB1aW50X2Zhc3QxNl90OwordHlwZWRlZiBpbnQ2NF90ICAgICAgIGludF9mYXN0MzJfdDsKK3R5cGVkZWYgdWludDY0X3QgICAgICB1aW50X2Zhc3QzMl90OwogI2Vsc2UKLXR5cGVkZWYgaW50ICAgICAgICAgICBpbnRwdHJfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50ICB1aW50cHRyX3Q7Cit0eXBlZGVmIGludDMyX3QgICAgICAgaW50X2Zhc3QxNl90OwordHlwZWRlZiB1aW50MzJfdCAgICAgIHVpbnRfZmFzdDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgICAgICAgaW50X2Zhc3QzMl90OwordHlwZWRlZiB1aW50MzJfdCAgICAgIHVpbnRfZmFzdDMyX3Q7CiAjZW5kaWYKIAotdHlwZWRlZiB1aW50NjRfdCB1aW50bWF4X3Q7Ci10eXBlZGVmIGludDY0X3QgIGludG1heF90OwordHlwZWRlZiB1aW50NjRfdCAgICAgIHVpbnRtYXhfdDsKK3R5cGVkZWYgaW50NjRfdCAgICAgICBpbnRtYXhfdDsKIAogLyogS2VlcCB0aGUga2VybmVsIGZyb20gdHJ5aW5nIHRvIGRlZmluZSB0aGVzZSB0eXBlcy4uLiAqLwogI2RlZmluZSBfX0JJVF9UWVBFU19ERUZJTkVEX18KQEAgLTExMyw3ICsxMzYsNyBAQAogI2RlZmluZSBJTlRNQVhfQyhjKSAgICAgICBJTlQ2NF9DKGMpCiAjZGVmaW5lIFVJTlRNQVhfQyhjKSAgICAgIFVJTlQ2NF9DKGMpCiAKLSNpZmRlZiBfX0xQNjRfXworI2lmIGRlZmluZWQoX19MUDY0X18pCiAjICBkZWZpbmUgSU5UNjRfQyhjKSAgICAgIGMgIyMgTAogIyAgZGVmaW5lIFVJTlQ2NF9DKGMpICAgICBjICMjIFVMCiAjICBkZWZpbmUgSU5UUFRSX0MoYykgICAgIElOVDY0X0MoYykKQEAgLTE3OCwxNSArMjAxLDE1IEBACiAjZGVmaW5lIFNJR19BVE9NSUNfTUFYICAgSU5UMzJfTUFYCiAjZGVmaW5lIFNJR19BVE9NSUNfTUlOICAgSU5UMzJfTUlOCiAKLSNpZm5kZWYgV0NIQVJfTUFYIC8qIFRoZXNlIG1pZ2h0IGFsc28gaGF2ZSBiZWVuIGRlZmluZWQgYnkgPHdjaGFyLmg+LiAqLwotIyAgZGVmaW5lIFdDSEFSX01BWCAgICAgIElOVDMyX01BWAotIyAgZGVmaW5lIFdDSEFSX01JTiAgICAgIElOVDMyX01JTgorI2lmIGRlZmluZWQoX19XSU5UX1VOU0lHTkVEX18pCisjICBkZWZpbmUgV0lOVF9NQVggICAgICAgVUlOVDMyX01BWAorIyAgZGVmaW5lIFdJTlRfTUlOICAgICAgIDAKKyNlbHNlCisjICBkZWZpbmUgV0lOVF9NQVggICAgICAgSU5UMzJfTUFYCisjICBkZWZpbmUgV0lOVF9NSU4gICAgICAgSU5UMzJfTUlOCiAjZW5kaWYKIAotI2RlZmluZSBXSU5UX01BWCAgICAgICAgIElOVDMyX01BWAotI2RlZmluZSBXSU5UX01JTiAgICAgICAgIElOVDMyX01JTgotCi0jaWZkZWYgX19MUDY0X18KKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQogIyAgZGVmaW5lIElOVFBUUl9NSU4gICAgIElOVDY0X01JTgogIyAgZGVmaW5lIElOVFBUUl9NQVggICAgIElOVDY0X01BWAogIyAgZGVmaW5lIFVJTlRQVFJfTUFYICAgIFVJTlQ2NF9NQVgKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zdGRpby5oIGIvbGliYy9pbmNsdWRlL3N0ZGlvLmgKaW5kZXggYzI0MWQ5NC4uNDNiMGZiZiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N0ZGlvLmgKKysrIGIvbGliYy9pbmNsdWRlL3N0ZGlvLmgKQEAgLTU4LDEwICs1OCwxNyBAQAogICovCiAKIC8qIHN0ZGlvIGJ1ZmZlcnMgKi8KKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorc3RydWN0IF9fc2J1ZiB7CisgIHVuc2lnbmVkIGNoYXIqIF9iYXNlOworICBzaXplX3QgX3NpemU7Cit9OworI2Vsc2UKIHN0cnVjdCBfX3NidWYgewogCXVuc2lnbmVkIGNoYXIgKl9iYXNlOwogCWludAlfc2l6ZTsKIH07CisjZW5kaWYKIAogLyoKICAqIHN0ZGlvIHN0YXRlIHZhcmlhYmxlcy4KQEAgLTk0LDggKzEwMSwxMyBAQAogCXVuc2lnbmVkIGNoYXIgKl9wOwkvKiBjdXJyZW50IHBvc2l0aW9uIGluIChzb21lKSBidWZmZXIgKi8KIAlpbnQJX3I7CQkvKiByZWFkIHNwYWNlIGxlZnQgZm9yIGdldGMoKSAqLwogCWludAlfdzsJCS8qIHdyaXRlIHNwYWNlIGxlZnQgZm9yIHB1dGMoKSAqLworI2lmIGRlZmluZWQoX19MUDY0X18pCisJaW50CV9mbGFnczsJCS8qIGZsYWdzLCBiZWxvdzsgdGhpcyBGSUxFIGlzIGZyZWUgaWYgMCAqLworCWludAlfZmlsZTsJCS8qIGZpbGVubywgaWYgVW5peCBkZXNjcmlwdG9yLCBlbHNlIC0xICovCisjZWxzZQogCXNob3J0CV9mbGFnczsJCS8qIGZsYWdzLCBiZWxvdzsgdGhpcyBGSUxFIGlzIGZyZWUgaWYgMCAqLwogCXNob3J0CV9maWxlOwkJLyogZmlsZW5vLCBpZiBVbml4IGRlc2NyaXB0b3IsIGVsc2UgLTEgKi8KKyNlbmRpZgogCXN0cnVjdAlfX3NidWYgX2JmOwkvKiB0aGUgYnVmZmVyIChhdCBsZWFzdCAxIGJ5dGUsIGlmICFOVUxMKSAqLwogCWludAlfbGJmc2l6ZTsJLyogMCBvciAtX2JmLl9zaXplLCBmb3IgaW5saW5lIHB1dGMgKi8KIApAQCAtMjIzLDEyICsyMzUsNiBAQAogCSAgICBGSUxFICogX19yZXN0cmljdCk7CiBzc2l6ZV90CSBnZXRsaW5lKGNoYXIgKiogX19yZXN0cmljdCwgc2l6ZV90ICogX19yZXN0cmljdCwgRklMRSAqIF9fcmVzdHJpY3QpOwogCi0jaWYgX19CU0RfVklTSUJMRSAmJiAhZGVmaW5lZChfX1NZU19FUlJMSVNUKQotI2RlZmluZSBfX1NZU19FUlJMSVNUCi1leHRlcm4gaW50IHN5c19uZXJyOwkJCS8qIHBlcnJvcigzKSBleHRlcm5hbCB2YXJpYWJsZXMgKi8KLWV4dGVybiBjaGFyICpzeXNfZXJybGlzdFtdOwotI2VuZGlmCi0KIHZvaWQJIHBlcnJvcihjb25zdCBjaGFyICopOwogaW50CSBwcmludGYoY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsIC4uLikKIAkJX19wcmludGZsaWtlKDEsIDIpOwpAQCAtMjUwLDggKzI1NiwxMyBAQAogaW50CSB2cHJpbnRmKGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LCBfX3ZhX2xpc3QpCiAJCV9fcHJpbnRmbGlrZSgxLCAwKTsKIAoraW50IGRwcmludGYoaW50LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwgLi4uKSBfX3ByaW50Zmxpa2UoMiwgMyk7CitpbnQgdmRwcmludGYoaW50LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwgX192YV9saXN0KSBfX3ByaW50Zmxpa2UoMiwgMCk7CisKICNpZm5kZWYgX19BVURJVF9fCisjaWYgIWRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgfHwgX19TVERDX1ZFUlNJT05fXyA8IDIwMTExMkwKIGNoYXIqIGdldHMoY2hhciopIF9fd2FybmF0dHIoImdldHMgaXMgdmVyeSB1bnNhZmU7IGNvbnNpZGVyIHVzaW5nIGZnZXRzIik7CisjZW5kaWYKIGludCBzcHJpbnRmKGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIC4uLikKICAgICBfX3ByaW50Zmxpa2UoMiwgMykgX193YXJuYXR0cigic3ByaW50ZiBpcyBvZnRlbiBtaXN1c2VkOyBwbGVhc2UgdXNlIHNucHJpbnRmIik7CiBjaGFyKiB0bXBuYW0oY2hhciopIF9fd2FybmF0dHIoInRtcG5hbSBwb3NzaWJseSB1c2VkIHVuc2FmZWx5OyBjb25zaWRlciB1c2luZyBta3N0ZW1wIik7CkBAIC0yOTMsMTMgKzMwNCw4IEBACiAgKi8KICNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fUE9TSVhfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFCiAjZGVmaW5lCUxfY3Rlcm1pZAkxMDI0CS8qIHNpemUgZm9yIGN0ZXJtaWQoKTsgUEFUSF9NQVggKi8KLSNkZWZpbmUgTF9jdXNlcmlkCTkJLyogc2l6ZSBmb3IgY3VzZXJpZCgpOyBVVF9OQU1FU0laRSArIDEgKi8KIAogX19CRUdJTl9ERUNMUwotI2lmIDAgLyogTUlTU0lORyBGUk9NIEJJT05JQyAqLwotY2hhcgkqY3Rlcm1pZChjaGFyICopOwotY2hhcgkqY3VzZXJpZChjaGFyICopOwotI2VuZGlmIC8qIE1JU1NJTkcgKi8KIEZJTEUJKmZkb3BlbihpbnQsIGNvbnN0IGNoYXIgKik7CiBpbnQJIGZpbGVubyhGSUxFICopOwogCkBAIC0zMzYsOCArMzQyLDYgQEAKIAkJX19wcmludGZsaWtlKDIsIDMpOwogY2hhcgkqZmdldGxuKEZJTEUgKiBfX3Jlc3RyaWN0LCBzaXplX3QgKiBfX3Jlc3RyaWN0KTsKIGludAkgZnB1cmdlKEZJTEUgKik7Ci1pbnQJIGdldHcoRklMRSAqKTsKLWludAkgcHV0dyhpbnQsIEZJTEUgKik7CiB2b2lkCSBzZXRidWZmZXIoRklMRSAqLCBjaGFyICosIGludCk7CiBpbnQJIHNldGxpbmVidWYoRklMRSAqKTsKIGludAkgdmFzcHJpbnRmKGNoYXIgKiogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCkBAIC0zNTksOTggKzM2Myw2IEBACiAjZGVmaW5lCWZ3b3Blbihjb29raWUsIGZuKSBmdW5vcGVuKGNvb2tpZSwgMCwgZm4sIDAsIDApCiAjZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwogCi0vKgotICogRnVuY3Rpb25zIGludGVybmFsIHRvIHRoZSBpbXBsZW1lbnRhdGlvbi4KLSAqLwotX19CRUdJTl9ERUNMUwotaW50CV9fc3JnZXQoRklMRSAqKTsKLWludAlfX3N3YnVmKGludCwgRklMRSAqKTsKLV9fRU5EX0RFQ0xTCi0KLS8qCi0gKiBUaGUgX19zZm9vIG1hY3JvcyBhcmUgaGVyZSBzbyB0aGF0IHdlIGNhbgotICogZGVmaW5lIGZ1bmN0aW9uIHZlcnNpb25zIGluIHRoZSBDIGxpYnJhcnkuCi0gKi8KLSNkZWZpbmUJX19zZ2V0YyhwKSAoLS0ocCktPl9yIDwgMCA/IF9fc3JnZXQocCkgOiAoaW50KSgqKHApLT5fcCsrKSkKLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotc3RhdGljIF9faW5saW5lIGludCBfX3NwdXRjKGludCBfYywgRklMRSAqX3ApIHsKLQlpZiAoLS1fcC0+X3cgPj0gMCB8fCAoX3AtPl93ID49IF9wLT5fbGJmc2l6ZSAmJiAoY2hhcilfYyAhPSAnXG4nKSkKLQkJcmV0dXJuICgqX3AtPl9wKysgPSBfYyk7Ci0JZWxzZQotCQlyZXR1cm4gKF9fc3didWYoX2MsIF9wKSk7Ci19Ci0jZWxzZQotLyoKLSAqIFRoaXMgaGFzIGJlZW4gdHVuZWQgdG8gZ2VuZXJhdGUgcmVhc29uYWJsZSBjb2RlIG9uIHRoZSB2YXggdXNpbmcgcGNjLgotICovCi0jZGVmaW5lCV9fc3B1dGMoYywgcCkgXAotCSgtLShwKS0+X3cgPCAwID8gXAotCQkocCktPl93ID49IChwKS0+X2xiZnNpemUgPyBcCi0JCQkoKihwKS0+X3AgPSAoYykpLCAqKHApLT5fcCAhPSAnXG4nID8gXAotCQkJCShpbnQpKihwKS0+X3ArKyA6IFwKLQkJCQlfX3N3YnVmKCdcbicsIHApIDogXAotCQkJX19zd2J1ZigoaW50KShjKSwgcCkgOiBcCi0JCSgqKHApLT5fcCA9IChjKSwgKGludCkqKHApLT5fcCsrKSkKLSNlbmRpZgotCi0jZGVmaW5lCV9fc2Zlb2YocCkJKCgocCktPl9mbGFncyAmIF9fU0VPRikgIT0gMCkKLSNkZWZpbmUJX19zZmVycm9yKHApCSgoKHApLT5fZmxhZ3MgJiBfX1NFUlIpICE9IDApCi0jZGVmaW5lCV9fc2NsZWFyZXJyKHApCSgodm9pZCkoKHApLT5fZmxhZ3MgJj0gfihfX1NFUlJ8X19TRU9GKSkpCi0jZGVmaW5lCV9fc2ZpbGVubyhwKQkoKHApLT5fZmlsZSkKLQotZXh0ZXJuCWludCBfX2lzdGhyZWFkZWQ7Ci0KLSNkZWZpbmUJZmVvZihwKQkJKCFfX2lzdGhyZWFkZWQgPyBfX3NmZW9mKHApIDogKGZlb2YpKHApKQotI2RlZmluZQlmZXJyb3IocCkJKCFfX2lzdGhyZWFkZWQgPyBfX3NmZXJyb3IocCkgOiAoZmVycm9yKShwKSkKLSNkZWZpbmUJY2xlYXJlcnIocCkJKCFfX2lzdGhyZWFkZWQgPyBfX3NjbGVhcmVycihwKSA6IChjbGVhcmVycikocCkpCi0KLSNpZiBfX1BPU0lYX1ZJU0lCTEUKLSNkZWZpbmUJZmlsZW5vKHApCSghX19pc3RocmVhZGVkID8gX19zZmlsZW5vKHApIDogKGZpbGVubykocCkpCi0jZW5kaWYKLQotI2RlZmluZQlnZXRjKGZwKQkoIV9faXN0aHJlYWRlZCA/IF9fc2dldGMoZnApIDogKGdldGMpKGZwKSkKLQotI2lmIF9fQlNEX1ZJU0lCTEUKLS8qCi0gKiBUaGUgbWFjcm8gaW1wbGVtZW50YXRpb25zIG9mIHB1dGMgYW5kIHB1dGNfdW5sb2NrZWQgYXJlIG5vdAotICogZnVsbHkgUE9TSVggY29tcGxpYW50OyB0aGV5IGRvIG5vdCBzZXQgZXJybm8gb24gZmFpbHVyZQotICovCi0jZGVmaW5lIHB1dGMoeCwgZnApCSghX19pc3RocmVhZGVkID8gX19zcHV0Yyh4LCBmcCkgOiAocHV0YykoeCwgZnApKQotI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KLQotI2lmbmRlZiBsaW50Ci0jaWYgX19QT1NJWF9WSVNJQkxFID49IDE5OTUwNgotI2RlZmluZQlnZXRjX3VubG9ja2VkKGZwKQlfX3NnZXRjKGZwKQotLyoKLSAqIFRoZSBtYWNybyBpbXBsZW1lbnRhdGlvbnMgb2YgcHV0YyBhbmQgcHV0Y191bmxvY2tlZCBhcmUgbm90Ci0gKiBmdWxseSBQT1NJWCBjb21wbGlhbnQ7IHRoZXkgZG8gbm90IHNldCBlcnJubyBvbiBmYWlsdXJlCi0gKi8KLSNpZiBfX0JTRF9WSVNJQkxFCi0jZGVmaW5lIHB1dGNfdW5sb2NrZWQoeCwgZnApCV9fc3B1dGMoeCwgZnApCi0jZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwotI2VuZGlmIC8qIF9fUE9TSVhfVklTSUJMRSA+PSAxOTk1MDYgKi8KLSNlbmRpZiAvKiBsaW50ICovCi0KLSNkZWZpbmUJZ2V0Y2hhcigpCWdldGMoc3RkaW4pCi0jZGVmaW5lCXB1dGNoYXIoeCkJcHV0Yyh4LCBzdGRvdXQpCi0jZGVmaW5lCWdldGNoYXJfdW5sb2NrZWQoKQlnZXRjX3VubG9ja2VkKHN0ZGluKQotI2RlZmluZQlwdXRjaGFyX3VubG9ja2VkKGMpCXB1dGNfdW5sb2NrZWQoYywgc3Rkb3V0KQotCi0jaWZkZWYgX0dOVV9TT1VSQ0UKLS8qCi0gKiBnbGliYyBkZWZpbmVzIGRwcmludGYoaW50LCBjb25zdCBjaGFyKiwgLi4uKSwgd2hpY2ggaXMgcG9vcmx5IG5hbWVkCi0gKiBhbmQgbGlrZWx5IHRvIGNvbmZsaWN0IHdpdGggbG9jYWxseSBkZWZpbmVkIGRlYnVnZ2luZyBwcmludGZzCi0gKiBmZHByaW50ZiBpcyBhIGJldHRlciBuYW1lLCBhbmQgc29tZSBwcm9ncmFtcyB0aGF0IHVzZSBmZHByaW50ZiB1c2UgYQotICogI2RlZmluZSBmZHByaW50ZiBkcHJpbnRmIGZvciBjb21wYXRpYmlsaXR5Ci0gKi8KLV9fQkVHSU5fREVDTFMKLWludCBmZHByaW50ZihpbnQsIGNvbnN0IGNoYXIqLCAuLi4pCi0JCV9fcHJpbnRmbGlrZSgyLCAzKTsKLWludCB2ZmRwcmludGYoaW50LCBjb25zdCBjaGFyKiwgX192YV9saXN0KQotCQlfX3ByaW50Zmxpa2UoMiwgMCk7Ci1fX0VORF9ERUNMUwotI2VuZGlmIC8qIF9HTlVfU09VUkNFICovCi0KICNpZiBkZWZpbmVkKF9fQklPTklDX0ZPUlRJRlkpCiAKIF9fQkVHSU5fREVDTFMKQEAgLTQ3MCw4ICszODIsMTAgQEAKIH0KIAogI2lmIGRlZmluZWQoX19jbGFuZ19fKQotI2RlZmluZSBfX3dyYXBfc25wcmludGYoZGVzdCwgc2l6ZSwgLi4uKSBfX2J1aWx0aW5fX19zbnByaW50Zl9jaGsoZGVzdCwgc2l6ZSwgMCwgX19ib3MoZGVzdCksIF9fVkFfQVJHU19fKQotI2RlZmluZSBzbnByaW50ZiguLi4pIF9fd3JhcF9zbnByaW50ZihfX1ZBX0FSR1NfXykKKyAgI2lmICFkZWZpbmVkKHNucHJpbnRmKQorICAgICNkZWZpbmUgX193cmFwX3NucHJpbnRmKGRlc3QsIHNpemUsIC4uLikgX19idWlsdGluX19fc25wcmludGZfY2hrKGRlc3QsIHNpemUsIDAsIF9fYm9zKGRlc3QpLCBfX1ZBX0FSR1NfXykKKyAgICAjZGVmaW5lIHNucHJpbnRmKC4uLikgX193cmFwX3NucHJpbnRmKF9fVkFfQVJHU19fKQorICAjZW5kaWYKICNlbHNlCiBfX0JJT05JQ19GT1JUSUZZX0lOTElORQogX19wcmludGZsaWtlKDMsIDQpCkBAIC00ODMsOCArMzk3LDEwIEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoX19jbGFuZ19fKQotI2RlZmluZSBfX3dyYXBfc3ByaW50ZihkZXN0LCAuLi4pIF9fYnVpbHRpbl9fX3NwcmludGZfY2hrKGRlc3QsIDAsIF9fYm9zKGRlc3QpLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgc3ByaW50ZiguLi4pIF9fd3JhcF9zcHJpbnRmKF9fVkFfQVJHU19fKQorICAjaWYgIWRlZmluZWQoc3ByaW50ZikKKyAgICAjZGVmaW5lIF9fd3JhcF9zcHJpbnRmKGRlc3QsIC4uLikgX19idWlsdGluX19fc3ByaW50Zl9jaGsoZGVzdCwgMCwgX19ib3MoZGVzdCksIF9fVkFfQVJHU19fKQorICAgICNkZWZpbmUgc3ByaW50ZiguLi4pIF9fd3JhcF9zcHJpbnRmKF9fVkFfQVJHU19fKQorICAjZW5kaWYKICNlbHNlCiBfX0JJT05JQ19GT1JUSUZZX0lOTElORQogX19wcmludGZsaWtlKDIsIDMpCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3RkbGliLmggYi9saWJjL2luY2x1ZGUvc3RkbGliLmgKaW5kZXggNzJiNTU0Zi4uNTJmMzcxYiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N0ZGxpYi5oCisrKyBiL2xpYmMvaW5jbHVkZS9zdGRsaWIuaApAQCAtNDEsNDEgKzQxLDQ3IEBACiAjZGVmaW5lIEVYSVRfRkFJTFVSRSAxCiAjZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCiAKLWV4dGVybiBfX25vcmV0dXJuIHZvaWQgZXhpdChpbnQpOwogZXh0ZXJuIF9fbm9yZXR1cm4gdm9pZCBhYm9ydCh2b2lkKTsKK2V4dGVybiBfX25vcmV0dXJuIHZvaWQgZXhpdChpbnQpOworZXh0ZXJuIF9fbm9yZXR1cm4gdm9pZCBfRXhpdChpbnQpOwogZXh0ZXJuIGludCBhdGV4aXQodm9pZCAoKikodm9pZCkpOwogCi1leHRlcm4gY2hhciAqZ2V0ZW52KGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gaW50IHB1dGVudihjb25zdCBjaGFyICopOwotZXh0ZXJuIGludCBzZXRlbnYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7Ci1leHRlcm4gaW50IHVuc2V0ZW52KGNvbnN0IGNoYXIgKik7CisjaWYgX19JU09fQ19WSVNJQkxFID49IDIwMTEgfHwgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAoraW50IGF0X3F1aWNrX2V4aXQodm9pZCAoKikodm9pZCkpOwordm9pZCBxdWlja19leGl0KGludCkgX19ub3JldHVybjsKKyNlbmRpZgorCitleHRlcm4gY2hhciogZ2V0ZW52KGNvbnN0IGNoYXIqKTsKK2V4dGVybiBpbnQgcHV0ZW52KGNoYXIqKTsKK2V4dGVybiBpbnQgc2V0ZW52KGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgaW50KTsKK2V4dGVybiBpbnQgdW5zZXRlbnYoY29uc3QgY2hhciopOwogZXh0ZXJuIGludCBjbGVhcmVudih2b2lkKTsKIAogZXh0ZXJuIGNoYXIqIG1rZHRlbXAoY2hhciopOwogZXh0ZXJuIGNoYXIqIG1rdGVtcChjaGFyKikgX193YXJuYXR0cigibWt0ZW1wIHBvc3NpYmx5IHVzZWQgdW5zYWZlbHk7IGNvbnNpZGVyIHVzaW5nIG1rc3RlbXAiKTsKIGV4dGVybiBpbnQgbWtzdGVtcChjaGFyKik7CitleHRlcm4gaW50IG1rc3RlbXA2NChjaGFyKik7CiAKIGV4dGVybiBsb25nIHN0cnRvbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CiBleHRlcm4gbG9uZyBsb25nIHN0cnRvbGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3RydG91bChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHN0cnRvdWxsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKLWV4dGVybiBkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIpOwogCiBleHRlcm4gaW50IHBvc2l4X21lbWFsaWduKHZvaWQgKiptZW1wdHIsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKTsKIAotc3RhdGljIF9faW5saW5lX18gZmxvYXQgc3RydG9mKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIpCi17Ci0gICAgcmV0dXJuIChmbG9hdClzdHJ0b2QobnB0ciwgZW5kcHRyKTsKLX0KK2V4dGVybiBkb3VibGUgYXRvZihjb25zdCBjaGFyKik7CiAKLWV4dGVybiBpbnQgYXRvaShjb25zdCBjaGFyICopIF9fcHVyZWZ1bmM7Ci1leHRlcm4gbG9uZyBhdG9sKGNvbnN0IGNoYXIgKikgX19wdXJlZnVuYzsKLWV4dGVybiBsb25nIGxvbmcgYXRvbGwoY29uc3QgY2hhciAqKSBfX3B1cmVmdW5jOworZXh0ZXJuIGRvdWJsZSBzdHJ0b2QoY29uc3QgY2hhciosIGNoYXIqKikgX19MSUJDX0FCSV9QVUJMSUNfXzsKK2V4dGVybiBmbG9hdCBzdHJ0b2YoY29uc3QgY2hhciosIGNoYXIqKikgX19MSUJDX0FCSV9QVUJMSUNfXzsKK2V4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkKGNvbnN0IGNoYXIqLCBjaGFyKiopIF9fTElCQ19BQklfUFVCTElDX187CiAKLXN0YXRpYyBfX2lubGluZV9fIGRvdWJsZSBhdG9mKGNvbnN0IGNoYXIgKm5wdHIpCi17Ci0gICAgcmV0dXJuIChzdHJ0b2QobnB0ciwgTlVMTCkpOwotfQorZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGRfbChjb25zdCBjaGFyICosIGNoYXIgKiosIGxvY2FsZV90KSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIGxvbmcgbG9uZyBzdHJ0b2xsX2woY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQsIGxvY2FsZV90KSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBzdHJ0b3VsbF9sKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50LCBsb2NhbGVfdCkgX19MSUJDX0FCSV9QVUJMSUNfXzsKKworZXh0ZXJuIGludCBhdG9pKGNvbnN0IGNoYXIqKSBfX3B1cmVmdW5jOworZXh0ZXJuIGxvbmcgYXRvbChjb25zdCBjaGFyKikgX19wdXJlZnVuYzsKK2V4dGVybiBsb25nIGxvbmcgYXRvbGwoY29uc3QgY2hhciopIF9fcHVyZWZ1bmM7CiAKIGV4dGVybiBpbnQgYWJzKGludCkgX19wdXJlMjsKIGV4dGVybiBsb25nIGxhYnMobG9uZykgX19wdXJlMjsKQEAgLTk4LDYxICsxMDQsNTQgQEAKIGV4dGVybiBkb3VibGUgZXJhbmQ0OCh1bnNpZ25lZCBzaG9ydCB4c3ViaVszXSk7CiBleHRlcm4gZG91YmxlIGRyYW5kNDgodm9pZCk7CiBleHRlcm4gdm9pZCBzcmFuZDQ4KGxvbmcpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBhcmM0cmFuZG9tKHZvaWQpOwotZXh0ZXJuIHZvaWQgYXJjNHJhbmRvbV9zdGlyKHZvaWQpOwotZXh0ZXJuIHZvaWQgYXJjNHJhbmRvbV9hZGRyYW5kb20odW5zaWduZWQgY2hhciAqLCBpbnQpOworCit1bnNpZ25lZCBpbnQgYXJjNHJhbmRvbSh2b2lkKTsKK3Vuc2lnbmVkIGludCBhcmM0cmFuZG9tX3VuaWZvcm0odW5zaWduZWQgaW50KTsKK3ZvaWQgYXJjNHJhbmRvbV9idWYodm9pZCosIHNpemVfdCk7CiAKICNkZWZpbmUgUkFORF9NQVggMHg3ZmZmZmZmZgotc3RhdGljIF9faW5saW5lX18gaW50IHJhbmQodm9pZCkgewotICAgIHJldHVybiAoaW50KWxyYW5kNDgoKTsKLX0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgc3JhbmQodW5zaWduZWQgaW50IF9fcykgewotICAgIHNyYW5kNDgoX19zKTsKLX0KLXN0YXRpYyBfX2lubGluZV9fIGxvbmcgcmFuZG9tKHZvaWQpCi17Ci0gICAgcmV0dXJuIGxyYW5kNDgoKTsKLX0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgc3JhbmRvbSh1bnNpZ25lZCBpbnQgX19zKQotewotICAgIHNyYW5kNDgoX19zKTsKLX0KIAotLyogQmFzaWMgUFRZIGZ1bmN0aW9ucy4gIFRoZXNlIG9ubHkgd29yayBpZiBkZXZwdHMgaXMgbW91bnRlZCEgKi8KK2ludCByYW5kKHZvaWQpOworaW50IHJhbmRfcih1bnNpZ25lZCBpbnQqKTsKK3ZvaWQgc3JhbmQodW5zaWduZWQgaW50KTsKIAotZXh0ZXJuIGludCAgICB1bmxvY2twdChpbnQpOwotZXh0ZXJuIGNoYXIqICBwdHNuYW1lKGludCk7Ci1leHRlcm4gaW50ICAgIHB0c25hbWVfcihpbnQsIGNoYXIqLCBzaXplX3QpOwotZXh0ZXJuIGludCAgICBnZXRwdCh2b2lkKTsKK2NoYXIqIGluaXRzdGF0ZSh1bnNpZ25lZCBpbnQsIGNoYXIqLCBzaXplX3QpOworbG9uZyByYW5kb20odm9pZCk7CitjaGFyKiBzZXRzdGF0ZShjaGFyKik7Cit2b2lkIHNyYW5kb20odW5zaWduZWQgaW50KTsKIAotc3RhdGljIF9faW5saW5lX18gaW50IGdyYW50cHQoaW50IF9fZmQgX19hdHRyaWJ1dGUoKHVudXNlZCkpKQotewotICAodm9pZClfX2ZkOwotICByZXR1cm4gMDsgICAgIC8qIGRldnB0cyBkb2VzIHRoaXMgYWxsIGZvciB1cyEgKi8KLX0KK2ludCBnZXRwdCh2b2lkKTsKK2ludCBncmFudHB0KGludCk7CitpbnQgcG9zaXhfb3BlbnB0KGludCk7CitjaGFyKiBwdHNuYW1lKGludCkgX193YXJuYXR0cigicHRzbmFtZSBpcyBub3QgdGhyZWFkLXNhZmU7IHVzZSBwdHNuYW1lX3IgaW5zdGVhZCIpOworaW50IHB0c25hbWVfcihpbnQsIGNoYXIqLCBzaXplX3QpOworaW50IHVubG9ja3B0KGludCk7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBpbnQgIHF1b3Q7CiAgICAgaW50ICByZW07CiB9IGRpdl90OwogCi1leHRlcm4gZGl2X3QgICBkaXYoaW50LCBpbnQpOworZXh0ZXJuIGRpdl90ICAgZGl2KGludCwgaW50KSBfX3B1cmUyOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgbG9uZyBpbnQgIHF1b3Q7CiAgICAgbG9uZyBpbnQgIHJlbTsKIH0gbGRpdl90OwogCi1leHRlcm4gbGRpdl90ICAgbGRpdihsb25nLCBsb25nKTsKK2V4dGVybiBsZGl2X3QgICBsZGl2KGxvbmcsIGxvbmcpIF9fcHVyZTI7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBsb25nIGxvbmcgaW50ICBxdW90OwogICAgIGxvbmcgbG9uZyBpbnQgIHJlbTsKIH0gbGxkaXZfdDsKIAotZXh0ZXJuIGxsZGl2X3QgICBsbGRpdihsb25nIGxvbmcsIGxvbmcgbG9uZyk7CitleHRlcm4gbGxkaXZfdCAgIGxsZGl2KGxvbmcgbG9uZywgbG9uZyBsb25nKSBfX3B1cmUyOwogCi0jaWYgMSAvKiBNSVNTSU5HIEZST00gQklPTklDIC0gRU5BQkxFRCBGT1IgU1RMUG9ydCBhbmQgbGlic3RkYysrLXYzICovCisvKiBCU0QgY29tcGF0aWJpbGl0eS4gKi8KK2V4dGVybiBjb25zdCBjaGFyKiBnZXRwcm9nbmFtZSh2b2lkKTsKK2V4dGVybiB2b2lkIHNldHByb2duYW1lKGNvbnN0IGNoYXIqKTsKKwogLyogbWFrZSBTVExQb3J0IGhhcHB5ICovCiBleHRlcm4gaW50ICAgICAgbWJsZW4oY29uc3QgY2hhciAqLCBzaXplX3QpOwogZXh0ZXJuIHNpemVfdCAgIG1ic3Rvd2NzKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpAQCAtMTYxLDEzICsxNjAsOSBAQAogLyogTGlrZXdpc2UsIG1ha2UgbGlic3RkYysrLXYzIGhhcHB5LiAgKi8KIGV4dGVybiBpbnQJd2N0b21iKGNoYXIgKiwgd2NoYXJfdCk7CiBleHRlcm4gc2l6ZV90CXdjc3RvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwotI2VuZGlmIC8qIE1JU1NJTkcgKi8KIAotI2RlZmluZSBNQl9DVVJfTUFYIDEKLQotI2lmIDAgLyogTUlTU0lORyBGUk9NIEJJT05JQyAqLwotZXh0ZXJuIGludCBvbl9leGl0KHZvaWQgKCopKGludCwgdm9pZCAqKSwgdm9pZCAqKTsKLSNlbmRpZiAvKiBNSVNTSU5HICovCitleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXgodm9pZCk7CisjZGVmaW5lIE1CX0NVUl9NQVggX19jdHlwZV9nZXRfbWJfY3VyX21heCgpCiAKIF9fRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zdHJpbmcuaCBiL2xpYmMvaW5jbHVkZS9zdHJpbmcuaAppbmRleCAzN2QyMmM0Li44ZGY2OGUzIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3RyaW5nLmgKKysrIGIvbGliYy9pbmNsdWRlL3N0cmluZy5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8eGxvY2FsZS5oPgogCiBfX0JFR0lOX0RFQ0xTCiAKQEAgLTQyLDE3ICs0MywxNyBAQAogZXh0ZXJuIHZvaWQqICBtZW1tb3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwogZXh0ZXJuIHZvaWQqICBtZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7CiBleHRlcm4gdm9pZCogIG1lbW1lbShjb25zdCB2b2lkICosIHNpemVfdCwgY29uc3Qgdm9pZCAqLCBzaXplX3QpIF9fcHVyZWZ1bmM7Ci1leHRlcm4gdm9pZCAgIG1lbXN3YXAodm9pZCAqLCB2b2lkICosIHNpemVfdCk7CiAKLWV4dGVybiBjaGFyKiAgaW5kZXgoY29uc3QgY2hhciAqLCBpbnQpIF9fcHVyZWZ1bmM7CiBleHRlcm4gY2hhciogIHN0cmNocihjb25zdCBjaGFyICosIGludCkgX19wdXJlZnVuYzsKIGV4dGVybiBjaGFyKiBfX3N0cmNocl9jaGsoY29uc3QgY2hhciAqLCBpbnQsIHNpemVfdCk7CiAKIGV4dGVybiBjaGFyKiAgc3RycmNocihjb25zdCBjaGFyICosIGludCkgX19wdXJlZnVuYzsKK2V4dGVybiBjaGFyKiBfX3N0cnJjaHJfY2hrKGNvbnN0IGNoYXIgKiwgaW50LCBzaXplX3QpOwogCiBleHRlcm4gc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICopIF9fcHVyZWZ1bmM7CiBleHRlcm4gc2l6ZV90IF9fc3RybGVuX2Noayhjb25zdCBjaGFyICosIHNpemVfdCk7CiBleHRlcm4gaW50ICAgIHN0cmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikgX19wdXJlZnVuYzsKK2V4dGVybiBjaGFyKiAgc3RwY3B5KGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QpOwogZXh0ZXJuIGNoYXIqICBzdHJjcHkoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCk7CiBleHRlcm4gY2hhciogIHN0cmNhdChjaGFyKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0KTsKIApAQCAtNzIsNiArNzMsNyBAQAogZXh0ZXJuIGNoYXIqICBzdHJuY2F0KGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIHNpemVfdCk7CiBleHRlcm4gY2hhciogIHN0cm5kdXAoY29uc3QgY2hhciAqLCBzaXplX3QpOwogZXh0ZXJuIGludCAgICBzdHJuY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpIF9fcHVyZWZ1bmM7CitleHRlcm4gY2hhciogIHN0cG5jcHkoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCwgc2l6ZV90KTsKIGV4dGVybiBjaGFyKiAgc3RybmNweShjaGFyKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0LCBzaXplX3QpOwogCiBleHRlcm4gc2l6ZV90IHN0cmxjYXQoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCwgc2l6ZV90KTsKQEAgLTg3LDEwICs4OSwxMCBAQAogZXh0ZXJuIGludCAgICBzdHJjb2xsKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSBfX3B1cmVmdW5jOwogZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtKGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIHNpemVfdCk7CiAKLSNpZiBkZWZpbmVkKF9fQklPTklDX0ZPUlRJRlkpCitleHRlcm4gaW50ICAgIHN0cmNvbGxfbChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgbG9jYWxlX3QpIF9fcHVyZWZ1bmM7CitleHRlcm4gc2l6ZV90IHN0cnhmcm1fbChjaGFyKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0LCBzaXplX3QsIGxvY2FsZV90KTsKIAotX19lcnJvcmRlY2woX19tZW1jcHlfZGVzdF9zaXplX2Vycm9yLCAibWVtY3B5IGNhbGxlZCB3aXRoIHNpemUgYmlnZ2VyIHRoYW4gZGVzdGluYXRpb24iKTsKLV9fZXJyb3JkZWNsKF9fbWVtY3B5X3NyY19zaXplX2Vycm9yLCAibWVtY3B5IGNhbGxlZCB3aXRoIHNpemUgYmlnZ2VyIHRoYW4gc291cmNlIik7CisjaWYgZGVmaW5lZChfX0JJT05JQ19GT1JUSUZZKQogCiBfX0JJT05JQ19GT1JUSUZZX0lOTElORQogdm9pZCogbWVtY3B5KHZvaWQqIF9fcmVzdHJpY3QgZGVzdCwgY29uc3Qgdm9pZCogX19yZXN0cmljdCBzcmMsIHNpemVfdCBjb3B5X2Ftb3VudCkgewpAQCAtOTksMTQgKzEwMSw2IEBACiAgICAgc2l6ZV90IHNfbGVuID0gX19ib3MwKHMpOwogICAgIHNpemVfdCBkX2xlbiA9IF9fYm9zMChkKTsKIAotICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjb3B5X2Ftb3VudCkgJiYgKGNvcHlfYW1vdW50ID4gZF9sZW4pKSB7Ci0gICAgICAgIF9fbWVtY3B5X2Rlc3Rfc2l6ZV9lcnJvcigpOwotICAgIH0KLQotICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjb3B5X2Ftb3VudCkgJiYgKGNvcHlfYW1vdW50ID4gc19sZW4pKSB7Ci0gICAgICAgIF9fbWVtY3B5X3NyY19zaXplX2Vycm9yKCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIF9fYnVpbHRpbl9fX21lbWNweV9jaGsoZGVzdCwgc3JjLCBjb3B5X2Ftb3VudCwgZF9sZW4pOwogfQogCkBAIC0xMTYsMjAgKzExMCw0NCBAQAogfQogCiBfX0JJT05JQ19GT1JUSUZZX0lOTElORQorY2hhciogc3RwY3B5KGNoYXIqIF9fcmVzdHJpY3QgZGVzdCwgY29uc3QgY2hhciogX19yZXN0cmljdCBzcmMpIHsKKyAgICByZXR1cm4gX19idWlsdGluX19fc3RwY3B5X2NoayhkZXN0LCBzcmMsIF9fYm9zKGRlc3QpKTsKK30KKworX19CSU9OSUNfRk9SVElGWV9JTkxJTkUKIGNoYXIqIHN0cmNweShjaGFyKiBfX3Jlc3RyaWN0IGRlc3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3Qgc3JjKSB7CiAgICAgcmV0dXJuIF9fYnVpbHRpbl9fX3N0cmNweV9jaGsoZGVzdCwgc3JjLCBfX2JvcyhkZXN0KSk7CiB9CiAKLV9fZXJyb3JkZWNsKF9fc3RybmNweV9lcnJvciwgInN0cm5jcHkgY2FsbGVkIHdpdGggc2l6ZSBiaWdnZXIgdGhhbiBidWZmZXIiKTsKK2V4dGVybiBjaGFyKiBfX3N0cG5jcHlfY2hrMihjaGFyKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0LCBzaXplX3QsIHNpemVfdCwgc2l6ZV90KTsKKworX19CSU9OSUNfRk9SVElGWV9JTkxJTkUKK2NoYXIqIHN0cG5jcHkoY2hhciogX19yZXN0cmljdCBkZXN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0IHNyYywgc2l6ZV90IG4pIHsKKyAgICBzaXplX3QgYm9zX2Rlc3QgPSBfX2JvcyhkZXN0KTsKKyAgICBzaXplX3QgYm9zX3NyYyA9IF9fYm9zKHNyYyk7CisKKyAgICBpZiAoYm9zX3NyYyA9PSBfX0JJT05JQ19GT1JUSUZZX1VOS05PV05fU0laRSkgeworICAgICAgICByZXR1cm4gX19idWlsdGluX19fc3RwbmNweV9jaGsoZGVzdCwgc3JjLCBuLCBib3NfZGVzdCk7CisgICAgfQorCisgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pICYmIChuIDw9IGJvc19zcmMpKSB7CisgICAgICAgIHJldHVybiBfX2J1aWx0aW5fX19zdHBuY3B5X2NoayhkZXN0LCBzcmMsIG4sIGJvc19kZXN0KTsKKyAgICB9CisKKyAgICBzaXplX3Qgc2xlbiA9IF9fYnVpbHRpbl9zdHJsZW4oc3JjKTsKKyAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2xlbikpIHsKKyAgICAgICAgcmV0dXJuIF9fYnVpbHRpbl9fX3N0cG5jcHlfY2hrKGRlc3QsIHNyYywgbiwgYm9zX2Rlc3QpOworICAgIH0KKworICAgIHJldHVybiBfX3N0cG5jcHlfY2hrMihkZXN0LCBzcmMsIG4sIGJvc19kZXN0LCBib3Nfc3JjKTsKK30KKwogZXh0ZXJuIGNoYXIqIF9fc3RybmNweV9jaGsyKGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIHNpemVfdCwgc2l6ZV90LCBzaXplX3QpOwogCiBfX0JJT05JQ19GT1JUSUZZX0lOTElORQogY2hhciogc3RybmNweShjaGFyKiBfX3Jlc3RyaWN0IGRlc3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3Qgc3JjLCBzaXplX3QgbikgewogICAgIHNpemVfdCBib3NfZGVzdCA9IF9fYm9zKGRlc3QpOwogICAgIHNpemVfdCBib3Nfc3JjID0gX19ib3Moc3JjKTsKLSAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AobikgJiYgKG4gPiBib3NfZGVzdCkpIHsKLSAgICAgICAgX19zdHJuY3B5X2Vycm9yKCk7Ci0gICAgfQogCiAgICAgaWYgKGJvc19zcmMgPT0gX19CSU9OSUNfRk9SVElGWV9VTktOT1dOX1NJWkUpIHsKICAgICAgICAgcmV0dXJuIF9fYnVpbHRpbl9fX3N0cm5jcHlfY2hrKGRlc3QsIHNyYywgbiwgYm9zX2Rlc3QpOwpAQCAtMTY0LDcgKzE4Miw2IEBACiAKIGV4dGVybiBzaXplX3QgX19zdHJsY3B5X3JlYWwoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCwgc2l6ZV90KQogICAgIF9fYXNtX18oX19VU0VSX0xBQkVMX1BSRUZJWF9fICJzdHJsY3B5Iik7Ci1fX2Vycm9yZGVjbChfX3N0cmxjcHlfZXJyb3IsICJzdHJsY3B5IGNhbGxlZCB3aXRoIHNpemUgYmlnZ2VyIHRoYW4gYnVmZmVyIik7CiBleHRlcm4gc2l6ZV90IF9fc3RybGNweV9jaGsoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgc2l6ZV90KTsKIAogX19CSU9OSUNfRk9SVElGWV9JTkxJTkUKQEAgLTE4MiwxMiArMTk5LDYgQEAKICAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkgJiYgKHNpemUgPD0gYm9zKSkgewogICAgICAgICByZXR1cm4gX19zdHJsY3B5X3JlYWwoZGVzdCwgc3JjLCBzaXplKTsKICAgICB9Ci0KLSAgICAvLyBDb21waWxlciBjYW4gcHJvdmUsIGF0IGNvbXBpbGUgdGltZSwgdGhhdCB0aGUgcGFzc2VkIGluIHNpemUKLSAgICAvLyBpcyBhbHdheXMgPiB0aGUgYWN0dWFsIG9iamVjdCBzaXplLiBGb3JjZSBhIGNvbXBpbGVyIGVycm9yLgotICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSAmJiAoc2l6ZSA+IGJvcykpIHsKLSAgICAgICAgX19zdHJsY3B5X2Vycm9yKCk7Ci0gICAgfQogI2VuZGlmIC8qICFkZWZpbmVkKF9fY2xhbmdfXykgKi8KIAogICAgIHJldHVybiBfX3N0cmxjcHlfY2hrKGRlc3QsIHNyYywgc2l6ZSwgYm9zKTsKQEAgLTE5NSw3ICsyMDYsNiBAQAogCiBleHRlcm4gc2l6ZV90IF9fc3RybGNhdF9yZWFsKGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIHNpemVfdCkKICAgICBfX2FzbV9fKF9fVVNFUl9MQUJFTF9QUkVGSVhfXyAic3RybGNhdCIpOwotX19lcnJvcmRlY2woX19zdHJsY2F0X2Vycm9yLCAic3RybGNhdCBjYWxsZWQgd2l0aCBzaXplIGJpZ2dlciB0aGFuIGJ1ZmZlciIpOwogZXh0ZXJuIHNpemVfdCBfX3N0cmxjYXRfY2hrKGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIHNpemVfdCwgc2l6ZV90KTsKIAogCkBAIC0yMTQsMTIgKzIyNCw2IEBACiAgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpICYmIChzaXplIDw9IGJvcykpIHsKICAgICAgICAgcmV0dXJuIF9fc3RybGNhdF9yZWFsKGRlc3QsIHNyYywgc2l6ZSk7CiAgICAgfQotCi0gICAgLy8gQ29tcGlsZXIgY2FuIHByb3ZlLCBhdCBjb21waWxlIHRpbWUsIHRoYXQgdGhlIHBhc3NlZCBpbiBzaXplCi0gICAgLy8gaXMgYWx3YXlzID4gdGhlIGFjdHVhbCBvYmplY3Qgc2l6ZS4gRm9yY2UgYSBjb21waWxlciBlcnJvci4KLSAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkgJiYgKHNpemUgPiBib3MpKSB7Ci0gICAgICAgIF9fc3RybGNhdF9lcnJvcigpOwotICAgIH0KICNlbmRpZiAvKiAhZGVmaW5lZChfX2NsYW5nX18pICovCiAKICAgICByZXR1cm4gX19zdHJsY2F0X2NoayhkZXN0LCBzcmMsIHNpemUsIGJvcyk7CkBAIC0yNjMsOCArMjY3LDYgQEAKICAgICByZXR1cm4gX19zdHJjaHJfY2hrKHMsIGMsIGJvcyk7CiB9CiAKLWV4dGVybiBjaGFyKiBfX3N0cnJjaHJfY2hrKGNvbnN0IGNoYXIgKiwgaW50LCBzaXplX3QpOwotCiBfX0JJT05JQ19GT1JUSUZZX0lOTElORQogY2hhciogc3RycmNocihjb25zdCBjaGFyICpzLCBpbnQgYykgewogICAgIHNpemVfdCBib3MgPSBfX2JvcyhzKTsKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zdHJpbmdzLmggYi9saWJjL2luY2x1ZGUvc3RyaW5ncy5oCmluZGV4IGU3Mjc5OGIuLmFlMjYxY2YgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zdHJpbmdzLmgKKysrIGIvbGliYy9pbmNsdWRlL3N0cmluZ3MuaApAQCAtNDMsMjAgKzQzLDIxIEBACiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAKIF9fQkVHSU5fREVDTFMKLXZvaWQJIGJjb3B5KGNvbnN0IHZvaWQgKiwgdm9pZCAqLCBzaXplX3QpOwotdm9pZAkgYnplcm8odm9pZCAqLCBzaXplX3QpOworI2lmIGRlZmluZWQoX19CSU9OSUNfRk9SVElGWSkKKyNkZWZpbmUgYmNvcHkoYjEsIGIyLCBsZW4pIFwKKyAgKHZvaWQpKF9fYnVpbHRpbl9fX21lbW1vdmVfY2hrKChiMiksIChiMSksIChsZW4pLCBfX2JvczAoYjIpKSkKKyNkZWZpbmUgYnplcm8oYiwgbGVuKSBcCisgICh2b2lkKShfX2J1aWx0aW5fX19tZW1zZXRfY2hrKChiKSwgJ1wwJywgKGxlbiksIF9fYm9zMChiKSkpCisjZWxzZQorI2RlZmluZSBiY29weShiMSwgYjIsIGxlbikgKHZvaWQpKF9fYnVpbHRpbl9tZW1tb3ZlKChiMiksIChiMSksIChsZW4pKSkKKyNkZWZpbmUgYnplcm8oYiwgbGVuKSAodm9pZCkoX19idWlsdGluX21lbXNldCgoYiksICdcMCcsIChsZW4pKSkKKyNlbmRpZgorCisKIGludAkgZmZzKGludCk7Ci1jaGFyCSppbmRleChjb25zdCBjaGFyICosIGludCk7CiBpbnQJIHN0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogaW50CSBzdHJuY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKIAotI2lmIGRlZmluZWQoX19CSU9OSUNfRk9SVElGWSkKLV9fQklPTklDX0ZPUlRJRllfSU5MSU5FCi12b2lkIGJ6ZXJvICh2b2lkICpzLCBzaXplX3QgbikgewotICAgIF9fYnVpbHRpbl9fX21lbXNldF9jaGsocywgJ1wwJywgbiwgX19idWlsdGluX29iamVjdF9zaXplIChzLCAwKSk7Ci19Ci0jZW5kaWYgLyogZGVmaW5lZChfX0JJT05JQ19GT1JUSUZZKSAqLwotCiBfX0VORF9ERUNMUwogCiAjZW5kaWYgLyogIWRlZmluZWQoX1NUUklOR1NfSF8pICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL19zaWdkZWZzLmggYi9saWJjL2luY2x1ZGUvc3lzL19zaWdkZWZzLmgKaW5kZXggZWFkZjdiOS4uNDRkNjBkOSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9fc2lnZGVmcy5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvX3NpZ2RlZnMuaApAQCAtMzUsNjcgKzM1LDQxIEBACiAjZXJyb3IgX19CSU9OSUNfU0lHREVGIG5vdCBkZWZpbmVkCiAjZW5kaWYKIAotX19CSU9OSUNfU0lHREVGKEhVUCwxLCJIYW5ndXAiKQotX19CSU9OSUNfU0lHREVGKElOVCwyLCJJbnRlcnJ1cHQiKQotX19CSU9OSUNfU0lHREVGKFFVSVQsMywiUXVpdCIpCi1fX0JJT05JQ19TSUdERUYoSUxMLDQsIklsbGVnYWwgaW5zdHJ1Y3Rpb24iKQotX19CSU9OSUNfU0lHREVGKFRSQVAsNSwiVHJhcCIpCi1fX0JJT05JQ19TSUdERUYoQUJSVCw2LCJBYm9ydGVkIikKLSNpZmRlZiBfX21pcHNfXwotX19CSU9OSUNfU0lHREVGKEVNVCw3LCJFTVQiKQotI2Vsc2UKLV9fQklPTklDX1NJR0RFRihCVVMsNywiQnVzIGVycm9yIikKK19fQklPTklDX1NJR0RFRihTSUdIVVAsICAgICJIYW5ndXAiKQorX19CSU9OSUNfU0lHREVGKFNJR0lOVCwgICAgIkludGVycnVwdCIpCitfX0JJT05JQ19TSUdERUYoU0lHUVVJVCwgICAiUXVpdCIpCitfX0JJT05JQ19TSUdERUYoU0lHSUxMLCAgICAiSWxsZWdhbCBpbnN0cnVjdGlvbiIpCitfX0JJT05JQ19TSUdERUYoU0lHVFJBUCwgICAiVHJhcCIpCitfX0JJT05JQ19TSUdERUYoU0lHQUJSVCwgICAiQWJvcnRlZCIpCisjaWZkZWYgU0lHRU1UCitfX0JJT05JQ19TSUdERUYoU0lHRU1ULCAgICAiRU1UIikKICNlbmRpZgotX19CSU9OSUNfU0lHREVGKEZQRSw4LCJGbG9hdGluZyBwb2ludCBleGNlcHRpb24iKQotX19CSU9OSUNfU0lHREVGKEtJTEwsOSwiS2lsbGVkIikKLSNpZmRlZiBfX21pcHNfXwotX19CSU9OSUNfU0lHREVGKEJVUywxMCwiQnVzIGVycm9yIikKLSNlbHNlCi1fX0JJT05JQ19TSUdERUYoVVNSMSwxMCwiVXNlciBzaWduYWwgMSIpCitfX0JJT05JQ19TSUdERUYoU0lHRlBFLCAgICAiRmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uIikKK19fQklPTklDX1NJR0RFRihTSUdLSUxMLCAgICJLaWxsZWQiKQorX19CSU9OSUNfU0lHREVGKFNJR0JVUywgICAgIkJ1cyBlcnJvciIpCitfX0JJT05JQ19TSUdERUYoU0lHU0VHViwgICAiU2VnbWVudGF0aW9uIGZhdWx0IikKK19fQklPTklDX1NJR0RFRihTSUdQSVBFLCAgICJCcm9rZW4gcGlwZSIpCitfX0JJT05JQ19TSUdERUYoU0lHQUxSTSwgICAiQWxhcm0gY2xvY2siKQorX19CSU9OSUNfU0lHREVGKFNJR1RFUk0sICAgIlRlcm1pbmF0ZWQiKQorX19CSU9OSUNfU0lHREVGKFNJR1VTUjEsICAgIlVzZXIgc2lnbmFsIDEiKQorX19CSU9OSUNfU0lHREVGKFNJR1VTUjIsICAgIlVzZXIgc2lnbmFsIDIiKQorX19CSU9OSUNfU0lHREVGKFNJR0NITEQsICAgIkNoaWxkIGV4aXRlZCIpCitfX0JJT05JQ19TSUdERUYoU0lHUFdSLCAgICAiUG93ZXIgZmFpbHVyZSIpCitfX0JJT05JQ19TSUdERUYoU0lHV0lOQ0gsICAiV2luZG93IHNpemUgY2hhbmdlZCIpCitfX0JJT05JQ19TSUdERUYoU0lHVVJHLCAgICAiVXJnZW50IEkvTyBjb25kaXRpb24iKQorX19CSU9OSUNfU0lHREVGKFNJR0lPLCAgICAgIkkvTyBwb3NzaWJsZSIpCitfX0JJT05JQ19TSUdERUYoU0lHU1RPUCwgICAiU3RvcHBlZCAoc2lnbmFsKSIpCitfX0JJT05JQ19TSUdERUYoU0lHVFNUUCwgICAiU3RvcHBlZCIpCitfX0JJT05JQ19TSUdERUYoU0lHQ09OVCwgICAiQ29udGludWUiKQorX19CSU9OSUNfU0lHREVGKFNJR1RUSU4sICAgIlN0b3BwZWQgKHR0eSBpbnB1dCkiKQorX19CSU9OSUNfU0lHREVGKFNJR1RUT1UsICAgIlN0b3BwZWQgKHR0eSBvdXRwdXQpIikKK19fQklPTklDX1NJR0RFRihTSUdWVEFMUk0sICJWaXJ0dWFsIHRpbWVyIGV4cGlyZWQiKQorX19CSU9OSUNfU0lHREVGKFNJR1BST0YsICAgIlByb2ZpbGluZyB0aW1lciBleHBpcmVkIikKK19fQklPTklDX1NJR0RFRihTSUdYQ1BVLCAgICJDUFUgdGltZSBsaW1pdCBleGNlZWRlZCIpCitfX0JJT05JQ19TSUdERUYoU0lHWEZTWiwgICAiRmlsZSBzaXplIGxpbWl0IGV4Y2VlZGVkIikKKyNpZiBkZWZpbmVkKFNJR1NUS0ZMVCkKK19fQklPTklDX1NJR0RFRihTSUdTVEtGTFQsICJTdGFjayBmYXVsdCIpCiAjZW5kaWYKLV9fQklPTklDX1NJR0RFRihTRUdWLDExLCJTZWdtZW50YXRpb24gZmF1bHQiKQotI2lmZGVmIF9fbWlwc19fCi1fX0JJT05JQ19TSUdERUYoU1lTLDEyLCJCYWQgc3lzdGVtIGNhbGwiKQotI2Vsc2UKLV9fQklPTklDX1NJR0RFRihVU1IyLDEyLCJVc2VyIHNpZ25hbCAyIikKLSNlbmRpZgotX19CSU9OSUNfU0lHREVGKFBJUEUsMTMsIkJyb2tlbiBwaXBlIikKLV9fQklPTklDX1NJR0RFRihBTFJNLDE0LCJBbGFybSBjbG9jayIpCi1fX0JJT05JQ19TSUdERUYoVEVSTSwxNSwiVGVybWluYXRlZCIpCi0jaWZkZWYgX19taXBzX18KLV9fQklPTklDX1NJR0RFRihVU1IxLDE2LCJVc2VyIHNpZ25hbCAxIikKLV9fQklPTklDX1NJR0RFRihVU1IyLDE3LCJVc2VyIHNpZ25hbCAyIikKLV9fQklPTklDX1NJR0RFRihDSExELDE4LCJDaGlsZCBleGl0ZWQiKQotX19CSU9OSUNfU0lHREVGKFBXUiwxOSwiUG93ZXIgZmFpbHVyZSIpCi1fX0JJT05JQ19TSUdERUYoV0lOQ0gsMjAsIldpbmRvdyBzaXplIGNoYW5nZWQiKQotX19CSU9OSUNfU0lHREVGKFVSRywyMSwiVXJnZW50IEkvTyBjb25kaXRpb24iKQotX19CSU9OSUNfU0lHREVGKElPLDIyLCJJL08gcG9zc2libGUiKQotX19CSU9OSUNfU0lHREVGKFNUT1AsMjMsIlN0b3BwZWQgKHNpZ25hbCkiKQotX19CSU9OSUNfU0lHREVGKFRTVFAsMjQsIlN0b3BwZWQiKQotX19CSU9OSUNfU0lHREVGKENPTlQsMjUsIkNvbnRpbnVlIikKLV9fQklPTklDX1NJR0RFRihUVElOLDI2LCJTdG9wcGVkICh0dHkgaW5wdXQpIikKLV9fQklPTklDX1NJR0RFRihUVE9VLDI3LCJTdG9wcGVkICh0dHkgb3V0cHV0KSIpCi1fX0JJT05JQ19TSUdERUYoVlRBTFJNLDI4LCJWaXJ0dWFsIHRpbWVyIGV4cGlyZWQiKQotX19CSU9OSUNfU0lHREVGKFBST0YsMjksIlByb2ZpbGluZyB0aW1lciBleHBpcmVkIikKLV9fQklPTklDX1NJR0RFRihYQ1BVLDMwLCJDUFUgdGltZSBsaW1pdCBleGNlZWRlZCIpCi1fX0JJT05JQ19TSUdERUYoWEZTWiwzMSwiRmlsZSBzaXplIGxpbWl0IGV4Y2VlZGVkIikKLSNlbHNlCi1fX0JJT05JQ19TSUdERUYoU1RLRkxULDE2LCJTdGFjayBmYXVsdCIpCi1fX0JJT05JQ19TSUdERUYoQ0hMRCwxNywiQ2hpbGQgZXhpdGVkIikKLV9fQklPTklDX1NJR0RFRihDT05ULDE4LCJDb250aW51ZSIpCi1fX0JJT05JQ19TSUdERUYoU1RPUCwxOSwiU3RvcHBlZCAoc2lnbmFsKSIpCi1fX0JJT05JQ19TSUdERUYoVFNUUCwyMCwiU3RvcHBlZCIpCi1fX0JJT05JQ19TSUdERUYoVFRJTiwyMSwiU3RvcHBlZCAodHR5IGlucHV0KSIpCi1fX0JJT05JQ19TSUdERUYoVFRPVSwyMiwiU3RvcHBlZCAodHR5IG91dHB1dCkiKQotX19CSU9OSUNfU0lHREVGKFVSRywyMywiVXJnZW50IEkvTyBjb25kaXRpb24iKQotX19CSU9OSUNfU0lHREVGKFhDUFUsMjQsIkNQVSB0aW1lIGxpbWl0IGV4Y2VlZGVkIikKLV9fQklPTklDX1NJR0RFRihYRlNaLDI1LCJGaWxlIHNpemUgbGltaXQgZXhjZWVkZWQiKQotX19CSU9OSUNfU0lHREVGKFZUQUxSTSwyNiwiVmlydHVhbCB0aW1lciBleHBpcmVkIikKLV9fQklPTklDX1NJR0RFRihQUk9GLDI3LCJQcm9maWxpbmcgdGltZXIgZXhwaXJlZCIpCi1fX0JJT05JQ19TSUdERUYoV0lOQ0gsMjgsIldpbmRvdyBzaXplIGNoYW5nZWQiKQotX19CSU9OSUNfU0lHREVGKElPLDI5LCJJL08gcG9zc2libGUiKQotX19CSU9OSUNfU0lHREVGKFBXUiwzMCwiUG93ZXIgZmFpbHVyZSIpCi1fX0JJT05JQ19TSUdERUYoU1lTLDMxLCJCYWQgc3lzdGVtIGNhbGwiKQotI2VuZGlmCitfX0JJT05JQ19TSUdERUYoU0lHU1lTLCAgICAiQmFkIHN5c3RlbSBjYWxsIikKIAogI3VuZGVmIF9fQklPTklDX1NJR0RFRgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9fc3lzdGVtX3Byb3BlcnRpZXMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvX3N5c3RlbV9wcm9wZXJ0aWVzLmgKaW5kZXggNWVlZTdmMC4uNWE2ODFkZiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9fc3lzdGVtX3Byb3BlcnRpZXMuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL19zeXN0ZW1fcHJvcGVydGllcy5oCkBAIC0xMzksNiArMTM5LDE0IEBACiAgICAgICAgIHZvaWQgKCpwcm9wZm4pKGNvbnN0IHByb3BfaW5mbyAqcGksIHZvaWQgKmNvb2tpZSksCiAgICAgICAgIHZvaWQgKmNvb2tpZSk7CiAKKy8qIEluaXRpYWxpemUgdGhlIHN5c3RlbSBwcm9wZXJ0aWVzIGFyZWEgaW4gcmVhZCBvbmx5IG1vZGUuCisgKiBTaG91bGQgYmUgZG9uZSBieSBhbGwgcHJvY2Vzc2VzIHRoYXQgbmVlZCB0byByZWFkIHN5c3RlbQorICogcHJvcGVydGllcy4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb3RoZXJ3aXNlLgorICovCitpbnQgX19zeXN0ZW1fcHJvcGVydGllc19pbml0KCk7CisKIF9fRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9fdHlwZXMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvX3R5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMzEzZDEuLjAwMDAwMDAKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9fdHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBfdHlwZXMuaCx2IDEuMSAyMDA2LzAxLzA2IDE4OjUzOjA1IG1pbGxlcnQgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglAKCMpdHlwZXMuaAk4LjMgKEJlcmtlbGV5KSAxLzUvOTQKLSAqLwotCi0jaWZuZGVmIF9TWVNfX1RZUEVTX0hfCi0jZGVmaW5lCV9TWVNfX1RZUEVTX0hfCi0KLSNpbmNsdWRlIDxtYWNoaW5lL190eXBlcy5oPgotCi10eXBlZGVmCXVuc2lnbmVkIGxvbmcJX19jcHVpZF90OwkvKiBDUFUgaWQgKi8KLXR5cGVkZWYJX191aW50MzJfdAlfX2ZpeHB0X3Q7CS8qIGZpeGVkIHBvaW50IG51bWJlciAqLwotdHlwZWRlZglfX3VpbnQzMl90CV9fZ2lkX3Q7CS8qIGdyb3VwIGlkICovCi10eXBlZGVmCV9fdWludDMyX3QJX19pZF90OwkJLyogbWF5IGNvbnRhaW4gcGlkLCB1aWQgb3IgZ2lkICovCi10eXBlZGVmIF9fdWludDMyX3QJX19pbl9hZGRyX3Q7CS8qIGJhc2UgdHlwZSBmb3IgaW50ZXJuZXQgYWRkcmVzcyAqLwotdHlwZWRlZiBfX3VpbnQxNl90CV9faW5fcG9ydF90OwkvKiBJUCBwb3J0IHR5cGUgKi8KLXR5cGVkZWYJX191aW50MzJfdAlfX2lub190OwkvKiBpbm9kZSBudW1iZXIgKi8KLXR5cGVkZWYJbG9uZwkJX19rZXlfdDsJLyogSVBDIGtleSAoZm9yIFN5cyBWIElQQykgKi8KLXR5cGVkZWYJX191aW50MzJfdAlfX21vZGVfdDsJLyogcGVybWlzc2lvbnMgKi8KLXR5cGVkZWYJX191aW50MzJfdAlfX25saW5rX3Q7CS8qIGxpbmsgY291bnQgKi8KLXR5cGVkZWYJX19pbnQzMl90CV9fcGlkX3Q7CS8qIHByb2Nlc3MgaWQgKi8KLXR5cGVkZWYgX191aW50NjRfdAlfX3JsaW1fdDsJLyogcmVzb3VyY2UgbGltaXQgKi8KLXR5cGVkZWYgX191aW50MTZfdAlfX3NhX2ZhbWlseV90OwkvKiBzb2NrYWRkciBhZGRyZXNzIGZhbWlseSB0eXBlICovCi10eXBlZGVmCV9faW50MzJfdAlfX3NlZ3N6X3Q7CS8qIHNlZ21lbnQgc2l6ZSAqLwotdHlwZWRlZiBfX3VpbnQzMl90CV9fc29ja2xlbl90OwkvKiBsZW5ndGggdHlwZSBmb3IgbmV0d29yayBzeXNjYWxscyAqLwotdHlwZWRlZglfX2ludDMyX3QJX19zd2Jsa190OwkvKiBzd2FwIG9mZnNldCAqLwotdHlwZWRlZglfX3VpbnQzMl90CV9fdWlkX3Q7CS8qIHVzZXIgaWQgKi8KLXR5cGVkZWYJX191aW50MzJfdAlfX3VzZWNvbmRzX3Q7CS8qIG1pY3Jvc2Vjb25kcyAqLwotdHlwZWRlZglfX2ludDMyX3QJX19zdXNlY29uZHNfdDsJLyogbWljcm9zZWNvbmRzIChzaWduZWQpICovCi0KLS8qCi0gKiBtYnN0YXRlX3QgaXMgYW4gb3BhcXVlIG9iamVjdCB0byBrZWVwIGNvbnZlcnNpb24gc3RhdGUsIGR1cmluZyBtdWx0aWJ5dGUKLSAqIHN0cmVhbSBjb252ZXJzaW9ucy4gVGhlIGNvbnRlbnQgbXVzdCBub3QgYmUgcmVmZXJlbmNlZCBieSB1c2VyIHByb2dyYW1zLgotICovCi10eXBlZGVmIHVuaW9uIHsKLQljaGFyIF9fbWJzdGF0ZThbMTI4XTsKLQlfX2ludDY0X3QgX19tYnN0YXRlTDsJCQkvKiBmb3IgYWxpZ25tZW50ICovCi19IF9fbWJzdGF0ZV90OwotCi0jZW5kaWYgLyogIV9TWVNfX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2F0b21pY3MuaCBiL2xpYmMvaW5jbHVkZS9zeXMvYXRvbWljcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDNiYzRiLi4wMDAwMDAwCi0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvYXRvbWljcy5oCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBfU1lTX0FUT01JQ1NfSAotI2RlZmluZSBfU1lTX0FUT01JQ1NfSAotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLQotX19CRUdJTl9ERUNMUwotCi0vKiBOb3RlOiBhdG9taWMgb3BlcmF0aW9ucyB0aGF0IHdlcmUgZXhwb3J0ZWQgYnkgdGhlIEMgbGlicmFyeSBkaWRuJ3QKLSAqICAgICAgIHByb3ZpZGUgYW55IG1lbW9yeSBiYXJyaWVycywgd2hpY2ggY3JlYXRlZCBwb3RlbnRpYWwgaXNzdWVzIG9uCi0gKiAgICAgICBtdWx0aS1jb3JlIGRldmljZXMuIFdlIG5vdyBkZWZpbmUgdGhlbSBhcyBpbmxpbmVkIGNhbGxzIHRvCi0gKiAgICAgICBHQ0Mgc3luYyBidWlsdGlucywgd2hpY2ggYWx3YXlzIHByb3ZpZGUgYSBmdWxsIGJhcnJpZXIuCi0gKgotICogICAgICAgTk9URTogVGhlIEMgbGlicmFyeSBzdGlsbCBleHBvcnRzIGF0b21pYyBmdW5jdGlvbnMgYnkgdGhlIHNhbWUKLSAqICAgICAgICAgICAgICBuYW1lIHRvIGVuc3VyZSBBQkkgc3RhYmlsaXR5IGZvciBleGlzdGluZyBOREsgbWFjaGluZSBjb2RlLgotICoKLSAqICAgICAgIElmIHlvdSBhcmUgYW4gTkRLIGRldmVsb3Blciwgd2UgZW5jb3VyYWdlIHlvdSB0byByZWJ1aWxkIHlvdXIKLSAqICAgICAgIHVubW9kaWZpZWQgc291cmNlcyBhZ2FpbnN0IHRoaXMgaGVhZGVyIGFzIHNvb24gYXMgcG9zc2libGUuCi0gKi8KLSNkZWZpbmUgX19BVE9NSUNfSU5MSU5FX18gc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCi0KLV9fQVRPTUlDX0lOTElORV9fIGludAotX19hdG9taWNfY21weGNoZyhpbnQgb2xkX3ZhbHVlLCBpbnQgbmV3X3ZhbHVlLCB2b2xhdGlsZSBpbnQqIHB0cikKLXsKLSAgICAvKiBXZSBtdXN0IHJldHVybiAwIG9uIHN1Y2Nlc3MgKi8KLSAgICByZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwKHB0ciwgb2xkX3ZhbHVlLCBuZXdfdmFsdWUpICE9IG9sZF92YWx1ZTsKLX0KLQotX19BVE9NSUNfSU5MSU5FX18gaW50Ci1fX2F0b21pY19zd2FwKGludCBuZXdfdmFsdWUsIHZvbGF0aWxlIGludCAqcHRyKQotewotICAgIGludCBvbGRfdmFsdWU7Ci0gICAgZG8gewotICAgICAgICBvbGRfdmFsdWUgPSAqcHRyOwotICAgIH0gd2hpbGUgKF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcChwdHIsIG9sZF92YWx1ZSwgbmV3X3ZhbHVlKSAhPSBvbGRfdmFsdWUpOwotICAgIHJldHVybiBvbGRfdmFsdWU7Ci19Ci0KLV9fQVRPTUlDX0lOTElORV9fIGludAotX19hdG9taWNfZGVjKHZvbGF0aWxlIGludCAqcHRyKQotewotICByZXR1cm4gX19zeW5jX2ZldGNoX2FuZF9zdWIgKHB0ciwgMSk7Ci19Ci0KLV9fQVRPTUlDX0lOTElORV9fIGludAotX19hdG9taWNfaW5jKHZvbGF0aWxlIGludCAqcHRyKQotewotICByZXR1cm4gX19zeW5jX2ZldGNoX2FuZF9hZGQgKHB0ciwgMSk7Ci19Ci0KLQotaW50IF9fZnV0ZXhfd2FpdCh2b2xhdGlsZSB2b2lkICpmdHgsIGludCB2YWwsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdGltZW91dCk7Ci1pbnQgX19mdXRleF93YWtlKHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IGNvdW50KTsKLQotX19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9TWVNfQVRPTUlDU19IICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2NkZWZzLmggYi9saWJjL2luY2x1ZGUvc3lzL2NkZWZzLmgKaW5kZXggYjRkYWQ3NC4uOWE4ZGZkZCAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9jZGVmcy5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvY2RlZnMuaApAQCAtMzgsMjIgKzM4LDQwIEBACiAjZGVmaW5lCV9TWVNfQ0RFRlNfSF8KIAogLyoKKyAqIFRlc3RpbmcgYWdhaW5zdCBDbGFuZy1zcGVjaWZpYyBleHRlbnNpb25zLgorICovCisKKyNpZm5kZWYgX19oYXNfZXh0ZW5zaW9uCisjZGVmaW5lIF9faGFzX2V4dGVuc2lvbiAgICAgICAgIF9faGFzX2ZlYXR1cmUKKyNlbmRpZgorI2lmbmRlZiBfX2hhc19mZWF0dXJlCisjZGVmaW5lIF9faGFzX2ZlYXR1cmUoeCkgICAgICAgIDAKKyNlbmRpZgorI2lmbmRlZiBfX2hhc19pbmNsdWRlCisjZGVmaW5lIF9faGFzX2luY2x1ZGUoeCkgICAgICAgIDAKKyNlbmRpZgorI2lmbmRlZiBfX2hhc19idWlsdGluCisjZGVmaW5lIF9faGFzX2J1aWx0aW4oeCkgICAgICAgIDAKKyNlbmRpZgorCisKKy8qCiAgKiBNYWNybyB0byB0ZXN0IGlmIHdlJ3JlIHVzaW5nIGEgR05VIEMgY29tcGlsZXIgb2YgYSBzcGVjaWZpYyB2aW50YWdlCiAgKiBvciBsYXRlciwgZm9yIGUuZy4gZmVhdHVyZXMgdGhhdCBhcHBlYXJlZCBpbiBhIHBhcnRpY3VsYXIgdmVyc2lvbgogICogb2YgR05VIEMuICBVc2FnZToKICAqCi0gKgkjaWYgX19HTlVDX1BSRVJFUV9fKG1ham9yLCBtaW5vcikKKyAqCSNpZiBfX0dOVUNfUFJFUkVRKG1ham9yLCBtaW5vcikKICAqCS4uLmNvb2wgZmVhdHVyZS4uLgogICoJI2Vsc2UKICAqCS4uLmRlbGV0ZSBmZWF0dXJlLi4uCiAgKgkjZW5kaWYKICAqLwogI2lmZGVmIF9fR05VQ19fCi0jZGVmaW5lCV9fR05VQ19QUkVSRVFfXyh4LCB5KQkJCQkJCVwKKyNkZWZpbmUJX19HTlVDX1BSRVJFUSh4LCB5KQkJCQkJCVwKIAkoKF9fR05VQ19fID09ICh4KSAmJiBfX0dOVUNfTUlOT1JfXyA+PSAoeSkpIHx8CQkJXAogCSAoX19HTlVDX18gPiAoeCkpKQogI2Vsc2UKLSNkZWZpbmUJX19HTlVDX1BSRVJFUV9fKHgsIHkpCTAKKyNkZWZpbmUJX19HTlVDX1BSRVJFUSh4LCB5KQkwCiAjZW5kaWYKIAogI2luY2x1ZGUgPHN5cy9jZGVmc19lbGYuaD4KQEAgLTE0NSw3ICsxNjMsNyBAQAogICogR0NDMiBwcm92aWRlcyBfX2V4dGVuc2lvbl9fIHRvIHN1cHByZXNzIHdhcm5pbmdzIGZvciB2YXJpb3VzIEdOVSBDCiAgKiBsYW5ndWFnZSBleHRlbnNpb25zIHVuZGVyICItYW5zaSAtcGVkYW50aWMiLgogICovCi0jaWYgIV9fR05VQ19QUkVSRVFfXygyLCAwKQorI2lmICFfX0dOVUNfUFJFUkVRKDIsIDApCiAjZGVmaW5lCV9fZXh0ZW5zaW9uX18JCS8qIGRlbGV0ZSBfX2V4dGVuc2lvbl9fIGlmIG5vbi1nY2Mgb3IgZ2NjMSAqLwogI2VuZGlmCiAKQEAgLTE1Nyw3ICsxNzUsNyBAQAogICogdGhlc2Ugd29yayBmb3IgR05VIEMrKyAobW9kdWxvIGEgc2xpZ2h0IGdsaXRjaCBpbiB0aGUgQysrIGdyYW1tYXIKICAqIGluIHRoZSBkaXN0cmlidXRpb24gdmVyc2lvbiBvZiAyLjUuNSkuCiAgKi8KLSNpZiAhX19HTlVDX1BSRVJFUV9fKDIsIDUpCisjaWYgIV9fR05VQ19QUkVSRVEoMiwgNSkKICNkZWZpbmUJX19hdHRyaWJ1dGVfXyh4KQkvKiBkZWxldGUgX19hdHRyaWJ1dGVfXyBpZiBub24tZ2NjIG9yIGdjYzEgKi8KICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCiAjZGVmaW5lCV9fZGVhZAkJX192b2xhdGlsZQpAQCAtMTcxLDcgKzE4OSw3IEBACiAjZGVmaW5lCV9fcHVyZQogI2VuZGlmCiAKLSNpZiBfX0dOVUNfUFJFUkVRX18oMiwgNykKKyNpZiBfX0dOVUNfUFJFUkVRKDIsIDcpCiAjZGVmaW5lCV9fdW51c2VkCV9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQogI2Vsc2UKICNkZWZpbmUJX191bnVzZWQJLyogZGVsZXRlICovCkBAIC0xNzksMTMgKzE5NywxMyBAQAogCiAjZGVmaW5lIF9fcHVyZTIgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkgLyogQW5kcm9pZC1hZGRlZDogdXNlZCBieSBGcmVlQlNEIGxpYm0gKi8KIAotI2lmIF9fR05VQ19QUkVSRVFfXygzLCAxKQorI2lmIF9fR05VQ19QUkVSRVEoMywgMSkKICNkZWZpbmUJX191c2VkCQlfX2F0dHJpYnV0ZV9fKChfX3VzZWRfXykpCiAjZWxzZQogI2RlZmluZQlfX3VzZWQJCS8qIGRlbGV0ZSAqLwogI2VuZGlmCiAKLSNpZiBfX0dOVUNfUFJFUkVRX18oMiwgNykKKyNpZiBfX0dOVUNfUFJFUkVRKDIsIDcpCiAjZGVmaW5lCV9fcGFja2VkCV9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKQogI2RlZmluZQlfX2FsaWduZWQoeCkJX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oeCkpKQogI2RlZmluZQlfX3NlY3Rpb24oeCkJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oeCkpKQpAQCAtMTk5LDExICsyMTcsMTEgQEAKICNkZWZpbmUJX19zZWN0aW9uKHgpCWVycm9yOiBubyBfX3NlY3Rpb24gZm9yIHRoaXMgY29tcGlsZXIKICNlbmRpZgogCi0jaWYgIV9fR05VQ19QUkVSRVFfXygyLCA4KQorI2lmICFfX0dOVUNfUFJFUkVRKDIsIDgpCiAjZGVmaW5lCV9fZXh0ZW5zaW9uX18KICNlbmRpZgogCi0jaWYgX19HTlVDX1BSRVJFUV9fKDIsIDgpCisjaWYgX19HTlVDX1BSRVJFUSgyLCA4KQogI2RlZmluZSBfX3N0YXRlbWVudCh4KQlfX2V4dGVuc2lvbl9fKHgpCiAjZWxpZiBkZWZpbmVkKGxpbnQpCiAjZGVmaW5lIF9fc3RhdGVtZW50KHgpCSgwKQpAQCAtMjIzLDcgKzI0MSw3IEBACiAjaWYgZGVmaW5lZChfX1NURENfX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCiAjZGVmaW5lCV9fcmVzdHJpY3QJcmVzdHJpY3QKICNlbHNlCi0jaWYgIV9fR05VQ19QUkVSRVFfXygyLCA5MikKKyNpZiAhX19HTlVDX1BSRVJFUSgyLCA5MikKICNkZWZpbmUJX19yZXN0cmljdAkvKiBkZWxldGUgX19yZXN0cmljdCB3aGVuIG5vdCBzdXBwb3J0ZWQgKi8KICNlbmRpZgogI2VuZGlmCkBAIC0yMzMsOSArMjUxLDkgQEAKICAqIGluIEdDQyAyLjk1LgogICovCiAjaWYgIWRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgfHwgIShfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCi0jaWYgX19HTlVDX1BSRVJFUV9fKDIsIDYpCisjaWYgX19HTlVDX1BSRVJFUSgyLCA2KQogI2RlZmluZQlfX2Z1bmNfXwlfX1BSRVRUWV9GVU5DVElPTl9fCi0jZWxpZiBfX0dOVUNfUFJFUkVRX18oMiwgNCkKKyNlbGlmIF9fR05VQ19QUkVSRVEoMiwgNCkKICNkZWZpbmUJX19mdW5jX18JX19GVU5DVElPTl9fCiAjZWxzZQogI2RlZmluZQlfX2Z1bmNfXwkiIgpAQCAtMjY4LDcgKzI4Niw3IEBACiAgKiByZWdpc3RlciB2YWx1ZXMuIFRoaXMgaXMgZ2NjIHNwZWNpZmljLCB0aGUgdmVyc2lvbiBpcyBtb3JlIG9yIGxlc3MKICAqIGFyYml0cmFyeSwgbWlnaHQgd29yayB3aXRoIG9sZGVyIGNvbXBpbGVycy4KICAqLwotI2lmIF9fR05VQ19QUkVSRVFfXygyLCA5NSkKKyNpZiBfX0dOVUNfUFJFUkVRKDIsIDk1KQogI2RlZmluZQlfX2luc25fYmFycmllcigpCV9fYXNtIF9fdm9sYXRpbGUoIiI6OjoibWVtb3J5IikKICNlbHNlCiAjZGVmaW5lCV9faW5zbl9iYXJyaWVyKCkJLyogKi8KQEAgLTMwMiw3ICszMjAsNyBAQAogICoJICBiYXNpYyBibG9jayByZW9yZGVyaW5nIHRoYXQgdGhpcyBhZmZlY3RzIGNhbiBvZnRlbiBnZW5lcmF0ZQogICoJICBsYXJnZXIgY29kZS4KICAqLwotI2lmIF9fR05VQ19QUkVSRVFfXygyLCA5NikKKyNpZiBfX0dOVUNfUFJFUkVRKDIsIDk2KQogI2RlZmluZQlfX3ByZWRpY3RfdHJ1ZShleHApCV9fYnVpbHRpbl9leHBlY3QoKGV4cCkgIT0gMCwgMSkKICNkZWZpbmUJX19wcmVkaWN0X2ZhbHNlKGV4cCkJX19idWlsdGluX2V4cGVjdCgoZXhwKSAhPSAwLCAwKQogI2Vsc2UKQEAgLTMxMCw3ICszMjgsNyBAQAogI2RlZmluZQlfX3ByZWRpY3RfZmFsc2UoZXhwKQkoZXhwKQogI2VuZGlmCiAKLSNpZiBfX0dOVUNfUFJFUkVRX18oMiwgOTYpCisjaWYgX19HTlVDX1BSRVJFUSgyLCA5NikKICNkZWZpbmUgX19ub3JldHVybiAgICBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKQogI2RlZmluZSBfX21hbGxvY2Z1bmMgIF9fYXR0cmlidXRlX18oKG1hbGxvYykpCiAjZGVmaW5lIF9fcHVyZWZ1bmMgICAgX19hdHRyaWJ1dGVfXygocHVyZSkpCkBAIC0zMjAsMTkgKzMzOCwxOSBAQAogI2RlZmluZSBfX3B1cmVmdW5jCiAjZW5kaWYKIAotI2lmIF9fR05VQ19QUkVSRVFfXygzLCAxKQorI2lmIF9fR05VQ19QUkVSRVEoMywgMSkKICNkZWZpbmUgX19hbHdheXNfaW5saW5lIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKICNlbHNlCiAjZGVmaW5lIF9fYWx3YXlzX2lubGluZQogI2VuZGlmCiAKLSNpZiBfX0dOVUNfUFJFUkVRX18oMywgNCkKKyNpZiBfX0dOVUNfUFJFUkVRKDMsIDQpCiAjZGVmaW5lIF9fd3VyIF9fYXR0cmlidXRlX18oKF9fd2Fybl91bnVzZWRfcmVzdWx0X18pKQogI2Vsc2UKICNkZWZpbmUgX193dXIKICNlbmRpZgogCi0jaWYgX19HTlVDX1BSRVJFUV9fKDQsIDMpCisjaWYgX19HTlVDX1BSRVJFUSg0LCAzKQogI2RlZmluZSBfX2Vycm9yZGVjbChuYW1lLCBtc2cpIGV4dGVybiB2b2lkIG5hbWUodm9pZCkgX19hdHRyaWJ1dGVfXygoX19lcnJvcl9fKG1zZykpKQogI2RlZmluZSBfX3dhcm5hdHRyKG1zZykgX19hdHRyaWJ1dGVfXygoX193YXJuaW5nX18obXNnKSkpCiAjZWxzZQpAQCAtNTI4LDYgKzU0NiwxMyBAQAogI2RlZmluZSAgX19CSU9OSUNfXyAgIDEKICNpbmNsdWRlIDxhbmRyb2lkL2FwaS1sZXZlbC5oPgogCisvKiBnbGliYyBjb21wYXRpYmlsaXR5LiAqLworI2lmIF9fTFA2NF9fCisjZGVmaW5lIF9fV09SRFNJWkUgNjQKKyNlbHNlCisjZGVmaW5lIF9fV09SRFNJWkUgMzIKKyNlbmRpZgorCiAvKgogICogV2hlbiBfRk9SVElGWV9TT1VSQ0UgaXMgZGVmaW5lZCwgYXV0b21hdGljIGJvdW5kcyBjaGVja2luZyBpcwogICogYWRkZWQgdG8gY29tbW9ubHkgdXNlZCBsaWJjIGZ1bmN0aW9ucy4gSWYgYSBidWZmZXIgb3ZlcnJ1biBpcwpAQCAtNTQ2LDcgKzU3MSw3IEBACiAjZGVmaW5lIF9fYm9zMChzKSBfX2J1aWx0aW5fb2JqZWN0X3NpemUoKHMpLCAwKQogCiAjZGVmaW5lIF9fQklPTklDX0ZPUlRJRllfSU5MSU5FIFwKLSAgICBleHRlcm4gaW5saW5lIFwKKyAgICBleHRlcm4gX19pbmxpbmVfXyBcCiAgICAgX19hdHRyaWJ1dGVfXyAoKGFsd2F5c19pbmxpbmUpKSBcCiAgICAgX19hdHRyaWJ1dGVfXyAoKGdudV9pbmxpbmUpKQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2NkZWZzX2VsZi5oIGIvbGliYy9pbmNsdWRlL3N5cy9jZGVmc19lbGYuaAppbmRleCBiYjg0NmI3Li40ZGQ3ZGMzIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL2NkZWZzX2VsZi5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvY2RlZnNfZWxmLmgKQEAgLTYxLDI0ICs2MSwxOCBAQAogI2RlZmluZQlfX1NFQ1RJT05TVFJJTkcoX3NlYywgX3N0cikJCQkJCVwKIAlfX2FzbV9fKCIuc2VjdGlvbiAiICNfc2VjICJcblx0LmFzY2l6IFwiIiBfc3RyICJcIlxuXHQucHJldmlvdXMiKQogCi0vKiBHQ0MgdmlzaWJpbGl0eSBoZWxwZXIgbWFjcm8gKi8KLS8qIFRoaXMgbXVzdCBiZSB1c2VkIHRvIHRhZyBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSBwcml2YXRlLCBpLmUuCi0gKiBuZXZlciBleHBvc2VkIGJ5IHRoZSBzaGFyZWQgbGlicmFyeS4gKi8KLSNkZWZpbmUgX19MSUJDX0hJRERFTl9fCQkJCQkJCVwKLQlfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKKy8qIFVzZWQgdG8gdGFnIG5vbi1zdGF0aWMgc3ltYm9scyB0aGF0IGFyZSBwcml2YXRlIGFuZCBuZXZlciBleHBvc2VkIGJ5IHRoZSBzaGFyZWQgbGlicmFyeS4gKi8KKyNkZWZpbmUgX19MSUJDX0hJRERFTl9fIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCiAKLS8qIFRoaXMgbXVzdCBiZSB1c2VkIHRvIHRhZyBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSBwdWJsaWMsIGkuZS4KLSAqIGV4cG9zZWQgYnkgdGhlIHNoYXJlZCBsaWJyYXJ5LCBhbmQgcGFydCBvZiB0aGUgc3RhYmxlIE5ESyBBQkkgKi8KLSNkZWZpbmUgX19MSUJDX0FCSV9QVUJMSUNfXyBcCi0gICAgICAgIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKKy8qIExpa2UgX19MSUJDX0hJRERFTl9fLCBidXQgcHJlc2VydmVzIGJpbmFyeSBjb21wYXRpYmlsaXR5IGZvciBMUDMyLiAqLworI2lmZGVmIF9fTFA2NF9fCisjZGVmaW5lIF9fTElCQzY0X0hJRERFTl9fIF9fTElCQ19ISURERU5fXworI2Vsc2UKKyNkZWZpbmUgX19MSUJDNjRfSElEREVOX18gX19MSUJDX0FCSV9QVUJMSUNfXworI2VuZGlmCiAKLS8qIFRoaXMgbXVzdCBiZSB1c2VkIHRvIHRhZyBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IG11c3QgYmUgZXhwb3J0ZWQKLSAqIGJ5IHRoZSBzaGFyZWQgbGlicmFyeSwgYnV0IHdob3NlIGltcGxlbWVudGF0aW9uIGlzIHByaXZhdGUgdG8gdGhlCi0gKiBwbGF0Zm9ybS4gRm9yIG5vdyB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gX19MSUJDX0FCSV9QVUJMSUNfXywgYnV0IHdlCi0gKiBtYXkgd2FudCB0byBjaGFuZ2UgdGhpcyBsYXRlci4KLSAqLwotI2RlZmluZSBfX0xJQkNfQUJJX1BSSVZBVEVfXyBcCi0gICAgICAgIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKKy8qIFVzZWQgdG8gdGFnIG5vbi1zdGF0aWMgc3ltYm9scyB0aGF0IGFyZSBwdWJsaWMgYW5kIGV4cG9zZWQgYnkgdGhlIHNoYXJlZCBsaWJyYXJ5LiAqLworI2RlZmluZSBfX0xJQkNfQUJJX1BVQkxJQ19fIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQogCiAjZGVmaW5lCV9fSURTVFJJTkcoX24sX3MpCQlfX1NFQ1RJT05TVFJJTkcoLmlkZW50LF9zKQogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2VuZGlhbi5oIGIvbGliYy9pbmNsdWRlL3N5cy9lbmRpYW4uaAppbmRleCBiMDM2NWQ4Li5iZTRjOTA1IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL2VuZGlhbi5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvZW5kaWFuLmgKQEAgLTM4LDcgKzM4LDggQEAKIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2luY2x1ZGUgPG1hY2hpbmUvZW5kaWFuLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9fdHlwZXMuaD4KKworI2luY2x1ZGUgPHN0ZGludC5oPgogCiAjZGVmaW5lIF9MSVRUTEVfRU5ESUFOCTEyMzQKICNkZWZpbmUgX0JJR19FTkRJQU4JNDMyMQpAQCAtMTg3LDE0ICsxODgsMjIgQEAKICNkZWZpbmUgbGV0b2g2NCh4KSAoeCkKICNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCiAKLSNkZWZpbmUgaHRvbnMoeCkgX19zd2FwMTYoeCkKKy8qIGdsaWJjIGNvbXBhdGliaWxpdHkuICovCitfX0JFR0lOX0RFQ0xTCit1aW50MzJfdCBodG9ubCh1aW50MzJfdCkgX19wdXJlMjsKK3VpbnQxNl90IGh0b25zKHVpbnQxNl90KSBfX3B1cmUyOwordWludDMyX3QgbnRvaGwodWludDMyX3QpIF9fcHVyZTI7Cit1aW50MTZfdCBudG9ocyh1aW50MTZfdCkgX19wdXJlMjsKK19fRU5EX0RFQ0xTCisKICNkZWZpbmUgaHRvbmwoeCkgX19zd2FwMzIoeCkKLSNkZWZpbmUgbnRvaHMoeCkgX19zd2FwMTYoeCkKKyNkZWZpbmUgaHRvbnMoeCkgX19zd2FwMTYoeCkKICNkZWZpbmUgbnRvaGwoeCkgX19zd2FwMzIoeCkKKyNkZWZpbmUgbnRvaHMoeCkgX19zd2FwMTYoeCkKIAogLyogQmlvbmljIGFkZGl0aW9ucyAqLwotI2RlZmluZSBudG9ocSh4KSBfX3N3YXA2NCh4KQogI2RlZmluZSBodG9ucSh4KSBfX3N3YXA2NCh4KQorI2RlZmluZSBudG9ocSh4KSBfX3N3YXA2NCh4KQogCiAjZGVmaW5lIF9fTElUVExFX0VORElBTl9CSVRGSUVMRAogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2Vwb2xsLmggYi9saWJjL2luY2x1ZGUvc3lzL2Vwb2xsLmgKaW5kZXggYzA2YTA4MS4uNGE1YTM3YyAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9lcG9sbC5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvZXBvbGwuaApAQCAtNjcsNyArNjcsMTEgQEAKIHN0cnVjdCBlcG9sbF9ldmVudCB7CiAgIHVpbnQzMl90IGV2ZW50czsKICAgZXBvbGxfZGF0YV90IGRhdGE7Ci19OworfQorI2lmZGVmIF9feDg2XzY0X18KK19fcGFja2VkCisjZW5kaWYKKzsKIAogaW50IGVwb2xsX2NyZWF0ZShpbnQpOwogaW50IGVwb2xsX2NyZWF0ZTEoaW50KTsKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvZXhlY19lbGYuaCBiL2xpYmMvaW5jbHVkZS9zeXMvZXhlY19lbGYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MxNDY3Yy4uMDAwMDAwMAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL2V4ZWNfZWxmLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjY3ICswLDAgQEAKLS8qCSROZXRCU0Q6IGV4ZWNfZWxmLmgsdiAxLjEzMSAyMDEzLzEwLzI5IDAwOjIyOjU5IGNocmlzdG9zIEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTk0IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgotICogYnkgQ2hyaXN0b3MgWm91bGFzLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKLSAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgX1NZU19FWEVDX0VMRl9IXwotI2RlZmluZSBfU1lTX0VYRUNfRUxGX0hfCi0KLS8qCi0gKiBUaGUgY3VycmVudCBFTEYgQUJJIHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIGF0OgotICoJaHR0cDovL3d3dy5zY28uY29tL2RldmVsb3BlcnMvZ2FiaS8KLSAqCi0gKiBDdXJyZW50IGhlYWRlciBkZWZpbml0aW9ucyBhcmUgaW46Ci0gKglodHRwOi8vd3d3LnNjby5jb20vZGV2ZWxvcGVycy9nYWJpL2xhdGVzdC9jaDQuZWhlYWRlci5odG1sCi0gKi8KLQotI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfU1RBTkRBTE9ORSkKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbHNlCi0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNlbmRpZiAvKiBfS0VSTkVMIHx8IF9TVEFOREFMT05FICovCi0KLSNpZiBIQVZFX05CVE9PTF9DT05GSUdfSAotI2luY2x1ZGUgPG5iaW5jbHVkZS9tYWNoaW5lL2VsZl9tYWNoZGVwLmg+Ci0jZWxzZQotI2luY2x1ZGUgPG1hY2hpbmUvZWxmX21hY2hkZXAuaD4KLSNlbmRpZgotCi10eXBlZGVmIHVpbnQ4X3QJCUVsZl9CeXRlOwotCi10eXBlZGVmIHVpbnQzMl90CUVsZjMyX0FkZHI7Ci0jZGVmaW5lIEVMRjMyX0ZTWl9BRERSCTQKLXR5cGVkZWYgdWludDMyX3QJRWxmMzJfT2ZmOwotdHlwZWRlZiBpbnQzMl90CQlFbGYzMl9TT2ZmOwotI2RlZmluZSBFTEYzMl9GU1pfT0ZGCTQKLXR5cGVkZWYgaW50MzJfdAkJRWxmMzJfU3dvcmQ7Ci0jZGVmaW5lIEVMRjMyX0ZTWl9TV09SRCA0Ci10eXBlZGVmIHVpbnQzMl90CUVsZjMyX1dvcmQ7Ci0jZGVmaW5lIEVMRjMyX0ZTWl9XT1JECTQKLXR5cGVkZWYgdWludDE2X3QJRWxmMzJfSGFsZjsKLSNkZWZpbmUgRUxGMzJfRlNaX0hBTEYJMgotdHlwZWRlZiB1aW50NjRfdAlFbGYzMl9Md29yZDsKLSNkZWZpbmUgRUxGMzJfRlNaX0xXT1JEIDgKLQotdHlwZWRlZiB1aW50NjRfdAlFbGY2NF9BZGRyOwotI2RlZmluZSBFTEY2NF9GU1pfQUREUgk4Ci10eXBlZGVmIHVpbnQ2NF90CUVsZjY0X09mZjsKLXR5cGVkZWYgaW50NjRfdAkJRWxmNjRfU09mZjsKLSNkZWZpbmUgRUxGNjRfRlNaX09GRgk4Ci10eXBlZGVmIGludDMyX3QJCUVsZjY0X1NoYWxmOwotI2RlZmluZSBFTEY2NF9GU1pfU0hBTEYgNAotCi10eXBlZGVmIGludDMyX3QJCUVsZjY0X1N3b3JkOwotI2RlZmluZSBFTEY2NF9GU1pfU1dPUkQgNAotdHlwZWRlZiB1aW50MzJfdAlFbGY2NF9Xb3JkOwotI2RlZmluZSBFTEY2NF9GU1pfV09SRAk0Ci0KLXR5cGVkZWYgaW50NjRfdAkJRWxmNjRfU3h3b3JkOwotI2RlZmluZSBFTEY2NF9GU1pfU1hXT1JEIDgKLXR5cGVkZWYgdWludDY0X3QJRWxmNjRfWHdvcmQ7Ci0jZGVmaW5lIEVMRjY0X0ZTWl9YV09SRCA4Ci10eXBlZGVmIHVpbnQ2NF90CUVsZjY0X0x3b3JkOwotI2RlZmluZSBFTEY2NF9GU1pfTFdPUkQgOAotdHlwZWRlZiB1aW50MTZfdAlFbGY2NF9IYWxmOwotI2RlZmluZSBFTEY2NF9GU1pfSEFMRiAyCi0KLS8qCi0gKiBFTEYgSGVhZGVyCi0gKi8KLSNkZWZpbmUgRUxGX05JREVOVAkxNgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhcgllX2lkZW50W0VMRl9OSURFTlRdOwkvKiBJZCBieXRlcyAqLwotCUVsZjMyX0hhbGYJZV90eXBlOwkJCS8qIGZpbGUgdHlwZSAqLwotCUVsZjMyX0hhbGYJZV9tYWNoaW5lOwkJLyogbWFjaGluZSB0eXBlICovCi0JRWxmMzJfV29yZAllX3ZlcnNpb247CQkvKiB2ZXJzaW9uIG51bWJlciAqLwotCUVsZjMyX0FkZHIJZV9lbnRyeTsJCS8qIGVudHJ5IHBvaW50ICovCi0JRWxmMzJfT2ZmCWVfcGhvZmY7CQkvKiBQcm9ncmFtIGhkciBvZmZzZXQgKi8KLQlFbGYzMl9PZmYJZV9zaG9mZjsJCS8qIFNlY3Rpb24gaGRyIG9mZnNldCAqLwotCUVsZjMyX1dvcmQJZV9mbGFnczsJCS8qIFByb2Nlc3NvciBmbGFncyAqLwotCUVsZjMyX0hhbGYJZV9laHNpemU7CQkvKiBzaXplb2YgZWhkciAqLwotCUVsZjMyX0hhbGYJZV9waGVudHNpemU7CQkvKiBQcm9ncmFtIGhlYWRlciBlbnRyeSBzaXplICovCi0JRWxmMzJfSGFsZgllX3BobnVtOwkJLyogTnVtYmVyIG9mIHByb2dyYW0gaGVhZGVycyAqLwotCUVsZjMyX0hhbGYJZV9zaGVudHNpemU7CQkvKiBTZWN0aW9uIGhlYWRlciBlbnRyeSBzaXplICovCi0JRWxmMzJfSGFsZgllX3NobnVtOwkJLyogTnVtYmVyIG9mIHNlY3Rpb24gaGVhZGVycyAqLwotCUVsZjMyX0hhbGYJZV9zaHN0cm5keDsJCS8qIFN0cmluZyB0YWJsZSBpbmRleCAqLwotfSBFbGYzMl9FaGRyOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhcgllX2lkZW50W0VMRl9OSURFTlRdOwkvKiBJZCBieXRlcyAqLwotCUVsZjY0X0hhbGYJZV90eXBlOwkJCS8qIGZpbGUgdHlwZSAqLwotCUVsZjY0X0hhbGYJZV9tYWNoaW5lOwkJLyogbWFjaGluZSB0eXBlICovCi0JRWxmNjRfV29yZAllX3ZlcnNpb247CQkvKiB2ZXJzaW9uIG51bWJlciAqLwotCUVsZjY0X0FkZHIJZV9lbnRyeTsJCS8qIGVudHJ5IHBvaW50ICovCi0JRWxmNjRfT2ZmCWVfcGhvZmY7CQkvKiBQcm9ncmFtIGhkciBvZmZzZXQgKi8KLQlFbGY2NF9PZmYJZV9zaG9mZjsJCS8qIFNlY3Rpb24gaGRyIG9mZnNldCAqLwotCUVsZjY0X1dvcmQJZV9mbGFnczsJCS8qIFByb2Nlc3NvciBmbGFncyAqLwotCUVsZjY0X0hhbGYJZV9laHNpemU7CQkvKiBzaXplb2YgZWhkciAqLwotCUVsZjY0X0hhbGYJZV9waGVudHNpemU7CQkvKiBQcm9ncmFtIGhlYWRlciBlbnRyeSBzaXplICovCi0JRWxmNjRfSGFsZgllX3BobnVtOwkJLyogTnVtYmVyIG9mIHByb2dyYW0gaGVhZGVycyAqLwotCUVsZjY0X0hhbGYJZV9zaGVudHNpemU7CQkvKiBTZWN0aW9uIGhlYWRlciBlbnRyeSBzaXplICovCi0JRWxmNjRfSGFsZgllX3NobnVtOwkJLyogTnVtYmVyIG9mIHNlY3Rpb24gaGVhZGVycyAqLwotCUVsZjY0X0hhbGYJZV9zaHN0cm5keDsJCS8qIFN0cmluZyB0YWJsZSBpbmRleCAqLwotfSBFbGY2NF9FaGRyOwotCi0vKiBlX2lkZW50IG9mZnNldHMgKi8KLSNkZWZpbmUgRUlfTUFHMAkJMAkvKiAnXDE3NycgKi8KLSNkZWZpbmUgRUlfTUFHMQkJMQkvKiAnRScJICAqLwotI2RlZmluZSBFSV9NQUcyCQkyCS8qICdMJwkgICovCi0jZGVmaW5lIEVJX01BRzMJCTMJLyogJ0YnCSAgKi8KLSNkZWZpbmUgRUlfQ0xBU1MJNAkvKiBGaWxlIGNsYXNzICovCi0jZGVmaW5lIEVJX0RBVEEJCTUJLyogRGF0YSBlbmNvZGluZyAqLwotI2RlZmluZSBFSV9WRVJTSU9OCTYJLyogRmlsZSB2ZXJzaW9uICovCi0jZGVmaW5lIEVJX09TQUJJCTcJLyogT3BlcmF0aW5nIHN5c3RlbS9BQkkgaWRlbnRpZmljYXRpb24gKi8KLSNkZWZpbmUgRUlfQUJJVkVSU0lPTgk4CS8qIEFCSSB2ZXJzaW9uICovCi0jZGVmaW5lIEVJX1BBRAkJOQkvKiBTdGFydCBvZiBwYWRkaW5nIGJ5dGVzIHVwIHRvIEVJX05JREVOVCovCi0jZGVmaW5lIEVJX05JREVOVAkxNgkvKiBGaXJzdCBub24taWRlbnQgaGVhZGVyIGJ5dGUgKi8KLQotLyogZV9pZGVudFtFSV9NQUcwLEVJX01BRzNdICovCi0jZGVmaW5lIEVMRk1BRzAJCTB4N2YKLSNkZWZpbmUgRUxGTUFHMQkJJ0UnCi0jZGVmaW5lIEVMRk1BRzIJCSdMJwotI2RlZmluZSBFTEZNQUczCQknRicKLSNkZWZpbmUgRUxGTUFHCQkiXDE3N0VMRiIKLSNkZWZpbmUgU0VMRk1BRwkJNAotCi0vKiBlX2lkZW50W0VJX0NMQVNTXSAqLwotI2RlZmluZSBFTEZDTEFTU05PTkUJMAkvKiBJbnZhbGlkIGNsYXNzICovCi0jZGVmaW5lIEVMRkNMQVNTMzIJMQkvKiAzMi1iaXQgb2JqZWN0cyAqLwotI2RlZmluZSBFTEZDTEFTUzY0CTIJLyogNjQtYml0IG9iamVjdHMgKi8KLSNkZWZpbmUgRUxGQ0xBU1NOVU0JMwotCi0vKiBlX2lkZW50W0VJX0RBVEFdICovCi0jZGVmaW5lIEVMRkRBVEFOT05FCTAJLyogSW52YWxpZCBkYXRhIGVuY29kaW5nICovCi0jZGVmaW5lIEVMRkRBVEEyTFNCCTEJLyogMidzIGNvbXBsZW1lbnQgdmFsdWVzLCBMU0IgZmlyc3QgKi8KLSNkZWZpbmUgRUxGREFUQTJNU0IJMgkvKiAyJ3MgY29tcGxlbWVudCB2YWx1ZXMsIE1TQiBmaXJzdCAqLwotCi0vKiBlX2lkZW50W0VJX1ZFUlNJT05dICovCi0jZGVmaW5lIEVWX05PTkUJCTAJLyogSW52YWxpZCB2ZXJzaW9uICovCi0jZGVmaW5lIEVWX0NVUlJFTlQJMQkvKiBDdXJyZW50IHZlcnNpb24gKi8KLSNkZWZpbmUgRVZfTlVNCQkyCi0KLS8qIGVfaWRlbnRbRUlfT1NBQkldICovCi0jZGVmaW5lIEVMRk9TQUJJX1NZU1YJCTAJLyogVU5JWCBTeXN0ZW0gViBBQkkgKi8KLSNkZWZpbmUgRUxGT1NBQklfSFBVWAkJMQkvKiBIUC1VWCBvcGVyYXRpbmcgc3lzdGVtICovCi0jZGVmaW5lIEVMRk9TQUJJX05FVEJTRAkJMgkvKiBOZXRCU0QgKi8KLSNkZWZpbmUgRUxGT1NBQklfTElOVVgJCTMJLyogR05VL0xpbnV4ICovCi0jZGVmaW5lIEVMRk9TQUJJX0hVUkQJCTQJLyogR05VL0h1cmQgKi8KLSNkZWZpbmUgRUxGT1NBQklfODZPUEVOCQk1CS8qIDg2T3BlbiAqLwotI2RlZmluZSBFTEZPU0FCSV9TT0xBUklTCTYJLyogU29sYXJpcyAqLwotI2RlZmluZSBFTEZPU0FCSV9NT05URVJFWQk3CS8qIE1vbnRlcmV5ICovCi0jZGVmaW5lIEVMRk9TQUJJX0lSSVgJCTgJLyogSVJJWCAqLwotI2RlZmluZSBFTEZPU0FCSV9GUkVFQlNECTkJLyogRnJlZUJTRCAqLwotI2RlZmluZSBFTEZPU0FCSV9UUlU2NAkJMTAJLyogVFJVNjQgVU5JWCAqLwotI2RlZmluZSBFTEZPU0FCSV9NT0RFU1RPCTExCS8qIE5vdmVsbCBNb2Rlc3RvICovCi0jZGVmaW5lIEVMRk9TQUJJX09QRU5CU0QJMTIJLyogT3BlbkJTRCAqLwotI2RlZmluZSBFTEZPU0FCSV9PUEVOVk1TCTEzCS8qIE9wZW5WTVMgKi8KLSNkZWZpbmUgRUxGT1NBQklfTlNLCQkxNAkvKiBIUCBOb24tU3RvcCBLZXJuZWwgKi8KLSNkZWZpbmUgRUxGT1NBQklfQVJPUwkJMTUJLyogQW1pZ2EgUmVzZWFyY2ggT1MgKi8KLS8qIFVub2ZmaWNpYWwgT1NBQklzIGZvbGxvdyAqLwotI2RlZmluZSBFTEZPU0FCSV9BUk0JCTk3CS8qIEFSTSAqLwotI2RlZmluZSBFTEZPU0FCSV9TVEFOREFMT05FCTI1NQkvKiBTdGFuZGFsb25lIChlbWJlZGRlZCkgYXBwbGljYXRpb24gKi8KLQotI2RlZmluZSBFTEZPU0FCSV9OT05FCQlFTEZPU0FCSV9TWVNWCi0jZGVmaW5lIEVMRk9TQUJJX0FJWAkJRUxGT1NBQklfTU9OVEVSRVkKLQotLyogZV90eXBlICovCi0jZGVmaW5lIEVUX05PTkUJCTAJLyogTm8gZmlsZSB0eXBlICovCi0jZGVmaW5lIEVUX1JFTAkJMQkvKiBSZWxvY2F0YWJsZSBmaWxlICovCi0jZGVmaW5lIEVUX0VYRUMJCTIJLyogRXhlY3V0YWJsZSBmaWxlICovCi0jZGVmaW5lIEVUX0RZTgkJMwkvKiBTaGFyZWQgb2JqZWN0IGZpbGUgKi8KLSNkZWZpbmUgRVRfQ09SRQkJNAkvKiBDb3JlIGZpbGUgKi8KLSNkZWZpbmUgRVRfTlVNCQk1Ci0KLSNkZWZpbmUgRVRfTE9PUwkJMHhmZTAwCS8qIE9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMgcmFuZ2UgKi8KLSNkZWZpbmUgRVRfSElPUwkJMHhmZWZmCi0jZGVmaW5lIEVUX0xPUFJPQwkweGZmMDAJLyogUHJvY2Vzc29yLXNwZWNpZmljIHJhbmdlICovCi0jZGVmaW5lIEVUX0hJUFJPQwkweGZmZmYKLQotLyogZV9tYWNoaW5lICovCi0jZGVmaW5lIEVNX05PTkUJCTAJLyogTm8gbWFjaGluZSAqLwotI2RlZmluZSBFTV9NMzIJCTEJLyogQVQmVCBXRSAzMjEwMCAqLwotI2RlZmluZSBFTV9TUEFSQwkyCS8qIFNQQVJDICovCi0jZGVmaW5lIEVNXzM4NgkJMwkvKiBJbnRlbCA4MDM4NiAqLwotI2RlZmluZSBFTV82OEsJCTQJLyogTW90b3JvbGEgNjgwMDAgKi8KLSNkZWZpbmUgRU1fODhLCQk1CS8qIE1vdG9yb2xhIDg4MDAwICovCi0jZGVmaW5lIEVNXzQ4NgkJNgkvKiBJbnRlbCA4MDQ4NiAqLwotI2RlZmluZSBFTV84NjAJCTcJLyogSW50ZWwgODA4NjAgKi8KLSNkZWZpbmUgRU1fTUlQUwkJOAkvKiBNSVBTIEkgQXJjaGl0ZWN0dXJlICovCi0jZGVmaW5lIEVNX1MzNzAJCTkJLyogQW1kYWhsIFVUUyBvbiBTeXN0ZW0vMzcwICovCi0jZGVmaW5lIEVNX01JUFNfUlMzX0xFCTEwCS8qIE1JUFMgUlMzMDAwIExpdHRsZS1lbmRpYW4gKi8KLQkJCS8qIDExLTE0IC0gUmVzZXJ2ZWQgKi8KLSNkZWZpbmUgRU1fUlM2MDAwCTExCS8qIElCTSBSUy82MDAwIFhYWCByZXNlcnZlZCAqLwotI2RlZmluZSBFTV9QQVJJU0MJMTUJLyogSGV3bGV0dC1QYWNrYXJkIFBBLVJJU0MgKi8KLSNkZWZpbmUgRU1fTkNVQkUJMTYJLyogTkN1YmUgWFhYIHJlc2VydmVkICovCi0jZGVmaW5lIEVNX1ZQUDUwMAkxNwkvKiBGdWppdHN1IFZQUDUwMCAqLwotI2RlZmluZSBFTV9TUEFSQzMyUExVUwkxOAkvKiBFbmhhbmNlZCBpbnN0cnVjdGlvbiBzZXQgU1BBUkMgKi8KLSNkZWZpbmUgRU1fOTYwCQkxOQkvKiBJbnRlbCA4MDk2MCAqLwotI2RlZmluZSBFTV9QUEMJCTIwCS8qIFBvd2VyUEMgKi8KLSNkZWZpbmUgRU1fUFBDNjQJMjEJLyogNjQtYml0IFBvd2VyUEMgKi8KLQkJCS8qIDIyLTM1IC0gUmVzZXJ2ZWQgKi8KLSNkZWZpbmUgRU1fUzM5MAkJMjIJLyogU3lzdGVtLzM5MCBYWFggcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgRU1fVjgwMAkJMzYJLyogTkVDIFY4MDAgKi8KLSNkZWZpbmUgRU1fRlIyMAkJMzcJLyogRnVqaXRzdSBGUjIwICovCi0jZGVmaW5lIEVNX1JIMzIJCTM4CS8qIFRSVyBSSC0zMiAqLwotI2RlZmluZSBFTV9SQ0UJCTM5CS8qIE1vdG9yb2xhIFJDRSAqLwotI2RlZmluZSBFTV9BUk0JCTQwCS8qIEFkdmFuY2VkIFJJU0MgTWFjaGluZXMgQVJNICovCi0jZGVmaW5lIEVNX0FMUEhBCTQxCS8qIERJR0lUQUwgQWxwaGEgKi8KLSNkZWZpbmUgRU1fU0gJCTQyCS8qIEhpdGFjaGkgU3VwZXItSCAqLwotI2RlZmluZSBFTV9TUEFSQ1Y5CTQzCS8qIFNQQVJDIFZlcnNpb24gOSAqLwotI2RlZmluZSBFTV9UUklDT1JFCTQ0CS8qIFNpZW1lbnMgVHJpY29yZSAqLwotI2RlZmluZSBFTV9BUkMJCTQ1CS8qIEFyZ29uYXV0IFJJU0MgQ29yZSAqLwotI2RlZmluZSBFTV9IOF8zMDAJNDYJLyogSGl0YWNoaSBIOC8zMDAgKi8KLSNkZWZpbmUgRU1fSDhfMzAwSAk0NwkvKiBIaXRhY2hpIEg4LzMwMEggKi8KLSNkZWZpbmUgRU1fSDhTCQk0OAkvKiBIaXRhY2hpIEg4UyAqLwotI2RlZmluZSBFTV9IOF81MDAJNDkJLyogSGl0YWNoaSBIOC81MDAgKi8KLSNkZWZpbmUgRU1fSUFfNjQJNTAJLyogSW50ZWwgTWVyY2VkIFByb2Nlc3NvciAqLwotI2RlZmluZSBFTV9NSVBTX1gJNTEJLyogU3RhbmZvcmQgTUlQUy1YICovCi0jZGVmaW5lIEVNX0NPTERGSVJFCTUyCS8qIE1vdG9yb2xhIENvbGRmaXJlICovCi0jZGVmaW5lIEVNXzY4SEMxMgk1MwkvKiBNb3Rvcm9sYSBNQzY4SEMxMiAqLwotI2RlZmluZSBFTV9NTUEJCTU0CS8qIEZ1aml0c3UgTU1BIE11bHRpbWVkaWEgQWNjZWxlcmF0b3IgKi8KLSNkZWZpbmUgRU1fUENQCQk1NQkvKiBTaWVtZW5zIFBDUCAqLwotI2RlZmluZSBFTV9OQ1BVCQk1NgkvKiBTb255IG5DUFUgZW1iZWRkZWQgUklTQyBwcm9jZXNzb3IgKi8KLSNkZWZpbmUgRU1fTkRSMQkJNTcJLyogRGVuc28gTkRSMSBtaWNyb3Byb2Nlc3NvciAqLwotI2RlZmluZSBFTV9TVEFSQ09SRQk1OAkvKiBNb3Rvcm9sYSBTdGFyKkNvcmUgcHJvY2Vzc29yICovCi0jZGVmaW5lIEVNX01FMTYJCTU5CS8qIFRveW90YSBNRTE2IHByb2Nlc3NvciAqLwotI2RlZmluZSBFTV9TVDEwMAk2MAkvKiBTVE1pY3JvZWxlY3Ryb25pY3MgU1QxMDAgcHJvY2Vzc29yICovCi0jZGVmaW5lIEVNX1RJTllKCTYxCS8qIEFkdmFuY2VkIExvZ2ljIENvcnAuIFRpbnlKIGVtYmVkZGVkIGZhbWlseSBwcm9jZXNzb3IgKi8KLSNkZWZpbmUgRU1fWDg2XzY0CTYyCS8qIEFNRCB4ODYtNjQgYXJjaGl0ZWN0dXJlICovCi0jZGVmaW5lIEVNX1BEU1AJCTYzCS8qIFNvbnkgRFNQIFByb2Nlc3NvciAqLwotI2RlZmluZSBFTV9QRFAxMAk2NAkvKiBEaWdpdGFsIEVxdWlwbWVudCBDb3JwLiBQRFAtMTAgKi8KLSNkZWZpbmUgRU1fUERQMTEJNjUJLyogRGlnaXRhbCBFcXVpcG1lbnQgQ29ycC4gUERQLTExICovCi0jZGVmaW5lIEVNX0ZYNjYJCTY2CS8qIFNpZW1lbnMgRlg2NiBtaWNyb2NvbnRyb2xsZXIgKi8KLSNkZWZpbmUgRU1fU1Q5UExVUwk2NwkvKiBTVE1pY3JvZWxlY3Ryb25pY3MgU1Q5KyA4LzE2IGJpdCBtaWNyb2NvbnRyb2xsZXIgKi8KLSNkZWZpbmUgRU1fU1Q3CQk2OAkvKiBTVE1pY3JvZWxlY3Ryb25pY3MgU1Q3IDgtYml0IG1pY3JvY29udHJvbGxlciAqLwotI2RlZmluZSBFTV82OEhDMTYJNjkJLyogTW90b3JvbGEgTUM2OEhDMTYgTWljcm9jb250cm9sbGVyICovCi0jZGVmaW5lIEVNXzY4SEMxMQk3MAkvKiBNb3Rvcm9sYSBNQzY4SEMxMSBNaWNyb2NvbnRyb2xsZXIgKi8KLSNkZWZpbmUgRU1fNjhIQzA4CTcxCS8qIE1vdG9yb2xhIE1DNjhIQzA4IE1pY3JvY29udHJvbGxlciAqLwotI2RlZmluZSBFTV82OEhDMDUJNzIJLyogTW90b3JvbGEgTUM2OEhDMDUgTWljcm9jb250cm9sbGVyICovCi0jZGVmaW5lIEVNX1NWWAkJNzMJLyogU2lsaWNvbiBHcmFwaGljcyBTVnggKi8KLSNkZWZpbmUgRU1fU1QxOQkJNzQJLyogU1RNaWNyb2VsZWN0cm9uaWNzIFNUMTkgOC1iaXQgQ1BVICovCi0jZGVmaW5lIEVNX1ZBWAkJNzUJLyogRGlnaXRhbCBWQVggKi8KLSNkZWZpbmUgRU1fQ1JJUwkJNzYJLyogQXhpcyBDb21tdW5pY2F0aW9ucyAzMi1iaXQgZW1iZWRkZWQgcHJvY2Vzc29yICovCi0jZGVmaW5lIEVNX0pBVkVMSU4JNzcJLyogSW5maW5lb24gVGVjaG5vbG9naWVzIDMyLWJpdCBlbWJlZGRlZCBDUFUgKi8KLSNkZWZpbmUgRU1fRklSRVBBVEgJNzgJLyogRWxlbWVudCAxNCA2NC1iaXQgRFNQIHByb2Nlc3NvciAqLwotI2RlZmluZSBFTV9aU1AJCTc5CS8qIExTSSBMb2dpYydzIDE2LWJpdCBEU1AgcHJvY2Vzc29yICovCi0jZGVmaW5lIEVNX01NSVgJCTgwCS8qIERvbmFsZCBLbnV0aCdzIGVkdWNhdGlvbmFsIDY0LWJpdCBwcm9jZXNzb3IgKi8KLSNkZWZpbmUgRU1fSFVBTlkJODEJLyogSGFydmFyZCdzIG1hY2hpbmUtaW5kZXBlbmRlbnQgZm9ybWF0ICovCi0jZGVmaW5lIEVNX1BSSVNNCTgyCS8qIFNpVGVyYSBQcmlzbSAqLwotI2RlZmluZSBFTV9BVlIJCTgzCS8qIEF0bWVsIEFWUiA4LWJpdCBtaWNyb2NvbnRyb2xsZXIgKi8KLSNkZWZpbmUgRU1fRlIzMAkJODQJLyogRnVqaXRzdSBGUjMwICovCi0jZGVmaW5lIEVNX0QxMFYJCTg1CS8qIE1pdHN1YmlzaGkgRDEwViAqLwotI2RlZmluZSBFTV9EMzBWCQk4NgkvKiBNaXRzdWJpc2hpIEQzMFYgKi8KLSNkZWZpbmUgRU1fVjg1MAkJODcJLyogTkVDIHY4NTAgKi8KLSNkZWZpbmUgRU1fTTMyUgkJODgJLyogTWl0c3ViaXNoaSBNMzJSICovCi0jZGVmaW5lIEVNX01OMTAzMDAJODkJLyogTWF0c3VzaGl0YSBNTjEwMzAwICovCi0jZGVmaW5lIEVNX01OMTAyMDAJOTAJLyogTWF0c3VzaGl0YSBNTjEwMjAwICovCi0jZGVmaW5lIEVNX1BKCQk5MQkvKiBwaWNvSmF2YSAqLwotI2RlZmluZSBFTV9PUEVOUklTQwk5MgkvKiBPcGVuUklTQyAzMi1iaXQgZW1iZWRkZWQgcHJvY2Vzc29yICovCi0jZGVmaW5lIEVNX0FSQ19BNQk5MwkvKiBBUkMgQ29yZXMgVGFuZ2VudC1BNSAqLwotI2RlZmluZSBFTV9YVEVOU0EJOTQJLyogVGVuc2lsaWNhIFh0ZW5zYSBBcmNoaXRlY3R1cmUgKi8KLSNkZWZpbmUgRU1fVklERU9DT1JFCTk1CS8qIEFscGhhbW9zYWljIFZpZGVvQ29yZSBwcm9jZXNzb3IgKi8KLSNkZWZpbmUgRU1fVE1NX0dQUAk5NgkvKiBUaG9tcHNvbiBNdWx0aW1lZGlhIEdlbmVyYWwgUHVycG9zZSBQcm9jZXNzb3IgKi8KLSNkZWZpbmUgRU1fTlMzMksJOTcJLyogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciAzMjAwMCBzZXJpZXMgKi8KLSNkZWZpbmUgRU1fVFBDCQk5OAkvKiBUZW5vciBOZXR3b3JrIFRQQyBwcm9jZXNzb3IgKi8KLSNkZWZpbmUgRU1fU05QMUsJOTkJLyogVHJlYmlhIFNOUCAxMDAwIHByb2Nlc3NvciAqLwotI2RlZmluZSBFTV9TVDIwMAkxMDAJLyogU1RNaWNyb2VsZWN0cm9uaWNzIFNUMjAwIG1pY3JvY29udHJvbGxlciAqLwotI2RlZmluZSBFTV9JUDJLCQkxMDEJLyogVWJpY29tIElQMnh4eCBtaWNyb2NvbnRyb2xsZXIgZmFtaWx5ICovCi0jZGVmaW5lIEVNX01BWAkJMTAyCS8qIE1BWCBwcm9jZXNzb3IgKi8KLSNkZWZpbmUgRU1fQ1IJCTEwMwkvKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIENvbXBhY3RSSVNDIG1pY29ycHJvY2Vzc29yICovCi0jZGVmaW5lIEVNX0YyTUMxNgkxMDQJLyogRnVqaXRzdSBGMk1DMTYgKi8KLSNkZWZpbmUgRU1fTVNQNDMwCTEwNQkvKiBUZXhhcyBJbnN0cnVtZW50cyBNU1A0MzAgKi8KLSNkZWZpbmUgRU1fQkxBQ0tGSU4JMTA2CS8qIEFuYWxvZyBEZXZpY2VzIEJsYWNrZmluIERTUCAqLwotI2RlZmluZSBFTV9TRV9DMzMJMTA3CS8qIFNlaWtvIEVwc29uIFMxQzMzIGZhbWlseSAqLwotI2RlZmluZSBFTV9TRVAJCTEwOAkvKiBTaGFycCBlbWJlZGRlZCBtaWNyb3Byb2Nlc3NvciAqLwotI2RlZmluZSBFTV9BUkNBCQkxMDkJLyogQXJjYSBSSVNDIG1pY3JvcHJvY2Vzc29yICovCi0jZGVmaW5lIEVNX1VOSUNPUkUJMTEwCS8qIFVOSUNPUkUgZnJvbSBQS1UtVW5pdHkgTHRkLiBhbmQgTVBSQyBQZWtpbmcgVW5pdmVyc2l0eSAqLwotI2RlZmluZSBFTV9BQVJDSDY0CTE4MwkvKiBBQXJjaDY0IDY0LWJpdCBBUk0gbWljcm9wcm9jZXNzb3IgKi8KLQotLyogVW5vZmZpY2lhbCBtYWNoaW5lIHR5cGVzIGZvbGxvdyAqLwotI2RlZmluZSBFTV9BVlIzMgk2MzE3CS8qIHVzZWQgYnkgTmV0QlNEL2F2cjMyICovCi0jZGVmaW5lIEVNX0FMUEhBX0VYUAkzNjkwMgkvKiB1c2VkIGJ5IE5ldEJTRC9hbHBoYTsgb2Jzb2xldGUgKi8KLSNkZWZpbmUgRU1fTlVNCQkzNjkwMwotCi0vKgotICogUHJvZ3JhbSBIZWFkZXIKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjMyX1dvcmQJcF90eXBlOwkJLyogZW50cnkgdHlwZSAqLwotCUVsZjMyX09mZglwX29mZnNldDsJLyogb2Zmc2V0ICovCi0JRWxmMzJfQWRkcglwX3ZhZGRyOwkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KLQlFbGYzMl9BZGRyCXBfcGFkZHI7CS8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KLQlFbGYzMl9Xb3JkCXBfZmlsZXN6OwkvKiBmaWxlIHNpemUgKi8KLQlFbGYzMl9Xb3JkCXBfbWVtc3o7CS8qIG1lbW9yeSBzaXplICovCi0JRWxmMzJfV29yZAlwX2ZsYWdzOwkvKiBmbGFncyAqLwotCUVsZjMyX1dvcmQJcF9hbGlnbjsJLyogbWVtb3J5ICYgZmlsZSBhbGlnbm1lbnQgKi8KLX0gRWxmMzJfUGhkcjsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjY0X1dvcmQJcF90eXBlOwkJLyogZW50cnkgdHlwZSAqLwotCUVsZjY0X1dvcmQJcF9mbGFnczsJLyogZmxhZ3MgKi8KLQlFbGY2NF9PZmYJcF9vZmZzZXQ7CS8qIG9mZnNldCAqLwotCUVsZjY0X0FkZHIJcF92YWRkcjsJLyogdmlydHVhbCBhZGRyZXNzICovCi0JRWxmNjRfQWRkcglwX3BhZGRyOwkvKiBwaHlzaWNhbCBhZGRyZXNzICovCi0JRWxmNjRfWHdvcmQJcF9maWxlc3o7CS8qIGZpbGUgc2l6ZSAqLwotCUVsZjY0X1h3b3JkCXBfbWVtc3o7CS8qIG1lbW9yeSBzaXplICovCi0JRWxmNjRfWHdvcmQJcF9hbGlnbjsJLyogbWVtb3J5ICYgZmlsZSBhbGlnbm1lbnQgKi8KLX0gRWxmNjRfUGhkcjsKLQotLyogcF90eXBlICovCi0jZGVmaW5lIFBUX05VTEwJCTAJCS8qIFByb2dyYW0gaGVhZGVyIHRhYmxlIGVudHJ5IHVudXNlZCAqLwotI2RlZmluZSBQVF9MT0FECQkxCQkvKiBMb2FkYWJsZSBwcm9ncmFtIHNlZ21lbnQgKi8KLSNkZWZpbmUgUFRfRFlOQU1JQwkyCQkvKiBEeW5hbWljIGxpbmtpbmcgaW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgUFRfSU5URVJQCTMJCS8qIFByb2dyYW0gaW50ZXJwcmV0ZXIgKi8KLSNkZWZpbmUgUFRfTk9URQkJNAkJLyogQXV4aWxpYXJ5IGluZm9ybWF0aW9uICovCi0jZGVmaW5lIFBUX1NITElCCTUJCS8qIFJlc2VydmVkLCB1bnNwZWNpZmllZCBzZW1hbnRpY3MgKi8KLSNkZWZpbmUgUFRfUEhEUgkJNgkJLyogRW50cnkgZm9yIGhlYWRlciB0YWJsZSBpdHNlbGYgKi8KLSNkZWZpbmUgUFRfVExTCQk3CQkvKiBUTFMgaW5pdGlhbGlzYXRpb24gaW1hZ2UgKi8KLSNkZWZpbmUgUFRfTlVNCQk4Ci0KLSNkZWZpbmUgUFRfTE9PUwkJMHg2MDAwMDAwMAkvKiBPUy1zcGVjaWZpYyByYW5nZSAqLwotCi0vKiBHTlUtc3BlY2lmaWMgKi8KLSNkZWZpbmUgUFRfR05VX0VIX0ZSQU1FIDB4NjQ3NGU1NTAJLyogRUggZnJhbWUgc2VnbWVudCAqLwotI2RlZmluZSBQVF9HTlVfU1RBQ0sJMHg2NDc0ZTU1MQkvKiBJbmRpY2F0ZSBleGVjdXRhYmxlIHN0YWNrICovCi0jZGVmaW5lIFBUX0dOVV9SRUxSTwkweDY0NzRlNTUyCS8qIE1ha2UgcmVhZC1vbmx5IGFmdGVyIHJlbG9jYXRpb24gKi8KLQotI2RlZmluZSBQVF9ISU9TCQkweDZmZmZmZmZmCi0jZGVmaW5lIFBUX0xPUFJPQwkweDcwMDAwMDAwCS8qIFByb2Nlc3Nvci1zcGVjaWZpYyByYW5nZSAqLwotI2RlZmluZSBQVF9ISVBST0MJMHg3ZmZmZmZmZgotCi0jZGVmaW5lIFBUX01JUFNfUkVHSU5GTyAweDcwMDAwMDAwCi0KLS8qIHBfZmxhZ3MgKi8KLSNkZWZpbmUgUEZfUgkJMHg0CQkvKiBTZWdtZW50IGlzIHJlYWRhYmxlICovCi0jZGVmaW5lIFBGX1cJCTB4MgkJLyogU2VnbWVudCBpcyB3cml0YWJsZSAqLwotI2RlZmluZSBQRl9YCQkweDEJCS8qIFNlZ21lbnQgaXMgZXhlY3V0YWJsZSAqLwotCi0jZGVmaW5lIFBGX01BU0tPUwkweDBmZjAwMDAwCS8qIE9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMgdmFsdWVzICovCi0jZGVmaW5lIFBGX01BU0tQUk9DCTB4ZjAwMDAwMDAJLyogUHJvY2Vzc29yLXNwZWNpZmljIHZhbHVlcyAqLwotCi0vKiBFeHRlbmRlZCBwcm9ncmFtIGhlYWRlciBpbmRleC4gKi8KLSNkZWZpbmUgUE5fWE5VTQkJMHhmZmZmCi0KLS8qCi0gKiBTZWN0aW9uIEhlYWRlcnMKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjMyX1dvcmQJc2hfbmFtZTsJLyogc2VjdGlvbiBuYW1lICguc2hzdHJ0YWIgaW5kZXgpICovCi0JRWxmMzJfV29yZAlzaF90eXBlOwkvKiBzZWN0aW9uIHR5cGUgKi8KLQlFbGYzMl9Xb3JkCXNoX2ZsYWdzOwkvKiBzZWN0aW9uIGZsYWdzICovCi0JRWxmMzJfQWRkcglzaF9hZGRyOwkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KLQlFbGYzMl9PZmYJc2hfb2Zmc2V0OwkvKiBmaWxlIG9mZnNldCAqLwotCUVsZjMyX1dvcmQJc2hfc2l6ZTsJLyogc2VjdGlvbiBzaXplICovCi0JRWxmMzJfV29yZAlzaF9saW5rOwkvKiBsaW5rIHRvIGFub3RoZXIgKi8KLQlFbGYzMl9Xb3JkCXNoX2luZm87CS8qIG1pc2MgaW5mbyAqLwotCUVsZjMyX1dvcmQJc2hfYWRkcmFsaWduOwkvKiBtZW1vcnkgYWxpZ25tZW50ICovCi0JRWxmMzJfV29yZAlzaF9lbnRzaXplOwkvKiB0YWJsZSBlbnRyeSBzaXplICovCi19IEVsZjMyX1NoZHI7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGY2NF9Xb3JkCXNoX25hbWU7CS8qIHNlY3Rpb24gbmFtZSAoLnNoc3RydGFiIGluZGV4KSAqLwotCUVsZjY0X1dvcmQJc2hfdHlwZTsJLyogc2VjdGlvbiB0eXBlICovCi0JRWxmNjRfWHdvcmQJc2hfZmxhZ3M7CS8qIHNlY3Rpb24gZmxhZ3MgKi8KLQlFbGY2NF9BZGRyCXNoX2FkZHI7CS8qIHZpcnR1YWwgYWRkcmVzcyAqLwotCUVsZjY0X09mZglzaF9vZmZzZXQ7CS8qIGZpbGUgb2Zmc2V0ICovCi0JRWxmNjRfWHdvcmQJc2hfc2l6ZTsJLyogc2VjdGlvbiBzaXplICovCi0JRWxmNjRfV29yZAlzaF9saW5rOwkvKiBsaW5rIHRvIGFub3RoZXIgKi8KLQlFbGY2NF9Xb3JkCXNoX2luZm87CS8qIG1pc2MgaW5mbyAqLwotCUVsZjY0X1h3b3JkCXNoX2FkZHJhbGlnbjsJLyogbWVtb3J5IGFsaWdubWVudCAqLwotCUVsZjY0X1h3b3JkCXNoX2VudHNpemU7CS8qIHRhYmxlIGVudHJ5IHNpemUgKi8KLX0gRWxmNjRfU2hkcjsKLQotLyogc2hfdHlwZSAqLwotI2RlZmluZSBTSFRfTlVMTAkgICAgICAwCQkvKiBTZWN0aW9uIGhlYWRlciB0YWJsZSBlbnRyeSB1bnVzZWQgKi8KLSNkZWZpbmUgU0hUX1BST0dCSVRTCSAgICAgIDEJCS8qIFByb2dyYW0gaW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgU0hUX1NZTVRBQgkgICAgICAyCQkvKiBTeW1ib2wgdGFibGUgKi8KLSNkZWZpbmUgU0hUX1NUUlRBQgkgICAgICAzCQkvKiBTdHJpbmcgdGFibGUgKi8KLSNkZWZpbmUgU0hUX1JFTEEJICAgICAgNAkJLyogUmVsb2NhdGlvbiBpbmZvcm1hdGlvbiB3LyBhZGRlbmQgKi8KLSNkZWZpbmUgU0hUX0hBU0gJICAgICAgNQkJLyogU3ltYm9sIGhhc2ggdGFibGUgKi8KLSNkZWZpbmUgU0hUX0RZTkFNSUMJICAgICAgNgkJLyogRHluYW1pYyBsaW5raW5nIGluZm9ybWF0aW9uICovCi0jZGVmaW5lIFNIVF9OT1RFCSAgICAgIDcJCS8qIEF1eGlsaWFyeSBpbmZvcm1hdGlvbiAqLwotI2RlZmluZSBTSFRfTk9CSVRTCSAgICAgIDgJCS8qIE5vIHNwYWNlIGFsbG9jYXRlZCBpbiBmaWxlIGltYWdlICovCi0jZGVmaW5lIFNIVF9SRUwJCSAgICAgIDkJCS8qIFJlbG9jYXRpb24gaW5mb3JtYXRpb24gdy9vIGFkZGVuZCAqLwotI2RlZmluZSBTSFRfU0hMSUIJICAgICAxMAkJLyogUmVzZXJ2ZWQsIHVuc3BlY2lmaWVkIHNlbWFudGljcyAqLwotI2RlZmluZSBTSFRfRFlOU1lNCSAgICAgMTEJCS8qIFN5bWJvbCB0YWJsZSBmb3IgZHluYW1pYyBsaW5rZXIgKi8KLSNkZWZpbmUgU0hUX0lOSVRfQVJSQVkJICAgICAxNAkJLyogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gcG9pbnRlcnMgKi8KLSNkZWZpbmUgU0hUX0ZJTklfQVJSQVkJICAgICAxNQkJLyogVGVybWluYXRpb24gZnVuY3Rpb24gcG9pbnRlcnMgKi8KLSNkZWZpbmUgU0hUX1BSRUlOSVRfQVJSQVkgICAgMTYJCS8qIFByZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbiBwdHJzICovCi0jZGVmaW5lIFNIVF9HUk9VUAkgICAgIDE3CQkvKiBTZWN0aW9uIGdyb3VwICovCi0jZGVmaW5lIFNIVF9TWU1UQUJfU0hORFggICAgIDE4CQkvKiBTZWN0aW9uIGluZGV4ZXMgKHNlZSBTSE5fWElOREVYKSAqLwotI2RlZmluZSBTSFRfTlVNCQkgICAgIDE5Ci0KLSNkZWZpbmUgU0hUX0xPT1MJICAgICAweDYwMDAwMDAwIC8qIE9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMgcmFuZ2UgKi8KLSNkZWZpbmUgU0hUX0dOVV9IQVNICSAgICAgMHg2ZmZmZmZmNiAvKiBHTlUgc3R5bGUgc3ltYm9sIGhhc2ggdGFibGUgKi8KLSNkZWZpbmUgU0hUX1NVTldfbW92ZQkgICAgIDB4NmZmZmZmZmEKLSNkZWZpbmUgU0hUX1NVTldfc3ltaW5mbyAgICAgMHg2ZmZmZmZmYwotI2RlZmluZSBTSFRfU1VOV192ZXJkZWYJICAgICAweDZmZmZmZmZkIC8qIFZlcnNpb25zIGRlZmluZWQgYnkgZmlsZSAqLwotI2RlZmluZSBTSFRfR05VX3ZlcmRlZgkgICAgIFNIVF9TVU5XX3ZlcmRlZgotI2RlZmluZSBTSFRfU1VOV192ZXJuZWVkICAgICAweDZmZmZmZmZlIC8qIFZlcnNpb25zIG5lZWRlZCBieSBmaWxlICovCi0jZGVmaW5lIFNIVF9HTlVfdmVybmVlZAkgICAgIFNIVF9TVU5XX3Zlcm5lZWQKLSNkZWZpbmUgU0hUX1NVTldfdmVyc3ltCSAgICAgMHg2ZmZmZmZmZiAvKiBTeW1ib2wgdmVyc2lvbnMgKi8KLSNkZWZpbmUgU0hUX0dOVV92ZXJzeW0JICAgICBTSFRfU1VOV192ZXJzeW0KLSNkZWZpbmUgU0hUX0hJT1MJICAgICAweDZmZmZmZmZmCi0jZGVmaW5lIFNIVF9MT1BST0MJICAgICAweDcwMDAwMDAwIC8qIFByb2Nlc3Nvci1zcGVjaWZpYyByYW5nZSAqLwotI2RlZmluZSBTSFRfQU1ENjRfVU5XSU5EICAgICAweDcwMDAwMDAxIC8qIHVud2luZCBpbmZvcm1hdGlvbiAqLwotI2RlZmluZSBTSFRfQVJNX0VYSURYCSAgICAgMHg3MDAwMDAwMQkvKiBleGNlcHRpb24gaW5kZXggdGFibGUgKi8KLSNkZWZpbmUgU0hUX0FSTV9QUkVFTVBUTUFQICAgMHg3MDAwMDAwMiAvKiBCUEFCSSBETEwgZHluYW1pYyBsaW5raW5nCi0JCQkJCSAqIHByZS1lbXB0aW9uIG1hcCAqLwotI2RlZmluZSBTSFRfQVJNX0FUVFJJQlVURVMgICAweDcwMDAwMDAzIC8qIE9iamVjdCBmaWxlIGNvbXBhdGliaWxpdHkKLQkJCQkJICogYXR0cmlidXRlcyAqLwotI2RlZmluZSBTSFRfQVJNX0RFQlVHT1ZFUkxBWSAweDcwMDAwMDA0IC8qIFNlZSBEQkdPVkwgZm9yIGRldGFpbHMgKi8KLSNkZWZpbmUgU0hUX0FSTV9PVkVSTEFZU0VDVElPTiAweDcwMDAwMDA1Ci0jZGVmaW5lIFNIVF9ISVBST0MJICAgICAweDdmZmZmZmZmCi0jZGVmaW5lIFNIVF9MT1VTRVIJICAgICAweDgwMDAwMDAwIC8qIEFwcGxpY2F0aW9uLXNwZWNpZmljIHJhbmdlICovCi0jZGVmaW5lIFNIVF9ISVVTRVIJICAgICAweGZmZmZmZmZmCi0KLS8qIHNoX2ZsYWdzICovCi0jZGVmaW5lIFNIRl9XUklURQkgICAgIDB4MDAwMDAwMDEgLyogQ29udGFpbnMgd3JpdGFibGUgZGF0YSAqLwotI2RlZmluZSBTSEZfQUxMT0MJICAgICAweDAwMDAwMDAyIC8qIE9jY3VwaWVzIG1lbW9yeSAqLwotI2RlZmluZSBTSEZfRVhFQ0lOU1RSCSAgICAgMHgwMDAwMDAwNCAvKiBDb250YWlucyBleGVjdXRhYmxlIGluc25zICovCi0jZGVmaW5lIFNIRl9NRVJHRQkgICAgIDB4MDAwMDAwMTAgLyogTWlnaHQgYmUgbWVyZ2VkICovCi0jZGVmaW5lIFNIRl9TVFJJTkdTCSAgICAgMHgwMDAwMDAyMCAvKiBDb250YWlucyBudWwgdGVybWluYXRlZCBzdHJpbmdzICovCi0jZGVmaW5lIFNIRl9JTkZPX0xJTksJICAgICAweDAwMDAwMDQwIC8qICJzaF9pbmZvIiBjb250YWlucyBTSFQgaW5kZXggKi8KLSNkZWZpbmUgU0hGX0xJTktfT1JERVIJICAgICAweDAwMDAwMDgwIC8qIFByZXNlcnZlIG9yZGVyIGFmdGVyIGNvbWJpbmluZyAqLwotI2RlZmluZSBTSEZfT1NfTk9OQ09ORk9STUlORyAweDAwMDAwMTAwIC8qIE9TIHNwZWNpZmljIGhhbmRsaW5nIHJlcXVpcmVkICovCi0jZGVmaW5lIFNIRl9HUk9VUAkgICAgIDB4MDAwMDAyMDAgLyogSXMgbWVtYmVyIG9mIGEgZ3JvdXAgKi8KLSNkZWZpbmUgU0hGX1RMUwkJICAgICAweDAwMDAwNDAwIC8qIEhvbGRzIHRocmVhZC1sb2NhbCBkYXRhICovCi0jZGVmaW5lIFNIRl9NQVNLT1MJICAgICAweDBmZjAwMDAwIC8qIE9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMgdmFsdWVzICovCi0jZGVmaW5lIFNIRl9NQVNLUFJPQwkgICAgIDB4ZjAwMDAwMDAgLyogUHJvY2Vzc29yLXNwZWNpZmljIHZhbHVlcyAqLwotI2RlZmluZSBTSEZfT1JERVJFRAkgICAgIDB4NDAwMDAwMDAgLyogT3JkZXJpbmcgcmVxdWlyZW1lbnQgKFNvbGFyaXMpICovCi0jZGVmaW5lIFNIRl9FWENMVURFCSAgICAgMHg4MDAwMDAwMCAvKiBFeGNsdWRlZCB1bmxlc3MgdW5sZXMgcmVmL2FsbG9jCi0JCQkJCSAgIChTb2xhcmlzKS4qLwotLyoKLSAqIFN5bWJvbCBUYWJsZQotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JRWxmMzJfV29yZAlzdF9uYW1lOwkvKiBTeW1ib2wgbmFtZSAoLnN0cnRhYiBpbmRleCkgKi8KLQlFbGYzMl9Xb3JkCXN0X3ZhbHVlOwkvKiB2YWx1ZSBvZiBzeW1ib2wgKi8KLQlFbGYzMl9Xb3JkCXN0X3NpemU7CS8qIHNpemUgb2Ygc3ltYm9sICovCi0JRWxmX0J5dGUJc3RfaW5mbzsJLyogdHlwZSAvIGJpbmRpbmcgYXR0cnMgKi8KLQlFbGZfQnl0ZQlzdF9vdGhlcjsJLyogdW51c2VkICovCi0JRWxmMzJfSGFsZglzdF9zaG5keDsJLyogc2VjdGlvbiBpbmRleCBvZiBzeW1ib2wgKi8KLX0gRWxmMzJfU3ltOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JRWxmNjRfV29yZAlzdF9uYW1lOwkvKiBTeW1ib2wgbmFtZSAoLnN0cnRhYiBpbmRleCkgKi8KLQlFbGZfQnl0ZQlzdF9pbmZvOwkvKiB0eXBlIC8gYmluZGluZyBhdHRycyAqLwotCUVsZl9CeXRlCXN0X290aGVyOwkvKiB1bnVzZWQgKi8KLQlFbGY2NF9IYWxmCXN0X3NobmR4OwkvKiBzZWN0aW9uIGluZGV4IG9mIHN5bWJvbCAqLwotCUVsZjY0X0FkZHIJc3RfdmFsdWU7CS8qIHZhbHVlIG9mIHN5bWJvbCAqLwotCUVsZjY0X1h3b3JkCXN0X3NpemU7CS8qIHNpemUgb2Ygc3ltYm9sICovCi19IEVsZjY0X1N5bTsKLQotLyogU3ltYm9sIFRhYmxlIGluZGV4IG9mIHRoZSB1bmRlZmluZWQgc3ltYm9sICovCi0jZGVmaW5lIEVMRl9TWU1fVU5ERUZJTkVECTAKLQotI2RlZmluZSBTVE5fVU5ERUYJCTAJLyogdW5kZWZpbmVkIGluZGV4ICovCi0KLS8qIHN0X2luZm86IFN5bWJvbCBCaW5kaW5ncyAqLwotI2RlZmluZSBTVEJfTE9DQUwJCTAJLyogbG9jYWwgc3ltYm9sICovCi0jZGVmaW5lIFNUQl9HTE9CQUwJCTEJLyogZ2xvYmFsIHN5bWJvbCAqLwotI2RlZmluZSBTVEJfV0VBSwkJMgkvKiB3ZWFrbHkgZGVmaW5lZCBnbG9iYWwgc3ltYm9sICovCi0jZGVmaW5lIFNUQl9OVU0JCQkzCi0KLSNkZWZpbmUgU1RCX0xPT1MJCTEwCS8qIE9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMgcmFuZ2UgKi8KLSNkZWZpbmUgU1RCX0hJT1MJCTEyCi0jZGVmaW5lIFNUQl9MT1BST0MJCTEzCS8qIFByb2Nlc3Nvci1zcGVjaWZpYyByYW5nZSAqLwotI2RlZmluZSBTVEJfSElQUk9DCQkxNQotCi0vKiBzdF9pbmZvOiBTeW1ib2wgVHlwZXMgKi8KLSNkZWZpbmUgU1RUX05PVFlQRQkJMAkvKiBUeXBlIG5vdCBzcGVjaWZpZWQgKi8KLSNkZWZpbmUgU1RUX09CSkVDVAkJMQkvKiBBc3NvY2lhdGVkIHdpdGggYSBkYXRhIG9iamVjdCAqLwotI2RlZmluZSBTVFRfRlVOQwkJMgkvKiBBc3NvY2lhdGVkIHdpdGggYSBmdW5jdGlvbiAqLwotI2RlZmluZSBTVFRfU0VDVElPTgkJMwkvKiBBc3NvY2lhdGVkIHdpdGggYSBzZWN0aW9uICovCi0jZGVmaW5lIFNUVF9GSUxFCQk0CS8qIEFzc29jaWF0ZWQgd2l0aCBhIGZpbGUgbmFtZSAqLwotI2RlZmluZSBTVFRfQ09NTU9OCQk1CS8qIFVuaW5pdGlhbGlzZWQgY29tbW9uIGJsb2NrICovCi0jZGVmaW5lIFNUVF9UTFMJCQk2CS8qIFRocmVhZCBsb2NhbCBkYXRhIG9iamVjdCAqLwotI2RlZmluZSBTVFRfTlVNCQkJNwotCi0jZGVmaW5lIFNUVF9MT09TCQkxMAkvKiBPcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljIHJhbmdlICovCi0jZGVmaW5lIFNUVF9ISU9TCQkxMgotI2RlZmluZSBTVFRfTE9QUk9DCQkxMwkvKiBQcm9jZXNzb3Itc3BlY2lmaWMgcmFuZ2UgKi8KLSNkZWZpbmUgU1RUX0hJUFJPQwkJMTUKLQotLyogc3Rfb3RoZXI6IFZpc2liaWxpdHkgVHlwZXMgKi8KLSNkZWZpbmUgU1RWX0RFRkFVTFQJCTAJLyogdXNlIGJpbmRpbmcgdHlwZSAqLwotI2RlZmluZSBTVFZfSU5URVJOQUwJCTEJLyogbm90IHJlZmVyZW5jZWQgZnJvbSBvdXRzaWRlICovCi0jZGVmaW5lIFNUVl9ISURERU4JCTIJLyogbm90IHZpc2libGUsIG1heSBiZSB1c2VkIHZpYSBwdHIgKi8KLSNkZWZpbmUgU1RWX1BST1RFQ1RFRAkJMwkvKiB2aXNpYmxlLCBub3QgcHJlZW1wdGlibGUgKi8KLSNkZWZpbmUgU1RWX0VYUE9SVEVECQk0Ci0jZGVmaW5lIFNUVl9TSU5HTEVUT04JCTUKLSNkZWZpbmUgU1RWX0VMSU1JTkFURQkJNgotCi0vKiBzdF9pbmZvL3N0X290aGVyIHV0aWxpdHkgbWFjcm9zICovCi0jZGVmaW5lIEVMRl9TVF9CSU5EKGluZm8pCQkoKHVpbnQzMl90KShpbmZvKSA+PiA0KQotI2RlZmluZSBFTEZfU1RfVFlQRShpbmZvKQkJKCh1aW50MzJfdCkoaW5mbykgJiAweGYpCi0jZGVmaW5lIEVMRl9TVF9JTkZPKGJpbmQsdHlwZSkJCSgoRWxmX0J5dGUpKCgoYmluZCkgPDwgNCkgfCBcCi0JCQkJCSAoKHR5cGUpICYgMHhmKSkpCi0jZGVmaW5lIEVMRl9TVF9WSVNJQklMSVRZKG90aGVyKQkoKHVpbnQzMl90KShvdGhlcikgJiAzKQotCi0vKgotICogU3BlY2lhbCBzZWN0aW9uIGluZGV4ZXMKLSAqLwotI2RlZmluZSBTSE5fVU5ERUYJMAkJLyogVW5kZWZpbmVkIHNlY3Rpb24gKi8KLQotI2RlZmluZSBTSE5fTE9SRVNFUlZFCTB4ZmYwMAkJLyogUmVzZXJ2ZWQgcmFuZ2UgKi8KLSNkZWZpbmUgU0hOX0FCUwkJMHhmZmYxCQkvKiAgQWJzb2x1dGUgc3ltYm9scyAqLwotI2RlZmluZSBTSE5fQ09NTU9OCTB4ZmZmMgkJLyogIENvbW1vbiBzeW1ib2xzICovCi0jZGVmaW5lIFNITl9YSU5ERVgJMHhmZmZmCQkvKiBFc2NhcGUgLS0gaW5kZXggc3RvcmVkIGVsc2V3aGVyZSAqLwotI2RlZmluZSBTSE5fSElSRVNFUlZFCTB4ZmZmZgotCi0jZGVmaW5lIFNITl9MT1BST0MJMHhmZjAwCQkvKiBQcm9jZXNzb3Itc3BlY2lmaWMgcmFuZ2UgKi8KLSNkZWZpbmUgU0hOX0hJUFJPQwkweGZmMWYKLSNkZWZpbmUgU0hOX0xPT1MJMHhmZjIwCQkvKiBPcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljIHJhbmdlICovCi0jZGVmaW5lIFNITl9ISU9TCTB4ZmYzZgotCi0jZGVmaW5lIFNITl9NSVBTX0FDT01NT04gMHhmZjAwCi0jZGVmaW5lIFNITl9NSVBTX1RFWFQJMHhmZjAxCi0jZGVmaW5lIFNITl9NSVBTX0RBVEEJMHhmZjAyCi0jZGVmaW5lIFNITl9NSVBTX1NDT01NT04gMHhmZjAzCi0KLS8qCi0gKiBSZWxvY2F0aW9uIEVudHJpZXMKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjMyX1dvcmQJcl9vZmZzZXQ7CS8qIHdoZXJlIHRvIGRvIGl0ICovCi0JRWxmMzJfV29yZAlyX2luZm87CQkvKiBpbmRleCAmIHR5cGUgb2YgcmVsb2NhdGlvbiAqLwotfSBFbGYzMl9SZWw7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGYzMl9Xb3JkCXJfb2Zmc2V0OwkvKiB3aGVyZSB0byBkbyBpdCAqLwotCUVsZjMyX1dvcmQJcl9pbmZvOwkJLyogaW5kZXggJiB0eXBlIG9mIHJlbG9jYXRpb24gKi8KLQlFbGYzMl9Td29yZAlyX2FkZGVuZDsJLyogYWRqdXN0bWVudCB2YWx1ZSAqLwotfSBFbGYzMl9SZWxhOwotCi0vKiByX2luZm8gdXRpbGl0eSBtYWNyb3MgKi8KLSNkZWZpbmUgRUxGMzJfUl9TWU0oaW5mbykJKChpbmZvKSA+PiA4KQotI2RlZmluZSBFTEYzMl9SX1RZUEUoaW5mbykJKChpbmZvKSAmIDB4ZmYpCi0jZGVmaW5lIEVMRjMyX1JfSU5GTyhzeW0sIHR5cGUpICgoKHN5bSkgPDwgOCkgKyAodW5zaWduZWQgY2hhcikodHlwZSkpCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGY2NF9BZGRyCXJfb2Zmc2V0OwkvKiB3aGVyZSB0byBkbyBpdCAqLwotCUVsZjY0X1h3b3JkCXJfaW5mbzsJCS8qIGluZGV4ICYgdHlwZSBvZiByZWxvY2F0aW9uICovCi19IEVsZjY0X1JlbDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjY0X0FkZHIJcl9vZmZzZXQ7CS8qIHdoZXJlIHRvIGRvIGl0ICovCi0JRWxmNjRfWHdvcmQJcl9pbmZvOwkJLyogaW5kZXggJiB0eXBlIG9mIHJlbG9jYXRpb24gKi8KLQlFbGY2NF9TeHdvcmQJcl9hZGRlbmQ7CS8qIGFkanVzdG1lbnQgdmFsdWUgKi8KLX0gRWxmNjRfUmVsYTsKLQotLyogcl9pbmZvIHV0aWxpdHkgbWFjcm9zICovCi0jZGVmaW5lIEVMRjY0X1JfU1lNKGluZm8pCSgoaW5mbykgPj4gMzIpCi0jZGVmaW5lIEVMRjY0X1JfVFlQRShpbmZvKQkoKGluZm8pICYgMHhmZmZmZmZmZikKLSNkZWZpbmUgRUxGNjRfUl9JTkZPKHN5bSx0eXBlKQkoKChzeW0pIDw8IDMyKSArICh0eXBlKSkKLQotLyoKLSAqIE1vdmUgZW50cmllcwotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JRWxmMzJfTHdvcmQJbV92YWx1ZTsJLyogc3ltYm9sIHZhbHVlICovCi0JRWxmMzJfV29yZAltX2luZm87CQkvKiBzaXplICsgaW5kZXggKi8KLQlFbGYzMl9Xb3JkCW1fcG9mZnNldDsJLyogc3ltYm9sIG9mZnNldCAqLwotCUVsZjMyX0hhbGYJbV9yZXBlYXQ7CS8qIHJlcGVhdCBjb3VudCAqLwotCUVsZjMyX0hhbGYJbV9zdHJpZGU7CS8qIHN0cmlkZSBpbmZvICovCi19IEVsZjMyX01vdmU7Ci0KLSNkZWZpbmUgRUxGMzJfTV9TWU0oaW5mbykJKChpbmZvKSA+PiA4KQotI2RlZmluZSBFTEYzMl9NX1NJWkUoaW5mbykJKChpbmZvKSAmIDB4ZmYpCi0jZGVmaW5lIEVMRjMyX01fSU5GTyhzeW0sIHNpemUpICgoKHN5bSkgPDwgOCkgKyAodW5zaWduZWQgY2hhcikoc2l6ZSkpCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGY2NF9Md29yZAltX3ZhbHVlOwkvKiBzeW1ib2wgdmFsdWUgKi8KLQlFbGY2NF9Yd29yZAltX2luZm87CQkvKiBzaXplICsgaW5kZXggKi8KLQlFbGY2NF9Yd29yZAltX3BvZmZzZXQ7CS8qIHN5bWJvbCBvZmZzZXQgKi8KLQlFbGY2NF9Xb3JkCW1fcmVwZWF0OwkvKiByZXBlYXQgY291bnQgKi8KLQlFbGY2NF9Xb3JkCW1fc3RyaWRlOwkvKiBzdHJpZGUgaW5mbyAqLwotfSBFbGY2NF9Nb3ZlOwotCi0jZGVmaW5lIEVMRjY0X01fU1lNKGluZm8pCSgoaW5mbykgPj4gOCkKLSNkZWZpbmUgRUxGNjRfTV9TSVpFKGluZm8pCSgoaW5mbykgJiAweGZmKQotI2RlZmluZSBFTEY2NF9NX0lORk8oc3ltLCBzaXplKSAoKChzeW0pIDw8IDgpICsgKHVuc2lnbmVkIGNoYXIpKHNpemUpKQotCi0vKgotICogSGFyZHdhcmUvc29mdHdhcmUgY2FwYWJpbGl0aWVzIGVudHJ5Ci0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGYzMl9Xb3JkCQljX3RhZzsJLyogZW50cnkgdGFnIHZhbHVlICovCi0JdW5pb24gewotCQlFbGYzMl9BZGRyCWNfcHRyOwotCQlFbGYzMl9Xb3JkCWNfdmFsOwotCX0gY191bjsKLX0gRWxmMzJfQ2FwOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JRWxmNjRfWHdvcmQJCWNfdGFnOwkvKiBlbnRyeSB0YWcgdmFsdWUgKi8KLQl1bmlvbiB7Ci0JCUVsZjY0X0FkZHIJY19wdHI7Ci0JCUVsZjY0X1h3b3JkCWNfdmFsOwotCX0gY191bjsKLX0gRWxmNjRfQ2FwOwotCi0vKgotICogRHluYW1pYyBTZWN0aW9uIHN0cnVjdHVyZSBhcnJheQotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JRWxmMzJfV29yZAkJZF90YWc7CS8qIGVudHJ5IHRhZyB2YWx1ZSAqLwotCXVuaW9uIHsKLQkJRWxmMzJfQWRkcglkX3B0cjsKLQkJRWxmMzJfV29yZAlkX3ZhbDsKLQl9IGRfdW47Ci19IEVsZjMyX0R5bjsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjY0X1h3b3JkCQlkX3RhZzsJLyogZW50cnkgdGFnIHZhbHVlICovCi0JdW5pb24gewotCQlFbGY2NF9BZGRyCWRfcHRyOwotCQlFbGY2NF9Yd29yZAlkX3ZhbDsKLQl9IGRfdW47Ci19IEVsZjY0X0R5bjsKLQotLyogZF90YWcgKi8KLSNkZWZpbmUgRFRfTlVMTAkJMAkvKiBNYXJrcyBlbmQgb2YgZHluYW1pYyBhcnJheSAqLwotI2RlZmluZSBEVF9ORUVERUQJMQkvKiBOYW1lIG9mIG5lZWRlZCBsaWJyYXJ5IChEVF9TVFJUQUIgb2Zmc2V0KSAqLwotI2RlZmluZSBEVF9QTFRSRUxTWgkyCS8qIFNpemUsIGluIGJ5dGVzLCBvZiByZWxvY2F0aW9ucyBpbiBQTFQgKi8KLSNkZWZpbmUgRFRfUExUR09UCTMJLyogQWRkcmVzcyBvZiBQTFQgYW5kL29yIEdPVCAqLwotI2RlZmluZSBEVF9IQVNICQk0CS8qIEFkZHJlc3Mgb2Ygc3ltYm9sIGhhc2ggdGFibGUgKi8KLSNkZWZpbmUgRFRfU1RSVEFCCTUJLyogQWRkcmVzcyBvZiBzdHJpbmcgdGFibGUgKi8KLSNkZWZpbmUgRFRfU1lNVEFCCTYJLyogQWRkcmVzcyBvZiBzeW1ib2wgdGFibGUgKi8KLSNkZWZpbmUgRFRfUkVMQQkJNwkvKiBBZGRyZXNzIG9mIFJlbGEgcmVsb2NhdGlvbiB0YWJsZSAqLwotI2RlZmluZSBEVF9SRUxBU1oJOAkvKiBTaXplLCBpbiBieXRlcywgb2YgRFRfUkVMQSB0YWJsZSAqLwotI2RlZmluZSBEVF9SRUxBRU5UCTkJLyogU2l6ZSwgaW4gYnl0ZXMsIG9mIG9uZSBEVF9SRUxBIGVudHJ5ICovCi0jZGVmaW5lIERUX1NUUlNaCTEwCS8qIFNpemUsIGluIGJ5dGVzLCBvZiBEVF9TVFJUQUIgdGFibGUgKi8KLSNkZWZpbmUgRFRfU1lNRU5UCTExCS8qIFNpemUsIGluIGJ5dGVzLCBvZiBvbmUgRFRfU1lNVEFCIGVudHJ5ICovCi0jZGVmaW5lIERUX0lOSVQJCTEyCS8qIEFkZHJlc3Mgb2YgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKi8KLSNkZWZpbmUgRFRfRklOSQkJMTMJLyogQWRkcmVzcyBvZiB0ZXJtaW5hdGlvbiBmdW5jdGlvbiAqLwotI2RlZmluZSBEVF9TT05BTUUJMTQJLyogU2hhcmVkIG9iamVjdCBuYW1lIChEVF9TVFJUQUIgb2Zmc2V0KSAqLwotI2RlZmluZSBEVF9SUEFUSAkxNQkvKiBMaWJyYXJ5IHNlYXJjaCBwYXRoIChEVF9TVFJUQUIgb2Zmc2V0KSAqLwotI2RlZmluZSBEVF9TWU1CT0xJQwkxNgkvKiBTdGFydCBzeW1ib2wgc2VhcmNoIHdpdGhpbiBsb2NhbCBvYmplY3QgKi8KLSNkZWZpbmUgRFRfUkVMCQkxNwkvKiBBZGRyZXNzIG9mIFJlbCByZWxvY2F0aW9uIHRhYmxlICovCi0jZGVmaW5lIERUX1JFTFNaCTE4CS8qIFNpemUsIGluIGJ5dGVzLCBvZiBEVF9SRUwgdGFibGUgKi8KLSNkZWZpbmUgRFRfUkVMRU5UCTE5CS8qIFNpemUsIGluIGJ5dGVzLCBvZiBvbmUgRFRfUkVMIGVudHJ5ICovCi0jZGVmaW5lIERUX1BMVFJFTAkyMAkvKiBUeXBlIG9mIFBMVCByZWxvY2F0aW9uIGVudHJpZXMgKi8KLSNkZWZpbmUgRFRfREVCVUcJMjEJLyogVXNlZCBmb3IgZGVidWdnaW5nOyB1bnNwZWNpZmllZCAqLwotI2RlZmluZSBEVF9URVhUUkVMCTIyCS8qIFJlbG9jYXRpb25zIG1pZ2h0IG1vZGlmeSBub24td3JpdGFibGUgc2VnICovCi0jZGVmaW5lIERUX0pNUFJFTAkyMwkvKiBBZGRyZXNzIG9mIHJlbG9jYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBQTFQgKi8KLSNkZWZpbmUgRFRfQklORF9OT1cJMjQJLyogUHJvY2VzcyBhbGwgcmVsb2NhdGlvbnMgYXQgbG9hZC10aW1lICovCi0jZGVmaW5lIERUX0lOSVRfQVJSQVkJMjUJLyogQWRkcmVzcyBvZiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBhcnJheSAqLwotI2RlZmluZSBEVF9GSU5JX0FSUkFZCTI2CS8qIFNpemUsIGluIGJ5dGVzLCBvZiBEVF9JTklUX0FSUkFZIGFycmF5ICovCi0jZGVmaW5lIERUX0lOSVRfQVJSQVlTWiAyNwkvKiBBZGRyZXNzIG9mIHRlcm1pbmF0aW9uIGZ1bmN0aW9uIGFycmF5ICovCi0jZGVmaW5lIERUX0ZJTklfQVJSQVlTWiAyOAkvKiBTaXplLCBpbiBieXRlcywgb2YgRFRfRklOSV9BUlJBWSBhcnJheSovCi0jZGVmaW5lIERUX1JVTlBBVEgJMjkJLyogb3ZlcnJpZGVzIERUX1JQQVRIICovCi0jZGVmaW5lIERUX0ZMQUdTCTMwCS8qIEVuY29kZXMgT1JJR0lOLCBTWU1CT0xJQywgVEVYVFJFTCwgQklORF9OT1csIFNUQVRJQ19UTFMgKi8KLSNkZWZpbmUgRFRfRU5DT0RJTkcJMzEJLyogPz8/ICovCi0jZGVmaW5lIERUX1BSRUlOSVRfQVJSQVkgMzIJLyogQWRkcmVzcyBvZiBwcmUtaW5pdCBmdW5jdGlvbiBhcnJheSAqLwotI2RlZmluZSBEVF9QUkVJTklUX0FSUkFZU1ogMzMJLyogU2l6ZSwgaW4gYnl0ZXMsIG9mIERUX1BSRUlOSVRfQVJSQVkgYXJyYXkgKi8KLSNkZWZpbmUgRFRfTlVNCQkzNAotCi0jZGVmaW5lIERUX0xPT1MJCTB4NjAwMDAwMDAJLyogT3BlcmF0aW5nIHN5c3RlbSBzcGVjaWZpYyByYW5nZSAqLwotI2RlZmluZSBEVF9WRVJTWU0JMHg2ZmZmZmZmMAkvKiBTeW1ib2wgdmVyc2lvbnMgKi8KLSNkZWZpbmUgRFRfRkxBR1NfMQkweDZmZmZmZmZiCS8qIEVMRiBkeW5hbWljIGZsYWdzICovCi0jZGVmaW5lIERUX1ZFUkRFRgkweDZmZmZmZmZjCS8qIFZlcnNpb25zIGRlZmluZWQgYnkgZmlsZSAqLwotI2RlZmluZSBEVF9WRVJERUZOVU0JMHg2ZmZmZmZmZAkvKiBOdW1iZXIgb2YgdmVyc2lvbnMgZGVmaW5lZCBieSBmaWxlICovCi0jZGVmaW5lIERUX1ZFUk5FRUQJMHg2ZmZmZmZmZQkvKiBWZXJzaW9ucyBuZWVkZWQgYnkgZmlsZSAqLwotI2RlZmluZSBEVF9WRVJORUVETlVNCTB4NmZmZmZmZmYJLyogTnVtYmVyIG9mIHZlcnNpb25zIG5lZWRlZCBieSBmaWxlICovCi0jZGVmaW5lIERUX0hJT1MJCTB4NmZmZmZmZmYKLSNkZWZpbmUgRFRfTE9QUk9DCTB4NzAwMDAwMDAJLyogUHJvY2Vzc29yLXNwZWNpZmljIHJhbmdlICovCi0jZGVmaW5lIERUX0hJUFJPQwkweDdmZmZmZmZmCi0KLS8qIEZsYWcgdmFsdWVzIGZvciBEVF9GTEFHUyAqLwotI2RlZmluZSBERl9PUklHSU4JMHgwMDAwMDAwMQkvKiB1c2VzICRPUklHSU4gKi8KLSNkZWZpbmUgREZfU1lNQk9MSUMJMHgwMDAwMDAwMgkvKiAqLwotI2RlZmluZSBERl9URVhUUkVMCTB4MDAwMDAwMDQJLyogKi8KLSNkZWZpbmUgREZfQklORF9OT1cJMHgwMDAwMDAwOAkvKiAqLwotI2RlZmluZSBERl9TVEFUSUNUX0xTCTB4MDAwMDAwMTAJLyogKi8KLQotLyogRmxhZyB2YWx1ZXMgZm9yIERUX0ZMQUdTXzEgKGluY29tcGxldGUpICovCi0jZGVmaW5lIERGXzFfQklORF9OT1cJMHgwMDAwMDAwMQkvKiBTYW1lIGFzIERGX0JJTkRfTk9XICovCi0jZGVmaW5lIERGXzFfTk9ERUxFVEUJMHgwMDAwMDAwOAkvKiBTZXQgdGhlIFJUTERfTk9ERUxFVEUgZm9yIG9iamVjdCAqLwotI2RlZmluZSBERl8xX0lOSVRGSVJTVAkweDAwMDAwMDIwCS8qIE9iamVjdCdzIGluaXQvZmluaSB0YWtlIHByaW9yaXR5ICovCi0jZGVmaW5lIERGXzFfTk9PUEVOCTB4MDAwMDAwNDAJLyogRG8gbm90IGFsbG93IGxvYWRpbmcgb24gZGxvcGVuKCkgKi8KLQotLyoKLSAqIEF1eGlsaWFyeSBWZWN0b3JzCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGYzMl9Xb3JkCWFfdHlwZTsJCQkJLyogMzItYml0IGlkICovCi0JRWxmMzJfV29yZAlhX3Y7CQkJCS8qIDMyLWJpdCBpZCAqLwotfSBBdXgzMkluZm87Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGY2NF9Xb3JkCWFfdHlwZTsJCS8qIDMyLWJpdCBpZCAqLwotCUVsZjY0X1h3b3JkCWFfdjsJCS8qIDY0LWJpdCBpZCAqLwotfSBBdXg2NEluZm87Ci0KLS8qIEJFR0lOIGFuZHJvaWQtY2hhbmdlZDogdGhlc2UgY29uc3RhbnRzIHNob3VsZCBjb21lIGZyb20gPGxpbnV4L2F1eHZlYy5oPi4gKi8KLSNpZiAwCi0vKiBhX3R5cGUgKi8KLSNkZWZpbmUgQVRfTlVMTAkJMAkvKiBNYXJrcyBlbmQgb2YgYXJyYXkgKi8KLSNkZWZpbmUgQVRfSUdOT1JFCTEJLyogTm8gbWVhbmluZywgYV91biBpcyB1bmRlZmluZWQgKi8KLSNkZWZpbmUgQVRfRVhFQ0ZECTIJLyogT3BlbiBmaWxlIGRlc2NyaXB0b3Igb2Ygb2JqZWN0IGZpbGUgKi8KLSNkZWZpbmUgQVRfUEhEUgkJMwkvKiAmcGhkclswXSAqLwotI2RlZmluZSBBVF9QSEVOVAk0CS8qIHNpemVvZihwaGRyWzBdKSAqLwotI2RlZmluZSBBVF9QSE5VTQk1CS8qICMgcGhkciBlbnRyaWVzICovCi0jZGVmaW5lIEFUX1BBR0VTWgk2CS8qIFBBR0VTSVpFICovCi0jZGVmaW5lIEFUX0JBU0UJCTcJLyogSW50ZXJwcmV0ZXIgYmFzZSBhZGRyICovCi0jZGVmaW5lIEFUX0ZMQUdTCTgJLyogUHJvY2Vzc29yIGZsYWdzICovCi0jZGVmaW5lIEFUX0VOVFJZCTkJLyogRW50cnkgYWRkcmVzcyBvZiBleGVjdXRhYmxlICovCi0jZGVmaW5lIEFUX0RDQUNIRUJTSVpFCTEwCS8qIERhdGEgY2FjaGUgYmxvY2sgc2l6ZSAqLwotI2RlZmluZSBBVF9JQ0FDSEVCU0laRQkxMQkvKiBJbnN0cnVjdGlvbiBjYWNoZSBibG9jayBzaXplICovCi0jZGVmaW5lIEFUX1VDQUNIRUJTSVpFCTEyCS8qIFVuaWZpZWQgY2FjaGUgYmxvY2sgc2l6ZSAqLwotI2RlZmluZSBBVF9TVEFDS0JBU0UJMTMJLyogQmFzZSBhZGRyZXNzIG9mIHRoZSBtYWluIHRocmVhZCAqLwotCi0JLyogVmVuZG9yIHNwZWNpZmljICovCi0jZGVmaW5lIEFUX01JUFNfTk9URUxGCTEwCS8qIFhYWCBhX3ZhbCAhPSAwIC0+IE1JUFMgWENPRkYgZXhlY3V0YWJsZSAqLwotCi0jZGVmaW5lIEFUX0VVSUQJCTIwMDAJLyogZXVpZCAoc29sYXJpcyBjb21wYXRpYmxlIG51bWJlcnMpICovCi0jZGVmaW5lIEFUX1JVSUQJCTIwMDEJLyogcnVpZCAoc29sYXJpcyBjb21wYXRpYmxlIG51bWJlcnMpICovCi0jZGVmaW5lIEFUX0VHSUQJCTIwMDIJLyogZWdpZCAoc29sYXJpcyBjb21wYXRpYmxlIG51bWJlcnMpICovCi0jZGVmaW5lIEFUX1JHSUQJCTIwMDMJLyogcmdpZCAoc29sYXJpcyBjb21wYXRpYmxlIG51bWJlcnMpICovCi0KLQkvKiBTb2xhcmlzIGtlcm5lbCBzcGVjaWZpYyAqLwotI2RlZmluZSBBVF9TVU5fTERFTEYJMjAwNAkvKiBkeW5hbWljIGxpbmtlcidzIEVMRiBoZWFkZXIgKi8KLSNkZWZpbmUgQVRfU1VOX0xEU0hEUgkyMDA1CS8qIGR5bmFtaWMgbGlua2VyJ3Mgc2VjdGlvbiBoZWFkZXIgKi8KLSNkZWZpbmUgQVRfU1VOX0xETkFNRQkyMDA2CS8qIGR5bmFtaWMgbGlua2VyJ3MgbmFtZSAqLwotI2RlZmluZSBBVF9TVU5fTFBHU0laRQkyMDA3CS8qIGxhcmdlIHBhZ2VzaXplICovCi0KLQkvKiBPdGhlciBpbmZvcm1hdGlvbiAqLwotI2RlZmluZSBBVF9TVU5fUExBVEZPUk0gMjAwOAkvKiBzeXNpbmZvKFNJX1BMQVRGT1JNKSAqLwotI2RlZmluZSBBVF9TVU5fSFdDQVAJMjAwOQkvKiBwcm9jZXNzIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAqLwotI2RlZmluZSBBVF9TVU5fSUZMVVNICTIwMTAJLyogZG8gd2UgbmVlZCB0byBmbHVzaCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGU/ICovCi0jZGVmaW5lIEFUX1NVTl9DUFUJMjAxMQkvKiBDUFUgbmFtZSAqLwotCS8qIGliY3MyIGVtdWxhdGlvbiBiYW5kIGFpZCAqLwotI2RlZmluZSBBVF9TVU5fRU1VTF9FTlRSWSAyMDEyCS8qIGNvZmYgZW50cnkgcG9pbnQgKi8KLSNkZWZpbmUgQVRfU1VOX0VNVUxfRVhFQ0ZEIDIwMTMgLyogY29mZiBmaWxlIGRlc2NyaXB0b3IgKi8KLQkvKiBFeGVjdXRhYmxlJ3MgZnVsbHkgcmVzb2x2ZWQgbmFtZSAqLwotI2RlZmluZSBBVF9TVU5fRVhFQ05BTUUgMjAxNAotI2VuZGlmCi0vKiBFTkQgYW5kcm9pZC1jaGFuZ2VkICovCi0KLS8qCi0gKiBOb3RlIEhlYWRlcnMKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjMyX1dvcmQgbl9uYW1lc3o7Ci0JRWxmMzJfV29yZCBuX2Rlc2NzejsKLQlFbGYzMl9Xb3JkIG5fdHlwZTsKLX0gRWxmMzJfTmhkcjsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjY0X1dvcmQgbl9uYW1lc3o7Ci0JRWxmNjRfV29yZCBuX2Rlc2NzejsKLQlFbGY2NF9Xb3JkIG5fdHlwZTsKLX0gRWxmNjRfTmhkcjsKLQotI2RlZmluZSBFTEZfTk9URV9HTlVfTkFNRVNaCQk0Ci0jZGVmaW5lIEVMRl9OT1RFX0dOVV9OQU1FCQkiR05VXDAiCi0KLS8qCi0gKiBHTlUtc3BlY2lmaWMgbm90ZSB0eXBlOiBBQkkgdGFnCi0gKiBuYW1lOiBHTlVcMAotICogbmFtZXN6OiA0Ci0gKiBkZXNjOgotICoJd29yZFswXTogT1MgdGFnCi0gKgl3b3JkWzFdOiBtYWpvciB2ZXJzaW9uCi0gKgl3b3JkWzJdOiBtaW5vciB2ZXJzaW9uCi0gKgl3b3JkWzNdOiB0ZWVueSB2ZXJzaW9uCi0gKiBkZXNjc3o6IDE2Ci0gKi8KLS8qIEdOVS1zcGVjaWZpYyBub3RlIG5hbWUgYW5kIGRlc2NyaXB0aW9uIHNpemVzICovCi0jZGVmaW5lIEVMRl9OT1RFX1RZUEVfQUJJX1RBRwkJMQotI2RlZmluZSBFTEZfTk9URV9BQklfTkFNRQkJRUxGX05PVEVfR05VX05BTUUKLSNkZWZpbmUgRUxGX05PVEVfQUJJX05BTUVTWgkJRUxGX05PVEVfR05VX05BTUVTWgotI2RlZmluZSBFTEZfTk9URV9BQklfREVTQ1NaCQkxNgotLyogR05VLXNwZWNpZmljIE9TL3ZlcnNpb24gdmFsdWUgc3R1ZmYgKi8KLSNkZWZpbmUgRUxGX05PVEVfQUJJX09TX0xJTlVYCQkwCi0jZGVmaW5lIEVMRl9OT1RFX0FCSV9PU19IVVJECQkxCi0jZGVmaW5lIEVMRl9OT1RFX0FCSV9PU19TT0xBUklTCQkyCi0jZGVmaW5lIEVMRl9OT1RFX0FCSV9PU19LRlJFRUJTRAkzCi0jZGVmaW5lIEVMRl9OT1RFX0FCSV9PU19LTkVUQlNECQk0Ci0KLS8qCi0gKiBHTlUtc3BlY2lmaWMgbm90ZSB0eXBlOiBIYXJkd2FyZSBjYXBhYmlsaXRpZXMKLSAqIG5hbWU6IEdOVVwwCi0gKiBuYW1lc3o6IDQKLSAqIGRlc2M6Ci0gKgl3b3JkWzBdOiBOdW1iZXIgb2YgZW50cmllcwotICoJd29yZFsxXTogQml0bWFzayBvZiBlbmFibGVkIGVudHJpZXMKLSAqCUZvbGxvd2VkIGJ5IGEgYnl0ZSBpZCwgYW5kIGEgTlVMIHRlcm1pbmF0ZWQgc3RyaW5nIHBlciBlbnRyeQotICogZGVzY3N6OiB2YXJpYWJsZQotICovCi0jZGVmaW5lIEVMRl9OT1RFX1RZUEVfR05VX0hXQ0FQCQkyCi0KLS8qCi0gKiBHTlUtc3BlY2lmaWMgbm90ZSB0eXBlOiBCdWlsZCBJRCBnZW5lcmF0ZWQgYnkgbGQKLSAqIG5hbWU6IEdOVVwwCi0gKiBkZXNjOgotICoJd29yZFswLi40XSBTSEExIFtkZWZhdWx0XQotICogb3IKLSAqCXdvcmRbMC4uM10gbWQ1IG9yIHV1aWQKLSAqIGRlc2NzejogMTYgb3IgMjAKLSAqLwotI2RlZmluZSBFTEZfTk9URV9UWVBFX0dOVV9CVUlMRF9JRAkzCi0KLS8qIFN1U0Utc3BlY2lmaWMgbm90ZSB0eXBlOiBBQkkKLSAqIG5hbWU6IFN1U0VcMAotICogbmFtZXN6OiA1Ci0gKiBkZXNjOgotICoJaGFsZlswXSA9IE1NbW0KLSAqCi0gKglNID0gcHJvZHVjdCBtYWpvciB2ZXJzaW9uCi0gKgltID0gcHJvZHVjdCBtaW5vciB2ZXJzaW9uCi0gKiBkZXNjc3o6IDIKLSAqLwotI2RlZmluZSBFTEZfTk9URV9UWVBFX1NVU0VfVEFHCTEKLS8qIFN1U0Utc3BlY2lmaWMgbm90ZSBuYW1lIGFuZCBkZXNjcmlwdGlvbiBzaXplcyAqLwotI2RlZmluZSBFTEZfTk9URV9TVVNFX05BTUVTWgk1Ci0jZGVmaW5lIEVMRl9OT1RFX1NVU0VfREVTQ1NaCTIKLS8qIFN1U0Utc3BlY2lmaWMgbm90ZSBuYW1lICovCi0jZGVmaW5lIEVMRl9OT1RFX1NVU0VfTkFNRQkJIlN1U0VcMCIKLQotLyogU3VTRS1zcGVjaWZpYyBub3RlIHR5cGU6IHZlcnNpb24KLSAqIG5hbWU6IFN1U0VcMFwwXDBcMAotICogbmFtZXN6OiA4Ci0gKiBkZXNjOgotICoJd29yZFswXSA9IFZWVFRNTW1tCi0gKgotICoJViA9IHZlcnNpb24gb2YgZm9sbG93aW5nIGRhdGEKLSAqCVQgPSBwcm9kdWN0IHR5cGU6IFtib3gsIHNsZXMsIG5sZCwgd2hhdGV2ZXJdCi0gKglNID0gcHJvZHVjdCBtYWpvciB2ZXJzaW9uCi0gKgltID0gcHJvZHVjdCBtaW5vciB2ZXJzaW9uCi0gKiBkZXNjc3o6IDgKLSAqLwotI2RlZmluZSBFTEZfTk9URV9UWVBFX1NVU0VfVkVSU0lPTl9UQUcJMHg0NTUzNzU1MwkvKiBTdVNFIGluIExFICovCi0vKiBTdVNFLXNwZWNpZmljIG5vdGUgbmFtZSBhbmQgZGVzY3JpcHRpb24gc2l6ZXMgKi8KLSNkZWZpbmUgRUxGX05PVEVfU1VTRV9WRVJTSU9OX05BTUVTWgk4Ci0jZGVmaW5lIEVMRl9OT1RFX1NVU0VfVkVSU0lPTl9ERVNDU1oJOAotLyogU3VTRS1zcGVjaWZpYyBub3RlIG5hbWUgKi8KLSNkZWZpbmUgRUxGX05PVEVfU1VTRV9WRVJTSU9OX05BTUUJCSJTdVNFXDBcMFwwXDAiCi0KLS8qIE5ldEJTRC1zcGVjaWZpYyBub3RlIHR5cGU6IEVtdWxhdGlvbiBuYW1lLgotICogbmFtZTogTmV0QlNEXDBcMAotICogbmFtZXN6OiA4Ci0gKiBkZXNjOgotICoJd29yZFswXTogTU1tbXJycHAwMAotICoKLSAqCU0gPSBtYWpvciB2ZXJzaW9uCi0gKgltID0gbWlub3IgdmVyc2lvbgotICoJciA9IHJlbGVhc2UgWyIiLEEtWixaW0EtWl0gYnV0IG51bWVyaWNdCi0gKglwID0gcGF0Y2hsZXZlbAotICogZGVzY3N6OiA0Ci0gKi8KLSNkZWZpbmUgRUxGX05PVEVfVFlQRV9ORVRCU0RfVEFHCTEKLS8qIE5ldEJTRC1zcGVjaWZpYyBub3RlIG5hbWUgYW5kIGRlc2NyaXB0aW9uIHNpemVzICovCi0jZGVmaW5lIEVMRl9OT1RFX05FVEJTRF9OQU1FU1oJCTcKLSNkZWZpbmUgRUxGX05PVEVfTkVUQlNEX0RFU0NTWgkJNAotLyogTmV0QlNELXNwZWNpZmljIG5vdGUgbmFtZSAqLwotI2RlZmluZSBFTEZfTk9URV9ORVRCU0RfTkFNRQkJIk5ldEJTRFwwXDAiCi0KLS8qIE5ldEJTRC1zcGVjaWZpYyBub3RlIHR5cGU6IENoZWNrc3VtLgotICogVGhlcmUgc2hvdWxkIGJlIDEgTk9URSBwZXIgUFRfTE9BRCBzZWN0aW9uLgotICogbmFtZTogPz8/Ci0gKiBuYW1lc3o6ID8/PwotICogZGVzYzoKLSAqCWEgdHVwbGUgb2YgPHBobnVtPigxNiksPGNoay10eXBlPigxNiksPGNoay12YWx1ZT4uCi0gKiBkZXNjc3o6ID8/PwotICovCi0jZGVmaW5lIEVMRl9OT1RFX1RZUEVfQ0hFQ0tTVU1fVEFHCTIKLSNkZWZpbmUgRUxGX05PVEVfQ0hFQ0tTVU1fQ1JDMzIJCTEKLSNkZWZpbmUgRUxGX05PVEVfQ0hFQ0tTVU1fTUQ1CQkyCi0jZGVmaW5lIEVMRl9OT1RFX0NIRUNLU1VNX1NIQTEJCTMKLSNkZWZpbmUgRUxGX05PVEVfQ0hFQ0tTVU1fU0hBMjU2CTQKLQotLyoKLSAqIE5ldEJTRC1zcGVjaWZpYyBub3RlIHR5cGU6IFBhWC4KLSAqIFRoZXJlIHNob3VsZCBiZSAxIE5PVEUgcGVyIGV4ZWN1dGFibGUuCi0gKiBuYW1lOiBQYVhcMAotICogbmFtZXN6OiA0Ci0gKiBkZXNjOgotICoJd29yZFswXTogY2FwYWJpbGl0eSBiaXRtYXNrCi0gKiBkZXNjc3o6IDQKLSAqLwotI2RlZmluZSBFTEZfTk9URV9UWVBFX1BBWF9UQUcJCTMKLSNkZWZpbmUgRUxGX05PVEVfUEFYX01QUk9URUNUCQkweDAxCS8qIEZvcmNlIGVuYWJsZSBNcHJvdGVjdCAqLwotI2RlZmluZSBFTEZfTk9URV9QQVhfTk9NUFJPVEVDVAkJMHgwMgkvKiBGb3JjZSBkaXNhYmxlIE1wcm90ZWN0ICovCi0jZGVmaW5lIEVMRl9OT1RFX1BBWF9HVUFSRAkJMHgwNAkvKiBGb3JjZSBlbmFibGUgU2Vndmd1YXJkICovCi0jZGVmaW5lIEVMRl9OT1RFX1BBWF9OT0dVQVJECQkweDA4CS8qIEZvcmNlIGRpc2FibGUgU2Vydmd1YXJkICovCi0jZGVmaW5lIEVMRl9OT1RFX1BBWF9BU0xSCQkweDEwCS8qIEZvcmNlIGVuYWJsZSBBU0xSICovCi0jZGVmaW5lIEVMRl9OT1RFX1BBWF9OT0FTTFIJCTB4MjAJLyogRm9yY2UgZGlzYWJsZSBBU0xSICovCi0jZGVmaW5lIEVMRl9OT1RFX1BBWF9OQU1FU1oJCTQKLSNkZWZpbmUgRUxGX05PVEVfUEFYX05BTUUJCSJQYVhcMCIKLSNkZWZpbmUgRUxGX05PVEVfUEFYX0RFU0NTWgkJNAotCi0vKgotICogTmV0QlNELXNwZWNpZmljIGNvcmUgZmlsZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBOZXRCU0QgRUxGIGNvcmUgZmlsZXMgdXNlIG5vdGVzIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQKLSAqIHRoZSBwcm9jZXNzJ3Mgc3RhdGUuCSBUaGUgbm90ZSBuYW1lIGlzICJOZXRCU0QtQ09SRSIgZm9yCi0gKiBpbmZvcm1hdGlvbiB0aGF0IGlzIGdsb2JhbCB0byB0aGUgcHJvY2VzcywgYW5kICJOZXRCU0QtQ09SRUBubiIsCi0gKiB3aGVyZSAibm4iIGlzIHRoZSBsd3BpZCBvZiB0aGUgTFdQIHRoYXQgdGhlIGluZm9ybWF0aW9uIGJlbG9uZ3MKLSAqIHRvIChzdWNoIGFzIHJlZ2lzdGVyIHN0YXRlKS4KLSAqCi0gKiBXZSB1c2UgdGhlIGZvbGxvd2luZyBub3RlIGlkZW50aWZpZXJzOgotICoKLSAqCUVMRl9OT1RFX05FVEJTRF9DT1JFX1BST0NJTkZPCi0gKgkJTm90ZSBpcyBhICJuZXRic2RfZWxmY29yZV9wcm9jaW5mbyIgc3RydWN0dXJlLgotICoKLSAqIFdlIGFsc28gdXNlIHB0cmFjZSgyKSByZXF1ZXN0IG51bWJlcnMgKHRoZSBvbmVzIHRoYXQgZXhpc3QgaW4KLSAqIG1hY2hpbmUtZGVwZW5kZW50IHNwYWNlKSB0byBpZGVudGlmeSByZWdpc3RlciBpbmZvIG5vdGVzLiAgVGhlCi0gKiBpbmZvIGluIHN1Y2ggbm90ZXMgaXMgaW4gdGhlIHNhbWUgZm9ybWF0IHRoYXQgcHRyYWNlKDIpIHdvdWxkCi0gKiBleHBvcnQgdGhhdCBpbmZvcm1hdGlvbi4KLSAqCi0gKiBQbGVhc2UgdHJ5IHRvIGtlZXAgdGhlIG1lbWJlcnMgb2YgdGhpcyBzdHJ1Y3R1cmUgbmljZWx5IGFsaWduZWQsCi0gKiBhbmQgaWYgeW91IGFkZCBlbGVtZW50cywgYWRkIHRoZW0gdG8gdGhlIGVuZCBhbmQgYnVtcCB0aGUgdmVyc2lvbi4KLSAqLwotCi0jZGVmaW5lIEVMRl9OT1RFX05FVEJTRF9DT1JFX05BTUUJIk5ldEJTRC1DT1JFIgotCi0jZGVmaW5lIEVMRl9OT1RFX05FVEJTRF9DT1JFX1BST0NJTkZPCTEKLQotI2RlZmluZSBORVRCU0RfRUxGQ09SRV9QUk9DSU5GT19WRVJTSU9OIDEKLQotc3RydWN0IG5ldGJzZF9lbGZjb3JlX3Byb2NpbmZvIHsKLQkvKiBWZXJzaW9uIDEgZmllbGRzIHN0YXJ0IGhlcmUuICovCi0JdWludDMyX3QJY3BpX3ZlcnNpb247CQkvKiBvdXIgdmVyc2lvbiAqLwotCXVpbnQzMl90CWNwaV9jcGlzaXplOwkJLyogc2l6ZW9mKHRoaXMgc3RydWN0KSAqLwotCXVpbnQzMl90CWNwaV9zaWdubzsJCS8qIGtpbGxpbmcgc2lnbmFsICovCi0JdWludDMyX3QJY3BpX3NpZ2NvZGU7CQkvKiBzaWduYWwgY29kZSAqLwotCXVpbnQzMl90CWNwaV9zaWdwZW5kWzRdOwkJLyogcGVuZGluZyBzaWduYWxzICovCi0JdWludDMyX3QJY3BpX3NpZ21hc2tbNF07CQkvKiBibG9ja2VkIHNpZ25hbHMgKi8KLQl1aW50MzJfdAljcGlfc2lnaWdub3JlWzRdOwkvKiBpZ25vcmVkIHNpZ25hbHMgKi8KLQl1aW50MzJfdAljcGlfc2lnY2F0Y2hbNF07CS8qIGNhdWdodCBzaWduYWxzICovCi0JaW50MzJfdAkJY3BpX3BpZDsJCS8qIHByb2Nlc3MgSUQgKi8KLQlpbnQzMl90CQljcGlfcHBpZDsJCS8qIHBhcmVudCBwcm9jZXNzIElEICovCi0JaW50MzJfdAkJY3BpX3BncnA7CQkvKiBwcm9jZXNzIGdyb3VwIElEICovCi0JaW50MzJfdAkJY3BpX3NpZDsJCS8qIHNlc3Npb24gSUQgKi8KLQl1aW50MzJfdAljcGlfcnVpZDsJCS8qIHJlYWwgdXNlciBJRCAqLwotCXVpbnQzMl90CWNwaV9ldWlkOwkJLyogZWZmZWN0aXZlIHVzZXIgSUQgKi8KLQl1aW50MzJfdAljcGlfc3Z1aWQ7CQkvKiBzYXZlZCB1c2VyIElEICovCi0JdWludDMyX3QJY3BpX3JnaWQ7CQkvKiByZWFsIGdyb3VwIElEICovCi0JdWludDMyX3QJY3BpX2VnaWQ7CQkvKiBlZmZlY3RpdmUgZ3JvdXAgSUQgKi8KLQl1aW50MzJfdAljcGlfc3ZnaWQ7CQkvKiBzYXZlZCBncm91cCBJRCAqLwotCXVpbnQzMl90CWNwaV9ubHdwczsJCS8qIG51bWJlciBvZiBMV1BzICovCi0JaW50OF90CQljcGlfbmFtZVszMl07CQkvKiBjb3B5IG9mIHAtPnBfY29tbSAqLwotCS8qIEFkZCB2ZXJzaW9uIDIgZmllbGRzIGJlbG93IGhlcmUuICovCi0JaW50MzJfdAkJY3BpX3NpZ2x3cDsJLyogTFdQIHRhcmdldCBvZiBraWxsaW5nIHNpZ25hbCAqLwotfTsKLQotLyoKLSAqIE5ldEJTRC1zcGVjaWZpYyBub3RlIHR5cGU6IE1BQ0hJTkVfQVJDSC4KLSAqIFRoZXJlIHNob3VsZCBiZSAxIE5PVEUgcGVyIGV4ZWN1dGFibGUuCi0gKiBuYW1lOglOZXRCU0RcMAotICogbmFtZXN6Ogk3Ci0gKiBkZXNjOglzdHJpbmcKLSAqIGRlc2NzejoJdmFyaWFibGUKLSAqLwotI2RlZmluZSBFTEZfTk9URV9UWVBFX01BUkNIX1RBRwkJNQotLyogTmV0QlNELXNwZWNpZmljIG5vdGUgbmFtZSBhbmQgZGVzY3JpcHRpb24gc2l6ZXMgKi8KLSNkZWZpbmUgRUxGX05PVEVfTUFSQ0hfTkFNRVNaCQlFTEZfTk9URV9ORVRCU0RfTkFNRVNaCi0vKiBOZXRCU0Qtc3BlY2lmaWMgbm90ZSBuYW1lICovCi0jZGVmaW5lIEVMRl9OT1RFX01BUkNIX05BTUUJCUVMRl9OT1RFX05FVEJTRF9OQU1FCi0KLSNpZiAhZGVmaW5lZChFTEZTSVpFKSAmJiBkZWZpbmVkKEFSQ0hfRUxGU0laRSkKLSNkZWZpbmUgRUxGU0laRSBBUkNIX0VMRlNJWkUKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChFTEZTSVpFKQotI2RlZmluZSBDT05DQVQoeCx5KQlfX0NPTkNBVCh4LHkpCi0jZGVmaW5lIEVMRk5BTUUoeCkJQ09OQ0FUKGVsZixDT05DQVQoRUxGU0laRSxDT05DQVQoXyx4KSkpCi0jZGVmaW5lIEVMRk5BTUUyKHgseSkJQ09OQ0FUKHgsQ09OQ0FUKF9lbGYsQ09OQ0FUKEVMRlNJWkUsQ09OQ0FUKF8seSkpKSkKLSNkZWZpbmUgRUxGTkFNRUVORCh4KQlDT05DQVQoeCxDT05DQVQoX2VsZixFTEZTSVpFKSkKLSNkZWZpbmUgRUxGREVGTk5BTUUoeCkJQ09OQ0FUKEVMRixDT05DQVQoRUxGU0laRSxDT05DQVQoXyx4KSkpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoRUxGU0laRSkgJiYgKEVMRlNJWkUgPT0gMzIpCi0jZGVmaW5lIEVsZl9FaGRyCUVsZjMyX0VoZHIKLSNkZWZpbmUgRWxmX1BoZHIJRWxmMzJfUGhkcgotI2RlZmluZSBFbGZfU2hkcglFbGYzMl9TaGRyCi0jZGVmaW5lIEVsZl9TeW0JCUVsZjMyX1N5bQotI2RlZmluZSBFbGZfUmVsCQlFbGYzMl9SZWwKLSNkZWZpbmUgRWxmX1JlbGEJRWxmMzJfUmVsYQotI2RlZmluZSBFbGZfRHluCQlFbGYzMl9EeW4KLSNkZWZpbmUgRWxmX1dvcmQJRWxmMzJfV29yZAotI2RlZmluZSBFbGZfU3dvcmQJRWxmMzJfU3dvcmQKLSNkZWZpbmUgRWxmX0hhbGYJRWxmMzJfSGFsZgotI2RlZmluZSBFbGZfQWRkcglFbGYzMl9BZGRyCi0jZGVmaW5lIEVsZl9PZmYJCUVsZjMyX09mZgotI2RlZmluZSBFbGZfU09mZglFbGYzMl9TT2ZmCi0jZGVmaW5lIEVsZl9OaGRyCUVsZjMyX05oZHIKLSNkZWZpbmUgRWxmX1ZlcmRlZglFbGYzMl9WZXJkZWYKLSNkZWZpbmUgRWxmX1ZlcmRhdXgJRWxmMzJfVmVyZGF1eAotI2RlZmluZSBFbGZfVmVybmVlZAlFbGYzMl9WZXJuZWVkCi0jZGVmaW5lIEVsZl9WZXJuYXV4CUVsZjMyX1Zlcm5hdXgKLSNkZWZpbmUgRWxmX1ZlcnN5bQlFbGYzMl9WZXJzeW0KLQotI2RlZmluZSBFTEZfUl9TWU0JRUxGMzJfUl9TWU0KLSNkZWZpbmUgRUxGX1JfVFlQRQlFTEYzMl9SX1RZUEUKLSNkZWZpbmUgRUxGQ0xBU1MJRUxGQ0xBU1MzMgotCi0jZGVmaW5lIEF1eEluZm8JCUF1eDMySW5mbwotI2VsaWYgZGVmaW5lZChFTEZTSVpFKSAmJiAoRUxGU0laRSA9PSA2NCkKLSNkZWZpbmUgRWxmX0VoZHIJRWxmNjRfRWhkcgotI2RlZmluZSBFbGZfUGhkcglFbGY2NF9QaGRyCi0jZGVmaW5lIEVsZl9TaGRyCUVsZjY0X1NoZHIKLSNkZWZpbmUgRWxmX1N5bQkJRWxmNjRfU3ltCi0jZGVmaW5lIEVsZl9SZWwJCUVsZjY0X1JlbAotI2RlZmluZSBFbGZfUmVsYQlFbGY2NF9SZWxhCi0jZGVmaW5lIEVsZl9EeW4JCUVsZjY0X0R5bgotI2RlZmluZSBFbGZfV29yZAlFbGY2NF9Xb3JkCi0jZGVmaW5lIEVsZl9Td29yZAlFbGY2NF9Td29yZAotI2RlZmluZSBFbGZfSGFsZglFbGY2NF9IYWxmCi0jZGVmaW5lIEVsZl9BZGRyCUVsZjY0X0FkZHIKLSNkZWZpbmUgRWxmX09mZgkJRWxmNjRfT2ZmCi0jZGVmaW5lIEVsZl9TT2ZmCUVsZjY0X1NPZmYKLSNkZWZpbmUgRWxmX05oZHIJRWxmNjRfTmhkcgotI2RlZmluZSBFbGZfVmVyZGVmCUVsZjY0X1ZlcmRlZgotI2RlZmluZSBFbGZfVmVyZGF1eAlFbGY2NF9WZXJkYXV4Ci0jZGVmaW5lIEVsZl9WZXJuZWVkCUVsZjY0X1Zlcm5lZWQKLSNkZWZpbmUgRWxmX1Zlcm5hdXgJRWxmNjRfVmVybmF1eAotI2RlZmluZSBFbGZfVmVyc3ltCUVsZjY0X1ZlcnN5bQotCi0jZGVmaW5lIEVMRl9SX1NZTQlFTEY2NF9SX1NZTQotI2RlZmluZSBFTEZfUl9UWVBFCUVMRjY0X1JfVFlQRQotI2RlZmluZSBFTEZDTEFTUwlFTEZDTEFTUzY0Ci0KLSNkZWZpbmUgQXV4SW5mbwkJQXV4NjRJbmZvCi0jZW5kaWYKLQotI2lmbmRlZiBFbGZfU3ltaW5keAotI2RlZmluZSBFbGZfU3ltaW5keAl1aW50MzJfdAotI2VuZGlmCi0KLSNkZWZpbmUgRUxGMzJfU1RfQklORChpbmZvKQkJRUxGX1NUX0JJTkQoaW5mbykKLSNkZWZpbmUgRUxGMzJfU1RfVFlQRShpbmZvKQkJRUxGX1NUX1RZUEUoaW5mbykKLSNkZWZpbmUgRUxGMzJfU1RfSU5GTyhiaW5kLHR5cGUpCUVMRl9TVF9JTkZPKGJpbmQsdHlwZSkKLSNkZWZpbmUgRUxGMzJfU1RfVklTSUJJTElUWShvdGhlcikJRUxGX1NUX1ZJU0lCSUxJVFkob3RoZXIpCi0KLSNkZWZpbmUgRUxGNjRfU1RfQklORChpbmZvKQkJRUxGX1NUX0JJTkQoaW5mbykKLSNkZWZpbmUgRUxGNjRfU1RfVFlQRShpbmZvKQkJRUxGX1NUX1RZUEUoaW5mbykKLSNkZWZpbmUgRUxGNjRfU1RfSU5GTyhiaW5kLHR5cGUpCUVMRl9TVF9JTkZPKGJpbmQsdHlwZSkKLSNkZWZpbmUgRUxGNjRfU1RfVklTSUJJTElUWShvdGhlcikJRUxGX1NUX1ZJU0lCSUxJVFkob3RoZXIpCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGYzMl9IYWxmCXNpX2JvdW5kdG87CS8qIGRpcmVjdCBiaW5kaW5ncyAtIHN5bWJvbCBib3VuZCB0byAqLwotCUVsZjMyX0hhbGYJc2lfZmxhZ3M7CS8qIHBlciBzeW1ib2wgZmxhZ3MgKi8KLX0gRWxmMzJfU3ltaW5mbzsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjY0X1dvcmQJc2lfYm91bmR0bzsJLyogZGlyZWN0IGJpbmRpbmdzIC0gc3ltYm9sIGJvdW5kIHRvICovCi0JRWxmNjRfV29yZAlzaV9mbGFnczsJLyogcGVyIHN5bWJvbCBmbGFncyAqLwotfSBFbGY2NF9TeW1pbmZvOwotCi0jZGVmaW5lIFNZTUlORk9fRkxHX0RJUkVDVAkweDAwMDEJLyogc3ltYm9sIHJlZiBoYXMgZGlyZWN0IGFzc29jaWF0aW9uCi0JCQkJCSAgIHRvIG9iamVjdCBjb250YWluaW5nIGRlZmluaXRpb24gKi8KLSNkZWZpbmUgU1lNSU5GT19GTEdfUEFTU1RIUlUJMHgwMDAyCS8qIGlnbm9yZWQgLSBzZWUgU1lNSU5GT19GTEdfRklMVEVSICovCi0jZGVmaW5lIFNZTUlORk9fRkxHX0NPUFkJMHgwMDA0CS8qIHN5bWJvbCBpcyBhIGNvcHktcmVsb2MgKi8KLSNkZWZpbmUgU1lNSU5GT19GTEdfTEFaWUxPQUQJMHgwMDA4CS8qIG9iamVjdCBjb250YWluaW5nIGRlZm4gc2hvdWxkIGJlCi0JCQkJCSAgIGxhemlseS1sb2FkZWQgKi8KLSNkZWZpbmUgU1lNSU5GT19GTEdfRElSRUNUQklORAkweDAwMTAJLyogcmVmIHNob3VsZCBiZSBib3VuZCBkaXJlY3RseSB0bwotCQkJCQkgICBvYmplY3QgY29udGFpbmluZyBkZWZpbml0aW9uICovCi0jZGVmaW5lIFNZTUlORk9fRkxHX05PRVhURElSRUNUIDB4MDAyMAkvKiBkb24ndCBsZXQgYW4gZXh0ZXJuYWwgcmVmZXJlbmNlCi0JCQkJCSAgIGRpcmVjdGx5IGJpbmQgdG8gdGhpcyBzeW1ib2wgKi8KLSNkZWZpbmUgU1lNSU5GT19GTEdfRklMVEVSCTB4MDAwMgkvKiBzeW1ib2wgcmVmIGlzIGFzc29jaWF0ZWQgdG8gYSAqLwotI2RlZmluZSBTWU1JTkZPX0ZMR19BVVhJTElBUlkJMHgwMDQwCS8qCXN0YW5kYXJkIG9yIGF1eGlsaWFyeSBmaWx0ZXIgKi8KLQotI2RlZmluZSBTWU1JTkZPX0JUX1NFTEYJCTB4ZmZmZgkvKiBzeW1ib2wgYm91bmQgdG8gc2VsZiAqLwotI2RlZmluZSBTWU1JTkZPX0JUX1BBUkVOVAkweGZmZmUJLyogc3ltYm9sIGJvdW5kIHRvIHBhcmVudCAqLwotI2RlZmluZSBTWU1JTkZPX0JUX05PTkUJCTB4ZmZmZAkvKiBubyBzcGVjaWFsIHN5bWJvbCBiaW5kaW5nICovCi0jZGVmaW5lIFNZTUlORk9fQlRfRVhURVJOCTB4ZmZmYwkvKiBzeW1ib2wgZGVmaW5lZCBhcyBleHRlcm5hbCAqLwotI2RlZmluZSBTWU1JTkZPX0JUX0xPV1JFU0VSVkUJMHhmZjAwCS8qIGJlZ2lubmluZyBvZiByZXNlcnZlZCBlbnRyaWVzICovCi0KLSNkZWZpbmUgU1lNSU5GT19OT05FCQkwCS8qIFN5bWluZm8gdmVyc2lvbiAqLwotI2RlZmluZSBTWU1JTkZPX0NVUlJFTlQJCTEKLSNkZWZpbmUgU1lNSU5GT19OVU0JCTIKLQotLyoKLSAqIFRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCBmb3IgRWxmMzJfVmVyZGVmIHN0cnVjdCdzIHZlcnNpb24gbnVtYmVyLgotICovCi0jZGVmaW5lIFZFUl9ERUZfTk9ORQkJMAotI2RlZmluZSBWRVJfREVGX0NVUlJFTlQJCTEKLQotLyoKLSAqIFRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCBmb3IgRWxmMzJfVmVyZGVmIHN0cnVjdCdzIHZkX25keC4KLSAqLwotI2RlZmluZSBWRVJfREVGX0lEWCh4KQkJVkVSX05EWCh4KQotCi0vKgotICogVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGZvciBFbGYzMl9WZXJkZWYgc3RydWN0J3MgdmRfZmxhZ3MuCi0gKi8KLSNkZWZpbmUgVkVSX0ZMR19CQVNFCQkweDEKLSNkZWZpbmUgVkVSX0ZMR19XRUFLCQkweDIKLQotLyoKLSAqIFRoZXNlIGFyZSB1c2VkIGluIGFuIEVsZjMyX1ZlcnN5bSBmaWVsZC4KLSAqLwotI2RlZmluZSBWRVJfTkRYX0xPQ0FMCQkwCi0jZGVmaW5lIFZFUl9ORFhfR0xPQkFMCQkxCi0jZGVmaW5lIFZFUl9ORFhfR0lWRU4JCTIKLQotLyoKLSAqIFRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCBmb3IgRWxmMzJfVmVybmVlZCBzdHJ1Y3QncyB2ZXJzaW9uIG51bWJlci4KLSAqLwotI2RlZmluZSBWRVJfTkVFRF9OT05FCQkwCi0jZGVmaW5lIFZFUl9ORUVEX0NVUlJFTlQJMQotCi0vKgotICogVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGZvciBFbGYzMl9WZXJuYXV4IHN0cnVjdCdzIHZuYV9vdGhlci4KLSAqLwotI2RlZmluZSBWRVJfTkVFRF9ISURERU4JCVZFUl9ORFhfSElEREVOCi0jZGVmaW5lIFZFUl9ORUVEX0lEWCh4KQkJVkVSX05EWCh4KQotCi0vKiBpbmRleCAqLwotI2RlZmluZSBWRVJfTkRYX0hJRERFTgkJMHg4MDAwCi0jZGVmaW5lIFZFUl9ORFgoeCkJCSgoeCkgJiB+VkVSX05EWF9ISURERU4pCi0KLS8qCi0gKiBHTlUgRXh0ZW5zaW9uIGhpZGRpbmcgc3ltYm9sCi0gKi8KLSNkZWZpbmUgVkVSU1lNX0hJRERFTgkJMHg4MDAwCi0jZGVmaW5lIFZFUlNZTV9WRVJTSU9OCQkweDdmZmYKLQotI2RlZmluZSBFTEZfVkVSX0NIUgkJJ0AnCi0KLS8qCi0gKiBUaGVzZSBhcmUgY3VycmVudCBzaXplIGluZGVwZW5kZW50LgotICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGYzMl9IYWxmCXZkX3ZlcnNpb247CS8qIHZlcnNpb24gbnVtYmVyIG9mIHN0cnVjdHVyZSAqLwotCUVsZjMyX0hhbGYJdmRfZmxhZ3M7CS8qIGZsYWdzIChWRVJfRkxHXyopICovCi0JRWxmMzJfSGFsZgl2ZF9uZHg7CQkvKiB2ZXJzaW9uIGluZGV4ICovCi0JRWxmMzJfSGFsZgl2ZF9jbnQ7CQkvKiBudW1iZXIgb2YgdmVyZGF1eCBlbnRyaWVzICovCi0JRWxmMzJfV29yZAl2ZF9oYXNoOwkvKiBoYXNoIG9mIG5hbWUgKi8KLQlFbGYzMl9Xb3JkCXZkX2F1eDsJCS8qIG9mZnNldCB0byB2ZXJkYXV4IGVudHJpZXMgKi8KLQlFbGYzMl9Xb3JkCXZkX25leHQ7CS8qIG9mZnNldCB0byBuZXh0IHZlcmRlZiAqLwotfSBFbGYzMl9WZXJkZWY7Ci10eXBlZGVmIEVsZjMyX1ZlcmRlZglFbGY2NF9WZXJkZWY7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGYzMl9Xb3JkCXZkYV9uYW1lOwkvKiBzdHJpbmcgdGFibGUgb2Zmc2V0IG9mIG5hbWUgKi8KLQlFbGYzMl9Xb3JkCXZkYV9uZXh0OwkvKiBvZmZzZXQgdG8gdmVyZGF1eCAqLwotfSBFbGYzMl9WZXJkYXV4OwotdHlwZWRlZiBFbGYzMl9WZXJkYXV4CUVsZjY0X1ZlcmRhdXg7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGYzMl9IYWxmCXZuX3ZlcnNpb247CS8qIHZlcnNpb24gbnVtYmVyIG9mIHN0cnVjdHVyZSAqLwotCUVsZjMyX0hhbGYJdm5fY250OwkJLyogbnVtYmVyIG9mIHZlcm5hdXggZW50cmllcyAqLwotCUVsZjMyX1dvcmQJdm5fZmlsZTsJLyogc3RyaW5nIHRhYmxlIG9mZnNldCBvZiBsaWJyYXJ5IG5hbWUqLwotCUVsZjMyX1dvcmQJdm5fYXV4OwkJLyogb2Zmc2V0IHRvIHZlcm5hdXggZW50cmllcyAqLwotCUVsZjMyX1dvcmQJdm5fbmV4dDsJLyogb2Zmc2V0IHRvIG5leHQgdmVybmVlZCAqLwotfSBFbGYzMl9WZXJuZWVkOwotdHlwZWRlZiBFbGYzMl9WZXJuZWVkCUVsZjY0X1Zlcm5lZWQ7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGYzMl9Xb3JkCXZuYV9oYXNoOwkvKiBIYXNoIG9mIGRlcGVuZGVuY3kgbmFtZSAqLwotCUVsZjMyX0hhbGYJdm5hX2ZsYWdzOwkvKiBmbGFncyAoVkVSX0ZMR18qKSAqLwotCUVsZjMyX0hhbGYJdm5hX290aGVyOwkvKiB1bnVzZWQgKi8KLQlFbGYzMl9Xb3JkCXZuYV9uYW1lOwkvKiBzdHJpbmcgdGFibGUgb2Zmc2V0IHRvIHZlcnNpb24gbmFtZSovCi0JRWxmMzJfV29yZAl2bmFfbmV4dDsJLyogb2Zmc2V0IHRvIG5leHQgdmVybmF1eCAqLwotfSBFbGYzMl9WZXJuYXV4OwotdHlwZWRlZiBFbGYzMl9WZXJuYXV4CUVsZjY0X1Zlcm5hdXg7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGYzMl9IYWxmCXZzX3ZlcnM7Ci19IEVsZjMyX1ZlcnN5bTsKLXR5cGVkZWYgRWxmMzJfVmVyc3ltCUVsZjY0X1ZlcnN5bTsKLQotI2lmZGVmIF9LRVJORUwKLQotI2RlZmluZSBFTEZfQVVYX0VOVFJJRVMgMTUJLyogTWF4IHNpemUgb2YgYXV4IGFycmF5IHBhc3NlZCB0byBsb2FkZXIgKi8KLSNkZWZpbmUgRUxGMzJfTk9fQUREUgkofihFbGYzMl9BZGRyKTApIC8qIEluZGljYXRlcyBhZGRyLiBub3QgeWV0IGZpbGxlZCBpbiAqLwotI2RlZmluZSBFTEYzMl9MSU5LX0FERFIgKChFbGYzMl9BZGRyKS0yKSAvKiBhZHZpc2VzIHRvIHVzZSBsaW5rIGFkZHJlc3MgKi8KLSNkZWZpbmUgRUxGNjRfTk9fQUREUgkofihFbGY2NF9BZGRyKTApIC8qIEluZGljYXRlcyBhZGRyLiBub3QgeWV0IGZpbGxlZCBpbiAqLwotI2RlZmluZSBFTEY2NF9MSU5LX0FERFIgKChFbGY2NF9BZGRyKS0yKSAvKiBhZHZpc2VzIHRvIHVzZSBsaW5rIGFkZHJlc3MgKi8KLQotI2lmIGRlZmluZWQoRUxGU0laRSkgJiYgKEVMRlNJWkUgPT0gNjQpCi0jZGVmaW5lIEVMRl9OT19BRERSCUVMRjY0X05PX0FERFIKLSNkZWZpbmUgRUxGX0xJTktfQUREUglFTEY2NF9MSU5LX0FERFIKLSNlbGlmIGRlZmluZWQoRUxGU0laRSkgJiYgKEVMRlNJWkUgPT0gMzIpCi0jZGVmaW5lIEVMRl9OT19BRERSCUVMRjMyX05PX0FERFIKLSNkZWZpbmUgRUxGX0xJTktfQUREUglFTEYzMl9MSU5LX0FERFIKLSNlbmRpZgotCi0jaWZuZGVmIEVMRjMyX0VIRFJfRkxBR1NfT0sKLSNkZWZpbmUgRUxGMzJfRUhEUl9GTEFHU19PSyhlaCkgMQotI2VuZGlmCi0KLSNpZm5kZWYgRUxGNjRfRUhEUl9GTEFHU19PSwotI2RlZmluZSBFTEY2NF9FSERSX0ZMQUdTX09LKGVoKSAxCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoRUxGU0laRSkgJiYgKEVMRlNJWkUgPT0gNjQpCi0jZGVmaW5lIEVMRl9FSERSX0ZMQUdTX09LKGVoKQlFTEY2NF9FSERSX0ZMQUdTX09LKGVoKQotI2Vsc2UKLSNkZWZpbmUgRUxGX0VIRFJfRkxBR1NfT0soZWgpCUVMRjMyX0VIRFJfRkxBR1NfT0soZWgpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoRUxGU0laRSkKLXN0cnVjdCBlbGZfYXJncyB7Ci0JRWxmX0FkZHIJYXJnX2VudHJ5OwkvKiBwcm9ncmFtIGVudHJ5IHBvaW50ICovCi0JRWxmX0FkZHIJYXJnX2ludGVycDsJLyogSW50ZXJwcmV0ZXIgbG9hZCBhZGRyZXNzICovCi0JRWxmX0FkZHIJYXJnX3BoYWRkcjsJLyogcHJvZ3JhbSBoZWFkZXIgYWRkcmVzcyAqLwotCUVsZl9BZGRyCWFyZ19waGVudHNpemU7CS8qIFNpemUgb2YgcHJvZ3JhbSBoZWFkZXIgKi8KLQlFbGZfQWRkcglhcmdfcGhudW07CS8qIE51bWJlciBvZiBwcm9ncmFtIGhlYWRlcnMgKi8KLX07Ci0jZW5kaWYKLQotI2lmZGVmIF9LRVJORUxfT1BUCi0jaW5jbHVkZSAib3B0X2V4ZWNmbXQuaCIKLSNlbmRpZgotCi1zdHJ1Y3QgcHNfc3RyaW5nczsKLQotI2lmZGVmIEVYRUNfRUxGMzIKLWludAlleGVjX2VsZjMyX21ha2VjbWRzKHN0cnVjdCBsd3AgKiwgc3RydWN0IGV4ZWNfcGFja2FnZSAqKTsKLWludAllbGYzMl9jb3B5YXJncyhzdHJ1Y3QgbHdwICosIHN0cnVjdCBleGVjX3BhY2thZ2UgKiwKLSAgICBzdHJ1Y3QgcHNfc3RyaW5ncyAqLCBjaGFyICoqLCB2b2lkICopOwotCi1pbnQJY29yZWR1bXBfZWxmMzIoc3RydWN0IGx3cCAqLCB2b2lkICopOwotaW50CWNvcmVkdW1wX3dyaXRlbm90ZV9lbGYzMihzdHJ1Y3QgcHJvYyAqLCB2b2lkICosIEVsZjMyX05oZHIgKiwKLSAgICBjb25zdCBjaGFyICosIHZvaWQgKik7Ci0KLWludAllbGYzMl9jaGVja19oZWFkZXIoRWxmMzJfRWhkciAqLCBpbnQpOwotI2VuZGlmCi0KLSNpZmRlZiBFWEVDX0VMRjY0Ci1pbnQJZXhlY19lbGY2NF9tYWtlY21kcyhzdHJ1Y3QgbHdwICosIHN0cnVjdCBleGVjX3BhY2thZ2UgKik7Ci1pbnQJZWxmNjRfY29weWFyZ3Moc3RydWN0IGx3cCAqLCBzdHJ1Y3QgZXhlY19wYWNrYWdlICosCi0gICAgc3RydWN0IHBzX3N0cmluZ3MgKiwgY2hhciAqKiwgdm9pZCAqKTsKLQotaW50CWNvcmVkdW1wX2VsZjY0KHN0cnVjdCBsd3AgKiwgdm9pZCAqKTsKLWludAljb3JlZHVtcF93cml0ZW5vdGVfZWxmNjQoc3RydWN0IHByb2MgKiwgdm9pZCAqLCBFbGY2NF9OaGRyICosCi0gICAgY29uc3QgY2hhciAqLCB2b2lkICopOwotCi1pbnQJZWxmNjRfY2hlY2tfaGVhZGVyKEVsZjY0X0VoZHIgKiwgaW50KTsKLSNlbmRpZgotCi0jZW5kaWYgLyogX0tFUk5FTCAqLwotCi0jZW5kaWYgLyogIV9TWVNfRVhFQ19FTEZfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvZnN1aWQuaCBiL2xpYmMvaW5jbHVkZS9zeXMvZnN1aWQuaAppbmRleCBiYzQ3ZTNkLi4wMzM1NWI3IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL2ZzdWlkLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9mc3VpZC5oCkBAIC0yNSw2ICsyNSw3IEBACiAgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgogICovCisKICNpZm5kZWYgX1NZU19GU1VJRF9IXwogI2RlZmluZSBfU1lTX0ZTVUlEX0hfCiAKQEAgLTMzLDEwICszNCw4IEBACiAKIF9fQkVHSU5fREVDTFMKIAotI2lmIDAgLyogTUlTU0lORyBGUk9NIEJJT05JQyAqLwogZXh0ZXJuIGludCBzZXRmc3VpZCh1aWRfdCk7CiBleHRlcm4gaW50IHNldGZzZ2lkKGdpZF90KTsKLSNlbmRpZiAvKiBNSVNTSU5HICovCiAKIF9fRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvZ2xpYmMtc3lzY2FsbHMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvZ2xpYmMtc3lzY2FsbHMuaAppbmRleCAzMTMxYjZiLi40NTllZTc4IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL2dsaWJjLXN5c2NhbGxzLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9nbGliYy1zeXNjYWxscy5oCkBAIC0yMTcsMTAgKzIxNywxMiBAQAogI2RlZmluZSBTWVNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKICNkZWZpbmUgU1lTX3NjaGVkX2dldF9wcmlvcml0eV9taW4gX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCiAjZGVmaW5lIFNZU19zY2hlZF9nZXRhZmZpbml0eSBfX05SX3NjaGVkX2dldGFmZmluaXR5CisjZGVmaW5lIFNZU19zY2hlZF9nZXRhdHRyIF9fTlJfc2NoZWRfZ2V0YXR0cgogI2RlZmluZSBTWVNfc2NoZWRfZ2V0cGFyYW0gX19OUl9zY2hlZF9nZXRwYXJhbQogI2RlZmluZSBTWVNfc2NoZWRfZ2V0c2NoZWR1bGVyIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCiAjZGVmaW5lIFNZU19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwKICNkZWZpbmUgU1lTX3NjaGVkX3NldGFmZmluaXR5IF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkKKyNkZWZpbmUgU1lTX3NjaGVkX3NldGF0dHIgX19OUl9zY2hlZF9zZXRhdHRyCiAjZGVmaW5lIFNZU19zY2hlZF9zZXRwYXJhbSBfX05SX3NjaGVkX3NldHBhcmFtCiAjZGVmaW5lIFNZU19zY2hlZF9zZXRzY2hlZHVsZXIgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIKICNkZWZpbmUgU1lTX3NjaGVkX3lpZWxkIF9fTlJfc2NoZWRfeWllbGQKQEAgLTU0NSwxMCArNTQ3LDEyIEBACiAjZGVmaW5lIFNZU19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAogI2RlZmluZSBTWVNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4KICNkZWZpbmUgU1lTX3NjaGVkX2dldGFmZmluaXR5IF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkKKyNkZWZpbmUgU1lTX3NjaGVkX2dldGF0dHIgX19OUl9zY2hlZF9nZXRhdHRyCiAjZGVmaW5lIFNZU19zY2hlZF9nZXRwYXJhbSBfX05SX3NjaGVkX2dldHBhcmFtCiAjZGVmaW5lIFNZU19zY2hlZF9nZXRzY2hlZHVsZXIgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIKICNkZWZpbmUgU1lTX3NjaGVkX3JyX2dldF9pbnRlcnZhbCBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAogI2RlZmluZSBTWVNfc2NoZWRfc2V0YWZmaW5pdHkgX19OUl9zY2hlZF9zZXRhZmZpbml0eQorI2RlZmluZSBTWVNfc2NoZWRfc2V0YXR0ciBfX05SX3NjaGVkX3NldGF0dHIKICNkZWZpbmUgU1lTX3NjaGVkX3NldHBhcmFtIF9fTlJfc2NoZWRfc2V0cGFyYW0KICNkZWZpbmUgU1lTX3NjaGVkX3NldHNjaGVkdWxlciBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgogI2RlZmluZSBTWVNfc2NoZWRfeWllbGQgX19OUl9zY2hlZF95aWVsZApAQCAtOTAyLDEwICs5MDYsMTIgQEAKICNkZWZpbmUgU1lTX3NjaGVkX2dldF9wcmlvcml0eV9tYXggX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CiAjZGVmaW5lIFNZU19zY2hlZF9nZXRfcHJpb3JpdHlfbWluIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgogI2RlZmluZSBTWVNfc2NoZWRfZ2V0YWZmaW5pdHkgX19OUl9zY2hlZF9nZXRhZmZpbml0eQorI2RlZmluZSBTWVNfc2NoZWRfZ2V0YXR0ciBfX05SX3NjaGVkX2dldGF0dHIKICNkZWZpbmUgU1lTX3NjaGVkX2dldHBhcmFtIF9fTlJfc2NoZWRfZ2V0cGFyYW0KICNkZWZpbmUgU1lTX3NjaGVkX2dldHNjaGVkdWxlciBfX05SX3NjaGVkX2dldHNjaGVkdWxlcgogI2RlZmluZSBTWVNfc2NoZWRfcnJfZ2V0X2ludGVydmFsIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCiAjZGVmaW5lIFNZU19zY2hlZF9zZXRhZmZpbml0eSBfX05SX3NjaGVkX3NldGFmZmluaXR5CisjZGVmaW5lIFNZU19zY2hlZF9zZXRhdHRyIF9fTlJfc2NoZWRfc2V0YXR0cgogI2RlZmluZSBTWVNfc2NoZWRfc2V0cGFyYW0gX19OUl9zY2hlZF9zZXRwYXJhbQogI2RlZmluZSBTWVNfc2NoZWRfc2V0c2NoZWR1bGVyIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCiAjZGVmaW5lIFNZU19zY2hlZF95aWVsZCBfX05SX3NjaGVkX3lpZWxkCkBAIC0xMjU4LDEwICsxMjY0LDEyIEBACiAjZGVmaW5lIFNZU19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAogI2RlZmluZSBTWVNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4KICNkZWZpbmUgU1lTX3NjaGVkX2dldGFmZmluaXR5IF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkKKyNkZWZpbmUgU1lTX3NjaGVkX2dldGF0dHIgX19OUl9zY2hlZF9nZXRhdHRyCiAjZGVmaW5lIFNZU19zY2hlZF9nZXRwYXJhbSBfX05SX3NjaGVkX2dldHBhcmFtCiAjZGVmaW5lIFNZU19zY2hlZF9nZXRzY2hlZHVsZXIgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIKICNkZWZpbmUgU1lTX3NjaGVkX3JyX2dldF9pbnRlcnZhbCBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAogI2RlZmluZSBTWVNfc2NoZWRfc2V0YWZmaW5pdHkgX19OUl9zY2hlZF9zZXRhZmZpbml0eQorI2RlZmluZSBTWVNfc2NoZWRfc2V0YXR0ciBfX05SX3NjaGVkX3NldGF0dHIKICNkZWZpbmUgU1lTX3NjaGVkX3NldHBhcmFtIF9fTlJfc2NoZWRfc2V0cGFyYW0KICNkZWZpbmUgU1lTX3NjaGVkX3NldHNjaGVkdWxlciBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgogI2RlZmluZSBTWVNfc2NoZWRfeWllbGQgX19OUl9zY2hlZF95aWVsZApAQCAtMTU4NiwxMCArMTU5NCwxMiBAQAogI2RlZmluZSBTWVNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKICNkZWZpbmUgU1lTX3NjaGVkX2dldF9wcmlvcml0eV9taW4gX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCiAjZGVmaW5lIFNZU19zY2hlZF9nZXRhZmZpbml0eSBfX05SX3NjaGVkX2dldGFmZmluaXR5CisjZGVmaW5lIFNZU19zY2hlZF9nZXRhdHRyIF9fTlJfc2NoZWRfZ2V0YXR0cgogI2RlZmluZSBTWVNfc2NoZWRfZ2V0cGFyYW0gX19OUl9zY2hlZF9nZXRwYXJhbQogI2RlZmluZSBTWVNfc2NoZWRfZ2V0c2NoZWR1bGVyIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCiAjZGVmaW5lIFNZU19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwKICNkZWZpbmUgU1lTX3NjaGVkX3NldGFmZmluaXR5IF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkKKyNkZWZpbmUgU1lTX3NjaGVkX3NldGF0dHIgX19OUl9zY2hlZF9zZXRhdHRyCiAjZGVmaW5lIFNZU19zY2hlZF9zZXRwYXJhbSBfX05SX3NjaGVkX3NldHBhcmFtCiAjZGVmaW5lIFNZU19zY2hlZF9zZXRzY2hlZHVsZXIgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIKICNkZWZpbmUgU1lTX3NjaGVkX3lpZWxkIF9fTlJfc2NoZWRfeWllbGQKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvaW9jdGwuaCBiL2xpYmMvaW5jbHVkZS9zeXMvaW9jdGwuaAppbmRleCA0OWQ0NTJjLi5hMTAxNGRjIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL2lvY3RsLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9pb2N0bC5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgogI2luY2x1ZGUgPGFzbS90ZXJtYml0cy5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bF9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KIAogX19CRUdJTl9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2tsb2cuaCBiL2xpYmMvaW5jbHVkZS9zeXMva2xvZy5oCmluZGV4IDAyODUxZDIuLmFjZmFhMjAgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMva2xvZy5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMva2xvZy5oCkBAIC0yNSw2ICsyNSw3IEBACiAgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgogICovCisKICNpZm5kZWYgX1NZU19LTE9HX0hfCiAjZGVmaW5lIF9TWVNfS0xPR19IXwogCkBAIC00NSwxMyArNDYsNiBAQAogI2RlZmluZSBLTE9HX1NJWkVfVU5SRUFEICAgOQogI2RlZmluZSBLTE9HX1NJWkVfQlVGRkVSICAgMTAKIAotLyogVGhlc2UgYXJlIGRlcHJlY2F0ZWQgbmFtZXMgdGhhdCB3ZXJlIHVzZWQgaW4gZWFybGllciBiaW9uaWMgcmVsZWFzZXMuIERvIG5vdCB1c2UuICovCi0jZGVmaW5lIEtMT0dfRElTQUJMRSA2Ci0jZGVmaW5lIEtMT0dfRU5BQkxFIDcKLSNkZWZpbmUgS0xPR19TRVRMRVZFTCA4Ci0jZGVmaW5lIEtMT0dfVU5SRUFEU0laRSA5Ci0jZGVmaW5lIEtMT0dfV1JJVEUgMTAKLQogZXh0ZXJuIGludCBrbG9nY3RsKGludCwgY2hhciAqLCBpbnQpOwogCiBfX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9saW1pdHMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvbGltaXRzLmgKaW5kZXggMzZmNzNiMi4uYzUwZWIxMCAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9saW1pdHMuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2xpbWl0cy5oCkBAIC0zMSw5ICszMSw2IEBACiAKIC8qIENvbW1vbiBkZWZpbml0aW9ucyBmb3IgbGltaXRzLmguICovCiAKLS8qIExlZ2FjeSAqLwotI2luY2x1ZGUgPG1hY2hpbmUvbGltaXRzLmg+Ci0KICNkZWZpbmUJQ0hBUl9CSVQJOAkJLyogbnVtYmVyIG9mIGJpdHMgaW4gYSBjaGFyICovCiAKICNkZWZpbmUJU0NIQVJfTUFYCTB4N2YJCS8qIG1heCB2YWx1ZSBmb3IgYSBzaWduZWQgY2hhciAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9tbWFuLmggYi9saWJjL2luY2x1ZGUvc3lzL21tYW4uaAppbmRleCA3YzVmOGQ3Li41YThjOTg1IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL21tYW4uaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL21tYW4uaApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tbWFuLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogX19CRUdJTl9ERUNMUwogCkBAIC00NCwyMyArNDMsMjMgQEAKICNkZWZpbmUgTVJFTUFQX01BWU1PVkUgIDEKICNkZWZpbmUgTVJFTUFQX0ZJWEVEICAgIDIKIAotZXh0ZXJuIHZvaWQqICBtbWFwKHZvaWQgKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBvZmZfdCk7Ci1leHRlcm4gdm9pZCogIG1tYXA2NCh2b2lkICosIHNpemVfdCwgaW50LCBpbnQsIGludCwgb2ZmNjRfdCk7Ci1leHRlcm4gaW50ICAgIG11bm1hcCh2b2lkICosIHNpemVfdCk7Ci1leHRlcm4gaW50ICAgIG1zeW5jKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOwotZXh0ZXJuIGludCAgICBtcHJvdGVjdChjb25zdCB2b2lkICosIHNpemVfdCwgaW50KTsKLWV4dGVybiB2b2lkKiAgbXJlbWFwKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQqIG1tYXAodm9pZCosIHNpemVfdCwgaW50LCBpbnQsIGludCwgb2ZmX3QpOworZXh0ZXJuIHZvaWQqIG1tYXA2NCh2b2lkKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBvZmY2NF90KTsKK2V4dGVybiBpbnQgbXVubWFwKHZvaWQqLCBzaXplX3QpOworZXh0ZXJuIGludCBtc3luYyhjb25zdCB2b2lkKiwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIGludCBtcHJvdGVjdChjb25zdCB2b2lkKiwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIHZvaWQqIG1yZW1hcCh2b2lkKiwgc2l6ZV90LCBzaXplX3QsIHVuc2lnbmVkIGxvbmcpOwogCi1leHRlcm4gaW50ICAgIG1sb2NrYWxsKGludCk7Ci1leHRlcm4gaW50ICAgIG11bmxvY2thbGwodm9pZCk7Ci1leHRlcm4gaW50ICAgIG1sb2NrKGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKLWV4dGVybiBpbnQgICAgbXVubG9jayhjb25zdCB2b2lkICosIHNpemVfdCk7Ci1leHRlcm4gaW50ICAgIG1hZHZpc2UoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CitleHRlcm4gaW50IG1sb2NrYWxsKGludCk7CitleHRlcm4gaW50IG11bmxvY2thbGwodm9pZCk7CitleHRlcm4gaW50IG1sb2NrKGNvbnN0IHZvaWQqLCBzaXplX3QpOworZXh0ZXJuIGludCBtdW5sb2NrKGNvbnN0IHZvaWQqLCBzaXplX3QpOworZXh0ZXJuIGludCBtYWR2aXNlKGNvbnN0IHZvaWQqLCBzaXplX3QsIGludCk7CiAKLWV4dGVybiBpbnQgICAgbWxvY2soY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbik7Ci1leHRlcm4gaW50ICAgIG11bmxvY2soY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbik7CitleHRlcm4gaW50IG1sb2NrKGNvbnN0IHZvaWQqLCBzaXplX3QpOworZXh0ZXJuIGludCBtdW5sb2NrKGNvbnN0IHZvaWQqLCBzaXplX3QpOwogCi1leHRlcm4gaW50ICAgIG1pbmNvcmUodm9pZCogIHN0YXJ0LCBzaXplX3QgIGxlbmd0aCwgdW5zaWduZWQgY2hhciogIHZlYyk7CitleHRlcm4gaW50IG1pbmNvcmUodm9pZCosIHNpemVfdCwgdW5zaWduZWQgY2hhciopOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3BhcmFtLmggYi9saWJjL2luY2x1ZGUvc3lzL3BhcmFtLmgKaW5kZXggMzdjNjQyNy4uZTY0ZDZjZSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9wYXJhbS5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvcGFyYW0uaApAQCAtMzQsMTYgKzM0LDYgQEAKICNkZWZpbmUgTUFYUEFUSExFTiAgUEFUSF9NQVgKICNkZWZpbmUgTUFYU1lNTElOS1MgOAogCi0jaWYgX19MUDY0X18KLSNkZWZpbmUgQUxJR05CWVRFUyA3Ci0jZWxzZQotI2RlZmluZSBBTElHTkJZVEVTIDMKLSNlbmRpZgotCi0jaWZuZGVmIEFMSUdOCi0jZGVmaW5lIEFMSUdOKHApICgoKHVpbnRwdHJfdCkocCkgKyBBTElHTkJZVEVTKSAmfiBBTElHTkJZVEVTKQotI2VuZGlmCi0KIC8qIE1hY3JvcyBmb3IgY291bnRpbmcgYW5kIHJvdW5kaW5nLiAqLwogI2lmbmRlZiBob3dtYW55CiAjZGVmaW5lIGhvd21hbnkoeCwgeSkgICAoKCh4KSsoKHkpLTEpKS8oeSkpCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3ByY3RsLmggYi9saWJjL2luY2x1ZGUvc3lzL3ByY3RsLmgKaW5kZXggMDBlNTgzNy4uZDk2YjhiNiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9wcmN0bC5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvcHJjdGwuaApAQCAtMjUsMjMgKzI1LDE4IEBACiAgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgogICovCisKICNpZm5kZWYgX1NZU19QUkNUTF9ICiAjZGVmaW5lIF9TWVNfUFJDVExfSAogCi0jaW5jbHVkZSA8bGludXgvcHJjdGwuaD4KICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KIAorI2luY2x1ZGUgPGxpbnV4L3ByY3RsLmg+CisKIF9fQkVHSU5fREVDTFMKIAotLyogSU1QT1JUQU5UIE5PVEU6IFRoaXMgZnVuY3Rpb24gaXMgZGVjbGFyZWQgYXMgdGFraW5nIGEgdmFyaWFibGUgbnVtYmVyCi0gKiAgICAgICAgICAgICAgICAgb2YgYXJndW1lbnRzIHRvIG1hdGNoIHRoZSBHTGliYyBkZWZpbml0aW9uLiBIb3dldmVyCi0gKiAgICAgICAgICAgICAgICAgaXRzIGRlY2xhcmF0aW9uIGluc2lkZSBTWVNDQUxMUy5UWFQgKm11c3QqIG1ha2UgaXQKLSAqICAgICAgICAgICAgICAgICB0YWtlIDYgYXJndW1lbnRzIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSB3aXRoIHRoZSBrZXJuZWwKLSAqICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi4KLSAqLwogZXh0ZXJuIGludCBwcmN0bChpbnQgb3B0aW9uLCAuLi4pOwogCiBfX0VORF9ERUNMUwogCiAjZW5kaWYgLyogX1NZU19QUkNUTF9IICovCi0KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvcHRyYWNlLmggYi9saWJjL2luY2x1ZGUvc3lzL3B0cmFjZS5oCmluZGV4IDg0ODQxNmIuLjhiYmE5ZmUgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvcHRyYWNlLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9wdHJhY2UuaApAQCAtMzAsMTUgKzMwLDE1IEBACiAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLS8qIEZvciBhbGwgb2YgdGhlIGRlZmluZXMgKi8KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KIAogX19CRUdJTl9ERUNMUwogCi0jZGVmaW5lIFBUUkFDRV9QT0tFVVNFUiAgICAgUFRSQUNFX1BPS0VVU1IKLSNkZWZpbmUgUFRSQUNFX1BFRUtVU0VSICAgICBQVFJBQ0VfUEVFS1VTUgorLyogZ2xpYmMgdXNlcyBkaWZmZXJlbnQgbmFtZXMgZnJvbSB0aGUga2VybmVsIGZvciB0aGVzZSB0d28uLi4gKi8KKyNkZWZpbmUgUFRSQUNFX1BPS0VVU0VSIFBUUkFDRV9QT0tFVVNSCisjZGVmaW5lIFBUUkFDRV9QRUVLVVNFUiBQVFJBQ0VfUEVFS1VTUgogCi1leHRlcm4gbG9uZyBwdHJhY2UoaW50IHJlcXVlc3QsIHBpZF90IHBpZCwgdm9pZCAqYWRkciwgdm9pZCAqZGF0YSk7CitleHRlcm4gbG9uZyBwdHJhY2UoaW50LCAuLi4pOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3NvY2tldC5oIGIvbGliYy9pbmNsdWRlL3N5cy9zb2NrZXQuaAppbmRleCAzMmQ5OGVhLi5hZTJmMjM4IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL3NvY2tldC5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc29ja2V0LmgKQEAgLTQzLDggKzQzLDkgQEAKIF9fQkVHSU5fREVDTFMKIAogI2RlZmluZSBzb2NrYWRkcl9zdG9yYWdlIF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UKLXR5cGVkZWYgX19zYV9mYW1pbHlfdCBzYV9mYW1pbHlfdDsKLXR5cGVkZWYgaW50IHNvY2tsZW5fdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgc2FfZmFtaWx5X3Q7CisKK3N0cnVjdCB0aW1lc3BlYzsKIAogI2lmZGVmIF9fbWlwc19fCiAjZGVmaW5lIFNPQ0tfREdSQU0gICAgICAxCkBAIC03Niw2OSArNzcsNTYgQEAKIH07CiAKIHN0cnVjdCBzb2NrYWRkciB7Ci0gc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OwotIGNoYXIgc2FfZGF0YVsxNF07CisgIHNhX2ZhbWlseV90IHNhX2ZhbWlseTsKKyAgY2hhciBzYV9kYXRhWzE0XTsKIH07CiAKIHN0cnVjdCBsaW5nZXIgewotIGludCBsX29ub2ZmOwotIGludCBsX2xpbmdlcjsKKyAgaW50IGxfb25vZmY7CisgIGludCBsX2xpbmdlcjsKIH07CiAKIHN0cnVjdCBtc2doZHIgewotIHZvaWQgKiBtc2dfbmFtZTsKLSBpbnQgbXNnX25hbWVsZW47Ci0gc3RydWN0IGlvdmVjICogbXNnX2lvdjsKLSBfX2tlcm5lbF9zaXplX3QgbXNnX2lvdmxlbjsKLSB2b2lkICogbXNnX2NvbnRyb2w7Ci0gX19rZXJuZWxfc2l6ZV90IG1zZ19jb250cm9sbGVuOwotIHVuc2lnbmVkIG1zZ19mbGFnczsKKyAgdm9pZCogbXNnX25hbWU7CisgIHNvY2tsZW5fdCBtc2dfbmFtZWxlbjsKKyAgc3RydWN0IGlvdmVjKiBtc2dfaW92OworICBzaXplX3QgbXNnX2lvdmxlbjsKKyAgdm9pZCogbXNnX2NvbnRyb2w7CisgIHNpemVfdCBtc2dfY29udHJvbGxlbjsKKyAgaW50IG1zZ19mbGFnczsKK307CisKK3N0cnVjdCBtbXNnaGRyIHsKKyAgc3RydWN0IG1zZ2hkciBtc2dfaGRyOworICB1bnNpZ25lZCBpbnQgbXNnX2xlbjsKIH07CiAKIHN0cnVjdCBjbXNnaGRyIHsKLSBfX2tlcm5lbF9zaXplX3QgY21zZ19sZW47Ci0gaW50IGNtc2dfbGV2ZWw7Ci0gaW50IGNtc2dfdHlwZTsKKyAgc2l6ZV90IGNtc2dfbGVuOworICBpbnQgY21zZ19sZXZlbDsKKyAgaW50IGNtc2dfdHlwZTsKIH07CiAKLSNkZWZpbmUgX19DTVNHX05YVEhEUihjdGwsIGxlbiwgY21zZykgX19jbXNnX254dGhkcigoY3RsKSwobGVuKSwoY21zZykpCi0jZGVmaW5lIENNU0dfTlhUSERSKG1oZHIsIGNtc2cpIGNtc2dfbnh0aGRyKChtaGRyKSwgKGNtc2cpKQorI2RlZmluZSBDTVNHX05YVEhEUihtaGRyLCBjbXNnKSBfX2Ntc2dfbnh0aGRyKChtaGRyKSwgKGNtc2cpKQogI2RlZmluZSBDTVNHX0FMSUdOKGxlbikgKCAoKGxlbikrc2l6ZW9mKGxvbmcpLTEpICYgfihzaXplb2YobG9uZyktMSkgKQotI2RlZmluZSBDTVNHX0RBVEEoY21zZykgKCh2b2lkICopKChjaGFyICopKGNtc2cpICsgQ01TR19BTElHTihzaXplb2Yoc3RydWN0IGNtc2doZHIpKSkpCisjZGVmaW5lIENNU0dfREFUQShjbXNnKSAoKHZvaWQqKSgoY2hhciopKGNtc2cpICsgQ01TR19BTElHTihzaXplb2Yoc3RydWN0IGNtc2doZHIpKSkpCiAjZGVmaW5lIENNU0dfU1BBQ0UobGVuKSAoQ01TR19BTElHTihzaXplb2Yoc3RydWN0IGNtc2doZHIpKSArIENNU0dfQUxJR04obGVuKSkKICNkZWZpbmUgQ01TR19MRU4obGVuKSAoQ01TR19BTElHTihzaXplb2Yoc3RydWN0IGNtc2doZHIpKSArIChsZW4pKQotI2RlZmluZSBfX0NNU0dfRklSU1RIRFIoY3RsLGxlbikgKChsZW4pID49IHNpemVvZihzdHJ1Y3QgY21zZ2hkcikgPyAgIChzdHJ1Y3QgY21zZ2hkciAqKShjdGwpIDogICAoc3RydWN0IGNtc2doZHIgKilOVUxMKQotI2RlZmluZSBDTVNHX0ZJUlNUSERSKG1zZykgX19DTVNHX0ZJUlNUSERSKChtc2cpLT5tc2dfY29udHJvbCwgKG1zZyktPm1zZ19jb250cm9sbGVuKQotI2RlZmluZSBDTVNHX09LKG1oZHIsIGNtc2cpICgoY21zZyktPmNtc2dfbGVuID49IHNpemVvZihzdHJ1Y3QgY21zZ2hkcikgJiYgICAoY21zZyktPmNtc2dfbGVuIDw9ICh1bnNpZ25lZCBsb25nKSAgICgobWhkciktPm1zZ19jb250cm9sbGVuIC0gICAoKGNoYXIgKikoY21zZykgLSAoY2hhciAqKShtaGRyKS0+bXNnX2NvbnRyb2wpKSkKKyNkZWZpbmUgQ01TR19GSVJTVEhEUihtc2cpIFwKKyAgKChtc2cpLT5tc2dfY29udHJvbGxlbiA+PSBzaXplb2Yoc3RydWN0IGNtc2doZHIpIFwKKyAgID8gKHN0cnVjdCBjbXNnaGRyKikgKG1zZyktPm1zZ19jb250cm9sIDogKHN0cnVjdCBjbXNnaGRyKikgTlVMTCkKKyNkZWZpbmUgQ01TR19PSyhtaGRyLCBjbXNnKSAoKGNtc2cpLT5jbXNnX2xlbiA+PSBzaXplb2Yoc3RydWN0IGNtc2doZHIpICYmICAgKGNtc2cpLT5jbXNnX2xlbiA8PSAodW5zaWduZWQgbG9uZykgICAoKG1oZHIpLT5tc2dfY29udHJvbGxlbiAtICAgKChjaGFyKikoY21zZykgLSAoY2hhciopKG1oZHIpLT5tc2dfY29udHJvbCkpKQogCi0jaWZkZWYgX19HTlVDX18KLSNkZWZpbmUgX19LSU5MSU5FIHN0YXRpYyBfX2lubGluZV9fCi0jZWxpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQotI2RlZmluZSBfX0tJTkxJTkUgc3RhdGljIGlubGluZQotI2Vsc2UKLSNkZWZpbmUgX19LSU5MSU5FIHN0YXRpYwotI2VuZGlmCi0KLV9fS0lOTElORSBzdHJ1Y3QgY21zZ2hkciAqIF9fY21zZ19ueHRoZHIodm9pZCAqX19jdGwsIF9fa2VybmVsX3NpemVfdCBfX3NpemUsIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2cpIHsKLSBzdHJ1Y3QgY21zZ2hkciAqIF9fcHRyOwotIF9fcHRyID0gKHN0cnVjdCBjbXNnaGRyKikoKCh1bnNpZ25lZCBjaGFyICopIF9fY21zZykgKyBDTVNHX0FMSUdOKF9fY21zZy0+Y21zZ19sZW4pKTsKLSBpZiAoKHVuc2lnbmVkIGxvbmcpKChjaGFyKikoX19wdHIrMSkgLSAoY2hhciAqKSBfX2N0bCkgPiBfX3NpemUpCi0gcmV0dXJuIChzdHJ1Y3QgY21zZ2hkciAqKTA7Ci0gcmV0dXJuIF9fcHRyOwotfQotCi1fX0tJTkxJTkUgc3RydWN0IGNtc2doZHIgKiBjbXNnX254dGhkciAoc3RydWN0IG1zZ2hkciAqX19tc2csIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2cpIHsKLSByZXR1cm4gX19jbXNnX254dGhkcihfX21zZy0+bXNnX2NvbnRyb2wsIF9fbXNnLT5tc2dfY29udHJvbGxlbiwgX19jbXNnKTsKLX0KK3N0cnVjdCBjbXNnaGRyKiBfX2Ntc2dfbnh0aGRyKHN0cnVjdCBtc2doZHIqLCBzdHJ1Y3QgY21zZ2hkciopOwogCiAjZGVmaW5lIFNDTV9SSUdIVFMgMHgwMQogI2RlZmluZSBTQ01fQ1JFREVOVElBTFMgMHgwMgogI2RlZmluZSBTQ01fU0VDVVJJVFkgMHgwMwogCiBzdHJ1Y3QgdWNyZWQgewotIF9fdTMyIHBpZDsKLSBfX3UzMiB1aWQ7Ci0gX191MzIgZ2lkOworICBwaWRfdCBwaWQ7CisgIHVpZF90IHVpZDsKKyAgZ2lkX3QgZ2lkOwogfTsKIAogI2RlZmluZSBBRl9VTlNQRUMgMApAQCAtMjQyLDYgKzIzMCw5IEBACiAjZGVmaW5lIE1TR19FUlJRVUVVRSAweDIwMDAKICNkZWZpbmUgTVNHX05PU0lHTkFMIDB4NDAwMAogI2RlZmluZSBNU0dfTU9SRSAweDgwMDAKKyNkZWZpbmUgTVNHX1dBSVRGT1JPTkUgMHgxMDAwMAorI2RlZmluZSBNU0dfRkFTVE9QRU4gMHgyMDAwMDAwMAorI2RlZmluZSBNU0dfQ01TR19DTE9FWEVDIDB4NDAwMDAwMDAKICNkZWZpbmUgTVNHX0VPRiBNU0dfRklOCiAjZGVmaW5lIE1TR19DTVNHX0NPTVBBVCAwCiAKQEAgLTI3Nyw0MyArMjY4LDQ2IEBACiAjIGRlZmluZSBfX3NvY2tldGNhbGwgZXh0ZXJuCiAjZW5kaWYKIAotX19zb2NrZXRjYWxsIGludCBzb2NrZXQoaW50LCBpbnQsIGludCk7Ci1fX3NvY2tldGNhbGwgaW50IGJpbmQoaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50KTsKLV9fc29ja2V0Y2FsbCBpbnQgY29ubmVjdChpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QpOworX19zb2NrZXRjYWxsIGludCBhY2NlcHQoaW50LCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QqKTsKK19fc29ja2V0Y2FsbCBpbnQgYWNjZXB0NChpbnQsIHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCosIGludCk7CitfX3NvY2tldGNhbGwgaW50IGJpbmQoaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqLCBpbnQpOworX19zb2NrZXRjYWxsIGludCBjb25uZWN0KGludCwgY29uc3Qgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KTsKK19fc29ja2V0Y2FsbCBpbnQgZ2V0cGVlcm5hbWUoaW50LCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QqKTsKK19fc29ja2V0Y2FsbCBpbnQgZ2V0c29ja25hbWUoaW50LCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QqKTsKK19fc29ja2V0Y2FsbCBpbnQgZ2V0c29ja29wdChpbnQsIGludCwgaW50LCB2b2lkKiwgc29ja2xlbl90Kik7CiBfX3NvY2tldGNhbGwgaW50IGxpc3RlbihpbnQsIGludCk7Ci1fX3NvY2tldGNhbGwgaW50IGFjY2VwdChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKik7Ci1fX3NvY2tldGNhbGwgaW50IGdldHNvY2tuYW1lKGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKTsKLV9fc29ja2V0Y2FsbCBpbnQgZ2V0cGVlcm5hbWUoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopOwotX19zb2NrZXRjYWxsIGludCBzb2NrZXRwYWlyKGludCwgaW50LCBpbnQsIGludCAqKTsKK19fc29ja2V0Y2FsbCBpbnQgcmVjdm1tc2coaW50LCBzdHJ1Y3QgbW1zZ2hkciosIHVuc2lnbmVkIGludCwgaW50LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqKTsKK19fc29ja2V0Y2FsbCBpbnQgcmVjdm1zZyhpbnQsIHN0cnVjdCBtc2doZHIqLCBpbnQpOworX19zb2NrZXRjYWxsIGludCBzZW5kbW1zZyhpbnQsIGNvbnN0IHN0cnVjdCBtbXNnaGRyKiwgdW5zaWduZWQgaW50LCBpbnQpOworX19zb2NrZXRjYWxsIGludCBzZW5kbXNnKGludCwgY29uc3Qgc3RydWN0IG1zZ2hkciosIGludCk7CitfX3NvY2tldGNhbGwgaW50IHNldHNvY2tvcHQoaW50LCBpbnQsIGludCwgY29uc3Qgdm9pZCosIHNvY2tsZW5fdCk7CiBfX3NvY2tldGNhbGwgaW50IHNodXRkb3duKGludCwgaW50KTsKLV9fc29ja2V0Y2FsbCBpbnQgc2V0c29ja29wdChpbnQsIGludCwgaW50LCBjb25zdCB2b2lkICosIHNvY2tsZW5fdCk7Ci1fX3NvY2tldGNhbGwgaW50IGdldHNvY2tvcHQoaW50LCBpbnQsIGludCwgdm9pZCAqLCBzb2NrbGVuX3QgKik7Ci1fX3NvY2tldGNhbGwgaW50IHNlbmRtc2coaW50LCBjb25zdCBzdHJ1Y3QgbXNnaGRyICosIHVuc2lnbmVkIGludCk7Ci1fX3NvY2tldGNhbGwgaW50IHJlY3Ztc2coaW50LCBzdHJ1Y3QgbXNnaGRyICosIHVuc2lnbmVkIGludCk7CitfX3NvY2tldGNhbGwgaW50IHNvY2tldChpbnQsIGludCwgaW50KTsKK19fc29ja2V0Y2FsbCBpbnQgc29ja2V0cGFpcihpbnQsIGludCwgaW50LCBpbnQqKTsKIAotZXh0ZXJuICBzc2l6ZV90ICBzZW5kKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gIHNzaXplX3QgIHJlY3YoaW50LCB2b2lkICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBzc2l6ZV90IHNlbmQoaW50LCBjb25zdCB2b2lkKiwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIHNzaXplX3QgcmVjdihpbnQsIHZvaWQqLCBzaXplX3QsIGludCk7CiAKLV9fc29ja2V0Y2FsbCBzc2l6ZV90IHNlbmR0byhpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QpOwotX19zb2NrZXRjYWxsIHNzaXplX3QgcmVjdmZyb20oaW50LCB2b2lkICosIHNpemVfdCwgdW5zaWduZWQgaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopOworX19zb2NrZXRjYWxsIHNzaXplX3Qgc2VuZHRvKGludCwgY29uc3Qgdm9pZCosIHNpemVfdCwgaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QpOworX19zb2NrZXRjYWxsIHNzaXplX3QgcmVjdmZyb20oaW50LCB2b2lkKiwgc2l6ZV90LCBpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCopOwogCiAjaWYgZGVmaW5lZChfX0JJT05JQ19GT1JUSUZZKQogX19lcnJvcmRlY2woX19yZWN2ZnJvbV9lcnJvciwgInJlY3Zmcm9tIGNhbGxlZCB3aXRoIHNpemUgYmlnZ2VyIHRoYW4gYnVmZmVyIik7Ci1leHRlcm4gc3NpemVfdCBfX3JlY3Zmcm9tX2NoayhpbnQsIHZvaWQqLCBzaXplX3QsIHNpemVfdCwgdW5zaWduZWQgaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QgKik7Ci1leHRlcm4gc3NpemVfdCBfX3JlY3Zmcm9tX3JlYWwoaW50LCB2b2lkICosIHNpemVfdCwgdW5zaWduZWQgaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QqKQorZXh0ZXJuIHNzaXplX3QgX19yZWN2ZnJvbV9jaGsoaW50LCB2b2lkKiwgc2l6ZV90LCBzaXplX3QsIGludCwgY29uc3Qgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90Kik7CitleHRlcm4gc3NpemVfdCBfX3JlY3Zmcm9tX3JlYWwoaW50LCB2b2lkKiwgc2l6ZV90LCBpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCopCiAgICAgX19hc21fXyhfX1VTRVJfTEFCRUxfUFJFRklYX18gInJlY3Zmcm9tIik7CiAKIF9fQklPTklDX0ZPUlRJRllfSU5MSU5FCi1zc2l6ZV90IHJlY3Zmcm9tKGludCBmZCwgdm9pZCogYnVmLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciogc3JjX2FkZHIsIHNvY2tsZW5fdCogYWRkcmxlbikgeworc3NpemVfdCByZWN2ZnJvbShpbnQgZmQsIHZvaWQqIGJ1Ziwgc2l6ZV90IGxlbiwgaW50IGZsYWdzLCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqIHNyY19hZGRyLCBzb2NrbGVuX3QqIGFkZHJfbGVuKSB7CiAgIHNpemVfdCBib3MgPSBfX2JvczAoYnVmKTsKIAogI2lmICFkZWZpbmVkKF9fY2xhbmdfXykKICAgaWYgKGJvcyA9PSBfX0JJT05JQ19GT1JUSUZZX1VOS05PV05fU0laRSkgewotICAgIHJldHVybiBfX3JlY3Zmcm9tX3JlYWwoZmQsIGJ1ZiwgbGVuLCBmbGFncywgc3JjX2FkZHIsIGFkZHJsZW4pOworICAgIHJldHVybiBfX3JlY3Zmcm9tX3JlYWwoZmQsIGJ1ZiwgbGVuLCBmbGFncywgc3JjX2FkZHIsIGFkZHJfbGVuKTsKICAgfQogCiAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChsZW4pICYmIChsZW4gPD0gYm9zKSkgewotICAgIHJldHVybiBfX3JlY3Zmcm9tX3JlYWwoZmQsIGJ1ZiwgbGVuLCBmbGFncywgc3JjX2FkZHIsIGFkZHJsZW4pOworICAgIHJldHVybiBfX3JlY3Zmcm9tX3JlYWwoZmQsIGJ1ZiwgbGVuLCBmbGFncywgc3JjX2FkZHIsIGFkZHJfbGVuKTsKICAgfQogCiAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChsZW4pICYmIChsZW4gPiBib3MpKSB7CkBAIC0zMjEsMTIgKzMxNSwxMiBAQAogICB9CiAjZW5kaWYKIAotICByZXR1cm4gX19yZWN2ZnJvbV9jaGsoZmQsIGJ1ZiwgbGVuLCBib3MsIGZsYWdzLCBzcmNfYWRkciwgYWRkcmxlbik7CisgIHJldHVybiBfX3JlY3Zmcm9tX2NoayhmZCwgYnVmLCBsZW4sIGJvcywgZmxhZ3MsIHNyY19hZGRyLCBhZGRyX2xlbik7CiB9CiAKIF9fQklPTklDX0ZPUlRJRllfSU5MSU5FCi1zc2l6ZV90IHJlY3YoaW50IHNvY2tldCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsKLSAgcmV0dXJuIHJlY3Zmcm9tKHNvY2tldCwgYnVmLCBidWZsZW4sIGZsYWdzLCBOVUxMLCAwKTsKK3NzaXplX3QgcmVjdihpbnQgc29ja2V0LCB2b2lkKiBidWYsIHNpemVfdCBsZW4sIGludCBmbGFncykgeworICByZXR1cm4gcmVjdmZyb20oc29ja2V0LCBidWYsIGxlbiwgZmxhZ3MsIE5VTEwsIDApOwogfQogCiAjZW5kaWYgLyogX19CSU9OSUNfRk9SVElGWSAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9zb2NrZXRjYWxscy5oIGIvbGliYy9pbmNsdWRlL3N5cy9zb2NrZXRjYWxscy5oCmluZGV4IGM3NGY0NjMuLjEzMWUwYmIgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvc29ja2V0Y2FsbHMuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3NvY2tldGNhbGxzLmgKQEAgLTQ3LDUgKzQ3LDggQEAKICNkZWZpbmUgU1lTX0dFVFNPQ0tPUFQgIDE1ICAgICAgICAgICAgICAvKiBzeXNfZ2V0c29ja29wdCgyKSAgICAgICAgICAgICovCiAjZGVmaW5lIFNZU19TRU5ETVNHICAgICAxNiAgICAgICAgICAgICAgLyogc3lzX3NlbmRtc2coMikgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTWVNfUkVDVk1TRyAgICAgMTcgICAgICAgICAgICAgIC8qIHN5c19yZWN2bXNnKDIpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0FDQ0VQVDQgICAgIDE4ICAgICAgICAgICAgICAvKiBzeXNfYWNjZXB0NCgyKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNZU19SRUNWTU1TRyAgICAxOSAgICAgICAgICAgICAgLyogc3lzX3JlY3ZtbXNnKDIpICAgICAgICAgICAgICAqLworI2RlZmluZSBTWVNfU0VORE1NU0cgICAgMjAgICAgICAgICAgICAgIC8qIHN5c19zZW5kbW1zZygyKSAgICAgICAgICAgICAgKi8KIAogI2VuZGlmIC8qIF9TWVNfU09DS0VUQ0FMTFNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvc3RhdC5oIGIvbGliYy9pbmNsdWRlL3N5cy9zdGF0LmgKaW5kZXggM2Q3NTRjMC4uYzBjMTY4YiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9zdGF0LmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9zdGF0LmgKQEAgLTM4LDEwMSArMzgsMTAzIEBACiBfX0JFR0lOX0RFQ0xTCiAKICNpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKQotc3RydWN0IHN0YXQgewotICB1bnNpZ25lZCBsb25nIHN0X2RldjsKLSAgdW5zaWduZWQgbG9uZyBzdF9pbm87Ci0gIHVuc2lnbmVkIGludCBzdF9tb2RlOwotICB1bnNpZ25lZCBpbnQgc3Rfbmxpbms7Ci0gIHVuc2lnbmVkIGludCBzdF91aWQ7Ci0gIHVuc2lnbmVkIGludCBzdF9naWQ7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfcmRldjsKLSAgdW5zaWduZWQgbG9uZyBfX3BhZDE7Ci0gIGxvbmcgc3Rfc2l6ZTsKLSAgaW50IHN0X2Jsa3NpemU7Ci0gIGludCBfX3BhZDI7Ci0gIGxvbmcgc3RfYmxvY2tzOwotICBsb25nIHN0X2F0aW1lOwotICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lX25zZWM7Ci0gIGxvbmcgc3RfbXRpbWU7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWVfbnNlYzsKLSAgbG9uZyBzdF9jdGltZTsKLSAgdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOwotICB1bnNpZ25lZCBpbnQgX191bnVzZWQ0OwotICB1bnNpZ25lZCBpbnQgX191bnVzZWQ1OwotfTsKKyNkZWZpbmUgX19TVEFUNjRfQk9EWSBcCisgIHVuc2lnbmVkIGxvbmcgc3RfZGV2OyBcCisgIHVuc2lnbmVkIGxvbmcgc3RfaW5vOyBcCisgIHVuc2lnbmVkIGludCBzdF9tb2RlOyBcCisgIHVuc2lnbmVkIGludCBzdF9ubGluazsgXAorICB1aWRfdCBzdF91aWQ7IFwKKyAgZ2lkX3Qgc3RfZ2lkOyBcCisgIHVuc2lnbmVkIGxvbmcgc3RfcmRldjsgXAorICB1bnNpZ25lZCBsb25nIF9fcGFkMTsgXAorICBsb25nIHN0X3NpemU7IFwKKyAgaW50IHN0X2Jsa3NpemU7IFwKKyAgaW50IF9fcGFkMjsgXAorICBsb25nIHN0X2Jsb2NrczsgXAorICBsb25nIHN0X2F0aW1lOyBcCisgIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWVfbnNlYzsgXAorICBsb25nIHN0X210aW1lOyBcCisgIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWVfbnNlYzsgXAorICBsb25nIHN0X2N0aW1lOyBcCisgIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWVfbnNlYzsgXAorICB1bnNpZ25lZCBpbnQgX191bnVzZWQ0OyBcCisgIHVuc2lnbmVkIGludCBfX3VudXNlZDU7IFwKKwogI2VsaWYgZGVmaW5lZChfX21pcHNfXykKLXN0cnVjdCBzdGF0IHsKLSAgdW5zaWduZWQgbG9uZyBzdF9kZXY7Ci0gIHVuc2lnbmVkIGxvbmcgX19wYWQwWzNdOwotICB1bnNpZ25lZCBsb25nIGxvbmcgc3RfaW5vOwotICB1bnNpZ25lZCBpbnQgc3RfbW9kZTsKLSAgdW5zaWduZWQgaW50IHN0X25saW5rOwotICB1bnNpZ25lZCBsb25nIHN0X3VpZDsKLSAgdW5zaWduZWQgbG9uZyBzdF9naWQ7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfcmRldjsKLSAgdW5zaWduZWQgbG9uZyBfX3BhZDFbM107Ci0gIGxvbmcgbG9uZyBzdF9zaXplOwotICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOwotICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lX25zZWM7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWVfbnNlYzsKLSAgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKLSAgdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOwotICB1bnNpZ25lZCBsb25nIHN0X2Jsa3NpemU7Ci0gIHVuc2lnbmVkIGxvbmcgX19wYWQyOwotICB1bnNpZ25lZCBsb25nIGxvbmcgc3RfYmxvY2tzOwotfTsKKyNkZWZpbmUgX19TVEFUNjRfQk9EWSBcCisgIHVuc2lnbmVkIGludCBzdF9kZXY7IFwKKyAgdW5zaWduZWQgaW50IF9fcGFkMFszXTsgXAorICB1bnNpZ25lZCBsb25nIGxvbmcgc3RfaW5vOyBcCisgIHVuc2lnbmVkIGludCBzdF9tb2RlOyBcCisgIHVuc2lnbmVkIGludCBzdF9ubGluazsgXAorICB1aWRfdCBzdF91aWQ7IFwKKyAgZ2lkX3Qgc3RfZ2lkOyBcCisgIHVuc2lnbmVkIGludCBzdF9yZGV2OyBcCisgIHVuc2lnbmVkIGludCBfX3BhZDFbM107IFwKKyAgbG9uZyBsb25nIHN0X3NpemU7IFwKKyAgdW5zaWduZWQgaW50IHN0X2F0aW1lOyBcCisgIHVuc2lnbmVkIGludCBzdF9hdGltZV9uc2VjOyBcCisgIHVuc2lnbmVkIGludCBzdF9tdGltZTsgXAorICB1bnNpZ25lZCBpbnQgc3RfbXRpbWVfbnNlYzsgXAorICB1bnNpZ25lZCBpbnQgc3RfY3RpbWU7IFwKKyAgdW5zaWduZWQgaW50IHN0X2N0aW1lX25zZWM7IFwKKyAgdW5zaWduZWQgaW50IHN0X2Jsa3NpemU7IFwKKyAgdW5zaWduZWQgaW50IF9fcGFkMjsgXAorICB1bnNpZ25lZCBsb25nIGxvbmcgc3RfYmxvY2tzOyBcCisKICNlbGlmIGRlZmluZWQoX194ODZfNjRfXykKLXN0cnVjdCBzdGF0IHsKLSAgdW5zaWduZWQgbG9uZyBzdF9kZXY7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfaW5vOwotICB1bnNpZ25lZCBsb25nIHN0X25saW5rOwotICB1bnNpZ25lZCBpbnQgc3RfbW9kZTsKLSAgdW5zaWduZWQgaW50IHN0X3VpZDsKLSAgdW5zaWduZWQgaW50IHN0X2dpZDsKLSAgdW5zaWduZWQgaW50IF9fcGFkMDsKLSAgdW5zaWduZWQgbG9uZyBzdF9yZGV2OwotICBsb25nIHN0X3NpemU7Ci0gIGxvbmcgc3RfYmxrc2l6ZTsKLSAgbG9uZyBzdF9ibG9ja3M7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWVfbnNlYzsKLSAgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsKLSAgdW5zaWduZWQgbG9uZyBzdF9tdGltZV9uc2VjOwotICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lOwotICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lX25zZWM7Ci0gIGxvbmcgX19wYWQzWzNdOwotfTsKKyNkZWZpbmUgX19TVEFUNjRfQk9EWSBcCisgIHVuc2lnbmVkIGxvbmcgc3RfZGV2OyBcCisgIHVuc2lnbmVkIGxvbmcgc3RfaW5vOyBcCisgIHVuc2lnbmVkIGxvbmcgc3Rfbmxpbms7IFwKKyAgdW5zaWduZWQgaW50IHN0X21vZGU7IFwKKyAgdWlkX3Qgc3RfdWlkOyBcCisgIGdpZF90IHN0X2dpZDsgXAorICB1bnNpZ25lZCBpbnQgX19wYWQwOyBcCisgIHVuc2lnbmVkIGxvbmcgc3RfcmRldjsgXAorICBsb25nIHN0X3NpemU7IFwKKyAgbG9uZyBzdF9ibGtzaXplOyBcCisgIGxvbmcgc3RfYmxvY2tzOyBcCisgIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOyBcCisgIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9tdGltZV9uc2VjOyBcCisgIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOyBcCisgIGxvbmcgX19wYWQzWzNdOyBcCisKICNlbHNlCi1zdHJ1Y3Qgc3RhdCB7Ci0gIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9kZXY7Ci0gIHVuc2lnbmVkIGNoYXIgX19wYWQwWzRdOwotICB1bnNpZ25lZCBsb25nIF9fc3RfaW5vOwotICB1bnNpZ25lZCBpbnQgc3RfbW9kZTsKLSAgdW5zaWduZWQgaW50IHN0X25saW5rOwotICB1bnNpZ25lZCBsb25nIHN0X3VpZDsKLSAgdW5zaWduZWQgbG9uZyBzdF9naWQ7Ci0gIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9yZGV2OwotICB1bnNpZ25lZCBjaGFyIF9fcGFkM1s0XTsKLSAgbG9uZyBsb25nIHN0X3NpemU7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfYmxrc2l6ZTsKLSAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2Jsb2NrczsKLSAgdW5zaWduZWQgbG9uZyBzdF9hdGltZTsKLSAgdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOwotICB1bnNpZ25lZCBsb25nIHN0X210aW1lOwotICB1bnNpZ25lZCBsb25nIHN0X210aW1lX25zZWM7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWVfbnNlYzsKLSAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2lubzsKLX07CisjZGVmaW5lIF9fU1RBVDY0X0JPRFkgXAorICB1bnNpZ25lZCBsb25nIGxvbmcgc3RfZGV2OyBcCisgIHVuc2lnbmVkIGNoYXIgX19wYWQwWzRdOyBcCisgIHVuc2lnbmVkIGxvbmcgX19zdF9pbm87IFwKKyAgdW5zaWduZWQgaW50IHN0X21vZGU7IFwKKyAgdW5zaWduZWQgaW50IHN0X25saW5rOyBcCisgIHVpZF90IHN0X3VpZDsgXAorICBnaWRfdCBzdF9naWQ7IFwKKyAgdW5zaWduZWQgbG9uZyBsb25nIHN0X3JkZXY7IFwKKyAgdW5zaWduZWQgY2hhciBfX3BhZDNbNF07IFwKKyAgbG9uZyBsb25nIHN0X3NpemU7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9ibGtzaXplOyBcCisgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9ibG9ja3M7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9hdGltZTsgXAorICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lX25zZWM7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsgXAorICB1bnNpZ25lZCBsb25nIHN0X210aW1lX25zZWM7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsgXAorICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lX25zZWM7IFwKKyAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2lubzsgXAorCiAjZW5kaWYKIAotLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBHTGliYywgd2UgcHJvdmlkZSBtYWNybyBhbGlhc2VzCi0gKiBmb3IgdGhlIG5vbi1Qb3NpeCBuYW5vLXNlY29uZHMgYWNjZXNzb3JzLgotICovCi0jZGVmaW5lICBzdF9hdGltZW5zZWMgIHN0X2F0aW1lX25zZWMKLSNkZWZpbmUgIHN0X210aW1lbnNlYyAgc3RfbXRpbWVfbnNlYwotI2RlZmluZSAgc3RfY3RpbWVuc2VjICBzdF9jdGltZV9uc2VjCitzdHJ1Y3Qgc3RhdCB7IF9fU1RBVDY0X0JPRFkgfTsKK3N0cnVjdCBzdGF0NjQgeyBfX1NUQVQ2NF9CT0RZIH07CisKKyN1bmRlZiBfX1NUQVQ2NF9CT0RZCisKKyNkZWZpbmUgc3RfYXRpbWVuc2VjIHN0X2F0aW1lX25zZWMKKyNkZWZpbmUgc3RfbXRpbWVuc2VjIHN0X210aW1lX25zZWMKKyNkZWZpbmUgc3RfY3RpbWVuc2VjIHN0X2N0aW1lX25zZWMKIAogI2lmZGVmIF9fVVNFX0JTRAogLyogUGVybWlzc2lvbiBtYWNyb3MgcHJvdmlkZWQgYnkgZ2xpYmMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBCU0RzLiAqLwpAQCAtMTQxLDIxICsxNDMsMjYgQEAKICNkZWZpbmUgREVGRklMRU1PREUgKFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAgfCBTX0lST1RIIHwgU19JV09USCkgLyogMDY2NiAqLwogI2VuZGlmCiAKLWV4dGVybiBpbnQgICAgY2htb2QoY29uc3QgY2hhciAqLCBtb2RlX3QpOwotZXh0ZXJuIGludCAgICBmY2htb2QoaW50LCBtb2RlX3QpOwotZXh0ZXJuIGludCAgICBta2Rpcihjb25zdCBjaGFyICosIG1vZGVfdCk7CitleHRlcm4gaW50IGNobW9kKGNvbnN0IGNoYXIqLCBtb2RlX3QpOworZXh0ZXJuIGludCBmY2htb2QoaW50LCBtb2RlX3QpOworZXh0ZXJuIGludCBta2Rpcihjb25zdCBjaGFyKiwgbW9kZV90KTsKIAotZXh0ZXJuIGludCAgICBzdGF0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQgKik7Ci1leHRlcm4gaW50ICAgIGZzdGF0KGludCwgc3RydWN0IHN0YXQgKik7Ci1leHRlcm4gaW50ICAgIGxzdGF0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQgKik7Ci1leHRlcm4gaW50ICAgIG1rbm9kKGNvbnN0IGNoYXIgKiwgbW9kZV90LCBkZXZfdCk7CitleHRlcm4gaW50IGZzdGF0KGludCwgc3RydWN0IHN0YXQqKTsKK2V4dGVybiBpbnQgZnN0YXQ2NChpbnQsIHN0cnVjdCBzdGF0NjQqKTsKK2V4dGVybiBpbnQgZnN0YXRhdChpbnQsIGNvbnN0IGNoYXIqLCBzdHJ1Y3Qgc3RhdCosIGludCk7CitleHRlcm4gaW50IGZzdGF0YXQ2NChpbnQsIGNvbnN0IGNoYXIqLCBzdHJ1Y3Qgc3RhdDY0KiwgaW50KTsKK2V4dGVybiBpbnQgbHN0YXQoY29uc3QgY2hhciosIHN0cnVjdCBzdGF0Kik7CitleHRlcm4gaW50IGxzdGF0NjQoY29uc3QgY2hhciosIHN0cnVjdCBzdGF0NjQqKTsKK2V4dGVybiBpbnQgc3RhdChjb25zdCBjaGFyKiwgc3RydWN0IHN0YXQqKTsKK2V4dGVybiBpbnQgc3RhdDY0KGNvbnN0IGNoYXIqLCBzdHJ1Y3Qgc3RhdDY0Kik7CisKK2V4dGVybiBpbnQgbWtub2QoY29uc3QgY2hhciosIG1vZGVfdCwgZGV2X3QpOwogZXh0ZXJuIG1vZGVfdCB1bWFzayhtb2RlX3QpOwogCiAjaWYgZGVmaW5lZChfX0JJT05JQ19GT1JUSUZZKQogCiBleHRlcm4gbW9kZV90IF9fdW1hc2tfY2hrKG1vZGVfdCk7Ci1leHRlcm4gbW9kZV90IF9fdW1hc2tfcmVhbChtb2RlX3QpCi0gICAgX19hc21fXyhfX1VTRVJfTEFCRUxfUFJFRklYX18gInVtYXNrIik7CitleHRlcm4gbW9kZV90IF9fdW1hc2tfcmVhbChtb2RlX3QpIF9fYXNtX18oX19VU0VSX0xBQkVMX1BSRUZJWF9fICJ1bWFzayIpOwogX19lcnJvcmRlY2woX191bWFza19pbnZhbGlkX21vZGUsICJ1bWFzayBjYWxsZWQgd2l0aCBpbnZhbGlkIG1vZGUiKTsKIAogX19CSU9OSUNfRk9SVElGWV9JTkxJTkUKQEAgLTE3MiwyMCArMTc5LDE0IEBACiB9CiAjZW5kaWYgLyogZGVmaW5lZChfX0JJT05JQ19GT1JUSUZZKSAqLwogCi0KLSNkZWZpbmUgIHN0YXQ2NCAgICBzdGF0Ci0jZGVmaW5lICBmc3RhdDY0ICAgZnN0YXQKLSNkZWZpbmUgIGxzdGF0NjQgICBsc3RhdAotCiBleHRlcm4gaW50IG1rZmlmbyhjb25zdCBjaGFyKiwgbW9kZV90KTsKIAogZXh0ZXJuIGludCBmY2htb2RhdChpbnQsIGNvbnN0IGNoYXIqLCBtb2RlX3QsIGludCk7Ci1leHRlcm4gaW50IGZzdGF0YXQoaW50LCBjb25zdCBjaGFyKiwgc3RydWN0IHN0YXQqLCBpbnQpOwogZXh0ZXJuIGludCBta2RpcmF0KGludCwgY29uc3QgY2hhciosIG1vZGVfdCk7CiBleHRlcm4gaW50IG1rbm9kYXQoaW50LCBjb25zdCBjaGFyKiwgbW9kZV90LCBkZXZfdCk7CiAKLSMgZGVmaW5lIFVUSU1FX05PVyAgICAgICgoMWwgPDwgMzApIC0gMWwpCi0jIGRlZmluZSBVVElNRV9PTUlUICAgICAoKDFsIDw8IDMwKSAtIDJsKQorI2RlZmluZSBVVElNRV9OT1cgICgoMUwgPDwgMzApIC0gMUwpCisjZGVmaW5lIFVUSU1FX09NSVQgKCgxTCA8PCAzMCkgLSAyTCkKIGV4dGVybiBpbnQgdXRpbWVuc2F0KGludCBmZCwgY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjIHRpbWVzWzJdLCBpbnQgZmxhZ3MpOwogZXh0ZXJuIGludCBmdXRpbWVucyhpbnQgZmQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyB0aW1lc1syXSk7CiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvc3RhdHZmcy5oIGIvbGliYy9pbmNsdWRlL3N5cy9zdGF0dmZzLmgKaW5kZXggZTkxMGMwMy4uMzQ5NTU0NiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9zdGF0dmZzLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9zdGF0dmZzLmgKQEAgLTIzLDE5ICsyMywzMSBAQAogCiBfX0JFR0lOX0RFQ0xTCiAKLXN0cnVjdCBzdGF0dmZzIHsKLSAgdW5zaWduZWQgbG9uZyBmX2JzaXplOwotICB1bnNpZ25lZCBsb25nIGZfZnJzaXplOwotICBmc2Jsa2NudF90ICAgIGZfYmxvY2tzOwotICBmc2Jsa2NudF90ICAgIGZfYmZyZWU7Ci0gIGZzYmxrY250X3QgICAgZl9iYXZhaWw7Ci0gIGZzZmlsY250X3QgICAgZl9maWxlczsKLSAgZnNmaWxjbnRfdCAgICBmX2ZmcmVlOwotICBmc2ZpbGNudF90ICAgIGZfZmF2YWlsOwotICB1bnNpZ25lZCBsb25nIGZfZnNpZDsKLSAgdW5zaWduZWQgbG9uZyBmX2ZsYWc7Ci0gIHVuc2lnbmVkIGxvbmcgZl9uYW1lbWF4OwotfTsKKyNpZmRlZiBfX0xQNjRfXworI2RlZmluZSBfX1NUQVRWRlM2NF9SRVNFUlZFRCB1aW50MzJfdCBfX2ZfcmVzZXJ2ZWRbNl07CisjZWxzZQorI2RlZmluZSBfX1NUQVRWRlM2NF9SRVNFUlZFRAorI2VuZGlmCisKKyNkZWZpbmUgX19TVEFUVkZTNjRfQk9EWSBcCisgIHVuc2lnbmVkIGxvbmcgZl9ic2l6ZTsgXAorICB1bnNpZ25lZCBsb25nIGZfZnJzaXplOyBcCisgIGZzYmxrY250X3QgICAgZl9ibG9ja3M7IFwKKyAgZnNibGtjbnRfdCAgICBmX2JmcmVlOyBcCisgIGZzYmxrY250X3QgICAgZl9iYXZhaWw7IFwKKyAgZnNmaWxjbnRfdCAgICBmX2ZpbGVzOyBcCisgIGZzZmlsY250X3QgICAgZl9mZnJlZTsgXAorICBmc2ZpbGNudF90ICAgIGZfZmF2YWlsOyBcCisgIHVuc2lnbmVkIGxvbmcgZl9mc2lkOyBcCisgIHVuc2lnbmVkIGxvbmcgZl9mbGFnOyBcCisgIHVuc2lnbmVkIGxvbmcgZl9uYW1lbWF4OyBcCisgIF9fU1RBVFZGUzY0X1JFU0VSVkVECisKK3N0cnVjdCBzdGF0dmZzIHsgX19TVEFUVkZTNjRfQk9EWSB9Oworc3RydWN0IHN0YXR2ZnM2NCB7IF9fU1RBVFZGUzY0X0JPRFkgfTsKKworI3VuZGVmIF9fU1RBVFZGUzY0X0JPRFkKKyN1bmRlZiBfX1NUQVRWRlM2NF9SRVNFUlZFRAogCiAjZGVmaW5lIFNUX1JET05MWSAgICAgIDB4MDAwMQogI2RlZmluZSBTVF9OT1NVSUQgICAgICAweDAwMDIKQEAgLTQ4LDcgKzYwLDkgQEAKICNkZWZpbmUgU1RfUkVMQVRJTUUgICAgMHgxMDAwCiAKIGV4dGVybiBpbnQgc3RhdHZmcyhjb25zdCBjaGFyKiBfX3Jlc3RyaWN0LCBzdHJ1Y3Qgc3RhdHZmcyogX19yZXN0cmljdCkgX19ub25udWxsKCgxLCAyKSk7CitleHRlcm4gaW50IHN0YXR2ZnM2NChjb25zdCBjaGFyKiBfX3Jlc3RyaWN0LCBzdHJ1Y3Qgc3RhdHZmczY0KiBfX3Jlc3RyaWN0KSBfX25vbm51bGwoKDEsIDIpKTsKIGV4dGVybiBpbnQgZnN0YXR2ZnMoaW50LCBzdHJ1Y3Qgc3RhdHZmcyopIF9fbm9ubnVsbCgoMikpOworZXh0ZXJuIGludCBmc3RhdHZmczY0KGludCwgc3RydWN0IHN0YXR2ZnM2NCopIF9fbm9ubnVsbCgoMikpOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3N5c2NhbGwuaCBiL2xpYmMvaW5jbHVkZS9zeXMvc3lzY2FsbC5oCmluZGV4IGE0NGIyZTUuLjM0YTI5ZGYgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvc3lzY2FsbC5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc3lzY2FsbC5oCkBAIC0zNyw3ICszNyw3IEBACiAKIF9fQkVHSU5fREVDTFMKIAotaW50IHN5c2NhbGwoaW50IG51bWJlciwgLi4uKTsKK2xvbmcgc3lzY2FsbChsb25nIG51bWJlciwgLi4uKTsKIAogX19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy90aW1lYi5oIGIvbGliYy9pbmNsdWRlL3N5cy90aW1lYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjZmMjU1Li4wMDAwMDAwCi0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvdGltZWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgX1NZU19USU1FQl9ICi0jZGVmaW5lIF9TWVNfVElNRUJfSAotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLQotX19CRUdJTl9ERUNMUwotCi1zdHJ1Y3QgdGltZWIgewotICAgIHRpbWVfdCAgICAgICAgICB0aW1lOwotICAgIHVuc2lnbmVkIHNob3J0ICBtaWxsaXRtOwotICAgIHNob3J0ICAgICAgICAgICB0aW1lem9uZTsKLSAgICBzaG9ydCAgICAgICAgICAgZHN0ZmxhZzsKLX07Ci0KLWV4dGVybiBpbnQgIGZ0aW1lKHN0cnVjdCB0aW1lYiogIHRpbWVidWYpOwotCi1fX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX1NZU19USU1FQl9IICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3RpbWVzLmggYi9saWJjL2luY2x1ZGUvc3lzL3RpbWVzLmgKaW5kZXggMWI5YjhiMi4uNmNlNWI1NSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy90aW1lcy5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdGltZXMuaApAQCAtMjUsNiArMjUsNyBAQAogICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KICAqLworCiAjaWZuZGVmIF9TWVNfVElNRVNfSF8KICNkZWZpbmUgX1NZU19USU1FU19IXwogCkBAIC0zNCw3ICszNSw3IEBACiAKIF9fQkVHSU5fREVDTFMKIAotZXh0ZXJuIGNsb2NrX3QgdGltZXMoc3RydWN0IHRtcyAqKTsKK2V4dGVybiBjbG9ja190IHRpbWVzKHN0cnVjdCB0bXMqKTsKIAogX19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy90eXBlcy5oIGIvbGliYy9pbmNsdWRlL3N5cy90eXBlcy5oCmluZGV4IGY4YWU4MTMuLmE1ZmE2OTIgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvdHlwZXMuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3R5cGVzLmgKQEAgLTM1LDI4ICszNSw0OSBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXhfdHlwZXMuaD4KIAotLyogX19rZXJuZWxfZ2lkX3QgYW5kIF9fa2VybmVsX3VpZF90IGFyZSAxNiBiaXQgZm9yIGxlZ2FjeSByZWFzb25zLgotICogQW5kcm9pZCB1c2VzIF9fa2VybmVsX3VpZDMyX3QgYW5kIF9fa2VybmVsX2dpZDMyX3QgaW5zdGVhZC4KLSAqLwotdHlwZWRlZiBfX2tlcm5lbF9naWQzMl90IGdpZF90OwotdHlwZWRlZiBfX2tlcm5lbF91aWQzMl90IHVpZF90OworLyogZ2lkcywgdWlkcywgYW5kIHBpZHMgYXJlIGFsbCAzMi1iaXQuICovCit0eXBlZGVmIF9fa2VybmVsX2dpZDMyX3QgX19naWRfdDsKK3R5cGVkZWYgX19naWRfdCBnaWRfdDsKK3R5cGVkZWYgX19rZXJuZWxfdWlkMzJfdCBfX3VpZF90OwordHlwZWRlZiBfX3VpZF90IHVpZF90OwordHlwZWRlZiBfX2tlcm5lbF9waWRfdCBfX3BpZF90OwordHlwZWRlZiBfX3BpZF90IHBpZF90OwordHlwZWRlZiB1aW50MzJfdCBfX2lkX3Q7Cit0eXBlZGVmIF9faWRfdCBpZF90OwogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgYmxrY250X3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgYmxrc2l6ZV90OwogdHlwZWRlZiBfX2tlcm5lbF9jYWRkcl90IGNhZGRyX3Q7CiB0eXBlZGVmIF9fa2VybmVsX2Nsb2NrX3QgY2xvY2tfdDsKLXR5cGVkZWYgX19rZXJuZWxfY2xvY2tpZF90IGNsb2NraWRfdDsKKwordHlwZWRlZiBfX2tlcm5lbF9jbG9ja2lkX3QgX19jbG9ja2lkX3Q7Cit0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsKKwogdHlwZWRlZiBfX2tlcm5lbF9kYWRkcl90IGRhZGRyX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZnNibGtjbnRfdDsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBmc2ZpbGNudF90OwotdHlwZWRlZiBfX2tlcm5lbF9pbm9fdCBpbm9fdDsKLXR5cGVkZWYgX19rZXJuZWxfa2V5X3Qga2V5X3Q7Ci10eXBlZGVmIF9fa2VybmVsX21vZGVfdCBtb2RlX3Q7CisKK3R5cGVkZWYgX19rZXJuZWxfbW9kZV90IF9fbW9kZV90OwordHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CisKK3R5cGVkZWYgX19rZXJuZWxfa2V5X3QgX19rZXlfdDsKK3R5cGVkZWYgX19rZXlfdCBrZXlfdDsKKwordHlwZWRlZiBfX2tlcm5lbF9pbm9fdCBfX2lub190OwordHlwZWRlZiBfX2lub190IGlub190OworCit0eXBlZGVmIHVpbnQzMl90IF9fbmxpbmtfdDsKIHR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7Ci10eXBlZGVmIF9fa2VybmVsX3BpZF90IHBpZF90OwotdHlwZWRlZiBfX2tlcm5lbF9zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKLXR5cGVkZWYgX19rZXJuZWxfdGltZXJfdCB0aW1lcl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgdXNlY29uZHNfdDsKKwordHlwZWRlZiB2b2lkKiBfX3RpbWVyX3Q7Cit0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90OworCit0eXBlZGVmIF9fa2VybmVsX3N1c2Vjb25kc190IF9fc3VzZWNvbmRzX3Q7Cit0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CisKKy8qIHVzZWNvbmRzX3QgaXMgMzItYml0IG9uIGJvdGggTFAzMiBhbmQgTFA2NC4gKi8KK3R5cGVkZWYgdWludDMyX3QgX191c2Vjb25kc190OwordHlwZWRlZiBfX3VzZWNvbmRzX3QgdXNlY29uZHNfdDsKIAogI2lmICFkZWZpbmVkKF9fTFA2NF9fKQogLyogVGhpcyBoaXN0b3JpY2FsIGFjY2lkZW50IG1lYW5zIHRoYXQgd2UgaGFkIGEgMzItYml0IGRldl90IG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLiAqLwpAQCAtNjYsMTggKzg3LDIxIEBACiAjZW5kaWYKIAogLyogVGhpcyBoaXN0b3JpY2FsIGFjY2lkZW50IG1lYW5zIHRoYXQgd2UgaGFkIGEgMzItYml0IHRpbWVfdCBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcy4gKi8KLXR5cGVkZWYgX19rZXJuZWxfdGltZV90IHRpbWVfdDsKK3R5cGVkZWYgX19rZXJuZWxfdGltZV90IF9fdGltZV90OwordHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiAKIC8qIFRoaXMgaGlzdG9yaWNhbCBhY2NpZGVudCBtZWFucyB0aGF0IHdlIGhhZCBhIDMyLWJpdCBvZmZfdCBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcy4gKi8KLSNpZm5kZWYgX09GRl9UX0RFRklORURfCi0jZGVmaW5lIF9PRkZfVF9ERUZJTkVEXworI2lmICFkZWZpbmVkKF9fTFA2NF9fKQogdHlwZWRlZiBfX2tlcm5lbF9vZmZfdCBvZmZfdDsKLSNlbmRpZgogdHlwZWRlZiBfX2tlcm5lbF9sb2ZmX3QgbG9mZl90OwogdHlwZWRlZiBsb2ZmX3Qgb2ZmNjRfdDsKLQotLyogVGhpcyBvbmUgcmVhbGx5IGlzIG1lYW50IHRvIGJlIGp1c3QgMzIgYml0cyEgKi8KLXR5cGVkZWYgdWludDMyX3QgaWRfdDsKKyNlbHNlCisvKiBXZSBjb3VsZCByZS11c2UgdGhlIExQMzIgZGVmaW5pdGlvbnMsIGJ1dCB0aGF0IHdvdWxkIG1lYW4gdGhhdCBhbHRob3VnaCBvZmZfdCBhbmQgbG9mZl90L29mZjY0X3QKKyAqIHdvdWxkIGJlIHRoZSBzYW1lIHNpemUsIHRoZXkgd291bGRuJ3QgYWN0dWFsbHkgYmUgdGhlIHNhbWUgdHlwZSwgd2hpY2ggY2FuIGxlYWQgdG8gd2FybmluZ3MuICovCit0eXBlZGVmIF9fa2VybmVsX29mZl90IG9mZl90OwordHlwZWRlZiBvZmZfdCBsb2ZmX3Q7Cit0eXBlZGVmIGxvZmZfdCBvZmY2NF90OworI2VuZGlmCiAKIC8qIHdoaWxlIFBPU0lYIHdhbnRzIHRoZXNlIGluIDxzeXMvdHlwZXMuaD4sIHdlCiAgKiBkZWNsYXJlIHRoZW4gaW4gPHB0aHJlYWQuaD4gaW5zdGVhZCAqLwpAQCAtOTMsNiArMTE3LDE3IEBACiB0eXBlZGVmICAuLi4uIHB0aHJlYWRfdDsKICNlbmRpZgogCisjaWYgIWRlZmluZWQoX19MUDY0X18pCisvKiBUaGlzIGhpc3RvcmljYWwgYWNjaWRlbnQgbWVhbnMgdGhhdCB3ZSBoYWQgYSBzaWduZWQgc29ja2xlbl90IG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLiAqLwordHlwZWRlZiBpbnQzMl90IF9fc29ja2xlbl90OworI2Vsc2UKKy8qIExQNjQgc3RpbGwgaGFzIGEgMzItYml0IHNvY2tsZW5fdC4gKi8KK3R5cGVkZWYgdWludDMyX3QgX19zb2NrbGVuX3Q7CisjZW5kaWYKK3R5cGVkZWYgX19zb2NrbGVuX3Qgc29ja2xlbl90OworCit0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fdmFfbGlzdDsKKwogI2lmbmRlZiBfU1NJWkVfVF9ERUZJTkVEXwogI2RlZmluZSBfU1NJWkVfVF9ERUZJTkVEXwogLyogVHJhZGl0aW9uYWxseSwgYmlvbmljJ3Mgc3NpemVfdCB3YXMgImxvbmcgaW50Ii4gVGhpcyBjYXVzZWQgR0NDIHRvIGVtaXQgd2FybmluZ3Mgd2hlbiB5b3UKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvdWNvbnRleHQuaCBiL2xpYmMvaW5jbHVkZS9zeXMvdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjIzODBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy91Y29udGV4dC5oCkBAIC0wLDAgKzEsMjkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX1NZU19VQ09OVEVYVF9IXworI2RlZmluZSBfU1lTX1VDT05URVhUX0hfCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzeXMvdXNlci5oPgorCitfX0JFR0lOX0RFQ0xTCisKKyNpZiBkZWZpbmVkKF9fYXJtX18pCisKK2VudW0geworICBSRUdfUjAgPSAwLAorICBSRUdfUjEsCisgIFJFR19SMiwKKyAgUkVHX1IzLAorICBSRUdfUjQsCisgIFJFR19SNSwKKyAgUkVHX1I2LAorICBSRUdfUjcsCisgIFJFR19SOCwKKyAgUkVHX1I5LAorICBSRUdfUjEwLAorICBSRUdfUjExLAorICBSRUdfUjEyLAorICBSRUdfUjEzLAorICBSRUdfUjE0LAorICBSRUdfUjE1LAorfTsKKworI2RlZmluZSBOR1JFRyAxOCAvKiBMaWtlIGdsaWJjLiAqLworCit0eXBlZGVmIGludCBncmVnX3Q7Cit0eXBlZGVmIGdyZWdfdCBncmVnc2V0X3RbTkdSRUddOworCisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KK3R5cGVkZWYgc3RydWN0IHNpZ2NvbnRleHQgbWNvbnRleHRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWNvbnRleHQgeworICB1bnNpZ25lZCBsb25nIHVjX2ZsYWdzOworICBzdHJ1Y3QgdWNvbnRleHQqIHVjX2xpbms7CisgIHN0YWNrX3QgdWNfc3RhY2s7CisgIG1jb250ZXh0X3QgdWNfbWNvbnRleHQ7CisgIC8vIEFuZHJvaWQgaGFzIGEgd3JvbmcgKHNtYWxsZXIpIHNpZ3NldF90IG9uIEFSTS4KKyAgdW5pb24geworICAgIHNpZ3NldF90IGJpb25pYzsKKyAgICB1aW50MzJfdCBrZXJuZWxbMl07CisgIH0gdWNfc2lnbWFzazsKKyAgLy8gVGhlIGtlcm5lbCBhZGRzIGV4dHJhIHBhZGRpbmcgYWZ0ZXIgdWNfc2lnbWFzayB0byBtYXRjaCBnbGliYyBzaWdzZXRfdCBvbiBBUk0uCisgIGNoYXIgX19wYWRkaW5nWzEyMF07CisgIHVuc2lnbmVkIGxvbmcgdWNfcmVnc3BhY2VbMTI4XSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg4KSkpOworfSB1Y29udGV4dF90OworCisjZWxpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKQorCisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KK3R5cGVkZWYgc3RydWN0IHNpZ2NvbnRleHQgbWNvbnRleHRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWNvbnRleHQgeworICB1bnNpZ25lZCBsb25nIHVjX2ZsYWdzOworICBzdHJ1Y3QgdWNvbnRleHQgKnVjX2xpbms7CisgIHN0YWNrX3QgdWNfc3RhY2s7CisgIHNpZ3NldF90IHVjX3NpZ21hc2s7CisgIC8vIFRoZSBrZXJuZWwgYWRkcyBleHRyYSBwYWRkaW5nIGFmdGVyIHVjX3NpZ21hc2sgdG8gbWF0Y2ggZ2xpYmMgc2lnc2V0X3Qgb24gQVJNNjQuCisgIGNoYXIgX19wYWRkaW5nWzEyOCAtIHNpemVvZihzaWdzZXRfdCldOworICBtY29udGV4dF90IHVjX21jb250ZXh0OworfSB1Y29udGV4dF90OworCisjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQorCitlbnVtIHsKKyAgUkVHX0dTID0gMCwKKyAgUkVHX0ZTLAorICBSRUdfRVMsCisgIFJFR19EUywKKyAgUkVHX0VESSwKKyAgUkVHX0VTSSwKKyAgUkVHX0VCUCwKKyAgUkVHX0VTUCwKKyAgUkVHX0VCWCwKKyAgUkVHX0VEWCwKKyAgUkVHX0VDWCwKKyAgUkVHX0VBWCwKKyAgUkVHX1RSQVBOTywKKyAgUkVHX0VSUiwKKyAgUkVHX0VJUCwKKyAgUkVHX0NTLAorICBSRUdfRUZMLAorICBSRUdfVUVTUCwKKyAgUkVHX1NTLAorICBOR1JFRworfTsKKwordHlwZWRlZiBpbnQgZ3JlZ190OwordHlwZWRlZiBncmVnX3QgZ3JlZ3NldF90W05HUkVHXTsKKworc3RydWN0IF9saWJjX2ZwcmVnIHsKKyAgdW5zaWduZWQgc2hvcnQgc2lnbmlmaWNhbmRbNF07CisgIHVuc2lnbmVkIHNob3J0IGV4cG9uZW50OworfTsKKworc3RydWN0IF9saWJjX2Zwc3RhdGUgeworICB1bnNpZ25lZCBsb25nIGN3OworICB1bnNpZ25lZCBsb25nIHN3OworICB1bnNpZ25lZCBsb25nIHRhZzsKKyAgdW5zaWduZWQgbG9uZyBpcG9mZjsKKyAgdW5zaWduZWQgbG9uZyBjc3NlbDsKKyAgdW5zaWduZWQgbG9uZyBkYXRhb2ZmOworICB1bnNpZ25lZCBsb25nIGRhdGFzZWw7CisgIHN0cnVjdCBfbGliY19mcHJlZyBfc3RbOF07CisgIHVuc2lnbmVkIGxvbmcgc3RhdHVzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgX2xpYmNfZnBzdGF0ZSogZnByZWdzZXRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBncmVnc2V0X3QgZ3JlZ3M7CisgIGZwcmVnc2V0X3QgZnByZWdzOworICB1bnNpZ25lZCBsb25nIG9sZG1hc2s7CisgIHVuc2lnbmVkIGxvbmcgY3IyOworfSBtY29udGV4dF90OworCit0eXBlZGVmIHN0cnVjdCB1Y29udGV4dCB7CisgIHVuc2lnbmVkIGxvbmcgdWNfZmxhZ3M7CisgIHN0cnVjdCB1Y29udGV4dCogdWNfbGluazsKKyAgc3RhY2tfdCB1Y19zdGFjazsKKyAgbWNvbnRleHRfdCB1Y19tY29udGV4dDsKKyAgLy8gQW5kcm9pZCBoYXMgYSB3cm9uZyAoc21hbGxlcikgc2lnc2V0X3Qgb24geDg2LgorICB1bmlvbiB7CisgICAgc2lnc2V0X3QgYmlvbmljOworICAgIHVpbnQzMl90IGtlcm5lbFsyXTsKKyAgfSB1Y19zaWdtYXNrOworICBzdHJ1Y3QgX2xpYmNfZnBzdGF0ZSBfX2ZwcmVnc19tZW07Cit9IHVjb250ZXh0X3Q7CisKKyNlbGlmIGRlZmluZWQoX19taXBzX18pCisKKy8qIGdsaWJjIGRvZXNuJ3QgaGF2ZSBuYW1lcyBmb3IgTUlQUyByZWdpc3RlcnMuICovCisKKyNkZWZpbmUgTkdSRUcgMzIKKyNkZWZpbmUgTkZQUkVHIDMyCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGdyZWdfdDsKK3R5cGVkZWYgZ3JlZ190IGdyZWdzZXRfdFtOR1JFR107CisKK3R5cGVkZWYgc3RydWN0IGZwcmVnc2V0IHsKKyAgdW5pb24geworICAgIGRvdWJsZSBmcF9kcmVnc1tORlBSRUddOworICAgIHN0cnVjdCB7CisgICAgICBmbG9hdCBfZnBfZnJlZ3M7CisgICAgICB1bnNpZ25lZCBfZnBfcGFkOworICAgIH0gZnBfZnJlZ3NbTkZQUkVHXTsKKyAgfSBmcF9yOworfSBmcHJlZ3NldF90OworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIHJlZ21hc2s7CisgIHVuc2lnbmVkIHN0YXR1czsKKyAgZ3JlZ190IHBjOworICBncmVnc2V0X3QgZ3JlZ3M7CisgIGZwcmVnc2V0X3QgZnByZWdzOworICB1bnNpZ25lZCBmcF9vd25lZDsKKyAgdW5zaWduZWQgZnBjX2NzcjsKKyAgdW5zaWduZWQgZnBjX2VpcjsKKyAgdW5zaWduZWQgdXNlZF9tYXRoOworICB1bnNpZ25lZCBkc3A7CisgIGdyZWdfdCBtZGhpOworICBncmVnX3QgbWRsbzsKKyAgdW5zaWduZWQgbG9uZyBoaTE7CisgIHVuc2lnbmVkIGxvbmcgbG8xOworICB1bnNpZ25lZCBsb25nIGhpMjsKKyAgdW5zaWduZWQgbG9uZyBsbzI7CisgIHVuc2lnbmVkIGxvbmcgaGkzOworICB1bnNpZ25lZCBsb25nIGxvMzsKK30gbWNvbnRleHRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWNvbnRleHQgeworICB1bnNpZ25lZCBsb25nIHVjX2ZsYWdzOworICBzdHJ1Y3QgdWNvbnRleHQqIHVjX2xpbms7CisgIHN0YWNrX3QgdWNfc3RhY2s7CisgIG1jb250ZXh0X3QgdWNfbWNvbnRleHQ7CisgIHNpZ3NldF90IHVjX3NpZ21hc2s7Cit9IHVjb250ZXh0X3Q7CisKKyNlbGlmIGRlZmluZWQoX19taXBzNjRfXykKKworI2Vycm9yIFRPRE8KKworI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKQorCitlbnVtIHsKKyAgUkVHX1I4ID0gMCwKKyAgUkVHX1I5LAorICBSRUdfUjEwLAorICBSRUdfUjExLAorICBSRUdfUjEyLAorICBSRUdfUjEzLAorICBSRUdfUjE0LAorICBSRUdfUjE1LAorICBSRUdfUkRJLAorICBSRUdfUlNJLAorICBSRUdfUkJQLAorICBSRUdfUkJYLAorICBSRUdfUkRYLAorICBSRUdfUkFYLAorICBSRUdfUkNYLAorICBSRUdfUlNQLAorICBSRUdfUklQLAorICBSRUdfRUZMLAorICBSRUdfQ1NHU0ZTLAorICBSRUdfRVJSLAorICBSRUdfVFJBUE5PLAorICBSRUdfT0xETUFTSywKKyAgUkVHX0NSMiwKKyAgTkdSRUcKK307CisKK3R5cGVkZWYgbG9uZyBncmVnX3Q7Cit0eXBlZGVmIGdyZWdfdCBncmVnc2V0X3RbTkdSRUddOworCitzdHJ1Y3QgX2xpYmNfZnB4cmVnIHsKKyAgdW5zaWduZWQgc2hvcnQgc2lnbmlmaWNhbmRbNF07CisgIHVuc2lnbmVkIHNob3J0IGV4cG9uZW50OworICB1bnNpZ25lZCBzaG9ydCBwYWRkaW5nWzNdOworfTsKKworc3RydWN0IF9saWJjX3htbXJlZyB7CisgIHVpbnQzMl90IGVsZW1lbnRbNF07Cit9OworCitzdHJ1Y3QgX2xpYmNfZnBzdGF0ZSB7CisgIHVpbnQxNl90IGN3ZDsKKyAgdWludDE2X3Qgc3dkOworICB1aW50MTZfdCBmdHc7CisgIHVpbnQxNl90IGZvcDsKKyAgdWludDY0X3QgcmlwOworICB1aW50NjRfdCByZHA7CisgIHVpbnQzMl90IG14Y3NyOworICB1aW50MzJfdCBteGNyX21hc2s7CisgIHN0cnVjdCBfbGliY19mcHhyZWcgX3N0WzhdOworICBzdHJ1Y3QgX2xpYmNfeG1tcmVnIF94bW1bMTZdOworICB1aW50MzJfdCBwYWRkaW5nWzI0XTsKK307CisKK3R5cGVkZWYgc3RydWN0IF9saWJjX2Zwc3RhdGUqIGZwcmVnc2V0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgZ3JlZ3NldF90IGdyZWdzOworICBmcHJlZ3NldF90IGZwcmVnczsKKyAgdW5zaWduZWQgbG9uZyBfX3Jlc2VydmVkMVs4XTsKK30gbWNvbnRleHRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWNvbnRleHQgeworICB1bnNpZ25lZCBsb25nIHVjX2ZsYWdzOworICBzdHJ1Y3QgdWNvbnRleHQqIHVjX2xpbms7CisgIHN0YWNrX3QgdWNfc3RhY2s7CisgIG1jb250ZXh0X3QgdWNfbWNvbnRleHQ7CisgIHNpZ3NldF90IHVjX3NpZ21hc2s7CisgIHN0cnVjdCBfbGliY19mcHN0YXRlIF9fZnByZWdzX21lbTsKK30gdWNvbnRleHRfdDsKKworI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX1VDT05URVhUX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3VuLmggYi9saWJjL2luY2x1ZGUvc3lzL3VuLmgKaW5kZXggZjg5ZWFkMy4uNjVmZmJkY2YgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvdW4uaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3VuLmgKQEAgLTI4LDggKzI4LDcgQEAKICNpZm5kZWYgX1NZU19VTl9IXwogI2RlZmluZSBfU1lTX1VOX0hfCiAKLSNpbmNsdWRlIDxzeXMvX3R5cGVzLmg+Ci10eXBlZGVmIF9fc2FfZmFtaWx5X3Qgc2FfZmFtaWx5X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHNhX2ZhbWlseV90OwogCiAjaW5jbHVkZSA8bGludXgvdW4uaD4KIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy91c2VyLmggYi9saWJjL2luY2x1ZGUvc3lzL3VzZXIuaAppbmRleCA5ZjExYTgzLi4xODY4NGYxIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL3VzZXIuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3VzZXIuaApAQCAtMzAsMTIgKzMwLDEzIEBACiAjZGVmaW5lIF9TWVNfVVNFUl9IXwogCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+IC8qIEZvciBQQUdFX1NJWkUuICovCiAKIF9fQkVHSU5fREVDTFMKIAogI2lmIF9faTM4Nl9fCiAKLXN0cnVjdCB1c2VyX2kzODdfc3RydWN0IHsKK3N0cnVjdCB1c2VyX2ZwcmVnc19zdHJ1Y3QgewogICBsb25nIGN3ZDsKICAgbG9uZyBzd2Q7CiAgIGxvbmcgdHdkOwpAQCAtODIsNyArODMsNyBAQAogc3RydWN0IHVzZXIgewogICBzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCByZWdzOwogICBpbnQgdV9mcHZhbGlkOwotICBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBpMzg3OworICBzdHJ1Y3QgdXNlcl9mcHJlZ3Nfc3RydWN0IGkzODc7CiAgIHVuc2lnbmVkIGxvbmcgaW50IHVfdHNpemU7CiAgIHVuc2lnbmVkIGxvbmcgaW50IHVfZHNpemU7CiAgIHVuc2lnbmVkIGxvbmcgaW50IHVfc3NpemU7CkBAIC05MSw3ICs5Miw3IEBACiAgIGxvbmcgaW50IHNpZ25hbDsKICAgaW50IHJlc2VydmVkOwogICB1bnNpZ25lZCBsb25nIHVfYXIwOwotICBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCogdV9mcHN0YXRlOworICBzdHJ1Y3QgdXNlcl9mcHJlZ3Nfc3RydWN0KiB1X2Zwc3RhdGU7CiAgIHVuc2lnbmVkIGxvbmcgbWFnaWM7CiAgIGNoYXIgdV9jb21tWzMyXTsKICAgaW50IHVfZGVidWdyZWdbOF07CkBAIC05OSwxMCArMTAwLDEwIEBACiAKICNlbGlmIGRlZmluZWQoX194ODZfNjRfXykKIAotc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3Qgeworc3RydWN0IHVzZXJfZnByZWdzX3N0cnVjdCB7CiAgIHVuc2lnbmVkIHNob3J0IGN3ZDsKICAgdW5zaWduZWQgc2hvcnQgc3dkOwotICB1bnNpZ25lZCBzaG9ydCB0d2Q7CisgIHVuc2lnbmVkIHNob3J0IGZ0dzsKICAgdW5zaWduZWQgc2hvcnQgZm9wOwogICBfX3U2NCByaXA7CiAgIF9fdTY0IHJkcDsKQEAgLTE0NSw3ICsxNDYsNyBAQAogICBzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCByZWdzOwogICBpbnQgdV9mcHZhbGlkOwogICBpbnQgcGFkMDsKLSAgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgaTM4NzsKKyAgc3RydWN0IHVzZXJfZnByZWdzX3N0cnVjdCBpMzg3OwogICB1bnNpZ25lZCBsb25nIGludCB1X3RzaXplOwogICB1bnNpZ25lZCBsb25nIGludCB1X2RzaXplOwogICB1bnNpZ25lZCBsb25nIGludCB1X3NzaXplOwpAQCAtMTU1LDcgKzE1Niw3IEBACiAgIGludCByZXNlcnZlZDsKICAgaW50IHBhZDE7CiAgIHVuc2lnbmVkIGxvbmcgdV9hcjA7Ci0gIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0KiB1X2Zwc3RhdGU7CisgIHN0cnVjdCB1c2VyX2ZwcmVnc19zdHJ1Y3QqIHVfZnBzdGF0ZTsKICAgdW5zaWduZWQgbG9uZyBtYWdpYzsKICAgY2hhciB1X2NvbW1bMzJdOwogICB1bnNpZ25lZCBsb25nIHVfZGVidWdyZWdbOF07CkBAIC0xODEsNyArMTgyLDcgQEAKIAogI2VsaWYgZGVmaW5lZChfX2FybV9fKQogCi1zdHJ1Y3QgdXNlcl9mcCB7CitzdHJ1Y3QgdXNlcl9mcHJlZ3MgewogICBzdHJ1Y3QgZnBfcmVnIHsKICAgICB1bnNpZ25lZCBpbnQgc2lnbjE6MTsKICAgICB1bnNpZ25lZCBpbnQgdW51c2VkOjE1OwpAQCAtMTk2LDYgKzE5Nyw5IEBACiAgIHVuc2lnbmVkIGNoYXIgZnR5cGVbOF07CiAgIHVuc2lnbmVkIGludCBpbml0X2ZsYWc7CiB9Oworc3RydWN0IHVzZXJfcmVncyB7CisgIHVuc2lnbmVkIGxvbmcgdXJlZ3NbMThdOworfTsKIHN0cnVjdCB1c2VyX3ZmcCB7CiAgIHVuc2lnbmVkIGxvbmcgbG9uZyBmcHJlZ3NbMzJdOwogICB1bnNpZ25lZCBsb25nIGZwc2NyOwpAQCAtMjA2LDcgKzIxMCw3IEBACiAgIHVuc2lnbmVkIGxvbmcgZnBpbnN0MjsKIH07CiBzdHJ1Y3QgdXNlciB7Ci0gIHN0cnVjdCBwdF9yZWdzIHJlZ3M7CisgIHN0cnVjdCB1c2VyX3JlZ3MgcmVnczsKICAgaW50IHVfZnB2YWxpZDsKICAgdW5zaWduZWQgbG9uZyBpbnQgdV90c2l6ZTsKICAgdW5zaWduZWQgbG9uZyBpbnQgdV9kc2l6ZTsKQEAgLTIxNSwxMiArMjE5LDEyIEBACiAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfc3RhY2s7CiAgIGxvbmcgaW50IHNpZ25hbDsKICAgaW50IHJlc2VydmVkOwotICB1bnNpZ25lZCBsb25nIHVfYXIwOworICBzdHJ1Y3QgdXNlcl9yZWdzKiB1X2FyMDsKICAgdW5zaWduZWQgbG9uZyBtYWdpYzsKICAgY2hhciB1X2NvbW1bMzJdOwogICBpbnQgdV9kZWJ1Z3JlZ1s4XTsKLSAgc3RydWN0IHVzZXJfZnAgdV9mcDsKLSAgc3RydWN0IHVzZXJfZnBfc3RydWN0KiB1X2ZwMDsKKyAgc3RydWN0IHVzZXJfZnByZWdzIHVfZnA7CisgIHN0cnVjdCB1c2VyX2ZwcmVncyogdV9mcDA7CiB9OwogCiAjZWxpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKQpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy92ZnMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvdmZzLmgKaW5kZXggMTBmZTUwMi4uNTM1OGZmYiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy92ZnMuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3Zmcy5oCkBAIC0zOCw1OCArMzgsNzYgQEAKIHR5cGVkZWYgc3RydWN0IHsgaW50IF9fdmFsWzJdOyB9IF9fZnNpZF90OwogdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CiAKLSNpZiBkZWZpbmVkKF9fTFA2NF9fKQotc3RydWN0IHN0YXRmcyB7Ci0gIHVpbnQ2NF90IGZfdHlwZTsKLSAgdWludDY0X3QgZl9ic2l6ZTsKLSAgdWludDY0X3QgZl9ibG9ja3M7Ci0gIHVpbnQ2NF90IGZfYmZyZWU7Ci0gIHVpbnQ2NF90IGZfYmF2YWlsOwotICB1aW50NjRfdCBmX2ZpbGVzOwotICB1aW50NjRfdCBmX2ZmcmVlOwotICBmc2lkX3QgZl9mc2lkOwotICB1aW50NjRfdCBmX25hbWVsZW47Ci0gIHVpbnQ2NF90IGZfZnJzaXplOwotICB1aW50NjRfdCBmX2ZsYWdzOwotICB1aW50NjRfdCBmX3NwYXJlWzRdOwotfTsKKyNpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisjZGVmaW5lIF9fU1RBVEZTNjRfQk9EWSBcCisgIHVpbnQ2NF90IGZfdHlwZTsgXAorICB1aW50NjRfdCBmX2JzaXplOyBcCisgIHVpbnQ2NF90IGZfYmxvY2tzOyBcCisgIHVpbnQ2NF90IGZfYmZyZWU7IFwKKyAgdWludDY0X3QgZl9iYXZhaWw7IFwKKyAgdWludDY0X3QgZl9maWxlczsgXAorICB1aW50NjRfdCBmX2ZmcmVlOyBcCisgIGZzaWRfdCBmX2ZzaWQ7IFwKKyAgdWludDY0X3QgZl9uYW1lbGVuOyBcCisgIHVpbnQ2NF90IGZfZnJzaXplOyBcCisgIHVpbnQ2NF90IGZfZmxhZ3M7IFwKKyAgdWludDY0X3QgZl9zcGFyZVs0XTsgXAorCisjZWxpZiBkZWZpbmVkKF9fbWlwc19fKSAmJiBkZWZpbmVkKF9fTFA2NF9fKQorLyogNjQtYml0IE1JUFMuICovCisjZGVmaW5lIF9fU1RBVEZTNjRfQk9EWSBcCisgIHVpbnQ2NF90IGZfdHlwZTsgXAorICB1aW50NjRfdCBmX2JzaXplOyBcCisgIHVpbnQ2NF90IGZfZnJzaXplOyAvKiBGcmFnbWVudCBzaXplIC0gdW5zdXBwb3J0ZWQuICovIFwKKyAgdWludDY0X3QgZl9ibG9ja3M7IFwKKyAgdWludDY0X3QgZl9iZnJlZTsgXAorICB1aW50NjRfdCBmX2ZpbGVzOyBcCisgIHVpbnQ2NF90IGZfZmZyZWU7IFwKKyAgdWludDY0X3QgZl9iYXZhaWw7IFwKKyAgZnNpZF90IGZfZnNpZDsgXAorICB1aW50NjRfdCBmX25hbWVsZW47IFwKKyAgdWludDY0X3QgZl9mbGFnczsgXAorICB1aW50NjRfdCBmX3NwYXJlWzVdOyBcCisKICNlbGlmIGRlZmluZWQoX19taXBzX18pCiAvKiAzMi1iaXQgTUlQUyAoY29ycmVzcG9uZHMgdG8gdGhlIGtlcm5lbCdzIHN0YXRmczY0IHR5cGUpLiAqLwotc3RydWN0IHN0YXRmcyB7Ci0gIHVpbnQzMl90IGZfdHlwZTsKLSAgdWludDMyX3QgZl9ic2l6ZTsKLSAgdWludDMyX3QgZl9mcnNpemU7Ci0gIHVpbnQzMl90IF9fcGFkOwotICB1aW50NjRfdCBmX2Jsb2NrczsKLSAgdWludDY0X3QgZl9iZnJlZTsKLSAgdWludDY0X3QgZl9maWxlczsKLSAgdWludDY0X3QgZl9mZnJlZTsKLSAgdWludDY0X3QgZl9iYXZhaWw7Ci0gIGZzaWRfdCBmX2ZzaWQ7Ci0gIHVpbnQzMl90IGZfbmFtZWxlbjsKLSAgdWludDMyX3QgZl9mbGFnczsKLSAgdWludDMyX3QgZl9zcGFyZVs1XTsKLX07CisjZGVmaW5lIF9fU1RBVEZTNjRfQk9EWSBcCisgIHVpbnQzMl90IGZfdHlwZTsgXAorICB1aW50MzJfdCBmX2JzaXplOyBcCisgIHVpbnQzMl90IGZfZnJzaXplOyBcCisgIHVpbnQzMl90IF9fcGFkOyBcCisgIHVpbnQ2NF90IGZfYmxvY2tzOyBcCisgIHVpbnQ2NF90IGZfYmZyZWU7IFwKKyAgdWludDY0X3QgZl9maWxlczsgXAorICB1aW50NjRfdCBmX2ZmcmVlOyBcCisgIHVpbnQ2NF90IGZfYmF2YWlsOyBcCisgIGZzaWRfdCBmX2ZzaWQ7IFwKKyAgdWludDMyX3QgZl9uYW1lbGVuOyBcCisgIHVpbnQzMl90IGZfZmxhZ3M7IFwKKyAgdWludDMyX3QgZl9zcGFyZVs1XTsgXAorCiAjZWxzZQogLyogMzItYml0IEFSTSBvciB4ODYgKGNvcnJlc3BvbmRzIHRvIHRoZSBrZXJuZWwncyBzdGF0ZnM2NCB0eXBlKS4gKi8KLXN0cnVjdCBzdGF0ZnMgewotICB1aW50MzJfdCBmX3R5cGU7Ci0gIHVpbnQzMl90IGZfYnNpemU7Ci0gIHVpbnQ2NF90IGZfYmxvY2tzOwotICB1aW50NjRfdCBmX2JmcmVlOwotICB1aW50NjRfdCBmX2JhdmFpbDsKLSAgdWludDY0X3QgZl9maWxlczsKLSAgdWludDY0X3QgZl9mZnJlZTsKLSAgZnNpZF90IGZfZnNpZDsKLSAgdWludDMyX3QgZl9uYW1lbGVuOwotICB1aW50MzJfdCBmX2Zyc2l6ZTsKLSAgdWludDMyX3QgZl9mbGFnczsKLSAgdWludDMyX3QgZl9zcGFyZVs0XTsKLX07CisjZGVmaW5lIF9fU1RBVEZTNjRfQk9EWSBcCisgIHVpbnQzMl90IGZfdHlwZTsgXAorICB1aW50MzJfdCBmX2JzaXplOyBcCisgIHVpbnQ2NF90IGZfYmxvY2tzOyBcCisgIHVpbnQ2NF90IGZfYmZyZWU7IFwKKyAgdWludDY0X3QgZl9iYXZhaWw7IFwKKyAgdWludDY0X3QgZl9maWxlczsgXAorICB1aW50NjRfdCBmX2ZmcmVlOyBcCisgIGZzaWRfdCBmX2ZzaWQ7IFwKKyAgdWludDMyX3QgZl9uYW1lbGVuOyBcCisgIHVpbnQzMl90IGZfZnJzaXplOyBcCisgIHVpbnQzMl90IGZfZmxhZ3M7IFwKKyAgdWludDMyX3QgZl9zcGFyZVs0XTsgXAorCiAjZW5kaWYKIAotLyogU291cmNlIGNvbXBhdGliaWxpdHkgd2l0aCBnbGliYy4gKi8KLSNkZWZpbmUgc3RhdGZzNjQgc3RhdGZzCitzdHJ1Y3Qgc3RhdGZzIHsgX19TVEFURlM2NF9CT0RZIH07CitzdHJ1Y3Qgc3RhdGZzNjQgeyBfX1NUQVRGUzY0X0JPRFkgfTsKKworI3VuZGVmIF9fU1RBVEZTNjRfQk9EWQogCiAvKiBEZWNsYXJlIHRoYXQgd2UgaGF2ZSB0aGUgZl9uYW1lbGVuLCBmX2Zyc2l6ZSwgYW5kIGZfZmxhZ3MgZmllbGRzLiAqLwogI2RlZmluZSBfU1RBVEZTX0ZfTkFNRUxFTgpAQCAtMTQyLDcgKzE2MCw5IEBACiAjZGVmaW5lICBfWElBRlNfU1VQRVJfTUFHSUMgICAgMHgwMTJGRDE2RAogCiBleHRlcm4gaW50IHN0YXRmcyhjb25zdCBjaGFyKiwgc3RydWN0IHN0YXRmcyopIF9fbm9ubnVsbCgoMSwgMikpOworZXh0ZXJuIGludCBzdGF0ZnM2NChjb25zdCBjaGFyKiwgc3RydWN0IHN0YXRmczY0KikgX19ub25udWxsKCgxLCAyKSk7CiBleHRlcm4gaW50IGZzdGF0ZnMoaW50LCBzdHJ1Y3Qgc3RhdGZzKikgX19ub25udWxsKCgyKSk7CitleHRlcm4gaW50IGZzdGF0ZnM2NChpbnQsIHN0cnVjdCBzdGF0ZnM2NCopIF9fbm9ubnVsbCgoMikpOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3dhaXQuaCBiL2xpYmMvaW5jbHVkZS9zeXMvd2FpdC5oCmluZGV4IGIzMGI3ZWMuLjhkOWE1ZjYgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvd2FpdC5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvd2FpdC5oCkBAIC00Nyw3ICs0Nyw2IEBACiAKIGV4dGVybiBwaWRfdCAgd2FpdChpbnQgKik7CiBleHRlcm4gcGlkX3QgIHdhaXRwaWQocGlkX3QsIGludCAqLCBpbnQpOwotZXh0ZXJuIHBpZF90ICB3YWl0MyhpbnQgKiwgaW50LCBzdHJ1Y3QgcnVzYWdlICopOwogZXh0ZXJuIHBpZF90ICB3YWl0NChwaWRfdCwgaW50ICosIGludCwgc3RydWN0IHJ1c2FnZSAqKTsKIAogLyogUG9zaXggc3RhdGVzIHRoYXQgaWR0eXBlX3Qgc2hvdWxkIGJlIGFuIGVudW1lcmF0aW9uIHR5cGUsIGJ1dApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5c2xvZy5oIGIvbGliYy9pbmNsdWRlL3N5c2xvZy5oCmluZGV4IDQ2NzdjMTQuLmNiY2VhYjIgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXNsb2cuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzbG9nLmgKQEAgLTI1LDYgKzI1LDcgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBfU1lTTE9HX0gKICNkZWZpbmUgX1NZU0xPR19ICiAKQEAgLTM0LDgyICszNSw2MCBAQAogCiBfX0JFR0lOX0RFQ0xTCiAKLS8qIEFsZXJ0IGxldmVscyAqLwotI2RlZmluZSBMT0dfRU1FUkcJMAotI2RlZmluZSBMT0dfQUxFUlQJMQotI2RlZmluZSBMT0dfQ1JJVAkyCi0jZGVmaW5lIExPR19FUlIJCTMKLSNkZWZpbmUgTE9HX1dBUk5JTkcJNAotI2RlZmluZSBMT0dfTk9USUNFCTUKLSNkZWZpbmUgTE9HX0lORk8JNgotI2RlZmluZSBMT0dfREVCVUcJNworLyogUHJpb3JpdGllcyBhcmUgdHJhbnNsYXRlZCB0byBBbmRyb2lkIGxvZyBwcmlvcml0aWVzIGFzIHNob3duLiAqLworI2RlZmluZSBMT0dfRU1FUkcgICAwIC8qIEVSUk9SICovCisjZGVmaW5lIExPR19BTEVSVCAgIDEgLyogRVJST1IgKi8KKyNkZWZpbmUgTE9HX0NSSVQgICAgMiAvKiBFUlJPUiAqLworI2RlZmluZSBMT0dfRVJSICAgICAzIC8qIEVSUk9SICovCisjZGVmaW5lIExPR19XQVJOSU5HIDQgLyogV0FSTiAqLworI2RlZmluZSBMT0dfTk9USUNFICA1IC8qIElORk8gKi8KKyNkZWZpbmUgTE9HX0lORk8gICAgNiAvKiBJTkZPICovCisjZGVmaW5lIExPR19ERUJVRyAgIDcgLyogREVCVUcgKi8KIAotI2RlZmluZSBMT0dfUFJJTUFTSwk3Ci0jZGVmaW5lIExPR19QUkkoeCkJKCh4KSAmIExPR19QUklNQVNLKQorI2RlZmluZSBMT0dfUFJJTUFTSyA3CisjZGVmaW5lIExPR19QUkkoeCkgKCh4KSAmIExPR19QUklNQVNLKQogCisvKiBGYWNpbGl0aWVzIGFyZSBjdXJyZW50bHkgaWdub3JlZCBvbiBBbmRyb2lkLiAqLworI2RlZmluZSBMT0dfS0VSTiAgICAgMDAwMAorI2RlZmluZSBMT0dfVVNFUiAgICAgMDAxMAorI2RlZmluZSBMT0dfTUFJTCAgICAgMDAyMAorI2RlZmluZSBMT0dfREFFTU9OICAgMDAzMAorI2RlZmluZSBMT0dfQVVUSCAgICAgMDA0MAorI2RlZmluZSBMT0dfU1lTTE9HICAgMDA1MAorI2RlZmluZSBMT0dfTFBSICAgICAgMDA2MAorI2RlZmluZSBMT0dfTkVXUyAgICAgMDA3MAorI2RlZmluZSBMT0dfVVVDUCAgICAgMDEwMAorI2RlZmluZSBMT0dfQ1JPTiAgICAgMDExMAorI2RlZmluZSBMT0dfQVVUSFBSSVYgMDEyMAorI2RlZmluZSBMT0dfRlRQICAgICAgMDEzMAorI2RlZmluZSBMT0dfTE9DQUwwICAgMDIwMAorI2RlZmluZSBMT0dfTE9DQUwxICAgMDIxMAorI2RlZmluZSBMT0dfTE9DQUwyICAgMDIyMAorI2RlZmluZSBMT0dfTE9DQUwzICAgMDIzMAorI2RlZmluZSBMT0dfTE9DQUw0ICAgMDI0MAorI2RlZmluZSBMT0dfTE9DQUw1ICAgMDI1MAorI2RlZmluZSBMT0dfTE9DQUw2ICAgMDI2MAorI2RlZmluZSBMT0dfTE9DQUw3ICAgMDI3MAogCi0vKiBGYWNpbGl0aWVzOyBub3QgYWN0dWFsbHkgdXNlZCAqLwotI2RlZmluZSBMT0dfS0VSTgkwMDAwCi0jZGVmaW5lIExPR19VU0VSCTAwMTAKLSNkZWZpbmUgTE9HX01BSUwJMDAyMAotI2RlZmluZSBMT0dfREFFTU9OCTAwMzAKLSNkZWZpbmUgTE9HX0FVVEgJMDA0MAotI2RlZmluZSBMT0dfU1lTTE9HCTAwNTAKLSNkZWZpbmUgTE9HX0xQUgkJMDA2MAotI2RlZmluZSBMT0dfTkVXUwkwMDcwCi0jZGVmaW5lIExPR19VVUNQCTAxMDAKLSNkZWZpbmUgTE9HX0NST04JMDExMAotI2RlZmluZSBMT0dfQVVUSFBSSVYJMDEyMAotI2RlZmluZSBMT0dfRlRQCQkwMTMwCi0jZGVmaW5lIExPR19MT0NBTDAJMDIwMAotI2RlZmluZSBMT0dfTE9DQUwxCTAyMTAKLSNkZWZpbmUgTE9HX0xPQ0FMMgkwMjIwCi0jZGVmaW5lIExPR19MT0NBTDMJMDIzMAotI2RlZmluZSBMT0dfTE9DQUw0CTAyNDAKLSNkZWZpbmUgTE9HX0xPQ0FMNQkwMjUwCi0jZGVmaW5lIExPR19MT0NBTDYJMDI2MAotI2RlZmluZSBMT0dfTE9DQUw3CTAyNzAKKyNkZWZpbmUgTE9HX0ZBQ01BU0sgMDE3NzAKKyNkZWZpbmUgTE9HX0ZBQyh4KSAoKCh4KSA+PiAzKSAmIChMT0dfRkFDTUFTSyA+PiAzKSkKIAotI2RlZmluZSBMT0dfRkFDTUFTSwkwMTc3MAotI2RlZmluZSBMT0dfRkFDKHgpCSgoKHgpID4+IDMpICYgKExPR19GQUNNQVNLID4+IDMpKQorI2RlZmluZSBMT0dfTUFTSyhwcmkpICgxIDw8IChwcmkpKQorI2RlZmluZSBMT0dfVVBUTyhwcmkpICgoMSA8PCAoKHByaSkrMSkpIC0gMSkKIAotI2RlZmluZQlMT0dfTUFTSyhwcmkpCSgxIDw8IChwcmkpKQkJLyogbWFzayBmb3Igb25lIHByaW9yaXR5ICovCi0jZGVmaW5lCUxPR19VUFRPKHByaSkJKCgxIDw8ICgocHJpKSsxKSkgLSAxKQkvKiBhbGwgcHJpb3JpdGllcyB0aHJvdWdoIHByaSAqLworLyogb3BlbmxvZygzKSBmbGFncyBhcmUgY3VycmVudGx5IGlnbm9yZWQgb24gQW5kcm9pZC4gKi8KKyNkZWZpbmUgTE9HX1BJRCAgICAweDAxCisjZGVmaW5lIExPR19DT05TICAgMHgwMgorI2RlZmluZSBMT0dfT0RFTEFZIDB4MDQKKyNkZWZpbmUgTE9HX05ERUxBWSAweDA4CisjZGVmaW5lIExPR19OT1dBSVQgMHgxMAorI2RlZmluZSBMT0dfUEVSUk9SIDB4MjAKIAotLyogb3BlbmxvZygpIGZsYWdzOyBvbmx5IExPR19QSUQgYW5kIExPR19QRVJST1Igc3VwcG9ydGVkICovCi0jZGVmaW5lICAgICAgICBMT0dfUElEICAgICAgICAgMHgwMSAgICAvKiBpbmNsdWRlIHBpZCB3aXRoIG1lc3NhZ2UgKi8KLSNkZWZpbmUgICAgICAgIExPR19DT05TICAgICAgICAweDAyICAgIC8qIHdyaXRlIHRvIGNvbnNvbGUgb24gbG9nZ2VyIGVycm9yICovCi0jZGVmaW5lICAgICAgICBMT0dfT0RFTEFZICAgICAgMHgwNCAgICAvKiBkZWxheSBjb25uZWN0aW9uIHVudGlsIHN5c2xvZygpICovCi0jZGVmaW5lICAgICAgICBMT0dfTkRFTEFZICAgICAgMHgwOCAgICAvKiBvcGVuIGNvbm5lY3Rpb24gaW1tZWRpYXRlbHkgKi8KLSNkZWZpbmUgICAgICAgIExPR19OT1dBSVQgICAgICAweDEwICAgIC8qIHdhaXQgZm9yIGNoaWxkIHByb2Nlc3NlcyAodW51c2VkIG9uIGxpbnV4KSAqLwotI2RlZmluZSAgICAgICAgTE9HX1BFUlJPUiAgICAgIDB4MjAgICAgLyogYWRkaXRpb25hbCBsb2dnaW5nIHRvIHN0ZGVyciAqLwotCi0vKiBCSU9OSUM6IHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgYXJlIGZyb20gT3BlbkJTRCdzIHN5cy9zeXNsb2cuaAotICovCi1zdHJ1Y3Qgc3lzbG9nX2RhdGEgewotCWludAlsb2dfZmlsZTsKLSAgICAgICAgaW50CWNvbm5lY3RlZDsKLSAgICAgICAgaW50CW9wZW5lZDsKLSAgICAgICAgaW50CWxvZ19zdGF0OwotICAgICAgICBjb25zdCBjaGFyIAkqbG9nX3RhZzsKLSAgICAgICAgaW50IAlsb2dfZmFjOwotICAgICAgICBpbnQgCWxvZ19tYXNrOwotfTsKLQotI2RlZmluZSBTWVNMT0dfREFUQV9JTklUIHstMSwgMCwgMCwgMCwgKGNvbnN0IGNoYXIgKikwLCBMT0dfVVNFUiwgMHhmZn0KLQotI2RlZmluZSBfUEFUSF9MT0cgICIvZGV2L3N5c2xvZyIKLQotZXh0ZXJuIHZvaWQJY2xvc2Vsb2codm9pZCk7Ci1leHRlcm4gdm9pZAlvcGVubG9nKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOwotZXh0ZXJuIGludAlzZXRsb2dtYXNrKGludCk7Ci1leHRlcm4gdm9pZAlzeXNsb2coaW50LCBjb25zdCBjaGFyICosIC4uLikgX19wcmludGZsaWtlKDIsIDMpOwotZXh0ZXJuIHZvaWQJdnN5c2xvZyhpbnQsIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCkgX19wcmludGZsaWtlKDIsIDApOwotZXh0ZXJuIHZvaWQJY2xvc2Vsb2dfcihzdHJ1Y3Qgc3lzbG9nX2RhdGEgKik7Ci1leHRlcm4gdm9pZAlvcGVubG9nX3IoY29uc3QgY2hhciAqLCBpbnQsIGludCwgc3RydWN0IHN5c2xvZ19kYXRhICopOwotZXh0ZXJuIGludAlzZXRsb2dtYXNrX3IoaW50LCBzdHJ1Y3Qgc3lzbG9nX2RhdGEgKik7Ci1leHRlcm4gdm9pZAlzeXNsb2dfcihpbnQsIHN0cnVjdCBzeXNsb2dfZGF0YSAqLCBjb25zdCBjaGFyICosIC4uLikgX19wcmludGZsaWtlKDMsIDQpOwotZXh0ZXJuIHZvaWQJdnN5c2xvZ19yKGludCwgc3RydWN0IHN5c2xvZ19kYXRhICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCkgX19wcmludGZsaWtlKDMsIDApOwordm9pZCBjbG9zZWxvZyh2b2lkKTsKK3ZvaWQgb3BlbmxvZyhjb25zdCBjaGFyKiwgaW50LCBpbnQpOworaW50IHNldGxvZ21hc2soaW50KTsKK3ZvaWQgc3lzbG9nKGludCwgY29uc3QgY2hhciosIC4uLikgX19wcmludGZsaWtlKDIsIDMpOwordm9pZCB2c3lzbG9nKGludCwgY29uc3QgY2hhciosIHZhX2xpc3QpIF9fcHJpbnRmbGlrZSgyLCAwKTsKIAogX19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3Rlcm1pb3MuaCBiL2xpYmMvaW5jbHVkZS90ZXJtaW9zLmgKaW5kZXggMGQ0NDM1NS4uYjk2ODVjYSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3Rlcm1pb3MuaAorKysgYi9saWJjL2luY2x1ZGUvdGVybWlvcy5oCkBAIC0zMSw4NyArMzEsMjMgQEAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxsaW51eC90ZXJtaW9zLmg+CiAKIF9fQkVHSU5fREVDTFMKIAotLyogUmVkZWZpbmUgdGhlc2UgdG8gbWF0Y2ggdGhlaXIgaW9jdGwgbnVtYmVyICovCi0jdW5kZWYgIFRDU0FOT1cKLSNkZWZpbmUgVENTQU5PVyAgICBUQ1NFVFMKLQotI3VuZGVmICBUQ1NBRFJBSU4KLSNkZWZpbmUgVENTQURSQUlOICBUQ1NFVFNXCi0KLSN1bmRlZiAgVENTQUZMVVNICi0jZGVmaW5lIFRDU0FGTFVTSCAgVENTRVRTRgotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgdGNnZXRhdHRyKGludCBmZCwgc3RydWN0IHRlcm1pb3MgKnMpCi17Ci0gICAgcmV0dXJuIGlvY3RsKGZkLCBUQ0dFVFMsIHMpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgdGNzZXRhdHRyKGludCBmZCwgaW50IF9fb3B0LCBjb25zdCBzdHJ1Y3QgdGVybWlvcyAqcykKLXsKLSAgICByZXR1cm4gaW9jdGwoZmQsIF9fb3B0LCAodm9pZCAqKXMpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgdGNmbG93KGludCBmZCwgaW50IGFjdGlvbikKLXsKLSAgICByZXR1cm4gaW9jdGwoZmQsIFRDWE9OQywgKHZvaWQgKikoaW50cHRyX3QpYWN0aW9uKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IHRjZmx1c2goaW50IGZkLCBpbnQgX19xdWV1ZSkKLXsKLSAgICByZXR1cm4gaW9jdGwoZmQsIFRDRkxTSCwgKHZvaWQgKikoaW50cHRyX3QpX19xdWV1ZSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCB0Y2RyYWluKGludCBmZCkKLXsKLSAgICByZXR1cm4gaW9jdGwoZmQsIFRDU0JSSywgKHZvaWQgKikoaW50cHRyX3QpMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHBpZF90IHRjZ2V0c2lkKGludCBmZCkKLXsKLSAgICBwaWRfdCBfcGlkOwotICAgIHJldHVybiBpb2N0bChmZCwgVElPQ0dTSUQsICZfcGlkKSA/IChwaWRfdCktMSA6IF9waWQ7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCB0Y3NlbmRicmVhayhpbnQgZmQsIGludCBfX2R1cmF0aW9uKQotewotICAgIHJldHVybiBpb2N0bChmZCwgVENTQlJLUCwgKHZvaWQgKikodWludHB0cl90KV9fZHVyYXRpb24pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBzcGVlZF90IGNmZ2V0b3NwZWVkKGNvbnN0IHN0cnVjdCB0ZXJtaW9zICpzKQotewotICAgIHJldHVybiAoc3BlZWRfdCkocy0+Y19jZmxhZyAmIENCQVVEKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IGNmc2V0b3NwZWVkKHN0cnVjdCB0ZXJtaW9zICpzLCBzcGVlZF90ICBzcGVlZCkKLXsKLSAgICBzLT5jX2NmbGFnID0gKHMtPmNfY2ZsYWcgJiB+Q0JBVUQpIHwgKHNwZWVkICYgQ0JBVUQpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBzcGVlZF90IGNmZ2V0aXNwZWVkKGNvbnN0IHN0cnVjdCB0ZXJtaW9zICpzKQotewotICAgIHJldHVybiAoc3BlZWRfdCkocy0+Y19jZmxhZyAmIENCQVVEKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IGNmc2V0aXNwZWVkKHN0cnVjdCB0ZXJtaW9zICpzLCBzcGVlZF90ICBzcGVlZCkKLXsKLSAgICBzLT5jX2NmbGFnID0gKHMtPmNfY2ZsYWcgJiB+Q0JBVUQpIHwgKHNwZWVkICYgQ0JBVUQpOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBjZm1ha2VyYXcoc3RydWN0IHRlcm1pb3MgKnMpCi17Ci0gICAgcy0+Y19pZmxhZyAmPSB+KElHTkJSS3xCUktJTlR8UEFSTVJLfElTVFJJUHxJTkxDUnxJR05DUnxJQ1JOTHxJWE9OKTsKLSAgICBzLT5jX29mbGFnICY9IH5PUE9TVDsKLSAgICBzLT5jX2xmbGFnICY9IH4oRUNIT3xFQ0hPTkx8SUNBTk9OfElTSUd8SUVYVEVOKTsKLSAgICBzLT5jX2NmbGFnICY9IH4oQ1NJWkV8UEFSRU5CKTsKLSAgICBzLT5jX2NmbGFnIHw9IENTODsKLX0KK3NwZWVkX3QgY2ZnZXRpc3BlZWQoY29uc3Qgc3RydWN0IHRlcm1pb3MqKTsKK3NwZWVkX3QgY2ZnZXRvc3BlZWQoY29uc3Qgc3RydWN0IHRlcm1pb3MqKTsKK3ZvaWQgY2ZtYWtlcmF3KHN0cnVjdCB0ZXJtaW9zKik7CitpbnQgY2ZzZXRpc3BlZWQoc3RydWN0IHRlcm1pb3MqLCBzcGVlZF90KTsKK2ludCBjZnNldG9zcGVlZChzdHJ1Y3QgdGVybWlvcyosIHNwZWVkX3QpOworaW50IGNmc2V0c3BlZWQoc3RydWN0IHRlcm1pb3MqLCBzcGVlZF90KTsKK2ludCB0Y2RyYWluKGludCk7CitpbnQgdGNmbG93KGludCwgaW50KTsKK2ludCB0Y2ZsdXNoKGludCwgaW50KTsKK2ludCB0Y2dldGF0dHIoaW50LCBzdHJ1Y3QgdGVybWlvcyopOworcGlkX3QgdGNnZXRzaWQoaW50KTsKK2ludCB0Y3NlbmRicmVhayhpbnQsIGludCk7CitpbnQgdGNzZXRhdHRyKGludCwgaW50LCBjb25zdCBzdHJ1Y3QgdGVybWlvcyopOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvdGltZS5oIGIvbGliYy9pbmNsdWRlL3RpbWUuaAppbmRleCAzZjIwNDdjLi4zNGE1M2IyIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvdGltZS5oCisrKyBiL2xpYmMvaW5jbHVkZS90aW1lLmgKQEAgLTMxLDE0ICszMSwxNSBAQAogCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx4bG9jYWxlLmg+CiAKIF9fQkVHSU5fREVDTFMKIAogI2RlZmluZSBDTE9DS1NfUEVSX1NFQyAxMDAwMDAwCiAKLWV4dGVybiBjaGFyKiB0em5hbWVbXTsKLWV4dGVybiBpbnQgZGF5bGlnaHQ7Ci1leHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CitleHRlcm4gY2hhciogdHpuYW1lW10gX19MSUJDX0FCSV9QVUJMSUNfXzsKK2V4dGVybiBpbnQgZGF5bGlnaHQgX19MSUJDX0FCSV9QVUJMSUNfXzsKK2V4dGVybiBsb25nIGludCB0aW1lem9uZSBfX0xJQkNfQUJJX1BVQkxJQ19fOwogCiBzdHJ1Y3Qgc2lnZXZlbnQ7CiAKQEAgLTU4LDQ2ICs1OSw0NCBAQAogCiAjZGVmaW5lIFRNX1pPTkUgdG1fem9uZQogCi1leHRlcm4gdGltZV90IHRpbWUodGltZV90Kik7Ci1leHRlcm4gaW50IG5hbm9zbGVlcChjb25zdCBzdHJ1Y3QgdGltZXNwZWMqLCBzdHJ1Y3QgdGltZXNwZWMqKTsKK2V4dGVybiB0aW1lX3QgdGltZSh0aW1lX3QqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIGludCBuYW5vc2xlZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjKiwgc3RydWN0IHRpbWVzcGVjKikgX19MSUJDX0FCSV9QVUJMSUNfXzsKIAotZXh0ZXJuIGNoYXIqIHN0cnRvdGltZXZhbChjb25zdCBjaGFyKiwgc3RydWN0IHRpbWV2YWwqKTsKK2V4dGVybiBjaGFyKiBhc2N0aW1lKGNvbnN0IHN0cnVjdCB0bSopIF9fTElCQ19BQklfUFVCTElDX187CitleHRlcm4gY2hhciogYXNjdGltZV9yKGNvbnN0IHN0cnVjdCB0bSosIGNoYXIqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOwogCi1leHRlcm4gY2hhciogYXNjdGltZShjb25zdCBzdHJ1Y3QgdG0qKTsKLWV4dGVybiBjaGFyKiBhc2N0aW1lX3IoY29uc3Qgc3RydWN0IHRtKiwgY2hhciopOworZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSh0aW1lX3QsIHRpbWVfdCkgX19MSUJDX0FCSV9QVUJMSUNfXzsKK2V4dGVybiB0aW1lX3QgbWt0aW1lKHN0cnVjdCB0bSopIF9fTElCQ19BQklfUFVCTElDX187CiAKLWV4dGVybiBkb3VibGUgZGlmZnRpbWUodGltZV90LCB0aW1lX3QpOwotZXh0ZXJuIHRpbWVfdCBta3RpbWUoc3RydWN0IHRtKik7CitleHRlcm4gc3RydWN0IHRtKiBsb2NhbHRpbWUoY29uc3QgdGltZV90KikgX19MSUJDX0FCSV9QVUJMSUNfXzsKK2V4dGVybiBzdHJ1Y3QgdG0qIGxvY2FsdGltZV9yKGNvbnN0IHRpbWVfdCosIHN0cnVjdCB0bSopIF9fTElCQ19BQklfUFVCTElDX187CiAKLWV4dGVybiBzdHJ1Y3QgdG0qIGxvY2FsdGltZShjb25zdCB0aW1lX3QqKTsKLWV4dGVybiBzdHJ1Y3QgdG0qIGxvY2FsdGltZV9yKGNvbnN0IHRpbWVfdCosIHN0cnVjdCB0bSopOworZXh0ZXJuIHN0cnVjdCB0bSogZ210aW1lKGNvbnN0IHRpbWVfdCopIF9fTElCQ19BQklfUFVCTElDX187CitleHRlcm4gc3RydWN0IHRtKiBnbXRpbWVfcihjb25zdCB0aW1lX3QqLCBzdHJ1Y3QgdG0qKSBfX0xJQkNfQUJJX1BVQkxJQ19fOwogCi1leHRlcm4gc3RydWN0IHRtKiBnbXRpbWUoY29uc3QgdGltZV90Kik7Ci1leHRlcm4gc3RydWN0IHRtKiBnbXRpbWVfcihjb25zdCB0aW1lX3QqLCBzdHJ1Y3QgdG0qKTsKK2V4dGVybiBjaGFyKiBzdHJwdGltZShjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIHN0cnVjdCB0bSopIF9fTElCQ19BQklfUFVCTElDX187CitleHRlcm4gc2l6ZV90IHN0cmZ0aW1lKGNoYXIqLCBzaXplX3QsIGNvbnN0IGNoYXIqLCBjb25zdCBzdHJ1Y3QgdG0qKSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIHNpemVfdCBzdHJmdGltZV9sKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB0bSAqLCBsb2NhbGVfdCkgX19MSUJDX0FCSV9QVUJMSUNfXzsKIAotZXh0ZXJuIGNoYXIqIHN0cnB0aW1lKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgc3RydWN0IHRtKik7Ci1leHRlcm4gc2l6ZV90IHN0cmZ0aW1lKGNoYXIqLCBzaXplX3QsIGNvbnN0IGNoYXIqLCBjb25zdCBzdHJ1Y3QgdG0qKTsKK2V4dGVybiBjaGFyKiBjdGltZShjb25zdCB0aW1lX3QqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIGNoYXIqIGN0aW1lX3IoY29uc3QgdGltZV90KiwgY2hhciopIF9fTElCQ19BQklfUFVCTElDX187CiAKLWV4dGVybiBjaGFyKiBjdGltZShjb25zdCB0aW1lX3QqKTsKLWV4dGVybiBjaGFyKiBjdGltZV9yKGNvbnN0IHRpbWVfdCosIGNoYXIqKTsKK2V4dGVybiB2b2lkIHR6c2V0KHZvaWQpIF9fTElCQ19BQklfUFVCTElDX187CiAKLWV4dGVybiB2b2lkIHR6c2V0KHZvaWQpOworZXh0ZXJuIGNsb2NrX3QgY2xvY2sodm9pZCkgX19MSUJDX0FCSV9QVUJMSUNfXzsKIAotZXh0ZXJuIGNsb2NrX3QgY2xvY2sodm9pZCk7CitleHRlcm4gaW50IGNsb2NrX2dldHJlcyhpbnQsIHN0cnVjdCB0aW1lc3BlYyopIF9fTElCQ19BQklfUFVCTElDX187CitleHRlcm4gaW50IGNsb2NrX2dldHRpbWUoaW50LCBzdHJ1Y3QgdGltZXNwZWMqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOwogCi1leHRlcm4gaW50IGNsb2NrX2dldHJlcyhpbnQsIHN0cnVjdCB0aW1lc3BlYyopOwotZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lKGludCwgc3RydWN0IHRpbWVzcGVjKik7CitleHRlcm4gaW50IHRpbWVyX2NyZWF0ZShpbnQsIHN0cnVjdCBzaWdldmVudCosIHRpbWVyX3QqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIGludCB0aW1lcl9kZWxldGUodGltZXJfdCkgX19MSUJDX0FCSV9QVUJMSUNfXzsKK2V4dGVybiBpbnQgdGltZXJfc2V0dGltZSh0aW1lcl90LCBpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjKiwgc3RydWN0IGl0aW1lcnNwZWMqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjKikgX19MSUJDX0FCSV9QVUJMSUNfXzsKK2V4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1bih0aW1lcl90KSBfX0xJQkNfQUJJX1BVQkxJQ19fOwogCi1leHRlcm4gaW50IHRpbWVyX2NyZWF0ZShpbnQsIHN0cnVjdCBzaWdldmVudCosIHRpbWVyX3QqKTsKLWV4dGVybiBpbnQgdGltZXJfZGVsZXRlKHRpbWVyX3QpOwotZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMqLCBzdHJ1Y3QgaXRpbWVyc3BlYyopOwotZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjKik7Ci1leHRlcm4gaW50IHRpbWVyX2dldG92ZXJydW4odGltZXJfdCk7Ci0KLWV4dGVybiB0aW1lX3QgdGltZWxvY2FsKHN0cnVjdCB0bSopOwotZXh0ZXJuIHRpbWVfdCB0aW1lZ20oc3RydWN0IHRtKik7Ci1leHRlcm4gdGltZV90IHRpbWUycG9zaXgodGltZV90KTsKLWV4dGVybiB0aW1lX3QgcG9zaXgydGltZSh0aW1lX3QpOworLyogTm9uLXN0YW5kYXJkIGV4dGVuc2lvbnMgdGhhdCBhcmUgaW4gdGhlIEJTRHMgYW5kIGdsaWJjLiAqLworZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwoc3RydWN0IHRtKikgX19MSUJDX0FCSV9QVUJMSUNfXzsKK2V4dGVybiB0aW1lX3QgdGltZWdtKHN0cnVjdCB0bSopIF9fTElCQ19BQklfUFVCTElDX187CiAKIF9fRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS90aW1lNjQuaCBiL2xpYmMvaW5jbHVkZS90aW1lNjQuaAppbmRleCA3ZWMwNWFmLi45MDU2NjlkIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvdGltZTY0LmgKKysrIGIvbGliYy9pbmNsdWRlL3RpbWU2NC5oCkBAIC0zMSwyOSArMzEsMzYgQEAKICNpZm5kZWYgVElNRTY0X0gKICNkZWZpbmUgVElNRTY0X0gKIAorI2lmIGRlZmluZWQoX19MUDY0X18pCisKKyNlcnJvciBZb3VyIHRpbWVfdCBpcyBhbHJlYWR5IDY0LWJpdC4KKworI2Vsc2UKKworLyogTGVnYWN5IGNydWZ0IGZvciBMUDMyIHdoZXJlIHRpbWVfdCB3YXMgMzItYml0LiAqLworCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgogCiBfX0JFR0lOX0RFQ0xTCiAKLXR5cGVkZWYgaW50NjRfdCAgdGltZTY0X3Q7Cit0eXBlZGVmIGludDY0X3QgdGltZTY0X3Q7CiAKLXN0cnVjdCB0bSAqZ210aW1lNjRfciAoY29uc3QgdGltZTY0X3QgKiwgc3RydWN0IHRtICopOwotc3RydWN0IHRtICpsb2NhbHRpbWU2NF9yIChjb25zdCB0aW1lNjRfdCAqLCBzdHJ1Y3QgdG0gKik7Ci1zdHJ1Y3QgdG0gKmdtdGltZTY0IChjb25zdCB0aW1lNjRfdCAqKTsKLXN0cnVjdCB0bSAqbG9jYWx0aW1lNjQgKGNvbnN0IHRpbWU2NF90ICopOwotCi1jaGFyICphc2N0aW1lNjQgKGNvbnN0IHN0cnVjdCB0bSAqKTsKLWNoYXIgKmFzY3RpbWU2NF9yIChjb25zdCBzdHJ1Y3QgdG0gKiwgY2hhciAqKTsKLQotY2hhciAqY3RpbWU2NCAoY29uc3QgdGltZTY0X3QqKTsKLWNoYXIgKmN0aW1lNjRfciAoY29uc3QgdGltZTY0X3QqLCBjaGFyKik7Ci0KLXRpbWU2NF90IHRpbWVnbTY0IChjb25zdCBzdHJ1Y3QgdG0gKik7Ci10aW1lNjRfdCBta3RpbWU2NCAoY29uc3Qgc3RydWN0IHRtICopOwotdGltZTY0X3QgdGltZWxvY2FsNjQgKGNvbnN0IHN0cnVjdCB0bSAqKTsKK2NoYXIqIGFzY3RpbWU2NChjb25zdCBzdHJ1Y3QgdG0qKTsKK2NoYXIqIGFzY3RpbWU2NF9yKGNvbnN0IHN0cnVjdCB0bSosIGNoYXIqKTsKK2NoYXIqIGN0aW1lNjQoY29uc3QgdGltZTY0X3QqKTsKK2NoYXIqIGN0aW1lNjRfcihjb25zdCB0aW1lNjRfdCosIGNoYXIqKTsKK3N0cnVjdCB0bSogZ210aW1lNjQoY29uc3QgdGltZTY0X3QqKTsKK3N0cnVjdCB0bSogZ210aW1lNjRfcihjb25zdCB0aW1lNjRfdCosIHN0cnVjdCB0bSopOworc3RydWN0IHRtKiBsb2NhbHRpbWU2NChjb25zdCB0aW1lNjRfdCopOworc3RydWN0IHRtKiBsb2NhbHRpbWU2NF9yKGNvbnN0IHRpbWU2NF90Kiwgc3RydWN0IHRtKik7Cit0aW1lNjRfdCBta3RpbWU2NChjb25zdCBzdHJ1Y3QgdG0qKTsKK3RpbWU2NF90IHRpbWVnbTY0KGNvbnN0IHN0cnVjdCB0bSopOwordGltZTY0X3QgdGltZWxvY2FsNjQoY29uc3Qgc3RydWN0IHRtKik7CiAKIF9fRU5EX0RFQ0xTCiAKKyNlbmRpZgorCiAjZW5kaWYgLyogVElNRTY0X0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS91Y2hhci5oIGIvbGliYy9pbmNsdWRlL3VjaGFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFmY2I1YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS91Y2hhci5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfVUNIQVJfSF8KKyNkZWZpbmUgX1VDSEFSX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCitfX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgX19TVERfVVRGXzE2X18gMQorI2RlZmluZSBfX1NURF9VVEZfMzJfXyAxCisKK3NpemVfdCBjMTZydG9tYihjaGFyKiBfX3Jlc3RyaWN0LCBjaGFyMTZfdCwgbWJzdGF0ZV90KiBfX3Jlc3RyaWN0KTsKK3NpemVfdCBjMzJydG9tYihjaGFyKiBfX3Jlc3RyaWN0LCBjaGFyMzJfdCwgbWJzdGF0ZV90KiBfX3Jlc3RyaWN0KTsKK3NpemVfdCBtYnJ0b2MxNihjaGFyMTZfdCogX19yZXN0cmljdCwKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0LAorICAgICAgICAgICAgICAgIHNpemVfdCwKKyAgICAgICAgICAgICAgICBtYnN0YXRlX3QqIF9fcmVzdHJpY3QpOworc2l6ZV90IG1icnRvYzMyKGNoYXIzMl90KiBfX3Jlc3RyaWN0LAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsCisgICAgICAgICAgICAgICAgc2l6ZV90LAorICAgICAgICAgICAgICAgIG1ic3RhdGVfdCogX19yZXN0cmljdCk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfVUNIQVJfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS91Y29udGV4dC5oIGIvbGliYy9pbmNsdWRlL3Vjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhMjk4MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS91Y29udGV4dC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfVUNPTlRFWFRfSF8KKyNkZWZpbmUgX1VDT05URVhUX0hfCisKKyNpbmNsdWRlIDxzeXMvdWNvbnRleHQuaD4KKworI2VuZGlmIC8qIF9VQ09OVEVYVF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3VuaXN0ZC5oIGIvbGliYy9pbmNsdWRlL3VuaXN0ZC5oCmluZGV4IDI5NzU4ZjUuLjdmYmFmZGYgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS91bmlzdGQuaAorKysgYi9saWJjL2luY2x1ZGUvdW5pc3RkLmgKQEAgLTQ3LDEzICs0NywxNCBAQAogI2RlZmluZSBTRUVLX0NVUiAxCiAjZGVmaW5lIFNFRUtfRU5EIDIKIAotZXh0ZXJuIGNoYXIgKiplbnZpcm9uOworZXh0ZXJuIGNoYXIqKiBlbnZpcm9uOworCiBleHRlcm4gX19ub3JldHVybiB2b2lkIF9leGl0KGludCk7CiAKIGV4dGVybiBwaWRfdCAgZm9yayh2b2lkKTsKIGV4dGVybiBwaWRfdCAgdmZvcmsodm9pZCk7CiBleHRlcm4gcGlkX3QgIGdldHBpZCh2b2lkKTsKLWV4dGVybiBwaWRfdCAgZ2V0dGlkKHZvaWQpOworZXh0ZXJuIHBpZF90ICBnZXR0aWQodm9pZCkgX19wdXJlMjsKIGV4dGVybiBwaWRfdCAgZ2V0cGdpZChwaWRfdCk7CiBleHRlcm4gaW50ICAgIHNldHBnaWQocGlkX3QsIHBpZF90KTsKIGV4dGVybiBwaWRfdCAgZ2V0cHBpZCh2b2lkKTsKQEAgLTY0LDE0ICs2NSwxMiBAQAogCiBleHRlcm4gaW50IGV4ZWN2KGNvbnN0IGNoYXIgKiwgY2hhciAqIGNvbnN0ICopOwogZXh0ZXJuIGludCBleGVjdnAoY29uc3QgY2hhciAqLCBjaGFyICogY29uc3QgKik7CitleHRlcm4gaW50IGV4ZWN2cGUoY29uc3QgY2hhciAqLCBjaGFyICogY29uc3QgKiwgY2hhciAqIGNvbnN0ICopOwogZXh0ZXJuIGludCBleGVjdmUoY29uc3QgY2hhciAqLCBjaGFyICogY29uc3QgKiwgY2hhciAqIGNvbnN0ICopOwogZXh0ZXJuIGludCBleGVjbChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIGV4dGVybiBpbnQgZXhlY2xwKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogZXh0ZXJuIGludCBleGVjbGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CiAKLS8qIElNUE9SVEFOVDogU2VlIGNvbW1lbnQgdW5kZXIgPHN5cy9wcmN0bC5oPiBhYm91dCB0aGlzIGRlY2xhcmF0aW9uICovCi1leHRlcm4gaW50IHByY3RsKGludCAgb3B0aW9uLCAuLi4pOwotCiBleHRlcm4gaW50IG5pY2UoaW50KTsKIAogZXh0ZXJuIGludCBzZXR1aWQodWlkX3QpOwpAQCAtOTAsNyArODksNiBAQAogZXh0ZXJuIGludCBzZXRyZXNnaWQoZ2lkX3QsIGdpZF90LCBnaWRfdCk7CiBleHRlcm4gaW50IGdldHJlc3VpZCh1aWRfdCAqcnVpZCwgdWlkX3QgKmV1aWQsIHVpZF90ICpzdWlkKTsKIGV4dGVybiBpbnQgZ2V0cmVzZ2lkKGdpZF90ICpyZ2lkLCBnaWRfdCAqZWdpZCwgZ2lkX3QgKnNnaWQpOwotZXh0ZXJuIGludCBpc3NldHVnaWQodm9pZCk7CiBleHRlcm4gY2hhciogZ2V0bG9naW4odm9pZCk7CiBleHRlcm4gY2hhciogZ2V0dXNlcnNoZWxsKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2V0dXNlcnNoZWxsKHZvaWQpOwpAQCAtMTYzLDggKzE2MSw2IEBACiAKIGV4dGVybiBpbnQgZ2V0aG9zdG5hbWUoY2hhciAqLCBzaXplX3QpOwogCi1leHRlcm4gaW50IGdldGR0YWJsZXNpemUodm9pZCk7Ci0KIGV4dGVybiB2b2lkICpfX2Jyayh2b2lkICopOwogZXh0ZXJuIGludCBicmsodm9pZCAqKTsKIGV4dGVybiB2b2lkICpzYnJrKHB0cmRpZmZfdCk7CkBAIC0xNzQsNyArMTcwLDcgQEAKIGV4dGVybiBpbnQgb3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsKIAogZXh0ZXJuIGludCBpc2F0dHkoaW50KTsKLWV4dGVybiBjaGFyKiB0dHluYW1lKGludCk7CitleHRlcm4gY2hhciogdHR5bmFtZShpbnQpIF9fd2FybmF0dHIoInR0eW5hbWUgaXMgbm90IHRocmVhZC1zYWZlOyB1c2UgdHR5bmFtZV9yIGluc3RlYWQiKTsKIGV4dGVybiBpbnQgdHR5bmFtZV9yKGludCwgY2hhciosIHNpemVfdCk7CiAKIGV4dGVybiBpbnQgIGFjY3QoY29uc3QgY2hhciogIGZpbGVwYXRoKTsKQEAgLTE4NSwyNiArMTgxLDE3IEBACiAKIGV4dGVybiBpbnQgZGFlbW9uKGludCwgaW50KTsKIAotLyogQSBzcGVjaWFsIHN5c2NhbGwgdGhhdCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgQVJNLCBub3QgeDg2IGZ1bmN0aW9uLiAqLwotZXh0ZXJuIGludCBjYWNoZWZsdXNoKGxvbmcgc3RhcnQsIGxvbmcgZW5kLCBsb25nIGZsYWdzKTsKKyNpZiBkZWZpbmVkKF9fYXJtX18pIHx8IChkZWZpbmVkKF9fbWlwc19fKSAmJiAhZGVmaW5lZChfX0xQNjRfXykpCitleHRlcm4gaW50IGNhY2hlZmx1c2gobG9uZywgbG9uZywgbG9uZyk7CisgICAgLyogX19hdHRyaWJ1dGVfXygoZGVwcmVjYXRlZCgidXNlIF9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlIGluc3RlYWQiKSkpOyAqLworI2VuZGlmCiAKIGV4dGVybiBwaWRfdCB0Y2dldHBncnAoaW50IGZkKTsKIGV4dGVybiBpbnQgICB0Y3NldHBncnAoaW50IGZkLCBwaWRfdCBfcGlkKTsKIAotI2lmIDAgLyogTUlTU0lORyBGUk9NIEJJT05JQyAqLwotZXh0ZXJuIGludCBleGVjdnBlKGNvbnN0IGNoYXIgKiwgY2hhciAqIGNvbnN0ICosIGNoYXIgKiBjb25zdCAqKTsKLWV4dGVybiBpbnQgZXhlY2xwZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKLWV4dGVybiBpbnQgZ2V0ZnN1aWQodWlkX3QpOwotZXh0ZXJuIGludCBzZXRmc3VpZCh1aWRfdCk7Ci1leHRlcm4gaW50IGdldGxvZ2luX3IoY2hhciogbmFtZSwgc2l6ZV90IG5hbWVzaXplKTsKLWV4dGVybiBpbnQgc2V0aG9zdG5hbWUoY29uc3QgY2hhciAqLCBzaXplX3QpOwotZXh0ZXJuIGludCBnZXRkb21haW5uYW1lKGNoYXIgKiwgc2l6ZV90KTsKLWV4dGVybiBpbnQgc2V0ZG9tYWlubmFtZShjb25zdCBjaGFyICosIHNpemVfdCk7Ci0jZW5kaWYgLyogTUlTU0lORyAqLwotCiAvKiBVc2VkIHRvIHJldHJ5IHN5c2NhbGxzIHRoYXQgY2FuIHJldHVybiBFSU5UUi4gKi8KICNkZWZpbmUgVEVNUF9GQUlMVVJFX1JFVFJZKGV4cCkgKHsgICAgICAgICBcCi0gICAgdHlwZW9mIChleHApIF9yYzsgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fdHlwZW9mX18oZXhwKSBfcmM7ICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIF9yYyA9IChleHApOyAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKF9yYyA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7IFwKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS91dG1wLmggYi9saWJjL2luY2x1ZGUvdXRtcC5oCmluZGV4IGZmZDNjOTIuLmQ3NjQyMjcgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS91dG1wLmgKKysrIGIvbGliYy9pbmNsdWRlL3V0bXAuaApAQCAtMzYsOSArMzYsMTUgQEAKICNkZWZpbmUgX1BBVEhfV1RNUCAgICAgICIvdmFyL2xvZy93dG1wIgogI2RlZmluZSBfUEFUSF9MQVNUTE9HICAgIi92YXIvbG9nL2xhc3Rsb2ciCiAKLSNkZWZpbmUJVVRfTkFNRVNJWkUJOAotI2RlZmluZQlVVF9MSU5FU0laRQk4Ci0jZGVmaW5lCVVUX0hPU1RTSVpFCTE2CisjaWZkZWYgX19MUDY0X18KKyNkZWZpbmUgVVRfTkFNRVNJWkUgMzIKKyNkZWZpbmUgVVRfTElORVNJWkUgMzIKKyNkZWZpbmUgVVRfSE9TVFNJWkUgMjU2CisjZWxzZQorI2RlZmluZSBVVF9OQU1FU0laRSA4CisjZGVmaW5lIFVUX0xJTkVTSVpFIDgKKyNkZWZpbmUgVVRfSE9TVFNJWkUgMTYKKyNlbmRpZgogCiAjZGVmaW5lIFVTRVJfUFJPQ0VTUyA3CiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS93Y2hhci5oIGIvbGliYy9pbmNsdWRlL3djaGFyLmgKaW5kZXggNzZhYzAyYy4uZTBlNWM4MiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3djaGFyLmgKKysrIGIvbGliYy9pbmNsdWRlL3djaGFyLmgKQEAgLTM0LDIxICszNCwyMCBAQAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDxtYWxsb2MuaD4KIAotLyogSU1QT1JUQU5UOiBBbnkgY29kZSB0aGF0IHJlbGllcyBvbiB3aWRlIGNoYXJhY3RlciBzdXBwb3J0IGlzIGVzc2VudGlhbGx5Ci0gKiAgICAgICAgICAgIG5vbi1wb3J0YWJsZSBhbmQvb3IgYnJva2VuLiB0aGUgb25seSByZWFzb24gdGhpcyBoZWFkZXIgZXhpc3QKLSAqICAgICAgICAgICAgaXMgYmVjYXVzZSBJJ20gcmVhbGx5IGEgbmljZSBndXkuIEhvd2V2ZXIsIEknbSBub3QgbmljZSBlbm91Z2gKLSAqICAgICAgICAgICAgdG8gcHJvdmlkZSB5b3Ugd2l0aCBhIHJlYWwgaW1wbGVtZW50YXRpb24uIGluc3RlYWQgd2NoYXJfdCA9PSBjaGFyCi0gKiAgICAgICAgICAgIGFuZCBhbGwgd2MgZnVuY3Rpb25zIGFyZSBzdHVicyB0byB0aGVpciAibm9ybWFsIiBlcXVpdmFsZW50Li4uCi0gKi8KKyNpbmNsdWRlIDxtYWNoaW5lL3djaGFyX2xpbWl0cy5oPgogCiBfX0JFR0lOX0RFQ0xTCiAKLXR5cGVkZWYgX19XSU5UX1RZUEVfXyAgICAgICAgICAgd2ludF90OwotdHlwZWRlZiBzdHJ1Y3QgeyBpbnQgIGR1bW15OyB9ICBtYnN0YXRlX3Q7Cit0eXBlZGVmIF9fV0lOVF9UWVBFX18gIHdpbnRfdDsKK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDhfdCBfX3NlcVs0XTsKKyNpZmRlZiBfX0xQNjRfXworICBjaGFyIF9fcmVzZXJ2ZWRbNF07CisjZW5kaWYKK30gbWJzdGF0ZV90OwogCi10eXBlZGVmIGVudW0geworZW51bSB7CiAgICAgV0NfVFlQRV9JTlZBTElEID0gMCwKICAgICBXQ19UWVBFX0FMTlVNLAogICAgIFdDX1RZUEVfQUxQSEEsCkBAIC02MywxMiArNjIsOSBAQAogICAgIFdDX1RZUEVfVVBQRVIsCiAgICAgV0NfVFlQRV9YRElHSVQsCiAgICAgV0NfVFlQRV9NQVgKLX0gd2N0eXBlX3Q7Cit9OwogCi0jaWZuZGVmIFdDSEFSX01BWAotI2RlZmluZSAgV0NIQVJfTUFYICAgSU5UX01BWAotI2RlZmluZSAgV0NIQVJfTUlOICAgSU5UX01JTgotI2VuZGlmCit0eXBlZGVmIGxvbmcgd2N0eXBlX3Q7CiAKICNkZWZpbmUgIFdFT0YgICAgICAgICgod2ludF90KSgtMSkpCiAKQEAgLTc3LDYgKzczLDcgQEAKIGV4dGVybiBpbnQgICAgICAgICAgICAgICBmd3NjYW5mKEZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwogZXh0ZXJuIGludCAgICAgICAgICAgICAgIGlzd2FsbnVtKHdpbnRfdCk7CiBleHRlcm4gaW50ICAgICAgICAgICAgICAgaXN3YWxwaGEod2ludF90KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICBpc3dibGFuayh3aW50X3QpOwogZXh0ZXJuIGludCAgICAgICAgICAgICAgIGlzd2NudHJsKHdpbnRfdCk7CiBleHRlcm4gaW50ICAgICAgICAgICAgICAgaXN3ZGlnaXQod2ludF90KTsKIGV4dGVybiBpbnQgICAgICAgICAgICAgICBpc3dncmFwaCh3aW50X3QpOwpAQCAtOTcsNyArOTQsOCBAQAogZXh0ZXJuIGludCAgICAgICAgICAgICAgIG1ic2luaXQoY29uc3QgbWJzdGF0ZV90ICopOwogZXh0ZXJuIHNpemVfdCAgICAgICAgICAgIG1icmxlbihjb25zdCBjaGFyICosIHNpemVfdCwgbWJzdGF0ZV90ICopOwogZXh0ZXJuIHNpemVfdCAgICAgICAgICAgIG1icnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgbWJzdGF0ZV90ICopOwotZXh0ZXJuIHNpemVfdCAgICAgICAgICAgIG1ic3J0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiosIHNpemVfdCwgbWJzdGF0ZV90ICopOworZXh0ZXJuIHNpemVfdCBtYnNydG93Y3Mod2NoYXJfdCosIGNvbnN0IGNoYXIqKiwgc2l6ZV90LCBtYnN0YXRlX3QqKTsKK2V4dGVybiBzaXplX3QgbWJzbnJ0b3djcyh3Y2hhcl90KiwgY29uc3QgY2hhcioqLCBzaXplX3QsIHNpemVfdCwgbWJzdGF0ZV90Kik7CiBleHRlcm4gc2l6ZV90ICAgICAgICAgICAgbWJzdG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiBleHRlcm4gd2ludF90ICAgICAgICAgICAgcHV0d2Mod2NoYXJfdCwgRklMRSAqKTsKIGV4dGVybiB3aW50X3QgICAgICAgICAgICBwdXR3Y2hhcih3Y2hhcl90KTsKQEAgLTEwNiw5ICsxMDQsMTIgQEAKIGV4dGVybiB3aW50X3QgICAgICAgICAgICB0b3dsb3dlcih3aW50X3QpOwogZXh0ZXJuIHdpbnRfdCAgICAgICAgICAgIHRvd3VwcGVyKHdpbnRfdCk7CiBleHRlcm4gd2ludF90ICAgICAgICAgICAgdW5nZXR3Yyh3aW50X3QsIEZJTEUgKik7Ci1leHRlcm4gaW50ICAgICAgICAgICAgICAgdmZ3cHJpbnRmKEZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCB2YV9saXN0KTsKLWV4dGVybiBpbnQgICAgICAgICAgICAgICB2d3ByaW50Zihjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOwotZXh0ZXJuIGludCAgICAgICAgICAgICAgIHZzd3ByaW50Zih3Y2hhcl90ICosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCAqLCB2YV9saXN0KTsKK2V4dGVybiBpbnQgdmZ3cHJpbnRmKEZJTEUqLCBjb25zdCB3Y2hhcl90KiwgdmFfbGlzdCk7CitleHRlcm4gaW50IHZmd3NjYW5mKEZJTEUqLCBjb25zdCB3Y2hhcl90KiwgdmFfbGlzdCk7CitleHRlcm4gaW50IHZzd3ByaW50Zih3Y2hhcl90Kiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90KiwgdmFfbGlzdCk7CitleHRlcm4gaW50IHZzd3NjYW5mKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90KiwgdmFfbGlzdCk7CitleHRlcm4gaW50IHZ3cHJpbnRmKGNvbnN0IHdjaGFyX3QqLCB2YV9saXN0KTsKK2V4dGVybiBpbnQgdndzY2FuZihjb25zdCB3Y2hhcl90KiwgdmFfbGlzdCk7CiBleHRlcm4gc2l6ZV90ICAgICAgICAgICAgd2NydG9tYihjaGFyICosIHdjaGFyX3QsIG1ic3RhdGVfdCAqKTsKIGV4dGVybiBpbnQgICAgICAgICAgICAgICB3Y3NjYXNlY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKIGV4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3NjYXQod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpAQCAtMTE3LDIzICsxMTgsMjYgQEAKIGV4dGVybiBpbnQgICAgICAgICAgICAgICB3Y3Njb2xsKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKIGV4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3NjcHkod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwogZXh0ZXJuIHNpemVfdCAgICAgICAgICAgIHdjc2NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwotZXh0ZXJuIHNpemVfdCAgICAgICAgICAgIHdjc2Z0aW1lKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIGNvbnN0IHN0cnVjdCB0bSAqKTsKK2V4dGVybiBzaXplX3QgICAgICAgICAgICB3Y3NmdGltZSh3Y2hhcl90ICosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCAqLCBjb25zdCBzdHJ1Y3QgdG0gKikgX19MSUJDX0FCSV9QVUJMSUNfXzsKIGV4dGVybiBzaXplX3QgICAgICAgICAgICB3Y3NsZW4oY29uc3Qgd2NoYXJfdCAqKTsKIGV4dGVybiBpbnQgICAgICAgICAgICAgICB3Y3NuY2FzZWNtcChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKIGV4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3NuY2F0KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwogZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdjc25jbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CiBleHRlcm4gd2NoYXJfdCAgICAgICAgICAqd2NzbmNweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKK2V4dGVybiBzaXplX3Qgd2NzbnJ0b21icyhjaGFyKiwgY29uc3Qgd2NoYXJfdCoqLCBzaXplX3QsIHNpemVfdCwgbWJzdGF0ZV90Kik7CiBleHRlcm4gd2NoYXJfdCAgICAgICAgICAqd2NzcGJyayhjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiBleHRlcm4gd2NoYXJfdCAgICAgICAgICAqd2NzcmNocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpOwotZXh0ZXJuIHNpemVfdCAgICAgICAgICAgIHdjc3J0b21icyhjaGFyICosIGNvbnN0IHdjaGFyX3QgKiosIHNpemVfdCwgbWJzdGF0ZV90ICopOworZXh0ZXJuIHNpemVfdCB3Y3NydG9tYnMoY2hhciosIGNvbnN0IHdjaGFyX3QqKiwgc2l6ZV90LCBtYnN0YXRlX3QqKTsKIGV4dGVybiBzaXplX3QgICAgICAgICAgICB3Y3NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwogZXh0ZXJuIHdjaGFyX3QgICAgICAgICAgKndjc3N0cihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7Ci1leHRlcm4gZG91YmxlICAgICAgICAgICAgd2NzdG9kKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7Ci1leHRlcm4gd2NoYXJfdCAgICAgICAgICAqd2NzdG9rKHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsKLWV4dGVybiBsb25nIGludCAgICAgICAgICB3Y3N0b2woY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpOwotZXh0ZXJuIHNpemVfdCAgICAgICAgICAgIHdjc3RvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpOwotZXh0ZXJuIHdjaGFyX3QgICAgICAgICAgKndjc3djcyhjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CitleHRlcm4gZG91YmxlIHdjc3RvZChjb25zdCB3Y2hhcl90Kiwgd2NoYXJfdCoqKTsKK2V4dGVybiBmbG9hdCB3Y3N0b2YoY29uc3Qgd2NoYXJfdCosIHdjaGFyX3QqKik7CitleHRlcm4gd2NoYXJfdCogd2NzdG9rKHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwgd2NoYXJfdCoqKTsKK2V4dGVybiBsb25nIHdjc3RvbChjb25zdCB3Y2hhcl90Kiwgd2NoYXJfdCoqLCBpbnQpOworZXh0ZXJuIGxvbmcgbG9uZyB3Y3N0b2xsKGNvbnN0IHdjaGFyX3QqLCB3Y2hhcl90KiosIGludCk7CitleHRlcm4gbG9uZyBkb3VibGUgd2NzdG9sZChjb25zdCB3Y2hhcl90Kiwgd2NoYXJfdCoqKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHdjc3RvdWwoY29uc3Qgd2NoYXJfdCosIHdjaGFyX3QqKiwgaW50KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgd2NzdG91bGwoY29uc3Qgd2NoYXJfdCosIHdjaGFyX3QqKiwgaW50KTsKIGV4dGVybiBpbnQgICAgICAgICAgICAgICB3Y3N3aWR0aChjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CiBleHRlcm4gc2l6ZV90ICAgICAgICAgICAgd2NzeGZybSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKIGV4dGVybiBpbnQgICAgICAgICAgICAgICB3Y3RvYih3aW50X3QpOwpAQCAtMTQ3LDEyICsxNTEsMjEgQEAKIGV4dGVybiBpbnQgICAgICAgICAgICAgICB3cHJpbnRmKGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKIGV4dGVybiBpbnQgICAgICAgICAgICAgICB3c2NhbmYoY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwogCi0vKiBObyByZWFsbHkgc3VwcG9ydGVkLiAgVGhlc2UgYXJlIGp1c3QgZm9yIG1ha2luZyBsaWJzdGRjKystdjMgaGFwcHkuICAqLwotdHlwZWRlZiB2b2lkICp3Y3RyYW5zX3Q7Ci1leHRlcm4gd2ludF90CQkgdG93Y3RyYW5zKHdpbnRfdCwgd2N0cmFuc190KTsKLWV4dGVybiB3Y3RyYW5zX3QJIHdjdHJhbnMgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gbG9uZyBsb25nICAgICAgICAgIHdjc3RvbGxfbChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGludCwgbG9jYWxlX3QpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyB3Y3N0b3VsbF9sKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKiwgaW50LCBsb2NhbGVfdCk7CitleHRlcm4gbG9uZyBkb3VibGUgICAgICAgIHdjc3RvbGRfbChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGxvY2FsZV90ICk7CiAKLSNpZiBfWE9QRU5fU09VUkNFID49IDcwMCB8fCBfUE9TSVhfQ19TT1VSQ0UgPj0gMjAwODA5TAorZXh0ZXJuIGludCAgICB3Y3Njb2xsX2woY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIGxvY2FsZV90KTsKK2V4dGVybiBzaXplX3Qgd2NzeGZybV9sKHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QsIGxvY2FsZV90KTsKKworZXh0ZXJuIHNpemVfdCB3Y3NsY2F0KHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsKK2V4dGVybiBzaXplX3Qgd2NzbGNweSh3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCk7CisKK3R5cGVkZWYgdm9pZCAqd2N0cmFuc190OworZXh0ZXJuIHdpbnRfdCB0b3djdHJhbnMod2ludF90LCB3Y3RyYW5zX3QpOworZXh0ZXJuIHdjdHJhbnNfdCB3Y3RyYW5zKGNvbnN0IGNoYXIqKTsKKworI2lmIF9fUE9TSVhfVklTSUJMRSA+PSAyMDA4MDkKIHdjaGFyX3QqIHdjc2R1cChjb25zdCB3Y2hhcl90Kik7CiBzaXplX3Qgd2Nzbmxlbihjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3djdHlwZS5oIGIvbGliYy9pbmNsdWRlL3djdHlwZS5oCmluZGV4IGI1ZjE4YTAuLjFhNGEwNWUgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS93Y3R5cGUuaAorKysgYi9saWJjL2luY2x1ZGUvd2N0eXBlLmgKQEAgLTEgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfV0NUWVBFX0hfCisjZGVmaW5lIF9XQ1RZUEVfSF8KKwogI2luY2x1ZGUgPHdjaGFyLmg+CisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIGludCBpc3dhbG51bV9sKHdpbnRfdCwgbG9jYWxlX3QpOworZXh0ZXJuIGludCBpc3dhbHBoYV9sKHdpbnRfdCwgbG9jYWxlX3QpOworZXh0ZXJuIGludCBpc3dibGFua19sKHdpbnRfdCwgbG9jYWxlX3QpOworZXh0ZXJuIGludCBpc3djbnRybF9sKHdpbnRfdCwgbG9jYWxlX3QpOworZXh0ZXJuIGludCBpc3dkaWdpdF9sKHdpbnRfdCwgbG9jYWxlX3QpOworZXh0ZXJuIGludCBpc3dncmFwaF9sKHdpbnRfdCwgbG9jYWxlX3QpOworZXh0ZXJuIGludCBpc3dsb3dlcl9sKHdpbnRfdCwgbG9jYWxlX3QpOworZXh0ZXJuIGludCBpc3dwcmludF9sKHdpbnRfdCwgbG9jYWxlX3QpOworZXh0ZXJuIGludCBpc3dwdW5jdF9sKHdpbnRfdCwgbG9jYWxlX3QpOworZXh0ZXJuIGludCBpc3dzcGFjZV9sKHdpbnRfdCwgbG9jYWxlX3QpOworZXh0ZXJuIGludCBpc3d1cHBlcl9sKHdpbnRfdCwgbG9jYWxlX3QpOworZXh0ZXJuIGludCBpc3d4ZGlnaXRfbCh3aW50X3QsIGxvY2FsZV90KTsKK2V4dGVybiBpbnQgdG93bG93ZXJfbChpbnQsIGxvY2FsZV90KTsKK2V4dGVybiBpbnQgdG93dXBwZXJfbChpbnQsIGxvY2FsZV90KTsKKworZXh0ZXJuIGludCBpc3djdHlwZV9sKHdpbnRfdCwgd2N0eXBlX3QsIGxvY2FsZV90KTsKK2V4dGVybiB3Y3R5cGVfdCB3Y3R5cGVfbChjb25zdCBjaGFyKiwgbG9jYWxlX3QpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1dDVFlQRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3hsb2NhbGUuaCBiL2xpYmMvaW5jbHVkZS94bG9jYWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdlYjhmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS94bG9jYWxlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9YTE9DQUxFX0hfCisjZGVmaW5lIF9YTE9DQUxFX0hfCisKKy8qIElmIHdlIGp1c3QgdXNlIHZvaWQqIGhlcmUsIEdDQyBleHBvc2VzIHRoYXQgaW4gZXJyb3IgbWVzc2FnZXMuICovCitzdHJ1Y3QgX19sb2NhbGVfdDsKK3R5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3QqIGxvY2FsZV90OworCisjZW5kaWYgLyogX1hMT0NBTEVfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL1JFQURNRS5UWFQgYi9saWJjL2tlcm5lbC9SRUFETUUuVFhUCmluZGV4IGU0YzExYTEuLmU3MzEyZWYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL1JFQURNRS5UWFQKKysrIGIvbGliYy9rZXJuZWwvUkVBRE1FLlRYVApAQCAtMSw5MyArMSw0NyBAQAotQmlvbmljIGNvbWVzIHdpdGggYSBzZXQgb2YgJ2NsZWFuJyBMaW51eCBrZXJuZWwgaGVhZGVycyB0aGF0IGNhbiBzYWZlbHkgYmUKLWluY2x1ZGVkIGJ5IHVzZXJsYW5kIGFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzIHdpdGhvdXQgZmVhciBvZiBoaWRlb3VzCi1jb25mbGljdHMuIGZvciBtb3JlIGluZm9ybWF0aW9uIHdoeSB0aGlzIGlzIG5lZWRlZCwgc2VlIHRoZSAiUkFUSU9OQUxFIgotc2VjdGlvbiBhdCB0aGUgZW5kIG9mIHRoaXMgZG9jdW1lbnQuCitCaW9uaWMgY29tZXMgd2l0aCBhIHByb2Nlc3NlZCBzZXQgb2YgYWxsIG9mIHRoZSB1YXBpIExpbnV4IGtlcm5lbCBoZWFkZXJzIHRoYXQKK2NhbiBzYWZlbHkgYmUgaW5jbHVkZWQgYnkgdXNlcmxhbmQgYXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMuCiAKLXRoZXNlIGNsZWFuIGhlYWRlcnMgYXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHNldmVyYWwgc2NyaXB0cyBsb2NhdGVkCi1pbiB0aGUgJ2Jpb25pYy9rZXJuZWwvdG9vbHMnIGRpcmVjdG9yeSwgd2hpY2ggcHJvY2VzcyBhIHNldCBvZiBvcmlnaW5hbAotYW5kIHVubW9kaWZpZWQga2VybmVsIGhlYWRlcnMgaW4gb3JkZXIgdG8gZ2V0IHJpZCBvZiBtYW55IGFubm95aW5nCitUaGVzZSBjbGVhbiBoZWFkZXJzIGFyZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBzZXZlcmFsIHNjcmlwdHMgbG9jYXRlZAoraW4gdGhlICdiaW9uaWMva2VybmVsL3Rvb2xzJyBkaXJlY3RvcnkuIFRoZSB0b29scyBwcm9jZXNzIHRoZSBvcmlnaW5hbAordW5tb2RpZmllZCBrZXJuZWwgaGVhZGVycyBpbiBvcmRlciB0byBnZXQgcmlkIG9mIG1hbnkgYW5ub3lpbmcKIGRlY2xhcmF0aW9ucyBhbmQgY29uc3RydWN0cyB0aGF0IHVzdWFsbHkgcmVzdWx0IGluIGNvbXBpbGF0aW9uIGZhaWx1cmUuCiAKLXRoZSAnY2xlYW4gaGVhZGVycycgb25seSBjb250YWluIHR5cGUgYW5kIG1hY3JvIGRlZmluaXRpb25zLCB3aXRoIHRoZQorVGhlICdjbGVhbiBoZWFkZXJzJyBvbmx5IGNvbnRhaW4gdHlwZSBhbmQgbWFjcm8gZGVmaW5pdGlvbnMsIHdpdGggdGhlCiBleGNlcHRpb24gb2YgYSBjb3VwbGUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgdXNlZCBmb3IgcGVyZm9ybWFuY2UKLXJlYXNvbiAoZS5nLiBvcHRpbWl6ZWQgQ1BVLXNwZWNpZmljIGJ5dGUtc3dhcHBpbmcgcm91dGluZXMpCityZWFzb24gKGUuZy4gb3B0aW1pemVkIENQVS1zcGVjaWZpYyBieXRlLXN3YXBwaW5nIHJvdXRpbmVzKS4KIAotdGhleSBjYW4gYmUgaW5jbHVkZWQgZnJvbSBDKyssIG9yIHdoZW4gY29tcGlsaW5nIGNvZGUgaW4gc3RyaWN0IEFOU0kgbW9kZS4KLXRoZXkgY2FuIGJlIGFsc28gaW5jbHVkZWQgYmVmb3JlIG9yIGFmdGVyIGFueSBCaW9uaWMgQyBsaWJyYXJ5IGhlYWRlci4KK1RoZXkgY2FuIGJlIGluY2x1ZGVkIGZyb20gQysrLCBvciB3aGVuIGNvbXBpbGluZyBjb2RlIGluIHN0cmljdCBBTlNJIG1vZGUuCitUaGV5IGNhbiBiZSBhbHNvIGluY2x1ZGVkIGJlZm9yZSBvciBhZnRlciBhbnkgQmlvbmljIEMgbGlicmFyeSBoZWFkZXIuCiAKLXRoZSBnZW5lcmF0aW9uIHByb2Nlc3Mgd29ya3MgYXMgZm9sbG93czoKK0Rlc2NyaXB0aW9uIG9mIHRoZSBkaXJlY3RvcmllcyBpbnZvbHZlZCBpbiBnZW5lcmF0aW5nIHRoZSBwYXJzZWQga2VybmVsIGhlYWRlcnM6CiAKICAgKiAnZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvJwotICAgIGNvbnRhaW5zIGEgc2V0IG9mIGtlcm5lbCBoZWFkZXJzIGFzIG5vcm1hbGx5IGZvdW5kIGluIHRoZSAnaW5jbHVkZScKLSAgICBkaXJlY3Rvcnkgb2YgYSBub3JtYWwgTGludXgga2VybmVsIHNvdXJjZSB0cmVlLiBub3RlIHRoYXQgdGhpcyBzaG91bGQKLSAgICBvbmx5IGNvbnRhaW4gdGhlIGZpbGVzIHRoYXQgYXJlIHJlYWxseSBuZWVkZWQgYnkgQW5kcm9pZCAodXNlCi0gICAgJ2ZpbmRfaGVhZGVycy5weScgdG8gZmluZCB0aGVzZSBhdXRvbWF0aWNhbGx5KS4KKyAgICBDb250YWlucyB0aGUgdWFwaSBrZXJuZWwgaGVhZGVycyBmb3VuZCBpbiB0aGUgYW5kcm9pZCBrZXJuZWwuIE5vdGUgdGhpcworICAgIGFsc28gaW5jbHVkZXMgdGhlIGhlYWRlciBmaWxlcyB0aGF0IGFyZSBnZW5lcmF0ZWQgYnkgYnVpbGRpbmcgdGhlIGtlcm5lbAorICAgIHNvdXJjZXMuCiAKLSAgKiAnYmlvbmljL2xpYmMva2VybmVsL2NvbW1vbicKLSAgICBjb250YWlucyB0aGUgbm9uLWFyY2gtc3BlY2lmaWMgY2xlYW4gaGVhZGVycyBhbmQgZGlyZWN0b3JpZXMKLSAgICAoZS5nLiBsaW51eCwgYXNtLWdlbmVyaWMgYW5kIG10ZCkKKyAgKiAnYmlvbmljL2xpYmMva2VybmVsL3VhcGknCisgICAgQ29udGFpbnMgdGhlIGNsZWFuZWQga2VybmVsIGhlYWRlcnMgYW5kIG1pcnJvcnMgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKKyAgICBpbiAnZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvdWFwaS8nLgogCi0gICogJ2Jpb25pYy9saWJjL2tlcm5lbC9hcmNoLWFybS8nCi0gICAgY29udGFpbnMgdGhlIEFSTS1zcGVjaWZpYyBkaXJlY3RvcnkgdHJlZSBvZiBjbGVhbiBoZWFkZXJzLgorICAqICdiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMnCisgICAgQ29udGFpbnMgdmFyaW91cyBQeXRob24gYW5kIHNoZWxsIHNjcmlwdHMgdXNlZCB0byBnZXQgYW5kIHJlLWdlbmVyYXRlCisgICAgdGhlIGhlYWRlcnMuCiAKLSAgKiAnYmlvbmljL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbScKLSAgICBjb250YWlucyB0aGUgcmVhbCBBUk0tc3BlY2lmaWMgaGVhZGVycworVGhlIHRvb2xzIHRvIGdldC9wYXJzZSB0aGUgaGVhZGVyczoKIAotICAqICdiaW9uaWMvbGliYy9rZXJuZWwvYXJjaC14ODYnCi0gICAgJ2Jpb25pYy9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20nCi0gICAgc2ltaWxhcmx5IGNvbnRhaW5zIGFsbCBoZWFkZXJzIGFuZCBzeW1saW5rcyB0byBiZSB1c2VkIG9uIHg4NgotCi0gICogJ2Jpb25pYy9saWJjL2tlcm5lbC90b29scycgY29udGFpbnMgdmFyaW91cyBQeXRob24gYW5kIHNoZWxsIHNjcmlwdHMgdXNlZAotICAgIHRvIG1hbmFnZSBhbmQgcmUtZ2VuZXJhdGUgdGhlIGhlYWRlcnMKLQotdGhlIHRvb2xzIHlvdSBjYW4gdXNlIGFyZToKLQotICAqIHRvb2xzL2ZpbmRfdXNlcnMucHkKLSAgICBzY2FucyBhIGxpc3Qgb2Ygc291cmNlIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGFuZCBwcmludHMgd2hpY2ggb25lcyBkbwotICAgIGluY2x1ZGUgTGludXggaGVhZGVycy4KLQotICAqIHRvb2xzL2ZpbmRfaGVhZGVycy5weQotICAgIHNjYW5zIGEgbGlzdCBvZiBzb3VyY2UgZmlsZXMgb3IgZGlyZWN0b3JpZXMgYW5kIHJlY3Vyc2l2ZWx5IGZpbmRzIGFsbAotICAgIHRoZSBvcmlnaW5hbCBrZXJuZWwgaGVhZGVycyB0aGV5IG5lZWQuCisgICogdG9vbHMvZ2VuZXJhdGVfdWFwaV9oZWFkZXJzLnNoCisgICAgQ2hlY2tzIG91dCB0aGUgYW5kcm9pZCBrZXJuZWwgYW5kIGdlbmVyYXRlcyBhbGwgdWFwaSBoZWFkZXIgZmlsZXMuCisgICAgY29waWVzIGFsbCB0aGUgY2hhbmdlZCBmaWxlcyBpbnRvIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzLgogCiAgICogdG9vbHMvY2xlYW5faGVhZGVyLnB5Ci0gICAgcHJpbnRzIHRoZSBjbGVhbiB2ZXJzaW9uIG9mIGEgZ2l2ZW4ga2VybmVsIGhlYWRlci4gd2l0aCB0aGUgLXUgb3B0aW9uLAorICAgIFByaW50cyB0aGUgY2xlYW4gdmVyc2lvbiBvZiBhIGdpdmVuIGtlcm5lbCBoZWFkZXIuIFdpdGggdGhlIC11IG9wdGlvbiwKICAgICB0aGlzIHdpbGwgYWxzbyB1cGRhdGUgdGhlIGNvcnJlc3BvbmRpbmcgY2xlYW4gaGVhZGVyIGZpbGUgaWYgaXRzCi0gICAgY29udGVudCBoYXMgY2hhbmdlZC4geW91IGNhbiBhbHNvIHByb2Nlc3MgbW9yZSB0aGFuIG9uZSBmaWxlIHdpdGggLXUKKyAgICBjb250ZW50IGhhcyBjaGFuZ2VkLiBZb3UgY2FuIGFsc28gcHJvY2VzcyBtb3JlIHRoYW4gb25lIGZpbGUgd2l0aCAtdS4KIAogICAqIHRvb2xzL3VwZGF0ZV9hbGwucHkKLSAgICBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBhbGwgY2xlYW4gaGVhZGVycyBmcm9tIHRoZSBjb250ZW50IG9mIAotICAgICdleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbCcuIHRoaXMgaXMgdGhlIHNjcmlwdCB5b3UncmUgbGlrZWx5IGdvaW5nIHRvCi0gICAgcnVuIHdoZW5ldmVyIHlvdSB1cGRhdGUgdGhlIG9yaWdpbmFsIGhlYWRlcnMuCi0KLQotSE9XIFRPIEJVSUxEIEJJT05JQyBBTkQgT1RIRVIgUFJPR1JBTVMgV0lUSCBUSEUgQ0xFQU4gSEVBREVSUzoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLWFkZCBiaW9uaWMva2VybmVsL2NvbW1vbiBhbmQgYmlvbmljL2tlcm5lbC9hcmNoLTx5b3VyYXJjaD4gdG8geW91ciBDCi1pbmNsdWRlIHBhdGguIHRoYXQgc2hvdWxkIGJlIGVub3VnaC4gTm90ZSB0aGF0IEJpb25pYyB3aWxsIG5vdCBjb21waWxlIHByb3Blcmx5IAotaWYgeW91IGRvbid0LgotCi0KLUhPVyBUTyBTVVBQT1JUIEFOT1RIRVIgQVJDSElURUNUVVJFOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXNlZSB0aGUgY29udGVudCBvZiB0b29scy9kZWZhdWx0cy5weSwgeW91IHdpbGwgbmVlZCB0byBtYWtlIGEgZmV3IHVwZGF0ZXMKLWhlcmU6Ci0KLSAgLSBhZGQgYSBuZXcgaXRlbSB0byB0aGUgJ2tlcm5lbF9hcmNocycgbGlzdCBvZiBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcwotCi0gIC0gYWRkIGEgcHJvcGVyIGRlZmluaXRpb24gZm9yICdrZXJuZWxfa25vd25fPGFyY2g+X3N0YXRpY3MnIHdpdGgKLSAgICByZWxldmFudCBkZWZpbml0aW9ucy4KLQotICAtIHVwZGF0ZSAna2VybmVsX2tub3duX3N0YXRpY3MnIHRvIG1hcCAiPGFyY2g+IiB0bwotICAgICdrZXJuZWxfa25vd25fPGFyY2g+X3N0YXRpY3MnCi0KLXRoZW4sIGFkZCB0aGUgbmV3IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoZWFkZXJzIHRvIG9yaWdpbmFsL2FzbS08YXJjaD4uCi0ocGxlYXNlIGVuc3VyZSB0aGF0IHRoZXNlIGFyZSByZWFsbHkgbmVlZGVkLCBlLmcuIHdpdGggdG9vbHMvZmluZF9oZWFkZXJzLnB5KQotCi1maW5hbGx5LCBydW4gdG9vbHMvdXBkYXRlX2FsbC5weQotCisgICAgQXV0b21hdGljYWxseSB1cGRhdGUgYWxsIGNsZWFuIGhlYWRlcnMgZnJvbSB0aGUgY29udGVudCBvZgorICAgICdleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbCcuCiAKIAogSE9XIFRPIFVQREFURSBUSEUgSEVBREVSUyBXSEVOIE5FRURFRDoKQEAgLTk5LDgxICs1MywxNyBAQAogICBOT1QgQlJFQUsgVEhFIEtFUk5FTCA8LT4gVVNFUiBBQkksIEZPUiBFWEFNUExFIEJZIENIQU5HSU5HIFRIRSBTSVpFCiAgIE9GIEEgR0lWRU4gVFlQRS4gVEhJUyBUQVNLIENBTk5PVCBCRSBFQVNJTFkgQVVUT01BVEVEIEFUIFRIRSBNT01FTlQKIAotY29weSBhbnkgdXBkYXRlZCBrZXJuZWwgaGVhZGVyIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbG9jYXRpb24gdW5kZXIKLSdiaW9uaWMva2VybmVsL29yaWdpbmFsJy4KK0dyYWIgdGhlIGxhdGVzdCBoZWFkZXJzIGZyb20gdGhlIGFuZHJvaWQga2VybmVsIGJ5IHJ1bm5pbmcgdGhpcyBjb21tYW5kOgogCi1mb3IgYW55IG5ldyBrZXJuZWwgaGVhZGVyIHlvdSB3YW50IHRvIGFkZCwgZmlyc3QgcnVuIHRvb2xzL2ZpbmRfaGVhZGVycy5weSB0byBiZQotc3VyZSB0aGF0IGl0IGlzIHJlYWxseSBuZWVkZWQgYnkgdGhlIEFuZHJvaWQgc291cmNlcy4gdGhlbiBhZGQgaXQgdG8KLSdiaW9uaWMva2VybmVsL29yaWdpbmFsJworICBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvZ2VuZXJhdGVfdWFwaV9oZWFkZXJzLnNoIC0tZG93bmxvYWQta2VybmVsCiAKLXRoZW4sIHJ1biB0b29scy91cGRhdGVfYWxsLnB5IHRvIHJlLXJ1biB0aGUgYXV0by1jbGVhbmluZworTmV4dCwgcnVuIHRoaXMgY29tbWFuZCB0byBjb3B5IHRoZSBwYXJzZWQgZmlsZXMgdG8gYmlvbmljL2xpYmMva2VybmVsL3VhcGk6CiAKKyAgYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKIAorRmluYWxseSwgcnVuIHRoaXMgY29tbWFuZCB0byByZWdlbmVyYXRlIHRoZSBzeXNjYWxscyBsaXN0OgogCi1IT1cgVEhFIENMRUFOVVAgUFJPQ0VTUyBXT1JLUzoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBiaW9uaWMvbGliYy90b29scy9nZW5zeXNjYWxscy5weQogCi10aGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBhY3Rpb24gcGVyZm9ybWVkIGJ5IHRoZSBjbGVhbnVwIHByb2dyYW0ocykgd2hlbiB0aGV5Ci1wcm9jZXNzIHRoZSBvcmlnaW5hbCBrZXJuZWwgaGVhZGVycyBpbnRvIGNsZWFuIG9uZXM6Ci0KLTEuIE9wdGltaXplIHdlbGwta25vd24gbWFjcm9zIChlLmcuIF9fS0VSTkVMX18sIF9fS0VSTkVMX1NUUklDVF9OQU1FUykKLQotICAgIHRoaXMgcGFzcyBnZXRzIHJpZCBvZiBldmVyeXRoaW5nIHRoYXQgaXMgZ3VhcmRlZCBieSBhIHdlbGwta25vd24gbWFjcm8KLSAgICBkZWZpbml0aW9uLiB0aGlzIG1lYW5zIHRoYXQgYSBibG9jayBsaWtlCi0KLSAgICAgICAjaWZkZWYgX19LRVJORUxfXwotICAgICAgIC4uLi4KLSAgICAgICAjZW5kaWYKLQotICAgIHdpbGwgYmUgdG90YWxseSBvbWl0dGVkIGZyb20gdGhlIG91dHB1dC4gdGhlIG9wdGltaXplciBpcyBzbWFydCBlbm91Z2ggdG8KLSAgICBoYW5kbGUgYWxsIGNvbXBsZXggQy1wcmVwcm9jZXNzb3IgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBhcHByb3ByaWF0ZWx5LgotICAgIHRoaXMgbWVhbnMgdGhhdCwgZm9yIGV4YW1wbGU6Ci0KLSAgICAgICAjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKEZPTykKLSAgICAgICAuLi4KLSAgICAgICAjZW5kaWYKLQotICAgIHdpbGwgYmUgdHJhbnNmb3JtZWQgaW50bzoKLQotICAgICAgICNpZmRlZiBGT08KLSAgICAgICAuLi4KLSAgICAgICAjZW5kaWYKLQotICAgIHNlZSB0b29scy9kZWZhdWx0cy5weSBmb3IgdGhlIGxpc3Qgb2Ygd2VsbC1rbm93biBtYWNyb3MgdXNlZCBpbiB0aGlzIHBhc3MsCi0gICAgaW4gY2FzZSB5b3UgbmVlZCB0byB1cGRhdGUgaXQgaW4gdGhlIGZ1dHVyZS4KLQotICAgIG5vdGUgdGhhdCB0aGlzIGFsc28gcmVtb3ZlIGFueSByZWZlcmVuY2UgdG8gYSBrZXJuZWwtc3BlY2lmaWMgY29uZmlndXJhdGlvbgotICAgIG1hY3JvIGxpa2UgQ09ORklHX0ZPTyBmcm9tIHRoZSBjbGVhbiBoZWFkZXJzLgotCi0KLTIuIHJlbW92ZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zOgotCi0gIHRoaXMgcGFzcyBzY2FucyBub24tZGlyZWN0aXZlIHRleHQgYW5kIG9ubHkga2VlcHMgdGhpbmdzIHRoYXQgbG9vayBsaWtlIGEKLSAgdHlwZWRlZi9zdHJ1Y3QvdW5pb24vZW51bSBkZWNsYXJhdGlvbi4gdGhpcyBhbGxvd3MgdG8gZ2V0IHJpZCBvZiBhbnkgdmFyaWFibGUKLSAgb3IgZnVuY3Rpb24gZGVjbGFyYXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIHdpdGhpbiB0aGUga2VybmVsIGFueXdheQotICAoYW5kIHdoaWNoIG5vcm1hbGx5ICpzaG91bGQqIGJlIGd1YXJkZWQgaW4gYSAjaWZkZWYgX19LRVJORUxfXyAuLi4gI2VuZGlmCi0gIGJsb2NrLCBpZiB0aGUga2VybmVsIHdyaXRlcnMgd2VyZSBub3Qgc28gbWVzc3kpCi0KLSAgdGhlcmUgYXJlIGhvd2V2ZXIgYSBmZXcgZXhjZXB0aW9uczogaXQgaXMgc2VsZG9tIHVzZWZ1bCB0byBrZWVwIHRoZSBkZWZpbml0aW9uCi0gIG9mIHNvbWUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgcGVyZm9ybWluZyB2ZXJ5IHNpbXBsZSBvcGVyYXRpb25zLiBhIGdvb2QKLSAgZXhhbXBsZSBpcyB0aGUgb3B0aW1pemVkIDMyLWJpdCBieXRlLXN3YXAgZnVuY3Rpb24gZm91bmQgaW4KLSAgYXJjaC1hcm0vYXNtL2J5dGVvcmRlci5oCi0KLSAgdGhlIGxpc3Qgb2YgZXhjZXB0aW9ucyBpcyBpbiB0b29scy9kZWZhdWx0cy5weSBpbiBjYXNlIHlvdSBuZWVkIHRvIHVwZGF0ZSBpdAotICBpbiB0aGUgZnV0dXJlLgotCi0gIG5vdGUgdGhhdCB3ZSBkbyAqbm90KiByZW1vdmUgbWFjcm8gZGVmaW5pdGlvbnMsIGluY2x1ZGluZyB0aGVzZSBtYWNybyB0aGF0Ci0gIHBlcmZvcm0gYSBjYWxsIHRvIG9uZSBvZiB0aGVzZSBrZXJuZWwtaGVhZGVyIGZ1bmN0aW9ucywgb3IgZXZlbiBkZWZpbmUgb3RoZXIKLSAgZnVuY3Rpb25zLiB3ZSBjb25zaWRlciBpdCBzYWZlIHNpbmNlIHVzZXJsYW5kIGFwcGxpY2F0aW9ucyBoYXZlIG5vIGJ1c2luZXNzCi0gIHVzaW5nIHRoZW0gYW55d2F5LgotCi0KLTMuIHdoaXRlc3BhY2UgY2xlYW51cDoKLQotICB0aGUgZmluYWwgcGFzcyByZW1vdmUgYW55IGNvbW1lbnRzIGFuZCBlbXB0eSBsaW5lcyBmcm9tIHRoZSBmaW5hbCBoZWFkZXJzLgotCi0KLTQuIGFkZCBhIHN0YW5kYXJkIGRpc2NsYWltZXI6Ci0KLSAgcHJlcGVuZGVkIHRvIGVhY2ggZ2VuZXJhdGVkIGhlYWRlciwgY29udGFpbnMgYSBtZXNzYWdlIGxpa2UKLSAgImRvIG5vdCBlZGl0IGRpcmVjdGx5IC0gZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQgYnkgLi4uLiIKK0FmdGVyIHRoaXMsIHlvdSB3aWxsIG5lZWQgdG8gYnVpbGQvdGVzdCB0aGUgdHJlZSB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZQorY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBlcnJvcnMuCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC90b29scy9jbGVhbl9oZWFkZXIucHkgYi9saWJjL2tlcm5lbC90b29scy9jbGVhbl9oZWFkZXIucHkKaW5kZXggZTgyNWFlMC4uNjYwMTgxNyAxMDA3NTUKLS0tIGEvbGliYy9rZXJuZWwvdG9vbHMvY2xlYW5faGVhZGVyLnB5CisrKyBiL2xpYmMva2VybmVsL3Rvb2xzL2NsZWFuX2hlYWRlci5weQpAQCAtMSw1ICsxLDc4IEBACiAjIS91c3IvYmluL2VudiBweXRob24KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZXNjcmlwdGlvbiBvZiB0aGUgaGVhZGVyIGNsZWFuIHByb2Nlc3MKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSGVyZSBpcyB0aGUgbGlzdCBvZiBhY3Rpb25zIHBlcmZvcm1lZCBieSB0aGlzIHNjcmlwdCB0byBjbGVhbiB0aGUgb3JpZ2luYWwKKyMga2VybmVsIGhlYWRlcnMuCiAjCisjIDEuIE9wdGltaXplIHdlbGwta25vd24gbWFjcm9zIChlLmcuIF9fS0VSTkVMX18sIF9fS0VSTkVMX1NUUklDVF9OQU1FUykKKyMKKyMgICAgIFRoaXMgcGFzcyBnZXRzIHJpZCBvZiBldmVyeXRoaW5nIHRoYXQgaXMgZ3VhcmRlZCBieSBhIHdlbGwta25vd24gbWFjcm8KKyMgICAgIGRlZmluaXRpb24uIFRoaXMgbWVhbnMgdGhhdCBhIGJsb2NrIGxpa2U6CisjCisjICAgICAgICAjaWZkZWYgX19LRVJORUxfXworIyAgICAgICAgLi4uLgorIyAgICAgICAgI2VuZGlmCisjCisjICAgICBXaWxsIGJlIHRvdGFsbHkgb21pdHRlZCBmcm9tIHRoZSBvdXRwdXQuIFRoZSBvcHRpbWl6ZXIgaXMgc21hcnQgZW5vdWdoIHRvCisjICAgICBoYW5kbGUgYWxsIGNvbXBsZXggQy1wcmVwcm9jZXNzb3IgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBhcHByb3ByaWF0ZWx5LgorIyAgICAgVGhpcyBtZWFucyB0aGF0LCBmb3IgZXhhbXBsZToKKyMKKyMgICAgICAgICNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoRk9PKQorIyAgICAgICAgLi4uCisjICAgICAgICAjZW5kaWYKKyMKKyMgICAgIFdpbGwgYmUgdHJhbnNmb3JtZWQgaW50bzoKKyMKKyMgICAgICAgICNpZmRlZiBGT08KKyMgICAgICAgIC4uLgorIyAgICAgICAgI2VuZGlmCisjCisjICAgICBTZWUgdG9vbHMvZGVmYXVsdHMucHkgZm9yIHRoZSBsaXN0IG9mIHdlbGwta25vd24gbWFjcm9zIHVzZWQgaW4gdGhpcyBwYXNzLAorIyAgICAgaW4gY2FzZSB5b3UgbmVlZCB0byB1cGRhdGUgaXQgaW4gdGhlIGZ1dHVyZS4KKyMKKyMgICAgIE5vdGUgdGhhdCB0aGlzIGFsc28gcmVtb3ZlcyBhbnkgcmVmZXJlbmNlIHRvIGEga2VybmVsLXNwZWNpZmljCisjICAgICBjb25maWd1cmF0aW9uIG1hY3JvIGxpa2UgQ09ORklHX0ZPTyBmcm9tIHRoZSBjbGVhbiBoZWFkZXJzLgorIworIworIyAyLiBSZW1vdmUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIGRlY2xhcmF0aW9uczoKKyMKKyMgICBUaGlzIHBhc3Mgc2NhbnMgbm9uLWRpcmVjdGl2ZSB0ZXh0IGFuZCBvbmx5IGtlZXBzIHRoaW5ncyB0aGF0IGxvb2sgbGlrZSBhCisjICAgdHlwZWRlZi9zdHJ1Y3QvdW5pb24vZW51bSBkZWNsYXJhdGlvbi4gVGhpcyBhbGxvd3MgdXMgdG8gZ2V0IHJpZCBvZiBhbnkKKyMgICB2YXJpYWJsZXMgb3IgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aXRoaW4gdGhlCisjICAga2VybmVsIGFueXdheSAoYW5kIHdoaWNoIG5vcm1hbGx5ICpzaG91bGQqIGJlIGd1YXJkZWQgYnkgYW4gI2lmZGVmCisjICAgX19LRVJORUxfXyAuLi4gICNlbmRpZiBibG9jaywgaWYgdGhlIGtlcm5lbCB3cml0ZXJzIHdlcmUgbm90IHNvIG1lc3N5KS4KKyMKKyMgICBUaGVyZSBhcmUsIGhvd2V2ZXIsIGEgZmV3IGV4Y2VwdGlvbnM6IGl0IGlzIHNlbGRvbSB1c2VmdWwgdG8ga2VlcCB0aGUKKyMgICBkZWZpbml0aW9uIG9mIHNvbWUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgcGVyZm9ybWluZyB2ZXJ5IHNpbXBsZQorIyAgIG9wZXJhdGlvbnMuIEEgZ29vZCBleGFtcGxlIGlzIHRoZSBvcHRpbWl6ZWQgMzItYml0IGJ5dGUtc3dhcCBmdW5jdGlvbgorIyAgIGZvdW5kIGluOgorIworIyAgICAgYXJjaC1hcm0vYXNtL2J5dGVvcmRlci5oCisjCisjICAgVGhlIGxpc3Qgb2YgZXhjZXB0aW9ucyBpcyBpbiB0b29scy9kZWZhdWx0cy5weSBpbiBjYXNlIHlvdSBuZWVkIHRvIHVwZGF0ZQorIyAgIGl0IGluIHRoZSBmdXR1cmUuCisjCisjICAgTm90ZSB0aGF0IHdlIGRvICpub3QqIHJlbW92ZSBtYWNybyBkZWZpbml0aW9ucywgaW5jbHVkaW5nIHRoZXNlIG1hY3JvIHRoYXQKKyMgICBwZXJmb3JtIGEgY2FsbCB0byBvbmUgb2YgdGhlc2Uga2VybmVsLWhlYWRlciBmdW5jdGlvbnMsIG9yIGV2ZW4gZGVmaW5lIG90aGVyCisjICAgZnVuY3Rpb25zLiBXZSBjb25zaWRlciBpdCBzYWZlIHNpbmNlIHVzZXJsYW5kIGFwcGxpY2F0aW9ucyBoYXZlIG5vIGJ1c2luZXNzCisjICAgdXNpbmcgdGhlbSBhbnl3YXkuCisjCisjCisjIDMuIFdoaXRlc3BhY2UgY2xlYW51cDoKKyMKKyMgICBUaGUgZmluYWwgcGFzcyByZW1vdmVzIGFueSBjb21tZW50cyBhbmQgZW1wdHkgbGluZXMgZnJvbSB0aGUgZmluYWwgaGVhZGVycy4KKyMKKyMKKyMgNC4gQWRkIGEgc3RhbmRhcmQgZGlzY2xhaW1lcjoKKyMKKyMgICBUaGUgbWVzc2FnZToKKyMKKyMgICAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIworIyAgIElzIHByZXBlbmRlZCB0byBlYWNoIGdlbmVyYXRlZCBoZWFkZXIuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGltcG9ydCBzeXMsIGNwcCwga2VybmVsLCBnbG9iLCBvcywgcmUsIGdldG9wdAogZnJvbSBkZWZhdWx0cyBpbXBvcnQgKgpAQCAtNyw3ICs4MCw3IEBACiAKIG5vVXBkYXRlID0gMQogCi1kZWYgIGNsZWFudXBGaWxlKCBwYXRoLCBvcmlnaW5hbF9wYXRoKToKK2RlZiBjbGVhbnVwRmlsZShwYXRoLCBvcmlnaW5hbF9wYXRoKToKICAgICAiIiJyZWFkcyBhbiBvcmlnaW5hbCBoZWFkZXIgYW5kIHBlcmZvcm0gdGhlIGNsZWFudXAgb3BlcmF0aW9uIG9uIGl0CiAgICAgICAgdGhpcyBmdW5jdGlvbnMgcmV0dXJucyB0aGUgZGVzdGluYXRpb24gcGF0aCBhbmQgdGhlIGNsZWFuIGhlYWRlcgogICAgICAgIGFzIGEgc2luZ2xlIHN0cmluZyIiIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMvY3BwLnB5IGIvbGliYy9rZXJuZWwvdG9vbHMvY3BwLnB5CmluZGV4IDA0ZTQyNTYuLjJiZTk1MzIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3Rvb2xzL2NwcC5weQorKysgYi9saWJjL2tlcm5lbC90b29scy9jcHAucHkKQEAgLTY4NSw5ICs2ODUsOSBAQAogICAgICAgICAjIHdlIGhhdmUgdGhlIGRlZmluZWQga2V5d29yZCwgY2hlY2sgdGhlIHJlc3QKICAgICAgICAgc2VsZi5pICs9IDEKICAgICAgICAgc2VsZi5za2lwX3NwYWNlcygpCi0gICAgICAgIHVzZV9wYXJlbnMgPSAwCisgICAgICAgIHVzZWRfcGFyZW5zID0gMAogICAgICAgICBpZiBzZWxmLmkgPCBzZWxmLm4gYW5kIHNlbGYudG9rW3NlbGYuaV0uaWQgPT0gdG9rTFBBUkVOOgotICAgICAgICAgICAgdXNlX3BhcmVucyA9IDEKKyAgICAgICAgICAgIHVzZWRfcGFyZW5zID0gMQogICAgICAgICAgICAgc2VsZi5pICs9IDEKICAgICAgICAgICAgIHNlbGYuc2tpcF9zcGFjZXMoKQogCkBAIC02OTksNyArNjk5LDcgQEAKICAgICAgICAgICAgIHNlbGYudGhyb3coQ3BwQ29uc3RhbnRFeHBlY3RlZCxpLCIjIyMgJ2RlZmluZWQnIG11c3QgYmUgZm9sbG93ZWQgYnkgbWFjcm8gbmFtZSIpCiAKICAgICAgICAgc2VsZi5pICs9IDEKLSAgICAgICAgaWYgdXNlX3BhcmVuczoKKyAgICAgICAgaWYgdXNlZF9wYXJlbnM6CiAgICAgICAgICAgICBzZWxmLmV4cGVjdElkKHRva1JQQVJFTikKIAogICAgICAgICByZXR1cm4gKCJkZWZpbmVkIiwgdC52YWx1ZSkKQEAgLTExNjIsNyArMTE2Miw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLmRpcmVjdGl2ZSBpbiBbImlmIiwiaWZkZWYiLCJpZm5kZWYiLCJlbGlmIl0KIAogICAgIGRlZiBpc0luY2x1ZGUoc2VsZik6Ci0gICAgICAgICIiImNoZWNrcyB3ZXRoZXIgdGhpcyBpcyBhICNpbmNsdWRlIGRpcmVjdGl2ZS4gaWYgdHJ1ZSwgdGhlbiByZXR1cm5zIHRoZQorICAgICAgICAiIiJjaGVja3Mgd2hldGhlciB0aGlzIGlzIGEgI2luY2x1ZGUgZGlyZWN0aXZlLiBpZiB0cnVlLCB0aGVuIHJldHVybnMgdGhlCiAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgZmlsZSBuYW1lICh3aXRoIGJyYWNrZXRzIG9yIGRvdWJsZS1xb3V0ZXMpLiBOb25lIG90aGVyd2lzZSIiIgogICAgICAgICBpZiBzZWxmLmRpcmVjdGl2ZSAhPSAiaW5jbHVkZSI6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQpAQCAtMTUxNywxNSArMTUxNywyMCBAQAogICAgICAgICB0b2tlbnMgPSB0b2tlbnNbOi0xXSAgIyByZW1vdmUgdHJhaWxpbmcgdG9rTE4KICAgICAgICAgc2VsZi5ibG9ja3MgPSBbIEJsb2NrKHRva2VucykgXSArIHNlbGYuYmxvY2tzCiAKLSAgICBkZWYgcmVwbGFjZVRva2VucyhzZWxmLHJlcGxhY2VtZW50cz1kaWN0KCkpOgotICAgICAgICAiIiJyZXBsYWNlIHRva2VucyBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGRpY3QKLSAgICAgICAgICAgIiIiCisgICAgZGVmIHJlcGxhY2VUb2tlbnMoc2VsZixyZXBsYWNlbWVudHMpOgorICAgICAgICAiIiJyZXBsYWNlIHRva2VucyBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGRpY3QiIiIKICAgICAgICAgZm9yIGIgaW4gc2VsZi5ibG9ja3M6Ci0gICAgICAgICAgICBpZiBub3QgYi5pc0RpcmVjdGl2ZSgpOgorICAgICAgICAgICAgbWFkZV9jaGFuZ2UgPSBGYWxzZQorICAgICAgICAgICAgaWYgYi5pc0luY2x1ZGUoKSA9PSBOb25lOgogICAgICAgICAgICAgICAgIGZvciB0b2sgaW4gYi50b2tlbnM6CiAgICAgICAgICAgICAgICAgICAgIGlmIHRvay5pZCA9PSB0b2tJREVOVDoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRvay52YWx1ZSBpbiByZXBsYWNlbWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rLnZhbHVlID0gcmVwbGFjZW1lbnRzW3Rvay52YWx1ZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWRlX2NoYW5nZSA9IFRydWUKKworICAgICAgICAgICAgaWYgbWFkZV9jaGFuZ2UgYW5kIGIuaXNJZigpOgorICAgICAgICAgICAgICAgICMgS2VlcCAnZXhwcicgaW4gc3luYyB3aXRoICd0b2tlbnMnLgorICAgICAgICAgICAgICAgIGIuZXhwciA9IENwcEV4cHIoYi50b2tlbnMpCiAKIGNsYXNzIEJsb2NrUGFyc2VyOgogICAgICIiImEgY2xhc3MgdXNlZCB0byBjb252ZXJ0IGFuIGlucHV0IHNvdXJjZSBmaWxlIGludG8gYSBCbG9ja0xpc3Qgb2JqZWN0IiIiCkBAIC0xNzk4LDYgKzE4MDMsMTAgQEAKICNkZWZpbmUgWAogI2VuZGlmCiAKKyNpZm5kZWYgU0lHUlRNQVgKKyNkZWZpbmUgU0lHUlRNQVggMTIzCisjZW5kaWYgLyogU0lHUlRNQVggKi8KKwogI2lmIDAKICNpZiAxCiAjZGVmaW5lICBCQURfNgpAQCAtMTgxNywxMiArMTgyNiwxNyBAQAogI2RlZmluZSBYCiAjZW5kaWYKIAorI2lmbmRlZiBfX1NJR1JUTUFYCisjZGVmaW5lIF9fU0lHUlRNQVggMTIzCisjZW5kaWYKKwogIiIiCiAKICAgICBvdXQgPSBTdHJpbmdPdXRwdXQoKQogICAgIGxpbmVzID0gc3RyaW5nLnNwbGl0KHRleHQsICdcbicpCiAgICAgbGlzdCA9IEJsb2NrUGFyc2VyKCkucGFyc2UoIENwcExpbmVzVG9rZW5pemVyKGxpbmVzKSApCiAgICAgI0Rfc2V0bGV2ZWwoMikKKyAgICBsaXN0LnJlcGxhY2VUb2tlbnMoIGtlcm5lbF90b2tlbl9yZXBsYWNlbWVudHMgKQogICAgIGxpc3Qub3B0aW1pemVBbGwoIHsiX19LRVJORUxfXyI6a0NwcFVuZGVmaW5lZE1hY3JvfSApCiAgICAgbGlzdC53cml0ZShvdXQpCiAgICAgaWYgb3V0LmdldCgpICE9IGV4cGVjdGVkOgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMvZGVmYXVsdHMucHkgYi9saWJjL2tlcm5lbC90b29scy9kZWZhdWx0cy5weQppbmRleCBmMjM1ODAzLi4yZWZkNDU1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC90b29scy9kZWZhdWx0cy5weQorKysgYi9saWJjL2tlcm5lbC90b29scy9kZWZhdWx0cy5weQpAQCAtNiwyMCArNiwxNiBAQAogZnJvbSB1dGlscyBpbXBvcnQgKgogCiAjIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzCi0jCiBrZXJuZWxfYXJjaHMgPSBbICdhcm0nLCAnYXJtNjQnLCAnbWlwcycsICd4ODYnIF0KIAogIyB0aGUgbGlzdCBvZiBpbmNsdWRlIGRpcmVjdG9yaWVzIHRoYXQgYmVsb25nIHRvIHRoZSBrZXJuZWwKICMgdHJlZS4gdXNlZCB3aGVuIGxvb2tpbmcgZm9yIHNvdXJjZXMuLi4KLSMKIGtlcm5lbF9kaXJzID0gWyAibGludXgiLCAiYXNtIiwgImFzbS1nZW5lcmljIiwgIm10ZCIgXQogCiAjIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBrZXJuZWwgaGVhZGVycwotIwoga2VybmVsX29yaWdpbmFsX3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKCBmaW5kX3Byb2dyYW1fZGlyKCkgKyAnLy4uLy4uLy4uLy4uL2V4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsJyApCiAKICMgcGF0aCB0byB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgY2xlYW5lZC11cCBoZWFkZXJzCi0jCiBrZXJuZWxfY2xlYW5lZF9wYXRoID0gb3MucGF0aC5ub3JtcGF0aCggZmluZF9wcm9ncmFtX2RpcigpICsgJy8uLicgKQogCiAjIGEgc3BlY2lhbCB2YWx1ZSB0aGF0IGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIGdpdmVuIG1hY3JvIGlzIGtub3duIHRvIGJlCkBAIC0zMyw2ICsyOSw3IEBACiAgICAgIl9fS0VSTkVMX1NUUklDVF9OQU1FUyI6IjEiLAogICAgICJfX0NIRUNLRVJfXyI6IGtDcHBVbmRlZmluZWRNYWNybywKICAgICAiX19DSEVDS19FTkRJQU5fXyI6IGtDcHBVbmRlZmluZWRNYWNybywKKyAgICAiQ09ORklHXzY0QklUIjogIl9fTFA2NF9fIiwKICAgICAiQ09ORklHX1g4Nl8zMiI6ICJfX2kzODZfXyIsCiAgICAgIl9fRVhQT1JURURfSEVBREVSU19fIjogIjEiLAogICAgIH0KQEAgLTQ1LDkgKzQyLDEzIEBACiAjIG1hcHMgYW4gYXJjaGl0ZWN0dXJlIHRvIGEgc2V0IG9mIGRlZmF1bHQgbWFjcm9zIHRoYXQgd291bGQgYmUgcHJvdmlkZWQgYnkKICMgdG9vbGNoYWluIHByZXByb2Nlc3Nvcgoga2VybmVsX2RlZmF1bHRfYXJjaF9tYWNyb3MgPSB7Ci0gICAgImFybSI6IHt9LAorICAgICJhcm0iOiB7Il9fQVJNRUJfXyI6IGtDcHBVbmRlZmluZWRNYWNybywgIl9fQVJNX0VBQklfXyI6ICIxIn0sCiAgICAgImFybTY0Ijoge30sCi0gICAgIm1pcHMiOiB7IkNPTkZJR18zMkJJVCI6IjEifSwKKyAgICAibWlwcyI6IHsiX19NSVBTRUJfXyI6IGtDcHBVbmRlZmluZWRNYWNybywKKyAgICAgICAgICAgICAiX19NSVBTRUxfXyI6ICIxIiwKKyAgICAgICAgICAgICAiQ09ORklHXzMyQklUIjogIl9BQklPMzIiLAorICAgICAgICAgICAgICJDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4iOiAiMSIsCisgICAgICAgICAgICAgIl9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyI6ICIxIix9LAogICAgICJ4ODYiOiB7fSwKICAgICB9CiAKQEAgLTU3LDE1ICs1OCwyNCBAQAogICAgICJtaXBzIjogeyJvZmZfdCI6Il9fa2VybmVsX29mZl90In0sCiAgICAgIng4NiI6IHt9LAogICAgIH0KKwogIyBSZXBsYWNlIHRva2VucyBpbiB0aGUgb3V0cHV0IGFjY29yZGluZyB0byB0aGlzIG1hcHBpbmcKIGtlcm5lbF90b2tlbl9yZXBsYWNlbWVudHMgPSB7CiAgICAgImFzbSI6ICJfX2FzbV9fIiwKLSAgICAiX191bnVzZWQiOiAiX19saW51eF91bnVzZWQiLCAjIFRoZSBrZXJuZWwgdXNhZ2Ugb2YgX191bnVzZWQgY29uZmxpY3RzIHdpdGggdGhlIG1hY3JvIGRlZmluZWQgaW4gc3lzL2NkZWZzLmgKKyAgICAjIFRoZSBrZXJuZWwgdXNhZ2Ugb2YgX191bnVzZWQgZm9yIHVudXNlZCBzdHJ1Y3QgZmllbGRzIGNvbmZsaWN0cyB3aXRoIHRoZSBtYWNybyBkZWZpbmVkIGluIDxzeXMvY2RlZnMuaD4uCisgICAgIl9fdW51c2VkIjogIl9fbGludXhfdW51c2VkIiwKKyAgICAjIFRoZSBrZXJuZWwncyBfTlNJRy9OU0lHIGFyZSBvbmUgbGVzcyB0aGFuIHRoZSB1c2Vyc3BhY2UgdmFsdWUsIHNvIHdlIG5lZWQgdG8gbW92ZSB0aGVtIGFzaWRlLgorICAgICJfTlNJRyI6ICJfS0VSTkVMX19OU0lHIiwKKyAgICAiTlNJRyI6ICJfS0VSTkVMX05TSUciLAorICAgICMgVGhlIGtlcm5lbCdzIFNJR1JUTUlOL1NJR1JUTUFYIGFyZSBhYnNvbHV0ZSBsaW1pdHM7IHVzZXJzcGFjZSBzdGVhbHMgYSBmZXcuCisgICAgIlNJR1JUTUlOIjogIl9fU0lHUlRNSU4iLAorICAgICJTSUdSVE1BWCI6ICJfX1NJR1JUTUFYIiwKICAgICB9CiAKICMgdGhpcyBpcyB0aGUgc2V0IG9mIGtub3duIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIHRoYXQgd2Ugd2FudCB0byBrZWVwCiAjIGluIHRoZSBmaW5hbCBBUk0gaGVhZGVycy4gdGhpcyBpcyBvbmx5IHVzZWQgdG8ga2VlcCBvcHRpbWl6ZWQgYnl0ZXN3YXBwaW5nCiAjIHN0YXRpYyBmdW5jdGlvbnMgYW5kIHN0dWZmIGxpa2UgdGhhdC4KKyMgVE9ETzogdGhpcyBpc24ndCB3b3JraW5nIQoga2VybmVsX2tub3duX2FybV9zdGF0aWNzID0gc2V0KAogICAgICAgICBbICJfX19hcmNoX19zd2FiMzIiLCAgICAjIGFzbS1hcm0vYnl0ZW9yZGVyLmgKICAgICAgICAgXQpAQCAtODgsMTEgKzk4LDkgQEAKICAgICApCiAKIGtlcm5lbF9rbm93bl9nZW5lcmljX3N0YXRpY3MgPSBzZXQoCi0gICAgICAgIFsgIl9faW52YWxpZF9zaXplX2FyZ3VtZW50X2Zvcl9JT0MiLCAgIyBhc20tZ2VuZXJpYy9pb2N0bC5oCi0gICAgICAgICAgIl9fY21zZ19ueHRoZHIiLCAgICAgICAgICAgICAgICAgICAgIyBsaW51eC9zb2NrZXQuaAotICAgICAgICAgICJjbXNnX254dGhkciIsICAgICAgICAgICAgICAgICAgICAgICMgbGludXgvc29ja2V0LmgKLSAgICAgICAgICAiaXB0X2dldF90YXJnZXQiLAotICAgICAgICAgICJpcDZ0X2dldF90YXJnZXQiLAorICAgICAgICBbCisgICAgICAgICAgImlwdF9nZXRfdGFyZ2V0IiwgICMgdWFwaS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaAorICAgICAgICAgICJpcDZ0X2dldF90YXJnZXQiLCAjIHVhcGkvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oCiAgICAgICAgIF0KICAgICApCiAKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3Rvb2xzL2ZpbmRfaGVhZGVycy5weSBiL2xpYmMva2VybmVsL3Rvb2xzL2ZpbmRfaGVhZGVycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOWIzNTcyYS4uMDAwMDAwMAotLS0gYS9saWJjL2tlcm5lbC90b29scy9maW5kX2hlYWRlcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIHRoaXMgcHJvZ3JhbSBpcyB1c2VkIHRvIGZpbmQgc291cmNlIGNvZGUgdGhhdCBpbmNsdWRlcyBsaW51eCBrZXJuZWwgaGVhZGVycyBkaXJlY3RseQotIyAoZS5nLiB3aXRoICNpbmNsdWRlIDxsaW51eC8uLi4+IG9yICNpbmNsdWRlIDxhc20vLi4uPikKLSMKLSMgdGhlbiBpdCBsaXN0cyB0aGVtIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuCi0KLWltcG9ydCBzeXMsIGNwcCwgZ2xvYiwgb3MsIHJlLCBnZXRvcHQsIGtlcm5lbAotZnJvbSB1dGlscyBpbXBvcnQgKgotZnJvbSBkZWZhdWx0cyBpbXBvcnQgKgotCi1wcm9ncmFtX2RpciA9IGZpbmRfcHJvZ3JhbV9kaXIoKQotCi13YW50ZWRfYXJjaHMgICA9IGtlcm5lbF9hcmNocwotd2FudGVkX2NvbmZpZyAgPSBOb25lCi0KLWRlZiB1c2FnZSgpOgotICAgIHByaW50ICIiIlwKLSAgdXNhZ2U6ICBmaW5kX2hlYWRlcnMucHkgW29wdGlvbnNdIDxrZXJuZWwtcm9vdD4gKGZpbGV8ZGlyZWN0b3J5fEBsaXN0ZmlsZSkrCi0KLSAgICAgb3B0aW9uczoKLSAgICAgICAgLWMgPGZpbGU+ICAgICAgICAgIHNwZWNpZnkgLmNvbmZpZyBmaWxlIChub25lIGJ5IGRlZmF1bHQpCi0KLSAgICAgICAgLWEgPGFyY2hzPiAgICAgICAgIHVzZWQgdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZSBsaXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBhcmNoaXRlY3R1cmVzIHRvIHN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgnJXMnIGJ5IGRlZmF1bHQpCi0KLSAgICAgICAgLXYgICAgICAgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIG1vZGUKLQotICAgIHRoaXMgcHJvZ3JhbSBpcyB1c2VkIHRvIGZpbmQgYWxsIHRoZSBrZXJuZWwgaGVhZGVycyB0aGF0IGFyZSB1c2VkCi0gICAgYnkgYSBzZXQgb2Ygc291cmNlIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgdGhlbS4gdGhlIHNlYXJjaAotICAgIGlzIHJlY3Vyc2l2ZSB0byBmaW5kICphbGwqIHJlcXVpcmVkIGZpbGVzLgotCi0iIiIgJSAoIHN0cmluZy5qb2luKGtlcm5lbF9hcmNocywiLCIpICkKLSAgICBzeXMuZXhpdCgxKQotCi0KLXRyeToKLSAgICBvcHRsaXN0LCBhcmdzID0gZ2V0b3B0LmdldG9wdCggc3lzLmFyZ3ZbMTpdLCAndmM6ZDphOms6JyApCi1leGNlcHQ6Ci0gICAgIyB1bnJlY29nbml6ZWQgb3B0aW9uCi0gICAgcHJpbnQgImVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uIgotICAgIHVzYWdlKCkKLQotZm9yIG9wdCwgYXJnIGluIG9wdGxpc3Q6Ci0gICAgaWYgb3B0ID09ICctYSc6Ci0gICAgICAgIHdhbnRlZF9hcmNocyA9IHN0cmluZy5zcGxpdChhcmcsJywnKQotICAgIGVsaWYgb3B0ID09ICctYyc6Ci0gICAgICAgIHdhbnRlZF9jb25maWcgPSBhcmcKLSAgICBlbGlmIG9wdCA9PSAnLXYnOgotICAgICAgICBrZXJuZWwudmVyYm9zZVNlYXJjaCA9IDEKLSAgICAgICAga2VybmVsLnZlcmJvc2VGaW5kICAgPSAxCi0gICAgICAgIHZlcmJvc2UgPSAxCi0gICAgZWxzZToKLSAgICAgICAgdXNhZ2UoKQotCi1pZiBsZW4oYXJncykgPCAyOgotICAgIHVzYWdlKCkKLQota2VybmVsX3Jvb3QgPSBhcmdzWzBdCi1pZiBub3Qgb3MucGF0aC5leGlzdHMoa2VybmVsX3Jvb3QpOgotICAgIHN5cy5zdGRlcnIud3JpdGUoICJlcnJvcjogZGlyZWN0b3J5ICclcycgZG9lcyBub3QgZXhpc3RcbiIgJSBrZXJuZWxfcm9vdCApCi0gICAgc3lzLmV4aXQoMSkKLQotaWYgbm90IG9zLnBhdGguaXNkaXIoa2VybmVsX3Jvb3QpOgotICAgIHN5cy5zdGRlcnIud3JpdGUoICJlcnJvcjogJyVzJyBpcyBub3QgYSBkaXJlY3RvcnlcbiIgJSBrZXJuZWxfcm9vdCApCi0gICAgc3lzLmV4aXQoMSkKLQotaWYgbm90IG9zLnBhdGguaXNkaXIoa2VybmVsX3Jvb3QrIi9pbmNsdWRlL2xpbnV4Iik6Ci0gICAgc3lzLnN0ZGVyci53cml0ZSggImVycm9yOiAnJXMnIGRvZXMgbm90IGhhdmUgYW4gJ2luY2x1ZGUvbGludXgnIGRpcmVjdG9yeVxuIiAlIGtlcm5lbF9yb290ICkKLSAgICBzeXMuZXhpdCgxKQotCi1pZiB3YW50ZWRfY29uZmlnOgotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh3YW50ZWRfY29uZmlnKToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggImVycm9yOiBmaWxlICclcycgZG9lcyBub3QgZXhpc3RcbiIgJSB3YW50ZWRfY29uZmlnICkKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSh3YW50ZWRfY29uZmlnKToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggImVycm9yOiAnJXMnIGlzIG5vdCBhIGZpbGVcbiIgJSB3YW50ZWRfY29uZmlnICkKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotIyBmaW5kIGFsbCBhcmNoaXRlY3R1cmVzIGluIHRoZSBrZXJuZWwgdHJlZQotYXJjaHMgICA9IFtdCi1mb3IgYXJjaGRpciBpbiBvcy5saXN0ZGlyKGtlcm5lbF9yb290KyIvYXJjaCIpOgotICAgIGlmIG9zLnBhdGguZXhpc3RzKCIlcy9hcmNoLyVzL2luY2x1ZGUvYXNtIiAlIChrZXJuZWxfcm9vdCwgYXJjaGRpcikpOgotICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgcHJpbnQgIkZvdW5kIGFyY2ggJyVzJyIgJSBhcmNoZGlyCi0gICAgICAgIGFyY2hzLmFwcGVuZChhcmNoZGlyKQotCi0jIGlmIHdlJ3JlIHVzaW5nIHRoZSAna2VybmVsX2hlYWRlcnMnIGRpcmVjdG9yeSwgdGhlcmUgaXMgb25seSBhc20vCi0jIGFuZCBubyBvdGhlciBhc20tPGFyY2g+IGRpcmVjdG9yaWVzCi0jCi1pbl9rZXJuZWxfaGVhZGVycyA9IEZhbHNlCi1pZiBsZW4oYXJjaHMpID09IDA6Ci0gICAgIyB0aGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSdyZSB1c2luZyB0aGUgJ2tlcm5lbF9oZWFkZXJzJyBkaXJlY3RvcnkKLSAgICBpZiBvcy5wYXRoLmlzZGlyKGtlcm5lbF9yb290KyIvYXNtIik6Ci0gICAgICAgIGluX2tlcm5lbF9oZWFkZXJzID0gVHJ1ZQotICAgICAgICBhcmNocyA9IFsgImFybSIsICJtaXBzIl0KLQotIyBpZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIHNvbWUgYXJjaGl0ZWN0dXJlcyB3aXRoIC1hIDxhcmNocz4gZW5zdXJlIHRoYXQKLSMgYWxsIHRob3NlIGhlIHdhbnRzIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUga2VybmVsIGluY2x1ZGUgdHJlZQotaWYgd2FudGVkX2FyY2hzICE9IE5vbmU6Ci0gICAgaWYgaW5fa2VybmVsX2hlYWRlcnMgYW5kIHdhbnRlZF9hcmNocyAhPSBbICJhcm0iLCAibWlwcyIgXToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggImVycm9yOiB3aGVuIHBhcnNpbmcga2VybmVsX2hlYWRlcnMsIG9ubHkgJ2FybScgYW5kICdtaXBzJyBhcmNoaXRlY3R1cmVzIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudFxuIiApCi0gICAgICAgIHN5cy5leGl0KDEpCi0gICAgbWlzc2luZyA9IFtdCi0gICAgZm9yIGFyY2ggaW4gd2FudGVkX2FyY2hzOgotICAgICAgICBpZiBhcmNoIG5vdCBpbiBhcmNoczoKLSAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKGFyY2gpCi0gICAgaWYgbGVuKG1pc3NpbmcpID4gMDoKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggImVycm9yOiB0aGUgZm9sbG93aW5nIHJlcXVlc3RlZCBhcmNoaXRlY3R1cmVzIGFyZSBub3QgaW4gdGhlIGtlcm5lbCB0cmVlOiAiICkKLSAgICAgICAgZm9yIGEgaW4gbWlzc2luZzoKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoICIgJXMiICUgYSApCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoICJcbiIgKQotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgYXJjaHMgPSB3YW50ZWRfYXJjaHMKLQotIyBoZWxwZXIgZnVuY3Rpb24gdXNlZCB0byB3YWxrIHRoZSB1c2VyIGZpbGVzCi1kZWYgcGFyc2VfZmlsZShwYXRoLCBwYXJzZXIpOgotICAgICNwcmludCAicGFyc2UgJXMiICUgcGF0aAotICAgIHBhcnNlci5wYXJzZUZpbGUocGF0aCkKLQotCi0jIHJlbW92ZSBwcmV2aW91cyBkZXN0aW5hdGlvbiBkaXJlY3RvcnkKLSNkZXN0ZGlyID0gIi90bXAvYmlvbmljLWtlcm5lbC1oZWFkZXJzLyIKLSNjbGVhbnVwX2RpcihkZXN0ZGlyKQotCi0jIHRyeSB0byByZWFkIHRoZSBjb25maWcgZmlsZQotdHJ5OgotICAgIGNwYXJzZXIgPSBrZXJuZWwuQ29uZmlnUGFyc2VyKCkKLSAgICBpZiB3YW50ZWRfY29uZmlnOgotICAgICAgICBjcGFyc2VyLnBhcnNlRmlsZSggd2FudGVkX2NvbmZpZyApCi1leGNlcHQ6Ci0gICAgc3lzLnN0ZGVyci53cml0ZSggImVycm9yOiBjYW4ndCBwYXJzZSAnJXMnIiAlIHdhbnRlZF9jb25maWcgKQotICAgIHN5cy5leGl0KDEpCi0KLWtlcm5lbF9jb25maWcgPSBjcGFyc2VyLmdldERlZmluaXRpb25zKCkKLQotIyBmaXJzdCwgb2J0YWluIHRoZSBsaXN0IG9mIGtlcm5lbCBmaWxlcyB1c2VkIGJ5IG91ciBjbGllbnRzCi1mcGFyc2VyID0ga2VybmVsLkhlYWRlclNjYW5uZXIoKQotZGlyX2V4Y2x1ZGVzPVsiLnJlcG8iLCJleHRlcm5hbC9rZXJuZWwtaGVhZGVycyIsIm5kayIsIm91dCIsInByZWJ1aWx0IiwiYmlvbmljL2xpYmMva2VybmVsIiwiZGV2ZWxvcG1lbnQvbmRrIiwiZXh0ZXJuYWwvcWVtdS9kaXN0cmliIl0KLXdhbGtfc291cmNlX2ZpbGVzKCBhcmdzWzE6XSwgcGFyc2VfZmlsZSwgZnBhcnNlciwgZXhjbHVkZXM9WyIuLyIrZiBmb3IgZiBpbiBkaXJfZXhjbHVkZXNdICkKLWhlYWRlcnMgPSBmcGFyc2VyLmdldEhlYWRlcnMoKQotZmlsZXMgICA9IGZwYXJzZXIuZ2V0RmlsZXMoKQotCi0jIG5vdyByZWN1cnNpdmVseSBzY2FuIHRoZSBrZXJuZWwgaGVhZGVycyBmb3IgYWRkaXRpb25uYWwgc3ViLWluY2x1ZGVkIGhlYWRlcnMKLWhwYXJzZXIgPSBrZXJuZWwuS2VybmVsSGVhZGVyRmluZGVyKGhlYWRlcnMsYXJjaHMsa2VybmVsX3Jvb3Qsa2VybmVsX2NvbmZpZykKLWhlYWRlcnMgPSBocGFyc2VyLnNjYW5Gb3JBbGxBcmNocygpCi0KLWlmIDA6ICAgICMganVzdCBmb3IgZGVidWdnaW5nCi0gICAgZHVtcEhlYWRlclVzZXJzID0gRmFsc2UKLQotICAgIHByaW50ICJ0aGUgZm9sbG93aW5nICVkIGhlYWRlcnM6IiAlIGxlbihoZWFkZXJzKQotICAgIGZvciBoIGluIHNvcnRlZChoZWFkZXJzKToKLSAgICAgICAgaWYgZHVtcEhlYWRlclVzZXJzOgotICAgICAgICAgICAgcHJpbnQgIiAgJXMgKCVzKSIgJSAoaCwgcmVwcihocGFyc2VyLmdldEhlYWRlclVzZXJzKGgpKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50ICIgICVzIiAlIGgKLQotICAgIHByaW50ICJhcmUgdXNlZCBieSB0aGUgZm9sbG93aW5nICVkIGZpbGVzOiIgJSBsZW4oZmlsZXMpCi0gICAgZm9yIGYgaW4gc29ydGVkKGZpbGVzKToKLSAgICAgICAgcHJpbnQgIiAgJXMiICUgZgotCi0gICAgc3lzLmV4aXQoMCkKLQotZm9yIGggaW4gc29ydGVkKGhlYWRlcnMpOgotICAgIHByaW50ICIlcyIgJSBoCi0KLXN5cy5leGl0KDApCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC90b29scy9maW5kX3VzZXJzLnB5IGIvbGliYy9rZXJuZWwvdG9vbHMvZmluZF91c2Vycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNWVlMzA4Yy4uMDAwMDAwMAotLS0gYS9saWJjL2tlcm5lbC90b29scy9maW5kX3VzZXJzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIHRoaXMgcHJvZ3JhbSBpcyB1c2VkIHRvIGZpbmQgc291cmNlIGNvZGUgdGhhdCBpbmNsdWRlcyBsaW51eCBrZXJuZWwgaGVhZGVycyBkaXJlY3RseQotIyAoZS5nLiB3aXRoICNpbmNsdWRlIDxsaW51eC8uLi4+IG9yICNpbmNsdWRlIDxhc20vLi4uPikKLSMKLSMgdGhlbiBpdCBsaXN0cwotCi1pbXBvcnQgc3lzLCBjcHAsIGdsb2IsIG9zLCByZSwgZ2V0b3B0Ci1pbXBvcnQga2VybmVsCi1mcm9tIHV0aWxzIGltcG9ydCAqCi1mcm9tIGRlZmF1bHRzIGltcG9ydCAqCi0KLQotZGVmIHVzYWdlKCk6Ci0gICAgcHJpbnQgIiIiXAotICB1c2FnZTogIGZpbmRfdXNlcnMucHkgWy12XSAoZmlsZXxkaXJlY3Rvcnl8QGxpc3RmaWxlKSsKLQotICAgIHRoaXMgcHJvZ3JhbSBpcyB1c2VkIHRvIHNjYW4gYSBsaXN0IG9mIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGZvcgotICAgIHNvdXJjZXMgdGhhdCBpbmNsdWRlIGtlcm5lbCBoZWFkZXJzIGRpcmVjdGx5LiB0aGUgcHJvZ3JhbSBwcmludHMKLSAgICB0aGUgbGlzdCBvZiBzYWlkIHNvdXJjZSBmaWxlcyB3aGVuIGl0J3MgZG9uZS4KLQotICAgIHdoZW4gc2Nhbm5pbmcgZGlyZWN0b3JpZXMsIG9ubHkgZmlsZXMgbWF0Y2hpbmcgdGhlIGZvbGxvd2luZwotICAgIGV4dGVuc2lvbiB3aWxsIGJlIHNlYXJjaGVkOiAuYyAuY3BwIC5TIC5oCi0KLSAgICB1c2UgLXYgdG8gZW5hYmxlIHZlcmJvc2Ugb3V0cHV0Ci0iIiIKLSAgICBzeXMuZXhpdCgxKQotCi0KLXRyeToKLSAgICBvcHRsaXN0LCBhcmdzID0gZ2V0b3B0LmdldG9wdCggc3lzLmFyZ3ZbMTpdLCAndicgKQotZXhjZXB0OgotICAgICMgdW5yZWNvZ25pemVkIG9wdGlvbgotICAgIHByaW50ICJlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbiIKLSAgICB1c2FnZSgpCi0KLWZvciBvcHQsIGFyZyBpbiBvcHRsaXN0OgotICAgIGlmIG9wdCA9PSAnLXYnOgotICAgICAgICBrZXJuZWwudmVyYm9zZVNlYXJjaCA9IDEKLSAgICAgICAga2VybmVsLnZlcmJvc2VGaW5kICAgPSAxCi0gICAgZWxzZToKLSAgICAgICAgdXNhZ2UoKQotCi1pZiBsZW4oYXJncykgPCAxOgotICAgIHVzYWdlKCkKLQotIyBoZWxwZXIgZnVuY3Rpb24gdXNlZCB0byB3YWxrIHRoZSB1c2VyIGZpbGVzCi1kZWYgcGFyc2VfZmlsZShwYXRoLCBwYXJzZXIpOgotICAgIHBhcnNlci5wYXJzZUZpbGUocGF0aCkKLQotCi0jIGZpcnN0LCBvYnRhaW4gdGhlIGxpc3Qgb2Yga2VybmVsIGZpbGVzIHVzZWQgYnkgb3VyIGNsaWVudHMKLSMgYXZvaWQgcGFyc2luZyB0aGUgJ2tlcm5lbF9oZWFkZXJzJyBkaXJlY3RvcnkgaXRzZWxmIHNpbmNlIHdlCi0jIHVzZSB0aGlzIHByb2dyYW0gd2l0aCB0aGUgQW5kcm9pZCBzb3VyY2UgdHJlZSBieSBkZWZhdWx0LgotIwotZnBhcnNlciA9IGtlcm5lbC5IZWFkZXJTY2FubmVyKCkKLXdhbGtfc291cmNlX2ZpbGVzKCBhcmdzLCBwYXJzZV9maWxlLCBmcGFyc2VyLCBleGNsdWRlcz1bImtlcm5lbF9oZWFkZXJzIiwib3JpZ2luYWwiXSApCi1maWxlcyAgID0gZnBhcnNlci5nZXRGaWxlcygpCi0KLWZvciBmIGluIHNvcnRlZChmaWxlcyk6Ci0gICAgcHJpbnQgZgotCi1zeXMuZXhpdCgwKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMvZ2VuZXJhdGVfdWFwaV9oZWFkZXJzLnNoIGIvbGliYy9rZXJuZWwvdG9vbHMvZ2VuZXJhdGVfdWFwaV9oZWFkZXJzLnNoCmluZGV4IDllZWIyYTUuLjM4NjE1OWEgMTAwNzU1Ci0tLSBhL2xpYmMva2VybmVsL3Rvb2xzL2dlbmVyYXRlX3VhcGlfaGVhZGVycy5zaAorKysgYi9saWJjL2tlcm5lbC90b29scy9nZW5lcmF0ZV91YXBpX2hlYWRlcnMuc2gKQEAgLTE0OCwyMiArMTQ4LDI4IEBACiAgIGV4aXQgMQogZmkKIAoraWYgW1sgLWQgIiR7S0VSTkVMX0RJUn0vbGludXgtc3RhYmxlIiBdXTsgdGhlbgorICBzcmNfZGlyPSJsaW51eC1zdGFibGUiCitlbHNlCisgIHNyY19kaXI9ImNvbW1vbiIKK2ZpCisKIGlmIFtbICR7S0VSTkVMX0RPV05MT0FEfSAtZXEgMSBdXTsgdGhlbgogICBUTVBESVI9JChta3RlbXAgLWQgL3RtcC9hbmRyb2lkX2tlcm5lbFhYWFhYWFhYKQogICBjZCAiJHtUTVBESVJ9IgogICBlY2hvICJGZXRjaGluZyBhbmRyb2lkIGtlcm5lbCBzb3VyY2UgJHtLRVJORUxfVkVSU0lPTn0iCiAgIGdpdCBjbG9uZSBodHRwczovL2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbS9rZXJuZWwvY29tbW9uLmdpdAotICBjZCBjb21tb24KKyAgY2QgIiR7Q09NTU9OfSIKICAgZ2l0IGNoZWNrb3V0ICIke0tFUk5FTF9WRVJTSU9OfSIKICAgS0VSTkVMX0RJUj0iJHtUTVBESVJ9IgogZWxpZiBbWyAiJHtLRVJORUxfRElSfSIgPT0gIiIgXV07IHRoZW4KICAgZWNobyAiTXVzdCBzcGVjaWZ5IG9uZSBvZiAtLXVzZS1rZXJuZWwtZGlyIG9yIC0tZG93bmxvYWQta2VybmVsLiIKICAgZXhpdCAxCi1lbGlmIFtbICEgLWQgIiR7S0VSTkVMX0RJUn0iIF1dIHx8IFtbICEgLWQgIiR7S0VSTkVMX0RJUn0vY29tbW9uIiBdXTsgdGhlbgotICBlY2hvICJUaGUga2VybmVsIGRpcmVjdG9yeSAkS0VSTkVMX0RJUiBvciAkS0VSTkVMX0RJUi9jb21tb24gZG9lcyBub3QgZXhpc3QuIgorZWxpZiBbWyAhIC1kICIke0tFUk5FTF9ESVJ9IiBdXSB8fCBbWyAhIC1kICIke0tFUk5FTF9ESVJ9LyR7c3JjX2Rpcn0iIF1dOyB0aGVuCisgIGVjaG8gIlRoZSBrZXJuZWwgZGlyZWN0b3J5ICRLRVJORUxfRElSIG9yICRLRVJORUxfRElSLyR7c3JjX2Rpcn0gZG9lcyBub3QgZXhpc3QuIgogICBleGl0IDEKIGVsc2UKLSAgY2QgIiR7S0VSTkVMX0RJUn0vY29tbW9uIgorICBjZCAiJHtLRVJORUxfRElSfS8ke3NyY19kaXJ9IgogZmkKIAogaWYgW1sgJHtTS0lQX0dFTkVSQVRJT059IC1lcSAwIF1dOyB0aGVuCkBAIC0xNzUsMjcgKzE4MSwyNyBAQAogZmkKIAogIyBDb3B5IGFsbCBvZiB0aGUgaW5jbHVkZS91YXBpIGZpbGVzIHRvIHRoZSBrZXJuZWwgaGVhZGVycyB1YXBpIGRpcmVjdG9yeS4KLWNvcHlfaGRycyAiJHtLRVJORUxfRElSfS9jb21tb24vaW5jbHVkZS91YXBpIiAiJHtBTkRST0lEX0tFUk5FTF9ESVJ9L3VhcGkiCitjb3B5X2hkcnMgIiR7S0VSTkVMX0RJUn0vJHtzcmNfZGlyfS9pbmNsdWRlL3VhcGkiICIke0FORFJPSURfS0VSTkVMX0RJUn0vdWFwaSIKIAogIyBDb3B5IHRoZSBzdGFnaW5nIGZpbGVzIHRvIHVhcGkvbGludXguCi1jb3B5X2hkcnMgIiR7S0VSTkVMX0RJUn0vY29tbW9uL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3VhcGkiIFwKK2NvcHlfaGRycyAiJHtLRVJORUxfRElSfS8ke3NyY19kaXJ9L2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3VhcGkiIFwKICAgICAgICAgICAiJHtBTkRST0lEX0tFUk5FTF9ESVJ9L3VhcGkvbGludXgiICJuby1jb3B5LWRpcnMiCiAKICMgQ29weSB0aGUgZ2VuZXJhdGVkIGhlYWRlcnMuCi1jb3B5X2hkcnMgIiR7S0VSTkVMX0RJUn0vY29tbW9uL2luY2x1ZGUvZ2VuZXJhdGVkL3VhcGkiIFwKK2NvcHlfaGRycyAiJHtLRVJORUxfRElSfS8ke3NyY19kaXJ9L2luY2x1ZGUvZ2VuZXJhdGVkL3VhcGkiIFwKICAgICAgICAgICAiJHtBTkRST0lEX0tFUk5FTF9ESVJ9L3VhcGkiCiAKIGZvciBhcmNoIGluICIke0FSQ0hfTElTVFtAXX0iOyBkbwogICAjIENvcHkgYXJjaCBoZWFkZXJzLgotICBjb3B5X2hkcnMgIiR7S0VSTkVMX0RJUn0vY29tbW9uL2FyY2gvJHthcmNofS9pbmNsdWRlL3VhcGkiIFwKKyAgY29weV9oZHJzICIke0tFUk5FTF9ESVJ9LyR7c3JjX2Rpcn0vYXJjaC8ke2FyY2h9L2luY2x1ZGUvdWFwaSIgXAogICAgICAgICAgICAgIiR7QU5EUk9JRF9LRVJORUxfRElSfS91YXBpL2FzbS0ke2FyY2h9IgogICAjIENvcHkgdGhlIGdlbmVyYXRlZCBhcmNoIGhlYWRlcnMuCi0gIGNvcHlfaGRycyAiJHtLRVJORUxfRElSfS9jb21tb24vYXJjaC8ke2FyY2h9L2luY2x1ZGUvZ2VuZXJhdGVkL3VhcGkiIFwKKyAgY29weV9oZHJzICIke0tFUk5FTF9ESVJ9LyR7c3JjX2Rpcn0vYXJjaC8ke2FyY2h9L2luY2x1ZGUvZ2VuZXJhdGVkL3VhcGkiIFwKICAgICAgICAgICAgICIke0FORFJPSURfS0VSTkVMX0RJUn0vdWFwaS9hc20tJHthcmNofSIKIAogICAjIFNwZWNpYWwgY29weSBvZiBnZW5lcmF0ZWQgaGVhZGVyIGZpbGVzIGZyb20gYXJjaC88QVJDSD4vZ2VuZXJhdGVkL2FzbSB0aGF0CiAgICMgYWxzbyBleGlzdCBpbiB1YXBpL2FzbS1nZW5lcmljLgotICBjb3B5X2lmX2V4aXN0cyAiJHtLRVJORUxfRElSfS9jb21tb24vaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljIiBcCi0gICAgICAgICAgICAgICAgICIke0tFUk5FTF9ESVJ9L2NvbW1vbi9hcmNoLyR7YXJjaH0vaW5jbHVkZS9nZW5lcmF0ZWQvYXNtIiBcCisgIGNvcHlfaWZfZXhpc3RzICIke0tFUk5FTF9ESVJ9LyR7c3JjX2Rpcn0vaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljIiBcCisgICAgICAgICAgICAgICAgICIke0tFUk5FTF9ESVJ9LyR7c3JjX2Rpcn0vYXJjaC8ke2FyY2h9L2luY2x1ZGUvZ2VuZXJhdGVkL2FzbSIgXAogICAgICAgICAgICAgICAgICAiJHtBTkRST0lEX0tFUk5FTF9ESVJ9L3VhcGkvYXNtLSR7YXJjaH0vYXNtIgogZG9uZQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weSBiL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKaW5kZXggM2YxZDFlNi4uNzM4NjJkYSAxMDA3NTUKLS0tIGEvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorKysgYi9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAjCi1pbXBvcnQgc3lzLCBjcHAsIGtlcm5lbCwgZ2xvYiwgb3MsIHJlLCBnZXRvcHQsIGNsZWFuX2hlYWRlcgoraW1wb3J0IHN5cywgY3BwLCBrZXJuZWwsIGdsb2IsIG9zLCByZSwgZ2V0b3B0LCBjbGVhbl9oZWFkZXIsIHN1YnByb2Nlc3MKIGZyb20gZGVmYXVsdHMgaW1wb3J0ICoKIGZyb20gdXRpbHMgaW1wb3J0ICoKIApAQCAtNDAsMTEgKzQwLDIyIEBACiAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIob3JpZ2luYWxfZGlyKToKICAgICAgICAgcGFuaWMoICJNaXNzaW5nIGRpcmVjdG9yeSwgcGxlYXNlIHNwZWNpZnkgb25lIHRocm91Z2ggY29tbWFuZC1saW5lOiAlc1xuIiAlIG9yaWdpbmFsX2RpciApCiAKKyMgRml4bWU6IFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgbmV4dCByZWxlYXNlLgorIyBEbyBub3QgdXBkYXRlIGlvbi5oIGlvbl90ZXN0LmggdW50aWwgYWZ0ZXIgbmV4dCByZWxlYXNlIGluIGFvc3AuCitzb3VyY2UgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgnZ2l0IHJlbW90ZSBzaG93Jywgc2hlbGw9VHJ1ZSkuc3RyaXAoKQorc2tpcF9pb24gPSBGYWxzZQoraWYgc291cmNlID09ICJhb3NwIjoKKyAgICBza2lwX2lvbiA9IFRydWUKKwogIyBmaW5kIGFsbCBzb3VyY2UgZmlsZXMgaW4gJ29yaWdpbmFsJwogIwogc291cmNlcyA9IFtdCit3YXJuaW5nX2lvbiA9IFtdCiBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayggb3JpZ2luYWxfZGlyICk6CiAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgIGlmIHNraXBfaW9uIGFuZCAoZmlsZSA9PSAiaW9uLmgiIG9yIGZpbGUgPT0gImlvbl90ZXN0LmgiKToKKyAgICAgICAgICAgIHdhcm5pbmdfaW9uLmFwcGVuZCgiICBTa2lwcGVkIGZpbGUgJXMvJXMiICUgKHJvb3QsIGZpbGUpKQorICAgICAgICAgICAgY29udGludWUKICAgICAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlKQogICAgICAgICBpZiBleHQgPT0gIi5oIjoKICAgICAgICAgICAgIHNvdXJjZXMuYXBwZW5kKCAiJXMvJXMiICUgKHJvb3QsZmlsZSkgKQpAQCAtOTAsNCArMTAxLDcgQEAKIAogYi51cGRhdGVHaXRGaWxlcygpCiAKK2lmIHdhcm5pbmdfaW9uOgorICAgIHByaW50ICJOT1RFOiBEdWUgdG8gaW1wb3J0IGludG8gYW9zcCwgc29tZSBmaWxlcyB3ZXJlIG5vdCBwcm9jZXNzZWQuIgorICAgIHByaW50ICJcbiIuam9pbih3YXJuaW5nX2lvbikKIHN5cy5leGl0KDApCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL2J5dGVvcmRlci5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9ieXRlb3JkZXIuaAppbmRleCAwZDJiZGYzLi42ZjE3YTQ4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL2J5dGVvcmRlci5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vYnl0ZW9yZGVyLmgKQEAgLTE4LDExICsxOCw2IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fQVJNX0JZVEVPUkRFUl9ICiAjZGVmaW5lIF9fQVNNX0FSTV9CWVRFT1JERVJfSAotI2lmZGVmIF9fQVJNRUJfXwotI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmg+Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2Vsc2UKICNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oPgogI2VuZGlmCi0jZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL2h3Y2FwLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL2h3Y2FwLmgKaW5kZXggNTRlNDMzYy4uZTcwZjNiOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9od2NhcC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vaHdjYXAuaApAQCAtNDQsNSArNDQsNyBAQAogI2RlZmluZSBIV0NBUF9JRElWVCAoMSA8PCAxOCkKICNkZWZpbmUgSFdDQVBfVkZQRDMyICgxIDw8IDE5KQogI2RlZmluZSBIV0NBUF9JRElWIChIV0NBUF9JRElWQSB8IEhXQ0FQX0lESVZUKQotI2VuZGlmCisjZGVmaW5lIEhXQ0FQX0xQQUUgKDEgPDwgMjApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIV0NBUF9FVlRTVFJNICgxIDw8IDIxKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL2t2bS5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9rdm0uaAppbmRleCAzMWEyYTJmLi4yYjVhMTdlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL2t2bS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20va3ZtLmgKQEAgLTYxLDc0ICs2MSw5NCBAQAogfTsKICNkZWZpbmUgS1ZNX0FSTV9UQVJHRVRfQ09SVEVYX0ExNSAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBLVk1fQVJNX05VTV9UQVJHRVRTIDEKKyNkZWZpbmUgS1ZNX0FSTV9UQVJHRVRfQ09SVEVYX0E3IDEKKyNkZWZpbmUgS1ZNX0FSTV9OVU1fVEFSR0VUUyAyCiAjZGVmaW5lIEtWTV9BUk1fREVWSUNFX1RZUEVfU0hJRlQgMAogI2RlZmluZSBLVk1fQVJNX0RFVklDRV9UWVBFX01BU0sgKDB4ZmZmZiA8PCBLVk1fQVJNX0RFVklDRV9UWVBFX1NISUZUKQotI2RlZmluZSBLVk1fQVJNX0RFVklDRV9JRF9TSElGVCAxNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0FSTV9ERVZJQ0VfSURfU0hJRlQgMTYKICNkZWZpbmUgS1ZNX0FSTV9ERVZJQ0VfSURfTUFTSyAoMHhmZmZmIDw8IEtWTV9BUk1fREVWSUNFX0lEX1NISUZUKQogI2RlZmluZSBLVk1fQVJNX0RFVklDRV9WR0lDX1YyIDAKICNkZWZpbmUgS1ZNX1ZHSUNfVjJfQUREUl9UWVBFX0RJU1QgMAotI2RlZmluZSBLVk1fVkdJQ19WMl9BRERSX1RZUEVfQ1BVIDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9WR0lDX1YyX0FERFJfVFlQRV9DUFUgMQogI2RlZmluZSBLVk1fVkdJQ19WMl9ESVNUX1NJWkUgMHgxMDAwCiAjZGVmaW5lIEtWTV9WR0lDX1YyX0NQVV9TSVpFIDB4MjAwMAogI2RlZmluZSBLVk1fQVJNX1ZDUFVfUE9XRVJfT0ZGIDAKLXN0cnVjdCBrdm1fdmNwdV9pbml0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCB7CiAgX191MzIgdGFyZ2V0OwogIF9fdTMyIGZlYXR1cmVzWzddOwogfTsKLXN0cnVjdCBrdm1fc3JlZ3MgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBrdm1fc3JlZ3MgewogfTsKIHN0cnVjdCBrdm1fZnB1IHsKIH07Ci1zdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCB7CiB9Owogc3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggewogfTsKLXN0cnVjdCBrdm1fc3luY19yZWdzIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qga3ZtX3N5bmNfcmVncyB7CiB9Owogc3RydWN0IGt2bV9hcmNoX21lbW9yeV9zbG90IHsKIH07Ci0jZGVmaW5lIEtWTV9SRUdfQVJNX0NPUFJPQ19NQVNLIDB4MDAwMDAwMDAwRkZGMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1JFR19BUk1fQ09QUk9DX01BU0sgMHgwMDAwMDAwMDBGRkYwMDAwCiAjZGVmaW5lIEtWTV9SRUdfQVJNX0NPUFJPQ19TSElGVCAxNgogI2RlZmluZSBLVk1fUkVHX0FSTV8zMl9PUEMyX01BU0sgMHgwMDAwMDAwMDAwMDAwMDA3CiAjZGVmaW5lIEtWTV9SRUdfQVJNXzMyX09QQzJfU0hJRlQgMAotI2RlZmluZSBLVk1fUkVHX0FSTV9PUEMxX01BU0sgMHgwMDAwMDAwMDAwMDAwMDc4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUkVHX0FSTV9PUEMxX01BU0sgMHgwMDAwMDAwMDAwMDAwMDc4CiAjZGVmaW5lIEtWTV9SRUdfQVJNX09QQzFfU0hJRlQgMwogI2RlZmluZSBLVk1fUkVHX0FSTV9DUk1fTUFTSyAweDAwMDAwMDAwMDAwMDA3ODAKICNkZWZpbmUgS1ZNX1JFR19BUk1fQ1JNX1NISUZUIDcKLSNkZWZpbmUgS1ZNX1JFR19BUk1fMzJfQ1JOX01BU0sgMHgwMDAwMDAwMDAwMDA3ODAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUkVHX0FSTV8zMl9DUk5fTUFTSyAweDAwMDAwMDAwMDAwMDc4MDAKICNkZWZpbmUgS1ZNX1JFR19BUk1fMzJfQ1JOX1NISUZUIDExCisjZGVmaW5lIEFSTV9DUDE1X1JFR19TSElGVF9NQVNLKHgsbikgICAoKCh4KSA8PCBLVk1fUkVHX0FSTV8gIyMgbiAjIyBfU0hJRlQpICYgS1ZNX1JFR19BUk1fICMjIG4gIyMgX01BU0spCisjZGVmaW5lIF9fQVJNX0NQMTVfUkVHKG9wMSxjcm4sY3JtLG9wMikgICAoS1ZNX1JFR19BUk0gfCAoMTUgPDwgS1ZNX1JFR19BUk1fQ09QUk9DX1NISUZUKSB8ICAgQVJNX0NQMTVfUkVHX1NISUZUX01BU0sob3AxLCBPUEMxKSB8ICAgQVJNX0NQMTVfUkVHX1NISUZUX01BU0soY3JuLCAzMl9DUk4pIHwgICBBUk1fQ1AxNV9SRUdfU0hJRlRfTUFTSyhjcm0sIENSTSkgfCAgIEFSTV9DUDE1X1JFR19TSElGVF9NQVNLKG9wMiwgMzJfT1BDMikpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBUk1fQ1AxNV9SRUczMiguLi4pIChfX0FSTV9DUDE1X1JFRyhfX1ZBX0FSR1NfXykgfCBLVk1fUkVHX1NJWkVfVTMyKQorI2RlZmluZSBfX0FSTV9DUDE1X1JFRzY0KG9wMSxjcm0pICAgKF9fQVJNX0NQMTVfUkVHKG9wMSwgMCwgY3JtLCAwKSB8IEtWTV9SRUdfU0laRV9VNjQpCisjZGVmaW5lIEFSTV9DUDE1X1JFRzY0KC4uLikgX19BUk1fQ1AxNV9SRUc2NChfX1ZBX0FSR1NfXykKKyNkZWZpbmUgS1ZNX1JFR19BUk1fVElNRVJfQ1RMIEFSTV9DUDE1X1JFRzMyKDAsIDE0LCAzLCAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1JFR19BUk1fVElNRVJfQ05UIEFSTV9DUDE1X1JFRzY0KDEsIDE0KQorI2RlZmluZSBLVk1fUkVHX0FSTV9USU1FUl9DVkFMIEFSTV9DUDE1X1JFRzY0KDMsIDE0KQogI2RlZmluZSBLVk1fUkVHX0FSTV9DT1JFICgweDAwMTAgPDwgS1ZNX1JFR19BUk1fQ09QUk9DX1NISUZUKQogI2RlZmluZSBLVk1fUkVHX0FSTV9DT1JFX1JFRyhuYW1lKSAob2Zmc2V0b2Yoc3RydWN0IGt2bV9yZWdzLCBuYW1lKSAvIDQpCi0jZGVmaW5lIEtWTV9SRUdfQVJNX0RFTVVYICgweDAwMTEgPDwgS1ZNX1JFR19BUk1fQ09QUk9DX1NISUZUKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1JFR19BUk1fREVNVVggKDB4MDAxMSA8PCBLVk1fUkVHX0FSTV9DT1BST0NfU0hJRlQpCiAjZGVmaW5lIEtWTV9SRUdfQVJNX0RFTVVYX0lEX01BU0sgMHgwMDAwMDAwMDAwMDBGRjAwCiAjZGVmaW5lIEtWTV9SRUdfQVJNX0RFTVVYX0lEX1NISUZUIDgKICNkZWZpbmUgS1ZNX1JFR19BUk1fREVNVVhfSURfQ0NTSURSICgweDAwIDw8IEtWTV9SRUdfQVJNX0RFTVVYX0lEX1NISUZUKQotI2RlZmluZSBLVk1fUkVHX0FSTV9ERU1VWF9WQUxfTUFTSyAweDAwMDAwMDAwMDAwMDAwRkYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9SRUdfQVJNX0RFTVVYX1ZBTF9NQVNLIDB4MDAwMDAwMDAwMDAwMDBGRgogI2RlZmluZSBLVk1fUkVHX0FSTV9ERU1VWF9WQUxfU0hJRlQgMAogI2RlZmluZSBLVk1fUkVHX0FSTV9WRlAgKDB4MDAxMiA8PCBLVk1fUkVHX0FSTV9DT1BST0NfU0hJRlQpCiAjZGVmaW5lIEtWTV9SRUdfQVJNX1ZGUF9NQVNLIDB4MDAwMDAwMDAwMDAwRkZGRgotI2RlZmluZSBLVk1fUkVHX0FSTV9WRlBfQkFTRV9SRUcgMHgwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUkVHX0FSTV9WRlBfQkFTRV9SRUcgMHgwCiAjZGVmaW5lIEtWTV9SRUdfQVJNX1ZGUF9GUFNJRCAweDEwMDAKICNkZWZpbmUgS1ZNX1JFR19BUk1fVkZQX0ZQU0NSIDB4MTAwMQogI2RlZmluZSBLVk1fUkVHX0FSTV9WRlBfTVZGUjEgMHgxMDA2Ci0jZGVmaW5lIEtWTV9SRUdfQVJNX1ZGUF9NVkZSMCAweDEwMDcKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9SRUdfQVJNX1ZGUF9NVkZSMCAweDEwMDcKICNkZWZpbmUgS1ZNX1JFR19BUk1fVkZQX0ZQRVhDIDB4MTAwOAogI2RlZmluZSBLVk1fUkVHX0FSTV9WRlBfRlBJTlNUIDB4MTAwOQogI2RlZmluZSBLVk1fUkVHX0FSTV9WRlBfRlBJTlNUMiAweDEwMEEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIgMAorI2RlZmluZSBLVk1fREVWX0FSTV9WR0lDX0dSUF9ESVNUX1JFR1MgMQorI2RlZmluZSBLVk1fREVWX0FSTV9WR0lDX0dSUF9DUFVfUkVHUyAyCisjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfQ1BVSURfU0hJRlQgMzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfQ1BVSURfTUFTSyAoMHhmZlVMTCA8PCBLVk1fREVWX0FSTV9WR0lDX0NQVUlEX1NISUZUKQorI2RlZmluZSBLVk1fREVWX0FSTV9WR0lDX09GRlNFVF9TSElGVCAwCisjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfT0ZGU0VUX01BU0sgKDB4ZmZmZmZmZmZVTEwgPDwgS1ZNX0RFVl9BUk1fVkdJQ19PRkZTRVRfU0hJRlQpCiAjZGVmaW5lIEtWTV9BUk1fSVJRX1RZUEVfU0hJRlQgMjQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9BUk1fSVJRX1RZUEVfTUFTSyAweGZmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3BlcmZfcmVncy5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9wZXJmX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDViY2YzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9wZXJmX3JlZ3MuaApAQCAtMCwwICsxLDQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fQVJNX1BFUkZfUkVHU19ICisjZGVmaW5lIF9BU01fQVJNX1BFUkZfUkVHU19ICitlbnVtIHBlcmZfZXZlbnRfYXJtX3JlZ3MgeworIFBFUkZfUkVHX0FSTV9SMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUEVSRl9SRUdfQVJNX1IxLAorIFBFUkZfUkVHX0FSTV9SMiwKKyBQRVJGX1JFR19BUk1fUjMsCisgUEVSRl9SRUdfQVJNX1I0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX1JFR19BUk1fUjUsCisgUEVSRl9SRUdfQVJNX1I2LAorIFBFUkZfUkVHX0FSTV9SNywKKyBQRVJGX1JFR19BUk1fUjgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFBFUkZfUkVHX0FSTV9SOSwKKyBQRVJGX1JFR19BUk1fUjEwLAorIFBFUkZfUkVHX0FSTV9GUCwKKyBQRVJGX1JFR19BUk1fSVAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFBFUkZfUkVHX0FSTV9TUCwKKyBQRVJGX1JFR19BUk1fTFIsCisgUEVSRl9SRUdfQVJNX1BDLAorIFBFUkZfUkVHX0FSTV9NQVgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9wdHJhY2UuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vcHRyYWNlLmgKaW5kZXggNzgxOTFhYy4uOWQzOWQ0OSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9wdHJhY2UuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3B0cmFjZS5oCkBAIC00NCwxMCArNDQsMTAgQEAKICNkZWZpbmUgSVJRMjZfTU9ERSAweDAwMDAwMDAyCiAjZGVmaW5lIFNWQzI2X01PREUgMHgwMDAwMDAwMwogI2RlZmluZSBVU1JfTU9ERSAweDAwMDAwMDEwCi0jZGVmaW5lIEZJUV9NT0RFIDB4MDAwMDAwMTEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElSUV9NT0RFIDB4MDAwMDAwMTIKICNkZWZpbmUgU1ZDX01PREUgMHgwMDAwMDAxMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRklRX01PREUgMHgwMDAwMDAxMQorI2RlZmluZSBJUlFfTU9ERSAweDAwMDAwMDEyCiAjZGVmaW5lIEFCVF9NT0RFIDB4MDAwMDAwMTcKICNkZWZpbmUgSFlQX01PREUgMHgwMDAwMDAxYQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTU2LDYzICs1Niw2NSBAQAogI2RlZmluZSBNT0RFMzJfQklUIDB4MDAwMDAwMTAKICNkZWZpbmUgTU9ERV9NQVNLIDB4MDAwMDAwMWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBTUl9UX0JJVCAweDAwMDAwMDIwCisjZGVmaW5lIFY0X1BTUl9UX0JJVCAweDAwMDAwMDIwCisjZGVmaW5lIFY3TV9QU1JfVF9CSVQgMHgwMTAwMDAwMAorI2RlZmluZSBQU1JfVF9CSVQgVjRfUFNSX1RfQklUCiAjZGVmaW5lIFBTUl9GX0JJVCAweDAwMDAwMDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQU1JfSV9CSVQgMHgwMDAwMDA4MAogI2RlZmluZSBQU1JfQV9CSVQgMHgwMDAwMDEwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFNSX0VfQklUIDB4MDAwMDAyMDAKICNkZWZpbmUgUFNSX0pfQklUIDB4MDEwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBTUl9RX0JJVCAweDA4MDAwMDAwCiAjZGVmaW5lIFBTUl9WX0JJVCAweDEwMDAwMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQU1JfQ19CSVQgMHgyMDAwMDAwMAogI2RlZmluZSBQU1JfWl9CSVQgMHg0MDAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFNSX05fQklUIDB4ODAwMDAwMDAKICNkZWZpbmUgUFNSX2YgMHhmZjAwMDAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFNSX3MgMHgwMGZmMDAwMAogI2RlZmluZSBQU1JfeCAweDAwMDBmZjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQU1JfYyAweDAwMDAwMGZmCiAjZGVmaW5lIEFQU1JfTUFTSyAweGY4MGYwMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQU1JfSVNFVF9NQVNLIDB4MDEwMDAwMTAKICNkZWZpbmUgUFNSX0lUX01BU0sgMHgwNjAwZmMwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFNSX0VORElBTl9NQVNLIDB4MDAwMDAyMDAKICNkZWZpbmUgUFNSX0VORFNUQVRFIDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBUX1RFWFRfQUREUiAweDEwMDAwCiAjZGVmaW5lIFBUX0RBVEFfQUREUiAweDEwMDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVF9URVhUX0VORF9BRERSIDB4MTAwMDgKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHB0X3JlZ3MgewogIGxvbmcgdXJlZ3NbMThdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIEFSTV9jcHNyIHVyZWdzWzE2XQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVJNX3BjIHVyZWdzWzE1XQogI2RlZmluZSBBUk1fbHIgdXJlZ3NbMTRdCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUk1fc3AgdXJlZ3NbMTNdCiAjZGVmaW5lIEFSTV9pcCB1cmVnc1sxMl0KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSTV9mcCB1cmVnc1sxMV0KICNkZWZpbmUgQVJNX3IxMCB1cmVnc1sxMF0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSTV9yOSB1cmVnc1s5XQogI2RlZmluZSBBUk1fcjggdXJlZ3NbOF0KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSTV9yNyB1cmVnc1s3XQogI2RlZmluZSBBUk1fcjYgdXJlZ3NbNl0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSTV9yNSB1cmVnc1s1XQogI2RlZmluZSBBUk1fcjQgdXJlZ3NbNF0KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSTV9yMyB1cmVnc1szXQogI2RlZmluZSBBUk1fcjIgdXJlZ3NbMl0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSTV9yMSB1cmVnc1sxXQogI2RlZmluZSBBUk1fcjAgdXJlZ3NbMF0KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSTV9PUklHX3IwIHVyZWdzWzE3XQogI2RlZmluZSBBUk1fVkZQUkVHU19TSVpFICggMzIgKiA4ICAgKyA0ICAgKQotI2VuZGlmCi0jZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9zaWduYWwuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vc2lnbmFsLmgKaW5kZXggOTI5N2E3MC4uZmQzOWFhYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9zaWduYWwuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3NpZ25hbC5oCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIHN0cnVjdCBzaWdpbmZvOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTlNJRyAzMgorI2RlZmluZSBfS0VSTkVMX05TSUcgMzIKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBzaWdzZXRfdDsKICNkZWZpbmUgU0lHSFVQIDEKICNkZWZpbmUgU0lHSU5UIDIKQEAgLTY2LDggKzY2LDggQEAKICNkZWZpbmUgU0lHU1lTIDMxCiAjZGVmaW5lIFNJR1VOVVNFRCAzMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0lHUlRNSU4gMzIKLSNkZWZpbmUgU0lHUlRNQVggX05TSUcKKyNkZWZpbmUgX19TSUdSVE1JTiAzMgorI2RlZmluZSBfX1NJR1JUTUFYIF9LRVJORUxfX05TSUcKICNkZWZpbmUgU0lHU1dJIDMyCiAjZGVmaW5lIFNBX05PQ0xEU1RPUCAweDAwMDAwMDAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9zdGF0LmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3N0YXQuaAppbmRleCBkODE4OGJmLi5iMzQyNWRkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3N0YXQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3N0YXQuaApAQCAtMzcsNjggKzM3LDU1IEBACiAjZGVmaW5lIFNUQVRfSEFWRV9OU0VDCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHN0YXQgewotI2lmZGVmIF9fQVJNRUJfXwotIHVuc2lnbmVkIHNob3J0IHN0X2RldjsKLSB1bnNpZ25lZCBzaG9ydCBfX3BhZDE7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2Vsc2UKICB1bnNpZ25lZCBsb25nIHN0X2RldjsKLSNlbmRpZgogIHVuc2lnbmVkIGxvbmcgc3RfaW5vOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBzdF9ubGluazsKICB1bnNpZ25lZCBzaG9ydCBzdF91aWQ7CiAgdW5zaWduZWQgc2hvcnQgc3RfZ2lkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNpZmRlZiBfX0FSTUVCX18KLSB1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OwotIHVuc2lnbmVkIHNob3J0IF9fcGFkMjsKLSNlbHNlCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc3RfcmRldjsKLSNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHN0X3NpemU7CiAgdW5zaWduZWQgbG9uZyBzdF9ibGtzaXplOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHN0X2Jsb2NrczsKICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lX25zZWM7CiAgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzdF9tdGltZV9uc2VjOwogIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWVfbnNlYzsKICB1bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDU7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzdGF0NjQgewogIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9kZXY7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgX19wYWQwWzRdOwogI2RlZmluZSBTVEFUNjRfSEFTX0JST0tFTl9TVF9JTk8gMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIF9fc3RfaW5vOwogIHVuc2lnbmVkIGludCBzdF9tb2RlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgc3Rfbmxpbms7CiAgdW5zaWduZWQgbG9uZyBzdF91aWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc3RfZ2lkOwogIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9yZGV2OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIF9fcGFkM1s0XTsKICBsb25nIGxvbmcgc3Rfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzdF9ibGtzaXplOwogIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9ibG9ja3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7CiAgdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHN0X210aW1lOwogIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWVfbnNlYzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lX25zZWM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9pbm87CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS91bmlzdGQuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vdW5pc3RkLmgKaW5kZXggZjk5YmZiMS4uYmU5ZjM2ZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS91bmlzdGQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3VuaXN0ZC5oCkBAIC0xOSwxMiArMTksNyBAQAogI2lmbmRlZiBfVUFQSV9fQVNNX0FSTV9VTklTVERfSAogI2RlZmluZSBfVUFQSV9fQVNNX0FSTV9VTklTVERfSAogI2RlZmluZSBfX05SX09BQklfU1lTQ0FMTF9CQVNFIDB4OTAwMDAwCi0jaWYgZGVmaW5lZChfX3RodW1iX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9TWVNDQUxMX0JBU0UgMAotI2Vsc2UKLSNkZWZpbmUgX19OUl9TWVNDQUxMX0JBU0UgX19OUl9PQUJJX1NZU0NBTExfQkFTRQotI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbCAoX19OUl9TWVNDQUxMX0JBU0UrIDApCiAjZGVmaW5lIF9fTlJfZXhpdCAoX19OUl9TWVNDQUxMX0JBU0UrIDEpCkBAIC00NjEsMjkgKzQ1NiwyOSBAQAogI2RlZmluZSBfX05SX2tjbXAgKF9fTlJfU1lTQ0FMTF9CQVNFKzM3OCkKICNkZWZpbmUgX19OUl9maW5pdF9tb2R1bGUgKF9fTlJfU1lTQ0FMTF9CQVNFKzM3OSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YXR0ciAoX19OUl9TWVNDQUxMX0JBU0UrMzgwKQorI2RlZmluZSBfX05SX3NjaGVkX2dldGF0dHIgKF9fTlJfU1lTQ0FMTF9CQVNFKzM4MSkKICNkZWZpbmUgX19BUk1fTlJfQkFTRSAoX19OUl9TWVNDQUxMX0JBU0UrMHgwZjAwMDApCiAjZGVmaW5lIF9fQVJNX05SX2JyZWFrcG9pbnQgKF9fQVJNX05SX0JBU0UrMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQVJNX05SX2NhY2hlZmx1c2ggKF9fQVJNX05SX0JBU0UrMikKICNkZWZpbmUgX19BUk1fTlJfdXNyMjYgKF9fQVJNX05SX0JBU0UrMykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQVJNX05SX3VzcjMyIChfX0FSTV9OUl9CQVNFKzQpCiAjZGVmaW5lIF9fQVJNX05SX3NldF90bHMgKF9fQVJNX05SX0JBU0UrNSkKLSNpZmRlZiBfX0FSTV9FQUJJX18KLSN1bmRlZiBfX05SX3RpbWUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjdW5kZWYgX19OUl90aW1lCiAjdW5kZWYgX19OUl91bW91bnQKICN1bmRlZiBfX05SX3N0aW1lCiAjdW5kZWYgX19OUl9hbGFybQotI3VuZGVmIF9fTlJfdXRpbWUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjdW5kZWYgX19OUl91dGltZQogI3VuZGVmIF9fTlJfZ2V0cmxpbWl0CiAjdW5kZWYgX19OUl9zZWxlY3QKICN1bmRlZiBfX05SX3JlYWRkaXIKLSN1bmRlZiBfX05SX21tYXAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjdW5kZWYgX19OUl9tbWFwCiAjdW5kZWYgX19OUl9zb2NrZXRjYWxsCiAjdW5kZWYgX19OUl9zeXNjYWxsCiAjdW5kZWYgX19OUl9pcGMKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtNjQvYXNtL2J5dGVvcmRlci5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtNjQvYXNtL2J5dGVvcmRlci5oCmluZGV4IDE5MDhhYTYuLjkyYjFkNDggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybTY0L2FzbS9ieXRlb3JkZXIuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm02NC9hc20vYnl0ZW9yZGVyLmgKQEAgLTE4LDYgKzE4LDExIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fQllURU9SREVSX0gKICNkZWZpbmUgX19BU01fQllURU9SREVSX0gKKyNpZmRlZiBfX0FBUkNINjRFQl9fCisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZWxzZQogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmg+CiAjZW5kaWYKKyNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybTY0L2FzbS9od2NhcC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtNjQvYXNtL2h3Y2FwLmgKaW5kZXggNTM5YjcyNS4uY2NlYTUzZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtNjQvYXNtL2h3Y2FwLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtNjQvYXNtL2h3Y2FwLmgKQEAgLTIxLDQgKzIxLDExIEBACiAjZGVmaW5lIEhXQ0FQX0ZQICgxIDw8IDApCiAjZGVmaW5lIEhXQ0FQX0FTSU1EICgxIDw8IDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIV0NBUF9FVlRTVFJNICgxIDw8IDIpCisjZGVmaW5lIEhXQ0FQX0FFUyAoMSA8PCAzKQorI2RlZmluZSBIV0NBUF9QTVVMTCAoMSA8PCA0KQorI2RlZmluZSBIV0NBUF9TSEExICgxIDw8IDUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIV0NBUF9TSEEyICgxIDw8IDYpCisjZGVmaW5lIEhXQ0FQX0NSQzMyICgxIDw8IDcpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybTY0L2FzbS9rdm0uaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybTY0L2FzbS9rdm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2FiZDQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtNjQvYXNtL2t2bS5oCkBAIC0wLDAgKzEsMTU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVJNX0tWTV9IX18KKyNkZWZpbmUgX19BUk1fS1ZNX0hfXworI2RlZmluZSBLVk1fU1BTUl9FTDEgMAorI2RlZmluZSBLVk1fU1BTUl9TVkMgS1ZNX1NQU1JfRUwxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fU1BTUl9BQlQgMQorI2RlZmluZSBLVk1fU1BTUl9VTkQgMgorI2RlZmluZSBLVk1fU1BTUl9JUlEgMworI2RlZmluZSBLVk1fU1BTUl9GSVEgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX05SX1NQU1IgNQorI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX0tWTV9IQVZFX0dVRVNUX0RFQlVHCisjZGVmaW5lIF9fS1ZNX0hBVkVfSVJRX0xJTkUKKyNkZWZpbmUgS1ZNX1JFR19TSVpFKGlkKSAgICgxVSA8PCAoKChpZCkgJiBLVk1fUkVHX1NJWkVfTUFTSykgPj4gS1ZNX1JFR19TSVpFX1NISUZUKSkKK3N0cnVjdCBrdm1fcmVncyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB1c2VyX3B0X3JlZ3MgcmVnczsKKyBfX3U2NCBzcF9lbDE7CisgX191NjQgZWxyX2VsMTsKKyBfX3U2NCBzcHNyW0tWTV9OUl9TUFNSXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHVzZXJfZnBzaW1kX3N0YXRlIGZwX3JlZ3M7Cit9OworI2RlZmluZSBLVk1fQVJNX1RBUkdFVF9BRU1fVjggMAorI2RlZmluZSBLVk1fQVJNX1RBUkdFVF9GT1VOREFUSU9OX1Y4IDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9BUk1fVEFSR0VUX0NPUlRFWF9BNTcgMgorI2RlZmluZSBLVk1fQVJNX1RBUkdFVF9YR0VORV9QT1RFTlpBIDMKKyNkZWZpbmUgS1ZNX0FSTV9OVU1fVEFSR0VUUyA0CisjZGVmaW5lIEtWTV9BUk1fREVWSUNFX1RZUEVfU0hJRlQgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0FSTV9ERVZJQ0VfVFlQRV9NQVNLICgweGZmZmYgPDwgS1ZNX0FSTV9ERVZJQ0VfVFlQRV9TSElGVCkKKyNkZWZpbmUgS1ZNX0FSTV9ERVZJQ0VfSURfU0hJRlQgMTYKKyNkZWZpbmUgS1ZNX0FSTV9ERVZJQ0VfSURfTUFTSyAoMHhmZmZmIDw8IEtWTV9BUk1fREVWSUNFX0lEX1NISUZUKQorI2RlZmluZSBLVk1fQVJNX0RFVklDRV9WR0lDX1YyIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9WR0lDX1YyX0FERFJfVFlQRV9ESVNUIDAKKyNkZWZpbmUgS1ZNX1ZHSUNfVjJfQUREUl9UWVBFX0NQVSAxCisjZGVmaW5lIEtWTV9WR0lDX1YyX0RJU1RfU0laRSAweDEwMDAKKyNkZWZpbmUgS1ZNX1ZHSUNfVjJfQ1BVX1NJWkUgMHgyMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fQVJNX1ZDUFVfUE9XRVJfT0ZGIDAKKyNkZWZpbmUgS1ZNX0FSTV9WQ1BVX0VMMV8zMkJJVCAxCitzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCB7CisgX191MzIgdGFyZ2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBmZWF0dXJlc1s3XTsKK307CitzdHJ1Y3Qga3ZtX3NyZWdzIHsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGt2bV9mcHUgeworfTsKK3N0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCB7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIHsKK307CitzdHJ1Y3Qga3ZtX3N5bmNfcmVncyB7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBrdm1fYXJjaF9tZW1vcnlfc2xvdCB7Cit9OworI2RlZmluZSBLVk1fUkVHX0FSTV9DT1BST0NfTUFTSyAweDAwMDAwMDAwMEZGRjAwMDAKKyNkZWZpbmUgS1ZNX1JFR19BUk1fQ09QUk9DX1NISUZUIDE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUkVHX0FSTV9DT1JFICgweDAwMTAgPDwgS1ZNX1JFR19BUk1fQ09QUk9DX1NISUZUKQorI2RlZmluZSBLVk1fUkVHX0FSTV9DT1JFX1JFRyhuYW1lKSAob2Zmc2V0b2Yoc3RydWN0IGt2bV9yZWdzLCBuYW1lKSAvIHNpemVvZihfX3UzMikpCisjZGVmaW5lIEtWTV9SRUdfQVJNX0RFTVVYICgweDAwMTEgPDwgS1ZNX1JFR19BUk1fQ09QUk9DX1NISUZUKQorI2RlZmluZSBLVk1fUkVHX0FSTV9ERU1VWF9JRF9NQVNLIDB4MDAwMDAwMDAwMDAwRkYwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1JFR19BUk1fREVNVVhfSURfU0hJRlQgOAorI2RlZmluZSBLVk1fUkVHX0FSTV9ERU1VWF9JRF9DQ1NJRFIgKDB4MDAgPDwgS1ZNX1JFR19BUk1fREVNVVhfSURfU0hJRlQpCisjZGVmaW5lIEtWTV9SRUdfQVJNX0RFTVVYX1ZBTF9NQVNLIDB4MDAwMDAwMDAwMDAwMDBGRgorI2RlZmluZSBLVk1fUkVHX0FSTV9ERU1VWF9WQUxfU0hJRlQgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1JFR19BUk02NF9TWVNSRUcgKDB4MDAxMyA8PCBLVk1fUkVHX0FSTV9DT1BST0NfU0hJRlQpCisjZGVmaW5lIEtWTV9SRUdfQVJNNjRfU1lTUkVHX09QMF9NQVNLIDB4MDAwMDAwMDAwMDAwYzAwMAorI2RlZmluZSBLVk1fUkVHX0FSTTY0X1NZU1JFR19PUDBfU0hJRlQgMTQKKyNkZWZpbmUgS1ZNX1JFR19BUk02NF9TWVNSRUdfT1AxX01BU0sgMHgwMDAwMDAwMDAwMDAzODAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUkVHX0FSTTY0X1NZU1JFR19PUDFfU0hJRlQgMTEKKyNkZWZpbmUgS1ZNX1JFR19BUk02NF9TWVNSRUdfQ1JOX01BU0sgMHgwMDAwMDAwMDAwMDAwNzgwCisjZGVmaW5lIEtWTV9SRUdfQVJNNjRfU1lTUkVHX0NSTl9TSElGVCA3CisjZGVmaW5lIEtWTV9SRUdfQVJNNjRfU1lTUkVHX0NSTV9NQVNLIDB4MDAwMDAwMDAwMDAwMDA3OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1JFR19BUk02NF9TWVNSRUdfQ1JNX1NISUZUIDMKKyNkZWZpbmUgS1ZNX1JFR19BUk02NF9TWVNSRUdfT1AyX01BU0sgMHgwMDAwMDAwMDAwMDAwMDA3CisjZGVmaW5lIEtWTV9SRUdfQVJNNjRfU1lTUkVHX09QMl9TSElGVCAwCisjZGVmaW5lIEFSTTY0X1NZU19SRUdfU0hJRlRfTUFTSyh4LG4pICAgKCgoeCkgPDwgS1ZNX1JFR19BUk02NF9TWVNSRUdfICMjIG4gIyMgX1NISUZUKSAmICAgS1ZNX1JFR19BUk02NF9TWVNSRUdfICMjIG4gIyMgX01BU0spCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX0FSTTY0X1NZU19SRUcob3AwLG9wMSxjcm4sY3JtLG9wMikgICAoS1ZNX1JFR19BUk02NCB8IEtWTV9SRUdfQVJNNjRfU1lTUkVHIHwgICBBUk02NF9TWVNfUkVHX1NISUZUX01BU0sob3AwLCBPUDApIHwgICBBUk02NF9TWVNfUkVHX1NISUZUX01BU0sob3AxLCBPUDEpIHwgICBBUk02NF9TWVNfUkVHX1NISUZUX01BU0soY3JuLCBDUk4pIHwgICBBUk02NF9TWVNfUkVHX1NISUZUX01BU0soY3JtLCBDUk0pIHwgICBBUk02NF9TWVNfUkVHX1NISUZUX01BU0sob3AyLCBPUDIpKQorI2RlZmluZSBBUk02NF9TWVNfUkVHKC4uLikgKF9fQVJNNjRfU1lTX1JFRyhfX1ZBX0FSR1NfXykgfCBLVk1fUkVHX1NJWkVfVTY0KQorI2RlZmluZSBLVk1fUkVHX0FSTV9USU1FUl9DVEwgQVJNNjRfU1lTX1JFRygzLCAzLCAxNCwgMywgMSkKKyNkZWZpbmUgS1ZNX1JFR19BUk1fVElNRVJfQ05UIEFSTTY0X1NZU19SRUcoMywgMywgMTQsIDMsIDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUkVHX0FSTV9USU1FUl9DVkFMIEFSTTY0X1NZU19SRUcoMywgMywgMTQsIDAsIDIpCisjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0FERFIgMAorI2RlZmluZSBLVk1fREVWX0FSTV9WR0lDX0dSUF9ESVNUX1JFR1MgMQorI2RlZmluZSBLVk1fREVWX0FSTV9WR0lDX0dSUF9DUFVfUkVHUyAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fREVWX0FSTV9WR0lDX0NQVUlEX1NISUZUIDMyCisjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfQ1BVSURfTUFTSyAoMHhmZlVMTCA8PCBLVk1fREVWX0FSTV9WR0lDX0NQVUlEX1NISUZUKQorI2RlZmluZSBLVk1fREVWX0FSTV9WR0lDX09GRlNFVF9TSElGVCAwCisjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfT0ZGU0VUX01BU0sgKDB4ZmZmZmZmZmZVTEwgPDwgS1ZNX0RFVl9BUk1fVkdJQ19PRkZTRVRfU0hJRlQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fQVJNX0lSUV9UWVBFX1NISUZUIDI0CisjZGVmaW5lIEtWTV9BUk1fSVJRX1RZUEVfTUFTSyAweGZmCisjZGVmaW5lIEtWTV9BUk1fSVJRX1ZDUFVfU0hJRlQgMTYKKyNkZWZpbmUgS1ZNX0FSTV9JUlFfVkNQVV9NQVNLIDB4ZmYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9BUk1fSVJRX05VTV9TSElGVCAwCisjZGVmaW5lIEtWTV9BUk1fSVJRX05VTV9NQVNLIDB4ZmZmZgorI2RlZmluZSBLVk1fQVJNX0lSUV9UWVBFX0NQVSAwCisjZGVmaW5lIEtWTV9BUk1fSVJRX1RZUEVfU1BJIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9BUk1fSVJRX1RZUEVfUFBJIDIKKyNkZWZpbmUgS1ZNX0FSTV9JUlFfQ1BVX0lSUSAwCisjZGVmaW5lIEtWTV9BUk1fSVJRX0NQVV9GSVEgMQorI2RlZmluZSBLVk1fQVJNX0lSUV9HSUNfTUFYIDEyNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1BTQ0lfRk5fQkFTRSAweDk1YzFiYTVlCisjZGVmaW5lIEtWTV9QU0NJX0ZOKG4pIChLVk1fUFNDSV9GTl9CQVNFICsgKG4pKQorI2RlZmluZSBLVk1fUFNDSV9GTl9DUFVfU1VTUEVORCBLVk1fUFNDSV9GTigwKQorI2RlZmluZSBLVk1fUFNDSV9GTl9DUFVfT0ZGIEtWTV9QU0NJX0ZOKDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUFNDSV9GTl9DUFVfT04gS1ZNX1BTQ0lfRk4oMikKKyNkZWZpbmUgS1ZNX1BTQ0lfRk5fTUlHUkFURSBLVk1fUFNDSV9GTigzKQorI2RlZmluZSBLVk1fUFNDSV9SRVRfU1VDQ0VTUyAwCisjZGVmaW5lIEtWTV9QU0NJX1JFVF9OSSAoKHVuc2lnbmVkIGxvbmcpLTEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUFNDSV9SRVRfSU5WQUwgKCh1bnNpZ25lZCBsb25nKS0yKQorI2RlZmluZSBLVk1fUFNDSV9SRVRfREVOSUVEICgodW5zaWduZWQgbG9uZyktMykKKyNlbmRpZgorI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oCmluZGV4IGY3YjI0YTUuLmExNTg3OGYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmgKQEAgLTg2LDk1ICs4NiwxMDUgQEAKICNkZWZpbmUgT19QQVRIIDAxMDAwMDAwMAogI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2lmbmRlZiBfX09fVE1QRklMRQorI2RlZmluZSBfX09fVE1QRklMRSAwMjAwMDAwMDAKKyNlbmRpZgorI2RlZmluZSBPX1RNUEZJTEUgKF9fT19UTVBGSUxFIHwgT19ESVJFQ1RPUlkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBPX1RNUEZJTEVfTUFTSyAoX19PX1RNUEZJTEUgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpCiAjaWZuZGVmIE9fTkRFTEFZCiAjZGVmaW5lIE9fTkRFTEFZIE9fTk9OQkxPQ0sKICNlbmRpZgotI2RlZmluZSBGX0RVUEZEIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZfRFVQRkQgMAogI2RlZmluZSBGX0dFVEZEIDEKICNkZWZpbmUgRl9TRVRGRCAyCiAjZGVmaW5lIEZfR0VURkwgMwotI2RlZmluZSBGX1NFVEZMIDQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZfU0VURkwgNAogI2lmbmRlZiBGX0dFVExLCiAjZGVmaW5lIEZfR0VUTEsgNQogI2RlZmluZSBGX1NFVExLIDYKLSNkZWZpbmUgRl9TRVRMS1cgNwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRl9TRVRMS1cgNwogI2VuZGlmCiAjaWZuZGVmIEZfU0VUT1dOCiAjZGVmaW5lIEZfU0VUT1dOIDgKLSNkZWZpbmUgRl9HRVRPV04gOQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRl9HRVRPV04gOQogI2VuZGlmCiAjaWZuZGVmIEZfU0VUU0lHCiAjZGVmaW5lIEZfU0VUU0lHIDEwCi0jZGVmaW5lIEZfR0VUU0lHIDExCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGX0dFVFNJRyAxMQogI2VuZGlmCisjaWZuZGVmIF9fTFA2NF9fCiAjaWZuZGVmIEZfR0VUTEs2NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRl9HRVRMSzY0IDEyCiAjZGVmaW5lIEZfU0VUTEs2NCAxMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRl9TRVRMS1c2NCAxNAogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCiAjaWZuZGVmIEZfU0VUT1dOX0VYCiAjZGVmaW5lIEZfU0VUT1dOX0VYIDE1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGX0dFVE9XTl9FWCAxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2lmbmRlZiBGX0dFVE9XTkVSX1VJRFMKICNkZWZpbmUgRl9HRVRPV05FUl9VSURTIDE3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGX09XTkVSX1RJRCAwCiAjZGVmaW5lIEZfT1dORVJfUElEIDEKICNkZWZpbmUgRl9PV05FUl9QR1JQIDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZl9vd25lcl9leCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB0eXBlOwogIF9fa2VybmVsX3BpZF90IHBpZDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGRF9DTE9FWEVDIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIEZfUkRMQ0sKICNkZWZpbmUgRl9SRExDSyAwCiAjZGVmaW5lIEZfV1JMQ0sgMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRl9VTkxDSyAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjaWZuZGVmIEZfRVhMQ0sKICNkZWZpbmUgRl9FWExDSyA0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGX1NITENLIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNkZWZpbmUgTE9DS19TSCAxCiAjZGVmaW5lIExPQ0tfRVggMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTE9DS19OQiA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBMT0NLX1VOIDgKICNkZWZpbmUgTE9DS19NQU5EIDMyCiAjZGVmaW5lIExPQ0tfUkVBRCA2NAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTE9DS19XUklURSAxMjgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIExPQ0tfUlcgMTkyCiAjZGVmaW5lIEZfTElOVVhfU1BFQ0lGSUNfQkFTRSAxMDI0CiAjaWZuZGVmIEhBVkVfQVJDSF9TVFJVQ1RfRkxPQ0sKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIF9fQVJDSF9GTE9DS19QQUQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQVJDSF9GTE9DS19QQUQKICNlbmRpZgogc3RydWN0IGZsb2NrIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2hvcnQgbF90eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaG9ydCBsX3doZW5jZTsKICBfX2tlcm5lbF9vZmZfdCBsX3N0YXJ0OwogIF9fa2VybmVsX29mZl90IGxfbGVuOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2tlcm5lbF9waWRfdCBsX3BpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19BUkNIX0ZMT0NLX1BBRAogfTsKICNlbmRpZgorI2lmbmRlZiBfX0xQNjRfXwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgSEFWRV9BUkNIX1NUUlVDVF9GTE9DSzY0CiAjaWZuZGVmIF9fQVJDSF9GTE9DSzY0X1BBRApAQCAtMTkzLDMgKzIwMyw0IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9pcGNidWYuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvaXBjYnVmLmgKaW5kZXggYzFkYTFkZS4uY2M3Mjc0ZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9pcGNidWYuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL2lwY2J1Zi5oCkBAIC0zMSw4ICszMSw4IEBACiAgdW5zaWduZWQgc2hvcnQgc2VxOwogIHVuc2lnbmVkIHNob3J0IF9fcGFkMjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gdW5zaWduZWQgbG9uZyBfX3VudXNlZDE7Ci0gdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CisgX19rZXJuZWxfdWxvbmdfdCBfX3VudXNlZDE7CisgX19rZXJuZWxfdWxvbmdfdCBfX3VudXNlZDI7CiB9OwogI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9tc2didWYuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvbXNnYnVmLmgKaW5kZXggMGM5ZTQ2ZC4uYjI1MDBlZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9tc2didWYuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL21zZ2J1Zi5oCkBAIC0zNywxNCArMzcsMTQgQEAKICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLSB1bnNpZ25lZCBsb25nIG1zZ19jYnl0ZXM7Ci0gdW5zaWduZWQgbG9uZyBtc2dfcW51bTsKLSB1bnNpZ25lZCBsb25nIG1zZ19xYnl0ZXM7CisgX19rZXJuZWxfdWxvbmdfdCBtc2dfY2J5dGVzOworIF9fa2VybmVsX3Vsb25nX3QgbXNnX3FudW07CisgX19rZXJuZWxfdWxvbmdfdCBtc2dfcWJ5dGVzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2tlcm5lbF9waWRfdCBtc2dfbHNwaWQ7CiAgX19rZXJuZWxfcGlkX3QgbXNnX2xycGlkOwotIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OwotIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ1OworIF9fa2VybmVsX3Vsb25nX3QgX191bnVzZWQ0OworIF9fa2VybmVsX3Vsb25nX3QgX191bnVzZWQ1OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvcG9sbC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9wb2xsLmgKaW5kZXggNDVkMmM5NC4uN2ZhYTBiOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9wb2xsLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9wb2xsLmgKQEAgLTQ4LDExICs0OCwxMiBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2RlZmluZSBQT0xMRlJFRSAweDQwMDAKKyNkZWZpbmUgUE9MTF9CVVNZX0xPT1AgMHg4MDAwCiBzdHJ1Y3QgcG9sbGZkIHsKLSBpbnQgZmQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGludCBmZDsKICBzaG9ydCBldmVudHM7CiAgc2hvcnQgcmV2ZW50czsKIH07Ci0jZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvc2htYnVmLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3NobWJ1Zi5oCmluZGV4IDRjZjllZmUuLjY4Yjg1OWQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvc2htYnVmLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9zaG1idWYuaApAQCAtNDEsMjMgKzQxLDIzIEBACiAgX19rZXJuZWxfcGlkX3Qgc2htX2NwaWQ7CiAgX19rZXJuZWxfcGlkX3Qgc2htX2xwaWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIHVuc2lnbmVkIGxvbmcgc2htX25hdHRjaDsKLSB1bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKLSB1bnNpZ25lZCBsb25nIF9fdW51c2VkNTsKKyBfX2tlcm5lbF91bG9uZ190IHNobV9uYXR0Y2g7CisgX19rZXJuZWxfdWxvbmdfdCBfX3VudXNlZDQ7CisgX19rZXJuZWxfdWxvbmdfdCBfX3VudXNlZDU7CiB9OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzaG1pbmZvNjQgewotIHVuc2lnbmVkIGxvbmcgc2htbWF4OwotIHVuc2lnbmVkIGxvbmcgc2htbWluOwotIHVuc2lnbmVkIGxvbmcgc2htbW5pOworIF9fa2VybmVsX3Vsb25nX3Qgc2htbWF4OworIF9fa2VybmVsX3Vsb25nX3Qgc2htbWluOworIF9fa2VybmVsX3Vsb25nX3Qgc2htbW5pOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSB1bnNpZ25lZCBsb25nIHNobXNlZzsKLSB1bnNpZ25lZCBsb25nIHNobWFsbDsKLSB1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsKLSB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKKyBfX2tlcm5lbF91bG9uZ190IHNobXNlZzsKKyBfX2tlcm5lbF91bG9uZ190IHNobWFsbDsKKyBfX2tlcm5lbF91bG9uZ190IF9fdW51c2VkMTsKKyBfX2tlcm5lbF91bG9uZ190IF9fdW51c2VkMjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gdW5zaWduZWQgbG9uZyBfX3VudXNlZDM7Ci0gdW5zaWduZWQgbG9uZyBfX3VudXNlZDQ7CisgX19rZXJuZWxfdWxvbmdfdCBfX3VudXNlZDM7CisgX19rZXJuZWxfdWxvbmdfdCBfX3VudXNlZDQ7CiB9OwogI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9zaWduYWwuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvc2lnbmFsLmgKaW5kZXggYzRjN2UwMC4uZTEwMzI0MCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9zaWduYWwuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3NpZ25hbC5oCkBAIC0xOSwxMCArMTksMTAgQEAKICNpZm5kZWYgX1VBUElfX0FTTV9HRU5FUklDX1NJR05BTF9ICiAjZGVmaW5lIF9VQVBJX19BU01fR0VORVJJQ19TSUdOQUxfSAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jZGVmaW5lIF9OU0lHIDY0CisjZGVmaW5lIF9LRVJORUxfX05TSUcgNjQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9OU0lHX0JQVyBfX0JJVFNfUEVSX0xPTkcKLSNkZWZpbmUgX05TSUdfV09SRFMgKF9OU0lHIC8gX05TSUdfQlBXKQorI2RlZmluZSBfTlNJR19XT1JEUyAoX0tFUk5FTF9fTlNJRyAvIF9OU0lHX0JQVykKICNkZWZpbmUgU0lHSFVQIDEKICNkZWZpbmUgU0lHSU5UIDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC02Niw5ICs2Niw5IEBACiAjZGVmaW5lIFNJR1NZUyAzMQogI2RlZmluZSBTSUdVTlVTRUQgMzEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNJR1JUTUlOIDMyCi0jaWZuZGVmIFNJR1JUTUFYCi0jZGVmaW5lIFNJR1JUTUFYIF9OU0lHCisjZGVmaW5lIF9fU0lHUlRNSU4gMzIKKyNpZm5kZWYgX19TSUdSVE1BWAorI2RlZmluZSBfX1NJR1JUTUFYIF9LRVJORUxfX05TSUcKICNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0FfTk9DTERTVE9QIDB4MDAwMDAwMDEKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oCmluZGV4IDk5N2RiMDAuLjkzZGFmODMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaApAQCAtODYsNCArODYsOCBAQAogI2RlZmluZSBTT19MT0NLX0ZJTFRFUiA0NAogI2RlZmluZSBTT19TRUxFQ1RfRVJSX1FVRVVFIDQ1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTT19CVVNZX1BPTEwgNDYKKyNkZWZpbmUgU09fTUFYX1BBQ0lOR19SQVRFIDQ3CisjZGVmaW5lIFNPX0JQRl9FWFRFTlNJT05TIDQ4CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3N0YXRmcy5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9zdGF0ZnMuaAppbmRleCA4NjBlNTg0Li4xYzhjNTg5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3N0YXRmcy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvc3RhdGZzLmgKQEAgLTIyLDcgKzIyLDcgQEAKICNpZm5kZWYgX19zdGF0ZnNfd29yZAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gNjQKLSNkZWZpbmUgX19zdGF0ZnNfd29yZCBsb25nCisjZGVmaW5lIF9fc3RhdGZzX3dvcmQgX19rZXJuZWxfbG9uZ190CiAjZWxzZQogI2RlZmluZSBfX3N0YXRmc193b3JkIF9fdTMyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmgKaW5kZXggNzgxOTQxYi4uYmVjYzgyZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oCkBAIC0zNjcsMTUwICszNjcsMTUzIEBACiAjZGVmaW5lIF9fTlJfa2NtcCAyNzIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZmluaXRfbW9kdWxlIDI3MworI2RlZmluZSBfX05SX3NjaGVkX3NldGF0dHIgMjc0CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YXR0ciAyNzUKICN1bmRlZiBfX05SX3N5c2NhbGxzCi0jZGVmaW5lIF9fTlJfc3lzY2FsbHMgMjc0Ci0jaWZkZWYgX19BUkNIX1dBTlRfU1lTQ0FMTF9OT19BVAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zeXNjYWxscyAyNzYKKyNpZmRlZiBfX0FSQ0hfV0FOVF9TWVNDQUxMX05PX0FUCiAjZGVmaW5lIF9fTlJfb3BlbiAxMDI0CiAjZGVmaW5lIF9fTlJfbGluayAxMDI1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3VubGluayAxMDI2CiAjZGVmaW5lIF9fTlJfbWtub2QgMTAyNwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jaG1vZCAxMDI4CiAjZGVmaW5lIF9fTlJfY2hvd24gMTAyOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ta2RpciAxMDMwCiAjZGVmaW5lIF9fTlJfcm1kaXIgMTAzMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9sY2hvd24gMTAzMgogI2RlZmluZSBfX05SX2FjY2VzcyAxMDMzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlbmFtZSAxMDM0CiAjZGVmaW5lIF9fTlJfcmVhZGxpbmsgMTAzNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zeW1saW5rIDEwMzYKICNkZWZpbmUgX19OUl91dGltZXMgMTAzNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUjMyNjRfc3RhdCAxMDM4CiAjZGVmaW5lIF9fTlIzMjY0X2xzdGF0IDEwMzkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjdW5kZWYgX19OUl9zeXNjYWxscwogI2RlZmluZSBfX05SX3N5c2NhbGxzIChfX05SMzI2NF9sc3RhdCsxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2lmZGVmIF9fQVJDSF9XQU5UX1NZU0NBTExfTk9fRkxBR1MKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcGlwZSAxMDQwCiAjZGVmaW5lIF9fTlJfZHVwMiAxMDQxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZSAxMDQyCiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0IDEwNDMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZXZlbnRmZCAxMDQ0CiAjZGVmaW5lIF9fTlJfc2lnbmFsZmQgMTA0NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICN1bmRlZiBfX05SX3N5c2NhbGxzCiAjZGVmaW5lIF9fTlJfc3lzY2FsbHMgKF9fTlJfc2lnbmFsZmQrMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNpZiAoX19CSVRTX1BFUl9MT05HID09IDMyIHx8IGRlZmluZWQoX19TWVNDQUxMX0NPTVBBVCkpICYmIGRlZmluZWQoX19BUkNIX1dBTlRfU1lTQ0FMTF9PRkZfVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2VuZGZpbGUgMTA0NgogI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSAxMDQ3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3RydW5jYXRlIDEwNDgKICNkZWZpbmUgX19OUl9zdGF0IDEwNDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbHN0YXQgMTA1MAogI2RlZmluZSBfX05SX2ZzdGF0IDEwNTEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZmNudGwgMTA1MgogI2RlZmluZSBfX05SX2ZhZHZpc2U2NCAxMDUzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0CiAjZGVmaW5lIF9fTlJfbmV3ZnN0YXRhdCAxMDU0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTkVXRlNUQVRBVAogI2RlZmluZSBfX05SX2ZzdGF0ZnMgMTA1NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zdGF0ZnMgMTA1NgogI2RlZmluZSBfX05SX2xzZWVrIDEwNTcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbW1hcCAxMDU4CiAjdW5kZWYgX19OUl9zeXNjYWxscworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zeXNjYWxscyAoX19OUl9tbWFwKzEpCiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZkZWYgX19BUkNIX1dBTlRfU1lTQ0FMTF9ERVBSRUNBVEVECiAjZGVmaW5lIF9fTlJfYWxhcm0gMTA1OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCiAjZGVmaW5lIF9fTlJfZ2V0cGdycCAxMDYwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAogI2RlZmluZSBfX05SX3BhdXNlIDEwNjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQogI2RlZmluZSBfX05SX3RpbWUgMTA2MgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKICNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19USU1FCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3V0aW1lIDEwNjMKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2NyZWF0IDEwNjQKICNkZWZpbmUgX19OUl9nZXRkZW50cyAxMDY1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUREVOVFMKICNkZWZpbmUgX19OUl9mdXRpbWVzYXQgMTA2NgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZWxlY3QgMTA2NwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0VMRUNUCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3BvbGwgMTA2OAogI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQgMTA2OQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl91c3RhdCAxMDcwCiAjZGVmaW5lIF9fTlJfdmZvcmsgMTA3MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9vbGR3YWl0NCAxMDcyCiAjZGVmaW5lIF9fTlJfcmVjdiAxMDczCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NlbmQgMTA3NAogI2RlZmluZSBfX05SX2JkZmx1c2ggMTA3NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl91bW91bnQgMTA3NgogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3VzZWxpYiAxMDc3CiAjZGVmaW5lIF9fTlJfX3N5c2N0bCAxMDc4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZvcmsgMTA3OQogI3VuZGVmIF9fTlJfc3lzY2FsbHMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3lzY2FsbHMgKF9fTlJfZm9yaysxKQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NCAmJiAhZGVmaW5lZChfX1NZU0NBTExfQ09NUEFUKQogI2RlZmluZSBfX05SX2ZjbnRsIF9fTlIzMjY0X2ZjbnRsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3N0YXRmcyBfX05SMzI2NF9zdGF0ZnMKICNkZWZpbmUgX19OUl9mc3RhdGZzIF9fTlIzMjY0X2ZzdGF0ZnMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdHJ1bmNhdGUgX19OUjMyNjRfdHJ1bmNhdGUKICNkZWZpbmUgX19OUl9mdHJ1bmNhdGUgX19OUjMyNjRfZnRydW5jYXRlCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2xzZWVrIF9fTlIzMjY0X2xzZWVrCiAjZGVmaW5lIF9fTlJfc2VuZGZpbGUgX19OUjMyNjRfc2VuZGZpbGUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbmV3ZnN0YXRhdCBfX05SMzI2NF9mc3RhdGF0CiAjZGVmaW5lIF9fTlJfZnN0YXQgX19OUjMyNjRfZnN0YXQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbW1hcCBfX05SMzI2NF9tbWFwCiAjZGVmaW5lIF9fTlJfZmFkdmlzZTY0IF9fTlIzMjY0X2ZhZHZpc2U2NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX05SMzI2NF9zdGF0CiAjZGVmaW5lIF9fTlJfc3RhdCBfX05SMzI2NF9zdGF0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2xzdGF0IF9fTlIzMjY0X2xzdGF0CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZWxzZQogI2RlZmluZSBfX05SX2ZjbnRsNjQgX19OUjMyNjRfZmNudGwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3RhdGZzNjQgX19OUjMyNjRfc3RhdGZzCiAjZGVmaW5lIF9fTlJfZnN0YXRmczY0IF9fTlIzMjY0X2ZzdGF0ZnMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdHJ1bmNhdGU2NCBfX05SMzI2NF90cnVuY2F0ZQogI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0IF9fTlIzMjY0X2Z0cnVuY2F0ZQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9sbHNlZWsgX19OUjMyNjRfbHNlZWsKICNkZWZpbmUgX19OUl9zZW5kZmlsZTY0IF9fTlIzMjY0X3NlbmRmaWxlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZzdGF0YXQ2NCBfX05SMzI2NF9mc3RhdGF0CiAjZGVmaW5lIF9fTlJfZnN0YXQ2NCBfX05SMzI2NF9mc3RhdAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tbWFwMiBfX05SMzI2NF9tbWFwCiAjZGVmaW5lIF9fTlJfZmFkdmlzZTY0XzY0IF9fTlIzMjY0X2ZhZHZpc2U2NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX05SMzI2NF9zdGF0CiAjZGVmaW5lIF9fTlJfc3RhdDY0IF9fTlIzMjY0X3N0YXQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbHN0YXQ2NCBfX05SMzI2NF9sc3RhdAogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9hdXh2ZWMuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2F1eHZlYy5oCmluZGV4IDBjMDQ5MDEuLjJmYTBlNmIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2F1eHZlYy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2F1eHZlYy5oCkBAIC0xNiw2ICsxNiw0IEBACiAgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIF9BU01fQVVYVkVDX0gKLSNkZWZpbmUgX0FTTV9BVVhWRUNfSAotI2VuZGlmCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXV4dmVjLmg+CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9ieXRlb3JkZXIuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2J5dGVvcmRlci5oCmluZGV4IDQ3N2M5M2QuLjk2NWZkOGYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2J5dGVvcmRlci5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2J5dGVvcmRlci5oCkBAIC0xOCwxMyArMTgsNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fQllURU9SREVSX0gKICNkZWZpbmUgX0FTTV9CWVRFT1JERVJfSAotI2lmZGVmIF9fTUlQU0VCX18KLSNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oPgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNlbGlmIGRlZmluZWQoX19NSVBTRUxfXykKICNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oPgotI2Vsc2UKLSNlcnJvciAiTUlQUywgYnV0IG5laXRoZXIgX19NSVBTRUJfXywgbm9yIF9fTUlQU0VMX18/Pz8iCisjZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vZmNudGwuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2ZjbnRsLmgKaW5kZXggNGE5YmY1Yy4uMDJlYTNhYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vZmNudGwuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9mY250bC5oCkBAIC0xNiw0OSArMTYsNTMgQEAKICAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZm5kZWYgX0FTTV9GQ05UTF9ICi0jZGVmaW5lIF9BU01fRkNOVExfSAorI2lmbmRlZiBfVUFQSV9BU01fRkNOVExfSAorI2RlZmluZSBfVUFQSV9BU01fRkNOVExfSAorI2luY2x1ZGUgPGFzbS9zZ2lkZWZzLmg+CiAjZGVmaW5lIE9fQVBQRU5EIDB4MDAwOAotI2RlZmluZSBPX0RTWU5DIDB4MDAxMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgT19EU1lOQyAweDAwMTAKICNkZWZpbmUgT19OT05CTE9DSyAweDAwODAKICNkZWZpbmUgT19DUkVBVCAweDAxMDAKICNkZWZpbmUgT19UUlVOQyAweDAyMDAKLSNkZWZpbmUgT19FWENMIDB4MDQwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgT19FWENMIDB4MDQwMAogI2RlZmluZSBPX05PQ1RUWSAweDA4MDAKICNkZWZpbmUgRkFTWU5DIDB4MTAwMAogI2RlZmluZSBPX0xBUkdFRklMRSAweDIwMDAKLSNkZWZpbmUgX19PX1NZTkMgMHg0MDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX09fU1lOQyAweDQwMDAKICNkZWZpbmUgT19TWU5DIChfX09fU1lOQ3xPX0RTWU5DKQogI2RlZmluZSBPX0RJUkVDVCAweDgwMDAKICNkZWZpbmUgRl9HRVRMSyAxNAotI2RlZmluZSBGX1NFVExLIDYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZfU0VUTEsgNgogI2RlZmluZSBGX1NFVExLVyA3CiAjZGVmaW5lIEZfU0VUT1dOIDI0CiAjZGVmaW5lIEZfR0VUT1dOIDIzCi0jaWZuZGVmIF9fbWlwczY0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2lmbmRlZiBfX21pcHM2NAogI2RlZmluZSBGX0dFVExLNjQgMzMKICNkZWZpbmUgRl9TRVRMSzY0IDM0CiAjZGVmaW5lIEZfU0VUTEtXNjQgMzUKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgorI2lmIF9NSVBTX1NJTSAhPSBfTUlQU19TSU1fQUJJNjQKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogc3RydWN0IGZsb2NrIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2hvcnQgbF90eXBlOwogIHNob3J0IGxfd2hlbmNlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2tlcm5lbF9vZmZfdCBsX3N0YXJ0OwogIF9fa2VybmVsX29mZl90IGxfbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIGxfc3lzaWQ7CiAgX19rZXJuZWxfcGlkX3QgbF9waWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgcGFkWzRdOwogfTsKLSNkZWZpbmUgSEFWRV9BUkNIX1NUUlVDVF9GTE9DSwotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2ZjbnRsLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIQVZFX0FSQ0hfU1RSVUNUX0ZMT0NLCiAjZW5kaWYKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9mY250bC5oPgorI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vaW5zdC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vaW5zdC5oCmluZGV4IDM3OTI4NmMuLmM0NmQwOWIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2luc3QuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9pbnN0LmgKQEAgLTk3LDI5MyArOTcsMjk4IEBACiBlbnVtIGNvcF9vcCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1mY19vcCA9IDB4MDAsIGRtZmNfb3AgPSAweDAxLAotIGNmY19vcCA9IDB4MDIsIG10Y19vcCA9IDB4MDQsCi0gZG10Y19vcCA9IDB4MDUsIGN0Y19vcCA9IDB4MDYsCi0gYmNfb3AgPSAweDA4LCBjb3Bfb3AgPSAweDEwLAorIGNmY19vcCA9IDB4MDIsIG1maGNfb3AgPSAweDAzLAorIG10Y19vcCA9IDB4MDQsIGRtdGNfb3AgPSAweDA1LAorIGN0Y19vcCA9IDB4MDYsIG10aGNfb3AgPSAweDA3LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBiY19vcCA9IDB4MDgsIGNvcF9vcCA9IDB4MTAsCiAgY29wbV9vcCA9IDB4MTgKIH07CiBlbnVtIGJjb3Bfb3AgewotIGJjZl9vcCwgYmN0X29wLCBiY2ZsX29wLCBiY3RsX29wCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGJjZl9vcCwgYmN0X29wLCBiY2ZsX29wLCBiY3RsX29wCiB9OwogZW51bSBjb3AwX2NvaV9mdW5jIHsKICB0bGJyX29wID0gMHgwMSwgdGxid2lfb3AgPSAweDAyLAotIHRsYndyX29wID0gMHgwNiwgdGxicF9vcCA9IDB4MDgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHRsYndyX29wID0gMHgwNiwgdGxicF9vcCA9IDB4MDgsCiAgcmZlX29wID0gMHgxMCwgZXJldF9vcCA9IDB4MTgKIH07CiBlbnVtIGNvcDBfY29tX2Z1bmMgewotIHRsYnIxX29wID0gMHgwMSwgdGxid19vcCA9IDB4MDIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHRsYnIxX29wID0gMHgwMSwgdGxid19vcCA9IDB4MDIsCiAgdGxicDFfb3AgPSAweDA4LCBkY3RyX29wID0gMHgwOSwKICBkY3R3X29wID0gMHgwYQogfTsKLWVudW0gY29wMV9mbXQgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gY29wMV9mbXQgewogIHNfZm10LCBkX2ZtdCwgZV9mbXQsIHFfZm10LAogIHdfZm10LCBsX2ZtdAogfTsKLWVudW0gY29wMV9zZHdfZnVuYyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBjb3AxX3Nkd19mdW5jIHsKICBmYWRkX29wID0gMHgwMCwgZnN1Yl9vcCA9IDB4MDEsCiAgZm11bF9vcCA9IDB4MDIsIGZkaXZfb3AgPSAweDAzLAogIGZzcXJ0X29wID0gMHgwNCwgZmFic19vcCA9IDB4MDUsCi0gZm1vdl9vcCA9IDB4MDYsIGZuZWdfb3AgPSAweDA3LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBmbW92X29wID0gMHgwNiwgZm5lZ19vcCA9IDB4MDcsCiAgZnJvdW5kbF9vcCA9IDB4MDgsIGZ0cnVuY2xfb3AgPSAweDA5LAogIGZjZWlsbF9vcCA9IDB4MGEsIGZmbG9vcmxfb3AgPSAweDBiLAogIGZyb3VuZF9vcCA9IDB4MGMsIGZ0cnVuY19vcCA9IDB4MGQsCi0gZmNlaWxfb3AgPSAweDBlLCBmZmxvb3Jfb3AgPSAweDBmLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBmY2VpbF9vcCA9IDB4MGUsIGZmbG9vcl9vcCA9IDB4MGYsCiAgZm1vdmNfb3AgPSAweDExLCBmbW92el9vcCA9IDB4MTIsCiAgZm1vdm5fb3AgPSAweDEzLCBmcmVjaXBfb3AgPSAweDE1LAogIGZyc3FydF9vcCA9IDB4MTYsIGZjdnRzX29wID0gMHgyMCwKLSBmY3Z0ZF9vcCA9IDB4MjEsIGZjdnRlX29wID0gMHgyMiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgZmN2dGRfb3AgPSAweDIxLCBmY3Z0ZV9vcCA9IDB4MjIsCiAgZmN2dHdfb3AgPSAweDI0LCBmY3Z0bF9vcCA9IDB4MjUsCiAgZmNtcF9vcCA9IDB4MzAKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBjb3AxeF9mdW5jIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbHd4YzFfb3AgPSAweDAwLCBsZHhjMV9vcCA9IDB4MDEsCi0gcGZldGNoX29wID0gMHgwNywgc3d4YzFfb3AgPSAweDA4LAotIHNkeGMxX29wID0gMHgwOSwgbWFkZF9zX29wID0gMHgyMCwKLSBtYWRkX2Rfb3AgPSAweDIxLCBtYWRkX2Vfb3AgPSAweDIyLAorIHN3eGMxX29wID0gMHgwOCwgc2R4YzFfb3AgPSAweDA5LAorIHBmZXRjaF9vcCA9IDB4MGYsIG1hZGRfc19vcCA9IDB4MjAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1hZGRfZF9vcCA9IDB4MjEsIG1hZGRfZV9vcCA9IDB4MjIsCiAgbXN1Yl9zX29wID0gMHgyOCwgbXN1Yl9kX29wID0gMHgyOSwKICBtc3ViX2Vfb3AgPSAweDJhLCBubWFkZF9zX29wID0gMHgzMCwKICBubWFkZF9kX29wID0gMHgzMSwgbm1hZGRfZV9vcCA9IDB4MzIsCi0gbm1zdWJfc19vcCA9IDB4MzgsIG5tc3ViX2Rfb3AgPSAweDM5LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBubXN1Yl9zX29wID0gMHgzOCwgbm1zdWJfZF9vcCA9IDB4MzksCiAgbm1zdWJfZV9vcCA9IDB4M2EKIH07CiBlbnVtIG1hZF9mdW5jIHsKLSBtYWRkX2ZwX29wID0gMHgwOCwgbXN1Yl9mcF9vcCA9IDB4MGEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1hZGRfZnBfb3AgPSAweDA4LCBtc3ViX2ZwX29wID0gMHgwYSwKICBubWFkZF9mcF9vcCA9IDB4MGMsIG5tc3ViX2ZwX29wID0gMHgwZQogfTsKIGVudW0gbHhfZnVuYyB7Ci0gbHd4X29wID0gMHgwMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbHd4X29wID0gMHgwMCwKICBsaHhfb3AgPSAweDA0LAogIGxidXhfb3AgPSAweDA2LAogIGxkeF9vcCA9IDB4MDgsCi0gbHd1eF9vcCA9IDB4MTAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGx3dXhfb3AgPSAweDEwLAogIGxodXhfb3AgPSAweDE0LAogIGxieF9vcCA9IDB4MTYsCiB9OwotZW51bSBtbV9tYWpvcl9vcCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBtbV9tYWpvcl9vcCB7CiAgbW1fcG9vbDMyYV9vcCwgbW1fcG9vbDE2YV9vcCwgbW1fbGJ1MTZfb3AsIG1tX21vdmUxNl9vcCwKICBtbV9hZGRpMzJfb3AsIG1tX2xidTMyX29wLCBtbV9zYjMyX29wLCBtbV9sYjMyX29wLAogIG1tX3Bvb2wzMmJfb3AsIG1tX3Bvb2wxNmJfb3AsIG1tX2xodTE2X29wLCBtbV9hbmRpMTZfb3AsCi0gbW1fYWRkaXUzMl9vcCwgbW1fbGh1MzJfb3AsIG1tX3NoMzJfb3AsIG1tX2xoMzJfb3AsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX2FkZGl1MzJfb3AsIG1tX2xodTMyX29wLCBtbV9zaDMyX29wLCBtbV9saDMyX29wLAogIG1tX3Bvb2wzMmlfb3AsIG1tX3Bvb2wxNmNfb3AsIG1tX2x3c3AxNl9vcCwgbW1fcG9vbDE2ZF9vcCwKICBtbV9vcmkzMl9vcCwgbW1fcG9vbDMyZl9vcCwgbW1fcmVzZXJ2ZWQxX29wLCBtbV9yZXNlcnZlZDJfb3AsCiAgbW1fcG9vbDMyY19vcCwgbW1fbHdncDE2X29wLCBtbV9sdzE2X29wLCBtbV9wb29sMTZlX29wLAotIG1tX3hvcmkzMl9vcCwgbW1famFsczMyX29wLCBtbV9hZGRpdXBjX29wLCBtbV9yZXNlcnZlZDNfb3AsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX3hvcmkzMl9vcCwgbW1famFsczMyX29wLCBtbV9hZGRpdXBjX29wLCBtbV9yZXNlcnZlZDNfb3AsCiAgbW1fcmVzZXJ2ZWQ0X29wLCBtbV9wb29sMTZmX29wLCBtbV9zYjE2X29wLCBtbV9iZXF6MTZfb3AsCiAgbW1fc2x0aTMyX29wLCBtbV9iZXEzMl9vcCwgbW1fc3djMTMyX29wLCBtbV9sd2MxMzJfb3AsCiAgbW1fcmVzZXJ2ZWQ1X29wLCBtbV9yZXNlcnZlZDZfb3AsIG1tX3NoMTZfb3AsIG1tX2JuZXoxNl9vcCwKLSBtbV9zbHRpdTMyX29wLCBtbV9ibmUzMl9vcCwgbW1fc2RjMTMyX29wLCBtbV9sZGMxMzJfb3AsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX3NsdGl1MzJfb3AsIG1tX2JuZTMyX29wLCBtbV9zZGMxMzJfb3AsIG1tX2xkYzEzMl9vcCwKICBtbV9yZXNlcnZlZDdfb3AsIG1tX3Jlc2VydmVkOF9vcCwgbW1fc3dzcDE2X29wLCBtbV9iMTZfb3AsCiAgbW1fYW5kaTMyX29wLCBtbV9qMzJfb3AsIG1tX3NkMzJfb3AsIG1tX2xkMzJfb3AsCiAgbW1fcmVzZXJ2ZWQxMV9vcCwgbW1fcmVzZXJ2ZWQxMl9vcCwgbW1fc3cxNl9vcCwgbW1fbGkxNl9vcCwKLSBtbV9qYWx4MzJfb3AsIG1tX2phbDMyX29wLCBtbV9zdzMyX29wLCBtbV9sdzMyX29wLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV9qYWx4MzJfb3AsIG1tX2phbDMyX29wLCBtbV9zdzMyX29wLCBtbV9sdzMyX29wLAogfTsKIGVudW0gbW1fMzJpX21pbm9yX29wIHsKICBtbV9ibHR6X29wLCBtbV9ibHR6YWxfb3AsIG1tX2JnZXpfb3AsIG1tX2JnZXphbF9vcCwKLSBtbV9ibGV6X29wLCBtbV9ibmV6Y19vcCwgbW1fYmd0el9vcCwgbW1fYmVxemNfb3AsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX2JsZXpfb3AsIG1tX2JuZXpjX29wLCBtbV9iZ3R6X29wLCBtbV9iZXF6Y19vcCwKICBtbV90bHRpX29wLCBtbV90Z2VpX29wLCBtbV90bHRpdV9vcCwgbW1fdGdlaXVfb3AsCiAgbW1fdG5laV9vcCwgbW1fbHVpX29wLCBtbV90ZXFpX29wLCBtbV9yZXNlcnZlZDEzX29wLAogIG1tX3N5bmNpX29wLCBtbV9ibHR6YWxzX29wLCBtbV9yZXNlcnZlZDE0X29wLCBtbV9iZ2V6YWxzX29wLAotIG1tX2JjMmZfb3AsIG1tX2JjMnRfb3AsIG1tX3Jlc2VydmVkMTVfb3AsIG1tX3Jlc2VydmVkMTZfb3AsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX2JjMmZfb3AsIG1tX2JjMnRfb3AsIG1tX3Jlc2VydmVkMTVfb3AsIG1tX3Jlc2VydmVkMTZfb3AsCiAgbW1fcmVzZXJ2ZWQxN19vcCwgbW1fcmVzZXJ2ZWQxOF9vcCwgbW1fYnBvc2dlNjRfb3AsIG1tX2Jwb3NnZTMyX29wLAogIG1tX2JjMWZfb3AsIG1tX2JjMXRfb3AsIG1tX3Jlc2VydmVkMTlfb3AsIG1tX3Jlc2VydmVkMjBfb3AsCiAgbW1fYmMxYW55MmZfb3AsIG1tX2JjMWFueTJ0X29wLCBtbV9iYzFhbnk0Zl9vcCwgbW1fYmMxYW55NHRfb3AsCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBlbnVtIG1tXzMyYV9taW5vcl9vcCB7CiAgbW1fc2xsMzJfb3AgPSAweDAwMCwKICBtbV9pbnNfb3AgPSAweDAwYywKLSBtbV9leHRfb3AgPSAweDAyYywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fZXh0X29wID0gMHgwMmMsCiAgbW1fcG9vbDMyYXhmX29wID0gMHgwM2MsCiAgbW1fc3JsMzJfb3AgPSAweDA0MCwKICBtbV9zcmFfb3AgPSAweDA4MCwKLSBtbV9yb3RyX29wID0gMHgwYzAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX3JvdHJfb3AgPSAweDBjMCwKICBtbV9sd3hzX29wID0gMHgxMTgsCiAgbW1fYWRkdTMyX29wID0gMHgxNTAsCiAgbW1fc3VidTMyX29wID0gMHgxZDAsCi0gbW1fYW5kX29wID0gMHgyNTAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX2FuZF9vcCA9IDB4MjUwLAogIG1tX29yMzJfb3AgPSAweDI5MCwKICBtbV94b3IzMl9vcCA9IDB4MzEwLAogfTsKLWVudW0gbW1fMzJiX2Z1bmMgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbW1fMzJiX2Z1bmMgewogIG1tX2x3YzJfZnVuYyA9IDB4MCwKICBtbV9sd3BfZnVuYyA9IDB4MSwKICBtbV9sZGMyX2Z1bmMgPSAweDIsCi0gbW1fbGRwX2Z1bmMgPSAweDQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX2xkcF9mdW5jID0gMHg0LAogIG1tX2x3bTMyX2Z1bmMgPSAweDUsCiAgbW1fY2FjaGVfZnVuYyA9IDB4NiwKICBtbV9sZG1fZnVuYyA9IDB4NywKLSBtbV9zd2MyX2Z1bmMgPSAweDgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX3N3YzJfZnVuYyA9IDB4OCwKICBtbV9zd3BfZnVuYyA9IDB4OSwKICBtbV9zZGMyX2Z1bmMgPSAweGEsCiAgbW1fc2RwX2Z1bmMgPSAweGMsCi0gbW1fc3dtMzJfZnVuYyA9IDB4ZCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fc3dtMzJfZnVuYyA9IDB4ZCwKICBtbV9zZG1fZnVuYyA9IDB4ZiwKIH07CiBlbnVtIG1tXzMyY19mdW5jIHsKLSBtbV9wcmVmX2Z1bmMgPSAweDIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX3ByZWZfZnVuYyA9IDB4MiwKICBtbV9sbF9mdW5jID0gMHgzLAogIG1tX3N3cl9mdW5jID0gMHg5LAogIG1tX3NjX2Z1bmMgPSAweGIsCi0gbW1fbHd1X2Z1bmMgPSAweGUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX2x3dV9mdW5jID0gMHhlLAogfTsKIGVudW0gbW1fMzJheGZfbWlub3Jfb3AgewogIG1tX21mYzBfb3AgPSAweDAwMywKLSBtbV9tdGMwX29wID0gMHgwMGIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX210YzBfb3AgPSAweDAwYiwKICBtbV90bGJwX29wID0gMHgwMGQsCiAgbW1famFscl9vcCA9IDB4MDNjLAogIG1tX3RsYnJfb3AgPSAweDA0ZCwKLSBtbV9qYWxyaGJfb3AgPSAweDA3YywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1famFscmhiX29wID0gMHgwN2MsCiAgbW1fdGxid2lfb3AgPSAweDA4ZCwKICBtbV90bGJ3cl9vcCA9IDB4MGNkLAogIG1tX2phbHJzX29wID0gMHgxM2MsCi0gbW1famFscnNoYl9vcCA9IDB4MTdjLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV9qYWxyc2hiX29wID0gMHgxN2MsCiAgbW1fc3lzY2FsbF9vcCA9IDB4MjJkLAogIG1tX2VyZXRfb3AgPSAweDNjZCwKIH07Ci1lbnVtIG1tXzMyZl9taW5vcl9vcCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBtbV8zMmZfbWlub3Jfb3AgewogIG1tXzMyZl8wMF9vcCA9IDB4MDAsCiAgbW1fMzJmXzAxX29wID0gMHgwMSwKICBtbV8zMmZfMDJfb3AgPSAweDAyLAotIG1tXzMyZl8xMF9vcCA9IDB4MDgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tXzMyZl8xMF9vcCA9IDB4MDgsCiAgbW1fMzJmXzExX29wID0gMHgwOSwKICBtbV8zMmZfMTJfb3AgPSAweDBhLAogIG1tXzMyZl8yMF9vcCA9IDB4MTAsCi0gbW1fMzJmXzMwX29wID0gMHgxOCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fMzJmXzMwX29wID0gMHgxOCwKICBtbV8zMmZfNDBfb3AgPSAweDIwLAogIG1tXzMyZl80MV9vcCA9IDB4MjEsCiAgbW1fMzJmXzQyX29wID0gMHgyMiwKLSBtbV8zMmZfNTBfb3AgPSAweDI4LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV8zMmZfNTBfb3AgPSAweDI4LAogIG1tXzMyZl81MV9vcCA9IDB4MjksCiAgbW1fMzJmXzUyX29wID0gMHgyYSwKICBtbV8zMmZfNjBfb3AgPSAweDMwLAotIG1tXzMyZl83MF9vcCA9IDB4MzgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tXzMyZl83MF9vcCA9IDB4MzgsCiAgbW1fMzJmXzczX29wID0gMHgzYiwKICBtbV8zMmZfNzRfb3AgPSAweDNjLAogfTsKLWVudW0gbW1fMzJmXzEwX21pbm9yX29wIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIG1tXzMyZl8xMF9taW5vcl9vcCB7CiAgbW1fbHd4YzFfb3AgPSAweDEsCiAgbW1fc3d4YzFfb3AsCiAgbW1fbGR4YzFfb3AsCi0gbW1fc2R4YzFfb3AsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX3NkeGMxX29wLAogIG1tX2x1eGMxX29wLAogIG1tX3N1eGMxX29wLAogfTsKLWVudW0gbW1fMzJmX2Z1bmMgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbW1fMzJmX2Z1bmMgewogIG1tX2x3eGMxX2Z1bmMgPSAweDA0OCwKICBtbV9zd3hjMV9mdW5jID0gMHgwODgsCiAgbW1fbGR4YzFfZnVuYyA9IDB4MGM4LAotIG1tX3NkeGMxX2Z1bmMgPSAweDEwOCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fc2R4YzFfZnVuYyA9IDB4MTA4LAogfTsKIGVudW0gbW1fMzJmXzQwX21pbm9yX29wIHsKICBtbV9mbW92Zl9vcCwKLSBtbV9mbW92dF9vcCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fZm1vdnRfb3AsCiB9OwogZW51bSBtbV8zMmZfNjBfbWlub3Jfb3AgewogIG1tX2ZhZGRfb3AsCi0gbW1fZnN1Yl9vcCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fZnN1Yl9vcCwKICBtbV9mbXVsX29wLAogIG1tX2ZkaXZfb3AsCiB9OwotZW51bSBtbV8zMmZfNzBfbWlub3Jfb3AgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbW1fMzJmXzcwX21pbm9yX29wIHsKICBtbV9mbW92bl9vcCwKICBtbV9mbW92el9vcCwKIH07Ci1lbnVtIG1tXzMyZl83M19taW5vcl9vcCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBtbV8zMmZfNzNfbWlub3Jfb3AgewogIG1tX2Ztb3YwX29wID0gMHgwMSwKICBtbV9mY3Z0bF9vcCA9IDB4MDQsCiAgbW1fbW92ZjBfb3AgPSAweDA1LAotIG1tX2Zyc3FydF9vcCA9IDB4MDgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX2Zyc3FydF9vcCA9IDB4MDgsCiAgbW1fZmZsb29ybF9vcCA9IDB4MGMsCiAgbW1fZmFiczBfb3AgPSAweDBkLAogIG1tX2ZjdnR3X29wID0gMHgyNCwKLSBtbV9tb3Z0MF9vcCA9IDB4MjUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX21vdnQwX29wID0gMHgyNSwKICBtbV9mc3FydF9vcCA9IDB4MjgsCiAgbW1fZmZsb29yd19vcCA9IDB4MmMsCiAgbW1fZm5lZzBfb3AgPSAweDJkLAotIG1tX2NmYzFfb3AgPSAweDQwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV9jZmMxX29wID0gMHg0MCwKICBtbV9mcmVjaXBfb3AgPSAweDQ4LAogIG1tX2ZjZWlsbF9vcCA9IDB4NGMsCiAgbW1fZmN2dGQwX29wID0gMHg0ZCwKLSBtbV9jdGMxX29wID0gMHg2MCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fY3RjMV9vcCA9IDB4NjAsCiAgbW1fZmNlaWx3X29wID0gMHg2YywKICBtbV9mY3Z0czBfb3AgPSAweDZkLAogIG1tX21mYzFfb3AgPSAweDgwLAotIG1tX2Ztb3YxX29wID0gMHg4MSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fZm1vdjFfb3AgPSAweDgxLAogIG1tX21vdmYxX29wID0gMHg4NSwKICBtbV9mdHJ1bmNsX29wID0gMHg4YywKICBtbV9mYWJzMV9vcCA9IDB4OGQsCi0gbW1fbXRjMV9vcCA9IDB4YTAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX210YzFfb3AgPSAweGEwLAogIG1tX21vdnQxX29wID0gMHhhNSwKICBtbV9mdHJ1bmN3X29wID0gMHhhYywKICBtbV9mbmVnMV9vcCA9IDB4YWQsCi0gbW1fZnJvdW5kbF9vcCA9IDB4Y2MsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX21maGMxX29wID0gMHhjMCwKKyBtbV9mcm91bmRsX29wID0gMHhjYywKICBtbV9mY3Z0ZDFfb3AgPSAweGNkLAorIG1tX210aGMxX29wID0gMHhlMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1fZnJvdW5kd19vcCA9IDB4ZWMsCiAgbW1fZmN2dHMxX29wID0gMHhlZCwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBtbV8xNmNfbWlub3Jfb3AgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV9sd20xNl9vcCA9IDB4MDQsCiAgbW1fc3dtMTZfb3AgPSAweDA1LAotIG1tX2pyMTZfb3AgPSAweDE4LAorIG1tX2pyMTZfb3AgPSAweDBjLAorIG1tX2pyY19vcCA9IDB4MGQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIG1tX2pyY19vcCA9IDB4MWEsCi0gbW1famFscjE2X29wID0gMHgxYywKLSBtbV9qYWxyczE2X29wID0gMHgxZSwKKyBtbV9qYWxyMTZfb3AgPSAweDBlLAorIG1tX2phbHJzMTZfb3AgPSAweDBmLAorIG1tX2pyYWRkaXVzcF9vcCA9IDB4MTgsCiB9OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbW1fMTZkX21pbm9yX29wIHsKQEAgLTQzNCw0NTMgKzQzOSw0NDYgQEAKICBNSVBTMTZlX3N3cmFzcF9mdW5jID0gMDIsCiB9OwogI2RlZmluZSBNTV9OT1AxNiAweDBjMDAKLSNpZmRlZiBfX01JUFNFQl9fCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBCSVRGSUVMRF9GSUVMRChmaWVsZCwgbW9yZSkgICBmaWVsZDsgICBtb3JlCi0jZWxpZiBkZWZpbmVkKF9fTUlQU0VMX18pCiAjZGVmaW5lIEJJVEZJRUxEX0ZJRUxEKGZpZWxkLCBtb3JlKSAgIG1vcmUgICBmaWVsZDsKLSNlbHNlCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2Vycm9yICJNSVBTIGJ1dCBuZWl0aGVyIF9fTUlQU0VMX18gbm9yIF9fTUlQU0VCX18/IgotI2VuZGlmCiBzdHJ1Y3Qgal9mb3JtYXQgewogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgdGFyZ2V0IDogMjYsCiAgOykpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBpX2Zvcm1hdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBycyA6IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBydCA6IDUsCiAgQklURklFTERfRklFTEQoc2lnbmVkIGludCBzaW1tZWRpYXRlIDogMTYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIDspKSkpCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB1X2Zvcm1hdCB7CiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBycyA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHVpbW1lZGlhdGUgOiAxNiwKICA7KSkpKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgY19mb3JtYXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnMgOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgY19vcCA6IDMsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGNhY2hlIDogMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHNpbW1lZGlhdGUgOiAxNiwKICA7KSkpKSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHJfZm9ybWF0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJzIDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcmQgOiA1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcmUgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgOykpKSkpKQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcF9mb3JtYXQgewogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnMgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBydCA6IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCByZCA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJlIDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAogIDspKSkpKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGZfZm9ybWF0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IDogMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZtdCA6IDQsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJkIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcmUgOiA1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCiAgOykpKSkpKSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IG1hX2Zvcm1hdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmciA6IDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdCA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZzIDogNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZkIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmbXQgOiAyLAogIDspKSkpKSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBiX2Zvcm1hdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBjb2RlIDogMjAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKICA7KSkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBwc19mb3JtYXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnMgOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnQgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmcyA6IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmZCA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICA7KSkpKSkpCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2X2Zvcm1hdCB7CiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBzZWwgOiA0LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmbXQgOiAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgdnQgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCB2cyA6IDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCB2ZCA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICA7KSkpKSkpKQogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZmJfZm9ybWF0IHsKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGJjIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgY2MgOiAzLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZmxhZyA6IDIsCiAgQklURklFTERfRklFTEQoc2lnbmVkIGludCBzaW1tZWRpYXRlIDogMTYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIDspKSkpKQogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZnAwX2Zvcm1hdCB7CiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmbXQgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdCA6IDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmcyA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZkIDogNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAogIDspKSkpKSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IG1tX2ZwMF9mb3JtYXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnQgOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnMgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmZCA6IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmbXQgOiAzLAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcCA6IDIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKICA7KSkpKSkpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZnAxX2Zvcm1hdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcCA6IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBydCA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZzIDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZkIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIDspKSkpKSkKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG1tX2ZwMV9mb3JtYXQgewogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmcyA6IDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmbXQgOiAyLAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcCA6IDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKICA7KSkpKSkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBtbV9mcDJfZm9ybWF0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZkIDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZzIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgY2MgOiAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgemVybyA6IDIsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZtdCA6IDIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcCA6IDMsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICA7KSkpKSkpKSkKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG1tX2ZwM19mb3JtYXQgewogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmcyA6IDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmbXQgOiAzLAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcCA6IDcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKICA7KSkpKSkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBtbV9mcDRfZm9ybWF0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZzIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgY2MgOiAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZm10IDogMywKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgY29uZCA6IDQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKICA7KSkpKSkpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgbW1fZnA1X2Zvcm1hdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBpbmRleCA6IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBiYXNlIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZmQgOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3AgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgOykpKSkpKQogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZnA2X2Zvcm1hdCB7CiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmciA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ0IDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZzIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZmQgOiA1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCiAgOykpKSkpKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgbW1fZnA2X2Zvcm1hdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdCA6IDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmcyA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZkIDogNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZyIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIDspKSkpKSkKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG1tX2lfZm9ybWF0IHsKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnMgOiA1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiAxNiwKICA7KSkpKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgbW1fbV9mb3JtYXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcmQgOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgYmFzZSA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiAxMiwKICA7KSkpKSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IG1tX3hfZm9ybWF0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGluZGV4IDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGJhc2UgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCByZCA6IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogMTEsCiAgOykpKSkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBtbV9iMF9mb3JtYXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKICBCSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiAxMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IDogMTYsCiAgOykpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgbW1fYjFfZm9ybWF0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJzIDogMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQoc2lnbmVkIGludCBzaW1tZWRpYXRlIDogNywKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgOiAxNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgOykpKSkKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG1tMTZfbV9mb3JtYXQgewogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDQsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJsaXN0IDogMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGltbSA6IDQsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IDogMTYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIDspKSkpKQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbW0xNl9yYl9mb3JtYXQgewogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiAzLAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBiYXNlIDogMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQoc2lnbmVkIGludCBzaW1tZWRpYXRlIDogNCwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgOiAxNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgOykpKSkpCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtbTE2X3IzX2Zvcm1hdCB7CiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBydCA6IDMsCiAgQklURklFTERfRklFTEQoc2lnbmVkIGludCBzaW1tZWRpYXRlIDogNywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IDogMTYsCiAgOykpKSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IG1tMTZfcjVfZm9ybWF0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQoc2lnbmVkIGludCBzaW1tZWRpYXRlIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgOiAxNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgOykpKSkKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG0xNmVfcnIgewogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnggOiAzLAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBuZCA6IDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBsIDogMSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcmEgOiAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDUsCiAgOykpKSkpKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgbTE2ZV9qYWwgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgeCA6IDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBpbW0yMF8xNiA6IDUsCiAgQklURklFTERfRklFTEQoc2lnbmVkIGludCBpbW0yNV8yMSA6IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIDspKSkpCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtMTZlX2k2NCB7CiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogMywKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgaW1tIDogOCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgOykpKQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbTE2ZV9yaTY0IHsKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiAzLAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCByeSA6IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBpbW0gOiA1LAogIDspKSkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBtMTZlX3JpIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ4IDogMywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGltbSA6IDgsCiAgOykpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgbTE2ZV9ycmkgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnggOiAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnkgOiAzLAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBpbW0gOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICA7KSkpKQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbTE2ZV9pOCB7CiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogMywKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgaW1tIDogOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgOykpKQogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB1bmlvbiBtaXBzX2luc3RydWN0aW9uIHsKICB1bnNpZ25lZCBpbnQgd29yZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgaGFsZndvcmRbMl07CiAgdW5zaWduZWQgY2hhciBieXRlWzRdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgal9mb3JtYXQgal9mb3JtYXQ7CiAgc3RydWN0IGlfZm9ybWF0IGlfZm9ybWF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdV9mb3JtYXQgdV9mb3JtYXQ7CiAgc3RydWN0IGNfZm9ybWF0IGNfZm9ybWF0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgcl9mb3JtYXQgcl9mb3JtYXQ7CiAgc3RydWN0IHBfZm9ybWF0IHBfZm9ybWF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZl9mb3JtYXQgZl9mb3JtYXQ7CiAgc3RydWN0IG1hX2Zvcm1hdCBtYV9mb3JtYXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBiX2Zvcm1hdCBiX2Zvcm1hdDsKICBzdHJ1Y3QgcHNfZm9ybWF0IHBzX2Zvcm1hdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHZfZm9ybWF0IHZfZm9ybWF0OwogIHN0cnVjdCBmYl9mb3JtYXQgZmJfZm9ybWF0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZnAwX2Zvcm1hdCBmcDBfZm9ybWF0OwogIHN0cnVjdCBtbV9mcDBfZm9ybWF0IG1tX2ZwMF9mb3JtYXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBmcDFfZm9ybWF0IGZwMV9mb3JtYXQ7CiAgc3RydWN0IG1tX2ZwMV9mb3JtYXQgbW1fZnAxX2Zvcm1hdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG1tX2ZwMl9mb3JtYXQgbW1fZnAyX2Zvcm1hdDsKICBzdHJ1Y3QgbW1fZnAzX2Zvcm1hdCBtbV9mcDNfZm9ybWF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbW1fZnA0X2Zvcm1hdCBtbV9mcDRfZm9ybWF0OwogIHN0cnVjdCBtbV9mcDVfZm9ybWF0IG1tX2ZwNV9mb3JtYXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBmcDZfZm9ybWF0IGZwNl9mb3JtYXQ7CiAgc3RydWN0IG1tX2ZwNl9mb3JtYXQgbW1fZnA2X2Zvcm1hdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG1tX2lfZm9ybWF0IG1tX2lfZm9ybWF0OwogIHN0cnVjdCBtbV9tX2Zvcm1hdCBtbV9tX2Zvcm1hdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG1tX3hfZm9ybWF0IG1tX3hfZm9ybWF0OwogIHN0cnVjdCBtbV9iMF9mb3JtYXQgbW1fYjBfZm9ybWF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbW1fYjFfZm9ybWF0IG1tX2IxX2Zvcm1hdDsKICBzdHJ1Y3QgbW0xNl9tX2Zvcm1hdCBtbTE2X21fZm9ybWF0IDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG1tMTZfcmJfZm9ybWF0IG1tMTZfcmJfZm9ybWF0OwogIHN0cnVjdCBtbTE2X3IzX2Zvcm1hdCBtbTE2X3IzX2Zvcm1hdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG1tMTZfcjVfZm9ybWF0IG1tMTZfcjVfZm9ybWF0OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB1bmlvbiBtaXBzMTZlX2luc3RydWN0aW9uIHsKICB1bnNpZ25lZCBpbnQgZnVsbCA6IDE2OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbTE2ZV9yciBycjsKICBzdHJ1Y3QgbTE2ZV9qYWwgamFsOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbTE2ZV9pNjQgaTY0OwogIHN0cnVjdCBtMTZlX3JpNjQgcmk2NDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG0xNmVfcmkgcmk7CiAgc3RydWN0IG0xNmVfcnJpIHJyaTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG0xNmVfaTggaTg7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vbXNnYnVmLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9tc2didWYuaAppbmRleCBkODFkYTczLi5lZmFlMTQ4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9tc2didWYuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9tc2didWYuaApAQCAtMjEsMjEgKzIxLDI5IEBACiBzdHJ1Y3QgbXNxaWQ2NF9kcyB7CiAgc3RydWN0IGlwYzY0X3Blcm0gbXNnX3Blcm07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOwogIF9fa2VybmVsX3RpbWVfdCBtc2dfc3RpbWU7Ci0gdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7Ci0gX19rZXJuZWxfdGltZV90IG1zZ19ydGltZTsKKyNpZm5kZWYgX19taXBzNjQKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsKKyNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKKyBfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOworI2lmbmRlZiBfX21pcHM2NAorIHVuc2lnbmVkIGxvbmcgX191bnVzZWQyOworI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CisjaWZuZGVmIF9fbWlwczY0CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDM7CisjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBtc2dfY2J5dGVzOwogIHVuc2lnbmVkIGxvbmcgbXNnX3FudW07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgbXNnX3FieXRlczsKICBfX2tlcm5lbF9waWRfdCBtc2dfbHNwaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX3BpZF90IG1zZ19scnBpZDsKICB1bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDU7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vcmVzb3VyY2UuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3Jlc291cmNlLmgKaW5kZXggODc2MTY5Ny4uNzI4YTUxOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vcmVzb3VyY2UuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9yZXNvdXJjZS5oCkBAIC0yNCw3ICsyNCwxMCBAQAogI2RlZmluZSBSTElNSVRfUlNTIDcKICNkZWZpbmUgUkxJTUlUX05QUk9DIDgKICNkZWZpbmUgUkxJTUlUX01FTUxPQ0sgOQotI2RlZmluZSBSTElNX0lORklOSVRZIDB4N2ZmZmZmZmZVTAorI2lmbmRlZiBfX21pcHM2NAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUkxJTV9JTkZJTklUWSAweDdmZmZmZmZmVUwKKyNlbmRpZgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Jlc291cmNlLmg+CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9zaWdpbmZvLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9zaWdpbmZvLmgKaW5kZXggNGEwODVmOC4uNTk5Yzg3NSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vc2lnaW5mby5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3NpZ2luZm8uaApAQCAtMjQsNjcgKzI0LDgyIEBACiAjZGVmaW5lIEhBVkVfQVJDSF9TSUdJTkZPX1QKICNkZWZpbmUgSEFWRV9BUkNIX0NPUFlfU0lHSU5GTwogc3RydWN0IHNpZ2luZm87Ci0jZGVmaW5lIF9fQVJDSF9TSV9QUkVBTUJMRV9TSVpFICgzICogc2l6ZW9mKGludCkpCisjaWYgX01JUFNfU1pMT05HID09IDMyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX0FSQ0hfU0lfUFJFQU1CTEVfU0laRSAoMyAqIHNpemVvZihpbnQpKQorI2VsaWYgX01JUFNfU1pMT05HID09IDY0CisjZGVmaW5lIF9fQVJDSF9TSV9QUkVBTUJMRV9TSVpFICg0ICogc2l6ZW9mKGludCkpCisjZWxzZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlcnJvciBfTUlQU19TWkxPTkcgbmVpdGhlciAzMiBub3IgNjQKKyNlbmRpZgorI2RlZmluZSBfX0FSQ0hfU0lHU1lTCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IHNpZ2luZm8gewogIGludCBzaV9zaWdubzsKICBpbnQgc2lfY29kZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHNpX2Vycm5vOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgX19wYWQwW1NJX01BWF9TSVpFIC8gc2l6ZW9mKGludCkgLSBTSV9QQURfU0laRSAtIDNdOwogIHVuaW9uIHsKICBpbnQgX3BhZFtTSV9QQURfU0laRV07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHBpZF90IF9waWQ7CiAgX19BUkNIX1NJX1VJRF9UIF91aWQ7CiAgfSBfa2lsbDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdGltZXJfdCBfdGlkOwogIGludCBfb3ZlcnJ1bjsKICBjaGFyIF9wYWRbc2l6ZW9mKCBfX0FSQ0hfU0lfVUlEX1QpIC0gc2l6ZW9mKGludCldOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaWd2YWxfdCBfc2lndmFsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgX3N5c19wcml2YXRlOwogIH0gX3RpbWVyOwogIHN0cnVjdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHBpZF90IF9waWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQVJDSF9TSV9VSURfVCBfdWlkOwogIHNpZ3ZhbF90IF9zaWd2YWw7CiAgfSBfcnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHBpZF90IF9waWQ7CiAgX19BUkNIX1NJX1VJRF9UIF91aWQ7CiAgaW50IF9zdGF0dXM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNsb2NrX3QgX3V0aW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjbG9ja190IF9zdGltZTsKICB9IF9zaWdjaGxkOwogIHN0cnVjdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHBpZF90IF9waWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNsb2NrX3QgX3V0aW1lOwogIGludCBfc3RhdHVzOwogIGNsb2NrX3QgX3N0aW1lOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IF9pcml4X3NpZ2NobGQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB7CiAgdm9pZCBfX3VzZXIgKl9hZGRyOwogI2lmZGVmIF9fQVJDSF9TSV9UUkFQTk8KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IF90cmFwbm87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAgc2hvcnQgX2FkZHJfbHNiOwogIH0gX3NpZ2ZhdWx0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0FSQ0hfU0lfQkFORF9UIF9iYW5kOwogIGludCBfZmQ7CiAgfSBfc2lncG9sbDsKKyBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB2b2lkIF9fdXNlciAqX2NhbGxfYWRkcjsKKyBpbnQgX3N5c2NhbGw7CisgdW5zaWduZWQgaW50IF9hcmNoOworIH0gX3NpZ3N5czsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBfc2lmaWVsZHM7CiB9IHNpZ2luZm9fdDsKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3NpZ25hbC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vc2lnbmFsLmgKaW5kZXggNzcxZTMxYS4uYjc3NGE2NiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vc2lnbmFsLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vc2lnbmFsLmgKQEAgLTE5LDEwICsxOSwxMCBAQAogI2lmbmRlZiBfVUFQSV9BU01fU0lHTkFMX0gKICNkZWZpbmUgX1VBUElfQVNNX1NJR05BTF9ICiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNkZWZpbmUgX05TSUcgMTI4CisjZGVmaW5lIF9LRVJORUxfX05TSUcgMTI4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfTlNJR19CUFcgKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDgpCi0jZGVmaW5lIF9OU0lHX1dPUkRTIChfTlNJRyAvIF9OU0lHX0JQVykKKyNkZWZpbmUgX05TSUdfV09SRFMgKF9LRVJORUxfX05TSUcgLyBfTlNJR19CUFcpCiB0eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgbG9uZyBzaWdbX05TSUdfV09SRFNdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTcxLDggKzcxLDggQEAKICNkZWZpbmUgU0lHWENQVSAzMAogI2RlZmluZSBTSUdYRlNaIDMxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSUdSVE1JTiAzMgotI2RlZmluZSBTSUdSVE1BWCBfTlNJRworI2RlZmluZSBfX1NJR1JUTUlOIDMyCisjZGVmaW5lIF9fU0lHUlRNQVggX0tFUk5FTF9fTlNJRwogI2RlZmluZSBTQV9PTlNUQUNLIDB4MDgwMDAwMDAKICNkZWZpbmUgU0FfUkVTRVRIQU5EIDB4ODAwMDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9zb2NrZXQuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3NvY2tldC5oCmluZGV4IGU2NWYyMjYuLjM4ZTRlNjMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3NvY2tldC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3NvY2tldC5oCkBAIC04NCw1ICs4NCw4IEBACiAjZGVmaW5lIFNPX05PRkNTIDQzCiAjZGVmaW5lIFNPX0xPQ0tfRklMVEVSIDQ0CiAjZGVmaW5lIFNPX1NFTEVDVF9FUlJfUVVFVUUgNDUKLSNlbmRpZgorI2RlZmluZSBTT19CVVNZX1BPTEwgNDYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNPX01BWF9QQUNJTkdfUkFURSA0NworI2RlZmluZSBTT19CUEZfRVhURU5TSU9OUyA0OAorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9zd2FiLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9zd2FiLmgKaW5kZXggZDE4ODMyNC4uNDE2NjBkMCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vc3dhYi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3N3YWIuaApAQCAtMjIsNCArMjIsMTMgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXworI2lmIGRlZmluZWQoX19taXBzX2lzYV9yZXYpICYmIF9fbWlwc19pc2FfcmV2ID49IDIKKyNkZWZpbmUgX19hcmNoX3N3YWIxNiBfX2FyY2hfc3dhYjE2CisjZGVmaW5lIF9fYXJjaF9zd2FiMzIgX19hcmNoX3N3YWIzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNpZmRlZiBfX21pcHM2NAorI2RlZmluZSBfX2FyY2hfc3dhYjY0IF9fYXJjaF9zd2FiNjQKKyNlbmRpZgorI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS91Y29udGV4dC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTRkNjdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vdWNvbnRleHQuaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdWNvbnRleHQuaD4KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3VuaXN0ZC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vdW5pc3RkLmgKaW5kZXggMGNkYjYzNy4uMzdjM2RhMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vdW5pc3RkLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vdW5pc3RkLmgKQEAgLTQ1Nyw0MDMgKzQ1Nyw0MDggQEAKICNkZWZpbmUgX19OUl9rY21wIChfX05SX0xpbnV4ICsgMzQ3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9maW5pdF9tb2R1bGUgKF9fTlJfTGludXggKyAzNDgpCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMgMzQ4CisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YXR0ciAoX19OUl9MaW51eCArIDM0OSkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRhdHRyIChfX05SX0xpbnV4ICsgMzUwKQorI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzIDM1MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2RlZmluZSBfX05SX08zMl9MaW51eCA0MDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBfX05SX08zMl9MaW51eF9zeXNjYWxscyAzNDgKKyNkZWZpbmUgX19OUl9PMzJfTGludXhfc3lzY2FsbHMgMzUwCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9MaW51eCA1MDAwCiAjZGVmaW5lIF9fTlJfcmVhZCAoX19OUl9MaW51eCArIDApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3dyaXRlIChfX05SX0xpbnV4ICsgMSkKICNkZWZpbmUgX19OUl9vcGVuIChfX05SX0xpbnV4ICsgMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY2xvc2UgKF9fTlJfTGludXggKyAzKQogI2RlZmluZSBfX05SX3N0YXQgKF9fTlJfTGludXggKyA0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mc3RhdCAoX19OUl9MaW51eCArIDUpCiAjZGVmaW5lIF9fTlJfbHN0YXQgKF9fTlJfTGludXggKyA2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9wb2xsIChfX05SX0xpbnV4ICsgNykKICNkZWZpbmUgX19OUl9sc2VlayAoX19OUl9MaW51eCArIDgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21tYXAgKF9fTlJfTGludXggKyA5KQogI2RlZmluZSBfX05SX21wcm90ZWN0IChfX05SX0xpbnV4ICsgMTApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX211bm1hcCAoX19OUl9MaW51eCArIDExKQogI2RlZmluZSBfX05SX2JyayAoX19OUl9MaW51eCArIDEyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ydF9zaWdhY3Rpb24gKF9fTlJfTGludXggKyAxMykKICNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzayAoX19OUl9MaW51eCArIDE0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pb2N0bCAoX19OUl9MaW51eCArIDE1KQogI2RlZmluZSBfX05SX3ByZWFkNjQgKF9fTlJfTGludXggKyAxNikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcHdyaXRlNjQgKF9fTlJfTGludXggKyAxNykKICNkZWZpbmUgX19OUl9yZWFkdiAoX19OUl9MaW51eCArIDE4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl93cml0ZXYgKF9fTlJfTGludXggKyAxOSkKICNkZWZpbmUgX19OUl9hY2Nlc3MgKF9fTlJfTGludXggKyAyMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcGlwZSAoX19OUl9MaW51eCArIDIxKQogI2RlZmluZSBfX05SX19uZXdzZWxlY3QgKF9fTlJfTGludXggKyAyMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQgKF9fTlJfTGludXggKyAyMykKICNkZWZpbmUgX19OUl9tcmVtYXAgKF9fTlJfTGludXggKyAyNCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbXN5bmMgKF9fTlJfTGludXggKyAyNSkKICNkZWZpbmUgX19OUl9taW5jb3JlIChfX05SX0xpbnV4ICsgMjYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21hZHZpc2UgKF9fTlJfTGludXggKyAyNykKICNkZWZpbmUgX19OUl9zaG1nZXQgKF9fTlJfTGludXggKyAyOCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2htYXQgKF9fTlJfTGludXggKyAyOSkKICNkZWZpbmUgX19OUl9zaG1jdGwgKF9fTlJfTGludXggKyAzMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZHVwIChfX05SX0xpbnV4ICsgMzEpCiAjZGVmaW5lIF9fTlJfZHVwMiAoX19OUl9MaW51eCArIDMyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9wYXVzZSAoX19OUl9MaW51eCArIDMzKQogI2RlZmluZSBfX05SX25hbm9zbGVlcCAoX19OUl9MaW51eCArIDM0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRpdGltZXIgKF9fTlJfTGludXggKyAzNSkKICNkZWZpbmUgX19OUl9zZXRpdGltZXIgKF9fTlJfTGludXggKyAzNikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfYWxhcm0gKF9fTlJfTGludXggKyAzNykKICNkZWZpbmUgX19OUl9nZXRwaWQgKF9fTlJfTGludXggKyAzOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2VuZGZpbGUgKF9fTlJfTGludXggKyAzOSkKICNkZWZpbmUgX19OUl9zb2NrZXQgKF9fTlJfTGludXggKyA0MCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY29ubmVjdCAoX19OUl9MaW51eCArIDQxKQogI2RlZmluZSBfX05SX2FjY2VwdCAoX19OUl9MaW51eCArIDQyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZW5kdG8gKF9fTlJfTGludXggKyA0MykKICNkZWZpbmUgX19OUl9yZWN2ZnJvbSAoX19OUl9MaW51eCArIDQ0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZW5kbXNnIChfX05SX0xpbnV4ICsgNDUpCiAjZGVmaW5lIF9fTlJfcmVjdm1zZyAoX19OUl9MaW51eCArIDQ2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zaHV0ZG93biAoX19OUl9MaW51eCArIDQ3KQogI2RlZmluZSBfX05SX2JpbmQgKF9fTlJfTGludXggKyA0OCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbGlzdGVuIChfX05SX0xpbnV4ICsgNDkpCiAjZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUgKF9fTlJfTGludXggKyA1MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUgKF9fTlJfTGludXggKyA1MSkKICNkZWZpbmUgX19OUl9zb2NrZXRwYWlyIChfX05SX0xpbnV4ICsgNTIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldHNvY2tvcHQgKF9fTlJfTGludXggKyA1MykKICNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0IChfX05SX0xpbnV4ICsgNTQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2Nsb25lIChfX05SX0xpbnV4ICsgNTUpCiAjZGVmaW5lIF9fTlJfZm9yayAoX19OUl9MaW51eCArIDU2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9leGVjdmUgKF9fTlJfTGludXggKyA1NykKICNkZWZpbmUgX19OUl9leGl0IChfX05SX0xpbnV4ICsgNTgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3dhaXQ0IChfX05SX0xpbnV4ICsgNTkpCiAjZGVmaW5lIF9fTlJfa2lsbCAoX19OUl9MaW51eCArIDYwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl91bmFtZSAoX19OUl9MaW51eCArIDYxKQogI2RlZmluZSBfX05SX3NlbWdldCAoX19OUl9MaW51eCArIDYyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZW1vcCAoX19OUl9MaW51eCArIDYzKQogI2RlZmluZSBfX05SX3NlbWN0bCAoX19OUl9MaW51eCArIDY0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zaG1kdCAoX19OUl9MaW51eCArIDY1KQogI2RlZmluZSBfX05SX21zZ2dldCAoX19OUl9MaW51eCArIDY2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tc2dzbmQgKF9fTlJfTGludXggKyA2NykKICNkZWZpbmUgX19OUl9tc2dyY3YgKF9fTlJfTGludXggKyA2OCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbXNnY3RsIChfX05SX0xpbnV4ICsgNjkpCiAjZGVmaW5lIF9fTlJfZmNudGwgKF9fTlJfTGludXggKyA3MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZmxvY2sgKF9fTlJfTGludXggKyA3MSkKICNkZWZpbmUgX19OUl9mc3luYyAoX19OUl9MaW51eCArIDcyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mZGF0YXN5bmMgKF9fTlJfTGludXggKyA3MykKICNkZWZpbmUgX19OUl90cnVuY2F0ZSAoX19OUl9MaW51eCArIDc0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mdHJ1bmNhdGUgKF9fTlJfTGludXggKyA3NSkKICNkZWZpbmUgX19OUl9nZXRkZW50cyAoX19OUl9MaW51eCArIDc2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRjd2QgKF9fTlJfTGludXggKyA3NykKICNkZWZpbmUgX19OUl9jaGRpciAoX19OUl9MaW51eCArIDc4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mY2hkaXIgKF9fTlJfTGludXggKyA3OSkKICNkZWZpbmUgX19OUl9yZW5hbWUgKF9fTlJfTGludXggKyA4MCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbWtkaXIgKF9fTlJfTGludXggKyA4MSkKICNkZWZpbmUgX19OUl9ybWRpciAoX19OUl9MaW51eCArIDgyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jcmVhdCAoX19OUl9MaW51eCArIDgzKQogI2RlZmluZSBfX05SX2xpbmsgKF9fTlJfTGludXggKyA4NCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdW5saW5rIChfX05SX0xpbnV4ICsgODUpCiAjZGVmaW5lIF9fTlJfc3ltbGluayAoX19OUl9MaW51eCArIDg2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9yZWFkbGluayAoX19OUl9MaW51eCArIDg3KQogI2RlZmluZSBfX05SX2NobW9kIChfX05SX0xpbnV4ICsgODgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZjaG1vZCAoX19OUl9MaW51eCArIDg5KQogI2RlZmluZSBfX05SX2Nob3duIChfX05SX0xpbnV4ICsgOTApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZjaG93biAoX19OUl9MaW51eCArIDkxKQogI2RlZmluZSBfX05SX2xjaG93biAoX19OUl9MaW51eCArIDkyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl91bWFzayAoX19OUl9MaW51eCArIDkzKQogI2RlZmluZSBfX05SX2dldHRpbWVvZmRheSAoX19OUl9MaW51eCArIDk0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRybGltaXQgKF9fTlJfTGludXggKyA5NSkKICNkZWZpbmUgX19OUl9nZXRydXNhZ2UgKF9fTlJfTGludXggKyA5NikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3lzaW5mbyAoX19OUl9MaW51eCArIDk3KQogI2RlZmluZSBfX05SX3RpbWVzIChfX05SX0xpbnV4ICsgOTgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3B0cmFjZSAoX19OUl9MaW51eCArIDk5KQogI2RlZmluZSBfX05SX2dldHVpZCAoX19OUl9MaW51eCArIDEwMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3lzbG9nIChfX05SX0xpbnV4ICsgMTAxKQogI2RlZmluZSBfX05SX2dldGdpZCAoX19OUl9MaW51eCArIDEwMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0dWlkIChfX05SX0xpbnV4ICsgMTAzKQogI2RlZmluZSBfX05SX3NldGdpZCAoX19OUl9MaW51eCArIDEwNCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0ZXVpZCAoX19OUl9MaW51eCArIDEwNSkKICNkZWZpbmUgX19OUl9nZXRlZ2lkIChfX05SX0xpbnV4ICsgMTA2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRwZ2lkIChfX05SX0xpbnV4ICsgMTA3KQogI2RlZmluZSBfX05SX2dldHBwaWQgKF9fTlJfTGludXggKyAxMDgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldHBncnAgKF9fTlJfTGludXggKyAxMDkpCiAjZGVmaW5lIF9fTlJfc2V0c2lkIChfX05SX0xpbnV4ICsgMTEwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRyZXVpZCAoX19OUl9MaW51eCArIDExMSkKICNkZWZpbmUgX19OUl9zZXRyZWdpZCAoX19OUl9MaW51eCArIDExMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzIChfX05SX0xpbnV4ICsgMTEzKQogI2RlZmluZSBfX05SX3NldGdyb3VwcyAoX19OUl9MaW51eCArIDExNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0cmVzdWlkIChfX05SX0xpbnV4ICsgMTE1KQogI2RlZmluZSBfX05SX2dldHJlc3VpZCAoX19OUl9MaW51eCArIDExNikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0cmVzZ2lkIChfX05SX0xpbnV4ICsgMTE3KQogI2RlZmluZSBfX05SX2dldHJlc2dpZCAoX19OUl9MaW51eCArIDExOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0cGdpZCAoX19OUl9MaW51eCArIDExOSkKICNkZWZpbmUgX19OUl9zZXRmc3VpZCAoX19OUl9MaW51eCArIDEyMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0ZnNnaWQgKF9fTlJfTGludXggKyAxMjEpCiAjZGVmaW5lIF9fTlJfZ2V0c2lkIChfX05SX0xpbnV4ICsgMTIyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jYXBnZXQgKF9fTlJfTGludXggKyAxMjMpCiAjZGVmaW5lIF9fTlJfY2Fwc2V0IChfX05SX0xpbnV4ICsgMTI0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nIChfX05SX0xpbnV4ICsgMTI1KQogI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdCAoX19OUl9MaW51eCArIDEyNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvIChfX05SX0xpbnV4ICsgMTI3KQogI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQgKF9fTlJfTGludXggKyAxMjgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrIChfX05SX0xpbnV4ICsgMTI5KQogI2RlZmluZSBfX05SX3V0aW1lIChfX05SX0xpbnV4ICsgMTMwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ta25vZCAoX19OUl9MaW51eCArIDEzMSkKICNkZWZpbmUgX19OUl9wZXJzb25hbGl0eSAoX19OUl9MaW51eCArIDEzMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdXN0YXQgKF9fTlJfTGludXggKyAxMzMpCiAjZGVmaW5lIF9fTlJfc3RhdGZzIChfX05SX0xpbnV4ICsgMTM0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mc3RhdGZzIChfX05SX0xpbnV4ICsgMTM1KQogI2RlZmluZSBfX05SX3N5c2ZzIChfX05SX0xpbnV4ICsgMTM2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRwcmlvcml0eSAoX19OUl9MaW51eCArIDEzNykKICNkZWZpbmUgX19OUl9zZXRwcmlvcml0eSAoX19OUl9MaW51eCArIDEzOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0gKF9fTlJfTGludXggKyAxMzkpCiAjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0gKF9fTlJfTGludXggKyAxNDApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlciAoX19OUl9MaW51eCArIDE0MSkKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIgKF9fTlJfTGludXggKyAxNDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXggKF9fTlJfTGludXggKyAxNDMpCiAjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoX19OUl9MaW51eCArIDE0NCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX05SX0xpbnV4ICsgMTQ1KQogI2RlZmluZSBfX05SX21sb2NrIChfX05SX0xpbnV4ICsgMTQ2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tdW5sb2NrIChfX05SX0xpbnV4ICsgMTQ3KQogI2RlZmluZSBfX05SX21sb2NrYWxsIChfX05SX0xpbnV4ICsgMTQ4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tdW5sb2NrYWxsIChfX05SX0xpbnV4ICsgMTQ5KQogI2RlZmluZSBfX05SX3ZoYW5ndXAgKF9fTlJfTGludXggKyAxNTApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QgKF9fTlJfTGludXggKyAxNTEpCiAjZGVmaW5lIF9fTlJfX3N5c2N0bCAoX19OUl9MaW51eCArIDE1MikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcHJjdGwgKF9fTlJfTGludXggKyAxNTMpCiAjZGVmaW5lIF9fTlJfYWRqdGltZXggKF9fTlJfTGludXggKyAxNTQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldHJsaW1pdCAoX19OUl9MaW51eCArIDE1NSkKICNkZWZpbmUgX19OUl9jaHJvb3QgKF9fTlJfTGludXggKyAxNTYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3N5bmMgKF9fTlJfTGludXggKyAxNTcpCiAjZGVmaW5lIF9fTlJfYWNjdCAoX19OUl9MaW51eCArIDE1OCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5IChfX05SX0xpbnV4ICsgMTU5KQogI2RlZmluZSBfX05SX21vdW50IChfX05SX0xpbnV4ICsgMTYwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl91bW91bnQyIChfX05SX0xpbnV4ICsgMTYxKQogI2RlZmluZSBfX05SX3N3YXBvbiAoX19OUl9MaW51eCArIDE2MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3dhcG9mZiAoX19OUl9MaW51eCArIDE2MykKICNkZWZpbmUgX19OUl9yZWJvb3QgKF9fTlJfTGludXggKyAxNjQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldGhvc3RuYW1lIChfX05SX0xpbnV4ICsgMTY1KQogI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUgKF9fTlJfTGludXggKyAxNjYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUgKF9fTlJfTGludXggKyAxNjcpCiAjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUgKF9fTlJfTGludXggKyAxNjgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUgKF9fTlJfTGludXggKyAxNjkpCiAjZGVmaW5lIF9fTlJfZ2V0X2tlcm5lbF9zeW1zIChfX05SX0xpbnV4ICsgMTcwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUgKF9fTlJfTGludXggKyAxNzEpCiAjZGVmaW5lIF9fTlJfcXVvdGFjdGwgKF9fTlJfTGludXggKyAxNzIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX25mc3NlcnZjdGwgKF9fTlJfTGludXggKyAxNzMpCiAjZGVmaW5lIF9fTlJfZ2V0cG1zZyAoX19OUl9MaW51eCArIDE3NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcHV0cG1zZyAoX19OUl9MaW51eCArIDE3NSkKICNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbCAoX19OUl9MaW51eCArIDE3NikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVzZXJ2ZWQxNzcgKF9fTlJfTGludXggKyAxNzcpCiAjZGVmaW5lIF9fTlJfZ2V0dGlkIChfX05SX0xpbnV4ICsgMTc4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9yZWFkYWhlYWQgKF9fTlJfTGludXggKyAxNzkpCiAjZGVmaW5lIF9fTlJfc2V0eGF0dHIgKF9fTlJfTGludXggKyAxODApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2xzZXR4YXR0ciAoX19OUl9MaW51eCArIDE4MSkKICNkZWZpbmUgX19OUl9mc2V0eGF0dHIgKF9fTlJfTGludXggKyAxODIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldHhhdHRyIChfX05SX0xpbnV4ICsgMTgzKQogI2RlZmluZSBfX05SX2xnZXR4YXR0ciAoX19OUl9MaW51eCArIDE4NCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZmdldHhhdHRyIChfX05SX0xpbnV4ICsgMTg1KQogI2RlZmluZSBfX05SX2xpc3R4YXR0ciAoX19OUl9MaW51eCArIDE4NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbGxpc3R4YXR0ciAoX19OUl9MaW51eCArIDE4NykKICNkZWZpbmUgX19OUl9mbGlzdHhhdHRyIChfX05SX0xpbnV4ICsgMTg4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9yZW1vdmV4YXR0ciAoX19OUl9MaW51eCArIDE4OSkKICNkZWZpbmUgX19OUl9scmVtb3ZleGF0dHIgKF9fTlJfTGludXggKyAxOTApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0ciAoX19OUl9MaW51eCArIDE5MSkKICNkZWZpbmUgX19OUl90a2lsbCAoX19OUl9MaW51eCArIDE5MikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVzZXJ2ZWQxOTMgKF9fTlJfTGludXggKyAxOTMpCiAjZGVmaW5lIF9fTlJfZnV0ZXggKF9fTlJfTGludXggKyAxOTQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5IChfX05SX0xpbnV4ICsgMTk1KQogI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5IChfX05SX0xpbnV4ICsgMTk2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jYWNoZWZsdXNoIChfX05SX0xpbnV4ICsgMTk3KQogI2RlZmluZSBfX05SX2NhY2hlY3RsIChfX05SX0xpbnV4ICsgMTk4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zeXNtaXBzIChfX05SX0xpbnV4ICsgMTk5KQogI2RlZmluZSBfX05SX2lvX3NldHVwIChfX05SX0xpbnV4ICsgMjAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pb19kZXN0cm95IChfX05SX0xpbnV4ICsgMjAxKQogI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cyAoX19OUl9MaW51eCArIDIwMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfaW9fc3VibWl0IChfX05SX0xpbnV4ICsgMjAzKQogI2RlZmluZSBfX05SX2lvX2NhbmNlbCAoX19OUl9MaW51eCArIDIwNCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZXhpdF9ncm91cCAoX19OUl9MaW51eCArIDIwNSkKICNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAoX19OUl9MaW51eCArIDIwNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlIChfX05SX0xpbnV4ICsgMjA3KQogI2RlZmluZSBfX05SX2Vwb2xsX2N0bCAoX19OUl9MaW51eCArIDIwOCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdCAoX19OUl9MaW51eCArIDIwOSkKICNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzIChfX05SX0xpbnV4ICsgMjEwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4gKF9fTlJfTGludXggKyAyMTEpCiAjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzIChfX05SX0xpbnV4ICsgMjEyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwgKF9fTlJfTGludXggKyAyMTMpCiAjZGVmaW5lIF9fTlJfc2VtdGltZWRvcCAoX19OUl9MaW51eCArIDIxNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZmFkdmlzZTY0IChfX05SX0xpbnV4ICsgMjE1KQogI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZSAoX19OUl9MaW51eCArIDIxNikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZSAoX19OUl9MaW51eCArIDIxNykKICNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lIChfX05SX0xpbnV4ICsgMjE4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuIChfX05SX0xpbnV4ICsgMjE5KQogI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZSAoX19OUl9MaW51eCArIDIyMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZSAoX19OUl9MaW51eCArIDIyMSkKICNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lIChfX05SX0xpbnV4ICsgMjIyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMgKF9fTlJfTGludXggKyAyMjMpCiAjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwIChfX05SX0xpbnV4ICsgMjI0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl90Z2tpbGwgKF9fTlJfTGludXggKyAyMjUpCiAjZGVmaW5lIF9fTlJfdXRpbWVzIChfX05SX0xpbnV4ICsgMjI2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tYmluZCAoX19OUl9MaW51eCArIDIyNykKICNkZWZpbmUgX19OUl9nZXRfbWVtcG9saWN5IChfX05SX0xpbnV4ICsgMjI4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5IChfX05SX0xpbnV4ICsgMjI5KQogI2RlZmluZSBfX05SX21xX29wZW4gKF9fTlJfTGludXggKyAyMzApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21xX3VubGluayAoX19OUl9MaW51eCArIDIzMSkKICNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQgKF9fTlJfTGludXggKyAyMzIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZSAoX19OUl9MaW51eCArIDIzMykKICNkZWZpbmUgX19OUl9tcV9ub3RpZnkgKF9fTlJfTGludXggKyAyMzQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIgKF9fTlJfTGludXggKyAyMzUpCiAjZGVmaW5lIF9fTlJfdnNlcnZlciAoX19OUl9MaW51eCArIDIzNikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfd2FpdGlkIChfX05SX0xpbnV4ICsgMjM3KQogI2RlZmluZSBfX05SX2FkZF9rZXkgKF9fTlJfTGludXggKyAyMzkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5IChfX05SX0xpbnV4ICsgMjQwKQogI2RlZmluZSBfX05SX2tleWN0bCAoX19OUl9MaW51eCArIDI0MSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0X3RocmVhZF9hcmVhIChfX05SX0xpbnV4ICsgMjQyKQogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdCAoX19OUl9MaW51eCArIDI0MykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2ggKF9fTlJfTGludXggKyAyNDQpCiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaCAoX19OUl9MaW51eCArIDI0NSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbWlncmF0ZV9wYWdlcyAoX19OUl9MaW51eCArIDI0NikKICNkZWZpbmUgX19OUl9vcGVuYXQgKF9fTlJfTGludXggKyAyNDcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21rZGlyYXQgKF9fTlJfTGludXggKyAyNDgpCiAjZGVmaW5lIF9fTlJfbWtub2RhdCAoX19OUl9MaW51eCArIDI0OSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZmNob3duYXQgKF9fTlJfTGludXggKyAyNTApCiAjZGVmaW5lIF9fTlJfZnV0aW1lc2F0IChfX05SX0xpbnV4ICsgMjUxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9uZXdmc3RhdGF0IChfX05SX0xpbnV4ICsgMjUyKQogI2RlZmluZSBfX05SX3VubGlua2F0IChfX05SX0xpbnV4ICsgMjUzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9yZW5hbWVhdCAoX19OUl9MaW51eCArIDI1NCkKICNkZWZpbmUgX19OUl9saW5rYXQgKF9fTlJfTGludXggKyAyNTUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3N5bWxpbmthdCAoX19OUl9MaW51eCArIDI1NikKICNkZWZpbmUgX19OUl9yZWFkbGlua2F0IChfX05SX0xpbnV4ICsgMjU3KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mY2htb2RhdCAoX19OUl9MaW51eCArIDI1OCkKICNkZWZpbmUgX19OUl9mYWNjZXNzYXQgKF9fTlJfTGludXggKyAyNTkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3BzZWxlY3Q2IChfX05SX0xpbnV4ICsgMjYwKQogI2RlZmluZSBfX05SX3Bwb2xsIChfX05SX0xpbnV4ICsgMjYxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl91bnNoYXJlIChfX05SX0xpbnV4ICsgMjYyKQogI2RlZmluZSBfX05SX3NwbGljZSAoX19OUl9MaW51eCArIDI2MykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlIChfX05SX0xpbnV4ICsgMjY0KQogI2RlZmluZSBfX05SX3RlZSAoX19OUl9MaW51eCArIDI2NSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdm1zcGxpY2UgKF9fTlJfTGludXggKyAyNjYpCiAjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcyAoX19OUl9MaW51eCArIDI2NykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0IChfX05SX0xpbnV4ICsgMjY4KQogI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdCAoX19OUl9MaW51eCArIDI2OSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZCAoX19OUl9MaW51eCArIDI3MCkKICNkZWZpbmUgX19OUl9nZXRjcHUgKF9fTlJfTGludXggKyAyNzEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2Vwb2xsX3B3YWl0IChfX05SX0xpbnV4ICsgMjcyKQogI2RlZmluZSBfX05SX2lvcHJpb19zZXQgKF9fTlJfTGludXggKyAyNzMpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2lvcHJpb19nZXQgKF9fTlJfTGludXggKyAyNzQpCiAjZGVmaW5lIF9fTlJfdXRpbWVuc2F0IChfX05SX0xpbnV4ICsgMjc1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zaWduYWxmZCAoX19OUl9MaW51eCArIDI3NikKICNkZWZpbmUgX19OUl90aW1lcmZkIChfX05SX0xpbnV4ICsgMjc3KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ldmVudGZkIChfX05SX0xpbnV4ICsgMjc4KQogI2RlZmluZSBfX05SX2ZhbGxvY2F0ZSAoX19OUl9MaW51eCArIDI3OSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUgKF9fTlJfTGludXggKyAyODApCiAjZGVmaW5lIF9fTlJfdGltZXJmZF9nZXR0aW1lIChfX05SX0xpbnV4ICsgMjgxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl90aW1lcmZkX3NldHRpbWUgKF9fTlJfTGludXggKyAyODIpCiAjZGVmaW5lIF9fTlJfc2lnbmFsZmQ0IChfX05SX0xpbnV4ICsgMjgzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ldmVudGZkMiAoX19OUl9MaW51eCArIDI4NCkKICNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUxIChfX05SX0xpbnV4ICsgMjg1KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9kdXAzIChfX05SX0xpbnV4ICsgMjg2KQogI2RlZmluZSBfX05SX3BpcGUyIChfX05SX0xpbnV4ICsgMjg3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQxIChfX05SX0xpbnV4ICsgMjg4KQogI2RlZmluZSBfX05SX3ByZWFkdiAoX19OUl9MaW51eCArIDI4OSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcHdyaXRldiAoX19OUl9MaW51eCArIDI5MCkKICNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbyAoX19OUl9MaW51eCArIDI5MSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuIChfX05SX0xpbnV4ICsgMjkyKQogI2RlZmluZSBfX05SX2FjY2VwdDQgKF9fTlJfTGludXggKyAyOTMpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlY3ZtbXNnIChfX05SX0xpbnV4ICsgMjk0KQogI2RlZmluZSBfX05SX2Zhbm90aWZ5X2luaXQgKF9fTlJfTGludXggKyAyOTUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2Zhbm90aWZ5X21hcmsgKF9fTlJfTGludXggKyAyOTYpCiAjZGVmaW5lIF9fTlJfcHJsaW1pdDY0IChfX05SX0xpbnV4ICsgMjk3KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9uYW1lX3RvX2hhbmRsZV9hdCAoX19OUl9MaW51eCArIDI5OCkKICNkZWZpbmUgX19OUl9vcGVuX2J5X2hhbmRsZV9hdCAoX19OUl9MaW51eCArIDI5OSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY2xvY2tfYWRqdGltZSAoX19OUl9MaW51eCArIDMwMCkKICNkZWZpbmUgX19OUl9zeW5jZnMgKF9fTlJfTGludXggKyAzMDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NlbmRtbXNnIChfX05SX0xpbnV4ICsgMzAyKQogI2RlZmluZSBfX05SX3NldG5zIChfX05SX0xpbnV4ICsgMzAzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9wcm9jZXNzX3ZtX3JlYWR2IChfX05SX0xpbnV4ICsgMzA0KQogI2RlZmluZSBfX05SX3Byb2Nlc3Nfdm1fd3JpdGV2IChfX05SX0xpbnV4ICsgMzA1KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9rY21wIChfX05SX0xpbnV4ICsgMzA2KQogI2RlZmluZSBfX05SX2Zpbml0X21vZHVsZSAoX19OUl9MaW51eCArIDMwNykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NCAoX19OUl9MaW51eCArIDMwOCkKLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscyAzMDgKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhdHRyIChfX05SX0xpbnV4ICsgMzA5KQorI2RlZmluZSBfX05SX3NjaGVkX2dldGF0dHIgKF9fTlJfTGludXggKyAzMTApCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMgMzEwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjZGVmaW5lIF9fTlJfNjRfTGludXggNTAwMAotI2RlZmluZSBfX05SXzY0X0xpbnV4X3N5c2NhbGxzIDMwOAorI2RlZmluZSBfX05SXzY0X0xpbnV4X3N5c2NhbGxzIDMxMAogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX0xpbnV4IDYwMDAKQEAgLTEyNDcsOSArMTI1MiwxMiBAQAogI2RlZmluZSBfX05SX2tjbXAgKF9fTlJfTGludXggKyAzMTEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2Zpbml0X21vZHVsZSAoX19OUl9MaW51eCArIDMxMikKLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscyAzMTIKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhdHRyIChfX05SX0xpbnV4ICsgMzEzKQorI2RlZmluZSBfX05SX3NjaGVkX2dldGF0dHIgKF9fTlJfTGludXggKyAzMTQpCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMgMzE0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjZGVmaW5lIF9fTlJfTjMyX0xpbnV4IDYwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIF9fTlJfTjMyX0xpbnV4X3N5c2NhbGxzIDMxMgorI2RlZmluZSBfX05SX04zMl9MaW51eF9zeXNjYWxscyAzMTQKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vYm9vdHBhcmFtLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL2Jvb3RwYXJhbS5oCmluZGV4IGFmOTg0ODkuLmI1NzY4MjUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vYm9vdHBhcmFtLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9ib290cGFyYW0uaApAQCAtMjMsMTY0ICsyMywxNjcgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNFVFVQX0RUQiAyCiAjZGVmaW5lIFNFVFVQX1BDSSAzCisjZGVmaW5lIFNFVFVQX0VGSSA0CiAjZGVmaW5lIFJBTURJU0tfSU1BR0VfU1RBUlRfTUFTSyAweDA3RkYKLSNkZWZpbmUgUkFNRElTS19QUk9NUFRfRkxBRyAweDgwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFJBTURJU0tfUFJPTVBUX0ZMQUcgMHg4MDAwCiAjZGVmaW5lIFJBTURJU0tfTE9BRF9GTEFHIDB4NDAwMAogI2RlZmluZSBMT0FERURfSElHSCAoMTw8MCkKICNkZWZpbmUgUVVJRVRfRkxBRyAoMTw8NSkKLSNkZWZpbmUgS0VFUF9TRUdNRU5UUyAoMTw8NikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtFRVBfU0VHTUVOVFMgKDE8PDYpCiAjZGVmaW5lIENBTl9VU0VfSEVBUCAoMTw8NykKICNkZWZpbmUgWExGX0tFUk5FTF82NCAoMTw8MCkKICNkZWZpbmUgWExGX0NBTl9CRV9MT0FERURfQUJPVkVfNEcgKDE8PDEpCi0jZGVmaW5lIFhMRl9FRklfSEFORE9WRVJfMzIgKDE8PDIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYTEZfRUZJX0hBTkRPVkVSXzMyICgxPDwyKQogI2RlZmluZSBYTEZfRUZJX0hBTkRPVkVSXzY0ICgxPDwzKQorI2RlZmluZSBYTEZfRUZJX0tFWEVDICgxPDw0KQogI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9hcG1fYmlvcy5oPgogI2luY2x1ZGUgPGxpbnV4L2VkZC5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vZTgyMC5oPgogI2luY2x1ZGUgPGFzbS9pc3QuaD4KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8dmlkZW8vZWRpZC5oPgogc3RydWN0IHNldHVwX2RhdGEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBuZXh0OwogIF9fdTMyIHR5cGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGxlbjsKICBfX3U4IGRhdGFbMF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBzZXR1cF9oZWFkZXIgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHNldHVwX3NlY3RzOwogIF9fdTE2IHJvb3RfZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHN5c3NpemU7CiAgX191MTYgcmFtX3NpemU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHZpZF9tb2RlOwogIF9fdTE2IHJvb3RfZGV2OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBib290X2ZsYWc7CiAgX191MTYganVtcDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGVhZGVyOwogIF9fdTE2IHZlcnNpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlYWxtb2RlX3N3dGNoOwogIF9fdTE2IHN0YXJ0X3N5czsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYga2VybmVsX3ZlcnNpb247CiAgX191OCB0eXBlX29mX2xvYWRlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBsb2FkZmxhZ3M7CiAgX191MTYgc2V0dXBfbW92ZV9zaXplOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjb2RlMzJfc3RhcnQ7CiAgX191MzIgcmFtZGlza19pbWFnZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmFtZGlza19zaXplOwogIF9fdTMyIGJvb3RzZWN0X2tsdWRnZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgaGVhcF9lbmRfcHRyOwogIF9fdTggZXh0X2xvYWRlcl92ZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggZXh0X2xvYWRlcl90eXBlOwogIF9fdTMyIGNtZF9saW5lX3B0cjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW5pdHJkX2FkZHJfbWF4OwogIF9fdTMyIGtlcm5lbF9hbGlnbm1lbnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcmVsb2NhdGFibGVfa2VybmVsOwogIF9fdTggbWluX2FsaWdubWVudDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgeGxvYWRmbGFnczsKICBfX3UzMiBjbWRsaW5lX3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhhcmR3YXJlX3N1YmFyY2g7CiAgX191NjQgaGFyZHdhcmVfc3ViYXJjaF9kYXRhOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwYXlsb2FkX29mZnNldDsKICBfX3UzMiBwYXlsb2FkX2xlbmd0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgc2V0dXBfZGF0YTsKICBfX3U2NCBwcmVmX2FkZHJlc3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGluaXRfc2l6ZTsKICBfX3UzMiBoYW5kb3Zlcl9vZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIHN0cnVjdCBzeXNfZGVzY190YWJsZSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IGxlbmd0aDsKICBfX3U4IHRhYmxlWzE0XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IG9scGNfb2Z3X2hlYWRlciB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG9md19tYWdpYzsKICBfX3UzMiBvZndfdmVyc2lvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY2lmX2hhbmRsZXI7CiAgX191MzIgaXJxX2Rlc2NfdGFibGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIHN0cnVjdCBlZmlfaW5mbyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGVmaV9sb2FkZXJfc2lnbmF0dXJlOwogIF9fdTMyIGVmaV9zeXN0YWI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGVmaV9tZW1kZXNjX3NpemU7CiAgX191MzIgZWZpX21lbWRlc2NfdmVyc2lvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZWZpX21lbW1hcDsKICBfX3UzMiBlZmlfbWVtbWFwX3NpemU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGVmaV9zeXN0YWJfaGk7CiAgX191MzIgZWZpX21lbW1hcF9oaTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGJvb3RfcGFyYW1zIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHNjcmVlbl9pbmZvIHNjcmVlbl9pbmZvOwogIHN0cnVjdCBhcG1fYmlvc19pbmZvIGFwbV9iaW9zX2luZm87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggX3BhZDJbNF07CiAgX191NjQgdGJvb3RfYWRkcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGlzdF9pbmZvIGlzdF9pbmZvOwogIF9fdTggX3BhZDNbMTZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGhkMF9pbmZvWzE2XTsKICBfX3U4IGhkMV9pbmZvWzE2XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHN5c19kZXNjX3RhYmxlIHN5c19kZXNjX3RhYmxlOwogIHN0cnVjdCBvbHBjX29md19oZWFkZXIgb2xwY19vZndfaGVhZGVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBleHRfcmFtZGlza19pbWFnZTsKICBfX3UzMiBleHRfcmFtZGlza19zaXplOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBleHRfY21kX2xpbmVfcHRyOwogIF9fdTggX3BhZDRbMTE2XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGVkaWRfaW5mbyBlZGlkX2luZm87CiAgc3RydWN0IGVmaV9pbmZvIGVmaV9pbmZvOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBhbHRfbWVtX2s7CiAgX191MzIgc2NyYXRjaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBlODIwX2VudHJpZXM7CiAgX191OCBlZGRidWZfZW50cmllczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBlZGRfbWJyX3NpZ19idWZfZW50cmllczsKICBfX3U4IGtiZF9zdGF0dXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggX3BhZDVbM107CiAgX191OCBzZW50aW5lbDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBfcGFkNlsxXTsKICBzdHJ1Y3Qgc2V0dXBfaGVhZGVyIGhkcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBfcGFkN1sweDI5MC0weDFmMS1zaXplb2Yoc3RydWN0IHNldHVwX2hlYWRlcildOwogIF9fdTMyIGVkZF9tYnJfc2lnX2J1ZmZlcltFRERfTUJSX1NJR19NQVhdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZTgyMGVudHJ5IGU4MjBfbWFwW0U4MjBNQVhdOwogIF9fdTggX3BhZDhbNDhdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZWRkX2luZm8gZWRkYnVmW0VERE1BWE5SXTsKICBfX3U4IF9wYWQ5WzI3Nl07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIGVudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBYODZfU1VCQVJDSF9QQyA9IDAsCiAgWDg2X1NVQkFSQ0hfTEdVRVNULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBYODZfU1VCQVJDSF9YRU4sCi0gWDg2X1NVQkFSQ0hfTVJTVCwKKyBYODZfU1VCQVJDSF9JTlRFTF9NSUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFg4Nl9TVUJBUkNIX0NFNDEwMCwKICBYODZfTlJfU1VCQVJDSFMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9oeXBlcnYuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vaHlwZXJ2LmgKaW5kZXggNTg3NGU4ZC4uOTY1ZTgwYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9oeXBlcnYuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL2h5cGVydi5oCkBAIC0zMyw5OSArMzMsMTE2IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9YNjRfTVNSX1ZQX1JVTlRJTUVfQVZBSUxBQkxFICgxIDw8IDApCiAjZGVmaW5lIEhWX1g2NF9NU1JfVElNRV9SRUZfQ09VTlRfQVZBSUxBQkxFICgxIDw8IDEpCisjZGVmaW5lIEhWX1g2NF9NU1JfUkVGRVJFTkNFX1RTQyAweDQwMDAwMDIxCisjZGVmaW5lIEhWX1g2NF9NU1JfQVBJQ19GUkVRVUVOQ1lfQVZBSUxBQkxFICgxIDw8IDExKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSFZfWDY0X01TUl9UU0NfRlJFUVVFTkNZX0FWQUlMQUJMRSAoMSA8PCAxMSkKICNkZWZpbmUgSFZfWDY0X01TUl9TWU5JQ19BVkFJTEFCTEUgKDEgPDwgMikKICNkZWZpbmUgSFZfWDY0X01TUl9TWU5USU1FUl9BVkFJTEFCTEUgKDEgPDwgMykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1g2NF9NU1JfQVBJQ19BQ0NFU1NfQVZBSUxBQkxFICgxIDw8IDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9YNjRfTVNSX0hZUEVSQ0FMTF9BVkFJTEFCTEUgKDEgPDwgNSkKICNkZWZpbmUgSFZfWDY0X01TUl9WUF9JTkRFWF9BVkFJTEFCTEUgKDEgPDwgNikKICNkZWZpbmUgSFZfWDY0X01TUl9SRVNFVF9BVkFJTEFCTEUgKDEgPDwgNykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1g2NF9NU1JfU1RBVF9QQUdFU19BVkFJTEFCTEUgKDEgPDwgOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1g2NF9DUkVBVEVfUEFSVElUSU9OUyAoMSA8PCAwKQogI2RlZmluZSBIVl9YNjRfQUNDRVNTX1BBUlRJVElPTl9JRCAoMSA8PCAxKQogI2RlZmluZSBIVl9YNjRfQUNDRVNTX01FTU9SWV9QT09MICgxIDw8IDIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9YNjRfQURKVVNUX01FU1NBR0VfQlVGRkVSUyAoMSA8PCAzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSFZfWDY0X1BPU1RfTUVTU0FHRVMgKDEgPDwgNCkKICNkZWZpbmUgSFZfWDY0X1NJR05BTF9FVkVOVFMgKDEgPDwgNSkKICNkZWZpbmUgSFZfWDY0X0NSRUFURV9QT1JUICgxIDw8IDYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9YNjRfQ09OTkVDVF9QT1JUICgxIDw8IDcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9YNjRfQUNDRVNTX1NUQVRTICgxIDw8IDgpCiAjZGVmaW5lIEhWX1g2NF9ERUJVR0dJTkcgKDEgPDwgMTEpCiAjZGVmaW5lIEhWX1g2NF9DUFVfUE9XRVJfTUFOQUdFTUVOVCAoMSA8PCAxMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1g2NF9DT05GSUdVUkVfUFJPRklMRVIgKDEgPDwgMTMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9YNjRfTVdBSVRfQVZBSUxBQkxFICgxIDw8IDApCiAjZGVmaW5lIEhWX1g2NF9HVUVTVF9ERUJVR0dJTkdfQVZBSUxBQkxFICgxIDw8IDEpCiAjZGVmaW5lIEhWX1g2NF9QRVJGX01PTklUT1JfQVZBSUxBQkxFICgxIDw8IDIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9YNjRfQ1BVX0RZTkFNSUNfUEFSVElUSU9OSU5HX0FWQUlMQUJMRSAoMSA8PCAzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSFZfWDY0X0hZUEVSQ0FMTF9QQVJBTVNfWE1NX0FWQUlMQUJMRSAoMSA8PCA0KQogI2RlZmluZSBIVl9YNjRfR1VFU1RfSURMRV9TVEFURV9BVkFJTEFCTEUgKDEgPDwgNSkKICNkZWZpbmUgSFZfWDY0X01XQUlUX1JFQ09NTUVOREVEICgxIDw8IDApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9YNjRfTE9DQUxfVExCX0ZMVVNIX1JFQ09NTUVOREVEICgxIDw8IDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9YNjRfUkVNT1RFX1RMQl9GTFVTSF9SRUNPTU1FTkRFRCAoMSA8PCAyKQogI2RlZmluZSBIVl9YNjRfQVBJQ19BQ0NFU1NfUkVDT01NRU5ERUQgKDEgPDwgMykKICNkZWZpbmUgSFZfWDY0X1NZU1RFTV9SRVNFVF9SRUNPTU1FTkRFRCAoMSA8PCA0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSFZfWDY0X1JFTEFYRURfVElNSU5HX1JFQ09NTUVOREVEICgxIDw8IDUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9YNjRfTVNSX0dVRVNUX09TX0lEIDB4NDAwMDAwMDAKICNkZWZpbmUgSFZfWDY0X01TUl9IWVBFUkNBTEwgMHg0MDAwMDAwMQogI2RlZmluZSBIVl9YNjRfTVNSX1ZQX0lOREVYIDB4NDAwMDAwMDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1g2NF9NU1JfVElNRV9SRUZfQ09VTlQgMHg0MDAwMDAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSFZfWDY0X01TUl9UU0NfRlJFUVVFTkNZIDB4NDAwMDAwMjIKKyNkZWZpbmUgSFZfWDY0X01TUl9BUElDX0ZSRVFVRU5DWSAweDQwMDAwMDIzCiAjZGVmaW5lIEhWX1g2NF9NU1JfRU9JIDB4NDAwMDAwNzAKICNkZWZpbmUgSFZfWDY0X01TUl9JQ1IgMHg0MDAwMDA3MQotI2RlZmluZSBIVl9YNjRfTVNSX1RQUiAweDQwMDAwMDcyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVl9YNjRfTVNSX1RQUiAweDQwMDAwMDcyCiAjZGVmaW5lIEhWX1g2NF9NU1JfQVBJQ19BU1NJU1RfUEFHRSAweDQwMDAwMDczCiAjZGVmaW5lIEhWX1g2NF9NU1JfU0NPTlRST0wgMHg0MDAwMDA4MAogI2RlZmluZSBIVl9YNjRfTVNSX1NWRVJTSU9OIDB4NDAwMDAwODEKLSNkZWZpbmUgSFZfWDY0X01TUl9TSUVGUCAweDQwMDAwMDgyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVl9YNjRfTVNSX1NJRUZQIDB4NDAwMDAwODIKICNkZWZpbmUgSFZfWDY0X01TUl9TSU1QIDB4NDAwMDAwODMKICNkZWZpbmUgSFZfWDY0X01TUl9FT00gMHg0MDAwMDA4NAogI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQwIDB4NDAwMDAwOTAKLSNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMSAweDQwMDAwMDkxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQxIDB4NDAwMDAwOTEKICNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMiAweDQwMDAwMDkyCiAjZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDMgMHg0MDAwMDA5MwogI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQ0IDB4NDAwMDAwOTQKLSNkZWZpbmUgSFZfWDY0X01TUl9TSU5UNSAweDQwMDAwMDk1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQ1IDB4NDAwMDAwOTUKICNkZWZpbmUgSFZfWDY0X01TUl9TSU5UNiAweDQwMDAwMDk2CiAjZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDcgMHg0MDAwMDA5NwogI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQ4IDB4NDAwMDAwOTgKLSNkZWZpbmUgSFZfWDY0X01TUl9TSU5UOSAweDQwMDAwMDk5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQ5IDB4NDAwMDAwOTkKICNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMTAgMHg0MDAwMDA5QQogI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQxMSAweDQwMDAwMDlCCiAjZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDEyIDB4NDAwMDAwOUMKLSNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMTMgMHg0MDAwMDA5RAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMTMgMHg0MDAwMDA5RAogI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQxNCAweDQwMDAwMDlFCiAjZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDE1IDB4NDAwMDAwOUYKICNkZWZpbmUgSFZfWDY0X01TUl9IWVBFUkNBTExfRU5BQkxFIDB4MDAwMDAwMDEKLSNkZWZpbmUgSFZfWDY0X01TUl9IWVBFUkNBTExfUEFHRV9BRERSRVNTX1NISUZUIDEyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVl9YNjRfTVNSX0hZUEVSQ0FMTF9QQUdFX0FERFJFU1NfU0hJRlQgMTIKICNkZWZpbmUgSFZfWDY0X01TUl9IWVBFUkNBTExfUEFHRV9BRERSRVNTX01BU0sgICAofigoMXVsbCA8PCBIVl9YNjRfTVNSX0hZUEVSQ0FMTF9QQUdFX0FERFJFU1NfU0hJRlQpIC0gMSkpCiAjZGVmaW5lIEhWX1g2NF9IVl9OT1RJRllfTE9OR19TUElOX1dBSVQgMHgwMDA4CiAjZGVmaW5lIEhWX1g2NF9NU1JfQVBJQ19BU1NJU1RfUEFHRV9FTkFCTEUgMHgwMDAwMDAwMQotI2RlZmluZSBIVl9YNjRfTVNSX0FQSUNfQVNTSVNUX1BBR0VfQUREUkVTU19TSElGVCAxMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSFZfWDY0X01TUl9BUElDX0FTU0lTVF9QQUdFX0FERFJFU1NfU0hJRlQgMTIKICNkZWZpbmUgSFZfWDY0X01TUl9BUElDX0FTU0lTVF9QQUdFX0FERFJFU1NfTUFTSyAgICh+KCgxdWxsIDw8IEhWX1g2NF9NU1JfQVBJQ19BU1NJU1RfUEFHRV9BRERSRVNTX1NISUZUKSAtIDEpKQorI2RlZmluZSBIVl9YNjRfTVNSX1RTQ19SRUZFUkVOQ0VfRU5BQkxFIDB4MDAwMDAwMDEKKyNkZWZpbmUgSFZfWDY0X01TUl9UU0NfUkVGRVJFTkNFX0FERFJFU1NfU0hJRlQgMTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1BST0NFU1NPUl9QT1dFUl9TVEFURV9DMCAwCiAjZGVmaW5lIEhWX1BST0NFU1NPUl9QT1dFUl9TVEFURV9DMSAxCiAjZGVmaW5lIEhWX1BST0NFU1NPUl9QT1dFUl9TVEFURV9DMiAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9QUk9DRVNTT1JfUE9XRVJfU1RBVEVfQzMgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSFZfU1RBVFVTX1NVQ0NFU1MgMAogI2RlZmluZSBIVl9TVEFUVVNfSU5WQUxJRF9IWVBFUkNBTExfQ09ERSAyCiAjZGVmaW5lIEhWX1NUQVRVU19JTlZBTElEX0hZUEVSQ0FMTF9JTlBVVCAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9TVEFUVVNfSU5WQUxJRF9BTElHTk1FTlQgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSFZfU1RBVFVTX0lOU1VGRklDSUVOVF9CVUZGRVJTIDE5Cit0eXBlZGVmIHN0cnVjdCBfSFZfUkVGRVJFTkNFX1RTQ19QQUdFIHsKKyBfX3UzMiB0c2Nfc2VxdWVuY2U7CisgX191MzIgcmVzMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgdHNjX3NjYWxlOworIF9fczY0IHRzY19vZmZzZXQ7Cit9IEhWX1JFRkVSRU5DRV9UU0NfUEFHRSwgKlBIVl9SRUZFUkVOQ0VfVFNDX1BBR0U7CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL2t2bS5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9rdm0uaAppbmRleCBhYjMwMWQxLi4yMDBkODE4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL2t2bS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20va3ZtLmgKQEAgLTIzMSw5ICsyMzEsOSBAQAogIF9fdTMyIHBhZGRpbmdbM107CiB9OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgS1ZNX0NQVUlEX0ZMQUdfU0lHTklGQ0FOVF9JTkRFWCAxCi0jZGVmaW5lIEtWTV9DUFVJRF9GTEFHX1NUQVRFRlVMX0ZVTkMgMgotI2RlZmluZSBLVk1fQ1BVSURfRkxBR19TVEFURV9SRUFEX05FWFQgNAorI2RlZmluZSBLVk1fQ1BVSURfRkxBR19TSUdOSUZDQU5UX0lOREVYIEJJVCgwKQorI2RlZmluZSBLVk1fQ1BVSURfRkxBR19TVEFURUZVTF9GVU5DIEJJVCgxKQorI2RlZmluZSBLVk1fQ1BVSURfRkxBR19TVEFURV9SRUFEX05FWFQgQklUKDIpCiBzdHJ1Y3Qga3ZtX2NwdWlkMiB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG5lbnQ7CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL2t2bV9wYXJhLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL2t2bV9wYXJhLmgKaW5kZXggZTkxYzE4ZS4uN2ZiNWVmZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9rdm1fcGFyYS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20va3ZtX3BhcmEuaApAQCAtMzIsNjggKzMyLDY5IEBACiAjZGVmaW5lIEtWTV9GRUFUVVJFX1NURUFMX1RJTUUgNQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0ZFQVRVUkVfUFZfRU9JIDYKKyNkZWZpbmUgS1ZNX0ZFQVRVUkVfUFZfVU5IQUxUIDcKICNkZWZpbmUgS1ZNX0ZFQVRVUkVfQ0xPQ0tTT1VSQ0VfU1RBQkxFX0JJVCAyNAogI2RlZmluZSBNU1JfS1ZNX1dBTExfQ0xPQ0sgMHgxMQotI2RlZmluZSBNU1JfS1ZNX1NZU1RFTV9USU1FIDB4MTIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TUl9LVk1fU1lTVEVNX1RJTUUgMHgxMgogI2RlZmluZSBLVk1fTVNSX0VOQUJMRUQgMQogI2RlZmluZSBNU1JfS1ZNX1dBTExfQ0xPQ0tfTkVXIDB4NGI1NjRkMDAKICNkZWZpbmUgTVNSX0tWTV9TWVNURU1fVElNRV9ORVcgMHg0YjU2NGQwMQotI2RlZmluZSBNU1JfS1ZNX0FTWU5DX1BGX0VOIDB4NGI1NjRkMDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TUl9LVk1fQVNZTkNfUEZfRU4gMHg0YjU2NGQwMgogI2RlZmluZSBNU1JfS1ZNX1NURUFMX1RJTUUgMHg0YjU2NGQwMwogI2RlZmluZSBNU1JfS1ZNX1BWX0VPSV9FTiAweDRiNTY0ZDA0CiBzdHJ1Y3Qga3ZtX3N0ZWFsX3RpbWUgewotIF9fdTY0IHN0ZWFsOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBzdGVhbDsKICBfX3UzMiB2ZXJzaW9uOwogIF9fdTMyIGZsYWdzOwogIF9fdTMyIHBhZFsxMl07Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIEtWTV9TVEVBTF9BTElHTk1FTlRfQklUUyA1CiAjZGVmaW5lIEtWTV9TVEVBTF9WQUxJRF9CSVRTICgoLTFVTEwgPDwgKEtWTV9TVEVBTF9BTElHTk1FTlRfQklUUyArIDEpKSkKICNkZWZpbmUgS1ZNX1NURUFMX1JFU0VSVkVEX01BU0sgKCgoMSA8PCBLVk1fU1RFQUxfQUxJR05NRU5UX0JJVFMpIC0gMSApIDw8IDEpCi0jZGVmaW5lIEtWTV9NQVhfTU1VX09QX0JBVENIIDMyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fTUFYX01NVV9PUF9CQVRDSCAzMgogI2RlZmluZSBLVk1fQVNZTkNfUEZfRU5BQkxFRCAoMSA8PCAwKQogI2RlZmluZSBLVk1fQVNZTkNfUEZfU0VORF9BTFdBWVMgKDEgPDwgMSkKICNkZWZpbmUgS1ZNX01NVV9PUF9XUklURV9QVEUgMQotI2RlZmluZSBLVk1fTU1VX09QX0ZMVVNIX1RMQiAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fTU1VX09QX0ZMVVNIX1RMQiAyCiAjZGVmaW5lIEtWTV9NTVVfT1BfUkVMRUFTRV9QVCAzCiBzdHJ1Y3Qga3ZtX21tdV9vcF9oZWFkZXIgewogIF9fdTMyIG9wOwotIF9fdTMyIHBhZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcGFkOwogfTsKIHN0cnVjdCBrdm1fbW11X29wX3dyaXRlX3B0ZSB7CiAgc3RydWN0IGt2bV9tbXVfb3BfaGVhZGVyIGhlYWRlcjsKLSBfX3U2NCBwdGVfcGh5czsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgcHRlX3BoeXM7CiAgX191NjQgcHRlX3ZhbDsKIH07CiBzdHJ1Y3Qga3ZtX21tdV9vcF9mbHVzaF90bGIgewotIHN0cnVjdCBrdm1fbW11X29wX2hlYWRlciBoZWFkZXI7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBrdm1fbW11X29wX2hlYWRlciBoZWFkZXI7CiB9Owogc3RydWN0IGt2bV9tbXVfb3BfcmVsZWFzZV9wdCB7CiAgc3RydWN0IGt2bV9tbXVfb3BfaGVhZGVyIGhlYWRlcjsKLSBfX3U2NCBwdF9waHlzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBwdF9waHlzOwogfTsKICNkZWZpbmUgS1ZNX1BWX1JFQVNPTl9QQUdFX05PVF9QUkVTRU5UIDEKICNkZWZpbmUgS1ZNX1BWX1JFQVNPTl9QQUdFX1JFQURZIDIKLXN0cnVjdCBrdm1fdmNwdV9wdl9hcGZfZGF0YSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGt2bV92Y3B1X3B2X2FwZl9kYXRhIHsKICBfX3UzMiByZWFzb247CiAgX191OCBwYWRbNjBdOwogIF9fdTMyIGVuYWJsZWQ7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIEtWTV9QVl9FT0lfQklUIDAKICNkZWZpbmUgS1ZNX1BWX0VPSV9NQVNLICgweDEgPDwgS1ZNX1BWX0VPSV9CSVQpCiAjZGVmaW5lIEtWTV9QVl9FT0lfRU5BQkxFRCBLVk1fUFZfRU9JX01BU0sKLSNkZWZpbmUgS1ZNX1BWX0VPSV9ESVNBQkxFRCAweDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9QVl9FT0lfRElTQUJMRUQgMHgwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vbXNyLWluZGV4LmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL21zci1pbmRleC5oCmluZGV4IGNlNzcyMDUuLjZlNGNhYzcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vbXNyLWluZGV4LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9tc3ItaW5kZXguaApAQCAtMTYxLDM4NyArMTYxLDM5MiBAQAogI2RlZmluZSBNU1JfUFAxX0VORVJHWV9TVEFUVVMgMHgwMDAwMDY0MQogI2RlZmluZSBNU1JfUFAxX1BPTElDWSAweDAwMDAwNjQyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU1JfQ09SRV9DMV9SRVMgMHgwMDAwMDY2MAogI2RlZmluZSBNU1JfQU1ENjRfTUMwX01BU0sgMHhjMDAxMDA0NAogI2RlZmluZSBNU1JfSUEzMl9NQ3hfQ1RMKHgpIChNU1JfSUEzMl9NQzBfQ1RMICsgNCooeCkpCiAjZGVmaW5lIE1TUl9JQTMyX01DeF9TVEFUVVMoeCkgKE1TUl9JQTMyX01DMF9TVEFUVVMgKyA0Kih4KSkKLSNkZWZpbmUgTVNSX0lBMzJfTUN4X0FERFIoeCkgKE1TUl9JQTMyX01DMF9BRERSICsgNCooeCkpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU1JfSUEzMl9NQ3hfQUREUih4KSAoTVNSX0lBMzJfTUMwX0FERFIgKyA0Kih4KSkKICNkZWZpbmUgTVNSX0lBMzJfTUN4X01JU0MoeCkgKE1TUl9JQTMyX01DMF9NSVNDICsgNCooeCkpCiAjZGVmaW5lIE1TUl9BTUQ2NF9NQ3hfTUFTSyh4KSAoTVNSX0FNRDY0X01DMF9NQVNLICsgKHgpKQogI2RlZmluZSBNU1JfSUEzMl9NQzBfQ1RMMiAweDAwMDAwMjgwCi0jZGVmaW5lIE1TUl9JQTMyX01DeF9DVEwyKHgpIChNU1JfSUEzMl9NQzBfQ1RMMiArICh4KSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TUl9JQTMyX01DeF9DVEwyKHgpIChNU1JfSUEzMl9NQzBfQ1RMMiArICh4KSkKICNkZWZpbmUgTVNSX1A2X1BFUkZDVFIwIDB4MDAwMDAwYzEKICNkZWZpbmUgTVNSX1A2X1BFUkZDVFIxIDB4MDAwMDAwYzIKICNkZWZpbmUgTVNSX1A2X0VWTlRTRUwwIDB4MDAwMDAxODYKLSNkZWZpbmUgTVNSX1A2X0VWTlRTRUwxIDB4MDAwMDAxODcKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMSAweDAwMDAwMTg3CiAjZGVmaW5lIE1TUl9LTkNfUEVSRkNUUjAgMHgwMDAwMDAyMAogI2RlZmluZSBNU1JfS05DX1BFUkZDVFIxIDB4MDAwMDAwMjEKICNkZWZpbmUgTVNSX0tOQ19FVk5UU0VMMCAweDAwMDAwMDI4Ci0jZGVmaW5lIE1TUl9LTkNfRVZOVFNFTDEgMHgwMDAwMDAyOQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNSX0tOQ19FVk5UU0VMMSAweDAwMDAwMDI5CisjZGVmaW5lIE1TUl9JQTMyX1BNQzAgMHgwMDAwMDRjMQogI2RlZmluZSBNU1JfQU1ENjRfUEFUQ0hfTEVWRUwgMHgwMDAwMDA4YgogI2RlZmluZSBNU1JfQU1ENjRfVFNDX1JBVElPIDB4YzAwMDAxMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9BTUQ2NF9OQl9DRkcgMHhjMDAxMDAxZgogI2RlZmluZSBNU1JfQU1ENjRfUEFUQ0hfTE9BREVSIDB4YzAwMTAwMjAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9BTUQ2NF9PU1ZXX0lEX0xFTkdUSCAweGMwMDEwMTQwCiAjZGVmaW5lIE1TUl9BTUQ2NF9PU1ZXX1NUQVRVUyAweGMwMDEwMTQxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU1JfQU1ENjRfTFNfQ0ZHIDB4YzAwMTEwMjAKICNkZWZpbmUgTVNSX0FNRDY0X0RDX0NGRyAweGMwMDExMDIyCiAjZGVmaW5lIE1TUl9BTUQ2NF9CVV9DRkcyIDB4YzAwMTEwMmEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNGRVRDSENUTCAweGMwMDExMDMwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfQU1ENjRfSUJTRkVUQ0hMSU5BRCAweGMwMDExMDMxCiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNGRVRDSFBIWVNBRCAweGMwMDExMDMyCiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNGRVRDSF9SRUdfQ09VTlQgMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0FNRDY0X0lCU0ZFVENIX1JFR19NQVNLICgoMVVMPDxNU1JfQU1ENjRfSUJTRkVUQ0hfUkVHX0NPVU5UKS0xKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0FNRDY0X0lCU09QQ1RMIDB4YzAwMTEwMzMKICNkZWZpbmUgTVNSX0FNRDY0X0lCU09QUklQIDB4YzAwMTEwMzQKICNkZWZpbmUgTVNSX0FNRDY0X0lCU09QREFUQSAweGMwMDExMDM1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BEQVRBMiAweGMwMDExMDM2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BEQVRBMyAweGMwMDExMDM3CiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNEQ0xJTkFEIDB4YzAwMTEwMzgKICNkZWZpbmUgTVNSX0FNRDY0X0lCU0RDUEhZU0FEIDB4YzAwMTEwMzkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNPUF9SRUdfQ09VTlQgNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0FNRDY0X0lCU09QX1JFR19NQVNLICgoMVVMPDxNU1JfQU1ENjRfSUJTT1BfUkVHX0NPVU5UKS0xKQogI2RlZmluZSBNU1JfQU1ENjRfSUJTQ1RMIDB4YzAwMTEwM2EKICNkZWZpbmUgTVNSX0FNRDY0X0lCU0JSVEFSR0VUIDB4YzAwMTEwM2IKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNfUkVHX0NPVU5UX01BWCA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfRjE2SF9MMklfUEVSRl9DVEwgMHhjMDAxMDIzMAogI2RlZmluZSBNU1JfRjE2SF9MMklfUEVSRl9DVFIgMHhjMDAxMDIzMQogI2RlZmluZSBNU1JfRjE1SF9QRVJGX0NUTCAweGMwMDEwMjAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfRjE1SF9QRVJGX0NUUiAweGMwMDEwMjAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfRjE1SF9OQl9QRVJGX0NUTCAweGMwMDEwMjQwCiAjZGVmaW5lIE1TUl9GMTVIX05CX1BFUkZfQ1RSIDB4YzAwMTAyNDEKICNkZWZpbmUgTVNSX0ZBTTEwSF9NTUlPX0NPTkZfQkFTRSAweGMwMDEwMDU4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGQU0xMEhfTU1JT19DT05GX0VOQUJMRSAoMTw8MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZBTTEwSF9NTUlPX0NPTkZfQlVTUkFOR0VfTUFTSyAweGYKICNkZWZpbmUgRkFNMTBIX01NSU9fQ09ORl9CVVNSQU5HRV9TSElGVCAyCiAjZGVmaW5lIEZBTTEwSF9NTUlPX0NPTkZfQkFTRV9NQVNLIDB4ZmZmZmZmZlVMTAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkFNMTBIX01NSU9fQ09ORl9CQVNFX1NISUZUIDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfRkFNMTBIX05PREVfSUQgMHhjMDAxMTAwYwogI2RlZmluZSBNU1JfSzhfVE9QX01FTTEgMHhjMDAxMDAxYQogI2RlZmluZSBNU1JfSzhfVE9QX01FTTIgMHhjMDAxMDAxZAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0s4X1NZU0NGRyAweGMwMDEwMDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSzhfSU5UX1BFTkRJTkdfTVNHIDB4YzAwMTAwNTUKICNkZWZpbmUgSzhfSU5UUF9DMUVfQUNUSVZFX01BU0sgMHgxODAwMDAwMAogI2RlZmluZSBNU1JfSzhfVFNFR19BRERSIDB4YzAwMTAxMTIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEs4X01UUlJGSVhSQU5HRV9EUkFNX0VOQUJMRSAweDAwMDQwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLOF9NVFJSRklYUkFOR0VfRFJBTV9NT0RJRlkgMHgwMDA4MDAwMAogI2RlZmluZSBLOF9NVFJSX1JETUVNX1dSTUVNX01BU0sgMHgxODE4MTgxOAogI2RlZmluZSBNU1JfSzdfRVZOVFNFTDAgMHhjMDAxMDAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0s3X1BFUkZDVFIwIDB4YzAwMTAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9LN19FVk5UU0VMMSAweGMwMDEwMDAxCiAjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMSAweGMwMDEwMDA1CiAjZGVmaW5lIE1TUl9LN19FVk5UU0VMMiAweGMwMDEwMDAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSzdfUEVSRkNUUjIgMHhjMDAxMDAwNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0s3X0VWTlRTRUwzIDB4YzAwMTAwMDMKICNkZWZpbmUgTVNSX0s3X1BFUkZDVFIzIDB4YzAwMTAwMDcKICNkZWZpbmUgTVNSX0s3X0NMS19DVEwgMHhjMDAxMDAxYgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0s3X0hXQ1IgMHhjMDAxMDAxNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0s3X0ZJRF9WSURfQ1RMIDB4YzAwMTAwNDEKICNkZWZpbmUgTVNSX0s3X0ZJRF9WSURfU1RBVFVTIDB4YzAwMTAwNDIKICNkZWZpbmUgTVNSX0s2X1dIQ1IgMHhjMDAwMDA4MgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0s2X1VXQ0NSIDB4YzAwMDAwODUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9LNl9FUE1SIDB4YzAwMDAwODYKICNkZWZpbmUgTVNSX0s2X1BTT1IgMHhjMDAwMDA4NwogI2RlZmluZSBNU1JfSzZfUEZJUiAweGMwMDAwMDg4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSURUX0ZDUjEgMHgwMDAwMDEwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lEVF9GQ1IyIDB4MDAwMDAxMDgKICNkZWZpbmUgTVNSX0lEVF9GQ1IzIDB4MDAwMDAxMDkKICNkZWZpbmUgTVNSX0lEVF9GQ1I0IDB4MDAwMDAxMGEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JRFRfTUNSMCAweDAwMDAwMTEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSURUX01DUjEgMHgwMDAwMDExMQogI2RlZmluZSBNU1JfSURUX01DUjIgMHgwMDAwMDExMgogI2RlZmluZSBNU1JfSURUX01DUjMgMHgwMDAwMDExMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lEVF9NQ1I0IDB4MDAwMDAxMTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JRFRfTUNSNSAweDAwMDAwMTE1CiAjZGVmaW5lIE1TUl9JRFRfTUNSNiAweDAwMDAwMTE2CiAjZGVmaW5lIE1TUl9JRFRfTUNSNyAweDAwMDAwMTE3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSURUX01DUl9DVFJMIDB4MDAwMDAxMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9WSUFfRkNSIDB4MDAwMDExMDcKICNkZWZpbmUgTVNSX1ZJQV9MT05HSEFVTCAweDAwMDAxMTBhCiAjZGVmaW5lIE1TUl9WSUFfUk5HIDB4MDAwMDExMGIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9WSUFfQkNSMiAweDAwMDAxMTQ3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfVE1UQV9MT05HUlVOX0NUUkwgMHg4MDg2ODAxMAogI2RlZmluZSBNU1JfVE1UQV9MT05HUlVOX0ZMQUdTIDB4ODA4NjgwMTEKICNkZWZpbmUgTVNSX1RNVEFfTFJUSV9SRUFET1VUIDB4ODA4NjgwMTgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9UTVRBX0xSVElfVk9MVF9NSFogMHg4MDg2ODAxYQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfUDVfTUNfQUREUiAweDAwMDAwMDAwCiAjZGVmaW5lIE1TUl9JQTMyX1A1X01DX1RZUEUgMHgwMDAwMDAwMQogI2RlZmluZSBNU1JfSUEzMl9UU0MgMHgwMDAwMDAxMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfUExBVEZPUk1fSUQgMHgwMDAwMDAxNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfRUJMX0NSX1BPV0VST04gMHgwMDAwMDAyYQogI2RlZmluZSBNU1JfRUJDX0ZSRVFVRU5DWV9JRCAweDAwMDAwMDJjCiAjZGVmaW5lIE1TUl9TTUlfQ09VTlQgMHgwMDAwMDAzNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MIDB4MDAwMDAwM2EKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1RTQ19BREpVU1QgMHgwMDAwMDAzYgogI2RlZmluZSBGRUFUVVJFX0NPTlRST0xfTE9DS0VEICgxPDwwKQogI2RlZmluZSBGRUFUVVJFX0NPTlRST0xfVk1YT05fRU5BQkxFRF9JTlNJREVfU01YICgxPDwxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkVBVFVSRV9DT05UUk9MX1ZNWE9OX0VOQUJMRURfT1VUU0lERV9TTVggKDE8PDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRSAweDAwMDAwMDFiCiAjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFX0JTUCAoMTw8OCkKICNkZWZpbmUgTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFICgxPDwxMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFX0JBU0UgKDB4ZmZmZmY8PDEyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfVFNDREVBRExJTkUgMHgwMDAwMDZlMAogI2RlZmluZSBNU1JfSUEzMl9VQ09ERV9XUklURSAweDAwMDAwMDc5CiAjZGVmaW5lIE1TUl9JQTMyX1VDT0RFX1JFViAweDAwMDAwMDhiCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9QRVJGX1NUQVRVUyAweDAwMDAwMTk4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9QRVJGX0NUTCAweDAwMDAwMTk5CiAjZGVmaW5lIE1TUl9BTURfUFNUQVRFX0RFRl9CQVNFIDB4YzAwMTAwNjQKICNkZWZpbmUgTVNSX0FNRF9QRVJGX1NUQVRVUyAweGMwMDEwMDYzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfQU1EX1BFUkZfQ1RMIDB4YzAwMTAwNjIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX01QRVJGIDB4MDAwMDAwZTcKICNkZWZpbmUgTVNSX0lBMzJfQVBFUkYgMHgwMDAwMDBlOAogI2RlZmluZSBNU1JfSUEzMl9USEVSTV9DT05UUk9MIDB4MDAwMDAxOWEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0lOVEVSUlVQVCAweDAwMDAwMTliCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSEVSTV9JTlRfSElHSF9FTkFCTEUgKDEgPDwgMCkKICNkZWZpbmUgVEhFUk1fSU5UX0xPV19FTkFCTEUgKDEgPDwgMSkKICNkZWZpbmUgVEhFUk1fSU5UX1BMTl9FTkFCTEUgKDEgPDwgMjQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9USEVSTV9TVEFUVVMgMHgwMDAwMDE5YworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVEhFUk1fU1RBVFVTX1BST0NIT1QgKDEgPDwgMCkKICNkZWZpbmUgVEhFUk1fU1RBVFVTX1BPV0VSX0xJTUlUICgxIDw8IDEwKQogI2RlZmluZSBNU1JfVEhFUk0yX0NUTCAweDAwMDAwMTlkCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfVEhFUk0yX0NUTF9UTV9TRUxFQ1QgKDFVTEwgPDwgMTYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRSAweDAwMDAwMWEwCiAjZGVmaW5lIE1TUl9JQTMyX1RFTVBFUkFUVVJFX1RBUkdFVCAweDAwMDAwMWEyCiAjZGVmaW5lIE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVMgMHgwMDAwMDFiMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRU5FUkdZX1BFUkZfQklBU19QRVJGT1JNQU5DRSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFTkVSR1lfUEVSRl9CSUFTX05PUk1BTCA2CiAjZGVmaW5lIEVORVJHWV9QRVJGX0JJQVNfUE9XRVJTQVZFIDE1CiAjZGVmaW5lIE1TUl9JQTMyX1BBQ0tBR0VfVEhFUk1fU1RBVFVTIDB4MDAwMDAxYjEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBBQ0tBR0VfVEhFUk1fU1RBVFVTX1BST0NIT1QgKDEgPDwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBBQ0tBR0VfVEhFUk1fU1RBVFVTX1BPV0VSX0xJTUlUICgxIDw8IDEwKQogI2RlZmluZSBNU1JfSUEzMl9QQUNLQUdFX1RIRVJNX0lOVEVSUlVQVCAweDAwMDAwMWIyCiAjZGVmaW5lIFBBQ0tBR0VfVEhFUk1fSU5UX0hJR0hfRU5BQkxFICgxIDw8IDApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQUNLQUdFX1RIRVJNX0lOVF9MT1dfRU5BQkxFICgxIDw8IDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQUNLQUdFX1RIRVJNX0lOVF9QTE5fRU5BQkxFICgxIDw8IDI0KQogI2RlZmluZSBUSEVSTV9JTlRfVEhSRVNIT0xEMF9FTkFCTEUgKDEgPDwgMTUpCiAjZGVmaW5lIFRIRVJNX1NISUZUX1RIUkVTSE9MRDAgOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVEhFUk1fTUFTS19USFJFU0hPTEQwICgweDdmIDw8IFRIRVJNX1NISUZUX1RIUkVTSE9MRDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSEVSTV9JTlRfVEhSRVNIT0xEMV9FTkFCTEUgKDEgPDwgMjMpCiAjZGVmaW5lIFRIRVJNX1NISUZUX1RIUkVTSE9MRDEgMTYKICNkZWZpbmUgVEhFUk1fTUFTS19USFJFU0hPTEQxICgweDdmIDw8IFRIRVJNX1NISUZUX1RIUkVTSE9MRDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSEVSTV9TVEFUVVNfVEhSRVNIT0xEMCAoMSA8PCA2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVEhFUk1fTE9HX1RIUkVTSE9MRDAgKDEgPDwgNykKICNkZWZpbmUgVEhFUk1fU1RBVFVTX1RIUkVTSE9MRDEgKDEgPDwgOCkKICNkZWZpbmUgVEhFUk1fTE9HX1RIUkVTSE9MRDEgKDEgPDwgOSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0ZBU1RfU1RSSU5HICgxVUxMIDw8IDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9UQ0MgKDFVTEwgPDwgMSkKICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRU1PTiAoMVVMTCA8PCA3KQogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9CVFNfVU5BVkFJTCAoMVVMTCA8PCAxMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1BFQlNfVU5BVkFJTCAoMVVMTCA8PCAxMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0VOSEFOQ0VEX1NQRUVEU1RFUCAoMVVMTCA8PCAxNikKICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfTVdBSVQgKDFVTEwgPDwgMTgpCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0xJTUlUX0NQVUlEICgxVUxMIDw8IDIyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfWFRQUl9ESVNBQkxFICgxVUxMIDw8IDIzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfWERfRElTQUJMRSAoMVVMTCA8PCAzNCkKICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfWDg3X0NPTVBBVCAoMVVMTCA8PCAyKQogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9UTTEgKDFVTEwgPDwgMykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1NQTElUX0xPQ0tfRElTQUJMRSAoMVVMTCA8PCA0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfTDNDQUNIRV9ESVNBQkxFICgxVUxMIDw8IDYpCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1NVUFBSRVNTX0xPQ0sgKDFVTEwgPDwgOCkKICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfUFJFRkVUQ0hfRElTQUJMRSAoMVVMTCA8PCA5KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRkVSUiAoMVVMTCA8PCAxMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0ZFUlJfTVVMVElQTEVYICgxVUxMIDw8IDEwKQogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9UTTIgKDFVTEwgPDwgMTMpCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0FESl9QUkVGX0RJU0FCTEUgKDFVTEwgPDwgMTkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9TUEVFRFNURVBfTE9DSyAoMVVMTCA8PCAyMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0wxRF9DT05URVhUICgxVUxMIDw8IDI0KQogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9EQ1VfUFJFRl9ESVNBQkxFICgxVUxMIDw8IDM3KQogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9UVVJCT19ESVNBQkxFICgxVUxMIDw8IDM4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfSVBfUFJFRl9ESVNBQkxFICgxVUxMIDw8IDM5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfVFNDX0RFQURMSU5FIDB4MDAwMDA2RTAKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VBWCAweDAwMDAwMTgwCiAjZGVmaW5lIE1TUl9JQTMyX01DR19FQlggMHgwMDAwMDE4MQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VDWCAweDAwMDAwMTgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9NQ0dfRURYIDB4MDAwMDAxODMKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VTSSAweDAwMDAwMTg0CiAjZGVmaW5lIE1TUl9JQTMyX01DR19FREkgMHgwMDAwMDE4NQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VCUCAweDAwMDAwMTg2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9NQ0dfRVNQIDB4MDAwMDAxODcKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VGTEFHUyAweDAwMDAwMTg4CiAjZGVmaW5lIE1TUl9JQTMyX01DR19FSVAgMHgwMDAwMDE4OQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUNHX1JFU0VSVkVEIDB4MDAwMDAxOGEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9CUFVfUEVSRkNUUjAgMHgwMDAwMDMwMAogI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIxIDB4MDAwMDAzMDEKICNkZWZpbmUgTVNSX1A0X0JQVV9QRVJGQ1RSMiAweDAwMDAwMzAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIzIDB4MDAwMDAzMDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMCAweDAwMDAwMzA0CiAjZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMSAweDAwMDAwMzA1CiAjZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMiAweDAwMDAwMzA2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjMgMHgwMDAwMDMwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIwIDB4MDAwMDAzMDgKICNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIxIDB4MDAwMDAzMDkKICNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIyIDB4MDAwMDAzMGEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9GTEFNRV9QRVJGQ1RSMyAweDAwMDAwMzBiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjAgMHgwMDAwMDMwYwogI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjEgMHgwMDAwMDMwZAogI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjIgMHgwMDAwMDMwZQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIzIDB4MDAwMDAzMGYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSNCAweDAwMDAwMzEwCiAjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSNSAweDAwMDAwMzExCiAjZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjAgMHgwMDAwMDM2MAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0JQVV9DQ0NSMSAweDAwMDAwMzYxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IyIDB4MDAwMDAzNjIKICNkZWZpbmUgTVNSX1A0X0JQVV9DQ0NSMyAweDAwMDAwMzYzCiAjZGVmaW5lIE1TUl9QNF9NU19DQ0NSMCAweDAwMDAwMzY0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfTVNfQ0NDUjEgMHgwMDAwMDM2NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X01TX0NDQ1IyIDB4MDAwMDAzNjYKICNkZWZpbmUgTVNSX1A0X01TX0NDQ1IzIDB4MDAwMDAzNjcKICNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IwIDB4MDAwMDAzNjgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMSAweDAwMDAwMzY5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjIgMHgwMDAwMDM2YQogI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjMgMHgwMDAwMDM2YgogI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjAgMHgwMDAwMDM2YwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IxIDB4MDAwMDAzNmQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMiAweDAwMDAwMzZlCiAjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMyAweDAwMDAwMzZmCiAjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSNCAweDAwMDAwMzcwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjUgMHgwMDAwMDM3MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0FMRl9FU0NSMCAweDAwMDAwM2NhCiAjZGVmaW5lIE1TUl9QNF9BTEZfRVNDUjEgMHgwMDAwMDNjYgogI2RlZmluZSBNU1JfUDRfQlBVX0VTQ1IwIDB4MDAwMDAzYjIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9CUFVfRVNDUjEgMHgwMDAwMDNiMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0JTVV9FU0NSMCAweDAwMDAwM2EwCiAjZGVmaW5lIE1TUl9QNF9CU1VfRVNDUjEgMHgwMDAwMDNhMQogI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IwIDB4MDAwMDAzYjgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjEgMHgwMDAwMDNiOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMiAweDAwMDAwM2NjCiAjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjMgMHgwMDAwMDNjZAogI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1I0IDB4MDAwMDAzZTAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjUgMHgwMDAwMDNlMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0RBQ19FU0NSMCAweDAwMDAwM2E4CiAjZGVmaW5lIE1TUl9QNF9EQUNfRVNDUjEgMHgwMDAwMDNhOQogI2RlZmluZSBNU1JfUDRfRklSTV9FU0NSMCAweDAwMDAwM2E0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfRklSTV9FU0NSMSAweDAwMDAwM2E1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfRkxBTUVfRVNDUjAgMHgwMDAwMDNhNgogI2RlZmluZSBNU1JfUDRfRkxBTUVfRVNDUjEgMHgwMDAwMDNhNwogI2RlZmluZSBNU1JfUDRfRlNCX0VTQ1IwIDB4MDAwMDAzYTIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9GU0JfRVNDUjEgMHgwMDAwMDNhMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0lRX0VTQ1IwIDB4MDAwMDAzYmEKICNkZWZpbmUgTVNSX1A0X0lRX0VTQ1IxIDB4MDAwMDAzYmIKICNkZWZpbmUgTVNSX1A0X0lTX0VTQ1IwIDB4MDAwMDAzYjQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9JU19FU0NSMSAweDAwMDAwM2I1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfSVRMQl9FU0NSMCAweDAwMDAwM2I2CiAjZGVmaW5lIE1TUl9QNF9JVExCX0VTQ1IxIDB4MDAwMDAzYjcKICNkZWZpbmUgTVNSX1A0X0lYX0VTQ1IwIDB4MDAwMDAzYzgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9JWF9FU0NSMSAweDAwMDAwM2M5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfTU9CX0VTQ1IwIDB4MDAwMDAzYWEKICNkZWZpbmUgTVNSX1A0X01PQl9FU0NSMSAweDAwMDAwM2FiCiAjZGVmaW5lIE1TUl9QNF9NU19FU0NSMCAweDAwMDAwM2MwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfTVNfRVNDUjEgMHgwMDAwMDNjMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X1BNSF9FU0NSMCAweDAwMDAwM2FjCiAjZGVmaW5lIE1TUl9QNF9QTUhfRVNDUjEgMHgwMDAwMDNhZAogI2RlZmluZSBNU1JfUDRfUkFUX0VTQ1IwIDB4MDAwMDAzYmMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9SQVRfRVNDUjEgMHgwMDAwMDNiZAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X1NBQVRfRVNDUjAgMHgwMDAwMDNhZQogI2RlZmluZSBNU1JfUDRfU0FBVF9FU0NSMSAweDAwMDAwM2FmCiAjZGVmaW5lIE1TUl9QNF9TU1VfRVNDUjAgMHgwMDAwMDNiZQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X1NTVV9FU0NSMSAweDAwMDAwM2JmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfVEJQVV9FU0NSMCAweDAwMDAwM2MyCiAjZGVmaW5lIE1TUl9QNF9UQlBVX0VTQ1IxIDB4MDAwMDAzYzMKICNkZWZpbmUgTVNSX1A0X1RDX0VTQ1IwIDB4MDAwMDAzYzQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9UQ19FU0NSMSAweDAwMDAwM2M1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfVTJMX0VTQ1IwIDB4MDAwMDAzYjAKICNkZWZpbmUgTVNSX1A0X1UyTF9FU0NSMSAweDAwMDAwM2IxCiAjZGVmaW5lIE1TUl9QNF9QRUJTX01BVFJJWF9WRVJUIDB4MDAwMDAzZjIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMCAweDAwMDAwMzA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjEgMHgwMDAwMDMwYQogI2RlZmluZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjIgMHgwMDAwMDMwYgogI2RlZmluZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMIDB4MDAwMDAzOGQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9DT1JFX1BFUkZfR0xPQkFMX1NUQVRVUyAweDAwMDAwMzhlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMIDB4MDAwMDAzOGYKICNkZWZpbmUgTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwgMHgwMDAwMDM5MAogI2RlZmluZSBNU1JfR0VPREVfQlVTQ09OVF9DT05GMCAweDAwMDAxOTAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9WTVhfQkFTSUMgMHgwMDAwMDQ4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfVk1YX1BJTkJBU0VEX0NUTFMgMHgwMDAwMDQ4MQogI2RlZmluZSBNU1JfSUEzMl9WTVhfUFJPQ0JBU0VEX0NUTFMgMHgwMDAwMDQ4MgogI2RlZmluZSBNU1JfSUEzMl9WTVhfRVhJVF9DVExTIDB4MDAwMDA0ODMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9FTlRSWV9DVExTIDB4MDAwMDA0ODQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9NSVNDIDB4MDAwMDA0ODUKICNkZWZpbmUgTVNSX0lBMzJfVk1YX0NSMF9GSVhFRDAgMHgwMDAwMDQ4NgogI2RlZmluZSBNU1JfSUEzMl9WTVhfQ1IwX0ZJWEVEMSAweDAwMDAwNDg3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9WTVhfQ1I0X0ZJWEVEMCAweDAwMDAwNDg4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9WTVhfQ1I0X0ZJWEVEMSAweDAwMDAwNDg5CiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9WTUNTX0VOVU0gMHgwMDAwMDQ4YQogI2RlZmluZSBNU1JfSUEzMl9WTVhfUFJPQ0JBU0VEX0NUTFMyIDB4MDAwMDA0OGIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9FUFRfVlBJRF9DQVAgMHgwMDAwMDQ4YworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfVk1YX1RSVUVfUElOQkFTRURfQ1RMUyAweDAwMDAwNDhkCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9UUlVFX1BST0NCQVNFRF9DVExTIDB4MDAwMDA0OGUKICNkZWZpbmUgTVNSX0lBMzJfVk1YX1RSVUVfRVhJVF9DVExTIDB4MDAwMDA0OGYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9UUlVFX0VOVFJZX0NUTFMgMHgwMDAwMDQ5MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNSX0lBMzJfVk1YX1ZNRlVOQyAweDAwMDAwNDkxCiAjZGVmaW5lIFZNWF9CQVNJQ19WTUNTX1NJWkVfU0hJRlQgMzIKICNkZWZpbmUgVk1YX0JBU0lDXzY0IDB4MDAwMTAwMDAwMDAwMDAwMExMVQogI2RlZmluZSBWTVhfQkFTSUNfTUVNX1RZUEVfU0hJRlQgNTAKQEAgLTU1MSw4ICs1NTYsOSBAQAogI2RlZmluZSBWTVhfQkFTSUNfSU5PVVQgMHgwMDQwMDAwMDAwMDAwMDAwTExVCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9NSVNDX1ZNV1JJVEVfU0hBRE9XX1JPX0ZJRUxEUyAoMVVMTCA8PCAyOSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TUl9JQTMyX1ZNWF9NSVNDX1BSRUVNUFRJT05fVElNRVJfU0NBTEUgMHgxRgogI2RlZmluZSBNU1JfVk1fQ1IgMHhjMDAxMDExNAogI2RlZmluZSBNU1JfVk1fSUdOTkUgMHhjMDAxMDExNQogI2RlZmluZSBNU1JfVk1fSFNBVkVfUEEgMHhjMDAxMDExNwotI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3Byb2Nlc3Nvci1mbGFncy5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9wcm9jZXNzb3ItZmxhZ3MuaAppbmRleCBhYzYwMmE3Li5hZWFkNzc5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3Byb2Nlc3Nvci1mbGFncy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vcHJvY2Vzc29yLWZsYWdzLmgKQEAgLTE4LDg2ICsxOCwxNTIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfVUFQSV9BU01fWDg2X1BST0NFU1NPUl9GTEFHU19ICiAjZGVmaW5lIF9VQVBJX0FTTV9YODZfUFJPQ0VTU09SX0ZMQUdTX0gKLSNkZWZpbmUgWDg2X0VGTEFHU19DRiAweDAwMDAwMDAxCi0jZGVmaW5lIFg4Nl9FRkxBR1NfQklUMSAweDAwMDAwMDAyCisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KKyNkZWZpbmUgWDg2X0VGTEFHU19DRl9CSVQgMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgWDg2X0VGTEFHU19QRiAweDAwMDAwMDA0Ci0jZGVmaW5lIFg4Nl9FRkxBR1NfQUYgMHgwMDAwMDAxMAotI2RlZmluZSBYODZfRUZMQUdTX1pGIDB4MDAwMDAwNDAKLSNkZWZpbmUgWDg2X0VGTEFHU19TRiAweDAwMDAwMDgwCisjZGVmaW5lIFg4Nl9FRkxBR1NfQ0YgX0JJVFVMKFg4Nl9FRkxBR1NfQ0ZfQklUKQorI2RlZmluZSBYODZfRUZMQUdTX0ZJWEVEX0JJVCAxCisjZGVmaW5lIFg4Nl9FRkxBR1NfRklYRUQgX0JJVFVMKFg4Nl9FRkxBR1NfRklYRURfQklUKQorI2RlZmluZSBYODZfRUZMQUdTX1BGX0JJVCAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBYODZfRUZMQUdTX1RGIDB4MDAwMDAxMDAKLSNkZWZpbmUgWDg2X0VGTEFHU19JRiAweDAwMDAwMjAwCi0jZGVmaW5lIFg4Nl9FRkxBR1NfREYgMHgwMDAwMDQwMAotI2RlZmluZSBYODZfRUZMQUdTX09GIDB4MDAwMDA4MDAKKyNkZWZpbmUgWDg2X0VGTEFHU19QRiBfQklUVUwoWDg2X0VGTEFHU19QRl9CSVQpCisjZGVmaW5lIFg4Nl9FRkxBR1NfQUZfQklUIDQKKyNkZWZpbmUgWDg2X0VGTEFHU19BRiBfQklUVUwoWDg2X0VGTEFHU19BRl9CSVQpCisjZGVmaW5lIFg4Nl9FRkxBR1NfWkZfQklUIDYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFg4Nl9FRkxBR1NfSU9QTCAweDAwMDAzMDAwCi0jZGVmaW5lIFg4Nl9FRkxBR1NfTlQgMHgwMDAwNDAwMAotI2RlZmluZSBYODZfRUZMQUdTX1JGIDB4MDAwMTAwMDAKLSNkZWZpbmUgWDg2X0VGTEFHU19WTSAweDAwMDIwMDAwCisjZGVmaW5lIFg4Nl9FRkxBR1NfWkYgX0JJVFVMKFg4Nl9FRkxBR1NfWkZfQklUKQorI2RlZmluZSBYODZfRUZMQUdTX1NGX0JJVCA3CisjZGVmaW5lIFg4Nl9FRkxBR1NfU0YgX0JJVFVMKFg4Nl9FRkxBR1NfU0ZfQklUKQorI2RlZmluZSBYODZfRUZMQUdTX1RGX0JJVCA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBYODZfRUZMQUdTX0FDIDB4MDAwNDAwMDAKLSNkZWZpbmUgWDg2X0VGTEFHU19WSUYgMHgwMDA4MDAwMAotI2RlZmluZSBYODZfRUZMQUdTX1ZJUCAweDAwMTAwMDAwCi0jZGVmaW5lIFg4Nl9FRkxBR1NfSUQgMHgwMDIwMDAwMAorI2RlZmluZSBYODZfRUZMQUdTX1RGIF9CSVRVTChYODZfRUZMQUdTX1RGX0JJVCkKKyNkZWZpbmUgWDg2X0VGTEFHU19JRl9CSVQgOQorI2RlZmluZSBYODZfRUZMQUdTX0lGIF9CSVRVTChYODZfRUZMQUdTX0lGX0JJVCkKKyNkZWZpbmUgWDg2X0VGTEFHU19ERl9CSVQgMTAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFg4Nl9DUjBfUEUgMHgwMDAwMDAwMQotI2RlZmluZSBYODZfQ1IwX01QIDB4MDAwMDAwMDIKLSNkZWZpbmUgWDg2X0NSMF9FTSAweDAwMDAwMDA0Ci0jZGVmaW5lIFg4Nl9DUjBfVFMgMHgwMDAwMDAwOAorI2RlZmluZSBYODZfRUZMQUdTX0RGIF9CSVRVTChYODZfRUZMQUdTX0RGX0JJVCkKKyNkZWZpbmUgWDg2X0VGTEFHU19PRl9CSVQgMTEKKyNkZWZpbmUgWDg2X0VGTEFHU19PRiBfQklUVUwoWDg2X0VGTEFHU19PRl9CSVQpCisjZGVmaW5lIFg4Nl9FRkxBR1NfSU9QTF9CSVQgMTIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFg4Nl9DUjBfRVQgMHgwMDAwMDAxMAotI2RlZmluZSBYODZfQ1IwX05FIDB4MDAwMDAwMjAKLSNkZWZpbmUgWDg2X0NSMF9XUCAweDAwMDEwMDAwCi0jZGVmaW5lIFg4Nl9DUjBfQU0gMHgwMDA0MDAwMAorI2RlZmluZSBYODZfRUZMQUdTX0lPUEwgKF9BQygzLFVMKSA8PCBYODZfRUZMQUdTX0lPUExfQklUKQorI2RlZmluZSBYODZfRUZMQUdTX05UX0JJVCAxNAorI2RlZmluZSBYODZfRUZMQUdTX05UIF9CSVRVTChYODZfRUZMQUdTX05UX0JJVCkKKyNkZWZpbmUgWDg2X0VGTEFHU19SRl9CSVQgMTYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFg4Nl9DUjBfTlcgMHgyMDAwMDAwMAotI2RlZmluZSBYODZfQ1IwX0NEIDB4NDAwMDAwMDAKLSNkZWZpbmUgWDg2X0NSMF9QRyAweDgwMDAwMDAwCi0jZGVmaW5lIFg4Nl9DUjNfUFdUIDB4MDAwMDAwMDgKKyNkZWZpbmUgWDg2X0VGTEFHU19SRiBfQklUVUwoWDg2X0VGTEFHU19SRl9CSVQpCisjZGVmaW5lIFg4Nl9FRkxBR1NfVk1fQklUIDE3CisjZGVmaW5lIFg4Nl9FRkxBR1NfVk0gX0JJVFVMKFg4Nl9FRkxBR1NfVk1fQklUKQorI2RlZmluZSBYODZfRUZMQUdTX0FDX0JJVCAxOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgWDg2X0NSM19QQ0QgMHgwMDAwMDAxMAotI2RlZmluZSBYODZfQ1IzX1BDSURfTUFTSyAweDAwMDAwZmZmCi0jZGVmaW5lIFg4Nl9DUjRfVk1FIDB4MDAwMDAwMDEKLSNkZWZpbmUgWDg2X0NSNF9QVkkgMHgwMDAwMDAwMgorI2RlZmluZSBYODZfRUZMQUdTX0FDIF9CSVRVTChYODZfRUZMQUdTX0FDX0JJVCkKKyNkZWZpbmUgWDg2X0VGTEFHU19BQ19CSVQgMTgKKyNkZWZpbmUgWDg2X0VGTEFHU19BQyBfQklUVUwoWDg2X0VGTEFHU19BQ19CSVQpCisjZGVmaW5lIFg4Nl9FRkxBR1NfVklGX0JJVCAxOQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgWDg2X0NSNF9UU0QgMHgwMDAwMDAwNAotI2RlZmluZSBYODZfQ1I0X0RFIDB4MDAwMDAwMDgKLSNkZWZpbmUgWDg2X0NSNF9QU0UgMHgwMDAwMDAxMAotI2RlZmluZSBYODZfQ1I0X1BBRSAweDAwMDAwMDIwCisjZGVmaW5lIFg4Nl9FRkxBR1NfVklGIF9CSVRVTChYODZfRUZMQUdTX1ZJRl9CSVQpCisjZGVmaW5lIFg4Nl9FRkxBR1NfVklQX0JJVCAyMAorI2RlZmluZSBYODZfRUZMQUdTX1ZJUCBfQklUVUwoWDg2X0VGTEFHU19WSVBfQklUKQorI2RlZmluZSBYODZfRUZMQUdTX0lEX0JJVCAyMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgWDg2X0NSNF9NQ0UgMHgwMDAwMDA0MAotI2RlZmluZSBYODZfQ1I0X1BHRSAweDAwMDAwMDgwCi0jZGVmaW5lIFg4Nl9DUjRfUENFIDB4MDAwMDAxMDAKLSNkZWZpbmUgWDg2X0NSNF9PU0ZYU1IgMHgwMDAwMDIwMAorI2RlZmluZSBYODZfRUZMQUdTX0lEIF9CSVRVTChYODZfRUZMQUdTX0lEX0JJVCkKKyNkZWZpbmUgWDg2X0NSMF9QRV9CSVQgMAorI2RlZmluZSBYODZfQ1IwX1BFIF9CSVRVTChYODZfQ1IwX1BFX0JJVCkKKyNkZWZpbmUgWDg2X0NSMF9NUF9CSVQgMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgWDg2X0NSNF9PU1hNTUVYQ1BUIDB4MDAwMDA0MDAKLSNkZWZpbmUgWDg2X0NSNF9WTVhFIDB4MDAwMDIwMDAKLSNkZWZpbmUgWDg2X0NSNF9SRFdSR1NGUyAweDAwMDEwMDAwCi0jZGVmaW5lIFg4Nl9DUjRfUENJREUgMHgwMDAyMDAwMAorI2RlZmluZSBYODZfQ1IwX01QIF9CSVRVTChYODZfQ1IwX01QX0JJVCkKKyNkZWZpbmUgWDg2X0NSMF9FTV9CSVQgMgorI2RlZmluZSBYODZfQ1IwX0VNIF9CSVRVTChYODZfQ1IwX0VNX0JJVCkKKyNkZWZpbmUgWDg2X0NSMF9UU19CSVQgMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgWDg2X0NSNF9PU1hTQVZFIDB4MDAwNDAwMDAKLSNkZWZpbmUgWDg2X0NSNF9TTUVQIDB4MDAxMDAwMDAKLSNkZWZpbmUgWDg2X0NSNF9TTUFQIDB4MDAyMDAwMDAKLSNkZWZpbmUgWDg2X0NSOF9UUFIgMHgwMDAwMDAwRgorI2RlZmluZSBYODZfQ1IwX1RTIF9CSVRVTChYODZfQ1IwX1RTX0JJVCkKKyNkZWZpbmUgWDg2X0NSMF9FVF9CSVQgNAorI2RlZmluZSBYODZfQ1IwX0VUIF9CSVRVTChYODZfQ1IwX0VUX0JJVCkKKyNkZWZpbmUgWDg2X0NSMF9ORV9CSVQgNQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0NSMF9ORSBfQklUVUwoWDg2X0NSMF9ORV9CSVQpCisjZGVmaW5lIFg4Nl9DUjBfV1BfQklUIDE2CisjZGVmaW5lIFg4Nl9DUjBfV1AgX0JJVFVMKFg4Nl9DUjBfV1BfQklUKQorI2RlZmluZSBYODZfQ1IwX0FNX0JJVCAxOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0NSMF9BTSBfQklUVUwoWDg2X0NSMF9BTV9CSVQpCisjZGVmaW5lIFg4Nl9DUjBfTldfQklUIDI5CisjZGVmaW5lIFg4Nl9DUjBfTlcgX0JJVFVMKFg4Nl9DUjBfTldfQklUKQorI2RlZmluZSBYODZfQ1IwX0NEX0JJVCAzMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0NSMF9DRCBfQklUVUwoWDg2X0NSMF9DRF9CSVQpCisjZGVmaW5lIFg4Nl9DUjBfUEdfQklUIDMxCisjZGVmaW5lIFg4Nl9DUjBfUEcgX0JJVFVMKFg4Nl9DUjBfUEdfQklUKQorI2RlZmluZSBYODZfQ1IzX1BXVF9CSVQgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0NSM19QV1QgX0JJVFVMKFg4Nl9DUjNfUFdUX0JJVCkKKyNkZWZpbmUgWDg2X0NSM19QQ0RfQklUIDQKKyNkZWZpbmUgWDg2X0NSM19QQ0QgX0JJVFVMKFg4Nl9DUjNfUENEX0JJVCkKKyNkZWZpbmUgWDg2X0NSM19QQ0lEX01BU0sgX0FDKDB4MDAwMDBmZmYsVUwpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfQ1I0X1ZNRV9CSVQgMAorI2RlZmluZSBYODZfQ1I0X1ZNRSBfQklUVUwoWDg2X0NSNF9WTUVfQklUKQorI2RlZmluZSBYODZfQ1I0X1BWSV9CSVQgMQorI2RlZmluZSBYODZfQ1I0X1BWSSBfQklUVUwoWDg2X0NSNF9QVklfQklUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0NSNF9UU0RfQklUIDIKKyNkZWZpbmUgWDg2X0NSNF9UU0QgX0JJVFVMKFg4Nl9DUjRfVFNEX0JJVCkKKyNkZWZpbmUgWDg2X0NSNF9ERV9CSVQgMworI2RlZmluZSBYODZfQ1I0X0RFIF9CSVRVTChYODZfQ1I0X0RFX0JJVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9DUjRfUFNFX0JJVCA0CisjZGVmaW5lIFg4Nl9DUjRfUFNFIF9CSVRVTChYODZfQ1I0X1BTRV9CSVQpCisjZGVmaW5lIFg4Nl9DUjRfUEFFX0JJVCA1CisjZGVmaW5lIFg4Nl9DUjRfUEFFIF9CSVRVTChYODZfQ1I0X1BBRV9CSVQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfQ1I0X01DRV9CSVQgNgorI2RlZmluZSBYODZfQ1I0X01DRSBfQklUVUwoWDg2X0NSNF9NQ0VfQklUKQorI2RlZmluZSBYODZfQ1I0X1BHRV9CSVQgNworI2RlZmluZSBYODZfQ1I0X1BHRSBfQklUVUwoWDg2X0NSNF9QR0VfQklUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0NSNF9QQ0VfQklUIDgKKyNkZWZpbmUgWDg2X0NSNF9QQ0UgX0JJVFVMKFg4Nl9DUjRfUENFX0JJVCkKKyNkZWZpbmUgWDg2X0NSNF9PU0ZYU1JfQklUIDkKKyNkZWZpbmUgWDg2X0NSNF9PU0ZYU1IgX0JJVFVMKFg4Nl9DUjRfT1NGWFNSX0JJVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9DUjRfT1NYTU1FWENQVF9CSVQgMTAKKyNkZWZpbmUgWDg2X0NSNF9PU1hNTUVYQ1BUIF9CSVRVTChYODZfQ1I0X09TWE1NRVhDUFRfQklUKQorI2RlZmluZSBYODZfQ1I0X1ZNWEVfQklUIDEzCisjZGVmaW5lIFg4Nl9DUjRfVk1YRSBfQklUVUwoWDg2X0NSNF9WTVhFX0JJVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9DUjRfU01YRV9CSVQgMTQKKyNkZWZpbmUgWDg2X0NSNF9TTVhFIF9CSVRVTChYODZfQ1I0X1NNWEVfQklUKQorI2RlZmluZSBYODZfQ1I0X0ZTR1NCQVNFX0JJVCAxNgorI2RlZmluZSBYODZfQ1I0X0ZTR1NCQVNFIF9CSVRVTChYODZfQ1I0X0ZTR1NCQVNFX0JJVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9DUjRfUENJREVfQklUIDE3CisjZGVmaW5lIFg4Nl9DUjRfUENJREUgX0JJVFVMKFg4Nl9DUjRfUENJREVfQklUKQorI2RlZmluZSBYODZfQ1I0X09TWFNBVkVfQklUIDE4CisjZGVmaW5lIFg4Nl9DUjRfT1NYU0FWRSBfQklUVUwoWDg2X0NSNF9PU1hTQVZFX0JJVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9DUjRfU01FUF9CSVQgMjAKKyNkZWZpbmUgWDg2X0NSNF9TTUVQIF9CSVRVTChYODZfQ1I0X1NNRVBfQklUKQorI2RlZmluZSBYODZfQ1I0X1NNQVBfQklUIDIxCisjZGVmaW5lIFg4Nl9DUjRfU01BUCBfQklUVUwoWDg2X0NSNF9TTUFQX0JJVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9DUjhfVFBSIF9BQygweDAwMDAwMDBmLFVMKQogI2RlZmluZSBDWDg2X1BDUjAgMHgyMAogI2RlZmluZSBDWDg2X0dDUiAweGI4CiAjZGVmaW5lIENYODZfQ0NSMCAweGMwCi0jZGVmaW5lIENYODZfQ0NSMSAweGMxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDWDg2X0NDUjEgMHhjMQogI2RlZmluZSBDWDg2X0NDUjIgMHhjMgogI2RlZmluZSBDWDg2X0NDUjMgMHhjMwogI2RlZmluZSBDWDg2X0NDUjQgMHhlOAotI2RlZmluZSBDWDg2X0NDUjUgMHhlOQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ1g4Nl9DQ1I1IDB4ZTkKICNkZWZpbmUgQ1g4Nl9DQ1I2IDB4ZWEKICNkZWZpbmUgQ1g4Nl9DQ1I3IDB4ZWIKICNkZWZpbmUgQ1g4Nl9QQ1IxIDB4ZjAKLSNkZWZpbmUgQ1g4Nl9ESVIwIDB4ZmUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENYODZfRElSMCAweGZlCiAjZGVmaW5lIENYODZfRElSMSAweGZmCiAjZGVmaW5lIENYODZfQVJSX0JBU0UgMHhjNAogI2RlZmluZSBDWDg2X1JDUl9CQVNFIDB4ZGMKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9zZW1idWYuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vc2VtYnVmLmgKaW5kZXggZDFjYjI5Ni4uNDFkM2IyYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9zZW1idWYuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3NlbWJ1Zi5oCkBAIC0yMiwxMyArMjIsMTMgQEAKICBzdHJ1Y3QgaXBjNjRfcGVybSBzZW1fcGVybTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19rZXJuZWxfdGltZV90IHNlbV9vdGltZTsKLSB1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsKKyBfX2tlcm5lbF91bG9uZ190IF9fdW51c2VkMTsKICBfX2tlcm5lbF90aW1lX3Qgc2VtX2N0aW1lOwotIHVuc2lnbmVkIGxvbmcgX191bnVzZWQyOworIF9fa2VybmVsX3Vsb25nX3QgX191bnVzZWQyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSB1bnNpZ25lZCBsb25nIHNlbV9uc2VtczsKLSB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKLSB1bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKKyBfX2tlcm5lbF91bG9uZ190IHNlbV9uc2VtczsKKyBfX2tlcm5lbF91bG9uZ190IF9fdW51c2VkMzsKKyBfX2tlcm5lbF91bG9uZ190IF9fdW51c2VkNDsKIH07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3NpZ25hbC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9zaWduYWwuaAppbmRleCBiYmE2YmM3Li4zMDhjN2E5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3NpZ25hbC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vc2lnbmFsLmgKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIHN0cnVjdCBzaWdpbmZvOwotI2RlZmluZSBOU0lHIDMyCisjZGVmaW5lIF9LRVJORUxfTlNJRyAzMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBzaWdzZXRfdDsKICNlbmRpZgpAQCAtNzEsOCArNzEsOCBAQAogI2RlZmluZSBTSUdTWVMgMzEKICNkZWZpbmUgU0lHVU5VU0VEIDMxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSUdSVE1JTiAzMgotI2RlZmluZSBTSUdSVE1BWCBfTlNJRworI2RlZmluZSBfX1NJR1JUTUlOIDMyCisjZGVmaW5lIF9fU0lHUlRNQVggX0tFUk5FTF9fTlNJRwogI2RlZmluZSBTQV9OT0NMRFNUT1AgMHgwMDAwMDAwMXUKICNkZWZpbmUgU0FfTk9DTERXQUlUIDB4MDAwMDAwMDJ1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9zdGF0LmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3N0YXQuaAppbmRleCAwOTk4MTA2Li5hZWJhY2JkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3N0YXQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3N0YXQuaApAQCAtMTgsMTE2ICsxOCwxMTcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1g4Nl9TVEFUX0gKICNkZWZpbmUgX0FTTV9YODZfU1RBVF9ICisjaW5jbHVkZSA8YXNtL3Bvc2l4X3R5cGVzLmg+CiAjZGVmaW5lIFNUQVRfSEFWRV9OU0VDIDEKLSNpZmRlZiBfX2kzODZfXwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNpZmRlZiBfX2kzODZfXwogc3RydWN0IHN0YXQgewogIHVuc2lnbmVkIGxvbmcgc3RfZGV2OwogIHVuc2lnbmVkIGxvbmcgc3RfaW5vOwotIHVuc2lnbmVkIHNob3J0IHN0X21vZGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIHNob3J0IHN0X21vZGU7CiAgdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CiAgdW5zaWduZWQgc2hvcnQgc3RfdWlkOwogIHVuc2lnbmVkIHNob3J0IHN0X2dpZDsKLSB1bnNpZ25lZCBsb25nIHN0X3JkZXY7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGxvbmcgc3RfcmRldjsKICB1bnNpZ25lZCBsb25nIHN0X3NpemU7CiAgdW5zaWduZWQgbG9uZyBzdF9ibGtzaXplOwogIHVuc2lnbmVkIGxvbmcgc3RfYmxvY2tzOwotIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7CiAgdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOwogIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7CiAgdW5zaWduZWQgbG9uZyBzdF9tdGltZV9uc2VjOwotIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7CiAgdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ1OwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBJTklUX1NUUlVDVF9TVEFUX1BBRERJTkcoc3QpIGRvIHsgICBzdC5fX3VudXNlZDQgPSAwOyAgIHN0Ll9fdW51c2VkNSA9IDA7ICB9IHdoaWxlICgwKQogI2RlZmluZSBTVEFUNjRfSEFTX0JST0tFTl9TVF9JTk8gMQogc3RydWN0IHN0YXQ2NCB7Ci0gdW5zaWduZWQgbG9uZyBsb25nIHN0X2RldjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgbG9uZyBsb25nIHN0X2RldjsKICB1bnNpZ25lZCBjaGFyIF9fcGFkMFs0XTsKICB1bnNpZ25lZCBsb25nIF9fc3RfaW5vOwogIHVuc2lnbmVkIGludCBzdF9tb2RlOwotIHVuc2lnbmVkIGludCBzdF9ubGluazsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgaW50IHN0X25saW5rOwogIHVuc2lnbmVkIGxvbmcgc3RfdWlkOwogIHVuc2lnbmVkIGxvbmcgc3RfZ2lkOwogIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9yZGV2OwotIHVuc2lnbmVkIGNoYXIgX19wYWQzWzRdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBjaGFyIF9fcGFkM1s0XTsKICBsb25nIGxvbmcgc3Rfc2l6ZTsKICB1bnNpZ25lZCBsb25nIHN0X2Jsa3NpemU7CiAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2Jsb2NrczsKLSB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOwogIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWVfbnNlYzsKICB1bnNpZ25lZCBsb25nIHN0X210aW1lOwogIHVuc2lnbmVkIGludCBzdF9tdGltZV9uc2VjOwotIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7CiAgdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOwogIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9pbm87CiB9OwotI2RlZmluZSBJTklUX1NUUlVDVF9TVEFUNjRfUEFERElORyhzdCkgZG8geyAgIG1lbXNldCgmc3QuX19wYWQwLCAwLCBzaXplb2Yoc3QuX19wYWQwKSk7ICAgbWVtc2V0KCZzdC5fX3BhZDMsIDAsIHNpemVvZihzdC5fX3BhZDMpKTsgIH0gd2hpbGUgKDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJTklUX1NUUlVDVF9TVEFUNjRfUEFERElORyhzdCkgZG8geyAgIG1lbXNldCgmc3QuX19wYWQwLCAwLCBzaXplb2Yoc3QuX19wYWQwKSk7ICAgbWVtc2V0KCZzdC5fX3BhZDMsIDAsIHNpemVvZihzdC5fX3BhZDMpKTsgIH0gd2hpbGUgKDApCiAjZWxzZQogc3RydWN0IHN0YXQgewotIHVuc2lnbmVkIGxvbmcgc3RfZGV2OwotIHVuc2lnbmVkIGxvbmcgc3RfaW5vOworIF9fa2VybmVsX3Vsb25nX3Qgc3RfZGV2OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSB1bnNpZ25lZCBsb25nIHN0X25saW5rOworIF9fa2VybmVsX3Vsb25nX3Qgc3RfaW5vOworIF9fa2VybmVsX3Vsb25nX3Qgc3Rfbmxpbms7CiAgdW5zaWduZWQgaW50IHN0X21vZGU7CiAgdW5zaWduZWQgaW50IHN0X3VpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHN0X2dpZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IF9fcGFkMDsKLSB1bnNpZ25lZCBsb25nIHN0X3JkZXY7Ci0gbG9uZyBzdF9zaXplOwotIGxvbmcgc3RfYmxrc2l6ZTsKKyBfX2tlcm5lbF91bG9uZ190IHN0X3JkZXY7CisgX19rZXJuZWxfbG9uZ190IHN0X3NpemU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIGxvbmcgc3RfYmxvY2tzOwotIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7Ci0gdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOwotIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7CisgX19rZXJuZWxfbG9uZ190IHN0X2Jsa3NpemU7CisgX19rZXJuZWxfbG9uZ190IHN0X2Jsb2NrczsKKyBfX2tlcm5lbF91bG9uZ190IHN0X2F0aW1lOworIF9fa2VybmVsX3Vsb25nX3Qgc3RfYXRpbWVfbnNlYzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gdW5zaWduZWQgbG9uZyBzdF9tdGltZV9uc2VjOwotIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7Ci0gdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOwotIGxvbmcgX19saW51eF91bnVzZWRbM107CisgX19rZXJuZWxfdWxvbmdfdCBzdF9tdGltZTsKKyBfX2tlcm5lbF91bG9uZ190IHN0X210aW1lX25zZWM7CisgX19rZXJuZWxfdWxvbmdfdCBzdF9jdGltZTsKKyBfX2tlcm5lbF91bG9uZ190IHN0X2N0aW1lX25zZWM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fa2VybmVsX2xvbmdfdCBfX2xpbnV4X3VudXNlZFszXTsKIH07Ci0jZGVmaW5lIElOSVRfU1RSVUNUX1NUQVRfUEFERElORyhzdCkgZG8geyAgIHN0Ll9fcGFkMCA9IDA7ICAgc3QuX191bnVzZWRbMF0gPSAwOyAgIHN0Ll9fdW51c2VkWzFdID0gMDsgICBzdC5fX3VudXNlZFsyXSA9IDA7ICB9IHdoaWxlICgwKQorI2RlZmluZSBJTklUX1NUUlVDVF9TVEFUX1BBRERJTkcoc3QpIGRvIHsgICBzdC5fX3BhZDAgPSAwOyAgIHN0Ll9fbGludXhfdW51c2VkWzBdID0gMDsgICBzdC5fX2xpbnV4X3VudXNlZFsxXSA9IDA7ICAgc3QuX19saW51eF91bnVzZWRbMl0gPSAwOyAgfSB3aGlsZSAoMCkKICNlbmRpZgotc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgX19vbGRfa2VybmVsX3N0YXQgewogIHVuc2lnbmVkIHNob3J0IHN0X2RldjsKICB1bnNpZ25lZCBzaG9ydCBzdF9pbm87CiAgdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKLSB1bnNpZ25lZCBzaG9ydCBzdF9ubGluazsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CiAgdW5zaWduZWQgc2hvcnQgc3RfdWlkOwogIHVuc2lnbmVkIHNob3J0IHN0X2dpZDsKICB1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OwotI2lmZGVmIF9faTM4Nl9fCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2lmZGVmIF9faTM4Nl9fCiAgdW5zaWduZWQgbG9uZyBzdF9zaXplOwogIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7CiAgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsKLSB1bnNpZ25lZCBsb25nIHN0X2N0aW1lOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBsb25nIHN0X2N0aW1lOwogI2Vsc2UKICB1bnNpZ25lZCBpbnQgc3Rfc2l6ZTsKICB1bnNpZ25lZCBpbnQgc3RfYXRpbWU7Ci0gdW5zaWduZWQgaW50IHN0X210aW1lOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgc3RfbXRpbWU7CiAgdW5zaWduZWQgaW50IHN0X2N0aW1lOwogI2VuZGlmCiB9OwotI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3VuaXN0ZF8zMi5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS91bmlzdGRfMzIuaAppbmRleCAyZGQ5ZmM3Li40ODM4YWUxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3VuaXN0ZF8zMi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdW5pc3RkXzMyLmgKQEAgLTQ1Miw0ICs0NTIsNyBAQAogI2RlZmluZSBfX05SX2tjbXAgMzQ5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2Zpbml0X21vZHVsZSAzNTAKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhdHRyIDM1MQorI2RlZmluZSBfX05SX3NjaGVkX2dldGF0dHIgMzUyCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3VuaXN0ZF82NC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS91bmlzdGRfNjQuaAppbmRleCBjNTQ1MjgxLi43YmRiMzAxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3VuaXN0ZF82NC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdW5pc3RkXzY0LmgKQEAgLTQxMSw0ICs0MTEsNiBAQAogI2RlZmluZSBfX05SX2tjbXAgMzEyCiAjZGVmaW5lIF9fTlJfZmluaXRfbW9kdWxlIDMxMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhdHRyIDMxNAorI2RlZmluZSBfX05SX3NjaGVkX2dldGF0dHIgMzE1CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdW5pc3RkX3gzMi5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS91bmlzdGRfeDMyLmgKaW5kZXggZTZkMzc3NC4uZWU1MWZiNSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS91bmlzdGRfeDMyLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS91bmlzdGRfeDMyLmgKQEAgLTM1OCw0MyArMzU4LDQ2IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2tjbXAgKF9fWDMyX1NZU0NBTExfQklUICsgMzEyKQogI2RlZmluZSBfX05SX2Zpbml0X21vZHVsZSAoX19YMzJfU1lTQ0FMTF9CSVQgKyAzMTMpCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YXR0ciAoX19YMzJfU1lTQ0FMTF9CSVQgKyAzMTQpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YXR0ciAoX19YMzJfU1lTQ0FMTF9CSVQgKyAzMTUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbiAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MTIpCiAjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuIChfX1gzMl9TWVNDQUxMX0JJVCArIDUxMykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfaW9jdGwgKF9fWDMyX1NZU0NBTExfQklUICsgNTE0KQogI2RlZmluZSBfX05SX3JlYWR2IChfX1gzMl9TWVNDQUxMX0JJVCArIDUxNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfd3JpdGV2IChfX1gzMl9TWVNDQUxMX0JJVCArIDUxNikKICNkZWZpbmUgX19OUl9yZWN2ZnJvbSAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MTcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NlbmRtc2cgKF9fWDMyX1NZU0NBTExfQklUICsgNTE4KQogI2RlZmluZSBfX05SX3JlY3Ztc2cgKF9fWDMyX1NZU0NBTExfQklUICsgNTE5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9leGVjdmUgKF9fWDMyX1NZU0NBTExfQklUICsgNTIwKQogI2RlZmluZSBfX05SX3B0cmFjZSAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MjEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcgKF9fWDMyX1NZU0NBTExfQklUICsgNTIyKQogI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdCAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MjMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbyAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MjQpCiAjZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sgKF9fWDMyX1NZU0NBTExfQklUICsgNTI1KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUgKF9fWDMyX1NZU0NBTExfQklUICsgNTI2KQogI2RlZmluZSBfX05SX21xX25vdGlmeSAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MjcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2tleGVjX2xvYWQgKF9fWDMyX1NZU0NBTExfQklUICsgNTI4KQogI2RlZmluZSBfX05SX3dhaXRpZCAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MjkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdCAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MzApCiAjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0IChfX1gzMl9TWVNDQUxMX0JJVCArIDUzMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdm1zcGxpY2UgKF9fWDMyX1NZU0NBTExfQklUICsgNTMyKQogI2RlZmluZSBfX05SX21vdmVfcGFnZXMgKF9fWDMyX1NZU0NBTExfQklUICsgNTMzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9wcmVhZHYgKF9fWDMyX1NZU0NBTExfQklUICsgNTM0KQogI2RlZmluZSBfX05SX3B3cml0ZXYgKF9fWDMyX1NZU0NBTExfQklUICsgNTM1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbyAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MzYpCiAjZGVmaW5lIF9fTlJfcmVjdm1tc2cgKF9fWDMyX1NZU0NBTExfQklUICsgNTM3KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZW5kbW1zZyAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MzgpCiAjZGVmaW5lIF9fTlJfcHJvY2Vzc192bV9yZWFkdiAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MzkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3Byb2Nlc3Nfdm1fd3JpdGV2IChfX1gzMl9TWVNDQUxMX0JJVCArIDU0MCkKICNkZWZpbmUgX19OUl9zZXRzb2Nrb3B0IChfX1gzMl9TWVNDQUxMX0JJVCArIDU0MSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0c29ja29wdCAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1NDIpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3ZteC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS92bXguaAppbmRleCA2YzkwOTM3Li5lMTBlMmI2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3ZteC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdm14LmgKQEAgLTY2LDExICs2NiwxMyBAQAogI2RlZmluZSBFWElUX1JFQVNPTl9FUFRfVklPTEFUSU9OIDQ4CiAjZGVmaW5lIEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUcgNDkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVYSVRfUkVBU09OX0lOVkVQVCA1MAogI2RlZmluZSBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSIDUyCiAjZGVmaW5lIEVYSVRfUkVBU09OX1dCSU5WRCA1NAogI2RlZmluZSBFWElUX1JFQVNPTl9YU0VUQlYgNTUKLSNkZWZpbmUgRVhJVF9SRUFTT05fQVBJQ19XUklURSA1NgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVhJVF9SRUFTT05fQVBJQ19XUklURSA1NgogI2RlZmluZSBFWElUX1JFQVNPTl9JTlZQQ0lEIDU4Ci0jZGVmaW5lIFZNWF9FWElUX1JFQVNPTlMgICB7IEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUksICJFWENFUFRJT05fTk1JIiB9LCAgIHsgRVhJVF9SRUFTT05fRVhURVJOQUxfSU5URVJSVVBULCAiRVhURVJOQUxfSU5URVJSVVBUIiB9LCAgIHsgRVhJVF9SRUFTT05fVFJJUExFX0ZBVUxULCAiVFJJUExFX0ZBVUxUIiB9LCAgIHsgRVhJVF9SRUFTT05fUEVORElOR19JTlRFUlJVUFQsICJQRU5ESU5HX0lOVEVSUlVQVCIgfSwgICB7IEVYSVRfUkVBU09OX05NSV9XSU5ET1csICJOTUlfV0lORE9XIiB9LCAgIHsgRVhJVF9SRUFTT05fVEFTS19TV0lUQ0gsICJUQVNLX1NXSVRDSCIgfSwgICB7IEVYSVRfUkVBU09OX0NQVUlELCAiQ1BVSUQiIH0sICAgeyBFWElUX1JFQVNPTl9ITFQsICJITFQiIH0sICAgeyBFWElUX1JFQVNPTl9JTlZMUEcsICJJTlZMUEciIH0sICAgeyBFWElUX1JFQVNPTl9SRFBNQywgIlJEUE1DIiB9LCAgIHsgRVhJVF9SRUFTT05fUkRUU0MsICJSRFRTQyIgfSwgICB7IEVYSVRfUkVBU09OX1ZNQ0FMTCwgIlZNQ0FMTCIgfSwgICB7IEVYSVRfUkVBU09OX1ZNQ0xFQVIsICJWTUNMRUFSIiB9LCAgIHsgRVhJVF9SRUFTT05fVk1MQVVOQ0gsICJWTUxBVU5DSCIgfSwgICB7IEVYSVRfUkVBU09OX1ZNUFRSTEQsICJWTVBUUkxEIiB9LCAgIHsgRVhJVF9SRUFTT05fVk1QVFJTVCwgIlZNUFRSU1QiIH0sICAgeyBFWElUX1JFQVNPTl9WTVJFQUQsICJWTVJFQUQiIH0sICAgeyBFWElUX1JFQVNPTl9WTVJFU1VNRSwgIlZNUkVTVU1FIiB9LCAgIHsgRVhJVF9SRUFTT05fVk1XUklURSwgIlZNV1JJVEUiIH0sICAgeyBFWElUX1JFQVNPTl9WTU9GRiwgIlZNT0ZGIiB9LCAgIHsgRVhJVF9SRUFTT05fVk1PTiwgIlZNT04iIH0sICAgeyBFWElUX1JFQVNPTl9DUl9BQ0NFU1MsICJDUl9BQ0NFU1MiIH0sICAgeyBFWElUX1JFQVNPTl9EUl9BQ0NFU1MsICJEUl9BQ0NFU1MiIH0sICAgeyBFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiwgIklPX0lOU1RSVUNUSU9OIiB9LCAgIHsgRVhJVF9SRUFTT05fTVNSX1JFQUQsICJNU1JfUkVBRCIgfSwgICB7IEVYSVRfUkVBU09OX01TUl9XUklURSwgIk1TUl9XUklURSIgfSwgICB7IEVYSVRfUkVBU09OX01XQUlUX0lOU1RSVUNUSU9OLCAiTVdBSVRfSU5TVFJVQ1RJT04iIH0sICAgeyBFWElUX1JFQVNPTl9NT05JVE9SX0lOU1RSVUNUSU9OLCAiTU9OSVRPUl9JTlNUUlVDVElPTiIgfSwgICB7IEVYSVRfUkVBU09OX1BBVVNFX0lOU1RSVUNUSU9OLCAiUEFVU0VfSU5TVFJVQ1RJT04iIH0sICAgeyBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlksICJNQ0VfRFVSSU5HX1ZNRU5UUlkiIH0sICAgeyBFWElUX1JFQVNPTl9UUFJfQkVMT1dfVEhSRVNIT0xELCAiVFBSX0JFTE9XX1RIUkVTSE9MRCIgfSwgICB7IEVYSVRfUkVBU09OX0FQSUNfQUNDRVNTLCAiQVBJQ19BQ0NFU1MiIH0sICAgeyBFWElUX1JFQVNPTl9FUFRfVklPTEFUSU9OLCAiRVBUX1ZJT0xBVElPTiIgfSwgICB7IEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUcsICJFUFRfTUlTQ09ORklHIiB9LCAgIHsgRVhJVF9SRUFTT05fV0JJTlZELCAiV0JJTlZEIiB9LCAgIHsgRVhJVF9SRUFTT05fQVBJQ19XUklURSwgIkFQSUNfV1JJVEUiIH0sICAgeyBFWElUX1JFQVNPTl9FT0lfSU5EVUNFRCwgIkVPSV9JTkRVQ0VEIiB9LCAgIHsgRVhJVF9SRUFTT05fSU5WQUxJRF9TVEFURSwgIklOVkFMSURfU1RBVEUiIH0sICAgeyBFWElUX1JFQVNPTl9JTlZELCAiSU5WRCIgfSwgICB7IEVYSVRfUkVBU09OX0lOVlBDSUQsICJJTlZQQ0lEIiB9LCAgIHsgRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUiwgIlBSRUVNUFRJT05fVElNRVIiIH0KKyNkZWZpbmUgVk1YX0VYSVRfUkVBU09OUyAgIHsgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSwgIkVYQ0VQVElPTl9OTUkiIH0sICAgeyBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQsICJFWFRFUk5BTF9JTlRFUlJVUFQiIH0sICAgeyBFWElUX1JFQVNPTl9UUklQTEVfRkFVTFQsICJUUklQTEVfRkFVTFQiIH0sICAgeyBFWElUX1JFQVNPTl9QRU5ESU5HX0lOVEVSUlVQVCwgIlBFTkRJTkdfSU5URVJSVVBUIiB9LCAgIHsgRVhJVF9SRUFTT05fTk1JX1dJTkRPVywgIk5NSV9XSU5ET1ciIH0sICAgeyBFWElUX1JFQVNPTl9UQVNLX1NXSVRDSCwgIlRBU0tfU1dJVENIIiB9LCAgIHsgRVhJVF9SRUFTT05fQ1BVSUQsICJDUFVJRCIgfSwgICB7IEVYSVRfUkVBU09OX0hMVCwgIkhMVCIgfSwgICB7IEVYSVRfUkVBU09OX0lOVkxQRywgIklOVkxQRyIgfSwgICB7IEVYSVRfUkVBU09OX1JEUE1DLCAiUkRQTUMiIH0sICAgeyBFWElUX1JFQVNPTl9SRFRTQywgIlJEVFNDIiB9LCAgIHsgRVhJVF9SRUFTT05fVk1DQUxMLCAiVk1DQUxMIiB9LCAgIHsgRVhJVF9SRUFTT05fVk1DTEVBUiwgIlZNQ0xFQVIiIH0sICAgeyBFWElUX1JFQVNPTl9WTUxBVU5DSCwgIlZNTEFVTkNIIiB9LCAgIHsgRVhJVF9SRUFTT05fVk1QVFJMRCwgIlZNUFRSTEQiIH0sICAgeyBFWElUX1JFQVNPTl9WTVBUUlNULCAiVk1QVFJTVCIgfSwgICB7IEVYSVRfUkVBU09OX1ZNUkVBRCwgIlZNUkVBRCIgfSwgICB7IEVYSVRfUkVBU09OX1ZNUkVTVU1FLCAiVk1SRVNVTUUiIH0sICAgeyBFWElUX1JFQVNPTl9WTVdSSVRFLCAiVk1XUklURSIgfSwgICB7IEVYSVRfUkVBU09OX1ZNT0ZGLCAiVk1PRkYiIH0sICAgeyBFWElUX1JFQVNPTl9WTU9OLCAiVk1PTiIgfSwgICB7IEVYSVRfUkVBU09OX0NSX0FDQ0VTUywgIkNSX0FDQ0VTUyIgfSwgICB7IEVYSVRfUkVBU09OX0RSX0FDQ0VTUywgIkRSX0FDQ0VTUyIgfSwgICB7IEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OLCAiSU9fSU5TVFJVQ1RJT04iIH0sICAgeyBFWElUX1JFQVNPTl9NU1JfUkVBRCwgIk1TUl9SRUFEIiB9LCAgIHsgRVhJVF9SRUFTT05fTVNSX1dSSVRFLCAiTVNSX1dSSVRFIiB9LCAgIHsgRVhJVF9SRUFTT05fTVdBSVRfSU5TVFJVQ1RJT04sICJNV0FJVF9JTlNUUlVDVElPTiIgfSwgICB7IEVYSVRfUkVBU09OX01PTklUT1JfSU5TVFJVQ1RJT04sICJNT05JVE9SX0lOU1RSVUNUSU9OIiB9LCAgIHsgRVhJVF9SRUFTT05fUEFVU0VfSU5TVFJVQ1RJT04sICJQQVVTRV9JTlNUUlVDVElPTiIgfSwgICB7IEVYSVRfUkVBU09OX01DRV9EVVJJTkdfVk1FTlRSWSwgIk1DRV9EVVJJTkdfVk1FTlRSWSIgfSwgICB7IEVYSVRfUkVBU09OX1RQUl9CRUxPV19USFJFU0hPTEQsICJUUFJfQkVMT1dfVEhSRVNIT0xEIiB9LCAgIHsgRVhJVF9SRUFTT05fQVBJQ19BQ0NFU1MsICJBUElDX0FDQ0VTUyIgfSwgICB7IEVYSVRfUkVBU09OX0VQVF9WSU9MQVRJT04sICJFUFRfVklPTEFUSU9OIiB9LCAgIHsgRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRywgIkVQVF9NSVNDT05GSUciIH0sICAgeyBFWElUX1JFQVNPTl9JTlZFUFQsICJJTlZFUFQiIH0sICAgeyBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSLCAiUFJFRU1QVElPTl9USU1FUiIgfSwgICB7IEVYSVRfUkVBU09OX1dCSU5WRCwgIldCSU5WRCIgfSwgICB7IEVYSVRfUkVBU09OX0FQSUNfV1JJVEUsICJBUElDX1dSSVRFIiB9LCAgIHsgRVhJVF9SRUFTT05fRU9JX0lORFVDRUQsICJFT0lfSU5EVUNFRCIgfSwgICB7IEVYSVRfUkVBU09OX0lOVkFMSURfU1RBVEUsICJJTlZBTElEX1NUQVRFIiB9LCAgIHsgRVhJVF9SRUFTT05fSU5WRCwgIklOVkQiIH0sICAgeyBFWElUX1JFQVNPTl9JTlZQQ0lELCAiSU5WUENJRCIgfQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9kcm0vYXJtYWRhX2RybS5oIGIvbGliYy9rZXJuZWwvdWFwaS9kcm0vYXJtYWRhX2RybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZDdkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2RybS9hcm1hZGFfZHJtLmgKQEAgLTAsMCArMSw1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBEUk1fQVJNQURBX0lPQ1RMX0gKKyNkZWZpbmUgRFJNX0FSTUFEQV9JT0NUTF9ICisjZGVmaW5lIERSTV9BUk1BREFfR0VNX0NSRUFURSAweDAwCisjZGVmaW5lIERSTV9BUk1BREFfR0VNX01NQVAgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0FSTUFEQV9HRU1fUFdSSVRFIDB4MDMKKyNkZWZpbmUgQVJNQURBX0lPQ1RMKGRpciwgbmFtZSwgc3RyKSAgIERSTV8jI2RpcihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0FSTUFEQV8jI25hbWUsIHN0cnVjdCBkcm1fYXJtYWRhXyMjc3RyKQorc3RydWN0IGRybV9hcm1hZGFfZ2VtX2NyZWF0ZSB7CisgdWludDMyX3QgaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBzaXplOworfTsKKyNkZWZpbmUgRFJNX0lPQ1RMX0FSTUFEQV9HRU1fQ1JFQVRFICAgQVJNQURBX0lPQ1RMKElPV1IsIEdFTV9DUkVBVEUsIGdlbV9jcmVhdGUpCitzdHJ1Y3QgZHJtX2FybWFkYV9nZW1fbW1hcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IGhhbmRsZTsKKyB1aW50MzJfdCBwYWQ7CisgdWludDY0X3Qgb2Zmc2V0OworIHVpbnQ2NF90IHNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQ2NF90IGFkZHI7Cit9OworI2RlZmluZSBEUk1fSU9DVExfQVJNQURBX0dFTV9NTUFQICAgQVJNQURBX0lPQ1RMKElPV1IsIEdFTV9NTUFQLCBnZW1fbW1hcCkKK3N0cnVjdCBkcm1fYXJtYWRhX2dlbV9wd3JpdGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50NjRfdCBwdHI7CisgdWludDMyX3QgaGFuZGxlOworIHVpbnQzMl90IG9mZnNldDsKKyB1aW50MzJfdCBzaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIERSTV9JT0NUTF9BUk1BREFfR0VNX1BXUklURSAgIEFSTUFEQV9JT0NUTChJT1csIEdFTV9QV1JJVEUsIGdlbV9wd3JpdGUpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvZHJtL2RybS5oIGIvbGliYy9rZXJuZWwvdWFwaS9kcm0vZHJtLmgKaW5kZXggYTY1MjY4NS4uZWQ4NDhhOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9kcm0vZHJtLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9kcm0vZHJtLmgKQEAgLTEyOCwzMzYgKzEyOCwzNTYgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9TQ0FUVEVSX0dBVEhFUiA9IDQsCiAgX0RSTV9DT05TSVNURU5UID0gNSwKLSBfRFJNX0dFTSA9IDYsCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gZHJtX21hcF9mbGFncyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fUkVTVFJJQ1RFRCA9IDB4MDEsCiAgX0RSTV9SRUFEX09OTFkgPSAweDAyLAogIF9EUk1fTE9DS0VEID0gMHgwNCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9LRVJORUwgPSAweDA4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX1dSSVRFX0NPTUJJTklORyA9IDB4MTAsCiAgX0RSTV9DT05UQUlOU19MT0NLID0gMHgyMCwKICBfRFJNX1JFTU9WQUJMRSA9IDB4NDAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fRFJJVkVSID0gMHg4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX2N0eF9wcml2X21hcCB7CiAgdW5zaWduZWQgaW50IGN0eF9pZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCAqaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX21hcCB7CiAgdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZW51bSBkcm1fbWFwX3R5cGUgdHlwZTsKICBlbnVtIGRybV9tYXBfZmxhZ3MgZmxhZ3M7CiAgdm9pZCAqaGFuZGxlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgbXRycjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9jbGllbnQgewogIGludCBpZHg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBhdXRoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHBpZDsKICB1bnNpZ25lZCBsb25nIHVpZDsKICB1bnNpZ25lZCBsb25nIG1hZ2ljOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGlvY3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gZHJtX3N0YXRfdHlwZSB7CiAgX0RSTV9TVEFUX0xPQ0ssCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fU1RBVF9PUEVOUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9TVEFUX0NMT1NFUywKICBfRFJNX1NUQVRfSU9DVExTLAogIF9EUk1fU1RBVF9MT0NLUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9TVEFUX1VOTE9DS1MsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fU1RBVF9WQUxVRSwKICBfRFJNX1NUQVRfQllURSwKICBfRFJNX1NUQVRfQ09VTlQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fU1RBVF9JUlEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fU1RBVF9QUklNQVJZLAogIF9EUk1fU1RBVF9TRUNPTkRBUlksCiAgX0RSTV9TVEFUX0RNQSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9TVEFUX1NQRUNJQUwsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fU1RBVF9NSVNTRUQKIH07CiBzdHJ1Y3QgZHJtX3N0YXRzIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBjb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICB1bnNpZ25lZCBsb25nIHZhbHVlOwogIGVudW0gZHJtX3N0YXRfdHlwZSB0eXBlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IGRhdGFbMTVdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIGRybV9sb2NrX2ZsYWdzIHsKICBfRFJNX0xPQ0tfUkVBRFkgPSAweDAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX0xPQ0tfUVVJRVNDRU5UID0gMHgwMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9MT0NLX0ZMVVNIID0gMHgwNCwKICBfRFJNX0xPQ0tfRkxVU0hfQUxMID0gMHgwOCwKICBfRFJNX0hBTFRfQUxMX1FVRVVFUyA9IDB4MTAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fSEFMVF9DVVJfUVVFVUVTID0gMHgyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX2xvY2sgewogIGludCBjb250ZXh0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBlbnVtIGRybV9sb2NrX2ZsYWdzIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIGRybV9kbWFfZmxhZ3MgewogIF9EUk1fRE1BX0JMT0NLID0gMHgwMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9ETUFfV0hJTEVfTE9DS0VEID0gMHgwMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9ETUFfUFJJT1JJVFkgPSAweDA0LAogIF9EUk1fRE1BX1dBSVQgPSAweDEwLAogIF9EUk1fRE1BX1NNQUxMRVJfT0sgPSAweDIwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX0RNQV9MQVJHRVJfT0sgPSAweDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fYnVmX2Rlc2MgewogIGludCBjb3VudDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBsb3dfbWFyazsKICBpbnQgaGlnaF9tYXJrOwogIGVudW0gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX1BBR0VfQUxJR04gPSAweDAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX0FHUF9CVUZGRVIgPSAweDAyLAogIF9EUk1fU0dfQlVGRkVSID0gMHgwNCwKICBfRFJNX0ZCX0JVRkZFUiA9IDB4MDgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fUENJX0JVRkZFUl9STyA9IDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBmbGFnczsKICB1bnNpZ25lZCBsb25nIGFncF9zdGFydDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9idWZfaW5mbyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBjb3VudDsKICBzdHJ1Y3QgZHJtX2J1Zl9kZXNjIF9fdXNlciAqbGlzdDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9idWZfZnJlZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBjb3VudDsKICBpbnQgX191c2VyICpsaXN0OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2J1Zl9wdWIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgaWR4OwogIGludCB0b3RhbDsKICBpbnQgdXNlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCBfX3VzZXIgKmFkZHJlc3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fYnVmX21hcCB7CiAgaW50IGNvdW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkIF9fdXNlciAqdmlydHVhbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGRybV9idWZfcHViIF9fdXNlciAqbGlzdDsKIH07CiBzdHJ1Y3QgZHJtX2RtYSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBjb250ZXh0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc2VuZF9jb3VudDsKICBpbnQgX191c2VyICpzZW5kX2luZGljZXM7CiAgaW50IF9fdXNlciAqc2VuZF9zaXplczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZW51bSBkcm1fZG1hX2ZsYWdzIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgcmVxdWVzdF9jb3VudDsKICBpbnQgcmVxdWVzdF9zaXplOwogIGludCBfX3VzZXIgKnJlcXVlc3RfaW5kaWNlczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IF9fdXNlciAqcmVxdWVzdF9zaXplczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGdyYW50ZWRfY291bnQ7CiB9OwogZW51bSBkcm1fY3R4X2ZsYWdzIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9DT05URVhUX1BSRVNFUlZFRCA9IDB4MDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fQ09OVEVYVF8yRE9OTFkgPSAweDAyCiB9Owogc3RydWN0IGRybV9jdHggewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBkcm1fY29udGV4dF90IGhhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZW51bSBkcm1fY3R4X2ZsYWdzIGZsYWdzOwogfTsKIHN0cnVjdCBkcm1fY3R4X3JlcyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBjb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGRybV9jdHggX191c2VyICpjb250ZXh0czsKIH07CiBzdHJ1Y3QgZHJtX2RyYXcgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBkcm1fZHJhd2FibGVfdCBoYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHR5cGVkZWYgZW51bSB7CiAgRFJNX0RSQVdBQkxFX0NMSVBSRUNUUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IGRybV9kcmF3YWJsZV9pbmZvX3R5cGVfdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX3VwZGF0ZV9kcmF3IHsKICBkcm1fZHJhd2FibGVfdCBoYW5kbGU7CiAgdW5zaWduZWQgaW50IHR5cGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBudW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhOwogfTsKIHN0cnVjdCBkcm1fYXV0aCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGRybV9tYWdpY190IG1hZ2ljOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX2lycV9idXNpZCB7CiAgaW50IGlycTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGJ1c251bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGRldm51bTsKICBpbnQgZnVuY251bTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBkcm1fdmJsYW5rX3NlcV90eXBlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9WQkxBTktfQUJTT0xVVEUgPSAweDAsCiAgX0RSTV9WQkxBTktfUkVMQVRJVkUgPSAweDEsCiAgX0RSTV9WQkxBTktfSElHSF9DUlRDX01BU0sgPSAweDAwMDAwMDNlLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX1ZCTEFOS19FVkVOVCA9IDB4NDAwMDAwMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9WQkxBTktfRkxJUCA9IDB4ODAwMDAwMCwKICBfRFJNX1ZCTEFOS19ORVhUT05NSVNTID0gMHgxMDAwMDAwMCwKICBfRFJNX1ZCTEFOS19TRUNPTkRBUlkgPSAweDIwMDAwMDAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX1ZCTEFOS19TSUdOQUwgPSAweDQwMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgX0RSTV9WQkxBTktfSElHSF9DUlRDX1NISUZUIDEKICNkZWZpbmUgX0RSTV9WQkxBTktfVFlQRVNfTUFTSyAoX0RSTV9WQkxBTktfQUJTT0xVVEUgfCBfRFJNX1ZCTEFOS19SRUxBVElWRSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9EUk1fVkJMQU5LX0ZMQUdTX01BU0sgKF9EUk1fVkJMQU5LX0VWRU5UIHwgX0RSTV9WQkxBTktfU0lHTkFMIHwgICBfRFJNX1ZCTEFOS19TRUNPTkRBUlkgfCBfRFJNX1ZCTEFOS19ORVhUT05NSVNTKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fd2FpdF92YmxhbmtfcmVxdWVzdCB7CiAgZW51bSBkcm1fdmJsYW5rX3NlcV90eXBlIHR5cGU7CiAgdW5zaWduZWQgaW50IHNlcXVlbmNlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHNpZ25hbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV93YWl0X3ZibGFua19yZXBseSB7CiAgZW51bSBkcm1fdmJsYW5rX3NlcV90eXBlIHR5cGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBzZXF1ZW5jZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyB0dmFsX3NlYzsKICBsb25nIHR2YWxfdXNlYzsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdW5pb24gZHJtX3dhaXRfdmJsYW5rIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGRybV93YWl0X3ZibGFua19yZXF1ZXN0IHJlcXVlc3Q7CiAgc3RydWN0IGRybV93YWl0X3ZibGFua19yZXBseSByZXBseTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfRFJNX1BSRV9NT0RFU0VUIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9EUk1fUE9TVF9NT0RFU0VUIDIKIHN0cnVjdCBkcm1fbW9kZXNldF9jdGwgewogIF9fdTMyIGNydGM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNtZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9hZ3BfbW9kZSB7CiAgdW5zaWduZWQgbG9uZyBtb2RlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9hZ3BfYnVmZmVyIHsKICB1bnNpZ25lZCBsb25nIHNpemU7CiAgdW5zaWduZWQgbG9uZyBoYW5kbGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBwaHlzaWNhbDsKIH07CiBzdHJ1Y3QgZHJtX2FncF9iaW5kaW5nIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBoYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogfTsKIHN0cnVjdCBkcm1fYWdwX2luZm8gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgYWdwX3ZlcnNpb25fbWFqb3I7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBhZ3BfdmVyc2lvbl9taW5vcjsKICB1bnNpZ25lZCBsb25nIG1vZGU7CiAgdW5zaWduZWQgbG9uZyBhcGVydHVyZV9iYXNlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGFwZXJ0dXJlX3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgbWVtb3J5X2FsbG93ZWQ7CiAgdW5zaWduZWQgbG9uZyBtZW1vcnlfdXNlZDsKICB1bnNpZ25lZCBzaG9ydCBpZF92ZW5kb3I7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IGlkX2RldmljZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9zY2F0dGVyX2dhdGhlciB7CiAgdW5zaWduZWQgbG9uZyBzaXplOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGhhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9zZXRfdmVyc2lvbiB7CiAgaW50IGRybV9kaV9tYWpvcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGRybV9kaV9taW5vcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGRybV9kZF9tYWpvcjsKICBpbnQgZHJtX2RkX21pbm9yOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2dlbV9jbG9zZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhhbmRsZTsKICBfX3UzMiBwYWQ7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fZ2VtX2ZsaW5rIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGFuZGxlOwogIF9fdTMyIG5hbWU7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fZ2VtX29wZW4geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBuYW1lOwogIF9fdTMyIGhhbmRsZTsKICBfX3U2NCBzaXplOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fQ0FQX0RVTUJfQlVGRkVSIDB4MQorI2RlZmluZSBEUk1fQ0FQX1ZCTEFOS19ISUdIX0NSVEMgMHgyCisjZGVmaW5lIERSTV9DQVBfRFVNQl9QUkVGRVJSRURfREVQVEggMHgzCisjZGVmaW5lIERSTV9DQVBfRFVNQl9QUkVGRVJfU0hBRE9XIDB4NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0NBUF9QUklNRSAweDUKKyNkZWZpbmUgRFJNX1BSSU1FX0NBUF9JTVBPUlQgMHgxCisjZGVmaW5lIERSTV9QUklNRV9DQVBfRVhQT1JUIDB4MgorI2RlZmluZSBEUk1fQ0FQX1RJTUVTVEFNUF9NT05PVE9OSUMgMHg2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fQ0FQX0FTWU5DX1BBR0VfRkxJUCAweDcKKyNkZWZpbmUgRFJNX0NBUF9DVVJTT1JfV0lEVEggMHg4CisjZGVmaW5lIERSTV9DQVBfQ1VSU09SX0hFSUdIVCAweDkKIHN0cnVjdCBkcm1fZ2V0X2NhcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGNhcGFiaWxpdHk7CiAgX191NjQgdmFsdWU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKyNkZWZpbmUgRFJNX0NMSUVOVF9DQVBfU1RFUkVPXzNEIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgZHJtX3NldF9jbGllbnRfY2FwIHsKKyBfX3U2NCBjYXBhYmlsaXR5OworIF9fdTY0IHZhbHVlOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9DTE9FWEVDIE9fQ0xPRVhFQwogc3RydWN0IGRybV9wcmltZV9oYW5kbGUgewogIF9fdTMyIGhhbmRsZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIGZkOwogfTsKICNpbmNsdWRlIDxkcm0vZHJtX21vZGUuaD4KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JT0NUTF9CQVNFICdkJworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0lPKG5yKSBfSU8oRFJNX0lPQ1RMX0JBU0UsbnIpCiAjZGVmaW5lIERSTV9JT1IobnIsdHlwZSkgX0lPUihEUk1fSU9DVExfQkFTRSxucix0eXBlKQogI2RlZmluZSBEUk1fSU9XKG5yLHR5cGUpIF9JT1coRFJNX0lPQ1RMX0JBU0UsbnIsdHlwZSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JT1dSKG5yLHR5cGUpIF9JT1dSKERSTV9JT0NUTF9CQVNFLG5yLHR5cGUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSU9DVExfVkVSU0lPTiBEUk1fSU9XUigweDAwLCBzdHJ1Y3QgZHJtX3ZlcnNpb24pCiAjZGVmaW5lIERSTV9JT0NUTF9HRVRfVU5JUVVFIERSTV9JT1dSKDB4MDEsIHN0cnVjdCBkcm1fdW5pcXVlKQogI2RlZmluZSBEUk1fSU9DVExfR0VUX01BR0lDIERSTV9JT1IoIDB4MDIsIHN0cnVjdCBkcm1fYXV0aCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JT0NUTF9JUlFfQlVTSUQgRFJNX0lPV1IoMHgwMywgc3RydWN0IGRybV9pcnFfYnVzaWQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSU9DVExfR0VUX01BUCBEUk1fSU9XUigweDA0LCBzdHJ1Y3QgZHJtX21hcCkKICNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9DTElFTlQgRFJNX0lPV1IoMHgwNSwgc3RydWN0IGRybV9jbGllbnQpCiAjZGVmaW5lIERSTV9JT0NUTF9HRVRfU1RBVFMgRFJNX0lPUiggMHgwNiwgc3RydWN0IGRybV9zdGF0cykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JT0NUTF9TRVRfVkVSU0lPTiBEUk1fSU9XUigweDA3LCBzdHJ1Y3QgZHJtX3NldF92ZXJzaW9uKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0lPQ1RMX01PREVTRVRfQ1RMIERSTV9JT1coMHgwOCwgc3RydWN0IGRybV9tb2Rlc2V0X2N0bCkKICNkZWZpbmUgRFJNX0lPQ1RMX0dFTV9DTE9TRSBEUk1fSU9XICgweDA5LCBzdHJ1Y3QgZHJtX2dlbV9jbG9zZSkKICNkZWZpbmUgRFJNX0lPQ1RMX0dFTV9GTElOSyBEUk1fSU9XUigweDBhLCBzdHJ1Y3QgZHJtX2dlbV9mbGluaykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JT0NUTF9HRU1fT1BFTiBEUk1fSU9XUigweDBiLCBzdHJ1Y3QgZHJtX2dlbV9vcGVuKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9DQVAgRFJNX0lPV1IoMHgwYywgc3RydWN0IGRybV9nZXRfY2FwKQorI2RlZmluZSBEUk1fSU9DVExfU0VUX0NMSUVOVF9DQVAgRFJNX0lPVyggMHgwZCwgc3RydWN0IGRybV9zZXRfY2xpZW50X2NhcCkKICNkZWZpbmUgRFJNX0lPQ1RMX1NFVF9VTklRVUUgRFJNX0lPVyggMHgxMCwgc3RydWN0IGRybV91bmlxdWUpCiAjZGVmaW5lIERSTV9JT0NUTF9BVVRIX01BR0lDIERSTV9JT1coIDB4MTEsIHN0cnVjdCBkcm1fYXV0aCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC01NDYsODQgKzU2Niw3NSBAQAogI2RlZmluZSBEUk1fSU9DVExfTU9ERV9PQkpfR0VUUFJPUEVSVElFUyBEUk1fSU9XUigweEI5LCBzdHJ1Y3QgZHJtX21vZGVfb2JqX2dldF9wcm9wZXJ0aWVzKQogI2RlZmluZSBEUk1fSU9DVExfTU9ERV9PQkpfU0VUUFJPUEVSVFkgRFJNX0lPV1IoMHhCQSwgc3RydWN0IGRybV9tb2RlX29ial9zZXRfcHJvcGVydHkpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfTU9ERV9DVVJTT1IyIERSTV9JT1dSKDB4QkIsIHN0cnVjdCBkcm1fbW9kZV9jdXJzb3IyKQogI2RlZmluZSBEUk1fQ09NTUFORF9CQVNFIDB4NDAKICNkZWZpbmUgRFJNX0NPTU1BTkRfRU5EIDB4QTAKIHN0cnVjdCBkcm1fZXZlbnQgewotIF9fdTMyIHR5cGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHR5cGU7CiAgX191MzIgbGVuZ3RoOwogfTsKICNkZWZpbmUgRFJNX0VWRU5UX1ZCTEFOSyAweDAxCi0jZGVmaW5lIERSTV9FVkVOVF9GTElQX0NPTVBMRVRFIDB4MDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9FVkVOVF9GTElQX0NPTVBMRVRFIDB4MDIKIHN0cnVjdCBkcm1fZXZlbnRfdmJsYW5rIHsKICBzdHJ1Y3QgZHJtX2V2ZW50IGJhc2U7CiAgX191NjQgdXNlcl9kYXRhOwotIF9fdTMyIHR2X3NlYzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdHZfc2VjOwogIF9fdTMyIHR2X3VzZWM7CiAgX191MzIgc2VxdWVuY2U7CiAgX191MzIgcmVzZXJ2ZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIERSTV9DQVBfRFVNQl9CVUZGRVIgMHgxCi0jZGVmaW5lIERSTV9DQVBfVkJMQU5LX0hJR0hfQ1JUQyAweDIKLSNkZWZpbmUgRFJNX0NBUF9EVU1CX1BSRUZFUlJFRF9ERVBUSCAweDMKLSNkZWZpbmUgRFJNX0NBUF9EVU1CX1BSRUZFUl9TSEFET1cgMHg0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBEUk1fQ0FQX1BSSU1FIDB4NQotI2RlZmluZSBEUk1fQ0FQX1RJTUVTVEFNUF9NT05PVE9OSUMgMHg2Ci0jZGVmaW5lIERSTV9QUklNRV9DQVBfSU1QT1JUIDB4MQotI2RlZmluZSBEUk1fUFJJTUVfQ0FQX0VYUE9SVCAweDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCBkcm1fY2xpcF9yZWN0IGRybV9jbGlwX3JlY3RfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9kcmF3YWJsZV9pbmZvIGRybV9kcmF3YWJsZV9pbmZvX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fdGV4X3JlZ2lvbiBkcm1fdGV4X3JlZ2lvbl90OwotdHlwZWRlZiBzdHJ1Y3QgZHJtX2h3X2xvY2sgZHJtX2h3X2xvY2tfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIHN0cnVjdCBkcm1faHdfbG9jayBkcm1faHdfbG9ja190OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX3ZlcnNpb24gZHJtX3ZlcnNpb25fdDsKIHR5cGVkZWYgc3RydWN0IGRybV91bmlxdWUgZHJtX3VuaXF1ZV90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2xpc3QgZHJtX2xpc3RfdDsKLXR5cGVkZWYgc3RydWN0IGRybV9ibG9jayBkcm1fYmxvY2tfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIHN0cnVjdCBkcm1fYmxvY2sgZHJtX2Jsb2NrX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fY29udHJvbCBkcm1fY29udHJvbF90OwogdHlwZWRlZiBlbnVtIGRybV9tYXBfdHlwZSBkcm1fbWFwX3R5cGVfdDsKIHR5cGVkZWYgZW51bSBkcm1fbWFwX2ZsYWdzIGRybV9tYXBfZmxhZ3NfdDsKLXR5cGVkZWYgc3RydWN0IGRybV9jdHhfcHJpdl9tYXAgZHJtX2N0eF9wcml2X21hcF90OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgc3RydWN0IGRybV9jdHhfcHJpdl9tYXAgZHJtX2N0eF9wcml2X21hcF90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX21hcCBkcm1fbWFwX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fY2xpZW50IGRybV9jbGllbnRfdDsKIHR5cGVkZWYgZW51bSBkcm1fc3RhdF90eXBlIGRybV9zdGF0X3R5cGVfdDsKLXR5cGVkZWYgc3RydWN0IGRybV9zdGF0cyBkcm1fc3RhdHNfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIHN0cnVjdCBkcm1fc3RhdHMgZHJtX3N0YXRzX3Q7CiB0eXBlZGVmIGVudW0gZHJtX2xvY2tfZmxhZ3MgZHJtX2xvY2tfZmxhZ3NfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9sb2NrIGRybV9sb2NrX3Q7CiB0eXBlZGVmIGVudW0gZHJtX2RtYV9mbGFncyBkcm1fZG1hX2ZsYWdzX3Q7Ci10eXBlZGVmIHN0cnVjdCBkcm1fYnVmX2Rlc2MgZHJtX2J1Zl9kZXNjX3Q7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwordHlwZWRlZiBzdHJ1Y3QgZHJtX2J1Zl9kZXNjIGRybV9idWZfZGVzY190OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2J1Zl9pbmZvIGRybV9idWZfaW5mb190OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2J1Zl9mcmVlIGRybV9idWZfZnJlZV90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2J1Zl9wdWIgZHJtX2J1Zl9wdWJfdDsKLXR5cGVkZWYgc3RydWN0IGRybV9idWZfbWFwIGRybV9idWZfbWFwX3Q7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwordHlwZWRlZiBzdHJ1Y3QgZHJtX2J1Zl9tYXAgZHJtX2J1Zl9tYXBfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9kbWEgZHJtX2RtYV90OwogdHlwZWRlZiB1bmlvbiBkcm1fd2FpdF92YmxhbmsgZHJtX3dhaXRfdmJsYW5rX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fYWdwX21vZGUgZHJtX2FncF9tb2RlX3Q7Ci10eXBlZGVmIGVudW0gZHJtX2N0eF9mbGFncyBkcm1fY3R4X2ZsYWdzX3Q7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwordHlwZWRlZiBlbnVtIGRybV9jdHhfZmxhZ3MgZHJtX2N0eF9mbGFnc190OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2N0eCBkcm1fY3R4X3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fY3R4X3JlcyBkcm1fY3R4X3Jlc190OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2RyYXcgZHJtX2RyYXdfdDsKLXR5cGVkZWYgc3RydWN0IGRybV91cGRhdGVfZHJhdyBkcm1fdXBkYXRlX2RyYXdfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIHN0cnVjdCBkcm1fdXBkYXRlX2RyYXcgZHJtX3VwZGF0ZV9kcmF3X3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fYXV0aCBkcm1fYXV0aF90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2lycV9idXNpZCBkcm1faXJxX2J1c2lkX3Q7CiB0eXBlZGVmIGVudW0gZHJtX3ZibGFua19zZXFfdHlwZSBkcm1fdmJsYW5rX3NlcV90eXBlX3Q7Ci10eXBlZGVmIHN0cnVjdCBkcm1fYWdwX2J1ZmZlciBkcm1fYWdwX2J1ZmZlcl90OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgc3RydWN0IGRybV9hZ3BfYnVmZmVyIGRybV9hZ3BfYnVmZmVyX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fYWdwX2JpbmRpbmcgZHJtX2FncF9iaW5kaW5nX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fYWdwX2luZm8gZHJtX2FncF9pbmZvX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fc2NhdHRlcl9nYXRoZXIgZHJtX3NjYXR0ZXJfZ2F0aGVyX3Q7Ci10eXBlZGVmIHN0cnVjdCBkcm1fc2V0X3ZlcnNpb24gZHJtX3NldF92ZXJzaW9uX3Q7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwordHlwZWRlZiBzdHJ1Y3QgZHJtX3NldF92ZXJzaW9uIGRybV9zZXRfdmVyc2lvbl90OwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2RybS9kcm1fbW9kZS5oIGIvbGliYy9rZXJuZWwvdWFwaS9kcm0vZHJtX21vZGUuaAppbmRleCA2YjAwNmE2Li5iYmUxYzhlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2RybS9kcm1fbW9kZS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvZHJtL2RybV9tb2RlLmgKQEAgLTUxLDEzOSArNTEsMTU0IEBACiAjZGVmaW5lIERSTV9NT0RFX0ZMQUdfREJMQ0xLICgxPDwxMikKICNkZWZpbmUgRFJNX01PREVfRkxBR19DTEtESVYyICgxPDwxMykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9NT0RFX0ZMQUdfM0RfTUFTSyAoMHgxZjw8MTQpCisjZGVmaW5lIERSTV9NT0RFX0ZMQUdfM0RfTk9ORSAoMDw8MTQpCisjZGVmaW5lIERSTV9NT0RFX0ZMQUdfM0RfRlJBTUVfUEFDS0lORyAoMTw8MTQpCisjZGVmaW5lIERSTV9NT0RFX0ZMQUdfM0RfRklFTERfQUxURVJOQVRJVkUgKDI8PDE0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX01PREVfRkxBR18zRF9MSU5FX0FMVEVSTkFUSVZFICgzPDwxNCkKKyNkZWZpbmUgRFJNX01PREVfRkxBR18zRF9TSURFX0JZX1NJREVfRlVMTCAoNDw8MTQpCisjZGVmaW5lIERSTV9NT0RFX0ZMQUdfM0RfTF9ERVBUSCAoNTw8MTQpCisjZGVmaW5lIERSTV9NT0RFX0ZMQUdfM0RfTF9ERVBUSF9HRlhfR0ZYX0RFUFRIICg2PDwxNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9NT0RFX0ZMQUdfM0RfVE9QX0FORF9CT1RUT00gKDc8PDE0KQorI2RlZmluZSBEUk1fTU9ERV9GTEFHXzNEX1NJREVfQllfU0lERV9IQUxGICg4PDwxNCkKICNkZWZpbmUgRFJNX01PREVfRFBNU19PTiAwCiAjZGVmaW5lIERSTV9NT0RFX0RQTVNfU1RBTkRCWSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9EUE1TX1NVU1BFTkQgMgogI2RlZmluZSBEUk1fTU9ERV9EUE1TX09GRiAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9TQ0FMRV9OT05FIDAKICNkZWZpbmUgRFJNX01PREVfU0NBTEVfRlVMTFNDUkVFTiAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9TQ0FMRV9DRU5URVIgMgogI2RlZmluZSBEUk1fTU9ERV9TQ0FMRV9BU1BFQ1QgMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX01PREVfRElUSEVSSU5HX09GRiAwCiAjZGVmaW5lIERSTV9NT0RFX0RJVEhFUklOR19PTiAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9ESVRIRVJJTkdfQVVUTyAyCiAjZGVmaW5lIERSTV9NT0RFX0RJUlRZX09GRiAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9ESVJUWV9PTiAxCiAjZGVmaW5lIERSTV9NT0RFX0RJUlRZX0FOTk9UQVRFIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gewogIF9fdTMyIGNsb2NrOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBoZGlzcGxheSwgaHN5bmNfc3RhcnQsIGhzeW5jX2VuZCwgaHRvdGFsLCBoc2tldzsKICBfX3UxNiB2ZGlzcGxheSwgdnN5bmNfc3RhcnQsIHZzeW5jX2VuZCwgdnRvdGFsLCB2c2NhbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdnJlZnJlc2g7CiAgX191MzIgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR5cGU7CiAgY2hhciBuYW1lW0RSTV9ESVNQTEFZX01PREVfTEVOXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9tb2RlX2NhcmRfcmVzIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZmJfaWRfcHRyOwogIF9fdTY0IGNydGNfaWRfcHRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBjb25uZWN0b3JfaWRfcHRyOwogIF9fdTY0IGVuY29kZXJfaWRfcHRyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjb3VudF9mYnM7CiAgX191MzIgY291bnRfY3J0Y3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNvdW50X2Nvbm5lY3RvcnM7CiAgX191MzIgY291bnRfZW5jb2RlcnM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1pbl93aWR0aCwgbWF4X3dpZHRoOwogIF9fdTMyIG1pbl9oZWlnaHQsIG1heF9oZWlnaHQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fbW9kZV9jcnRjIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgc2V0X2Nvbm5lY3RvcnNfcHRyOwogIF9fdTMyIGNvdW50X2Nvbm5lY3RvcnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNydGNfaWQ7CiAgX191MzIgZmJfaWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHgsIHk7CiAgX191MzIgZ2FtbWFfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbW9kZV92YWxpZDsKICBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gbW9kZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBEUk1fTU9ERV9QUkVTRU5UX1RPUF9GSUVMRCAoMTw8MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX1BSRVNFTlRfQk9UVE9NX0ZJRUxEICgxPDwxKQogc3RydWN0IGRybV9tb2RlX3NldF9wbGFuZSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBsYW5lX2lkOwogIF9fdTMyIGNydGNfaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZiX2lkOwogIF9fdTMyIGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBjcnRjX3gsIGNydGNfeTsKICBfX3UzMiBjcnRjX3csIGNydGNfaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc3JjX3gsIHNyY195OwogIF9fdTMyIHNyY19oLCBzcmNfdzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9tb2RlX2dldF9wbGFuZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBsYW5lX2lkOwogIF9fdTMyIGNydGNfaWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZiX2lkOwogIF9fdTMyIHBvc3NpYmxlX2NydGNzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBnYW1tYV9zaXplOwogIF9fdTMyIGNvdW50X2Zvcm1hdF90eXBlczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZm9ybWF0X3R5cGVfcHRyOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X3BsYW5lX3JlcyB7CiAgX191NjQgcGxhbmVfaWRfcHRyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjb3VudF9wbGFuZXM7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9OT05FIDAKICNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9EQUMgMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9UTURTIDIKICNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9MVkRTIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX0VOQ09ERVJfVFZEQUMgNAogI2RlZmluZSBEUk1fTU9ERV9FTkNPREVSX1ZJUlRVQUwgNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9EU0kgNgogc3RydWN0IGRybV9tb2RlX2dldF9lbmNvZGVyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZW5jb2Rlcl9pZDsKICBfX3UzMiBlbmNvZGVyX3R5cGU7CiAgX191MzIgY3J0Y19pZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcG9zc2libGVfY3J0Y3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBvc3NpYmxlX2Nsb25lczsKIH07CiAjZGVmaW5lIERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9BdXRvbWF0aWMgMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX1Vua25vd24gMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX0RWSUQgMwogI2RlZmluZSBEUk1fTU9ERV9TVUJDT05ORUNUT1JfRFZJQSA0CiAjZGVmaW5lIERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Db21wb3NpdGUgNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX1NWSURFTyA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9TVUJDT05ORUNUT1JfQ29tcG9uZW50IDgKICNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX1NDQVJUIDkKICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24gMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSAyCiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEIDMKICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0RWSUEgNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvc2l0ZSA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPIDYKICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMgNwogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9uZW50IDgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl85UGluRElOIDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCAxMAogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEgMTEKICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0hETUlCIDEyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfVFYgMTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9lRFAgMTQKICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX1ZJUlRVQUwgMTUKKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0RTSSAxNgogc3RydWN0IGRybV9tb2RlX2dldF9jb25uZWN0b3IgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBlbmNvZGVyc19wdHI7CkBAIC0yMDMsMTE2ICsyMTgsMTMxIEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1tX3dpZHRoLCBtbV9oZWlnaHQ7CiAgX191MzIgc3VicGl4ZWw7CisgX191MzIgcGFkOwogfTsKLSNkZWZpbmUgRFJNX01PREVfUFJPUF9QRU5ESU5HICgxPDwwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX01PREVfUFJPUF9QRU5ESU5HICgxPDwwKQogI2RlZmluZSBEUk1fTU9ERV9QUk9QX1JBTkdFICgxPDwxKQogI2RlZmluZSBEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSAoMTw8MikKICNkZWZpbmUgRFJNX01PREVfUFJPUF9FTlVNICgxPDwzKQotI2RlZmluZSBEUk1fTU9ERV9QUk9QX0JMT0IgKDE8PDQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fTU9ERV9QUk9QX0JMT0IgKDE8PDQpCiAjZGVmaW5lIERSTV9NT0RFX1BST1BfQklUTUFTSyAoMTw8NSkKIHN0cnVjdCBkcm1fbW9kZV9wcm9wZXJ0eV9lbnVtIHsKICBfX3U2NCB2YWx1ZTsKLSBjaGFyIG5hbWVbRFJNX1BST1BfTkFNRV9MRU5dOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBjaGFyIG5hbWVbRFJNX1BST1BfTkFNRV9MRU5dOwogfTsKIHN0cnVjdCBkcm1fbW9kZV9nZXRfcHJvcGVydHkgewogIF9fdTY0IHZhbHVlc19wdHI7Ci0gX191NjQgZW51bV9ibG9iX3B0cjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgZW51bV9ibG9iX3B0cjsKICBfX3UzMiBwcm9wX2lkOwogIF9fdTMyIGZsYWdzOwogIGNoYXIgbmFtZVtEUk1fUFJPUF9OQU1FX0xFTl07Ci0gX191MzIgY291bnRfdmFsdWVzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBjb3VudF92YWx1ZXM7CiAgX191MzIgY291bnRfZW51bV9ibG9iczsKIH07CiBzdHJ1Y3QgZHJtX21vZGVfY29ubmVjdG9yX3NldF9wcm9wZXJ0eSB7Ci0gX191NjQgdmFsdWU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHZhbHVlOwogIF9fdTMyIHByb3BfaWQ7CiAgX191MzIgY29ubmVjdG9yX2lkOwogfTsKLXN0cnVjdCBkcm1fbW9kZV9vYmpfZ2V0X3Byb3BlcnRpZXMgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBkcm1fbW9kZV9vYmpfZ2V0X3Byb3BlcnRpZXMgewogIF9fdTY0IHByb3BzX3B0cjsKICBfX3U2NCBwcm9wX3ZhbHVlc19wdHI7CiAgX191MzIgY291bnRfcHJvcHM7Ci0gX191MzIgb2JqX2lkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBvYmpfaWQ7CiAgX191MzIgb2JqX3R5cGU7CiB9Owogc3RydWN0IGRybV9tb2RlX29ial9zZXRfcHJvcGVydHkgewotIF9fdTY0IHZhbHVlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCB2YWx1ZTsKICBfX3UzMiBwcm9wX2lkOwogIF9fdTMyIG9ial9pZDsKICBfX3UzMiBvYmpfdHlwZTsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBkcm1fbW9kZV9nZXRfYmxvYiB7CiAgX191MzIgYmxvYl9pZDsKICBfX3UzMiBsZW5ndGg7Ci0gX191NjQgZGF0YTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgZGF0YTsKIH07CiBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kIHsKICBfX3UzMiBmYl9pZDsKLSBfX3UzMiB3aWR0aCwgaGVpZ2h0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB3aWR0aCwgaGVpZ2h0OwogIF9fdTMyIHBpdGNoOwogIF9fdTMyIGJwcDsKICBfX3UzMiBkZXB0aDsKLSBfX3UzMiBoYW5kbGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGhhbmRsZTsKIH07CiAjZGVmaW5lIERSTV9NT0RFX0ZCX0lOVEVSTEFDRUQgKDE8PDApCiBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiB7Ci0gX191MzIgZmJfaWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGZiX2lkOwogIF9fdTMyIHdpZHRoLCBoZWlnaHQ7CiAgX191MzIgcGl4ZWxfZm9ybWF0OwogIF9fdTMyIGZsYWdzOwotIF9fdTMyIGhhbmRsZXNbNF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGhhbmRsZXNbNF07CiAgX191MzIgcGl0Y2hlc1s0XTsKICBfX3UzMiBvZmZzZXRzWzRdOwogfTsKLSNkZWZpbmUgRFJNX01PREVfRkJfRElSVFlfQU5OT1RBVEVfQ09QWSAweDAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fTU9ERV9GQl9ESVJUWV9BTk5PVEFURV9DT1BZIDB4MDEKICNkZWZpbmUgRFJNX01PREVfRkJfRElSVFlfQU5OT1RBVEVfRklMTCAweDAyCiAjZGVmaW5lIERSTV9NT0RFX0ZCX0RJUlRZX0ZMQUdTIDB4MDMKICNkZWZpbmUgRFJNX01PREVfRkJfRElSVFlfTUFYX0NMSVBTIDI1Ngotc3RydWN0IGRybV9tb2RlX2ZiX2RpcnR5X2NtZCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGRybV9tb2RlX2ZiX2RpcnR5X2NtZCB7CiAgX191MzIgZmJfaWQ7CiAgX191MzIgZmxhZ3M7CiAgX191MzIgY29sb3I7Ci0gX191MzIgbnVtX2NsaXBzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBudW1fY2xpcHM7CiAgX191NjQgY2xpcHNfcHRyOwogfTsKIHN0cnVjdCBkcm1fbW9kZV9tb2RlX2NtZCB7Ci0gX191MzIgY29ubmVjdG9yX2lkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBjb25uZWN0b3JfaWQ7CiAgc3RydWN0IGRybV9tb2RlX21vZGVpbmZvIG1vZGU7CiB9OwogI2RlZmluZSBEUk1fTU9ERV9DVVJTT1JfQk8gMHgwMQotI2RlZmluZSBEUk1fTU9ERV9DVVJTT1JfTU9WRSAweDAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fTU9ERV9DVVJTT1JfTU9WRSAweDAyCiAjZGVmaW5lIERSTV9NT0RFX0NVUlNPUl9GTEFHUyAweDAzCiBzdHJ1Y3QgZHJtX21vZGVfY3Vyc29yIHsKICBfX3UzMiBmbGFnczsKLSBfX3UzMiBjcnRjX2lkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBjcnRjX2lkOwogIF9fczMyIHg7CiAgX19zMzIgeTsKICBfX3UzMiB3aWR0aDsKLSBfX3UzMiBoZWlnaHQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGhlaWdodDsKICBfX3UzMiBoYW5kbGU7CiB9Oworc3RydWN0IGRybV9tb2RlX2N1cnNvcjIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBmbGFnczsKKyBfX3UzMiBjcnRjX2lkOworIF9fczMyIHg7CisgX19zMzIgeTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgd2lkdGg7CisgX191MzIgaGVpZ2h0OworIF9fdTMyIGhhbmRsZTsKKyBfX3MzMiBob3RfeDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19zMzIgaG90X3k7Cit9Owogc3RydWN0IGRybV9tb2RlX2NydGNfbHV0IHsKICBfX3UzMiBjcnRjX2lkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTMyMywzNiArMzUzLDM3IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgRFJNX01PREVfUEFHRV9GTElQX0VWRU5UIDB4MDEKLSNkZWZpbmUgRFJNX01PREVfUEFHRV9GTElQX0ZMQUdTIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVAotc3RydWN0IGRybV9tb2RlX2NydGNfcGFnZV9mbGlwIHsKKyNkZWZpbmUgRFJNX01PREVfUEFHRV9GTElQX0FTWU5DIDB4MDIKKyNkZWZpbmUgRFJNX01PREVfUEFHRV9GTElQX0ZMQUdTIChEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlR8RFJNX01PREVfUEFHRV9GTElQX0FTWU5DKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBkcm1fbW9kZV9jcnRjX3BhZ2VfZmxpcCB7CiAgX191MzIgY3J0Y19pZDsKICBfX3UzMiBmYl9pZDsKICBfX3UzMiBmbGFnczsKLSBfX3UzMiByZXNlcnZlZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcmVzZXJ2ZWQ7CiAgX191NjQgdXNlcl9kYXRhOwogfTsKIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiB7Ci0gdWludDMyX3QgaGVpZ2h0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBoZWlnaHQ7CiAgdWludDMyX3Qgd2lkdGg7CiAgdWludDMyX3QgYnBwOwogIHVpbnQzMl90IGZsYWdzOwotIHVpbnQzMl90IGhhbmRsZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgaGFuZGxlOwogIHVpbnQzMl90IHBpdGNoOwogIHVpbnQ2NF90IHNpemU7CiB9Owotc3RydWN0IGRybV9tb2RlX21hcF9kdW1iIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgZHJtX21vZGVfbWFwX2R1bWIgewogIF9fdTMyIGhhbmRsZTsKICBfX3UzMiBwYWQ7CiAgX191NjQgb2Zmc2V0OwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IGRybV9tb2RlX2Rlc3Ryb3lfZHVtYiB7CiAgdWludDMyX3QgaGFuZGxlOwogfTsKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9kcm0vaTkxNV9kcm0uaCBiL2xpYmMva2VybmVsL3VhcGkvZHJtL2k5MTVfZHJtLmgKaW5kZXggM2U1MzMyOC4uN2I5ODEwYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9kcm0vaTkxNV9kcm0uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2RybS9pOTE1X2RybS5oCkBAIC0xOSwxNzcgKzE5LDE4MiBAQAogI2lmbmRlZiBfVUFQSV9JOTE1X0RSTV9IXwogI2RlZmluZSBfVUFQSV9JOTE1X0RSTV9IXwogI2luY2x1ZGUgPGRybS9kcm0uaD4KLSNkZWZpbmUgSTkxNV9OUl9URVhfUkVHSU9OUyAyNTUKKyNkZWZpbmUgSTkxNV9MM19QQVJJVFlfVUVWRU5UICJMM19QQVJJVFlfRVJST1IiCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJOTE1X0VSUk9SX1VFVkVOVCAiRVJST1IiCisjZGVmaW5lIEk5MTVfUkVTRVRfVUVWRU5UICJSRVNFVCIKKyNkZWZpbmUgSTkxNV9OUl9URVhfUkVHSU9OUyAyNTUKICNkZWZpbmUgSTkxNV9MT0dfTUlOX1RFWF9SRUdJT05fU0laRSAxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IF9kcm1faTkxNV9pbml0IHsKICBlbnVtIHsKICBJOTE1X0lOSVRfRE1BID0gMHgwMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSTkxNV9DTEVBTlVQX0RNQSA9IDB4MDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEk5MTVfUkVTVU1FX0RNQSA9IDB4MDMKICB9IGZ1bmM7CiAgdW5zaWduZWQgaW50IG1taW9fb2Zmc2V0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc2FyZWFfcHJpdl9vZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCByaW5nX3N0YXJ0OwogIHVuc2lnbmVkIGludCByaW5nX2VuZDsKICB1bnNpZ25lZCBpbnQgcmluZ19zaXplOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgZnJvbnRfb2Zmc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgYmFja19vZmZzZXQ7CiAgdW5zaWduZWQgaW50IGRlcHRoX29mZnNldDsKICB1bnNpZ25lZCBpbnQgdzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBwaXRjaDsKICB1bnNpZ25lZCBpbnQgcGl0Y2hfYml0czsKICB1bnNpZ25lZCBpbnQgYmFja19waXRjaDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGRlcHRoX3BpdGNoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgY3BwOwogIHVuc2lnbmVkIGludCBjaGlwc2V0OwogfSBkcm1faTkxNV9pbml0X3Q7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3QgX2RybV9pOTE1X3NhcmVhIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGRybV90ZXhfcmVnaW9uIHRleExpc3RbSTkxNV9OUl9URVhfUkVHSU9OUyArIDFdOwogIGludCBsYXN0X3VwbG9hZDsKICBpbnQgbGFzdF9lbnF1ZXVlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgbGFzdF9kaXNwYXRjaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGN0eE93bmVyOwogIGludCB0ZXhBZ2U7CiAgaW50IHBmX2VuYWJsZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBwZl9hY3RpdmU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBwZl9jdXJyZW50X3BhZ2U7CiAgaW50IHBlcmZfYm94ZXM7CiAgaW50IHdpZHRoLCBoZWlnaHQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGRybV9oYW5kbGVfdCBmcm9udF9oYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBmcm9udF9vZmZzZXQ7CiAgaW50IGZyb250X3NpemU7CiAgZHJtX2hhbmRsZV90IGJhY2tfaGFuZGxlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgYmFja19vZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBiYWNrX3NpemU7CiAgZHJtX2hhbmRsZV90IGRlcHRoX2hhbmRsZTsKICBpbnQgZGVwdGhfb2Zmc2V0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgZGVwdGhfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZHJtX2hhbmRsZV90IHRleF9oYW5kbGU7CiAgaW50IHRleF9vZmZzZXQ7CiAgaW50IHRleF9zaXplOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgbG9nX3RleF9ncmFudWxhcml0eTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHBpdGNoOwogIGludCByb3RhdGlvbjsKICBpbnQgcm90YXRlZF9vZmZzZXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCByb3RhdGVkX3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCByb3RhdGVkX3BpdGNoOwogIGludCB2aXJ0dWFsWCwgdmlydHVhbFk7CiAgdW5zaWduZWQgaW50IGZyb250X3RpbGVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgYmFja190aWxlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGRlcHRoX3RpbGVkOwogIHVuc2lnbmVkIGludCByb3RhdGVkX3RpbGVkOwogIHVuc2lnbmVkIGludCByb3RhdGVkMl90aWxlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHBpcGVBX3g7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBwaXBlQV95OwogIGludCBwaXBlQV93OwogIGludCBwaXBlQV9oOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgcGlwZUJfeDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHBpcGVCX3k7CiAgaW50IHBpcGVCX3c7CiAgaW50IHBpcGVCX2g7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGRybV9oYW5kbGVfdCB1bnVzZWRfaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB1bnVzZWQxLCB1bnVzZWQyLCB1bnVzZWQzOwogIF9fdTMyIGZyb250X2JvX2hhbmRsZTsKICBfX3UzMiBiYWNrX2JvX2hhbmRsZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdW51c2VkX2JvX2hhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZGVwdGhfYm9faGFuZGxlOwogfSBkcm1faTkxNV9zYXJlYV90OwogI2RlZmluZSBwbGFuZUFfeCBwaXBlQV94Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwbGFuZUFfeSBwaXBlQV95CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwbGFuZUFfdyBwaXBlQV93CiAjZGVmaW5lIHBsYW5lQV9oIHBpcGVBX2gKICNkZWZpbmUgcGxhbmVCX3ggcGlwZUJfeAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcGxhbmVCX3kgcGlwZUJfeQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcGxhbmVCX3cgcGlwZUJfdwogI2RlZmluZSBwbGFuZUJfaCBwaXBlQl9oCiAjZGVmaW5lIEk5MTVfQk9YX1JJTkdfRU1QVFkgMHgxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X0JPWF9GTElQIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9CT1hfV0FJVCAweDQKICNkZWZpbmUgSTkxNV9CT1hfVEVYVFVSRV9MT0FEIDB4OAogI2RlZmluZSBJOTE1X0JPWF9MT1NUX0NPTlRFWFQgMHgxMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfSU5JVCAweDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9GTFVTSCAweDAxCiAjZGVmaW5lIERSTV9JOTE1X0ZMSVAgMHgwMgogI2RlZmluZSBEUk1fSTkxNV9CQVRDSEJVRkZFUiAweDAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9JUlFfRU1JVCAweDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9JUlFfV0FJVCAweDA1CiAjZGVmaW5lIERSTV9JOTE1X0dFVFBBUkFNIDB4MDYKICNkZWZpbmUgRFJNX0k5MTVfU0VUUEFSQU0gMHgwNwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfQUxMT0MgMHgwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfRlJFRSAweDA5CiAjZGVmaW5lIERSTV9JOTE1X0lOSVRfSEVBUCAweDBhCiAjZGVmaW5lIERSTV9JOTE1X0NNREJVRkZFUiAweDBiCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9ERVNUUk9ZX0hFQVAgMHgwYworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfU0VUX1ZCTEFOS19QSVBFIDB4MGQKICNkZWZpbmUgRFJNX0k5MTVfR0VUX1ZCTEFOS19QSVBFIDB4MGUKICNkZWZpbmUgRFJNX0k5MTVfVkJMQU5LX1NXQVAgMHgwZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfSFdTX0FERFIgMHgxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfR0VNX0lOSVQgMHgxMwogI2RlZmluZSBEUk1fSTkxNV9HRU1fRVhFQ0JVRkZFUiAweDE0CiAjZGVmaW5lIERSTV9JOTE1X0dFTV9QSU4gMHgxNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfR0VNX1VOUElOIDB4MTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JOTE1X0dFTV9CVVNZIDB4MTcKICNkZWZpbmUgRFJNX0k5MTVfR0VNX1RIUk9UVExFIDB4MTgKICNkZWZpbmUgRFJNX0k5MTVfR0VNX0VOVEVSVlQgMHgxOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfR0VNX0xFQVZFVlQgMHgxYQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfR0VNX0NSRUFURSAweDFiCiAjZGVmaW5lIERSTV9JOTE1X0dFTV9QUkVBRCAweDFjCiAjZGVmaW5lIERSTV9JOTE1X0dFTV9QV1JJVEUgMHgxZAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfR0VNX01NQVAgMHgxZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfR0VNX1NFVF9ET01BSU4gMHgxZgogI2RlZmluZSBEUk1fSTkxNV9HRU1fU1dfRklOSVNIIDB4MjAKICNkZWZpbmUgRFJNX0k5MTVfR0VNX1NFVF9USUxJTkcgMHgyMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfR0VNX0dFVF9USUxJTkcgMHgyMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfR0VNX0dFVF9BUEVSVFVSRSAweDIzCiAjZGVmaW5lIERSTV9JOTE1X0dFTV9NTUFQX0dUVCAweDI0CiAjZGVmaW5lIERSTV9JOTE1X0dFVF9QSVBFX0ZST01fQ1JUQ19JRCAweDI1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9HRU1fTUFEVklTRSAweDI2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9PVkVSTEFZX1BVVF9JTUFHRSAweDI3CiAjZGVmaW5lIERSTV9JOTE1X09WRVJMQVlfQVRUUlMgMHgyOAogI2RlZmluZSBEUk1fSTkxNV9HRU1fRVhFQ0JVRkZFUjIgMHgyOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfR0VUX1NQUklURV9DT0xPUktFWSAweDJhCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9TRVRfU1BSSVRFX0NPTE9SS0VZIDB4MmIKICNkZWZpbmUgRFJNX0k5MTVfR0VNX1dBSVQgMHgyYwogI2RlZmluZSBEUk1fSTkxNV9HRU1fQ09OVEVYVF9DUkVBVEUgMHgyZAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfR0VNX0NPTlRFWFRfREVTVFJPWSAweDJlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9HRU1fU0VUX0NBQ0hJTkcgMHgyZgogI2RlZmluZSBEUk1fSTkxNV9HRU1fR0VUX0NBQ0hJTkcgMHgzMAogI2RlZmluZSBEUk1fSTkxNV9SRUdfUkVBRCAweDMxCisjZGVmaW5lIERSTV9JOTE1X0dFVF9SRVNFVF9TVEFUUyAweDMyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9JTklUIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9JTklULCBkcm1faTkxNV9pbml0X3QpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0ZMVVNIIERSTV9JTyAoIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9GTFVTSCkKQEAgLTI1MSwyOTAgKzI1NiwyOTUgQEAKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0NPTlRFWFRfREVTVFJPWSBEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0NPTlRFWFRfREVTVFJPWSwgc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2Rlc3Ryb3kpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X1JFR19SRUFEIERSTV9JT1dSIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfUkVHX1JFQUQsIHN0cnVjdCBkcm1faTkxNV9yZWdfcmVhZCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFVF9SRVNFVF9TVEFUUyBEUk1fSU9XUiAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFVF9SRVNFVF9TVEFUUywgc3RydWN0IGRybV9pOTE1X3Jlc2V0X3N0YXRzKQogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfYmF0Y2hidWZmZXIgewogIGludCBzdGFydDsKICBpbnQgdXNlZDsKLSBpbnQgRFIxOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBpbnQgRFIxOwogIGludCBEUjQ7CiAgaW50IG51bV9jbGlwcmVjdHM7CiAgc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICpjbGlwcmVjdHM7Ci19IGRybV9pOTE1X2JhdGNoYnVmZmVyX3Q7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBkcm1faTkxNV9iYXRjaGJ1ZmZlcl90OwogdHlwZWRlZiBzdHJ1Y3QgX2RybV9pOTE1X2NtZGJ1ZmZlciB7CiAgY2hhciBfX3VzZXIgKmJ1ZjsKICBpbnQgc3o7Ci0gaW50IERSMTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgaW50IERSMTsKICBpbnQgRFI0OwogIGludCBudW1fY2xpcHJlY3RzOwogIHN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqY2xpcHJlY3RzOwotfSBkcm1faTkxNV9jbWRidWZmZXJfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9IGRybV9pOTE1X2NtZGJ1ZmZlcl90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfaXJxX2VtaXQgewogIGludCBfX3VzZXIgKmlycV9zZXE7CiB9IGRybV9pOTE1X2lycV9lbWl0X3Q7Ci10eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9pcnFfd2FpdCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwordHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfaXJxX3dhaXQgewogIGludCBpcnFfc2VxOwogfSBkcm1faTkxNV9pcnFfd2FpdF90OwogI2RlZmluZSBJOTE1X1BBUkFNX0lSUV9BQ1RJVkUgMQotI2RlZmluZSBJOTE1X1BBUkFNX0FMTE9XX0JBVENIQlVGRkVSIDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEk5MTVfUEFSQU1fQUxMT1dfQkFUQ0hCVUZGRVIgMgogI2RlZmluZSBJOTE1X1BBUkFNX0xBU1RfRElTUEFUQ0ggMwogI2RlZmluZSBJOTE1X1BBUkFNX0NISVBTRVRfSUQgNAogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19HRU0gNQotI2RlZmluZSBJOTE1X1BBUkFNX05VTV9GRU5DRVNfQVZBSUwgNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSTkxNV9QQVJBTV9OVU1fRkVOQ0VTX0FWQUlMIDYKICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfT1ZFUkxBWSA3CiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1BBR0VGTElQUElORyA4CiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0VYRUNCVUYyIDkKLSNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfQlNEIDEwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJOTE1X1BBUkFNX0hBU19CU0QgMTAKICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfQkxUIDExCiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1JFTEFYRURfRkVOQ0lORyAxMgogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19DT0hFUkVOVF9SSU5HUyAxMwotI2RlZmluZSBJOTE1X1BBUkFNX0hBU19FWEVDX0NPTlNUQU5UUyAxNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfRVhFQ19DT05TVEFOVFMgMTQKICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfUkVMQVhFRF9ERUxUQSAxNQogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19HRU43X1NPTF9SRVNFVCAxNgogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19MTEMgMTcKLSNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfQUxJQVNJTkdfUFBHVFQgMTgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0FMSUFTSU5HX1BQR1RUIDE4CiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1dBSVRfVElNRU9VVCAxOQogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19TRU1BUEhPUkVTIDIwCiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1BSSU1FX1ZNQVBfRkxVU0ggMjEKLSNkZWZpbmUgSTkxNV9QQVJBTV9SU1ZEX0ZPUl9GVVRVUkVfVVNFIDIyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJOTE1X1BBUkFNX0hBU19WRUJPWCAyMgogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19TRUNVUkVfQkFUQ0hFUyAyMwogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19QSU5ORURfQkFUQ0hFUyAyNAogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19FWEVDX05PX1JFTE9DIDI1Ci0jZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0VYRUNfSEFORExFX0xVVCAyNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfRVhFQ19IQU5ETEVfTFVUIDI2CisjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1dUIDI3CiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbSB7CiAgaW50IHBhcmFtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgX191c2VyICp2YWx1ZTsKIH0gZHJtX2k5MTVfZ2V0cGFyYW1fdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfU0VUUEFSQU1fVVNFX01JX0JBVENIQlVGRkVSX1NUQVJUIDEKICNkZWZpbmUgSTkxNV9TRVRQQVJBTV9URVhfTFJVX0xPR19HUkFOVUxBUklUWSAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X1NFVFBBUkFNX0FMTE9XX0JBVENIQlVGRkVSIDMKICNkZWZpbmUgSTkxNV9TRVRQQVJBTV9OVU1fVVNFRF9GRU5DRVMgNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X3NldHBhcmFtIHsKICBpbnQgcGFyYW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB2YWx1ZTsKIH0gZHJtX2k5MTVfc2V0cGFyYW1fdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfTUVNX1JFR0lPTl9BR1AgMQogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfbWVtX2FsbG9jIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHJlZ2lvbjsKICBpbnQgYWxpZ25tZW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc2l6ZTsKICBpbnQgX191c2VyICpyZWdpb25fb2Zmc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gZHJtX2k5MTVfbWVtX2FsbG9jX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9tZW1fZnJlZSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCByZWdpb247CiAgaW50IHJlZ2lvbl9vZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBkcm1faTkxNV9tZW1fZnJlZV90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfbWVtX2luaXRfaGVhcCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCByZWdpb247CiAgaW50IHNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBzdGFydDsKIH0gZHJtX2k5MTVfbWVtX2luaXRfaGVhcF90OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X21lbV9kZXN0cm95X2hlYXAgewogIGludCByZWdpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBkcm1faTkxNV9tZW1fZGVzdHJveV9oZWFwX3Q7CiAjZGVmaW5lIERSTV9JOTE1X1ZCTEFOS19QSVBFX0EgMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQiAyCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV92YmxhbmtfcGlwZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBwaXBlOwogfSBkcm1faTkxNV92YmxhbmtfcGlwZV90OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X3ZibGFua19zd2FwIHsKICBkcm1fZHJhd2FibGVfdCBkcmF3YWJsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZW51bSBkcm1fdmJsYW5rX3NlcV90eXBlIHNlcXR5cGU7CiAgdW5zaWduZWQgaW50IHNlcXVlbmNlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gZHJtX2k5MTVfdmJsYW5rX3N3YXBfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X2h3c19hZGRyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgYWRkcjsKIH0gZHJtX2k5MTVfaHdzX2FkZHJfdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2luaXQgewogIF9fdTY0IGd0dF9zdGFydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZ3R0X2VuZDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUgewogIF9fdTY0IHNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhhbmRsZTsKICBfX3UzMiBwYWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1faTkxNV9nZW1fcHJlYWQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBoYW5kbGU7CiAgX191MzIgcGFkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBvZmZzZXQ7CiAgX191NjQgc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZGF0YV9wdHI7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlIHsKICBfX3UzMiBoYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBhZDsKICBfX3U2NCBvZmZzZXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHNpemU7CiAgX191NjQgZGF0YV9wdHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhhbmRsZTsKICBfX3UzMiBwYWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IG9mZnNldDsKICBfX3U2NCBzaXplOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBhZGRyX3B0cjsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwX2d0dCB7CiAgX191MzIgaGFuZGxlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwYWQ7CiAgX191NjQgb2Zmc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF9kb21haW4gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBoYW5kbGU7CiAgX191MzIgcmVhZF9kb21haW5zOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB3cml0ZV9kb21haW47CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1faTkxNV9nZW1fc3dfZmluaXNoIHsKICBfX3UzMiBoYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHRhcmdldF9oYW5kbGU7CiAgX191MzIgZGVsdGE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IG9mZnNldDsKICBfX3U2NCBwcmVzdW1lZF9vZmZzZXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlYWRfZG9tYWluczsKICBfX3UzMiB3cml0ZV9kb21haW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX0NQVSAweDAwMDAwMDAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fUkVOREVSIDB4MDAwMDAwMDIKICNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIgMHgwMDAwMDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQgMHgwMDAwMDAwOAogI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04gMHgwMDAwMDAxMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX1ZFUlRFWCAweDAwMDAwMDIwCiAjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9HVFQgMHgwMDAwMDA0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QgewogIF9fdTMyIGhhbmRsZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVsb2NhdGlvbl9jb3VudDsKICBfX3U2NCByZWxvY3NfcHRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBhbGlnbm1lbnQ7CiAgX191NjQgb2Zmc2V0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBidWZmZXJzX3B0cjsKICBfX3UzMiBidWZmZXJfY291bnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGJhdGNoX3N0YXJ0X29mZnNldDsKICBfX3UzMiBiYXRjaF9sZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIERSMTsKICBfX3UzMiBEUjQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG51bV9jbGlwcmVjdHM7CiAgX191NjQgY2xpcHJlY3RzX3B0cjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBoYW5kbGU7CiAgX191MzIgcmVsb2NhdGlvbl9jb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcmVsb2NzX3B0cjsKICBfX3U2NCBhbGlnbm1lbnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IG9mZnNldDsKICNkZWZpbmUgRVhFQ19PQkpFQ1RfTkVFRFNfRkVOQ0UgKDE8PDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWEVDX09CSkVDVF9ORUVEU19HVFQgKDE8PDEpCiAjZGVmaW5lIEVYRUNfT0JKRUNUX1dSSVRFICgxPDwyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19FWEVDX09CSkVDVF9VTktOT1dOX0ZMQUdTIC0oRVhFQ19PQkpFQ1RfV1JJVEU8PDEpCiAgX191NjQgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJzdmQxOwogIF9fdTY0IHJzdmQyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgYnVmZmVyc19wdHI7CiAgX191MzIgYnVmZmVyX2NvdW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBiYXRjaF9zdGFydF9vZmZzZXQ7CiAgX191MzIgYmF0Y2hfbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBEUjE7CiAgX191MzIgRFI0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBudW1fY2xpcHJlY3RzOwogIF9fdTY0IGNsaXByZWN0c19wdHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X0VYRUNfUklOR19NQVNLICg3PDwwKQogI2RlZmluZSBJOTE1X0VYRUNfREVGQVVMVCAoMDw8MCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfRVhFQ19SRU5ERVIgKDE8PDApCiAjZGVmaW5lIEk5MTVfRVhFQ19CU0QgKDI8PDApCi0jZGVmaW5lIEk5MTVfRVhFQ19CTFQgKDM8PDApCi0jZGVmaW5lIEk5MTVfRVhFQ19DT05TVEFOVFNfTUFTSyAoMzw8NikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEk5MTVfRVhFQ19CTFQgKDM8PDApCisjZGVmaW5lIEk5MTVfRVhFQ19WRUJPWCAoNDw8MCkKKyNkZWZpbmUgSTkxNV9FWEVDX0NPTlNUQU5UU19NQVNLICgzPDw2KQogI2RlZmluZSBJOTE1X0VYRUNfQ09OU1RBTlRTX1JFTF9HRU5FUkFMICgwPDw2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9FWEVDX0NPTlNUQU5UU19BQlNPTFVURSAoMTw8NikKICNkZWZpbmUgSTkxNV9FWEVDX0NPTlNUQU5UU19SRUxfU1VSRkFDRSAoMjw8NikKICBfX3U2NCBmbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcnN2ZDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJzdmQyOwogfTsKICNkZWZpbmUgSTkxNV9FWEVDX0dFTjdfU09MX1JFU0VUICgxPDw4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9FWEVDX1NFQ1VSRSAoMTw8OSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfRVhFQ19JU19QSU5ORUQgKDE8PDEwKQogI2RlZmluZSBJOTE1X0VYRUNfTk9fUkVMT0MgKDE8PDExKQogI2RlZmluZSBJOTE1X0VYRUNfSEFORExFX0xVVCAoMTw8MTIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX0k5MTVfRVhFQ19VTktOT1dOX0ZMQUdTIC0oSTkxNV9FWEVDX0hBTkRMRV9MVVQ8PDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X0VYRUNfQ09OVEVYVF9JRF9NQVNLICgweGZmZmZmZmZmKQogI2RlZmluZSBpOTE1X2V4ZWNidWZmZXIyX3NldF9jb250ZXh0X2lkKGViMiwgY29udGV4dCkgICAoZWIyKS5yc3ZkMSA9IGNvbnRleHQgJiBJOTE1X0VYRUNfQ09OVEVYVF9JRF9NQVNLCiAjZGVmaW5lIGk5MTVfZXhlY2J1ZmZlcjJfZ2V0X2NvbnRleHRfaWQoZWIyKSAgICgoZWIyKS5yc3ZkMSAmIEk5MTVfRVhFQ19DT05URVhUX0lEX01BU0spCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9pOTE1X2dlbV9waW4geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBoYW5kbGU7CiAgX191MzIgcGFkOwogIF9fdTY0IGFsaWdubWVudDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgb2Zmc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3VucGluIHsKICBfX3UzMiBoYW5kbGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBhZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9pOTE1X2dlbV9idXN5IHsKICBfX3UzMiBoYW5kbGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGJ1c3k7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgSTkxNV9DQUNISU5HX05PTkUgMAogI2RlZmluZSBJOTE1X0NBQ0hJTkdfQ0FDSEVEIDEKKyNkZWZpbmUgSTkxNV9DQUNISU5HX0RJU1BMQVkgMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1faTkxNV9nZW1fY2FjaGluZyB7CiAgX191MzIgaGFuZGxlOwpAQCAtNjg3LDQgKzY5NywxNCBAQAogIF9fdTY0IHZhbDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Oworc3RydWN0IGRybV9pOTE1X3Jlc2V0X3N0YXRzIHsKKyBfX3UzMiBjdHhfaWQ7CisgX191MzIgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHJlc2V0X2NvdW50OworIF9fdTMyIGJhdGNoX2FjdGl2ZTsKKyBfX3UzMiBiYXRjaF9wZW5kaW5nOworIF9fdTMyIHBhZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2RybS9tc21fZHJtLmggYi9saWJjL2tlcm5lbC91YXBpL2RybS9tc21fZHJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMzYmIzOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvZHJtL21zbV9kcm0uaApAQCAtMCwwICsxLDE0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX01TTV9EUk1fSF9fCisjZGVmaW5lIF9fTVNNX0RSTV9IX18KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxkcm0vZHJtLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU01fUElQRV9OT05FIDB4MDAKKyNkZWZpbmUgTVNNX1BJUEVfMkQwIDB4MDEKKyNkZWZpbmUgTVNNX1BJUEVfMkQxIDB4MDIKKyNkZWZpbmUgTVNNX1BJUEVfM0QwIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgZHJtX21zbV90aW1lc3BlYyB7CisgaW50NjRfdCB0dl9zZWM7CisgaW50NjRfdCB0dl9uc2VjOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TTV9QQVJBTV9HUFVfSUQgMHgwMQorI2RlZmluZSBNU01fUEFSQU1fR01FTV9TSVpFIDB4MDIKK3N0cnVjdCBkcm1fbXNtX3BhcmFtIHsKKyB1aW50MzJfdCBwaXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBwYXJhbTsKKyB1aW50NjRfdCB2YWx1ZTsKK307CisjZGVmaW5lIE1TTV9CT19TQ0FOT1VUIDB4MDAwMDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TTV9CT19HUFVfUkVBRE9OTFkgMHgwMDAwMDAwMgorI2RlZmluZSBNU01fQk9fQ0FDSEVfTUFTSyAweDAwMGYwMDAwCisjZGVmaW5lIE1TTV9CT19DQUNIRUQgMHgwMDAxMDAwMAorI2RlZmluZSBNU01fQk9fV0MgMHgwMDAyMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNNX0JPX1VOQ0FDSEVEIDB4MDAwNDAwMDAKK3N0cnVjdCBkcm1fbXNtX2dlbV9uZXcgeworIHVpbnQ2NF90IHNpemU7CisgdWludDMyX3QgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IGhhbmRsZTsKK307CitzdHJ1Y3QgZHJtX21zbV9nZW1faW5mbyB7CisgdWludDMyX3QgaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBwYWQ7CisgdWludDY0X3Qgb2Zmc2V0OworfTsKKyNkZWZpbmUgTVNNX1BSRVBfUkVBRCAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU01fUFJFUF9XUklURSAweDAyCisjZGVmaW5lIE1TTV9QUkVQX05PU1lOQyAweDA0CitzdHJ1Y3QgZHJtX21zbV9nZW1fY3B1X3ByZXAgeworIHVpbnQzMl90IGhhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3Qgb3A7Cisgc3RydWN0IGRybV9tc21fdGltZXNwZWMgdGltZW91dDsKK307CitzdHJ1Y3QgZHJtX21zbV9nZW1fY3B1X2ZpbmkgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBoYW5kbGU7Cit9Oworc3RydWN0IGRybV9tc21fZ2VtX3N1Ym1pdF9yZWxvYyB7CisgdWludDMyX3Qgc3VibWl0X29mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3Qgb3I7CisgaW50MzJfdCBzaGlmdDsKKyB1aW50MzJfdCByZWxvY19pZHg7CisgdWludDY0X3QgcmVsb2Nfb2Zmc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIE1TTV9TVUJNSVRfQ01EX0JVRiAweDAwMDEKKyNkZWZpbmUgTVNNX1NVQk1JVF9DTURfSUJfVEFSR0VUX0JVRiAweDAwMDIKKyNkZWZpbmUgTVNNX1NVQk1JVF9DTURfQ1RYX1JFU1RPUkVfQlVGIDB4MDAwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBkcm1fbXNtX2dlbV9zdWJtaXRfY21kIHsKKyB1aW50MzJfdCB0eXBlOworIHVpbnQzMl90IHN1Ym1pdF9pZHg7CisgdWludDMyX3Qgc3VibWl0X29mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3Qgc2l6ZTsKKyB1aW50MzJfdCBwYWQ7CisgdWludDMyX3QgbnJfcmVsb2NzOworIHVpbnQ2NF90IF9fdXNlciByZWxvY3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgTVNNX1NVQk1JVF9CT19SRUFEIDB4MDAwMQorI2RlZmluZSBNU01fU1VCTUlUX0JPX1dSSVRFIDB4MDAwMgorc3RydWN0IGRybV9tc21fZ2VtX3N1Ym1pdF9ibyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IGZsYWdzOworIHVpbnQzMl90IGhhbmRsZTsKKyB1aW50NjRfdCBwcmVzdW1lZDsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGRybV9tc21fZ2VtX3N1Ym1pdCB7CisgdWludDMyX3QgcGlwZTsKKyB1aW50MzJfdCBmZW5jZTsKKyB1aW50MzJfdCBucl9ib3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IG5yX2NtZHM7CisgdWludDY0X3QgX191c2VyIGJvczsKKyB1aW50NjRfdCBfX3VzZXIgY21kczsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGRybV9tc21fd2FpdF9mZW5jZSB7CisgdWludDMyX3QgZmVuY2U7CisgdWludDMyX3QgcGFkOworIHN0cnVjdCBkcm1fbXNtX3RpbWVzcGVjIHRpbWVvdXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgRFJNX01TTV9HRVRfUEFSQU0gMHgwMAorI2RlZmluZSBEUk1fTVNNX0dFTV9ORVcgMHgwMgorI2RlZmluZSBEUk1fTVNNX0dFTV9JTkZPIDB4MDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9NU01fR0VNX0NQVV9QUkVQIDB4MDQKKyNkZWZpbmUgRFJNX01TTV9HRU1fQ1BVX0ZJTkkgMHgwNQorI2RlZmluZSBEUk1fTVNNX0dFTV9TVUJNSVQgMHgwNgorI2RlZmluZSBEUk1fTVNNX1dBSVRfRkVOQ0UgMHgwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX01TTV9OVU1fSU9DVExTIDB4MDgKKyNkZWZpbmUgRFJNX0lPQ1RMX01TTV9HRVRfUEFSQU0gRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NU01fR0VUX1BBUkFNLCBzdHJ1Y3QgZHJtX21zbV9wYXJhbSkKKyNkZWZpbmUgRFJNX0lPQ1RMX01TTV9HRU1fTkVXIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTVNNX0dFTV9ORVcsIHN0cnVjdCBkcm1fbXNtX2dlbV9uZXcpCisjZGVmaW5lIERSTV9JT0NUTF9NU01fR0VNX0lORk8gRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NU01fR0VNX0lORk8sIHN0cnVjdCBkcm1fbXNtX2dlbV9pbmZvKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0lPQ1RMX01TTV9HRU1fQ1BVX1BSRVAgRFJNX0lPVyAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NU01fR0VNX0NQVV9QUkVQLCBzdHJ1Y3QgZHJtX21zbV9nZW1fY3B1X3ByZXApCisjZGVmaW5lIERSTV9JT0NUTF9NU01fR0VNX0NQVV9GSU5JIERSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTVNNX0dFTV9DUFVfRklOSSwgc3RydWN0IGRybV9tc21fZ2VtX2NwdV9maW5pKQorI2RlZmluZSBEUk1fSU9DVExfTVNNX0dFTV9TVUJNSVQgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NU01fR0VNX1NVQk1JVCwgc3RydWN0IGRybV9tc21fZ2VtX3N1Ym1pdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX01TTV9XQUlUX0ZFTkNFIERSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTVNNX1dBSVRfRkVOQ0UsIHN0cnVjdCBkcm1fbXNtX3dhaXRfZmVuY2UpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2RybS9yYWRlb25fZHJtLmggYi9saWJjL2tlcm5lbC91YXBpL2RybS9yYWRlb25fZHJtLmgKaW5kZXggYTJhNThkYy4uZmQwYTNhOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9kcm0vcmFkZW9uX2RybS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvZHJtL3JhZGVvbl9kcm0uaApAQCAtOTE2LDYgKzkxNiwxMSBAQAogI2RlZmluZSBSQURFT05fSU5GT19SSU5HX1dPUktJTkcgMHgxNQogI2RlZmluZSBSQURFT05fSU5GT19TSV9USUxFX01PREVfQVJSQVkgMHgxNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUkFERU9OX0lORk9fU0lfQ1BfRE1BX0NPTVBVVEUgMHgxNworI2RlZmluZSBSQURFT05fSU5GT19DSUtfTUFDUk9USUxFX01PREVfQVJSQVkgMHgxOAorI2RlZmluZSBSQURFT05fSU5GT19TSV9CQUNLRU5EX0VOQUJMRURfTUFTSyAweDE5CisjZGVmaW5lIFJBREVPTl9JTkZPX01BWF9TQ0xLIDB4MWEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX3JhZGVvbl9pbmZvIHsKICB1aW50MzJfdCByZXF1ZXN0OwogIHVpbnQzMl90IHBhZDsKQEAgLTkzOSw1ICs5NDQsNiBAQAogI2RlZmluZSBTSV9USUxFX01PREVfREVQVEhfU1RFTkNJTF8yRF8yQUEgMwogI2RlZmluZSBTSV9USUxFX01PREVfREVQVEhfU1RFTkNJTF8yRF80QUEgMwogI2RlZmluZSBTSV9USUxFX01PREVfREVQVEhfU1RFTkNJTF8yRF84QUEgMgotI2VuZGlmCisjZGVmaW5lIENJS19USUxFX01PREVfREVQVEhfU1RFTkNJTF8xRCA1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2RybS90ZWdyYV9kcm0uaCBiL2xpYmMva2VybmVsL3VhcGkvZHJtL3RlZ3JhX2RybS5oCmluZGV4IDgwZGM2NzEuLjkxZDcxYmUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvZHJtL3RlZ3JhX2RybS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvZHJtL3RlZ3JhX2RybS5oCkBAIC0xOCw1MCArMTgsNjAgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfVUFQSV9URUdSQV9EUk1fSF8KICNkZWZpbmUgX1VBUElfVEVHUkFfRFJNX0hfCisjaW5jbHVkZSA8ZHJtL2RybS5oPgorI2RlZmluZSBEUk1fVEVHUkFfR0VNX0NSRUFURV9USUxFRCAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX1RFR1JBX0dFTV9DUkVBVEVfQk9UVE9NX1VQICgxIDw8IDEpCiBzdHJ1Y3QgZHJtX3RlZ3JhX2dlbV9jcmVhdGUgewogIF9fdTY0IHNpemU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBoYW5kbGU7CiB9Owogc3RydWN0IGRybV90ZWdyYV9nZW1fbW1hcCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgb2Zmc2V0OwogfTsKIHN0cnVjdCBkcm1fdGVncmFfc3luY3B0X3JlYWQgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdmFsdWU7CiB9Owogc3RydWN0IGRybV90ZWdyYV9zeW5jcHRfaW5jciB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwYWQ7CiB9Owogc3RydWN0IGRybV90ZWdyYV9zeW5jcHRfd2FpdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0aHJlc2g7CiAgX191MzIgdGltZW91dDsKICBfX3UzMiB2YWx1ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX1RFR1JBX05PX1RJTUVPVVQgKDB4ZmZmZmZmZmYpCiBzdHJ1Y3QgZHJtX3RlZ3JhX29wZW5fY2hhbm5lbCB7CiAgX191MzIgY2xpZW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwYWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGNvbnRleHQ7CiB9Owogc3RydWN0IGRybV90ZWdyYV9jbG9zZV9jaGFubmVsIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgY29udGV4dDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV90ZWdyYV9nZXRfc3luY3B0IHsKICBfX3U2NCBjb250ZXh0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpbmRleDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaWQ7Cit9Oworc3RydWN0IGRybV90ZWdyYV9nZXRfc3luY3B0X2Jhc2UgeworIF9fdTY0IGNvbnRleHQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHN5bmNwdDsKICBfX3UzMiBpZDsKIH07CiBzdHJ1Y3QgZHJtX3RlZ3JhX3N5bmNwdCB7CkBAIC0xMzEsMTUgKzE0MSwxOCBAQAogI2RlZmluZSBEUk1fVEVHUkFfR0VUX1NZTkNQVCAweDA3CiAjZGVmaW5lIERSTV9URUdSQV9TVUJNSVQgMHgwOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX1RFR1JBX0dFVF9TWU5DUFRfQkFTRSAweDA5CiAjZGVmaW5lIERSTV9JT0NUTF9URUdSQV9HRU1fQ1JFQVRFIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVEVHUkFfR0VNX0NSRUFURSwgc3RydWN0IGRybV90ZWdyYV9nZW1fY3JlYXRlKQogI2RlZmluZSBEUk1fSU9DVExfVEVHUkFfR0VNX01NQVAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9URUdSQV9HRU1fTU1BUCwgc3RydWN0IGRybV90ZWdyYV9nZW1fbW1hcCkKICNkZWZpbmUgRFJNX0lPQ1RMX1RFR1JBX1NZTkNQVF9SRUFEIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVEVHUkFfU1lOQ1BUX1JFQUQsIHN0cnVjdCBkcm1fdGVncmFfc3luY3B0X3JlYWQpCi0jZGVmaW5lIERSTV9JT0NUTF9URUdSQV9TWU5DUFRfSU5DUiBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1RFR1JBX1NZTkNQVF9JTkNSLCBzdHJ1Y3QgZHJtX3RlZ3JhX3N5bmNwdF9pbmNyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0lPQ1RMX1RFR1JBX1NZTkNQVF9JTkNSIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVEVHUkFfU1lOQ1BUX0lOQ1IsIHN0cnVjdCBkcm1fdGVncmFfc3luY3B0X2luY3IpCiAjZGVmaW5lIERSTV9JT0NUTF9URUdSQV9TWU5DUFRfV0FJVCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1RFR1JBX1NZTkNQVF9XQUlULCBzdHJ1Y3QgZHJtX3RlZ3JhX3N5bmNwdF93YWl0KQogI2RlZmluZSBEUk1fSU9DVExfVEVHUkFfT1BFTl9DSEFOTkVMIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVEVHUkFfT1BFTl9DSEFOTkVMLCBzdHJ1Y3QgZHJtX3RlZ3JhX29wZW5fY2hhbm5lbCkKICNkZWZpbmUgRFJNX0lPQ1RMX1RFR1JBX0NMT1NFX0NIQU5ORUwgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9URUdSQV9DTE9TRV9DSEFOTkVMLCBzdHJ1Y3QgZHJtX3RlZ3JhX29wZW5fY2hhbm5lbCkKLSNkZWZpbmUgRFJNX0lPQ1RMX1RFR1JBX0dFVF9TWU5DUFQgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9URUdSQV9HRVRfU1lOQ1BULCBzdHJ1Y3QgZHJtX3RlZ3JhX2dldF9zeW5jcHQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfVEVHUkFfR0VUX1NZTkNQVCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1RFR1JBX0dFVF9TWU5DUFQsIHN0cnVjdCBkcm1fdGVncmFfZ2V0X3N5bmNwdCkKICNkZWZpbmUgRFJNX0lPQ1RMX1RFR1JBX1NVQk1JVCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1RFR1JBX1NVQk1JVCwgc3RydWN0IGRybV90ZWdyYV9zdWJtaXQpCisjZGVmaW5lIERSTV9JT0NUTF9URUdSQV9HRVRfU1lOQ1BUX0JBU0UgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9URUdSQV9HRVRfU1lOQ1BUX0JBU0UsIHN0cnVjdCBkcm1fdGVncmFfZ2V0X3N5bmNwdF9iYXNlKQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9kcm0vdm13Z2Z4X2RybS5oIGIvbGliYy9rZXJuZWwvdWFwaS9kcm0vdm13Z2Z4X2RybS5oCmluZGV4IGExMWZjMWMuLjg0OWVmN2QgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2RybS92bXdnZnhfZHJtLmgKQEAgLTE4LDI1NiArMTgsMzUyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19WTVdHRlhfRFJNX0hfXwogI2RlZmluZSBfX1ZNV0dGWF9EUk1fSF9fCisjaW5jbHVkZSA8ZHJtLmg+CiAjZGVmaW5lIERSTV9WTVdfTUFYX1NVUkZBQ0VfRkFDRVMgNgotI2RlZmluZSBEUk1fVk1XX01BWF9NSVBfTEVWRUxTIDI0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fVk1XX01BWF9NSVBfTEVWRUxTIDI0CiAjZGVmaW5lIERSTV9WTVdfR0VUX1BBUkFNIDAKICNkZWZpbmUgRFJNX1ZNV19BTExPQ19ETUFCVUYgMQogI2RlZmluZSBEUk1fVk1XX1VOUkVGX0RNQUJVRiAyCi0jZGVmaW5lIERSTV9WTVdfQ1VSU09SX0JZUEFTUyAzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fVk1XX0NVUlNPUl9CWVBBU1MgMwogI2RlZmluZSBEUk1fVk1XX0NPTlRST0xfU1RSRUFNIDQKICNkZWZpbmUgRFJNX1ZNV19DTEFJTV9TVFJFQU0gNQogI2RlZmluZSBEUk1fVk1XX1VOUkVGX1NUUkVBTSA2Ci0jZGVmaW5lIERSTV9WTVdfQ1JFQVRFX0NPTlRFWFQgNwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX1ZNV19DUkVBVEVfQ09OVEVYVCA3CiAjZGVmaW5lIERSTV9WTVdfVU5SRUZfQ09OVEVYVCA4CiAjZGVmaW5lIERSTV9WTVdfQ1JFQVRFX1NVUkZBQ0UgOQogI2RlZmluZSBEUk1fVk1XX1VOUkVGX1NVUkZBQ0UgMTAKLSNkZWZpbmUgRFJNX1ZNV19SRUZfU1VSRkFDRSAxMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX1ZNV19SRUZfU1VSRkFDRSAxMQogI2RlZmluZSBEUk1fVk1XX0VYRUNCVUYgMTIKICNkZWZpbmUgRFJNX1ZNV19HRVRfM0RfQ0FQIDEzCiAjZGVmaW5lIERSTV9WTVdfRkVOQ0VfV0FJVCAxNAotI2RlZmluZSBEUk1fVk1XX0ZFTkNFX1NJR05BTEVEIDE1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fVk1XX0ZFTkNFX1NJR05BTEVEIDE1CiAjZGVmaW5lIERSTV9WTVdfRkVOQ0VfVU5SRUYgMTYKICNkZWZpbmUgRFJNX1ZNV19GRU5DRV9FVkVOVCAxNwogI2RlZmluZSBEUk1fVk1XX1BSRVNFTlQgMTgKLSNkZWZpbmUgRFJNX1ZNV19QUkVTRU5UX1JFQURCQUNLIDE5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fVk1XX1BSRVNFTlRfUkVBREJBQ0sgMTkKICNkZWZpbmUgRFJNX1ZNV19VUERBVEVfTEFZT1VUIDIwCisjZGVmaW5lIERSTV9WTVdfQ1JFQVRFX1NIQURFUiAyMQorI2RlZmluZSBEUk1fVk1XX1VOUkVGX1NIQURFUiAyMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX1ZNV19HQl9TVVJGQUNFX0NSRUFURSAyMworI2RlZmluZSBEUk1fVk1XX0dCX1NVUkZBQ0VfUkVGIDI0CisjZGVmaW5lIERSTV9WTVdfU1lOQ0NQVSAyNQogI2RlZmluZSBEUk1fVk1XX1BBUkFNX05VTV9TVFJFQU1TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9WTVdfUEFSQU1fTlVNX0ZSRUVfU1RSRUFNUyAxCiAjZGVmaW5lIERSTV9WTVdfUEFSQU1fM0QgMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX1ZNV19QQVJBTV9IV19DQVBTIDMKICNkZWZpbmUgRFJNX1ZNV19QQVJBTV9GSUZPX0NBUFMgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX1ZNV19QQVJBTV9NQVhfRkJfU0laRSA1CiAjZGVmaW5lIERSTV9WTVdfUEFSQU1fRklGT19IV19WRVJTSU9OIDYKKyNkZWZpbmUgRFJNX1ZNV19QQVJBTV9NQVhfU1VSRl9NRU1PUlkgNworI2RlZmluZSBEUk1fVk1XX1BBUkFNXzNEX0NBUFNfU0laRSA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fVk1XX1BBUkFNX01BWF9NT0JfTUVNT1JZIDkKKyNkZWZpbmUgRFJNX1ZNV19QQVJBTV9NQVhfTU9CX1NJWkUgMTAKIHN0cnVjdCBkcm1fdm13X2dldHBhcmFtX2FyZyB7CiAgdWludDY0X3QgdmFsdWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IHBhcmFtOwogIHVpbnQzMl90IHBhZDY0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX3Ztd19jb250ZXh0X2FyZyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludDMyX3QgY2lkOwogIHVpbnQzMl90IHBhZDY0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX3Ztd19zdXJmYWNlX2NyZWF0ZV9yZXEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBmbGFnczsKICB1aW50MzJfdCBmb3JtYXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IG1pcF9sZXZlbHNbRFJNX1ZNV19NQVhfU1VSRkFDRV9GQUNFU107CiAgdWludDY0X3Qgc2l6ZV9hZGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQzMl90IHNoYXJlYWJsZTsKICBpbnQzMl90IHNjYW5vdXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fdm13X3N1cmZhY2VfYXJnIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50MzJfdCBzaWQ7CiAgdWludDMyX3QgcGFkNjQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fdm13X3NpemUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCB3aWR0aDsKICB1aW50MzJfdCBoZWlnaHQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGRlcHRoOwogIHVpbnQzMl90IHBhZDY0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiB1bmlvbiBkcm1fdm13X3N1cmZhY2VfY3JlYXRlX2FyZyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBkcm1fdm13X3N1cmZhY2VfYXJnIHJlcDsKICBzdHJ1Y3QgZHJtX3Ztd19zdXJmYWNlX2NyZWF0ZV9yZXEgcmVxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiB1bmlvbiBkcm1fdm13X3N1cmZhY2VfcmVmZXJlbmNlX2FyZyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBkcm1fdm13X3N1cmZhY2VfY3JlYXRlX3JlcSByZXA7CiAgc3RydWN0IGRybV92bXdfc3VyZmFjZV9hcmcgcmVxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIERSTV9WTVdfRVhFQ0JVRl9WRVJTSU9OIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX3Ztd19leGVjYnVmX2FyZyB7CiAgdWludDY0X3QgY29tbWFuZHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGNvbW1hbmRfc2l6ZTsKICB1aW50MzJfdCB0aHJvdHRsZV91czsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDY0X3QgZmVuY2VfcmVwOwogIHVpbnQzMl90IHZlcnNpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGZsYWdzOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX3Ztd19mZW5jZV9yZXAgewogIHVpbnQzMl90IGhhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgbWFzazsKICB1aW50MzJfdCBzZXFubzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgcGFzc2VkX3NlcW5vOwogIHVpbnQzMl90IHBhZDY0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQzMl90IGVycm9yOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX3Ztd19hbGxvY19kbWFidWZfcmVxIHsKICB1aW50MzJfdCBzaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBwYWQ2NDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV92bXdfZG1hYnVmX3JlcCB7CiAgdWludDY0X3QgbWFwX2hhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgaGFuZGxlOwogIHVpbnQzMl90IGN1cl9nbXJfaWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGN1cl9nbXJfb2Zmc2V0OwogIHVpbnQzMl90IHBhZDY0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiB1bmlvbiBkcm1fdm13X2FsbG9jX2RtYWJ1Zl9hcmcgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZHJtX3Ztd19hbGxvY19kbWFidWZfcmVxIHJlcTsKICBzdHJ1Y3QgZHJtX3Ztd19kbWFidWZfcmVwIHJlcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV92bXdfdW5yZWZfZG1hYnVmX2FyZyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGhhbmRsZTsKICB1aW50MzJfdCBwYWQ2NDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV92bXdfcmVjdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludDMyX3QgeDsKICBpbnQzMl90IHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IHc7CiAgdWludDMyX3QgaDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV92bXdfY29udHJvbF9zdHJlYW1fYXJnIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3Qgc3RyZWFtX2lkOwogIHVpbnQzMl90IGVuYWJsZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGZsYWdzOwogIHVpbnQzMl90IGNvbG9yX2tleTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgaGFuZGxlOwogIHVpbnQzMl90IG9mZnNldDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50MzJfdCBmb3JtYXQ7CiAgdWludDMyX3Qgc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3Qgd2lkdGg7CiAgdWludDMyX3QgaGVpZ2h0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBwaXRjaFszXTsKICB1aW50MzJfdCBwYWQ2NDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGRybV92bXdfcmVjdCBzcmM7CiAgc3RydWN0IGRybV92bXdfcmVjdCBkc3Q7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgRFJNX1ZNV19DVVJTT1JfQllQQVNTX0FMTCAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX1ZNV19DVVJTT1JfQllQQVNTX0ZMQUdTICgxKQogc3RydWN0IGRybV92bXdfY3Vyc29yX2J5cGFzc19hcmcgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBmbGFnczsKICB1aW50MzJfdCBjcnRjX2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQzMl90IHhwb3M7CiAgaW50MzJfdCB5cG9zOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQzMl90IHhob3Q7CiAgaW50MzJfdCB5aG90OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX3Ztd19zdHJlYW1fYXJnIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3Qgc3RyZWFtX2lkOwogIHVpbnQzMl90IHBhZDY0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX3Ztd19nZXRfM2RfY2FwX2FyZyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ2NF90IGJ1ZmZlcjsKICB1aW50MzJfdCBtYXhfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgcGFkNjQ7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX1ZNV19GRU5DRV9GTEFHX0VYRUMgKDEgPDwgMCkKICNkZWZpbmUgRFJNX1ZNV19GRU5DRV9GTEFHX1FVRVJZICgxIDw8IDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fVk1XX1dBSVRfT1BUSU9OX1VOUkVGICgxIDw8IDApCiBzdHJ1Y3QgZHJtX3Ztd19mZW5jZV93YWl0X2FyZyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGhhbmRsZTsKICBpbnQzMl90IGNvb2tpZV92YWxpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDY0X3Qga2VybmVsX2Nvb2tpZTsKICB1aW50NjRfdCB0aW1lb3V0X3VzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQzMl90IGxhenk7CiAgaW50MzJfdCBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50MzJfdCB3YWl0X29wdGlvbnM7CiAgaW50MzJfdCBwYWQ2NDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV92bXdfZmVuY2Vfc2lnbmFsZWRfYXJnIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgaGFuZGxlOwogIHVpbnQzMl90IGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQzMl90IHNpZ25hbGVkOwogIHVpbnQzMl90IHBhc3NlZF9zZXFubzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3Qgc2lnbmFsZWRfZmxhZ3M7CiAgdWludDMyX3QgcGFkNjQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fdm13X2ZlbmNlX2FyZyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGhhbmRsZTsKICB1aW50MzJfdCBwYWQ2NDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBEUk1fVk1XX0VWRU5UX0ZFTkNFX1NJR05BTEVEIDB4ODAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX3Ztd19ldmVudF9mZW5jZSB7CiAgc3RydWN0IGRybV9ldmVudCBiYXNlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50NjRfdCB1c2VyX2RhdGE7CiAgdWludDMyX3QgdHZfc2VjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCB0dl91c2VjOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9WTVdfRkVfRkxBR19SRVFfVElNRSAoMSA8PCAwKQogc3RydWN0IGRybV92bXdfZmVuY2VfZXZlbnRfYXJnIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDY0X3QgZmVuY2VfcmVwOwogIHVpbnQ2NF90IHVzZXJfZGF0YTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgaGFuZGxlOwogIHVpbnQzMl90IGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX3Ztd19wcmVzZW50X2FyZyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGZiX2lkOwogIHVpbnQzMl90IHNpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50MzJfdCBkZXN0X3g7CiAgaW50MzJfdCBkZXN0X3k7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ2NF90IGNsaXBzX3B0cjsKICB1aW50MzJfdCBudW1fY2xpcHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IHBhZDY0OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX3Ztd19wcmVzZW50X3JlYWRiYWNrX2FyZyB7CiAgdWludDMyX3QgZmJfaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IG51bV9jbGlwczsKICB1aW50NjRfdCBjbGlwc19wdHI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ2NF90IGZlbmNlX3JlcDsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV92bXdfdXBkYXRlX2xheW91dF9hcmcgewogIHVpbnQzMl90IG51bV9vdXRwdXRzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBwYWQ2NDsKICB1aW50NjRfdCByZWN0czsKLX07Ci0jZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworZW51bSBkcm1fdm13X3NoYWRlcl90eXBlIHsKKyBkcm1fdm13X3NoYWRlcl90eXBlX3ZzID0gMCwKKyBkcm1fdm13X3NoYWRlcl90eXBlX3BzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBkcm1fdm13X3NoYWRlcl90eXBlX2dzCit9Oworc3RydWN0IGRybV92bXdfc2hhZGVyX2NyZWF0ZV9hcmcgeworIGVudW0gZHJtX3Ztd19zaGFkZXJfdHlwZSBzaGFkZXJfdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3Qgc2l6ZTsKKyB1aW50MzJfdCBidWZmZXJfaGFuZGxlOworIHVpbnQzMl90IHNoYWRlcl9oYW5kbGU7CisgdWludDY0X3Qgb2Zmc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitzdHJ1Y3QgZHJtX3Ztd19zaGFkZXJfYXJnIHsKKyB1aW50MzJfdCBoYW5kbGU7CisgdWludDMyX3QgcGFkNjQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK2VudW0gZHJtX3Ztd19zdXJmYWNlX2ZsYWdzIHsKKyBkcm1fdm13X3N1cmZhY2VfZmxhZ19zaGFyZWFibGUgPSAoMSA8PCAwKSwKKyBkcm1fdm13X3N1cmZhY2VfZmxhZ19zY2Fub3V0ID0gKDEgPDwgMSksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGRybV92bXdfc3VyZmFjZV9mbGFnX2NyZWF0ZV9idWZmZXIgPSAoMSA8PCAyKQorfTsKK3N0cnVjdCBkcm1fdm13X2diX3N1cmZhY2VfY3JlYXRlX3JlcSB7CisgdWludDMyX3Qgc3ZnYTNkX2ZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBmb3JtYXQ7CisgdWludDMyX3QgbWlwX2xldmVsczsKKyBlbnVtIGRybV92bXdfc3VyZmFjZV9mbGFncyBkcm1fc3VyZmFjZV9mbGFnczsKKyB1aW50MzJfdCBtdWx0aXNhbXBsZV9jb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgYXV0b2dlbl9maWx0ZXI7CisgdWludDMyX3QgYnVmZmVyX2hhbmRsZTsKKyB1aW50MzJfdCBwYWQ2NDsKKyBzdHJ1Y3QgZHJtX3Ztd19zaXplIGJhc2Vfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Oworc3RydWN0IGRybV92bXdfZ2Jfc3VyZmFjZV9jcmVhdGVfcmVwIHsKKyB1aW50MzJfdCBoYW5kbGU7CisgdWludDMyX3QgYmFja3VwX3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IGJ1ZmZlcl9oYW5kbGU7CisgdWludDMyX3QgYnVmZmVyX3NpemU7CisgdWludDY0X3QgYnVmZmVyX21hcF9oYW5kbGU7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3VuaW9uIGRybV92bXdfZ2Jfc3VyZmFjZV9jcmVhdGVfYXJnIHsKKyBzdHJ1Y3QgZHJtX3Ztd19nYl9zdXJmYWNlX2NyZWF0ZV9yZXAgcmVwOworIHN0cnVjdCBkcm1fdm13X2diX3N1cmZhY2VfY3JlYXRlX3JlcSByZXE7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBkcm1fdm13X2diX3N1cmZhY2VfcmVmX3JlcCB7Cisgc3RydWN0IGRybV92bXdfZ2Jfc3VyZmFjZV9jcmVhdGVfcmVxIGNyZXE7Cisgc3RydWN0IGRybV92bXdfZ2Jfc3VyZmFjZV9jcmVhdGVfcmVwIGNyZXA7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3VuaW9uIGRybV92bXdfZ2Jfc3VyZmFjZV9yZWZlcmVuY2VfYXJnIHsKKyBzdHJ1Y3QgZHJtX3Ztd19nYl9zdXJmYWNlX3JlZl9yZXAgcmVwOworIHN0cnVjdCBkcm1fdm13X3N1cmZhY2VfYXJnIHJlcTsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBkcm1fdm13X3N5bmNjcHVfZmxhZ3MgeworIGRybV92bXdfc3luY2NwdV9yZWFkID0gKDEgPDwgMCksCisgZHJtX3Ztd19zeW5jY3B1X3dyaXRlID0gKDEgPDwgMSksCisgZHJtX3Ztd19zeW5jY3B1X2RvbnRibG9jayA9ICgxIDw8IDIpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBkcm1fdm13X3N5bmNjcHVfYWxsb3dfY3MgPSAoMSA8PCAzKQorfTsKK2VudW0gZHJtX3Ztd19zeW5jY3B1X29wIHsKKyBkcm1fdm13X3N5bmNjcHVfZ3JhYiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgZHJtX3Ztd19zeW5jY3B1X3JlbGVhc2UKK307CitzdHJ1Y3QgZHJtX3Ztd19zeW5jY3B1X2FyZyB7CisgZW51bSBkcm1fdm13X3N5bmNjcHVfb3Agb3A7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGVudW0gZHJtX3Ztd19zeW5jY3B1X2ZsYWdzIGZsYWdzOworIHVpbnQzMl90IGhhbmRsZTsKKyB1aW50MzJfdCBwYWQ2NDsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2FwbV9iaW9zLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2FwbV9iaW9zLmgKaW5kZXggMTU1YjY0NS4uZjNiNjEzMCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9hcG1fYmlvcy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvYXBtX2Jpb3MuaApAQCAtNjYsNTYgKzY2LDU5IEBACiAjZGVmaW5lIEFQTV9TVEFOREJZX1JFU1VNRSAweDAwMGIKICNkZWZpbmUgQVBNX0NBUEFCSUxJVFlfQ0hBTkdFIDB4MDAwYwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVBNX1VTRVJfSElCRVJOQVRJT04gMHgwMDBkCisjZGVmaW5lIEFQTV9ISUJFUk5BVElPTl9SRVNVTUUgMHgwMDBlCiAjZGVmaW5lIEFQTV9TVUNDRVNTIDB4MDAKICNkZWZpbmUgQVBNX0RJU0FCTEVEIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV9DT05ORUNURUQgMHgwMgogI2RlZmluZSBBUE1fTk9UX0NPTk5FQ1RFRCAweDAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fMTZfQ09OTkVDVEVEIDB4MDUKICNkZWZpbmUgQVBNXzE2X1VOU1VQUE9SVEVEIDB4MDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV8zMl9DT05ORUNURUQgMHgwNwogI2RlZmluZSBBUE1fMzJfVU5TVVBQT1JURUQgMHgwOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX0JBRF9ERVZJQ0UgMHgwOQogI2RlZmluZSBBUE1fQkFEX1BBUkFNIDB4MGEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV9OT1RfRU5HQUdFRCAweDBiCiAjZGVmaW5lIEFQTV9CQURfRlVOQ1RJT04gMHgwYwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX1JFU1VNRV9ESVNBQkxFRCAweDBkCiAjZGVmaW5lIEFQTV9OT19FUlJPUiAweDUzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fQkFEX1NUQVRFIDB4NjAKICNkZWZpbmUgQVBNX05PX0VWRU5UUyAweDgwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fTk9UX1BSRVNFTlQgMHg4NgogI2RlZmluZSBBUE1fREVWSUNFX0JJT1MgMHgwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fREVWSUNFX0FMTCAweDAwMDEKICNkZWZpbmUgQVBNX0RFVklDRV9ESVNQTEFZIDB4MDEwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX0RFVklDRV9TVE9SQUdFIDB4MDIwMAogI2RlZmluZSBBUE1fREVWSUNFX1BBUkFMTEVMIDB4MDMwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX0RFVklDRV9TRVJJQUwgMHgwNDAwCiAjZGVmaW5lIEFQTV9ERVZJQ0VfTkVUV09SSyAweDA1MDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV9ERVZJQ0VfUENNQ0lBIDB4MDYwMAogI2RlZmluZSBBUE1fREVWSUNFX0JBVFRFUlkgMHg4MDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fREVWSUNFX09FTSAweGUwMDAKICNkZWZpbmUgQVBNX0RFVklDRV9PTERfQUxMIDB4ZmZmZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX0RFVklDRV9DTEFTUyAweDAwZmYKICNkZWZpbmUgQVBNX0RFVklDRV9NQVNLIDB4ZmYwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX01BWF9CQVRURVJJRVMgMgogI2RlZmluZSBBUE1fQ0FQX0dMT0JBTF9TVEFOREJZIDB4MDAwMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX0NBUF9HTE9CQUxfU1VTUEVORCAweDAwMDIKICNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1RBTkRCWV9USU1FUiAweDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NVU1BFTkRfVElNRVIgMHgwMDA4CiAjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NUQU5EQllfUklORyAweDAwMTAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NVU1BFTkRfUklORyAweDAwMjAKICNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1RBTkRCWV9QQ01DSUEgMHgwMDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fQ0FQX1JFU1VNRV9TVVNQRU5EX1BDTUNJQSAweDAwODAKICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX0lPQ19TVEFOREJZIF9JTygnQScsIDEpCiAjZGVmaW5lIEFQTV9JT0NfU1VTUEVORCBfSU8oJ0EnLCAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9hdWRpdC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9hdWRpdC5oCmluZGV4IDUzNDQ4MGYuLmI1MDY1MTIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvYXVkaXQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2F1ZGl0LmgKQEAgLTQzLDMyNCArNDMsMzUyIEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9UVFlfR0VUIDEwMTYKICNkZWZpbmUgQVVESVRfVFRZX1NFVCAxMDE3CisjZGVmaW5lIEFVRElUX1NFVF9GRUFUVVJFIDEwMTgKKyNkZWZpbmUgQVVESVRfR0VUX0ZFQVRVUkUgMTAxOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfRkVBVFVSRV9DSEFOR0UgMTAyMAogI2RlZmluZSBBVURJVF9GSVJTVF9VU0VSX01TRyAxMTAwCiAjZGVmaW5lIEFVRElUX1VTRVJfQVZDIDExMDcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX1VTRVJfVFRZIDExMjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0xBU1RfVVNFUl9NU0cgMTE5OQogI2RlZmluZSBBVURJVF9GSVJTVF9VU0VSX01TRzIgMjEwMAogI2RlZmluZSBBVURJVF9MQVNUX1VTRVJfTVNHMiAyOTk5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9EQUVNT05fU1RBUlQgMTIwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfREFFTU9OX0VORCAxMjAxCiAjZGVmaW5lIEFVRElUX0RBRU1PTl9BQk9SVCAxMjAyCiAjZGVmaW5lIEFVRElUX0RBRU1PTl9DT05GSUcgMTIwMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfU1lTQ0FMTCAxMzAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9QQVRIIDEzMDIKICNkZWZpbmUgQVVESVRfSVBDIDEzMDMKICNkZWZpbmUgQVVESVRfU09DS0VUQ0FMTCAxMzA0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9DT05GSUdfQ0hBTkdFIDEzMDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX1NPQ0tBRERSIDEzMDYKICNkZWZpbmUgQVVESVRfQ1dEIDEzMDcKICNkZWZpbmUgQVVESVRfRVhFQ1ZFIDEzMDkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0lQQ19TRVRfUEVSTSAxMzExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9NUV9PUEVOIDEzMTIKICNkZWZpbmUgQVVESVRfTVFfU0VORFJFQ1YgMTMxMwogI2RlZmluZSBBVURJVF9NUV9OT1RJRlkgMTMxNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfTVFfR0VUU0VUQVRUUiAxMzE1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9LRVJORUxfT1RIRVIgMTMxNgogI2RlZmluZSBBVURJVF9GRF9QQUlSIDEzMTcKICNkZWZpbmUgQVVESVRfT0JKX1BJRCAxMzE4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9UVFkgMTMxOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfRU9FIDEzMjAKICNkZWZpbmUgQVVESVRfQlBSTV9GQ0FQUyAxMzIxCiAjZGVmaW5lIEFVRElUX0NBUFNFVCAxMzIyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9NTUFQIDEzMjMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX05FVEZJTFRFUl9QS1QgMTMyNAogI2RlZmluZSBBVURJVF9ORVRGSUxURVJfQ0ZHIDEzMjUKICNkZWZpbmUgQVVESVRfU0VDQ09NUCAxMzI2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9BVkMgMTQwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfU0VMSU5VWF9FUlIgMTQwMQogI2RlZmluZSBBVURJVF9BVkNfUEFUSCAxNDAyCiAjZGVmaW5lIEFVRElUX01BQ19QT0xJQ1lfTE9BRCAxNDAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9NQUNfU1RBVFVTIDE0MDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX01BQ19DT05GSUdfQ0hBTkdFIDE0MDUKICNkZWZpbmUgQVVESVRfTUFDX1VOTEJMX0FMTE9XIDE0MDYKICNkZWZpbmUgQVVESVRfTUFDX0NJUFNPVjRfQUREIDE0MDcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX01BQ19DSVBTT1Y0X0RFTCAxNDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9NQUNfTUFQX0FERCAxNDA5CiAjZGVmaW5lIEFVRElUX01BQ19NQVBfREVMIDE0MTAKICNkZWZpbmUgQVVESVRfTUFDX0lQU0VDX0FERFNBIDE0MTEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX01BQ19JUFNFQ19ERUxTQSAxNDEyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9NQUNfSVBTRUNfQUREU1BEIDE0MTMKICNkZWZpbmUgQVVESVRfTUFDX0lQU0VDX0RFTFNQRCAxNDE0CiAjZGVmaW5lIEFVRElUX01BQ19JUFNFQ19FVkVOVCAxNDE1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9NQUNfVU5MQkxfU1RDQUREIDE0MTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX01BQ19VTkxCTF9TVENERUwgMTQxNwogI2RlZmluZSBBVURJVF9GSVJTVF9LRVJOX0FOT01fTVNHIDE3MDAKICNkZWZpbmUgQVVESVRfTEFTVF9LRVJOX0FOT01fTVNHIDE3OTkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0FOT01fUFJPTUlTQ1VPVVMgMTcwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQU5PTV9BQkVORCAxNzAxCiAjZGVmaW5lIEFVRElUX0FOT01fTElOSyAxNzAyCiAjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9EQVRBIDE4MDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9NRVRBREFUQSAxODAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfU1RBVFVTIDE4MDIKICNkZWZpbmUgQVVESVRfSU5URUdSSVRZX0hBU0ggMTgwMwogI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfUENSIDE4MDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9SVUxFIDE4MDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0tFUk5FTCAyMDAwCiAjZGVmaW5lIEFVRElUX0ZJTFRFUl9VU0VSIDB4MDAKICNkZWZpbmUgQVVESVRfRklMVEVSX1RBU0sgMHgwMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfRklMVEVSX0VOVFJZIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0ZJTFRFUl9XQVRDSCAweDAzCiAjZGVmaW5lIEFVRElUX0ZJTFRFUl9FWElUIDB4MDQKICNkZWZpbmUgQVVESVRfRklMVEVSX1RZUEUgMHgwNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfTlJfRklMVEVSUyA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9GSUxURVJfUFJFUEVORCAweDEwCiAjZGVmaW5lIEFVRElUX05FVkVSIDAKICNkZWZpbmUgQVVESVRfUE9TU0lCTEUgMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQUxXQVlTIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX01BWF9GSUVMRFMgNjQKICNkZWZpbmUgQVVESVRfTUFYX0tFWV9MRU4gMjU2CiAjZGVmaW5lIEFVRElUX0JJVE1BU0tfU0laRSA2NAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfV09SRChucikgKChfX3UzMikoKG5yKS8zMikpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9CSVQobnIpICgxIDw8ICgobnIpIC0gQVVESVRfV09SRChucikqMzIpKQogI2RlZmluZSBBVURJVF9TWVNDQUxMX0NMQVNTRVMgMTYKICNkZWZpbmUgQVVESVRfQ0xBU1NfRElSX1dSSVRFIDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0NMQVNTX0RJUl9XUklURV8zMiAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9DTEFTU19DSEFUVFIgMgogI2RlZmluZSBBVURJVF9DTEFTU19DSEFUVFJfMzIgMwogI2RlZmluZSBBVURJVF9DTEFTU19SRUFEIDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0NMQVNTX1JFQURfMzIgNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQ0xBU1NfV1JJVEUgNgogI2RlZmluZSBBVURJVF9DTEFTU19XUklURV8zMiA3CiAjZGVmaW5lIEFVRElUX0NMQVNTX1NJR05BTCA4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9DTEFTU19TSUdOQUxfMzIgOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfVU5VU0VEX0JJVFMgMHgwN0ZGRkMwMAogI2RlZmluZSBBVURJVF9DT01QQVJFX1VJRF9UT19PQkpfVUlEIDEKICNkZWZpbmUgQVVESVRfQ09NUEFSRV9HSURfVE9fT0JKX0dJRCAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9DT01QQVJFX0VVSURfVE9fT0JKX1VJRCAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9DT01QQVJFX0VHSURfVE9fT0JKX0dJRCA0CiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfQVVJRF9UT19PQkpfVUlEIDUKICNkZWZpbmUgQVVESVRfQ09NUEFSRV9TVUlEX1RPX09CSl9VSUQgNgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQ09NUEFSRV9TR0lEX1RPX09CSl9HSUQgNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQ09NUEFSRV9GU1VJRF9UT19PQkpfVUlEIDgKICNkZWZpbmUgQVVESVRfQ09NUEFSRV9GU0dJRF9UT19PQkpfR0lEIDkKICNkZWZpbmUgQVVESVRfQ09NUEFSRV9VSURfVE9fQVVJRCAxMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQ09NUEFSRV9VSURfVE9fRVVJRCAxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQ09NUEFSRV9VSURfVE9fRlNVSUQgMTIKICNkZWZpbmUgQVVESVRfQ09NUEFSRV9VSURfVE9fU1VJRCAxMwogI2RlZmluZSBBVURJVF9DT01QQVJFX0FVSURfVE9fRlNVSUQgMTQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfQVVJRF9UT19TVUlEIDE1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9DT01QQVJFX0FVSURfVE9fRVVJRCAxNgogI2RlZmluZSBBVURJVF9DT01QQVJFX0VVSURfVE9fU1VJRCAxNwogI2RlZmluZSBBVURJVF9DT01QQVJFX0VVSURfVE9fRlNVSUQgMTgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfU1VJRF9UT19GU1VJRCAxOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQ09NUEFSRV9HSURfVE9fRUdJRCAyMAogI2RlZmluZSBBVURJVF9DT01QQVJFX0dJRF9UT19GU0dJRCAyMQogI2RlZmluZSBBVURJVF9DT01QQVJFX0dJRF9UT19TR0lEIDIyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9DT01QQVJFX0VHSURfVE9fRlNHSUQgMjMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfRUdJRF9UT19TR0lEIDI0CiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfU0dJRF9UT19GU0dJRCAyNQogI2RlZmluZSBBVURJVF9NQVhfRklFTERfQ09NUEFSRSBBVURJVF9DT01QQVJFX1NHSURfVE9fRlNHSUQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX1BJRCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9VSUQgMQogI2RlZmluZSBBVURJVF9FVUlEIDIKICNkZWZpbmUgQVVESVRfU1VJRCAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9GU1VJRCA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9HSUQgNQogI2RlZmluZSBBVURJVF9FR0lEIDYKICNkZWZpbmUgQVVESVRfU0dJRCA3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9GU0dJRCA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9MT0dJTlVJRCA5CiAjZGVmaW5lIEFVRElUX1BFUlMgMTAKICNkZWZpbmUgQVVESVRfQVJDSCAxMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfTVNHVFlQRSAxMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfU1VCSl9VU0VSIDEzCiAjZGVmaW5lIEFVRElUX1NVQkpfUk9MRSAxNAogI2RlZmluZSBBVURJVF9TVUJKX1RZUEUgMTUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX1NVQkpfU0VOIDE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9TVUJKX0NMUiAxNwogI2RlZmluZSBBVURJVF9QUElEIDE4CiAjZGVmaW5lIEFVRElUX09CSl9VU0VSIDE5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9PQkpfUk9MRSAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfT0JKX1RZUEUgMjEKICNkZWZpbmUgQVVESVRfT0JKX0xFVl9MT1cgMjIKICNkZWZpbmUgQVVESVRfT0JKX0xFVl9ISUdIIDIzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9MT0dJTlVJRF9TRVQgMjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0RFVk1BSk9SIDEwMAogI2RlZmluZSBBVURJVF9ERVZNSU5PUiAxMDEKICNkZWZpbmUgQVVESVRfSU5PREUgMTAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9FWElUIDEwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfU1VDQ0VTUyAxMDQKICNkZWZpbmUgQVVESVRfV0FUQ0ggMTA1CiAjZGVmaW5lIEFVRElUX1BFUk0gMTA2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9ESVIgMTA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9GSUxFVFlQRSAxMDgKICNkZWZpbmUgQVVESVRfT0JKX1VJRCAxMDkKICNkZWZpbmUgQVVESVRfT0JKX0dJRCAxMTAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0ZJRUxEX0NPTVBBUkUgMTExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9BUkcwIDIwMAogI2RlZmluZSBBVURJVF9BUkcxIChBVURJVF9BUkcwKzEpCiAjZGVmaW5lIEFVRElUX0FSRzIgKEFVRElUX0FSRzArMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0FSRzMgKEFVRElUX0FSRzArMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0ZJTFRFUktFWSAyMTAKICNkZWZpbmUgQVVESVRfTkVHQVRFIDB4ODAwMDAwMDAKICNkZWZpbmUgQVVESVRfQklUX01BU0sgMHgwODAwMDAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfTEVTU19USEFOIDB4MTAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0dSRUFURVJfVEhBTiAweDIwMDAwMDAwCiAjZGVmaW5lIEFVRElUX05PVF9FUVVBTCAweDMwMDAwMDAwCiAjZGVmaW5lIEFVRElUX0VRVUFMIDB4NDAwMDAwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0JJVF9URVNUIChBVURJVF9CSVRfTUFTS3xBVURJVF9FUVVBTCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0xFU1NfVEhBTl9PUl9FUVVBTCAoQVVESVRfTEVTU19USEFOfEFVRElUX0VRVUFMKQogI2RlZmluZSBBVURJVF9HUkVBVEVSX1RIQU5fT1JfRVFVQUwgKEFVRElUX0dSRUFURVJfVEhBTnxBVURJVF9FUVVBTCkKICNkZWZpbmUgQVVESVRfT1BFUkFUT1JTIChBVURJVF9FUVVBTHxBVURJVF9OT1RfRVFVQUx8QVVESVRfQklUX01BU0spCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEF1ZGl0X2VxdWFsLAogIEF1ZGl0X25vdF9lcXVhbCwKICBBdWRpdF9iaXRtYXNrLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBdWRpdF9iaXR0ZXN0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBdWRpdF9sdCwKICBBdWRpdF9ndCwKICBBdWRpdF9sZSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQXVkaXRfZ2UsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEF1ZGl0X2JhZAogfTsKICNkZWZpbmUgQVVESVRfU1RBVFVTX0VOQUJMRUQgMHgwMDAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9TVEFUVVNfRkFJTFVSRSAweDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX1NUQVRVU19QSUQgMHgwMDA0CiAjZGVmaW5lIEFVRElUX1NUQVRVU19SQVRFX0xJTUlUIDB4MDAwOAogI2RlZmluZSBBVURJVF9TVEFUVVNfQkFDS0xPR19MSU1JVCAweDAwMTAKKyNkZWZpbmUgQVVESVRfU1RBVFVTX0JBQ0tMT0dfV0FJVF9USU1FIDB4MDAyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfVkVSU0lPTl9CQUNLTE9HX0xJTUlUIDEKKyNkZWZpbmUgQVVESVRfVkVSU0lPTl9CQUNLTE9HX1dBSVRfVElNRSAyCisjZGVmaW5lIEFVRElUX1ZFUlNJT05fTEFURVNUIEFVRElUX1ZFUlNJT05fQkFDS0xPR19XQUlUX1RJTUUKICNkZWZpbmUgQVVESVRfRkFJTF9TSUxFTlQgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfRkFJTF9QUklOVEsgMQogI2RlZmluZSBBVURJVF9GQUlMX1BBTklDIDIKICNkZWZpbmUgX19BVURJVF9BUkNIXzY0QklUIDB4ODAwMDAwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQVVESVRfQVJDSF9MRSAweDQwMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9BUkNIX0FMUEhBIChFTV9BTFBIQXxfX0FVRElUX0FSQ0hfNjRCSVR8X19BVURJVF9BUkNIX0xFKQogI2RlZmluZSBBVURJVF9BUkNIX0FSTSAoRU1fQVJNfF9fQVVESVRfQVJDSF9MRSkKICNkZWZpbmUgQVVESVRfQVJDSF9BUk1FQiAoRU1fQVJNKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQVJDSF9DUklTIChFTV9DUklTfF9fQVVESVRfQVJDSF9MRSkKLSNkZWZpbmUgQVVESVRfQVJDSF9GUlYgKEVNX0ZSVikKLSNkZWZpbmUgQVVESVRfQVJDSF9IODMwMCAoRU1fSDhfMzAwKQotI2RlZmluZSBBVURJVF9BUkNIX0kzODYgKEVNXzM4NnxfX0FVRElUX0FSQ0hfTEUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9BUkNIX0ZSViAoRU1fRlJWKQorI2RlZmluZSBBVURJVF9BUkNIX0kzODYgKEVNXzM4NnxfX0FVRElUX0FSQ0hfTEUpCiAjZGVmaW5lIEFVRElUX0FSQ0hfSUE2NCAoRU1fSUFfNjR8X19BVURJVF9BUkNIXzY0QklUfF9fQVVESVRfQVJDSF9MRSkKICNkZWZpbmUgQVVESVRfQVJDSF9NMzJSIChFTV9NMzJSKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQVJDSF9NNjhLIChFTV82OEspCiAjZGVmaW5lIEFVRElUX0FSQ0hfTUlQUyAoRU1fTUlQUykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0FSQ0hfTUlQU0VMIChFTV9NSVBTfF9fQVVESVRfQVJDSF9MRSkKICNkZWZpbmUgQVVESVRfQVJDSF9NSVBTNjQgKEVNX01JUFN8X19BVURJVF9BUkNIXzY0QklUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQVJDSF9NSVBTRUw2NCAoRU1fTUlQU3xfX0FVRElUX0FSQ0hfNjRCSVR8X19BVURJVF9BUkNIX0xFKQogI2RlZmluZSBBVURJVF9BUkNIX09QRU5SSVNDIChFTV9PUEVOUklTQykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0FSQ0hfUEFSSVNDIChFTV9QQVJJU0MpCiAjZGVmaW5lIEFVRElUX0FSQ0hfUEFSSVNDNjQgKEVNX1BBUklTQ3xfX0FVRElUX0FSQ0hfNjRCSVQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9BUkNIX1BQQyAoRU1fUFBDKQogI2RlZmluZSBBVURJVF9BUkNIX1BQQzY0IChFTV9QUEM2NHxfX0FVRElUX0FSQ0hfNjRCSVQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9BUkNIX1MzOTAgKEVNX1MzOTApCiAjZGVmaW5lIEFVRElUX0FSQ0hfUzM5MFggKEVNX1MzOTB8X19BVURJVF9BUkNIXzY0QklUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQVJDSF9TSCAoRU1fU0gpCiAjZGVmaW5lIEFVRElUX0FSQ0hfU0hFTCAoRU1fU0h8X19BVURJVF9BUkNIX0xFKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQVJDSF9TSDY0IChFTV9TSHxfX0FVRElUX0FSQ0hfNjRCSVQpCiAjZGVmaW5lIEFVRElUX0FSQ0hfU0hFTDY0IChFTV9TSHxfX0FVRElUX0FSQ0hfNjRCSVR8X19BVURJVF9BUkNIX0xFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQVJDSF9TUEFSQyAoRU1fU1BBUkMpCiAjZGVmaW5lIEFVRElUX0FSQ0hfU1BBUkM2NCAoRU1fU1BBUkNWOXxfX0FVRElUX0FSQ0hfNjRCSVQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9BUkNIX1g4Nl82NCAoRU1fWDg2XzY0fF9fQVVESVRfQVJDSF82NEJJVHxfX0FVRElUX0FSQ0hfTEUpCiAjZGVmaW5lIEFVRElUX1BFUk1fRVhFQyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9QRVJNX1dSSVRFIDIKICNkZWZpbmUgQVVESVRfUEVSTV9SRUFEIDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX1BFUk1fQVRUUiA4CisjZGVmaW5lIEFVRElUX01FU1NBR0VfVEVYVF9NQVggODU2MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBhdWRpdF9zdGF0dXMgewogIF9fdTMyIG1hc2s7CiAgX191MzIgZW5hYmxlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmFpbHVyZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGlkOwogIF9fdTMyIHJhdGVfbGltaXQ7CiAgX191MzIgYmFja2xvZ19saW1pdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbG9zdDsKLSBfX3UzMiBiYWNrbG9nOwotfTsKLXN0cnVjdCBhdWRpdF90dHlfc3RhdHVzIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgYmFja2xvZzsKKyBfX3UzMiB2ZXJzaW9uOworIF9fdTMyIGJhY2tsb2dfd2FpdF90aW1lOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgYXVkaXRfZmVhdHVyZXMgeworI2RlZmluZSBBVURJVF9GRUFUVVJFX1ZFUlNJT04gMQorIF9fdTMyIHZlcnM7CisgX191MzIgbWFzazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZmVhdHVyZXM7CisgX191MzIgbG9jazsKK307CisjZGVmaW5lIEFVRElUX0ZFQVRVUkVfT05MWV9VTlNFVF9MT0dJTlVJRCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9GRUFUVVJFX0xPR0lOVUlEX0lNTVVUQUJMRSAxCisjZGVmaW5lIEFVRElUX0xBU1RfRkVBVFVSRSBBVURJVF9GRUFUVVJFX0xPR0lOVUlEX0lNTVVUQUJMRQorI2RlZmluZSBhdWRpdF9mZWF0dXJlX3ZhbGlkKHgpICgoeCkgPj0gMCAmJiAoeCkgPD0gQVVESVRfTEFTVF9GRUFUVVJFKQorI2RlZmluZSBBVURJVF9GRUFUVVJFX1RPX01BU0soeCkgKDEgPDwgKCh4KSAmIDMxKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgYXVkaXRfdHR5X3N0YXR1cyB7CiAgX191MzIgZW5hYmxlZDsKICBfX3UzMiBsb2dfcGFzc3dkOwogfTsKLXN0cnVjdCBhdWRpdF9ydWxlX2RhdGEgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfVUlEX1VOU0VUICh1bnNpZ25lZCBpbnQpLTEKK3N0cnVjdCBhdWRpdF9ydWxlX2RhdGEgewogIF9fdTMyIGZsYWdzOwogIF9fdTMyIGFjdGlvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmllbGRfY291bnQ7CiAgX191MzIgbWFza1tBVURJVF9CSVRNQVNLX1NJWkVdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmaWVsZHNbQVVESVRfTUFYX0ZJRUxEU107CiAgX191MzIgdmFsdWVzW0FVRElUX01BWF9GSUVMRFNdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmaWVsZGZsYWdzW0FVRElUX01BWF9GSUVMRFNdOwogIF9fdTMyIGJ1ZmxlbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBidWZbMF07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBhdWRpdF9ydWxlIHsKICBfX3UzMiBmbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYWN0aW9uOwogIF9fdTMyIGZpZWxkX2NvdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXNrW0FVRElUX0JJVE1BU0tfU0laRV07CiAgX191MzIgZmllbGRzW0FVRElUX01BWF9GSUVMRFNdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB2YWx1ZXNbQVVESVRfTUFYX0ZJRUxEU107CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9iY2FjaGUuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvYmNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQxZDQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvYmNhY2hlLmgKQEAgLTAsMCArMSwyMDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0JDQUNIRV9ICisjZGVmaW5lIF9MSU5VWF9CQ0FDSEVfSAorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2RlZmluZSBCSVRNQVNLKG5hbWUsIHR5cGUsIGZpZWxkLCBvZmZzZXQsIHNpemUpICBzdGF0aWMgaW5saW5lIF9fdTY0IG5hbWUoY29uc3QgdHlwZSAqaykgIHsgcmV0dXJuIChrLT5maWVsZCA+PiBvZmZzZXQpICYgfih+MFVMTCA8PCBzaXplKTsgfSAgICBzdGF0aWMgaW5saW5lIHZvaWQgU0VUXyMjbmFtZSh0eXBlICprLCBfX3U2NCB2KSAgeyAgIGstPmZpZWxkICY9IH4ofih+MFVMTCA8PCBzaXplKSA8PCBvZmZzZXQpOyAgIGstPmZpZWxkIHw9ICh2ICYgfih+MFVMTCA8PCBzaXplKSkgPDwgb2Zmc2V0OyAgfQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBia2V5IHsKKyBfX3U2NCBoaWdoOworIF9fdTY0IGxvdzsKKyBfX3U2NCBwdHJbXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBLRVlfRklFTEQobmFtZSwgZmllbGQsIG9mZnNldCwgc2l6ZSkgICBCSVRNQVNLKG5hbWUsIHN0cnVjdCBia2V5LCBmaWVsZCwgb2Zmc2V0LCBzaXplKQorI2RlZmluZSBQVFJfRklFTEQobmFtZSwgb2Zmc2V0LCBzaXplKSAgc3RhdGljIGlubGluZSBfX3U2NCBuYW1lKGNvbnN0IHN0cnVjdCBia2V5ICprLCB1bnNpZ25lZCBpKSAgeyByZXR1cm4gKGstPnB0cltpXSA+PiBvZmZzZXQpICYgfih+MFVMTCA8PCBzaXplKTsgfSAgICBzdGF0aWMgaW5saW5lIHZvaWQgU0VUXyMjbmFtZShzdHJ1Y3QgYmtleSAqaywgdW5zaWduZWQgaSwgX191NjQgdikgIHsgICBrLT5wdHJbaV0gJj0gfih+KH4wVUxMIDw8IHNpemUpIDw8IG9mZnNldCk7ICAgay0+cHRyW2ldIHw9ICh2ICYgfih+MFVMTCA8PCBzaXplKSkgPDwgb2Zmc2V0OyAgfQorI2RlZmluZSBLRVlfU0laRV9CSVRTIDE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVlfTUFYX1U2NFMgOAorI2RlZmluZSBLRVkoaW5vZGUsIG9mZnNldCwgc2l6ZSkgICgoc3RydWN0IGJrZXkpIHsgICAuaGlnaCA9ICgxVUxMIDw8IDYzKSB8ICgoX191NjQpIChzaXplKSA8PCAyMCkgfCAoaW5vZGUpLCAgIC5sb3cgPSAob2Zmc2V0KSAgfSkKKyNkZWZpbmUgWkVST19LRVkgS0VZKDAsIDAsIDApCisjZGVmaW5lIE1BWF9LRVlfSU5PREUgKH4ofjAgPDwgMjApKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUFYX0tFWV9PRkZTRVQgKH4wVUxMID4+IDEpCisjZGVmaW5lIE1BWF9LRVkgS0VZKE1BWF9LRVlfSU5PREUsIE1BWF9LRVlfT0ZGU0VULCAwKQorI2RlZmluZSBLRVlfU1RBUlQoaykgKEtFWV9PRkZTRVQoaykgLSBLRVlfU0laRShrKSkKKyNkZWZpbmUgU1RBUlRfS0VZKGspIEtFWShLRVlfSU5PREUoayksIEtFWV9TVEFSVChrKSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBUUl9ERVZfQklUUyAxMgorI2RlZmluZSBQVFJfQ0hFQ0tfREVWICgoMSA8PCBQVFJfREVWX0JJVFMpIC0gMSkKKyNkZWZpbmUgUFRSKGdlbiwgb2Zmc2V0LCBkZXYpICAgKCgoKF9fdTY0KSBkZXYpIDw8IDUxKSB8ICgoX191NjQpIG9mZnNldCkgPDwgOCB8IGdlbikKKyNkZWZpbmUgYmtleV9jb3B5KF9kZXN0LCBfc3JjKSBtZW1jcHkoX2Rlc3QsIF9zcmMsIGJrZXlfYnl0ZXMoX3NyYykpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCS0VZX1BBRCA4CisjZGVmaW5lIEJLRVlfUEFEREVEKGtleSkgICB1bmlvbiB7IHN0cnVjdCBia2V5IGtleTsgX191NjQga2V5ICMjIF9wYWRbQktFWV9QQURdOyB9CisjZGVmaW5lIEJDQUNIRV9TQl9WRVJTSU9OX0NERVYgMAorI2RlZmluZSBCQ0FDSEVfU0JfVkVSU0lPTl9CREVWIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJDQUNIRV9TQl9WRVJTSU9OX0NERVZfV0lUSF9VVUlEIDMKKyNkZWZpbmUgQkNBQ0hFX1NCX1ZFUlNJT05fQkRFVl9XSVRIX09GRlNFVCA0CisjZGVmaW5lIEJDQUNIRV9TQl9NQVhfVkVSU0lPTiA0CisjZGVmaW5lIFNCX1NFQ1RPUiA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQl9TSVpFIDQwOTYKKyNkZWZpbmUgU0JfTEFCRUxfU0laRSAzMgorI2RlZmluZSBTQl9KT1VSTkFMX0JVQ0tFVFMgMjU2VQorI2RlZmluZSBNQVhfQ0FDSEVTX1BFUl9TRVQgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQkRFVl9EQVRBX1NUQVJUX0RFRkFVTFQgMTYKK3N0cnVjdCBjYWNoZV9zYiB7CisgX191NjQgY3N1bTsKKyBfX3U2NCBvZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHZlcnNpb247CisgX191OCBtYWdpY1sxNl07CisgX191OCB1dWlkWzE2XTsKKyB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggc2V0X3V1aWRbMTZdOworIF9fdTY0IHNldF9tYWdpYzsKKyB9OworIF9fdTggbGFiZWxbU0JfTEFCRUxfU0laRV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IGZsYWdzOworIF9fdTY0IHNlcTsKKyBfX3U2NCBwYWRbOF07CisgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgeworIF9fdTY0IG5idWNrZXRzOworIF9fdTE2IGJsb2NrX3NpemU7CisgX191MTYgYnVja2V0X3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IG5yX2luX3NldDsKKyBfX3UxNiBucl90aGlzX2RldjsKKyB9OworIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IGRhdGFfb2Zmc2V0OworIH07CisgfTsKKyBfX3UzMiBsYXN0X21vdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UxNiBmaXJzdF9idWNrZXQ7CisgdW5pb24geworIF9fdTE2IG5qb3VybmFsX2J1Y2tldHM7CisgX191MTYga2V5czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfTsKKyBfX3U2NCBkW1NCX0pPVVJOQUxfQlVDS0VUU107Cit9OworI2RlZmluZSBDQUNIRV9SRVBMQUNFTUVOVF9MUlUgMFUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENBQ0hFX1JFUExBQ0VNRU5UX0ZJRk8gMVUKKyNkZWZpbmUgQ0FDSEVfUkVQTEFDRU1FTlRfUkFORE9NIDJVCisjZGVmaW5lIENBQ0hFX01PREVfV1JJVEVUSFJPVUdIIDBVCisjZGVmaW5lIENBQ0hFX01PREVfV1JJVEVCQUNLIDFVCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDQUNIRV9NT0RFX1dSSVRFQVJPVU5EIDJVCisjZGVmaW5lIENBQ0hFX01PREVfTk9ORSAzVQorI2RlZmluZSBCREVWX1NUQVRFX05PTkUgMFUKKyNkZWZpbmUgQkRFVl9TVEFURV9DTEVBTiAxVQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQkRFVl9TVEFURV9ESVJUWSAyVQorI2RlZmluZSBCREVWX1NUQVRFX1NUQUxFIDNVCisjZGVmaW5lIEpTRVRfTUFHSUMgMHgyNDUyMzVjMWEzNjI1MDMyVUxMCisjZGVmaW5lIFBTRVRfTUFHSUMgMHg2NzUwZTE1Zjg3MzM3ZjkxVUxMCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCU0VUX01BR0lDIDB4OTAxMzVjNzhiOTllMDdmNVVMTAorI2RlZmluZSBCQ0FDSEVfSlNFVF9WRVJTSU9OX1VVSUR2MSAxCisjZGVmaW5lIEJDQUNIRV9KU0VUX1ZFUlNJT05fVVVJRCAxCisjZGVmaW5lIEJDQUNIRV9KU0VUX1ZFUlNJT04gMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBqc2V0IHsKKyBfX3U2NCBjc3VtOworIF9fdTY0IG1hZ2ljOworIF9fdTY0IHNlcTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdmVyc2lvbjsKKyBfX3UzMiBrZXlzOworIF9fdTY0IGxhc3Rfc2VxOworIEJLRVlfUEFEREVEKHV1aWRfYnVja2V0KTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgQktFWV9QQURERUQoYnRyZWVfcm9vdCk7CisgX191MTYgYnRyZWVfbGV2ZWw7CisgX191MTYgcGFkWzNdOworIF9fdTY0IHByaW9fYnVja2V0W01BWF9DQUNIRVNfUEVSX1NFVF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuaW9uIHsKKyBzdHJ1Y3QgYmtleSBzdGFydFswXTsKKyBfX3U2NCBkWzBdOworIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK3N0cnVjdCBwcmlvX3NldCB7CisgX191NjQgY3N1bTsKKyBfX3U2NCBtYWdpYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgc2VxOworIF9fdTMyIHZlcnNpb247CisgX191MzIgcGFkOworIF9fdTY0IG5leHRfYnVja2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgYnVja2V0X2Rpc2sgeworIF9fdTE2IHByaW87CisgX191OCBnZW47CisgfSBfX2F0dHJpYnV0ZSgocGFja2VkKSkgZGF0YVtdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitzdHJ1Y3QgdXVpZF9lbnRyeSB7CisgdW5pb24geworIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggdXVpZFsxNl07CisgX191OCBsYWJlbFszMl07CisgX191MzIgZmlyc3RfcmVnOworIF9fdTMyIGxhc3RfcmVnOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBpbnZhbGlkYXRlZDsKKyBfX3UzMiBmbGFnczsKKyBfX3U2NCBzZWN0b3JzOworIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggcGFkWzEyOF07CisgfTsKK307CisjZGVmaW5lIEJDQUNIRV9CU0VUX0NTVU0gMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQkNBQ0hFX0JTRVRfVkVSU0lPTiAxCitzdHJ1Y3QgYnNldCB7CisgX191NjQgY3N1bTsKKyBfX3U2NCBtYWdpYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgc2VxOworIF9fdTMyIHZlcnNpb247CisgX191MzIga2V5czsKKyB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBia2V5IHN0YXJ0WzBdOworIF9fdTY0IGRbMF07CisgfTsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHV1aWRfZW50cnlfdjAgeworIF9fdTggdXVpZFsxNl07CisgX191OCBsYWJlbFszMl07CisgX191MzIgZmlyc3RfcmVnOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBsYXN0X3JlZzsKKyBfX3UzMiBpbnZhbGlkYXRlZDsKKyBfX3UzMiBwYWQ7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9iaW5kZXIuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvYmluZGVyLmgKaW5kZXggMTQ3MjM4Mi4uMDIxMDFhYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9iaW5kZXIuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2JpbmRlci5oCkBAIC0zNiwxMzYgKzM2LDE1NSBAQAogIEZMQVRfQklOREVSX0ZMQUdfQUNDRVBUU19GRFMgPSAweDEwMCwKIH07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2lmZGVmIEJJTkRFUl9JUENfMzJCSVQKK3R5cGVkZWYgX191MzIgYmluZGVyX3NpemVfdDsKK3R5cGVkZWYgX191MzIgYmluZGVyX3VpbnRwdHJfdDsKKyNlbHNlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwordHlwZWRlZiBfX3U2NCBiaW5kZXJfc2l6ZV90OwordHlwZWRlZiBfX3U2NCBiaW5kZXJfdWludHB0cl90OworI2VuZGlmCiBzdHJ1Y3QgZmxhdF9iaW5kZXJfb2JqZWN0IHsKLSB1bnNpZ25lZCBsb25nIHR5cGU7Ci0gdW5zaWduZWQgbG9uZyBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdHlwZTsKKyBfX3UzMiBmbGFnczsKICB1bmlvbiB7CisgYmluZGVyX3VpbnRwdHJfdCBiaW5kZXI7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIHZvaWQgX191c2VyICpiaW5kZXI7Ci0gc2lnbmVkIGxvbmcgaGFuZGxlOworIF9fdTMyIGhhbmRsZTsKICB9OwotIHZvaWQgX191c2VyICpjb29raWU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGJpbmRlcl91aW50cHRyX3QgY29va2llOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgYmluZGVyX3dyaXRlX3JlYWQgewotIHNpZ25lZCBsb25nIHdyaXRlX3NpemU7Ci0gc2lnbmVkIGxvbmcgd3JpdGVfY29uc3VtZWQ7CisgYmluZGVyX3NpemVfdCB3cml0ZV9zaXplOworIGJpbmRlcl9zaXplX3Qgd3JpdGVfY29uc3VtZWQ7CisgYmluZGVyX3VpbnRwdHJfdCB3cml0ZV9idWZmZXI7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIHVuc2lnbmVkIGxvbmcgd3JpdGVfYnVmZmVyOwotIHNpZ25lZCBsb25nIHJlYWRfc2l6ZTsKLSBzaWduZWQgbG9uZyByZWFkX2NvbnN1bWVkOwotIHVuc2lnbmVkIGxvbmcgcmVhZF9idWZmZXI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGJpbmRlcl9zaXplX3QgcmVhZF9zaXplOworIGJpbmRlcl9zaXplX3QgcmVhZF9jb25zdW1lZDsKKyBiaW5kZXJfdWludHB0cl90IHJlYWRfYnVmZmVyOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgYmluZGVyX3ZlcnNpb24gewotIHNpZ25lZCBsb25nIHByb3RvY29sX3ZlcnNpb247CisgX19zMzIgcHJvdG9jb2xfdmVyc2lvbjsKIH07CisjaWZkZWYgQklOREVSX0lQQ18zMkJJVAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQklOREVSX0NVUlJFTlRfUFJPVE9DT0xfVkVSU0lPTiA3CisjZWxzZQorI2RlZmluZSBCSU5ERVJfQ1VSUkVOVF9QUk9UT0NPTF9WRVJTSU9OIDgKKyNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQklOREVSX1dSSVRFX1JFQUQgX0lPV1IoJ2InLCAxLCBzdHJ1Y3QgYmluZGVyX3dyaXRlX3JlYWQpCiAjZGVmaW5lIEJJTkRFUl9TRVRfSURMRV9USU1FT1VUIF9JT1coJ2InLCAzLCBfX3M2NCkKLSNkZWZpbmUgQklOREVSX1NFVF9NQVhfVEhSRUFEUyBfSU9XKCdiJywgNSwgc2l6ZV90KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQklOREVSX1NFVF9NQVhfVEhSRUFEUyBfSU9XKCdiJywgNSwgX191MzIpCiAjZGVmaW5lIEJJTkRFUl9TRVRfSURMRV9QUklPUklUWSBfSU9XKCdiJywgNiwgX19zMzIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCSU5ERVJfU0VUX0NPTlRFWFRfTUdSIF9JT1coJ2InLCA3LCBfX3MzMikKICNkZWZpbmUgQklOREVSX1RIUkVBRF9FWElUIF9JT1coJ2InLCA4LCBfX3MzMikKICNkZWZpbmUgQklOREVSX1ZFUlNJT04gX0lPV1IoJ2InLCA5LCBzdHJ1Y3QgYmluZGVyX3ZlcnNpb24pCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB0cmFuc2FjdGlvbl9mbGFncyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRGX09ORV9XQVkgPSAweDAxLAogIFRGX1JPT1RfT0JKRUNUID0gMHgwNCwKICBURl9TVEFUVVNfQ09ERSA9IDB4MDgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRGX0FDQ0VQVF9GRFMgPSAweDEwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgYmluZGVyX3RyYW5zYWN0aW9uX2RhdGEgewogIHVuaW9uIHsKKyBfX3UzMiBoYW5kbGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIHNpemVfdCBoYW5kbGU7Ci0gdm9pZCAqcHRyOworIGJpbmRlcl91aW50cHRyX3QgcHRyOwogIH0gdGFyZ2V0OwotIHZvaWQgKmNvb2tpZTsKKyBiaW5kZXJfdWludHB0cl90IGNvb2tpZTsKKyBfX3UzMiBjb2RlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSB1bnNpZ25lZCBpbnQgY29kZTsKLSB1bnNpZ25lZCBpbnQgZmxhZ3M7CisgX191MzIgZmxhZ3M7CiAgcGlkX3Qgc2VuZGVyX3BpZDsKICB1aWRfdCBzZW5kZXJfZXVpZDsKKyBiaW5kZXJfc2l6ZV90IGRhdGFfc2l6ZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gc2l6ZV90IGRhdGFfc2l6ZTsKLSBzaXplX3Qgb2Zmc2V0c19zaXplOworIGJpbmRlcl9zaXplX3Qgb2Zmc2V0c19zaXplOwogIHVuaW9uIHsKICBzdHJ1Y3QgeworIGJpbmRlcl91aW50cHRyX3QgYnVmZmVyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBjb25zdCB2b2lkIF9fdXNlciAqYnVmZmVyOwotIGNvbnN0IHZvaWQgX191c2VyICpvZmZzZXRzOworIGJpbmRlcl91aW50cHRyX3Qgb2Zmc2V0czsKICB9IHB0cjsKLSB1aW50OF90IGJ1Zls4XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBidWZbOF07CiAgfSBkYXRhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgYmluZGVyX3B0cl9jb29raWUgewotIHZvaWQgKnB0cjsKKyBiaW5kZXJfdWludHB0cl90IHB0cjsKKyBiaW5kZXJfdWludHB0cl90IGNvb2tpZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gdm9pZCAqY29va2llOwogfTsKLXN0cnVjdCBiaW5kZXJfcHJpX2Rlc2MgewotIGludCBwcmlvcml0eTsKK3N0cnVjdCBiaW5kZXJfaGFuZGxlX2Nvb2tpZSB7CisgX191MzIgaGFuZGxlOworIGJpbmRlcl91aW50cHRyX3QgY29va2llOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBpbnQgZGVzYzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CitzdHJ1Y3QgYmluZGVyX3ByaV9kZXNjIHsKKyBfX3MzMiBwcmlvcml0eTsKKyBfX3UzMiBkZXNjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgYmluZGVyX3ByaV9wdHJfY29va2llIHsKLSBpbnQgcHJpb3JpdHk7CisgX19zMzIgcHJpb3JpdHk7CisgYmluZGVyX3VpbnRwdHJfdCBwdHI7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIHZvaWQgKnB0cjsKLSB2b2lkICpjb29raWU7CisgYmluZGVyX3VpbnRwdHJfdCBjb29raWU7CiB9OwogZW51bSBiaW5kZXJfZHJpdmVyX3JldHVybl9wcm90b2NvbCB7CisgQlJfRVJST1IgPSBfSU9SKCdyJywgMCwgX19zMzIpLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCUl9FUlJPUiA9IF9JT1IoJ3InLCAwLCBpbnQpLAogIEJSX09LID0gX0lPKCdyJywgMSksCiAgQlJfVFJBTlNBQ1RJT04gPSBfSU9SKCdyJywgMiwgc3RydWN0IGJpbmRlcl90cmFuc2FjdGlvbl9kYXRhKSwKICBCUl9SRVBMWSA9IF9JT1IoJ3InLCAzLCBzdHJ1Y3QgYmluZGVyX3RyYW5zYWN0aW9uX2RhdGEpLAorIEJSX0FDUVVJUkVfUkVTVUxUID0gX0lPUigncicsIDQsIF9fczMyKSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQlJfQUNRVUlSRV9SRVNVTFQgPSBfSU9SKCdyJywgNCwgaW50KSwKICBCUl9ERUFEX1JFUExZID0gX0lPKCdyJywgNSksCiAgQlJfVFJBTlNBQ1RJT05fQ09NUExFVEUgPSBfSU8oJ3InLCA2KSwKICBCUl9JTkNSRUZTID0gX0lPUigncicsIDcsIHN0cnVjdCBiaW5kZXJfcHRyX2Nvb2tpZSksCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJSX0FDUVVJUkUgPSBfSU9SKCdyJywgOCwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQlJfUkVMRUFTRSA9IF9JT1IoJ3InLCA5LCBzdHJ1Y3QgYmluZGVyX3B0cl9jb29raWUpLAogIEJSX0RFQ1JFRlMgPSBfSU9SKCdyJywgMTAsIHN0cnVjdCBiaW5kZXJfcHRyX2Nvb2tpZSksCiAgQlJfQVRURU1QVF9BQ1FVSVJFID0gX0lPUigncicsIDExLCBzdHJ1Y3QgYmluZGVyX3ByaV9wdHJfY29va2llKSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQlJfTk9PUCA9IF9JTygncicsIDEyKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQlJfU1BBV05fTE9PUEVSID0gX0lPKCdyJywgMTMpLAogIEJSX0ZJTklTSEVEID0gX0lPKCdyJywgMTQpLAotIEJSX0RFQURfQklOREVSID0gX0lPUigncicsIDE1LCB2b2lkICopLAorIEJSX0RFQURfQklOREVSID0gX0lPUigncicsIDE1LCBiaW5kZXJfdWludHB0cl90KSwKKyBCUl9DTEVBUl9ERUFUSF9OT1RJRklDQVRJT05fRE9ORSA9IF9JT1IoJ3InLCAxNiwgYmluZGVyX3VpbnRwdHJfdCksCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIEJSX0NMRUFSX0RFQVRIX05PVElGSUNBVElPTl9ET05FID0gX0lPUigncicsIDE2LCB2b2lkICopLAogIEJSX0ZBSUxFRF9SRVBMWSA9IF9JTygncicsIDE3KSwKIH07CiBlbnVtIGJpbmRlcl9kcml2ZXJfY29tbWFuZF9wcm90b2NvbCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJDX1RSQU5TQUNUSU9OID0gX0lPVygnYycsIDAsIHN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb25fZGF0YSksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJDX1JFUExZID0gX0lPVygnYycsIDEsIHN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb25fZGF0YSksCi0gQkNfQUNRVUlSRV9SRVNVTFQgPSBfSU9XKCdjJywgMiwgaW50KSwKLSBCQ19GUkVFX0JVRkZFUiA9IF9JT1coJ2MnLCAzLCBpbnQpLAorIEJDX0FDUVVJUkVfUkVTVUxUID0gX0lPVygnYycsIDIsIF9fczMyKSwKKyBCQ19GUkVFX0JVRkZFUiA9IF9JT1coJ2MnLCAzLCBiaW5kZXJfdWludHB0cl90KSwKKyBCQ19JTkNSRUZTID0gX0lPVygnYycsIDQsIF9fdTMyKSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQkNfSU5DUkVGUyA9IF9JT1coJ2MnLCA0LCBpbnQpLAotIEJDX0FDUVVJUkUgPSBfSU9XKCdjJywgNSwgaW50KSwKLSBCQ19SRUxFQVNFID0gX0lPVygnYycsIDYsIGludCksCi0gQkNfREVDUkVGUyA9IF9JT1coJ2MnLCA3LCBpbnQpLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBCQ19BQ1FVSVJFID0gX0lPVygnYycsIDUsIF9fdTMyKSwKKyBCQ19SRUxFQVNFID0gX0lPVygnYycsIDYsIF9fdTMyKSwKKyBCQ19ERUNSRUZTID0gX0lPVygnYycsIDcsIF9fdTMyKSwKICBCQ19JTkNSRUZTX0RPTkUgPSBfSU9XKCdjJywgOCwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQkNfQUNRVUlSRV9ET05FID0gX0lPVygnYycsIDksIHN0cnVjdCBiaW5kZXJfcHRyX2Nvb2tpZSksCiAgQkNfQVRURU1QVF9BQ1FVSVJFID0gX0lPVygnYycsIDEwLCBzdHJ1Y3QgYmluZGVyX3ByaV9kZXNjKSwKICBCQ19SRUdJU1RFUl9MT09QRVIgPSBfSU8oJ2MnLCAxMSksCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJDX0VOVEVSX0xPT1BFUiA9IF9JTygnYycsIDEyKSwKLSBCQ19FWElUX0xPT1BFUiA9IF9JTygnYycsIDEzKSwKLSBCQ19SRVFVRVNUX0RFQVRIX05PVElGSUNBVElPTiA9IF9JT1coJ2MnLCAxNCwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKLSBCQ19DTEVBUl9ERUFUSF9OT1RJRklDQVRJT04gPSBfSU9XKCdjJywgMTUsIHN0cnVjdCBiaW5kZXJfcHRyX2Nvb2tpZSksCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIEJDX0RFQURfQklOREVSX0RPTkUgPSBfSU9XKCdjJywgMTYsIHZvaWQgKiksCisgQkNfRVhJVF9MT09QRVIgPSBfSU8oJ2MnLCAxMyksCisgQkNfUkVRVUVTVF9ERUFUSF9OT1RJRklDQVRJT04gPSBfSU9XKCdjJywgMTQsIHN0cnVjdCBiaW5kZXJfaGFuZGxlX2Nvb2tpZSksCisgQkNfQ0xFQVJfREVBVEhfTk9USUZJQ0FUSU9OID0gX0lPVygnYycsIDE1LCBzdHJ1Y3QgYmluZGVyX2hhbmRsZV9jb29raWUpLAorIEJDX0RFQURfQklOREVSX0RPTkUgPSBfSU9XKCdjJywgMTYsIGJpbmRlcl91aW50cHRyX3QpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvYnRyZnMuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvYnRyZnMuaAppbmRleCA2OWQ1NWYwLi4xMWY5NTBmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2J0cmZzLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9idHJmcy5oCkBAIC0xNzQsMjExICsxNzQsMjUxIEBACiAgX191OCBmc2lkW0JUUkZTX0ZTSURfU0laRV07CiAgX191NjQgcmVzZXJ2ZWRbMTI0XTsKIH07Ci0jZGVmaW5lIEJUUkZTX0JBTEFOQ0VfQ1RMX1BBVVNFIDEKK3N0cnVjdCBidHJmc19pb2N0bF9mZWF0dXJlX2ZsYWdzIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgY29tcGF0X2ZsYWdzOworIF9fdTY0IGNvbXBhdF9yb19mbGFnczsKKyBfX3U2NCBpbmNvbXBhdF9mbGFnczsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCVFJGU19CQUxBTkNFX0NUTF9QQVVTRSAxCiAjZGVmaW5lIEJUUkZTX0JBTEFOQ0VfQ1RMX0NBTkNFTCAyCiBzdHJ1Y3QgYnRyZnNfYmFsYW5jZV9hcmdzIHsKICBfX3U2NCBwcm9maWxlczsKLSBfX3U2NCB1c2FnZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgdXNhZ2U7CiAgX191NjQgZGV2aWQ7CiAgX191NjQgcHN0YXJ0OwogIF9fdTY0IHBlbmQ7Ci0gX191NjQgdnN0YXJ0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCB2c3RhcnQ7CiAgX191NjQgdmVuZDsKICBfX3U2NCB0YXJnZXQ7CiAgX191NjQgZmxhZ3M7Ci0gX191NjQgdW51c2VkWzhdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCB1bnVzZWRbOF07CiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiBzdHJ1Y3QgYnRyZnNfYmFsYW5jZV9wcm9ncmVzcyB7CiAgX191NjQgZXhwZWN0ZWQ7Ci0gX191NjQgY29uc2lkZXJlZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgY29uc2lkZXJlZDsKICBfX3U2NCBjb21wbGV0ZWQ7CiB9OwogI2RlZmluZSBCVFJGU19CQUxBTkNFX1NUQVRFX1JVTk5JTkcgKDFVTEwgPDwgMCkKLSNkZWZpbmUgQlRSRlNfQkFMQU5DRV9TVEFURV9QQVVTRV9SRVEgKDFVTEwgPDwgMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJUUkZTX0JBTEFOQ0VfU1RBVEVfUEFVU0VfUkVRICgxVUxMIDw8IDEpCiAjZGVmaW5lIEJUUkZTX0JBTEFOQ0VfU1RBVEVfQ0FOQ0VMX1JFUSAoMVVMTCA8PCAyKQogc3RydWN0IGJ0cmZzX2lvY3RsX2JhbGFuY2VfYXJncyB7CiAgX191NjQgZmxhZ3M7Ci0gX191NjQgc3RhdGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHN0YXRlOwogIHN0cnVjdCBidHJmc19iYWxhbmNlX2FyZ3MgZGF0YTsKICBzdHJ1Y3QgYnRyZnNfYmFsYW5jZV9hcmdzIG1ldGE7CiAgc3RydWN0IGJ0cmZzX2JhbGFuY2VfYXJncyBzeXM7Ci0gc3RydWN0IGJ0cmZzX2JhbGFuY2VfcHJvZ3Jlc3Mgc3RhdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGJ0cmZzX2JhbGFuY2VfcHJvZ3Jlc3Mgc3RhdDsKICBfX3U2NCB1bnVzZWRbNzJdOwogfTsKICNkZWZpbmUgQlRSRlNfSU5PX0xPT0tVUF9QQVRIX01BWCA0MDgwCi1zdHJ1Y3QgYnRyZnNfaW9jdGxfaW5vX2xvb2t1cF9hcmdzIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgYnRyZnNfaW9jdGxfaW5vX2xvb2t1cF9hcmdzIHsKICBfX3U2NCB0cmVlaWQ7CiAgX191NjQgb2JqZWN0aWQ7CiAgY2hhciBuYW1lW0JUUkZTX0lOT19MT09LVVBfUEFUSF9NQVhdOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IGJ0cmZzX2lvY3RsX3NlYXJjaF9rZXkgewogIF9fdTY0IHRyZWVfaWQ7CiAgX191NjQgbWluX29iamVjdGlkOwotIF9fdTY0IG1heF9vYmplY3RpZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgbWF4X29iamVjdGlkOwogIF9fdTY0IG1pbl9vZmZzZXQ7CiAgX191NjQgbWF4X29mZnNldDsKICBfX3U2NCBtaW5fdHJhbnNpZDsKLSBfX3U2NCBtYXhfdHJhbnNpZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgbWF4X3RyYW5zaWQ7CiAgX191MzIgbWluX3R5cGU7CiAgX191MzIgbWF4X3R5cGU7CiAgX191MzIgbnJfaXRlbXM7Ci0gX191MzIgdW51c2VkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB1bnVzZWQ7CiAgX191NjQgdW51c2VkMTsKICBfX3U2NCB1bnVzZWQyOwogIF9fdTY0IHVudXNlZDM7Ci0gX191NjQgdW51c2VkNDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgdW51c2VkNDsKIH07CiBzdHJ1Y3QgYnRyZnNfaW9jdGxfc2VhcmNoX2hlYWRlciB7CiAgX191NjQgdHJhbnNpZDsKLSBfX3U2NCBvYmplY3RpZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgb2JqZWN0aWQ7CiAgX191NjQgb2Zmc2V0OwogIF9fdTMyIHR5cGU7CiAgX191MzIgbGVuOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBCVFJGU19TRUFSQ0hfQVJHU19CVUZTSVpFICg0MDk2IC0gc2l6ZW9mKHN0cnVjdCBidHJmc19pb2N0bF9zZWFyY2hfa2V5KSkKIHN0cnVjdCBidHJmc19pb2N0bF9zZWFyY2hfYXJncyB7CiAgc3RydWN0IGJ0cmZzX2lvY3RsX3NlYXJjaF9rZXkga2V5OwotIGNoYXIgYnVmW0JUUkZTX1NFQVJDSF9BUkdTX0JVRlNJWkVdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBjaGFyIGJ1ZltCVFJGU19TRUFSQ0hfQVJHU19CVUZTSVpFXTsKIH07CiBzdHJ1Y3QgYnRyZnNfaW9jdGxfY2xvbmVfcmFuZ2VfYXJncyB7CiAgX19zNjQgc3JjX2ZkOwotIF9fdTY0IHNyY19vZmZzZXQsIHNyY19sZW5ndGg7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHNyY19vZmZzZXQsIHNyY19sZW5ndGg7CiAgX191NjQgZGVzdF9vZmZzZXQ7CiB9OwogI2RlZmluZSBCVFJGU19ERUZSQUdfUkFOR0VfQ09NUFJFU1MgMQotI2RlZmluZSBCVFJGU19ERUZSQUdfUkFOR0VfU1RBUlRfSU8gMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQlRSRlNfREVGUkFHX1JBTkdFX1NUQVJUX0lPIDIKKyNkZWZpbmUgQlRSRlNfU0FNRV9EQVRBX0RJRkZFUlMgMQorc3RydWN0IGJ0cmZzX2lvY3RsX3NhbWVfZXh0ZW50X2luZm8geworIF9fczY0IGZkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBsb2dpY2FsX29mZnNldDsKKyBfX3U2NCBieXRlc19kZWR1cGVkOworIF9fczMyIHN0YXR1czsKKyBfX3UzMiByZXNlcnZlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Oworc3RydWN0IGJ0cmZzX2lvY3RsX3NhbWVfYXJncyB7CisgX191NjQgbG9naWNhbF9vZmZzZXQ7CisgX191NjQgbGVuZ3RoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UxNiBkZXN0X2NvdW50OworIF9fdTE2IHJlc2VydmVkMTsKKyBfX3UzMiByZXNlcnZlZDI7Cisgc3RydWN0IGJ0cmZzX2lvY3RsX3NhbWVfZXh0ZW50X2luZm8gaW5mb1swXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IGJ0cmZzX2lvY3RsX3NwYWNlX2luZm8gewogIF9fdTY0IGZsYWdzOwogIF9fdTY0IHRvdGFsX2J5dGVzOwotIF9fdTY0IHVzZWRfYnl0ZXM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHVzZWRfYnl0ZXM7CiB9Owogc3RydWN0IGJ0cmZzX2lvY3RsX3NwYWNlX2FyZ3MgewogIF9fdTY0IHNwYWNlX3Nsb3RzOwotIF9fdTY0IHRvdGFsX3NwYWNlczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgdG90YWxfc3BhY2VzOwogIHN0cnVjdCBidHJmc19pb2N0bF9zcGFjZV9pbmZvIHNwYWNlc1swXTsKIH07CiBzdHJ1Y3QgYnRyZnNfZGF0YV9jb250YWluZXIgewotIF9fdTMyIGJ5dGVzX2xlZnQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGJ5dGVzX2xlZnQ7CiAgX191MzIgYnl0ZXNfbWlzc2luZzsKICBfX3UzMiBlbGVtX2NudDsKICBfX3UzMiBlbGVtX21pc3NlZDsKLSBfX3U2NCB2YWxbMF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHZhbFswXTsKIH07CiBzdHJ1Y3QgYnRyZnNfaW9jdGxfaW5vX3BhdGhfYXJncyB7CiAgX191NjQgaW51bTsKLSBfX3U2NCBzaXplOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBzaXplOwogIF9fdTY0IHJlc2VydmVkWzRdOwogIF9fdTY0IGZzcGF0aDsKIH07Ci1zdHJ1Y3QgYnRyZnNfaW9jdGxfbG9naWNhbF9pbm9fYXJncyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGJ0cmZzX2lvY3RsX2xvZ2ljYWxfaW5vX2FyZ3MgewogIF9fdTY0IGxvZ2ljYWw7CiAgX191NjQgc2l6ZTsKICBfX3U2NCByZXNlcnZlZFs0XTsKLSBfX3U2NCBpbm9kZXM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IGlub2RlczsKIH07CiBlbnVtIGJ0cmZzX2Rldl9zdGF0X3ZhbHVlcyB7CiAgQlRSRlNfREVWX1NUQVRfV1JJVEVfRVJSUywKLSBCVFJGU19ERVZfU1RBVF9SRUFEX0VSUlMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEJUUkZTX0RFVl9TVEFUX1JFQURfRVJSUywKICBCVFJGU19ERVZfU1RBVF9GTFVTSF9FUlJTLAogIEJUUkZTX0RFVl9TVEFUX0NPUlJVUFRJT05fRVJSUywKICBCVFJGU19ERVZfU1RBVF9HRU5FUkFUSU9OX0VSUlMsCi0gQlRSRlNfREVWX1NUQVRfVkFMVUVTX01BWAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBCVFJGU19ERVZfU1RBVF9WQUxVRVNfTUFYCiB9OwogI2RlZmluZSBCVFJGU19ERVZfU1RBVFNfUkVTRVQgKDFVTEwgPDwgMCkKIHN0cnVjdCBidHJmc19pb2N0bF9nZXRfZGV2X3N0YXRzIHsKLSBfX3U2NCBkZXZpZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgZGV2aWQ7CiAgX191NjQgbnJfaXRlbXM7CiAgX191NjQgZmxhZ3M7CiAgX191NjQgdmFsdWVzW0JUUkZTX0RFVl9TVEFUX1ZBTFVFU19NQVhdOwotIF9fdTY0IHVudXNlZFsxMjggLSAyIC0gQlRSRlNfREVWX1NUQVRfVkFMVUVTX01BWF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHVudXNlZFsxMjggLSAyIC0gQlRSRlNfREVWX1NUQVRfVkFMVUVTX01BWF07CiB9OwogI2RlZmluZSBCVFJGU19RVU9UQV9DVExfRU5BQkxFIDEKICNkZWZpbmUgQlRSRlNfUVVPVEFfQ1RMX0RJU0FCTEUgMgotI2RlZmluZSBCVFJGU19RVU9UQV9DVExfUkVTQ0FOX19OT1RVU0VEIDMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJUUkZTX1FVT1RBX0NUTF9SRVNDQU5fX05PVFVTRUQgMwogc3RydWN0IGJ0cmZzX2lvY3RsX3F1b3RhX2N0bF9hcmdzIHsKICBfX3U2NCBjbWQ7CiAgX191NjQgc3RhdHVzOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IGJ0cmZzX2lvY3RsX3F1b3RhX3Jlc2Nhbl9hcmdzIHsKICBfX3U2NCBmbGFnczsKICBfX3U2NCBwcm9ncmVzczsKLSBfX3U2NCByZXNlcnZlZFs2XTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgcmVzZXJ2ZWRbNl07CiB9Owogc3RydWN0IGJ0cmZzX2lvY3RsX3Fncm91cF9hc3NpZ25fYXJncyB7CiAgX191NjQgYXNzaWduOwotIF9fdTY0IHNyYzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgc3JjOwogIF9fdTY0IGRzdDsKIH07CiBzdHJ1Y3QgYnRyZnNfaW9jdGxfcWdyb3VwX2NyZWF0ZV9hcmdzIHsKLSBfX3U2NCBjcmVhdGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IGNyZWF0ZTsKICBfX3U2NCBxZ3JvdXBpZDsKIH07CiBzdHJ1Y3QgYnRyZnNfaW9jdGxfdGltZXNwZWMgewotIF9fdTY0IHNlYzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgc2VjOwogIF9fdTMyIG5zZWM7CiB9Owogc3RydWN0IGJ0cmZzX2lvY3RsX3JlY2VpdmVkX3N1YnZvbF9hcmdzIHsKLSBjaGFyIHV1aWRbQlRSRlNfVVVJRF9TSVpFXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgY2hhciB1dWlkW0JUUkZTX1VVSURfU0laRV07CiAgX191NjQgc3RyYW5zaWQ7CiAgX191NjQgcnRyYW5zaWQ7CiAgc3RydWN0IGJ0cmZzX2lvY3RsX3RpbWVzcGVjIHN0aW1lOwotIHN0cnVjdCBidHJmc19pb2N0bF90aW1lc3BlYyBydGltZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGJ0cmZzX2lvY3RsX3RpbWVzcGVjIHJ0aW1lOwogIF9fdTY0IGZsYWdzOwogIF9fdTY0IHJlc2VydmVkWzE2XTsKIH07Ci0jZGVmaW5lIEJUUkZTX1NFTkRfRkxBR19OT19GSUxFX0RBVEEgMHgxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCVFJGU19TRU5EX0ZMQUdfTk9fRklMRV9EQVRBIDB4MQogI2RlZmluZSBCVFJGU19TRU5EX0ZMQUdfT01JVF9TVFJFQU1fSEVBREVSIDB4MgogI2RlZmluZSBCVFJGU19TRU5EX0ZMQUdfT01JVF9FTkRfQ01EIDB4NAogI2RlZmluZSBCVFJGU19TRU5EX0ZMQUdfTUFTSyAgIChCVFJGU19TRU5EX0ZMQUdfTk9fRklMRV9EQVRBIHwgICBCVFJGU19TRU5EX0ZMQUdfT01JVF9TVFJFQU1fSEVBREVSIHwgICBCVFJGU19TRU5EX0ZMQUdfT01JVF9FTkRfQ01EKQotc3RydWN0IGJ0cmZzX2lvY3RsX3NlbmRfYXJncyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGJ0cmZzX2lvY3RsX3NlbmRfYXJncyB7CiAgX19zNjQgc2VuZF9mZDsKICBfX3U2NCBjbG9uZV9zb3VyY2VzX2NvdW50OwogIF9fdTY0IF9fdXNlciAqY2xvbmVfc291cmNlczsKLSBfX3U2NCBwYXJlbnRfcm9vdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgcGFyZW50X3Jvb3Q7CiAgX191NjQgZmxhZ3M7CiAgX191NjQgcmVzZXJ2ZWRbNF07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gYnRyZnNfZXJyX2NvZGUgeworIG5vdHVzZWQsCisgQlRSRlNfRVJST1JfREVWX1JBSUQxX01JTl9OT1RfTUVULAorIEJUUkZTX0VSUk9SX0RFVl9SQUlEMTBfTUlOX05PVF9NRVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEJUUkZTX0VSUk9SX0RFVl9SQUlENV9NSU5fTk9UX01FVCwKKyBCVFJGU19FUlJPUl9ERVZfUkFJRDZfTUlOX05PVF9NRVQsCisgQlRSRlNfRVJST1JfREVWX1RHVF9SRVBMQUNFLAorIEJUUkZTX0VSUk9SX0RFVl9NSVNTSU5HX05PVF9GT1VORCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgQlRSRlNfRVJST1JfREVWX09OTFlfV1JJVEFCTEUsCisgQlRSRlNfRVJST1JfREVWX0VYQ0xfUlVOX0lOX1BST0dSRVNTCit9OwogI2RlZmluZSBCVFJGU19JT0NfU05BUF9DUkVBVEUgX0lPVyhCVFJGU19JT0NUTF9NQUdJQywgMSwgICBzdHJ1Y3QgYnRyZnNfaW9jdGxfdm9sX2FyZ3MpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVFJGU19JT0NfREVGUkFHIF9JT1coQlRSRlNfSU9DVExfTUFHSUMsIDIsICAgc3RydWN0IGJ0cmZzX2lvY3RsX3ZvbF9hcmdzKQpAQCAtNDAxLDcgKzQ0MSw3IEBACiAjZGVmaW5lIEJUUkZTX0lPQ19UUkVFX1NFQVJDSCBfSU9XUihCVFJGU19JT0NUTF9NQUdJQywgMTcsICAgc3RydWN0IGJ0cmZzX2lvY3RsX3NlYXJjaF9hcmdzKQogI2RlZmluZSBCVFJGU19JT0NfSU5PX0xPT0tVUCBfSU9XUihCVFJGU19JT0NUTF9NQUdJQywgMTgsICAgc3RydWN0IGJ0cmZzX2lvY3RsX2lub19sb29rdXBfYXJncykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEJUUkZTX0lPQ19ERUZBVUxUX1NVQlZPTCBfSU9XKEJUUkZTX0lPQ1RMX01BR0lDLCAxOSwgdTY0KQorI2RlZmluZSBCVFJGU19JT0NfREVGQVVMVF9TVUJWT0wgX0lPVyhCVFJGU19JT0NUTF9NQUdJQywgMTksIF9fdTY0KQogI2RlZmluZSBCVFJGU19JT0NfU1BBQ0VfSU5GTyBfSU9XUihCVFJGU19JT0NUTF9NQUdJQywgMjAsICAgc3RydWN0IGJ0cmZzX2lvY3RsX3NwYWNlX2FyZ3MpCiAjZGVmaW5lIEJUUkZTX0lPQ19TVEFSVF9TWU5DIF9JT1IoQlRSRlNfSU9DVExfTUFHSUMsIDI0LCBfX3U2NCkKICNkZWZpbmUgQlRSRlNfSU9DX1dBSVRfU1lOQyBfSU9XKEJUUkZTX0lPQ1RMX01BR0lDLCAyMiwgX191NjQpCkBAIC00MzQsMTAgKzQ3NCwxNiBAQAogI2RlZmluZSBCVFJGU19JT0NfUUdST1VQX0xJTUlUIF9JT1IoQlRSRlNfSU9DVExfTUFHSUMsIDQzLCAgIHN0cnVjdCBidHJmc19pb2N0bF9xZ3JvdXBfbGltaXRfYXJncykKICNkZWZpbmUgQlRSRlNfSU9DX1FVT1RBX1JFU0NBTiBfSU9XKEJUUkZTX0lPQ1RMX01BR0lDLCA0NCwgICBzdHJ1Y3QgYnRyZnNfaW9jdGxfcXVvdGFfcmVzY2FuX2FyZ3MpCiAjZGVmaW5lIEJUUkZTX0lPQ19RVU9UQV9SRVNDQU5fU1RBVFVTIF9JT1IoQlRSRlNfSU9DVExfTUFHSUMsIDQ1LCAgIHN0cnVjdCBidHJmc19pb2N0bF9xdW90YV9yZXNjYW5fYXJncykKLSNkZWZpbmUgQlRSRlNfSU9DX0dFVF9GU0xBQkVMIF9JT1IoQlRSRlNfSU9DVExfTUFHSUMsIDQ5LCAgIGNoYXJbQlRSRlNfTEFCRUxfU0laRV0pCisjZGVmaW5lIEJUUkZTX0lPQ19RVU9UQV9SRVNDQU5fV0FJVCBfSU8oQlRSRlNfSU9DVExfTUFHSUMsIDQ2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQlRSRlNfSU9DX0dFVF9GU0xBQkVMIF9JT1IoQlRSRlNfSU9DVExfTUFHSUMsIDQ5LCAgIGNoYXJbQlRSRlNfTEFCRUxfU0laRV0pCiAjZGVmaW5lIEJUUkZTX0lPQ19TRVRfRlNMQUJFTCBfSU9XKEJUUkZTX0lPQ1RMX01BR0lDLCA1MCwgICBjaGFyW0JUUkZTX0xBQkVMX1NJWkVdKQogI2RlZmluZSBCVFJGU19JT0NfR0VUX0RFVl9TVEFUUyBfSU9XUihCVFJGU19JT0NUTF9NQUdJQywgNTIsICAgc3RydWN0IGJ0cmZzX2lvY3RsX2dldF9kZXZfc3RhdHMpCiAjZGVmaW5lIEJUUkZTX0lPQ19ERVZfUkVQTEFDRSBfSU9XUihCVFJGU19JT0NUTF9NQUdJQywgNTMsICAgc3RydWN0IGJ0cmZzX2lvY3RsX2Rldl9yZXBsYWNlX2FyZ3MpCi0jZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJUUkZTX0lPQ19GSUxFX0VYVEVOVF9TQU1FIF9JT1dSKEJUUkZTX0lPQ1RMX01BR0lDLCA1NCwgICBzdHJ1Y3QgYnRyZnNfaW9jdGxfc2FtZV9hcmdzKQorI2RlZmluZSBCVFJGU19JT0NfR0VUX0ZFQVRVUkVTIF9JT1IoQlRSRlNfSU9DVExfTUFHSUMsIDU3LCAgIHN0cnVjdCBidHJmc19pb2N0bF9mZWF0dXJlX2ZsYWdzKQorI2RlZmluZSBCVFJGU19JT0NfU0VUX0ZFQVRVUkVTIF9JT1coQlRSRlNfSU9DVExfTUFHSUMsIDU3LCAgIHN0cnVjdCBidHJmc19pb2N0bF9mZWF0dXJlX2ZsYWdzWzJdKQorI2RlZmluZSBCVFJGU19JT0NfR0VUX1NVUFBPUlRFRF9GRUFUVVJFUyBfSU9SKEJUUkZTX0lPQ1RMX01BR0lDLCA1NywgICBzdHJ1Y3QgYnRyZnNfaW9jdGxfZmVhdHVyZV9mbGFnc1szXSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvY2FuL2d3LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2Nhbi9ndy5oCmluZGV4IDNmNzJhNTIuLmRkODBkNDggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvY2FuL2d3LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jYW4vZ3cuaApAQCAtNTIsNTggKzUyLDU5IEBACiAgQ0dXX0ZJTFRFUiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ0dXX0RFTEVURUQsCisgQ0dXX0xJTV9IT1BTLAogIF9fQ0dXX01BWAogfTsKLSNkZWZpbmUgQ0dXX01BWCAoX19DR1dfTUFYIC0gMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENHV19NQVggKF9fQ0dXX01BWCAtIDEpCiAjZGVmaW5lIENHV19GTEFHU19DQU5fRUNITyAweDAxCiAjZGVmaW5lIENHV19GTEFHU19DQU5fU1JDX1RTVEFNUCAweDAyCiAjZGVmaW5lIENHV19GTEFHU19DQU5fSUlGX1RYX09LIDB4MDQKLSNkZWZpbmUgQ0dXX01PRF9GVU5DUyA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDR1dfTU9EX0ZVTkNTIDQKICNkZWZpbmUgQ0dXX01PRF9JRCAweDAxCiAjZGVmaW5lIENHV19NT0RfRExDIDB4MDIKICNkZWZpbmUgQ0dXX01PRF9EQVRBIDB4MDQKLSNkZWZpbmUgQ0dXX0ZSQU1FX01PRFMgMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0dXX0ZSQU1FX01PRFMgMwogI2RlZmluZSBNQVhfTU9ERlVOQ1RJT05TIChDR1dfTU9EX0ZVTkNTICogQ0dXX0ZSQU1FX01PRFMpCiBzdHJ1Y3QgY2d3X2ZyYW1lX21vZCB7CiAgc3RydWN0IGNhbl9mcmFtZSBjZjsKLSBfX3U4IG1vZHR5cGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggbW9kdHlwZTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAjZGVmaW5lIENHV19NT0RBVFRSX0xFTiBzaXplb2Yoc3RydWN0IGNnd19mcmFtZV9tb2QpCiBzdHJ1Y3QgY2d3X2NzdW1feG9yIHsKLSBfX3M4IGZyb21faWR4OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3M4IGZyb21faWR4OwogIF9fczggdG9faWR4OwogIF9fczggcmVzdWx0X2lkeDsKICBfX3U4IGluaXRfeG9yX3ZhbDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIHN0cnVjdCBjZ3dfY3N1bV9jcmM4IHsKICBfX3M4IGZyb21faWR4OwogIF9fczggdG9faWR4OwotIF9fczggcmVzdWx0X2lkeDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19zOCByZXN1bHRfaWR4OwogIF9fdTggaW5pdF9jcmNfdmFsOwogIF9fdTggZmluYWxfeG9yX3ZhbDsKICBfX3U4IGNyY3RhYlsyNTZdOwotIF9fdTggcHJvZmlsZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBwcm9maWxlOwogIF9fdTggcHJvZmlsZV9kYXRhWzIwXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAjZGVmaW5lIENHV19DU19YT1JfTEVOIHNpemVvZihzdHJ1Y3QgY2d3X2NzdW1feG9yKQotI2RlZmluZSBDR1dfQ1NfQ1JDOF9MRU4gc2l6ZW9mKHN0cnVjdCBjZ3dfY3N1bV9jcmM4KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0dXX0NTX0NSQzhfTEVOIHNpemVvZihzdHJ1Y3QgY2d3X2NzdW1fY3JjOCkKIGVudW0gewogIENHV19DUkM4UFJGX1VOU1BFQywKICBDR1dfQ1JDOFBSRl8xVTgsCi0gQ0dXX0NSQzhQUkZfMTZVOCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgQ0dXX0NSQzhQUkZfMTZVOCwKICBDR1dfQ1JDOFBSRl9TRkZJRF9YT1IsCiAgX19DR1dfQ1JDOFBSRl9NQVgKIH07Ci0jZGVmaW5lIENHV19DUkM4UFJGX01BWCAoX19DR1dfQ1JDOFBSRl9NQVggLSAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0dXX0NSQzhQUkZfTUFYIChfX0NHV19DUkM4UFJGX01BWCAtIDEpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvY2lmcy9jaWZzX21vdW50LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2NpZnMvY2lmc19tb3VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYjZiMzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2NpZnMvY2lmc19tb3VudC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0NJRlNfTU9VTlRfSAorI2RlZmluZSBfQ0lGU19NT1VOVF9ICisjZGVmaW5lIENJRlNfTUFYX0RPTUFJTk5BTUVfTEVOIDI1NgorI2RlZmluZSBDSUZTX01BWF9VU0VSTkFNRV9MRU4gMjU2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDSUZTX01BWF9QQVNTV09SRF9MRU4gNTEyCisjZGVmaW5lIENJRlNfTUFYX1NIQVJFX0xFTiAyNTYKKyNkZWZpbmUgQ0lGU19OSV9NQVhIT1NUIDEwMjQKKyNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvY200MDAwX2NzLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2NtNDAwMF9jcy5oCmluZGV4IGFiMWE2YTEuLjk5ZmU3MDEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvY200MDAwX2NzLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jbTQwMDBfY3MuaApAQCAtMTksNDMgKzE5LDQ1IEBACiAjaWZuZGVmIF9VQVBJX0NNNDAwMF9IXwogI2RlZmluZSBfVUFQSV9DTTQwMDBfSF8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2RlZmluZSBNQVhfQVRSIDMzCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1BWF9BVFIgMzMKICNkZWZpbmUgQ000MDAwX01BWF9ERVYgNAogdHlwZWRlZiBzdHJ1Y3QgYXRyZXEgewogIF9fczMyIGF0cl9sZW47Ci0gdW5zaWduZWQgY2hhciBhdHJbNjRdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBjaGFyIGF0cls2NF07CiAgX19zMzIgcG93ZXJfYWN0OwogIHVuc2lnbmVkIGNoYXIgYklGU0Q7CiAgdW5zaWduZWQgY2hhciBiSUZTQzsKLX0gYXRyZXFfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9IGF0cmVxX3Q7CiB0eXBlZGVmIHN0cnVjdCBwdHNyZXEgewogIF9fdTMyIHByb3RvY29sOwogIHVuc2lnbmVkIGNoYXIgZmxhZ3M7Ci0gdW5zaWduZWQgY2hhciBwdHMxOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBjaGFyIHB0czE7CiAgdW5zaWduZWQgY2hhciBwdHMyOwogIHVuc2lnbmVkIGNoYXIgcHRzMzsKIH0gcHRzcmVxX3Q7Ci0jZGVmaW5lIENNX0lPQ19NQUdJQyAnYycKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENNX0lPQ19NQUdJQyAnYycKICNkZWZpbmUgQ01fSU9DX01BWE5SIDI1NQogI2RlZmluZSBDTV9JT0NHU1RBVFVTIF9JT1IgKENNX0lPQ19NQUdJQywgMCwgdW5zaWduZWQgY2hhciAqKQogI2RlZmluZSBDTV9JT0NHQVRSIF9JT1dSKENNX0lPQ19NQUdJQywgMSwgYXRyZXFfdCAqKQotI2RlZmluZSBDTV9JT0NTUFRTIF9JT1cgKENNX0lPQ19NQUdJQywgMiwgcHRzcmVxX3QgKikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENNX0lPQ1NQVFMgX0lPVyAoQ01fSU9DX01BR0lDLCAyLCBwdHNyZXFfdCAqKQogI2RlZmluZSBDTV9JT0NTUkRSIF9JTyAoQ01fSU9DX01BR0lDLCAzKQogI2RlZmluZSBDTV9JT0NBUkRPRkYgX0lPIChDTV9JT0NfTUFHSUMsIDQpCiAjZGVmaW5lIENNX0lPU0RCR0xWTCBfSU9XKENNX0lPQ19NQUdJQywgMjUwLCBpbnQqKQotI2RlZmluZSBDTV9DQVJEX0lOU0VSVEVEIDB4MDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENNX0NBUkRfSU5TRVJURUQgMHgwMQogI2RlZmluZSBDTV9DQVJEX1BPV0VSRUQgMHgwMgogI2RlZmluZSBDTV9BVFJfUFJFU0VOVCAweDA0CiAjZGVmaW5lIENNX0FUUl9WQUxJRCAweDA4Ci0jZGVmaW5lIENNX1NUQVRFX1ZBTElEIDB4MGYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENNX1NUQVRFX1ZBTElEIDB4MGYKICNkZWZpbmUgQ01fTk9fUkVBREVSIDB4MTAKICNkZWZpbmUgQ01fQkFEX0NBUkQgMHgyMAogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jb25zdC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jb25zdC5oCmluZGV4IGQzNDgzMDAuLjlhODViZTcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvY29uc3QuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2NvbnN0LmgKQEAgLTI4LDQgKzI4LDcgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9BVChULFgpICgoVCkoWCkpCiAjZW5kaWYKKyNkZWZpbmUgX0JJVFVMKHgpIChfQUMoMSxVTCkgPDwgKHgpKQorI2RlZmluZSBfQklUVUxMKHgpIChfQUMoMSxVTEwpIDw8ICh4KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZG0taW9jdGwuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZG0taW9jdGwuaAppbmRleCA4OWYzYjkwLi5mYmI0Y2Q5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2RtLWlvY3RsLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9kbS1pb2N0bC5oCkBAIC0xMjEsOSArMTIxLDkgQEAKICNkZWZpbmUgRE1fREVWX1NFVF9HRU9NRVRSWSBfSU9XUihETV9JT0NUTCwgRE1fREVWX1NFVF9HRU9NRVRSWV9DTUQsIHN0cnVjdCBkbV9pb2N0bCkKICNkZWZpbmUgRE1fVkVSU0lPTl9NQUpPUiA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBETV9WRVJTSU9OX01JTk9SIDI0CisjZGVmaW5lIERNX1ZFUlNJT05fTUlOT1IgMjcKICNkZWZpbmUgRE1fVkVSU0lPTl9QQVRDSExFVkVMIDAKLSNkZWZpbmUgRE1fVkVSU0lPTl9FWFRSQSAiLWlvY3RsICgyMDEzLTAxLTE1KSIKKyNkZWZpbmUgRE1fVkVSU0lPTl9FWFRSQSAiLWlvY3RsICgyMDEzLTEwLTMwKSIKICNkZWZpbmUgRE1fUkVBRE9OTFlfRkxBRyAoMSA8PCAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE1fU1VTUEVORF9GTEFHICgxIDw8IDEpCkBAIC0xNDMsNCArMTQzLDYgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERNX1NFQ1VSRV9EQVRBX0ZMQUcgKDEgPDwgMTUpCiAjZGVmaW5lIERNX0RBVEFfT1VUX0ZMQUcgKDEgPDwgMTYpCisjZGVmaW5lIERNX0RFRkVSUkVEX1JFTU9WRSAoMSA8PCAxNykKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZG0tbG9nLXVzZXJzcGFjZS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9kbS1sb2ctdXNlcnNwYWNlLmgKaW5kZXggNDVhNTdmMy4uNDdkNDVmNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9kbS1sb2ctdXNlcnNwYWNlLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9kbS1sb2ctdXNlcnNwYWNlLmgKQEAgLTQzLDcgKzQzLDcgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERNX1VMT0dfUkVRVUVTVF9NQVNLIDB4RkYKICNkZWZpbmUgRE1fVUxPR19SRVFVRVNUX1RZUEUocmVxdWVzdF90eXBlKSAgIChETV9VTE9HX1JFUVVFU1RfTUFTSyAmIChyZXF1ZXN0X3R5cGUpKQotI2RlZmluZSBETV9VTE9HX1JFUVVFU1RfVkVSU0lPTiAyCisjZGVmaW5lIERNX1VMT0dfUkVRVUVTVF9WRVJTSU9OIDMKIHN0cnVjdCBkbV91bG9nX3JlcXVlc3QgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50NjRfdCBsdWlkOwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9kbi5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9kbi5oCmluZGV4IGM3Mjk1MmUuLjAxM2EwM2YgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZG4uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2RuLmgKQEAgLTE4LDExOCArMTgsMTIxIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0ROX0gKICNkZWZpbmUgX0xJTlVYX0ROX0gKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jZGVmaW5lIEROUFJPVE9fTlNQIDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNkZWZpbmUgRE5QUk9UT19OU1AgMgogI2RlZmluZSBETlBST1RPX1JPVSAzCiAjZGVmaW5lIEROUFJPVE9fTk1MIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEROUFJPVE9fRVZMIDUKICNkZWZpbmUgRE5QUk9UT19FVlIgNgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE5QUk9UT19OU1BUIDcKICNkZWZpbmUgRE5fQURETCAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBETl9NQVhBRERMIDIKICNkZWZpbmUgRE5fTUFYT1BUTCAxNgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE5fTUFYT0JKTCAxNgogI2RlZmluZSBETl9NQVhBQ0NMIDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBETl9NQVhBTElBU0wgMTI4CiAjZGVmaW5lIEROX01BWE5PREVMIDI1NgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE5CVUZTSVpFIDY1MDIzCiAjZGVmaW5lIFNPX0NPTkRBVEEgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09fQ09OQUNDRVNTIDIKICNkZWZpbmUgU09fUFJPWFlVU1IgMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09fTElOS0lORk8gNwogI2RlZmluZSBEU09fQ09OREFUQSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEU09fRElTREFUQSAxMAogI2RlZmluZSBEU09fQ09OQUNDRVNTIDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERTT19BQ0NFUFRNT0RFIDQKICNkZWZpbmUgRFNPX0NPTkFDQ0VQVCA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEU09fQ09OUkVKRUNUIDYKICNkZWZpbmUgRFNPX0xJTktJTkZPIDcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERTT19TVFJFQU0gOAogI2RlZmluZSBEU09fU0VRUEFDS0VUIDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERTT19NQVhXSU5ET1cgMTEKICNkZWZpbmUgRFNPX05PREVMQVkgMTIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERTT19DT1JLIDEzCiAjZGVmaW5lIERTT19TRVJWSUNFUyAxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFNPX0lORk8gMTUKICNkZWZpbmUgRFNPX01BWCAxNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTExfSU5BQ1RJVkUgMAogI2RlZmluZSBMTF9DT05ORUNUSU5HIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIExMX1JVTk5JTkcgMgogI2RlZmluZSBMTF9ESVNDT05ORUNUSU5HIDMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFDQ19JTU1FRCAwCiAjZGVmaW5lIEFDQ19ERUZFUiAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTREZfV0lMRCAxCiAjZGVmaW5lIFNERl9QUk9YWSAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTREZfVUlDUFJPWFkgNAogc3RydWN0IGRuX25hZGRyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19sZTE2IGFfbGVuOwogIF9fdTggYV9hZGRyW0ROX01BWEFERExdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3Qgc29ja2FkZHJfZG4geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBzZG5fZmFtaWx5OwogIF9fdTggc2RuX2ZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHNkbl9vYmpudW07CiAgX19sZTE2IHNkbl9vYmpuYW1lbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBzZG5fb2JqbmFtZVtETl9NQVhPQkpMXTsKICBzdHJ1Y3QgZG5fbmFkZHIgc2RuX2FkZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBzZG5fbm9kZWFkZHJsIHNkbl9hZGQuYV9sZW4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHNkbl9ub2RlYWRkciBzZG5fYWRkLmFfYWRkcgogc3RydWN0IG9wdGRhdGFfZG4gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMTYgb3B0X3N0YXR1czsKICNkZWZpbmUgb3B0X3N0cyBvcHRfc3RhdHVzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUxNiBvcHRfb3B0bDsKICBfX3U4IG9wdF9kYXRhWzE2XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGFjY2Vzc2RhdGFfZG4geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGFjY19hY2NsOwogIF9fdTggYWNjX2FjY1tETl9NQVhBQ0NMXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBhY2NfcGFzc2w7CiAgX191OCBhY2NfcGFzc1tETl9NQVhBQ0NMXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBhY2NfdXNlcmw7CiAgX191OCBhY2NfdXNlcltETl9NQVhBQ0NMXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGxpbmtpbmZvX2RuIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgaWRuX3NlZ3NpemU7CiAgX191OCBpZG5fbGlua3N0YXRlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiB1bmlvbiBldGhlcmFkZHJlc3MgewotIF9fdTggZG5lX2FkZHJbNl07Ci0gc3RydWN0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBkbmVfYWRkcltFVEhfQUxFTl07Cisgc3RydWN0IHsKICBfX3U4IGRuZV9oaW9yZFs0XTsKICBfX3U4IGRuZV9ub2RlYWRkclsyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBkbmVfcmVtb3RlOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZG5fYWRkciB7CiAgX19sZTE2IGRuYV9mYW1pbHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIGV0aGVyYWRkcmVzcyBkbmFfbmV0YWRkcjsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBERUNORVRfSU9DVExfQkFTRSAweDg5CiAjZGVmaW5lIFNJT0NTTkVUQUREUiBfSU9XKERFQ05FVF9JT0NUTF9CQVNFLCAweGUwLCBzdHJ1Y3QgZG5fbmFkZHIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU9DR05FVEFERFIgX0lPUihERUNORVRfSU9DVExfQkFTRSwgMHhlMSwgc3RydWN0IGRuX25hZGRyKQogI2RlZmluZSBPU0lPQ1NORVRBRERSIF9JT1coREVDTkVUX0lPQ1RMX0JBU0UsIDB4ZTAsIGludCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9TSU9DR05FVEFERFIgX0lPUihERUNORVRfSU9DVExfQkFTRSwgMHhlMSwgaW50KQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9kcWJsa194ZnMuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZHFibGtfeGZzLmgKaW5kZXggYWM5MzgwMS4uMzFiMzlkNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9kcWJsa194ZnMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2RxYmxrX3hmcy5oCkBAIC0zNiw5NCArMzYsMTIzIEBACiAjZGVmaW5lIFFfWFFVT1RBUk0gWFFNX0NNRCg2KQogI2RlZmluZSBRX1hRVU9UQVNZTkMgWFFNX0NNRCg3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUV9YR0VUUVNUQVRWIFhRTV9DTUQoOCkKICNkZWZpbmUgRlNfRFFVT1RfVkVSU0lPTiAxCiB0eXBlZGVmIHN0cnVjdCBmc19kaXNrX3F1b3RhIHsKICBfX3M4IGRfdmVyc2lvbjsKLSBfX3M4IGRfZmxhZ3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fczggZF9mbGFnczsKICBfX3UxNiBkX2ZpZWxkbWFzazsKICBfX3UzMiBkX2lkOwogIF9fdTY0IGRfYmxrX2hhcmRsaW1pdDsKLSBfX3U2NCBkX2Jsa19zb2Z0bGltaXQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IGRfYmxrX3NvZnRsaW1pdDsKICBfX3U2NCBkX2lub19oYXJkbGltaXQ7CiAgX191NjQgZF9pbm9fc29mdGxpbWl0OwogIF9fdTY0IGRfYmNvdW50OwotIF9fdTY0IGRfaWNvdW50OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBkX2ljb3VudDsKICBfX3MzMiBkX2l0aW1lcjsKICBfX3MzMiBkX2J0aW1lcjsKICBfX3UxNiBkX2l3YXJuczsKLSBfX3UxNiBkX2J3YXJuczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgZF9id2FybnM7CiAgX19zMzIgZF9wYWRkaW5nMjsKICBfX3U2NCBkX3J0Yl9oYXJkbGltaXQ7CiAgX191NjQgZF9ydGJfc29mdGxpbWl0OwotIF9fdTY0IGRfcnRiY291bnQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IGRfcnRiY291bnQ7CiAgX19zMzIgZF9ydGJ0aW1lcjsKICBfX3UxNiBkX3J0Yndhcm5zOwogIF9fczE2IGRfcGFkZGluZzM7Ci0gY2hhciBkX3BhZGRpbmc0WzhdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBjaGFyIGRfcGFkZGluZzRbOF07CiB9IGZzX2Rpc2tfcXVvdGFfdDsKICNkZWZpbmUgRlNfRFFfSVNPRlQgKDE8PDApCiAjZGVmaW5lIEZTX0RRX0lIQVJEICgxPDwxKQotI2RlZmluZSBGU19EUV9CU09GVCAoMTw8MikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZTX0RRX0JTT0ZUICgxPDwyKQogI2RlZmluZSBGU19EUV9CSEFSRCAoMTw8MykKICNkZWZpbmUgRlNfRFFfUlRCU09GVCAoMTw8NCkKICNkZWZpbmUgRlNfRFFfUlRCSEFSRCAoMTw8NSkKLSNkZWZpbmUgRlNfRFFfTElNSVRfTUFTSyAoRlNfRFFfSVNPRlQgfCBGU19EUV9JSEFSRCB8IEZTX0RRX0JTT0ZUIHwgICBGU19EUV9CSEFSRCB8IEZTX0RRX1JUQlNPRlQgfCBGU19EUV9SVEJIQVJEKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRlNfRFFfTElNSVRfTUFTSyAoRlNfRFFfSVNPRlQgfCBGU19EUV9JSEFSRCB8IEZTX0RRX0JTT0ZUIHwgICBGU19EUV9CSEFSRCB8IEZTX0RRX1JUQlNPRlQgfCBGU19EUV9SVEJIQVJEKQogI2RlZmluZSBGU19EUV9CVElNRVIgKDE8PDYpCiAjZGVmaW5lIEZTX0RRX0lUSU1FUiAoMTw8NykKICNkZWZpbmUgRlNfRFFfUlRCVElNRVIgKDE8PDgpCi0jZGVmaW5lIEZTX0RRX1RJTUVSX01BU0sgKEZTX0RRX0JUSU1FUiB8IEZTX0RRX0lUSU1FUiB8IEZTX0RRX1JUQlRJTUVSKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRlNfRFFfVElNRVJfTUFTSyAoRlNfRFFfQlRJTUVSIHwgRlNfRFFfSVRJTUVSIHwgRlNfRFFfUlRCVElNRVIpCiAjZGVmaW5lIEZTX0RRX0JXQVJOUyAoMTw8OSkKICNkZWZpbmUgRlNfRFFfSVdBUk5TICgxPDwxMCkKICNkZWZpbmUgRlNfRFFfUlRCV0FSTlMgKDE8PDExKQotI2RlZmluZSBGU19EUV9XQVJOU19NQVNLIChGU19EUV9CV0FSTlMgfCBGU19EUV9JV0FSTlMgfCBGU19EUV9SVEJXQVJOUykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZTX0RRX1dBUk5TX01BU0sgKEZTX0RRX0JXQVJOUyB8IEZTX0RRX0lXQVJOUyB8IEZTX0RRX1JUQldBUk5TKQogI2RlZmluZSBGU19EUV9CQ09VTlQgKDE8PDEyKQogI2RlZmluZSBGU19EUV9JQ09VTlQgKDE8PDEzKQogI2RlZmluZSBGU19EUV9SVEJDT1VOVCAoMTw8MTQpCi0jZGVmaW5lIEZTX0RRX0FDQ1RfTUFTSyAoRlNfRFFfQkNPVU5UIHwgRlNfRFFfSUNPVU5UIHwgRlNfRFFfUlRCQ09VTlQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGU19EUV9BQ0NUX01BU0sgKEZTX0RRX0JDT1VOVCB8IEZTX0RRX0lDT1VOVCB8IEZTX0RRX1JUQkNPVU5UKQogI2RlZmluZSBGU19RVU9UQV9VRFFfQUNDVCAoMTw8MCkKICNkZWZpbmUgRlNfUVVPVEFfVURRX0VORkQgKDE8PDEpCiAjZGVmaW5lIEZTX1FVT1RBX0dEUV9BQ0NUICgxPDwyKQotI2RlZmluZSBGU19RVU9UQV9HRFFfRU5GRCAoMTw8MykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZTX1FVT1RBX0dEUV9FTkZEICgxPDwzKQogI2RlZmluZSBGU19RVU9UQV9QRFFfQUNDVCAoMTw8NCkKICNkZWZpbmUgRlNfUVVPVEFfUERRX0VORkQgKDE8PDUpCiAjZGVmaW5lIEZTX1VTRVJfUVVPVEEgKDE8PDApCi0jZGVmaW5lIEZTX1BST0pfUVVPVEEgKDE8PDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGU19QUk9KX1FVT1RBICgxPDwxKQogI2RlZmluZSBGU19HUk9VUF9RVU9UQSAoMTw8MikKICNkZWZpbmUgRlNfUVNUQVRfVkVSU0lPTiAxCiB0eXBlZGVmIHN0cnVjdCBmc19xZmlsZXN0YXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBxZnNfaW5vOworIF9fdTY0IHFmc19uYmxrczsKKyBfX3UzMiBxZnNfbmV4dGVudHM7Cit9IGZzX3FmaWxlc3RhdF90OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgc3RydWN0IGZzX3F1b3RhX3N0YXQgeworIF9fczggcXNfdmVyc2lvbjsKKyBfX3UxNiBxc19mbGFnczsKKyBfX3M4IHFzX3BhZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgZnNfcWZpbGVzdGF0X3QgcXNfdXF1b3RhOworIGZzX3FmaWxlc3RhdF90IHFzX2dxdW90YTsKKyBfX3UzMiBxc19pbmNvcmVkcXM7CisgX19zMzIgcXNfYnRpbWVsaW1pdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19zMzIgcXNfaXRpbWVsaW1pdDsKKyBfX3MzMiBxc19ydGJ0aW1lbGltaXQ7CisgX191MTYgcXNfYndhcm5saW1pdDsKKyBfX3UxNiBxc19pd2FybmxpbWl0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK30gZnNfcXVvdGFfc3RhdF90OworI2RlZmluZSBGU19RU1RBVFZfVkVSU0lPTjEgMQorc3RydWN0IGZzX3FmaWxlc3RhdHYgewogIF9fdTY0IHFmc19pbm87CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHFmc19uYmxrczsKICBfX3UzMiBxZnNfbmV4dGVudHM7Ci19IGZzX3FmaWxlc3RhdF90OwotdHlwZWRlZiBzdHJ1Y3QgZnNfcXVvdGFfc3RhdCB7CisgX191MzIgcWZzX3BhZDsKK307CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGZzX3F1b3RhX3N0YXR2IHsKICBfX3M4IHFzX3ZlcnNpb247CisgX191OCBxc19wYWQxOwogIF9fdTE2IHFzX2ZsYWdzOwotIF9fczggcXNfcGFkOwotIGZzX3FmaWxlc3RhdF90IHFzX3VxdW90YTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gZnNfcWZpbGVzdGF0X3QgcXNfZ3F1b3RhOwogIF9fdTMyIHFzX2luY29yZWRxczsKKyBzdHJ1Y3QgZnNfcWZpbGVzdGF0diBxc191cXVvdGE7Cisgc3RydWN0IGZzX3FmaWxlc3RhdHYgcXNfZ3F1b3RhOworIHN0cnVjdCBmc19xZmlsZXN0YXR2IHFzX3BxdW90YTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgcXNfYnRpbWVsaW1pdDsKICBfX3MzMiBxc19pdGltZWxpbWl0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBxc19ydGJ0aW1lbGltaXQ7CiAgX191MTYgcXNfYndhcm5saW1pdDsKLSBfX3UxNiBxc19pd2FybmxpbWl0OwotfSBmc19xdW90YV9zdGF0X3Q7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IHFzX2l3YXJubGltaXQ7CisgX191NjQgcXNfcGFkMls4XTsKK307CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2VsZi1lbS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9lbGYtZW0uaAppbmRleCA1ODAyZmViLi4xZTg2YzVjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2VsZi1lbS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZWxmLWVtLmgKQEAgLTM4LDI4ICszOCwyOSBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRU1fUFBDNjQgMjEKICNkZWZpbmUgRU1fU1BVIDIzCisjZGVmaW5lIEVNX0FSTSA0MAogI2RlZmluZSBFTV9TSCA0MgotI2RlZmluZSBFTV9TUEFSQ1Y5IDQzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFTV9TUEFSQ1Y5IDQzCiAjZGVmaW5lIEVNX0lBXzY0IDUwCiAjZGVmaW5lIEVNX1g4Nl82NCA2MgogI2RlZmluZSBFTV9TMzkwIDIyCi0jZGVmaW5lIEVNX0NSSVMgNzYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVNX0NSSVMgNzYKICNkZWZpbmUgRU1fVjg1MCA4NwogI2RlZmluZSBFTV9NMzJSIDg4Ci0jZGVmaW5lIEVNX0g4XzMwMCA0NgogI2RlZmluZSBFTV9NTjEwMzAwIDg5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFTV9CTEFDS0ZJTiAxMDYKICNkZWZpbmUgRU1fVElfQzYwMDAgMTQwCisjZGVmaW5lIEVNX0FBUkNINjQgMTgzCiAjZGVmaW5lIEVNX0ZSViAweDU0NDEKLSNkZWZpbmUgRU1fQVZSMzIgMHgxOGFkCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFTV9BVlIzMiAweDE4YWQKICNkZWZpbmUgRU1fQUxQSEEgMHg5MDI2CiAjZGVmaW5lIEVNX0NZR05VU19WODUwIDB4OTA4MAogI2RlZmluZSBFTV9DWUdOVVNfTTMyUiAweDkwNDEKLSNkZWZpbmUgRU1fUzM5MF9PTEQgMHhBMzkwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFTV9TMzkwX09MRCAweEEzOTAKICNkZWZpbmUgRU1fQ1lHTlVTX01OMTAzMDAgMHhiZWVmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZmQuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZmQuaAppbmRleCBhMDE4Nzc3Li5jZmM4MmE2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2ZkLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9mZC5oCkBAIC0xMjcsMTI3ICsxMjcsMTI4IEBACiAgRkRfVU5VU0VEX0JJVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRkRfRElTS19DSEFOR0VEX0JJVCwKLSBGRF9ESVNLX1dSSVRBQkxFX0JJVAorIEZEX0RJU0tfV1JJVEFCTEVfQklULAorIEZEX09QRU5fU0hPVUxEX0ZBSUxfQklUCiB9OwotI2RlZmluZSBGRFNFVERSVlBSTSBfSU9XKDIsIDB4OTAsIHN0cnVjdCBmbG9wcHlfZHJpdmVfcGFyYW1zKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRkRTRVREUlZQUk0gX0lPVygyLCAweDkwLCBzdHJ1Y3QgZmxvcHB5X2RyaXZlX3BhcmFtcykKICNkZWZpbmUgRkRHRVREUlZQUk0gX0lPUigyLCAweDExLCBzdHJ1Y3QgZmxvcHB5X2RyaXZlX3BhcmFtcykKIHN0cnVjdCBmbG9wcHlfZHJpdmVfc3RydWN0IHsKICB1bnNpZ25lZCBsb25nIGZsYWdzOwotI2RlZmluZSBGRF9ORUVEX1RXQURETEUgKDEgPDwgRkRfTkVFRF9UV0FERExFX0JJVCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZEX05FRURfVFdBRERMRSAoMSA8PCBGRF9ORUVEX1RXQURETEVfQklUKQogI2RlZmluZSBGRF9WRVJJRlkgKDEgPDwgRkRfVkVSSUZZX0JJVCkKICNkZWZpbmUgRkRfRElTS19ORVdDSEFOR0UgKDEgPDwgRkRfRElTS19ORVdDSEFOR0VfQklUKQogI2RlZmluZSBGRF9ESVNLX0NIQU5HRUQgKDEgPDwgRkRfRElTS19DSEFOR0VEX0JJVCkKLSNkZWZpbmUgRkRfRElTS19XUklUQUJMRSAoMSA8PCBGRF9ESVNLX1dSSVRBQkxFX0JJVCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZEX0RJU0tfV1JJVEFCTEUgKDEgPDwgRkRfRElTS19XUklUQUJMRV9CSVQpCiAgdW5zaWduZWQgbG9uZyBzcGludXBfZGF0ZTsKICB1bnNpZ25lZCBsb25nIHNlbGVjdF9kYXRlOwogIHVuc2lnbmVkIGxvbmcgZmlyc3RfcmVhZF9kYXRlOwotIHNob3J0IHByb2JlZF9mb3JtYXQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHNob3J0IHByb2JlZF9mb3JtYXQ7CiAgc2hvcnQgdHJhY2s7CiAgc2hvcnQgbWF4YmxvY2s7CiAgc2hvcnQgbWF4dHJhY2s7Ci0gaW50IGdlbmVyYXRpb247CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGludCBnZW5lcmF0aW9uOwogIGludCBrZWVwX2RhdGE7CiAgaW50IGZkX3JlZjsKICBpbnQgZmRfZGV2aWNlOwotIHVuc2lnbmVkIGxvbmcgbGFzdF9jaGVja2VkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBsb25nIGxhc3RfY2hlY2tlZDsKICBjaGFyICpkbWFidWY7CiAgaW50IGJ1ZmJsb2NrczsKIH07Ci0jZGVmaW5lIEZER0VURFJWU1RBVCBfSU9SKDIsIDB4MTIsIHN0cnVjdCBmbG9wcHlfZHJpdmVfc3RydWN0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRkRHRVREUlZTVEFUIF9JT1IoMiwgMHgxMiwgc3RydWN0IGZsb3BweV9kcml2ZV9zdHJ1Y3QpCiAjZGVmaW5lIEZEUE9MTERSVlNUQVQgX0lPUigyLCAweDEzLCBzdHJ1Y3QgZmxvcHB5X2RyaXZlX3N0cnVjdCkKIGVudW0gcmVzZXRfbW9kZSB7CiAgRkRfUkVTRVRfSUZfTkVFREVELAotIEZEX1JFU0VUX0lGX1JBV0NNRCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgRkRfUkVTRVRfSUZfUkFXQ01ELAogIEZEX1JFU0VUX0FMV0FZUwogfTsKICNkZWZpbmUgRkRSRVNFVCBfSU8oMiwgMHg1NCkKLXN0cnVjdCBmbG9wcHlfZmRjX3N0YXRlIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgZmxvcHB5X2ZkY19zdGF0ZSB7CiAgaW50IHNwZWMxOwogIGludCBzcGVjMjsKICBpbnQgZHRyOwotIHVuc2lnbmVkIGNoYXIgdmVyc2lvbjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgY2hhciB2ZXJzaW9uOwogIHVuc2lnbmVkIGNoYXIgZG9yOwogIHVuc2lnbmVkIGxvbmcgYWRkcmVzczsKICB1bnNpZ25lZCBpbnQgcmF3Y21kOjI7Ci0gdW5zaWduZWQgaW50IHJlc2V0OjE7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCByZXNldDoxOwogIHVuc2lnbmVkIGludCBuZWVkX2NvbmZpZ3VyZToxOwogIHVuc2lnbmVkIGludCBwZXJwX21vZGU6MjsKICB1bnNpZ25lZCBpbnQgaGFzX2ZpZm86MTsKLSB1bnNpZ25lZCBpbnQgZHJpdmVyX3ZlcnNpb247CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCBkcml2ZXJfdmVyc2lvbjsKICNkZWZpbmUgRkRfRFJJVkVSX1ZFUlNJT04gMHgxMDAKICB1bnNpZ25lZCBjaGFyIHRyYWNrWzRdOwogfTsKLSNkZWZpbmUgRkRHRVRGRENTVEFUIF9JT1IoMiwgMHgxNSwgc3RydWN0IGZsb3BweV9mZGNfc3RhdGUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGREdFVEZEQ1NUQVQgX0lPUigyLCAweDE1LCBzdHJ1Y3QgZmxvcHB5X2ZkY19zdGF0ZSkKIHN0cnVjdCBmbG9wcHlfd3JpdGVfZXJyb3JzIHsKICB1bnNpZ25lZCBpbnQgd3JpdGVfZXJyb3JzOwogIHVuc2lnbmVkIGxvbmcgZmlyc3RfZXJyb3Jfc2VjdG9yOwotIGludCBmaXJzdF9lcnJvcl9nZW5lcmF0aW9uOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBpbnQgZmlyc3RfZXJyb3JfZ2VuZXJhdGlvbjsKICB1bnNpZ25lZCBsb25nIGxhc3RfZXJyb3Jfc2VjdG9yOwogIGludCBsYXN0X2Vycm9yX2dlbmVyYXRpb247CiAgdW5zaWduZWQgaW50IGJhZG5lc3M7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIEZEV0VSUk9SQ0xSIF9JTygyLCAweDU2KQogI2RlZmluZSBGRFdFUlJPUkdFVCBfSU9SKDIsIDB4MTcsIHN0cnVjdCBmbG9wcHlfd3JpdGVfZXJyb3JzKQogI2RlZmluZSBGREhBVkVCQVRDSEVEUkFXQ01ECi1zdHJ1Y3QgZmxvcHB5X3Jhd19jbWQgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBmbG9wcHlfcmF3X2NtZCB7CiAgdW5zaWduZWQgaW50IGZsYWdzOwogI2RlZmluZSBGRF9SQVdfUkVBRCAxCiAjZGVmaW5lIEZEX1JBV19XUklURSAyCi0jZGVmaW5lIEZEX1JBV19OT19NT1RPUiA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGRF9SQVdfTk9fTU9UT1IgNAogI2RlZmluZSBGRF9SQVdfRElTS19DSEFOR0UgNAogI2RlZmluZSBGRF9SQVdfSU5UUiA4CiAjZGVmaW5lIEZEX1JBV19TUElOIDB4MTAKLSNkZWZpbmUgRkRfUkFXX05PX01PVE9SX0FGVEVSIDB4MjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZEX1JBV19OT19NT1RPUl9BRlRFUiAweDIwCiAjZGVmaW5lIEZEX1JBV19ORUVEX0RJU0sgMHg0MAogI2RlZmluZSBGRF9SQVdfTkVFRF9TRUVLIDB4ODAKICNkZWZpbmUgRkRfUkFXX01PUkUgMHgxMDAKLSNkZWZpbmUgRkRfUkFXX1NUT1BfSUZfRkFJTFVSRSAweDIwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRkRfUkFXX1NUT1BfSUZfRkFJTFVSRSAweDIwMAogI2RlZmluZSBGRF9SQVdfU1RPUF9JRl9TVUNDRVNTIDB4NDAwCiAjZGVmaW5lIEZEX1JBV19TT0ZURkFJTFVSRSAweDgwMAogI2RlZmluZSBGRF9SQVdfRkFJTFVSRSAweDEwMDAwCi0jZGVmaW5lIEZEX1JBV19IQVJERkFJTFVSRSAweDIwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGRF9SQVdfSEFSREZBSUxVUkUgMHgyMDAwMAogIHZvaWQgX191c2VyICpkYXRhOwogIGNoYXIgKmtlcm5lbF9kYXRhOwogIHN0cnVjdCBmbG9wcHlfcmF3X2NtZCAqbmV4dDsKLSBsb25nIGxlbmd0aDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbG9uZyBsZW5ndGg7CiAgbG9uZyBwaHlzX2xlbmd0aDsKICBpbnQgYnVmZmVyX2xlbmd0aDsKICB1bnNpZ25lZCBjaGFyIHJhdGU7Ci0gdW5zaWduZWQgY2hhciBjbWRfY291bnQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGNoYXIgY21kX2NvdW50OwogIHVuc2lnbmVkIGNoYXIgY21kWzE2XTsKICB1bnNpZ25lZCBjaGFyIHJlcGx5X2NvdW50OwogIHVuc2lnbmVkIGNoYXIgcmVwbHlbMTZdOwotIGludCB0cmFjazsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgaW50IHRyYWNrOwogIGludCByZXN1bHRjb2RlOwogIGludCByZXNlcnZlZDE7CiAgaW50IHJlc2VydmVkMjsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgRkRSQVdDTUQgX0lPKDIsIDB4NTgpCiAjZGVmaW5lIEZEVFdBRERMRSBfSU8oMiwgMHg1OSkKICNkZWZpbmUgRkRFSkVDVCBfSU8oMiwgMHg1YSkKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9maWJfcnVsZXMuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZmliX3J1bGVzLmgKaW5kZXggNTAwNTAxZS4uYWZlNmJjMCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9maWJfcnVsZXMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2ZpYl9ydWxlcy5oCkBAIC02Miw4ICs2Miw4IEBACiAgRlJBX0ZMT1csCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZSQV9VTlVTRUQ2LAotIEZSQV9VTlVTRUQ3LAotIEZSQV9VTlVTRUQ4LAorIEZSQV9TVVBQUkVTU19JRkdST1VQLAorIEZSQV9TVVBQUkVTU19QUkVGSVhMRU4sCiAgRlJBX1RBQkxFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBGUkFfRldNQVNLLApkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9maWVtYXAuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZmllbWFwLmgKaW5kZXggNThlZDk0Ny4uZTRiNDZjMiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9maWVtYXAuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2ZpZW1hcC5oCkBAIC00NCwyMCArNDQsMjEgQEAKICNkZWZpbmUgRklFTUFQX01BWF9PRkZTRVQgKH4wVUxMKQogI2RlZmluZSBGSUVNQVBfRkxBR19TWU5DIDB4MDAwMDAwMDEKICNkZWZpbmUgRklFTUFQX0ZMQUdfWEFUVFIgMHgwMDAwMDAwMgotI2RlZmluZSBGSUVNQVBfRkxBR1NfQ09NUEFUIChGSUVNQVBfRkxBR19TWU5DIHwgRklFTUFQX0ZMQUdfWEFUVFIpCisjZGVmaW5lIEZJRU1BUF9GTEFHX0NBQ0hFIDB4MDAwMDAwMDQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZJRU1BUF9GTEFHU19DT01QQVQgKEZJRU1BUF9GTEFHX1NZTkMgfCBGSUVNQVBfRkxBR19YQVRUUikKICNkZWZpbmUgRklFTUFQX0VYVEVOVF9MQVNUIDB4MDAwMDAwMDEKICNkZWZpbmUgRklFTUFQX0VYVEVOVF9VTktOT1dOIDB4MDAwMDAwMDIKICNkZWZpbmUgRklFTUFQX0VYVEVOVF9ERUxBTExPQyAweDAwMDAwMDA0Ci0jZGVmaW5lIEZJRU1BUF9FWFRFTlRfRU5DT0RFRCAweDAwMDAwMDA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGSUVNQVBfRVhURU5UX0VOQ09ERUQgMHgwMDAwMDAwOAogI2RlZmluZSBGSUVNQVBfRVhURU5UX0RBVEFfRU5DUllQVEVEIDB4MDAwMDAwODAKICNkZWZpbmUgRklFTUFQX0VYVEVOVF9OT1RfQUxJR05FRCAweDAwMDAwMTAwCiAjZGVmaW5lIEZJRU1BUF9FWFRFTlRfREFUQV9JTkxJTkUgMHgwMDAwMDIwMAotI2RlZmluZSBGSUVNQVBfRVhURU5UX0RBVEFfVEFJTCAweDAwMDAwNDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGSUVNQVBfRVhURU5UX0RBVEFfVEFJTCAweDAwMDAwNDAwCiAjZGVmaW5lIEZJRU1BUF9FWFRFTlRfVU5XUklUVEVOIDB4MDAwMDA4MDAKICNkZWZpbmUgRklFTUFQX0VYVEVOVF9NRVJHRUQgMHgwMDAwMTAwMAogI2RlZmluZSBGSUVNQVBfRVhURU5UX1NIQVJFRCAweDAwMDAyMDAwCi0jZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZnMuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZnMuaAppbmRleCBjYzA1MjM4Li5kNmZjNzMwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2ZzLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9mcy5oCkBAIC00OSwxMCArNDksMTAgQEAKICB1bnNpZ25lZCBsb25nIG1heF9maWxlczsKIH07CiBzdHJ1Y3QgaW5vZGVzX3N0YXRfdCB7Ci0gaW50IG5yX2lub2RlczsKKyBsb25nIG5yX2lub2RlczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gaW50IG5yX3VudXNlZDsKLSBpbnQgZHVtbXlbNV07CisgbG9uZyBucl91bnVzZWQ7CisgbG9uZyBkdW1teVs1XTsKIH07CiAjZGVmaW5lIE5SX0ZJTEUgODE5MgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZ2VuX3N0YXRzLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2dlbl9zdGF0cy5oCmluZGV4IDA3MTE4YmYuLmUxY2E3M2YgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZ2VuX3N0YXRzLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9nZW5fc3RhdHMuaApAQCAtMjcsMzcgKzI3LDQzIEBACiAgVENBX1NUQVRTX1FVRVVFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfU1RBVFNfQVBQLAorIFRDQV9TVEFUU19SQVRFX0VTVDY0LAogIF9fVENBX1NUQVRTX01BWCwKIH07Ci0jZGVmaW5lIFRDQV9TVEFUU19NQVggKF9fVENBX1NUQVRTX01BWCAtIDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQ0FfU1RBVFNfTUFYIChfX1RDQV9TVEFUU19NQVggLSAxKQogc3RydWN0IGduZXRfc3RhdHNfYmFzaWMgewogIF9fdTY0IGJ5dGVzOwogIF9fdTMyIHBhY2tldHM7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpY19wYWNrZWQgewogIF9fdTY0IGJ5dGVzOwogIF9fdTMyIHBhY2tldHM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIHN0cnVjdCBnbmV0X3N0YXRzX3JhdGVfZXN0IHsKICBfX3UzMiBicHM7CiAgX191MzIgcHBzOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Oworc3RydWN0IGduZXRfc3RhdHNfcmF0ZV9lc3Q2NCB7CisgX191NjQgYnBzOworIF9fdTY0IHBwczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IGduZXRfc3RhdHNfcXVldWUgewogIF9fdTMyIHFsZW47CiAgX191MzIgYmFja2xvZzsKLSBfX3UzMiBkcm9wczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZHJvcHM7CiAgX191MzIgcmVxdWV1ZXM7CiAgX191MzIgb3ZlcmxpbWl0czsKIH07Ci1zdHJ1Y3QgZ25ldF9lc3RpbWF0b3IgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBnbmV0X2VzdGltYXRvciB7CiAgc2lnbmVkIGNoYXIgaW50ZXJ2YWw7CiAgdW5zaWduZWQgY2hhciBld21hX2xvZzsKIH07Ci0jZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZ2VuZXRsaW5rLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2dlbmV0bGluay5oCmluZGV4IGM1NDkwZjguLmMwNjllZmQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZ2VuZXRsaW5rLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9nZW5ldGxpbmsuaApAQCAtMzksNTUgKzM5LDU3IEBACiAjZGVmaW5lIEdFTkxfQ01EX0NBUF9IQVNQT0wgMHgwOAogI2RlZmluZSBHRU5MX0lEX0dFTkVSQVRFIDAKICNkZWZpbmUgR0VOTF9JRF9DVFJMIE5MTVNHX01JTl9UWVBFCi1lbnVtIHsKKyNkZWZpbmUgR0VOTF9JRF9WRlNfRFFVT1QgKE5MTVNHX01JTl9UWVBFICsgMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEdFTkxfSURfUE1DUkFJRCAoTkxNU0dfTUlOX1RZUEUgKyAyKQorZW51bSB7CiAgQ1RSTF9DTURfVU5TUEVDLAogIENUUkxfQ01EX05FV0ZBTUlMWSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RSTF9DTURfREVMRkFNSUxZLAogIENUUkxfQ01EX0dFVEZBTUlMWSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RSTF9DTURfTkVXT1BTLAogIENUUkxfQ01EX0RFTE9QUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RSTF9DTURfR0VUT1BTLAogIENUUkxfQ01EX05FV01DQVNUX0dSUCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RSTF9DTURfREVMTUNBU1RfR1JQLAogIENUUkxfQ01EX0dFVE1DQVNUX0dSUCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19DVFJMX0NNRF9NQVgsCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RSTF9DTURfTUFYIChfX0NUUkxfQ01EX01BWCAtIDEpCiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RSTF9BVFRSX1VOU1BFQywKICBDVFJMX0FUVFJfRkFNSUxZX0lELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVFJMX0FUVFJfRkFNSUxZX05BTUUsCiAgQ1RSTF9BVFRSX1ZFUlNJT04sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUUkxfQVRUUl9IRFJTSVpFLAogIENUUkxfQVRUUl9NQVhBVFRSLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVFJMX0FUVFJfT1BTLAogIENUUkxfQVRUUl9NQ0FTVF9HUk9VUFMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQ1RSTF9BVFRSX01BWCwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVFJMX0FUVFJfTUFYIChfX0NUUkxfQVRUUl9NQVggLSAxKQogZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUUkxfQVRUUl9PUF9VTlNQRUMsCiAgQ1RSTF9BVFRSX09QX0lELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVFJMX0FUVFJfT1BfRkxBR1MsCiAgX19DVFJMX0FUVFJfT1BfTUFYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIENUUkxfQVRUUl9PUF9NQVggKF9fQ1RSTF9BVFRSX09QX01BWCAtIDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgQ1RSTF9BVFRSX01DQVNUX0dSUF9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUUkxfQVRUUl9NQ0FTVF9HUlBfTkFNRSwKICBDVFJMX0FUVFJfTUNBU1RfR1JQX0lELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0NUUkxfQVRUUl9NQ0FTVF9HUlBfTUFYLAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENUUkxfQVRUUl9NQ0FTVF9HUlBfTUFYIChfX0NUUkxfQVRUUl9NQ0FTVF9HUlBfTUFYIC0gMSkKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZ2Vud3FlL2dlbndxZV9jYXJkLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2dlbndxZS9nZW53cWVfY2FyZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MzFjZmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2dlbndxZS9nZW53cWVfY2FyZC5oCkBAIC0wLDAgKzEsMzMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fR0VOV1FFX0NBUkRfSF9fCisjZGVmaW5lIF9fR0VOV1FFX0NBUkRfSF9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgR0VOV1FFX0RFVk5BTUUgImdlbndxZSIKKyNkZWZpbmUgR0VOV1FFX1RZUEVfQUxURVJBXzIzMCAweDAwCisjZGVmaW5lIEdFTldRRV9UWVBFX0FMVEVSQV81MzAgMHgwMQorI2RlZmluZSBHRU5XUUVfVFlQRV9BTFRFUkFfQTQgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgR0VOV1FFX1RZUEVfQUxURVJBX0E3IDB4MDMKKyNkZWZpbmUgR0VOV1FFX1VJRF9PRkZTKHVpZCkgKCh1aWQpIDw8IDI0KQorI2RlZmluZSBHRU5XUUVfU0xVX09GRlMgR0VOV1FFX1VJRF9PRkZTKDApCisjZGVmaW5lIEdFTldRRV9IU1VfT0ZGUyBHRU5XUUVfVUlEX09GRlMoMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEdFTldRRV9BUFBfT0ZGUyBHRU5XUUVfVUlEX09GRlMoMikKKyNkZWZpbmUgR0VOV1FFX01BWF9VTklUUyAzCisjZGVmaW5lIElPX0VYVEVOREVEX0VSUk9SX1BPSU5URVIgMHgwMDAwMDA0OAorI2RlZmluZSBJT19FUlJPUl9JTkpFQ1RfU0VMRUNUT1IgMHgwMDAwMDA2MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fRVhURU5ERURfRElBR19TRUxFQ1RPUiAweDAwMDAwMDcwCisjZGVmaW5lIElPX0VYVEVOREVEX0RJQUdfUkVBRF9NQlggMHgwMDAwMDA3OAorI2RlZmluZSBJT19FWFRFTkRFRF9ESUFHX01BUChyaW5nKSAoMHgwMDAwMDUwMCB8ICgocmluZykgPDwgMykpCisjZGVmaW5lIEdFTldRRV9FWFRFTkRFRF9ESUFHX1NFTEVDVE9SKHJpbmcsIHRyYWNlKSAoKChyaW5nKSA8PCA4KSB8ICh0cmFjZSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19TTFVfVU5JVENGRyAweDAwMDAwMDAwCisjZGVmaW5lIElPX1NMVV9VTklUQ0ZHX1RZUEVfTUFTSyAweDAwMDAwMDAwMGZmMDAwMDAKKyNkZWZpbmUgSU9fU0xVX0ZJUiAweDAwMDAwMDA4CisjZGVmaW5lIElPX1NMVV9GSVJfQ0xSIDB4MDAwMDAwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX1NMVV9GRUMgMHgwMDAwMDAxOAorI2RlZmluZSBJT19TTFVfRVJSX0FDVF9NQVNLIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU9fU0xVX0VSUl9BVFROX01BU0sgMHgwMDAwMDAyOAorI2RlZmluZSBJT19TTFVfRklSWDFfQUNUX01BU0sgMHgwMDAwMDAzMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fU0xVX0ZJUlgwX0FDVF9NQVNLIDB4MDAwMDAwMzgKKyNkZWZpbmUgSU9fU0xVX1NFQ19MRU1fREVCVUdfT1ZSIDB4MDAwMDAwNDAKKyNkZWZpbmUgSU9fU0xVX0VYVEVOREVEX0VSUl9QVFIgMHgwMDAwMDA0OAorI2RlZmluZSBJT19TTFVfQ09NTU9OX0NPTkZJRyAweDAwMDAwMDYwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19TTFVfRkxBU0hfRklSIDB4MDAwMDAxMDgKKyNkZWZpbmUgSU9fU0xVX1NMQ19GSVIgMHgwMDAwMDExMAorI2RlZmluZSBJT19TTFVfUklVX1RSQVAgMHgwMDAwMDI4MAorI2RlZmluZSBJT19TTFVfRkxBU0hfRkVDIDB4MDAwMDAzMDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX1NMVV9TTENfRkVDIDB4MDAwMDAzMTAKKyNkZWZpbmUgSU9fU0xDX1FVRVVFX1NFR01FTlQgMHgwMDAxMDAwMAorI2RlZmluZSBJT19TTENfVkZfUVVFVUVfU0VHTUVOVCAweDAwMDUwMDAwCisjZGVmaW5lIElPX1NMQ19RVUVVRV9PRkZTRVQgMHgwMDAxMDAwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fU0xDX1ZGX1FVRVVFX09GRlNFVCAweDAwMDUwMDA4CisjZGVmaW5lIElPX1NMQ19RVUVVRV9DT05GSUcgMHgwMDAxMDAxMAorI2RlZmluZSBJT19TTENfVkZfUVVFVUVfQ09ORklHIDB4MDAwNTAwMTAKKyNkZWZpbmUgSU9fU0xDX0FQUEpPQl9USU1FT1VUIDB4MDAwMTAwMTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX1NMQ19WRl9BUFBKT0JfVElNRU9VVCAweDAwMDUwMDE4CisjZGVmaW5lIFRJTUVPVVRfMjUwTVMgMHgwMDAwMDAwZgorI2RlZmluZSBIRUFSVEJFQVRfRElTQUJMRSAweDAwMDBmZjAwCisjZGVmaW5lIElPX1NMQ19RVUVVRV9JTklUU1FOIDB4MDAwMTAwMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX1NMQ19WRl9RVUVVRV9JTklUU1FOIDB4MDAwNTAwMjAKKyNkZWZpbmUgSU9fU0xDX1FVRVVFX1dSQVAgMHgwMDAxMDAyOAorI2RlZmluZSBJT19TTENfVkZfUVVFVUVfV1JBUCAweDAwMDUwMDI4CisjZGVmaW5lIElPX1NMQ19RVUVVRV9TVEFUVVMgMHgwMDAxMDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fU0xDX1ZGX1FVRVVFX1NUQVRVUyAweDAwMDUwMTAwCisjZGVmaW5lIElPX1NMQ19RVUVVRV9XVElNRSAweDAwMDEwMDMwCisjZGVmaW5lIElPX1NMQ19WRl9RVUVVRV9XVElNRSAweDAwMDUwMDMwCisjZGVmaW5lIElPX1NMQ19RVUVVRV9FUlJDTlRTIDB4MDAwMTAwMzgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX1NMQ19WRl9RVUVVRV9FUlJDTlRTIDB4MDAwNTAwMzgKKyNkZWZpbmUgSU9fU0xDX1FVRVVFX0xSVyAweDAwMDEwMDQwCisjZGVmaW5lIElPX1NMQ19WRl9RVUVVRV9MUlcgMHgwMDA1MDA0MAorI2RlZmluZSBJT19TTENfRlJFRV9SVU5OSU5HX1RJTUVSIDB4MDAwMTAxMDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX1NMQ19WRl9GUkVFX1JVTk5JTkdfVElNRVIgMHgwMDA1MDEwOAorI2RlZmluZSBJT19QRl9TTENfVklSVFVBTF9SRUdJT04gMHgwMDA1MDAwMAorI2RlZmluZSBJT19QRl9TTENfVklSVFVBTF9XSU5ET1cgMHgwMDA2MDAwMAorI2RlZmluZSBJT19QRl9TTENfSk9CUEVORChuKSAoMHgwMDA2MTAwMCArIDgqKG4pKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fU0xDX0pPQlBFTkQobikgSU9fUEZfU0xDX0pPQlBFTkQobikKKyNkZWZpbmUgSU9fU0xVX1NMQ19QQVJTRV9UUkFQKG4pICgweDAwMDExMDAwICsgOCoobikpCisjZGVmaW5lIElPX1NMVV9TTENfRElTUF9UUkFQKG4pICgweDAwMDExMjAwICsgOCoobikpCisjZGVmaW5lIElPX1NMQ19DRkdSRUdfR0ZJUiAweDAwMDIwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBHRklSX0VSUl9UUklHR0VSIDB4MDAwMGZmZmYKKyNkZWZpbmUgSU9fU0xDX0NGR1JFR19TT0ZUUkVTRVQgMHgwMDAyMDAxOAorI2RlZmluZSBJT19TTENfTUlTQ19ERUJVRyAweDAwMDIwMDYwCisjZGVmaW5lIElPX1NMQ19NSVNDX0RFQlVHX0NMUiAweDAwMDIwMDY4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19TTENfTUlTQ19ERUJVR19TRVQgMHgwMDAyMDA3MAorI2RlZmluZSBJT19TTFVfVEVNUEVSQVRVUkVfU0VOU09SIDB4MDAwMzAwMDAKKyNkZWZpbmUgSU9fU0xVX1RFTVBFUkFUVVJFX0NPTkZJRyAweDAwMDMwMDA4CisjZGVmaW5lIElPX1NMVV9WT0xUQUdFX0NPTlRST0wgMHgwMDAzMDA4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fU0xVX1ZPTFRBR0VfTk9NSU5BTCAweDAwMDAwMDAwCisjZGVmaW5lIElPX1NMVV9WT0xUQUdFX0RPV041IDB4MDAwMDAwMDYKKyNkZWZpbmUgSU9fU0xVX1ZPTFRBR0VfVVA1IDB4MDAwMDAwMDcKKyNkZWZpbmUgSU9fU0xVX0xFRENPTlRST0wgMHgwMDAzMDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fU0xVX0ZMQVNIX0RJUkVDVEFDQ0VTUyAweDAwMDQwMDEwCisjZGVmaW5lIElPX1NMVV9GTEFTSF9ESVJFQ1RBQ0NFU1MyIDB4MDAwNDAwMjAKKyNkZWZpbmUgSU9fU0xVX0ZMQVNIX0NNRElOVEYgMHgwMDA0MDAzMAorI2RlZmluZSBJT19TTFVfQklUU1RSRUFNIDB4MDAwNDAwNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX0hTVV9FUlJfQkVIQVZJT1IgMHgwMTAwMTAxMAorI2RlZmluZSBJT19TTEMyX1NRQl9UUkFQIDB4MDAwNjIwMDAKKyNkZWZpbmUgSU9fU0xDMl9RVUVVRV9NQU5BR0VSX1RSQVAgMHgwMDA2MjAwOAorI2RlZmluZSBJT19TTEMyX0ZMU19NQVNURVJfVFJBUCAweDAwMDYyMDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19IU1VfVU5JVENGRyAweDAxMDAwMDAwCisjZGVmaW5lIElPX0hTVV9GSVIgMHgwMTAwMDAwOAorI2RlZmluZSBJT19IU1VfRklSX0NMUiAweDAxMDAwMDEwCisjZGVmaW5lIElPX0hTVV9GRUMgMHgwMTAwMDAxOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fSFNVX0VSUl9BQ1RfTUFTSyAweDAxMDAwMDIwCisjZGVmaW5lIElPX0hTVV9FUlJfQVRUTl9NQVNLIDB4MDEwMDAwMjgKKyNkZWZpbmUgSU9fSFNVX0ZJUlgxX0FDVF9NQVNLIDB4MDEwMDAwMzAKKyNkZWZpbmUgSU9fSFNVX0ZJUlgwX0FDVF9NQVNLIDB4MDEwMDAwMzgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX0hTVV9TRUNfTEVNX0RFQlVHX09WUiAweDAxMDAwMDQwCisjZGVmaW5lIElPX0hTVV9FWFRFTkRFRF9FUlJfUFRSIDB4MDEwMDAwNDgKKyNkZWZpbmUgSU9fSFNVX0NPTU1PTl9DT05GSUcgMHgwMTAwMDA2MAorI2RlZmluZSBJT19BUFBfVU5JVENGRyAweDAyMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19BUFBfRklSIDB4MDIwMDAwMDgKKyNkZWZpbmUgSU9fQVBQX0ZJUl9DTFIgMHgwMjAwMDAxMAorI2RlZmluZSBJT19BUFBfRkVDIDB4MDIwMDAwMTgKKyNkZWZpbmUgSU9fQVBQX0VSUl9BQ1RfTUFTSyAweDAyMDAwMDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19BUFBfRVJSX0FUVE5fTUFTSyAweDAyMDAwMDI4CisjZGVmaW5lIElPX0FQUF9GSVJYMV9BQ1RfTUFTSyAweDAyMDAwMDMwCisjZGVmaW5lIElPX0FQUF9GSVJYMF9BQ1RfTUFTSyAweDAyMDAwMDM4CisjZGVmaW5lIElPX0FQUF9TRUNfTEVNX0RFQlVHX09WUiAweDAyMDAwMDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19BUFBfRVhURU5ERURfRVJSX1BUUiAweDAyMDAwMDQ4CisjZGVmaW5lIElPX0FQUF9DT01NT05fQ09ORklHIDB4MDIwMDAwNjAKKyNkZWZpbmUgSU9fQVBQX0RFQlVHX1JFR18wMSAweDAyMDEwMDAwCisjZGVmaW5lIElPX0FQUF9ERUJVR19SRUdfMDIgMHgwMjAxMDAwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fQVBQX0RFQlVHX1JFR18wMyAweDAyMDEwMDEwCisjZGVmaW5lIElPX0FQUF9ERUJVR19SRUdfMDQgMHgwMjAxMDAxOAorI2RlZmluZSBJT19BUFBfREVCVUdfUkVHXzA1IDB4MDIwMTAwMjAKKyNkZWZpbmUgSU9fQVBQX0RFQlVHX1JFR18wNiAweDAyMDEwMDI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19BUFBfREVCVUdfUkVHXzA3IDB4MDIwMTAwMzAKKyNkZWZpbmUgSU9fQVBQX0RFQlVHX1JFR18wOCAweDAyMDEwMDM4CisjZGVmaW5lIElPX0FQUF9ERUJVR19SRUdfMDkgMHgwMjAxMDA0MAorI2RlZmluZSBJT19BUFBfREVCVUdfUkVHXzEwIDB4MDIwMTAwNDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX0FQUF9ERUJVR19SRUdfMTEgMHgwMjAxMDA1MAorI2RlZmluZSBJT19BUFBfREVCVUdfUkVHXzEyIDB4MDIwMTAwNTgKKyNkZWZpbmUgSU9fQVBQX0RFQlVHX1JFR18xMyAweDAyMDEwMDYwCisjZGVmaW5lIElPX0FQUF9ERUJVR19SRUdfMTQgMHgwMjAxMDA2OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fQVBQX0RFQlVHX1JFR18xNSAweDAyMDEwMDcwCisjZGVmaW5lIElPX0FQUF9ERUJVR19SRUdfMTYgMHgwMjAxMDA3OAorI2RlZmluZSBJT19BUFBfREVCVUdfUkVHXzE3IDB4MDIwMTAwODAKKyNkZWZpbmUgSU9fQVBQX0RFQlVHX1JFR18xOCAweDAyMDEwMDg4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGdlbndxZV9yZWdfaW8geworIF9fdTY0IG51bTsKKyBfX3U2NCB2YWw2NDsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19JTExFR0FMX1ZBTFVFIDB4ZmZmZmZmZmZmZmZmZmZmZnVsbAorI2RlZmluZSBERENCX0FDRlVOQ19TTFUgMHgwMAorI2RlZmluZSBERENCX0FDRlVOQ19BUFAgMHgwMQorI2RlZmluZSBERENCX1JFVENfSURMRSAweDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEREQ0JfUkVUQ19QRU5ESU5HIDB4MDEwMQorI2RlZmluZSBERENCX1JFVENfQ09NUExFVEUgMHgwMTAyCisjZGVmaW5lIEREQ0JfUkVUQ19GQVVMVCAweDAxMDQKKyNkZWZpbmUgRERDQl9SRVRDX0VSUk9SIDB4MDEwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRERDQl9SRVRDX0ZPUkNFRF9FUlJPUiAweDAxZmYKKyNkZWZpbmUgRERDQl9SRVRDX1VORVhFQyAweDAxMTAKKyNkZWZpbmUgRERDQl9SRVRDX1RFUk0gMHgwMTIwCisjZGVmaW5lIEREQ0JfUkVUQ19SRVMwIDB4MDE0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRERDQl9SRVRDX1JFUzEgMHgwMTgwCisjZGVmaW5lIEREQ0JfT1BUX0VDSE9fRk9SQ0VfTk8gMHgwMDAwCisjZGVmaW5lIEREQ0JfT1BUX0VDSE9fRk9SQ0VfMTAyIDB4MDAwMQorI2RlZmluZSBERENCX09QVF9FQ0hPX0ZPUkNFXzEwNCAweDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEREQ0JfT1BUX0VDSE9fRk9SQ0VfMTA4IDB4MDAwMworI2RlZmluZSBERENCX09QVF9FQ0hPX0ZPUkNFXzExMCAweDAwMDQKKyNkZWZpbmUgRERDQl9PUFRfRUNIT19GT1JDRV8xMjAgMHgwMDA1CisjZGVmaW5lIEREQ0JfT1BUX0VDSE9fRk9SQ0VfMTQwIDB4MDAwNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRERDQl9PUFRfRUNIT19GT1JDRV8xODAgMHgwMDA3CisjZGVmaW5lIEREQ0JfT1BUX0VDSE9fQ09QWV9OT05FICgwIDw8IDUpCisjZGVmaW5lIEREQ0JfT1BUX0VDSE9fQ09QWV9BTEwgKDEgPDwgNSkKKyNkZWZpbmUgU0xDTURfRUNIT19TWU5DIDB4MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNMQ01EX01PVkVfRkxBU0ggMHgwNgorI2RlZmluZSBTTENNRF9NT1ZFX0ZMQVNIX0ZMQUdTX01PREUgMHgwMworI2RlZmluZSBTTENNRF9NT1ZFX0ZMQVNIX0ZMQUdTX0RMT0FEIDAKKyNkZWZpbmUgU0xDTURfTU9WRV9GTEFTSF9GTEFHU19FTVVMIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNMQ01EX01PVkVfRkxBU0hfRkxBR1NfVVBMT0FEIDIKKyNkZWZpbmUgU0xDTURfTU9WRV9GTEFTSF9GTEFHU19WRVJJRlkgMworI2RlZmluZSBTTENNRF9NT1ZFX0ZMQVNIX0ZMQUdfTk9UQVAgKDEgPDwgMikKKyNkZWZpbmUgU0xDTURfTU9WRV9GTEFTSF9GTEFHX1BPTEwgKDEgPDwgMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNMQ01EX01PVkVfRkxBU0hfRkxBR19QQVJUSVRJT04gKDEgPDwgNCkKKyNkZWZpbmUgU0xDTURfTU9WRV9GTEFTSF9GTEFHX0VSQVNFICgxIDw8IDUpCitlbnVtIGdlbndxZV9jYXJkX3N0YXRlIHsKKyBHRU5XUUVfQ0FSRF9VTlVTRUQgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBHRU5XUUVfQ0FSRF9VU0VEID0gMSwKKyBHRU5XUUVfQ0FSRF9GQVRBTF9FUlJPUiA9IDIsCisgR0VOV1FFX0NBUkRfU1RBVEVfTUFYLAorfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgZ2Vud3FlX2JpdHN0cmVhbSB7CisgX191NjQgZGF0YV9hZGRyOworIF9fdTMyIHNpemU7CisgX191MzIgY3JjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCB0YXJnZXRfYWRkcjsKKyBfX3UzMiBwYXJ0aXRpb247CisgX191MzIgdWlkOworIF9fdTY0IHNsdV9pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgYXBwX2lkOworIF9fdTE2IHJldGM7CisgX191MTYgYXR0bjsKKyBfX3UzMiBwcm9ncmVzczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBERENCX0xFTkdUSCAyNTYKKyNkZWZpbmUgRERDQl9BU0lWX0xFTkdUSCAxMDQKKyNkZWZpbmUgRERDQl9BU0lWX0xFTkdUSF9BVFMgOTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEREQ0JfQVNWX0xFTkdUSCA2NAorI2RlZmluZSBERENCX0ZJWFVQUyAxMgorc3RydWN0IGdlbndxZV9kZWJ1Z19kYXRhIHsKKyBjaGFyIGRyaXZlcl92ZXJzaW9uWzY0XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgc2x1X3VuaXRjZmc7CisgX191NjQgYXBwX3VuaXRjZmc7CisgX191OCBkZGNiX2JlZm9yZVtERENCX0xFTkdUSF07CisgX191OCBkZGNiX3ByZXZbRERDQl9MRU5HVEhdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGRkY2JfZmluaXNoZWRbRERDQl9MRU5HVEhdOworfTsKKyNkZWZpbmUgQVRTX1RZUEVfREFUQSAweDB1bGwKKyNkZWZpbmUgQVRTX1RZUEVfRkxBVF9SRCAweDR1bGwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFUU19UWVBFX0ZMQVRfUkRXUiAweDV1bGwKKyNkZWZpbmUgQVRTX1RZUEVfU0dMX1JEIDB4NnVsbAorI2RlZmluZSBBVFNfVFlQRV9TR0xfUkRXUiAweDd1bGwKKyNkZWZpbmUgQVRTX1NFVF9GTEFHUyhfc3RydWN0LCBfZmllbGQsIF9mbGFncykgICAoKChfZmxhZ3MpICYgMHhmKSA8PCAoNDQgLSAoNCAqIChvZmZzZXRvZihfc3RydWN0LCBfZmllbGQpIC8gOCkpKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFUU19HRVRfRkxBR1MoX2F0cywgX2J5dGVfb2ZmcykgICAoKChfYXRzKSA+PiAoNDQgLSAoNCAqICgoX2J5dGVfb2ZmcykgLyA4KSkpKSAmIDB4ZikKK3N0cnVjdCBnZW53cWVfZGRjYl9jbWQgeworIF9fdTY0IG5leHRfYWRkcjsKKyBfX3U2NCBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBhY2Z1bmM7CisgX191OCBjbWQ7CisgX191OCBhc2l2X2xlbmd0aDsKKyBfX3U4IGFzdl9sZW5ndGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IGNtZG9wdHM7CisgX191MTYgcmV0YzsKKyBfX3UxNiBhdHRuOworIF9fdTE2IHZjcmM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHByb2dyZXNzOworIF9fdTY0IGRlcXVlX3RzOworIF9fdTY0IGNtcGx0X3RzOworIF9fdTY0IGRpc3BfdHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IGRkYXRhX2FkZHI7CisgX191OCBhc3ZbRERDQl9BU1ZfTEVOR1RIXTsKKyB1bmlvbiB7Cisgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgYXRzOworIF9fdTggYXNpdltERENCX0FTSVZfTEVOR1RIX0FUU107CisgfTsKKyBfX3U4IF9fYXNpdltERENCX0FTSVZfTEVOR1RIXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfTsKK307CisjZGVmaW5lIEdFTldRRV9JT0NfQ09ERSAweGE1CisjZGVmaW5lIEdFTldRRV9SRUFEX1JFRzY0IF9JT1IoR0VOV1FFX0lPQ19DT0RFLCAzMCwgc3RydWN0IGdlbndxZV9yZWdfaW8pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBHRU5XUUVfV1JJVEVfUkVHNjQgX0lPVyhHRU5XUUVfSU9DX0NPREUsIDMxLCBzdHJ1Y3QgZ2Vud3FlX3JlZ19pbykKKyNkZWZpbmUgR0VOV1FFX1JFQURfUkVHMzIgX0lPUihHRU5XUUVfSU9DX0NPREUsIDMyLCBzdHJ1Y3QgZ2Vud3FlX3JlZ19pbykKKyNkZWZpbmUgR0VOV1FFX1dSSVRFX1JFRzMyIF9JT1coR0VOV1FFX0lPQ19DT0RFLCAzMywgc3RydWN0IGdlbndxZV9yZWdfaW8pCisjZGVmaW5lIEdFTldRRV9SRUFEX1JFRzE2IF9JT1IoR0VOV1FFX0lPQ19DT0RFLCAzNCwgc3RydWN0IGdlbndxZV9yZWdfaW8pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBHRU5XUUVfV1JJVEVfUkVHMTYgX0lPVyhHRU5XUUVfSU9DX0NPREUsIDM1LCBzdHJ1Y3QgZ2Vud3FlX3JlZ19pbykKKyNkZWZpbmUgR0VOV1FFX0dFVF9DQVJEX1NUQVRFIF9JT1IoR0VOV1FFX0lPQ19DT0RFLCAzNiwgZW51bSBnZW53cWVfY2FyZF9zdGF0ZSkKK3N0cnVjdCBnZW53cWVfbWVtIHsKKyBfX3U2NCBhZGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBzaXplOworIF9fdTY0IGRpcmVjdGlvbjsKKyBfX3U2NCBmbGFnczsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBHRU5XUUVfUElOX01FTSBfSU9XUihHRU5XUUVfSU9DX0NPREUsIDQwLCBzdHJ1Y3QgZ2Vud3FlX21lbSkKKyNkZWZpbmUgR0VOV1FFX1VOUElOX01FTSBfSU9XUihHRU5XUUVfSU9DX0NPREUsIDQxLCBzdHJ1Y3QgZ2Vud3FlX21lbSkKKyNkZWZpbmUgR0VOV1FFX0VYRUNVVEVfRERDQiAgIF9JT1dSKEdFTldRRV9JT0NfQ09ERSwgNTAsIHN0cnVjdCBnZW53cWVfZGRjYl9jbWQpCisjZGVmaW5lIEdFTldRRV9FWEVDVVRFX1JBV19ERENCICAgX0lPV1IoR0VOV1FFX0lPQ19DT0RFLCA1MSwgc3RydWN0IGdlbndxZV9kZGNiX2NtZCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEdFTldRRV9TTFVfVVBEQVRFIF9JT1dSKEdFTldRRV9JT0NfQ09ERSwgODAsIHN0cnVjdCBnZW53cWVfYml0c3RyZWFtKQorI2RlZmluZSBHRU5XUUVfU0xVX1JFQUQgX0lPV1IoR0VOV1FFX0lPQ19DT0RFLCA4MSwgc3RydWN0IGdlbndxZV9iaXRzdHJlYW0pCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZ2ZzMl9vbmRpc2suaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZ2ZzMl9vbmRpc2suaAppbmRleCAyZTgwNDcyLi5hMzEwNmJhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2dmczJfb25kaXNrLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9nZnMyX29uZGlzay5oCkBAIC0yNzQsODMgKzI3NCw5NSBAQAogIF9fYmUxNiBsZl9lbnRyaWVzOwogIF9fYmUzMiBsZl9kaXJlbnRfZm9ybWF0OwogIF9fYmU2NCBsZl9uZXh0OwotIF9fdTggbGZfcmVzZXJ2ZWRbNjRdOworIHVuaW9uIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBsZl9yZXNlcnZlZFs2NF07Cisgc3RydWN0IHsKKyBfX2JlNjQgbGZfaW5vZGU7CisgX19iZTMyIGxmX2Rpc3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmUzMiBsZl9uc2VjOworIF9fYmU2NCBsZl9zZWM7CisgX191OCBsZl9yZXNlcnZlZDJbNDBdOworIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIH07CiB9OwogI2RlZmluZSBHRlMyX0VBX01BWF9OQU1FX0xFTiAyNTUKICNkZWZpbmUgR0ZTMl9FQV9NQVhfREFUQV9MRU4gNjU1MzYKLSNkZWZpbmUgR0ZTMl9FQVRZUEVfVU5VU0VEIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEdGUzJfRUFUWVBFX1VOVVNFRCAwCiAjZGVmaW5lIEdGUzJfRUFUWVBFX1VTUiAxCiAjZGVmaW5lIEdGUzJfRUFUWVBFX1NZUyAyCiAjZGVmaW5lIEdGUzJfRUFUWVBFX1NFQ1VSSVRZIDMKLSNkZWZpbmUgR0ZTMl9FQVRZUEVfTEFTVCAzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBHRlMyX0VBVFlQRV9MQVNUIDMKICNkZWZpbmUgR0ZTMl9FQVRZUEVfVkFMSUQoeCkgKCh4KSA8PSBHRlMyX0VBVFlQRV9MQVNUKQogI2RlZmluZSBHRlMyX0VBRkxBR19MQVNUIDB4MDEKIHN0cnVjdCBnZnMyX2VhX2hlYWRlciB7Ci0gX19iZTMyIGVhX3JlY19sZW47CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmUzMiBlYV9yZWNfbGVuOwogIF9fYmUzMiBlYV9kYXRhX2xlbjsKICBfX3U4IGVhX25hbWVfbGVuOwogIF9fdTggZWFfdHlwZTsKLSBfX3U4IGVhX2ZsYWdzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGVhX2ZsYWdzOwogIF9fdTggZWFfbnVtX3B0cnM7CiAgX191MzIgX19wYWQ7CiB9OwotI2RlZmluZSBHRlMyX0xPR19IRUFEX1VOTU9VTlQgMHgwMDAwMDAwMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgR0ZTMl9MT0dfSEVBRF9VTk1PVU5UIDB4MDAwMDAwMDEKIHN0cnVjdCBnZnMyX2xvZ19oZWFkZXIgewogIHN0cnVjdCBnZnMyX21ldGFfaGVhZGVyIGxoX2hlYWRlcjsKICBfX2JlNjQgbGhfc2VxdWVuY2U7Ci0gX19iZTMyIGxoX2ZsYWdzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMzIgbGhfZmxhZ3M7CiAgX19iZTMyIGxoX3RhaWw7CiAgX19iZTMyIGxoX2Jsa25vOwogIF9fYmUzMiBsaF9oYXNoOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBHRlMyX0xPR19ERVNDX01FVEFEQVRBIDMwMAogI2RlZmluZSBHRlMyX0xPR19ERVNDX1JFVk9LRSAzMDEKICNkZWZpbmUgR0ZTMl9MT0dfREVTQ19KREFUQSAzMDIKLXN0cnVjdCBnZnMyX2xvZ19kZXNjcmlwdG9yIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgZ2ZzMl9sb2dfZGVzY3JpcHRvciB7CiAgc3RydWN0IGdmczJfbWV0YV9oZWFkZXIgbGRfaGVhZGVyOwogIF9fYmUzMiBsZF90eXBlOwogIF9fYmUzMiBsZF9sZW5ndGg7Ci0gX19iZTMyIGxkX2RhdGExOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMzIgbGRfZGF0YTE7CiAgX19iZTMyIGxkX2RhdGEyOwogIF9fdTggbGRfcmVzZXJ2ZWRbMzJdOwogfTsKLSNkZWZpbmUgR0ZTMl9JTlVNX1FVQU5UVU0gMTA0ODU3NgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgR0ZTMl9JTlVNX1FVQU5UVU0gMTA0ODU3Ngogc3RydWN0IGdmczJfaW51bV9yYW5nZSB7CiAgX19iZTY0IGlyX3N0YXJ0OwogIF9fYmU2NCBpcl9sZW5ndGg7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgZ2ZzMl9zdGF0ZnNfY2hhbmdlIHsKICBfX2JlNjQgc2NfdG90YWw7CiAgX19iZTY0IHNjX2ZyZWU7Ci0gX19iZTY0IHNjX2Rpbm9kZXM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmU2NCBzY19kaW5vZGVzOwogfTsKICNkZWZpbmUgR0ZTMl9RQ0ZfVVNFUiAweDAwMDAwMDAxCiBzdHJ1Y3QgZ2ZzMl9xdW90YV9jaGFuZ2UgewotIF9fYmU2NCBxY19jaGFuZ2U7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmU2NCBxY19jaGFuZ2U7CiAgX19iZTMyIHFjX2ZsYWdzOwogIF9fYmUzMiBxY19pZDsKIH07Ci1zdHJ1Y3QgZ2ZzMl9xdW90YV9sdmIgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBnZnMyX3F1b3RhX2x2YiB7CiAgX19iZTMyIHFiX21hZ2ljOwogIF9fdTMyIF9fcGFkOwogIF9fYmU2NCBxYl9saW1pdDsKLSBfX2JlNjQgcWJfd2FybjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTY0IHFiX3dhcm47CiAgX19iZTY0IHFiX3ZhbHVlOwogfTsKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaGFzaF9pbmZvLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2hhc2hfaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMzU0M2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2hhc2hfaW5mby5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1VBUElfTElOVVhfSEFTSF9JTkZPX0gKKyNkZWZpbmUgX1VBUElfTElOVVhfSEFTSF9JTkZPX0gKK2VudW0gaGFzaF9hbGdvIHsKKyBIQVNIX0FMR09fTUQ0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBIQVNIX0FMR09fTUQ1LAorIEhBU0hfQUxHT19TSEExLAorIEhBU0hfQUxHT19SSVBFX01EXzE2MCwKKyBIQVNIX0FMR09fU0hBMjU2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBIQVNIX0FMR09fU0hBMzg0LAorIEhBU0hfQUxHT19TSEE1MTIsCisgSEFTSF9BTEdPX1NIQTIyNCwKKyBIQVNIX0FMR09fUklQRV9NRF8xMjgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEhBU0hfQUxHT19SSVBFX01EXzI1NiwKKyBIQVNIX0FMR09fUklQRV9NRF8zMjAsCisgSEFTSF9BTEdPX1dQXzI1NiwKKyBIQVNIX0FMR09fV1BfMzg0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBIQVNIX0FMR09fV1BfNTEyLAorIEhBU0hfQUxHT19UR1JfMTI4LAorIEhBU0hfQUxHT19UR1JfMTYwLAorIEhBU0hfQUxHT19UR1JfMTkyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBIQVNIX0FMR09fX0xBU1QKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaHNyX25ldGxpbmsuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaHNyX25ldGxpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjQ3ZDY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9oc3JfbmV0bGluay5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19VQVBJX0hTUl9ORVRMSU5LX0gKKyNkZWZpbmUgX19VQVBJX0hTUl9ORVRMSU5LX0gKK2VudW0geworIEhTUl9BX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSFNSX0FfTk9ERV9BRERSLAorIEhTUl9BX0lGSU5ERVgsCisgSFNSX0FfSUYxX0FHRSwKKyBIU1JfQV9JRjJfQUdFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBIU1JfQV9OT0RFX0FERFJfQiwKKyBIU1JfQV9JRjFfU0VRLAorIEhTUl9BX0lGMl9TRVEsCisgSFNSX0FfSUYxX0lGSU5ERVgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEhTUl9BX0lGMl9JRklOREVYLAorIEhTUl9BX0FERFJfQl9JRklOREVYLAorIF9fSFNSX0FfTUFYLAorfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhTUl9BX01BWCAoX19IU1JfQV9NQVggLSAxKQorZW51bSB7CisgSFNSX0NfVU5TUEVDLAorIEhTUl9DX1JJTkdfRVJST1IsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEhTUl9DX05PREVfRE9XTiwKKyBIU1JfQ19HRVRfTk9ERV9TVEFUVVMsCisgSFNSX0NfU0VUX05PREVfU1RBVFVTLAorIEhTUl9DX0dFVF9OT0RFX0xJU1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEhTUl9DX1NFVF9OT0RFX0xJU1QsCisgX19IU1JfQ19NQVgsCit9OworI2RlZmluZSBIU1JfQ19NQVggKF9fSFNSX0NfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWNtcHY2LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2ljbXB2Ni5oCmluZGV4IDdlYzYyOGMuLjU0MmVjYTUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWNtcHY2LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pY21wdjYuaApAQCAtMTMzLDI5ICsxMzMsMzIgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElDTVBWNl9BRERSX1VOUkVBQ0ggMwogI2RlZmluZSBJQ01QVjZfUE9SVF9VTlJFQUNIIDQKKyNkZWZpbmUgSUNNUFY2X1BPTElDWV9GQUlMIDUKKyNkZWZpbmUgSUNNUFY2X1JFSkVDVF9ST1VURSA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJQ01QVjZfRVhDX0hPUExJTUlUIDAKICNkZWZpbmUgSUNNUFY2X0VYQ19GUkFHVElNRSAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJQ01QVjZfSERSX0ZJRUxEIDAKICNkZWZpbmUgSUNNUFY2X1VOS19ORVhUSERSIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElDTVBWNl9VTktfT1BUSU9OIDIKICNkZWZpbmUgSUNNUFY2X0ZJTFRFUiAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJQ01QVjZfRklMVEVSX0JMT0NLIDEKICNkZWZpbmUgSUNNUFY2X0ZJTFRFUl9QQVNTIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElDTVBWNl9GSUxURVJfQkxPQ0tPVEhFUlMgMwogI2RlZmluZSBJQ01QVjZfRklMVEVSX1BBU1NPTkxZIDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWNtcDZfZmlsdGVyIHsKICBfX3UzMiBkYXRhWzhdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIE1MRDJfTU9ERV9JU19JTkNMVURFIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1MRDJfTU9ERV9JU19FWENMVURFIDIKICNkZWZpbmUgTUxEMl9DSEFOR0VfVE9fSU5DTFVERSAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNTEQyX0NIQU5HRV9UT19FWENMVURFIDQKICNkZWZpbmUgTUxEMl9BTExPV19ORVdfU09VUkNFUyA1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNTEQyX0JMT0NLX09MRF9TT1VSQ0VTIDYKICNkZWZpbmUgTUxEMl9BTExfTUNSX0lOSVQgeyB7IHsgMHhmZiwweDAyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMHgxNiB9IH0gfQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZi5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZi5oCmluZGV4IDJiNzEzM2YuLjRlY2E4NGQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWYuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmLmgKQEAgLTc3LDEzNCArNzcsMTM1IEBACiAjZGVmaW5lIElGRl9TVVBQX05PRkNTIDB4ODAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElGRl9MSVZFX0FERFJfQ0hBTkdFIDB4MTAwMDAwCisjZGVmaW5lIElGRl9NQUNWTEFOIDB4MjAwMDAwCiAjZGVmaW5lIElGX0dFVF9JRkFDRSAweDAwMDEKICNkZWZpbmUgSUZfR0VUX1BST1RPIDB4MDAwMgotI2RlZmluZSBJRl9JRkFDRV9WMzUgMHgxMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJRl9JRkFDRV9WMzUgMHgxMDAwCiAjZGVmaW5lIElGX0lGQUNFX1YyNCAweDEwMDEKICNkZWZpbmUgSUZfSUZBQ0VfWDIxIDB4MTAwMgogI2RlZmluZSBJRl9JRkFDRV9UMSAweDEwMDMKLSNkZWZpbmUgSUZfSUZBQ0VfRTEgMHgxMDA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJRl9JRkFDRV9FMSAweDEwMDQKICNkZWZpbmUgSUZfSUZBQ0VfU1lOQ19TRVJJQUwgMHgxMDA1CiAjZGVmaW5lIElGX0lGQUNFX1gyMUQgMHgxMDA2CiAjZGVmaW5lIElGX1BST1RPX0hETEMgMHgyMDAwCi0jZGVmaW5lIElGX1BST1RPX1BQUCAweDIwMDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElGX1BST1RPX1BQUCAweDIwMDEKICNkZWZpbmUgSUZfUFJPVE9fQ0lTQ08gMHgyMDAyCiAjZGVmaW5lIElGX1BST1RPX0ZSIDB4MjAwMwogI2RlZmluZSBJRl9QUk9UT19GUl9BRERfUFZDIDB4MjAwNAotI2RlZmluZSBJRl9QUk9UT19GUl9ERUxfUFZDIDB4MjAwNQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZfUFJPVE9fRlJfREVMX1BWQyAweDIwMDUKICNkZWZpbmUgSUZfUFJPVE9fWDI1IDB4MjAwNgogI2RlZmluZSBJRl9QUk9UT19IRExDX0VUSCAweDIwMDcKICNkZWZpbmUgSUZfUFJPVE9fRlJfQUREX0VUSF9QVkMgMHgyMDA4Ci0jZGVmaW5lIElGX1BST1RPX0ZSX0RFTF9FVEhfUFZDIDB4MjAwOQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZfUFJPVE9fRlJfREVMX0VUSF9QVkMgMHgyMDA5CiAjZGVmaW5lIElGX1BST1RPX0ZSX1BWQyAweDIwMEEKICNkZWZpbmUgSUZfUFJPVE9fRlJfRVRIX1BWQyAweDIwMEIKICNkZWZpbmUgSUZfUFJPVE9fUkFXIDB4MjAwQwotZW51bSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CiAgSUZfT1BFUl9VTktOT1dOLAogIElGX09QRVJfTk9UUFJFU0VOVCwKICBJRl9PUEVSX0RPV04sCi0gSUZfT1BFUl9MT1dFUkxBWUVSRE9XTiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZfT1BFUl9MT1dFUkxBWUVSRE9XTiwKICBJRl9PUEVSX1RFU1RJTkcsCiAgSUZfT1BFUl9ET1JNQU5ULAogIElGX09QRVJfVVAsCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBlbnVtIHsKICBJRl9MSU5LX01PREVfREVGQVVMVCwKICBJRl9MSU5LX01PREVfRE9STUFOVCwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBpZm1hcCB7CiAgdW5zaWduZWQgbG9uZyBtZW1fc3RhcnQ7CiAgdW5zaWduZWQgbG9uZyBtZW1fZW5kOwotIHVuc2lnbmVkIHNob3J0IGJhc2VfYWRkcjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgc2hvcnQgYmFzZV9hZGRyOwogIHVuc2lnbmVkIGNoYXIgaXJxOwogIHVuc2lnbmVkIGNoYXIgZG1hOwogIHVuc2lnbmVkIGNoYXIgcG9ydDsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBpZl9zZXR0aW5ncyB7CiAgdW5zaWduZWQgaW50IHR5cGU7CiAgdW5zaWduZWQgaW50IHNpemU7Ci0gdW5pb24gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bmlvbiB7CiAgcmF3X2hkbGNfcHJvdG8gX191c2VyICpyYXdfaGRsYzsKICBjaXNjb19wcm90byBfX3VzZXIgKmNpc2NvOwogIGZyX3Byb3RvIF9fdXNlciAqZnI7Ci0gZnJfcHJvdG9fcHZjIF9fdXNlciAqZnJfcHZjOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBmcl9wcm90b19wdmMgX191c2VyICpmcl9wdmM7CiAgZnJfcHJvdG9fcHZjX2luZm8gX191c2VyICpmcl9wdmNfaW5mbzsKICBzeW5jX3NlcmlhbF9zZXR0aW5ncyBfX3VzZXIgKnN5bmM7CiAgdGUxX3NldHRpbmdzIF9fdXNlciAqdGUxOwotIH0gaWZzX2lmc3U7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIH0gaWZzX2lmc3U7CiB9Owogc3RydWN0IGlmcmVxIHsKICNkZWZpbmUgSUZIV0FERFJMRU4gNgotIHVuaW9uCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuaW9uCiAgewogIGNoYXIgaWZybl9uYW1lW0lGTkFNU0laXTsKICB9IGlmcl9pZnJuOwotIHVuaW9uIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5pb24gewogIHN0cnVjdCBzb2NrYWRkciBpZnJ1X2FkZHI7CiAgc3RydWN0IHNvY2thZGRyIGlmcnVfZHN0YWRkcjsKICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9icm9hZGFkZHI7Ci0gc3RydWN0IHNvY2thZGRyIGlmcnVfbmV0bWFzazsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHNvY2thZGRyIGlmcnVfbmV0bWFzazsKICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9od2FkZHI7CiAgc2hvcnQgaWZydV9mbGFnczsKICBpbnQgaWZydV9pdmFsdWU7Ci0gaW50IGlmcnVfbXR1OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBpbnQgaWZydV9tdHU7CiAgc3RydWN0IGlmbWFwIGlmcnVfbWFwOwogIGNoYXIgaWZydV9zbGF2ZVtJRk5BTVNJWl07CiAgY2hhciBpZnJ1X25ld25hbWVbSUZOQU1TSVpdOwotIHZvaWQgX191c2VyICogaWZydV9kYXRhOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB2b2lkIF9fdXNlciAqIGlmcnVfZGF0YTsKICBzdHJ1Y3QgaWZfc2V0dGluZ3MgaWZydV9zZXR0aW5nczsKICB9IGlmcl9pZnJ1OwogfTsKLSNkZWZpbmUgaWZyX25hbWUgaWZyX2lmcm4uaWZybl9uYW1lCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBpZnJfbmFtZSBpZnJfaWZybi5pZnJuX25hbWUKICNkZWZpbmUgaWZyX2h3YWRkciBpZnJfaWZydS5pZnJ1X2h3YWRkcgogI2RlZmluZSBpZnJfYWRkciBpZnJfaWZydS5pZnJ1X2FkZHIKICNkZWZpbmUgaWZyX2RzdGFkZHIgaWZyX2lmcnUuaWZydV9kc3RhZGRyCi0jZGVmaW5lIGlmcl9icm9hZGFkZHIgaWZyX2lmcnUuaWZydV9icm9hZGFkZHIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIGlmcl9icm9hZGFkZHIgaWZyX2lmcnUuaWZydV9icm9hZGFkZHIKICNkZWZpbmUgaWZyX25ldG1hc2sgaWZyX2lmcnUuaWZydV9uZXRtYXNrCiAjZGVmaW5lIGlmcl9mbGFncyBpZnJfaWZydS5pZnJ1X2ZsYWdzCiAjZGVmaW5lIGlmcl9tZXRyaWMgaWZyX2lmcnUuaWZydV9pdmFsdWUKLSNkZWZpbmUgaWZyX210dSBpZnJfaWZydS5pZnJ1X210dQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgaWZyX210dSBpZnJfaWZydS5pZnJ1X210dQogI2RlZmluZSBpZnJfbWFwIGlmcl9pZnJ1LmlmcnVfbWFwCiAjZGVmaW5lIGlmcl9zbGF2ZSBpZnJfaWZydS5pZnJ1X3NsYXZlCiAjZGVmaW5lIGlmcl9kYXRhIGlmcl9pZnJ1LmlmcnVfZGF0YQotI2RlZmluZSBpZnJfaWZpbmRleCBpZnJfaWZydS5pZnJ1X2l2YWx1ZQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgaWZyX2lmaW5kZXggaWZyX2lmcnUuaWZydV9pdmFsdWUKICNkZWZpbmUgaWZyX2JhbmR3aWR0aCBpZnJfaWZydS5pZnJ1X2l2YWx1ZQogI2RlZmluZSBpZnJfcWxlbiBpZnJfaWZydS5pZnJ1X2l2YWx1ZQogI2RlZmluZSBpZnJfbmV3bmFtZSBpZnJfaWZydS5pZnJ1X25ld25hbWUKLSNkZWZpbmUgaWZyX3NldHRpbmdzIGlmcl9pZnJ1LmlmcnVfc2V0dGluZ3MKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIGlmcl9zZXR0aW5ncyBpZnJfaWZydS5pZnJ1X3NldHRpbmdzCiBzdHJ1Y3QgaWZjb25mIHsKICBpbnQgaWZjX2xlbjsKICB1bmlvbiB7Ci0gY2hhciBfX3VzZXIgKmlmY3VfYnVmOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBjaGFyIF9fdXNlciAqaWZjdV9idWY7CiAgc3RydWN0IGlmcmVxIF9fdXNlciAqaWZjdV9yZXE7CiAgfSBpZmNfaWZjdTsKIH07Ci0jZGVmaW5lIGlmY19idWYgaWZjX2lmY3UuaWZjdV9idWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIGlmY19idWYgaWZjX2lmY3UuaWZjdV9idWYKICNkZWZpbmUgaWZjX3JlcSBpZmNfaWZjdS5pZmN1X3JlcQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfYWRkci5oCmluZGV4IGJkM2E2YTcuLmUwOGExNzYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfYWRkci5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfYWRkci5oCkBAIC00MSwyOSArNDEsMzMgQEAKICBJRkFfQ0FDSEVJTkZPLAogIElGQV9NVUxUSUNBU1QsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGQV9GTEFHUywKICBfX0lGQV9NQVgsCiB9OwogI2RlZmluZSBJRkFfTUFYIChfX0lGQV9NQVggLSAxKQotI2RlZmluZSBJRkFfRl9TRUNPTkRBUlkgMHgwMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZBX0ZfU0VDT05EQVJZIDB4MDEKICNkZWZpbmUgSUZBX0ZfVEVNUE9SQVJZIElGQV9GX1NFQ09OREFSWQogI2RlZmluZSBJRkFfRl9OT0RBRCAweDAyCiAjZGVmaW5lIElGQV9GX09QVElNSVNUSUMgMHgwNAotI2RlZmluZSBJRkFfRl9EQURGQUlMRUQgMHgwOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZBX0ZfREFERkFJTEVEIDB4MDgKICNkZWZpbmUgSUZBX0ZfSE9NRUFERFJFU1MgMHgxMAogI2RlZmluZSBJRkFfRl9ERVBSRUNBVEVEIDB4MjAKICNkZWZpbmUgSUZBX0ZfVEVOVEFUSVZFIDB4NDAKLSNkZWZpbmUgSUZBX0ZfUEVSTUFORU5UIDB4ODAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElGQV9GX1BFUk1BTkVOVCAweDgwCisjZGVmaW5lIElGQV9GX01BTkFHRVRFTVBBRERSIDB4MTAwCisjZGVmaW5lIElGQV9GX05PUFJFRklYUk9VVEUgMHgyMDAKIHN0cnVjdCBpZmFfY2FjaGVpbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaWZhX3ByZWZlcmVkOwogIF9fdTMyIGlmYV92YWxpZDsKICBfX3UzMiBjc3RhbXA7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHRzdGFtcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBJRkFfUlRBKHIpICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSkpKQogI2RlZmluZSBJRkFfUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfYXJwLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2FycC5oCmluZGV4IDVjMjRkZTYuLjA5ZWMwMWQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfYXJwLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9hcnAuaApAQCAtOTYsNDggKzk2LDUwIEBACiAjZGVmaW5lIEFSUEhSRF9DQUlGIDgyMgogI2RlZmluZSBBUlBIUkRfSVA2R1JFIDgyMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVJQSFJEX05FVExJTksgODI0CisjZGVmaW5lIEFSUEhSRF82TE9XUEFOIDgyNQogI2RlZmluZSBBUlBIUkRfVk9JRCAweEZGRkYKICNkZWZpbmUgQVJQSFJEX05PTkUgMHhGRkZFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUlBPUF9SRVFVRVNUIDEKICNkZWZpbmUgQVJQT1BfUkVQTFkgMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVJQT1BfUlJFUVVFU1QgMwogI2RlZmluZSBBUlBPUF9SUkVQTFkgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVJQT1BfSW5SRVFVRVNUIDgKICNkZWZpbmUgQVJQT1BfSW5SRVBMWSA5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUlBPUF9OQUsgMTAKIHN0cnVjdCBhcnByZXEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc29ja2FkZHIgYXJwX3BhOwogIHN0cnVjdCBzb2NrYWRkciBhcnBfaGE7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBhcnBfZmxhZ3M7CiAgc3RydWN0IHNvY2thZGRyIGFycF9uZXRtYXNrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIGFycF9kZXZbMTZdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgYXJwcmVxX29sZCB7CiAgc3RydWN0IHNvY2thZGRyIGFycF9wYTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHNvY2thZGRyIGFycF9oYTsKICBpbnQgYXJwX2ZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc29ja2FkZHIgYXJwX25ldG1hc2s7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVRGX0NPTSAweDAyCiAjZGVmaW5lIEFURl9QRVJNIDB4MDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFURl9QVUJMIDB4MDgKICNkZWZpbmUgQVRGX1VTRVRSQUlMRVJTIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFURl9ORVRNQVNLIDB4MjAKICNkZWZpbmUgQVRGX0RPTlRQVUIgMHg0MAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBhcnBoZHIgewogIF9fYmUxNiBhcl9ocmQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fYmUxNiBhcl9wcm87CiAgdW5zaWduZWQgY2hhciBhcl9obG47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgYXJfcGxuOwogIF9fYmUxNiBhcl9vcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9ib25kaW5nLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2JvbmRpbmcuaAppbmRleCBlOGE5MzZkLi5jMmZhZTQyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2JvbmRpbmcuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2JvbmRpbmcuaApAQCAtNTYsMjggKzU2LDMwIEBACiAjZGVmaW5lIEJPTkRfWE1JVF9QT0xJQ1lfTEFZRVIzNCAxCiAjZGVmaW5lIEJPTkRfWE1JVF9QT0xJQ1lfTEFZRVIyMyAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCT05EX1hNSVRfUE9MSUNZX0VOQ0FQMjMgMworI2RlZmluZSBCT05EX1hNSVRfUE9MSUNZX0VOQ0FQMzQgNAogdHlwZWRlZiBzdHJ1Y3QgaWZib25kIHsKICBfX3MzMiBib25kX21vZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIG51bV9zbGF2ZXM7CiAgX19zMzIgbWlpbW9uOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gaWZib25kOwogdHlwZWRlZiBzdHJ1Y3QgaWZzbGF2ZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIHNsYXZlX2lkOwogIGNoYXIgc2xhdmVfbmFtZVtJRk5BTVNJWl07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczggbGluazsKICBfX3M4IHN0YXRlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBsaW5rX2ZhaWx1cmVfY291bnQ7CiB9IGlmc2xhdmU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGFkX2luZm8gewogIF9fdTE2IGFnZ3JlZ2F0b3JfaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHBvcnRzOwogIF9fdTE2IGFjdG9yX2tleTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgcGFydG5lcl9rZXk7CiAgX191OCBwYXJ0bmVyX3N5c3RlbVtFVEhfQUxFTl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfYnJpZGdlLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2JyaWRnZS5oCmluZGV4IDE0NWI4NGQuLjM2NjkxMmUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfYnJpZGdlLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9icmlkZ2UuaApAQCAtMTksMTgxICsxOSwxODIgQEAKICNpZm5kZWYgX1VBUElfTElOVVhfSUZfQlJJREdFX0gKICNkZWZpbmUgX1VBUElfTElOVVhfSUZfQlJJREdFX0gKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2RlZmluZSBTWVNGU19CUklER0VfQVRUUiAiYnJpZGdlIgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTWVNGU19CUklER0VfQVRUUiAiYnJpZGdlIgogI2RlZmluZSBTWVNGU19CUklER0VfRkRCICJicmZvcndhcmQiCiAjZGVmaW5lIFNZU0ZTX0JSSURHRV9QT1JUX1NVQkRJUiAiYnJpZiIKICNkZWZpbmUgU1lTRlNfQlJJREdFX1BPUlRfQVRUUiAiYnJwb3J0IgotI2RlZmluZSBTWVNGU19CUklER0VfUE9SVF9MSU5LICJicmlkZ2UiCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTWVNGU19CUklER0VfUE9SVF9MSU5LICJicmlkZ2UiCiAjZGVmaW5lIEJSQ1RMX1ZFUlNJT04gMQogI2RlZmluZSBCUkNUTF9HRVRfVkVSU0lPTiAwCiAjZGVmaW5lIEJSQ1RMX0dFVF9CUklER0VTIDEKLSNkZWZpbmUgQlJDVExfQUREX0JSSURHRSAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCUkNUTF9BRERfQlJJREdFIDIKICNkZWZpbmUgQlJDVExfREVMX0JSSURHRSAzCiAjZGVmaW5lIEJSQ1RMX0FERF9JRiA0CiAjZGVmaW5lIEJSQ1RMX0RFTF9JRiA1Ci0jZGVmaW5lIEJSQ1RMX0dFVF9CUklER0VfSU5GTyA2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCUkNUTF9HRVRfQlJJREdFX0lORk8gNgogI2RlZmluZSBCUkNUTF9HRVRfUE9SVF9MSVNUIDcKICNkZWZpbmUgQlJDVExfU0VUX0JSSURHRV9GT1JXQVJEX0RFTEFZIDgKICNkZWZpbmUgQlJDVExfU0VUX0JSSURHRV9IRUxMT19USU1FIDkKLSNkZWZpbmUgQlJDVExfU0VUX0JSSURHRV9NQVhfQUdFIDEwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX01BWF9BR0UgMTAKICNkZWZpbmUgQlJDVExfU0VUX0FHRUlOR19USU1FIDExCiAjZGVmaW5lIEJSQ1RMX1NFVF9HQ19JTlRFUlZBTCAxMgogI2RlZmluZSBCUkNUTF9HRVRfUE9SVF9JTkZPIDEzCi0jZGVmaW5lIEJSQ1RMX1NFVF9CUklER0VfU1RQX1NUQVRFIDE0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX1NUUF9TVEFURSAxNAogI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX1BSSU9SSVRZIDE1CiAjZGVmaW5lIEJSQ1RMX1NFVF9QT1JUX1BSSU9SSVRZIDE2CiAjZGVmaW5lIEJSQ1RMX1NFVF9QQVRIX0NPU1QgMTcKLSNkZWZpbmUgQlJDVExfR0VUX0ZEQl9FTlRSSUVTIDE4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCUkNUTF9HRVRfRkRCX0VOVFJJRVMgMTgKICNkZWZpbmUgQlJfU1RBVEVfRElTQUJMRUQgMAogI2RlZmluZSBCUl9TVEFURV9MSVNURU5JTkcgMQogI2RlZmluZSBCUl9TVEFURV9MRUFSTklORyAyCi0jZGVmaW5lIEJSX1NUQVRFX0ZPUldBUkRJTkcgMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQlJfU1RBVEVfRk9SV0FSRElORyAzCiAjZGVmaW5lIEJSX1NUQVRFX0JMT0NLSU5HIDQKIHN0cnVjdCBfX2JyaWRnZV9pbmZvIHsKICBfX3U2NCBkZXNpZ25hdGVkX3Jvb3Q7Ci0gX191NjQgYnJpZGdlX2lkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBicmlkZ2VfaWQ7CiAgX191MzIgcm9vdF9wYXRoX2Nvc3Q7CiAgX191MzIgbWF4X2FnZTsKICBfX3UzMiBoZWxsb190aW1lOwotIF9fdTMyIGZvcndhcmRfZGVsYXk7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGZvcndhcmRfZGVsYXk7CiAgX191MzIgYnJpZGdlX21heF9hZ2U7CiAgX191MzIgYnJpZGdlX2hlbGxvX3RpbWU7CiAgX191MzIgYnJpZGdlX2ZvcndhcmRfZGVsYXk7Ci0gX191OCB0b3BvbG9neV9jaGFuZ2U7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggdG9wb2xvZ3lfY2hhbmdlOwogIF9fdTggdG9wb2xvZ3lfY2hhbmdlX2RldGVjdGVkOwogIF9fdTggcm9vdF9wb3J0OwogIF9fdTggc3RwX2VuYWJsZWQ7Ci0gX191MzIgYWdlaW5nX3RpbWU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGFnZWluZ190aW1lOwogIF9fdTMyIGdjX2ludGVydmFsOwogIF9fdTMyIGhlbGxvX3RpbWVyX3ZhbHVlOwogIF9fdTMyIHRjbl90aW1lcl92YWx1ZTsKLSBfX3UzMiB0b3BvbG9neV9jaGFuZ2VfdGltZXJfdmFsdWU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHRvcG9sb2d5X2NoYW5nZV90aW1lcl92YWx1ZTsKICBfX3UzMiBnY190aW1lcl92YWx1ZTsKIH07CiBzdHJ1Y3QgX19wb3J0X2luZm8gewotIF9fdTY0IGRlc2lnbmF0ZWRfcm9vdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgZGVzaWduYXRlZF9yb290OwogIF9fdTY0IGRlc2lnbmF0ZWRfYnJpZGdlOwogIF9fdTE2IHBvcnRfaWQ7CiAgX191MTYgZGVzaWduYXRlZF9wb3J0OwotIF9fdTMyIHBhdGhfY29zdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcGF0aF9jb3N0OwogIF9fdTMyIGRlc2lnbmF0ZWRfY29zdDsKICBfX3U4IHN0YXRlOwogIF9fdTggdG9wX2NoYW5nZV9hY2s7Ci0gX191OCBjb25maWdfcGVuZGluZzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBjb25maWdfcGVuZGluZzsKICBfX3U4IHVudXNlZDA7CiAgX191MzIgbWVzc2FnZV9hZ2VfdGltZXJfdmFsdWU7CiAgX191MzIgZm9yd2FyZF9kZWxheV90aW1lcl92YWx1ZTsKLSBfX3UzMiBob2xkX3RpbWVyX3ZhbHVlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBob2xkX3RpbWVyX3ZhbHVlOwogfTsKIHN0cnVjdCBfX2ZkYl9lbnRyeSB7Ci0gX191OCBtYWNfYWRkcls2XTsKLSBfX3U4IHBvcnRfbm87CisgX191OCBtYWNfYWRkcltFVEhfQUxFTl07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggcG9ydF9ubzsKICBfX3U4IGlzX2xvY2FsOwogIF9fdTMyIGFnZWluZ190aW1lcl92YWx1ZTsKICBfX3U4IHBvcnRfaGk7Ci0gX191OCBwYWQwOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHBhZDA7CiAgX191MTYgdW51c2VkOwogfTsKICNkZWZpbmUgQlJJREdFX0ZMQUdTX01BU1RFUiAxCi0jZGVmaW5lIEJSSURHRV9GTEFHU19TRUxGIDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJSSURHRV9GTEFHU19TRUxGIDIKICNkZWZpbmUgQlJJREdFX01PREVfVkVCIDAKICNkZWZpbmUgQlJJREdFX01PREVfVkVQQSAxCiBlbnVtIHsKLSBJRkxBX0JSSURHRV9GTEFHUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9CUklER0VfRkxBR1MsCiAgSUZMQV9CUklER0VfTU9ERSwKICBJRkxBX0JSSURHRV9WTEFOX0lORk8sCiAgX19JRkxBX0JSSURHRV9NQVgsCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIElGTEFfQlJJREdFX01BWCAoX19JRkxBX0JSSURHRV9NQVggLSAxKQogI2RlZmluZSBCUklER0VfVkxBTl9JTkZPX01BU1RFUiAoMTw8MCkKICNkZWZpbmUgQlJJREdFX1ZMQU5fSU5GT19QVklEICgxPDwxKQotI2RlZmluZSBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEICgxPDwyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRCAoMTw8MikKIHN0cnVjdCBicmlkZ2Vfdmxhbl9pbmZvIHsKICBfX3UxNiBmbGFnczsKICBfX3UxNiB2aWQ7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBlbnVtIHsKICBNREJBX1VOU1BFQywKICBNREJBX01EQiwKLSBNREJBX1JPVVRFUiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTURCQV9ST1VURVIsCiAgX19NREJBX01BWCwKIH07CiAjZGVmaW5lIE1EQkFfTUFYIChfX01EQkFfTUFYIC0gMSkKLWVudW0gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gewogIE1EQkFfTURCX1VOU1BFQywKICBNREJBX01EQl9FTlRSWSwKICBfX01EQkFfTURCX01BWCwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgTURCQV9NREJfTUFYIChfX01EQkFfTURCX01BWCAtIDEpCiBlbnVtIHsKICBNREJBX01EQl9FTlRSWV9VTlNQRUMsCi0gTURCQV9NREJfRU5UUllfSU5GTywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTURCQV9NREJfRU5UUllfSU5GTywKICBfX01EQkFfTURCX0VOVFJZX01BWCwKIH07CiAjZGVmaW5lIE1EQkFfTURCX0VOVFJZX01BWCAoX19NREJBX01EQl9FTlRSWV9NQVggLSAxKQotZW51bSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CiAgTURCQV9ST1VURVJfVU5TUEVDLAogIE1EQkFfUk9VVEVSX1BPUlQsCiAgX19NREJBX1JPVVRFUl9NQVgsCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIE1EQkFfUk9VVEVSX01BWCAoX19NREJBX1JPVVRFUl9NQVggLSAxKQogc3RydWN0IGJyX3BvcnRfbXNnIHsKICBfX3U4IGZhbWlseTsKLSBfX3UzMiBpZmluZGV4OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBpZmluZGV4OwogfTsKIHN0cnVjdCBicl9tZGJfZW50cnkgewogIF9fdTMyIGlmaW5kZXg7Ci0jZGVmaW5lIE1EQl9URU1QT1JBUlkgMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTURCX1RFTVBPUkFSWSAwCiAjZGVmaW5lIE1EQl9QRVJNQU5FTlQgMQogIF9fdTggc3RhdGU7CiAgc3RydWN0IHsKLSB1bmlvbiB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuaW9uIHsKICBfX2JlMzIgaXA0OwogIHN0cnVjdCBpbjZfYWRkciBpcDY7CiAgfSB1OwotIF9fYmUxNiBwcm90bzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTE2IHByb3RvOwogIH0gYWRkcjsKIH07CiBlbnVtIHsKLSBNREJBX1NFVF9FTlRSWV9VTlNQRUMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE1EQkFfU0VUX0VOVFJZX1VOU1BFQywKICBNREJBX1NFVF9FTlRSWSwKICBfX01EQkFfU0VUX0VOVFJZX01BWCwKIH07Ci0jZGVmaW5lIE1EQkFfU0VUX0VOVFJZX01BWCAoX19NREJBX1NFVF9FTlRSWV9NQVggLSAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTURCQV9TRVRfRU5UUllfTUFYIChfX01EQkFfU0VUX0VOVFJZX01BWCAtIDEpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfZXRoZXIuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfZXRoZXIuaAppbmRleCAxNGQ2NzlmLi42MTBmNzBiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2V0aGVyLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9ldGhlci5oCkBAIC04MSw1MSArODEsNTMgQEAKICNkZWZpbmUgRVRIX1BfTVZSUCAweDg4RjUKICNkZWZpbmUgRVRIX1BfMTU4OCAweDg4RjcKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSF9QX1BSUCAweDg4RkIKICNkZWZpbmUgRVRIX1BfRkNPRSAweDg5MDYKICNkZWZpbmUgRVRIX1BfVERMUyAweDg5MEQKICNkZWZpbmUgRVRIX1BfRklQIDB4ODkxNAotI2RlZmluZSBFVEhfUF9RSU5RMSAweDkxMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSF9QX1FJTlExIDB4OTEwMAogI2RlZmluZSBFVEhfUF9RSU5RMiAweDkyMDAKICNkZWZpbmUgRVRIX1BfUUlOUTMgMHg5MzAwCiAjZGVmaW5lIEVUSF9QX0VEU0EgMHhEQURBCi0jZGVmaW5lIEVUSF9QX0FGX0lVQ1YgMHhGQkZCCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhfUF9BRl9JVUNWIDB4RkJGQgogI2RlZmluZSBFVEhfUF84MDJfM19NSU4gMHgwNjAwCiAjZGVmaW5lIEVUSF9QXzgwMl8zIDB4MDAwMQogI2RlZmluZSBFVEhfUF9BWDI1IDB4MDAwMgotI2RlZmluZSBFVEhfUF9BTEwgMHgwMDAzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhfUF9BTEwgMHgwMDAzCiAjZGVmaW5lIEVUSF9QXzgwMl8yIDB4MDAwNAogI2RlZmluZSBFVEhfUF9TTkFQIDB4MDAwNQogI2RlZmluZSBFVEhfUF9ERENNUCAweDAwMDYKLSNkZWZpbmUgRVRIX1BfV0FOX1BQUCAweDAwMDcKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSF9QX1dBTl9QUFAgMHgwMDA3CiAjZGVmaW5lIEVUSF9QX1BQUF9NUCAweDAwMDgKICNkZWZpbmUgRVRIX1BfTE9DQUxUQUxLIDB4MDAwOQogI2RlZmluZSBFVEhfUF9DQU4gMHgwMDBDCi0jZGVmaW5lIEVUSF9QX0NBTkZEIDB4MDAwRAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIX1BfQ0FORkQgMHgwMDBECiAjZGVmaW5lIEVUSF9QX1BQUFRBTEsgMHgwMDEwCiAjZGVmaW5lIEVUSF9QX1RSXzgwMl8yIDB4MDAxMQogI2RlZmluZSBFVEhfUF9NT0JJVEVYIDB4MDAxNQotI2RlZmluZSBFVEhfUF9DT05UUk9MIDB4MDAxNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIX1BfQ09OVFJPTCAweDAwMTYKICNkZWZpbmUgRVRIX1BfSVJEQSAweDAwMTcKICNkZWZpbmUgRVRIX1BfRUNPTkVUIDB4MDAxOAogI2RlZmluZSBFVEhfUF9IRExDIDB4MDAxOQotI2RlZmluZSBFVEhfUF9BUkNORVQgMHgwMDFBCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhfUF9BUkNORVQgMHgwMDFBCiAjZGVmaW5lIEVUSF9QX0RTQSAweDAwMUIKICNkZWZpbmUgRVRIX1BfVFJBSUxFUiAweDAwMUMKICNkZWZpbmUgRVRIX1BfUEhPTkVUIDB4MDBGNQotI2RlZmluZSBFVEhfUF9JRUVFODAyMTU0IDB4MDBGNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIX1BfSUVFRTgwMjE1NCAweDAwRjYKICNkZWZpbmUgRVRIX1BfQ0FJRiAweDAwRjcKIHN0cnVjdCBldGhoZHIgewogIHVuc2lnbmVkIGNoYXIgaF9kZXN0W0VUSF9BTEVOXTsKLSB1bnNpZ25lZCBjaGFyIGhfc291cmNlW0VUSF9BTEVOXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgY2hhciBoX3NvdXJjZVtFVEhfQUxFTl07CiAgX19iZTE2IGhfcHJvdG87CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9saW5rLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2xpbmsuaAppbmRleCA0YjRhODQ0Li5hYTUzZjBlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2xpbmsuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2xpbmsuaApAQCAtMTQ5LDE1MSArMTQ5LDIyMSBAQAogIElGTEFfTlVNX1RYX1FVRVVFUywKICBJRkxBX05VTV9SWF9RVUVVRVMsCiAgSUZMQV9DQVJSSUVSLAotIF9fSUZMQV9NQVgKKyBJRkxBX1BIWVNfUE9SVF9JRCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19JRkxBX01BWAogfTsKICNkZWZpbmUgSUZMQV9NQVggKF9fSUZMQV9NQVggLSAxKQogI2RlZmluZSBJRkxBX1JUQShyKSAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmaW5mb21zZykpKSkKLSNkZWZpbmUgSUZMQV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IGlmaW5mb21zZykpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJRkxBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSkKIGVudW0gewogIElGTEFfSU5FVF9VTlNQRUMsCiAgSUZMQV9JTkVUX0NPTkYsCi0gX19JRkxBX0lORVRfTUFYLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX0lGTEFfSU5FVF9NQVgsCiB9OwogI2RlZmluZSBJRkxBX0lORVRfTUFYIChfX0lGTEFfSU5FVF9NQVggLSAxKQogZW51bSB7Ci0gSUZMQV9JTkVUNl9VTlNQRUMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfSU5FVDZfVU5TUEVDLAogIElGTEFfSU5FVDZfRkxBR1MsCiAgSUZMQV9JTkVUNl9DT05GLAogIElGTEFfSU5FVDZfU1RBVFMsCi0gSUZMQV9JTkVUNl9NQ0FTVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9JTkVUNl9NQ0FTVCwKICBJRkxBX0lORVQ2X0NBQ0hFSU5GTywKICBJRkxBX0lORVQ2X0lDTVA2U1RBVFMsCiAgSUZMQV9JTkVUNl9UT0tFTiwKLSBfX0lGTEFfSU5FVDZfTUFYCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fSUZMQV9JTkVUNl9NQVgKIH07CiAjZGVmaW5lIElGTEFfSU5FVDZfTUFYIChfX0lGTEFfSU5FVDZfTUFYIC0gMSkKIGVudW0gewotIEJSSURHRV9NT0RFX1VOU1BFQywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgQlJJREdFX01PREVfVU5TUEVDLAogIEJSSURHRV9NT0RFX0hBSVJQSU4sCiB9OwogZW51bSB7Ci0gSUZMQV9CUlBPUlRfVU5TUEVDLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX0JSUE9SVF9VTlNQRUMsCiAgSUZMQV9CUlBPUlRfU1RBVEUsCiAgSUZMQV9CUlBPUlRfUFJJT1JJVFksCiAgSUZMQV9CUlBPUlRfQ09TVCwKLSBJRkxBX0JSUE9SVF9NT0RFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX0JSUE9SVF9NT0RFLAogIElGTEFfQlJQT1JUX0dVQVJELAogIElGTEFfQlJQT1JUX1BST1RFQ1QsCiAgSUZMQV9CUlBPUlRfRkFTVF9MRUFWRSwKLSBfX0lGTEFfQlJQT1JUX01BWAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX0JSUE9SVF9MRUFSTklORywKKyBJRkxBX0JSUE9SVF9VTklDQVNUX0ZMT09ELAorIF9fSUZMQV9CUlBPUlRfTUFYCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZMQV9CUlBPUlRfTUFYIChfX0lGTEFfQlJQT1JUX01BWCAtIDEpCiBzdHJ1Y3QgaWZsYV9jYWNoZWluZm8gewogIF9fdTMyIG1heF9yZWFzbV9sZW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHRzdGFtcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVhY2hhYmxlX3RpbWU7CiAgX191MzIgcmV0cmFuc190aW1lOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSUZMQV9JTkZPX1VOU1BFQywKICBJRkxBX0lORk9fS0lORCwKICBJRkxBX0lORk9fREFUQSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSUZMQV9JTkZPX1hTVEFUUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9JTkZPX1NMQVZFX0tJTkQsCisgSUZMQV9JTkZPX1NMQVZFX0RBVEEsCiAgX19JRkxBX0lORk9fTUFYLAogfTsKLSNkZWZpbmUgSUZMQV9JTkZPX01BWCAoX19JRkxBX0lORk9fTUFYIC0gMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElGTEFfSU5GT19NQVggKF9fSUZMQV9JTkZPX01BWCAtIDEpCiBlbnVtIHsKICBJRkxBX1ZMQU5fVU5TUEVDLAogIElGTEFfVkxBTl9JRCwKLSBJRkxBX1ZMQU5fRkxBR1MsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfVkxBTl9GTEFHUywKICBJRkxBX1ZMQU5fRUdSRVNTX1FPUywKICBJRkxBX1ZMQU5fSU5HUkVTU19RT1MsCiAgSUZMQV9WTEFOX1BST1RPQ09MLAotIF9fSUZMQV9WTEFOX01BWCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19JRkxBX1ZMQU5fTUFYLAogfTsKICNkZWZpbmUgSUZMQV9WTEFOX01BWCAoX19JRkxBX1ZMQU5fTUFYIC0gMSkKIHN0cnVjdCBpZmxhX3ZsYW5fZmxhZ3MgewotIF9fdTMyIGZsYWdzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBmbGFnczsKICBfX3UzMiBtYXNrOwogfTsKIGVudW0gewotIElGTEFfVkxBTl9RT1NfVU5TUEVDLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX1ZMQU5fUU9TX1VOU1BFQywKICBJRkxBX1ZMQU5fUU9TX01BUFBJTkcsCiAgX19JRkxBX1ZMQU5fUU9TX01BWAogfTsKLSNkZWZpbmUgSUZMQV9WTEFOX1FPU19NQVggKF9fSUZMQV9WTEFOX1FPU19NQVggLSAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZMQV9WTEFOX1FPU19NQVggKF9fSUZMQV9WTEFOX1FPU19NQVggLSAxKQogc3RydWN0IGlmbGFfdmxhbl9xb3NfbWFwcGluZyB7CiAgX191MzIgZnJvbTsKICBfX3UzMiB0bzsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIGVudW0gewogIElGTEFfTUFDVkxBTl9VTlNQRUMsCiAgSUZMQV9NQUNWTEFOX01PREUsCi0gSUZMQV9NQUNWTEFOX0ZMQUdTLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX01BQ1ZMQU5fRkxBR1MsCiAgX19JRkxBX01BQ1ZMQU5fTUFYLAogfTsKICNkZWZpbmUgSUZMQV9NQUNWTEFOX01BWCAoX19JRkxBX01BQ1ZMQU5fTUFYIC0gMSkKLWVudW0gbWFjdmxhbl9tb2RlIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIG1hY3ZsYW5fbW9kZSB7CiAgTUFDVkxBTl9NT0RFX1BSSVZBVEUgPSAxLAogIE1BQ1ZMQU5fTU9ERV9WRVBBID0gMiwKICBNQUNWTEFOX01PREVfQlJJREdFID0gNCwKLSBNQUNWTEFOX01PREVfUEFTU1RIUlUgPSA4LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBNQUNWTEFOX01PREVfUEFTU1RIUlUgPSA4LAogfTsKICNkZWZpbmUgTUFDVkxBTl9GTEFHX05PUFJPTUlTQyAxCiBlbnVtIHsKLSBJRkxBX1ZYTEFOX1VOU1BFQywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9WWExBTl9VTlNQRUMsCiAgSUZMQV9WWExBTl9JRCwKICBJRkxBX1ZYTEFOX0dST1VQLAogIElGTEFfVlhMQU5fTElOSywKLSBJRkxBX1ZYTEFOX0xPQ0FMLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX1ZYTEFOX0xPQ0FMLAogIElGTEFfVlhMQU5fVFRMLAogIElGTEFfVlhMQU5fVE9TLAogIElGTEFfVlhMQU5fTEVBUk5JTkcsCi0gSUZMQV9WWExBTl9BR0VJTkcsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfVlhMQU5fQUdFSU5HLAogIElGTEFfVlhMQU5fTElNSVQsCiAgSUZMQV9WWExBTl9QT1JUX1JBTkdFLAogIElGTEFfVlhMQU5fUFJPWFksCi0gSUZMQV9WWExBTl9SU0MsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfVlhMQU5fUlNDLAogIElGTEFfVlhMQU5fTDJNSVNTLAogIElGTEFfVlhMQU5fTDNNSVNTLAogIElGTEFfVlhMQU5fUE9SVCwKLSBfX0lGTEFfVlhMQU5fTUFYCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfVlhMQU5fR1JPVVA2LAorIElGTEFfVlhMQU5fTE9DQUw2LAorIF9fSUZMQV9WWExBTl9NQVgKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRkxBX1ZYTEFOX01BWCAoX19JRkxBX1ZYTEFOX01BWCAtIDEpCiBzdHJ1Y3QgaWZsYV92eGxhbl9wb3J0X3JhbmdlIHsKICBfX2JlMTYgbG93OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2JlMTYgaGlnaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSB7CisgSUZMQV9CT05EX1VOU1BFQywKKyBJRkxBX0JPTkRfTU9ERSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9CT05EX0FDVElWRV9TTEFWRSwKKyBJRkxBX0JPTkRfTUlJTU9OLAorIElGTEFfQk9ORF9VUERFTEFZLAorIElGTEFfQk9ORF9ET1dOREVMQVksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfQk9ORF9VU0VfQ0FSUklFUiwKKyBJRkxBX0JPTkRfQVJQX0lOVEVSVkFMLAorIElGTEFfQk9ORF9BUlBfSVBfVEFSR0VULAorIElGTEFfQk9ORF9BUlBfVkFMSURBVEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfQk9ORF9BUlBfQUxMX1RBUkdFVFMsCisgSUZMQV9CT05EX1BSSU1BUlksCisgSUZMQV9CT05EX1BSSU1BUllfUkVTRUxFQ1QsCisgSUZMQV9CT05EX0ZBSUxfT1ZFUl9NQUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfQk9ORF9YTUlUX0hBU0hfUE9MSUNZLAorIElGTEFfQk9ORF9SRVNFTkRfSUdNUCwKKyBJRkxBX0JPTkRfTlVNX1BFRVJfTk9USUYsCisgSUZMQV9CT05EX0FMTF9TTEFWRVNfQUNUSVZFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX0JPTkRfTUlOX0xJTktTLAorIElGTEFfQk9ORF9MUF9JTlRFUlZBTCwKKyBJRkxBX0JPTkRfUEFDS0VUU19QRVJfU0xBVkUsCisgSUZMQV9CT05EX0FEX0xBQ1BfUkFURSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9CT05EX0FEX1NFTEVDVCwKKyBJRkxBX0JPTkRfQURfSU5GTywKKyBfX0lGTEFfQk9ORF9NQVgsCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZMQV9CT05EX01BWCAoX19JRkxBX0JPTkRfTUFYIC0gMSkKK2VudW0geworIElGTEFfQk9ORF9BRF9JTkZPX1VOU1BFQywKKyBJRkxBX0JPTkRfQURfSU5GT19BR0dSRUdBVE9SLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX0JPTkRfQURfSU5GT19OVU1fUE9SVFMsCisgSUZMQV9CT05EX0FEX0lORk9fQUNUT1JfS0VZLAorIElGTEFfQk9ORF9BRF9JTkZPX1BBUlRORVJfS0VZLAorIElGTEFfQk9ORF9BRF9JTkZPX1BBUlRORVJfTUFDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX0lGTEFfQk9ORF9BRF9JTkZPX01BWCwKK307CisjZGVmaW5lIElGTEFfQk9ORF9BRF9JTkZPX01BWCAoX19JRkxBX0JPTkRfQURfSU5GT19NQVggLSAxKQorZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfQk9ORF9TTEFWRV9VTlNQRUMsCisgSUZMQV9CT05EX1NMQVZFX1NUQVRFLAorIElGTEFfQk9ORF9TTEFWRV9NSUlfU1RBVFVTLAorIElGTEFfQk9ORF9TTEFWRV9MSU5LX0ZBSUxVUkVfQ09VTlQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfQk9ORF9TTEFWRV9QRVJNX0hXQUREUiwKKyBJRkxBX0JPTkRfU0xBVkVfUVVFVUVfSUQsCisgSUZMQV9CT05EX1NMQVZFX0FEX0FHR1JFR0FUT1JfSUQsCisgX19JRkxBX0JPTkRfU0xBVkVfTUFYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIElGTEFfQk9ORF9TTEFWRV9NQVggKF9fSUZMQV9CT05EX1NMQVZFX01BWCAtIDEpCitlbnVtIHsKICBJRkxBX1ZGX0lORk9fVU5TUEVDLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkxBX1ZGX0lORk8sCkBAIC0zMDgsMTA0ICszNzgsMTMxIEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfVkZfVFhfUkFURSwKICBJRkxBX1ZGX1NQT09GQ0hLLAorIElGTEFfVkZfTElOS19TVEFURSwKICBfX0lGTEFfVkZfTUFYLAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBJRkxBX1ZGX01BWCAoX19JRkxBX1ZGX01BWCAtIDEpCiBzdHJ1Y3QgaWZsYV92Zl9tYWMgewogIF9fdTMyIHZmOwotIF9fdTggbWFjWzMyXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBtYWNbMzJdOwogfTsKIHN0cnVjdCBpZmxhX3ZmX3ZsYW4gewogIF9fdTMyIHZmOwotIF9fdTMyIHZsYW47CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHZsYW47CiAgX191MzIgcW9zOwogfTsKIHN0cnVjdCBpZmxhX3ZmX3R4X3JhdGUgewotIF9fdTMyIHZmOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB2ZjsKICBfX3UzMiByYXRlOwogfTsKIHN0cnVjdCBpZmxhX3ZmX3Nwb29mY2hrIHsKLSBfX3UzMiB2ZjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdmY7CiAgX191MzIgc2V0dGluZzsKIH07CiBlbnVtIHsKLSBJRkxBX1ZGX1BPUlRfVU5TUEVDLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX1ZGX0xJTktfU1RBVEVfQVVUTywKKyBJRkxBX1ZGX0xJTktfU1RBVEVfRU5BQkxFLAorIElGTEFfVkZfTElOS19TVEFURV9ESVNBQkxFLAorIF9fSUZMQV9WRl9MSU5LX1NUQVRFX01BWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Oworc3RydWN0IGlmbGFfdmZfbGlua19zdGF0ZSB7CisgX191MzIgdmY7CisgX191MzIgbGlua19zdGF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworZW51bSB7CisgSUZMQV9WRl9QT1JUX1VOU1BFQywKICBJRkxBX1ZGX1BPUlQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fSUZMQV9WRl9QT1JUX01BWCwKIH07CiAjZGVmaW5lIElGTEFfVkZfUE9SVF9NQVggKF9fSUZMQV9WRl9QT1JUX01BWCAtIDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfUE9SVF9VTlNQRUMsCiAgSUZMQV9QT1JUX1ZGLAogIElGTEFfUE9SVF9QUk9GSUxFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkxBX1BPUlRfVlNJX1RZUEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfUE9SVF9JTlNUQU5DRV9VVUlELAogIElGTEFfUE9SVF9IT1NUX1VVSUQsCiAgSUZMQV9QT1JUX1JFUVVFU1QsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfUE9SVF9SRVNQT05TRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19JRkxBX1BPUlRfTUFYLAogfTsKICNkZWZpbmUgSUZMQV9QT1JUX01BWCAoX19JRkxBX1BPUlRfTUFYIC0gMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBPUlRfUFJPRklMRV9NQVggNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBPUlRfVVVJRF9NQVggMTYKICNkZWZpbmUgUE9SVF9TRUxGX1ZGIC0xCiBlbnVtIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUE9SVF9SRVFVRVNUX1BSRUFTU09DSUFURSA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBPUlRfUkVRVUVTVF9QUkVBU1NPQ0lBVEVfUlIsCiAgUE9SVF9SRVFVRVNUX0FTU09DSUFURSwKICBQT1JUX1JFUVVFU1RfRElTQVNTT0NJQVRFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgUE9SVF9WRFBfUkVTUE9OU0VfU1VDQ0VTUyA9IDAsCiAgUE9SVF9WRFBfUkVTUE9OU0VfSU5WQUxJRF9GT1JNQVQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBPUlRfVkRQX1JFU1BPTlNFX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBPUlRfVkRQX1JFU1BPTlNFX1VOVVNFRF9WVElELAogIFBPUlRfVkRQX1JFU1BPTlNFX1ZUSURfVklPTEFUSU9OLAogIFBPUlRfVkRQX1JFU1BPTlNFX1ZUSURfVkVSU0lPTl9WSU9BTFRJT04sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBPUlRfVkRQX1JFU1BPTlNFX09VVF9PRl9TWU5DLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQT1JUX1BST0ZJTEVfUkVTUE9OU0VfU1VDQ0VTUyA9IDB4MTAwLAogIFBPUlRfUFJPRklMRV9SRVNQT05TRV9JTlBST0dSRVNTLAogIFBPUlRfUFJPRklMRV9SRVNQT05TRV9JTlZBTElELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQT1JUX1BST0ZJTEVfUkVTUE9OU0VfQkFEU1RBVEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBPUlRfUFJPRklMRV9SRVNQT05TRV9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTLAogIFBPUlRfUFJPRklMRV9SRVNQT05TRV9FUlJPUiwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlmbGFfcG9ydF92c2kgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHZzaV9tZ3JfaWQ7CiAgX191OCB2c2lfdHlwZV9pZFszXTsKICBfX3U4IHZzaV90eXBlX3ZlcnNpb247Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcGFkWzNdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIHsKICBJRkxBX0lQT0lCX1VOU1BFQywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSUZMQV9JUE9JQl9QS0VZLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkxBX0lQT0lCX01PREUsCiAgSUZMQV9JUE9JQl9VTUNBU1QsCiAgX19JRkxBX0lQT0lCX01BWAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgSVBPSUJfTU9ERV9EQVRBR1JBTSA9IDAsCiAgSVBPSUJfTU9ERV9DT05ORUNURUQgPSAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRkxBX0lQT0lCX01BWCAoX19JRkxBX0lQT0lCX01BWCAtIDEpCitlbnVtIHsKKyBJRkxBX0hTUl9VTlNQRUMsCisgSUZMQV9IU1JfU0xBVkUxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX0hTUl9TTEFWRTIsCisgSUZMQV9IU1JfTVVMVElDQVNUX1NQRUMsCisgSUZMQV9IU1JfU1VQRVJWSVNJT05fQUREUiwKKyBJRkxBX0hTUl9TRVFfTlIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fSUZMQV9IU1JfTUFYLAorfTsKKyNkZWZpbmUgSUZMQV9IU1JfTUFYIChfX0lGTEFfSFNSX01BWCAtIDEpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX3BhY2tldC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9wYWNrZXQuaAppbmRleCBhZTViMzkyLi4xMzNjNzdiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX3BhY2tldC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfcGFja2V0LmgKQEAgLTQ0LDIwNiArNDQsMjE4IEBACiAjZGVmaW5lIFBBQ0tFVF9PVEhFUkhPU1QgMwogI2RlZmluZSBQQUNLRVRfT1VUR09JTkcgNAogI2RlZmluZSBQQUNLRVRfTE9PUEJBQ0sgNQotI2RlZmluZSBQQUNLRVRfRkFTVFJPVVRFIDYKKyNkZWZpbmUgUEFDS0VUX1VTRVIgNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUEFDS0VUX0tFUk5FTCA3CisjZGVmaW5lIFBBQ0tFVF9GQVNUUk9VVEUgNgogI2RlZmluZSBQQUNLRVRfQUREX01FTUJFUlNISVAgMQogI2RlZmluZSBQQUNLRVRfRFJPUF9NRU1CRVJTSElQIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBBQ0tFVF9SRUNWX09VVFBVVCAzCiAjZGVmaW5lIFBBQ0tFVF9SWF9SSU5HIDUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBBQ0tFVF9TVEFUSVNUSUNTIDYKICNkZWZpbmUgUEFDS0VUX0NPUFlfVEhSRVNIIDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBBQ0tFVF9BVVhEQVRBIDgKICNkZWZpbmUgUEFDS0VUX09SSUdERVYgOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEFDS0VUX1ZFUlNJT04gMTAKICNkZWZpbmUgUEFDS0VUX0hEUkxFTiAxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEFDS0VUX1JFU0VSVkUgMTIKICNkZWZpbmUgUEFDS0VUX1RYX1JJTkcgMTMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBBQ0tFVF9MT1NTIDE0CiAjZGVmaW5lIFBBQ0tFVF9WTkVUX0hEUiAxNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEFDS0VUX1RYX1RJTUVTVEFNUCAxNgogI2RlZmluZSBQQUNLRVRfVElNRVNUQU1QIDE3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQUNLRVRfRkFOT1VUIDE4CiAjZGVmaW5lIFBBQ0tFVF9UWF9IQVNfT0ZGIDE5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQUNLRVRfUURJU0NfQllQQVNTIDIwCiAjZGVmaW5lIFBBQ0tFVF9GQU5PVVRfSEFTSCAwCiAjZGVmaW5lIFBBQ0tFVF9GQU5PVVRfTEIgMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEFDS0VUX0ZBTk9VVF9DUFUgMgotI2RlZmluZSBQQUNLRVRfRkFOT1VUX1JPTExPVkVSIDMKLSNkZWZpbmUgUEFDS0VUX0ZBTk9VVF9GTEFHX1JPTExPVkVSIDB4MTAwMAotI2RlZmluZSBQQUNLRVRfRkFOT1VUX0ZMQUdfREVGUkFHIDB4ODAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUEFDS0VUX0ZBTk9VVF9ST0xMT1ZFUiAzCisjZGVmaW5lIFBBQ0tFVF9GQU5PVVRfUk5EIDQKKyNkZWZpbmUgUEFDS0VUX0ZBTk9VVF9RTSA1CisjZGVmaW5lIFBBQ0tFVF9GQU5PVVRfRkxBR19ST0xMT1ZFUiAweDEwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBBQ0tFVF9GQU5PVVRfRkxBR19ERUZSQUcgMHg4MDAwCiBzdHJ1Y3QgdHBhY2tldF9zdGF0cyB7CiAgdW5zaWduZWQgaW50IHRwX3BhY2tldHM7CiAgdW5zaWduZWQgaW50IHRwX2Ryb3BzOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IHRwYWNrZXRfc3RhdHNfdjMgewogIHVuc2lnbmVkIGludCB0cF9wYWNrZXRzOwogIHVuc2lnbmVkIGludCB0cF9kcm9wczsKLSB1bnNpZ25lZCBpbnQgdHBfZnJlZXplX3FfY250OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgdHBfZnJlZXplX3FfY250OwogfTsKIHVuaW9uIHRwYWNrZXRfc3RhdHNfdSB7CiAgc3RydWN0IHRwYWNrZXRfc3RhdHMgc3RhdHMxOwotIHN0cnVjdCB0cGFja2V0X3N0YXRzX3YzIHN0YXRzMzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHRwYWNrZXRfc3RhdHNfdjMgc3RhdHMzOwogfTsKIHN0cnVjdCB0cGFja2V0X2F1eGRhdGEgewogIF9fdTMyIHRwX3N0YXR1czsKLSBfX3UzMiB0cF9sZW47CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHRwX2xlbjsKICBfX3UzMiB0cF9zbmFwbGVuOwogIF9fdTE2IHRwX21hYzsKICBfX3UxNiB0cF9uZXQ7Ci0gX191MTYgdHBfdmxhbl90Y2k7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIF9fdTE2IHRwX3BhZGRpbmc7CisgX191MTYgdHBfdmxhbl90Y2k7CisgX191MTYgdHBfdmxhbl90cGlkOwogfTsKICNkZWZpbmUgVFBfU1RBVFVTX0tFUk5FTCAwCi0jZGVmaW5lIFRQX1NUQVRVU19VU0VSICgxIDw8IDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUUF9TVEFUVVNfVVNFUiAoMSA8PCAwKQogI2RlZmluZSBUUF9TVEFUVVNfQ09QWSAoMSA8PCAxKQogI2RlZmluZSBUUF9TVEFUVVNfTE9TSU5HICgxIDw8IDIpCiAjZGVmaW5lIFRQX1NUQVRVU19DU1VNTk9UUkVBRFkgKDEgPDwgMykKLSNkZWZpbmUgVFBfU1RBVFVTX1ZMQU5fVkFMSUQgKDEgPDwgNCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRQX1NUQVRVU19WTEFOX1ZBTElEICgxIDw8IDQpCiAjZGVmaW5lIFRQX1NUQVRVU19CTEtfVE1PICgxIDw8IDUpCisjZGVmaW5lIFRQX1NUQVRVU19WTEFOX1RQSURfVkFMSUQgKDEgPDwgNikKICNkZWZpbmUgVFBfU1RBVFVTX0FWQUlMQUJMRSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUUF9TVEFUVVNfU0VORF9SRVFVRVNUICgxIDw8IDApCiAjZGVmaW5lIFRQX1NUQVRVU19TRU5ESU5HICgxIDw8IDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUUF9TVEFUVVNfV1JPTkdfRk9STUFUICgxIDw8IDIpCiAjZGVmaW5lIFRQX1NUQVRVU19UU19TT0ZUV0FSRSAoMSA8PCAyOSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRQX1NUQVRVU19UU19TWVNfSEFSRFdBUkUgKDEgPDwgMzApCiAjZGVmaW5lIFRQX1NUQVRVU19UU19SQVdfSEFSRFdBUkUgKDEgPDwgMzEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUUF9GVF9SRVFfRklMTF9SWEhBU0ggMHgxCiBzdHJ1Y3QgdHBhY2tldF9oZHIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHRwX3N0YXR1czsKICB1bnNpZ25lZCBpbnQgdHBfbGVuOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgdHBfc25hcGxlbjsKICB1bnNpZ25lZCBzaG9ydCB0cF9tYWM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IHRwX25ldDsKICB1bnNpZ25lZCBpbnQgdHBfc2VjOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgdHBfdXNlYzsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUUEFDS0VUX0FMSUdOTUVOVCAxNgogI2RlZmluZSBUUEFDS0VUX0FMSUdOKHgpICgoKHgpK1RQQUNLRVRfQUxJR05NRU5ULTEpJn4oVFBBQ0tFVF9BTElHTk1FTlQtMSkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUUEFDS0VUX0hEUkxFTiAoVFBBQ0tFVF9BTElHTihzaXplb2Yoc3RydWN0IHRwYWNrZXRfaGRyKSkgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSkKIHN0cnVjdCB0cGFja2V0Ml9oZHIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0cF9zdGF0dXM7CiAgX191MzIgdHBfbGVuOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0cF9zbmFwbGVuOwogIF9fdTE2IHRwX21hYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgdHBfbmV0OwogIF9fdTMyIHRwX3NlYzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdHBfbnNlYzsKICBfX3UxNiB0cF92bGFuX3RjaTsKLSBfX3UxNiB0cF9wYWRkaW5nOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgdHBfdmxhbl90cGlkOworIF9fdTggdHBfcGFkZGluZ1s0XTsKK307CiBzdHJ1Y3QgdHBhY2tldF9oZHJfdmFyaWFudDEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0cF9yeGhhc2g7CiAgX191MzIgdHBfdmxhbl90Y2k7Ci19OworIF9fdTE2IHRwX3ZsYW5fdHBpZDsKKyBfX3UxNiB0cF9wYWRkaW5nOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgdHBhY2tldDNfaGRyIHsKICBfX3UzMiB0cF9uZXh0X29mZnNldDsKICBfX3UzMiB0cF9zZWM7Ci0gX191MzIgdHBfbnNlYzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdHBfbnNlYzsKICBfX3UzMiB0cF9zbmFwbGVuOwogIF9fdTMyIHRwX2xlbjsKICBfX3UzMiB0cF9zdGF0dXM7Ci0gX191MTYgdHBfbWFjOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UxNiB0cF9tYWM7CiAgX191MTYgdHBfbmV0OwogIHVuaW9uIHsKICBzdHJ1Y3QgdHBhY2tldF9oZHJfdmFyaWFudDEgaHYxOwotIH07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIH07CisgX191OCB0cF9wYWRkaW5nWzhdOwogfTsKIHN0cnVjdCB0cGFja2V0X2JkX3RzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHRzX3NlYzsKICB1bmlvbiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCB0c191c2VjOwogIHVuc2lnbmVkIGludCB0c19uc2VjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdHBhY2tldF9oZHJfdjEgewogIF9fdTMyIGJsb2NrX3N0YXR1czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbnVtX3BrdHM7CiAgX191MzIgb2Zmc2V0X3RvX2ZpcnN0X3BrdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYmxrX2xlbjsKICBfX2FsaWduZWRfdTY0IHNlcV9udW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB0cGFja2V0X2JkX3RzIHRzX2ZpcnN0X3BrdCwgdHNfbGFzdF9wa3Q7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHVuaW9uIHRwYWNrZXRfYmRfaGVhZGVyX3UgewogIHN0cnVjdCB0cGFja2V0X2hkcl92MSBiaDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB0cGFja2V0X2Jsb2NrX2Rlc2MgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB2ZXJzaW9uOwogIF9fdTMyIG9mZnNldF90b19wcml2OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB0cGFja2V0X2JkX2hlYWRlcl91IGhkcjsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUUEFDS0VUMl9IRFJMRU4gKFRQQUNLRVRfQUxJR04oc2l6ZW9mKHN0cnVjdCB0cGFja2V0Ml9oZHIpKSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKQogI2RlZmluZSBUUEFDS0VUM19IRFJMRU4gKFRQQUNLRVRfQUxJR04oc2l6ZW9mKHN0cnVjdCB0cGFja2V0M19oZHIpKSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdHBhY2tldF92ZXJzaW9ucyB7CiAgVFBBQ0tFVF9WMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVFBBQ0tFVF9WMiwKICBUUEFDS0VUX1YzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB0cGFja2V0X3JlcSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCB0cF9ibG9ja19zaXplOwogIHVuc2lnbmVkIGludCB0cF9ibG9ja19ucjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHRwX2ZyYW1lX3NpemU7CiAgdW5zaWduZWQgaW50IHRwX2ZyYW1lX25yOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdHBhY2tldF9yZXEzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHRwX2Jsb2NrX3NpemU7CiAgdW5zaWduZWQgaW50IHRwX2Jsb2NrX25yOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgdHBfZnJhbWVfc2l6ZTsKICB1bnNpZ25lZCBpbnQgdHBfZnJhbWVfbnI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCB0cF9yZXRpcmVfYmxrX3RvdjsKICB1bnNpZ25lZCBpbnQgdHBfc2l6ZW9mX3ByaXY7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCB0cF9mZWF0dXJlX3JlcV93b3JkOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB1bmlvbiB0cGFja2V0X3JlcV91IHsKICBzdHJ1Y3QgdHBhY2tldF9yZXEgcmVxOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdHBhY2tldF9yZXEzIHJlcTM7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBwYWNrZXRfbXJlcSB7CiAgaW50IG1yX2lmaW5kZXg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IG1yX3R5cGU7CiAgdW5zaWduZWQgc2hvcnQgbXJfYWxlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBtcl9hZGRyZXNzWzhdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBBQ0tFVF9NUl9NVUxUSUNBU1QgMAogI2RlZmluZSBQQUNLRVRfTVJfUFJPTUlTQyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQUNLRVRfTVJfQUxMTVVMVEkgMgogI2RlZmluZSBQQUNLRVRfTVJfVU5JQ0FTVCAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX3BwcG94LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX3BwcG94LmgKaW5kZXggM2VjYWYxMi4uM2JjMmRkYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9wcHBveC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfcHBwb3guaApAQCAtMjQsMzQgKzI0LDI5IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9wcHBvbDJ0cC5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX3BwcG9sYWMuaD4KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jaW5jbHVkZSA8bGludXgvaWZfcHBwb3Bucy5oPgogI2lmbmRlZiBBRl9QUFBPWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUZfUFBQT1ggMjQKICNkZWZpbmUgUEZfUFBQT1ggQUZfUFBQT1gKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKIHR5cGVkZWYgX19iZTE2IHNpZF90OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBwcHBvZV9hZGRyIHsKICBzaWRfdCBzaWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgcmVtb3RlW0VUSF9BTEVOXTsKICBjaGFyIGRldltJRk5BTVNJWl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBwcHRwX2FkZHIgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBfX2JlMTYgY2FsbF9pZDsKKyBfX3UxNiBjYWxsX2lkOwogIHN0cnVjdCBpbl9hZGRyIHNpbl9hZGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFBYX1BST1RPX09FIDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBYX1BST1RPX09MMlRQIDEKICNkZWZpbmUgUFhfUFJPVE9fUFBUUCAyCi0jZGVmaW5lIFBYX1BST1RPX09MQUMgMwotI2RlZmluZSBQWF9QUk9UT19PUE5TIDQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBYX01BWF9QUk9UTyA1CisjZGVmaW5lIFBYX01BWF9QUk9UTyAzCiBzdHJ1Y3Qgc29ja2FkZHJfcHBwb3ggewogIF9fa2VybmVsX3NhX2ZhbWlseV90IHNhX2ZhbWlseTsKICB1bnNpZ25lZCBpbnQgc2FfcHJvdG9jb2w7CkBAIC0xMTcsMTIgKzExMiwxMiBAQAogc3RydWN0IHBwcG9lX2hkciB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIF9fTElUVExFX0VORElBTl9CSVRGSUVMRAotIF9fdTggdmVyIDogNDsKICBfX3U4IHR5cGUgOiA0OworIF9fdTggdmVyIDogNDsKICNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBfX3U4IHR5cGUgOiA0OwogIF9fdTggdmVyIDogNDsKKyBfX3U4IHR5cGUgOiA0OwogI2Vsc2UKICNlcnJvciAiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX3R1bi5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl90dW4uaAppbmRleCBlZGNmN2U0Li5mOGY4MGI5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX3R1bi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfdHVuLmgKQEAgLTU4LDM2ICs1OCw0MiBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVFVOU0VUVk5FVEhEUlNaIF9JT1coJ1QnLCAyMTYsIGludCkKICNkZWZpbmUgVFVOU0VUUVVFVUUgX0lPVygnVCcsIDIxNywgaW50KQorI2RlZmluZSBUVU5TRVRJRklOREVYIF9JT1coJ1QnLCAyMTgsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgVFVOR0VURklMVEVSIF9JT1IoJ1QnLCAyMTksIHN0cnVjdCBzb2NrX2Zwcm9nKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZGX1RVTiAweDAwMDEKICNkZWZpbmUgSUZGX1RBUCAweDAwMDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElGRl9OT19QSSAweDEwMDAKICNkZWZpbmUgSUZGX09ORV9RVUVVRSAweDIwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElGRl9WTkVUX0hEUiAweDQwMDAKICNkZWZpbmUgSUZGX1RVTl9FWENMIDB4ODAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZGX01VTFRJX1FVRVVFIDB4MDEwMAogI2RlZmluZSBJRkZfQVRUQUNIX1FVRVVFIDB4MDIwMAotI2RlZmluZSBJRkZfREVUQUNIX1FVRVVFIDB4MDQwMAotI2RlZmluZSBUVU5fRl9DU1VNIDB4MDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElGRl9ERVRBQ0hfUVVFVUUgMHgwNDAwCisjZGVmaW5lIElGRl9QRVJTSVNUIDB4MDgwMAorI2RlZmluZSBJRkZfTk9GSUxURVIgMHgxMDAwCisjZGVmaW5lIFRVTl9UWF9USU1FU1RBTVAgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVFVOX0ZfQ1NVTSAweDAxCiAjZGVmaW5lIFRVTl9GX1RTTzQgMHgwMgogI2RlZmluZSBUVU5fRl9UU082IDB4MDQKICNkZWZpbmUgVFVOX0ZfVFNPX0VDTiAweDA4Ci0jZGVmaW5lIFRVTl9GX1VGTyAweDEwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUVU5fRl9VRk8gMHgxMAogI2RlZmluZSBUVU5fUEtUX1NUUklQIDB4MDAwMQogc3RydWN0IHR1bl9waSB7CiAgX191MTYgZmxhZ3M7Ci0gX19iZTE2IHByb3RvOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMTYgcHJvdG87CiB9OwogI2RlZmluZSBUVU5fRkxUX0FMTE1VTFRJIDB4MDAwMQogc3RydWN0IHR1bl9maWx0ZXIgewotIF9fdTE2IGZsYWdzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UxNiBmbGFnczsKICBfX3UxNiBjb3VudDsKICBfX3U4IGFkZHJbMF1bRVRIX0FMRU5dOwogfTsKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pbi5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pbi5oCmluZGV4IDQ1MDQxMzIuLmU5MDIwOWIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaW4uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2luLmgKQEAgLTIzLDcyICsyMywxMDcgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBJUFBST1RPX0lQID0gMCwKKyNkZWZpbmUgSVBQUk9UT19JUCBJUFBST1RPX0lQCiAgSVBQUk9UT19JQ01QID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQUFJPVE9fSUNNUCBJUFBST1RPX0lDTVAKICBJUFBST1RPX0lHTVAgPSAyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBQUk9UT19JR01QIElQUFJPVE9fSUdNUAogIElQUFJPVE9fSVBJUCA9IDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFBST1RPX0lQSVAgSVBQUk9UT19JUElQCiAgSVBQUk9UT19UQ1AgPSA2LAorI2RlZmluZSBJUFBST1RPX1RDUCBJUFBST1RPX1RDUAogIElQUFJPVE9fRUdQID0gOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQUFJPVE9fRUdQIElQUFJPVE9fRUdQCiAgSVBQUk9UT19QVVAgPSAxMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQUFJPVE9fUFVQIElQUFJPVE9fUFVQCiAgSVBQUk9UT19VRFAgPSAxNywKLSBJUFBST1RPX0lEUCA9IDIyLAotIElQUFJPVE9fRENDUCA9IDMzLAotIElQUFJPVE9fUlNWUCA9IDQ2LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBJUFBST1RPX0dSRSA9IDQ3LAorI2RlZmluZSBJUFBST1RPX1VEUCBJUFBST1RPX1VEUAorIElQUFJPVE9fSURQID0gMjIsCisjZGVmaW5lIElQUFJPVE9fSURQIElQUFJPVE9fSURQCisgSVBQUk9UT19UUCA9IDI5LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBQUk9UT19UUCBJUFBST1RPX1RQCisgSVBQUk9UT19EQ0NQID0gMzMsCisjZGVmaW5lIElQUFJPVE9fRENDUCBJUFBST1RPX0RDQ1AKICBJUFBST1RPX0lQVjYgPSA0MSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQUFJPVE9fSVBWNiBJUFBST1RPX0lQVjYKKyBJUFBST1RPX1JTVlAgPSA0NiwKKyNkZWZpbmUgSVBQUk9UT19SU1ZQIElQUFJPVE9fUlNWUAorIElQUFJPVE9fR1JFID0gNDcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFBST1RPX0dSRSBJUFBST1RPX0dSRQogIElQUFJPVE9fRVNQID0gNTAsCisjZGVmaW5lIElQUFJPVE9fRVNQIElQUFJPVE9fRVNQCiAgSVBQUk9UT19BSCA9IDUxLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBQUk9UT19BSCBJUFBST1RPX0FICisgSVBQUk9UT19NVFAgPSA5MiwKKyNkZWZpbmUgSVBQUk9UT19NVFAgSVBQUk9UT19NVFAKICBJUFBST1RPX0JFRVRQSCA9IDk0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBQUk9UT19CRUVUUEggSVBQUk9UT19CRUVUUEgKKyBJUFBST1RPX0VOQ0FQID0gOTgsCisjZGVmaW5lIElQUFJPVE9fRU5DQVAgSVBQUk9UT19FTkNBUAogIElQUFJPVE9fUElNID0gMTAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBQUk9UT19QSU0gSVBQUk9UT19QSU0KICBJUFBST1RPX0NPTVAgPSAxMDgsCisjZGVmaW5lIElQUFJPVE9fQ09NUCBJUFBST1RPX0NPTVAKICBJUFBST1RPX1NDVFAgPSAxMzIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFBST1RPX1NDVFAgSVBQUk9UT19TQ1RQCiAgSVBQUk9UT19VRFBMSVRFID0gMTM2LAorI2RlZmluZSBJUFBST1RPX1VEUExJVEUgSVBQUk9UT19VRFBMSVRFCiAgSVBQUk9UT19SQVcgPSAyNTUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFBST1RPX1JBVyBJUFBST1RPX1JBVwogIElQUFJPVE9fTUFYCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpbl9hZGRyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTMyIHNfYWRkcjsKIH07CiAjZGVmaW5lIElQX1RPUyAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUF9UVEwgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBfSERSSU5DTCAzCiAjZGVmaW5lIElQX09QVElPTlMgNAogI2RlZmluZSBJUF9ST1VURVJfQUxFUlQgNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBfUkVDVk9QVFMgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBfUkVUT1BUUyA3CiAjZGVmaW5lIElQX1BLVElORk8gOAogI2RlZmluZSBJUF9QS1RPUFRJT05TIDkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQX01UVV9ESVNDT1ZFUiAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBfUkVDVkVSUiAxMQogI2RlZmluZSBJUF9SRUNWVFRMIDEyCiAjZGVmaW5lIElQX1JFQ1ZUT1MgMTMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQX01UVSAxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBfRlJFRUJJTkQgMTUKICNkZWZpbmUgSVBfSVBTRUNfUE9MSUNZIDE2CiAjZGVmaW5lIElQX1hGUk1fUE9MSUNZIDE3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUF9QQVNTU0VDIDE4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUF9UUkFOU1BBUkVOVCAxOQogI2RlZmluZSBJUF9SRUNWUkVUT1BUUyBJUF9SRVRPUFRTCiAjZGVmaW5lIElQX09SSUdEU1RBRERSIDIwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUF9SRUNWT1JJR0RTVEFERFIgSVBfT1JJR0RTVEFERFIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQX01JTlRUTCAyMQogI2RlZmluZSBJUF9OT0RFRlJBRyAyMgogI2RlZmluZSBJUF9QTVRVRElTQ19ET05UIDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQX1BNVFVESVNDX1dBTlQgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBfUE1UVURJU0NfRE8gMgogI2RlZmluZSBJUF9QTVRVRElTQ19QUk9CRSAzCisjZGVmaW5lIElQX1BNVFVESVNDX0lOVEVSRkFDRSA0CiAjZGVmaW5lIElQX01VTFRJQ0FTVF9JRiAzMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBfTVVMVElDQVNUX1RUTCAzMwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pbjYuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaW42LmgKaW5kZXggMGQwMGUyYi4uNjQxYTY5YiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pbjYuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2luNi5oCkBAIC0xOSwxOSArMTksMjkgQEAKICNpZm5kZWYgX1VBUElfTElOVVhfSU42X0gKICNkZWZpbmUgX1VBUElfTElOVVhfSU42X0gKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotc3RydWN0IGluNl9hZGRyIHsKKyNpbmNsdWRlIDxsaW51eC9saWJjLWNvbXBhdC5oPgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNpZiBfX1VBUElfREVGX0lONl9BRERSCitzdHJ1Y3QgaW42X2FkZHIgewogIHVuaW9uIHsKICBfX3U4IHU2X2FkZHI4WzE2XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaWYgX19VQVBJX0RFRl9JTjZfQUREUl9BTFQKICBfX2JlMTYgdTZfYWRkcjE2WzhdOwogIF9fYmUzMiB1Nl9hZGRyMzJbNF07CisjZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBpbjZfdTsKICNkZWZpbmUgczZfYWRkciBpbjZfdS51Nl9hZGRyOAorI2lmIF9fVUFQSV9ERUZfSU42X0FERFJfQUxUCiAjZGVmaW5lIHM2X2FkZHIxNiBpbjZfdS51Nl9hZGRyMTYKLSNkZWZpbmUgczZfYWRkcjMyIGluNl91LnU2X2FkZHIzMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgczZfYWRkcjMyIGluNl91LnU2X2FkZHIzMgorI2VuZGlmCiB9OworI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2lmIF9fVUFQSV9ERUZfU09DS0FERFJfSU42CiBzdHJ1Y3Qgc29ja2FkZHJfaW42IHsKICB1bnNpZ25lZCBzaG9ydCBpbnQgc2luNl9mYW1pbHk7CiAgX19iZTE2IHNpbjZfcG9ydDsKQEAgLTQxLDEwOSArNTEsMTE5IEBACiAgX191MzIgc2luNl9zY29wZV9pZDsKIH07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCisjaWYgX19VQVBJX0RFRl9JUFY2X01SRVEKIHN0cnVjdCBpcHY2X21yZXEgewogIHN0cnVjdCBpbjZfYWRkciBpcHY2bXJfbXVsdGlhZGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgaXB2Nm1yX2lmaW5kZXg7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgogI2RlZmluZSBpcHY2bXJfYWNhZGRyIGlwdjZtcl9tdWx0aWFkZHIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgewogIHN0cnVjdCBpbjZfYWRkciBmbHJfZHN0OwogIF9fYmUzMiBmbHJfbGFiZWw7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggZmxyX2FjdGlvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBmbHJfc2hhcmU7CiAgX191MTYgZmxyX2ZsYWdzOwogIF9fdTE2IGZscl9leHBpcmVzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBmbHJfbGluZ2VyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBfX2Zscl9wYWQ7CiB9OwogI2RlZmluZSBJUFY2X0ZMX0FfR0VUIDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVjZfRkxfQV9QVVQgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9GTF9BX1JFTkVXIDIKICNkZWZpbmUgSVBWNl9GTF9GX0NSRUFURSAxCiAjZGVmaW5lIElQVjZfRkxfRl9FWENMIDIKKyNkZWZpbmUgSVBWNl9GTF9GX1JFRkxFQ1QgNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBWNl9GTF9GX1JFTU9URSA4CiAjZGVmaW5lIElQVjZfRkxfU19OT05FIDAKICNkZWZpbmUgSVBWNl9GTF9TX0VYQ0wgMQogI2RlZmluZSBJUFY2X0ZMX1NfUFJPQ0VTUyAyCi0jZGVmaW5lIElQVjZfRkxfU19VU0VSIDMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQVjZfRkxfU19VU0VSIDMKICNkZWZpbmUgSVBWNl9GTF9TX0FOWSAyNTUKICNkZWZpbmUgSVBWNl9GTE9XSU5GT19GTE9XTEFCRUwgMHgwMDBmZmZmZgogI2RlZmluZSBJUFY2X0ZMT1dJTkZPX1BSSU9SSVRZIDB4MGZmMDAwMDAKLSNkZWZpbmUgSVBWNl9QUklPUklUWV9VTkNIQVJBQ1RFUklaRUQgMHgwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFY2X1BSSU9SSVRZX1VOQ0hBUkFDVEVSSVpFRCAweDAwMDAKICNkZWZpbmUgSVBWNl9QUklPUklUWV9GSUxMRVIgMHgwMTAwCiAjZGVmaW5lIElQVjZfUFJJT1JJVFlfVU5BVFRFTkRFRCAweDAyMDAKICNkZWZpbmUgSVBWNl9QUklPUklUWV9SRVNFUlZFRDEgMHgwMzAwCi0jZGVmaW5lIElQVjZfUFJJT1JJVFlfQlVMSyAweDA0MDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfQlVMSyAweDA0MDAKICNkZWZpbmUgSVBWNl9QUklPUklUWV9SRVNFUlZFRDIgMHgwNTAwCiAjZGVmaW5lIElQVjZfUFJJT1JJVFlfSU5URVJBQ1RJVkUgMHgwNjAwCiAjZGVmaW5lIElQVjZfUFJJT1JJVFlfQ09OVFJPTCAweDA3MDAKLSNkZWZpbmUgSVBWNl9QUklPUklUWV84IDB4MDgwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBWNl9QUklPUklUWV84IDB4MDgwMAogI2RlZmluZSBJUFY2X1BSSU9SSVRZXzkgMHgwOTAwCiAjZGVmaW5lIElQVjZfUFJJT1JJVFlfMTAgMHgwYTAwCiAjZGVmaW5lIElQVjZfUFJJT1JJVFlfMTEgMHgwYjAwCi0jZGVmaW5lIElQVjZfUFJJT1JJVFlfMTIgMHgwYzAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFY2X1BSSU9SSVRZXzEyIDB4MGMwMAogI2RlZmluZSBJUFY2X1BSSU9SSVRZXzEzIDB4MGQwMAogI2RlZmluZSBJUFY2X1BSSU9SSVRZXzE0IDB4MGUwMAogI2RlZmluZSBJUFY2X1BSSU9SSVRZXzE1IDB4MGYwMAotI2RlZmluZSBJUFBST1RPX0hPUE9QVFMgMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNpZiBfX1VBUElfREVGX0lQUFJPVE9fVjYKKyNkZWZpbmUgSVBQUk9UT19IT1BPUFRTIDAKICNkZWZpbmUgSVBQUk9UT19ST1VUSU5HIDQzCiAjZGVmaW5lIElQUFJPVE9fRlJBR01FTlQgNDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQUFJPVE9fSUNNUFY2IDU4CiAjZGVmaW5lIElQUFJPVE9fTk9ORSA1OQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBQUk9UT19EU1RPUFRTIDYwCiAjZGVmaW5lIElQUFJPVE9fTUggMTM1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCiAjZGVmaW5lIElQVjZfVExWX1BBRDEgMAogI2RlZmluZSBJUFY2X1RMVl9QQUROIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVjZfVExWX1JPVVRFUkFMRVJUIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVjZfVExWX0pVTUJPIDE5NAogI2RlZmluZSBJUFY2X1RMVl9IQU8gMjAxCiAjZGVmaW5lIElQVjZfQUREUkZPUk0gMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl8yMjkyUEtUSU5GTyAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2XzIyOTJIT1BPUFRTIDMKICNkZWZpbmUgSVBWNl8yMjkyRFNUT1BUUyA0CiAjZGVmaW5lIElQVjZfMjI5MlJUSERSIDUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVjZfMjI5MlBLVE9QVElPTlMgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9DSEVDS1NVTSA3CiAjZGVmaW5lIElQVjZfMjI5MkhPUExJTUlUIDgKICNkZWZpbmUgSVBWNl9ORVhUSE9QIDkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVjZfQVVUSEhEUiAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9GTE9XSU5GTyAxMQogI2RlZmluZSBJUFY2X1VOSUNBU1RfSE9QUyAxNgogI2RlZmluZSBJUFY2X01VTFRJQ0FTVF9JRiAxNwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9NVUxUSUNBU1RfSE9QUyAxOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9NVUxUSUNBU1RfTE9PUCAxOQogI2RlZmluZSBJUFY2X0FERF9NRU1CRVJTSElQIDIwCiAjZGVmaW5lIElQVjZfRFJPUF9NRU1CRVJTSElQIDIxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X1JPVVRFUl9BTEVSVCAyMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9NVFVfRElTQ09WRVIgMjMKICNkZWZpbmUgSVBWNl9NVFUgMjQKICNkZWZpbmUgSVBWNl9SRUNWRVJSIDI1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X1Y2T05MWSAyNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9KT0lOX0FOWUNBU1QgMjcKICNkZWZpbmUgSVBWNl9MRUFWRV9BTllDQVNUIDI4CiAjZGVmaW5lIElQVjZfUE1UVURJU0NfRE9OVCAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X1BNVFVESVNDX1dBTlQgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9QTVRVRElTQ19ETyAyCiAjZGVmaW5lIElQVjZfUE1UVURJU0NfUFJPQkUgMworI2RlZmluZSBJUFY2X1BNVFVESVNDX0lOVEVSRkFDRSA0CiAjZGVmaW5lIElQVjZfRkxPV0xBQkVMX01HUiAzMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9GTE9XSU5GT19TRU5EIDMzCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lucHV0LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lucHV0LmgKaW5kZXggYzdjZjkzMi4uYjlkNWIyYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pbnB1dC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaW5wdXQuaApAQCAtODksMTUgKzg5LDE1IEBACiAjZGVmaW5lIEVWSU9DUk1GRiBfSU9XKCdFJywgMHg4MSwgaW50KQogI2RlZmluZSBFVklPQ0dFRkZFQ1RTIF9JT1IoJ0UnLCAweDg0LCBpbnQpCiAjZGVmaW5lIEVWSU9DR1JBQiBfSU9XKCdFJywgMHg5MCwgaW50KQotI2RlZmluZSBFVklPQ0dTVVNQRU5EQkxPQ0sgX0lPUignRScsIDB4OTEsIGludCkKKyNkZWZpbmUgRVZJT0NSRVZPS0UgX0lPVygnRScsIDB4OTEsIGludCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEVWSU9DU1NVU1BFTkRCTE9DSyBfSU9XKCdFJywgMHg5MSwgaW50KQogI2RlZmluZSBFVklPQ1NDTE9DS0lEIF9JT1coJ0UnLCAweGEwLCBpbnQpCiAjZGVmaW5lIElOUFVUX1BST1BfUE9JTlRFUiAweDAwCiAjZGVmaW5lIElOUFVUX1BST1BfRElSRUNUIDB4MDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOUFVUX1BST1BfQlVUVE9OUEFEIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOUFVUX1BST1BfU0VNSV9NVCAweDAzCisjZGVmaW5lIElOUFVUX1BST1BfVE9QQlVUVE9OUEFEIDB4MDQKICNkZWZpbmUgSU5QVVRfUFJPUF9NQVggMHgxZgogI2RlZmluZSBJTlBVVF9QUk9QX0NOVCAoSU5QVVRfUFJPUF9NQVggKyAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTEyMywzMTAgKzEyMywzMTUgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNZTl9NVF9SRVBPUlQgMgogI2RlZmluZSBTWU5fRFJPUFBFRCAzCisjZGVmaW5lIFNZTl9NQVggMHhmCisjZGVmaW5lIFNZTl9DTlQgKFNZTl9NQVgrMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9SRVNFUlZFRCAwCiAjZGVmaW5lIEtFWV9FU0MgMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZXzEgMgogI2RlZmluZSBLRVlfMiAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfMyA0CiAjZGVmaW5lIEtFWV80IDUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV81IDYKICNkZWZpbmUgS0VZXzYgNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZXzcgOAogI2RlZmluZSBLRVlfOCA5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfOSAxMAogI2RlZmluZSBLRVlfMCAxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX01JTlVTIDEyCiAjZGVmaW5lIEtFWV9FUVVBTCAxMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0JBQ0tTUEFDRSAxNAogI2RlZmluZSBLRVlfVEFCIDE1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfUSAxNgogI2RlZmluZSBLRVlfVyAxNwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0UgMTgKICNkZWZpbmUgS0VZX1IgMTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9UIDIwCiAjZGVmaW5lIEtFWV9ZIDIxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfVSAyMgogI2RlZmluZSBLRVlfSSAyMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX08gMjQKICNkZWZpbmUgS0VZX1AgMjUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9MRUZUQlJBQ0UgMjYKICNkZWZpbmUgS0VZX1JJR0hUQlJBQ0UgMjcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9FTlRFUiAyOAogI2RlZmluZSBLRVlfTEVGVENUUkwgMjkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9BIDMwCiAjZGVmaW5lIEtFWV9TIDMxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRCAzMgogI2RlZmluZSBLRVlfRiAzMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0cgMzQKICNkZWZpbmUgS0VZX0ggMzUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9KIDM2CiAjZGVmaW5lIEtFWV9LIDM3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfTCAzOAogI2RlZmluZSBLRVlfU0VNSUNPTE9OIDM5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQVBPU1RST1BIRSA0MAogI2RlZmluZSBLRVlfR1JBVkUgNDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9MRUZUU0hJRlQgNDIKICNkZWZpbmUgS0VZX0JBQ0tTTEFTSCA0MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1ogNDQKICNkZWZpbmUgS0VZX1ggNDUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9DIDQ2CiAjZGVmaW5lIEtFWV9WIDQ3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQiA0OAogI2RlZmluZSBLRVlfTiA0OQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX00gNTAKICNkZWZpbmUgS0VZX0NPTU1BIDUxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRE9UIDUyCiAjZGVmaW5lIEtFWV9TTEFTSCA1MwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1JJR0hUU0hJRlQgNTQKICNkZWZpbmUgS0VZX0tQQVNURVJJU0sgNTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9MRUZUQUxUIDU2CiAjZGVmaW5lIEtFWV9TUEFDRSA1NwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0NBUFNMT0NLIDU4CiAjZGVmaW5lIEtFWV9GMSA1OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0YyIDYwCiAjZGVmaW5lIEtFWV9GMyA2MQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0Y0IDYyCiAjZGVmaW5lIEtFWV9GNSA2MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0Y2IDY0CiAjZGVmaW5lIEtFWV9GNyA2NQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0Y4IDY2CiAjZGVmaW5lIEtFWV9GOSA2NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0YxMCA2OAogI2RlZmluZSBLRVlfTlVNTE9DSyA2OQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1NDUk9MTExPQ0sgNzAKICNkZWZpbmUgS0VZX0tQNyA3MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0tQOCA3MgogI2RlZmluZSBLRVlfS1A5IDczCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfS1BNSU5VUyA3NAogI2RlZmluZSBLRVlfS1A0IDc1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfS1A1IDc2CiAjZGVmaW5lIEtFWV9LUDYgNzcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9LUFBMVVMgNzgKICNkZWZpbmUgS0VZX0tQMSA3OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0tQMiA4MAogI2RlZmluZSBLRVlfS1AzIDgxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfS1AwIDgyCiAjZGVmaW5lIEtFWV9LUERPVCA4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1pFTktBS1VIQU5LQUtVIDg1CiAjZGVmaW5lIEtFWV8xMDJORCA4NgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0YxMSA4NwogI2RlZmluZSBLRVlfRjEyIDg4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfUk8gODkKICNkZWZpbmUgS0VZX0tBVEFLQU5BIDkwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfSElSQUdBTkEgOTEKICNkZWZpbmUgS0VZX0hFTktBTiA5MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0tBVEFLQU5BSElSQUdBTkEgOTMKICNkZWZpbmUgS0VZX01VSEVOS0FOIDk0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfS1BKUENPTU1BIDk1CiAjZGVmaW5lIEtFWV9LUEVOVEVSIDk2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfUklHSFRDVFJMIDk3CiAjZGVmaW5lIEtFWV9LUFNMQVNIIDk4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfU1lTUlEgOTkKICNkZWZpbmUgS0VZX1JJR0hUQUxUIDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0xJTkVGRUVEIDEwMQogI2RlZmluZSBLRVlfSE9NRSAxMDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9VUCAxMDMKICNkZWZpbmUgS0VZX1BBR0VVUCAxMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9MRUZUIDEwNQogI2RlZmluZSBLRVlfUklHSFQgMTA2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRU5EIDEwNwogI2RlZmluZSBLRVlfRE9XTiAxMDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9QQUdFRE9XTiAxMDkKICNkZWZpbmUgS0VZX0lOU0VSVCAxMTAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9ERUxFVEUgMTExCiAjZGVmaW5lIEtFWV9NQUNSTyAxMTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9NVVRFIDExMwogI2RlZmluZSBLRVlfVk9MVU1FRE9XTiAxMTQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9WT0xVTUVVUCAxMTUKICNkZWZpbmUgS0VZX1BPV0VSIDExNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0tQRVFVQUwgMTE3CiAjZGVmaW5lIEtFWV9LUFBMVVNNSU5VUyAxMTgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9QQVVTRSAxMTkKICNkZWZpbmUgS0VZX1NDQUxFIDEyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0tQQ09NTUEgMTIxCiAjZGVmaW5lIEtFWV9IQU5HRVVMIDEyMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0hBTkdVRUwgS0VZX0hBTkdFVUwKICNkZWZpbmUgS0VZX0hBTkpBIDEyMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1lFTiAxMjQKICNkZWZpbmUgS0VZX0xFRlRNRVRBIDEyNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1JJR0hUTUVUQSAxMjYKICNkZWZpbmUgS0VZX0NPTVBPU0UgMTI3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfU1RPUCAxMjgKICNkZWZpbmUgS0VZX0FHQUlOIDEyOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1BST1BTIDEzMAogI2RlZmluZSBLRVlfVU5ETyAxMzEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9GUk9OVCAxMzIKICNkZWZpbmUgS0VZX0NPUFkgMTMzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfT1BFTiAxMzQKICNkZWZpbmUgS0VZX1BBU1RFIDEzNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0ZJTkQgMTM2CiAjZGVmaW5lIEtFWV9DVVQgMTM3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfSEVMUCAxMzgKICNkZWZpbmUgS0VZX01FTlUgMTM5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQ0FMQyAxNDAKICNkZWZpbmUgS0VZX1NFVFVQIDE0MQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1NMRUVQIDE0MgogI2RlZmluZSBLRVlfV0FLRVVQIDE0MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0ZJTEUgMTQ0CiAjZGVmaW5lIEtFWV9TRU5ERklMRSAxNDUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9ERUxFVEVGSUxFIDE0NgogI2RlZmluZSBLRVlfWEZFUiAxNDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9QUk9HMSAxNDgKICNkZWZpbmUgS0VZX1BST0cyIDE0OQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1dXVyAxNTAKICNkZWZpbmUgS0VZX01TRE9TIDE1MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0NPRkZFRSAxNTIKICNkZWZpbmUgS0VZX1NDUkVFTkxPQ0sgS0VZX0NPRkZFRQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0RJUkVDVElPTiAxNTMKICNkZWZpbmUgS0VZX0NZQ0xFV0lORE9XUyAxNTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9NQUlMIDE1NQogI2RlZmluZSBLRVlfQk9PS01BUktTIDE1NgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0NPTVBVVEVSIDE1NwogI2RlZmluZSBLRVlfQkFDSyAxNTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9GT1JXQVJEIDE1OQogI2RlZmluZSBLRVlfQ0xPU0VDRCAxNjAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9FSkVDVENEIDE2MQogI2RlZmluZSBLRVlfRUpFQ1RDTE9TRUNEIDE2MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX05FWFRTT05HIDE2MwogI2RlZmluZSBLRVlfUExBWVBBVVNFIDE2NAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1BSRVZJT1VTU09ORyAxNjUKICNkZWZpbmUgS0VZX1NUT1BDRCAxNjYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9SRUNPUkQgMTY3CiAjZGVmaW5lIEtFWV9SRVdJTkQgMTY4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfUEhPTkUgMTY5CiAjZGVmaW5lIEtFWV9JU08gMTcwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQ09ORklHIDE3MQogI2RlZmluZSBLRVlfSE9NRVBBR0UgMTcyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfUkVGUkVTSCAxNzMKICNkZWZpbmUgS0VZX0VYSVQgMTc0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfTU9WRSAxNzUKICNkZWZpbmUgS0VZX0VESVQgMTc2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfU0NST0xMVVAgMTc3CiAjZGVmaW5lIEtFWV9TQ1JPTExET1dOIDE3OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0tQTEVGVFBBUkVOIDE3OQogI2RlZmluZSBLRVlfS1BSSUdIVFBBUkVOIDE4MAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX05FVyAxODEKICNkZWZpbmUgS0VZX1JFRE8gMTgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRjEzIDE4MwogI2RlZmluZSBLRVlfRjE0IDE4NAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0YxNSAxODUKICNkZWZpbmUgS0VZX0YxNiAxODYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9GMTcgMTg3CiAjZGVmaW5lIEtFWV9GMTggMTg4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRjE5IDE4OQogI2RlZmluZSBLRVlfRjIwIDE5MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0YyMSAxOTEKICNkZWZpbmUgS0VZX0YyMiAxOTIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9GMjMgMTkzCiAjZGVmaW5lIEtFWV9GMjQgMTk0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfUExBWUNEIDIwMAogI2RlZmluZSBLRVlfUEFVU0VDRCAyMDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9QUk9HMyAyMDIKICNkZWZpbmUgS0VZX1BST0c0IDIwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0RBU0hCT0FSRCAyMDQKICNkZWZpbmUgS0VZX1NVU1BFTkQgMjA1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQ0xPU0UgMjA2CiAjZGVmaW5lIEtFWV9QTEFZIDIwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0ZBU1RGT1JXQVJEIDIwOAogI2RlZmluZSBLRVlfQkFTU0JPT1NUIDIwOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1BSSU5UIDIxMAogI2RlZmluZSBLRVlfSFAgMjExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQ0FNRVJBIDIxMgogI2RlZmluZSBLRVlfU09VTkQgMjEzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfUVVFU1RJT04gMjE0CiAjZGVmaW5lIEtFWV9FTUFJTCAyMTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9DSEFUIDIxNgogI2RlZmluZSBLRVlfU0VBUkNIIDIxNwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0NPTk5FQ1QgMjE4CiAjZGVmaW5lIEtFWV9GSU5BTkNFIDIxOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1NQT1JUIDIyMAogI2RlZmluZSBLRVlfU0hPUCAyMjEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9BTFRFUkFTRSAyMjIKICNkZWZpbmUgS0VZX0NBTkNFTCAyMjMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9CUklHSFRORVNTRE9XTiAyMjQKICNkZWZpbmUgS0VZX0JSSUdIVE5FU1NVUCAyMjUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9NRURJQSAyMjYKICNkZWZpbmUgS0VZX1NXSVRDSFZJREVPTU9ERSAyMjcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9LQkRJTExVTVRPR0dMRSAyMjgKICNkZWZpbmUgS0VZX0tCRElMTFVNRE9XTiAyMjkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9LQkRJTExVTVVQIDIzMAogI2RlZmluZSBLRVlfU0VORCAyMzEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9SRVBMWSAyMzIKICNkZWZpbmUgS0VZX0ZPUldBUkRNQUlMIDIzMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1NBVkUgMjM0CiAjZGVmaW5lIEtFWV9ET0NVTUVOVFMgMjM1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQkFUVEVSWSAyMzYKICNkZWZpbmUgS0VZX0JMVUVUT09USCAyMzcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9XTEFOIDIzOAogI2RlZmluZSBLRVlfVVdCIDIzOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1VOS05PV04gMjQwCiAjZGVmaW5lIEtFWV9WSURFT19ORVhUIDI0MQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1ZJREVPX1BSRVYgMjQyCiAjZGVmaW5lIEtFWV9CUklHSFRORVNTX0NZQ0xFIDI0MwotI2RlZmluZSBLRVlfQlJJR0hUTkVTU19aRVJPIDI0NAotI2RlZmluZSBLRVlfRElTUExBWV9PRkYgMjQ1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBLRVlfV0lNQVggMjQ2CisjZGVmaW5lIEtFWV9CUklHSFRORVNTX0FVVE8gMjQ0CisjZGVmaW5lIEtFWV9CUklHSFRORVNTX1pFUk8gS0VZX0JSSUdIVE5FU1NfQVVUTworI2RlZmluZSBLRVlfRElTUExBWV9PRkYgMjQ1CisjZGVmaW5lIEtFWV9XV0FOIDI0NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX1dJTUFYIEtFWV9XV0FOCiAjZGVmaW5lIEtFWV9SRktJTEwgMjQ3CiAjZGVmaW5lIEtFWV9NSUNNVVRFIDI0OAogI2RlZmluZSBCVE5fTUlTQyAweDEwMApAQCAtNDczLDEyICs0NzgsMTcgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9ERUFEIDB4MTJmCiAjZGVmaW5lIEJUTl9HQU1FUEFEIDB4MTMwCi0jZGVmaW5lIEJUTl9BIDB4MTMwCi0jZGVmaW5lIEJUTl9CIDB4MTMxCisjZGVmaW5lIEJUTl9TT1VUSCAweDEzMAorI2RlZmluZSBCVE5fQSBCVE5fU09VVEgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJUTl9FQVNUIDB4MTMxCisjZGVmaW5lIEJUTl9CIEJUTl9FQVNUCiAjZGVmaW5lIEJUTl9DIDB4MTMyCi0jZGVmaW5lIEJUTl9YIDB4MTMzCi0jZGVmaW5lIEJUTl9ZIDB4MTM0CisjZGVmaW5lIEJUTl9OT1JUSCAweDEzMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQlROX1ggQlROX05PUlRICisjZGVmaW5lIEJUTl9XRVNUIDB4MTM0CisjZGVmaW5lIEJUTl9ZIEJUTl9XRVNUCiAjZGVmaW5lIEJUTl9aIDB4MTM1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVEwgMHgxMzYKQEAgLTYxNiwyMzkgKzYyNiwyNTkgQEAKICNkZWZpbmUgS0VZX01FU1NFTkdFUiAweDFhZQogI2RlZmluZSBLRVlfRElTUExBWVRPR0dMRSAweDFhZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX0JSSUdIVE5FU1NfVE9HR0xFIEtFWV9ESVNQTEFZVE9HR0xFCiAjZGVmaW5lIEtFWV9TUEVMTENIRUNLIDB4MWIwCiAjZGVmaW5lIEtFWV9MT0dPRkYgMHgxYjEKICNkZWZpbmUgS0VZX0RPTExBUiAweDFiMgotI2RlZmluZSBLRVlfRVVSTyAweDFiMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX0VVUk8gMHgxYjMKICNkZWZpbmUgS0VZX0ZSQU1FQkFDSyAweDFiNAogI2RlZmluZSBLRVlfRlJBTUVGT1JXQVJEIDB4MWI1CiAjZGVmaW5lIEtFWV9DT05URVhUX01FTlUgMHgxYjYKLSNkZWZpbmUgS0VZX01FRElBX1JFUEVBVCAweDFiNwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX01FRElBX1JFUEVBVCAweDFiNwogI2RlZmluZSBLRVlfMTBDSEFOTkVMU1VQIDB4MWI4CiAjZGVmaW5lIEtFWV8xMENIQU5ORUxTRE9XTiAweDFiOQogI2RlZmluZSBLRVlfSU1BR0VTIDB4MWJhCi0jZGVmaW5lIEtFWV9ERUxfRU9MIDB4MWMwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVlfREVMX0VPTCAweDFjMAogI2RlZmluZSBLRVlfREVMX0VPUyAweDFjMQogI2RlZmluZSBLRVlfSU5TX0xJTkUgMHgxYzIKICNkZWZpbmUgS0VZX0RFTF9MSU5FIDB4MWMzCi0jZGVmaW5lIEtFWV9GTiAweDFkMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX0ZOIDB4MWQwCiAjZGVmaW5lIEtFWV9GTl9FU0MgMHgxZDEKICNkZWZpbmUgS0VZX0ZOX0YxIDB4MWQyCiAjZGVmaW5lIEtFWV9GTl9GMiAweDFkMwotI2RlZmluZSBLRVlfRk5fRjMgMHgxZDQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtFWV9GTl9GMyAweDFkNAogI2RlZmluZSBLRVlfRk5fRjQgMHgxZDUKICNkZWZpbmUgS0VZX0ZOX0Y1IDB4MWQ2CiAjZGVmaW5lIEtFWV9GTl9GNiAweDFkNwotI2RlZmluZSBLRVlfRk5fRjcgMHgxZDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtFWV9GTl9GNyAweDFkOAogI2RlZmluZSBLRVlfRk5fRjggMHgxZDkKICNkZWZpbmUgS0VZX0ZOX0Y5IDB4MWRhCiAjZGVmaW5lIEtFWV9GTl9GMTAgMHgxZGIKLSNkZWZpbmUgS0VZX0ZOX0YxMSAweDFkYwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX0ZOX0YxMSAweDFkYwogI2RlZmluZSBLRVlfRk5fRjEyIDB4MWRkCiAjZGVmaW5lIEtFWV9GTl8xIDB4MWRlCiAjZGVmaW5lIEtFWV9GTl8yIDB4MWRmCi0jZGVmaW5lIEtFWV9GTl9EIDB4MWUwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVlfRk5fRCAweDFlMAogI2RlZmluZSBLRVlfRk5fRSAweDFlMQogI2RlZmluZSBLRVlfRk5fRiAweDFlMgogI2RlZmluZSBLRVlfRk5fUyAweDFlMwotI2RlZmluZSBLRVlfRk5fQiAweDFlNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX0ZOX0IgMHgxZTQKICNkZWZpbmUgS0VZX0JSTF9ET1QxIDB4MWYxCiAjZGVmaW5lIEtFWV9CUkxfRE9UMiAweDFmMgogI2RlZmluZSBLRVlfQlJMX0RPVDMgMHgxZjMKLSNkZWZpbmUgS0VZX0JSTF9ET1Q0IDB4MWY0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVlfQlJMX0RPVDQgMHgxZjQKICNkZWZpbmUgS0VZX0JSTF9ET1Q1IDB4MWY1CiAjZGVmaW5lIEtFWV9CUkxfRE9UNiAweDFmNgogI2RlZmluZSBLRVlfQlJMX0RPVDcgMHgxZjcKLSNkZWZpbmUgS0VZX0JSTF9ET1Q4IDB4MWY4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVlfQlJMX0RPVDggMHgxZjgKICNkZWZpbmUgS0VZX0JSTF9ET1Q5IDB4MWY5CiAjZGVmaW5lIEtFWV9CUkxfRE9UMTAgMHgxZmEKICNkZWZpbmUgS0VZX05VTUVSSUNfMCAweDIwMAotI2RlZmluZSBLRVlfTlVNRVJJQ18xIDB4MjAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVlfTlVNRVJJQ18xIDB4MjAxCiAjZGVmaW5lIEtFWV9OVU1FUklDXzIgMHgyMDIKICNkZWZpbmUgS0VZX05VTUVSSUNfMyAweDIwMwogI2RlZmluZSBLRVlfTlVNRVJJQ180IDB4MjA0Ci0jZGVmaW5lIEtFWV9OVU1FUklDXzUgMHgyMDUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtFWV9OVU1FUklDXzUgMHgyMDUKICNkZWZpbmUgS0VZX05VTUVSSUNfNiAweDIwNgogI2RlZmluZSBLRVlfTlVNRVJJQ183IDB4MjA3CiAjZGVmaW5lIEtFWV9OVU1FUklDXzggMHgyMDgKLSNkZWZpbmUgS0VZX05VTUVSSUNfOSAweDIwOQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX05VTUVSSUNfOSAweDIwOQogI2RlZmluZSBLRVlfTlVNRVJJQ19TVEFSIDB4MjBhCiAjZGVmaW5lIEtFWV9OVU1FUklDX1BPVU5EIDB4MjBiCiAjZGVmaW5lIEtFWV9DQU1FUkFfRk9DVVMgMHgyMTAKLSNkZWZpbmUgS0VZX1dQU19CVVRUT04gMHgyMTEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtFWV9XUFNfQlVUVE9OIDB4MjExCiAjZGVmaW5lIEtFWV9UT1VDSFBBRF9UT0dHTEUgMHgyMTIKICNkZWZpbmUgS0VZX1RPVUNIUEFEX09OIDB4MjEzCiAjZGVmaW5lIEtFWV9UT1VDSFBBRF9PRkYgMHgyMTQKLSNkZWZpbmUgS0VZX0NBTUVSQV9aT09NSU4gMHgyMTUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtFWV9DQU1FUkFfWk9PTUlOIDB4MjE1CiAjZGVmaW5lIEtFWV9DQU1FUkFfWk9PTU9VVCAweDIxNgogI2RlZmluZSBLRVlfQ0FNRVJBX1VQIDB4MjE3CiAjZGVmaW5lIEtFWV9DQU1FUkFfRE9XTiAweDIxOAotI2RlZmluZSBLRVlfQ0FNRVJBX0xFRlQgMHgyMTkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtFWV9DQU1FUkFfTEVGVCAweDIxOQogI2RlZmluZSBLRVlfQ0FNRVJBX1JJR0hUIDB4MjFhCiAjZGVmaW5lIEtFWV9BVFRFTkRBTlRfT04gMHgyMWIKICNkZWZpbmUgS0VZX0FUVEVOREFOVF9PRkYgMHgyMWMKLSNkZWZpbmUgS0VZX0FUVEVOREFOVF9UT0dHTEUgMHgyMWQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtFWV9BVFRFTkRBTlRfVE9HR0xFIDB4MjFkCiAjZGVmaW5lIEtFWV9MSUdIVFNfVE9HR0xFIDB4MjFlCisjZGVmaW5lIEJUTl9EUEFEX1VQIDB4MjIwCisjZGVmaW5lIEJUTl9EUEFEX0RPV04gMHgyMjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJUTl9EUEFEX0xFRlQgMHgyMjIKKyNkZWZpbmUgQlROX0RQQURfUklHSFQgMHgyMjMKKyNkZWZpbmUgS0VZX0FMU19UT0dHTEUgMHgyMzAKKyNkZWZpbmUgS0VZX0JVVFRPTkNPTkZJRyAweDI0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX1RBU0tNQU5BR0VSIDB4MjQxCisjZGVmaW5lIEtFWV9KT1VSTkFMIDB4MjQyCisjZGVmaW5lIEtFWV9DT05UUk9MUEFORUwgMHgyNDMKKyNkZWZpbmUgS0VZX0FQUFNFTEVDVCAweDI0NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX1NDUkVFTlNBVkVSIDB4MjQ1CisjZGVmaW5lIEtFWV9WT0lDRUNPTU1BTkQgMHgyNDYKKyNkZWZpbmUgS0VZX0JSSUdIVE5FU1NfTUlOIDB4MjUwCisjZGVmaW5lIEtFWV9CUklHSFRORVNTX01BWCAweDI1MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkgMHgyYzAKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxIDB4MmMwCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMiAweDJjMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzIDB4MmMyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTQgMHgyYzMKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk1IDB4MmM0CiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZNiAweDJjNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk3IDB4MmM2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTggMHgyYzcKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk5IDB4MmM4CiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTAgMHgyYzkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTEgMHgyY2EKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTIgMHgyY2IKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMyAweDJjYwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTE0IDB4MmNkCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTE1IDB4MmNlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTE2IDB4MmNmCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTcgMHgyZDAKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxOCAweDJkMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxOSAweDJkMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMCAweDJkMwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTIxIDB4MmQ0CiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjIgMHgyZDUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjMgMHgyZDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjQgMHgyZDcKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNSAweDJkOAogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTI2IDB4MmQ5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTI3IDB4MmRhCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTI4IDB4MmRiCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjkgMHgyZGMKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMCAweDJkZAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMSAweDJkZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMiAweDJkZgogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTMzIDB4MmUwCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzQgMHgyZTEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzUgMHgyZTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzYgMHgyZTMKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNyAweDJlNAogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTM4IDB4MmU1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTM5IDB4MmU2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTQwIDB4MmU3CiAjZGVmaW5lIEtFWV9NSU5fSU5URVJFU1RJTkcgS0VZX01VVEUKICNkZWZpbmUgS0VZX01BWCAweDJmZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0NOVCAoS0VZX01BWCsxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkVMX1ggMHgwMAogI2RlZmluZSBSRUxfWSAweDAxCiAjZGVmaW5lIFJFTF9aIDB4MDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJFTF9SWCAweDAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSRUxfUlkgMHgwNAogI2RlZmluZSBSRUxfUlogMHgwNQogI2RlZmluZSBSRUxfSFdIRUVMIDB4MDYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJFTF9ESUFMIDB4MDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJFTF9XSEVFTCAweDA4CiAjZGVmaW5lIFJFTF9NSVNDIDB4MDkKICNkZWZpbmUgUkVMX01BWCAweDBmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSRUxfQ05UIChSRUxfTUFYKzEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfWCAweDAwCiAjZGVmaW5lIEFCU19ZIDB4MDEKICNkZWZpbmUgQUJTX1ogMHgwMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUJTX1JYIDB4MDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19SWSAweDA0CiAjZGVmaW5lIEFCU19SWiAweDA1CiAjZGVmaW5lIEFCU19USFJPVFRMRSAweDA2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfUlVEREVSIDB4MDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19XSEVFTCAweDA4CiAjZGVmaW5lIEFCU19HQVMgMHgwOQogI2RlZmluZSBBQlNfQlJBS0UgMHgwYQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUJTX0hBVDBYIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19IQVQwWSAweDExCiAjZGVmaW5lIEFCU19IQVQxWCAweDEyCiAjZGVmaW5lIEFCU19IQVQxWSAweDEzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfSEFUMlggMHgxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUJTX0hBVDJZIDB4MTUKICNkZWZpbmUgQUJTX0hBVDNYIDB4MTYKICNkZWZpbmUgQUJTX0hBVDNZIDB4MTcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19QUkVTU1VSRSAweDE4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfRElTVEFOQ0UgMHgxOQogI2RlZmluZSBBQlNfVElMVF9YIDB4MWEKICNkZWZpbmUgQUJTX1RJTFRfWSAweDFiCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfVE9PTF9XSURUSCAweDFjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfVk9MVU1FIDB4MjAKICNkZWZpbmUgQUJTX01JU0MgMHgyOAogI2RlZmluZSBBQlNfTVRfU0xPVCAweDJmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfTVRfVE9VQ0hfTUFKT1IgMHgzMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUJTX01UX1RPVUNIX01JTk9SIDB4MzEKICNkZWZpbmUgQUJTX01UX1dJRFRIX01BSk9SIDB4MzIKICNkZWZpbmUgQUJTX01UX1dJRFRIX01JTk9SIDB4MzMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19NVF9PUklFTlRBVElPTiAweDM0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfTVRfUE9TSVRJT05fWCAweDM1CiAjZGVmaW5lIEFCU19NVF9QT1NJVElPTl9ZIDB4MzYKICNkZWZpbmUgQUJTX01UX1RPT0xfVFlQRSAweDM3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfTVRfQkxPQl9JRCAweDM4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfTVRfVFJBQ0tJTkdfSUQgMHgzOQogI2RlZmluZSBBQlNfTVRfUFJFU1NVUkUgMHgzYQogI2RlZmluZSBBQlNfTVRfRElTVEFOQ0UgMHgzYgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUJTX01UX1RPT0xfWCAweDNjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfTVRfVE9PTF9ZIDB4M2QKICNkZWZpbmUgQUJTX01BWCAweDNmCiAjZGVmaW5lIEFCU19DTlQgKEFCU19NQVgrMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNXX0xJRCAweDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTV19UQUJMRVRfTU9ERSAweDAxCiAjZGVmaW5lIFNXX0hFQURQSE9ORV9JTlNFUlQgMHgwMgogI2RlZmluZSBTV19SRktJTExfQUxMIDB4MDMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNXX1JBRElPIFNXX1JGS0lMTF9BTEwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNXX01JQ1JPUEhPTkVfSU5TRVJUIDB4MDQKICNkZWZpbmUgU1dfRE9DSyAweDA1CiAjZGVmaW5lIFNXX0xJTkVPVVRfSU5TRVJUIDB4MDYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNXX0pBQ0tfUEhZU0lDQUxfSU5TRVJUIDB4MDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNXX1ZJREVPT1VUX0lOU0VSVCAweDA4CiAjZGVmaW5lIFNXX0NBTUVSQV9MRU5TX0NPVkVSIDB4MDkKICNkZWZpbmUgU1dfS0VZUEFEX1NMSURFIDB4MGEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNXX0ZST05UX1BST1hJTUlUWSAweDBiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTV19ST1RBVEVfTE9DSyAweDBjCiAjZGVmaW5lIFNXX0xJTkVJTl9JTlNFUlQgMHgwZAorI2RlZmluZSBTV19NVVRFX0RFVklDRSAweDBlCiAjZGVmaW5lIFNXX01BWCAweDBmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTV19DTlQgKFNXX01BWCsxKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pb24uaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaW9uLmgKaW5kZXggZjE4OTM5ZC4uNWFmMzlkMCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pb24uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lvbi5oCkBAIC0xNiw1NiArMTYsNjMgQEAKICAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZm5kZWYgX0xJTlVYX0lPTl9ICi0jZGVmaW5lIF9MSU5VWF9JT05fSAorI2lmbmRlZiBfVUFQSV9MSU5VWF9JT05fSAorI2RlZmluZSBfVUFQSV9MSU5VWF9JT05fSAorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLXN0cnVjdCBpb25faGFuZGxlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgaW50IGlvbl91c2VyX2hhbmRsZV90OwogZW51bSBpb25faGVhcF90eXBlIHsKICBJT05fSEVBUF9UWVBFX1NZU1RFTSwKICBJT05fSEVBUF9UWVBFX1NZU1RFTV9DT05USUcsCi0gSU9OX0hFQVBfVFlQRV9DQVJWRU9VVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSU9OX0hFQVBfVFlQRV9DQVJWRU9VVCwKKyBJT05fSEVBUF9UWVBFX0NIVU5LLAorIElPTl9IRUFQX1RZUEVfRE1BLAogIElPTl9IRUFQX1RZUEVfQ1VTVE9NLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJT05fTlVNX0hFQVBTID0gMTYsCiB9OwogI2RlZmluZSBJT05fSEVBUF9TWVNURU1fTUFTSyAoMSA8PCBJT05fSEVBUF9UWVBFX1NZU1RFTSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElPTl9IRUFQX1NZU1RFTV9DT05USUdfTUFTSyAoMSA8PCBJT05fSEVBUF9UWVBFX1NZU1RFTV9DT05USUcpCi0jZGVmaW5lIElPTl9IRUFQX0NBUlZFT1VUX01BU0sgKDEgPDwgSU9OX0hFQVBfVFlQRV9DQVJWRU9VVCkKLSNkZWZpbmUgSU9OX0ZMQUdfQ0FDSEVEIDEKLSNkZWZpbmUgSU9OX0ZMQUdfQ0FDSEVEX05FRURTX1NZTkMgMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9OX0hFQVBfQ0FSVkVPVVRfTUFTSyAoMSA8PCBJT05fSEVBUF9UWVBFX0NBUlZFT1VUKQorI2RlZmluZSBJT05fSEVBUF9UWVBFX0RNQV9NQVNLICgxIDw8IElPTl9IRUFQX1RZUEVfRE1BKQorI2RlZmluZSBJT05fTlVNX0hFQVBfSURTIHNpemVvZih1bnNpZ25lZCBpbnQpICogOAorI2RlZmluZSBJT05fRkxBR19DQUNIRUQgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9OX0ZMQUdfQ0FDSEVEX05FRURTX1NZTkMgMgogc3RydWN0IGlvbl9hbGxvY2F0aW9uX2RhdGEgewogIHNpemVfdCBsZW47CiAgc2l6ZV90IGFsaWduOwotIHVuc2lnbmVkIGludCBoZWFwX21hc2s7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCBoZWFwX2lkX21hc2s7CiAgdW5zaWduZWQgaW50IGZsYWdzOwotIHN0cnVjdCBpb25faGFuZGxlICpoYW5kbGU7CisgaW9uX3VzZXJfaGFuZGxlX3QgaGFuZGxlOwogfTsKLXN0cnVjdCBpb25fZmRfZGF0YSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIHN0cnVjdCBpb25faGFuZGxlICpoYW5kbGU7CitzdHJ1Y3QgaW9uX2ZkX2RhdGEgeworIGlvbl91c2VyX2hhbmRsZV90IGhhbmRsZTsKICBpbnQgZmQ7CiB9Owotc3RydWN0IGlvbl9oYW5kbGVfZGF0YSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIHN0cnVjdCBpb25faGFuZGxlICpoYW5kbGU7CitzdHJ1Y3QgaW9uX2hhbmRsZV9kYXRhIHsKKyBpb25fdXNlcl9oYW5kbGVfdCBoYW5kbGU7CiB9Owogc3RydWN0IGlvbl9jdXN0b21fZGF0YSB7Ci0gdW5zaWduZWQgaW50IGNtZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgaW50IGNtZDsKICB1bnNpZ25lZCBsb25nIGFyZzsKIH07CiAjZGVmaW5lIElPTl9JT0NfTUFHSUMgJ0knCi0jZGVmaW5lIElPTl9JT0NfQUxMT0MgX0lPV1IoSU9OX0lPQ19NQUdJQywgMCwgICBzdHJ1Y3QgaW9uX2FsbG9jYXRpb25fZGF0YSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPTl9JT0NfQUxMT0MgX0lPV1IoSU9OX0lPQ19NQUdJQywgMCwgICBzdHJ1Y3QgaW9uX2FsbG9jYXRpb25fZGF0YSkKICNkZWZpbmUgSU9OX0lPQ19GUkVFIF9JT1dSKElPTl9JT0NfTUFHSUMsIDEsIHN0cnVjdCBpb25faGFuZGxlX2RhdGEpCiAjZGVmaW5lIElPTl9JT0NfTUFQIF9JT1dSKElPTl9JT0NfTUFHSUMsIDIsIHN0cnVjdCBpb25fZmRfZGF0YSkKICNkZWZpbmUgSU9OX0lPQ19TSEFSRSBfSU9XUihJT05fSU9DX01BR0lDLCA0LCBzdHJ1Y3QgaW9uX2ZkX2RhdGEpCi0jZGVmaW5lIElPTl9JT0NfSU1QT1JUIF9JT1dSKElPTl9JT0NfTUFHSUMsIDUsIHN0cnVjdCBpb25fZmRfZGF0YSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPTl9JT0NfSU1QT1JUIF9JT1dSKElPTl9JT0NfTUFHSUMsIDUsIHN0cnVjdCBpb25fZmRfZGF0YSkKICNkZWZpbmUgSU9OX0lPQ19TWU5DIF9JT1dSKElPTl9JT0NfTUFHSUMsIDcsIHN0cnVjdCBpb25fZmRfZGF0YSkKICNkZWZpbmUgSU9OX0lPQ19DVVNUT00gX0lPV1IoSU9OX0lPQ19NQUdJQywgNiwgc3RydWN0IGlvbl9jdXN0b21fZGF0YSkKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaXAuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaXAuaAppbmRleCBlOTM2MzMxLi5mYzBiZDc4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lwLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pcC5oCkBAIC0xMzksNSArMTM5LDQ2IEBACiAgX191OCBwYWRsZW47CiAgX191OCByZXNlcnZlZDsKIH07Ci0jZW5kaWYKK2VudW0KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit7CisgSVBWNF9ERVZDT05GX0ZPUldBUkRJTkc9MSwKKyBJUFY0X0RFVkNPTkZfTUNfRk9SV0FSRElORywKKyBJUFY0X0RFVkNPTkZfUFJPWFlfQVJQLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFY0X0RFVkNPTkZfQUNDRVBUX1JFRElSRUNUUywKKyBJUFY0X0RFVkNPTkZfU0VDVVJFX1JFRElSRUNUUywKKyBJUFY0X0RFVkNPTkZfU0VORF9SRURJUkVDVFMsCisgSVBWNF9ERVZDT05GX1NIQVJFRF9NRURJQSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBWNF9ERVZDT05GX1JQX0ZJTFRFUiwKKyBJUFY0X0RFVkNPTkZfQUNDRVBUX1NPVVJDRV9ST1VURSwKKyBJUFY0X0RFVkNPTkZfQk9PVFBfUkVMQVksCisgSVBWNF9ERVZDT05GX0xPR19NQVJUSUFOUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBWNF9ERVZDT05GX1RBRywKKyBJUFY0X0RFVkNPTkZfQVJQRklMVEVSLAorIElQVjRfREVWQ09ORl9NRURJVU1fSUQsCisgSVBWNF9ERVZDT05GX05PWEZSTSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBWNF9ERVZDT05GX05PUE9MSUNZLAorIElQVjRfREVWQ09ORl9GT1JDRV9JR01QX1ZFUlNJT04sCisgSVBWNF9ERVZDT05GX0FSUF9BTk5PVU5DRSwKKyBJUFY0X0RFVkNPTkZfQVJQX0lHTk9SRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBWNF9ERVZDT05GX1BST01PVEVfU0VDT05EQVJJRVMsCisgSVBWNF9ERVZDT05GX0FSUF9BQ0NFUFQsCisgSVBWNF9ERVZDT05GX0FSUF9OT1RJRlksCisgSVBWNF9ERVZDT05GX0FDQ0VQVF9MT0NBTCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBWNF9ERVZDT05GX1NSQ19WTUFSSywKKyBJUFY0X0RFVkNPTkZfUFJPWFlfQVJQX1BWTEFOLAorIElQVjRfREVWQ09ORl9ST1VURV9MT0NBTE5FVCwKKyBJUFY0X0RFVkNPTkZfSUdNUFYyX1VOU09MSUNJVEVEX1JFUE9SVF9JTlRFUlZBTCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBWNF9ERVZDT05GX0lHTVBWM19VTlNPTElDSVRFRF9SRVBPUlRfSU5URVJWQUwsCisgX19JUFY0X0RFVkNPTkZfTUFYCit9OworI2RlZmluZSBJUFY0X0RFVkNPTkZfTUFYIChfX0lQVjRfREVWQ09ORl9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pcF92cy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pcF92cy5oCmluZGV4IDI0MTA1N2EuLjNhYTBmODQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaXBfdnMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lwX3ZzLmgKQEAgLTI2LDMwMCArMjYsMzA2IEBACiAjZGVmaW5lIElQX1ZTX1NWQ19GX0hBU0hFRCAweDAwMDIKICNkZWZpbmUgSVBfVlNfU1ZDX0ZfT05FUEFDS0VUIDB4MDAwNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBfVlNfU1ZDX0ZfU0NIRUQxIDB4MDAwOAorI2RlZmluZSBJUF9WU19TVkNfRl9TQ0hFRDIgMHgwMDEwCisjZGVmaW5lIElQX1ZTX1NWQ19GX1NDSEVEMyAweDAwMjAKKyNkZWZpbmUgSVBfVlNfU1ZDX0ZfU0NIRURfU0hfRkFMTEJBQ0sgSVBfVlNfU1ZDX0ZfU0NIRUQxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUF9WU19TVkNfRl9TQ0hFRF9TSF9QT1JUIElQX1ZTX1NWQ19GX1NDSEVEMgogI2RlZmluZSBJUF9WU19ERVNUX0ZfQVZBSUxBQkxFIDB4MDAwMQogI2RlZmluZSBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQgMHgwMDAyCiAjZGVmaW5lIElQX1ZTX1NUQVRFX05PTkUgMHgwMDAwCi0jZGVmaW5lIElQX1ZTX1NUQVRFX01BU1RFUiAweDAwMDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQX1ZTX1NUQVRFX01BU1RFUiAweDAwMDEKICNkZWZpbmUgSVBfVlNfU1RBVEVfQkFDS1VQIDB4MDAwMgogI2RlZmluZSBJUF9WU19CQVNFX0NUTCAoNjQrMTAyNCs2NCkKICNkZWZpbmUgSVBfVlNfU09fU0VUX05PTkUgSVBfVlNfQkFTRV9DVEwKLSNkZWZpbmUgSVBfVlNfU09fU0VUX0lOU0VSVCAoSVBfVlNfQkFTRV9DVEwrMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9JTlNFUlQgKElQX1ZTX0JBU0VfQ1RMKzEpCiAjZGVmaW5lIElQX1ZTX1NPX1NFVF9BREQgKElQX1ZTX0JBU0VfQ1RMKzIpCiAjZGVmaW5lIElQX1ZTX1NPX1NFVF9FRElUIChJUF9WU19CQVNFX0NUTCszKQogI2RlZmluZSBJUF9WU19TT19TRVRfREVMIChJUF9WU19CQVNFX0NUTCs0KQotI2RlZmluZSBJUF9WU19TT19TRVRfRkxVU0ggKElQX1ZTX0JBU0VfQ1RMKzUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUF9WU19TT19TRVRfRkxVU0ggKElQX1ZTX0JBU0VfQ1RMKzUpCiAjZGVmaW5lIElQX1ZTX1NPX1NFVF9MSVNUIChJUF9WU19CQVNFX0NUTCs2KQogI2RlZmluZSBJUF9WU19TT19TRVRfQUREREVTVCAoSVBfVlNfQkFTRV9DVEwrNykKICNkZWZpbmUgSVBfVlNfU09fU0VUX0RFTERFU1QgKElQX1ZTX0JBU0VfQ1RMKzgpCi0jZGVmaW5lIElQX1ZTX1NPX1NFVF9FRElUREVTVCAoSVBfVlNfQkFTRV9DVEwrOSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9FRElUREVTVCAoSVBfVlNfQkFTRV9DVEwrOSkKICNkZWZpbmUgSVBfVlNfU09fU0VUX1RJTUVPVVQgKElQX1ZTX0JBU0VfQ1RMKzEwKQogI2RlZmluZSBJUF9WU19TT19TRVRfU1RBUlREQUVNT04gKElQX1ZTX0JBU0VfQ1RMKzExKQogI2RlZmluZSBJUF9WU19TT19TRVRfU1RPUERBRU1PTiAoSVBfVlNfQkFTRV9DVEwrMTIpCi0jZGVmaW5lIElQX1ZTX1NPX1NFVF9SRVNUT1JFIChJUF9WU19CQVNFX0NUTCsxMykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9SRVNUT1JFIChJUF9WU19CQVNFX0NUTCsxMykKICNkZWZpbmUgSVBfVlNfU09fU0VUX1NBVkUgKElQX1ZTX0JBU0VfQ1RMKzE0KQogI2RlZmluZSBJUF9WU19TT19TRVRfWkVSTyAoSVBfVlNfQkFTRV9DVEwrMTUpCiAjZGVmaW5lIElQX1ZTX1NPX1NFVF9NQVggSVBfVlNfU09fU0VUX1pFUk8KLSNkZWZpbmUgSVBfVlNfU09fR0VUX1ZFUlNJT04gSVBfVlNfQkFTRV9DVEwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQX1ZTX1NPX0dFVF9WRVJTSU9OIElQX1ZTX0JBU0VfQ1RMCiAjZGVmaW5lIElQX1ZTX1NPX0dFVF9JTkZPIChJUF9WU19CQVNFX0NUTCsxKQogI2RlZmluZSBJUF9WU19TT19HRVRfU0VSVklDRVMgKElQX1ZTX0JBU0VfQ1RMKzIpCiAjZGVmaW5lIElQX1ZTX1NPX0dFVF9TRVJWSUNFIChJUF9WU19CQVNFX0NUTCszKQotI2RlZmluZSBJUF9WU19TT19HRVRfREVTVFMgKElQX1ZTX0JBU0VfQ1RMKzQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUF9WU19TT19HRVRfREVTVFMgKElQX1ZTX0JBU0VfQ1RMKzQpCiAjZGVmaW5lIElQX1ZTX1NPX0dFVF9ERVNUIChJUF9WU19CQVNFX0NUTCs1KQogI2RlZmluZSBJUF9WU19TT19HRVRfVElNRU9VVCAoSVBfVlNfQkFTRV9DVEwrNikKICNkZWZpbmUgSVBfVlNfU09fR0VUX0RBRU1PTiAoSVBfVlNfQkFTRV9DVEwrNykKLSNkZWZpbmUgSVBfVlNfU09fR0VUX01BWCBJUF9WU19TT19HRVRfREFFTU9OCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUF9WU19TT19HRVRfTUFYIElQX1ZTX1NPX0dFVF9EQUVNT04KICNkZWZpbmUgSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIDB4MDAwNwogI2RlZmluZSBJUF9WU19DT05OX0ZfTUFTUSAweDAwMDAKICNkZWZpbmUgSVBfVlNfQ09OTl9GX0xPQ0FMTk9ERSAweDAwMDEKLSNkZWZpbmUgSVBfVlNfQ09OTl9GX1RVTk5FTCAweDAwMDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQX1ZTX0NPTk5fRl9UVU5ORUwgMHgwMDAyCiAjZGVmaW5lIElQX1ZTX0NPTk5fRl9EUk9VVEUgMHgwMDAzCiAjZGVmaW5lIElQX1ZTX0NPTk5fRl9CWVBBU1MgMHgwMDA0CiAjZGVmaW5lIElQX1ZTX0NPTk5fRl9TWU5DIDB4MDAyMAotI2RlZmluZSBJUF9WU19DT05OX0ZfSEFTSEVEIDB4MDA0MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBfVlNfQ09OTl9GX0hBU0hFRCAweDAwNDAKICNkZWZpbmUgSVBfVlNfQ09OTl9GX05PT1VUUFVUIDB4MDA4MAogI2RlZmluZSBJUF9WU19DT05OX0ZfSU5BQ1RJVkUgMHgwMTAwCiAjZGVmaW5lIElQX1ZTX0NPTk5fRl9PVVRfU0VRIDB4MDIwMAotI2RlZmluZSBJUF9WU19DT05OX0ZfSU5fU0VRIDB4MDQwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBfVlNfQ09OTl9GX0lOX1NFUSAweDA0MDAKICNkZWZpbmUgSVBfVlNfQ09OTl9GX1NFUV9NQVNLIDB4MDYwMAogI2RlZmluZSBJUF9WU19DT05OX0ZfTk9fQ1BPUlQgMHgwODAwCiAjZGVmaW5lIElQX1ZTX0NPTk5fRl9URU1QTEFURSAweDEwMDAKLSNkZWZpbmUgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQgMHgyMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCAweDIwMDAKICNkZWZpbmUgSVBfVlNfQ09OTl9GX0JBQ0tVUF9NQVNLIChJUF9WU19DT05OX0ZfRldEX01BU0sgfCAgIElQX1ZTX0NPTk5fRl9OT09VVFBVVCB8ICAgSVBfVlNfQ09OTl9GX0lOQUNUSVZFIHwgICBJUF9WU19DT05OX0ZfU0VRX01BU0sgfCAgIElQX1ZTX0NPTk5fRl9OT19DUE9SVCB8ICAgSVBfVlNfQ09OTl9GX1RFTVBMQVRFICAgKQogI2RlZmluZSBJUF9WU19DT05OX0ZfQkFDS1VQX1VQRF9NQVNLIChJUF9WU19DT05OX0ZfSU5BQ1RJVkUgfCAgIElQX1ZTX0NPTk5fRl9TRVFfTUFTSykKICNkZWZpbmUgSVBfVlNfQ09OTl9GX05GQ1QgKDEgPDwgMTYpCi0jZGVmaW5lIElQX1ZTX0NPTk5fRl9ERVNUX01BU0sgKElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8ICAgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQgfCAgIElQX1ZTX0NPTk5fRl9ORkNUIHwgICAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBfVlNfQ09OTl9GX0RFU1RfTUFTSyAoSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIHwgICBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCB8ICAgSVBfVlNfQ09OTl9GX05GQ1QgfCAgIDApCiAjZGVmaW5lIElQX1ZTX1NDSEVETkFNRV9NQVhMRU4gMTYKICNkZWZpbmUgSVBfVlNfUEVOQU1FX01BWExFTiAxNgogI2RlZmluZSBJUF9WU19JRk5BTUVfTUFYTEVOIDE2Ci0jZGVmaW5lIElQX1ZTX1BFREFUQV9NQVhMRU4gMjU1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUF9WU19QRURBVEFfTUFYTEVOIDI1NQogc3RydWN0IGlwX3ZzX3NlcnZpY2VfdXNlciB7CiAgX191MTYgcHJvdG9jb2w7CiAgX19iZTMyIGFkZHI7Ci0gX19iZTE2IHBvcnQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmUxNiBwb3J0OwogIF9fdTMyIGZ3bWFyazsKICBjaGFyIHNjaGVkX25hbWVbSVBfVlNfU0NIRUROQU1FX01BWExFTl07CiAgdW5zaWduZWQgaW50IGZsYWdzOwotIHVuc2lnbmVkIGludCB0aW1lb3V0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgdGltZW91dDsKICBfX2JlMzIgbmV0bWFzazsKIH07CiBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyIHsKLSBfX2JlMzIgYWRkcjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTMyIGFkZHI7CiAgX19iZTE2IHBvcnQ7CiAgdW5zaWduZWQgaW50IGNvbm5fZmxhZ3M7CiAgaW50IHdlaWdodDsKLSBfX3UzMiB1X3RocmVzaG9sZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdV90aHJlc2hvbGQ7CiAgX191MzIgbF90aHJlc2hvbGQ7CiB9Owogc3RydWN0IGlwX3ZzX3N0YXRzX3VzZXIgewotIF9fdTMyIGNvbm5zOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBjb25uczsKICBfX3UzMiBpbnBrdHM7CiAgX191MzIgb3V0cGt0czsKICBfX3U2NCBpbmJ5dGVzOwotIF9fdTY0IG91dGJ5dGVzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBvdXRieXRlczsKICBfX3UzMiBjcHM7CiAgX191MzIgaW5wcHM7CiAgX191MzIgb3V0cHBzOwotIF9fdTMyIGluYnBzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBpbmJwczsKICBfX3UzMiBvdXRicHM7CiB9Owogc3RydWN0IGlwX3ZzX2dldGluZm8gewotIHVuc2lnbmVkIGludCB2ZXJzaW9uOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgdmVyc2lvbjsKICB1bnNpZ25lZCBpbnQgc2l6ZTsKICB1bnNpZ25lZCBpbnQgbnVtX3NlcnZpY2VzOwogfTsKLXN0cnVjdCBpcF92c19zZXJ2aWNlX2VudHJ5IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaXBfdnNfc2VydmljZV9lbnRyeSB7CiAgX191MTYgcHJvdG9jb2w7CiAgX19iZTMyIGFkZHI7CiAgX19iZTE2IHBvcnQ7Ci0gX191MzIgZndtYXJrOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBmd21hcms7CiAgY2hhciBzY2hlZF9uYW1lW0lQX1ZTX1NDSEVETkFNRV9NQVhMRU5dOwogIHVuc2lnbmVkIGludCBmbGFnczsKICB1bnNpZ25lZCBpbnQgdGltZW91dDsKLSBfX2JlMzIgbmV0bWFzazsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTMyIG5ldG1hc2s7CiAgdW5zaWduZWQgaW50IG51bV9kZXN0czsKICBzdHJ1Y3QgaXBfdnNfc3RhdHNfdXNlciBzdGF0czsKIH07Ci1zdHJ1Y3QgaXBfdnNfZGVzdF9lbnRyeSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGlwX3ZzX2Rlc3RfZW50cnkgewogIF9fYmUzMiBhZGRyOwogIF9fYmUxNiBwb3J0OwogIHVuc2lnbmVkIGludCBjb25uX2ZsYWdzOwotIGludCB3ZWlnaHQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGludCB3ZWlnaHQ7CiAgX191MzIgdV90aHJlc2hvbGQ7CiAgX191MzIgbF90aHJlc2hvbGQ7CiAgX191MzIgYWN0aXZlY29ubnM7Ci0gX191MzIgaW5hY3Rjb25uczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaW5hY3Rjb25uczsKICBfX3UzMiBwZXJzaXN0Y29ubnM7CiAgc3RydWN0IGlwX3ZzX3N0YXRzX3VzZXIgc3RhdHM7CiB9Owotc3RydWN0IGlwX3ZzX2dldF9kZXN0cyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGlwX3ZzX2dldF9kZXN0cyB7CiAgX191MTYgcHJvdG9jb2w7CiAgX19iZTMyIGFkZHI7CiAgX19iZTE2IHBvcnQ7Ci0gX191MzIgZndtYXJrOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBmd21hcms7CiAgdW5zaWduZWQgaW50IG51bV9kZXN0czsKICBzdHJ1Y3QgaXBfdnNfZGVzdF9lbnRyeSBlbnRyeXRhYmxlWzBdOwogfTsKLXN0cnVjdCBpcF92c19nZXRfc2VydmljZXMgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBpcF92c19nZXRfc2VydmljZXMgewogIHVuc2lnbmVkIGludCBudW1fc2VydmljZXM7CiAgc3RydWN0IGlwX3ZzX3NlcnZpY2VfZW50cnkgZW50cnl0YWJsZVswXTsKIH07Ci1zdHJ1Y3QgaXBfdnNfdGltZW91dF91c2VyIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaXBfdnNfdGltZW91dF91c2VyIHsKICBpbnQgdGNwX3RpbWVvdXQ7CiAgaW50IHRjcF9maW5fdGltZW91dDsKICBpbnQgdWRwX3RpbWVvdXQ7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgaXBfdnNfZGFlbW9uX3VzZXIgewogIGludCBzdGF0ZTsKICBjaGFyIG1jYXN0X2lmbltJUF9WU19JRk5BTUVfTUFYTEVOXTsKLSBpbnQgc3luY2lkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBpbnQgc3luY2lkOwogfTsKICNkZWZpbmUgSVBWU19HRU5MX05BTUUgIklQVlMiCiAjZGVmaW5lIElQVlNfR0VOTF9WRVJTSU9OIDB4MQotc3RydWN0IGlwX3ZzX2ZsYWdzIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaXBfdnNfZmxhZ3MgewogIF9fdTMyIGZsYWdzOwogIF9fdTMyIG1hc2s7CiB9OwotZW51bSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CiAgSVBWU19DTURfVU5TUEVDID0gMCwKICBJUFZTX0NNRF9ORVdfU0VSVklDRSwKICBJUFZTX0NNRF9TRVRfU0VSVklDRSwKLSBJUFZTX0NNRF9ERUxfU0VSVklDRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBWU19DTURfREVMX1NFUlZJQ0UsCiAgSVBWU19DTURfR0VUX1NFUlZJQ0UsCiAgSVBWU19DTURfTkVXX0RFU1QsCiAgSVBWU19DTURfU0VUX0RFU1QsCi0gSVBWU19DTURfREVMX0RFU1QsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQVlNfQ01EX0RFTF9ERVNULAogIElQVlNfQ01EX0dFVF9ERVNULAogIElQVlNfQ01EX05FV19EQUVNT04sCiAgSVBWU19DTURfREVMX0RBRU1PTiwKLSBJUFZTX0NNRF9HRVRfREFFTU9OLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFZTX0NNRF9HRVRfREFFTU9OLAogIElQVlNfQ01EX1NFVF9DT05GSUcsCiAgSVBWU19DTURfR0VUX0NPTkZJRywKICBJUFZTX0NNRF9TRVRfSU5GTywKLSBJUFZTX0NNRF9HRVRfSU5GTywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBWU19DTURfR0VUX0lORk8sCiAgSVBWU19DTURfWkVSTywKICBJUFZTX0NNRF9GTFVTSCwKICBfX0lQVlNfQ01EX01BWCwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgSVBWU19DTURfTUFYIChfX0lQVlNfQ01EX01BWCAtIDEpCiBlbnVtIHsKICBJUFZTX0NNRF9BVFRSX1VOU1BFQyA9IDAsCi0gSVBWU19DTURfQVRUUl9TRVJWSUNFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFZTX0NNRF9BVFRSX1NFUlZJQ0UsCiAgSVBWU19DTURfQVRUUl9ERVNULAogIElQVlNfQ01EX0FUVFJfREFFTU9OLAogIElQVlNfQ01EX0FUVFJfVElNRU9VVF9UQ1AsCi0gSVBWU19DTURfQVRUUl9USU1FT1VUX1RDUF9GSU4sCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQVlNfQ01EX0FUVFJfVElNRU9VVF9UQ1BfRklOLAogIElQVlNfQ01EX0FUVFJfVElNRU9VVF9VRFAsCiAgX19JUFZTX0NNRF9BVFRSX01BWCwKIH07Ci0jZGVmaW5lIElQVlNfQ01EX0FUVFJfTUFYIChfX0lQVlNfU1ZDX0FUVFJfTUFYIC0gMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQVlNfQ01EX0FUVFJfTUFYIChfX0lQVlNfQ01EX0FUVFJfTUFYIC0gMSkKIGVudW0gewogIElQVlNfU1ZDX0FUVFJfVU5TUEVDID0gMCwKICBJUFZTX1NWQ19BVFRSX0FGLAotIElQVlNfU1ZDX0FUVFJfUFJPVE9DT0wsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQVlNfU1ZDX0FUVFJfUFJPVE9DT0wsCiAgSVBWU19TVkNfQVRUUl9BRERSLAogIElQVlNfU1ZDX0FUVFJfUE9SVCwKICBJUFZTX1NWQ19BVFRSX0ZXTUFSSywKLSBJUFZTX1NWQ19BVFRSX1NDSEVEX05BTUUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQVlNfU1ZDX0FUVFJfU0NIRURfTkFNRSwKICBJUFZTX1NWQ19BVFRSX0ZMQUdTLAogIElQVlNfU1ZDX0FUVFJfVElNRU9VVCwKICBJUFZTX1NWQ19BVFRSX05FVE1BU0ssCi0gSVBWU19TVkNfQVRUUl9TVEFUUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBWU19TVkNfQVRUUl9TVEFUUywKICBJUFZTX1NWQ19BVFRSX1BFX05BTUUsCiAgX19JUFZTX1NWQ19BVFRSX01BWCwKIH07Ci0jZGVmaW5lIElQVlNfU1ZDX0FUVFJfTUFYIChfX0lQVlNfU1ZDX0FUVFJfTUFYIC0gMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQVlNfU1ZDX0FUVFJfTUFYIChfX0lQVlNfU1ZDX0FUVFJfTUFYIC0gMSkKIGVudW0gewogIElQVlNfREVTVF9BVFRSX1VOU1BFQyA9IDAsCiAgSVBWU19ERVNUX0FUVFJfQUREUiwKLSBJUFZTX0RFU1RfQVRUUl9QT1JULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFZTX0RFU1RfQVRUUl9QT1JULAogIElQVlNfREVTVF9BVFRSX0ZXRF9NRVRIT0QsCiAgSVBWU19ERVNUX0FUVFJfV0VJR0hULAogIElQVlNfREVTVF9BVFRSX1VfVEhSRVNILAotIElQVlNfREVTVF9BVFRSX0xfVEhSRVNILAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFZTX0RFU1RfQVRUUl9MX1RIUkVTSCwKICBJUFZTX0RFU1RfQVRUUl9BQ1RJVkVfQ09OTlMsCiAgSVBWU19ERVNUX0FUVFJfSU5BQ1RfQ09OTlMsCiAgSVBWU19ERVNUX0FUVFJfUEVSU0lTVF9DT05OUywKLSBJUFZTX0RFU1RfQVRUUl9TVEFUUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBWU19ERVNUX0FUVFJfU1RBVFMsCiAgX19JUFZTX0RFU1RfQVRUUl9NQVgsCiB9OwogI2RlZmluZSBJUFZTX0RFU1RfQVRUUl9NQVggKF9fSVBWU19ERVNUX0FUVFJfTUFYIC0gMSkKLWVudW0gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gewogIElQVlNfREFFTU9OX0FUVFJfVU5TUEVDID0gMCwKICBJUFZTX0RBRU1PTl9BVFRSX1NUQVRFLAogIElQVlNfREFFTU9OX0FUVFJfTUNBU1RfSUZOLAotIElQVlNfREFFTU9OX0FUVFJfU1lOQ19JRCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBWU19EQUVNT05fQVRUUl9TWU5DX0lELAogIF9fSVBWU19EQUVNT05fQVRUUl9NQVgsCiB9OwogI2RlZmluZSBJUFZTX0RBRU1PTl9BVFRSX01BWCAoX19JUFZTX0RBRU1PTl9BVFRSX01BWCAtIDEpCi1lbnVtIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHsKICBJUFZTX1NUQVRTX0FUVFJfVU5TUEVDID0gMCwKICBJUFZTX1NUQVRTX0FUVFJfQ09OTlMsCiAgSVBWU19TVEFUU19BVFRSX0lOUEtUUywKLSBJUFZTX1NUQVRTX0FUVFJfT1VUUEtUUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBWU19TVEFUU19BVFRSX09VVFBLVFMsCiAgSVBWU19TVEFUU19BVFRSX0lOQllURVMsCiAgSVBWU19TVEFUU19BVFRSX09VVEJZVEVTLAogIElQVlNfU1RBVFNfQVRUUl9DUFMsCi0gSVBWU19TVEFUU19BVFRSX0lOUFBTLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFZTX1NUQVRTX0FUVFJfSU5QUFMsCiAgSVBWU19TVEFUU19BVFRSX09VVFBQUywKICBJUFZTX1NUQVRTX0FUVFJfSU5CUFMsCiAgSVBWU19TVEFUU19BVFRSX09VVEJQUywKLSBfX0lQVlNfU1RBVFNfQVRUUl9NQVgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fSVBWU19TVEFUU19BVFRSX01BWCwKIH07CiAjZGVmaW5lIElQVlNfU1RBVFNfQVRUUl9NQVggKF9fSVBWU19TVEFUU19BVFRSX01BWCAtIDEpCiBlbnVtIHsKLSBJUFZTX0lORk9fQVRUUl9VTlNQRUMgPSAwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFZTX0lORk9fQVRUUl9VTlNQRUMgPSAwLAogIElQVlNfSU5GT19BVFRSX1ZFUlNJT04sCiAgSVBWU19JTkZPX0FUVFJfQ09OTl9UQUJfU0laRSwKICBfX0lQVlNfSU5GT19BVFRSX01BWCwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgSVBWU19JTkZPX0FUVFJfTUFYIChfX0lQVlNfSU5GT19BVFRSX01BWCAtIDEpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaXB2Ni5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pcHY2LmgKaW5kZXggZTkzM2Q4My4uYmZlNjJjZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pcHY2LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pcHY2LmgKQEAgLTE0MSw2ICsxNDEsMTAgQEAKICBERVZDT05GX0ZPUkNFX1RMTEFPLAogIERFVkNPTkZfTkRJU0NfTk9USUZZLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBERVZDT05GX01MRFYxX1VOU09MSUNJVEVEX1JFUE9SVF9JTlRFUlZBTCwKKyBERVZDT05GX01MRFYyX1VOU09MSUNJVEVEX1JFUE9SVF9JTlRFUlZBTCwKKyBERVZDT05GX1NVUFBSRVNTX0ZSQUdfTkRJU0MsCiAgREVWQ09ORl9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2tleGVjLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2tleGVjLmgKaW5kZXggOTc3ZmVlNi4uYTE3ZGMyMyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9rZXhlYy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgva2V4ZWMuaApAQCAtMjYsMjQgKzI2LDI1IEBACiAjZGVmaW5lIEtFWEVDX0FSQ0hfREVGQVVMVCAoIDAgPDwgMTYpCiAjZGVmaW5lIEtFWEVDX0FSQ0hfMzg2ICggMyA8PCAxNikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtFWEVDX0FSQ0hfNjhLICggNCA8PCAxNikKICNkZWZpbmUgS0VYRUNfQVJDSF9YODZfNjQgKDYyIDw8IDE2KQogI2RlZmluZSBLRVhFQ19BUkNIX1BQQyAoMjAgPDwgMTYpCiAjZGVmaW5lIEtFWEVDX0FSQ0hfUFBDNjQgKDIxIDw8IDE2KQotI2RlZmluZSBLRVhFQ19BUkNIX0lBXzY0ICg1MCA8PCAxNikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtFWEVDX0FSQ0hfSUFfNjQgKDUwIDw8IDE2KQogI2RlZmluZSBLRVhFQ19BUkNIX0FSTSAoNDAgPDwgMTYpCiAjZGVmaW5lIEtFWEVDX0FSQ0hfUzM5MCAoMjIgPDwgMTYpCiAjZGVmaW5lIEtFWEVDX0FSQ0hfU0ggKDQyIDw8IDE2KQotI2RlZmluZSBLRVhFQ19BUkNIX01JUFNfTEUgKDEwIDw8IDE2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VYRUNfQVJDSF9NSVBTX0xFICgxMCA8PCAxNikKICNkZWZpbmUgS0VYRUNfQVJDSF9NSVBTICggOCA8PCAxNikKICNkZWZpbmUgS0VYRUNfU0VHTUVOVF9NQVggMTYKIHN0cnVjdCBrZXhlY19zZWdtZW50IHsKLSBjb25zdCB2b2lkICpidWY7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGNvbnN0IHZvaWQgKmJ1ZjsKICBzaXplX3QgYnVmc3o7CiAgY29uc3Qgdm9pZCAqbWVtOwogIHNpemVfdCBtZW1zejsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9rZXljdGwuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgva2V5Y3RsLmgKaW5kZXggODk4NTRiNS4uOTQxZTBkNSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9rZXljdGwuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2tleWN0bC5oCkBAIC02Nyw0ICs2Nyw1IEBACiAjZGVmaW5lIEtFWUNUTF9JTlNUQU5USUFURV9JT1YgMjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWUNUTF9JTlZBTElEQVRFIDIxCisjZGVmaW5lIEtFWUNUTF9HRVRfUEVSU0lTVEVOVCAyMgogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2t2bS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9rdm0uaAppbmRleCA5NTU3OTRiLi5lNjRmOWI1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2t2bS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgva3ZtLmgKQEAgLTQ3NywyNzQgKzQ3NywyODQgQEAKICNkZWZpbmUgS1ZNSU8gMHhBRQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1ZNX1MzOTBfVUNPTlRST0wgMQorI2RlZmluZSBLVk1fVk1fUFBDX0hWIDEKKyNkZWZpbmUgS1ZNX1ZNX1BQQ19QUiAyCiAjZGVmaW5lIEtWTV9TMzkwX1NJRV9QQUdFX09GRlNFVCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fR0VUX0FQSV9WRVJTSU9OIF9JTyhLVk1JTywgMHgwMCkKICNkZWZpbmUgS1ZNX0NSRUFURV9WTSBfSU8oS1ZNSU8sIDB4MDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fR0VUX01TUl9JTkRFWF9MSVNUIF9JT1dSKEtWTUlPLCAweDAyLCBzdHJ1Y3Qga3ZtX21zcl9saXN0KQogI2RlZmluZSBLVk1fUzM5MF9FTkFCTEVfU0lFIF9JTyhLVk1JTywgMHgwNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DSEVDS19FWFRFTlNJT04gX0lPKEtWTUlPLCAweDAzKQogI2RlZmluZSBLVk1fR0VUX1ZDUFVfTU1BUF9TSVpFIF9JTyhLVk1JTywgMHgwNCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9HRVRfU1VQUE9SVEVEX0NQVUlEIF9JT1dSKEtWTUlPLCAweDA1LCBzdHJ1Y3Qga3ZtX2NwdWlkMikKICNkZWZpbmUgS1ZNX1RSQUNFX0VOQUJMRSBfX0tWTV9ERVBSRUNBVEVEX01BSU5fV18weDA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fVFJBQ0VfUEFVU0UgX19LVk1fREVQUkVDQVRFRF9NQUlOXzB4MDcKICNkZWZpbmUgS1ZNX1RSQUNFX0RJU0FCTEUgX19LVk1fREVQUkVDQVRFRF9NQUlOXzB4MDgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9HRVRfRU1VTEFURURfQ1BVSUQgX0lPV1IoS1ZNSU8sIDB4MDksIHN0cnVjdCBrdm1fY3B1aWQyKQogI2RlZmluZSBLVk1fQ0FQX0lSUUNISVAgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9ITFQgMQogI2RlZmluZSBLVk1fQ0FQX01NVV9TSEFET1dfQ0FDSEVfQ09OVFJPTCAyCiAjZGVmaW5lIEtWTV9DQVBfVVNFUl9NRU1PUlkgMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9TRVRfVFNTX0FERFIgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9WQVBJQyA2CiAjZGVmaW5lIEtWTV9DQVBfRVhUX0NQVUlEIDcKICNkZWZpbmUgS1ZNX0NBUF9DTE9DS1NPVVJDRSA4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX05SX1ZDUFVTIDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfTlJfTUVNU0xPVFMgMTAKICNkZWZpbmUgS1ZNX0NBUF9QSVQgMTEKICNkZWZpbmUgS1ZNX0NBUF9OT1BfSU9fREVMQVkgMTIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUFZfTU1VIDEzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX01QX1NUQVRFIDE0CiAjZGVmaW5lIEtWTV9DQVBfQ09BTEVTQ0VEX01NSU8gMTUKICNkZWZpbmUgS1ZNX0NBUF9TWU5DX01NVSAxNgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9ERVZJQ0VfQVNTSUdOTUVOVCAxNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9JT01NVSAxOAogI2lmZGVmIF9fS1ZNX0hBVkVfTVNJCiAjZGVmaW5lIEtWTV9DQVBfREVWSUNFX01TSSAyMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9ERVNUUk9ZX01FTU9SWV9SRUdJT05fV09SS1MgMjEKICNpZmRlZiBfX0tWTV9IQVZFX1VTRVJfTk1JCiAjZGVmaW5lIEtWTV9DQVBfVVNFUl9OTUkgMjIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZkZWYgX19LVk1fSEFWRV9HVUVTVF9ERUJVRwogI2RlZmluZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRyAyMwogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIF9fS1ZNX0hBVkVfUElUCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1JFSU5KRUNUX0NPTlRST0wgMjQKICNlbmRpZgogI2RlZmluZSBLVk1fQ0FQX0lSUV9ST1VUSU5HIDI1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0lSUV9JTkpFQ1RfU1RBVFVTIDI2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0RFVklDRV9ERUFTU0lHTk1FTlQgMjcKICNpZmRlZiBfX0tWTV9IQVZFX01TSVgKICNkZWZpbmUgS1ZNX0NBUF9ERVZJQ0VfTVNJWCAyOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9BU1NJR05fREVWX0lSUSAyOQogI2RlZmluZSBLVk1fQ0FQX0pPSU5fTUVNT1JZX1JFR0lPTlNfV09SS1MgMzAKICNpZmRlZiBfX0tWTV9IQVZFX01DRQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9NQ0UgMzEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNkZWZpbmUgS1ZNX0NBUF9JUlFGRCAzMgogI2lmZGVmIF9fS1ZNX0hBVkVfUElUCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1BJVDIgMzMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNkZWZpbmUgS1ZNX0NBUF9TRVRfQk9PVF9DUFVfSUQgMzQKICNpZmRlZiBfX0tWTV9IQVZFX1BJVF9TVEFURTIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUElUX1NUQVRFMiAzNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2RlZmluZSBLVk1fQ0FQX0lPRVZFTlRGRCAzNgogI2RlZmluZSBLVk1fQ0FQX1NFVF9JREVOVElUWV9NQVBfQUREUiAzNwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0tWTV9IQVZFX1hFTl9IVk0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfWEVOX0hWTSAzOAogI2VuZGlmCiAjZGVmaW5lIEtWTV9DQVBfQURKVVNUX0NMT0NLIDM5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0lOVEVSTkFMX0VSUk9SX0RBVEEgNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZkZWYgX19LVk1fSEFWRV9WQ1BVX0VWRU5UUwogI2RlZmluZSBLVk1fQ0FQX1ZDUFVfRVZFTlRTIDQxCiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9QU1cgNDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUFBDX1NFR1NUQVRFIDQzCiAjZGVmaW5lIEtWTV9DQVBfSFlQRVJWIDQ0CiAjZGVmaW5lIEtWTV9DQVBfSFlQRVJWX1ZBUElDIDQ1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0hZUEVSVl9TUElOIDQ2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1BDSV9TRUdNRU5UIDQ3CiAjZGVmaW5lIEtWTV9DQVBfUFBDX1BBSVJFRF9TSU5HTEVTIDQ4CiAjZGVmaW5lIEtWTV9DQVBfSU5UUl9TSEFET1cgNDkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZkZWYgX19LVk1fSEFWRV9ERUJVR1JFR1MKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfREVCVUdSRUdTIDUwCiAjZW5kaWYKICNkZWZpbmUgS1ZNX0NBUF9YODZfUk9CVVNUX1NJTkdMRVNURVAgNTEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUFBDX09TSSA1MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9QUENfVU5TRVRfSVJRIDUzCiAjZGVmaW5lIEtWTV9DQVBfRU5BQkxFX0NBUCA1NAogI2lmZGVmIF9fS1ZNX0hBVkVfWFNBVkUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfWFNBVkUgNTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNpZmRlZiBfX0tWTV9IQVZFX1hDUlMKICNkZWZpbmUgS1ZNX0NBUF9YQ1JTIDU2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1BQQ19HRVRfUFZJTkZPIDU3CiAjZGVmaW5lIEtWTV9DQVBfUFBDX0lSUV9MRVZFTCA1OAogI2RlZmluZSBLVk1fQ0FQX0FTWU5DX1BGIDU5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1RTQ19DT05UUk9MIDYwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0dFVF9UU0NfS0haIDYxCiAjZGVmaW5lIEtWTV9DQVBfUFBDX0JPT0tFX1NSRUdTIDYyCiAjZGVmaW5lIEtWTV9DQVBfU1BBUFJfVENFIDYzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1BQQ19TTVQgNjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUFBDX1JNQSA2NQogI2RlZmluZSBLVk1fQ0FQX01BWF9WQ1BVUyA2NgogI2RlZmluZSBLVk1fQ0FQX1BQQ19ISU9SIDY3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1BQQ19QQVBSIDY4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1NXX1RMQiA2OQogI2RlZmluZSBLVk1fQ0FQX09ORV9SRUcgNzAKICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0dNQVAgNzEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfVFNDX0RFQURMSU5FX1RJTUVSIDcyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1MzOTBfVUNPTlRST0wgNzMKICNkZWZpbmUgS1ZNX0NBUF9TWU5DX1JFR1MgNzQKICNkZWZpbmUgS1ZNX0NBUF9QQ0lfMl8zIDc1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0tWTUNMT0NLX0NUUkwgNzYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfU0lHTkFMX01TSSA3NwogI2RlZmluZSBLVk1fQ0FQX1BQQ19HRVRfU01NVV9JTkZPIDc4CiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9DT1cgNzkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUFBDX0FMTE9DX0hUQUIgODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZkZWYgX19LVk1fSEFWRV9SRUFET05MWV9NRU0KICNkZWZpbmUgS1ZNX0NBUF9SRUFET05MWV9NRU0gODEKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9JUlFGRF9SRVNBTVBMRSA4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9QUENfQk9PS0VfV0FUQ0hET0cgODMKICNkZWZpbmUgS1ZNX0NBUF9QUENfSFRBQl9GRCA4NAogI2RlZmluZSBLVk1fQ0FQX1MzOTBfQ1NTX1NVUFBPUlQgODUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUFBDX0VQUiA4NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9BUk1fUFNDSSA4NwogI2RlZmluZSBLVk1fQ0FQX0FSTV9TRVRfREVWSUNFX0FERFIgODgKICNkZWZpbmUgS1ZNX0NBUF9ERVZJQ0VfQ1RSTCA4OQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9JUlFfTVBJQyA5MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9QUENfUlRBUyA5MQogI2RlZmluZSBLVk1fQ0FQX0lSUV9YSUNTIDkyCi0jaWZkZWYgS1ZNX0NBUF9JUlFfUk9VVElORworI2RlZmluZSBLVk1fQ0FQX0FSTV9FTDFfMzJCSVQgOTMKKyNkZWZpbmUgS1ZNX0NBUF9TUEFQUl9NVUxUSVRDRSA5NAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0NBUF9FWFRfRU1VTF9DUFVJRCA5NQorI2RlZmluZSBLVk1fQ0FQX0hZUEVSVl9USU1FIDk2CisjaWZkZWYgS1ZNX0NBUF9JUlFfUk9VVElORwogc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaXJxY2hpcDsKICBfX3UzMiBwaW47CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfbXNpIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYWRkcmVzc19sbzsKICBfX3UzMiBhZGRyZXNzX2hpOwogIF9fdTMyIGRhdGE7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBhZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBLVk1fSVJRX1JPVVRJTkdfSVJRQ0hJUCAxCiAjZGVmaW5lIEtWTV9JUlFfUk9VVElOR19NU0kgMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBnc2k7CiAgX191MzIgdHlwZTsKICBfX3UzMiBmbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGFkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIGlycWNoaXA7CiAgc3RydWN0IGt2bV9pcnFfcm91dGluZ19tc2kgbXNpOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwYWRbOF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gdTsKIH07CiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbnI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZsYWdzOwogIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgZW50cmllc1swXTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIEtWTV9DQVBfTUNFCiBzdHJ1Y3Qga3ZtX3g4Nl9tY2UgewogIF9fdTY0IHN0YXR1czsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgYWRkcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgbWlzYzsKICBfX3U2NCBtY2dfc3RhdHVzOwogIF9fdTggYmFuazsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwYWQxWzddOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBwYWQyWzNdOwogfTsKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBLVk1fQ0FQX1hFTl9IVk0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX3hlbl9odm1fY29uZmlnIHsKICBfX3UzMiBmbGFnczsKICBfX3UzMiBtc3I7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGJsb2JfYWRkcl8zMjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgYmxvYl9hZGRyXzY0OwogIF9fdTggYmxvYl9zaXplXzMyOwogIF9fdTggYmxvYl9zaXplXzY0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHBhZDJbMzBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZW5kaWYKICNkZWZpbmUgS1ZNX0lSUUZEX0ZMQUdfREVBU1NJR04gKDEgPDwgMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9JUlFGRF9GTEFHX1JFU0FNUExFICgxIDw8IDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGt2bV9pcnFmZCB7CiAgX191MzIgZmQ7CiAgX191MzIgZ3NpOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzYW1wbGVmZDsKICBfX3U4IHBhZFsxNl07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBrdm1fY2xvY2tfZGF0YSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGNsb2NrOwogIF9fdTMyIGZsYWdzOwogIF9fdTMyIHBhZFs5XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX01NVV9GU0xfQk9PS0VfTk9IViAwCiAjZGVmaW5lIEtWTV9NTVVfRlNMX0JPT0tFX0hWIDEKIHN0cnVjdCBrdm1fY29uZmlnX3RsYiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHBhcmFtczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgYXJyYXk7CiAgX191MzIgbW11X3R5cGU7CiAgX191MzIgYXJyYXlfbGVuOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGt2bV9kaXJ0eV90bGIgewogIF9fdTY0IGJpdG1hcDsKICBfX3UzMiBudW1fZGlydHk7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9SRUdfQVJDSF9NQVNLIDB4ZmYwMDAwMDAwMDAwMDAwMFVMTAogI2RlZmluZSBLVk1fUkVHX0dFTkVSSUMgMHgwMDAwMDAwMDAwMDAwMDAwVUxMCiAjZGVmaW5lIEtWTV9SRUdfUFBDIDB4MTAwMDAwMDAwMDAwMDAwMFVMTAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1JFR19YODYgMHgyMDAwMDAwMDAwMDAwMDAwVUxMCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUkVHX0lBNjQgMHgzMDAwMDAwMDAwMDAwMDAwVUxMCiAjZGVmaW5lIEtWTV9SRUdfQVJNIDB4NDAwMDAwMDAwMDAwMDAwMFVMTAogI2RlZmluZSBLVk1fUkVHX1MzOTAgMHg1MDAwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIEtWTV9SRUdfQVJNNjQgMHg2MDAwMDAwMDAwMDAwMDAwVUxMCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUkVHX01JUFMgMHg3MDAwMDAwMDAwMDAwMDAwVUxMCiAjZGVmaW5lIEtWTV9SRUdfU0laRV9TSElGVCA1MgpAQCAtODAyLDE5NSArODEyLDIwMyBAQAogI2RlZmluZSBLVk1fREVWX1RZUEVfRlNMX01QSUNfNDIgMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0RFVl9UWVBFX1hJQ1MgMworI2RlZmluZSBLVk1fREVWX1RZUEVfVkZJTyA0CisjZGVmaW5lIEtWTV9ERVZfVkZJT19HUk9VUCAxCisjZGVmaW5lIEtWTV9ERVZfVkZJT19HUk9VUF9BREQgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0RFVl9WRklPX0dST1VQX0RFTCAyCisjZGVmaW5lIEtWTV9ERVZfVFlQRV9BUk1fVkdJQ19WMiA1CiAjZGVmaW5lIEtWTV9TRVRfTUVNT1JZX1JFR0lPTiBfSU9XKEtWTUlPLCAweDQwLCBzdHJ1Y3Qga3ZtX21lbW9yeV9yZWdpb24pCiAjZGVmaW5lIEtWTV9DUkVBVEVfVkNQVSBfSU8oS1ZNSU8sIDB4NDEpCi0jZGVmaW5lIEtWTV9HRVRfRElSVFlfTE9HIF9JT1coS1ZNSU8sIDB4NDIsIHN0cnVjdCBrdm1fZGlydHlfbG9nKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0dFVF9ESVJUWV9MT0cgX0lPVyhLVk1JTywgMHg0Miwgc3RydWN0IGt2bV9kaXJ0eV9sb2cpCiAjZGVmaW5lIEtWTV9TRVRfTUVNT1JZX0FMSUFTIF9JT1coS1ZNSU8sIDB4NDMsIHN0cnVjdCBrdm1fbWVtb3J5X2FsaWFzKQogI2RlZmluZSBLVk1fU0VUX05SX01NVV9QQUdFUyBfSU8oS1ZNSU8sIDB4NDQpCiAjZGVmaW5lIEtWTV9HRVRfTlJfTU1VX1BBR0VTIF9JTyhLVk1JTywgMHg0NSkKLSNkZWZpbmUgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04gX0lPVyhLVk1JTywgMHg0NiwgICBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04gX0lPVyhLVk1JTywgMHg0NiwgICBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uKQogI2RlZmluZSBLVk1fU0VUX1RTU19BRERSIF9JTyhLVk1JTywgMHg0NykKICNkZWZpbmUgS1ZNX1NFVF9JREVOVElUWV9NQVBfQUREUiBfSU9XKEtWTUlPLCAweDQ4LCBfX3U2NCkKIHN0cnVjdCBrdm1fczM5MF91Y2FzX21hcHBpbmcgewotIF9fdTY0IHVzZXJfYWRkcjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgdXNlcl9hZGRyOwogIF9fdTY0IHZjcHVfYWRkcjsKICBfX3U2NCBsZW5ndGg7CiB9OwotI2RlZmluZSBLVk1fUzM5MF9VQ0FTX01BUCBfSU9XKEtWTUlPLCAweDUwLCBzdHJ1Y3Qga3ZtX3MzOTBfdWNhc19tYXBwaW5nKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1MzOTBfVUNBU19NQVAgX0lPVyhLVk1JTywgMHg1MCwgc3RydWN0IGt2bV9zMzkwX3VjYXNfbWFwcGluZykKICNkZWZpbmUgS1ZNX1MzOTBfVUNBU19VTk1BUCBfSU9XKEtWTUlPLCAweDUxLCBzdHJ1Y3Qga3ZtX3MzOTBfdWNhc19tYXBwaW5nKQogI2RlZmluZSBLVk1fUzM5MF9WQ1BVX0ZBVUxUIF9JT1coS1ZNSU8sIDB4NTIsIHVuc2lnbmVkIGxvbmcpCiAjZGVmaW5lIEtWTV9DUkVBVEVfSVJRQ0hJUCBfSU8oS1ZNSU8sIDB4NjApCi0jZGVmaW5lIEtWTV9JUlFfTElORSBfSU9XKEtWTUlPLCAweDYxLCBzdHJ1Y3Qga3ZtX2lycV9sZXZlbCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9JUlFfTElORSBfSU9XKEtWTUlPLCAweDYxLCBzdHJ1Y3Qga3ZtX2lycV9sZXZlbCkKICNkZWZpbmUgS1ZNX0dFVF9JUlFDSElQIF9JT1dSKEtWTUlPLCAweDYyLCBzdHJ1Y3Qga3ZtX2lycWNoaXApCiAjZGVmaW5lIEtWTV9TRVRfSVJRQ0hJUCBfSU9SKEtWTUlPLCAweDYzLCBzdHJ1Y3Qga3ZtX2lycWNoaXApCiAjZGVmaW5lIEtWTV9DUkVBVEVfUElUIF9JTyhLVk1JTywgMHg2NCkKLSNkZWZpbmUgS1ZNX0dFVF9QSVQgX0lPV1IoS1ZNSU8sIDB4NjUsIHN0cnVjdCBrdm1fcGl0X3N0YXRlKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0dFVF9QSVQgX0lPV1IoS1ZNSU8sIDB4NjUsIHN0cnVjdCBrdm1fcGl0X3N0YXRlKQogI2RlZmluZSBLVk1fU0VUX1BJVCBfSU9SKEtWTUlPLCAweDY2LCBzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZSkKICNkZWZpbmUgS1ZNX0lSUV9MSU5FX1NUQVRVUyBfSU9XUihLVk1JTywgMHg2Nywgc3RydWN0IGt2bV9pcnFfbGV2ZWwpCiAjZGVmaW5lIEtWTV9SRUdJU1RFUl9DT0FMRVNDRURfTU1JTyAgIF9JT1coS1ZNSU8sIDB4NjcsIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSkKLSNkZWZpbmUgS1ZNX1VOUkVHSVNURVJfQ09BTEVTQ0VEX01NSU8gICBfSU9XKEtWTUlPLCAweDY4LCBzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3pvbmUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fVU5SRUdJU1RFUl9DT0FMRVNDRURfTU1JTyAgIF9JT1coS1ZNSU8sIDB4NjgsIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSkKICNkZWZpbmUgS1ZNX0FTU0lHTl9QQ0lfREVWSUNFIF9JT1IoS1ZNSU8sIDB4NjksICAgc3RydWN0IGt2bV9hc3NpZ25lZF9wY2lfZGV2KQogI2RlZmluZSBLVk1fU0VUX0dTSV9ST1VUSU5HIF9JT1coS1ZNSU8sIDB4NmEsIHN0cnVjdCBrdm1faXJxX3JvdXRpbmcpCiAjZGVmaW5lIEtWTV9BU1NJR05fSVJRIF9fS1ZNX0RFUFJFQ0FURURfVk1fUl8weDcwCi0jZGVmaW5lIEtWTV9BU1NJR05fREVWX0lSUSBfSU9XKEtWTUlPLCAweDcwLCBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2lycSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9BU1NJR05fREVWX0lSUSBfSU9XKEtWTUlPLCAweDcwLCBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2lycSkKICNkZWZpbmUgS1ZNX1JFSU5KRUNUX0NPTlRST0wgX0lPKEtWTUlPLCAweDcxKQogI2RlZmluZSBLVk1fREVBU1NJR05fUENJX0RFVklDRSBfSU9XKEtWTUlPLCAweDcyLCAgIHN0cnVjdCBrdm1fYXNzaWduZWRfcGNpX2RldikKICNkZWZpbmUgS1ZNX0FTU0lHTl9TRVRfTVNJWF9OUiBfSU9XKEtWTUlPLCAweDczLCAgIHN0cnVjdCBrdm1fYXNzaWduZWRfbXNpeF9ucikKLSNkZWZpbmUgS1ZNX0FTU0lHTl9TRVRfTVNJWF9FTlRSWSBfSU9XKEtWTUlPLCAweDc0LCAgIHN0cnVjdCBrdm1fYXNzaWduZWRfbXNpeF9lbnRyeSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9BU1NJR05fU0VUX01TSVhfRU5UUlkgX0lPVyhLVk1JTywgMHg3NCwgICBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX21zaXhfZW50cnkpCiAjZGVmaW5lIEtWTV9ERUFTU0lHTl9ERVZfSVJRIF9JT1coS1ZNSU8sIDB4NzUsIHN0cnVjdCBrdm1fYXNzaWduZWRfaXJxKQogI2RlZmluZSBLVk1fSVJRRkQgX0lPVyhLVk1JTywgMHg3Niwgc3RydWN0IGt2bV9pcnFmZCkKICNkZWZpbmUgS1ZNX0NSRUFURV9QSVQyIF9JT1coS1ZNSU8sIDB4NzcsIHN0cnVjdCBrdm1fcGl0X2NvbmZpZykKLSNkZWZpbmUgS1ZNX1NFVF9CT09UX0NQVV9JRCBfSU8oS1ZNSU8sIDB4NzgpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fU0VUX0JPT1RfQ1BVX0lEIF9JTyhLVk1JTywgMHg3OCkKICNkZWZpbmUgS1ZNX0lPRVZFTlRGRCBfSU9XKEtWTUlPLCAweDc5LCBzdHJ1Y3Qga3ZtX2lvZXZlbnRmZCkKICNkZWZpbmUgS1ZNX1hFTl9IVk1fQ09ORklHIF9JT1coS1ZNSU8sIDB4N2EsIHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcpCiAjZGVmaW5lIEtWTV9TRVRfQ0xPQ0sgX0lPVyhLVk1JTywgMHg3Yiwgc3RydWN0IGt2bV9jbG9ja19kYXRhKQotI2RlZmluZSBLVk1fR0VUX0NMT0NLIF9JT1IoS1ZNSU8sIDB4N2MsIHN0cnVjdCBrdm1fY2xvY2tfZGF0YSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9HRVRfQ0xPQ0sgX0lPUihLVk1JTywgMHg3Yywgc3RydWN0IGt2bV9jbG9ja19kYXRhKQogI2RlZmluZSBLVk1fR0VUX1BJVDIgX0lPUihLVk1JTywgMHg5Ziwgc3RydWN0IGt2bV9waXRfc3RhdGUyKQogI2RlZmluZSBLVk1fU0VUX1BJVDIgX0lPVyhLVk1JTywgMHhhMCwgc3RydWN0IGt2bV9waXRfc3RhdGUyKQogI2RlZmluZSBLVk1fUFBDX0dFVF9QVklORk8gX0lPVyhLVk1JTywgMHhhMSwgc3RydWN0IGt2bV9wcGNfcHZpbmZvKQotI2RlZmluZSBLVk1fU0VUX1RTQ19LSFogX0lPKEtWTUlPLCAweGEyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1NFVF9UU0NfS0haIF9JTyhLVk1JTywgMHhhMikKICNkZWZpbmUgS1ZNX0dFVF9UU0NfS0haIF9JTyhLVk1JTywgMHhhMykKICNkZWZpbmUgS1ZNX0FTU0lHTl9TRVRfSU5UWF9NQVNLIF9JT1coS1ZNSU8sIDB4YTQsICAgc3RydWN0IGt2bV9hc3NpZ25lZF9wY2lfZGV2KQogI2RlZmluZSBLVk1fU0lHTkFMX01TSSBfSU9XKEtWTUlPLCAweGE1LCBzdHJ1Y3Qga3ZtX21zaSkKLSNkZWZpbmUgS1ZNX1BQQ19HRVRfU01NVV9JTkZPIF9JT1IoS1ZNSU8sIDB4YTYsIHN0cnVjdCBrdm1fcHBjX3NtbXVfaW5mbykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9QUENfR0VUX1NNTVVfSU5GTyBfSU9SKEtWTUlPLCAweGE2LCBzdHJ1Y3Qga3ZtX3BwY19zbW11X2luZm8pCiAjZGVmaW5lIEtWTV9QUENfQUxMT0NBVEVfSFRBQiBfSU9XUihLVk1JTywgMHhhNywgX191MzIpCiAjZGVmaW5lIEtWTV9DUkVBVEVfU1BBUFJfVENFIF9JT1coS1ZNSU8sIDB4YTgsIHN0cnVjdCBrdm1fY3JlYXRlX3NwYXByX3RjZSkKICNkZWZpbmUgS1ZNX0FMTE9DQVRFX1JNQSBfSU9SKEtWTUlPLCAweGE5LCBzdHJ1Y3Qga3ZtX2FsbG9jYXRlX3JtYSkKLSNkZWZpbmUgS1ZNX1BQQ19HRVRfSFRBQl9GRCBfSU9XKEtWTUlPLCAweGFhLCBzdHJ1Y3Qga3ZtX2dldF9odGFiX2ZkKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1BQQ19HRVRfSFRBQl9GRCBfSU9XKEtWTUlPLCAweGFhLCBzdHJ1Y3Qga3ZtX2dldF9odGFiX2ZkKQogI2RlZmluZSBLVk1fQVJNX1NFVF9ERVZJQ0VfQUREUiBfSU9XKEtWTUlPLCAweGFiLCBzdHJ1Y3Qga3ZtX2FybV9kZXZpY2VfYWRkcikKICNkZWZpbmUgS1ZNX1BQQ19SVEFTX0RFRklORV9UT0tFTiBfSU9XKEtWTUlPLCAweGFjLCBzdHJ1Y3Qga3ZtX3J0YXNfdG9rZW5fYXJncykKICNkZWZpbmUgS1ZNX0NSRUFURV9ERVZJQ0UgX0lPV1IoS1ZNSU8sIDB4ZTAsIHN0cnVjdCBrdm1fY3JlYXRlX2RldmljZSkKLSNkZWZpbmUgS1ZNX1NFVF9ERVZJQ0VfQVRUUiBfSU9XKEtWTUlPLCAweGUxLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1NFVF9ERVZJQ0VfQVRUUiBfSU9XKEtWTUlPLCAweGUxLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyKQogI2RlZmluZSBLVk1fR0VUX0RFVklDRV9BVFRSIF9JT1coS1ZNSU8sIDB4ZTIsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpCiAjZGVmaW5lIEtWTV9IQVNfREVWSUNFX0FUVFIgX0lPVyhLVk1JTywgMHhlMywgc3RydWN0IGt2bV9kZXZpY2VfYXR0cikKICNkZWZpbmUgS1ZNX1JVTiBfSU8oS1ZNSU8sIDB4ODApCi0jZGVmaW5lIEtWTV9HRVRfUkVHUyBfSU9SKEtWTUlPLCAweDgxLCBzdHJ1Y3Qga3ZtX3JlZ3MpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fR0VUX1JFR1MgX0lPUihLVk1JTywgMHg4MSwgc3RydWN0IGt2bV9yZWdzKQogI2RlZmluZSBLVk1fU0VUX1JFR1MgX0lPVyhLVk1JTywgMHg4Miwgc3RydWN0IGt2bV9yZWdzKQogI2RlZmluZSBLVk1fR0VUX1NSRUdTIF9JT1IoS1ZNSU8sIDB4ODMsIHN0cnVjdCBrdm1fc3JlZ3MpCiAjZGVmaW5lIEtWTV9TRVRfU1JFR1MgX0lPVyhLVk1JTywgMHg4NCwgc3RydWN0IGt2bV9zcmVncykKLSNkZWZpbmUgS1ZNX1RSQU5TTEFURSBfSU9XUihLVk1JTywgMHg4NSwgc3RydWN0IGt2bV90cmFuc2xhdGlvbikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9UUkFOU0xBVEUgX0lPV1IoS1ZNSU8sIDB4ODUsIHN0cnVjdCBrdm1fdHJhbnNsYXRpb24pCiAjZGVmaW5lIEtWTV9JTlRFUlJVUFQgX0lPVyhLVk1JTywgMHg4Niwgc3RydWN0IGt2bV9pbnRlcnJ1cHQpCiAjZGVmaW5lIEtWTV9ERUJVR19HVUVTVCBfX0tWTV9ERVBSRUNBVEVEX1ZDUFVfV18weDg3CiAjZGVmaW5lIEtWTV9HRVRfTVNSUyBfSU9XUihLVk1JTywgMHg4OCwgc3RydWN0IGt2bV9tc3JzKQotI2RlZmluZSBLVk1fU0VUX01TUlMgX0lPVyhLVk1JTywgMHg4OSwgc3RydWN0IGt2bV9tc3JzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1NFVF9NU1JTIF9JT1coS1ZNSU8sIDB4ODksIHN0cnVjdCBrdm1fbXNycykKICNkZWZpbmUgS1ZNX1NFVF9DUFVJRCBfSU9XKEtWTUlPLCAweDhhLCBzdHJ1Y3Qga3ZtX2NwdWlkKQogI2RlZmluZSBLVk1fU0VUX1NJR05BTF9NQVNLIF9JT1coS1ZNSU8sIDB4OGIsIHN0cnVjdCBrdm1fc2lnbmFsX21hc2spCiAjZGVmaW5lIEtWTV9HRVRfRlBVIF9JT1IoS1ZNSU8sIDB4OGMsIHN0cnVjdCBrdm1fZnB1KQotI2RlZmluZSBLVk1fU0VUX0ZQVSBfSU9XKEtWTUlPLCAweDhkLCBzdHJ1Y3Qga3ZtX2ZwdSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9TRVRfRlBVIF9JT1coS1ZNSU8sIDB4OGQsIHN0cnVjdCBrdm1fZnB1KQogI2RlZmluZSBLVk1fR0VUX0xBUElDIF9JT1IoS1ZNSU8sIDB4OGUsIHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUpCiAjZGVmaW5lIEtWTV9TRVRfTEFQSUMgX0lPVyhLVk1JTywgMHg4Ziwgc3RydWN0IGt2bV9sYXBpY19zdGF0ZSkKICNkZWZpbmUgS1ZNX1NFVF9DUFVJRDIgX0lPVyhLVk1JTywgMHg5MCwgc3RydWN0IGt2bV9jcHVpZDIpCi0jZGVmaW5lIEtWTV9HRVRfQ1BVSUQyIF9JT1dSKEtWTUlPLCAweDkxLCBzdHJ1Y3Qga3ZtX2NwdWlkMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9HRVRfQ1BVSUQyIF9JT1dSKEtWTUlPLCAweDkxLCBzdHJ1Y3Qga3ZtX2NwdWlkMikKICNkZWZpbmUgS1ZNX1RQUl9BQ0NFU1NfUkVQT1JUSU5HIF9JT1dSKEtWTUlPLCAweDkyLCBzdHJ1Y3Qga3ZtX3Rwcl9hY2Nlc3NfY3RsKQogI2RlZmluZSBLVk1fU0VUX1ZBUElDX0FERFIgX0lPVyhLVk1JTywgMHg5Mywgc3RydWN0IGt2bV92YXBpY19hZGRyKQogI2RlZmluZSBLVk1fUzM5MF9JTlRFUlJVUFQgX0lPVyhLVk1JTywgMHg5NCwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCkKLSNkZWZpbmUgS1ZNX1MzOTBfU1RPUkVfU1RBVFVTX05PQUREUiAoLTF1bCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9TMzkwX1NUT1JFX1NUQVRVU19OT0FERFIgKC0xdWwpCiAjZGVmaW5lIEtWTV9TMzkwX1NUT1JFX1NUQVRVU19QUkVGSVhFRCAoLTJ1bCkKICNkZWZpbmUgS1ZNX1MzOTBfU1RPUkVfU1RBVFVTIF9JT1coS1ZNSU8sIDB4OTUsIHVuc2lnbmVkIGxvbmcpCiAjZGVmaW5lIEtWTV9TMzkwX1NFVF9JTklUSUFMX1BTVyBfSU9XKEtWTUlPLCAweDk2LCBzdHJ1Y3Qga3ZtX3MzOTBfcHN3KQotI2RlZmluZSBLVk1fUzM5MF9JTklUSUFMX1JFU0VUIF9JTyhLVk1JTywgMHg5NykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9TMzkwX0lOSVRJQUxfUkVTRVQgX0lPKEtWTUlPLCAweDk3KQogI2RlZmluZSBLVk1fR0VUX01QX1NUQVRFIF9JT1IoS1ZNSU8sIDB4OTgsIHN0cnVjdCBrdm1fbXBfc3RhdGUpCiAjZGVmaW5lIEtWTV9TRVRfTVBfU1RBVEUgX0lPVyhLVk1JTywgMHg5OSwgc3RydWN0IGt2bV9tcF9zdGF0ZSkKICNkZWZpbmUgS1ZNX05NSSBfSU8oS1ZNSU8sIDB4OWEpCi0jZGVmaW5lIEtWTV9TRVRfR1VFU1RfREVCVUcgX0lPVyhLVk1JTywgMHg5Yiwgc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9TRVRfR1VFU1RfREVCVUcgX0lPVyhLVk1JTywgMHg5Yiwgc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZykKICNkZWZpbmUgS1ZNX1g4Nl9TRVRVUF9NQ0UgX0lPVyhLVk1JTywgMHg5YywgX191NjQpCiAjZGVmaW5lIEtWTV9YODZfR0VUX01DRV9DQVBfU1VQUE9SVEVEIF9JT1IoS1ZNSU8sIDB4OWQsIF9fdTY0KQogI2RlZmluZSBLVk1fWDg2X1NFVF9NQ0UgX0lPVyhLVk1JTywgMHg5ZSwgc3RydWN0IGt2bV94ODZfbWNlKQotI2RlZmluZSBLVk1fSUE2NF9WQ1BVX0dFVF9TVEFDSyBfSU9SKEtWTUlPLCAweDlhLCB2b2lkICopCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fSUE2NF9WQ1BVX0dFVF9TVEFDSyBfSU9SKEtWTUlPLCAweDlhLCB2b2lkICopCiAjZGVmaW5lIEtWTV9JQTY0X1ZDUFVfU0VUX1NUQUNLIF9JT1coS1ZNSU8sIDB4OWIsIHZvaWQgKikKICNkZWZpbmUgS1ZNX0dFVF9WQ1BVX0VWRU5UUyBfSU9SKEtWTUlPLCAweDlmLCBzdHJ1Y3Qga3ZtX3ZjcHVfZXZlbnRzKQogI2RlZmluZSBLVk1fU0VUX1ZDUFVfRVZFTlRTIF9JT1coS1ZNSU8sIDB4YTAsIHN0cnVjdCBrdm1fdmNwdV9ldmVudHMpCi0jZGVmaW5lIEtWTV9HRVRfREVCVUdSRUdTIF9JT1IoS1ZNSU8sIDB4YTEsIHN0cnVjdCBrdm1fZGVidWdyZWdzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0dFVF9ERUJVR1JFR1MgX0lPUihLVk1JTywgMHhhMSwgc3RydWN0IGt2bV9kZWJ1Z3JlZ3MpCiAjZGVmaW5lIEtWTV9TRVRfREVCVUdSRUdTIF9JT1coS1ZNSU8sIDB4YTIsIHN0cnVjdCBrdm1fZGVidWdyZWdzKQogI2RlZmluZSBLVk1fRU5BQkxFX0NBUCBfSU9XKEtWTUlPLCAweGEzLCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXApCiAjZGVmaW5lIEtWTV9HRVRfWFNBVkUgX0lPUihLVk1JTywgMHhhNCwgc3RydWN0IGt2bV94c2F2ZSkKLSNkZWZpbmUgS1ZNX1NFVF9YU0FWRSBfSU9XKEtWTUlPLCAweGE1LCBzdHJ1Y3Qga3ZtX3hzYXZlKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1NFVF9YU0FWRSBfSU9XKEtWTUlPLCAweGE1LCBzdHJ1Y3Qga3ZtX3hzYXZlKQogI2RlZmluZSBLVk1fR0VUX1hDUlMgX0lPUihLVk1JTywgMHhhNiwgc3RydWN0IGt2bV94Y3JzKQogI2RlZmluZSBLVk1fU0VUX1hDUlMgX0lPVyhLVk1JTywgMHhhNywgc3RydWN0IGt2bV94Y3JzKQogI2RlZmluZSBLVk1fRElSVFlfVExCIF9JT1coS1ZNSU8sIDB4YWEsIHN0cnVjdCBrdm1fZGlydHlfdGxiKQotI2RlZmluZSBLVk1fR0VUX09ORV9SRUcgX0lPVyhLVk1JTywgMHhhYiwgc3RydWN0IGt2bV9vbmVfcmVnKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0dFVF9PTkVfUkVHIF9JT1coS1ZNSU8sIDB4YWIsIHN0cnVjdCBrdm1fb25lX3JlZykKICNkZWZpbmUgS1ZNX1NFVF9PTkVfUkVHIF9JT1coS1ZNSU8sIDB4YWMsIHN0cnVjdCBrdm1fb25lX3JlZykKICNkZWZpbmUgS1ZNX0tWTUNMT0NLX0NUUkwgX0lPKEtWTUlPLCAweGFkKQogI2RlZmluZSBLVk1fQVJNX1ZDUFVfSU5JVCBfSU9XKEtWTUlPLCAweGFlLCBzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCkKLSNkZWZpbmUgS1ZNX0dFVF9SRUdfTElTVCBfSU9XUihLVk1JTywgMHhiMCwgc3RydWN0IGt2bV9yZWdfbGlzdCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9BUk1fUFJFRkVSUkVEX1RBUkdFVCBfSU9SKEtWTUlPLCAweGFmLCBzdHJ1Y3Qga3ZtX3ZjcHVfaW5pdCkKKyNkZWZpbmUgS1ZNX0dFVF9SRUdfTElTVCBfSU9XUihLVk1JTywgMHhiMCwgc3RydWN0IGt2bV9yZWdfbGlzdCkKICNkZWZpbmUgS1ZNX0RFVl9BU1NJR05fRU5BQkxFX0lPTU1VICgxIDw8IDApCiAjZGVmaW5lIEtWTV9ERVZfQVNTSUdOX1BDSV8yXzMgKDEgPDwgMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9ERVZfQVNTSUdOX01BU0tfSU5UWCAoMSA8PCAyKQogc3RydWN0IGt2bV9hc3NpZ25lZF9wY2lfZGV2IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYXNzaWduZWRfZGV2X2lkOwogIF9fdTMyIGJ1c25yOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBkZXZmbjsKICBfX3UzMiBmbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc2VnbnI7CiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFsxMV07CiAgfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBLVk1fREVWX0lSUV9IT1NUX0lOVFggKDEgPDwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9ERVZfSVJRX0hPU1RfTVNJICgxIDw8IDEpCiAjZGVmaW5lIEtWTV9ERVZfSVJRX0hPU1RfTVNJWCAoMSA8PCAyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0RFVl9JUlFfR1VFU1RfSU5UWCAoMSA8PCA4KQogI2RlZmluZSBLVk1fREVWX0lSUV9HVUVTVF9NU0kgKDEgPDwgOSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9ERVZfSVJRX0dVRVNUX01TSVggKDEgPDwgMTApCiAjZGVmaW5lIEtWTV9ERVZfSVJRX0hPU1RfTUFTSyAweDAwZmYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9ERVZfSVJRX0dVRVNUX01BU0sgMHhmZjAwCiBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2lycSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGFzc2lnbmVkX2Rldl9pZDsKICBfX3UzMiBob3N0X2lycTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZ3Vlc3RfaXJxOwogIF9fdTMyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgX191MzIgcmVzZXJ2ZWRbMTJdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9OwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX21zaXhfbnIgewogIF9fdTMyIGFzc2lnbmVkX2Rldl9pZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgZW50cnlfbnI7CiAgX191MTYgcGFkZGluZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBLVk1fTUFYX01TSVhfUEVSX0RFViAyNTYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX21zaXhfZW50cnkgewogIF9fdTMyIGFzc2lnbmVkX2Rldl9pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZ3NpOwogIF9fdTE2IGVudHJ5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBwYWRkaW5nWzNdOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgva3ZtX3BhcmEuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgva3ZtX3BhcmEuaAppbmRleCBhYjAxZTY5Li5kOTczOTk2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2t2bV9wYXJhLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9rdm1fcGFyYS5oCkBAIC0yOCw2ICsyOCw3IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fSENfRkVBVFVSRVMgMwogI2RlZmluZSBLVk1fSENfUFBDX01BUF9NQUdJQ19QQUdFIDQKKyNkZWZpbmUgS1ZNX0hDX0tJQ0tfQ1BVIDUKICNpbmNsdWRlIDxhc20va3ZtX3BhcmEuaD4KLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNmI3NjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmgKQEAgLTAsMCArMSw1MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfVUFQSV9MSUJDX0NPTVBBVF9ICisjZGVmaW5lIF9VQVBJX0xJQkNfQ09NUEFUX0gKKyNpZmRlZiBfX0dMSUJDX18KKyNpZmRlZiBfTkVUSU5FVF9JTl9ICisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX1VBUElfREVGX0lONl9BRERSIDAKKyNpZiBkZWZpbmVkKF9fVVNFX01JU0MpIHx8IGRlZmluZWQoX19VU0VfR05VKQorI2RlZmluZSBfX1VBUElfREVGX0lONl9BRERSX0FMVCAwCisjZWxzZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19VQVBJX0RFRl9JTjZfQUREUl9BTFQgMQorI2VuZGlmCisjZGVmaW5lIF9fVUFQSV9ERUZfU09DS0FERFJfSU42IDAKKyNkZWZpbmUgX19VQVBJX0RFRl9JUFY2X01SRVEgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19VQVBJX0RFRl9JUFBST1RPX1Y2IDAKKyNlbHNlCisjZGVmaW5lIF9fVUFQSV9ERUZfSU42X0FERFIgMQorI2RlZmluZSBfX1VBUElfREVGX0lONl9BRERSX0FMVCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX1VBUElfREVGX1NPQ0tBRERSX0lONiAxCisjZGVmaW5lIF9fVUFQSV9ERUZfSVBWNl9NUkVRIDEKKyNkZWZpbmUgX19VQVBJX0RFRl9JUFBST1RPX1Y2IDEKKyNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbHNlCisjZGVmaW5lIF9fVUFQSV9ERUZfSU42X0FERFIgMQorI2RlZmluZSBfX1VBUElfREVGX0lONl9BRERSX0FMVCAxCisjZGVmaW5lIF9fVUFQSV9ERUZfU09DS0FERFJfSU42IDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fVUFQSV9ERUZfSVBWNl9NUkVRIDEKKyNkZWZpbmUgX19VQVBJX0RFRl9JUFBST1RPX1Y2IDEKKyNlbmRpZgorI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tYWdpYy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tYWdpYy5oCmluZGV4IDE5ZWYzOTIuLjdjN2M2YzMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbWFnaWMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21hZ2ljLmgKQEAgLTkzLDQgKzkzLDYgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1URF9JTk9ERV9GU19NQUdJQyAweDExMzA3ODU0CiAjZGVmaW5lIEFOT05fSU5PREVfRlNfTUFHSUMgMHgwOTA0MTkzNAorI2RlZmluZSBCVFJGU19URVNUX01BR0lDIDB4NzM3MjcyNzkKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbWFqb3IuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbWFqb3IuaAppbmRleCAzZDE1NTdhLi5kMDdkMDY1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21ham9yLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tYWpvci5oCkBAIC03OCwxMTggKzc4LDEyMSBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVpURUNIX0NEUk9NX01BSk9SIDI5CiAjZGVmaW5lIEZCX01BSk9SIDI5CisjZGVmaW5lIE1URF9CTE9DS19NQUpPUiAzMQogI2RlZmluZSBDTTIwNl9DRFJPTV9NQUpPUiAzMgotI2RlZmluZSBJREUyX01BSk9SIDMzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJREUyX01BSk9SIDMzCiAjZGVmaW5lIElERTNfTUFKT1IgMzQKICNkZWZpbmUgWjg1MzBfTUFKT1IgMzQKICNkZWZpbmUgWFBSQU1fTUFKT1IgMzUKLSNkZWZpbmUgTkVUTElOS19NQUpPUiAzNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkVUTElOS19NQUpPUiAzNgogI2RlZmluZSBQUzJFU0RJX01BSk9SIDM2CiAjZGVmaW5lIElERVRBUEVfTUFKT1IgMzcKICNkZWZpbmUgWjJSQU1fTUFKT1IgMzcKLSNkZWZpbmUgQVBCTE9DS19NQUpPUiAzOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVBCTE9DS19NQUpPUiAzOAogI2RlZmluZSBERFZfTUFKT1IgMzkKICNkZWZpbmUgTkJEX01BSk9SIDQzCiAjZGVmaW5lIFJJU0NPTThfTk9STUFMX01BSk9SIDQ4Ci0jZGVmaW5lIERBQzk2MF9NQUpPUiA0OAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgREFDOTYwX01BSk9SIDQ4CiAjZGVmaW5lIFJJU0NPTThfQ0FMTE9VVF9NQUpPUiA0OQogI2RlZmluZSBNS0lTU19NQUpPUiA1NQogI2RlZmluZSBEU1A1NktfTUFKT1IgNTUKLSNkZWZpbmUgSURFNF9NQUpPUiA1NgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSURFNF9NQUpPUiA1NgogI2RlZmluZSBJREU1X01BSk9SIDU3CiAjZGVmaW5lIFNDU0lfRElTSzFfTUFKT1IgNjUKICNkZWZpbmUgU0NTSV9ESVNLMl9NQUpPUiA2NgotI2RlZmluZSBTQ1NJX0RJU0szX01BSk9SIDY3CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQ1NJX0RJU0szX01BSk9SIDY3CiAjZGVmaW5lIFNDU0lfRElTSzRfTUFKT1IgNjgKICNkZWZpbmUgU0NTSV9ESVNLNV9NQUpPUiA2OQogI2RlZmluZSBTQ1NJX0RJU0s2X01BSk9SIDcwCi0jZGVmaW5lIFNDU0lfRElTSzdfTUFKT1IgNzEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNDU0lfRElTSzdfTUFKT1IgNzEKICNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUiA3MgogI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SMSA3MwogI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SMiA3NAotI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SMyA3NQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjMgNzUKICNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjQgNzYKICNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjUgNzcKICNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjYgNzgKLSNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjcgNzkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENPTVBBUV9TTUFSVDJfTUFKT1I3IDc5CiAjZGVmaW5lIFNQRUNJQUxJWF9OT1JNQUxfTUFKT1IgNzUKICNkZWZpbmUgU1BFQ0lBTElYX0NBTExPVVRfTUFKT1IgNzYKICNkZWZpbmUgQVVST1JBX01BSk9SIDc5Ci0jZGVmaW5lIEkyT19NQUpPUiA4MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSTJPX01BSk9SIDgwCiAjZGVmaW5lIFNITUlRX01BSk9SIDg1CiAjZGVmaW5lIFNDU0lfQ0hBTkdFUl9NQUpPUiA4NgogI2RlZmluZSBJREU2X01BSk9SIDg4Ci0jZGVmaW5lIElERTdfTUFKT1IgODkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElERTdfTUFKT1IgODkKICNkZWZpbmUgSURFOF9NQUpPUiA5MAorI2RlZmluZSBNVERfQ0hBUl9NQUpPUiA5MAogI2RlZmluZSBJREU5X01BSk9SIDkxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEQVNEX01BSk9SIDk0CiAjZGVmaW5lIE1ESVNLX01BSk9SIDk1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVQkRfTUFKT1IgOTgKICNkZWZpbmUgUFBfTUFKT1IgOTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEpTRkRfTUFKT1IgOTkKICNkZWZpbmUgUEhPTkVfTUFKT1IgMTAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUiAxMDQKICNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1IxIDEwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1IyIDEwNgogI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUjMgMTA3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUjQgMTA4CiAjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SNSAxMDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SNiAxMTAKICNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1I3IDExMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklPREFTRF9NQUpPUiAxMTIKICNkZWZpbmUgVklPQ0RfTUFKT1IgMTEzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVEFSQUlEX01BSk9SIDExNAogI2RlZmluZSBTQ1NJX0RJU0s4X01BSk9SIDEyOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0NTSV9ESVNLOV9NQUpPUiAxMjkKICNkZWZpbmUgU0NTSV9ESVNLMTBfTUFKT1IgMTMwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQ1NJX0RJU0sxMV9NQUpPUiAxMzEKICNkZWZpbmUgU0NTSV9ESVNLMTJfTUFKT1IgMTMyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQ1NJX0RJU0sxM19NQUpPUiAxMzMKICNkZWZpbmUgU0NTSV9ESVNLMTRfTUFKT1IgMTM0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQ1NJX0RJU0sxNV9NQUpPUiAxMzUKICNkZWZpbmUgVU5JWDk4X1BUWV9NQVNURVJfTUFKT1IgMTI4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVTklYOThfUFRZX01BSk9SX0NPVU5UIDgKICNkZWZpbmUgVU5JWDk4X1BUWV9TTEFWRV9NQUpPUiAoVU5JWDk4X1BUWV9NQVNURVJfTUFKT1IrVU5JWDk4X1BUWV9NQUpPUl9DT1VOVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSQkRfTUFKT1IgMTQ3CiAjZGVmaW5lIFJURl9NQUpPUiAxNTAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJBV19NQUpPUiAxNjIKICNkZWZpbmUgVVNCX0FDTV9NQUpPUiAxNjYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVTQl9BQ01fQVVYX01BSk9SIDE2NwogI2RlZmluZSBVU0JfQ0hBUl9NQUpPUiAxODAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1NQ19CTE9DS19NQUpPUiAxNzkKICNkZWZpbmUgVlhWTV9NQUpPUiAxOTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZYU1BFQ19NQUpPUiAyMDAKICNkZWZpbmUgVlhETVBfTUFKT1IgMjAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYRU5WQkRfTUFKT1IgMjAyCiAjZGVmaW5lIE1TUl9NQUpPUiAyMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENQVUlEX01BSk9SIDIwMwogI2RlZmluZSBPU1NUX01BSk9SIDIwNgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUJNX1RUWTMyNzBfTUFKT1IgMjI3CiAjZGVmaW5lIElCTV9GUzMyNzBfTUFKT1IgMjI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSU9UQVBFX01BSk9SIDIzMAogI2RlZmluZSBCTE9DS19FWFRfTUFKT1IgMjU5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQ1NJX09TRF9NQUpPUiAyNjAKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbWVkaWEuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbWVkaWEuaAppbmRleCA4YTI2ODdjLi40YmE1NGFhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21lZGlhLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tZWRpYS5oCkBAIC05MiwzNSArOTIsMzcgQEAKICNkZWZpbmUgTUVESUFfUEFEX0ZMX1NJTksgKDEgPDwgMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1FRElBX1BBRF9GTF9TT1VSQ0UgKDEgPDwgMSkKKyNkZWZpbmUgTUVESUFfUEFEX0ZMX01VU1RfQ09OTkVDVCAoMSA8PCAyKQogc3RydWN0IG1lZGlhX3BhZF9kZXNjIHsKICBfX3UzMiBlbnRpdHk7Ci0gX191MTYgaW5kZXg7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IGluZGV4OwogIF9fdTMyIGZsYWdzOwogIF9fdTMyIHJlc2VydmVkWzJdOwogfTsKLSNkZWZpbmUgTUVESUFfTE5LX0ZMX0VOQUJMRUQgKDEgPDwgMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1FRElBX0xOS19GTF9FTkFCTEVEICgxIDw8IDApCiAjZGVmaW5lIE1FRElBX0xOS19GTF9JTU1VVEFCTEUgKDEgPDwgMSkKICNkZWZpbmUgTUVESUFfTE5LX0ZMX0RZTkFNSUMgKDEgPDwgMikKIHN0cnVjdCBtZWRpYV9saW5rX2Rlc2MgewotIHN0cnVjdCBtZWRpYV9wYWRfZGVzYyBzb3VyY2U7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBtZWRpYV9wYWRfZGVzYyBzb3VyY2U7CiAgc3RydWN0IG1lZGlhX3BhZF9kZXNjIHNpbms7CiAgX191MzIgZmxhZ3M7CiAgX191MzIgcmVzZXJ2ZWRbMl07Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgbWVkaWFfbGlua3NfZW51bSB7CiAgX191MzIgZW50aXR5OwogIHN0cnVjdCBtZWRpYV9wYWRfZGVzYyBfX3VzZXIgKnBhZHM7Ci0gc3RydWN0IG1lZGlhX2xpbmtfZGVzYyBfX3VzZXIgKmxpbmtzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgbWVkaWFfbGlua19kZXNjIF9fdXNlciAqbGlua3M7CiAgX191MzIgcmVzZXJ2ZWRbNF07CiB9OwogI2RlZmluZSBNRURJQV9JT0NfREVWSUNFX0lORk8gX0lPV1IoJ3wnLCAweDAwLCBzdHJ1Y3QgbWVkaWFfZGV2aWNlX2luZm8pCi0jZGVmaW5lIE1FRElBX0lPQ19FTlVNX0VOVElUSUVTIF9JT1dSKCd8JywgMHgwMSwgc3RydWN0IG1lZGlhX2VudGl0eV9kZXNjKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUVESUFfSU9DX0VOVU1fRU5USVRJRVMgX0lPV1IoJ3wnLCAweDAxLCBzdHJ1Y3QgbWVkaWFfZW50aXR5X2Rlc2MpCiAjZGVmaW5lIE1FRElBX0lPQ19FTlVNX0xJTktTIF9JT1dSKCd8JywgMHgwMiwgc3RydWN0IG1lZGlhX2xpbmtzX2VudW0pCiAjZGVmaW5lIE1FRElBX0lPQ19TRVRVUF9MSU5LIF9JT1dSKCd8JywgMHgwMywgc3RydWN0IG1lZGlhX2xpbmtfZGVzYykKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbWljX2NvbW1vbi5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9taWNfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBkODMwOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbWljX2NvbW1vbi5oCkBAIC0wLDAgKzEsMTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTUlDX0NPTU1PTl9IXworI2RlZmluZSBfX01JQ19DT01NT05fSF8KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fcmluZy5oPgorI2RlZmluZSBfX21pY19hbGlnbihhLCB4KSAoKChhKSArICh4KSAtIDEpICYgfigoeCkgLSAxKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgbWljX2RldmljZV9kZXNjIHsKKyBfX3M4IHR5cGU7CisgX191OCBudW1fdnE7CisgX191OCBmZWF0dXJlX2xlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBjb25maWdfbGVuOworIF9fdTggc3RhdHVzOworIF9fbGU2NCBjb25maWdbMF07Cit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDgpKSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IG1pY19kZXZpY2VfY3RybCB7CisgX19sZTY0IHZkZXY7CisgX191OCBjb25maWdfY2hhbmdlOworIF9fdTggdmRldl9yZXNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBndWVzdF9hY2s7CisgX191OCBob3N0X2FjazsKKyBfX3U4IHVzZWRfYWRkcmVzc191cGRhdGVkOworIF9fczggYzJoX3ZkZXZfZGI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fczggaDJjX3ZkZXZfZGI7Cit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDgpKSk7CitzdHJ1Y3QgbWljX2Jvb3RwYXJhbSB7CisgX19sZTMyIG1hZ2ljOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3M4IGMyaF9zaHV0ZG93bl9kYjsKKyBfX3M4IGgyY19zaHV0ZG93bl9kYjsKKyBfX3M4IGgyY19jb25maWdfZGI7CisgX191OCBzaHV0ZG93bl9zdGF0dXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggc2h1dGRvd25fY2FyZDsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoOCkpKTsKK3N0cnVjdCBtaWNfZGV2aWNlX3BhZ2UgeworIHN0cnVjdCBtaWNfYm9vdHBhcmFtIGJvb3RwYXJhbTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IG1pY19kZXZpY2VfZGVzYyBkZXNjWzBdOworfTsKK3N0cnVjdCBtaWNfdnFjb25maWcgeworIF9fbGU2NCBhZGRyZXNzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlNjQgdXNlZF9hZGRyZXNzOworIF9fbGUxNiBudW07Cit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDgpKSk7CisjZGVmaW5lIE1JQ19WSVJUSU9fUklOR19BTElHTiA0MDk2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNSUNfTUFYX1ZSSU5HUyA0CisjZGVmaW5lIE1JQ19WUklOR19FTlRSSUVTIDEyOAorI2RlZmluZSBNSUNfTUFYX1ZSSU5HX0VOVFJJRVMgMTI4CisjZGVmaW5lIE1JQ19NQVhfREVTQ19CTEtfU0laRSAyNTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgX21pY192cmluZ19pbmZvIHsKKyBfX3UxNiBhdmFpbF9pZHg7CisgX19sZTMyIG1hZ2ljOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgbWljX3ZyaW5nIHsKKyBzdHJ1Y3QgdnJpbmcgdnI7Cisgc3RydWN0IF9taWNfdnJpbmdfaW5mbyAqaW5mbzsKKyB2b2lkICp2YTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgaW50IGxlbjsKK307CisjZGVmaW5lIG1pY19hbGlnbmVkX2Rlc2Nfc2l6ZShkKSBfX21pY19hbGlnbihtaWNfZGVzY19zaXplKGQpLCA4KQorI2lmbmRlZiBJTlRFTF9NSUNfQ0FSRAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgorI2RlZmluZSBNSUNfRFBfU0laRSA0MDk2CisjZGVmaW5lIE1JQ19NQUdJQyAweGMwZmZlZTAwCitlbnVtIG1pY19zdGF0ZXMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBNSUNfT0ZGTElORSA9IDAsCisgTUlDX09OTElORSwKKyBNSUNfU0hVVFRJTkdfRE9XTiwKKyBNSUNfUkVTRVRfRkFJTEVELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBNSUNfU1VTUEVORElORywKKyBNSUNfU1VTUEVOREVELAorIE1JQ19MQVNUCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbWljX3N0YXR1cyB7CisgTUlDX05PUCA9IDAsCisgTUlDX0NSQVNIRUQsCisgTUlDX0hBTFRFRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTUlDX1BPV0VSX09GRiwKKyBNSUNfUkVTVEFSVCwKKyBNSUNfU1RBVFVTX0xBU1QKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21pY19pb2N0bC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9taWNfaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWIxYWQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9taWNfaW9jdGwuaApAQCAtMCwwICsxLDM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9NSUNfSU9DVExfSF8KKyNkZWZpbmUgX01JQ19JT0NUTF9IXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CitzdHJ1Y3QgbWljX2NvcHlfZGVzYyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBpb3ZlYyAqaW92OworIF9fdTMyIGlvdmNudDsKKyBfX3U4IHZyX2lkeDsKKyBfX3U4IHVwZGF0ZV91c2VkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBvdXRfbGVuOworfTsKKyNkZWZpbmUgTUlDX1ZJUlRJT19BRERfREVWSUNFIF9JT1dSKCdzJywgMSwgc3RydWN0IG1pY19kZXZpY2VfZGVzYyAqKQorI2RlZmluZSBNSUNfVklSVElPX0NPUFlfREVTQyBfSU9XUigncycsIDIsIHN0cnVjdCBtaWNfY29weV9kZXNjICopCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNSUNfVklSVElPX0NPTkZJR19DSEFOR0UgX0lPV1IoJ3MnLCA1LCBfX3U4ICopCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbXF1ZXVlLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21xdWV1ZS5oCmluZGV4IDk0NDhjZmUuLjQ1OTljZGMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbXF1ZXVlLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tcXVldWUuaApAQCAtMjIsMTIgKzIyLDEyIEBACiAjZGVmaW5lIE1RX0JZVEVTX01BWCA4MTkyMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbXFfYXR0ciB7Ci0gbG9uZyBtcV9mbGFnczsKLSBsb25nIG1xX21heG1zZzsKLSBsb25nIG1xX21zZ3NpemU7CisgX19rZXJuZWxfbG9uZ190IG1xX2ZsYWdzOworIF9fa2VybmVsX2xvbmdfdCBtcV9tYXhtc2c7CisgX19rZXJuZWxfbG9uZ190IG1xX21zZ3NpemU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIGxvbmcgbXFfY3VybXNnczsKLSBsb25nIF9fcmVzZXJ2ZWRbNF07CisgX19rZXJuZWxfbG9uZ190IG1xX2N1cm1zZ3M7CisgX19rZXJuZWxfbG9uZ190IF9fcmVzZXJ2ZWRbNF07CiB9OwogI2RlZmluZSBOT1RJRllfTk9ORSAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tc2Rvc19mcy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tc2Rvc19mcy5oCmluZGV4IGM1NjRmM2UuLmYxMTkwYWQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbXNkb3NfZnMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21zZG9zX2ZzLmgKQEAgLTEwMSw3ICsxMDEsNyBAQAogI2RlZmluZSBGQVRfSU9DVExfR0VUX0FUVFJJQlVURVMgX0lPUigncicsIDB4MTAsIF9fdTMyKQogI2RlZmluZSBGQVRfSU9DVExfU0VUX0FUVFJJQlVURVMgX0lPVygncicsIDB4MTEsIF9fdTMyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVkZBVF9JT0NUTF9HRVRfVk9MVU1FX0lEIF9JT1IoJ3InLCAweDEyLCBfX3UzMikKKyNkZWZpbmUgRkFUX0lPQ1RMX0dFVF9WT0xVTUVfSUQgX0lPUigncicsIDB4MTMsIF9fdTMyKQogc3RydWN0IGZhdF9ib290X3NlY3RvciB7CiAgX191OCBpZ25vcmVkWzNdOwogIF9fdTggc3lzdGVtX2lkWzhdOwpAQCAtMTI2LDYgKzEyNiwxMSBAQAogIF9fdTggZHJpdmVfbnVtYmVyOwogIF9fdTggc3RhdGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggc2lnbmF0dXJlOworIF9fdTggdm9sX2lkWzRdOworIF9fdTggdm9sX2xhYmVsWzExXTsKKyBfX3U4IGZzX3R5cGVbOF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gZmF0MTY7CiAgc3RydWN0IHsKICBfX2xlMzIgbGVuZ3RoOwpAQCAtMTM5LDYgKzE0NCwxMSBAQAogIF9fbGUxNiByZXNlcnZlZDJbNl07CiAgX191OCBkcml2ZV9udW1iZXI7CiAgX191OCBzdGF0ZTsKKyBfX3U4IHNpZ25hdHVyZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCB2b2xfaWRbNF07CisgX191OCB2b2xfbGFiZWxbMTFdOworIF9fdTggZnNfdHlwZVs4XTsKICB9IGZhdDMyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9OwpAQCAtMTUzLDQ0ICsxNjMsMzIgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19sZTMyIHJlc2VydmVkMls0XTsKIH07Ci1zdHJ1Y3QgZmF0X2Jvb3RfYnN4IHsKLSBfX3U4IGRyaXZlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBfX3U4IHJlc2VydmVkMTsKLSBfX3U4IHNpZ25hdHVyZTsKLSBfX3U4IHZvbF9pZFs0XTsKLSBfX3U4IHZvbF9sYWJlbFsxMV07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIF9fdTggdHlwZVs4XTsKLX07Ci0jZGVmaW5lIEZBVDE2X0JTWF9PRkZTRVQgMzYKLSNkZWZpbmUgRkFUMzJfQlNYX09GRlNFVCA2NAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgewogIF9fdTggbmFtZVtNU0RPU19OQU1FXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBhdHRyOwogIF9fdTggbGNhc2U7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggY3RpbWVfY3M7CiAgX19sZTE2IGN0aW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMTYgY2RhdGU7CiAgX19sZTE2IGFkYXRlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMTYgc3RhcnRoaTsKICBfX2xlMTYgdGltZSxkYXRlLHN0YXJ0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMzIgc2l6ZTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG1zZG9zX2Rpcl9zbG90IHsKICBfX3U4IGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IG5hbWUwXzRbMTBdOwogIF9fdTggYXR0cjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCByZXNlcnZlZDsKICBfX3U4IGFsaWFzX2NoZWNrc3VtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IG5hbWU1XzEwWzEyXTsKICBfX2xlMTYgc3RhcnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbmFtZTExXzEyWzRdOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbXNnLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21zZy5oCmluZGV4IDcyNzUxZGEuLjhkN2M2MDYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbXNnLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tc2cuaApAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgPGFzbS9tc2didWYuaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbXNnYnVmIHsKLSBsb25nIG10eXBlOworIF9fa2VybmVsX2xvbmdfdCBtdHlwZTsKICBjaGFyIG10ZXh0WzFdOwogfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGNvbmYuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0Y29uZi5oCmluZGV4IDRjOWFhZDMuLjJiZjA5ZDEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0Y29uZi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0Y29uZi5oCkBAIC0zMiwxMCArMzIsMTIgQEAKICBORVRDT05GQV9SUF9GSUxURVIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVENPTkZBX01DX0ZPUldBUkRJTkcsCisgTkVUQ09ORkFfUFJPWFlfTkVJR0gsCiAgX19ORVRDT05GQV9NQVgKIH07Ci0jZGVmaW5lIE5FVENPTkZBX01BWCAoX19ORVRDT05GQV9NQVggLSAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkVUQ09ORkFfTUFYIChfX05FVENPTkZBX01BWCAtIDEpCiAjZGVmaW5lIE5FVENPTkZBX0lGSU5ERVhfQUxMIC0xCiAjZGVmaW5lIE5FVENPTkZBX0lGSU5ERVhfREVGQVVMVCAtMgogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyLmgKaW5kZXggMGIwZGRhYy4uNzgwNDMyMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci5oCkBAIC01NCwyMiArNTQsMjMgQEAKIH07CiBlbnVtIHsKICBORlBST1RPX1VOU1BFQyA9IDAsCi0gTkZQUk9UT19JUFY0ID0gMiwKKyBORlBST1RPX0lORVQgPSAxLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlBST1RPX0lQVjQgPSAyLAogIE5GUFJPVE9fQVJQID0gMywKICBORlBST1RPX0JSSURHRSA9IDcsCiAgTkZQUk9UT19JUFY2ID0gMTAsCi0gTkZQUk9UT19ERUNORVQgPSAxMiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZQUk9UT19ERUNORVQgPSAxMiwKICBORlBST1RPX05VTVBST1RPLAogfTsKIHVuaW9uIG5mX2luZXRfYWRkciB7Ci0gX191MzIgYWxsWzRdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBhbGxbNF07CiAgX19iZTMyIGlwOwogIF9fYmUzMiBpcDZbNF07CiAgc3RydWN0IGluX2FkZHIgaW47Ci0gc3RydWN0IGluNl9hZGRyIGluNjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGluNl9hZGRyIGluNjsKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgKaW5kZXggMWRhMTFlZi4uZDg1Yzg1YiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgKQEAgLTIxLDIzNCArMjEsMjQ5IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNkZWZpbmUgSVBTRVRfUFJPVE9DT0wgNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBTRVRfTUFYX0NPTU1FTlRfU0laRSAyNTUKICNkZWZpbmUgSVBTRVRfTUFYTkFNRUxFTiAzMgogZW51bSBpcHNldF9jbWQgewogIElQU0VUX0NNRF9OT05FLAotIElQU0VUX0NNRF9QUk9UT0NPTCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBTRVRfQ01EX1BST1RPQ09MLAogIElQU0VUX0NNRF9DUkVBVEUsCiAgSVBTRVRfQ01EX0RFU1RST1ksCiAgSVBTRVRfQ01EX0ZMVVNILAotIElQU0VUX0NNRF9SRU5BTUUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0NNRF9SRU5BTUUsCiAgSVBTRVRfQ01EX1NXQVAsCiAgSVBTRVRfQ01EX0xJU1QsCiAgSVBTRVRfQ01EX1NBVkUsCi0gSVBTRVRfQ01EX0FERCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBTRVRfQ01EX0FERCwKICBJUFNFVF9DTURfREVMLAogIElQU0VUX0NNRF9URVNULAogIElQU0VUX0NNRF9IRUFERVIsCi0gSVBTRVRfQ01EX1RZUEUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0NNRF9UWVBFLAogIElQU0VUX01TR19NQVgsCiAgSVBTRVRfQ01EX1JFU1RPUkUgPSBJUFNFVF9NU0dfTUFYLAogIElQU0VUX0NNRF9IRUxQLAotIElQU0VUX0NNRF9WRVJTSU9OLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFNFVF9DTURfVkVSU0lPTiwKICBJUFNFVF9DTURfUVVJVCwKICBJUFNFVF9DTURfTUFYLAogIElQU0VUX0NNRF9DT01NSVQgPSBJUFNFVF9DTURfTUFYLAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogZW51bSB7CiAgSVBTRVRfQVRUUl9VTlNQRUMsCiAgSVBTRVRfQVRUUl9QUk9UT0NPTCwKLSBJUFNFVF9BVFRSX1NFVE5BTUUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0FUVFJfU0VUTkFNRSwKICBJUFNFVF9BVFRSX1RZUEVOQU1FLAogIElQU0VUX0FUVFJfU0VUTkFNRTIgPSBJUFNFVF9BVFRSX1RZUEVOQU1FLAogIElQU0VUX0FUVFJfUkVWSVNJT04sCi0gSVBTRVRfQVRUUl9GQU1JTFksCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0FUVFJfRkFNSUxZLAogIElQU0VUX0FUVFJfRkxBR1MsCiAgSVBTRVRfQVRUUl9EQVRBLAogIElQU0VUX0FUVFJfQURULAotIElQU0VUX0FUVFJfTElORU5PLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFNFVF9BVFRSX0xJTkVOTywKICBJUFNFVF9BVFRSX1BST1RPQ09MX01JTiwKICBJUFNFVF9BVFRSX1JFVklTSU9OX01JTiA9IElQU0VUX0FUVFJfUFJPVE9DT0xfTUlOLAogIF9fSVBTRVRfQVRUUl9DTURfTUFYLAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBJUFNFVF9BVFRSX0NNRF9NQVggKF9fSVBTRVRfQVRUUl9DTURfTUFYIC0gMSkKIGVudW0gewogIElQU0VUX0FUVFJfSVAgPSBJUFNFVF9BVFRSX1VOU1BFQyArIDEsCi0gSVBTRVRfQVRUUl9JUF9GUk9NID0gSVBTRVRfQVRUUl9JUCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBTRVRfQVRUUl9JUF9GUk9NID0gSVBTRVRfQVRUUl9JUCwKICBJUFNFVF9BVFRSX0lQX1RPLAogIElQU0VUX0FUVFJfQ0lEUiwKICBJUFNFVF9BVFRSX1BPUlQsCi0gSVBTRVRfQVRUUl9QT1JUX0ZST00gPSBJUFNFVF9BVFRSX1BPUlQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0FUVFJfUE9SVF9GUk9NID0gSVBTRVRfQVRUUl9QT1JULAogIElQU0VUX0FUVFJfUE9SVF9UTywKICBJUFNFVF9BVFRSX1RJTUVPVVQsCiAgSVBTRVRfQVRUUl9QUk9UTywKLSBJUFNFVF9BVFRSX0NBRFRfRkxBR1MsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0FUVFJfQ0FEVF9GTEFHUywKICBJUFNFVF9BVFRSX0NBRFRfTElORU5PID0gSVBTRVRfQVRUUl9MSU5FTk8sCiAgSVBTRVRfQVRUUl9DQURUX01BWCA9IDE2LAogIElQU0VUX0FUVFJfR0MsCi0gSVBTRVRfQVRUUl9IQVNIU0laRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBTRVRfQVRUUl9IQVNIU0laRSwKICBJUFNFVF9BVFRSX01BWEVMRU0sCiAgSVBTRVRfQVRUUl9ORVRNQVNLLAogIElQU0VUX0FUVFJfUFJPQkVTLAotIElQU0VUX0FUVFJfUkVTSVpFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFNFVF9BVFRSX1JFU0laRSwKICBJUFNFVF9BVFRSX1NJWkUsCiAgSVBTRVRfQVRUUl9FTEVNRU5UUywKICBJUFNFVF9BVFRSX1JFRkVSRU5DRVMsCi0gSVBTRVRfQVRUUl9NRU1TSVpFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFNFVF9BVFRSX01FTVNJWkUsCiAgX19JUFNFVF9BVFRSX0NSRUFURV9NQVgsCiB9OwogI2RlZmluZSBJUFNFVF9BVFRSX0NSRUFURV9NQVggKF9fSVBTRVRfQVRUUl9DUkVBVEVfTUFYIC0gMSkKLWVudW0gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gewogIElQU0VUX0FUVFJfRVRIRVIgPSBJUFNFVF9BVFRSX0NBRFRfTUFYICsgMSwKICBJUFNFVF9BVFRSX05BTUUsCiAgSVBTRVRfQVRUUl9OQU1FUkVGLAotIElQU0VUX0FUVFJfSVAyLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFNFVF9BVFRSX0lQMiwKICBJUFNFVF9BVFRSX0NJRFIyLAogIElQU0VUX0FUVFJfSVAyX1RPLAogIElQU0VUX0FUVFJfSUZBQ0UsCi0gSVBTRVRfQVRUUl9CWVRFUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBTRVRfQVRUUl9CWVRFUywKICBJUFNFVF9BVFRSX1BBQ0tFVFMsCisgSVBTRVRfQVRUUl9DT01NRU5ULAogIF9fSVBTRVRfQVRUUl9BRFRfTUFYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIElQU0VUX0FUVFJfQURUX01BWCAoX19JUFNFVF9BVFRSX0FEVF9NQVggLSAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIElQU0VUX0FUVFJfSVBBRERSX0lQVjQgPSBJUFNFVF9BVFRSX1VOU1BFQyArIDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0FUVFJfSVBBRERSX0lQVjYsCiAgX19JUFNFVF9BVFRSX0lQQUREUl9NQVgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgSVBTRVRfQVRUUl9JUEFERFJfTUFYIChfX0lQU0VUX0FUVFJfSVBBRERSX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBpcHNldF9lcnJubyB7CiAgSVBTRVRfRVJSX1BSSVZBVEUgPSA0MDk2LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9FUlJfUFJPVE9DT0wsCiAgSVBTRVRfRVJSX0ZJTkRfVFlQRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRVJSX01BWF9TRVRTLAogIElQU0VUX0VSUl9CVVNZLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9FUlJfRVhJU1RfU0VUTkFNRTIsCiAgSVBTRVRfRVJSX1RZUEVfTUlTTUFUQ0gsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0VSUl9FWElTVCwKICBJUFNFVF9FUlJfSU5WQUxJRF9DSURSLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9FUlJfSU5WQUxJRF9ORVRNQVNLLAogIElQU0VUX0VSUl9JTlZBTElEX0ZBTUlMWSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRVJSX1RJTUVPVVQsCiAgSVBTRVRfRVJSX1JFRkVSRU5DRUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0VSUl9JUEFERFJfSVBWNCwKICBJUFNFVF9FUlJfSVBBRERSX0lQVjYsCi0gSVBTRVRfRVJSX0NPVU5URVIsCi0gSVBTRVRfRVJSX1RZUEVfU1BFQ0lGSUMgPSA0MzUyLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFNFVF9FUlJfQ09VTlRFUiwKKyBJUFNFVF9FUlJfQ09NTUVOVCwKKyBJUFNFVF9FUlJfVFlQRV9TUEVDSUZJQyA9IDQzNTIsCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gaXBzZXRfY21kX2ZsYWdzIHsKICBJUFNFVF9GTEFHX0JJVF9FWElTVCA9IDAsCiAgSVBTRVRfRkxBR19FWElTVCA9ICgxIDw8IElQU0VUX0ZMQUdfQklUX0VYSVNUKSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRkxBR19CSVRfTElTVF9TRVROQU1FID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRkxBR19MSVNUX1NFVE5BTUUgPSAoMSA8PCBJUFNFVF9GTEFHX0JJVF9MSVNUX1NFVE5BTUUpLAogIElQU0VUX0ZMQUdfQklUX0xJU1RfSEVBREVSID0gMiwKICBJUFNFVF9GTEFHX0xJU1RfSEVBREVSID0gKDEgPDwgSVBTRVRfRkxBR19CSVRfTElTVF9IRUFERVIpLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX0JJVF9TS0lQX0NPVU5URVJfVVBEQVRFID0gMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRkxBR19TS0lQX0NPVU5URVJfVVBEQVRFID0KICAoMSA8PCBJUFNFVF9GTEFHX0JJVF9TS0lQX0NPVU5URVJfVVBEQVRFKSwKICBJUFNFVF9GTEFHX0JJVF9TS0lQX1NVQkNPVU5URVJfVVBEQVRFID0gNCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRkxBR19TS0lQX1NVQkNPVU5URVJfVVBEQVRFID0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgKDEgPDwgSVBTRVRfRkxBR19CSVRfU0tJUF9TVUJDT1VOVEVSX1VQREFURSksCiAgSVBTRVRfRkxBR19CSVRfTUFUQ0hfQ09VTlRFUlMgPSA1LAogIElQU0VUX0ZMQUdfTUFUQ0hfQ09VTlRFUlMgPSAoMSA8PCBJUFNFVF9GTEFHX0JJVF9NQVRDSF9DT1VOVEVSUyksCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0ZMQUdfQklUX1JFVFVSTl9OT01BVENIID0gNywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRkxBR19SRVRVUk5fTk9NQVRDSCA9ICgxIDw8IElQU0VUX0ZMQUdfQklUX1JFVFVSTl9OT01BVENIKSwKICBJUFNFVF9GTEFHX0NNRF9NQVggPSAxNSwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBpcHNldF9jYWR0X2ZsYWdzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRkxBR19CSVRfQkVGT1JFID0gMCwKICBJUFNFVF9GTEFHX0JFRk9SRSA9ICgxIDw8IElQU0VUX0ZMQUdfQklUX0JFRk9SRSksCiAgSVBTRVRfRkxBR19CSVRfUEhZU0RFViA9IDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0ZMQUdfUEhZU0RFViA9ICgxIDw8IElQU0VUX0ZMQUdfQklUX1BIWVNERVYpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX0JJVF9OT01BVENIID0gMiwKICBJUFNFVF9GTEFHX05PTUFUQ0ggPSAoMSA8PCBJUFNFVF9GTEFHX0JJVF9OT01BVENIKSwKICBJUFNFVF9GTEFHX0JJVF9XSVRIX0NPVU5URVJTID0gMywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRkxBR19XSVRIX0NPVU5URVJTID0gKDEgPDwgSVBTRVRfRkxBR19CSVRfV0lUSF9DT1VOVEVSUyksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0ZMQUdfQklUX1dJVEhfQ09NTUVOVCA9IDQsCisgSVBTRVRfRkxBR19XSVRIX0NPTU1FTlQgPSAoMSA8PCBJUFNFVF9GTEFHX0JJVF9XSVRIX0NPTU1FTlQpLAogIElQU0VUX0ZMQUdfQ0FEVF9NQVggPSAxNSwKIH07Ci1lbnVtIGlwc2V0X2FkdCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBpcHNldF9hZHQgewogIElQU0VUX0FERCwKICBJUFNFVF9ERUwsCiAgSVBTRVRfVEVTVCwKLSBJUFNFVF9BRFRfTUFYLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFNFVF9BRFRfTUFYLAogIElQU0VUX0NSRUFURSA9IElQU0VUX0FEVF9NQVgsCiAgSVBTRVRfQ0FEVF9NQVgsCiB9OwotdHlwZWRlZiBfX3UxNiBpcF9zZXRfaWRfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIF9fdTE2IGlwX3NldF9pZF90OwogI2RlZmluZSBJUFNFVF9JTlZBTElEX0lEIDY1NTM1CiBlbnVtIGlwX3NldF9kaW0gewogIElQU0VUX0RJTV9aRVJPID0gMCwKLSBJUFNFVF9ESU1fT05FLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFNFVF9ESU1fT05FLAogIElQU0VUX0RJTV9UV08sCiAgSVBTRVRfRElNX1RIUkVFLAogIElQU0VUX0RJTV9NQVggPSA2LAotIElQU0VUX0JJVF9SRVRVUk5fTk9NQVRDSCA9IDcsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0JJVF9SRVRVUk5fTk9NQVRDSCA9IDcsCiB9OwogZW51bSBpcF9zZXRfa29wdCB7CiAgSVBTRVRfSU5WX01BVENIID0gKDEgPDwgSVBTRVRfRElNX1pFUk8pLAotIElQU0VUX0RJTV9PTkVfU1JDID0gKDEgPDwgSVBTRVRfRElNX09ORSksCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0RJTV9PTkVfU1JDID0gKDEgPDwgSVBTRVRfRElNX09ORSksCiAgSVBTRVRfRElNX1RXT19TUkMgPSAoMSA8PCBJUFNFVF9ESU1fVFdPKSwKICBJUFNFVF9ESU1fVEhSRUVfU1JDID0gKDEgPDwgSVBTRVRfRElNX1RIUkVFKSwKICBJUFNFVF9SRVRVUk5fTk9NQVRDSCA9ICgxIDw8IElQU0VUX0JJVF9SRVRVUk5fTk9NQVRDSCksCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBlbnVtIHsKICBJUFNFVF9DT1VOVEVSX05PTkUgPSAwLAogIElQU0VUX0NPVU5URVJfRVEsCi0gSVBTRVRfQ09VTlRFUl9ORSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBTRVRfQ09VTlRFUl9ORSwKICBJUFNFVF9DT1VOVEVSX0xULAogIElQU0VUX0NPVU5URVJfR1QsCiB9Owotc3RydWN0IGlwX3NldF9jb3VudGVyX21hdGNoIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaXBfc2V0X2NvdW50ZXJfbWF0Y2ggewogIF9fdTggb3A7CiAgX191NjQgdmFsdWU7CiB9OwotI2RlZmluZSBTT19JUF9TRVQgODMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNPX0lQX1NFVCA4MwogdW5pb24gaXBfc2V0X25hbWVfaW5kZXggewogIGNoYXIgbmFtZVtJUFNFVF9NQVhOQU1FTEVOXTsKICBpcF9zZXRfaWRfdCBpbmRleDsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgSVBfU0VUX09QX0dFVF9CWU5BTUUgMHgwMDAwMDAwNgogc3RydWN0IGlwX3NldF9yZXFfZ2V0X3NldCB7CiAgdW5zaWduZWQgaW50IG9wOwotIHVuc2lnbmVkIGludCB2ZXJzaW9uOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgdmVyc2lvbjsKICB1bmlvbiBpcF9zZXRfbmFtZV9pbmRleCBzZXQ7CiB9OwogI2RlZmluZSBJUF9TRVRfT1BfR0VUX0JZSU5ERVggMHgwMDAwMDAwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBfU0VUX09QX0dFVF9GTkFNRSAweDAwMDAwMDA4CitzdHJ1Y3QgaXBfc2V0X3JlcV9nZXRfc2V0X2ZhbWlseSB7CisgdW5zaWduZWQgaW50IG9wOworIHVuc2lnbmVkIGludCB2ZXJzaW9uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgZmFtaWx5OworIHVuaW9uIGlwX3NldF9uYW1lX2luZGV4IHNldDsKK307CiAjZGVmaW5lIElQX1NFVF9PUF9WRVJTSU9OIDB4MDAwMDAxMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaXBfc2V0X3JlcV92ZXJzaW9uIHsKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaAppbmRleCA2YzE3NmNhLi4wNWUyZDFmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCkBAIC0zMSw1OCArMzEsNjMgQEAKICBJUF9DVF9OVU1CRVIgPSBJUF9DVF9JU19SRVBMWSAqIDIgLSAxCiB9OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkZfQ1RfU1RBVEVfSU5WQUxJRF9CSVQgKDEgPDwgMCkKKyNkZWZpbmUgTkZfQ1RfU1RBVEVfQklUKGN0aW5mbykgKDEgPDwgKChjdGluZm8pICUgSVBfQ1RfSVNfUkVQTFkgKyAxKSkKKyNkZWZpbmUgTkZfQ1RfU1RBVEVfVU5UUkFDS0VEX0JJVCAoMSA8PCAoSVBfQ1RfTlVNQkVSICsgMSkpCiBlbnVtIGlwX2Nvbm50cmFja19zdGF0dXMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNfRVhQRUNURURfQklUID0gMCwKICBJUFNfRVhQRUNURUQgPSAoMSA8PCBJUFNfRVhQRUNURURfQklUKSwKICBJUFNfU0VFTl9SRVBMWV9CSVQgPSAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNfU0VFTl9SRVBMWSA9ICgxIDw8IElQU19TRUVOX1JFUExZX0JJVCksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU19BU1NVUkVEX0JJVCA9IDIsCiAgSVBTX0FTU1VSRUQgPSAoMSA8PCBJUFNfQVNTVVJFRF9CSVQpLAogIElQU19DT05GSVJNRURfQklUID0gMywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTX0NPTkZJUk1FRCA9ICgxIDw8IElQU19DT05GSVJNRURfQklUKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTX1NSQ19OQVRfQklUID0gNCwKICBJUFNfU1JDX05BVCA9ICgxIDw8IElQU19TUkNfTkFUX0JJVCksCiAgSVBTX0RTVF9OQVRfQklUID0gNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTX0RTVF9OQVQgPSAoMSA8PCBJUFNfRFNUX05BVF9CSVQpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNfTkFUX01BU0sgPSAoSVBTX0RTVF9OQVQgfCBJUFNfU1JDX05BVCksCiAgSVBTX1NFUV9BREpVU1RfQklUID0gNiwKICBJUFNfU0VRX0FESlVTVCA9ICgxIDw8IElQU19TRVFfQURKVVNUX0JJVCksCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU19TUkNfTkFUX0RPTkVfQklUID0gNywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTX1NSQ19OQVRfRE9ORSA9ICgxIDw8IElQU19TUkNfTkFUX0RPTkVfQklUKSwKICBJUFNfRFNUX05BVF9ET05FX0JJVCA9IDgsCiAgSVBTX0RTVF9OQVRfRE9ORSA9ICgxIDw8IElQU19EU1RfTkFUX0RPTkVfQklUKSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTX05BVF9ET05FX01BU0sgPSAoSVBTX0RTVF9OQVRfRE9ORSB8IElQU19TUkNfTkFUX0RPTkUpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNfRFlJTkdfQklUID0gOSwKICBJUFNfRFlJTkcgPSAoMSA8PCBJUFNfRFlJTkdfQklUKSwKICBJUFNfRklYRURfVElNRU9VVF9CSVQgPSAxMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTX0ZJWEVEX1RJTUVPVVQgPSAoMSA8PCBJUFNfRklYRURfVElNRU9VVF9CSVQpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNfVEVNUExBVEVfQklUID0gMTEsCiAgSVBTX1RFTVBMQVRFID0gKDEgPDwgSVBTX1RFTVBMQVRFX0JJVCksCiAgSVBTX1VOVFJBQ0tFRF9CSVQgPSAxMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTX1VOVFJBQ0tFRCA9ICgxIDw8IElQU19VTlRSQUNLRURfQklUKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTX0hFTFBFUl9CSVQgPSAxMywKICBJUFNfSEVMUEVSID0gKDEgPDwgSVBTX0hFTFBFUl9CSVQpLAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGlwX2Nvbm50cmFja19ldmVudHMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUENUX05FVywKICBJUENUX1JFTEFURUQsCiAgSVBDVF9ERVNUUk9ZLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUENUX1JFUExZLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUENUX0FTU1VSRUQsCiAgSVBDVF9QUk9UT0lORk8sCiAgSVBDVF9IRUxQRVIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQQ1RfTUFSSywKLSBJUENUX05BVFNFUUFESiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBDVF9TRVFBREosCisgSVBDVF9OQVRTRVFBREogPSBJUENUX1NFUUFESiwKICBJUENUX1NFQ01BUkssCiAgSVBDVF9MQUJFTCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9uYXQuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX25hdC5oCmluZGV4IDMyMGFmOGEuLmIzOTk4ODggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX25hdC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX25hdC5oCkBAIC0yMSwzMSArMjEsMzQgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oPgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTkZfTkFUX1JBTkdFX01BUF9JUFMgMQotI2RlZmluZSBORl9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEIDIKLSNkZWZpbmUgTkZfTkFUX1JBTkdFX1BST1RPX1JBTkRPTSA0Ci0jZGVmaW5lIE5GX05BVF9SQU5HRV9QRVJTSVNURU5UIDgKKyNkZWZpbmUgTkZfTkFUX1JBTkdFX01BUF9JUFMgKDEgPDwgMCkKKyNkZWZpbmUgTkZfTkFUX1JBTkdFX1BST1RPX1NQRUNJRklFRCAoMSA8PCAxKQorI2RlZmluZSBORl9OQVRfUkFOR0VfUFJPVE9fUkFORE9NICgxIDw8IDIpCisjZGVmaW5lIE5GX05BVF9SQU5HRV9QRVJTSVNURU5UICgxIDw8IDMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORl9OQVRfUkFOR0VfUFJPVE9fUkFORE9NX0ZVTExZICgxIDw8IDQpCisjZGVmaW5lIE5GX05BVF9SQU5HRV9QUk9UT19SQU5ET01fQUxMICAgKE5GX05BVF9SQU5HRV9QUk9UT19SQU5ET00gfCBORl9OQVRfUkFOR0VfUFJPVE9fUkFORE9NX0ZVTExZKQogc3RydWN0IG5mX25hdF9pcHY0X3JhbmdlIHsKICB1bnNpZ25lZCBpbnQgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fYmUzMiBtaW5faXA7CiAgX19iZTMyIG1heF9pcDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byBtaW47CiAgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byBtYXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBuZl9uYXRfaXB2NF9tdWx0aV9yYW5nZV9jb21wYXQgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgcmFuZ2VzaXplOwogIHN0cnVjdCBuZl9uYXRfaXB2NF9yYW5nZSByYW5nZVsxXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IG5mX25hdF9yYW5nZSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBmbGFnczsKICB1bmlvbiBuZl9pbmV0X2FkZHIgbWluX2FkZHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIG5mX2luZXRfYWRkciBtYXhfYWRkcjsKICB1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvIG1pbl9wcm90bzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byBtYXhfcHJvdG87CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDYzMmRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgKQEAgLTAsMCArMSw0NTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX05GX1RBQkxFU19ICisjZGVmaW5lIF9MSU5VWF9ORl9UQUJMRVNfSAorI2RlZmluZSBORlRfQ0hBSU5fTUFYTkFNRUxFTiAzMgorZW51bSBuZnRfcmVnaXN0ZXJzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUX1JFR19WRVJESUNULAorIE5GVF9SRUdfMSwKKyBORlRfUkVHXzIsCisgTkZUX1JFR18zLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfUkVHXzQsCisgX19ORlRfUkVHX01BWAorfTsKKyNkZWZpbmUgTkZUX1JFR19NQVggKF9fTkZUX1JFR19NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbmZ0X3ZlcmRpY3RzIHsKKyBORlRfQ09OVElOVUUgPSAtMSwKKyBORlRfQlJFQUsgPSAtMiwKKyBORlRfSlVNUCA9IC0zLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfR09UTyA9IC00LAorIE5GVF9SRVRVUk4gPSAtNSwKK307CitlbnVtIG5mX3RhYmxlc19tc2dfdHlwZXMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfTVNHX05FV1RBQkxFLAorIE5GVF9NU0dfR0VUVEFCTEUsCisgTkZUX01TR19ERUxUQUJMRSwKKyBORlRfTVNHX05FV0NIQUlOLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfTVNHX0dFVENIQUlOLAorIE5GVF9NU0dfREVMQ0hBSU4sCisgTkZUX01TR19ORVdSVUxFLAorIE5GVF9NU0dfR0VUUlVMRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUX01TR19ERUxSVUxFLAorIE5GVF9NU0dfTkVXU0VULAorIE5GVF9NU0dfR0VUU0VULAorIE5GVF9NU0dfREVMU0VULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfTVNHX05FV1NFVEVMRU0sCisgTkZUX01TR19HRVRTRVRFTEVNLAorIE5GVF9NU0dfREVMU0VURUxFTSwKKyBORlRfTVNHX01BWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworZW51bSBuZnRfbGlzdF9hdHRyaWJ1dGVzIHsKKyBORlRBX0xJU1RfVU5QRUMsCisgTkZUQV9MSVNUX0VMRU0sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fTkZUQV9MSVNUX01BWAorfTsKKyNkZWZpbmUgTkZUQV9MSVNUX01BWCAoX19ORlRBX0xJU1RfTUFYIC0gMSkKK2VudW0gbmZ0X2hvb2tfYXR0cmlidXRlcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfSE9PS19VTlNQRUMsCisgTkZUQV9IT09LX0hPT0tOVU0sCisgTkZUQV9IT09LX1BSSU9SSVRZLAorIF9fTkZUQV9IT09LX01BWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIE5GVEFfSE9PS19NQVggKF9fTkZUQV9IT09LX01BWCAtIDEpCitlbnVtIG5mdF90YWJsZV9mbGFncyB7CisgTkZUX1RBQkxFX0ZfRE9STUFOVCA9IDB4MSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworZW51bSBuZnRfdGFibGVfYXR0cmlidXRlcyB7CisgTkZUQV9UQUJMRV9VTlNQRUMsCisgTkZUQV9UQUJMRV9OQU1FLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX1RBQkxFX0ZMQUdTLAorIE5GVEFfVEFCTEVfVVNFLAorIF9fTkZUQV9UQUJMRV9NQVgKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORlRBX1RBQkxFX01BWCAoX19ORlRBX1RBQkxFX01BWCAtIDEpCitlbnVtIG5mdF9jaGFpbl9hdHRyaWJ1dGVzIHsKKyBORlRBX0NIQUlOX1VOU1BFQywKKyBORlRBX0NIQUlOX1RBQkxFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX0NIQUlOX0hBTkRMRSwKKyBORlRBX0NIQUlOX05BTUUsCisgTkZUQV9DSEFJTl9IT09LLAorIE5GVEFfQ0hBSU5fUE9MSUNZLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX0NIQUlOX1VTRSwKKyBORlRBX0NIQUlOX1RZUEUsCisgTkZUQV9DSEFJTl9DT1VOVEVSUywKKyBfX05GVEFfQ0hBSU5fTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgTkZUQV9DSEFJTl9NQVggKF9fTkZUQV9DSEFJTl9NQVggLSAxKQorZW51bSBuZnRfcnVsZV9hdHRyaWJ1dGVzIHsKKyBORlRBX1JVTEVfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX1JVTEVfVEFCTEUsCisgTkZUQV9SVUxFX0NIQUlOLAorIE5GVEFfUlVMRV9IQU5ETEUsCisgTkZUQV9SVUxFX0VYUFJFU1NJT05TLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX1JVTEVfQ09NUEFULAorIE5GVEFfUlVMRV9QT1NJVElPTiwKKyBfX05GVEFfUlVMRV9NQVgKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORlRBX1JVTEVfTUFYIChfX05GVEFfUlVMRV9NQVggLSAxKQorZW51bSBuZnRfcnVsZV9jb21wYXRfZmxhZ3MgeworIE5GVF9SVUxFX0NPTVBBVF9GX0lOViA9ICgxIDw8IDEpLAorIE5GVF9SVUxFX0NPTVBBVF9GX01BU0sgPSBORlRfUlVMRV9DT01QQVRfRl9JTlYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK2VudW0gbmZ0X3J1bGVfY29tcGF0X2F0dHJpYnV0ZXMgeworIE5GVEFfUlVMRV9DT01QQVRfVU5TUEVDLAorIE5GVEFfUlVMRV9DT01QQVRfUFJPVE8sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfUlVMRV9DT01QQVRfRkxBR1MsCisgX19ORlRBX1JVTEVfQ09NUEFUX01BWAorfTsKKyNkZWZpbmUgTkZUQV9SVUxFX0NPTVBBVF9NQVggKF9fTkZUQV9SVUxFX0NPTVBBVF9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbmZ0X3NldF9mbGFncyB7CisgTkZUX1NFVF9BTk9OWU1PVVMgPSAweDEsCisgTkZUX1NFVF9DT05TVEFOVCA9IDB4MiwKKyBORlRfU0VUX0lOVEVSVkFMID0gMHg0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfU0VUX01BUCA9IDB4OCwKK307CitlbnVtIG5mdF9zZXRfYXR0cmlidXRlcyB7CisgTkZUQV9TRVRfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX1NFVF9UQUJMRSwKKyBORlRBX1NFVF9OQU1FLAorIE5GVEFfU0VUX0ZMQUdTLAorIE5GVEFfU0VUX0tFWV9UWVBFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX1NFVF9LRVlfTEVOLAorIE5GVEFfU0VUX0RBVEFfVFlQRSwKKyBORlRBX1NFVF9EQVRBX0xFTiwKKyBfX05GVEFfU0VUX01BWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIE5GVEFfU0VUX01BWCAoX19ORlRBX1NFVF9NQVggLSAxKQorZW51bSBuZnRfc2V0X2VsZW1fZmxhZ3MgeworIE5GVF9TRVRfRUxFTV9JTlRFUlZBTF9FTkQgPSAweDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK2VudW0gbmZ0X3NldF9lbGVtX2F0dHJpYnV0ZXMgeworIE5GVEFfU0VUX0VMRU1fVU5TUEVDLAorIE5GVEFfU0VUX0VMRU1fS0VZLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX1NFVF9FTEVNX0RBVEEsCisgTkZUQV9TRVRfRUxFTV9GTEFHUywKKyBfX05GVEFfU0VUX0VMRU1fTUFYCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkZUQV9TRVRfRUxFTV9NQVggKF9fTkZUQV9TRVRfRUxFTV9NQVggLSAxKQorZW51bSBuZnRfc2V0X2VsZW1fbGlzdF9hdHRyaWJ1dGVzIHsKKyBORlRBX1NFVF9FTEVNX0xJU1RfVU5TUEVDLAorIE5GVEFfU0VUX0VMRU1fTElTVF9UQUJMRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9TRVRfRUxFTV9MSVNUX1NFVCwKKyBORlRBX1NFVF9FTEVNX0xJU1RfRUxFTUVOVFMsCisgX19ORlRBX1NFVF9FTEVNX0xJU1RfTUFYCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkZUQV9TRVRfRUxFTV9MSVNUX01BWCAoX19ORlRBX1NFVF9FTEVNX0xJU1RfTUFYIC0gMSkKK2VudW0gbmZ0X2RhdGFfdHlwZXMgeworIE5GVF9EQVRBX1ZBTFVFLAorIE5GVF9EQVRBX1ZFUkRJQ1QgPSAweGZmZmZmZjAwVSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBORlRfREFUQV9SRVNFUlZFRF9NQVNLIDB4ZmZmZmZmMDBVCitlbnVtIG5mdF9kYXRhX2F0dHJpYnV0ZXMgeworIE5GVEFfREFUQV9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfREFUQV9WQUxVRSwKKyBORlRBX0RBVEFfVkVSRElDVCwKKyBfX05GVEFfREFUQV9NQVgKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORlRBX0RBVEFfTUFYIChfX05GVEFfREFUQV9NQVggLSAxKQorZW51bSBuZnRfdmVyZGljdF9hdHRyaWJ1dGVzIHsKKyBORlRBX1ZFUkRJQ1RfVU5TUEVDLAorIE5GVEFfVkVSRElDVF9DT0RFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX1ZFUkRJQ1RfQ0hBSU4sCisgX19ORlRBX1ZFUkRJQ1RfTUFYCit9OworI2RlZmluZSBORlRBX1ZFUkRJQ1RfTUFYIChfX05GVEFfVkVSRElDVF9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbmZ0X2V4cHJfYXR0cmlidXRlcyB7CisgTkZUQV9FWFBSX1VOU1BFQywKKyBORlRBX0VYUFJfTkFNRSwKKyBORlRBX0VYUFJfREFUQSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19ORlRBX0VYUFJfTUFYCit9OworI2RlZmluZSBORlRBX0VYUFJfTUFYIChfX05GVEFfRVhQUl9NQVggLSAxKQorZW51bSBuZnRfaW1tZWRpYXRlX2F0dHJpYnV0ZXMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX0lNTUVESUFURV9VTlNQRUMsCisgTkZUQV9JTU1FRElBVEVfRFJFRywKKyBORlRBX0lNTUVESUFURV9EQVRBLAorIF9fTkZUQV9JTU1FRElBVEVfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgTkZUQV9JTU1FRElBVEVfTUFYIChfX05GVEFfSU1NRURJQVRFX01BWCAtIDEpCitlbnVtIG5mdF9iaXR3aXNlX2F0dHJpYnV0ZXMgeworIE5GVEFfQklUV0lTRV9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfQklUV0lTRV9TUkVHLAorIE5GVEFfQklUV0lTRV9EUkVHLAorIE5GVEFfQklUV0lTRV9MRU4sCisgTkZUQV9CSVRXSVNFX01BU0ssCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfQklUV0lTRV9YT1IsCisgX19ORlRBX0JJVFdJU0VfTUFYCit9OworI2RlZmluZSBORlRBX0JJVFdJU0VfTUFYIChfX05GVEFfQklUV0lTRV9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbmZ0X2J5dGVvcmRlcl9vcHMgeworIE5GVF9CWVRFT1JERVJfTlRPSCwKKyBORlRfQllURU9SREVSX0hUT04sCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbmZ0X2J5dGVvcmRlcl9hdHRyaWJ1dGVzIHsKKyBORlRBX0JZVEVPUkRFUl9VTlNQRUMsCisgTkZUQV9CWVRFT1JERVJfU1JFRywKKyBORlRBX0JZVEVPUkRFUl9EUkVHLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX0JZVEVPUkRFUl9PUCwKKyBORlRBX0JZVEVPUkRFUl9MRU4sCisgTkZUQV9CWVRFT1JERVJfU0laRSwKKyBfX05GVEFfQllURU9SREVSX01BWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIE5GVEFfQllURU9SREVSX01BWCAoX19ORlRBX0JZVEVPUkRFUl9NQVggLSAxKQorZW51bSBuZnRfY21wX29wcyB7CisgTkZUX0NNUF9FUSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUX0NNUF9ORVEsCisgTkZUX0NNUF9MVCwKKyBORlRfQ01QX0xURSwKKyBORlRfQ01QX0dULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfQ01QX0dURSwKK307CitlbnVtIG5mdF9jbXBfYXR0cmlidXRlcyB7CisgTkZUQV9DTVBfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX0NNUF9TUkVHLAorIE5GVEFfQ01QX09QLAorIE5GVEFfQ01QX0RBVEEsCisgX19ORlRBX0NNUF9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBORlRBX0NNUF9NQVggKF9fTkZUQV9DTVBfTUFYIC0gMSkKK2VudW0gbmZ0X2xvb2t1cF9hdHRyaWJ1dGVzIHsKKyBORlRBX0xPT0tVUF9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfTE9PS1VQX1NFVCwKKyBORlRBX0xPT0tVUF9TUkVHLAorIE5GVEFfTE9PS1VQX0RSRUcsCisgX19ORlRBX0xPT0tVUF9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBORlRBX0xPT0tVUF9NQVggKF9fTkZUQV9MT09LVVBfTUFYIC0gMSkKK2VudW0gbmZ0X3BheWxvYWRfYmFzZXMgeworIE5GVF9QQVlMT0FEX0xMX0hFQURFUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVIsCisgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUiwKK307CitlbnVtIG5mdF9wYXlsb2FkX2F0dHJpYnV0ZXMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX1BBWUxPQURfVU5TUEVDLAorIE5GVEFfUEFZTE9BRF9EUkVHLAorIE5GVEFfUEFZTE9BRF9CQVNFLAorIE5GVEFfUEFZTE9BRF9PRkZTRVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfUEFZTE9BRF9MRU4sCisgX19ORlRBX1BBWUxPQURfTUFYCit9OworI2RlZmluZSBORlRBX1BBWUxPQURfTUFYIChfX05GVEFfUEFZTE9BRF9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbmZ0X2V4dGhkcl9hdHRyaWJ1dGVzIHsKKyBORlRBX0VYVEhEUl9VTlNQRUMsCisgTkZUQV9FWFRIRFJfRFJFRywKKyBORlRBX0VYVEhEUl9UWVBFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX0VYVEhEUl9PRkZTRVQsCisgTkZUQV9FWFRIRFJfTEVOLAorIF9fTkZUQV9FWFRIRFJfTUFYCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkZUQV9FWFRIRFJfTUFYIChfX05GVEFfRVhUSERSX01BWCAtIDEpCitlbnVtIG5mdF9tZXRhX2tleXMgeworIE5GVF9NRVRBX0xFTiwKKyBORlRfTUVUQV9QUk9UT0NPTCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUX01FVEFfUFJJT1JJVFksCisgTkZUX01FVEFfTUFSSywKKyBORlRfTUVUQV9JSUYsCisgTkZUX01FVEFfT0lGLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfTUVUQV9JSUZOQU1FLAorIE5GVF9NRVRBX09JRk5BTUUsCisgTkZUX01FVEFfSUlGVFlQRSwKKyBORlRfTUVUQV9PSUZUWVBFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfTUVUQV9TS1VJRCwKKyBORlRfTUVUQV9TS0dJRCwKKyBORlRfTUVUQV9ORlRSQUNFLAorIE5GVF9NRVRBX1JUQ0xBU1NJRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUX01FVEFfU0VDTUFSSywKKyBORlRfTUVUQV9ORlBST1RPLAorIE5GVF9NRVRBX0w0UFJPVE8sCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbmZ0X21ldGFfYXR0cmlidXRlcyB7CisgTkZUQV9NRVRBX1VOU1BFQywKKyBORlRBX01FVEFfRFJFRywKKyBORlRBX01FVEFfS0VZLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX01FVEFfU1JFRywKKyBfX05GVEFfTUVUQV9NQVgKK307CisjZGVmaW5lIE5GVEFfTUVUQV9NQVggKF9fTkZUQV9NRVRBX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBuZnRfY3Rfa2V5cyB7CisgTkZUX0NUX1NUQVRFLAorIE5GVF9DVF9ESVJFQ1RJT04sCisgTkZUX0NUX1NUQVRVUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUX0NUX01BUkssCisgTkZUX0NUX1NFQ01BUkssCisgTkZUX0NUX0VYUElSQVRJT04sCisgTkZUX0NUX0hFTFBFUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUX0NUX0wzUFJPVE9DT0wsCisgTkZUX0NUX1NSQywKKyBORlRfQ1RfRFNULAorIE5GVF9DVF9QUk9UT0NPTCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUX0NUX1BST1RPX1NSQywKKyBORlRfQ1RfUFJPVE9fRFNULAorfTsKK2VudW0gbmZ0X2N0X2F0dHJpYnV0ZXMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX0NUX1VOU1BFQywKKyBORlRBX0NUX0RSRUcsCisgTkZUQV9DVF9LRVksCisgTkZUQV9DVF9ESVJFQ1RJT04sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfQ1RfU1JFRywKKyBfX05GVEFfQ1RfTUFYCit9OworI2RlZmluZSBORlRBX0NUX01BWCAoX19ORlRBX0NUX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBuZnRfbGltaXRfYXR0cmlidXRlcyB7CisgTkZUQV9MSU1JVF9VTlNQRUMsCisgTkZUQV9MSU1JVF9SQVRFLAorIE5GVEFfTElNSVRfVU5JVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19ORlRBX0xJTUlUX01BWAorfTsKKyNkZWZpbmUgTkZUQV9MSU1JVF9NQVggKF9fTkZUQV9MSU1JVF9NQVggLSAxKQorZW51bSBuZnRfY291bnRlcl9hdHRyaWJ1dGVzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9DT1VOVEVSX1VOU1BFQywKKyBORlRBX0NPVU5URVJfQllURVMsCisgTkZUQV9DT1VOVEVSX1BBQ0tFVFMsCisgX19ORlRBX0NPVU5URVJfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgTkZUQV9DT1VOVEVSX01BWCAoX19ORlRBX0NPVU5URVJfTUFYIC0gMSkKK2VudW0gbmZ0X2xvZ19hdHRyaWJ1dGVzIHsKKyBORlRBX0xPR19VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfTE9HX0dST1VQLAorIE5GVEFfTE9HX1BSRUZJWCwKKyBORlRBX0xPR19TTkFQTEVOLAorIE5GVEFfTE9HX1FUSFJFU0hPTEQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fTkZUQV9MT0dfTUFYCit9OworI2RlZmluZSBORlRBX0xPR19NQVggKF9fTkZUQV9MT0dfTUFYIC0gMSkKK2VudW0gbmZ0X3F1ZXVlX2F0dHJpYnV0ZXMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX1FVRVVFX1VOU1BFQywKKyBORlRBX1FVRVVFX05VTSwKKyBORlRBX1FVRVVFX1RPVEFMLAorIE5GVEFfUVVFVUVfRkxBR1MsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fTkZUQV9RVUVVRV9NQVgKK307CisjZGVmaW5lIE5GVEFfUVVFVUVfTUFYIChfX05GVEFfUVVFVUVfTUFYIC0gMSkKKyNkZWZpbmUgTkZUX1FVRVVFX0ZMQUdfQllQQVNTIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5GVF9RVUVVRV9GTEFHX0NQVV9GQU5PVVQgMHgwMgorI2RlZmluZSBORlRfUVVFVUVfRkxBR19NQVNLIDB4MDMKK2VudW0gbmZ0X3JlamVjdF90eXBlcyB7CisgTkZUX1JFSkVDVF9JQ01QX1VOUkVBQ0gsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVF9SRUpFQ1RfVENQX1JTVCwKK307CitlbnVtIG5mdF9yZWplY3RfYXR0cmlidXRlcyB7CisgTkZUQV9SRUpFQ1RfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX1JFSkVDVF9UWVBFLAorIE5GVEFfUkVKRUNUX0lDTVBfQ09ERSwKKyBfX05GVEFfUkVKRUNUX01BWAorfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5GVEFfUkVKRUNUX01BWCAoX19ORlRBX1JFSkVDVF9NQVggLSAxKQorZW51bSBuZnRfbmF0X3R5cGVzIHsKKyBORlRfTkFUX1NOQVQsCisgTkZUX05BVF9ETkFULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitlbnVtIG5mdF9uYXRfYXR0cmlidXRlcyB7CisgTkZUQV9OQVRfVU5TUEVDLAorIE5GVEFfTkFUX1RZUEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfTkFUX0ZBTUlMWSwKKyBORlRBX05BVF9SRUdfQUREUl9NSU4sCisgTkZUQV9OQVRfUkVHX0FERFJfTUFYLAorIE5GVEFfTkFUX1JFR19QUk9UT19NSU4sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfTkFUX1JFR19QUk9UT19NQVgsCisgX19ORlRBX05BVF9NQVgKK307CisjZGVmaW5lIE5GVEFfTkFUX01BWCAoX19ORlRBX05BVF9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvbXBhdC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNjdkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXNfY29tcGF0LmgKQEAgLTAsMCArMSw1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTkZUX0NPTVBBVF9ORk5FVExJTktfSF8KKyNkZWZpbmUgX05GVF9DT01QQVRfTkZORVRMSU5LX0hfCitlbnVtIG5mdF90YXJnZXRfYXR0cmlidXRlcyB7CisgTkZUQV9UQVJHRVRfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX1RBUkdFVF9OQU1FLAorIE5GVEFfVEFSR0VUX1JFViwKKyBORlRBX1RBUkdFVF9JTkZPLAorIF9fTkZUQV9UQVJHRVRfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgTkZUQV9UQVJHRVRfTUFYIChfX05GVEFfVEFSR0VUX01BWCAtIDEpCitlbnVtIG5mdF9tYXRjaF9hdHRyaWJ1dGVzIHsKKyBORlRBX01BVENIX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9NQVRDSF9OQU1FLAorIE5GVEFfTUFUQ0hfUkVWLAorIE5GVEFfTUFUQ0hfSU5GTywKKyBfX05GVEFfTUFUQ0hfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgTkZUQV9NQVRDSF9NQVggKF9fTkZUQV9NQVRDSF9NQVggLSAxKQorI2RlZmluZSBORlRfQ09NUEFUX05BTUVfTUFYIDMyCitlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZOTF9NU0dfQ09NUEFUX0dFVCwKKyBORk5MX01TR19DT01QQVRfTUFYCit9OworZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfQ09NUEFUX1VOU1BFQyA9IDAsCisgTkZUQV9DT01QQVRfTkFNRSwKKyBORlRBX0NPTVBBVF9SRVYsCisgTkZUQV9DT01QQVRfVFlQRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19ORlRBX0NPTVBBVF9NQVgsCit9OworI2RlZmluZSBORlRBX0NPTVBBVF9NQVggKF9fTkZUQV9DT01QQVRfTUFYIC0gMSkKKyNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKaW5kZXggYTVjM2Y1Yy4uYzA0ZjYyYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKQEAgLTM5LDMyICszOSw0MCBAQAogI2RlZmluZSBORk5MR1JQX0NPTk5UUkFDS19FWFBfVVBEQVRFIE5GTkxHUlBfQ09OTlRSQUNLX0VYUF9VUERBVEUKICBORk5MR1JQX0NPTk5UUkFDS19FWFBfREVTVFJPWSwKICNkZWZpbmUgTkZOTEdSUF9DT05OVFJBQ0tfRVhQX0RFU1RST1kgTkZOTEdSUF9DT05OVFJBQ0tfRVhQX0RFU1RST1kKLSBfX05GTkxHUlBfTUFYLAorIE5GTkxHUlBfTkZUQUJMRVMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORk5MR1JQX05GVEFCTEVTIE5GTkxHUlBfTkZUQUJMRVMKKyBfX05GTkxHUlBfTUFYLAogfTsKICNkZWZpbmUgTkZOTEdSUF9NQVggKF9fTkZOTEdSUF9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuZmdlbm1zZyB7CiAgX191OCBuZmdlbl9mYW1pbHk7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdmVyc2lvbjsKICBfX2JlMTYgcmVzX2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIE5GTkVUTElOS19WMCAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORk5MX1NVQlNZU19JRCh4KSAoKHggJiAweGZmMDApID4+IDgpCiAjZGVmaW5lIE5GTkxfTVNHX1RZUEUoeCkgKHggJiAweDAwZmYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORk5MX1NVQlNZU19OT05FIDAKICNkZWZpbmUgTkZOTF9TVUJTWVNfQ1RORVRMSU5LIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GTkxfU1VCU1lTX0NUTkVUTElOS19FWFAgMgogI2RlZmluZSBORk5MX1NVQlNZU19RVUVVRSAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORk5MX1NVQlNZU19VTE9HIDQKICNkZWZpbmUgTkZOTF9TVUJTWVNfT1NGIDUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GTkxfU1VCU1lTX0lQU0VUIDYKICNkZWZpbmUgTkZOTF9TVUJTWVNfQUNDVCA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORk5MX1NVQlNZU19DVE5FVExJTktfVElNRU9VVCA4CiAjZGVmaW5lIE5GTkxfU1VCU1lTX0NUSEVMUEVSIDkKKyNkZWZpbmUgTkZOTF9TVUJTWVNfTkZUQUJMRVMgMTAKKyNkZWZpbmUgTkZOTF9TVUJTWVNfTkZUX0NPTVBBVCAxMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTkZOTF9TVUJTWVNfQ09VTlQgMTAKKyNkZWZpbmUgTkZOTF9TVUJTWVNfQ09VTlQgMTIKKyNkZWZpbmUgTkZOTF9NU0dfQkFUQ0hfQkVHSU4gTkxNU0dfTUlOX1RZUEUKKyNkZWZpbmUgTkZOTF9NU0dfQkFUQ0hfRU5EIE5MTVNHX01JTl9UWVBFKzEKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaAppbmRleCA2YzVkYjVhLi4yYjIyYzRmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCkBAIC02MywyMzggKzYzLDI1MSBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfTkFUX0RTVCwKICBDVEFfVFVQTEVfTUFTVEVSLAotIENUQV9OQVRfU0VRX0FESl9PUklHLAotIENUQV9OQVRfU0VRX0FESl9SRVBMWSwKKyBDVEFfU0VRX0FESl9PUklHLAorIENUQV9OQVRfU0VRX0FESl9PUklHID0gQ1RBX1NFUV9BREpfT1JJRywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgQ1RBX1NFUV9BREpfUkVQTFksCisgQ1RBX05BVF9TRVFfQURKX1JFUExZID0gQ1RBX1NFUV9BREpfUkVQTFksCiAgQ1RBX1NFQ01BUkssCiAgQ1RBX1pPTkUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9TRUNDVFgsCiAgQ1RBX1RJTUVTVEFNUCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX01BUktfTUFTSywKICBDVEFfTEFCRUxTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfTEFCRUxTX01BU0ssCiAgX19DVEFfTUFYCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgQ1RBX01BWCAoX19DVEFfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGN0YXR0cl90dXBsZSB7CiAgQ1RBX1RVUExFX1VOU1BFQywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RVUExFX0lQLAogIENUQV9UVVBMRV9QUk9UTywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19DVEFfVFVQTEVfTUFYCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RBX1RVUExFX01BWCAoX19DVEFfVFVQTEVfTUFYIC0gMSkKIGVudW0gY3RhdHRyX2lwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX0lQX1VOU1BFQywKICBDVEFfSVBfVjRfU1JDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfSVBfVjRfRFNULAogIENUQV9JUF9WNl9TUkMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9JUF9WNl9EU1QsCiAgX19DVEFfSVBfTUFYCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgQ1RBX0lQX01BWCAoX19DVEFfSVBfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGN0YXR0cl9sNHByb3RvIHsKICBDVEFfUFJPVE9fVU5TUEVDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfUFJPVE9fTlVNLAogIENUQV9QUk9UT19TUkNfUE9SVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1BST1RPX0RTVF9QT1JULAogIENUQV9QUk9UT19JQ01QX0lELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfUFJPVE9fSUNNUF9UWVBFLAogIENUQV9QUk9UT19JQ01QX0NPREUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9QUk9UT19JQ01QVjZfSUQsCiAgQ1RBX1BST1RPX0lDTVBWNl9UWVBFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfUFJPVE9fSUNNUFY2X0NPREUsCiAgX19DVEFfUFJPVE9fTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgQ1RBX1BST1RPX01BWCAoX19DVEFfUFJPVE9fTUFYIC0gMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGN0YXR0cl9wcm90b2luZm8gewogIENUQV9QUk9UT0lORk9fVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfUFJPVE9JTkZPX1RDUCwKICBDVEFfUFJPVE9JTkZPX0RDQ1AsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9QUk9UT0lORk9fU0NUUCwKICBfX0NUQV9QUk9UT0lORk9fTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgQ1RBX1BST1RPSU5GT19NQVggKF9fQ1RBX1BST1RPSU5GT19NQVggLSAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gY3RhdHRyX3Byb3RvaW5mb190Y3AgewogIENUQV9QUk9UT0lORk9fVENQX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1BST1RPSU5GT19UQ1BfU1RBVEUsCiAgQ1RBX1BST1RPSU5GT19UQ1BfV1NDQUxFX09SSUdJTkFMLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfUFJPVE9JTkZPX1RDUF9XU0NBTEVfUkVQTFksCiAgQ1RBX1BST1RPSU5GT19UQ1BfRkxBR1NfT1JJR0lOQUwsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9QUk9UT0lORk9fVENQX0ZMQUdTX1JFUExZLAogIF9fQ1RBX1BST1RPSU5GT19UQ1BfTUFYCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgQ1RBX1BST1RPSU5GT19UQ1BfTUFYIChfX0NUQV9QUk9UT0lORk9fVENQX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBjdGF0dHJfcHJvdG9pbmZvX2RjY3AgewogIENUQV9QUk9UT0lORk9fRENDUF9VTlNQRUMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9QUk9UT0lORk9fRENDUF9TVEFURSwKICBDVEFfUFJPVE9JTkZPX0RDQ1BfUk9MRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1BST1RPSU5GT19EQ0NQX0hBTkRTSEFLRV9TRVEsCiAgX19DVEFfUFJPVE9JTkZPX0RDQ1BfTUFYLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIENUQV9QUk9UT0lORk9fRENDUF9NQVggKF9fQ1RBX1BST1RPSU5GT19EQ0NQX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBjdGF0dHJfcHJvdG9pbmZvX3NjdHAgewogIENUQV9QUk9UT0lORk9fU0NUUF9VTlNQRUMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9QUk9UT0lORk9fU0NUUF9TVEFURSwKICBDVEFfUFJPVE9JTkZPX1NDVFBfVlRBR19PUklHSU5BTCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1BST1RPSU5GT19TQ1RQX1ZUQUdfUkVQTFksCiAgX19DVEFfUFJPVE9JTkZPX1NDVFBfTUFYCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgQ1RBX1BST1RPSU5GT19TQ1RQX01BWCAoX19DVEFfUFJPVE9JTkZPX1NDVFBfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGN0YXR0cl9jb3VudGVycyB7CiAgQ1RBX0NPVU5URVJTX1VOU1BFQywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX0NPVU5URVJTX1BBQ0tFVFMsCiAgQ1RBX0NPVU5URVJTX0JZVEVTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfQ09VTlRFUlMzMl9QQUNLRVRTLAogIENUQV9DT1VOVEVSUzMyX0JZVEVTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0NUQV9DT1VOVEVSU19NQVgKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVEFfQ09VTlRFUlNfTUFYIChfX0NUQV9DT1VOVEVSU19NQVggLSAxKQogZW51bSBjdGF0dHJfdHN0YW1wIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVTVEFNUF9VTlNQRUMsCiAgQ1RBX1RJTUVTVEFNUF9TVEFSVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVTVEFNUF9TVE9QLAogIF9fQ1RBX1RJTUVTVEFNUF9NQVgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBDVEFfVElNRVNUQU1QX01BWCAoX19DVEFfVElNRVNUQU1QX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBjdGF0dHJfbmF0IHsKICBDVEFfTkFUX1VOU1BFQywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX05BVF9WNF9NSU5JUCwKICNkZWZpbmUgQ1RBX05BVF9NSU5JUCBDVEFfTkFUX1Y0X01JTklQCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9OQVRfVjRfTUFYSVAsCiAjZGVmaW5lIENUQV9OQVRfTUFYSVAgQ1RBX05BVF9WNF9NQVhJUAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfTkFUX1BST1RPLAogIENUQV9OQVRfVjZfTUlOSVAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9OQVRfVjZfTUFYSVAsCiAgX19DVEFfTkFUX01BWAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIENUQV9OQVRfTUFYIChfX0NUQV9OQVRfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGN0YXR0cl9wcm90b25hdCB7CiAgQ1RBX1BST1RPTkFUX1VOU1BFQywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1BST1RPTkFUX1BPUlRfTUlOLAogIENUQV9QUk9UT05BVF9QT1JUX01BWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19DVEFfUFJPVE9OQVRfTUFYCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RBX1BST1RPTkFUX01BWCAoX19DVEFfUFJPVE9OQVRfTUFYIC0gMSkKK2VudW0gY3RhdHRyX3NlcWFkaiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIENUQV9TRVFBREpfVU5TUEVDLAorIENUQV9TRVFBREpfQ09SUkVDVElPTl9QT1MsCisgQ1RBX1NFUUFESl9PRkZTRVRfQkVGT1JFLAorIENUQV9TRVFBREpfT0ZGU0VUX0FGVEVSLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX0NUQV9TRVFBREpfTUFYCit9OworI2RlZmluZSBDVEFfU0VRQURKX01BWCAoX19DVEFfU0VRQURKX01BWCAtIDEpCiBlbnVtIGN0YXR0cl9uYXRzZXEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfTkFUX1NFUV9VTlNQRUMsCiAgQ1RBX05BVF9TRVFfQ09SUkVDVElPTl9QT1MsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9OQVRfU0VRX09GRlNFVF9CRUZPUkUsCiAgQ1RBX05BVF9TRVFfT0ZGU0VUX0FGVEVSLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0NUQV9OQVRfU0VRX01BWAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENUQV9OQVRfU0VRX01BWCAoX19DVEFfTkFUX1NFUV9NQVggLSAxKQogZW51bSBjdGF0dHJfZXhwZWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX0VYUEVDVF9VTlNQRUMsCiAgQ1RBX0VYUEVDVF9NQVNURVIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9FWFBFQ1RfVFVQTEUsCiAgQ1RBX0VYUEVDVF9NQVNLLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfRVhQRUNUX1RJTUVPVVQsCiAgQ1RBX0VYUEVDVF9JRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX0VYUEVDVF9IRUxQX05BTUUsCiAgQ1RBX0VYUEVDVF9aT05FLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfRVhQRUNUX0ZMQUdTLAogIENUQV9FWFBFQ1RfQ0xBU1MsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9FWFBFQ1RfTkFULAogIENUQV9FWFBFQ1RfRk4sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQ1RBX0VYUEVDVF9NQVgKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVEFfRVhQRUNUX01BWCAoX19DVEFfRVhQRUNUX01BWCAtIDEpCiBlbnVtIGN0YXR0cl9leHBlY3RfbmF0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX0VYUEVDVF9OQVRfVU5TUEVDLAogIENUQV9FWFBFQ1RfTkFUX0RJUiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX0VYUEVDVF9OQVRfVFVQTEUsCiAgX19DVEFfRVhQRUNUX05BVF9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBDVEFfRVhQRUNUX05BVF9NQVggKF9fQ1RBX0VYUEVDVF9OQVRfTUFYIC0gMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGN0YXR0cl9oZWxwIHsKICBDVEFfSEVMUF9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9IRUxQX05BTUUsCiAgQ1RBX0hFTFBfSU5GTywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19DVEFfSEVMUF9NQVgKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVEFfSEVMUF9NQVggKF9fQ1RBX0hFTFBfTUFYIC0gMSkKIGVudW0gY3RhdHRyX3NlY2N0eCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9TRUNDVFhfVU5TUEVDLAogIENUQV9TRUNDVFhfTkFNRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19DVEFfU0VDQ1RYX01BWAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENUQV9TRUNDVFhfTUFYIChfX0NUQV9TRUNDVFhfTUFYIC0gMSkKIGVudW0gY3RhdHRyX3N0YXRzX2NwdSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9TVEFUU19VTlNQRUMsCiAgQ1RBX1NUQVRTX1NFQVJDSEVELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfU1RBVFNfRk9VTkQsCiAgQ1RBX1NUQVRTX05FVywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1NUQVRTX0lOVkFMSUQsCiAgQ1RBX1NUQVRTX0lHTk9SRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1NUQVRTX0RFTEVURSwKICBDVEFfU1RBVFNfREVMRVRFX0xJU1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9TVEFUU19JTlNFUlQsCiAgQ1RBX1NUQVRTX0lOU0VSVF9GQUlMRUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9TVEFUU19EUk9QLAogIENUQV9TVEFUU19FQVJMWV9EUk9QLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfU1RBVFNfRVJST1IsCiAgQ1RBX1NUQVRTX1NFQVJDSF9SRVNUQVJULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0NUQV9TVEFUU19NQVgsCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RBX1NUQVRTX01BWCAoX19DVEFfU1RBVFNfTUFYIC0gMSkKIGVudW0gY3RhdHRyX3N0YXRzX2dsb2JhbCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9TVEFUU19HTE9CQUxfVU5TUEVDLAogIENUQV9TVEFUU19HTE9CQUxfRU5UUklFUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19DVEFfU1RBVFNfR0xPQkFMX01BWCwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVEFfU1RBVFNfR0xPQkFMX01BWCAoX19DVEFfU1RBVFNfR0xPQkFMX01BWCAtIDEpCiBlbnVtIGN0YXR0cl9leHBlY3Rfc3RhdHMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfU1RBVFNfRVhQX1VOU1BFQywKICBDVEFfU1RBVFNfRVhQX05FVywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1NUQVRTX0VYUF9DUkVBVEUsCiAgQ1RBX1NUQVRTX0VYUF9ERUxFVEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQ1RBX1NUQVRTX0VYUF9NQVgsCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RBX1NUQVRTX0VYUF9NQVggKF9fQ1RBX1NUQVRTX0VYUF9NQVggLSAxKQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5oCmluZGV4IDFmZTRhNTUuLjg5MjU3OTkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmgKQEAgLTI0LDEyMCArMjQsMTIyIEBACiAgSVBDVE5MX01TR19USU1FT1VUX05FVywKICBJUENUTkxfTVNHX1RJTUVPVVRfR0VULAogIElQQ1ROTF9NU0dfVElNRU9VVF9ERUxFVEUsCi0gSVBDVE5MX01TR19USU1FT1VUX01BWAorIElQQ1ROTF9NU0dfVElNRU9VVF9ERUZBVUxUX1NFVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBDVE5MX01TR19USU1FT1VUX0RFRkFVTFRfR0VULAorIElQQ1ROTF9NU0dfVElNRU9VVF9NQVgKIH07CiBlbnVtIGN0YXR0cl90aW1lb3V0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfVU5TUEVDLAogIENUQV9USU1FT1VUX05BTUUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9USU1FT1VUX0wzUFJPVE8sCiAgQ1RBX1RJTUVPVVRfTDRQUk9UTywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfREFUQSwKICBDVEFfVElNRU9VVF9VU0UsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQ1RBX1RJTUVPVVRfTUFYCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RBX1RJTUVPVVRfTUFYIChfX0NUQV9USU1FT1VUX01BWCAtIDEpCiBlbnVtIGN0YXR0cl90aW1lb3V0X2dlbmVyaWMgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9HRU5FUklDX1VOU1BFQywKICBDVEFfVElNRU9VVF9HRU5FUklDX1RJTUVPVVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQ1RBX1RJTUVPVVRfR0VORVJJQ19NQVgKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVEFfVElNRU9VVF9HRU5FUklDX01BWCAoX19DVEFfVElNRU9VVF9HRU5FUklDX01BWCAtIDEpCiBlbnVtIGN0YXR0cl90aW1lb3V0X3RjcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9USU1FT1VUX1RDUF9VTlNQRUMsCiAgQ1RBX1RJTUVPVVRfVENQX1NZTl9TRU5ULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9UQ1BfU1lOX1JFQ1YsCiAgQ1RBX1RJTUVPVVRfVENQX0VTVEFCTElTSEVELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9UQ1BfRklOX1dBSVQsCiAgQ1RBX1RJTUVPVVRfVENQX0NMT1NFX1dBSVQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9USU1FT1VUX1RDUF9MQVNUX0FDSywKICBDVEFfVElNRU9VVF9UQ1BfVElNRV9XQUlULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9UQ1BfQ0xPU0UsCiAgQ1RBX1RJTUVPVVRfVENQX1NZTl9TRU5UMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfVENQX1JFVFJBTlMsCiAgQ1RBX1RJTUVPVVRfVENQX1VOQUNLLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0NUQV9USU1FT1VUX1RDUF9NQVgKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVEFfVElNRU9VVF9UQ1BfTUFYIChfX0NUQV9USU1FT1VUX1RDUF9NQVggLSAxKQogZW51bSBjdGF0dHJfdGltZW91dF91ZHAgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9VRFBfVU5TUEVDLAogIENUQV9USU1FT1VUX1VEUF9VTlJFUExJRUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9USU1FT1VUX1VEUF9SRVBMSUVELAogIF9fQ1RBX1RJTUVPVVRfVURQX01BWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIENUQV9USU1FT1VUX1VEUF9NQVggKF9fQ1RBX1RJTUVPVVRfVURQX01BWCAtIDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBjdGF0dHJfdGltZW91dF91ZHBsaXRlIHsKICBDVEFfVElNRU9VVF9VRFBMSVRFX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfVURQTElURV9VTlJFUExJRUQsCiAgQ1RBX1RJTUVPVVRfVURQTElURV9SRVBMSUVELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0NUQV9USU1FT1VUX1VEUExJVEVfTUFYCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RBX1RJTUVPVVRfVURQTElURV9NQVggKF9fQ1RBX1RJTUVPVVRfVURQTElURV9NQVggLSAxKQogZW51bSBjdGF0dHJfdGltZW91dF9pY21wIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfSUNNUF9VTlNQRUMsCiAgQ1RBX1RJTUVPVVRfSUNNUF9USU1FT1VULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0NUQV9USU1FT1VUX0lDTVBfTUFYCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RBX1RJTUVPVVRfSUNNUF9NQVggKF9fQ1RBX1RJTUVPVVRfSUNNUF9NQVggLSAxKQogZW51bSBjdGF0dHJfdGltZW91dF9kY2NwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfRENDUF9VTlNQRUMsCiAgQ1RBX1RJTUVPVVRfRENDUF9SRVFVRVNULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9EQ0NQX1JFU1BPTkQsCiAgQ1RBX1RJTUVPVVRfRENDUF9QQVJUT1BFTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfRENDUF9PUEVOLAogIENUQV9USU1FT1VUX0RDQ1BfQ0xPU0VSRVEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9USU1FT1VUX0RDQ1BfQ0xPU0lORywKICBDVEFfVElNRU9VVF9EQ0NQX1RJTUVXQUlULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0NUQV9USU1FT1VUX0RDQ1BfTUFYCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RBX1RJTUVPVVRfRENDUF9NQVggKF9fQ1RBX1RJTUVPVVRfRENDUF9NQVggLSAxKQogZW51bSBjdGF0dHJfdGltZW91dF9zY3RwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfU0NUUF9VTlNQRUMsCiAgQ1RBX1RJTUVPVVRfU0NUUF9DTE9TRUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9USU1FT1VUX1NDVFBfQ09PS0lFX1dBSVQsCiAgQ1RBX1RJTUVPVVRfU0NUUF9DT09LSUVfRUNIT0VELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9TQ1RQX0VTVEFCTElTSEVELAogIENUQV9USU1FT1VUX1NDVFBfU0hVVERPV05fU0VOVCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfU0NUUF9TSFVURE9XTl9SRUNELAogIENUQV9USU1FT1VUX1NDVFBfU0hVVERPV05fQUNLX1NFTlQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQ1RBX1RJTUVPVVRfU0NUUF9NQVgKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVEFfVElNRU9VVF9TQ1RQX01BWCAoX19DVEFfVElNRU9VVF9TQ1RQX01BWCAtIDEpCiBlbnVtIGN0YXR0cl90aW1lb3V0X2ljbXB2NiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9USU1FT1VUX0lDTVBWNl9VTlNQRUMsCiAgQ1RBX1RJTUVPVVRfSUNNUFY2X1RJTUVPVVQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQ1RBX1RJTUVPVVRfSUNNUFY2X01BWAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENUQV9USU1FT1VUX0lDTVBWNl9NQVggKF9fQ1RBX1RJTUVPVVRfSUNNUFY2X01BWCAtIDEpCiBlbnVtIGN0YXR0cl90aW1lb3V0X2dyZSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9USU1FT1VUX0dSRV9VTlNQRUMsCiAgQ1RBX1RJTUVPVVRfR1JFX1VOUkVQTElFRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfR1JFX1JFUExJRUQsCiAgX19DVEFfVElNRU9VVF9HUkVfTUFYCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgQ1RBX1RJTUVPVVRfR1JFX01BWCAoX19DVEFfVElNRU9VVF9HUkVfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENUTkxfVElNRU9VVF9OQU1FX01BWCAzMgogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuaAppbmRleCAyNzJkNTNmLi44MTZlMzQ0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuaApAQCAtNjcsNTkgKzY3LDY1IEBACiAgTkZRQV9DQVBfTEVOLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORlFBX1NLQl9JTkZPLAorIE5GUUFfRVhQLAorIE5GUUFfVUlELAorIE5GUUFfR0lELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX05GUUFfTUFYCiB9OwogI2RlZmluZSBORlFBX01BWCAoX19ORlFBX01BWCAtIDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5mcW5sX21zZ192ZXJkaWN0X2hkciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fYmUzMiB2ZXJkaWN0OwogIF9fYmUzMiBpZDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBuZnFubF9tc2dfY29uZmlnX2NtZHMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORlFOTF9DRkdfQ01EX05PTkUsCiAgTkZRTkxfQ0ZHX0NNRF9CSU5ELAogIE5GUU5MX0NGR19DTURfVU5CSU5ELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORlFOTF9DRkdfQ01EX1BGX0JJTkQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GUU5MX0NGR19DTURfUEZfVU5CSU5ELAogfTsKIHN0cnVjdCBuZnFubF9tc2dfY29uZmlnX2NtZCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggY29tbWFuZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBfcGFkOwogIF9fYmUxNiBwZjsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBuZnFubF9jb25maWdfbW9kZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GUU5MX0NPUFlfTk9ORSwKICBORlFOTF9DT1BZX01FVEEsCiAgTkZRTkxfQ09QWV9QQUNLRVQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbmZxbmxfbXNnX2NvbmZpZ19wYXJhbXMgewogIF9fYmUzMiBjb3B5X3JhbmdlOwogIF9fdTggY29weV9tb2RlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbmZxbmxfYXR0cl9jb25maWcgewogIE5GUUFfQ0ZHX1VOU1BFQywKICBORlFBX0NGR19DTUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GUUFfQ0ZHX1BBUkFNUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZRQV9DRkdfUVVFVUVfTUFYTEVOLAogIE5GUUFfQ0ZHX01BU0ssCiAgTkZRQV9DRkdfRkxBR1MsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fTkZRQV9DRkdfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgTkZRQV9DRkdfTUFYIChfX05GUUFfQ0ZHX01BWC0xKQogI2RlZmluZSBORlFBX0NGR19GX0ZBSUxfT1BFTiAoMSA8PCAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZRQV9DRkdfRl9DT05OVFJBQ0sgKDEgPDwgMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GUUFfQ0ZHX0ZfR1NPICgxIDw8IDIpCi0jZGVmaW5lIE5GUUFfQ0ZHX0ZfTUFYICgxIDw8IDMpCisjZGVmaW5lIE5GUUFfQ0ZHX0ZfVUlEX0dJRCAoMSA8PCAzKQorI2RlZmluZSBORlFBX0NGR19GX01BWCAoMSA8PCA0KQogI2RlZmluZSBORlFBX1NLQl9DU1VNTk9UUkVBRFkgKDEgPDwgMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GUUFfU0tCX0dTTyAoMSA8PCAxKQorI2RlZmluZSBORlFBX1NLQl9DU1VNX05PVFZFUklGSUVEICgxIDw8IDIpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X0hNQVJLLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci94dF9ITUFSSy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZDAzMDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci94dF9ITUFSSy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgWFRfSE1BUktfSF8KKyNkZWZpbmUgWFRfSE1BUktfSF8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFhUX0hNQVJLX1NBRERSX01BU0ssCisgWFRfSE1BUktfREFERFJfTUFTSywKKyBYVF9ITUFSS19TUEksCisgWFRfSE1BUktfU1BJX01BU0ssCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFhUX0hNQVJLX1NQT1JULAorIFhUX0hNQVJLX0RQT1JULAorIFhUX0hNQVJLX1NQT1JUX01BU0ssCisgWFRfSE1BUktfRFBPUlRfTUFTSywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgWFRfSE1BUktfUFJPVE9fTUFTSywKKyBYVF9ITUFSS19STkQsCisgWFRfSE1BUktfTU9EVUxVUywKKyBYVF9ITUFSS19PRkZTRVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFhUX0hNQVJLX0NULAorIFhUX0hNQVJLX01FVEhPRF9MMywKKyBYVF9ITUFSS19NRVRIT0RfTDNfNCwKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYVF9ITUFSS19GTEFHKGZsYWcpICgxIDw8IGZsYWcpCit1bmlvbiBobWFya19wb3J0cyB7Cisgc3RydWN0IHsKKyBfX3UxNiBzcmM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IGRzdDsKKyB9IHAxNjsKKyBzdHJ1Y3QgeworIF9fYmUxNiBzcmM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmUxNiBkc3Q7CisgfSBiMTY7CisgX191MzIgdjMyOworIF9fYmUzMiBiMzI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK3N0cnVjdCB4dF9obWFya19pbmZvIHsKKyB1bmlvbiBuZl9pbmV0X2FkZHIgc3JjX21hc2s7CisgdW5pb24gbmZfaW5ldF9hZGRyIGRzdF9tYXNrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bmlvbiBobWFya19wb3J0cyBwb3J0X21hc2s7CisgdW5pb24gaG1hcmtfcG9ydHMgcG9ydF9zZXQ7CisgX191MzIgZmxhZ3M7CisgX191MTYgcHJvdG9fbWFzazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaGFzaHJuZDsKKyBfX3UzMiBobW9kdWx1czsKKyBfX3UzMiBob2Zmc2V0OworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmgKaW5kZXggOWE5OGYyMC4uMWEyYzA4OCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmgKQEAgLTIxLDE0ICsyMSw5IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNkZWZpbmUgTUFYX0lETEVUSU1FUl9MQUJFTF9TSVpFIDI4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBOTE1TR19NQVhfU0laRSA2NAotI2RlZmluZSBOTF9FVkVOVF9UWVBFX0lOQUNUSVZFIDAKLSNkZWZpbmUgTkxfRVZFTlRfVFlQRV9BQ1RJVkUgMQogc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdGltZW91dDsKICBjaGFyIGxhYmVsW01BWF9JRExFVElNRVJfTEFCRUxfU0laRV07Ci0gX191OCBzZW5kX25sX21zZzsKICBzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1NZTlBST1hZLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci94dF9TWU5QUk9YWS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzY2QxZmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci94dF9TWU5QUk9YWS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX1NZTlBST1hZX0gKKyNkZWZpbmUgX1hUX1NZTlBST1hZX0gKKyNkZWZpbmUgWFRfU1lOUFJPWFlfT1BUX01TUyAweDAxCisjZGVmaW5lIFhUX1NZTlBST1hZX09QVF9XU0NBTEUgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWFRfU1lOUFJPWFlfT1BUX1NBQ0tfUEVSTSAweDA0CisjZGVmaW5lIFhUX1NZTlBST1hZX09QVF9USU1FU1RBTVAgMHgwOAorI2RlZmluZSBYVF9TWU5QUk9YWV9PUFRfRUNOIDB4MTAKK3N0cnVjdCB4dF9zeW5wcm94eV9pbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBvcHRpb25zOworIF9fdTggd3NjYWxlOworIF9fdTE2IG1zczsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jZ3JvdXAuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nncm91cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4Njk1MWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci94dF9jZ3JvdXAuaApAQCAtMCwwICsxLDI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9VQVBJX1hUX0NHUk9VUF9ICisjZGVmaW5lIF9VQVBJX1hUX0NHUk9VUF9ICisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KK3N0cnVjdCB4dF9jZ3JvdXBfaW5mbyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGlkOworIF9fdTMyIGludmVydDsKK307CisjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci94dF9pcGNvbXAuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2lwY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZDFiNTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci94dF9pcGNvbXAuaApAQCAtMCwwICsxLDMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9JUENPTVBfSAorI2RlZmluZSBfWFRfSVBDT01QX0gKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorc3RydWN0IHh0X2lwY29tcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHNwaXNbMl07CisgX191OCBpbnZmbGFnczsKKyBfX3U4IGhkcnJlczsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYVF9JUENPTVBfSU5WX1NQSSAweDAxCisjZGVmaW5lIFhUX0lQQ09NUF9JTlZfTUFTSyAweDAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2wydHAuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2wydHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTdiODJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfbDJ0cC5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX05FVEZJTFRFUl9YVF9MMlRQX0gKKyNkZWZpbmUgX0xJTlVYX05FVEZJTFRFUl9YVF9MMlRQX0gKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorZW51bSB4dF9sMnRwX3R5cGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBYVF9MMlRQX1RZUEVfQ09OVFJPTCwKKyBYVF9MMlRQX1RZUEVfREFUQSwKK307CitzdHJ1Y3QgeHRfbDJ0cF9pbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdGlkOworIF9fdTMyIHNpZDsKKyBfX3U4IHZlcnNpb247CisgX191OCB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGZsYWdzOworfTsKK2VudW0geworIFhUX0wyVFBfVElEID0gKDEgPDwgMCksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFhUX0wyVFBfU0lEID0gKDEgPDwgMSksCisgWFRfTDJUUF9WRVJTSU9OID0gKDEgPDwgMiksCisgWFRfTDJUUF9UWVBFID0gKDEgPDwgMyksCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfcnBmaWx0ZXIuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3JwZmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk1MzNkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3JwZmlsdGVyLmgKQEAgLTAsMCArMSwzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfUlBBVEhfSAorI2RlZmluZSBfWFRfUlBBVEhfSAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CitlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgWFRfUlBGSUxURVJfTE9PU0UgPSAxIDw8IDAsCisgWFRfUlBGSUxURVJfVkFMSURfTUFSSyA9IDEgPDwgMSwKKyBYVF9SUEZJTFRFUl9BQ0NFUFRfTE9DQUwgPSAxIDw8IDIsCisgWFRfUlBGSUxURVJfSU5WRVJUID0gMSA8PCAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitzdHJ1Y3QgeHRfcnBmaWx0ZXJfaW5mbyB7CisgX191OCBmbGFnczsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci94dF9zb2NrZXQuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3NvY2tldC5oCmluZGV4IDU4YmM2YWUuLjQxNzBmZTYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3NvY2tldC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3NvY2tldC5oCkBAIC0yMiwxNCArMjIsMTcgQEAKIGVudW0gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBYVF9TT0NLRVRfVFJBTlNQQVJFTlQgPSAxIDw8IDAsCisgWFRfU09DS0VUX05PV0lMRENBUkQgPSAxIDw8IDEsCiB9Owogc3RydWN0IHh0X3NvY2tldF9tdGluZm8xIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBmbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owotc3RydWN0IHNvY2sgKnh0X3NvY2tldF9nZXQ0X3NrKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0gc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKTsKLXN0cnVjdCBzb2NrICp4dF9zb2NrZXRfZ2V0Nl9zayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorI2RlZmluZSBYVF9TT0NLRVRfRkxBR1NfVjEgWFRfU09DS0VUX1RSQU5TUEFSRU5UCitzdHJ1Y3QgeHRfc29ja2V0X210aW5mbzIgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpOworIF9fdTggZmxhZ3M7Cit9OworI2RlZmluZSBYVF9TT0NLRVRfRkxBR1NfVjIgKFhUX1NPQ0tFVF9UUkFOU1BBUkVOVCB8IFhUX1NPQ0tFVF9OT1dJTERDQVJEKQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF84MDJfMy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF84MDJfMy5oCmluZGV4IDAxZWYxNjguLjA5YWU3ZTAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfODAyXzMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0XzgwMl8zLmgKQEAgLTE5LDQ4ICsxOSw1MCBAQAogI2lmbmRlZiBfVUFQSV9fTElOVVhfQlJJREdFX0VCVF84MDJfM19ICiAjZGVmaW5lIF9VQVBJX19MSU5VWF9CUklER0VfRUJUXzgwMl8zX0gKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2RlZmluZSBFQlRfODAyXzNfU0FQIDB4MDEKKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRUJUXzgwMl8zX1NBUCAweDAxCiAjZGVmaW5lIEVCVF84MDJfM19UWVBFIDB4MDIKICNkZWZpbmUgRUJUXzgwMl8zX01BVENIICI4MDJfMyIKICNkZWZpbmUgQ0hFQ0tfVFlQRSAweGFhCi0jZGVmaW5lIElTX1VJIDB4MDMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElTX1VJIDB4MDMKICNkZWZpbmUgRUJUXzgwMl8zX01BU0sgKEVCVF84MDJfM19TQVAgfCBFQlRfODAyXzNfVFlQRSB8IEVCVF84MDJfMykKIHN0cnVjdCBoZHJfdWkgewogIF9fdTggZHNhcDsKLSBfX3U4IHNzYXA7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggc3NhcDsKICBfX3U4IGN0cmw7CiAgX191OCBvcmlnWzNdOwogIF9fYmUxNiB0eXBlOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IGhkcl9uaSB7CiAgX191OCBkc2FwOwogIF9fdTggc3NhcDsKLSBfX2JlMTYgY3RybDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTE2IGN0cmw7CiAgX191OCBvcmlnWzNdOwogIF9fYmUxNiB0eXBlOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZWJ0XzgwMl8zX2hkciB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIF9fdTggZGFkZHJbNl07Ci0gX191OCBzYWRkcls2XTsKKyBfX3U4IGRhZGRyW0VUSF9BTEVOXTsKKyBfX3U4IHNhZGRyW0VUSF9BTEVOXTsKICBfX2JlMTYgbGVuOwotIHVuaW9uIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5pb24gewogIHN0cnVjdCBoZHJfdWkgdWk7CiAgc3RydWN0IGhkcl9uaSBuaTsKICB9IGxsYzsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBlYnRfODAyXzNfaW5mbyB7CiAgX191OCBzYXA7CiAgX19iZTE2IHR5cGU7Ci0gX191OCBiaXRtYXNrOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJpdG1hc2s7CiAgX191OCBpbnZmbGFnczsKIH07CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9DTFVTVEVSSVAuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NMVVNURVJJUC5oCmluZGV4IDJiOGM1MTMuLjk0NjQ1NDUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NMVVNURVJJUC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NMVVNURVJJUC5oCkBAIC0xOSwyOCArMTksMzAgQEAKICNpZm5kZWYgX0lQVF9DTFVTVEVSSVBfSF90YXJnZXQKICNkZWZpbmUgX0lQVF9DTFVTVEVSSVBfSF90YXJnZXQKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotZW51bSBjbHVzdGVyaXBfaGFzaG1vZGUgeworI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBjbHVzdGVyaXBfaGFzaG1vZGUgewogIENMVVNURVJJUF9IQVNITU9ERV9TSVAgPSAwLAogIENMVVNURVJJUF9IQVNITU9ERV9TSVBfU1BULAogIENMVVNURVJJUF9IQVNITU9ERV9TSVBfU1BUX0RQVCwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgQ0xVU1RFUklQX0hBU0hNT0RFX01BWCBDTFVTVEVSSVBfSEFTSE1PREVfU0lQX1NQVF9EUFQKICNkZWZpbmUgQ0xVU1RFUklQX01BWF9OT0RFUyAxNgogI2RlZmluZSBDTFVTVEVSSVBfRkxBR19ORVcgMHgwMDAwMDAwMQotc3RydWN0IGNsdXN0ZXJpcF9jb25maWc7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGNsdXN0ZXJpcF9jb25maWc7CiBzdHJ1Y3QgaXB0X2NsdXN0ZXJpcF90Z3RfaW5mbyB7CiAgX191MzIgZmxhZ3M7Ci0gX191OCBjbHVzdGVybWFjWzZdOwotIF9fdTE2IG51bV90b3RhbF9ub2RlczsKKyBfX3U4IGNsdXN0ZXJtYWNbRVRIX0FMRU5dOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UxNiBudW1fdG90YWxfbm9kZXM7CiAgX191MTYgbnVtX2xvY2FsX25vZGVzOwogIF9fdTE2IGxvY2FsX25vZGVzW0NMVVNURVJJUF9NQVhfTk9ERVNdOwogIF9fdTMyIGhhc2hfbW9kZTsKLSBfX3UzMiBoYXNoX2luaXR2YWw7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGhhc2hfaW5pdHZhbDsKICBzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqY29uZmlnOwogfTsKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmZjLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25mYy5oCmluZGV4IDFlNzFiYjIuLjg4OTc5ZGUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmZjLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZmMuaApAQCAtNTIsNTQgKzUyLDc0IEBACiAgTkZDX0NNRF9MTENfU0RSRVEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GQ19FVkVOVF9MTENfU0RSRVMsCisgTkZDX0NNRF9GV19ET1dOTE9BRCwKKyBORkNfRVZFTlRfU0VfQURERUQsCisgTkZDX0VWRU5UX1NFX1JFTU9WRUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GQ19FVkVOVF9TRV9DT05ORUNUSVZJVFksCisgTkZDX0VWRU5UX1NFX1RSQU5TQUNUSU9OLAorIE5GQ19DTURfR0VUX1NFLAorIE5GQ19DTURfU0VfSU8sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fTkZDX0NNRF9BRlRFUl9MQVNUCiB9OwogI2RlZmluZSBORkNfQ01EX01BWCAoX19ORkNfQ01EX0FGVEVSX0xBU1QgLSAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbmZjX2F0dHJzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZDX0FUVFJfVU5TUEVDLAogIE5GQ19BVFRSX0RFVklDRV9JTkRFWCwKICBORkNfQVRUUl9ERVZJQ0VfTkFNRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZDX0FUVFJfUFJPVE9DT0xTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORkNfQVRUUl9UQVJHRVRfSU5ERVgsCiAgTkZDX0FUVFJfVEFSR0VUX1NFTlNfUkVTLAogIE5GQ19BVFRSX1RBUkdFVF9TRUxfUkVTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORkNfQVRUUl9UQVJHRVRfTkZDSUQxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORkNfQVRUUl9UQVJHRVRfU0VOU0JfUkVTLAogIE5GQ19BVFRSX1RBUkdFVF9TRU5TRl9SRVMsCiAgTkZDX0FUVFJfQ09NTV9NT0RFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORkNfQVRUUl9SRl9NT0RFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORkNfQVRUUl9ERVZJQ0VfUE9XRVJFRCwKICBORkNfQVRUUl9JTV9QUk9UT0NPTFMsCiAgTkZDX0FUVFJfVE1fUFJPVE9DT0xTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORkNfQVRUUl9MTENfUEFSQU1fTFRPLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORkNfQVRUUl9MTENfUEFSQU1fUlcsCiAgTkZDX0FUVFJfTExDX1BBUkFNX01JVVgsCiAgTkZDX0FUVFJfU0UsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GQ19BVFRSX0xMQ19TRFAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GQ19BVFRSX0ZJUk1XQVJFX05BTUUsCisgTkZDX0FUVFJfU0VfSU5ERVgsCisgTkZDX0FUVFJfU0VfVFlQRSwKKyBORkNfQVRUUl9TRV9BSUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GQ19BVFRSX0ZJUk1XQVJFX0RPV05MT0FEX1NUQVRVUywKKyBORkNfQVRUUl9TRV9BUERVLAogIF9fTkZDX0FUVFJfQUZURVJfTEFTVAogfTsKLSNkZWZpbmUgTkZDX0FUVFJfTUFYIChfX05GQ19BVFRSX0FGVEVSX0xBU1QgLSAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkZDX0FUVFJfTUFYIChfX05GQ19BVFRSX0FGVEVSX0xBU1QgLSAxKQogZW51bSBuZmNfc2RwX2F0dHIgewogIE5GQ19TRFBfQVRUUl9VTlNQRUMsCiAgTkZDX1NEUF9BVFRSX1VSSSwKLSBORkNfU0RQX0FUVFJfU0FQLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORkNfU0RQX0FUVFJfU0FQLAogIF9fTkZDX1NEUF9BVFRSX0FGVEVSX0xBU1QKIH07CiAjZGVmaW5lIE5GQ19TRFBfQVRUUl9NQVggKF9fTkZDX1NEUF9BVFRSX0FGVEVSX0xBU1QgLSAxKQotI2RlZmluZSBORkNfREVWSUNFX05BTUVfTUFYU0laRSA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORkNfREVWSUNFX05BTUVfTUFYU0laRSA4CiAjZGVmaW5lIE5GQ19ORkNJRDFfTUFYU0laRSAxMAorI2RlZmluZSBORkNfTkZDSUQyX01BWFNJWkUgOAorI2RlZmluZSBORkNfTkZDSUQzX01BWFNJWkUgMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GQ19TRU5TQl9SRVNfTUFYU0laRSAxMgogI2RlZmluZSBORkNfU0VOU0ZfUkVTX01BWFNJWkUgMTgKICNkZWZpbmUgTkZDX0dCX01BWFNJWkUgNDgKKyNkZWZpbmUgTkZDX0ZJUk1XQVJFX05BTUVfTUFYU0laRSAzMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZDX1BST1RPX0pFV0VMIDEKICNkZWZpbmUgTkZDX1BST1RPX01JRkFSRSAyCkBAIC0xMjMsNDQgKzE0Myw0NiBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZDX1BST1RPX05GQ19ERVBfTUFTSyAoMSA8PCBORkNfUFJPVE9fTkZDX0RFUCkKICNkZWZpbmUgTkZDX1BST1RPX0lTTzE0NDQzX0JfTUFTSyAoMSA8PCBORkNfUFJPVE9fSVNPMTQ0NDNfQikKLSNkZWZpbmUgTkZDX1NFX05PTkUgMHgwCiAjZGVmaW5lIE5GQ19TRV9VSUNDIDB4MQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZDX1NFX0VNQkVEREVEIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkZDX1NFX0RJU0FCTEVEIDB4MAorI2RlZmluZSBORkNfU0VfRU5BQkxFRCAweDEKIHN0cnVjdCBzb2NrYWRkcl9uZmMgewogIHNhX2ZhbWlseV90IHNhX2ZhbWlseTsKLSBfX3UzMiBkZXZfaWR4OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBkZXZfaWR4OwogIF9fdTMyIHRhcmdldF9pZHg7CiAgX191MzIgbmZjX3Byb3RvY29sOwogfTsKLSNkZWZpbmUgTkZDX0xMQ1BfTUFYX1NFUlZJQ0VfTkFNRSA2MwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkZDX0xMQ1BfTUFYX1NFUlZJQ0VfTkFNRSA2Mwogc3RydWN0IHNvY2thZGRyX25mY19sbGNwIHsKICBzYV9mYW1pbHlfdCBzYV9mYW1pbHk7CiAgX191MzIgZGV2X2lkeDsKLSBfX3UzMiB0YXJnZXRfaWR4OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB0YXJnZXRfaWR4OwogIF9fdTMyIG5mY19wcm90b2NvbDsKICBfX3U4IGRzYXA7CiAgX191OCBzc2FwOwotIGNoYXIgc2VydmljZV9uYW1lW05GQ19MTENQX01BWF9TRVJWSUNFX05BTUVdOyAgOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBjaGFyIHNlcnZpY2VfbmFtZVtORkNfTExDUF9NQVhfU0VSVklDRV9OQU1FXTsgIDsKICBzaXplX3Qgc2VydmljZV9uYW1lX2xlbjsKIH07CiAjZGVmaW5lIE5GQ19TT0NLUFJPVE9fUkFXIDAKLSNkZWZpbmUgTkZDX1NPQ0tQUk9UT19MTENQIDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5GQ19TT0NLUFJPVE9fTExDUCAxCiAjZGVmaW5lIE5GQ19TT0NLUFJPVE9fTUFYIDIKICNkZWZpbmUgTkZDX0hFQURFUl9TSVpFIDEKICNkZWZpbmUgTkZDX0xMQ1BfUkFXX0hFQURFUl9TSVpFIDIKLSNkZWZpbmUgTkZDX0xMQ1BfRElSRUNUSU9OX1JYIDB4MDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5GQ19MTENQX0RJUkVDVElPTl9SWCAweDAwCiAjZGVmaW5lIE5GQ19MTENQX0RJUkVDVElPTl9UWCAweDAxCiAjZGVmaW5lIE5GQ19MTENQX1JXIDAKICNkZWZpbmUgTkZDX0xMQ1BfTUlVWCAxCi0jZGVmaW5lIE5GQ19MTENQX1JFTU9URV9NSVUgMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkZDX0xMQ1BfUkVNT1RFX01JVSAyCiAjZGVmaW5lIE5GQ19MTENQX1JFTU9URV9MVE8gMwogI2RlZmluZSBORkNfTExDUF9SRU1PVEVfUlcgNAogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZnM0LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25mczQuaAppbmRleCAwOWEzYzdjLi4yOTQ0NjkzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25mczQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25mczQuaApAQCAtMTU3LDcgKzE1Nyw3IEBACiAjZGVmaW5lIE5GUzRfU0VDSU5GT19TVFlMRTRfQ1VSUkVOVF9GSCAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlM0X1NFQ0lORk9fU1RZTEU0X1BBUkVOVCAxCi0jZGVmaW5lIE5GUzRfTUFYX1VJTlQ2NCAofih1NjQpMCkKKyNkZWZpbmUgTkZTNF9NQVhfVUlOVDY0ICh+KF9fdTY0KTApCiAjZGVmaW5lIE5GUzRfTUFYX09QUyA4CiAjZGVmaW5lIE5GUzRfTUFYX0JBQ0tfQ0hBTk5FTF9PUFMgMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9ubDgwMjExLmgKaW5kZXggMzNmNGE4Mi4uMDFjNTBjZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9ubDgwMjExLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9ubDgwMjExLmgKQEAgLTE5LDc1NSArMTksODAwIEBACiAjaWZuZGVmIF9fTElOVVhfTkw4MDIxMV9ICiAjZGVmaW5lIF9fTElOVVhfTkw4MDIxMV9ICiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLWVudW0gbmw4MDIxMV9jb21tYW5kcyB7CisjZGVmaW5lIE5MODAyMTFfR0VOTF9OQU1FICJubDgwMjExIgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbmw4MDIxMV9jb21tYW5kcyB7CiAgTkw4MDIxMV9DTURfVU5TUEVDLAogIE5MODAyMTFfQ01EX0dFVF9XSVBIWSwKICBOTDgwMjExX0NNRF9TRVRfV0lQSFksCi0gTkw4MDIxMV9DTURfTkVXX1dJUEhZLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0NNRF9ORVdfV0lQSFksCiAgTkw4MDIxMV9DTURfREVMX1dJUEhZLAogIE5MODAyMTFfQ01EX0dFVF9JTlRFUkZBQ0UsCiAgTkw4MDIxMV9DTURfU0VUX0lOVEVSRkFDRSwKLSBOTDgwMjExX0NNRF9ORVdfSU5URVJGQUNFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0NNRF9ORVdfSU5URVJGQUNFLAogIE5MODAyMTFfQ01EX0RFTF9JTlRFUkZBQ0UsCiAgTkw4MDIxMV9DTURfR0VUX0tFWSwKICBOTDgwMjExX0NNRF9TRVRfS0VZLAotIE5MODAyMTFfQ01EX05FV19LRVksCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX05FV19LRVksCiAgTkw4MDIxMV9DTURfREVMX0tFWSwKICBOTDgwMjExX0NNRF9HRVRfQkVBQ09OLAogIE5MODAyMTFfQ01EX1NFVF9CRUFDT04sCi0gTkw4MDIxMV9DTURfU1RBUlRfQVAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX1NUQVJUX0FQLAogIE5MODAyMTFfQ01EX05FV19CRUFDT04gPSBOTDgwMjExX0NNRF9TVEFSVF9BUCwKICBOTDgwMjExX0NNRF9TVE9QX0FQLAogIE5MODAyMTFfQ01EX0RFTF9CRUFDT04gPSBOTDgwMjExX0NNRF9TVE9QX0FQLAotIE5MODAyMTFfQ01EX0dFVF9TVEFUSU9OLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0NNRF9HRVRfU1RBVElPTiwKICBOTDgwMjExX0NNRF9TRVRfU1RBVElPTiwKICBOTDgwMjExX0NNRF9ORVdfU1RBVElPTiwKICBOTDgwMjExX0NNRF9ERUxfU1RBVElPTiwKLSBOTDgwMjExX0NNRF9HRVRfTVBBVEgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX0dFVF9NUEFUSCwKICBOTDgwMjExX0NNRF9TRVRfTVBBVEgsCiAgTkw4MDIxMV9DTURfTkVXX01QQVRILAogIE5MODAyMTFfQ01EX0RFTF9NUEFUSCwKLSBOTDgwMjExX0NNRF9TRVRfQlNTLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0NNRF9TRVRfQlNTLAogIE5MODAyMTFfQ01EX1NFVF9SRUcsCiAgTkw4MDIxMV9DTURfUkVRX1NFVF9SRUcsCiAgTkw4MDIxMV9DTURfR0VUX01FU0hfQ09ORklHLAotIE5MODAyMTFfQ01EX1NFVF9NRVNIX0NPTkZJRywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfU0VUX01FU0hfQ09ORklHLAogIE5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFICAsCiAgTkw4MDIxMV9DTURfR0VUX1JFRywKICBOTDgwMjExX0NNRF9HRVRfU0NBTiwKLSBOTDgwMjExX0NNRF9UUklHR0VSX1NDQU4sCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX1RSSUdHRVJfU0NBTiwKICBOTDgwMjExX0NNRF9ORVdfU0NBTl9SRVNVTFRTLAogIE5MODAyMTFfQ01EX1NDQU5fQUJPUlRFRCwKICBOTDgwMjExX0NNRF9SRUdfQ0hBTkdFLAotIE5MODAyMTFfQ01EX0FVVEhFTlRJQ0FURSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFLAogIE5MODAyMTFfQ01EX0FTU09DSUFURSwKICBOTDgwMjExX0NNRF9ERUFVVEhFTlRJQ0FURSwKICBOTDgwMjExX0NNRF9ESVNBU1NPQ0lBVEUsCi0gTkw4MDIxMV9DTURfTUlDSEFFTF9NSUNfRkFJTFVSRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfTUlDSEFFTF9NSUNfRkFJTFVSRSwKICBOTDgwMjExX0NNRF9SRUdfQkVBQ09OX0hJTlQsCiAgTkw4MDIxMV9DTURfSk9JTl9JQlNTLAogIE5MODAyMTFfQ01EX0xFQVZFX0lCU1MsCi0gTkw4MDIxMV9DTURfVEVTVE1PREUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX1RFU1RNT0RFLAogIE5MODAyMTFfQ01EX0NPTk5FQ1QsCiAgTkw4MDIxMV9DTURfUk9BTSwKICBOTDgwMjExX0NNRF9ESVNDT05ORUNULAotIE5MODAyMTFfQ01EX1NFVF9XSVBIWV9ORVROUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfU0VUX1dJUEhZX05FVE5TLAogIE5MODAyMTFfQ01EX0dFVF9TVVJWRVksCiAgTkw4MDIxMV9DTURfTkVXX1NVUlZFWV9SRVNVTFRTLAogIE5MODAyMTFfQ01EX1NFVF9QTUtTQSwKLSBOTDgwMjExX0NNRF9ERUxfUE1LU0EsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX0RFTF9QTUtTQSwKICBOTDgwMjExX0NNRF9GTFVTSF9QTUtTQSwKICBOTDgwMjExX0NNRF9SRU1BSU5fT05fQ0hBTk5FTCwKICBOTDgwMjExX0NNRF9DQU5DRUxfUkVNQUlOX09OX0NIQU5ORUwsCi0gTkw4MDIxMV9DTURfU0VUX1RYX0JJVFJBVEVfTUFTSywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfU0VUX1RYX0JJVFJBVEVfTUFTSywKICBOTDgwMjExX0NNRF9SRUdJU1RFUl9GUkFNRSwKICBOTDgwMjExX0NNRF9SRUdJU1RFUl9BQ1RJT04gPSBOTDgwMjExX0NNRF9SRUdJU1RFUl9GUkFNRSwKICBOTDgwMjExX0NNRF9GUkFNRSwKLSBOTDgwMjExX0NNRF9BQ1RJT04gPSBOTDgwMjExX0NNRF9GUkFNRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfQUNUSU9OID0gTkw4MDIxMV9DTURfRlJBTUUsCiAgTkw4MDIxMV9DTURfRlJBTUVfVFhfU1RBVFVTLAogIE5MODAyMTFfQ01EX0FDVElPTl9UWF9TVEFUVVMgPSBOTDgwMjExX0NNRF9GUkFNRV9UWF9TVEFUVVMsCiAgTkw4MDIxMV9DTURfU0VUX1BPV0VSX1NBVkUsCi0gTkw4MDIxMV9DTURfR0VUX1BPV0VSX1NBVkUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX0dFVF9QT1dFUl9TQVZFLAogIE5MODAyMTFfQ01EX1NFVF9DUU0sCiAgTkw4MDIxMV9DTURfTk9USUZZX0NRTSwKICBOTDgwMjExX0NNRF9TRVRfQ0hBTk5FTCwKLSBOTDgwMjExX0NNRF9TRVRfV0RTX1BFRVIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX1NFVF9XRFNfUEVFUiwKICBOTDgwMjExX0NNRF9GUkFNRV9XQUlUX0NBTkNFTCwKICBOTDgwMjExX0NNRF9KT0lOX01FU0gsCiAgTkw4MDIxMV9DTURfTEVBVkVfTUVTSCwKLSBOTDgwMjExX0NNRF9VTlBST1RfREVBVVRIRU5USUNBVEUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX1VOUFJPVF9ERUFVVEhFTlRJQ0FURSwKICBOTDgwMjExX0NNRF9VTlBST1RfRElTQVNTT0NJQVRFLAogIE5MODAyMTFfQ01EX05FV19QRUVSX0NBTkRJREFURSwKICBOTDgwMjExX0NNRF9HRVRfV09XTEFOLAotIE5MODAyMTFfQ01EX1NFVF9XT1dMQU4sCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX1NFVF9XT1dMQU4sCiAgTkw4MDIxMV9DTURfU1RBUlRfU0NIRURfU0NBTiwKICBOTDgwMjExX0NNRF9TVE9QX1NDSEVEX1NDQU4sCiAgTkw4MDIxMV9DTURfU0NIRURfU0NBTl9SRVNVTFRTLAotIE5MODAyMTFfQ01EX1NDSEVEX1NDQU5fU1RPUFBFRCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfU0NIRURfU0NBTl9TVE9QUEVELAogIE5MODAyMTFfQ01EX1NFVF9SRUtFWV9PRkZMT0FELAogIE5MODAyMTFfQ01EX1BNS1NBX0NBTkRJREFURSwKICBOTDgwMjExX0NNRF9URExTX09QRVIsCi0gTkw4MDIxMV9DTURfVERMU19NR01ULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0NNRF9URExTX01HTVQsCiAgTkw4MDIxMV9DTURfVU5FWFBFQ1RFRF9GUkFNRSwKICBOTDgwMjExX0NNRF9QUk9CRV9DTElFTlQsCiAgTkw4MDIxMV9DTURfUkVHSVNURVJfQkVBQ09OUywKLSBOTDgwMjExX0NNRF9VTkVYUEVDVEVEXzRBRERSX0ZSQU1FLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0NNRF9VTkVYUEVDVEVEXzRBRERSX0ZSQU1FLAogIE5MODAyMTFfQ01EX1NFVF9OT0FDS19NQVAsCiAgTkw4MDIxMV9DTURfQ0hfU1dJVENIX05PVElGWSwKICBOTDgwMjExX0NNRF9TVEFSVF9QMlBfREVWSUNFLAotIE5MODAyMTFfQ01EX1NUT1BfUDJQX0RFVklDRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfU1RPUF9QMlBfREVWSUNFLAogIE5MODAyMTFfQ01EX0NPTk5fRkFJTEVELAogIE5MODAyMTFfQ01EX1NFVF9NQ0FTVF9SQVRFLAogIE5MODAyMTFfQ01EX1NFVF9NQUNfQUNMLAotIE5MODAyMTFfQ01EX1JBREFSX0RFVEVDVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfUkFEQVJfREVURUNULAogIE5MODAyMTFfQ01EX0dFVF9QUk9UT0NPTF9GRUFUVVJFUywKICBOTDgwMjExX0NNRF9VUERBVEVfRlRfSUVTLAogIE5MODAyMTFfQ01EX0ZUX0VWRU5ULAotIE5MODAyMTFfQ01EX0NSSVRfUFJPVE9DT0xfU1RBUlQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX0NSSVRfUFJPVE9DT0xfU1RBUlQsCiAgTkw4MDIxMV9DTURfQ1JJVF9QUk9UT0NPTF9TVE9QLAorIE5MODAyMTFfQ01EX0dFVF9DT0FMRVNDRSwKKyBOTDgwMjExX0NNRF9TRVRfQ09BTEVTQ0UsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX0NIQU5ORUxfU1dJVENILAorIE5MODAyMTFfQ01EX1ZFTkRPUiwKKyBOTDgwMjExX0NNRF9TRVRfUU9TX01BUCwKICBfX05MODAyMTFfQ01EX0FGVEVSX0xBU1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQ01EX01BWCA9IF9fTkw4MDIxMV9DTURfQUZURVJfTEFTVCAtIDEKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTDgwMjExX0NNRF9TRVRfQlNTIE5MODAyMTFfQ01EX1NFVF9CU1MKICNkZWZpbmUgTkw4MDIxMV9DTURfU0VUX01HTVRfRVhUUkFfSUUgTkw4MDIxMV9DTURfU0VUX01HTVRfRVhUUkFfSUUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MODAyMTFfQ01EX1JFR19DSEFOR0UgTkw4MDIxMV9DTURfUkVHX0NIQU5HRQogI2RlZmluZSBOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUgTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTDgwMjExX0NNRF9BU1NPQ0lBVEUgTkw4MDIxMV9DTURfQVNTT0NJQVRFCiAjZGVmaW5lIE5MODAyMTFfQ01EX0RFQVVUSEVOVElDQVRFIE5MODAyMTFfQ01EX0RFQVVUSEVOVElDQVRFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTDgwMjExX0NNRF9ESVNBU1NPQ0lBVEUgTkw4MDIxMV9DTURfRElTQVNTT0NJQVRFCiAjZGVmaW5lIE5MODAyMTFfQ01EX1JFR19CRUFDT05fSElOVCBOTDgwMjExX0NNRF9SRUdfQkVBQ09OX0hJTlQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9GRUFUVVJFX0ZMQUdTIE5MODAyMTFfQVRUUl9GRUFUVVJFX0ZMQUdTCiAjZGVmaW5lIE5MODAyMTFfQ01EX0dFVF9NRVNIX1BBUkFNUyBOTDgwMjExX0NNRF9HRVRfTUVTSF9DT05GSUcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MODAyMTFfQ01EX1NFVF9NRVNIX1BBUkFNUyBOTDgwMjExX0NNRF9TRVRfTUVTSF9DT05GSUcKICNkZWZpbmUgTkw4MDIxMV9NRVNIX1NFVFVQX1ZFTkRPUl9QQVRIX1NFTF9JRSBOTDgwMjExX01FU0hfU0VUVVBfSUUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfYXR0cnMgewogIE5MODAyMTFfQVRUUl9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9XSVBIWSwKICBOTDgwMjExX0FUVFJfV0lQSFlfTkFNRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0lGSU5ERVgsCiAgTkw4MDIxMV9BVFRSX0lGTkFNRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0lGVFlQRSwKICBOTDgwMjExX0FUVFJfTUFDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfS0VZX0RBVEEsCiAgTkw4MDIxMV9BVFRSX0tFWV9JRFgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9LRVlfQ0lQSEVSLAogIE5MODAyMTFfQVRUUl9LRVlfU0VRLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFQsCiAgTkw4MDIxMV9BVFRSX0JFQUNPTl9JTlRFUlZBTCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0RUSU1fUEVSSU9ELAogIE5MODAyMTFfQVRUUl9CRUFDT05fSEVBRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0JFQUNPTl9UQUlMLAogIE5MODAyMTFfQVRUUl9TVEFfQUlELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfU1RBX0ZMQUdTLAogIE5MODAyMTFfQVRUUl9TVEFfTElTVEVOX0lOVEVSVkFMLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9SQVRFUywKICBOTDgwMjExX0FUVFJfU1RBX1ZMQU4sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9TVEFfSU5GTywKICBOTDgwMjExX0FUVFJfV0lQSFlfQkFORFMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9NTlRSX0ZMQUdTLAogIE5MODAyMTFfQVRUUl9NRVNIX0lELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfU1RBX1BMSU5LX0FDVElPTiwKICBOTDgwMjExX0FUVFJfTVBBVEhfTkVYVF9IT1AsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9NUEFUSF9JTkZPLAogIE5MODAyMTFfQVRUUl9CU1NfQ1RTX1BST1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9CU1NfU0hPUlRfUFJFQU1CTEUsCiAgTkw4MDIxMV9BVFRSX0JTU19TSE9SVF9TTE9UX1RJTUUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9IVF9DQVBBQklMSVRZLAogIE5MODAyMTFfQVRUUl9TVVBQT1JURURfSUZUWVBFUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1JFR19BTFBIQTIsCiAgTkw4MDIxMV9BVFRSX1JFR19SVUxFUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX01FU0hfQ09ORklHLAogIE5MODAyMTFfQVRUUl9CU1NfQkFTSUNfUkFURVMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9XSVBIWV9UWFFfUEFSQU1TLAogIE5MODAyMTFfQVRUUl9XSVBIWV9GUkVRLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFLAogIE5MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9NR01ULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFLAogIE5MODAyMTFfQVRUUl9JRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX01BWF9OVU1fU0NBTl9TU0lEUywKICBOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFMsCiAgTkw4MDIxMV9BVFRSX0dFTkVSQVRJT04sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9CU1MsCiAgTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9SRUdfVFlQRSwKICBOTDgwMjExX0FUVFJfU1VQUE9SVEVEX0NPTU1BTkRTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfRlJBTUUsCiAgTkw4MDIxMV9BVFRSX1NTSUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9BVVRIX1RZUEUsCiAgTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfS0VZX1RZUEUsCiAgTkw4MDIxMV9BVFRSX01BWF9TQ0FOX0lFX0xFTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURVMsCiAgTkw4MDIxMV9BVFRSX0ZSRVFfQkVGT1JFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfRlJFUV9BRlRFUiwKICBOTDgwMjExX0FUVFJfRlJFUV9GSVhFRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1dJUEhZX1JFVFJZX1NIT1JULAogIE5MODAyMTFfQVRUUl9XSVBIWV9SRVRSWV9MT05HLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfV0lQSFlfRlJBR19USFJFU0hPTEQsCiAgTkw4MDIxMV9BVFRSX1dJUEhZX1JUU19USFJFU0hPTEQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9USU1FRF9PVVQsCiAgTkw4MDIxMV9BVFRSX1VTRV9NRlAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9TVEFfRkxBR1MyLAogIE5MODAyMTFfQVRUUl9DT05UUk9MX1BPUlQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9URVNUREFUQSwKICBOTDgwMjExX0FUVFJfUFJJVkFDWSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0RJU0NPTk5FQ1RFRF9CWV9BUCwKICBOTDgwMjExX0FUVFJfU1RBVFVTX0NPREUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9DSVBIRVJfU1VJVEVTX1BBSVJXSVNFLAogIE5MODAyMTFfQVRUUl9DSVBIRVJfU1VJVEVfR1JPVVAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9XUEFfVkVSU0lPTlMsCiAgTkw4MDIxMV9BVFRSX0FLTV9TVUlURVMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9SRVFfSUUsCiAgTkw4MDIxMV9BVFRSX1JFU1BfSUUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9QUkVWX0JTU0lELAogIE5MODAyMTFfQVRUUl9LRVksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9LRVlTLAogIE5MODAyMTFfQVRUUl9QSUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl80QUREUiwKICBOTDgwMjExX0FUVFJfU1VSVkVZX0lORk8sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9QTUtJRCwKICBOTDgwMjExX0FUVFJfTUFYX05VTV9QTUtJRFMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9EVVJBVElPTiwKICBOTDgwMjExX0FUVFJfQ09PS0lFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfV0lQSFlfQ09WRVJBR0VfQ0xBU1MsCiAgTkw4MDIxMV9BVFRSX1RYX1JBVEVTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfRlJBTUVfTUFUQ0gsCiAgTkw4MDIxMV9BVFRSX0FDSywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1BTX1NUQVRFLAogIE5MODAyMTFfQVRUUl9DUU0sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9MT0NBTF9TVEFURV9DSEFOR0UsCiAgTkw4MDIxMV9BVFRSX0FQX0lTT0xBVEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9XSVBIWV9UWF9QT1dFUl9TRVRUSU5HLAogIE5MODAyMTFfQVRUUl9XSVBIWV9UWF9QT1dFUl9MRVZFTCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1RYX0ZSQU1FX1RZUEVTLAogIE5MODAyMTFfQVRUUl9SWF9GUkFNRV9UWVBFUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0ZSQU1FX1RZUEUsCiAgTkw4MDIxMV9BVFRSX0NPTlRST0xfUE9SVF9FVEhFUlRZUEUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9DT05UUk9MX1BPUlRfTk9fRU5DUllQVCwKICBOTDgwMjExX0FUVFJfU1VQUE9SVF9JQlNTX1JTTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1dJUEhZX0FOVEVOTkFfVFgsCiAgTkw4MDIxMV9BVFRSX1dJUEhZX0FOVEVOTkFfUlgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9NQ0FTVF9SQVRFLAogIE5MODAyMTFfQVRUUl9PRkZDSEFOTkVMX1RYX09LLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfQlNTX0hUX09QTU9ERSwKICBOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRfVFlQRVMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9NQVhfUkVNQUlOX09OX0NIQU5ORUxfRFVSQVRJT04sCiAgTkw4MDIxMV9BVFRSX01FU0hfU0VUVVAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9XSVBIWV9BTlRFTk5BX0FWQUlMX1RYLAogIE5MODAyMTFfQVRUUl9XSVBIWV9BTlRFTk5BX0FWQUlMX1JYLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfU1VQUE9SVF9NRVNIX0FVVEgsCiAgTkw4MDIxMV9BVFRSX1NUQV9QTElOS19TVEFURSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1dPV0xBTl9UUklHR0VSUywKICBOTDgwMjExX0FUVFJfV09XTEFOX1RSSUdHRVJTX1NVUFBPUlRFRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1NDSEVEX1NDQU5fSU5URVJWQUwsCiAgTkw4MDIxMV9BVFRSX0lOVEVSRkFDRV9DT01CSU5BVElPTlMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9TT0ZUV0FSRV9JRlRZUEVTLAogIE5MODAyMTFfQVRUUl9SRUtFWV9EQVRBLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfTUFYX05VTV9TQ0hFRF9TQ0FOX1NTSURTLAogIE5MODAyMTFfQVRUUl9NQVhfU0NIRURfU0NBTl9JRV9MRU4sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9TQ0FOX1NVUFBfUkFURVMsCiAgTkw4MDIxMV9BVFRSX0hJRERFTl9TU0lELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfSUVfUFJPQkVfUkVTUCwKICBOTDgwMjExX0FUVFJfSUVfQVNTT0NfUkVTUCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1NUQV9XTUUsCiAgTkw4MDIxMV9BVFRSX1NVUFBPUlRfQVBfVUFQU0QsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9ST0FNX1NVUFBPUlQsCiAgTkw4MDIxMV9BVFRSX1NDSEVEX1NDQU5fTUFUQ0gsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9NQVhfTUFUQ0hfU0VUUywKICBOTDgwMjExX0FUVFJfUE1LU0FfQ0FORElEQVRFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfVFhfTk9fQ0NLX1JBVEUsCiAgTkw4MDIxMV9BVFRSX1RETFNfQUNUSU9OLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfVERMU19ESUFMT0dfVE9LRU4sCiAgTkw4MDIxMV9BVFRSX1RETFNfT1BFUkFUSU9OLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfVERMU19TVVBQT1JULAogIE5MODAyMTFfQVRUUl9URExTX0VYVEVSTkFMX1NFVFVQLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfREVWSUNFX0FQX1NNRSwKICBOTDgwMjExX0FUVFJfRE9OVF9XQUlUX0ZPUl9BQ0ssCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9GRUFUVVJFX0ZMQUdTLAogIE5MODAyMTFfQVRUUl9QUk9CRV9SRVNQX09GRkxPQUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9QUk9CRV9SRVNQLAogIE5MODAyMTFfQVRUUl9ERlNfUkVHSU9OLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfRElTQUJMRV9IVCwKICBOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWV9NQVNLLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfTk9BQ0tfTUFQLAogIE5MODAyMTFfQVRUUl9JTkFDVElWSVRZX1RJTUVPVVQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9SWF9TSUdOQUxfREJNLAogIE5MODAyMTFfQVRUUl9CR19TQ0FOX1BFUklPRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1dERVYsCiAgTkw4MDIxMV9BVFRSX1VTRVJfUkVHX0hJTlRfVFlQRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0NPTk5fRkFJTEVEX1JFQVNPTiwKICBOTDgwMjExX0FUVFJfU0FFX0RBVEEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9WSFRfQ0FQQUJJTElUWSwKICBOTDgwMjExX0FUVFJfU0NBTl9GTEFHUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0NIQU5ORUxfV0lEVEgsCiAgTkw4MDIxMV9BVFRSX0NFTlRFUl9GUkVRMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0NFTlRFUl9GUkVRMiwKICBOTDgwMjExX0FUVFJfUDJQX0NUV0lORE9XLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfUDJQX09QUFBTLAogIE5MODAyMTFfQVRUUl9MT0NBTF9NRVNIX1BPV0VSX01PREUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9BQ0xfUE9MSUNZLAogIE5MODAyMTFfQVRUUl9NQUNfQUREUlMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9NQUNfQUNMX01BWCwKICBOTDgwMjExX0FUVFJfUkFEQVJfRVZFTlQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9FWFRfQ0FQQSwKICBOTDgwMjExX0FUVFJfRVhUX0NBUEFfTUFTSywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1NUQV9DQVBBQklMSVRZLAogIE5MODAyMTFfQVRUUl9TVEFfRVhUX0NBUEFCSUxJVFksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9QUk9UT0NPTF9GRUFUVVJFUywKICBOTDgwMjExX0FUVFJfU1BMSVRfV0lQSFlfRFVNUCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0RJU0FCTEVfVkhULAogIE5MODAyMTFfQVRUUl9WSFRfQ0FQQUJJTElUWV9NQVNLLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfTURJRCwKICBOTDgwMjExX0FUVFJfSUVfUklDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfQ1JJVF9QUk9UX0lELAogIE5MODAyMTFfQVRUUl9NQVhfQ1JJVF9QUk9UX0RVUkFUSU9OLAotIF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QsCi0gTkw4MDIxMV9BVFRSX01BWCA9IF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QgLSAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQVRUUl9QRUVSX0FJRCwKKyBOTDgwMjExX0FUVFJfQ09BTEVTQ0VfUlVMRSwKKyBOTDgwMjExX0FUVFJfQ0hfU1dJVENIX0NPVU5ULAorIE5MODAyMTFfQVRUUl9DSF9TV0lUQ0hfQkxPQ0tfVFgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQVRUUl9DU0FfSUVTLAorIE5MODAyMTFfQVRUUl9DU0FfQ19PRkZfQkVBQ09OLAorIE5MODAyMTFfQVRUUl9DU0FfQ19PRkZfUFJFU1AsCisgTkw4MDIxMV9BVFRSX1JYTUdNVF9GTEFHUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfQ0hBTk5FTFMsCisgTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfT1BFUl9DTEFTU0VTLAorIE5MODAyMTFfQVRUUl9IQU5ETEVfREZTLAorIE5MODAyMTFfQVRUUl9TVVBQT1JUXzVfTUhaLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0FUVFJfU1VQUE9SVF8xMF9NSFosCisgTkw4MDIxMV9BVFRSX09QTU9ERV9OT1RJRiwKKyBOTDgwMjExX0FUVFJfVkVORE9SX0lELAorIE5MODAyMTFfQVRUUl9WRU5ET1JfU1VCQ01ELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0FUVFJfVkVORE9SX0RBVEEsCisgTkw4MDIxMV9BVFRSX1ZFTkRPUl9FVkVOVFMsCisgTkw4MDIxMV9BVFRSX1FPU19NQVAsCisgX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9BVFRSX01BWCA9IF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QgLSAxCiB9OwogI2RlZmluZSBOTDgwMjExX0FUVFJfU0NBTl9HRU5FUkFUSU9OIE5MODAyMTFfQVRUUl9HRU5FUkFUSU9OCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9NRVNIX1BBUkFNUyBOTDgwMjExX0FUVFJfTUVTSF9DT05GSUcKLSNkZWZpbmUgTkw4MDIxMV9DTURfQ09OTkVDVCBOTDgwMjExX0NNRF9DT05ORUNUCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOTDgwMjExX0NNRF9DT05ORUNUIE5MODAyMTFfQ01EX0NPTk5FQ1QKICNkZWZpbmUgTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFkgTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFkKICNkZWZpbmUgTkw4MDIxMV9BVFRSX0JTU19CQVNJQ19SQVRFUyBOTDgwMjExX0FUVFJfQlNTX0JBU0lDX1JBVEVTCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9XSVBIWV9UWFFfUEFSQU1TIE5MODAyMTFfQVRUUl9XSVBIWV9UWFFfUEFSQU1TCi0jZGVmaW5lIE5MODAyMTFfQVRUUl9XSVBIWV9GUkVRIE5MODAyMTFfQVRUUl9XSVBIWV9GUkVRCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOTDgwMjExX0FUVFJfV0lQSFlfRlJFUSBOTDgwMjExX0FUVFJfV0lQSFlfRlJFUQogI2RlZmluZSBOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFIE5MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEUKICNkZWZpbmUgTkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRSBOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9JRSBOTDgwMjExX0FUVFJfSUUKLSNkZWZpbmUgTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IgTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SIE5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9SRUdfVFlQRSBOTDgwMjExX0FUVFJfUkVHX1RZUEUKICNkZWZpbmUgTkw4MDIxMV9BVFRSX0ZSQU1FIE5MODAyMTFfQVRUUl9GUkFNRQogI2RlZmluZSBOTDgwMjExX0FUVFJfU1NJRCBOTDgwMjExX0FUVFJfU1NJRAotI2RlZmluZSBOTDgwMjExX0FUVFJfQVVUSF9UWVBFIE5MODAyMTFfQVRUUl9BVVRIX1RZUEUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5MODAyMTFfQVRUUl9BVVRIX1RZUEUgTkw4MDIxMV9BVFRSX0FVVEhfVFlQRQogI2RlZmluZSBOTDgwMjExX0FUVFJfUkVBU09OX0NPREUgTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9DSVBIRVJfU1VJVEVTX1BBSVJXSVNFIE5MODAyMTFfQVRUUl9DSVBIRVJfU1VJVEVTX1BBSVJXSVNFCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9DSVBIRVJfU1VJVEVfR1JPVVAgTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURV9HUk9VUAotI2RlZmluZSBOTDgwMjExX0FUVFJfV1BBX1ZFUlNJT05TIE5MODAyMTFfQVRUUl9XUEFfVkVSU0lPTlMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5MODAyMTFfQVRUUl9XUEFfVkVSU0lPTlMgTkw4MDIxMV9BVFRSX1dQQV9WRVJTSU9OUwogI2RlZmluZSBOTDgwMjExX0FUVFJfQUtNX1NVSVRFUyBOTDgwMjExX0FUVFJfQUtNX1NVSVRFUwogI2RlZmluZSBOTDgwMjExX0FUVFJfS0VZIE5MODAyMTFfQVRUUl9LRVkKICNkZWZpbmUgTkw4MDIxMV9BVFRSX0tFWVMgTkw4MDIxMV9BVFRSX0tFWVMKLSNkZWZpbmUgTkw4MDIxMV9BVFRSX0ZFQVRVUkVfRkxBR1MgTkw4MDIxMV9BVFRSX0ZFQVRVUkVfRkxBR1MKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5MODAyMTFfQVRUUl9GRUFUVVJFX0ZMQUdTIE5MODAyMTFfQVRUUl9GRUFUVVJFX0ZMQUdTCiAjZGVmaW5lIE5MODAyMTFfTUFYX1NVUFBfUkFURVMgMzIKICNkZWZpbmUgTkw4MDIxMV9NQVhfU1VQUF9IVF9SQVRFUyA3NwogI2RlZmluZSBOTDgwMjExX01BWF9TVVBQX1JFR19SVUxFUyAzMgotI2RlZmluZSBOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfRU5DUl9LRVkgMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX0VOQ1JfS0VZIDAKICNkZWZpbmUgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1RYX01JQ19LRVkgMTYKICNkZWZpbmUgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVkgMjQKICNkZWZpbmUgTkw4MDIxMV9IVF9DQVBBQklMSVRZX0xFTiAyNgotI2RlZmluZSBOTDgwMjExX1ZIVF9DQVBBQklMSVRZX0xFTiAxMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkw4MDIxMV9WSFRfQ0FQQUJJTElUWV9MRU4gMTIKICNkZWZpbmUgTkw4MDIxMV9NQVhfTlJfQ0lQSEVSX1NVSVRFUyA1CiAjZGVmaW5lIE5MODAyMTFfTUFYX05SX0FLTV9TVUlURVMgMgogI2RlZmluZSBOTDgwMjExX01JTl9SRU1BSU5fT05fQ0hBTk5FTF9USU1FIDEwCi0jZGVmaW5lIE5MODAyMTFfU0NBTl9SU1NJX1RIT0xEX09GRiAtMzAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOTDgwMjExX1NDQU5fUlNTSV9USE9MRF9PRkYgLTMwMAogI2RlZmluZSBOTDgwMjExX0NRTV9UWEVfTUFYX0lOVFZMIDE4MDAKIGVudW0gbmw4MDIxMV9pZnR5cGUgewogIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVELAotIE5MODAyMTFfSUZUWVBFX0FESE9DLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0lGVFlQRV9BREhPQywKICBOTDgwMjExX0lGVFlQRV9TVEFUSU9OLAogIE5MODAyMTFfSUZUWVBFX0FQLAogIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4sCi0gTkw4MDIxMV9JRlRZUEVfV0RTLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0lGVFlQRV9XRFMsCiAgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiwKICBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5ULAogIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQsCi0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0lGVFlQRV9QMlBfR08sCiAgTkw4MDIxMV9JRlRZUEVfUDJQX0RFVklDRSwKICBOVU1fTkw4MDIxMV9JRlRZUEVTLAogIE5MODAyMTFfSUZUWVBFX01BWCA9IE5VTV9OTDgwMjExX0lGVFlQRVMgLSAxCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBlbnVtIG5sODAyMTFfc3RhX2ZsYWdzIHsKICBfX05MODAyMTFfU1RBX0ZMQUdfSU5WQUxJRCwKICBOTDgwMjExX1NUQV9GTEFHX0FVVEhPUklaRUQsCi0gTkw4MDIxMV9TVEFfRkxBR19TSE9SVF9QUkVBTUJMRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9TVEFfRkxBR19TSE9SVF9QUkVBTUJMRSwKICBOTDgwMjExX1NUQV9GTEFHX1dNRSwKICBOTDgwMjExX1NUQV9GTEFHX01GUCwKICBOTDgwMjExX1NUQV9GTEFHX0FVVEhFTlRJQ0FURUQsCi0gTkw4MDIxMV9TVEFfRkxBR19URExTX1BFRVIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfU1RBX0ZMQUdfVERMU19QRUVSLAogIE5MODAyMTFfU1RBX0ZMQUdfQVNTT0NJQVRFRCwKICBfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVCwKICBOTDgwMjExX1NUQV9GTEFHX01BWCA9IF9fTkw4MDIxMV9TVEFfRkxBR19BRlRFUl9MQVNUIC0gMQotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBOTDgwMjExX1NUQV9GTEFHX01BWF9PTERfQVBJIE5MODAyMTFfU1RBX0ZMQUdfVERMU19QRUVSCiBzdHJ1Y3Qgbmw4MDIxMV9zdGFfZmxhZ191cGRhdGUgewogIF9fdTMyIG1hc2s7Ci0gX191MzIgc2V0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBzZXQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogZW51bSBubDgwMjExX3JhdGVfaW5mbyB7CiAgX19OTDgwMjExX1JBVEVfSU5GT19JTlZBTElELAotIE5MODAyMTFfUkFURV9JTkZPX0JJVFJBVEUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfUkFURV9JTkZPX0JJVFJBVEUsCiAgTkw4MDIxMV9SQVRFX0lORk9fTUNTLAogIE5MODAyMTFfUkFURV9JTkZPXzQwX01IWl9XSURUSCwKICBOTDgwMjExX1JBVEVfSU5GT19TSE9SVF9HSSwKLSBOTDgwMjExX1JBVEVfSU5GT19CSVRSQVRFMzIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfUkFURV9JTkZPX0JJVFJBVEUzMiwKICBOTDgwMjExX1JBVEVfSU5GT19WSFRfTUNTLAogIE5MODAyMTFfUkFURV9JTkZPX1ZIVF9OU1MsCiAgTkw4MDIxMV9SQVRFX0lORk9fODBfTUhaX1dJRFRILAotIE5MODAyMTFfUkFURV9JTkZPXzgwUDgwX01IWl9XSURUSCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9SQVRFX0lORk9fODBQODBfTUhaX1dJRFRILAogIE5MODAyMTFfUkFURV9JTkZPXzE2MF9NSFpfV0lEVEgsCiAgX19OTDgwMjExX1JBVEVfSU5GT19BRlRFUl9MQVNULAogIE5MODAyMTFfUkFURV9JTkZPX01BWCA9IF9fTkw4MDIxMV9SQVRFX0lORk9fQUZURVJfTEFTVCAtIDEKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIGVudW0gbmw4MDIxMV9zdGFfYnNzX3BhcmFtIHsKICBfX05MODAyMTFfU1RBX0JTU19QQVJBTV9JTlZBTElELAogIE5MODAyMTFfU1RBX0JTU19QQVJBTV9DVFNfUFJPVCwKLSBOTDgwMjExX1NUQV9CU1NfUEFSQU1fU0hPUlRfUFJFQU1CTEUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfU1RBX0JTU19QQVJBTV9TSE9SVF9QUkVBTUJMRSwKICBOTDgwMjExX1NUQV9CU1NfUEFSQU1fU0hPUlRfU0xPVF9USU1FLAogIE5MODAyMTFfU1RBX0JTU19QQVJBTV9EVElNX1BFUklPRCwKICBOTDgwMjExX1NUQV9CU1NfUEFSQU1fQkVBQ09OX0lOVEVSVkFMLAotIF9fTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0FGVEVSX0xBU1QsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0FGVEVSX0xBU1QsCiAgTkw4MDIxMV9TVEFfQlNTX1BBUkFNX01BWCA9IF9fTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0FGVEVSX0xBU1QgLSAxCiB9OwogZW51bSBubDgwMjExX3N0YV9pbmZvIHsKLSBfX05MODAyMTFfU1RBX0lORk9fSU5WQUxJRCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19OTDgwMjExX1NUQV9JTkZPX0lOVkFMSUQsCiAgTkw4MDIxMV9TVEFfSU5GT19JTkFDVElWRV9USU1FLAogIE5MODAyMTFfU1RBX0lORk9fUlhfQllURVMsCiAgTkw4MDIxMV9TVEFfSU5GT19UWF9CWVRFUywKLSBOTDgwMjExX1NUQV9JTkZPX0xMSUQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfU1RBX0lORk9fTExJRCwKICBOTDgwMjExX1NUQV9JTkZPX1BMSUQsCiAgTkw4MDIxMV9TVEFfSU5GT19QTElOS19TVEFURSwKICBOTDgwMjExX1NUQV9JTkZPX1NJR05BTCwKLSBOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURSwKICBOTDgwMjExX1NUQV9JTkZPX1JYX1BBQ0tFVFMsCiAgTkw4MDIxMV9TVEFfSU5GT19UWF9QQUNLRVRTLAogIE5MODAyMTFfU1RBX0lORk9fVFhfUkVUUklFUywKLSBOTDgwMjExX1NUQV9JTkZPX1RYX0ZBSUxFRCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9TVEFfSU5GT19UWF9GQUlMRUQsCiAgTkw4MDIxMV9TVEFfSU5GT19TSUdOQUxfQVZHLAogIE5MODAyMTFfU1RBX0lORk9fUlhfQklUUkFURSwKICBOTDgwMjExX1NUQV9JTkZPX0JTU19QQVJBTSwKLSBOTDgwMjExX1NUQV9JTkZPX0NPTk5FQ1RFRF9USU1FLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX1NUQV9JTkZPX0NPTk5FQ1RFRF9USU1FLAogIE5MODAyMTFfU1RBX0lORk9fU1RBX0ZMQUdTLAogIE5MODAyMTFfU1RBX0lORk9fQkVBQ09OX0xPU1MsCiAgTkw4MDIxMV9TVEFfSU5GT19UX09GRlNFVCwKLSBOTDgwMjExX1NUQV9JTkZPX0xPQ0FMX1BNLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX1NUQV9JTkZPX0xPQ0FMX1BNLAogIE5MODAyMTFfU1RBX0lORk9fUEVFUl9QTSwKICBOTDgwMjExX1NUQV9JTkZPX05PTlBFRVJfUE0sCiAgTkw4MDIxMV9TVEFfSU5GT19SWF9CWVRFUzY0LAotIE5MODAyMTFfU1RBX0lORk9fVFhfQllURVM2NCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9TVEFfSU5GT19UWF9CWVRFUzY0LAorIE5MODAyMTFfU1RBX0lORk9fQ0hBSU5fU0lHTkFMLAorIE5MODAyMTFfU1RBX0lORk9fQ0hBSU5fU0lHTkFMX0FWRywKICBfX05MODAyMTFfU1RBX0lORk9fQUZURVJfTEFTVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9TVEFfSU5GT19NQVggPSBfX05MODAyMTFfU1RBX0lORk9fQUZURVJfTEFTVCAtIDEKIH07CiBlbnVtIG5sODAyMTFfbXBhdGhfZmxhZ3MgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01QQVRIX0ZMQUdfQUNUSVZFID0gMTw8MCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9NUEFUSF9GTEFHX1JFU09MVklORyA9IDE8PDEsCiAgTkw4MDIxMV9NUEFUSF9GTEFHX1NOX1ZBTElEID0gMTw8MiwKICBOTDgwMjExX01QQVRIX0ZMQUdfRklYRUQgPSAxPDwzLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01QQVRIX0ZMQUdfUkVTT0xWRUQgPSAxPDw0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIG5sODAyMTFfbXBhdGhfaW5mbyB7CiAgX19OTDgwMjExX01QQVRIX0lORk9fSU5WQUxJRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9NUEFUSF9JTkZPX0ZSQU1FX1FMRU4sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTVBBVEhfSU5GT19TTiwKICBOTDgwMjExX01QQVRIX0lORk9fTUVUUklDLAogIE5MODAyMTFfTVBBVEhfSU5GT19FWFBUSU1FLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01QQVRIX0lORk9fRkxBR1MsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTVBBVEhfSU5GT19ESVNDT1ZFUllfVElNRU9VVCwKICBOTDgwMjExX01QQVRIX0lORk9fRElTQ09WRVJZX1JFVFJJRVMsCiAgX19OTDgwMjExX01QQVRIX0lORk9fQUZURVJfTEFTVCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9NUEFUSF9JTkZPX01BWCA9IF9fTkw4MDIxMV9NUEFUSF9JTkZPX0FGVEVSX0xBU1QgLSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gbmw4MDIxMV9iYW5kX2F0dHIgewogIF9fTkw4MDIxMV9CQU5EX0FUVFJfSU5WQUxJRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9CQU5EX0FUVFJfRlJFUVMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQkFORF9BVFRSX1JBVEVTLAogIE5MODAyMTFfQkFORF9BVFRSX0hUX01DU19TRVQsCiAgTkw4MDIxMV9CQU5EX0FUVFJfSFRfQ0FQQSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9CQU5EX0FUVFJfSFRfQU1QRFVfRkFDVE9SLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0JBTkRfQVRUUl9IVF9BTVBEVV9ERU5TSVRZLAogIE5MODAyMTFfQkFORF9BVFRSX1ZIVF9NQ1NfU0VULAogIE5MODAyMTFfQkFORF9BVFRSX1ZIVF9DQVBBLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX05MODAyMTFfQkFORF9BVFRSX0FGVEVSX0xBU1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQkFORF9BVFRSX01BWCA9IF9fTkw4MDIxMV9CQU5EX0FUVFJfQUZURVJfTEFTVCAtIDEKIH07CiAjZGVmaW5lIE5MODAyMTFfQkFORF9BVFRSX0hUX0NBUEEgTkw4MDIxMV9CQU5EX0FUVFJfSFRfQ0FQQQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbmw4MDIxMV9mcmVxdWVuY3lfYXR0ciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9JTlZBTElELAogIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfRlJFUSwKICBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX0RJU0FCTEVELAorIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTk9fSVIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfUEFTU0lWRV9TQ0FOLAotIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTk9fSUJTUywKKyBfX05MODAyMTFfRlJFUVVFTkNZX0FUVFJfTk9fSUJTUywKICBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX1JBREFSLAogIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTUFYX1RYX1BPV0VSLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX0RGU19TVEFURSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9ERlNfVElNRSwKICBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX05PX0hUNDBfTUlOVVMsCiAgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9OT19IVDQwX1BMVVMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTk9fODBNSFosCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTk9fMTYwTUhaLAogIF9fTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9BRlRFUl9MQVNULAogIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTUFYID0gX19OTDgwMjExX0ZSRVFVRU5DWV9BVFRSX0FGVEVSX0xBU1QgLSAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTUFYX1RYX1BPV0VSIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTUFYX1RYX1BPV0VSCisjZGVmaW5lIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfUEFTU0lWRV9TQ0FOIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTk9fSVIKKyNkZWZpbmUgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9OT19JQlNTIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTk9fSVIKKyNkZWZpbmUgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9OT19JUiBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX05PX0lSCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX2JpdHJhdGVfYXR0ciB7CiAgX19OTDgwMjExX0JJVFJBVEVfQVRUUl9JTlZBTElELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0JJVFJBVEVfQVRUUl9SQVRFLAogIE5MODAyMTFfQklUUkFURV9BVFRSXzJHSFpfU0hPUlRQUkVBTUJMRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19OTDgwMjExX0JJVFJBVEVfQVRUUl9BRlRFUl9MQVNULAogIE5MODAyMTFfQklUUkFURV9BVFRSX01BWCA9IF9fTkw4MDIxMV9CSVRSQVRFX0FUVFJfQUZURVJfTEFTVCAtIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRSwKICBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUiwKICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSBubDgwMjExX3JlZ190eXBlIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9SRUdET01fVFlQRV9DT1VOVFJZLAogIE5MODAyMTFfUkVHRE9NX1RZUEVfV09STEQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUkVHRE9NX1RZUEVfQ1VTVE9NX1dPUkxELAogIE5MODAyMTFfUkVHRE9NX1RZUEVfSU5URVJTRUNUSU9OLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIG5sODAyMTFfcmVnX3J1bGVfYXR0ciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fTkw4MDIxMV9SRUdfUlVMRV9BVFRSX0lOVkFMSUQsCiAgTkw4MDIxMV9BVFRSX1JFR19SVUxFX0ZMQUdTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfRlJFUV9SQU5HRV9TVEFSVCwKICBOTDgwMjExX0FUVFJfRlJFUV9SQU5HRV9FTkQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX01BWF9CVywKICBOTDgwMjExX0FUVFJfUE9XRVJfUlVMRV9NQVhfQU5UX0dBSU4sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9QT1dFUl9SVUxFX01BWF9FSVJQLAogIF9fTkw4MDIxMV9SRUdfUlVMRV9BVFRSX0FGVEVSX0xBU1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUkVHX1JVTEVfQVRUUl9NQVggPSBfX05MODAyMTFfUkVHX1JVTEVfQVRUUl9BRlRFUl9MQVNUIC0gMQogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfc2NoZWRfc2Nhbl9tYXRjaF9hdHRyIHsKICBfX05MODAyMTFfU0NIRURfU0NBTl9NQVRDSF9BVFRSX0lOVkFMSUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfU0NIRURfU0NBTl9NQVRDSF9BVFRSX1NTSUQsCiAgTkw4MDIxMV9TQ0hFRF9TQ0FOX01BVENIX0FUVFJfUlNTSSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19OTDgwMjExX1NDSEVEX1NDQU5fTUFUQ0hfQVRUUl9BRlRFUl9MQVNULAogIE5MODAyMTFfU0NIRURfU0NBTl9NQVRDSF9BVFRSX01BWCA9CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fTkw4MDIxMV9TQ0hFRF9TQ0FOX01BVENIX0FUVFJfQUZURVJfTEFTVCAtIDEKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTDgwMjExX0FUVFJfU0NIRURfU0NBTl9NQVRDSF9TU0lEIE5MODAyMTFfU0NIRURfU0NBTl9NQVRDSF9BVFRSX1NTSUQKIGVudW0gbmw4MDIxMV9yZWdfcnVsZV9mbGFncyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUlJGX05PX09GRE0gPSAxPDwwLAogIE5MODAyMTFfUlJGX05PX0NDSyA9IDE8PDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUlJGX05PX0lORE9PUiA9IDE8PDIsCiAgTkw4MDIxMV9SUkZfTk9fT1VURE9PUiA9IDE8PDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUlJGX0RGUyA9IDE8PDQsCiAgTkw4MDIxMV9SUkZfUFRQX09OTFkgPSAxPDw1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1JSRl9QVE1QX09OTFkgPSAxPDw2LAotIE5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiA9IDE8PDcsCi0gTkw4MDIxMV9SUkZfTk9fSUJTUyA9IDE8PDgsCi19OworIE5MODAyMTFfUlJGX05PX0lSID0gMTw8NywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19OTDgwMjExX1JSRl9OT19JQlNTID0gMTw8OCwKK307CisjZGVmaW5lIE5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiBOTDgwMjExX1JSRl9OT19JUgorI2RlZmluZSBOTDgwMjExX1JSRl9OT19JQlNTIE5MODAyMTFfUlJGX05PX0lSCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOTDgwMjExX1JSRl9OT19JUiBOTDgwMjExX1JSRl9OT19JUgorI2RlZmluZSBOTDgwMjExX1JSRl9OT19JUl9BTEwgKE5MODAyMTFfUlJGX05PX0lSIHwgX19OTDgwMjExX1JSRl9OT19JQlNTKQogZW51bSBubDgwMjExX2Rmc19yZWdpb25zIHsKICBOTDgwMjExX0RGU19VTlNFVCA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfREZTX0ZDQyA9IDEsCiAgTkw4MDIxMV9ERlNfRVRTSSA9IDIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfREZTX0pQID0gMywKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX3VzZXJfcmVnX2hpbnRfdHlwZSB7CiAgTkw4MDIxMV9VU0VSX1JFR19ISU5UX1VTRVIgPSAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1VTRVJfUkVHX0hJTlRfQ0VMTF9CQVNFID0gMSwKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX3N1cnZleV9pbmZvIHsKICBfX05MODAyMTFfU1VSVkVZX0lORk9fSU5WQUxJRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9TVVJWRVlfSU5GT19GUkVRVUVOQ1ksCiAgTkw4MDIxMV9TVVJWRVlfSU5GT19OT0lTRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9TVVJWRVlfSU5GT19JTl9VU0UsCiAgTkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX0JVU1ksCiAgTkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfRVhUX0JVU1ksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX1JYLAogIE5MODAyMTFfU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX1RYLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX05MODAyMTFfU1VSVkVZX0lORk9fQUZURVJfTEFTVCwKICBOTDgwMjExX1NVUlZFWV9JTkZPX01BWCA9IF9fTkw4MDIxMV9TVVJWRVlfSU5GT19BRlRFUl9MQVNUIC0gMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIG5sODAyMTFfbW50cl9mbGFncyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fTkw4MDIxMV9NTlRSX0ZMQUdfSU5WQUxJRCwKICBOTDgwMjExX01OVFJfRkxBR19GQ1NGQUlMLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01OVFJfRkxBR19QTENQRkFJTCwKICBOTDgwMjExX01OVFJfRkxBR19DT05UUk9MLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01OVFJfRkxBR19PVEhFUl9CU1MsCiAgTkw4MDIxMV9NTlRSX0ZMQUdfQ09PS19GUkFNRVMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfTU5UUl9GTEFHX0FDVElWRSwKICBfX05MODAyMTFfTU5UUl9GTEFHX0FGVEVSX0xBU1QsCiAgTkw4MDIxMV9NTlRSX0ZMQUdfTUFYID0gX19OTDgwMjExX01OVFJfRkxBR19BRlRFUl9MQVNUIC0gMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX21lc2hfcG93ZXJfbW9kZSB7CiAgTkw4MDIxMV9NRVNIX1BPV0VSX1VOS05PV04sCiAgTkw4MDIxMV9NRVNIX1BPV0VSX0FDVElWRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9NRVNIX1BPV0VSX0xJR0hUX1NMRUVQLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01FU0hfUE9XRVJfREVFUF9TTEVFUCwKICBfX05MODAyMTFfTUVTSF9QT1dFUl9BRlRFUl9MQVNULAogIE5MODAyMTFfTUVTSF9QT1dFUl9NQVggPSBfX05MODAyMTFfTUVTSF9QT1dFUl9BRlRFUl9MQVNUIC0gMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX21lc2hjb25mX3BhcmFtcyB7CiAgX19OTDgwMjExX01FU0hDT05GX0lOVkFMSUQsCiAgTkw4MDIxMV9NRVNIQ09ORl9SRVRSWV9USU1FT1VULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01FU0hDT05GX0NPTkZJUk1fVElNRU9VVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9NRVNIQ09ORl9IT0xESU5HX1RJTUVPVVQsCiAgTkw4MDIxMV9NRVNIQ09ORl9NQVhfUEVFUl9MSU5LUywKICBOTDgwMjExX01FU0hDT05GX01BWF9SRVRSSUVTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01FU0hDT05GX1RUTCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9NRVNIQ09ORl9BVVRPX09QRU5fUExJTktTLAogIE5MODAyMTFfTUVTSENPTkZfSFdNUF9NQVhfUFJFUV9SRVRSSUVTLAogIE5MODAyMTFfTUVTSENPTkZfUEFUSF9SRUZSRVNIX1RJTUUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTUVTSENPTkZfTUlOX0RJU0NPVkVSWV9USU1FT1VULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01FU0hDT05GX0hXTVBfQUNUSVZFX1BBVEhfVElNRU9VVCwKICBOTDgwMjExX01FU0hDT05GX0hXTVBfUFJFUV9NSU5fSU5URVJWQUwsCiAgTkw4MDIxMV9NRVNIQ09ORl9IV01QX05FVF9ESUFNX1RSVlNfVElNRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9NRVNIQ09ORl9IV01QX1JPT1RNT0RFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01FU0hDT05GX0VMRU1FTlRfVFRMLAogIE5MODAyMTFfTUVTSENPTkZfSFdNUF9SQU5OX0lOVEVSVkFMLAogIE5MODAyMTFfTUVTSENPTkZfR0FURV9BTk5PVU5DRU1FTlRTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01FU0hDT05GX0hXTVBfUEVSUl9NSU5fSU5URVJWQUwsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTUVTSENPTkZfRk9SV0FSRElORywKICBOTDgwMjExX01FU0hDT05GX1JTU0lfVEhSRVNIT0xELAogIE5MODAyMTFfTUVTSENPTkZfU1lOQ19PRkZTRVRfTUFYX05FSUdIQk9SLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01FU0hDT05GX0hUX09QTU9ERSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9NRVNIQ09ORl9IV01QX1BBVEhfVE9fUk9PVF9USU1FT1VULAogIE5MODAyMTFfTUVTSENPTkZfSFdNUF9ST09UX0lOVEVSVkFMLAogIE5MODAyMTFfTUVTSENPTkZfSFdNUF9DT05GSVJNQVRJT05fSU5URVJWQUwsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTUVTSENPTkZfUE9XRVJfTU9ERSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9NRVNIQ09ORl9BV0FLRV9XSU5ET1csCisgTkw4MDIxMV9NRVNIQ09ORl9QTElOS19USU1FT1VULAogIF9fTkw4MDIxMV9NRVNIQ09ORl9BVFRSX0FGVEVSX0xBU1QsCiAgTkw4MDIxMV9NRVNIQ09ORl9BVFRSX01BWCA9IF9fTkw4MDIxMV9NRVNIQ09ORl9BVFRSX0FGVEVSX0xBU1QgLSAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtNzgzLDUzICs4MjgsNjMgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9NRVNIX1NFVFVQX0VOQUJMRV9WRU5ET1JfU1lOQywKICBOTDgwMjExX01FU0hfU0VUVVBfVVNFUlNQQUNFX01QTSwKKyBOTDgwMjExX01FU0hfU0VUVVBfQVVUSF9QUk9UT0NPTCwKICBfX05MODAyMTFfTUVTSF9TRVRVUF9BVFRSX0FGVEVSX0xBU1QsCi0gTkw4MDIxMV9NRVNIX1NFVFVQX0FUVFJfTUFYID0gX19OTDgwMjExX01FU0hfU0VUVVBfQVRUUl9BRlRFUl9MQVNUIC0gMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX01FU0hfU0VUVVBfQVRUUl9NQVggPSBfX05MODAyMTFfTUVTSF9TRVRVUF9BVFRSX0FGVEVSX0xBU1QgLSAxCiB9OwogZW51bSBubDgwMjExX3R4cV9hdHRyIHsKICBfX05MODAyMTFfVFhRX0FUVFJfSU5WQUxJRCwKLSBOTDgwMjExX1RYUV9BVFRSX0FDLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX1RYUV9BVFRSX0FDLAogIE5MODAyMTFfVFhRX0FUVFJfVFhPUCwKICBOTDgwMjExX1RYUV9BVFRSX0NXTUlOLAogIE5MODAyMTFfVFhRX0FUVFJfQ1dNQVgsCi0gTkw4MDIxMV9UWFFfQVRUUl9BSUZTLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX1RYUV9BVFRSX0FJRlMsCiAgX19OTDgwMjExX1RYUV9BVFRSX0FGVEVSX0xBU1QsCiAgTkw4MDIxMV9UWFFfQVRUUl9NQVggPSBfX05MODAyMTFfVFhRX0FUVFJfQUZURVJfTEFTVCAtIDEKIH07Ci1lbnVtIG5sODAyMTFfYWMgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbmw4MDIxMV9hYyB7CiAgTkw4MDIxMV9BQ19WTywKICBOTDgwMjExX0FDX1ZJLAogIE5MODAyMTFfQUNfQkUsCi0gTkw4MDIxMV9BQ19CSywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9BQ19CSywKICBOTDgwMjExX05VTV9BQ1MKIH07CiAjZGVmaW5lIE5MODAyMTFfVFhRX0FUVFJfUVVFVUUgTkw4MDIxMV9UWFFfQVRUUl9BQwotI2RlZmluZSBOTDgwMjExX1RYUV9RX1ZPIE5MODAyMTFfQUNfVk8KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5MODAyMTFfVFhRX1FfVk8gTkw4MDIxMV9BQ19WTwogI2RlZmluZSBOTDgwMjExX1RYUV9RX1ZJIE5MODAyMTFfQUNfVkkKICNkZWZpbmUgTkw4MDIxMV9UWFFfUV9CRSBOTDgwMjExX0FDX0JFCiAjZGVmaW5lIE5MODAyMTFfVFhRX1FfQksgTkw4MDIxMV9BQ19CSwotZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSB7CiAgTkw4MDIxMV9DSEFOX05PX0hULAogIE5MODAyMTFfQ0hBTl9IVDIwLAogIE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMsCi0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ0hBTl9IVDQwUExVUwogfTsKIGVudW0gbmw4MDIxMV9jaGFuX3dpZHRoIHsKICBOTDgwMjExX0NIQU5fV0lEVEhfMjBfTk9IVCwKLSBOTDgwMjExX0NIQU5fV0lEVEhfMjAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ0hBTl9XSURUSF8yMCwKICBOTDgwMjExX0NIQU5fV0lEVEhfNDAsCiAgTkw4MDIxMV9DSEFOX1dJRFRIXzgwLAogIE5MODAyMTFfQ0hBTl9XSURUSF84MFA4MCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9DSEFOX1dJRFRIXzE2MCwKKyBOTDgwMjExX0NIQU5fV0lEVEhfNSwKKyBOTDgwMjExX0NIQU5fV0lEVEhfMTAsCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbmw4MDIxMV9ic3Nfc2Nhbl93aWR0aCB7CisgTkw4MDIxMV9CU1NfQ0hBTl9XSURUSF8yMCwKKyBOTDgwMjExX0JTU19DSEFOX1dJRFRIXzEwLAorIE5MODAyMTFfQlNTX0NIQU5fV0lEVEhfNSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSBubDgwMjExX2JzcyB7CkBAIC04NDgsMzA2ICs5MDMsMzQ2IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQlNTX1NFRU5fTVNfQUdPLAogIE5MODAyMTFfQlNTX0JFQUNPTl9JRVMsCisgTkw4MDIxMV9CU1NfQ0hBTl9XSURUSCwKICBfX05MODAyMTFfQlNTX0FGVEVSX0xBU1QsCi0gTkw4MDIxMV9CU1NfTUFYID0gX19OTDgwMjExX0JTU19BRlRFUl9MQVNUIC0gMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0JTU19NQVggPSBfX05MODAyMTFfQlNTX0FGVEVSX0xBU1QgLSAxCiB9OwogZW51bSBubDgwMjExX2Jzc19zdGF0dXMgewogIE5MODAyMTFfQlNTX1NUQVRVU19BVVRIRU5USUNBVEVELAotIE5MODAyMTFfQlNTX1NUQVRVU19BU1NPQ0lBVEVELAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0JTU19TVEFUVVNfQVNTT0NJQVRFRCwKICBOTDgwMjExX0JTU19TVEFUVVNfSUJTU19KT0lORUQsCiB9OwogZW51bSBubDgwMjExX2F1dGhfdHlwZSB7Ci0gTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTSwKICBOTDgwMjExX0FVVEhUWVBFX1NIQVJFRF9LRVksCiAgTkw4MDIxMV9BVVRIVFlQRV9GVCwKICBOTDgwMjExX0FVVEhUWVBFX05FVFdPUktfRUFQLAotIE5MODAyMTFfQVVUSFRZUEVfU0FFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0FVVEhUWVBFX1NBRSwKICBfX05MODAyMTFfQVVUSFRZUEVfTlVNLAogIE5MODAyMTFfQVVUSFRZUEVfTUFYID0gX19OTDgwMjExX0FVVEhUWVBFX05VTSAtIDEsCiAgTkw4MDIxMV9BVVRIVFlQRV9BVVRPTUFUSUMKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIGVudW0gbmw4MDIxMV9rZXlfdHlwZSB7CiAgTkw4MDIxMV9LRVlUWVBFX0dST1VQLAogIE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSwKLSBOTDgwMjExX0tFWVRZUEVfUEVFUktFWSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9LRVlUWVBFX1BFRVJLRVksCiAgTlVNX05MODAyMTFfS0VZVFlQRVMKIH07CiBlbnVtIG5sODAyMTFfbWZwIHsKLSBOTDgwMjExX01GUF9OTywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9NRlBfTk8sCiAgTkw4MDIxMV9NRlBfUkVRVUlSRUQsCiB9OwogZW51bSBubDgwMjExX3dwYV92ZXJzaW9ucyB7Ci0gTkw4MDIxMV9XUEFfVkVSU0lPTl8xID0gMSA8PCAwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX1dQQV9WRVJTSU9OXzEgPSAxIDw8IDAsCiAgTkw4MDIxMV9XUEFfVkVSU0lPTl8yID0gMSA8PCAxLAogfTsKIGVudW0gbmw4MDIxMV9rZXlfZGVmYXVsdF90eXBlcyB7Ci0gX19OTDgwMjExX0tFWV9ERUZBVUxUX1RZUEVfSU5WQUxJRCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19OTDgwMjExX0tFWV9ERUZBVUxUX1RZUEVfSU5WQUxJRCwKICBOTDgwMjExX0tFWV9ERUZBVUxUX1RZUEVfVU5JQ0FTVCwKICBOTDgwMjExX0tFWV9ERUZBVUxUX1RZUEVfTVVMVElDQVNULAogIE5VTV9OTDgwMjExX0tFWV9ERUZBVUxUX1RZUEVTCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBlbnVtIG5sODAyMTFfa2V5X2F0dHJpYnV0ZXMgewogIF9fTkw4MDIxMV9LRVlfSU5WQUxJRCwKICBOTDgwMjExX0tFWV9EQVRBLAotIE5MODAyMTFfS0VZX0lEWCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9LRVlfSURYLAogIE5MODAyMTFfS0VZX0NJUEhFUiwKICBOTDgwMjExX0tFWV9TRVEsCiAgTkw4MDIxMV9LRVlfREVGQVVMVCwKLSBOTDgwMjExX0tFWV9ERUZBVUxUX01HTVQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfS0VZX0RFRkFVTFRfTUdNVCwKICBOTDgwMjExX0tFWV9UWVBFLAogIE5MODAyMTFfS0VZX0RFRkFVTFRfVFlQRVMsCiAgX19OTDgwMjExX0tFWV9BRlRFUl9MQVNULAotIE5MODAyMTFfS0VZX01BWCA9IF9fTkw4MDIxMV9LRVlfQUZURVJfTEFTVCAtIDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9LRVlfTUFYID0gX19OTDgwMjExX0tFWV9BRlRFUl9MQVNUIC0gMQogfTsKIGVudW0gbmw4MDIxMV90eF9yYXRlX2F0dHJpYnV0ZXMgewogIF9fTkw4MDIxMV9UWFJBVEVfSU5WQUxJRCwKLSBOTDgwMjExX1RYUkFURV9MRUdBQ1ksCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIE5MODAyMTFfVFhSQVRFX01DUywKKyBOTDgwMjExX1RYUkFURV9MRUdBQ1ksCisgTkw4MDIxMV9UWFJBVEVfSFQsCisgTkw4MDIxMV9UWFJBVEVfVkhULAogIF9fTkw4MDIxMV9UWFJBVEVfQUZURVJfTEFTVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9UWFJBVEVfTUFYID0gX19OTDgwMjExX1RYUkFURV9BRlRFUl9MQVNUIC0gMQogfTsKKyNkZWZpbmUgTkw4MDIxMV9UWFJBVEVfTUNTIE5MODAyMTFfVFhSQVRFX0hUCisjZGVmaW5lIE5MODAyMTFfVkhUX05TU19NQVggOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBubDgwMjExX3R4cmF0ZV92aHQgeworIF9fdTE2IG1jc1tOTDgwMjExX1ZIVF9OU1NfTUFYXTsKK307CiBlbnVtIG5sODAyMTFfYmFuZCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQkFORF8yR0haLAogIE5MODAyMTFfQkFORF81R0haLAogIE5MODAyMTFfQkFORF82MEdIWiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbmw4MDIxMV9wc19zdGF0ZSB7CiAgTkw4MDIxMV9QU19ESVNBQkxFRCwKICBOTDgwMjExX1BTX0VOQUJMRUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfYXR0cl9jcW0gewogIF9fTkw4MDIxMV9BVFRSX0NRTV9JTlZBTElELAogIE5MODAyMTFfQVRUUl9DUU1fUlNTSV9USE9MRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0NRTV9SU1NJX0hZU1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlQsCiAgTkw4MDIxMV9BVFRSX0NRTV9QS1RfTE9TU19FVkVOVCwKICBOTDgwMjExX0FUVFJfQ1FNX1RYRV9SQVRFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfQ1FNX1RYRV9QS1RTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfQ1FNX1RYRV9JTlRWTCwKICBfX05MODAyMTFfQVRUUl9DUU1fQUZURVJfTEFTVCwKICBOTDgwMjExX0FUVFJfQ1FNX01BWCA9IF9fTkw4MDIxMV9BVFRSX0NRTV9BRlRFUl9MQVNUIC0gMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX2NxbV9yc3NpX3RocmVzaG9sZF9ldmVudCB7CiAgTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRfTE9XLAogIE5MODAyMTFfQ1FNX1JTU0lfVEhSRVNIT0xEX0VWRU5UX0hJR0gsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQ1FNX1JTU0lfQkVBQ09OX0xPU1NfRVZFTlQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gbmw4MDIxMV90eF9wb3dlcl9zZXR0aW5nIHsKICBOTDgwMjExX1RYX1BPV0VSX0FVVE9NQVRJQywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9UWF9QT1dFUl9MSU1JVEVELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1RYX1BPV0VSX0ZJWEVELAogfTsKLWVudW0gbmw4MDIxMV93b3dsYW5fcGFja2V0X3BhdHRlcm5fYXR0ciB7CitlbnVtIG5sODAyMTFfcGFja2V0X3BhdHRlcm5fYXR0ciB7CisgX19OTDgwMjExX1BLVFBBVF9JTlZBTElELAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBfX05MODAyMTFfV09XTEFOX1BLVFBBVF9JTlZBTElELAotIE5MODAyMTFfV09XTEFOX1BLVFBBVF9NQVNLLAotIE5MODAyMTFfV09XTEFOX1BLVFBBVF9QQVRURVJOLAotIE5MODAyMTFfV09XTEFOX1BLVFBBVF9PRkZTRVQsCisgTkw4MDIxMV9QS1RQQVRfTUFTSywKKyBOTDgwMjExX1BLVFBBVF9QQVRURVJOLAorIE5MODAyMTFfUEtUUEFUX09GRlNFVCwKKyBOVU1fTkw4MDIxMV9QS1RQQVQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIE5VTV9OTDgwMjExX1dPV0xBTl9QS1RQQVQsCi0gTUFYX05MODAyMTFfV09XTEFOX1BLVFBBVCA9IE5VTV9OTDgwMjExX1dPV0xBTl9QS1RQQVQgLSAxLAorIE1BWF9OTDgwMjExX1BLVFBBVCA9IE5VTV9OTDgwMjExX1BLVFBBVCAtIDEsCiB9Owotc3RydWN0IG5sODAyMTFfd293bGFuX3BhdHRlcm5fc3VwcG9ydCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IG5sODAyMTFfcGF0dGVybl9zdXBwb3J0IHsKICBfX3UzMiBtYXhfcGF0dGVybnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1pbl9wYXR0ZXJuX2xlbjsKICBfX3UzMiBtYXhfcGF0dGVybl9sZW47CiAgX191MzIgbWF4X3BrdF9vZmZzZXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTkw4MDIxMV9XT1dMQU5fUEtUUEFUX0lOVkFMSUQgX19OTDgwMjExX1BLVFBBVF9JTlZBTElECisjZGVmaW5lIE5MODAyMTFfV09XTEFOX1BLVFBBVF9NQVNLIE5MODAyMTFfUEtUUEFUX01BU0sKKyNkZWZpbmUgTkw4MDIxMV9XT1dMQU5fUEtUUEFUX1BBVFRFUk4gTkw4MDIxMV9QS1RQQVRfUEFUVEVSTgorI2RlZmluZSBOTDgwMjExX1dPV0xBTl9QS1RQQVRfT0ZGU0VUIE5MODAyMTFfUEtUUEFUX09GRlNFVAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTlVNX05MODAyMTFfV09XTEFOX1BLVFBBVCBOVU1fTkw4MDIxMV9QS1RQQVQKKyNkZWZpbmUgTUFYX05MODAyMTFfV09XTEFOX1BLVFBBVCBNQVhfTkw4MDIxMV9QS1RQQVQKKyNkZWZpbmUgbmw4MDIxMV93b3dsYW5fcGF0dGVybl9zdXBwb3J0IG5sODAyMTFfcGF0dGVybl9zdXBwb3J0CiBlbnVtIG5sODAyMTFfd293bGFuX3RyaWdnZXJzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19OTDgwMjExX1dPV0xBTl9UUklHX0lOVkFMSUQsCiAgTkw4MDIxMV9XT1dMQU5fVFJJR19BTlksCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfV09XTEFOX1RSSUdfRElTQ09OTkVDVCwKICBOTDgwMjExX1dPV0xBTl9UUklHX01BR0lDX1BLVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9XT1dMQU5fVFJJR19QS1RfUEFUVEVSTiwKICBOTDgwMjExX1dPV0xBTl9UUklHX0dUS19SRUtFWV9TVVBQT1JURUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfV09XTEFOX1RSSUdfR1RLX1JFS0VZX0ZBSUxVUkUsCiAgTkw4MDIxMV9XT1dMQU5fVFJJR19FQVBfSURFTlRfUkVRVUVTVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9XT1dMQU5fVFJJR180V0FZX0hBTkRTSEFLRSwKICBOTDgwMjExX1dPV0xBTl9UUklHX1JGS0lMTF9SRUxFQVNFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1dPV0xBTl9UUklHX1dBS0VVUF9QS1RfODAyMTEsCiAgTkw4MDIxMV9XT1dMQU5fVFJJR19XQUtFVVBfUEtUXzgwMjExX0xFTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9XT1dMQU5fVFJJR19XQUtFVVBfUEtUXzgwMjMsCiAgTkw4MDIxMV9XT1dMQU5fVFJJR19XQUtFVVBfUEtUXzgwMjNfTEVOLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1dPV0xBTl9UUklHX1RDUF9DT05ORUNUSU9OLAogIE5MODAyMTFfV09XTEFOX1RSSUdfV0FLRVVQX1RDUF9NQVRDSCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9XT1dMQU5fVFJJR19XQUtFVVBfVENQX0NPTk5MT1NULAogIE5MODAyMTFfV09XTEFOX1RSSUdfV0FLRVVQX1RDUF9OT01PUkVUT0tFTlMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5VTV9OTDgwMjExX1dPV0xBTl9UUklHLAogIE1BWF9OTDgwMjExX1dPV0xBTl9UUklHID0gTlVNX05MODAyMTFfV09XTEFOX1RSSUcgLSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBubDgwMjExX3dvd2xhbl90Y3BfZGF0YV9zZXEgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzdGFydCwgb2Zmc2V0LCBsZW47CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBubDgwMjExX3dvd2xhbl90Y3BfZGF0YV90b2tlbiB7CiAgX191MzIgb2Zmc2V0LCBsZW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdG9rZW5fc3RyZWFtW107CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBubDgwMjExX3dvd2xhbl90Y3BfZGF0YV90b2tlbl9mZWF0dXJlIHsKICBfX3UzMiBtaW5fbGVuLCBtYXhfbGVuLCBidWZzaXplOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIG5sODAyMTFfd293bGFuX3RjcF9hdHRycyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fTkw4MDIxMV9XT1dMQU5fVENQX0lOVkFMSUQsCiAgTkw4MDIxMV9XT1dMQU5fVENQX1NSQ19JUFY0LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1dPV0xBTl9UQ1BfRFNUX0lQVjQsCiAgTkw4MDIxMV9XT1dMQU5fVENQX0RTVF9NQUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfV09XTEFOX1RDUF9TUkNfUE9SVCwKICBOTDgwMjExX1dPV0xBTl9UQ1BfRFNUX1BPUlQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfV09XTEFOX1RDUF9EQVRBX1BBWUxPQUQsCiAgTkw4MDIxMV9XT1dMQU5fVENQX0RBVEFfUEFZTE9BRF9TRVEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfV09XTEFOX1RDUF9EQVRBX1BBWUxPQURfVE9LRU4sCiAgTkw4MDIxMV9XT1dMQU5fVENQX0RBVEFfSU5URVJWQUwsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfV09XTEFOX1RDUF9XQUtFX1BBWUxPQUQsCiAgTkw4MDIxMV9XT1dMQU5fVENQX1dBS0VfTUFTSywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTlVNX05MODAyMTFfV09XTEFOX1RDUCwKICBNQVhfTkw4MDIxMV9XT1dMQU5fVENQID0gTlVNX05MODAyMTFfV09XTEFOX1RDUCAtIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Oworc3RydWN0IG5sODAyMTFfY29hbGVzY2VfcnVsZV9zdXBwb3J0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgbWF4X3J1bGVzOworIHN0cnVjdCBubDgwMjExX3BhdHRlcm5fc3VwcG9ydCBwYXQ7CisgX191MzIgbWF4X2RlbGF5OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIG5sODAyMTFfYXR0cl9jb2FsZXNjZV9ydWxlIHsKKyBfX05MODAyMTFfQ09BTEVTQ0VfUlVMRV9JTlZBTElELAorIE5MODAyMTFfQVRUUl9DT0FMRVNDRV9SVUxFX0RFTEFZLAorIE5MODAyMTFfQVRUUl9DT0FMRVNDRV9SVUxFX0NPTkRJVElPTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9BVFRSX0NPQUxFU0NFX1JVTEVfUEtUX1BBVFRFUk4sCisgTlVNX05MODAyMTFfQVRUUl9DT0FMRVNDRV9SVUxFLAorIE5MODAyMTFfQVRUUl9DT0FMRVNDRV9SVUxFX01BWCA9IE5VTV9OTDgwMjExX0FUVFJfQ09BTEVTQ0VfUlVMRSAtIDEKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBubDgwMjExX2NvYWxlc2NlX2NvbmRpdGlvbiB7CisgTkw4MDIxMV9DT0FMRVNDRV9DT05ESVRJT05fTUFUQ0gsCisgTkw4MDIxMV9DT0FMRVNDRV9DT05ESVRJT05fTk9fTUFUQ0gKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX2lmYWNlX2xpbWl0X2F0dHJzIHsKICBOTDgwMjExX0lGQUNFX0xJTUlUX1VOU1BFQywKICBOTDgwMjExX0lGQUNFX0xJTUlUX01BWCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9JRkFDRV9MSU1JVF9UWVBFUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTlVNX05MODAyMTFfSUZBQ0VfTElNSVQsCiAgTUFYX05MODAyMTFfSUZBQ0VfTElNSVQgPSBOVU1fTkw4MDIxMV9JRkFDRV9MSU1JVCAtIDEKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX2lmX2NvbWJpbmF0aW9uX2F0dHJzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9JRkFDRV9DT01CX1VOU1BFQywKICBOTDgwMjExX0lGQUNFX0NPTUJfTElNSVRTLAogIE5MODAyMTFfSUZBQ0VfQ09NQl9NQVhOVU0sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfSUZBQ0VfQ09NQl9TVEFfQVBfQklfTUFUQ0gsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfSUZBQ0VfQ09NQl9OVU1fQ0hBTk5FTFMsCiAgTkw4MDIxMV9JRkFDRV9DT01CX1JBREFSX0RFVEVDVF9XSURUSFMsCiAgTlVNX05MODAyMTFfSUZBQ0VfQ09NQiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTUFYX05MODAyMTFfSUZBQ0VfQ09NQiA9IE5VTV9OTDgwMjExX0lGQUNFX0NPTUIgLSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gbmw4MDIxMV9wbGlua19zdGF0ZSB7CiAgTkw4MDIxMV9QTElOS19MSVNURU4sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUExJTktfT1BOX1NOVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9QTElOS19PUE5fUkNWRCwKICBOTDgwMjExX1BMSU5LX0NORl9SQ1ZELAogIE5MODAyMTFfUExJTktfRVNUQUIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUExJTktfSE9MRElORywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9QTElOS19CTE9DS0VELAogIE5VTV9OTDgwMjExX1BMSU5LX1NUQVRFUywKICBNQVhfTkw4MDIxMV9QTElOS19TVEFURVMgPSBOVU1fTkw4MDIxMV9QTElOS19TVEFURVMgLSAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHBsaW5rX2FjdGlvbnMgewogIE5MODAyMTFfUExJTktfQUNUSU9OX05PX0FDVElPTiwKICBOTDgwMjExX1BMSU5LX0FDVElPTl9PUEVOLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1BMSU5LX0FDVElPTl9CTE9DSywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTlVNX05MODAyMTFfUExJTktfQUNUSU9OUywKIH07CiAjZGVmaW5lIE5MODAyMTFfS0NLX0xFTiAxNgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkw4MDIxMV9LRUtfTEVOIDE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTDgwMjExX1JFUExBWV9DVFJfTEVOIDgKIGVudW0gbmw4MDIxMV9yZWtleV9kYXRhIHsKICBfX05MODAyMTFfUkVLRVlfREFUQV9JTlZBTElELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1JFS0VZX0RBVEFfS0VLLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1JFS0VZX0RBVEFfS0NLLAogIE5MODAyMTFfUkVLRVlfREFUQV9SRVBMQVlfQ1RSLAogIE5VTV9OTDgwMjExX1JFS0VZX0RBVEEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE1BWF9OTDgwMjExX1JFS0VZX0RBVEEgPSBOVU1fTkw4MDIxMV9SRUtFWV9EQVRBIC0gMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIG5sODAyMTFfaGlkZGVuX3NzaWQgewogIE5MODAyMTFfSElEREVOX1NTSURfTk9UX0lOX1VTRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9ISURERU5fU1NJRF9aRVJPX0xFTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9ISURERU5fU1NJRF9aRVJPX0NPTlRFTlRTCiB9OwogZW51bSBubDgwMjExX3N0YV93bWVfYXR0ciB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fTkw4MDIxMV9TVEFfV01FX0lOVkFMSUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfU1RBX1dNRV9VQVBTRF9RVUVVRVMsCiAgTkw4MDIxMV9TVEFfV01FX01BWF9TUCwKICBfX05MODAyMTFfU1RBX1dNRV9BRlRFUl9MQVNULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1NUQV9XTUVfTUFYID0gX19OTDgwMjExX1NUQV9XTUVfQUZURVJfTEFTVCAtIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSBubDgwMjExX3Bta3NhX2NhbmRpZGF0ZV9hdHRyIHsKICBfX05MODAyMTFfUE1LU0FfQ0FORElEQVRFX0lOVkFMSUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUE1LU0FfQ0FORElEQVRFX0lOREVYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1BNS1NBX0NBTkRJREFURV9CU1NJRCwKICBOTDgwMjExX1BNS1NBX0NBTkRJREFURV9QUkVBVVRILAogIE5VTV9OTDgwMjExX1BNS1NBX0NBTkRJREFURSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTUFYX05MODAyMTFfUE1LU0FfQ0FORElEQVRFID0gTlVNX05MODAyMTFfUE1LU0FfQ0FORElEQVRFIC0gMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIG5sODAyMTFfdGRsc19vcGVyYXRpb24gewogIE5MODAyMTFfVERMU19ESVNDT1ZFUllfUkVRLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1RETFNfU0VUVVAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfVERMU19URUFSRE9XTiwKICBOTDgwMjExX1RETFNfRU5BQkxFX0xJTkssCiAgTkw4MDIxMV9URExTX0RJU0FCTEVfTElOSywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbmw4MDIxMV9mZWF0dXJlX2ZsYWdzIHsKICBOTDgwMjExX0ZFQVRVUkVfU0tfVFhfU1RBVFVTID0gMSA8PCAwLAogIE5MODAyMTFfRkVBVFVSRV9IVF9JQlNTID0gMSA8PCAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0ZFQVRVUkVfSU5BQ1RJVklUWV9USU1FUiA9IDEgPDwgMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9GRUFUVVJFX0NFTExfQkFTRV9SRUdfSElOVFMgPSAxIDw8IDMsCiAgTkw4MDIxMV9GRUFUVVJFX1AyUF9ERVZJQ0VfTkVFRFNfQ0hBTk5FTCA9IDEgPDwgNCwKICBOTDgwMjExX0ZFQVRVUkVfU0FFID0gMSA8PCA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0ZFQVRVUkVfTE9XX1BSSU9SSVRZX1NDQU4gPSAxIDw8IDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfRkVBVFVSRV9TQ0FOX0ZMVVNIID0gMSA8PCA3LAogIE5MODAyMTFfRkVBVFVSRV9BUF9TQ0FOID0gMSA8PCA4LAogIE5MODAyMTFfRkVBVFVSRV9WSUZfVFhQT1dFUiA9IDEgPDwgOSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9GRUFUVVJFX05FRURfT0JTU19TQ0FOID0gMSA8PCAxMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9GRUFUVVJFX1AyUF9HT19DVFdJTiA9IDEgPDwgMTEsCiAgTkw4MDIxMV9GRUFUVVJFX1AyUF9HT19PUFBQUyA9IDEgPDwgMTIsCiAgTkw4MDIxMV9GRUFUVVJFX0FEVkVSVElTRV9DSEFOX0xJTUlUUyA9IDEgPDwgMTQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfRkVBVFVSRV9GVUxMX0FQX0NMSUVOVF9TVEFURSA9IDEgPDwgMTUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfRkVBVFVSRV9VU0VSU1BBQ0VfTVBNID0gMSA8PCAxNiwKKyBOTDgwMjExX0ZFQVRVUkVfQUNUSVZFX01PTklUT1IgPSAxIDw8IDE3LAogfTsKIGVudW0gbmw4MDIxMV9wcm9iZV9yZXNwX29mZmxvYWRfc3VwcG9ydF9hdHRyIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC0xMjAxLDQgKzEyOTYsMTQgQEAKIH07CiAjZGVmaW5lIE5MODAyMTFfQ1JJVF9QUk9UT19NQVhfRFVSQVRJT04gNTAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbmw4MDIxMV9yeG1nbXRfZmxhZ3MgeworIE5MODAyMTFfUlhNR01UX0ZMQUdfQU5TV0VSRUQgPSAxIDw8IDAsCit9OworI2RlZmluZSBOTDgwMjExX1ZFTkRPUl9JRF9JU19MSU5VWCAweDgwMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IG5sODAyMTFfdmVuZG9yX2NtZF9pbmZvIHsKKyBfX3UzMiB2ZW5kb3JfaWQ7CisgX191MzIgc3ViY21kOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbnZtZS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9udm1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVkZWE5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbnZtZS5oCkBAIC0wLDAgKzEsNTU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9VQVBJX0xJTlVYX05WTUVfSAorI2RlZmluZSBfVUFQSV9MSU5VWF9OVk1FX0gKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorc3RydWN0IG52bWVfaWRfcG93ZXJfc3RhdGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMTYgbWF4X3Bvd2VyOworIF9fdTggcnN2ZDI7CisgX191OCBmbGFnczsKKyBfX2xlMzIgZW50cnlfbGF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIgZXhpdF9sYXQ7CisgX191OCByZWFkX3RwdXQ7CisgX191OCByZWFkX2xhdDsKKyBfX3U4IHdyaXRlX3RwdXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggd3JpdGVfbGF0OworIF9fdTggcnN2ZDE2WzE2XTsKK307CitlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9QU19GTEFHU19NQVhfUE9XRVJfU0NBTEUgPSAxIDw8IDAsCisgTlZNRV9QU19GTEFHU19OT05fT1BfU1RBVEUgPSAxIDw8IDEsCit9Oworc3RydWN0IG52bWVfaWRfY3RybCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUxNiB2aWQ7CisgX19sZTE2IHNzdmlkOworIGNoYXIgc25bMjBdOworIGNoYXIgbW5bNDBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBjaGFyIGZyWzhdOworIF9fdTggcmFiOworIF9fdTggaWVlZVszXTsKKyBfX3U4IG1pYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBtZHRzOworIF9fdTggcnN2ZDc4WzE3OF07CisgX19sZTE2IG9hY3M7CisgX191OCBhY2w7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYWVybDsKKyBfX3U4IGZybXc7CisgX191OCBscGE7CisgX191OCBlbHBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IG5wc3M7CisgX191OCByc3ZkMjY0WzI0OF07CisgX191OCBzcWVzOworIF9fdTggY3FlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCByc3ZkNTE0WzJdOworIF9fbGUzMiBubjsKKyBfX2xlMTYgb25jczsKKyBfX2xlMTYgZnVzZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggZm5hOworIF9fdTggdndjOworIF9fbGUxNiBhd3VuOworIF9fbGUxNiBhd3VwZjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCByc3ZkNTMwWzE1MThdOworIHN0cnVjdCBudm1lX2lkX3Bvd2VyX3N0YXRlIHBzZFszMl07CisgX191OCB2c1sxMDI0XTsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CisgTlZNRV9DVFJMX09OQ1NfQ09NUEFSRSA9IDEgPDwgMCwKKyBOVk1FX0NUUkxfT05DU19XUklURV9VTkNPUlJFQ1RBQkxFID0gMSA8PCAxLAorIE5WTUVfQ1RSTF9PTkNTX0RTTSA9IDEgPDwgMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Oworc3RydWN0IG52bWVfbGJhZiB7CisgX19sZTE2IG1zOworIF9fdTggZHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggcnA7Cit9Oworc3RydWN0IG52bWVfaWRfbnMgeworIF9fbGU2NCBuc3plOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlNjQgbmNhcDsKKyBfX2xlNjQgbnVzZTsKKyBfX3U4IG5zZmVhdDsKKyBfX3U4IG5sYmFmOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGZsYmFzOworIF9fdTggbWM7CisgX191OCBkcGM7CisgX191OCBkcHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggcnN2ZDMwWzk4XTsKKyBzdHJ1Y3QgbnZtZV9sYmFmIGxiYWZbMTZdOworIF9fdTggcnN2ZDE5MlsxOTJdOworIF9fdTggdnNbMzcxMl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK2VudW0geworIE5WTUVfTlNfRkVBVF9USElOID0gMSA8PCAwLAorIE5WTUVfTEJBRl9SUF9CRVNUID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9MQkFGX1JQX0JFVFRFUiA9IDEsCisgTlZNRV9MQkFGX1JQX0dPT0QgPSAyLAorIE5WTUVfTEJBRl9SUF9ERUdSQURFRCA9IDMsCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBudm1lX3NtYXJ0X2xvZyB7CisgX191OCBjcml0aWNhbF93YXJuaW5nOworIF9fdTggdGVtcGVyYXR1cmVbMl07CisgX191OCBhdmFpbF9zcGFyZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBzcGFyZV90aHJlc2g7CisgX191OCBwZXJjZW50X3VzZWQ7CisgX191OCByc3ZkNlsyNl07CisgX191OCBkYXRhX3VuaXRzX3JlYWRbMTZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGRhdGFfdW5pdHNfd3JpdHRlblsxNl07CisgX191OCBob3N0X3JlYWRzWzE2XTsKKyBfX3U4IGhvc3Rfd3JpdGVzWzE2XTsKKyBfX3U4IGN0cmxfYnVzeV90aW1lWzE2XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBwb3dlcl9jeWNsZXNbMTZdOworIF9fdTggcG93ZXJfb25faG91cnNbMTZdOworIF9fdTggdW5zYWZlX3NodXRkb3duc1sxNl07CisgX191OCBtZWRpYV9lcnJvcnNbMTZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IG51bV9lcnJfbG9nX2VudHJpZXNbMTZdOworIF9fdTggcnN2ZDE5MlszMjBdOworfTsKK2VudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOVk1FX1NNQVJUX0NSSVRfU1BBUkUgPSAxIDw8IDAsCisgTlZNRV9TTUFSVF9DUklUX1RFTVBFUkFUVVJFID0gMSA8PCAxLAorIE5WTUVfU01BUlRfQ1JJVF9SRUxJQUJJTElUWSA9IDEgPDwgMiwKKyBOVk1FX1NNQVJUX0NSSVRfTUVESUEgPSAxIDw8IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfU01BUlRfQ1JJVF9WT0xBVElMRV9NRU1PUlkgPSAxIDw8IDQsCit9Oworc3RydWN0IG52bWVfbGJhX3JhbmdlX3R5cGUgeworIF9fdTggdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBhdHRyaWJ1dGVzOworIF9fdTggcnN2ZDJbMTRdOworIF9fdTY0IHNsYmE7CisgX191NjQgbmxiOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGd1aWRbMTZdOworIF9fdTggcnN2ZDQ4WzE2XTsKK307CitlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9MQkFSVF9UWVBFX0ZTID0gMHgwMSwKKyBOVk1FX0xCQVJUX1RZUEVfUkFJRCA9IDB4MDIsCisgTlZNRV9MQkFSVF9UWVBFX0NBQ0hFID0gMHgwMywKKyBOVk1FX0xCQVJUX1RZUEVfU1dBUCA9IDB4MDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfTEJBUlRfQVRUUklCX1RFTVAgPSAxIDw8IDAsCisgTlZNRV9MQkFSVF9BVFRSSUJfSElERSA9IDEgPDwgMSwKK307CitlbnVtIG52bWVfb3Bjb2RlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbnZtZV9jbWRfZmx1c2ggPSAweDAwLAorIG52bWVfY21kX3dyaXRlID0gMHgwMSwKKyBudm1lX2NtZF9yZWFkID0gMHgwMiwKKyBudm1lX2NtZF93cml0ZV91bmNvciA9IDB4MDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG52bWVfY21kX2NvbXBhcmUgPSAweDA1LAorIG52bWVfY21kX2RzbSA9IDB4MDksCit9Oworc3RydWN0IG52bWVfY29tbW9uX2NvbW1hbmQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IG9wY29kZTsKKyBfX3U4IGZsYWdzOworIF9fdTE2IGNvbW1hbmRfaWQ7CisgX19sZTMyIG5zaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiBjZHcyWzJdOworIF9fbGU2NCBtZXRhZGF0YTsKKyBfX2xlNjQgcHJwMTsKKyBfX2xlNjQgcHJwMjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTMyIGNkdzEwWzZdOworfTsKK3N0cnVjdCBudm1lX3J3X2NvbW1hbmQgeworIF9fdTggb3Bjb2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGZsYWdzOworIF9fdTE2IGNvbW1hbmRfaWQ7CisgX19sZTMyIG5zaWQ7CisgX191NjQgcnN2ZDI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGU2NCBtZXRhZGF0YTsKKyBfX2xlNjQgcHJwMTsKKyBfX2xlNjQgcHJwMjsKKyBfX2xlNjQgc2xiYTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTE2IGxlbmd0aDsKKyBfX2xlMTYgY29udHJvbDsKKyBfX2xlMzIgZHNtZ210OworIF9fbGUzMiByZWZ0YWc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUxNiBhcHB0YWc7CisgX19sZTE2IGFwcG1hc2s7Cit9OworZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfUldfTFIgPSAxIDw8IDE1LAorIE5WTUVfUldfRlVBID0gMSA8PCAxNCwKKyBOVk1FX1JXX0RTTV9GUkVRX1VOU1BFQyA9IDAsCisgTlZNRV9SV19EU01fRlJFUV9UWVBJQ0FMID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9SV19EU01fRlJFUV9SQVJFID0gMiwKKyBOVk1FX1JXX0RTTV9GUkVRX1JFQURTID0gMywKKyBOVk1FX1JXX0RTTV9GUkVRX1dSSVRFUyA9IDQsCisgTlZNRV9SV19EU01fRlJFUV9SVyA9IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfUldfRFNNX0ZSRVFfT05DRSA9IDYsCisgTlZNRV9SV19EU01fRlJFUV9QUkVGRVRDSCA9IDcsCisgTlZNRV9SV19EU01fRlJFUV9URU1QID0gOCwKKyBOVk1FX1JXX0RTTV9MQVRFTkNZX05PTkUgPSAwIDw8IDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfUldfRFNNX0xBVEVOQ1lfSURMRSA9IDEgPDwgNCwKKyBOVk1FX1JXX0RTTV9MQVRFTkNZX05PUk0gPSAyIDw8IDQsCisgTlZNRV9SV19EU01fTEFURU5DWV9MT1cgPSAzIDw8IDQsCisgTlZNRV9SV19EU01fU0VRX1JFUSA9IDEgPDwgNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9SV19EU01fQ09NUFJFU1NFRCA9IDEgPDwgNywKK307CitzdHJ1Y3QgbnZtZV9kc21fY21kIHsKKyBfX3U4IG9wY29kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBmbGFnczsKKyBfX3UxNiBjb21tYW5kX2lkOworIF9fbGUzMiBuc2lkOworIF9fdTY0IHJzdmQyWzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlNjQgcHJwMTsKKyBfX2xlNjQgcHJwMjsKKyBfX2xlMzIgbnI7CisgX19sZTMyIGF0dHJpYnV0ZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHJzdmQxMls0XTsKK307CitlbnVtIHsKKyBOVk1FX0RTTUdNVF9JRFIgPSAxIDw8IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfRFNNR01UX0lEVyA9IDEgPDwgMSwKKyBOVk1FX0RTTUdNVF9BRCA9IDEgPDwgMiwKK307CitzdHJ1Y3QgbnZtZV9kc21fcmFuZ2UgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIgY2F0dHI7CisgX19sZTMyIG5sYjsKKyBfX2xlNjQgc2xiYTsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBudm1lX2FkbWluX29wY29kZSB7CisgbnZtZV9hZG1pbl9kZWxldGVfc3EgPSAweDAwLAorIG52bWVfYWRtaW5fY3JlYXRlX3NxID0gMHgwMSwKKyBudm1lX2FkbWluX2dldF9sb2dfcGFnZSA9IDB4MDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG52bWVfYWRtaW5fZGVsZXRlX2NxID0gMHgwNCwKKyBudm1lX2FkbWluX2NyZWF0ZV9jcSA9IDB4MDUsCisgbnZtZV9hZG1pbl9pZGVudGlmeSA9IDB4MDYsCisgbnZtZV9hZG1pbl9hYm9ydF9jbWQgPSAweDA4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBudm1lX2FkbWluX3NldF9mZWF0dXJlcyA9IDB4MDksCisgbnZtZV9hZG1pbl9nZXRfZmVhdHVyZXMgPSAweDBhLAorIG52bWVfYWRtaW5fYXN5bmNfZXZlbnQgPSAweDBjLAorIG52bWVfYWRtaW5fYWN0aXZhdGVfZncgPSAweDEwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBudm1lX2FkbWluX2Rvd25sb2FkX2Z3ID0gMHgxMSwKKyBudm1lX2FkbWluX2Zvcm1hdF9udm0gPSAweDgwLAorIG52bWVfYWRtaW5fc2VjdXJpdHlfc2VuZCA9IDB4ODEsCisgbnZtZV9hZG1pbl9zZWN1cml0eV9yZWN2ID0gMHg4MiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworZW51bSB7CisgTlZNRV9RVUVVRV9QSFlTX0NPTlRJRyA9ICgxIDw8IDApLAorIE5WTUVfQ1FfSVJRX0VOQUJMRUQgPSAoMSA8PCAxKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9TUV9QUklPX1VSR0VOVCA9ICgwIDw8IDEpLAorIE5WTUVfU1FfUFJJT19ISUdIID0gKDEgPDwgMSksCisgTlZNRV9TUV9QUklPX01FRElVTSA9ICgyIDw8IDEpLAorIE5WTUVfU1FfUFJJT19MT1cgPSAoMyA8PCAxKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9GRUFUX0FSQklUUkFUSU9OID0gMHgwMSwKKyBOVk1FX0ZFQVRfUE9XRVJfTUdNVCA9IDB4MDIsCisgTlZNRV9GRUFUX0xCQV9SQU5HRSA9IDB4MDMsCisgTlZNRV9GRUFUX1RFTVBfVEhSRVNIID0gMHgwNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9GRUFUX0VSUl9SRUNPVkVSWSA9IDB4MDUsCisgTlZNRV9GRUFUX1ZPTEFUSUxFX1dDID0gMHgwNiwKKyBOVk1FX0ZFQVRfTlVNX1FVRVVFUyA9IDB4MDcsCisgTlZNRV9GRUFUX0lSUV9DT0FMRVNDRSA9IDB4MDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfRkVBVF9JUlFfQ09ORklHID0gMHgwOSwKKyBOVk1FX0ZFQVRfV1JJVEVfQVRPTUlDID0gMHgwYSwKKyBOVk1FX0ZFQVRfQVNZTkNfRVZFTlQgPSAweDBiLAorIE5WTUVfRkVBVF9TV19QUk9HUkVTUyA9IDB4MGMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfRldBQ1RfUkVQTCA9ICgwIDw8IDMpLAorIE5WTUVfRldBQ1RfUkVQTF9BQ1RWID0gKDEgPDwgMyksCisgTlZNRV9GV0FDVF9BQ1RWID0gKDIgPDwgMyksCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBudm1lX2lkZW50aWZ5IHsKKyBfX3U4IG9wY29kZTsKKyBfX3U4IGZsYWdzOworIF9fdTE2IGNvbW1hbmRfaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiBuc2lkOworIF9fdTY0IHJzdmQyWzJdOworIF9fbGU2NCBwcnAxOworIF9fbGU2NCBwcnAyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIgY25zOworIF9fdTMyIHJzdmQxMVs1XTsKK307CitzdHJ1Y3QgbnZtZV9mZWF0dXJlcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggb3Bjb2RlOworIF9fdTggZmxhZ3M7CisgX191MTYgY29tbWFuZF9pZDsKKyBfX2xlMzIgbnNpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgcnN2ZDJbMl07CisgX19sZTY0IHBycDE7CisgX19sZTY0IHBycDI7CisgX19sZTMyIGZpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTMyIGR3b3JkMTE7CisgX191MzIgcnN2ZDEyWzRdOworfTsKK3N0cnVjdCBudm1lX2NyZWF0ZV9jcSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggb3Bjb2RlOworIF9fdTggZmxhZ3M7CisgX191MTYgY29tbWFuZF9pZDsKKyBfX3UzMiByc3ZkMVs1XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTY0IHBycDE7CisgX191NjQgcnN2ZDg7CisgX19sZTE2IGNxaWQ7CisgX19sZTE2IHFzaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMTYgY3FfZmxhZ3M7CisgX19sZTE2IGlycV92ZWN0b3I7CisgX191MzIgcnN2ZDEyWzRdOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgbnZtZV9jcmVhdGVfc3EgeworIF9fdTggb3Bjb2RlOworIF9fdTggZmxhZ3M7CisgX191MTYgY29tbWFuZF9pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcnN2ZDFbNV07CisgX19sZTY0IHBycDE7CisgX191NjQgcnN2ZDg7CisgX19sZTE2IHNxaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUxNiBxc2l6ZTsKKyBfX2xlMTYgc3FfZmxhZ3M7CisgX19sZTE2IGNxaWQ7CisgX191MzIgcnN2ZDEyWzRdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitzdHJ1Y3QgbnZtZV9kZWxldGVfcXVldWUgeworIF9fdTggb3Bjb2RlOworIF9fdTggZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IGNvbW1hbmRfaWQ7CisgX191MzIgcnN2ZDFbOV07CisgX19sZTE2IHFpZDsKKyBfX3UxNiByc3ZkMTA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHJzdmQxMVs1XTsKK307CitzdHJ1Y3QgbnZtZV9hYm9ydF9jbWQgeworIF9fdTggb3Bjb2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGZsYWdzOworIF9fdTE2IGNvbW1hbmRfaWQ7CisgX191MzIgcnN2ZDFbOV07CisgX19sZTE2IHNxaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IGNpZDsKKyBfX3UzMiByc3ZkMTFbNV07Cit9Oworc3RydWN0IG52bWVfZG93bmxvYWRfZmlybXdhcmUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IG9wY29kZTsKKyBfX3U4IGZsYWdzOworIF9fdTE2IGNvbW1hbmRfaWQ7CisgX191MzIgcnN2ZDFbNV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGU2NCBwcnAxOworIF9fbGU2NCBwcnAyOworIF9fbGUzMiBudW1kOworIF9fbGUzMiBvZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHJzdmQxMls0XTsKK307CitzdHJ1Y3QgbnZtZV9mb3JtYXRfY21kIHsKKyBfX3U4IG9wY29kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBmbGFnczsKKyBfX3UxNiBjb21tYW5kX2lkOworIF9fbGUzMiBuc2lkOworIF9fdTY0IHJzdmQyWzRdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIgY2R3MTA7CisgX191MzIgcnN2ZDExWzVdOworfTsKK3N0cnVjdCBudm1lX2NvbW1hbmQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bmlvbiB7Cisgc3RydWN0IG52bWVfY29tbW9uX2NvbW1hbmQgY29tbW9uOworIHN0cnVjdCBudm1lX3J3X2NvbW1hbmQgcnc7Cisgc3RydWN0IG52bWVfaWRlbnRpZnkgaWRlbnRpZnk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBudm1lX2ZlYXR1cmVzIGZlYXR1cmVzOworIHN0cnVjdCBudm1lX2NyZWF0ZV9jcSBjcmVhdGVfY3E7Cisgc3RydWN0IG52bWVfY3JlYXRlX3NxIGNyZWF0ZV9zcTsKKyBzdHJ1Y3QgbnZtZV9kZWxldGVfcXVldWUgZGVsZXRlX3F1ZXVlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgbnZtZV9kb3dubG9hZF9maXJtd2FyZSBkbGZ3OworIHN0cnVjdCBudm1lX2Zvcm1hdF9jbWQgZm9ybWF0OworIHN0cnVjdCBudm1lX2RzbV9jbWQgZHNtOworIHN0cnVjdCBudm1lX2Fib3J0X2NtZCBhYm9ydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfTsKK307CitlbnVtIHsKKyBOVk1FX1NDX1NVQ0NFU1MgPSAweDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfU0NfSU5WQUxJRF9PUENPREUgPSAweDEsCisgTlZNRV9TQ19JTlZBTElEX0ZJRUxEID0gMHgyLAorIE5WTUVfU0NfQ01ESURfQ09ORkxJQ1QgPSAweDMsCisgTlZNRV9TQ19EQVRBX1hGRVJfRVJST1IgPSAweDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfU0NfUE9XRVJfTE9TUyA9IDB4NSwKKyBOVk1FX1NDX0lOVEVSTkFMID0gMHg2LAorIE5WTUVfU0NfQUJPUlRfUkVRID0gMHg3LAorIE5WTUVfU0NfQUJPUlRfUVVFVUUgPSAweDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfU0NfRlVTRURfRkFJTCA9IDB4OSwKKyBOVk1FX1NDX0ZVU0VEX01JU1NJTkcgPSAweGEsCisgTlZNRV9TQ19JTlZBTElEX05TID0gMHhiLAorIE5WTUVfU0NfQ01EX1NFUV9FUlJPUiA9IDB4YywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9TQ19MQkFfUkFOR0UgPSAweDgwLAorIE5WTUVfU0NfQ0FQX0VYQ0VFREVEID0gMHg4MSwKKyBOVk1FX1NDX05TX05PVF9SRUFEWSA9IDB4ODIsCisgTlZNRV9TQ19DUV9JTlZBTElEID0gMHgxMDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfU0NfUUlEX0lOVkFMSUQgPSAweDEwMSwKKyBOVk1FX1NDX1FVRVVFX1NJWkUgPSAweDEwMiwKKyBOVk1FX1NDX0FCT1JUX0xJTUlUID0gMHgxMDMsCisgTlZNRV9TQ19BQk9SVF9NSVNTSU5HID0gMHgxMDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfU0NfQVNZTkNfTElNSVQgPSAweDEwNSwKKyBOVk1FX1NDX0ZJUk1XQVJFX1NMT1QgPSAweDEwNiwKKyBOVk1FX1NDX0ZJUk1XQVJFX0lNQUdFID0gMHgxMDcsCisgTlZNRV9TQ19JTlZBTElEX1ZFQ1RPUiA9IDB4MTA4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOVk1FX1NDX0lOVkFMSURfTE9HX1BBR0UgPSAweDEwOSwKKyBOVk1FX1NDX0lOVkFMSURfRk9STUFUID0gMHgxMGEsCisgTlZNRV9TQ19CQURfQVRUUklCVVRFUyA9IDB4MTgwLAorIE5WTUVfU0NfV1JJVEVfRkFVTFQgPSAweDI4MCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9TQ19SRUFEX0VSUk9SID0gMHgyODEsCisgTlZNRV9TQ19HVUFSRF9DSEVDSyA9IDB4MjgyLAorIE5WTUVfU0NfQVBQVEFHX0NIRUNLID0gMHgyODMsCisgTlZNRV9TQ19SRUZUQUdfQ0hFQ0sgPSAweDI4NCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9TQ19DT01QQVJFX0ZBSUxFRCA9IDB4Mjg1LAorIE5WTUVfU0NfQUNDRVNTX0RFTklFRCA9IDB4Mjg2LAorfTsKK3N0cnVjdCBudm1lX2NvbXBsZXRpb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIgcmVzdWx0OworIF9fdTMyIHJzdmQ7CisgX19sZTE2IHNxX2hlYWQ7CisgX19sZTE2IHNxX2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UxNiBjb21tYW5kX2lkOworIF9fbGUxNiBzdGF0dXM7Cit9Oworc3RydWN0IG52bWVfdXNlcl9pbyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggb3Bjb2RlOworIF9fdTggZmxhZ3M7CisgX191MTYgY29udHJvbDsKKyBfX3UxNiBuYmxvY2tzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UxNiByc3ZkOworIF9fdTY0IG1ldGFkYXRhOworIF9fdTY0IGFkZHI7CisgX191NjQgc2xiYTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZHNtZ210OworIF9fdTMyIHJlZnRhZzsKKyBfX3UxNiBhcHB0YWc7CisgX191MTYgYXBwbWFzazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Oworc3RydWN0IG52bWVfYWRtaW5fY21kIHsKKyBfX3U4IG9wY29kZTsKKyBfX3U4IGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UxNiByc3ZkMTsKKyBfX3UzMiBuc2lkOworIF9fdTMyIGNkdzI7CisgX191MzIgY2R3MzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgbWV0YWRhdGE7CisgX191NjQgYWRkcjsKKyBfX3UzMiBtZXRhZGF0YV9sZW47CisgX191MzIgZGF0YV9sZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGNkdzEwOworIF9fdTMyIGNkdzExOworIF9fdTMyIGNkdzEyOworIF9fdTMyIGNkdzEzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBjZHcxNDsKKyBfX3UzMiBjZHcxNTsKKyBfX3UzMiB0aW1lb3V0X21zOworIF9fdTMyIHJlc3VsdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBOVk1FX0lPQ1RMX0lEIF9JTygnTicsIDB4NDApCisjZGVmaW5lIE5WTUVfSU9DVExfQURNSU5fQ01EIF9JT1dSKCdOJywgMHg0MSwgc3RydWN0IG52bWVfYWRtaW5fY21kKQorI2RlZmluZSBOVk1FX0lPQ1RMX1NVQk1JVF9JTyBfSU9XKCdOJywgMHg0Miwgc3RydWN0IG52bWVfdXNlcl9pbykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaAppbmRleCBhZmZjM2Q2Li45NjQ5YjZiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L29wZW52c3dpdGNoLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCkBAIC0yNywyNjQgKzI3LDMxMiBAQAogI2RlZmluZSBPVlNfREFUQVBBVEhfRkFNSUxZICJvdnNfZGF0YXBhdGgiCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPVlNfREFUQVBBVEhfTUNHUk9VUCAib3ZzX2RhdGFwYXRoIgotI2RlZmluZSBPVlNfREFUQVBBVEhfVkVSU0lPTiAweDEKKyNkZWZpbmUgT1ZTX0RBVEFQQVRIX1ZFUlNJT04gMgorI2RlZmluZSBPVlNfRFBfVkVSX0ZFQVRVUkVTIDIKIGVudW0gb3ZzX2RhdGFwYXRoX2NtZCB7Ci0gT1ZTX0RQX0NNRF9VTlNQRUMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE9WU19EUF9DTURfVU5TUEVDLAogIE9WU19EUF9DTURfTkVXLAogIE9WU19EUF9DTURfREVMLAogIE9WU19EUF9DTURfR0VULAotIE9WU19EUF9DTURfU0VUCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE9WU19EUF9DTURfU0VUCiB9OwogZW51bSBvdnNfZGF0YXBhdGhfYXR0ciB7CiAgT1ZTX0RQX0FUVFJfVU5TUEVDLAotIE9WU19EUF9BVFRSX05BTUUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE9WU19EUF9BVFRSX05BTUUsCiAgT1ZTX0RQX0FUVFJfVVBDQUxMX1BJRCwKICBPVlNfRFBfQVRUUl9TVEFUUywKKyBPVlNfRFBfQVRUUl9NRUdBRkxPV19TVEFUUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgT1ZTX0RQX0FUVFJfVVNFUl9GRUFUVVJFUywKICBfX09WU19EUF9BVFRSX01BWAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9WU19EUF9BVFRSX01BWCAoX19PVlNfRFBfQVRUUl9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBvdnNfZHBfc3RhdHMgewogIF9fdTY0IG5faGl0OwogIF9fdTY0IG5fbWlzc2VkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBuX2xvc3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IG5fZmxvd3M7CiB9Owotc3RydWN0IG92c192cG9ydF9zdGF0cyB7CitzdHJ1Y3Qgb3ZzX2RwX21lZ2FmbG93X3N0YXRzIHsKKyBfX3U2NCBuX21hc2tfaGl0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBfX3U2NCByeF9wYWNrZXRzOwotIF9fdTY0IHR4X3BhY2tldHM7Ci0gX191NjQgcnhfYnl0ZXM7Ci0gX191NjQgdHhfYnl0ZXM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIF9fdTY0IHJ4X2Vycm9yczsKLSBfX3U2NCB0eF9lcnJvcnM7Ci0gX191NjQgcnhfZHJvcHBlZDsKLSBfX3U2NCB0eF9kcm9wcGVkOworIF9fdTMyIG5fbWFza3M7CisgX191MzIgcGFkMDsKKyBfX3U2NCBwYWQxOworIF9fdTY0IHBhZDI7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKK3N0cnVjdCBvdnNfdnBvcnRfc3RhdHMgeworIF9fdTY0IHJ4X3BhY2tldHM7CisgX191NjQgdHhfcGFja2V0czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgcnhfYnl0ZXM7CisgX191NjQgdHhfYnl0ZXM7CisgX191NjQgcnhfZXJyb3JzOworIF9fdTY0IHR4X2Vycm9yczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgcnhfZHJvcHBlZDsKKyBfX3U2NCB0eF9kcm9wcGVkOworfTsKKyNkZWZpbmUgT1ZTX0RQX0ZfVU5BTElHTkVEICgxIDw8IDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPVlNQX0xPQ0FMICgoX191MzIpMCkKICNkZWZpbmUgT1ZTX1BBQ0tFVF9GQU1JTFkgIm92c19wYWNrZXQiCiAjZGVmaW5lIE9WU19QQUNLRVRfVkVSU0lPTiAweDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG92c19wYWNrZXRfY21kIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgT1ZTX1BBQ0tFVF9DTURfVU5TUEVDLAogIE9WU19QQUNLRVRfQ01EX01JU1MsCiAgT1ZTX1BBQ0tFVF9DTURfQUNUSU9OLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPVlNfUEFDS0VUX0NNRF9FWEVDVVRFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gb3ZzX3BhY2tldF9hdHRyIHsKICBPVlNfUEFDS0VUX0FUVFJfVU5TUEVDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPVlNfUEFDS0VUX0FUVFJfUEFDS0VULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPVlNfUEFDS0VUX0FUVFJfS0VZLAogIE9WU19QQUNLRVRfQVRUUl9BQ1RJT05TLAogIE9WU19QQUNLRVRfQVRUUl9VU0VSREFUQSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19PVlNfUEFDS0VUX0FUVFJfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgT1ZTX1BBQ0tFVF9BVFRSX01BWCAoX19PVlNfUEFDS0VUX0FUVFJfTUFYIC0gMSkKICNkZWZpbmUgT1ZTX1ZQT1JUX0ZBTUlMWSAib3ZzX3Zwb3J0IgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT1ZTX1ZQT1JUX01DR1JPVVAgIm92c192cG9ydCIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9WU19WUE9SVF9WRVJTSU9OIDB4MQogZW51bSBvdnNfdnBvcnRfY21kIHsKICBPVlNfVlBPUlRfQ01EX1VOU1BFQywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgT1ZTX1ZQT1JUX0NNRF9ORVcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19WUE9SVF9DTURfREVMLAogIE9WU19WUE9SVF9DTURfR0VULAogIE9WU19WUE9SVF9DTURfU0VUCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG92c192cG9ydF90eXBlIHsKICBPVlNfVlBPUlRfVFlQRV9VTlNQRUMsCiAgT1ZTX1ZQT1JUX1RZUEVfTkVUREVWLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPVlNfVlBPUlRfVFlQRV9JTlRFUk5BTCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgT1ZTX1ZQT1JUX1RZUEVfR1JFLAorIE9WU19WUE9SVF9UWVBFX1ZYTEFOLAogIF9fT1ZTX1ZQT1JUX1RZUEVfTUFYCiB9OwotI2RlZmluZSBPVlNfVlBPUlRfVFlQRV9NQVggKF9fT1ZTX1ZQT1JUX1RZUEVfTUFYIC0gMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE9WU19WUE9SVF9UWVBFX01BWCAoX19PVlNfVlBPUlRfVFlQRV9NQVggLSAxKQogZW51bSBvdnNfdnBvcnRfYXR0ciB7CiAgT1ZTX1ZQT1JUX0FUVFJfVU5TUEVDLAogIE9WU19WUE9SVF9BVFRSX1BPUlRfTk8sCi0gT1ZTX1ZQT1JUX0FUVFJfVFlQRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgT1ZTX1ZQT1JUX0FUVFJfVFlQRSwKICBPVlNfVlBPUlRfQVRUUl9OQU1FLAogIE9WU19WUE9SVF9BVFRSX09QVElPTlMsCiAgT1ZTX1ZQT1JUX0FUVFJfVVBDQUxMX1BJRCwKLSBPVlNfVlBPUlRfQVRUUl9TVEFUUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgT1ZTX1ZQT1JUX0FUVFJfU1RBVFMsCiAgX19PVlNfVlBPUlRfQVRUUl9NQVgKIH07CiAjZGVmaW5lIE9WU19WUE9SVF9BVFRSX01BWCAoX19PVlNfVlBPUlRfQVRUUl9NQVggLSAxKQotI2RlZmluZSBPVlNfRkxPV19GQU1JTFkgIm92c19mbG93IgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0geworIE9WU19UVU5ORUxfQVRUUl9VTlNQRUMsCisgT1ZTX1RVTk5FTF9BVFRSX0RTVF9QT1JULAorIF9fT1ZTX1RVTk5FTF9BVFRSX01BWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIE9WU19UVU5ORUxfQVRUUl9NQVggKF9fT1ZTX1RVTk5FTF9BVFRSX01BWCAtIDEpCisjZGVmaW5lIE9WU19GTE9XX0ZBTUlMWSAib3ZzX2Zsb3ciCiAjZGVmaW5lIE9WU19GTE9XX01DR1JPVVAgIm92c19mbG93IgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT1ZTX0ZMT1dfVkVSU0lPTiAweDEKIGVudW0gb3ZzX2Zsb3dfY21kIHsKICBPVlNfRkxPV19DTURfVU5TUEVDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPVlNfRkxPV19DTURfTkVXLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPVlNfRkxPV19DTURfREVMLAogIE9WU19GTE9XX0NNRF9HRVQsCiAgT1ZTX0ZMT1dfQ01EX1NFVAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG92c19mbG93X3N0YXRzIHsKICBfX3U2NCBuX3BhY2tldHM7CiAgX191NjQgbl9ieXRlczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gb3ZzX2tleV9hdHRyIHsKICBPVlNfS0VZX0FUVFJfVU5TUEVDLAogIE9WU19LRVlfQVRUUl9FTkNBUCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgT1ZTX0tFWV9BVFRSX1BSSU9SSVRZLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPVlNfS0VZX0FUVFJfSU5fUE9SVCwKICBPVlNfS0VZX0FUVFJfRVRIRVJORVQsCiAgT1ZTX0tFWV9BVFRSX1ZMQU4sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19LRVlfQVRUUl9FVEhFUlRZUEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19LRVlfQVRUUl9JUFY0LAogIE9WU19LRVlfQVRUUl9JUFY2LAogIE9WU19LRVlfQVRUUl9UQ1AsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19LRVlfQVRUUl9VRFAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19LRVlfQVRUUl9JQ01QLAogIE9WU19LRVlfQVRUUl9JQ01QVjYsCiAgT1ZTX0tFWV9BVFRSX0FSUCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgT1ZTX0tFWV9BVFRSX05ELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPVlNfS0VZX0FUVFJfU0tCX01BUkssCisgT1ZTX0tFWV9BVFRSX1RVTk5FTCwKKyBPVlNfS0VZX0FUVFJfU0NUUCwKKyBPVlNfS0VZX0FUVFJfVENQX0ZMQUdTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX09WU19LRVlfQVRUUl9NQVgKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPVlNfS0VZX0FUVFJfTUFYIChfX09WU19LRVlfQVRUUl9NQVggLSAxKQorZW51bSBvdnNfdHVubmVsX2tleV9hdHRyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgT1ZTX1RVTk5FTF9LRVlfQVRUUl9JRCwKKyBPVlNfVFVOTkVMX0tFWV9BVFRSX0lQVjRfU1JDLAorIE9WU19UVU5ORUxfS0VZX0FUVFJfSVBWNF9EU1QsCisgT1ZTX1RVTk5FTF9LRVlfQVRUUl9UT1MsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE9WU19UVU5ORUxfS0VZX0FUVFJfVFRMLAorIE9WU19UVU5ORUxfS0VZX0FUVFJfRE9OVF9GUkFHTUVOVCwKKyBPVlNfVFVOTkVMX0tFWV9BVFRSX0NTVU0sCisgX19PVlNfVFVOTkVMX0tFWV9BVFRSX01BWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIE9WU19UVU5ORUxfS0VZX0FUVFJfTUFYIChfX09WU19UVU5ORUxfS0VZX0FUVFJfTUFYIC0gMSkKIGVudW0gb3ZzX2ZyYWdfdHlwZSB7CiAgT1ZTX0ZSQUdfVFlQRV9OT05FLAotIE9WU19GUkFHX1RZUEVfRklSU1QsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE9WU19GUkFHX1RZUEVfRklSU1QsCiAgT1ZTX0ZSQUdfVFlQRV9MQVRFUiwKICBfX09WU19GUkFHX1RZUEVfTUFYCiB9OwotI2RlZmluZSBPVlNfRlJBR19UWVBFX01BWCAoX19PVlNfRlJBR19UWVBFX01BWCAtIDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBPVlNfRlJBR19UWVBFX01BWCAoX19PVlNfRlJBR19UWVBFX01BWCAtIDEpCiBzdHJ1Y3Qgb3ZzX2tleV9ldGhlcm5ldCB7CiAgX191OCBldGhfc3JjW0VUSF9BTEVOXTsKICBfX3U4IGV0aF9kc3RbRVRIX0FMRU5dOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IG92c19rZXlfaXB2NCB7CiAgX19iZTMyIGlwdjRfc3JjOwogIF9fYmUzMiBpcHY0X2RzdDsKLSBfX3U4IGlwdjRfcHJvdG87CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggaXB2NF9wcm90bzsKICBfX3U4IGlwdjRfdG9zOwogIF9fdTggaXB2NF90dGw7CiAgX191OCBpcHY0X2ZyYWc7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3Qgb3ZzX2tleV9pcHY2IHsKICBfX2JlMzIgaXB2Nl9zcmNbNF07CiAgX19iZTMyIGlwdjZfZHN0WzRdOwotIF9fYmUzMiBpcHY2X2xhYmVsOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMzIgaXB2Nl9sYWJlbDsKICBfX3U4IGlwdjZfcHJvdG87CiAgX191OCBpcHY2X3RjbGFzczsKICBfX3U4IGlwdjZfaGxpbWl0OwotIF9fdTggaXB2Nl9mcmFnOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGlwdjZfZnJhZzsKIH07CiBzdHJ1Y3Qgb3ZzX2tleV90Y3AgewogIF9fYmUxNiB0Y3Bfc3JjOwotIF9fYmUxNiB0Y3BfZHN0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMTYgdGNwX2RzdDsKIH07CiBzdHJ1Y3Qgb3ZzX2tleV91ZHAgewogIF9fYmUxNiB1ZHBfc3JjOwotIF9fYmUxNiB1ZHBfZHN0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMTYgdWRwX2RzdDsKK307CitzdHJ1Y3Qgb3ZzX2tleV9zY3RwIHsKKyBfX2JlMTYgc2N0cF9zcmM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmUxNiBzY3RwX2RzdDsKIH07CiBzdHJ1Y3Qgb3ZzX2tleV9pY21wIHsKICBfX3U4IGljbXBfdHlwZTsKLSBfX3U4IGljbXBfY29kZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBpY21wX2NvZGU7CiB9Owogc3RydWN0IG92c19rZXlfaWNtcHY2IHsKICBfX3U4IGljbXB2Nl90eXBlOwotIF9fdTggaWNtcHY2X2NvZGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggaWNtcHY2X2NvZGU7CiB9Owogc3RydWN0IG92c19rZXlfYXJwIHsKICBfX2JlMzIgYXJwX3NpcDsKLSBfX2JlMzIgYXJwX3RpcDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTMyIGFycF90aXA7CiAgX19iZTE2IGFycF9vcDsKICBfX3U4IGFycF9zaGFbRVRIX0FMRU5dOwogIF9fdTggYXJwX3RoYVtFVEhfQUxFTl07Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3Qgb3ZzX2tleV9uZCB7CiAgX191MzIgbmRfdGFyZ2V0WzRdOwogIF9fdTggbmRfc2xsW0VUSF9BTEVOXTsKLSBfX3U4IG5kX3RsbFtFVEhfQUxFTl07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggbmRfdGxsW0VUSF9BTEVOXTsKIH07CiBlbnVtIG92c19mbG93X2F0dHIgewogIE9WU19GTE9XX0FUVFJfVU5TUEVDLAotIE9WU19GTE9XX0FUVFJfS0VZLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBPVlNfRkxPV19BVFRSX0tFWSwKICBPVlNfRkxPV19BVFRSX0FDVElPTlMsCiAgT1ZTX0ZMT1dfQVRUUl9TVEFUUywKICBPVlNfRkxPV19BVFRSX1RDUF9GTEFHUywKLSBPVlNfRkxPV19BVFRSX1VTRUQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE9WU19GTE9XX0FUVFJfVVNFRCwKICBPVlNfRkxPV19BVFRSX0NMRUFSLAorIE9WU19GTE9XX0FUVFJfTUFTSywKICBfX09WU19GTE9XX0FUVFJfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgT1ZTX0ZMT1dfQVRUUl9NQVggKF9fT1ZTX0ZMT1dfQVRUUl9NQVggLSAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gb3ZzX3NhbXBsZV9hdHRyIHsKICBPVlNfU0FNUExFX0FUVFJfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPVlNfU0FNUExFX0FUVFJfUFJPQkFCSUxJVFksCiAgT1ZTX1NBTVBMRV9BVFRSX0FDVElPTlMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fT1ZTX1NBTVBMRV9BVFRSX01BWCwKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPVlNfU0FNUExFX0FUVFJfTUFYIChfX09WU19TQU1QTEVfQVRUUl9NQVggLSAxKQogZW51bSBvdnNfdXNlcnNwYWNlX2F0dHIgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPVlNfVVNFUlNQQUNFX0FUVFJfVU5TUEVDLAogIE9WU19VU0VSU1BBQ0VfQVRUUl9QSUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19VU0VSU1BBQ0VfQVRUUl9VU0VSREFUQSwKICBfX09WU19VU0VSU1BBQ0VfQVRUUl9NQVgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBPVlNfVVNFUlNQQUNFX0FUVFJfTUFYIChfX09WU19VU0VSU1BBQ0VfQVRUUl9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBvdnNfYWN0aW9uX3B1c2hfdmxhbiB7CiAgX19iZTE2IHZsYW5fdHBpZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTE2IHZsYW5fdGNpOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG92c19hY3Rpb25fYXR0ciB7CiAgT1ZTX0FDVElPTl9BVFRSX1VOU1BFQywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgT1ZTX0FDVElPTl9BVFRSX09VVFBVVCwKICBPVlNfQUNUSU9OX0FUVFJfVVNFUlNQQUNFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPVlNfQUNUSU9OX0FUVFJfU0VULAogIE9WU19BQ1RJT05fQVRUUl9QVVNIX1ZMQU4sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19BQ1RJT05fQVRUUl9QT1BfVkxBTiwKICBPVlNfQUNUSU9OX0FUVFJfU0FNUExFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX09WU19BQ1RJT05fQVRUUl9NQVgKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPVlNfQUNUSU9OX0FUVFJfTUFYIChfX09WU19BQ1RJT05fQVRUUl9NQVggLSAxKQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wY2lfcmVncy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wY2lfcmVncy5oCmluZGV4IGE0MDRjOTcuLmQyMGY1MDAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvcGNpX3JlZ3MuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BjaV9yZWdzLmgKQEAgLTMyNiwxOTQgKzMyNiwxOTkgQEAKICNkZWZpbmUgUENJX01TSVhfUEJBX0JJUiAweDAwMDAwMDA3CiAjZGVmaW5lIFBDSV9NU0lYX1BCQV9PRkZTRVQgMHhmZmZmZmZmOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUENJX01TSVhfRkxBR1NfQklSTUFTSyAoNyA8PCAwKQogI2RlZmluZSBQQ0lfQ0FQX01TSVhfU0laRU9GIDEyCiAjZGVmaW5lIFBDSV9NU0lYX0VOVFJZX1NJWkUgMTYKICNkZWZpbmUgUENJX01TSVhfRU5UUllfTE9XRVJfQUREUiAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfTVNJWF9FTlRSWV9VUFBFUl9BRERSIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9NU0lYX0VOVFJZX0RBVEEgOAogI2RlZmluZSBQQ0lfTVNJWF9FTlRSWV9WRUNUT1JfQ1RSTCAxMgogI2RlZmluZSBQQ0lfTVNJWF9FTlRSWV9DVFJMX01BU0tCSVQgMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0NIU1dQX0NTUiAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0hTV1BfREhBIDB4MDEKICNkZWZpbmUgUENJX0NIU1dQX0VJTSAweDAyCiAjZGVmaW5lIFBDSV9DSFNXUF9QSUUgMHgwNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0NIU1dQX0xPTyAweDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0hTV1BfUEkgMHgzMAogI2RlZmluZSBQQ0lfQ0hTV1BfRVhUIDB4NDAKICNkZWZpbmUgUENJX0NIU1dQX0lOUyAweDgwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQUZfTEVOR1RIIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9BRl9DQVAgMwogI2RlZmluZSBQQ0lfQUZfQ0FQX1RQIDB4MDEKICNkZWZpbmUgUENJX0FGX0NBUF9GTFIgMHgwMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0FGX0NUUkwgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0FGX0NUUkxfRkxSIDB4MDEKICNkZWZpbmUgUENJX0FGX1NUQVRVUyA1CiAjZGVmaW5lIFBDSV9BRl9TVEFUVVNfVFAgMHgwMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0NBUF9BRl9TSVpFT0YgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1hfQ01EIDIKICNkZWZpbmUgUENJX1hfQ01EX0RQRVJSX0UgMHgwMDAxCiAjZGVmaW5lIFBDSV9YX0NNRF9FUk8gMHgwMDAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfWF9DTURfUkVBRF81MTIgMHgwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfWF9DTURfUkVBRF8xSyAweDAwMDQKICNkZWZpbmUgUENJX1hfQ01EX1JFQURfMksgMHgwMDA4CiAjZGVmaW5lIFBDSV9YX0NNRF9SRUFEXzRLIDB4MDAwYwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1hfQ01EX01BWF9SRUFEIDB4MDAwYworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1hfQ01EX1NQTElUXzEgMHgwMDAwCiAjZGVmaW5lIFBDSV9YX0NNRF9TUExJVF8yIDB4MDAxMAogI2RlZmluZSBQQ0lfWF9DTURfU1BMSVRfMyAweDAwMjAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9YX0NNRF9TUExJVF80IDB4MDAzMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1hfQ01EX1NQTElUXzggMHgwMDQwCiAjZGVmaW5lIFBDSV9YX0NNRF9TUExJVF8xMiAweDAwNTAKICNkZWZpbmUgUENJX1hfQ01EX1NQTElUXzE2IDB4MDA2MAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1hfQ01EX1NQTElUXzMyIDB4MDA3MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1hfQ01EX01BWF9TUExJVCAweDAwNzAKICNkZWZpbmUgUENJX1hfQ01EX1ZFUlNJT04oeCkgKCgoeCkgPj4gMTIpICYgMykKICNkZWZpbmUgUENJX1hfU1RBVFVTIDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9YX1NUQVRVU19ERVZGTiAweDAwMDAwMGZmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfWF9TVEFUVVNfQlVTIDB4MDAwMGZmMDAKICNkZWZpbmUgUENJX1hfU1RBVFVTXzY0QklUIDB4MDAwMTAwMDAKICNkZWZpbmUgUENJX1hfU1RBVFVTXzEzM01IWiAweDAwMDIwMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfWF9TVEFUVVNfU1BMX0RJU0MgMHgwMDA0MDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1hfU1RBVFVTX1VOWF9TUEwgMHgwMDA4MDAwMAogI2RlZmluZSBQQ0lfWF9TVEFUVVNfQ09NUExFWCAweDAwMTAwMDAwCiAjZGVmaW5lIFBDSV9YX1NUQVRVU19NQVhfUkVBRCAweDAwNjAwMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfWF9TVEFUVVNfTUFYX1NQTElUIDB4MDM4MDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9YX1NUQVRVU19NQVhfQ1VNIDB4MWMwMDAwMDAKICNkZWZpbmUgUENJX1hfU1RBVFVTX1NQTF9FUlIgMHgyMDAwMDAwMAogI2RlZmluZSBQQ0lfWF9TVEFUVVNfMjY2TUhaIDB4NDAwMDAwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9YX1NUQVRVU181MzNNSFogMHg4MDAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1hfRUNDX0NTUiA4CiAjZGVmaW5lIFBDSV9DQVBfUENJWF9TSVpFT0ZfVjAgOAogI2RlZmluZSBQQ0lfQ0FQX1BDSVhfU0laRU9GX1YxIDI0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0FQX1BDSVhfU0laRU9GX1YyIFBDSV9DQVBfUENJWF9TSVpFT0ZfVjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9YX0JSSURHRV9TU1RBVFVTIDIKICNkZWZpbmUgUENJX1hfU1NUQVRVU182NEJJVCAweDAwMDEKICNkZWZpbmUgUENJX1hfU1NUQVRVU18xMzNNSFogMHgwMDAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfWF9TU1RBVFVTX0ZSRVEgMHgwM2MwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfWF9TU1RBVFVTX1ZFUlMgMHgzMDAwCiAjZGVmaW5lIFBDSV9YX1NTVEFUVVNfVjEgMHgxMDAwCiAjZGVmaW5lIFBDSV9YX1NTVEFUVVNfVjIgMHgyMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfWF9TU1RBVFVTXzI2Nk1IWiAweDQwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9YX1NTVEFUVVNfNTMzTUhaIDB4ODAwMAogI2RlZmluZSBQQ0lfWF9CUklER0VfU1RBVFVTIDQKICNkZWZpbmUgUENJX1NTVklEX1ZFTkRPUl9JRCA0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfU1NWSURfREVWSUNFX0lEIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfRkxBR1MgMgogI2RlZmluZSBQQ0lfRVhQX0ZMQUdTX1ZFUlMgMHgwMDBmCiAjZGVmaW5lIFBDSV9FWFBfRkxBR1NfVFlQRSAweDAwZjAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfVFlQRV9FTkRQT0lOVCAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfVFlQRV9MRUdfRU5EIDB4MQogI2RlZmluZSBQQ0lfRVhQX1RZUEVfUk9PVF9QT1JUIDB4NAogI2RlZmluZSBQQ0lfRVhQX1RZUEVfVVBTVFJFQU0gMHg1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX1RZUEVfRE9XTlNUUkVBTSAweDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfVFlQRV9QQ0lfQlJJREdFIDB4NwogI2RlZmluZSBQQ0lfRVhQX1RZUEVfUENJRV9CUklER0UgMHg4CiAjZGVmaW5lIFBDSV9FWFBfVFlQRV9SQ19FTkQgMHg5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX1RZUEVfUkNfRUMgMHhhCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX0ZMQUdTX1NMT1QgMHgwMTAwCiAjZGVmaW5lIFBDSV9FWFBfRkxBR1NfSVJRIDB4M2UwMAogI2RlZmluZSBQQ0lfRVhQX0RFVkNBUCA0CisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX1BBWUxPQUQgMHgwMDAwMDAwNwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUENJX0VYUF9ERVZDQVBfUEFZTE9BRCAweDA3Ci0jZGVmaW5lIFBDSV9FWFBfREVWQ0FQX1BIQU5UT00gMHgxOAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9FWFRfVEFHIDB4MjAKLSNkZWZpbmUgUENJX0VYUF9ERVZDQVBfTDBTIDB4MWMwCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX1BIQU5UT00gMHgwMDAwMDAxOAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9FWFRfVEFHIDB4MDAwMDAwMjAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfTDBTIDB4MDAwMDAxYzAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfTDEgMHgwMDAwMGUwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUENJX0VYUF9ERVZDQVBfTDEgMHhlMDAKLSNkZWZpbmUgUENJX0VYUF9ERVZDQVBfQVROX0JVVCAweDEwMDAKLSNkZWZpbmUgUENJX0VYUF9ERVZDQVBfQVROX0lORCAweDIwMDAKLSNkZWZpbmUgUENJX0VYUF9ERVZDQVBfUFdSX0lORCAweDQwMDAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfQVROX0JVVCAweDAwMDAxMDAwCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX0FUTl9JTkQgMHgwMDAwMjAwMAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfSU5EIDB4MDAwMDQwMDAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfUkJFUiAweDAwMDA4MDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9SQkVSIDB4ODAwMAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfVkFMIDB4M2ZjMDAwMAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfU0NMIDB4YzAwMDAwMAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfVkFMIDB4MDNmYzAwMDAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfUFdSX1NDTCAweDBjMDAwMDAwCiAjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX0ZMUiAweDEwMDAwMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX0RFVkNUTCA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9DRVJFIDB4MDAwMQogI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9ORkVSRSAweDAwMDIKICNkZWZpbmUgUENJX0VYUF9ERVZDVExfRkVSRSAweDAwMDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX1VSUkUgMHgwMDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9SRUxBWF9FTiAweDAwMTAKICNkZWZpbmUgUENJX0VYUF9ERVZDVExfUEFZTE9BRCAweDAwZTAKICNkZWZpbmUgUENJX0VYUF9ERVZDVExfRVhUX1RBRyAweDAxMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX1BIQU5UT00gMHgwMjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9BVVhfUE1FIDB4MDQwMAogI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9OT1NOT09QX0VOIDB4MDgwMAogI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9SRUFEUlEgMHg3MDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9CQ1JfRkxSIDB4ODAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0VYUF9ERVZTVEEgMTAKLSNkZWZpbmUgUENJX0VYUF9ERVZTVEFfQ0VEIDB4MDEKLSNkZWZpbmUgUENJX0VYUF9ERVZTVEFfTkZFRCAweDAyCisjZGVmaW5lIFBDSV9FWFBfREVWU1RBX0NFRCAweDAwMDEKKyNkZWZpbmUgUENJX0VYUF9ERVZTVEFfTkZFRCAweDAwMDIKKyNkZWZpbmUgUENJX0VYUF9ERVZTVEFfRkVEIDB4MDAwNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUENJX0VYUF9ERVZTVEFfRkVEIDB4MDQKLSNkZWZpbmUgUENJX0VYUF9ERVZTVEFfVVJEIDB4MDgKLSNkZWZpbmUgUENJX0VYUF9ERVZTVEFfQVVYUEQgMHgxMAotI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9UUlBORCAweDIwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9VUkQgMHgwMDA4CisjZGVmaW5lIFBDSV9FWFBfREVWU1RBX0FVWFBEIDB4MDAxMAorI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9UUlBORCAweDAwMjAKICNkZWZpbmUgUENJX0VYUF9MTktDQVAgMTIKLSNkZWZpbmUgUENJX0VYUF9MTktDQVBfU0xTIDB4MDAwMDAwMGYKLSNkZWZpbmUgUENJX0VYUF9MTktDQVBfU0xTXzJfNUdCIDB4MQotI2RlZmluZSBQQ0lfRVhQX0xOS0NBUF9TTFNfNV8wR0IgMHgyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfRVhQX0xOS0NBUF9TTFMgMHgwMDAwMDAwZgorI2RlZmluZSBQQ0lfRVhQX0xOS0NBUF9TTFNfMl81R0IgMHgwMDAwMDAwMQorI2RlZmluZSBQQ0lfRVhQX0xOS0NBUF9TTFNfNV8wR0IgMHgwMDAwMDAwMgogI2RlZmluZSBQQ0lfRVhQX0xOS0NBUF9NTFcgMHgwMDAwMDNmMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0VYUF9MTktDQVBfQVNQTVMgMHgwMDAwMGMwMAogI2RlZmluZSBQQ0lfRVhQX0xOS0NBUF9MMFNFTCAweDAwMDA3MDAwCiAjZGVmaW5lIFBDSV9FWFBfTE5LQ0FQX0wxRUwgMHgwMDAzODAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0VYUF9MTktDQVBfQ0xLUE0gMHgwMDA0MDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0VYUF9MTktDQVBfU0RFUkMgMHgwMDA4MDAwMAogI2RlZmluZSBQQ0lfRVhQX0xOS0NBUF9ETExMQVJDIDB4MDAxMDAwMDAKICNkZWZpbmUgUENJX0VYUF9MTktDQVBfTEJOQyAweDAwMjAwMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX0xOS0NBUF9QTiAweGZmMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX0xOS0NUTCAxNgogI2RlZmluZSBQQ0lfRVhQX0xOS0NUTF9BU1BNQyAweDAwMDMKLSNkZWZpbmUgUENJX0VYUF9MTktDVExfQVNQTV9MMFMgMHgwMQorI2RlZmluZSBQQ0lfRVhQX0xOS0NUTF9BU1BNX0wwUyAweDAwMDEKKyNkZWZpbmUgUENJX0VYUF9MTktDVExfQVNQTV9MMSAweDAwMDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBDSV9FWFBfTE5LQ1RMX0FTUE1fTDEgMHgwMgogI2RlZmluZSBQQ0lfRVhQX0xOS0NUTF9SQ0IgMHgwMDA4CiAjZGVmaW5lIFBDSV9FWFBfTE5LQ1RMX0xEIDB4MDAxMAogI2RlZmluZSBQQ0lfRVhQX0xOS0NUTF9STCAweDAwMjAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfTE5LQ1RMX0NDQyAweDAwNDAKLSNkZWZpbmUgUENJX0VYUF9MTktDVExfRVMgMHgwMDgwCi0jZGVmaW5lIFBDSV9FWFBfTE5LQ1RMX0NMS1JFUV9FTiAweDEwMAotI2RlZmluZSBQQ0lfRVhQX0xOS0NUTF9IQVdEIDB4MDIwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VYUF9MTktDVExfRVMgMHgwMDgwCisjZGVmaW5lIFBDSV9FWFBfTE5LQ1RMX0NMS1JFUV9FTiAweDAxMDAKKyNkZWZpbmUgUENJX0VYUF9MTktDVExfSEFXRCAweDAyMDAKICNkZWZpbmUgUENJX0VYUF9MTktDVExfTEJNSUUgMHgwNDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX0xOS0NUTF9MQUJJRSAweDA4MDAKICNkZWZpbmUgUENJX0VYUF9MTktTVEEgMTgKICNkZWZpbmUgUENJX0VYUF9MTktTVEFfQ0xTIDB4MDAwZgorI2RlZmluZSBQQ0lfRVhQX0xOS1NUQV9DTFNfMl81R0IgMHgwMDAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQQ0lfRVhQX0xOS1NUQV9DTFNfMl81R0IgMHgwMQotI2RlZmluZSBQQ0lfRVhQX0xOS1NUQV9DTFNfNV8wR0IgMHgwMgorI2RlZmluZSBQQ0lfRVhQX0xOS1NUQV9DTFNfNV8wR0IgMHgwMDAyCisjZGVmaW5lIFBDSV9FWFBfTE5LU1RBX0NMU184XzBHQiAweDAwMDMKICNkZWZpbmUgUENJX0VYUF9MTktTVEFfTkxXIDB4MDNmMAorI2RlZmluZSBQQ0lfRVhQX0xOS1NUQV9OTFdfWDEgMHgwMDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfRVhQX0xOS1NUQV9OTFdfWDIgMHgwMDIwCisjZGVmaW5lIFBDSV9FWFBfTE5LU1RBX05MV19YNCAweDAwNDAKKyNkZWZpbmUgUENJX0VYUF9MTktTVEFfTkxXX1g4IDB4MDA4MAogI2RlZmluZSBQQ0lfRVhQX0xOS1NUQV9OTFdfU0hJRlQgNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0VYUF9MTktTVEFfTFQgMHgwODAwCkBAIC01NDksOSArNTU0LDE5IEBACiAjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMX0NDSUUgMHgwMDEwCiAjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMX0hQSUUgMHgwMDIwCiAjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMX0FJQyAweDAwYzAKLSNkZWZpbmUgUENJX0VYUF9TTFRDVExfUElDIDB4MDMwMAorI2RlZmluZSBQQ0lfRVhQX1NMVENUTF9BVFROX0lORF9PTiAweDAwNDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMX0FUVE5fSU5EX0JMSU5LIDB4MDA4MAorI2RlZmluZSBQQ0lfRVhQX1NMVENUTF9BVFROX0lORF9PRkYgMHgwMGMwCisjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMX1BJQyAweDAzMDAKKyNkZWZpbmUgUENJX0VYUF9TTFRDVExfUFdSX0lORF9PTiAweDAxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMX1BXUl9JTkRfQkxJTksgMHgwMjAwCisjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMX1BXUl9JTkRfT0ZGIDB4MDMwMAogI2RlZmluZSBQQ0lfRVhQX1NMVENUTF9QQ0MgMHgwNDAwCisjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMX1BXUl9PTiAweDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMX1BXUl9PRkYgMHgwNDAwCiAjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMX0VJQyAweDA4MDAKICNkZWZpbmUgUENJX0VYUF9TTFRDVExfRExMU0NFIDB4MTAwMAogI2RlZmluZSBQQ0lfRVhQX1NMVFNUQSAyNgpAQCAtNTY4LDQ2ICs1ODMsNTEgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfU0xUU1RBX0RMTFNDIDB4MDEwMAogI2RlZmluZSBQQ0lfRVhQX1JUQ1RMIDI4Ci0jZGVmaW5lIFBDSV9FWFBfUlRDVExfU0VDRUUgMHgwMQotI2RlZmluZSBQQ0lfRVhQX1JUQ1RMX1NFTkZFRSAweDAyCisjZGVmaW5lIFBDSV9FWFBfUlRDVExfU0VDRUUgMHgwMDAxCisjZGVmaW5lIFBDSV9FWFBfUlRDVExfU0VORkVFIDB4MDAwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUENJX0VYUF9SVENUTF9TRUZFRSAweDA0Ci0jZGVmaW5lIFBDSV9FWFBfUlRDVExfUE1FSUUgMHgwOAotI2RlZmluZSBQQ0lfRVhQX1JUQ1RMX0NSU1NWRSAweDEwCisjZGVmaW5lIFBDSV9FWFBfUlRDVExfU0VGRUUgMHgwMDA0CisjZGVmaW5lIFBDSV9FWFBfUlRDVExfUE1FSUUgMHgwMDA4CisjZGVmaW5lIFBDSV9FWFBfUlRDVExfQ1JTU1ZFIDB4MDAxMAogI2RlZmluZSBQQ0lfRVhQX1JUQ0FQIDMwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX1JUU1RBIDMyCi0jZGVmaW5lIFBDSV9FWFBfUlRTVEFfUE1FIDB4MTAwMDAKLSNkZWZpbmUgUENJX0VYUF9SVFNUQV9QRU5ESU5HIDB4MjAwMDAKKyNkZWZpbmUgUENJX0VYUF9SVFNUQV9QTUUgMHgwMDAxMDAwMAorI2RlZmluZSBQQ0lfRVhQX1JUU1RBX1BFTkRJTkcgMHgwMDAyMDAwMAogI2RlZmluZSBQQ0lfRVhQX0RFVkNBUDIgMzYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBDSV9FWFBfREVWQ0FQMl9BUkkgMHgyMAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUDJfTFRSIDB4ODAwCi0jZGVmaW5lIFBDSV9FWFBfT0JGRl9NQVNLIDB4YzAwMDAKLSNkZWZpbmUgUENJX0VYUF9PQkZGX01TRyAweDQwMDAwCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQMl9BUkkgMHgwMDAwMDAyMAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUDJfTFRSIDB4MDAwMDA4MDAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVAyX09CRkZfTUFTSyAweDAwMGMwMDAwCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQMl9PQkZGX01TRyAweDAwMDQwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQQ0lfRVhQX09CRkZfV0FLRSAweDgwMDAwCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQMl9PQkZGX1dBS0UgMHgwMDA4MDAwMAogI2RlZmluZSBQQ0lfRVhQX0RFVkNUTDIgNDAKLSNkZWZpbmUgUENJX0VYUF9ERVZDVEwyX0FSSSAweDIwCi0jZGVmaW5lIFBDSV9FWFBfSURPX1JFUV9FTiAweDEwMAorI2RlZmluZSBQQ0lfRVhQX0RFVkNUTDJfQ09NUF9USU1FT1VUIDB4MDAwZgorI2RlZmluZSBQQ0lfRVhQX0RFVkNUTDJfQVJJIDB4MDAyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUENJX0VYUF9JRE9fQ01QX0VOIDB4MjAwCi0jZGVmaW5lIFBDSV9FWFBfTFRSX0VOIDB4NDAwCi0jZGVmaW5lIFBDSV9FWFBfT0JGRl9NU0dBX0VOIDB4MjAwMAotI2RlZmluZSBQQ0lfRVhQX09CRkZfTVNHQl9FTiAweDQwMDAKKyNkZWZpbmUgUENJX0VYUF9ERVZDVEwyX0lET19SRVFfRU4gMHgwMTAwCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMMl9JRE9fQ01QX0VOIDB4MDIwMAorI2RlZmluZSBQQ0lfRVhQX0RFVkNUTDJfTFRSX0VOIDB4MDQwMAorI2RlZmluZSBQQ0lfRVhQX0RFVkNUTDJfT0JGRl9NU0dBX0VOIDB4MjAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUENJX0VYUF9PQkZGX1dBS0VfRU4gMHg2MDAwCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMMl9PQkZGX01TR0JfRU4gMHg0MDAwCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMMl9PQkZGX1dBS0VfRU4gMHg2MDAwCisjZGVmaW5lIFBDSV9FWFBfREVWU1RBMiA0MgogI2RlZmluZSBQQ0lfQ0FQX0VYUF9FTkRQT0lOVF9TSVpFT0ZfVjIgNDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfTE5LQ0FQMiA0NAotI2RlZmluZSBQQ0lfRVhQX0xOS0NBUDJfU0xTXzJfNUdCIDB4MDIKKyNkZWZpbmUgUENJX0VYUF9MTktDQVAyX1NMU18yXzVHQiAweDAwMDAwMDAyCisjZGVmaW5lIFBDSV9FWFBfTE5LQ0FQMl9TTFNfNV8wR0IgMHgwMDAwMDAwNAorI2RlZmluZSBQQ0lfRVhQX0xOS0NBUDJfU0xTXzhfMEdCIDB4MDAwMDAwMDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBDSV9FWFBfTE5LQ0FQMl9TTFNfNV8wR0IgMHgwNAotI2RlZmluZSBQQ0lfRVhQX0xOS0NBUDJfU0xTXzhfMEdCIDB4MDgKLSNkZWZpbmUgUENJX0VYUF9MTktDQVAyX0NST1NTTElOSyAweDEwMAorI2RlZmluZSBQQ0lfRVhQX0xOS0NBUDJfQ1JPU1NMSU5LIDB4MDAwMDAxMDAKICNkZWZpbmUgUENJX0VYUF9MTktDVEwyIDQ4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX0xOS1NUQTIgNTAKKyNkZWZpbmUgUENJX0VYUF9TTFRDQVAyIDUyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX1NMVENUTDIgNTYKKyNkZWZpbmUgUENJX0VYUF9TTFRTVEEyIDU4CiAjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEKGhlYWRlcikgKGhlYWRlciAmIDB4MDAwMGZmZmYpCiAjZGVmaW5lIFBDSV9FWFRfQ0FQX1ZFUihoZWFkZXIpICgoaGVhZGVyID4+IDE2KSAmIDB4ZikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC03MTIsMTk4ICs3MzIsMjE5IEBACiAjZGVmaW5lIFBDSV9FUlJfUk9PVF9GQVRBTF9SQ1YgMHgwMDAwMDA0MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0VSUl9ST09UX0VSUl9TUkMgNTIKLSNkZWZpbmUgUENJX1ZDX1BPUlRfUkVHMSA0Ci0jZGVmaW5lIFBDSV9WQ19SRUcxX0VWQ0MgMHg3Ci0jZGVmaW5lIFBDSV9WQ19QT1JUX1JFRzIgOAorI2RlZmluZSBQQ0lfVkNfUE9SVF9DQVAxIDQKKyNkZWZpbmUgUENJX1ZDX0NBUDFfRVZDQyAweDAwMDAwMDA3CisjZGVmaW5lIFBDSV9WQ19DQVAxX0xQRVZDQyAweDAwMDAwMDcwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQQ0lfVkNfUkVHMl8zMl9QSEFTRSAweDIKLSNkZWZpbmUgUENJX1ZDX1JFRzJfNjRfUEhBU0UgMHg0Ci0jZGVmaW5lIFBDSV9WQ19SRUcyXzEyOF9QSEFTRSAweDgKKyNkZWZpbmUgUENJX1ZDX0NBUDFfQVJCX1NJWkUgMHgwMDAwMGMwMAorI2RlZmluZSBQQ0lfVkNfUE9SVF9DQVAyIDgKKyNkZWZpbmUgUENJX1ZDX0NBUDJfMzJfUEhBU0UgMHgwMDAwMDAwMgorI2RlZmluZSBQQ0lfVkNfQ0FQMl82NF9QSEFTRSAweDAwMDAwMDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfVkNfQ0FQMl8xMjhfUEhBU0UgMHgwMDAwMDAwOAorI2RlZmluZSBQQ0lfVkNfQ0FQMl9BUkJfT0ZGIDB4ZmYwMDAwMDAKICNkZWZpbmUgUENJX1ZDX1BPUlRfQ1RSTCAxMgorI2RlZmluZSBQQ0lfVkNfUE9SVF9DVFJMX0xPQURfVEFCTEUgMHgwMDAwMDAwMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZDX1BPUlRfU1RBVFVTIDE0CisjZGVmaW5lIFBDSV9WQ19QT1JUX1NUQVRVU19UQUJMRSAweDAwMDAwMDAxCiAjZGVmaW5lIFBDSV9WQ19SRVNfQ0FQIDE2Ci0jZGVmaW5lIFBDSV9WQ19SRVNfQ1RSTCAyMAotI2RlZmluZSBQQ0lfVkNfUkVTX1NUQVRVUyAyNgorI2RlZmluZSBQQ0lfVkNfUkVTX0NBUF8zMl9QSEFTRSAweDAwMDAwMDAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfVkNfUkVTX0NBUF82NF9QSEFTRSAweDAwMDAwMDA0CisjZGVmaW5lIFBDSV9WQ19SRVNfQ0FQXzEyOF9QSEFTRSAweDAwMDAwMDA4CisjZGVmaW5lIFBDSV9WQ19SRVNfQ0FQXzEyOF9QSEFTRV9UQiAweDAwMDAwMDEwCisjZGVmaW5lIFBDSV9WQ19SRVNfQ0FQXzI1Nl9QSEFTRSAweDAwMDAwMDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfVkNfUkVTX0NBUF9BUkJfT0ZGIDB4ZmYwMDAwMDAKKyNkZWZpbmUgUENJX1ZDX1JFU19DVFJMIDIwCisjZGVmaW5lIFBDSV9WQ19SRVNfQ1RSTF9MT0FEX1RBQkxFIDB4MDAwMTAwMDAKKyNkZWZpbmUgUENJX1ZDX1JFU19DVFJMX0FSQl9TRUxFQ1QgMHgwMDBlMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1ZDX1JFU19DVFJMX0lEIDB4MDcwMDAwMDAKKyNkZWZpbmUgUENJX1ZDX1JFU19DVFJMX0VOQUJMRSAweDgwMDAwMDAwCisjZGVmaW5lIFBDSV9WQ19SRVNfU1RBVFVTIDI2CisjZGVmaW5lIFBDSV9WQ19SRVNfU1RBVFVTX1RBQkxFIDB4MDAwMDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9WQ19SRVNfU1RBVFVTX05FR08gMHgwMDAwMDAwMgogI2RlZmluZSBQQ0lfQ0FQX1ZDX0JBU0VfU0laRU9GIDB4MTAKICNkZWZpbmUgUENJX0NBUF9WQ19QRVJfVkNfU0laRU9GIDB4MEMKICNkZWZpbmUgUENJX1BXUl9EU1IgNAotI2RlZmluZSBQQ0lfUFdSX0RBVEEgOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1BXUl9EQVRBIDgKICNkZWZpbmUgUENJX1BXUl9EQVRBX0JBU0UoeCkgKCh4KSAmIDB4ZmYpCiAjZGVmaW5lIFBDSV9QV1JfREFUQV9TQ0FMRSh4KSAoKCh4KSA+PiA4KSAmIDMpCiAjZGVmaW5lIFBDSV9QV1JfREFUQV9QTV9TVUIoeCkgKCgoeCkgPj4gMTApICYgNykKLSNkZWZpbmUgUENJX1BXUl9EQVRBX1BNX1NUQVRFKHgpICgoKHgpID4+IDEzKSAmIDMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfUFdSX0RBVEFfUE1fU1RBVEUoeCkgKCgoeCkgPj4gMTMpICYgMykKICNkZWZpbmUgUENJX1BXUl9EQVRBX1RZUEUoeCkgKCgoeCkgPj4gMTUpICYgNykKICNkZWZpbmUgUENJX1BXUl9EQVRBX1JBSUwoeCkgKCgoeCkgPj4gMTgpICYgNykKICNkZWZpbmUgUENJX1BXUl9DQVAgMTIKLSNkZWZpbmUgUENJX1BXUl9DQVBfQlVER0VUKHgpICgoeCkgJiAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1BXUl9DQVBfQlVER0VUKHgpICgoeCkgJiAxKQogI2RlZmluZSBQQ0lfRVhUX0NBUF9QV1JfU0laRU9GIDE2CiAjZGVmaW5lIFBDSV9WTkRSX0hFQURFUiA0CiAjZGVmaW5lIFBDSV9WTkRSX0hFQURFUl9JRCh4KSAoKHgpICYgMHhmZmZmKQotI2RlZmluZSBQQ0lfVk5EUl9IRUFERVJfUkVWKHgpICgoKHgpID4+IDE2KSAmIDB4ZikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9WTkRSX0hFQURFUl9SRVYoeCkgKCgoeCkgPj4gMTYpICYgMHhmKQogI2RlZmluZSBQQ0lfVk5EUl9IRUFERVJfTEVOKHgpICgoKHgpID4+IDIwKSAmIDB4ZmZmKQogI2RlZmluZSBIVF8zQklUX0NBUF9NQVNLIDB4RTAKICNkZWZpbmUgSFRfQ0FQVFlQRV9TTEFWRSAweDAwCi0jZGVmaW5lIEhUX0NBUFRZUEVfSE9TVCAweDIwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVF9DQVBUWVBFX0hPU1QgMHgyMAogI2RlZmluZSBIVF81QklUX0NBUF9NQVNLIDB4RjgKICNkZWZpbmUgSFRfQ0FQVFlQRV9JUlEgMHg4MAogI2RlZmluZSBIVF9DQVBUWVBFX1JFTUFQUElOR180MCAweEEwCi0jZGVmaW5lIEhUX0NBUFRZUEVfUkVNQVBQSU5HXzY0IDB4QTIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhUX0NBUFRZUEVfUkVNQVBQSU5HXzY0IDB4QTIKICNkZWZpbmUgSFRfQ0FQVFlQRV9VTklUSURfQ0xVTVAgMHg5MAogI2RlZmluZSBIVF9DQVBUWVBFX0VYVENPTkYgMHg5OAogI2RlZmluZSBIVF9DQVBUWVBFX01TSV9NQVBQSU5HIDB4QTgKLSNkZWZpbmUgSFRfTVNJX0ZMQUdTIDB4MDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhUX01TSV9GTEFHUyAweDAyCiAjZGVmaW5lIEhUX01TSV9GTEFHU19FTkFCTEUgMHgxCiAjZGVmaW5lIEhUX01TSV9GTEFHU19GSVhFRCAweDIKICNkZWZpbmUgSFRfTVNJX0ZJWEVEX0FERFIgMHgwMDAwMDAwMEZFRTAwMDAwVUxMCi0jZGVmaW5lIEhUX01TSV9BRERSX0xPIDB4MDQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhUX01TSV9BRERSX0xPIDB4MDQKICNkZWZpbmUgSFRfTVNJX0FERFJfTE9fTUFTSyAweEZGRjAwMDAwCiAjZGVmaW5lIEhUX01TSV9BRERSX0hJIDB4MDgKICNkZWZpbmUgSFRfQ0FQVFlQRV9ESVJFQ1RfUk9VVEUgMHhCMAotI2RlZmluZSBIVF9DQVBUWVBFX1ZDU0VUIDB4QjgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhUX0NBUFRZUEVfVkNTRVQgMHhCOAogI2RlZmluZSBIVF9DQVBUWVBFX0VSUk9SX1JFVFJZIDB4QzAKICNkZWZpbmUgSFRfQ0FQVFlQRV9HRU4zIDB4RDAKICNkZWZpbmUgSFRfQ0FQVFlQRV9QTSAweEUwCi0jZGVmaW5lIEhUX0NBUF9TSVpFT0ZfTE9ORyAyOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSFRfQ0FQX1NJWkVPRl9MT05HIDI4CiAjZGVmaW5lIEhUX0NBUF9TSVpFT0ZfU0hPUlQgMjQKICNkZWZpbmUgUENJX0FSSV9DQVAgMHgwNAogI2RlZmluZSBQQ0lfQVJJX0NBUF9NRlZDIDB4MDAwMQotI2RlZmluZSBQQ0lfQVJJX0NBUF9BQ1MgMHgwMDAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfQVJJX0NBUF9BQ1MgMHgwMDAyCiAjZGVmaW5lIFBDSV9BUklfQ0FQX05GTih4KSAoKCh4KSA+PiA4KSAmIDB4ZmYpCiAjZGVmaW5lIFBDSV9BUklfQ1RSTCAweDA2CiAjZGVmaW5lIFBDSV9BUklfQ1RSTF9NRlZDIDB4MDAwMQotI2RlZmluZSBQQ0lfQVJJX0NUUkxfQUNTIDB4MDAwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0FSSV9DVFJMX0FDUyAweDAwMDIKICNkZWZpbmUgUENJX0FSSV9DVFJMX0ZHKHgpICgoKHgpID4+IDQpICYgNykKICNkZWZpbmUgUENJX0VYVF9DQVBfQVJJX1NJWkVPRiA4CiAjZGVmaW5lIFBDSV9BVFNfQ0FQIDB4MDQKLSNkZWZpbmUgUENJX0FUU19DQVBfUURFUCh4KSAoKHgpICYgMHgxZikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9BVFNfQ0FQX1FERVAoeCkgKCh4KSAmIDB4MWYpCiAjZGVmaW5lIFBDSV9BVFNfTUFYX1FERVAgMzIKICNkZWZpbmUgUENJX0FUU19DVFJMIDB4MDYKICNkZWZpbmUgUENJX0FUU19DVFJMX0VOQUJMRSAweDgwMDAKLSNkZWZpbmUgUENJX0FUU19DVFJMX1NUVSh4KSAoKHgpICYgMHgxZikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9BVFNfQ1RSTF9TVFUoeCkgKCh4KSAmIDB4MWYpCiAjZGVmaW5lIFBDSV9BVFNfTUlOX1NUVSAxMgogI2RlZmluZSBQQ0lfRVhUX0NBUF9BVFNfU0laRU9GIDgKICNkZWZpbmUgUENJX1BSSV9DVFJMIDB4MDQKLSNkZWZpbmUgUENJX1BSSV9DVFJMX0VOQUJMRSAweDAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfUFJJX0NUUkxfRU5BQkxFIDB4MDEKICNkZWZpbmUgUENJX1BSSV9DVFJMX1JFU0VUIDB4MDIKICNkZWZpbmUgUENJX1BSSV9TVEFUVVMgMHgwNgogI2RlZmluZSBQQ0lfUFJJX1NUQVRVU19SRiAweDAwMQotI2RlZmluZSBQQ0lfUFJJX1NUQVRVU19VUFJHSSAweDAwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1BSSV9TVEFUVVNfVVBSR0kgMHgwMDIKICNkZWZpbmUgUENJX1BSSV9TVEFUVVNfU1RPUFBFRCAweDEwMAogI2RlZmluZSBQQ0lfUFJJX01BWF9SRVEgMHgwOAogI2RlZmluZSBQQ0lfUFJJX0FMTE9DX1JFUSAweDBjCi0jZGVmaW5lIFBDSV9FWFRfQ0FQX1BSSV9TSVpFT0YgMTYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9FWFRfQ0FQX1BSSV9TSVpFT0YgMTYKICNkZWZpbmUgUENJX1BBU0lEX0NBUCAweDA0CiAjZGVmaW5lIFBDSV9QQVNJRF9DQVBfRVhFQyAweDAyCiAjZGVmaW5lIFBDSV9QQVNJRF9DQVBfUFJJViAweDA0Ci0jZGVmaW5lIFBDSV9QQVNJRF9DVFJMIDB4MDYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9QQVNJRF9DVFJMIDB4MDYKICNkZWZpbmUgUENJX1BBU0lEX0NUUkxfRU5BQkxFIDB4MDEKICNkZWZpbmUgUENJX1BBU0lEX0NUUkxfRVhFQyAweDAyCiAjZGVmaW5lIFBDSV9QQVNJRF9DVFJMX1BSSVYgMHgwNAotI2RlZmluZSBQQ0lfRVhUX0NBUF9QQVNJRF9TSVpFT0YgOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VYVF9DQVBfUEFTSURfU0laRU9GIDgKICNkZWZpbmUgUENJX1NSSU9WX0NBUCAweDA0CiAjZGVmaW5lIFBDSV9TUklPVl9DQVBfVkZNIDB4MDEKICNkZWZpbmUgUENJX1NSSU9WX0NBUF9JTlRSKHgpICgoeCkgPj4gMjEpCi0jZGVmaW5lIFBDSV9TUklPVl9DVFJMIDB4MDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9TUklPVl9DVFJMIDB4MDgKICNkZWZpbmUgUENJX1NSSU9WX0NUUkxfVkZFIDB4MDEKICNkZWZpbmUgUENJX1NSSU9WX0NUUkxfVkZNIDB4MDIKICNkZWZpbmUgUENJX1NSSU9WX0NUUkxfSU5UUiAweDA0Ci0jZGVmaW5lIFBDSV9TUklPVl9DVFJMX01TRSAweDA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfU1JJT1ZfQ1RSTF9NU0UgMHgwOAogI2RlZmluZSBQQ0lfU1JJT1ZfQ1RSTF9BUkkgMHgxMAogI2RlZmluZSBQQ0lfU1JJT1ZfU1RBVFVTIDB4MGEKICNkZWZpbmUgUENJX1NSSU9WX1NUQVRVU19WRk0gMHgwMQotI2RlZmluZSBQQ0lfU1JJT1ZfSU5JVElBTF9WRiAweDBjCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfU1JJT1ZfSU5JVElBTF9WRiAweDBjCiAjZGVmaW5lIFBDSV9TUklPVl9UT1RBTF9WRiAweDBlCiAjZGVmaW5lIFBDSV9TUklPVl9OVU1fVkYgMHgxMAogI2RlZmluZSBQQ0lfU1JJT1ZfRlVOQ19MSU5LIDB4MTIKLSNkZWZpbmUgUENJX1NSSU9WX1ZGX09GRlNFVCAweDE0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfU1JJT1ZfVkZfT0ZGU0VUIDB4MTQKICNkZWZpbmUgUENJX1NSSU9WX1ZGX1NUUklERSAweDE2CiAjZGVmaW5lIFBDSV9TUklPVl9WRl9ESUQgMHgxYQogI2RlZmluZSBQQ0lfU1JJT1ZfU1VQX1BHU0laRSAweDFjCi0jZGVmaW5lIFBDSV9TUklPVl9TWVNfUEdTSVpFIDB4MjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9TUklPVl9TWVNfUEdTSVpFIDB4MjAKICNkZWZpbmUgUENJX1NSSU9WX0JBUiAweDI0CiAjZGVmaW5lIFBDSV9TUklPVl9OVU1fQkFSUyA2CiAjZGVmaW5lIFBDSV9TUklPVl9WRk0gMHgzYwotI2RlZmluZSBQQ0lfU1JJT1ZfVkZNX0JJUih4KSAoKHgpICYgNykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9TUklPVl9WRk1fQklSKHgpICgoeCkgJiA3KQogI2RlZmluZSBQQ0lfU1JJT1ZfVkZNX09GRlNFVCh4KSAoKHgpICYgfjcpCiAjZGVmaW5lIFBDSV9TUklPVl9WRk1fVUEgMHgwCiAjZGVmaW5lIFBDSV9TUklPVl9WRk1fTUkgMHgxCi0jZGVmaW5lIFBDSV9TUklPVl9WRk1fTU8gMHgyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfU1JJT1ZfVkZNX01PIDB4MgogI2RlZmluZSBQQ0lfU1JJT1ZfVkZNX0FWIDB4MwogI2RlZmluZSBQQ0lfRVhUX0NBUF9TUklPVl9TSVpFT0YgNjQKICNkZWZpbmUgUENJX0xUUl9NQVhfU05PT1BfTEFUIDB4NAotI2RlZmluZSBQQ0lfTFRSX01BWF9OT1NOT09QX0xBVCAweDYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9MVFJfTUFYX05PU05PT1BfTEFUIDB4NgogI2RlZmluZSBQQ0lfTFRSX1ZBTFVFX01BU0sgMHgwMDAwMDNmZgogI2RlZmluZSBQQ0lfTFRSX1NDQUxFX01BU0sgMHgwMDAwMWMwMAogI2RlZmluZSBQQ0lfTFRSX1NDQUxFX1NISUZUIDEwCi0jZGVmaW5lIFBDSV9FWFRfQ0FQX0xUUl9TSVpFT0YgOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VYVF9DQVBfTFRSX1NJWkVPRiA4CiAjZGVmaW5lIFBDSV9BQ1NfQ0FQIDB4MDQKICNkZWZpbmUgUENJX0FDU19TViAweDAxCiAjZGVmaW5lIFBDSV9BQ1NfVEIgMHgwMgotI2RlZmluZSBQQ0lfQUNTX1JSIDB4MDQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9BQ1NfUlIgMHgwNAogI2RlZmluZSBQQ0lfQUNTX0NSIDB4MDgKICNkZWZpbmUgUENJX0FDU19VRiAweDEwCiAjZGVmaW5lIFBDSV9BQ1NfRUMgMHgyMAotI2RlZmluZSBQQ0lfQUNTX0RUIDB4NDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9BQ1NfRFQgMHg0MAogI2RlZmluZSBQQ0lfQUNTX0VHUkVTU19CSVRTIDB4MDUKICNkZWZpbmUgUENJX0FDU19DVFJMIDB4MDYKICNkZWZpbmUgUENJX0FDU19FR1JFU1NfQ1RMX1YgMHgwOAotI2RlZmluZSBQQ0lfVlNFQ19IRFIgNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1ZTRUNfSERSIDQKICNkZWZpbmUgUENJX1ZTRUNfSERSX0xFTl9TSElGVCAyMAogI2RlZmluZSBQQ0lfU0FUQV9SRUdTIDQKICNkZWZpbmUgUENJX1NBVEFfUkVHU19NQVNLIDB4RgotI2RlZmluZSBQQ0lfU0FUQV9SRUdTX0lOTElORSAweEYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9TQVRBX1JFR1NfSU5MSU5FIDB4RgogI2RlZmluZSBQQ0lfU0FUQV9TSVpFT0ZfU0hPUlQgOAogI2RlZmluZSBQQ0lfU0FUQV9TSVpFT0ZfTE9ORyAxNgogI2RlZmluZSBQQ0lfUkVCQVJfQ1RSTCA4Ci0jZGVmaW5lIFBDSV9SRUJBUl9DVFJMX05CQVJfTUFTSyAoNyA8PCA1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1JFQkFSX0NUUkxfTkJBUl9NQVNLICg3IDw8IDUpCiAjZGVmaW5lIFBDSV9SRUJBUl9DVFJMX05CQVJfU0hJRlQgNQogI2RlZmluZSBQQ0lfRFBBX0NBUCA0CiAjZGVmaW5lIFBDSV9EUEFfQ0FQX1NVQlNUQVRFX01BU0sgMHgxRgotI2RlZmluZSBQQ0lfRFBBX0JBU0VfU0laRU9GIDE2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfRFBBX0JBU0VfU0laRU9GIDE2CiAjZGVmaW5lIFBDSV9UUEhfQ0FQIDQKICNkZWZpbmUgUENJX1RQSF9DQVBfTE9DX01BU0sgMHg2MDAKICNkZWZpbmUgUENJX1RQSF9MT0NfTk9ORSAweDAwMAotI2RlZmluZSBQQ0lfVFBIX0xPQ19DQVAgMHgyMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9UUEhfTE9DX0NBUCAweDIwMAogI2RlZmluZSBQQ0lfVFBIX0xPQ19NU0lYIDB4NDAwCiAjZGVmaW5lIFBDSV9UUEhfQ0FQX1NUX01BU0sgMHgwN0ZGMDAwMAogI2RlZmluZSBQQ0lfVFBIX0NBUF9TVF9TSElGVCAxNgotI2RlZmluZSBQQ0lfVFBIX0JBU0VfU0laRU9GIDEyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfVFBIX0JBU0VfU0laRU9GIDEyCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvcGVyZl9ldmVudC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgKaW5kZXggNWQxMWJkYS4uNTkyMmNiZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wZXJmX2V2ZW50LmgKQEAgLTg4LDEwNyArODgsMTMyIEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfQ09VTlRfU1dfQUxJR05NRU5UX0ZBVUxUUyA9IDcsCiAgUEVSRl9DT1VOVF9TV19FTVVMQVRJT05fRkFVTFRTID0gOCwKKyBQRVJGX0NPVU5UX1NXX0RVTU1ZID0gOSwKICBQRVJGX0NPVU5UX1NXX01BWCwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIGVudW0gcGVyZl9ldmVudF9zYW1wbGVfZm9ybWF0IHsKICBQRVJGX1NBTVBMRV9JUCA9IDFVIDw8IDAsCiAgUEVSRl9TQU1QTEVfVElEID0gMVUgPDwgMSwKLSBQRVJGX1NBTVBMRV9USU1FID0gMVUgPDwgMiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUEVSRl9TQU1QTEVfVElNRSA9IDFVIDw8IDIsCiAgUEVSRl9TQU1QTEVfQUREUiA9IDFVIDw8IDMsCiAgUEVSRl9TQU1QTEVfUkVBRCA9IDFVIDw8IDQsCiAgUEVSRl9TQU1QTEVfQ0FMTENIQUlOID0gMVUgPDwgNSwKLSBQRVJGX1NBTVBMRV9JRCA9IDFVIDw8IDYsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFBFUkZfU0FNUExFX0lEID0gMVUgPDwgNiwKICBQRVJGX1NBTVBMRV9DUFUgPSAxVSA8PCA3LAogIFBFUkZfU0FNUExFX1BFUklPRCA9IDFVIDw8IDgsCiAgUEVSRl9TQU1QTEVfU1RSRUFNX0lEID0gMVUgPDwgOSwKLSBQRVJGX1NBTVBMRV9SQVcgPSAxVSA8PCAxMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUEVSRl9TQU1QTEVfUkFXID0gMVUgPDwgMTAsCiAgUEVSRl9TQU1QTEVfQlJBTkNIX1NUQUNLID0gMVUgPDwgMTEsCiAgUEVSRl9TQU1QTEVfUkVHU19VU0VSID0gMVUgPDwgMTIsCiAgUEVSRl9TQU1QTEVfU1RBQ0tfVVNFUiA9IDFVIDw8IDEzLAotIFBFUkZfU0FNUExFX1dFSUdIVCA9IDFVIDw8IDE0LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX1NBTVBMRV9XRUlHSFQgPSAxVSA8PCAxNCwKICBQRVJGX1NBTVBMRV9EQVRBX1NSQyA9IDFVIDw8IDE1LAotIFBFUkZfU0FNUExFX01BWCA9IDFVIDw8IDE2LAorIFBFUkZfU0FNUExFX0lERU5USUZJRVIgPSAxVSA8PCAxNiwKKyBQRVJGX1NBTVBMRV9UUkFOU0FDVElPTiA9IDFVIDw8IDE3LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX1NBTVBMRV9NQVggPSAxVSA8PCAxOCwKIH07CiBlbnVtIHBlcmZfYnJhbmNoX3NhbXBsZV90eXBlIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSRl9TQU1QTEVfQlJBTkNIX1VTRVIgPSAxVSA8PCAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQRVJGX1NBTVBMRV9CUkFOQ0hfS0VSTkVMID0gMVUgPDwgMSwKICBQRVJGX1NBTVBMRV9CUkFOQ0hfSFYgPSAxVSA8PCAyLAogIFBFUkZfU0FNUExFX0JSQU5DSF9BTlkgPSAxVSA8PCAzLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQRVJGX1NBTVBMRV9CUkFOQ0hfQU5ZX0NBTEwgPSAxVSA8PCA0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQRVJGX1NBTVBMRV9CUkFOQ0hfQU5ZX1JFVFVSTiA9IDFVIDw8IDUsCiAgUEVSRl9TQU1QTEVfQlJBTkNIX0lORF9DQUxMID0gMVUgPDwgNiwKLSBQRVJGX1NBTVBMRV9CUkFOQ0hfTUFYID0gMVUgPDwgNywKKyBQRVJGX1NBTVBMRV9CUkFOQ0hfQUJPUlRfVFggPSAxVSA8PCA3LAorIFBFUkZfU0FNUExFX0JSQU5DSF9JTl9UWCA9IDFVIDw8IDgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFBFUkZfU0FNUExFX0JSQU5DSF9OT19UWCA9IDFVIDw8IDksCisgUEVSRl9TQU1QTEVfQlJBTkNIX01BWCA9IDFVIDw8IDEwLAogfTsKICNkZWZpbmUgUEVSRl9TQU1QTEVfQlJBTkNIX1BMTV9BTEwgICAoUEVSRl9TQU1QTEVfQlJBTkNIX1VTRVJ8ICBQRVJGX1NBTVBMRV9CUkFOQ0hfS0VSTkVMfCAgUEVSRl9TQU1QTEVfQlJBTkNIX0hWKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gcGVyZl9zYW1wbGVfcmVnc19hYmkgewogIFBFUkZfU0FNUExFX1JFR1NfQUJJX05PTkUgPSAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQRVJGX1NBTVBMRV9SRUdTX0FCSV8zMiA9IDEsCiAgUEVSRl9TQU1QTEVfUkVHU19BQklfNjQgPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitlbnVtIHsKKyBQRVJGX1RYTl9FTElTSU9OID0gKDEgPDwgMCksCisgUEVSRl9UWE5fVFJBTlNBQ1RJT04gPSAoMSA8PCAxKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUEVSRl9UWE5fU1lOQyA9ICgxIDw8IDIpLAorIFBFUkZfVFhOX0FTWU5DID0gKDEgPDwgMyksCisgUEVSRl9UWE5fUkVUUlkgPSAoMSA8PCA0KSwKKyBQRVJGX1RYTl9DT05GTElDVCA9ICgxIDw8IDUpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX1RYTl9DQVBBQ0lUWV9XUklURSA9ICgxIDw8IDYpLAorIFBFUkZfVFhOX0NBUEFDSVRZX1JFQUQgPSAoMSA8PCA3KSwKKyBQRVJGX1RYTl9NQVggPSAoMSA8PCA4KSwKKyBQRVJGX1RYTl9BQk9SVF9NQVNLID0gKDB4ZmZmZmZmZmZVTEwgPDwgMzIpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX1RYTl9BQk9SVF9TSElGVCA9IDMyLAogfTsKIGVudW0gcGVyZl9ldmVudF9yZWFkX2Zvcm1hdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCA9IDFVIDw8IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfUlVOTklORyA9IDFVIDw8IDEsCiAgUEVSRl9GT1JNQVRfSUQgPSAxVSA8PCAyLAogIFBFUkZfRk9STUFUX0dST1VQID0gMVUgPDwgMywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSRl9GT1JNQVRfTUFYID0gMVUgPDwgNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBQRVJGX0FUVFJfU0laRV9WRVIwIDY0CiAjZGVmaW5lIFBFUkZfQVRUUl9TSVpFX1ZFUjEgNzIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfQVRUUl9TSVpFX1ZFUjIgODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfQVRUUl9TSVpFX1ZFUjMgOTYKIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgewogIF9fdTMyIHR5cGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGNvbmZpZzsKICB1bmlvbiB7CiAgX191NjQgc2FtcGxlX3BlcmlvZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgc2FtcGxlX2ZyZXE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH07CiAgX191NjQgc2FtcGxlX3R5cGU7CiAgX191NjQgcmVhZF9mb3JtYXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGRpc2FibGVkIDogMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW5oZXJpdCA6IDEsCiAgcGlubmVkIDogMSwKICBleGNsdXNpdmUgOiAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBleGNsdWRlX3VzZXIgOiAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBleGNsdWRlX2tlcm5lbCA6IDEsCiAgZXhjbHVkZV9odiA6IDEsCiAgZXhjbHVkZV9pZGxlIDogMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1hcCA6IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNvbW0gOiAxLAogIGZyZXEgOiAxLAogIGluaGVyaXRfc3RhdCA6IDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGVuYWJsZV9vbl9leGVjIDogMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdGFzayA6IDEsCiAgd2F0ZXJtYXJrIDogMSwKICBwcmVjaXNlX2lwIDogMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW1hcF9kYXRhIDogMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2FtcGxlX2lkX2FsbCA6IDEsCiAgZXhjbHVkZV9ob3N0IDogMSwKICBleGNsdWRlX2d1ZXN0IDogMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZXhjbHVkZV9jYWxsY2hhaW5fa2VybmVsIDogMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZXhjbHVkZV9jYWxsY2hhaW5fdXNlciA6IDEsCi0gX19yZXNlcnZlZF8xIDogNDE7CisgbW1hcDIgOiAxLAorIF9fcmVzZXJ2ZWRfMSA6IDQwOwogIHVuaW9uIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgd2FrZXVwX2V2ZW50czsKQEAgLTIyMiwzMyArMjQ3LDQzIEBACiAjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1NFVF9PVVRQVVQgX0lPICgnJCcsIDUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX0VWRU5UX0lPQ19TRVRfRklMVEVSIF9JT1coJyQnLCA2LCBjaGFyICopCisjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX0lEIF9JT1IoJyQnLCA3LCBfX3U2NCAqKQogZW51bSBwZXJmX2V2ZW50X2lvY19mbGFncyB7CiAgUEVSRl9JT0NfRkxBR19HUk9VUCA9IDFVIDw8IDAsCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UgewogIF9fdTMyIHZlcnNpb247CiAgX191MzIgY29tcGF0X3ZlcnNpb247Ci0gX191MzIgbG9jazsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgbG9jazsKICBfX3UzMiBpbmRleDsKICBfX3M2NCBvZmZzZXQ7CiAgX191NjQgdGltZV9lbmFibGVkOwotIF9fdTY0IHRpbWVfcnVubmluZzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgdGltZV9ydW5uaW5nOwogIHVuaW9uIHsKICBfX3U2NCBjYXBhYmlsaXRpZXM7Ci0gX191NjQgY2FwX3Vzcl90aW1lIDogMSwKLSBjYXBfdXNyX3JkcG1jIDogMSwKKyBzdHJ1Y3QgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBjYXBfX19fX3JlcyA6IDYyOworIF9fdTY0IGNhcF9iaXQwIDogMSwKKyBjYXBfYml0MF9pc19kZXByZWNhdGVkIDogMSwKKyBjYXBfdXNlcl9yZHBtYyA6IDEsCisgY2FwX3VzZXJfdGltZSA6IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGNhcF91c2VyX3RpbWVfemVybyA6IDEsCisgY2FwX19fX19yZXMgOiA1OTsKICB9OworIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHBtY193aWR0aDsKICBfX3UxNiB0aW1lX3NoaWZ0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0aW1lX211bHQ7CiAgX191NjQgdGltZV9vZmZzZXQ7Ci0gX191NjQgX19yZXNlcnZlZFsxMjBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCB0aW1lX3plcm87CisgX191MzIgc2l6ZTsKKyBfX3U4IF9fcmVzZXJ2ZWRbMTE4KjgrNF07CiAgX191NjQgZGF0YV9oZWFkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBkYXRhX3RhaWw7CkBAIC0yODQsODYgKzMxOSwxMDAgQEAKICBQRVJGX1JFQ09SRF9GT1JLID0gNywKICBQRVJGX1JFQ09SRF9SRUFEID0gOCwKICBQRVJGX1JFQ09SRF9TQU1QTEUgPSA5LAotIFBFUkZfUkVDT1JEX01BWCwKKyBQRVJGX1JFQ09SRF9NTUFQMiA9IDEwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX1JFQ09SRF9NQVgsCiB9OwogI2RlZmluZSBQRVJGX01BWF9TVEFDS19ERVBUSCAxMjcKIGVudW0gcGVyZl9jYWxsY2hhaW5fY29udGV4dCB7Ci0gUEVSRl9DT05URVhUX0hWID0gKF9fdTY0KS0zMiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUEVSRl9DT05URVhUX0hWID0gKF9fdTY0KS0zMiwKICBQRVJGX0NPTlRFWFRfS0VSTkVMID0gKF9fdTY0KS0xMjgsCiAgUEVSRl9DT05URVhUX1VTRVIgPSAoX191NjQpLTUxMiwKICBQRVJGX0NPTlRFWFRfR1VFU1QgPSAoX191NjQpLTIwNDgsCi0gUEVSRl9DT05URVhUX0dVRVNUX0tFUk5FTCA9IChfX3U2NCktMjE3NiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUEVSRl9DT05URVhUX0dVRVNUX0tFUk5FTCA9IChfX3U2NCktMjE3NiwKICBQRVJGX0NPTlRFWFRfR1VFU1RfVVNFUiA9IChfX3U2NCktMjU2MCwKICBQRVJGX0NPTlRFWFRfTUFYID0gKF9fdTY0KS00MDk1LAogfTsKLSNkZWZpbmUgUEVSRl9GTEFHX0ZEX05PX0dST1VQICgxVSA8PCAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUEVSRl9GTEFHX0ZEX05PX0dST1VQICgxVSA8PCAwKQogI2RlZmluZSBQRVJGX0ZMQUdfRkRfT1VUUFVUICgxVSA8PCAxKQogI2RlZmluZSBQRVJGX0ZMQUdfUElEX0NHUk9VUCAoMVUgPDwgMikKKyNkZWZpbmUgUEVSRl9GTEFHX0ZEX0NMT0VYRUMgKDFVIDw8IDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdW5pb24gcGVyZl9tZW1fZGF0YV9zcmMgewogIF9fdTY0IHZhbDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICBfX3U2NCBtZW1fb3A6NSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbWVtX2x2bDoxNCwKICBtZW1fc25vb3A6NSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbWVtX2xvY2s6MiwKICBtZW1fZHRsYjo3LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtZW1fcnN2ZDozMTsKICB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFBFUkZfTUVNX09QX05BIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX09QX0xPQUQgMHgwMgogI2RlZmluZSBQRVJGX01FTV9PUF9TVE9SRSAweDA0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9PUF9QRkVUQ0ggMHgwOAogI2RlZmluZSBQRVJGX01FTV9PUF9FWEVDIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX09QX1NISUZUIDAKICNkZWZpbmUgUEVSRl9NRU1fTFZMX05BIDB4MDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9ISVQgMHgwMgogI2RlZmluZSBQRVJGX01FTV9MVkxfTUlTUyAweDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9MVkxfTDEgMHgwOAogI2RlZmluZSBQRVJGX01FTV9MVkxfTEZCIDB4MTAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9MMiAweDIwCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9MMyAweDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9MVkxfTE9DX1JBTSAweDgwCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9SRU1fUkFNMSAweDEwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9NRU1fTFZMX1JFTV9SQU0yIDB4MjAwCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9SRU1fQ0NFMSAweDQwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9NRU1fTFZMX1JFTV9DQ0UyIDB4ODAwCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9JTyAweDEwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9VTkMgMHgyMDAwCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9TSElGVCA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9TTk9PUF9OQSAweDAxCiAjZGVmaW5lIFBFUkZfTUVNX1NOT09QX05PTkUgMHgwMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9NRU1fU05PT1BfSElUIDB4MDQKICNkZWZpbmUgUEVSRl9NRU1fU05PT1BfTUlTUyAweDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9TTk9PUF9ISVRNIDB4MTAKICNkZWZpbmUgUEVSRl9NRU1fU05PT1BfU0hJRlQgMTkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX0xPQ0tfTkEgMHgwMQogI2RlZmluZSBQRVJGX01FTV9MT0NLX0xPQ0tFRCAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9MT0NLX1NISUZUIDI0CiAjZGVmaW5lIFBFUkZfTUVNX1RMQl9OQSAweDAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9UTEJfSElUIDB4MDIKICNkZWZpbmUgUEVSRl9NRU1fVExCX01JU1MgMHgwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9NRU1fVExCX0wxIDB4MDgKICNkZWZpbmUgUEVSRl9NRU1fVExCX0wyIDB4MTAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX1RMQl9XSyAweDIwCiAjZGVmaW5lIFBFUkZfTUVNX1RMQl9PUyAweDQwCi0jZGVmaW5lIFBFUkZfTUVNX1RMQl9TSElGVCAyNgotI2RlZmluZSBQRVJGX01FTV9TKGEsIHMpICAgKCgodTY0KVBFUkZfTUVNXyMjYSMjXyMjcykgPDwgUEVSRl9NRU1fIyNhIyNfU0hJRlQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQRVJGX01FTV9UTEJfU0hJRlQgMjYKKyNkZWZpbmUgUEVSRl9NRU1fUyhhLCBzKSAgICgoKF9fdTY0KVBFUkZfTUVNXyMjYSMjXyMjcykgPDwgUEVSRl9NRU1fIyNhIyNfU0hJRlQpCitzdHJ1Y3QgcGVyZl9icmFuY2hfZW50cnkgeworIF9fdTY0IGZyb207CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHRvOworIF9fdTY0IG1pc3ByZWQ6MSwKKyBwcmVkaWN0ZWQ6MSwKKyBpbl90eDoxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBhYm9ydDoxLAorIHJlc2VydmVkOjYwOworfTsKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvcGt0X2Nscy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wa3RfY2xzLmgKaW5kZXggYmE0NDNlMS4uOTJlYTBkZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wa3RfY2xzLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wa3RfY2xzLmgKQEAgLTM3MSw2NSArMzcxLDc4IEBACiB9OwogI2RlZmluZSBUQ0FfQ0dST1VQX01BWCAoX19UQ0FfQ0dST1VQX01BWCAtIDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CisgVENBX0JQRl9VTlNQRUMsCisgVENBX0JQRl9BQ1QsCisgVENBX0JQRl9QT0xJQ0UsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFRDQV9CUEZfQ0xBU1NJRCwKKyBUQ0FfQlBGX09QU19MRU4sCisgVENBX0JQRl9PUFMsCisgX19UQ0FfQlBGX01BWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBUQ0FfQlBGX01BWCAoX19UQ0FfQlBGX01BWCAtIDEpCiBzdHJ1Y3QgdGNmX2VtYXRjaF90cmVlX2hkciB7CiAgX191MTYgbm1hdGNoZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHByb2dpZDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgVENBX0VNQVRDSF9UUkVFX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX0VNQVRDSF9UUkVFX0hEUiwKICBUQ0FfRU1BVENIX1RSRUVfTElTVCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19UQ0FfRU1BVENIX1RSRUVfTUFYCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENBX0VNQVRDSF9UUkVFX01BWCAoX19UQ0FfRU1BVENIX1RSRUVfTUFYIC0gMSkKIHN0cnVjdCB0Y2ZfZW1hdGNoX2hkciB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IG1hdGNoaWQ7CiAgX191MTYga2luZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgZmxhZ3M7CiAgX191MTYgcGFkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFRDRl9FTV9SRUxfRU5EIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDRl9FTV9SRUxfQU5EICgxPDwwKQogI2RlZmluZSBUQ0ZfRU1fUkVMX09SICgxPDwxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENGX0VNX0lOVkVSVCAoMTw8MikKICNkZWZpbmUgVENGX0VNX1NJTVBMRSAoMTw8MykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDRl9FTV9SRUxfTUFTSyAzCiAjZGVmaW5lIFRDRl9FTV9SRUxfVkFMSUQodikgKCgodikgJiBUQ0ZfRU1fUkVMX01BU0spICE9IFRDRl9FTV9SRUxfTUFTSykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBUQ0ZfTEFZRVJfTElOSywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENGX0xBWUVSX05FVFdPUkssCiAgVENGX0xBWUVSX1RSQU5TUE9SVCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19UQ0ZfTEFZRVJfTUFYCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENGX0xBWUVSX01BWCAoX19UQ0ZfTEFZRVJfTUFYIC0gMSkKICNkZWZpbmUgVENGX0VNX0NPTlRBSU5FUiAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ0ZfRU1fQ01QIDEKICNkZWZpbmUgVENGX0VNX05CWVRFIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDRl9FTV9VMzIgMwogI2RlZmluZSBUQ0ZfRU1fTUVUQSA0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ0ZfRU1fVEVYVCA1CiAjZGVmaW5lIFRDRl9FTV9WTEFOIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDRl9FTV9DQU5JRCA3CiAjZGVmaW5lIFRDRl9FTV9JUFNFVCA4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ0ZfRU1fTUFYIDgKIGVudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0ZfRU1fUFJPR19UQwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBUQ0ZfRU1fT1BORF9FUSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENGX0VNX09QTkRfR1QsCiAgVENGX0VNX09QTkRfTFQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wa3Rfc2NoZWQuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcGt0X3NjaGVkLmgKaW5kZXggMzkzMzVjZS4uNWI2NDA5NiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wa3Rfc2NoZWQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BrdF9zY2hlZC5oCkBAIC01NiwyNjIgKzU2LDI3NyBAQAogI2RlZmluZSBUQ19IX1JPT1QgKDB4RkZGRkZGRkZVKQogI2RlZmluZSBUQ19IX0lOR1JFU1MgKDB4RkZGRkZGRjFVKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gdGNfbGlua19sYXllciB7CisgVENfTElOS0xBWUVSX1VOQVdBUkUsCisgVENfTElOS0xBWUVSX0VUSEVSTkVULAorIFRDX0xJTktMQVlFUl9BVE0sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgVENfTElOS0xBWUVSX01BU0sgMHgwRgogc3RydWN0IHRjX3JhdGVzcGVjIHsKICB1bnNpZ25lZCBjaGFyIGNlbGxfbG9nOwotIHVuc2lnbmVkIGNoYXIgX19yZXNlcnZlZDsKLSB1bnNpZ25lZCBzaG9ydCBvdmVyaGVhZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBsaW5rbGF5ZXI7CisgdW5zaWduZWQgc2hvcnQgb3ZlcmhlYWQ7CiAgc2hvcnQgY2VsbF9hbGlnbjsKICB1bnNpZ25lZCBzaG9ydCBtcHU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJhdGU7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENfUlRBQl9TSVpFIDEwMjQKIHN0cnVjdCB0Y19zaXplc3BlYyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgY2VsbF9sb2c7CiAgdW5zaWduZWQgY2hhciBzaXplX2xvZzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2hvcnQgY2VsbF9hbGlnbjsKICBpbnQgb3ZlcmhlYWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBsaW5rbGF5ZXI7CiAgdW5zaWduZWQgaW50IG1wdTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IG10dTsKICB1bnNpZ25lZCBpbnQgdHNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfU1RBQl9VTlNQRUMsCiAgVENBX1NUQUJfQkFTRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX1NUQUJfREFUQSwKICBfX1RDQV9TVEFCX01BWAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFRDQV9TVEFCX01BWCAoX19UQ0FfU1RBQl9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0Y19maWZvX3FvcHQgewogIF9fdTMyIGxpbWl0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFRDUV9QUklPX0JBTkRTIDE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ1FfTUlOX1BSSU9fQkFORFMgMgogc3RydWN0IHRjX3ByaW9fcW9wdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBiYW5kczsKICBfX3U4IHByaW9tYXBbVENfUFJJT19NQVgrMV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB0Y19tdWx0aXFfcW9wdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IGJhbmRzOwogIF9fdTE2IG1heF9iYW5kczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBUQ1FfUExVR19CVUZGRVIgMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENRX1BMVUdfUkVMRUFTRV9PTkUgMQogI2RlZmluZSBUQ1FfUExVR19SRUxFQVNFX0lOREVGSU5JVEUgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENRX1BMVUdfTElNSVQgMwogc3RydWN0IHRjX3BsdWdfcW9wdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBhY3Rpb247CiAgX191MzIgbGltaXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB0Y190YmZfcW9wdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB0Y19yYXRlc3BlYyByYXRlOwogIHN0cnVjdCB0Y19yYXRlc3BlYyBwZWFrcmF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbGltaXQ7CiAgX191MzIgYnVmZmVyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtdHU7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIFRDQV9UQkZfVU5TUEVDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfVEJGX1BBUk1TLAogIFRDQV9UQkZfUlRBQiwKLSBUQ0FfVEJGX1BUQUIsCi0gX19UQ0FfVEJGX01BWCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVENBX1RCRl9QVEFCLAorIFRDQV9UQkZfUkFURTY0LAorIFRDQV9UQkZfUFJBVEU2NCwKKyBUQ0FfVEJGX0JVUlNULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBUQ0FfVEJGX1BCVVJTVCwKKyBfX1RDQV9UQkZfTUFYLAogfTsKICNkZWZpbmUgVENBX1RCRl9NQVggKF9fVENBX1RCRl9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0Y19zZnFfcW9wdCB7CiAgdW5zaWduZWQgcXVhbnR1bTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHBlcnR1cmJfcGVyaW9kOwogIF9fdTMyIGxpbWl0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBkaXZpc29yOwogIHVuc2lnbmVkIGZsb3dzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdGNfc2ZxcmVkX3N0YXRzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcHJvYl9kcm9wOwogIF9fdTMyIGZvcmNlZF9kcm9wOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwcm9iX21hcms7CiAgX191MzIgZm9yY2VkX21hcms7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHByb2JfbWFya19oZWFkOwogIF9fdTMyIGZvcmNlZF9tYXJrX2hlYWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB0Y19zZnFfcW9wdF92MSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB0Y19zZnFfcW9wdCB2MDsKICB1bnNpZ25lZCBpbnQgZGVwdGg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBoZWFkZHJvcDsKICBfX3UzMiBsaW1pdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcXRoX21pbjsKICBfX3UzMiBxdGhfbWF4OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIFdsb2c7CiAgdW5zaWduZWQgY2hhciBQbG9nOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIFNjZWxsX2xvZzsKICB1bnNpZ25lZCBjaGFyIGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfUDsKICBzdHJ1Y3QgdGNfc2ZxcmVkX3N0YXRzIHN0YXRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdGNfc2ZxX3hzdGF0cyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIGFsbG90OwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBUQ0FfUkVEX1VOU1BFQywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX1JFRF9QQVJNUywKICBUQ0FfUkVEX1NUQUIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9SRURfTUFYX1AsCiAgX19UQ0FfUkVEX01BWCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBUQ0FfUkVEX01BWCAoX19UQ0FfUkVEX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHRjX3JlZF9xb3B0IHsKICBfX3UzMiBsaW1pdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcXRoX21pbjsKICBfX3UzMiBxdGhfbWF4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIFdsb2c7CiAgdW5zaWduZWQgY2hhciBQbG9nOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIFNjZWxsX2xvZzsKICB1bnNpZ25lZCBjaGFyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENfUkVEX0VDTiAxCiAjZGVmaW5lIFRDX1JFRF9IQVJERFJPUCAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ19SRURfQURBUFRBVElWRSA0CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0Y19yZWRfeHN0YXRzIHsKICBfX3UzMiBlYXJseTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGRyb3A7CiAgX191MzIgb3RoZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1hcmtlZDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNQVhfRFBzIDE2CiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX0dSRURfVU5TUEVDLAogIFRDQV9HUkVEX1BBUk1TLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfR1JFRF9TVEFCLAogIFRDQV9HUkVEX0RQUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX0dSRURfTUFYX1AsCiAgX19UQ0FfR1JFRF9NQVgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVENBX0dSRURfTUFYIChfX1RDQV9HUkVEX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHRjX2dyZWRfcW9wdCB7CiAgX191MzIgbGltaXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHF0aF9taW47CiAgX191MzIgcXRoX21heDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgRFA7CiAgX191MzIgYmFja2xvZzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcWF2ZTsKICBfX3UzMiBmb3JjZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGVhcmx5OwogIF9fdTMyIG90aGVyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwZHJvcDsKICBfX3U4IFdsb2c7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggUGxvZzsKICBfX3U4IFNjZWxsX2xvZzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwcmlvOwogIF9fdTMyIHBhY2tldHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGJ5dGVzaW47CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0Y19ncmVkX3NvcHQgewogIF9fdTMyIERQczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZGVmX0RQOwogIF9fdTggZ3JpbzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBmbGFnczsKICBfX3UxNiBwYWQxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX0NIT0tFX1VOU1BFQywKICBUQ0FfQ0hPS0VfUEFSTVMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9DSE9LRV9TVEFCLAogIFRDQV9DSE9LRV9NQVhfUCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19UQ0FfQ0hPS0VfTUFYLAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDQV9DSE9LRV9NQVggKF9fVENBX0NIT0tFX01BWCAtIDEpCiBzdHJ1Y3QgdGNfY2hva2VfcW9wdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGxpbWl0OwogIF9fdTMyIHF0aF9taW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHF0aF9tYXg7CiAgdW5zaWduZWQgY2hhciBXbG9nOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIFBsb2c7CiAgdW5zaWduZWQgY2hhciBTY2VsbF9sb2c7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgZmxhZ3M7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0Y19jaG9rZV94c3RhdHMgewogIF9fdTMyIGVhcmx5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwZHJvcDsKICBfX3UzMiBvdGhlcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWFya2VkOwogIF9fdTMyIG1hdGNoZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVENfSFRCX05VTVBSSU8gOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENfSFRCX01BWERFUFRIIDgKICNkZWZpbmUgVENfSFRCX1BST1RPVkVSIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdGNfaHRiX29wdCB7CiAgc3RydWN0IHRjX3JhdGVzcGVjIHJhdGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB0Y19yYXRlc3BlYyBjZWlsOwogIF9fdTMyIGJ1ZmZlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY2J1ZmZlcjsKICBfX3UzMiBxdWFudHVtOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBsZXZlbDsKICBfX3UzMiBwcmlvOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdGNfaHRiX2dsb2IgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB2ZXJzaW9uOwogIF9fdTMyIHJhdGUycXVhbnR1bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZGVmY2xzOwogIF9fdTMyIGRlYnVnOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBkaXJlY3RfcGt0czsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgVENBX0hUQl9VTlNQRUMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9IVEJfUEFSTVMsCiAgVENBX0hUQl9JTklULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfSFRCX0NUQUIsCiAgVENBX0hUQl9SVEFCLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfSFRCX0RJUkVDVF9RTEVOLAorIFRDQV9IVEJfUkFURTY0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBUQ0FfSFRCX0NFSUw2NCwKICBfX1RDQV9IVEJfTUFYLAogfTsKICNkZWZpbmUgVENBX0hUQl9NQVggKF9fVENBX0hUQl9NQVggLSAxKQpAQCAtNDc0LDIxMyArNDg5LDMwMCBAQAogIFRDQV9ORVRFTV9MT1NTLAogIFRDQV9ORVRFTV9SQVRFLAogIFRDQV9ORVRFTV9FQ04sCi0gX19UQ0FfTkVURU1fTUFYLAorIFRDQV9ORVRFTV9SQVRFNjQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fVENBX05FVEVNX01BWCwKIH07CiAjZGVmaW5lIFRDQV9ORVRFTV9NQVggKF9fVENBX05FVEVNX01BWCAtIDEpCiBzdHJ1Y3QgdGNfbmV0ZW1fcW9wdCB7Ci0gX191MzIgbGF0ZW5jeTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgbGF0ZW5jeTsKICBfX3UzMiBsaW1pdDsKICBfX3UzMiBsb3NzOwogIF9fdTMyIGdhcDsKLSBfX3UzMiBkdXBsaWNhdGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGR1cGxpY2F0ZTsKICBfX3UzMiBqaXR0ZXI7CiB9Owogc3RydWN0IHRjX25ldGVtX2NvcnIgewotIF9fdTMyIGRlbGF5X2NvcnI7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGRlbGF5X2NvcnI7CiAgX191MzIgbG9zc19jb3JyOwogIF9fdTMyIGR1cF9jb3JyOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdGNfbmV0ZW1fcmVvcmRlciB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHByb2JhYmlsaXR5OwogIF9fdTMyIGNvcnJlbGF0aW9uOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdGNfbmV0ZW1fY29ycnVwdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHByb2JhYmlsaXR5OwogIF9fdTMyIGNvcnJlbGF0aW9uOwogfTsKLXN0cnVjdCB0Y19uZXRlbV9yYXRlIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdGNfbmV0ZW1fcmF0ZSB7CiAgX191MzIgcmF0ZTsKICBfX3MzMiBwYWNrZXRfb3ZlcmhlYWQ7CiAgX191MzIgY2VsbF9zaXplOwotIF9fczMyIGNlbGxfb3ZlcmhlYWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fczMyIGNlbGxfb3ZlcmhlYWQ7CiB9OwogZW51bSB7CiAgTkVURU1fTE9TU19VTlNQRUMsCi0gTkVURU1fTE9TU19HSSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkVURU1fTE9TU19HSSwKICBORVRFTV9MT1NTX0dFLAogIF9fTkVURU1fTE9TU19NQVgKIH07Ci0jZGVmaW5lIE5FVEVNX0xPU1NfTUFYIChfX05FVEVNX0xPU1NfTUFYIC0gMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5FVEVNX0xPU1NfTUFYIChfX05FVEVNX0xPU1NfTUFYIC0gMSkKIHN0cnVjdCB0Y19uZXRlbV9naW1vZGVsIHsKICBfX3UzMiBwMTM7CiAgX191MzIgcDMxOwotIF9fdTMyIHAzMjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcDMyOwogIF9fdTMyIHAxNDsKICBfX3UzMiBwMjM7CiB9Owotc3RydWN0IHRjX25ldGVtX2dlbW9kZWwgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB0Y19uZXRlbV9nZW1vZGVsIHsKICBfX3UzMiBwOwogIF9fdTMyIHI7CiAgX191MzIgaDsKLSBfX3UzMiBrMTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgazE7CiB9OwogI2RlZmluZSBORVRFTV9ESVNUX1NDQUxFIDgxOTIKICNkZWZpbmUgTkVURU1fRElTVF9NQVggMTYzODQKLWVudW0gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gewogIFRDQV9EUlJfVU5TUEVDLAogIFRDQV9EUlJfUVVBTlRVTSwKICBfX1RDQV9EUlJfTUFYCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIFRDQV9EUlJfTUFYIChfX1RDQV9EUlJfTUFYIC0gMSkKIHN0cnVjdCB0Y19kcnJfc3RhdHMgewogIF9fdTMyIGRlZmljaXQ7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIFRDX1FPUFRfQklUTUFTSyAxNQogI2RlZmluZSBUQ19RT1BUX01BWF9RVUVVRSAxNgogc3RydWN0IHRjX21xcHJpb19xb3B0IHsKLSBfX3U4IG51bV90YzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBudW1fdGM7CiAgX191OCBwcmlvX3RjX21hcFtUQ19RT1BUX0JJVE1BU0sgKyAxXTsKICBfX3U4IGh3OwogIF9fdTE2IGNvdW50W1RDX1FPUFRfTUFYX1FVRVVFXTsKLSBfX3UxNiBvZmZzZXRbVENfUU9QVF9NQVhfUVVFVUVdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UxNiBvZmZzZXRbVENfUU9QVF9NQVhfUVVFVUVdOwogfTsKIGVudW0gewogIFRDQV9TRkJfVU5TUEVDLAotIFRDQV9TRkJfUEFSTVMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFRDQV9TRkJfUEFSTVMsCiAgX19UQ0FfU0ZCX01BWCwKIH07CiAjZGVmaW5lIFRDQV9TRkJfTUFYIChfX1RDQV9TRkJfTUFYIC0gMSkKLXN0cnVjdCB0Y19zZmJfcW9wdCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHRjX3NmYl9xb3B0IHsKICBfX3UzMiByZWhhc2hfaW50ZXJ2YWw7CiAgX191MzIgd2FybXVwX3RpbWU7CiAgX191MzIgbWF4OwotIF9fdTMyIGJpbl9zaXplOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBiaW5fc2l6ZTsKICBfX3UzMiBpbmNyZW1lbnQ7CiAgX191MzIgZGVjcmVtZW50OwogIF9fdTMyIGxpbWl0OwotIF9fdTMyIHBlbmFsdHlfcmF0ZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcGVuYWx0eV9yYXRlOwogIF9fdTMyIHBlbmFsdHlfYnVyc3Q7CiB9Owogc3RydWN0IHRjX3NmYl94c3RhdHMgewotIF9fdTMyIGVhcmx5ZHJvcDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZWFybHlkcm9wOwogIF9fdTMyIHBlbmFsdHlkcm9wOwogIF9fdTMyIGJ1Y2tldGRyb3A7CiAgX191MzIgcXVldWVkcm9wOwotIF9fdTMyIGNoaWxkZHJvcDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgY2hpbGRkcm9wOwogIF9fdTMyIG1hcmtlZDsKICBfX3UzMiBtYXhxbGVuOwogIF9fdTMyIG1heHByb2I7Ci0gX191MzIgYXZncHJvYjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgYXZncHJvYjsKIH07CiAjZGVmaW5lIFNGQl9NQVhfUFJPQiAweEZGRkYKIGVudW0gewotIFRDQV9RRlFfVU5TUEVDLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBUQ0FfUUZRX1VOU1BFQywKICBUQ0FfUUZRX1dFSUdIVCwKICBUQ0FfUUZRX0xNQVgsCiAgX19UQ0FfUUZRX01BWAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBUQ0FfUUZRX01BWCAoX19UQ0FfUUZRX01BWCAtIDEpCiBzdHJ1Y3QgdGNfcWZxX3N0YXRzIHsKICBfX3UzMiB3ZWlnaHQ7Ci0gX191MzIgbG1heDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgbG1heDsKIH07CiBlbnVtIHsKICBUQ0FfQ09ERUxfVU5TUEVDLAotIFRDQV9DT0RFTF9UQVJHRVQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFRDQV9DT0RFTF9UQVJHRVQsCiAgVENBX0NPREVMX0xJTUlULAogIFRDQV9DT0RFTF9JTlRFUlZBTCwKICBUQ0FfQ09ERUxfRUNOLAotIF9fVENBX0NPREVMX01BWAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX1RDQV9DT0RFTF9NQVgKIH07CiAjZGVmaW5lIFRDQV9DT0RFTF9NQVggKF9fVENBX0NPREVMX01BWCAtIDEpCiBzdHJ1Y3QgdGNfY29kZWxfeHN0YXRzIHsKLSBfX3UzMiBtYXhwYWNrZXQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIG1heHBhY2tldDsKICBfX3UzMiBjb3VudDsKICBfX3UzMiBsYXN0Y291bnQ7CiAgX191MzIgbGRlbGF5OwotIF9fczMyIGRyb3BfbmV4dDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19zMzIgZHJvcF9uZXh0OwogIF9fdTMyIGRyb3Bfb3ZlcmxpbWl0OwogIF9fdTMyIGVjbl9tYXJrOwogIF9fdTMyIGRyb3BwaW5nOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogZW51bSB7CiAgVENBX0ZRX0NPREVMX1VOU1BFQywKICBUQ0FfRlFfQ09ERUxfVEFSR0VULAotIFRDQV9GUV9DT0RFTF9MSU1JVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVENBX0ZRX0NPREVMX0xJTUlULAogIFRDQV9GUV9DT0RFTF9JTlRFUlZBTCwKICBUQ0FfRlFfQ09ERUxfRUNOLAogIFRDQV9GUV9DT0RFTF9GTE9XUywKLSBUQ0FfRlFfQ09ERUxfUVVBTlRVTSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVENBX0ZRX0NPREVMX1FVQU5UVU0sCiAgX19UQ0FfRlFfQ09ERUxfTUFYCiB9OwogI2RlZmluZSBUQ0FfRlFfQ09ERUxfTUFYIChfX1RDQV9GUV9DT0RFTF9NQVggLSAxKQotZW51bSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CiAgVENBX0ZRX0NPREVMX1hTVEFUU19RRElTQywKICBUQ0FfRlFfQ09ERUxfWFNUQVRTX0NMQVNTLAogfTsKLXN0cnVjdCB0Y19mcV9jb2RlbF9xZF9zdGF0cyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHRjX2ZxX2NvZGVsX3FkX3N0YXRzIHsKICBfX3UzMiBtYXhwYWNrZXQ7CiAgX191MzIgZHJvcF9vdmVybGltaXQ7CiAgX191MzIgZWNuX21hcms7Ci0gX191MzIgbmV3X2Zsb3dfY291bnQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIG5ld19mbG93X2NvdW50OwogIF9fdTMyIG5ld19mbG93c19sZW47CiAgX191MzIgb2xkX2Zsb3dzX2xlbjsKIH07Ci1zdHJ1Y3QgdGNfZnFfY29kZWxfY2xfc3RhdHMgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB0Y19mcV9jb2RlbF9jbF9zdGF0cyB7CiAgX19zMzIgZGVmaWNpdDsKICBfX3UzMiBsZGVsYXk7CiAgX191MzIgY291bnQ7Ci0gX191MzIgbGFzdGNvdW50OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBsYXN0Y291bnQ7CiAgX191MzIgZHJvcHBpbmc7CiAgX19zMzIgZHJvcF9uZXh0OwogfTsKLXN0cnVjdCB0Y19mcV9jb2RlbF94c3RhdHMgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB0Y19mcV9jb2RlbF94c3RhdHMgewogIF9fdTMyIHR5cGU7CiAgdW5pb24gewogIHN0cnVjdCB0Y19mcV9jb2RlbF9xZF9zdGF0cyBxZGlzY19zdGF0czsKLSBzdHJ1Y3QgdGNfZnFfY29kZWxfY2xfc3RhdHMgY2xhc3Nfc3RhdHM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB0Y19mcV9jb2RlbF9jbF9zdGF0cyBjbGFzc19zdGF0czsKICB9OwogfTsKK2VudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBUQ0FfRlFfVU5TUEVDLAorIFRDQV9GUV9QTElNSVQsCisgVENBX0ZRX0ZMT1dfUExJTUlULAorIFRDQV9GUV9RVUFOVFVNLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBUQ0FfRlFfSU5JVElBTF9RVUFOVFVNLAorIFRDQV9GUV9SQVRFX0VOQUJMRSwKKyBUQ0FfRlFfRkxPV19ERUZBVUxUX1JBVEUsCisgVENBX0ZRX0ZMT1dfTUFYX1JBVEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFRDQV9GUV9CVUNLRVRTX0xPRywKKyBUQ0FfRlFfRkxPV19SRUZJTExfREVMQVksCisgX19UQ0FfRlFfTUFYCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVENBX0ZRX01BWCAoX19UQ0FfRlFfTUFYIC0gMSkKK3N0cnVjdCB0Y19mcV9xZF9zdGF0cyB7CisgX191NjQgZ2NfZmxvd3M7CisgX191NjQgaGlnaHByaW9fcGFja2V0czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgdGNwX3JldHJhbnM7CisgX191NjQgdGhyb3R0bGVkOworIF9fdTY0IGZsb3dzX3BsaW1pdDsKKyBfX3U2NCBwa3RzX3Rvb19sb25nOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBhbGxvY2F0aW9uX2Vycm9yczsKKyBfX3M2NCB0aW1lX25leHRfZGVsYXllZF9mbG93OworIF9fdTMyIGZsb3dzOworIF9fdTMyIGluYWN0aXZlX2Zsb3dzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB0aHJvdHRsZWRfZmxvd3M7CisgX191MzIgcGFkOworfTsKK2VudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBUQ0FfSEhGX1VOU1BFQywKKyBUQ0FfSEhGX0JBQ0tMT0dfTElNSVQsCisgVENBX0hIRl9RVUFOVFVNLAorIFRDQV9ISEZfSEhfRkxPV1NfTElNSVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFRDQV9ISEZfUkVTRVRfVElNRU9VVCwKKyBUQ0FfSEhGX0FETUlUX0JZVEVTLAorIFRDQV9ISEZfRVZJQ1RfVElNRU9VVCwKKyBUQ0FfSEhGX05PTl9ISF9XRUlHSFQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fVENBX0hIRl9NQVgKK307CisjZGVmaW5lIFRDQV9ISEZfTUFYIChfX1RDQV9ISEZfTUFYIC0gMSkKK3N0cnVjdCB0Y19oaGZfeHN0YXRzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZHJvcF9vdmVybGltaXQ7CisgX191MzIgaGhfb3ZlcmxpbWl0OworIF9fdTMyIGhoX3RvdF9jb3VudDsKKyBfX3UzMiBoaF9jdXJfY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK2VudW0geworIFRDQV9QSUVfVU5TUEVDLAorIFRDQV9QSUVfVEFSR0VULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBUQ0FfUElFX0xJTUlULAorIFRDQV9QSUVfVFVQREFURSwKKyBUQ0FfUElFX0FMUEhBLAorIFRDQV9QSUVfQkVUQSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVENBX1BJRV9FQ04sCisgVENBX1BJRV9CWVRFTU9ERSwKKyBfX1RDQV9QSUVfTUFYCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVENBX1BJRV9NQVggKF9fVENBX1BJRV9NQVggLSAxKQorc3RydWN0IHRjX3BpZV94c3RhdHMgeworIF9fdTMyIHByb2I7CisgX191MzIgZGVsYXk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGF2Z19kcV9yYXRlOworIF9fdTMyIHBhY2tldHNfaW47CisgX191MzIgZHJvcHBlZDsKKyBfX3UzMiBvdmVybGltaXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIG1heHE7CisgX191MzIgZWNuX21hcms7Cit9OwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wcHAtaW9jdGwuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcHBwLWlvY3RsLmgKaW5kZXggNDNjNGM1MC4uZmEyNDIzYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wcHAtaW9jdGwuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BwcC1pb2N0bC5oCkBAIC0yMSwxMTAgKzIxLDExMSBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaW5jbHVkZSA8bGludXgvcHBwX2RlZnMuaD4KICNkZWZpbmUgU0NfQ09NUF9QUk9UIDB4MDAwMDAwMDEKICNkZWZpbmUgU0NfQ09NUF9BQyAweDAwMDAwMDAyCiAjZGVmaW5lIFNDX0NPTVBfVENQIDB4MDAwMDAwMDQKLSNkZWZpbmUgU0NfTk9fVENQX0NDSUQgMHgwMDAwMDAwOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0NfTk9fVENQX0NDSUQgMHgwMDAwMDAwOAogI2RlZmluZSBTQ19SRUpfQ09NUF9BQyAweDAwMDAwMDEwCiAjZGVmaW5lIFNDX1JFSl9DT01QX1RDUCAweDAwMDAwMDIwCiAjZGVmaW5lIFNDX0NDUF9PUEVOIDB4MDAwMDAwNDAKLSNkZWZpbmUgU0NfQ0NQX1VQIDB4MDAwMDAwODAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNDX0NDUF9VUCAweDAwMDAwMDgwCiAjZGVmaW5lIFNDX0VOQUJMRV9JUCAweDAwMDAwMTAwCiAjZGVmaW5lIFNDX0xPT1BfVFJBRkZJQyAweDAwMDAwMjAwCiAjZGVmaW5lIFNDX01VTFRJTElOSyAweDAwMDAwNDAwCi0jZGVmaW5lIFNDX01QX1NIT1JUU0VRIDB4MDAwMDA4MDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNDX01QX1NIT1JUU0VRIDB4MDAwMDA4MDAKICNkZWZpbmUgU0NfQ09NUF9SVU4gMHgwMDAwMTAwMAogI2RlZmluZSBTQ19ERUNPTVBfUlVOIDB4MDAwMDIwMDAKICNkZWZpbmUgU0NfTVBfWFNIT1JUU0VRIDB4MDAwMDQwMDAKLSNkZWZpbmUgU0NfREVCVUcgMHgwMDAxMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0NfREVCVUcgMHgwMDAxMDAwMAogI2RlZmluZSBTQ19MT0dfSU5QS1QgMHgwMDAyMDAwMAogI2RlZmluZSBTQ19MT0dfT1VUUEtUIDB4MDAwNDAwMDAKICNkZWZpbmUgU0NfTE9HX1JBV0lOIDB4MDAwODAwMDAKLSNkZWZpbmUgU0NfTE9HX0ZMVVNIIDB4MDAxMDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNDX0xPR19GTFVTSCAweDAwMTAwMDAwCiAjZGVmaW5lIFNDX1NZTkMgMHgwMDIwMDAwMAogI2RlZmluZSBTQ19NVVNUX0NPTVAgMHgwMDQwMDAwMAogI2RlZmluZSBTQ19NQVNLIDB4MGY2MDBmZmYKLSNkZWZpbmUgU0NfWE1JVF9CVVNZIDB4MTAwMDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNDX1hNSVRfQlVTWSAweDEwMDAwMDAwCiAjZGVmaW5lIFNDX1JDVl9PRERQIDB4MDgwMDAwMDAKICNkZWZpbmUgU0NfUkNWX0VWTlAgMHgwNDAwMDAwMAogI2RlZmluZSBTQ19SQ1ZfQjdfMSAweDAyMDAwMDAwCi0jZGVmaW5lIFNDX1JDVl9CN18wIDB4MDEwMDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNDX1JDVl9CN18wIDB4MDEwMDAwMDAKICNkZWZpbmUgU0NfRENfRkVSUk9SIDB4MDA4MDAwMDAKICNkZWZpbmUgU0NfRENfRVJST1IgMHgwMDQwMDAwMAogc3RydWN0IG5waW9jdGwgewotIGludCBwcm90b2NvbDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgaW50IHByb3RvY29sOwogIGVudW0gTlBtb2RlIG1vZGU7CiB9Owogc3RydWN0IHBwcF9vcHRpb25fZGF0YSB7Ci0gX191OCBfX3VzZXIgKnB0cjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBfX3VzZXIgKnB0cjsKICBfX3UzMiBsZW5ndGg7CiAgaW50IHRyYW5zbWl0OwogfTsKLXN0cnVjdCBwcHBvbDJ0cF9pb2Nfc3RhdHMgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBwcHBvbDJ0cF9pb2Nfc3RhdHMgewogIF9fdTE2IHR1bm5lbF9pZDsKICBfX3UxNiBzZXNzaW9uX2lkOwogIF9fdTMyIHVzaW5nX2lwc2VjOjE7Ci0gX19hbGlnbmVkX3U2NCB0eF9wYWNrZXRzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2FsaWduZWRfdTY0IHR4X3BhY2tldHM7CiAgX19hbGlnbmVkX3U2NCB0eF9ieXRlczsKICBfX2FsaWduZWRfdTY0IHR4X2Vycm9yczsKICBfX2FsaWduZWRfdTY0IHJ4X3BhY2tldHM7Ci0gX19hbGlnbmVkX3U2NCByeF9ieXRlczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19hbGlnbmVkX3U2NCByeF9ieXRlczsKICBfX2FsaWduZWRfdTY0IHJ4X3NlcV9kaXNjYXJkczsKICBfX2FsaWduZWRfdTY0IHJ4X29vc19wYWNrZXRzOwogIF9fYWxpZ25lZF91NjQgcnhfZXJyb3JzOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBQUFBJT0NHRkxBR1MgX0lPUigndCcsIDkwLCBpbnQpCiAjZGVmaW5lIFBQUElPQ1NGTEFHUyBfSU9XKCd0JywgODksIGludCkKICNkZWZpbmUgUFBQSU9DR0FTWU5DTUFQIF9JT1IoJ3QnLCA4OCwgaW50KQotI2RlZmluZSBQUFBJT0NTQVNZTkNNQVAgX0lPVygndCcsIDg3LCBpbnQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUFBJT0NTQVNZTkNNQVAgX0lPVygndCcsIDg3LCBpbnQpCiAjZGVmaW5lIFBQUElPQ0dVTklUIF9JT1IoJ3QnLCA4NiwgaW50KQogI2RlZmluZSBQUFBJT0NHUkFTWU5DTUFQIF9JT1IoJ3QnLCA4NSwgaW50KQogI2RlZmluZSBQUFBJT0NTUkFTWU5DTUFQIF9JT1coJ3QnLCA4NCwgaW50KQotI2RlZmluZSBQUFBJT0NHTVJVIF9JT1IoJ3QnLCA4MywgaW50KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFBQSU9DR01SVSBfSU9SKCd0JywgODMsIGludCkKICNkZWZpbmUgUFBQSU9DU01SVSBfSU9XKCd0JywgODIsIGludCkKICNkZWZpbmUgUFBQSU9DU01BWENJRCBfSU9XKCd0JywgODEsIGludCkKICNkZWZpbmUgUFBQSU9DR1hBU1lOQ01BUCBfSU9SKCd0JywgODAsIGV4dF9hY2NtKQotI2RlZmluZSBQUFBJT0NTWEFTWU5DTUFQIF9JT1coJ3QnLCA3OSwgZXh0X2FjY20pCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUFBJT0NTWEFTWU5DTUFQIF9JT1coJ3QnLCA3OSwgZXh0X2FjY20pCiAjZGVmaW5lIFBQUElPQ1hGRVJVTklUIF9JTygndCcsIDc4KQogI2RlZmluZSBQUFBJT0NTQ09NUFJFU1MgX0lPVygndCcsIDc3LCBzdHJ1Y3QgcHBwX29wdGlvbl9kYXRhKQogI2RlZmluZSBQUFBJT0NHTlBNT0RFIF9JT1dSKCd0JywgNzYsIHN0cnVjdCBucGlvY3RsKQotI2RlZmluZSBQUFBJT0NTTlBNT0RFIF9JT1coJ3QnLCA3NSwgc3RydWN0IG5waW9jdGwpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUFBJT0NTTlBNT0RFIF9JT1coJ3QnLCA3NSwgc3RydWN0IG5waW9jdGwpCiAjZGVmaW5lIFBQUElPQ1NQQVNTIF9JT1coJ3QnLCA3MSwgc3RydWN0IHNvY2tfZnByb2cpCiAjZGVmaW5lIFBQUElPQ1NBQ1RJVkUgX0lPVygndCcsIDcwLCBzdHJ1Y3Qgc29ja19mcHJvZykKICNkZWZpbmUgUFBQSU9DR0RFQlVHIF9JT1IoJ3QnLCA2NSwgaW50KQotI2RlZmluZSBQUFBJT0NTREVCVUcgX0lPVygndCcsIDY0LCBpbnQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUFBJT0NTREVCVUcgX0lPVygndCcsIDY0LCBpbnQpCiAjZGVmaW5lIFBQUElPQ0dJRExFIF9JT1IoJ3QnLCA2Mywgc3RydWN0IHBwcF9pZGxlKQogI2RlZmluZSBQUFBJT0NORVdVTklUIF9JT1dSKCd0JywgNjIsIGludCkKICNkZWZpbmUgUFBQSU9DQVRUQUNIIF9JT1coJ3QnLCA2MSwgaW50KQotI2RlZmluZSBQUFBJT0NERVRBQ0ggX0lPVygndCcsIDYwLCBpbnQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUFBJT0NERVRBQ0ggX0lPVygndCcsIDYwLCBpbnQpCiAjZGVmaW5lIFBQUElPQ1NNUlJVIF9JT1coJ3QnLCA1OSwgaW50KQogI2RlZmluZSBQUFBJT0NDT05ORUNUIF9JT1coJ3QnLCA1OCwgaW50KQogI2RlZmluZSBQUFBJT0NESVNDT05OIF9JTygndCcsIDU3KQotI2RlZmluZSBQUFBJT0NBVFRDSEFOIF9JT1coJ3QnLCA1NiwgaW50KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFBQSU9DQVRUQ0hBTiBfSU9XKCd0JywgNTYsIGludCkKICNkZWZpbmUgUFBQSU9DR0NIQU4gX0lPUigndCcsIDU1LCBpbnQpCiAjZGVmaW5lIFBQUElPQ0dMMlRQU1RBVFMgX0lPUigndCcsIDU0LCBzdHJ1Y3QgcHBwb2wydHBfaW9jX3N0YXRzKQogI2RlZmluZSBTSU9DR1BQUFNUQVRTIChTSU9DREVWUFJJVkFURSArIDApCi0jZGVmaW5lIFNJT0NHUFBQVkVSIChTSU9DREVWUFJJVkFURSArIDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTSU9DR1BQUFZFUiAoU0lPQ0RFVlBSSVZBVEUgKyAxKQogI2RlZmluZSBTSU9DR1BQUENTVEFUUyAoU0lPQ0RFVlBSSVZBVEUgKyAyKQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ByY3RsLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ByY3RsLmgKaW5kZXggODdjN2UyZi4uYTEyN2I1YSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wcmN0bC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcHJjdGwuaApAQCAtMTE3LDcgKzExNyw0IEBACiAjZGVmaW5lIFBSX0dFVF9OT19ORVdfUFJJVlMgMzkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBSX0dFVF9USURfQUREUkVTUyA0MAotI2RlZmluZSBQUl9TRVRfVk1BIDB4NTM1NjRkNDEKLSNkZWZpbmUgUFJfU0VUX1ZNQV9BTk9OX05BTUUgMAogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wdHJhY2UuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcHRyYWNlLmgKaW5kZXggYTIxZmJhYy4uNmY3MWI2ZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wdHJhY2UuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3B0cmFjZS5oCkBAIC01NCwzMCArNTQsMzIgQEAKICBfX3UzMiBmbGFnczsKICBfX3MzMiBucjsKIH07Ci0jZGVmaW5lIFBUUkFDRV9QRUVLU0lHSU5GT19TSEFSRUQgKDEgPDwgMCkKKyNkZWZpbmUgUFRSQUNFX0dFVFNJR01BU0sgMHg0MjBhCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQVFJBQ0VfU0VUU0lHTUFTSyAweDQyMGIKKyNkZWZpbmUgUFRSQUNFX1BFRUtTSUdJTkZPX1NIQVJFRCAoMSA8PCAwKQogI2RlZmluZSBQVFJBQ0VfRVZFTlRfRk9SSyAxCiAjZGVmaW5lIFBUUkFDRV9FVkVOVF9WRk9SSyAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVFJBQ0VfRVZFTlRfQ0xPTkUgMwogI2RlZmluZSBQVFJBQ0VfRVZFTlRfRVhFQyA0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVFJBQ0VfRVZFTlRfVkZPUktfRE9ORSA1CiAjZGVmaW5lIFBUUkFDRV9FVkVOVF9FWElUIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBUUkFDRV9FVkVOVF9TRUNDT01QIDcKICNkZWZpbmUgUFRSQUNFX0VWRU5UX1NUT1AgMTI4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVFJBQ0VfT19UUkFDRVNZU0dPT0QgMQogI2RlZmluZSBQVFJBQ0VfT19UUkFDRUZPUksgKDEgPDwgUFRSQUNFX0VWRU5UX0ZPUkspCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVFJBQ0VfT19UUkFDRVZGT1JLICgxIDw8IFBUUkFDRV9FVkVOVF9WRk9SSykKICNkZWZpbmUgUFRSQUNFX09fVFJBQ0VDTE9ORSAoMSA8PCBQVFJBQ0VfRVZFTlRfQ0xPTkUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVFJBQ0VfT19UUkFDRUVYRUMgKDEgPDwgUFRSQUNFX0VWRU5UX0VYRUMpCiAjZGVmaW5lIFBUUkFDRV9PX1RSQUNFVkZPUktET05FICgxIDw8IFBUUkFDRV9FVkVOVF9WRk9SS19ET05FKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFRSQUNFX09fVFJBQ0VFWElUICgxIDw8IFBUUkFDRV9FVkVOVF9FWElUKQogI2RlZmluZSBQVFJBQ0VfT19UUkFDRVNFQ0NPTVAgKDEgPDwgUFRSQUNFX0VWRU5UX1NFQ0NPTVApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVFJBQ0VfT19FWElUS0lMTCAoMSA8PCAyMCkKICNkZWZpbmUgUFRSQUNFX09fTUFTSyAoMHgwMDAwMDBmZiB8IFBUUkFDRV9PX0VYSVRLSUxMKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3JhaWQvbWRfcC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9yYWlkL21kX3AuaAppbmRleCA1MmExZGFiLi5mYzZlMjBlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3JhaWQvbWRfcC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcmFpZC9tZF9wLmgKQEAgLTE5LDE3OCArMTksMTgxIEBACiAjaWZuZGVmIF9NRF9QX0gKICNkZWZpbmUgX01EX1BfSAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jZGVmaW5lIE1EX1JFU0VSVkVEX0JZVEVTICg2NCAqIDEwMjQpCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTURfUkVTRVJWRURfQllURVMgKDY0ICogMTAyNCkKICNkZWZpbmUgTURfUkVTRVJWRURfU0VDVE9SUyAoTURfUkVTRVJWRURfQllURVMgLyA1MTIpCiAjZGVmaW5lIE1EX05FV19TSVpFX1NFQ1RPUlMoeCkgKCh4ICYgfihNRF9SRVNFUlZFRF9TRUNUT1JTIC0gMSkpIC0gTURfUkVTRVJWRURfU0VDVE9SUykKICNkZWZpbmUgTURfU0JfQllURVMgNDA5NgotI2RlZmluZSBNRF9TQl9XT1JEUyAoTURfU0JfQllURVMgLyA0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTURfU0JfV09SRFMgKE1EX1NCX0JZVEVTIC8gNCkKICNkZWZpbmUgTURfU0JfU0VDVE9SUyAoTURfU0JfQllURVMgLyA1MTIpCiAjZGVmaW5lIE1EX1NCX0dFTkVSSUNfT0ZGU0VUIDAKICNkZWZpbmUgTURfU0JfUEVSU09OQUxJVFlfT0ZGU0VUIDY0Ci0jZGVmaW5lIE1EX1NCX0RJU0tTX09GRlNFVCAxMjgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1EX1NCX0RJU0tTX09GRlNFVCAxMjgKICNkZWZpbmUgTURfU0JfREVTQ1JJUFRPUl9PRkZTRVQgOTkyCiAjZGVmaW5lIE1EX1NCX0dFTkVSSUNfQ09OU1RBTlRfV09SRFMgMzIKICNkZWZpbmUgTURfU0JfR0VORVJJQ19TVEFURV9XT1JEUyAzMgotI2RlZmluZSBNRF9TQl9HRU5FUklDX1dPUkRTIChNRF9TQl9HRU5FUklDX0NPTlNUQU5UX1dPUkRTICsgTURfU0JfR0VORVJJQ19TVEFURV9XT1JEUykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1EX1NCX0dFTkVSSUNfV09SRFMgKE1EX1NCX0dFTkVSSUNfQ09OU1RBTlRfV09SRFMgKyBNRF9TQl9HRU5FUklDX1NUQVRFX1dPUkRTKQogI2RlZmluZSBNRF9TQl9QRVJTT05BTElUWV9XT1JEUyA2NAogI2RlZmluZSBNRF9TQl9ERVNDUklQVE9SX1dPUkRTIDMyCiAjZGVmaW5lIE1EX1NCX0RJU0tTIDI3Ci0jZGVmaW5lIE1EX1NCX0RJU0tTX1dPUkRTIChNRF9TQl9ESVNLUypNRF9TQl9ERVNDUklQVE9SX1dPUkRTKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTURfU0JfRElTS1NfV09SRFMgKE1EX1NCX0RJU0tTKk1EX1NCX0RFU0NSSVBUT1JfV09SRFMpCiAjZGVmaW5lIE1EX1NCX1JFU0VSVkVEX1dPUkRTICgxMDI0IC0gTURfU0JfR0VORVJJQ19XT1JEUyAtIE1EX1NCX1BFUlNPTkFMSVRZX1dPUkRTIC0gTURfU0JfRElTS1NfV09SRFMgLSBNRF9TQl9ERVNDUklQVE9SX1dPUkRTKQogI2RlZmluZSBNRF9TQl9FUVVBTF9XT1JEUyAoTURfU0JfR0VORVJJQ19XT1JEUyArIE1EX1NCX1BFUlNPTkFMSVRZX1dPUkRTICsgTURfU0JfRElTS1NfV09SRFMpCiAjZGVmaW5lIE1EX0RJU0tfRkFVTFRZIDAKLSNkZWZpbmUgTURfRElTS19BQ1RJVkUgMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTURfRElTS19BQ1RJVkUgMQogI2RlZmluZSBNRF9ESVNLX1NZTkMgMgogI2RlZmluZSBNRF9ESVNLX1JFTU9WRUQgMwogI2RlZmluZSBNRF9ESVNLX1dSSVRFTU9TVExZIDkKLXR5cGVkZWYgc3RydWN0IG1kcF9kZXZpY2VfZGVzY3JpcHRvcl9zIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIHN0cnVjdCBtZHBfZGV2aWNlX2Rlc2NyaXB0b3JfcyB7CiAgX191MzIgbnVtYmVyOwogIF9fdTMyIG1ham9yOwogIF9fdTMyIG1pbm9yOwotIF9fdTMyIHJhaWRfZGlzazsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcmFpZF9kaXNrOwogIF9fdTMyIHN0YXRlOwogIF9fdTMyIHJlc2VydmVkW01EX1NCX0RFU0NSSVBUT1JfV09SRFMgLSA1XTsKIH0gbWRwX2Rpc2tfdDsKLSNkZWZpbmUgTURfU0JfTUFHSUMgMHhhOTJiNGVmYwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTURfU0JfTUFHSUMgMHhhOTJiNGVmYwogI2RlZmluZSBNRF9TQl9DTEVBTiAwCiAjZGVmaW5lIE1EX1NCX0VSUk9SUyAxCiAjZGVmaW5lIE1EX1NCX0JJVE1BUF9QUkVTRU5UIDgKLXR5cGVkZWYgc3RydWN0IG1kcF9zdXBlcmJsb2NrX3MgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgc3RydWN0IG1kcF9zdXBlcmJsb2NrX3MgewogIF9fdTMyIG1kX21hZ2ljOwogIF9fdTMyIG1ham9yX3ZlcnNpb247CiAgX191MzIgbWlub3JfdmVyc2lvbjsKLSBfX3UzMiBwYXRjaF92ZXJzaW9uOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBwYXRjaF92ZXJzaW9uOwogIF9fdTMyIGd2YWxpZF93b3JkczsKICBfX3UzMiBzZXRfdXVpZDA7CiAgX191MzIgY3RpbWU7Ci0gX191MzIgbGV2ZWw7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGxldmVsOwogIF9fdTMyIHNpemU7CiAgX191MzIgbnJfZGlza3M7CiAgX191MzIgcmFpZF9kaXNrczsKLSBfX3UzMiBtZF9taW5vcjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgbWRfbWlub3I7CiAgX191MzIgbm90X3BlcnNpc3RlbnQ7CiAgX191MzIgc2V0X3V1aWQxOwogIF9fdTMyIHNldF91dWlkMjsKLSBfX3UzMiBzZXRfdXVpZDM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHNldF91dWlkMzsKICBfX3UzMiBnc3RhdGVfY3Jlc2VydmVkW01EX1NCX0dFTkVSSUNfQ09OU1RBTlRfV09SRFMgLSAxNl07CiAgX191MzIgdXRpbWU7CiAgX191MzIgc3RhdGU7Ci0gX191MzIgYWN0aXZlX2Rpc2tzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBhY3RpdmVfZGlza3M7CiAgX191MzIgd29ya2luZ19kaXNrczsKICBfX3UzMiBmYWlsZWRfZGlza3M7CiAgX191MzIgc3BhcmVfZGlza3M7Ci0gX191MzIgc2JfY3N1bTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgc2JfY3N1bTsKICNpZiBkZWZpbmVkKF9fQllURV9PUkRFUikgPyBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOIDogZGVmaW5lZChfX0JJR19FTkRJQU4pCiAgX191MzIgZXZlbnRzX2hpOwogIF9fdTMyIGV2ZW50c19sbzsKLSBfX3UzMiBjcF9ldmVudHNfaGk7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGNwX2V2ZW50c19oaTsKICBfX3UzMiBjcF9ldmVudHNfbG87CiAjZWxpZiBkZWZpbmVkKF9fQllURV9PUkRFUikgPyBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOIDogZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCiAgX191MzIgZXZlbnRzX2xvOwotIF9fdTMyIGV2ZW50c19oaTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZXZlbnRzX2hpOwogIF9fdTMyIGNwX2V2ZW50c19sbzsKICBfX3UzMiBjcF9ldmVudHNfaGk7CiAjZWxzZQotI2Vycm9yIHVuc3BlY2lmaWVkIGVuZGlhbm5lc3MKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZXJyb3IgdW5zcGVjaWZpZWQgZW5kaWFubmVzcwogI2VuZGlmCiAgX191MzIgcmVjb3ZlcnlfY3A7CiAgX191NjQgcmVzaGFwZV9wb3NpdGlvbjsKLSBfX3UzMiBuZXdfbGV2ZWw7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIG5ld19sZXZlbDsKICBfX3UzMiBkZWx0YV9kaXNrczsKICBfX3UzMiBuZXdfbGF5b3V0OwogIF9fdTMyIG5ld19jaHVuazsKLSBfX3UzMiBnc3RhdGVfc3Jlc2VydmVkW01EX1NCX0dFTkVSSUNfU1RBVEVfV09SRFMgLSAxOF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGdzdGF0ZV9zcmVzZXJ2ZWRbTURfU0JfR0VORVJJQ19TVEFURV9XT1JEUyAtIDE4XTsKICBfX3UzMiBsYXlvdXQ7CiAgX191MzIgY2h1bmtfc2l6ZTsKICBfX3UzMiByb290X3B2OwotIF9fdTMyIHJvb3RfYmxvY2s7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHJvb3RfYmxvY2s7CiAgX191MzIgcHN0YXRlX3Jlc2VydmVkW01EX1NCX1BFUlNPTkFMSVRZX1dPUkRTIC0gNF07CiAgbWRwX2Rpc2tfdCBkaXNrc1tNRF9TQl9ESVNLU107CiAgX191MzIgcmVzZXJ2ZWRbTURfU0JfUkVTRVJWRURfV09SRFNdOwotIG1kcF9kaXNrX3QgdGhpc19kaXNrOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtZHBfZGlza190IHRoaXNfZGlzazsKIH0gbWRwX3N1cGVyX3Q7CiAjZGVmaW5lIE1EX1NVUEVSQkxPQ0tfMV9USU1FX1NFQ19NQVNLICgoMVVMTDw8NDApIC0gMSkKIHN0cnVjdCBtZHBfc3VwZXJibG9ja18xIHsKLSBfX2xlMzIgbWFnaWM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiBtYWdpYzsKICBfX2xlMzIgbWFqb3JfdmVyc2lvbjsKICBfX2xlMzIgZmVhdHVyZV9tYXA7CiAgX19sZTMyIHBhZDA7Ci0gX191OCBzZXRfdXVpZFsxNl07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggc2V0X3V1aWRbMTZdOwogIGNoYXIgc2V0X25hbWVbMzJdOwogIF9fbGU2NCBjdGltZTsKICBfX2xlMzIgbGV2ZWw7Ci0gX19sZTMyIGxheW91dDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTMyIGxheW91dDsKICBfX2xlNjQgc2l6ZTsKICBfX2xlMzIgY2h1bmtzaXplOwogIF9fbGUzMiByYWlkX2Rpc2tzOwotIF9fbGUzMiBiaXRtYXBfb2Zmc2V0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIgYml0bWFwX29mZnNldDsKICBfX2xlMzIgbmV3X2xldmVsOwogIF9fbGU2NCByZXNoYXBlX3Bvc2l0aW9uOwogIF9fbGUzMiBkZWx0YV9kaXNrczsKLSBfX2xlMzIgbmV3X2xheW91dDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTMyIG5ld19sYXlvdXQ7CiAgX19sZTMyIG5ld19jaHVuazsKICBfX2xlMzIgbmV3X29mZnNldDsKICBfX2xlNjQgZGF0YV9vZmZzZXQ7Ci0gX19sZTY0IGRhdGFfc2l6ZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTY0IGRhdGFfc2l6ZTsKICBfX2xlNjQgc3VwZXJfb2Zmc2V0OwogIF9fbGU2NCByZWNvdmVyeV9vZmZzZXQ7CiAgX19sZTMyIGRldl9udW1iZXI7Ci0gX19sZTMyIGNudF9jb3JyZWN0ZWRfcmVhZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTMyIGNudF9jb3JyZWN0ZWRfcmVhZDsKICBfX3U4IGRldmljZV91dWlkWzE2XTsKICBfX3U4IGRldmZsYWdzOwogI2RlZmluZSBXcml0ZU1vc3RseTEgMQotIF9fdTggYmJsb2dfc2hpZnQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYmJsb2dfc2hpZnQ7CiAgX19sZTE2IGJibG9nX3NpemU7CiAgX19sZTMyIGJibG9nX29mZnNldDsKICBfX2xlNjQgdXRpbWU7Ci0gX19sZTY0IGV2ZW50czsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTY0IGV2ZW50czsKICBfX2xlNjQgcmVzeW5jX29mZnNldDsKICBfX2xlMzIgc2JfY3N1bTsKICBfX2xlMzIgbWF4X2RldjsKLSBfX3U4IHBhZDNbNjQtMzJdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHBhZDNbNjQtMzJdOwogIF9fbGUxNiBkZXZfcm9sZXNbMF07CiB9OwogI2RlZmluZSBNRF9GRUFUVVJFX0JJVE1BUF9PRkZTRVQgMQotI2RlZmluZSBNRF9GRUFUVVJFX1JFQ09WRVJZX09GRlNFVCAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNRF9GRUFUVVJFX1JFQ09WRVJZX09GRlNFVCAyCiAjZGVmaW5lIE1EX0ZFQVRVUkVfUkVTSEFQRV9BQ1RJVkUgNAogI2RlZmluZSBNRF9GRUFUVVJFX0JBRF9CTE9DS1MgOAogI2RlZmluZSBNRF9GRUFUVVJFX1JFUExBQ0VNRU5UIDE2Ci0jZGVmaW5lIE1EX0ZFQVRVUkVfUkVTSEFQRV9CQUNLV0FSRFMgMzIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1EX0ZFQVRVUkVfUkVTSEFQRV9CQUNLV0FSRFMgMzIKICNkZWZpbmUgTURfRkVBVFVSRV9ORVdfT0ZGU0VUIDY0Ci0jZGVmaW5lIE1EX0ZFQVRVUkVfQUxMIChNRF9GRUFUVVJFX0JJVE1BUF9PRkZTRVQgICB8TURfRkVBVFVSRV9SRUNPVkVSWV9PRkZTRVQgICB8TURfRkVBVFVSRV9SRVNIQVBFX0FDVElWRSAgIHxNRF9GRUFUVVJFX0JBRF9CTE9DS1MgICB8TURfRkVBVFVSRV9SRVBMQUNFTUVOVCAgIHxNRF9GRUFUVVJFX1JFU0hBUEVfQkFDS1dBUkRTICAgfE1EX0ZFQVRVUkVfTkVXX09GRlNFVCAgICkKKyNkZWZpbmUgTURfRkVBVFVSRV9SRUNPVkVSWV9CSVRNQVAgMTI4CisjZGVmaW5lIE1EX0ZFQVRVUkVfQUxMIChNRF9GRUFUVVJFX0JJVE1BUF9PRkZTRVQgICB8TURfRkVBVFVSRV9SRUNPVkVSWV9PRkZTRVQgICB8TURfRkVBVFVSRV9SRVNIQVBFX0FDVElWRSAgIHxNRF9GRUFUVVJFX0JBRF9CTE9DS1MgICB8TURfRkVBVFVSRV9SRVBMQUNFTUVOVCAgIHxNRF9GRUFUVVJFX1JFU0hBUEVfQkFDS1dBUkRTICAgfE1EX0ZFQVRVUkVfTkVXX09GRlNFVCAgIHxNRF9GRUFUVVJFX1JFQ09WRVJZX0JJVE1BUCAgICkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvcmFuZG9tLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3JhbmRvbS5oCmluZGV4IDQzNTYwYjYuLjYyMTVkMDggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvcmFuZG9tLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9yYW5kb20uaApAQCAtMzYsOCArMzYsNCBAQAogIF9fdTMyIGJ1ZlswXTsKIH07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotc3RydWN0IHJuZF9zdGF0ZSB7Ci0gX191MzIgczEsIHMyLCBzMzsKLX07CiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmgKaW5kZXggMmFiZDk3YS4uOTA1NmRlMiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9yZWlzZXJmc194YXR0ci5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcmVpc2VyZnNfeGF0dHIuaApAQCAtMjcsNyArMjcsNyBAQAogfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlIHsKLSBjaGFyICpuYW1lOworIGNvbnN0IGNoYXIgKm5hbWU7CiAgdm9pZCAqdmFsdWU7CiAgc2l6ZV90IGxlbmd0aDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Jlc291cmNlLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Jlc291cmNlLmgKaW5kZXggZTc4ZWQ2MC4uOWQyNjBjMiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9yZXNvdXJjZS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcmVzb3VyY2UuaApAQCAtMjksMjkgKzI5LDI5IEBACiBzdHJ1Y3QgcnVzYWdlIHsKICBzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsKICBzdHJ1Y3QgdGltZXZhbCBydV9zdGltZTsKLSBsb25nIHJ1X21heHJzczsKKyBfX2tlcm5lbF9sb25nX3QgcnVfbWF4cnNzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBsb25nIHJ1X2l4cnNzOwotIGxvbmcgcnVfaWRyc3M7Ci0gbG9uZyBydV9pc3JzczsKLSBsb25nIHJ1X21pbmZsdDsKKyBfX2tlcm5lbF9sb25nX3QgcnVfaXhyc3M7CisgX19rZXJuZWxfbG9uZ190IHJ1X2lkcnNzOworIF9fa2VybmVsX2xvbmdfdCBydV9pc3JzczsKKyBfX2tlcm5lbF9sb25nX3QgcnVfbWluZmx0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBsb25nIHJ1X21hamZsdDsKLSBsb25nIHJ1X25zd2FwOwotIGxvbmcgcnVfaW5ibG9jazsKLSBsb25nIHJ1X291YmxvY2s7CisgX19rZXJuZWxfbG9uZ190IHJ1X21hamZsdDsKKyBfX2tlcm5lbF9sb25nX3QgcnVfbnN3YXA7CisgX19rZXJuZWxfbG9uZ190IHJ1X2luYmxvY2s7CisgX19rZXJuZWxfbG9uZ190IHJ1X291YmxvY2s7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIGxvbmcgcnVfbXNnc25kOwotIGxvbmcgcnVfbXNncmN2OwotIGxvbmcgcnVfbnNpZ25hbHM7Ci0gbG9uZyBydV9udmNzdzsKKyBfX2tlcm5lbF9sb25nX3QgcnVfbXNnc25kOworIF9fa2VybmVsX2xvbmdfdCBydV9tc2dyY3Y7CisgX19rZXJuZWxfbG9uZ190IHJ1X25zaWduYWxzOworIF9fa2VybmVsX2xvbmdfdCBydV9udmNzdzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gbG9uZyBydV9uaXZjc3c7CisgX19rZXJuZWxfbG9uZ190IHJ1X25pdmNzdzsKIH07CiBzdHJ1Y3QgcmxpbWl0IHsKLSB1bnNpZ25lZCBsb25nIHJsaW1fY3VyOworIF9fa2VybmVsX3Vsb25nX3QgcmxpbV9jdXI7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIHVuc2lnbmVkIGxvbmcgcmxpbV9tYXg7CisgX19rZXJuZWxfdWxvbmdfdCBybGltX21heDsKIH07CiAjZGVmaW5lIFJMSU02NF9JTkZJTklUWSAofjBVTEwpCiBzdHJ1Y3QgcmxpbWl0NjQgewpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9ydG5ldGxpbmsuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKaW5kZXggNzE4YTJkYi4uM2EwM2U4OCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9ydG5ldGxpbmsuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3J0bmV0bGluay5oCkBAIC0zNDYsMjM0ICszNDYsMjM2IEBACiAgUlRBWF9JTklUUldORCwKICNkZWZpbmUgUlRBWF9JTklUUldORCBSVEFYX0lOSVRSV05ECiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFJUQVhfUVVJQ0tBQ0ssCisjZGVmaW5lIFJUQVhfUVVJQ0tBQ0sgUlRBWF9RVUlDS0FDSwogIF9fUlRBWF9NQVgKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVEFYX01BWCAoX19SVEFYX01BWCAtIDEpCiAjZGVmaW5lIFJUQVhfRkVBVFVSRV9FQ04gMHgwMDAwMDAwMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRBWF9GRUFUVVJFX1NBQ0sgMHgwMDAwMDAwMgogI2RlZmluZSBSVEFYX0ZFQVRVUkVfVElNRVNUQU1QIDB4MDAwMDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUQVhfRkVBVFVSRV9BTExGUkFHIDB4MDAwMDAwMDgKIHN0cnVjdCBydGFfc2Vzc2lvbiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcHJvdG87CiAgX191OCBwYWQxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBwYWQyOwogIHVuaW9uIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICBfX3UxNiBzcG9ydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgZHBvcnQ7CiAgfSBwb3J0czsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICBfX3U4IHR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggY29kZTsKICBfX3UxNiBpZGVudDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBpY21wdDsKICBfX3UzMiBzcGk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gdTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHJ0YV9tZmNfc3RhdHMgewogIF9fdTY0IG1mY3NfcGFja2V0czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgbWZjc19ieXRlczsKICBfX3U2NCBtZmNzX3dyb25nX2lmOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgcnRnZW5tc2cgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHJ0Z2VuX2ZhbWlseTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlmaW5mb21zZyB7CiAgdW5zaWduZWQgY2hhciBpZmlfZmFtaWx5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIF9faWZpX3BhZDsKICB1bnNpZ25lZCBzaG9ydCBpZmlfdHlwZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGlmaV9pbmRleDsKICB1bnNpZ25lZCBpZmlfZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGlmaV9jaGFuZ2U7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBwcmVmaXhtc2cgewogIHVuc2lnbmVkIGNoYXIgcHJlZml4X2ZhbWlseTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBwcmVmaXhfcGFkMTsKICB1bnNpZ25lZCBzaG9ydCBwcmVmaXhfcGFkMjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHByZWZpeF9pZmluZGV4OwogIHVuc2lnbmVkIGNoYXIgcHJlZml4X3R5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgcHJlZml4X2xlbjsKICB1bnNpZ25lZCBjaGFyIHByZWZpeF9mbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBwcmVmaXhfcGFkMzsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bQogewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQUkVGSVhfVU5TUEVDLAogIFBSRUZJWF9BRERSRVNTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQUkVGSVhfQ0FDSEVJTkZPLAogIF9fUFJFRklYX01BWAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFBSRUZJWF9NQVggKF9fUFJFRklYX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHByZWZpeF9jYWNoZWluZm8gewogIF9fdTMyIHByZWZlcnJlZF90aW1lOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB2YWxpZF90aW1lOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdGNtc2cgewogIHVuc2lnbmVkIGNoYXIgdGNtX2ZhbWlseTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciB0Y21fX3BhZDE7CiAgdW5zaWduZWQgc2hvcnQgdGNtX19wYWQyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgdGNtX2lmaW5kZXg7CiAgX191MzIgdGNtX2hhbmRsZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdGNtX3BhcmVudDsKICBfX3UzMiB0Y21faW5mbzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9VTlNQRUMsCiAgVENBX0tJTkQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9PUFRJT05TLAogIFRDQV9TVEFUUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX1hTVEFUUywKICBUQ0FfUkFURSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX0ZDTlQsCiAgVENBX1NUQVRTMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX1NUQUIsCiAgX19UQ0FfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVENBX01BWCAoX19UQ0FfTUFYIC0gMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDQV9SVEEocikgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCB0Y21zZykpKSkKICNkZWZpbmUgVENBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgdGNtc2cpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuZHVzZXJvcHRtc2cgewogIHVuc2lnbmVkIGNoYXIgbmR1c2Vyb3B0X2ZhbWlseTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBuZHVzZXJvcHRfcGFkMTsKICB1bnNpZ25lZCBzaG9ydCBuZHVzZXJvcHRfb3B0c19sZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBuZHVzZXJvcHRfaWZpbmRleDsKICBfX3U4IG5kdXNlcm9wdF9pY21wX3R5cGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbmR1c2Vyb3B0X2ljbXBfY29kZTsKICB1bnNpZ25lZCBzaG9ydCBuZHVzZXJvcHRfcGFkMjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IG5kdXNlcm9wdF9wYWQzOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBORFVTRVJPUFRfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORFVTRVJPUFRfU1JDQUREUiwKICBfX05EVVNFUk9QVF9NQVgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBORFVTRVJPUFRfTUFYIChfX05EVVNFUk9QVF9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRNR1JQX0xJTksgMQogI2RlZmluZSBSVE1HUlBfTk9USUZZIDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTUdSUF9ORUlHSCA0CiAjZGVmaW5lIFJUTUdSUF9UQyA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE1HUlBfSVBWNF9JRkFERFIgMHgxMAogI2RlZmluZSBSVE1HUlBfSVBWNF9NUk9VVEUgMHgyMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRNR1JQX0lQVjRfUk9VVEUgMHg0MAogI2RlZmluZSBSVE1HUlBfSVBWNF9SVUxFIDB4ODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTUdSUF9JUFY2X0lGQUREUiAweDEwMAogI2RlZmluZSBSVE1HUlBfSVBWNl9NUk9VVEUgMHgyMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTUdSUF9JUFY2X1JPVVRFIDB4NDAwCiAjZGVmaW5lIFJUTUdSUF9JUFY2X0lGSU5GTyAweDgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRNR1JQX0RFQ25ldF9JRkFERFIgMHgxMDAwCiAjZGVmaW5lIFJUTUdSUF9ERUNuZXRfUk9VVEUgMHg0MDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE1HUlBfSVBWNl9QUkVGSVggMHgyMDAwMAogZW51bSBydG5ldGxpbmtfZ3JvdXBzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROTEdSUF9OT05FLAogI2RlZmluZSBSVE5MR1JQX05PTkUgUlROTEdSUF9OT05FCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfTElOSywKICNkZWZpbmUgUlROTEdSUF9MSU5LIFJUTkxHUlBfTElOSworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5MR1JQX05PVElGWSwKICNkZWZpbmUgUlROTEdSUF9OT1RJRlkgUlROTEdSUF9OT1RJRlkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROTEdSUF9ORUlHSCwKICNkZWZpbmUgUlROTEdSUF9ORUlHSCBSVE5MR1JQX05FSUdICisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfVEMsCiAjZGVmaW5lIFJUTkxHUlBfVEMgUlROTEdSUF9UQwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5MR1JQX0lQVjRfSUZBRERSLAogI2RlZmluZSBSVE5MR1JQX0lQVjRfSUZBRERSIFJUTkxHUlBfSVBWNF9JRkFERFIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROTEdSUF9JUFY0X01ST1VURSwKICNkZWZpbmUgUlROTEdSUF9JUFY0X01ST1VURSBSVE5MR1JQX0lQVjRfTVJPVVRFCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfSVBWNF9ST1VURSwKICNkZWZpbmUgUlROTEdSUF9JUFY0X1JPVVRFIFJUTkxHUlBfSVBWNF9ST1VURQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5MR1JQX0lQVjRfUlVMRSwKICNkZWZpbmUgUlROTEdSUF9JUFY0X1JVTEUgUlROTEdSUF9JUFY0X1JVTEUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROTEdSUF9JUFY2X0lGQUREUiwKICNkZWZpbmUgUlROTEdSUF9JUFY2X0lGQUREUiBSVE5MR1JQX0lQVjZfSUZBRERSCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfSVBWNl9NUk9VVEUsCiAjZGVmaW5lIFJUTkxHUlBfSVBWNl9NUk9VVEUgUlROTEdSUF9JUFY2X01ST1VURQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5MR1JQX0lQVjZfUk9VVEUsCiAjZGVmaW5lIFJUTkxHUlBfSVBWNl9ST1VURSBSVE5MR1JQX0lQVjZfUk9VVEUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROTEdSUF9JUFY2X0lGSU5GTywKICNkZWZpbmUgUlROTEdSUF9JUFY2X0lGSU5GTyBSVE5MR1JQX0lQVjZfSUZJTkZPCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfREVDbmV0X0lGQUREUiwKICNkZWZpbmUgUlROTEdSUF9ERUNuZXRfSUZBRERSIFJUTkxHUlBfREVDbmV0X0lGQUREUgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5MR1JQX05PUDIsCiAgUlROTEdSUF9ERUNuZXRfUk9VVEUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE5MR1JQX0RFQ25ldF9ST1VURSBSVE5MR1JQX0RFQ25ldF9ST1VURQogIFJUTkxHUlBfREVDbmV0X1JVTEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE5MR1JQX0RFQ25ldF9SVUxFIFJUTkxHUlBfREVDbmV0X1JVTEUKICBSVE5MR1JQX05PUDQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfSVBWNl9QUkVGSVgsCiAjZGVmaW5lIFJUTkxHUlBfSVBWNl9QUkVGSVggUlROTEdSUF9JUFY2X1BSRUZJWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5MR1JQX0lQVjZfUlVMRSwKICNkZWZpbmUgUlROTEdSUF9JUFY2X1JVTEUgUlROTEdSUF9JUFY2X1JVTEUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROTEdSUF9ORF9VU0VST1BULAogI2RlZmluZSBSVE5MR1JQX05EX1VTRVJPUFQgUlROTEdSUF9ORF9VU0VST1BUCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfUEhPTkVUX0lGQUREUiwKICNkZWZpbmUgUlROTEdSUF9QSE9ORVRfSUZBRERSIFJUTkxHUlBfUEhPTkVUX0lGQUREUgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5MR1JQX1BIT05FVF9ST1VURSwKICNkZWZpbmUgUlROTEdSUF9QSE9ORVRfUk9VVEUgUlROTEdSUF9QSE9ORVRfUk9VVEUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROTEdSUF9EQ0IsCiAjZGVmaW5lIFJUTkxHUlBfRENCIFJUTkxHUlBfRENCCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfSVBWNF9ORVRDT05GLAogI2RlZmluZSBSVE5MR1JQX0lQVjRfTkVUQ09ORiBSVE5MR1JQX0lQVjRfTkVUQ09ORgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5MR1JQX0lQVjZfTkVUQ09ORiwKICNkZWZpbmUgUlROTEdSUF9JUFY2X05FVENPTkYgUlROTEdSUF9JUFY2X05FVENPTkYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROTEdSUF9NREIsCiAjZGVmaW5lIFJUTkxHUlBfTURCIFJUTkxHUlBfTURCCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fUlROTEdSUF9NQVgKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE5MR1JQX01BWCAoX19SVE5MR1JQX01BWCAtIDEpCiBzdHJ1Y3QgdGNhbXNnIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciB0Y2FfZmFtaWx5OwogIHVuc2lnbmVkIGNoYXIgdGNhX19wYWQxOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCB0Y2FfX3BhZDI7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVEFfUlRBKHIpICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgdGNhbXNnKSkpKQogI2RlZmluZSBUQV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IHRjYW1zZykpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ0FfQUNUX1RBQiAxCiAjZGVmaW5lIFRDQUFfTUFYIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJURVhUX0ZJTFRFUl9WRiAoMSA8PCAwKQogI2RlZmluZSBSVEVYVF9GSUxURVJfQlJWTEFOICgxIDw8IDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NjaGVkLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NjaGVkLmgKaW5kZXggYzc1NDJlOC4uZDg3YmMyYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zY2hlZC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvc2NoZWQuaApAQCAtNTMsNiArNTMsOCBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0NIRURfQkFUQ0ggMwogI2RlZmluZSBTQ0hFRF9JRExFIDUKKyNkZWZpbmUgU0NIRURfREVBRExJTkUgNgogI2RlZmluZSBTQ0hFRF9SRVNFVF9PTl9GT1JLIDB4NDAwMDAwMDAKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0NIRURfRkxBR19SRVNFVF9PTl9GT1JLIDB4MDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zZXJpYWxfY29yZS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zZXJpYWxfY29yZS5oCmluZGV4IDI4MzJhMDYuLjU5ZmMzMmEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvc2VyaWFsX2NvcmUuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NlcmlhbF9jb3JlLmgKQEAgLTEzOCw0ICsxMzgsOSBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUE9SVF9BUkMgMTAxCiAjZGVmaW5lIFBPUlRfUlAyIDEwMgorI2RlZmluZSBQT1JUX0xQVUFSVCAxMDMKKyNkZWZpbmUgUE9SVF9IU0NJRiAxMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBPUlRfQVNDIDEwNQorI2RlZmluZSBQT1JUX1RJTEVHWCAxMDYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zaG0uaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvc2htLmgKaW5kZXggYTYyYzVlZi4uMjhlMTY3MCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zaG0uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NobS5oCkBAIC02OSwxMiArNjksMTIgQEAKIH07CiBzdHJ1Y3Qgc2htX2luZm8gewogIGludCB1c2VkX2lkczsKLSB1bnNpZ25lZCBsb25nIHNobV90b3Q7CisgX19rZXJuZWxfdWxvbmdfdCBzaG1fdG90OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSB1bnNpZ25lZCBsb25nIHNobV9yc3M7Ci0gdW5zaWduZWQgbG9uZyBzaG1fc3dwOwotIHVuc2lnbmVkIGxvbmcgc3dhcF9hdHRlbXB0czsKLSB1bnNpZ25lZCBsb25nIHN3YXBfc3VjY2Vzc2VzOworIF9fa2VybmVsX3Vsb25nX3Qgc2htX3JzczsKKyBfX2tlcm5lbF91bG9uZ190IHNobV9zd3A7CisgX19rZXJuZWxfdWxvbmdfdCBzd2FwX2F0dGVtcHRzOworIF9fa2VybmVsX3Vsb25nX3Qgc3dhcF9zdWNjZXNzZXM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zbm1wLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NubXAuaAppbmRleCAxMWI5MGE3Li45ZDVmYjA5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NubXAuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NubXAuaApAQCAtNjEsNiArNjEsMTEgQEAKICBJUFNUQVRTX01JQl9PVVRCQ0FTVE9DVEVUUywKICBJUFNUQVRTX01JQl9DU1VNRVJST1JTLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFNUQVRTX01JQl9OT0VDVFBLVFMsCisgSVBTVEFUU19NSUJfRUNUMVBLVFMsCisgSVBTVEFUU19NSUJfRUNUMFBLVFMsCisgSVBTVEFUU19NSUJfQ0VQS1RTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0lQU1RBVFNfTUlCX01BWAogfTsKIGVudW0KQEAgLTI3OSw0NyArMjg0LDUxIEBACiAgTElOVVhfTUlCX1RDUEZBU1RPUEVOTElTVEVOT1ZFUkZMT1csCiAgTElOVVhfTUlCX1RDUEZBU1RPUEVOQ09PS0lFUkVRRCwKICBMSU5VWF9NSUJfVENQU1BVUklPVVNfUlRYX0hPU1RRVUVVRVMsCi0gX19MSU5VWF9NSUJfTUFYCisgTElOVVhfTUlCX0JVU1lQT0xMUlhQQUNLRVRTLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBMSU5VWF9NSUJfVENQQVVUT0NPUktJTkcsCisgX19MSU5VWF9NSUJfTUFYCiB9OwogZW51bQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICBMSU5VWF9NSUJfWEZSTU5VTSA9IDAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIExJTlVYX01JQl9YRlJNSU5FUlJPUiwKICBMSU5VWF9NSUJfWEZSTUlOQlVGRkVSRVJST1IsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUiwKICBMSU5VWF9NSUJfWEZSTUlOTk9TVEFURVMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIExJTlVYX01JQl9YRlJNSU5TVEFURVBST1RPRVJST1IsCiAgTElOVVhfTUlCX1hGUk1JTlNUQVRFTU9ERUVSUk9SLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMSU5VWF9NSUJfWEZSTUlOU1RBVEVTRVFFUlJPUiwKICBMSU5VWF9NSUJfWEZSTUlOU1RBVEVFWFBJUkVELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMSU5VWF9NSUJfWEZSTUlOU1RBVEVNSVNNQVRDSCwKICBMSU5VWF9NSUJfWEZSTUlOU1RBVEVJTlZBTElELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMSU5VWF9NSUJfWEZSTUlOVE1QTE1JU01BVENILAogIExJTlVYX01JQl9YRlJNSU5OT1BPTFMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIExJTlVYX01JQl9YRlJNSU5QT0xCTE9DSywKICBMSU5VWF9NSUJfWEZSTUlOUE9MRVJST1IsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIExJTlVYX01JQl9YRlJNT1VURVJST1IsCiAgTElOVVhfTUlCX1hGUk1PVVRCVU5ETEVHRU5FUlJPUiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTElOVVhfTUlCX1hGUk1PVVRCVU5ETEVDSEVDS0VSUk9SLAogIExJTlVYX01JQl9YRlJNT1VUTk9TVEFURVMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIExJTlVYX01JQl9YRlJNT1VUU1RBVEVQUk9UT0VSUk9SLAogIExJTlVYX01JQl9YRlJNT1VUU1RBVEVNT0RFRVJST1IsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIExJTlVYX01JQl9YRlJNT1VUU1RBVEVTRVFFUlJPUiwKICBMSU5VWF9NSUJfWEZSTU9VVFNUQVRFRVhQSVJFRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTElOVVhfTUlCX1hGUk1PVVRQT0xCTE9DSywKICBMSU5VWF9NSUJfWEZSTU9VVFBPTERFQUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIExJTlVYX01JQl9YRlJNT1VUUE9MRVJST1IsCiAgTElOVVhfTUlCX1hGUk1GV0RIRFJFUlJPUiwKLSBMSU5VWF9NSUJfWEZSTU9VVFNUQVRFSU5WQUxJRCwKLSBfX0xJTlVYX01JQl9YRlJNTUFYCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIExJTlVYX01JQl9YRlJNT1VUU1RBVEVJTlZBTElELAorIExJTlVYX01JQl9YRlJNQUNRVUlSRUVSUk9SLAorIF9fTElOVVhfTUlCX1hGUk1NQVgKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NvY2tpb3MuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvc29ja2lvcy5oCmluZGV4IGI0Y2QxMDIuLmI1ZTdjNzQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvc29ja2lvcy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvc29ja2lvcy5oCkBAIC02OSw0OSArNjksNDkgQEAKICNkZWZpbmUgU0lPQ0RJRkFERFIgMHg4OTM2CiAjZGVmaW5lIFNJT0NTSUZIV0JST0FEQ0FTVCAweDg5MzcKICNkZWZpbmUgU0lPQ0dJRkNPVU5UIDB4ODkzOAotI2RlZmluZSBTSU9DS0lMTEFERFIgMHg4OTM5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU9DR0lGQlIgMHg4OTQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU9DU0lGQlIgMHg4OTQxCiAjZGVmaW5lIFNJT0NHSUZUWFFMRU4gMHg4OTQyCiAjZGVmaW5lIFNJT0NTSUZUWFFMRU4gMHg4OTQzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU9DRVRIVE9PTCAweDg5NDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJT0NHTUlJUEhZIDB4ODk0NwogI2RlZmluZSBTSU9DR01JSVJFRyAweDg5NDgKICNkZWZpbmUgU0lPQ1NNSUlSRUcgMHg4OTQ5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU9DV0FOREVWIDB4ODk0QQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lPQ09VVFFOU0QgMHg4OTRCCiAjZGVmaW5lIFNJT0NEQVJQIDB4ODk1MwogI2RlZmluZSBTSU9DR0FSUCAweDg5NTQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJT0NTQVJQIDB4ODk1NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lPQ0RSQVJQIDB4ODk2MAogI2RlZmluZSBTSU9DR1JBUlAgMHg4OTYxCiAjZGVmaW5lIFNJT0NTUkFSUCAweDg5NjIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJT0NHSUZNQVAgMHg4OTcwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU9DU0lGTUFQIDB4ODk3MQogI2RlZmluZSBTSU9DQURERExDSSAweDg5ODAKICNkZWZpbmUgU0lPQ0RFTERMQ0kgMHg4OTgxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU9DR0lGVkxBTiAweDg5ODIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJT0NTSUZWTEFOIDB4ODk4MwogI2RlZmluZSBTSU9DQk9OREVOU0xBVkUgMHg4OTkwCiAjZGVmaW5lIFNJT0NCT05EUkVMRUFTRSAweDg5OTEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJT0NCT05EU0VUSFdBRERSIDB4ODk5MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lPQ0JPTkRTTEFWRUlORk9RVUVSWSAweDg5OTMKICNkZWZpbmUgU0lPQ0JPTkRJTkZPUVVFUlkgMHg4OTk0CiAjZGVmaW5lIFNJT0NCT05EQ0hBTkdFQUNUSVZFIDB4ODk5NQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lPQ0JSQUREQlIgMHg4OWEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU9DQlJERUxCUiAweDg5YTEKICNkZWZpbmUgU0lPQ0JSQURESUYgMHg4OWEyCiAjZGVmaW5lIFNJT0NCUkRFTElGIDB4ODlhMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lPQ1NIV1RTVEFNUCAweDg5YjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJT0NHSFdUU1RBTVAgMHg4OWIxCiAjZGVmaW5lIFNJT0NERVZQUklWQVRFIDB4ODlGMAogI2RlZmluZSBTSU9DUFJPVE9QUklWQVRFIDB4ODlFMAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RjX2FjdC90Y19kZWZhY3QuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGNfYWN0L3RjX2RlZmFjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NTRkZmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RjX2FjdC90Y19kZWZhY3QuaApAQCAtMCwwICsxLDM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfVENfREVGX0gKKyNkZWZpbmUgX19MSU5VWF9UQ19ERUZfSAorI2luY2x1ZGUgPGxpbnV4L3BrdF9jbHMuaD4KK3N0cnVjdCB0Y19kZWZhY3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB0Y19nZW47Cit9OworZW51bSB7CisgVENBX0RFRl9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFRDQV9ERUZfVE0sCisgVENBX0RFRl9QQVJNUywKKyBUQ0FfREVGX0RBVEEsCisgX19UQ0FfREVGX01BWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIFRDQV9ERUZfTUFYIChfX1RDQV9ERUZfTUFYIC0gMSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC90Y19hY3QvdGNfaXB0LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RjX2FjdC90Y19pcHQuaAppbmRleCA0NTFmOGVhLi4wMGI4OGI4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RjX2FjdC90Y19pcHQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RjX2FjdC90Y19pcHQuaApAQCAtMjEsMTggKzIxLDE5IEBACiAjaW5jbHVkZSA8bGludXgvcGt0X2Nscy5oPgogI2RlZmluZSBUQ0FfQUNUX0lQVCA2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQ0FfQUNUX1hUIDEwCiBlbnVtIHsKICBUQ0FfSVBUX1VOU1BFQywKICBUQ0FfSVBUX1RBQkxFLAotIFRDQV9JUFRfSE9PSywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVENBX0lQVF9IT09LLAogIFRDQV9JUFRfSU5ERVgsCiAgVENBX0lQVF9DTlQsCiAgVENBX0lQVF9UTSwKLSBUQ0FfSVBUX1RBUkcsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFRDQV9JUFRfVEFSRywKICBfX1RDQV9JUFRfTUFYCiB9OwogI2RlZmluZSBUQ0FfSVBUX01BWCAoX19UQ0FfSVBUX01BWCAtIDEpCi0jZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGNwLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RjcC5oCmluZGV4IGJiMTIxMTguLmE3YjVjNWUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGNwLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC90Y3AuaApAQCAtMTE3LDkwICsxMTcsOTIgQEAKICNkZWZpbmUgVENQX0ZBU1RPUEVOIDIzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ1BfVElNRVNUQU1QIDI0CisjZGVmaW5lIFRDUF9OT1RTRU5UX0xPV0FUIDI1CiBzdHJ1Y3QgdGNwX3JlcGFpcl9vcHQgewogIF9fdTMyIG9wdF9jb2RlOwotIF9fdTMyIG9wdF92YWw7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIG9wdF92YWw7CiB9OwogZW51bSB7CiAgVENQX05PX1FVRVVFLAotIFRDUF9SRUNWX1FVRVVFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBUQ1BfUkVDVl9RVUVVRSwKICBUQ1BfU0VORF9RVUVVRSwKICBUQ1BfUVVFVUVTX05SLAogfTsKLSNkZWZpbmUgVENQSV9PUFRfVElNRVNUQU1QUyAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQ1BJX09QVF9USU1FU1RBTVBTIDEKICNkZWZpbmUgVENQSV9PUFRfU0FDSyAyCiAjZGVmaW5lIFRDUElfT1BUX1dTQ0FMRSA0CiAjZGVmaW5lIFRDUElfT1BUX0VDTiA4Ci0jZGVmaW5lIFRDUElfT1BUX0VDTl9TRUVOIDE2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQ1BJX09QVF9FQ05fU0VFTiAxNgogI2RlZmluZSBUQ1BJX09QVF9TWU5fREFUQSAzMgogZW51bSB0Y3BfY2Ffc3RhdGUgewogIFRDUF9DQV9PcGVuID0gMCwKLSNkZWZpbmUgVENQRl9DQV9PcGVuICgxPDxUQ1BfQ0FfT3BlbikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRDUEZfQ0FfT3BlbiAoMTw8VENQX0NBX09wZW4pCiAgVENQX0NBX0Rpc29yZGVyID0gMSwKICNkZWZpbmUgVENQRl9DQV9EaXNvcmRlciAoMTw8VENQX0NBX0Rpc29yZGVyKQogIFRDUF9DQV9DV1IgPSAyLAotI2RlZmluZSBUQ1BGX0NBX0NXUiAoMTw8VENQX0NBX0NXUikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRDUEZfQ0FfQ1dSICgxPDxUQ1BfQ0FfQ1dSKQogIFRDUF9DQV9SZWNvdmVyeSA9IDMsCiAjZGVmaW5lIFRDUEZfQ0FfUmVjb3ZlcnkgKDE8PFRDUF9DQV9SZWNvdmVyeSkKICBUQ1BfQ0FfTG9zcyA9IDQKLSNkZWZpbmUgVENQRl9DQV9Mb3NzICgxPDxUQ1BfQ0FfTG9zcykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRDUEZfQ0FfTG9zcyAoMTw8VENQX0NBX0xvc3MpCiB9Owogc3RydWN0IHRjcF9pbmZvIHsKICBfX3U4IHRjcGlfc3RhdGU7Ci0gX191OCB0Y3BpX2NhX3N0YXRlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHRjcGlfY2Ffc3RhdGU7CiAgX191OCB0Y3BpX3JldHJhbnNtaXRzOwogIF9fdTggdGNwaV9wcm9iZXM7CiAgX191OCB0Y3BpX2JhY2tvZmY7Ci0gX191OCB0Y3BpX29wdGlvbnM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggdGNwaV9vcHRpb25zOwogIF9fdTggdGNwaV9zbmRfd3NjYWxlIDogNCwgdGNwaV9yY3Zfd3NjYWxlIDogNDsKICBfX3UzMiB0Y3BpX3J0bzsKICBfX3UzMiB0Y3BpX2F0bzsKLSBfX3UzMiB0Y3BpX3NuZF9tc3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHRjcGlfc25kX21zczsKICBfX3UzMiB0Y3BpX3Jjdl9tc3M7CiAgX191MzIgdGNwaV91bmFja2VkOwogIF9fdTMyIHRjcGlfc2Fja2VkOwotIF9fdTMyIHRjcGlfbG9zdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdGNwaV9sb3N0OwogIF9fdTMyIHRjcGlfcmV0cmFuczsKICBfX3UzMiB0Y3BpX2ZhY2tldHM7CiAgX191MzIgdGNwaV9sYXN0X2RhdGFfc2VudDsKLSBfX3UzMiB0Y3BpX2xhc3RfYWNrX3NlbnQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHRjcGlfbGFzdF9hY2tfc2VudDsKICBfX3UzMiB0Y3BpX2xhc3RfZGF0YV9yZWN2OwogIF9fdTMyIHRjcGlfbGFzdF9hY2tfcmVjdjsKICBfX3UzMiB0Y3BpX3BtdHU7Ci0gX191MzIgdGNwaV9yY3Zfc3N0aHJlc2g7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHRjcGlfcmN2X3NzdGhyZXNoOwogIF9fdTMyIHRjcGlfcnR0OwogIF9fdTMyIHRjcGlfcnR0dmFyOwogIF9fdTMyIHRjcGlfc25kX3NzdGhyZXNoOwotIF9fdTMyIHRjcGlfc25kX2N3bmQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHRjcGlfc25kX2N3bmQ7CiAgX191MzIgdGNwaV9hZHZtc3M7CiAgX191MzIgdGNwaV9yZW9yZGVyaW5nOwogIF9fdTMyIHRjcGlfcmN2X3J0dDsKLSBfX3UzMiB0Y3BpX3Jjdl9zcGFjZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdGNwaV9yY3Zfc3BhY2U7CiAgX191MzIgdGNwaV90b3RhbF9yZXRyYW5zOwogfTsKICNkZWZpbmUgVENQX01ENVNJR19NQVhLRVlMRU4gODAKLXN0cnVjdCB0Y3BfbWQ1c2lnIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdGNwX21kNXNpZyB7CiAgc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UgdGNwbV9hZGRyOwogIF9fdTE2IF9fdGNwbV9wYWQxOwogIF9fdTE2IHRjcG1fa2V5bGVuOwotIF9fdTMyIF9fdGNwbV9wYWQyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBfX3RjcG1fcGFkMjsKICBfX3U4IHRjcG1fa2V5W1RDUF9NRDVTSUdfTUFYS0VZTEVOXTsKIH07CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RjcF9tZXRyaWNzLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RjcF9tZXRyaWNzLmgKaW5kZXggNDgyNmJmMC4uNDQ5ZWM5NSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC90Y3BfbWV0cmljcy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGNwX21ldHJpY3MuaApAQCAtNDgsMTcgKzQ4LDE5IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDUF9NRVRSSUNTX0FUVFJfRk9QRU5fU1lOX0RST1BfVFMsCiAgVENQX01FVFJJQ1NfQVRUUl9GT1BFTl9DT09LSUUsCisgVENQX01FVFJJQ1NfQVRUUl9TQUREUl9JUFY0LAorIFRDUF9NRVRSSUNTX0FUVFJfU0FERFJfSVBWNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19UQ1BfTUVUUklDU19BVFRSX01BWCwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ1BfTUVUUklDU19BVFRSX01BWCAoX19UQ1BfTUVUUklDU19BVFRSX01BWCAtIDEpCiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENQX01FVFJJQ1NfQ01EX1VOU1BFQywKICBUQ1BfTUVUUklDU19DTURfR0VULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ1BfTUVUUklDU19DTURfREVMLAogIF9fVENQX01FVFJJQ1NfQ01EX01BWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBUQ1BfTUVUUklDU19DTURfTUFYIChfX1RDUF9NRVRSSUNTX0NNRF9NQVggLSAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC90aW1leC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC90aW1leC5oCmluZGV4IDM3MWQ2NGEuLmE1OTY2OTggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGltZXguaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RpbWV4LmgKQEAgLTIzLDI4ICsyMywyOCBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0aW1leCB7CiAgdW5zaWduZWQgaW50IG1vZGVzOwotIGxvbmcgb2Zmc2V0OwotIGxvbmcgZnJlcTsKKyBfX2tlcm5lbF9sb25nX3Qgb2Zmc2V0OworIF9fa2VybmVsX2xvbmdfdCBmcmVxOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBsb25nIG1heGVycm9yOwotIGxvbmcgZXN0ZXJyb3I7CisgX19rZXJuZWxfbG9uZ190IG1heGVycm9yOworIF9fa2VybmVsX2xvbmdfdCBlc3RlcnJvcjsKICBpbnQgc3RhdHVzOwotIGxvbmcgY29uc3RhbnQ7CisgX19rZXJuZWxfbG9uZ190IGNvbnN0YW50OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBsb25nIHByZWNpc2lvbjsKLSBsb25nIHRvbGVyYW5jZTsKKyBfX2tlcm5lbF9sb25nX3QgcHJlY2lzaW9uOworIF9fa2VybmVsX2xvbmdfdCB0b2xlcmFuY2U7CiAgc3RydWN0IHRpbWV2YWwgdGltZTsKLSBsb25nIHRpY2s7CisgX19rZXJuZWxfbG9uZ190IHRpY2s7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIGxvbmcgcHBzZnJlcTsKLSBsb25nIGppdHRlcjsKKyBfX2tlcm5lbF9sb25nX3QgcHBzZnJlcTsKKyBfX2tlcm5lbF9sb25nX3Qgaml0dGVyOwogIGludCBzaGlmdDsKLSBsb25nIHN0YWJpbDsKKyBfX2tlcm5lbF9sb25nX3Qgc3RhYmlsOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBsb25nIGppdGNudDsKLSBsb25nIGNhbGNudDsKLSBsb25nIGVycmNudDsKLSBsb25nIHN0YmNudDsKKyBfX2tlcm5lbF9sb25nX3Qgaml0Y250OworIF9fa2VybmVsX2xvbmdfdCBjYWxjbnQ7CisgX19rZXJuZWxfbG9uZ190IGVycmNudDsKKyBfX2tlcm5lbF9sb25nX3Qgc3RiY250OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgdGFpOwogIGludCA6MzI7IGludCA6MzI7IGludCA6MzI7IGludCA6MzI7CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VzYi9jaDExLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VzYi9jaDExLmgKaW5kZXggZTI3NDU3ZS4uY2JlM2Q3MCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC91c2IvY2gxMS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdXNiL2NoMTEuaApAQCAtMTksMTgyICsxOSwxODMgQEAKICNpZm5kZWYgX19MSU5VWF9DSDExX0gKICNkZWZpbmUgX19MSU5VWF9DSDExX0gKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2RlZmluZSBVU0JfUlRfSFVCIChVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9ERVZJQ0UpCisjZGVmaW5lIFVTQl9NQVhDSElMRFJFTiAzMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1JUX0hVQiAoVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfREVWSUNFKQogI2RlZmluZSBVU0JfUlRfUE9SVCAoVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfT1RIRVIpCiAjZGVmaW5lIEhVQl9DTEVBUl9UVF9CVUZGRVIgOAogI2RlZmluZSBIVUJfUkVTRVRfVFQgOQotI2RlZmluZSBIVUJfR0VUX1RUX1NUQVRFIDEwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVUJfR0VUX1RUX1NUQVRFIDEwCiAjZGVmaW5lIEhVQl9TVE9QX1RUIDExCiAjZGVmaW5lIEhVQl9TRVRfREVQVEggMTIKICNkZWZpbmUgSFVCX0dFVF9QT1JUX0VSUl9DT1VOVCAxMwotI2RlZmluZSBDX0hVQl9MT0NBTF9QT1dFUiAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDX0hVQl9MT0NBTF9QT1dFUiAwCiAjZGVmaW5lIENfSFVCX09WRVJfQ1VSUkVOVCAxCiAjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ09OTkVDVElPTiAwCiAjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfRU5BQkxFIDEKLSNkZWZpbmUgVVNCX1BPUlRfRkVBVF9TVVNQRU5EIDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfU1VTUEVORCAyCiAjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfT1ZFUl9DVVJSRU5UIDMKICNkZWZpbmUgVVNCX1BPUlRfRkVBVF9SRVNFVCA0CiAjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfTDEgNQotI2RlZmluZSBVU0JfUE9SVF9GRUFUX1BPV0VSIDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfUE9XRVIgOAogI2RlZmluZSBVU0JfUE9SVF9GRUFUX0xPV1NQRUVEIDkKICNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT04gMTYKICNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DX0VOQUJMRSAxNwotI2RlZmluZSBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORCAxOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQgMTgKICNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DX09WRVJfQ1VSUkVOVCAxOQogI2RlZmluZSBVU0JfUE9SVF9GRUFUX0NfUkVTRVQgMjAKICNkZWZpbmUgVVNCX1BPUlRfRkVBVF9URVNUIDIxCi0jZGVmaW5lIFVTQl9QT1JUX0ZFQVRfSU5ESUNBVE9SIDIyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfUE9SVF9GRUFUX0lORElDQVRPUiAyMgogI2RlZmluZSBVU0JfUE9SVF9GRUFUX0NfUE9SVF9MMSAyMwogI2RlZmluZSBVU0JfUE9SVF9GRUFUX0xJTktfU1RBVEUgNQogI2RlZmluZSBVU0JfUE9SVF9GRUFUX1UxX1RJTUVPVVQgMjMKLSNkZWZpbmUgVVNCX1BPUlRfRkVBVF9VMl9USU1FT1VUIDI0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfUE9SVF9GRUFUX1UyX1RJTUVPVVQgMjQKICNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DX1BPUlRfTElOS19TVEFURSAyNQogI2RlZmluZSBVU0JfUE9SVF9GRUFUX0NfUE9SVF9DT05GSUdfRVJST1IgMjYKICNkZWZpbmUgVVNCX1BPUlRfRkVBVF9SRU1PVEVfV0FLRV9NQVNLIDI3Ci0jZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQkhfUE9SVF9SRVNFVCAyOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9CSF9QT1JUX1JFU0VUIDI4CiAjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19CSF9QT1JUX1JFU0VUIDI5CiAjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfRk9SQ0VfTElOS1BNX0FDQ0VQVCAzMAogI2RlZmluZSBVU0JfUE9SVF9MUE1fVElNRU9VVChwKSAoKChwKSAmIDB4ZmYpIDw8IDgpCi0jZGVmaW5lIFVTQl9QT1JUX0ZFQVRfUkVNT1RFX1dBS0VfQ09OTkVDVCAoMSA8PCA4KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9SRU1PVEVfV0FLRV9DT05ORUNUICgxIDw8IDgpCiAjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfUkVNT1RFX1dBS0VfRElTQ09OTkVDVCAoMSA8PCA5KQogI2RlZmluZSBVU0JfUE9SVF9GRUFUX1JFTU9URV9XQUtFX09WRVJfQ1VSUkVOVCAoMSA8PCAxMCkKIHN0cnVjdCB1c2JfcG9ydF9zdGF0dXMgewotIF9fbGUxNiB3UG9ydFN0YXR1czsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTE2IHdQb3J0U3RhdHVzOwogIF9fbGUxNiB3UG9ydENoYW5nZTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04gMHgwMDAxCi0jZGVmaW5lIFVTQl9QT1JUX1NUQVRfRU5BQkxFIDB4MDAwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9FTkFCTEUgMHgwMDAyCiAjZGVmaW5lIFVTQl9QT1JUX1NUQVRfU1VTUEVORCAweDAwMDQKICNkZWZpbmUgVVNCX1BPUlRfU1RBVF9PVkVSQ1VSUkVOVCAweDAwMDgKICNkZWZpbmUgVVNCX1BPUlRfU1RBVF9SRVNFVCAweDAwMTAKLSNkZWZpbmUgVVNCX1BPUlRfU1RBVF9MMSAweDAwMjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfTDEgMHgwMDIwCiAjZGVmaW5lIFVTQl9QT1JUX1NUQVRfUE9XRVIgMHgwMTAwCiAjZGVmaW5lIFVTQl9QT1JUX1NUQVRfTE9XX1NQRUVEIDB4MDIwMAogI2RlZmluZSBVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQgMHgwNDAwCi0jZGVmaW5lIFVTQl9QT1JUX1NUQVRfVEVTVCAweDA4MDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfVEVTVCAweDA4MDAKICNkZWZpbmUgVVNCX1BPUlRfU1RBVF9JTkRJQ0FUT1IgMHgxMDAwCiAjZGVmaW5lIFVTQl9QT1JUX1NUQVRfTElOS19TVEFURSAweDAxZTAKICNkZWZpbmUgVVNCX1NTX1BPUlRfU1RBVF9QT1dFUiAweDAyMDAKLSNkZWZpbmUgVVNCX1NTX1BPUlRfU1RBVF9TUEVFRCAweDFjMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9TU19QT1JUX1NUQVRfU1BFRUQgMHgxYzAwCiAjZGVmaW5lIFVTQl9QT1JUX1NUQVRfU1BFRURfNUdCUFMgMHgwMDAwCiAjZGVmaW5lIFVTQl9TU19QT1JUX1NUQVRfTUFTSyAoVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OIHwgICBVU0JfUE9SVF9TVEFUX0VOQUJMRSB8ICAgVVNCX1BPUlRfU1RBVF9PVkVSQ1VSUkVOVCB8ICAgVVNCX1BPUlRfU1RBVF9SRVNFVCkKICNkZWZpbmUgVVNCX1NTX1BPUlRfTFNfVTAgMHgwMDAwCi0jZGVmaW5lIFVTQl9TU19QT1JUX0xTX1UxIDB4MDAyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1NTX1BPUlRfTFNfVTEgMHgwMDIwCiAjZGVmaW5lIFVTQl9TU19QT1JUX0xTX1UyIDB4MDA0MAogI2RlZmluZSBVU0JfU1NfUE9SVF9MU19VMyAweDAwNjAKICNkZWZpbmUgVVNCX1NTX1BPUlRfTFNfU1NfRElTQUJMRUQgMHgwMDgwCi0jZGVmaW5lIFVTQl9TU19QT1JUX0xTX1JYX0RFVEVDVCAweDAwYTAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9TU19QT1JUX0xTX1JYX0RFVEVDVCAweDAwYTAKICNkZWZpbmUgVVNCX1NTX1BPUlRfTFNfU1NfSU5BQ1RJVkUgMHgwMGMwCiAjZGVmaW5lIFVTQl9TU19QT1JUX0xTX1BPTExJTkcgMHgwMGUwCiAjZGVmaW5lIFVTQl9TU19QT1JUX0xTX1JFQ09WRVJZIDB4MDEwMAotI2RlZmluZSBVU0JfU1NfUE9SVF9MU19IT1RfUkVTRVQgMHgwMTIwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfU1NfUE9SVF9MU19IT1RfUkVTRVQgMHgwMTIwCiAjZGVmaW5lIFVTQl9TU19QT1JUX0xTX0NPTVBfTU9EIDB4MDE0MAogI2RlZmluZSBVU0JfU1NfUE9SVF9MU19MT09QQkFDSyAweDAxNjAKICNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DX0NPTk5FQ1RJT04gMHgwMDAxCi0jZGVmaW5lIFVTQl9QT1JUX1NUQVRfQ19FTkFCTEUgMHgwMDAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NfRU5BQkxFIDB4MDAwMgogI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NfU1VTUEVORCAweDAwMDQKICNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DX09WRVJDVVJSRU5UIDB4MDAwOAogI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NfUkVTRVQgMHgwMDEwCi0jZGVmaW5lIFVTQl9QT1JUX1NUQVRfQ19MMSAweDAwMjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfQ19MMSAweDAwMjAKICNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DX0JIX1JFU0VUIDB4MDAyMAogI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NfTElOS19TVEFURSAweDAwNDAKICNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DX0NPTkZJR19FUlJPUiAweDAwODAKLSNkZWZpbmUgSFVCX0NIQVJfTFBTTSAweDAwMDMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhVQl9DSEFSX0xQU00gMHgwMDAzCiAjZGVmaW5lIEhVQl9DSEFSX0NPTU1PTl9MUFNNIDB4MDAwMAogI2RlZmluZSBIVUJfQ0hBUl9JTkRWX1BPUlRfTFBTTSAweDAwMDEKICNkZWZpbmUgSFVCX0NIQVJfTk9fTFBTTSAweDAwMDIKLSNkZWZpbmUgSFVCX0NIQVJfQ09NUE9VTkQgMHgwMDA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVUJfQ0hBUl9DT01QT1VORCAweDAwMDQKICNkZWZpbmUgSFVCX0NIQVJfT0NQTSAweDAwMTgKICNkZWZpbmUgSFVCX0NIQVJfQ09NTU9OX09DUE0gMHgwMDAwCiAjZGVmaW5lIEhVQl9DSEFSX0lORFZfUE9SVF9PQ1BNIDB4MDAwOAotI2RlZmluZSBIVUJfQ0hBUl9OT19PQ1BNIDB4MDAxMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSFVCX0NIQVJfTk9fT0NQTSAweDAwMTAKICNkZWZpbmUgSFVCX0NIQVJfVFRUVCAweDAwNjAKICNkZWZpbmUgSFVCX0NIQVJfUE9SVElORCAweDAwODAKIHN0cnVjdCB1c2JfaHViX3N0YXR1cyB7Ci0gX19sZTE2IHdIdWJTdGF0dXM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUxNiB3SHViU3RhdHVzOwogIF9fbGUxNiB3SHViQ2hhbmdlOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAjZGVmaW5lIEhVQl9TVEFUVVNfTE9DQUxfUE9XRVIgMHgwMDAxCi0jZGVmaW5lIEhVQl9TVEFUVVNfT1ZFUkNVUlJFTlQgMHgwMDAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVUJfU1RBVFVTX09WRVJDVVJSRU5UIDB4MDAwMgogI2RlZmluZSBIVUJfQ0hBTkdFX0xPQ0FMX1BPV0VSIDB4MDAwMQogI2RlZmluZSBIVUJfQ0hBTkdFX09WRVJDVVJSRU5UIDB4MDAwMgogI2RlZmluZSBVU0JfRFRfSFVCIChVU0JfVFlQRV9DTEFTUyB8IDB4MDkpCi0jZGVmaW5lIFVTQl9EVF9TU19IVUIgKFVTQl9UWVBFX0NMQVNTIHwgMHgwYSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9EVF9TU19IVUIgKFVTQl9UWVBFX0NMQVNTIHwgMHgwYSkKICNkZWZpbmUgVVNCX0RUX0hVQl9OT05WQVJfU0laRSA3CiAjZGVmaW5lIFVTQl9EVF9TU19IVUJfU0laRSAxMgogI2RlZmluZSBVU0JfSFVCX1BSX0ZTIDAKLSNkZWZpbmUgVVNCX0hVQl9QUl9IU19OT19UVCAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfSFVCX1BSX0hTX05PX1RUIDAKICNkZWZpbmUgVVNCX0hVQl9QUl9IU19TSU5HTEVfVFQgMQogI2RlZmluZSBVU0JfSFVCX1BSX0hTX01VTFRJX1RUIDIKICNkZWZpbmUgVVNCX0hVQl9QUl9TUyAzCi1zdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yIHsKICBfX3U4IGJEZXNjTGVuZ3RoOwogIF9fdTggYkRlc2NyaXB0b3JUeXBlOwogIF9fdTggYk5iclBvcnRzOwotIF9fbGUxNiB3SHViQ2hhcmFjdGVyaXN0aWNzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMTYgd0h1YkNoYXJhY3RlcmlzdGljczsKICBfX3U4IGJQd3JPbjJQd3JHb29kOwogIF9fdTggYkh1YkNvbnRyQ3VycmVudDsKICB1bmlvbiB7Ci0gc3RydWN0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHsKICBfX3U4IERldmljZVJlbW92YWJsZVsoVVNCX01BWENISUxEUkVOICsgMSArIDcpIC8gOF07CiAgX191OCBQb3J0UHdyQ3RybE1hc2tbKFVTQl9NQVhDSElMRFJFTiArIDEgKyA3KSAvIDhdOwogIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhzOwotIHN0cnVjdCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB7CiAgX191OCBiSHViSGRyRGVjTGF0OwogIF9fbGUxNiB3SHViRGVsYXk7CiAgX19sZTE2IERldmljZVJlbW92YWJsZTsKLSB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBzczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgc3M7CiAgfSB1OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAjZGVmaW5lIEhVQl9MRURfQVVUTyAwCi0jZGVmaW5lIEhVQl9MRURfQU1CRVIgMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSFVCX0xFRF9BTUJFUiAxCiAjZGVmaW5lIEhVQl9MRURfR1JFRU4gMgogI2RlZmluZSBIVUJfTEVEX09GRiAzCiBlbnVtIGh1Yl9sZWRfbW9kZSB7Ci0gSU5ESUNBVE9SX0FVVE8gPSAwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJTkRJQ0FUT1JfQVVUTyA9IDAsCiAgSU5ESUNBVE9SX0NZQ0xFLAogIElORElDQVRPUl9HUkVFTl9CTElOSywgSU5ESUNBVE9SX0dSRUVOX0JMSU5LX09GRiwKICBJTkRJQ0FUT1JfQU1CRVJfQkxJTkssIElORElDQVRPUl9BTUJFUl9CTElOS19PRkYsCi0gSU5ESUNBVE9SX0FMVF9CTElOSywgSU5ESUNBVE9SX0FMVF9CTElOS19PRkYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSU5ESUNBVE9SX0FMVF9CTElOSywgSU5ESUNBVE9SX0FMVF9CTElOS19PRkYKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogI2RlZmluZSBIVUJfVFRUVF84X0JJVFMgMHgwMAogI2RlZmluZSBIVUJfVFRUVF8xNl9CSVRTIDB4MjAKLSNkZWZpbmUgSFVCX1RUVFRfMjRfQklUUyAweDQwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVUJfVFRUVF8yNF9CSVRTIDB4NDAKICNkZWZpbmUgSFVCX1RUVFRfMzJfQklUUyAweDYwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdjRsMi1jb250cm9scy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLWNvbnRyb2xzLmgKaW5kZXggNDdkY2U0NS4uMjIzNmZmNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLWNvbnRyb2xzLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLWNvbnRyb2xzLmgKQEAgLTEyMiw3NzMgKzEyMiw4MDkgQEAKICNkZWZpbmUgVjRMMl9DSURfVVNFUl9TMjI1NV9CQVNFIChWNEwyX0NJRF9VU0VSX0JBU0UgKyAweDEwMzApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9VU0VSX1NJNDc2WF9CQVNFIChWNEwyX0NJRF9VU0VSX0JBU0UgKyAweDEwNDApCisjZGVmaW5lIFY0TDJfQ0lEX1VTRVJfVElfVlBFX0JBU0UgKFY0TDJfQ0lEX1VTRVJfQkFTRSArIDB4MTA1MCkKKyNkZWZpbmUgVjRMMl9DSURfVVNFUl9TQUE3MTM0X0JBU0UgKFY0TDJfQ0lEX1VTRVJfQkFTRSArIDB4MTA2MCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19CQVNFIChWNEwyX0NUUkxfQ0xBU1NfTVBFRyB8IDB4OTAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19DTEFTUyAoVjRMMl9DVFJMX0NMQVNTX01QRUcgfCAxKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFIChWNEwyX0NJRF9NUEVHX0JBU0UrMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfbXBlZ19zdHJlYW1fdHlwZSB7CiAgVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1BTID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1RTID0gMSwKICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzFfU1MgPSAyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfRFZEID0gMywKICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzFfVkNEID0gNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1NWQ0QgPSA1LAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QTVQgKFY0TDJfQ0lEX01QRUdfQkFTRSsxKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfQVVESU8gKFY0TDJfQ0lEX01QRUdfQkFTRSsyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1ZJREVPIChWNEwyX0NJRF9NUEVHX0JBU0UrMykKICNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BDUiAoVjRMMl9DSURfTVBFR19CQVNFKzQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfQVVESU8gKFY0TDJfQ0lEX01QRUdfQkFTRSs1KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfVklERU8gKFY0TDJfQ0lEX01QRUdfQkFTRSs2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVCAoVjRMMl9DSURfTVBFR19CQVNFKzcpCiBlbnVtIHY0bDJfbXBlZ19zdHJlYW1fdmJpX2ZtdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9OT05FID0gMCwKICBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUViA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19TQU1QTElOR19GUkVRIChWNEwyX0NJRF9NUEVHX0JBU0UrMTAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX2F1ZGlvX3NhbXBsaW5nX2ZyZXEgewogIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ0MTAwID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDAgPSAxLAogIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzMyMDAwID0gMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HIChWNEwyX0NJRF9NUEVHX0JBU0UrMTAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX2F1ZGlvX2VuY29kaW5nIHsKICBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMSA9IDAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yID0gMSwKICBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMyA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMgPSAzLAogIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMgPSA0LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTDFfQklUUkFURSAoVjRMMl9DSURfTVBFR19CQVNFKzEwMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfbXBlZ19hdWRpb19sMV9iaXRyYXRlIHsKICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zMksgPSAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV82NEsgPSAxLAogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzk2SyA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzEyOEsgPSAzLAogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzE2MEsgPSA0LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8xOTJLID0gNSwKICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8yMjRLID0gNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMjU2SyA9IDcsCiAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMjg4SyA9IDgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzMyMEsgPSA5LAogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzM1MksgPSAxMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMzg0SyA9IDExLAogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzQxNksgPSAxMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfNDQ4SyA9IDEzLAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURSAoVjRMMl9DSURfTVBFR19CQVNFKzEwMykKIGVudW0gdjRsMl9tcGVnX2F1ZGlvX2wyX2JpdHJhdGUgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zMksgPSAwLAogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzQ4SyA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzU2SyA9IDIsCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfNjRLID0gMywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfODBLID0gNCwKICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV85NksgPSA1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xMTJLID0gNiwKICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xMjhLID0gNywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTYwSyA9IDgsCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTkySyA9IDksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzIyNEsgPSAxMCwKICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yNTZLID0gMTEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzMyMEsgPSAxMiwKICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLID0gMTMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMTA0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX2F1ZGlvX2wzX2JpdHJhdGUgewogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMySyA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzQwSyA9IDEsCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNDhLID0gMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNTZLID0gMywKICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV82NEsgPSA0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV84MEsgPSA1LAogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzk2SyA9IDYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzExMksgPSA3LAogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzEyOEsgPSA4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8xNjBLID0gOSwKICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8xOTJLID0gMTAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzIyNEsgPSAxMSwKICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8yNTZLID0gMTIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMyMEsgPSAxMywKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREUgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDUpCiBlbnVtIHY0bDJfbXBlZ19hdWRpb19tb2RlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX01PREVfU1RFUkVPID0gMCwKICBWNEwyX01QRUdfQVVESU9fTU9ERV9KT0lOVF9TVEVSRU8gPSAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTU9ERV9EVUFMID0gMiwKICBWNEwyX01QRUdfQVVESU9fTU9ERV9NT05PID0gMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OIChWNEwyX0NJRF9NUEVHX0JBU0UrMTA2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX2F1ZGlvX21vZGVfZXh0ZW5zaW9uIHsKICBWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfNCA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF84ID0gMSwKICBWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfMTIgPSAyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfMTYgPSAzLAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fRU1QSEFTSVMgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDcpCiBlbnVtIHY0bDJfbXBlZ19hdWRpb19lbXBoYXNpcyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FID0gMCwKICBWNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfNTBfRElWXzE1X3VTID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX0NDSVRUX0oxNyA9IDIsCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19DUkMgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDgpCiBlbnVtIHY0bDJfbXBlZ19hdWRpb19jcmMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fQ1JDX05PTkUgPSAwLAogIFY0TDJfTVBFR19BVURJT19DUkNfQ1JDMTYgPSAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURSAoVjRMMl9DSURfTVBFR19CQVNFKzEwOSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fQUFDX0JJVFJBVEUgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMTApCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEUgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMTEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX21wZWdfYXVkaW9fYWMzX2JpdHJhdGUgewogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zMksgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDBLID0gMSwKICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDhLID0gMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzU2SyA9IDMsCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzY0SyA9IDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV84MEsgPSA1LAogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV85NksgPSA2LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTEySyA9IDcsCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzEyOEsgPSA4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTYwSyA9IDksCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzE5MksgPSAxMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzIyNEsgPSAxMSwKICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2SyA9IDEyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzIwSyA9IDEzLAogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLID0gMTQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV80NDhLID0gMTUsCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzUxMksgPSAxNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzU3NksgPSAxNywKICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNjQwSyA9IDE4LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fREVDX1BMQVlCQUNLIChWNEwyX0NJRF9NUEVHX0JBU0UrMTEyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX2F1ZGlvX2RlY19wbGF5YmFjayB7CiAgVjRMMl9NUEVHX0FVRElPX0RFQ19QTEFZQkFDS19BVVRPID0gMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0RFQ19QTEFZQkFDS19TVEVSRU8gPSAxLAogIFY0TDJfTVBFR19BVURJT19ERUNfUExBWUJBQ0tfTEVGVCA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19ERUNfUExBWUJBQ0tfUklHSFQgPSAzLAogIFY0TDJfTVBFR19BVURJT19ERUNfUExBWUJBQ0tfTU9OTyA9IDQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19ERUNfUExBWUJBQ0tfU1dBUFBFRF9TVEVSRU8gPSA1LAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fREVDX01VTFRJTElOR1VBTF9QTEFZQkFDSyAoVjRMMl9DSURfTVBFR19CQVNFKzExMykKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORyAoVjRMMl9DSURfTVBFR19CQVNFKzIwMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfbXBlZ192aWRlb19lbmNvZGluZyB7CiAgVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMSA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzIgPSAxLAogIFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDID0gMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVCAoVjRMMl9DSURfTVBFR19CQVNFKzIwMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfbXBlZ192aWRlb19hc3BlY3QgewogIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMXgxID0gMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDMgPSAxLAogIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OSA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMjIxeDEwMCA9IDMsCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUyAoVjRMMl9DSURfTVBFR19CQVNFKzIwMikKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRSAoVjRMMl9DSURfTVBFR19CQVNFKzIwMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX0NMT1NVUkUgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDQpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fUFVMTERPV04gKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERSAoVjRMMl9DSURfTVBFR19CQVNFKzIwNikKIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2JpdHJhdGVfbW9kZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSID0gMCwKICBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUiA9IDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUsgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDgpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVEVNUE9SQUxfREVDSU1BVElPTiAoVjRMMl9DSURfTVBFR19CQVNFKzIwOSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURSAoVjRMMl9DSURfTVBFR19CQVNFKzIxMCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVVRFX1lVViAoVjRMMl9DSURfTVBFR19CQVNFKzIxMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fREVDT0RFUl9TTElDRV9JTlRFUkZBQ0UgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTIpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fREVDT0RFUl9NUEVHNF9ERUJMT0NLX0ZJTFRFUiAoVjRMMl9DSURfTVBFR19CQVNFKzIxMykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQ1lDTElDX0lOVFJBX1JFRlJFU0hfTUIgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTQpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fRlJBTUVfUkNfRU5BQkxFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjE1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IRUFERVJfTU9ERSAoVjRMMl9DSURfTVBFR19CQVNFKzIxNikKIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2hlYWRlcl9tb2RlIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0hFQURFUl9NT0RFX1NFUEFSQVRFID0gMCwKICBWNEwyX01QRUdfVklERU9fSEVBREVSX01PREVfSk9JTkVEX1dJVEhfMVNUX0ZSQU1FID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01BWF9SRUZfUElDIChWNEwyX0NJRF9NUEVHX0JBU0UrMjE3KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NQl9SQ19FTkFCTEUgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTgpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVVMVElfU0xJQ0VfTUFYX0JZVEVTIChWNEwyX0NJRF9NUEVHX0JBU0UrMjE5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NQVhfTUIgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMjApCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVVMVElfU0xJQ0VfTU9ERSAoVjRMMl9DSURfTVBFR19CQVNFKzIyMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfbXBlZ192aWRlb19tdWx0aV9zbGljZV9tb2RlIHsKICBWNEwyX01QRUdfVklERU9fTVVMVElfU0xJQ0VfTU9ERV9TSU5HTEUgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fTVVMVElfU0lDRV9NT0RFX01BWF9NQiA9IDEsCiAgVjRMMl9NUEVHX1ZJREVPX01VTFRJX1NJQ0VfTU9ERV9NQVhfQllURVMgPSAyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVkJWX1NJWkUgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMjIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0RFQ19QVFMgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMjMpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fREVDX0ZSQU1FIChWNEwyX0NJRF9NUEVHX0JBU0UrMjI0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WQlZfREVMQVkgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMjUpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fUkVQRUFUX1NFUV9IRUFERVIgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMjYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjNfSV9GUkFNRV9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzMwMCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjYzX1BfRlJBTUVfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSszMDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjNfQl9GUkFNRV9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzMwMikKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjYzX01JTl9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzMwMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19NQVhfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSszMDQpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9JX0ZSQU1FX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrMzUwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1BfRlJBTUVfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSszNTEpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9CX0ZSQU1FX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrMzUyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X01JTl9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzM1MykKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X01BWF9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzM1NCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF84WDhfVFJBTlNGT1JNIChWNEwyX0NJRF9NUEVHX0JBU0UrMzU1KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfQ1BCX1NJWkUgKFY0TDJfQ0lEX01QRUdfQkFTRSszNTYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfRU5UUk9QWV9NT0RFIChWNEwyX0NJRF9NUEVHX0JBU0UrMzU3KQogZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9lbnRyb3B5X21vZGUgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9FTlRST1BZX01PREVfQ0FWTEMgPSAwLAogIFY0TDJfTVBFR19WSURFT19IMjY0X0VOVFJPUFlfTU9ERV9DQUJBQyA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0lfUEVSSU9EIChWNEwyX0NJRF9NUEVHX0JBU0UrMzU4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0xFVkVMIChWNEwyX0NJRF9NUEVHX0JBU0UrMzU5KQogZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9sZXZlbCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFfMCA9IDAsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMUIgPSAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8xXzEgPSAyLAogIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFfMiA9IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFfMyA9IDQsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMl8wID0gNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMl8xID0gNiwKICBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8yXzIgPSA3LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8zXzAgPSA4LAogIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzNfMSA9IDksCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzNfMiA9IDEwLAogIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzRfMCA9IDExLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF80XzEgPSAxMiwKICBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF80XzIgPSAxMywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNV8wID0gMTQsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNV8xID0gMTUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0xPT1BfRklMVEVSX0FMUEhBIChWNEwyX0NJRF9NUEVHX0JBU0UrMzYwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0xPT1BfRklMVEVSX0JFVEEgKFY0TDJfQ0lEX01QRUdfQkFTRSszNjEpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9NT0RFIChWNEwyX0NJRF9NUEVHX0JBU0UrMzYyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2gyNjRfbG9vcF9maWx0ZXJfbW9kZSB7CiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfTU9ERV9FTkFCTEVEID0gMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfTU9ERV9ESVNBQkxFRCA9IDEsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfTU9ERV9ESVNBQkxFRF9BVF9TTElDRV9CT1VOREFSWSA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1BST0ZJTEUgKFY0TDJfQ0lEX01QRUdfQkFTRSszNjMpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9wcm9maWxlIHsKICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0JBU0VMSU5FID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9DT05TVFJBSU5FRF9CQVNFTElORSA9IDEsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9NQUlOID0gMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9FWFRFTkRFRCA9IDMsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9ISUdIID0gNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9ISUdIXzEwID0gNSwKICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfNDIyID0gNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9ISUdIXzQ0NF9QUkVESUNUSVZFID0gNywKICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfMTBfSU5UUkEgPSA4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfNDIyX0lOVFJBID0gOSwKICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfNDQ0X0lOVFJBID0gMTAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfQ0FWTENfNDQ0X0lOVFJBID0gMTEsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9TQ0FMQUJMRV9CQVNFTElORSA9IDEyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NDQUxBQkxFX0hJR0ggPSAxMywKICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NDQUxBQkxFX0hJR0hfSU5UUkEgPSAxNCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9TVEVSRU9fSElHSCA9IDE1LAogIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfTVVMVElWSUVXX0hJR0ggPSAxNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfVlVJX0VYVF9TQVJfSEVJR0hUIChWNEwyX0NJRF9NUEVHX0JBU0UrMzY0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1ZVSV9FWFRfU0FSX1dJRFRIIChWNEwyX0NJRF9NUEVHX0JBU0UrMzY1KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9FTkFCTEUgKFY0TDJfQ0lEX01QRUdfQkFTRSszNjYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JREMgKFY0TDJfQ0lEX01QRUdfQkFTRSszNjcpCiBlbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X3Z1aV9zYXJfaWRjIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfVU5TUEVDSUZJRUQgPSAwLAogIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzF4MSA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzEyeDExID0gMiwKICBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18xMHgxMSA9IDMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzE2eDExID0gNCwKICBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ180MHgzMyA9IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzI0eDExID0gNiwKICBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18yMHgxMSA9IDcsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzMyeDExID0gOCwKICBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ184MHgzMyA9IDksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzE4eDExID0gMTAsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMTV4MTEgPSAxMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfNjR4MzMgPSAxMiwKICBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18xNjB4OTkgPSAxMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfNHgzID0gMTQsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfM3gyID0gMTUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzJ4MSA9IDE2LAogIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDX0VYVEVOREVEID0gMTcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1NFSV9GUkFNRV9QQUNLSU5HIChWNEwyX0NJRF9NUEVHX0JBU0UrMzY4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1NFSV9GUF9DVVJSRU5UX0ZSQU1FXzAgKFY0TDJfQ0lEX01QRUdfQkFTRSszNjkpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9TRUlfRlBfQVJSQU5HRU1FTlRfVFlQRSAoVjRMMl9DSURfTVBFR19CQVNFKzM3MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X3NlaV9mcF9hcnJhbmdlbWVudF90eXBlIHsKICBWNEwyX01QRUdfVklERU9fSDI2NF9TRUlfRlBfQVJSQU5HRU1FTlRfVFlQRV9DSEVDS0VSQk9BUkQgPSAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9TRUlfRlBfQVJSQU5HRU1FTlRfVFlQRV9DT0xVTU4gPSAxLAogIFY0TDJfTVBFR19WSURFT19IMjY0X1NFSV9GUF9BUlJBTkdFTUVOVF9UWVBFX1JPVyA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X1NFSV9GUF9BUlJBTkdFTUVOVF9UWVBFX1NJREVfQllfU0lERSA9IDMsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfU0VJX0ZQX0FSUkFOR0VNRU5UX1RZUEVfVE9QX0JPVFRPTSA9IDQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X1NFSV9GUF9BUlJBTkdFTUVOVF9UWVBFX1RFTVBPUkFMID0gNSwKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfRk1PIChWNEwyX0NJRF9NUEVHX0JBU0UrMzcxKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfRk1PX01BUF9UWVBFIChWNEwyX0NJRF9NUEVHX0JBU0UrMzcyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2gyNjRfZm1vX21hcF90eXBlIHsKICBWNEwyX01QRUdfVklERU9fSDI2NF9GTU9fTUFQX1RZUEVfSU5URVJMRUFWRURfU0xJQ0VTID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfRk1PX01BUF9UWVBFX1NDQVRURVJFRF9TTElDRVMgPSAxLAogIFY0TDJfTVBFR19WSURFT19IMjY0X0ZNT19NQVBfVFlQRV9GT1JFR1JPVU5EX1dJVEhfTEVGVF9PVkVSID0gMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfRk1PX01BUF9UWVBFX0JPWF9PVVQgPSAzLAogIFY0TDJfTVBFR19WSURFT19IMjY0X0ZNT19NQVBfVFlQRV9SQVNURVJfU0NBTiA9IDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X0ZNT19NQVBfVFlQRV9XSVBFX1NDQU4gPSA1LAogIFY0TDJfTVBFR19WSURFT19IMjY0X0ZNT19NQVBfVFlQRV9FWFBMSUNJVCA9IDYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0ZNT19TTElDRV9HUk9VUCAoVjRMMl9DSURfTVBFR19CQVNFKzM3MykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9GTU9fQ0hBTkdFX0RJUkVDVElPTiAoVjRMMl9DSURfTVBFR19CQVNFKzM3NCkKIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2gyNjRfZm1vX2NoYW5nZV9kaXIgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9GTU9fQ0hBTkdFX0RJUl9SSUdIVCA9IDAsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfRk1PX0NIQU5HRV9ESVJfTEVGVCA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0ZNT19DSEFOR0VfUkFURSAoVjRMMl9DSURfTVBFR19CQVNFKzM3NSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9GTU9fUlVOX0xFTkdUSCAoVjRMMl9DSURfTVBFR19CQVNFKzM3NikKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0FTTyAoVjRMMl9DSURfTVBFR19CQVNFKzM3NykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9BU09fU0xJQ0VfT1JERVIgKFY0TDJfQ0lEX01QRUdfQkFTRSszNzgpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9ISUVSQVJDSElDQUxfQ09ESU5HIChWNEwyX0NJRF9NUEVHX0JBU0UrMzc5KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0hJRVJBUkNISUNBTF9DT0RJTkdfVFlQRSAoVjRMMl9DSURfTVBFR19CQVNFKzM4MCkKIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2gyNjRfaGllcmFyY2hpY2FsX2NvZGluZ190eXBlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfSElFUkFSQ0hJQ0FMX0NPRElOR19CID0gMCwKICBWNEwyX01QRUdfVklERU9fSDI2NF9ISUVSQVJDSElDQUxfQ09ESU5HX1AgPSAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9ISUVSQVJDSElDQUxfQ09ESU5HX0xBWUVSIChWNEwyX0NJRF9NUEVHX0JBU0UrMzgxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0hJRVJBUkNISUNBTF9DT0RJTkdfTEFZRVJfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSszODIpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfSV9GUkFNRV9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzQwMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfUF9GUkFNRV9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzQwMSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9CX0ZSQU1FX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrNDAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9NSU5fUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSs0MDMpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfTUFYX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrNDA0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9MRVZFTCAoVjRMMl9DSURfTVBFR19CQVNFKzQwNSkKIGVudW0gdjRsMl9tcGVnX3ZpZGVvX21wZWc0X2xldmVsIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX01QRUc0X0xFVkVMXzAgPSAwLAogIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8wQiA9IDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8xID0gMiwKICBWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfMiA9IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8zID0gNCwKICBWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfM0IgPSA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfNCA9IDYsCiAgVjRMMl9NUEVHX1ZJREVPX01QRUc0X0xFVkVMXzUgPSA3LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfUFJPRklMRSAoVjRMMl9DSURfTVBFR19CQVNFKzQwNikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfbXBlZ192aWRlb19tcGVnNF9wcm9maWxlIHsKICBWNEwyX01QRUdfVklERU9fTVBFRzRfUFJPRklMRV9TSU1QTEUgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fTVBFRzRfUFJPRklMRV9BRFZBTkNFRF9TSU1QTEUgPSAxLAogIFY0TDJfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFX0NPUkUgPSAyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fTVBFRzRfUFJPRklMRV9TSU1QTEVfU0NBTEFCTEUgPSAzLAogIFY0TDJfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFX0FEVkFOQ0VEX0NPRElOR19FRkZJQ0lFTkNZID0gNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X1FQRUwgKFY0TDJfQ0lEX01QRUdfQkFTRSs0MDcpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX05VTV9QQVJUSVRJT05TIChWNEwyX0NJRF9NUEVHX0JBU0UrNTAwKQorZW51bSB2NGwyX3ZwOF9udW1fcGFydGl0aW9ucyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYXzFfUEFSVElUSU9OID0gMCwKKyBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF8yX1BBUlRJVElPTlMgPSAxLAorIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYXzRfUEFSVElUSU9OUyA9IDIsCisgVjRMMl9DSURfTVBFR19WSURFT19WUFhfOF9QQVJUSVRJT05TID0gMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF9JTURfRElTQUJMRV80WDQgKFY0TDJfQ0lEX01QRUdfQkFTRSs1MDEpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX05VTV9SRUZfRlJBTUVTIChWNEwyX0NJRF9NUEVHX0JBU0UrNTAyKQorZW51bSB2NGwyX3ZwOF9udW1fcmVmX2ZyYW1lcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYXzFfUkVGX0ZSQU1FID0gMCwKKyBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF8yX1JFRl9GUkFNRSA9IDEsCisgVjRMMl9DSURfTVBFR19WSURFT19WUFhfM19SRUZfRlJBTUUgPSAyLAorfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX0ZJTFRFUl9MRVZFTCAoVjRMMl9DSURfTVBFR19CQVNFKzUwMykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WUFhfRklMVEVSX1NIQVJQTkVTUyAoVjRMMl9DSURfTVBFR19CQVNFKzUwNCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WUFhfR09MREVOX0ZSQU1FX1JFRl9QRVJJT0QgKFY0TDJfQ0lEX01QRUdfQkFTRSs1MDUpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX0dPTERFTl9GUkFNRV9TRUwgKFY0TDJfQ0lEX01QRUdfQkFTRSs1MDYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB2NGwyX3ZwOF9nb2xkZW5fZnJhbWVfc2VsIHsKKyBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF9HT0xERU5fRlJBTUVfVVNFX1BSRVYgPSAwLAorIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX0dPTERFTl9GUkFNRV9VU0VfUkVGX1BFUklPRCA9IDEsCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WUFhfTUlOX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrNTA3KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF9NQVhfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSs1MDgpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX0lfRlJBTUVfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSs1MDkpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX1BfRlJBTUVfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSs1MTApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF9QUk9GSUxFIChWNEwyX0NJRF9NUEVHX0JBU0UrNTExKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX01QRUcgfCAweDEwMDApCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSswKQogZW51bSB2NGwyX21wZWdfY3gyMzQxeF92aWRlb19zcGF0aWFsX2ZpbHRlcl9tb2RlIHsKLSBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFX01BTlVBTCA9IDAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREVfTUFOVUFMID0gMCwKICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFX0FVVE8gPSAxLAogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsxKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMikKIGVudW0gdjRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fbHVtYV9zcGF0aWFsX2ZpbHRlcl90eXBlIHsKICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfT0ZGID0gMCwKICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfSE9SID0gMSwKLSBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfVkVSVCA9IDIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8xRF9WRVJUID0gMiwKICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMkRfSFZfU0VQQVJBQkxFID0gMywKICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMkRfU1lNX05PTl9TRVBBUkFCTEUgPSA0LAogfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSszKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSszKQogZW51bSB2NGwyX21wZWdfY3gyMzQxeF92aWRlb19jaHJvbWFfc3BhdGlhbF9maWx0ZXJfdHlwZSB7CiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX1NQQVRJQUxfRklMVEVSX1RZUEVfT0ZGID0gMCwKICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRV8xRF9IT1IgPSAxLAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREUgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzQpCiBlbnVtIHY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX3RlbXBvcmFsX2ZpbHRlcl9tb2RlIHsKICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERV9NQU5VQUwgPSAwLAotIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFX0FVVE8gPSAxLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERV9BVVRPID0gMSwKIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVIgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzUpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEUgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzYpCi1lbnVtIHY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB2NGwyX21wZWdfY3gyMzQxeF92aWRlb19tZWRpYW5fZmlsdGVyX3R5cGUgewogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9PRkYgPSAwLAogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9IT1IgPSAxLAogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9WRVJUID0gMiwKLSBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfSE9SX1ZFUlQgPSAzLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfSE9SX1ZFUlQgPSAzLAogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9ESUFHID0gNCwKIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX01FRElBTl9GSUxURVJfQk9UVE9NIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs3KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9NRURJQU5fRklMVEVSX1RPUCAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrOCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX01FRElBTl9GSUxURVJfVE9QIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs4KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX01FRElBTl9GSUxURVJfQk9UVE9NIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs5KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX01FRElBTl9GSUxURVJfVE9QIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsxMCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1NUUkVBTV9JTlNFUlRfTkFWX1BBQ0tFVFMgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzExKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHgxMTAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFIChWNEwyX0NUUkxfQ0xBU1NfTVBFRyB8IDB4MTEwMCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19ERUNPREVSX0gyNjRfRElTUExBWV9ERUxBWSAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzApCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fREVDT0RFUl9IMjY0X0RJU1BMQVlfREVMQVlfRU5BQkxFIChWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrMSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19GUkFNRV9TS0lQX01PREUgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSsyKQotZW51bSB2NGwyX21wZWdfbWZjNTFfdmlkZW9fZnJhbWVfc2tpcF9tb2RlIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHY0bDJfbXBlZ19tZmM1MV92aWRlb19mcmFtZV9za2lwX21vZGUgewogIFY0TDJfTVBFR19NRkM1MV9WSURFT19GUkFNRV9TS0lQX01PREVfRElTQUJMRUQgPSAwLAogIFY0TDJfTVBFR19NRkM1MV9WSURFT19GUkFNRV9TS0lQX01PREVfTEVWRUxfTElNSVQgPSAxLAogIFY0TDJfTVBFR19NRkM1MV9WSURFT19GUkFNRV9TS0lQX01PREVfQlVGX0xJTUlUID0gMiwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19GT1JDRV9GUkFNRV9UWVBFIChWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrMykKIGVudW0gdjRsMl9tcGVnX21mYzUxX3ZpZGVvX2ZvcmNlX2ZyYW1lX3R5cGUgewogIFY0TDJfTVBFR19NRkM1MV9WSURFT19GT1JDRV9GUkFNRV9UWVBFX0RJU0FCTEVEID0gMCwKLSBWNEwyX01QRUdfTUZDNTFfVklERU9fRk9SQ0VfRlJBTUVfVFlQRV9JX0ZSQU1FID0gMSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZPUkNFX0ZSQU1FX1RZUEVfSV9GUkFNRSA9IDEsCiAgVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZPUkNFX0ZSQU1FX1RZUEVfTk9UX0NPREVEID0gMiwKIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fUEFERElORyAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzQpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fUEFERElOR19ZVVYgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19QQURESU5HX1lVViAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzUpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fUkNfRklYRURfVEFSR0VUX0JJVCAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzYpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fUkNfUkVBQ1RJT05fQ09FRkYgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs3KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0gyNjRfQURBUFRJVkVfUkNfQUNUSVZJVFkgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs1MCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X0FEQVBUSVZFX1JDX0RBUksgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs1MSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fSDI2NF9BREFQVElWRV9SQ19EQVJLIChWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrNTEpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fSDI2NF9BREFQVElWRV9SQ19TTU9PVEggKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs1MikKICNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X0FEQVBUSVZFX1JDX1NUQVRJQyAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzUzKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0gyNjRfTlVNX1JFRl9QSUNfRk9SX1AgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs1NCkKLSNkZWZpbmUgVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19DQU1FUkEgfCAweDkwMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFIChWNEwyX0NUUkxfQ0xBU1NfQ0FNRVJBIHwgMHg5MDApCiAjZGVmaW5lIFY0TDJfQ0lEX0NBTUVSQV9DTEFTUyAoVjRMMl9DVFJMX0NMQVNTX0NBTUVSQSB8IDEpCiAjZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE8gKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzEpCiBlbnVtIHY0bDJfZXhwb3N1cmVfYXV0b190eXBlIHsKLSBWNEwyX0VYUE9TVVJFX0FVVE8gPSAwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX0VYUE9TVVJFX0FVVE8gPSAwLAogIFY0TDJfRVhQT1NVUkVfTUFOVUFMID0gMSwKICBWNEwyX0VYUE9TVVJFX1NIVVRURVJfUFJJT1JJVFkgPSAyLAogIFY0TDJfRVhQT1NVUkVfQVBFUlRVUkVfUFJJT1JJVFkgPSAzCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFX0FCU09MVVRFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyKQogI2RlZmluZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPX1BSSU9SSVRZIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSszKQogI2RlZmluZSBWNEwyX0NJRF9QQU5fUkVMQVRJVkUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzQpCi0jZGVmaW5lIFY0TDJfQ0lEX1RJTFRfUkVMQVRJVkUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9USUxUX1JFTEFUSVZFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSs1KQogI2RlZmluZSBWNEwyX0NJRF9QQU5fUkVTRVQgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzYpCiAjZGVmaW5lIFY0TDJfQ0lEX1RJTFRfUkVTRVQgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzcpCiAjZGVmaW5lIFY0TDJfQ0lEX1BBTl9BQlNPTFVURSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrOCkKLSNkZWZpbmUgVjRMMl9DSURfVElMVF9BQlNPTFVURSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrOSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX1RJTFRfQUJTT0xVVEUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzkpCiAjZGVmaW5lIFY0TDJfQ0lEX0ZPQ1VTX0FCU09MVVRFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxMCkKICNkZWZpbmUgVjRMMl9DSURfRk9DVVNfUkVMQVRJVkUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzExKQogI2RlZmluZSBWNEwyX0NJRF9GT0NVU19BVVRPIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxMikKLSNkZWZpbmUgVjRMMl9DSURfWk9PTV9BQlNPTFVURSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9aT09NX0FCU09MVVRFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxMykKICNkZWZpbmUgVjRMMl9DSURfWk9PTV9SRUxBVElWRSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTQpCiAjZGVmaW5lIFY0TDJfQ0lEX1pPT01fQ09OVElOVU9VUyAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTUpCiAjZGVmaW5lIFY0TDJfQ0lEX1BSSVZBQ1kgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE2KQotI2RlZmluZSBWNEwyX0NJRF9JUklTX0FCU09MVVRFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxNykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0lSSVNfQUJTT0xVVEUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE3KQogI2RlZmluZSBWNEwyX0NJRF9JUklTX1JFTEFUSVZFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxOCkKICNkZWZpbmUgVjRMMl9DSURfQVVUT19FWFBPU1VSRV9CSUFTIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxOSkKICNkZWZpbmUgVjRMMl9DSURfQVVUT19OX1BSRVNFVF9XSElURV9CQUxBTkNFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyMCkKLWVudW0gdjRsMl9hdXRvX25fcHJlc2V0X3doaXRlX2JhbGFuY2UgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gdjRsMl9hdXRvX25fcHJlc2V0X3doaXRlX2JhbGFuY2UgewogIFY0TDJfV0hJVEVfQkFMQU5DRV9NQU5VQUwgPSAwLAogIFY0TDJfV0hJVEVfQkFMQU5DRV9BVVRPID0gMSwKICBWNEwyX1dISVRFX0JBTEFOQ0VfSU5DQU5ERVNDRU5UID0gMiwKLSBWNEwyX1dISVRFX0JBTEFOQ0VfRkxVT1JFU0NFTlQgPSAzLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX1dISVRFX0JBTEFOQ0VfRkxVT1JFU0NFTlQgPSAzLAogIFY0TDJfV0hJVEVfQkFMQU5DRV9GTFVPUkVTQ0VOVF9IID0gNCwKICBWNEwyX1dISVRFX0JBTEFOQ0VfSE9SSVpPTiA9IDUsCiAgVjRMMl9XSElURV9CQUxBTkNFX0RBWUxJR0hUID0gNiwKLSBWNEwyX1dISVRFX0JBTEFOQ0VfRkxBU0ggPSA3LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX1dISVRFX0JBTEFOQ0VfRkxBU0ggPSA3LAogIFY0TDJfV0hJVEVfQkFMQU5DRV9DTE9VRFkgPSA4LAogIFY0TDJfV0hJVEVfQkFMQU5DRV9TSEFERSA9IDksCiB9OwotI2RlZmluZSBWNEwyX0NJRF9XSURFX0RZTkFNSUNfUkFOR0UgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzIxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfV0lERV9EWU5BTUlDX1JBTkdFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyMSkKICNkZWZpbmUgVjRMMl9DSURfSU1BR0VfU1RBQklMSVpBVElPTiAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMjIpCiAjZGVmaW5lIFY0TDJfQ0lEX0lTT19TRU5TSVRJVklUWSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMjMpCiAjZGVmaW5lIFY0TDJfQ0lEX0lTT19TRU5TSVRJVklUWV9BVVRPIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyNCkKLWVudW0gdjRsMl9pc29fc2Vuc2l0aXZpdHlfYXV0b190eXBlIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHY0bDJfaXNvX3NlbnNpdGl2aXR5X2F1dG9fdHlwZSB7CiAgVjRMMl9JU09fU0VOU0lUSVZJVFlfTUFOVUFMID0gMCwKICBWNEwyX0lTT19TRU5TSVRJVklUWV9BVVRPID0gMSwKIH07Ci0jZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFX01FVEVSSU5HIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyNSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFX01FVEVSSU5HIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyNSkKIGVudW0gdjRsMl9leHBvc3VyZV9tZXRlcmluZyB7CiAgVjRMMl9FWFBPU1VSRV9NRVRFUklOR19BVkVSQUdFID0gMCwKICBWNEwyX0VYUE9TVVJFX01FVEVSSU5HX0NFTlRFUl9XRUlHSFRFRCA9IDEsCi0gVjRMMl9FWFBPU1VSRV9NRVRFUklOR19TUE9UID0gMiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9FWFBPU1VSRV9NRVRFUklOR19TUE9UID0gMiwKICBWNEwyX0VYUE9TVVJFX01FVEVSSU5HX01BVFJJWCA9IDMsCiB9OwogI2RlZmluZSBWNEwyX0NJRF9TQ0VORV9NT0RFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyNikKLWVudW0gdjRsMl9zY2VuZV9tb2RlIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHY0bDJfc2NlbmVfbW9kZSB7CiAgVjRMMl9TQ0VORV9NT0RFX05PTkUgPSAwLAogIFY0TDJfU0NFTkVfTU9ERV9CQUNLTElHSFQgPSAxLAogIFY0TDJfU0NFTkVfTU9ERV9CRUFDSF9TTk9XID0gMiwKLSBWNEwyX1NDRU5FX01PREVfQ0FORExFX0xJR0hUID0gMywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9TQ0VORV9NT0RFX0NBTkRMRV9MSUdIVCA9IDMsCiAgVjRMMl9TQ0VORV9NT0RFX0RBV05fRFVTSyA9IDQsCiAgVjRMMl9TQ0VORV9NT0RFX0ZBTExfQ09MT1JTID0gNSwKICBWNEwyX1NDRU5FX01PREVfRklSRVdPUktTID0gNiwKLSBWNEwyX1NDRU5FX01PREVfTEFORFNDQVBFID0gNywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9TQ0VORV9NT0RFX0xBTkRTQ0FQRSA9IDcsCiAgVjRMMl9TQ0VORV9NT0RFX05JR0hUID0gOCwKICBWNEwyX1NDRU5FX01PREVfUEFSVFlfSU5ET09SID0gOSwKICBWNEwyX1NDRU5FX01PREVfUE9SVFJBSVQgPSAxMCwKLSBWNEwyX1NDRU5FX01PREVfU1BPUlRTID0gMTEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfU0NFTkVfTU9ERV9TUE9SVFMgPSAxMSwKICBWNEwyX1NDRU5FX01PREVfU1VOU0VUID0gMTIsCiAgVjRMMl9TQ0VORV9NT0RFX1RFWFQgPSAxMywKIH07Ci0jZGVmaW5lIFY0TDJfQ0lEXzNBX0xPQ0sgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzI3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfM0FfTE9DSyAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMjcpCiAjZGVmaW5lIFY0TDJfTE9DS19FWFBPU1VSRSAoMSA8PCAwKQogI2RlZmluZSBWNEwyX0xPQ0tfV0hJVEVfQkFMQU5DRSAoMSA8PCAxKQogI2RlZmluZSBWNEwyX0xPQ0tfRk9DVVMgKDEgPDwgMikKLSNkZWZpbmUgVjRMMl9DSURfQVVUT19GT0NVU19TVEFSVCAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMjgpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9BVVRPX0ZPQ1VTX1NUQVJUIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyOCkKICNkZWZpbmUgVjRMMl9DSURfQVVUT19GT0NVU19TVE9QIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyOSkKICNkZWZpbmUgVjRMMl9DSURfQVVUT19GT0NVU19TVEFUVVMgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzMwKQogI2RlZmluZSBWNEwyX0FVVE9fRk9DVVNfU1RBVFVTX0lETEUgKDAgPDwgMCkKLSNkZWZpbmUgVjRMMl9BVVRPX0ZPQ1VTX1NUQVRVU19CVVNZICgxIDw8IDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0FVVE9fRk9DVVNfU1RBVFVTX0JVU1kgKDEgPDwgMCkKICNkZWZpbmUgVjRMMl9BVVRPX0ZPQ1VTX1NUQVRVU19SRUFDSEVEICgxIDw8IDEpCiAjZGVmaW5lIFY0TDJfQVVUT19GT0NVU19TVEFUVVNfRkFJTEVEICgxIDw8IDIpCiAjZGVmaW5lIFY0TDJfQ0lEX0FVVE9fRk9DVVNfUkFOR0UgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzMxKQotZW51bSB2NGwyX2F1dG9fZm9jdXNfcmFuZ2UgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gdjRsMl9hdXRvX2ZvY3VzX3JhbmdlIHsKICBWNEwyX0FVVE9fRk9DVVNfUkFOR0VfQVVUTyA9IDAsCiAgVjRMMl9BVVRPX0ZPQ1VTX1JBTkdFX05PUk1BTCA9IDEsCiAgVjRMMl9BVVRPX0ZPQ1VTX1JBTkdFX01BQ1JPID0gMiwKLSBWNEwyX0FVVE9fRk9DVVNfUkFOR0VfSU5GSU5JVFkgPSAzLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX0FVVE9fRk9DVVNfUkFOR0VfSU5GSU5JVFkgPSAzLAogfTsKICNkZWZpbmUgVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX0ZNX1RYIHwgMHg5MDApCiAjZGVmaW5lIFY0TDJfQ0lEX0ZNX1RYX0NMQVNTIChWNEwyX0NUUkxfQ0xBU1NfRk1fVFggfCAxKQotI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfREVWSUFUSU9OIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9ERVZJQVRJT04gKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxKQogI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfUEkgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAyKQogI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfUFRZIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMykKICNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX1BTX05BTUUgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA1KQotI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfUkFESU9fVEVYVCAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDYpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfUkFESU9fVEVYVCAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDYpCiAjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0xJTUlURVJfRU5BQkxFRCAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY0KQogI2RlZmluZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX1JFTEVBU0VfVElNRSAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY1KQogI2RlZmluZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX0RFVklBVElPTiAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY2KQotI2RlZmluZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9FTkFCTEVEIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9FTkFCTEVEIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODApCiAjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0dBSU4gKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MSkKICNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fVEhSRVNIT0xEIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODIpCiAjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0FUVEFDS19USU1FIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODMpCi0jZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1JFTEVBU0VfVElNRSAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDg0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fUkVMRUFTRV9USU1FIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODQpCiAjZGVmaW5lIFY0TDJfQ0lEX1BJTE9UX1RPTkVfRU5BQkxFRCAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDk2KQogI2RlZmluZSBWNEwyX0NJRF9QSUxPVF9UT05FX0RFVklBVElPTiAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDk3KQogI2RlZmluZSBWNEwyX0NJRF9QSUxPVF9UT05FX0ZSRVFVRU5DWSAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDk4KQotI2RlZmluZSBWNEwyX0NJRF9UVU5FX1BSRUVNUEhBU0lTIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTEyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUyAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDExMikKIGVudW0gdjRsMl9wcmVlbXBoYXNpcyB7CiAgVjRMMl9QUkVFTVBIQVNJU19ESVNBQkxFRCA9IDAsCiAgVjRMMl9QUkVFTVBIQVNJU181MF91UyA9IDEsCi0gVjRMMl9QUkVFTVBIQVNJU183NV91UyA9IDIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfUFJFRU1QSEFTSVNfNzVfdVMgPSAyLAogfTsKICNkZWZpbmUgVjRMMl9DSURfVFVORV9QT1dFUl9MRVZFTCAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDExMykKICNkZWZpbmUgVjRMMl9DSURfVFVORV9BTlRFTk5BX0NBUEFDSVRPUiAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDExNCkKLSNkZWZpbmUgVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX0ZMQVNIIHwgMHg5MDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFIChWNEwyX0NUUkxfQ0xBU1NfRkxBU0ggfCAweDkwMCkKICNkZWZpbmUgVjRMMl9DSURfRkxBU0hfQ0xBU1MgKFY0TDJfQ1RSTF9DTEFTU19GTEFTSCB8IDEpCiAjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX0xFRF9NT0RFIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMSkKIGVudW0gdjRsMl9mbGFzaF9sZWRfbW9kZSB7Ci0gVjRMMl9GTEFTSF9MRURfTU9ERV9OT05FLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX0ZMQVNIX0xFRF9NT0RFX05PTkUsCiAgVjRMMl9GTEFTSF9MRURfTU9ERV9GTEFTSCwKICBWNEwyX0ZMQVNIX0xFRF9NT0RFX1RPUkNILAogfTsKLSNkZWZpbmUgVjRMMl9DSURfRkxBU0hfU1RST0JFX1NPVVJDRSAoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9TVFJPQkVfU09VUkNFIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMikKIGVudW0gdjRsMl9mbGFzaF9zdHJvYmVfc291cmNlIHsKICBWNEwyX0ZMQVNIX1NUUk9CRV9TT1VSQ0VfU09GVFdBUkUsCiAgVjRMMl9GTEFTSF9TVFJPQkVfU09VUkNFX0VYVEVSTkFMLAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9TVFJPQkUgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyAzKQogI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9TVFJPQkVfU1RPUCAoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDQpCiAjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1NUUk9CRV9TVEFUVVMgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyA1KQotI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9USU1FT1VUIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgNikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1RJTUVPVVQgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyA2KQogI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9JTlRFTlNJVFkgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyA3KQogI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9UT1JDSF9JTlRFTlNJVFkgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyA4KQogI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9JTkRJQ0FUT1JfSU5URU5TSVRZIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgOSkKLSNkZWZpbmUgVjRMMl9DSURfRkxBU0hfRkFVTFQgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyAxMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX0ZBVUxUIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMTApCiAjZGVmaW5lIFY0TDJfRkxBU0hfRkFVTFRfT1ZFUl9WT0xUQUdFICgxIDw8IDApCiAjZGVmaW5lIFY0TDJfRkxBU0hfRkFVTFRfVElNRU9VVCAoMSA8PCAxKQogI2RlZmluZSBWNEwyX0ZMQVNIX0ZBVUxUX09WRVJfVEVNUEVSQVRVUkUgKDEgPDwgMikKLSNkZWZpbmUgVjRMMl9GTEFTSF9GQVVMVF9TSE9SVF9DSVJDVUlUICgxIDw8IDMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0ZMQVNIX0ZBVUxUX1NIT1JUX0NJUkNVSVQgKDEgPDwgMykKICNkZWZpbmUgVjRMMl9GTEFTSF9GQVVMVF9PVkVSX0NVUlJFTlQgKDEgPDwgNCkKICNkZWZpbmUgVjRMMl9GTEFTSF9GQVVMVF9JTkRJQ0FUT1IgKDEgPDwgNSkKICNkZWZpbmUgVjRMMl9DSURfRkxBU0hfQ0hBUkdFIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMTEpCi0jZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1JFQURZIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMTIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9SRUFEWSAoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDEyKQogI2RlZmluZSBWNEwyX0NJRF9KUEVHX0NMQVNTX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19KUEVHIHwgMHg5MDApCiAjZGVmaW5lIFY0TDJfQ0lEX0pQRUdfQ0xBU1MgKFY0TDJfQ1RSTF9DTEFTU19KUEVHIHwgMSkKICNkZWZpbmUgVjRMMl9DSURfSlBFR19DSFJPTUFfU1VCU0FNUExJTkcgKFY0TDJfQ0lEX0pQRUdfQ0xBU1NfQkFTRSArIDEpCi1lbnVtIHY0bDJfanBlZ19jaHJvbWFfc3Vic2FtcGxpbmcgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gdjRsMl9qcGVnX2Nocm9tYV9zdWJzYW1wbGluZyB7CiAgVjRMMl9KUEVHX0NIUk9NQV9TVUJTQU1QTElOR180NDQgPSAwLAogIFY0TDJfSlBFR19DSFJPTUFfU1VCU0FNUExJTkdfNDIyID0gMSwKICBWNEwyX0pQRUdfQ0hST01BX1NVQlNBTVBMSU5HXzQyMCA9IDIsCi0gVjRMMl9KUEVHX0NIUk9NQV9TVUJTQU1QTElOR180MTEgPSAzLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX0pQRUdfQ0hST01BX1NVQlNBTVBMSU5HXzQxMSA9IDMsCiAgVjRMMl9KUEVHX0NIUk9NQV9TVUJTQU1QTElOR180MTAgPSA0LAogIFY0TDJfSlBFR19DSFJPTUFfU1VCU0FNUExJTkdfR1JBWSA9IDUsCiB9OwotI2RlZmluZSBWNEwyX0NJRF9KUEVHX1JFU1RBUlRfSU5URVJWQUwgKFY0TDJfQ0lEX0pQRUdfQ0xBU1NfQkFTRSArIDIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9KUEVHX1JFU1RBUlRfSU5URVJWQUwgKFY0TDJfQ0lEX0pQRUdfQ0xBU1NfQkFTRSArIDIpCiAjZGVmaW5lIFY0TDJfQ0lEX0pQRUdfQ09NUFJFU1NJT05fUVVBTElUWSAoVjRMMl9DSURfSlBFR19DTEFTU19CQVNFICsgMykKICNkZWZpbmUgVjRMMl9DSURfSlBFR19BQ1RJVkVfTUFSS0VSIChWNEwyX0NJRF9KUEVHX0NMQVNTX0JBU0UgKyA0KQogI2RlZmluZSBWNEwyX0pQRUdfQUNUSVZFX01BUktFUl9BUFAwICgxIDw8IDApCi0jZGVmaW5lIFY0TDJfSlBFR19BQ1RJVkVfTUFSS0VSX0FQUDEgKDEgPDwgMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfSlBFR19BQ1RJVkVfTUFSS0VSX0FQUDEgKDEgPDwgMSkKICNkZWZpbmUgVjRMMl9KUEVHX0FDVElWRV9NQVJLRVJfQ09NICgxIDw8IDE2KQogI2RlZmluZSBWNEwyX0pQRUdfQUNUSVZFX01BUktFUl9EUVQgKDEgPDwgMTcpCiAjZGVmaW5lIFY0TDJfSlBFR19BQ1RJVkVfTUFSS0VSX0RIVCAoMSA8PCAxOCkKLSNkZWZpbmUgVjRMMl9DSURfSU1BR0VfU09VUkNFX0NMQVNTX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19JTUFHRV9TT1VSQ0UgfCAweDkwMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0lNQUdFX1NPVVJDRV9DTEFTU19CQVNFIChWNEwyX0NUUkxfQ0xBU1NfSU1BR0VfU09VUkNFIHwgMHg5MDApCiAjZGVmaW5lIFY0TDJfQ0lEX0lNQUdFX1NPVVJDRV9DTEFTUyAoVjRMMl9DVFJMX0NMQVNTX0lNQUdFX1NPVVJDRSB8IDEpCiAjZGVmaW5lIFY0TDJfQ0lEX1ZCTEFOSyAoVjRMMl9DSURfSU1BR0VfU09VUkNFX0NMQVNTX0JBU0UgKyAxKQogI2RlZmluZSBWNEwyX0NJRF9IQkxBTksgKFY0TDJfQ0lEX0lNQUdFX1NPVVJDRV9DTEFTU19CQVNFICsgMikKLSNkZWZpbmUgVjRMMl9DSURfQU5BTE9HVUVfR0FJTiAoVjRMMl9DSURfSU1BR0VfU09VUkNFX0NMQVNTX0JBU0UgKyAzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfQU5BTE9HVUVfR0FJTiAoVjRMMl9DSURfSU1BR0VfU09VUkNFX0NMQVNTX0JBU0UgKyAzKQogI2RlZmluZSBWNEwyX0NJRF9JTUFHRV9QUk9DX0NMQVNTX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19JTUFHRV9QUk9DIHwgMHg5MDApCiAjZGVmaW5lIFY0TDJfQ0lEX0lNQUdFX1BST0NfQ0xBU1MgKFY0TDJfQ1RSTF9DTEFTU19JTUFHRV9QUk9DIHwgMSkKICNkZWZpbmUgVjRMMl9DSURfTElOS19GUkVRIChWNEwyX0NJRF9JTUFHRV9QUk9DX0NMQVNTX0JBU0UgKyAxKQotI2RlZmluZSBWNEwyX0NJRF9QSVhFTF9SQVRFIChWNEwyX0NJRF9JTUFHRV9QUk9DX0NMQVNTX0JBU0UgKyAyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfUElYRUxfUkFURSAoVjRMMl9DSURfSU1BR0VfUFJPQ19DTEFTU19CQVNFICsgMikKICNkZWZpbmUgVjRMMl9DSURfVEVTVF9QQVRURVJOIChWNEwyX0NJRF9JTUFHRV9QUk9DX0NMQVNTX0JBU0UgKyAzKQogI2RlZmluZSBWNEwyX0NJRF9EVl9DTEFTU19CQVNFIChWNEwyX0NUUkxfQ0xBU1NfRFYgfCAweDkwMCkKICNkZWZpbmUgVjRMMl9DSURfRFZfQ0xBU1MgKFY0TDJfQ1RSTF9DTEFTU19EViB8IDEpCi0jZGVmaW5lIFY0TDJfQ0lEX0RWX1RYX0hPVFBMVUcgKFY0TDJfQ0lEX0RWX0NMQVNTX0JBU0UgKyAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfRFZfVFhfSE9UUExVRyAoVjRMMl9DSURfRFZfQ0xBU1NfQkFTRSArIDEpCiAjZGVmaW5lIFY0TDJfQ0lEX0RWX1RYX1JYU0VOU0UgKFY0TDJfQ0lEX0RWX0NMQVNTX0JBU0UgKyAyKQogI2RlZmluZSBWNEwyX0NJRF9EVl9UWF9FRElEX1BSRVNFTlQgKFY0TDJfQ0lEX0RWX0NMQVNTX0JBU0UgKyAzKQogI2RlZmluZSBWNEwyX0NJRF9EVl9UWF9NT0RFIChWNEwyX0NJRF9EVl9DTEFTU19CQVNFICsgNCkKLWVudW0gdjRsMl9kdl90eF9tb2RlIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHY0bDJfZHZfdHhfbW9kZSB7CiAgVjRMMl9EVl9UWF9NT0RFX0RWSV9EID0gMCwKICBWNEwyX0RWX1RYX01PREVfSERNSSA9IDEsCiB9OwotI2RlZmluZSBWNEwyX0NJRF9EVl9UWF9SR0JfUkFOR0UgKFY0TDJfQ0lEX0RWX0NMQVNTX0JBU0UgKyA1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfRFZfVFhfUkdCX1JBTkdFIChWNEwyX0NJRF9EVl9DTEFTU19CQVNFICsgNSkKIGVudW0gdjRsMl9kdl9yZ2JfcmFuZ2UgewogIFY0TDJfRFZfUkdCX1JBTkdFX0FVVE8gPSAwLAogIFY0TDJfRFZfUkdCX1JBTkdFX0xJTUlURUQgPSAxLAotIFY0TDJfRFZfUkdCX1JBTkdFX0ZVTEwgPSAyLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX0RWX1JHQl9SQU5HRV9GVUxMID0gMiwKIH07CiAjZGVmaW5lIFY0TDJfQ0lEX0RWX1JYX1BPV0VSX1BSRVNFTlQgKFY0TDJfQ0lEX0RWX0NMQVNTX0JBU0UgKyAxMDApCiAjZGVmaW5lIFY0TDJfQ0lEX0RWX1JYX1JHQl9SQU5HRSAoVjRMMl9DSURfRFZfQ0xBU1NfQkFTRSArIDEwMSkKLSNkZWZpbmUgVjRMMl9DSURfRk1fUlhfQ0xBU1NfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX0ZNX1JYIHwgMHg5MDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9GTV9SWF9DTEFTU19CQVNFIChWNEwyX0NUUkxfQ0xBU1NfRk1fUlggfCAweDkwMCkKICNkZWZpbmUgVjRMMl9DSURfRk1fUlhfQ0xBU1MgKFY0TDJfQ1RSTF9DTEFTU19GTV9SWCB8IDEpCiAjZGVmaW5lIFY0TDJfQ0lEX1RVTkVfREVFTVBIQVNJUyAoVjRMMl9DSURfRk1fUlhfQ0xBU1NfQkFTRSArIDEpCiBlbnVtIHY0bDJfZGVlbXBoYXNpcyB7Ci0gVjRMMl9ERUVNUEhBU0lTX0RJU0FCTEVEID0gVjRMMl9QUkVFTVBIQVNJU19ESVNBQkxFRCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9ERUVNUEhBU0lTX0RJU0FCTEVEID0gVjRMMl9QUkVFTVBIQVNJU19ESVNBQkxFRCwKICBWNEwyX0RFRU1QSEFTSVNfNTBfdVMgPSBWNEwyX1BSRUVNUEhBU0lTXzUwX3VTLAogIFY0TDJfREVFTVBIQVNJU183NV91UyA9IFY0TDJfUFJFRU1QSEFTSVNfNzVfdVMsCiB9OwotI2RlZmluZSBWNEwyX0NJRF9SRFNfUkVDRVBUSU9OIChWNEwyX0NJRF9GTV9SWF9DTEFTU19CQVNFICsgMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX1JEU19SRUNFUFRJT04gKFY0TDJfQ0lEX0ZNX1JYX0NMQVNTX0JBU0UgKyAyKQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Y0bDItZHYtdGltaW5ncy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLWR2LXRpbWluZ3MuaAppbmRleCAyYzllYzg5Li5iYjEzNzRhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Y0bDItZHYtdGltaW5ncy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdjRsMi1kdi10aW1pbmdzLmgKQEAgLTE1Myw2ICsxNTMsNCBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMjU2MFgxNjAwUDg1IHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMjU2MCwgMTYwMCwgMCwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCAgIDUwNTI1MDAwMCwgMjA4LCAyODAsIDQ4OCwgMywgNiwgNzMsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1UIHwgVjRMMl9EVl9CVF9TVERfQ1ZULCAwKSAgfQogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8yNTYwWDE2MDBQMTIwX1JCIHsgICAudHlwZSA9IFY0TDJfRFZfQlRfNjU2XzExMjAsICAgVjRMMl9JTklUX0JUX1RJTUlOR1MoMjU2MCwgMTYwMCwgMCwgVjRMMl9EVl9IU1lOQ19QT1NfUE9MLCAgIDU1Mjc1MDAwMCwgNDgsIDMyLCA4MCwgMywgNiwgODUsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1UIHwgVjRMMl9EVl9CVF9TVERfQ1ZULCAgIFY0TDJfRFZfRkxfUkVEVUNFRF9CTEFOS0lORykgIH0KLSNkZWZpbmUgVjRMMl9EVl9CVF9ETVRfMTM2Nlg3NjhQNjAgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygxMzY2LCA3NjgsIDAsICAgVjRMMl9EVl9IU1lOQ19QT1NfUE9MIHwgVjRMMl9EVl9WU1lOQ19QT1NfUE9MLCAgIDg1NTAwMDAwLCA3MCwgMTQzLCAyMTMsIDMsIDMsIDI0LCAwLCAwLCAwLCAgIFY0TDJfRFZfQlRfU1REX0RNVCwgMCkgIH0KICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdjRsMi1tZWRpYWJ1cy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLW1lZGlhYnVzLmgKaW5kZXggOWM1YTRhMy4uODRhYTVkMyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLW1lZGlhYnVzLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLW1lZGlhYnVzLmgKQEAgLTM4LDc2ICszOCw3OSBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01CVVNfRk1UX1JHQjg4OF8yWDEyX0JFID0gMHgxMDBiLAogIFY0TDJfTUJVU19GTVRfUkdCODg4XzJYMTJfTEUgPSAweDEwMGMsCisgVjRMMl9NQlVTX0ZNVF9BUkdCODg4OF8xWDMyID0gMHgxMDBkLAogIFY0TDJfTUJVU19GTVRfWThfMVg4ID0gMHgyMDAxLAotIFY0TDJfTUJVU19GTVRfVVY4XzFYOCA9IDB4MjAxNSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NQlVTX0ZNVF9VVjhfMVg4ID0gMHgyMDE1LAogIFY0TDJfTUJVU19GTVRfVVlWWThfMV81WDggPSAweDIwMDIsCiAgVjRMMl9NQlVTX0ZNVF9WWVVZOF8xXzVYOCA9IDB4MjAwMywKICBWNEwyX01CVVNfRk1UX1lVWVY4XzFfNVg4ID0gMHgyMDA0LAotIFY0TDJfTUJVU19GTVRfWVZZVThfMV81WDggPSAweDIwMDUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTUJVU19GTVRfWVZZVThfMV81WDggPSAweDIwMDUsCiAgVjRMMl9NQlVTX0ZNVF9VWVZZOF8yWDggPSAweDIwMDYsCiAgVjRMMl9NQlVTX0ZNVF9WWVVZOF8yWDggPSAweDIwMDcsCiAgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDggPSAweDIwMDgsCi0gVjRMMl9NQlVTX0ZNVF9ZVllVOF8yWDggPSAweDIwMDksCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTUJVU19GTVRfWVZZVThfMlg4ID0gMHgyMDA5LAogIFY0TDJfTUJVU19GTVRfWTEwXzFYMTAgPSAweDIwMGEsCiAgVjRMMl9NQlVTX0ZNVF9ZVVlWMTBfMlgxMCA9IDB4MjAwYiwKICBWNEwyX01CVVNfRk1UX1lWWVUxMF8yWDEwID0gMHgyMDBjLAotIFY0TDJfTUJVU19GTVRfWTEyXzFYMTIgPSAweDIwMTMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTUJVU19GTVRfWTEyXzFYMTIgPSAweDIwMTMsCiAgVjRMMl9NQlVTX0ZNVF9VWVZZOF8xWDE2ID0gMHgyMDBmLAogIFY0TDJfTUJVU19GTVRfVllVWThfMVgxNiA9IDB4MjAxMCwKICBWNEwyX01CVVNfRk1UX1lVWVY4XzFYMTYgPSAweDIwMTEsCi0gVjRMMl9NQlVTX0ZNVF9ZVllVOF8xWDE2ID0gMHgyMDEyLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01CVVNfRk1UX1lWWVU4XzFYMTYgPSAweDIwMTIsCiAgVjRMMl9NQlVTX0ZNVF9ZRFlVWURZVjhfMVgxNiA9IDB4MjAxNCwKICBWNEwyX01CVVNfRk1UX1lVWVYxMF8xWDIwID0gMHgyMDBkLAogIFY0TDJfTUJVU19GTVRfWVZZVTEwXzFYMjAgPSAweDIwMGUsCi0gVjRMMl9NQlVTX0ZNVF9ZVVYxMF8xWDMwID0gMHgyMDE2LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01CVVNfRk1UX1lVVjEwXzFYMzAgPSAweDIwMTYsCisgVjRMMl9NQlVTX0ZNVF9BWVVWOF8xWDMyID0gMHgyMDE3LAogIFY0TDJfTUJVU19GTVRfU0JHR1I4XzFYOCA9IDB4MzAwMSwKICBWNEwyX01CVVNfRk1UX1NHQlJHOF8xWDggPSAweDMwMTMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTUJVU19GTVRfU0dSQkc4XzFYOCA9IDB4MzAwMiwKICBWNEwyX01CVVNfRk1UX1NSR0dCOF8xWDggPSAweDMwMTQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTUJVU19GTVRfU0JHR1IxMF9BTEFXOF8xWDggPSAweDMwMTUsCiAgVjRMMl9NQlVTX0ZNVF9TR0JSRzEwX0FMQVc4XzFYOCA9IDB4MzAxNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NQlVTX0ZNVF9TR1JCRzEwX0FMQVc4XzFYOCA9IDB4MzAxNywKICBWNEwyX01CVVNfRk1UX1NSR0dCMTBfQUxBVzhfMVg4ID0gMHgzMDE4LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01CVVNfRk1UX1NCR0dSMTBfRFBDTThfMVg4ID0gMHgzMDBiLAogIFY0TDJfTUJVU19GTVRfU0dCUkcxMF9EUENNOF8xWDggPSAweDMwMGMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTUJVU19GTVRfU0dSQkcxMF9EUENNOF8xWDggPSAweDMwMDksCiAgVjRMMl9NQlVTX0ZNVF9TUkdHQjEwX0RQQ004XzFYOCA9IDB4MzAwZCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzJYOF9QQURISV9CRSA9IDB4MzAwMywKICBWNEwyX01CVVNfRk1UX1NCR0dSMTBfMlg4X1BBREhJX0xFID0gMHgzMDA0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01CVVNfRk1UX1NCR0dSMTBfMlg4X1BBRExPX0JFID0gMHgzMDA1LAogIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8yWDhfUEFETE9fTEUgPSAweDMwMDYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwID0gMHgzMDA3LAogIFY0TDJfTUJVU19GTVRfU0dCUkcxMF8xWDEwID0gMHgzMDBlLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01CVVNfRk1UX1NHUkJHMTBfMVgxMCA9IDB4MzAwYSwKICBWNEwyX01CVVNfRk1UX1NSR0dCMTBfMVgxMCA9IDB4MzAwZiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NQlVTX0ZNVF9TQkdHUjEyXzFYMTIgPSAweDMwMDgsCiAgVjRMMl9NQlVTX0ZNVF9TR0JSRzEyXzFYMTIgPSAweDMwMTAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTUJVU19GTVRfU0dSQkcxMl8xWDEyID0gMHgzMDExLAogIFY0TDJfTUJVU19GTVRfU1JHR0IxMl8xWDEyID0gMHgzMDEyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01CVVNfRk1UX0pQRUdfMVg4ID0gMHg0MDAxLAogIFY0TDJfTUJVU19GTVRfUzVDX1VZVllfSlBFR18xWDggPSAweDUwMDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTUJVU19GTVRfQUhTVjg4ODhfMVgzMiA9IDB4NjAwMSwKIH07CiBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgd2lkdGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhlaWdodDsKICBfX3UzMiBjb2RlOwogIF9fdTMyIGZpZWxkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjb2xvcnNwYWNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFs3XTsKIH07CiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZlcnNpb24uaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmVyc2lvbi5oCmluZGV4IGFjZjlmMDYuLjcxZTUzNzMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmVyc2lvbi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmVyc2lvbi5oCkBAIC0xNiw1ICsxNiw1IEBACiAgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIExJTlVYX1ZFUlNJT05fQ09ERSAxOTkxNjgKKyNkZWZpbmUgTElOVVhfVkVSU0lPTl9DT0RFIDIwMDE5MgogI2RlZmluZSBLRVJORUxfVkVSU0lPTihhLGIsYykgKCgoYSkgPDwgMTYpICsgKChiKSA8PCA4KSArIChjKSkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmZpby5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92ZmlvLmgKaW5kZXggNWNhOTI3NC4uODhjYjA2NyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92ZmlvLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92ZmlvLmgKQEAgLTIzLDEzOSArMjMsMTc3IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWRklPX0FQSV9WRVJTSU9OIDAKICNkZWZpbmUgVkZJT19UWVBFMV9JT01NVSAxCisjZGVmaW5lIFZGSU9fU1BBUFJfVENFX0lPTU1VIDIKICNkZWZpbmUgVkZJT19UWVBFICgnOycpCi0jZGVmaW5lIFZGSU9fQkFTRSAxMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZGSU9fQkFTRSAxMDAKICNkZWZpbmUgVkZJT19HRVRfQVBJX1ZFUlNJT04gX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMCkKICNkZWZpbmUgVkZJT19DSEVDS19FWFRFTlNJT04gX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMSkKICNkZWZpbmUgVkZJT19TRVRfSU9NTVUgX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMikKLXN0cnVjdCB2ZmlvX2dyb3VwX3N0YXR1cyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHZmaW9fZ3JvdXBfc3RhdHVzIHsKICBfX3UzMiBhcmdzejsKICBfX3UzMiBmbGFnczsKICNkZWZpbmUgVkZJT19HUk9VUF9GTEFHU19WSUFCTEUgKDEgPDwgMCkKLSNkZWZpbmUgVkZJT19HUk9VUF9GTEFHU19DT05UQUlORVJfU0VUICgxIDw8IDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWRklPX0dST1VQX0ZMQUdTX0NPTlRBSU5FUl9TRVQgKDEgPDwgMSkKIH07CiAjZGVmaW5lIFZGSU9fR1JPVVBfR0VUX1NUQVRVUyBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAzKQogI2RlZmluZSBWRklPX0dST1VQX1NFVF9DT05UQUlORVIgX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgNCkKLSNkZWZpbmUgVkZJT19HUk9VUF9VTlNFVF9DT05UQUlORVIgX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgNSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZGSU9fR1JPVVBfVU5TRVRfQ09OVEFJTkVSIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDUpCiAjZGVmaW5lIFZGSU9fR1JPVVBfR0VUX0RFVklDRV9GRCBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyA2KQogc3RydWN0IHZmaW9fZGV2aWNlX2luZm8gewogIF9fdTMyIGFyZ3N6OwotIF9fdTMyIGZsYWdzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBmbGFnczsKICNkZWZpbmUgVkZJT19ERVZJQ0VfRkxBR1NfUkVTRVQgKDEgPDwgMCkKICNkZWZpbmUgVkZJT19ERVZJQ0VfRkxBR1NfUENJICgxIDw8IDEpCiAgX191MzIgbnVtX3JlZ2lvbnM7Ci0gX191MzIgbnVtX2lycXM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIG51bV9pcnFzOwogfTsKICNkZWZpbmUgVkZJT19ERVZJQ0VfR0VUX0lORk8gX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgNykKIHN0cnVjdCB2ZmlvX3JlZ2lvbl9pbmZvIHsKLSBfX3UzMiBhcmdzejsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgYXJnc3o7CiAgX191MzIgZmxhZ3M7CiAjZGVmaW5lIFZGSU9fUkVHSU9OX0lORk9fRkxBR19SRUFEICgxIDw8IDApCiAjZGVmaW5lIFZGSU9fUkVHSU9OX0lORk9fRkxBR19XUklURSAoMSA8PCAxKQotI2RlZmluZSBWRklPX1JFR0lPTl9JTkZPX0ZMQUdfTU1BUCAoMSA8PCAyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVkZJT19SRUdJT05fSU5GT19GTEFHX01NQVAgKDEgPDwgMikKICBfX3UzMiBpbmRleDsKICBfX3UzMiByZXN2OwogIF9fdTY0IHNpemU7Ci0gX191NjQgb2Zmc2V0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBvZmZzZXQ7CiB9OwogI2RlZmluZSBWRklPX0RFVklDRV9HRVRfUkVHSU9OX0lORk8gX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgOCkKIHN0cnVjdCB2ZmlvX2lycV9pbmZvIHsKLSBfX3UzMiBhcmdzejsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgYXJnc3o7CiAgX191MzIgZmxhZ3M7CiAjZGVmaW5lIFZGSU9fSVJRX0lORk9fRVZFTlRGRCAoMSA8PCAwKQogI2RlZmluZSBWRklPX0lSUV9JTkZPX01BU0tBQkxFICgxIDw8IDEpCi0jZGVmaW5lIFZGSU9fSVJRX0lORk9fQVVUT01BU0tFRCAoMSA8PCAyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVkZJT19JUlFfSU5GT19BVVRPTUFTS0VEICgxIDw8IDIpCiAjZGVmaW5lIFZGSU9fSVJRX0lORk9fTk9SRVNJWkUgKDEgPDwgMykKICBfX3UzMiBpbmRleDsKICBfX3UzMiBjb3VudDsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgVkZJT19ERVZJQ0VfR0VUX0lSUV9JTkZPIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDkpCiBzdHJ1Y3QgdmZpb19pcnFfc2V0IHsKICBfX3UzMiBhcmdzejsKLSBfX3UzMiBmbGFnczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZmxhZ3M7CiAjZGVmaW5lIFZGSU9fSVJRX1NFVF9EQVRBX05PTkUgKDEgPDwgMCkKICNkZWZpbmUgVkZJT19JUlFfU0VUX0RBVEFfQk9PTCAoMSA8PCAxKQogI2RlZmluZSBWRklPX0lSUV9TRVRfREFUQV9FVkVOVEZEICgxIDw8IDIpCi0jZGVmaW5lIFZGSU9fSVJRX1NFVF9BQ1RJT05fTUFTSyAoMSA8PCAzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVkZJT19JUlFfU0VUX0FDVElPTl9NQVNLICgxIDw8IDMpCiAjZGVmaW5lIFZGSU9fSVJRX1NFVF9BQ1RJT05fVU5NQVNLICgxIDw8IDQpCiAjZGVmaW5lIFZGSU9fSVJRX1NFVF9BQ1RJT05fVFJJR0dFUiAoMSA8PCA1KQogIF9fdTMyIGluZGV4OwotIF9fdTMyIHN0YXJ0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBzdGFydDsKICBfX3UzMiBjb3VudDsKICBfX3U4IGRhdGFbXTsKIH07Ci0jZGVmaW5lIFZGSU9fREVWSUNFX1NFVF9JUlFTIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDEwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVkZJT19ERVZJQ0VfU0VUX0lSUVMgX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTApCiAjZGVmaW5lIFZGSU9fSVJRX1NFVF9EQVRBX1RZUEVfTUFTSyAoVkZJT19JUlFfU0VUX0RBVEFfTk9ORSB8ICAgVkZJT19JUlFfU0VUX0RBVEFfQk9PTCB8ICAgVkZJT19JUlFfU0VUX0RBVEFfRVZFTlRGRCkKICNkZWZpbmUgVkZJT19JUlFfU0VUX0FDVElPTl9UWVBFX01BU0sgKFZGSU9fSVJRX1NFVF9BQ1RJT05fTUFTSyB8ICAgVkZJT19JUlFfU0VUX0FDVElPTl9VTk1BU0sgfCAgIFZGSU9fSVJRX1NFVF9BQ1RJT05fVFJJR0dFUikKICNkZWZpbmUgVkZJT19ERVZJQ0VfUkVTRVQgX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTEpCi1lbnVtIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHsKICBWRklPX1BDSV9CQVIwX1JFR0lPTl9JTkRFWCwKICBWRklPX1BDSV9CQVIxX1JFR0lPTl9JTkRFWCwKICBWRklPX1BDSV9CQVIyX1JFR0lPTl9JTkRFWCwKLSBWRklPX1BDSV9CQVIzX1JFR0lPTl9JTkRFWCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVkZJT19QQ0lfQkFSM19SRUdJT05fSU5ERVgsCiAgVkZJT19QQ0lfQkFSNF9SRUdJT05fSU5ERVgsCiAgVkZJT19QQ0lfQkFSNV9SRUdJT05fSU5ERVgsCiAgVkZJT19QQ0lfUk9NX1JFR0lPTl9JTkRFWCwKLSBWRklPX1BDSV9DT05GSUdfUkVHSU9OX0lOREVYLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWRklPX1BDSV9DT05GSUdfUkVHSU9OX0lOREVYLAogIFZGSU9fUENJX1ZHQV9SRUdJT05fSU5ERVgsCiAgVkZJT19QQ0lfTlVNX1JFR0lPTlMKIH07Ci1lbnVtIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHsKICBWRklPX1BDSV9JTlRYX0lSUV9JTkRFWCwKICBWRklPX1BDSV9NU0lfSVJRX0lOREVYLAogIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLAotIFZGSU9fUENJX0VSUl9JUlFfSU5ERVgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFZGSU9fUENJX0VSUl9JUlFfSU5ERVgsCiAgVkZJT19QQ0lfTlVNX0lSUVMKIH07Ci1zdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9pbmZvIHsKLSBfX3UzMiBhcmdzejsKK3N0cnVjdCB2ZmlvX3BjaV9kZXBlbmRlbnRfZGV2aWNlIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZ3JvdXBfaWQ7CisgX191MTYgc2VnbWVudDsKKyBfX3U4IGJ1czsKKyBfX3U4IGRldmZuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitzdHJ1Y3QgdmZpb19wY2lfaG90X3Jlc2V0X2luZm8geworIF9fdTMyIGFyZ3N6OworIF9fdTMyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBjb3VudDsKKyBzdHJ1Y3QgdmZpb19wY2lfZGVwZW5kZW50X2RldmljZSBkZXZpY2VzW107Cit9OworI2RlZmluZSBWRklPX0RFVklDRV9HRVRfUENJX0hPVF9SRVNFVF9JTkZPIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDEyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB2ZmlvX3BjaV9ob3RfcmVzZXQgeworIF9fdTMyIGFyZ3N6OworIF9fdTMyIGZsYWdzOworIF9fdTMyIGNvdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3MzMiBncm91cF9mZHNbXTsKK307CisjZGVmaW5lIFZGSU9fREVWSUNFX1BDSV9IT1RfUkVTRVQgX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTMpCitzdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9pbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgYXJnc3o7CiAgX191MzIgZmxhZ3M7CiAjZGVmaW5lIFZGSU9fSU9NTVVfSU5GT19QR1NJWkVTICgxIDw8IDApCiAgX191NjQgaW92YV9wZ3NpemVzOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBWRklPX0lPTU1VX0dFVF9JTkZPIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDEyKQogc3RydWN0IHZmaW9faW9tbXVfdHlwZTFfZG1hX21hcCB7CiAgX191MzIgYXJnc3o7Ci0gX191MzIgZmxhZ3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGZsYWdzOwogI2RlZmluZSBWRklPX0RNQV9NQVBfRkxBR19SRUFEICgxIDw8IDApCiAjZGVmaW5lIFZGSU9fRE1BX01BUF9GTEFHX1dSSVRFICgxIDw8IDEpCiAgX191NjQgdmFkZHI7Ci0gX191NjQgaW92YTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgaW92YTsKICBfX3U2NCBzaXplOwogfTsKICNkZWZpbmUgVkZJT19JT01NVV9NQVBfRE1BIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDEzKQotc3RydWN0IHZmaW9faW9tbXVfdHlwZTFfZG1hX3VubWFwIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9kbWFfdW5tYXAgewogIF9fdTMyIGFyZ3N6OwogIF9fdTMyIGZsYWdzOwogIF9fdTY0IGlvdmE7Ci0gX191NjQgc2l6ZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgc2l6ZTsKIH07CiAjZGVmaW5lIFZGSU9fSU9NTVVfVU5NQVBfRE1BIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDE0KQorI2RlZmluZSBWRklPX0lPTU1VX0VOQUJMRSBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAxNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZGSU9fSU9NTVVfRElTQUJMRSBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAxNikKK3N0cnVjdCB2ZmlvX2lvbW11X3NwYXByX3RjZV9pbmZvIHsKKyBfX3UzMiBhcmdzejsKKyBfX3UzMiBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZG1hMzJfd2luZG93X3N0YXJ0OworIF9fdTMyIGRtYTMyX3dpbmRvd19zaXplOworfTsKKyNkZWZpbmUgVkZJT19JT01NVV9TUEFQUl9UQ0VfR0VUX0lORk8gX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92aWRlb2RldjIuaAppbmRleCBlZTAxZjgwLi5iMWM2MDQyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpZGVvZGV2Mi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmlkZW9kZXYyLmgKQEAgLTEwNiw4ICsxMDYsOCBAQAogIF9fczMyIGxlZnQ7CiAgX19zMzIgdG9wOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBfX3MzMiB3aWR0aDsKLSBfX3MzMiBoZWlnaHQ7CisgX191MzIgd2lkdGg7CisgX191MzIgaGVpZ2h0OwogfTsKIHN0cnVjdCB2NGwyX2ZyYWN0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC0yMjYsMTE3MiArMjI2LDExNzIgQEAKICNkZWZpbmUgVjRMMl9QSVhfRk1UX05WMTJNIHY0bDJfZm91cmNjKCdOJywgJ00nLCAnMScsICcyJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX05WMjFNIHY0bDJfZm91cmNjKCdOJywgJ00nLCAnMicsICcxJykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjE2TSB2NGwyX2ZvdXJjYygnTicsICdNJywgJzEnLCAnNicpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjYxTSB2NGwyX2ZvdXJjYygnTicsICdNJywgJzYnLCAnMScpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjEyTVQgdjRsMl9mb3VyY2MoJ1QnLCAnTScsICcxJywgJzInKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfTlYxMk1UXzE2WDE2IHY0bDJfZm91cmNjKCdWJywgJ00nLCAnMScsICcyJykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0MjBNIHY0bDJfZm91cmNjKCdZJywgJ00nLCAnMScsICcyJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1lWVTQyME0gdjRsMl9mb3VyY2MoJ1knLCAnTScsICcyJywgJzEnKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NCR0dSOCB2NGwyX2ZvdXJjYygnQicsICdBJywgJzgnLCAnMScpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TR0JSRzggdjRsMl9mb3VyY2MoJ0cnLCAnQicsICdSJywgJ0cnKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHUkJHOCB2NGwyX2ZvdXJjYygnRycsICdSJywgJ0InLCAnRycpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUkdHQjggdjRsMl9mb3VyY2MoJ1InLCAnRycsICdHJywgJ0InKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NCR0dSMTAgdjRsMl9mb3VyY2MoJ0InLCAnRycsICcxJywgJzAnKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dCUkcxMCB2NGwyX2ZvdXJjYygnRycsICdCJywgJzEnLCAnMCcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dSQkcxMCB2NGwyX2ZvdXJjYygnQicsICdBJywgJzEnLCAnMCcpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUkdHQjEwIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnMScsICcwJykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TQkdHUjEyIHY0bDJfZm91cmNjKCdCJywgJ0cnLCAnMScsICcyJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHQlJHMTIgdjRsMl9mb3VyY2MoJ0cnLCAnQicsICcxJywgJzInKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHUkJHMTIgdjRsMl9mb3VyY2MoJ0InLCAnQScsICcxJywgJzInKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfU1JHR0IxMiB2NGwyX2ZvdXJjYygnUicsICdHJywgJzEnLCAnMicpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1IxMEFMQVc4IHY0bDJfZm91cmNjKCdhJywgJ0InLCAnQScsICc4JykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHQlJHMTBBTEFXOCB2NGwyX2ZvdXJjYygnYScsICdHJywgJ0EnLCAnOCcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dSQkcxMEFMQVc4IHY0bDJfZm91cmNjKCdhJywgJ2cnLCAnQScsICc4JykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NSR0dCMTBBTEFXOCB2NGwyX2ZvdXJjYygnYScsICdSJywgJ0EnLCAnOCcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1IxMERQQ004IHY0bDJfZm91cmNjKCdiJywgJ0InLCAnQScsICc4JykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHQlJHMTBEUENNOCB2NGwyX2ZvdXJjYygnYicsICdHJywgJ0EnLCAnOCcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dSQkcxMERQQ004IHY0bDJfZm91cmNjKCdCJywgJ0QnLCAnMScsICcwJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NSR0dCMTBEUENNOCB2NGwyX2ZvdXJjYygnYicsICdSJywgJ0EnLCAnOCcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1IxNiB2NGwyX2ZvdXJjYygnQicsICdZJywgJ1InLCAnMicpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9NSlBFRyB2NGwyX2ZvdXJjYygnTScsICdKJywgJ1AnLCAnRycpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfSlBFRyB2NGwyX2ZvdXJjYygnSicsICdQJywgJ0UnLCAnRycpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9EViB2NGwyX2ZvdXJjYygnZCcsICd2JywgJ3MnLCAnZCcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfTVBFRyB2NGwyX2ZvdXJjYygnTScsICdQJywgJ0UnLCAnRycpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9IMjY0IHY0bDJfZm91cmNjKCdIJywgJzInLCAnNicsICc0JykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9IMjY0X05PX1NDIHY0bDJfZm91cmNjKCdBJywgJ1YnLCAnQycsICcxJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX0gyNjRfTVZDIHY0bDJfZm91cmNjKCdNJywgJzInLCAnNicsICc0JykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9IMjYzIHY0bDJfZm91cmNjKCdIJywgJzInLCAnNicsICczJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX01QRUcxIHY0bDJfZm91cmNjKCdNJywgJ1AnLCAnRycsICcxJykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9NUEVHMiB2NGwyX2ZvdXJjYygnTScsICdQJywgJ0cnLCAnMicpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9NUEVHNCB2NGwyX2ZvdXJjYygnTScsICdQJywgJ0cnLCAnNCcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfWFZJRCB2NGwyX2ZvdXJjYygnWCcsICdWJywgJ0knLCAnRCcpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9WQzFfQU5ORVhfRyB2NGwyX2ZvdXJjYygnVicsICdDJywgJzEnLCAnRycpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfVkMxX0FOTkVYX0wgdjRsMl9mb3VyY2MoJ1YnLCAnQycsICcxJywgJ0wnKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfVlA4IHY0bDJfZm91cmNjKCdWJywgJ1AnLCAnOCcsICcwJykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9DUElBMSB2NGwyX2ZvdXJjYygnQycsICdQJywgJ0knLCAnQScpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9XTlZBIHY0bDJfZm91cmNjKCdXJywgJ04nLCAnVicsICdBJykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TTjlDMTBYIHY0bDJfZm91cmNjKCdTJywgJzknLCAnMScsICcwJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NOOUMyMFhfSTQyMCB2NGwyX2ZvdXJjYygnUycsICc5JywgJzInLCAnMCcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfUFdDMSB2NGwyX2ZvdXJjYygnUCcsICdXJywgJ0MnLCAnMScpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9QV0MyIHY0bDJfZm91cmNjKCdQJywgJ1cnLCAnQycsICcyJykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9FVDYxWDI1MSB2NGwyX2ZvdXJjYygnRScsICc2JywgJzInLCAnNScpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUENBNTAxIHY0bDJfZm91cmNjKCdTJywgJzUnLCAnMCcsICcxJykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUENBNTA1IHY0bDJfZm91cmNjKCdTJywgJzUnLCAnMCcsICc1JykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NQQ0E1MDggdjRsMl9mb3VyY2MoJ1MnLCAnNScsICcwJywgJzgnKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NQQ0E1NjEgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICc2JywgJzEnKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfUEFDMjA3IHY0bDJfZm91cmNjKCdQJywgJzInLCAnMCcsICc3JykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9NUjk3MzEwQSB2NGwyX2ZvdXJjYygnTScsICczJywgJzEnLCAnMCcpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9KTDIwMDVCQ0QgdjRsMl9mb3VyY2MoJ0onLCAnTCcsICcyJywgJzAnKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NOOUMyMDI4IHY0bDJfZm91cmNjKCdTJywgJ08nLCAnTicsICdYJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NROTA1QyB2NGwyX2ZvdXJjYygnOScsICcwJywgJzUnLCAnQycpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfUEpQRyB2NGwyX2ZvdXJjYygnUCcsICdKJywgJ1AnLCAnRycpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9PVjUxMSB2NGwyX2ZvdXJjYygnTycsICc1JywgJzEnLCAnMScpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfT1Y1MTggdjRsMl9mb3VyY2MoJ08nLCAnNScsICcxJywgJzgnKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfU1RWMDY4MCB2NGwyX2ZvdXJjYygnUycsICc2JywgJzgnLCAnMCcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfVE02MDAwIHY0bDJfZm91cmNjKCdUJywgJ00nLCAnNicsICcwJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX0NJVF9ZWVZZVVkgdjRsMl9mb3VyY2MoJ0MnLCAnSScsICdUJywgJ1YnKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX0tPTklDQTQyMCB2NGwyX2ZvdXJjYygnSycsICdPJywgJ04nLCAnSScpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9KUEdMIHY0bDJfZm91cmNjKCdKJywgJ1AnLCAnRycsICdMJykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TRTQwMSB2NGwyX2ZvdXJjYygnUycsICc0JywgJzAnLCAnMScpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TNUNfVVlWWV9KUEcgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICdDJywgJ0knKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2ZtdGRlc2MgewogIF9fdTMyIGluZGV4OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIF9fdTMyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGRlc2NyaXB0aW9uWzMyXTsKICBfX3UzMiBwaXhlbGZvcm1hdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbNF07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEIDB4MDAwMQogI2RlZmluZSBWNEwyX0ZNVF9GTEFHX0VNVUxBVEVEIDB4MDAwMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9mcm1zaXpldHlwZXMgewogIFY0TDJfRlJNU0laRV9UWVBFX0RJU0NSRVRFID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9GUk1TSVpFX1RZUEVfQ09OVElOVU9VUyA9IDIsCiAgVjRMMl9GUk1TSVpFX1RZUEVfU1RFUFdJU0UgPSAzLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdjRsMl9mcm1zaXplX2Rpc2NyZXRlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgd2lkdGg7CiAgX191MzIgaGVpZ2h0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdjRsMl9mcm1zaXplX3N0ZXB3aXNlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWluX3dpZHRoOwogIF9fdTMyIG1heF93aWR0aDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc3RlcF93aWR0aDsKICBfX3UzMiBtaW5faGVpZ2h0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfaGVpZ2h0OwogIF9fdTMyIHN0ZXBfaGVpZ2h0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdjRsMl9mcm1zaXplZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGluZGV4OwogIF9fdTMyIHBpeGVsX2Zvcm1hdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdHlwZTsKICB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX2ZybXNpemVfZGlzY3JldGUgZGlzY3JldGU7CiAgc3RydWN0IHY0bDJfZnJtc2l6ZV9zdGVwd2lzZSBzdGVwd2lzZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfTsKICBfX3UzMiByZXNlcnZlZFsyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSB2NGwyX2ZybWl2YWx0eXBlcyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfRlJNSVZBTF9UWVBFX0RJU0NSRVRFID0gMSwKICBWNEwyX0ZSTUlWQUxfVFlQRV9DT05USU5VT1VTID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9GUk1JVkFMX1RZUEVfU1RFUFdJU0UgPSAzLAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9mcm1pdmFsX3N0ZXB3aXNlIHsKICBzdHJ1Y3QgdjRsMl9mcmFjdCBtaW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX2ZyYWN0IG1heDsKICBzdHJ1Y3QgdjRsMl9mcmFjdCBzdGVwOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdjRsMl9mcm1pdmFsZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGluZGV4OwogIF9fdTMyIHBpeGVsX2Zvcm1hdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgd2lkdGg7CiAgX191MzIgaGVpZ2h0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIHVuaW9uIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHY0bDJfZnJhY3QgZGlzY3JldGU7CiAgc3RydWN0IHY0bDJfZnJtaXZhbF9zdGVwd2lzZSBzdGVwd2lzZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfTsKICBfX3UzMiByZXNlcnZlZFsyXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHY0bDJfdGltZWNvZGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIF9fdTMyIGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGZyYW1lczsKICBfX3U4IHNlY29uZHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbWludXRlczsKICBfX3U4IGhvdXJzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHVzZXJiaXRzWzRdOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVENfVFlQRV8yNEZQUyAxCiAjZGVmaW5lIFY0TDJfVENfVFlQRV8yNUZQUyAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RDX1RZUEVfMzBGUFMgMwogI2RlZmluZSBWNEwyX1RDX1RZUEVfNTBGUFMgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UQ19UWVBFXzYwRlBTIDUKICNkZWZpbmUgVjRMMl9UQ19GTEFHX0RST1BGUkFNRSAweDAwMDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVENfRkxBR19DT0xPUkZSQU1FIDB4MDAwMgogI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTX2ZpZWxkIDB4MDAwQworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UQ19VU0VSQklUU19VU0VSREVGSU5FRCAweDAwMDAKICNkZWZpbmUgVjRMMl9UQ19VU0VSQklUU184QklUQ0hBUlMgMHgwMDA4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uIHsKICBpbnQgcXVhbGl0eTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IEFQUG47CiAgaW50IEFQUF9sZW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgQVBQX2RhdGFbNjBdOwogIGludCBDT01fbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIENPTV9kYXRhWzYwXTsKICBfX3UzMiBqcGVnX21hcmtlcnM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RIVCAoMTw8MykKICNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9EUVQgKDE8PDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RSSSAoMTw8NSkKICNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9DT00gKDE8PDYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0FQUCAoMTw8NykKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgewogIF9fdTMyIGNvdW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIF9fdTMyIG1lbW9yeTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbMl07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX3BsYW5lIHsKICBfX3UzMiBieXRlc3VzZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGxlbmd0aDsKICB1bmlvbiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1lbV9vZmZzZXQ7CiAgdW5zaWduZWQgbG9uZyB1c2VycHRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBmZDsKICB9IG07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGRhdGFfb2Zmc2V0OwogIF9fdTMyIHJlc2VydmVkWzExXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHY0bDJfYnVmZmVyIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW5kZXg7CiAgX191MzIgdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYnl0ZXN1c2VkOwogIF9fdTMyIGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmaWVsZDsKICBzdHJ1Y3QgdGltZXZhbCB0aW1lc3RhbXA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX3RpbWVjb2RlIHRpbWVjb2RlOwogIF9fdTMyIHNlcXVlbmNlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtZW1vcnk7CiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBvZmZzZXQ7CiAgdW5zaWduZWQgbG9uZyB1c2VycHRyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9wbGFuZSAqcGxhbmVzOwogIF9fczMyIGZkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IG07CiAgX191MzIgbGVuZ3RoOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZDI7CiAgX191MzIgcmVzZXJ2ZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9CVUZfRkxBR19NQVBQRUQgMHgwMDAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0JVRl9GTEFHX1FVRVVFRCAweDAwMDIKICNkZWZpbmUgVjRMMl9CVUZfRkxBR19ET05FIDB4MDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9CVUZfRkxBR19LRVlGUkFNRSAweDAwMDgKICNkZWZpbmUgVjRMMl9CVUZfRkxBR19QRlJBTUUgMHgwMDEwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0JVRl9GTEFHX0JGUkFNRSAweDAwMjAKICNkZWZpbmUgVjRMMl9CVUZfRkxBR19FUlJPUiAweDAwNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfVElNRUNPREUgMHgwMTAwCiAjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfUFJFUEFSRUQgMHgwNDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0JVRl9GTEFHX05PX0NBQ0hFX0lOVkFMSURBVEUgMHgwODAwCiAjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfTk9fQ0FDSEVfQ0xFQU4gMHgxMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RJTUVTVEFNUF9NQVNLIDB4ZTAwMAogI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RJTUVTVEFNUF9VTktOT1dOIDB4MDAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfTU9OT1RPTklDIDB4MjAwMAogI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RJTUVTVEFNUF9DT1BZIDB4NDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2V4cG9ydGJ1ZmZlciB7CiAgX191MzIgdHlwZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW5kZXg7CiAgX191MzIgcGxhbmU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZsYWdzOwogIF9fczMyIGZkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFsxMV07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyIHsKICBfX3UzMiBjYXBhYmlsaXR5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKICB2b2lkICpiYXNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGZtdDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0VYVEVSTk9WRVJMQVkgMHgwMDAxCiAjZGVmaW5lIFY0TDJfRkJVRl9DQVBfQ0hST01BS0VZIDB4MDAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HIDB4MDAwNAogI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0JJVE1BUF9DTElQUElORyAweDAwMDgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRkJVRl9DQVBfTE9DQUxfQUxQSEEgMHgwMDEwCiAjZGVmaW5lIFY0TDJfRkJVRl9DQVBfR0xPQkFMX0FMUEhBIDB4MDAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9GQlVGX0NBUF9MT0NBTF9JTlZfQUxQSEEgMHgwMDQwCiAjZGVmaW5lIFY0TDJfRkJVRl9DQVBfU1JDX0NIUk9NQUtFWSAweDAwODAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRkJVRl9GTEFHX1BSSU1BUlkgMHgwMDAxCiAjZGVmaW5lIFY0TDJfRkJVRl9GTEFHX09WRVJMQVkgMHgwMDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19DSFJPTUFLRVkgMHgwMDA0CiAjZGVmaW5lIFY0TDJfRkJVRl9GTEFHX0xPQ0FMX0FMUEhBIDB4MDAwOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfR0xPQkFMX0FMUEhBIDB4MDAxMAogI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19MT0NBTF9JTlZfQUxQSEEgMHgwMDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19TUkNfQ0hST01BS0VZIDB4MDA0MAogc3RydWN0IHY0bDJfY2xpcCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX3JlY3QgYzsKICBzdHJ1Y3QgdjRsMl9jbGlwIF9fdXNlciAqbmV4dDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHY0bDJfd2luZG93IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHY0bDJfcmVjdCB3OwogIF9fdTMyIGZpZWxkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjaHJvbWFrZXk7CiAgc3RydWN0IHY0bDJfY2xpcCBfX3VzZXIgKmNsaXBzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjbGlwY291bnQ7CiAgdm9pZCBfX3VzZXIgKmJpdG1hcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBnbG9iYWxfYWxwaGE7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtIHsKICBfX3UzMiBjYXBhYmlsaXR5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjYXB0dXJlbW9kZTsKICBzdHJ1Y3QgdjRsMl9mcmFjdCB0aW1lcGVyZnJhbWU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGV4dGVuZGVkbW9kZTsKICBfX3UzMiByZWFkYnVmZmVyczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbNF07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9NT0RFX0hJR0hRVUFMSVRZIDB4MDAwMQogI2RlZmluZSBWNEwyX0NBUF9USU1FUEVSRlJBTUUgMHgxMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfb3V0cHV0cGFybSB7CiAgX191MzIgY2FwYWJpbGl0eTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgb3V0cHV0bW9kZTsKICBzdHJ1Y3QgdjRsMl9mcmFjdCB0aW1lcGVyZnJhbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGV4dGVuZGVkbW9kZTsKICBfX3UzMiB3cml0ZWJ1ZmZlcnM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzRdOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9jcm9wY2FwIHsKICBfX3UzMiB0eXBlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9yZWN0IGJvdW5kczsKICBzdHJ1Y3QgdjRsMl9yZWN0IGRlZnJlY3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX2ZyYWN0IHBpeGVsYXNwZWN0OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9jcm9wIHsKICBfX3UzMiB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9yZWN0IGM7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX3NlbGVjdGlvbiB7CiAgX191MzIgdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdGFyZ2V0OwogIF9fdTMyIGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9yZWN0IHI7CiAgX191MzIgcmVzZXJ2ZWRbOV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHR5cGVkZWYgX191NjQgdjRsMl9zdGRfaWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF9QQUxfQiAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDEpCiAjZGVmaW5lIFY0TDJfU1REX1BBTF9CMSAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF9QQUxfRyAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDQpCiAjZGVmaW5lIFY0TDJfU1REX1BBTF9IICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwOCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX1BBTF9JICgodjRsMl9zdGRfaWQpMHgwMDAwMDAxMCkKICNkZWZpbmUgVjRMMl9TVERfUEFMX0QgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDIwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfUEFMX0QxICgodjRsMl9zdGRfaWQpMHgwMDAwMDA0MCkKICNkZWZpbmUgVjRMMl9TVERfUEFMX0sgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDgwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfUEFMX00gKCh2NGwyX3N0ZF9pZCkweDAwMDAwMTAwKQogI2RlZmluZSBWNEwyX1NURF9QQUxfTiAoKHY0bDJfc3RkX2lkKTB4MDAwMDAyMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF9QQUxfTmMgKCh2NGwyX3N0ZF9pZCkweDAwMDAwNDAwKQogI2RlZmluZSBWNEwyX1NURF9QQUxfNjAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwODAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfTlRTQ19NICgodjRsMl9zdGRfaWQpMHgwMDAwMTAwMCkKICNkZWZpbmUgVjRMMl9TVERfTlRTQ19NX0pQICgodjRsMl9zdGRfaWQpMHgwMDAwMjAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX05UU0NfNDQzICgodjRsMl9zdGRfaWQpMHgwMDAwNDAwMCkKICNkZWZpbmUgVjRMMl9TVERfTlRTQ19NX0tSICgodjRsMl9zdGRfaWQpMHgwMDAwODAwMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0IgKCh2NGwyX3N0ZF9pZCkweDAwMDEwMDAwKQogI2RlZmluZSBWNEwyX1NURF9TRUNBTV9EICgodjRsMl9zdGRfaWQpMHgwMDAyMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0cgKCh2NGwyX3N0ZF9pZCkweDAwMDQwMDAwKQogI2RlZmluZSBWNEwyX1NURF9TRUNBTV9IICgodjRsMl9zdGRfaWQpMHgwMDA4MDAwMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0sgKCh2NGwyX3N0ZF9pZCkweDAwMTAwMDAwKQogI2RlZmluZSBWNEwyX1NURF9TRUNBTV9LMSAoKHY0bDJfc3RkX2lkKTB4MDAyMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF9TRUNBTV9MICgodjRsMl9zdGRfaWQpMHgwMDQwMDAwMCkKICNkZWZpbmUgVjRMMl9TVERfU0VDQU1fTEMgKCh2NGwyX3N0ZF9pZCkweDAwODAwMDAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfQVRTQ184X1ZTQiAoKHY0bDJfc3RkX2lkKTB4MDEwMDAwMDApCiAjZGVmaW5lIFY0TDJfU1REX0FUU0NfMTZfVlNCICgodjRsMl9zdGRfaWQpMHgwMjAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX05UU0MgKFY0TDJfU1REX05UU0NfTSB8ICBWNEwyX1NURF9OVFNDX01fSlAgfCAgVjRMMl9TVERfTlRTQ19NX0tSKQogI2RlZmluZSBWNEwyX1NURF9TRUNBTV9ESyAoVjRMMl9TVERfU0VDQU1fRCB8ICBWNEwyX1NURF9TRUNBTV9LIHwgIFY0TDJfU1REX1NFQ0FNX0sxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfU0VDQU0gKFY0TDJfU1REX1NFQ0FNX0IgfCAgVjRMMl9TVERfU0VDQU1fRyB8ICBWNEwyX1NURF9TRUNBTV9IIHwgIFY0TDJfU1REX1NFQ0FNX0RLIHwgIFY0TDJfU1REX1NFQ0FNX0wgfCAgVjRMMl9TVERfU0VDQU1fTEMpCiAjZGVmaW5lIFY0TDJfU1REX1BBTF9CRyAoVjRMMl9TVERfUEFMX0IgfCAgVjRMMl9TVERfUEFMX0IxIHwgIFY0TDJfU1REX1BBTF9HKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfUEFMX0RLIChWNEwyX1NURF9QQUxfRCB8ICBWNEwyX1NURF9QQUxfRDEgfCAgVjRMMl9TVERfUEFMX0spCiAjZGVmaW5lIFY0TDJfU1REX1BBTCAoVjRMMl9TVERfUEFMX0JHIHwgIFY0TDJfU1REX1BBTF9ESyB8ICBWNEwyX1NURF9QQUxfSCB8ICBWNEwyX1NURF9QQUxfSSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX0IgKFY0TDJfU1REX1BBTF9CIHwgIFY0TDJfU1REX1BBTF9CMSB8ICBWNEwyX1NURF9TRUNBTV9CKQogI2RlZmluZSBWNEwyX1NURF9HIChWNEwyX1NURF9QQUxfRyB8ICBWNEwyX1NURF9TRUNBTV9HKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfSCAoVjRMMl9TVERfUEFMX0ggfCAgVjRMMl9TVERfU0VDQU1fSCkKICNkZWZpbmUgVjRMMl9TVERfTCAoVjRMMl9TVERfU0VDQU1fTCB8ICBWNEwyX1NURF9TRUNBTV9MQykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX0dIIChWNEwyX1NURF9HIHwgIFY0TDJfU1REX0gpCiAjZGVmaW5lIFY0TDJfU1REX0RLIChWNEwyX1NURF9QQUxfREsgfCAgVjRMMl9TVERfU0VDQU1fREspCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF9CRyAoVjRMMl9TVERfQiB8ICBWNEwyX1NURF9HKQogI2RlZmluZSBWNEwyX1NURF9NTiAoVjRMMl9TVERfUEFMX00gfCAgVjRMMl9TVERfUEFMX04gfCAgVjRMMl9TVERfUEFMX05jIHwgIFY0TDJfU1REX05UU0MpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF9NVFMgKFY0TDJfU1REX05UU0NfTSB8ICBWNEwyX1NURF9QQUxfTSB8ICBWNEwyX1NURF9QQUxfTiB8ICBWNEwyX1NURF9QQUxfTmMpCiAjZGVmaW5lIFY0TDJfU1REXzUyNV82MCAoVjRMMl9TVERfUEFMX00gfCAgVjRMMl9TVERfUEFMXzYwIHwgIFY0TDJfU1REX05UU0MgfCAgVjRMMl9TVERfTlRTQ180NDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF82MjVfNTAgKFY0TDJfU1REX1BBTCB8ICBWNEwyX1NURF9QQUxfTiB8ICBWNEwyX1NURF9QQUxfTmMgfCAgVjRMMl9TVERfU0VDQU0pCiAjZGVmaW5lIFY0TDJfU1REX0FUU0MgKFY0TDJfU1REX0FUU0NfOF9WU0IgfCAgVjRMMl9TVERfQVRTQ18xNl9WU0IpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF9VTktOT1dOIDAKICNkZWZpbmUgVjRMMl9TVERfQUxMIChWNEwyX1NURF81MjVfNjAgfCAgVjRMMl9TVERfNjI1XzUwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX3N0YW5kYXJkIHsKICBfX3UzMiBpbmRleDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdjRsMl9zdGRfaWQgaWQ7CiAgX191OCBuYW1lWzI0XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHY0bDJfZnJhY3QgZnJhbWVwZXJpb2Q7CiAgX191MzIgZnJhbWVsaW5lczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbNF07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2J0X3RpbWluZ3MgewogIF9fdTMyIHdpZHRoOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBoZWlnaHQ7CiAgX191MzIgaW50ZXJsYWNlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcG9sYXJpdGllczsKICBfX3U2NCBwaXhlbGNsb2NrOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBoZnJvbnRwb3JjaDsKICBfX3UzMiBoc3luYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGJhY2twb3JjaDsKICBfX3UzMiB2ZnJvbnRwb3JjaDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdnN5bmM7CiAgX191MzIgdmJhY2twb3JjaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaWxfdmZyb250cG9yY2g7CiAgX191MzIgaWxfdnN5bmM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlsX3ZiYWNrcG9yY2g7CiAgX191MzIgc3RhbmRhcmRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKICBfX3UzMiByZXNlcnZlZFsxNF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAjZGVmaW5lIFY0TDJfRFZfUFJPR1JFU1NJVkUgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9JTlRFUkxBQ0VEIDEKICNkZWZpbmUgVjRMMl9EVl9WU1lOQ19QT1NfUE9MIDB4MDAwMDAwMDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfSFNZTkNfUE9TX1BPTCAweDAwMDAwMDAyCiAjZGVmaW5lIFY0TDJfRFZfQlRfU1REX0NFQTg2MSAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9TVERfRE1UICgxIDw8IDEpCiAjZGVmaW5lIFY0TDJfRFZfQlRfU1REX0NWVCAoMSA8PCAyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9TVERfR1RGICgxIDw8IDMpCiAjZGVmaW5lIFY0TDJfRFZfRkxfUkVEVUNFRF9CTEFOS0lORyAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9GTF9DQU5fUkVEVUNFX0ZQUyAoMSA8PCAxKQogI2RlZmluZSBWNEwyX0RWX0ZMX1JFRFVDRURfRlBTICgxIDw8IDIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0ZMX0hBTEZfTElORSAoMSA8PCAzKQorI2RlZmluZSBWNEwyX0RWX0JUX0JMQU5LSU5HX1dJRFRIKGJ0KSAgIChidC0+aGZyb250cG9yY2ggKyBidC0+aHN5bmMgKyBidC0+aGJhY2twb3JjaCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRFZfQlRfRlJBTUVfV0lEVEgoYnQpICAgKGJ0LT53aWR0aCArIFY0TDJfRFZfQlRfQkxBTktJTkdfV0lEVEgoYnQpKQorI2RlZmluZSBWNEwyX0RWX0JUX0JMQU5LSU5HX0hFSUdIVChidCkgICAoYnQtPnZmcm9udHBvcmNoICsgYnQtPnZzeW5jICsgYnQtPnZiYWNrcG9yY2ggKyAgIGJ0LT5pbF92ZnJvbnRwb3JjaCArIGJ0LT5pbF92c3luYyArIGJ0LT5pbF92YmFja3BvcmNoKQorI2RlZmluZSBWNEwyX0RWX0JUX0ZSQU1FX0hFSUdIVChidCkgICAoYnQtPmhlaWdodCArIFY0TDJfRFZfQlRfQkxBTktJTkdfSEVJR0hUKGJ0KSkKIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIHVuaW9uIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHY0bDJfYnRfdGltaW5ncyBidDsKICBfX3UzMiByZXNlcnZlZFszMl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfQlRfNjU2XzExMjAgMAogc3RydWN0IHY0bDJfZW51bV9kdl90aW1pbmdzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW5kZXg7CiAgX191MzIgcmVzZXJ2ZWRbM107Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgdGltaW5nczsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfYnRfdGltaW5nc19jYXAgewogIF9fdTMyIG1pbl93aWR0aDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3dpZHRoOwogIF9fdTMyIG1pbl9oZWlnaHQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9oZWlnaHQ7CiAgX191NjQgbWluX3BpeGVsY2xvY2s7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IG1heF9waXhlbGNsb2NrOwogIF9fdTMyIHN0YW5kYXJkczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY2FwYWJpbGl0aWVzOwogIF9fdTMyIHJlc2VydmVkWzE2XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKICNkZWZpbmUgVjRMMl9EVl9CVF9DQVBfSU5URVJMQUNFRCAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9DQVBfUFJPR1JFU1NJVkUgKDEgPDwgMSkKICNkZWZpbmUgVjRMMl9EVl9CVF9DQVBfUkVEVUNFRF9CTEFOS0lORyAoMSA8PCAyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF9DQVBfQ1VTVE9NICgxIDw8IDMpCiBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzX2NhcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR5cGU7CiAgX191MzIgcmVzZXJ2ZWRbM107Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBzdHJ1Y3QgdjRsMl9idF90aW1pbmdzX2NhcCBidDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmF3X2RhdGFbMzJdOwogIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB2NGwyX2lucHV0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW5kZXg7CiAgX191OCBuYW1lWzMyXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdHlwZTsKICBfX3UzMiBhdWRpb3NldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdHVuZXI7CiAgdjRsMl9zdGRfaWQgc3RkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzdGF0dXM7CiAgX191MzIgY2FwYWJpbGl0aWVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFszXTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0lOUFVUX1RZUEVfVFVORVIgMQogI2RlZmluZSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfSU5fU1RfTk9fUE9XRVIgMHgwMDAwMDAwMQogI2RlZmluZSBWNEwyX0lOX1NUX05PX1NJR05BTCAweDAwMDAwMDAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0lOX1NUX05PX0NPTE9SIDB4MDAwMDAwMDQKICNkZWZpbmUgVjRMMl9JTl9TVF9IRkxJUCAweDAwMDAwMDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0lOX1NUX1ZGTElQIDB4MDAwMDAwMjAKICNkZWZpbmUgVjRMMl9JTl9TVF9OT19IX0xPQ0sgMHgwMDAwMDEwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9JTl9TVF9DT0xPUl9LSUxMIDB4MDAwMDAyMDAKICNkZWZpbmUgVjRMMl9JTl9TVF9OT19TWU5DIDB4MDAwMTAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfSU5fU1RfTk9fRVFVIDB4MDAwMjAwMDAKICNkZWZpbmUgVjRMMl9JTl9TVF9OT19DQVJSSUVSIDB4MDAwNDAwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfSU5fU1RfTUFDUk9WSVNJT04gMHgwMTAwMDAwMAogI2RlZmluZSBWNEwyX0lOX1NUX05PX0FDQ0VTUyAweDAyMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0lOX1NUX1ZUUiAweDA0MDAwMDAwCiAjZGVmaW5lIFY0TDJfSU5fQ0FQX0RWX1RJTUlOR1MgMHgwMDAwMDAwMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9JTl9DQVBfQ1VTVE9NX1RJTUlOR1MgVjRMMl9JTl9DQVBfRFZfVElNSU5HUwogI2RlZmluZSBWNEwyX0lOX0NBUF9TVEQgMHgwMDAwMDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX291dHB1dCB7CiAgX191MzIgaW5kZXg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbmFtZVszMl07CiAgX191MzIgdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYXVkaW9zZXQ7CiAgX191MzIgbW9kdWxhdG9yOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2NGwyX3N0ZF9pZCBzdGQ7CiAgX191MzIgY2FwYWJpbGl0aWVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFszXTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX09VVFBVVF9UWVBFX01PRFVMQVRPUiAxCiAjZGVmaW5lIFY0TDJfT1VUUFVUX1RZUEVfQU5BTE9HIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfT1VUUFVUX1RZUEVfQU5BTE9HVkdBT1ZFUkxBWSAzCiAjZGVmaW5lIFY0TDJfT1VUX0NBUF9EVl9USU1JTkdTIDB4MDAwMDAwMDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfT1VUX0NBUF9DVVNUT01fVElNSU5HUyBWNEwyX09VVF9DQVBfRFZfVElNSU5HUwogI2RlZmluZSBWNEwyX09VVF9DQVBfU1REIDB4MDAwMDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9jb250cm9sIHsKICBfX3UzMiBpZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgdmFsdWU7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2V4dF9jb250cm9sIHsKICBfX3UzMiBpZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc2l6ZTsKICBfX3UzMiByZXNlcnZlZDJbMV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBfX3MzMiB2YWx1ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zNjQgdmFsdWU2NDsKICBjaGFyICpzdHJpbmc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgewogIF9fdTMyIGN0cmxfY2xhc3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNvdW50OwogIF9fdTMyIGVycm9yX2lkeDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbMl07CiAgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmNvbnRyb2xzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ1RSTF9JRF9NQVNLICgweDBmZmZmZmZmKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DVFJMX0lEMkNMQVNTKGlkKSAoKGlkKSAmIDB4MGZmZjAwMDBVTCkKICNkZWZpbmUgVjRMMl9DVFJMX0RSSVZFUl9QUklWKGlkKSAoKChpZCkgJiAweGZmZmYpID49IDB4MTAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfY3RybF90eXBlIHsKICBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSID0gMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiA9IDIsCiAgVjRMMl9DVFJMX1RZUEVfTUVOVSA9IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfQ1RSTF9UWVBFX0JVVFRPTiA9IDQsCiAgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjY0ID0gNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9DVFJMX1RZUEVfQ1RSTF9DTEFTUyA9IDYsCiAgVjRMMl9DVFJMX1RZUEVfU1RSSU5HID0gNywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9DVFJMX1RZUEVfQklUTUFTSyA9IDgsCiAgVjRMMl9DVFJMX1RZUEVfSU5URUdFUl9NRU5VID0gOSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHY0bDJfcXVlcnljdHJsIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaWQ7CiAgX191MzIgdHlwZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBuYW1lWzMyXTsKICBfX3MzMiBtaW5pbXVtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBtYXhpbXVtOwogIF9fczMyIHN0ZXA7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIGRlZmF1bHRfdmFsdWU7CiAgX191MzIgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzJdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgewogIF9fdTMyIGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpbmRleDsKICB1bmlvbiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbmFtZVszMl07CiAgX19zNjQgdmFsdWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH07CiAgX191MzIgcmVzZXJ2ZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEIDB4MDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfR1JBQkJFRCAweDAwMDIKICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZIDB4MDAwNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfVVBEQVRFIDB4MDAwOAogI2RlZmluZSBWNEwyX0NUUkxfRkxBR19JTkFDVElWRSAweDAwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1NMSURFUiAweDAwMjAKICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWSAweDAwNDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1ZPTEFUSUxFIDB4MDA4MAogI2RlZmluZSBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkwgMHg4MDAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTUFYX0NUUkxTIDEwMjQKICNkZWZpbmUgVjRMMl9DSURfUFJJVkFURV9CQVNFIDB4MDgwMDAwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl90dW5lciB7CiAgX191MzIgaW5kZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbmFtZVszMl07CiAgX191MzIgdHlwZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY2FwYWJpbGl0eTsKICBfX3UzMiByYW5nZWxvdzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmFuZ2VoaWdoOwogIF9fdTMyIHJ4c3ViY2hhbnM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGF1ZG1vZGU7CiAgX19zMzIgc2lnbmFsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBhZmM7CiAgX191MzIgcmVzZXJ2ZWRbNF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB2NGwyX21vZHVsYXRvciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGluZGV4OwogIF9fdTggbmFtZVszMl07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNhcGFiaWxpdHk7CiAgX191MzIgcmFuZ2Vsb3c7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJhbmdlaGlnaDsKICBfX3UzMiB0eHN1YmNoYW5zOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFs0XTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9MT1cgMHgwMDAxCiAjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX05PUk0gMHgwMDAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9IV1NFRUtfQk9VTkRFRCAweDAwMDQKICNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfSFdTRUVLX1dSQVAgMHgwMDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gMHgwMDEwCiAjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0xBTkcyIDB4MDAyMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfU0FQIDB4MDAyMAogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9MQU5HMSAweDAwNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1JEUyAweDAwODAKICNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfUkRTX0JMT0NLX0lPIDB4MDEwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfUkRTX0NPTlRST0xTIDB4MDIwMAogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9GUkVRX0JBTkRTIDB4MDQwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfSFdTRUVLX1BST0dfTElNIDB4MDgwMAogI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9NT05PIDB4MDAwMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfU1RFUkVPIDB4MDAwMgogI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9MQU5HMiAweDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVFVORVJfU1VCX1NBUCAweDAwMDQKICNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfTEFORzEgMHgwMDA4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9SRFMgMHgwMDEwCiAjZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9NT05PIDB4MDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX1NURVJFTyAweDAwMDEKICNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX0xBTkcyIDB4MDAwMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX1NBUCAweDAwMDIKICNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX0xBTkcxIDB4MDAwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyIDB4MDAwNAogc3RydWN0IHY0bDJfZnJlcXVlbmN5IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdHVuZXI7CiAgX191MzIgdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZnJlcXVlbmN5OwogIF9fdTMyIHJlc2VydmVkWzhdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQkFORF9NT0RVTEFUSU9OX1ZTQiAoMSA8PCAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9CQU5EX01PRFVMQVRJT05fRk0gKDEgPDwgMikKICNkZWZpbmUgVjRMMl9CQU5EX01PRFVMQVRJT05fQU0gKDEgPDwgMykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3lfYmFuZCB7CiAgX191MzIgdHVuZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR5cGU7CiAgX191MzIgaW5kZXg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNhcGFiaWxpdHk7CiAgX191MzIgcmFuZ2Vsb3c7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJhbmdlaGlnaDsKICBfX3UzMiBtb2R1bGF0aW9uOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFs5XTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfaHdfZnJlcV9zZWVrIHsKICBfX3UzMiB0dW5lcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdHlwZTsKICBfX3UzMiBzZWVrX3Vwd2FyZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgd3JhcF9hcm91bmQ7CiAgX191MzIgc3BhY2luZzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmFuZ2Vsb3c7CiAgX191MzIgcmFuZ2VoaWdoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFs1XTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfcmRzX2RhdGEgewogIF9fdTggbHNiOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IG1zYjsKICBfX3U4IGJsb2NrOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogI2RlZmluZSBWNEwyX1JEU19CTE9DS19NU0sgMHg3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1JEU19CTE9DS19BIDAKICNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfQiAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1JEU19CTE9DS19DIDIKICNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfRCAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1JEU19CTE9DS19DX0FMVCA0CiAjZGVmaW5lIFY0TDJfUkRTX0JMT0NLX0lOVkFMSUQgNwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfQ09SUkVDVEVEIDB4NDAKICNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfRVJST1IgMHg4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2F1ZGlvIHsKICBfX3UzMiBpbmRleDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBuYW1lWzMyXTsKICBfX3UzMiBjYXBhYmlsaXR5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtb2RlOwogIF9fdTMyIHJlc2VydmVkWzJdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQVVEQ0FQX1NURVJFTyAweDAwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0FVRENBUF9BVkwgMHgwMDAwMgogI2RlZmluZSBWNEwyX0FVRE1PREVfQVZMIDB4MDAwMDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9hdWRpb291dCB7CiAgX191MzIgaW5kZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbmFtZVszMl07CiAgX191MzIgY2FwYWJpbGl0eTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbW9kZTsKICBfX3UzMiByZXNlcnZlZFsyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0VOQ19JRFhfRlJBTUVfSSAoMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRU5DX0lEWF9GUkFNRV9QICgxKQogI2RlZmluZSBWNEwyX0VOQ19JRFhfRlJBTUVfQiAoMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRU5DX0lEWF9GUkFNRV9NQVNLICgweGYpCiBzdHJ1Y3QgdjRsMl9lbmNfaWR4X2VudHJ5IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgb2Zmc2V0OwogIF9fdTY0IHB0czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbGVuZ3RoOwogIF9fdTMyIGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFsyXTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0VOQ19JRFhfRU5UUklFUyAoNjQpCiBzdHJ1Y3QgdjRsMl9lbmNfaWR4IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZW50cmllczsKICBfX3UzMiBlbnRyaWVzX2NhcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbNF07CiAgc3RydWN0IHY0bDJfZW5jX2lkeF9lbnRyeSBlbnRyeVtWNEwyX0VOQ19JRFhfRU5UUklFU107Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9FTkNfQ01EX1NUQVJUICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9FTkNfQ01EX1NUT1AgKDEpCiAjZGVmaW5lIFY0TDJfRU5DX0NNRF9QQVVTRSAoMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRU5DX0NNRF9SRVNVTUUgKDMpCiAjZGVmaW5lIFY0TDJfRU5DX0NNRF9TVE9QX0FUX0dPUF9FTkQgKDEgPDwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9lbmNvZGVyX2NtZCB7CiAgX191MzIgY21kOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKICB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB7CiAgX191MzIgZGF0YVs4XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSByYXc7CiAgfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0RFQ19DTURfU1RBUlQgKDApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RFQ19DTURfU1RPUCAoMSkKICNkZWZpbmUgVjRMMl9ERUNfQ01EX1BBVVNFICgyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9ERUNfQ01EX1JFU1VNRSAoMykKICNkZWZpbmUgVjRMMl9ERUNfQ01EX1NUQVJUX01VVEVfQVVESU8gKDEgPDwgMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfREVDX0NNRF9QQVVTRV9UT19CTEFDSyAoMSA8PCAwKQogI2RlZmluZSBWNEwyX0RFQ19DTURfU1RPUF9UT19CTEFDSyAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9ERUNfQ01EX1NUT1BfSU1NRURJQVRFTFkgKDEgPDwgMSkKICNkZWZpbmUgVjRMMl9ERUNfU1RBUlRfRk1UX05PTkUgKDApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RFQ19TVEFSVF9GTVRfR09QICgxKQogc3RydWN0IHY0bDJfZGVjb2Rlcl9jbWQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjbWQ7CiAgX191MzIgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBwdHM7CiAgfSBzdG9wOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgewogIF9fczMyIHNwZWVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmb3JtYXQ7CiAgfSBzdGFydDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICBfX3UzMiBkYXRhWzE2XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSByYXc7CiAgfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHY0bDJfdmJpX2Zvcm1hdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNhbXBsaW5nX3JhdGU7CiAgX191MzIgb2Zmc2V0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzYW1wbGVzX3Blcl9saW5lOwogIF9fdTMyIHNhbXBsZV9mb3JtYXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIHN0YXJ0WzJdOwogIF9fdTMyIGNvdW50WzJdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKICBfX3UzMiByZXNlcnZlZFsyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX1ZCSV9VTlNZTkMgKDEgPDwgMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVkJJX0lOVEVSTEFDRUQgKDEgPDwgMSkKIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgc2VydmljZV9zZXQ7CiAgX191MTYgc2VydmljZV9saW5lc1syXVsyNF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlvX3NpemU7CiAgX191MzIgcmVzZXJ2ZWRbMl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfQiAoMHgwMDAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TTElDRURfVlBTICgweDA0MDApCiAjZGVmaW5lIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1ICgweDEwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NMSUNFRF9XU1NfNjI1ICgweDQwMDApCiAjZGVmaW5lIFY0TDJfU0xJQ0VEX1ZCSV81MjUgKFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TTElDRURfVkJJXzYyNSAoVjRMMl9TTElDRURfVEVMRVRFWFRfQiB8IFY0TDJfU0xJQ0VEX1ZQUyB8IFY0TDJfU0xJQ0VEX1dTU182MjUpCiBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHNlcnZpY2Vfc2V0OwogIF9fdTE2IHNlcnZpY2VfbGluZXNbMl1bMjRdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIF9fdTMyIHJlc2VydmVkWzNdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpZDsKICBfX3UzMiBmaWVsZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbGluZTsKICBfX3UzMiByZXNlcnZlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBkYXRhWzQ4XTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfVEVMRVRFWFRfQiAoMSkKICNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX0NBUFRJT05fNTI1ICg0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX1dTU182MjUgKDUpCiAjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9WUFMgKDcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfbXBlZ192YmlfaXR2MF9saW5lIHsKICBfX3U4IGlkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGRhdGFbNDJdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfbXBlZ192YmlfaXR2MCB7CiAgX19sZTMyIGxpbmVtYXNrWzJdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9pdHYwX2xpbmUgbGluZVszNV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9JVFYwIHsKICBzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9pdHYwX2xpbmUgbGluZVszNl07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9NQUdJQzAgIml0djAiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfTUFHSUMxICJJVFYwIgogc3RydWN0IHY0bDJfbXBlZ192YmlfZm10X2l2dHYgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IG1hZ2ljWzRdOwogIHVuaW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHY0bDJfbXBlZ192YmlfaXR2MCBpdHYwOwogIHN0cnVjdCB2NGwyX21wZWdfdmJpX0lUVjAgSVRWMDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX3BsYW5lX3BpeF9mb3JtYXQgewogIF9fdTMyIHNpemVpbWFnZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgYnl0ZXNwZXJsaW5lOwogIF9fdTE2IHJlc2VydmVkWzddOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB3aWR0aDsKICBfX3UzMiBoZWlnaHQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBpeGVsZm9ybWF0OwogIF9fdTMyIGZpZWxkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjb2xvcnNwYWNlOwogIHN0cnVjdCB2NGwyX3BsYW5lX3BpeF9mb3JtYXQgcGxhbmVfZm10W1ZJREVPX01BWF9QTEFORVNdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IG51bV9wbGFuZXM7CiAgX191OCByZXNlcnZlZFsxMV07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiBzdHJ1Y3QgdjRsMl9mb3JtYXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIHVuaW9uIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBwaXg7CiAgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgcGl4X21wOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl93aW5kb3cgd2luOwogIHN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgdmJpOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCBzbGljZWQ7CiAgX191OCByYXdfZGF0YVsyMDBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IGZtdDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfc3RyZWFtcGFybSB7CiAgX191MzIgdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIHN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtIGNhcHR1cmU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX291dHB1dHBhcm0gb3V0cHV0OwogIF9fdTggcmF3X2RhdGFbMjAwXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBwYXJtOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRVZFTlRfQUxMIDAKICNkZWZpbmUgVjRMMl9FVkVOVF9WU1lOQyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0VWRU5UX0VPUyAyCiAjZGVmaW5lIFY0TDJfRVZFTlRfQ1RSTCAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0VWRU5UX0ZSQU1FX1NZTkMgNAogI2RlZmluZSBWNEwyX0VWRU5UX1BSSVZBVEVfU1RBUlQgMHgwODAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2V2ZW50X3ZzeW5jIHsKICBfX3U4IGZpZWxkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogI2RlZmluZSBWNEwyX0VWRU5UX0NUUkxfQ0hfVkFMVUUgKDEgPDwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRVZFTlRfQ1RSTF9DSF9GTEFHUyAoMSA8PCAxKQogI2RlZmluZSBWNEwyX0VWRU5UX0NUUkxfQ0hfUkFOR0UgKDEgPDwgMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9ldmVudF9jdHJsIHsKICBfX3UzMiBjaGFuZ2VzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIHVuaW9uIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgdmFsdWU7CiAgX19zNjQgdmFsdWU2NDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfTsKICBfX3UzMiBmbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgbWluaW11bTsKICBfX3MzMiBtYXhpbXVtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBzdGVwOwogIF9fczMyIGRlZmF1bHRfdmFsdWU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB2NGwyX2V2ZW50X2ZyYW1lX3N5bmMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmcmFtZV9zZXF1ZW5jZTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfZXZlbnQgewogIF9fdTMyIHR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBzdHJ1Y3QgdjRsMl9ldmVudF92c3luYyB2c3luYzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHY0bDJfZXZlbnRfY3RybCBjdHJsOwogIHN0cnVjdCB2NGwyX2V2ZW50X2ZyYW1lX3N5bmMgZnJhbWVfc3luYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBkYXRhWzY0XTsKICB9IHU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBlbmRpbmc7CiAgX191MzIgc2VxdWVuY2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3RhbXA7CiAgX191MzIgaWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzhdOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRVZFTlRfU1VCX0ZMX1NFTkRfSU5JVElBTCAoMSA8PCAwKQogI2RlZmluZSBWNEwyX0VWRU5UX1NVQl9GTF9BTExPV19GRUVEQkFDSyAoMSA8PCAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2V2ZW50X3N1YnNjcmlwdGlvbiB7CiAgX191MzIgdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaWQ7CiAgX191MzIgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzVdOwogfTsKLSNkZWZpbmUgVjRMMl9DSElQX01BVENIX0JSSURHRSAwCi0jZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9IT1NUIFY0TDJfQ0hJUF9NQVRDSF9CUklER0UKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9CUklER0UgMAorI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfU1VCREVWIDQKKyNkZWZpbmUgVjRMMl9DSElQX01BVENIX0hPU1QgVjRMMl9DSElQX01BVENIX0JSSURHRQogI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUiAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIgMgogI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfQUM5NyAzCi0jZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9TVUJERVYgNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2RiZ19tYXRjaCB7CiAgX191MzIgdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIF9fdTMyIGFkZHI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgbmFtZVszMl07CiAgfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX2RiZ19tYXRjaCBtYXRjaDsKICBfX3UzMiBzaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByZWc7CiAgX191NjQgdmFsOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgewotIHN0cnVjdCB2NGwyX2RiZ19tYXRjaCBtYXRjaDsKLSBfX3UzMiBpZGVudDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gX191MzIgcmV2aXNpb247CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKICNkZWZpbmUgVjRMMl9DSElQX0ZMX1JFQURBQkxFICgxIDw8IDApCi0jZGVmaW5lIFY0TDJfQ0hJUF9GTF9XUklUQUJMRSAoMSA8PCAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSElQX0ZMX1dSSVRBQkxFICgxIDw8IDEpCiBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pbmZvIHsKICBzdHJ1Y3QgdjRsMl9kYmdfbWF0Y2ggbWF0Y2g7CiAgY2hhciBuYW1lWzMyXTsKLSBfX3UzMiBmbGFnczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZmxhZ3M7CiAgX191MzIgcmVzZXJ2ZWRbMzJdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiBzdHJ1Y3QgdjRsMl9jcmVhdGVfYnVmZmVycyB7Ci0gX191MzIgaW5kZXg7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGluZGV4OwogIF9fdTMyIGNvdW50OwogIF9fdTMyIG1lbW9yeTsKICBzdHJ1Y3QgdjRsMl9mb3JtYXQgZm9ybWF0OwotIF9fdTMyIHJlc2VydmVkWzhdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiByZXNlcnZlZFs4XTsKIH07CiAjZGVmaW5lIFZJRElPQ19RVUVSWUNBUCBfSU9SKCdWJywgMCwgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSkKICNkZWZpbmUgVklESU9DX1JFU0VSVkVEIF9JTygnVicsIDEpCi0jZGVmaW5lIFZJRElPQ19FTlVNX0ZNVCBfSU9XUignVicsIDIsIHN0cnVjdCB2NGwyX2ZtdGRlc2MpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NfRU5VTV9GTVQgX0lPV1IoJ1YnLCAyLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjKQogI2RlZmluZSBWSURJT0NfR19GTVQgX0lPV1IoJ1YnLCA0LCBzdHJ1Y3QgdjRsMl9mb3JtYXQpCiAjZGVmaW5lIFZJRElPQ19TX0ZNVCBfSU9XUignVicsIDUsIHN0cnVjdCB2NGwyX2Zvcm1hdCkKICNkZWZpbmUgVklESU9DX1JFUUJVRlMgX0lPV1IoJ1YnLCA4LCBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycykKLSNkZWZpbmUgVklESU9DX1FVRVJZQlVGIF9JT1dSKCdWJywgOSwgc3RydWN0IHY0bDJfYnVmZmVyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX1FVRVJZQlVGIF9JT1dSKCdWJywgOSwgc3RydWN0IHY0bDJfYnVmZmVyKQogI2RlZmluZSBWSURJT0NfR19GQlVGIF9JT1IoJ1YnLCAxMCwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIpCiAjZGVmaW5lIFZJRElPQ19TX0ZCVUYgX0lPVygnVicsIDExLCBzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlcikKICNkZWZpbmUgVklESU9DX09WRVJMQVkgX0lPVygnVicsIDE0LCBpbnQpCi0jZGVmaW5lIFZJRElPQ19RQlVGIF9JT1dSKCdWJywgMTUsIHN0cnVjdCB2NGwyX2J1ZmZlcikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJRElPQ19RQlVGIF9JT1dSKCdWJywgMTUsIHN0cnVjdCB2NGwyX2J1ZmZlcikKICNkZWZpbmUgVklESU9DX0VYUEJVRiBfSU9XUignVicsIDE2LCBzdHJ1Y3QgdjRsMl9leHBvcnRidWZmZXIpCiAjZGVmaW5lIFZJRElPQ19EUUJVRiBfSU9XUignVicsIDE3LCBzdHJ1Y3QgdjRsMl9idWZmZXIpCiAjZGVmaW5lIFZJRElPQ19TVFJFQU1PTiBfSU9XKCdWJywgMTgsIGludCkKLSNkZWZpbmUgVklESU9DX1NUUkVBTU9GRiBfSU9XKCdWJywgMTksIGludCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJRElPQ19TVFJFQU1PRkYgX0lPVygnVicsIDE5LCBpbnQpCiAjZGVmaW5lIFZJRElPQ19HX1BBUk0gX0lPV1IoJ1YnLCAyMSwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSkKICNkZWZpbmUgVklESU9DX1NfUEFSTSBfSU9XUignVicsIDIyLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtKQogI2RlZmluZSBWSURJT0NfR19TVEQgX0lPUignVicsIDIzLCB2NGwyX3N0ZF9pZCkKLSNkZWZpbmUgVklESU9DX1NfU1REIF9JT1coJ1YnLCAyNCwgdjRsMl9zdGRfaWQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NfU19TVEQgX0lPVygnVicsIDI0LCB2NGwyX3N0ZF9pZCkKICNkZWZpbmUgVklESU9DX0VOVU1TVEQgX0lPV1IoJ1YnLCAyNSwgc3RydWN0IHY0bDJfc3RhbmRhcmQpCiAjZGVmaW5lIFZJRElPQ19FTlVNSU5QVVQgX0lPV1IoJ1YnLCAyNiwgc3RydWN0IHY0bDJfaW5wdXQpCiAjZGVmaW5lIFZJRElPQ19HX0NUUkwgX0lPV1IoJ1YnLCAyNywgc3RydWN0IHY0bDJfY29udHJvbCkKLSNkZWZpbmUgVklESU9DX1NfQ1RSTCBfSU9XUignVicsIDI4LCBzdHJ1Y3QgdjRsMl9jb250cm9sKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX1NfQ1RSTCBfSU9XUignVicsIDI4LCBzdHJ1Y3QgdjRsMl9jb250cm9sKQogI2RlZmluZSBWSURJT0NfR19UVU5FUiBfSU9XUignVicsIDI5LCBzdHJ1Y3QgdjRsMl90dW5lcikKICNkZWZpbmUgVklESU9DX1NfVFVORVIgX0lPVygnVicsIDMwLCBzdHJ1Y3QgdjRsMl90dW5lcikKICNkZWZpbmUgVklESU9DX0dfQVVESU8gX0lPUignVicsIDMzLCBzdHJ1Y3QgdjRsMl9hdWRpbykKLSNkZWZpbmUgVklESU9DX1NfQVVESU8gX0lPVygnVicsIDM0LCBzdHJ1Y3QgdjRsMl9hdWRpbykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJRElPQ19TX0FVRElPIF9JT1coJ1YnLCAzNCwgc3RydWN0IHY0bDJfYXVkaW8pCiAjZGVmaW5lIFZJRElPQ19RVUVSWUNUUkwgX0lPV1IoJ1YnLCAzNiwgc3RydWN0IHY0bDJfcXVlcnljdHJsKQogI2RlZmluZSBWSURJT0NfUVVFUllNRU5VIF9JT1dSKCdWJywgMzcsIHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSkKICNkZWZpbmUgVklESU9DX0dfSU5QVVQgX0lPUignVicsIDM4LCBpbnQpCi0jZGVmaW5lIFZJRElPQ19TX0lOUFVUIF9JT1dSKCdWJywgMzksIGludCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJRElPQ19TX0lOUFVUIF9JT1dSKCdWJywgMzksIGludCkKICNkZWZpbmUgVklESU9DX0dfT1VUUFVUIF9JT1IoJ1YnLCA0NiwgaW50KQogI2RlZmluZSBWSURJT0NfU19PVVRQVVQgX0lPV1IoJ1YnLCA0NywgaW50KQogI2RlZmluZSBWSURJT0NfRU5VTU9VVFBVVCBfSU9XUignVicsIDQ4LCBzdHJ1Y3QgdjRsMl9vdXRwdXQpCi0jZGVmaW5lIFZJRElPQ19HX0FVRE9VVCBfSU9SKCdWJywgNDksIHN0cnVjdCB2NGwyX2F1ZGlvb3V0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX0dfQVVET1VUIF9JT1IoJ1YnLCA0OSwgc3RydWN0IHY0bDJfYXVkaW9vdXQpCiAjZGVmaW5lIFZJRElPQ19TX0FVRE9VVCBfSU9XKCdWJywgNTAsIHN0cnVjdCB2NGwyX2F1ZGlvb3V0KQogI2RlZmluZSBWSURJT0NfR19NT0RVTEFUT1IgX0lPV1IoJ1YnLCA1NCwgc3RydWN0IHY0bDJfbW9kdWxhdG9yKQogI2RlZmluZSBWSURJT0NfU19NT0RVTEFUT1IgX0lPVygnVicsIDU1LCBzdHJ1Y3QgdjRsMl9tb2R1bGF0b3IpCi0jZGVmaW5lIFZJRElPQ19HX0ZSRVFVRU5DWSBfSU9XUignVicsIDU2LCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NfR19GUkVRVUVOQ1kgX0lPV1IoJ1YnLCA1Niwgc3RydWN0IHY0bDJfZnJlcXVlbmN5KQogI2RlZmluZSBWSURJT0NfU19GUkVRVUVOQ1kgX0lPVygnVicsIDU3LCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kpCiAjZGVmaW5lIFZJRElPQ19DUk9QQ0FQIF9JT1dSKCdWJywgNTgsIHN0cnVjdCB2NGwyX2Nyb3BjYXApCiAjZGVmaW5lIFZJRElPQ19HX0NST1AgX0lPV1IoJ1YnLCA1OSwgc3RydWN0IHY0bDJfY3JvcCkKLSNkZWZpbmUgVklESU9DX1NfQ1JPUCBfSU9XKCdWJywgNjAsIHN0cnVjdCB2NGwyX2Nyb3ApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NfU19DUk9QIF9JT1coJ1YnLCA2MCwgc3RydWN0IHY0bDJfY3JvcCkKICNkZWZpbmUgVklESU9DX0dfSlBFR0NPTVAgX0lPUignVicsIDYxLCBzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24pCiAjZGVmaW5lIFZJRElPQ19TX0pQRUdDT01QIF9JT1coJ1YnLCA2Miwgc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uKQogI2RlZmluZSBWSURJT0NfUVVFUllTVEQgX0lPUignVicsIDYzLCB2NGwyX3N0ZF9pZCkKLSNkZWZpbmUgVklESU9DX1RSWV9GTVQgX0lPV1IoJ1YnLCA2NCwgc3RydWN0IHY0bDJfZm9ybWF0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX1RSWV9GTVQgX0lPV1IoJ1YnLCA2NCwgc3RydWN0IHY0bDJfZm9ybWF0KQogI2RlZmluZSBWSURJT0NfRU5VTUFVRElPIF9JT1dSKCdWJywgNjUsIHN0cnVjdCB2NGwyX2F1ZGlvKQogI2RlZmluZSBWSURJT0NfRU5VTUFVRE9VVCBfSU9XUignVicsIDY2LCBzdHJ1Y3QgdjRsMl9hdWRpb291dCkKICNkZWZpbmUgVklESU9DX0dfUFJJT1JJVFkgX0lPUignVicsIDY3LCBfX3UzMikKLSNkZWZpbmUgVklESU9DX1NfUFJJT1JJVFkgX0lPVygnVicsIDY4LCBfX3UzMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJRElPQ19TX1BSSU9SSVRZIF9JT1coJ1YnLCA2OCwgX191MzIpCiAjZGVmaW5lIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQIF9JT1dSKCdWJywgNjksIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwKQogI2RlZmluZSBWSURJT0NfTE9HX1NUQVRVUyBfSU8oJ1YnLCA3MCkKICNkZWZpbmUgVklESU9DX0dfRVhUX0NUUkxTIF9JT1dSKCdWJywgNzEsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scykKLSNkZWZpbmUgVklESU9DX1NfRVhUX0NUUkxTIF9JT1dSKCdWJywgNzIsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJRElPQ19TX0VYVF9DVFJMUyBfSU9XUignVicsIDcyLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMpCiAjZGVmaW5lIFZJRElPQ19UUllfRVhUX0NUUkxTIF9JT1dSKCdWJywgNzMsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scykKICNkZWZpbmUgVklESU9DX0VOVU1fRlJBTUVTSVpFUyBfSU9XUignVicsIDc0LCBzdHJ1Y3QgdjRsMl9mcm1zaXplZW51bSkKICNkZWZpbmUgVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFMgX0lPV1IoJ1YnLCA3NSwgc3RydWN0IHY0bDJfZnJtaXZhbGVudW0pCi0jZGVmaW5lIFZJRElPQ19HX0VOQ19JTkRFWCBfSU9SKCdWJywgNzYsIHN0cnVjdCB2NGwyX2VuY19pZHgpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NfR19FTkNfSU5ERVggX0lPUignVicsIDc2LCBzdHJ1Y3QgdjRsMl9lbmNfaWR4KQogI2RlZmluZSBWSURJT0NfRU5DT0RFUl9DTUQgX0lPV1IoJ1YnLCA3Nywgc3RydWN0IHY0bDJfZW5jb2Rlcl9jbWQpCiAjZGVmaW5lIFZJRElPQ19UUllfRU5DT0RFUl9DTUQgX0lPV1IoJ1YnLCA3OCwgc3RydWN0IHY0bDJfZW5jb2Rlcl9jbWQpCiAjZGVmaW5lIFZJRElPQ19EQkdfU19SRUdJU1RFUiBfSU9XKCdWJywgNzksIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlcikKLSNkZWZpbmUgVklESU9DX0RCR19HX1JFR0lTVEVSIF9JT1dSKCdWJywgODAsIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlcikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFZJRElPQ19EQkdfR19DSElQX0lERU5UIF9JT1dSKCdWJywgODEsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50KQorI2RlZmluZSBWSURJT0NfREJHX0dfUkVHSVNURVIgX0lPV1IoJ1YnLCA4MCwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyKQogI2RlZmluZSBWSURJT0NfU19IV19GUkVRX1NFRUsgX0lPVygnVicsIDgyLCBzdHJ1Y3QgdjRsMl9od19mcmVxX3NlZWspCiAjZGVmaW5lIFZJRElPQ19TX0RWX1RJTUlOR1MgX0lPV1IoJ1YnLCA4Nywgc3RydWN0IHY0bDJfZHZfdGltaW5ncykKICNkZWZpbmUgVklESU9DX0dfRFZfVElNSU5HUyBfSU9XUignVicsIDg4LCBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92aXJ0aW9fY29uZmlnLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpcnRpb19jb25maWcuaAppbmRleCAxZDk4MzRkLi4wZDFmYzYyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpcnRpb19jb25maWcuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpcnRpb19jb25maWcuaApAQCAtMjgsNCArMjgsNiBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklSVElPX1RSQU5TUE9SVF9GX0VORCAzMgogI2RlZmluZSBWSVJUSU9fRl9OT1RJRllfT05fRU1QVFkgMjQKKyNkZWZpbmUgVklSVElPX0ZfQU5ZX0xBWU9VVCAyNwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92aXJ0aW9fY29uc29sZS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92aXJ0aW9fY29uc29sZS5oCmluZGV4IDE0OGZmZTAuLjgxZDUxNWMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmlydGlvX2NvbnNvbGUuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKQEAgLTI0LDI4ICsyNCwzMSBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KICNkZWZpbmUgVklSVElPX0NPTlNPTEVfRl9TSVpFIDAKICNkZWZpbmUgVklSVElPX0NPTlNPTEVfRl9NVUxUSVBPUlQgMQotI2RlZmluZSBWSVJUSU9fQ09OU09MRV9CQURfSUQgKH4oX191MzIpMCkKKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfRl9FTUVSR19XUklURSAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSVJUSU9fQ09OU09MRV9CQURfSUQgKH4oX191MzIpMCkKIHN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb25maWcgewogIF9fdTE2IGNvbHM7CiAgX191MTYgcm93czsKLSBfX3UzMiBtYXhfbnJfcG9ydHM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIG1heF9ucl9wb3J0czsKKyBfX3UzMiBlbWVyZ193cjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiBzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29udHJvbCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlkOwogIF9fdTE2IGV2ZW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiB2YWx1ZTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSVJUSU9fQ09OU09MRV9ERVZJQ0VfUkVBRFkgMAogI2RlZmluZSBWSVJUSU9fQ09OU09MRV9QT1JUX0FERCAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSVJUSU9fQ09OU09MRV9QT1JUX1JFTU9WRSAyCiAjZGVmaW5lIFZJUlRJT19DT05TT0xFX1BPUlRfUkVBRFkgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklSVElPX0NPTlNPTEVfQ09OU09MRV9QT1JUIDQKICNkZWZpbmUgVklSVElPX0NPTlNPTEVfUkVTSVpFIDUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJUlRJT19DT05TT0xFX1BPUlRfT1BFTiA2CiAjZGVmaW5lIFZJUlRJT19DT05TT0xFX1BPUlRfTkFNRSA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpcnRpb19uZXQuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmlydGlvX25ldC5oCmluZGV4IGIzZjk0MmMuLmFhZjFiMjkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmlydGlvX25ldC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmlydGlvX25ldC5oCkBAIC01Myw3ICs1Myw3IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSVJUSU9fTkVUX1NfQU5OT1VOQ0UgMgogc3RydWN0IHZpcnRpb19uZXRfY29uZmlnIHsKLSBfX3U4IG1hY1s2XTsKKyBfX3U4IG1hY1tFVEhfQUxFTl07CiAgX191MTYgc3RhdHVzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBtYXhfdmlydHF1ZXVlX3BhaXJzOwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92aXJ0aW9fcGNpLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpcnRpb19wY2kuaAppbmRleCBlYjkwOGUxLi5hZmZkNmM5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpcnRpb19wY2kuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpcnRpb19wY2kuaApAQCAtMzQsMTAgKzM0LDExIEBACiAjZGVmaW5lIFZJUlRJT19NU0lfQ09ORklHX1ZFQ1RPUiAyMAogI2RlZmluZSBWSVJUSU9fTVNJX1FVRVVFX1ZFQ1RPUiAyMgogI2RlZmluZSBWSVJUSU9fTVNJX05PX1ZFQ1RPUiAweGZmZmYKLSNkZWZpbmUgVklSVElPX1BDSV9DT05GSUcoZGV2KSAoKGRldiktPm1zaXhfZW5hYmxlZCA/IDI0IDogMjApCisjZGVmaW5lIFZJUlRJT19QQ0lfQ09ORklHX09GRihtc2l4X2VuYWJsZWQpICgobXNpeF9lbmFibGVkKSA/IDI0IDogMjApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSVJUSU9fUENJX0NPTkZJRyhkZXYpIFZJUlRJT19QQ0lfQ09ORklHX09GRigoZGV2KS0+bXNpeF9lbmFibGVkKQogI2RlZmluZSBWSVJUSU9fUENJX0FCSV9WRVJTSU9OIDAKICNkZWZpbmUgVklSVElPX1BDSV9RVUVVRV9BRERSX1NISUZUIDEyCiAjZGVmaW5lIFZJUlRJT19QQ0lfVlJJTkdfQUxJR04gNDA5NgotI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZzcDEuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdnNwMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NTIyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZzcDEuaApAQCAtMCwwICsxLDI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fVlNQMV9VU0VSX0hfXworI2RlZmluZSBfX1ZTUDFfVVNFUl9IX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX1ZTUDFfTFVUX0NPTkZJRyAgIF9JT1dSKCdWJywgQkFTRV9WSURJT0NfUFJJVkFURSArIDEsIHN0cnVjdCB2c3AxX2x1dF9jb25maWcpCitzdHJ1Y3QgdnNwMV9sdXRfY29uZmlnIHsKKyB1MzIgbHV0WzI1Nl07Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC93aW1heC9pMjQwMG0uaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvd2ltYXgvaTI0MDBtLmgKaW5kZXggNjQzYzA0OC4uMzA1ODVhOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC93aW1heC9pMjQwMG0uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3dpbWF4L2kyNDAwbS5oCkBAIC0xOSwzNjIgKzE5LDM2MyBAQAogI2lmbmRlZiBfX0xJTlVYX19XSU1BWF9fSTI0MDBNX0hfXwogI2RlZmluZSBfX0xJTlVYX19XSU1BWF9fSTI0MDBNX0hfXwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci1zdHJ1Y3QgaTI0MDBtX2JjZl9oZHIgeworI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGkyNDAwbV9iY2ZfaGRyIHsKICBfX2xlMzIgbW9kdWxlX3R5cGU7CiAgX19sZTMyIGhlYWRlcl9sZW47CiAgX19sZTMyIGhlYWRlcl92ZXJzaW9uOwotIF9fbGUzMiBtb2R1bGVfaWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiBtb2R1bGVfaWQ7CiAgX19sZTMyIG1vZHVsZV92ZW5kb3I7CiAgX19sZTMyIGRhdGU7CiAgX19sZTMyIHNpemU7Ci0gX19sZTMyIGtleV9zaXplOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIga2V5X3NpemU7CiAgX19sZTMyIG1vZHVsdXNfc2l6ZTsKICBfX2xlMzIgZXhwb25lbnRfc2l6ZTsKICBfX3U4IHJlc2VydmVkWzg4XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogZW51bSBpMjQwMG1fYnJoX29wY29kZSB7CiAgSTI0MDBNX0JSSF9SRUFEID0gMSwKICBJMjQwME1fQlJIX1dSSVRFID0gMiwKLSBJMjQwME1fQlJIX0pVTVAgPSAzLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fQlJIX0pVTVAgPSAzLAogIEkyNDAwTV9CUkhfU0lHTkVEX0pVTVAgPSA4LAogIEkyNDAwTV9CUkhfSEFTSF9QQVlMT0FEX09OTFkgPSA5LAogfTsKLWVudW0gaTI0MDBtX2JyaCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBpMjQwMG1fYnJoIHsKICBJMjQwME1fQlJIX1NJR05BVFVSRSA9IDB4Y2JiYzAwMDAsCiAgSTI0MDBNX0JSSF9TSUdOQVRVUkVfTUFTSyA9IDB4ZmZmZjAwMDAsCiAgSTI0MDBNX0JSSF9TSUdOQVRVUkVfU0hJRlQgPSAxNiwKLSBJMjQwME1fQlJIX09QQ09ERV9NQVNLID0gMHgwMDAwMDAwZiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX0JSSF9PUENPREVfTUFTSyA9IDB4MDAwMDAwMGYsCiAgSTI0MDBNX0JSSF9SRVNQT05TRV9NQVNLID0gMHgwMDAwMDBmMCwKICBJMjQwME1fQlJIX1JFU1BPTlNFX1NISUZUID0gNCwKICBJMjQwME1fQlJIX0RJUkVDVF9BQ0NFU1MgPSAweDAwMDAwNDAwLAotIEkyNDAwTV9CUkhfUkVTUE9OU0VfUkVRVUlSRUQgPSAweDAwMDAwMjAwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fQlJIX1JFU1BPTlNFX1JFUVVJUkVEID0gMHgwMDAwMDIwMCwKICBJMjQwME1fQlJIX1VTRV9DSEVDS1NVTSA9IDB4MDAwMDAxMDAsCiB9Owogc3RydWN0IGkyNDAwbV9ib290cm9tX2hlYWRlciB7Ci0gX19sZTMyIGNvbW1hbmQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiBjb21tYW5kOwogIF9fbGUzMiB0YXJnZXRfYWRkcjsKICBfX2xlMzIgZGF0YV9zaXplOwogIF9fbGUzMiBibG9ja19jaGVja3N1bTsKLSBjaGFyIHBheWxvYWRbMF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGNoYXIgcGF5bG9hZFswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogZW51bSBpMjQwMG1fcHQgewogIEkyNDAwTV9QVF9EQVRBID0gMCwKLSBJMjQwME1fUFRfQ1RSTCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX1BUX0NUUkwsCiAgSTI0MDBNX1BUX1RSQUNFLAogIEkyNDAwTV9QVF9SRVNFVF9XQVJNLAogIEkyNDAwTV9QVF9SRVNFVF9DT0xELAotIEkyNDAwTV9QVF9FREFUQSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX1BUX0VEQVRBLAogIEkyNDAwTV9QVF9JTExFR0FMCiB9Owogc3RydWN0IGkyNDAwbV9wbF9kYXRhX2hkciB7Ci0gX19sZTMyIHJlc2VydmVkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIgcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogc3RydWN0IGkyNDAwbV9wbF9lZGF0YV9oZHIgewogIF9fbGUzMiByZW9yZGVyOwotIF9fdTggY3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggY3M7CiAgX191OCByZXNlcnZlZFsxMV07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogZW51bSBpMjQwMG1fY3MgewotIEkyNDAwTV9DU19JUFY0XzAgPSAwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fQ1NfSVBWNF8wID0gMCwKICBJMjQwME1fQ1NfSVBWNCA9IDIsCiB9OwogZW51bSBpMjQwMG1fcm8gewotIEkyNDAwTV9ST19ORUVERUQgPSAweDAxLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fUk9fTkVFREVEID0gMHgwMSwKICBJMjQwME1fUk9fVFlQRSA9IDB4MDMsCiAgSTI0MDBNX1JPX1RZUEVfU0hJRlQgPSAxLAogIEkyNDAwTV9ST19DSU4gPSAweDBmLAotIEkyNDAwTV9ST19DSU5fU0hJRlQgPSA0LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fUk9fQ0lOX1NISUZUID0gNCwKICBJMjQwME1fUk9fRkJOID0gMHgwN2ZmLAogIEkyNDAwTV9ST19GQk5fU0hJRlQgPSA4LAogIEkyNDAwTV9ST19TTiA9IDB4MDdmZiwKLSBJMjQwME1fUk9fU05fU0hJRlQgPSAyMSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX1JPX1NOX1NISUZUID0gMjEsCiB9OwogZW51bSBpMjQwMG1fcm9fdHlwZSB7CiAgSTI0MDBNX1JPX1RZUEVfUkVTRVQgPSAwLAotIEkyNDAwTV9ST19UWVBFX1BBQ0tFVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX1JPX1RZUEVfUEFDS0VULAogIEkyNDAwTV9ST19UWVBFX1dTLAogIEkyNDAwTV9ST19UWVBFX1BBQ0tFVF9XUywKIH07Ci1lbnVtIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHsKICBJMjQwME1fUExfQUxJR04gPSAxNiwKICBJMjQwME1fUExfU0laRV9NQVggPSAweDNFRkYsCiAgSTI0MDBNX01BWF9QTFNfSU5fTVNHID0gNjAsCi0gSTI0MDBNX0gyRF9QUkVWSUVXX0JBUktFUiA9IDB4Y2FmZTkwMGQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9IMkRfUFJFVklFV19CQVJLRVIgPSAweGNhZmU5MDBkLAogIEkyNDAwTV9DT0xEX1JFU0VUX0JBUktFUiA9IDB4YzAxZGMwMWQsCiAgSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSID0gMHg1MGY3NTBmNywKICBJMjQwME1fTkJPT1RfQkFSS0VSID0gMHhkZWFkYmVlZiwKLSBJMjQwME1fU0JPT1RfQkFSS0VSID0gMHgwZmYxYzFhMSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX1NCT09UX0JBUktFUiA9IDB4MGZmMWMxYTEsCiAgSTI0MDBNX1NCT09UX0JBUktFUl82MDUwID0gMHg4MDAwMDAwMSwKICBJMjQwME1fQUNLX0JBUktFUiA9IDB4ZmVlZGJhYmUsCiAgSTI0MDBNX0QySF9NU0dfQkFSS0VSID0gMHhiZWVmYmFiZSwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBpMjQwMG1fcGxkIHsKICBfX2xlMzIgdmFsOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0jZGVmaW5lIEkyNDAwTV9QTERfU0laRV9NQVNLIDB4MDAwMDNmZmYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEkyNDAwTV9QTERfU0laRV9NQVNLIDB4MDAwMDNmZmYKICNkZWZpbmUgSTI0MDBNX1BMRF9UWVBFX1NISUZUIDE2CiAjZGVmaW5lIEkyNDAwTV9QTERfVFlQRV9NQVNLIDB4MDAwZjAwMDAKIHN0cnVjdCBpMjQwMG1fbXNnX2hkciB7Ci0gdW5pb24gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bmlvbiB7CiAgX19sZTMyIGJhcmtlcjsKICBfX3UzMiBzaXplOwogIH07Ci0gdW5pb24gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bmlvbiB7CiAgX19sZTMyIHNlcXVlbmNlOwogIF9fdTMyIG9mZnNldDsKICB9OwotIF9fbGUxNiBudW1fcGxzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMTYgbnVtX3BsczsKICBfX2xlMTYgcnN2MTsKICBfX2xlMTYgcGFkZGluZzsKICBfX2xlMTYgcnN2MjsKLSBzdHJ1Y3QgaTI0MDBtX3BsZCBwbGRbMF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBpMjQwMG1fcGxkIHBsZFswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogZW51bSB7CiAgSTI0MDBNX0wzTDRfVkVSU0lPTiA9IDB4MDEwMCwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIGVudW0gaTI0MDBtX210IHsKICBJMjQwME1fTVRfUkVTRVJWRUQgPSAweDAwMDAsCiAgSTI0MDBNX01UX0lOVkFMSUQgPSAweGZmZmYsCi0gSTI0MDBNX01UX1JFUE9SVF9NQVNLID0gMHg4MDAwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fTVRfUkVQT1JUX01BU0sgPSAweDgwMDAsCiAgSTI0MDBNX01UX0dFVF9TQ0FOX1JFU1VMVCA9IDB4NDIwMiwKICBJMjQwME1fTVRfU0VUX1NDQU5fUEFSQU0gPSAweDQ0MDIsCiAgSTI0MDBNX01UX0NNRF9SRl9DT05UUk9MID0gMHg0NjAyLAotIEkyNDAwTV9NVF9DTURfU0NBTiA9IDB4NDYwMywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX01UX0NNRF9TQ0FOID0gMHg0NjAzLAogIEkyNDAwTV9NVF9DTURfQ09OTkVDVCA9IDB4NDYwNCwKICBJMjQwME1fTVRfQ01EX0RJU0NPTk5FQ1QgPSAweDQ2MDUsCiAgSTI0MDBNX01UX0NNRF9FWElUX0lETEUgPSAweDQ2MDYsCi0gSTI0MDBNX01UX0dFVF9MTV9WRVJTSU9OID0gMHg1MjAxLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fTVRfR0VUX0xNX1ZFUlNJT04gPSAweDUyMDEsCiAgSTI0MDBNX01UX0dFVF9ERVZJQ0VfSU5GTyA9IDB4NTIwMiwKICBJMjQwME1fTVRfR0VUX0xJTktfU1RBVFVTID0gMHg1MjAzLAogIEkyNDAwTV9NVF9HRVRfU1RBVElTVElDUyA9IDB4NTIwNCwKLSBJMjQwME1fTVRfR0VUX1NUQVRFID0gMHg1MjA1LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fTVRfR0VUX1NUQVRFID0gMHg1MjA1LAogIEkyNDAwTV9NVF9HRVRfTUVESUFfU1RBVFVTID0gMHg1MjA2LAogIEkyNDAwTV9NVF9TRVRfSU5JVF9DT05GSUcgPSAweDU0MDQsCiAgSTI0MDBNX01UX0NNRF9JTklUID0gMHg1NjAxLAotIEkyNDAwTV9NVF9DTURfVEVSTUlOQVRFID0gMHg1NjAyLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fTVRfQ01EX1RFUk1JTkFURSA9IDB4NTYwMiwKICBJMjQwME1fTVRfQ01EX01PREVfT0ZfT1AgPSAweDU2MDMsCiAgSTI0MDBNX01UX0NNRF9SRVNFVF9ERVZJQ0UgPSAweDU2MDQsCiAgSTI0MDBNX01UX0NNRF9NT05JVE9SX0NPTlRST0wgPSAweDU2MDUsCi0gSTI0MDBNX01UX0NNRF9FTlRFUl9QT1dFUlNBVkUgPSAweDU2MDYsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9NVF9DTURfRU5URVJfUE9XRVJTQVZFID0gMHg1NjA2LAogIEkyNDAwTV9NVF9HRVRfVExTX09QRVJBVElPTl9SRVNVTFQgPSAweDYyMDEsCiAgSTI0MDBNX01UX1NFVF9FQVBfU1VDQ0VTUyA9IDB4NjQwMiwKICBJMjQwME1fTVRfU0VUX0VBUF9GQUlMID0gMHg2NDAzLAotIEkyNDAwTV9NVF9TRVRfRUFQX0tFWSA9IDB4NjQwNCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX01UX1NFVF9FQVBfS0VZID0gMHg2NDA0LAogIEkyNDAwTV9NVF9DTURfU0VORF9FQVBfUkVTUE9OU0UgPSAweDY2MDIsCiAgSTI0MDBNX01UX1JFUE9SVF9TQ0FOX1JFU1VMVCA9IDB4YzAwMiwKICBJMjQwME1fTVRfUkVQT1JUX1NUQVRFID0gMHhkMDAyLAotIEkyNDAwTV9NVF9SRVBPUlRfUE9XRVJTQVZFX1JFQURZID0gMHhkMDA1LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fTVRfUkVQT1JUX1BPV0VSU0FWRV9SRUFEWSA9IDB4ZDAwNSwKICBJMjQwME1fTVRfUkVQT1JUX0VBUF9SRVFVRVNUID0gMHhlMDAyLAogIEkyNDAwTV9NVF9SRVBPUlRfRUFQX1JFU1RBUlQgPSAweGUwMDMsCiAgSTI0MDBNX01UX1JFUE9SVF9BTFRfQUNDRVBUID0gMHhlMDA0LAotIEkyNDAwTV9NVF9SRVBPUlRfS0VZX1JFUVVFU1QgPSAweGUwMDUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9NVF9SRVBPUlRfS0VZX1JFUVVFU1QgPSAweGUwMDUsCiB9OwogZW51bSBpMjQwMG1fbXMgewogIEkyNDAwTV9NU19ET05FX09LID0gMCwKLSBJMjQwME1fTVNfRE9ORV9JTl9QUk9HUkVTUyA9IDEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9NU19ET05FX0lOX1BST0dSRVNTID0gMSwKICBJMjQwME1fTVNfSU5WQUxJRF9PUCA9IDIsCiAgSTI0MDBNX01TX0JBRF9TVEFURSA9IDMsCiAgSTI0MDBNX01TX0lMTEVHQUxfVkFMVUUgPSA0LAotIEkyNDAwTV9NU19NSVNTSU5HX1BBUkFNUyA9IDUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9NU19NSVNTSU5HX1BBUkFNUyA9IDUsCiAgSTI0MDBNX01TX1ZFUlNJT05fRVJST1IgPSA2LAogIEkyNDAwTV9NU19BQ0NFU1NJQklMSVRZX0VSUk9SID0gNywKICBJMjQwME1fTVNfQlVTWSA9IDgsCi0gSTI0MDBNX01TX0NPUlJVUFRFRF9UTFYgPSA5LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fTVNfQ09SUlVQVEVEX1RMViA9IDksCiAgSTI0MDBNX01TX1VOSU5JVElBTElaRUQgPSAxMCwKICBJMjQwME1fTVNfVU5LTk9XTl9FUlJPUiA9IDExLAogIEkyNDAwTV9NU19QUk9EVUNUSU9OX0VSUk9SID0gMTIsCi0gSTI0MDBNX01TX05PX1JGID0gMTMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9NU19OT19SRiA9IDEzLAogIEkyNDAwTV9NU19OT1RfUkVBRFlfRk9SX1BPV0VSU0FWRSA9IDE0LAogIEkyNDAwTV9NU19USEVSTUFMX0NSSVRJQ0FMID0gMTUsCiAgSTI0MDBNX01TX01BWAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogZW51bSBpMjQwMG1fdGx2IHsKICBJMjQwME1fVExWX0w0X01FU1NBR0VfVkVSU0lPTlMgPSAxMjksCiAgSTI0MDBNX1RMVl9TWVNURU1fU1RBVEUgPSAxNDEsCi0gSTI0MDBNX1RMVl9NRURJQV9TVEFUVVMgPSAxNjEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9UTFZfTUVESUFfU1RBVFVTID0gMTYxLAogIEkyNDAwTV9UTFZfUkZfT1BFUkFUSU9OID0gMTYyLAogIEkyNDAwTV9UTFZfUkZfU1RBVFVTID0gMTYzLAogIEkyNDAwTV9UTFZfREVWSUNFX1JFU0VUX1RZUEUgPSAxMzIsCi0gSTI0MDBNX1RMVl9DT05GSUdfSURMRV9QQVJBTUVURVJTID0gNjAxLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fVExWX0NPTkZJR19JRExFX1BBUkFNRVRFUlMgPSA2MDEsCiAgSTI0MDBNX1RMVl9DT05GSUdfSURMRV9USU1FT1VUID0gNjExLAogIEkyNDAwTV9UTFZfQ09ORklHX0QySF9EQVRBX0ZPUk1BVCA9IDYxNCwKICBJMjQwME1fVExWX0NPTkZJR19ETF9IT1NUX1JFT1JERVIgPSA2MTUsCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgewogIF9fbGUxNiB0eXBlOwogIF9fbGUxNiBsZW5ndGg7Ci0gX191OCBwbFswXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBwbFswXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiBzdHJ1Y3QgaTI0MDBtX2wzbDRfaGRyIHsKICBfX2xlMTYgdHlwZTsKLSBfX2xlMTYgbGVuZ3RoOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMTYgbGVuZ3RoOwogIF9fbGUxNiB2ZXJzaW9uOwogIF9fbGUxNiByZXN2MTsKICBfX2xlMTYgc3RhdHVzOwotIF9fbGUxNiByZXN2MjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTE2IHJlc3YyOwogIHN0cnVjdCBpMjQwMG1fdGx2X2hkciBwbFswXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiBlbnVtIGkyNDAwbV9zeXN0ZW1fc3RhdGUgewotIEkyNDAwTV9TU19VTklOSVRJQUxJWkVEID0gMSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX1NTX1VOSU5JVElBTElaRUQgPSAxLAogIEkyNDAwTV9TU19JTklULAogIEkyNDAwTV9TU19SRUFEWSwKICBJMjQwME1fU1NfU0NBTiwKLSBJMjQwME1fU1NfU1RBTkRCWSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX1NTX1NUQU5EQlksCiAgSTI0MDBNX1NTX0NPTk5FQ1RJTkcsCiAgSTI0MDBNX1NTX1dJTUFYX0NPTk5FQ1RFRCwKICBJMjQwME1fU1NfREFUQV9QQVRIX0NPTk5FQ1RFRCwKLSBJMjQwME1fU1NfSURMRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX1NTX0lETEUsCiAgSTI0MDBNX1NTX0RJU0NPTk5FQ1RJTkcsCiAgSTI0MDBNX1NTX09VVF9PRl9aT05FLAogIEkyNDAwTV9TU19TTEVFUEFDVElWRSwKLSBJMjQwME1fU1NfUFJPRFVDVElPTiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX1NTX1BST0RVQ1RJT04sCiAgSTI0MDBNX1NTX0NPTkZJRywKICBJMjQwME1fU1NfUkZfT0ZGLAogIEkyNDAwTV9TU19SRl9TSFVURE9XTiwKLSBJMjQwME1fU1NfREVWSUNFX0RJU0NPTk5FQ1QsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9TU19ERVZJQ0VfRElTQ09OTkVDVCwKICBJMjQwME1fU1NfTUFYLAogfTsKIHN0cnVjdCBpMjQwMG1fdGx2X3N5c3RlbV9zdGF0ZSB7Ci0gc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKICBfX2xlMzIgc3RhdGU7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogc3RydWN0IGkyNDAwbV90bHZfbDRfbWVzc2FnZV92ZXJzaW9ucyB7Ci0gc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKICBfX2xlMTYgbWFqb3I7CiAgX19sZTE2IG1pbm9yOwogIF9fbGUxNiBicmFuY2g7Ci0gX19sZTE2IHJlc2VydmVkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMTYgcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogc3RydWN0IGkyNDAwbV90bHZfZGV0YWlsZWRfZGV2aWNlX2luZm8gewogIHN0cnVjdCBpMjQwMG1fdGx2X2hkciBoZHI7Ci0gX191OCByZXNlcnZlZDFbNDAwXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gX191OCBtYWNfYWRkcmVzc1s2XTsKKyBfX3U4IHJlc2VydmVkMVs0MDBdOworIF9fdTggbWFjX2FkZHJlc3NbRVRIX0FMRU5dOwogIF9fdTggcmVzZXJ2ZWQyWzJdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLWVudW0gaTI0MDBtX3JmX3N3aXRjaF9zdGF0dXMgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gaTI0MDBtX3JmX3N3aXRjaF9zdGF0dXMgewogIEkyNDAwTV9SRl9TV0lUQ0hfT04gPSAxLAogIEkyNDAwTV9SRl9TV0lUQ0hfT0ZGID0gMiwKIH07Ci1zdHJ1Y3QgaTI0MDBtX3Rsdl9yZl9zd2l0Y2hlc19zdGF0dXMgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBpMjQwMG1fdGx2X3JmX3N3aXRjaGVzX3N0YXR1cyB7CiAgc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKICBfX3U4IHN3X3JmX3N3aXRjaDsKICBfX3U4IGh3X3JmX3N3aXRjaDsKLSBfX3U4IHJlc2VydmVkWzJdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHJlc2VydmVkWzJdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIGVudW0gewogIGkyNDAwbV9yZl9vcGVyYXRpb25fb24gPSAxLAotIGkyNDAwbV9yZl9vcGVyYXRpb25fb2ZmID0gMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBpMjQwMG1fcmZfb3BlcmF0aW9uX29mZiA9IDIKIH07CiBzdHJ1Y3QgaTI0MDBtX3Rsdl9yZl9vcGVyYXRpb24gewogIHN0cnVjdCBpMjQwMG1fdGx2X2hkciBoZHI7Ci0gX19sZTMyIHN0YXR1czsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTMyIHN0YXR1czsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiBlbnVtIGkyNDAwbV90bHZfcmVzZXRfdHlwZSB7CiAgSTI0MDBNX1JFU0VUX1RZUEVfQ09MRCA9IDEsCi0gSTI0MDBNX1JFU0VUX1RZUEVfV0FSTQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fUkVTRVRfVFlQRV9XQVJNCiB9Owogc3RydWN0IGkyNDAwbV90bHZfZGV2aWNlX3Jlc2V0X3R5cGUgewogIHN0cnVjdCBpMjQwMG1fdGx2X2hkciBoZHI7Ci0gX19sZTMyIHJlc2V0X3R5cGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiByZXNldF90eXBlOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIHN0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19pZGxlX3BhcmFtZXRlcnMgewogIHN0cnVjdCBpMjQwMG1fdGx2X2hkciBoZHI7Ci0gX19sZTMyIGlkbGVfdGltZW91dDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTMyIGlkbGVfdGltZW91dDsKICBfX2xlMzIgaWRsZV9wYWdpbmdfaW50ZXJ2YWw7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogZW51bSBpMjQwMG1fbWVkaWFfc3RhdHVzIHsKLSBJMjQwME1fTUVESUFfU1RBVFVTX0xJTktfVVAgPSAxLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fTUVESUFfU1RBVFVTX0xJTktfVVAgPSAxLAogIEkyNDAwTV9NRURJQV9TVEFUVVNfTElOS19ET1dOLAogIEkyNDAwTV9NRURJQV9TVEFUVVNfTElOS19SRU5FVywKIH07Ci1zdHJ1Y3QgaTI0MDBtX3Rsdl9tZWRpYV9zdGF0dXMgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBpMjQwMG1fdGx2X21lZGlhX3N0YXR1cyB7CiAgc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKICBfX2xlMzIgbWVkaWFfc3RhdHVzOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLXN0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19pZGxlX3RpbWVvdXQgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19pZGxlX3RpbWVvdXQgewogIHN0cnVjdCBpMjQwMG1fdGx2X2hkciBoZHI7CiAgX19sZTMyIHRpbWVvdXQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2QyaF9kYXRhX2Zvcm1hdCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2QyaF9kYXRhX2Zvcm1hdCB7CiAgc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKICBfX3U4IGZvcm1hdDsKICBfX3U4IHJlc2VydmVkWzNdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2RsX2hvc3RfcmVvcmRlciB7CiAgc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKICBfX3U4IHJlb3JkZXI7Ci0gX191OCByZXNlcnZlZFszXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCByZXNlcnZlZFszXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgveGF0dHIuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgveGF0dHIuaAppbmRleCBjNGQ5YzA2Li5lY2FkYzZhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3hhdHRyLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC94YXR0ci5oCkBAIC0yNiw0NCArMjYsNDYgQEAKICNkZWZpbmUgWEFUVFJfTUFDX09TWF9QUkVGSVggIm9zeC4iCiAjZGVmaW5lIFhBVFRSX01BQ19PU1hfUFJFRklYX0xFTiAoc2l6ZW9mKFhBVFRSX01BQ19PU1hfUFJFRklYKSAtIDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYQVRUUl9CVFJGU19QUkVGSVggImJ0cmZzLiIKKyNkZWZpbmUgWEFUVFJfQlRSRlNfUFJFRklYX0xFTiAoc2l6ZW9mKFhBVFRSX0JUUkZTX1BSRUZJWCkgLSAxKQogI2RlZmluZSBYQVRUUl9TRUNVUklUWV9QUkVGSVggInNlY3VyaXR5LiIKICNkZWZpbmUgWEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTiAoc2l6ZW9mKFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCkgLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWEFUVFJfU1lTVEVNX1BSRUZJWCAic3lzdGVtLiIKICNkZWZpbmUgWEFUVFJfU1lTVEVNX1BSRUZJWF9MRU4gKHNpemVvZihYQVRUUl9TWVNURU1fUFJFRklYKSAtIDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYQVRUUl9UUlVTVEVEX1BSRUZJWCAidHJ1c3RlZC4iCiAjZGVmaW5lIFhBVFRSX1RSVVNURURfUFJFRklYX0xFTiAoc2l6ZW9mKFhBVFRSX1RSVVNURURfUFJFRklYKSAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYQVRUUl9VU0VSX1BSRUZJWCAidXNlci4iCiAjZGVmaW5lIFhBVFRSX1VTRVJfUFJFRklYX0xFTiAoc2l6ZW9mKFhBVFRSX1VTRVJfUFJFRklYKSAtIDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYQVRUUl9FVk1fU1VGRklYICJldm0iCiAjZGVmaW5lIFhBVFRSX05BTUVfRVZNIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9FVk1fU1VGRklYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYQVRUUl9JTUFfU1VGRklYICJpbWEiCiAjZGVmaW5lIFhBVFRSX05BTUVfSU1BIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9JTUFfU1VGRklYCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYQVRUUl9TRUxJTlVYX1NVRkZJWCAic2VsaW51eCIKICNkZWZpbmUgWEFUVFJfTkFNRV9TRUxJTlVYIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TRUxJTlVYX1NVRkZJWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWEFUVFJfU01BQ0tfU1VGRklYICJTTUFDSzY0IgogI2RlZmluZSBYQVRUUl9TTUFDS19JUElOICJTTUFDSzY0SVBJTiIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhBVFRSX1NNQUNLX0lQT1VUICJTTUFDSzY0SVBPVVQiCiAjZGVmaW5lIFhBVFRSX1NNQUNLX0VYRUMgIlNNQUNLNjRFWEVDIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWEFUVFJfU01BQ0tfVFJBTlNNVVRFICJTTUFDSzY0VFJBTlNNVVRFIgogI2RlZmluZSBYQVRUUl9TTUFDS19NTUFQICJTTUFDSzY0TU1BUCIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhBVFRSX05BTUVfU01BQ0sgWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX1NNQUNLX1NVRkZJWAogI2RlZmluZSBYQVRUUl9OQU1FX1NNQUNLSVBJTiBYQVRUUl9TRUNVUklUWV9QUkVGSVggWEFUVFJfU01BQ0tfSVBJTgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWEFUVFJfTkFNRV9TTUFDS0lQT1VUIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TTUFDS19JUE9VVAogI2RlZmluZSBYQVRUUl9OQU1FX1NNQUNLRVhFQyBYQVRUUl9TRUNVUklUWV9QUkVGSVggWEFUVFJfU01BQ0tfRVhFQwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWEFUVFJfTkFNRV9TTUFDS1RSQU5TTVVURSBYQVRUUl9TRUNVUklUWV9QUkVGSVggWEFUVFJfU01BQ0tfVFJBTlNNVVRFCiAjZGVmaW5lIFhBVFRSX05BTUVfU01BQ0tNTUFQIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TTUFDS19NTUFQCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYQVRUUl9DQVBTX1NVRkZJWCAiY2FwYWJpbGl0eSIKICNkZWZpbmUgWEFUVFJfTkFNRV9DQVBTIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9DQVBTX1NVRkZJWAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWEFUVFJfUE9TSVhfQUNMX0FDQ0VTUyAicG9zaXhfYWNsX2FjY2VzcyIKICNkZWZpbmUgWEFUVFJfTkFNRV9QT1NJWF9BQ0xfQUNDRVNTIFhBVFRSX1NZU1RFTV9QUkVGSVggWEFUVFJfUE9TSVhfQUNMX0FDQ0VTUworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWEFUVFJfUE9TSVhfQUNMX0RFRkFVTFQgInBvc2l4X2FjbF9kZWZhdWx0IgogI2RlZmluZSBYQVRUUl9OQU1FX1BPU0lYX0FDTF9ERUZBVUxUIFhBVFRSX1NZU1RFTV9QUkVGSVggWEFUVFJfUE9TSVhfQUNMX0RFRkFVTFQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvem9ycm8uaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvem9ycm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTllZjcwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC96b3Jyby5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1VBUElfTElOVVhfWk9SUk9fSAorI2RlZmluZSBfVUFQSV9MSU5VWF9aT1JST19ICisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNkZWZpbmUgWk9SUk9fTUFOVUYoaWQpICgoaWQpID4+IDE2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRChpZCkgKCgoaWQpID4+IDgpICYgMHhmZikKKyNkZWZpbmUgWk9SUk9fRVBDKGlkKSAoKGlkKSAmIDB4ZmYpCisjZGVmaW5lIFpPUlJPX0lEKG1hbnVmLCBwcm9kLCBlcGMpICAgKChaT1JST19NQU5VRl8jI21hbnVmIDw8IDE2KSB8ICgocHJvZCkgPDwgOCkgfCAoZXBjKSkKK3R5cGVkZWYgX191MzIgem9ycm9faWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2luY2x1ZGUgPGxpbnV4L3pvcnJvX2lkcy5oPgorI2RlZmluZSBHVlBfUFJPRE1BU0sgKDB4ZjgpCisjZGVmaW5lIEdWUF9TQ1NJQ0xLTUFTSyAoMHgwMSkKK2VudW0gR1ZQX2ZsYWdzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgR1ZQX0lPID0gMHgwMSwKKyBHVlBfQUNDRUwgPSAweDAyLAorIEdWUF9TQ1NJID0gMHgwNCwKKyBHVlBfMjRCSVRETUEgPSAweDA4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBHVlBfMjVCSVRETUEgPSAweDEwLAorIEdWUF9OT0JBTksgPSAweDIwLAorIEdWUF8xNE1IWiA9IDB4NDAsCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBOb2RlIHsKKyBfX2JlMzIgbG5fU3VjYzsKKyBfX2JlMzIgbG5fUHJlZDsKKyBfX3U4IGxuX1R5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fczggbG5fUHJpOworIF9fYmUzMiBsbl9OYW1lOworfSBfX3BhY2tlZDsKK3N0cnVjdCBFeHBhbnNpb25Sb20geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGVyX1R5cGU7CisgX191OCBlcl9Qcm9kdWN0OworIF9fdTggZXJfRmxhZ3M7CisgX191OCBlcl9SZXNlcnZlZDAzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMTYgZXJfTWFudWZhY3R1cmVyOworIF9fYmUzMiBlcl9TZXJpYWxOdW1iZXI7CisgX19iZTE2IGVyX0luaXREaWFnVmVjOworIF9fdTggZXJfUmVzZXJ2ZWQwYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBlcl9SZXNlcnZlZDBkOworIF9fdTggZXJfUmVzZXJ2ZWQwZTsKKyBfX3U4IGVyX1Jlc2VydmVkMGY7Cit9IF9fcGFja2VkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVJUX1RZUEVNQVNLIDB4YzAKKyNkZWZpbmUgRVJUX1pPUlJPSUkgMHhjMAorI2RlZmluZSBFUlRfWk9SUk9JSUkgMHg4MAorI2RlZmluZSBFUlRCX01FTUxJU1QgNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVJURl9NRU1MSVNUICgxPDw1KQorc3RydWN0IENvbmZpZ0RldiB7Cisgc3RydWN0IE5vZGUgY2RfTm9kZTsKKyBfX3U4IGNkX0ZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGNkX1BhZDsKKyBzdHJ1Y3QgRXhwYW5zaW9uUm9tIGNkX1JvbTsKKyBfX2JlMzIgY2RfQm9hcmRBZGRyOworIF9fYmUzMiBjZF9Cb2FyZFNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmUxNiBjZF9TbG90QWRkcjsKKyBfX2JlMTYgY2RfU2xvdFNpemU7CisgX19iZTMyIGNkX0RyaXZlcjsKKyBfX2JlMzIgY2RfTmV4dENEOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMzIgY2RfVW51c2VkWzRdOworfSBfX3BhY2tlZDsKKyNkZWZpbmUgWk9SUk9fTlVNX0FVVE8gMTYKKyNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvem9ycm9faWRzLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3pvcnJvX2lkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYmYwYjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3pvcnJvX2lkcy5oCkBAIC0wLDAgKzEsNTUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFpPUlJPX01BTlVGX1BBQ0lGSUNfUEVSSVBIRVJBTFMgMHgwMEQzCisjZGVmaW5lIFpPUlJPX1BST0RfUEFDSUZJQ19QRVJJUEhFUkFMU19TRV8yMDAwX0E1MDAgWk9SUk9fSUQoUEFDSUZJQ19QRVJJUEhFUkFMUywgMHgwMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QQUNJRklDX1BFUklQSEVSQUxTX1NDU0kgWk9SUk9fSUQoUEFDSUZJQ19QRVJJUEhFUkFMUywgMHgwQSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUFDUk9TWVNURU1TX1VTQV8yIDB4MDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfV0FSUF9FTkdJTkUgWk9SUk9fSUQoTUFDUk9TWVNURU1TX1VTQV8yLCAweDEzLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9LVVBLRV8xIDB4MDBERAorI2RlZmluZSBaT1JST19QUk9EX0tVUEtFX0dPTEVNX1JBTV9CT1hfMk1CIFpPUlJPX0lEKEtVUEtFXzEsIDB4MDAsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX01FTVBISVMgMHgwMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX01FTVBISVNfU1RPUk1CUklOR0VSIFpPUlJPX0lEKE1FTVBISVMsIDB4MDAsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGXzNfU1RBVEUgMHgwMjAwCisjZGVmaW5lIFpPUlJPX1BST0RfM19TVEFURV9NRUdBTUlYXzIwMDAgWk9SUk9fSUQoM19TVEFURSwgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ09NTU9ET1JFX0JSQVVOU0NIV0VJRyAweDAyMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMDg4X0EyMjg2IFpPUlJPX0lEKENPTU1PRE9SRV9CUkFVTlNDSFdFSUcsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMjg2IFpPUlJPX0lEKENPTU1PRE9SRV9CUkFVTlNDSFdFSUcsIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0E0MDkxXzEgWk9SUk9fSUQoQ09NTU9ET1JFX0JSQVVOU0NIV0VJRywgMHg1NCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIzODZTWF8xIFpPUlJPX0lEKENPTU1PRE9SRV9CUkFVTlNDSFdFSUcsIDB4NjcsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19NQU5VRl9DT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEgMHgwMjAyCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMDkwQSBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0E1OTBfQTIwOTFfMSBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0E1OTBfQTIwOTFfMiBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4MDMsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjA5MEIgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDA0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjA2MCBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4MDksIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0E1OTBfQTIwNTJfQTIwNThfQTIwOTEgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDBBLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BNTYwX1JBTSBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4MjAsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjIzMl9QUk9UT1RZUEUgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDQ1LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjIzMiBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NDYsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyNjIwIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg1MCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTI2MzAgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDUxLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTQwOTFfMiBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NTQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMDY1XzEgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDVBLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9ST01VTEFUT1IgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDYwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMzAwMF9URVNUX0ZJWFRVUkUgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDYxLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIzODZTWF8yIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg2NywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIwNjVfMiBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NzAsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0NPTU1PRE9SRV9XRVNUX0NIRVNURVJfMiAweDAyMDMKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIwOTBBX0NNIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMiwgMHgwMywgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX1BST0dSRVNTSVZFX1BFUklQSEVSQUxTX0FORF9TWVNURU1TXzIgMHgwMkY0CisjZGVmaW5lIFpPUlJPX1BST0RfUFBTX0VYUDgwMDAgWk9SUk9fSUQoUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVNfMiwgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfS09MRkZfQ09NUFVURVJfU1VQUExJRVMgMHgwMkZGCisjZGVmaW5lIFpPUlJPX1BST0RfS0NTX1BPV0VSX1BDX0JPQVJEIFpPUlJPX0lEKEtPTEZGX0NPTVBVVEVSX1NVUFBMSUVTLCAweDAwLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ0FSRENPXzEgMHgwM0VDCisjZGVmaW5lIFpPUlJPX1BST0RfQ0FSRENPX0tST05PU18yMDAwXzEgWk9SUk9fSUQoQ0FSRENPXzEsIDB4MDQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0FSRENPX0ExMDAwXzEgWk9SUk9fSUQoQ0FSRENPXzEsIDB4MEMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0FSRENPX0VTQ09SVCBaT1JST19JRChDQVJEQ09fMSwgMHgwRSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfQ0FSRENPX0EyNDEwIFpPUlJPX0lEKENBUkRDT18xLCAweEY1LCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9BX1NRVUFSRUQgMHgwM0VECisjZGVmaW5lIFpPUlJPX1BST0RfQV9TUVVBUkVEX0xJVkVfMjAwMCBaT1JST19JRChBX1NRVUFSRUQsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0NPTVNQRUNfQ09NTVVOSUNBVElPTlMgMHgwM0VFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0NPTVNQRUNfQ09NTVVOSUNBVElPTlNfQVgyMDAwIFpPUlJPX0lEKENPTVNQRUNfQ09NTVVOSUNBVElPTlMsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0FOQUtJTl9SRVNFQVJDSCAweDAzRjEKKyNkZWZpbmUgWk9SUk9fUFJPRF9BTkFLSU5fUkVTRUFSQ0hfRUFTWUwgWk9SUk9fSUQoQU5BS0lOX1JFU0VBUkNILCAweDAxLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9NSUNST0JPVElDUyAweDAzRjIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfU1RBUkJPQVJEX0lJIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX1NUQVJEUklWRSBaT1JST19JRChNSUNST0JPVElDUywgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU184X1VQX0EgWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfOF9VUF9aIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDA0LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU19ERUxUQV9SQU0gWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4MjAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfOF9TVEFSX1JBTSBaT1JST19JRChNSUNST0JPVElDUywgMHg0MCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU184X1NUQVIgWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4NDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfVlhMX1JBTV8zMiBaT1JST19JRChNSUNST0JPVElDUywgMHg0NCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfVlhMXzY4MDMwIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDQ1LCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX0RFTFRBIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDYwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX01CWF8xMjAwXzEyMDBaX1JBTSBaT1JST19JRChNSUNST0JPVElDUywgMHg4MSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU19IQVJERlJBTUVfMjAwMF8xIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDk2LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU19IQVJERlJBTUVfMjAwMF8yIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDlFLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX01CWF8xMjAwXzEyMDBaIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweEMxLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9BQ0NFU1NfQVNTT0NJQVRFU19BTEVHUkEgMHgwM0Y0CisjZGVmaW5lIFpPUlJPX01BTlVGX0VYUEFOU0lPTl9URUNITk9MT0dJRVMgMHgwM0Y2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19NQU5VRl9BU0RHIDB4MDNGRgorI2RlZmluZSBaT1JST19QUk9EX0FTREdfTUVNT1JZXzEgWk9SUk9fSUQoQVNERywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9BU0RHX01FTU9SWV8yIFpPUlJPX0lEKEFTREcsIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQVNER19FQjkyMF9MQU5fUk9WRVIgWk9SUk9fSUQoQVNERywgMHhGRSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfQVNER19HUElCX0RVQUxJRUVFNDg4X1RXSU5fWCBaT1JST19JRChBU0RHLCAweEZGLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9JTVRST05JQ1NfMSAweDA0MDQKKyNkZWZpbmUgWk9SUk9fUFJPRF9JTVRST05JQ1NfSFVSUklDQU5FXzI4MDBfMSBaT1JST19JRChJTVRST05JQ1NfMSwgMHgzOSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9JTVRST05JQ1NfSFVSUklDQU5FXzI4MDBfMiBaT1JST19JRChJTVRST05JQ1NfMSwgMHg1NywgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX0NCTV9VTklWRVJTSVRZX09GX0xPV0VMTCAweDA0MDYKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTI0MTAgWk9SUk9fSUQoQ0JNX1VOSVZFUlNJVFlfT0ZfTE9XRUxMLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9BTUVSSVNUQVIgMHgwNDFECisjZGVmaW5lIFpPUlJPX1BST0RfQU1FUklTVEFSX0EyMDY1IFpPUlJPX0lEKEFNRVJJU1RBUiwgMHgwMSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfQU1FUklTVEFSX0E1NjAgWk9SUk9fSUQoQU1FUklTVEFSLCAweDA5LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0FNRVJJU1RBUl9BNDA2NiBaT1JST19JRChBTUVSSVNUQVIsIDB4MEEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX1NVUFJBIDB4MDQyMAorI2RlZmluZSBaT1JST19QUk9EX1NVUFJBX1NVUFJBRFJJVkVfNHg0IFpPUlJPX0lEKFNVUFJBLCAweDAxLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV8xMDAwX1JBTSBaT1JST19JRChTVVBSQSwgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV8yMDAwX0RNQSBaT1JST19JRChTVVBSQSwgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV81MDAgWk9SUk9fSUQoU1VQUkEsIDB4MDUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1VQUkFfNTAwX1NDU0kgWk9SUk9fSUQoU1VQUkEsIDB4MDgsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzUwMFhQXzIwMDBfUkFNIFpPUlJPX0lEKFNVUFJBLCAweDA5LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzUwMFJYXzIwMDBfUkFNIFpPUlJPX0lEKFNVUFJBLCAweDBBLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzI0MDBaSSBaT1JST19JRChTVVBSQSwgMHgwQiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV81MDBYUF9TVVBSQURSSVZFX1dPUkRTWU5DIFpPUlJPX0lEKFNVUFJBLCAweDBDLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV9TVVBSQURSSVZFX1dPUkRTWU5DX0lJIFpPUlJPX0lEKFNVUFJBLCAweDBELCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzI0MDBaSVBMVVMgWk9SUk9fSUQoU1VQUkEsIDB4MTAsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0NPTVBVVEVSX1NZU1RFTVNfQVNTT0NJQVRFUyAweDA0MjIKKyNkZWZpbmUgWk9SUk9fUFJPRF9DU0FfTUFHTlVNIFpPUlJPX0lEKENPTVBVVEVSX1NZU1RFTVNfQVNTT0NJQVRFUywgMHgxMSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfQ1NBXzEyX0dBVUdFIFpPUlJPX0lEKENPTVBVVEVSX1NZU1RFTVNfQVNTT0NJQVRFUywgMHgxNSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUFSQ19NSUNIQUVMX0dST1RIIDB4MDQzOQorI2RlZmluZSBaT1JST19NQU5VRl9NX1RFQ0ggMHgwNTAyCisjZGVmaW5lIFpPUlJPX1BST0RfTVRFQ19BVDUwMF8xIFpPUlJPX0lEKE1fVEVDSCwgMHgwMywgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX0dSRUFUX1ZBTExFWV9QUk9EVUNUU18xIDB4MDZFMQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfU0VSSUVTX0kgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzEsIDB4MDgsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0JZVEVCT1ggMHgwN0RBCisjZGVmaW5lIFpPUlJPX1BST0RfQllURUJPWF9BNTAwIFpPUlJPX0lEKEJZVEVCT1gsIDB4MDAsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19NQU5VRl9ES0JfUE9XRVJfQ09NUFVUSU5HIDB4MDdEQworI2RlZmluZSBaT1JST19QUk9EX0RLQl9QT1dFUl9DT01QVVRJTkdfU0VDVVJFS0VZIFpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MDksIDApCisjZGVmaW5lIFpPUlJPX1BST0RfREtCX1BPV0VSX0NPTVBVVElOR19ES01fMzEyOCBaT1JST19JRChES0JfUE9XRVJfQ09NUFVUSU5HLCAweDBFLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0RLQl9QT1dFUl9DT01QVVRJTkdfUkFQSURfRklSRSBaT1JST19JRChES0JfUE9XRVJfQ09NUFVUSU5HLCAweDBGLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9ES0JfUE9XRVJfQ09NUFVUSU5HX0RLTV8xMjAyIFpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MTAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfREtCX1BPV0VSX0NPTVBVVElOR19DT0JSQV9WSVBFUl9JSV82OEVDMDMwIFpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MTIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfREtCX1BPV0VSX0NPTVBVVElOR19XSUxERklSRV8wNjBfMSBaT1JST19JRChES0JfUE9XRVJfQ09NUFVUSU5HLCAweDE3LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0RLQl9QT1dFUl9DT01QVVRJTkdfV0lMREZJUkVfMDYwXzIgWk9SUk9fSUQoREtCX1BPV0VSX0NPTVBVVElORywgMHhGRiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX0dSRUFUX1ZBTExFWV9QUk9EVUNUU18yIDB4MDdFMQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfU0VSSUVTX0lfNEsgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF9TRVJJRVNfSV8xNktfMiBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU1QQUNUX1NFUklFU19JXzE2S18zIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDAzLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU1QQUNUXzMwMDFfSURFXzEgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MDgsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF8zMDAxX1JBTSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwOSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU1QQUNUX1NFUklFU19JSV9SQU1fMSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfRVBDX0JBU0UgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0dWUF9HRk9SQ0VfMDQwXzEgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4MjApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0dGT1JDRV8wNDBfU0NTSV8xIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweDMwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9BMTI5MSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHg0MCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfQ09NQk9fMDMwX1I0IFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweDYwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfQ09NQk9fMDMwX1I0X1NDU0kgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4NzApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX1BIT05FUEFLIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweDc4KQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9JT19FWFRFTkRFUiBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHg5OCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfR0ZPUkNFXzAzMCBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHhhMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0dGT1JDRV8wMzBfU0NTSSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHhiMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfQTUzMCBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHhjMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfQTUzMF9TQ1NJIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweGQwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9DT01CT18wMzBfUjMgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4ZTApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0dWUF9DT01CT18wMzBfUjNfU0NTSSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHhmMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfU0VSSUVTX0lJIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweGY4KQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfMzAwMV9JREVfMiBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwRCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfR0ZPUkNFXzA0MF8wNjAgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MTYsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfVklTSU9OXzI0IFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDIwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9HRk9SQ0VfMDQwXzIgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4RkYsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0NBTElGT1JOSUFfQUNDRVNTX1NZTkVSR1kgMHgwN0U1CisjZGVmaW5lIFpPUlJPX1BST0RfQ0FMSUZPUk5JQV9BQ0NFU1NfU1lORVJHWV9NQUxJQlUgWk9SUk9fSUQoQ0FMSUZPUk5JQV9BQ0NFU1NfU1lORVJHWSwgMHgwMSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX1hFVEVDIDB4MDdFNgorI2RlZmluZSBaT1JST19QUk9EX1hFVEVDX0ZBU1RDQVJEIFpPUlJPX0lEKFhFVEVDLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1hFVEVDX0ZBU1RDQVJEX1JBTSBaT1JST19JRChYRVRFQywgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9YRVRFQ19GQVNUQ0FSRF9QTFVTIFpPUlJPX0lEKFhFVEVDLCAweDAzLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVMgMHgwN0VBCisjZGVmaW5lIFpPUlJPX1BST0RfUFBTX01FUkNVUlkgWk9SUk9fSUQoUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVMsIDB4MDAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUFBTX0EzMDAwXzY4MDQwIFpPUlJPX0lEKFBST0dSRVNTSVZFX1BFUklQSEVSQUxTX0FORF9TWVNURU1TLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BQU19BMjAwMF82ODA0MCBaT1JST19JRChQUk9HUkVTU0lWRV9QRVJJUEhFUkFMU19BTkRfU1lTVEVNUywgMHg2OSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfUFBTX1pFVVMgWk9SUk9fSUQoUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVMsIDB4OTYsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUFBTX0E1MDBfNjgwNDAgWk9SUk9fSUQoUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVMsIDB4QkIsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX1hFQkVDIDB4MDdFQworI2RlZmluZSBaT1JST19NQU5VRl9TUElSSVRfVEVDSE5PTE9HWSAweDA3RjIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfU1BJUklUX1RFQ0hOT0xPR1lfSU5TSURFUl9JTjEwMDAgWk9SUk9fSUQoU1BJUklUX1RFQ0hOT0xPR1ksIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1BJUklUX1RFQ0hOT0xPR1lfSU5TSURFUl9JTjUwMCBaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9TSU41MDAgWk9SUk9fSUQoU1BJUklUX1RFQ0hOT0xPR1ksIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1BJUklUX1RFQ0hOT0xPR1lfSERBXzUwNiBaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwNCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfU1BJUklUX1RFQ0hOT0xPR1lfQVhfUyBaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwNSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9PQ1RBQllURSBaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwNiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9JTk1BVEUgWk9SUk9fSUQoU1BJUklUX1RFQ0hOT0xPR1ksIDB4MDgsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX1NQSVJJVF9URUNITk9MT0dZXzIgMHgwN0YzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19NQU5VRl9CU0NfQUxGQURBVEFfMSAweDA3RkUKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfQUxGXzNfMSBaT1JST19JRChCU0NfQUxGQURBVEFfMSwgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQlNDX0FMRkFEQVRBXzIgMHgwODAxCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0FMRl8yXzEgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzIsIDB4MDEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0JTQ19BTEZfMl8yIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8yLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19BTEZfM18yIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8yLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9DQVJEQ09fMiAweDA4MDIKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQVJEQ09fS1JPTk9TXzIwMDBfMiBaT1JST19JRChDQVJEQ09fMiwgMHgwNCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfQ0FSRENPX0ExMDAwXzIgWk9SUk9fSUQoQ0FSRENPXzIsIDB4MEMsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0pPQ0hIRUlNIDB4MDgwNAorI2RlZmluZSBaT1JST19QUk9EX0pPQ0hIRUlNX1JBTSBaT1JST19JRChKT0NISEVJTSwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ0hFQ0tQT0lOVF9URUNITk9MT0dJRVMgMHgwODA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0NIRUNLUE9JTlRfVEVDSE5PTE9HSUVTX1NFUklBTF9TT0xVVElPTiBaT1JST19JRChDSEVDS1BPSU5UX1RFQ0hOT0xPR0lFUywgMHgwMCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfRURPVFJPTklLIDB4MDgxMAorI2RlZmluZSBaT1JST19QUk9EX0VET1RST05JS19JRUVFXzQ4OCBaT1JST19JRChFRE9UUk9OSUssIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLXzgwMzIgWk9SUk9fSUQoRURPVFJPTklLLCAweDAyLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9FRE9UUk9OSUtfTVVMVElTRVJJQUwgWk9SUk9fSUQoRURPVFJPTklLLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0VET1RST05JS19WSURFT0RJR0lUSVpFUiBaT1JST19JRChFRE9UUk9OSUssIDB4MDQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLX1BBUkFMTEVMX0lPIFpPUlJPX0lEKEVET1RST05JSywgMHgwNSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9FRE9UUk9OSUtfUElDX1BST1RPWVBJTkcgWk9SUk9fSUQoRURPVFJPTklLLCAweDA2LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9FRE9UUk9OSUtfQURDIFpPUlJPX0lEKEVET1RST05JSywgMHgwNywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9FRE9UUk9OSUtfVk1FIFpPUlJPX0lEKEVET1RST05JSywgMHgwOCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9FRE9UUk9OSUtfRFNQOTYwMDAgWk9SUk9fSUQoRURPVFJPTklLLCAweDA5LCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9ORVNfSU5DIDB4MDgxMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9ORVNfSU5DX1JBTSBaT1JST19JRChORVNfSU5DLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9JQ0QgMHgwODE3CisjZGVmaW5lIFpPUlJPX1BST0RfSUNEX0FEVkFOVEFHRV8yMDAwX1NDU0kgWk9SUk9fSUQoSUNELCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lDRF9BRFZBTlRBR0VfSURFIFpPUlJPX0lEKElDRCwgMHgwMywgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfSUNEX0FEVkFOVEFHRV8yMDgwX1JBTSBaT1JST19JRChJQ0QsIDB4MDQsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0tVUEtFXzIgMHgwODE5CisjZGVmaW5lIFpPUlJPX1BST0RfS1VQS0VfT01USSBaT1JST19JRChLVVBLRV8yLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0tVUEtFX1NDU0lfSUkgWk9SUk9fSUQoS1VQS0VfMiwgMHgwMiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfS1VQS0VfR09MRU1fQk9YIFpPUlJPX0lEKEtVUEtFXzIsIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfS1VQS0VfMDMwXzg4MiBaT1JST19JRChLVVBLRV8yLCAweDA0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0tVUEtFX1NDU0lfQVQgWk9SUk9fSUQoS1VQS0VfMiwgMHgwNSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzMgMHgwODFECisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0dWUF9BMjAwMF9SQU04IFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18zLCAweDA5LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfU0VSSUVTX0lJX1JBTV8yIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18zLCAweDBBLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9JTlRFUldPUktTX05FVFdPUksgMHgwODFFCisjZGVmaW5lIFpPUlJPX01BTlVGX0hBUkRJVEFMX1NZTlRIRVNJUyAweDA4MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfSEFSRElUQUxfU1lOVEhFU0lTX1RRTV82ODAzMF82ODg4MiBaT1JST19JRChIQVJESVRBTF9TWU5USEVTSVMsIDB4MTQsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0FQUExJRURfRU5HSU5FRVJJTkcgMHgwODI4CisjZGVmaW5lIFpPUlJPX1BST0RfQVBQTElFRF9FTkdJTkVFUklOR19ETDIwMDAgWk9SUk9fSUQoQVBQTElFRF9FTkdJTkVFUklORywgMHgxMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9BUFBMSUVEX0VOR0lORUVSSU5HX1JBTV9XT1JLUyBaT1JST19JRChBUFBMSUVEX0VOR0lORUVSSU5HLCAweEUwLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfQlNDX0FMRkFEQVRBXzMgMHgwODJDCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX09LVEFHT05fMjAwOCBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHgwNSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfVEFOREVNX0FUXzIwMDhfNTA4IFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDA2LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19BTEZBX1JBTV8xMjAwIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDA3LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfT0tUQUdPTl8yMDA4X1JBTSBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHgwOCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfTVVMVElGQUNFX0kgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MTAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX01VTFRJRkFDRV9JSSBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHgxMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfTVVMVElGQUNFX0lJSSBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHgxMiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0ZSQU1FTUFTVEVSX0lJIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDIwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19HUkFGRklUSV9SQU0gWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MjEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0dSQUZGSVRJX1JFRyBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHgyMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfSVNETl9NQVNURVJDQVJEIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDQwLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfSVNETl9NQVNURVJDQVJEX0lJIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDQxLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9QSE9FTklYIDB4MDgzNQorI2RlZmluZSBaT1JST19QUk9EX1BIT0VOSVhfU1Q1MDYgWk9SUk9fSUQoUEhPRU5JWCwgMHgyMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSE9FTklYX1NDU0kgWk9SUk9fSUQoUEhPRU5JWCwgMHgyMiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfUEhPRU5JWF9SQU0gWk9SUk9fSUQoUEhPRU5JWCwgMHhCRSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQURWQU5DRURfU1RPUkFHRV9TWVNURU1TIDB4MDgzNgorI2RlZmluZSBaT1JST19QUk9EX0FEVkFOQ0VEX1NUT1JBR0VfU1lTVEVNU19ORVhVUyBaT1JST19JRChBRFZBTkNFRF9TVE9SQUdFX1NZU1RFTVMsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQURWQU5DRURfU1RPUkFHRV9TWVNURU1TX05FWFVTX1JBTSBaT1JST19JRChBRFZBTkNFRF9TVE9SQUdFX1NZU1RFTVMsIDB4MDgsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19NQU5VRl9JTVBVTFNFIDB4MDgzOAorI2RlZmluZSBaT1JST19QUk9EX0lNUFVMU0VfRklSRUNSQUNLRVJfMjQgWk9SUk9fSUQoSU1QVUxTRSwgMHgwMCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSVZTIDB4MDg0MAorI2RlZmluZSBaT1JST19QUk9EX0lWU19HUkFORFNMQU1fUElDXzIgWk9SUk9fSUQoSVZTLCAweDAyLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9JVlNfR1JBTkRTTEFNX1BJQ18xIFpPUlJPX0lEKElWUywgMHgwNCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9JVlNfT1ZFUkRSSVZFIFpPUlJPX0lEKElWUywgMHgxMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9JVlNfVFJVTVBDQVJEX0NMQVNTSUMgWk9SUk9fSUQoSVZTLCAweDMwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lWU19UUlVNUENBUkRfUFJPX0dSQU5EU0xBTSBaT1JST19JRChJVlMsIDB4MzQsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0lWU19NRVRBXzQgWk9SUk9fSUQoSVZTLCAweDQwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lWU19XQVZFVE9PTFMgWk9SUk9fSUQoSVZTLCAweEJGLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lWU19WRUNUT1JfMSBaT1JST19JRChJVlMsIDB4RjMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSVZTX1ZFQ1RPUl8yIFpPUlJPX0lEKElWUywgMHhGNCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX1ZFQ1RPUl8xIDB4MDg0MQorI2RlZmluZSBaT1JST19QUk9EX1ZFQ1RPUl9DT05ORUNUSU9OXzEgWk9SUk9fSUQoVkVDVE9SXzEsIDB4RTMsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX1hQRVJUX1BST0RFViAweDA4NDUKKyNkZWZpbmUgWk9SUk9fUFJPRF9YUEVSVF9QUk9ERVZfVklTSU9OQV9SQU0gWk9SUk9fSUQoWFBFUlRfUFJPREVWLCAweDAxLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9YUEVSVF9QUk9ERVZfVklTSU9OQV9SRUcgWk9SUk9fSUQoWFBFUlRfUFJPREVWLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1hQRVJUX1BST0RFVl9NRVJMSU5fUkFNIFpPUlJPX0lEKFhQRVJUX1BST0RFViwgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9YUEVSVF9QUk9ERVZfTUVSTElOX1JFR18xIFpPUlJPX0lEKFhQRVJUX1BST0RFViwgMHgwNCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9YUEVSVF9QUk9ERVZfTUVSTElOX1JFR18yIFpPUlJPX0lEKFhQRVJUX1BST0RFViwgMHhDOSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX0hZRFJBX1NZU1RFTVMgMHgwODQ5CisjZGVmaW5lIFpPUlJPX1BST0RfSFlEUkFfU1lTVEVNU19BTUlHQU5FVCBaT1JST19JRChIWURSQV9TWVNURU1TLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9TVU5SSVpFX0lORFVTVFJJRVMgMHgwODRGCisjZGVmaW5lIFpPUlJPX1BST0RfU1VOUklaRV9JTkRVU1RSSUVTX0FEMTAxMiBaT1JST19JRChTVU5SSVpFX0lORFVTVFJJRVMsIDB4MDEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX1NVTlJJWkVfSU5EVVNUUklFU19BRDUxNiBaT1JST19JRChTVU5SSVpFX0lORFVTVFJJRVMsIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1VOUklaRV9JTkRVU1RSSUVTX0RENTEyIFpPUlJPX0lEKFNVTlJJWkVfSU5EVVNUUklFUywgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfVFJJQ0VSQVRPUFMgMHgwODUwCisjZGVmaW5lIFpPUlJPX1BST0RfVFJJQ0VSQVRPUFNfTVVMVElfSU8gWk9SUk9fSUQoVFJJQ0VSQVRPUFMsIDB4MDEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19NQU5VRl9BUFBMSUVEX01BR0lDIDB4MDg1MQorI2RlZmluZSBaT1JST19QUk9EX0FQUExJRURfTUFHSUNfRE1JX1JFU09MVkVSIFpPUlJPX0lEKEFQUExJRURfTUFHSUMsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQVBQTElFRF9NQUdJQ19ESUdJVEFMX0JST0FEQ0FTVEVSIFpPUlJPX0lEKEFQUExJRURfTUFHSUMsIDB4MDYsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0dGWF9CQVNFIDB4MDg1RQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9HRlhfQkFTRV9HREFfMV9WUkFNIFpPUlJPX0lEKEdGWF9CQVNFLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0dGWF9CQVNFX0dEQV8xIFpPUlJPX0lEKEdGWF9CQVNFLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9ST0NURUMgMHgwODYwCisjZGVmaW5lIFpPUlJPX1BST0RfUk9DVEVDX1JIXzgwMEMgWk9SUk9fSUQoUk9DVEVDLCAweDAxLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9ST0NURUNfUkhfODAwQ19SQU0gWk9SUk9fSUQoUk9DVEVDLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9LQVRPIDB4MDg2MQorI2RlZmluZSBaT1JST19QUk9EX0tBVE9fTUVMT0RZIFpPUlJPX0lEKEtBVE8sIDB4ODAsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0hFTEZSSUNIXzEgMHgwODYxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0hFTEZSSUNIX1JBSU5CT1dfSUkgWk9SUk9fSUQoSEVMRlJJQ0hfMSwgMHgyMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9IRUxGUklDSF9SQUlOQk9XX0lJSSBaT1JST19JRChIRUxGUklDSF8xLCAweDIxLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9BVExBTlRJUyAweDA4NjIKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUFJPVEFSIDB4MDg2NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfQUNTIDB4MDg2NQorI2RlZmluZSBaT1JST19NQU5VRl9TT0ZUV0FSRV9SRVNVTFRTX0VOVEVSUFJJU0VTIDB4MDg2NgorI2RlZmluZSBaT1JST19QUk9EX1NPRlRXQVJFX1JFU1VMVFNfRU5URVJQUklTRVNfR09MREVOX0dBVEVfMl9CVVNfUExVUyBaT1JST19JRChTT0ZUV0FSRV9SRVNVTFRTX0VOVEVSUFJJU0VTLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9NQVNPQk9TSEkgMHgwODZECisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX01BU09CT1NISV9NQVNURVJfQ0FSRF9TQzIwMSBaT1JST19JRChNQVNPQk9TSEksIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUFTT0JPU0hJX01BU1RFUl9DQVJEX01DNzAyIFpPUlJPX0lEKE1BU09CT1NISSwgMHgwNCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQVNPQk9TSElfTVZEXzgxOSBaT1JST19JRChNQVNPQk9TSEksIDB4MDcsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX01BSU5IQVRUQU5fREFUQSAweDA4NkYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfTUFJTkhBVFRBTl9EQVRBX0lERSBaT1JST19JRChNQUlOSEFUVEFOX0RBVEEsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX1ZJTExBR0VfVFJPTklDIDB4MDg3NworI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX0RPTUlOT19SQU0gWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfRE9NSU5PX1JFRyBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgwMiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfRE9NSU5PXzE2TV9QUk9UT1RZUEUgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfUElDQVNTT19JSV9JSV9QTFVTX1JBTSBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgwQiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19QSUNBU1NPX0lJX0lJX1BMVVNfUkVHIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDBDLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX1BJQ0FTU09fSUlfSUlfUExVU19TRUdNRU5URURfTU9ERSBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgwRCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfUElDQVNTT19JVl9aMl9SQU0xIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDE1LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX1BJQ0FTU09fSVZfWjJfUkFNMiBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgxNiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19QSUNBU1NPX0lWX1oyX1JFRyBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgxNywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19QSUNBU1NPX0lWX1ozIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDE4LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19BUklBRE5FIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweEM5LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX0FSSUFETkUyIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweENBLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9VVElMSVRJRVNfVU5MSU1JVEVEIDB4MDg3QgorI2RlZmluZSBaT1JST19QUk9EX1VUSUxJVElFU19VTkxJTUlURURfRU1QTEFOVF9ERUxVWEUgWk9SUk9fSUQoVVRJTElUSUVTX1VOTElNSVRFRCwgMHgxNSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfVVRJTElUSUVTX1VOTElNSVRFRF9FTVBMQU5UX0RFTFVYRTIgWk9SUk9fSUQoVVRJTElUSUVTX1VOTElNSVRFRCwgMHgyMCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQU1JVFJJWCAweDA4ODAKKyNkZWZpbmUgWk9SUk9fUFJPRF9BTUlUUklYX01VTFRJX0lPIFpPUlJPX0lEKEFNSVRSSVgsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQU1JVFJJWF9DRF9SQU0gWk9SUk9fSUQoQU1JVFJJWCwgMHgwMiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX0FSTUFYIDB4MDg4NQorI2RlZmluZSBaT1JST19QUk9EX0FSTUFYX09NTklCVVMgWk9SUk9fSUQoQVJNQVgsIDB4MDAsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX1pFVVMgMHgwODhECisjZGVmaW5lIFpPUlJPX1BST0RfWkVVU19TUElERVIgWk9SUk9fSUQoWkVVUywgMHgwNCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX05FV1RFSyAweDA4OEYKKyNkZWZpbmUgWk9SUk9fUFJPRF9ORVdURUtfVklERU9UT0FTVEVSIFpPUlJPX0lEKE5FV1RFSywgMHgwMCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTV9URUNIX0dFUk1BTlkgMHgwODkwCisjZGVmaW5lIFpPUlJPX1BST0RfTVRFQ19BVDUwMF8yIFpPUlJPX0lEKE1fVEVDSF9HRVJNQU5ZLCAweDAxLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9NVEVDXzY4MDMwIFpPUlJPX0lEKE1fVEVDSF9HRVJNQU5ZLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01URUNfNjgwMjBJIFpPUlJPX0lEKE1fVEVDSF9HRVJNQU5ZLCAweDA2LCAwKQorI2RlZmluZSBaT1JST19QUk9EX01URUNfQTEyMDBfVDY4MDMwX1JUQyBaT1JST19JRChNX1RFQ0hfR0VSTUFOWSwgMHgyMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NVEVDX1ZJUEVSX01LX1ZfRV9NQVRSSVhfNTMwIFpPUlJPX0lEKE1fVEVDSF9HRVJNQU5ZLCAweDIxLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9NVEVDXzhfTUJfUkFNIFpPUlJPX0lEKE1fVEVDSF9HRVJNQU5ZLCAweDIyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01URUNfVklQRVJfTUtfVl9FX01BVFJJWF81MzBfU0NTSV9JREUgWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MjQsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0dSRUFUX1ZBTExFWV9QUk9EVUNUU180IDB4MDg5MQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9FR1NfMjhfMjRfU1BFQ1RSVU1fUkFNIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU180LCAweDAxLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfRUdTXzI4XzI0X1NQRUNUUlVNX1JFRyBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfNCwgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQVBPTExPXzEgMHgwODkyCisjZGVmaW5lIFpPUlJPX1BST0RfQVBPTExPX0ExMjAwIFpPUlJPX0lEKEFQT0xMT18xLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9IRUxGUklDSF8yIDB4MDg5MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9IRUxGUklDSF9QSUNDT0xPX1JBTSBaT1JST19JRChIRUxGUklDSF8yLCAweDA1LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0hFTEZSSUNIX1BJQ0NPTE9fUkVHIFpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MDYsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSEVMRlJJQ0hfUEVHR1lfUExVU19NUEVHIFpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MDcsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSEVMRlJJQ0hfVklERU9DUlVOQ0hFUiBaT1JST19JRChIRUxGUklDSF8yLCAweDA4LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9IRUxGUklDSF9TRDY0X1JBTSBaT1JST19JRChIRUxGUklDSF8yLCAweDBBLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0hFTEZSSUNIX1NENjRfUkVHIFpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MEIsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX01BQ1JPU1lTVEVNU19VU0EgMHgwODlCCisjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX1dBUlBfRU5HSU5FXzQweHggWk9SUk9fSUQoTUFDUk9TWVNURU1TX1VTQSwgMHgxMywgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX0VMQk9YX0NPTVBVVEVSIDB4MDg5RQorI2RlZmluZSBaT1JST19QUk9EX0VMQk9YX0NPTVBVVEVSXzEyMDBfNCBaT1JST19JRChFTEJPWF9DT01QVVRFUiwgMHgwNiwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSEFSTVNfUFJPRkVTU0lPTkFMIDB4MEEwMAorI2RlZmluZSBaT1JST19QUk9EX0hBUk1TX1BST0ZFU1NJT05BTF8wMzBfUExVUyBaT1JST19JRChIQVJNU19QUk9GRVNTSU9OQUwsIDB4MTAsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0hBUk1TX1BST0ZFU1NJT05BTF8zNTAwIFpPUlJPX0lEKEhBUk1TX1BST0ZFU1NJT05BTCwgMHhEMCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUlDUk9OSUsgMHgwQTUwCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9OSUtfUkNBXzEyMCBaT1JST19JRChNSUNST05JSywgMHgwQSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUlDUk9OSUsyIDB4MEYwRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST05JSzJfWjNJIFpPUlJPX0lEKE1JQ1JPTklLMiwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUVHQU1JQ1JPIDB4MTAwMAorI2RlZmluZSBaT1JST19QUk9EX01FR0FNSUNST19TQ1JBTV81MDAgWk9SUk9fSUQoTUVHQU1JQ1JPLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01FR0FNSUNST19TQ1JBTV81MDBfUkFNIFpPUlJPX0lEKE1FR0FNSUNSTywgMHgwNCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX0lNVFJPTklDU18yIDB4MTAyOAorI2RlZmluZSBaT1JST19QUk9EX0lNVFJPTklDU19IVVJSSUNBTkVfMjgwMF8zIFpPUlJPX0lEKElNVFJPTklDU18yLCAweDM5LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lNVFJPTklDU19IVVJSSUNBTkVfMjgwMF80IFpPUlJPX0lEKElNVFJPTklDU18yLCAweDU3LCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9JTkRJVklEVUFMX0NPTVBVVEVSUyAweDEyMTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfSU5ESVZJRFVBTF9DT01QVVRFUlNfQlVEREhBIFpPUlJPX0lEKElORElWSURVQUxfQ09NUFVURVJTLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lORElWSURVQUxfQ09NUFVURVJTX1hfU1VSRiBaT1JST19JRChJTkRJVklEVUFMX0NPTVBVVEVSUywgMHgxNywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9JTkRJVklEVUFMX0NPTVBVVEVSU19DQVRXRUFTRUwgWk9SUk9fSUQoSU5ESVZJRFVBTF9DT01QVVRFUlMsIDB4MkEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0tVUEtFXzMgMHgxMjQ4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0tVUEtFX0dPTEVNX0hEXzMwMDAgWk9SUk9fSUQoS1VQS0VfMywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSVRIIDB4MTM4OAorI2RlZmluZSBaT1JST19QUk9EX0lUSF9JU0ROX01BU1RFUl9JSSBaT1JST19JRChJVEgsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX1ZNQyAweDEzODkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfVk1DX0lTRE5fQkxBU1RFUl9aMiBaT1JST19JRChWTUMsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVk1DX0hZUEVSQ09NXzQgWk9SUk9fSUQoVk1DLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9JTkZPUk1BVElPTiAweDE1N0MKKyNkZWZpbmUgWk9SUk9fUFJPRF9JTkZPUk1BVElPTl9JU0ROX0VOR0lORV9JIFpPUlJPX0lEKElORk9STUFUSU9OLCAweDY0LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfVk9SVEVYIDB4MjAxNworI2RlZmluZSBaT1JST19QUk9EX1ZPUlRFWF9HT0xERU5fR0FURV84MDM4NlNYIFpPUlJPX0lEKFZPUlRFWCwgMHgwNywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WT1JURVhfR09MREVOX0dBVEVfUkFNIFpPUlJPX0lEKFZPUlRFWCwgMHgwOCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WT1JURVhfR09MREVOX0dBVEVfODA0ODYgWk9SUk9fSUQoVk9SVEVYLCAweDA5LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfRVhQQU5TSU9OX1NZU1RFTVMgMHgyMDYyCisjZGVmaW5lIFpPUlJPX1BST0RfRVhQQU5TSU9OX1NZU1RFTVNfREFUQUZMWUVSXzQwMDBTWCBaT1JST19JRChFWFBBTlNJT05fU1lTVEVNUywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9FWFBBTlNJT05fU1lTVEVNU19EQVRBRkxZRVJfNDAwMFNYX1JBTSBaT1JST19JRChFWFBBTlNJT05fU1lTVEVNUywgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUkVBRFlTT0ZUIDB4MjEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9SRUFEWVNPRlRfQU1BWF9JSV9JViBaT1JST19JRChSRUFEWVNPRlQsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX1BIQVNFNSAweDIxNDAKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQkxJWlpBUkRfUkFNIFpPUlJPX0lEKFBIQVNFNSwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQkxJWlpBUkQgWk9SUk9fSUQoUEhBU0U1LCAweDAyLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQkxJWlpBUkRfMTIyMF9JViBaT1JST19JRChQSEFTRTUsIDB4MDYsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0ZBU1RMQU5FX1ozX1JBTSBaT1JST19JRChQSEFTRTUsIDB4MEEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEXzEyMzBfSUlfRkFTVExBTkVfWjNfQ1lCRVJTQ1NJX0NZQkVSU1RPUk0wNjAgWk9SUk9fSUQoUEhBU0U1LCAweDBCLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF8xMjIwX0NZQkVSU1RPUk0gWk9SUk9fSUQoUEhBU0U1LCAweDBDLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQkxJWlpBUkRfMTIzMCBaT1JST19JRChQSEFTRTUsIDB4MEQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEXzEyMzBfSVZfMTI2MCBaT1JST19JRChQSEFTRTUsIDB4MTEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEXzIwNjAgWk9SUk9fSUQoUEhBU0U1LCAweDE4LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9DWUJFUlNUT1JNX01LX0lJIFpPUlJPX0lEKFBIQVNFNSwgMHgxOSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0NZQkVSVklTSU9ONjQgWk9SUk9fSUQoUEhBU0U1LCAweDIyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9DWUJFUlZJU0lPTjY0XzNEX1BST1RPVFlQRSBaT1JST19JRChQSEFTRTUsIDB4MzIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0NZQkVSVklTSU9ONjRfM0QgWk9SUk9fSUQoUEhBU0U1LCAweDQzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9DWUJFUlNUT1JNX01LX0lJSSBaT1JST19JRChQSEFTRTUsIDB4NjQsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF82MDNFX1BMVVMgWk9SUk9fSUQoUEhBU0U1LCAweDZlLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9EUFMgMHgyMTY5CisjZGVmaW5lIFpPUlJPX1BST0RfRFBTX1BFUlNPTkFMX0FOSU1BVElPTl9SRUNPUkRFUiBaT1JST19JRChEUFMsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0FQT0xMT18yIDB4MjIwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9BUE9MTE9fQTYyMF82ODAyMF8xIFpPUlJPX0lEKEFQT0xMT18yLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0FQT0xMT19BNjIwXzY4MDIwXzIgWk9SUk9fSUQoQVBPTExPXzIsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0FQT0xMT18zIDB4MjIyMgorI2RlZmluZSBaT1JST19QUk9EX0FQT0xMT19BVF9BUE9MTE8gWk9SUk9fSUQoQVBPTExPXzMsIDB4MjIsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0FQT0xMT18xMjMwXzEyNDBfMTI2MF8yMDMwXzQwNDBfNDA2MCBaT1JST19JRChBUE9MTE9fMywgMHgyMywgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUEVUU09GRl9MUCAweDM4QTUKKyNkZWZpbmUgWk9SUk9fUFJPRF9QRVRTT0ZGX0xQX0RFTEZJTkEgWk9SUk9fSUQoUEVUU09GRl9MUCwgMHgwMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QRVRTT0ZGX0xQX0RFTEZJTkFfTElURSBaT1JST19JRChQRVRTT0ZGX0xQLCAweDAxLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfVVdFX0dFUkxBQ0ggMHgzRkY3CisjZGVmaW5lIFpPUlJPX1BST0RfVVdFX0dFUkxBQ0hfUkFNX1JPTSBaT1JST19JRChVV0VfR0VSTEFDSCwgMHhkNCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQUNUIDB4NDIzMQorI2RlZmluZSBaT1JST19QUk9EX0FDVF9QUkVMVURFIFpPUlJPX0lEKEFDVCwgMHgwMSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX01BQ1JPU1lTVEVNU19HRVJNQU5ZIDB4NDc1NAorI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19NQUVTVFJPIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19WTEFCIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDA0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19NQUVTVFJPX1BSTyBaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHgwNSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX1JFVElOQSBaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHgwNiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfTVVMVElfRVZPTFVUSU9OIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDA4LCAwKQorI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19UT0NDQVRBIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDBDLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19SRVRJTkFfWjMgWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MTAsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19WTEFCX01PVElPTiBaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHgxMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfQUxUQUlTIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDEzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19GQUxDT05fMDQwIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweEZELCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9DT01CSVRFQyAweDY3NjYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX1NLSV9QRVJJUEhFUkFMUyAweDgwMDAKKyNkZWZpbmUgWk9SUk9fUFJPRF9TS0lfUEVSSVBIRVJBTFNfTUFTVF9GSVJFQkFMTCBaT1JST19JRChTS0lfUEVSSVBIRVJBTFMsIDB4MDgsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU0tJX1BFUklQSEVSQUxTX1NDU0lfRFVBTF9TRVJJQUwgWk9SUk9fSUQoU0tJX1BFUklQSEVSQUxTLCAweDgwLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9SRUlTX1dBUkVfMiAweEE5QUQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfUkVJU19XQVJFX1NDQU5fS0lORyBaT1JST19JRChSRUlTX1dBUkVfMiwgMHgxMSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ0FNRVJPTiAweEFBMDEKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQU1FUk9OX1BFUlNPTkFMX0E0IFpPUlJPX0lEKENBTUVST04sIDB4MTAsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX1JFSVNfV0FSRSAweEFBMTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfUkVJU19XQVJFX0hBTkRZU0NBTk5FUiBaT1JST19JRChSRUlTX1dBUkUsIDB4MTEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX1BIT0VOSVhfMiAweEI1QTgKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSE9FTklYX1NUNTA2XzIgWk9SUk9fSUQoUEhPRU5JWF8yLCAweDIxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIT0VOSVhfU0NTSV8yIFpPUlJPX0lEKFBIT0VOSVhfMiwgMHgyMiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfUEhPRU5JWF9SQU1fMiBaT1JST19JRChQSE9FTklYXzIsIDB4QkUsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0NPTUJJVEVDXzIgMHhDMDA4CisjZGVmaW5lIFpPUlJPX1BST0RfQ09NQklURUNfSEQgWk9SUk9fSUQoQ09NQklURUNfMiwgMHgyQSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DT01CSVRFQ19TUkFNIFpPUlJPX0lEKENPTUJJVEVDXzIsIDB4MkIsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19NQU5VRl9IQUNLRVIgMHgwN0RCCisjZGVmaW5lIFpPUlJPX1BST0RfR0VORVJBTF9QUk9UT1RZUEUgWk9SUk9fSUQoSEFDS0VSLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0hBQ0tFUl9TQ1NJIFpPUlJPX0lEKEhBQ0tFUiwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9SRVNPVVJDRV9NQU5BR0VNRU5UX0ZPUkNFX1FVSUNLTkVUX1FOMjAwMCBaT1JST19JRChIQUNLRVIsIDB4MDIsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX1ZFQ1RPUl9DT05ORUNUSU9OXzIgWk9SUk9fSUQoSEFDS0VSLCAweEUwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZFQ1RPUl9DT05ORUNUSU9OXzMgWk9SUk9fSUQoSEFDS0VSLCAweEUxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZFQ1RPUl9DT05ORUNUSU9OXzQgWk9SUk9fSUQoSEFDS0VSLCAweEUyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZFQ1RPUl9DT05ORUNUSU9OXzUgWk9SUk9fSUQoSEFDS0VSLCAweEUzLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvcmRtYS9pYl91c2VyX3ZlcmJzLmggYi9saWJjL2tlcm5lbC91YXBpL3JkbWEvaWJfdXNlcl92ZXJicy5oCmluZGV4IGVlNjZjNDUuLmRkOTMxZDggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvcmRtYS9pYl91c2VyX3ZlcmJzLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9yZG1hL2liX3VzZXJfdmVyYnMuaApAQCAtMjEsNzU0ICsyMSw4NzEgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2RlZmluZSBJQl9VU0VSX1ZFUkJTX0FCSV9WRVJTSU9OIDYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElCX1VTRVJfVkVSQlNfQ01EX1RIUkVTSE9MRCA1MAogZW51bSB7CiAgSUJfVVNFUl9WRVJCU19DTURfR0VUX0NPTlRFWFQsCiAgSUJfVVNFUl9WRVJCU19DTURfUVVFUllfREVWSUNFLAotIElCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX1BPUlQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX1BPUlQsCiAgSUJfVVNFUl9WRVJCU19DTURfQUxMT0NfUEQsCiAgSUJfVVNFUl9WRVJCU19DTURfREVBTExPQ19QRCwKICBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfQUgsCi0gSUJfVVNFUl9WRVJCU19DTURfTU9ESUZZX0FILAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJQl9VU0VSX1ZFUkJTX0NNRF9NT0RJRllfQUgsCiAgSUJfVVNFUl9WRVJCU19DTURfUVVFUllfQUgsCiAgSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9BSCwKICBJQl9VU0VSX1ZFUkJTX0NNRF9SRUdfTVIsCi0gSUJfVVNFUl9WRVJCU19DTURfUkVHX1NNUiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUJfVVNFUl9WRVJCU19DTURfUkVHX1NNUiwKICBJQl9VU0VSX1ZFUkJTX0NNRF9SRVJFR19NUiwKICBJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9NUiwKICBJQl9VU0VSX1ZFUkJTX0NNRF9ERVJFR19NUiwKLSBJQl9VU0VSX1ZFUkJTX0NNRF9BTExPQ19NVywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUJfVVNFUl9WRVJCU19DTURfQUxMT0NfTVcsCiAgSUJfVVNFUl9WRVJCU19DTURfQklORF9NVywKICBJQl9VU0VSX1ZFUkJTX0NNRF9ERUFMTE9DX01XLAogIElCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9DT01QX0NIQU5ORUwsCi0gSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX0NRLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfQ1EsCiAgSUJfVVNFUl9WRVJCU19DTURfUkVTSVpFX0NRLAogIElCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfQ1EsCiAgSUJfVVNFUl9WRVJCU19DTURfUE9MTF9DUSwKLSBJQl9VU0VSX1ZFUkJTX0NNRF9QRUVLX0NRLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJQl9VU0VSX1ZFUkJTX0NNRF9QRUVLX0NRLAogIElCX1VTRVJfVkVSQlNfQ01EX1JFUV9OT1RJRllfQ1EsCiAgSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX1FQLAogIElCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX1FQLAotIElCX1VTRVJfVkVSQlNfQ01EX01PRElGWV9RUCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUJfVVNFUl9WRVJCU19DTURfTU9ESUZZX1FQLAogIElCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfUVAsCiAgSUJfVVNFUl9WRVJCU19DTURfUE9TVF9TRU5ELAogIElCX1VTRVJfVkVSQlNfQ01EX1BPU1RfUkVDViwKLSBJQl9VU0VSX1ZFUkJTX0NNRF9BVFRBQ0hfTUNBU1QsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElCX1VTRVJfVkVSQlNfQ01EX0FUVEFDSF9NQ0FTVCwKICBJQl9VU0VSX1ZFUkJTX0NNRF9ERVRBQ0hfTUNBU1QsCiAgSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX1NSUSwKICBJQl9VU0VSX1ZFUkJTX0NNRF9NT0RJRllfU1JRLAotIElCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX1NSUSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUJfVVNFUl9WRVJCU19DTURfUVVFUllfU1JRLAogIElCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfU1JRLAogIElCX1VTRVJfVkVSQlNfQ01EX1BPU1RfU1JRX1JFQ1YsCiAgSUJfVVNFUl9WRVJCU19DTURfT1BFTl9YUkNELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJQl9VU0VSX1ZFUkJTX0NNRF9DTE9TRV9YUkNELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfWFNSUSwKLSBJQl9VU0VSX1ZFUkJTX0NNRF9PUEVOX1FQCisgSUJfVVNFUl9WRVJCU19DTURfT1BFTl9RUCwKIH07Ci1zdHJ1Y3QgaWJfdXZlcmJzX2FzeW5jX2V2ZW50X2Rlc2MgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0geworIElCX1VTRVJfVkVSQlNfRVhfQ01EX0NSRUFURV9GTE9XID0gSUJfVVNFUl9WRVJCU19DTURfVEhSRVNIT0xELAorIElCX1VTRVJfVkVSQlNfRVhfQ01EX0RFU1RST1lfRkxPVworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaWJfdXZlcmJzX2FzeW5jX2V2ZW50X2Rlc2MgewogIF9fdTY0IGVsZW1lbnQ7CiAgX191MzIgZXZlbnRfdHlwZTsKICBfX3UzMiByZXNlcnZlZDsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBpYl91dmVyYnNfY29tcF9ldmVudF9kZXNjIHsKICBfX3U2NCBjcV9oYW5kbGU7CiB9Owotc3RydWN0IGliX3V2ZXJic19jbWRfaGRyIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElCX1VTRVJfVkVSQlNfQ01EX0NPTU1BTkRfTUFTSyAweGZmCisjZGVmaW5lIElCX1VTRVJfVkVSQlNfQ01EX0ZMQUdTX01BU0sgMHhmZjAwMDAwMHUKKyNkZWZpbmUgSUJfVVNFUl9WRVJCU19DTURfRkxBR1NfU0hJRlQgMjQKKyNkZWZpbmUgSUJfVVNFUl9WRVJCU19DTURfRkxBR19FWFRFTkRFRCAweDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGliX3V2ZXJic19jbWRfaGRyIHsKICBfX3UzMiBjb21tYW5kOwogIF9fdTE2IGluX3dvcmRzOwogIF9fdTE2IG91dF93b3JkczsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK3N0cnVjdCBpYl91dmVyYnNfZXhfY21kX2hkciB7CisgX191NjQgcmVzcG9uc2U7CisgX191MTYgcHJvdmlkZXJfaW5fd29yZHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IHByb3ZpZGVyX291dF93b3JkczsKKyBfX3UzMiBjbWRfaGRyX3Jlc2VydmVkOworfTsKIHN0cnVjdCBpYl91dmVyYnNfZ2V0X2NvbnRleHQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByZXNwb25zZTsKICBfX3U2NCBkcml2ZXJfZGF0YVswXTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19nZXRfY29udGV4dF9yZXNwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYXN5bmNfZmQ7CiAgX191MzIgbnVtX2NvbXBfdmVjdG9yczsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19xdWVyeV9kZXZpY2UgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByZXNwb25zZTsKICBfX3U2NCBkcml2ZXJfZGF0YVswXTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19xdWVyeV9kZXZpY2VfcmVzcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGZ3X3ZlcjsKICBfX2JlNjQgbm9kZV9ndWlkOwogIF9fYmU2NCBzeXNfaW1hZ2VfZ3VpZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgbWF4X21yX3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHBhZ2Vfc2l6ZV9jYXA7CiAgX191MzIgdmVuZG9yX2lkOwogIF9fdTMyIHZlbmRvcl9wYXJ0X2lkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBod192ZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9xcDsKICBfX3UzMiBtYXhfcXBfd3I7CiAgX191MzIgZGV2aWNlX2NhcF9mbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3NnZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3NnZV9yZDsKICBfX3UzMiBtYXhfY3E7CiAgX191MzIgbWF4X2NxZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X21yOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfcGQ7CiAgX191MzIgbWF4X3FwX3JkX2F0b207CiAgX191MzIgbWF4X2VlX3JkX2F0b207Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9yZXNfcmRfYXRvbTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3FwX2luaXRfcmRfYXRvbTsKICBfX3UzMiBtYXhfZWVfaW5pdF9yZF9hdG9tOwogIF9fdTMyIGF0b21pY19jYXA7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9lZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3JkZDsKICBfX3UzMiBtYXhfbXc7CiAgX191MzIgbWF4X3Jhd19pcHY2X3FwOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfcmF3X2V0aHlfcXA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9tY2FzdF9ncnA7CiAgX191MzIgbWF4X21jYXN0X3FwX2F0dGFjaDsKICBfX3UzMiBtYXhfdG90YWxfbWNhc3RfcXBfYXR0YWNoOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfYWg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9mbXI7CiAgX191MzIgbWF4X21hcF9wZXJfZm1yOwogIF9fdTMyIG1heF9zcnE7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9zcnFfd3I7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9zcnFfc2dlOwogIF9fdTE2IG1heF9wa2V5czsKICBfX3U4IGxvY2FsX2NhX2Fja19kZWxheTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwaHlzX3BvcnRfY250OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHJlc2VydmVkWzRdOwogfTsKIHN0cnVjdCBpYl91dmVyYnNfcXVlcnlfcG9ydCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJlc3BvbnNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHBvcnRfbnVtOwogIF9fdTggcmVzZXJ2ZWRbN107CiAgX191NjQgZHJpdmVyX2RhdGFbMF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X3BvcnRfcmVzcCB7CiAgX191MzIgcG9ydF9jYXBfZmxhZ3M7CiAgX191MzIgbWF4X21zZ19zejsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYmFkX3BrZXlfY250cjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcWtleV92aW9sX2NudHI7CiAgX191MzIgZ2lkX3RibF9sZW47CiAgX191MTYgcGtleV90YmxfbGVuOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBsaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHNtX2xpZDsKICBfX3U4IHN0YXRlOwogIF9fdTggbWF4X210dTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBhY3RpdmVfbXR1OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGxtYzsKICBfX3U4IG1heF92bF9udW07CiAgX191OCBzbV9zbDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBzdWJuZXRfdGltZW91dDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBpbml0X3R5cGVfcmVwbHk7CiAgX191OCBhY3RpdmVfd2lkdGg7CiAgX191OCBhY3RpdmVfc3BlZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcGh5c19zdGF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBsaW5rX2xheWVyOwogIF9fdTggcmVzZXJ2ZWRbMl07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfYWxsb2NfcGQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByZXNwb25zZTsKICBfX3U2NCBkcml2ZXJfZGF0YVswXTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19hbGxvY19wZF9yZXNwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGRfaGFuZGxlOwogfTsKIHN0cnVjdCBpYl91dmVyYnNfZGVhbGxvY19wZCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBkX2hhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGliX3V2ZXJic19vcGVuX3hyY2QgewogIF9fdTY0IHJlc3BvbnNlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgb2ZsYWdzOwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX29wZW5feHJjZF9yZXNwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgeHJjZF9oYW5kbGU7CiB9Owogc3RydWN0IGliX3V2ZXJic19jbG9zZV94cmNkIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgeHJjZF9oYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBpYl91dmVyYnNfcmVnX21yIHsKICBfX3U2NCByZXNwb25zZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgc3RhcnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGxlbmd0aDsKICBfX3U2NCBoY2FfdmE7CiAgX191MzIgcGRfaGFuZGxlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBhY2Nlc3NfZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOwogfTsKIHN0cnVjdCBpYl91dmVyYnNfcmVnX21yX3Jlc3AgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtcl9oYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGxrZXk7CiAgX191MzIgcmtleTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19kZXJlZ19tciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1yX2hhbmRsZTsKIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX2FsbG9jX213IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcmVzcG9uc2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBkX2hhbmRsZTsKICBfX3U4IG13X3R5cGU7CiAgX191OCByZXNlcnZlZFszXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfYWxsb2NfbXdfcmVzcCB7CiAgX191MzIgbXdfaGFuZGxlOwogIF9fdTMyIHJrZXk7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX2RlYWxsb2NfbXcgewogIF9fdTMyIG13X2hhbmRsZTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19jcmVhdGVfY29tcF9jaGFubmVsIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcmVzcG9uc2U7CiB9Owogc3RydWN0IGliX3V2ZXJic19jcmVhdGVfY29tcF9jaGFubmVsX3Jlc3AgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGliX3V2ZXJic19jcmVhdGVfY3EgewogIF9fdTY0IHJlc3BvbnNlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCB1c2VyX2hhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY3FlOwogIF9fdTMyIGNvbXBfdmVjdG9yOwogIF9fczMyIGNvbXBfY2hhbm5lbDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOwogfTsKIHN0cnVjdCBpYl91dmVyYnNfY3JlYXRlX2NxX3Jlc3AgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjcV9oYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNxZTsKIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX3Jlc2l6ZV9jcSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJlc3BvbnNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjcV9oYW5kbGU7CiAgX191MzIgY3FlOwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19yZXNpemVfY3FfcmVzcCB7CiAgX191MzIgY3FlOwogIF9fdTMyIHJlc2VydmVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBkcml2ZXJfZGF0YVswXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGliX3V2ZXJic19wb2xsX2NxIHsKICBfX3U2NCByZXNwb25zZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY3FfaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBuZTsKIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX3djIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgd3JfaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHN0YXR1czsKICBfX3UzMiBvcGNvZGU7CiAgX191MzIgdmVuZG9yX2VycjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYnl0ZV9sZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBfX3UzMiBpbW1fZGF0YTsKICBfX3UzMiBpbnZhbGlkYXRlX3JrZXk7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHFwX251bTsKICBfX3UzMiBzcmNfcXA7CiAgX191MzIgd2NfZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHBrZXlfaW5kZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHNsaWQ7CiAgX191OCBzbDsKICBfX3U4IGRsaWRfcGF0aF9iaXRzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHBvcnRfbnVtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHJlc2VydmVkOwogfTsKIHN0cnVjdCBpYl91dmVyYnNfcG9sbF9jcV9yZXNwIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkOwogIHN0cnVjdCBpYl91dmVyYnNfd2Mgd2NbMF07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfcmVxX25vdGlmeV9jcSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNxX2hhbmRsZTsKICBfX3UzMiBzb2xpY2l0ZWRfb25seTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19kZXN0cm95X2NxIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcmVzcG9uc2U7CiAgX191MzIgY3FfaGFuZGxlOwogIF9fdTMyIHJlc2VydmVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19kZXN0cm95X2NxX3Jlc3AgewogIF9fdTMyIGNvbXBfZXZlbnRzX3JlcG9ydGVkOwogIF9fdTMyIGFzeW5jX2V2ZW50c19yZXBvcnRlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfZ2xvYmFsX3JvdXRlIHsKICBfX3U4IGRnaWRbMTZdOwogIF9fdTMyIGZsb3dfbGFiZWw7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggc2dpZF9pbmRleDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBob3BfbGltaXQ7CiAgX191OCB0cmFmZmljX2NsYXNzOwogIF9fdTggcmVzZXJ2ZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX2FoX2F0dHIgewogIHN0cnVjdCBpYl91dmVyYnNfZ2xvYmFsX3JvdXRlIGdyaDsKICBfX3UxNiBkbGlkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHNsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHNyY19wYXRoX2JpdHM7CiAgX191OCBzdGF0aWNfcmF0ZTsKICBfX3U4IGlzX2dsb2JhbDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwb3J0X251bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCByZXNlcnZlZDsKIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX3FwX2F0dHIgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBxcF9hdHRyX21hc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHFwX3N0YXRlOwogIF9fdTMyIGN1cl9xcF9zdGF0ZTsKICBfX3UzMiBwYXRoX210dTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGF0aF9taWdfc3RhdGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHFrZXk7CiAgX191MzIgcnFfcHNuOwogIF9fdTMyIHNxX3BzbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZGVzdF9xcF9udW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHFwX2FjY2Vzc19mbGFnczsKICBzdHJ1Y3QgaWJfdXZlcmJzX2FoX2F0dHIgYWhfYXR0cjsKICBzdHJ1Y3QgaWJfdXZlcmJzX2FoX2F0dHIgYWx0X2FoX2F0dHI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9zZW5kX3dyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfcmVjdl93cjsKICBfX3UzMiBtYXhfc2VuZF9zZ2U7CiAgX191MzIgbWF4X3JlY3Zfc2dlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfaW5saW5lX2RhdGE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHBrZXlfaW5kZXg7CiAgX191MTYgYWx0X3BrZXlfaW5kZXg7CiAgX191OCBlbl9zcWRfYXN5bmNfbm90aWZ5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHNxX2RyYWluaW5nOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IG1heF9yZF9hdG9taWM7CiAgX191OCBtYXhfZGVzdF9yZF9hdG9taWM7CiAgX191OCBtaW5fcm5yX3RpbWVyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHBvcnRfbnVtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHRpbWVvdXQ7CiAgX191OCByZXRyeV9jbnQ7CiAgX191OCBybnJfcmV0cnk7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYWx0X3BvcnRfbnVtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGFsdF90aW1lb3V0OwogIF9fdTggcmVzZXJ2ZWRbNV07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfY3JlYXRlX3FwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcmVzcG9uc2U7CiAgX191NjQgdXNlcl9oYW5kbGU7CiAgX191MzIgcGRfaGFuZGxlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzZW5kX2NxX2hhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVjdl9jcV9oYW5kbGU7CiAgX191MzIgc3JxX2hhbmRsZTsKICBfX3UzMiBtYXhfc2VuZF93cjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3JlY3Zfd3I7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9zZW5kX3NnZTsKICBfX3UzMiBtYXhfcmVjdl9zZ2U7CiAgX191MzIgbWF4X2lubGluZV9kYXRhOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHNxX3NpZ19hbGw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcXBfdHlwZTsKICBfX3U4IGlzX3NycTsKICBfX3U4IHJlc2VydmVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBkcml2ZXJfZGF0YVswXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGliX3V2ZXJic19vcGVuX3FwIHsKICBfX3U2NCByZXNwb25zZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgdXNlcl9oYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBkX2hhbmRsZTsKICBfX3UzMiBxcG47CiAgX191OCBxcF90eXBlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHJlc2VydmVkWzddOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBkcml2ZXJfZGF0YVswXTsKIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9xcF9yZXNwIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcXBfaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBxcG47CiAgX191MzIgbWF4X3NlbmRfd3I7CiAgX191MzIgbWF4X3JlY3Zfd3I7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9zZW5kX3NnZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3JlY3Zfc2dlOwogIF9fdTMyIG1heF9pbmxpbmVfZGF0YTsKICBfX3UzMiByZXNlcnZlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfcXBfZGVzdCB7CiAgX191OCBkZ2lkWzE2XTsKICBfX3UzMiBmbG93X2xhYmVsOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBkbGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiByZXNlcnZlZDsKICBfX3U4IHNnaWRfaW5kZXg7CiAgX191OCBob3BfbGltaXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdHJhZmZpY19jbGFzczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBzbDsKICBfX3U4IHNyY19wYXRoX2JpdHM7CiAgX191OCBzdGF0aWNfcmF0ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBpc19nbG9iYWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcG9ydF9udW07CiB9Owogc3RydWN0IGliX3V2ZXJic19xdWVyeV9xcCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJlc3BvbnNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBxcF9oYW5kbGU7CiAgX191MzIgYXR0cl9tYXNrOwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19xdWVyeV9xcF9yZXNwIHsKICBzdHJ1Y3QgaWJfdXZlcmJzX3FwX2Rlc3QgZGVzdDsKICBzdHJ1Y3QgaWJfdXZlcmJzX3FwX2Rlc3QgYWx0X2Rlc3Q7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9zZW5kX3dyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfcmVjdl93cjsKICBfX3UzMiBtYXhfc2VuZF9zZ2U7CiAgX191MzIgbWF4X3JlY3Zfc2dlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfaW5saW5lX2RhdGE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHFrZXk7CiAgX191MzIgcnFfcHNuOwogIF9fdTMyIHNxX3BzbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZGVzdF9xcF9udW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHFwX2FjY2Vzc19mbGFnczsKICBfX3UxNiBwa2V5X2luZGV4OwogIF9fdTE2IGFsdF9wa2V5X2luZGV4OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHFwX3N0YXRlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGN1cl9xcF9zdGF0ZTsKICBfX3U4IHBhdGhfbXR1OwogIF9fdTggcGF0aF9taWdfc3RhdGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggc3FfZHJhaW5pbmc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbWF4X3JkX2F0b21pYzsKICBfX3U4IG1heF9kZXN0X3JkX2F0b21pYzsKICBfX3U4IG1pbl9ybnJfdGltZXI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcG9ydF9udW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdGltZW91dDsKICBfX3U4IHJldHJ5X2NudDsKICBfX3U4IHJucl9yZXRyeTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBhbHRfcG9ydF9udW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYWx0X3RpbWVvdXQ7CiAgX191OCBzcV9zaWdfYWxsOwogIF9fdTggcmVzZXJ2ZWRbNV07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX21vZGlmeV9xcCB7CiAgc3RydWN0IGliX3V2ZXJic19xcF9kZXN0IGRlc3Q7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBpYl91dmVyYnNfcXBfZGVzdCBhbHRfZGVzdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcXBfaGFuZGxlOwogIF9fdTMyIGF0dHJfbWFzazsKICBfX3UzMiBxa2V5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBycV9wc247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNxX3BzbjsKICBfX3UzMiBkZXN0X3FwX251bTsKICBfX3UzMiBxcF9hY2Nlc3NfZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHBrZXlfaW5kZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IGFsdF9wa2V5X2luZGV4OwogIF9fdTggcXBfc3RhdGU7CiAgX191OCBjdXJfcXBfc3RhdGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcGF0aF9tdHU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcGF0aF9taWdfc3RhdGU7CiAgX191OCBlbl9zcWRfYXN5bmNfbm90aWZ5OwogIF9fdTggbWF4X3JkX2F0b21pYzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBtYXhfZGVzdF9yZF9hdG9taWM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbWluX3Jucl90aW1lcjsKICBfX3U4IHBvcnRfbnVtOwogIF9fdTggdGltZW91dDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCByZXRyeV9jbnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcm5yX3JldHJ5OwogIF9fdTggYWx0X3BvcnRfbnVtOwogIF9fdTggYWx0X3RpbWVvdXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcmVzZXJ2ZWRbMl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOwogfTsKIHN0cnVjdCBpYl91dmVyYnNfbW9kaWZ5X3FwX3Jlc3AgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19kZXN0cm95X3FwIHsKICBfX3U2NCByZXNwb25zZTsKICBfX3UzMiBxcF9oYW5kbGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX2Rlc3Ryb3lfcXBfcmVzcCB7CiAgX191MzIgZXZlbnRzX3JlcG9ydGVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19zZ2UgewogIF9fdTY0IGFkZHI7CiAgX191MzIgbGVuZ3RoOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBsa2V5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX3NlbmRfd3IgewogIF9fdTY0IHdyX2lkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBudW1fc2dlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBvcGNvZGU7CiAgX191MzIgc2VuZF9mbGFnczsKICB1bmlvbiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGltbV9kYXRhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpbnZhbGlkYXRlX3JrZXk7CiAgfSBleDsKICB1bmlvbiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJlbW90ZV9hZGRyOwogIF9fdTMyIHJrZXk7CiAgX191MzIgcmVzZXJ2ZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gcmRtYTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICBfX3U2NCByZW1vdGVfYWRkcjsKICBfX3U2NCBjb21wYXJlX2FkZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgc3dhcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmtleTsKICBfX3UzMiByZXNlcnZlZDsKICB9IGF0b21pYzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYWg7CiAgX191MzIgcmVtb3RlX3FwbjsKICBfX3UzMiByZW1vdGVfcWtleTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gdWQ7CiAgfSB3cjsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19wb3N0X3NlbmQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByZXNwb25zZTsKICBfX3UzMiBxcF9oYW5kbGU7CiAgX191MzIgd3JfY291bnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNnZV9jb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgd3FlX3NpemU7CiAgc3RydWN0IGliX3V2ZXJic19zZW5kX3dyIHNlbmRfd3JbMF07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfcG9zdF9zZW5kX3Jlc3AgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBiYWRfd3I7CiB9Owogc3RydWN0IGliX3V2ZXJic19yZWN2X3dyIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgd3JfaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG51bV9zZ2U7CiAgX191MzIgcmVzZXJ2ZWQ7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfcG9zdF9yZWN2IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcmVzcG9uc2U7CiAgX191MzIgcXBfaGFuZGxlOwogIF9fdTMyIHdyX2NvdW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzZ2VfY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHdxZV9zaXplOwogIHN0cnVjdCBpYl91dmVyYnNfcmVjdl93ciByZWN2X3dyWzBdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX3Bvc3RfcmVjdl9yZXNwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYmFkX3dyOwogfTsKIHN0cnVjdCBpYl91dmVyYnNfcG9zdF9zcnFfcmVjdiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJlc3BvbnNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzcnFfaGFuZGxlOwogIF9fdTMyIHdyX2NvdW50OwogIF9fdTMyIHNnZV9jb3VudDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgd3FlX3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBpYl91dmVyYnNfcmVjdl93ciByZWN2WzBdOwogfTsKIHN0cnVjdCBpYl91dmVyYnNfcG9zdF9zcnFfcmVjdl9yZXNwIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYmFkX3dyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9haCB7CiAgX191NjQgcmVzcG9uc2U7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHVzZXJfaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwZF9oYW5kbGU7CiAgX191MzIgcmVzZXJ2ZWQ7CiAgc3RydWN0IGliX3V2ZXJic19haF9hdHRyIGF0dHI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9haF9yZXNwIHsKICBfX3UzMiBhaF9oYW5kbGU7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfZGVzdHJveV9haCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGFoX2hhbmRsZTsKIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX2F0dGFjaF9tY2FzdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggZ2lkWzE2XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcXBfaGFuZGxlOwogIF9fdTE2IG1saWQ7CiAgX191MTYgcmVzZXJ2ZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX2RldGFjaF9tY2FzdCB7CiAgX191OCBnaWRbMTZdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBxcF9oYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IG1saWQ7CiAgX191MTYgcmVzZXJ2ZWQ7CiAgX191NjQgZHJpdmVyX2RhdGFbMF07Cit9OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBpYl91dmVyYnNfZmxvd19zcGVjX2hkciB7CisgX191MzIgdHlwZTsKKyBfX3UxNiBzaXplOworIF9fdTE2IHJlc2VydmVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBmbG93X3NwZWNfZGF0YVswXTsKK307CitzdHJ1Y3QgaWJfdXZlcmJzX2Zsb3dfZXRoX2ZpbHRlciB7CisgX191OCBkc3RfbWFjWzZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHNyY19tYWNbNl07CisgX19iZTE2IGV0aGVyX3R5cGU7CisgX19iZTE2IHZsYW5fdGFnOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaWJfdXZlcmJzX2Zsb3dfc3BlY19ldGggeworIHVuaW9uIHsKKyBzdHJ1Y3QgaWJfdXZlcmJzX2Zsb3dfc3BlY19oZHIgaGRyOworIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHR5cGU7CisgX191MTYgc2l6ZTsKKyBfX3UxNiByZXNlcnZlZDsKKyB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB9OworIHN0cnVjdCBpYl91dmVyYnNfZmxvd19ldGhfZmlsdGVyIHZhbDsKKyBzdHJ1Y3QgaWJfdXZlcmJzX2Zsb3dfZXRoX2ZpbHRlciBtYXNrOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaWJfdXZlcmJzX2Zsb3dfaXB2NF9maWx0ZXIgeworIF9fYmUzMiBzcmNfaXA7CisgX19iZTMyIGRzdF9pcDsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGliX3V2ZXJic19mbG93X3NwZWNfaXB2NCB7CisgdW5pb24geworIHN0cnVjdCBpYl91dmVyYnNfZmxvd19zcGVjX2hkciBoZHI7Cisgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdHlwZTsKKyBfX3UxNiBzaXplOworIF9fdTE2IHJlc2VydmVkOworIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIH07Cisgc3RydWN0IGliX3V2ZXJic19mbG93X2lwdjRfZmlsdGVyIHZhbDsKKyBzdHJ1Y3QgaWJfdXZlcmJzX2Zsb3dfaXB2NF9maWx0ZXIgbWFzazsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGliX3V2ZXJic19mbG93X3RjcF91ZHBfZmlsdGVyIHsKKyBfX2JlMTYgZHN0X3BvcnQ7CisgX19iZTE2IHNyY19wb3J0OworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaWJfdXZlcmJzX2Zsb3dfc3BlY190Y3BfdWRwIHsKKyB1bmlvbiB7Cisgc3RydWN0IGliX3V2ZXJic19mbG93X3NwZWNfaGRyIGhkcjsKKyBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB0eXBlOworIF9fdTE2IHNpemU7CisgX191MTYgcmVzZXJ2ZWQ7CisgfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfTsKKyBzdHJ1Y3QgaWJfdXZlcmJzX2Zsb3dfdGNwX3VkcF9maWx0ZXIgdmFsOworIHN0cnVjdCBpYl91dmVyYnNfZmxvd190Y3BfdWRwX2ZpbHRlciBtYXNrOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaWJfdXZlcmJzX2Zsb3dfYXR0ciB7CisgX191MzIgdHlwZTsKKyBfX3UxNiBzaXplOworIF9fdTE2IHByaW9yaXR5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IG51bV9vZl9zcGVjczsKKyBfX3U4IHJlc2VydmVkWzJdOworIF9fdTggcG9ydDsKKyBfX3UzMiBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGliX3V2ZXJic19mbG93X3NwZWNfaGRyIGZsb3dfc3BlY3NbMF07Cit9Oworc3RydWN0IGliX3V2ZXJic19jcmVhdGVfZmxvdyB7CisgX191MzIgY29tcF9tYXNrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBxcF9oYW5kbGU7Cisgc3RydWN0IGliX3V2ZXJic19mbG93X2F0dHIgZmxvd19hdHRyOworfTsKK3N0cnVjdCBpYl91dmVyYnNfY3JlYXRlX2Zsb3dfcmVzcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGNvbXBfbWFzazsKKyBfX3UzMiBmbG93X2hhbmRsZTsKK307CitzdHJ1Y3QgaWJfdXZlcmJzX2Rlc3Ryb3lfZmxvdyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGNvbXBfbWFzazsKKyBfX3UzMiBmbG93X2hhbmRsZTsKIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9zcnEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByZXNwb25zZTsKICBfX3U2NCB1c2VyX2hhbmRsZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGRfaGFuZGxlOwogIF9fdTMyIG1heF93cjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3NnZTsKICBfX3UzMiBzcnFfbGltaXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV94c3JxIHsKICBfX3U2NCByZXNwb25zZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgdXNlcl9oYW5kbGU7CiAgX191MzIgc3JxX3R5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBkX2hhbmRsZTsKICBfX3UzMiBtYXhfd3I7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9zZ2U7CiAgX191MzIgc3JxX2xpbWl0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZDsKICBfX3UzMiB4cmNkX2hhbmRsZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY3FfaGFuZGxlOwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9zcnFfcmVzcCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNycV9oYW5kbGU7CiAgX191MzIgbWF4X3dyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfc2dlOwogIF9fdTMyIHNycW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBpYl91dmVyYnNfbW9kaWZ5X3NycSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNycV9oYW5kbGU7CiAgX191MzIgYXR0cl9tYXNrOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfd3I7CiAgX191MzIgc3JxX2xpbWl0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBkcml2ZXJfZGF0YVswXTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19xdWVyeV9zcnEgewogIF9fdTY0IHJlc3BvbnNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzcnFfaGFuZGxlOwogIF9fdTMyIHJlc2VydmVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBkcml2ZXJfZGF0YVswXTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19xdWVyeV9zcnFfcmVzcCB7CiAgX191MzIgbWF4X3dyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfc2dlOwogIF9fdTMyIHNycV9saW1pdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWQ7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfZGVzdHJveV9zcnEgewogIF9fdTY0IHJlc3BvbnNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzcnFfaGFuZGxlOwogIF9fdTMyIHJlc2VydmVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX2Rlc3Ryb3lfc3JxX3Jlc3AgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBldmVudHNfcmVwb3J0ZWQ7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9yZG1hL3JkbWFfdXNlcl9jbS5oIGIvbGliYy9rZXJuZWwvdWFwaS9yZG1hL3JkbWFfdXNlcl9jbS5oCmluZGV4IDdhYjRjZjAuLjc0ZTVhMDUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvcmRtYS9yZG1hX3VzZXJfY20uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL3JkbWEvcmRtYV91c2VyX2NtLmgKQEAgLTI5LDkgKzI5LDkgQEAKIGVudW0gewogIFJETUFfVVNFUl9DTV9DTURfQ1JFQVRFX0lELAogIFJETUFfVVNFUl9DTV9DTURfREVTVFJPWV9JRCwKLSBSRE1BX1VTRVJfQ01fQ01EX0JJTkRfQUREUiwKKyBSRE1BX1VTRVJfQ01fQ01EX0JJTkRfSVAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIFJETUFfVVNFUl9DTV9DTURfUkVTT0xWRV9BRERSLAorIFJETUFfVVNFUl9DTV9DTURfUkVTT0xWRV9JUCwKICBSRE1BX1VTRVJfQ01fQ01EX1JFU09MVkVfUk9VVEUsCiAgUkRNQV9VU0VSX0NNX0NNRF9RVUVSWV9ST1VURSwKICBSRE1BX1VTRVJfQ01fQ01EX0NPTk5FQ1QsCkBAIC00Nyw5ICs0NywxNCBAQAogIFJETUFfVVNFUl9DTV9DTURfU0VUX09QVElPTiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUkRNQV9VU0VSX0NNX0NNRF9OT1RJRlksCi0gUkRNQV9VU0VSX0NNX0NNRF9KT0lOX01DQVNULAorIFJETUFfVVNFUl9DTV9DTURfSk9JTl9JUF9NQ0FTVCwKICBSRE1BX1VTRVJfQ01fQ01EX0xFQVZFX01DQVNULAotIFJETUFfVVNFUl9DTV9DTURfTUlHUkFURV9JRAorIFJETUFfVVNFUl9DTV9DTURfTUlHUkFURV9JRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUkRNQV9VU0VSX0NNX0NNRF9RVUVSWSwKKyBSRE1BX1VTRVJfQ01fQ01EX0JJTkQsCisgUkRNQV9VU0VSX0NNX0NNRF9SRVNPTFZFX0FERFIsCisgUkRNQV9VU0VSX0NNX0NNRF9KT0lOX01DQVNUCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCByZG1hX3VjbV9jbWRfaGRyIHsKQEAgLTgxLDI5ICs4Niw1NCBAQAogIF9fdTMyIGV2ZW50c19yZXBvcnRlZDsKIH07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotc3RydWN0IHJkbWFfdWNtX2JpbmRfYWRkciB7CitzdHJ1Y3QgcmRtYV91Y21fYmluZF9pcCB7CiAgX191NjQgcmVzcG9uc2U7CiAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOwogIF9fdTMyIGlkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci1zdHJ1Y3QgcmRtYV91Y21fcmVzb2x2ZV9hZGRyIHsKK3N0cnVjdCByZG1hX3VjbV9iaW5kIHsKKyBfX3UzMiBpZDsKKyBfX3UxNiBhZGRyX3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IHJlc2VydmVkOworIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7Cit9Oworc3RydWN0IHJkbWFfdWNtX3Jlc29sdmVfaXAgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyY19hZGRyOwogIHN0cnVjdCBzb2NrYWRkcl9pbjYgZHN0X2FkZHI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlkOwogIF9fdTMyIHRpbWVvdXRfbXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK3N0cnVjdCByZG1hX3VjbV9yZXNvbHZlX2FkZHIgeworIF9fdTMyIGlkOworIF9fdTMyIHRpbWVvdXRfbXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IHNyY19zaXplOworIF9fdTE2IGRzdF9zaXplOworIF9fdTMyIHJlc2VydmVkOworIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNyY19hZGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBkc3RfYWRkcjsKIH07CiBzdHJ1Y3QgcmRtYV91Y21fcmVzb2x2ZV9yb3V0ZSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0aW1lb3V0X21zOwogfTsKLXN0cnVjdCByZG1hX3VjbV9xdWVyeV9yb3V0ZSB7CitlbnVtIHsKKyBSRE1BX1VTRVJfQ01fUVVFUllfQUREUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUkRNQV9VU0VSX0NNX1FVRVJZX1BBVEgsCisgUkRNQV9VU0VSX0NNX1FVRVJZX0dJRAorfTsKK3N0cnVjdCByZG1hX3VjbV9xdWVyeSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJlc3BvbnNlOwogIF9fdTMyIGlkOwotIF9fdTMyIHJlc2VydmVkOworIF9fdTMyIG9wdGlvbjsKIH07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHJkbWFfdWNtX3F1ZXJ5X3JvdXRlX3Jlc3AgewpAQCAtMTE3LDEyNyArMTQ3LDE1NSBAQAogIF9fdTggcmVzZXJ2ZWRbM107CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKK3N0cnVjdCByZG1hX3VjbV9xdWVyeV9hZGRyX3Jlc3AgeworIF9fdTY0IG5vZGVfZ3VpZDsKKyBfX3U4IHBvcnRfbnVtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHJlc2VydmVkOworIF9fdTE2IHBrZXk7CisgX191MTYgc3JjX3NpemU7CisgX191MTYgZHN0X3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNyY19hZGRyOworIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGRzdF9hZGRyOworfTsKK3N0cnVjdCByZG1hX3VjbV9xdWVyeV9wYXRoX3Jlc3AgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBudW1fcGF0aHM7CisgX191MzIgcmVzZXJ2ZWQ7Cisgc3RydWN0IGliX3BhdGhfcmVjX2RhdGEgcGF0aF9kYXRhWzBdOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcmRtYV91Y21fY29ubl9wYXJhbSB7CiAgX191MzIgcXBfbnVtOwotIF9fdTMyIHJlc2VydmVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBxa2V5OwogIF9fdTggcHJpdmF0ZV9kYXRhW1JETUFfTUFYX1BSSVZBVEVfREFUQV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcHJpdmF0ZV9kYXRhX2xlbjsKICBfX3U4IHNycTsKICBfX3U4IHJlc3BvbmRlcl9yZXNvdXJjZXM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggaW5pdGlhdG9yX2RlcHRoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGZsb3dfY29udHJvbDsKICBfX3U4IHJldHJ5X2NvdW50OwogIF9fdTggcm5yX3JldHJ5X2NvdW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHZhbGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgcmRtYV91Y21fdWRfcGFyYW0gewogIF9fdTMyIHFwX251bTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcWtleTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGliX3V2ZXJic19haF9hdHRyIGFoX2F0dHI7CiAgX191OCBwcml2YXRlX2RhdGFbUkRNQV9NQVhfUFJJVkFURV9EQVRBXTsKICBfX3U4IHByaXZhdGVfZGF0YV9sZW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcmVzZXJ2ZWRbN107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCByZG1hX3VjbV9jb25uZWN0IHsKICBzdHJ1Y3QgcmRtYV91Y21fY29ubl9wYXJhbSBjb25uX3BhcmFtOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWQ7CiB9Owogc3RydWN0IHJkbWFfdWNtX2xpc3RlbiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBiYWNrbG9nOwogfTsKIHN0cnVjdCByZG1hX3VjbV9hY2NlcHQgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCB1aWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCByZG1hX3VjbV9jb25uX3BhcmFtIGNvbm5fcGFyYW07CiAgX191MzIgaWQ7CiAgX191MzIgcmVzZXJ2ZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcmRtYV91Y21fcmVqZWN0IHsKICBfX3UzMiBpZDsKICBfX3U4IHByaXZhdGVfZGF0YV9sZW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcmVzZXJ2ZWRbM107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcHJpdmF0ZV9kYXRhW1JETUFfTUFYX1BSSVZBVEVfREFUQV07CiB9Owogc3RydWN0IHJkbWFfdWNtX2Rpc2Nvbm5lY3QgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHJkbWFfdWNtX2luaXRfcXBfYXR0ciB7CiAgX191NjQgcmVzcG9uc2U7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBxcF9zdGF0ZTsKIH07CiBzdHJ1Y3QgcmRtYV91Y21fbm90aWZ5IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGV2ZW50OwogfTsKLXN0cnVjdCByZG1hX3VjbV9qb2luX21jYXN0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgcmRtYV91Y21fam9pbl9pcF9tY2FzdCB7CiAgX191NjQgcmVzcG9uc2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHVpZDsKICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CiAgX191MzIgaWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgcmRtYV91Y21fam9pbl9tY2FzdCB7CisgX191NjQgcmVzcG9uc2U7CisgX191NjQgdWlkOworIF9fdTMyIGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UxNiBhZGRyX3NpemU7CisgX191MTYgcmVzZXJ2ZWQ7Cisgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcjsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHJkbWFfdWNtX2dldF9ldmVudCB7CiAgX191NjQgcmVzcG9uc2U7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCByZG1hX3VjbV9ldmVudF9yZXNwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgdWlkOwogIF9fdTMyIGlkOwogIF9fdTMyIGV2ZW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzdGF0dXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBzdHJ1Y3QgcmRtYV91Y21fY29ubl9wYXJhbSBjb25uOwogIHN0cnVjdCByZG1hX3VjbV91ZF9wYXJhbSB1ZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBwYXJhbTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSB7CiAgUkRNQV9PUFRJT05fSUQgPSAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSRE1BX09QVElPTl9JQiA9IDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSB7CiAgUkRNQV9PUFRJT05fSURfVE9TID0gMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUkRNQV9PUFRJT05fSURfUkVVU0VBRERSID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUkRNQV9PUFRJT05fSURfQUZPTkxZID0gMiwKICBSRE1BX09QVElPTl9JQl9QQVRIID0gMQogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcmRtYV91Y21fc2V0X29wdGlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IG9wdHZhbDsKICBfX3UzMiBpZDsKICBfX3UzMiBsZXZlbDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgb3B0bmFtZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgb3B0bGVuOwogfTsKIHN0cnVjdCByZG1hX3VjbV9taWdyYXRlX2lkIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcmVzcG9uc2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlkOwogIF9fdTMyIGZkOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcmRtYV91Y21fbWlncmF0ZV9yZXNwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZXZlbnRzX3JlcG9ydGVkOwogfTsKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvc291bmQvYXNvdW5kLmggYi9saWJjL2tlcm5lbC91YXBpL3NvdW5kL2Fzb3VuZC5oCmluZGV4IDUwMGQ5MjQuLjlkMTg3YWEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvc291bmQvYXNvdW5kLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9hc291bmQuaApAQCAtNjcsOTIzICs2Nyw5MjUgQEAKICBTTkRSVl9IV0RFUF9JRkFDRV9IREEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX0hXREVQX0lGQUNFX1VTQl9TVFJFQU0sCi0gU05EUlZfSFdERVBfSUZBQ0VfTEFTVCA9IFNORFJWX0hXREVQX0lGQUNFX1VTQl9TVFJFQU0KKyBTTkRSVl9IV0RFUF9JRkFDRV9GV19ESUNFLAorIFNORFJWX0hXREVQX0lGQUNFX0xBU1QgPSBTTkRSVl9IV0RFUF9JRkFDRV9GV19ESUNFCiB9Owotc3RydWN0IHNuZF9od2RlcF9pbmZvIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qgc25kX2h3ZGVwX2luZm8gewogIHVuc2lnbmVkIGludCBkZXZpY2U7CiAgaW50IGNhcmQ7CiAgdW5zaWduZWQgY2hhciBpZFs2NF07Ci0gdW5zaWduZWQgY2hhciBuYW1lWzgwXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgY2hhciBuYW1lWzgwXTsKICBpbnQgaWZhY2U7CiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07CiB9Owotc3RydWN0IHNuZF9od2RlcF9kc3Bfc3RhdHVzIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMgewogIHVuc2lnbmVkIGludCB2ZXJzaW9uOwogIHVuc2lnbmVkIGNoYXIgaWRbMzJdOwogIHVuc2lnbmVkIGludCBudW1fZHNwczsKLSB1bnNpZ25lZCBpbnQgZHNwX2xvYWRlZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgaW50IGRzcF9sb2FkZWQ7CiAgdW5zaWduZWQgaW50IGNoaXBfcmVhZHk7CiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFsxNl07CiB9Owotc3RydWN0IHNuZF9od2RlcF9kc3BfaW1hZ2UgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBzbmRfaHdkZXBfZHNwX2ltYWdlIHsKICB1bnNpZ25lZCBpbnQgaW5kZXg7CiAgdW5zaWduZWQgY2hhciBuYW1lWzY0XTsKICB1bnNpZ25lZCBjaGFyIF9fdXNlciAqaW1hZ2U7Ci0gc2l6ZV90IGxlbmd0aDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc2l6ZV90IGxlbmd0aDsKICB1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhOwogfTsKICNkZWZpbmUgU05EUlZfSFdERVBfSU9DVExfUFZFUlNJT04gX0lPUiAoJ0gnLCAweDAwLCBpbnQpCi0jZGVmaW5lIFNORFJWX0hXREVQX0lPQ1RMX0lORk8gX0lPUiAoJ0gnLCAweDAxLCBzdHJ1Y3Qgc25kX2h3ZGVwX2luZm8pCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9IV0RFUF9JT0NUTF9JTkZPIF9JT1IgKCdIJywgMHgwMSwgc3RydWN0IHNuZF9od2RlcF9pbmZvKQogI2RlZmluZSBTTkRSVl9IV0RFUF9JT0NUTF9EU1BfU1RBVFVTIF9JT1IoJ0gnLCAweDAyLCBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMpCiAjZGVmaW5lIFNORFJWX0hXREVQX0lPQ1RMX0RTUF9MT0FEIF9JT1coJ0gnLCAweDAzLCBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9pbWFnZSkKICNkZWZpbmUgU05EUlZfUENNX1ZFUlNJT04gU05EUlZfUFJPVE9DT0xfVkVSU0lPTigyLCAwLCAxMSkKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBzbmRfcGNtX3VmcmFtZXNfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgc25kX3BjbV91ZnJhbWVzX3Q7CiB0eXBlZGVmIHNpZ25lZCBsb25nIHNuZF9wY21fc2ZyYW1lc190OwogZW51bSB7CiAgU05EUlZfUENNX0NMQVNTX0dFTkVSSUMgPSAwLAotIFNORFJWX1BDTV9DTEFTU19NVUxUSSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgU05EUlZfUENNX0NMQVNTX01VTFRJLAogIFNORFJWX1BDTV9DTEFTU19NT0RFTSwKICBTTkRSVl9QQ01fQ0xBU1NfRElHSVRJWkVSLAogIFNORFJWX1BDTV9DTEFTU19MQVNUID0gU05EUlZfUENNX0NMQVNTX0RJR0lUSVpFUiwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIGVudW0gewogIFNORFJWX1BDTV9TVUJDTEFTU19HRU5FUklDX01JWCA9IDAsCiAgU05EUlZfUENNX1NVQkNMQVNTX01VTFRJX01JWCwKLSBTTkRSVl9QQ01fU1VCQ0xBU1NfTEFTVCA9IFNORFJWX1BDTV9TVUJDTEFTU19NVUxUSV9NSVgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFNORFJWX1BDTV9TVUJDTEFTU19MQVNUID0gU05EUlZfUENNX1NVQkNMQVNTX01VTFRJX01JWCwKIH07CiBlbnVtIHsKICBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLID0gMCwKLSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKICBTTkRSVl9QQ01fU1RSRUFNX0xBU1QgPSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCiB9OwogdHlwZWRlZiBpbnQgX19iaXR3aXNlIHNuZF9wY21fYWNjZXNzX3Q7Ci0jZGVmaW5lIFNORFJWX1BDTV9BQ0NFU1NfTU1BUF9JTlRFUkxFQVZFRCAoKF9fZm9yY2Ugc25kX3BjbV9hY2Nlc3NfdCkgMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9BQ0NFU1NfTU1BUF9JTlRFUkxFQVZFRCAoKF9fZm9yY2Ugc25kX3BjbV9hY2Nlc3NfdCkgMCkKICNkZWZpbmUgU05EUlZfUENNX0FDQ0VTU19NTUFQX05PTklOVEVSTEVBVkVEICgoX19mb3JjZSBzbmRfcGNtX2FjY2Vzc190KSAxKQogI2RlZmluZSBTTkRSVl9QQ01fQUNDRVNTX01NQVBfQ09NUExFWCAoKF9fZm9yY2Ugc25kX3BjbV9hY2Nlc3NfdCkgMikKICNkZWZpbmUgU05EUlZfUENNX0FDQ0VTU19SV19JTlRFUkxFQVZFRCAoKF9fZm9yY2Ugc25kX3BjbV9hY2Nlc3NfdCkgMykKLSNkZWZpbmUgU05EUlZfUENNX0FDQ0VTU19SV19OT05JTlRFUkxFQVZFRCAoKF9fZm9yY2Ugc25kX3BjbV9hY2Nlc3NfdCkgNCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9BQ0NFU1NfUldfTk9OSU5URVJMRUFWRUQgKChfX2ZvcmNlIHNuZF9wY21fYWNjZXNzX3QpIDQpCiAjZGVmaW5lIFNORFJWX1BDTV9BQ0NFU1NfTEFTVCBTTkRSVl9QQ01fQUNDRVNTX1JXX05PTklOVEVSTEVBVkVECiB0eXBlZGVmIGludCBfX2JpdHdpc2Ugc25kX3BjbV9mb3JtYXRfdDsKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TOCAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMCkKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VOCAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTggKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDEpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAyKQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9CRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMykKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMTZfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQpCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTE2X0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMTZfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDUpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA2KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9CRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNykKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMjRfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDgpCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTI0X0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMjRfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDkpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxMCkKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMzJfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDExKQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UzMl9MRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMTIpCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTMyX0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxMykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTMyX0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxMykKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9GTE9BVF9MRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMTQpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRkxPQVRfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDE1KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUNjRfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDE2KQotI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUNjRfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDE3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9GTE9BVDY0X0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxNykKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9JRUM5NThfU1VCRlJBTUVfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDE4KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0lFQzk1OF9TVUJGUkFNRV9CRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMTkpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfTVVfTEFXICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAyMCkKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9BX0xBVyAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMjEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0FfTEFXICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAyMSkKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9JTUFfQURQQ00gKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDIyKQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX01QRUcgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDIzKQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0dTTSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMjQpCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfU1BFQ0lBTCAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMzEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1NQRUNJQUwgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDMxKQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MyNF8zTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDMyKQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MyNF8zQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDMzKQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UyNF8zTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDM0KQotI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UyNF8zQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDM1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMjRfM0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAzNSkKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAzNikKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAzNykKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMjBfM0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAzOCkKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMjBfM0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAzOSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTIwXzNCRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMzkpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzE4XzNMRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDApCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzE4XzNCRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDEpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTE4XzNMRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDIpCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTE4XzNCRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UxOF8zQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQzKQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0c3MjNfMjQgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQ0KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0c3MjNfMjRfMUIgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQ1KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0c3MjNfNDAgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQ2KQotI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0c3MjNfNDBfMUIgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQ3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9HNzIzXzQwXzFCICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA0NykKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9EU0RfVTggKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQ4KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0RTRF9VMTZfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQ5KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0xBU1QgU05EUlZfUENNX0ZPUk1BVF9EU0RfVTE2X0xFCi0jaWZkZWYgU05EUlZfTElUVExFX0VORElBTgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNpZmRlZiBTTkRSVl9MSVRUTEVfRU5ESUFOCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzE2IFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTE2IFNORFJWX1BDTV9GT1JNQVRfVTE2X0xFCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzI0IFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTI0IFNORFJWX1BDTV9GT1JNQVRfVTI0X0xFCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UyNCBTTkRSVl9QQ01fRk9STUFUX1UyNF9MRQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MzMiBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UzMiBTTkRSVl9QQ01fRk9STUFUX1UzMl9MRQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUIFNORFJWX1BDTV9GT1JNQVRfRkxPQVRfTEUKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9GTE9BVDY0IFNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NF9MRQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9GTE9BVDY0IFNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NF9MRQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0lFQzk1OF9TVUJGUkFNRSBTTkRSVl9QQ01fRk9STUFUX0lFQzk1OF9TVUJGUkFNRV9MRQogI2VuZGlmCiAjaWZkZWYgU05EUlZfQklHX0VORElBTgotI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MxNiBTTkRSVl9QQ01fRk9STUFUX1MxNl9CRQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMTYgU05EUlZfUENNX0ZPUk1BVF9TMTZfQkUKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMTYgU05EUlZfUENNX0ZPUk1BVF9VMTZfQkUKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMjQgU05EUlZfUENNX0ZPUk1BVF9TMjRfQkUKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMjQgU05EUlZfUENNX0ZPUk1BVF9VMjRfQkUKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMzIgU05EUlZfUENNX0ZPUk1BVF9TMzJfQkUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzMyIFNORFJWX1BDTV9GT1JNQVRfUzMyX0JFCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTMyIFNORFJWX1BDTV9GT1JNQVRfVTMyX0JFCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRkxPQVQgU05EUlZfUENNX0ZPUk1BVF9GTE9BVF9CRQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUNjQgU05EUlZfUENNX0ZPUk1BVF9GTE9BVDY0X0JFCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FIFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FX0JFCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0lFQzk1OF9TVUJGUkFNRSBTTkRSVl9QQ01fRk9STUFUX0lFQzk1OF9TVUJGUkFNRV9CRQogI2VuZGlmCiB0eXBlZGVmIGludCBfX2JpdHdpc2Ugc25kX3BjbV9zdWJmb3JtYXRfdDsKICNkZWZpbmUgU05EUlZfUENNX1NVQkZPUk1BVF9TVEQgKChfX2ZvcmNlIHNuZF9wY21fc3ViZm9ybWF0X3QpIDApCi0jZGVmaW5lIFNORFJWX1BDTV9TVUJGT1JNQVRfTEFTVCBTTkRSVl9QQ01fU1VCRk9STUFUX1NURAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX1NVQkZPUk1BVF9MQVNUIFNORFJWX1BDTV9TVUJGT1JNQVRfU1RECiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX01NQVAgMHgwMDAwMDAwMQogI2RlZmluZSBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIDB4MDAwMDAwMDIKICNkZWZpbmUgU05EUlZfUENNX0lORk9fRE9VQkxFIDB4MDAwMDAwMDQKLSNkZWZpbmUgU05EUlZfUENNX0lORk9fQkFUQ0ggMHgwMDAwMDAxMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lORk9fQkFUQ0ggMHgwMDAwMDAxMAogI2RlZmluZSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCAweDAwMDAwMTAwCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX05PTklOVEVSTEVBVkVEIDB4MDAwMDAyMDAKICNkZWZpbmUgU05EUlZfUENNX0lORk9fQ09NUExFWCAweDAwMDAwNDAwCi0jZGVmaW5lIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIDB4MDAwMTAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIDB4MDAwMTAwMDAKICNkZWZpbmUgU05EUlZfUENNX0lORk9fT1ZFUlJBTkdFIDB4MDAwMjAwMDAKICNkZWZpbmUgU05EUlZfUENNX0lORk9fUkVTVU1FIDB4MDAwNDAwMDAKICNkZWZpbmUgU05EUlZfUENNX0lORk9fUEFVU0UgMHgwMDA4MDAwMAotI2RlZmluZSBTTkRSVl9QQ01fSU5GT19IQUxGX0RVUExFWCAweDAwMTAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fSU5GT19IQUxGX0RVUExFWCAweDAwMTAwMDAwCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0pPSU5UX0RVUExFWCAweDAwMjAwMDAwCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQgMHgwMDQwMDAwMAogI2RlZmluZSBTTkRSVl9QQ01fSU5GT19OT19QRVJJT0RfV0FLRVVQIDB4MDA4MDAwMDAKLSNkZWZpbmUgU05EUlZfUENNX0lORk9fSEFTX1dBTExfQ0xPQ0sgMHgwMTAwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lORk9fSEFTX1dBTExfQ0xPQ0sgMHgwMTAwMDAwMAogI2RlZmluZSBTTkRSVl9QQ01fSU5GT19GSUZPX0lOX0ZSQU1FUyAweDgwMDAwMDAwCiB0eXBlZGVmIGludCBfX2JpdHdpc2Ugc25kX3BjbV9zdGF0ZV90OwogI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfT1BFTiAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSAwKQotI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfU0VUVVAgKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9TVEFURV9TRVRVUCAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSAxKQogI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfUFJFUEFSRUQgKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgMikKICNkZWZpbmUgU05EUlZfUENNX1NUQVRFX1JVTk5JTkcgKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgMykKICNkZWZpbmUgU05EUlZfUENNX1NUQVRFX1hSVU4gKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgNCkKLSNkZWZpbmUgU05EUlZfUENNX1NUQVRFX0RSQUlOSU5HICgoX19mb3JjZSBzbmRfcGNtX3N0YXRlX3QpIDUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfRFJBSU5JTkcgKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgNSkKICNkZWZpbmUgU05EUlZfUENNX1NUQVRFX1BBVVNFRCAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSA2KQogI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEICgoX19mb3JjZSBzbmRfcGNtX3N0YXRlX3QpIDcpCiAjZGVmaW5lIFNORFJWX1BDTV9TVEFURV9ESVNDT05ORUNURUQgKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgOCkKLSNkZWZpbmUgU05EUlZfUENNX1NUQVRFX0xBU1QgU05EUlZfUENNX1NUQVRFX0RJU0NPTk5FQ1RFRAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX1NUQVRFX0xBU1QgU05EUlZfUENNX1NUQVRFX0RJU0NPTk5FQ1RFRAogZW51bSB7CiAgU05EUlZfUENNX01NQVBfT0ZGU0VUX0RBVEEgPSAweDAwMDAwMDAwLAogIFNORFJWX1BDTV9NTUFQX09GRlNFVF9TVEFUVVMgPSAweDgwMDAwMDAwLAotIFNORFJWX1BDTV9NTUFQX09GRlNFVF9DT05UUk9MID0gMHg4MTAwMDAwMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgU05EUlZfUENNX01NQVBfT0ZGU0VUX0NPTlRST0wgPSAweDgxMDAwMDAwLAogfTsKIHVuaW9uIHNuZF9wY21fc3luY19pZCB7CiAgdW5zaWduZWQgY2hhciBpZFsxNl07Ci0gdW5zaWduZWQgc2hvcnQgaWQxNls4XTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgc2hvcnQgaWQxNls4XTsKICB1bnNpZ25lZCBpbnQgaWQzMls0XTsKIH07CiBzdHJ1Y3Qgc25kX3BjbV9pbmZvIHsKLSB1bnNpZ25lZCBpbnQgZGV2aWNlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgZGV2aWNlOwogIHVuc2lnbmVkIGludCBzdWJkZXZpY2U7CiAgaW50IHN0cmVhbTsKICBpbnQgY2FyZDsKLSB1bnNpZ25lZCBjaGFyIGlkWzY0XTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgY2hhciBpZFs2NF07CiAgdW5zaWduZWQgY2hhciBuYW1lWzgwXTsKICB1bnNpZ25lZCBjaGFyIHN1Ym5hbWVbMzJdOwogIGludCBkZXZfY2xhc3M7Ci0gaW50IGRldl9zdWJjbGFzczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgaW50IGRldl9zdWJjbGFzczsKICB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlc19jb3VudDsKICB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlc19hdmFpbDsKICB1bmlvbiBzbmRfcGNtX3N5bmNfaWQgc3luYzsKLSB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07CiB9OwogdHlwZWRlZiBpbnQgc25kX3BjbV9od19wYXJhbV90OwogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fQUNDRVNTIDAKLSNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFUIDEKICNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX1NVQkZPUk1BVCAyCiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9GSVJTVF9NQVNLIFNORFJWX1BDTV9IV19QQVJBTV9BQ0NFU1MKICNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0xBU1RfTUFTSyBTTkRSVl9QQ01fSFdfUEFSQU1fU1VCRk9STUFUCi0jZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9TQU1QTEVfQklUUyA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fU0FNUExFX0JJVFMgOAogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fRlJBTUVfQklUUyA5CiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUyAxMAogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSAxMQotI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1RJTUUgMTIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfVElNRSAxMgogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1NJWkUgMTMKICNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9CWVRFUyAxNAogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUyAxNQotI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX1RJTUUgMTYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfVElNRSAxNgogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX1NJWkUgMTcKICNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9CWVRFUyAxOAogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fVElDS19USU1FIDE5Ci0jZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9GSVJTVF9JTlRFUlZBTCBTTkRSVl9QQ01fSFdfUEFSQU1fU0FNUExFX0JJVFMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9GSVJTVF9JTlRFUlZBTCBTTkRSVl9QQ01fSFdfUEFSQU1fU0FNUExFX0JJVFMKICNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0xBU1RfSU5URVJWQUwgU05EUlZfUENNX0hXX1BBUkFNX1RJQ0tfVElNRQogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1TX05PUkVTQU1QTEUgKDE8PDApCiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTVNfRVhQT1JUX0JVRkZFUiAoMTw8MSkKLSNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNU19OT19QRVJJT0RfV0FLRVVQICgxPDwyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNU19OT19QRVJJT0RfV0FLRVVQICgxPDwyKQogc3RydWN0IHNuZF9pbnRlcnZhbCB7CiAgdW5zaWduZWQgaW50IG1pbiwgbWF4OwogIHVuc2lnbmVkIGludCBvcGVubWluOjEsCi0gb3Blbm1heDoxLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBvcGVubWF4OjEsCiAgaW50ZWdlcjoxLAogIGVtcHR5OjE7CiB9OwotI2RlZmluZSBTTkRSVl9NQVNLX01BWCAyNTYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX01BU0tfTUFYIDI1Ngogc3RydWN0IHNuZF9tYXNrIHsKICBfX3UzMiBiaXRzWyhTTkRSVl9NQVNLX01BWCszMSkvMzJdOwogfTsKLXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHNuZF9wY21faHdfcGFyYW1zIHsKICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAgc3RydWN0IHNuZF9tYXNrIG1hc2tzW1NORFJWX1BDTV9IV19QQVJBTV9MQVNUX01BU0sgLQogIFNORFJWX1BDTV9IV19QQVJBTV9GSVJTVF9NQVNLICsgMV07Ci0gc3RydWN0IHNuZF9tYXNrIG1yZXNbNV07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBzbmRfbWFzayBtcmVzWzVdOwogIHN0cnVjdCBzbmRfaW50ZXJ2YWwgaW50ZXJ2YWxzW1NORFJWX1BDTV9IV19QQVJBTV9MQVNUX0lOVEVSVkFMIC0KICBTTkRSVl9QQ01fSFdfUEFSQU1fRklSU1RfSU5URVJWQUwgKyAxXTsKICBzdHJ1Y3Qgc25kX2ludGVydmFsIGlyZXNbOV07Ci0gdW5zaWduZWQgaW50IHJtYXNrOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgcm1hc2s7CiAgdW5zaWduZWQgaW50IGNtYXNrOwogIHVuc2lnbmVkIGludCBpbmZvOwogIHVuc2lnbmVkIGludCBtc2JpdHM7Ci0gdW5zaWduZWQgaW50IHJhdGVfbnVtOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgcmF0ZV9udW07CiAgdW5zaWduZWQgaW50IHJhdGVfZGVuOwogIHNuZF9wY21fdWZyYW1lc190IGZpZm9fc2l6ZTsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIGVudW0gewogIFNORFJWX1BDTV9UU1RBTVBfTk9ORSA9IDAsCiAgU05EUlZfUENNX1RTVEFNUF9FTkFCTEUsCi0gU05EUlZfUENNX1RTVEFNUF9MQVNUID0gU05EUlZfUENNX1RTVEFNUF9FTkFCTEUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFNORFJWX1BDTV9UU1RBTVBfTEFTVCA9IFNORFJWX1BDTV9UU1RBTVBfRU5BQkxFLAogfTsKIHN0cnVjdCBzbmRfcGNtX3N3X3BhcmFtcyB7CiAgaW50IHRzdGFtcF9tb2RlOwotIHVuc2lnbmVkIGludCBwZXJpb2Rfc3RlcDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgaW50IHBlcmlvZF9zdGVwOwogIHVuc2lnbmVkIGludCBzbGVlcF9taW47CiAgc25kX3BjbV91ZnJhbWVzX3QgYXZhaWxfbWluOwogIHNuZF9wY21fdWZyYW1lc190IHhmZXJfYWxpZ247Ci0gc25kX3BjbV91ZnJhbWVzX3Qgc3RhcnRfdGhyZXNob2xkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzbmRfcGNtX3VmcmFtZXNfdCBzdGFydF90aHJlc2hvbGQ7CiAgc25kX3BjbV91ZnJhbWVzX3Qgc3RvcF90aHJlc2hvbGQ7CiAgc25kX3BjbV91ZnJhbWVzX3Qgc2lsZW5jZV90aHJlc2hvbGQ7CiAgc25kX3BjbV91ZnJhbWVzX3Qgc2lsZW5jZV9zaXplOwotIHNuZF9wY21fdWZyYW1lc190IGJvdW5kYXJ5OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzbmRfcGNtX3VmcmFtZXNfdCBib3VuZGFyeTsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsKIH07CiBzdHJ1Y3Qgc25kX3BjbV9jaGFubmVsX2luZm8gewotIHVuc2lnbmVkIGludCBjaGFubmVsOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgY2hhbm5lbDsKICBfX2tlcm5lbF9vZmZfdCBvZmZzZXQ7CiAgdW5zaWduZWQgaW50IGZpcnN0OwogIHVuc2lnbmVkIGludCBzdGVwOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IHNuZF9wY21fc3RhdHVzIHsKICBzbmRfcGNtX3N0YXRlX3Qgc3RhdGU7CiAgc3RydWN0IHRpbWVzcGVjIHRyaWdnZXJfdHN0YW1wOwotIHN0cnVjdCB0aW1lc3BlYyB0c3RhbXA7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB0aW1lc3BlYyB0c3RhbXA7CiAgc25kX3BjbV91ZnJhbWVzX3QgYXBwbF9wdHI7CiAgc25kX3BjbV91ZnJhbWVzX3QgaHdfcHRyOwogIHNuZF9wY21fc2ZyYW1lc190IGRlbGF5OwotIHNuZF9wY21fdWZyYW1lc190IGF2YWlsOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzbmRfcGNtX3VmcmFtZXNfdCBhdmFpbDsKICBzbmRfcGNtX3VmcmFtZXNfdCBhdmFpbF9tYXg7CiAgc25kX3BjbV91ZnJhbWVzX3Qgb3ZlcnJhbmdlOwogIHNuZF9wY21fc3RhdGVfdCBzdXNwZW5kZWRfc3RhdGU7Ci0gX191MzIgcmVzZXJ2ZWRfYWxpZ25tZW50OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiByZXNlcnZlZF9hbGlnbm1lbnQ7CiAgc3RydWN0IHRpbWVzcGVjIGF1ZGlvX3RzdGFtcDsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzU2LXNpemVvZihzdHJ1Y3QgdGltZXNwZWMpXTsKIH07Ci1zdHJ1Y3Qgc25kX3BjbV9tbWFwX3N0YXR1cyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHNuZF9wY21fbW1hcF9zdGF0dXMgewogIHNuZF9wY21fc3RhdGVfdCBzdGF0ZTsKICBpbnQgcGFkMTsKICBzbmRfcGNtX3VmcmFtZXNfdCBod19wdHI7Ci0gc3RydWN0IHRpbWVzcGVjIHRzdGFtcDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHRpbWVzcGVjIHRzdGFtcDsKICBzbmRfcGNtX3N0YXRlX3Qgc3VzcGVuZGVkX3N0YXRlOwogIHN0cnVjdCB0aW1lc3BlYyBhdWRpb190c3RhbXA7CiB9Owotc3RydWN0IHNuZF9wY21fbW1hcF9jb250cm9sIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qgc25kX3BjbV9tbWFwX2NvbnRyb2wgewogIHNuZF9wY21fdWZyYW1lc190IGFwcGxfcHRyOwogIHNuZF9wY21fdWZyYW1lc190IGF2YWlsX21pbjsKIH07Ci0jZGVmaW5lIFNORFJWX1BDTV9TWU5DX1BUUl9IV1NZTkMgKDE8PDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fU1lOQ19QVFJfSFdTWU5DICgxPDwwKQogI2RlZmluZSBTTkRSVl9QQ01fU1lOQ19QVFJfQVBQTCAoMTw8MSkKICNkZWZpbmUgU05EUlZfUENNX1NZTkNfUFRSX0FWQUlMX01JTiAoMTw8MikKIHN0cnVjdCBzbmRfcGNtX3N5bmNfcHRyIHsKLSB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCBmbGFnczsKICB1bmlvbiB7CiAgc3RydWN0IHNuZF9wY21fbW1hcF9zdGF0dXMgc3RhdHVzOwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwotIH0gczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfSBzOwogIHVuaW9uIHsKICBzdHJ1Y3Qgc25kX3BjbV9tbWFwX2NvbnRyb2wgY29udHJvbDsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsKLSB9IGM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIH0gYzsKIH07CiBzdHJ1Y3Qgc25kX3hmZXJpIHsKICBzbmRfcGNtX3NmcmFtZXNfdCByZXN1bHQ7Ci0gdm9pZCBfX3VzZXIgKmJ1ZjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdm9pZCBfX3VzZXIgKmJ1ZjsKICBzbmRfcGNtX3VmcmFtZXNfdCBmcmFtZXM7CiB9Owogc3RydWN0IHNuZF94ZmVybiB7Ci0gc25kX3BjbV9zZnJhbWVzX3QgcmVzdWx0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzbmRfcGNtX3NmcmFtZXNfdCByZXN1bHQ7CiAgdm9pZCBfX3VzZXIgKiBfX3VzZXIgKmJ1ZnM7CiAgc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzOwogfTsKLWVudW0gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gewogIFNORFJWX1BDTV9UU1RBTVBfVFlQRV9HRVRUSU1FT0ZEQVkgPSAwLAogIFNORFJWX1BDTV9UU1RBTVBfVFlQRV9NT05PVE9OSUMsCiAgU05EUlZfUENNX1RTVEFNUF9UWVBFX0xBU1QgPSBTTkRSVl9QQ01fVFNUQU1QX1RZUEVfTU9OT1RPTklDLAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogZW51bSB7CiAgU05EUlZfQ0hNQVBfVU5LTk9XTiA9IDAsCiAgU05EUlZfQ0hNQVBfTkEsCi0gU05EUlZfQ0hNQVBfTU9OTywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgU05EUlZfQ0hNQVBfTU9OTywKICBTTkRSVl9DSE1BUF9GTCwKICBTTkRSVl9DSE1BUF9GUiwKICBTTkRSVl9DSE1BUF9STCwKLSBTTkRSVl9DSE1BUF9SUiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgU05EUlZfQ0hNQVBfUlIsCiAgU05EUlZfQ0hNQVBfRkMsCiAgU05EUlZfQ0hNQVBfTEZFLAogIFNORFJWX0NITUFQX1NMLAotIFNORFJWX0NITUFQX1NSLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9DSE1BUF9TUiwKICBTTkRSVl9DSE1BUF9SQywKICBTTkRSVl9DSE1BUF9GTEMsCiAgU05EUlZfQ0hNQVBfRlJDLAotIFNORFJWX0NITUFQX1JMQywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgU05EUlZfQ0hNQVBfUkxDLAogIFNORFJWX0NITUFQX1JSQywKICBTTkRSVl9DSE1BUF9GTFcsCiAgU05EUlZfQ0hNQVBfRlJXLAotIFNORFJWX0NITUFQX0ZMSCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgU05EUlZfQ0hNQVBfRkxILAogIFNORFJWX0NITUFQX0ZDSCwKICBTTkRSVl9DSE1BUF9GUkgsCiAgU05EUlZfQ0hNQVBfVEMsCi0gU05EUlZfQ0hNQVBfVEZMLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9DSE1BUF9URkwsCiAgU05EUlZfQ0hNQVBfVEZSLAogIFNORFJWX0NITUFQX1RGQywKICBTTkRSVl9DSE1BUF9UUkwsCi0gU05EUlZfQ0hNQVBfVFJSLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9DSE1BUF9UUlIsCiAgU05EUlZfQ0hNQVBfVFJDLAogIFNORFJWX0NITUFQX1RGTEMsCiAgU05EUlZfQ0hNQVBfVEZSQywKLSBTTkRSVl9DSE1BUF9UU0wsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFNORFJWX0NITUFQX1RTTCwKICBTTkRSVl9DSE1BUF9UU1IsCiAgU05EUlZfQ0hNQVBfTExGRSwKICBTTkRSVl9DSE1BUF9STEZFLAotIFNORFJWX0NITUFQX0JDLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9DSE1BUF9CQywKICBTTkRSVl9DSE1BUF9CTEMsCiAgU05EUlZfQ0hNQVBfQlJDLAogIFNORFJWX0NITUFQX0xBU1QgPSBTTkRSVl9DSE1BUF9CUkMsCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIFNORFJWX0NITUFQX1BPU0lUSU9OX01BU0sgMHhmZmZmCiAjZGVmaW5lIFNORFJWX0NITUFQX1BIQVNFX0lOVkVSU0UgKDB4MDEgPDwgMTYpCiAjZGVmaW5lIFNORFJWX0NITUFQX0RSSVZFUl9TUEVDICgweDAyIDw8IDE2KQotI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUFZFUlNJT04gX0lPUignQScsIDB4MDAsIGludCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9QVkVSU0lPTiBfSU9SKCdBJywgMHgwMCwgaW50KQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSU5GTyBfSU9SKCdBJywgMHgwMSwgc3RydWN0IHNuZF9wY21faW5mbykKICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1RTVEFNUCBfSU9XKCdBJywgMHgwMiwgaW50KQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfVFRTVEFNUCBfSU9XKCdBJywgMHgwMywgaW50KQotI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSFdfUkVGSU5FIF9JT1dSKCdBJywgMHgxMCwgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0hXX1JFRklORSBfSU9XUignQScsIDB4MTAsIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcykKICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0hXX1BBUkFNUyBfSU9XUignQScsIDB4MTEsIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcykKICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0hXX0ZSRUUgX0lPKCdBJywgMHgxMikKICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1NXX1BBUkFNUyBfSU9XUignQScsIDB4MTMsIHN0cnVjdCBzbmRfcGNtX3N3X3BhcmFtcykKLSNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1NUQVRVUyBfSU9SKCdBJywgMHgyMCwgc3RydWN0IHNuZF9wY21fc3RhdHVzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1NUQVRVUyBfSU9SKCdBJywgMHgyMCwgc3RydWN0IHNuZF9wY21fc3RhdHVzKQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfREVMQVkgX0lPUignQScsIDB4MjEsIHNuZF9wY21fc2ZyYW1lc190KQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSFdTWU5DIF9JTygnQScsIDB4MjIpCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9TWU5DX1BUUiBfSU9XUignQScsIDB4MjMsIHN0cnVjdCBzbmRfcGNtX3N5bmNfcHRyKQotI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfQ0hBTk5FTF9JTkZPIF9JT1IoJ0EnLCAweDMyLCBzdHJ1Y3Qgc25kX3BjbV9jaGFubmVsX2luZm8pCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfQ0hBTk5FTF9JTkZPIF9JT1IoJ0EnLCAweDMyLCBzdHJ1Y3Qgc25kX3BjbV9jaGFubmVsX2luZm8pCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9QUkVQQVJFIF9JTygnQScsIDB4NDApCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRVNFVCBfSU8oJ0EnLCAweDQxKQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1RBUlQgX0lPKCdBJywgMHg0MikKLSNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0RST1AgX0lPKCdBJywgMHg0MykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9EUk9QIF9JTygnQScsIDB4NDMpCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9EUkFJTiBfSU8oJ0EnLCAweDQ0KQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUEFVU0UgX0lPVygnQScsIDB4NDUsIGludCkKICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFV0lORCBfSU9XKCdBJywgMHg0Niwgc25kX3BjbV91ZnJhbWVzX3QpCi0jZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRVNVTUUgX0lPKCdBJywgMHg0NykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRVNVTUUgX0lPKCdBJywgMHg0NykKICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1hSVU4gX0lPKCdBJywgMHg0OCkKICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0ZPUldBUkQgX0lPVygnQScsIDB4NDksIHNuZF9wY21fdWZyYW1lc190KQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfV1JJVEVJX0ZSQU1FUyBfSU9XKCdBJywgMHg1MCwgc3RydWN0IHNuZF94ZmVyaSkKLSNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFQURJX0ZSQU1FUyBfSU9SKCdBJywgMHg1MSwgc3RydWN0IHNuZF94ZmVyaSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRUFESV9GUkFNRVMgX0lPUignQScsIDB4NTEsIHN0cnVjdCBzbmRfeGZlcmkpCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9XUklURU5fRlJBTUVTIF9JT1coJ0EnLCAweDUyLCBzdHJ1Y3Qgc25kX3hmZXJuKQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVBRE5fRlJBTUVTIF9JT1IoJ0EnLCAweDUzLCBzdHJ1Y3Qgc25kX3hmZXJuKQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfTElOSyBfSU9XKCdBJywgMHg2MCwgaW50KQotI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfVU5MSU5LIF9JTygnQScsIDB4NjEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfVU5MSU5LIF9JTygnQScsIDB4NjEpCiAjZGVmaW5lIFNORFJWX1JBV01JRElfVkVSU0lPTiBTTkRSVl9QUk9UT0NPTF9WRVJTSU9OKDIsIDAsIDApCiBlbnVtIHsKICBTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVQgPSAwLAotIFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCwKICBTTkRSVl9SQVdNSURJX1NUUkVBTV9MQVNUID0gU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCiB9OwogI2RlZmluZSBTTkRSVl9SQVdNSURJX0lORk9fT1VUUFVUIDB4MDAwMDAwMDEKLSNkZWZpbmUgU05EUlZfUkFXTUlESV9JTkZPX0lOUFVUIDB4MDAwMDAwMDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1JBV01JRElfSU5GT19JTlBVVCAweDAwMDAwMDAyCiAjZGVmaW5lIFNORFJWX1JBV01JRElfSU5GT19EVVBMRVggMHgwMDAwMDAwNAogc3RydWN0IHNuZF9yYXdtaWRpX2luZm8gewogIHVuc2lnbmVkIGludCBkZXZpY2U7Ci0gdW5zaWduZWQgaW50IHN1YmRldmljZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgaW50IHN1YmRldmljZTsKICBpbnQgc3RyZWFtOwogIGludCBjYXJkOwogIHVuc2lnbmVkIGludCBmbGFnczsKLSB1bnNpZ25lZCBjaGFyIGlkWzY0XTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgY2hhciBpZFs2NF07CiAgdW5zaWduZWQgY2hhciBuYW1lWzgwXTsKICB1bnNpZ25lZCBjaGFyIHN1Ym5hbWVbMzJdOwogIHVuc2lnbmVkIGludCBzdWJkZXZpY2VzX2NvdW50OwotIHVuc2lnbmVkIGludCBzdWJkZXZpY2VzX2F2YWlsOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlc19hdmFpbDsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsKIH07CiBzdHJ1Y3Qgc25kX3Jhd21pZGlfcGFyYW1zIHsKLSBpbnQgc3RyZWFtOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBpbnQgc3RyZWFtOwogIHNpemVfdCBidWZmZXJfc2l6ZTsKICBzaXplX3QgYXZhaWxfbWluOwogIHVuc2lnbmVkIGludCBub19hY3RpdmVfc2Vuc2luZzogMTsKLSB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzE2XTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgY2hhciByZXNlcnZlZFsxNl07CiB9Owogc3RydWN0IHNuZF9yYXdtaWRpX3N0YXR1cyB7CiAgaW50IHN0cmVhbTsKLSBzdHJ1Y3QgdGltZXNwZWMgdHN0YW1wOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgdGltZXNwZWMgdHN0YW1wOwogIHNpemVfdCBhdmFpbDsKICBzaXplX3QgeHJ1bnM7CiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFsxNl07Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfUFZFUlNJT04gX0lPUignVycsIDB4MDAsIGludCkKICNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9JTkZPIF9JT1IoJ1cnLCAweDAxLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfaW5mbykKICNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9QQVJBTVMgX0lPV1IoJ1cnLCAweDEwLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfcGFyYW1zKQotI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX1NUQVRVUyBfSU9XUignVycsIDB4MjAsIHN0cnVjdCBzbmRfcmF3bWlkaV9zdGF0dXMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX1NUQVRVUyBfSU9XUignVycsIDB4MjAsIHN0cnVjdCBzbmRfcmF3bWlkaV9zdGF0dXMpCiAjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfRFJPUCBfSU9XKCdXJywgMHgzMCwgaW50KQogI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX0RSQUlOIF9JT1coJ1cnLCAweDMxLCBpbnQpCiAjZGVmaW5lIFNORFJWX1RJTUVSX1ZFUlNJT04gU05EUlZfUFJPVE9DT0xfVkVSU0lPTigyLCAwLCA2KQotZW51bSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CiAgU05EUlZfVElNRVJfQ0xBU1NfTk9ORSA9IC0xLAogIFNORFJWX1RJTUVSX0NMQVNTX1NMQVZFID0gMCwKICBTTkRSVl9USU1FUl9DTEFTU19HTE9CQUwsCi0gU05EUlZfVElNRVJfQ0xBU1NfQ0FSRCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgU05EUlZfVElNRVJfQ0xBU1NfQ0FSRCwKICBTTkRSVl9USU1FUl9DTEFTU19QQ00sCiAgU05EUlZfVElNRVJfQ0xBU1NfTEFTVCA9IFNORFJWX1RJTUVSX0NMQVNTX1BDTSwKIH07Ci1lbnVtIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHsKICBTTkRSVl9USU1FUl9TQ0xBU1NfTk9ORSA9IDAsCiAgU05EUlZfVElNRVJfU0NMQVNTX0FQUExJQ0FUSU9OLAogIFNORFJWX1RJTUVSX1NDTEFTU19TRVFVRU5DRVIsCi0gU05EUlZfVElNRVJfU0NMQVNTX09TU19TRVFVRU5DRVIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFNORFJWX1RJTUVSX1NDTEFTU19PU1NfU0VRVUVOQ0VSLAogIFNORFJWX1RJTUVSX1NDTEFTU19MQVNUID0gU05EUlZfVElNRVJfU0NMQVNTX09TU19TRVFVRU5DRVIsCiB9OwogI2RlZmluZSBTTkRSVl9USU1FUl9HTE9CQUxfU1lTVEVNIDAKLSNkZWZpbmUgU05EUlZfVElNRVJfR0xPQkFMX1JUQyAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9USU1FUl9HTE9CQUxfUlRDIDEKICNkZWZpbmUgU05EUlZfVElNRVJfR0xPQkFMX0hQRVQgMgogI2RlZmluZSBTTkRSVl9USU1FUl9HTE9CQUxfSFJUSU1FUiAzCiAjZGVmaW5lIFNORFJWX1RJTUVSX0ZMR19TTEFWRSAoMTw8MCkKLXN0cnVjdCBzbmRfdGltZXJfaWQgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBzbmRfdGltZXJfaWQgewogIGludCBkZXZfY2xhc3M7CiAgaW50IGRldl9zY2xhc3M7CiAgaW50IGNhcmQ7Ci0gaW50IGRldmljZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgaW50IGRldmljZTsKICBpbnQgc3ViZGV2aWNlOwogfTsKIHN0cnVjdCBzbmRfdGltZXJfZ2luZm8gewotIHN0cnVjdCBzbmRfdGltZXJfaWQgdGlkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3Qgc25kX3RpbWVyX2lkIHRpZDsKICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAgaW50IGNhcmQ7CiAgdW5zaWduZWQgY2hhciBpZFs2NF07Ci0gdW5zaWduZWQgY2hhciBuYW1lWzgwXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgY2hhciBuYW1lWzgwXTsKICB1bnNpZ25lZCBsb25nIHJlc2VydmVkMDsKICB1bnNpZ25lZCBsb25nIHJlc29sdXRpb247CiAgdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uX21pbjsKLSB1bnNpZ25lZCBsb25nIHJlc29sdXRpb25fbWF4OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBsb25nIHJlc29sdXRpb25fbWF4OwogIHVuc2lnbmVkIGludCBjbGllbnRzOwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMzJdOwogfTsKLXN0cnVjdCBzbmRfdGltZXJfZ3BhcmFtcyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHNuZF90aW1lcl9ncGFyYW1zIHsKICBzdHJ1Y3Qgc25kX3RpbWVyX2lkIHRpZDsKICB1bnNpZ25lZCBsb25nIHBlcmlvZF9udW07CiAgdW5zaWduZWQgbG9uZyBwZXJpb2RfZGVuOwotIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMzJdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzMyXTsKIH07CiBzdHJ1Y3Qgc25kX3RpbWVyX2dzdGF0dXMgewogIHN0cnVjdCBzbmRfdGltZXJfaWQgdGlkOwotIHVuc2lnbmVkIGxvbmcgcmVzb2x1dGlvbjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uOwogIHVuc2lnbmVkIGxvbmcgcmVzb2x1dGlvbl9udW07CiAgdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uX2RlbjsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzMyXTsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBzbmRfdGltZXJfc2VsZWN0IHsKICBzdHJ1Y3Qgc25kX3RpbWVyX2lkIGlkOwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMzJdOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IHNuZF90aW1lcl9pbmZvIHsKICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAgaW50IGNhcmQ7Ci0gdW5zaWduZWQgY2hhciBpZFs2NF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGNoYXIgaWRbNjRdOwogIHVuc2lnbmVkIGNoYXIgbmFtZVs4MF07CiAgdW5zaWduZWQgbG9uZyByZXNlcnZlZDA7CiAgdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uOwotIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsKIH07CiAjZGVmaW5lIFNORFJWX1RJTUVSX1BTRkxHX0FVVE8gKDE8PDApCiAjZGVmaW5lIFNORFJWX1RJTUVSX1BTRkxHX0VYQ0xVU0lWRSAoMTw8MSkKLSNkZWZpbmUgU05EUlZfVElNRVJfUFNGTEdfRUFSTFlfRVZFTlQgKDE8PDIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9USU1FUl9QU0ZMR19FQVJMWV9FVkVOVCAoMTw8MikKIHN0cnVjdCBzbmRfdGltZXJfcGFyYW1zIHsKICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAgdW5zaWduZWQgaW50IHRpY2tzOwotIHVuc2lnbmVkIGludCBxdWV1ZV9zaXplOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgcXVldWVfc2l6ZTsKICB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQwOwogIHVuc2lnbmVkIGludCBmaWx0ZXI7CiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFs2MF07Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3Qgc25kX3RpbWVyX3N0YXR1cyB7CiAgc3RydWN0IHRpbWVzcGVjIHRzdGFtcDsKICB1bnNpZ25lZCBpbnQgcmVzb2x1dGlvbjsKLSB1bnNpZ25lZCBpbnQgbG9zdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgaW50IGxvc3Q7CiAgdW5zaWduZWQgaW50IG92ZXJydW47CiAgdW5zaWduZWQgaW50IHF1ZXVlOwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9QVkVSU0lPTiBfSU9SKCdUJywgMHgwMCwgaW50KQogI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9ORVhUX0RFVklDRSBfSU9XUignVCcsIDB4MDEsIHN0cnVjdCBzbmRfdGltZXJfaWQpCiAjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1RSRUFEIF9JT1coJ1QnLCAweDAyLCBpbnQpCi0jZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0dJTkZPIF9JT1dSKCdUJywgMHgwMywgc3RydWN0IHNuZF90aW1lcl9naW5mbykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0dJTkZPIF9JT1dSKCdUJywgMHgwMywgc3RydWN0IHNuZF90aW1lcl9naW5mbykKICNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfR1BBUkFNUyBfSU9XKCdUJywgMHgwNCwgc3RydWN0IHNuZF90aW1lcl9ncGFyYW1zKQogI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9HU1RBVFVTIF9JT1dSKCdUJywgMHgwNSwgc3RydWN0IHNuZF90aW1lcl9nc3RhdHVzKQogI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9TRUxFQ1QgX0lPVygnVCcsIDB4MTAsIHN0cnVjdCBzbmRfdGltZXJfc2VsZWN0KQotI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9JTkZPIF9JT1IoJ1QnLCAweDExLCBzdHJ1Y3Qgc25kX3RpbWVyX2luZm8pCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9JTkZPIF9JT1IoJ1QnLCAweDExLCBzdHJ1Y3Qgc25kX3RpbWVyX2luZm8pCiAjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1BBUkFNUyBfSU9XKCdUJywgMHgxMiwgc3RydWN0IHNuZF90aW1lcl9wYXJhbXMpCiAjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1NUQVRVUyBfSU9SKCdUJywgMHgxNCwgc3RydWN0IHNuZF90aW1lcl9zdGF0dXMpCiAjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1NUQVJUIF9JTygnVCcsIDB4YTApCi0jZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1NUT1AgX0lPKCdUJywgMHhhMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1NUT1AgX0lPKCdUJywgMHhhMSkKICNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfQ09OVElOVUUgX0lPKCdUJywgMHhhMikKICNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfUEFVU0UgX0lPKCdUJywgMHhhMykKIHN0cnVjdCBzbmRfdGltZXJfcmVhZCB7Ci0gdW5zaWduZWQgaW50IHJlc29sdXRpb247CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCByZXNvbHV0aW9uOwogIHVuc2lnbmVkIGludCB0aWNrczsKIH07CiBlbnVtIHsKLSBTTkRSVl9USU1FUl9FVkVOVF9SRVNPTFVUSU9OID0gMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgU05EUlZfVElNRVJfRVZFTlRfUkVTT0xVVElPTiA9IDAsCiAgU05EUlZfVElNRVJfRVZFTlRfVElDSywKICBTTkRSVl9USU1FUl9FVkVOVF9TVEFSVCwKICBTTkRSVl9USU1FUl9FVkVOVF9TVE9QLAotIFNORFJWX1RJTUVSX0VWRU5UX0NPTlRJTlVFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9USU1FUl9FVkVOVF9DT05USU5VRSwKICBTTkRSVl9USU1FUl9FVkVOVF9QQVVTRSwKICBTTkRSVl9USU1FUl9FVkVOVF9FQVJMWSwKICBTTkRSVl9USU1FUl9FVkVOVF9TVVNQRU5ELAotIFNORFJWX1RJTUVSX0VWRU5UX1JFU1VNRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgU05EUlZfVElNRVJfRVZFTlRfUkVTVU1FLAogIFNORFJWX1RJTUVSX0VWRU5UX01TVEFSVCA9IFNORFJWX1RJTUVSX0VWRU5UX1NUQVJUICsgMTAsCiAgU05EUlZfVElNRVJfRVZFTlRfTVNUT1AgPSBTTkRSVl9USU1FUl9FVkVOVF9TVE9QICsgMTAsCiAgU05EUlZfVElNRVJfRVZFTlRfTUNPTlRJTlVFID0gU05EUlZfVElNRVJfRVZFTlRfQ09OVElOVUUgKyAxMCwKLSBTTkRSVl9USU1FUl9FVkVOVF9NUEFVU0UgPSBTTkRSVl9USU1FUl9FVkVOVF9QQVVTRSArIDEwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9USU1FUl9FVkVOVF9NUEFVU0UgPSBTTkRSVl9USU1FUl9FVkVOVF9QQVVTRSArIDEwLAogIFNORFJWX1RJTUVSX0VWRU5UX01TVVNQRU5EID0gU05EUlZfVElNRVJfRVZFTlRfU1VTUEVORCArIDEwLAogIFNORFJWX1RJTUVSX0VWRU5UX01SRVNVTUUgPSBTTkRSVl9USU1FUl9FVkVOVF9SRVNVTUUgKyAxMCwKIH07Ci1zdHJ1Y3Qgc25kX3RpbWVyX3RyZWFkIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qgc25kX3RpbWVyX3RyZWFkIHsKICBpbnQgZXZlbnQ7CiAgc3RydWN0IHRpbWVzcGVjIHRzdGFtcDsKICB1bnNpZ25lZCBpbnQgdmFsOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBTTkRSVl9DVExfVkVSU0lPTiBTTkRSVl9QUk9UT0NPTF9WRVJTSU9OKDIsIDAsIDcpCiBzdHJ1Y3Qgc25kX2N0bF9jYXJkX2luZm8gewogIGludCBjYXJkOwotIGludCBwYWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGludCBwYWQ7CiAgdW5zaWduZWQgY2hhciBpZFsxNl07CiAgdW5zaWduZWQgY2hhciBkcml2ZXJbMTZdOwogIHVuc2lnbmVkIGNoYXIgbmFtZVszMl07Ci0gdW5zaWduZWQgY2hhciBsb25nbmFtZVs4MF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGNoYXIgbG9uZ25hbWVbODBdOwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfWzE2XTsKICB1bnNpZ25lZCBjaGFyIG1peGVybmFtZVs4MF07CiAgdW5zaWduZWQgY2hhciBjb21wb25lbnRzWzEyOF07Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiB0eXBlZGVmIGludCBfX2JpdHdpc2Ugc25kX2N0bF9lbGVtX3R5cGVfdDsKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fVFlQRV9OT05FICgoX19mb3JjZSBzbmRfY3RsX2VsZW1fdHlwZV90KSAwKQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU4gKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV90eXBlX3QpIDEpCi0jZGVmaW5lIFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUiAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX3R5cGVfdCkgMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUiAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX3R5cGVfdCkgMikKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEICgoX19mb3JjZSBzbmRfY3RsX2VsZW1fdHlwZV90KSAzKQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9UWVBFX0JZVEVTICgoX19mb3JjZSBzbmRfY3RsX2VsZW1fdHlwZV90KSA0KQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9UWVBFX0lFQzk1OCAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX3R5cGVfdCkgNSkKLSNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSNjQgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV90eXBlX3QpIDYpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI2NCAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX3R5cGVfdCkgNikKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fVFlQRV9MQVNUIFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjY0CiB0eXBlZGVmIGludCBfX2JpdHdpc2Ugc25kX2N0bF9lbGVtX2lmYWNlX3Q7CiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0lGQUNFX0NBUkQgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV9pZmFjZV90KSAwKQotI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRkFDRV9IV0RFUCAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX2lmYWNlX3QpIDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRkFDRV9IV0RFUCAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX2lmYWNlX3QpIDEpCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgMikKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgMykKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUkFXTUlESSAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX2lmYWNlX3QpIDQpCi0jZGVmaW5lIFNORFJWX0NUTF9FTEVNX0lGQUNFX1RJTUVSICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgNSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0lGQUNFX1RJTUVSICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgNSkKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfU0VRVUVOQ0VSICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgNikKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTEFTVCBTTkRSVl9DVExfRUxFTV9JRkFDRV9TRVFVRU5DRVIKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQgKDE8PDApCi0jZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19XUklURSAoMTw8MSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19XUklURSAoMTw8MSkKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSAoU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUR8U05EUlZfQ1RMX0VMRU1fQUNDRVNTX1dSSVRFKQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUgKDE8PDIpCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19USU1FU1RBTVAgKDE8PDMpCi0jZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCAoMTw8NCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCAoMTw8NCkKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9XUklURSAoMTw8NSkKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEV1JJVEUgKFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRHxTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1dSSVRFKQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX0NPTU1BTkQgKDE8PDYpCi0jZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRSAoMTw8OCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRSAoMTw8OCkKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0xPQ0sgKDE8PDkpCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19PV05FUiAoMTw8MTApCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ0FMTEJBQ0sgKDE8PDI4KQotI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVVNFUiAoMTw8MjkpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVVNFUiAoMTw8MjkpCiAjZGVmaW5lIFNORFJWX0NUTF9QT1dFUl9EMCAweDAwMDAKICNkZWZpbmUgU05EUlZfQ1RMX1BPV0VSX0QxIDB4MDEwMAogI2RlZmluZSBTTkRSVl9DVExfUE9XRVJfRDIgMHgwMjAwCi0jZGVmaW5lIFNORFJWX0NUTF9QT1dFUl9EMyAweDAzMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX0NUTF9QT1dFUl9EMyAweDAzMDAKICNkZWZpbmUgU05EUlZfQ1RMX1BPV0VSX0QzaG90IChTTkRSVl9DVExfUE9XRVJfRDN8MHgwMDAwKQogI2RlZmluZSBTTkRSVl9DVExfUE9XRVJfRDNjb2xkIChTTkRSVl9DVExfUE9XRVJfRDN8MHgwMDAxKQorI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRF9OQU1FX01BWExFTiA0NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQgewogIHVuc2lnbmVkIGludCBudW1pZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc25kX2N0bF9lbGVtX2lmYWNlX3QgaWZhY2U7CiAgdW5zaWduZWQgaW50IGRldmljZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHN1YmRldmljZTsKICB1bnNpZ25lZCBjaGFyIG5hbWVbNDRdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgaW5kZXg7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzbmRfY3RsX2VsZW1fbGlzdCB7CiAgdW5zaWduZWQgaW50IG9mZnNldDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHNwYWNlOwogIHVuc2lnbmVkIGludCB1c2VkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgY291bnQ7CiAgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCBfX3VzZXIgKnBpZHM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNTBdOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gewogIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQgaWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNuZF9jdGxfZWxlbV90eXBlX3QgdHlwZTsKICB1bnNpZ25lZCBpbnQgYWNjZXNzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgY291bnQ7CiAgX19rZXJuZWxfcGlkX3Qgb3duZXI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIG1pbjsKICBsb25nIG1heDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBzdGVwOwogIH0gaW50ZWdlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICBsb25nIGxvbmcgbWluOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIGxvbmcgbWF4OwogIGxvbmcgbG9uZyBzdGVwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IGludGVnZXI2NDsKICBzdHJ1Y3QgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgaXRlbXM7CiAgdW5zaWduZWQgaW50IGl0ZW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgbmFtZVs2NF07CiAgX191NjQgbmFtZXNfcHRyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgbmFtZXNfbGVuZ3RoOwogIH0gZW51bWVyYXRlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFsxMjhdOwogIH0gdmFsdWU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICB1bnNpZ25lZCBzaG9ydCBkWzRdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCAqZF9wdHI7CiAgfSBkaW1lbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NC00KnNpemVvZih1bnNpZ25lZCBzaG9ydCldOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlIHsKICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkIGlkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgaW5kaXJlY3Q6IDE7CiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgbG9uZyB2YWx1ZVsxMjhdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nICp2YWx1ZV9wdHI7CiAgfSBpbnRlZ2VyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgbG9uZyBsb25nIHZhbHVlWzY0XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBsb25nICp2YWx1ZV9wdHI7CiAgfSBpbnRlZ2VyNjQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICB1bnNpZ25lZCBpbnQgaXRlbVsxMjhdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgKml0ZW1fcHRyOwogIH0gZW51bWVyYXRlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIHVuc2lnbmVkIGNoYXIgZGF0YVs1MTJdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyICpkYXRhX3B0cjsKICB9IGJ5dGVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc25kX2Flc19pZWM5NTggaWVjOTU4OwogIH0gdmFsdWU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB0aW1lc3BlYyB0c3RhbXA7CiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFsxMjgtc2l6ZW9mKHN0cnVjdCB0aW1lc3BlYyldOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3Qgc25kX2N0bF90bHYgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgbnVtaWQ7CiAgdW5zaWduZWQgaW50IGxlbmd0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHRsdlswXTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUFZFUlNJT04gX0lPUignVScsIDB4MDAsIGludCkKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0NBUkRfSU5GTyBfSU9SKCdVJywgMHgwMSwgc3RydWN0IHNuZF9jdGxfY2FyZF9pbmZvKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fTElTVCBfSU9XUignVScsIDB4MTAsIHN0cnVjdCBzbmRfY3RsX2VsZW1fbGlzdCkKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fSU5GTyBfSU9XUignVScsIDB4MTEsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX1JFQUQgX0lPV1IoJ1UnLCAweDEyLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlKQogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9XUklURSBfSU9XUignVScsIDB4MTMsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9MT0NLIF9JT1coJ1UnLCAweDE0LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkKQogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9VTkxPQ0sgX0lPVygnVScsIDB4MTUsIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfU1VCU0NSSUJFX0VWRU5UUyBfSU9XUignVScsIDB4MTYsIGludCkKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fQUREIF9JT1dSKCdVJywgMHgxNywgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVQTEFDRSBfSU9XUignVScsIDB4MTgsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbykKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVNT1ZFIF9JT1dSKCdVJywgMHgxOSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9UTFZfUkVBRCBfSU9XUignVScsIDB4MWEsIHN0cnVjdCBzbmRfY3RsX3RsdikKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1RMVl9XUklURSBfSU9XUignVScsIDB4MWIsIHN0cnVjdCBzbmRfY3RsX3RsdikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9UTFZfQ09NTUFORCBfSU9XUignVScsIDB4MWMsIHN0cnVjdCBzbmRfY3RsX3RsdikKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0hXREVQX05FWFRfREVWSUNFIF9JT1dSKCdVJywgMHgyMCwgaW50KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0hXREVQX0lORk8gX0lPUignVScsIDB4MjEsIHN0cnVjdCBzbmRfaHdkZXBfaW5mbykKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BDTV9ORVhUX0RFVklDRSBfSU9SKCdVJywgMHgzMCwgaW50KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BDTV9JTkZPIF9JT1dSKCdVJywgMHgzMSwgc3RydWN0IHNuZF9wY21faW5mbykKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BDTV9QUkVGRVJfU1VCREVWSUNFIF9JT1coJ1UnLCAweDMyLCBpbnQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUkFXTUlESV9ORVhUX0RFVklDRSBfSU9XUignVScsIDB4NDAsIGludCkKICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfSU5GTyBfSU9XUignVScsIDB4NDEsIHN0cnVjdCBzbmRfcmF3bWlkaV9pbmZvKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfUFJFRkVSX1NVQkRFVklDRSBfSU9XKCdVJywgMHg0MiwgaW50KQogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUE9XRVIgX0lPV1IoJ1UnLCAweGQwLCBpbnQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUE9XRVJfU1RBVEUgX0lPUignVScsIDB4ZDEsIGludCkKIGVudW0gc25kcnZfY3RsX2V2ZW50X3R5cGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTkRSVl9DVExfRVZFTlRfRUxFTSA9IDAsCiAgU05EUlZfQ1RMX0VWRU5UX0xBU1QgPSBTTkRSVl9DVExfRVZFTlRfRUxFTSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSAoMTw8MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX0lORk8gKDE8PDEpCiAjZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX0FERCAoMTw8MikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX1RMViAoMTw8MykKICNkZWZpbmUgU05EUlZfQ1RMX0VWRU5UX01BU0tfUkVNT1ZFICh+MFUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNuZF9jdGxfZXZlbnQgewogIGludCB0eXBlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IG1hc2s7CiAgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCBpZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBlbGVtOwogIHVuc2lnbmVkIGNoYXIgZGF0YThbNjBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IGRhdGE7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX05BTUVfTk9ORSAiIgogI2RlZmluZSBTTkRSVl9DVExfTkFNRV9QTEFZQkFDSyAiUGxheWJhY2sgIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX05BTUVfQ0FQVFVSRSAiQ2FwdHVyZSAiCiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9OT05FICIiCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NThfU1dJVENIICJTd2l0Y2giCiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9WT0xVTUUgIlZvbHVtZSIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9ERUZBVUxUICJEZWZhdWx0IgogI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NThfTUFTSyAiTWFzayIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9DT05fTUFTSyAiQ29uIE1hc2siCiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9QUk9fTUFTSyAiUHJvIE1hc2siCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NThfUENNX1NUUkVBTSAiUENNIFN0cmVhbSIKICNkZWZpbmUgU05EUlZfQ1RMX05BTUVfSUVDOTU4KGV4cGwsZGlyZWN0aW9uLHdoYXQpICJJRUM5NTggIiBleHBsIFNORFJWX0NUTF9OQU1FXyMjZGlyZWN0aW9uIFNORFJWX0NUTF9OQU1FX0lFQzk1OF8jI3doYXQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvc291bmQvY29tcHJlc3Nfb2ZmbG9hZC5oIGIvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9jb21wcmVzc19vZmZsb2FkLmgKaW5kZXggYzE0MWI3YS4uNWIwNjc0MSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9jb21wcmVzc19vZmZsb2FkLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9jb21wcmVzc19vZmZsb2FkLmgKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxzb3VuZC9hc291bmQuaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8c291bmQvY29tcHJlc3NfcGFyYW1zLmg+Ci0jZGVmaW5lIFNORFJWX0NPTVBSRVNTX1ZFUlNJT04gU05EUlZfUFJPVE9DT0xfVkVSU0lPTigwLCAxLCAxKQorI2RlZmluZSBTTkRSVl9DT01QUkVTU19WRVJTSU9OIFNORFJWX1BST1RPQ09MX1ZFUlNJT04oMCwgMSwgMikKIHN0cnVjdCBzbmRfY29tcHJlc3NlZF9idWZmZXIgewogIF9fdTMyIGZyYWdtZW50X3NpemU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtMzgsOCArMzgsOCBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBieXRlX29mZnNldDsKICBfX3UzMiBjb3BpZWRfdG90YWw7Ci0gc25kX3BjbV91ZnJhbWVzX3QgcGNtX2ZyYW1lczsKLSBzbmRfcGNtX3VmcmFtZXNfdCBwY21faW9fZnJhbWVzOworIF9fdTMyIHBjbV9mcmFtZXM7CisgX191MzIgcGNtX2lvX2ZyYW1lczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc2FtcGxpbmdfcmF0ZTsKIH07CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL3NvdW5kL2NvbXByZXNzX3BhcmFtcy5oIGIvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9jb21wcmVzc19wYXJhbXMuaAppbmRleCAwYmNlOWEwLi44YWEwYmZlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL3NvdW5kL2NvbXByZXNzX3BhcmFtcy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvc291bmQvY29tcHJlc3NfcGFyYW1zLmgKQEAgLTIzLDIyMSArMjMsMjIzIEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNQVhfTlVNX0NPREVDX0RFU0NSSVBUT1JTIDMyCiAjZGVmaW5lIE1BWF9OVU1fQklUUkFURVMgMzIKKyNkZWZpbmUgTUFYX05VTV9TQU1QTEVfUkFURVMgMzIKICNkZWZpbmUgU05EX0FVRElPQ09ERUNfUENNICgoX191MzIpIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFNORF9BVURJT0NPREVDX01QMyAoKF9fdTMyKSAweDAwMDAwMDAyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPQ09ERUNfTVAzICgoX191MzIpIDB4MDAwMDAwMDIpCiAjZGVmaW5lIFNORF9BVURJT0NPREVDX0FNUiAoKF9fdTMyKSAweDAwMDAwMDAzKQogI2RlZmluZSBTTkRfQVVESU9DT0RFQ19BTVJXQiAoKF9fdTMyKSAweDAwMDAwMDA0KQogI2RlZmluZSBTTkRfQVVESU9DT0RFQ19BTVJXQlBMVVMgKChfX3UzMikgMHgwMDAwMDAwNSkKLSNkZWZpbmUgU05EX0FVRElPQ09ERUNfQUFDICgoX191MzIpIDB4MDAwMDAwMDYpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9DT0RFQ19BQUMgKChfX3UzMikgMHgwMDAwMDAwNikKICNkZWZpbmUgU05EX0FVRElPQ09ERUNfV01BICgoX191MzIpIDB4MDAwMDAwMDcpCiAjZGVmaW5lIFNORF9BVURJT0NPREVDX1JFQUwgKChfX3UzMikgMHgwMDAwMDAwOCkKICNkZWZpbmUgU05EX0FVRElPQ09ERUNfVk9SQklTICgoX191MzIpIDB4MDAwMDAwMDkpCi0jZGVmaW5lIFNORF9BVURJT0NPREVDX0ZMQUMgKChfX3UzMikgMHgwMDAwMDAwQSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT0NPREVDX0ZMQUMgKChfX3UzMikgMHgwMDAwMDAwQSkKICNkZWZpbmUgU05EX0FVRElPQ09ERUNfSUVDNjE5MzcgKChfX3UzMikgMHgwMDAwMDAwQikKICNkZWZpbmUgU05EX0FVRElPQ09ERUNfRzcyM18xICgoX191MzIpIDB4MDAwMDAwMEMpCiAjZGVmaW5lIFNORF9BVURJT0NPREVDX0c3MjkgKChfX3UzMikgMHgwMDAwMDAwRCkKLSNkZWZpbmUgU05EX0FVRElPQ09ERUNfTUFYIFNORF9BVURJT0NPREVDX0c3MjkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT0NPREVDX01BWCBTTkRfQVVESU9DT0RFQ19HNzI5CiAjZGVmaW5lIFNORF9BVURJT1BST0ZJTEVfUENNICgoX191MzIpIDB4MDAwMDAwMDEpCiAjZGVmaW5lIFNORF9BVURJT0NIQU5NT0RFX01QM19NT05PICgoX191MzIpIDB4MDAwMDAwMDEpCiAjZGVmaW5lIFNORF9BVURJT0NIQU5NT0RFX01QM19TVEVSRU8gKChfX3UzMikgMHgwMDAwMDAwMikKLSNkZWZpbmUgU05EX0FVRElPQ0hBTk1PREVfTVAzX0pPSU5UU1RFUkVPICgoX191MzIpIDB4MDAwMDAwMDQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9DSEFOTU9ERV9NUDNfSk9JTlRTVEVSRU8gKChfX3UzMikgMHgwMDAwMDAwNCkKICNkZWZpbmUgU05EX0FVRElPQ0hBTk1PREVfTVAzX0RVQUwgKChfX3UzMikgMHgwMDAwMDAwOCkKICNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9BTVIgKChfX3UzMikgMHgwMDAwMDAwMSkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9BTVJfRFRYX09GRiAoKF9fdTMyKSAweDAwMDAwMDAxKQotI2RlZmluZSBTTkRfQVVESU9NT0RFX0FNUl9WQUQxICgoX191MzIpIDB4MDAwMDAwMDIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9NT0RFX0FNUl9WQUQxICgoX191MzIpIDB4MDAwMDAwMDIpCiAjZGVmaW5lIFNORF9BVURJT01PREVfQU1SX1ZBRDIgKChfX3UzMikgMHgwMDAwMDAwNCkKICNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX1VOREVGSU5FRCAoKF9fdTMyKSAweDAwMDAwMDAwKQogI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfQ09ORk9STUFOQ0UgKChfX3UzMikgMHgwMDAwMDAwMSkKLSNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX0lGMSAoKF9fdTMyKSAweDAwMDAwMDAyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX0lGMSAoKF9fdTMyKSAweDAwMDAwMDAyKQogI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfSUYyICgoX191MzIpIDB4MDAwMDAwMDQpCiAjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9GU0YgKChfX3UzMikgMHgwMDAwMDAwOCkKICNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX1JUUFBBWUxPQUQgKChfX3UzMikgMHgwMDAwMDAxMCkKLSNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX0lUVSAoKF9fdTMyKSAweDAwMDAwMDIwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX0lUVSAoKF9fdTMyKSAweDAwMDAwMDIwKQogI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX0FNUldCICgoX191MzIpIDB4MDAwMDAwMDEpCiAjZGVmaW5lIFNORF9BVURJT01PREVfQU1SV0JfRFRYX09GRiAoKF9fdTMyKSAweDAwMDAwMDAxKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0FNUldCX1ZBRDEgKChfX3UzMikgMHgwMDAwMDAwMikKLSNkZWZpbmUgU05EX0FVRElPTU9ERV9BTVJXQl9WQUQyICgoX191MzIpIDB4MDAwMDAwMDQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9NT0RFX0FNUldCX1ZBRDIgKChfX3UzMikgMHgwMDAwMDAwNCkKICNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9BTVJXQlBMVVMgKChfX3UzMikgMHgwMDAwMDAwMSkKICNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9BQUMgKChfX3UzMikgMHgwMDAwMDAwMSkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9BQUNfTUFJTiAoKF9fdTMyKSAweDAwMDAwMDAxKQotI2RlZmluZSBTTkRfQVVESU9NT0RFX0FBQ19MQyAoKF9fdTMyKSAweDAwMDAwMDAyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9BQUNfTEMgKChfX3UzMikgMHgwMDAwMDAwMikKICNkZWZpbmUgU05EX0FVRElPTU9ERV9BQUNfU1NSICgoX191MzIpIDB4MDAwMDAwMDQpCiAjZGVmaW5lIFNORF9BVURJT01PREVfQUFDX0xUUCAoKF9fdTMyKSAweDAwMDAwMDA4KQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0FBQ19IRSAoKF9fdTMyKSAweDAwMDAwMDEwKQotI2RlZmluZSBTTkRfQVVESU9NT0RFX0FBQ19TQ0FMQUJMRSAoKF9fdTMyKSAweDAwMDAwMDIwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9BQUNfU0NBTEFCTEUgKChfX3UzMikgMHgwMDAwMDAyMCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9BQUNfRVJMQyAoKF9fdTMyKSAweDAwMDAwMDQwKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0FBQ19MRCAoKF9fdTMyKSAweDAwMDAwMDgwKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0FBQ19IRV9QUyAoKF9fdTMyKSAweDAwMDAwMTAwKQotI2RlZmluZSBTTkRfQVVESU9NT0RFX0FBQ19IRV9NUFMgKChfX3UzMikgMHgwMDAwMDIwMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT01PREVfQUFDX0hFX01QUyAoKF9fdTMyKSAweDAwMDAwMjAwKQogI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfTVAyQURUUyAoKF9fdTMyKSAweDAwMDAwMDAxKQogI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfTVA0QURUUyAoKF9fdTMyKSAweDAwMDAwMDAyKQogI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfTVA0TE9BUyAoKF9fdTMyKSAweDAwMDAwMDA0KQotI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfTVA0TEFUTSAoKF9fdTMyKSAweDAwMDAwMDA4KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX01QNExBVE0gKChfX3UzMikgMHgwMDAwMDAwOCkKICNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX0FESUYgKChfX3UzMikgMHgwMDAwMDAxMCkKICNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX01QNEZGICgoX191MzIpIDB4MDAwMDAwMjApCiAjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9SQVcgKChfX3UzMikgMHgwMDAwMDA0MCkKLSNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9XTUE3ICgoX191MzIpIDB4MDAwMDAwMDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX1dNQTcgKChfX3UzMikgMHgwMDAwMDAwMSkKICNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9XTUE4ICgoX191MzIpIDB4MDAwMDAwMDIpCiAjZGVmaW5lIFNORF9BVURJT1BST0ZJTEVfV01BOSAoKF9fdTMyKSAweDAwMDAwMDA0KQogI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX1dNQTEwICgoX191MzIpIDB4MDAwMDAwMDgpCi0jZGVmaW5lIFNORF9BVURJT01PREVfV01BX0xFVkVMMSAoKF9fdTMyKSAweDAwMDAwMDAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9XTUFfTEVWRUwxICgoX191MzIpIDB4MDAwMDAwMDEpCiAjZGVmaW5lIFNORF9BVURJT01PREVfV01BX0xFVkVMMiAoKF9fdTMyKSAweDAwMDAwMDAyKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX1dNQV9MRVZFTDMgKChfX3UzMikgMHgwMDAwMDAwNCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9XTUFfTEVWRUw0ICgoX191MzIpIDB4MDAwMDAwMDgpCi0jZGVmaW5lIFNORF9BVURJT01PREVfV01BUFJPX0xFVkVMTTAgKChfX3UzMikgMHgwMDAwMDAxMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT01PREVfV01BUFJPX0xFVkVMTTAgKChfX3UzMikgMHgwMDAwMDAxMCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9XTUFQUk9fTEVWRUxNMSAoKF9fdTMyKSAweDAwMDAwMDIwKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX1dNQVBST19MRVZFTE0yICgoX191MzIpIDB4MDAwMDAwNDApCiAjZGVmaW5lIFNORF9BVURJT01PREVfV01BUFJPX0xFVkVMTTMgKChfX3UzMikgMHgwMDAwMDA4MCkKLSNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX1dNQV9BU0YgKChfX3UzMikgMHgwMDAwMDAwMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9XTUFfQVNGICgoX191MzIpIDB4MDAwMDAwMDEpCiAjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9XTUFfTk9BU0ZfSERSICgoX191MzIpIDB4MDAwMDAwMDIpCiAjZGVmaW5lIFNORF9BVURJT1BST0ZJTEVfUkVBTEFVRElPICgoX191MzIpIDB4MDAwMDAwMDEpCiAjZGVmaW5lIFNORF9BVURJT01PREVfUkVBTEFVRElPX0cyICgoX191MzIpIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFNORF9BVURJT01PREVfUkVBTEFVRElPXzggKChfX3UzMikgMHgwMDAwMDAwMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT01PREVfUkVBTEFVRElPXzggKChfX3UzMikgMHgwMDAwMDAwMikKICNkZWZpbmUgU05EX0FVRElPTU9ERV9SRUFMQVVESU9fMTAgKChfX3UzMikgMHgwMDAwMDAwNCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9SRUFMQVVESU9fU1VSUk9VTkQgKChfX3UzMikgMHgwMDAwMDAwOCkKICNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9WT1JCSVMgKChfX3UzMikgMHgwMDAwMDAwMSkKLSNkZWZpbmUgU05EX0FVRElPTU9ERV9WT1JCSVMgKChfX3UzMikgMHgwMDAwMDAwMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT01PREVfVk9SQklTICgoX191MzIpIDB4MDAwMDAwMDEpCiAjZGVmaW5lIFNORF9BVURJT1BST0ZJTEVfRkxBQyAoKF9fdTMyKSAweDAwMDAwMDAxKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0ZMQUNfTEVWRUwwICgoX191MzIpIDB4MDAwMDAwMDEpCiAjZGVmaW5lIFNORF9BVURJT01PREVfRkxBQ19MRVZFTDEgKChfX3UzMikgMHgwMDAwMDAwMikKLSNkZWZpbmUgU05EX0FVRElPTU9ERV9GTEFDX0xFVkVMMiAoKF9fdTMyKSAweDAwMDAwMDA0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9GTEFDX0xFVkVMMiAoKF9fdTMyKSAweDAwMDAwMDA0KQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0ZMQUNfTEVWRUwzICgoX191MzIpIDB4MDAwMDAwMDgpCiAjZGVmaW5lIFNORF9BVURJT01PREVfRkxBQ19MRVZFTDQgKChfX3UzMikgMHgwMDAwMDAxMCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9GTEFDX0xFVkVMNSAoKF9fdTMyKSAweDAwMDAwMDIwKQotI2RlZmluZSBTTkRfQVVESU9NT0RFX0ZMQUNfTEVWRUw2ICgoX191MzIpIDB4MDAwMDAwNDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9NT0RFX0ZMQUNfTEVWRUw2ICgoX191MzIpIDB4MDAwMDAwNDApCiAjZGVmaW5lIFNORF9BVURJT01PREVfRkxBQ19MRVZFTDcgKChfX3UzMikgMHgwMDAwMDA4MCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9GTEFDX0xFVkVMOCAoKF9fdTMyKSAweDAwMDAwMTAwKQogI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfRkxBQyAoKF9fdTMyKSAweDAwMDAwMDAxKQotI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfRkxBQ19PR0cgKChfX3UzMikgMHgwMDAwMDAwMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9GTEFDX09HRyAoKF9fdTMyKSAweDAwMDAwMDAyKQogI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX0lFQzYxOTM3ICgoX191MzIpIDB4MDAwMDAwMDEpCiAjZGVmaW5lIFNORF9BVURJT1BST0ZJTEVfSUVDNjE5MzdfU1BESUYgKChfX3UzMikgMHgwMDAwMDAwMikKICNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfUkVGX1NUUkVBTV9IRUFERVIgKChfX3UzMikgMHgwMDAwMDAwMCkKLSNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfTFBDTSAoKF9fdTMyKSAweDAwMDAwMDAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfTFBDTSAoKF9fdTMyKSAweDAwMDAwMDAxKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19BQzMgKChfX3UzMikgMHgwMDAwMDAwMikKICNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfTVBFRzEgKChfX3UzMikgMHgwMDAwMDAwNCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfTVAzICgoX191MzIpIDB4MDAwMDAwMDgpCi0jZGVmaW5lIFNORF9BVURJT01PREVfSUVDX01QRUcyICgoX191MzIpIDB4MDAwMDAwMTApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19NUEVHMiAoKF9fdTMyKSAweDAwMDAwMDEwKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19BQUNMQyAoKF9fdTMyKSAweDAwMDAwMDIwKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19EVFMgKChfX3UzMikgMHgwMDAwMDA0MCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfQVRSQUMgKChfX3UzMikgMHgwMDAwMDA4MCkKLSNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfU0FDRCAoKF9fdTMyKSAweDAwMDAwMTAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfU0FDRCAoKF9fdTMyKSAweDAwMDAwMTAwKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19FQUMzICgoX191MzIpIDB4MDAwMDAyMDApCiAjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX0RUU19IRCAoKF9fdTMyKSAweDAwMDAwNDAwKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19NTFAgKChfX3UzMikgMHgwMDAwMDgwMCkKLSNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfRFNUICgoX191MzIpIDB4MDAwMDEwMDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19EU1QgKChfX3UzMikgMHgwMDAwMTAwMCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfV01BUFJPICgoX191MzIpIDB4MDAwMDIwMDApCiAjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX1JFRl9DWFQgKChfX3UzMikgMHgwMDAwNDAwMCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfSEVfQUFDICgoX191MzIpIDB4MDAwMDgwMDApCi0jZGVmaW5lIFNORF9BVURJT01PREVfSUVDX0hFX0FBQzIgKChfX3UzMikgMHgwMDAxMDAwMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX0hFX0FBQzIgKChfX3UzMikgMHgwMDAxMDAwMCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfTVBFR19TVVJST1VORCAoKF9fdTMyKSAweDAwMDIwMDAwKQogI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX0c3MjNfMSAoKF9fdTMyKSAweDAwMDAwMDAxKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0c3MjNfMV9BTk5FWF9BICgoX191MzIpIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFNORF9BVURJT01PREVfRzcyM18xX0FOTkVYX0IgKChfX3UzMikgMHgwMDAwMDAwMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT01PREVfRzcyM18xX0FOTkVYX0IgKChfX3UzMikgMHgwMDAwMDAwMikKICNkZWZpbmUgU05EX0FVRElPTU9ERV9HNzIzXzFfQU5ORVhfQyAoKF9fdTMyKSAweDAwMDAwMDA0KQogI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX0c3MjkgKChfX3UzMikgMHgwMDAwMDAwMSkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9HNzI5X0FOTkVYX0EgKChfX3UzMikgMHgwMDAwMDAwMSkKLSNkZWZpbmUgU05EX0FVRElPTU9ERV9HNzI5X0FOTkVYX0IgKChfX3UzMikgMHgwMDAwMDAwMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT01PREVfRzcyOV9BTk5FWF9CICgoX191MzIpIDB4MDAwMDAwMDIpCiAjZGVmaW5lIFNORF9SQVRFQ09OVFJPTE1PREVfQ09OU1RBTlRCSVRSQVRFICgoX191MzIpIDB4MDAwMDAwMDEpCiAjZGVmaW5lIFNORF9SQVRFQ09OVFJPTE1PREVfVkFSSUFCTEVCSVRSQVRFICgoX191MzIpIDB4MDAwMDAwMDIpCiBzdHJ1Y3Qgc25kX2VuY193bWEgewotIF9fdTMyIHN1cGVyX2Jsb2NrX2FsaWduOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBzdXBlcl9ibG9ja19hbGlnbjsKIH07CiBzdHJ1Y3Qgc25kX2VuY192b3JiaXMgewogIF9fczMyIHF1YWxpdHk7Ci0gX191MzIgbWFuYWdlZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgbWFuYWdlZDsKICBfX3UzMiBtYXhfYml0X3JhdGU7CiAgX191MzIgbWluX2JpdF9yYXRlOwogIF9fdTMyIGRvd25taXg7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3Qgc25kX2VuY19yZWFsIHsKICBfX3UzMiBxdWFudF9iaXRzOwogIF9fdTMyIHN0YXJ0X3JlZ2lvbjsKLSBfX3UzMiBudW1fcmVnaW9uczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgbnVtX3JlZ2lvbnM7CiB9Owogc3RydWN0IHNuZF9lbmNfZmxhYyB7CiAgX191MzIgbnVtOwotIF9fdTMyIGdhaW47CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGdhaW47CiB9Owogc3RydWN0IHNuZF9lbmNfZ2VuZXJpYyB7CiAgX191MzIgYnc7Ci0gX19zMzIgcmVzZXJ2ZWRbMTVdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3MzMiByZXNlcnZlZFsxNV07CiB9OwogdW5pb24gc25kX2NvZGVjX29wdGlvbnMgewogIHN0cnVjdCBzbmRfZW5jX3dtYSB3bWE7Ci0gc3RydWN0IHNuZF9lbmNfdm9yYmlzIHZvcmJpczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHNuZF9lbmNfdm9yYmlzIHZvcmJpczsKICBzdHJ1Y3Qgc25kX2VuY19yZWFsIHJlYWw7CiAgc3RydWN0IHNuZF9lbmNfZmxhYyBmbGFjOwogIHN0cnVjdCBzbmRfZW5jX2dlbmVyaWMgZ2VuZXJpYzsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBzbmRfY29kZWNfZGVzYyB7CiAgX191MzIgbWF4X2NoOwotIF9fdTMyIHNhbXBsZV9yYXRlczsKLSBfX3UzMiBiaXRfcmF0ZVtNQVhfTlVNX0JJVFJBVEVTXTsKKyBfX3UzMiBzYW1wbGVfcmF0ZXNbTUFYX05VTV9TQU1QTEVfUkFURVNdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBudW1fc2FtcGxlX3JhdGVzOworIF9fdTMyIGJpdF9yYXRlW01BWF9OVU1fQklUUkFURVNdOwogIF9fdTMyIG51bV9iaXRyYXRlczsKICBfX3UzMiByYXRlX2NvbnRyb2w7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHByb2ZpbGVzOwogIF9fdTMyIG1vZGVzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmb3JtYXRzOwogIF9fdTMyIG1pbl9idWZmZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzE1XTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNuZF9jb2RlYyB7CiAgX191MzIgaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNoX2luOwogIF9fdTMyIGNoX291dDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc2FtcGxlX3JhdGU7CiAgX191MzIgYml0X3JhdGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJhdGVfY29udHJvbDsKICBfX3UzMiBwcm9maWxlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBsZXZlbDsKICBfX3UzMiBjaF9tb2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmb3JtYXQ7CiAgX191MzIgYWxpZ247Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHNuZF9jb2RlY19vcHRpb25zIG9wdGlvbnM7CiAgX191MzIgcmVzZXJ2ZWRbM107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvc291bmQvZmlyZXdpcmUuaCBiL2xpYmMva2VybmVsL3VhcGkvc291bmQvZmlyZXdpcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDBmZDE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9maXJld2lyZS5oCkBAIC0wLDAgKzEsNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1VBUElfU09VTkRfRklSRVdJUkVfSF9JTkNMVURFRAorI2RlZmluZSBfVUFQSV9TT1VORF9GSVJFV0lSRV9IX0lOQ0xVREVECisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNkZWZpbmUgU05EUlZfRklSRVdJUkVfRVZFTlRfTE9DS19TVEFUVVMgMHgwMDAwMTBjYworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfRklSRVdJUkVfRVZFTlRfRElDRV9OT1RJRklDQVRJT04gMHhkMWNlMDA0ZQorc3RydWN0IHNuZF9maXJld2lyZV9ldmVudF9jb21tb24geworIHVuc2lnbmVkIGludCB0eXBlOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qgc25kX2ZpcmV3aXJlX2V2ZW50X2xvY2tfc3RhdHVzIHsKKyB1bnNpZ25lZCBpbnQgdHlwZTsKKyB1bnNpZ25lZCBpbnQgc3RhdHVzOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qgc25kX2ZpcmV3aXJlX2V2ZW50X2RpY2Vfbm90aWZpY2F0aW9uIHsKKyB1bnNpZ25lZCBpbnQgdHlwZTsKKyB1bnNpZ25lZCBpbnQgbm90aWZpY2F0aW9uOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit1bmlvbiBzbmRfZmlyZXdpcmVfZXZlbnQgeworIHN0cnVjdCBzbmRfZmlyZXdpcmVfZXZlbnRfY29tbW9uIGNvbW1vbjsKKyBzdHJ1Y3Qgc25kX2ZpcmV3aXJlX2V2ZW50X2xvY2tfc3RhdHVzIGxvY2tfc3RhdHVzOworIHN0cnVjdCBzbmRfZmlyZXdpcmVfZXZlbnRfZGljZV9ub3RpZmljYXRpb24gZGljZV9ub3RpZmljYXRpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgU05EUlZfRklSRVdJUkVfSU9DVExfR0VUX0lORk8gX0lPUignSCcsIDB4ZjgsIHN0cnVjdCBzbmRfZmlyZXdpcmVfZ2V0X2luZm8pCisjZGVmaW5lIFNORFJWX0ZJUkVXSVJFX0lPQ1RMX0xPQ0sgX0lPKCdIJywgMHhmOSkKKyNkZWZpbmUgU05EUlZfRklSRVdJUkVfSU9DVExfVU5MT0NLIF9JTygnSCcsIDB4ZmEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9GSVJFV0lSRV9UWVBFX0RJQ0UgMQorc3RydWN0IHNuZF9maXJld2lyZV9nZXRfaW5mbyB7CisgdW5zaWduZWQgaW50IHR5cGU7CisgdW5zaWduZWQgaW50IGNhcmQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGNoYXIgZ3VpZFs4XTsKKyBjaGFyIGRldmljZV9uYW1lWzE2XTsKK307CisjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL3NvdW5kL2hkc3BtLmggYi9saWJjL2tlcm5lbC91YXBpL3NvdW5kL2hkc3BtLmgKaW5kZXggNmZkZmE4Zi4uOGIzNjg4ZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9oZHNwbS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvc291bmQvaGRzcG0uaApAQCAtOTQsNyArOTQsNyBAQAogIGVudW0gaGRzcG1fbHRjX2ZyYW1lIGZyYW1lOwogIGVudW0gaGRzcG1fbHRjX2lucHV0X2Zvcm1hdCBpbnB1dF9mb3JtYXQ7CiB9OwotI2RlZmluZSBTTkRSVl9IRFNQTV9JT0NUTF9HRVRfTFRDIF9JT1IoJ0gnLCAweDQ2LCBzdHJ1Y3QgaGRzcG1fbWl4ZXJfaW9jdGwpCisjZGVmaW5lIFNORFJWX0hEU1BNX0lPQ1RMX0dFVF9MVEMgX0lPUignSCcsIDB4NDYsIHN0cnVjdCBoZHNwbV9sdGMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBoZHNwbV9zeW5jIHsKICBoZHNwbV9zeW5jX25vX2xvY2sgPSAwLApkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS92aWRlby9hZGYuaCBiL2xpYmMva2VybmVsL3VhcGkvdmlkZW8vYWRmLmgKaW5kZXggMDU3ZWM0Ni4uZmUyM2UwMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS92aWRlby9hZGYuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL3ZpZGVvL2FkZi5oCkBAIC02Miw3ICs2Miw3IEBACiBzdHJ1Y3QgYWRmX3ZzeW5jX2V2ZW50IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGFkZl9ldmVudCBiYXNlOwotIF9fdTY0IHRpbWVzdGFtcDsKKyBfX2FsaWduZWRfdTY0IHRpbWVzdGFtcDsKIH07CiBzdHJ1Y3QgYWRmX2hvdHBsdWdfZXZlbnQgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTc3LDEyICs3NywxMiBAQAogIF9fdTMyIGg7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZvcm1hdDsKLSBfX3M2NCBmZFtBREZfTUFYX1BMQU5FU107CisgX19zMzIgZmRbQURGX01BWF9QTEFORVNdOwogIF9fdTMyIG9mZnNldFtBREZfTUFYX1BMQU5FU107CiAgX191MzIgcGl0Y2hbQURGX01BWF9QTEFORVNdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IG5fcGxhbmVzOwotIF9fczY0IGFjcXVpcmVfZmVuY2U7CisgX19zMzIgYWNxdWlyZV9mZW5jZTsKIH07CiAjZGVmaW5lIEFERl9NQVhfQlVGRkVSUyAoNDA5NiAvIHNpemVvZihzdHJ1Y3QgYWRmX2J1ZmZlcl9jb25maWcpKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTk0LDcgKzk0LDcgQEAKICBzdHJ1Y3QgYWRmX2J1ZmZlcl9jb25maWcgX191c2VyICpidWZzOwogIHNpemVfdCBjdXN0b21fZGF0YV9zaXplOwogIHZvaWQgX191c2VyICpjdXN0b21fZGF0YTsKLSBfX3M2NCBjb21wbGV0ZV9mZW5jZTsKKyBfX3MzMiBjb21wbGV0ZV9mZW5jZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBBREZfTUFYX0lOVEVSRkFDRVMgKDQwOTYgLyBzaXplb2YoX191MzIpKQpAQCAtMTAzLDcgKzEwMyw3IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IGg7CiAgX191MzIgZm9ybWF0OwotIF9fczY0IGZkOworIF9fczMyIGZkOwogIF9fdTMyIG9mZnNldDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGl0Y2g7CkBAIC0xMTEsNyArMTExLDcgQEAKIHN0cnVjdCBhZGZfc2ltcGxlX3Bvc3RfY29uZmlnIHsKICBzdHJ1Y3QgYWRmX2J1ZmZlcl9jb25maWcgYnVmOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBfX3M2NCBjb21wbGV0ZV9mZW5jZTsKKyBfX3MzMiBjb21wbGV0ZV9mZW5jZTsKIH07CiBzdHJ1Y3QgYWRmX2F0dGFjaG1lbnRfY29uZmlnIHsKICBfX3UzMiBvdmVybGF5X2VuZ2luZTsKQEAgLTE2MSwxOCArMTYxLDIwIEBACiB9OwogI2RlZmluZSBBREZfTUFYX1NVUFBPUlRFRF9GT1JNQVRTICg0MDk2IC8gc2l6ZW9mKF9fdTMyKSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEFERl9TRVRfRVZFTlQgX0lPVygnRCcsIDAsIHN0cnVjdCBhZGZfc2V0X2V2ZW50KQotI2RlZmluZSBBREZfQkxBTksgX0lPVygnRCcsIDEsIF9fdTgpCi0jZGVmaW5lIEFERl9QT1NUX0NPTkZJRyBfSU9XKCdEJywgMiwgc3RydWN0IGFkZl9wb3N0X2NvbmZpZykKLSNkZWZpbmUgQURGX1NFVF9NT0RFIF9JT1coJ0QnLCAzLCBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8pCisjZGVmaW5lIEFERl9JT0NUTF9UWVBFICdEJworI2RlZmluZSBBREZfSU9DVExfTlJfQ1VTVE9NIDEyOAorI2RlZmluZSBBREZfU0VUX0VWRU5UIF9JT1coQURGX0lPQ1RMX1RZUEUsIDAsIHN0cnVjdCBhZGZfc2V0X2V2ZW50KQorI2RlZmluZSBBREZfQkxBTksgX0lPVyhBREZfSU9DVExfVFlQRSwgMSwgX191OCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEFERl9HRVRfREVWSUNFX0RBVEEgX0lPUignRCcsIDQsIHN0cnVjdCBhZGZfZGV2aWNlX2RhdGEpCi0jZGVmaW5lIEFERl9HRVRfSU5URVJGQUNFX0RBVEEgX0lPUignRCcsIDUsIHN0cnVjdCBhZGZfaW50ZXJmYWNlX2RhdGEpCi0jZGVmaW5lIEFERl9HRVRfT1ZFUkxBWV9FTkdJTkVfREFUQSAgIF9JT1IoJ0QnLCA2LCBzdHJ1Y3QgYWRmX292ZXJsYXlfZW5naW5lX2RhdGEpCi0jZGVmaW5lIEFERl9TSU1QTEVfUE9TVF9DT05GSUcgX0lPVygnRCcsIDcsIHN0cnVjdCBhZGZfc2ltcGxlX3Bvc3RfY29uZmlnKQorI2RlZmluZSBBREZfUE9TVF9DT05GSUcgX0lPVyhBREZfSU9DVExfVFlQRSwgMiwgc3RydWN0IGFkZl9wb3N0X2NvbmZpZykKKyNkZWZpbmUgQURGX1NFVF9NT0RFIF9JT1coQURGX0lPQ1RMX1RZUEUsIDMsICAgc3RydWN0IGRybV9tb2RlX21vZGVpbmZvKQorI2RlZmluZSBBREZfR0VUX0RFVklDRV9EQVRBIF9JT1IoQURGX0lPQ1RMX1RZUEUsIDQsIHN0cnVjdCBhZGZfZGV2aWNlX2RhdGEpCisjZGVmaW5lIEFERl9HRVRfSU5URVJGQUNFX0RBVEEgX0lPUihBREZfSU9DVExfVFlQRSwgNSwgICBzdHJ1Y3QgYWRmX2ludGVyZmFjZV9kYXRhKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgQURGX1NJTVBMRV9CVUZGRVJfQUxMT0MgX0lPVygnRCcsIDgsIHN0cnVjdCBhZGZfc2ltcGxlX2J1ZmZlcl9hbGxvYykKLSNkZWZpbmUgQURGX0FUVEFDSCBfSU9XKCdEJywgOSwgc3RydWN0IGFkZl9hdHRhY2htZW50X2NvbmZpZykKLSNkZWZpbmUgQURGX0RFVEFDSCBfSU9XKCdEJywgMTAsIHN0cnVjdCBhZGZfYXR0YWNobWVudF9jb25maWcpCisjZGVmaW5lIEFERl9HRVRfT1ZFUkxBWV9FTkdJTkVfREFUQSAgIF9JT1IoQURGX0lPQ1RMX1RZUEUsIDYsICAgc3RydWN0IGFkZl9vdmVybGF5X2VuZ2luZV9kYXRhKQorI2RlZmluZSBBREZfU0lNUExFX1BPU1RfQ09ORklHIF9JT1coQURGX0lPQ1RMX1RZUEUsIDcsICAgc3RydWN0IGFkZl9zaW1wbGVfcG9zdF9jb25maWcpCisjZGVmaW5lIEFERl9TSU1QTEVfQlVGRkVSX0FMTE9DIF9JT1coQURGX0lPQ1RMX1RZUEUsIDgsICAgc3RydWN0IGFkZl9zaW1wbGVfYnVmZmVyX2FsbG9jKQorI2RlZmluZSBBREZfQVRUQUNIIF9JT1coQURGX0lPQ1RMX1RZUEUsIDksICAgc3RydWN0IGFkZl9hdHRhY2htZW50X2NvbmZpZykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFERl9ERVRBQ0ggX0lPVyhBREZfSU9DVExfVFlQRSwgMTAsICAgc3RydWN0IGFkZl9hdHRhY2htZW50X2NvbmZpZykKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkveGVuL2dudGFsbG9jLmggYi9saWJjL2tlcm5lbC91YXBpL3hlbi9nbnRhbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNzY4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL3hlbi9nbnRhbGxvYy5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9QVUJMSUNfR05UQUxMT0NfSF9fCisjZGVmaW5lIF9fTElOVVhfUFVCTElDX0dOVEFMTE9DX0hfXworI2RlZmluZSBJT0NUTF9HTlRBTExPQ19BTExPQ19HUkVGICBfSU9DKF9JT0NfTk9ORSwgJ0cnLCA1LCBzaXplb2Yoc3RydWN0IGlvY3RsX2dudGFsbG9jX2FsbG9jX2dyZWYpKQorc3RydWN0IGlvY3RsX2dudGFsbG9jX2FsbG9jX2dyZWYgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MTZfdCBkb21pZDsKKyB1aW50MTZfdCBmbGFnczsKKyB1aW50MzJfdCBjb3VudDsKKyB1aW50NjRfdCBpbmRleDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgZ3JlZl9pZHNbMV07Cit9OworI2RlZmluZSBHTlRBTExPQ19GTEFHX1dSSVRBQkxFIDEKKyNkZWZpbmUgSU9DVExfR05UQUxMT0NfREVBTExPQ19HUkVGICBfSU9DKF9JT0NfTk9ORSwgJ0cnLCA2LCBzaXplb2Yoc3RydWN0IGlvY3RsX2dudGFsbG9jX2RlYWxsb2NfZ3JlZikpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGlvY3RsX2dudGFsbG9jX2RlYWxsb2NfZ3JlZiB7CisgdWludDY0X3QgaW5kZXg7CisgdWludDMyX3QgY291bnQ7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9DVExfR05UQUxMT0NfU0VUX1VOTUFQX05PVElGWSAgX0lPQyhfSU9DX05PTkUsICdHJywgNywgc2l6ZW9mKHN0cnVjdCBpb2N0bF9nbnRhbGxvY191bm1hcF9ub3RpZnkpKQorc3RydWN0IGlvY3RsX2dudGFsbG9jX3VubWFwX25vdGlmeSB7CisgdWludDY0X3QgaW5kZXg7CisgdWludDMyX3QgYWN0aW9uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBldmVudF9jaGFubmVsX3BvcnQ7Cit9OworI2RlZmluZSBVTk1BUF9OT1RJRllfQ0xFQVJfQllURSAweDEKKyNkZWZpbmUgVU5NQVBfTk9USUZZX1NFTkRfRVZFTlQgMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL3hlbi9nbnRkZXYuaCBiL2xpYmMva2VybmVsL3VhcGkveGVuL2dudGRldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTJhM2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL3hlbi9nbnRkZXYuaApAQCAtMCwwICsxLDY2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfUFVCTElDX0dOVERFVl9IX18KKyNkZWZpbmUgX19MSU5VWF9QVUJMSUNfR05UREVWX0hfXworc3RydWN0IGlvY3RsX2dudGRldl9ncmFudF9yZWYgeworIHVpbnQzMl90IGRvbWlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCByZWY7Cit9OworI2RlZmluZSBJT0NUTF9HTlRERVZfTUFQX0dSQU5UX1JFRiAgX0lPQyhfSU9DX05PTkUsICdHJywgMCwgc2l6ZW9mKHN0cnVjdCBpb2N0bF9nbnRkZXZfbWFwX2dyYW50X3JlZikpCitzdHJ1Y3QgaW9jdGxfZ250ZGV2X21hcF9ncmFudF9yZWYgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBjb3VudDsKKyB1aW50MzJfdCBwYWQ7CisgdWludDY0X3QgaW5kZXg7Cisgc3RydWN0IGlvY3RsX2dudGRldl9ncmFudF9yZWYgcmVmc1sxXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBJT0NUTF9HTlRERVZfVU5NQVBfR1JBTlRfUkVGICBfSU9DKF9JT0NfTk9ORSwgJ0cnLCAxLCBzaXplb2Yoc3RydWN0IGlvY3RsX2dudGRldl91bm1hcF9ncmFudF9yZWYpKQorc3RydWN0IGlvY3RsX2dudGRldl91bm1hcF9ncmFudF9yZWYgeworIHVpbnQ2NF90IGluZGV4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBjb3VudDsKKyB1aW50MzJfdCBwYWQ7Cit9OworI2RlZmluZSBJT0NUTF9HTlRERVZfR0VUX09GRlNFVF9GT1JfVkFERFIgIF9JT0MoX0lPQ19OT05FLCAnRycsIDIsIHNpemVvZihzdHJ1Y3QgaW9jdGxfZ250ZGV2X2dldF9vZmZzZXRfZm9yX3ZhZGRyKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaW9jdGxfZ250ZGV2X2dldF9vZmZzZXRfZm9yX3ZhZGRyIHsKKyB1aW50NjRfdCB2YWRkcjsKKyB1aW50NjRfdCBvZmZzZXQ7CisgdWludDMyX3QgY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IHBhZDsKK307CisjZGVmaW5lIElPQ1RMX0dOVERFVl9TRVRfTUFYX0dSQU5UUyAgX0lPQyhfSU9DX05PTkUsICdHJywgMywgc2l6ZW9mKHN0cnVjdCBpb2N0bF9nbnRkZXZfc2V0X21heF9ncmFudHMpKQorc3RydWN0IGlvY3RsX2dudGRldl9zZXRfbWF4X2dyYW50cyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IGNvdW50OworfTsKKyNkZWZpbmUgSU9DVExfR05UREVWX1NFVF9VTk1BUF9OT1RJRlkgIF9JT0MoX0lPQ19OT05FLCAnRycsIDcsIHNpemVvZihzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFwX25vdGlmeSkpCitzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFwX25vdGlmeSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQ2NF90IGluZGV4OworIHVpbnQzMl90IGFjdGlvbjsKKyB1aW50MzJfdCBldmVudF9jaGFubmVsX3BvcnQ7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVU5NQVBfTk9USUZZX0NMRUFSX0JZVEUgMHgxCisjZGVmaW5lIFVOTUFQX05PVElGWV9TRU5EX0VWRU5UIDB4MgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9nZXRobmFtYWRkci5jIGIvbGliYy9uZXRic2QvZ2V0aG5hbWFkZHIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIyZjk4Ny4uMDAwMDAwMAotLS0gYS9saWJjL25ldGJzZC9nZXRobmFtYWRkci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQwOCArMCwwIEBACi0vKgkkTmV0QlNEOiBnZXRobmFtYWRkci5jLHYgMS43MCAyMDA2LzAzLzIyIDAwOjAzOjUxIGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiArK0NvcHlyaWdodCsrIDE5ODUsIDE5ODgsIDE5OTMKLSAqIC0KLSAqIENvcHlyaWdodCAoYykgMTk4NSwgMTk4OCwgMTk5MwotICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICogLQotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKLSAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCi0gKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKLSAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKLSAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAotICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCi0gKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUwotICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCi0gKiBTT0ZUV0FSRS4KLSAqIC0KLSAqIC0tQ29weXJpZ2h0LS0KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8c3lzL3VuLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgotI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCi0jaW5jbHVkZSAicmVzb2x2X2NhY2hlLmgiCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPG5ldGRiLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jaW5jbHVkZSA8c3lzbG9nLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpZm5kZWYgTE9HX0FVVEgKLSMgZGVmaW5lIExPR19BVVRIIDAKLSNlbmRpZgotCi0jZGVmaW5lIE1VTFRJX1BUUlNfQVJFX0FMSUFTRVMgMQkvKiBYWFggLSBleHBlcmltZW50YWwgKi8KLQotI2luY2x1ZGUgIm5zc3dpdGNoLmgiCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8vIFRoaXMgc2hvdWxkIGJlIHN5bmNocm9uaXplZCB0byBSZXNwb25zZUNvZGUuaAotc3RhdGljIGNvbnN0IGludCBEbnNQcm94eVF1ZXJ5UmVzdWx0ID0gMjIyOwotCi1zdGF0aWMgY29uc3QgY2hhciBjb25zdCBBc2tlZEZvckdvdFtdID0KLQkJCSAgImdldGhvc3RieSouZ2V0YW5zd2VyOiBhc2tlZCBmb3IgXCIlc1wiLCBnb3QgXCIlc1wiIjsKLQotI2RlZmluZQlNQVhQQUNLRVQJKDY0KjEwMjQpCi0KLXR5cGVkZWYgdW5pb24gewotICAgIEhFQURFUiBoZHI7Ci0gICAgdV9jaGFyIGJ1ZltNQVhQQUNLRVRdOwotfSBxdWVyeWJ1ZjsKLQotdHlwZWRlZiB1bmlvbiB7Ci0gICAgaW50MzJfdCBhbDsKLSAgICBjaGFyIGFjOwotfSBhbGlnbjsKLQotI2lmZGVmIERFQlVHCi1zdGF0aWMgdm9pZCBkcHJpbnRmKGNvbnN0IGNoYXIgKiwgcmVzX3N0YXRlLCAuLi4pCi0JX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyhfX3ByaW50Zl9fLCAxLCAzKSkpOwotI2VuZGlmCi1zdGF0aWMgc3RydWN0IGhvc3RlbnQgKmdldGFuc3dlcihjb25zdCBxdWVyeWJ1ZiAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50LAotICAgIHJlc19zdGF0ZSk7Ci1zdGF0aWMgdm9pZCBtYXBfdjR2Nl9hZGRyZXNzKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKLXN0YXRpYyB2b2lkIG1hcF92NHY2X2hvc3RlbnQoc3RydWN0IGhvc3RlbnQgKiwgY2hhciAqKiwgY2hhciAqKTsKLXN0YXRpYyB2b2lkIGFkZHJzb3J0KGNoYXIgKiosIGludCwgcmVzX3N0YXRlKTsKLQotc3RhdGljIHZvaWQgX3NldGh0ZW50KGludCk7Ci1zdGF0aWMgdm9pZCBfZW5kaHRlbnQodm9pZCk7Ci1zdGF0aWMgc3RydWN0IGhvc3RlbnQgKl9nZXRodGVudCh2b2lkKTsKLXZvaWQgaHRfc2V0aG9zdGVudChpbnQpOwotdm9pZCBodF9lbmRob3N0ZW50KHZvaWQpOwotc3RydWN0IGhvc3RlbnQgKmh0X2dldGhvc3RieW5hbWUoY2hhciAqKTsKLXN0cnVjdCBob3N0ZW50ICpodF9nZXRob3N0YnlhZGRyKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOwotdm9pZCBkbnNfc2VydmljZSh2b2lkKTsKLSN1bmRlZiBkbl9za2lwbmFtZQotaW50IGRuX3NraXBuYW1lKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKik7Ci1zdGF0aWMgaW50IF9nZXRodGJ5YWRkcih2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7Ci1zdGF0aWMgaW50IF9nZXRodGJ5bmFtZSh2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7Ci1zdGF0aWMgc3RydWN0IGhvc3RlbnQgKl9nZXRodGJ5bmFtZTIoY29uc3QgY2hhciAqLCBpbnQpOwotc3RhdGljIGludCBfZG5zX2dldGh0YnlhZGRyKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKLXN0YXRpYyBpbnQgX2Ruc19nZXRodGJ5bmFtZSh2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5bmFtZV9pbnRlcm5hbChjb25zdCBjaGFyICosIGludCwgcmVzX3N0YXRlLCBjb25zdCBjaGFyICosIGludCk7Ci0KLXN0YXRpYyBjb25zdCBuc19zcmMgZGVmYXVsdF9kbnNfZmlsZXNbXSA9IHsKLQl7IE5TU1JDX0ZJTEVTLCAJTlNfU1VDQ0VTUyB9LAotCXsgTlNTUkNfRE5TLCAJTlNfU1VDQ0VTUyB9LAotCXsgMCwgMCB9Ci19OwotCi0KLSNpZmRlZiBERUJVRwotc3RhdGljIHZvaWQKLWRwcmludGYoY29uc3QgY2hhciAqbXNnLCByZXNfc3RhdGUgcmVzLCAuLi4pCi17Ci0JYXNzZXJ0KG1zZyAhPSBOVUxMKTsKLQotCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfREVCVUcpIHsKLQkJaW50IHNhdmUgPSBlcnJubzsKLQkJdmFfbGlzdCBhcDsKLQotCQl2YV9zdGFydCAoYXAsIHJlcyk7Ci0JCXZwcmludGYobXNnLCBhcCk7Ci0JCXZhX2VuZCAoYXApOwotCi0JCWVycm5vID0gc2F2ZTsKLQl9Ci19Ci0jZWxzZQotIyBkZWZpbmUgZHByaW50Zihtc2csIHJlcywgbnVtKSAoKHZvaWQpMCkgLypuYWRhKi8KLSNlbmRpZgotCi0jZGVmaW5lIEJPVU5ERURfSU5DUih4KSBcCi0JZG8geyBcCi0JCWNwICs9ICh4KTsgXAotCQlpZiAoY3AgPiBlb20pIHsgXAotCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOyBcCi0JCQlyZXR1cm4gTlVMTDsgXAotCQl9IFwKLQl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLQotI2RlZmluZSBCT1VORFNfQ0hFQ0socHRyLCBjb3VudCkgXAotCWRvIHsgXAotCQlpZiAoKHB0cikgKyAoY291bnQpID4gZW9tKSB7IFwKLQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsgXAotCQkJcmV0dXJuIE5VTEw7IFwKLQkJfSBcCi0JfSB3aGlsZSAoLypDT05TVENPTkQqLzApCi0KLXN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqCi1nZXRhbnN3ZXIoY29uc3QgcXVlcnlidWYgKmFuc3dlciwgaW50IGFuc2xlbiwgY29uc3QgY2hhciAqcW5hbWUsIGludCBxdHlwZSwKLSAgICByZXNfc3RhdGUgcmVzKQotewotCWNvbnN0IEhFQURFUiAqaHA7Ci0JY29uc3QgdV9jaGFyICpjcDsKLQlpbnQgbjsKLQljb25zdCB1X2NoYXIgKmVvbSwgKmVyZGF0YTsKLQljaGFyICpicCwgKiphcCwgKipoYXAsICplcDsKLQlpbnQgdHlwZSwgY2xhc3MsIGFuY291bnQsIHFkY291bnQ7Ci0JaW50IGhhdmVhbnN3ZXIsIGhhZF9lcnJvcjsKLQlpbnQgdG9vYmlnID0gMDsKLQljaGFyIHRidWZbTUFYRE5BTUVdOwotCWNvbnN0IGNoYXIgKnRuYW1lOwotCWludCAoKm5hbWVfb2spKGNvbnN0IGNoYXIgKik7Ci0JcmVzX3N0YXRpYyAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7Ci0KLQlhc3NlcnQoYW5zd2VyICE9IE5VTEwpOwotCWFzc2VydChxbmFtZSAhPSBOVUxMKTsKLQotCXRuYW1lID0gcW5hbWU7Ci0JcnMtPmhvc3QuaF9uYW1lID0gTlVMTDsKLQllb20gPSBhbnN3ZXItPmJ1ZiArIGFuc2xlbjsKLQlzd2l0Y2ggKHF0eXBlKSB7Ci0JY2FzZSBUX0E6Ci0JY2FzZSBUX0FBQUE6Ci0JCW5hbWVfb2sgPSByZXNfaG5vazsKLQkJYnJlYWs7Ci0JY2FzZSBUX1BUUjoKLQkJbmFtZV9vayA9IHJlc19kbm9rOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gTlVMTDsJLyogWFhYIHNob3VsZCBiZSBhYm9ydCgpOyAqLwotCX0KLQkvKgotCSAqIGZpbmQgZmlyc3Qgc2F0aXNmYWN0b3J5IGFuc3dlcgotCSAqLwotCWhwID0gJmFuc3dlci0+aGRyOwotCWFuY291bnQgPSBudG9ocyhocC0+YW5jb3VudCk7Ci0JcWRjb3VudCA9IG50b2hzKGhwLT5xZGNvdW50KTsKLQlicCA9IHJzLT5ob3N0YnVmOwotCWVwID0gcnMtPmhvc3RidWYgKyBzaXplb2YgcnMtPmhvc3RidWY7Ci0JY3AgPSBhbnN3ZXItPmJ1ZjsKLQlCT1VOREVEX0lOQ1IoSEZJWEVEU1opOwotCWlmIChxZGNvdW50ICE9IDEpIHsKLQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JbiA9IGRuX2V4cGFuZChhbnN3ZXItPmJ1ZiwgZW9tLCBjcCwgYnAsIGVwIC0gYnApOwotCWlmICgobiA8IDApIHx8ICEoKm5hbWVfb2spKGJwKSkgewotCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlCT1VOREVEX0lOQ1IobiArIFFGSVhFRFNaKTsKLQlpZiAocXR5cGUgPT0gVF9BIHx8IHF0eXBlID09IFRfQUFBQSkgewotCQkvKiByZXNfc2VuZCgpIGhhcyBhbHJlYWR5IHZlcmlmaWVkIHRoYXQgdGhlIHF1ZXJ5IG5hbWUgaXMgdGhlCi0JCSAqIHNhbWUgYXMgdGhlIG9uZSB3ZSBzZW50OyB0aGlzIGp1c3QgZ2V0cyB0aGUgZXhwYW5kZWQgbmFtZQotCQkgKiAoaS5lLiwgd2l0aCB0aGUgc3VjY2VlZGluZyBzZWFyY2gtZG9tYWluIHRhY2tlZCBvbikuCi0JCSAqLwotCQluID0gc3RybGVuKGJwKSArIDE7CQkvKiBmb3IgdGhlIFwwICovCi0JCWlmIChuID49IE1BWEhPU1ROQU1FTEVOKSB7Ci0JCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlycy0+aG9zdC5oX25hbWUgPSBicDsKLQkJYnAgKz0gbjsKLQkJLyogVGhlIHFuYW1lIGNhbiBiZSBhYmJyZXZpYXRlZCwgYnV0IGhfbmFtZSBpcyBub3cgYWJzb2x1dGUuICovCi0JCXFuYW1lID0gcnMtPmhvc3QuaF9uYW1lOwotCX0KLQlhcCA9IHJzLT5ob3N0X2FsaWFzZXM7Ci0JKmFwID0gTlVMTDsKLQlycy0+aG9zdC5oX2FsaWFzZXMgPSBycy0+aG9zdF9hbGlhc2VzOwotCWhhcCA9IHJzLT5oX2FkZHJfcHRyczsKLQkqaGFwID0gTlVMTDsKLQlycy0+aG9zdC5oX2FkZHJfbGlzdCA9IHJzLT5oX2FkZHJfcHRyczsKLQloYXZlYW5zd2VyID0gMDsKLQloYWRfZXJyb3IgPSAwOwotCXdoaWxlIChhbmNvdW50LS0gPiAwICYmIGNwIDwgZW9tICYmICFoYWRfZXJyb3IpIHsKLQkJbiA9IGRuX2V4cGFuZChhbnN3ZXItPmJ1ZiwgZW9tLCBjcCwgYnAsIGVwIC0gYnApOwotCQlpZiAoKG4gPCAwKSB8fCAhKCpuYW1lX29rKShicCkpIHsKLQkJCWhhZF9lcnJvcisrOwotCQkJY29udGludWU7Ci0JCX0KLQkJY3AgKz0gbjsJCQkvKiBuYW1lICovCi0JCUJPVU5EU19DSEVDSyhjcCwgMyAqIElOVDE2U1ogKyBJTlQzMlNaKTsKLQkJdHlwZSA9IF9nZXRzaG9ydChjcCk7Ci0gCQljcCArPSBJTlQxNlNaOwkJCS8qIHR5cGUgKi8KLQkJY2xhc3MgPSBfZ2V0c2hvcnQoY3ApOwotIAkJY3AgKz0gSU5UMTZTWiArIElOVDMyU1o7CS8qIGNsYXNzLCBUVEwgKi8KLQkJbiA9IF9nZXRzaG9ydChjcCk7Ci0JCWNwICs9IElOVDE2U1o7CQkJLyogbGVuICovCi0JCUJPVU5EU19DSEVDSyhjcCwgbik7Ci0JCWVyZGF0YSA9IGNwICsgbjsKLQkJaWYgKGNsYXNzICE9IENfSU4pIHsKLQkJCS8qIFhYWCAtIGRlYnVnPyBzeXNsb2c/ICovCi0JCQljcCArPSBuOwotCQkJY29udGludWU7CQkvKiBYWFggLSBoYWRfZXJyb3IrKyA/ICovCi0JCX0KLQkJaWYgKChxdHlwZSA9PSBUX0EgfHwgcXR5cGUgPT0gVF9BQUFBKSAmJiB0eXBlID09IFRfQ05BTUUpIHsKLQkJCWlmIChhcCA+PSAmcnMtPmhvc3RfYWxpYXNlc1tNQVhBTElBU0VTLTFdKQotCQkJCWNvbnRpbnVlOwotCQkJbiA9IGRuX2V4cGFuZChhbnN3ZXItPmJ1ZiwgZW9tLCBjcCwgdGJ1Ziwgc2l6ZW9mIHRidWYpOwotCQkJaWYgKChuIDwgMCkgfHwgISgqbmFtZV9vaykodGJ1ZikpIHsKLQkJCQloYWRfZXJyb3IrKzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWNwICs9IG47Ci0JCQlpZiAoY3AgIT0gZXJkYXRhKSB7Ci0JCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQkJLyogU3RvcmUgYWxpYXMuICovCi0JCQkqYXArKyA9IGJwOwotCQkJbiA9IHN0cmxlbihicCkgKyAxOwkvKiBmb3IgdGhlIFwwICovCi0JCQlpZiAobiA+PSBNQVhIT1NUTkFNRUxFTikgewotCQkJCWhhZF9lcnJvcisrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJYnAgKz0gbjsKLQkJCS8qIEdldCBjYW5vbmljYWwgbmFtZS4gKi8KLQkJCW4gPSBzdHJsZW4odGJ1ZikgKyAxOwkvKiBmb3IgdGhlIFwwICovCi0JCQlpZiAobiA+IGVwIC0gYnAgfHwgbiA+PSBNQVhIT1NUTkFNRUxFTikgewotCQkJCWhhZF9lcnJvcisrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJc3RybGNweShicCwgdGJ1ZiwgKHNpemVfdCkoZXAgLSBicCkpOwotCQkJcnMtPmhvc3QuaF9uYW1lID0gYnA7Ci0JCQlicCArPSBuOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHF0eXBlID09IFRfUFRSICYmIHR5cGUgPT0gVF9DTkFNRSkgewotCQkJbiA9IGRuX2V4cGFuZChhbnN3ZXItPmJ1ZiwgZW9tLCBjcCwgdGJ1Ziwgc2l6ZW9mIHRidWYpOwotCQkJaWYgKG4gPCAwIHx8ICFyZXNfZG5vayh0YnVmKSkgewotCQkJCWhhZF9lcnJvcisrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJY3AgKz0gbjsKLQkJCWlmIChjcCAhPSBlcmRhdGEpIHsKLQkJCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9Ci0JCQkvKiBHZXQgY2Fub25pY2FsIG5hbWUuICovCi0JCQluID0gc3RybGVuKHRidWYpICsgMTsJLyogZm9yIHRoZSBcMCAqLwotCQkJaWYgKG4gPiBlcCAtIGJwIHx8IG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKLQkJCQloYWRfZXJyb3IrKzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXN0cmxjcHkoYnAsIHRidWYsIChzaXplX3QpKGVwIC0gYnApKTsKLQkJCXRuYW1lID0gYnA7Ci0JCQlicCArPSBuOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHR5cGUgIT0gcXR5cGUpIHsKLQkJCWlmICh0eXBlICE9IFRfS0VZICYmIHR5cGUgIT0gVF9TSUcpCi0JCQkJc3lzbG9nKExPR19OT1RJQ0V8TE9HX0FVVEgsCi0JICAgICAgICJnZXRob3N0YnkqLmdldGFuc3dlcjogYXNrZWQgZm9yIFwiJXMgJXMgJXNcIiwgZ290IHR5cGUgXCIlc1wiIiwKLQkJCQkgICAgICAgcW5hbWUsIHBfY2xhc3MoQ19JTiksIHBfdHlwZShxdHlwZSksCi0JCQkJICAgICAgIHBfdHlwZSh0eXBlKSk7Ci0JCQljcCArPSBuOwotCQkJY29udGludWU7CQkvKiBYWFggLSBoYWRfZXJyb3IrKyA/ICovCi0JCX0KLQkJc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgVF9QVFI6Ci0JCQlpZiAoc3RyY2FzZWNtcCh0bmFtZSwgYnApICE9IDApIHsKLQkJCQlzeXNsb2coTE9HX05PVElDRXxMT0dfQVVUSCwKLQkJCQkgICAgICAgQXNrZWRGb3JHb3QsIHFuYW1lLCBicCk7Ci0JCQkJY3AgKz0gbjsKLQkJCQljb250aW51ZTsJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLwotCQkJfQotCQkJbiA9IGRuX2V4cGFuZChhbnN3ZXItPmJ1ZiwgZW9tLCBjcCwgYnAsIGVwIC0gYnApOwotCQkJaWYgKChuIDwgMCkgfHwgIXJlc19obm9rKGJwKSkgewotCQkJCWhhZF9lcnJvcisrOwotCQkJCWJyZWFrOwotCQkJfQotI2lmIE1VTFRJX1BUUlNfQVJFX0FMSUFTRVMKLQkJCWNwICs9IG47Ci0JCQlpZiAoY3AgIT0gZXJkYXRhKSB7Ci0JCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQkJaWYgKCFoYXZlYW5zd2VyKQotCQkJCXJzLT5ob3N0LmhfbmFtZSA9IGJwOwotCQkJZWxzZSBpZiAoYXAgPCAmcnMtPmhvc3RfYWxpYXNlc1tNQVhBTElBU0VTLTFdKQotCQkJCSphcCsrID0gYnA7Ci0JCQllbHNlCi0JCQkJbiA9IC0xOwotCQkJaWYgKG4gIT0gLTEpIHsKLQkJCQluID0gc3RybGVuKGJwKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KLQkJCQlpZiAobiA+PSBNQVhIT1NUTkFNRUxFTikgewotCQkJCQloYWRfZXJyb3IrKzsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWJwICs9IG47Ci0JCQl9Ci0JCQlicmVhazsKLSNlbHNlCi0JCQlycy0+aG9zdC5oX25hbWUgPSBicDsKLQkJCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0lORVQ2KSB7Ci0JCQkJbiA9IHN0cmxlbihicCkgKyAxOwkvKiBmb3IgdGhlIFwwICovCi0JCQkJaWYgKG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKLQkJCQkJaGFkX2Vycm9yKys7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlicCArPSBuOwotCQkJCW1hcF92NHY2X2hvc3RlbnQoJnJzLT5ob3N0LCAmYnAsIGVwKTsKLQkJCX0KLQkJCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOwotCQkJcmV0dXJuICZycy0+aG9zdDsKLSNlbmRpZgotCQljYXNlIFRfQToKLQkJY2FzZSBUX0FBQUE6Ci0JCQlpZiAoc3RyY2FzZWNtcChycy0+aG9zdC5oX25hbWUsIGJwKSAhPSAwKSB7Ci0JCQkJc3lzbG9nKExPR19OT1RJQ0V8TE9HX0FVVEgsCi0JCQkJICAgICAgIEFza2VkRm9yR290LCBycy0+aG9zdC5oX25hbWUsIGJwKTsKLQkJCQljcCArPSBuOwotCQkJCWNvbnRpbnVlOwkvKiBYWFggLSBoYWRfZXJyb3IrKyA/ICovCi0JCQl9Ci0JCQlpZiAobiAhPSBycy0+aG9zdC5oX2xlbmd0aCkgewotCQkJCWNwICs9IG47Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAodHlwZSA9PSBUX0FBQUEpIHsKLQkJCQlzdHJ1Y3QgaW42X2FkZHIgaW42OwotCQkJCW1lbWNweSgmaW42LCBjcCwgSU42QUREUlNaKTsKLQkJCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJmluNikpIHsKLQkJCQkJY3AgKz0gbjsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfQotCQkJaWYgKCFoYXZlYW5zd2VyKSB7Ci0JCQkJaW50IG5uOwotCi0JCQkJcnMtPmhvc3QuaF9uYW1lID0gYnA7Ci0JCQkJbm4gPSBzdHJsZW4oYnApICsgMTsJLyogZm9yIHRoZSBcMCAqLwotCQkJCWJwICs9IG5uOwotCQkJfQotCi0JCQlicCArPSBzaXplb2YoYWxpZ24pIC0KLQkJCSAgICAoc2l6ZV90KSgodV9sb25nKWJwICUgc2l6ZW9mKGFsaWduKSk7Ci0KLQkJCWlmIChicCArIG4gPj0gJnJzLT5ob3N0YnVmW3NpemVvZiBycy0+aG9zdGJ1Zl0pIHsKLQkJCQlkcHJpbnRmKCJzaXplICglZCkgdG9vIGJpZ1xuIiwgcmVzLCBuKTsKLQkJCQloYWRfZXJyb3IrKzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmIChoYXAgPj0gJnJzLT5oX2FkZHJfcHRyc1tNQVhBRERSUy0xXSkgewotCQkJCWlmICghdG9vYmlnKyspCi0JCQkJCWRwcmludGYoIlRvbyBtYW55IGFkZHJlc3NlcyAoJWQpXG4iLAotCQkJCQkJcmVzLCBNQVhBRERSUyk7Ci0JCQkJY3AgKz0gbjsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCSh2b2lkKW1lbWNweSgqaGFwKysgPSBicCwgY3AsIChzaXplX3Qpbik7Ci0JCQlicCArPSBuOwotCQkJY3AgKz0gbjsKLQkJCWlmIChjcCAhPSBlcmRhdGEpIHsKLQkJCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWFib3J0KCk7Ci0JCX0KLQkJaWYgKCFoYWRfZXJyb3IpCi0JCQloYXZlYW5zd2VyKys7Ci0JfQotCWlmIChoYXZlYW5zd2VyKSB7Ci0JCSphcCA9IE5VTEw7Ci0JCSpoYXAgPSBOVUxMOwotCQkvKgotCQkgKiBOb3RlOiB3ZSBzb3J0IGV2ZW4gaWYgaG9zdCBjYW4gdGFrZSBvbmx5IG9uZSBhZGRyZXNzCi0JCSAqIGluIGl0cyByZXR1cm4gc3RydWN0dXJlcyAtIHNob3VsZCBnaXZlIGl0IHRoZSAiYmVzdCIKLQkJICogYWRkcmVzcyBpbiB0aGF0IGNhc2UsIG5vdCBzb21lIHJhbmRvbSBvbmUKLQkJICovCi0JCWlmIChyZXMtPm5zb3J0ICYmIGhhdmVhbnN3ZXIgPiAxICYmIHF0eXBlID09IFRfQSkKLQkJCWFkZHJzb3J0KHJzLT5oX2FkZHJfcHRycywgaGF2ZWFuc3dlciwgcmVzKTsKLQkJaWYgKCFycy0+aG9zdC5oX25hbWUpIHsKLQkJCW4gPSBzdHJsZW4ocW5hbWUpICsgMTsJLyogZm9yIHRoZSBcMCAqLwotCQkJaWYgKG4gPiBlcCAtIGJwIHx8IG4gPj0gTUFYSE9TVE5BTUVMRU4pCi0JCQkJZ290byBub19yZWNvdmVyeTsKLQkJCXN0cmxjcHkoYnAsIHFuYW1lLCAoc2l6ZV90KShlcCAtIGJwKSk7Ci0JCQlycy0+aG9zdC5oX25hbWUgPSBicDsKLQkJCWJwICs9IG47Ci0JCX0KLQkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19VU0VfSU5FVDYpCi0JCQltYXBfdjR2Nl9ob3N0ZW50KCZycy0+aG9zdCwgJmJwLCBlcCk7Ci0JCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOwotCQlyZXR1cm4gJnJzLT5ob3N0OwotCX0KLSBub19yZWNvdmVyeToKLQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLWludAotZ2V0aG9zdGJ5bmFtZV9yKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBob3N0ZW50ICpocCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLAotICAgIHN0cnVjdCBob3N0ZW50KipyZXN1bHQsIGludCAqZXJyb3JwKQotewotICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqcmVzOwotCi0gICAgICAgIHJlcyA9IGdldGhvc3RieW5hbWUobmFtZSk7Ci0gICAgICAgICplcnJvcnAgPSBoX2Vycm5vOwotICAgICAgICBpZiAocmVzID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAqcmVzdWx0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KGhwLCByZXMsIHNpemVvZiAqaHApOwotICAgICAgICAqcmVzdWx0ID0gaHA7Ci0gICAgICAgIHJldHVybiAwOwotfQotCi1zdHJ1Y3QgaG9zdGVudCAqCi1nZXRob3N0YnluYW1lKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGhvc3RlbnQgKmhwOwotCXJlc19zdGF0ZSByZXMgPSBfX3Jlc19nZXRfc3RhdGUoKTsKLQotCWlmIChyZXMgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlhc3NlcnQobmFtZSAhPSBOVUxMKTsKLQotCS8qIHRyeSBJUHY2IGZpcnN0IC0gaWYgdGhhdCBmYWlscyBkbyBJUHY0ICovCi0JaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19VU0VfSU5FVDYpIHsKLQkJaHAgPSBnZXRob3N0YnluYW1lX2ludGVybmFsKG5hbWUsIEFGX0lORVQ2LCByZXMsIE5VTEwsIDApOwotCQlpZiAoaHApIHsKLQkJCV9fcmVzX3B1dF9zdGF0ZShyZXMpOwotCQkJcmV0dXJuIGhwOwotCQl9Ci0JfQotCWhwID0gZ2V0aG9zdGJ5bmFtZV9pbnRlcm5hbChuYW1lLCBBRl9JTkVULCByZXMsIE5VTEwsIDApOwotCV9fcmVzX3B1dF9zdGF0ZShyZXMpOwotCXJldHVybiBocDsKLX0KLQotc3RydWN0IGhvc3RlbnQgKgotZ2V0aG9zdGJ5bmFtZTIoY29uc3QgY2hhciAqbmFtZSwgaW50IGFmKQotewotCXJldHVybiBhbmRyb2lkX2dldGhvc3RieW5hbWVmb3JpZmFjZShuYW1lLCBhZiwgTlVMTCwgMCk7Ci19Ci0KLXN0cnVjdCBob3N0ZW50ICoKLWFuZHJvaWRfZ2V0aG9zdGJ5bmFtZWZvcmlmYWNlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBhZiwgY29uc3QgY2hhciAqaWZhY2UsIGludCBtYXJrKQotewotCXN0cnVjdCBob3N0ZW50ICpocDsKLQlyZXNfc3RhdGUgcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7Ci0KLQlpZiAocmVzID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCWhwID0gZ2V0aG9zdGJ5bmFtZV9pbnRlcm5hbChuYW1lLCBhZiwgcmVzLCBpZmFjZSwgbWFyayk7Ci0JX19yZXNfcHV0X3N0YXRlKHJlcyk7Ci0JcmV0dXJuIGhwOwotfQotCi0KLXN0YXRpYyBGSUxFKiBhbmRyb2lkX29wZW5fcHJveHkoKQotewotCWludCBzb2NrOwotCWNvbnN0IGludCBvbmUgPSAxOwotCXN0cnVjdCBzb2NrYWRkcl91biBwcm94eV9hZGRyOwotCi0Jc29jayA9IHNvY2tldChBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCk7Ci0JaWYgKHNvY2sgPCAwKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmb25lLCBzaXplb2Yob25lKSk7Ci0JbWVtc2V0KCZwcm94eV9hZGRyLCAwLCBzaXplb2YocHJveHlfYWRkcikpOwotCXByb3h5X2FkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7Ci0Jc3RybGNweShwcm94eV9hZGRyLnN1bl9wYXRoLCAiL2Rldi9zb2NrZXQvZG5zcHJveHlkIiwgc2l6ZW9mKHByb3h5X2FkZHIuc3VuX3BhdGgpKTsKLQlpZiAoVEVNUF9GQUlMVVJFX1JFVFJZKGNvbm5lY3Qoc29jaywKLQkJCShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSAmcHJveHlfYWRkciwKLQkJCXNpemVvZihwcm94eV9hZGRyKSkpICE9IDApIHsKLQkJY2xvc2Uoc29jayk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXJldHVybiBmZG9wZW4oc29jaywgInIrIik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqCi1hbmRyb2lkX3JlYWRfaG9zdGVudChGSUxFKiBwcm94eSkKLXsKLQl1aW50MzJfdCBzaXplOwotCWNoYXIgYnVmWzRdOwotCWlmIChmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBwcm94eSkgIT0gc2l6ZW9mKGJ1ZikpIHJldHVybiBOVUxMOwotCi0JLyogVGhpcyBpcyByZWFkaW5nIHNlcmlhbGl6ZWQgZGF0YSBmcm9tIHN5c3RlbS9uZXRkL0Ruc1Byb3h5TGlzdGVuZXIuY3BwCi0JICogYW5kIGNoYW5nZXMgaGVyZSBuZWVkIHRvIGJlIG1hdGNoZWQgdGhlcmUgKi8KLQlpbnQgcmVzdWx0X2NvZGUgPSBzdHJ0b2woYnVmLCBOVUxMLCAxMCk7Ci0JaWYgKHJlc3VsdF9jb2RlICE9IERuc1Byb3h5UXVlcnlSZXN1bHQpIHsKLQkJZnJlYWQoJnNpemUsIDEsIHNpemVvZihzaXplKSwgcHJveHkpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAoZnJlYWQoJnNpemUsIDEsIHNpemVvZihzaXplKSwgcHJveHkpICE9IHNpemVvZihzaXplKSkgcmV0dXJuIE5VTEw7Ci0Jc2l6ZSA9IG50b2hsKHNpemUpOwotCXJlc19zdGF0aWMgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7Ci0JbWVtc2V0KCZycy0+aG9zdCwgMCwgc2l6ZW9mKHJzLT5ob3N0KSk7Ci0JY2hhciAqcHRyID0gcnMtPmhvc3RidWY7Ci0KLQlpZiAoZnJlYWQocHRyLCAxLCBzaXplLCBwcm94eSkgIT0gc2l6ZSkgcmV0dXJuIE5VTEw7Ci0JcHRyICs9IHNpemU7Ci0JcnMtPmhvc3QuaF9uYW1lID0gcnMtPmhvc3RidWY7Ci0KLQljaGFyICoqYWxpYXNlcyA9IHJzLT5ob3N0X2FsaWFzZXM7Ci0JcnMtPmhvc3QuaF9hbGlhc2VzID0gcnMtPmhvc3RfYWxpYXNlczsKLQl3aGlsZSAoMSkgewotCQlpZiAoZnJlYWQoJnNpemUsIDEsIHNpemVvZihzaXplKSwgcHJveHkpICE9IHNpemVvZihzaXplKSkgcmV0dXJuIE5VTEw7Ci0JCXNpemUgPSBudG9obChzaXplKTsKLQotCQlpZiAoc2l6ZSA9PSAwKSB7Ci0JCQkqYWxpYXNlcyA9IE5VTEw7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoZnJlYWQocHRyLCAxLCBzaXplLCBwcm94eSkgIT0gc2l6ZSkgcmV0dXJuIE5VTEw7Ci0JCSphbGlhc2VzKysgPSBwdHI7Ci0JCXB0ciArPSBzaXplOwotCX0KLQotCWlmIChmcmVhZCgmc2l6ZSwgMSwgc2l6ZW9mKHNpemUpLCBwcm94eSkgIT0gc2l6ZW9mKHNpemUpKSByZXR1cm4gTlVMTDsKLQlycy0+aG9zdC5oX2FkZHJ0eXBlID0gbnRvaGwoc2l6ZSk7Ci0KLQlpZiAoZnJlYWQoJnNpemUsIDEsIHNpemVvZihzaXplKSwgcHJveHkpICE9IHNpemVvZihzaXplKSkgcmV0dXJuIE5VTEw7Ci0JcnMtPmhvc3QuaF9sZW5ndGggPSBudG9obChzaXplKTsKLQotCWNoYXIgKiphZGRycyA9IHJzLT5oX2FkZHJfcHRyczsKLQlycy0+aG9zdC5oX2FkZHJfbGlzdCA9IHJzLT5oX2FkZHJfcHRyczsKLQl3aGlsZSAoMSkgewotCQlpZiAoZnJlYWQoJnNpemUsIDEsIHNpemVvZihzaXplKSwgcHJveHkpICE9IHNpemVvZihzaXplKSkgcmV0dXJuIE5VTEw7Ci0JCXNpemUgPSBudG9obChzaXplKTsKLQkJaWYgKHNpemUgPT0gMCkgewotCQkJKmFkZHJzID0gTlVMTDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChmcmVhZChwdHIsIDEsIHNpemUsIHByb3h5KSAhPSBzaXplKSByZXR1cm4gTlVMTDsKLQkJKmFkZHJzKysgPSBwdHI7Ci0JCXB0ciArPSBzaXplOwotCX0KLQotCXJldHVybiAmcnMtPmhvc3Q7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBob3N0ZW50ICoKLWdldGhvc3RieW5hbWVfaW50ZXJuYWxfcmVhbChjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYsIHJlc19zdGF0ZSByZXMpCi17Ci0JY29uc3QgY2hhciAqY3A7Ci0JY2hhciAqYnAsICplcDsKLQlpbnQgc2l6ZTsKLQlzdHJ1Y3QgaG9zdGVudCAqaHA7Ci0JcmVzX3N0YXRpYyBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKLQotCXN0YXRpYyBjb25zdCBuc19kdGFiIGR0YWJbXSA9IHsKLQkJTlNfRklMRVNfQ0IoX2dldGh0YnluYW1lLCBOVUxMKQotCQl7IE5TU1JDX0ROUywgX2Ruc19nZXRodGJ5bmFtZSwgTlVMTCB9LAkvKiBmb3JjZSAtREhFU0lPRCAqLwotCQl7IDAsIDAsIDAgfQotCX07Ci0KLQlhc3NlcnQobmFtZSAhPSBOVUxMKTsKLQotCXN3aXRjaCAoYWYpIHsKLQljYXNlIEFGX0lORVQ6Ci0JCXNpemUgPSBJTkFERFJTWjsKLQkJYnJlYWs7Ci0JY2FzZSBBRl9JTkVUNjoKLQkJc2l6ZSA9IElONkFERFJTWjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOwotCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcnMtPmhvc3QuaF9hZGRydHlwZSA9IGFmOwotCXJzLT5ob3N0LmhfbGVuZ3RoID0gc2l6ZTsKLQotCS8qCi0JICogaWYgdGhlcmUgYXJlbid0IGFueSBkb3RzLCBpdCBjb3VsZCBiZSBhIHVzZXItbGV2ZWwgYWxpYXMuCi0JICogdGhpcyBpcyBhbHNvIGRvbmUgaW4gcmVzX25xdWVyeSgpIHNpbmNlIHdlIGFyZSBub3QgdGhlIG9ubHkKLQkgKiBmdW5jdGlvbiB0aGF0IGxvb2tzIHVwIGhvc3QgbmFtZXMuCi0JICovCi0JaWYgKCFzdHJjaHIobmFtZSwgJy4nKSAmJiAoY3AgPSBfX2hvc3RhbGlhcyhuYW1lKSkpCi0JCW5hbWUgPSBjcDsKLQotCS8qCi0JICogZGlzYWxsb3cgbmFtZXMgY29uc2lzdGluZyBvbmx5IG9mIGRpZ2l0cy9kb3RzLCB1bmxlc3MKLQkgKiB0aGV5IGVuZCBpbiBhIGRvdC4KLQkgKi8KLQlpZiAoaXNkaWdpdCgodV9jaGFyKSBuYW1lWzBdKSkKLQkJZm9yIChjcCA9IG5hbWU7OyArK2NwKSB7Ci0JCQlpZiAoISpjcCkgewotCQkJCWlmICgqLS1jcCA9PSAnLicpCi0JCQkJCWJyZWFrOwotCQkJCS8qCi0JCQkJICogQWxsLW51bWVyaWMsIG5vIGRvdCBhdCB0aGUgZW5kLgotCQkJCSAqIEZha2UgdXAgYSBob3N0ZW50IGFzIGlmIHdlJ2QgYWN0dWFsbHkKLQkJCQkgKiBkb25lIGEgbG9va3VwLgotCQkJCSAqLwotCQkJCWlmIChpbmV0X3B0b24oYWYsIG5hbWUsCi0JCQkJICAgIChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyKSA8PSAwKSB7Ci0JCQkJCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKLQkJCQkJcmV0dXJuIE5VTEw7Ci0JCQkJfQotCQkJCXN0cm5jcHkocnMtPmhvc3RidWYsIG5hbWUsIE1BWEROQU1FKTsKLQkJCQlycy0+aG9zdGJ1ZltNQVhETkFNRV0gPSAnXDAnOwotCQkJCWJwID0gcnMtPmhvc3RidWYgKyBNQVhETkFNRTsKLQkJCQllcCA9IHJzLT5ob3N0YnVmICsgc2l6ZW9mIHJzLT5ob3N0YnVmOwotCQkJCXJzLT5ob3N0LmhfbmFtZSA9IHJzLT5ob3N0YnVmOwotCQkJCXJzLT5ob3N0LmhfYWxpYXNlcyA9IHJzLT5ob3N0X2FsaWFzZXM7Ci0JCQkJcnMtPmhvc3RfYWxpYXNlc1swXSA9IE5VTEw7Ci0JCQkJcnMtPmhfYWRkcl9wdHJzWzBdID0gKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHI7Ci0JCQkJcnMtPmhfYWRkcl9wdHJzWzFdID0gTlVMTDsKLQkJCQlycy0+aG9zdC5oX2FkZHJfbGlzdCA9IHJzLT5oX2FkZHJfcHRyczsKLQkJCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikKLQkJCQkJbWFwX3Y0djZfaG9zdGVudCgmcnMtPmhvc3QsICZicCwgZXApOwotCQkJCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOwotCQkJCXJldHVybiAmcnMtPmhvc3Q7Ci0JCQl9Ci0JCQlpZiAoIWlzZGlnaXQoKHVfY2hhcikgKmNwKSAmJiAqY3AgIT0gJy4nKQotCQkJCWJyZWFrOwotCQl9Ci0JaWYgKChpc3hkaWdpdCgodV9jaGFyKSBuYW1lWzBdKSAmJiBzdHJjaHIobmFtZSwgJzonKSAhPSBOVUxMKSB8fAotCSAgICBuYW1lWzBdID09ICc6JykKLQkJZm9yIChjcCA9IG5hbWU7OyArK2NwKSB7Ci0JCQlpZiAoISpjcCkgewotCQkJCWlmICgqLS1jcCA9PSAnLicpCi0JCQkJCWJyZWFrOwotCQkJCS8qCi0JCQkJICogQWxsLUlQdjYtbGVnYWwsIG5vIGRvdCBhdCB0aGUgZW5kLgotCQkJCSAqIEZha2UgdXAgYSBob3N0ZW50IGFzIGlmIHdlJ2QgYWN0dWFsbHkKLQkJCQkgKiBkb25lIGEgbG9va3VwLgotCQkJCSAqLwotCQkJCWlmIChpbmV0X3B0b24oYWYsIG5hbWUsCi0JCQkJICAgIChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyKSA8PSAwKSB7Ci0JCQkJCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKLQkJCQkJcmV0dXJuIE5VTEw7Ci0JCQkJfQotCQkJCXN0cm5jcHkocnMtPmhvc3RidWYsIG5hbWUsIE1BWEROQU1FKTsKLQkJCQlycy0+aG9zdGJ1ZltNQVhETkFNRV0gPSAnXDAnOwotCQkJCWJwID0gcnMtPmhvc3RidWYgKyBNQVhETkFNRTsKLQkJCQllcCA9IHJzLT5ob3N0YnVmICsgc2l6ZW9mIHJzLT5ob3N0YnVmOwotCQkJCXJzLT5ob3N0LmhfbmFtZSA9IHJzLT5ob3N0YnVmOwotCQkJCXJzLT5ob3N0LmhfYWxpYXNlcyA9IHJzLT5ob3N0X2FsaWFzZXM7Ci0JCQkJcnMtPmhvc3RfYWxpYXNlc1swXSA9IE5VTEw7Ci0JCQkJcnMtPmhfYWRkcl9wdHJzWzBdID0gKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHI7Ci0JCQkJcnMtPmhfYWRkcl9wdHJzWzFdID0gTlVMTDsKLQkJCQlycy0+aG9zdC5oX2FkZHJfbGlzdCA9IHJzLT5oX2FkZHJfcHRyczsKLQkJCQloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKLQkJCQlyZXR1cm4gJnJzLT5ob3N0OwotCQkJfQotCQkJaWYgKCFpc3hkaWdpdCgodV9jaGFyKSAqY3ApICYmICpjcCAhPSAnOicgJiYgKmNwICE9ICcuJykKLQkJCQlicmVhazsKLQkJfQotCi0JaHAgPSBOVUxMOwotCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKLQlpZiAobnNkaXNwYXRjaCgmaHAsIGR0YWIsIE5TREJfSE9TVFMsICJnZXRob3N0YnluYW1lIiwKLQkgICAgZGVmYXVsdF9kbnNfZmlsZXMsIG5hbWUsIHN0cmxlbihuYW1lKSwgYWYpICE9IE5TX1NVQ0NFU1MpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOwotCXJldHVybiBocDsKLX0KLQotCi0vLyB2ZXJ5IHNpbWlsYXIgaW4gcHJveHktbmVzcyB0byBhbmRyb2lkX2dldGFkZHJpbmZvX3Byb3h5Ci1zdGF0aWMgc3RydWN0IGhvc3RlbnQgKgotZ2V0aG9zdGJ5bmFtZV9pbnRlcm5hbChjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYsIHJlc19zdGF0ZSByZXMsIGNvbnN0IGNoYXIgKmlmYWNlLCBpbnQgbWFyaykKLXsKLQljb25zdCBjaGFyICpjYWNoZV9tb2RlID0gZ2V0ZW52KCJBTkRST0lEX0ROU19NT0RFIik7Ci0JRklMRSogcHJveHkgPSBOVUxMOwotCXN0cnVjdCBob3N0ZW50ICpyZXN1bHQgPSBOVUxMOwotCi0JaWYgKGNhY2hlX21vZGUgIT0gTlVMTCAmJiBzdHJjbXAoY2FjaGVfbW9kZSwgImxvY2FsIikgPT0gMCkgewotCQlyZXNfc2V0aWZhY2UocmVzLCBpZmFjZSk7Ci0JCXJlc19zZXRtYXJrKHJlcywgbWFyayk7Ci0JCXJldHVybiBnZXRob3N0YnluYW1lX2ludGVybmFsX3JlYWwobmFtZSwgYWYsIHJlcyk7Ci0JfQotCi0JcHJveHkgPSBhbmRyb2lkX29wZW5fcHJveHkoKTsKLQlpZiAocHJveHkgPT0gTlVMTCkgZ290byBleGl0OwotCi0JLyogVGhpcyBpcyB3cml0aW5nIHRvIHN5c3RlbS9uZXRkL0Ruc1Byb3h5TGlzdGVuZXIuY3BwIGFuZCBjaGFuZ2VzCi0JICogaGVyZSBuZWVkIHRvIGJlIG1hdGNoZWQgdGhlcmUgKi8KLQlpZiAoZnByaW50Zihwcm94eSwgImdldGhvc3RieW5hbWUgJXMgJXMgJWQiLAotCQkJaWZhY2UgPT0gTlVMTCA/ICJeIiA6IGlmYWNlLAotCQkJbmFtZSA9PSBOVUxMID8gIl4iIDogbmFtZSwKLQkJCWFmKSA8IDApIHsKLQkJZ290byBleGl0OwotCX0KLQotCWlmIChmcHV0YygwLCBwcm94eSkgPT0gRU9GIHx8IGZmbHVzaChwcm94eSkgIT0gMCkgewotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JcmVzdWx0ID0gYW5kcm9pZF9yZWFkX2hvc3RlbnQocHJveHkpOwotCi1leGl0OgotCWlmIChwcm94eSAhPSBOVUxMKSB7Ci0JCWZjbG9zZShwcm94eSk7Ci0JfQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLQotc3RydWN0IGhvc3RlbnQgKgotYW5kcm9pZF9nZXRob3N0YnlhZGRyZm9yaWZhY2VfcHJveHkoY29uc3Qgdm9pZCAqYWRkciwKLSAgICBzb2NrbGVuX3QgbGVuLCBpbnQgYWYsIGNvbnN0IGNoYXIqIGlmYWNlLCBpbnQgbWFyaykKLXsKLQlzdHJ1Y3QgaG9zdGVudCAqcmVzdWx0ID0gTlVMTDsKLQlGSUxFKiBwcm94eSA9IGFuZHJvaWRfb3Blbl9wcm94eSgpOwotCi0JaWYgKHByb3h5ID09IE5VTEwpIGdvdG8gZXhpdDsKLQotCWNoYXIgYnVmW0lORVQ2X0FERFJTVFJMRU5dOyAgLy9iaWcgZW5vdWdoIGZvciBJUHY0IGFuZCBJUHY2Ci0JY29uc3QgY2hhciAqIGFkZHJTdHIgPSBpbmV0X250b3AoYWYsIGFkZHIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCWlmIChhZGRyU3RyID09IE5VTEwpIGdvdG8gZXhpdDsKLQotCWlmIChmcHJpbnRmKHByb3h5LCAiZ2V0aG9zdGJ5YWRkciAlcyAlZCAlZCAlcyIsCi0JCQlhZGRyU3RyLCBsZW4sIGFmLCBpZmFjZSA9PSBOVUxMID8gIl4iIDogaWZhY2UpIDwgMCkgewotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKGZwdXRjKDAsIHByb3h5KSA9PSBFT0YgfHwgZmZsdXNoKHByb3h5KSAhPSAwKSB7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlyZXN1bHQgPSBhbmRyb2lkX3JlYWRfaG9zdGVudChwcm94eSk7Ci1leGl0OgotCWlmIChwcm94eSAhPSBOVUxMKSB7Ci0JCWZjbG9zZShwcm94eSk7Ci0JfQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0cnVjdCBob3N0ZW50ICoKLWFuZHJvaWRfZ2V0aG9zdGJ5YWRkcmZvcmlmYWNlX3JlYWwoY29uc3Qgdm9pZCAqYWRkciwKLSAgICBzb2NrbGVuX3QgbGVuLCBpbnQgYWYsIGNvbnN0IGNoYXIqIGlmYWNlLCBpbnQgbWFyaykKLXsKLQljb25zdCB1X2NoYXIgKnVhZGRyID0gKGNvbnN0IHVfY2hhciAqKWFkZHI7Ci0Jc29ja2xlbl90IHNpemU7Ci0Jc3RydWN0IGhvc3RlbnQgKmhwOwotCXN0YXRpYyBjb25zdCBuc19kdGFiIGR0YWJbXSA9IHsKLQkJTlNfRklMRVNfQ0IoX2dldGh0YnlhZGRyLCBOVUxMKQotCQl7IE5TU1JDX0ROUywgX2Ruc19nZXRodGJ5YWRkciwgTlVMTCB9LAkvKiBmb3JjZSAtREhFU0lPRCAqLwotCQl7IDAsIDAsIDAgfQotCX07Ci0KLQlhc3NlcnQoYWRkciAhPSBOVUxMKTsKLQotCWlmIChhZiA9PSBBRl9JTkVUNiAmJiBsZW4gPT0gSU42QUREUlNaICYmCi0JICAgIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKShjb25zdCB2b2lkICopdWFkZHIpIHx8Ci0JICAgICBJTjZfSVNfQUREUl9TSVRFTE9DQUwoKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKShjb25zdCB2b2lkICopdWFkZHIpKSkgewotCQloX2Vycm5vID0gSE9TVF9OT1RfRk9VTkQ7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlpZiAoYWYgPT0gQUZfSU5FVDYgJiYgbGVuID09IElONkFERFJTWiAmJgotCSAgICAoSU42X0lTX0FERFJfVjRNQVBQRUQoKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKShjb25zdCB2b2lkICopdWFkZHIpIHx8Ci0JICAgICBJTjZfSVNfQUREUl9WNENPTVBBVCgoY29uc3Qgc3RydWN0IGluNl9hZGRyICopKGNvbnN0IHZvaWQgKil1YWRkcikpKSB7Ci0JCS8qIFVubWFwLiAqLwotCQlhZGRyICs9IElONkFERFJTWiAtIElOQUREUlNaOwotCQl1YWRkciArPSBJTjZBRERSU1ogLSBJTkFERFJTWjsKLQkJYWYgPSBBRl9JTkVUOwotCQlsZW4gPSBJTkFERFJTWjsKLQl9Ci0Jc3dpdGNoIChhZikgewotCWNhc2UgQUZfSU5FVDoKLQkJc2l6ZSA9IElOQUREUlNaOwotCQlicmVhazsKLQljYXNlIEFGX0lORVQ2OgotCQlzaXplID0gSU42QUREUlNaOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKLQkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JaWYgKHNpemUgIT0gbGVuKSB7Ci0JCWVycm5vID0gRUlOVkFMOwotCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlocCA9IE5VTEw7Ci0JaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOwotCWlmIChuc2Rpc3BhdGNoKCZocCwgZHRhYiwgTlNEQl9IT1NUUywgImdldGhvc3RieWFkZHIiLAotCQlkZWZhdWx0X2Ruc19maWxlcywgdWFkZHIsIGxlbiwgYWYsIGlmYWNlLCBtYXJrKSAhPSBOU19TVUNDRVNTKQotCQlyZXR1cm4gTlVMTDsKLQloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKLQlyZXR1cm4gaHA7Ci19Ci0KLXN0cnVjdCBob3N0ZW50ICoKLWFuZHJvaWRfZ2V0aG9zdGJ5YWRkcmZvcmlmYWNlKGNvbnN0IHZvaWQgKmFkZHIsIHNvY2tsZW5fdCBsZW4sIGludCBhZiwgY29uc3QgY2hhciogaWZhY2UsIGludCBtYXJrKQotewotCWNvbnN0IGNoYXIgKmNhY2hlX21vZGUgPSBnZXRlbnYoIkFORFJPSURfRE5TX01PREUiKTsKLQotCWlmIChjYWNoZV9tb2RlID09IE5VTEwgfHwgc3RyY21wKGNhY2hlX21vZGUsICJsb2NhbCIpICE9IDApIHsKLQkJcmV0dXJuIGFuZHJvaWRfZ2V0aG9zdGJ5YWRkcmZvcmlmYWNlX3Byb3h5KGFkZHIsIGxlbiwgYWYsIGlmYWNlLCBtYXJrKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gYW5kcm9pZF9nZXRob3N0YnlhZGRyZm9yaWZhY2VfcmVhbChhZGRyLGxlbiwgYWYsIGlmYWNlLCBtYXJrKTsKLQl9Ci19Ci0KLXN0cnVjdCBob3N0ZW50ICoKLWdldGhvc3RieWFkZHIoY29uc3Qgdm9pZCAqYWRkciwgc29ja2xlbl90IGxlbiwgaW50IGFmKQotewotCXJldHVybiBhbmRyb2lkX2dldGhvc3RieWFkZHJmb3JpZmFjZShhZGRyLCBsZW4sIGFmLCBOVUxMLCAwKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotX3NldGh0ZW50KGludCBmKQotewotICAgIHJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOwotICAgIGlmIChycyA9PSBOVUxMKSByZXR1cm47Ci0JaWYgKCFycy0+aG9zdGYpCi0JCXJzLT5ob3N0ZiA9IGZvcGVuKF9QQVRIX0hPU1RTLCAiciIgKTsKLQllbHNlCi0JCXJld2luZChycy0+aG9zdGYpOwotCXJzLT5zdGF5b3BlbiA9IGY7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fZW5kaHRlbnQodm9pZCkKLXsKLSAgICByZXNfc3RhdGljICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKLSAgICBpZiAocnMgPT0gTlVMTCkgcmV0dXJuOwotCi0JaWYgKHJzLT5ob3N0ZiAmJiAhcnMtPnN0YXlvcGVuKSB7Ci0JCSh2b2lkKSBmY2xvc2UocnMtPmhvc3RmKTsKLQkJcnMtPmhvc3RmID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqCi1fZ2V0aHRlbnQodm9pZCkKLXsKLQljaGFyICpwOwotCWNoYXIgKmNwLCAqKnE7Ci0JaW50IGFmLCBsZW47Ci0JcmVzX3N0YXRpYyAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7Ci0KLQlpZiAoIXJzLT5ob3N0ZiAmJiAhKHJzLT5ob3N0ZiA9IGZvcGVuKF9QQVRIX0hPU1RTLCAiciIgKSkpIHsKLQkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0gYWdhaW46Ci0JaWYgKCEocCA9IGZnZXRzKHJzLT5ob3N0YnVmLCBzaXplb2YgcnMtPmhvc3RidWYsIHJzLT5ob3N0ZikpKSB7Ci0JCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWlmICgqcCA9PSAnIycpCi0JCWdvdG8gYWdhaW47Ci0JaWYgKCEoY3AgPSBzdHJwYnJrKHAsICIjXG4iKSkpCi0JCWdvdG8gYWdhaW47Ci0JKmNwID0gJ1wwJzsKLQlpZiAoIShjcCA9IHN0cnBicmsocCwgIiBcdCIpKSkKLQkJZ290byBhZ2FpbjsKLQkqY3ArKyA9ICdcMCc7Ci0JaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgcCwgKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIpID4gMCkgewotCQlhZiA9IEFGX0lORVQ2OwotCQlsZW4gPSBJTjZBRERSU1o7Ci0JfSBlbHNlIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgcCwgKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIpID4gMCkgewotCQlyZXNfc3RhdGUgcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7Ci0JCWlmIChyZXMgPT0gTlVMTCkKLQkJCXJldHVybiBOVUxMOwotCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikgewotCQkJbWFwX3Y0djZfYWRkcmVzcygoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkciwKLQkJCSAgICAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcik7Ci0JCQlhZiA9IEFGX0lORVQ2OwotCQkJbGVuID0gSU42QUREUlNaOwotCQl9IGVsc2UgewotCQkJYWYgPSBBRl9JTkVUOwotCQkJbGVuID0gSU5BRERSU1o7Ci0JCX0KLQkJX19yZXNfcHV0X3N0YXRlKHJlcyk7Ci0JfSBlbHNlIHsKLQkJZ290byBhZ2FpbjsKLQl9Ci0JLyogaWYgdGhpcyBpcyBub3Qgc29tZXRoaW5nIHdlJ3JlIGxvb2tpbmcgZm9yLCBza2lwIGl0LiAqLwotCWlmIChycy0+aG9zdC5oX2FkZHJ0eXBlICE9IDAgJiYgcnMtPmhvc3QuaF9hZGRydHlwZSAhPSBhZikKLQkJZ290byBhZ2FpbjsKLQlpZiAocnMtPmhvc3QuaF9sZW5ndGggIT0gMCAmJiBycy0+aG9zdC5oX2xlbmd0aCAhPSBsZW4pCi0JCWdvdG8gYWdhaW47Ci0JcnMtPmhfYWRkcl9wdHJzWzBdID0gKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHI7Ci0JcnMtPmhfYWRkcl9wdHJzWzFdID0gTlVMTDsKLQlycy0+aG9zdC5oX2FkZHJfbGlzdCA9IHJzLT5oX2FkZHJfcHRyczsKLQlycy0+aG9zdC5oX2xlbmd0aCA9IGxlbjsKLQlycy0+aG9zdC5oX2FkZHJ0eXBlID0gYWY7Ci0Jd2hpbGUgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpCi0JCWNwKys7Ci0JcnMtPmhvc3QuaF9uYW1lID0gY3A7Ci0JcSA9IHJzLT5ob3N0LmhfYWxpYXNlcyA9IHJzLT5ob3N0X2FsaWFzZXM7Ci0JaWYgKChjcCA9IHN0cnBicmsoY3AsICIgXHQiKSkgIT0gTlVMTCkKLQkJKmNwKysgPSAnXDAnOwotCXdoaWxlIChjcCAmJiAqY3ApIHsKLQkJaWYgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpIHsKLQkJCWNwKys7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAocSA8ICZycy0+aG9zdF9hbGlhc2VzW01BWEFMSUFTRVMgLSAxXSkKLQkJCSpxKysgPSBjcDsKLQkJaWYgKChjcCA9IHN0cnBicmsoY3AsICIgXHQiKSkgIT0gTlVMTCkKLQkJCSpjcCsrID0gJ1wwJzsKLQl9Ci0JKnEgPSBOVUxMOwotCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOwotCXJldHVybiAmcnMtPmhvc3Q7Ci19Ci0KLS8qQVJHU1VTRUQqLwotaW50Ci1fZ2V0aHRieW5hbWUodm9pZCAqcnYsIHZvaWQgKmNiX2RhdGEsIHZhX2xpc3QgYXApCi17Ci0Jc3RydWN0IGhvc3RlbnQgKmhwOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JaW50IGFmOwotCi0JYXNzZXJ0KHJ2ICE9IE5VTEwpOwotCi0JbmFtZSA9IHZhX2FyZyhhcCwgY2hhciAqKTsKLQkvKiBOT1NUUklDVCBza2lwIGxlbiAqLyh2b2lkKXZhX2FyZyhhcCwgaW50KTsKLQlhZiA9IHZhX2FyZyhhcCwgaW50KTsKLQotCWhwID0gTlVMTDsKLSNpZiAwCi0JewotCQlyZXNfc3RhdGUgcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7Ci0JCWlmIChyZXMgPT0gTlVMTCkKLQkJCXJldHVybiBOU19OT1RGT1VORDsKLQkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19VU0VfSU5FVDYpCi0JCQlocCA9IF9nZXRodGJ5bmFtZTIobmFtZSwgQUZfSU5FVDYpOwotCQlpZiAoaHA9PU5VTEwpCi0JCQlocCA9IF9nZXRodGJ5bmFtZTIobmFtZSwgQUZfSU5FVCk7Ci0JCV9fcmVzX3B1dF9zdGF0ZShyZXMpOwotCX0KLSNlbHNlCi0JaHAgPSBfZ2V0aHRieW5hbWUyKG5hbWUsIGFmKTsKLSNlbmRpZgotCSooKHN0cnVjdCBob3N0ZW50ICoqKXJ2KSA9IGhwOwotCWlmIChocCA9PSBOVUxMKSB7Ci0JCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKLQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCX0KLQlyZXR1cm4gTlNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIHN0cnVjdCBob3N0ZW50ICoKLV9nZXRodGJ5bmFtZTIoY29uc3QgY2hhciAqbmFtZSwgaW50IGFmKQotewotCXN0cnVjdCBob3N0ZW50ICpwOwotCWNoYXIgKnRtcGJ1ZiwgKnB0ciwgKipjcDsKLQlpbnQgbnVtOwotCXNpemVfdCBsZW47Ci0JcmVzX3N0YXRpYyBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKLQotCWFzc2VydChuYW1lICE9IE5VTEwpOwotCi0JX3NldGh0ZW50KHJzLT5zdGF5b3Blbik7Ci0JcHRyID0gdG1wYnVmID0gTlVMTDsKLQludW0gPSAwOwotCXdoaWxlICgocCA9IF9nZXRodGVudCgpKSAhPSBOVUxMICYmIG51bSA8IE1BWEFERFJTKSB7Ci0JCWlmIChwLT5oX2FkZHJ0eXBlICE9IGFmKQotCQkJY29udGludWU7Ci0JCWlmIChzdHJjYXNlY21wKHAtPmhfbmFtZSwgbmFtZSkgIT0gMCkgewotCQkJZm9yIChjcCA9IHAtPmhfYWxpYXNlczsgKmNwICE9IE5VTEw7IGNwKyspCi0JCQkJaWYgKHN0cmNhc2VjbXAoKmNwLCBuYW1lKSA9PSAwKQotCQkJCQlicmVhazsKLQkJCWlmICgqY3AgPT0gTlVMTCkgY29udGludWU7Ci0JCX0KLQotCQlpZiAobnVtID09IDApIHsKLQkJCXNpemVfdCBidWZzaXplOwotCQkJY2hhciAqc3JjOwotCi0JCQlidWZzaXplID0gc3RybGVuKHAtPmhfbmFtZSkgKyAyICsKLQkJCQkgIE1BWEFERFJTICogcC0+aF9sZW5ndGggKwotCQkJCSAgQUxJR05CWVRFUzsKLQkJCWZvciAoY3AgPSBwLT5oX2FsaWFzZXM7ICpjcCAhPSBOVUxMOyBjcCsrKQotCQkJCWJ1ZnNpemUgKz0gc3RybGVuKCpjcCkgKyAxOwotCi0JCQlpZiAoKHRtcGJ1ZiA9IG1hbGxvYyhidWZzaXplKSkgPT0gTlVMTCkgewotCQkJCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0KLQotCQkJcHRyID0gdG1wYnVmOwotCQkJc3JjID0gcC0+aF9uYW1lOwotCQkJd2hpbGUgKCgqcHRyKysgPSAqc3JjKyspICE9ICdcMCcpOwotCQkJZm9yIChjcCA9IHAtPmhfYWxpYXNlczsgKmNwICE9IE5VTEw7IGNwKyspIHsKLQkJCQlzcmMgPSAqY3A7Ci0JCQkJd2hpbGUgKCgqcHRyKysgPSAqc3JjKyspICE9ICdcMCcpOwotCQkJfQotCQkJKnB0cisrID0gJ1wwJzsKLQotCQkJcHRyID0gKGNoYXIgKikodm9pZCAqKUFMSUdOKHB0cik7Ci0JCX0KLQotCQkodm9pZCltZW1jcHkocHRyLCBwLT5oX2FkZHJfbGlzdFswXSwgKHNpemVfdClwLT5oX2xlbmd0aCk7Ci0JCXB0ciArPSBwLT5oX2xlbmd0aDsKLQkJbnVtKys7Ci0JfQotCV9lbmRodGVudCgpOwotCWlmIChudW0gPT0gMCkgcmV0dXJuIE5VTEw7Ci0KLQlsZW4gPSBwdHIgLSB0bXBidWY7Ci0JaWYgKGxlbiA+IChzaXplb2YocnMtPmhvc3RidWYpIC0gQUxJR05CWVRFUykpIHsKLQkJZnJlZSh0bXBidWYpOwotCQllcnJubyA9IEVOT1NQQzsKLQkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcHRyID0gbWVtY3B5KCh2b2lkICopQUxJR04ocnMtPmhvc3RidWYpLCB0bXBidWYsIGxlbik7Ci0JZnJlZSh0bXBidWYpOwotCi0JcnMtPmhvc3QuaF9uYW1lID0gcHRyOwotCXdoaWxlICgqcHRyKyspOwotCi0JY3AgPSBycy0+aG9zdF9hbGlhc2VzOwotCXdoaWxlICgqcHRyKSB7Ci0JCSpjcCsrID0gcHRyOwotCQl3aGlsZSAoKnB0cisrKTsKLQl9Ci0JcHRyKys7Ci0JKmNwID0gTlVMTDsKLQotCXB0ciA9IChjaGFyICopKHZvaWQgKilBTElHTihwdHIpOwotCWNwID0gcnMtPmhfYWRkcl9wdHJzOwotCXdoaWxlIChudW0tLSkgewotCQkqY3ArKyA9IHB0cjsKLQkJcHRyICs9IHJzLT5ob3N0LmhfbGVuZ3RoOwotCX0KLQkqY3AgPSBOVUxMOwotCi0JcmV0dXJuICZycy0+aG9zdDsKLX0KLQotLypBUkdTVVNFRCovCi1zdGF0aWMgaW50Ci1fZ2V0aHRieWFkZHIodm9pZCAqcnYsIHZvaWQgKmNiX2RhdGEsIHZhX2xpc3QgYXApCi17Ci0Jc3RydWN0IGhvc3RlbnQgKnA7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcjsKLQlpbnQgbGVuLCBhZjsKLQlyZXNfc3RhdGljICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKLQotCWFzc2VydChydiAhPSBOVUxMKTsKLQotCWFkZHIgPSB2YV9hcmcoYXAsIHVuc2lnbmVkIGNoYXIgKik7Ci0JbGVuID0gdmFfYXJnKGFwLCBpbnQpOwotCWFmID0gdmFfYXJnKGFwLCBpbnQpOwotCi0JcnMtPmhvc3QuaF9sZW5ndGggPSBsZW47Ci0JcnMtPmhvc3QuaF9hZGRydHlwZSA9IGFmOwotCi0JX3NldGh0ZW50KHJzLT5zdGF5b3Blbik7Ci0Jd2hpbGUgKChwID0gX2dldGh0ZW50KCkpICE9IE5VTEwpCi0JCWlmIChwLT5oX2FkZHJ0eXBlID09IGFmICYmICFtZW1jbXAocC0+aF9hZGRyLCBhZGRyLAotCQkgICAgKHNpemVfdClsZW4pKQotCQkJYnJlYWs7Ci0JX2VuZGh0ZW50KCk7Ci0JKigoc3RydWN0IGhvc3RlbnQgKiopcnYpID0gcDsKLQlpZiAocD09TlVMTCkgewotCQloX2Vycm5vID0gSE9TVF9OT1RfRk9VTkQ7Ci0JCXJldHVybiBOU19OT1RGT1VORDsKLQl9Ci0JcmV0dXJuIE5TX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tYXBfdjR2Nl9hZGRyZXNzKGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0KQotewotCXVfY2hhciAqcCA9ICh1X2NoYXIgKilkc3Q7Ci0JY2hhciB0bXBbSU5BRERSU1pdOwotCWludCBpOwotCi0JYXNzZXJ0KHNyYyAhPSBOVUxMKTsKLQlhc3NlcnQoZHN0ICE9IE5VTEwpOwotCi0JLyogU3Rhc2ggYSB0ZW1wb3JhcnkgY29weSBzbyBvdXIgY2FsbGVyIGNhbiB1cGRhdGUgaW4gcGxhY2UuICovCi0JKHZvaWQpbWVtY3B5KHRtcCwgc3JjLCBJTkFERFJTWik7Ci0JLyogTWFyayB0aGlzIGlwdjYgYWRkciBhcyBhIG1hcHBlZCBpcHY0LiAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotCQkqcCsrID0gMHgwMDsKLQkqcCsrID0gMHhmZjsKLQkqcCsrID0gMHhmZjsKLQkvKiBSZXRyaWV2ZSB0aGUgc2F2ZWQgY29weSBhbmQgd2UncmUgZG9uZS4gKi8KLQkodm9pZCltZW1jcHkoKHZvaWQgKilwLCB0bXAsIElOQUREUlNaKTsKLX0KLQotc3RhdGljIHZvaWQKLW1hcF92NHY2X2hvc3RlbnQoc3RydWN0IGhvc3RlbnQgKmhwLCBjaGFyICoqYnBwLCBjaGFyICplcCkKLXsKLQljaGFyICoqYXA7Ci0KLQlhc3NlcnQoaHAgIT0gTlVMTCk7Ci0JYXNzZXJ0KGJwcCAhPSBOVUxMKTsKLQlhc3NlcnQoZXAgIT0gTlVMTCk7Ci0KLQlpZiAoaHAtPmhfYWRkcnR5cGUgIT0gQUZfSU5FVCB8fCBocC0+aF9sZW5ndGggIT0gSU5BRERSU1opCi0JCXJldHVybjsKLQlocC0+aF9hZGRydHlwZSA9IEFGX0lORVQ2OwotCWhwLT5oX2xlbmd0aCA9IElONkFERFJTWjsKLQlmb3IgKGFwID0gaHAtPmhfYWRkcl9saXN0OyAqYXA7IGFwKyspIHsKLQkJaW50IGkgPSBzaXplb2YoYWxpZ24pIC0gKHNpemVfdCkoKHVfbG9uZykqYnBwICUgc2l6ZW9mKGFsaWduKSk7Ci0KLQkJaWYgKGVwIC0gKmJwcCA8IChpICsgSU42QUREUlNaKSkgewotCQkJLyogT3V0IG9mIG1lbW9yeS4gIFRydW5jYXRlIGFkZHJlc3MgbGlzdCBoZXJlLiAgWFhYICovCi0JCQkqYXAgPSBOVUxMOwotCQkJcmV0dXJuOwotCQl9Ci0JCSpicHAgKz0gaTsKLQkJbWFwX3Y0djZfYWRkcmVzcygqYXAsICpicHApOwotCQkqYXAgPSAqYnBwOwotCQkqYnBwICs9IElONkFERFJTWjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1hZGRyc29ydChjaGFyICoqYXAsIGludCBudW0sIHJlc19zdGF0ZSByZXMpCi17Ci0JaW50IGksIGo7Ci0JY2hhciAqKnA7Ci0Jc2hvcnQgYXZhbFtNQVhBRERSU107Ci0JaW50IG5lZWRzb3J0ID0gMDsKLQotCWFzc2VydChhcCAhPSBOVUxMKTsKLQotCXAgPSBhcDsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyssIHArKykgewotCSAgICBmb3IgKGogPSAwIDsgKHVuc2lnbmVkKWogPCByZXMtPm5zb3J0OyBqKyspCi0JCWlmIChyZXMtPnNvcnRfbGlzdFtqXS5hZGRyLnNfYWRkciA9PQotCQkgICAgKCgoc3RydWN0IGluX2FkZHIgKikodm9pZCAqKSgqcCkpLT5zX2FkZHIgJgotCQkgICAgcmVzLT5zb3J0X2xpc3Rbal0ubWFzaykpCi0JCQlicmVhazsKLQkgICAgYXZhbFtpXSA9IGo7Ci0JICAgIGlmIChuZWVkc29ydCA9PSAwICYmIGkgPiAwICYmIGogPCBhdmFsW2ktMV0pCi0JCW5lZWRzb3J0ID0gaTsKLQl9Ci0JaWYgKCFuZWVkc29ydCkKLQkgICAgcmV0dXJuOwotCi0Jd2hpbGUgKG5lZWRzb3J0IDwgbnVtKSB7Ci0JICAgIGZvciAoaiA9IG5lZWRzb3J0IC0gMTsgaiA+PSAwOyBqLS0pIHsKLQkJaWYgKGF2YWxbal0gPiBhdmFsW2orMV0pIHsKLQkJICAgIGNoYXIgKmhwOwotCi0JCSAgICBpID0gYXZhbFtqXTsKLQkJICAgIGF2YWxbal0gPSBhdmFsW2orMV07Ci0JCSAgICBhdmFsW2orMV0gPSBpOwotCi0JCSAgICBocCA9IGFwW2pdOwotCQkgICAgYXBbal0gPSBhcFtqKzFdOwotCQkgICAgYXBbaisxXSA9IGhwOwotCQl9IGVsc2UKLQkJICAgIGJyZWFrOwotCSAgICB9Ci0JICAgIG5lZWRzb3J0Kys7Ci0JfQotfQotCi1zdHJ1Y3QgaG9zdGVudCAqCi1nZXRob3N0ZW50KHZvaWQpCi17Ci0gICAgcmVzX3N0YXRpYyAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7Ci0JcnMtPmhvc3QuaF9hZGRydHlwZSA9IDA7Ci0JcnMtPmhvc3QuaF9sZW5ndGggPSAwOwotCXJldHVybiBfZ2V0aHRlbnQoKTsKLX0KLQotLypBUkdTVVNFRCovCi1zdGF0aWMgaW50Ci1fZG5zX2dldGh0YnluYW1lKHZvaWQgKnJ2LCB2b2lkICpjYl9kYXRhLCB2YV9saXN0IGFwKQotewotCXF1ZXJ5YnVmICpidWY7Ci0JaW50IG4sIHR5cGU7Ci0Jc3RydWN0IGhvc3RlbnQgKmhwOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JaW50IGFmOwotCXJlc19zdGF0ZSByZXM7Ci0KLQlhc3NlcnQocnYgIT0gTlVMTCk7Ci0KLQluYW1lID0gdmFfYXJnKGFwLCBjaGFyICopOwotCS8qIE5PU1RSSUNUIHNraXAgbGVuICovKHZvaWQpdmFfYXJnKGFwLCBpbnQpOwotCWFmID0gdmFfYXJnKGFwLCBpbnQpOwotCi0Jc3dpdGNoIChhZikgewotCWNhc2UgQUZfSU5FVDoKLQkJdHlwZSA9IFRfQTsKLQkJYnJlYWs7Ci0JY2FzZSBBRl9JTkVUNjoKLQkJdHlwZSA9IFRfQUFBQTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIE5TX1VOQVZBSUw7Ci0JfQotCWJ1ZiA9IG1hbGxvYyhzaXplb2YoKmJ1ZikpOwotCWlmIChidWYgPT0gTlVMTCkgewotCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7Ci0JCXJldHVybiBOU19OT1RGT1VORDsKLQl9Ci0JcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7Ci0JaWYgKHJlcyA9PSBOVUxMKSB7Ci0JCWZyZWUoYnVmKTsKLQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCX0KLQluID0gcmVzX25zZWFyY2gocmVzLCBuYW1lLCBDX0lOLCB0eXBlLCBidWYtPmJ1Ziwgc2l6ZW9mKGJ1Zi0+YnVmKSk7Ci0JaWYgKG4gPCAwKSB7Ci0JCWZyZWUoYnVmKTsKLQkJZHByaW50ZigicmVzX25zZWFyY2ggZmFpbGVkICglZClcbiIsIHJlcywgbik7Ci0JCV9fcmVzX3B1dF9zdGF0ZShyZXMpOwotCQlyZXR1cm4gTlNfTk9URk9VTkQ7Ci0JfQotCWhwID0gZ2V0YW5zd2VyKGJ1ZiwgbiwgbmFtZSwgdHlwZSwgcmVzKTsKLQlmcmVlKGJ1Zik7Ci0JX19yZXNfcHV0X3N0YXRlKHJlcyk7Ci0JaWYgKGhwID09IE5VTEwpCi0JCXN3aXRjaCAoaF9lcnJubykgewotCQljYXNlIEhPU1RfTk9UX0ZPVU5EOgotCQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCQljYXNlIFRSWV9BR0FJTjoKLQkJCXJldHVybiBOU19UUllBR0FJTjsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiBOU19VTkFWQUlMOwotCQl9Ci0JKigoc3RydWN0IGhvc3RlbnQgKiopcnYpID0gaHA7Ci0JcmV0dXJuIE5TX1NVQ0NFU1M7Ci19Ci0KLS8qQVJHU1VTRUQqLwotc3RhdGljIGludAotX2Ruc19nZXRodGJ5YWRkcih2b2lkICpydiwgdm9pZAkqY2JfZGF0YSwgdmFfbGlzdCBhcCkKLXsKLQljaGFyIHFidWZbTUFYRE5BTUUgKyAxXSwgKnFwLCAqZXA7Ci0JaW50IG47Ci0JcXVlcnlidWYgKmJ1ZjsKLQlzdHJ1Y3QgaG9zdGVudCAqaHA7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqdWFkZHI7Ci0JaW50IGxlbiwgYWYsIGFkdmFuY2U7Ci0JcmVzX3N0YXRlIHJlczsKLQljb25zdCBjaGFyKiBpZmFjZTsKLQlpbnQgbWFyazsKLQlyZXNfc3RhdGljIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOwotCi0JYXNzZXJ0KHJ2ICE9IE5VTEwpOwotCi0JdWFkZHIgPSB2YV9hcmcoYXAsIHVuc2lnbmVkIGNoYXIgKik7Ci0JbGVuID0gdmFfYXJnKGFwLCBpbnQpOwotCWFmID0gdmFfYXJnKGFwLCBpbnQpOwotCWlmYWNlID0gdmFfYXJnKGFwLCBjaGFyICopOwotCW1hcmsgPSB2YV9hcmcoYXAsIGludCk7Ci0KLQlzd2l0Y2ggKGFmKSB7Ci0JY2FzZSBBRl9JTkVUOgotCQkodm9pZClzbnByaW50ZihxYnVmLCBzaXplb2YocWJ1ZiksICIldS4ldS4ldS4ldS5pbi1hZGRyLmFycGEiLAotCQkgICAgKHVhZGRyWzNdICYgMHhmZiksICh1YWRkclsyXSAmIDB4ZmYpLAotCQkgICAgKHVhZGRyWzFdICYgMHhmZiksICh1YWRkclswXSAmIDB4ZmYpKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFGX0lORVQ2OgotCQlxcCA9IHFidWY7Ci0JCWVwID0gcWJ1ZiArIHNpemVvZihxYnVmKSAtIDE7Ci0JCWZvciAobiA9IElONkFERFJTWiAtIDE7IG4gPj0gMDsgbi0tKSB7Ci0JCQlhZHZhbmNlID0gc25wcmludGYocXAsIChzaXplX3QpKGVwIC0gcXApLCAiJXguJXguIiwKLQkJCSAgICB1YWRkcltuXSAmIDB4ZiwKLQkJCSAgICAoKHVuc2lnbmVkIGludCl1YWRkcltuXSA+PiA0KSAmIDB4Zik7Ci0JCQlpZiAoYWR2YW5jZSA+IDAgJiYgcXAgKyBhZHZhbmNlIDwgZXApCi0JCQkJcXAgKz0gYWR2YW5jZTsKLQkJCWVsc2UgewotCQkJCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKLQkJCQlyZXR1cm4gTlNfTk9URk9VTkQ7Ci0JCQl9Ci0JCX0KLQkJaWYgKHN0cmxjYXQocWJ1ZiwgImlwNi5hcnBhIiwgc2l6ZW9mKHFidWYpKSA+PSBzaXplb2YocWJ1ZikpIHsKLQkJCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKLQkJCXJldHVybiBOU19OT1RGT1VORDsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlhYm9ydCgpOwotCX0KLQotCWJ1ZiA9IG1hbGxvYyhzaXplb2YoKmJ1ZikpOwotCWlmIChidWYgPT0gTlVMTCkgewotCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7Ci0JCXJldHVybiBOU19OT1RGT1VORDsKLQl9Ci0JcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7Ci0JaWYgKHJlcyA9PSBOVUxMKSB7Ci0JCWZyZWUoYnVmKTsKLQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCX0KLQlyZXNfc2V0aWZhY2UocmVzLCBpZmFjZSk7Ci0JcmVzX3NldG1hcmsocmVzLCBtYXJrKTsKLQluID0gcmVzX25xdWVyeShyZXMsIHFidWYsIENfSU4sIFRfUFRSLCBidWYtPmJ1Ziwgc2l6ZW9mKGJ1Zi0+YnVmKSk7Ci0JaWYgKG4gPCAwKSB7Ci0JCWZyZWUoYnVmKTsKLQkJZHByaW50ZigicmVzX25xdWVyeSBmYWlsZWQgKCVkKVxuIiwgcmVzLCBuKTsKLQkJX19yZXNfcHV0X3N0YXRlKHJlcyk7Ci0JCXJldHVybiBOU19OT1RGT1VORDsKLQl9Ci0JaHAgPSBnZXRhbnN3ZXIoYnVmLCBuLCBxYnVmLCBUX1BUUiwgcmVzKTsKLQlmcmVlKGJ1Zik7Ci0JaWYgKGhwID09IE5VTEwpIHsKLQkJX19yZXNfcHV0X3N0YXRlKHJlcyk7Ci0JCXN3aXRjaCAoaF9lcnJubykgewotCQljYXNlIEhPU1RfTk9UX0ZPVU5EOgotCQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCQljYXNlIFRSWV9BR0FJTjoKLQkJCXJldHVybiBOU19UUllBR0FJTjsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiBOU19VTkFWQUlMOwotCQl9Ci0JfQotCWhwLT5oX2FkZHJ0eXBlID0gYWY7Ci0JaHAtPmhfbGVuZ3RoID0gbGVuOwotCSh2b2lkKW1lbWNweShycy0+aG9zdF9hZGRyLCB1YWRkciwgKHNpemVfdClsZW4pOwotCXJzLT5oX2FkZHJfcHRyc1swXSA9IChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyOwotCXJzLT5oX2FkZHJfcHRyc1sxXSA9IE5VTEw7Ci0JaWYgKGFmID09IEFGX0lORVQgJiYgKHJlcy0+b3B0aW9ucyAmIFJFU19VU0VfSU5FVDYpKSB7Ci0JCW1hcF92NHY2X2FkZHJlc3MoKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIsCi0JCSAgICAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcik7Ci0JCWhwLT5oX2FkZHJ0eXBlID0gQUZfSU5FVDY7Ci0JCWhwLT5oX2xlbmd0aCA9IElONkFERFJTWjsKLQl9Ci0KLQlfX3Jlc19wdXRfc3RhdGUocmVzKTsKLQkqKChzdHJ1Y3QgaG9zdGVudCAqKilydikgPSBocDsKLQloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKLQlyZXR1cm4gTlNfU1VDQ0VTUzsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL2luZXQvbnNhcF9hZGRyLmMgYi9saWJjL25ldGJzZC9pbmV0L25zYXBfYWRkci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMThiZDMzLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL2luZXQvbnNhcF9hZGRyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoJJE5ldEJTRDogbnNhcF9hZGRyLmMsdiAxLjIgMjAwNC8wNS8yMCAyMzoxMjozMyBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmIDAKLXN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zYXBfYWRkci5jLHYgMS4yLjIwNi4xIDIwMDQvMDMvMDkgMDg6MzM6MzMgbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiBuc2FwX2FkZHIuYyx2IDEuMiAyMDA0LzA1LzIwIDIzOjEyOjMzIGNocmlzdG9zIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCi0jZWxzZQotI2luY2x1ZGUgPHJlc29sdi5oPgotI2VuZGlmCi0KLXN0YXRpYyBjaGFyCi14dG9iKGludCBjKSB7Ci0JcmV0dXJuIChjIC0gKCgoYyA+PSAnMCcpICYmIChjIDw9ICc5JykpID8gJzAnIDogJzcnKSk7Ci19Ci0KLXVfaW50Ci1pbmV0X25zYXBfYWRkcihjb25zdCBjaGFyICphc2NpaSwgdV9jaGFyICpiaW5hcnksIGludCBtYXhsZW4pIHsKLQl1X2NoYXIgYywgbmliOwotCXVfaW50IGxlbiA9IDA7Ci0KLQlhc3NlcnQoYXNjaWkgIT0gTlVMTCk7Ci0JYXNzZXJ0KGJpbmFyeSAhPSBOVUxMKTsKLQotCWlmIChhc2NpaVswXSAhPSAnMCcgfHwgKGFzY2lpWzFdICE9ICd4JyAmJiBhc2NpaVsxXSAhPSAnWCcpKQotCQlyZXR1cm4gKDApOwotCWFzY2lpICs9IDI7Ci0KLQl3aGlsZSAoKGMgPSAqYXNjaWkrKykgIT0gJ1wwJyAmJiBsZW4gPCAodV9pbnQpbWF4bGVuKSB7Ci0JCWlmIChjID09ICcuJyB8fCBjID09ICcrJyB8fCBjID09ICcvJykKLQkJCWNvbnRpbnVlOwotCQlpZiAoIWlzYXNjaWkoYykpCi0JCQlyZXR1cm4gKDApOwotCQlpZiAoaXNsb3dlcihjKSkKLQkJCWMgPSB0b3VwcGVyKGMpOwotCQlpZiAoaXN4ZGlnaXQoYykpIHsKLQkJCW5pYiA9IHh0b2IoYyk7Ci0JCQljID0gKmFzY2lpKys7Ci0JCQlpZiAoYyAhPSAnXDAnKSB7Ci0JCQkJYyA9IHRvdXBwZXIoYyk7Ci0JCQkJaWYgKGlzeGRpZ2l0KGMpKSB7Ci0JCQkJCSpiaW5hcnkrKyA9IChuaWIgPDwgNCkgfCB4dG9iKGMpOwotCQkJCQlsZW4rKzsKLQkJCQl9IGVsc2UKLQkJCQkJcmV0dXJuICgwKTsKLQkJCX0KLQkJCWVsc2UKLQkJCQlyZXR1cm4gKDApOwotCQl9Ci0JCWVsc2UKLQkJCXJldHVybiAoMCk7Ci0JfQotCXJldHVybiAobGVuKTsKLX0KLQotY2hhciAqCi1pbmV0X25zYXBfbnRvYShpbnQgYmlubGVuLCBjb25zdCB1X2NoYXIgKmJpbmFyeSwgY2hhciAqYXNjaWkpIHsKLQlpbnQgbmliOwotCWludCBpOwotCXN0YXRpYyBjaGFyIHRtcGJ1ZlsyKzI1NSozXTsKLQljaGFyICpzdGFydDsKLQotCWFzc2VydChiaW5hcnkgIT0gTlVMTCk7Ci0KLQlpZiAoYXNjaWkpCi0JCXN0YXJ0ID0gYXNjaWk7Ci0JZWxzZSB7Ci0JCWFzY2lpID0gdG1wYnVmOwotCQlzdGFydCA9IHRtcGJ1ZjsKLQl9Ci0KLQkqYXNjaWkrKyA9ICcwJzsKLQkqYXNjaWkrKyA9ICd4JzsKLQotCWlmIChiaW5sZW4gPiAyNTUpCi0JCWJpbmxlbiA9IDI1NTsKLQotCWZvciAoaSA9IDA7IGkgPCBiaW5sZW47IGkrKykgewotCQluaWIgPSAodV9pbnQzMl90KSpiaW5hcnkgPj4gNDsKLQkJKmFzY2lpKysgPSBuaWIgKyAobmliIDwgMTAgPyAnMCcgOiAnNycpOwotCQluaWIgPSAqYmluYXJ5KysgJiAweDBmOwotCQkqYXNjaWkrKyA9IG5pYiArIChuaWIgPCAxMCA/ICcwJyA6ICc3Jyk7Ci0JCWlmICgoKGkgJSAyKSA9PSAwICYmIChpICsgMSkgPCBiaW5sZW4pKQotCQkJKmFzY2lpKysgPSAnLic7Ci0JfQotCSphc2NpaSA9ICdcMCc7Ci0JcmV0dXJuIChzdGFydCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uYW1lc2VyL25zX25hbWUuYyBiL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfbmFtZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWQyZjYwLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfbmFtZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcwICswLDAgQEAKLS8qCSROZXRCU0Q6IG5zX25hbWUuYyx2IDEuMyAyMDA0LzExLzA3IDAyOjE5OjQ5IGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWZuZGVmIGxpbnQKLSNpZmRlZiBub3RkZWYKLXN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zX25hbWUuYyx2IDEuMy4yLjQuNC4yIDIwMDQvMDUvMDQgMDM6Mjc6NDcgbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiBuc19uYW1lLmMsdiAxLjMgMjAwNC8xMS8wNyAwMjoxOTo0OSBjaHJpc3RvcyBFeHAgJCIpOwotI2VuZGlmCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLSNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2Vsc2UKLSNpbmNsdWRlIDxyZXNvbHYuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0KLSNpZmRlZiBTUFJJTlRGX0NIQVIKLSMgZGVmaW5lIFNQUklOVEYoeCkgc3RybGVuKHNwcmludGYvKioveCkKLSNlbHNlCi0jIGRlZmluZSBTUFJJTlRGKHgpICgoc2l6ZV90KXNwcmludGYgeCkKLSNlbmRpZgotCi0jZGVmaW5lIE5TX1RZUEVfRUxUCQkJMHg0MCAvKiBFRE5TMCBleHRlbmRlZCBsYWJlbCB0eXBlICovCi0jZGVmaW5lIEROU19MQUJFTFRZUEVfQklUU1RSSU5HCQkweDQxCi0KLS8qIERhdGEuICovCi0KLXN0YXRpYyBjb25zdCBjaGFyCWRpZ2l0c1tdID0gIjAxMjM0NTY3ODkiOwotCi1zdGF0aWMgY29uc3QgY2hhciBkaWdpdHZhbHVlWzI1Nl0gPSB7Ci0JLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCS8qMTYqLwotCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjMyKi8KLQktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyo0OCovCi0JIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qNjQqLwotCS0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjgwKi8KLQktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyo5NiovCi0JLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qMTEyKi8KLQktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyoxMjgqLwotCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjI1NiovCi19OwotCi0vKiBGb3J3YXJkLiAqLwotCi1zdGF0aWMgaW50CQlzcGVjaWFsKGludCk7Ci1zdGF0aWMgaW50CQlwcmludGFibGUoaW50KTsKLXN0YXRpYyBpbnQJCWRuX2ZpbmQoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAotCQkJCWNvbnN0IHVfY2hhciAqIGNvbnN0ICosCi0JCQkJY29uc3QgdV9jaGFyICogY29uc3QgKik7Ci1zdGF0aWMgaW50CQllbmNvZGVfYml0c3JpbmcoY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqLAotCQkJCQl1bnNpZ25lZCBjaGFyICoqLCB1bnNpZ25lZCBjaGFyICoqLAotCQkJCQl1bnNpZ25lZCBjb25zdCBjaGFyICopOwotc3RhdGljIGludAkJbGFiZWxsZW4oY29uc3QgdV9jaGFyICopOwotc3RhdGljIGludAkJZGVjb2RlX2JpdHN0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICoqLAotCQkJCQkgY2hhciAqLCBjb25zdCBjaGFyICopOwotCi0vKiBQdWJsaWMuICovCi0KLS8qCi0gKiBuc19uYW1lX250b3Aoc3JjLCBkc3QsIGRzdHNpeikKLSAqCUNvbnZlcnQgYW4gZW5jb2RlZCBkb21haW4gbmFtZSB0byBwcmludGFibGUgYXNjaWkgYXMgcGVyIFJGQzEwMzUuCi0gKiByZXR1cm46Ci0gKglOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byBidWZmZXIsIG9yIC0xICh3aXRoIGVycm5vIHNldCkKLSAqIG5vdGVzOgotICoJVGhlIHJvb3QgaXMgcmV0dXJuZWQgYXMgIi4iCi0gKglBbGwgb3RoZXIgZG9tYWlucyBhcmUgcmV0dXJuZWQgaW4gbm9uIGFic29sdXRlIGZvcm0KLSAqLwotaW50Ci1uc19uYW1lX250b3AoY29uc3QgdV9jaGFyICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpeikKLXsKLQljb25zdCB1X2NoYXIgKmNwOwotCWNoYXIgKmRuLCAqZW9tOwotCXVfY2hhciBjOwotCXVfaW50IG47Ci0JaW50IGw7Ci0KLQljcCA9IHNyYzsKLQlkbiA9IGRzdDsKLQllb20gPSBkc3QgKyBkc3RzaXo7Ci0KLQl3aGlsZSAoKG4gPSAqY3ArKykgIT0gMCkgewotCQlpZiAoKG4gJiBOU19DTVBSU0ZMR1MpID09IE5TX0NNUFJTRkxHUykgewotCQkJLyogU29tZSBraW5kIG9mIGNvbXByZXNzaW9uIHBvaW50ZXIuICovCi0JCQllcnJubyA9IEVNU0dTSVpFOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQkJaWYgKGRuICE9IGRzdCkgewotCQkJaWYgKGRuID49IGVvbSkgewotCQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9Ci0JCQkqZG4rKyA9ICcuJzsKLQkJfQotCQlpZiAoKGwgPSBsYWJlbGxlbihjcCAtIDEpKSA8IDApIHsKLQkJCWVycm5vID0gRU1TR1NJWkU7IC8qIFhYWCAqLwotCQkJcmV0dXJuKC0xKTsKLQkJfQotCQlpZiAoZG4gKyBsID49IGVvbSkgewotCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCWlmICgobiAmIE5TX0NNUFJTRkxHUykgPT0gTlNfVFlQRV9FTFQpIHsKLQkJCWludCBtOwotCi0JCQlpZiAobiAhPSBETlNfTEFCRUxUWVBFX0JJVFNUUklORykgewotCQkJCS8qIFhYWDogbGFiZWxsZW4gc2hvdWxkIHJlamVjdCB0aGlzIGNhc2UgKi8KLQkJCQllcnJubyA9IEVJTlZBTDsKLQkJCQlyZXR1cm4oLTEpOwotCQkJfQotCQkJaWYgKChtID0gZGVjb2RlX2JpdHN0cmluZygmY3AsIGRuLCBlb20pKSA8IDApCi0JCQl7Ci0JCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCQlyZXR1cm4oLTEpOwotCQkJfQotCQkJZG4gKz0gbTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWZvciAoOyBsID4gMDsgbC0tKSB7Ci0JCQljID0gKmNwKys7Ci0JCQlpZiAoc3BlY2lhbChjKSkgewotCQkJCWlmIChkbiArIDEgPj0gZW9tKSB7Ci0JCQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQkJCXJldHVybiAoLTEpOwotCQkJCX0KLQkJCQkqZG4rKyA9ICdcXCc7Ci0JCQkJKmRuKysgPSAoY2hhciljOwotCQkJfSBlbHNlIGlmICghcHJpbnRhYmxlKGMpKSB7Ci0JCQkJaWYgKGRuICsgMyA+PSBlb20pIHsKLQkJCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCQkJcmV0dXJuICgtMSk7Ci0JCQkJfQotCQkJCSpkbisrID0gJ1xcJzsKLQkJCQkqZG4rKyA9IGRpZ2l0c1tjIC8gMTAwXTsKLQkJCQkqZG4rKyA9IGRpZ2l0c1soYyAlIDEwMCkgLyAxMF07Ci0JCQkJKmRuKysgPSBkaWdpdHNbYyAlIDEwXTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGRuID49IGVvbSkgewotCQkJCQllcnJubyA9IEVNU0dTSVpFOwotCQkJCQlyZXR1cm4gKC0xKTsKLQkJCQl9Ci0JCQkJKmRuKysgPSAoY2hhciljOwotCQkJfQotCQl9Ci0JfQotCWlmIChkbiA9PSBkc3QpIHsKLQkJaWYgKGRuID49IGVvbSkgewotCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCSpkbisrID0gJy4nOwotCX0KLQlpZiAoZG4gPj0gZW9tKSB7Ci0JCWVycm5vID0gRU1TR1NJWkU7Ci0JCXJldHVybiAoLTEpOwotCX0KLQkqZG4rKyA9ICdcMCc7Ci0JcmV0dXJuIChkbiAtIGRzdCk7Ci19Ci0KLS8qCi0gKiBuc19uYW1lX3B0b24oc3JjLCBkc3QsIGRzdHNpeikKLSAqCUNvbnZlcnQgYSBhc2NpaSBzdHJpbmcgaW50byBhbiBlbmNvZGVkIGRvbWFpbiBuYW1lIGFzIHBlciBSRkMxMDM1LgotICogcmV0dXJuOgotICoJLTEgaWYgaXQgZmFpbHMKLSAqCTEgaWYgc3RyaW5nIHdhcyBmdWxseSBxdWFsaWZpZWQKLSAqCTAgaXMgc3RyaW5nIHdhcyBub3QgZnVsbHkgcXVhbGlmaWVkCi0gKiBub3RlczoKLSAqCUVuZm9yY2VzIGxhYmVsIGFuZCBkb21haW4gbGVuZ3RoIGxpbWl0cy4KLSAqLwotCi1pbnQKLW5zX25hbWVfcHRvbihjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6KQotewotCXVfY2hhciAqbGFiZWwsICpicCwgKmVvbTsKLQlpbnQgYywgbiwgZXNjYXBlZCwgZSA9IDA7Ci0JY2hhciAqY3A7Ci0KLQllc2NhcGVkID0gMDsKLQlicCA9IGRzdDsKLQllb20gPSBkc3QgKyBkc3RzaXo7Ci0JbGFiZWwgPSBicCsrOwotCi0Jd2hpbGUgKChjID0gKnNyYysrKSAhPSAwKSB7Ci0JCWlmIChlc2NhcGVkKSB7Ci0JCQlpZiAoYyA9PSAnWycpIHsgLyogc3RhcnQgYSBiaXQgc3RyaW5nIGxhYmVsICovCi0JCQkJaWYgKChjcCA9IHN0cmNocihzcmMsICddJykpID09IE5VTEwpIHsKLQkJCQkJZXJybm8gPSBFSU5WQUw7IC8qID8/PyAqLwotCQkJCQlyZXR1cm4oLTEpOwotCQkJCX0KLQkJCQlpZiAoKGUgPSBlbmNvZGVfYml0c3JpbmcoJnNyYywgY3AgKyAyLAotCQkJCQkJCSAmbGFiZWwsICZicCwgZW9tKSkKLQkJCQkgICAgIT0gMCkgewotCQkJCQllcnJubyA9IGU7Ci0JCQkJCXJldHVybigtMSk7Ci0JCQkJfQotCQkJCWVzY2FwZWQgPSAwOwotCQkJCWxhYmVsID0gYnArKzsKLQkJCQlpZiAoKGMgPSAqc3JjKyspID09IDApCi0JCQkJCWdvdG8gZG9uZTsKLQkJCQllbHNlIGlmIChjICE9ICcuJykgewotCQkJCQllcnJubyA9IEVJTlZBTDsKLQkJCQkJcmV0dXJuKC0xKTsKLQkJCQl9Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQllbHNlIGlmICgoY3AgPSBzdHJjaHIoZGlnaXRzLCBjKSkgIT0gTlVMTCkgewotCQkJCW4gPSAoY3AgLSBkaWdpdHMpICogMTAwOwotCQkJCWlmICgoYyA9ICpzcmMrKykgPT0gMCB8fAotCQkJCSAgICAoY3AgPSBzdHJjaHIoZGlnaXRzLCBjKSkgPT0gTlVMTCkgewotCQkJCQllcnJubyA9IEVNU0dTSVpFOwotCQkJCQlyZXR1cm4gKC0xKTsKLQkJCQl9Ci0JCQkJbiArPSAoY3AgLSBkaWdpdHMpICogMTA7Ci0JCQkJaWYgKChjID0gKnNyYysrKSA9PSAwIHx8Ci0JCQkJICAgIChjcCA9IHN0cmNocihkaWdpdHMsIGMpKSA9PSBOVUxMKSB7Ci0JCQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQkJCXJldHVybiAoLTEpOwotCQkJCX0KLQkJCQluICs9IChjcCAtIGRpZ2l0cyk7Ci0JCQkJaWYgKG4gPiAyNTUpIHsKLQkJCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCQkJcmV0dXJuICgtMSk7Ci0JCQkJfQotCQkJCWMgPSBuOwotCQkJfQotCQkJZXNjYXBlZCA9IDA7Ci0JCX0gZWxzZSBpZiAoYyA9PSAnXFwnKSB7Ci0JCQllc2NhcGVkID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9IGVsc2UgaWYgKGMgPT0gJy4nKSB7Ci0JCQljID0gKGJwIC0gbGFiZWwgLSAxKTsKLQkJCWlmICgoYyAmIE5TX0NNUFJTRkxHUykgIT0gMCkgewkvKiBMYWJlbCB0b28gYmlnLiAqLwotCQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9Ci0JCQlpZiAobGFiZWwgPj0gZW9tKSB7Ci0JCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCQlyZXR1cm4gKC0xKTsKLQkJCX0KLQkJCSpsYWJlbCA9IGM7Ci0JCQkvKiBGdWxseSBxdWFsaWZpZWQgPyAqLwotCQkJaWYgKCpzcmMgPT0gJ1wwJykgewotCQkJCWlmIChjICE9IDApIHsKLQkJCQkJaWYgKGJwID49IGVvbSkgewotCQkJCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCQkJCXJldHVybiAoLTEpOwotCQkJCQl9Ci0JCQkJCSpicCsrID0gJ1wwJzsKLQkJCQl9Ci0JCQkJaWYgKChicCAtIGRzdCkgPiBNQVhDRE5BTUUpIHsKLQkJCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCQkJcmV0dXJuICgtMSk7Ci0JCQkJfQotCQkJCXJldHVybiAoMSk7Ci0JCQl9Ci0JCQlpZiAoYyA9PSAwIHx8ICpzcmMgPT0gJy4nKSB7Ci0JCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCQlyZXR1cm4gKC0xKTsKLQkJCX0KLQkJCWxhYmVsID0gYnArKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChicCA+PSBlb20pIHsKLQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQlyZXR1cm4gKC0xKTsKLQkJfQotCQkqYnArKyA9ICh1X2NoYXIpYzsKLQl9Ci0JYyA9IChicCAtIGxhYmVsIC0gMSk7Ci0JaWYgKChjICYgTlNfQ01QUlNGTEdTKSAhPSAwKSB7CQkvKiBMYWJlbCB0b28gYmlnLiAqLwotCQllcnJubyA9IEVNU0dTSVpFOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0gIGRvbmU6Ci0JaWYgKGxhYmVsID49IGVvbSkgewotCQllcnJubyA9IEVNU0dTSVpFOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JKmxhYmVsID0gYzsKLQlpZiAoYyAhPSAwKSB7Ci0JCWlmIChicCA+PSBlb20pIHsKLQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQlyZXR1cm4gKC0xKTsKLQkJfQotCQkqYnArKyA9IDA7Ci0JfQotCWlmICgoYnAgLSBkc3QpID4gTUFYQ0ROQU1FKSB7CS8qIHNyYyB0b28gYmlnICovCi0JCWVycm5vID0gRU1TR1NJWkU7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogbnNfbmFtZV9udG9sKHNyYywgZHN0LCBkc3RzaXopCi0gKglDb252ZXJ0IGEgbmV0d29yayBzdHJpbmdzIGxhYmVscyBpbnRvIGFsbCBsb3dlcmNhc2UuCi0gKiByZXR1cm46Ci0gKglOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byBidWZmZXIsIG9yIC0xICh3aXRoIGVycm5vIHNldCkKLSAqIG5vdGVzOgotICoJRW5mb3JjZXMgbGFiZWwgYW5kIGRvbWFpbiBsZW5ndGggbGltaXRzLgotICovCi0KLWludAotbnNfbmFtZV9udG9sKGNvbnN0IHVfY2hhciAqc3JjLCB1X2NoYXIgKmRzdCwgc2l6ZV90IGRzdHNpeikKLXsKLQljb25zdCB1X2NoYXIgKmNwOwotCXVfY2hhciAqZG4sICplb207Ci0JdV9jaGFyIGM7Ci0JdV9pbnQgbjsKLQlpbnQgbDsKLQotCWNwID0gc3JjOwotCWRuID0gZHN0OwotCWVvbSA9IGRzdCArIGRzdHNpejsKLQotCWlmIChkbiA+PSBlb20pIHsKLQkJZXJybm8gPSBFTVNHU0laRTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXdoaWxlICgobiA9ICpjcCsrKSAhPSAwKSB7Ci0JCWlmICgobiAmIE5TX0NNUFJTRkxHUykgPT0gTlNfQ01QUlNGTEdTKSB7Ci0JCQkvKiBTb21lIGtpbmQgb2YgY29tcHJlc3Npb24gcG9pbnRlci4gKi8KLQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQlyZXR1cm4gKC0xKTsKLQkJfQotCQkqZG4rKyA9IG47Ci0JCWlmICgobCA9IGxhYmVsbGVuKGNwIC0gMSkpIDwgMCkgewotCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCWlmIChkbiArIGwgPj0gZW9tKSB7Ci0JCQllcnJubyA9IEVNU0dTSVpFOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQkJZm9yICg7IGwgPiAwOyBsLS0pIHsKLQkJCWMgPSAqY3ArKzsKLQkJCWlmIChpc3VwcGVyKGMpKQotCQkJCSpkbisrID0gdG9sb3dlcihjKTsKLQkJCWVsc2UKLQkJCQkqZG4rKyA9IGM7Ci0JCX0KLQl9Ci0JKmRuKysgPSAnXDAnOwotCXJldHVybiAoZG4gLSBkc3QpOwotfQotCi0vKgotICogbnNfbmFtZV91bnBhY2sobXNnLCBlb20sIHNyYywgZHN0LCBkc3RzaXopCi0gKglVbnBhY2sgYSBkb21haW4gbmFtZSBmcm9tIGEgbWVzc2FnZSwgc291cmNlIG1heSBiZSBjb21wcmVzc2VkLgotICogcmV0dXJuOgotICoJLTEgaWYgaXQgZmFpbHMsIG9yIGNvbnN1bWVkIG9jdGV0cyBpZiBpdCBzdWNjZWVkcy4KLSAqLwotaW50Ci1uc19uYW1lX3VucGFjayhjb25zdCB1X2NoYXIgKm1zZywgY29uc3QgdV9jaGFyICplb20sIGNvbnN0IHVfY2hhciAqc3JjLAotCSAgICAgICB1X2NoYXIgKmRzdCwgc2l6ZV90IGRzdHNpeikKLXsKLQljb25zdCB1X2NoYXIgKnNyY3AsICpkc3RsaW07Ci0JdV9jaGFyICpkc3RwOwotCWludCBuLCBsZW4sIGNoZWNrZWQsIGw7Ci0KLQlsZW4gPSAtMTsKLQljaGVja2VkID0gMDsKLQlkc3RwID0gZHN0OwotCXNyY3AgPSBzcmM7Ci0JZHN0bGltID0gZHN0ICsgZHN0c2l6OwotCWlmIChzcmNwIDwgbXNnIHx8IHNyY3AgPj0gZW9tKSB7Ci0JCWVycm5vID0gRU1TR1NJWkU7Ci0JCXJldHVybiAoLTEpOwotCX0KLQkvKiBGZXRjaCBuZXh0IGxhYmVsIGluIGRvbWFpbiBuYW1lLiAqLwotCXdoaWxlICgobiA9ICpzcmNwKyspICE9IDApIHsKLQkJLyogQ2hlY2sgZm9yIGluZGlyZWN0aW9uLiAqLwotCQlzd2l0Y2ggKG4gJiBOU19DTVBSU0ZMR1MpIHsKLQkJY2FzZSAwOgotCQljYXNlIE5TX1RZUEVfRUxUOgotCQkJLyogTGltaXQgY2hlY2tzLiAqLwotCQkJaWYgKChsID0gbGFiZWxsZW4oc3JjcCAtIDEpKSA8IDApIHsKLQkJCQllcnJubyA9IEVNU0dTSVpFOwotCQkJCXJldHVybigtMSk7Ci0JCQl9Ci0JCQlpZiAoZHN0cCArIGwgKyAxID49IGRzdGxpbSB8fCBzcmNwICsgbCA+PSBlb20pIHsKLQkJCQllcnJubyA9IEVNU0dTSVpFOwotCQkJCXJldHVybiAoLTEpOwotCQkJfQotCQkJY2hlY2tlZCArPSBsICsgMTsKLQkJCSpkc3RwKysgPSBuOwotCQkJbWVtY3B5KGRzdHAsIHNyY3AsIChzaXplX3QpbCk7Ci0JCQlkc3RwICs9IGw7Ci0JCQlzcmNwICs9IGw7Ci0JCQlicmVhazsKLQotCQljYXNlIE5TX0NNUFJTRkxHUzoKLQkJCWlmIChzcmNwID49IGVvbSkgewotCQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9Ci0JCQlpZiAobGVuIDwgMCkKLQkJCQlsZW4gPSBzcmNwIC0gc3JjICsgMTsKLQkJCXNyY3AgPSBtc2cgKyAoKChuICYgMHgzZikgPDwgOCkgfCAoKnNyY3AgJiAweGZmKSk7Ci0JCQlpZiAoc3JjcCA8IG1zZyB8fCBzcmNwID49IGVvbSkgeyAgLyogT3V0IG9mIHJhbmdlLiAqLwotCQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9Ci0JCQljaGVja2VkICs9IDI7Ci0JCQkvKgotCQkJICogQ2hlY2sgZm9yIGxvb3BzIGluIHRoZSBjb21wcmVzc2VkIG5hbWU7Ci0JCQkgKiBpZiB3ZSd2ZSBsb29rZWQgYXQgdGhlIHdob2xlIG1lc3NhZ2UsCi0JCQkgKiB0aGVyZSBtdXN0IGJlIGEgbG9vcC4KLQkJCSAqLwotCQkJaWYgKGNoZWNrZWQgPj0gZW9tIC0gbXNnKSB7Ci0JCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCQlyZXR1cm4gKC0xKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQllcnJubyA9IEVNU0dTSVpFOwotCQkJcmV0dXJuICgtMSk7CQkJLyogZmxhZyBlcnJvciAqLwotCQl9Ci0JfQotCSpkc3RwID0gJ1wwJzsKLQlpZiAobGVuIDwgMCkKLQkJbGVuID0gc3JjcCAtIHNyYzsKLQlyZXR1cm4gKGxlbik7Ci19Ci0KLS8qCi0gKiBuc19uYW1lX3BhY2soc3JjLCBkc3QsIGRzdHNpeiwgZG5wdHJzLCBsYXN0ZG5wdHIpCi0gKglQYWNrIGRvbWFpbiBuYW1lICdkb21haW4nIGludG8gJ2NvbXBfZG4nLgotICogcmV0dXJuOgotICoJU2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBuYW1lLCBvciAtMS4KLSAqIG5vdGVzOgotICoJJ2RucHRycycgaXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gcHJldmlvdXMgY29tcHJlc3NlZCBuYW1lcy4KLSAqCWRucHRyc1swXSBpcyBhIHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbWVzc2FnZS4gVGhlIGFycmF5Ci0gKgllbmRzIHdpdGggTlVMTC4KLSAqCSdsYXN0ZG5wdHInIGlzIGEgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBhcnJheSBwb2ludGVkIHRvCi0gKglieSAnZG5wdHJzJy4KLSAqIFNpZGUgZWZmZWN0czoKLSAqCVRoZSBsaXN0IG9mIHBvaW50ZXJzIGluIGRucHRycyBpcyB1cGRhdGVkIGZvciBsYWJlbHMgaW5zZXJ0ZWQgaW50bwotICoJdGhlIG1lc3NhZ2UgYXMgd2UgY29tcHJlc3MgdGhlIG5hbWUuICBJZiAnZG5wdHInIGlzIE5VTEwsIHdlIGRvbid0Ci0gKgl0cnkgdG8gY29tcHJlc3MgbmFtZXMuIElmICdsYXN0ZG5wdHInIGlzIE5VTEwsIHdlIGRvbid0IHVwZGF0ZSB0aGUKLSAqCWxpc3QuCi0gKi8KLWludAotbnNfbmFtZV9wYWNrKGNvbnN0IHVfY2hhciAqc3JjLCB1X2NoYXIgKmRzdCwgaW50IGRzdHNpeiwKLQkgICAgIGNvbnN0IHVfY2hhciAqKmRucHRycywgY29uc3QgdV9jaGFyICoqbGFzdGRucHRyKQotewotCXVfY2hhciAqZHN0cDsKLQljb25zdCB1X2NoYXIgKipjcHAsICoqbHBwLCAqZW9iLCAqbXNnOwotCWNvbnN0IHVfY2hhciAqc3JjcDsKLQlpbnQgbiwgbCwgZmlyc3QgPSAxOwotCi0Jc3JjcCA9IHNyYzsKLQlkc3RwID0gZHN0OwotCWVvYiA9IGRzdHAgKyBkc3RzaXo7Ci0JbHBwID0gY3BwID0gTlVMTDsKLQlpZiAoZG5wdHJzICE9IE5VTEwpIHsKLQkJaWYgKChtc2cgPSAqZG5wdHJzKyspICE9IE5VTEwpIHsKLQkJCWZvciAoY3BwID0gZG5wdHJzOyAqY3BwICE9IE5VTEw7IGNwcCsrKQotCQkJCTsKLQkJCWxwcCA9IGNwcDsJLyogZW5kIG9mIGxpc3QgdG8gc2VhcmNoICovCi0JCX0KLQl9IGVsc2UKLQkJbXNnID0gTlVMTDsKLQotCS8qIG1ha2Ugc3VyZSB0aGUgZG9tYWluIHdlIGFyZSBhYm91dCB0byBhZGQgaXMgbGVnYWwgKi8KLQlsID0gMDsKLQlkbyB7Ci0JCWludCBsMDsKLQotCQluID0gKnNyY3A7Ci0JCWlmICgobiAmIE5TX0NNUFJTRkxHUykgPT0gTlNfQ01QUlNGTEdTKSB7Ci0JCQllcnJubyA9IEVNU0dTSVpFOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQkJaWYgKChsMCA9IGxhYmVsbGVuKHNyY3ApKSA8IDApIHsKLQkJCWVycm5vID0gRUlOVkFMOwotCQkJcmV0dXJuKC0xKTsKLQkJfQotCQlsICs9IGwwICsgMTsKLQkJaWYgKGwgPiBNQVhDRE5BTUUpIHsKLQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQlyZXR1cm4gKC0xKTsKLQkJfQotCQlzcmNwICs9IGwwICsgMTsKLQl9IHdoaWxlIChuICE9IDApOwotCi0JLyogZnJvbSBoZXJlIG9uIHdlIG5lZWQgdG8gcmVzZXQgY29tcHJlc3Npb24gcG9pbnRlciBhcnJheSBvbiBlcnJvciAqLwotCXNyY3AgPSBzcmM7Ci0JZG8gewotCQkvKiBMb29rIHRvIHNlZSBpZiB3ZSBjYW4gdXNlIHBvaW50ZXJzLiAqLwotCQluID0gKnNyY3A7Ci0JCWlmIChuICE9IDAgJiYgbXNnICE9IE5VTEwpIHsKLQkJCWwgPSBkbl9maW5kKHNyY3AsIG1zZywgKGNvbnN0IHVfY2hhciAqIGNvbnN0ICopZG5wdHJzLAotCQkJCSAgICAoY29uc3QgdV9jaGFyICogY29uc3QgKilscHApOwotCQkJaWYgKGwgPj0gMCkgewotCQkJCWlmIChkc3RwICsgMSA+PSBlb2IpIHsKLQkJCQkJZ290byBjbGVhbnVwOwotCQkJCX0KLQkJCQkqZHN0cCsrID0gKCh1X2ludDMyX3QpbCA+PiA4KSB8IE5TX0NNUFJTRkxHUzsKLQkJCQkqZHN0cCsrID0gbCAlIDI1NjsKLQkJCQlyZXR1cm4gKGRzdHAgLSBkc3QpOwotCQkJfQotCQkJLyogTm90IGZvdW5kLCBzYXZlIGl0LiAqLwotCQkJaWYgKGxhc3RkbnB0ciAhPSBOVUxMICYmIGNwcCA8IGxhc3RkbnB0ciAtIDEgJiYKLQkJCSAgICAoZHN0cCAtIG1zZykgPCAweDQwMDAgJiYgZmlyc3QpIHsKLQkJCQkqY3BwKysgPSBkc3RwOwotCQkJCSpjcHAgPSBOVUxMOwotCQkJCWZpcnN0ID0gMDsKLQkJCX0KLQkJfQotCQkvKiBjb3B5IGxhYmVsIHRvIGJ1ZmZlciAqLwotCQlpZiAoKG4gJiBOU19DTVBSU0ZMR1MpID09IE5TX0NNUFJTRkxHUykgewotCQkJLyogU2hvdWxkIG5vdCBoYXBwZW4uICovCi0JCQlnb3RvIGNsZWFudXA7Ci0JCX0KLQkJbiA9IGxhYmVsbGVuKHNyY3ApOwotCQlpZiAoZHN0cCArIDEgKyBuID49IGVvYikgewotCQkJZ290byBjbGVhbnVwOwotCQl9Ci0JCW1lbWNweShkc3RwLCBzcmNwLCAoc2l6ZV90KShuICsgMSkpOwotCQlzcmNwICs9IG4gKyAxOwotCQlkc3RwICs9IG4gKyAxOwotCX0gd2hpbGUgKG4gIT0gMCk7Ci0KLQlpZiAoZHN0cCA+IGVvYikgewotY2xlYW51cDoKLQkJaWYgKG1zZyAhPSBOVUxMKQotCQkJKmxwcCA9IE5VTEw7Ci0JCWVycm5vID0gRU1TR1NJWkU7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlyZXR1cm4gKGRzdHAgLSBkc3QpOwotfQotCi0vKgotICogbnNfbmFtZV91bmNvbXByZXNzKG1zZywgZW9tLCBzcmMsIGRzdCwgZHN0c2l6KQotICoJRXhwYW5kIGNvbXByZXNzZWQgZG9tYWluIG5hbWUgdG8gcHJlc2VudGF0aW9uIGZvcm1hdC4KLSAqIHJldHVybjoKLSAqCU51bWJlciBvZiBieXRlcyByZWFkIG91dCBvZiBgc3JjJywgb3IgLTEgKHdpdGggZXJybm8gc2V0KS4KLSAqIG5vdGU6Ci0gKglSb290IGRvbWFpbiByZXR1cm5zIGFzICIuIiBub3QgIiIuCi0gKi8KLWludAotbnNfbmFtZV91bmNvbXByZXNzKGNvbnN0IHVfY2hhciAqbXNnLCBjb25zdCB1X2NoYXIgKmVvbSwgY29uc3QgdV9jaGFyICpzcmMsCi0JCSAgIGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpeikKLXsKLQl1X2NoYXIgdG1wW05TX01BWENETkFNRV07Ci0JaW50IG47Ci0KLQlpZiAoKG4gPSBuc19uYW1lX3VucGFjayhtc2csIGVvbSwgc3JjLCB0bXAsIHNpemVvZiB0bXApKSA9PSAtMSkKLQkJcmV0dXJuICgtMSk7Ci0JaWYgKG5zX25hbWVfbnRvcCh0bXAsIGRzdCwgZHN0c2l6KSA9PSAtMSkKLQkJcmV0dXJuICgtMSk7Ci0JcmV0dXJuIChuKTsKLX0KLQotLyoKLSAqIG5zX25hbWVfY29tcHJlc3Moc3JjLCBkc3QsIGRzdHNpeiwgZG5wdHJzLCBsYXN0ZG5wdHIpCi0gKglDb21wcmVzcyBhIGRvbWFpbiBuYW1lIGludG8gd2lyZSBmb3JtYXQsIHVzaW5nIGNvbXByZXNzaW9uIHBvaW50ZXJzLgotICogcmV0dXJuOgotICoJTnVtYmVyIG9mIGJ5dGVzIGNvbnN1bWVkIGluIGBkc3QnIG9yIC0xICh3aXRoIGVycm5vIHNldCkuCi0gKiBub3RlczoKLSAqCSdkbnB0cnMnIGlzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHByZXZpb3VzIGNvbXByZXNzZWQgbmFtZXMuCi0gKglkbnB0cnNbMF0gaXMgYSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1lc3NhZ2UuCi0gKglUaGUgbGlzdCBlbmRzIHdpdGggTlVMTC4gICdsYXN0ZG5wdHInIGlzIGEgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZQotICoJYXJyYXkgcG9pbnRlZCB0byBieSAnZG5wdHJzJy4gU2lkZSBlZmZlY3QgaXMgdG8gdXBkYXRlIHRoZSBsaXN0IG9mCi0gKglwb2ludGVycyBmb3IgbGFiZWxzIGluc2VydGVkIGludG8gdGhlIG1lc3NhZ2UgYXMgd2UgY29tcHJlc3MgdGhlIG5hbWUuCi0gKglJZiAnZG5wdHInIGlzIE5VTEwsIHdlIGRvbid0IHRyeSB0byBjb21wcmVzcyBuYW1lcy4gSWYgJ2xhc3RkbnB0cicKLSAqCWlzIE5VTEwsIHdlIGRvbid0IHVwZGF0ZSB0aGUgbGlzdC4KLSAqLwotaW50Ci1uc19uYW1lX2NvbXByZXNzKGNvbnN0IGNoYXIgKnNyYywgdV9jaGFyICpkc3QsIHNpemVfdCBkc3RzaXosCi0JCSBjb25zdCB1X2NoYXIgKipkbnB0cnMsIGNvbnN0IHVfY2hhciAqKmxhc3RkbnB0cikKLXsKLQl1X2NoYXIgdG1wW05TX01BWENETkFNRV07Ci0KLQlpZiAobnNfbmFtZV9wdG9uKHNyYywgdG1wLCBzaXplb2YgdG1wKSA9PSAtMSkKLQkJcmV0dXJuICgtMSk7Ci0JcmV0dXJuIChuc19uYW1lX3BhY2sodG1wLCBkc3QsIChpbnQpZHN0c2l6LCBkbnB0cnMsIGxhc3RkbnB0cikpOwotfQotCi0vKgotICogUmVzZXQgZG5wdHJzIHNvIHRoYXQgdGhlcmUgYXJlIG5vIGFjdGl2ZSByZWZlcmVuY2VzIHRvIHBvaW50ZXJzIGF0IG9yCi0gKiBhZnRlciBzcmMuCi0gKi8KLXZvaWQKLW5zX25hbWVfcm9sbGJhY2soY29uc3QgdV9jaGFyICpzcmMsIGNvbnN0IHVfY2hhciAqKmRucHRycywKLQkJIGNvbnN0IHVfY2hhciAqKmxhc3RkbnB0cikKLXsKLQl3aGlsZSAoZG5wdHJzIDwgbGFzdGRucHRyICYmICpkbnB0cnMgIT0gTlVMTCkgewotCQlpZiAoKmRucHRycyA+PSBzcmMpIHsKLQkJCSpkbnB0cnMgPSBOVUxMOwotCQkJYnJlYWs7Ci0JCX0KLQkJZG5wdHJzKys7Ci0JfQotfQotCi0vKgotICogbnNfbmFtZV9za2lwKHB0cnB0ciwgZW9tKQotICoJQWR2YW5jZSAqcHRycHRyIHRvIHNraXAgb3ZlciB0aGUgY29tcHJlc3NlZCBuYW1lIGl0IHBvaW50cyBhdC4KLSAqIHJldHVybjoKLSAqCTAgb24gc3VjY2VzcywgLTEgKHdpdGggZXJybm8gc2V0KSBvbiBmYWlsdXJlLgotICovCi1pbnQKLW5zX25hbWVfc2tpcChjb25zdCB1X2NoYXIgKipwdHJwdHIsIGNvbnN0IHVfY2hhciAqZW9tKQotewotCWNvbnN0IHVfY2hhciAqY3A7Ci0JdV9pbnQgbjsKLQlpbnQgbDsKLQotCWNwID0gKnB0cnB0cjsKLQl3aGlsZSAoY3AgPCBlb20gJiYgKG4gPSAqY3ArKykgIT0gMCkgewotCQkvKiBDaGVjayBmb3IgaW5kaXJlY3Rpb24uICovCi0JCXN3aXRjaCAobiAmIE5TX0NNUFJTRkxHUykgewotCQljYXNlIDA6CQkJLyogbm9ybWFsIGNhc2UsIG4gPT0gbGVuICovCi0JCQljcCArPSBuOwotCQkJY29udGludWU7Ci0JCWNhc2UgTlNfVFlQRV9FTFQ6IC8qIEVETlMwIGV4dGVuZGVkIGxhYmVsICovCi0JCQlpZiAoKGwgPSBsYWJlbGxlbihjcCAtIDEpKSA8IDApIHsKLQkJCQllcnJubyA9IEVNU0dTSVpFOyAvKiBYWFggKi8KLQkJCQlyZXR1cm4oLTEpOwotCQkJfQotCQkJY3AgKz0gbDsKLQkJCWNvbnRpbnVlOwotCQljYXNlIE5TX0NNUFJTRkxHUzoJLyogaW5kaXJlY3Rpb24gKi8KLQkJCWNwKys7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoJCS8qIGlsbGVnYWwgdHlwZSAqLwotCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQlpZiAoY3AgPiBlb20pIHsKLQkJZXJybm8gPSBFTVNHU0laRTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCSpwdHJwdHIgPSBjcDsKLQlyZXR1cm4gKDApOwotfQotCi0vKiBQcml2YXRlLiAqLwotCi0vKgotICogc3BlY2lhbChjaCkKLSAqCVRoaW5raW5nIGluIG5vbmludGVybmF0aW9uYWxpemVkIFVTQVNDSUkgKHBlciB0aGUgRE5TIHNwZWMpLAotICoJaXMgdGhpcyBjaGFyYWN0ZWQgc3BlY2lhbCAoImluIG5lZWQgb2YgcXVvdGluZyIpID8KLSAqIHJldHVybjoKLSAqCWJvb2xlYW4uCi0gKi8KLXN0YXRpYyBpbnQKLXNwZWNpYWwoaW50IGNoKSB7Ci0Jc3dpdGNoIChjaCkgewotCWNhc2UgMHgyMjogLyogJyInICovCi0JY2FzZSAweDJFOiAvKiAnLicgKi8KLQljYXNlIDB4M0I6IC8qICc7JyAqLwotCWNhc2UgMHg1QzogLyogJ1xcJyAqLwotCWNhc2UgMHgyODogLyogJygnICovCi0JY2FzZSAweDI5OiAvKiAnKScgKi8KLQkvKiBTcGVjaWFsIG1vZGlmaWVycyBpbiB6b25lIGZpbGVzLiAqLwotCWNhc2UgMHg0MDogLyogJ0AnICovCi0JY2FzZSAweDI0OiAvKiAnJCcgKi8KLQkJcmV0dXJuICgxKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gKDApOwotCX0KLX0KLQotLyoKLSAqIHByaW50YWJsZShjaCkKLSAqCVRoaW5raW5nIGluIG5vbmludGVybmF0aW9uYWxpemVkIFVTQVNDSUkgKHBlciB0aGUgRE5TIHNwZWMpLAotICoJaXMgdGhpcyBjaGFyYWN0ZXIgdmlzaWJsZSBhbmQgbm90IGEgc3BhY2Ugd2hlbiBwcmludGVkID8KLSAqIHJldHVybjoKLSAqCWJvb2xlYW4uCi0gKi8KLXN0YXRpYyBpbnQKLXByaW50YWJsZShpbnQgY2gpIHsKLQlyZXR1cm4gKGNoID4gMHgyMCAmJiBjaCA8IDB4N2YpOwotfQotCi0vKgotICoJVGhpbmtpbmcgaW4gbm9uaW50ZXJuYXRpb25hbGl6ZWQgVVNBU0NJSSAocGVyIHRoZSBETlMgc3BlYyksCi0gKgljb252ZXJ0IHRoaXMgY2hhcmFjdGVyIHRvIGxvd2VyIGNhc2UgaWYgaXQncyB1cHBlciBjYXNlLgotICovCi1zdGF0aWMgaW50Ci1ta2xvd2VyKGludCBjaCkgewotCWlmIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpCi0JCXJldHVybiAoY2ggKyAweDIwKTsKLQlyZXR1cm4gKGNoKTsKLX0KLQotLyoKLSAqIGRuX2ZpbmQoZG9tYWluLCBtc2csIGRucHRycywgbGFzdGRucHRyKQotICoJU2VhcmNoIGZvciB0aGUgY291bnRlZC1sYWJlbCBuYW1lIGluIGFuIGFycmF5IG9mIGNvbXByZXNzZWQgbmFtZXMuCi0gKiByZXR1cm46Ci0gKglvZmZzZXQgZnJvbSBtc2cgaWYgZm91bmQsIG9yIC0xLgotICogbm90ZXM6Ci0gKglkbnB0cnMgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG5hbWUgb24gdGhlIGxpc3QsCi0gKglub3QgdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtZXNzYWdlLgotICovCi1zdGF0aWMgaW50Ci1kbl9maW5kKGNvbnN0IHVfY2hhciAqZG9tYWluLCBjb25zdCB1X2NoYXIgKm1zZywKLQljb25zdCB1X2NoYXIgKiBjb25zdCAqZG5wdHJzLAotCWNvbnN0IHVfY2hhciAqIGNvbnN0ICpsYXN0ZG5wdHIpCi17Ci0JY29uc3QgdV9jaGFyICpkbiwgKmNwLCAqc3A7Ci0JY29uc3QgdV9jaGFyICogY29uc3QgKmNwcDsKLQl1X2ludCBuOwotCi0JZm9yIChjcHAgPSBkbnB0cnM7IGNwcCA8IGxhc3RkbnB0cjsgY3BwKyspIHsKLQkJc3AgPSAqY3BwOwotCQkvKgotCQkgKiB0ZXJtaW5hdGUgc2VhcmNoIG9uOgotCQkgKiByb290IGxhYmVsCi0JCSAqIGNvbXByZXNzaW9uIHBvaW50ZXIKLQkJICogdW51c2FibGUgb2Zmc2V0Ci0JCSAqLwotCQl3aGlsZSAoKnNwICE9IDAgJiYgKCpzcCAmIE5TX0NNUFJTRkxHUykgPT0gMCAmJgotCQkgICAgICAgKHNwIC0gbXNnKSA8IDB4NDAwMCkgewotCQkJZG4gPSBkb21haW47Ci0JCQljcCA9IHNwOwotCQkJd2hpbGUgKChuID0gKmNwKyspICE9IDApIHsKLQkJCQkvKgotCQkJCSAqIGNoZWNrIGZvciBpbmRpcmVjdGlvbgotCQkJCSAqLwotCQkJCXN3aXRjaCAobiAmIE5TX0NNUFJTRkxHUykgewotCQkJCWNhc2UgMDoJCS8qIG5vcm1hbCBjYXNlLCBuID09IGxlbiAqLwotCQkJCQluID0gbGFiZWxsZW4oY3AgLSAxKTsgLyogWFhYICovCi0KLQkJCQkJaWYgKG4gIT0gKmRuKyspCi0JCQkJCQlnb3RvIG5leHQ7Ci0KLQkJCQkJZm9yICg7IG4gPiAwOyBuLS0pCi0JCQkJCQlpZiAobWtsb3dlcigqZG4rKykgIT0KLQkJCQkJCSAgICBta2xvd2VyKCpjcCsrKSkKLQkJCQkJCQlnb3RvIG5leHQ7Ci0JCQkJCS8qIElzIG5leHQgcm9vdCBmb3IgYm90aCA/ICovCi0JCQkJCWlmICgqZG4gPT0gJ1wwJyAmJiAqY3AgPT0gJ1wwJykKLQkJCQkJCXJldHVybiAoc3AgLSBtc2cpOwotCQkJCQlpZiAoKmRuKQotCQkJCQkJY29udGludWU7Ci0JCQkJCWdvdG8gbmV4dDsKLQkJCQljYXNlIE5TX0NNUFJTRkxHUzoJLyogaW5kaXJlY3Rpb24gKi8KLQkJCQkJY3AgPSBtc2cgKyAoKChuICYgMHgzZikgPDwgOCkgfCAqY3ApOwotCQkJCQlicmVhazsKLQotCQkJCWRlZmF1bHQ6CS8qIGlsbGVnYWwgdHlwZSAqLwotCQkJCQllcnJubyA9IEVNU0dTSVpFOwotCQkJCQlyZXR1cm4gKC0xKTsKLQkJCQl9Ci0JCQl9Ci0gbmV4dDogOwotCQkJc3AgKz0gKnNwICsgMTsKLQkJfQotCX0KLQllcnJubyA9IEVOT0VOVDsKLQlyZXR1cm4gKC0xKTsKLX0KLQotc3RhdGljIGludAotZGVjb2RlX2JpdHN0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICoqY3BwLCBjaGFyICpkbiwgY29uc3QgY2hhciAqZW9tKQotewotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwID0gKmNwcDsKLQljaGFyICpiZWcgPSBkbiwgdGM7Ci0JaW50IGIsIGJsZW4sIHBsZW4sIGk7Ci0KLQlpZiAoKGJsZW4gPSAoKmNwICYgMHhmZikpID09IDApCi0JCWJsZW4gPSAyNTY7Ci0JcGxlbiA9IChibGVuICsgMykgLyA0OwotCXBsZW4gKz0gc2l6ZW9mKCJcXFt4L10iKSArIChibGVuID4gOTkgPyAzIDogKGJsZW4gPiA5KSA/IDIgOiAxKTsKLQlpZiAoZG4gKyBwbGVuID49IGVvbSkKLQkJcmV0dXJuKC0xKTsKLQotCWNwKys7Ci0JaSA9IFNQUklOVEYoKGRuLCAiXFxbeCIpKTsKLQlpZiAoaSA8IDApCi0JCXJldHVybiAoLTEpOwotCWRuICs9IGk7Ci0JZm9yIChiID0gYmxlbjsgYiA+IDc7IGIgLT0gOCwgY3ArKykgewotCQlpID0gU1BSSU5URigoZG4sICIlMDJ4IiwgKmNwICYgMHhmZikpOwotCQlpZiAoaSA8IDApCi0JCQlyZXR1cm4gKC0xKTsKLQkJZG4gKz0gaTsKLQl9Ci0JaWYgKGIgPiA0KSB7Ci0JCXRjID0gKmNwKys7Ci0JCWkgPSBTUFJJTlRGKChkbiwgIiUwMngiLCB0YyAmICgweGZmIDw8ICg4IC0gYikpKSk7Ci0JCWlmIChpIDwgMCkKLQkJCXJldHVybiAoLTEpOwotCQlkbiArPSBpOwotCX0gZWxzZSBpZiAoYiA+IDApIHsKLQkJdGMgPSAqY3ArKzsKLQkJaSA9IFNQUklOVEYoKGRuLCAiJTF4IiwKLQkJCSAgICAgICAoKCh1X2ludDMyX3QpdGMgPj4gNCkgJiAweDBmKSAmICgweDBmIDw8ICg0IC0gYikpKSk7Ci0JCWlmIChpIDwgMCkKLQkJCXJldHVybiAoLTEpOwotCQlkbiArPSBpOwotCX0KLQlpID0gU1BSSU5URigoZG4sICIvJWRdIiwgYmxlbikpOwotCWlmIChpIDwgMCkKLQkJcmV0dXJuICgtMSk7Ci0JZG4gKz0gaTsKLQotCSpjcHAgPSBjcDsKLQlyZXR1cm4oZG4gLSBiZWcpOwotfQotCi1zdGF0aWMgaW50Ci1lbmNvZGVfYml0c3JpbmcoY29uc3QgY2hhciAqKmJwLCBjb25zdCBjaGFyICplbmQsIHVuc2lnbmVkIGNoYXIgKipsYWJlbHAsCi0JICAgICAgICB1bnNpZ25lZCBjaGFyICoqIGRzdCwgdW5zaWduZWQgY29uc3QgY2hhciAqZW9tKQotewotCWludCBhZnRlcnNsYXNoID0gMDsKLQljb25zdCBjaGFyICpjcCA9ICpicDsKLQl1bnNpZ25lZCBjaGFyICp0cDsKLQljaGFyIGM7Ci0JY29uc3QgY2hhciAqYmVnX2JsZW47Ci0JY2hhciAqZW5kX2JsZW4gPSBOVUxMOwotCWludCB2YWx1ZSA9IDAsIGNvdW50ID0gMCwgdGJjb3VudCA9IDAsIGJsZW4gPSAwOwotCi0JYmVnX2JsZW4gPSBlbmRfYmxlbiA9IE5VTEw7Ci0KLQkvKiBhIGJpdHN0cmluZyBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgMiBjaGFyYWN0ZXJzICovCi0JaWYgKGVuZCAtIGNwIDwgMikKLQkJcmV0dXJuKEVJTlZBTCk7Ci0KLQkvKiBYWFg6IGN1cnJlbnRseSwgb25seSBoZXggc3RyaW5ncyBhcmUgc3VwcG9ydGVkICovCi0JaWYgKCpjcCsrICE9ICd4JykKLQkJcmV0dXJuKEVJTlZBTCk7Ci0JaWYgKCFpc3hkaWdpdCgoKmNwKSAmIDB4ZmYpKSAvKiByZWplY3QgJ1xbeC9CTEVOXScgKi8KLQkJcmV0dXJuKEVJTlZBTCk7Ci0KLQlmb3IgKHRwID0gKmRzdCArIDE7IGNwIDwgZW5kICYmIHRwIDwgZW9tOyBjcCsrKSB7Ci0JCXN3aXRjaCgoYyA9ICpjcCkpIHsKLQkJY2FzZSAnXSc6CS8qIGVuZCBvZiB0aGUgYml0c3RyaW5nICovCi0JCQlpZiAoYWZ0ZXJzbGFzaCkgewotCQkJCWlmIChiZWdfYmxlbiA9PSBOVUxMKQotCQkJCQlyZXR1cm4oRUlOVkFMKTsKLQkJCQlibGVuID0gKGludClzdHJ0b2woYmVnX2JsZW4sICZlbmRfYmxlbiwgMTApOwotCQkJCWlmICgqZW5kX2JsZW4gIT0gJ10nKQotCQkJCQlyZXR1cm4oRUlOVkFMKTsKLQkJCX0KLQkJCWlmIChjb3VudCkKLQkJCQkqdHArKyA9ICgodmFsdWUgPDwgNCkgJiAweGZmKTsKLQkJCWNwKys7CS8qIHNraXAgJ10nICovCi0JCQlnb3RvIGRvbmU7Ci0JCWNhc2UgJy8nOgotCQkJYWZ0ZXJzbGFzaCA9IDE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlmIChhZnRlcnNsYXNoKSB7Ci0JCQkJaWYgKCFpc2RpZ2l0KGMmMHhmZikpCi0JCQkJCXJldHVybihFSU5WQUwpOwotCQkJCWlmIChiZWdfYmxlbiA9PSBOVUxMKSB7Ci0KLQkJCQkJaWYgKGMgPT0gJzAnKSB7Ci0JCQkJCQkvKiBibGVuIG5ldmVyIGJlZ2luZ3Mgd2l0aCAwICovCi0JCQkJCQlyZXR1cm4oRUlOVkFMKTsKLQkJCQkJfQotCQkJCQliZWdfYmxlbiA9IGNwOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKCFpc3hkaWdpdChjJjB4ZmYpKQotCQkJCQlyZXR1cm4oRUlOVkFMKTsKLQkJCQl2YWx1ZSA8PD0gNDsKLQkJCQl2YWx1ZSArPSBkaWdpdHZhbHVlWyhpbnQpY107Ci0JCQkJY291bnQgKz0gNDsKLQkJCQl0YmNvdW50ICs9IDQ7Ci0JCQkJaWYgKHRiY291bnQgPiAyNTYpCi0JCQkJCXJldHVybihFSU5WQUwpOwotCQkJCWlmIChjb3VudCA9PSA4KSB7Ci0JCQkJCSp0cCsrID0gdmFsdWU7Ci0JCQkJCWNvdW50ID0gMDsKLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCX0KLSAgZG9uZToKLQlpZiAoY3AgPj0gZW5kIHx8IHRwID49IGVvbSkKLQkJcmV0dXJuKEVNU0dTSVpFKTsKLQotCS8qCi0JICogYml0IGxlbmd0aCB2YWxpZGF0aW9uOgotCSAqIElmIGEgPGxlbmd0aD4gaXMgcHJlc2VudCwgdGhlIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIDxiaXQtZGF0YT4KLQkgKiBNVVNUIGJlIGp1c3Qgc3VmZmljaWVudCB0byBjb250YWluIHRoZSBudW1iZXIgb2YgYml0cyBzcGVjaWZpZWQKLQkgKiBieSB0aGUgPGxlbmd0aD4uIElmIHRoZXJlIGFyZSBpbnNpZ25pZmljYW50IGJpdHMgaW4gYSBmaW5hbAotCSAqIGhleGFkZWNpbWFsIG9yIG9jdGFsIGRpZ2l0LCB0aGV5IE1VU1QgYmUgemVyby4KLQkgKiBSRkMgMjY3MywgU2VjdGlvbiAzLjIuCi0JICovCi0JaWYgKGJsZW4gPiAwKSB7Ci0JCWludCB0cmFpbGxlbjsKLQotCQlpZiAoKChibGVuICsgMykgJiB+MykgIT0gdGJjb3VudCkKLQkJCXJldHVybihFSU5WQUwpOwotCQl0cmFpbGxlbiA9IHRiY291bnQgLSBibGVuOyAvKiBiZXR3ZWVuIDAgYW5kIDMgKi8KLQkJaWYgKCgodmFsdWUgPDwgKDggLSB0cmFpbGxlbikpICYgMHhmZikgIT0gMCkKLQkJCXJldHVybihFSU5WQUwpOwotCX0KLQllbHNlCi0JCWJsZW4gPSB0YmNvdW50OwotCWlmIChibGVuID09IDI1NikKLQkJYmxlbiA9IDA7Ci0KLQkvKiBlbmNvZGUgdGhlIHR5cGUgYW5kIHRoZSBzaWduaWZpY2FudCBiaXQgZmllbGRzICovCi0JKipsYWJlbHAgPSBETlNfTEFCRUxUWVBFX0JJVFNUUklORzsKLQkqKmRzdCA9IGJsZW47Ci0KLQkqYnAgPSBjcDsKLQkqZHN0ID0gdHA7Ci0KLQlyZXR1cm4oMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWxhYmVsbGVuKGNvbnN0IHVfY2hhciAqbHApCi17Ci0JaW50IGJpdGxlbjsKLQl1X2NoYXIgbCA9ICpscDsKLQotCWlmICgobCAmIE5TX0NNUFJTRkxHUykgPT0gTlNfQ01QUlNGTEdTKSB7Ci0JCS8qIHNob3VsZCBiZSBhdm9pZGVkIGJ5IHRoZSBjYWxsZXIgKi8KLQkJcmV0dXJuKC0xKTsKLQl9Ci0KLQlpZiAoKGwgJiBOU19DTVBSU0ZMR1MpID09IE5TX1RZUEVfRUxUKSB7Ci0JCWlmIChsID09IEROU19MQUJFTFRZUEVfQklUU1RSSU5HKSB7Ci0JCQlpZiAoKGJpdGxlbiA9ICoobHAgKyAxKSkgPT0gMCkKLQkJCQliaXRsZW4gPSAyNTY7Ci0JCQlyZXR1cm4oKGJpdGxlbiArIDcgKSAvIDggKyAxKTsKLQkJfQotCQlyZXR1cm4oLTEpOwkvKiB1bmtud29uIEVMVCAqLwotCX0KLQlyZXR1cm4obCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uYW1lc2VyL25zX25ldGludC5jIGIvbGliYy9uZXRic2QvbmFtZXNlci9uc19uZXRpbnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIyOTY0Zi4uMDAwMDAwMAotLS0gYS9saWJjL25ldGJzZC9uYW1lc2VyL25zX25ldGludC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoJJE5ldEJTRDogbnNfbmV0aW50LmMsdiAxLjIgMjAwNC8wNS8yMCAyMDoxOTowMCBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmbmRlZiBsaW50Ci0jaWZkZWYgbm90ZGVmCi1zdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBuc19uZXRpbnQuYyx2IDEuMS4yMDYuMSAyMDA0LzAzLzA5IDA4OjMzOjQ0IG1hcmthIEV4cCI7Ci0jZWxzZQotX19SQ1NJRCgiJE5ldEJTRDogbnNfbmV0aW50LmMsdiAxLjIgMjAwNC8wNS8yMCAyMDoxOTowMCBjaHJpc3RvcyBFeHAgJCIpOwotI2VuZGlmCi0jZW5kaWYKLQotLyogSW1wb3J0LiAqLwotCi0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0KLS8qIFB1YmxpYy4gKi8KLQotdV9pbnQxNl90Ci1uc19nZXQxNihjb25zdCB1X2NoYXIgKnNyYykgewotCXVfaW50IGRzdDsKLQotCU5TX0dFVDE2KGRzdCwgc3JjKTsKLQlyZXR1cm4gKGRzdCk7Ci19Ci0KLXVfaW50MzJfdAotbnNfZ2V0MzIoY29uc3QgdV9jaGFyICpzcmMpIHsKLQl1X2xvbmcgZHN0OwotCi0JTlNfR0VUMzIoZHN0LCBzcmMpOwotCXJldHVybiAoZHN0KTsKLX0KLQotdm9pZAotbnNfcHV0MTYodV9pbnQxNl90IHNyYywgdV9jaGFyICpkc3QpIHsKLQlOU19QVVQxNihzcmMsIGRzdCk7Ci19Ci0KLXZvaWQKLW5zX3B1dDMyKHVfaW50MzJfdCBzcmMsIHVfY2hhciAqZHN0KSB7Ci0JTlNfUFVUMzIoc3JjLCBkc3QpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmFtZXNlci9uc19wYXJzZS5jIGIvbGliYy9uZXRic2QvbmFtZXNlci9uc19wYXJzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDk0ODYwLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfcGFyc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKgkkTmV0QlNEOiBuc19wYXJzZS5jLHYgMS4yIDIwMDQvMDUvMjAgMjA6MzU6MDUgY2hyaXN0b3MgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQotICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCi0gKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZm5kZWYgbGludAotI2lmZGVmIG5vdGRlZgotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogbnNfcGFyc2UuYyx2IDEuMy4yLjEuNC4xIDIwMDQvMDMvMDkgMDg6MzM6NDQgbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiBuc19wYXJzZS5jLHYgMS4yIDIwMDQvMDUvMjAgMjA6MzU6MDUgY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmCi0KLS8qIEltcG9ydC4gKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLSNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2Vsc2UKLSNpbmNsdWRlIDxyZXNvbHYuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0vKiBGb3J3YXJkLiAqLwotCi1zdGF0aWMgdm9pZAlzZXRzZWN0aW9uKG5zX21zZyAqbXNnLCBuc19zZWN0IHNlY3QpOwotCi0vKiBNYWNyb3MuICovCi0KLSNkZWZpbmUgUkVURVJSKGVycikgZG8geyBlcnJubyA9IChlcnIpOyByZXR1cm4gKC0xKTsgfSB3aGlsZSAoLypOT1RSRUFDSEVEKi8vKkNPTlNUQ09ORCovMCkKLQotLyogUHVibGljLiAqLwotCi0vKiBUaGVzZSBuZWVkIHRvIGJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBucmVzLmg6bnNfZmxhZyBlbnVtLiAqLwotY29uc3Qgc3RydWN0IF9uc19mbGFnZGF0YSBfbnNfZmxhZ2RhdGFbMTZdID0gewotCXsgMHg4MDAwLCAxNSB9LAkJLyogcXIuICovCi0JeyAweDc4MDAsIDExIH0sCQkvKiBvcGNvZGUuICovCi0JeyAweDA0MDAsIDEwIH0sCQkvKiBhYS4gKi8KLQl7IDB4MDIwMCwgOSB9LAkJLyogdGMuICovCi0JeyAweDAxMDAsIDggfSwJCS8qIHJkLiAqLwotCXsgMHgwMDgwLCA3IH0sCQkvKiByYS4gKi8KLQl7IDB4MDA0MCwgNiB9LAkJLyogei4gKi8KLQl7IDB4MDAyMCwgNSB9LAkJLyogYWQuICovCi0JeyAweDAwMTAsIDQgfSwJCS8qIGNkLiAqLwotCXsgMHgwMDBmLCAwIH0sCQkvKiByY29kZS4gKi8KLQl7IDB4MDAwMCwgMCB9LAkJLyogZXhwYW5zaW9uICgxLzYpLiAqLwotCXsgMHgwMDAwLCAwIH0sCQkvKiBleHBhbnNpb24gKDIvNikuICovCi0JeyAweDAwMDAsIDAgfSwJCS8qIGV4cGFuc2lvbiAoMy82KS4gKi8KLQl7IDB4MDAwMCwgMCB9LAkJLyogZXhwYW5zaW9uICg0LzYpLiAqLwotCXsgMHgwMDAwLCAwIH0sCQkvKiBleHBhbnNpb24gKDUvNikuICovCi0JeyAweDAwMDAsIDAgfSwJCS8qIGV4cGFuc2lvbiAoNi82KS4gKi8KLX07Ci0KLWludCBuc19tc2dfZ2V0ZmxhZyhuc19tc2cgaGFuZGxlLCBpbnQgZmxhZykgewotCXJldHVybigodV9pbnQzMl90KSgoaGFuZGxlKS5fZmxhZ3MgJiBfbnNfZmxhZ2RhdGFbZmxhZ10ubWFzaykgPj4gX25zX2ZsYWdkYXRhW2ZsYWddLnNoaWZ0KTsKLX0KLQotaW50Ci1uc19za2lwcnIoY29uc3QgdV9jaGFyICpwdHIsIGNvbnN0IHVfY2hhciAqZW9tLCBuc19zZWN0IHNlY3Rpb24sIGludCBjb3VudCkgewotCWNvbnN0IHVfY2hhciAqb3B0ciA9IHB0cjsKLQotCWZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKLQkJaW50IGIsIHJkbGVuZ3RoOwotCi0JCWIgPSBkbl9za2lwbmFtZShwdHIsIGVvbSk7Ci0JCWlmIChiIDwgMCkKLQkJCVJFVEVSUihFTVNHU0laRSk7Ci0JCXB0ciArPSBiLypOYW1lKi8gKyBOU19JTlQxNlNaLypUeXBlKi8gKyBOU19JTlQxNlNaLypDbGFzcyovOwotCQlpZiAoc2VjdGlvbiAhPSBuc19zX3FkKSB7Ci0JCQlpZiAocHRyICsgTlNfSU5UMzJTWiArIE5TX0lOVDE2U1ogPiBlb20pCi0JCQkJUkVURVJSKEVNU0dTSVpFKTsKLQkJCXB0ciArPSBOU19JTlQzMlNaLypUVEwqLzsKLQkJCU5TX0dFVDE2KHJkbGVuZ3RoLCBwdHIpOwotCQkJcHRyICs9IHJkbGVuZ3RoLypSRGF0YSovOwotCQl9Ci0JfQotCWlmIChwdHIgPiBlb20pCi0JCVJFVEVSUihFTVNHU0laRSk7Ci0JcmV0dXJuIChwdHIgLSBvcHRyKTsKLX0KLQotaW50Ci1uc19pbml0cGFyc2UoY29uc3QgdV9jaGFyICptc2csIGludCBtc2dsZW4sIG5zX21zZyAqaGFuZGxlKSB7Ci0JY29uc3QgdV9jaGFyICplb20gPSBtc2cgKyBtc2dsZW47Ci0JaW50IGk7Ci0KLQltZW1zZXQoaGFuZGxlLCAweDVlLCBzaXplb2YgKmhhbmRsZSk7Ci0JaGFuZGxlLT5fbXNnID0gbXNnOwotCWhhbmRsZS0+X2VvbSA9IGVvbTsKLQlpZiAobXNnICsgTlNfSU5UMTZTWiA+IGVvbSkKLQkJUkVURVJSKEVNU0dTSVpFKTsKLQlOU19HRVQxNihoYW5kbGUtPl9pZCwgbXNnKTsKLQlpZiAobXNnICsgTlNfSU5UMTZTWiA+IGVvbSkKLQkJUkVURVJSKEVNU0dTSVpFKTsKLQlOU19HRVQxNihoYW5kbGUtPl9mbGFncywgbXNnKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnNfc19tYXg7IGkrKykgewotCQlpZiAobXNnICsgTlNfSU5UMTZTWiA+IGVvbSkKLQkJCVJFVEVSUihFTVNHU0laRSk7Ci0JCU5TX0dFVDE2KGhhbmRsZS0+X2NvdW50c1tpXSwgbXNnKTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IG5zX3NfbWF4OyBpKyspCi0JCWlmIChoYW5kbGUtPl9jb3VudHNbaV0gPT0gMCkKLQkJCWhhbmRsZS0+X3NlY3Rpb25zW2ldID0gTlVMTDsKLQkJZWxzZSB7Ci0JCQlpbnQgYiA9IG5zX3NraXBycihtc2csIGVvbSwgKG5zX3NlY3QpaSwKLQkJCQkJICBoYW5kbGUtPl9jb3VudHNbaV0pOwotCi0JCQlpZiAoYiA8IDApCi0JCQkJcmV0dXJuICgtMSk7Ci0JCQloYW5kbGUtPl9zZWN0aW9uc1tpXSA9IG1zZzsKLQkJCW1zZyArPSBiOwotCQl9Ci0JaWYgKG1zZyAhPSBlb20pCi0JCVJFVEVSUihFTVNHU0laRSk7Ci0Jc2V0c2VjdGlvbihoYW5kbGUsIG5zX3NfbWF4KTsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLW5zX3BhcnNlcnIobnNfbXNnICpoYW5kbGUsIG5zX3NlY3Qgc2VjdGlvbiwgaW50IHJybnVtLCBuc19yciAqcnIpIHsKLQlpbnQgYjsKLQotCS8qIE1ha2Ugc2VjdGlvbiByaWdodC4gKi8KLQlpZiAoKHVuc2lnbmVkKXNlY3Rpb24gPj0gKHVuc2lnbmVkKW5zX3NfbWF4KQotCQlSRVRFUlIoRU5PREVWKTsKLQlpZiAoc2VjdGlvbiAhPSBoYW5kbGUtPl9zZWN0KQotCQlzZXRzZWN0aW9uKGhhbmRsZSwgc2VjdGlvbik7Ci0KLQkvKiBNYWtlIHJybnVtIHJpZ2h0LiAqLwotCWlmIChycm51bSA9PSAtMSkKLQkJcnJudW0gPSBoYW5kbGUtPl9ycm51bTsKLQlpZiAocnJudW0gPCAwIHx8IHJybnVtID49IGhhbmRsZS0+X2NvdW50c1soaW50KXNlY3Rpb25dKQotCQlSRVRFUlIoRU5PREVWKTsKLQlpZiAocnJudW0gPCBoYW5kbGUtPl9ycm51bSkKLQkJc2V0c2VjdGlvbihoYW5kbGUsIHNlY3Rpb24pOwotCWlmIChycm51bSA+IGhhbmRsZS0+X3JybnVtKSB7Ci0JCWIgPSBuc19za2lwcnIoaGFuZGxlLT5fbXNnX3B0ciwgaGFuZGxlLT5fZW9tLCBzZWN0aW9uLAotCQkJICAgICAgcnJudW0gLSBoYW5kbGUtPl9ycm51bSk7Ci0KLQkJaWYgKGIgPCAwKQotCQkJcmV0dXJuICgtMSk7Ci0JCWhhbmRsZS0+X21zZ19wdHIgKz0gYjsKLQkJaGFuZGxlLT5fcnJudW0gPSBycm51bTsKLQl9Ci0KLQkvKiBEbyB0aGUgcGFyc2UuICovCi0JYiA9IGRuX2V4cGFuZChoYW5kbGUtPl9tc2csIGhhbmRsZS0+X2VvbSwKLQkJICAgICAgaGFuZGxlLT5fbXNnX3B0ciwgcnItPm5hbWUsIE5TX01BWEROQU1FKTsKLQlpZiAoYiA8IDApCi0JCXJldHVybiAoLTEpOwotCWhhbmRsZS0+X21zZ19wdHIgKz0gYjsKLQlpZiAoaGFuZGxlLT5fbXNnX3B0ciArIE5TX0lOVDE2U1ogKyBOU19JTlQxNlNaID4gaGFuZGxlLT5fZW9tKQotCQlSRVRFUlIoRU1TR1NJWkUpOwotCU5TX0dFVDE2KHJyLT50eXBlLCBoYW5kbGUtPl9tc2dfcHRyKTsKLQlOU19HRVQxNihyci0+cnJfY2xhc3MsIGhhbmRsZS0+X21zZ19wdHIpOwotCWlmIChzZWN0aW9uID09IG5zX3NfcWQpIHsKLQkJcnItPnR0bCA9IDA7Ci0JCXJyLT5yZGxlbmd0aCA9IDA7Ci0JCXJyLT5yZGF0YSA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJaWYgKGhhbmRsZS0+X21zZ19wdHIgKyBOU19JTlQzMlNaICsgTlNfSU5UMTZTWiA+IGhhbmRsZS0+X2VvbSkKLQkJCVJFVEVSUihFTVNHU0laRSk7Ci0JCU5TX0dFVDMyKHJyLT50dGwsIGhhbmRsZS0+X21zZ19wdHIpOwotCQlOU19HRVQxNihyci0+cmRsZW5ndGgsIGhhbmRsZS0+X21zZ19wdHIpOwotCQlpZiAoaGFuZGxlLT5fbXNnX3B0ciArIHJyLT5yZGxlbmd0aCA+IGhhbmRsZS0+X2VvbSkKLQkJCVJFVEVSUihFTVNHU0laRSk7Ci0JCXJyLT5yZGF0YSA9IGhhbmRsZS0+X21zZ19wdHI7Ci0JCWhhbmRsZS0+X21zZ19wdHIgKz0gcnItPnJkbGVuZ3RoOwotCX0KLQlpZiAoKytoYW5kbGUtPl9ycm51bSA+IGhhbmRsZS0+X2NvdW50c1soaW50KXNlY3Rpb25dKQotCQlzZXRzZWN0aW9uKGhhbmRsZSwgKG5zX3NlY3QpKChpbnQpc2VjdGlvbiArIDEpKTsKLQotCS8qIEFsbCBkb25lLiAqLwotCXJldHVybiAoMCk7Ci19Ci0KLS8qIFByaXZhdGUuICovCi0KLXN0YXRpYyB2b2lkCi1zZXRzZWN0aW9uKG5zX21zZyAqbXNnLCBuc19zZWN0IHNlY3QpIHsKLQltc2ctPl9zZWN0ID0gc2VjdDsKLQlpZiAoc2VjdCA9PSBuc19zX21heCkgewotCQltc2ctPl9ycm51bSA9IC0xOwotCQltc2ctPl9tc2dfcHRyID0gTlVMTDsKLQl9IGVsc2UgewotCQltc2ctPl9ycm51bSA9IDA7Ci0JCW1zZy0+X21zZ19wdHIgPSBtc2ctPl9zZWN0aW9uc1soaW50KXNlY3RdOwotCX0KLX0KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfcHJpbnQuYyBiL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfcHJpbnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ2NWU2Mi4uMDAwMDAwMAotLS0gYS9saWJjL25ldGJzZC9uYW1lc2VyL25zX3ByaW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MTUgKzAsMCBAQAotLyoJJE5ldEJTRDogbnNfcHJpbnQuYyx2IDEuNSAyMDA0LzExLzA3IDAyOjE5OjQ5IGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWZuZGVmIGxpbnQKLSNpZmRlZiBub3RkZWYKLXN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zX3ByaW50LmMsdiAxLjMuMi4xLjQuNSAyMDA0LzA3LzI4IDIwOjE2OjQ1IG1hcmthIEV4cCI7Ci0jZWxzZQotX19SQ1NJRCgiJE5ldEJTRDogbnNfcHJpbnQuYyx2IDEuNSAyMDA0LzExLzA3IDAyOjE5OjQ5IGNocmlzdG9zIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZgotCi0vKiBJbXBvcnQuICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0KLSNpbmNsdWRlIDxpc2MvYXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPGlzYy9kc3QuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCi0jZWxzZQotI2luY2x1ZGUgPHJlc29sdi5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLQotI2lmZGVmIFNQUklOVEZfQ0hBUgotIyBkZWZpbmUgU1BSSU5URih4KSBzdHJsZW4oc3ByaW50Zi8qKi94KQotI2Vsc2UKLSMgZGVmaW5lIFNQUklOVEYoeCkgKChzaXplX3Qpc3ByaW50ZiB4KQotI2VuZGlmCi0KLSNpZm5kZWYgTUlOCi0jZGVmaW5lCU1JTih4LHkpCSgoeCk8KHkpPyh4KTooeSkpCi0jZW5kaWYKLQotLyogRm9yd2FyZC4gKi8KLQotc3RhdGljIHNpemVfdAlwcnVuZV9vcmlnaW4oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqb3JpZ2luKTsKLXN0YXRpYyBpbnQJY2hhcnN0cihjb25zdCB1X2NoYXIgKnJkYXRhLCBjb25zdCB1X2NoYXIgKmVkYXRhLAotCQkJY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pOwotc3RhdGljIGludAlhZGRuYW1lKGNvbnN0IHVfY2hhciAqbXNnLCBzaXplX3QgbXNnbGVuLAotCQkJY29uc3QgdV9jaGFyICoqcCwgY29uc3QgY2hhciAqb3JpZ2luLAotCQkJY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pOwotc3RhdGljIHZvaWQJYWRkbGVuKHNpemVfdCBsZW4sIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsKLXN0YXRpYyBpbnQJYWRkc3RyKGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwKLQkJICAgICAgIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsKLXN0YXRpYyBpbnQJYWRkdGFiKHNpemVfdCBsZW4sIHNpemVfdCB0YXJnZXQsIGludCBzcGFjZWQsCi0JCSAgICAgICBjaGFyICoqYnVmLCBzaXplX3QgKmJ1Zmxlbik7Ci0KLS8qIE1hY3Jvcy4gKi8KLQotI2RlZmluZQlUKHgpIFwKLQlkbyB7IFwKLQkJaWYgKCh4KSA8IDApIFwKLQkJCXJldHVybiAoLTEpOyBcCi0JfSB3aGlsZSAoLypDT05TVENPTkQqLzApCi0KLS8qIFB1YmxpYy4gKi8KLQotLyoKLSAqIGludAotICogbnNfc3ByaW50cnIoaGFuZGxlLCByciwgbmFtZV9jdHgsIG9yaWdpbiwgYnVmLCBidWZsZW4pCi0gKglDb252ZXJ0IGFuIFJSIHRvIHByZXNlbnRhdGlvbiBmb3JtYXQuCi0gKiByZXR1cm46Ci0gKglOdW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIHRvIGJ1Ziwgb3IgLTEgKGNoZWNrIGVycm5vKS4KLSAqLwotaW50Ci1uc19zcHJpbnRycihjb25zdCBuc19tc2cgKmhhbmRsZSwgY29uc3QgbnNfcnIgKnJyLAotCSAgICBjb25zdCBjaGFyICpuYW1lX2N0eCwgY29uc3QgY2hhciAqb3JpZ2luLAotCSAgICBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCi17Ci0JaW50IG47Ci0KLQluID0gbnNfc3ByaW50cnJmKG5zX21zZ19iYXNlKCpoYW5kbGUpLCBuc19tc2dfc2l6ZSgqaGFuZGxlKSwKLQkJCSBuc19ycl9uYW1lKCpyciksIG5zX3JyX2NsYXNzKCpyciksIG5zX3JyX3R5cGUoKnJyKSwKLQkJCSBuc19ycl90dGwoKnJyKSwgbnNfcnJfcmRhdGEoKnJyKSwgbnNfcnJfcmRsZW4oKnJyKSwKLQkJCSBuYW1lX2N0eCwgb3JpZ2luLCBidWYsIGJ1Zmxlbik7Ci0JcmV0dXJuIChuKTsKLX0KLQotLyoKLSAqIGludAotICogbnNfc3ByaW50cnJmKG1zZywgbXNnbGVuLCBuYW1lLCBjbGFzcywgdHlwZSwgdHRsLCByZGF0YSwgcmRsZW4sCi0gKgkgICAgICAgbmFtZV9jdHgsIG9yaWdpbiwgYnVmLCBidWZsZW4pCi0gKglDb252ZXJ0IHRoZSBmaWVsZHMgb2YgYW4gUlIgaW50byBwcmVzZW50YXRpb24gZm9ybWF0LgotICogcmV0dXJuOgotICoJTnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiB0byBidWYsIG9yIC0xIChjaGVjayBlcnJubykuCi0gKi8KLWludAotbnNfc3ByaW50cnJmKGNvbnN0IHVfY2hhciAqbXNnLCBzaXplX3QgbXNnbGVuLAotCSAgICBjb25zdCBjaGFyICpuYW1lLCBuc19jbGFzcyBjbGFzcywgbnNfdHlwZSB0eXBlLAotCSAgICB1X2xvbmcgdHRsLCBjb25zdCB1X2NoYXIgKnJkYXRhLCBzaXplX3QgcmRsZW4sCi0JICAgIGNvbnN0IGNoYXIgKm5hbWVfY3R4LCBjb25zdCBjaGFyICpvcmlnaW4sCi0JICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKLXsKLQljb25zdCBjaGFyICpvYnVmID0gYnVmOwotCWNvbnN0IHVfY2hhciAqZWRhdGEgPSByZGF0YSArIHJkbGVuOwotCWludCBzcGFjZWQgPSAwOwotCi0JY29uc3QgY2hhciAqY29tbWVudDsKLQljaGFyIHRtcFsxMDBdOwotCWludCBsZW4sIHg7Ci0KLQkvKgotCSAqIE93bmVyLgotCSAqLwotCWlmIChuYW1lX2N0eCAhPSBOVUxMICYmIG5zX3NhbWVuYW1lKG5hbWVfY3R4LCBuYW1lKSA9PSAxKSB7Ci0JCVQoYWRkc3RyKCJcdFx0XHQiLCAoc2l6ZV90KTMsICZidWYsICZidWZsZW4pKTsKLQl9IGVsc2UgewotCQlsZW4gPSBwcnVuZV9vcmlnaW4obmFtZSwgb3JpZ2luKTsKLQkJaWYgKCpuYW1lID09ICdcMCcpIHsKLQkJCWdvdG8gcm9vdDsKLQkJfSBlbHNlIGlmIChsZW4gPT0gMCkgewotCQkJVChhZGRzdHIoIkBcdFx0XHQiLCAoc2l6ZV90KTQsICZidWYsICZidWZsZW4pKTsKLQkJfSBlbHNlIHsKLQkJCVQoYWRkc3RyKG5hbWUsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCQkvKiBPcmlnaW4gbm90IHVzZWQgb3Igbm90IHJvb3QsIGFuZCBubyB0cmFpbGluZyBkb3Q/ICovCi0JCQlpZiAoKChvcmlnaW4gPT0gTlVMTCB8fCBvcmlnaW5bMF0gPT0gJ1wwJykgfHwKLQkJCSAgICAob3JpZ2luWzBdICE9ICcuJyAmJiBvcmlnaW5bMV0gIT0gJ1wwJyAmJgotCQkJICAgIG5hbWVbbGVuXSA9PSAnXDAnKSkgJiYgbmFtZVtsZW4gLSAxXSAhPSAnLicpIHsKLSByb290OgotCQkJCVQoYWRkc3RyKCIuIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCQkJbGVuKys7Ci0JCQl9Ci0JCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgMjQsIHNwYWNlZCwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBUVEwsIENsYXNzLCBUeXBlLgotCSAqLwotCVQoeCA9IG5zX2Zvcm1hdF90dGwodHRsLCBidWYsIGJ1ZmxlbikpOwotCWFkZGxlbigoc2l6ZV90KXgsICZidWYsICZidWZsZW4pOwotCWxlbiA9IFNQUklOVEYoKHRtcCwgIiAlcyAlcyIsIHBfY2xhc3MoY2xhc3MpLCBwX3R5cGUodHlwZSkpKTsKLQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0JVChzcGFjZWQgPSBhZGR0YWIoKHNpemVfdCkoeCArIGxlbiksIChzaXplX3QpMTYsIHNwYWNlZCwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JLyoKLQkgKiBSRGF0YS4KLQkgKi8KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIG5zX3RfYToKLQkJaWYgKHJkbGVuICE9IChzaXplX3QpTlNfSU5BRERSU1opCi0JCQlnb3RvIGZvcm1lcnI7Ci0JCSh2b2lkKSBpbmV0X250b3AoQUZfSU5FVCwgcmRhdGEsIGJ1ZiwgYnVmbGVuKTsKLQkJYWRkbGVuKHN0cmxlbihidWYpLCAmYnVmLCAmYnVmbGVuKTsKLQkJYnJlYWs7Ci0KLQljYXNlIG5zX3RfY25hbWU6Ci0JY2FzZSBuc190X21iOgotCWNhc2UgbnNfdF9tZzoKLQljYXNlIG5zX3RfbXI6Ci0JY2FzZSBuc190X25zOgotCWNhc2UgbnNfdF9wdHI6Ci0JY2FzZSBuc190X2RuYW1lOgotCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBuc190X2hpbmZvOgotCWNhc2UgbnNfdF9pc2RuOgotCQkvKiBGaXJzdCB3b3JkLiAqLwotCQlUKGxlbiA9IGNoYXJzdHIocmRhdGEsIGVkYXRhLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCWlmIChsZW4gPT0gMCkKLQkJCWdvdG8gZm9ybWVycjsKLQkJcmRhdGEgKz0gbGVuOwotCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0KLQkJLyogU2Vjb25kIHdvcmQsIG9wdGlvbmFsIGluIElTRE4gcmVjb3Jkcy4gKi8KLQkJaWYgKHR5cGUgPT0gbnNfdF9pc2RuICYmIHJkYXRhID09IGVkYXRhKQotCQkJYnJlYWs7Ci0KLQkJVChsZW4gPSBjaGFyc3RyKHJkYXRhLCBlZGF0YSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlpZiAobGVuID09IDApCi0JCQlnb3RvIGZvcm1lcnI7Ci0JCXJkYXRhICs9IGxlbjsKLQkJYnJlYWs7Ci0KLQljYXNlIG5zX3Rfc29hOiB7Ci0JCXVfbG9uZyB0OwotCi0JCS8qIFNlcnZlciBuYW1lLiAqLwotCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogQWRtaW5pc3RyYXRvciBuYW1lLiAqLwotCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQoYWRkc3RyKCIgKFxuIiwgKHNpemVfdCkzLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCXNwYWNlZCA9IDA7Ci0KLQkJaWYgKChlZGF0YSAtIHJkYXRhKSAhPSA1Kk5TX0lOVDMyU1opCi0JCQlnb3RvIGZvcm1lcnI7Ci0KLQkJLyogU2VyaWFsIG51bWJlci4gKi8KLQkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7Ci0JCVQoYWRkc3RyKCJcdFx0XHRcdFx0IiwgKHNpemVfdCk1LCAmYnVmLCAmYnVmbGVuKSk7Ci0JCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVsdSIsIHQpKTsKLQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQoYWRkc3RyKCI7IHNlcmlhbFxuIiwgKHNpemVfdCk5LCAmYnVmLCAmYnVmbGVuKSk7Ci0JCXNwYWNlZCA9IDA7Ci0KLQkJLyogUmVmcmVzaCBpbnRlcnZhbC4gKi8KLQkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7Ci0JCVQoYWRkc3RyKCJcdFx0XHRcdFx0IiwgKHNpemVfdCk1LCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQobGVuID0gbnNfZm9ybWF0X3R0bCh0LCBidWYsIGJ1ZmxlbikpOwotCQlhZGRsZW4oKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pOwotCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQoYWRkc3RyKCI7IHJlZnJlc2hcbiIsIChzaXplX3QpMTAsICZidWYsICZidWZsZW4pKTsKLQkJc3BhY2VkID0gMDsKLQotCQkvKiBSZXRyeSBpbnRlcnZhbC4gKi8KLQkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7Ci0JCVQoYWRkc3RyKCJcdFx0XHRcdFx0IiwgKHNpemVfdCk1LCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQobGVuID0gbnNfZm9ybWF0X3R0bCh0LCBidWYsIGJ1ZmxlbikpOwotCQlhZGRsZW4oKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pOwotCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQoYWRkc3RyKCI7IHJldHJ5XG4iLCAoc2l6ZV90KTgsICZidWYsICZidWZsZW4pKTsKLQkJc3BhY2VkID0gMDsKLQotCQkvKiBFeHBpcnkuICovCi0JCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOwotCQlUKGFkZHN0cigiXHRcdFx0XHRcdCIsIChzaXplX3QpNSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlUKGxlbiA9IG5zX2Zvcm1hdF90dGwodCwgYnVmLCBidWZsZW4pKTsKLQkJYWRkbGVuKChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKTsKLQkJVChzcGFjZWQgPSBhZGR0YWIoKHNpemVfdClsZW4sIChzaXplX3QpMTYsIHNwYWNlZCwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlUKGFkZHN0cigiOyBleHBpcnlcbiIsIChzaXplX3QpOSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlzcGFjZWQgPSAwOwotCi0JCS8qIE1pbmltdW0gVFRMLiAqLwotCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKLQkJVChhZGRzdHIoIlx0XHRcdFx0XHQiLCAoc2l6ZV90KTUsICZidWYsICZidWZsZW4pKTsKLQkJVChsZW4gPSBuc19mb3JtYXRfdHRsKHQsIGJ1ZiwgYnVmbGVuKSk7Ci0JCWFkZGxlbigoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1Zmxlbik7Ci0JCVQoYWRkc3RyKCIgKSIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQoYWRkc3RyKCI7IG1pbmltdW1cbiIsIChzaXplX3QpMTAsICZidWYsICZidWZsZW4pKTsKLQotCQlicmVhazsKLQkgICAgfQotCi0JY2FzZSBuc190X214OgotCWNhc2UgbnNfdF9hZnNkYjoKLQljYXNlIG5zX3RfcnQ6IHsKLQkJdV9pbnQgdDsKLQotCQlpZiAocmRsZW4gPCAoc2l6ZV90KU5TX0lOVDE2U1opCi0JCQlnb3RvIGZvcm1lcnI7Ci0KLQkJLyogUHJpb3JpdHkuICovCi0JCXQgPSBuc19nZXQxNihyZGF0YSk7Ci0JCXJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICIsIHQpKTsKLQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JCS8qIFRhcmdldC4gKi8KLQkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JCWJyZWFrOwotCSAgICB9Ci0KLQljYXNlIG5zX3RfcHg6IHsKLQkJdV9pbnQgdDsKLQotCQlpZiAocmRsZW4gPCAoc2l6ZV90KU5TX0lOVDE2U1opCi0JCQlnb3RvIGZvcm1lcnI7Ci0KLQkJLyogUHJpb3JpdHkuICovCi0JCXQgPSBuc19nZXQxNihyZGF0YSk7Ci0JCXJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICIsIHQpKTsKLQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JCS8qIE5hbWUxLiAqLwotCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogTmFtZTIuICovCi0JCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKLQotCQlicmVhazsKLQkgICAgfQotCi0JY2FzZSBuc190X3gyNToKLQkJVChsZW4gPSBjaGFyc3RyKHJkYXRhLCBlZGF0YSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlpZiAobGVuID09IDApCi0JCQlnb3RvIGZvcm1lcnI7Ci0JCXJkYXRhICs9IGxlbjsKLQkJYnJlYWs7Ci0KLQljYXNlIG5zX3RfdHh0OgotCQl3aGlsZSAocmRhdGEgPCBlZGF0YSkgewotCQkJVChsZW4gPSBjaGFyc3RyKHJkYXRhLCBlZGF0YSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQkJaWYgKGxlbiA9PSAwKQotCQkJCWdvdG8gZm9ybWVycjsKLQkJCXJkYXRhICs9IGxlbjsKLQkJCWlmIChyZGF0YSA8IGVkYXRhKQotCQkJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIG5zX3RfbnNhcDogewotCQljaGFyIHRbMisyNTUqM107Ci0KLQkJKHZvaWQpIGluZXRfbnNhcF9udG9hKChpbnQpcmRsZW4sIHJkYXRhLCB0KTsKLQkJVChhZGRzdHIodCwgc3RybGVuKHQpLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCWJyZWFrOwotCSAgICB9Ci0KLQljYXNlIG5zX3RfYWFhYToKLQkJaWYgKHJkbGVuICE9IChzaXplX3QpTlNfSU42QUREUlNaKQotCQkJZ290byBmb3JtZXJyOwotCQkodm9pZCkgaW5ldF9udG9wKEFGX0lORVQ2LCByZGF0YSwgYnVmLCBidWZsZW4pOwotCQlhZGRsZW4oc3RybGVuKGJ1ZiksICZidWYsICZidWZsZW4pOwotCQlicmVhazsKLQotCWNhc2UgbnNfdF9sb2M6IHsKLQkJY2hhciB0WzI1NV07Ci0KLQkJLyogWFhYIHByb3RvY29sIGZvcm1hdCBjaGVja2luZz8gKi8KLQkJKHZvaWQpIGxvY19udG9hKHJkYXRhLCB0KTsKLQkJVChhZGRzdHIodCwgc3RybGVuKHQpLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCWJyZWFrOwotCSAgICB9Ci0KLQljYXNlIG5zX3RfbmFwdHI6IHsKLQkJdV9pbnQgb3JkZXIsIHByZWZlcmVuY2U7Ci0JCWNoYXIgdFs1MF07Ci0KLQkJaWYgKHJkbGVuIDwgMlUqTlNfSU5UMTZTWikKLQkJCWdvdG8gZm9ybWVycjsKLQotCQkvKiBPcmRlciwgUHJlY2VkZW5jZS4gKi8KLQkJb3JkZXIgPSBuc19nZXQxNihyZGF0YSk7CXJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCXByZWZlcmVuY2UgPSBuc19nZXQxNihyZGF0YSk7CXJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCWxlbiA9IFNQUklOVEYoKHQsICIldSAldSAiLCBvcmRlciwgcHJlZmVyZW5jZSkpOwotCQlUKGFkZHN0cih0LCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JCS8qIEZsYWdzLiAqLwotCQlUKGxlbiA9IGNoYXJzdHIocmRhdGEsIGVkYXRhLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCWlmIChsZW4gPT0gMCkKLQkJCWdvdG8gZm9ybWVycjsKLQkJcmRhdGEgKz0gbGVuOwotCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JCS8qIFNlcnZpY2UuICovCi0JCVQobGVuID0gY2hhcnN0cihyZGF0YSwgZWRhdGEsICZidWYsICZidWZsZW4pKTsKLQkJaWYgKGxlbiA9PSAwKQotCQkJZ290byBmb3JtZXJyOwotCQlyZGF0YSArPSBsZW47Ci0JCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogUmVnZXhwLiAqLwotCQlUKGxlbiA9IGNoYXJzdHIocmRhdGEsIGVkYXRhLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCWlmIChsZW4gPCAwKQotCQkJcmV0dXJuICgtMSk7Ci0JCWlmIChsZW4gPT0gMCkKLQkJCWdvdG8gZm9ybWVycjsKLQkJcmRhdGEgKz0gbGVuOwotCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JCS8qIFNlcnZlci4gKi8KLQkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlicmVhazsKLQkgICAgfQotCi0JY2FzZSBuc190X3NydjogewotCQl1X2ludCBwcmlvcml0eSwgd2VpZ2h0LCBwb3J0OwotCQljaGFyIHRbNTBdOwotCi0JCWlmIChyZGxlbiA8IDNVKk5TX0lOVDE2U1opCi0JCQlnb3RvIGZvcm1lcnI7Ci0KLQkJLyogUHJpb3JpdHksIFdlaWdodCwgUG9ydC4gKi8KLQkJcHJpb3JpdHkgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOwotCQl3ZWlnaHQgICA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCXBvcnQgICAgID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKLQkJbGVuID0gU1BSSU5URigodCwgIiV1ICV1ICV1ICIsIHByaW9yaXR5LCB3ZWlnaHQsIHBvcnQpKTsKLQkJVChhZGRzdHIodCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKLQotCQkvKiBTZXJ2ZXIuICovCi0JCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKLQkJYnJlYWs7Ci0JICAgIH0KLQotCWNhc2UgbnNfdF9taW5mbzoKLQljYXNlIG5zX3RfcnA6Ci0JCS8qIE5hbWUxLiAqLwotCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogTmFtZTIuICovCi0JCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKLQotCQlicmVhazsKLQotCWNhc2UgbnNfdF93a3M6IHsKLQkJaW50IG4sIGxjbnQ7Ci0KLQkJaWYgKHJkbGVuIDwgMVUgKyBOU19JTlQzMlNaKQotCQkJZ290byBmb3JtZXJyOwotCi0JCS8qIEFkZHJlc3MuICovCi0JCSh2b2lkKSBpbmV0X250b3AoQUZfSU5FVCwgcmRhdGEsIGJ1ZiwgYnVmbGVuKTsKLQkJYWRkbGVuKHN0cmxlbihidWYpLCAmYnVmLCAmYnVmbGVuKTsKLQkJcmRhdGEgKz0gTlNfSU5BRERSU1o7Ci0KLQkJLyogUHJvdG9jb2wuICovCi0JCWxlbiA9IFNQUklOVEYoKHRtcCwgIiAldSAoICIsICpyZGF0YSkpOwotCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCXJkYXRhICs9IE5TX0lOVDhTWjsKLQotCQkvKiBCaXQgbWFwLiAqLwotCQluID0gMDsKLQkJbGNudCA9IDA7Ci0JCXdoaWxlIChyZGF0YSA8IGVkYXRhKSB7Ci0JCQl1X2ludCBjID0gKnJkYXRhKys7Ci0JCQlkbyB7Ci0JCQkJaWYgKGMgJiAwMjAwKSB7Ci0JCQkJCWlmIChsY250ID09IDApIHsKLQkJCQkJCVQoYWRkc3RyKCJcblx0XHRcdFx0IiwgKHNpemVfdCk1LAotCQkJCQkJCSAmYnVmLCAmYnVmbGVuKSk7Ci0JCQkJCQlsY250ID0gMTA7Ci0JCQkJCQlzcGFjZWQgPSAwOwotCQkJCQl9Ci0JCQkJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVkICIsIG4pKTsKLQkJCQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQkJCQlsY250LS07Ci0JCQkJfQotCQkJCWMgPDw9IDE7Ci0JCQl9IHdoaWxlICgrK24gJiAwNyk7Ci0JCX0KLQkJVChhZGRzdHIoIikiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKLQotCQlicmVhazsKLQkgICAgfQotCi0JY2FzZSBuc190X2tleTogewotCQljaGFyIGJhc2U2NF9rZXlbTlNfTUQ1UlNBX01BWF9CQVNFNjRdOwotCQl1X2ludCBrZXlmbGFncywgcHJvdG9jb2wsIGFsZ29yaXRobSwga2V5X2lkOwotCQljb25zdCBjaGFyICpsZWFkZXI7Ci0JCWludCBuOwotCi0JCWlmIChyZGxlbiA8IDBVICsgTlNfSU5UMTZTWiArIE5TX0lOVDhTWiArIE5TX0lOVDhTWikKLQkJCWdvdG8gZm9ybWVycjsKLQotCQkvKiBLZXkgZmxhZ3MsIFByb3RvY29sLCBBbGdvcml0aG0uICovCi0jaWZuZGVmIF9MSUJDCi0JCWtleV9pZCA9IGRzdF9zX2Ruc19rZXlfaWQocmRhdGEsIGVkYXRhLXJkYXRhKTsKLSNlbHNlCi0JCWtleV9pZCA9IDA7Ci0jZW5kaWYKLQkJa2V5ZmxhZ3MgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOwotCQlwcm90b2NvbCA9ICpyZGF0YSsrOwotCQlhbGdvcml0aG0gPSAqcmRhdGErKzsKLQkJbGVuID0gU1BSSU5URigodG1wLCAiMHglMDR4ICV1ICV1IiwKLQkJCSAgICAgICBrZXlmbGFncywgcHJvdG9jb2wsIGFsZ29yaXRobSkpOwotCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogUHVibGljIGtleSBkYXRhLiAqLwotCQlsZW4gPSBiNjRfbnRvcChyZGF0YSwgKHNpemVfdCkoZWRhdGEgLSByZGF0YSksCi0JCQkgICAgICAgYmFzZTY0X2tleSwgc2l6ZW9mIGJhc2U2NF9rZXkpOwotCQlpZiAobGVuIDwgMCkKLQkJCWdvdG8gZm9ybWVycjsKLQkJaWYgKGxlbiA+IDE1KSB7Ci0JCQlUKGFkZHN0cigiICgiLCAoc2l6ZV90KTIsICZidWYsICZidWZsZW4pKTsKLQkJCWxlYWRlciA9ICJcblx0XHQiOwotCQkJc3BhY2VkID0gMDsKLQkJfSBlbHNlCi0JCQlsZWFkZXIgPSAiICI7Ci0JCWZvciAobiA9IDA7IG4gPCBsZW47IG4gKz0gNDgpIHsKLQkJCVQoYWRkc3RyKGxlYWRlciwgc3RybGVuKGxlYWRlciksICZidWYsICZidWZsZW4pKTsKLQkJCVQoYWRkc3RyKGJhc2U2NF9rZXkgKyBuLCAoc2l6ZV90KU1JTihsZW4gLSBuLCA0OCksCi0JCQkJICZidWYsICZidWZsZW4pKTsKLQkJfQotCQlpZiAobGVuID4gMTUpCi0JCQlUKGFkZHN0cigiICkiLCAoc2l6ZV90KTIsICZidWYsICZidWZsZW4pKTsKLQkJbiA9IFNQUklOVEYoKHRtcCwgIiA7IGtleV90YWc9ICV1Iiwga2V5X2lkKSk7Ci0JCVQoYWRkc3RyKHRtcCwgKHNpemVfdCluLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJYnJlYWs7Ci0JICAgIH0KLQotCWNhc2UgbnNfdF9zaWc6IHsKLQkJY2hhciBiYXNlNjRfa2V5W05TX01ENVJTQV9NQVhfQkFTRTY0XTsKLQkJdV9pbnQgdHlwLCBhbGdvcml0aG0sIGxhYmVscywgZm9vdHByaW50OwotCQljb25zdCBjaGFyICpsZWFkZXI7Ci0JCXVfbG9uZyB0OwotCQlpbnQgbjsKLQotCQlpZiAocmRsZW4gPCAyMlUpCi0JCQlnb3RvIGZvcm1lcnI7Ci0KLQkJLyogVHlwZSBjb3ZlcmVkLCBBbGdvcml0aG0sIExhYmVsIGNvdW50LCBPcmlnaW5hbCBUVEwuICovCi0JICAgICAgICB0eXAgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOwotCQlhbGdvcml0aG0gPSAqcmRhdGErKzsKLQkJbGFiZWxzID0gKnJkYXRhKys7Ci0JCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOwotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIlcyAlZCAlZCAlbHUgIiwKLQkJCSAgICAgICBwX3R5cGUoKGludCl0eXApLCBhbGdvcml0aG0sIGxhYmVscywgdCkpOwotCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCWlmIChsYWJlbHMgPiAodV9pbnQpZG5fY291bnRfbGFiZWxzKG5hbWUpKQotCQkJZ290byBmb3JtZXJyOwotCi0JCS8qIFNpZ25hdHVyZSBleHBpcnkuICovCi0JCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOwotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIlcyAiLCBwX3NlY3N0b2RhdGUodCkpKTsKLQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JCS8qIFRpbWUgc2lnbmVkLiAqLwotCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKLQkJbGVuID0gU1BSSU5URigodG1wLCAiJXMgIiwgcF9zZWNzdG9kYXRlKHQpKSk7Ci0JCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKLQotCQkvKiBTaWduYXR1cmUgRm9vdHByaW50LiAqLwotCQlmb290cHJpbnQgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOwotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCBmb290cHJpbnQpKTsKLQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JCS8qIFNpZ25lcidzIG5hbWUuICovCi0JCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKLQotCQkvKiBTaWduYXR1cmUuICovCi0JCWxlbiA9IGI2NF9udG9wKHJkYXRhLCAoc2l6ZV90KShlZGF0YSAtIHJkYXRhKSwKLQkJCSAgICAgICBiYXNlNjRfa2V5LCBzaXplb2YgYmFzZTY0X2tleSk7Ci0JCWlmIChsZW4gPiAxNSkgewotCQkJVChhZGRzdHIoIiAoIiwgKHNpemVfdCkyLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCQlsZWFkZXIgPSAiXG5cdFx0IjsKLQkJCXNwYWNlZCA9IDA7Ci0JCX0gZWxzZQotCQkJbGVhZGVyID0gIiAiOwotCQlpZiAobGVuIDwgMCkKLQkJCWdvdG8gZm9ybWVycjsKLQkJZm9yIChuID0gMDsgbiA8IGxlbjsgbiArPSA0OCkgewotCQkJVChhZGRzdHIobGVhZGVyLCBzdHJsZW4obGVhZGVyKSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQkJVChhZGRzdHIoYmFzZTY0X2tleSArIG4sIChzaXplX3QpTUlOKGxlbiAtIG4sIDQ4KSwKLQkJCQkgJmJ1ZiwgJmJ1ZmxlbikpOwotCQl9Ci0JCWlmIChsZW4gPiAxNSkKLQkJCVQoYWRkc3RyKCIgKSIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlicmVhazsKLQkgICAgfQotCi0JY2FzZSBuc190X254dDogewotCQlpbnQgbiwgYzsKLQotCQkvKiBOZXh0IGRvbWFpbiBuYW1lLiAqLwotCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogVHlwZSBiaXQgbWFwLiAqLwotCQluID0gZWRhdGEgLSByZGF0YTsKLQkJZm9yIChjID0gMDsgYyA8IG4qODsgYysrKQotCQkJaWYgKE5TX05YVF9CSVRfSVNTRVQoYywgcmRhdGEpKSB7Ci0JCQkJbGVuID0gU1BSSU5URigodG1wLCAiICVzIiwgcF90eXBlKGMpKSk7Ci0JCQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQkJfQotCQlicmVhazsKLQkgICAgfQotCi0JY2FzZSBuc190X2NlcnQ6IHsKLQkJdV9pbnQgY190eXBlLCBrZXlfdGFnLCBhbGc7Ci0JCWludCBuOwotCQl1bnNpZ25lZCBpbnQgc2l6OwotCQljaGFyIGJhc2U2NF9jZXJ0WzgxOTJdLCB0bXAxWzQwXTsKLQkJY29uc3QgY2hhciAqbGVhZGVyOwotCi0JCWNfdHlwZSAgPSBuc19nZXQxNihyZGF0YSk7IHJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCWtleV90YWcgPSBuc19nZXQxNihyZGF0YSk7IHJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCWFsZyA9ICh1X2ludCkgKnJkYXRhKys7Ci0KLQkJbGVuID0gU1BSSU5URigodG1wMSwgIiVkICVkICVkICIsIGNfdHlwZSwga2V5X3RhZywgYWxnKSk7Ci0JCVQoYWRkc3RyKHRtcDEsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCXNpeiA9IChlZGF0YS1yZGF0YSkqNC8zICsgNDsgLyogIis0IiBhY2NvdW50cyBmb3IgdHJhaWxpbmcgXDAgKi8KLQkJaWYgKHNpeiA+IHNpemVvZihiYXNlNjRfY2VydCkgKiAzLzQpIHsKLQkJCWNvbnN0IGNoYXIgKnN0ciA9ICJyZWNvcmQgdG9vIGxvbmcgdG8gcHJpbnQiOwotCQkJVChhZGRzdHIoc3RyLCBzdHJsZW4oc3RyKSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQl9Ci0JCWVsc2UgewotCQkJbGVuID0gYjY0X250b3AocmRhdGEsIChzaXplX3QpKGVkYXRhLXJkYXRhKSwKLQkJCSAgICBiYXNlNjRfY2VydCwgc2l6KTsKLQotCQkJaWYgKGxlbiA8IDApCi0JCQkJZ290byBmb3JtZXJyOwotCQkJZWxzZSBpZiAobGVuID4gMTUpIHsKLQkJCQlUKGFkZHN0cigiICgiLCAoc2l6ZV90KTIsICZidWYsICZidWZsZW4pKTsKLQkJCQlsZWFkZXIgPSAiXG5cdFx0IjsKLQkJCQlzcGFjZWQgPSAwOwotCQkJfQotCQkJZWxzZQotCQkJCWxlYWRlciA9ICIgIjsKLQotCQkJZm9yIChuID0gMDsgbiA8IGxlbjsgbiArPSA0OCkgewotCQkJCVQoYWRkc3RyKGxlYWRlciwgc3RybGVuKGxlYWRlciksCi0JCQkJCSAmYnVmLCAmYnVmbGVuKSk7Ci0JCQkJVChhZGRzdHIoYmFzZTY0X2NlcnQgKyBuLCAoc2l6ZV90KU1JTihsZW4gLSBuLCA0OCksCi0JCQkJCSAmYnVmLCAmYnVmbGVuKSk7Ci0JCQl9Ci0JCQlpZiAobGVuID4gMTUpCi0JCQkJVChhZGRzdHIoIiApIiwgKHNpemVfdCkyLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCX0KLQkJYnJlYWs7Ci0JICAgIH0KLQotCWNhc2UgbnNfdF90a2V5OiB7Ci0JCS8qIEtKRCAtIG5lZWQgdG8gY29tcGxldGUgdGhpcyAqLwotCQl1X2xvbmcgdDsKLQkJaW50IG1vZGUsIGVyciwga2V5c2l6ZTsKLQotCQkvKiBBbGdvcml0aG0gbmFtZS4gKi8KLQkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JCS8qIEluY2VwdGlvbi4gKi8KLQkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7Ci0JCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVzICIsIHBfc2Vjc3RvZGF0ZSh0KSkpOwotCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogRXhwZXJhdGlvbi4gKi8KLQkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7Ci0JCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVzICIsIHBfc2Vjc3RvZGF0ZSh0KSkpOwotCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogTW9kZSAsIEVycm9yLCBLZXkgU2l6ZS4gKi8KLQkJLyogUHJpb3JpdHksIFdlaWdodCwgUG9ydC4gKi8KLQkJbW9kZSA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCWVyciAgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOwotCQlrZXlzaXplICA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICV1ICV1ICIsIG1vZGUsIGVyciwga2V5c2l6ZSkpOwotCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogWFhYIG5lZWQgdG8gZHVtcCBrZXksIHByaW50IG90aGVyZGF0YSBsZW5ndGggJiBvdGhlciBkYXRhICovCi0JCWJyZWFrOwotCSAgICB9Ci0KLQljYXNlIG5zX3RfdHNpZzogewotCQkvKiBCRVcgLSBuZWVkIHRvIGNvbXBsZXRlIHRoaXMgKi8KLQkJaW50IG47Ci0KLQkJVChsZW4gPSBhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlyZGF0YSArPSA4OyAvKiB0aW1lICovCi0JCW4gPSBuc19nZXQxNihyZGF0YSk7IHJkYXRhICs9IElOVDE2U1o7Ci0JCXJkYXRhICs9IG47IC8qIHNpZyAqLwotCQluID0gbnNfZ2V0MTYocmRhdGEpOyByZGF0YSArPSBJTlQxNlNaOyAvKiBvcmlnaW5hbCBpZCAqLwotCQlzcHJpbnRmKGJ1ZiwgIiVkIiwgbnNfZ2V0MTYocmRhdGEpKTsKLQkJcmRhdGEgKz0gSU5UMTZTWjsKLQkJYWRkbGVuKHN0cmxlbihidWYpLCAmYnVmLCAmYnVmbGVuKTsKLQkJYnJlYWs7Ci0JICAgIH0KLQotCWNhc2UgbnNfdF9hNjogewotCQlzdHJ1Y3QgaW42X2FkZHIgYTsKLQkJaW50IHBieXRlLCBwYml0OwotCi0JCS8qIHByZWZpeCBsZW5ndGggKi8KLQkJaWYgKHJkbGVuID09IDBVKSBnb3RvIGZvcm1lcnI7Ci0JCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVkICIsICpyZGF0YSkpOwotCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCXBiaXQgPSAqcmRhdGE7Ci0JCWlmIChwYml0ID4gMTI4KSBnb3RvIGZvcm1lcnI7Ci0JCXBieXRlID0gKHBiaXQgJiB+NykgLyA4OwotCQlyZGF0YSsrOwotCi0JCS8qIGFkZHJlc3Mgc3VmZml4OiBwcm92aWRlZCBvbmx5IHdoZW4gcHJlZml4IGxlbiAhPSAxMjggKi8KLQkJaWYgKHBiaXQgPCAxMjgpIHsKLQkJCWlmIChyZGF0YSArIHBieXRlID49IGVkYXRhKSBnb3RvIGZvcm1lcnI7Ci0JCQltZW1zZXQoJmEsIDAsIHNpemVvZihhKSk7Ci0JCQltZW1jcHkoJmEuczZfYWRkcltwYnl0ZV0sIHJkYXRhLCBzaXplb2YoYSkgLSBwYnl0ZSk7Ci0JCQkodm9pZCkgaW5ldF9udG9wKEFGX0lORVQ2LCAmYSwgYnVmLCBidWZsZW4pOwotCQkJYWRkbGVuKHN0cmxlbihidWYpLCAmYnVmLCAmYnVmbGVuKTsKLQkJCXJkYXRhICs9IHNpemVvZihhKSAtIHBieXRlOwotCQl9Ci0KLQkJLyogcHJlZml4IG5hbWU6IHByb3ZpZGVkIG9ubHkgd2hlbiBwcmVmaXggbGVuID4gMCAqLwotCQlpZiAocGJpdCA9PSAwKQotCQkJYnJlYWs7Ci0JCWlmIChyZGF0YSA+PSBlZGF0YSkgZ290byBmb3JtZXJyOwotCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJYnJlYWs7Ci0JICAgIH0KLQotCWNhc2UgbnNfdF9vcHQ6IHsKLQkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgYnl0ZXMiLCBjbGFzcykpOwotCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCWJyZWFrOwotCSAgICB9Ci0KLQlkZWZhdWx0OgotCQljb21tZW50ID0gInVua25vd24gUlIgdHlwZSI7Ci0JCWdvdG8gaGV4aWZ5OwotCX0KLQlyZXR1cm4gKGJ1ZiAtIG9idWYpOwotIGZvcm1lcnI6Ci0JY29tbWVudCA9ICJSUiBmb3JtYXQgZXJyb3IiOwotIGhleGlmeTogewotCWludCBuLCBtOwotCWNoYXIgKnA7Ci0KLQlsZW4gPSBTUFJJTlRGKCh0bXAsICJcXCMgJXR1JXNcdDsgJXMiLCBlZGF0YSAtIHJkYXRhLAotCQkgICAgICAgcmRsZW4gIT0gMCA/ICIgKCIgOiAiIiwgY29tbWVudCkpOwotCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKLQl3aGlsZSAocmRhdGEgPCBlZGF0YSkgewotCQlwID0gdG1wOwotCQlwICs9IFNQUklOVEYoKHAsICJcblx0IikpOwotCQlzcGFjZWQgPSAwOwotCQluID0gTUlOKDE2LCBlZGF0YSAtIHJkYXRhKTsKLQkJZm9yIChtID0gMDsgbSA8IG47IG0rKykKLQkJCXAgKz0gU1BSSU5URigocCwgIiUwMnggIiwgcmRhdGFbbV0pKTsKLQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KShwIC0gdG1wKSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlpZiAobiA8IDE2KSB7Ci0JCQlUKGFkZHN0cigiKSIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQkJVChhZGR0YWIoKHNpemVfdCkocCAtIHRtcCArIDEpLCAoc2l6ZV90KTQ4LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKLQkJfQotCQlwID0gdG1wOwotCQlwICs9IFNQUklOVEYoKHAsICI7ICIpKTsKLQkJZm9yIChtID0gMDsgbSA8IG47IG0rKykKLQkJCSpwKysgPSAoaXNhc2NpaShyZGF0YVttXSkgJiYgaXNwcmludChyZGF0YVttXSkpCi0JCQkJPyByZGF0YVttXQotCQkJCTogJy4nOwotCQlUKGFkZHN0cih0bXAsIChzaXplX3QpKHAgLSB0bXApLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCXJkYXRhICs9IG47Ci0JfQotCXJldHVybiAoYnVmIC0gb2J1Zik7Ci0gICAgfQotfQotCi0vKiBQcml2YXRlLiAqLwotCi0vKgotICogc2l6ZV90Ci0gKiBwcnVuZV9vcmlnaW4obmFtZSwgb3JpZ2luKQotICoJRmluZCBvdXQgaWYgdGhlIG5hbWUgaXMgYXQgb3IgdW5kZXIgdGhlIGN1cnJlbnQgb3JpZ2luLgotICogcmV0dXJuOgotICoJTnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gbmFtZSBiZWZvcmUgc3RhcnQgb2Ygb3JpZ2luLAotICoJb3IgbGVuZ3RoIG9mIG5hbWUgaWYgb3JpZ2luIGRvZXMgbm90IG1hdGNoLgotICogbm90ZXM6Ci0gKglUaGlzIGZ1bmN0aW9uIHNob3VsZCBzaGFyZSBjb2RlIHdpdGggc2FtZWRvbWFpbigpLgotICovCi1zdGF0aWMgc2l6ZV90Ci1wcnVuZV9vcmlnaW4oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqb3JpZ2luKSB7Ci0JY29uc3QgY2hhciAqb25hbWUgPSBuYW1lOwotCi0Jd2hpbGUgKCpuYW1lICE9ICdcMCcpIHsKLQkJaWYgKG9yaWdpbiAhPSBOVUxMICYmIG5zX3NhbWVuYW1lKG5hbWUsIG9yaWdpbikgPT0gMSkKLQkJCXJldHVybiAobmFtZSAtIG9uYW1lIC0gKG5hbWUgPiBvbmFtZSkpOwotCQl3aGlsZSAoKm5hbWUgIT0gJ1wwJykgewotCQkJaWYgKCpuYW1lID09ICdcXCcpIHsKLQkJCQluYW1lKys7Ci0JCQkJLyogWFhYIG5lZWQgdG8gaGFuZGxlIFxubm4gZm9ybS4gKi8KLQkJCQlpZiAoKm5hbWUgPT0gJ1wwJykKLQkJCQkJYnJlYWs7Ci0JCQl9IGVsc2UgaWYgKCpuYW1lID09ICcuJykgewotCQkJCW5hbWUrKzsKLQkJCQlicmVhazsKLQkJCX0KLQkJCW5hbWUrKzsKLQkJfQotCX0KLQlyZXR1cm4gKG5hbWUgLSBvbmFtZSk7Ci19Ci0KLS8qCi0gKiBpbnQKLSAqIGNoYXJzdHIocmRhdGEsIGVkYXRhLCBidWYsIGJ1ZmxlbikKLSAqCUZvcm1hdCBhIDxjaGFyYWN0ZXItc3RyaW5nPiBpbnRvIHRoZSBwcmVzZW50YXRpb24gYnVmZmVyLgotICogcmV0dXJuOgotICoJTnVtYmVyIG9mIHJkYXRhIG9jdGV0cyBjb25zdW1lZAotICoJMCBmb3IgcHJvdG9jb2wgZm9ybWF0IGVycm9yCi0gKgktMSBmb3Igb3V0cHV0IGJ1ZmZlciBlcnJvcgotICogc2lkZSBlZmZlY3RzOgotICoJYnVmZmVyIGlzIGFkdmFuY2VkIG9uIHN1Y2Nlc3MuCi0gKi8KLXN0YXRpYyBpbnQKLWNoYXJzdHIoY29uc3QgdV9jaGFyICpyZGF0YSwgY29uc3QgdV9jaGFyICplZGF0YSwgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pIHsKLQljb25zdCB1X2NoYXIgKm9kYXRhID0gcmRhdGE7Ci0Jc2l6ZV90IHNhdmVfYnVmbGVuID0gKmJ1ZmxlbjsKLQljaGFyICpzYXZlX2J1ZiA9ICpidWY7Ci0KLQlpZiAoYWRkc3RyKCJcIiIsIChzaXplX3QpMSwgYnVmLCBidWZsZW4pIDwgMCkKLQkJZ290byBlbm9zcGM7Ci0JaWYgKHJkYXRhIDwgZWRhdGEpIHsKLQkJaW50IG4gPSAqcmRhdGE7Ci0KLQkJaWYgKHJkYXRhICsgMSArIG4gPD0gZWRhdGEpIHsKLQkJCXJkYXRhKys7Ci0JCQl3aGlsZSAobi0tID4gMCkgewotCQkJCWlmIChzdHJjaHIoIlxuXCJcXCIsICpyZGF0YSkgIT0gTlVMTCkKLQkJCQkJaWYgKGFkZHN0cigiXFwiLCAoc2l6ZV90KTEsIGJ1ZiwgYnVmbGVuKSA8IDApCi0JCQkJCQlnb3RvIGVub3NwYzsKLQkJCQlpZiAoYWRkc3RyKChjb25zdCBjaGFyICopcmRhdGEsIChzaXplX3QpMSwKLQkJCQkJICAgYnVmLCBidWZsZW4pIDwgMCkKLQkJCQkJZ290byBlbm9zcGM7Ci0JCQkJcmRhdGErKzsKLQkJCX0KLQkJfQotCX0KLQlpZiAoYWRkc3RyKCJcIiIsIChzaXplX3QpMSwgYnVmLCBidWZsZW4pIDwgMCkKLQkJZ290byBlbm9zcGM7Ci0JcmV0dXJuIChyZGF0YSAtIG9kYXRhKTsKLSBlbm9zcGM6Ci0JZXJybm8gPSBFTk9TUEM7Ci0JKmJ1ZiA9IHNhdmVfYnVmOwotCSpidWZsZW4gPSBzYXZlX2J1ZmxlbjsKLQlyZXR1cm4gKC0xKTsKLX0KLQotc3RhdGljIGludAotYWRkbmFtZShjb25zdCB1X2NoYXIgKm1zZywgc2l6ZV90IG1zZ2xlbiwKLQljb25zdCB1X2NoYXIgKipwcCwgY29uc3QgY2hhciAqb3JpZ2luLAotCWNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKQotewotCXNpemVfdCBuZXdsZW4sIHNhdmVfYnVmbGVuID0gKmJ1ZmxlbjsKLQljaGFyICpzYXZlX2J1ZiA9ICpidWY7Ci0JaW50IG47Ci0KLQluID0gZG5fZXhwYW5kKG1zZywgbXNnICsgbXNnbGVuLCAqcHAsICpidWYsIChpbnQpKmJ1Zmxlbik7Ci0JaWYgKG4gPCAwKQotCQlnb3RvIGVub3NwYzsJLyogR3Vlc3MuICovCi0JbmV3bGVuID0gcHJ1bmVfb3JpZ2luKCpidWYsIG9yaWdpbik7Ci0JaWYgKCoqYnVmID09ICdcMCcpIHsKLQkJZ290byByb290OwotCX0gZWxzZSBpZiAobmV3bGVuID09IDBVKSB7Ci0JCS8qIFVzZSAiQCIgaW5zdGVhZCBvZiBuYW1lLiAqLwotCQlpZiAobmV3bGVuICsgMiA+ICpidWZsZW4pCi0JCQlnb3RvIGVub3NwYzsgICAgICAgIC8qIE5vIHJvb20gZm9yICJAXDAiLiAqLwotCQkoKmJ1ZilbbmV3bGVuKytdID0gJ0AnOwotCQkoKmJ1ZilbbmV3bGVuXSA9ICdcMCc7Ci0JfSBlbHNlIHsKLQkJaWYgKCgob3JpZ2luID09IE5VTEwgfHwgb3JpZ2luWzBdID09ICdcMCcpIHx8Ci0JCSAgICAob3JpZ2luWzBdICE9ICcuJyAmJiBvcmlnaW5bMV0gIT0gJ1wwJyAmJgotCQkgICAgKCpidWYpW25ld2xlbl0gPT0gJ1wwJykpICYmICgqYnVmKVtuZXdsZW4gLSAxXSAhPSAnLicpIHsKLQkJCS8qIE5vIHRyYWlsaW5nIGRvdC4gKi8KLSByb290OgotCQkJaWYgKG5ld2xlbiArIDIgPiAqYnVmbGVuKQotCQkJCWdvdG8gZW5vc3BjOwkvKiBObyByb29tIGZvciAiLlwwIi4gKi8KLQkJCSgqYnVmKVtuZXdsZW4rK10gPSAnLic7Ci0JCQkoKmJ1ZilbbmV3bGVuXSA9ICdcMCc7Ci0JCX0KLQl9Ci0JKnBwICs9IG47Ci0JYWRkbGVuKG5ld2xlbiwgYnVmLCBidWZsZW4pOwotCSoqYnVmID0gJ1wwJzsKLQlyZXR1cm4gKG5ld2xlbik7Ci0gZW5vc3BjOgotCWVycm5vID0gRU5PU1BDOwotCSpidWYgPSBzYXZlX2J1ZjsKLQkqYnVmbGVuID0gc2F2ZV9idWZsZW47Ci0JcmV0dXJuICgtMSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hZGRsZW4oc2l6ZV90IGxlbiwgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pIHsKLQlhc3NlcnQobGVuIDw9ICpidWZsZW4pOwotCSpidWYgKz0gbGVuOwotCSpidWZsZW4gLT0gbGVuOwotfQotCi1zdGF0aWMgaW50Ci1hZGRzdHIoY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1ZmxlbikgewotCWlmIChsZW4gPj0gKmJ1ZmxlbikgewotCQllcnJubyA9IEVOT1NQQzsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCW1lbWNweSgqYnVmLCBzcmMsIGxlbik7Ci0JYWRkbGVuKGxlbiwgYnVmLCBidWZsZW4pOwotCSoqYnVmID0gJ1wwJzsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgaW50Ci1hZGR0YWIoc2l6ZV90IGxlbiwgc2l6ZV90IHRhcmdldCwgaW50IHNwYWNlZCwgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pIHsKLQlzaXplX3Qgc2F2ZV9idWZsZW4gPSAqYnVmbGVuOwotCWNoYXIgKnNhdmVfYnVmID0gKmJ1ZjsKLQlpbnQgdDsKLQotCWlmIChzcGFjZWQgfHwgbGVuID49IHRhcmdldCAtIDEpIHsKLQkJVChhZGRzdHIoIiAgIiwgKHNpemVfdCkyLCBidWYsIGJ1ZmxlbikpOwotCQlzcGFjZWQgPSAxOwotCX0gZWxzZSB7Ci0JCWZvciAodCA9ICh0YXJnZXQgLSBsZW4gLSAxKSAvIDg7IHQgPj0gMDsgdC0tKQotCQkJaWYgKGFkZHN0cigiXHQiLCAoc2l6ZV90KTEsIGJ1ZiwgYnVmbGVuKSA8IDApIHsKLQkJCQkqYnVmbGVuID0gc2F2ZV9idWZsZW47Ci0JCQkJKmJ1ZiA9IHNhdmVfYnVmOwotCQkJCXJldHVybiAoLTEpOwotCQkJfQotCQlzcGFjZWQgPSAwOwotCX0KLQlyZXR1cm4gKHNwYWNlZCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uYW1lc2VyL25zX3NhbWVkb21haW4uYyBiL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfc2FtZWRvbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGZkYjYxLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfc2FtZWRvbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAKLS8qCSROZXRCU0Q6IG5zX3NhbWVkb21haW4uYyx2IDEuMiAyMDA0LzA1LzIwIDIwOjM1OjA1IGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIENvcHlyaWdodCAoYykgMTk5NSwxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWZuZGVmIGxpbnQKLSNpZmRlZiBub3RkZWYKLXN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zX3NhbWVkb21haW4uYyx2IDEuMS4yLjIuNC4yIDIwMDQvMDMvMTYgMTI6MzQ6MTcgbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiBuc19zYW1lZG9tYWluLmMsdiAxLjIgMjAwNC8wNS8yMCAyMDozNTowNSBjaHJpc3RvcyBFeHAgJCIpOwotI2VuZGlmCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpZm5kZWYgX0xJQkMKLS8qCi0gKiBpbnQKLSAqIG5zX3NhbWVkb21haW4oYSwgYikKLSAqCUNoZWNrIHdoZXRoZXIgYSBuYW1lIGJlbG9uZ3MgdG8gYSBkb21haW4uCi0gKiBJbnB1dHM6Ci0gKglhIC0gdGhlIGRvbWFpbiB3aG9zZSBhbmNlc3RvcnkgaXMgYmVpbmcgdmVyaWZpZWQKLSAqCWIgLSB0aGUgcG90ZW50aWFsIGFuY2VzdG9yIHdlJ3JlIGNoZWNraW5nIGFnYWluc3QKLSAqIFJldHVybjoKLSAqCWJvb2xlYW4gLSBpcyBhIGF0IG9yIGJlbG93IGI/Ci0gKiBOb3RlczoKLSAqCVRyYWlsaW5nIGRvdHMgYXJlIGZpcnN0IHJlbW92ZWQgZnJvbSBuYW1lIGFuZCBkb21haW4uCi0gKglBbHdheXMgY29tcGFyZSBjb21wbGV0ZSBzdWJkb21haW5zLCBub3Qgb25seSB3aGV0aGVyIHRoZQotICoJZG9tYWluIG5hbWUgaXMgdGhlIHRyYWlsaW5nIHN0cmluZyBvZiB0aGUgZ2l2ZW4gbmFtZS4KLSAqCi0gKgkiaG9zdC5mb29iYXIudG9wIiBsaWVzIGluICJmb29iYXIudG9wIiBhbmQgaW4gInRvcCIgYW5kIGluICIiCi0gKglidXQgTk9UIGluICJiYXIudG9wIgotICovCi0KLWludAotbnNfc2FtZWRvbWFpbihjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKSB7Ci0Jc2l6ZV90IGxhLCBsYjsKLQlpbnQgZGlmZiwgaSwgZXNjYXBlZDsKLQljb25zdCBjaGFyICpjcDsKLQotCWxhID0gc3RybGVuKGEpOwotCWxiID0gc3RybGVuKGIpOwotCi0JLyogSWdub3JlIGEgdHJhaWxpbmcgbGFiZWwgc2VwYXJhdG9yIChpLmUuIGFuIHVuZXNjYXBlZCBkb3QpIGluICdhJy4gKi8KLQlpZiAobGEgIT0gMFUgJiYgYVtsYSAtIDFdID09ICcuJykgewotCQllc2NhcGVkID0gMDsKLQkJLyogTm90ZSB0aGlzIGxvb3AgZG9lc24ndCBnZXQgZXhlY3V0ZWQgaWYgbGE9PTEuICovCi0JCWZvciAoaSA9IGxhIC0gMjsgaSA+PSAwOyBpLS0pCi0JCQlpZiAoYVtpXSA9PSAnXFwnKSB7Ci0JCQkJaWYgKGVzY2FwZWQpCi0JCQkJCWVzY2FwZWQgPSAwOwotCQkJCWVsc2UKLQkJCQkJZXNjYXBlZCA9IDE7Ci0JCQl9IGVsc2UKLQkJCQlicmVhazsKLQkJaWYgKCFlc2NhcGVkKQotCQkJbGEtLTsKLQl9Ci0KLQkvKiBJZ25vcmUgYSB0cmFpbGluZyBsYWJlbCBzZXBhcmF0b3IgKGkuZS4gYW4gdW5lc2NhcGVkIGRvdCkgaW4gJ2InLiAqLwotCWlmIChsYiAhPSAwVSAmJiBiW2xiIC0gMV0gPT0gJy4nKSB7Ci0JCWVzY2FwZWQgPSAwOwotCQkvKiBub3RlIHRoaXMgbG9vcCBkb2Vzbid0IGdldCBleGVjdXRlZCBpZiBsYj09MSAqLwotCQlmb3IgKGkgPSBsYiAtIDI7IGkgPj0gMDsgaS0tKQotCQkJaWYgKGJbaV0gPT0gJ1xcJykgewotCQkJCWlmIChlc2NhcGVkKQotCQkJCQllc2NhcGVkID0gMDsKLQkJCQllbHNlCi0JCQkJCWVzY2FwZWQgPSAxOwotCQkJfSBlbHNlCi0JCQkJYnJlYWs7Ci0JCWlmICghZXNjYXBlZCkKLQkJCWxiLS07Ci0JfQotCi0JLyogbGIgPT0gMCBtZWFucyAnYicgaXMgdGhlIHJvb3QgZG9tYWluLCBzbyAnYScgbXVzdCBiZSBpbiAnYicuICovCi0JaWYgKGxiID09IDBVKQotCQlyZXR1cm4gKDEpOwotCi0JLyogJ2InIGxvbmdlciB0aGFuICdhJyBtZWFucyAnYScgY2FuJ3QgYmUgaW4gJ2InLiAqLwotCWlmIChsYiA+IGxhKQotCQlyZXR1cm4gKDApOwotCi0JLyogJ2EnIGFuZCAnYicgYmVpbmcgZXF1YWwgYXQgdGhpcyBwb2ludCBpbmRpY2F0ZXMgc2FtZW5lc3MuICovCi0JaWYgKGxiID09IGxhKQotCQlyZXR1cm4gKHN0cm5jYXNlY21wKGEsIGIsIGxiKSA9PSAwKTsKLQotCS8qIE9rLCB3ZSBrbm93IGxhID4gbGIuICovCi0KLQlkaWZmID0gbGEgLSBsYjsKLQotCS8qCi0JICogSWYgJ2EnIGlzIG9ubHkgMSBjaGFyYWN0ZXIgbG9uZ2VyIHRoYW4gJ2InLCB0aGVuIGl0IGNhbid0IGJlCi0JICogYSBzdWJkb21haW4gb2YgJ2InIChiZWNhdXNlIG9mIHRoZSBuZWVkIGZvciB0aGUgJy4nIGxhYmVsCi0JICogc2VwYXJhdG9yKS4KLQkgKi8KLQlpZiAoZGlmZiA8IDIpCi0JCXJldHVybiAoMCk7Ci0KLQkvKgotCSAqIElmIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBsYXN0ICdsYicgY2hhcmFjdGVycyBvZiAnYicKLQkgKiBpc24ndCAnLicsIHRoZW4gaXQgY2FuJ3QgYmUgYSBtYXRjaCAodGhpcyBsZXRzIHVzIGF2b2lkCi0JICogaGF2aW5nICJmb29iYXIuY29tIiBtYXRjaCAiYmFyLmNvbSIpLgotCSAqLwotCWlmIChhW2RpZmYgLSAxXSAhPSAnLicpCi0JCXJldHVybiAoMCk7Ci0KLQkvKgotCSAqIFdlJ3JlIG5vdCBzdXJlIGFib3V0IHRoYXQgJy4nLCBob3dldmVyLiAgSXQgY291bGQgYmUgZXNjYXBlZAotICAgICAgICAgKiBhbmQgdGh1cyBub3QgYSByZWFsbHkgYSBsYWJlbCBzZXBhcmF0b3IuCi0JICovCi0JZXNjYXBlZCA9IDA7Ci0JZm9yIChpID0gZGlmZiAtIDI7IGkgPj0gMDsgaS0tKQotCQlpZiAoYVtpXSA9PSAnXFwnKSB7Ci0JCQlpZiAoZXNjYXBlZCkKLQkJCQllc2NhcGVkID0gMDsKLQkJCWVsc2UKLQkJCQllc2NhcGVkID0gMTsKLQkJfSBlbHNlCi0JCQlicmVhazsKLQlpZiAoZXNjYXBlZCkKLQkJcmV0dXJuICgwKTsKLQotCS8qIE5vdyBjb21wYXJlIGFsaWduZWQgdHJhaWxpbmcgc3Vic3RyaW5nLiAqLwotCWNwID0gYSArIGRpZmY7Ci0JcmV0dXJuIChzdHJuY2FzZWNtcChjcCwgYiwgbGIpID09IDApOwotfQotCi0vKgotICogaW50Ci0gKiBuc19zdWJkb21haW4oYSwgYikKLSAqCWlzICJhIiBhIHN1YmRvbWFpbiBvZiAiYiI/Ci0gKi8KLWludAotbnNfc3ViZG9tYWluKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpIHsKLQlyZXR1cm4gKG5zX3NhbWVuYW1lKGEsIGIpICE9IDEgJiYgbnNfc2FtZWRvbWFpbihhLCBiKSk7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIGludAotICogbnNfbWFrZWNhbm9uKHNyYywgZHN0LCBkc3RzaXplKQotICoJbWFrZSBhIGNhbm9uaWNhbCBjb3B5IG9mIGRvbWFpbiBuYW1lICJzcmMiCi0gKiBub3RlczoKLSAqCWZvbyAtPiBmb28uCi0gKglmb28uIC0+IGZvby4KLSAqCWZvby4uIC0+IGZvby4KLSAqCWZvb1wuIC0+IGZvb1wuLgotICoJZm9vXFwuIC0+IGZvb1xcLgotICovCi0KLWludAotbnNfbWFrZWNhbm9uKGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSkgewotCXNpemVfdCBuID0gc3RybGVuKHNyYyk7Ci0KLQlpZiAobiArIHNpemVvZiAiLiIgPiBkc3RzaXplKSB7CQkJLyogTm90ZTogc2l6ZW9mID09IDIgKi8KLQkJZXJybm8gPSBFTVNHU0laRTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXN0cmNweShkc3QsIHNyYyk7Ci0Jd2hpbGUgKG4gPj0gMVUgJiYgZHN0W24gLSAxXSA9PSAnLicpCQkvKiBFbmRzIGluICIuIiAqLwotCQlpZiAobiA+PSAyVSAmJiBkc3RbbiAtIDJdID09ICdcXCcgJiYJLyogRW5kcyBpbiAiXC4iICovCi0JCSAgICAobiA8IDNVIHx8IGRzdFtuIC0gM10gIT0gJ1xcJykpCS8qIEJ1dCBub3QgIlxcLiIgKi8KLQkJCWJyZWFrOwotCQllbHNlCi0JCQlkc3RbLS1uXSA9ICdcMCc7Ci0JZHN0W24rK10gPSAnLic7Ci0JZHN0W25dID0gJ1wwJzsKLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogaW50Ci0gKiBuc19zYW1lbmFtZShhLCBiKQotICoJZGV0ZXJtaW5lIHdoZXRoZXIgZG9tYWluIG5hbWUgImEiIGlzIHRoZSBzYW1lIGFzIGRvbWFpbiBuYW1lICJiIgotICogcmV0dXJuOgotICoJLTEgb24gZXJyb3IKLSAqCTAgaWYgbmFtZXMgZGlmZmVyCi0gKgkxIGlmIG5hbWVzIGFyZSB0aGUgc2FtZQotICovCi0KLWludAotbnNfc2FtZW5hbWUoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikgewotCWNoYXIgdGFbTlNfTUFYRE5BTUVdLCB0YltOU19NQVhETkFNRV07Ci0KLQlpZiAobnNfbWFrZWNhbm9uKGEsIHRhLCBzaXplb2YgdGEpIDwgMCB8fAotCSAgICBuc19tYWtlY2Fub24oYiwgdGIsIHNpemVvZiB0YikgPCAwKQotCQlyZXR1cm4gKC0xKTsKLQlpZiAoc3RyY2FzZWNtcCh0YSwgdGIpID09IDApCi0JCXJldHVybiAoMSk7Ci0JZWxzZQotCQlyZXR1cm4gKDApOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmFtZXNlci9uc190dGwuYyBiL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfdHRsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjOTgzMzEuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvbmFtZXNlci9uc190dGwuYworKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKgkkTmV0QlNEOiBuc190dGwuYyx2IDEuMiAyMDA0LzA1LzIwIDIwOjM1OjA1IGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWZuZGVmIGxpbnQKLSNpZmRlZiBub3RkZWYKLXN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zX3R0bC5jLHYgMS4xLjIwNi4xIDIwMDQvMDMvMDkgMDg6MzM6NDUgbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiBuc190dGwuYyx2IDEuMiAyMDA0LzA1LzIwIDIwOjM1OjA1IGNocmlzdG9zIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZgotCi0vKiBJbXBvcnQuICovCi0KLSNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZkZWYgU1BSSU5URl9DSEFSCi0jIGRlZmluZSBTUFJJTlRGKHgpIHN0cmxlbihzcHJpbnRmLyoqL3gpCi0jZWxzZQotIyBkZWZpbmUgU1BSSU5URih4KSAoKHNpemVfdClzcHJpbnRmIHgpCi0jZW5kaWYKLQotLyogRm9yd2FyZC4gKi8KLQotc3RhdGljIGludAlmbXQxKGludCB0LCBjaGFyIHMsIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsKLQotLyogTWFjcm9zLiAqLwotCi0jZGVmaW5lIFQoeCkgZG8geyBpZiAoKHgpIDwgMCkgcmV0dXJuICgtMSk7IH0gd2hpbGUoMCkKLQotLyogUHVibGljLiAqLwotCi1pbnQKLW5zX2Zvcm1hdF90dGwodV9sb25nIHNyYywgY2hhciAqZHN0LCBzaXplX3QgZHN0bGVuKSB7Ci0JY2hhciAqb2RzdCA9IGRzdDsKLQlpbnQgc2VjcywgbWlucywgaG91cnMsIGRheXMsIHdlZWtzLCB4OwotCWNoYXIgKnA7Ci0KLQlzZWNzID0gc3JjICUgNjA7ICAgc3JjIC89IDYwOwotCW1pbnMgPSBzcmMgJSA2MDsgICBzcmMgLz0gNjA7Ci0JaG91cnMgPSBzcmMgJSAyNDsgIHNyYyAvPSAyNDsKLQlkYXlzID0gc3JjICUgNzsgICAgc3JjIC89IDc7Ci0Jd2Vla3MgPSBzcmM7ICAgICAgIHNyYyA9IDA7Ci0KLQl4ID0gMDsKLQlpZiAod2Vla3MpIHsKLQkJVChmbXQxKHdlZWtzLCAnVycsICZkc3QsICZkc3RsZW4pKTsKLQkJeCsrOwotCX0KLQlpZiAoZGF5cykgewotCQlUKGZtdDEoZGF5cywgJ0QnLCAmZHN0LCAmZHN0bGVuKSk7Ci0JCXgrKzsKLQl9Ci0JaWYgKGhvdXJzKSB7Ci0JCVQoZm10MShob3VycywgJ0gnLCAmZHN0LCAmZHN0bGVuKSk7Ci0JCXgrKzsKLQl9Ci0JaWYgKG1pbnMpIHsKLQkJVChmbXQxKG1pbnMsICdNJywgJmRzdCwgJmRzdGxlbikpOwotCQl4Kys7Ci0JfQotCWlmIChzZWNzIHx8ICEod2Vla3MgfHwgZGF5cyB8fCBob3VycyB8fCBtaW5zKSkgewotCQlUKGZtdDEoc2VjcywgJ1MnLCAmZHN0LCAmZHN0bGVuKSk7Ci0JCXgrKzsKLQl9Ci0KLQlpZiAoeCA+IDEpIHsKLQkJaW50IGNoOwotCi0JCWZvciAocCA9IG9kc3Q7IChjaCA9ICpwKSAhPSAnXDAnOyBwKyspCi0JCQlpZiAoaXNhc2NpaShjaCkgJiYgaXN1cHBlcihjaCkpCi0JCQkJKnAgPSB0b2xvd2VyKGNoKTsKLQl9Ci0KLQlyZXR1cm4gKGRzdCAtIG9kc3QpOwotfQotCi0jaWZuZGVmIF9MSUJDCi1pbnQKLW5zX3BhcnNlX3R0bChjb25zdCBjaGFyICpzcmMsIHVfbG9uZyAqZHN0KSB7Ci0JdV9sb25nIHR0bCwgdG1wOwotCWludCBjaCwgZGlnaXRzLCBkaXJ0eTsKLQotCXR0bCA9IDA7Ci0JdG1wID0gMDsKLQlkaWdpdHMgPSAwOwotCWRpcnR5ID0gMDsKLQl3aGlsZSAoKGNoID0gKnNyYysrKSAhPSAnXDAnKSB7Ci0JCWlmICghaXNhc2NpaShjaCkgfHwgIWlzcHJpbnQoY2gpKQotCQkJZ290byBlaW52YWw7Ci0JCWlmIChpc2RpZ2l0KGNoKSkgewotCQkJdG1wICo9IDEwOwotCQkJdG1wICs9IChjaCAtICcwJyk7Ci0JCQlkaWdpdHMrKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChkaWdpdHMgPT0gMCkKLQkJCWdvdG8gZWludmFsOwotCQlpZiAoaXNsb3dlcihjaCkpCi0JCQljaCA9IHRvdXBwZXIoY2gpOwotCQlzd2l0Y2ggKGNoKSB7Ci0JCWNhc2UgJ1cnOiAgdG1wICo9IDc7CS8qRkFMTFRIUk9VR0gqLwotCQljYXNlICdEJzogIHRtcCAqPSAyNDsJLypGQUxMVEhST1VHSCovCi0JCWNhc2UgJ0gnOiAgdG1wICo9IDYwOwkvKkZBTExUSFJPVUdIKi8KLQkJY2FzZSAnTSc6ICB0bXAgKj0gNjA7CS8qRkFMTFRIUk9VR0gqLwotCQljYXNlICdTJzogIGJyZWFrOwotCQlkZWZhdWx0OiAgIGdvdG8gZWludmFsOwotCQl9Ci0JCXR0bCArPSB0bXA7Ci0JCXRtcCA9IDA7Ci0JCWRpZ2l0cyA9IDA7Ci0JCWRpcnR5ID0gMTsKLQl9Ci0JaWYgKGRpZ2l0cyA+IDApIHsKLQkJaWYgKGRpcnR5KQotCQkJZ290byBlaW52YWw7Ci0JCWVsc2UKLQkJCXR0bCArPSB0bXA7Ci0JfQotCSpkc3QgPSB0dGw7Ci0JcmV0dXJuICgwKTsKLQotIGVpbnZhbDoKLQllcnJubyA9IEVJTlZBTDsKLQlyZXR1cm4gKC0xKTsKLX0KLSNlbmRpZgotCi0vKiBQcml2YXRlLiAqLwotCi1zdGF0aWMgaW50Ci1mbXQxKGludCB0LCBjaGFyIHMsIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKSB7Ci0JY2hhciB0bXBbNTBdOwotCXNpemVfdCBsZW47Ci0KLQlsZW4gPSBTUFJJTlRGKCh0bXAsICIlZCVjIiwgdCwgcykpOwotCWlmIChsZW4gKyAxID4gKmJ1ZmxlbikKLQkJcmV0dXJuICgtMSk7Ci0Jc3RyY3B5KCpidWYsIHRtcCk7Ci0JKmJ1ZiArPSBsZW47Ci0JKmJ1ZmxlbiAtPSBsZW47Ci0JcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9iYXNlNjQuYyBiL2xpYmMvbmV0YnNkL25ldC9iYXNlNjQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI3MDcwMy4uMDAwMDAwMAotLS0gYS9saWJjL25ldGJzZC9uZXQvYmFzZTY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDAgKzAsMCBAQAotLyoJJE5ldEJTRDogYmFzZTY0LmMsdiAxLjggMjAwMi8xMS8xMSAwMToxNToxNyB0aG9ycGVqIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElOVEVSTkVUIFNPRlRXQVJFIENPTlNPUlRJVU0gRElTQ0xBSU1TCi0gKiBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIElOVEVSTkVUIFNPRlRXQVJFCi0gKiBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgotICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKLSAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUwotICogU09GVFdBUkUuCi0gKi8KLQotLyoKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NSBieSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBJbmMuCi0gKgotICogSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgSW5jLiAoaGVyZWluYWZ0ZXIgY2FsbGVkIElCTSkgZ3JhbnRzCi0gKiBwZXJtaXNzaW9uIHVuZGVyIGl0cyBjb3B5cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBTb2Z0d2FyZSB3aXRoIG9yIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAotICogYWxsIHBhcmFncmFwaHMgb2YgdGhpcyBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHRoZSBuYW1lIG9mIElCTQotICogbm90IGJlIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBtYXJrZXRpbmcgb2YgYW55IHByb2R1Y3QgaW5jb3Jwb3JhdGluZwotICogdGhlIFNvZnR3YXJlIG9yIG1vZGlmaWNhdGlvbnMgdGhlcmVvZiwgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgotICogcGVybWlzc2lvbi4KLSAqCi0gKiBUbyB0aGUgZXh0ZW50IGl0IGhhcyBhIHJpZ2h0IHRvIGRvIHNvLCBJQk0gZ3JhbnRzIGFuIGltbXVuaXR5IGZyb20gc3VpdAotICogdW5kZXIgaXRzIHBhdGVudHMsIGlmIGFueSwgZm9yIHRoZSB1c2UsIHNhbGUgb3IgbWFudWZhY3R1cmUgb2YgcHJvZHVjdHMgdG8KLSAqIHRoZSBleHRlbnQgdGhhdCBzdWNoIHByb2R1Y3RzIGFyZSB1c2VkIGZvciBwZXJmb3JtaW5nIERvbWFpbiBOYW1lIFN5c3RlbQotICogZHluYW1pYyB1cGRhdGVzIGluIFRDUC9JUCBuZXR3b3JrcyBieSBtZWFucyBvZiB0aGUgU29mdHdhcmUuICBObyBpbW11bml0eSBpcwotICogZ3JhbnRlZCBmb3IgYW55IHByb2R1Y3QgcGVyIHNlIG9yIGZvciBhbnkgb3RoZXIgZnVuY3Rpb24gb2YgYW55IHByb2R1Y3QuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIEFORCBJQk0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTLAotICogSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCi0gKiBQQVJUSUNVTEFSIFBVUlBPU0UuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIEFSSVNJTkcKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCi0gKiBJRiBJQk0gSVMgQVBQUklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1fX1JDU0lEKCIkTmV0QlNEOiBiYXNlNjQuYyx2IDEuOCAyMDAyLzExLzExIDAxOjE1OjE3IHRob3JwZWogRXhwICQiKTsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLSNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2Vsc2UKLSNpbmNsdWRlIDxyZXNvbHYuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotc3RhdGljIGNvbnN0IGNoYXIgQmFzZTY0W10gPQotCSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKLXN0YXRpYyBjb25zdCBjaGFyIFBhZDY0ID0gJz0nOwotCi0vKiAoRnJvbSBSRkMxNTIxIGFuZCBkcmFmdC1pZXRmLWRuc3NlYy1zZWNleHQtMDMudHh0KQotICAgVGhlIGZvbGxvd2luZyBlbmNvZGluZyB0ZWNobmlxdWUgaXMgdGFrZW4gZnJvbSBSRkMgMTUyMSBieSBCb3JlbnN0ZWluCi0gICBhbmQgRnJlZWQuICBJdCBpcyByZXByb2R1Y2VkIGhlcmUgaW4gYSBzbGlnaHRseSBlZGl0ZWQgZm9ybSBmb3IKLSAgIGNvbnZlbmllbmNlLgotCi0gICBBIDY1LWNoYXJhY3RlciBzdWJzZXQgb2YgVVMtQVNDSUkgaXMgdXNlZCwgZW5hYmxpbmcgNiBiaXRzIHRvIGJlCi0gICByZXByZXNlbnRlZCBwZXIgcHJpbnRhYmxlIGNoYXJhY3Rlci4gKFRoZSBleHRyYSA2NXRoIGNoYXJhY3RlciwgIj0iLAotICAgaXMgdXNlZCB0byBzaWduaWZ5IGEgc3BlY2lhbCBwcm9jZXNzaW5nIGZ1bmN0aW9uLikKLQotICAgVGhlIGVuY29kaW5nIHByb2Nlc3MgcmVwcmVzZW50cyAyNC1iaXQgZ3JvdXBzIG9mIGlucHV0IGJpdHMgYXMgb3V0cHV0Ci0gICBzdHJpbmdzIG9mIDQgZW5jb2RlZCBjaGFyYWN0ZXJzLiBQcm9jZWVkaW5nIGZyb20gbGVmdCB0byByaWdodCwgYQotICAgMjQtYml0IGlucHV0IGdyb3VwIGlzIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIDMgOC1iaXQgaW5wdXQgZ3JvdXBzLgotICAgVGhlc2UgMjQgYml0cyBhcmUgdGhlbiB0cmVhdGVkIGFzIDQgY29uY2F0ZW5hdGVkIDYtYml0IGdyb3VwcywgZWFjaAotICAgb2Ygd2hpY2ggaXMgdHJhbnNsYXRlZCBpbnRvIGEgc2luZ2xlIGRpZ2l0IGluIHRoZSBiYXNlNjQgYWxwaGFiZXQuCi0KLSAgIEVhY2ggNi1iaXQgZ3JvdXAgaXMgdXNlZCBhcyBhbiBpbmRleCBpbnRvIGFuIGFycmF5IG9mIDY0IHByaW50YWJsZQotICAgY2hhcmFjdGVycy4gVGhlIGNoYXJhY3RlciByZWZlcmVuY2VkIGJ5IHRoZSBpbmRleCBpcyBwbGFjZWQgaW4gdGhlCi0gICBvdXRwdXQgc3RyaW5nLgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgVGFibGUgMTogVGhlIEJhc2U2NCBBbHBoYWJldAotCi0gICAgICBWYWx1ZSBFbmNvZGluZyAgVmFsdWUgRW5jb2RpbmcgIFZhbHVlIEVuY29kaW5nICBWYWx1ZSBFbmNvZGluZwotICAgICAgICAgIDAgQSAgICAgICAgICAgIDE3IFIgICAgICAgICAgICAzNCBpICAgICAgICAgICAgNTEgegotICAgICAgICAgIDEgQiAgICAgICAgICAgIDE4IFMgICAgICAgICAgICAzNSBqICAgICAgICAgICAgNTIgMAotICAgICAgICAgIDIgQyAgICAgICAgICAgIDE5IFQgICAgICAgICAgICAzNiBrICAgICAgICAgICAgNTMgMQotICAgICAgICAgIDMgRCAgICAgICAgICAgIDIwIFUgICAgICAgICAgICAzNyBsICAgICAgICAgICAgNTQgMgotICAgICAgICAgIDQgRSAgICAgICAgICAgIDIxIFYgICAgICAgICAgICAzOCBtICAgICAgICAgICAgNTUgMwotICAgICAgICAgIDUgRiAgICAgICAgICAgIDIyIFcgICAgICAgICAgICAzOSBuICAgICAgICAgICAgNTYgNAotICAgICAgICAgIDYgRyAgICAgICAgICAgIDIzIFggICAgICAgICAgICA0MCBvICAgICAgICAgICAgNTcgNQotICAgICAgICAgIDcgSCAgICAgICAgICAgIDI0IFkgICAgICAgICAgICA0MSBwICAgICAgICAgICAgNTggNgotICAgICAgICAgIDggSSAgICAgICAgICAgIDI1IFogICAgICAgICAgICA0MiBxICAgICAgICAgICAgNTkgNwotICAgICAgICAgIDkgSiAgICAgICAgICAgIDI2IGEgICAgICAgICAgICA0MyByICAgICAgICAgICAgNjAgOAotICAgICAgICAgMTAgSyAgICAgICAgICAgIDI3IGIgICAgICAgICAgICA0NCBzICAgICAgICAgICAgNjEgOQotICAgICAgICAgMTEgTCAgICAgICAgICAgIDI4IGMgICAgICAgICAgICA0NSB0ICAgICAgICAgICAgNjIgKwotICAgICAgICAgMTIgTSAgICAgICAgICAgIDI5IGQgICAgICAgICAgICA0NiB1ICAgICAgICAgICAgNjMgLwotICAgICAgICAgMTMgTiAgICAgICAgICAgIDMwIGUgICAgICAgICAgICA0NyB2Ci0gICAgICAgICAxNCBPICAgICAgICAgICAgMzEgZiAgICAgICAgICAgIDQ4IHcgICAgICAgICAocGFkKSA9Ci0gICAgICAgICAxNSBQICAgICAgICAgICAgMzIgZyAgICAgICAgICAgIDQ5IHgKLSAgICAgICAgIDE2IFEgICAgICAgICAgICAzMyBoICAgICAgICAgICAgNTAgeQotCi0gICBTcGVjaWFsIHByb2Nlc3NpbmcgaXMgcGVyZm9ybWVkIGlmIGZld2VyIHRoYW4gMjQgYml0cyBhcmUgYXZhaWxhYmxlCi0gICBhdCB0aGUgZW5kIG9mIHRoZSBkYXRhIGJlaW5nIGVuY29kZWQuICBBIGZ1bGwgZW5jb2RpbmcgcXVhbnR1bSBpcwotICAgYWx3YXlzIGNvbXBsZXRlZCBhdCB0aGUgZW5kIG9mIGEgcXVhbnRpdHkuICBXaGVuIGZld2VyIHRoYW4gMjQgaW5wdXQKLSAgIGJpdHMgYXJlIGF2YWlsYWJsZSBpbiBhbiBpbnB1dCBncm91cCwgemVybyBiaXRzIGFyZSBhZGRlZCAob24gdGhlCi0gICByaWdodCkgdG8gZm9ybSBhbiBpbnRlZ3JhbCBudW1iZXIgb2YgNi1iaXQgZ3JvdXBzLiAgUGFkZGluZyBhdCB0aGUKLSAgIGVuZCBvZiB0aGUgZGF0YSBpcyBwZXJmb3JtZWQgdXNpbmcgdGhlICc9JyBjaGFyYWN0ZXIuCi0KLSAgIFNpbmNlIGFsbCBiYXNlNjQgaW5wdXQgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIG9jdGV0cywgb25seSB0aGUKLSAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIGZvbGxvd2luZyBjYXNlcyBjYW4gYXJpc2U6Ci0KLSAgICAgICAoMSkgdGhlIGZpbmFsIHF1YW50dW0gb2YgZW5jb2RpbmcgaW5wdXQgaXMgYW4gaW50ZWdyYWwKLSAgICAgICAgICAgbXVsdGlwbGUgb2YgMjQgYml0czsgaGVyZSwgdGhlIGZpbmFsIHVuaXQgb2YgZW5jb2RlZAotCSAgIG91dHB1dCB3aWxsIGJlIGFuIGludGVncmFsIG11bHRpcGxlIG9mIDQgY2hhcmFjdGVycwotCSAgIHdpdGggbm8gIj0iIHBhZGRpbmcsCi0gICAgICAgKDIpIHRoZSBmaW5hbCBxdWFudHVtIG9mIGVuY29kaW5nIGlucHV0IGlzIGV4YWN0bHkgOCBiaXRzOwotICAgICAgICAgICBoZXJlLCB0aGUgZmluYWwgdW5pdCBvZiBlbmNvZGVkIG91dHB1dCB3aWxsIGJlIHR3bwotCSAgIGNoYXJhY3RlcnMgZm9sbG93ZWQgYnkgdHdvICI9IiBwYWRkaW5nIGNoYXJhY3RlcnMsIG9yCi0gICAgICAgKDMpIHRoZSBmaW5hbCBxdWFudHVtIG9mIGVuY29kaW5nIGlucHV0IGlzIGV4YWN0bHkgMTYgYml0czsKLSAgICAgICAgICAgaGVyZSwgdGhlIGZpbmFsIHVuaXQgb2YgZW5jb2RlZCBvdXRwdXQgd2lsbCBiZSB0aHJlZQotCSAgIGNoYXJhY3RlcnMgZm9sbG93ZWQgYnkgb25lICI9IiBwYWRkaW5nIGNoYXJhY3Rlci4KLSAgICovCi0KLWludAotYjY0X250b3Aoc3JjLCBzcmNsZW5ndGgsIHRhcmdldCwgdGFyZ3NpemUpCi0JdV9jaGFyIGNvbnN0ICpzcmM7Ci0Jc2l6ZV90IHNyY2xlbmd0aDsKLQljaGFyICp0YXJnZXQ7Ci0Jc2l6ZV90IHRhcmdzaXplOwotewotCXNpemVfdCBkYXRhbGVuZ3RoID0gMDsKLQl1X2NoYXIgaW5wdXRbM10gPSB7IDAsIDAsIDAgfTsgIC8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KLQl1X2NoYXIgb3V0cHV0WzRdOwotCXNpemVfdCBpOwotCi0JYXNzZXJ0KHNyYyAhPSBOVUxMKTsKLQlhc3NlcnQodGFyZ2V0ICE9IE5VTEwpOwotCi0Jd2hpbGUgKDIgPCBzcmNsZW5ndGgpIHsKLQkJaW5wdXRbMF0gPSAqc3JjKys7Ci0JCWlucHV0WzFdID0gKnNyYysrOwotCQlpbnB1dFsyXSA9ICpzcmMrKzsKLQkJc3JjbGVuZ3RoIC09IDM7Ci0KLQkJb3V0cHV0WzBdID0gKHVfaW50MzJfdClpbnB1dFswXSA+PiAyOwotCQlvdXRwdXRbMV0gPSAoKHVfaW50MzJfdCkoaW5wdXRbMF0gJiAweDAzKSA8PCA0KSArCi0JCSAgICAoKHVfaW50MzJfdClpbnB1dFsxXSA+PiA0KTsKLQkJb3V0cHV0WzJdID0gKCh1X2ludDMyX3QpKGlucHV0WzFdICYgMHgwZikgPDwgMikgKwotCQkgICAgKCh1X2ludDMyX3QpaW5wdXRbMl0gPj4gNik7Ci0JCW91dHB1dFszXSA9IGlucHV0WzJdICYgMHgzZjsKLQkJYXNzZXJ0KG91dHB1dFswXSA8IDY0KTsKLQkJYXNzZXJ0KG91dHB1dFsxXSA8IDY0KTsKLQkJYXNzZXJ0KG91dHB1dFsyXSA8IDY0KTsKLQkJYXNzZXJ0KG91dHB1dFszXSA8IDY0KTsKLQotCQlpZiAoZGF0YWxlbmd0aCArIDQgPiB0YXJnc2l6ZSkKLQkJCXJldHVybiAoLTEpOwotCQl0YXJnZXRbZGF0YWxlbmd0aCsrXSA9IEJhc2U2NFtvdXRwdXRbMF1dOwotCQl0YXJnZXRbZGF0YWxlbmd0aCsrXSA9IEJhc2U2NFtvdXRwdXRbMV1dOwotCQl0YXJnZXRbZGF0YWxlbmd0aCsrXSA9IEJhc2U2NFtvdXRwdXRbMl1dOwotCQl0YXJnZXRbZGF0YWxlbmd0aCsrXSA9IEJhc2U2NFtvdXRwdXRbM11dOwotCX0KLQotCS8qIE5vdyB3ZSB3b3JyeSBhYm91dCBwYWRkaW5nLiAqLwotCWlmICgwICE9IHNyY2xlbmd0aCkgewotCQkvKiBHZXQgd2hhdCdzIGxlZnQuICovCi0JCWlucHV0WzBdID0gaW5wdXRbMV0gPSBpbnB1dFsyXSA9ICdcMCc7Ci0JCWZvciAoaSA9IDA7IGkgPCBzcmNsZW5ndGg7IGkrKykKLQkJCWlucHV0W2ldID0gKnNyYysrOwotCi0JCW91dHB1dFswXSA9ICh1X2ludDMyX3QpaW5wdXRbMF0gPj4gMjsKLQkJb3V0cHV0WzFdID0gKCh1X2ludDMyX3QpKGlucHV0WzBdICYgMHgwMykgPDwgNCkgKwotCQkgICAgKCh1X2ludDMyX3QpaW5wdXRbMV0gPj4gNCk7Ci0JCW91dHB1dFsyXSA9ICgodV9pbnQzMl90KShpbnB1dFsxXSAmIDB4MGYpIDw8IDIpICsKLQkJICAgICgodV9pbnQzMl90KWlucHV0WzJdID4+IDYpOwotCQlhc3NlcnQob3V0cHV0WzBdIDwgNjQpOwotCQlhc3NlcnQob3V0cHV0WzFdIDwgNjQpOwotCQlhc3NlcnQob3V0cHV0WzJdIDwgNjQpOwotCi0JCWlmIChkYXRhbGVuZ3RoICsgNCA+IHRhcmdzaXplKQotCQkJcmV0dXJuICgtMSk7Ci0JCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gQmFzZTY0W291dHB1dFswXV07Ci0JCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gQmFzZTY0W291dHB1dFsxXV07Ci0JCWlmIChzcmNsZW5ndGggPT0gMSkKLQkJCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gUGFkNjQ7Ci0JCWVsc2UKLQkJCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gQmFzZTY0W291dHB1dFsyXV07Ci0JCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gUGFkNjQ7Ci0JfQotCWlmIChkYXRhbGVuZ3RoID49IHRhcmdzaXplKQotCQlyZXR1cm4gKC0xKTsKLQl0YXJnZXRbZGF0YWxlbmd0aF0gPSAnXDAnOwkvKiBSZXR1cm5lZCB2YWx1ZSBkb2Vzbid0IGNvdW50IFwwLiAqLwotCXJldHVybiAoZGF0YWxlbmd0aCk7Ci19Ci0KLS8qIHNraXBzIGFsbCB3aGl0ZXNwYWNlIGFueXdoZXJlLgotICAgY29udmVydHMgY2hhcmFjdGVycywgZm91ciBhdCBhIHRpbWUsIHN0YXJ0aW5nIGF0IChvciBhZnRlcikKLSAgIHNyYyBmcm9tIGJhc2UgLSA2NCBudW1iZXJzIGludG8gdGhyZWUgOCBiaXQgYnl0ZXMgaW4gdGhlIHRhcmdldCBhcmVhLgotICAgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGRhdGEgYnl0ZXMgc3RvcmVkIGF0IHRoZSB0YXJnZXQsIG9yIC0xIG9uIGVycm9yLgotICovCi0KLWludAotYjY0X3B0b24oc3JjLCB0YXJnZXQsIHRhcmdzaXplKQotCWNoYXIgY29uc3QgKnNyYzsKLQl1X2NoYXIgKnRhcmdldDsKLQlzaXplX3QgdGFyZ3NpemU7Ci17Ci0Jc2l6ZV90IHRhcmluZGV4OwotCWludCBzdGF0ZSwgY2g7Ci0JY2hhciAqcG9zOwotCi0JYXNzZXJ0KHNyYyAhPSBOVUxMKTsKLQlhc3NlcnQodGFyZ2V0ICE9IE5VTEwpOwotCi0Jc3RhdGUgPSAwOwotCXRhcmluZGV4ID0gMDsKLQotCXdoaWxlICgoY2ggPSAodV9jaGFyKSAqc3JjKyspICE9ICdcMCcpIHsKLQkJaWYgKGlzc3BhY2UoY2gpKQkvKiBTa2lwIHdoaXRlc3BhY2UgYW55d2hlcmUuICovCi0JCQljb250aW51ZTsKLQotCQlpZiAoY2ggPT0gUGFkNjQpCi0JCQlicmVhazsKLQotCQlwb3MgPSBzdHJjaHIoQmFzZTY0LCBjaCk7Ci0JCWlmIChwb3MgPT0gMCkgCQkvKiBBIG5vbi1iYXNlNjQgY2hhcmFjdGVyLiAqLwotCQkJcmV0dXJuICgtMSk7Ci0KLQkJc3dpdGNoIChzdGF0ZSkgewotCQljYXNlIDA6Ci0JCQlpZiAodGFyZ2V0KSB7Ci0JCQkJaWYgKHRhcmluZGV4ID49IHRhcmdzaXplKQotCQkJCQlyZXR1cm4gKC0xKTsKLQkJCQl0YXJnZXRbdGFyaW5kZXhdID0gKHBvcyAtIEJhc2U2NCkgPDwgMjsKLQkJCX0KLQkJCXN0YXRlID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlpZiAodGFyZ2V0KSB7Ci0JCQkJaWYgKHRhcmluZGV4ICsgMSA+PSB0YXJnc2l6ZSkKLQkJCQkJcmV0dXJuICgtMSk7Ci0JCQkJdGFyZ2V0W3RhcmluZGV4XSB8PQotCQkJCSAgICAodV9pbnQzMl90KShwb3MgLSBCYXNlNjQpID4+IDQ7Ci0JCQkJdGFyZ2V0W3RhcmluZGV4KzFdICA9ICgocG9zIC0gQmFzZTY0KSAmIDB4MGYpCi0JCQkJCQkJPDwgNCA7Ci0JCQl9Ci0JCQl0YXJpbmRleCsrOwotCQkJc3RhdGUgPSAyOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWlmICh0YXJnZXQpIHsKLQkJCQlpZiAodGFyaW5kZXggKyAxID49IHRhcmdzaXplKQotCQkJCQlyZXR1cm4gKC0xKTsKLQkJCQl0YXJnZXRbdGFyaW5kZXhdIHw9Ci0JCQkJCSh1X2ludDMyX3QpKHBvcyAtIEJhc2U2NCkgPj4gMjsKLQkJCQl0YXJnZXRbdGFyaW5kZXgrMV0gPSAoKHBvcyAtIEJhc2U2NCkgJiAweDAzKQotCQkJCQkJCTw8IDY7Ci0JCQl9Ci0JCQl0YXJpbmRleCsrOwotCQkJc3RhdGUgPSAzOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCWlmICh0YXJnZXQpIHsKLQkJCQlpZiAodGFyaW5kZXggPj0gdGFyZ3NpemUpCi0JCQkJCXJldHVybiAoLTEpOwotCQkJCXRhcmdldFt0YXJpbmRleF0gfD0gKHBvcyAtIEJhc2U2NCk7Ci0JCQl9Ci0JCQl0YXJpbmRleCsrOwotCQkJc3RhdGUgPSAwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlhYm9ydCgpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBXZSBhcmUgZG9uZSBkZWNvZGluZyBCYXNlLTY0IGNoYXJzLiAgTGV0J3Mgc2VlIGlmIHdlIGVuZGVkCi0JICogb24gYSBieXRlIGJvdW5kYXJ5LCBhbmQvb3Igd2l0aCBlcnJvbmVvdXMgdHJhaWxpbmcgY2hhcmFjdGVycy4KLQkgKi8KLQotCWlmIChjaCA9PSBQYWQ2NCkgewkJLyogV2UgZ290IGEgcGFkIGNoYXIuICovCi0JCWNoID0gKnNyYysrOwkJLyogU2tpcCBpdCwgZ2V0IG5leHQuICovCi0JCXN3aXRjaCAoc3RhdGUpIHsKLQkJY2FzZSAwOgkJLyogSW52YWxpZCA9IGluIGZpcnN0IHBvc2l0aW9uICovCi0JCWNhc2UgMToJCS8qIEludmFsaWQgPSBpbiBzZWNvbmQgcG9zaXRpb24gKi8KLQkJCXJldHVybiAoLTEpOwotCi0JCWNhc2UgMjoJCS8qIFZhbGlkLCBtZWFucyBvbmUgYnl0ZSBvZiBpbmZvICovCi0JCQkvKiBTa2lwIGFueSBudW1iZXIgb2Ygc3BhY2VzLiAqLwotCQkJZm9yICg7IGNoICE9ICdcMCc7IGNoID0gKHVfY2hhcikgKnNyYysrKQotCQkJCWlmICghaXNzcGFjZShjaCkpCi0JCQkJCWJyZWFrOwotCQkJLyogTWFrZSBzdXJlIHRoZXJlIGlzIGFub3RoZXIgdHJhaWxpbmcgPSBzaWduLiAqLwotCQkJaWYgKGNoICE9IFBhZDY0KQotCQkJCXJldHVybiAoLTEpOwotCQkJY2ggPSAqc3JjKys7CQkvKiBTa2lwIHRoZSA9ICovCi0JCQkvKiBGYWxsIHRocm91Z2ggdG8gInNpbmdsZSB0cmFpbGluZyA9IiBjYXNlLiAqLwotCQkJLyogRkFMTFRIUk9VR0ggKi8KLQotCQljYXNlIDM6CQkvKiBWYWxpZCwgbWVhbnMgdHdvIGJ5dGVzIG9mIGluZm8gKi8KLQkJCS8qCi0JCQkgKiBXZSBrbm93IHRoaXMgY2hhciBpcyBhbiA9LiAgSXMgdGhlcmUgYW55dGhpbmcgYnV0Ci0JCQkgKiB3aGl0ZXNwYWNlIGFmdGVyIGl0PwotCQkJICovCi0JCQlmb3IgKDsgY2ggIT0gJ1wwJzsgY2ggPSAodV9jaGFyKSAqc3JjKyspCi0JCQkJaWYgKCFpc3NwYWNlKGNoKSkKLQkJCQkJcmV0dXJuICgtMSk7Ci0KLQkJCS8qCi0JCQkgKiBOb3cgbWFrZSBzdXJlIGZvciBjYXNlcyAyIGFuZCAzIHRoYXQgdGhlICJleHRyYSIKLQkJCSAqIGJpdHMgdGhhdCBzbG9wcGVkIHBhc3QgdGhlIGxhc3QgZnVsbCBieXRlIHdlcmUKLQkJCSAqIHplcm9zLiAgSWYgd2UgZG9uJ3QgY2hlY2sgdGhlbSwgdGhleSBiZWNvbWUgYQotCQkJICogc3VibGltaW5hbCBjaGFubmVsLgotCQkJICovCi0JCQlpZiAodGFyZ2V0ICYmIHRhcmdldFt0YXJpbmRleF0gIT0gMCkKLQkJCQlyZXR1cm4gKC0xKTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFdlIGVuZGVkIGJ5IHNlZWluZyB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuICBNYWtlIHN1cmUgd2UKLQkJICogaGF2ZSBubyBwYXJ0aWFsIGJ5dGVzIGx5aW5nIGFyb3VuZC4KLQkJICovCi0JCWlmIChzdGF0ZSAhPSAwKQotCQkJcmV0dXJuICgtMSk7Ci0JfQotCi0JcmV0dXJuICh0YXJpbmRleCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvZ2V0YWRkcmluZm8uYyBiL2xpYmMvbmV0YnNkL25ldC9nZXRhZGRyaW5mby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzdjNDIzLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL25ldC9nZXRhZGRyaW5mby5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQ1MSArMCwwIEBACi0vKgkkTmV0QlNEOiBnZXRhZGRyaW5mby5jLHYgMS44MiAyMDA2LzAzLzI1IDEyOjA5OjQwIHJwYXVsbyBFeHAgJAkqLwotLyoJJEtBTUU6IGdldGFkZHJpbmZvLmMsdiAxLjI5IDIwMDAvMDgvMzEgMTc6MjY6NTcgaXRvanVuIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVjdC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBJc3N1ZXMgdG8gYmUgZGlzY3Vzc2VkOgotICogLSBUaHJlYWQgc2FmZS1uZXNzIG11c3QgYmUgY2hlY2tlZC4KLSAqIC0gUmV0dXJuIHZhbHVlcy4gIFRoZXJlIGFyZSBub25zdGFuZGFyZCByZXR1cm4gdmFsdWVzIGRlZmluZWQgYW5kIHVzZWQKLSAqICAgaW4gdGhlIHNvdXJjZSBjb2RlLiAgVGhpcyBpcyBiZWNhdXNlIFJGQzI1NTMgaXMgc2lsZW50IGFib3V0IHdoaWNoIGVycm9yCi0gKiAgIGNvZGUgbXVzdCBiZSByZXR1cm5lZCBmb3Igd2hpY2ggc2l0dWF0aW9uLgotICogLSBJUHY0IGNsYXNzZnVsIChzaG9ydGVuZWQpIGZvcm0uICBSRkMyNTUzIGlzIHNpbGVudCBhYm91dCBpdC4gIFhORVQgNS4yCi0gKiAgIHNheXMgdG8gdXNlIGluZXRfYXRvbigpIHRvIGNvbnZlcnQgSVB2NCBudW1lcmljIHRvIGJpbmFyeSAoYWxvd3MKLSAqICAgY2xhc3NmdWwgZm9ybSBhcyBhIHJlc3VsdCkuCi0gKiAgIGN1cnJlbnQgY29kZSAtIGRpc2FsbG93IGNsYXNzZnVsIGZvcm0gZm9yIElQdjQgKGR1ZSB0byB1c2Ugb2YgaW5ldF9wdG9uKS4KLSAqIC0gZnJlZWFkZHJpbmZvKE5VTEwpLiAgUkZDMjU1MyBpcyBzaWxlbnQgYWJvdXQgaXQuICBYTkVUIDUuMiBzYXlzIGl0IGlzCi0gKiAgIGludmFsaWQuCi0gKiAgIGN1cnJlbnQgY29kZSAtIFNFR1Ygb24gZnJlZWFkZHJpbmZvKE5VTEwpCi0gKiBOb3RlOgotICogLSBXZSB1c2UgZ2V0aXBub2RlYnluYW1lKCkganVzdCBmb3IgdGhyZWFkLXNhZmVuZXNzLiAgVGhlcmUncyBubyBpbnRlbnQKLSAqICAgdG8gbGV0IGl0IGRvIFBGX1VOU1BFQyAoYWN0dWFsbHkgd2UgbmV2ZXIgcGFzcyBQRl9VTlNQRUMgdG8KLSAqICAgZ2V0aXBub2RlYnluYW1lKCkuCi0gKiAtIFRoZSBjb2RlIGZpbHRlcnMgb3V0IEFGcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwsCi0gKiAgIHdoZW4gZ2xvYmJpbmcgTlVMTCBob3N0bmFtZSAodG8gbG9vcGJhY2ssIG9yIHdpbGRjYXJkKS4gIElzIGl0IHRoZSByaWdodAotICogICB0aGluZyB0byBkbz8gIFdoYXQgaXMgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHBvc3QtUkZDMjU1MyBBSV9BRERSQ09ORklHCi0gKiAgIGluIGFpX2ZsYWdzPwotICogLSAocG9zdC0yNTUzKSBzZW1hbnRpY3Mgb2YgQUlfQUREUkNPTkZJRyBpdHNlbGYgaXMgdG9vIHZhZ3VlLgotICogICAoMSkgd2hhdCBzaG91bGQgd2UgZG8gYWdhaW5zdCBudW1lcmljIGhvc3RuYW1lICgyKSB3aGF0IHNob3VsZCB3ZSBkbwotICogICBhZ2FpbnN0IE5VTEwgaG9zdG5hbWUgKDMpIHdoYXQgaXMgQUlfQUREUkNPTkZJRyBpdHNlbGYuICBBRiBub3QgcmVhZHk/Ci0gKiAgIG5vbi1sb29wYmFjayBhZGRyZXNzIGNvbmZpZ3VyZWQ/ICBnbG9iYWwgYWRkcmVzcyBjb25maWd1cmVkPwotICogLSBUbyBhdm9pZCBzZWFyY2ggb3JkZXIgaXNzdWUsIHdlIGhhdmUgYSBiaWcgYW1vdW50IG9mIGNvZGUgZHVwbGljYXRlCi0gKiAgIGZyb20gZ2V0aG5hbWFkZHIuYyBhbmQgc29tZSBvdGhlciBwbGFjZXMuICBUaGUgaXNzdWVzIHRoYXQgdGhlcmUncyBubwotICogICBsb3dlciBsYXllciBmdW5jdGlvbiB0byBsb29rdXAgIklQdjQgb3IgSVB2NiIgcmVjb3JkLiAgQ2FsbGluZwotICogICBnZXRob3N0YnluYW1lMiBmcm9tIGdldGFkZHJpbmZvIHdpbGwgZW5kIHVwIGluIHdyb25nIHNlYXJjaCBvcmRlciwgYXMKLSAqICAgZm9sbG93czoKLSAqCS0gVGhlIGNvZGUgbWFrZXMgdXNlIG9mIGZvbGxvd2luZyBjYWxscyB3aGVuIGFza2VkIHRvIHJlc29sdmVyIHdpdGgKLSAqCSAgYWlfZmFtaWx5ICA9IFBGX1VOU1BFQzoKLSAqCQlnZXRpcG5vZGVieW5hbWUoaG9zdCwgQUZfSU5FVDYpOwotICoJCWdldGlwbm9kZWJ5bmFtZShob3N0LCBBRl9JTkVUKTsKLSAqCSAgVGhpcyB3aWxsIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIHF1ZXJpZXMgaWYgdGhlIG5vZGUgaXMgY29uZmlndXJlIHRvCi0gKgkgIHByZWZlciAvZXRjL2hvc3RzIHRoYW4gRE5TOgotICoJCWxvb2t1cCAvZXRjL2hvc3RzIGZvciBJUHY2IGFkZHJlc3MKLSAqCQlsb29rdXAgRE5TIGZvciBJUHY2IGFkZHJlc3MKLSAqCQlsb29rdXAgL2V0Yy9ob3N0cyBmb3IgSVB2NCBhZGRyZXNzCi0gKgkJbG9va3VwIEROUyBmb3IgSVB2NCBhZGRyZXNzCi0gKgkgIHdoaWNoIG1heSBub3QgbWVldCBwZW9wbGUncyByZXF1aXJlbWVudC4KLSAqCSAgVGhlIHJpZ2h0IHRoaW5nIHRvIGhhcHBlbiBpcyB0byBoYXZlIHVuZGVybHlpbmcgbGF5ZXIgd2hpY2ggZG9lcwotICoJICBQRl9VTlNQRUMgbG9va3VwIChsb29rdXAgYm90aCkgYW5kIHJldHVybiBjaGFpbiBvZiBhZGRyaW5mb3MuCi0gKgkgIFRoaXMgd291bGQgcmVzdWx0IGluIGEgYml0IG9mIGNvZGUgZHVwbGljYXRlIHdpdGggX2Ruc19naGJ5bmFtZSgpIGFuZAotICoJICBmcmllbmRzLgotICovCi0KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPHN5cy91bi5oPgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPHN5c2xvZy5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgIm5zc3dpdGNoLmgiCi0KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLSNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KLSNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KLQotdHlwZWRlZiB1bmlvbiBzb2NrYWRkcl91bmlvbiB7Ci0gICAgc3RydWN0IHNvY2thZGRyICAgICBnZW5lcmljOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgaW47Ci0gICAgc3RydWN0IHNvY2thZGRyX2luNiBpbjY7Ci19IHNvY2thZGRyX3VuaW9uOwotCi0jZGVmaW5lIFNVQ0NFU1MgMAotI2RlZmluZSBBTlkgMAotI2RlZmluZSBZRVMgMQotI2RlZmluZSBOTyAgMAotCi1zdGF0aWMgY29uc3QgY2hhciBpbl9hZGRyYW55W10gPSB7IDAsIDAsIDAsIDAgfTsKLXN0YXRpYyBjb25zdCBjaGFyIGluX2xvb3BiYWNrW10gPSB7IDEyNywgMCwgMCwgMSB9OwotI2lmZGVmIElORVQ2Ci1zdGF0aWMgY29uc3QgY2hhciBpbjZfYWRkcmFueVtdID0gewotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKLX07Ci1zdGF0aWMgY29uc3QgY2hhciBpbjZfbG9vcGJhY2tbXSA9IHsKLQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxCi19OwotI2VuZGlmCi0KLS8vIFRoaXMgc2hvdWxkIGJlIHN5bmNocm9uaXplZCB0byBSZXNwb25zZUNvZGUuaAotc3RhdGljIGNvbnN0IGludCBEbnNQcm94eVF1ZXJ5UmVzdWx0ID0gMjIyOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGFmZCB7Ci0JaW50IGFfYWY7Ci0JaW50IGFfYWRkcmxlbjsKLQlpbnQgYV9zb2NrbGVuOwotCWludCBhX29mZjsKLQljb25zdCBjaGFyICphX2FkZHJhbnk7Ci0JY29uc3QgY2hhciAqYV9sb29wYmFjazsKLQlpbnQgYV9zY29wZWQ7Ci19IGFmZGwgW10gPSB7Ci0jaWZkZWYgSU5FVDYKLQl7UEZfSU5FVDYsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLAotCSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNiksCi0JIG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl9pbjYsIHNpbjZfYWRkciksCi0JIGluNl9hZGRyYW55LCBpbjZfbG9vcGJhY2ssIDF9LAotI2VuZGlmCi0Je1BGX0lORVQsIHNpemVvZihzdHJ1Y3QgaW5fYWRkciksCi0JIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pLAotCSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfaW4sIHNpbl9hZGRyKSwKLQkgaW5fYWRkcmFueSwgaW5fbG9vcGJhY2ssIDB9LAotCXswLCAwLCAwLCAwLCBOVUxMLCBOVUxMLCAwfSwKLX07Ci0KLXN0cnVjdCBleHBsb3JlIHsKLQlpbnQgZV9hZjsKLQlpbnQgZV9zb2NrdHlwZTsKLQlpbnQgZV9wcm90b2NvbDsKLQljb25zdCBjaGFyICplX3Byb3Rvc3RyOwotCWludCBlX3dpbGQ7Ci0jZGVmaW5lIFdJTERfQUYoZXgpCQkoKGV4KS0+ZV93aWxkICYgMHgwMSkKLSNkZWZpbmUgV0lMRF9TT0NLVFlQRShleCkJKChleCktPmVfd2lsZCAmIDB4MDIpCi0jZGVmaW5lIFdJTERfUFJPVE9DT0woZXgpCSgoZXgpLT5lX3dpbGQgJiAweDA0KQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBleHBsb3JlIGV4cGxvcmVbXSA9IHsKLSNpZiAwCi0JeyBQRl9MT0NBTCwgMCwgQU5ZLCBBTlksIE5VTEwsIDB4MDEgfSwKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JeyBQRl9JTkVUNiwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICJ1ZHAiLCAweDA3IH0sCi0JeyBQRl9JTkVUNiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQLCAidGNwIiwgMHgwNyB9LAotCXsgUEZfSU5FVDYsIFNPQ0tfUkFXLCBBTlksIE5VTEwsIDB4MDUgfSwKLSNlbmRpZgotCXsgUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICJ1ZHAiLCAweDA3IH0sCi0JeyBQRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1AsICJ0Y3AiLCAweDA3IH0sCi0JeyBQRl9JTkVULCBTT0NLX1JBVywgQU5ZLCBOVUxMLCAweDA1IH0sCi0JeyBQRl9VTlNQRUMsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLCAidWRwIiwgMHgwNyB9LAotCXsgUEZfVU5TUEVDLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1AsICJ0Y3AiLCAweDA3IH0sCi0JeyBQRl9VTlNQRUMsIFNPQ0tfUkFXLCBBTlksIE5VTEwsIDB4MDUgfSwKLQl7IC0xLCAwLCAwLCBOVUxMLCAwIH0sCi19OwotCi0jaWZkZWYgSU5FVDYKLSNkZWZpbmUgUFRPTl9NQVgJMTYKLSNlbHNlCi0jZGVmaW5lIFBUT05fTUFYCTQKLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgbnNfc3JjIGRlZmF1bHRfZG5zX2ZpbGVzW10gPSB7Ci0JeyBOU1NSQ19GSUxFUywgCU5TX1NVQ0NFU1MgfSwKLQl7IE5TU1JDX0ROUywgCU5TX1NVQ0NFU1MgfSwKLQl7IDAsIDAgfQotfTsKLQotI2RlZmluZSBNQVhQQUNLRVQJKDY0KjEwMjQpCi0KLXR5cGVkZWYgdW5pb24gewotCUhFQURFUiBoZHI7Ci0JdV9jaGFyIGJ1ZltNQVhQQUNLRVRdOwotfSBxdWVyeWJ1ZjsKLQotc3RydWN0IHJlc190YXJnZXQgewotCXN0cnVjdCByZXNfdGFyZ2V0ICpuZXh0OwotCWNvbnN0IGNoYXIgKm5hbWU7CS8qIGRvbWFpbiBuYW1lICovCi0JaW50IHFjbGFzcywgcXR5cGU7CS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCi0JdV9jaGFyICphbnN3ZXI7CQkvKiBidWZmZXIgdG8gcHV0IGFuc3dlciAqLwotCWludCBhbnNsZW47CQkvKiBzaXplIG9mIGFuc3dlciBidWZmZXIgKi8KLQlpbnQgbjsJCQkvKiByZXN1bHQgbGVuZ3RoICovCi19OwotCi1zdGF0aWMgaW50IHN0cjJudW1iZXIoY29uc3QgY2hhciAqKTsKLXN0YXRpYyBpbnQgZXhwbG9yZV9mcWRuKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLCBjb25zdCBjaGFyICosCi0JY29uc3QgY2hhciAqLCBzdHJ1Y3QgYWRkcmluZm8gKiosIGNvbnN0IGNoYXIgKmlmYWNlLCBpbnQgbWFyayk7Ci1zdGF0aWMgaW50IGV4cGxvcmVfbnVsbChjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwKLQljb25zdCBjaGFyICosIHN0cnVjdCBhZGRyaW5mbyAqKik7Ci1zdGF0aWMgaW50IGV4cGxvcmVfbnVtZXJpYyhjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqLAotCWNvbnN0IGNoYXIgKiwgc3RydWN0IGFkZHJpbmZvICoqLCBjb25zdCBjaGFyICopOwotc3RhdGljIGludCBleHBsb3JlX251bWVyaWNfc2NvcGUoY29uc3Qgc3RydWN0IGFkZHJpbmZvICosIGNvbnN0IGNoYXIgKiwKLQljb25zdCBjaGFyICosIHN0cnVjdCBhZGRyaW5mbyAqKik7Ci1zdGF0aWMgaW50IGdldF9jYW5vbm5hbWUoY29uc3Qgc3RydWN0IGFkZHJpbmZvICosCi0Jc3RydWN0IGFkZHJpbmZvICosIGNvbnN0IGNoYXIgKik7Ci1zdGF0aWMgc3RydWN0IGFkZHJpbmZvICpnZXRfYWkoY29uc3Qgc3RydWN0IGFkZHJpbmZvICosCi0JY29uc3Qgc3RydWN0IGFmZCAqLCBjb25zdCBjaGFyICopOwotc3RhdGljIGludCBnZXRfcG9ydG1hdGNoKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLCBjb25zdCBjaGFyICopOwotc3RhdGljIGludCBnZXRfcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqLCBpbnQpOwotc3RhdGljIGNvbnN0IHN0cnVjdCBhZmQgKmZpbmRfYWZkKGludCk7Ci0jaWZkZWYgSU5FVDYKLXN0YXRpYyBpbnQgaXA2X3N0cjJzY29wZWlkKGNoYXIgKiwgc3RydWN0IHNvY2thZGRyX2luNiAqLCB1X2ludDMyX3QgKik7Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBhZGRyaW5mbyAqZ2V0YW5zd2VyKGNvbnN0IHF1ZXJ5YnVmICosIGludCwgY29uc3QgY2hhciAqLCBpbnQsCi0JY29uc3Qgc3RydWN0IGFkZHJpbmZvICopOwotc3RhdGljIGludCBfZG5zX2dldGFkZHJpbmZvKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKLXN0YXRpYyB2b2lkIF9zZXRodGVudChGSUxFICoqKTsKLXN0YXRpYyB2b2lkIF9lbmRodGVudChGSUxFICoqKTsKLXN0YXRpYyBzdHJ1Y3QgYWRkcmluZm8gKl9nZXRodGVudChGSUxFICoqLCBjb25zdCBjaGFyICosCi0gICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICopOwotc3RhdGljIGludCBfZmlsZXNfZ2V0YWRkcmluZm8odm9pZCAqLCB2b2lkICosIHZhX2xpc3QpOwotCi1zdGF0aWMgaW50IHJlc19xdWVyeU4oY29uc3QgY2hhciAqLCBzdHJ1Y3QgcmVzX3RhcmdldCAqLCByZXNfc3RhdGUpOwotc3RhdGljIGludCByZXNfc2VhcmNoTihjb25zdCBjaGFyICosIHN0cnVjdCByZXNfdGFyZ2V0ICosIHJlc19zdGF0ZSk7Ci1zdGF0aWMgaW50IHJlc19xdWVyeWRvbWFpbk4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCi0Jc3RydWN0IHJlc190YXJnZXQgKiwgcmVzX3N0YXRlKTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhaV9lcnJsaXN0W10gPSB7Ci0JIlN1Y2Nlc3MiLAotCSJBZGRyZXNzIGZhbWlseSBmb3IgaG9zdG5hbWUgbm90IHN1cHBvcnRlZCIsCS8qIEVBSV9BRERSRkFNSUxZICovCi0JIlRlbXBvcmFyeSBmYWlsdXJlIGluIG5hbWUgcmVzb2x1dGlvbiIsCQkvKiBFQUlfQUdBSU4gICAgICAqLwotCSJJbnZhbGlkIHZhbHVlIGZvciBhaV9mbGFncyIsCQkgICAgICAgCS8qIEVBSV9CQURGTEFHUyAgICovCi0JIk5vbi1yZWNvdmVyYWJsZSBmYWlsdXJlIGluIG5hbWUgcmVzb2x1dGlvbiIsIAkvKiBFQUlfRkFJTCAgICAgICAqLwotCSJhaV9mYW1pbHkgbm90IHN1cHBvcnRlZCIsCQkJLyogRUFJX0ZBTUlMWSAgICAgKi8KLQkiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIsIAkJCS8qIEVBSV9NRU1PUlkgICAgICovCi0JIk5vIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIGhvc3RuYW1lIiwgCQkvKiBFQUlfTk9EQVRBICAgICAqLwotCSJob3N0bmFtZSBub3Igc2Vydm5hbWUgcHJvdmlkZWQsIG9yIG5vdCBrbm93biIsCS8qIEVBSV9OT05BTUUgICAgICovCi0JInNlcnZuYW1lIG5vdCBzdXBwb3J0ZWQgZm9yIGFpX3NvY2t0eXBlIiwJLyogRUFJX1NFUlZJQ0UgICAgKi8KLQkiYWlfc29ja3R5cGUgbm90IHN1cHBvcnRlZCIsIAkJCS8qIEVBSV9TT0NLVFlQRSAgICovCi0JIlN5c3RlbSBlcnJvciByZXR1cm5lZCBpbiBlcnJubyIsIAkJLyogRUFJX1NZU1RFTSAgICAgKi8KLQkiSW52YWxpZCB2YWx1ZSBmb3IgaGludHMiLAkJCS8qIEVBSV9CQURISU5UUwkgICovCi0JIlJlc29sdmVkIHByb3RvY29sIGlzIHVua25vd24iLAkJCS8qIEVBSV9QUk9UT0NPTCAgICovCi0JIkFyZ3VtZW50IGJ1ZmZlciBvdmVyZmxvdyIsCQkJLyogRUFJX09WRVJGTE9XICAgKi8KLQkiVW5rbm93biBlcnJvciIsIAkJCQkvKiBFQUlfTUFYICAgICAgICAqLwotfTsKLQotLyogWFhYIG1hY3JvcyB0aGF0IG1ha2UgZXh0ZXJuYWwgcmVmZXJlbmNlIGlzIEJBRC4gKi8KLQotI2RlZmluZSBHRVRfQUkoYWksIGFmZCwgYWRkcikgCQkJCQlcCi1kbyB7IAkJCQkJCQkJXAotCS8qIGV4dGVybmFsIHJlZmVyZW5jZTogcGFpLCBlcnJvciwgYW5kIGxhYmVsIGZyZWUgKi8gCVwKLQkoYWkpID0gZ2V0X2FpKHBhaSwgKGFmZCksIChhZGRyKSk7IAkJCVwKLQlpZiAoKGFpKSA9PSBOVUxMKSB7IAkJCQkJXAotCQllcnJvciA9IEVBSV9NRU1PUlk7IAkJCQlcCi0JCWdvdG8gZnJlZTsgCQkJCQlcCi0JfSAJCQkJCQkJXAotfSB3aGlsZSAoLypDT05TVENPTkQqLzApCi0KLSNkZWZpbmUgR0VUX1BPUlQoYWksIHNlcnYpIAkJCQkJXAotZG8geyAJCQkJCQkJCVwKLQkvKiBleHRlcm5hbCByZWZlcmVuY2U6IGVycm9yIGFuZCBsYWJlbCBmcmVlICovIAkJXAotCWVycm9yID0gZ2V0X3BvcnQoKGFpKSwgKHNlcnYpLCAwKTsgCQkJXAotCWlmIChlcnJvciAhPSAwKSAJCQkJCVwKLQkJZ290byBmcmVlOyAJCQkJCVwKLX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQotCi0jZGVmaW5lIEdFVF9DQU5PTk5BTUUoYWksIHN0cikgCQkJCQlcCi1kbyB7IAkJCQkJCQkJXAotCS8qIGV4dGVybmFsIHJlZmVyZW5jZTogcGFpLCBlcnJvciBhbmQgbGFiZWwgZnJlZSAqLyAJXAotCWVycm9yID0gZ2V0X2Nhbm9ubmFtZShwYWksIChhaSksIChzdHIpKTsgCQlcCi0JaWYgKGVycm9yICE9IDApIAkJCQkJXAotCQlnb3RvIGZyZWU7IAkJCQkJXAotfSB3aGlsZSAoLypDT05TVENPTkQqLzApCi0KLSNkZWZpbmUgRVJSKGVycikgCQkJCQkJXAotZG8geyAJCQkJCQkJCVwKLQkvKiBleHRlcm5hbCByZWZlcmVuY2U6IGVycm9yLCBhbmQgbGFiZWwgYmFkICovIAkJXAotCWVycm9yID0gKGVycik7IAkJCQkJCVwKLQlnb3RvIGJhZDsgCQkJCQkJXAotCS8qTk9UUkVBQ0hFRCovIAkJCQkJCVwKLX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQotCi0jZGVmaW5lIE1BVENIX0ZBTUlMWSh4LCB5LCB3KSAJCQkJCQlcCi0JKCh4KSA9PSAoeSkgfHwgKC8qQ09OU1RDT05EKi8odykgJiYgKCh4KSA9PSBQRl9VTlNQRUMgfHwgCVwKLQkgICAgKHkpID09IFBGX1VOU1BFQykpKQotI2RlZmluZSBNQVRDSCh4LCB5LCB3KSAJCQkJCQkJXAotCSgoeCkgPT0gKHkpIHx8ICgvKkNPTlNUQ09ORCovKHcpICYmICgoeCkgPT0gQU5ZIHx8ICh5KSA9PSBBTlkpKSkKLQotY29uc3QgY2hhciAqCi1nYWlfc3RyZXJyb3IoaW50IGVjb2RlKQotewotCWlmIChlY29kZSA8IDAgfHwgZWNvZGUgPiBFQUlfTUFYKQotCQllY29kZSA9IEVBSV9NQVg7Ci0JcmV0dXJuIGFpX2Vycmxpc3RbZWNvZGVdOwotfQotCi12b2lkCi1mcmVlYWRkcmluZm8oc3RydWN0IGFkZHJpbmZvICphaSkKLXsKLQlzdHJ1Y3QgYWRkcmluZm8gKm5leHQ7Ci0KLQlhc3NlcnQoYWkgIT0gTlVMTCk7Ci0KLQlkbyB7Ci0JCW5leHQgPSBhaS0+YWlfbmV4dDsKLQkJaWYgKGFpLT5haV9jYW5vbm5hbWUpCi0JCQlmcmVlKGFpLT5haV9jYW5vbm5hbWUpOwotCQkvKiBubyBuZWVkIHRvIGZyZWUoYWktPmFpX2FkZHIpICovCi0JCWZyZWUoYWkpOwotCQlhaSA9IG5leHQ7Ci0JfSB3aGlsZSAoYWkpOwotfQotCi1zdGF0aWMgaW50Ci1zdHIybnVtYmVyKGNvbnN0IGNoYXIgKnApCi17Ci0JY2hhciAqZXA7Ci0JdW5zaWduZWQgbG9uZyB2OwotCi0JYXNzZXJ0KHAgIT0gTlVMTCk7Ci0KLQlpZiAoKnAgPT0gJ1wwJykKLQkJcmV0dXJuIC0xOwotCWVwID0gTlVMTDsKLQllcnJubyA9IDA7Ci0JdiA9IHN0cnRvdWwocCwgJmVwLCAxMCk7Ci0JaWYgKGVycm5vID09IDAgJiYgZXAgJiYgKmVwID09ICdcMCcgJiYgdiA8PSBVSU5UX01BWCkKLQkJcmV0dXJuIHY7Ci0JZWxzZQotCQlyZXR1cm4gLTE7Ci19Ci0KLS8qCi0gKiBDb25uZWN0IGEgVURQIHNvY2tldCB0byBhIGdpdmVuIHVuaWNhc3QgYWRkcmVzcy4gVGhpcyB3aWxsIGNhdXNlIG5vIG5ldHdvcmsKLSAqIHRyYWZmaWMsIGJ1dCB3aWxsIGZhaWwgZmFzdCBpZiB0aGUgc3lzdGVtIGhhcyBubyBvciBsaW1pdGVkIHJlYWNoYWJpbGl0eSB0bwotICogdGhlIGRlc3RpbmF0aW9uIChlLmcuLCBubyBJUHY0IGFkZHJlc3MsIG5vIElQdjYgZGVmYXVsdCByb3V0ZSwgLi4uKS4KLSAqLwotc3RhdGljIGludAotX3Rlc3RfY29ubmVjdChpbnQgcGYsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc2l6ZV90IGFkZHJsZW4pIHsKLQlpbnQgcyA9IHNvY2tldChwZiwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApOwotCWlmIChzIDwgMCkKLQkJcmV0dXJuIDA7Ci0JaW50IHJldDsKLQlkbyB7Ci0JCXJldCA9IGNvbm5lY3QocywgYWRkciwgYWRkcmxlbik7Ci0JfSB3aGlsZSAocmV0IDwgMCAmJiBlcnJubyA9PSBFSU5UUik7Ci0JaW50IHN1Y2Nlc3MgPSAocmV0ID09IDApOwotCWRvIHsKLQkJcmV0ID0gY2xvc2Uocyk7Ci0JfSB3aGlsZSAocmV0IDwgMCAmJiBlcnJubyA9PSBFSU5UUik7Ci0JcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBkZXRlcm1pbmUgd2hldGhlciBJUHY0IG9yIElQdjYgY29ubmVjdGl2aXR5IGlzCi0gKiBhdmFpbGFibGUgaW4gb3JkZXIgdG8gaW1wbGVtZW50IEFJX0FERFJDT05GSUcuCi0gKgotICogU3RyaWN0bHkgc3BlYWtpbmcsIEFJX0FERFJDT05GSUcgc2hvdWxkIG5vdCBsb29rIGF0IHdoZXRoZXIgY29ubmVjdGl2aXR5IGlzCi0gKiBhdmFpbGFibGUsIGJ1dCB3aGV0aGVyIGFkZHJlc3NlcyBvZiB0aGUgc3BlY2lmaWVkIGZhbWlseSBhcmUgImNvbmZpZ3VyZWQKLSAqIG9uIHRoZSBsb2NhbCBzeXN0ZW0iLiBIb3dldmVyLCBiaW9uaWMgZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCBnZXRpZmFkZHJzLAotICogc28gY2hlY2tpbmcgZm9yIGNvbm5lY3Rpdml0eSBpcyB0aGUgbmV4dCBiZXN0IHRoaW5nLgotICovCi1zdGF0aWMgaW50Ci1faGF2ZV9pcHY2KCkgewotCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjZfdGVzdCA9IHsKLQkJLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDYsCi0JCS5zaW42X2FkZHIuczZfYWRkciA9IHsgIC8vIDIwMDA6OgotCQkJMHgyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0KLQkJfTsKLSAgICAgICAgc29ja2FkZHJfdW5pb24gYWRkciA9IHsgLmluNiA9IHNpbjZfdGVzdCB9OwotCXJldHVybiBfdGVzdF9jb25uZWN0KFBGX0lORVQ2LCAmYWRkci5nZW5lcmljLCBzaXplb2YoYWRkci5pbjYpKTsKLX0KLQotc3RhdGljIGludAotX2hhdmVfaXB2NCgpIHsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luIHNpbl90ZXN0ID0gewotCQkuc2luX2ZhbWlseSA9IEFGX0lORVQsCi0JCS5zaW5fYWRkci5zX2FkZHIgPSBfX2NvbnN0YW50X2h0b25sKDB4MDgwODA4MDhMKSAgLy8gOC44LjguOAotCX07Ci0gICAgICAgIHNvY2thZGRyX3VuaW9uIGFkZHIgPSB7IC5pbiA9IHNpbl90ZXN0IH07Ci0gICAgICAgIHJldHVybiBfdGVzdF9jb25uZWN0KFBGX0lORVQsICZhZGRyLmdlbmVyaWMsIHNpemVvZihhZGRyLmluKSk7Ci19Ci0KLS8vIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIHJldHVybnMgb24gZXJyb3IuCi1zdGF0aWMgaW50Ci1hbmRyb2lkX2dldGFkZHJpbmZvX3Byb3h5KAotICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLCBjb25zdCBjaGFyICpzZXJ2bmFtZSwKLSAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmhpbnRzLCBzdHJ1Y3QgYWRkcmluZm8gKipyZXMsIGNvbnN0IGNoYXIgKmlmYWNlKQotewotCWludCBzb2NrOwotCWNvbnN0IGludCBvbmUgPSAxOwotCXN0cnVjdCBzb2NrYWRkcl91biBwcm94eV9hZGRyOwotCUZJTEUqIHByb3h5ID0gTlVMTDsKLQlpbnQgc3VjY2VzcyA9IDA7Ci0KLQkvLyBDbGVhciB0aGlzIGF0IHN0YXJ0LCBhcyB3ZSB1c2UgaXRzIG5vbi1OVUxMbmVzcyBsYXRlciAoaW4gdGhlCi0JLy8gZXJyb3IgcGF0aCkgdG8gZGVjaWRlIGlmIHdlIGhhdmUgdG8gZnJlZSB1cCBhbnkgbWVtb3J5IHdlCi0JLy8gYWxsb2NhdGVkIGluIHRoZSBwcm9jZXNzIChiZWZvcmUgZmFpbGluZykuCi0JKnJlcyA9IE5VTEw7Ci0KLQkvLyBCb2d1cyB0aGluZ3Mgd2UgY2FuJ3Qgc2VyaWFsaXplLiAgRG9uJ3QgdXNlIHRoZSBwcm94eS4gIFRoZXNlIHdpbGwgZmFpbCAtIGxldCB0aGVtLgotCWlmICgoaG9zdG5hbWUgIT0gTlVMTCAmJgotCSAgICAgc3RyY3Nwbihob3N0bmFtZSwgIiBcblxyXHReJ1wiIikgIT0gc3RybGVuKGhvc3RuYW1lKSkgfHwKLQkgICAgKHNlcnZuYW1lICE9IE5VTEwgJiYKLQkgICAgIHN0cmNzcG4oc2Vydm5hbWUsICIgXG5cclx0XidcIiIpICE9IHN0cmxlbihzZXJ2bmFtZSkpKSB7Ci0JCXJldHVybiBFQUlfTk9EQVRBOwotCX0KLQotCXNvY2sgPSBzb2NrZXQoQUZfVU5JWCwgU09DS19TVFJFQU0sIDApOwotCWlmIChzb2NrIDwgMCkgewotCQlyZXR1cm4gRUFJX05PREFUQTsKLQl9Ci0KLQlzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJm9uZSwgc2l6ZW9mKG9uZSkpOwotCW1lbXNldCgmcHJveHlfYWRkciwgMCwgc2l6ZW9mKHByb3h5X2FkZHIpKTsKLQlwcm94eV9hZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOwotCXN0cmxjcHkocHJveHlfYWRkci5zdW5fcGF0aCwgIi9kZXYvc29ja2V0L2Ruc3Byb3h5ZCIsCi0JCXNpemVvZihwcm94eV9hZGRyLnN1bl9wYXRoKSk7Ci0JaWYgKFRFTVBfRkFJTFVSRV9SRVRSWShjb25uZWN0KHNvY2ssCi0JCQkJICAgICAgIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSAmcHJveHlfYWRkciwKLQkJCQkgICAgICAgc2l6ZW9mKHByb3h5X2FkZHIpKSkgIT0gMCkgewotCQljbG9zZShzb2NrKTsKLQkJcmV0dXJuIEVBSV9OT0RBVEE7Ci0JfQotCi0JLy8gU2VuZCB0aGUgcmVxdWVzdC4KLQlwcm94eSA9IGZkb3Blbihzb2NrLCAicisiKTsKLQlpZiAoZnByaW50Zihwcm94eSwgImdldGFkZHJpbmZvICVzICVzICVkICVkICVkICVkICVzIiwKLQkJICAgIGhvc3RuYW1lID09IE5VTEwgPyAiXiIgOiBob3N0bmFtZSwKLQkJICAgIHNlcnZuYW1lID09IE5VTEwgPyAiXiIgOiBzZXJ2bmFtZSwKLQkJICAgIGhpbnRzID09IE5VTEwgPyAtMSA6IGhpbnRzLT5haV9mbGFncywKLQkJICAgIGhpbnRzID09IE5VTEwgPyAtMSA6IGhpbnRzLT5haV9mYW1pbHksCi0JCSAgICBoaW50cyA9PSBOVUxMID8gLTEgOiBoaW50cy0+YWlfc29ja3R5cGUsCi0JCSAgICBoaW50cyA9PSBOVUxMID8gLTEgOiBoaW50cy0+YWlfcHJvdG9jb2wsCi0JCSAgICBpZmFjZSA9PSBOVUxMID8gIl4iIDogaWZhY2UpIDwgMCkgewotCQlnb3RvIGV4aXQ7Ci0JfQotCS8vIGxpdGVyYWwgTlVMTCBieXRlIGF0IGVuZCwgcmVxdWlyZWQgYnkgRnJhbWV3b3JrTGlzdGVuZXIKLQlpZiAoZnB1dGMoMCwgcHJveHkpID09IEVPRiB8fAotCSAgICBmZmx1c2gocHJveHkpICE9IDApIHsKLQkJZ290byBleGl0OwotCX0KLQotCWNoYXIgYnVmWzRdOwotCS8vIHJlYWQgcmVzdWx0IGNvZGUgZm9yIGdldGhvc3RieWFkZHIKLQlpZiAoZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwgcHJveHkpICE9IHNpemVvZihidWYpKSB7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpbnQgcmVzdWx0X2NvZGUgPSAoaW50KXN0cnRvbChidWYsIE5VTEwsIDEwKTsKLQkvLyB2ZXJpZnkgdGhlIGNvZGUgaXRzZWxmCi0JaWYgKHJlc3VsdF9jb2RlICE9IERuc1Byb3h5UXVlcnlSZXN1bHQgKSB7Ci0JCWZyZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1ZiksIHByb3h5KTsKLQkJZ290byBleGl0OwotCX0KLQotCXN0cnVjdCBhZGRyaW5mbyogYWkgPSBOVUxMOwotCXN0cnVjdCBhZGRyaW5mbyoqIG5leHRyZXMgPSByZXM7Ci0Jd2hpbGUgKDEpIHsKLQkJdWludDMyX3QgYWRkcmluZm9fbGVuOwotCQlpZiAoZnJlYWQoJmFkZHJpbmZvX2xlbiwgc2l6ZW9mKGFkZHJpbmZvX2xlbiksCi0JCQkgIDEsIHByb3h5KSAhPSAxKSB7Ci0JCQlicmVhazsKLQkJfQotCQlhZGRyaW5mb19sZW4gPSBudG9obChhZGRyaW5mb19sZW4pOwotCQlpZiAoYWRkcmluZm9fbGVuID09IDApIHsKLQkJCXN1Y2Nlc3MgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoYWRkcmluZm9fbGVuIDwgc2l6ZW9mKHN0cnVjdCBhZGRyaW5mbykpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCXN0cnVjdCBhZGRyaW5mbyogYWkgPSBjYWxsb2MoMSwgYWRkcmluZm9fbGVuICsKLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpKTsKLQkJaWYgKGFpID09IE5VTEwpIHsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGZyZWFkKGFpLCBhZGRyaW5mb19sZW4sIDEsIHByb3h5KSAhPSAxKSB7Ci0JCQkvLyBFcnJvcjsgZmFsbCB0aHJvdWdoLgotCQkJYnJlYWs7Ci0JCX0KLQotCQkvLyBaZXJvIG91dCB0aGUgcG9pbnRlciBmaWVsZHMgd2UgY29waWVkIHdoaWNoIGFyZW4ndAotCQkvLyB2YWxpZCBpbiB0aGlzIGFkZHJlc3Mgc3BhY2UuCi0JCWFpLT5haV9hZGRyID0gTlVMTDsKLQkJYWktPmFpX2Nhbm9ubmFtZSA9IE5VTEw7Ci0JCWFpLT5haV9uZXh0ID0gTlVMTDsKLQotCQkvLyBzdHJ1Y3Qgc29ja2FkZHIKLQkJdWludDMyX3QgYWRkcl9sZW47Ci0JCWlmIChmcmVhZCgmYWRkcl9sZW4sIHNpemVvZihhZGRyX2xlbiksIDEsIHByb3h5KSAhPSAxKSB7Ci0JCQlicmVhazsKLQkJfQotCQlhZGRyX2xlbiA9IG50b2hsKGFkZHJfbGVuKTsKLQkJaWYgKGFkZHJfbGVuICE9IDApIHsKLQkJCWlmIChhZGRyX2xlbiA+IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSkpIHsKLQkJCQkvLyBCb2d1czsgdG9vIGJpZy4KLQkJCQlicmVhazsKLQkJCX0KLQkJCXN0cnVjdCBzb2NrYWRkciogYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIqKShhaSArIDEpOwotCQkJaWYgKGZyZWFkKGFkZHIsIGFkZHJfbGVuLCAxLCBwcm94eSkgIT0gMSkgewotCQkJCWJyZWFrOwotCQkJfQotCQkJYWktPmFpX2FkZHIgPSBhZGRyOwotCQl9Ci0KLQkJLy8gY2Fubm9ubmFtZQotCQl1aW50MzJfdCBuYW1lX2xlbjsKLQkJaWYgKGZyZWFkKCZuYW1lX2xlbiwgc2l6ZW9mKG5hbWVfbGVuKSwgMSwgcHJveHkpICE9IDEpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCW5hbWVfbGVuID0gbnRvaGwobmFtZV9sZW4pOwotCQlpZiAobmFtZV9sZW4gIT0gMCkgewotCQkJYWktPmFpX2Nhbm9ubmFtZSA9IChjaGFyKikgbWFsbG9jKG5hbWVfbGVuKTsKLQkJCWlmIChmcmVhZChhaS0+YWlfY2Fub25uYW1lLCBuYW1lX2xlbiwgMSwgcHJveHkpICE9IDEpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChhaS0+YWlfY2Fub25uYW1lW25hbWVfbGVuIC0gMV0gIT0gJ1wwJykgewotCQkJCS8vIFRoZSBwcm94eSBzaG91bGQgYmUgcmV0dXJuaW5nIHRoaXMKLQkJCQkvLyBOVUxMLXRlcm1pbmF0ZWQuCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQkqbmV4dHJlcyA9IGFpOwotCQluZXh0cmVzID0gJmFpLT5haV9uZXh0OwotCQlhaSA9IE5VTEw7Ci0JfQotCi0JaWYgKGFpICE9IE5VTEwpIHsKLQkJLy8gQ2xlYW4gdXAgcGFydGlhbGx5LWJ1aWx0IGFkZHJpbmZvIHRoYXQgd2UgbmV2ZXIgZW5kZWQgdXAKLQkJLy8gYXR0YWNoaW5nIHRvIHRoZSByZXNwb25zZS4KLQkJZnJlZWFkZHJpbmZvKGFpKTsKLQl9Ci1leGl0OgotCWlmIChwcm94eSAhPSBOVUxMKSB7Ci0JCWZjbG9zZShwcm94eSk7Ci0JfQotCi0JaWYgKHN1Y2Nlc3MpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLy8gUHJveHkgZmFpbGVkOwotCS8vIGNsZWFuIHVwIG1lbW9yeSB3ZSBtaWdodCd2ZSBhbGxvY2F0ZWQuCi0JaWYgKCpyZXMpIHsKLQkJZnJlZWFkZHJpbmZvKCpyZXMpOwotCQkqcmVzID0gTlVMTDsKLQl9Ci0JcmV0dXJuIEVBSV9OT0RBVEE7Ci19Ci0KLWludAotZ2V0YWRkcmluZm8oY29uc3QgY2hhciAqaG9zdG5hbWUsIGNvbnN0IGNoYXIgKnNlcnZuYW1lLAotICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsIHN0cnVjdCBhZGRyaW5mbyAqKnJlcykKLXsKLQlyZXR1cm4gYW5kcm9pZF9nZXRhZGRyaW5mb2ZvcmlmYWNlKGhvc3RuYW1lLCBzZXJ2bmFtZSwgaGludHMsIE5VTEwsIDAsIHJlcyk7Ci19Ci0KLWludAotYW5kcm9pZF9nZXRhZGRyaW5mb2ZvcmlmYWNlKGNvbnN0IGNoYXIgKmhvc3RuYW1lLCBjb25zdCBjaGFyICpzZXJ2bmFtZSwKLSAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmhpbnRzLCBjb25zdCBjaGFyICppZmFjZSwgaW50IG1hcmssIHN0cnVjdCBhZGRyaW5mbyAqKnJlcykKLXsKLQlzdHJ1Y3QgYWRkcmluZm8gc2VudGluZWw7Ci0Jc3RydWN0IGFkZHJpbmZvICpjdXI7Ci0JaW50IGVycm9yID0gMDsKLQlzdHJ1Y3QgYWRkcmluZm8gYWk7Ci0Jc3RydWN0IGFkZHJpbmZvIGFpMDsKLQlzdHJ1Y3QgYWRkcmluZm8gKnBhaTsKLQljb25zdCBzdHJ1Y3QgZXhwbG9yZSAqZXg7Ci0JY29uc3QgY2hhciogY2FjaGVfbW9kZSA9IGdldGVudigiQU5EUk9JRF9ETlNfTU9ERSIpOwotCi0JLyogaG9zdG5hbWUgaXMgYWxsb3dlZCB0byBiZSBOVUxMICovCi0JLyogc2Vydm5hbWUgaXMgYWxsb3dlZCB0byBiZSBOVUxMICovCi0JLyogaGludHMgaXMgYWxsb3dlZCB0byBiZSBOVUxMICovCi0JYXNzZXJ0KHJlcyAhPSBOVUxMKTsKLQltZW1zZXQoJnNlbnRpbmVsLCAwLCBzaXplb2Yoc2VudGluZWwpKTsKLQljdXIgPSAmc2VudGluZWw7Ci0JcGFpID0gJmFpOwotCXBhaS0+YWlfZmxhZ3MgPSAwOwotCXBhaS0+YWlfZmFtaWx5ID0gUEZfVU5TUEVDOwotCXBhaS0+YWlfc29ja3R5cGUgPSBBTlk7Ci0JcGFpLT5haV9wcm90b2NvbCA9IEFOWTsKLQlwYWktPmFpX2FkZHJsZW4gPSAwOwotCXBhaS0+YWlfY2Fub25uYW1lID0gTlVMTDsKLQlwYWktPmFpX2FkZHIgPSBOVUxMOwotCXBhaS0+YWlfbmV4dCA9IE5VTEw7Ci0KLQlpZiAoaG9zdG5hbWUgPT0gTlVMTCAmJiBzZXJ2bmFtZSA9PSBOVUxMKQotCQlyZXR1cm4gRUFJX05PTkFNRTsKLQlpZiAoaGludHMpIHsKLQkJLyogZXJyb3IgY2hlY2sgZm9yIGhpbnRzICovCi0JCWlmIChoaW50cy0+YWlfYWRkcmxlbiB8fCBoaW50cy0+YWlfY2Fub25uYW1lIHx8Ci0JCSAgICBoaW50cy0+YWlfYWRkciB8fCBoaW50cy0+YWlfbmV4dCkKLQkJCUVSUihFQUlfQkFESElOVFMpOyAvKiB4eHggKi8KLQkJaWYgKGhpbnRzLT5haV9mbGFncyAmIH5BSV9NQVNLKQotCQkJRVJSKEVBSV9CQURGTEFHUyk7Ci0JCXN3aXRjaCAoaGludHMtPmFpX2ZhbWlseSkgewotCQljYXNlIFBGX1VOU1BFQzoKLQkJY2FzZSBQRl9JTkVUOgotI2lmZGVmIElORVQ2Ci0JCWNhc2UgUEZfSU5FVDY6Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJRVJSKEVBSV9GQU1JTFkpOwotCQl9Ci0JCW1lbWNweShwYWksIGhpbnRzLCBzaXplb2YoKnBhaSkpOwotCi0JCS8qCi0JCSAqIGlmIGJvdGggc29ja3R5cGUvcHJvdG9jb2wgYXJlIHNwZWNpZmllZCwgY2hlY2sgaWYgdGhleQotCQkgKiBhcmUgbWVhbmluZ2Z1bCBjb21iaW5hdGlvbi4KLQkJICovCi0JCWlmIChwYWktPmFpX3NvY2t0eXBlICE9IEFOWSAmJiBwYWktPmFpX3Byb3RvY29sICE9IEFOWSkgewotCQkJZm9yIChleCA9IGV4cGxvcmU7IGV4LT5lX2FmID49IDA7IGV4KyspIHsKLQkJCQlpZiAocGFpLT5haV9mYW1pbHkgIT0gZXgtPmVfYWYpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmIChleC0+ZV9zb2NrdHlwZSA9PSBBTlkpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmIChleC0+ZV9wcm90b2NvbCA9PSBBTlkpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmIChwYWktPmFpX3NvY2t0eXBlID09IGV4LT5lX3NvY2t0eXBlCi0JCQkJICYmIHBhaS0+YWlfcHJvdG9jb2wgIT0gZXgtPmVfcHJvdG9jb2wpIHsKLQkJCQkJRVJSKEVBSV9CQURISU5UUyk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLyoKLQkgKiBjaGVjayBmb3Igc3BlY2lhbCBjYXNlcy4gICgxKSBudW1lcmljIHNlcnZuYW1lIGlzIGRpc2FsbG93ZWQgaWYKLQkgKiBzb2NrdHlwZS9wcm90b2NvbCBhcmUgbGVmdCB1bnNwZWNpZmllZC4gKDIpIHNlcnZuYW1lIGlzIGRpc2FsbG93ZWQKLQkgKiBmb3IgcmF3IGFuZCBvdGhlciBpbmV0eyw2fSBzb2NrZXRzLgotCSAqLwotCWlmIChNQVRDSF9GQU1JTFkocGFpLT5haV9mYW1pbHksIFBGX0lORVQsIDEpCi0jaWZkZWYgUEZfSU5FVDYKLQkgfHwgTUFUQ0hfRkFNSUxZKHBhaS0+YWlfZmFtaWx5LCBQRl9JTkVUNiwgMSkKLSNlbmRpZgotCSAgICApIHsKLQkJYWkwID0gKnBhaTsJLyogYmFja3VwICpwYWkgKi8KLQotCQlpZiAocGFpLT5haV9mYW1pbHkgPT0gUEZfVU5TUEVDKSB7Ci0jaWZkZWYgUEZfSU5FVDYKLQkJCXBhaS0+YWlfZmFtaWx5ID0gUEZfSU5FVDY7Ci0jZWxzZQotCQkJcGFpLT5haV9mYW1pbHkgPSBQRl9JTkVUOwotI2VuZGlmCi0JCX0KLQkJZXJyb3IgPSBnZXRfcG9ydG1hdGNoKHBhaSwgc2Vydm5hbWUpOwotCQlpZiAoZXJyb3IpCi0JCQlFUlIoZXJyb3IpOwotCi0JCSpwYWkgPSBhaTA7Ci0JfQotCi0JYWkwID0gKnBhaTsKLQotCS8qIE5VTEwgaG9zdG5hbWUsIG9yIG51bWVyaWMgaG9zdG5hbWUgKi8KLQlmb3IgKGV4ID0gZXhwbG9yZTsgZXgtPmVfYWYgPj0gMDsgZXgrKykgewotCQkqcGFpID0gYWkwOwotCi0JCS8qIFBGX1VOU1BFQyBlbnRyaWVzIGFyZSBwcmVwYXJlZCBmb3IgRE5TIHF1ZXJpZXMgb25seSAqLwotCQlpZiAoZXgtPmVfYWYgPT0gUEZfVU5TUEVDKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFNQVRDSF9GQU1JTFkocGFpLT5haV9mYW1pbHksIGV4LT5lX2FmLCBXSUxEX0FGKGV4KSkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFNQVRDSChwYWktPmFpX3NvY2t0eXBlLCBleC0+ZV9zb2NrdHlwZSwgV0lMRF9TT0NLVFlQRShleCkpKQotCQkJY29udGludWU7Ci0JCWlmICghTUFUQ0gocGFpLT5haV9wcm90b2NvbCwgZXgtPmVfcHJvdG9jb2wsIFdJTERfUFJPVE9DT0woZXgpKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChwYWktPmFpX2ZhbWlseSA9PSBQRl9VTlNQRUMpCi0JCQlwYWktPmFpX2ZhbWlseSA9IGV4LT5lX2FmOwotCQlpZiAocGFpLT5haV9zb2NrdHlwZSA9PSBBTlkgJiYgZXgtPmVfc29ja3R5cGUgIT0gQU5ZKQotCQkJcGFpLT5haV9zb2NrdHlwZSA9IGV4LT5lX3NvY2t0eXBlOwotCQlpZiAocGFpLT5haV9wcm90b2NvbCA9PSBBTlkgJiYgZXgtPmVfcHJvdG9jb2wgIT0gQU5ZKQotCQkJcGFpLT5haV9wcm90b2NvbCA9IGV4LT5lX3Byb3RvY29sOwotCi0JCWlmIChob3N0bmFtZSA9PSBOVUxMKQotCQkJZXJyb3IgPSBleHBsb3JlX251bGwocGFpLCBzZXJ2bmFtZSwgJmN1ci0+YWlfbmV4dCk7Ci0JCWVsc2UKLQkJCWVycm9yID0gZXhwbG9yZV9udW1lcmljX3Njb3BlKHBhaSwgaG9zdG5hbWUsIHNlcnZuYW1lLAotCQkJICAgICZjdXItPmFpX25leHQpOwotCi0JCWlmIChlcnJvcikKLQkJCWdvdG8gZnJlZTsKLQotCQl3aGlsZSAoY3VyLT5haV9uZXh0KQotCQkJY3VyID0gY3VyLT5haV9uZXh0OwotCX0KLQotCS8qCi0JICogWFhYCi0JICogSWYgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiBBRjEgY2FuIGJlIGludGVycHJldGVkIGFzIEZRRE4KLQkgKiByZXByZXNlbnRhdGlvbiBvZiBBRjIsIHdlIG5lZWQgdG8gdGhpbmsgYWdhaW4gYWJvdXQgdGhlIGNvZGUgYmVsb3cuCi0JICovCi0JaWYgKHNlbnRpbmVsLmFpX25leHQpCi0JCWdvdG8gZ29vZDsKLQotCWlmIChob3N0bmFtZSA9PSBOVUxMKQotCQlFUlIoRUFJX05PREFUQSk7Ci0JaWYgKHBhaS0+YWlfZmxhZ3MgJiBBSV9OVU1FUklDSE9TVCkKLQkJRVJSKEVBSV9OT05BTUUpOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIEJFR0lOIEFORFJPSUQgQ0hBTkdFUzsgcHJveHlpbmcgdG8gdGhlIGNhY2hlCi0gICAgICAgICAqLwotCWlmIChjYWNoZV9tb2RlID09IE5VTEwgfHwgc3RyY21wKGNhY2hlX21vZGUsICJsb2NhbCIpICE9IDApIHsKLQkJLy8gd2UncmUgbm90IHRoZSBwcm94eSAtIHBhc3MgdGhlIHJlcXVlc3QgdG8gdGhlbQotCQlyZXR1cm4gYW5kcm9pZF9nZXRhZGRyaW5mb19wcm94eShob3N0bmFtZSwgc2Vydm5hbWUsIGhpbnRzLCByZXMsIGlmYWNlKTsKLQl9Ci0KLQkvKgotCSAqIGhvc3RuYW1lIGFzIGFscGhhYmV0aWNhbCBuYW1lLgotCSAqIHdlIHdvdWxkIGxpa2UgdG8gcHJlZmVyIEFGX0lORVQ2IHRoYW4gQUZfSU5FVCwgc28gd2UnbGwgbWFrZSBhCi0JICogb3V0ZXIgbG9vcCBieSBBRnMuCi0JICovCi0JZm9yIChleCA9IGV4cGxvcmU7IGV4LT5lX2FmID49IDA7IGV4KyspIHsKLQkJKnBhaSA9IGFpMDsKLQotCQkvKiByZXF1aXJlIGV4YWN0IG1hdGNoIGZvciBmYW1pbHkgZmllbGQgKi8KLQkJaWYgKHBhaS0+YWlfZmFtaWx5ICE9IGV4LT5lX2FmKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFNQVRDSChwYWktPmFpX3NvY2t0eXBlLCBleC0+ZV9zb2NrdHlwZSwKLQkJCQlXSUxEX1NPQ0tUWVBFKGV4KSkpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghTUFUQ0gocGFpLT5haV9wcm90b2NvbCwgZXgtPmVfcHJvdG9jb2wsCi0JCQkJV0lMRF9QUk9UT0NPTChleCkpKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChwYWktPmFpX3NvY2t0eXBlID09IEFOWSAmJiBleC0+ZV9zb2NrdHlwZSAhPSBBTlkpCi0JCQlwYWktPmFpX3NvY2t0eXBlID0gZXgtPmVfc29ja3R5cGU7Ci0JCWlmIChwYWktPmFpX3Byb3RvY29sID09IEFOWSAmJiBleC0+ZV9wcm90b2NvbCAhPSBBTlkpCi0JCQlwYWktPmFpX3Byb3RvY29sID0gZXgtPmVfcHJvdG9jb2w7Ci0KLQkJZXJyb3IgPSBleHBsb3JlX2ZxZG4ocGFpLCBob3N0bmFtZSwgc2Vydm5hbWUsCi0JCQkmY3VyLT5haV9uZXh0LCBpZmFjZSwgbWFyayk7Ci0KLQkJd2hpbGUgKGN1ciAmJiBjdXItPmFpX25leHQpCi0JCQljdXIgPSBjdXItPmFpX25leHQ7Ci0JfQotCi0JLyogWFhYICovCi0JaWYgKHNlbnRpbmVsLmFpX25leHQpCi0JCWVycm9yID0gMDsKLQotCWlmIChlcnJvcikKLQkJZ290byBmcmVlOwotCWlmIChlcnJvciA9PSAwKSB7Ci0JCWlmIChzZW50aW5lbC5haV9uZXh0KSB7Ci0gZ29vZDoKLQkJCSpyZXMgPSBzZW50aW5lbC5haV9uZXh0OwotCQkJcmV0dXJuIFNVQ0NFU1M7Ci0JCX0gZWxzZQotCQkJZXJyb3IgPSBFQUlfRkFJTDsKLQl9Ci0gZnJlZToKLSBiYWQ6Ci0JaWYgKHNlbnRpbmVsLmFpX25leHQpCi0JCWZyZWVhZGRyaW5mbyhzZW50aW5lbC5haV9uZXh0KTsKLQkqcmVzID0gTlVMTDsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qCi0gKiBGUUROIGhvc3RuYW1lLCBETlMgbG9va3VwCi0gKi8KLXN0YXRpYyBpbnQKLWV4cGxvcmVfZnFkbihjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaSwgY29uc3QgY2hhciAqaG9zdG5hbWUsCi0gICAgY29uc3QgY2hhciAqc2Vydm5hbWUsIHN0cnVjdCBhZGRyaW5mbyAqKnJlcywgY29uc3QgY2hhciAqaWZhY2UsIGludCBtYXJrKQotewotCXN0cnVjdCBhZGRyaW5mbyAqcmVzdWx0OwotCXN0cnVjdCBhZGRyaW5mbyAqY3VyOwotCWludCBlcnJvciA9IDA7Ci0Jc3RhdGljIGNvbnN0IG5zX2R0YWIgZHRhYltdID0gewotCQlOU19GSUxFU19DQihfZmlsZXNfZ2V0YWRkcmluZm8sIE5VTEwpCi0JCXsgTlNTUkNfRE5TLCBfZG5zX2dldGFkZHJpbmZvLCBOVUxMIH0sCS8qIGZvcmNlIC1ESEVTSU9EICovCi0JCU5TX05JU19DQihfeXBfZ2V0YWRkcmluZm8sIE5VTEwpCi0JCXsgMCwgMCwgMCB9Ci0JfTsKLQotCWFzc2VydChwYWkgIT0gTlVMTCk7Ci0JLyogaG9zdG5hbWUgbWF5IGJlIE5VTEwgKi8KLQkvKiBzZXJ2bmFtZSBtYXkgYmUgTlVMTCAqLwotCWFzc2VydChyZXMgIT0gTlVMTCk7Ci0KLQlyZXN1bHQgPSBOVUxMOwotCi0JLyoKLQkgKiBpZiB0aGUgc2Vydm5hbWUgZG9lcyBub3QgbWF0Y2ggc29ja3R5cGUvcHJvdG9jb2wsIGlnbm9yZSBpdC4KLQkgKi8KLQlpZiAoZ2V0X3BvcnRtYXRjaChwYWksIHNlcnZuYW1lKSAhPSAwKQotCQlyZXR1cm4gMDsKLQotCXN3aXRjaCAobnNkaXNwYXRjaCgmcmVzdWx0LCBkdGFiLCBOU0RCX0hPU1RTLCAiZ2V0YWRkcmluZm8iLAotCQkJZGVmYXVsdF9kbnNfZmlsZXMsIGhvc3RuYW1lLCBwYWksIGlmYWNlLCBtYXJrKSkgewotCWNhc2UgTlNfVFJZQUdBSU46Ci0JCWVycm9yID0gRUFJX0FHQUlOOwotCQlnb3RvIGZyZWU7Ci0JY2FzZSBOU19VTkFWQUlMOgotCQllcnJvciA9IEVBSV9GQUlMOwotCQlnb3RvIGZyZWU7Ci0JY2FzZSBOU19OT1RGT1VORDoKLQkJZXJyb3IgPSBFQUlfTk9EQVRBOwotCQlnb3RvIGZyZWU7Ci0JY2FzZSBOU19TVUNDRVNTOgotCQllcnJvciA9IDA7Ci0JCWZvciAoY3VyID0gcmVzdWx0OyBjdXI7IGN1ciA9IGN1ci0+YWlfbmV4dCkgewotCQkJR0VUX1BPUlQoY3VyLCBzZXJ2bmFtZSk7Ci0JCQkvKiBjYW5vbm5hbWUgc2hvdWxkIGJlIGZpbGxlZCBhbHJlYWR5ICovCi0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JKnJlcyA9IHJlc3VsdDsKLQotCXJldHVybiAwOwotCi1mcmVlOgotCWlmIChyZXN1bHQpCi0JCWZyZWVhZGRyaW5mbyhyZXN1bHQpOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyoKLSAqIGhvc3RuYW1lID09IE5VTEwuCi0gKiBwYXNzaXZlIHNvY2tldCAtPiBhbnlhZGRyICgwLjAuMC4wIG9yIDo6KQotICogbm9uLXBhc3NpdmUgc29ja2V0IC0+IGxvY2FsaG9zdCAoMTI3LjAuMC4xIG9yIDo6MSkKLSAqLwotc3RhdGljIGludAotZXhwbG9yZV9udWxsKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpLCBjb25zdCBjaGFyICpzZXJ2bmFtZSwKLSAgICBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpCi17Ci0JaW50IHM7Ci0JY29uc3Qgc3RydWN0IGFmZCAqYWZkOwotCXN0cnVjdCBhZGRyaW5mbyAqY3VyOwotCXN0cnVjdCBhZGRyaW5mbyBzZW50aW5lbDsKLQlpbnQgZXJyb3I7Ci0KLQlhc3NlcnQocGFpICE9IE5VTEwpOwotCS8qIHNlcnZuYW1lIG1heSBiZSBOVUxMICovCi0JYXNzZXJ0KHJlcyAhPSBOVUxMKTsKLQotCSpyZXMgPSBOVUxMOwotCXNlbnRpbmVsLmFpX25leHQgPSBOVUxMOwotCWN1ciA9ICZzZW50aW5lbDsKLQotCS8qCi0JICogZmlsdGVyIG91dCBBRnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUga2VybmVsCi0JICogWFhYIGVycm5vPwotCSAqLwotCXMgPSBzb2NrZXQocGFpLT5haV9mYW1pbHksIFNPQ0tfREdSQU0sIDApOwotCWlmIChzIDwgMCkgewotCQlpZiAoZXJybm8gIT0gRU1GSUxFKQotCQkJcmV0dXJuIDA7Ci0JfSBlbHNlCi0JCWNsb3NlKHMpOwotCi0JLyoKLQkgKiBpZiB0aGUgc2Vydm5hbWUgZG9lcyBub3QgbWF0Y2ggc29ja3R5cGUvcHJvdG9jb2wsIGlnbm9yZSBpdC4KLQkgKi8KLQlpZiAoZ2V0X3BvcnRtYXRjaChwYWksIHNlcnZuYW1lKSAhPSAwKQotCQlyZXR1cm4gMDsKLQotCWFmZCA9IGZpbmRfYWZkKHBhaS0+YWlfZmFtaWx5KTsKLQlpZiAoYWZkID09IE5VTEwpCi0JCXJldHVybiAwOwotCi0JaWYgKHBhaS0+YWlfZmxhZ3MgJiBBSV9QQVNTSVZFKSB7Ci0JCUdFVF9BSShjdXItPmFpX25leHQsIGFmZCwgYWZkLT5hX2FkZHJhbnkpOwotCQkvKiB4eHggbWVhbmluZ2xlc3M/Ci0JCSAqIEdFVF9DQU5PTk5BTUUoY3VyLT5haV9uZXh0LCAiYW55YWRkciIpOwotCQkgKi8KLQkJR0VUX1BPUlQoY3VyLT5haV9uZXh0LCBzZXJ2bmFtZSk7Ci0JfSBlbHNlIHsKLQkJR0VUX0FJKGN1ci0+YWlfbmV4dCwgYWZkLCBhZmQtPmFfbG9vcGJhY2spOwotCQkvKiB4eHggbWVhbmluZ2xlc3M/Ci0JCSAqIEdFVF9DQU5PTk5BTUUoY3VyLT5haV9uZXh0LCAibG9jYWxob3N0Iik7Ci0JCSAqLwotCQlHRVRfUE9SVChjdXItPmFpX25leHQsIHNlcnZuYW1lKTsKLQl9Ci0JY3VyID0gY3VyLT5haV9uZXh0OwotCi0JKnJlcyA9IHNlbnRpbmVsLmFpX25leHQ7Ci0JcmV0dXJuIDA7Ci0KLWZyZWU6Ci0JaWYgKHNlbnRpbmVsLmFpX25leHQpCi0JCWZyZWVhZGRyaW5mbyhzZW50aW5lbC5haV9uZXh0KTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qCi0gKiBudW1lcmljIGhvc3RuYW1lCi0gKi8KLXN0YXRpYyBpbnQKLWV4cGxvcmVfbnVtZXJpYyhjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaSwgY29uc3QgY2hhciAqaG9zdG5hbWUsCi0gICAgY29uc3QgY2hhciAqc2Vydm5hbWUsIHN0cnVjdCBhZGRyaW5mbyAqKnJlcywgY29uc3QgY2hhciAqY2Fub25uYW1lKQotewotCWNvbnN0IHN0cnVjdCBhZmQgKmFmZDsKLQlzdHJ1Y3QgYWRkcmluZm8gKmN1cjsKLQlzdHJ1Y3QgYWRkcmluZm8gc2VudGluZWw7Ci0JaW50IGVycm9yOwotCWNoYXIgcHRvbltQVE9OX01BWF07Ci0KLQlhc3NlcnQocGFpICE9IE5VTEwpOwotCS8qIGhvc3RuYW1lIG1heSBiZSBOVUxMICovCi0JLyogc2Vydm5hbWUgbWF5IGJlIE5VTEwgKi8KLQlhc3NlcnQocmVzICE9IE5VTEwpOwotCi0JKnJlcyA9IE5VTEw7Ci0Jc2VudGluZWwuYWlfbmV4dCA9IE5VTEw7Ci0JY3VyID0gJnNlbnRpbmVsOwotCi0JLyoKLQkgKiBpZiB0aGUgc2Vydm5hbWUgZG9lcyBub3QgbWF0Y2ggc29ja3R5cGUvcHJvdG9jb2wsIGlnbm9yZSBpdC4KLQkgKi8KLQlpZiAoZ2V0X3BvcnRtYXRjaChwYWksIHNlcnZuYW1lKSAhPSAwKQotCQlyZXR1cm4gMDsKLQotCWFmZCA9IGZpbmRfYWZkKHBhaS0+YWlfZmFtaWx5KTsKLQlpZiAoYWZkID09IE5VTEwpCi0JCXJldHVybiAwOwotCi0Jc3dpdGNoIChhZmQtPmFfYWYpIHsKLSNpZiAwIC8qWC9PcGVuIHNwZWMqLwotCWNhc2UgQUZfSU5FVDoKLQkJaWYgKGluZXRfYXRvbihob3N0bmFtZSwgKHN0cnVjdCBpbl9hZGRyICopcHRvbikgPT0gMSkgewotCQkJaWYgKHBhaS0+YWlfZmFtaWx5ID09IGFmZC0+YV9hZiB8fAotCQkJICAgIHBhaS0+YWlfZmFtaWx5ID09IFBGX1VOU1BFQyAvKj8qLykgewotCQkJCUdFVF9BSShjdXItPmFpX25leHQsIGFmZCwgcHRvbik7Ci0JCQkJR0VUX1BPUlQoY3VyLT5haV9uZXh0LCBzZXJ2bmFtZSk7Ci0JCQkJaWYgKChwYWktPmFpX2ZsYWdzICYgQUlfQ0FOT05OQU1FKSkgewotCQkJCQkvKgotCQkJCQkgKiBTZXQgdGhlIG51bWVyaWMgYWRkcmVzcyBpdHNlbGYgYXMKLQkJCQkJICogdGhlIGNhbm9uaWNhbCBuYW1lLCBiYXNlZCBvbiBhCi0JCQkJCSAqIGNsYXJpZmljYXRpb24gaW4gcmZjMjU1M2Jpcy0wMy4KLQkJCQkJICovCi0JCQkJCUdFVF9DQU5PTk5BTUUoY3VyLT5haV9uZXh0LCBjYW5vbm5hbWUpOwotCQkJCX0KLQkJCQl3aGlsZSAoY3VyICYmIGN1ci0+YWlfbmV4dCkKLQkJCQkJY3VyID0gY3VyLT5haV9uZXh0OwotCQkJfSBlbHNlCi0JCQkJRVJSKEVBSV9GQU1JTFkpOwkvKnh4eCovCi0JCX0KLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlpZiAoaW5ldF9wdG9uKGFmZC0+YV9hZiwgaG9zdG5hbWUsIHB0b24pID09IDEpIHsKLQkJCWlmIChwYWktPmFpX2ZhbWlseSA9PSBhZmQtPmFfYWYgfHwKLQkJCSAgICBwYWktPmFpX2ZhbWlseSA9PSBQRl9VTlNQRUMgLyo/Ki8pIHsKLQkJCQlHRVRfQUkoY3VyLT5haV9uZXh0LCBhZmQsIHB0b24pOwotCQkJCUdFVF9QT1JUKGN1ci0+YWlfbmV4dCwgc2Vydm5hbWUpOwotCQkJCWlmICgocGFpLT5haV9mbGFncyAmIEFJX0NBTk9OTkFNRSkpIHsKLQkJCQkJLyoKLQkJCQkJICogU2V0IHRoZSBudW1lcmljIGFkZHJlc3MgaXRzZWxmIGFzCi0JCQkJCSAqIHRoZSBjYW5vbmljYWwgbmFtZSwgYmFzZWQgb24gYQotCQkJCQkgKiBjbGFyaWZpY2F0aW9uIGluIHJmYzI1NTNiaXMtMDMuCi0JCQkJCSAqLwotCQkJCQlHRVRfQ0FOT05OQU1FKGN1ci0+YWlfbmV4dCwgY2Fub25uYW1lKTsKLQkJCQl9Ci0JCQkJd2hpbGUgKGN1ci0+YWlfbmV4dCkKLQkJCQkJY3VyID0gY3VyLT5haV9uZXh0OwotCQkJfSBlbHNlCi0JCQkJRVJSKEVBSV9GQU1JTFkpOwkvKnh4eCovCi0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JKnJlcyA9IHNlbnRpbmVsLmFpX25leHQ7Ci0JcmV0dXJuIDA7Ci0KLWZyZWU6Ci1iYWQ6Ci0JaWYgKHNlbnRpbmVsLmFpX25leHQpCi0JCWZyZWVhZGRyaW5mbyhzZW50aW5lbC5haV9uZXh0KTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qCi0gKiBudW1lcmljIGhvc3RuYW1lIHdpdGggc2NvcGUKLSAqLwotc3RhdGljIGludAotZXhwbG9yZV9udW1lcmljX3Njb3BlKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpLCBjb25zdCBjaGFyICpob3N0bmFtZSwKLSAgICBjb25zdCBjaGFyICpzZXJ2bmFtZSwgc3RydWN0IGFkZHJpbmZvICoqcmVzKQotewotI2lmICFkZWZpbmVkKFNDT1BFX0RFTElNSVRFUikgfHwgIWRlZmluZWQoSU5FVDYpCi0JcmV0dXJuIGV4cGxvcmVfbnVtZXJpYyhwYWksIGhvc3RuYW1lLCBzZXJ2bmFtZSwgcmVzLCBob3N0bmFtZSk7Ci0jZWxzZQotCWNvbnN0IHN0cnVjdCBhZmQgKmFmZDsKLQlzdHJ1Y3QgYWRkcmluZm8gKmN1cjsKLQlpbnQgZXJyb3I7Ci0JY2hhciAqY3AsICpob3N0bmFtZTIgPSBOVUxMLCAqc2NvcGUsICphZGRyOwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0KLQlhc3NlcnQocGFpICE9IE5VTEwpOwotCS8qIGhvc3RuYW1lIG1heSBiZSBOVUxMICovCi0JLyogc2Vydm5hbWUgbWF5IGJlIE5VTEwgKi8KLQlhc3NlcnQocmVzICE9IE5VTEwpOwotCi0JLyoKLQkgKiBpZiB0aGUgc2Vydm5hbWUgZG9lcyBub3QgbWF0Y2ggc29ja3R5cGUvcHJvdG9jb2wsIGlnbm9yZSBpdC4KLQkgKi8KLQlpZiAoZ2V0X3BvcnRtYXRjaChwYWksIHNlcnZuYW1lKSAhPSAwKQotCQlyZXR1cm4gMDsKLQotCWFmZCA9IGZpbmRfYWZkKHBhaS0+YWlfZmFtaWx5KTsKLQlpZiAoYWZkID09IE5VTEwpCi0JCXJldHVybiAwOwotCi0JaWYgKCFhZmQtPmFfc2NvcGVkKQotCQlyZXR1cm4gZXhwbG9yZV9udW1lcmljKHBhaSwgaG9zdG5hbWUsIHNlcnZuYW1lLCByZXMsIGhvc3RuYW1lKTsKLQotCWNwID0gc3RyY2hyKGhvc3RuYW1lLCBTQ09QRV9ERUxJTUlURVIpOwotCWlmIChjcCA9PSBOVUxMKQotCQlyZXR1cm4gZXhwbG9yZV9udW1lcmljKHBhaSwgaG9zdG5hbWUsIHNlcnZuYW1lLCByZXMsIGhvc3RuYW1lKTsKLQotCS8qCi0JICogSGFuZGxlIHNwZWNpYWwgY2FzZSBvZiA8c2NvcGVkX2FkZHJlc3M+PGRlbGltaXRlcj48c2NvcGUgaWQ+Ci0JICovCi0JaG9zdG5hbWUyID0gc3RyZHVwKGhvc3RuYW1lKTsKLQlpZiAoaG9zdG5hbWUyID09IE5VTEwpCi0JCXJldHVybiBFQUlfTUVNT1JZOwotCS8qIHRlcm1pbmF0ZSBhdCB0aGUgZGVsaW1pdGVyICovCi0JaG9zdG5hbWUyW2NwIC0gaG9zdG5hbWVdID0gJ1wwJzsKLQlhZGRyID0gaG9zdG5hbWUyOwotCXNjb3BlID0gY3AgKyAxOwotCi0JZXJyb3IgPSBleHBsb3JlX251bWVyaWMocGFpLCBhZGRyLCBzZXJ2bmFtZSwgcmVzLCBob3N0bmFtZSk7Ci0JaWYgKGVycm9yID09IDApIHsKLQkJdV9pbnQzMl90IHNjb3BlaWQ7Ci0KLQkJZm9yIChjdXIgPSAqcmVzOyBjdXI7IGN1ciA9IGN1ci0+YWlfbmV4dCkgewotCQkJaWYgKGN1ci0+YWlfZmFtaWx5ICE9IEFGX0lORVQ2KQotCQkJCWNvbnRpbnVlOwotCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKHZvaWQgKiljdXItPmFpX2FkZHI7Ci0JCQlpZiAoaXA2X3N0cjJzY29wZWlkKHNjb3BlLCBzaW42LCAmc2NvcGVpZCkgPT0gLTEpIHsKLQkJCQlmcmVlKGhvc3RuYW1lMik7Ci0JCQkJcmV0dXJuKEVBSV9OT0RBVEEpOyAvKiBYWFg6IGlzIHJldHVybiBPSz8gKi8KLQkJCX0KLQkJCXNpbjYtPnNpbjZfc2NvcGVfaWQgPSBzY29wZWlkOwotCQl9Ci0JfQotCi0JZnJlZShob3N0bmFtZTIpOwotCi0JcmV0dXJuIGVycm9yOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQKLWdldF9jYW5vbm5hbWUoY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWksIHN0cnVjdCBhZGRyaW5mbyAqYWksIGNvbnN0IGNoYXIgKnN0cikKLXsKLQotCWFzc2VydChwYWkgIT0gTlVMTCk7Ci0JYXNzZXJ0KGFpICE9IE5VTEwpOwotCWFzc2VydChzdHIgIT0gTlVMTCk7Ci0KLQlpZiAoKHBhaS0+YWlfZmxhZ3MgJiBBSV9DQU5PTk5BTUUpICE9IDApIHsKLQkJYWktPmFpX2Nhbm9ubmFtZSA9IHN0cmR1cChzdHIpOwotCQlpZiAoYWktPmFpX2Nhbm9ubmFtZSA9PSBOVUxMKQotCQkJcmV0dXJuIEVBSV9NRU1PUlk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGFkZHJpbmZvICoKLWdldF9haShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaSwgY29uc3Qgc3RydWN0IGFmZCAqYWZkLCBjb25zdCBjaGFyICphZGRyKQotewotCWNoYXIgKnA7Ci0Jc3RydWN0IGFkZHJpbmZvICphaTsKLQotCWFzc2VydChwYWkgIT0gTlVMTCk7Ci0JYXNzZXJ0KGFmZCAhPSBOVUxMKTsKLQlhc3NlcnQoYWRkciAhPSBOVUxMKTsKLQotCWFpID0gKHN0cnVjdCBhZGRyaW5mbyAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IGFkZHJpbmZvKQotCQkrIChhZmQtPmFfc29ja2xlbikpOwotCWlmIChhaSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCW1lbWNweShhaSwgcGFpLCBzaXplb2Yoc3RydWN0IGFkZHJpbmZvKSk7Ci0JYWktPmFpX2FkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikoYWkgKyAxKTsKLQltZW1zZXQoYWktPmFpX2FkZHIsIDAsIChzaXplX3QpYWZkLT5hX3NvY2tsZW4pOwotCi0jaWZkZWYgSEFWRV9TQV9MRU4KLQlhaS0+YWlfYWRkci0+c2FfbGVuID0gYWZkLT5hX3NvY2tsZW47Ci0jZW5kaWYKLQotCWFpLT5haV9hZGRybGVuID0gYWZkLT5hX3NvY2tsZW47Ci0jaWYgZGVmaW5lZCAoX19hbHBoYV9fKSB8fCAoZGVmaW5lZChfX2kzODZfXykgJiYgZGVmaW5lZChfTFA2NCkpIHx8IGRlZmluZWQoX19zcGFyYzY0X18pCi0JYWktPl9fYWlfcGFkMCA9IDA7Ci0jZW5kaWYKLQlhaS0+YWlfYWRkci0+c2FfZmFtaWx5ID0gYWktPmFpX2ZhbWlseSA9IGFmZC0+YV9hZjsKLQlwID0gKGNoYXIgKikodm9pZCAqKShhaS0+YWlfYWRkcik7Ci0JbWVtY3B5KHAgKyBhZmQtPmFfb2ZmLCBhZGRyLCAoc2l6ZV90KWFmZC0+YV9hZGRybGVuKTsKLQlyZXR1cm4gYWk7Ci19Ci0KLXN0YXRpYyBpbnQKLWdldF9wb3J0bWF0Y2goY29uc3Qgc3RydWN0IGFkZHJpbmZvICphaSwgY29uc3QgY2hhciAqc2Vydm5hbWUpCi17Ci0KLQlhc3NlcnQoYWkgIT0gTlVMTCk7Ci0JLyogc2Vydm5hbWUgbWF5IGJlIE5VTEwgKi8KLQotCXJldHVybiBnZXRfcG9ydChhaSwgc2Vydm5hbWUsIDEpOwotfQotCi1zdGF0aWMgaW50Ci1nZXRfcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmFpLCBjb25zdCBjaGFyICpzZXJ2bmFtZSwgaW50IG1hdGNob25seSkKLXsKLQljb25zdCBjaGFyICpwcm90bzsKLQlzdHJ1Y3Qgc2VydmVudCAqc3A7Ci0JaW50IHBvcnQ7Ci0JaW50IGFsbG93bnVtZXJpYzsKLQotCWFzc2VydChhaSAhPSBOVUxMKTsKLQkvKiBzZXJ2bmFtZSBtYXkgYmUgTlVMTCAqLwotCi0JaWYgKHNlcnZuYW1lID09IE5VTEwpCi0JCXJldHVybiAwOwotCXN3aXRjaCAoYWktPmFpX2ZhbWlseSkgewotCWNhc2UgQUZfSU5FVDoKLSNpZmRlZiBBRl9JTkVUNgotCWNhc2UgQUZfSU5FVDY6Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3dpdGNoIChhaS0+YWlfc29ja3R5cGUpIHsKLQljYXNlIFNPQ0tfUkFXOgotCQlyZXR1cm4gRUFJX1NFUlZJQ0U7Ci0JY2FzZSBTT0NLX0RHUkFNOgotCWNhc2UgU09DS19TVFJFQU06Ci0JCWFsbG93bnVtZXJpYyA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgQU5ZOgotI2lmIDEgIC8qIEFORFJPSUQtU1BFQ0lGSUMgQ0hBTkdFIFRPIE1BVENIIEdMSUJDICovCi0JCWFsbG93bnVtZXJpYyA9IDE7Ci0jZWxzZQotCQlhbGxvd251bWVyaWMgPSAwOwotI2VuZGlmCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBFQUlfU09DS1RZUEU7Ci0JfQotCi0JcG9ydCA9IHN0cjJudW1iZXIoc2Vydm5hbWUpOwotCWlmIChwb3J0ID49IDApIHsKLQkJaWYgKCFhbGxvd251bWVyaWMpCi0JCQlyZXR1cm4gRUFJX1NFUlZJQ0U7Ci0JCWlmIChwb3J0IDwgMCB8fCBwb3J0ID4gNjU1MzUpCi0JCQlyZXR1cm4gRUFJX1NFUlZJQ0U7Ci0JCXBvcnQgPSBodG9ucyhwb3J0KTsKLQl9IGVsc2UgewotCQlpZiAoYWktPmFpX2ZsYWdzICYgQUlfTlVNRVJJQ1NFUlYpCi0JCQlyZXR1cm4gRUFJX05PTkFNRTsKLQotCQlzd2l0Y2ggKGFpLT5haV9zb2NrdHlwZSkgewotCQljYXNlIFNPQ0tfREdSQU06Ci0JCQlwcm90byA9ICJ1ZHAiOwotCQkJYnJlYWs7Ci0JCWNhc2UgU09DS19TVFJFQU06Ci0JCQlwcm90byA9ICJ0Y3AiOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcm90byA9IE5VTEw7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmICgoc3AgPSBnZXRzZXJ2YnluYW1lKHNlcnZuYW1lLCBwcm90bykpID09IE5VTEwpCi0JCQlyZXR1cm4gRUFJX1NFUlZJQ0U7Ci0JCXBvcnQgPSBzcC0+c19wb3J0OwotCX0KLQotCWlmICghbWF0Y2hvbmx5KSB7Ci0JCXN3aXRjaCAoYWktPmFpX2ZhbWlseSkgewotCQljYXNlIEFGX0lORVQ6Ci0JCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSh2b2lkICopCi0JCQkgICAgYWktPmFpX2FkZHIpLT5zaW5fcG9ydCA9IHBvcnQ7Ci0JCQlicmVhazsKLSNpZmRlZiBJTkVUNgotCQljYXNlIEFGX0lORVQ2OgotCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKHZvaWQgKikKLQkJCSAgICBhaS0+YWlfYWRkciktPnNpbjZfcG9ydCA9IHBvcnQ7Ci0JCQlicmVhazsKLSNlbmRpZgotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZkICoKLWZpbmRfYWZkKGludCBhZikKLXsKLQljb25zdCBzdHJ1Y3QgYWZkICphZmQ7Ci0KLQlpZiAoYWYgPT0gUEZfVU5TUEVDKQotCQlyZXR1cm4gTlVMTDsKLQlmb3IgKGFmZCA9IGFmZGw7IGFmZC0+YV9hZjsgYWZkKyspIHsKLQkJaWYgKGFmZC0+YV9hZiA9PSBhZikKLQkJCXJldHVybiBhZmQ7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi0jaWZkZWYgSU5FVDYKLS8qIGNvbnZlcnQgYSBzdHJpbmcgdG8gYSBzY29wZSBpZGVudGlmaWVyLiBYWFg6IElQdjYgc3BlY2lmaWMgKi8KLXN0YXRpYyBpbnQKLWlwNl9zdHIyc2NvcGVpZChjaGFyICpzY29wZSwgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiwgdV9pbnQzMl90ICpzY29wZWlkKQotewotCXVfbG9uZyBsc2NvcGVpZDsKLQlzdHJ1Y3QgaW42X2FkZHIgKmE2OwotCWNoYXIgKmVwOwotCi0JYXNzZXJ0KHNjb3BlICE9IE5VTEwpOwotCWFzc2VydChzaW42ICE9IE5VTEwpOwotCWFzc2VydChzY29wZWlkICE9IE5VTEwpOwotCi0JYTYgPSAmc2luNi0+c2luNl9hZGRyOwotCi0JLyogZW1wdHkgc2NvcGVpZCBwb3J0aW9uIGlzIGludmFsaWQgKi8KLQlpZiAoKnNjb3BlID09ICdcMCcpCi0JCXJldHVybiAtMTsKLQotCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoYTYpIHx8IElONl9JU19BRERSX01DX0xJTktMT0NBTChhNikpIHsKLQkJLyoKLQkJICogV2UgY3VycmVudGx5IGFzc3VtZSBhIG9uZS10by1vbmUgbWFwcGluZyBiZXR3ZWVuIGxpbmtzCi0JCSAqIGFuZCBpbnRlcmZhY2VzLCBzbyB3ZSBzaW1wbHkgdXNlIGludGVyZmFjZSBpbmRpY2VzIGZvcgotCQkgKiBsaWtlLWxvY2FsIHNjb3Blcy4KLQkJICovCi0JCSpzY29wZWlkID0gaWZfbmFtZXRvaW5kZXgoc2NvcGUpOwotCQlpZiAoKnNjb3BlaWQgPT0gMCkKLQkJCWdvdG8gdHJ5bnVtZXJpYzsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogc3RpbGwgdW5jbGVhciBhYm91dCBsaXRlcmFsLCBhbGxvdyBudW1lcmljIG9ubHkgLSBwbGFjZWhvbGRlciAqLwotCWlmIChJTjZfSVNfQUREUl9TSVRFTE9DQUwoYTYpIHx8IElONl9JU19BRERSX01DX1NJVEVMT0NBTChhNikpCi0JCWdvdG8gdHJ5bnVtZXJpYzsKLQlpZiAoSU42X0lTX0FERFJfTUNfT1JHTE9DQUwoYTYpKQotCQlnb3RvIHRyeW51bWVyaWM7Ci0JZWxzZQotCQlnb3RvIHRyeW51bWVyaWM7CS8qIGdsb2JhbCAqLwotCi0JLyogdHJ5IHRvIGNvbnZlcnQgdG8gYSBudW1lcmljIGlkIGFzIGEgbGFzdCByZXNvcnQgKi8KLSAgdHJ5bnVtZXJpYzoKLQllcnJubyA9IDA7Ci0JbHNjb3BlaWQgPSBzdHJ0b3VsKHNjb3BlLCAmZXAsIDEwKTsKLQkqc2NvcGVpZCA9ICh1X2ludDMyX3QpKGxzY29wZWlkICYgMHhmZmZmZmZmZlVMKTsKLQlpZiAoZXJybm8gPT0gMCAmJiBlcCAmJiAqZXAgPT0gJ1wwJyAmJiAqc2NvcGVpZCA9PSBsc2NvcGVpZCkKLQkJcmV0dXJuIDA7Ci0JZWxzZQotCQlyZXR1cm4gLTE7Ci19Ci0jZW5kaWYKLQotLyogY29kZSBkdXBsaWNhdGUgd2l0aCBnZXRobmFtYWRkci5jICovCi0KLXN0YXRpYyBjb25zdCBjaGFyIEFza2VkRm9yR290W10gPQotCSJnZXRob3N0YnkqLmdldGFuc3dlcjogYXNrZWQgZm9yIFwiJXNcIiwgZ290IFwiJXNcIiI7Ci0KLXN0YXRpYyBzdHJ1Y3QgYWRkcmluZm8gKgotZ2V0YW5zd2VyKGNvbnN0IHF1ZXJ5YnVmICphbnN3ZXIsIGludCBhbnNsZW4sIGNvbnN0IGNoYXIgKnFuYW1lLCBpbnQgcXR5cGUsCi0gICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWkpCi17Ci0Jc3RydWN0IGFkZHJpbmZvIHNlbnRpbmVsLCAqY3VyOwotCXN0cnVjdCBhZGRyaW5mbyBhaTsKLQljb25zdCBzdHJ1Y3QgYWZkICphZmQ7Ci0JY2hhciAqY2Fub25uYW1lOwotCWNvbnN0IEhFQURFUiAqaHA7Ci0JY29uc3QgdV9jaGFyICpjcDsKLQlpbnQgbjsKLQljb25zdCB1X2NoYXIgKmVvbTsKLQljaGFyICpicCwgKmVwOwotCWludCB0eXBlLCBjbGFzcywgYW5jb3VudCwgcWRjb3VudDsKLQlpbnQgaGF2ZWFuc3dlciwgaGFkX2Vycm9yOwotCWNoYXIgdGJ1ZltNQVhETkFNRV07Ci0JaW50ICgqbmFtZV9vaykgKGNvbnN0IGNoYXIgKik7Ci0JY2hhciBob3N0YnVmWzgqMTAyNF07Ci0KLQlhc3NlcnQoYW5zd2VyICE9IE5VTEwpOwotCWFzc2VydChxbmFtZSAhPSBOVUxMKTsKLQlhc3NlcnQocGFpICE9IE5VTEwpOwotCi0JbWVtc2V0KCZzZW50aW5lbCwgMCwgc2l6ZW9mKHNlbnRpbmVsKSk7Ci0JY3VyID0gJnNlbnRpbmVsOwotCi0JY2Fub25uYW1lID0gTlVMTDsKLQllb20gPSBhbnN3ZXItPmJ1ZiArIGFuc2xlbjsKLQlzd2l0Y2ggKHF0eXBlKSB7Ci0JY2FzZSBUX0E6Ci0JY2FzZSBUX0FBQUE6Ci0JY2FzZSBUX0FOWToJLyp1c2UgVF9BTlkgb25seSBmb3IgVF9BL1RfQUFBQSBsb29rdXAqLwotCQluYW1lX29rID0gcmVzX2hub2s7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBOVUxMOwkvKiBYWFggc2hvdWxkIGJlIGFib3J0KCk7ICovCi0JfQotCS8qCi0JICogZmluZCBmaXJzdCBzYXRpc2ZhY3RvcnkgYW5zd2VyCi0JICovCi0JaHAgPSAmYW5zd2VyLT5oZHI7Ci0JYW5jb3VudCA9IG50b2hzKGhwLT5hbmNvdW50KTsKLQlxZGNvdW50ID0gbnRvaHMoaHAtPnFkY291bnQpOwotCWJwID0gaG9zdGJ1ZjsKLQllcCA9IGhvc3RidWYgKyBzaXplb2YgaG9zdGJ1ZjsKLQljcCA9IGFuc3dlci0+YnVmICsgSEZJWEVEU1o7Ci0JaWYgKHFkY291bnQgIT0gMSkgewotCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIGJwLCBlcCAtIGJwKTsKLQlpZiAoKG4gPCAwKSB8fCAhKCpuYW1lX29rKShicCkpIHsKLQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQljcCArPSBuICsgUUZJWEVEU1o7Ci0JaWYgKHF0eXBlID09IFRfQSB8fCBxdHlwZSA9PSBUX0FBQUEgfHwgcXR5cGUgPT0gVF9BTlkpIHsKLQkJLyogcmVzX3NlbmQoKSBoYXMgYWxyZWFkeSB2ZXJpZmllZCB0aGF0IHRoZSBxdWVyeSBuYW1lIGlzIHRoZQotCQkgKiBzYW1lIGFzIHRoZSBvbmUgd2Ugc2VudDsgdGhpcyBqdXN0IGdldHMgdGhlIGV4cGFuZGVkIG5hbWUKLQkJICogKGkuZS4sIHdpdGggdGhlIHN1Y2NlZWRpbmcgc2VhcmNoLWRvbWFpbiB0YWNrZWQgb24pLgotCQkgKi8KLQkJbiA9IHN0cmxlbihicCkgKyAxOwkJLyogZm9yIHRoZSBcMCAqLwotCQlpZiAobiA+PSBNQVhIT1NUTkFNRUxFTikgewotCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQljYW5vbm5hbWUgPSBicDsKLQkJYnAgKz0gbjsKLQkJLyogVGhlIHFuYW1lIGNhbiBiZSBhYmJyZXZpYXRlZCwgYnV0IGhfbmFtZSBpcyBub3cgYWJzb2x1dGUuICovCi0JCXFuYW1lID0gY2Fub25uYW1lOwotCX0KLQloYXZlYW5zd2VyID0gMDsKLQloYWRfZXJyb3IgPSAwOwotCXdoaWxlIChhbmNvdW50LS0gPiAwICYmIGNwIDwgZW9tICYmICFoYWRfZXJyb3IpIHsKLQkJbiA9IGRuX2V4cGFuZChhbnN3ZXItPmJ1ZiwgZW9tLCBjcCwgYnAsIGVwIC0gYnApOwotCQlpZiAoKG4gPCAwKSB8fCAhKCpuYW1lX29rKShicCkpIHsKLQkJCWhhZF9lcnJvcisrOwotCQkJY29udGludWU7Ci0JCX0KLQkJY3AgKz0gbjsJCQkvKiBuYW1lICovCi0JCXR5cGUgPSBfZ2V0c2hvcnQoY3ApOwotIAkJY3AgKz0gSU5UMTZTWjsJCQkvKiB0eXBlICovCi0JCWNsYXNzID0gX2dldHNob3J0KGNwKTsKLSAJCWNwICs9IElOVDE2U1ogKyBJTlQzMlNaOwkvKiBjbGFzcywgVFRMICovCi0JCW4gPSBfZ2V0c2hvcnQoY3ApOwotCQljcCArPSBJTlQxNlNaOwkJCS8qIGxlbiAqLwotCQlpZiAoY2xhc3MgIT0gQ19JTikgewotCQkJLyogWFhYIC0gZGVidWc/IHN5c2xvZz8gKi8KLQkJCWNwICs9IG47Ci0JCQljb250aW51ZTsJCS8qIFhYWCAtIGhhZF9lcnJvcisrID8gKi8KLQkJfQotCQlpZiAoKHF0eXBlID09IFRfQSB8fCBxdHlwZSA9PSBUX0FBQUEgfHwgcXR5cGUgPT0gVF9BTlkpICYmCi0JCSAgICB0eXBlID09IFRfQ05BTUUpIHsKLQkJCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIHRidWYsIHNpemVvZiB0YnVmKTsKLQkJCWlmICgobiA8IDApIHx8ICEoKm5hbWVfb2spKHRidWYpKSB7Ci0JCQkJaGFkX2Vycm9yKys7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQljcCArPSBuOwotCQkJLyogR2V0IGNhbm9uaWNhbCBuYW1lLiAqLwotCQkJbiA9IHN0cmxlbih0YnVmKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KLQkJCWlmIChuID4gZXAgLSBicCB8fCBuID49IE1BWEhPU1ROQU1FTEVOKSB7Ci0JCQkJaGFkX2Vycm9yKys7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlzdHJsY3B5KGJwLCB0YnVmLCAoc2l6ZV90KShlcCAtIGJwKSk7Ci0JCQljYW5vbm5hbWUgPSBicDsKLQkJCWJwICs9IG47Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAocXR5cGUgPT0gVF9BTlkpIHsKLQkJCWlmICghKHR5cGUgPT0gVF9BIHx8IHR5cGUgPT0gVF9BQUFBKSkgewotCQkJCWNwICs9IG47Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAodHlwZSAhPSBxdHlwZSkgewotCQkJaWYgKHR5cGUgIT0gVF9LRVkgJiYgdHlwZSAhPSBUX1NJRykKLQkJCQlzeXNsb2coTE9HX05PVElDRXxMT0dfQVVUSCwKLQkgICAgICAgImdldGhvc3RieSouZ2V0YW5zd2VyOiBhc2tlZCBmb3IgXCIlcyAlcyAlc1wiLCBnb3QgdHlwZSBcIiVzXCIiLAotCQkJCSAgICAgICBxbmFtZSwgcF9jbGFzcyhDX0lOKSwgcF90eXBlKHF0eXBlKSwKLQkJCQkgICAgICAgcF90eXBlKHR5cGUpKTsKLQkJCWNwICs9IG47Ci0JCQljb250aW51ZTsJCS8qIFhYWCAtIGhhZF9lcnJvcisrID8gKi8KLQkJfQotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBUX0E6Ci0JCWNhc2UgVF9BQUFBOgotCQkJaWYgKHN0cmNhc2VjbXAoY2Fub25uYW1lLCBicCkgIT0gMCkgewotCQkJCXN5c2xvZyhMT0dfTk9USUNFfExPR19BVVRILAotCQkJCSAgICAgICBBc2tlZEZvckdvdCwgY2Fub25uYW1lLCBicCk7Ci0JCQkJY3AgKz0gbjsKLQkJCQljb250aW51ZTsJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLwotCQkJfQotCQkJaWYgKHR5cGUgPT0gVF9BICYmIG4gIT0gSU5BRERSU1opIHsKLQkJCQljcCArPSBuOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKHR5cGUgPT0gVF9BQUFBICYmIG4gIT0gSU42QUREUlNaKSB7Ci0JCQkJY3AgKz0gbjsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmICh0eXBlID09IFRfQUFBQSkgewotCQkJCXN0cnVjdCBpbjZfYWRkciBpbjY7Ci0JCQkJbWVtY3B5KCZpbjYsIGNwLCBJTjZBRERSU1opOwotCQkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmaW42KSkgewotCQkJCQljcCArPSBuOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoIWhhdmVhbnN3ZXIpIHsKLQkJCQlpbnQgbm47Ci0KLQkJCQljYW5vbm5hbWUgPSBicDsKLQkJCQlubiA9IHN0cmxlbihicCkgKyAxOwkvKiBmb3IgdGhlIFwwICovCi0JCQkJYnAgKz0gbm47Ci0JCQl9Ci0KLQkJCS8qIGRvbid0IG92ZXJ3cml0ZSBwYWkgKi8KLQkJCWFpID0gKnBhaTsKLQkJCWFpLmFpX2ZhbWlseSA9ICh0eXBlID09IFRfQSkgPyBBRl9JTkVUIDogQUZfSU5FVDY7Ci0JCQlhZmQgPSBmaW5kX2FmZChhaS5haV9mYW1pbHkpOwotCQkJaWYgKGFmZCA9PSBOVUxMKSB7Ci0JCQkJY3AgKz0gbjsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWN1ci0+YWlfbmV4dCA9IGdldF9haSgmYWksIGFmZCwgKGNvbnN0IGNoYXIgKiljcCk7Ci0JCQlpZiAoY3VyLT5haV9uZXh0ID09IE5VTEwpCi0JCQkJaGFkX2Vycm9yKys7Ci0JCQl3aGlsZSAoY3VyICYmIGN1ci0+YWlfbmV4dCkKLQkJCQljdXIgPSBjdXItPmFpX25leHQ7Ci0JCQljcCArPSBuOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlhYm9ydCgpOwotCQl9Ci0JCWlmICghaGFkX2Vycm9yKQotCQkJaGF2ZWFuc3dlcisrOwotCX0KLQlpZiAoaGF2ZWFuc3dlcikgewotCQlpZiAoIWNhbm9ubmFtZSkKLQkJCSh2b2lkKWdldF9jYW5vbm5hbWUocGFpLCBzZW50aW5lbC5haV9uZXh0LCBxbmFtZSk7Ci0JCWVsc2UKLQkJCSh2b2lkKWdldF9jYW5vbm5hbWUocGFpLCBzZW50aW5lbC5haV9uZXh0LCBjYW5vbm5hbWUpOwotCQloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKLQkJcmV0dXJuIHNlbnRpbmVsLmFpX25leHQ7Ci0JfQotCi0JaF9lcnJubyA9IE5PX1JFQ09WRVJZOwotCXJldHVybiBOVUxMOwotfQotCi1zdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtIHsKLQlzdHJ1Y3QgYWRkcmluZm8gKmFpOwotCWludCBoYXNfc3JjX2FkZHI7Ci0Jc29ja2FkZHJfdW5pb24gc3JjX2FkZHI7Ci0JaW50IG9yaWdpbmFsX29yZGVyOwotfTsKLQotLypBUkdTVVNFRCovCi1zdGF0aWMgaW50Ci1fZ2V0X3Njb3BlKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcikKLXsKLQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOwotCQlpZiAoSU42X0lTX0FERFJfTVVMVElDQVNUKCZhZGRyNi0+c2luNl9hZGRyKSkgewotCQkJcmV0dXJuIElQVjZfQUREUl9NQ19TQ09QRSgmYWRkcjYtPnNpbjZfYWRkcik7Ci0JCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfTE9PUEJBQ0soJmFkZHI2LT5zaW42X2FkZHIpIHx8Ci0JCQkgICBJTjZfSVNfQUREUl9MSU5LTE9DQUwoJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQkvKgotCQkJICogUkZDIDQyOTEgc2VjdGlvbiAyLjUuMyBzYXlzIGxvb3BiYWNrIGlzIHRvIGJlIHRyZWF0ZWQgYXMgaGF2aW5nCi0JCQkgKiBsaW5rLWxvY2FsIHNjb3BlLgotCQkJICovCi0JCQlyZXR1cm4gSVBWNl9BRERSX1NDT1BFX0xJTktMT0NBTDsKLQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9TSVRFTE9DQUwoJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQlyZXR1cm4gSVBWNl9BRERSX1NDT1BFX1NJVEVMT0NBTDsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiBJUFY2X0FERFJfU0NPUEVfR0xPQkFMOwotCQl9Ci0JfSBlbHNlIGlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgewotCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHI0ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7Ci0JCXVuc2lnbmVkIGxvbmcgaW50IG5hID0gbnRvaGwoYWRkcjQtPnNpbl9hZGRyLnNfYWRkcik7Ci0KLQkJaWYgKElOX0xPT1BCQUNLKG5hKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTI3LjAuMC4wLzggKi8KLQkJICAgIChuYSAmIDB4ZmZmZjAwMDApID09IDB4YTlmZTAwMDApIHsgICAgICAgICAgLyogMTY5LjI1NC4wLjAvMTYgKi8KLQkJCXJldHVybiBJUFY2X0FERFJfU0NPUEVfTElOS0xPQ0FMOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFJGQyA2NzI0IHNlY3Rpb24gMy4yLiBPdGhlciBJUHY0IGFkZHJlc3NlcywgaW5jbHVkaW5nIHByaXZhdGUgYWRkcmVzc2VzCi0JCQkgKiBhbmQgc2hhcmVkIGFkZHJlc3NlcyAoMTAwLjY0LjAuMC8xMCksIGFyZSBhc3NpZ25lZCBnbG9iYWwgc2NvcGUuCi0JCQkgKi8KLQkJCXJldHVybiBJUFY2X0FERFJfU0NPUEVfR0xPQkFMOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLgotCQkgKiBSZXR1cm4gYSBzY29wZSB3aXRoIGxvdyBwcmlvcml0eSBhcyBhIGxhc3QgcmVzb3J0LgotCQkgKi8KLQkJcmV0dXJuIElQVjZfQUREUl9TQ09QRV9OT0RFTE9DQUw7Ci0JfQotfQotCi0vKiBUaGVzZSBtYWNyb3MgYXJlIG1vZGVsbGVkIGFmdGVyIHRoZSBvbmVzIGluIDxuZXRpbmV0L2luNi5oPi4gKi8KLQotLyogUkZDIDQzODAsIHNlY3Rpb24gMi42ICovCi0jZGVmaW5lIElONl9JU19BRERSX1RFUkVETyhhKQkgXAotCSgoKihjb25zdCB1aW50MzJfdCAqKShjb25zdCB2b2lkICopKCYoYSktPnM2X2FkZHJbMF0pID09IG50b2hsKDB4MjAwMTAwMDApKSkKLQotLyogUkZDIDMwNTYsIHNlY3Rpb24gMi4gKi8KLSNkZWZpbmUgSU42X0lTX0FERFJfNlRPNChhKQkgXAotCSgoKGEpLT5zNl9hZGRyWzBdID09IDB4MjApICYmICgoYSktPnM2X2FkZHJbMV0gPT0gMHgwMikpCi0KLS8qIDZib25lIHRlc3RpbmcgYWRkcmVzcyBhcmVhICgzZmZlOjovMTYpLCBkZXByZWNhdGVkIGluIFJGQyAzNzAxLiAqLwotI2RlZmluZSBJTjZfSVNfQUREUl82Qk9ORShhKSAgICAgIFwKLQkoKChhKS0+czZfYWRkclswXSA9PSAweDNmKSAmJiAoKGEpLT5zNl9hZGRyWzFdID09IDB4ZmUpKQotCi0vKgotICogR2V0IHRoZSBsYWJlbCBmb3IgYSBnaXZlbiBJUHY0L0lQdjYgYWRkcmVzcy4KLSAqIFJGQyA2NzI0LCBzZWN0aW9uIDIuMS4KLSAqLwotCi0vKkFSR1NVU0VEKi8KLXN0YXRpYyBpbnQKLV9nZXRfbGFiZWwoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyKQotewotCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgewotCQlyZXR1cm4gNDsKLQl9IGVsc2UgaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgewotCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyNiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGFkZHI7Ci0JCWlmIChJTjZfSVNfQUREUl9MT09QQkFDSygmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZhZGRyNi0+c2luNl9hZGRyKSkgewotCQkJcmV0dXJuIDQ7Ci0JCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfNlRPNCgmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiAyOwotCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1RFUkVETygmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiA1OwotCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1VMQSgmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiAxMzsKLQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9WNENPTVBBVCgmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiAzOwotCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1NJVEVMT0NBTCgmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiAxMTsKLQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl82Qk9ORSgmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiAxMjsKLQkJfSBlbHNlIHsKLQkJCS8qIEFsbCBvdGhlciBJUHY2IGFkZHJlc3NlcywgaW5jbHVkaW5nIGdsb2JhbCB1bmljYXN0IGFkZHJlc3Nlcy4gKi8KLQkJCXJldHVybiAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLgotCQkgKiBSZXR1cm4gYSBzZW1pLXJhbmRvbSBsYWJlbCBhcyBhIGxhc3QgcmVzb3J0LgotCQkgKi8KLQkJcmV0dXJuIDE7Ci0JfQotfQotCi0vKgotICogR2V0IHRoZSBwcmVjZWRlbmNlIGZvciBhIGdpdmVuIElQdjQvSVB2NiBhZGRyZXNzLgotICogUkZDIDY3MjQsIHNlY3Rpb24gMi4xLgotICovCi0KLS8qQVJHU1VTRUQqLwotc3RhdGljIGludAotX2dldF9wcmVjZWRlbmNlKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcikKLXsKLQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKLQkJcmV0dXJuIDM1OwotCX0gZWxzZSBpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOwotCQlpZiAoSU42X0lTX0FERFJfTE9PUEJBQ0soJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQlyZXR1cm4gNTA7Ci0JCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQlyZXR1cm4gMzU7Ci0JCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfNlRPNCgmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiAzMDsKLQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9URVJFRE8oJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQlyZXR1cm4gNTsKLQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9VTEEoJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQlyZXR1cm4gMzsKLQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9WNENPTVBBVCgmYWRkcjYtPnNpbjZfYWRkcikgfHwKLQkJICAgICAgICAgICBJTjZfSVNfQUREUl9TSVRFTE9DQUwoJmFkZHI2LT5zaW42X2FkZHIpIHx8Ci0JCSAgICAgICAgICAgSU42X0lTX0FERFJfNkJPTkUoJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQlyZXR1cm4gMTsKLQkJfSBlbHNlIHsKLQkJCS8qIEFsbCBvdGhlciBJUHY2IGFkZHJlc3NlcywgaW5jbHVkaW5nIGdsb2JhbCB1bmljYXN0IGFkZHJlc3Nlcy4gKi8KLQkJCXJldHVybiA0MDsKLQkJfQotCX0gZWxzZSB7Ci0JCXJldHVybiAxOwotCX0KLX0KLQotLyoKLSAqIEZpbmQgbnVtYmVyIG9mIG1hdGNoaW5nIGluaXRpYWwgYml0cyBiZXR3ZWVuIHRoZSB0d28gYWRkcmVzc2VzIGExIGFuZCBhMi4KLSAqLwotCi0vKkFSR1NVU0VEKi8KLXN0YXRpYyBpbnQKLV9jb21tb25fcHJlZml4X2xlbihjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmExLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmEyKQotewotCWNvbnN0IGNoYXIgKnAxID0gKGNvbnN0IGNoYXIgKilhMTsKLQljb25zdCBjaGFyICpwMiA9IChjb25zdCBjaGFyICopYTI7Ci0JdW5zaWduZWQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoKmExKTsgKytpKSB7Ci0JCWludCB4LCBqOwotCi0JCWlmIChwMVtpXSA9PSBwMltpXSkgewotCQkJY29udGludWU7Ci0JCX0KLQkJeCA9IHAxW2ldIF4gcDJbaV07Ci0JCWZvciAoaiA9IDA7IGogPCBDSEFSX0JJVDsgKytqKSB7Ci0JCQlpZiAoeCAmICgxIDw8IChDSEFSX0JJVCAtIDEpKSkgewotCQkJCXJldHVybiBpICogQ0hBUl9CSVQgKyBqOwotCQkJfQotCQkJeCA8PD0gMTsKLQkJfQotCX0KLQlyZXR1cm4gc2l6ZW9mKCphMSkgKiBDSEFSX0JJVDsKLX0KLQotLyoKLSAqIENvbXBhcmUgdHdvIHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIHBhaXJzLgotICogUkZDIDY3MjQsIHNlY3Rpb24gNi4KLSAqLwotCi0vKkFSR1NVU0VEKi8KLXN0YXRpYyBpbnQKLV9yZmM2NzI0X2NvbXBhcmUoY29uc3Qgdm9pZCAqcHRyMSwgY29uc3Qgdm9pZCogcHRyMikKLXsKLQljb25zdCBzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtICphMSA9IChjb25zdCBzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtICopcHRyMTsKLQljb25zdCBzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtICphMiA9IChjb25zdCBzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtICopcHRyMjsKLQlpbnQgc2NvcGVfc3JjMSwgc2NvcGVfZHN0MSwgc2NvcGVfbWF0Y2gxOwotCWludCBzY29wZV9zcmMyLCBzY29wZV9kc3QyLCBzY29wZV9tYXRjaDI7Ci0JaW50IGxhYmVsX3NyYzEsIGxhYmVsX2RzdDEsIGxhYmVsX21hdGNoMTsKLQlpbnQgbGFiZWxfc3JjMiwgbGFiZWxfZHN0MiwgbGFiZWxfbWF0Y2gyOwotCWludCBwcmVjZWRlbmNlMSwgcHJlY2VkZW5jZTI7Ci0JaW50IHByZWZpeGxlbjEsIHByZWZpeGxlbjI7Ci0KLQkvKiBSdWxlIDE6IEF2b2lkIHVudXNhYmxlIGRlc3RpbmF0aW9ucy4gKi8KLQlpZiAoYTEtPmhhc19zcmNfYWRkciAhPSBhMi0+aGFzX3NyY19hZGRyKSB7Ci0JCXJldHVybiBhMi0+aGFzX3NyY19hZGRyIC0gYTEtPmhhc19zcmNfYWRkcjsKLQl9Ci0KLQkvKiBSdWxlIDI6IFByZWZlciBtYXRjaGluZyBzY29wZS4gKi8KLQlzY29wZV9zcmMxID0gX2dldF9zY29wZSgmYTEtPnNyY19hZGRyLmdlbmVyaWMpOwotCXNjb3BlX2RzdDEgPSBfZ2V0X3Njb3BlKGExLT5haS0+YWlfYWRkcik7Ci0Jc2NvcGVfbWF0Y2gxID0gKHNjb3BlX3NyYzEgPT0gc2NvcGVfZHN0MSk7Ci0KLQlzY29wZV9zcmMyID0gX2dldF9zY29wZSgmYTItPnNyY19hZGRyLmdlbmVyaWMpOwotCXNjb3BlX2RzdDIgPSBfZ2V0X3Njb3BlKGEyLT5haS0+YWlfYWRkcik7Ci0Jc2NvcGVfbWF0Y2gyID0gKHNjb3BlX3NyYzIgPT0gc2NvcGVfZHN0Mik7Ci0KLQlpZiAoc2NvcGVfbWF0Y2gxICE9IHNjb3BlX21hdGNoMikgewotCQlyZXR1cm4gc2NvcGVfbWF0Y2gyIC0gc2NvcGVfbWF0Y2gxOwotCX0KLQotCS8qCi0JICogUnVsZSAzOiBBdm9pZCBkZXByZWNhdGVkIGFkZHJlc3Nlcy4KLQkgKiBUT0RPKHNlc3NlKTogV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBnb29kIHdheSBvZiBmaW5kaW5nIHRoaXMuCi0JICovCi0KLQkvKgotCSAqIFJ1bGUgNDogUHJlZmVyIGhvbWUgYWRkcmVzc2VzLgotCSAqIFRPRE8oc2Vzc2UpOiBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIGdvb2Qgd2F5IG9mIGZpbmRpbmcgdGhpcy4KLQkgKi8KLQotCS8qIFJ1bGUgNTogUHJlZmVyIG1hdGNoaW5nIGxhYmVsLiAqLwotCWxhYmVsX3NyYzEgPSBfZ2V0X2xhYmVsKCZhMS0+c3JjX2FkZHIuZ2VuZXJpYyk7Ci0JbGFiZWxfZHN0MSA9IF9nZXRfbGFiZWwoYTEtPmFpLT5haV9hZGRyKTsKLQlsYWJlbF9tYXRjaDEgPSAobGFiZWxfc3JjMSA9PSBsYWJlbF9kc3QxKTsKLQotCWxhYmVsX3NyYzIgPSBfZ2V0X2xhYmVsKCZhMi0+c3JjX2FkZHIuZ2VuZXJpYyk7Ci0JbGFiZWxfZHN0MiA9IF9nZXRfbGFiZWwoYTItPmFpLT5haV9hZGRyKTsKLQlsYWJlbF9tYXRjaDIgPSAobGFiZWxfc3JjMiA9PSBsYWJlbF9kc3QyKTsKLQotCWlmIChsYWJlbF9tYXRjaDEgIT0gbGFiZWxfbWF0Y2gyKSB7Ci0JCXJldHVybiBsYWJlbF9tYXRjaDIgLSBsYWJlbF9tYXRjaDE7Ci0JfQotCi0JLyogUnVsZSA2OiBQcmVmZXIgaGlnaGVyIHByZWNlZGVuY2UuICovCi0JcHJlY2VkZW5jZTEgPSBfZ2V0X3ByZWNlZGVuY2UoYTEtPmFpLT5haV9hZGRyKTsKLQlwcmVjZWRlbmNlMiA9IF9nZXRfcHJlY2VkZW5jZShhMi0+YWktPmFpX2FkZHIpOwotCWlmIChwcmVjZWRlbmNlMSAhPSBwcmVjZWRlbmNlMikgewotCQlyZXR1cm4gcHJlY2VkZW5jZTIgLSBwcmVjZWRlbmNlMTsKLQl9Ci0KLQkvKgotCSAqIFJ1bGUgNzogUHJlZmVyIG5hdGl2ZSB0cmFuc3BvcnQuCi0JICogVE9ETyhzZXNzZSk6IFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgZ29vZCB3YXkgb2YgZmluZGluZyB0aGlzLgotCSAqLwotCi0JLyogUnVsZSA4OiBQcmVmZXIgc21hbGxlciBzY29wZS4gKi8KLQlpZiAoc2NvcGVfZHN0MSAhPSBzY29wZV9kc3QyKSB7Ci0JCXJldHVybiBzY29wZV9kc3QxIC0gc2NvcGVfZHN0MjsKLQl9Ci0KLQkvKgotCSAqIFJ1bGUgOTogVXNlIGxvbmdlc3QgbWF0Y2hpbmcgcHJlZml4LgotICAgICAgICAgKiBXZSBpbXBsZW1lbnQgdGhpcyBmb3IgSVB2NiBvbmx5LCBhcyB0aGUgcnVsZXMgaW4gUkZDIDY3MjQgZG9uJ3Qgc2VlbQotICAgICAgICAgKiB0byB3b3JrIHZlcnkgd2VsbCBkaXJlY3RseSBhcHBsaWVkIHRvIElQdjQuIChnbGliYyB1c2VzIGluZm9ybWF0aW9uIGZyb20KLSAgICAgICAgICogdGhlIHJvdXRpbmcgdGFibGUgZm9yIGEgY3VzdG9tIElQdjQgaW1wbGVtZW50YXRpb24gaGVyZS4pCi0JICovCi0JaWYgKGExLT5oYXNfc3JjX2FkZHIgJiYgYTEtPmFpLT5haV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgJiYKLQkgICAgYTItPmhhc19zcmNfYWRkciAmJiBhMi0+YWktPmFpX2FkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgewotCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICphMV9zcmMgPSAmYTEtPnNyY19hZGRyLmluNjsKLQkJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqYTFfZHN0ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhMS0+YWktPmFpX2FkZHI7Ci0JCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmEyX3NyYyA9ICZhMi0+c3JjX2FkZHIuaW42OwotCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICphMl9kc3QgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKWEyLT5haS0+YWlfYWRkcjsKLQkJcHJlZml4bGVuMSA9IF9jb21tb25fcHJlZml4X2xlbigmYTFfc3JjLT5zaW42X2FkZHIsICZhMV9kc3QtPnNpbjZfYWRkcik7Ci0JCXByZWZpeGxlbjIgPSBfY29tbW9uX3ByZWZpeF9sZW4oJmEyX3NyYy0+c2luNl9hZGRyLCAmYTJfZHN0LT5zaW42X2FkZHIpOwotCQlpZiAocHJlZml4bGVuMSAhPSBwcmVmaXhsZW4yKSB7Ci0JCQlyZXR1cm4gcHJlZml4bGVuMiAtIHByZWZpeGxlbjE7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFJ1bGUgMTA6IExlYXZlIHRoZSBvcmRlciB1bmNoYW5nZWQuCi0JICogV2UgbmVlZCB0aGlzIHNpbmNlIHFzb3J0KCkgaXMgbm90IG5lY2Vzc2FyaWx5IHN0YWJsZS4KLQkgKi8KLQlyZXR1cm4gYTEtPm9yaWdpbmFsX29yZGVyIC0gYTItPm9yaWdpbmFsX29yZGVyOwotfQotCi0vKgotICogRmluZCB0aGUgc291cmNlIGFkZHJlc3MgdGhhdCB3aWxsIGJlIHVzZWQgaWYgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdGhlIGdpdmVuCi0gKiBhZGRyZXNzLiBzcmNfYWRkciBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGEgc3RydWN0IHNvY2thZGRyX2luNi4KLSAqCi0gKiBSZXR1cm5zIDEgaWYgYSBzb3VyY2UgYWRkcmVzcyB3YXMgZm91bmQsIDAgaWYgdGhlIGFkZHJlc3MgaXMgdW5yZWFjaGFibGUsCi0gKiBhbmQgLTEgaWYgYSBmYXRhbCBlcnJvciBvY2N1cnJlZC4gSWYgMCBvciAxLCB0aGUgY29udGVudHMgb2Ygc3JjX2FkZHIgYXJlCi0gKiB1bmRlZmluZWQuCi0gKi8KLQotLypBUkdTVVNFRCovCi1zdGF0aWMgaW50Ci1fZmluZF9zcmNfYWRkcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHN0cnVjdCBzb2NrYWRkciAqc3JjX2FkZHIpCi17Ci0JaW50IHNvY2s7Ci0JaW50IHJldDsKLQlzb2NrbGVuX3QgbGVuOwotCi0Jc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKLQljYXNlIEFGX0lORVQ6Ci0JCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotCQlicmVhazsKLQljYXNlIEFGX0lORVQ2OgotCQlsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIE5vIGtub3duIHVzYWJsZSBzb3VyY2UgYWRkcmVzcyBmb3Igbm9uLUlORVQgZmFtaWxpZXMuICovCi0JCXJldHVybiAwOwotCX0KLQotCXNvY2sgPSBzb2NrZXQoYWRkci0+c2FfZmFtaWx5LCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7Ci0JaWYgKHNvY2sgPT0gLTEpIHsKLQkJaWYgKGVycm5vID09IEVBRk5PU1VQUE9SVCkgewotCQkJcmV0dXJuIDA7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0KLQlkbyB7Ci0JCXJldCA9IGNvbm5lY3Qoc29jaywgYWRkciwgbGVuKTsKLQl9IHdoaWxlIChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOwotCi0JaWYgKHJldCA9PSAtMSkgewotCQljbG9zZShzb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGdldHNvY2tuYW1lKHNvY2ssIHNyY19hZGRyLCAmbGVuKSA9PSAtMSkgewotCQljbG9zZShzb2NrKTsKLQkJcmV0dXJuIC0xOwotCX0KLQljbG9zZShzb2NrKTsKLQlyZXR1cm4gMTsKLX0KLQotLyoKLSAqIFNvcnQgdGhlIGxpbmtlZCBsaXN0IHN0YXJ0aW5nIGF0IHNlbnRpbmVsLT5haV9uZXh0IGluIFJGQzY3MjQgb3JkZXIuCi0gKiBXaWxsIGxlYXZlIHRoZSBsaXN0IHVuY2hhbmdlZCBpZiBhbiBlcnJvciBvY2N1cnMuCi0gKi8KLQotLypBUkdTVVNFRCovCi1zdGF0aWMgdm9pZAotX3JmYzY3MjRfc29ydChzdHJ1Y3QgYWRkcmluZm8gKmxpc3Rfc2VudGluZWwpCi17Ci0Jc3RydWN0IGFkZHJpbmZvICpjdXI7Ci0JaW50IG5lbGVtID0gMCwgaTsKLQlzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtICplbGVtczsKLQotCWN1ciA9IGxpc3Rfc2VudGluZWwtPmFpX25leHQ7Ci0Jd2hpbGUgKGN1cikgewotCQkrK25lbGVtOwotCQljdXIgPSBjdXItPmFpX25leHQ7Ci0JfQotCi0JZWxlbXMgPSAoc3RydWN0IGFkZHJpbmZvX3NvcnRfZWxlbSAqKW1hbGxvYyhuZWxlbSAqIHNpemVvZihzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtKSk7Ci0JaWYgKGVsZW1zID09IE5VTEwpIHsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKgotCSAqIENvbnZlcnQgdGhlIGxpbmtlZCBsaXN0IHRvIGFuIGFycmF5IHRoYXQgYWxzbyBjb250YWlucyB0aGUgY2FuZGlkYXRlCi0JICogc291cmNlIGFkZHJlc3MgZm9yIGVhY2ggZGVzdGluYXRpb24gYWRkcmVzcy4KLQkgKi8KLQlmb3IgKGkgPSAwLCBjdXIgPSBsaXN0X3NlbnRpbmVsLT5haV9uZXh0OyBpIDwgbmVsZW07ICsraSwgY3VyID0gY3VyLT5haV9uZXh0KSB7Ci0JCWludCBoYXNfc3JjX2FkZHI7Ci0JCWFzc2VydChjdXIgIT0gTlVMTCk7Ci0JCWVsZW1zW2ldLmFpID0gY3VyOwotCQllbGVtc1tpXS5vcmlnaW5hbF9vcmRlciA9IGk7Ci0KLQkJaGFzX3NyY19hZGRyID0gX2ZpbmRfc3JjX2FkZHIoY3VyLT5haV9hZGRyLCAmZWxlbXNbaV0uc3JjX2FkZHIuZ2VuZXJpYyk7Ci0JCWlmIChoYXNfc3JjX2FkZHIgPT0gLTEpIHsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJZWxlbXNbaV0uaGFzX3NyY19hZGRyID0gaGFzX3NyY19hZGRyOwotCX0KLQotCS8qIFNvcnQgdGhlIGFkZHJlc3NlcywgYW5kIHJlYXJyYW5nZSB0aGUgbGlua2VkIGxpc3Qgc28gaXQgbWF0Y2hlcyB0aGUgc29ydGVkIG9yZGVyLiAqLwotCXFzb3J0KCh2b2lkICopZWxlbXMsIG5lbGVtLCBzaXplb2Yoc3RydWN0IGFkZHJpbmZvX3NvcnRfZWxlbSksIF9yZmM2NzI0X2NvbXBhcmUpOwotCi0JbGlzdF9zZW50aW5lbC0+YWlfbmV4dCA9IGVsZW1zWzBdLmFpOwotCWZvciAoaSA9IDA7IGkgPCBuZWxlbSAtIDE7ICsraSkgewotCQllbGVtc1tpXS5haS0+YWlfbmV4dCA9IGVsZW1zW2kgKyAxXS5haTsKLQl9Ci0JZWxlbXNbbmVsZW0gLSAxXS5haS0+YWlfbmV4dCA9IE5VTEw7Ci0KLWVycm9yOgotCWZyZWUoZWxlbXMpOwotfQotCi1zdGF0aWMgYm9vbCBfdXNpbmdfZGVmYXVsdF9kbnMoY29uc3QgY2hhciAqaWZhY2UpCi17Ci0JY2hhciBidWZbSUZfTkFNRVNJWkUrMV07Ci0Jc2l6ZV90IGlmX2xlbjsKLQotCS8vIGNvbW1vbiBjYXNlCi0JaWYgKGlmYWNlID09IE5VTEwgfHwgKmlmYWNlID09ICdcMCcpIHJldHVybiB0cnVlOwotCi0JaWZfbGVuID0gX3Jlc29sdl9nZXRfZGVmYXVsdF9pZmFjZShidWYsIHNpemVvZihidWYpKTsKLQlpZiAoaWZfbGVuICE9IDAgJiYgaWZfbGVuICsgMSA8PSBzaXplb2YoYnVmKSkgewotCQlpZiAoc3RyY21wKGJ1ZiwgaWZhY2UpID09IDApIHJldHVybiB0cnVlOwotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLS8qQVJHU1VTRUQqLwotc3RhdGljIGludAotX2Ruc19nZXRhZGRyaW5mbyh2b2lkICpydiwgdm9pZAkqY2JfZGF0YSwgdmFfbGlzdCBhcCkKLXsKLQlzdHJ1Y3QgYWRkcmluZm8gKmFpOwotCXF1ZXJ5YnVmICpidWYsICpidWYyOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWk7Ci0Jc3RydWN0IGFkZHJpbmZvIHNlbnRpbmVsLCAqY3VyOwotCXN0cnVjdCByZXNfdGFyZ2V0IHEsIHEyOwotCXJlc19zdGF0ZSByZXM7Ci0JY29uc3QgY2hhciogaWZhY2U7Ci0JaW50IG1hcms7Ci0KLQluYW1lID0gdmFfYXJnKGFwLCBjaGFyICopOwotCXBhaSA9IHZhX2FyZyhhcCwgY29uc3Qgc3RydWN0IGFkZHJpbmZvICopOwotCWlmYWNlID0gdmFfYXJnKGFwLCBjaGFyICopOwotCW1hcmsgPSB2YV9hcmcoYXAsIGludCk7Ci0JLy9mcHJpbnRmKHN0ZGVyciwgIl9kbnNfZ2V0YWRkcmluZm8oKSBuYW1lID0gJyVzJ1xuIiwgbmFtZSk7Ci0KLQltZW1zZXQoJnEsIDAsIHNpemVvZihxKSk7Ci0JbWVtc2V0KCZxMiwgMCwgc2l6ZW9mKHEyKSk7Ci0JbWVtc2V0KCZzZW50aW5lbCwgMCwgc2l6ZW9mKHNlbnRpbmVsKSk7Ci0JY3VyID0gJnNlbnRpbmVsOwotCi0JYnVmID0gbWFsbG9jKHNpemVvZigqYnVmKSk7Ci0JaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0JCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKLQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCX0KLQlidWYyID0gbWFsbG9jKHNpemVvZigqYnVmMikpOwotCWlmIChidWYyID09IE5VTEwpIHsKLQkJZnJlZShidWYpOwotCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7Ci0JCXJldHVybiBOU19OT1RGT1VORDsKLQl9Ci0KLQlzd2l0Y2ggKHBhaS0+YWlfZmFtaWx5KSB7Ci0JY2FzZSBBRl9VTlNQRUM6Ci0JCS8qIHByZWZlciBJUHY2ICovCi0JCXEubmFtZSA9IG5hbWU7Ci0JCXEucWNsYXNzID0gQ19JTjsKLQkJcS5hbnN3ZXIgPSBidWYtPmJ1ZjsKLQkJcS5hbnNsZW4gPSBzaXplb2YoYnVmLT5idWYpOwotCQlpbnQgcXVlcnlfaXB2NiA9IDEsIHF1ZXJ5X2lwdjQgPSAxOwotCQlpZiAocGFpLT5haV9mbGFncyAmIEFJX0FERFJDT05GSUcpIHsKLQkJCS8vIE9ubHkgaW1wbGVtZW50IEFJX0FERFJDT05GSUcgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdAotCQkJLy8gdXNpbmcgaXRzIG93biBETlMgc2VydmVycywgc2luY2Ugb3VyIGltcGxlbWVudGF0aW9uCi0JCQkvLyBvbmx5IHdvcmtzIG9uIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24uCi0JCQlpZiAoX3VzaW5nX2RlZmF1bHRfZG5zKGlmYWNlKSkgewotCQkJCXF1ZXJ5X2lwdjYgPSBfaGF2ZV9pcHY2KCk7Ci0JCQkJcXVlcnlfaXB2NCA9IF9oYXZlX2lwdjQoKTsKLQkJCX0KLQkJfQotCQlpZiAocXVlcnlfaXB2NikgewotCQkJcS5xdHlwZSA9IFRfQUFBQTsKLQkJCWlmIChxdWVyeV9pcHY0KSB7Ci0JCQkJcS5uZXh0ID0gJnEyOwotCQkJCXEyLm5hbWUgPSBuYW1lOwotCQkJCXEyLnFjbGFzcyA9IENfSU47Ci0JCQkJcTIucXR5cGUgPSBUX0E7Ci0JCQkJcTIuYW5zd2VyID0gYnVmMi0+YnVmOwotCQkJCXEyLmFuc2xlbiA9IHNpemVvZihidWYyLT5idWYpOwotCQkJfQotCQl9IGVsc2UgaWYgKHF1ZXJ5X2lwdjQpIHsKLQkJCXEucXR5cGUgPSBUX0E7Ci0JCX0gZWxzZSB7Ci0JCQlmcmVlKGJ1Zik7Ci0JCQlmcmVlKGJ1ZjIpOwotCQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgQUZfSU5FVDoKLQkJcS5uYW1lID0gbmFtZTsKLQkJcS5xY2xhc3MgPSBDX0lOOwotCQlxLnF0eXBlID0gVF9BOwotCQlxLmFuc3dlciA9IGJ1Zi0+YnVmOwotCQlxLmFuc2xlbiA9IHNpemVvZihidWYtPmJ1Zik7Ci0JCWJyZWFrOwotCWNhc2UgQUZfSU5FVDY6Ci0JCXEubmFtZSA9IG5hbWU7Ci0JCXEucWNsYXNzID0gQ19JTjsKLQkJcS5xdHlwZSA9IFRfQUFBQTsKLQkJcS5hbnN3ZXIgPSBidWYtPmJ1ZjsKLQkJcS5hbnNsZW4gPSBzaXplb2YoYnVmLT5idWYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlmcmVlKGJ1Zik7Ci0JCWZyZWUoYnVmMik7Ci0JCXJldHVybiBOU19VTkFWQUlMOwotCX0KLQotCXJlcyA9IF9fcmVzX2dldF9zdGF0ZSgpOwotCWlmIChyZXMgPT0gTlVMTCkgewotCQlmcmVlKGJ1Zik7Ci0JCWZyZWUoYnVmMik7Ci0JCXJldHVybiBOU19OT1RGT1VORDsKLQl9Ci0KLQkvKiB0aGlzIGp1c3Qgc2V0cyBvdXIgaWZhY2UgdmFsIGluIHRoZSB0aHJlYWQgcHJpdmF0ZSBkYXRhIHNvIHdlIGRvbid0IGhhdmUgdG8KLQkgKiBtb2RpZnkgdGhlIGFwaSdzIGFsbCB0aGUgd2F5IGRvd24gdG8gcmVzX3NlbmQuYydzIHJlc19uc2VuZC4gIFdlIGNvdWxkCi0JICogZnVsbHkgcG9wdWxhdGUgdGhlIHRocmVhZCBwcml2YXRlIGRhdGEgaGVyZSwgYnV0IGlmIHdlIGdldCBkb3duIHRoZXJlCi0JICogYW5kIGhhdmUgYSBjYWNoZSBoaXQgdGhhdCB3b3VsZCBiZSB3YXN0ZWQsIHNvIHdlIGRvIHRoZSByZXN0IHRoZXJlIG9uIG1pc3MKLQkgKi8KLQlyZXNfc2V0aWZhY2UocmVzLCBpZmFjZSk7Ci0JcmVzX3NldG1hcmsocmVzLCBtYXJrKTsKLQlpZiAocmVzX3NlYXJjaE4obmFtZSwgJnEsIHJlcykgPCAwKSB7Ci0JCV9fcmVzX3B1dF9zdGF0ZShyZXMpOwotCQlmcmVlKGJ1Zik7Ci0JCWZyZWUoYnVmMik7Ci0JCXJldHVybiBOU19OT1RGT1VORDsKLQl9Ci0JYWkgPSBnZXRhbnN3ZXIoYnVmLCBxLm4sIHEubmFtZSwgcS5xdHlwZSwgcGFpKTsKLQlpZiAoYWkpIHsKLQkJY3VyLT5haV9uZXh0ID0gYWk7Ci0JCXdoaWxlIChjdXIgJiYgY3VyLT5haV9uZXh0KQotCQkJY3VyID0gY3VyLT5haV9uZXh0OwotCX0KLQlpZiAocS5uZXh0KSB7Ci0JCWFpID0gZ2V0YW5zd2VyKGJ1ZjIsIHEyLm4sIHEyLm5hbWUsIHEyLnF0eXBlLCBwYWkpOwotCQlpZiAoYWkpCi0JCQljdXItPmFpX25leHQgPSBhaTsKLQl9Ci0JZnJlZShidWYpOwotCWZyZWUoYnVmMik7Ci0JaWYgKHNlbnRpbmVsLmFpX25leHQgPT0gTlVMTCkgewotCQlfX3Jlc19wdXRfc3RhdGUocmVzKTsKLQkJc3dpdGNoIChoX2Vycm5vKSB7Ci0JCWNhc2UgSE9TVF9OT1RfRk9VTkQ6Ci0JCQlyZXR1cm4gTlNfTk9URk9VTkQ7Ci0JCWNhc2UgVFJZX0FHQUlOOgotCQkJcmV0dXJuIE5TX1RSWUFHQUlOOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIE5TX1VOQVZBSUw7Ci0JCX0KLQl9Ci0KLQlfcmZjNjcyNF9zb3J0KCZzZW50aW5lbCk7Ci0KLQlfX3Jlc19wdXRfc3RhdGUocmVzKTsKLQotCSooKHN0cnVjdCBhZGRyaW5mbyAqKilydikgPSBzZW50aW5lbC5haV9uZXh0OwotCXJldHVybiBOU19TVUNDRVNTOwotfQotCi1zdGF0aWMgdm9pZAotX3NldGh0ZW50KEZJTEUgKipob3N0ZikKLXsKLQotCWlmICghKmhvc3RmKQotCQkqaG9zdGYgPSBmb3BlbihfUEFUSF9IT1NUUywgInIiICk7Ci0JZWxzZQotCQlyZXdpbmQoKmhvc3RmKTsKLX0KLQotc3RhdGljIHZvaWQKLV9lbmRodGVudChGSUxFICoqaG9zdGYpCi17Ci0KLQlpZiAoKmhvc3RmKSB7Ci0JCSh2b2lkKSBmY2xvc2UoKmhvc3RmKTsKLQkJKmhvc3RmID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYWRkcmluZm8gKgotX2dldGh0ZW50KEZJTEUgKipob3N0ZiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWkpCi17Ci0JY2hhciAqcDsKLQljaGFyICpjcCwgKnRuYW1lLCAqY25hbWU7Ci0Jc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzMCwgKnJlczsKLQlpbnQgZXJyb3I7Ci0JY29uc3QgY2hhciAqYWRkcjsKLQljaGFyIGhvc3RidWZbOCoxMDI0XTsKLQotLy8JZnByaW50ZihzdGRlcnIsICJfZ2V0aHRlbnQoKSBuYW1lID0gJyVzJ1xuIiwgbmFtZSk7Ci0JYXNzZXJ0KG5hbWUgIT0gTlVMTCk7Ci0JYXNzZXJ0KHBhaSAhPSBOVUxMKTsKLQotCWlmICghKmhvc3RmICYmICEoKmhvc3RmID0gZm9wZW4oX1BBVEhfSE9TVFMsICJyIiApKSkKLQkJcmV0dXJuIChOVUxMKTsKLSBhZ2FpbjoKLQlpZiAoIShwID0gZmdldHMoaG9zdGJ1Ziwgc2l6ZW9mIGhvc3RidWYsICpob3N0ZikpKQotCQlyZXR1cm4gKE5VTEwpOwotCWlmICgqcCA9PSAnIycpCi0JCWdvdG8gYWdhaW47Ci0JaWYgKCEoY3AgPSBzdHJwYnJrKHAsICIjXG4iKSkpCi0JCWdvdG8gYWdhaW47Ci0JKmNwID0gJ1wwJzsKLQlpZiAoIShjcCA9IHN0cnBicmsocCwgIiBcdCIpKSkKLQkJZ290byBhZ2FpbjsKLQkqY3ArKyA9ICdcMCc7Ci0JYWRkciA9IHA7Ci0JLyogaWYgdGhpcyBpcyBub3Qgc29tZXRoaW5nIHdlJ3JlIGxvb2tpbmcgZm9yLCBza2lwIGl0LiAqLwotCWNuYW1lID0gTlVMTDsKLQl3aGlsZSAoY3AgJiYgKmNwKSB7Ci0JCWlmICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSB7Ci0JCQljcCsrOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFjbmFtZSkKLQkJCWNuYW1lID0gY3A7Ci0JCXRuYW1lID0gY3A7Ci0JCWlmICgoY3AgPSBzdHJwYnJrKGNwLCAiIFx0IikpICE9IE5VTEwpCi0JCQkqY3ArKyA9ICdcMCc7Ci0vLwkJZnByaW50ZihzdGRlcnIsICJcdHRuYW1lID0gJyVzJyIsIHRuYW1lKTsKLQkJaWYgKHN0cmNhc2VjbXAobmFtZSwgdG5hbWUpID09IDApCi0JCQlnb3RvIGZvdW5kOwotCX0KLQlnb3RvIGFnYWluOwotCi1mb3VuZDoKLQloaW50cyA9ICpwYWk7Ci0JaGludHMuYWlfZmxhZ3MgPSBBSV9OVU1FUklDSE9TVDsKLQllcnJvciA9IGdldGFkZHJpbmZvKGFkZHIsIE5VTEwsICZoaW50cywgJnJlczApOwotCWlmIChlcnJvcikKLQkJZ290byBhZ2FpbjsKLQlmb3IgKHJlcyA9IHJlczA7IHJlczsgcmVzID0gcmVzLT5haV9uZXh0KSB7Ci0JCS8qIGNvdmVyIGl0IHVwICovCi0JCXJlcy0+YWlfZmxhZ3MgPSBwYWktPmFpX2ZsYWdzOwotCi0JCWlmIChwYWktPmFpX2ZsYWdzICYgQUlfQ0FOT05OQU1FKSB7Ci0JCQlpZiAoZ2V0X2Nhbm9ubmFtZShwYWksIHJlcywgY25hbWUpICE9IDApIHsKLQkJCQlmcmVlYWRkcmluZm8ocmVzMCk7Ci0JCQkJZ290byBhZ2FpbjsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gcmVzMDsKLX0KLQotLypBUkdTVVNFRCovCi1zdGF0aWMgaW50Ci1fZmlsZXNfZ2V0YWRkcmluZm8odm9pZCAqcnYsIHZvaWQgKmNiX2RhdGEsIHZhX2xpc3QgYXApCi17Ci0JY29uc3QgY2hhciAqbmFtZTsKLQljb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaTsKLQlzdHJ1Y3QgYWRkcmluZm8gc2VudGluZWwsICpjdXI7Ci0Jc3RydWN0IGFkZHJpbmZvICpwOwotCUZJTEUgKmhvc3RmID0gTlVMTDsKLQotCW5hbWUgPSB2YV9hcmcoYXAsIGNoYXIgKik7Ci0JcGFpID0gdmFfYXJnKGFwLCBzdHJ1Y3QgYWRkcmluZm8gKik7Ci0KLS8vCWZwcmludGYoc3RkZXJyLCAiX2ZpbGVzX2dldGFkZHJpbmZvKCkgbmFtZSA9ICclcydcbiIsIG5hbWUpOwotCW1lbXNldCgmc2VudGluZWwsIDAsIHNpemVvZihzZW50aW5lbCkpOwotCWN1ciA9ICZzZW50aW5lbDsKLQotCV9zZXRodGVudCgmaG9zdGYpOwotCXdoaWxlICgocCA9IF9nZXRodGVudCgmaG9zdGYsIG5hbWUsIHBhaSkpICE9IE5VTEwpIHsKLQkJY3VyLT5haV9uZXh0ID0gcDsKLQkJd2hpbGUgKGN1ciAmJiBjdXItPmFpX25leHQpCi0JCQljdXIgPSBjdXItPmFpX25leHQ7Ci0JfQotCV9lbmRodGVudCgmaG9zdGYpOwotCi0JKigoc3RydWN0IGFkZHJpbmZvICoqKXJ2KSA9IHNlbnRpbmVsLmFpX25leHQ7Ci0JaWYgKHNlbnRpbmVsLmFpX25leHQgPT0gTlVMTCkKLQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCXJldHVybiBOU19TVUNDRVNTOwotfQotCi0vKiByZXNvbHZlciBsb2dpYyAqLwotCi0vKgotICogRm9ybXVsYXRlIGEgbm9ybWFsIHF1ZXJ5LCBzZW5kLCBhbmQgYXdhaXQgYW5zd2VyLgotICogUmV0dXJuZWQgYW5zd2VyIGlzIHBsYWNlZCBpbiBzdXBwbGllZCBidWZmZXIgImFuc3dlciIuCi0gKiBQZXJmb3JtIHByZWxpbWluYXJ5IGNoZWNrIG9mIGFuc3dlciwgcmV0dXJuaW5nIHN1Y2Nlc3Mgb25seQotICogaWYgbm8gZXJyb3IgaXMgaW5kaWNhdGVkIGFuZCB0aGUgYW5zd2VyIGNvdW50IGlzIG5vbnplcm8uCi0gKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHJlc3BvbnNlIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgotICogRXJyb3IgbnVtYmVyIGlzIGxlZnQgaW4gaF9lcnJuby4KLSAqCi0gKiBDYWxsZXIgbXVzdCBwYXJzZSBhbnN3ZXIgYW5kIGRldGVybWluZSB3aGV0aGVyIGl0IGFuc3dlcnMgdGhlIHF1ZXN0aW9uLgotICovCi1zdGF0aWMgaW50Ci1yZXNfcXVlcnlOKGNvbnN0IGNoYXIgKm5hbWUsIC8qIGRvbWFpbiBuYW1lICovIHN0cnVjdCByZXNfdGFyZ2V0ICp0YXJnZXQsCi0gICAgcmVzX3N0YXRlIHJlcykKLXsKLQl1X2NoYXIgYnVmW01BWFBBQ0tFVF07Ci0JSEVBREVSICpocDsKLQlpbnQgbjsKLQlzdHJ1Y3QgcmVzX3RhcmdldCAqdDsKLQlpbnQgcmNvZGU7Ci0JaW50IGFuY291bnQ7Ci0KLQlhc3NlcnQobmFtZSAhPSBOVUxMKTsKLQkvKiBYWFg6IHRhcmdldCBtYXkgYmUgTlVMTD8/PyAqLwotCi0JcmNvZGUgPSBOT0VSUk9SOwotCWFuY291bnQgPSAwOwotCi0JZm9yICh0ID0gdGFyZ2V0OyB0OyB0ID0gdC0+bmV4dCkgewotCQlpbnQgY2xhc3MsIHR5cGU7Ci0JCXVfY2hhciAqYW5zd2VyOwotCQlpbnQgYW5zbGVuOwotCi0JCWhwID0gKEhFQURFUiAqKSh2b2lkICopdC0+YW5zd2VyOwotCQlocC0+cmNvZGUgPSBOT0VSUk9SOwkvKiBkZWZhdWx0ICovCi0KLQkJLyogbWFrZSBpdCBlYXNpZXIuLi4gKi8KLQkJY2xhc3MgPSB0LT5xY2xhc3M7Ci0JCXR5cGUgPSB0LT5xdHlwZTsKLQkJYW5zd2VyID0gdC0+YW5zd2VyOwotCQlhbnNsZW4gPSB0LT5hbnNsZW47Ci0jaWZkZWYgREVCVUcKLQkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUJVRykKLQkJCXByaW50ZigiOzsgcmVzX25xdWVyeSglcywgJWQsICVkKVxuIiwgbmFtZSwgY2xhc3MsIHR5cGUpOwotI2VuZGlmCi0KLQkJbiA9IHJlc19ubWtxdWVyeShyZXMsIFFVRVJZLCBuYW1lLCBjbGFzcywgdHlwZSwgTlVMTCwgMCwgTlVMTCwKLQkJICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotI2lmZGVmIFJFU19VU0VfRUROUzAKLQkJaWYgKG4gPiAwICYmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0VETlMwKSAhPSAwKQotCQkJbiA9IHJlc19ub3B0KHJlcywgbiwgYnVmLCBzaXplb2YoYnVmKSwgYW5zbGVuKTsKLSNlbmRpZgotCQlpZiAobiA8PSAwKSB7Ci0jaWZkZWYgREVCVUcKLQkJCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfREVCVUcpCi0JCQkJcHJpbnRmKCI7OyByZXNfbnF1ZXJ5OiBta3F1ZXJ5IGZhaWxlZFxuIik7Ci0jZW5kaWYKLQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKLQkJCXJldHVybiBuOwotCQl9Ci0JCW4gPSByZXNfbnNlbmQocmVzLCBidWYsIG4sIGFuc3dlciwgYW5zbGVuKTsKLSNpZiAwCi0JCWlmIChuIDwgMCkgewotI2lmZGVmIERFQlVHCi0JCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX0RFQlVHKQotCQkJCXByaW50ZigiOzsgcmVzX3F1ZXJ5OiBzZW5kIGVycm9yXG4iKTsKLSNlbmRpZgotCQkJaF9lcnJubyA9IFRSWV9BR0FJTjsKLQkJCXJldHVybiBuOwotCQl9Ci0jZW5kaWYKLQotCQlpZiAobiA8IDAgfHwgaHAtPnJjb2RlICE9IE5PRVJST1IgfHwgbnRvaHMoaHAtPmFuY291bnQpID09IDApIHsKLQkJCXJjb2RlID0gaHAtPnJjb2RlOwkvKiByZWNvcmQgbW9zdCByZWNlbnQgZXJyb3IgKi8KLSNpZmRlZiBERUJVRwotCQkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUJVRykKLQkJCQlwcmludGYoIjs7IHJjb2RlID0gJXUsIGFuY291bnQ9JXVcbiIsIGhwLT5yY29kZSwKLQkJCQkgICAgbnRvaHMoaHAtPmFuY291bnQpKTsKLSNlbmRpZgotCQkJY29udGludWU7Ci0JCX0KLQotCQlhbmNvdW50ICs9IG50b2hzKGhwLT5hbmNvdW50KTsKLQotCQl0LT5uID0gbjsKLQl9Ci0KLQlpZiAoYW5jb3VudCA9PSAwKSB7Ci0JCXN3aXRjaCAocmNvZGUpIHsKLQkJY2FzZSBOWERPTUFJTjoKLQkJCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKLQkJCWJyZWFrOwotCQljYXNlIFNFUlZGQUlMOgotCQkJaF9lcnJubyA9IFRSWV9BR0FJTjsKLQkJCWJyZWFrOwotCQljYXNlIE5PRVJST1I6Ci0JCQloX2Vycm5vID0gTk9fREFUQTsKLQkJCWJyZWFrOwotCQljYXNlIEZPUk1FUlI6Ci0JCWNhc2UgTk9USU1QOgotCQljYXNlIFJFRlVTRUQ6Ci0JCWRlZmF1bHQ6Ci0JCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7Ci0JCQlicmVhazsKLQkJfQotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiBhbmNvdW50OwotfQotCi0vKgotICogRm9ybXVsYXRlIGEgbm9ybWFsIHF1ZXJ5LCBzZW5kLCBhbmQgcmV0cmlldmUgYW5zd2VyIGluIHN1cHBsaWVkIGJ1ZmZlci4KLSAqIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgcmVzcG9uc2Ugb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCi0gKiBJZiBlbmFibGVkLCBpbXBsZW1lbnQgc2VhcmNoIHJ1bGVzIHVudGlsIGFuc3dlciBvciB1bnJlY292ZXJhYmxlIGZhaWx1cmUKLSAqIGlzIGRldGVjdGVkLiAgRXJyb3IgY29kZSwgaWYgYW55LCBpcyBsZWZ0IGluIGhfZXJybm8uCi0gKi8KLXN0YXRpYyBpbnQKLXJlc19zZWFyY2hOKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCByZXNfdGFyZ2V0ICp0YXJnZXQsIHJlc19zdGF0ZSByZXMpCi17Ci0JY29uc3QgY2hhciAqY3AsICogY29uc3QgKmRvbWFpbjsKLQlIRUFERVIgKmhwOwotCXVfaW50IGRvdHM7Ci0JaW50IHRyYWlsaW5nX2RvdCwgcmV0LCBzYXZlZF9oZXJybm87Ci0JaW50IGdvdF9ub2RhdGEgPSAwLCBnb3Rfc2VydmZhaWwgPSAwLCB0cmllZF9hc19pcyA9IDA7Ci0KLQlhc3NlcnQobmFtZSAhPSBOVUxMKTsKLQlhc3NlcnQodGFyZ2V0ICE9IE5VTEwpOwotCi0JaHAgPSAoSEVBREVSICopKHZvaWQgKil0YXJnZXQtPmFuc3dlcjsJLypYWFgqLwotCi0JZXJybm8gPSAwOwotCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsJLyogZGVmYXVsdCwgaWYgd2UgbmV2ZXIgcXVlcnkgKi8KLQlkb3RzID0gMDsKLQlmb3IgKGNwID0gbmFtZTsgKmNwOyBjcCsrKQotCQlkb3RzICs9ICgqY3AgPT0gJy4nKTsKLQl0cmFpbGluZ19kb3QgPSAwOwotCWlmIChjcCA+IG5hbWUgJiYgKi0tY3AgPT0gJy4nKQotCQl0cmFpbGluZ19kb3QrKzsKLQotCi0gICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJyZXNfc2VhcmNoTigpIG5hbWUgPSAnJXMnXG4iLCBuYW1lKTsKLQotCS8qCi0JICogaWYgdGhlcmUgYXJlbid0IGFueSBkb3RzLCBpdCBjb3VsZCBiZSBhIHVzZXItbGV2ZWwgYWxpYXMKLQkgKi8KLQlpZiAoIWRvdHMgJiYgKGNwID0gX19ob3N0YWxpYXMobmFtZSkpICE9IE5VTEwpIHsKLQkJcmV0ID0gcmVzX3F1ZXJ5TihjcCwgdGFyZ2V0LCByZXMpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qCi0JICogSWYgdGhlcmUgYXJlIGRvdHMgaW4gdGhlIG5hbWUgYWxyZWFkeSwgbGV0J3MganVzdCBnaXZlIGl0IGEgdHJ5Ci0JICogJ2FzIGlzJy4gIFRoZSB0aHJlc2hvbGQgY2FuIGJlIHNldCB3aXRoIHRoZSAibmRvdHMiIG9wdGlvbi4KLQkgKi8KLQlzYXZlZF9oZXJybm8gPSAtMTsKLQlpZiAoZG90cyA+PSByZXMtPm5kb3RzKSB7Ci0JCXJldCA9IHJlc19xdWVyeWRvbWFpbk4obmFtZSwgTlVMTCwgdGFyZ2V0LCByZXMpOwotCQlpZiAocmV0ID4gMCkKLQkJCXJldHVybiAocmV0KTsKLQkJc2F2ZWRfaGVycm5vID0gaF9lcnJubzsKLQkJdHJpZWRfYXNfaXMrKzsKLQl9Ci0KLQkvKgotCSAqIFdlIGRvIGF0IGxlYXN0IG9uZSBsZXZlbCBvZiBzZWFyY2ggaWYKLQkgKgktIHRoZXJlIGlzIG5vIGRvdCBhbmQgUkVTX0RFRk5BTUUgaXMgc2V0LCBvcgotCSAqCS0gdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGRvdCwgdGhlcmUgaXMgbm8gdHJhaWxpbmcgZG90LAotCSAqCSAgYW5kIFJFU19ETlNSQ0ggaXMgc2V0LgotCSAqLwotCWlmICgoIWRvdHMgJiYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUZOQU1FUykpIHx8Ci0JICAgIChkb3RzICYmICF0cmFpbGluZ19kb3QgJiYgKHJlcy0+b3B0aW9ucyAmIFJFU19ETlNSQ0gpKSkgewotCQlpbnQgZG9uZSA9IDA7Ci0KLQkJLyogVW5mb3J0dW5hdGVseSB3ZSBuZWVkIHRvIHNldCBzdHVmZiB1cCBiZWZvcmUKLQkJICogdGhlIGRvbWFpbiBzdHVmZiBpcyB0cmllZC4gIFdpbGwgaGF2ZSBhIGJldHRlcgotCQkgKiBmaXggYWZ0ZXIgdGhyZWFkIHBvb2xzIGFyZSB1c2VkLgotCQkgKi8KLQkJX3Jlc29sdl9wb3B1bGF0ZV9yZXNfZm9yX2lmYWNlKHJlcyk7Ci0KLQkJZm9yIChkb21haW4gPSAoY29uc3QgY2hhciAqIGNvbnN0ICopcmVzLT5kbnNyY2g7Ci0JCSAgICpkb21haW4gJiYgIWRvbmU7Ci0JCSAgIGRvbWFpbisrKSB7Ci0KLQkJCXJldCA9IHJlc19xdWVyeWRvbWFpbk4obmFtZSwgKmRvbWFpbiwgdGFyZ2V0LCByZXMpOwotCQkJaWYgKHJldCA+IDApCi0JCQkJcmV0dXJuIHJldDsKLQotCQkJLyoKLQkJCSAqIElmIG5vIHNlcnZlciBwcmVzZW50LCBnaXZlIHVwLgotCQkJICogSWYgbmFtZSBpc24ndCBmb3VuZCBpbiB0aGlzIGRvbWFpbiwKLQkJCSAqIGtlZXAgdHJ5aW5nIGhpZ2hlciBkb21haW5zIGluIHRoZSBzZWFyY2ggbGlzdAotCQkJICogKGlmIHRoYXQncyBlbmFibGVkKS4KLQkJCSAqIE9uIGEgTk9fREFUQSBlcnJvciwga2VlcCB0cnlpbmcsIG90aGVyd2lzZQotCQkJICogYSB3aWxkY2FyZCBlbnRyeSBvZiBhbm90aGVyIHR5cGUgY291bGQga2VlcCB1cwotCQkJICogZnJvbSBmaW5kaW5nIHRoaXMgZW50cnkgaGlnaGVyIGluIHRoZSBkb21haW4uCi0JCQkgKiBJZiB3ZSBnZXQgc29tZSBvdGhlciBlcnJvciAobmVnYXRpdmUgYW5zd2VyIG9yCi0JCQkgKiBzZXJ2ZXIgZmFpbHVyZSksIHRoZW4gc3RvcCBzZWFyY2hpbmcgdXAsCi0JCQkgKiBidXQgdHJ5IHRoZSBpbnB1dCBuYW1lIGJlbG93IGluIGNhc2UgaXQncwotCQkJICogZnVsbHktcXVhbGlmaWVkLgotCQkJICovCi0JCQlpZiAoZXJybm8gPT0gRUNPTk5SRUZVU0VEKSB7Ci0JCQkJaF9lcnJubyA9IFRSWV9BR0FJTjsKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0KLQkJCXN3aXRjaCAoaF9lcnJubykgewotCQkJY2FzZSBOT19EQVRBOgotCQkJCWdvdF9ub2RhdGErKzsKLQkJCQkvKiBGQUxMVEhST1VHSCAqLwotCQkJY2FzZSBIT1NUX05PVF9GT1VORDoKLQkJCQkvKiBrZWVwIHRyeWluZyAqLwotCQkJCWJyZWFrOwotCQkJY2FzZSBUUllfQUdBSU46Ci0JCQkJaWYgKGhwLT5yY29kZSA9PSBTRVJWRkFJTCkgewotCQkJCQkvKiB0cnkgbmV4dCBzZWFyY2ggZWxlbWVudCwgaWYgYW55ICovCi0JCQkJCWdvdF9zZXJ2ZmFpbCsrOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJLyogRkFMTFRIUk9VR0ggKi8KLQkJCWRlZmF1bHQ6Ci0JCQkJLyogYW55dGhpbmcgZWxzZSBpbXBsaWVzIHRoYXQgd2UncmUgZG9uZSAqLwotCQkJCWRvbmUrKzsKLQkJCX0KLQkJCS8qCi0JCQkgKiBpZiB3ZSBnb3QgaGVyZSBmb3Igc29tZSByZWFzb24gb3RoZXIgdGhhbiBETlNSQ0gsCi0JCQkgKiB3ZSBvbmx5IHdhbnRlZCBvbmUgaXRlcmF0aW9uIG9mIHRoZSBsb29wLCBzbyBzdG9wLgotCQkJICovCi0JCQlpZiAoIShyZXMtPm9wdGlvbnMgJiBSRVNfRE5TUkNIKSkKLQkJCSAgICAgICAgZG9uZSsrOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBpZiB3ZSBoYXZlIG5vdCBhbHJlYWR5IHRyaWVkIHRoZSBuYW1lICJhcyBpcyIsIGRvIHRoYXQgbm93LgotCSAqIG5vdGUgdGhhdCB3ZSBkbyB0aGlzIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgZG90cyB3ZXJlIGluIHRoZQotCSAqIG5hbWUgb3Igd2hldGhlciBpdCBlbmRzIHdpdGggYSBkb3QuCi0JICovCi0JaWYgKCF0cmllZF9hc19pcykgewotCQlyZXQgPSByZXNfcXVlcnlkb21haW5OKG5hbWUsIE5VTEwsIHRhcmdldCwgcmVzKTsKLQkJaWYgKHJldCA+IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qCi0JICogaWYgd2UgZ290IGhlcmUsIHdlIGRpZG4ndCBzYXRpc2Z5IHRoZSBzZWFyY2guCi0JICogaWYgd2UgZGlkIGFuIGluaXRpYWwgZnVsbCBxdWVyeSwgcmV0dXJuIHRoYXQgcXVlcnkncyBoX2Vycm5vCi0JICogKG5vdGUgdGhhdCB3ZSB3b3VsZG4ndCBiZSBoZXJlIGlmIHRoYXQgcXVlcnkgaGFkIHN1Y2NlZWRlZCkuCi0JICogZWxzZSBpZiB3ZSBldmVyIGdvdCBhIG5vZGF0YSwgc2VuZCB0aGF0IGJhY2sgYXMgdGhlIHJlYXNvbi4KLQkgKiBlbHNlIHNlbmQgYmFjayBtZWFuaW5nbGVzcyBoX2Vycm5vLCB0aGF0IGJlaW5nIHRoZSBvbmUgZnJvbQotCSAqIHRoZSBsYXN0IEROU1JDSCB3ZSBkaWQuCi0JICovCi0JaWYgKHNhdmVkX2hlcnJubyAhPSAtMSkKLQkJaF9lcnJubyA9IHNhdmVkX2hlcnJubzsKLQllbHNlIGlmIChnb3Rfbm9kYXRhKQotCQloX2Vycm5vID0gTk9fREFUQTsKLQllbHNlIGlmIChnb3Rfc2VydmZhaWwpCi0JCWhfZXJybm8gPSBUUllfQUdBSU47Ci0JcmV0dXJuIC0xOwotfQotCi0vKgotICogUGVyZm9ybSBhIGNhbGwgb24gcmVzX3F1ZXJ5IG9uIHRoZSBjb25jYXRlbmF0aW9uIG9mIG5hbWUgYW5kIGRvbWFpbiwKLSAqIHJlbW92aW5nIGEgdHJhaWxpbmcgZG90IGZyb20gbmFtZSBpZiBkb21haW4gaXMgTlVMTC4KLSAqLwotc3RhdGljIGludAotcmVzX3F1ZXJ5ZG9tYWluTihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkb21haW4sCi0gICAgc3RydWN0IHJlc190YXJnZXQgKnRhcmdldCwgcmVzX3N0YXRlIHJlcykKLXsKLQljaGFyIG5idWZbTUFYRE5BTUVdOwotCWNvbnN0IGNoYXIgKmxvbmduYW1lID0gbmJ1ZjsKLQlzaXplX3QgbiwgZDsKLQotCWFzc2VydChuYW1lICE9IE5VTEwpOwotCS8qIFhYWDogdGFyZ2V0IG1heSBiZSBOVUxMPz8/ICovCi0KLSNpZmRlZiBERUJVRwotCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfREVCVUcpCi0JCXByaW50ZigiOzsgcmVzX3F1ZXJ5ZG9tYWluKCVzLCAlcylcbiIsCi0JCQluYW1lLCBkb21haW4/ZG9tYWluOiI8TmlsPiIpOwotI2VuZGlmCi0JaWYgKGRvbWFpbiA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIENoZWNrIGZvciB0cmFpbGluZyAnLic7Ci0JCSAqIGNvcHkgd2l0aG91dCAnLicgaWYgcHJlc2VudC4KLQkJICovCi0JCW4gPSBzdHJsZW4obmFtZSk7Ci0JCWlmIChuICsgMSA+IHNpemVvZihuYnVmKSkgewotCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWlmIChuID4gMCAmJiBuYW1lWy0tbl0gPT0gJy4nKSB7Ci0JCQlzdHJuY3B5KG5idWYsIG5hbWUsIG4pOwotCQkJbmJ1ZltuXSA9ICdcMCc7Ci0JCX0gZWxzZQotCQkJbG9uZ25hbWUgPSBuYW1lOwotCX0gZWxzZSB7Ci0JCW4gPSBzdHJsZW4obmFtZSk7Ci0JCWQgPSBzdHJsZW4oZG9tYWluKTsKLQkJaWYgKG4gKyAxICsgZCArIDEgPiBzaXplb2YobmJ1ZikpIHsKLQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQlzbnByaW50ZihuYnVmLCBzaXplb2YobmJ1ZiksICIlcy4lcyIsIG5hbWUsIGRvbWFpbik7Ci0JfQotCXJldHVybiByZXNfcXVlcnlOKGxvbmduYW1lLCB0YXJnZXQsIHJlcyk7Ci19CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvZ2V0bmFtZWluZm8uYyBiL2xpYmMvbmV0YnNkL25ldC9nZXRuYW1laW5mby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWQyNjc1Li4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL25ldC9nZXRuYW1laW5mby5jCisrKyAvZGV2L251bGwKQEAgLTEsNDYwICswLDAgQEAKLS8qCSROZXRCU0Q6IGdldG5hbWVpbmZvLmMsdiAxLjUzIDIwMTIvMDkvMjYgMjM6MTM6MDAgY2hyaXN0b3MgRXhwICQJKi8KLS8qCSRLQU1FOiBnZXRuYW1laW5mby5jLHYgMS40NSAyMDAwLzA5LzI1IDIyOjQzOjU2IGl0b2p1biBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDAwIEJlbiBIYXJyaXMuCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVjdC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBJc3N1ZXMgdG8gYmUgZGlzY3Vzc2VkOgotICogLSBUaHJlYWQgc2FmZS1uZXNzIG11c3QgYmUgY2hlY2tlZAotICogLSBSRkMyNTUzIHNheXMgdGhhdCB3ZSBzaG91bGQgcmFpc2UgZXJyb3Igb24gc2hvcnQgYnVmZmVyLiAgWC9PcGVuIHNheXMKLSAqICAgd2UgbmVlZCB0byB0cnVuY2F0ZSB0aGUgcmVzdWx0LiAgV2Ugb2JleSBSRkMyNTUzIChhbmQgWC9PcGVuIHNob3VsZCBiZQotICogICBtb2RpZmllZCkuICBpcG5nd2cgcm91Z2ggY29uc2Vuc3VzIHNlZW1zIHRvIGZvbGxvdyBSRkMyNTUzLgotICogLSBXaGF0IGlzICJsb2NhbCIgaW4gTklfRlFETj8KLSAqIC0gTklfTkFNRVJFUUQgYW5kIE5JX05VTUVSSUNIT1NUIGNvbmZsaWN0IHdpdGggZWFjaCBvdGhlci4KLSAqIC0gKEtBTUUgZXh0ZW5zaW9uKSBhbHdheXMgYXR0YWNoIHRleHR1YWwgc2NvcGVpZCAoZmU4MDo6MSVsbzApLCBpZgotICogICBzaW42X3Njb3BlX2lkIGlzIGZpbGxlZCAtIHN0YW5kYXJkaXphdGlvbiBzdGF0dXM/Ci0gKiAgIFhYWCBicmVha3MgYmFja3dhcmQgY29tcGF0IGZvciBjb2RlIHRoYXQgZXhwZWN0cyBubyBzY29wZWlkLgotICogICBiZXdhcmUgb24gbWVyZ2UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotX19SQ1NJRCgiJE5ldEJTRDogZ2V0bmFtZWluZm8uYyx2IDEuNTMgMjAxMi8wOS8yNiAyMzoxMzowMCBjaHJpc3RvcyBFeHAgJCIpOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxzeXMvdW4uaD4KLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpbmNsdWRlIDxuZXQvaWZfaWVlZTEzOTQuaD4KLSNpbmNsdWRlIDxuZXQvaWZfdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKLSNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPHN5cy9zeXN0ZW1fcHJvcGVydGllcy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jZGVmaW5lIE1JTih4LHkpICgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZkIHsKLQlpbnQJCWFfYWY7Ci0Jc29ja2xlbl90CWFfYWRkcmxlbjsKLQlzb2NrbGVuX3QJYV9zb2NrbGVuOwotCWludAkJYV9vZmY7Ci19IGFmZGwgW10gPSB7Ci0jaWZkZWYgSU5FVDYKLQl7UEZfSU5FVDYsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNiksCi0JCW9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl9pbjYsIHNpbjZfYWRkcil9LAotI2VuZGlmCi0Je1BGX0lORVQsIHNpemVvZihzdHJ1Y3QgaW5fYWRkciksIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pLAotCQlvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfaW4sIHNpbl9hZGRyKX0sCi0JezAsIDAsIDAsIDB9LAotfTsKLQotc3RydWN0IHNvY2tpbmV0IHsKLQl1X2NoYXIJc2lfbGVuOwotCXVfY2hhcglzaV9mYW1pbHk7Ci0JdV9zaG9ydAlzaV9wb3J0OwotfTsKLQotc3RhdGljIGludCBnZXRuYW1laW5mb19pbmV0KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QsIGNoYXIgKiwKLSAgICBzb2NrbGVuX3QsIGNoYXIgKiwgc29ja2xlbl90LCBpbnQsIGNvbnN0IGNoYXIqLCBpbnQpOwotI2lmZGVmIElORVQ2Ci1zdGF0aWMgaW50IGlwNl9wYXJzZW51bWVyaWMoY29uc3Qgc3RydWN0IHNvY2thZGRyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLAotCQkJCSBzb2NrbGVuX3QsIGludCk7Ci1zdGF0aWMgaW50IGlwNl9zYTJzdHIoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqLCBjaGFyICosIHNpemVfdCwgaW50KTsKLSNlbmRpZgotc3RhdGljIGludCBnZXRuYW1laW5mb19sb2NhbChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90LCBjaGFyICosCi0gICAgc29ja2xlbl90LCBjaGFyICosIHNvY2tsZW5fdCwgaW50KTsKLQotLyoKLSAqIFRvcC1sZXZlbCBnZXRuYW1laW5mbygpIGNvZGUuICBMb29rIGF0IHRoZSBhZGRyZXNzIGZhbWlseSwgYW5kIHBpY2sgYW4KLSAqIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHRvIGNhbGwuCi0gKi8KLWludCBnZXRuYW1laW5mbyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqIHNhLCBzb2NrbGVuX3Qgc2FsZW4sIGNoYXIqIGhvc3QsIHNpemVfdCBob3N0bGVuLCBjaGFyKiBzZXJ2LCBzaXplX3Qgc2VydmxlbiwgaW50IGZsYWdzKQotewotCXJldHVybiBhbmRyb2lkX2dldG5hbWVpbmZvZm9yaWZhY2Uoc2EsIHNhbGVuLCBob3N0LCBob3N0bGVuLCBzZXJ2LCBzZXJ2bGVuLCBmbGFncywgTlVMTCwgMCk7Ci19Ci0KLWludCBhbmRyb2lkX2dldG5hbWVpbmZvZm9yaWZhY2UoY29uc3Qgc3RydWN0IHNvY2thZGRyKiBzYSwgc29ja2xlbl90IHNhbGVuLCBjaGFyKiBob3N0LCBzaXplX3QgaG9zdGxlbiwgY2hhciogc2Vydiwgc2l6ZV90IHNlcnZsZW4sIGludCBmbGFncywgY29uc3QgY2hhciogaWZhY2UsIGludCBtYXJrKQotewotCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewotCWNhc2UgQUZfSU5FVDoKLQljYXNlIEFGX0lORVQ2OgotCQlyZXR1cm4gZ2V0bmFtZWluZm9faW5ldChzYSwgc2FsZW4sIGhvc3QsIGhvc3RsZW4sCi0JCQkJc2Vydiwgc2VydmxlbiwgZmxhZ3MsIGlmYWNlLCBtYXJrKTsKLQljYXNlIEFGX0xPQ0FMOgotCQlyZXR1cm4gZ2V0bmFtZWluZm9fbG9jYWwoc2EsIHNhbGVuLCBob3N0LCBob3N0bGVuLAotCQkgICAgc2Vydiwgc2VydmxlbiwgZmxhZ3MpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBFQUlfRkFNSUxZOwotCX0KLX0KLQotLyoKLSAqIGdldG5hbWVpbmZvX2xvY2FsKCk6Ci0gKiBGb3JtYXQgYW4gbG9jYWwgYWRkcmVzcyBpbnRvIGEgcHJpbnRhYmxlIGZvcm1hdC4KLSAqLwotLyogQVJHU1VTRUQgKi8KLXN0YXRpYyBpbnQKLWdldG5hbWVpbmZvX2xvY2FsKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EsIHNvY2tsZW5fdCBzYWxlbiwKLSAgICBjaGFyICpob3N0LCBzb2NrbGVuX3QgaG9zdGxlbiwgY2hhciAqc2Vydiwgc29ja2xlbl90IHNlcnZsZW4sCi0gICAgaW50IGZsYWdzIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQotewotICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl91biAqc3VuID0KLSAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl91biAqKShjb25zdCB2b2lkICopc2E7Ci0KLSAgICAgICBpZiAoc2FsZW4gPCAoc29ja2xlbl90KSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKSkgewotICAgICAgICAgICByZXR1cm4gRUFJX0ZBTUlMWTsKLSAgICAgICB9Ci0KLSAgICAgICBpZiAoc2VydiAhPSBOVUxMICYmIHNlcnZsZW4gPiAwKQotICAgICAgICAgICAgICAgc2VydlswXSA9ICdcMCc7Ci0KLSAgICAgICBpZiAoaG9zdCAmJiBob3N0bGVuID4gMCkKLSAgICAgICAgICAgICAgIHN0cmxjcHkoaG9zdCwgc3VuLT5zdW5fcGF0aCwKLSAgICAgICAgICAgICAgICAgICBNSU4oKHNvY2tsZW5fdCkgc2l6ZW9mKHN1bi0+c3VuX3BhdGgpICsgMSwgaG9zdGxlbikpOwotCi0gICAgICAgcmV0dXJuIDA7Ci19Ci0KLS8qIE9uIHN1Y2Nlc3MgbGVuZ3RoIG9mIHRoZSBob3N0IG5hbWUgaXMgcmV0dXJuZWQuIEEgcmV0dXJuCi0gKiB2YWx1ZSBvZiAwIG1lYW5zIHRoZXJlJ3Mgbm8gaG9zdCBuYW1lIGFzc29jaWF0ZWQgd2l0aAotICogdGhlIGFkZHJlc3MuIE9uIGZhaWx1cmUgLTEgaXMgcmV0dXJuZWQgaW4gd2hpY2ggY2FzZQotICogbm9ybWFsIGV4ZWN1dGlvbiBmbG93IHNoYWxsIGNvbnRpbnVlLiAqLwotc3RhdGljIGludAotYW5kcm9pZF9nZXRob3N0YnlhZGRyX3Byb3h5KGNoYXIqIG5hbWVCdWYsIHNpemVfdCBuYW1lQnVmTGVuLCBjb25zdCB2b2lkICphZGRyLCBzb2NrbGVuX3QgYWRkckxlbiwgaW50IGFkZHJGYW1pbHksIGNvbnN0IGNoYXIqIGlmYWNlLCBpbnQgbWFyaykKLXsKLQlzdHJ1Y3QgaG9zdGVudCAqaG9zdFJlc3VsdCA9Ci0JCQlhbmRyb2lkX2dldGhvc3RieWFkZHJmb3JpZmFjZV9wcm94eShhZGRyLCBhZGRyTGVuLCBhZGRyRmFtaWx5LCBpZmFjZSwgbWFyayk7Ci0KLQlpZiAoaG9zdFJlc3VsdCA9PSBOVUxMKSByZXR1cm4gMDsKLQotCWludCBsZW5ndGhSZXN1bHQgPSBzdHJsZW4oaG9zdFJlc3VsdC0+aF9uYW1lKTsKLQotCWlmIChuYW1lQnVmKSBzdHJuY3B5KG5hbWVCdWYsIGhvc3RSZXN1bHQtPmhfbmFtZSwgbmFtZUJ1Zkxlbik7Ci0JcmV0dXJuIGxlbmd0aFJlc3VsdDsKLX0KLQotLyoKLSAqIGdldG5hbWVpbmZvX2luZXQoKToKLSAqIEZvcm1hdCBhbiBJUHY0IG9yIElQdjYgc29ja2FkZHIgaW50byBhIHByaW50YWJsZSBzdHJpbmcuCi0gKi8KLXN0YXRpYyBpbnQKLWdldG5hbWVpbmZvX2luZXQoY29uc3Qgc3RydWN0IHNvY2thZGRyKiBzYSwgc29ja2xlbl90IHNhbGVuLAotICAgICAgIGNoYXIgKmhvc3QsIHNvY2tsZW5fdCBob3N0bGVuLAotICAgICAgIGNoYXIgKnNlcnYsIHNvY2tsZW5fdCBzZXJ2bGVuLAotICAgICAgIGludCBmbGFncywgY29uc3QgY2hhciogaWZhY2UsIGludCBtYXJrKQotewotCWNvbnN0IHN0cnVjdCBhZmQgKmFmZDsKLQlzdHJ1Y3Qgc2VydmVudCAqc3A7Ci0Jc3RydWN0IGhvc3RlbnQgKmhwOwotCXVfc2hvcnQgcG9ydDsKLQlpbnQgZmFtaWx5LCBpOwotCWNvbnN0IGNoYXIgKmFkZHI7Ci0JdWludDMyX3QgdjRhOwotCWNoYXIgbnVtc2Vydls1MTJdOwotCWNoYXIgbnVtYWRkcls1MTJdOwotCi0JLyogc2EgaXMgY2hlY2tlZCBiZWxvdyAqLwotCS8qIGhvc3QgbWF5IGJlIE5VTEwgKi8KLQkvKiBzZXJ2IG1heSBiZSBOVUxMICovCi0KLQlpZiAoc2EgPT0gTlVMTCkKLQkJcmV0dXJuIEVBSV9GQUlMOwotCi0JZmFtaWx5ID0gc2EtPnNhX2ZhbWlseTsKLQlmb3IgKGkgPSAwOyBhZmRsW2ldLmFfYWY7IGkrKykKLQkJaWYgKGFmZGxbaV0uYV9hZiA9PSBmYW1pbHkpIHsKLQkJCWFmZCA9ICZhZmRsW2ldOwotCQkJZ290byBmb3VuZDsKLQkJfQotCXJldHVybiBFQUlfRkFNSUxZOwotCi0gZm91bmQ6Ci0JLy8gaHR0cDovL2IvMTg4OTI3NTogY2FsbGVycyBzaG91bGQgYmUgYWxsb3dlZCB0byBwcm92aWRlIHRvbyBtdWNoCi0JLy8gc3BhY2UsIGJ1dCBub3QgdG9vIGxpdHRsZS4KLQlpZiAoc2FsZW4gPCBhZmQtPmFfc29ja2xlbikgewotCQlyZXR1cm4gRUFJX0ZBTUlMWTsKLQl9Ci0KLQkvKiBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KLQlwb3J0ID0gKChjb25zdCBzdHJ1Y3Qgc29ja2luZXQgKikoY29uc3Qgdm9pZCAqKXNhKS0+c2lfcG9ydDsKLQlhZGRyID0gKGNvbnN0IGNoYXIgKikoY29uc3Qgdm9pZCAqKXNhICsgYWZkLT5hX29mZjsKLQotCWlmIChzZXJ2ID09IE5VTEwgfHwgc2VydmxlbiA9PSAwKSB7Ci0JCS8qCi0JCSAqIGRvIG5vdGhpbmcgaW4gdGhpcyBjYXNlLgotCQkgKiBpbiBjYXNlIHlvdSBhcmUgd29uZGVyaW5nIGlmICImJiIgaXMgbW9yZSBjb3JyZWN0IHRoYW4KLQkJICogInx8IiBoZXJlOiByZmMyNTUzYmlzLTAzIHNheXMgdGhhdCBzZXJ2ID09IE5VTEwgT1IKLQkJICogc2VydmxlbiA9PSAwIG1lYW5zIHRoYXQgdGhlIGNhbGxlciBkb2VzIG5vdCB3YW50IHRoZSByZXN1bHQuCi0JCSAqLwotCX0gZWxzZSB7Ci0JCWlmIChmbGFncyAmIE5JX05VTUVSSUNTRVJWKQotCQkJc3AgPSBOVUxMOwotCQllbHNlIHsKLQkJCXNwID0gZ2V0c2VydmJ5cG9ydChwb3J0LAotCQkJCShmbGFncyAmIE5JX0RHUkFNKSA/ICJ1ZHAiIDogInRjcCIpOwotCQl9Ci0JCWlmIChzcCkgewotCQkJaWYgKHN0cmxlbihzcC0+c19uYW1lKSArIDEgPiAoc2l6ZV90KXNlcnZsZW4pCi0JCQkJcmV0dXJuIEVBSV9NRU1PUlk7Ci0JCQlzdHJsY3B5KHNlcnYsIHNwLT5zX25hbWUsIHNlcnZsZW4pOwotCQl9IGVsc2UgewotCQkJc25wcmludGYobnVtc2Vydiwgc2l6ZW9mKG51bXNlcnYpLCAiJXUiLCBudG9ocyhwb3J0KSk7Ci0JCQlpZiAoc3RybGVuKG51bXNlcnYpICsgMSA+IChzaXplX3Qpc2VydmxlbikKLQkJCQlyZXR1cm4gRUFJX01FTU9SWTsKLQkJCXN0cmxjcHkoc2VydiwgbnVtc2Vydiwgc2Vydmxlbik7Ci0JCX0KLQl9Ci0KLQlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKLQljYXNlIEFGX0lORVQ6Ci0JCXY0YSA9ICh1aW50MzJfdCkKLQkJICAgIG50b2hsKCgoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopCi0JCSAgICAoY29uc3Qgdm9pZCAqKXNhKS0+c2luX2FkZHIuc19hZGRyKTsKLQkJaWYgKElOX01VTFRJQ0FTVCh2NGEpIHx8IElOX0VYUEVSSU1FTlRBTCh2NGEpKQotCQkJZmxhZ3MgfD0gTklfTlVNRVJJQ0hPU1Q7Ci0JCXY0YSA+Pj0gSU5fQ0xBU1NBX05TSElGVDsKLQkJaWYgKHY0YSA9PSAwKQotCQkJZmxhZ3MgfD0gTklfTlVNRVJJQ0hPU1Q7Ci0JCWJyZWFrOwotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQkgICAgewotCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCQlzaW42ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikoY29uc3Qgdm9pZCAqKXNhOwotCQlzd2l0Y2ggKHNpbjYtPnNpbjZfYWRkci5zNl9hZGRyWzBdKSB7Ci0JCWNhc2UgMHgwMDoKLQkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkKLQkJCQk7Ci0JCQllbHNlIGlmIChJTjZfSVNfQUREUl9MT09QQkFDSygmc2luNi0+c2luNl9hZGRyKSkKLQkJCQk7Ci0JCQllbHNlCi0JCQkJZmxhZ3MgfD0gTklfTlVNRVJJQ0hPU1Q7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKLQkJCX0KLQkJCWVsc2UgaWYgKElONl9JU19BRERSX01VTFRJQ0FTVCgmc2luNi0+c2luNl9hZGRyKSkKLQkJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKLQkJCWJyZWFrOwotCQl9Ci0JICAgIH0KLQkJYnJlYWs7Ci0jZW5kaWYKLQl9Ci0JaWYgKGhvc3QgPT0gTlVMTCB8fCBob3N0bGVuID09IDApIHsKLQkJLyoKLQkJICogZG8gbm90aGluZyBpbiB0aGlzIGNhc2UuCi0JCSAqIGluIGNhc2UgeW91IGFyZSB3b25kZXJpbmcgaWYgIiYmIiBpcyBtb3JlIGNvcnJlY3QgdGhhbgotCQkgKiAifHwiIGhlcmU6IHJmYzI1NTNiaXMtMDMgc2F5cyB0aGF0IGhvc3QgPT0gTlVMTCBvcgotCQkgKiBob3N0bGVuID09IDAgbWVhbnMgdGhhdCB0aGUgY2FsbGVyIGRvZXMgbm90IHdhbnQgdGhlIHJlc3VsdC4KLQkJICovCi0JfSBlbHNlIGlmIChmbGFncyAmIE5JX05VTUVSSUNIT1NUKSB7Ci0JCXNpemVfdCBudW1hZGRybGVuOwotCi0JCS8qIE5VTUVSSUNIT1NUIGFuZCBOQU1FUkVRRCBjb25mbGljdHMgd2l0aCBlYWNoIG90aGVyICovCi0JCWlmIChmbGFncyAmIE5JX05BTUVSRVFEKQotCQkJcmV0dXJuIEVBSV9OT05BTUU7Ci0KLQkJc3dpdGNoKGFmZC0+YV9hZikgewotI2lmZGVmIElORVQ2Ci0JCWNhc2UgQUZfSU5FVDY6Ci0JCXsKLQkJCWludCBlcnJvcjsKLQotCQkJaWYgKChlcnJvciA9IGlwNl9wYXJzZW51bWVyaWMoc2EsIGFkZHIsIGhvc3QsCi0JCQkJCQkgICAgICBob3N0bGVuLCBmbGFncykpICE9IDApCi0JCQkJcmV0dXJuKGVycm9yKTsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCWlmIChpbmV0X250b3AoYWZkLT5hX2FmLCBhZGRyLCBudW1hZGRyLCBzaXplb2YobnVtYWRkcikpCi0JCQkgICAgPT0gTlVMTCkKLQkJCQlyZXR1cm4gRUFJX1NZU1RFTTsKLQkJCW51bWFkZHJsZW4gPSBzdHJsZW4obnVtYWRkcik7Ci0JCQlpZiAobnVtYWRkcmxlbiArIDEgPiAoc2l6ZV90KWhvc3RsZW4pIC8qIGRvbid0IGZvcmdldCB0ZXJtaW5hdG9yICovCi0JCQkJcmV0dXJuIEVBSV9NRU1PUlk7Ci0JCQlzdHJsY3B5KGhvc3QsIG51bWFkZHIsIGhvc3RsZW4pOwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgaG9zdGVudCBhbmRyb2lkX3Byb3h5X2hvc3RlbnQ7Ci0JCWNoYXIgYW5kcm9pZF9wcm94eV9idWZbTUFYRE5BTUVdOwotCi0JCWludCBob3N0bmFtZWxlbiA9IGFuZHJvaWRfZ2V0aG9zdGJ5YWRkcl9wcm94eShhbmRyb2lkX3Byb3h5X2J1ZiwKLQkJCQlNQVhETkFNRSwgYWRkciwgYWZkLT5hX2FkZHJsZW4sIGFmZC0+YV9hZiwgaWZhY2UsIG1hcmspOwotCQlpZiAoaG9zdG5hbWVsZW4gPiAwKSB7Ci0JCQlocCA9ICZhbmRyb2lkX3Byb3h5X2hvc3RlbnQ7Ci0JCQlocC0+aF9uYW1lID0gYW5kcm9pZF9wcm94eV9idWY7Ci0JCX0gZWxzZSBpZiAoIWhvc3RuYW1lbGVuKSB7Ci0JCQlocCA9IE5VTEw7Ci0JCX0gZWxzZSB7Ci0JCQlocCA9IGFuZHJvaWRfZ2V0aG9zdGJ5YWRkcmZvcmlmYWNlKGFkZHIsIGFmZC0+YV9hZGRybGVuLCBhZmQtPmFfYWYsCi0JCQkJCWlmYWNlLCBtYXJrKTsKLQkJfQotCi0JCWlmIChocCkgewotI2lmIDAKLQkJCS8qCi0JCQkgKiBjb21tZW50ZWQgb3V0LCBzaW5jZSAiZm9yIGxvY2FsIGhvc3QiIGlzIG5vdAotCQkJICogaW1wbGVtZW50ZWQgaGVyZSAtIHNlZSBSRkMyNTUzIHAzMAotCQkJICovCi0JCQlpZiAoZmxhZ3MgJiBOSV9OT0ZRRE4pIHsKLQkJCQljaGFyICpwOwotCQkJCXAgPSBzdHJjaHIoaHAtPmhfbmFtZSwgJy4nKTsKLQkJCQlpZiAocCkKLQkJCQkJKnAgPSAnXDAnOwotCQkJfQotI2VuZGlmCi0JCQlpZiAoc3RybGVuKGhwLT5oX25hbWUpICsgMSA+IChzaXplX3QpaG9zdGxlbikgewotCQkJCXJldHVybiBFQUlfTUVNT1JZOwotCQkJfQotCQkJc3RybGNweShob3N0LCBocC0+aF9uYW1lLCBob3N0bGVuKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChmbGFncyAmIE5JX05BTUVSRVFEKQotCQkJCXJldHVybiBFQUlfTk9OQU1FOwotCQkJc3dpdGNoKGFmZC0+YV9hZikgewotI2lmZGVmIElORVQ2Ci0JCQljYXNlIEFGX0lORVQ2OgotCQkJewotCQkJCWludCBlcnJvcjsKLQotCQkJCWlmICgoZXJyb3IgPSBpcDZfcGFyc2VudW1lcmljKHNhLCBhZGRyLCBob3N0LAotCQkJCQkJCSAgICAgIGhvc3RsZW4sCi0JCQkJCQkJICAgICAgZmxhZ3MpKSAhPSAwKQotCQkJCQlyZXR1cm4oZXJyb3IpOwotCQkJCWJyZWFrOwotCQkJfQotI2VuZGlmCi0JCQlkZWZhdWx0OgotCQkJCWlmIChpbmV0X250b3AoYWZkLT5hX2FmLCBhZGRyLCBob3N0LAotCQkJCSAgICBob3N0bGVuKSA9PSBOVUxMKQotCQkJCQlyZXR1cm4gRUFJX1NZU1RFTTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4oMCk7Ci19Ci0KLSNpZmRlZiBJTkVUNgotc3RhdGljIGludAotaXA2X3BhcnNlbnVtZXJpYyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBjb25zdCBjaGFyICphZGRyLCBjaGFyICpob3N0LAotICAgICAgIHNvY2tsZW5fdCBob3N0bGVuLCBpbnQgZmxhZ3MpCi17Ci0Jc2l6ZV90IG51bWFkZHJsZW47Ci0JY2hhciBudW1hZGRyWzUxMl07Ci0KLQlhc3NlcnQoc2EgIT0gTlVMTCk7Ci0JYXNzZXJ0KGFkZHIgIT0gTlVMTCk7Ci0JYXNzZXJ0KGhvc3QgIT0gTlVMTCk7Ci0KLQlpZiAoaW5ldF9udG9wKEFGX0lORVQ2LCBhZGRyLCBudW1hZGRyLCBzaXplb2YobnVtYWRkcikpID09IE5VTEwpCi0JCXJldHVybiBFQUlfU1lTVEVNOwotCi0JbnVtYWRkcmxlbiA9IHN0cmxlbihudW1hZGRyKTsKLQlpZiAobnVtYWRkcmxlbiArIDEgPiAoc2l6ZV90KWhvc3RsZW4pIC8qIGRvbid0IGZvcmdldCB0ZXJtaW5hdG9yICovCi0JCXJldHVybiBFQUlfT1ZFUkZMT1c7Ci0Jc3RybGNweShob3N0LCBudW1hZGRyLCBob3N0bGVuKTsKLQotCWlmICgoKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikoY29uc3Qgdm9pZCAqKXNhKS0+c2luNl9zY29wZV9pZCkgewotCQljaGFyIHpvbmVidWZbTUFYSE9TVE5BTUVMRU5dOwotCQlpbnQgem9uZWxlbjsKLQotCQl6b25lbGVuID0gaXA2X3NhMnN0cigKLQkJICAgIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKGNvbnN0IHZvaWQgKilzYSwKLQkJICAgIHpvbmVidWYsIHNpemVvZih6b25lYnVmKSwgZmxhZ3MpOwotCQlpZiAoem9uZWxlbiA8IDApCi0JCQlyZXR1cm4gRUFJX09WRVJGTE9XOwotCQlpZiAoKHNpemVfdCkgem9uZWxlbiArIDEgKyBudW1hZGRybGVuICsgMSA+IChzaXplX3QpaG9zdGxlbikKLQkJCXJldHVybiBFQUlfT1ZFUkZMT1c7Ci0JCS8qIGNvbnN0cnVjdCA8bnVtZXJpYy1hZGRyPjxkZWxpbT48em9uZWlkPiAqLwotCQltZW1jcHkoaG9zdCArIG51bWFkZHJsZW4gKyAxLCB6b25lYnVmLAotCQkgICAgKHNpemVfdCl6b25lbGVuKTsKLQkJaG9zdFtudW1hZGRybGVuXSA9IFNDT1BFX0RFTElNSVRFUjsKLQkJaG9zdFtudW1hZGRybGVuICsgMSArIHpvbmVsZW5dID0gJ1wwJzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogQVJHU1VTRUQgKi8KLXN0YXRpYyBpbnQKLWlwNl9zYTJzdHIoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2E2LCBjaGFyICpidWYsIHNpemVfdCBidWZzaXosIGludCBmbGFncykKLXsKLQl1bnNpZ25lZCBpbnQgaWZpbmRleDsKLQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmE2OwotCWludCBuOwotCi0JYXNzZXJ0KHNhNiAhPSBOVUxMKTsKLQlhc3NlcnQoYnVmICE9IE5VTEwpOwotCi0JaWZpbmRleCA9ICh1bnNpZ25lZCBpbnQpc2E2LT5zaW42X3Njb3BlX2lkOwotCWE2ID0gJnNhNi0+c2luNl9hZGRyOwotCi0jaWZkZWYgTklfTlVNRVJJQ1NDT1BFCi0JaWYgKChmbGFncyAmIE5JX05VTUVSSUNTQ09QRSkgIT0gMCkgewotCQluID0gc25wcmludGYoYnVmLCBidWZzaXosICIldSIsIHNhNi0+c2luNl9zY29wZV9pZCk7Ci0JCWlmIChuIDwgMCB8fCBuID49IGJ1ZnNpeikKLQkJCXJldHVybiAtMTsKLQkJZWxzZQotCQkJcmV0dXJuIG47Ci0JfQotI2VuZGlmCi0KLQkvKiBpZl9pbmRleHRvbmFtZSgpIGRvZXMgbm90IHRha2UgYnVmZmVyIHNpemUuICBub3QgYSBnb29kIGFwaS4uLiAqLwotCWlmICgoSU42X0lTX0FERFJfTElOS0xPQ0FMKGE2KSB8fCBJTjZfSVNfQUREUl9NQ19MSU5LTE9DQUwoYTYpKSAmJgotCSAgICBidWZzaXogPj0gSUZfTkFNRVNJWkUpIHsKLQkJY2hhciAqcCA9IGlmX2luZGV4dG9uYW1lKGlmaW5kZXgsIGJ1Zik7Ci0JCWlmIChwKSB7Ci0JCQlyZXR1cm4oc3RybGVuKHApKTsKLQkJfQotCX0KLQotCS8qIGxhc3QgcmVzb3J0ICovCi0JbiA9IHNucHJpbnRmKGJ1ZiwgYnVmc2l6LCAiJXUiLCBzYTYtPnNpbjZfc2NvcGVfaWQpOwotCWlmIChuIDwgMCB8fCAoc2l6ZV90KSBuID49IGJ1ZnNpeikKLQkJcmV0dXJuIC0xOwotCWVsc2UKLQkJcmV0dXJuIG47Ci19Ci0jZW5kaWYgLyogSU5FVDYgKi8KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2YnluYW1lLmMgYi9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmJ5bmFtZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWE1MjhlLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2YnluYW1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpbmNsdWRlICJzZXJ2ZW50LmgiCi0KLXN0cnVjdCBzZXJ2ZW50ICoKLWdldHNlcnZieW5hbWUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcHJvdG8pCi17Ci0gICAgcmVzX3N0YXRpYyAgICAgICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKLSAgICBzdHJ1Y3Qgc2VydmVudCogIHM7Ci0KLSAgICBpZiAocnMgPT0gTlVMTCB8fCBwcm90byA9PSBOVUxMIHx8IG5hbWUgPT0gTlVMTCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcnMtPnNlcnZlbnRfcHRyID0gTlVMTDsKLSAgICB3aGlsZSAoMSkgewotICAgICAgICBzdHJ1Y3Qgc2VydmVudCogIHMgPSBnZXRzZXJ2ZW50X3IocnMpOwotICAgICAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICggIXN0cmNtcCggcy0+c19uYW1lLCBuYW1lICkgJiYgIXN0cmNtcCggcy0+c19wcm90bywgcHJvdG8gKSApCi0gICAgICAgICAgICByZXR1cm4gczsKLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2Ynlwb3J0LmMgYi9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmJ5cG9ydC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWQ3ZTIzLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2Ynlwb3J0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpbmNsdWRlICJzZXJ2ZW50LmgiCi0KLXN0cnVjdCBzZXJ2ZW50ICoKLWdldHNlcnZieXBvcnQoaW50IHBvcnQsIGNvbnN0IGNoYXIgKnByb3RvKQotewotICAgIHJlc19zdGF0aWMgICAgICAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7Ci0gICAgc3RydWN0IHNlcnZlbnQqICBzOwotCi0gICAgaWYgKHJzID09IE5VTEwgfHwgcHJvdG8gPT0gTlVMTCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcnMtPnNlcnZlbnRfcHRyID0gTlVMTDsKLSAgICB3aGlsZSAoMSkgewotICAgICAgICBzdHJ1Y3Qgc2VydmVudCogIHMgPSBnZXRzZXJ2ZW50X3IocnMpOwotICAgICAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICggcy0+c19wb3J0ID09IHBvcnQgJiYgIXN0cmNtcCggcy0+c19wcm90bywgcHJvdG8gKSApCi0gICAgICAgICAgICByZXR1cm4gczsKLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9uc2Rpc3BhdGNoLmMgYi9saWJjL25ldGJzZC9uZXQvbnNkaXNwYXRjaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTI4MmJlLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL25ldC9uc2Rpc3BhdGNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoJJE5ldEJTRDogbnNkaXNwYXRjaC5jLHYgMS4zMCAyMDA1LzExLzI5IDAzOjExOjU5IGNocmlzdG9zIEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDA0IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgotICogYnkgTHVrZSBNZXdidXJuOyBhbmQgYnkgSmFzb24gUi4gVGhvcnBlLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNECi0gKiAgICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLSAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTCi0gKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLSAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi0gKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMyBOZXR3b3JrcyBBc3NvY2lhdGVzIFRlY2hub2xvZ3ksIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGRldmVsb3BlZCBmb3IgdGhlIEZyZWVCU0QgUHJvamVjdCBieQotICogSmFjcXVlcyBBLiBWaWRyaW5lLCBTYWZlcG9ydCBOZXR3b3JrIFNlcnZpY2VzLCBhbmQgTmV0d29yawotICogQXNzb2NpYXRlcyBMYWJvcmF0b3JpZXMsIHRoZSBTZWN1cml0eSBSZXNlYXJjaCBEaXZpc2lvbiBvZiBOZXR3b3JrCi0gKiBBc3NvY2lhdGVzLCBJbmMuIHVuZGVyIERBUlBBL1NQQVdBUiBjb250cmFjdCBONjYwMDEtMDEtQy04MDM1Ci0gKiAoIkNCT1NTIiksIGFzIHBhcnQgb2YgdGhlIERBUlBBIENIQVRTIHJlc2VhcmNoIHByb2dyYW0uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpZmRlZiBfX0VMRl9fCi0jaW5jbHVkZSA8ZGxmY24uaD4KLSNlbmRpZiAvKiBfX0VMRl9fICovCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNkZWZpbmUgX05TX1BSSVZBVEUKLSNpbmNsdWRlIDxuc3N3aXRjaC5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi1zdGF0aWMgbnNzX21ldGhvZAotX25zbWV0aG9kKGNvbnN0IGNoYXIgKnNvdXJjZSwgY29uc3QgY2hhciAqZGF0YWJhc2UsIGNvbnN0IGNoYXIgKm1ldGhvZCwKLSAgICBjb25zdCBuc19kdGFiIGRpc3BfdGFiW10sIHZvaWQgKipjYl9kYXRhKQotewotCWludAljdXJkaXNwOwotCi0JaWYgKGRpc3BfdGFiICE9IE5VTEwpIHsKLQkJZm9yIChjdXJkaXNwID0gMDsgZGlzcF90YWJbY3VyZGlzcF0uc3JjICE9IE5VTEw7IGN1cmRpc3ArKykgewotCQkJaWYgKHN0cmNhc2VjbXAoc291cmNlLCBkaXNwX3RhYltjdXJkaXNwXS5zcmMpID09IDApIHsKLQkJCQkqY2JfZGF0YSA9IGRpc3BfdGFiW2N1cmRpc3BdLmNiX2RhdGE7Ci0JCQkJcmV0dXJuIChkaXNwX3RhYltjdXJkaXNwXS5jYWxsYmFjayk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkqY2JfZGF0YSA9IE5VTEw7Ci0JcmV0dXJuIChOVUxMKTsKLX0KLQotaW50Ci0vKkFSR1NVU0VEKi8KLW5zZGlzcGF0Y2godm9pZCAqcmV0dmFsLCBjb25zdCBuc19kdGFiIGRpc3BfdGFiW10sIGNvbnN0IGNoYXIgKmRhdGFiYXNlLAotCSAgICBjb25zdCBjaGFyICptZXRob2QsIGNvbnN0IG5zX3NyYyBkZWZhdWx0c1tdLCAuLi4pCi17Ci0JdmFfbGlzdAkJIGFwOwotCWludAkJIGksIHJlc3VsdDsKLQljb25zdCBuc19zcmMJKnNyY2xpc3Q7Ci0JaW50CQkgc3JjbGlzdHNpemU7Ci0JbnNzX21ldGhvZAkgY2I7Ci0Jdm9pZAkJKmNiX2RhdGE7Ci0KLQkvKiByZXR2YWwgbWF5IGJlIE5VTEwgKi8KLQkvKiBkaXNwX3RhYiBtYXkgYmUgTlVMTCAqLwotCWFzc2VydChkYXRhYmFzZSAhPSBOVUxMKTsKLQlhc3NlcnQobWV0aG9kICE9IE5VTEwpOwotCWFzc2VydChkZWZhdWx0cyAhPSBOVUxMKTsKLQlpZiAoZGF0YWJhc2UgPT0gTlVMTCB8fCBtZXRob2QgPT0gTlVMTCB8fCBkZWZhdWx0cyA9PSBOVUxMKQotCQlyZXR1cm4gKE5TX1VOQVZBSUwpOwotCi0gICAgICAgIHNyY2xpc3QgPSBkZWZhdWx0czsKLSAgICAgICAgc3JjbGlzdHNpemUgPSAwOwotICAgICAgICB3aGlsZSAoc3JjbGlzdFtzcmNsaXN0c2l6ZV0ubmFtZSAhPSBOVUxMKQotICAgICAgICAgICAgICAgIHNyY2xpc3RzaXplKys7Ci0KLQlyZXN1bHQgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IHNyY2xpc3RzaXplOyBpKyspIHsKLQkJY2IgPSBfbnNtZXRob2Qoc3JjbGlzdFtpXS5uYW1lLCBkYXRhYmFzZSwgbWV0aG9kLAotCQkgICAgZGlzcF90YWIsICZjYl9kYXRhKTsKLQkJcmVzdWx0ID0gMDsKLQkJaWYgKGNiICE9IE5VTEwpIHsKLQkJCXZhX3N0YXJ0KGFwLCBkZWZhdWx0cyk7Ci0JCQlyZXN1bHQgPSAoKmNiKShyZXR2YWwsIGNiX2RhdGEsIGFwKTsKLQkJCXZhX2VuZChhcCk7Ci0JCQlpZiAoZGVmYXVsdHNbMF0uZmxhZ3MgJiBOU19GT1JDRUFMTCkKLQkJCQljb250aW51ZTsKLQkJCWlmIChyZXN1bHQgJiBzcmNsaXN0W2ldLmZsYWdzKQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCXJlc3VsdCAmPSBOU19TVEFUVVNNQVNLOwkvKiBjbGVhciBwcml2YXRlIGZsYWdzIGluIHJlc3VsdCAqLwotCi0JcmV0dXJuIChyZXN1bHQgPyByZXN1bHQgOiBOU19OT1RGT1VORCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvcmVlbnRyYW50LmggYi9saWJjL25ldGJzZC9uZXQvcmVlbnRyYW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYmZmMDguLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvbmV0L3JlZW50cmFudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS8qCSROZXRCU0Q6IHJlZW50cmFudC5oLHYgMS4xMCAyMDA0LzEyLzE0IDAwOjIzOjE5IG5hdGhhbncgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTgsIDIwMDMgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi0gKiBieSBKLlQuIENvbmtsaW4sIGJ5IE5hdGhhbiBKLiBXaWxsaWFtcywgYW5kIGJ5IEphc29uIFIuIFRob3JwZS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAotICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUwotICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi0gKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFJlcXVpcmVtZW50czoKLSAqIAotICogMS4gVGhlIHRocmVhZCBzYWZlIG1lY2hhbmlzbSBzaG91bGQgYmUgbGlnaHR3ZWlnaHQgc28gdGhlIGxpYnJhcnkgY2FuCi0gKiAgICBiZSB1c2VkIGJ5IG5vbi10aHJlYWRlZCBhcHBsaWNhdGlvbnMgd2l0aG91dCB1bnJlYXNvbmFibGUgb3ZlcmhlYWQuCi0gKiAKLSAqIDIuIFRoZXJlIHNob3VsZCBiZSBubyBkZXBlbmRlbmN5IG9uIGEgdGhyZWFkIGVuZ2luZSBmb3Igbm9uLXRocmVhZGVkCi0gKiAgICBhcHBsaWNhdGlvbnMuCi0gKiAKLSAqIDMuIFRoZXJlIHNob3VsZCBiZSBubyBkZXBlbmRlbmN5IG9uIGFueSBwYXJ0aWN1bGFyIHRocmVhZCBlbmdpbmUuCi0gKiAKLSAqIDQuIFRoZSBsaWJyYXJ5IHNob3VsZCBiZSBhYmxlIHRvIGJlIGNvbXBpbGVkIHdpdGhvdXQgc3VwcG9ydCBmb3IgdGhyZWFkCi0gKiAgICBzYWZldHkuCi0gKiAKLSAqIAotICogUmF0aW9uYWxlOgotICogCi0gKiBPbmUgYXBwcm9hY2ggZm9yIHRocmVhZCBzYWZldHkgaXMgdG8gcHJvdmlkZSBkaXNjcmV0ZSB2ZXJzaW9ucyBvZiB0aGUKLSAqIGxpYnJhcnk6IG9uZSB0aHJlYWQgc2FmZSwgdGhlIG90aGVyIG5vdC4gIFRoZSBkaXNhZHZhbnRhZ2Ugb2YgdGhpcyBpcwotICogdGhhdCBsaWJjIGlzIHJhdGhlciBsYXJnZSwgYW5kIHR3byBjb3BpZXMgb2YgYSBsaWJyYXJ5IHdoaWNoIGFyZSA5OSUrCi0gKiBpZGVudGljYWwgaXMgbm90IGFuIGVmZmljZW50IHVzZSBvZiByZXNvdXJjZXMuCi0gKiAKLSAqIEFub3RoZXIgYXBwcm9hY2ggaXMgdG8gcHJvdmlkZSBhIHNpbmdsZSB0aHJlYWQgc2FmZSBsaWJyYXJ5LiAgSG93ZXZlciwKLSAqIGl0IHNob3VsZCBub3QgYWRkIHNpZ25pZmljYW50IHJ1biB0aW1lIG9yIGNvZGUgc2l6ZSBvdmVyaGVhZCB0byBub24tCi0gKiB0aHJlYWRlZCBhcHBsaWNhdGlvbnMuCi0gKiAKLSAqIFNpbmNlIHRoZSBOZXRCU0QgQyBsaWJyYXJ5IGlzIHVzZWQgaW4gb3RoZXIgcHJvamVjdHMsIGl0IHNob3VsZCBiZQotICogZWFzeSB0byByZXBsYWNlIHRoZSBtdXR1YWwgZXhjbHVzaW9uIHByaW1pdGl2ZXMgd2l0aCBvbmVzIHByb3ZpZGVkIGJ5Ci0gKiBhbm90aGVyIHN5c3RlbS4gIFNpbWlsYXJseSwgaXQgc2hvdWxkIGFsc28gYmUgZWFzeSB0byByZW1vdmUgYWxsCi0gKiBzdXBwb3J0IGZvciB0aHJlYWQgc2FmZXR5IGNvbXBsZXRlbHkgaWYgdGhlIHRhcmdldCBlbnZpcm9ubWVudCBkb2VzCi0gKiBub3Qgc3VwcG9ydCB0aHJlYWRzLgotICogCi0gKiAKLSAqIEltcGxlbWVudGF0aW9uIERldGFpbHM6Ci0gKiAKLSAqIFRoZSB0aHJlYWQgcHJpbWl0aXZlcyB1c2VkIGJ5IHRoZSBsaWJyYXJ5IChtdXRleF90LCBtdXRleF9sb2NrLCBldGMuKQotICogYXJlIG1hY3JvcyB3aGljaCBleHBhbmQgdG8gdGhlIGNvb3Jlc3BvbmRpbmcgcHJpbWl0aXZlcyBwcm92aWRlZCBieQotICogdGhlIHRocmVhZCBlbmdpbmUgb3IgdG8gbm90aGluZy4gIFRoZSBsYXR0ZXIgaXMgdXNlZCBzbyB0aGF0IGNvZGUgaXMKLSAqIG5vdCB1bnJlYXNvbmFibHkgY2x1dHRlcmVkIHdpdGggI2lmZGVmcyB3aGVuIGFsbCB0aHJlYWQgc2FmZSBzdXBwb3J0Ci0gKiBpcyByZW1vdmVkLgotICogCi0gKiBUaGUgdGhyZWFkIG1hY3JvcyBjYW4gYmUgZGlyZWN0bHkgbWFwcGVkIHRvIHRoZSBtdXRleCBwcmltaXRpdmVzIGZyb20KLSAqIHB0aHJlYWRzLCBob3dldmVyIGl0IHNob3VsZCBiZSByZWFzb25hYmx5IGVhc3kgdG8gd3JhcCBhbm90aGVyIG11dGV4Ci0gKiBpbXBsZW1lbnRhdGlvbiBzbyBpdCBwcmVzZW50cyBhIHNpbWlsYXIgaW50ZXJmYWNlLgotICogCi0gKiBUaGUgdGhyZWFkIGZ1bmN0aW9ucyBvcGVyYXRlIGJ5IGRpc3BhdGNoaW5nIHRvIHN5bWJvbHMgd2hpY2ggYXJlLCBieQotICogZGVmYXVsdCwgd2Vhay1hbGlhc2VkIHRvIG5vLW9wIGZ1bmN0aW9ucyBpbiB0aHJlYWQtc3R1Yi90aHJlYWQtc3R1Yi5jCi0gKiAoc29tZSB1c2VzIG9mIHRocmVhZCBvcGVyYXRpb25zIGFyZSBjb25kaXRpb25hbCBvbiBfX2lzdGhyZWFkZWQsIGJ1dAotICogbm90IGFsbCBvZiB0aGVtIGFyZSkuCi0gKgotICogV2hlbiB0aGUgdGhyZWFkIGxpYnJhcnkgaXMgbGlua2VkIGluLCBpdCBwcm92aWRlcyBzdHJvbmctYWxpYXMgdmVyc2lvbnMKLSAqIG9mIHRob3NlIHN5bWJvbHMgd2hpY2ggZGlzcGF0Y2ggdG8gaXRzIG93biByZWFsIHRocmVhZCBvcGVyYXRpb25zLgotICoKLSAqLwotCi0jaWZkZWYgX1JFRU5UUkFOVAotCi0vKgotICogQWJ0cmFjdCB0aHJlYWQgaW50ZXJmYWNlIGZvciB0aHJlYWQtc2FmZSBsaWJyYXJpZXMuICBUaGVzZSByb3V0aW5lcwotICogd2lsbCB1c2Ugc3R1YnMgaW4gbGliYyBpZiB0aGUgYXBwbGljYXRpb24gaXMgbm90IGxpbmtlZCBhZ2FpbnN0IHRoZQotICogcHRocmVhZCBsaWJyYXJ5LCBhbmQgdGhlIHJlYWwgZnVuY3Rpb24gaW4gdGhlIHB0aHJlYWQgbGlicmFyeSBpZiBpdAotICogaXMuCi0gKi8KLQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQotI2RlZmluZQltdXRleF90CQkJcHRocmVhZF9tdXRleF90Ci0jZGVmaW5lCU1VVEVYX0lOSVRJQUxJWkVSCVBUSFJFQURfTVVURVhfSU5JVElBTElaRVIKLQotI2RlZmluZQltdXRleGF0dHJfdAkJcHRocmVhZF9tdXRleGF0dHJfdAotCi0jZGVmaW5lCU1VVEVYX1RZUEVfTk9STUFMCVBUSFJFQURfTVVURVhfTk9STUFMCi0jZGVmaW5lCU1VVEVYX1RZUEVfRVJST1JDSEVDSwlQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sKLSNkZWZpbmUJTVVURVhfVFlQRV9SRUNVUlNJVkUJUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUKLQotI2RlZmluZQljb25kX3QJCQlwdGhyZWFkX2NvbmRfdAotI2RlZmluZQlDT05EX0lOSVRJQUxJWkVSCVBUSFJFQURfQ09ORF9JTklUSUFMSVpFUgotCi0jZGVmaW5lCWNvbmRhdHRyX3QJCXB0aHJlYWRfY29uZGF0dHJfdAotCi0jZGVmaW5lCXJ3bG9ja190CQlwdGhyZWFkX3J3bG9ja190Ci0jZGVmaW5lCVJXTE9DS19JTklUSUFMSVpFUglQVEhSRUFEX1JXTE9DS19JTklUSUFMSVpFUgotCi0jZGVmaW5lCXJ3bG9ja2F0dHJfdAkJcHRocmVhZF9yd2xvY2thdHRyX3QKLQotI2RlZmluZQl0aHJlYWRfa2V5X3QJCXB0aHJlYWRfa2V5X3QKLQotI2RlZmluZQl0aHJfdAkJCXB0aHJlYWRfdAotCi0jZGVmaW5lCXRocmF0dHJfdAkJcHRocmVhZF9hdHRyX3QKLQotI2RlZmluZQlvbmNlX3QJCQlwdGhyZWFkX29uY2VfdAotI2RlZmluZQlPTkNFX0lOSVRJQUxJWkVSCVBUSFJFQURfT05DRV9JTklUCi0KLSNpZm5kZWYgX19MSUJDX1RIUkVBRF9TVFVCUwotCi1fX0JFR0lOX0RFQ0xTCi1pbnQJX19saWJjX211dGV4X2luaXQobXV0ZXhfdCAqLCBjb25zdCBtdXRleGF0dHJfdCAqKTsKLWludAlfX2xpYmNfbXV0ZXhfbG9jayhtdXRleF90ICopOwotaW50CV9fbGliY19tdXRleF90cnlsb2NrKG11dGV4X3QgKik7Ci1pbnQJX19saWJjX211dGV4X3VubG9jayhtdXRleF90ICopOwotaW50CV9fbGliY19tdXRleF9kZXN0cm95KG11dGV4X3QgKik7Ci0KLWludAlfX2xpYmNfbXV0ZXhhdHRyX2luaXQobXV0ZXhhdHRyX3QgKik7Ci1pbnQJX19saWJjX211dGV4YXR0cl9zZXR0eXBlKG11dGV4YXR0cl90ICosIGludCk7Ci1pbnQJX19saWJjX211dGV4YXR0cl9kZXN0cm95KG11dGV4YXR0cl90ICopOwotX19FTkRfREVDTFMKLQotI2RlZmluZQltdXRleF9pbml0KG0sIGEpCV9fbGliY19tdXRleF9pbml0KChtKSwgKGEpKQotI2RlZmluZQltdXRleF9sb2NrKG0pCQlfX2xpYmNfbXV0ZXhfbG9jaygobSkpCi0jZGVmaW5lCW11dGV4X3RyeWxvY2sobSkJX19saWJjX211dGV4X3RyeWxvY2soKG0pKQotI2RlZmluZQltdXRleF91bmxvY2sobSkJCV9fbGliY19tdXRleF91bmxvY2soKG0pKQotI2RlZmluZQltdXRleF9kZXN0cm95KG0pCV9fbGliY19tdXRleF9kZXN0cm95KChtKSkKLQotI2RlZmluZQltdXRleGF0dHJfaW5pdChtYSkJX19saWJjX211dGV4YXR0cl9pbml0KChtYSkpCi0jZGVmaW5lCW11dGV4YXR0cl9zZXR0eXBlKG1hLCB0KSBfX2xpYmNfbXV0ZXhhdHRyX3NldHR5cGUoKG1hKSwgKHQpKQotI2RlZmluZQltdXRleGF0dHJfZGVzdHJveShtYSkJX19saWJjX211dGV4YXR0cl9kZXN0cm95KChtYSkpCi0KLV9fQkVHSU5fREVDTFMKLWludAlfX2xpYmNfY29uZF9pbml0KGNvbmRfdCAqLCBjb25zdCBjb25kYXR0cl90ICopOwotaW50CV9fbGliY19jb25kX3NpZ25hbChjb25kX3QgKik7Ci1pbnQJX19saWJjX2NvbmRfYnJvYWRjYXN0KGNvbmRfdCAqKTsKLWludAlfX2xpYmNfY29uZF93YWl0KGNvbmRfdCAqLCBtdXRleF90ICopOwotaW50CV9fbGliY19jb25kX3RpbWVkd2FpdChjb25kX3QgKiwgbXV0ZXhfdCAqLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7Ci1pbnQJX19saWJjX2NvbmRfZGVzdHJveShjb25kX3QgKik7Ci1fX0VORF9ERUNMUwotCi0jZGVmaW5lCWNvbmRfaW5pdChjLCB0LCBhKSAgICAgCV9fbGliY19jb25kX2luaXQoKGMpLCAoYSkpCi0jZGVmaW5lCWNvbmRfc2lnbmFsKGMpCQlfX2xpYmNfY29uZF9zaWduYWwoKGMpKQotI2RlZmluZQljb25kX2Jyb2FkY2FzdChjKQlfX2xpYmNfY29uZF9icm9hZGNhc3QoKGMpKQotI2RlZmluZQljb25kX3dhaXQoYywgbSkJCV9fbGliY19jb25kX3dhaXQoKGMpLCAobSkpCi0jZGVmaW5lCWNvbmRfdGltZWR3YWl0KGMsIG0sIHQpCV9fbGliY19jb25kX3RpbWVkd2FpdCgoYyksIChtKSwgKHQpKQotI2RlZmluZQljb25kX2Rlc3Ryb3koYykJCV9fbGliY19jb25kX2Rlc3Ryb3koKGMpKQotCi1fX0JFR0lOX0RFQ0xTCi1pbnQJX19saWJjX3J3bG9ja19pbml0KHJ3bG9ja190ICosIGNvbnN0IHJ3bG9ja2F0dHJfdCAqKTsKLWludAlfX2xpYmNfcndsb2NrX3JkbG9jayhyd2xvY2tfdCAqKTsKLWludAlfX2xpYmNfcndsb2NrX3dybG9jayhyd2xvY2tfdCAqKTsKLWludAlfX2xpYmNfcndsb2NrX3RyeXJkbG9jayhyd2xvY2tfdCAqKTsKLWludAlfX2xpYmNfcndsb2NrX3RyeXdybG9jayhyd2xvY2tfdCAqKTsKLWludAlfX2xpYmNfcndsb2NrX3VubG9jayhyd2xvY2tfdCAqKTsKLWludAlfX2xpYmNfcndsb2NrX2Rlc3Ryb3kocndsb2NrX3QgKik7Ci1fX0VORF9ERUNMUwotCi0jZGVmaW5lCXJ3bG9ja19pbml0KGwsIGEpCV9fbGliY19yd2xvY2tfaW5pdCgobCksIChhKSkKLSNkZWZpbmUJcndsb2NrX3JkbG9jayhsKQlfX2xpYmNfcndsb2NrX3JkbG9jaygobCkpCi0jZGVmaW5lCXJ3bG9ja193cmxvY2sobCkJX19saWJjX3J3bG9ja193cmxvY2soKGwpKQotI2RlZmluZQlyd2xvY2tfdHJ5cmRsb2NrKGwpCV9fbGliY19yd2xvY2tfdHJ5cmRsb2NrKChsKSkKLSNkZWZpbmUJcndsb2NrX3RyeXdybG9jayhsKQlfX2xpYmNfcndsb2NrX3RyeXdybG9jaygobCkpCi0jZGVmaW5lCXJ3bG9ja191bmxvY2sobCkJX19saWJjX3J3bG9ja191bmxvY2soKGwpKQotI2RlZmluZQlyd2xvY2tfZGVzdHJveShsKQlfX2xpYmNfcndsb2NrX2Rlc3Ryb3koKGwpKQotCi1fX0JFR0lOX0RFQ0xTCi1pbnQJX19saWJjX3Rocl9rZXljcmVhdGUodGhyZWFkX2tleV90ICosIHZvaWQgKCopKHZvaWQgKikpOwotaW50CV9fbGliY190aHJfc2V0c3BlY2lmaWModGhyZWFkX2tleV90LCBjb25zdCB2b2lkICopOwotdm9pZAkqX19saWJjX3Rocl9nZXRzcGVjaWZpYyh0aHJlYWRfa2V5X3QpOwotaW50CV9fbGliY190aHJfa2V5ZGVsZXRlKHRocmVhZF9rZXlfdCk7Ci1fX0VORF9ERUNMUwotCi0jZGVmaW5lCXRocl9rZXljcmVhdGUoaywgZCkJX19saWJjX3Rocl9rZXljcmVhdGUoKGspLCAoZCkpCi0jZGVmaW5lCXRocl9zZXRzcGVjaWZpYyhrLCBwKQlfX2xpYmNfdGhyX3NldHNwZWNpZmljKChrKSwgKHApKQotI2RlZmluZQl0aHJfZ2V0c3BlY2lmaWMoaykJX19saWJjX3Rocl9nZXRzcGVjaWZpYygoaykpCi0jZGVmaW5lCXRocl9rZXlkZWxldGUoaykJX19saWJjX3Rocl9rZXlkZWxldGUoKGspKQotCi1fX0JFR0lOX0RFQ0xTCi1pbnQJX19saWJjX3Rocl9vbmNlKG9uY2VfdCAqLCB2b2lkICgqKSh2b2lkKSk7Ci1pbnQJX19saWJjX3Rocl9zaWdzZXRtYXNrKGludCwgY29uc3Qgc2lnc2V0X3QgKiwgc2lnc2V0X3QgKik7Ci10aHJfdAlfX2xpYmNfdGhyX3NlbGYodm9pZCk7Ci1pbnQJX19saWJjX3Rocl95aWVsZCh2b2lkKTsKLXZvaWQJX19saWJjX3Rocl9jcmVhdGUodGhyX3QgKiwgY29uc3QgdGhyYXR0cl90ICosCi0JICAgIHZvaWQgKigqKSh2b2lkICopLCB2b2lkICopOwotdm9pZAlfX2xpYmNfdGhyX2V4aXQodm9pZCAqKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKLWludAkqX19saWJjX3Rocl9lcnJubyh2b2lkKTsKLWludAlfX2xpYmNfdGhyX3NldGNhbmNlbHN0YXRlKGludCwgaW50ICopOwotCi1leHRlcm4gaW50IF9faXN0aHJlYWRlZDsKLV9fRU5EX0RFQ0xTCi0KLSNkZWZpbmUJdGhyX29uY2UobywgZikJCV9fbGliY190aHJfb25jZSgobyksIChmKSkKLSNkZWZpbmUJdGhyX3NpZ3NldG1hc2soZiwgbiwgbykJX19saWJjX3Rocl9zaWdzZXRtYXNrKChmKSwgKG4pLCAobykpCi0jZGVmaW5lCXRocl9zZWxmKCkJCV9fbGliY190aHJfc2VsZigpCi0jZGVmaW5lCXRocl95aWVsZCgpCQlfX2xpYmNfdGhyX3lpZWxkKCkKLSNkZWZpbmUJdGhyX2NyZWF0ZSh0cCwgdGEsIGYsIGEpIF9fbGliY190aHJfY3JlYXRlKCh0cCksICh0YSksIChmKSwgKGEpKQotI2RlZmluZQl0aHJfZXhpdCh2KQkJX19saWJjX3Rocl9leGl0KCh2KSkKLSNkZWZpbmUJdGhyX2Vycm5vKCkJCV9fbGliY190aHJfZXJybm8oKQotI2RlZmluZQl0aHJfZW5hYmxlZCgpCQkoX19pc3RocmVhZGVkKQotI2RlZmluZSB0aHJfc2V0Y2FuY2Vsc3RhdGUobiwgbykgX19saWJjX3Rocl9zZXRjYW5jZWxzdGF0ZSgobiksKG8pKQotI2VuZGlmIC8qIF9fTElCQ19USFJFQURfU1RVQlMgKi8KLQotI2RlZmluZQlGTE9DS0ZJTEUoZnApCQlfX2Zsb2NrZmlsZV9pbnRlcm5hbChmcCwgMSkKLSNkZWZpbmUJRlVOTE9DS0ZJTEUoZnApCQlfX2Z1bmxvY2tmaWxlX2ludGVybmFsKGZwLCAxKQotCi0jZWxzZSAvKiBfUkVFTlRSQU5UICovCi0KLSNkZWZpbmUJbXV0ZXhfaW5pdChtLCBhKQotI2RlZmluZQltdXRleF9sb2NrKG0pCi0jZGVmaW5lCW11dGV4X3RyeWxvY2sobSkKLSNkZWZpbmUJbXV0ZXhfdW5sb2NrKG0pCi0jZGVmaW5lCW11dGV4X2Rlc3Ryb3kobSkKLQotI2RlZmluZQljb25kX2luaXQoYywgdCwgYSkKLSNkZWZpbmUJY29uZF9zaWduYWwoYykKLSNkZWZpbmUJY29uZF9icm9hZGNhc3QoYykKLSNkZWZpbmUJY29uZF93YWl0KGMsIG0pCi0jZGVmaW5lCWNvbmRfdGltZWR3YWl0KGMsIG0sIHQpCi0jZGVmaW5lCWNvbmRfZGVzdHJveShjKQotCi0jZGVmaW5lCXJ3bG9ja19pbml0KGwsIGEpCi0jZGVmaW5lCXJ3bG9ja19yZGxvY2sobCkKLSNkZWZpbmUJcndsb2NrX3dybG9jayhsKQotI2RlZmluZQlyd2xvY2tfdHJ5cmRsb2NrKGwpCi0jZGVmaW5lCXJ3bG9ja190cnl3cmxvY2sobCkKLSNkZWZpbmUJcndsb2NrX3VubG9jayhsKQotI2RlZmluZQlyd2xvY2tfZGVzdHJveShsKQotCi0jZGVmaW5lCXRocl9rZXljcmVhdGUoaywgZCkKLSNkZWZpbmUJdGhyX3NldHNwZWNpZmljKGssIHApCi0jZGVmaW5lCXRocl9nZXRzcGVjaWZpYyhrKQotI2RlZmluZQl0aHJfa2V5ZGVsZXRlKGspCi0KLSNkZWZpbmUJdGhyX29uY2UobywgZikKLSNkZWZpbmUJdGhyX3NpZ3NldG1hc2soZiwgbiwgbykKLSNkZWZpbmUJdGhyX3NlbGYoKQotI2RlZmluZQl0aHJfZXJybm8oKQotCi0jZGVmaW5lCUZMT0NLRklMRShmcCkJCQotI2RlZmluZQlGVU5MT0NLRklMRShmcCkJCQotCi0jZW5kaWYgLyogX1JFRU5UUkFOVCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L2hlcnJvci5jIGIvbGliYy9uZXRic2QvcmVzb2x2L2hlcnJvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTBlNjQxLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL3Jlc29sdi9oZXJyb3IuYworKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgkkTmV0QlNEOiBoZXJyb3IuYyx2IDEuNCAyMDA0LzA1LzIzIDA1OjA5OjUyIGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODcsIDE5OTMKLSAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmZGVmIG5vdGRlZgotc3RhdGljIGNvbnN0IGNoYXIgc2Njc2lkW10gPSAiQCgjKWhlcnJvci5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci1zdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBoZXJyb3IuYyx2IDEuMi4yMDYuMSAyMDA0LzAzLzA5IDA4OjMzOjU0IG1hcmthIEV4cCI7Ci0jZWxzZQotX19SQ1NJRCgiJE5ldEJTRDogaGVycm9yLmMsdiAxLjQgMjAwNC8wNS8yMyAwNTowOTo1MiBjaHJpc3RvcyBFeHAgJCIpOwotI2VuZGlmCi0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3Vpby5oPgotCi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgotCi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLSNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2Vsc2UKLSNpbmNsdWRlIDxyZXNvbHYuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaWZuZGVmIERFX0NPTlNUCi0jZGVmaW5lIERFX0NPTlNUKGMsdikgICB2ID0gKChjKSA/IFwKLSAgICBzdHJjaHIoKGNvbnN0IHZvaWQgKikoYyksICooY29uc3QgY2hhciAqKShjb25zdCB2b2lkICopKGMpKSA6IE5VTEwpCi0jZW5kaWYKLQotY29uc3QgY2hhciAqIGNvbnN0IGhfZXJybGlzdFtdID0gewotCSJSZXNvbHZlciBFcnJvciAwIChubyBlcnJvcikiLAotCSJVbmtub3duIGhvc3QiLAkJCQkvKiAxIEhPU1RfTk9UX0ZPVU5EICovCi0JIkhvc3QgbmFtZSBsb29rdXAgZmFpbHVyZSIsCQkvKiAyIFRSWV9BR0FJTiAqLwotCSJVbmtub3duIHNlcnZlciBlcnJvciIsCQkJLyogMyBOT19SRUNPVkVSWSAqLwotCSJObyBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCBuYW1lIiwJLyogNCBOT19BRERSRVNTICovCi19OwotY29uc3QgaW50CWhfbmVyciA9IHsgc2l6ZW9mIGhfZXJybGlzdCAvIHNpemVvZiBoX2Vycmxpc3RbMF0gfTsKLQotLyoKLSAqIGhlcnJvciAtLQotICoJcHJpbnQgdGhlIGVycm9yIGluZGljYXRlZCBieSB0aGUgaF9lcnJubyB2YWx1ZS4KLSAqLwotdm9pZAotaGVycm9yKGNvbnN0IGNoYXIgKnMpIHsKLQlzdHJ1Y3QgaW92ZWMgaW92WzRdLCAqdiA9IGlvdjsKLQljaGFyICp0OwotCi0JaWYgKHMgIT0gTlVMTCAmJiAqcyAhPSAnXDAnKSB7Ci0JCURFX0NPTlNUKHMsIHQpOwotCQl2LT5pb3ZfYmFzZSA9IHQ7Ci0JCXYtPmlvdl9sZW4gPSBzdHJsZW4odCk7Ci0JCXYrKzsKLQkJREVfQ09OU1QoIjogIiwgdCk7Ci0JCXYtPmlvdl9iYXNlID0gdDsKLQkJdi0+aW92X2xlbiA9IDI7Ci0JCXYrKzsKLQl9Ci0JREVfQ09OU1QoaHN0cmVycm9yKGhfZXJybm8pLCB0KTsKLQl2LT5pb3ZfYmFzZSA9IHQ7Ci0Jdi0+aW92X2xlbiA9IHN0cmxlbih2LT5pb3ZfYmFzZSk7Ci0JdisrOwotCURFX0NPTlNUKCJcbiIsIHQpOwotCXYtPmlvdl9iYXNlID0gdDsKLQl2LT5pb3ZfbGVuID0gMTsKLQl3cml0ZXYoU1RERVJSX0ZJTEVOTywgaW92LCAodiAtIGlvdikgKyAxKTsKLX0KLQotLyoKLSAqIGhzdHJlcnJvciAtLQotICoJcmV0dXJuIHRoZSBzdHJpbmcgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gImhvc3QiIGVycm5vIHZhbHVlLgotICovCi1jb25zdCBjaGFyICoKLWhzdHJlcnJvcihpbnQgZXJyKSB7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiAoIlJlc29sdmVyIGludGVybmFsIGVycm9yIik7Ci0JZWxzZSBpZiAoZXJyIDwgaF9uZXJyKQotCQlyZXR1cm4gKGhfZXJybGlzdFtlcnJdKTsKLQlyZXR1cm4gKCJVbmtub3duIHJlc29sdmVyIGVycm9yIik7Ci19CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2NhY2hlLmMgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2NhY2hlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZGYwODUuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19jYWNoZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJyZXNvbHZfY2FjaGUuaCIKLSNpbmNsdWRlIDxyZXNvbHYuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSAicHRocmVhZC5oIgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKLSNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpbmNsdWRlIDxuZXRkYi5oPgotI2luY2x1ZGUgPGxpbnV4L2lmLmg+Ci0KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2luY2x1ZGUgInJlc29sdl9pZmFjZS5oIgotI2luY2x1ZGUgInJlc19wcml2YXRlLmgiCi0KLS8qIFRoaXMgY29kZSBpbXBsZW1lbnRzIGEgc21hbGwgYW5kICpzaW1wbGUqIEROUyByZXNvbHZlciBjYWNoZS4KLSAqCi0gKiBJdCBpcyBvbmx5IHVzZWQgdG8gY2FjaGUgRE5TIGFuc3dlcnMgZm9yIGEgdGltZSBkZWZpbmVkIGJ5IHRoZSBzbWFsbGVzdCBUVEwKLSAqIGFtb25nIHRoZSBhbnN3ZXIgcmVjb3JkcyBpbiBvcmRlciB0byByZWR1Y2UgRE5TIHRyYWZmaWMuIEl0IGlzIG5vdCBzdXBwb3NlZAotICogdG8gYmUgYSBmdWxsIEROUyBjYWNoZSwgc2luY2Ugd2UgcGxhbiB0byBpbXBsZW1lbnQgdGhhdCBpbiB0aGUgZnV0dXJlIGluIGEKLSAqIGRlZGljYXRlZCBwcm9jZXNzIHJ1bm5pbmcgb24gdGhlIHN5c3RlbS4KLSAqCi0gKiBOb3RlIHRoYXQgaXRzIGRlc2lnbiBpcyBrZXB0IHNpbXBsZSB2ZXJ5IGludGVudGlvbmFsbHksIGkuZS46Ci0gKgotICogIC0gaXQgdGFrZXMgcmF3IEROUyBxdWVyeSBwYWNrZXQgZGF0YSBhcyBpbnB1dCwgYW5kIHJldHVybnMgcmF3IEROUwotICogICAgYW5zd2VyIHBhY2tldCBkYXRhIGFzIG91dHB1dAotICoKLSAqICAgICh0aGlzIG1lYW5zIHRoYXQgdHdvIHNpbWlsYXIgcXVlcmllcyB0aGF0IGVuY29kZSB0aGUgRE5TIG5hbWUKLSAqICAgICBkaWZmZXJlbnRseSB3aWxsIGJlIHRyZWF0ZWQgZGlzdGluY3RseSkuCi0gKgotICogICAgdGhlIHNtYWxsZXN0IFRUTCB2YWx1ZSBhbW9uZyB0aGUgYW5zd2VyIHJlY29yZHMgYXJlIHVzZWQgYXMgdGhlIHRpbWUKLSAqICAgIHRvIGtlZXAgYW4gYW5zd2VyIGluIHRoZSBjYWNoZS4KLSAqCi0gKiAgICB0aGlzIGlzIGJhZCwgYnV0IHdlIGFic29sdXRlbHkgd2FudCB0byBhdm9pZCBwYXJzaW5nIHRoZSBhbnN3ZXIgcGFja2V0cwotICogICAgKGFuZCBzaG91bGQgYmUgc29sdmVkIGJ5IHRoZSBsYXRlciBmdWxsIEROUyBjYWNoZSBwcm9jZXNzKS4KLSAqCi0gKiAgLSB0aGUgaW1wbGVtZW50YXRpb24gaXMganVzdCBhIChxdWVyeS1kYXRhKSA9PiAoYW5zd2VyLWRhdGEpIGhhc2ggdGFibGUKLSAqICAgIHdpdGggYSB0cml2aWFsIGxlYXN0LXJlY2VudGx5LXVzZWQgZXhwaXJhdGlvbiBwb2xpY3kuCi0gKgotICogRG9pbmcgdGhpcyBrZWVwcyB0aGUgY29kZSBzaW1wbGUgYW5kIGF2b2lkcyB0byBkZWFsIHdpdGggYSBsb3Qgb2YgdGhpbmdzCi0gKiB0aGF0IGEgZnVsbCBETlMgY2FjaGUgaXMgZXhwZWN0ZWQgdG8gZG8uCi0gKgotICogVGhlIEFQSSBpcyBhbHNvIHZlcnkgc2ltcGxlOgotICoKLSAqICAgLSB0aGUgY2xpZW50IGNhbGxzIF9yZXNvbHZfY2FjaGVfZ2V0KCkgdG8gb2J0YWluIGEgaGFuZGxlIHRvIHRoZSBjYWNoZS4KLSAqICAgICB0aGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgY2FjaGUgb24gZmlyc3QgdXNhZ2UuIHRoZSByZXN1bHQgY2FuIGJlIE5VTEwKLSAqICAgICBpZiB0aGUgY2FjaGUgaXMgZGlzYWJsZWQuCi0gKgotICogICAtIHRoZSBjbGllbnQgY2FsbHMgX3Jlc29sdl9jYWNoZV9sb29rdXAoKSBiZWZvcmUgcGVyZm9ybWluZyBhIHF1ZXJ5Ci0gKgotICogICAgIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIFJFU09MVl9DQUNIRV9GT1VORCwgYSBjb3B5IG9mIHRoZSBhbnN3ZXIgZGF0YQotICogICAgIGhhcyBiZWVuIGNvcGllZCBpbnRvIHRoZSBjbGllbnQtcHJvdmlkZWQgYW5zd2VyIGJ1ZmZlci4KLSAqCi0gKiAgICAgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgUkVTT0xWX0NBQ0hFX05PVEZPVU5ELCB0aGUgY2xpZW50IHNob3VsZCBwZXJmb3JtCi0gKiAgICAgYSByZXF1ZXN0IG5vcm1hbGx5LCAqdGhlbiogY2FsbCBfcmVzb2x2X2NhY2hlX2FkZCgpIHRvIGFkZCB0aGUgcmVjZWl2ZWQKLSAqICAgICBhbnN3ZXIgdG8gdGhlIGNhY2hlLgotICoKLSAqICAgICBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBSRVNPTFZfQ0FDSEVfVU5TVVBQT1JURUQsIHRoZSBjbGllbnQgc2hvdWxkCi0gKiAgICAgcGVyZm9ybSBhIHJlcXVlc3Qgbm9ybWFsbHksIGFuZCAqbm90KiBjYWxsIF9yZXNvbHZfY2FjaGVfYWRkKCkKLSAqCi0gKiAgICAgbm90ZSB0aGF0IFJFU09MVl9DQUNIRV9VTlNVUFBPUlRFRCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBhbnN3ZXIgYnVmZmVyCi0gKiAgICAgaXMgdG9vIHNob3J0IHRvIGFjY29tb2RhdGUgdGhlIGNhY2hlZCByZXN1bHQuCi0gKgotICogIC0gd2hlbiBuZXR3b3JrIHNldHRpbmdzIGNoYW5nZSwgdGhlIGNhY2hlIG11c3QgYmUgZmx1c2hlZCBzaW5jZSB0aGUgbGlzdAotICogICAgb2YgRE5TIHNlcnZlcnMgcHJvYmFibHkgY2hhbmdlZC4gdGhpcyBpcyBkb25lIGJ5IGNhbGxpbmcKLSAqICAgIF9yZXNvbHZfY2FjaGVfcmVzZXQoKQotICoKLSAqICAgIHRoZSBwYXJhbWV0ZXIgdG8gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGFuIGV2ZXItaW5jcmVhc2luZyBnZW5lcmF0aW9uCi0gKiAgICBudW1iZXIgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudCBuZXR3b3JrIHNldHRpbmdzIHN0YXRlLgotICoKLSAqICAgIFRoaXMgaXMgZG9uZSBiZWNhdXNlIHNldmVyYWwgdGhyZWFkcyBjb3VsZCBkZXRlY3QgdGhlIHNhbWUgbmV0d29yawotICogICAgc2V0dGluZ3MgY2hhbmdlIChidXQgYXQgZGlmZmVyZW50IHRpbWVzKSBhbmQgd2lsbCBhbGwgZW5kIHVwIGNhbGxpbmcgdGhlCi0gKiAgICBzYW1lIGZ1bmN0aW9uLiBDb21wYXJpbmcgd2l0aCB0aGUgbGFzdCB1c2VkIGdlbmVyYXRpb24gbnVtYmVyIGVuc3VyZXMKLSAqICAgIHRoYXQgdGhlIGNhY2hlIGlzIG9ubHkgZmx1c2hlZCBvbmNlIHBlciBuZXR3b3JrIGNoYW5nZS4KLSAqLwotCi0vKiB0aGUgbmFtZSBvZiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB0aGUgZmlyc3QgdGltZQotICogdGhpcyBjb2RlIGlzIGNhbGxlZCBpZiBpdHMgdmFsdWUgaXMgIjAiLCB0aGVuIHRoZSByZXNvbHZlciBjYWNoZSBpcwotICogZGlzYWJsZWQuCi0gKi8KLSNkZWZpbmUgIENPTkZJR19FTlYgICJCSU9OSUNfRE5TQ0FDSEUiCi0KLS8qIGVudHJpZXMgb2xkZXIgdGhhbiBDT05GSUdfU0VDT05EUyBzZWNvbmRzIGFyZSBhbHdheXMgZGlzY2FyZGVkLgotICovCi0jZGVmaW5lICBDT05GSUdfU0VDT05EUyAgICAoNjAqMTApICAgIC8qIDEwIG1pbnV0ZXMgKi8KLQotLyogZGVmYXVsdCBudW1iZXIgb2YgZW50cmllcyBrZXB0IGluIHRoZSBjYWNoZS4gVGhpcyB2YWx1ZSBoYXMgYmVlbgotICogZGV0ZXJtaW5lZCBieSBicm93c2luZyB0aHJvdWdoIHZhcmlvdXMgc2l0ZXMgYW5kIGNvdW50aW5nIHRoZSBudW1iZXIKLSAqIG9mIGNvcnJlc3BvbmRpbmcgcmVxdWVzdHMuIEtlZXAgaW4gbWluZCB0aGF0IG91ciBmcmFtZXdvcmsgaXMgY3VycmVudGx5Ci0gKiBwZXJmb3JtaW5nIHR3byByZXF1ZXN0cyBwZXIgbmFtZSBsb29rdXAgKG9uZSBmb3IgSVB2NCwgdGhlIG90aGVyIGZvciBJUHY2KQotICoKLSAqICAgIHd3dy5nb29nbGUuY29tICAgICAgNAotICogICAgd3d3LnlzZWFyY2guY29tICAgICA2Ci0gKiAgICB3d3cuYW1hem9uLmNvbSAgICAgIDgKLSAqICAgIHd3dy5ueXRpbWVzLmNvbSAgICAgMjIKLSAqICAgIHd3dy5lc3BuLmNvbSAgICAgICAgMjgKLSAqICAgIHd3dy5tc24uY29tICAgICAgICAgMjgKLSAqICAgIHd3dy5sZW1vbmRlLmZyICAgICAgMzUKLSAqCi0gKiAoZGV0ZXJtaW5lZCBpbiAyMDA5LTItMTcgZnJvbSBQYXJpcywgRnJhbmNlLCByZXN1bHRzIG1heSB2YXJ5IGRlcGVuZGluZwotICogIG9uIGxvY2F0aW9uKQotICoKLSAqIG1vc3QgaGlnaC1sZXZlbCB3ZWJzaXRlcyB1c2UgbG90cyBvZiBtZWRpYS9hZCBzZXJ2ZXJzIHdpdGggZGlmZmVyZW50IG5hbWVzCi0gKiBidXQgdGhlc2UgYXJlIGdlbmVyYWxseSByZXVzZWQgd2hlbiBicm93c2luZyB0aHJvdWdoIHRoZSBzaXRlLgotICoKLSAqIEFzIHN1Y2gsIGEgdmFsdWUgb2YgNjQgc2hvdWxkIGJlIHJlbGF0aXZlbHkgY29tZm9ydGFibGUgYXQgdGhlIG1vbWVudC4KLSAqCi0gKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICogTk9URSAtIHRoaXMgaGFzIGNoYW5nZWQuCi0gKiAqIDEpIHdlJ3ZlIGFkZGVkIElQdjYgc3VwcG9ydCBzbyBlYWNoIGRucyBxdWVyeSByZXN1bHRzIGluIDIgcmVzcG9uc2VzCi0gKiAqIDIpIHdlJ3ZlIG1hZGUgdGhpcyBhIHN5c3RlbS13aWRlIGNhY2hlLCBzbyB0aGUgY29zdCBpcyBsZXNzIChpdCdzIG5vdAotICogKiAgICBkdXBsaWNhdGVkIGluIGVhY2ggcHJvY2VzcykgYW5kIHRoZSBuZWVkIGlzIGdyZWF0ZXIgKG1vcmUgcHJvY2Vzc2VzCi0gKiAqICAgIG1ha2luZyBkaWZmZXJlbnQgcmVxdWVzdHMpLgotICogKiBVcHBpbmcgYnkgMnggZm9yIElQdjYKLSAqICogVXBwaW5nIGJ5IGFub3RoZXIgNXggZm9yIHRoZSBjZW50cmFsaXplZCBuYXR1cmUKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLSNkZWZpbmUgIENPTkZJR19NQVhfRU5UUklFUyAgICA2NCAqIDIgKiA1Ci0vKiBuYW1lIG9mIHRoZSBzeXN0ZW0gcHJvcGVydHkgdGhhdCBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGNhY2hlIHNpemUgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwotLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCi0vKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIHNldCB0byAxIHRvIGRlYnVnIGNhY2hlIG9wZXJhdGlvbnMgKi8KLSNkZWZpbmUgIERFQlVHICAgICAgIDAKLQotLyogc2V0IHRvIDEgdG8gZGVidWcgcXVlcnkgZGF0YSAqLwotI2RlZmluZSAgREVCVUdfREFUQSAgMAotCi0jdW5kZWYgWExPRwotI2lmIERFQlVHCi0jICBpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgotIyAgZGVmaW5lIFhMT0coLi4uKSAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsImxpYmMiLF9fVkFfQVJHU19fKQotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotLyoqIEJPVU5ERUQgQlVGRkVSIEZPUk1BVFRJTkcKLSAqKi8KLQotLyogdGVjaG5pY2FsIG5vdGU6Ci0gKgotICogICB0aGUgZm9sbG93aW5nIGRlYnVnZ2luZyByb3V0aW5lcyBhcmUgdXNlZCB0byBhcHBlbmQgZGF0YSB0byBhIGJvdW5kZWQKLSAqICAgYnVmZmVyIHRoZXkgdGFrZSB0d28gcGFyYW1ldGVycyB0aGF0IGFyZToKLSAqCi0gKiAgIC0gcCA6IGEgcG9pbnRlciB0byB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIGJ1ZmZlcgotICogICAgICAgICB0aGlzIHZhbHVlIGlzIGluaXRpYWxseSBzZXQgdG8gdGhlIGJ1ZmZlcidzIGFkZHJlc3MuCi0gKgotICogICAtIGVuZCA6IHRoZSBhZGRyZXNzIG9mIHRoZSBidWZmZXIncyBsaW1pdCwgaS5lLiBvZiB0aGUgZmlyc3QgYnl0ZQotICogICAgICAgICAgIGFmdGVyIHRoZSBidWZmZXIuIHRoaXMgYWRkcmVzcyBzaG91bGQgbmV2ZXIgYmUgdG91Y2hlZC4KLSAqCi0gKiAgICAgICAgICAgSU1QT1JUQU5UOiBpdCBpcyBhc3N1bWVkIHRoYXQgZW5kID4gYnVmZmVyX2FkZHJlc3MsIGkuZS4KLSAqICAgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIGJ1ZmZlciBpcyBhdCBsZWFzdCBvbmUgYnl0ZS4KLSAqCi0gKiAgIHRoZSBfYnByaW50XygpIGZ1bmN0aW9ucyByZXR1cm4gdGhlIG5ldyB2YWx1ZSBvZiAncCcgYWZ0ZXIgdGhlIGRhdGEKLSAqICAgaGFzIGJlZW4gYXBwZW5kZWQsIGFuZCBhbHNvIGVuc3VyZSB0aGUgZm9sbG93aW5nOgotICoKLSAqICAgLSB0aGUgcmV0dXJuZWQgdmFsdWUgd2lsbCBuZXZlciBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gJ2VuZCcKLSAqCi0gKiAgIC0gYSByZXR1cm4gdmFsdWUgZXF1YWwgdG8gJ2VuZCcgbWVhbnMgdGhhdCB0cnVuY2F0aW9uIG9jY3VyZWQKLSAqICAgICAoaW4gd2hpY2ggY2FzZSwgZW5kWy0xXSB3aWxsIGJlIHNldCB0byAwKQotICoKLSAqICAgLSBhZnRlciByZXR1cm5pbmcgZnJvbSBhIF9icHJpbnRfKCkgZnVuY3Rpb24sIHRoZSBjb250ZW50IG9mIHRoZSBidWZmZXIKLSAqICAgICBpcyBhbHdheXMgMC10ZXJtaW5hdGVkLCBldmVuIGluIHRoZSBldmVudCBvZiB0cnVuY2F0aW9uLgotICoKLSAqICB0aGVzZSBjb252ZW50aW9ucyBhbGxvdyB5b3UgdG8gY2FsbCBfYnByaW50XyBmdW5jdGlvbnMgbXVsdGlwbGUgdGltZXMgYW5kCi0gKiAgb25seSBjaGVjayBmb3IgdHJ1bmNhdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZSwgYXMgaW46Ci0gKgotICogICAgIGNoYXIgIGJ1ZmZbMTAwMF0sICpwID0gYnVmZiwgKmVuZCA9IHAgKyBzaXplb2YoYnVmZik7Ci0gKgotICogICAgIHAgPSBfYnByaW50X2MocCwgZW5kLCAnIicpOwotICogICAgIHAgPSBfYnByaW50X3MocCwgZW5kLCBteV9zdHJpbmcpOwotICogICAgIHAgPSBfYnByaW50X2MocCwgZW5kLCAnIicpOwotICoKLSAqICAgICBpZiAocCA+PSBlbmQpIHsKLSAqICAgICAgICAvLyBidWZmZXIgd2FzIHRvbyBzbWFsbAotICogICAgIH0KLSAqCi0gKiAgICAgcHJpbnRmKCAiJXMiLCBidWZmICk7Ci0gKi8KLQotLyogYWRkIGEgY2hhciB0byBhIGJvdW5kZWQgYnVmZmVyICovCi1zdGF0aWMgY2hhcioKLV9icHJpbnRfYyggY2hhciogIHAsIGNoYXIqICBlbmQsIGludCAgYyApCi17Ci0gICAgaWYgKHAgPCBlbmQpIHsKLSAgICAgICAgaWYgKHArMSA9PSBlbmQpCi0gICAgICAgICAgICAqcCsrID0gMDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAqcCsrID0gKGNoYXIpIGM7Ci0gICAgICAgICAgICAqcCAgID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcDsKLX0KLQotLyogYWRkIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdG8gYSBib3VuZGVkIGJ1ZmZlciAqLwotc3RhdGljIGNoYXIqCi1fYnByaW50X2IoIGNoYXIqICBwLCBjaGFyKiAgZW5kLCBjb25zdCBjaGFyKiAgYnVmLCBpbnQgIGxlbiApCi17Ci0gICAgaW50ICBhdmFpbCA9IGVuZCAtIHA7Ci0KLSAgICBpZiAoYXZhaWwgPD0gMCB8fCBsZW4gPD0gMCkKLSAgICAgICAgcmV0dXJuIHA7Ci0KLSAgICBpZiAoYXZhaWwgPiBsZW4pCi0gICAgICAgIGF2YWlsID0gbGVuOwotCi0gICAgbWVtY3B5KCBwLCBidWYsIGF2YWlsICk7Ci0gICAgcCArPSBhdmFpbDsKLQotICAgIGlmIChwIDwgZW5kKQotICAgICAgICBwWzBdID0gMDsKLSAgICBlbHNlCi0gICAgICAgIGVuZFstMV0gPSAwOwotCi0gICAgcmV0dXJuIHA7Ci19Ci0KLS8qIGFkZCBhIHN0cmluZyB0byBhIGJvdW5kZWQgYnVmZmVyICovCi1zdGF0aWMgY2hhcioKLV9icHJpbnRfcyggY2hhciogIHAsIGNoYXIqICBlbmQsIGNvbnN0IGNoYXIqICBzdHIgKQotewotICAgIHJldHVybiBfYnByaW50X2IocCwgZW5kLCBzdHIsIHN0cmxlbihzdHIpKTsKLX0KLQotLyogYWRkIGEgZm9ybWF0dGVkIHN0cmluZyB0byBhIGJvdW5kZWQgYnVmZmVyICovCi1zdGF0aWMgY2hhcioKLV9icHJpbnQoIGNoYXIqICBwLCBjaGFyKiAgZW5kLCBjb25zdCBjaGFyKiAgZm9ybWF0LCAuLi4gKQotewotICAgIGludCAgICAgIGF2YWlsLCBuOwotICAgIHZhX2xpc3QgIGFyZ3M7Ci0KLSAgICBhdmFpbCA9IGVuZCAtIHA7Ci0KLSAgICBpZiAoYXZhaWwgPD0gMCkKLSAgICAgICAgcmV0dXJuIHA7Ci0KLSAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgIG4gPSB2c25wcmludGYoIHAsIGF2YWlsLCBmb3JtYXQsIGFyZ3MpOwotICAgIHZhX2VuZChhcmdzKTsKLQotICAgIC8qIGNlcnRhaW4gQyBsaWJyYXJpZXMgcmV0dXJuIC0xIGluIGNhc2Ugb2YgdHJ1bmNhdGlvbiAqLwotICAgIGlmIChuIDwgMCB8fCBuID4gYXZhaWwpCi0gICAgICAgIG4gPSBhdmFpbDsKLQotICAgIHAgKz0gbjsKLSAgICAvKiBjZXJ0YWluIEMgbGlicmFyaWVzIGRvIG5vdCB6ZXJvLXRlcm1pbmF0ZSBpbiBjYXNlIG9mIHRydW5jYXRpb24gKi8KLSAgICBpZiAocCA9PSBlbmQpCi0gICAgICAgIHBbLTFdID0gMDsKLQotICAgIHJldHVybiBwOwotfQotCi0vKiBhZGQgYSBoZXggdmFsdWUgdG8gYSBib3VuZGVkIGJ1ZmZlciwgdXAgdG8gOCBkaWdpdHMgKi8KLXN0YXRpYyBjaGFyKgotX2JwcmludF9oZXgoIGNoYXIqICBwLCBjaGFyKiAgZW5kLCB1bnNpZ25lZCAgdmFsdWUsIGludCAgbnVtRGlnaXRzICkKLXsKLSAgICBjaGFyICAgdGV4dFtzaXplb2YodW5zaWduZWQpKjJdOwotICAgIGludCAgICBubiA9IDA7Ci0KLSAgICB3aGlsZSAobnVtRGlnaXRzLS0gPiAwKSB7Ci0gICAgICAgIHRleHRbbm4rK10gPSAiMDEyMzQ1Njc4OWFiY2RlZiJbKHZhbHVlID4+IChudW1EaWdpdHMqNCkpICYgMTVdOwotICAgIH0KLSAgICByZXR1cm4gX2JwcmludF9iKHAsIGVuZCwgdGV4dCwgbm4pOwotfQotCi0vKiBhZGQgdGhlIGhleGFkZWNpbWFsIGR1bXAgb2Ygc29tZSBtZW1vcnkgYXJlYSB0byBhIGJvdW5kZWQgYnVmZmVyICovCi1zdGF0aWMgY2hhcioKLV9icHJpbnRfaGV4ZHVtcCggY2hhciogIHAsIGNoYXIqICBlbmQsIGNvbnN0IHVpbnQ4X3QqICBkYXRhLCBpbnQgIGRhdGFsZW4gKQotewotICAgIGludCAgIGxpbmVTaXplID0gMTY7Ci0KLSAgICB3aGlsZSAoZGF0YWxlbiA+IDApIHsKLSAgICAgICAgaW50ICBhdmFpbCA9IGRhdGFsZW47Ci0gICAgICAgIGludCAgbm47Ci0KLSAgICAgICAgaWYgKGF2YWlsID4gbGluZVNpemUpCi0gICAgICAgICAgICBhdmFpbCA9IGxpbmVTaXplOwotCi0gICAgICAgIGZvciAobm4gPSAwOyBubiA8IGF2YWlsOyBubisrKSB7Ci0gICAgICAgICAgICBpZiAobm4gPiAwKQotICAgICAgICAgICAgICAgIHAgPSBfYnByaW50X2MocCwgZW5kLCAnICcpOwotICAgICAgICAgICAgcCA9IF9icHJpbnRfaGV4KHAsIGVuZCwgZGF0YVtubl0sIDIpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoIDsgbm4gPCBsaW5lU2l6ZTsgbm4rKyApIHsKLSAgICAgICAgICAgIHAgPSBfYnByaW50X3MocCwgZW5kLCAiICAgIik7Ci0gICAgICAgIH0KLSAgICAgICAgcCA9IF9icHJpbnRfcyhwLCBlbmQsICIgICIpOwotCi0gICAgICAgIGZvciAobm4gPSAwOyBubiA8IGF2YWlsOyBubisrKSB7Ci0gICAgICAgICAgICBpbnQgIGMgPSBkYXRhW25uXTsKLQotICAgICAgICAgICAgaWYgKGMgPCAzMiB8fCBjID4gMTI3KQotICAgICAgICAgICAgICAgIGMgPSAnLic7Ci0KLSAgICAgICAgICAgIHAgPSBfYnByaW50X2MocCwgZW5kLCBjKTsKLSAgICAgICAgfQotICAgICAgICBwID0gX2JwcmludF9jKHAsIGVuZCwgJ1xuJyk7Ci0KLSAgICAgICAgZGF0YSAgICArPSBhdmFpbDsKLSAgICAgICAgZGF0YWxlbiAtPSBhdmFpbDsKLSAgICB9Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLS8qIGR1bXAgdGhlIGNvbnRlbnQgb2YgYSBxdWVyeSBvZiBwYWNrZXQgdG8gdGhlIGxvZyAqLwotc3RhdGljIHZvaWQKLVhMT0dfQllURVMoIGNvbnN0IHZvaWQqICBiYXNlLCBpbnQgIGxlbiApCi17Ci0gICAgY2hhciAgYnVmZlsxMDI0XTsKLSAgICBjaGFyKiAgcCA9IGJ1ZmYsICplbmQgPSBwICsgc2l6ZW9mKGJ1ZmYpOwotCi0gICAgcCA9IF9icHJpbnRfaGV4ZHVtcChwLCBlbmQsIGJhc2UsIGxlbik7Ci0gICAgWExPRygiJXMiLGJ1ZmYpOwotfQotCi0jZWxzZSAvKiAhREVCVUcgKi8KLSMgIGRlZmluZSAgWExPRyguLi4pICAgICAgICAoKHZvaWQpMCkKLSMgIGRlZmluZSAgWExPR19CWVRFUyhhLGIpICAoKHZvaWQpMCkKLSNlbmRpZgotCi1zdGF0aWMgdGltZV90Ci1fdGltZV9ub3coIHZvaWQgKQotewotICAgIHN0cnVjdCB0aW1ldmFsICB0djsKLQotICAgIGdldHRpbWVvZmRheSggJnR2LCBOVUxMICk7Ci0gICAgcmV0dXJuIHR2LnR2X3NlYzsKLX0KLQotLyogcmVtaW5kZXI6IHRoZSBnZW5lcmFsIGZvcm1hdCBvZiBhIEROUyBwYWNrZXQgaXMgdGhlIGZvbGxvd2luZzoKLSAqCi0gKiAgICBIRUFERVIgICgxMiBieXRlcykKLSAqICAgIFFVRVNUSU9OICAodmFyaWFibGUpCi0gKiAgICBBTlNXRVIgKHZhcmlhYmxlKQotICogICAgQVVUSE9SSVRZICh2YXJpYWJsZSkKLSAqICAgIEFERElUSU9OTkFMICh2YXJpYWJsZSkKLSAqCi0gKiB0aGUgSEVBREVSIGlzIG1hZGUgb2Y6Ci0gKgotICogICBJRCAgICAgOiAxNiA6IDE2LWJpdCB1bmlxdWUgcXVlcnkgaWRlbnRpZmljYXRpb24gZmllbGQKLSAqCi0gKiAgIFFSICAgICA6ICAxIDogc2V0IHRvIDAgZm9yIHF1ZXJpZXMsIGFuZCAxIGZvciByZXNwb25zZXMKLSAqICAgT3Bjb2RlIDogIDQgOiBzZXQgdG8gMCBmb3IgcXVlcmllcwotICogICBBQSAgICAgOiAgMSA6IHNldCB0byAwIGZvciBxdWVyaWVzCi0gKiAgIFRDICAgICA6ICAxIDogdHJ1bmNhdGlvbiBmbGFnLCB3aWxsIGJlIHNldCB0byAwIGluIHF1ZXJpZXMKLSAqICAgUkQgICAgIDogIDEgOiByZWN1cnNpb24gZGVzaXJlZAotICoKLSAqICAgUkEgICAgIDogIDEgOiByZWN1cnNpb24gYXZhaWxhYmxlICgwIGluIHF1ZXJpZXMpCi0gKiAgIFogICAgICA6ICAzIDogdGhyZWUgcmVzZXJ2ZWQgemVybyBiaXRzCi0gKiAgIFJDT0RFICA6ICA0IDogcmVzcG9uc2UgY29kZSAoYWx3YXlzIDA9Tk9FUlJPUiBpbiBxdWVyaWVzKQotICoKLSAqICAgUURDb3VudDogMTYgOiBxdWVzdGlvbiBjb3VudAotICogICBBTkNvdW50OiAxNiA6IEFuc3dlciBjb3VudCAoMCBpbiBxdWVyaWVzKQotICogICBOU0NvdW50OiAxNjogQXV0aG9yaXR5IFJlY29yZCBjb3VudCAoMCBpbiBxdWVyaWVzKQotICogICBBUkNvdW50OiAxNjogQWRkaXRpb25uYWwgUmVjb3JkIGNvdW50ICgwIGluIHF1ZXJpZXMpCi0gKgotICogdGhlIFFVRVNUSU9OIGlzIG1hZGUgb2YgUURDb3VudCBRdWVzdGlvbiBSZWNvcmQgKFFScykKLSAqIHRoZSBBTlNXRVIgaXMgbWFkZSBvZiBBTkNvdW50IFJScwotICogdGhlIEFVVEhPUklUWSBpcyBtYWRlIG9mIE5TQ291bnQgUlJzCi0gKiB0aGUgQURESVRJT05OQUwgaXMgbWFkZSBvZiBBUkNvdW50IFJScwotICoKLSAqIEVhY2ggUXVlc3Rpb24gUmVjb3JkIChRUikgaXMgbWFkZSBvZjoKLSAqCi0gKiAgIFFOQU1FICAgOiB2YXJpYWJsZSA6IFF1ZXJ5IEROUyBOQU1FCi0gKiAgIFRZUEUgICAgOiAxNiAgICAgICA6IHR5cGUgb2YgcXVlcnkgKEE9MSwgUFRSPTEyLCBNWD0xNSwgQUFBQT0yOCwgQUxMPTI1NSkKLSAqICAgQ0xBU1MgICA6IDE2ICAgICAgIDogY2xhc3Mgb2YgcXVlcnkgKElOPTEpCi0gKgotICogRWFjaCBSZXNvdXJjZSBSZWNvcmQgKFJSKSBpcyBtYWRlIG9mOgotICoKLSAqICAgTkFNRSAgICA6IHZhcmlhYmxlIDogRE5TIE5BTUUKLSAqICAgVFlQRSAgICA6IDE2ICAgICAgIDogdHlwZSBvZiBxdWVyeSAoQT0xLCBQVFI9MTIsIE1YPTE1LCBBQUFBPTI4LCBBTEw9MjU1KQotICogICBDTEFTUyAgIDogMTYgICAgICAgOiBjbGFzcyBvZiBxdWVyeSAoSU49MSkKLSAqICAgVFRMICAgICA6IDMyICAgICAgIDogc2Vjb25kcyB0byBjYWNoZSB0aGlzIFJSICgwPW5vbmUpCi0gKiAgIFJETEVOR1RIOiAxNiAgICAgICA6IHNpemUgb2YgUkREQVRBIGluIGJ5dGVzCi0gKiAgIFJEREFUQSAgOiB2YXJpYWJsZSA6IFJSIGRhdGEgKGRlcGVuZHMgb24gVFlQRSkKLSAqCi0gKiBFYWNoIFFOQU1FIGNvbnRhaW5zIGEgZG9tYWluIG5hbWUgZW5jb2RlZCBhcyBhIHNlcXVlbmNlIG9mICdsYWJlbHMnCi0gKiB0ZXJtaW5hdGVkIGJ5IGEgemVyby4gRWFjaCBsYWJlbCBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6Ci0gKgotICogICAgTEVOICA6IDggICAgIDogbGVuZ2h0IG9mIGxhYmVsIChNVVNUIGJlIDwgNjQpCi0gKiAgICBOQU1FIDogOCpMRU4gOiBsYWJlbCBsZW5ndGggKG11c3QgZXhjbHVkZSBkb3RzKQotICoKLSAqIEEgdmFsdWUgb2YgMCBpbiB0aGUgZW5jb2RpbmcgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlICdyb290JyBkb21haW4gYW5kCi0gKiB0ZXJtaW5hdGVzIHRoZSBlbmNvZGluZy4gU28gJ3d3dy5hbmRyb2lkLmNvbScgd2lsbCBiZSBlbmNvZGVkIGFzOgotICoKLSAqICAgPDM+d3d3PDc+YW5kcm9pZDwzPmNvbTwwPgotICoKLSAqIFdoZXJlIDxuPiByZXByZXNlbnRzIHRoZSBieXRlIHdpdGggdmFsdWUgJ24nCi0gKgotICogRWFjaCBOQU1FIHJlZmxlY3RzIHRoZSBRTkFNRSBvZiB0aGUgcXVlc3Rpb24sIGJ1dCBoYXMgYSBzbGlnaHRseSBtb3JlCi0gKiBjb21wbGV4IGVuY29kaW5nIGluIG9yZGVyIHRvIHByb3ZpZGUgbWVzc2FnZSBjb21wcmVzc2lvbi4gVGhpcyBpcyBhY2hpZXZlZAotICogYnkgdXNpbmcgYSAyLWJ5dGUgcG9pbnRlciwgd2l0aCBmb3JtYXQ6Ci0gKgotICogICAgVFlQRSAgIDogMiAgOiAwYjExIHRvIGluZGljYXRlIGEgcG9pbnRlciwgMGIwMSBhbmQgMGIxMCBhcmUgcmVzZXJ2ZWQKLSAqICAgIE9GRlNFVCA6IDE0IDogb2Zmc2V0IHRvIGFub3RoZXIgcGFydCBvZiB0aGUgRE5TIHBhY2tldAotICoKLSAqIFRoZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBETlMgcGFja2V0IGFuZCBtdXN0IHBvaW50Ci0gKiBBIHBvaW50ZXIgdGVybWluYXRlcyB0aGUgZW5jb2RpbmcuCi0gKgotICogVGhlIE5BTUUgY2FuIGJlIGVuY29kZWQgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0czoKLSAqCi0gKiAgIC0gYSBzZXF1ZW5jZSBvZiBzaW1wbGUgbGFiZWxzIHRlcm1pbmF0ZWQgYnkgMCAobGlrZSBRTkFNRXMpCi0gKiAgIC0gYSBzaW5nbGUgcG9pbnRlcgotICogICAtIGEgc2VxdWVuY2Ugb2Ygc2ltcGxlIGxhYmVscyB0ZXJtaW5hdGVkIGJ5IGEgcG9pbnRlcgotICoKLSAqIEEgcG9pbnRlciBzaGFsbCBhbHdheXMgcG9pbnQgdG8gZWl0aGVyIGEgcG9pbnRlciBvZiBhIHNlcXVlbmNlIG9mCi0gKiBsYWJlbHMgKHdoaWNoIGNhbiB0aGVtc2VsdmVzIGJlIHRlcm1pbmF0ZWQgYnkgZWl0aGVyIGEgMCBvciBhIHBvaW50ZXIpCi0gKgotICogVGhlIGV4cGFuZGVkIGxlbmd0aCBvZiBhIGdpdmVuIGRvbWFpbiBuYW1lIHNob3VsZCBub3QgZXhjZWVkIDI1NSBieXRlcy4KLSAqCi0gKiBOT1RFOiB3ZSBkb24ndCBwYXJzZSB0aGUgYW5zd2VyIHBhY2tldHMsIHNvIGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIE5BTUUKLSAqICAgICAgIHJlY29yZHMsIG9ubHkgUU5BTUVzLgotICovCi0KLSNkZWZpbmUgIEROU19IRUFERVJfU0laRSAgMTIKLQotI2RlZmluZSAgRE5TX1RZUEVfQSAgICJcMDBcMDEiICAgLyogYmlnLWVuZGlhbiBkZWNpbWFsIDEgKi8KLSNkZWZpbmUgIEROU19UWVBFX1BUUiAiXDAwXDAxNCIgIC8qIGJpZy1lbmRpYW4gZGVjaW1hbCAxMiAqLwotI2RlZmluZSAgRE5TX1RZUEVfTVggICJcMDBcMDE3IiAgLyogYmlnLWVuZGlhbiBkZWNpbWFsIDE1ICovCi0jZGVmaW5lICBETlNfVFlQRV9BQUFBICJcMDBcMDM0IiAvKiBiaWctZW5kaWFuIGRlY2ltYWwgMjggKi8KLSNkZWZpbmUgIEROU19UWVBFX0FMTCAiXDAwXDAzNzciIC8qIGJpZy1lbmRpYW4gZGVjaW1hbCAyNTUgKi8KLQotI2RlZmluZSAgRE5TX0NMQVNTX0lOICJcMDBcMDEiICAgLyogYmlnLWVuZGlhbiBkZWNpbWFsIDEgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIGNvbnN0IHVpbnQ4X3QqICBiYXNlOwotICAgIGNvbnN0IHVpbnQ4X3QqICBlbmQ7Ci0gICAgY29uc3QgdWludDhfdCogIGN1cnNvcjsKLX0gRG5zUGFja2V0OwotCi1zdGF0aWMgdm9pZAotX2Ruc1BhY2tldF9pbml0KCBEbnNQYWNrZXQqICBwYWNrZXQsIGNvbnN0IHVpbnQ4X3QqICBidWZmLCBpbnQgIGJ1ZmZsZW4gKQotewotICAgIHBhY2tldC0+YmFzZSAgID0gYnVmZjsKLSAgICBwYWNrZXQtPmVuZCAgICA9IGJ1ZmYgKyBidWZmbGVuOwotICAgIHBhY2tldC0+Y3Vyc29yID0gYnVmZjsKLX0KLQotc3RhdGljIHZvaWQKLV9kbnNQYWNrZXRfcmV3aW5kKCBEbnNQYWNrZXQqICBwYWNrZXQgKQotewotICAgIHBhY2tldC0+Y3Vyc29yID0gcGFja2V0LT5iYXNlOwotfQotCi1zdGF0aWMgdm9pZAotX2Ruc1BhY2tldF9za2lwKCBEbnNQYWNrZXQqICBwYWNrZXQsIGludCAgY291bnQgKQotewotICAgIGNvbnN0IHVpbnQ4X3QqICBwID0gcGFja2V0LT5jdXJzb3IgKyBjb3VudDsKLQotICAgIGlmIChwID4gcGFja2V0LT5lbmQpCi0gICAgICAgIHAgPSBwYWNrZXQtPmVuZDsKLQotICAgIHBhY2tldC0+Y3Vyc29yID0gcDsKLX0KLQotc3RhdGljIGludAotX2Ruc1BhY2tldF9yZWFkSW50MTYoIERuc1BhY2tldCogIHBhY2tldCApCi17Ci0gICAgY29uc3QgdWludDhfdCogIHAgPSBwYWNrZXQtPmN1cnNvcjsKLQotICAgIGlmIChwKzIgPiBwYWNrZXQtPmVuZCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgcGFja2V0LT5jdXJzb3IgPSBwKzI7Ci0gICAgcmV0dXJuIChwWzBdPDwgOCkgfCBwWzFdOwotfQotCi0vKiogUVVFUlkgQ0hFQ0tJTkcKLSAqKi8KLQotLyogY2hlY2sgYnl0ZXMgaW4gYSBkbnMgcGFja2V0LiByZXR1cm5zIDEgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlLgotICogdGhlIGN1cnNvciBpcyBvbmx5IGFkdmFuY2VkIGluIHRoZSBjYXNlIG9mIHN1Y2Nlc3MKLSAqLwotc3RhdGljIGludAotX2Ruc1BhY2tldF9jaGVja0J5dGVzKCBEbnNQYWNrZXQqICBwYWNrZXQsIGludCAgbnVtQnl0ZXMsIGNvbnN0IHZvaWQqICBieXRlcyApCi17Ci0gICAgY29uc3QgdWludDhfdCogIHAgPSBwYWNrZXQtPmN1cnNvcjsKLQotICAgIGlmIChwICsgbnVtQnl0ZXMgPiBwYWNrZXQtPmVuZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobWVtY21wKHAsIGJ5dGVzLCBudW1CeXRlcykgIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBwYWNrZXQtPmN1cnNvciA9IHAgKyBudW1CeXRlczsKLSAgICByZXR1cm4gMTsKLX0KLQotLyogcGFyc2UgYW5kIHNraXAgYSBnaXZlbiBRTkFNRSBzdG9yZWQgaW4gYSBxdWVyeSBwYWNrZXQsCi0gKiBmcm9tIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4gcmV0dXJucyAxIG9uIHN1Y2Nlc3MsCi0gKiBvciAwIGZvciBtYWxmb3JtZWQgZGF0YS4KLSAqLwotc3RhdGljIGludAotX2Ruc1BhY2tldF9jaGVja1FOYW1lKCBEbnNQYWNrZXQqICBwYWNrZXQgKQotewotICAgIGNvbnN0IHVpbnQ4X3QqICBwICAgPSBwYWNrZXQtPmN1cnNvcjsKLSAgICBjb25zdCB1aW50OF90KiAgZW5kID0gcGFja2V0LT5lbmQ7Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGludCAgYzsKLQotICAgICAgICBpZiAocCA+PSBlbmQpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjID0gKnArKzsKLQotICAgICAgICBpZiAoYyA9PSAwKSB7Ci0gICAgICAgICAgICBwYWNrZXQtPmN1cnNvciA9IHA7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIHdlIGRvbid0IGV4cGVjdCBsYWJlbCBjb21wcmVzc2lvbiBpbiBRTkFNRXMgKi8KLSAgICAgICAgaWYgKGMgPj0gNjQpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBwICs9IGM7Ci0gICAgICAgIC8qIHdlIHJlbHkgb24gdGhlIGJvdW5kIGNoZWNrIGF0IHRoZSBzdGFydAotICAgICAgICAgKiBvZiB0aGUgbG9vcCBoZXJlICovCi0gICAgfQotICAgIC8qIG1hbGZvcm1lZCBkYXRhICovCi0gICAgWExPRygibWFsZm9ybWVkIFFOQU1FIik7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHBhcnNlIGFuZCBza2lwIGEgZ2l2ZW4gUVIgc3RvcmVkIGluIGEgcGFja2V0LgotICogcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIGFuZCAwIG9uIGZhaWx1cmUKLSAqLwotc3RhdGljIGludAotX2Ruc1BhY2tldF9jaGVja1FSKCBEbnNQYWNrZXQqICBwYWNrZXQgKQotewotICAgIGlmICghX2Ruc1BhY2tldF9jaGVja1FOYW1lKHBhY2tldCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLyogVFlQRSBtdXN0IGJlIG9uZSBvZiB0aGUgdGhpbmdzIHdlIHN1cHBvcnQgKi8KLSAgICBpZiAoIV9kbnNQYWNrZXRfY2hlY2tCeXRlcyhwYWNrZXQsIDIsIEROU19UWVBFX0EpICYmCi0gICAgICAgICFfZG5zUGFja2V0X2NoZWNrQnl0ZXMocGFja2V0LCAyLCBETlNfVFlQRV9QVFIpICYmCi0gICAgICAgICFfZG5zUGFja2V0X2NoZWNrQnl0ZXMocGFja2V0LCAyLCBETlNfVFlQRV9NWCkgJiYKLSAgICAgICAgIV9kbnNQYWNrZXRfY2hlY2tCeXRlcyhwYWNrZXQsIDIsIEROU19UWVBFX0FBQUEpICYmCi0gICAgICAgICFfZG5zUGFja2V0X2NoZWNrQnl0ZXMocGFja2V0LCAyLCBETlNfVFlQRV9BTEwpKQotICAgIHsKLSAgICAgICAgWExPRygidW5zdXBwb3J0ZWQgVFlQRSIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgLyogQ0xBU1MgbXVzdCBiZSBJTiAqLwotICAgIGlmICghX2Ruc1BhY2tldF9jaGVja0J5dGVzKHBhY2tldCwgMiwgRE5TX0NMQVNTX0lOKSkgewotICAgICAgICBYTE9HKCJ1bnN1cHBvcnRlZCBDTEFTUyIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMTsKLX0KLQotLyogY2hlY2sgdGhlIGhlYWRlciBvZiBhIEROUyBRdWVyeSBwYWNrZXQsIHJldHVybiAxIGlmIGl0IGlzIG9uZQotICogdHlwZSBvZiBxdWVyeSB3ZSBjYW4gY2FjaGUsIG9yIDAgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBpbnQKLV9kbnNQYWNrZXRfY2hlY2tRdWVyeSggRG5zUGFja2V0KiAgcGFja2V0ICkKLXsKLSAgICBjb25zdCB1aW50OF90KiAgcCA9IHBhY2tldC0+YmFzZTsKLSAgICBpbnQgICAgICAgICAgICAgcWRDb3VudCwgYW5Db3VudCwgZG5Db3VudCwgYXJDb3VudDsKLQotICAgIGlmIChwICsgRE5TX0hFQURFUl9TSVpFID4gcGFja2V0LT5lbmQpIHsKLSAgICAgICAgWExPRygicXVlcnkgcGFja2V0IHRvbyBzbWFsbCIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKiBRUiBtdXN0IGJlIHNldCB0byAwLCBvcGNvZGUgbXVzdCBiZSAwIGFuZCBBQSBtdXN0IGJlIDAgKi8KLSAgICAvKiBSQSwgWiwgYW5kIFJDT0RFIG11c3QgYmUgMCAqLwotICAgIGlmICgocFsyXSAmIDB4RkMpICE9IDAgfHwgcFszXSAhPSAwKSB7Ci0gICAgICAgIFhMT0coInF1ZXJ5IHBhY2tldCBmbGFncyB1bnN1cHBvcnRlZCIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKiBOb3RlIHRoYXQgd2UgaWdub3JlIHRoZSBUQyBhbmQgUkQgYml0cyBoZXJlIGZvciB0aGUKLSAgICAgKiBmb2xsb3dpbmcgcmVhc29uczoKLSAgICAgKgotICAgICAqIC0gdGhlcmUgaXMgbm8gcG9pbnQgZm9yIGEgcXVlcnkgcGFja2V0IHNlbnQgdG8gYSBzZXJ2ZXIKLSAgICAgKiAgIHRvIGhhdmUgdGhlIFRDIGJpdCBzZXQsIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gbWlnaHQKLSAgICAgKiAgIHNldCB0aGUgYml0IGluIHRoZSBxdWVyeSBidWZmZXIgZm9yIGl0cyBvd24gbmVlZHMKLSAgICAgKiAgIGJldHdlZW4gYSBfcmVzb2x2X2NhY2hlX2xvb2t1cCBhbmQgYQotICAgICAqICAgX3Jlc29sdl9jYWNoZV9hZGQuIFdlIHNob3VsZCBub3QgZnJlYWsgb3V0IGlmIHRoaXMKLSAgICAgKiAgIGlzIHRoZSBjYXNlLgotICAgICAqCi0gICAgICogLSB3ZSBjb25zaWRlciB0aGF0IHRoZSByZXN1bHQgZnJvbSBhIFJEPTAgb3IgYSBSRD0xCi0gICAgICogICBxdWVyeSBtaWdodCBiZSBkaWZmZXJlbnQsIGhlbmNlIHRoYXQgdGhlIFJEIGJpdAotICAgICAqICAgc2hvdWxkIGJlIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBjYWNoZWQgcmVzdWx0LgotICAgICAqCi0gICAgICogICB0aGlzIGltcGxpZXMgdGhhdCBSRCBpcyBjaGVja2VkIHdoZW4gaGFzaGluZyBvcgotICAgICAqICAgY29tcGFyaW5nIHF1ZXJ5IHBhY2tldHMsIGJ1dCBub3QgVEMKLSAgICAgKi8KLQotICAgIC8qIEFOQ09VTlQsIEROQ09VTlQgYW5kIEFSQ09VTlQgbXVzdCBiZSAwICovCi0gICAgcWRDb3VudCA9IChwWzRdIDw8IDgpIHwgcFs1XTsKLSAgICBhbkNvdW50ID0gKHBbNl0gPDwgOCkgfCBwWzddOwotICAgIGRuQ291bnQgPSAocFs4XSA8PCA4KSB8IHBbOV07Ci0gICAgYXJDb3VudCA9IChwWzEwXTw8IDgpIHwgcFsxMV07Ci0KLSAgICBpZiAoYW5Db3VudCAhPSAwIHx8IGRuQ291bnQgIT0gMCB8fCBhckNvdW50ICE9IDApIHsKLSAgICAgICAgWExPRygicXVlcnkgcGFja2V0IGNvbnRhaW5zIG5vbi1xdWVyeSByZWNvcmRzIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmIChxZENvdW50ID09IDApIHsKLSAgICAgICAgWExPRygicXVlcnkgcGFja2V0IGRvZXNuJ3QgY29udGFpbiBxdWVyeSByZWNvcmQiKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLyogQ2hlY2sgUURDT1VOVCBRUnMgKi8KLSAgICBwYWNrZXQtPmN1cnNvciA9IHAgKyBETlNfSEVBREVSX1NJWkU7Ci0KLSAgICBmb3IgKDtxZENvdW50ID4gMDsgcWRDb3VudC0tKQotICAgICAgICBpZiAoIV9kbnNQYWNrZXRfY2hlY2tRUihwYWNrZXQpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gMTsKLX0KLQotLyoqIFFVRVJZIERFQlVHR0lORwotICoqLwotI2lmIERFQlVHCi1zdGF0aWMgY2hhcioKLV9kbnNQYWNrZXRfYnByaW50UU5hbWUoRG5zUGFja2V0KiAgcGFja2V0LCBjaGFyKiAgYnAsIGNoYXIqICBiZW5kKQotewotICAgIGNvbnN0IHVpbnQ4X3QqICBwICAgPSBwYWNrZXQtPmN1cnNvcjsKLSAgICBjb25zdCB1aW50OF90KiAgZW5kID0gcGFja2V0LT5lbmQ7Ci0gICAgaW50ICAgICAgICAgICAgIGZpcnN0ID0gMTsKLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgaW50ICBjOwotCi0gICAgICAgIGlmIChwID49IGVuZCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGMgPSAqcCsrOwotCi0gICAgICAgIGlmIChjID09IDApIHsKLSAgICAgICAgICAgIHBhY2tldC0+Y3Vyc29yID0gcDsKLSAgICAgICAgICAgIHJldHVybiBicDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIHdlIGRvbid0IGV4cGVjdCBsYWJlbCBjb21wcmVzc2lvbiBpbiBRTkFNRXMgKi8KLSAgICAgICAgaWYgKGMgPj0gNjQpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoZmlyc3QpCi0gICAgICAgICAgICBmaXJzdCA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJwID0gX2JwcmludF9jKGJwLCBiZW5kLCAnLicpOwotCi0gICAgICAgIGJwID0gX2JwcmludF9iKGJwLCBiZW5kLCAoY29uc3QgY2hhciopcCwgYyk7Ci0KLSAgICAgICAgcCArPSBjOwotICAgICAgICAvKiB3ZSByZWx5IG9uIHRoZSBib3VuZCBjaGVjayBhdCB0aGUgc3RhcnQKLSAgICAgICAgICogb2YgdGhlIGxvb3AgaGVyZSAqLwotICAgIH0KLSAgICAvKiBtYWxmb3JtZWQgZGF0YSAqLwotICAgIGJwID0gX2JwcmludF9zKGJwLCBiZW5kLCAiPE1BTEZPUk1FRD4iKTsKLSAgICByZXR1cm4gYnA7Ci19Ci0KLXN0YXRpYyBjaGFyKgotX2Ruc1BhY2tldF9icHJpbnRRUihEbnNQYWNrZXQqICBwYWNrZXQsIGNoYXIqICBwLCBjaGFyKiAgZW5kKQotewotI2RlZmluZSAgUVEoeCkgICB7IEROU19UWVBFXyMjeCwgI3ggfQotICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewotICAgICAgICBjb25zdCBjaGFyKiAgdHlwZUJ5dGVzOwotICAgICAgICBjb25zdCBjaGFyKiAgdHlwZVN0cmluZzsKLSAgICB9IHFUeXBlc1tdID0KLSAgICB7Ci0gICAgICAgIFFRKEEpLCBRUShQVFIpLCBRUShNWCksIFFRKEFBQUEpLCBRUShBTEwpLAotICAgICAgICB7IE5VTEwsIE5VTEwgfQotICAgIH07Ci0gICAgaW50ICAgICAgICAgIG5uOwotICAgIGNvbnN0IGNoYXIqICB0eXBlU3RyaW5nID0gTlVMTDsKLQotICAgIC8qIGR1bXAgUU5BTUUgKi8KLSAgICBwID0gX2Ruc1BhY2tldF9icHJpbnRRTmFtZShwYWNrZXQsIHAsIGVuZCk7Ci0KLSAgICAvKiBkdW1wIFRZUEUgKi8KLSAgICBwID0gX2JwcmludF9zKHAsIGVuZCwgIiAoIik7Ci0KLSAgICBmb3IgKG5uID0gMDsgcVR5cGVzW25uXS50eXBlQnl0ZXMgIT0gTlVMTDsgbm4rKykgewotICAgICAgICBpZiAoX2Ruc1BhY2tldF9jaGVja0J5dGVzKHBhY2tldCwgMiwgcVR5cGVzW25uXS50eXBlQnl0ZXMpKSB7Ci0gICAgICAgICAgICB0eXBlU3RyaW5nID0gcVR5cGVzW25uXS50eXBlU3RyaW5nOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodHlwZVN0cmluZyAhPSBOVUxMKQotICAgICAgICBwID0gX2JwcmludF9zKHAsIGVuZCwgdHlwZVN0cmluZyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGludCAgdHlwZUNvZGUgPSBfZG5zUGFja2V0X3JlYWRJbnQxNihwYWNrZXQpOwotICAgICAgICBwID0gX2JwcmludChwLCBlbmQsICJVTktOT1dOLSVkIiwgdHlwZUNvZGUpOwotICAgIH0KLQotICAgIHAgPSBfYnByaW50X2MocCwgZW5kLCAnKScpOwotCi0gICAgLyogc2tpcCBDTEFTUyAqLwotICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrZXQsIDIpOwotICAgIHJldHVybiBwOwotfQotCi0vKiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhlIHBhY2tldCBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQgKi8KLXN0YXRpYyBjaGFyKgotX2Ruc1BhY2tldF9icHJpbnRRdWVyeSggRG5zUGFja2V0KiAgcGFja2V0LCBjaGFyKiAgcCwgY2hhciogIGVuZCApCi17Ci0gICAgaW50ICAgcWRDb3VudDsKLQotICAgIGlmIChwYWNrZXQtPmJhc2VbMl0gJiAweDEpIHsKLSAgICAgICAgcCA9IF9icHJpbnRfcyhwLCBlbmQsICJSRUNVUlNJVkUgIik7Ci0gICAgfQotCi0gICAgX2Ruc1BhY2tldF9za2lwKHBhY2tldCwgNCk7Ci0gICAgcWRDb3VudCA9IF9kbnNQYWNrZXRfcmVhZEludDE2KHBhY2tldCk7Ci0gICAgX2Ruc1BhY2tldF9za2lwKHBhY2tldCwgNik7Ci0KLSAgICBmb3IgKCA7IHFkQ291bnQgPiAwOyBxZENvdW50LS0gKSB7Ci0gICAgICAgIHAgPSBfZG5zUGFja2V0X2JwcmludFFSKHBhY2tldCwgcCwgZW5kKTsKLSAgICB9Ci0gICAgcmV0dXJuIHA7Ci19Ci0jZW5kaWYKLQotCi0vKiogUVVFUlkgSEFTSElORyBTVVBQT1JUCi0gKioKLSAqKiBUSEUgRk9MTE9XSU5HIENPREUgQVNTVU1FUyBUSEFUIFRIRSBJTlBVVCBQQUNLRVQgSEFTIEFMUkVBRFkKLSAqKiBCRUVOIFNVQ0NFU0ZVTExZIENIRUNLRUQuCi0gKiovCi0KLS8qIHVzZSAzMi1iaXQgRk5WIGhhc2ggZnVuY3Rpb24gKi8KLSNkZWZpbmUgIEZOVl9NVUxUICAgMTY3Nzc2MTlVCi0jZGVmaW5lICBGTlZfQkFTSVMgIDIxNjYxMzYyNjFVCi0KLXN0YXRpYyB1bnNpZ25lZAotX2Ruc1BhY2tldF9oYXNoQnl0ZXMoIERuc1BhY2tldCogIHBhY2tldCwgaW50ICBudW1CeXRlcywgdW5zaWduZWQgIGhhc2ggKQotewotICAgIGNvbnN0IHVpbnQ4X3QqICBwICAgPSBwYWNrZXQtPmN1cnNvcjsKLSAgICBjb25zdCB1aW50OF90KiAgZW5kID0gcGFja2V0LT5lbmQ7Ci0KLSAgICB3aGlsZSAobnVtQnl0ZXMgPiAwICYmIHAgPCBlbmQpIHsKLSAgICAgICAgaGFzaCA9IGhhc2gqRk5WX01VTFQgXiAqcCsrOwotICAgIH0KLSAgICBwYWNrZXQtPmN1cnNvciA9IHA7Ci0gICAgcmV0dXJuIGhhc2g7Ci19Ci0KLQotc3RhdGljIHVuc2lnbmVkCi1fZG5zUGFja2V0X2hhc2hRTmFtZSggRG5zUGFja2V0KiAgcGFja2V0LCB1bnNpZ25lZCAgaGFzaCApCi17Ci0gICAgY29uc3QgdWludDhfdCogIHAgICA9IHBhY2tldC0+Y3Vyc29yOwotICAgIGNvbnN0IHVpbnQ4X3QqICBlbmQgPSBwYWNrZXQtPmVuZDsKLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgaW50ICBjOwotCi0gICAgICAgIGlmIChwID49IGVuZCkgeyAgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KLSAgICAgICAgICAgIFhMT0coIiVzOiBJTlRFUk5BTF9FUlJPUjogcmVhZC1vdmVyZmxvdyAhIVxuIiwgX19GVU5DVElPTl9fKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYyA9ICpwKys7Ci0KLSAgICAgICAgaWYgKGMgPT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChjID49IDY0KSB7Ci0gICAgICAgICAgICBYTE9HKCIlczogSU5URVJOQUxfRVJST1I6IG1hbGZvcm1lZCBkb21haW4gISFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAocCArIGMgPj0gZW5kKSB7Ci0gICAgICAgICAgICBYTE9HKCIlczogSU5URVJOQUxfRVJST1I6IHNpbXBsZSBsYWJlbCByZWFkLW92ZXJmbG93ICEhXG4iLAotICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKGMgPiAwKSB7Ci0gICAgICAgICAgICBoYXNoID0gaGFzaCpGTlZfTVVMVCBeICpwKys7Ci0gICAgICAgICAgICBjICAgLT0gMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBwYWNrZXQtPmN1cnNvciA9IHA7Ci0gICAgcmV0dXJuIGhhc2g7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZAotX2Ruc1BhY2tldF9oYXNoUVIoIERuc1BhY2tldCogIHBhY2tldCwgdW5zaWduZWQgIGhhc2ggKQotewotICAgIGhhc2ggPSBfZG5zUGFja2V0X2hhc2hRTmFtZShwYWNrZXQsIGhhc2gpOwotICAgIGhhc2ggPSBfZG5zUGFja2V0X2hhc2hCeXRlcyhwYWNrZXQsIDQsIGhhc2gpOyAvKiBUWVBFIGFuZCBDTEFTUyAqLwotICAgIHJldHVybiBoYXNoOwotfQotCi1zdGF0aWMgdW5zaWduZWQKLV9kbnNQYWNrZXRfaGFzaFF1ZXJ5KCBEbnNQYWNrZXQqICBwYWNrZXQgKQotewotICAgIHVuc2lnbmVkICBoYXNoID0gRk5WX0JBU0lTOwotICAgIGludCAgICAgICBjb3VudDsKLSAgICBfZG5zUGFja2V0X3Jld2luZChwYWNrZXQpOwotCi0gICAgLyogd2UgaWdub3JlIHRoZSBUQyBiaXQgZm9yIHJlYXNvbnMgZXhwbGFpbmVkIGluCi0gICAgICogX2Ruc1BhY2tldF9jaGVja1F1ZXJ5KCkuCi0gICAgICoKLSAgICAgKiBob3dldmVyIHdlIGhhc2ggdGhlIFJEIGJpdCB0byBkaWZmZXJlbnRpYXRlCi0gICAgICogYmV0d2VlbiBhbnN3ZXJzIGZvciByZWN1cnNpdmUgYW5kIG5vbi1yZWN1cnNpdmUKLSAgICAgKiBxdWVyaWVzLgotICAgICAqLwotICAgIGhhc2ggPSBoYXNoKkZOVl9NVUxUIF4gKHBhY2tldC0+YmFzZVsyXSAmIDEpOwotCi0gICAgLyogYXNzdW1lOiBvdGhlciBmbGFncyBhcmUgMCAqLwotICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrZXQsIDQpOwotCi0gICAgLyogcmVhZCBRRENPVU5UICovCi0gICAgY291bnQgPSBfZG5zUGFja2V0X3JlYWRJbnQxNihwYWNrZXQpOwotCi0gICAgLyogYXNzdW1lOiBBTmNvdW50LCBOU2NvdW50LCBBUmNvdW50IGFyZSAwICovCi0gICAgX2Ruc1BhY2tldF9za2lwKHBhY2tldCwgNik7Ci0KLSAgICAvKiBoYXNoIFFEQ09VTlQgUVJzICovCi0gICAgZm9yICggOyBjb3VudCA+IDA7IGNvdW50LS0gKQotICAgICAgICBoYXNoID0gX2Ruc1BhY2tldF9oYXNoUVIocGFja2V0LCBoYXNoKTsKLQotICAgIHJldHVybiBoYXNoOwotfQotCi0KLS8qKiBRVUVSWSBDT01QQVJJU09OCi0gKioKLSAqKiBUSEUgRk9MTE9XSU5HIENPREUgQVNTVU1FUyBUSEFUIFRIRSBJTlBVVCBQQUNLRVRTIEhBVkUgQUxSRUFEWQotICoqIEJFRU4gU1VDQ0VTRlVMTFkgQ0hFQ0tFRC4KLSAqKi8KLQotc3RhdGljIGludAotX2Ruc1BhY2tldF9pc0VxdWFsRG9tYWluTmFtZSggRG5zUGFja2V0KiAgcGFjazEsIERuc1BhY2tldCogIHBhY2syICkKLXsKLSAgICBjb25zdCB1aW50OF90KiAgcDEgICA9IHBhY2sxLT5jdXJzb3I7Ci0gICAgY29uc3QgdWludDhfdCogIGVuZDEgPSBwYWNrMS0+ZW5kOwotICAgIGNvbnN0IHVpbnQ4X3QqICBwMiAgID0gcGFjazItPmN1cnNvcjsKLSAgICBjb25zdCB1aW50OF90KiAgZW5kMiA9IHBhY2syLT5lbmQ7Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGludCAgYzEsIGMyOwotCi0gICAgICAgIGlmIChwMSA+PSBlbmQxIHx8IHAyID49IGVuZDIpIHsKLSAgICAgICAgICAgIFhMT0coIiVzOiBJTlRFUk5BTF9FUlJPUjogcmVhZC1vdmVyZmxvdyAhIVxuIiwgX19GVU5DVElPTl9fKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGMxID0gKnAxKys7Ci0gICAgICAgIGMyID0gKnAyKys7Ci0gICAgICAgIGlmIChjMSAhPSBjMikKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChjMSA9PSAwKSB7Ci0gICAgICAgICAgICBwYWNrMS0+Y3Vyc29yID0gcDE7Ci0gICAgICAgICAgICBwYWNrMi0+Y3Vyc29yID0gcDI7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYzEgPj0gNjQpIHsKLSAgICAgICAgICAgIFhMT0coIiVzOiBJTlRFUk5BTF9FUlJPUjogbWFsZm9ybWVkIGRvbWFpbiAhIVxuIiwgX19GVU5DVElPTl9fKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICgocDErYzEgPiBlbmQxKSB8fCAocDIrYzEgPiBlbmQyKSkgewotICAgICAgICAgICAgWExPRygiJXM6IElOVEVSTkFMX0VSUk9SOiBzaW1wbGUgbGFiZWwgcmVhZC1vdmVyZmxvdyAhIVxuIiwKLSAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtZW1jbXAocDEsIHAyLCBjMSkgIT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBwMSArPSBjMTsKLSAgICAgICAgcDIgKz0gYzE7Ci0gICAgICAgIC8qIHdlIHJlbHkgb24gdGhlIGJvdW5kIGNoZWNrcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGxvb3AgKi8KLSAgICB9Ci0gICAgLyogbm90IHRoZSBzYW1lLCBvciBvbmUgaXMgbWFsZm9ybWVkICovCi0gICAgWExPRygiZGlmZmVyZW50IEROIik7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLV9kbnNQYWNrZXRfaXNFcXVhbEJ5dGVzKCBEbnNQYWNrZXQqICBwYWNrMSwgRG5zUGFja2V0KiAgcGFjazIsIGludCAgbnVtQnl0ZXMgKQotewotICAgIGNvbnN0IHVpbnQ4X3QqICBwMSA9IHBhY2sxLT5jdXJzb3I7Ci0gICAgY29uc3QgdWludDhfdCogIHAyID0gcGFjazItPmN1cnNvcjsKLQotICAgIGlmICggcDEgKyBudW1CeXRlcyA+IHBhY2sxLT5lbmQgfHwgcDIgKyBudW1CeXRlcyA+IHBhY2syLT5lbmQgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICggbWVtY21wKHAxLCBwMiwgbnVtQnl0ZXMpICE9IDAgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHBhY2sxLT5jdXJzb3IgKz0gbnVtQnl0ZXM7Ci0gICAgcGFjazItPmN1cnNvciArPSBudW1CeXRlczsKLSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIGludAotX2Ruc1BhY2tldF9pc0VxdWFsUVIoIERuc1BhY2tldCogIHBhY2sxLCBEbnNQYWNrZXQqICBwYWNrMiApCi17Ci0gICAgLyogY29tcGFyZSBkb21haW4gbmFtZSBlbmNvZGluZyArIFRZUEUgKyBDTEFTUyAqLwotICAgIGlmICggIV9kbnNQYWNrZXRfaXNFcXVhbERvbWFpbk5hbWUocGFjazEsIHBhY2syKSB8fAotICAgICAgICAgIV9kbnNQYWNrZXRfaXNFcXVhbEJ5dGVzKHBhY2sxLCBwYWNrMiwgMisyKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQKLV9kbnNQYWNrZXRfaXNFcXVhbFF1ZXJ5KCBEbnNQYWNrZXQqICBwYWNrMSwgRG5zUGFja2V0KiAgcGFjazIgKQotewotICAgIGludCAgY291bnQxLCBjb3VudDI7Ci0KLSAgICAvKiBjb21wYXJlIHRoZSBoZWFkZXJzLCBpZ25vcmUgbW9zdCBmaWVsZHMgKi8KLSAgICBfZG5zUGFja2V0X3Jld2luZChwYWNrMSk7Ci0gICAgX2Ruc1BhY2tldF9yZXdpbmQocGFjazIpOwotCi0gICAgLyogY29tcGFyZSBSRCwgaWdub3JlIFRDLCBzZWUgY29tbWVudCBpbiBfZG5zUGFja2V0X2NoZWNrUXVlcnkgKi8KLSAgICBpZiAoKHBhY2sxLT5iYXNlWzJdICYgMSkgIT0gKHBhY2syLT5iYXNlWzJdICYgMSkpIHsKLSAgICAgICAgWExPRygiZGlmZmVyZW50IFJEIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8qIGFzc3VtZTogb3RoZXIgZmxhZ3MgYXJlIGFsbCAwICovCi0gICAgX2Ruc1BhY2tldF9za2lwKHBhY2sxLCA0KTsKLSAgICBfZG5zUGFja2V0X3NraXAocGFjazIsIDQpOwotCi0gICAgLyogY29tcGFyZSBRRENPVU5UICovCi0gICAgY291bnQxID0gX2Ruc1BhY2tldF9yZWFkSW50MTYocGFjazEpOwotICAgIGNvdW50MiA9IF9kbnNQYWNrZXRfcmVhZEludDE2KHBhY2syKTsKLSAgICBpZiAoY291bnQxICE9IGNvdW50MiB8fCBjb3VudDEgPCAwKSB7Ci0gICAgICAgIFhMT0coImRpZmZlcmVudCBRRENPVU5UIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8qIGFzc3VtZTogQU5jb3VudCwgTlNjb3VudCBhbmQgQVJjb3VudCBhcmUgYWxsIDAgKi8KLSAgICBfZG5zUGFja2V0X3NraXAocGFjazEsIDYpOwotICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrMiwgNik7Ci0KLSAgICAvKiBjb21wYXJlIHRoZSBRRENPVU5UIFFScyAqLwotICAgIGZvciAoIDsgY291bnQxID4gMDsgY291bnQxLS0gKSB7Ci0gICAgICAgIGlmICghX2Ruc1BhY2tldF9pc0VxdWFsUVIocGFjazEsIHBhY2syKSkgewotICAgICAgICAgICAgWExPRygiZGlmZmVyZW50IFFSIik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwotLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCi0vKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIGNhY2hlIGVudHJ5LiBmb3Igc2ltcGxpY2l0eSwgJ2hhc2gnIGFuZCAnaGxpbmsnIGFyZSBpbmxpbmVkIGluIHRoaXMKLSAqIHN0cnVjdHVyZSB0aG91Z2ggdGhleSBhcmUgY29uY2VwdHVhbGx5IHBhcnQgb2YgdGhlIGhhc2ggdGFibGUuCi0gKgotICogc2ltaWxhcmx5LCBtcnVfbmV4dCBhbmQgbXJ1X3ByZXYgYXJlIHBhcnQgb2YgdGhlIGdsb2JhbCBNUlUgbGlzdAotICovCi10eXBlZGVmIHN0cnVjdCBFbnRyeSB7Ci0gICAgdW5zaWduZWQgaW50ICAgICBoYXNoOyAgIC8qIGhhc2ggdmFsdWUgKi8KLSAgICBzdHJ1Y3QgRW50cnkqICAgIGhsaW5rOyAgLyogbmV4dCBpbiBjb2xsaXNpb24gY2hhaW4gKi8KLSAgICBzdHJ1Y3QgRW50cnkqICAgIG1ydV9wcmV2OwotICAgIHN0cnVjdCBFbnRyeSogICAgbXJ1X25leHQ7Ci0KLSAgICBjb25zdCB1aW50OF90KiAgIHF1ZXJ5OwotICAgIGludCAgICAgICAgICAgICAgcXVlcnlsZW47Ci0gICAgY29uc3QgdWludDhfdCogICBhbnN3ZXI7Ci0gICAgaW50ICAgICAgICAgICAgICBhbnN3ZXJsZW47Ci0gICAgdGltZV90ICAgICAgICAgICBleHBpcmVzOyAgIC8qIHRpbWVfdCB3aGVuIHRoZSBlbnRyeSBpc24ndCB2YWxpZCBhbnkgbW9yZSAqLwotICAgIGludCAgICAgICAgICAgICAgaWQ7ICAgICAgICAvKiBmb3IgZGVidWdnaW5nIHB1cnBvc2UgKi8KLX0gRW50cnk7Ci0KLS8qKgotICogRmluZCB0aGUgVFRMIGZvciBhIG5lZ2F0aXZlIEROUyByZXN1bHQuICBUaGlzIGlzIGRlZmluZWQgYXMgdGhlIG1pbmltdW0KLSAqIG9mIHRoZSBTT0EgcmVjb3JkcyBUVEwgYW5kIHRoZSBNSU5JTVVNLVRUTCBmaWVsZCAoUkZDLTIzMDgpLgotICoKLSAqIFJldHVybiAwIGlmIG5vdCBmb3VuZC4KLSAqLwotc3RhdGljIHVfbG9uZwotYW5zd2VyX2dldE5lZ2F0aXZlVFRMKG5zX21zZyBoYW5kbGUpIHsKLSAgICBpbnQgbiwgbnNjb3VudDsKLSAgICB1X2xvbmcgcmVzdWx0ID0gMDsKLSAgICBuc19yciBycjsKLQotICAgIG5zY291bnQgPSBuc19tc2dfY291bnQoaGFuZGxlLCBuc19zX25zKTsKLSAgICBmb3IgKG4gPSAwOyBuIDwgbnNjb3VudDsgbisrKSB7Ci0gICAgICAgIGlmICgobnNfcGFyc2VycigmaGFuZGxlLCBuc19zX25zLCBuLCAmcnIpID09IDApICYmIChuc19ycl90eXBlKHJyKSA9PSBuc190X3NvYSkpIHsKLSAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqcmRhdGEgPSBuc19ycl9yZGF0YShycik7IC8vIGZpbmQgdGhlIGRhdGEKLSAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqZWRhdGEgPSByZGF0YSArIG5zX3JyX3JkbGVuKHJyKTsgLy8gYWRkIHRoZSBsZW4gdG8gZmluZCB0aGUgZW5kCi0gICAgICAgICAgICBpbnQgbGVuOwotICAgICAgICAgICAgdV9sb25nIHR0bCwgcmVjX3Jlc3VsdCA9IG5zX3JyX3R0bChycik7Ci0KLSAgICAgICAgICAgIC8vIGZpbmQgdGhlIE1JTklNVU0tVFRMIGZpZWxkIGZyb20gdGhlIGJsb2Igb2YgYmluYXJ5IGRhdGEgZm9yIHRoaXMgcmVjb3JkCi0gICAgICAgICAgICAvLyBza2lwIHRoZSBzZXJ2ZXIgbmFtZQotICAgICAgICAgICAgbGVuID0gZG5fc2tpcG5hbWUocmRhdGEsIGVkYXRhKTsKLSAgICAgICAgICAgIGlmIChsZW4gPT0gLTEpIGNvbnRpbnVlOyAvLyBlcnJvciBza2lwcGluZwotICAgICAgICAgICAgcmRhdGEgKz0gbGVuOwotCi0gICAgICAgICAgICAvLyBza2lwIHRoZSBhZG1pbiBuYW1lCi0gICAgICAgICAgICBsZW4gPSBkbl9za2lwbmFtZShyZGF0YSwgZWRhdGEpOwotICAgICAgICAgICAgaWYgKGxlbiA9PSAtMSkgY29udGludWU7IC8vIGVycm9yIHNraXBwaW5nCi0gICAgICAgICAgICByZGF0YSArPSBsZW47Ci0KLSAgICAgICAgICAgIGlmIChlZGF0YSAtIHJkYXRhICE9IDUqTlNfSU5UMzJTWikgY29udGludWU7Ci0gICAgICAgICAgICAvLyBza2lwOiBzZXJpYWwgbnVtYmVyICsgcmVmcmVzaCBpbnRlcnZhbCArIHJldHJ5IGludGVydmFsICsgZXhwaXJ5Ci0gICAgICAgICAgICByZGF0YSArPSBOU19JTlQzMlNaICogNDsKLSAgICAgICAgICAgIC8vIGZpbmFsbHkgcmVhZCB0aGUgTUlOSU1VTSBUVEwKLSAgICAgICAgICAgIHR0bCA9IG5zX2dldDMyKHJkYXRhKTsKLSAgICAgICAgICAgIGlmICh0dGwgPCByZWNfcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgcmVjX3Jlc3VsdCA9IHR0bDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIE5vdyB0aGF0IHRoZSByZWNvcmQgaXMgcmVhZCBzdWNjZXNzZnVsbHksIGFwcGx5IHRoZSBuZXcgbWluIFRUTAotICAgICAgICAgICAgaWYgKG4gPT0gMCB8fCByZWNfcmVzdWx0IDwgcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVjX3Jlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIFBhcnNlIHRoZSBhbnN3ZXIgcmVjb3JkcyBhbmQgZmluZCB0aGUgYXBwcm9wcmlhdGUKLSAqIHNtYWxsZXN0IFRUTCBhbW9uZyB0aGUgcmVjb3Jkcy4gIFRoaXMgbWlnaHQgYmUgZnJvbQotICogdGhlIGFuc3dlciByZWNvcmRzIGlmIGZvdW5kIG9yIGZyb20gdGhlIFNPQSByZWNvcmQKLSAqIGlmIGl0J3MgYSBuZWdhdGl2ZSByZXN1bHQuCi0gKgotICogVGhlIHJldHVybmVkIFRUTCBpcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8KLSAqIGtlZXAgdGhlIGFuc3dlciBpbiB0aGUgY2FjaGUuCi0gKgotICogSW4gY2FzZSBvZiBwYXJzZSBlcnJvciB6ZXJvICgwKSBpcyByZXR1cm5lZCB3aGljaAotICogaW5kaWNhdGVzIHRoYXQgdGhlIGFuc3dlciBzaGFsbCBub3QgYmUgY2FjaGVkLgotICovCi1zdGF0aWMgdV9sb25nCi1hbnN3ZXJfZ2V0VFRMKGNvbnN0IHZvaWQqIGFuc3dlciwgaW50IGFuc3dlcmxlbikKLXsKLSAgICBuc19tc2cgaGFuZGxlOwotICAgIGludCBhbmNvdW50LCBuOwotICAgIHVfbG9uZyByZXN1bHQsIHR0bDsKLSAgICBuc19yciBycjsKLQotICAgIHJlc3VsdCA9IDA7Ci0gICAgaWYgKG5zX2luaXRwYXJzZShhbnN3ZXIsIGFuc3dlcmxlbiwgJmhhbmRsZSkgPj0gMCkgewotICAgICAgICAvLyBnZXQgbnVtYmVyIG9mIGFuc3dlciByZWNvcmRzCi0gICAgICAgIGFuY291bnQgPSBuc19tc2dfY291bnQoaGFuZGxlLCBuc19zX2FuKTsKLQotICAgICAgICBpZiAoYW5jb3VudCA9PSAwKSB7Ci0gICAgICAgICAgICAvLyBhIHJlc3BvbnNlIHdpdGggbm8gYW5zd2Vycz8gIENhY2hlIHRoaXMgbmVnYXRpdmUgcmVzdWx0LgotICAgICAgICAgICAgcmVzdWx0ID0gYW5zd2VyX2dldE5lZ2F0aXZlVFRMKGhhbmRsZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgYW5jb3VudDsgbisrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5zX3BhcnNlcnIoJmhhbmRsZSwgbnNfc19hbiwgbiwgJnJyKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHR0bCA9IG5zX3JyX3R0bChycik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuID09IDAgfHwgdHRsIDwgcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0dGw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBYTE9HKCJuc19wYXJzZXJyIGZhaWxlZCBhbmNvdW50IG5vID0gJWQuIGVycm5vID0gJXNcbiIsIG4sIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgWExPRygibnNfcGFyc2VyciBmYWlsZWQuICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgIH0KLQotICAgIFhMT0coIlRUTCA9ICVkXG4iLCByZXN1bHQpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQKLWVudHJ5X2ZyZWUoIEVudHJ5KiAgZSApCi17Ci0gICAgLyogZXZlcnl0aGluZyBpcyBhbGxvY2F0ZWQgaW4gYSBzaW5nbGUgbWVtb3J5IGJsb2NrICovCi0gICAgaWYgKGUpIHsKLSAgICAgICAgZnJlZShlKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLWVudHJ5X21ydV9yZW1vdmUoIEVudHJ5KiAgZSApCi17Ci0gICAgZS0+bXJ1X3ByZXYtPm1ydV9uZXh0ID0gZS0+bXJ1X25leHQ7Ci0gICAgZS0+bXJ1X25leHQtPm1ydV9wcmV2ID0gZS0+bXJ1X3ByZXY7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLWVudHJ5X21ydV9hZGQoIEVudHJ5KiAgZSwgRW50cnkqICBsaXN0ICkKLXsKLSAgICBFbnRyeSogIGZpcnN0ID0gbGlzdC0+bXJ1X25leHQ7Ci0KLSAgICBlLT5tcnVfbmV4dCA9IGZpcnN0OwotICAgIGUtPm1ydV9wcmV2ID0gbGlzdDsKLQotICAgIGxpc3QtPm1ydV9uZXh0ICA9IGU7Ci0gICAgZmlyc3QtPm1ydV9wcmV2ID0gZTsKLX0KLQotLyogY29tcHV0ZSB0aGUgaGFzaCBvZiBhIGdpdmVuIGVudHJ5LCB0aGlzIGlzIGEgaGFzaCBvZiBtb3N0Ci0gKiBkYXRhIGluIHRoZSBxdWVyeSAoa2V5KSAqLwotc3RhdGljIHVuc2lnbmVkCi1lbnRyeV9oYXNoKCBjb25zdCBFbnRyeSogIGUgKQotewotICAgIERuc1BhY2tldCAgcGFja1sxXTsKLQotICAgIF9kbnNQYWNrZXRfaW5pdChwYWNrLCBlLT5xdWVyeSwgZS0+cXVlcnlsZW4pOwotICAgIHJldHVybiBfZG5zUGFja2V0X2hhc2hRdWVyeShwYWNrKTsKLX0KLQotLyogaW5pdGlhbGl6ZSBhbiBFbnRyeSBhcyBhIHNlYXJjaCBrZXksIHRoaXMgYWxzbyBjaGVja3MgdGhlIGlucHV0IHF1ZXJ5IHBhY2tldAotICogcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIG9yIDAgaW4gY2FzZSBvZiB1bnN1cHBvcnRlZC9tYWxmb3JtZWQgZGF0YSAqLwotc3RhdGljIGludAotZW50cnlfaW5pdF9rZXkoIEVudHJ5KiAgZSwgY29uc3Qgdm9pZCogIHF1ZXJ5LCBpbnQgIHF1ZXJ5bGVuICkKLXsKLSAgICBEbnNQYWNrZXQgIHBhY2tbMV07Ci0KLSAgICBtZW1zZXQoZSwgMCwgc2l6ZW9mKCplKSk7Ci0KLSAgICBlLT5xdWVyeSAgICA9IHF1ZXJ5OwotICAgIGUtPnF1ZXJ5bGVuID0gcXVlcnlsZW47Ci0gICAgZS0+aGFzaCAgICAgPSBlbnRyeV9oYXNoKGUpOwotCi0gICAgX2Ruc1BhY2tldF9pbml0KHBhY2ssIHF1ZXJ5LCBxdWVyeWxlbik7Ci0KLSAgICByZXR1cm4gX2Ruc1BhY2tldF9jaGVja1F1ZXJ5KHBhY2spOwotfQotCi0vKiBhbGxvY2F0ZSBhIG5ldyBlbnRyeSBhcyBhIGNhY2hlIG5vZGUgKi8KLXN0YXRpYyBFbnRyeSoKLWVudHJ5X2FsbG9jKCBjb25zdCBFbnRyeSogIGluaXQsIGNvbnN0IHZvaWQqICBhbnN3ZXIsIGludCAgYW5zd2VybGVuICkKLXsKLSAgICBFbnRyeSogIGU7Ci0gICAgaW50ICAgICBzaXplOwotCi0gICAgc2l6ZSA9IHNpemVvZigqZSkgKyBpbml0LT5xdWVyeWxlbiArIGFuc3dlcmxlbjsKLSAgICBlICAgID0gY2FsbG9jKHNpemUsIDEpOwotICAgIGlmIChlID09IE5VTEwpCi0gICAgICAgIHJldHVybiBlOwotCi0gICAgZS0+aGFzaCAgICAgPSBpbml0LT5oYXNoOwotICAgIGUtPnF1ZXJ5ICAgID0gKGNvbnN0IHVpbnQ4X3QqKShlKzEpOwotICAgIGUtPnF1ZXJ5bGVuID0gaW5pdC0+cXVlcnlsZW47Ci0KLSAgICBtZW1jcHkoIChjaGFyKillLT5xdWVyeSwgaW5pdC0+cXVlcnksIGUtPnF1ZXJ5bGVuICk7Ci0KLSAgICBlLT5hbnN3ZXIgICAgPSBlLT5xdWVyeSArIGUtPnF1ZXJ5bGVuOwotICAgIGUtPmFuc3dlcmxlbiA9IGFuc3dlcmxlbjsKLQotICAgIG1lbWNweSggKGNoYXIqKWUtPmFuc3dlciwgYW5zd2VyLCBlLT5hbnN3ZXJsZW4gKTsKLQotICAgIHJldHVybiBlOwotfQotCi1zdGF0aWMgaW50Ci1lbnRyeV9lcXVhbHMoIGNvbnN0IEVudHJ5KiAgZTEsIGNvbnN0IEVudHJ5KiAgZTIgKQotewotICAgIERuc1BhY2tldCAgcGFjazFbMV0sIHBhY2syWzFdOwotCi0gICAgaWYgKGUxLT5xdWVyeWxlbiAhPSBlMi0+cXVlcnlsZW4pIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIF9kbnNQYWNrZXRfaW5pdChwYWNrMSwgZTEtPnF1ZXJ5LCBlMS0+cXVlcnlsZW4pOwotICAgIF9kbnNQYWNrZXRfaW5pdChwYWNrMiwgZTItPnF1ZXJ5LCBlMi0+cXVlcnlsZW4pOwotCi0gICAgcmV0dXJuIF9kbnNQYWNrZXRfaXNFcXVhbFF1ZXJ5KHBhY2sxLCBwYWNrMik7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLS8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwotLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBXZSB1c2UgYSBzaW1wbGUgaGFzaCB0YWJsZSB3aXRoIGV4dGVybmFsIGNvbGxpc2lvbiBsaXN0cwotICogZm9yIHNpbXBsaWNpdHksIHRoZSBoYXNoLXRhYmxlIGZpZWxkcyAnaGFzaCcgYW5kICdobGluaycgYXJlCi0gKiBpbmxpbmVkIGluIHRoZSBFbnRyeSBzdHJ1Y3R1cmUuCi0gKi8KLQotLyogTWF4aW11bSB0aW1lIGZvciBhIHRocmVhZCB0byB3YWl0IGZvciBhbiBwZW5kaW5nIHJlcXVlc3QgKi8KLSNkZWZpbmUgUEVORElOR19SRVFVRVNUX1RJTUVPVVQgMjA7Ci0KLXR5cGVkZWYgc3RydWN0IHBlbmRpbmdfcmVxX2luZm8gewotICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBoYXNoOwotICAgIHB0aHJlYWRfY29uZF90ICAgICAgICAgICAgICBjb25kOwotICAgIHN0cnVjdCBwZW5kaW5nX3JlcV9pbmZvKiAgICBuZXh0OwotfSBQZW5kaW5nUmVxSW5mbzsKLQotdHlwZWRlZiBzdHJ1Y3QgcmVzb2x2X2NhY2hlIHsKLSAgICBpbnQgICAgICAgICAgICAgIG1heF9lbnRyaWVzOwotICAgIGludCAgICAgICAgICAgICAgbnVtX2VudHJpZXM7Ci0gICAgRW50cnkgICAgICAgICAgICBtcnVfbGlzdDsKLSAgICBwdGhyZWFkX211dGV4X3QgIGxvY2s7Ci0gICAgdW5zaWduZWQgICAgICAgICBnZW5lcmF0aW9uOwotICAgIGludCAgICAgICAgICAgICAgbGFzdF9pZDsKLSAgICBFbnRyeSogICAgICAgICAgIGVudHJpZXM7Ci0gICAgUGVuZGluZ1JlcUluZm8gICBwZW5kaW5nX3JlcXVlc3RzOwotfSBDYWNoZTsKLQotdHlwZWRlZiBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8gewotICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICBpZm5hbWVbSUZfTkFNRVNJWkUgKyAxXTsKLSAgICBzdHJ1Y3QgaW5fYWRkciAgICAgICAgICAgICAgaWZhZGRyOwotICAgIENhY2hlKiAgICAgICAgICAgICAgICAgICAgICBjYWNoZTsKLSAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qICAgbmV4dDsKLSAgICBjaGFyKiAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNlcnZlcnNbTUFYTlMgKzFdOwotICAgIHN0cnVjdCBhZGRyaW5mbyogICAgICAgICAgICBuc2FkZHJpbmZvW01BWE5TICsgMV07Ci0gICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgIGRlZmRuYW1lWzI1Nl07Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGRuc3JjaF9vZmZzZXRbTUFYRE5TUkNIKzFdOyAgLy8gb2Zmc2V0cyBpbnRvIGRlZmRuYW1lCi19IENhY2hlSW5mbzsKLQotdHlwZWRlZiBzdHJ1Y3QgcmVzb2x2X3BpZGlmYWNlX2luZm8gewotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlkOwotICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZuYW1lW0lGX05BTUVTSVpFICsgMV07Ci0gICAgc3RydWN0IHJlc29sdl9waWRpZmFjZV9pbmZvKiAgICBuZXh0OwotfSBQaWRJZmFjZUluZm87Ci10eXBlZGVmIHN0cnVjdCByZXNvbHZfdWlkaWZhY2VfaW5mbyB7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfc3RhcnQ7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfZW5kOwotICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZuYW1lW0lGX05BTUVTSVpFICsgMV07Ci0gICAgc3RydWN0IHJlc29sdl91aWRpZmFjZV9pbmZvKiAgICBuZXh0OwotfSBVaWRJZmFjZUluZm87Ci0KLSNkZWZpbmUgIEhUQUJMRV9WQUxJRCh4KSAgKCh4KSAhPSBOVUxMICYmICh4KSAhPSBIVEFCTEVfREVMRVRFRCkKLQotc3RhdGljIHZvaWQKLV9jYWNoZV9mbHVzaF9wZW5kaW5nX3JlcXVlc3RzX2xvY2tlZCggc3RydWN0IHJlc29sdl9jYWNoZSogY2FjaGUgKQotewotICAgIHN0cnVjdCBwZW5kaW5nX3JlcV9pbmZvICpyaSwgKnRtcDsKLSAgICBpZiAoY2FjaGUpIHsKLSAgICAgICAgcmkgPSBjYWNoZS0+cGVuZGluZ19yZXF1ZXN0cy5uZXh0OwotCi0gICAgICAgIHdoaWxlIChyaSkgewotICAgICAgICAgICAgdG1wID0gcmk7Ci0gICAgICAgICAgICByaSA9IHJpLT5uZXh0OwotICAgICAgICAgICAgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmdG1wLT5jb25kKTsKLQotICAgICAgICAgICAgcHRocmVhZF9jb25kX2Rlc3Ryb3koJnRtcC0+Y29uZCk7Ci0gICAgICAgICAgICBmcmVlKHRtcCk7Ci0gICAgICAgIH0KLQotICAgICAgICBjYWNoZS0+cGVuZGluZ19yZXF1ZXN0cy5uZXh0ID0gTlVMTDsKLSAgICB9Ci19Ci0KLS8qIHJldHVybiAwIGlmIG5vIHBlbmRpbmcgcmVxdWVzdCBpcyBmb3VuZCBtYXRjaGluZyB0aGUga2V5Ci0gKiBpZiBhIG1hdGNoaW5nIHJlcXVlc3QgaXMgZm91bmQgdGhlIGNhbGxpbmcgdGhyZWFkIHdpbGwgd2FpdAotICogYW5kIHJldHVybiAxIHdoZW4gcmVsZWFzZWQgKi8KLXN0YXRpYyBpbnQKLV9jYWNoZV9jaGVja19wZW5kaW5nX3JlcXVlc3RfbG9ja2VkKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiBjYWNoZSwgRW50cnkqIGtleSApCi17Ci0gICAgc3RydWN0IHBlbmRpbmdfcmVxX2luZm8gKnJpLCAqcHJldjsKLSAgICBpbnQgZXhpc3QgPSAwOwotCi0gICAgaWYgKGNhY2hlICYmIGtleSkgewotICAgICAgICByaSA9IGNhY2hlLT5wZW5kaW5nX3JlcXVlc3RzLm5leHQ7Ci0gICAgICAgIHByZXYgPSAmY2FjaGUtPnBlbmRpbmdfcmVxdWVzdHM7Ci0gICAgICAgIHdoaWxlIChyaSkgewotICAgICAgICAgICAgaWYgKHJpLT5oYXNoID09IGtleS0+aGFzaCkgewotICAgICAgICAgICAgICAgIGV4aXN0ID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByZXYgPSByaTsKLSAgICAgICAgICAgIHJpID0gcmktPm5leHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWV4aXN0KSB7Ci0gICAgICAgICAgICByaSA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBlbmRpbmdfcmVxX2luZm8pKTsKLSAgICAgICAgICAgIGlmIChyaSkgewotICAgICAgICAgICAgICAgIHJpLT5oYXNoID0ga2V5LT5oYXNoOwotICAgICAgICAgICAgICAgIHB0aHJlYWRfY29uZF9pbml0KCZyaS0+Y29uZCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgcHJldi0+bmV4dCA9IHJpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzID0gezAsMH07Ci0gICAgICAgICAgICBYTE9HKCJXYWl0aW5nIGZvciBwcmV2aW91cyByZXF1ZXN0Iik7Ci0gICAgICAgICAgICB0cy50dl9zZWMgPSBfdGltZV9ub3coKSArIFBFTkRJTkdfUkVRVUVTVF9USU1FT1VUOwotICAgICAgICAgICAgcHRocmVhZF9jb25kX3RpbWVkd2FpdCgmcmktPmNvbmQsICZjYWNoZS0+bG9jaywgJnRzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBleGlzdDsKLX0KLQotLyogbm90aWZ5IGFueSB3YWl0aW5nIHRocmVhZCB0aGF0IHdhaXRpbmcgb24gYSByZXF1ZXN0Ci0gKiBtYXRjaGluZyB0aGUga2V5IGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBjYWNoZSAqLwotc3RhdGljIHZvaWQKLV9jYWNoZV9ub3RpZnlfd2FpdGluZ190aWRfbG9ja2VkKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiBjYWNoZSwgRW50cnkqIGtleSApCi17Ci0gICAgc3RydWN0IHBlbmRpbmdfcmVxX2luZm8gKnJpLCAqcHJldjsKLQotICAgIGlmIChjYWNoZSAmJiBrZXkpIHsKLSAgICAgICAgcmkgPSBjYWNoZS0+cGVuZGluZ19yZXF1ZXN0cy5uZXh0OwotICAgICAgICBwcmV2ID0gJmNhY2hlLT5wZW5kaW5nX3JlcXVlc3RzOwotICAgICAgICB3aGlsZSAocmkpIHsKLSAgICAgICAgICAgIGlmIChyaS0+aGFzaCA9PSBrZXktPmhhc2gpIHsKLSAgICAgICAgICAgICAgICBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZyaS0+Y29uZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmV2ID0gcmk7Ci0gICAgICAgICAgICByaSA9IHJpLT5uZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gcmVtb3ZlIGl0ZW0gZnJvbSBsaXN0IGFuZCBkZXN0cm95Ci0gICAgICAgIGlmIChyaSkgewotICAgICAgICAgICAgcHJldi0+bmV4dCA9IHJpLT5uZXh0OwotICAgICAgICAgICAgcHRocmVhZF9jb25kX2Rlc3Ryb3koJnJpLT5jb25kKTsKLSAgICAgICAgICAgIGZyZWUocmkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vKiBub3RpZnkgdGhlIGNhY2hlIHRoYXQgdGhlIHF1ZXJ5IGZhaWxlZCAqLwotdm9pZAotX3Jlc29sdl9jYWNoZV9xdWVyeV9mYWlsZWQoIHN0cnVjdCByZXNvbHZfY2FjaGUqIGNhY2hlLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIHF1ZXJ5LAotICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgIHF1ZXJ5bGVuKQotewotICAgIEVudHJ5ICAgIGtleVsxXTsKLQotICAgIGlmIChjYWNoZSAmJiBlbnRyeV9pbml0X2tleShrZXksIHF1ZXJ5LCBxdWVyeWxlbikpIHsKLSAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZjYWNoZS0+bG9jayk7Ci0gICAgICAgIF9jYWNoZV9ub3RpZnlfd2FpdGluZ190aWRfbG9ja2VkKGNhY2hlLCBrZXkpOwotICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmY2FjaGUtPmxvY2spOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLV9jYWNoZV9mbHVzaF9sb2NrZWQoIENhY2hlKiAgY2FjaGUgKQotewotICAgIGludCAgICAgbm47Ci0KLSAgICBmb3IgKG5uID0gMDsgbm4gPCBjYWNoZS0+bWF4X2VudHJpZXM7IG5uKyspCi0gICAgewotICAgICAgICBFbnRyeSoqICBwbm9kZSA9IChFbnRyeSoqKSAmY2FjaGUtPmVudHJpZXNbbm5dOwotCi0gICAgICAgIHdoaWxlICgqcG5vZGUgIT0gTlVMTCkgewotICAgICAgICAgICAgRW50cnkqICBub2RlID0gKnBub2RlOwotICAgICAgICAgICAgKnBub2RlID0gbm9kZS0+aGxpbms7Ci0gICAgICAgICAgICBlbnRyeV9mcmVlKG5vZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gZmx1c2ggcGVuZGluZyByZXF1ZXN0Ci0gICAgX2NhY2hlX2ZsdXNoX3BlbmRpbmdfcmVxdWVzdHNfbG9ja2VkKGNhY2hlKTsKLQotICAgIGNhY2hlLT5tcnVfbGlzdC5tcnVfbmV4dCA9IGNhY2hlLT5tcnVfbGlzdC5tcnVfcHJldiA9ICZjYWNoZS0+bXJ1X2xpc3Q7Ci0gICAgY2FjaGUtPm51bV9lbnRyaWVzICAgICAgID0gMDsKLSAgICBjYWNoZS0+bGFzdF9pZCAgICAgICAgICAgPSAwOwotCi0gICAgWExPRygiKioqKioqKioqKioqKioqKioqKioqKioqKlxuIgotICAgICAgICAgIioqKiBETlMgQ0FDSEUgRkxVU0hFRCAqKipcbiIKLSAgICAgICAgICIqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci19Ci0KLXN0YXRpYyBpbnQKLV9yZXNfY2FjaGVfZ2V0X21heF9lbnRyaWVzKCB2b2lkICkKLXsKLSAgICBpbnQgY2FjaGVfc2l6ZSA9IENPTkZJR19NQVhfRU5UUklFUzsKLQotICAgIGNvbnN0IGNoYXIqIGNhY2hlX21vZGUgPSBnZXRlbnYoIkFORFJPSURfRE5TX01PREUiKTsKLSAgICBpZiAoY2FjaGVfbW9kZSA9PSBOVUxMIHx8IHN0cmNtcChjYWNoZV9tb2RlLCAibG9jYWwiKSAhPSAwKSB7Ci0gICAgICAgIC8vIERvbid0IHVzZSB0aGUgY2FjaGUgaW4gbG9jYWwgbW9kZS4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBwcm94eSBpdHNlbGYuCi0gICAgICAgIGNhY2hlX3NpemUgPSAwOwotICAgIH0KLQotICAgIFhMT0coImNhY2hlIHNpemU6ICVkIiwgY2FjaGVfc2l6ZSk7Ci0gICAgcmV0dXJuIGNhY2hlX3NpemU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlKgotX3Jlc29sdl9jYWNoZV9jcmVhdGUoIHZvaWQgKQotewotICAgIHN0cnVjdCByZXNvbHZfY2FjaGUqICBjYWNoZTsKLQotICAgIGNhY2hlID0gY2FsbG9jKHNpemVvZigqY2FjaGUpLCAxKTsKLSAgICBpZiAoY2FjaGUpIHsKLSAgICAgICAgY2FjaGUtPm1heF9lbnRyaWVzID0gX3Jlc19jYWNoZV9nZXRfbWF4X2VudHJpZXMoKTsKLSAgICAgICAgY2FjaGUtPmVudHJpZXMgPSBjYWxsb2Moc2l6ZW9mKCpjYWNoZS0+ZW50cmllcyksIGNhY2hlLT5tYXhfZW50cmllcyk7Ci0gICAgICAgIGlmIChjYWNoZS0+ZW50cmllcykgewotICAgICAgICAgICAgY2FjaGUtPmdlbmVyYXRpb24gPSB+MFU7Ci0gICAgICAgICAgICBwdGhyZWFkX211dGV4X2luaXQoICZjYWNoZS0+bG9jaywgTlVMTCApOwotICAgICAgICAgICAgY2FjaGUtPm1ydV9saXN0Lm1ydV9wcmV2ID0gY2FjaGUtPm1ydV9saXN0Lm1ydV9uZXh0ID0gJmNhY2hlLT5tcnVfbGlzdDsKLSAgICAgICAgICAgIFhMT0coIiVzOiBjYWNoZSBjcmVhdGVkXG4iLCBfX0ZVTkNUSU9OX18pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZnJlZShjYWNoZSk7Ci0gICAgICAgICAgICBjYWNoZSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGNhY2hlOwotfQotCi0KLSNpZiBERUJVRwotc3RhdGljIHZvaWQKLV9kdW1wX3F1ZXJ5KCBjb25zdCB1aW50OF90KiAgcXVlcnksIGludCAgcXVlcnlsZW4gKQotewotICAgIGNoYXIgICAgICAgdGVtcFsyNTZdLCAqcD10ZW1wLCAqZW5kPXArc2l6ZW9mKHRlbXApOwotICAgIERuc1BhY2tldCAgcGFja1sxXTsKLQotICAgIF9kbnNQYWNrZXRfaW5pdChwYWNrLCBxdWVyeSwgcXVlcnlsZW4pOwotICAgIHAgPSBfZG5zUGFja2V0X2JwcmludFF1ZXJ5KHBhY2ssIHAsIGVuZCk7Ci0gICAgWExPRygiUVVFUlk6ICVzIiwgdGVtcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fY2FjaGVfZHVtcF9tcnUoIENhY2hlKiAgY2FjaGUgKQotewotICAgIGNoYXIgICAgdGVtcFs1MTJdLCAqcD10ZW1wLCAqZW5kPXArc2l6ZW9mKHRlbXApOwotICAgIEVudHJ5KiAgZTsKLQotICAgIHAgPSBfYnByaW50KHRlbXAsIGVuZCwgIk1SVSBMSVNUICglMmQpOiAiLCBjYWNoZS0+bnVtX2VudHJpZXMpOwotICAgIGZvciAoZSA9IGNhY2hlLT5tcnVfbGlzdC5tcnVfbmV4dDsgZSAhPSAmY2FjaGUtPm1ydV9saXN0OyBlID0gZS0+bXJ1X25leHQpCi0gICAgICAgIHAgPSBfYnByaW50KHAsIGVuZCwgIiAlZCIsIGUtPmlkKTsKLQotICAgIFhMT0coIiVzIiwgdGVtcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fZHVtcF9hbnN3ZXIoY29uc3Qgdm9pZCogYW5zd2VyLCBpbnQgYW5zd2VybGVuKQotewotICAgIHJlc19zdGF0ZSBzdGF0ZXA7Ci0gICAgRklMRSogZnA7Ci0gICAgY2hhciogYnVmOwotICAgIGludCBmaWxlTGVuOwotCi0gICAgZnAgPSBmb3BlbigiL2RhdGEvcmVzbG9nLnR4dCIsICJ3KyIpOwotICAgIGlmIChmcCAhPSBOVUxMKSB7Ci0gICAgICAgIHN0YXRlcCA9IF9fcmVzX2dldF9zdGF0ZSgpOwotCi0gICAgICAgIHJlc19wcXVlcnkoc3RhdGVwLCBhbnN3ZXIsIGFuc3dlcmxlbiwgZnApOwotCi0gICAgICAgIC8vR2V0IGZpbGUgbGVuZ3RoCi0gICAgICAgIGZzZWVrKGZwLCAwLCBTRUVLX0VORCk7Ci0gICAgICAgIGZpbGVMZW49ZnRlbGwoZnApOwotICAgICAgICBmc2VlayhmcCwgMCwgU0VFS19TRVQpOwotICAgICAgICBidWYgPSAoY2hhciAqKW1hbGxvYyhmaWxlTGVuKzEpOwotICAgICAgICBpZiAoYnVmICE9IE5VTEwpIHsKLSAgICAgICAgICAgIC8vUmVhZCBmaWxlIGNvbnRlbnRzIGludG8gYnVmZmVyCi0gICAgICAgICAgICBmcmVhZChidWYsIGZpbGVMZW4sIDEsIGZwKTsKLSAgICAgICAgICAgIFhMT0coIiVzXG4iLCBidWYpOwotICAgICAgICAgICAgZnJlZShidWYpOwotICAgICAgICB9Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZSgiL2RhdGEvcmVzbG9nLnR4dCIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgZXJybm8gPSAwOyAvLyBlbHNlIGRlYnVnIGlzIGludHJvZHVjaW5nIGVycm9yIHNpZ25hbHMKLSAgICAgICAgWExPRygiX2R1bXBfYW5zd2VyOiBjYW4ndCBvcGVuIGZpbGVcbiIpOwotICAgIH0KLX0KLSNlbmRpZgotCi0jaWYgREVCVUcKLSMgIGRlZmluZSAgWExPR19RVUVSWShxLGxlbikgICBfZHVtcF9xdWVyeSgocSksIChsZW4pKQotIyAgZGVmaW5lICBYTE9HX0FOU1dFUihhLCBsZW4pIF9kdW1wX2Fuc3dlcigoYSksIChsZW4pKQotI2Vsc2UKLSMgIGRlZmluZSAgWExPR19RVUVSWShxLGxlbikgICAoKHZvaWQpMCkKLSMgIGRlZmluZSAgWExPR19BTlNXRVIoYSxsZW4pICAoKHZvaWQpMCkKLSNlbmRpZgotCi0vKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGZpbmQgYSBrZXkgd2l0aGluIHRoZSBoYXNoIHRhYmxlCi0gKiBJbiBjYXNlIG9mIHN1Y2Nlc3MsIGl0IHdpbGwgcmV0dXJuIGEgKnBvaW50ZXIqIHRvIHRoZSBoYXNoZWQga2V5LgotICogSW4gY2FzZSBvZiBmYWlsdXJlLCBpdCB3aWxsIHJldHVybiBhICpwb2ludGVyKiB0byBOVUxMCi0gKgotICogU28sIHRoZSBjYWxsZXIgbXVzdCBjaGVjayAnKnJlc3VsdCcgdG8gY2hlY2sgZm9yIHN1Y2Nlc3MvZmFpbHVyZS4KLSAqCi0gKiBUaGUgbWFpbiBpZGVhIGlzIHRoYXQgdGhlIHJlc3VsdCBjYW4gbGF0ZXIgYmUgdXNlZCBkaXJlY3RseSBpbgotICogY2FsbHMgdG8gX3Jlc29sdl9jYWNoZV9hZGQgb3IgX3Jlc29sdl9jYWNoZV9yZW1vdmUgYXMgdGhlICdsb29rdXAnCi0gKiBwYXJhbWV0ZXIuIFRoaXMgbWFrZXMgdGhlIGNvZGUgc2ltcGxlciBhbmQgYXZvaWRzIHJlLXNlYXJjaGluZwotICogZm9yIHRoZSBrZXkgcG9zaXRpb24gaW4gdGhlIGh0YWJsZS4KLSAqCi0gKiBUaGUgcmVzdWx0IG9mIGEgbG9va3VwX3AgaXMgb25seSB2YWxpZCB1bnRpbCB5b3UgYWx0ZXIgdGhlIGhhc2gKLSAqIHRhYmxlLgotICovCi1zdGF0aWMgRW50cnkqKgotX2NhY2hlX2xvb2t1cF9wKCBDYWNoZSogICBjYWNoZSwKLSAgICAgICAgICAgICAgICAgRW50cnkqICAga2V5ICkKLXsKLSAgICBpbnQgICAgICBpbmRleCA9IGtleS0+aGFzaCAlIGNhY2hlLT5tYXhfZW50cmllczsKLSAgICBFbnRyeSoqICBwbm9kZSA9IChFbnRyeSoqKSAmY2FjaGUtPmVudHJpZXNbIGluZGV4IF07Ci0KLSAgICB3aGlsZSAoKnBub2RlICE9IE5VTEwpIHsKLSAgICAgICAgRW50cnkqICBub2RlID0gKnBub2RlOwotCi0gICAgICAgIGlmIChub2RlID09IE5VTEwpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobm9kZS0+aGFzaCA9PSBrZXktPmhhc2ggJiYgZW50cnlfZXF1YWxzKG5vZGUsIGtleSkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBwbm9kZSA9ICZub2RlLT5obGluazsKLSAgICB9Ci0gICAgcmV0dXJuIHBub2RlOwotfQotCi0vKiBBZGQgYSBuZXcgZW50cnkgdG8gdGhlIGhhc2ggdGFibGUuICdsb29rdXAnIG11c3QgYmUgdGhlCi0gKiByZXN1bHQgb2YgYW4gaW1tZWRpYXRlIHByZXZpb3VzIGZhaWxlZCBfbG9va3VwX3AoKSBjYWxsCi0gKiAoaS5lLiB3aXRoICpsb29rdXAgPT0gTlVMTCksIGFuZCAnZScgaXMgdGhlIHBvaW50ZXIgdG8gdGhlCi0gKiBuZXdseSBjcmVhdGVkIGVudHJ5Ci0gKi8KLXN0YXRpYyB2b2lkCi1fY2FjaGVfYWRkX3AoIENhY2hlKiAgIGNhY2hlLAotICAgICAgICAgICAgICBFbnRyeSoqICBsb29rdXAsCi0gICAgICAgICAgICAgIEVudHJ5KiAgIGUgKQotewotICAgICpsb29rdXAgPSBlOwotICAgIGUtPmlkID0gKytjYWNoZS0+bGFzdF9pZDsKLSAgICBlbnRyeV9tcnVfYWRkKGUsICZjYWNoZS0+bXJ1X2xpc3QpOwotICAgIGNhY2hlLT5udW1fZW50cmllcyArPSAxOwotCi0gICAgWExPRygiJXM6IGVudHJ5ICVkIGFkZGVkIChjb3VudD0lZCkiLCBfX0ZVTkNUSU9OX18sCi0gICAgICAgICBlLT5pZCwgY2FjaGUtPm51bV9lbnRyaWVzKTsKLX0KLQotLyogUmVtb3ZlIGFuIGV4aXN0aW5nIGVudHJ5IGZyb20gdGhlIGhhc2ggdGFibGUsCi0gKiAnbG9va3VwJyBtdXN0IGJlIHRoZSByZXN1bHQgb2YgYW4gaW1tZWRpYXRlIHByZXZpb3VzCi0gKiBhbmQgc3VjY2VzZnVsIF9sb29rdXBfcCgpIGNhbGwuCi0gKi8KLXN0YXRpYyB2b2lkCi1fY2FjaGVfcmVtb3ZlX3AoIENhY2hlKiAgIGNhY2hlLAotICAgICAgICAgICAgICAgICBFbnRyeSoqICBsb29rdXAgKQotewotICAgIEVudHJ5KiAgZSAgPSAqbG9va3VwOwotCi0gICAgWExPRygiJXM6IGVudHJ5ICVkIHJlbW92ZWQgKGNvdW50PSVkKSIsIF9fRlVOQ1RJT05fXywKLSAgICAgICAgIGUtPmlkLCBjYWNoZS0+bnVtX2VudHJpZXMtMSk7Ci0KLSAgICBlbnRyeV9tcnVfcmVtb3ZlKGUpOwotICAgICpsb29rdXAgPSBlLT5obGluazsKLSAgICBlbnRyeV9mcmVlKGUpOwotICAgIGNhY2hlLT5udW1fZW50cmllcyAtPSAxOwotfQotCi0vKiBSZW1vdmUgdGhlIG9sZGVzdCBlbnRyeSBmcm9tIHRoZSBoYXNoIHRhYmxlLgotICovCi1zdGF0aWMgdm9pZAotX2NhY2hlX3JlbW92ZV9vbGRlc3QoIENhY2hlKiAgY2FjaGUgKQotewotICAgIEVudHJ5KiAgIG9sZGVzdCA9IGNhY2hlLT5tcnVfbGlzdC5tcnVfcHJldjsKLSAgICBFbnRyeSoqICBsb29rdXAgPSBfY2FjaGVfbG9va3VwX3AoY2FjaGUsIG9sZGVzdCk7Ci0KLSAgICBpZiAoKmxvb2t1cCA9PSBOVUxMKSB7IC8qIHNob3VsZCBub3QgaGFwcGVuICovCi0gICAgICAgIFhMT0coIiVzOiBPTERFU1QgTk9UIElOIEhUQUJMRSA/IiwgX19GVU5DVElPTl9fKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgWExPRygiQ2FjaGUgZnVsbCAtIHJlbW92aW5nIG9sZGVzdCIpOwotICAgICAgICBYTE9HX1FVRVJZKG9sZGVzdC0+cXVlcnksIG9sZGVzdC0+cXVlcnlsZW4pOwotICAgIH0KLSAgICBfY2FjaGVfcmVtb3ZlX3AoY2FjaGUsIGxvb2t1cCk7Ci19Ci0KLS8qIFJlbW92ZSBhbGwgZXhwaXJlZCBlbnRyaWVzIGZyb20gdGhlIGhhc2ggdGFibGUuCi0gKi8KLXN0YXRpYyB2b2lkIF9jYWNoZV9yZW1vdmVfZXhwaXJlZChDYWNoZSogY2FjaGUpIHsKLSAgICBFbnRyeSogZTsKLSAgICB0aW1lX3Qgbm93ID0gX3RpbWVfbm93KCk7Ci0KLSAgICBmb3IgKGUgPSBjYWNoZS0+bXJ1X2xpc3QubXJ1X25leHQ7IGUgIT0gJmNhY2hlLT5tcnVfbGlzdDspIHsKLSAgICAgICAgLy8gRW50cnkgaXMgb2xkLCByZW1vdmUKLSAgICAgICAgaWYgKG5vdyA+PSBlLT5leHBpcmVzKSB7Ci0gICAgICAgICAgICBFbnRyeSoqIGxvb2t1cCA9IF9jYWNoZV9sb29rdXBfcChjYWNoZSwgZSk7Ci0gICAgICAgICAgICBpZiAoKmxvb2t1cCA9PSBOVUxMKSB7IC8qIHNob3VsZCBub3QgaGFwcGVuICovCi0gICAgICAgICAgICAgICAgWExPRygiJXM6IEVOVFJZIE5PVCBJTiBIVEFCTEUgPyIsIF9fRlVOQ1RJT05fXyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZSA9IGUtPm1ydV9uZXh0OwotICAgICAgICAgICAgX2NhY2hlX3JlbW92ZV9wKGNhY2hlLCBsb29rdXApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZSA9IGUtPm1ydV9uZXh0OwotICAgICAgICB9Ci0gICAgfQotfQotCi1SZXNvbHZDYWNoZVN0YXR1cwotX3Jlc29sdl9jYWNoZV9sb29rdXAoIHN0cnVjdCByZXNvbHZfY2FjaGUqICBjYWNoZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgICAgICAgICAgcXVlcnksCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIHF1ZXJ5bGVuLAotICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICBhbnN3ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGFuc3dlcnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgKmFuc3dlcmxlbiApCi17Ci0gICAgRW50cnkgICAgICBrZXlbMV07Ci0gICAgRW50cnkqKiAgICBsb29rdXA7Ci0gICAgRW50cnkqICAgICBlOwotICAgIHRpbWVfdCAgICAgbm93OwotCi0gICAgUmVzb2x2Q2FjaGVTdGF0dXMgIHJlc3VsdCA9IFJFU09MVl9DQUNIRV9OT1RGT1VORDsKLQotICAgIFhMT0coIiVzOiBsb29rdXAiLCBfX0ZVTkNUSU9OX18pOwotICAgIFhMT0dfUVVFUlkocXVlcnksIHF1ZXJ5bGVuKTsKLQotICAgIC8qIHdlIGRvbid0IGNhY2hlIG1hbGZvcm1lZCBxdWVyaWVzICovCi0gICAgaWYgKCFlbnRyeV9pbml0X2tleShrZXksIHF1ZXJ5LCBxdWVyeWxlbikpIHsKLSAgICAgICAgWExPRygiJXM6IHVuc3VwcG9ydGVkIHF1ZXJ5IiwgX19GVU5DVElPTl9fKTsKLSAgICAgICAgcmV0dXJuIFJFU09MVl9DQUNIRV9VTlNVUFBPUlRFRDsKLSAgICB9Ci0gICAgLyogbG9va3VwIGNhY2hlICovCi0gICAgcHRocmVhZF9tdXRleF9sb2NrKCAmY2FjaGUtPmxvY2sgKTsKLQotICAgIC8qIHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgX2xvb2t1cF9wIHRvIHVuZGVyc3RhbmQgdGhpcy4KLSAgICAgKiB0aGUgZnVuY3Rpb24gYWx3YXlzIHJldHVybiBhIG5vbi1OVUxMIHBvaW50ZXIuCi0gICAgICovCi0gICAgbG9va3VwID0gX2NhY2hlX2xvb2t1cF9wKGNhY2hlLCBrZXkpOwotICAgIGUgICAgICA9ICpsb29rdXA7Ci0KLSAgICBpZiAoZSA9PSBOVUxMKSB7Ci0gICAgICAgIFhMT0coICJOT1QgSU4gQ0FDSEUiKTsKLSAgICAgICAgLy8gY2FsbGluZyB0aHJlYWQgd2lsbCB3YWl0IGlmIGFuIG91dHN0YW5kaW5nIHJlcXVlc3QgaXMgZm91bmQKLSAgICAgICAgLy8gdGhhdCBtYXRjaGluZyB0aGlzIHF1ZXJ5Ci0gICAgICAgIGlmICghX2NhY2hlX2NoZWNrX3BlbmRpbmdfcmVxdWVzdF9sb2NrZWQoY2FjaGUsIGtleSkpIHsKLSAgICAgICAgICAgIGdvdG8gRXhpdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxvb2t1cCA9IF9jYWNoZV9sb29rdXBfcChjYWNoZSwga2V5KTsKLSAgICAgICAgICAgIGUgPSAqbG9va3VwOwotICAgICAgICAgICAgaWYgKGUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGdvdG8gRXhpdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG5vdyA9IF90aW1lX25vdygpOwotCi0gICAgLyogcmVtb3ZlIHN0YWxlIGVudHJpZXMgaGVyZSAqLwotICAgIGlmIChub3cgPj0gZS0+ZXhwaXJlcykgewotICAgICAgICBYTE9HKCAiIE5PVCBJTiBDQUNIRSAoU1RBTEUgRU5UUlkgJXAgRElTQ0FSREVEKSIsICpsb29rdXAgKTsKLSAgICAgICAgWExPR19RVUVSWShlLT5xdWVyeSwgZS0+cXVlcnlsZW4pOwotICAgICAgICBfY2FjaGVfcmVtb3ZlX3AoY2FjaGUsIGxvb2t1cCk7Ci0gICAgICAgIGdvdG8gRXhpdDsKLSAgICB9Ci0KLSAgICAqYW5zd2VybGVuID0gZS0+YW5zd2VybGVuOwotICAgIGlmIChlLT5hbnN3ZXJsZW4gPiBhbnN3ZXJzaXplKSB7Ci0gICAgICAgIC8qIE5PVEU6IHdlIHJldHVybiBVTlNVUFBPUlRFRCBpZiB0aGUgYW5zd2VyIGJ1ZmZlciBpcyB0b28gc2hvcnQgKi8KLSAgICAgICAgcmVzdWx0ID0gUkVTT0xWX0NBQ0hFX1VOU1VQUE9SVEVEOwotICAgICAgICBYTE9HKCIgQU5TV0VSIFRPTyBMT05HIik7Ci0gICAgICAgIGdvdG8gRXhpdDsKLSAgICB9Ci0KLSAgICBtZW1jcHkoIGFuc3dlciwgZS0+YW5zd2VyLCBlLT5hbnN3ZXJsZW4gKTsKLQotICAgIC8qIGJ1bXAgdXAgdGhpcyBlbnRyeSB0byB0aGUgdG9wIG9mIHRoZSBNUlUgbGlzdCAqLwotICAgIGlmIChlICE9IGNhY2hlLT5tcnVfbGlzdC5tcnVfbmV4dCkgewotICAgICAgICBlbnRyeV9tcnVfcmVtb3ZlKCBlICk7Ci0gICAgICAgIGVudHJ5X21ydV9hZGQoIGUsICZjYWNoZS0+bXJ1X2xpc3QgKTsKLSAgICB9Ci0KLSAgICBYTE9HKCAiRk9VTkQgSU4gQ0FDSEUgZW50cnk9JXAiLCBlICk7Ci0gICAgcmVzdWx0ID0gUkVTT0xWX0NBQ0hFX0ZPVU5EOwotCi1FeGl0OgotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmY2FjaGUtPmxvY2sgKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0KLXZvaWQKLV9yZXNvbHZfY2FjaGVfYWRkKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiAgY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogICAgICAgICAgIHF1ZXJ5LAotICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICBxdWVyeWxlbiwKLSAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgICAgICAgICAgYW5zd2VyLAotICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICBhbnN3ZXJsZW4gKQotewotICAgIEVudHJ5ICAgIGtleVsxXTsKLSAgICBFbnRyeSogICBlOwotICAgIEVudHJ5KiogIGxvb2t1cDsKLSAgICB1X2xvbmcgICB0dGw7Ci0KLSAgICAvKiBkb24ndCBhc3N1bWUgdGhhdCB0aGUgcXVlcnkgaGFzIGFscmVhZHkgYmVlbiBjYWNoZWQKLSAgICAgKi8KLSAgICBpZiAoIWVudHJ5X2luaXRfa2V5KCBrZXksIHF1ZXJ5LCBxdWVyeWxlbiApKSB7Ci0gICAgICAgIFhMT0coICIlczogcGFzc2VkIGludmFsaWQgcXVlcnkgPyIsIF9fRlVOQ1RJT05fXyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwdGhyZWFkX211dGV4X2xvY2soICZjYWNoZS0+bG9jayApOwotCi0gICAgWExPRyggIiVzOiBxdWVyeToiLCBfX0ZVTkNUSU9OX18gKTsKLSAgICBYTE9HX1FVRVJZKHF1ZXJ5LHF1ZXJ5bGVuKTsKLSAgICBYTE9HX0FOU1dFUihhbnN3ZXIsIGFuc3dlcmxlbik7Ci0jaWYgREVCVUdfREFUQQotICAgIFhMT0coICJhbnN3ZXI6Iik7Ci0gICAgWExPR19CWVRFUyhhbnN3ZXIsYW5zd2VybGVuKTsKLSNlbmRpZgotCi0gICAgbG9va3VwID0gX2NhY2hlX2xvb2t1cF9wKGNhY2hlLCBrZXkpOwotICAgIGUgICAgICA9ICpsb29rdXA7Ci0KLSAgICBpZiAoZSAhPSBOVUxMKSB7IC8qIHNob3VsZCBub3QgaGFwcGVuICovCi0gICAgICAgIFhMT0coIiVzOiBBTFJFQURZIElOIENBQ0hFICglcCkgPyBJR05PUklORyBBREQiLAotICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZSk7Ci0gICAgICAgIGdvdG8gRXhpdDsKLSAgICB9Ci0KLSAgICBpZiAoY2FjaGUtPm51bV9lbnRyaWVzID49IGNhY2hlLT5tYXhfZW50cmllcykgewotICAgICAgICBfY2FjaGVfcmVtb3ZlX2V4cGlyZWQoY2FjaGUpOwotICAgICAgICBpZiAoY2FjaGUtPm51bV9lbnRyaWVzID49IGNhY2hlLT5tYXhfZW50cmllcykgewotICAgICAgICAgICAgX2NhY2hlX3JlbW92ZV9vbGRlc3QoY2FjaGUpOwotICAgICAgICB9Ci0gICAgICAgIC8qIG5lZWQgdG8gbG9va3VwIGFnYWluICovCi0gICAgICAgIGxvb2t1cCA9IF9jYWNoZV9sb29rdXBfcChjYWNoZSwga2V5KTsKLSAgICAgICAgZSAgICAgID0gKmxvb2t1cDsKLSAgICAgICAgaWYgKGUgIT0gTlVMTCkgewotICAgICAgICAgICAgWExPRygiJXM6IEFMUkVBRFkgSU4gQ0FDSEUgKCVwKSA/IElHTk9SSU5HIEFERCIsCi0gICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBlKTsKLSAgICAgICAgICAgIGdvdG8gRXhpdDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHR0bCA9IGFuc3dlcl9nZXRUVEwoYW5zd2VyLCBhbnN3ZXJsZW4pOwotICAgIGlmICh0dGwgPiAwKSB7Ci0gICAgICAgIGUgPSBlbnRyeV9hbGxvYyhrZXksIGFuc3dlciwgYW5zd2VybGVuKTsKLSAgICAgICAgaWYgKGUgIT0gTlVMTCkgewotICAgICAgICAgICAgZS0+ZXhwaXJlcyA9IHR0bCArIF90aW1lX25vdygpOwotICAgICAgICAgICAgX2NhY2hlX2FkZF9wKGNhY2hlLCBsb29rdXAsIGUpOwotICAgICAgICB9Ci0gICAgfQotI2lmIERFQlVHCi0gICAgX2NhY2hlX2R1bXBfbXJ1KGNhY2hlKTsKLSNlbmRpZgotRXhpdDoKLSAgICBfY2FjaGVfbm90aWZ5X3dhaXRpbmdfdGlkX2xvY2tlZChjYWNoZSwga2V5KTsKLSAgICBwdGhyZWFkX211dGV4X3VubG9jayggJmNhY2hlLT5sb2NrICk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLS8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwotLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgcHRocmVhZF9vbmNlX3QgICAgICAgIF9yZXNfY2FjaGVfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOwotCi0vLyBIZWFkIG9mIHRoZSBsaXN0IG9mIGNhY2hlcy4gIFByb3RlY3RlZCBieSBfcmVzX2NhY2hlX2xpc3RfbG9jay4KLXN0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8gX3Jlc19jYWNoZV9saXN0OwotCi0vLyBMaXN0IG9mIHBpZCBpZmFjZSBwYWlycwotc3RhdGljIHN0cnVjdCByZXNvbHZfcGlkaWZhY2VfaW5mbyBfcmVzX3BpZGlmYWNlX2xpc3Q7Ci0KLS8vIExpc3Qgb2YgdWlkIGlmYWNlIHBhaXJzCi1zdGF0aWMgc3RydWN0IHJlc29sdl91aWRpZmFjZV9pbmZvIF9yZXNfdWlkaWZhY2VfbGlzdDsKLQotLy8gbmFtZSBvZiB0aGUgY3VycmVudCBkZWZhdWx0IGludGVmYWNlCi1zdGF0aWMgY2hhciAgICAgICAgICAgIF9yZXNfZGVmYXVsdF9pZm5hbWVbSUZfTkFNRVNJWkUgKyAxXTsKLQotLy8gbG9jayBwcm90ZWN0aW5nIGV2ZXJ5dGhpbmcgaW4gdGhlIF9yZXNvbHZlX2NhY2hlX2luZm8gc3RydWN0cyAobmV4dCBwdHIsIGV0YykKLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgX3Jlc19jYWNoZV9saXN0X2xvY2s7Ci0KLS8vIGxvY2sgcHJvdGVjdGluZyB0aGUgX3Jlc19waWRfaWZhY2VfbGlzdAotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBfcmVzX3BpZGlmYWNlX2xpc3RfbG9jazsKLQotLy8gbG9jayBwcm90ZWN0aW5nIHRoZSBfcmVzX3VpZGlmYWNlX2xpc3QKLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgX3Jlc191aWRpZmFjZV9saXN0X2xvY2s7Ci0KLS8qIGxvb2t1cCB0aGUgZGVmYXVsdCBpbnRlcmZhY2UgbmFtZSAqLwotc3RhdGljIGNoYXIgKl9nZXRfZGVmYXVsdF9pZmFjZV9sb2NrZWQoKTsKLS8qIGZpbmQgdGhlIGZpcnN0IGNhY2hlIHRoYXQgaGFzIGFuIGFzc29jaWF0ZWQgaW50ZXJmYWNlIGFuZCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSAqLwotc3RhdGljIGNoYXIqIF9maW5kX2FueV9pZmFjZV9uYW1lX2xvY2tlZCggdm9pZCApOwotCi0vKiBpbnNlcnQgcmVzb2x2X2NhY2hlX2luZm8gaW50byB0aGUgbGlzdCBvZiByZXNvbHZfY2FjaGVfaW5mb3MgKi8KLXN0YXRpYyB2b2lkIF9pbnNlcnRfY2FjaGVfaW5mb19sb2NrZWQoc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBjYWNoZV9pbmZvKTsKLS8qIGNyZWF0ZXMgYSByZXNvbHZfY2FjaGVfaW5mbyAqLwotc3RhdGljIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogX2NyZWF0ZV9jYWNoZV9pbmZvKCB2b2lkICk7Ci0vKiBnZXRzIGNhY2hlIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnRlcmZhY2UgbmFtZSwgb3IgTlVMTCBpZiBub25lIGV4aXN0cyAqLwotc3RhdGljIHN0cnVjdCByZXNvbHZfY2FjaGUqIF9maW5kX25hbWVkX2NhY2hlX2xvY2tlZChjb25zdCBjaGFyKiBpZm5hbWUpOwotLyogZ2V0cyBhIHJlc29sdl9jYWNoZV9pbmZvIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnRlcmZhY2UgbmFtZSwgb3IgTlVMTCBpZiBub3QgZm91bmQgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIF9maW5kX2NhY2hlX2luZm9fbG9ja2VkKGNvbnN0IGNoYXIqIGlmbmFtZSk7Ci0vKiBsb29rIHVwIHRoZSBuYW1lZCBjYWNoZSwgYW5kIGNyZWF0ZXMgb25lIGlmIG5lZWRlZCAqLwotc3RhdGljIHN0cnVjdCByZXNvbHZfY2FjaGUqIF9nZXRfcmVzX2NhY2hlX2Zvcl9pZmFjZV9sb2NrZWQoY29uc3QgY2hhciogaWZuYW1lKTsKLS8qIGVtcHR5IHRoZSBuYW1lZCBjYWNoZSAqLwotc3RhdGljIHZvaWQgX2ZsdXNoX2NhY2hlX2Zvcl9pZmFjZV9sb2NrZWQoY29uc3QgY2hhciogaWZuYW1lKTsKLS8qIGVtcHR5IHRoZSBuYW1lc2VydmVycyBzZXQgZm9yIHRoZSBuYW1lZCBjYWNoZSAqLwotc3RhdGljIHZvaWQgX2ZyZWVfbmFtZXNlcnZlcnNfbG9ja2VkKHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogY2FjaGVfaW5mbyk7Ci0vKiBsb29rdXAgdGhlIG5hbXNlcnZlciBmb3IgdGhlIG5hbWUgaW50ZXJmYWNlICovCi1zdGF0aWMgaW50IF9nZXRfbmFtZXNlcnZlcl9sb2NrZWQoY29uc3QgY2hhciogaWZuYW1lLCBpbnQgbiwgY2hhciogYWRkciwgaW50IGFkZHJMZW4pOwotLyogbG9va3VwIHRoZSBhZGRyIG9mIHRoZSBuYW1lc2VydmVyIGZvciB0aGUgbmFtZWQgaW50ZXJmYWNlICovCi1zdGF0aWMgc3RydWN0IGFkZHJpbmZvKiBfZ2V0X25hbWVzZXJ2ZXJfYWRkcl9sb2NrZWQoY29uc3QgY2hhciogaWZuYW1lLCBpbnQgbik7Ci0vKiBsb29rdXAgdGhlIGludGVmYWNlJ3MgYWRkcmVzcyAqLwotc3RhdGljIHN0cnVjdCBpbl9hZGRyKiBfZ2V0X2FkZHJfbG9ja2VkKGNvbnN0IGNoYXIgKiBpZm5hbWUpOwotLyogcmV0dXJuIDEgaWYgdGhlIHByb3ZpZGVkIGxpc3Qgb2YgbmFtZSBzZXJ2ZXJzIGRpZmZlcnMgZnJvbSB0aGUgbGlzdCBvZiBuYW1lIHNlcnZlcnMKLSAqIGN1cnJlbnRseSBhdHRhY2hlZCB0byB0aGUgcHJvdmlkZWQgY2FjaGVfaW5mbyAqLwotc3RhdGljIGludCBfcmVzb2x2X2lzX25hbWVzZXJ2ZXJzX2VxdWFsX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8sCi0gICAgICAgIGNvbnN0IGNoYXIqKiBzZXJ2ZXJzLCBpbnQgbnVtc2VydmVycyk7Ci0vKiByZW1vdmUgYSByZXNvbHZfcGlkaWZhY2VfaW5mbyBzdHJ1Y3R1cmUgZnJvbSBfcmVzX3BpZGlmYWNlX2xpc3QgKi8KLXN0YXRpYyB2b2lkIF9yZW1vdmVfcGlkaWZhY2VfaW5mb19sb2NrZWQoaW50IHBpZCk7Ci0vKiBnZXQgYSByZXNvbHZfcGlkaWZhY2VfaW5mbyBzdHJ1Y3R1cmUgZnJvbSBfcmVzX3BpZGlmYWNlX2xpc3Qgd2l0aCBhIGNlcnRhaW4gcGlkICovCi1zdGF0aWMgc3RydWN0IHJlc29sdl9waWRpZmFjZV9pbmZvKiBfZ2V0X3BpZF9pZmFjZV9pbmZvX2xvY2tlZChpbnQgcGlkKTsKLQotLyogcmVtb3ZlIGEgcmVzb2x2X3BpZGlmYWNlX2luZm8gc3RydWN0dXJlIGZyb20gX3Jlc191aWRpZmFjZV9saXN0ICovCi1zdGF0aWMgaW50IF9yZW1vdmVfdWlkaWZhY2VfaW5mb19sb2NrZWQoY29uc3QgY2hhciogaWZhY2UsIGludCB1aWRfc3RhcnQsIGludCB1aWRfZW5kKTsKLS8qIGdldCBhIHJlc29sdl91aWRpZmFjZV9pbmZvIHN0cnVjdHVyZSBmcm9tIF9yZXNfdWlkaWZhY2VfbGlzdCB3aXRoIGEgY2VydGFpbiB1aWQgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb2x2X3VpZGlmYWNlX2luZm8qIF9nZXRfdWlkX2lmYWNlX2luZm9fbG9ja2VkKGludCB1aWQpOwotCi1zdGF0aWMgdm9pZAotX3Jlc19jYWNoZV9pbml0KHZvaWQpCi17Ci0gICAgY29uc3QgY2hhciogIGVudiA9IGdldGVudihDT05GSUdfRU5WKTsKLQotICAgIGlmIChlbnYgJiYgYXRvaShlbnYpID09IDApIHsKLSAgICAgICAgLyogdGhlIGNhY2hlIGlzIGRpc2FibGVkICovCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtZW1zZXQoJl9yZXNfZGVmYXVsdF9pZm5hbWUsIDAsIHNpemVvZihfcmVzX2RlZmF1bHRfaWZuYW1lKSk7Ci0gICAgbWVtc2V0KCZfcmVzX2NhY2hlX2xpc3QsIDAsIHNpemVvZihfcmVzX2NhY2hlX2xpc3QpKTsKLSAgICBtZW1zZXQoJl9yZXNfcGlkaWZhY2VfbGlzdCwgMCwgc2l6ZW9mKF9yZXNfcGlkaWZhY2VfbGlzdCkpOwotICAgIG1lbXNldCgmX3Jlc191aWRpZmFjZV9saXN0LCAwLCBzaXplb2YoX3Jlc191aWRpZmFjZV9saXN0KSk7Ci0gICAgcHRocmVhZF9tdXRleF9pbml0KCZfcmVzX2NhY2hlX2xpc3RfbG9jaywgTlVMTCk7Ci0gICAgcHRocmVhZF9tdXRleF9pbml0KCZfcmVzX3BpZGlmYWNlX2xpc3RfbG9jaywgTlVMTCk7Ci0gICAgcHRocmVhZF9tdXRleF9pbml0KCZfcmVzX3VpZGlmYWNlX2xpc3RfbG9jaywgTlVMTCk7Ci19Ci0KLXN0cnVjdCByZXNvbHZfY2FjaGUqCi1fX2dldF9yZXNfY2FjaGUoY29uc3QgY2hhciogaWZuYW1lKQotewotICAgIHN0cnVjdCByZXNvbHZfY2FjaGUgKmNhY2hlOwotCi0gICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci0KLSAgICBjaGFyKiBpZmFjZTsKLSAgICBpZiAoaWZuYW1lID09IE5VTEwgfHwgaWZuYW1lWzBdID09ICdcMCcpIHsKLSAgICAgICAgaWZhY2UgPSBfZ2V0X2RlZmF1bHRfaWZhY2VfbG9ja2VkKCk7Ci0gICAgICAgIGlmIChpZmFjZVswXSA9PSAnXDAnKSB7Ci0gICAgICAgICAgICBjaGFyKiB0bXAgPSBfZmluZF9hbnlfaWZhY2VfbmFtZV9sb2NrZWQoKTsKLSAgICAgICAgICAgIGlmICh0bXApIHsKLSAgICAgICAgICAgICAgICBpZmFjZSA9IHRtcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmYWNlID0gKGNoYXIgKikgaWZuYW1lOwotICAgIH0KLQotICAgIGNhY2hlID0gX2dldF9yZXNfY2FjaGVfZm9yX2lmYWNlX2xvY2tlZChpZmFjZSk7Ci0KLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwotICAgIFhMT0coIl9nZXRfcmVzX2NhY2hlOiBpZmFjZSA9ICVzLCBjYWNoZT0lcFxuIiwgaWZhY2UsIGNhY2hlKTsKLSAgICByZXR1cm4gY2FjaGU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlKgotX2dldF9yZXNfY2FjaGVfZm9yX2lmYWNlX2xvY2tlZChjb25zdCBjaGFyKiBpZm5hbWUpCi17Ci0gICAgaWYgKGlmbmFtZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHN0cnVjdCByZXNvbHZfY2FjaGUqIGNhY2hlID0gX2ZpbmRfbmFtZWRfY2FjaGVfbG9ja2VkKGlmbmFtZSk7Ci0gICAgaWYgKCFjYWNoZSkgewotICAgICAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8gPSBfY3JlYXRlX2NhY2hlX2luZm8oKTsKLSAgICAgICAgaWYgKGNhY2hlX2luZm8pIHsKLSAgICAgICAgICAgIGNhY2hlID0gX3Jlc29sdl9jYWNoZV9jcmVhdGUoKTsKLSAgICAgICAgICAgIGlmIChjYWNoZSkgewotICAgICAgICAgICAgICAgIGludCBsZW4gPSBzaXplb2YoY2FjaGVfaW5mby0+aWZuYW1lKTsKLSAgICAgICAgICAgICAgICBjYWNoZV9pbmZvLT5jYWNoZSA9IGNhY2hlOwotICAgICAgICAgICAgICAgIHN0cm5jcHkoY2FjaGVfaW5mby0+aWZuYW1lLCBpZm5hbWUsIGxlbiAtIDEpOwotICAgICAgICAgICAgICAgIGNhY2hlX2luZm8tPmlmbmFtZVtsZW4gLSAxXSA9ICdcMCc7Ci0KLSAgICAgICAgICAgICAgICBfaW5zZXJ0X2NhY2hlX2luZm9fbG9ja2VkKGNhY2hlX2luZm8pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmcmVlKGNhY2hlX2luZm8pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjYWNoZTsKLX0KLQotdm9pZAotX3Jlc29sdl9jYWNoZV9yZXNldCh1bnNpZ25lZCAgZ2VuZXJhdGlvbikKLXsKLSAgICBYTE9HKCIlczogZ2VuZXJhdGlvbj0lZCIsIF9fRlVOQ1RJT05fXywgZ2VuZXJhdGlvbik7Ci0KLSAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLQotICAgIGNoYXIqIGlmbmFtZSA9IF9nZXRfZGVmYXVsdF9pZmFjZV9sb2NrZWQoKTsKLSAgICAvLyBpZiBkZWZhdWx0IGludGVyZmFjZSBub3Qgc2V0IHRoZW4gdXNlIHRoZSBmaXJzdCBjYWNoZQotICAgIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnRlcmZhY2UgYXMgdGhlIGRlZmF1bHQgb25lLgotICAgIC8vIE5vdGU6IENvcGllZCB0aGUgY29kZSBmcm9tIF9fZ2V0X3Jlc19jYWNoZSBzaW5jZSB0aGlzCi0gICAgLy8gbWV0aG9kIHdpbGwgYmUgZGVsZXRlZC9vYnNvbGV0ZSB3aGVuIGNhY2hlIHBlciBpbnRlcmZhY2UKLSAgICAvLyBpbXBsZW1lbnRlZCBhbGwgb3ZlcgotICAgIGlmIChpZm5hbWVbMF0gPT0gJ1wwJykgewotICAgICAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8gPSBfcmVzX2NhY2hlX2xpc3QubmV4dDsKLSAgICAgICAgd2hpbGUgKGNhY2hlX2luZm8pIHsKLSAgICAgICAgICAgIGlmIChjYWNoZV9pbmZvLT5pZm5hbWVbMF0gIT0gJ1wwJykgewotICAgICAgICAgICAgICAgIGlmbmFtZSA9IGNhY2hlX2luZm8tPmlmbmFtZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FjaGVfaW5mbyA9IGNhY2hlX2luZm8tPm5leHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc3RydWN0IHJlc29sdl9jYWNoZSogY2FjaGUgPSBfZ2V0X3Jlc19jYWNoZV9mb3JfaWZhY2VfbG9ja2VkKGlmbmFtZSk7Ci0KLSAgICBpZiAoY2FjaGUgIT0gTlVMTCkgewotICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soICZjYWNoZS0+bG9jayApOwotICAgICAgICBpZiAoY2FjaGUtPmdlbmVyYXRpb24gIT0gZ2VuZXJhdGlvbikgewotICAgICAgICAgICAgX2NhY2hlX2ZsdXNoX2xvY2tlZChjYWNoZSk7Ci0gICAgICAgICAgICBjYWNoZS0+Z2VuZXJhdGlvbiA9IGdlbmVyYXRpb247Ci0gICAgICAgIH0KLSAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soICZjYWNoZS0+bG9jayApOwotICAgIH0KLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci19Ci0KLXZvaWQKLV9yZXNvbHZfZmx1c2hfY2FjaGVfZm9yX2RlZmF1bHRfaWZhY2Uodm9pZCkKLXsKLSAgICBjaGFyKiBpZm5hbWU7Ci0KLSAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLQotICAgIGlmbmFtZSA9IF9nZXRfZGVmYXVsdF9pZmFjZV9sb2NrZWQoKTsKLSAgICBfZmx1c2hfY2FjaGVfZm9yX2lmYWNlX2xvY2tlZChpZm5hbWUpOwotCi0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLX0KLQotdm9pZAotX3Jlc29sdl9mbHVzaF9jYWNoZV9mb3JfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lKQotewotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwotCi0gICAgX2ZsdXNoX2NhY2hlX2Zvcl9pZmFjZV9sb2NrZWQoaWZuYW1lKTsKLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fZmx1c2hfY2FjaGVfZm9yX2lmYWNlX2xvY2tlZChjb25zdCBjaGFyKiBpZm5hbWUpCi17Ci0gICAgc3RydWN0IHJlc29sdl9jYWNoZSogY2FjaGUgPSBfZmluZF9uYW1lZF9jYWNoZV9sb2NrZWQoaWZuYW1lKTsKLSAgICBpZiAoY2FjaGUpIHsKLSAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZjYWNoZS0+bG9jayk7Ci0gICAgICAgIF9jYWNoZV9mbHVzaF9sb2NrZWQoY2FjaGUpOwotICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmY2FjaGUtPmxvY2spOwotICAgIH0KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyoKLV9jcmVhdGVfY2FjaGVfaW5mbyh2b2lkKQotewotICAgIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogIGNhY2hlX2luZm87Ci0KLSAgICBjYWNoZV9pbmZvID0gY2FsbG9jKHNpemVvZigqY2FjaGVfaW5mbyksIDEpOwotICAgIHJldHVybiBjYWNoZV9pbmZvOwotfQotCi1zdGF0aWMgdm9pZAotX2luc2VydF9jYWNoZV9pbmZvX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8pCi17Ci0gICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBsYXN0OwotCi0gICAgZm9yIChsYXN0ID0gJl9yZXNfY2FjaGVfbGlzdDsgbGFzdC0+bmV4dDsgbGFzdCA9IGxhc3QtPm5leHQpOwotCi0gICAgbGFzdC0+bmV4dCA9IGNhY2hlX2luZm87Ci0KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvbHZfY2FjaGUqCi1fZmluZF9uYW1lZF9jYWNoZV9sb2NrZWQoY29uc3QgY2hhciogaWZuYW1lKSB7Ci0KLSAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGluZm8gPSBfZmluZF9jYWNoZV9pbmZvX2xvY2tlZChpZm5hbWUpOwotCi0gICAgaWYgKGluZm8gIT0gTlVMTCkgcmV0dXJuIGluZm8tPmNhY2hlOwotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qCi1fZmluZF9jYWNoZV9pbmZvX2xvY2tlZChjb25zdCBjaGFyKiBpZm5hbWUpCi17Ci0gICAgaWYgKGlmbmFtZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogY2FjaGVfaW5mbyA9IF9yZXNfY2FjaGVfbGlzdC5uZXh0OwotCi0gICAgd2hpbGUgKGNhY2hlX2luZm8pIHsKLSAgICAgICAgaWYgKHN0cmNtcChjYWNoZV9pbmZvLT5pZm5hbWUsIGlmbmFtZSkgPT0gMCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYWNoZV9pbmZvID0gY2FjaGVfaW5mby0+bmV4dDsKLSAgICB9Ci0gICAgcmV0dXJuIGNhY2hlX2luZm87Ci19Ci0KLXN0YXRpYyBjaGFyKgotX2dldF9kZWZhdWx0X2lmYWNlX2xvY2tlZCh2b2lkKQotewotCi0gICAgY2hhciogaWZhY2UgPSBfcmVzX2RlZmF1bHRfaWZuYW1lOwotCi0gICAgcmV0dXJuIGlmYWNlOwotfQotCi1zdGF0aWMgY2hhcioKLV9maW5kX2FueV9pZmFjZV9uYW1lX2xvY2tlZCggdm9pZCApIHsKLSAgICBjaGFyKiBpZm5hbWUgPSBOVUxMOwotCi0gICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBjYWNoZV9pbmZvID0gX3Jlc19jYWNoZV9saXN0Lm5leHQ7Ci0gICAgd2hpbGUgKGNhY2hlX2luZm8pIHsKLSAgICAgICAgaWYgKGNhY2hlX2luZm8tPmlmbmFtZVswXSAhPSAnXDAnKSB7Ci0gICAgICAgICAgICBpZm5hbWUgPSBjYWNoZV9pbmZvLT5pZm5hbWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhY2hlX2luZm8gPSBjYWNoZV9pbmZvLT5uZXh0OwotICAgIH0KLQotICAgIHJldHVybiBpZm5hbWU7Ci19Ci0KLXZvaWQKLV9yZXNvbHZfc2V0X2RlZmF1bHRfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lKQotewotICAgIFhMT0coIl9yZXNvbHZfc2V0X2RlZmF1bHRfaWYgaWZuYW1lICVzXG4iLGlmbmFtZSk7Ci0KLSAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLQotICAgIGludCBzaXplID0gc2l6ZW9mKF9yZXNfZGVmYXVsdF9pZm5hbWUpOwotICAgIG1lbXNldChfcmVzX2RlZmF1bHRfaWZuYW1lLCAwLCBzaXplKTsKLSAgICBzdHJuY3B5KF9yZXNfZGVmYXVsdF9pZm5hbWUsIGlmbmFtZSwgc2l6ZSAtIDEpOwotICAgIF9yZXNfZGVmYXVsdF9pZm5hbWVbc2l6ZSAtIDFdID0gJ1wwJzsKLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci19Ci0KLXZvaWQKLV9yZXNvbHZfc2V0X25hbWVzZXJ2ZXJzX2Zvcl9pZmFjZShjb25zdCBjaGFyKiBpZm5hbWUsIGNvbnN0IGNoYXIqKiBzZXJ2ZXJzLCBpbnQgbnVtc2VydmVycywKLSAgICAgICAgY29uc3QgY2hhciAqZG9tYWlucykKLXsKLSAgICBpbnQgaSwgcnQsIGluZGV4OwotICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50czsKLSAgICBjaGFyIHNidWZbTklfTUFYU0VSVl07Ci0gICAgcmVnaXN0ZXIgY2hhciAqY3A7Ci0gICAgaW50ICpvZmZzZXQ7Ci0KLSAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLQotICAgIC8vIGNyZWF0ZXMgdGhlIGNhY2hlIGlmIG5vdCBjcmVhdGVkCi0gICAgX2dldF9yZXNfY2FjaGVfZm9yX2lmYWNlX2xvY2tlZChpZm5hbWUpOwotCi0gICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBjYWNoZV9pbmZvID0gX2ZpbmRfY2FjaGVfaW5mb19sb2NrZWQoaWZuYW1lKTsKLQotICAgIGlmIChjYWNoZV9pbmZvICE9IE5VTEwgJiYKLSAgICAgICAgICAgICFfcmVzb2x2X2lzX25hbWVzZXJ2ZXJzX2VxdWFsX2xvY2tlZChjYWNoZV9pbmZvLCBzZXJ2ZXJzLCBudW1zZXJ2ZXJzKSkgewotICAgICAgICAvLyBmcmVlIGN1cnJlbnQgYmVmb3JlIGFkZGluZyBuZXcKLSAgICAgICAgX2ZyZWVfbmFtZXNlcnZlcnNfbG9ja2VkKGNhY2hlX2luZm8pOwotCi0gICAgICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOwotICAgICAgICBoaW50cy5haV9mYW1pbHkgPSBQRl9VTlNQRUM7Ci0gICAgICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19ER1JBTTsgLypkdW1teSovCi0gICAgICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfTlVNRVJJQ0hPU1Q7Ci0gICAgICAgIHNwcmludGYoc2J1ZiwgIiV1IiwgTkFNRVNFUlZFUl9QT1JUKTsKLQotICAgICAgICBpbmRleCA9IDA7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1zZXJ2ZXJzICYmIGkgPCBNQVhOUzsgaSsrKSB7Ci0gICAgICAgICAgICBydCA9IGdldGFkZHJpbmZvKHNlcnZlcnNbaV0sIHNidWYsICZoaW50cywgJmNhY2hlX2luZm8tPm5zYWRkcmluZm9baW5kZXhdKTsKLSAgICAgICAgICAgIGlmIChydCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY2FjaGVfaW5mby0+bmFtZXNlcnZlcnNbaW5kZXhdID0gc3RyZHVwKHNlcnZlcnNbaV0pOwotICAgICAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgICAgICAgWExPRygiX3Jlc29sdl9zZXRfbmFtZXNlcnZlcnNfZm9yX2lmYWNlOiBpZmFjZSA9ICVzLCBhZGRyID0gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpZm5hbWUsIHNlcnZlcnNbaV0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjYWNoZV9pbmZvLT5uc2FkZHJpbmZvW2luZGV4XSA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjb2RlIG1vdmVkIGZyb20gcmVzX2luaXQuYywgbG9hZF9kb21haW5fc2VhcmNoX2xpc3QKLSAgICAgICAgc3RybGNweShjYWNoZV9pbmZvLT5kZWZkbmFtZSwgZG9tYWlucywgc2l6ZW9mKGNhY2hlX2luZm8tPmRlZmRuYW1lKSk7Ci0gICAgICAgIGlmICgoY3AgPSBzdHJjaHIoY2FjaGVfaW5mby0+ZGVmZG5hbWUsICdcbicpKSAhPSBOVUxMKQotICAgICAgICAgICAgKmNwID0gJ1wwJzsKLSAgICAgICAgY3AgPSBjYWNoZV9pbmZvLT5kZWZkbmFtZTsKLSAgICAgICAgb2Zmc2V0ID0gY2FjaGVfaW5mby0+ZG5zcmNoX29mZnNldDsKLSAgICAgICAgd2hpbGUgKG9mZnNldCA8IGNhY2hlX2luZm8tPmRuc3JjaF9vZmZzZXQgKyBNQVhETlNSQ0gpIHsKLSAgICAgICAgICAgIHdoaWxlICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSAvKiBza2lwIGxlYWRpbmcgd2hpdGUgc3BhY2UgKi8KLSAgICAgICAgICAgICAgICBjcCsrOwotICAgICAgICAgICAgaWYgKCpjcCA9PSAnXDAnKSAvKiBzdG9wIGlmIG5vdGhpbmcgbW9yZSB0byBkbyAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgKm9mZnNldCsrID0gY3AgLSBjYWNoZV9pbmZvLT5kZWZkbmFtZTsgLyogcmVjb3JkIHRoaXMgc2VhcmNoIGRvbWFpbiAqLwotICAgICAgICAgICAgd2hpbGUgKCpjcCkgeyAvKiB6ZXJvLXRlcm1pbmF0ZSBpdCAqLwotICAgICAgICAgICAgICAgIGlmICgqY3AgPT0gJyAnfHwgKmNwID09ICdcdCcpIHsKLSAgICAgICAgICAgICAgICAgICAgKmNwKysgPSAnXDAnOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY3ArKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAqb2Zmc2V0ID0gLTE7IC8qIGNhY2hlX2luZm8tPmRuc3JjaF9vZmZzZXQgaGFzIE1BWEROU1JDSCsxIGl0ZW1zICovCi0KLSAgICAgICAgLy8gZmx1c2ggY2FjaGUgc2luY2UgbmV3IHNldHRpbmdzCi0gICAgICAgIF9mbHVzaF9jYWNoZV9mb3JfaWZhY2VfbG9ja2VkKGlmbmFtZSk7Ci0KLSAgICB9Ci0KLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwotfQotCi1zdGF0aWMgaW50Ci1fcmVzb2x2X2lzX25hbWVzZXJ2ZXJzX2VxdWFsX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8sCi0gICAgICAgIGNvbnN0IGNoYXIqKiBzZXJ2ZXJzLCBpbnQgbnVtc2VydmVycykKLXsKLSAgICBpbnQgaTsKLSAgICBjaGFyKiogbnM7Ci0gICAgaW50IGVxdWFsID0gMTsKLQotICAgIC8vIGNvbXBhcmUgZWFjaCBuYW1lIHNlcnZlciBhZ2FpbnN0IGN1cnJlbnQgbmFtZSBzZXJ2ZXJzCi0gICAgaWYgKG51bXNlcnZlcnMgPiBNQVhOUykgbnVtc2VydmVycyA9IE1BWE5TOwotICAgIGZvciAoaSA9IDA7IGkgPCBudW1zZXJ2ZXJzICYmIGVxdWFsOyBpKyspIHsKLSAgICAgICAgbnMgPSBjYWNoZV9pbmZvLT5uYW1lc2VydmVyczsKLSAgICAgICAgZXF1YWwgPSAwOwotICAgICAgICB3aGlsZSgqbnMpIHsKLSAgICAgICAgICAgIGlmIChzdHJjbXAoKm5zLCBzZXJ2ZXJzW2ldKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZXF1YWwgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbnMrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBlcXVhbDsKLX0KLQotc3RhdGljIHZvaWQKLV9mcmVlX25hbWVzZXJ2ZXJzX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8pCi17Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8PSBNQVhOUzsgaSsrKSB7Ci0gICAgICAgIGZyZWUoY2FjaGVfaW5mby0+bmFtZXNlcnZlcnNbaV0pOwotICAgICAgICBjYWNoZV9pbmZvLT5uYW1lc2VydmVyc1tpXSA9IE5VTEw7Ci0gICAgICAgIGlmIChjYWNoZV9pbmZvLT5uc2FkZHJpbmZvW2ldICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGZyZWVhZGRyaW5mbyhjYWNoZV9pbmZvLT5uc2FkZHJpbmZvW2ldKTsKLSAgICAgICAgICAgIGNhY2hlX2luZm8tPm5zYWRkcmluZm9baV0gPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotfQotCi1pbnQKLV9yZXNvbHZfY2FjaGVfZ2V0X25hbWVzZXJ2ZXIoaW50IG4sIGNoYXIqIGFkZHIsIGludCBhZGRyTGVuKQotewotICAgIGNoYXIgKmlmbmFtZTsKLSAgICBpbnQgcmVzdWx0ID0gMDsKLQotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwotCi0gICAgaWZuYW1lID0gX2dldF9kZWZhdWx0X2lmYWNlX2xvY2tlZCgpOwotICAgIHJlc3VsdCA9IF9nZXRfbmFtZXNlcnZlcl9sb2NrZWQoaWZuYW1lLCBuLCBhZGRyLCBhZGRyTGVuKTsKLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGludAotX2dldF9uYW1lc2VydmVyX2xvY2tlZChjb25zdCBjaGFyKiBpZm5hbWUsIGludCBuLCBjaGFyKiBhZGRyLCBpbnQgYWRkckxlbikKLXsKLSAgICBpbnQgbGVuID0gMDsKLSAgICBjaGFyKiBuczsKLSAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm87Ci0KLSAgICBpZiAobiA8IDEgfHwgbiA+IE1BWE5TIHx8ICFhZGRyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNhY2hlX2luZm8gPSBfZmluZF9jYWNoZV9pbmZvX2xvY2tlZChpZm5hbWUpOwotICAgIGlmIChjYWNoZV9pbmZvKSB7Ci0gICAgICAgIG5zID0gY2FjaGVfaW5mby0+bmFtZXNlcnZlcnNbbiAtIDFdOwotICAgICAgICBpZiAobnMpIHsKLSAgICAgICAgICAgIGxlbiA9IHN0cmxlbihucyk7Ci0gICAgICAgICAgICBpZiAobGVuIDwgYWRkckxlbikgewotICAgICAgICAgICAgICAgIHN0cm5jcHkoYWRkciwgbnMsIGxlbik7Ci0gICAgICAgICAgICAgICAgYWRkcltsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbGVuID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBsZW47Ci19Ci0KLXN0cnVjdCBhZGRyaW5mbyoKLV9jYWNoZV9nZXRfbmFtZXNlcnZlcl9hZGRyKGludCBuKQotewotICAgIHN0cnVjdCBhZGRyaW5mbyAqcmVzdWx0OwotICAgIGNoYXIqIGlmbmFtZTsKLQotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwotCi0gICAgaWZuYW1lID0gX2dldF9kZWZhdWx0X2lmYWNlX2xvY2tlZCgpOwotCi0gICAgcmVzdWx0ID0gX2dldF9uYW1lc2VydmVyX2FkZHJfbG9ja2VkKGlmbmFtZSwgbik7Ci0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgc3RydWN0IGFkZHJpbmZvKgotX2dldF9uYW1lc2VydmVyX2FkZHJfbG9ja2VkKGNvbnN0IGNoYXIqIGlmbmFtZSwgaW50IG4pCi17Ci0gICAgc3RydWN0IGFkZHJpbmZvKiBhaSA9IE5VTEw7Ci0gICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBjYWNoZV9pbmZvOwotCi0gICAgaWYgKG4gPCAxIHx8IG4gPiBNQVhOUykKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBjYWNoZV9pbmZvID0gX2ZpbmRfY2FjaGVfaW5mb19sb2NrZWQoaWZuYW1lKTsKLSAgICBpZiAoY2FjaGVfaW5mbykgewotICAgICAgICBhaSA9IGNhY2hlX2luZm8tPm5zYWRkcmluZm9bbiAtIDFdOwotICAgIH0KLSAgICByZXR1cm4gYWk7Ci19Ci0KLXZvaWQKLV9yZXNvbHZfc2V0X2FkZHJfb2ZfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lLCBzdHJ1Y3QgaW5fYWRkciogYWRkcikKLXsKLSAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLSAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8gPSBfZmluZF9jYWNoZV9pbmZvX2xvY2tlZChpZm5hbWUpOwotICAgIGlmIChjYWNoZV9pbmZvKSB7Ci0gICAgICAgIG1lbWNweSgmY2FjaGVfaW5mby0+aWZhZGRyLCBhZGRyLCBzaXplb2YoKmFkZHIpKTsKLQotICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIFhMT0coImFkZHJlc3Mgb2YgaW50ZXJmYWNlICVzIGlzICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBpZm5hbWUsIGluZXRfbnRvYShjYWNoZV9pbmZvLT5pZmFkZHIpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwotfQotCi1zdHJ1Y3QgaW5fYWRkcioKLV9yZXNvbHZfZ2V0X2FkZHJfb2ZfZGVmYXVsdF9pZmFjZSh2b2lkKQotewotICAgIHN0cnVjdCBpbl9hZGRyKiBhaSA9IE5VTEw7Ci0gICAgY2hhciogaWZuYW1lOwotCi0gICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci0gICAgaWZuYW1lID0gX2dldF9kZWZhdWx0X2lmYWNlX2xvY2tlZCgpOwotICAgIGFpID0gX2dldF9hZGRyX2xvY2tlZChpZm5hbWUpOwotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci0KLSAgICByZXR1cm4gYWk7Ci19Ci0KLXN0cnVjdCBpbl9hZGRyKgotX3Jlc29sdl9nZXRfYWRkcl9vZl9pZmFjZShjb25zdCBjaGFyKiBpZm5hbWUpCi17Ci0gICAgc3RydWN0IGluX2FkZHIqIGFpID0gTlVMTDsKLQotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwotICAgIGFpID1fZ2V0X2FkZHJfbG9ja2VkKGlmbmFtZSk7Ci0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLSAgICByZXR1cm4gYWk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW5fYWRkcioKLV9nZXRfYWRkcl9sb2NrZWQoY29uc3QgY2hhciAqIGlmbmFtZSkKLXsKLSAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8gPSBfZmluZF9jYWNoZV9pbmZvX2xvY2tlZChpZm5hbWUpOwotICAgIGlmIChjYWNoZV9pbmZvKSB7Ci0gICAgICAgIHJldHVybiAmY2FjaGVfaW5mby0+aWZhZGRyOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLV9yZW1vdmVfcGlkaWZhY2VfaW5mb19sb2NrZWQoaW50IHBpZCkgewotICAgIHN0cnVjdCByZXNvbHZfcGlkaWZhY2VfaW5mbyogcmVzdWx0ID0gJl9yZXNfcGlkaWZhY2VfbGlzdDsKLSAgICBzdHJ1Y3QgcmVzb2x2X3BpZGlmYWNlX2luZm8qIHByZXYgPSBOVUxMOwotCi0gICAgd2hpbGUgKHJlc3VsdCAhPSBOVUxMICYmIHJlc3VsdC0+cGlkICE9IHBpZCkgewotICAgICAgICBwcmV2ID0gcmVzdWx0OwotICAgICAgICByZXN1bHQgPSByZXN1bHQtPm5leHQ7Ci0gICAgfQotICAgIGlmIChwcmV2ICE9IE5VTEwgJiYgcmVzdWx0ICE9IE5VTEwpIHsKLSAgICAgICAgcHJldi0+bmV4dCA9IHJlc3VsdC0+bmV4dDsKLSAgICAgICAgZnJlZShyZXN1bHQpOwotICAgIH0KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvbHZfcGlkaWZhY2VfaW5mbyoKLV9nZXRfcGlkX2lmYWNlX2luZm9fbG9ja2VkKGludCBwaWQpCi17Ci0gICAgc3RydWN0IHJlc29sdl9waWRpZmFjZV9pbmZvKiByZXN1bHQgPSAmX3Jlc19waWRpZmFjZV9saXN0OwotICAgIHdoaWxlIChyZXN1bHQgIT0gTlVMTCAmJiByZXN1bHQtPnBpZCAhPSBwaWQpIHsKLSAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5uZXh0OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQKLV9yZXNvbHZfc2V0X2lmYWNlX2Zvcl9waWQoY29uc3QgY2hhciogaWZuYW1lLCBpbnQgcGlkKQotewotICAgIC8vIG1ha2Ugc3VyZSB0aGUgcGlkIGlmYWNlIGxpc3QgaXMgY3JlYXRlZAotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19waWRpZmFjZV9saXN0X2xvY2spOwotCi0gICAgc3RydWN0IHJlc29sdl9waWRpZmFjZV9pbmZvKiBwaWRpZmFjZV9pbmZvID0gX2dldF9waWRfaWZhY2VfaW5mb19sb2NrZWQocGlkKTsKLSAgICBpZiAoIXBpZGlmYWNlX2luZm8pIHsKLSAgICAgICAgcGlkaWZhY2VfaW5mbyA9IGNhbGxvYyhzaXplb2YoKnBpZGlmYWNlX2luZm8pLCAxKTsKLSAgICAgICAgaWYgKHBpZGlmYWNlX2luZm8pIHsKLSAgICAgICAgICAgIHBpZGlmYWNlX2luZm8tPnBpZCA9IHBpZDsKLSAgICAgICAgICAgIGludCBsZW4gPSBzaXplb2YocGlkaWZhY2VfaW5mby0+aWZuYW1lKTsKLSAgICAgICAgICAgIHN0cm5jcHkocGlkaWZhY2VfaW5mby0+aWZuYW1lLCBpZm5hbWUsIGxlbiAtIDEpOwotICAgICAgICAgICAgcGlkaWZhY2VfaW5mby0+aWZuYW1lW2xlbiAtIDFdID0gJ1wwJzsKLQotICAgICAgICAgICAgcGlkaWZhY2VfaW5mby0+bmV4dCA9IF9yZXNfcGlkaWZhY2VfbGlzdC5uZXh0OwotICAgICAgICAgICAgX3Jlc19waWRpZmFjZV9saXN0Lm5leHQgPSBwaWRpZmFjZV9pbmZvOwotCi0gICAgICAgICAgICBYTE9HKCJfcmVzb2x2X3NldF9pZmFjZV9mb3JfcGlkOiBwaWQgJWQgLCBpZmFjZSAlc1xuIiwgcGlkLCBpZm5hbWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgWExPRygiX3Jlc29sdl9zZXRfaWZhY2VfZm9yX3BpZCBmYWlsaW5nIGNhbGxvYyIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfcGlkaWZhY2VfbGlzdF9sb2NrKTsKLX0KLQotdm9pZAotX3Jlc29sdl9jbGVhcl9pZmFjZV9mb3JfcGlkKGludCBwaWQpCi17Ci0gICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX3BpZGlmYWNlX2xpc3RfbG9jayk7Ci0KLSAgICBfcmVtb3ZlX3BpZGlmYWNlX2luZm9fbG9ja2VkKHBpZCk7Ci0KLSAgICBYTE9HKCJfcmVzb2x2X2NsZWFyX2lmYWNlX2Zvcl9waWQ6IHBpZCAlZFxuIiwgcGlkKTsKLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX3BpZGlmYWNlX2xpc3RfbG9jayk7Ci19Ci0KLWludAotX3Jlc29sdl9nZXRfcGlkc19hc3NvY2lhdGVkX2ludGVyZmFjZShpbnQgcGlkLCBjaGFyKiBidWZmLCBpbnQgYnVmZkxlbikKLXsKLSAgICBpbnQgbGVuID0gMDsKLQotICAgIGlmICghYnVmZikgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX3BpZGlmYWNlX2xpc3RfbG9jayk7Ci0KLSAgICBzdHJ1Y3QgcmVzb2x2X3BpZGlmYWNlX2luZm8qIHBpZGlmYWNlX2luZm8gPSBfZ2V0X3BpZF9pZmFjZV9pbmZvX2xvY2tlZChwaWQpOwotICAgIGJ1ZmZbMF0gPSAnXDAnOwotICAgIGlmIChwaWRpZmFjZV9pbmZvKSB7Ci0gICAgICAgIGxlbiA9IHN0cmxlbihwaWRpZmFjZV9pbmZvLT5pZm5hbWUpOwotICAgICAgICBpZiAobGVuIDwgYnVmZkxlbikgewotICAgICAgICAgICAgc3RybmNweShidWZmLCBwaWRpZmFjZV9pbmZvLT5pZm5hbWUsIGxlbik7Ci0gICAgICAgICAgICBidWZmW2xlbl0gPSAnXDAnOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgWExPRygiX3Jlc29sdl9nZXRfcGlkc19hc3NvY2lhdGVkX2ludGVyZmFjZSBidWZmOiAlc1xuIiwgYnVmZik7Ci0KLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc19waWRpZmFjZV9saXN0X2xvY2spOwotCi0gICAgcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGludAotX3JlbW92ZV91aWRpZmFjZV9pbmZvX2xvY2tlZChjb25zdCBjaGFyKiBpZm5hbWUsIGludCB1aWRfc3RhcnQsIGludCB1aWRfZW5kKSB7Ci0gICAgc3RydWN0IHJlc29sdl91aWRpZmFjZV9pbmZvKiByZXN1bHQgPSBfcmVzX3VpZGlmYWNlX2xpc3QubmV4dDsKLSAgICBzdHJ1Y3QgcmVzb2x2X3VpZGlmYWNlX2luZm8qIHByZXYgPSAmX3Jlc191aWRpZmFjZV9saXN0OwotICAgIHdoaWxlIChyZXN1bHQgIT0gTlVMTCAmJiAhKHJlc3VsdC0+dWlkX3N0YXJ0ID09IHVpZF9zdGFydCAmJiByZXN1bHQtPnVpZF9lbmQgPT0gdWlkX2VuZCAmJgotICAgICAgICAgICAgIXN0cmNtcChyZXN1bHQtPmlmbmFtZSwgaWZuYW1lKSkpIHsKLSAgICAgICAgcHJldiA9IHJlc3VsdDsKLSAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5uZXh0OwotICAgIH0KLSAgICBpZiAocHJldiAhPSBOVUxMICYmIHJlc3VsdCAhPSBOVUxMKSB7Ci0gICAgICAgIHByZXYtPm5leHQgPSByZXN1bHQtPm5leHQ7Ci0gICAgICAgIGZyZWUocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVycm5vID0gRUlOVkFMOwotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIHN0cnVjdCByZXNvbHZfdWlkaWZhY2VfaW5mbyoKLV9nZXRfdWlkX2lmYWNlX2luZm9fbG9ja2VkKGludCB1aWQpCi17Ci0gICAgc3RydWN0IHJlc29sdl91aWRpZmFjZV9pbmZvKiByZXN1bHQgPSBfcmVzX3VpZGlmYWNlX2xpc3QubmV4dDsKLSAgICB3aGlsZSAocmVzdWx0ICE9IE5VTEwgJiYgIShyZXN1bHQtPnVpZF9zdGFydCA8PSB1aWQgJiYgcmVzdWx0LT51aWRfZW5kID49IHVpZCkpIHsKLSAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5uZXh0OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQKLV9yZXNvbHZfY2xlYXJfaWZhY2VfdWlkX3JhbmdlX21hcHBpbmcoKQotewotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc191aWRpZmFjZV9saXN0X2xvY2spOwotICAgIHN0cnVjdCByZXNvbHZfdWlkaWZhY2VfaW5mbyAqY3VycmVudCA9IF9yZXNfdWlkaWZhY2VfbGlzdC5uZXh0OwotICAgIHN0cnVjdCByZXNvbHZfdWlkaWZhY2VfaW5mbyAqbmV4dDsKLSAgICB3aGlsZSAoY3VycmVudCAhPSBOVUxMKSB7Ci0gICAgICAgIG5leHQgPSBjdXJyZW50LT5uZXh0OwotICAgICAgICBmcmVlKGN1cnJlbnQpOwotICAgICAgICBjdXJyZW50ID0gbmV4dDsKLSAgICB9Ci0gICAgX3Jlc191aWRpZmFjZV9saXN0Lm5leHQgPSBOVUxMOwotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX3VpZGlmYWNlX2xpc3RfbG9jayk7Ci19Ci0KLXZvaWQKLV9yZXNvbHZfY2xlYXJfaWZhY2VfcGlkX21hcHBpbmcoKQotewotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19waWRpZmFjZV9saXN0X2xvY2spOwotICAgIHN0cnVjdCByZXNvbHZfcGlkaWZhY2VfaW5mbyAqY3VycmVudCA9IF9yZXNfcGlkaWZhY2VfbGlzdC5uZXh0OwotICAgIHN0cnVjdCByZXNvbHZfcGlkaWZhY2VfaW5mbyAqbmV4dDsKLSAgICB3aGlsZSAoY3VycmVudCAhPSBOVUxMKSB7Ci0gICAgICAgIG5leHQgPSBjdXJyZW50LT5uZXh0OwotICAgICAgICBmcmVlKGN1cnJlbnQpOwotICAgICAgICBjdXJyZW50ID0gbmV4dDsKLSAgICB9Ci0gICAgX3Jlc19waWRpZmFjZV9saXN0Lm5leHQgPSBOVUxMOwotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX3BpZGlmYWNlX2xpc3RfbG9jayk7Ci19Ci0KLWludAotX3Jlc29sdl9zZXRfaWZhY2VfZm9yX3VpZF9yYW5nZShjb25zdCBjaGFyKiBpZm5hbWUsIGludCB1aWRfc3RhcnQsIGludCB1aWRfZW5kKQotewotICAgIGludCBydiA9IDA7Ci0gICAgc3RydWN0IHJlc29sdl91aWRpZmFjZV9pbmZvKiB1aWRpZmFjZV9pbmZvOwotICAgIC8vIG1ha2Ugc3VyZSB0aGUgdWlkIGlmYWNlIGxpc3QgaXMgY3JlYXRlZAotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIGlmICh1aWRfc3RhcnQgPiB1aWRfZW5kKSB7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc191aWRpZmFjZV9saXN0X2xvY2spOwotICAgIHVpZGlmYWNlX2luZm8gPSBjYWxsb2Moc2l6ZW9mKCp1aWRpZmFjZV9pbmZvKSwgMSk7Ci0gICAgaWYgKHVpZGlmYWNlX2luZm8pIHsKLSAgICAgICAgdWlkaWZhY2VfaW5mby0+dWlkX3N0YXJ0ID0gdWlkX3N0YXJ0OwotICAgICAgICB1aWRpZmFjZV9pbmZvLT51aWRfZW5kID0gdWlkX2VuZDsKLSAgICAgICAgaW50IGxlbiA9IHNpemVvZih1aWRpZmFjZV9pbmZvLT5pZm5hbWUpOwotICAgICAgICBzdHJuY3B5KHVpZGlmYWNlX2luZm8tPmlmbmFtZSwgaWZuYW1lLCBsZW4gLSAxKTsKLSAgICAgICAgdWlkaWZhY2VfaW5mby0+aWZuYW1lW2xlbiAtIDFdID0gJ1wwJzsKLQotICAgICAgICB1aWRpZmFjZV9pbmZvLT5uZXh0ID0gX3Jlc191aWRpZmFjZV9saXN0Lm5leHQ7Ci0gICAgICAgIF9yZXNfdWlkaWZhY2VfbGlzdC5uZXh0ID0gdWlkaWZhY2VfaW5mbzsKLQotICAgICAgICBYTE9HKCJfcmVzb2x2X3NldF9pZmFjZV9mb3JfdWlkX3JhbmdlOiBbJWQsJWRdLCBpZmFjZSAlc1xuIiwgdWlkX3N0YXJ0LCB1aWRfZW5kLAotICAgICAgICAgICAgICAgIGlmbmFtZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgWExPRygiX3Jlc29sdl9zZXRfaWZhY2VfZm9yX3VpZF9yYW5nZSBmYWlsaW5nIGNhbGxvY1xuIik7Ci0gICAgICAgIHJ2ID0gLTE7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgIH0KLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX3VpZGlmYWNlX2xpc3RfbG9jayk7Ci0gICAgcmV0dXJuIHJ2OwotfQotCi1pbnQKLV9yZXNvbHZfY2xlYXJfaWZhY2VfZm9yX3VpZF9yYW5nZShjb25zdCBjaGFyKiBpZm5hbWUsIGludCB1aWRfc3RhcnQsIGludCB1aWRfZW5kKQotewotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc191aWRpZmFjZV9saXN0X2xvY2spOwotCi0gICAgaW50IHJ2ID0gX3JlbW92ZV91aWRpZmFjZV9pbmZvX2xvY2tlZChpZm5hbWUsIHVpZF9zdGFydCwgdWlkX2VuZCk7Ci0KLSAgICBYTE9HKCJfcmVzb2x2X2NsZWFyX2lmYWNlX2Zvcl91aWRfcmFuZ2U6IFslZCwlZF0gaWZhY2UgJXNcbiIsIHVpZF9zdGFydCwgdWlkX2VuZCwgaWZuYW1lKTsKLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX3VpZGlmYWNlX2xpc3RfbG9jayk7Ci0KLSAgICByZXR1cm4gcnY7Ci19Ci0KLWludAotX3Jlc29sdl9nZXRfdWlkc19hc3NvY2lhdGVkX2ludGVyZmFjZShpbnQgdWlkLCBjaGFyKiBidWZmLCBpbnQgYnVmZkxlbikKLXsKLSAgICBpbnQgbGVuID0gMDsKLQotICAgIGlmICghYnVmZikgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX3VpZGlmYWNlX2xpc3RfbG9jayk7Ci0KLSAgICBzdHJ1Y3QgcmVzb2x2X3VpZGlmYWNlX2luZm8qIHVpZGlmYWNlX2luZm8gPSBfZ2V0X3VpZF9pZmFjZV9pbmZvX2xvY2tlZCh1aWQpOwotICAgIGJ1ZmZbMF0gPSAnXDAnOwotICAgIGlmICh1aWRpZmFjZV9pbmZvKSB7Ci0gICAgICAgIGxlbiA9IHN0cmxlbih1aWRpZmFjZV9pbmZvLT5pZm5hbWUpOwotICAgICAgICBpZiAobGVuIDwgYnVmZkxlbikgewotICAgICAgICAgICAgc3RybmNweShidWZmLCB1aWRpZmFjZV9pbmZvLT5pZm5hbWUsIGxlbik7Ci0gICAgICAgICAgICBidWZmW2xlbl0gPSAnXDAnOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgWExPRygiX3Jlc29sdl9nZXRfdWlkc19hc3NvY2lhdGVkX2ludGVyZmFjZSBidWZmOiAlc1xuIiwgYnVmZik7Ci0KLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc191aWRpZmFjZV9saXN0X2xvY2spOwotCi0gICAgcmV0dXJuIGxlbjsKLX0KLQotc2l6ZV90Ci1fcmVzb2x2X2dldF9kZWZhdWx0X2lmYWNlKGNoYXIqIGJ1ZmYsIHNpemVfdCBidWZmTGVuKQotewotICAgIGlmICghYnVmZiB8fCBidWZmTGVuID09IDApIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci0KLSAgICBjaGFyKiBpZm5hbWUgPSBfZ2V0X2RlZmF1bHRfaWZhY2VfbG9ja2VkKCk7IC8vIG5ldmVyIG51bGwsIGJ1dCBtYXkgYmUgZW1wdHkKLQotICAgIC8vIGlmIGRlZmF1bHQgaW50ZXJmYWNlIG5vdCBzZXQgZ2l2ZSB1cC4KLSAgICBpZiAoaWZuYW1lWzBdID09ICdcMCcpIHsKLSAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgc2l6ZV90IGxlbiA9IHN0cmxlbihpZm5hbWUpOwotICAgIGlmIChsZW4gPCBidWZmTGVuKSB7Ci0gICAgICAgIHN0cm5jcHkoYnVmZiwgaWZuYW1lLCBsZW4pOwotICAgICAgICBidWZmW2xlbl0gPSAnXDAnOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1ZmZbMF0gPSAnXDAnOwotICAgIH0KLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci0KLSAgICByZXR1cm4gbGVuOwotfQotCi12b2lkCi1fcmVzb2x2X3BvcHVsYXRlX3Jlc19mb3JfaWZhY2UocmVzX3N0YXRlIHN0YXRwKQotewotICAgIGlmIChzdGF0cCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdHAtPmlmYWNlWzBdID09ICdcMCcpIHsgLy8gbm8gaW50ZXJmYWNlIHNldCBhc3NpZ24gZGVmYXVsdAotICAgICAgICBzaXplX3QgaWZfbGVuID0gX3Jlc29sdl9nZXRfZGVmYXVsdF9pZmFjZShzdGF0cC0+aWZhY2UsIHNpemVvZihzdGF0cC0+aWZhY2UpKTsKLSAgICAgICAgaWYgKGlmX2xlbiArIDEgPiBzaXplb2Yoc3RhdHAtPmlmYWNlKSkgewotICAgICAgICAgICAgWExPRygiJXM6IElOVEVSTkFMX0VSUk9SOiBjYW4ndCBmaXQgaW50ZXJmYWNlIG5hbWUgaW50byBzdGF0cC0+aWZhY2UuXG4iLCBfX0ZVTkNUSU9OX18pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpZl9sZW4gPT0gMCkgewotICAgICAgICAgICAgWExPRygiJXM6IElOVEVSTkFMX0VSUk9SOiBjYW4ndCBmaW5kIGFueSBzdWl0YWJsZSBpbnRlcmZhY2VzLlxuIiwgX19GVU5DVElPTl9fKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwotCi0gICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBpbmZvID0gX2ZpbmRfY2FjaGVfaW5mb19sb2NrZWQoc3RhdHAtPmlmYWNlKTsKLSAgICBpZiAoaW5mbyAhPSBOVUxMKSB7Ci0gICAgICAgIGludCBuc2VydjsKLSAgICAgICAgc3RydWN0IGFkZHJpbmZvKiBhaTsKLSAgICAgICAgWExPRygiX3Jlc29sdl9wb3B1bGF0ZV9yZXNfZm9yX2lmYWNlOiAlc1xuIiwgc3RhdHAtPmlmYWNlKTsKLSAgICAgICAgZm9yIChuc2VydiA9IDA7IG5zZXJ2IDwgTUFYTlM7IG5zZXJ2KyspIHsKLSAgICAgICAgICAgIGFpID0gaW5mby0+bnNhZGRyaW5mb1tuc2Vydl07Ci0gICAgICAgICAgICBpZiAoYWkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoKHNpemVfdCkgYWktPmFpX2FkZHJsZW4gPD0gc2l6ZW9mKHN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1swXSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdHAtPl91Ll9leHQuZXh0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZzdGF0cC0+X3UuX2V4dC5leHQtPm5zYWRkcnNbbnNlcnZdLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pOwotICAgICAgICAgICAgICAgICAgICBzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLnNpbl9mYW1pbHkgPSBBRl9VTlNQRUM7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChzaXplX3QpIGFpLT5haV9hZGRybGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD0gc2l6ZW9mKHN0YXRwLT5uc2FkZHJfbGlzdFswXSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSwgYWktPmFpX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpLT5haV9hZGRybGVuKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0uc2luX2ZhbWlseSA9IEFGX1VOU1BFQzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgWExPRygiX3Jlc29sdl9wb3B1bGF0ZV9yZXNfZm9yX2lmYWNlIGZvdW5kIHRvbyBsb25nIGFkZHJsZW4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzdGF0cC0+bnNjb3VudCA9IG5zZXJ2OwotICAgICAgICAvLyBub3cgZG8gc2VhcmNoIGRvbWFpbnMuICBOb3RlIHRoYXQgd2UgY2FjaGUgdGhlIG9mZnNldHMgYXMgdGhpcyBjb2RlIHJ1bnMgYWxvdAotICAgICAgICAvLyBidXQgdGhlIHNldHRpbmcvb2Zmc2V0LWNvbXB1dGVyIG9ubHkgcnVucyB3aGVuIHNldC9jaGFuZ2VkCi0gICAgICAgIHN0cmxjcHkoc3RhdHAtPmRlZmRuYW1lLCBpbmZvLT5kZWZkbmFtZSwgc2l6ZW9mKHN0YXRwLT5kZWZkbmFtZSkpOwotICAgICAgICByZWdpc3RlciBjaGFyICoqcHAgPSBzdGF0cC0+ZG5zcmNoOwotICAgICAgICByZWdpc3RlciBpbnQgKnAgPSBpbmZvLT5kbnNyY2hfb2Zmc2V0OwotICAgICAgICB3aGlsZSAocHAgPCBzdGF0cC0+ZG5zcmNoICsgTUFYRE5TUkNIICYmICpwICE9IC0xKSB7Ci0gICAgICAgICAgICAqcHArKyA9ICZzdGF0cC0+ZGVmZG5hbWUgKyAqcCsrOwotICAgICAgICB9Ci0gICAgfQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci19CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2NvbXAuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfY29tcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2I4MWI0Li4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfY29tcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY2ICswLDAgQEAKLS8qCSROZXRCU0Q6IHJlc19jb21wLmMsdiAxLjYgMjAwNC8wNS8yMiAyMzo0NzowOSBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg1LCAxOTkzCi0gKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLSAqIAlDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLSAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5MyBieSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0Ci0gKiB0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgotICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0Ci0gKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCi0gKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKLSAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgotICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKLSAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUwotICogU09GVFdBUkUuCi0gKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCi0gKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWZkZWYgbm90ZGVmCi1zdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX2NvbXAuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX2NvbXAuYyx2IDEuMS4yLjEuNC4xIDIwMDQvMDMvMDkgMDg6MzM6NTQgbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiByZXNfY29tcC5jLHYgMS42IDIwMDQvMDUvMjIgMjM6NDc6MDkgY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCi0jZWxzZQotI2luY2x1ZGUgPHJlc29sdi5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotLyoKLSAqIEV4cGFuZCBjb21wcmVzc2VkIGRvbWFpbiBuYW1lICdzcmMnIHRvIGZ1bGwgZG9tYWluIG5hbWUuCi0gKiAnbXNnJyBpcyBhIHBvaW50ZXIgdG8gdGhlIGJlZ2luaW5nIG9mIHRoZSBtZXNzYWdlLAotICogJ2VvbScgcG9pbnRzIHRvIHRoZSBmaXJzdCBsb2NhdGlvbiBhZnRlciB0aGUgbWVzc2FnZSwKLSAqICdkc3QnIGlzIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBvZiBzaXplICdkc3RzaXonIGZvciB0aGUgcmVzdWx0LgotICogUmV0dXJuIHNpemUgb2YgY29tcHJlc3NlZCBuYW1lIG9yIC0xIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KLSAqLwotaW50Ci1kbl9leHBhbmQoY29uc3QgdV9jaGFyICptc2csIGNvbnN0IHVfY2hhciAqZW9tLCBjb25zdCB1X2NoYXIgKnNyYywKLQkgIGNoYXIgKmRzdCwgaW50IGRzdHNpeikKLXsKLQlpbnQgbiA9IG5zX25hbWVfdW5jb21wcmVzcyhtc2csIGVvbSwgc3JjLCBkc3QsIChzaXplX3QpZHN0c2l6KTsKLQotCWlmIChuID4gMCAmJiBkc3RbMF0gPT0gJy4nKQotCQlkc3RbMF0gPSAnXDAnOwotCXJldHVybiAobik7Ci19Ci0KLS8qCi0gKiBQYWNrIGRvbWFpbiBuYW1lICdleHBfZG4nIGluIHByZXNlbnRhdGlvbiBmb3JtIGludG8gJ2NvbXBfZG4nLgotICogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBjb21wcmVzc2VkIG5hbWUgb3IgLTEuCi0gKiAnbGVuZ3RoJyBpcyB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSAnY29tcF9kbicuCi0gKi8KLWludAotZG5fY29tcChjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0LCBpbnQgZHN0c2l6LAotCXVfY2hhciAqKmRucHRycywgdV9jaGFyICoqbGFzdGRucHRyKQotewotCXJldHVybiAobnNfbmFtZV9jb21wcmVzcyhzcmMsIGRzdCwgKHNpemVfdClkc3RzaXosCi0JCQkJIChjb25zdCB1X2NoYXIgKiopZG5wdHJzLAotCQkJCSAoY29uc3QgdV9jaGFyICoqKWxhc3RkbnB0cikpOwotfQotCi0vKgotICogU2tpcCBvdmVyIGEgY29tcHJlc3NlZCBkb21haW4gbmFtZS4gUmV0dXJuIHRoZSBzaXplIG9yIC0xLgotICovCi1pbnQKLWRuX3NraXBuYW1lKGNvbnN0IHVfY2hhciAqcHRyLCBjb25zdCB1X2NoYXIgKmVvbSkgewotCWNvbnN0IHVfY2hhciAqc2F2ZXB0ciA9IHB0cjsKLQotCWlmIChuc19uYW1lX3NraXAoJnB0ciwgZW9tKSA9PSAtMSkKLQkJcmV0dXJuICgtMSk7Ci0JcmV0dXJuIChwdHIgLSBzYXZlcHRyKTsKLX0KLQotLyoKLSAqIFZlcmlmeSB0aGF0IGEgZG9tYWluIG5hbWUgdXNlcyBhbiBhY2NlcHRhYmxlIGNoYXJhY3RlciBzZXQuCi0gKi8KLQotLyoKLSAqIE5vdGUgdGhlIGNvbnNwaWN1b3VzIGFic2VuY2Ugb2YgY3R5cGUgbWFjcm9zIGluIHRoZXNlIGRlZmluaXRpb25zLiAgT24KLSAqIG5vbi1BU0NJSSBob3N0cywgd2UgY2FuJ3QgZGVwZW5kIG9uIHN0cmluZyBsaXRlcmFscyBvciBjdHlwZSBtYWNyb3MgdG8KLSAqIHRlbGwgdXMgYW55dGhpbmcgYWJvdXQgbmV0d29yay1mb3JtYXQgZGF0YS4gIFRoZSByZXN0IG9mIHRoZSBCSU5EIHN5c3RlbQotICogaXMgbm90IGNhcmVmdWwgYWJvdXQgdGhpcywgYnV0IGZvciBzb21lIHJlYXNvbiwgd2UncmUgZG9pbmcgaXQgcmlnaHQgaGVyZS4KLSAqLwotCi0vKiBCSU9OSUM6IFdlIGFsc28gYWNjZXB0IHVuZGVyc2NvcmVzIGluIHRoZSBtaWRkbGUgb2YgbGFiZWxzLgotICogICAgICAgICBUaGlzIGV4dGVuc2lvbiBpcyBuZWVkZWQgdG8gbWFrZSByZXNvbHV0aW9uIG9uIHNvbWUgVlBOIG5ldHdvcmtzCi0gKiAgICAgICAgIHdvcmsgcHJvcGVybHkuCi0gKi8KLQotI2RlZmluZSBQRVJJT0QgMHgyZQotI2RlZmluZQloeXBoZW5jaGFyKGMpICgoYykgPT0gMHgyZCkKLSNkZWZpbmUgYnNsYXNoY2hhcihjKSAoKGMpID09IDB4NWMpCi0jZGVmaW5lIHBlcmlvZGNoYXIoYykgKChjKSA9PSBQRVJJT0QpCi0jZGVmaW5lIGFzdGVyY2hhcihjKSAoKGMpID09IDB4MmEpCi0jZGVmaW5lIGFscGhhY2hhcihjKSAoKChjKSA+PSAweDQxICYmIChjKSA8PSAweDVhKSBcCi0JCSAgIHx8ICgoYykgPj0gMHg2MSAmJiAoYykgPD0gMHg3YSkpCi0jZGVmaW5lIGRpZ2l0Y2hhcihjKSAoKGMpID49IDB4MzAgJiYgKGMpIDw9IDB4MzkpCi0jZGVmaW5lIHVuZGVyc2NvcmVjaGFyKGMpICAoKGMpID09IDB4NWYpCi0KLSNkZWZpbmUgYm9yZGVyY2hhcihjKSAoYWxwaGFjaGFyKGMpIHx8IGRpZ2l0Y2hhcihjKSkKLSNkZWZpbmUgbWlkZGxlY2hhcihjKSAoYm9yZGVyY2hhcihjKSB8fCBoeXBoZW5jaGFyKGMpIHx8IHVuZGVyc2NvcmVjaGFyKGMpKQotI2RlZmluZQlkb21haW5jaGFyKGMpICgoYykgPiAweDIwICYmIChjKSA8IDB4N2YpCi0KLWludAotcmVzX2hub2soY29uc3QgY2hhciAqZG4pIHsKLQlpbnQgcGNoID0gUEVSSU9ELCBjaCA9ICpkbisrOwotCi0Jd2hpbGUgKGNoICE9ICdcMCcpIHsKLQkJaW50IG5jaCA9ICpkbisrOwotCi0JCWlmIChwZXJpb2RjaGFyKGNoKSkgewotCQkJOwotCQl9IGVsc2UgaWYgKHBlcmlvZGNoYXIocGNoKSkgewotCQkJaWYgKCFib3JkZXJjaGFyKGNoKSkKLQkJCQlyZXR1cm4gKDApOwotCQl9IGVsc2UgaWYgKHBlcmlvZGNoYXIobmNoKSB8fCBuY2ggPT0gJ1wwJykgewotCQkJaWYgKCFib3JkZXJjaGFyKGNoKSkKLQkJCQlyZXR1cm4gKDApOwotCQl9IGVsc2UgewotCQkJaWYgKCFtaWRkbGVjaGFyKGNoKSkKLQkJCQlyZXR1cm4gKDApOwotCQl9Ci0JCXBjaCA9IGNoLCBjaCA9IG5jaDsKLQl9Ci0JcmV0dXJuICgxKTsKLX0KLQotLyoKLSAqIGhvc3RuYW1lLWxpa2UgKEEsIE1YLCBXS1MpIG93bmVycyBjYW4gaGF2ZSAiKiIgYXMgdGhlaXIgZmlyc3QgbGFiZWwKLSAqIGJ1dCBtdXN0IG90aGVyd2lzZSBiZSBhcyBhIGhvc3QgbmFtZS4KLSAqLwotaW50Ci1yZXNfb3dub2soY29uc3QgY2hhciAqZG4pIHsKLQlpZiAoYXN0ZXJjaGFyKGRuWzBdKSkgewotCQlpZiAocGVyaW9kY2hhcihkblsxXSkpCi0JCQlyZXR1cm4gKHJlc19obm9rKGRuKzIpKTsKLQkJaWYgKGRuWzFdID09ICdcMCcpCi0JCQlyZXR1cm4gKDEpOwotCX0KLQlyZXR1cm4gKHJlc19obm9rKGRuKSk7Ci19Ci0KLS8qCi0gKiBTT0EgUk5BTUVzIGFuZCBSUCBSTkFNRXMgY2FuIGhhdmUgYW55IHByaW50YWJsZSBjaGFyYWN0ZXIgaW4gdGhlaXIgZmlyc3QKLSAqIGxhYmVsLCBidXQgdGhlIHJlc3Qgb2YgdGhlIG5hbWUgaGFzIHRvIGxvb2sgbGlrZSBhIGhvc3QgbmFtZS4KLSAqLwotaW50Ci1yZXNfbWFpbG9rKGNvbnN0IGNoYXIgKmRuKSB7Ci0JaW50IGNoLCBlc2NhcGVkID0gMDsKLQotCS8qICIuIiBpcyBhIHZhbGlkIG1pc3NpbmcgcmVwcmVzZW50YXRpb24gKi8KLQlpZiAoKmRuID09ICdcMCcpCi0JCXJldHVybiAoMSk7Ci0KLQkvKiBvdGhlcndpc2UgPGxhYmVsPi48aG9zdG5hbWU+ICovCi0Jd2hpbGUgKChjaCA9ICpkbisrKSAhPSAnXDAnKSB7Ci0JCWlmICghZG9tYWluY2hhcihjaCkpCi0JCQlyZXR1cm4gKDApOwotCQlpZiAoIWVzY2FwZWQgJiYgcGVyaW9kY2hhcihjaCkpCi0JCQlicmVhazsKLQkJaWYgKGVzY2FwZWQpCi0JCQllc2NhcGVkID0gMDsKLQkJZWxzZSBpZiAoYnNsYXNoY2hhcihjaCkpCi0JCQllc2NhcGVkID0gMTsKLQl9Ci0JaWYgKHBlcmlvZGNoYXIoY2gpKQotCQlyZXR1cm4gKHJlc19obm9rKGRuKSk7Ci0JcmV0dXJuICgwKTsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgcXVpdGUgbGliZXJhbCwgc2luY2UgUkZDIDEwMzQncyBjaGFyYWN0ZXIgc2V0cyBhcmUgb25seQotICogcmVjb21tZW5kYXRpb25zLgotICovCi1pbnQKLXJlc19kbm9rKGNvbnN0IGNoYXIgKmRuKSB7Ci0JaW50IGNoOwotCi0Jd2hpbGUgKChjaCA9ICpkbisrKSAhPSAnXDAnKQotCQlpZiAoIWRvbWFpbmNoYXIoY2gpKQotCQkJcmV0dXJuICgwKTsKLQlyZXR1cm4gKDEpOwotfQotCi0jaWZkZWYgQklORF80X0NPTVBBVAotLyoKLSAqIFRoaXMgbW9kdWxlIG11c3QgZXhwb3J0IHRoZSBmb2xsb3dpbmcgZXh0ZXJuYWxseS12aXNpYmxlIHN5bWJvbHM6Ci0gKglfX19wdXRsb25nCi0gKglfX19wdXRzaG9ydAotICoJX19nZXRsb25nCi0gKglfX2dldHNob3J0Ci0gKiBOb3RlIHRoYXQgb25lIF8gY29tZXMgZnJvbSBDIGFuZCB0aGUgb3RoZXJzIGNvbWUgZnJvbSB1cy4KLSAqLwotdm9pZCBfX3B1dGxvbmcodV9pbnQzMl90IHNyYywgdV9jaGFyICpkc3QpIHsgbnNfcHV0MzIoc3JjLCBkc3QpOyB9Ci12b2lkIF9fcHV0c2hvcnQodV9pbnQxNl90IHNyYywgdV9jaGFyICpkc3QpIHsgbnNfcHV0MTYoc3JjLCBkc3QpOyB9Ci0jaWZuZGVmIF9fdWx0cml4X18KLXVfaW50MzJfdCBfZ2V0bG9uZyhjb25zdCB1X2NoYXIgKnNyYykgeyByZXR1cm4gKG5zX2dldDMyKHNyYykpOyB9Ci11X2ludDE2X3QgX2dldHNob3J0KGNvbnN0IHVfY2hhciAqc3JjKSB7IHJldHVybiAobnNfZ2V0MTYoc3JjKSk7IH0KLSNlbmRpZiAvKl9fdWx0cml4X18qLwotI2VuZGlmIC8qQklORF80X0NPTVBBVCovCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2NvbXBhdC5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19jb21wYXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlhMWQ1Zi4uMDAwMDAwMAotLS0gYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2NvbXBhdC5jCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoJJE5ldEJTRDogcmVzX2NvbXBhdC5jLHYgMS4xIDIwMDQvMDYvMDkgMTg6MDc6MDMgY2hyaXN0b3MgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi0gKiBieSBDaHJpc3RvcyBab3VsYXMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBOZXRCU0QKLSAqICAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKLSAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLV9fUkNTSUQoIiROZXRCU0Q6IHJlc19jb21wYXQuYyx2IDEuMSAyMDA0LzA2LzA5IDE4OjA3OjAzIGNocmlzdG9zIEV4cCAkIik7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgotI2luY2x1ZGUgPG5ldGRiLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZGVmaW5lIF9fT0xEX1JFU19TVEFURQotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCi0jZWxzZQotI2luY2x1ZGUgInJlc29sdi5oIgotI2VuZGlmCi0KLSN1bmRlZiBfcmVzCi0KLS8qCi0gKiBCaW5hcnkgQ29tcGF0aWJpbGl0eTsgdGhpcyBzeW1ib2wgZG9lcyBub3QgYXBwZWFyIGluIGEgaGVhZGVyIGZpbGUKLSAqIE1vc3QgdXNlcmxhbmQgcHJvZ3JhbXMgdXNlIHRoaXMgdG8gc2V0IHJlc19vcHRpb25zIGJlZm9yZSByZXNfaW5pdCgpCi0gKiBpcyBjYWxsZWQuIFRoZXJlIGFyZSBob29rcyB0byByZXNfaW5pdCgpIHRvIGNvbnN1bHQgdGhlIGRhdGEgaW4gdGhpcwotICogc3RydWN0dXJlLiBUaGUgaG9va3MgYXJlIHByb3ZpZGVkIGluZGlyZWN0bHkgYnkgdGhlIHR3byBmdW5jdGlvbnMgYmVsb3cuCi0gKiBXZSBkZXBlbmQgb24gdGhlIGZhY3QgdGhlIHRoZSBmaXJzdCA0NDAgWzMyIGJpdCBtYWNoaW5lc10gYnl0ZXMgYXJlCi0gKiBzaGFyZWQgYmV0d2VlbiB0aGUgdHdvIHN0cnVjdHVyZXMuCi0gKi8KLSNpZm5kZWYgX19CSU5EX05PU1RBVElDCi1zdHJ1Y3QgX19yZXNfc3RhdGUgX3JlcwotI2lmIGRlZmluZWQoX19CSU5EX1JFU19URVhUKQotCT0geyBSRVNfVElNRU9VVCwgfSAgICAgIC8qIE1vdG9yb2xhLCBldCBhbC4gKi8KLSMgZW5kaWYKLTsKLQotdm9pZCAqX19yZXNfZ2V0X29sZF9zdGF0ZSh2b2lkKTsKLXZvaWQgX19yZXNfcHV0X29sZF9zdGF0ZSh2b2lkICopOwotCi12b2lkICoKLV9fcmVzX2dldF9vbGRfc3RhdGUodm9pZCkKLXsKLQlyZXR1cm4gJl9yZXM7Ci19Ci0KLXZvaWQKLV9fcmVzX3B1dF9vbGRfc3RhdGUodm9pZCAqcmVzKQotewotCSh2b2lkKW1lbWNweSgmX3JlcywgcmVzLCBzaXplb2YoX3JlcykpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RhdGEuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfZGF0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTVhMzA4Li4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfZGF0YS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzI3ICswLDAgQEAKLS8qCSROZXRCU0Q6IHJlc19kYXRhLmMsdiAxLjggMjAwNC8wNi8wOSAxODowNzowMyBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTUtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmZGVmIG5vdGRlZgotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX2RhdGEuYyx2IDEuMS4yMDYuMiAyMDA0LzAzLzE2IDEyOjM0OjE4IG1hcmthIEV4cCI7Ci0jZWxzZQotX19SQ1NJRCgiJE5ldEJTRDogcmVzX2RhdGEuYyx2IDEuOCAyMDA0LzA2LzA5IDE4OjA3OjAzIGNocmlzdG9zIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPG5ldGRiLmg+Ci0jaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0KLV9fTElCQ19ISURERU5fXwotY29uc3QgY2hhciAqIGNvbnN0IF9yZXNfb3Bjb2Rlc1tdID0gewotCSJRVUVSWSIsCi0JIklRVUVSWSIsCi0JIkNRVUVSWU0iLAotCSJDUVVFUllVIiwJLyogZXhwZXJpbWVudGFsICovCi0JIk5PVElGWSIsCS8qIGV4cGVyaW1lbnRhbCAqLwotCSJVUERBVEUiLAotCSI2IiwKLQkiNyIsCi0JIjgiLAotCSI5IiwKLQkiMTAiLAotCSIxMSIsCi0JIjEyIiwKLQkiMTMiLAotCSJaT05FSU5JVCIsCi0JIlpPTkVSRUYiLAotfTsKLQotI2lmZGVmIEJJTkRfVVBEQVRFCi1jb25zdCBjaGFyICogY29uc3QgX3Jlc19zZWN0aW9uY29kZXNbXSA9IHsKLQkiWk9ORSIsCi0JIlBSRVJFUVVJU0lURVMiLAotCSJVUERBVEUiLAotCSJBRERJVElPTkFMIiwKLX07Ci0jZW5kaWYKLQotI2lmbmRlZiBfX0JJTkRfTk9TVEFUSUMKLWV4dGVybiBzdHJ1Y3QgX19yZXNfc3RhdGUgX25yZXM7Ci0KLS8qIFByb3RvLiAqLwotCi1pbnQgIHJlc19vdXJzZXJ2ZXJfcChjb25zdCByZXNfc3RhdGUsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKTsKLQotI2RlZmluZSByZXNfbmVlZF9pbml0KCkgICAoKF9ucmVzLm9wdGlvbnMgJiBSRVNfSU5JVCkgPT0gMFUpCi0KLWludAotcmVzX2luaXQodm9pZCkgewotCWludCBydjsKLQlleHRlcm4gaW50IF9fcmVzX3Zpbml0KHJlc19zdGF0ZSwgaW50KTsKLSNpZmRlZiBDT01QQVRfX1JFUwotCS8qCi0JICogQ29tcGF0aWJpbGl0eSB3aXRoIHByb2dyYW0gdGhhdCB3ZXJlIGFjY2Vzc2luZyBfcmVzIGRpcmVjdGx5Ci0JICogdG8gc2V0IG9wdGlvbnMuIFdlIGtlZXAgYW5vdGhlciBzdHJ1Y3QgcmVzIHRoYXQgaXMgdGhlIHNhbWUKLQkgKiBzaXplIGFzIHRoZSBvcmlnaW5hbCByZXMgc3RydWN0dXJlLCBhbmQgdGhlbiBjb3B5IGZpZWxkcyB0bwotCSAqIGl0IHNvIHRoYXQgd2UgYWNoaWV2ZSB0aGUgc2FtZSBpbml0aWFsaXphdGlvbgotCSAqLwotCWV4dGVybiB2b2lkICpfX3Jlc19nZXRfb2xkX3N0YXRlKHZvaWQpOwotCWV4dGVybiB2b2lkIF9fcmVzX3B1dF9vbGRfc3RhdGUodm9pZCAqKTsKLQlyZXNfc3RhdGUgb3JlcyA9IF9fcmVzX2dldF9vbGRfc3RhdGUoKTsKLQotCWlmIChvcmVzLT5vcHRpb25zICE9IDApCi0JCV9ucmVzLm9wdGlvbnMgPSBvcmVzLT5vcHRpb25zOwotCWlmIChvcmVzLT5yZXRyYW5zICE9IDApCi0JCV9ucmVzLnJldHJhbnMgPSBvcmVzLT5yZXRyYW5zOwotCWlmIChvcmVzLT5yZXRyeSAhPSAwKQotCQlfbnJlcy5yZXRyeSA9IG9yZXMtPnJldHJ5OwotI2VuZGlmCi0KLQkvKgotCSAqIFRoZXNlIHRocmVlIGZpZWxkcyB1c2VkIHRvIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuICBUaGlzIG1hZGUKLQkgKiBpdCBoYXJkIHRvIHVzZSB0aGlzIGNvZGUgaW4gYSBzaGFyZWQgbGlicmFyeS4gIEl0IGlzIG5lY2Vzc2FyeSwKLQkgKiBub3cgdGhhdCB3ZSdyZSBkb2luZyBkeW5hbWljIGluaXRpYWxpemF0aW9uIGhlcmUsIHRoYXQgd2UgcHJlc2VydmUKLQkgKiB0aGUgb2xkIHNlbWFudGljczogaWYgYW4gYXBwbGljYXRpb24gbW9kaWZpZXMgb25lIG9mIHRoZXNlIHRocmVlCi0JICogZmllbGRzIG9mIF9yZXMgYmVmb3JlIHJlc19pbml0KCkgaXMgY2FsbGVkLCByZXNfaW5pdCgpIHdpbGwgbm90Ci0JICogYWx0ZXIgdGhlbS4gIE9mIGNvdXJzZSwgaWYgYW4gYXBwbGljYXRpb24gaXMgc2V0dGluZyB0aGVtIHRvCi0JICogX3plcm9fIGJlZm9yZSBjYWxsaW5nIHJlc19pbml0KCksIGhvcGluZyB0byBvdmVycmlkZSB3aGF0IHVzZWQKLQkgKiB0byBiZSB0aGUgc3RhdGljIGRlZmF1bHQsIHdlIGNhbid0IGRldGVjdCBpdCBhbmQgdW5leHBlY3RlZCByZXN1bHRzCi0JICogd2lsbCBmb2xsb3cuICBaZXJvIGZvciBhbnkgb2YgdGhlc2UgZmllbGRzIHdvdWxkIG1ha2Ugbm8gc2Vuc2UsCi0JICogc28gb25lIGNhbiBzYWZlbHkgYXNzdW1lIHRoYXQgdGhlIGFwcGxpY2F0aW9ucyB3ZXJlIGFscmVhZHkgZ2V0dGluZwotCSAqIHVuZXhwZWN0ZWQgcmVzdWx0cy4KLQkgKgotCSAqIF9ucmVzLm9wdGlvbnMgaXMgdHJpY2t5IHNpbmNlIHNvbWUgYXBwcyB3ZXJlIGtub3duIHRvIGRpZGRsZSB0aGUgYml0cwotCSAqIGJlZm9yZSByZXNfaW5pdCgpIHdhcyBmaXJzdCBjYWxsZWQuIFdlIGNhbid0IHJlcGxpY2F0ZSB0aGF0IHNlbWFudGljCi0JICogd2l0aCBkeW5hbWljIGluaXRpYWxpemF0aW9uICh0aGV5IG1heSBoYXZlIHR1cm5lZCBiaXRzIG9mZiB0aGF0IGFyZQotCSAqIHNldCBpbiBSRVNfREVGQVVMVCkuICBPdXIgc29sdXRpb24gaXMgdG8gZGVjbGFyZSBzdWNoIGFwcGxpY2F0aW9ucwotCSAqICJicm9rZW4iLiAgVGhleSBjb3VsZCBmb29sIHVzIGJ5IHNldHRpbmcgUkVTX0lOSVQgYnV0IG5vbmUgZG8gKHlldCkuCi0JICovCi0JaWYgKCFfbnJlcy5yZXRyYW5zKQotCQlfbnJlcy5yZXRyYW5zID0gUkVTX1RJTUVPVVQ7Ci0JaWYgKCFfbnJlcy5yZXRyeSkKLQkJX25yZXMucmV0cnkgPSA0OwotCWlmICghKF9ucmVzLm9wdGlvbnMgJiBSRVNfSU5JVCkpCi0JCV9ucmVzLm9wdGlvbnMgPSBSRVNfREVGQVVMVDsKLQotCS8qCi0JICogVGhpcyBvbmUgdXNlZCB0byBpbml0aWFsaXplIGltcGxpY2l0bHkgdG8gemVybywgc28gdW5sZXNzIHRoZSBhcHAKLQkgKiBoYXMgc2V0IGl0IHRvIHNvbWV0aGluZyBpbiBwYXJ0aWN1bGFyLCB3ZSBjYW4gcmFuZG9taXplIGl0IG5vdy4KLQkgKi8KLQlpZiAoIV9ucmVzLmlkKQotCQlfbnJlcy5pZCA9IHJlc19yYW5kb21pZCgpOwotCi0JcnYgPSBfX3Jlc192aW5pdCgmX25yZXMsIDEpOwotI2lmZGVmIENPTVBBVF9fUkVTCi0JX19yZXNfcHV0X29sZF9zdGF0ZSgmX25yZXMpOwotI2VuZGlmCi0JcmV0dXJuIHJ2OwotfQotCi12b2lkCi1wX3F1ZXJ5KGNvbnN0IHVfY2hhciAqbXNnKSB7Ci0JZnBfcXVlcnkobXNnLCBzdGRvdXQpOwotfQotCi12b2lkCi1mcF9xdWVyeShjb25zdCB1X2NoYXIgKm1zZywgRklMRSAqZmlsZSkgewotCWZwX25xdWVyeShtc2csIFBBQ0tFVFNaLCBmaWxlKTsKLX0KLQotdm9pZAotZnBfbnF1ZXJ5KGNvbnN0IHVfY2hhciAqbXNnLCBpbnQgbGVuLCBGSUxFICpmaWxlKSB7Ci0JaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKQotCQlyZXR1cm47Ci0KLQlyZXNfcHF1ZXJ5KCZfbnJlcywgbXNnLCBsZW4sIGZpbGUpOwotfQotCi1pbnQKLXJlc19ta3F1ZXJ5KGludCBvcCwJCQkvKiBvcGNvZGUgb2YgcXVlcnkgKi8KLQkgICAgY29uc3QgY2hhciAqZG5hbWUsCQkvKiBkb21haW4gbmFtZSAqLwotCSAgICBpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLwotCSAgICBjb25zdCB1X2NoYXIgKmRhdGEsCQkvKiByZXNvdXJjZSByZWNvcmQgZGF0YSAqLwotCSAgICBpbnQgZGF0YWxlbiwJCS8qIGxlbmd0aCBvZiBkYXRhICovCi0JICAgIGNvbnN0IHVfY2hhciAqbmV3cnJfaW4sCS8qIG5ldyByciBmb3IgbW9kaWZ5IG9yIGFwcGVuZCAqLwotCSAgICB1X2NoYXIgKmJ1ZiwJCS8qIGJ1ZmZlciB0byBwdXQgcXVlcnkgKi8KLQkgICAgaW50IGJ1ZmxlbikJCQkvKiBzaXplIG9mIGJ1ZmZlciAqLwotewotCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgewotCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlyZXR1cm4gKHJlc19ubWtxdWVyeSgmX25yZXMsIG9wLCBkbmFtZSwgY2xhc3MsIHR5cGUsCi0JCQkgICAgIGRhdGEsIGRhdGFsZW4sCi0JCQkgICAgIG5ld3JyX2luLCBidWYsIGJ1ZmxlbikpOwotfQotCi0jaWZkZWYgX0xJQlJFU09MVgotaW50Ci1yZXNfbWt1cGRhdGUobnNfdXBkcmVjICpycmVjcF9pbiwgdV9jaGFyICpidWYsIGludCBidWZsZW4pIHsKLQlpZiAocmVzX25lZWRfaW5pdCgpICYmIHJlc19pbml0KCkgPT0gLTEpIHsKLQkJUkVTX1NFVF9IX0VSUk5PKCZfbnJlcywgTkVUREJfSU5URVJOQUwpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQlyZXR1cm4gKHJlc19ubWt1cGRhdGUoJl9ucmVzLCBycmVjcF9pbiwgYnVmLCBidWZsZW4pKTsKLX0KLSNlbmRpZgotCi1pbnQKLXJlc19xdWVyeShjb25zdCBjaGFyICpuYW1lLAkvKiBkb21haW4gbmFtZSAqLwotCSAgaW50IGNsYXNzLCBpbnQgdHlwZSwJLyogY2xhc3MgYW5kIHR5cGUgb2YgcXVlcnkgKi8KLQkgIHVfY2hhciAqYW5zd2VyLAkvKiBidWZmZXIgdG8gcHV0IGFuc3dlciAqLwotCSAgaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyIGJ1ZmZlciAqLwotewotCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgewotCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlyZXR1cm4gKHJlc19ucXVlcnkoJl9ucmVzLCBuYW1lLCBjbGFzcywgdHlwZSwgYW5zd2VyLCBhbnNsZW4pKTsKLX0KLQotdm9pZAotcmVzX3NlbmRfc2V0cWhvb2socmVzX3NlbmRfcWhvb2sgaG9vaykgewotCV9ucmVzLnFob29rID0gaG9vazsKLX0KLQotdm9pZAotcmVzX3NlbmRfc2V0cmhvb2socmVzX3NlbmRfcmhvb2sgaG9vaykgewotCV9ucmVzLnJob29rID0gaG9vazsKLX0KLQotaW50Ci1yZXNfaXNvdXJzZXJ2ZXIoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICppbnApIHsKLQlyZXR1cm4gKHJlc19vdXJzZXJ2ZXJfcCgmX25yZXMsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikoY29uc3Qgdm9pZCAqKWlucCkpOwotfQotCi1pbnQKLXJlc19zZW5kKGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1X2NoYXIgKmFucywgaW50IGFuc3NpeikgewotCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgewotCQkvKiBlcnJubyBzaG91bGQgaGF2ZSBiZWVuIHNldCBieSByZXNfaW5pdCgpIGluIHRoaXMgY2FzZS4gKi8KLQkJcmV0dXJuICgtMSk7Ci0JfQotCi0JcmV0dXJuIChyZXNfbnNlbmQoJl9ucmVzLCBidWYsIGJ1ZmxlbiwgYW5zLCBhbnNzaXopKTsKLX0KLQotI2lmZGVmIF9MSUJSRVNPTFYKLWludAotcmVzX3NlbmRzaWduZWQoY29uc3QgdV9jaGFyICpidWYsIGludCBidWZsZW4sIG5zX3RzaWdfa2V5ICprZXksCi0JICAgICAgIHVfY2hhciAqYW5zLCBpbnQgYW5zc2l6KQotewotCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgewotCQkvKiBlcnJubyBzaG91bGQgaGF2ZSBiZWVuIHNldCBieSByZXNfaW5pdCgpIGluIHRoaXMgY2FzZS4gKi8KLQkJcmV0dXJuICgtMSk7Ci0JfQotCi0JcmV0dXJuIChyZXNfbnNlbmRzaWduZWQoJl9ucmVzLCBidWYsIGJ1Zmxlbiwga2V5LCBhbnMsIGFuc3NpeikpOwotfQotI2VuZGlmCi0KLXZvaWQKLXJlc19jbG9zZSh2b2lkKSB7Ci0JcmVzX25jbG9zZSgmX25yZXMpOwotfQotCi0jaWZkZWYgX0xJQlJFU09MVgotaW50Ci1yZXNfdXBkYXRlKG5zX3VwZHJlYyAqcnJlY3BfaW4pIHsKLQlpZiAocmVzX25lZWRfaW5pdCgpICYmIHJlc19pbml0KCkgPT0gLTEpIHsKLQkJUkVTX1NFVF9IX0VSUk5PKCZfbnJlcywgTkVUREJfSU5URVJOQUwpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQlyZXR1cm4gKHJlc19udXBkYXRlKCZfbnJlcywgcnJlY3BfaW4sIE5VTEwpKTsKLX0KLSNlbmRpZgotCi1pbnQKLXJlc19zZWFyY2goY29uc3QgY2hhciAqbmFtZSwJLyogZG9tYWluIG5hbWUgKi8KLQkgICBpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLwotCSAgIHVfY2hhciAqYW5zd2VyLAkvKiBidWZmZXIgdG8gcHV0IGFuc3dlciAqLwotCSAgIGludCBhbnNsZW4pCQkvKiBzaXplIG9mIGFuc3dlciAqLwotewotCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgewotCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQotCXJldHVybiAocmVzX25zZWFyY2goJl9ucmVzLCBuYW1lLCBjbGFzcywgdHlwZSwgYW5zd2VyLCBhbnNsZW4pKTsKLX0KLQotaW50Ci1yZXNfcXVlcnlkb21haW4oY29uc3QgY2hhciAqbmFtZSwKLQkJY29uc3QgY2hhciAqZG9tYWluLAotCQlpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLwotCQl1X2NoYXIgKmFuc3dlciwJCS8qIGJ1ZmZlciB0byBwdXQgYW5zd2VyICovCi0JCWludCBhbnNsZW4pCQkvKiBzaXplIG9mIGFuc3dlciAqLwotewotCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgewotCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQotCXJldHVybiAocmVzX25xdWVyeWRvbWFpbigmX25yZXMsIG5hbWUsIGRvbWFpbiwKLQkJCQkgY2xhc3MsIHR5cGUsCi0JCQkJIGFuc3dlciwgYW5zbGVuKSk7Ci19Ci0KLWludAotcmVzX29wdChpbnQgYSwgdV9jaGFyICpiLCBpbnQgYywgaW50IGQpCi17Ci0JcmV0dXJuIHJlc19ub3B0KCZfbnJlcywgYSwgYiwgYywgZCk7Ci19Ci0KLWNvbnN0IGNoYXIgKgotaG9zdGFsaWFzKGNvbnN0IGNoYXIgKm5hbWUpIHsKLQlyZXR1cm4gTlVMTDsKLX0KLQotI2lmZGVmIHVsdHJpeAotaW50Ci1sb2NhbF9ob3N0bmFtZV9sZW5ndGgoY29uc3QgY2hhciAqaG9zdG5hbWUpIHsKLQlpbnQgbGVuX2hvc3QsIGxlbl9kb21haW47Ci0KLQlpZiAoISpfbnJlcy5kZWZkbmFtZSkKLQkJcmVzX2luaXQoKTsKLQlsZW5faG9zdCA9IHN0cmxlbihob3N0bmFtZSk7Ci0JbGVuX2RvbWFpbiA9IHN0cmxlbihfbnJlcy5kZWZkbmFtZSk7Ci0JaWYgKGxlbl9ob3N0ID4gbGVuX2RvbWFpbiAmJgotCSAgICAhc3RyY2FzZWNtcChob3N0bmFtZSArIGxlbl9ob3N0IC0gbGVuX2RvbWFpbiwgX25yZXMuZGVmZG5hbWUpICYmCi0JICAgIGhvc3RuYW1lW2xlbl9ob3N0IC0gbGVuX2RvbWFpbiAtIDFdID09ICcuJykKLQkJcmV0dXJuIChsZW5faG9zdCAtIGxlbl9kb21haW4gLSAxKTsKLQlyZXR1cm4gKDApOwotfQotI2VuZGlmIC8qdWx0cml4Ki8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RlYnVnLmMgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RlYnVnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZTU4M2IuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19kZWJ1Zy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE3NSArMCwwIEBACi0vKgkkTmV0QlNEOiByZXNfZGVidWcuYyx2IDEuNyAyMDA0LzExLzA3IDAyOjI1OjAxIGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODUKLSAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKLSAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCi0gKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKLSAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKLSAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAotICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCi0gKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUwotICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCi0gKiBTT0ZUV0FSRS4KLSAqLwotCi0vKgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk1IGJ5IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEluYy4KLSAqCi0gKiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBJbmMuIChoZXJlaW5hZnRlciBjYWxsZWQgSUJNKSBncmFudHMKLSAqIHBlcm1pc3Npb24gdW5kZXIgaXRzIGNvcHlyaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIFNvZnR3YXJlIHdpdGggb3Igd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCi0gKiBhbGwgcGFyYWdyYXBocyBvZiB0aGlzIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgdGhlIG5hbWUgb2YgSUJNCi0gKiBub3QgYmUgdXNlZCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIG1hcmtldGluZyBvZiBhbnkgcHJvZHVjdCBpbmNvcnBvcmF0aW5nCi0gKiB0aGUgU29mdHdhcmUgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZW9mLCB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCi0gKiBwZXJtaXNzaW9uLgotICoKLSAqIFRvIHRoZSBleHRlbnQgaXQgaGFzIGEgcmlnaHQgdG8gZG8gc28sIElCTSBncmFudHMgYW4gaW1tdW5pdHkgZnJvbSBzdWl0Ci0gKiB1bmRlciBpdHMgcGF0ZW50cywgaWYgYW55LCBmb3IgdGhlIHVzZSwgc2FsZSBvciBtYW51ZmFjdHVyZSBvZiBwcm9kdWN0cyB0bwotICogdGhlIGV4dGVudCB0aGF0IHN1Y2ggcHJvZHVjdHMgYXJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgRG9tYWluIE5hbWUgU3lzdGVtCi0gKiBkeW5hbWljIHVwZGF0ZXMgaW4gVENQL0lQIG5ldHdvcmtzIGJ5IG1lYW5zIG9mIHRoZSBTb2Z0d2FyZS4gIE5vIGltbXVuaXR5IGlzCi0gKiBncmFudGVkIGZvciBhbnkgcHJvZHVjdCBwZXIgc2Ugb3IgZm9yIGFueSBvdGhlciBmdW5jdGlvbiBvZiBhbnkgcHJvZHVjdC4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgQU5EIElCTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsCi0gKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKLSAqIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLAotICogRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgQVJJU0lORwotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KLSAqIElGIElCTSBJUyBBUFBSSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgotICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWZkZWYgbm90ZGVmCi1zdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX2RlYnVnLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLXN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IHJlc19kZWJ1Zy5jLHYgMS4zLjIuNS40LjUgMjAwNC8wNy8yOCAyMDoxNjo0NiBtYXJrYSBFeHAiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IHJlc19kZWJ1Zy5jLHYgMS43IDIwMDQvMTEvMDcgMDI6MjU6MDEgY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPG5ldGRiLmg+Ci0jaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0KLQotCi0jaWZkZWYgU1BSSU5URl9DSEFSCi0jIGRlZmluZSBTUFJJTlRGKHgpIHN0cmxlbihzcHJpbnRmLyoqL3gpCi0jZWxzZQotIyBkZWZpbmUgU1BSSU5URih4KSBzcHJpbnRmIHgKLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgY2hhciAqcHJlY3NpemVfbnRvYSh1X2ludDMyX3QpOwotCi1leHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IF9yZXNfb3Bjb2Rlc1tdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBfcmVzX3NlY3Rpb25jb2Rlc1tdOwotCi0jaWZuZGVmIF9MSUJDCi0vKgotICogUHJpbnQgdGhlIGN1cnJlbnQgb3B0aW9ucy4KLSAqLwotdm9pZAotZnBfcmVzc3RhdChjb25zdCByZXNfc3RhdGUgc3RhdHAsIEZJTEUgKmZpbGUpIHsKLQl1X2xvbmcgbWFzazsKLQotCWZwcmludGYoZmlsZSwgIjs7IHJlcyBvcHRpb25zOiIpOwotCWZvciAobWFzayA9IDE7ICBtYXNrICE9IDBVOyAgbWFzayA8PD0gMSkKLQkJaWYgKHN0YXRwLT5vcHRpb25zICYgbWFzaykKLQkJCWZwcmludGYoZmlsZSwgIiAlcyIsIHBfb3B0aW9uKG1hc2spKTsKLQlwdXRjKCdcbicsIGZpbGUpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkCi1kb19zZWN0aW9uKGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwKLQkgICBuc19tc2cgKmhhbmRsZSwgbnNfc2VjdCBzZWN0aW9uLAotCSAgIGludCBwZmxhZywgRklMRSAqZmlsZSkKLXsKLQlpbnQgbiwgc2ZsYWcsIHJybnVtOwotCWludCBidWZsZW4gPSAyMDQ4OwotCWNoYXIgKmJ1ZjsKLQluc19vcGNvZGUgb3Bjb2RlOwotCW5zX3JyIHJyOwotCi0JLyoKLQkgKiBQcmludCBhbnN3ZXIgcmVjb3Jkcy4KLQkgKi8KLQlzZmxhZyA9IChzdGF0cC0+cGZjb2RlICYgcGZsYWcpOwotCWlmIChzdGF0cC0+cGZjb2RlICYmICFzZmxhZykKLQkJcmV0dXJuOwotCi0JYnVmID0gbWFsbG9jKChzaXplX3QpYnVmbGVuKTsKLQlpZiAoYnVmID09IE5VTEwpIHsKLQkJZnByaW50ZihmaWxlLCAiOzsgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlvcGNvZGUgPSAobnNfb3Bjb2RlKSBuc19tc2dfZ2V0ZmxhZygqaGFuZGxlLCBuc19mX29wY29kZSk7Ci0JcnJudW0gPSAwOwotCWZvciAoOzspIHsKLQkJaWYgKG5zX3BhcnNlcnIoaGFuZGxlLCBzZWN0aW9uLCBycm51bSwgJnJyKSkgewotCQkJaWYgKGVycm5vICE9IEVOT0RFVikKLQkJCQlmcHJpbnRmKGZpbGUsICI7OyBuc19wYXJzZXJyOiAlc1xuIiwKLQkJCQkJc3RyZXJyb3IoZXJybm8pKTsKLQkJCWVsc2UgaWYgKHJybnVtID4gMCAmJiBzZmxhZyAhPSAwICYmCi0JCQkJIChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEMSkpCi0JCQkJcHV0YygnXG4nLCBmaWxlKTsKLQkJCWdvdG8gY2xlYW51cDsKLQkJfQotCQlpZiAocnJudW0gPT0gMCAmJiBzZmxhZyAhPSAwICYmIChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEMSkpCi0JCQlmcHJpbnRmKGZpbGUsICI7OyAlcyBTRUNUSU9OOlxuIiwKLQkJCQlwX3NlY3Rpb24oc2VjdGlvbiwgb3Bjb2RlKSk7Ci0JCWlmIChzZWN0aW9uID09IG5zX3NfcWQpCi0JCQlmcHJpbnRmKGZpbGUsICI7O1x0JXMsIHR5cGUgPSAlcywgY2xhc3MgPSAlc1xuIiwKLQkJCQluc19ycl9uYW1lKHJyKSwKLQkJCQlwX3R5cGUobnNfcnJfdHlwZShycikpLAotCQkJCXBfY2xhc3MobnNfcnJfY2xhc3MocnIpKSk7Ci0JCWVsc2UgaWYgKHNlY3Rpb24gPT0gbnNfc19hciAmJiBuc19ycl90eXBlKHJyKSA9PSBuc190X29wdCkgewotCQkJdV9pbnQzMl90IHR0bCA9IG5zX3JyX3R0bChycik7Ci0JCQlmcHJpbnRmKGZpbGUsCi0JCQkJIjsgRUROUzogdmVyc2lvbjogJXUsIHVkcD0ldSwgZmxhZ3M9JTA0eFxuIiwKLQkJCQkodHRsPj4xNikmMHhmZiwgbnNfcnJfY2xhc3MocnIpLCB0dGwmMHhmZmZmKTsKLQkJfSBlbHNlIHsKLQkJCW4gPSBuc19zcHJpbnRycihoYW5kbGUsICZyciwgTlVMTCwgTlVMTCwKLQkJCQkJYnVmLCAodV9pbnQpYnVmbGVuKTsKLQkJCWlmIChuIDwgMCkgewotCQkJCWlmIChlcnJubyA9PSBFTk9TUEMpIHsKLQkJCQkJZnJlZShidWYpOwotCQkJCQlidWYgPSBOVUxMOwotCQkJCQlpZiAoYnVmbGVuIDwgMTMxMDcyKQotCQkJCQkJYnVmID0gbWFsbG9jKChzaXplX3QpKGJ1ZmxlbiArPSAxMDI0KSk7Ci0JCQkJCWlmIChidWYgPT0gTlVMTCkgewotCQkJCQkJZnByaW50ZihmaWxlLAotCQkJCSAgICAgICAgICAgICAgIjs7IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOwotCQkJCQkgICAgICByZXR1cm47Ci0JCQkJCX0KLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWZwcmludGYoZmlsZSwgIjs7IG5zX3NwcmludHJyOiAlc1xuIiwKLQkJCQkJc3RyZXJyb3IoZXJybm8pKTsKLQkJCQlnb3RvIGNsZWFudXA7Ci0JCQl9Ci0JCQlmcHV0cyhidWYsIGZpbGUpOwotCQkJZnB1dGMoJ1xuJywgZmlsZSk7Ci0JCX0KLQkJcnJudW0rKzsKLQl9Ci0gY2xlYW51cDoKLQlpZiAoYnVmICE9IE5VTEwpCi0JCWZyZWUoYnVmKTsKLX0KLQotLyoKLSAqIFByaW50IHRoZSBjb250ZW50cyBvZiBhIHF1ZXJ5LgotICogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSBwcmltYXJpbHkgYSBkZWJ1Z2dpbmcgcm91dGluZS4KLSAqLwotdm9pZAotcmVzX3BxdWVyeShjb25zdCByZXNfc3RhdGUgc3RhdHAsIGNvbnN0IHVfY2hhciAqbXNnLCBpbnQgbGVuLCBGSUxFICpmaWxlKSB7Ci0JbnNfbXNnIGhhbmRsZTsKLQlpbnQgcWRjb3VudCwgYW5jb3VudCwgbnNjb3VudCwgYXJjb3VudDsKLQl1X2ludCBvcGNvZGUsIHJjb2RlLCBpZDsKLQotCWlmIChuc19pbml0cGFyc2UobXNnLCBsZW4sICZoYW5kbGUpIDwgMCkgewotCQlmcHJpbnRmKGZpbGUsICI7OyBuc19pbml0cGFyc2U6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotCQlyZXR1cm47Ci0JfQotCW9wY29kZSA9IG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9vcGNvZGUpOwotCXJjb2RlID0gbnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX3Jjb2RlKTsKLQlpZCA9IG5zX21zZ19pZChoYW5kbGUpOwotCXFkY291bnQgPSBuc19tc2dfY291bnQoaGFuZGxlLCBuc19zX3FkKTsKLQlhbmNvdW50ID0gbnNfbXNnX2NvdW50KGhhbmRsZSwgbnNfc19hbik7Ci0JbnNjb3VudCA9IG5zX21zZ19jb3VudChoYW5kbGUsIG5zX3NfbnMpOwotCWFyY291bnQgPSBuc19tc2dfY291bnQoaGFuZGxlLCBuc19zX2FyKTsKLQotCS8qCi0JICogUHJpbnQgaGVhZGVyIGZpZWxkcy4KLQkgKi8KLQlpZiAoKCFzdGF0cC0+cGZjb2RlKSB8fCAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfSEVBRFgpIHx8IHJjb2RlKQotCQlmcHJpbnRmKGZpbGUsCi0JCQkiOzsgLT4+SEVBREVSPDwtIG9wY29kZTogJXMsIHN0YXR1czogJXMsIGlkOiAlZFxuIiwKLQkJCV9yZXNfb3Bjb2Rlc1tvcGNvZGVdLCBwX3Jjb2RlKChpbnQpcmNvZGUpLCBpZCk7Ci0JaWYgKCghc3RhdHAtPnBmY29kZSkgfHwgKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX0hFQURYKSkKLQkJcHV0YygnOycsIGZpbGUpOwotCWlmICgoIXN0YXRwLT5wZmNvZGUpIHx8IChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEMikpIHsKLQkJZnByaW50ZihmaWxlLCAiOyBmbGFnczoiKTsKLQkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9xcikpCi0JCQlmcHJpbnRmKGZpbGUsICIgcXIiKTsKLQkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9hYSkpCi0JCQlmcHJpbnRmKGZpbGUsICIgYWEiKTsKLQkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl90YykpCi0JCQlmcHJpbnRmKGZpbGUsICIgdGMiKTsKLQkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9yZCkpCi0JCQlmcHJpbnRmKGZpbGUsICIgcmQiKTsKLQkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9yYSkpCi0JCQlmcHJpbnRmKGZpbGUsICIgcmEiKTsKLQkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl96KSkKLQkJCWZwcmludGYoZmlsZSwgIiA/PyIpOwotCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX2FkKSkKLQkJCWZwcmludGYoZmlsZSwgIiBhZCIpOwotCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX2NkKSkKLQkJCWZwcmludGYoZmlsZSwgIiBjZCIpOwotCX0KLQlpZiAoKCFzdGF0cC0+cGZjb2RlKSB8fCAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfSEVBRDEpKSB7Ci0JCWZwcmludGYoZmlsZSwgIjsgJXM6ICVkIiwKLQkJCXBfc2VjdGlvbihuc19zX3FkLCAoaW50KW9wY29kZSksIHFkY291bnQpOwotCQlmcHJpbnRmKGZpbGUsICIsICVzOiAlZCIsCi0JCQlwX3NlY3Rpb24obnNfc19hbiwgKGludClvcGNvZGUpLCBhbmNvdW50KTsKLQkJZnByaW50ZihmaWxlLCAiLCAlczogJWQiLAotCQkJcF9zZWN0aW9uKG5zX3NfbnMsIChpbnQpb3Bjb2RlKSwgbnNjb3VudCk7Ci0JCWZwcmludGYoZmlsZSwgIiwgJXM6ICVkIiwKLQkJCXBfc2VjdGlvbihuc19zX2FyLCAoaW50KW9wY29kZSksIGFyY291bnQpOwotCX0KLQlpZiAoKCFzdGF0cC0+cGZjb2RlKSB8fCAoc3RhdHAtPnBmY29kZSAmCi0JCShSRVNfUFJGX0hFQURYIHwgUkVTX1BSRl9IRUFEMiB8IFJFU19QUkZfSEVBRDEpKSkgewotCQlwdXRjKCdcbicsZmlsZSk7Ci0JfQotCS8qCi0JICogUHJpbnQgdGhlIHZhcmlvdXMgc2VjdGlvbnMuCi0JICovCi0JZG9fc2VjdGlvbihzdGF0cCwgJmhhbmRsZSwgbnNfc19xZCwgUkVTX1BSRl9RVUVTLCBmaWxlKTsKLQlkb19zZWN0aW9uKHN0YXRwLCAmaGFuZGxlLCBuc19zX2FuLCBSRVNfUFJGX0FOUywgZmlsZSk7Ci0JZG9fc2VjdGlvbihzdGF0cCwgJmhhbmRsZSwgbnNfc19ucywgUkVTX1BSRl9BVVRILCBmaWxlKTsKLQlkb19zZWN0aW9uKHN0YXRwLCAmaGFuZGxlLCBuc19zX2FyLCBSRVNfUFJGX0FERCwgZmlsZSk7Ci0JaWYgKHFkY291bnQgPT0gMCAmJiBhbmNvdW50ID09IDAgJiYKLQkgICAgbnNjb3VudCA9PSAwICYmIGFyY291bnQgPT0gMCkKLQkJcHV0YygnXG4nLCBmaWxlKTsKLX0KLQotY29uc3QgdV9jaGFyICoKLXBfY2RubmFtZShjb25zdCB1X2NoYXIgKmNwLCBjb25zdCB1X2NoYXIgKm1zZywgaW50IGxlbiwgRklMRSAqZmlsZSkgewotCWNoYXIgbmFtZVtNQVhETkFNRV07Ci0JaW50IG47Ci0KLQlpZiAoKG4gPSBkbl9leHBhbmQobXNnLCBtc2cgKyBsZW4sIGNwLCBuYW1lLCBzaXplb2YgbmFtZSkpIDwgMCkKLQkJcmV0dXJuIChOVUxMKTsKLQlpZiAobmFtZVswXSA9PSAnXDAnKQotCQlwdXRjKCcuJywgZmlsZSk7Ci0JZWxzZQotCQlmcHV0cyhuYW1lLCBmaWxlKTsKLQlyZXR1cm4gKGNwICsgbik7Ci19Ci0KLWNvbnN0IHVfY2hhciAqCi1wX2NkbmFtZShjb25zdCB1X2NoYXIgKmNwLCBjb25zdCB1X2NoYXIgKm1zZywgRklMRSAqZmlsZSkgewotCXJldHVybiAocF9jZG5uYW1lKGNwLCBtc2csIFBBQ0tFVFNaLCBmaWxlKSk7Ci19Ci0KLS8qIFJldHVybiBhIGZ1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZSBmcm9tIGEgY29tcHJlc3NlZCBuYW1lICh3aXRoCi0gICBsZW5ndGggc3VwcGxpZWQpLiAgKi8KLQotY29uc3QgdV9jaGFyICoKLXBfZnFubmFtZShjcCwgbXNnLCBtc2dsZW4sIG5hbWUsIG5hbWVsZW4pCi0JY29uc3QgdV9jaGFyICpjcCwgKm1zZzsKLQlpbnQgbXNnbGVuOwotCWNoYXIgKm5hbWU7Ci0JaW50IG5hbWVsZW47Ci17Ci0JaW50IG4sIG5ld2xlbjsKLQotCWlmICgobiA9IGRuX2V4cGFuZChtc2csIGNwICsgbXNnbGVuLCBjcCwgbmFtZSwgbmFtZWxlbikpIDwgMCkKLQkJcmV0dXJuIChOVUxMKTsKLQluZXdsZW4gPSBzdHJsZW4obmFtZSk7Ci0JaWYgKG5ld2xlbiA9PSAwIHx8IG5hbWVbbmV3bGVuIC0gMV0gIT0gJy4nKSB7Ci0JCWlmIChuZXdsZW4gKyAxID49IG5hbWVsZW4pCS8qIExhY2sgc3BhY2UgZm9yIGZpbmFsIGRvdCAqLwotCQkJcmV0dXJuIChOVUxMKTsKLQkJZWxzZQotCQkJc3RyY3B5KG5hbWUgKyBuZXdsZW4sICIuIik7Ci0JfQotCXJldHVybiAoY3AgKyBuKTsKLX0KLQotLyogWFhYOgl0aGUgcmVzdCBvZiB0aGVzZSBmdW5jdGlvbnMgbmVlZCB0byBiZWNvbWUgbGVuZ3RoLWxpbWl0ZWQsIHRvby4gKi8KLQotY29uc3QgdV9jaGFyICoKLXBfZnFuYW1lKGNvbnN0IHVfY2hhciAqY3AsIGNvbnN0IHVfY2hhciAqbXNnLCBGSUxFICpmaWxlKSB7Ci0JY2hhciBuYW1lW01BWEROQU1FXTsKLQljb25zdCB1X2NoYXIgKm47Ci0KLQluID0gcF9mcW5uYW1lKGNwLCBtc2csIE1BWENETkFNRSwgbmFtZSwgc2l6ZW9mIG5hbWUpOwotCWlmIChuID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0JZnB1dHMobmFtZSwgZmlsZSk7Ci0JcmV0dXJuIChuKTsKLX0KLQotLyoKLSAqIE5hbWVzIG9mIFJSIGNsYXNzZXMgYW5kIHFjbGFzc2VzLiAgQ2xhc3NlcyBhbmQgcWNsYXNzZXMgYXJlIHRoZSBzYW1lLCBleGNlcHQKLSAqIHRoYXQgQ19BTlkgaXMgYSBxY2xhc3MgYnV0IG5vdCBhIGNsYXNzLiAgKFlvdSBjYW4gYXNrIGZvciByZWNvcmRzIG9mIGNsYXNzCi0gKiBDX0FOWSwgYnV0IHlvdSBjYW4ndCBoYXZlIGFueSByZWNvcmRzIG9mIHRoYXQgY2xhc3MgaW4gdGhlIGRhdGFiYXNlLikKLSAqLwotY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2NsYXNzX3N5bXNbXSA9IHsKLQl7Q19JTiwJCSJJTiIsCQkoY2hhciAqKTB9LAotCXtDX0NIQU9TLAkiQ0giLAkJKGNoYXIgKikwfSwKLQl7Q19DSEFPUywJIkNIQU9TIiwJKGNoYXIgKikwfSwKLQl7Q19IUywJCSJIUyIsCQkoY2hhciAqKTB9LAotCXtDX0hTLAkJIkhFU0lPRCIsCShjaGFyICopMH0sCi0Je0NfQU5ZLAkJIkFOWSIsCQkoY2hhciAqKTB9LAotCXtDX05PTkUsCSJOT05FIiwJCShjaGFyICopMH0sCi0Je0NfSU4sIAkJKGNoYXIgKikwLAkoY2hhciAqKTB9Ci19OwotCi0vKgotICogTmFtZXMgb2YgbWVzc2FnZSBzZWN0aW9ucy4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9kZWZhdWx0X3NlY3Rpb25fc3ltc1tdID0gewotCXtuc19zX3FkLAkiUVVFUlkiLAkoY2hhciAqKTB9LAotCXtuc19zX2FuLAkiQU5TV0VSIiwJKGNoYXIgKikwfSwKLQl7bnNfc19ucywJIkFVVEhPUklUWSIsCShjaGFyICopMH0sCi0Je25zX3NfYXIsCSJBRERJVElPTkFMIiwJKGNoYXIgKikwfSwKLQl7MCwgICAgICAgICAgICAgKGNoYXIgKikwLAkoY2hhciAqKTB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX3VwZGF0ZV9zZWN0aW9uX3N5bXNbXSA9IHsKLQl7U19aT05FLAkiWk9ORSIsCQkoY2hhciAqKTB9LAotCXtTX1BSRVJFUSwJIlBSRVJFUVVJU0lURSIsCShjaGFyICopMH0sCi0Je1NfVVBEQVRFLAkiVVBEQVRFIiwJKGNoYXIgKikwfSwKLQl7U19BRERULAkiQURESVRJT05BTCIsCShjaGFyICopMH0sCi0JezAsICAgICAgICAgICAgIChjaGFyICopMCwJKGNoYXIgKikwfQotfTsKLQotY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2tleV9zeW1zW10gPSB7Ci0Je05TX0FMR19NRDVSU0EsCQkiUlNBIiwJCSJSU0EgS0VZIHdpdGggTUQ1IGhhc2gifSwKLQl7TlNfQUxHX0RILAkJIkRIIiwJCSJEaWZmaWUgSGVsbG1hbiJ9LAotCXtOU19BTEdfRFNBLAkJIkRTQSIsCQkiRGlnaXRhbCBTaWduYXR1cmUgQWxnb3JpdGhtIn0sCi0Je05TX0FMR19FWFBJUkVfT05MWSwJIkVYUElSRU9OTFkiLAkiTm8gYWxnb3JpdGhtIn0sCi0Je05TX0FMR19QUklWQVRFX09JRCwJIlBSSVZBVEUiLAkiQWxnb3JpdGhtIG9idGFpbmVkIGZyb20gT0lEIn0sCi0JezAsCQkJTlVMTCwJCU5VTEx9Ci19OwotCi1jb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3BfY2VydF9zeW1zW10gPSB7Ci0Je2NlcnRfdF9wa2l4LAkiUEtJWCIsCQkiUEtJWCAoWC41MDl2MykgQ2VydGlmaWNhdGUifSwKLQl7Y2VydF90X3Nwa2ksCSJTUEtJIiwJCSJTUEtJIGNlcnRpZmljYXRlIn0sCi0Je2NlcnRfdF9wZ3AsCSJQR1AiLAkJIlBHUCBjZXJ0aWZpY2F0ZSJ9LAotCXtjZXJ0X3RfdXJsLAkiVVJMIiwJCSJVUkwgUHJpdmF0ZSJ9LAotCXtjZXJ0X3Rfb2lkLAkiT0lEIiwJCSJPSUQgUHJpdmF0ZSJ9LAotCXswLAkJTlVMTCwJCU5VTEx9Ci19OwotCi0vKgotICogTmFtZXMgb2YgUlIgdHlwZXMgYW5kIHF0eXBlcy4gIFR5cGVzIGFuZCBxdHlwZXMgYXJlIHRoZSBzYW1lLCBleGNlcHQKLSAqIHRoYXQgVF9BTlkgaXMgYSBxdHlwZSBidXQgbm90IGEgdHlwZS4gIChZb3UgY2FuIGFzayBmb3IgcmVjb3JkcyBvZiB0eXBlCi0gKiBUX0FOWSwgYnV0IHlvdSBjYW4ndCBoYXZlIGFueSByZWNvcmRzIG9mIHRoYXQgdHlwZSBpbiB0aGUgZGF0YWJhc2UuKQotICovCi1jb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3BfdHlwZV9zeW1zW10gPSB7Ci0Je25zX3RfYSwJIkEiLAkJImFkZHJlc3MifSwKLQl7bnNfdF9ucywJIk5TIiwJCSJuYW1lIHNlcnZlciJ9LAotCXtuc190X21kLAkiTUQiLAkJIm1haWwgZGVzdGluYXRpb24gKGRlcHJlY2F0ZWQpIn0sCi0Je25zX3RfbWYsCSJNRiIsCQkibWFpbCBmb3J3YXJkZXIgKGRlcHJlY2F0ZWQpIn0sCi0Je25zX3RfY25hbWUsCSJDTkFNRSIsCSJjYW5vbmljYWwgbmFtZSJ9LAotCXtuc190X3NvYSwJIlNPQSIsCQkic3RhcnQgb2YgYXV0aG9yaXR5In0sCi0Je25zX3RfbWIsCSJNQiIsCQkibWFpbGJveCJ9LAotCXtuc190X21nLAkiTUciLAkJIm1haWwgZ3JvdXAgbWVtYmVyIn0sCi0Je25zX3RfbXIsCSJNUiIsCQkibWFpbCByZW5hbWUifSwKLQl7bnNfdF9udWxsLAkiTlVMTCIsCQkibnVsbCJ9LAotCXtuc190X3drcywJIldLUyIsCQkid2VsbC1rbm93biBzZXJ2aWNlIChkZXByZWNhdGVkKSJ9LAotCXtuc190X3B0ciwJIlBUUiIsCQkiZG9tYWluIG5hbWUgcG9pbnRlciJ9LAotCXtuc190X2hpbmZvLAkiSElORk8iLAkiaG9zdCBpbmZvcm1hdGlvbiJ9LAotCXtuc190X21pbmZvLAkiTUlORk8iLAkibWFpbGJveCBpbmZvcm1hdGlvbiJ9LAotCXtuc190X214LAkiTVgiLAkJIm1haWwgZXhjaGFuZ2VyIn0sCi0Je25zX3RfdHh0LAkiVFhUIiwJCSJ0ZXh0In0sCi0Je25zX3RfcnAsCSJSUCIsCQkicmVzcG9uc2libGUgcGVyc29uIn0sCi0Je25zX3RfYWZzZGIsCSJBRlNEQiIsCSJEQ0Ugb3IgQUZTIHNlcnZlciJ9LAotCXtuc190X3gyNSwJIlgyNSIsCQkiWDI1IGFkZHJlc3MifSwKLQl7bnNfdF9pc2RuLAkiSVNETiIsCQkiSVNETiBhZGRyZXNzIn0sCi0Je25zX3RfcnQsCSJSVCIsCQkicm91dGVyIn0sCi0Je25zX3RfbnNhcCwJIk5TQVAiLAkJIm5zYXAgYWRkcmVzcyJ9LAotCXtuc190X25zYXBfcHRyLAkiTlNBUF9QVFIiLAkiZG9tYWluIG5hbWUgcG9pbnRlciJ9LAotCXtuc190X3NpZywJIlNJRyIsCQkic2lnbmF0dXJlIn0sCi0Je25zX3Rfa2V5LAkiS0VZIiwJCSJrZXkifSwKLQl7bnNfdF9weCwJIlBYIiwJCSJtYXBwaW5nIGluZm9ybWF0aW9uIn0sCi0Je25zX3RfZ3BvcywJIkdQT1MiLAkJImdlb2dyYXBoaWNhbCBwb3NpdGlvbiAod2l0aGRyYXduKSJ9LAotCXtuc190X2FhYWEsCSJBQUFBIiwJCSJJUHY2IGFkZHJlc3MifSwKLQl7bnNfdF9sb2MsCSJMT0MiLAkJImxvY2F0aW9uIn0sCi0Je25zX3Rfbnh0LAkiTlhUIiwJCSJuZXh0IHZhbGlkIG5hbWUgKHVuaW1wbGVtZW50ZWQpIn0sCi0Je25zX3RfZWlkLAkiRUlEIiwJCSJlbmRwb2ludCBpZGVudGlmaWVyICh1bmltcGxlbWVudGVkKSJ9LAotCXtuc190X25pbWxvYywJIk5JTUxPQyIsCSJOSU1ST0QgbG9jYXRvciAodW5pbXBsZW1lbnRlZCkifSwKLQl7bnNfdF9zcnYsCSJTUlYiLAkJInNlcnZlciBzZWxlY3Rpb24ifSwKLQl7bnNfdF9hdG1hLAkiQVRNQSIsCQkiQVRNIGFkZHJlc3MgKHVuaW1wbGVtZW50ZWQpIn0sCi0Je25zX3RfdGtleSwJIlRLRVkiLAkJInRrZXkifSwKLQl7bnNfdF90c2lnLAkiVFNJRyIsCQkidHJhbnNhY3Rpb24gc2lnbmF0dXJlIn0sCi0Je25zX3RfaXhmciwJIklYRlIiLAkJImluY3JlbWVudGFsIHpvbmUgdHJhbnNmZXIifSwKLQl7bnNfdF9heGZyLAkiQVhGUiIsCQkiem9uZSB0cmFuc2ZlciJ9LAotCXtuc190X3p4ZnIsCSJaWEZSIiwJCSJjb21wcmVzc2VkIHpvbmUgdHJhbnNmZXIifSwKLQl7bnNfdF9tYWlsYiwJIk1BSUxCIiwJIm1haWxib3gtcmVsYXRlZCBkYXRhIChkZXByZWNhdGVkKSJ9LAotCXtuc190X21haWxhLAkiTUFJTEEiLAkibWFpbCBhZ2VudCAoZGVwcmVjYXRlZCkifSwKLQl7bnNfdF9uYXB0ciwJIk5BUFRSIiwJIlVSTiBOYW1pbmcgQXV0aG9yaXR5In0sCi0Je25zX3Rfa3gsCSJLWCIsCQkiS2V5IEV4Y2hhbmdlIn0sCi0Je25zX3RfY2VydCwJIkNFUlQiLAkJIkNlcnRpZmljYXRlIn0sCi0Je25zX3RfYTYsCSJBNiIsCQkiSVB2NiBBZGRyZXNzIn0sCi0Je25zX3RfZG5hbWUsCSJETkFNRSIsCSJkbmFtZSJ9LAotCXtuc190X3NpbmssCSJTSU5LIiwJCSJLaXRjaGVuIFNpbmsgKGV4cGVyaW1lbnRhbCkifSwKLQl7bnNfdF9vcHQsCSJPUFQiLAkJIkVETlMgT3B0aW9ucyJ9LAotCXtuc190X2FueSwJIkFOWSIsCQkiXCJhbnlcIiJ9LAotCXswLCAJCU5VTEwsCQlOVUxMfQotfTsKLQotLyoKLSAqIE5hbWVzIG9mIEROUyByY29kZXMuCi0gKi8KLWNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9yY29kZV9zeW1zW10gPSB7Ci0Je25zX3Jfbm9lcnJvciwJIk5PRVJST1IiLAkJIm5vIGVycm9yIn0sCi0Je25zX3JfZm9ybWVyciwJIkZPUk1FUlIiLAkJImZvcm1hdCBlcnJvciJ9LAotCXtuc19yX3NlcnZmYWlsLAkiU0VSVkZBSUwiLAkJInNlcnZlciBmYWlsZWQifSwKLQl7bnNfcl9ueGRvbWFpbiwJIk5YRE9NQUlOIiwJCSJubyBzdWNoIGRvbWFpbiBuYW1lIn0sCi0Je25zX3Jfbm90aW1wbCwJIk5PVElNUCIsCQkibm90IGltcGxlbWVudGVkIn0sCi0Je25zX3JfcmVmdXNlZCwJIlJFRlVTRUQiLAkJInJlZnVzZWQifSwKLQl7bnNfcl95eGRvbWFpbiwJIllYRE9NQUlOIiwJCSJkb21haW4gbmFtZSBleGlzdHMifSwKLQl7bnNfcl95eHJyc2V0LAkiWVhSUlNFVCIsCQkicnJzZXQgZXhpc3RzIn0sCi0Je25zX3JfbnhycnNldCwJIk5YUlJTRVQiLAkJInJyc2V0IGRvZXNuJ3QgZXhpc3QifSwKLQl7bnNfcl9ub3RhdXRoLAkiTk9UQVVUSCIsCQkibm90IGF1dGhvcml0YXRpdmUifSwKLQl7bnNfcl9ub3R6b25lLAkiTk9UWk9ORSIsCQkiTm90IGluIHpvbmUifSwKLQl7bnNfcl9tYXgsCSIiLAkJCSIifSwKLQl7bnNfcl9iYWRzaWcsCSJCQURTSUciLAkJImJhZCBzaWduYXR1cmUifSwKLQl7bnNfcl9iYWRrZXksCSJCQURLRVkiLAkJImJhZCBrZXkifSwKLQl7bnNfcl9iYWR0aW1lLAkiQkFEVElNRSIsCQkiYmFkIHRpbWUifSwKLQl7MCwgCQlOVUxMLAkJCU5VTEx9Ci19OwotCi1pbnQKLXN5bV9zdG9uKGNvbnN0IHN0cnVjdCByZXNfc3ltICpzeW1zLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgKnN1Y2Nlc3MpIHsKLQlmb3IgKDsgc3ltcy0+bmFtZSAhPSAwOyBzeW1zKyspIHsKLQkJaWYgKHN0cmNhc2VjbXAgKG5hbWUsIHN5bXMtPm5hbWUpID09IDApIHsKLQkJCWlmIChzdWNjZXNzKQotCQkJCSpzdWNjZXNzID0gMTsKLQkJCXJldHVybiAoc3ltcy0+bnVtYmVyKTsKLQkJfQotCX0KLQlpZiAoc3VjY2VzcykKLQkJKnN1Y2Nlc3MgPSAwOwotCXJldHVybiAoc3ltcy0+bnVtYmVyKTsJCS8qIFRoZSBkZWZhdWx0IHZhbHVlLiAqLwotfQotCi1jb25zdCBjaGFyICoKLXN5bV9udG9zKGNvbnN0IHN0cnVjdCByZXNfc3ltICpzeW1zLCBpbnQgbnVtYmVyLCBpbnQgKnN1Y2Nlc3MpIHsKLQlzdGF0aWMgY2hhciB1bm5hbWVbMjBdOwotCi0JZm9yICg7IHN5bXMtPm5hbWUgIT0gMDsgc3ltcysrKSB7Ci0JCWlmIChudW1iZXIgPT0gc3ltcy0+bnVtYmVyKSB7Ci0JCQlpZiAoc3VjY2VzcykKLQkJCQkqc3VjY2VzcyA9IDE7Ci0JCQlyZXR1cm4gKHN5bXMtPm5hbWUpOwotCQl9Ci0JfQotCi0Jc3ByaW50Zih1bm5hbWUsICIlZCIsIG51bWJlcik7CQkvKiBYWFggbm9ucmVlbnRyYW50ICovCi0JaWYgKHN1Y2Nlc3MpCi0JCSpzdWNjZXNzID0gMDsKLQlyZXR1cm4gKHVubmFtZSk7Ci19Ci0KLWNvbnN0IGNoYXIgKgotc3ltX250b3AoY29uc3Qgc3RydWN0IHJlc19zeW0gKnN5bXMsIGludCBudW1iZXIsIGludCAqc3VjY2VzcykgewotCXN0YXRpYyBjaGFyIHVubmFtZVsyMF07Ci0KLQlmb3IgKDsgc3ltcy0+bmFtZSAhPSAwOyBzeW1zKyspIHsKLQkJaWYgKG51bWJlciA9PSBzeW1zLT5udW1iZXIpIHsKLQkJCWlmIChzdWNjZXNzKQotCQkJCSpzdWNjZXNzID0gMTsKLQkJCXJldHVybiAoc3ltcy0+aHVtYW5uYW1lKTsKLQkJfQotCX0KLQlzcHJpbnRmKHVubmFtZSwgIiVkIiwgbnVtYmVyKTsJCS8qIFhYWCBub25yZWVudHJhbnQgKi8KLQlpZiAoc3VjY2VzcykKLQkJKnN1Y2Nlc3MgPSAwOwotCXJldHVybiAodW5uYW1lKTsKLX0KLQotLyoKLSAqIFJldHVybiBhIHN0cmluZyBmb3IgdGhlIHR5cGUuCi0gKi8KLWNvbnN0IGNoYXIgKgotcF90eXBlKGludCB0eXBlKSB7Ci0JaW50IHN1Y2Nlc3M7Ci0JY29uc3QgY2hhciAqcmVzdWx0OwotCXN0YXRpYyBjaGFyIHR5cGVidWZbMjBdOwotCi0JcmVzdWx0ID0gc3ltX250b3MoX19wX3R5cGVfc3ltcywgdHlwZSwgJnN1Y2Nlc3MpOwotCWlmIChzdWNjZXNzKQotCQlyZXR1cm4gKHJlc3VsdCk7Ci0JaWYgKHR5cGUgPCAwIHx8IHR5cGUgPiAweGZmZmYpCi0JCXJldHVybiAoIkJBRFRZUEUiKTsKLQlzcHJpbnRmKHR5cGVidWYsICJUWVBFJWQiLCB0eXBlKTsKLQlyZXR1cm4gKHR5cGVidWYpOwotfQotCi0vKgotICogUmV0dXJuIGEgc3RyaW5nIGZvciB0aGUgdHlwZS4KLSAqLwotY29uc3QgY2hhciAqCi1wX3NlY3Rpb24oaW50IHNlY3Rpb24sIGludCBvcGNvZGUpIHsKLQljb25zdCBzdHJ1Y3QgcmVzX3N5bSAqc3ltYm9sczsKLQotCXN3aXRjaCAob3Bjb2RlKSB7Ci0JY2FzZSBuc19vX3VwZGF0ZToKLQkJc3ltYm9scyA9IF9fcF91cGRhdGVfc2VjdGlvbl9zeW1zOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzeW1ib2xzID0gX19wX2RlZmF1bHRfc2VjdGlvbl9zeW1zOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIChzeW1fbnRvcyhzeW1ib2xzLCBzZWN0aW9uLCAoaW50ICopMCkpOwotfQotCi0vKgotICogUmV0dXJuIGEgbW5lbW9uaWMgZm9yIGNsYXNzLgotICovCi1jb25zdCBjaGFyICoKLXBfY2xhc3MoaW50IGNsYXNzKSB7Ci0JaW50IHN1Y2Nlc3M7Ci0JY29uc3QgY2hhciAqcmVzdWx0OwotCXN0YXRpYyBjaGFyIGNsYXNzYnVmWzIwXTsKLQotCXJlc3VsdCA9IHN5bV9udG9zKF9fcF9jbGFzc19zeW1zLCBjbGFzcywgJnN1Y2Nlc3MpOwotCWlmIChzdWNjZXNzKQotCQlyZXR1cm4gKHJlc3VsdCk7Ci0JaWYgKGNsYXNzIDwgMCB8fCBjbGFzcyA+IDB4ZmZmZikKLQkJcmV0dXJuICgiQkFEQ0xBU1MiKTsKLQlzcHJpbnRmKGNsYXNzYnVmLCAiQ0xBU1MlZCIsIGNsYXNzKTsKLQlyZXR1cm4gKGNsYXNzYnVmKTsKLX0KLQotLyoKLSAqIFJldHVybiBhIG1uZW1vbmljIGZvciBhbiBvcHRpb24KLSAqLwotY29uc3QgY2hhciAqCi1wX29wdGlvbih1X2xvbmcgb3B0aW9uKSB7Ci0Jc3RhdGljIGNoYXIgbmJ1Zls0MF07Ci0KLQlzd2l0Y2ggKG9wdGlvbikgewotCWNhc2UgUkVTX0lOSVQ6CQlyZXR1cm4gImluaXQiOwotCWNhc2UgUkVTX0RFQlVHOgkJcmV0dXJuICJkZWJ1ZyI7Ci0JY2FzZSBSRVNfQUFPTkxZOglyZXR1cm4gImFhb25seSh1bmltcGwpIjsKLQljYXNlIFJFU19VU0VWQzoJCXJldHVybiAidXNldmMiOwotCWNhc2UgUkVTX1BSSU1BUlk6CXJldHVybiAicHJpbXJ5KHVuaW1wbCkiOwotCWNhc2UgUkVTX0lHTlRDOgkJcmV0dXJuICJpZ250YyI7Ci0JY2FzZSBSRVNfUkVDVVJTRToJcmV0dXJuICJyZWN1cnMiOwotCWNhc2UgUkVTX0RFRk5BTUVTOglyZXR1cm4gImRlZm5hbSI7Ci0JY2FzZSBSRVNfU1RBWU9QRU46CXJldHVybiAic3R5b3BuIjsKLQljYXNlIFJFU19ETlNSQ0g6CXJldHVybiAiZG5zcmNoIjsKLQljYXNlIFJFU19JTlNFQ1VSRTE6CXJldHVybiAiaW5zZWN1cmUxIjsKLQljYXNlIFJFU19JTlNFQ1VSRTI6CXJldHVybiAiaW5zZWN1cmUyIjsKLQljYXNlIFJFU19OT0FMSUFTRVM6CXJldHVybiAibm9hbGlhc2VzIjsKLQljYXNlIFJFU19VU0VfSU5FVDY6CXJldHVybiAiaW5ldDYiOwotI2lmZGVmIFJFU19VU0VfRUROUzAJLyogS0FNRSBleHRlbnNpb24gKi8KLQljYXNlIFJFU19VU0VfRUROUzA6CXJldHVybiAiZWRuczAiOwotI2VuZGlmCi0jaWZkZWYgUkVTX1VTRV9ETkFNRQotCWNhc2UgUkVTX1VTRV9ETkFNRToJcmV0dXJuICJkbmFtZSI7Ci0jZW5kaWYKLSNpZmRlZiBSRVNfVVNFX0ROU1NFQwotCWNhc2UgUkVTX1VTRV9ETlNTRUM6CXJldHVybiAiZG5zc2VjIjsKLSNlbmRpZgotI2lmZGVmIFJFU19OT1RMRFFVRVJZCi0JY2FzZSBSRVNfTk9UTERRVUVSWToJcmV0dXJuICJuby10bGQtcXVlcnkiOwotI2VuZGlmCi0jaWZkZWYgUkVTX05PX05JQkJMRTIKLQljYXNlIFJFU19OT19OSUJCTEUyOglyZXR1cm4gIm5vLW5pYmJsZTIiOwotI2VuZGlmCi0JCQkJLyogWFhYIG5vbnJlZW50cmFudCAqLwotCWRlZmF1bHQ6CQlzcHJpbnRmKG5idWYsICI/MHglbHg/IiwgKHVfbG9uZylvcHRpb24pOwotCQkJCXJldHVybiAobmJ1Zik7Ci0JfQotfQotCi0vKgotICogUmV0dXJuIGEgbW5lbW9uaWMgZm9yIGEgdGltZSB0byBsaXZlLgotICovCi1jb25zdCBjaGFyICoKLXBfdGltZSh1X2ludDMyX3QgdmFsdWUpIHsKLQlzdGF0aWMgY2hhciBuYnVmWzQwXTsJCS8qIFhYWCBub25yZWVudHJhbnQgKi8KLQotCWlmIChuc19mb3JtYXRfdHRsKCh1X2xvbmcpdmFsdWUsIG5idWYsIHNpemVvZiBuYnVmKSA8IDApCi0JCXNwcmludGYobmJ1ZiwgIiV1IiwgdmFsdWUpOwotCXJldHVybiAobmJ1Zik7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gYSBzdHJpbmcgZm9yIHRoZSByY29kZS4KLSAqLwotY29uc3QgY2hhciAqCi1wX3Jjb2RlKGludCByY29kZSkgewotCXJldHVybiAoc3ltX250b3MoX19wX3Jjb2RlX3N5bXMsIHJjb2RlLCAoaW50ICopMCkpOwotfQotCi0vKgotICogUmV0dXJuIGEgc3RyaW5nIGZvciBhIHJlc19zb2NrYWRkcl91bmlvbi4KLSAqLwotY29uc3QgY2hhciAqCi1wX3NvY2t1bih1bmlvbiByZXNfc29ja2FkZHJfdW5pb24gdSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkgewotCWNoYXIgcmV0W3NpemVvZiAiZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6MTIzLjEyMy4xMjMuMTIzIl07Ci0KLQlzd2l0Y2ggKHUuc2luLnNpbl9mYW1pbHkpIHsKLQljYXNlIEFGX0lORVQ6Ci0JCWluZXRfbnRvcChBRl9JTkVULCAmdS5zaW4uc2luX2FkZHIsIHJldCwgc2l6ZW9mIHJldCk7Ci0JCWJyZWFrOwotI2lmZGVmIEhBU19JTkVUNl9TVFJVQ1RTCi0JY2FzZSBBRl9JTkVUNjoKLQkJaW5ldF9udG9wKEFGX0lORVQ2LCAmdS5zaW42LnNpbjZfYWRkciwgcmV0LCBzaXplb2YgcmV0KTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlzcHJpbnRmKHJldCwgIlthZiVkXSIsIHUuc2luLnNpbl9mYW1pbHkpOwotCQlicmVhazsKLQl9Ci0JaWYgKHNpemUgPiAwVSkgewotCQlzdHJuY3B5KGJ1ZiwgcmV0LCBzaXplIC0gMSk7Ci0JCWJ1ZltzaXplIC0gMV0gPSAnMCc7Ci0JfQotCXJldHVybiAoYnVmKTsKLX0KLQotLyoKLSAqIHJvdXRpbmVzIHRvIGNvbnZlcnQgYmV0d2VlbiBvbi10aGUtd2lyZSBSUiBmb3JtYXQgYW5kIHpvbmUgZmlsZSBmb3JtYXQuCi0gKiBEb2VzIG5vdCBjb250YWluIGNvbnZlcnNpb24gdG8vZnJvbSBkZWNpbWFsIGRlZ3JlZXM7IGRpdmlkZSBvciBtdWx0aXBseQotICogYnkgNjAqNjAqMTAwMCBmb3IgdGhhdC4KLSAqLwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBvd2Vyb2Z0ZW5bMTBdID0gezEsIDEwLCAxMDAsIDEwMDAsIDEwMDAwLCAxMDAwMDAsCi0JCQkJICAgICAgMTAwMDAwMCwxMDAwMDAwMCwxMDAwMDAwMDAsMTAwMDAwMDAwMH07Ci0KLS8qIHRha2VzIGFuIFhlWSBwcmVjaXNpb24vc2l6ZSB2YWx1ZSwgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4gKi8KLXN0YXRpYyBjb25zdCBjaGFyICoKLXByZWNzaXplX250b2EocHJlYykKLQl1X2ludDMyX3QgcHJlYzsKLXsKLQlzdGF0aWMgY2hhciByZXRidWZbc2l6ZW9mICI5MDAwMDAwMC4wMCJdOwkvKiBYWFggbm9ucmVlbnRyYW50ICovCi0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JaW50IG1hbnRpc3NhLCBleHBvbmVudDsKLQotCW1hbnRpc3NhID0gKGludCkoKHByZWMgPj4gNCkgJiAweDBmKSAlIDEwOwotCWV4cG9uZW50ID0gKGludCkoKHByZWMgPj4gMCkgJiAweDBmKSAlIDEwOwotCi0JdmFsID0gbWFudGlzc2EgKiBwb3dlcm9mdGVuW2V4cG9uZW50XTsKLQotCSh2b2lkKSBzcHJpbnRmKHJldGJ1ZiwgIiVsdS4lLjJsdSIsIHZhbC8xMDAsIHZhbCUxMDApOwotCXJldHVybiAocmV0YnVmKTsKLX0KLQotLyogY29udmVydHMgYXNjaWkgc2l6ZS9wcmVjaXNpb24gWCAqIDEwKipZKGNtKSB0byAweFhZLiAgbW92ZXMgcG9pbnRlci4gKi8KLXN0YXRpYyB1X2ludDhfdAotcHJlY3NpemVfYXRvbihjb25zdCBjaGFyICoqc3RycHRyKSB7Ci0JdW5zaWduZWQgaW50IG12YWwgPSAwLCBjbXZhbCA9IDA7Ci0JdV9pbnQ4X3QgcmV0dmFsID0gMDsKLQljb25zdCBjaGFyICpjcDsKLQlpbnQgZXhwb25lbnQ7Ci0JaW50IG1hbnRpc3NhOwotCi0JY3AgPSAqc3RycHRyOwotCi0Jd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkKLQkJbXZhbCA9IG12YWwgKiAxMCArICgqY3ArKyAtICcwJyk7Ci0KLQlpZiAoKmNwID09ICcuJykgewkJLyogY2VudGltZXRlcnMgKi8KLQkJY3ArKzsKLQkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgewotCQkJY212YWwgPSAoKmNwKysgLSAnMCcpICogMTA7Ci0JCQlpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKSB7Ci0JCQkJY212YWwgKz0gKCpjcCsrIC0gJzAnKTsKLQkJCX0KLQkJfQotCX0KLQljbXZhbCA9IChtdmFsICogMTAwKSArIGNtdmFsOwotCi0JZm9yIChleHBvbmVudCA9IDA7IGV4cG9uZW50IDwgOTsgZXhwb25lbnQrKykKLQkJaWYgKGNtdmFsIDwgcG93ZXJvZnRlbltleHBvbmVudCsxXSkKLQkJCWJyZWFrOwotCi0JbWFudGlzc2EgPSBjbXZhbCAvIHBvd2Vyb2Z0ZW5bZXhwb25lbnRdOwotCWlmIChtYW50aXNzYSA+IDkpCi0JCW1hbnRpc3NhID0gOTsKLQotCXJldHZhbCA9IChtYW50aXNzYSA8PCA0KSB8IGV4cG9uZW50OwotCi0JKnN0cnB0ciA9IGNwOwotCi0JcmV0dXJuIChyZXR2YWwpOwotfQotCi0vKiBjb252ZXJ0cyBhc2NpaSBsYXQvbG9uIHRvIHVuc2lnbmVkIGVuY29kZWQgMzItYml0IG51bWJlci4gIG1vdmVzIHBvaW50ZXIuICovCi1zdGF0aWMgdV9pbnQzMl90Ci1sYXRsb24ydWwoY29uc3QgY2hhciAqKmxhdGxvbnN0cnB0ciwgaW50ICp3aGljaCkgewotCWNvbnN0IGNoYXIgKmNwOwotCXVfaW50MzJfdCByZXR2YWw7Ci0JaW50IGRlZyA9IDAsIG1pbiA9IDAsIHNlY3MgPSAwLCBzZWNzZnJhYyA9IDA7Ci0KLQljcCA9ICpsYXRsb25zdHJwdHI7Ci0KLQl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKQotCQlkZWcgPSBkZWcgKiAxMCArICgqY3ArKyAtICcwJyk7Ci0KLQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApKQotCQljcCsrOwotCi0JaWYgKCEoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKSkKLQkJZ290byBmbmRoZW1pOwotCi0Jd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkKLQkJbWluID0gbWluICogMTAgKyAoKmNwKysgLSAnMCcpOwotCi0Jd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkKLQkJY3ArKzsKLQotCWlmICghKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkpCi0JCWdvdG8gZm5kaGVtaTsKLQotCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpCi0JCXNlY3MgPSBzZWNzICogMTAgKyAoKmNwKysgLSAnMCcpOwotCi0JaWYgKCpjcCA9PSAnLicpIHsJCS8qIGRlY2ltYWwgc2Vjb25kcyAqLwotCQljcCsrOwotCQlpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKSB7Ci0JCQlzZWNzZnJhYyA9ICgqY3ArKyAtICcwJykgKiAxMDA7Ci0JCQlpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKSB7Ci0JCQkJc2Vjc2ZyYWMgKz0gKCpjcCsrIC0gJzAnKSAqIDEwOwotCQkJCWlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpIHsKLQkJCQkJc2Vjc2ZyYWMgKz0gKCpjcCsrIC0gJzAnKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQl3aGlsZSAoIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkJLyogaWYgYW55IHRyYWlsaW5nIGdhcmJhZ2UgKi8KLQkJY3ArKzsKLQotCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCi0JCWNwKys7Ci0KLSBmbmRoZW1pOgotCXN3aXRjaCAoKmNwKSB7Ci0JY2FzZSAnTic6IGNhc2UgJ24nOgotCWNhc2UgJ0UnOiBjYXNlICdlJzoKLQkJcmV0dmFsID0gKCh1bnNpZ25lZCkxPDwzMSkKLQkJCSsgKCgoKChkZWcgKiA2MCkgKyBtaW4pICogNjApICsgc2VjcykgKiAxMDAwKQotCQkJKyBzZWNzZnJhYzsKLQkJYnJlYWs7Ci0JY2FzZSAnUyc6IGNhc2UgJ3MnOgotCWNhc2UgJ1cnOiBjYXNlICd3JzoKLQkJcmV0dmFsID0gKCh1bnNpZ25lZCkxPDwzMSkKLQkJCS0gKCgoKChkZWcgKiA2MCkgKyBtaW4pICogNjApICsgc2VjcykgKiAxMDAwKQotCQkJLSBzZWNzZnJhYzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dmFsID0gMDsJLyogaW52YWxpZCB2YWx1ZSAtLSBpbmRpY2F0ZXMgZXJyb3IgKi8KLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoICgqY3ApIHsKLQljYXNlICdOJzogY2FzZSAnbic6Ci0JY2FzZSAnUyc6IGNhc2UgJ3MnOgotCQkqd2hpY2ggPSAxOwkvKiBsYXRpdHVkZSAqLwotCQlicmVhazsKLQljYXNlICdFJzogY2FzZSAnZSc6Ci0JY2FzZSAnVyc6IGNhc2UgJ3cnOgotCQkqd2hpY2ggPSAyOwkvKiBsb25naXR1ZGUgKi8KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJKndoaWNoID0gMDsJLyogZXJyb3IgKi8KLQkJYnJlYWs7Ci0JfQotCi0JY3ArKzsJCQkvKiBza2lwIHRoZSBoZW1pc3BoZXJlICovCi0KLQl3aGlsZSAoIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkJLyogaWYgYW55IHRyYWlsaW5nIGdhcmJhZ2UgKi8KLQkJY3ArKzsKLQotCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCS8qIG1vdmUgdG8gbmV4dCBmaWVsZCAqLwotCQljcCsrOwotCi0JKmxhdGxvbnN0cnB0ciA9IGNwOwotCi0JcmV0dXJuIChyZXR2YWwpOwotfQotCi0vKiBjb252ZXJ0cyBhIHpvbmUgZmlsZSByZXByZXNlbnRhdGlvbiBpbiBhIHN0cmluZyB0byBhbiBSREFUQSBvbi10aGUtd2lyZQotICogcmVwcmVzZW50YXRpb24uICovCi1pbnQKLWxvY19hdG9uKGFzY2lpLCBiaW5hcnkpCi0JY29uc3QgY2hhciAqYXNjaWk7Ci0JdV9jaGFyICpiaW5hcnk7Ci17Ci0JY29uc3QgY2hhciAqY3AsICptYXhjcDsKLQl1X2NoYXIgKmJjcDsKLQotCXVfaW50MzJfdCBsYXRpdCA9IDAsIGxvbmdpdCA9IDAsIGFsdCA9IDA7Ci0JdV9pbnQzMl90IGxsdGVtcDEgPSAwLCBsbHRlbXAyID0gMDsKLQlpbnQgYWx0bWV0ZXJzID0gMCwgYWx0ZnJhYyA9IDAsIGFsdHNpZ24gPSAxOwotCXVfaW50OF90IGhwID0gMHgxNjsJLyogZGVmYXVsdCA9IDFlNiBjbSA9IDEwMDAwLjAwbSA9IDEwa20gKi8KLQl1X2ludDhfdCB2cCA9IDB4MTM7CS8qIGRlZmF1bHQgPSAxZTMgY20gPSAxMC4wMG0gKi8KLQl1X2ludDhfdCBzaXogPSAweDEyOwkvKiBkZWZhdWx0ID0gMWUyIGNtID0gMS4wMG0gKi8KLQlpbnQgd2hpY2gxID0gMCwgd2hpY2gyID0gMDsKLQotCWNwID0gYXNjaWk7Ci0JbWF4Y3AgPSBjcCArIHN0cmxlbihhc2NpaSk7Ci0KLQlsbHRlbXAxID0gbGF0bG9uMnVsKCZjcCwgJndoaWNoMSk7Ci0KLQlsbHRlbXAyID0gbGF0bG9uMnVsKCZjcCwgJndoaWNoMik7Ci0KLQlzd2l0Y2ggKHdoaWNoMSArIHdoaWNoMikgewotCWNhc2UgMzoJCQkvKiAxICsgMiwgdGhlIG9ubHkgdmFsaWQgY29tYmluYXRpb24gKi8KLQkJaWYgKCh3aGljaDEgPT0gMSkgJiYgKHdoaWNoMiA9PSAyKSkgeyAvKiBub3JtYWwgY2FzZSAqLwotCQkJbGF0aXQgPSBsbHRlbXAxOwotCQkJbG9uZ2l0ID0gbGx0ZW1wMjsKLQkJfSBlbHNlIGlmICgod2hpY2gxID09IDIpICYmICh3aGljaDIgPT0gMSkpIHsgLyogcmV2ZXJzZWQgKi8KLQkJCWxvbmdpdCA9IGxsdGVtcDE7Ci0JCQlsYXRpdCA9IGxsdGVtcDI7Ci0JCX0gZWxzZSB7CS8qIHNvbWUga2luZCBvZiBicm9rZW5uZXNzICovCi0JCQlyZXR1cm4gKDApOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CQkvKiB3ZSBkaWRuJ3QgZ2V0IG9uZSBvZiBlYWNoICovCi0JCXJldHVybiAoMCk7Ci0JfQotCi0JLyogYWx0aXR1ZGUgKi8KLQlpZiAoKmNwID09ICctJykgewotCQlhbHRzaWduID0gLTE7Ci0JCWNwKys7Ci0JfQotCi0JaWYgKCpjcCA9PSAnKycpCi0JCWNwKys7Ci0KLQl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKQotCQlhbHRtZXRlcnMgPSBhbHRtZXRlcnMgKiAxMCArICgqY3ArKyAtICcwJyk7Ci0KLQlpZiAoKmNwID09ICcuJykgewkJLyogZGVjaW1hbCBtZXRlcnMgKi8KLQkJY3ArKzsKLQkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgewotCQkJYWx0ZnJhYyA9ICgqY3ArKyAtICcwJykgKiAxMDsKLQkJCWlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpIHsKLQkJCQlhbHRmcmFjICs9ICgqY3ArKyAtICcwJyk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlhbHQgPSAoMTAwMDAwMDAgKyAoYWx0c2lnbiAqIChhbHRtZXRlcnMgKiAxMDAgKyBhbHRmcmFjKSkpOwotCi0Jd2hpbGUgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKSAvKiBpZiB0cmFpbGluZyBnYXJiYWdlIG9yIG0gKi8KLQkJY3ArKzsKLQotCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKQotCQljcCsrOwotCi0JaWYgKGNwID49IG1heGNwKQotCQlnb3RvIGRlZmF1bHRzOwotCi0Jc2l6ID0gcHJlY3NpemVfYXRvbigmY3ApOwotCi0Jd2hpbGUgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKQkvKiBpZiB0cmFpbGluZyBnYXJiYWdlIG9yIG0gKi8KLQkJY3ArKzsKLQotCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKQotCQljcCsrOwotCi0JaWYgKGNwID49IG1heGNwKQotCQlnb3RvIGRlZmF1bHRzOwotCi0JaHAgPSBwcmVjc2l6ZV9hdG9uKCZjcCk7Ci0KLQl3aGlsZSAoIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSAmJiAoY3AgPCBtYXhjcCkpCS8qIGlmIHRyYWlsaW5nIGdhcmJhZ2Ugb3IgbSAqLwotCQljcCsrOwotCi0Jd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSAmJiAoY3AgPCBtYXhjcCkpCi0JCWNwKys7Ci0KLQlpZiAoY3AgPj0gbWF4Y3ApCi0JCWdvdG8gZGVmYXVsdHM7Ci0KLQl2cCA9IHByZWNzaXplX2F0b24oJmNwKTsKLQotIGRlZmF1bHRzOgotCi0JYmNwID0gYmluYXJ5OwotCSpiY3ArKyA9ICh1X2ludDhfdCkgMDsJLyogdmVyc2lvbiBieXRlICovCi0JKmJjcCsrID0gc2l6OwotCSpiY3ArKyA9IGhwOwotCSpiY3ArKyA9IHZwOwotCVBVVExPTkcobGF0aXQsYmNwKTsKLQlQVVRMT05HKGxvbmdpdCxiY3ApOwotCVBVVExPTkcoYWx0LGJjcCk7Ci0KLQlyZXR1cm4gKDE2KTsJCS8qIHNpemUgb2YgUlIgaW4gb2N0ZXRzICovCi19Ci0KLS8qIHRha2VzIGFuIG9uLXRoZS13aXJlIExPQyBSUiBhbmQgZm9ybWF0cyBpdCBpbiBhIGh1bWFuIHJlYWRhYmxlIGZvcm1hdC4gKi8KLWNvbnN0IGNoYXIgKgotbG9jX250b2EoYmluYXJ5LCBhc2NpaSkKLQljb25zdCB1X2NoYXIgKmJpbmFyeTsKLQljaGFyICphc2NpaTsKLXsKLQlzdGF0aWMgY29uc3QgY2hhciAqZXJyb3IgPSAiPyI7Ci0Jc3RhdGljIGNoYXIgdG1wYnVmW3NpemVvZgotIjEwMDAgNjAgNjAuMDAwIE4gMTAwMCA2MCA2MC4wMDAgVyAtMTIzNDU2NzguMDBtIDkwMDAwMDAwLjAwbSA5MDAwMDAwMC4wMG0gOTAwMDAwMDAuMDBtIl07Ci0JY29uc3QgdV9jaGFyICpjcCA9IGJpbmFyeTsKLQotCWludCBsYXRkZWcsIGxhdG1pbiwgbGF0c2VjLCBsYXRzZWNmcmFjOwotCWludCBsb25nZGVnLCBsb25nbWluLCBsb25nc2VjLCBsb25nc2VjZnJhYzsKLQljaGFyIG5vcnRoc291dGgsIGVhc3R3ZXN0OwotCWNvbnN0IGNoYXIgKmFsdHNpZ247Ci0JaW50IGFsdG1ldGVycywgYWx0ZnJhYzsKLQotCWNvbnN0IHVfaW50MzJfdCByZWZlcmVuY2VhbHQgPSAxMDAwMDAgKiAxMDA7Ci0KLQlpbnQzMl90IGxhdHZhbCwgbG9uZ3ZhbCwgYWx0dmFsOwotCXVfaW50MzJfdCB0ZW1wbDsKLQl1X2ludDhfdCBzaXpldmFsLCBocHZhbCwgdnB2YWwsIHZlcnNpb252YWw7Ci0KLQljaGFyICpzaXplc3RyLCAqaHBzdHIsICp2cHN0cjsKLQotCXZlcnNpb252YWwgPSAqY3ArKzsKLQotCWlmIChhc2NpaSA9PSBOVUxMKQotCQlhc2NpaSA9IHRtcGJ1ZjsKLQotCWlmICh2ZXJzaW9udmFsKSB7Ci0JCSh2b2lkKSBzcHJpbnRmKGFzY2lpLCAiOyBlcnJvcjogdW5rbm93biBMT0MgUlIgdmVyc2lvbiIpOwotCQlyZXR1cm4gKGFzY2lpKTsKLQl9Ci0KLQlzaXpldmFsID0gKmNwKys7Ci0KLQlocHZhbCA9ICpjcCsrOwotCXZwdmFsID0gKmNwKys7Ci0KLQlHRVRMT05HKHRlbXBsLCBjcCk7Ci0JbGF0dmFsID0gKHRlbXBsIC0gKCh1bnNpZ25lZCkxPDwzMSkpOwotCi0JR0VUTE9ORyh0ZW1wbCwgY3ApOwotCWxvbmd2YWwgPSAodGVtcGwgLSAoKHVuc2lnbmVkKTE8PDMxKSk7Ci0KLQlHRVRMT05HKHRlbXBsLCBjcCk7Ci0JaWYgKHRlbXBsIDwgcmVmZXJlbmNlYWx0KSB7IC8qIGJlbG93IFdHUyA4NCBzcGhlcm9pZCAqLwotCQlhbHR2YWwgPSByZWZlcmVuY2VhbHQgLSB0ZW1wbDsKLQkJYWx0c2lnbiA9ICItIjsKLQl9IGVsc2UgewotCQlhbHR2YWwgPSB0ZW1wbCAtIHJlZmVyZW5jZWFsdDsKLQkJYWx0c2lnbiA9ICIiOwotCX0KLQotCWlmIChsYXR2YWwgPCAwKSB7Ci0JCW5vcnRoc291dGggPSAnUyc7Ci0JCWxhdHZhbCA9IC1sYXR2YWw7Ci0JfSBlbHNlCi0JCW5vcnRoc291dGggPSAnTic7Ci0KLQlsYXRzZWNmcmFjID0gbGF0dmFsICUgMTAwMDsKLQlsYXR2YWwgPSBsYXR2YWwgLyAxMDAwOwotCWxhdHNlYyA9IGxhdHZhbCAlIDYwOwotCWxhdHZhbCA9IGxhdHZhbCAvIDYwOwotCWxhdG1pbiA9IGxhdHZhbCAlIDYwOwotCWxhdHZhbCA9IGxhdHZhbCAvIDYwOwotCWxhdGRlZyA9IGxhdHZhbDsKLQotCWlmIChsb25ndmFsIDwgMCkgewotCQllYXN0d2VzdCA9ICdXJzsKLQkJbG9uZ3ZhbCA9IC1sb25ndmFsOwotCX0gZWxzZQotCQllYXN0d2VzdCA9ICdFJzsKLQotCWxvbmdzZWNmcmFjID0gbG9uZ3ZhbCAlIDEwMDA7Ci0JbG9uZ3ZhbCA9IGxvbmd2YWwgLyAxMDAwOwotCWxvbmdzZWMgPSBsb25ndmFsICUgNjA7Ci0JbG9uZ3ZhbCA9IGxvbmd2YWwgLyA2MDsKLQlsb25nbWluID0gbG9uZ3ZhbCAlIDYwOwotCWxvbmd2YWwgPSBsb25ndmFsIC8gNjA7Ci0JbG9uZ2RlZyA9IGxvbmd2YWw7Ci0KLQlhbHRmcmFjID0gYWx0dmFsICUgMTAwOwotCWFsdG1ldGVycyA9IChhbHR2YWwgLyAxMDApOwotCi0Jc2l6ZXN0ciA9IHN0cmR1cChwcmVjc2l6ZV9udG9hKCh1X2ludDMyX3Qpc2l6ZXZhbCkpOwotCWhwc3RyID0gc3RyZHVwKHByZWNzaXplX250b2EoKHVfaW50MzJfdClocHZhbCkpOwotCXZwc3RyID0gc3RyZHVwKHByZWNzaXplX250b2EoKHVfaW50MzJfdCl2cHZhbCkpOwotCi0Jc3ByaW50Zihhc2NpaSwKLQkgICAgIiVkICUuMmQgJS4yZC4lLjNkICVjICVkICUuMmQgJS4yZC4lLjNkICVjICVzJWQuJS4yZG0gJXNtICVzbSAlc20iLAotCQlsYXRkZWcsIGxhdG1pbiwgbGF0c2VjLCBsYXRzZWNmcmFjLCBub3J0aHNvdXRoLAotCQlsb25nZGVnLCBsb25nbWluLCBsb25nc2VjLCBsb25nc2VjZnJhYywgZWFzdHdlc3QsCi0JCWFsdHNpZ24sIGFsdG1ldGVycywgYWx0ZnJhYywKLQkJKHNpemVzdHIgIT0gTlVMTCkgPyBzaXplc3RyIDogZXJyb3IsCi0JCShocHN0ciAhPSBOVUxMKSA/IGhwc3RyIDogZXJyb3IsCi0JCSh2cHN0ciAhPSBOVUxMKSA/IHZwc3RyIDogZXJyb3IpOwotCi0JaWYgKHNpemVzdHIgIT0gTlVMTCkKLQkJZnJlZShzaXplc3RyKTsKLQlpZiAoaHBzdHIgIT0gTlVMTCkKLQkJZnJlZShocHN0cik7Ci0JaWYgKHZwc3RyICE9IE5VTEwpCi0JCWZyZWUodnBzdHIpOwotCi0JcmV0dXJuIChhc2NpaSk7Ci19Ci0KLQotLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgRE5TIGhpZXJhcmNoeSBsZXZlbHMgaW4gdGhlIG5hbWUuICovCi1pbnQKLWRuX2NvdW50X2xhYmVscyhjb25zdCBjaGFyICpuYW1lKSB7Ci0JaW50IGksIGxlbiwgY291bnQ7Ci0KLQlsZW4gPSBzdHJsZW4obmFtZSk7Ci0JZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJLyogWFhYIG5lZWQgdG8gY2hlY2sgZm9yIFwuIG9yIHVzZSBuYW1lZCdzIG5sYWJlbHMoKS4gKi8KLQkJaWYgKG5hbWVbaV0gPT0gJy4nKQotCQkJY291bnQrKzsKLQl9Ci0KLQkvKiBkb24ndCBjb3VudCBpbml0aWFsIHdpbGRjYXJkICovCi0JaWYgKG5hbWVbMF0gPT0gJyonKQotCQlpZiAoY291bnQpCi0JCQljb3VudC0tOwotCi0JLyogZG9uJ3QgY291bnQgdGhlIG51bGwgbGFiZWwgZm9yIHJvb3QuICovCi0JLyogaWYgdGVybWluYXRpbmcgJy4nIG5vdCBmb3VuZCwgbXVzdCBhZGp1c3QgKi8KLQkvKiBjb3VudCB0byBpbmNsdWRlIGxhc3QgbGFiZWwgKi8KLQlpZiAobGVuID4gMCAmJiBuYW1lW2xlbi0xXSAhPSAnLicpCi0JCWNvdW50Kys7Ci0JcmV0dXJuIChjb3VudCk7Ci19Ci0KLQotLyoKLSAqIE1ha2UgZGF0ZXMgZXhwcmVzc2VkIGluIHNlY29uZHMtc2luY2UtSmFuLTEtMTk3MCBlYXN5IHRvIHJlYWQuCi0gKiBTSUcgcmVjb3JkcyBhcmUgcmVxdWlyZWQgdG8gYmUgcHJpbnRlZCBsaWtlIHRoaXMsIGJ5IHRoZSBTZWN1cmUgRE5TIFJGQy4KLSAqLwotY2hhciAqCi1wX3NlY3N0b2RhdGUgKHVfbG9uZyBzZWNzKSB7Ci0JLyogWFhYIG5vbnJlZW50cmFudCAqLwotCXN0YXRpYyBjaGFyIG91dHB1dFsxNV07CQkvKiBZWVlZTU1EREhITU1TUyBhbmQgbnVsbCAqLwotCXRpbWVfdCBteWNsb2NrID0gc2VjczsKLQlzdHJ1Y3QgdG0gKm15dGltZTsKLSNpZmRlZiBIQVZFX1RJTUVfUgotCXN0cnVjdCB0bSByZXM7Ci0KLQlteXRpbWUgPSBnbXRpbWVfcigmbXljbG9jaywgJnJlcyk7Ci0jZWxzZQotCW15dGltZSA9IGdtdGltZSgmbXljbG9jayk7Ci0jZW5kaWYKLQlteXRpbWUtPnRtX3llYXIgKz0gMTkwMDsKLQlteXRpbWUtPnRtX21vbiArPSAxOwotCXNwcmludGYob3V0cHV0LCAiJTA0ZCUwMmQlMDJkJTAyZCUwMmQlMDJkIiwKLQkJbXl0aW1lLT50bV95ZWFyLCBteXRpbWUtPnRtX21vbiwgbXl0aW1lLT50bV9tZGF5LAotCQlteXRpbWUtPnRtX2hvdXIsIG15dGltZS0+dG1fbWluLCBteXRpbWUtPnRtX3NlYyk7Ci0JcmV0dXJuIChvdXRwdXQpOwotfQotCi11X2ludDE2X3QKLXJlc19uYW1ldG9jbGFzcyhjb25zdCBjaGFyICpidWYsIGludCAqc3VjY2Vzc3ApIHsKLQl1bnNpZ25lZCBsb25nIHJlc3VsdDsKLQljaGFyICplbmRwdHI7Ci0JaW50IHN1Y2Nlc3M7Ci0KLQlyZXN1bHQgPSBzeW1fc3RvbihfX3BfY2xhc3Nfc3ltcywgYnVmLCAmc3VjY2Vzcyk7Ci0JaWYgKHN1Y2Nlc3MpCi0JCWdvdG8gZG9uZTsKLQotCWlmIChzdHJuY2FzZWNtcChidWYsICJDTEFTUyIsIDUpICE9IDAgfHwKLQkgICAgIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpYnVmWzVdKSkKLQkJZ290byBkb25lOwotCWVycm5vID0gMDsKLQlyZXN1bHQgPSBzdHJ0b3VsKGJ1ZiArIDUsICZlbmRwdHIsIDEwKTsKLQlpZiAoZXJybm8gPT0gMCAmJiAqZW5kcHRyID09ICdcMCcgJiYgcmVzdWx0IDw9IDB4ZmZmZlUpCi0JCXN1Y2Nlc3MgPSAxOwotIGRvbmU6Ci0JaWYgKHN1Y2Nlc3NwKQotCQkqc3VjY2Vzc3AgPSBzdWNjZXNzOwotCXJldHVybiAodV9pbnQxNl90KShyZXN1bHQpOwotfQotCi11X2ludDE2X3QKLXJlc19uYW1ldG90eXBlKGNvbnN0IGNoYXIgKmJ1ZiwgaW50ICpzdWNjZXNzcCkgewotCXVuc2lnbmVkIGxvbmcgcmVzdWx0OwotCWNoYXIgKmVuZHB0cjsKLQlpbnQgc3VjY2VzczsKLQotCXJlc3VsdCA9IHN5bV9zdG9uKF9fcF90eXBlX3N5bXMsIGJ1ZiwgJnN1Y2Nlc3MpOwotCWlmIChzdWNjZXNzKQotCQlnb3RvIGRvbmU7Ci0KLQlpZiAoc3RybmNhc2VjbXAoYnVmLCAidHlwZSIsIDQpICE9IDAgfHwKLQkgICAgIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpYnVmWzRdKSkKLQkJZ290byBkb25lOwotCWVycm5vID0gMDsKLQlyZXN1bHQgPSBzdHJ0b3VsKGJ1ZiArIDQsICZlbmRwdHIsIDEwKTsKLQlpZiAoZXJybm8gPT0gMCAmJiAqZW5kcHRyID09ICdcMCcgJiYgcmVzdWx0IDw9IDB4ZmZmZlUpCi0JCXN1Y2Nlc3MgPSAxOwotIGRvbmU6Ci0JaWYgKHN1Y2Nlc3NwKQotCQkqc3VjY2Vzc3AgPSBzdWNjZXNzOwotCXJldHVybiAodV9pbnQxNl90KShyZXN1bHQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19pbml0LmMgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2luaXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ViNDEyYi4uMDAwMDAwMAotLS0gYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2luaXQuYworKysgL2Rldi9udWxsCkBAIC0xLDgxNiArMCwwIEBACi0vKgkkTmV0QlNEOiByZXNfaW5pdC5jLHYgMS44IDIwMDYvMDMvMTkgMDM6MTA6MDggY2hyaXN0b3MgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4NSwgMTk4OSwgMTk5MwotICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAotICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKLSAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAotICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAotICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCi0gKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLSAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCi0gKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLgotICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWZkZWYgbm90ZGVmCi1zdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX2luaXQuYwk4LjEgKEJlcmtlbGV5KSA2LzcvOTMiOwotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX2luaXQuYyx2IDEuOS4yLjUuNC4yIDIwMDQvMDMvMTYgMTI6MzQ6MTggbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiByZXNfaW5pdC5jLHYgMS44IDIwMDYvMDMvMTkgMDM6MTA6MDggY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLQotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxuZXRkYi5oPgotCi0jaWZkZWYgQU5EUk9JRF9DSEFOR0VTCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN5cy9zeXN0ZW1fcHJvcGVydGllcy5oPgotI2VuZGlmIC8qIEFORFJPSURfQ0hBTkdFUyAqLwotCi0jaWZuZGVmIE1JTgotI2RlZmluZQlNSU4oeCx5KQkoKHgpPCh5KT8oeCk6KHkpKQotI2VuZGlmCi0KLS8qIGVuc3VyZSB0aGF0IHNvY2thZGRyX2luNiBhbmQgSU42QUREUl9BTllfSU5JVCBhcmUgZGVjbGFyZWQgLyBkZWZpbmVkICovCi0jaWZkZWYgQU5EUk9JRF9DSEFOR0VTCi0jaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKLSNlbHNlCi0jaW5jbHVkZSA8cmVzb2x2Lmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgInJlc19wcml2YXRlLmgiCi0KLS8qIE9wdGlvbnMuICBTaG91bGQgYWxsIGJlIGxlZnQgYWxvbmUuICovCi0jaWZuZGVmIERFQlVHCi0jZGVmaW5lIERFQlVHCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgcmVzX3NldG9wdGlvbnMgX19QKChyZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyIHNvcnRfbWFza1tdID0gIi8mIjsKLSNkZWZpbmUgSVNTT1JUTUFTSyhjaCkgKHN0cmNocihzb3J0X21hc2ssIGNoKSAhPSBOVUxMKQotc3RhdGljIHVfaW50MzJfdCBuZXRfbWFzayBfX1AoKHN0cnVjdCBpbl9hZGRyKSk7Ci0KLSNpZiAhZGVmaW5lZChpc2FzY2lpKQkvKiBYWFggLSBjb3VsZCBiZSBhIGZ1bmN0aW9uICovCi0jIGRlZmluZSBpc2FzY2lpKGMpICghKGMgJiAwMjAwKSkKLSNlbmRpZgotCi0vKgotICogUmVzb2x2ZXIgc3RhdGUgZGVmYXVsdCBzZXR0aW5ncy4KLSAqLwotCi0vKgotICogU2V0IHVwIGRlZmF1bHQgc2V0dGluZ3MuICBJZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGV4aXN0LCB0aGUgdmFsdWVzCi0gKiB0aGVyZSB3aWxsIGhhdmUgcHJlY2VkZW5jZS4gIE90aGVyd2lzZSwgdGhlIHNlcnZlciBhZGRyZXNzIGlzIHNldCB0bwotICogSU5BRERSX0FOWSBhbmQgdGhlIGRlZmF1bHQgZG9tYWluIG5hbWUgY29tZXMgZnJvbSB0aGUgZ2V0aG9zdG5hbWUoKS4KLSAqCi0gKiBBbiBpbnRlcnJpbSB2ZXJzaW9uIG9mIHRoaXMgY29kZSAoQklORCA0LjksIHByZS00LjRCU0QpIHVzZWQgMTI3LjAuMC4xCi0gKiByYXRoZXIgdGhhbiBJTkFERFJfQU5ZICgiMC4wLjAuMCIpIGFzIHRoZSBkZWZhdWx0IG5hbWUgc2VydmVyIGFkZHJlc3MKLSAqIHNpbmNlIGl0IHdhcyBub3RlZCB0aGF0IElOQUREUl9BTlkgYWN0dWFsbHkgbWVhbnQgYGB0aGUgZmlyc3QgaW50ZXJmYWNlCi0gKiB5b3UgImlmY29uZmlnIidkIGF0IGJvb3QgdGltZScnIGFuZCBpZiB0aGlzIHdhcyBhIFNMSVAgb3IgUFBQIGludGVyZmFjZSwKLSAqIGl0IGhhZCB0byBiZSAidXAiIGluIG9yZGVyIGZvciB5b3UgdG8gcmVhY2ggeW91ciBvd24gbmFtZSBzZXJ2ZXIuICBJdAotICogd2FzIGxhdGVyIGRlY2lkZWQgdGhhdCBzaW5jZSB0aGUgcmVjb21tZW5kZWQgcHJhY3RpY2UgaXMgdG8gYWx3YXlzCi0gKiBpbnN0YWxsIGxvY2FsIHN0YXRpYyByb3V0ZXMgdGhyb3VnaCAxMjcuMC4wLjEgZm9yIGFsbCB5b3VyIG5ldHdvcmsKLSAqIGludGVyZmFjZXMsIHRoYXQgd2UgY291bGQgc29sdmUgdGhpcyBwcm9ibGVtIHdpdGhvdXQgYSBjb2RlIGNoYW5nZS4KLSAqCi0gKiBUaGUgY29uZmlndXJhdGlvbiBmaWxlIHNob3VsZCBhbHdheXMgYmUgdXNlZCwgc2luY2UgaXQgaXMgdGhlIG9ubHkgd2F5Ci0gKiB0byBzcGVjaWZ5IGEgZGVmYXVsdCBkb21haW4uICBJZiB5b3UgYXJlIHJ1bm5pbmcgYSBzZXJ2ZXIgb24geW91ciBsb2NhbAotICogbWFjaGluZSwgeW91IHNob3VsZCBzYXkgIm5hbWVzZXJ2ZXIgMC4wLjAuMCIgb3IgIm5hbWVzZXJ2ZXIgMTI3LjAuMC4xIgotICogaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAqCi0gKiBSZXR1cm4gMCBpZiBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LCAtMSBvbiBlcnJvcgotICovCi1pbnQKLXJlc19uaW5pdChyZXNfc3RhdGUgc3RhdHApIHsKLQlleHRlcm4gaW50IF9fcmVzX3Zpbml0KHJlc19zdGF0ZSwgaW50KTsKLQotCXJldHVybiAoX19yZXNfdmluaXQoc3RhdHAsIDApKTsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgcmVhY2hhYmxlIGJ5IHJlc19kYXRhLmMgYnV0IG5vdCBwdWJsaWNseS4gKi8KLWludAotX19yZXNfdmluaXQocmVzX3N0YXRlIHN0YXRwLCBpbnQgcHJlaW5pdCkgewotCXJlZ2lzdGVyIEZJTEUgKmZwOwotCXJlZ2lzdGVyIGNoYXIgKmNwLCAqKnBwOwotCXJlZ2lzdGVyIGludCBuOwotCWNoYXIgYnVmW0JVRlNJWl07Ci0JaW50IG5zZXJ2ID0gMDsgICAgLyogbnVtYmVyIG9mIG5hbWVzZXJ2ZXIgcmVjb3JkcyByZWFkIGZyb20gZmlsZSAqLwotCWludCBoYXZlZW52ID0gMDsKLQlpbnQgaGF2ZXNlYXJjaCA9IDA7Ci0JaW50IG5zb3J0ID0gMDsKLQljaGFyICpuZXQ7Ci0JaW50IGRvdHM7Ci0JdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uIHVbMl07Ci0KLSAgICAgICAgaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19JTklUKSAhPSAwVSkKLSAgICAgICAgICAgICAgICByZXNfbmRlc3Ryb3koc3RhdHApOwotCi0JaWYgKCFwcmVpbml0KSB7Ci0JCXN0YXRwLT5yZXRyYW5zID0gUkVTX1RJTUVPVVQ7Ci0JCXN0YXRwLT5yZXRyeSA9IFJFU19ERkxSRVRSWTsKLQkJc3RhdHAtPm9wdGlvbnMgPSBSRVNfREVGQVVMVDsKLQkJc3RhdHAtPmlkID0gcmVzX3JhbmRvbWlkKCk7Ci0JfQotCi0JbWVtc2V0KHUsIDAsIHNpemVvZih1KSk7Ci0jaWZkZWYgVVNFTE9PUEJBQ0sKLQl1W25zZXJ2XS5zaW4uc2luX2FkZHIgPSBpbmV0X21ha2VhZGRyKElOX0xPT1BCQUNLTkVULCAxKTsKLSNlbHNlCi0JdVtuc2Vydl0uc2luLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7Ci0jZW5kaWYKLQl1W25zZXJ2XS5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JdVtuc2Vydl0uc2luLnNpbl9wb3J0ID0gaHRvbnMoTkFNRVNFUlZFUl9QT1JUKTsKLSNpZmRlZiBIQVZFX1NBX0xFTgotCXVbbnNlcnZdLnNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQluc2VydisrOwotI2lmZGVmIEhBU19JTkVUNl9TVFJVQ1RTCi0jaWZkZWYgVVNFTE9PUEJBQ0sKLQl1W25zZXJ2XS5zaW42LnNpbjZfYWRkciA9IGluNmFkZHJfbG9vcGJhY2s7Ci0jZWxzZQotCXVbbnNlcnZdLnNpbjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7Ci0jZW5kaWYKLQl1W25zZXJ2XS5zaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0JdVtuc2Vydl0uc2luNi5zaW42X3BvcnQgPSBodG9ucyhOQU1FU0VSVkVSX1BPUlQpOwotI2lmZGVmIEhBVkVfU0FfTEVOCi0JdVtuc2Vydl0uc2luNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCW5zZXJ2Kys7Ci0jZW5kaWYKLQlzdGF0cC0+bnNjb3VudCA9IDA7Ci0Jc3RhdHAtPm5kb3RzID0gMTsKLQlzdGF0cC0+cGZjb2RlID0gMDsKLQlzdGF0cC0+X3Zjc29jayA9IC0xOwotCXN0YXRwLT5fZmxhZ3MgPSAwOwotCXN0YXRwLT5xaG9vayA9IE5VTEw7Ci0Jc3RhdHAtPnJob29rID0gTlVMTDsKLQlzdGF0cC0+X3UuX2V4dC5uc2NvdW50ID0gMDsKLQlzdGF0cC0+X3UuX2V4dC5leHQgPSBtYWxsb2Moc2l6ZW9mKCpzdGF0cC0+X3UuX2V4dC5leHQpKTsKLQlpZiAoc3RhdHAtPl91Ll9leHQuZXh0ICE9IE5VTEwpIHsKLQkgICAgICAgIG1lbXNldChzdGF0cC0+X3UuX2V4dC5leHQsIDAsIHNpemVvZigqc3RhdHAtPl91Ll9leHQuZXh0KSk7Ci0JCXN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1swXS5zaW4gPSBzdGF0cC0+bnNhZGRyOwotCQlzdHJjcHkoc3RhdHAtPl91Ll9leHQuZXh0LT5uc3VmZml4LCAiaXA2LmFycGEiKTsKLQkJc3RyY3B5KHN0YXRwLT5fdS5fZXh0LmV4dC0+bnN1ZmZpeDIsICJpcDYuaW50Iik7Ci0JfQotCXN0YXRwLT5uc29ydCA9IDA7Ci0JcmVzX3NldHNlcnZlcnMoc3RhdHAsIHUsIG5zZXJ2KTsKLQotI2lmIDAgLyogSUdOT1JFIFRIRSBFTlZJUk9OTUVOVCAqLwotCS8qIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlIGxvY2FsIGRvbWFpbiBkZWZpbml0aW9uICovCi0JaWYgKChjcCA9IGdldGVudigiTE9DQUxET01BSU4iKSkgIT0gTlVMTCkgewotCQkodm9pZClzdHJuY3B5KHN0YXRwLT5kZWZkbmFtZSwgY3AsIHNpemVvZihzdGF0cC0+ZGVmZG5hbWUpIC0gMSk7Ci0JCXN0YXRwLT5kZWZkbmFtZVtzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDFdID0gJ1wwJzsKLQkJaGF2ZWVudisrOwotCi0JCS8qCi0JCSAqIFNldCBzZWFyY2ggbGlzdCB0byBiZSBibGFuay1zZXBhcmF0ZWQgc3RyaW5ncwotCQkgKiBmcm9tIHJlc3Qgb2YgZW52IHZhbHVlLiAgUGVybWl0cyB1c2VycyBvZiBMT0NBTERPTUFJTgotCQkgKiB0byBzdGlsbCBoYXZlIGEgc2VhcmNoIGxpc3QsIGFuZCBhbnlvbmUgdG8gc2V0IHRoZQotCQkgKiBvbmUgdGhhdCB0aGV5IHdhbnQgdG8gdXNlIGFzIGFuIGluZGl2aWR1YWwgKGV2ZW4gbW9yZQotCQkgKiBpbXBvcnRhbnQgbm93IHRoYXQgdGhlIHJmYzE1MzUgc3R1ZmYgcmVzdHJpY3RzIHNlYXJjaGVzKQotCQkgKi8KLQkJY3AgPSBzdGF0cC0+ZGVmZG5hbWU7Ci0JCXBwID0gc3RhdHAtPmRuc3JjaDsKLQkJKnBwKysgPSBjcDsKLQkJZm9yIChuID0gMDsgKmNwICYmIHBwIDwgc3RhdHAtPmRuc3JjaCArIE1BWEROU1JDSDsgY3ArKykgewotCQkJaWYgKCpjcCA9PSAnXG4nKQkvKiBzaWxseSBiYWNrd2FyZHMgY29tcGF0ICovCi0JCQkJYnJlYWs7Ci0JCQllbHNlIGlmICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSB7Ci0JCQkJKmNwID0gMDsKLQkJCQluID0gMTsKLQkJCX0gZWxzZSBpZiAobikgewotCQkJCSpwcCsrID0gY3A7Ci0JCQkJbiA9IDA7Ci0JCQkJaGF2ZXNlYXJjaCA9IDE7Ci0JCQl9Ci0JCX0KLQkJLyogbnVsbCB0ZXJtaW5hdGUgbGFzdCBkb21haW4gaWYgdGhlcmUgYXJlIGV4Y2VzcyAqLwotCQl3aGlsZSAoKmNwICE9ICdcMCcgJiYgKmNwICE9ICcgJyAmJiAqY3AgIT0gJ1x0JyAmJiAqY3AgIT0gJ1xuJykKLQkJCWNwKys7Ci0JCSpjcCA9ICdcMCc7Ci0JCSpwcCsrID0gMDsKLQl9Ci0JaWYgKG5zZXJ2ID4gMCkKLQkJc3RhdHAtPm5zY291bnQgPSBuc2VydjsKLSNlbmRpZgotCi0jaWZuZGVmIEFORFJPSURfQ0hBTkdFUyAvKiAhQU5EUk9JRF9DSEFOR0VTIC0gSUdOT1JFIHJlc29sdi5jb25mIGluIEFuZHJvaWQgKi8KLSNkZWZpbmUJTUFUQ0gobGluZSwgbmFtZSkgXAotCSghc3RybmNtcChsaW5lLCBuYW1lLCBzaXplb2YobmFtZSkgLSAxKSAmJiBcCi0JKGxpbmVbc2l6ZW9mKG5hbWUpIC0gMV0gPT0gJyAnIHx8IFwKLQkgbGluZVtzaXplb2YobmFtZSkgLSAxXSA9PSAnXHQnKSkKLQotCW5zZXJ2ID0gMDsKLQlpZiAoKGZwID0gZm9wZW4oX1BBVEhfUkVTQ09ORiwgInIiKSkgIT0gTlVMTCkgewotCSAgICAvKiByZWFkIHRoZSBjb25maWcgZmlsZSAqLwotCSAgICB3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApICE9IE5VTEwpIHsKLQkJLyogc2tpcCBjb21tZW50cyAqLwotCQlpZiAoKmJ1ZiA9PSAnOycgfHwgKmJ1ZiA9PSAnIycpCi0JCQljb250aW51ZTsKLQkJLyogcmVhZCBkZWZhdWx0IGRvbWFpbiBuYW1lICovCi0JCWlmIChNQVRDSChidWYsICJkb21haW4iKSkgewotCQkgICAgaWYgKGhhdmVlbnYpCS8qIHNraXAgaWYgaGF2ZSBmcm9tIGVudmlyb24gKi8KLQkJCSAgICBjb250aW51ZTsKLQkJICAgIGNwID0gYnVmICsgc2l6ZW9mKCJkb21haW4iKSAtIDE7Ci0JCSAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKLQkJCSAgICBjcCsrOwotCQkgICAgaWYgKCgqY3AgPT0gJ1wwJykgfHwgKCpjcCA9PSAnXG4nKSkKLQkJCSAgICBjb250aW51ZTsKLQkJICAgIHN0cm5jcHkoc3RhdHAtPmRlZmRuYW1lLCBjcCwgc2l6ZW9mKHN0YXRwLT5kZWZkbmFtZSkgLSAxKTsKLQkJICAgIHN0YXRwLT5kZWZkbmFtZVtzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDFdID0gJ1wwJzsKLQkJICAgIGlmICgoY3AgPSBzdHJwYnJrKHN0YXRwLT5kZWZkbmFtZSwgIiBcdFxuIikpICE9IE5VTEwpCi0JCQkgICAgKmNwID0gJ1wwJzsKLQkJICAgIGhhdmVzZWFyY2ggPSAwOwotCQkgICAgY29udGludWU7Ci0JCX0KLQkJLyogc2V0IHNlYXJjaCBsaXN0ICovCi0JCWlmIChNQVRDSChidWYsICJzZWFyY2giKSkgewotCQkgICAgaWYgKGhhdmVlbnYpCS8qIHNraXAgaWYgaGF2ZSBmcm9tIGVudmlyb24gKi8KLQkJCSAgICBjb250aW51ZTsKLQkJICAgIGNwID0gYnVmICsgc2l6ZW9mKCJzZWFyY2giKSAtIDE7Ci0JCSAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKLQkJCSAgICBjcCsrOwotCQkgICAgaWYgKCgqY3AgPT0gJ1wwJykgfHwgKCpjcCA9PSAnXG4nKSkKLQkJCSAgICBjb250aW51ZTsKLQkJICAgIHN0cm5jcHkoc3RhdHAtPmRlZmRuYW1lLCBjcCwgc2l6ZW9mKHN0YXRwLT5kZWZkbmFtZSkgLSAxKTsKLQkJICAgIHN0YXRwLT5kZWZkbmFtZVtzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDFdID0gJ1wwJzsKLQkJICAgIGlmICgoY3AgPSBzdHJjaHIoc3RhdHAtPmRlZmRuYW1lLCAnXG4nKSkgIT0gTlVMTCkKLQkJCSAgICAqY3AgPSAnXDAnOwotCQkgICAgLyoKLQkJICAgICAqIFNldCBzZWFyY2ggbGlzdCB0byBiZSBibGFuay1zZXBhcmF0ZWQgc3RyaW5ncwotCQkgICAgICogb24gcmVzdCBvZiBsaW5lLgotCQkgICAgICovCi0JCSAgICBjcCA9IHN0YXRwLT5kZWZkbmFtZTsKLQkJICAgIHBwID0gc3RhdHAtPmRuc3JjaDsKLQkJICAgICpwcCsrID0gY3A7Ci0JCSAgICBmb3IgKG4gPSAwOyAqY3AgJiYgcHAgPCBzdGF0cC0+ZG5zcmNoICsgTUFYRE5TUkNIOyBjcCsrKSB7Ci0JCQkgICAgaWYgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpIHsKLQkJCQkgICAgKmNwID0gMDsKLQkJCQkgICAgbiA9IDE7Ci0JCQkgICAgfSBlbHNlIGlmIChuKSB7Ci0JCQkJICAgICpwcCsrID0gY3A7Ci0JCQkJICAgIG4gPSAwOwotCQkJICAgIH0KLQkJICAgIH0KLQkJICAgIC8qIG51bGwgdGVybWluYXRlIGxhc3QgZG9tYWluIGlmIHRoZXJlIGFyZSBleGNlc3MgKi8KLQkJICAgIHdoaWxlICgqY3AgIT0gJ1wwJyAmJiAqY3AgIT0gJyAnICYmICpjcCAhPSAnXHQnKQotCQkJICAgIGNwKys7Ci0JCSAgICAqY3AgPSAnXDAnOwotCQkgICAgKnBwKysgPSAwOwotCQkgICAgaGF2ZXNlYXJjaCA9IDE7Ci0JCSAgICBjb250aW51ZTsKLQkJfQotCQkvKiByZWFkIG5hbWVzZXJ2ZXJzIHRvIHF1ZXJ5ICovCi0JCWlmIChNQVRDSChidWYsICJuYW1lc2VydmVyIikgJiYgbnNlcnYgPCBNQVhOUykgewotCQkgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWk7Ci0JCSAgICBjaGFyIHNidWZbTklfTUFYU0VSVl07Ci0JCSAgICBjb25zdCBzaXplX3QgbWluc2l6ID0KLQkJICAgICAgICBzaXplb2Yoc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzWzBdKTsKLQotCQkgICAgY3AgPSBidWYgKyBzaXplb2YoIm5hbWVzZXJ2ZXIiKSAtIDE7Ci0JCSAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKLQkJCWNwKys7Ci0JCSAgICBjcFtzdHJjc3BuKGNwLCAiOyMgXHRcbiIpXSA9ICdcMCc7Ci0JCSAgICBpZiAoKCpjcCAhPSAnXDAnKSAmJiAoKmNwICE9ICdcbicpKSB7Ci0JCQltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKLQkJCWhpbnRzLmFpX2ZhbWlseSA9IFBGX1VOU1BFQzsKLQkJCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19ER1JBTTsJLypkdW1teSovCi0JCQloaW50cy5haV9mbGFncyA9IEFJX05VTUVSSUNIT1NUOwotCQkJc3ByaW50ZihzYnVmLCAiJXUiLCBOQU1FU0VSVkVSX1BPUlQpOwotCQkJaWYgKGdldGFkZHJpbmZvKGNwLCBzYnVmLCAmaGludHMsICZhaSkgPT0gMCAmJgotCQkJICAgIGFpLT5haV9hZGRybGVuIDw9IG1pbnNpeikgewotCQkJICAgIGlmIChzdGF0cC0+X3UuX2V4dC5leHQgIT0gTlVMTCkgewotCQkJCW1lbWNweSgmc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW25zZXJ2XSwKLQkJCQkgICAgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKTsKLQkJCSAgICB9Ci0JCQkgICAgaWYgKGFpLT5haV9hZGRybGVuIDw9Ci0JCQkgICAgICAgIHNpemVvZihzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdKSkgewotCQkJCW1lbWNweSgmc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSwKLQkJCQkgICAgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKTsKLQkJCSAgICB9IGVsc2UKLQkJCQlzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLnNpbl9mYW1pbHkgPSAwOwotCQkJICAgIGZyZWVhZGRyaW5mbyhhaSk7Ci0JCQkgICAgbnNlcnYrKzsKLQkJCX0KLQkJICAgIH0KLQkJICAgIGNvbnRpbnVlOwotCQl9Ci0JCWlmIChNQVRDSChidWYsICJzb3J0bGlzdCIpKSB7Ci0JCSAgICBzdHJ1Y3QgaW5fYWRkciBhOwotCi0JCSAgICBjcCA9IGJ1ZiArIHNpemVvZigic29ydGxpc3QiKSAtIDE7Ci0JCSAgICB3aGlsZSAobnNvcnQgPCBNQVhSRVNPTFZTT1JUKSB7Ci0JCQl3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKLQkJCSAgICBjcCsrOwotCQkJaWYgKCpjcCA9PSAnXDAnIHx8ICpjcCA9PSAnXG4nIHx8ICpjcCA9PSAnOycpCi0JCQkgICAgYnJlYWs7Ci0JCQluZXQgPSBjcDsKLQkJCXdoaWxlICgqY3AgJiYgIUlTU09SVE1BU0soKmNwKSAmJiAqY3AgIT0gJzsnICYmCi0JCQkgICAgICAgaXNhc2NpaSgqY3ApICYmICFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCi0JCQkJY3ArKzsKLQkJCW4gPSAqY3A7Ci0JCQkqY3AgPSAwOwotCQkJaWYgKGluZXRfYXRvbihuZXQsICZhKSkgewotCQkJICAgIHN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLmFkZHIgPSBhOwotCQkJICAgIGlmIChJU1NPUlRNQVNLKG4pKSB7Ci0JCQkJKmNwKysgPSBuOwotCQkJCW5ldCA9IGNwOwotCQkJCXdoaWxlICgqY3AgJiYgKmNwICE9ICc7JyAmJgotCQkJCQlpc2FzY2lpKCpjcCkgJiYKLQkJCQkJIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkKLQkJCQkgICAgY3ArKzsKLQkJCQluID0gKmNwOwotCQkJCSpjcCA9IDA7Ci0JCQkJaWYgKGluZXRfYXRvbihuZXQsICZhKSkgewotCQkJCSAgICBzdGF0cC0+c29ydF9saXN0W25zb3J0XS5tYXNrID0gYS5zX2FkZHI7Ci0JCQkJfSBlbHNlIHsKLQkJCQkgICAgc3RhdHAtPnNvcnRfbGlzdFtuc29ydF0ubWFzayA9Ci0JCQkJCW5ldF9tYXNrKHN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLmFkZHIpOwotCQkJCX0KLQkJCSAgICB9IGVsc2UgewotCQkJCXN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLm1hc2sgPQotCQkJCSAgICBuZXRfbWFzayhzdGF0cC0+c29ydF9saXN0W25zb3J0XS5hZGRyKTsKLQkJCSAgICB9Ci0JCQkgICAgbnNvcnQrKzsKLQkJCX0KLQkJCSpjcCA9IG47Ci0JCSAgICB9Ci0JCSAgICBjb250aW51ZTsKLQkJfQotCQlpZiAoTUFUQ0goYnVmLCAib3B0aW9ucyIpKSB7Ci0JCSAgICByZXNfc2V0b3B0aW9ucyhzdGF0cCwgYnVmICsgc2l6ZW9mKCJvcHRpb25zIikgLSAxLCAiY29uZiIpOwotCQkgICAgY29udGludWU7Ci0JCX0KLQkgICAgfQotCSAgICBpZiAobnNlcnYgPiAwKQotCQlzdGF0cC0+bnNjb3VudCA9IG5zZXJ2OwotCSAgICBzdGF0cC0+bnNvcnQgPSBuc29ydDsKLQkgICAgKHZvaWQpIGZjbG9zZShmcCk7Ci0JfQotI2VuZGlmIC8qICFBTkRST0lEX0NIQU5HRVMgKi8KLS8qCi0gKiBMYXN0IGNoYW5jZSB0byBnZXQgYSBuYW1lc2VydmVyLiAgVGhpcyBzaG91bGQgbm90IG5vcm1hbGx5Ci0gKiBiZSBuZWNlc3NhcnkKLSAqLwotI2lmZGVmIE5PX1JFU09MVl9DT05GCi0JaWYobnNlcnYgPT0gMCkKLQkJbnNlcnYgPSBnZXRfbmFtZXNlcnZlcnMoc3RhdHApOwotI2VuZGlmCi0KLQlpZiAoc3RhdHAtPmRlZmRuYW1lWzBdID09IDAgJiYKLQkgICAgZ2V0aG9zdG5hbWUoYnVmLCBzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDEpID09IDAgJiYKLQkgICAgKGNwID0gc3RyY2hyKGJ1ZiwgJy4nKSkgIT0gTlVMTCkKLQkJc3RyY3B5KHN0YXRwLT5kZWZkbmFtZSwgY3AgKyAxKTsKLQotCS8qIGZpbmQgY29tcG9uZW50cyBvZiBsb2NhbCBkb21haW4gdGhhdCBtaWdodCBiZSBzZWFyY2hlZCAqLwotCWlmIChoYXZlc2VhcmNoID09IDApIHsKLQkJcHAgPSBzdGF0cC0+ZG5zcmNoOwotCQkqcHArKyA9IHN0YXRwLT5kZWZkbmFtZTsKLQkJKnBwID0gTlVMTDsKLQotCQlkb3RzID0gMDsKLQkJZm9yIChjcCA9IHN0YXRwLT5kZWZkbmFtZTsgKmNwOyBjcCsrKQotCQkJZG90cyArPSAoKmNwID09ICcuJyk7Ci0KLQkJY3AgPSBzdGF0cC0+ZGVmZG5hbWU7Ci0JCXdoaWxlIChwcCA8IHN0YXRwLT5kbnNyY2ggKyBNQVhERkxTUkNIKSB7Ci0JCQlpZiAoZG90cyA8IExPQ0FMRE9NQUlOUEFSVFMpCi0JCQkJYnJlYWs7Ci0JCQljcCA9IHN0cmNocihjcCwgJy4nKSArIDE7ICAgIC8qIHdlIGtub3cgdGhlcmUgaXMgb25lICovCi0JCQkqcHArKyA9IGNwOwotCQkJZG90cy0tOwotCQl9Ci0JCSpwcCA9IE5VTEw7Ci0jaWZkZWYgREVCVUcKLQkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB7Ci0JCQlwcmludGYoIjs7IHJlc19pbml0KCkuLi4gZGVmYXVsdCBkbnNyY2ggbGlzdDpcbiIpOwotCQkJZm9yIChwcCA9IHN0YXRwLT5kbnNyY2g7ICpwcDsgcHArKykKLQkJCQlwcmludGYoIjs7XHQlc1xuIiwgKnBwKTsKLQkJCXByaW50ZigiOztcdC4uRU5ELi5cbiIpOwotCQl9Ci0jZW5kaWYKLQl9Ci0KLQlpZiAoKGNwID0gZ2V0ZW52KCJSRVNfT1BUSU9OUyIpKSAhPSBOVUxMKQotCQlyZXNfc2V0b3B0aW9ucyhzdGF0cCwgY3AsICJlbnYiKTsKLQlpZiAobnNlcnYgPiAwKSB7Ci0JCXN0YXRwLT5uc2NvdW50ID0gbnNlcnY7Ci0JCXN0YXRwLT5vcHRpb25zIHw9IFJFU19JTklUOwotCX0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgdm9pZAotcmVzX3NldG9wdGlvbnMocmVzX3N0YXRlIHN0YXRwLCBjb25zdCBjaGFyICpvcHRpb25zLCBjb25zdCBjaGFyICpzb3VyY2UpCi17Ci0JY29uc3QgY2hhciAqY3AgPSBvcHRpb25zOwotCWludCBpOwotCXN0cnVjdCBfX3Jlc19zdGF0ZV9leHQgKmV4dCA9IHN0YXRwLT5fdS5fZXh0LmV4dDsKLQotI2lmZGVmIERFQlVHCi0JaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQotCQlwcmludGYoIjs7IHJlc19zZXRvcHRpb25zKFwiJXNcIiwgXCIlc1wiKS4uLlxuIiwKLQkJICAgICAgIG9wdGlvbnMsIHNvdXJjZSk7Ci0jZW5kaWYKLQl3aGlsZSAoKmNwKSB7Ci0JCS8qIHNraXAgbGVhZGluZyBhbmQgaW5uZXIgcnVucyBvZiBzcGFjZXMgKi8KLQkJd2hpbGUgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpCi0JCQljcCsrOwotCQkvKiBzZWFyY2ggZm9yIGFuZCBwcm9jZXNzIGluZGl2aWR1YWwgb3B0aW9ucyAqLwotCQlpZiAoIXN0cm5jbXAoY3AsICJuZG90czoiLCBzaXplb2YoIm5kb3RzOiIpIC0gMSkpIHsKLQkJCWkgPSBhdG9pKGNwICsgc2l6ZW9mKCJuZG90czoiKSAtIDEpOwotCQkJaWYgKGkgPD0gUkVTX01BWE5ET1RTKQotCQkJCXN0YXRwLT5uZG90cyA9IGk7Ci0JCQllbHNlCi0JCQkJc3RhdHAtPm5kb3RzID0gUkVTX01BWE5ET1RTOwotI2lmZGVmIERFQlVHCi0JCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCi0JCQkJcHJpbnRmKCI7O1x0bmRvdHM9JWRcbiIsIHN0YXRwLT5uZG90cyk7Ci0jZW5kaWYKLQkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgInRpbWVvdXQ6Iiwgc2l6ZW9mKCJ0aW1lb3V0OiIpIC0gMSkpIHsKLQkJCWkgPSBhdG9pKGNwICsgc2l6ZW9mKCJ0aW1lb3V0OiIpIC0gMSk7Ci0JCQlpZiAoaSA8PSBSRVNfTUFYUkVUUkFOUykKLQkJCQlzdGF0cC0+cmV0cmFucyA9IGk7Ci0JCQllbHNlCi0JCQkJc3RhdHAtPnJldHJhbnMgPSBSRVNfTUFYUkVUUkFOUzsKLSNpZmRlZiBERUJVRwotCQkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQotCQkJCXByaW50ZigiOztcdHRpbWVvdXQ9JWRcbiIsIHN0YXRwLT5yZXRyYW5zKTsKLSNlbmRpZgotCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAiYXR0ZW1wdHM6Iiwgc2l6ZW9mKCJhdHRlbXB0czoiKSAtIDEpKXsKLQkJCWkgPSBhdG9pKGNwICsgc2l6ZW9mKCJhdHRlbXB0czoiKSAtIDEpOwotCQkJaWYgKGkgPD0gUkVTX01BWFJFVFJZKQotCQkJCXN0YXRwLT5yZXRyeSA9IGk7Ci0JCQllbHNlCi0JCQkJc3RhdHAtPnJldHJ5ID0gUkVTX01BWFJFVFJZOwotI2lmZGVmIERFQlVHCi0JCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCi0JCQkJcHJpbnRmKCI7O1x0YXR0ZW1wdHM9JWRcbiIsIHN0YXRwLT5yZXRyeSk7Ci0jZW5kaWYKLQkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgImRlYnVnIiwgc2l6ZW9mKCJkZWJ1ZyIpIC0gMSkpIHsKLSNpZmRlZiBERUJVRwotCQkJaWYgKCEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpKSB7Ci0JCQkJcHJpbnRmKCI7OyByZXNfc2V0b3B0aW9ucyhcIiVzXCIsIFwiJXNcIikuLlxuIiwKLQkJCQkgICAgICAgb3B0aW9ucywgc291cmNlKTsKLQkJCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfREVCVUc7Ci0JCQl9Ci0JCQlwcmludGYoIjs7XHRkZWJ1Z1xuIik7Ci0jZW5kaWYKLQkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgIm5vX3RsZF9xdWVyeSIsCi0JCQkJICAgIHNpemVvZigibm9fdGxkX3F1ZXJ5IikgLSAxKSB8fAotCQkJICAgIXN0cm5jbXAoY3AsICJuby10bGQtcXVlcnkiLAotCQkJCSAgICBzaXplb2YoIm5vLXRsZC1xdWVyeSIpIC0gMSkpIHsKLQkJCXN0YXRwLT5vcHRpb25zIHw9IFJFU19OT1RMRFFVRVJZOwotCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAiaW5ldDYiLCBzaXplb2YoImluZXQ2IikgLSAxKSkgewotCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX1VTRV9JTkVUNjsKLQkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgInJvdGF0ZSIsIHNpemVvZigicm90YXRlIikgLSAxKSkgewotCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX1JPVEFURTsKLQkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgIm5vLWNoZWNrLW5hbWVzIiwKLQkJCQkgICAgc2l6ZW9mKCJuby1jaGVjay1uYW1lcyIpIC0gMSkpIHsKLQkJCXN0YXRwLT5vcHRpb25zIHw9IFJFU19OT0NIRUNLTkFNRTsKLQkJfQotI2lmZGVmIFJFU19VU0VfRUROUzAKLQkJZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJlZG5zMCIsIHNpemVvZigiZWRuczAiKSAtIDEpKSB7Ci0JCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfVVNFX0VETlMwOwotCQl9Ci0jZW5kaWYKLQkJZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJkbmFtZSIsIHNpemVvZigiZG5hbWUiKSAtIDEpKSB7Ci0JCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfVVNFX0ROQU1FOwotCQl9Ci0JCWVsc2UgaWYgKCFzdHJuY21wKGNwLCAibmliYmxlOiIsIHNpemVvZigibmliYmxlOiIpIC0gMSkpIHsKLQkJCWlmIChleHQgPT0gTlVMTCkKLQkJCQlnb3RvIHNraXA7Ci0JCQljcCArPSBzaXplb2YoIm5pYmJsZToiKSAtIDE7Ci0JCQlpID0gTUlOKHN0cmNzcG4oY3AsICIgXHQiKSwgc2l6ZW9mKGV4dC0+bnN1ZmZpeCkgLSAxKTsKLQkJCXN0cm5jcHkoZXh0LT5uc3VmZml4LCBjcCwgKHNpemVfdClpKTsKLQkJCWV4dC0+bnN1ZmZpeFtpXSA9ICdcMCc7Ci0JCX0KLQkJZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJuaWJibGUyOiIsIHNpemVvZigibmliYmxlMjoiKSAtIDEpKSB7Ci0JCQlpZiAoZXh0ID09IE5VTEwpCi0JCQkJZ290byBza2lwOwotCQkJY3AgKz0gc2l6ZW9mKCJuaWJibGUyOiIpIC0gMTsKLQkJCWkgPSBNSU4oc3RyY3NwbihjcCwgIiBcdCIpLCBzaXplb2YoZXh0LT5uc3VmZml4MikgLSAxKTsKLQkJCXN0cm5jcHkoZXh0LT5uc3VmZml4MiwgY3AsIChzaXplX3QpaSk7Ci0JCQlleHQtPm5zdWZmaXgyW2ldID0gJ1wwJzsKLQkJfQotCQllbHNlIGlmICghc3RybmNtcChjcCwgInY2cmV2bW9kZToiLCBzaXplb2YoInY2cmV2bW9kZToiKSAtIDEpKSB7Ci0JCQljcCArPSBzaXplb2YoInY2cmV2bW9kZToiKSAtIDE7Ci0JCQkvKiAibmliYmxlIiBhbmQgImJpdHN0cmluZyIgdXNlZCB0byBiZSB2YWxpZCAqLwotCQkJaWYgKCFzdHJuY21wKGNwLCAic2luZ2xlIiwgc2l6ZW9mKCJzaW5nbGUiKSAtIDEpKSB7Ci0JCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX05PX05JQkJMRTI7Ci0JCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAiYm90aCIsIHNpemVvZigiYm90aCIpIC0gMSkpIHsKLQkJCQlzdGF0cC0+b3B0aW9ucyAmPQotCQkJCQkgflJFU19OT19OSUJCTEUyOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJLyogWFhYIC0gcHJpbnQgYSB3YXJuaW5nIGhlcmU/ICovCi0JCX0KLSAgIHNraXA6Ci0JCS8qIHNraXAgdG8gbmV4dCBydW4gb2Ygc3BhY2VzICovCi0JCXdoaWxlICgqY3AgJiYgKmNwICE9ICcgJyAmJiAqY3AgIT0gJ1x0JykKLQkJCWNwKys7Ci0JfQotfQotCi0vKiBYWFggLSBzaG91bGQgcmVhbGx5IHN1cHBvcnQgQ0lEUiB3aGljaCBtZWFucyBleHBsaWNpdCBtYXNrcyBhbHdheXMuICovCi1zdGF0aWMgdV9pbnQzMl90Ci1uZXRfbWFzayhpbikJCS8qIFhYWCAtIHNob3VsZCByZWFsbHkgdXNlIHN5c3RlbSdzIHZlcnNpb24gb2YgdGhpcyAqLwotCXN0cnVjdCBpbl9hZGRyIGluOwotewotCXJlZ2lzdGVyIHVfaW50MzJfdCBpID0gbnRvaGwoaW4uc19hZGRyKTsKLQotCWlmIChJTl9DTEFTU0EoaSkpCi0JCXJldHVybiAoaHRvbmwoSU5fQ0xBU1NBX05FVCkpOwotCWVsc2UgaWYgKElOX0NMQVNTQihpKSkKLQkJcmV0dXJuIChodG9ubChJTl9DTEFTU0JfTkVUKSk7Ci0JcmV0dXJuIChodG9ubChJTl9DTEFTU0NfTkVUKSk7Ci19Ci0KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLXN0YXRpYyBpbnQKLXJlYWxfcmFuZG9taWQodV9pbnQgKnJhbmRvbV92YWx1ZSkgewotCS8qIG9wZW4gdGhlIG5vbmJsb2NraW5nIHJhbmRvbSBkZXZpY2UsIHJldHVybmluZyAtMSBvbiBmYWlsdXJlICovCi0JaW50IHJhbmRvbV9kZXZpY2UgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7Ci0JaWYgKHJhbmRvbV9kZXZpY2UgPCAwKSB7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKiByZWFkIGZyb20gdGhlIHJhbmRvbSBkZXZpY2UsIHJldHVybmluZyAtMSBvbiBmYWlsdXJlIChvciB0b28gbWFueSByZXRyaWVzKSovCi0JdV9pbnQgcmV0cnkgPSA1OwotCWZvciAocmV0cnk7IHJldHJ5ID4gMDsgcmV0cnktLSkgewotCQlpbnQgcmV0dmFsID0gcmVhZChyYW5kb21fZGV2aWNlLCByYW5kb21fdmFsdWUsIHNpemVvZih1X2ludCkpOwotCQlpZiAocmV0dmFsID09IHNpemVvZih1X2ludCkpIHsKLQkJCSpyYW5kb21fdmFsdWUgJj0gMHhmZmZmOwotCQkJY2xvc2UocmFuZG9tX2RldmljZSk7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlIGlmICgocmV0dmFsIDwgMCkgJiYgKGVycm5vICE9IEVJTlRSKSkgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQljbG9zZShyYW5kb21fZGV2aWNlKTsKLQlyZXR1cm4gLTE7Ci19Ci0jZW5kaWYgLyogQU5EUk9JRF9DSEFOR0VTICovCi0KLXVfaW50Ci1yZXNfcmFuZG9taWQodm9pZCkgewotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotCWludCBzdGF0dXMgPSAwOwotCXVfaW50IG91dHB1dCA9IDA7Ci0Jc3RhdHVzID0gcmVhbF9yYW5kb21pZCgmb3V0cHV0KTsKLQlpZiAoc3RhdHVzICE9IC0xKSB7Ci0JCXJldHVybiBvdXRwdXQ7Ci0JfQotI2VuZGlmIC8qIEFORFJPSURfQ0hBTkdFUyAqLwotCXN0cnVjdCB0aW1ldmFsIG5vdzsKLQlnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7Ci0JcmV0dXJuICgweGZmZmYgJiAobm93LnR2X3NlYyBeIG5vdy50dl91c2VjIF4gZ2V0cGlkKCkpKTsKLX0KLQotLyoKLSAqIFRoaXMgcm91dGluZSBpcyBmb3IgY2xvc2luZyB0aGUgc29ja2V0IGlmIGEgdmlydHVhbCBjaXJjdWl0IGlzIHVzZWQgYW5kCi0gKiB0aGUgcHJvZ3JhbSB3YW50cyB0byBjbG9zZSBpdC4gIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgZW5kaG9zdGVudCgpCi0gKiB3aGljaCBleHBlY3RzIHRvIGNsb3NlIHRoZSBzb2NrZXQuCi0gKgotICogVGhpcyByb3V0aW5lIGlzIG5vdCBleHBlY3RlZCB0byBiZSB1c2VyIHZpc2libGUuCi0gKi8KLXZvaWQKLXJlc19uY2xvc2UocmVzX3N0YXRlIHN0YXRwKSB7Ci0JaW50IG5zOwotCi0JaWYgKHN0YXRwLT5fdmNzb2NrID49IDApIHsKLQkJKHZvaWQpIGNsb3NlKHN0YXRwLT5fdmNzb2NrKTsKLQkJc3RhdHAtPl92Y3NvY2sgPSAtMTsKLQkJc3RhdHAtPl9mbGFncyAmPSB+KFJFU19GX1ZDIHwgUkVTX0ZfQ09OTik7Ci0JfQotCWZvciAobnMgPSAwOyBucyA8IHN0YXRwLT5fdS5fZXh0Lm5zY291bnQ7IG5zKyspIHsKLQkJaWYgKHN0YXRwLT5fdS5fZXh0Lm5zc29ja3NbbnNdICE9IC0xKSB7Ci0JCQkodm9pZCkgY2xvc2Uoc3RhdHAtPl91Ll9leHQubnNzb2Nrc1tuc10pOwotCQkJc3RhdHAtPl91Ll9leHQubnNzb2Nrc1tuc10gPSAtMTsKLQkJfQotCX0KLX0KLQotdm9pZAotcmVzX25kZXN0cm95KHJlc19zdGF0ZSBzdGF0cCkgewotCXJlc19uY2xvc2Uoc3RhdHApOwotCWlmIChzdGF0cC0+X3UuX2V4dC5leHQgIT0gTlVMTCkKLQkJZnJlZShzdGF0cC0+X3UuX2V4dC5leHQpOwotCXN0YXRwLT5vcHRpb25zICY9IH5SRVNfSU5JVDsKLQlzdGF0cC0+X3UuX2V4dC5leHQgPSBOVUxMOwotfQotCi1jb25zdCBjaGFyICoKLXJlc19nZXRfbmliYmxlc3VmZml4KHJlc19zdGF0ZSBzdGF0cCkgewotCWlmIChzdGF0cC0+X3UuX2V4dC5leHQpCi0JCXJldHVybiAoc3RhdHAtPl91Ll9leHQuZXh0LT5uc3VmZml4KTsKLQlyZXR1cm4gKCJpcDYuYXJwYSIpOwotfQotCi1jb25zdCBjaGFyICoKLXJlc19nZXRfbmliYmxlc3VmZml4MihyZXNfc3RhdGUgc3RhdHApIHsKLQlpZiAoc3RhdHAtPl91Ll9leHQuZXh0KQotCQlyZXR1cm4gKHN0YXRwLT5fdS5fZXh0LmV4dC0+bnN1ZmZpeDIpOwotCXJldHVybiAoImlwNi5pbnQiKTsKLX0KLQotdm9pZAotcmVzX3NldHNlcnZlcnMocmVzX3N0YXRlIHN0YXRwLCBjb25zdCB1bmlvbiByZXNfc29ja2FkZHJfdW5pb24gKnNldCwgaW50IGNudCkgewotCWludCBpLCBuc2VydjsKLQlzaXplX3Qgc2l6ZTsKLQotCS8qIGNsb3NlIG9wZW4gc2VydmVycyAqLwotCXJlc19uY2xvc2Uoc3RhdHApOwotCi0JLyogY2F1c2UgcnR0IHRpbWVzIHRvIGJlIGZvcmdvdHRlbiAqLwotCXN0YXRwLT5fdS5fZXh0Lm5zY291bnQgPSAwOwotCi0JbnNlcnYgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBjbnQgJiYgbnNlcnYgPCBNQVhOUzsgaSsrKSB7Ci0JCXN3aXRjaCAoc2V0LT5zaW4uc2luX2ZhbWlseSkgewotCQljYXNlIEFGX0lORVQ6Ci0JCQlzaXplID0gc2l6ZW9mKHNldC0+c2luKTsKLQkJCWlmIChzdGF0cC0+X3UuX2V4dC5leHQpCi0JCQkJbWVtY3B5KCZzdGF0cC0+X3UuX2V4dC5leHQtPm5zYWRkcnNbbnNlcnZdLAotCQkJCQkmc2V0LT5zaW4sIHNpemUpOwotCQkJaWYgKHNpemUgPD0gc2l6ZW9mKHN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0pKQotCQkJCW1lbWNweSgmc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSwKLQkJCQkJJnNldC0+c2luLCBzaXplKTsKLSNpZmRlZiBub3RkZWYKLQkJCWVsc2UKLQkJCQlzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLnNpbl9mYW1pbHkgPSAwOwotI2VuZGlmCi0JCQluc2VydisrOwotCQkJYnJlYWs7Ci0KLSNpZmRlZiBIQVNfSU5FVDZfU1RSVUNUUwotCQljYXNlIEFGX0lORVQ2OgotCQkJc2l6ZSA9IHNpemVvZihzZXQtPnNpbjYpOwotCQkJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCkKLQkJCQltZW1jcHkoJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tuc2Vydl0sCi0JCQkJCSZzZXQtPnNpbjYsIHNpemUpOwotCQkJaWYgKHNpemUgPD0gc2l6ZW9mKHN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0pKQotCQkJCW1lbWNweSgmc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSwKLQkJCQkJJnNldC0+c2luNiwgc2l6ZSk7Ci0JCQllbHNlCi0JCQkJc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XS5zaW5fZmFtaWx5ID0gMDsKLQkJCW5zZXJ2Kys7Ci0JCQlicmVhazsKLSNlbmRpZgotCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlzZXQrKzsKLQl9Ci0Jc3RhdHAtPm5zY291bnQgPSBuc2VydjsKLQotfQotCi1pbnQKLXJlc19nZXRzZXJ2ZXJzKHJlc19zdGF0ZSBzdGF0cCwgdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uICpzZXQsIGludCBjbnQpIHsKLQlpbnQgaTsKLQlzaXplX3Qgc2l6ZTsKLQl1X2ludDE2X3QgZmFtaWx5OwotCi0JZm9yIChpID0gMDsgaSA8IHN0YXRwLT5uc2NvdW50ICYmIGkgPCBjbnQ7IGkrKykgewotCQlpZiAoc3RhdHAtPl91Ll9leHQuZXh0KQotCQkJZmFtaWx5ID0gc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW2ldLnNpbi5zaW5fZmFtaWx5OwotCQllbHNlCi0JCQlmYW1pbHkgPSBzdGF0cC0+bnNhZGRyX2xpc3RbaV0uc2luX2ZhbWlseTsKLQotCQlzd2l0Y2ggKGZhbWlseSkgewotCQljYXNlIEFGX0lORVQ6Ci0JCQlzaXplID0gc2l6ZW9mKHNldC0+c2luKTsKLQkJCWlmIChzdGF0cC0+X3UuX2V4dC5leHQpCi0JCQkJbWVtY3B5KCZzZXQtPnNpbiwKLQkJCQkgICAgICAgJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tpXSwKLQkJCQkgICAgICAgc2l6ZSk7Ci0JCQllbHNlCi0JCQkJbWVtY3B5KCZzZXQtPnNpbiwgJnN0YXRwLT5uc2FkZHJfbGlzdFtpXSwKLQkJCQkgICAgICAgc2l6ZSk7Ci0JCQlicmVhazsKLQotI2lmZGVmIEhBU19JTkVUNl9TVFJVQ1RTCi0JCWNhc2UgQUZfSU5FVDY6Ci0JCQlzaXplID0gc2l6ZW9mKHNldC0+c2luNik7Ci0JCQlpZiAoc3RhdHAtPl91Ll9leHQuZXh0KQotCQkJCW1lbWNweSgmc2V0LT5zaW42LAotCQkJCSAgICAgICAmc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW2ldLAotCQkJCSAgICAgICBzaXplKTsKLQkJCWVsc2UKLQkJCQltZW1jcHkoJnNldC0+c2luNiwgJnN0YXRwLT5uc2FkZHJfbGlzdFtpXSwKLQkJCQkgICAgICAgc2l6ZSk7Ci0JCQlicmVhazsKLSNlbmRpZgotCi0JCWRlZmF1bHQ6Ci0JCQlzZXQtPnNpbi5zaW5fZmFtaWx5ID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCXNldCsrOwotCX0KLQlyZXR1cm4gKHN0YXRwLT5uc2NvdW50KTsKLX0KLQotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotdm9pZCByZXNfc2V0aWZhY2UocmVzX3N0YXRlIHN0YXRwLCBjb25zdCBjaGFyKiBpZmFjZSkKLXsKLQlpZiAoc3RhdHAgIT0gTlVMTCkgewotCQkvLyBzZXQgaW50ZXJmYWNlCi0JCWlmIChpZmFjZSAmJiBpZmFjZVswXSAhPSAnXDAnKSB7Ci0JCQlpbnQgbGVuID0gc2l6ZW9mKHN0YXRwLT5pZmFjZSk7Ci0JCQlzdHJuY3B5KHN0YXRwLT5pZmFjZSwgaWZhY2UsIGxlbiAtIDEpOwotCQkJc3RhdHAtPmlmYWNlW2xlbiAtIDFdID0gJ1wwJzsKLQkJfSBlbHNlIHsKLQkJCXN0YXRwLT5pZmFjZVswXSA9ICdcMCc7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgcmVzX3NldG1hcmsocmVzX3N0YXRlIHN0YXRwLCBpbnQgbWFyaykKLXsKLQlpZiAoc3RhdHAgIT0gTlVMTCkgewotCQlzdGF0cC0+X21hcmsgPSBtYXJrOwotCX0KLX0KLSNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfbWtxdWVyeS5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19ta3F1ZXJ5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNGRlN2YuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19ta3F1ZXJ5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotLyoJJE5ldEJTRDogcmVzX21rcXVlcnkuYyx2IDEuNiAyMDA2LzAxLzI0IDE3OjQwOjMyIGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAocXVlcnkgaWQgcmFuZG9taXphdGlvbikKLSAqIENvcHlyaWdodCAoYykgMTk4NSwgMTk5MwotICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAotICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKLSAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAotICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAotICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCi0gKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLSAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCi0gKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLgotICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWZkZWYgbm90ZGVmCi1zdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX21rcXVlcnkuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX21rcXVlcnkuYyx2IDEuMS4yLjIuNC4yIDIwMDQvMDMvMTYgMTI6MzQ6MTggbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiByZXNfbWtxdWVyeS5jLHYgMS42IDIwMDYvMDEvMjQgMTc6NDA6MzIgY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLSNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2Vsc2UKLSNpbmNsdWRlIDxyZXNvbHYuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8qIE9wdGlvbnMuICBMZWF2ZSB0aGVtIG9uLiAqLwotI2lmbmRlZiBERUJVRwotI2RlZmluZSBERUJVRwotI2VuZGlmCi0KLSNpZm5kZWYgbGludAotI2RlZmluZSBVTlVTRUQoYSkJKHZvaWQpJmEKLSNlbHNlCi0jZGVmaW5lIFVOVVNFRChhKQlhID0gYQotI2VuZGlmCi0KLWV4dGVybiBjb25zdCBjaGFyICpfcmVzX29wY29kZXNbXTsKLQotLyoKLSAqIEZvcm0gYWxsIHR5cGVzIG9mIHF1ZXJpZXMuCi0gKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSByZXN1bHQgb3IgLTEuCi0gKi8KLWludAotcmVzX25ta3F1ZXJ5KHJlc19zdGF0ZSBzdGF0cCwKLQkgICAgIGludCBvcCwJCQkvKiBvcGNvZGUgb2YgcXVlcnkgKi8KLQkgICAgIGNvbnN0IGNoYXIgKmRuYW1lLAkJLyogZG9tYWluIG5hbWUgKi8KLQkgICAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCi0JICAgICBjb25zdCB1X2NoYXIgKmRhdGEsCS8qIHJlc291cmNlIHJlY29yZCBkYXRhICovCi0JICAgICBpbnQgZGF0YWxlbiwJCS8qIGxlbmd0aCBvZiBkYXRhICovCi0JICAgICBjb25zdCB1X2NoYXIgKm5ld3JyX2luLAkvKiBuZXcgcnIgZm9yIG1vZGlmeSBvciBhcHBlbmQgKi8KLQkgICAgIHVfY2hhciAqYnVmLAkJLyogYnVmZmVyIHRvIHB1dCBxdWVyeSAqLwotCSAgICAgaW50IGJ1ZmxlbikJCS8qIHNpemUgb2YgYnVmZmVyICovCi17Ci0JcmVnaXN0ZXIgSEVBREVSICpocDsKLQlyZWdpc3RlciB1X2NoYXIgKmNwLCAqZXA7Ci0JcmVnaXN0ZXIgaW50IG47Ci0JdV9jaGFyICpkbnB0cnNbMjBdLCAqKmRwcCwgKipsYXN0ZG5wdHI7Ci0KLQlVTlVTRUQobmV3cnJfaW4pOwotCi0jaWZkZWYgREVCVUcKLQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCi0JCXByaW50ZigiOzsgcmVzX25ta3F1ZXJ5KCVzLCAlcywgJXMsICVzKVxuIiwKLQkJICAgICAgIF9yZXNfb3Bjb2Rlc1tvcF0sIGRuYW1lLCBwX2NsYXNzKGNsYXNzKSwgcF90eXBlKHR5cGUpKTsKLSNlbmRpZgotCS8qCi0JICogSW5pdGlhbGl6ZSBoZWFkZXIgZmllbGRzLgotCSAqLwotCWlmICgoYnVmID09IE5VTEwpIHx8IChidWZsZW4gPCBIRklYRURTWikpCi0JCXJldHVybiAoLTEpOwotCW1lbXNldChidWYsIDAsIEhGSVhFRFNaKTsKLQlocCA9IChIRUFERVIgKikodm9pZCAqKWJ1ZjsKLQlocC0+aWQgPSBodG9ucyhyZXNfcmFuZG9taWQoKSk7Ci0JaHAtPm9wY29kZSA9IG9wOwotCWhwLT5yZCA9IChzdGF0cC0+b3B0aW9ucyAmIFJFU19SRUNVUlNFKSAhPSAwVTsKLQlocC0+cmNvZGUgPSBOT0VSUk9SOwotCWNwID0gYnVmICsgSEZJWEVEU1o7Ci0JZXAgPSBidWYgKyBidWZsZW47Ci0JZHBwID0gZG5wdHJzOwotCSpkcHArKyA9IGJ1ZjsKLQkqZHBwKysgPSBOVUxMOwotCWxhc3RkbnB0ciA9IGRucHRycyArIHNpemVvZiBkbnB0cnMgLyBzaXplb2YgZG5wdHJzWzBdOwotCS8qCi0JICogcGVyZm9ybSBvcGNvZGUgc3BlY2lmaWMgcHJvY2Vzc2luZwotCSAqLwotCXN3aXRjaCAob3ApIHsKLQljYXNlIFFVRVJZOgkvKkZBTExUSFJPVUdIKi8KLQljYXNlIE5TX05PVElGWV9PUDoKLQkJaWYgKGVwIC0gY3AgPCBRRklYRURTWikKLQkJCXJldHVybiAoLTEpOwotCQlpZiAoKG4gPSBkbl9jb21wKGRuYW1lLCBjcCwgZXAgLSBjcCAtIFFGSVhFRFNaLCBkbnB0cnMsCi0JCSAgICBsYXN0ZG5wdHIpKSA8IDApCi0JCQlyZXR1cm4gKC0xKTsKLQkJY3AgKz0gbjsKLQkJbnNfcHV0MTYodHlwZSwgY3ApOwotCQljcCArPSBJTlQxNlNaOwotCQluc19wdXQxNihjbGFzcywgY3ApOwotCQljcCArPSBJTlQxNlNaOwotCQlocC0+cWRjb3VudCA9IGh0b25zKDEpOwotCQlpZiAob3AgPT0gUVVFUlkgfHwgZGF0YSA9PSBOVUxMKQotCQkJYnJlYWs7Ci0JCS8qCi0JCSAqIE1ha2UgYW4gYWRkaXRpb25hbCByZWNvcmQgZm9yIGNvbXBsZXRpb24gZG9tYWluLgotCQkgKi8KLQkJaWYgKChlcCAtIGNwKSA8IFJSRklYRURTWikKLQkJCXJldHVybiAoLTEpOwotCQluID0gZG5fY29tcCgoY29uc3QgY2hhciAqKWRhdGEsIGNwLCBlcCAtIGNwIC0gUlJGSVhFRFNaLAotCQkJICAgIGRucHRycywgbGFzdGRucHRyKTsKLQkJaWYgKG4gPCAwKQotCQkJcmV0dXJuICgtMSk7Ci0JCWNwICs9IG47Ci0JCW5zX3B1dDE2KFRfTlVMTCwgY3ApOwotCQljcCArPSBJTlQxNlNaOwotCQluc19wdXQxNihjbGFzcywgY3ApOwotCQljcCArPSBJTlQxNlNaOwotCQluc19wdXQzMigwLCBjcCk7Ci0JCWNwICs9IElOVDMyU1o7Ci0JCW5zX3B1dDE2KDAsIGNwKTsKLQkJY3AgKz0gSU5UMTZTWjsKLQkJaHAtPmFyY291bnQgPSBodG9ucygxKTsKLQkJYnJlYWs7Ci0KLQljYXNlIElRVUVSWToKLQkJLyoKLQkJICogSW5pdGlhbGl6ZSBhbnN3ZXIgc2VjdGlvbgotCQkgKi8KLQkJaWYgKGVwIC0gY3AgPCAxICsgUlJGSVhFRFNaICsgZGF0YWxlbikKLQkJCXJldHVybiAoLTEpOwotCQkqY3ArKyA9ICdcMCc7CS8qIG5vIGRvbWFpbiBuYW1lICovCi0JCW5zX3B1dDE2KHR5cGUsIGNwKTsKLQkJY3AgKz0gSU5UMTZTWjsKLQkJbnNfcHV0MTYoY2xhc3MsIGNwKTsKLQkJY3AgKz0gSU5UMTZTWjsKLQkJbnNfcHV0MzIoMCwgY3ApOwotCQljcCArPSBJTlQzMlNaOwotCQluc19wdXQxNihkYXRhbGVuLCBjcCk7Ci0JCWNwICs9IElOVDE2U1o7Ci0JCWlmIChkYXRhbGVuKSB7Ci0JCQltZW1jcHkoY3AsIGRhdGEsIChzaXplX3QpZGF0YWxlbik7Ci0JCQljcCArPSBkYXRhbGVuOwotCQl9Ci0JCWhwLT5hbmNvdW50ID0gaHRvbnMoMSk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXJldHVybiAoY3AgLSBidWYpOwotfQotCi0jaWZkZWYgUkVTX1VTRV9FRE5TMAotLyogYXR0YWNoIE9QVCBwc2V1ZG8tUlIsIGFzIGRvY3VtZW50ZWQgaW4gUkZDMjY3MSAoRUROUzApLiAqLwotI2lmbmRlZiBUX09QVAotI2RlZmluZSBUX09QVAk0MQotI2VuZGlmCi0KLWludAotcmVzX25vcHQocmVzX3N0YXRlIHN0YXRwLAotCSBpbnQgbjAsCQkvKiBjdXJyZW50IG9mZnNldCBpbiBidWZmZXIgKi8KLQkgdV9jaGFyICpidWYsCQkvKiBidWZmZXIgdG8gcHV0IHF1ZXJ5ICovCi0JIGludCBidWZsZW4sCQkvKiBzaXplIG9mIGJ1ZmZlciAqLwotCSBpbnQgYW5zbGVuKQkJLyogVURQIGFuc3dlciBidWZmZXIgc2l6ZSAqLwotewotCXJlZ2lzdGVyIEhFQURFUiAqaHA7Ci0JcmVnaXN0ZXIgdV9jaGFyICpjcCwgKmVwOwotCXVfaW50MTZfdCBmbGFncyA9IDA7Ci0KLSNpZmRlZiBERUJVRwotCWlmICgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpICE9IDBVKQotCQlwcmludGYoIjs7IHJlc19ub3B0KClcbiIpOwotI2VuZGlmCi0KLQlocCA9IChIRUFERVIgKikodm9pZCAqKWJ1ZjsKLQljcCA9IGJ1ZiArIG4wOwotCWVwID0gYnVmICsgYnVmbGVuOwotCi0JaWYgKChlcCAtIGNwKSA8IDEgKyBSUkZJWEVEU1opCi0JCXJldHVybiAoLTEpOwotCi0JKmNwKysgPSAwOwkvKiAiLiIgKi8KLQotCW5zX3B1dDE2KFRfT1BULCBjcCk7CS8qIFRZUEUgKi8KLQljcCArPSBJTlQxNlNaOwotCW5zX3B1dDE2KGFuc2xlbiAmIDB4ZmZmZiwgY3ApOwkvKiBDTEFTUyA9IFVEUCBwYXlsb2FkIHNpemUgKi8KLQljcCArPSBJTlQxNlNaOwotCSpjcCsrID0gTk9FUlJPUjsJLyogZXh0ZW5kZWQgUkNPREUgKi8KLQkqY3ArKyA9IDA7CQkvKiBFRE5TIHZlcnNpb24gKi8KLQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfVVNFX0ROU1NFQykgewotI2lmZGVmIERFQlVHCi0JCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKLQkJCXByaW50ZigiOzsgcmVzX29wdCgpLi4uIEVORFMwIEROU1NFQ1xuIik7Ci0jZW5kaWYKLQkJZmxhZ3MgfD0gTlNfT1BUX0ROU1NFQ19PSzsKLQl9Ci0JbnNfcHV0MTYoZmxhZ3MsIGNwKTsKLQljcCArPSBJTlQxNlNaOwotCW5zX3B1dDE2KDAsIGNwKTsJLyogUkRMRU4gKi8KLQljcCArPSBJTlQxNlNaOwotCWhwLT5hcmNvdW50ID0gaHRvbnMobnRvaHMoaHAtPmFyY291bnQpICsgMSk7Ci0KLQlyZXR1cm4gKGNwIC0gYnVmKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19xdWVyeS5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19xdWVyeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzFlODNjLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfcXVlcnkuYworKysgL2Rldi9udWxsCkBAIC0xLDQyNCArMCwwIEBACi0vKgkkTmV0QlNEOiByZXNfcXVlcnkuYyx2IDEuNyAyMDA2LzAxLzI0IDE3OjQxOjI1IGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMKLSAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKLSAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCi0gKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKLSAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKLSAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAotICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCi0gKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUwotICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCi0gKiBTT0ZUV0FSRS4KLSAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmZGVmIG5vdGRlZgotc3RhdGljIGNvbnN0IGNoYXIgc2Njc2lkW10gPSAiQCgjKXJlc19xdWVyeS5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci1zdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiByZXNfcXVlcnkuYyx2IDEuMi4yLjMuNC4yIDIwMDQvMDMvMTYgMTI6MzQ6MTkgbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiByZXNfcXVlcnkuYyx2IDEuNyAyMDA2LzAxLzI0IDE3OjQxOjI1IGNocmlzdG9zIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxuZXRkYi5oPgotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCi0jZWxzZQotI2luY2x1ZGUgPHJlc29sdi5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2RlZmluZSBESVNBQkxFX0hPU1RfQUxJQVMgMQotCi0vKiBPcHRpb25zLiAgTGVhdmUgdGhlbSBvbi4gKi8KLSNpZm5kZWYgREVCVUcKLSNkZWZpbmUgREVCVUcKLSNlbmRpZgotCi0jaWYgUEFDS0VUU1ogPiAxMDI0Ci0jZGVmaW5lIE1BWFBBQ0tFVAlQQUNLRVRTWgotI2Vsc2UKLSNkZWZpbmUgTUFYUEFDS0VUCTEwMjQKLSNlbmRpZgotCi0vKgotICogRm9ybXVsYXRlIGEgbm9ybWFsIHF1ZXJ5LCBzZW5kLCBhbmQgYXdhaXQgYW5zd2VyLgotICogUmV0dXJuZWQgYW5zd2VyIGlzIHBsYWNlZCBpbiBzdXBwbGllZCBidWZmZXIgImFuc3dlciIuCi0gKiBQZXJmb3JtIHByZWxpbWluYXJ5IGNoZWNrIG9mIGFuc3dlciwgcmV0dXJuaW5nIHN1Y2Nlc3Mgb25seQotICogaWYgbm8gZXJyb3IgaXMgaW5kaWNhdGVkIGFuZCB0aGUgYW5zd2VyIGNvdW50IGlzIG5vbnplcm8uCi0gKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHJlc3BvbnNlIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgotICogRXJyb3IgbnVtYmVyIGlzIGxlZnQgaW4gSF9FUlJOTy4KLSAqCi0gKiBDYWxsZXIgbXVzdCBwYXJzZSBhbnN3ZXIgYW5kIGRldGVybWluZSB3aGV0aGVyIGl0IGFuc3dlcnMgdGhlIHF1ZXN0aW9uLgotICovCi1pbnQKLXJlc19ucXVlcnkocmVzX3N0YXRlIHN0YXRwLAotCSAgIGNvbnN0IGNoYXIgKm5hbWUsCS8qIGRvbWFpbiBuYW1lICovCi0JICAgaW50IGNsYXNzLCBpbnQgdHlwZSwJLyogY2xhc3MgYW5kIHR5cGUgb2YgcXVlcnkgKi8KLQkgICB1X2NoYXIgKmFuc3dlciwJLyogYnVmZmVyIHRvIHB1dCBhbnN3ZXIgKi8KLQkgICBpbnQgYW5zbGVuKQkJLyogc2l6ZSBvZiBhbnN3ZXIgYnVmZmVyICovCi17Ci0JdV9jaGFyIGJ1ZltNQVhQQUNLRVRdOwotCUhFQURFUiAqaHAgPSAoSEVBREVSICopKHZvaWQgKilhbnN3ZXI7Ci0JaW50IG47Ci0JdV9pbnQgb2ZsYWdzOwotCi0Jb2ZsYWdzID0gc3RhdHAtPl9mbGFnczsKLQotYWdhaW46Ci0JaHAtPnJjb2RlID0gTk9FUlJPUjsJLyogZGVmYXVsdCAqLwotCi0jaWZkZWYgREVCVUcKLQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCi0JCXByaW50ZigiOzsgcmVzX3F1ZXJ5KCVzLCAlZCwgJWQpXG4iLCBuYW1lLCBjbGFzcywgdHlwZSk7Ci0jZW5kaWYKLQotCW4gPSByZXNfbm1rcXVlcnkoc3RhdHAsIFFVRVJZLCBuYW1lLCBjbGFzcywgdHlwZSwgTlVMTCwgMCwgTlVMTCwKLQkJCSBidWYsIHNpemVvZihidWYpKTsKLSNpZmRlZiBSRVNfVVNFX0VETlMwCi0JaWYgKG4gPiAwICYmIChzdGF0cC0+X2ZsYWdzICYgUkVTX0ZfRUROUzBFUlIpID09IDAgJiYKLQkgICAgKHN0YXRwLT5vcHRpb25zICYgKFJFU19VU0VfRUROUzB8UkVTX1VTRV9ETlNTRUMpKSAhPSAwVSkKLQkJbiA9IHJlc19ub3B0KHN0YXRwLCBuLCBidWYsIHNpemVvZihidWYpLCBhbnNsZW4pOwotI2VuZGlmCi0JaWYgKG4gPD0gMCkgewotI2lmZGVmIERFQlVHCi0JCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKLQkJCXByaW50ZigiOzsgcmVzX3F1ZXJ5OiBta3F1ZXJ5IGZhaWxlZFxuIik7Ci0jZW5kaWYKLQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBOT19SRUNPVkVSWSk7Ci0JCXJldHVybiAobik7Ci0JfQotCW4gPSByZXNfbnNlbmQoc3RhdHAsIGJ1ZiwgbiwgYW5zd2VyLCBhbnNsZW4pOwotCWlmIChuIDwgMCkgewotI2lmZGVmIFJFU19VU0VfRUROUzAKLQkJLyogaWYgdGhlIHF1ZXJ5IGNob2tlZCB3aXRoIEVETlMwLCByZXRyeSB3aXRob3V0IEVETlMwICovCi0JCWlmICgoc3RhdHAtPm9wdGlvbnMgJiAoUkVTX1VTRV9FRE5TMHxSRVNfVVNFX0ROU1NFQykpICE9IDBVICYmCi0JCSAgICAoKG9mbGFncyBeIHN0YXRwLT5fZmxhZ3MpICYgUkVTX0ZfRUROUzBFUlIpICE9IDApIHsKLQkJCXN0YXRwLT5fZmxhZ3MgfD0gUkVTX0ZfRUROUzBFUlI7Ci0JCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCi0JCQkJcHJpbnRmKCI7OyByZXNfbnF1ZXJ5OiByZXRyeSB3aXRob3V0IEVETlMwXG4iKTsKLQkJCWdvdG8gYWdhaW47Ci0JCX0KLSNlbmRpZgotI2lmZGVmIERFQlVHCi0JCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKLQkJCXByaW50ZigiOzsgcmVzX3F1ZXJ5OiBzZW5kIGVycm9yXG4iKTsKLSNlbmRpZgotCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIFRSWV9BR0FJTik7Ci0JCXJldHVybiAobik7Ci0JfQotCi0JaWYgKGhwLT5yY29kZSAhPSBOT0VSUk9SIHx8IG50b2hzKGhwLT5hbmNvdW50KSA9PSAwKSB7Ci0jaWZkZWYgREVCVUcKLQkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQotCQkJcHJpbnRmKCI7OyByY29kZSA9ICglcyksIGNvdW50cyA9IGFuOiVkIG5zOiVkIGFyOiVkXG4iLAotCQkJICAgICAgIHBfcmNvZGUoaHAtPnJjb2RlKSwKLQkJCSAgICAgICBudG9ocyhocC0+YW5jb3VudCksCi0JCQkgICAgICAgbnRvaHMoaHAtPm5zY291bnQpLAotCQkJICAgICAgIG50b2hzKGhwLT5hcmNvdW50KSk7Ci0jZW5kaWYKLQkJc3dpdGNoIChocC0+cmNvZGUpIHsKLQkJY2FzZSBOWERPTUFJTjoKLQkJCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgSE9TVF9OT1RfRk9VTkQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0VSVkZBSUw6Ci0JCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIFRSWV9BR0FJTik7Ci0JCQlicmVhazsKLQkJY2FzZSBOT0VSUk9SOgotCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBOT19EQVRBKTsKLQkJCWJyZWFrOwotCQljYXNlIEZPUk1FUlI6Ci0JCWNhc2UgTk9USU1QOgotCQljYXNlIFJFRlVTRUQ6Ci0JCWRlZmF1bHQ6Ci0JCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIE5PX1JFQ09WRVJZKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJldHVybiAoLTEpOwotCX0KLQlyZXR1cm4gKG4pOwotfQotCi0vKgotICogRm9ybXVsYXRlIGEgbm9ybWFsIHF1ZXJ5LCBzZW5kLCBhbmQgcmV0cmlldmUgYW5zd2VyIGluIHN1cHBsaWVkIGJ1ZmZlci4KLSAqIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgcmVzcG9uc2Ugb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCi0gKiBJZiBlbmFibGVkLCBpbXBsZW1lbnQgc2VhcmNoIHJ1bGVzIHVudGlsIGFuc3dlciBvciB1bnJlY292ZXJhYmxlIGZhaWx1cmUKLSAqIGlzIGRldGVjdGVkLiAgRXJyb3IgY29kZSwgaWYgYW55LCBpcyBsZWZ0IGluIEhfRVJSTk8uCi0gKi8KLWludAotcmVzX25zZWFyY2gocmVzX3N0YXRlIHN0YXRwLAotCSAgICBjb25zdCBjaGFyICpuYW1lLAkvKiBkb21haW4gbmFtZSAqLwotCSAgICBpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLwotCSAgICB1X2NoYXIgKmFuc3dlciwJLyogYnVmZmVyIHRvIHB1dCBhbnN3ZXIgKi8KLQkgICAgaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyICovCi17Ci0JY29uc3QgY2hhciAqY3AsICogY29uc3QgKmRvbWFpbjsKLQlIRUFERVIgKmhwID0gKEhFQURFUiAqKSh2b2lkICopYW5zd2VyOwotCWNoYXIgdG1wW05TX01BWEROQU1FXTsKLQl1X2ludCBkb3RzOwotCWludCB0cmFpbGluZ19kb3QsIHJldCwgc2F2ZWRfaGVycm5vOwotCWludCBnb3Rfbm9kYXRhID0gMCwgZ290X3NlcnZmYWlsID0gMCwgcm9vdF9vbl9saXN0ID0gMDsKLQlpbnQgdHJpZWRfYXNfaXMgPSAwOwotCWludCBzZWFyY2hlZCA9IDA7Ci0KLQllcnJubyA9IDA7Ci0JUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBIT1NUX05PVF9GT1VORCk7ICAvKiBUcnVlIGlmIHdlIG5ldmVyIHF1ZXJ5LiAqLwotCi0JZG90cyA9IDA7Ci0JZm9yIChjcCA9IG5hbWU7ICpjcCAhPSAnXDAnOyBjcCsrKQotCQlkb3RzICs9ICgqY3AgPT0gJy4nKTsKLQl0cmFpbGluZ19kb3QgPSAwOwotCWlmIChjcCA+IG5hbWUgJiYgKi0tY3AgPT0gJy4nKQotCQl0cmFpbGluZ19kb3QrKzsKLQotCS8qIElmIHRoZXJlIGFyZW4ndCBhbnkgZG90cywgaXQgY291bGQgYmUgYSB1c2VyLWxldmVsIGFsaWFzLiAqLwotCWlmICghZG90cyAmJiAoY3AgPSByZXNfaG9zdGFsaWFzKHN0YXRwLCBuYW1lLCB0bXAsIHNpemVvZiB0bXApKSE9IE5VTEwpCi0JCXJldHVybiAocmVzX25xdWVyeShzdGF0cCwgY3AsIGNsYXNzLCB0eXBlLCBhbnN3ZXIsIGFuc2xlbikpOwotCi0JLyoKLQkgKiBJZiB0aGVyZSBhcmUgZW5vdWdoIGRvdHMgaW4gdGhlIG5hbWUsIGxldCdzIGp1c3QgZ2l2ZSBpdCBhCi0JICogdHJ5ICdhcyBpcycuIFRoZSB0aHJlc2hvbGQgY2FuIGJlIHNldCB3aXRoIHRoZSAibmRvdHMiIG9wdGlvbi4KLQkgKiBBbHNvLCBxdWVyeSAnYXMgaXMnLCBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nIGRvdCBpbiB0aGUgbmFtZS4KLQkgKi8KLQlzYXZlZF9oZXJybm8gPSAtMTsKLQlpZiAoZG90cyA+PSBzdGF0cC0+bmRvdHMgfHwgdHJhaWxpbmdfZG90KSB7Ci0JCXJldCA9IHJlc19ucXVlcnlkb21haW4oc3RhdHAsIG5hbWUsIE5VTEwsIGNsYXNzLCB0eXBlLAotCQkJCQkgYW5zd2VyLCBhbnNsZW4pOwotCQlpZiAocmV0ID4gMCB8fCB0cmFpbGluZ19kb3QpCi0JCQlyZXR1cm4gKHJldCk7Ci0JCXNhdmVkX2hlcnJubyA9IHN0YXRwLT5yZXNfaF9lcnJubzsKLQkJdHJpZWRfYXNfaXMrKzsKLQl9Ci0KLQkvKgotCSAqIFdlIGRvIGF0IGxlYXN0IG9uZSBsZXZlbCBvZiBzZWFyY2ggaWYKLQkgKgktIHRoZXJlIGlzIG5vIGRvdCBhbmQgUkVTX0RFRk5BTUUgaXMgc2V0LCBvcgotCSAqCS0gdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGRvdCwgdGhlcmUgaXMgbm8gdHJhaWxpbmcgZG90LAotCSAqCSAgYW5kIFJFU19ETlNSQ0ggaXMgc2V0LgotCSAqLwotCWlmICgoIWRvdHMgJiYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFRk5BTUVTKSAhPSAwVSkgfHwKLQkgICAgKGRvdHMgJiYgIXRyYWlsaW5nX2RvdCAmJiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfRE5TUkNIKSAhPSAwVSkpIHsKLQkJaW50IGRvbmUgPSAwOwotCi0JCS8qIFVuZm9ydHVuYXRlbHkgd2UgbmVlZCB0byBsb2FkIGludGVyZmFjZSBpbmZvCi0JCSAqIChkbnMgc2VydmVycywgc2VhcmNoIGRvbWFpbnMpIGJlZm9yZQotCQkgKiB0aGUgZG9tYWluIHN0dWZmIGlzIHRyaWVkLiAgV2lsbCBoYXZlIGEgYmV0dGVyCi0JCSAqIGZpeCBhZnRlciB0aHJlYWQgcG9vbHMgYXJlIHVzZWQgYXMgdGhpcyB3aWxsCi0JCSAqIGJlIGxvYWRlZCBvbmNlIGZvciB0aGUgdGhyZWFkIGluc3RlYWQgb2YgZWFjaAotCQkgKiB0aW1lIGEgcXVlcnkgaXMgdHJpZWQuCi0JCSAqLwotCQlfcmVzb2x2X3BvcHVsYXRlX3Jlc19mb3JfaWZhY2Uoc3RhdHApOwotCi0JCWZvciAoZG9tYWluID0gKGNvbnN0IGNoYXIgKiBjb25zdCAqKXN0YXRwLT5kbnNyY2g7Ci0JCSAgICAgKmRvbWFpbiAmJiAhZG9uZTsKLQkJICAgICBkb21haW4rKykgewotCQkJc2VhcmNoZWQgPSAxOwotCi0JCQlpZiAoZG9tYWluWzBdWzBdID09ICdcMCcgfHwKLQkJCSAgICAoZG9tYWluWzBdWzBdID09ICcuJyAmJiBkb21haW5bMF1bMV0gPT0gJ1wwJykpCi0JCQkJcm9vdF9vbl9saXN0Kys7Ci0KLQkJCXJldCA9IHJlc19ucXVlcnlkb21haW4oc3RhdHAsIG5hbWUsICpkb21haW4sCi0JCQkJCSAgICAgICBjbGFzcywgdHlwZSwKLQkJCQkJICAgICAgIGFuc3dlciwgYW5zbGVuKTsKLQkJCWlmIChyZXQgPiAwKQotCQkJCXJldHVybiAocmV0KTsKLQotCQkJLyoKLQkJCSAqIElmIG5vIHNlcnZlciBwcmVzZW50LCBnaXZlIHVwLgotCQkJICogSWYgbmFtZSBpc24ndCBmb3VuZCBpbiB0aGlzIGRvbWFpbiwKLQkJCSAqIGtlZXAgdHJ5aW5nIGhpZ2hlciBkb21haW5zIGluIHRoZSBzZWFyY2ggbGlzdAotCQkJICogKGlmIHRoYXQncyBlbmFibGVkKS4KLQkJCSAqIE9uIGEgTk9fREFUQSBlcnJvciwga2VlcCB0cnlpbmcsIG90aGVyd2lzZQotCQkJICogYSB3aWxkY2FyZCBlbnRyeSBvZiBhbm90aGVyIHR5cGUgY291bGQga2VlcCB1cwotCQkJICogZnJvbSBmaW5kaW5nIHRoaXMgZW50cnkgaGlnaGVyIGluIHRoZSBkb21haW4uCi0JCQkgKiBJZiB3ZSBnZXQgc29tZSBvdGhlciBlcnJvciAobmVnYXRpdmUgYW5zd2VyIG9yCi0JCQkgKiBzZXJ2ZXIgZmFpbHVyZSksIHRoZW4gc3RvcCBzZWFyY2hpbmcgdXAsCi0JCQkgKiBidXQgdHJ5IHRoZSBpbnB1dCBuYW1lIGJlbG93IGluIGNhc2UgaXQncwotCQkJICogZnVsbHktcXVhbGlmaWVkLgotCQkJICovCi0JCQlpZiAoZXJybm8gPT0gRUNPTk5SRUZVU0VEKSB7Ci0JCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBUUllfQUdBSU4pOwotCQkJCXJldHVybiAoLTEpOwotCQkJfQotCi0JCQlzd2l0Y2ggKHN0YXRwLT5yZXNfaF9lcnJubykgewotCQkJY2FzZSBOT19EQVRBOgotCQkJCWdvdF9ub2RhdGErKzsKLQkJCQkvKiBGQUxMVEhST1VHSCAqLwotCQkJY2FzZSBIT1NUX05PVF9GT1VORDoKLQkJCQkvKiBrZWVwIHRyeWluZyAqLwotCQkJCWJyZWFrOwotCQkJY2FzZSBUUllfQUdBSU46Ci0JCQkJaWYgKGhwLT5yY29kZSA9PSBTRVJWRkFJTCkgewotCQkJCQkvKiB0cnkgbmV4dCBzZWFyY2ggZWxlbWVudCwgaWYgYW55ICovCi0JCQkJCWdvdF9zZXJ2ZmFpbCsrOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJLyogRkFMTFRIUk9VR0ggKi8KLQkJCWRlZmF1bHQ6Ci0JCQkJLyogYW55dGhpbmcgZWxzZSBpbXBsaWVzIHRoYXQgd2UncmUgZG9uZSAqLwotCQkJCWRvbmUrKzsKLQkJCX0KLQotCQkJLyogaWYgd2UgZ290IGhlcmUgZm9yIHNvbWUgcmVhc29uIG90aGVyIHRoYW4gRE5TUkNILAotCQkJICogd2Ugb25seSB3YW50ZWQgb25lIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCwgc28gc3RvcC4KLQkJCSAqLwotCQkJaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ETlNSQ0gpID09IDBVKQotCQkJCWRvbmUrKzsKLQkJfQotCX0KLQotCS8qCi0JICogSWYgdGhlIHF1ZXJ5IGhhcyBub3QgYWxyZWFkeSBiZWVuIHRyaWVkIGFzIGlzIHRoZW4gdHJ5IGl0Ci0JICogdW5sZXNzIFJFU19OT1RMRFFVRVJZIGlzIHNldCBhbmQgdGhlcmUgd2VyZSBubyBkb3RzLgotCSAqLwotCWlmICgoZG90cyB8fCAhc2VhcmNoZWQgfHwgKHN0YXRwLT5vcHRpb25zICYgUkVTX05PVExEUVVFUlkpID09IDBVKSAmJgotCSAgICAhKHRyaWVkX2FzX2lzIHx8IHJvb3Rfb25fbGlzdCkpIHsKLQkJcmV0ID0gcmVzX25xdWVyeWRvbWFpbihzdGF0cCwgbmFtZSwgTlVMTCwgY2xhc3MsIHR5cGUsCi0JCQkJICAgICAgIGFuc3dlciwgYW5zbGVuKTsKLQkJaWYgKHJldCA+IDApCi0JCQlyZXR1cm4gKHJldCk7Ci0JfQotCi0JLyogaWYgd2UgZ290IGhlcmUsIHdlIGRpZG4ndCBzYXRpc2Z5IHRoZSBzZWFyY2guCi0JICogaWYgd2UgZGlkIGFuIGluaXRpYWwgZnVsbCBxdWVyeSwgcmV0dXJuIHRoYXQgcXVlcnkncyBIX0VSUk5PCi0JICogKG5vdGUgdGhhdCB3ZSB3b3VsZG4ndCBiZSBoZXJlIGlmIHRoYXQgcXVlcnkgaGFkIHN1Y2NlZWRlZCkuCi0JICogZWxzZSBpZiB3ZSBldmVyIGdvdCBhIG5vZGF0YSwgc2VuZCB0aGF0IGJhY2sgYXMgdGhlIHJlYXNvbi4KLQkgKiBlbHNlIHNlbmQgYmFjayBtZWFuaW5nbGVzcyBIX0VSUk5PLCB0aGF0IGJlaW5nIHRoZSBvbmUgZnJvbQotCSAqIHRoZSBsYXN0IEROU1JDSCB3ZSBkaWQuCi0JICovCi0JaWYgKHNhdmVkX2hlcnJubyAhPSAtMSkKLQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBzYXZlZF9oZXJybm8pOwotCWVsc2UgaWYgKGdvdF9ub2RhdGEpCi0JCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgTk9fREFUQSk7Ci0JZWxzZSBpZiAoZ290X3NlcnZmYWlsKQotCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIFRSWV9BR0FJTik7Ci0JcmV0dXJuICgtMSk7Ci19Ci0KLS8qCi0gKiBQZXJmb3JtIGEgY2FsbCBvbiByZXNfcXVlcnkgb24gdGhlIGNvbmNhdGVuYXRpb24gb2YgbmFtZSBhbmQgZG9tYWluLAotICogcmVtb3ZpbmcgYSB0cmFpbGluZyBkb3QgZnJvbSBuYW1lIGlmIGRvbWFpbiBpcyBOVUxMLgotICovCi1pbnQKLXJlc19ucXVlcnlkb21haW4ocmVzX3N0YXRlIHN0YXRwLAotCSAgICBjb25zdCBjaGFyICpuYW1lLAotCSAgICBjb25zdCBjaGFyICpkb21haW4sCi0JICAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCi0JICAgIHVfY2hhciAqYW5zd2VyLAkJLyogYnVmZmVyIHRvIHB1dCBhbnN3ZXIgKi8KLQkgICAgaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyICovCi17Ci0JY2hhciBuYnVmW01BWEROQU1FXTsKLQljb25zdCBjaGFyICpsb25nbmFtZSA9IG5idWY7Ci0JaW50IG4sIGQ7Ci0KLSNpZmRlZiBERUJVRwotCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKLQkJcHJpbnRmKCI7OyByZXNfbnF1ZXJ5ZG9tYWluKCVzLCAlcywgJWQsICVkKVxuIiwKLQkJICAgICAgIG5hbWUsIGRvbWFpbj9kb21haW46IjxOaWw+IiwgY2xhc3MsIHR5cGUpOwotI2VuZGlmCi0JaWYgKGRvbWFpbiA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIENoZWNrIGZvciB0cmFpbGluZyAnLic7Ci0JCSAqIGNvcHkgd2l0aG91dCAnLicgaWYgcHJlc2VudC4KLQkJICovCi0JCW4gPSBzdHJsZW4obmFtZSk7Ci0JCWlmIChuID49IE1BWEROQU1FKSB7Ci0JCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIE5PX1JFQ09WRVJZKTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCW4tLTsKLQkJaWYgKG4gPj0gMCAmJiBuYW1lW25dID09ICcuJykgewotCQkJc3RybmNweShuYnVmLCBuYW1lLCAoc2l6ZV90KW4pOwotCQkJbmJ1ZltuXSA9ICdcMCc7Ci0JCX0gZWxzZQotCQkJbG9uZ25hbWUgPSBuYW1lOwotCX0gZWxzZSB7Ci0JCW4gPSBzdHJsZW4obmFtZSk7Ci0JCWQgPSBzdHJsZW4oZG9tYWluKTsKLQkJaWYgKG4gKyBkICsgMSA+PSBNQVhETkFNRSkgewotCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBOT19SRUNPVkVSWSk7Ci0JCQlyZXR1cm4gKC0xKTsKLQkJfQotCQlzcHJpbnRmKG5idWYsICIlcy4lcyIsIG5hbWUsIGRvbWFpbik7Ci0JfQotCXJldHVybiAocmVzX25xdWVyeShzdGF0cCwgbG9uZ25hbWUsIGNsYXNzLCB0eXBlLCBhbnN3ZXIsIGFuc2xlbikpOwotfQotCi1jb25zdCBjaGFyICoKLXJlc19ob3N0YWxpYXMoY29uc3QgcmVzX3N0YXRlIHN0YXRwLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICpkc3QsIHNpemVfdCBzaXopIHsKLQlyZXR1cm4gKE5VTEwpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19yYW5kb20uYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfcmFuZG9tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NzBjNGYuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19yYW5kb20uYworKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi0vKiAkT3BlbkJTRDogcmVzX3JhbmRvbS5jLHYgMS4xNyAyMDA4LzA0LzEzIDAwOjI4OjM1IGRqbSBFeHAgJCAqLwotCi0vKgotICogQ29weXJpZ2h0IDE5OTcgTmllbHMgUHJvdm9zIDxwcm92b3NAcGh5c25ldC51bmktaGFtYnVyZy5kZT4KLSAqIENvcHlyaWdodCAyMDA4IERhbWllbiBNaWxsZXIgPGRqbUBvcGVuYnNkLm9yZz4KLSAqIENvcHlyaWdodCAyMDA4IEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAodGhyZWFkLXNhZmV0eSkKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhlbyBkZSBSYWFkdCA8ZGVyYWFkdEBvcGVuYnNkLm9yZz4gY2FtZSB1cCB3aXRoIHRoZSBpZGVhIG9mIHVzaW5nCi0gKiBzdWNoIGEgbWF0aGVtYXRpY2FsIHN5c3RlbSB0byBnZW5lcmF0ZSBtb3JlIHJhbmRvbSAoeWV0IG5vbi1yZXBlYXRpbmcpCi0gKiBpZHMgdG8gc29sdmUgdGhlIHJlc29sdmVyL25hbWVkIHByb2JsZW0uICBCdXQgTmllbHMgZGVzaWduZWQgdGhlCi0gKiBhY3R1YWwgc3lzdGVtIGJhc2VkIG9uIHRoZSBjb25zdHJhaW50cy4KLSAqCi0gKiBMYXRlciBtb2RpZmllZCBieSBEYW1pZW4gTWlsbGVyIHRvIHdyYXAgdGhlIExDRyBvdXRwdXQgaW4gYSAxNS1iaXQKLSAqIHBlcm11dGF0aW9uIGdlbmVyYXRvciBiYXNlZCBvbiBhIEx1YnktUmFja29mZiBibG9jayBjaXBoZXIuIFRoaXMKLSAqIGVuc3VyZXMgdGhlIG91dHB1dCBpcyBub24tcmVwZWF0aW5nIGFuZCBwcmVzZXJ2ZXMgdGhlIE1TQiB0d2lkZGxlCi0gKiB0cmljaywgYnV0IG1ha2VzIGl0IG1vcmUgcmVzaXN0YW50IHRvIExDRyBwcmVkaWN0aW9uLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogc2VlZCA9IHJhbmRvbSAxNWJpdAotICogbiA9IHByaW1lLCBnMCA9IGdlbmVyYXRvciB0byBuLAotICogaiA9IHJhbmRvbSBzbyB0aGF0IGdjZChqLG4tMSkgPT0gMQotICogZyA9IGcwXmogbW9kIG4gd2lsbCBiZSBhIGdlbmVyYXRvciBhZ2Fpbi4KLSAqCi0gKiBYWzBdID0gcmFuZG9tIHNlZWQuCi0gKiBYW25dID0gYSpYW24tMV0rYiBtb2QgbSBpcyBhIExpbmVhciBDb25ncnVlbnRpYWwgR2VuZXJhdG9yCi0gKiB3aXRoIGEgPSA3XihldmVuIHJhbmRvbSkgbW9kIG0sCi0gKiAgICAgIGIgPSByYW5kb20gd2l0aCBnY2QoYixtKSA9PSAxCi0gKiAgICAgIG0gPSAzMTEwNCBhbmQgYSBtYXhpbWFsIHBlcmlvZCBvZiBtLTEuCi0gKgotICogVGhlIHRyYW5zYWN0aW9uIGlkIGlzIGRldGVybWluZWQgYnk6Ci0gKiBpZFtuXSA9IHNlZWQgeG9yIChnXlhbbl0gbW9kIG4pCi0gKgotICogRWZmZWN0aXZseSB0aGUgaWQgaXMgcmVzdHJpY3RlZCB0byB0aGUgbG93ZXIgMTUgYml0cywgdGh1cwotICogeWllbGRpbmcgdHdvIGRpZmZlcmVudCBjeWNsZXMgYnkgdG9nZ2xpbmcgdGhlIG1zYiBvbiBhbmQgb2ZmLgotICogVGhpcyBhdm9pZHMgcmV1c2UgaXNzdWVzIGNhdXNlZCBieSByZXNlZWRpbmcuCi0gKgotICogVGhlIG91dHB1dCBvZiB0aGlzIGdlbmVyYXRvciBpcyB0aGVuIHJhbmRvbWx5IHBlcm11dGVkIHRob3VnaCBhCi0gKiBjdXN0b20gMTUgYml0IEx1YnktUmFja29mZiBibG9jayBjaXBoZXIuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotLyogQklPTklDLUJFR0lOICovCi1zdGF0aWMgcHRocmVhZF9tdXRleF90ICAgICAgICAgX3Jlc19yYW5kb21fbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7Ci0jZGVmaW5lICBfUkVTX1JBTkRPTV9MT0NLKCkgICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX3JhbmRvbV9sb2NrKQotI2RlZmluZSAgX1JFU19SQU5ET01fVU5MT0NLKCkgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX3JhbmRvbV9sb2NrKQotLyogQklPTklDLUVORCAqLwotCi0jZGVmaW5lIFJVX09VVCAgCTE4MAkvKiBUaW1lIGFmdGVyIHdpY2ggd2lsbCBiZSByZXNlZWRlZCAqLwotI2RlZmluZSBSVV9NQVgJCTMwMDAwCS8qIFVuaXEgY3ljbGUsIGF2b2lkIGJsYWNramFjayBwcmVkaWN0aW9uICovCi0jZGVmaW5lIFJVX0dFTgkJMgkvKiBTdGFydGluZyBnZW5lcmF0b3IgKi8KLSNkZWZpbmUgUlVfTgkJMzI3NDkJLyogUlVfTi0xID0gMioyKjMqMjcyOSAqLwotI2RlZmluZSBSVV9BR0VOCQk3CS8qIGRldGVybWluZSBydV9hIGFzIFJVX0FHRU5eKDIqcmFuZCkgKi8KLSNkZWZpbmUgUlVfTQkJMzExMDQJLyogUlVfTSA9IDJeNyozXjUgLSBkb24ndCBjaGFuZ2UgKi8KLSNkZWZpbmUgUlVfUk9VTkRTCTExCS8qIE51bWJlciBvZiByb3VuZHMgZm9yIHBlcm11dGUgKG9kZCkgKi8KLQotc3RydWN0IHByZl9jdHggewotCS8qIFBSRiBsb29rdXAgdGFibGUgZm9yIG9kZCByb3VuZHMgKDcgYml0cyBpbnB1dCB0byA4IGJpdHMgb3V0cHV0KSAqLwotCXVfY2hhciBwcmY3WyhSVV9ST1VORFMgLyAyKSAqICgxIDw8IDcpXTsKLQotCS8qIFBSRiBsb29rdXAgdGFibGUgZm9yIGV2ZW4gcm91bmRzICg4IGJpdHMgaW5wdXQgdG8gNyBiaXRzIG91dHB1dCkgKi8KLQl1X2NoYXIgcHJmOFsoKFJVX1JPVU5EUyArIDEpIC8gMikgKiAoMSA8PCA4KV07Ci19OwotCi0jZGVmaW5lIFBGQUNfTiAzCi1jb25zdCBzdGF0aWMgdV9pbnQxNl90IHBmYWN0c1tQRkFDX05dID0gewotCTIsCi0JMywKLQkyNzI5Ci19OwotCi1zdGF0aWMgdV9pbnQxNl90IHJ1X3g7Ci1zdGF0aWMgdV9pbnQxNl90IHJ1X3NlZWQsIHJ1X3NlZWQyOwotc3RhdGljIHVfaW50MTZfdCBydV9hLCBydV9iOwotc3RhdGljIHVfaW50MTZfdCBydV9nOwotc3RhdGljIHVfaW50MTZfdCBydV9jb3VudGVyID0gMDsKLXN0YXRpYyB1X2ludDE2X3QgcnVfbXNiID0gMDsKLXN0YXRpYyBzdHJ1Y3QgcHJmX2N0eCAqcnVfcHJmID0gTlVMTDsKLXN0YXRpYyBsb25nIHJ1X3Jlc2VlZDsKLQotc3RhdGljIHVfaW50MTZfdCBwbW9kKHVfaW50MTZfdCwgdV9pbnQxNl90LCB1X2ludDE2X3QpOwotc3RhdGljIHZvaWQgcmVzX2luaXRpZCh2b2lkKTsKLQotLyoKLSAqIERvIGEgZmFzdCBtb2R1bGFyIGV4cG9uYXRpb24sIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgaW4gdGhlIHJhbmdlCi0gKiBvZiAwIC0gKG1vZC0xKQotICovCi1zdGF0aWMgdV9pbnQxNl90Ci1wbW9kKHVfaW50MTZfdCBnZW4sIHVfaW50MTZfdCBleHAsIHVfaW50MTZfdCBtb2QpCi17Ci0JdV9pbnQxNl90IHMsIHQsIHU7Ci0KLQlzID0gMTsKLQl0ID0gZ2VuOwotCXUgPSBleHA7Ci0KLQl3aGlsZSAodSkgewotCQlpZiAodSAmIDEpCi0JCQlzID0gKHMgKiB0KSAlIG1vZDsKLQkJdSA+Pj0gMTsKLQkJdCA9ICh0ICogdCkgJSBtb2Q7Ci0JfQotCXJldHVybiAocyk7Ci19Ci0KLS8qCi0gKiAxNS1iaXQgcGVybXV0YXRpb24gYmFzZWQgb24gTHVieS1SYWNrb2ZmIGJsb2NrIGNpcGhlcgotICovCi11X2ludAotcGVybXV0ZTE1KHVfaW50IGluKQotewotCWludCBpOwotCXVfaW50IGxlZnQsIHJpZ2h0LCB0bXA7Ci0KLQlpZiAocnVfcHJmID09IE5VTEwpCi0JCXJldHVybiBpbjsKLQotCWxlZnQgPSAoaW4gPj4gOCkgJiAweDdmOwotCXJpZ2h0ID0gaW4gJiAweGZmOwotCi0JLyoKLQkgKiBFYWNoIHJvdW5kIHN3YXBzIHRoZSB3aWR0aCBvZiBsZWZ0IGFuZCByaWdodC4gRXZlbiByb3VuZHMgaGF2ZQotCSAqIGEgNy1iaXQgbGVmdCwgb2RkIHJvdW5kcyBoYXZlIGFuIDgtYml0IGxlZnQuCVNpbmNlIHRoaXMgdXNlcyBhbgotCSAqIG9kZCBudW1iZXIgb2Ygcm91bmRzLCBsZWZ0IGlzIGFsd2F5cyA4IGJpdHMgd2lkZSBhdCB0aGUgZW5kLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBSVV9ST1VORFM7IGkrKykgewotCQlpZiAoKGkgJiAxKSA9PSAwKQotCQkJdG1wID0gcnVfcHJmLT5wcmY4WyhpIDw8ICg4IC0gMSkpIHwgcmlnaHRdICYgMHg3ZjsKLQkJZWxzZQotCQkJdG1wID0gcnVfcHJmLT5wcmY3WygoaSAtIDEpIDw8ICg3IC0gMSkpIHwgcmlnaHRdOwotCQl0bXAgXj0gbGVmdDsKLQkJbGVmdCA9IHJpZ2h0OwotCQlyaWdodCA9IHRtcDsKLQl9Ci0KLQlyZXR1cm4gKHJpZ2h0IDw8IDgpIHwgbGVmdDsKLX0KLQotLyoKLSAqIEluaXRpYWxpemVzIHRoZSBzZWVkIGFuZCBjaG9vc2VzIGEgc3VpdGFibGUgZ2VuZXJhdG9yLiBBbHNvIHRvZ2dsZXMKLSAqIHRoZSBtc2IgZmxhZy4gVGhlIG1zYiBmbGFnIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdHdvIGRpc3RpbmN0Ci0gKiBjeWNsZXMgb2YgcmFuZG9tIG51bWJlcnMgYW5kIHRodXMgYXZvaWRpbmcgcmV1c2Ugb2YgaWRzLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcmVzX3JhbmRvbWlkKCkgd2hlbiBuZWVkZWQsIGFuCi0gKiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IGl0LgotICovCi1zdGF0aWMgdm9pZAotcmVzX2luaXRpZCh2b2lkKQotewotCXVfaW50MTZfdCBqLCBpOwotCXVfaW50MzJfdCB0bXA7Ci0JaW50IG5vcHJpbWUgPSAxOwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCi0JcnVfeCA9IGFyYzRyYW5kb21fdW5pZm9ybShSVV9NKTsKLQotCS8qIDE1IGJpdHMgb2YgcmFuZG9tIHNlZWQgKi8KLQl0bXAgPSBhcmM0cmFuZG9tKCk7Ci0JcnVfc2VlZCA9ICh0bXAgPj4gMTYpICYgMHg3RkZGOwotCXJ1X3NlZWQyID0gdG1wICYgMHg3RkZGOwotCi0JLyogRGV0ZXJtaW5lIHRoZSBMQ0cgd2UgdXNlICovCi0JdG1wID0gYXJjNHJhbmRvbSgpOwotCXJ1X2IgPSAodG1wICYgMHhmZmZlKSB8IDE7Ci0JcnVfYSA9IHBtb2QoUlVfQUdFTiwgKHRtcCA+PiAxNikgJiAweGZmZmUsIFJVX00pOwotCXdoaWxlIChydV9iICUgMyA9PSAwKQotCQlydV9iICs9IDI7Ci0KLQlqID0gYXJjNHJhbmRvbV91bmlmb3JtKFJVX04pOwotCi0JLyoKLQkgKiBEbyBhIGZhc3QgZ2NkKGosUlVfTi0xKSwgc28gd2UgY2FuIGZpbmQgYSBqIHdpdGgKLQkgKiBnY2QoaiwgUlVfTi0xKSA9PSAxLCBnaXZpbmcgYSBuZXcgZ2VuZXJhdG9yIGZvcgotCSAqIFJVX0dFTl5qIG1vZCBSVV9OCi0JICovCi0KLQl3aGlsZSAobm9wcmltZSkgewotCQlmb3IgKGkgPSAwOyBpIDwgUEZBQ19OOyBpKyspCi0JCQlpZiAoaiAlIHBmYWN0c1tpXSA9PSAwKQotCQkJCWJyZWFrOwotCi0JCWlmIChpID49IFBGQUNfTikKLQkJCW5vcHJpbWUgPSAwOwotCQllbHNlCi0JCQlqID0gKGogKyAxKSAlIFJVX047Ci0JfQotCi0JcnVfZyA9IHBtb2QoUlVfR0VOLCBqLCBSVV9OKTsKLQlydV9jb3VudGVyID0gMDsKLQotCS8qIEluaXRpYWxpc2UgUFJGIGZvciBMdWJ5LVJhY2tvZmYgcGVybXV0YXRpb24gKi8KLQlpZiAocnVfcHJmID09IE5VTEwpCi0JCXJ1X3ByZiA9IG1hbGxvYyhzaXplb2YoKnJ1X3ByZikpOwotCWlmIChydV9wcmYgIT0gTlVMTCkKLQkJYXJjNHJhbmRvbV9idWYocnVfcHJmLCBzaXplb2YoKnJ1X3ByZikpOwotCi0JZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JcnVfcmVzZWVkID0gdHYudHZfc2VjICsgUlVfT1VUOwotCXJ1X21zYiA9IHJ1X21zYiA9PSAweDgwMDAgPyAwIDogMHg4MDAwOwotfQotCi11X2ludAotcmVzX3JhbmRvbWlkKHZvaWQpCi17Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0gICAgICAgIHVfaW50ICByZXN1bHQ7Ci0KLSAgICAgICAgX1JFU19SQU5ET01fTE9DSygpCi0JZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JaWYgKHJ1X2NvdW50ZXIgPj0gUlVfTUFYIHx8IHR2LnR2X3NlYyA+IHJ1X3Jlc2VlZCkKLQkJcmVzX2luaXRpZCgpOwotCi0JLyogTGluZWFyIENvbmdydWVudGlhbCBHZW5lcmF0b3IgKi8KLQlydV94ID0gKHJ1X2EgKiBydV94ICsgcnVfYikgJSBSVV9NOwotCXJ1X2NvdW50ZXIrKzsKLQotCXJlc3VsdCA9IHBlcm11dGUxNShydV9zZWVkIF4gcG1vZChydV9nLCBydV9zZWVkMiArIHJ1X3gsIFJVX04pKSB8IHJ1X21zYjsKLSAgICAgICAgX1JFU19SQU5ET01fVU5MT0NLKCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotI2lmIDAKLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0JaW50IGksIG47Ci0JdV9pbnQxNl90IHdlcnQ7Ci0KLQlyZXNfaW5pdGlkKCk7Ci0KLQlwcmludGYoIkdlbmVyYXRvcjogJXVcbiIsIHJ1X2cpOwotCXByaW50ZigiU2VlZDogJXVcbiIsIHJ1X3NlZWQpOwotCXByaW50ZigiUmVzZWVkIGF0ICVsZFxuIiwgcnVfcmVzZWVkKTsKLQlwcmludGYoIlJ1X1g6ICV1XG4iLCBydV94KTsKLQlwcmludGYoIlJ1X0E6ICV1XG4iLCBydV9hKTsKLQlwcmludGYoIlJ1X0I6ICV1XG4iLCBydV9iKTsKLQotCW4gPSBhcmdjID4gMSA/IGF0b2koYXJndlsxXSkgOiA2MDAwMTsKLQlmb3IgKGk9MDtpPG47aSsrKSB7Ci0JCXdlcnQgPSByZXNfcmFuZG9taWQoKTsKLQkJcHJpbnRmKCIldVxuIiwgd2VydCk7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfc2VuZC5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zZW5kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ODdiZGMuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zZW5kLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzU1ICswLDAgQEAKLS8qCSROZXRCU0Q6IHJlc19zZW5kLmMsdiAxLjkgMjAwNi8wMS8yNCAxNzo0MToyNSBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IDIwMDggIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAoc291cmNlIHBvcnQgcmFuZG9taXphdGlvbikKLSAqIENvcHlyaWdodCAoYykgMTk4NSwgMTk4OSwgMTk5MwotICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAotICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKLSAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAotICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAotICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCi0gKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLSAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCi0gKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLgotICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWZkZWYgbm90ZGVmCi1zdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX3NlbmQuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX3NlbmQuYyx2IDEuNS4yLjIuNC41IDIwMDQvMDgvMTAgMDI6MTk6NTYgbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiByZXNfc2VuZC5jLHYgMS45IDIwMDYvMDEvMjQgMTc6NDE6MjUgY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotLyogc2V0IHRvIDEgdG8gdXNlIG91ciBzbWFsbC9zaW1wbGUvbGltaXRlZCBETlMgY2FjaGUgKi8KLSNkZWZpbmUgIFVTRV9SRVNPTFZfQ0FDSEUgIDEKLQotLyoKLSAqIFNlbmQgcXVlcnkgdG8gbmFtZSBzZXJ2ZXIgYW5kIHdhaXQgZm9yIHJlcGx5LgotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxzeXMvdWlvLmg+Ci0KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLSNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2Vsc2UKLSNpbmNsdWRlIDxyZXNvbHYuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8aXNjL2V2ZW50bGliLmg+Ci0KLSNpZiBVU0VfUkVTT0xWX0NBQ0hFCi0jICBpbmNsdWRlIDxyZXNvbHZfY2FjaGUuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKLQotI2lmbmRlZiBERV9DT05TVAotI2RlZmluZSBERV9DT05TVChjLHYpICAgdiA9ICgoYykgPyBcCi0gICAgc3RyY2hyKChjb25zdCB2b2lkICopKGMpLCAqKGNvbnN0IGNoYXIgKikoY29uc3Qgdm9pZCAqKShjKSkgOiBOVUxMKQotI2VuZGlmCi0KLS8qIE9wdGlvbnMuICBMZWF2ZSB0aGVtIG9uLiAqLwotI2lmbmRlZiBERUJVRwotI2RlZmluZSBERUJVRwotI2VuZGlmCi0jaW5jbHVkZSAicmVzX2RlYnVnLmgiCi0jaW5jbHVkZSAicmVzX3ByaXZhdGUuaCIKLQotI2RlZmluZSBFWFQocmVzKSAoKHJlcyktPl91Ll9leHQpCi0jZGVmaW5lIERCRyAwCi0KLXN0YXRpYyBjb25zdCBpbnQgaGlnaGVzdEZEID0gRkRfU0VUU0laRSAtIDE7Ci0KLS8qIEZvcndhcmQuICovCi0KLXN0YXRpYyBpbnQJCWdldF9zYWxlbiBfX1AoKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSk7Ci1zdGF0aWMgc3RydWN0IHNvY2thZGRyICogZ2V0X25zYWRkciBfX1AoKHJlc19zdGF0ZSwgc2l6ZV90KSk7Ci1zdGF0aWMgaW50CQlzZW5kX3ZjKHJlc19zdGF0ZSwgY29uc3QgdV9jaGFyICosIGludCwKLQkJCQl1X2NoYXIgKiwgaW50LCBpbnQgKiwgaW50KTsKLXN0YXRpYyBpbnQJCXNlbmRfZGcocmVzX3N0YXRlLCBjb25zdCB1X2NoYXIgKiwgaW50LAotCQkJCXVfY2hhciAqLCBpbnQsIGludCAqLCBpbnQsCi0JCQkJaW50ICosIGludCAqKTsKLXN0YXRpYyB2b2lkCQlBZXJyb3IoY29uc3QgcmVzX3N0YXRlLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgaW50LAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBpbnQpOwotc3RhdGljIHZvaWQJCVBlcnJvcihjb25zdCByZXNfc3RhdGUsIEZJTEUgKiwgY29uc3QgY2hhciAqLCBpbnQpOwotc3RhdGljIGludAkJc29ja19lcShzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRyICopOwotI2lmZGVmIE5FRURfUFNFTEVDVAotc3RhdGljIGludAkJcHNlbGVjdChpbnQsIHZvaWQgKiwgdm9pZCAqLCB2b2lkICosCi0JCQkJc3RydWN0IHRpbWVzcGVjICosCi0JCQkJY29uc3Qgc2lnc2V0X3QgKik7Ci0jZW5kaWYKLXZvaWQgcmVzX3BxdWVyeShjb25zdCByZXNfc3RhdGUsIGNvbnN0IHVfY2hhciAqLCBpbnQsIEZJTEUgKik7Ci1zdGF0aWMgaW50IGNvbm5lY3Rfd2l0aF90aW1lb3V0KGludCBzb2NrLCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKm5zYXAsCi0JCQlzb2NrbGVuX3Qgc2FsZW4sIGludCBzZWMpOwotc3RhdGljIGludCByZXRyeWluZ19zZWxlY3QoY29uc3QgaW50IHNvY2ssIGZkX3NldCAqcmVhZHNldCwgZmRfc2V0ICp3cml0ZXNldCwKLQkJCWNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqZmluaXNoKTsKLQotLyogQklPTklDLUJFR0lOOiBpbXBsZW1lbnQgc291cmNlIHBvcnQgcmFuZG9taXphdGlvbiAqLwotdHlwZWRlZiB1bmlvbiB7Ci0gICAgc3RydWN0IHNvY2thZGRyICAgICAgc2E7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luICAgc2luOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgIHNpbjY7Ci19IF9zb2NrYWRkcl91bmlvbjsKLQotc3RhdGljIGludAotcmFuZG9tX2JpbmQoIGludCAgcywgaW50ICBmYW1pbHkgKQotewotICAgIF9zb2NrYWRkcl91bmlvbiAgdTsKLSAgICBpbnQgICAgICAgICAgICAgIGo7Ci0gICAgc29ja2xlbl90ICAgICAgICBzbGVuOwotCi0gICAgLyogY2xlYXIgYWxsLCB0aGlzIGFsc28gc2V0cyB0aGUgSVA0LzYgYWRkcmVzcyB0byAnYW55JyAqLwotICAgIG1lbXNldCggJnUsIDAsIHNpemVvZiB1ICk7Ci0KLSAgICBzd2l0Y2ggKGZhbWlseSkgewotICAgICAgICBjYXNlIEFGX0lORVQ6Ci0gICAgICAgICAgICB1LnNpbi5zaW5fZmFtaWx5ID0gZmFtaWx5OwotICAgICAgICAgICAgc2xlbiAgICAgICAgICAgICA9IHNpemVvZiB1LnNpbjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFGX0lORVQ2OgotICAgICAgICAgICAgdS5zaW42LnNpbjZfZmFtaWx5ID0gZmFtaWx5OwotICAgICAgICAgICAgc2xlbiAgICAgICAgICAgICAgID0gc2l6ZW9mIHUuc2luNjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZXJybm8gPSBFUFJPVE87Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgLyogZmlyc3QgdHJ5IHRvIGJpbmQgdG8gYSByYW5kb20gc291cmNlIHBvcnQgYSBmZXcgdGltZXMgKi8KLSAgICBmb3IgKGogPSAwOyBqIDwgMTA7IGorKykgewotICAgICAgICAvKiBmaW5kIGEgcmFuZG9tIHBvcnQgYmV0d2VlbiAxMDI1IC4uIDY1NTM0ICovCi0gICAgICAgIGludCAgcG9ydCA9IDEwMjUgKyAocmVzX3JhbmRvbWlkKCkgJSAoNjU1MzUtMTAyNSkpOwotICAgICAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQpCi0gICAgICAgICAgICB1LnNpbi5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1LnNpbjYuc2luNl9wb3J0ID0gaHRvbnMocG9ydCk7Ci0KLSAgICAgICAgaWYgKCAhYmluZCggcywgJnUuc2EsIHNsZW4gKSApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKiBub3RoaW5nIGFmdGVyIDEwIHRyaWVzLCBvdXIgbmV0d29yayB0YWJsZSBpcyBwcm9iYWJseSBidXN5ICovCi0gICAgLyogbGV0IHRoZSBzeXN0ZW0gZGVjaWRlIHdoaWNoIHBvcnQgaXMgYmVzdCAqLwotICAgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCkKLSAgICAgICAgdS5zaW4uc2luX3BvcnQgPSAwOwotICAgIGVsc2UKLSAgICAgICAgdS5zaW42LnNpbjZfcG9ydCA9IDA7Ci0KLSAgICByZXR1cm4gYmluZCggcywgJnUuc2EsIHNsZW4gKTsKLX0KLS8qIEJJT05JQy1FTkQgKi8KLQotc3RhdGljIGNvbnN0IGludCBuaWZsYWdzID0gTklfTlVNRVJJQ0hPU1QgfCBOSV9OVU1FUklDU0VSVjsKLQotLyogUHVibGljLiAqLwotCi0vKiBpbnQKLSAqIHJlc19pc291cnNlcnZlcihpbmEpCi0gKglsb29rcyB1cCAiaW5hIiBpbiBfcmVzLm5zX2FkZHJfbGlzdFtdCi0gKiByZXR1cm5zOgotICoJMCAgOiBub3QgZm91bmQKLSAqCT4wIDogZm91bmQKLSAqIGF1dGhvcjoKLSAqCXBhdWwgdml4aWUsIDI5bWF5OTQKLSAqLwotX19MSUJDX0hJRERFTl9fIGludAotcmVzX291cnNlcnZlcl9wKGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSkgewotCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqaW5wLCAqc3J2OwotCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmluNnAsICpzcnY2OwotCWludCBuczsKLQotCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewotCWNhc2UgQUZfSU5FVDoKLQkJaW5wID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKShjb25zdCB2b2lkICopc2E7Ci0JCWZvciAobnMgPSAwOyAgbnMgPCBzdGF0cC0+bnNjb3VudDsgIG5zKyspIHsKLQkJCXNydiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikodm9pZCAqKWdldF9uc2FkZHIoc3RhdHAsIChzaXplX3QpbnMpOwotCQkJaWYgKHNydi0+c2luX2ZhbWlseSA9PSBpbnAtPnNpbl9mYW1pbHkgJiYKLQkJCSAgICBzcnYtPnNpbl9wb3J0ID09IGlucC0+c2luX3BvcnQgJiYKLQkJCSAgICAoc3J2LT5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSB8fAotCQkJICAgICBzcnYtPnNpbl9hZGRyLnNfYWRkciA9PSBpbnAtPnNpbl9hZGRyLnNfYWRkcikpCi0JCQkJcmV0dXJuICgxKTsKLQkJfQotCQlicmVhazsKLQljYXNlIEFGX0lORVQ2OgotCQlpZiAoRVhUKHN0YXRwKS5leHQgPT0gTlVMTCkKLQkJCWJyZWFrOwotCQlpbjZwID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikoY29uc3Qgdm9pZCAqKXNhOwotCQlmb3IgKG5zID0gMDsgIG5zIDwgc3RhdHAtPm5zY291bnQ7ICBucysrKSB7Ci0JCQlzcnY2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKWdldF9uc2FkZHIoc3RhdHAsIChzaXplX3QpbnMpOwotCQkJaWYgKHNydjYtPnNpbjZfZmFtaWx5ID09IGluNnAtPnNpbjZfZmFtaWx5ICYmCi0JCQkgICAgc3J2Ni0+c2luNl9wb3J0ID09IGluNnAtPnNpbjZfcG9ydCAmJgotI2lmZGVmIEhBVkVfU0lONl9TQ09QRV9JRAotCQkJICAgIChzcnY2LT5zaW42X3Njb3BlX2lkID09IDAgfHwKLQkJCSAgICAgc3J2Ni0+c2luNl9zY29wZV9pZCA9PSBpbjZwLT5zaW42X3Njb3BlX2lkKSAmJgotI2VuZGlmCi0JCQkgICAgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzcnY2LT5zaW42X2FkZHIpIHx8Ci0JCQkgICAgIElONl9BUkVfQUREUl9FUVVBTCgmc3J2Ni0+c2luNl9hZGRyLCAmaW42cC0+c2luNl9hZGRyKSkpCi0JCQkJcmV0dXJuICgxKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JcmV0dXJuICgwKTsKLX0KLQotLyogaW50Ci0gKiByZXNfbmFtZWlucXVlcnkobmFtZSwgdHlwZSwgY2xhc3MsIGJ1ZiwgZW9tKQotICoJbG9vayBmb3IgKG5hbWUsdHlwZSxjbGFzcykgaW4gdGhlIHF1ZXJ5IHNlY3Rpb24gb2YgcGFja2V0IChidWYsZW9tKQotICogcmVxdWlyZXM6Ci0gKglidWYgKyBIRklYRURTWiA8PSBlb20KLSAqIHJldHVybnM6Ci0gKgktMSA6IGZvcm1hdCBlcnJvcgotICoJMCAgOiBub3QgZm91bmQKLSAqCT4wIDogZm91bmQKLSAqIGF1dGhvcjoKLSAqCXBhdWwgdml4aWUsIDI5bWF5OTQKLSAqLwotaW50Ci1yZXNfbmFtZWlucXVlcnkoY29uc3QgY2hhciAqbmFtZSwgaW50IHR5cGUsIGludCBjbGFzcywKLQkJY29uc3QgdV9jaGFyICpidWYsIGNvbnN0IHVfY2hhciAqZW9tKQotewotCWNvbnN0IHVfY2hhciAqY3AgPSBidWYgKyBIRklYRURTWjsKLQlpbnQgcWRjb3VudCA9IG50b2hzKCgoY29uc3QgSEVBREVSKikoY29uc3Qgdm9pZCAqKWJ1ZiktPnFkY291bnQpOwotCi0Jd2hpbGUgKHFkY291bnQtLSA+IDApIHsKLQkJY2hhciB0bmFtZVtNQVhETkFNRSsxXTsKLQkJaW50IG4sIHR0eXBlLCB0Y2xhc3M7Ci0KLQkJbiA9IGRuX2V4cGFuZChidWYsIGVvbSwgY3AsIHRuYW1lLCBzaXplb2YgdG5hbWUpOwotCQlpZiAobiA8IDApCi0JCQlyZXR1cm4gKC0xKTsKLQkJY3AgKz0gbjsKLQkJaWYgKGNwICsgMiAqIElOVDE2U1ogPiBlb20pCi0JCQlyZXR1cm4gKC0xKTsKLQkJdHR5cGUgPSBuc19nZXQxNihjcCk7IGNwICs9IElOVDE2U1o7Ci0JCXRjbGFzcyA9IG5zX2dldDE2KGNwKTsgY3AgKz0gSU5UMTZTWjsKLQkJaWYgKHR0eXBlID09IHR5cGUgJiYgdGNsYXNzID09IGNsYXNzICYmCi0JCSAgICBuc19zYW1lbmFtZSh0bmFtZSwgbmFtZSkgPT0gMSkKLQkJCXJldHVybiAoMSk7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLS8qIGludAotICogcmVzX3F1ZXJpZXNtYXRjaChidWYxLCBlb20xLCBidWYyLCBlb20yKQotICoJaXMgdGhlcmUgYSAxOjEgbWFwcGluZyBvZiAobmFtZSx0eXBlLGNsYXNzKQotICoJaW4gKGJ1ZjEsZW9tMSkgYW5kIChidWYyLGVvbTIpPwotICogcmV0dXJuczoKLSAqCS0xIDogZm9ybWF0IGVycm9yCi0gKgkwICA6IG5vdCBhIDE6MSBtYXBwaW5nCi0gKgk+MCA6IGlzIGEgMToxIG1hcHBpbmcKLSAqIGF1dGhvcjoKLSAqCXBhdWwgdml4aWUsIDI5bWF5OTQKLSAqLwotaW50Ci1yZXNfcXVlcmllc21hdGNoKGNvbnN0IHVfY2hhciAqYnVmMSwgY29uc3QgdV9jaGFyICplb20xLAotCQkgY29uc3QgdV9jaGFyICpidWYyLCBjb25zdCB1X2NoYXIgKmVvbTIpCi17Ci0JY29uc3QgdV9jaGFyICpjcCA9IGJ1ZjEgKyBIRklYRURTWjsKLQlpbnQgcWRjb3VudCA9IG50b2hzKCgoY29uc3QgSEVBREVSKikoY29uc3Qgdm9pZCAqKWJ1ZjEpLT5xZGNvdW50KTsKLQotCWlmIChidWYxICsgSEZJWEVEU1ogPiBlb20xIHx8IGJ1ZjIgKyBIRklYRURTWiA+IGVvbTIpCi0JCXJldHVybiAoLTEpOwotCi0JLyoKLQkgKiBPbmx5IGhlYWRlciBzZWN0aW9uIHByZXNlbnQgaW4gcmVwbGllcyB0bwotCSAqIGR5bmFtaWMgdXBkYXRlIHBhY2tldHMuCi0JICovCi0JaWYgKCgoKGNvbnN0IEhFQURFUiAqKShjb25zdCB2b2lkICopYnVmMSktPm9wY29kZSA9PSBuc19vX3VwZGF0ZSkgJiYKLQkgICAgKCgoY29uc3QgSEVBREVSICopKGNvbnN0IHZvaWQgKilidWYyKS0+b3Bjb2RlID09IG5zX29fdXBkYXRlKSkKLQkJcmV0dXJuICgxKTsKLQotCWlmIChxZGNvdW50ICE9IG50b2hzKCgoY29uc3QgSEVBREVSKikoY29uc3Qgdm9pZCAqKWJ1ZjIpLT5xZGNvdW50KSkKLQkJcmV0dXJuICgwKTsKLQl3aGlsZSAocWRjb3VudC0tID4gMCkgewotCQljaGFyIHRuYW1lW01BWEROQU1FKzFdOwotCQlpbnQgbiwgdHR5cGUsIHRjbGFzczsKLQotCQluID0gZG5fZXhwYW5kKGJ1ZjEsIGVvbTEsIGNwLCB0bmFtZSwgc2l6ZW9mIHRuYW1lKTsKLQkJaWYgKG4gPCAwKQotCQkJcmV0dXJuICgtMSk7Ci0JCWNwICs9IG47Ci0JCWlmIChjcCArIDIgKiBJTlQxNlNaID4gZW9tMSkKLQkJCXJldHVybiAoLTEpOwotCQl0dHlwZSA9IG5zX2dldDE2KGNwKTsJY3AgKz0gSU5UMTZTWjsKLQkJdGNsYXNzID0gbnNfZ2V0MTYoY3ApOyBjcCArPSBJTlQxNlNaOwotCQlpZiAoIXJlc19uYW1laW5xdWVyeSh0bmFtZSwgdHR5cGUsIHRjbGFzcywgYnVmMiwgZW9tMikpCi0JCQlyZXR1cm4gKDApOwotCX0KLQlyZXR1cm4gKDEpOwotfQotCi0KLWludAotcmVzX25zZW5kKHJlc19zdGF0ZSBzdGF0cCwKLQkgIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1X2NoYXIgKmFucywgaW50IGFuc3NpeikKLXsKLQlpbnQgZ290c29tZXdoZXJlLCB0ZXJybm8sIHRyeSwgdl9jaXJjdWl0LCByZXNwbGVuLCBucywgbjsKLQljaGFyIGFidWZbTklfTUFYSE9TVF07Ci0jaWYgVVNFX1JFU09MVl9DQUNIRQotICAgICAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiAgY2FjaGU7Ci0gICAgICAgIFJlc29sdkNhY2hlU3RhdHVzICAgICBjYWNoZV9zdGF0dXMgPSBSRVNPTFZfQ0FDSEVfVU5TVVBQT1JURUQ7Ci0jZW5kaWYKLQotI2lmICFVU0VfUkVTT0xWX0NBQ0hFCi0JaWYgKHN0YXRwLT5uc2NvdW50ID09IDApIHsKLQkJZXJybm8gPSBFU1JDSDsKLQkJcmV0dXJuICgtMSk7Ci0JfQotI2VuZGlmCi0KLQlpZiAoYW5zc2l6IDwgSEZJWEVEU1opIHsKLQkJZXJybm8gPSBFSU5WQUw7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlEcHJpbnRRKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgfHwgKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1FVRVJZKSwKLQkJKHN0ZG91dCwgIjs7IHJlc19zZW5kKClcbiIpLCBidWYsIGJ1Zmxlbik7Ci0Jdl9jaXJjdWl0ID0gKHN0YXRwLT5vcHRpb25zICYgUkVTX1VTRVZDKSB8fCBidWZsZW4gPiBQQUNLRVRTWjsKLQlnb3Rzb21ld2hlcmUgPSAwOwotCXRlcnJubyA9IEVUSU1FRE9VVDsKLQotI2lmIFVTRV9SRVNPTFZfQ0FDSEUKLQkvLyBnZXQgdGhlIGNhY2hlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW50ZXJmYWNlCi0JY2FjaGUgPSBfX2dldF9yZXNfY2FjaGUoc3RhdHAtPmlmYWNlKTsKLQlpZiAoY2FjaGUgIT0gTlVMTCkgewotCQlpbnQgIGFuc2xlbiA9IDA7Ci0JCWNhY2hlX3N0YXR1cyA9IF9yZXNvbHZfY2FjaGVfbG9va3VwKAotCQkJCWNhY2hlLCBidWYsIGJ1ZmxlbiwKLQkJCQlhbnMsIGFuc3NpeiwgJmFuc2xlbik7Ci0KLQkJaWYgKGNhY2hlX3N0YXR1cyA9PSBSRVNPTFZfQ0FDSEVfRk9VTkQpIHsKLQkJCXJldHVybiBhbnNsZW47Ci0JCX0gZWxzZSB7Ci0JCQkvLyBoYWQgYSBjYWNoZSBtaXNzIGZvciBhIGtub3duIGludGVyZmFjZSwgc28gcG9wdWxhdGUgdGhlIHRocmVhZCBwcml2YXRlCi0JCQkvLyBkYXRhIHNvIHRoZSBub3JtYWwgcmVzb2x2ZSBwYXRoIGNhbiBkbyBpdHMgdGhpbmcKLQkJCV9yZXNvbHZfcG9wdWxhdGVfcmVzX2Zvcl9pZmFjZShzdGF0cCk7Ci0JCX0KLQl9Ci0KLQlpZiAoc3RhdHAtPm5zY291bnQgPT0gMCkgewotCQllcnJubyA9IEVTUkNIOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0jZW5kaWYKLQotCS8qCi0JICogSWYgdGhlIG5zX2FkZHJfbGlzdCBpbiB0aGUgcmVzb2x2ZXIgY29udGV4dCBoYXMgY2hhbmdlZCwgdGhlbgotCSAqIGludmFsaWRhdGUgb3VyIGNhY2hlZCBjb3B5IGFuZCB0aGUgYXNzb2NpYXRlZCB0aW1pbmcgZGF0YS4KLQkgKi8KLQlpZiAoRVhUKHN0YXRwKS5uc2NvdW50ICE9IDApIHsKLQkJaW50IG5lZWRjbG9zZSA9IDA7Ci0JCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHBlZXI7Ci0JCXNvY2tsZW5fdCBwZWVybGVuOwotCi0JCWlmIChFWFQoc3RhdHApLm5zY291bnQgIT0gc3RhdHAtPm5zY291bnQpCi0JCQluZWVkY2xvc2UrKzsKLQkJZWxzZQotCQkJZm9yIChucyA9IDA7IG5zIDwgc3RhdHAtPm5zY291bnQ7IG5zKyspIHsKLQkJCQlpZiAoc3RhdHAtPm5zYWRkcl9saXN0W25zXS5zaW5fZmFtaWx5ICYmCi0JCQkJICAgICFzb2NrX2VxKChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZzdGF0cC0+bnNhZGRyX2xpc3RbbnNdLAotCQkJCQkgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tuc10pKSB7Ci0JCQkJCW5lZWRjbG9zZSsrOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQlpZiAoRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA9PSAtMSkKLQkJCQkJY29udGludWU7Ci0JCQkJcGVlcmxlbiA9IHNpemVvZihwZWVyKTsKLQkJCQlpZiAoZ2V0cGVlcm5hbWUoRVhUKHN0YXRwKS5uc3NvY2tzW25zXSwKLQkJCQkgICAgKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJnBlZXIsICZwZWVybGVuKSA8IDApIHsKLQkJCQkJbmVlZGNsb3NlKys7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlpZiAoIXNvY2tfZXEoKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJnBlZXIsCi0JCQkJICAgIGdldF9uc2FkZHIoc3RhdHAsIChzaXplX3QpbnMpKSkgewotCQkJCQluZWVkY2xvc2UrKzsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQlpZiAobmVlZGNsb3NlKSB7Ci0JCQlyZXNfbmNsb3NlKHN0YXRwKTsKLQkJCUVYVChzdGF0cCkubnNjb3VudCA9IDA7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIE1heWJlIGluaXRpYWxpemUgb3VyIHByaXZhdGUgY29weSBvZiB0aGUgbnNfYWRkcl9saXN0LgotCSAqLwotCWlmIChFWFQoc3RhdHApLm5zY291bnQgPT0gMCkgewotCQlmb3IgKG5zID0gMDsgbnMgPCBzdGF0cC0+bnNjb3VudDsgbnMrKykgewotCQkJRVhUKHN0YXRwKS5uc3RpbWVzW25zXSA9IFJFU19NQVhUSU1FOwotCQkJRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA9IC0xOwotCQkJaWYgKCFzdGF0cC0+bnNhZGRyX2xpc3RbbnNdLnNpbl9mYW1pbHkpCi0JCQkJY29udGludWU7Ci0JCQlFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tuc10uc2luID0KLQkJCQkgc3RhdHAtPm5zYWRkcl9saXN0W25zXTsKLQkJfQotCQlFWFQoc3RhdHApLm5zY291bnQgPSBzdGF0cC0+bnNjb3VudDsKLQl9Ci0KLQkvKgotCSAqIFNvbWUgcmVzb2x2ZXJzIHdhbnQgdG8gZXZlbiBvdXQgdGhlIGxvYWQgb24gdGhlaXIgbmFtZXNlcnZlcnMuCi0JICogTm90ZSB0aGF0IFJFU19CTEFTVCBvdmVycmlkZXMgUkVTX1JPVEFURS4KLQkgKi8KLQlpZiAoKHN0YXRwLT5vcHRpb25zICYgUkVTX1JPVEFURSkgIT0gMFUgJiYKLQkgICAgKHN0YXRwLT5vcHRpb25zICYgUkVTX0JMQVNUKSA9PSAwVSkgewotCQl1bmlvbiByZXNfc29ja2FkZHJfdW5pb24gaW51OwotCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gaW5hOwotCQlpbnQgbGFzdG5zID0gc3RhdHAtPm5zY291bnQgLSAxOwotCQlpbnQgZmQ7Ci0JCXVfaW50MTZfdCBuc3RpbWU7Ci0KLQkJaWYgKEVYVChzdGF0cCkuZXh0ICE9IE5VTEwpCi0JCQlpbnUgPSBFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1swXTsKLQkJaW5hID0gc3RhdHAtPm5zYWRkcl9saXN0WzBdOwotCQlmZCA9IEVYVChzdGF0cCkubnNzb2Nrc1swXTsKLQkJbnN0aW1lID0gRVhUKHN0YXRwKS5uc3RpbWVzWzBdOwotCQlmb3IgKG5zID0gMDsgbnMgPCBsYXN0bnM7IG5zKyspIHsKLQkJCWlmIChFWFQoc3RhdHApLmV4dCAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tuc10gPQotCQkJCQlFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tucyArIDFdOwotCQkJc3RhdHAtPm5zYWRkcl9saXN0W25zXSA9IHN0YXRwLT5uc2FkZHJfbGlzdFtucyArIDFdOwotCQkJRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA9IEVYVChzdGF0cCkubnNzb2Nrc1tucyArIDFdOwotCQkJRVhUKHN0YXRwKS5uc3RpbWVzW25zXSA9IEVYVChzdGF0cCkubnN0aW1lc1tucyArIDFdOwotCQl9Ci0JCWlmIChFWFQoc3RhdHApLmV4dCAhPSBOVUxMKQotCQkJRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbGFzdG5zXSA9IGludTsKLQkJc3RhdHAtPm5zYWRkcl9saXN0W2xhc3Ruc10gPSBpbmE7Ci0JCUVYVChzdGF0cCkubnNzb2Nrc1tsYXN0bnNdID0gZmQ7Ci0JCUVYVChzdGF0cCkubnN0aW1lc1tsYXN0bnNdID0gbnN0aW1lOwotCX0KLQotCS8qCi0JICogU2VuZCByZXF1ZXN0LCBSRVRSWSB0aW1lcywgb3IgdW50aWwgc3VjY2Vzc2Z1bC4KLQkgKi8KLQlmb3IgKHRyeSA9IDA7IHRyeSA8IHN0YXRwLT5yZXRyeTsgdHJ5KyspIHsKLQkgICAgZm9yIChucyA9IDA7IG5zIDwgc3RhdHAtPm5zY291bnQ7IG5zKyspIHsKLQkJc3RydWN0IHNvY2thZGRyICpuc2FwOwotCQlpbnQgbnNhcGxlbjsKLQkJbnNhcCA9IGdldF9uc2FkZHIoc3RhdHAsIChzaXplX3QpbnMpOwotCQluc2FwbGVuID0gZ2V0X3NhbGVuKG5zYXApOwotCQlzdGF0cC0+X2ZsYWdzICY9IH5SRVNfRl9MQVNUTUFTSzsKLQkJc3RhdHAtPl9mbGFncyB8PSAobnMgPDwgUkVTX0ZfTEFTVFNISUZUKTsKLSBzYW1lX25zOgotCQlpZiAoc3RhdHAtPnFob29rKSB7Ci0JCQlpbnQgZG9uZSA9IDAsIGxvb3BzID0gMDsKLQotCQkJZG8gewotCQkJCXJlc19zZW5kaG9va2FjdCBhY3Q7Ci0KLQkJCQlhY3QgPSAoKnN0YXRwLT5xaG9vaykoJm5zYXAsICZidWYsICZidWZsZW4sCi0JCQkJCQkgICAgICBhbnMsIGFuc3NpeiwgJnJlc3BsZW4pOwotCQkJCXN3aXRjaCAoYWN0KSB7Ci0JCQkJY2FzZSByZXNfZ29haGVhZDoKLQkJCQkJZG9uZSA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgcmVzX25leHRuczoKLQkJCQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCQkJCWdvdG8gbmV4dF9uczsKLQkJCQljYXNlIHJlc19kb25lOgotCQkJCQlyZXR1cm4gKHJlc3BsZW4pOwotCQkJCWNhc2UgcmVzX21vZGlmaWVkOgotCQkJCQkvKiBnaXZlIHRoZSBob29rIGFub3RoZXIgdHJ5ICovCi0JCQkJCWlmICgrK2xvb3BzIDwgNDIpIC8qZG91ZyBhZGFtcyovCi0JCQkJCQlicmVhazsKLQkJCQkJLypGQUxMVEhST1VHSCovCi0JCQkJY2FzZSByZXNfZXJyb3I6Ci0JCQkJCS8qRkFMTFRIUk9VR0gqLwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWdvdG8gZmFpbDsKLQkJCQl9Ci0JCQl9IHdoaWxlICghZG9uZSk7Ci0JCX0KLQotCQlEcHJpbnQoKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgJiYKLQkJCWdldG5hbWVpbmZvKG5zYXAsIChzb2NrbGVuX3QpbnNhcGxlbiwgYWJ1Ziwgc2l6ZW9mKGFidWYpLAotCQkJCU5VTEwsIDAsIG5pZmxhZ3MpID09IDApLAotCQkJCShzdGRvdXQsICI7OyBRdWVyeWluZyBzZXJ2ZXIgKCMgJWQpIGFkZHJlc3MgPSAlc1xuIiwKLQkJCQlucyArIDEsIGFidWYpKTsKLQotCi0JCWlmICh2X2NpcmN1aXQpIHsKLQkJCS8qIFVzZSBWQzsgYXQgbW9zdCBvbmUgYXR0ZW1wdCBwZXIgc2VydmVyLiAqLwotCQkJdHJ5ID0gc3RhdHAtPnJldHJ5OwotCi0JCQluID0gc2VuZF92YyhzdGF0cCwgYnVmLCBidWZsZW4sIGFucywgYW5zc2l6LCAmdGVycm5vLAotCQkJCSAgICBucyk7Ci0KLQkJCWlmIChEQkcpIHsKLQkJCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLAotCQkJCQkidXNlZCBzZW5kX3ZjICVkXG4iLCBuKTsKLQkJCX0KLQotCQkJaWYgKG4gPCAwKQotCQkJCWdvdG8gZmFpbDsKLQkJCWlmIChuID09IDApCi0JCQkJZ290byBuZXh0X25zOwotCQkJcmVzcGxlbiA9IG47Ci0JCX0gZWxzZSB7Ci0JCQkvKiBVc2UgZGF0YWdyYW1zLiAqLwotCQkJaWYgKERCRykgewotCQkJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICJ1c2luZyBzZW5kX2RnXG4iKTsKLQkJCX0KLQotCQkJbiA9IHNlbmRfZGcoc3RhdHAsIGJ1ZiwgYnVmbGVuLCBhbnMsIGFuc3NpeiwgJnRlcnJubywKLQkJCQkgICAgbnMsICZ2X2NpcmN1aXQsICZnb3Rzb21ld2hlcmUpOwotCQkJaWYgKERCRykgewotCQkJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICJ1c2VkIHNlbmRfZGcgJWRcbiIsbik7Ci0JCQl9Ci0KLQkJCWlmIChuIDwgMCkKLQkJCQlnb3RvIGZhaWw7Ci0JCQlpZiAobiA9PSAwKQotCQkJCWdvdG8gbmV4dF9uczsKLQkJCWlmIChEQkcpIHsKLQkJCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLCAidGltZT0lbGRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUoTlVMTCkpOwotCQkJfQotCQkJaWYgKHZfY2lyY3VpdCkKLQkJCQlnb3RvIHNhbWVfbnM7Ci0JCQlyZXNwbGVuID0gbjsKLQkJfQotCi0JCURwcmludCgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpIHx8Ci0JCSAgICAgICAoKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1JFUExZKSAmJgotCQkJKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX0hFQUQxKSksCi0JCSAgICAgICAoc3Rkb3V0LCAiOzsgZ290IGFuc3dlcjpcbiIpKTsKLQotCQlEcHJpbnRRKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgfHwKLQkJCShzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9SRVBMWSksCi0JCQkoc3Rkb3V0LCAiJXMiLCAiIiksCi0JCQlhbnMsIChyZXNwbGVuID4gYW5zc2l6KSA/IGFuc3NpeiA6IHJlc3BsZW4pOwotCi0jaWYgVVNFX1JFU09MVl9DQUNIRQotICAgICAgICAgICAgICAgIGlmIChjYWNoZV9zdGF0dXMgPT0gUkVTT0xWX0NBQ0hFX05PVEZPVU5EKSB7Ci0gICAgICAgICAgICAgICAgICAgIF9yZXNvbHZfY2FjaGVfYWRkKGNhY2hlLCBidWYsIGJ1ZmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zLCByZXNwbGVuKTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKLQkJLyoKLQkJICogSWYgd2UgaGF2ZSB0ZW1wb3JhcmlseSBvcGVuZWQgYSB2aXJ0dWFsIGNpcmN1aXQsCi0JCSAqIG9yIGlmIHdlIGhhdmVuJ3QgYmVlbiBhc2tlZCB0byBrZWVwIGEgc29ja2V0IG9wZW4sCi0JCSAqIGNsb3NlIHRoZSBzb2NrZXQuCi0JCSAqLwotCQlpZiAoKHZfY2lyY3VpdCAmJiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfVVNFVkMpID09IDBVKSB8fAotCQkgICAgKHN0YXRwLT5vcHRpb25zICYgUkVTX1NUQVlPUEVOKSA9PSAwVSkgewotCQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCX0KLQkJaWYgKHN0YXRwLT5yaG9vaykgewotCQkJaW50IGRvbmUgPSAwLCBsb29wcyA9IDA7Ci0KLQkJCWRvIHsKLQkJCQlyZXNfc2VuZGhvb2thY3QgYWN0OwotCi0JCQkJYWN0ID0gKCpzdGF0cC0+cmhvb2spKG5zYXAsIGJ1ZiwgYnVmbGVuLAotCQkJCQkJICAgICAgYW5zLCBhbnNzaXosICZyZXNwbGVuKTsKLQkJCQlzd2l0Y2ggKGFjdCkgewotCQkJCWNhc2UgcmVzX2dvYWhlYWQ6Ci0JCQkJY2FzZSByZXNfZG9uZToKLQkJCQkJZG9uZSA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgcmVzX25leHRuczoKLQkJCQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCQkJCWdvdG8gbmV4dF9uczsKLQkJCQljYXNlIHJlc19tb2RpZmllZDoKLQkJCQkJLyogZ2l2ZSB0aGUgaG9vayBhbm90aGVyIHRyeSAqLwotCQkJCQlpZiAoKytsb29wcyA8IDQyKSAvKmRvdWcgYWRhbXMqLwotCQkJCQkJYnJlYWs7Ci0JCQkJCS8qRkFMTFRIUk9VR0gqLwotCQkJCWNhc2UgcmVzX2Vycm9yOgotCQkJCQkvKkZBTExUSFJPVUdIKi8KLQkJCQlkZWZhdWx0OgotCQkJCQlnb3RvIGZhaWw7Ci0JCQkJfQotCQkJfSB3aGlsZSAoIWRvbmUpOwotCi0JCX0KLQkJcmV0dXJuIChyZXNwbGVuKTsKLSBuZXh0X25zOiA7Ci0JICAgfSAvKmZvcmVhY2ggbnMqLwotCX0gLypmb3JlYWNoIHJldHJ5Ki8KLQlyZXNfbmNsb3NlKHN0YXRwKTsKLQlpZiAoIXZfY2lyY3VpdCkgewotCQlpZiAoIWdvdHNvbWV3aGVyZSkKLQkJCWVycm5vID0gRUNPTk5SRUZVU0VEOwkvKiBubyBuYW1lc2VydmVycyBmb3VuZCAqLwotCQllbHNlCi0JCQllcnJubyA9IEVUSU1FRE9VVDsJLyogbm8gYW5zd2VyIG9idGFpbmVkICovCi0JfSBlbHNlCi0JCWVycm5vID0gdGVycm5vOwotCi0jaWYgVVNFX1JFU09MVl9DQUNIRQotICAgICAgICBfcmVzb2x2X2NhY2hlX3F1ZXJ5X2ZhaWxlZChjYWNoZSwgYnVmLCBidWZsZW4pOwotI2VuZGlmCi0KLQlyZXR1cm4gKC0xKTsKLSBmYWlsOgotI2lmIFVTRV9SRVNPTFZfQ0FDSEUKLQlfcmVzb2x2X2NhY2hlX3F1ZXJ5X2ZhaWxlZChjYWNoZSwgYnVmLCBidWZsZW4pOwotI2VuZGlmCi0JcmVzX25jbG9zZShzdGF0cCk7Ci0JcmV0dXJuICgtMSk7Ci19Ci0KLS8qIFByaXZhdGUgKi8KLQotc3RhdGljIGludAotZ2V0X3NhbGVuKHNhKQotCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2E7Ci17Ci0KLSNpZmRlZiBIQVZFX1NBX0xFTgotCS8qIFRoZXJlIGFyZSBwZW9wbGUgZG8gbm90IHNldCBzYV9sZW4uICBCZSBmb3JnaXZpbmcgdG8gdGhlbS4gKi8KLQlpZiAoc2EtPnNhX2xlbikKLQkJcmV0dXJuIChzYS0+c2FfbGVuKTsKLSNlbmRpZgotCi0JaWYgKHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKLQkJcmV0dXJuIChzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0JZWxzZSBpZiAoc2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKLQkJcmV0dXJuIChzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCWVsc2UKLQkJcmV0dXJuICgwKTsJLyogdW5rbm93biwgZGllIG9uIGNvbm5lY3QgKi8KLX0KLQotLyoKLSAqIHBpY2sgYXBwcm9wcmlhdGUgbnNhZGRyX2xpc3QgZm9yIHVzZS4gIHNlZSByZXNfaW5pdCgpIGZvciBpbml0aWFsaXphdGlvbi4KLSAqLwotc3RhdGljIHN0cnVjdCBzb2NrYWRkciAqCi1nZXRfbnNhZGRyKHN0YXRwLCBuKQotCXJlc19zdGF0ZSBzdGF0cDsKLQlzaXplX3QgbjsKLXsKLQotCWlmICghc3RhdHAtPm5zYWRkcl9saXN0W25dLnNpbl9mYW1pbHkgJiYgRVhUKHN0YXRwKS5leHQpIHsKLQkJLyoKLQkJICogLSBFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tuXSBob2xkcyBhbiBhZGRyZXNzIHRoYXQgaXMgbGFyZ2VyCi0JCSAqICAgdGhhbiBzdHJ1Y3Qgc29ja2FkZHIsIGFuZAotCQkgKiAtIHVzZXIgY29kZSBkaWQgbm90IHVwZGF0ZSBzdGF0cC0+bnNhZGRyX2xpc3Rbbl0uCi0JCSAqLwotCQlyZXR1cm4gKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJkVYVChzdGF0cCkuZXh0LT5uc2FkZHJzW25dOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIC0gdXNlciBjb2RlIHVwZGF0ZWQgc3RhdHAtPm5zYWRkcl9saXN0W25dLCBvcgotCQkgKiAtIHN0YXRwLT5uc2FkZHJfbGlzdFtuXSBoYXMgdGhlIHNhbWUgY29udGVudCBhcwotCQkgKiAgIEVYVChzdGF0cCkuZXh0LT5uc2FkZHJzW25dLgotCQkgKi8KLQkJcmV0dXJuIChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZzdGF0cC0+bnNhZGRyX2xpc3Rbbl07Ci0JfQotfQotCi1zdGF0aWMgaW50IGdldF90aW1lb3V0KGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwgY29uc3QgaW50IG5zKQotewotCWludCB0aW1lb3V0ID0gKHN0YXRwLT5yZXRyYW5zIDw8IG5zKTsKLQlpZiAobnMgPiAwKSB7Ci0JCXRpbWVvdXQgLz0gc3RhdHAtPm5zY291bnQ7Ci0JfQotCWlmICh0aW1lb3V0IDw9IDApIHsKLQkJdGltZW91dCA9IDE7Ci0JfQotCWlmIChEQkcpIHsKLQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwgInVzaW5nIHRpbWVvdXQgb2YgJWQgc2VjXG4iLCB0aW1lb3V0KTsKLQl9Ci0KLQlyZXR1cm4gdGltZW91dDsKLX0KLQotc3RhdGljIGludAotc2VuZF92YyhyZXNfc3RhdGUgc3RhdHAsCi0JY29uc3QgdV9jaGFyICpidWYsIGludCBidWZsZW4sIHVfY2hhciAqYW5zLCBpbnQgYW5zc2l6LAotCWludCAqdGVycm5vLCBpbnQgbnMpCi17Ci0JY29uc3QgSEVBREVSICpocCA9IChjb25zdCBIRUFERVIgKikoY29uc3Qgdm9pZCAqKWJ1ZjsKLQlIRUFERVIgKmFuaHAgPSAoSEVBREVSICopKHZvaWQgKilhbnM7Ci0Jc3RydWN0IHNvY2thZGRyICpuc2FwOwotCWludCBuc2FwbGVuOwotCWludCB0cnVuY2F0aW5nLCBjb25ucmVzZXQsIHJlc3BsZW4sIG47Ci0Jc3RydWN0IGlvdmVjIGlvdlsyXTsKLQl1X3Nob3J0IGxlbjsKLQl1X2NoYXIgKmNwOwotCXZvaWQgKnRtcDsKLQotCWlmIChEQkcpIHsKLQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwgInVzaW5nIHNlbmRfdmNcbiIpOwotCX0KLQotCW5zYXAgPSBnZXRfbnNhZGRyKHN0YXRwLCAoc2l6ZV90KW5zKTsKLQluc2FwbGVuID0gZ2V0X3NhbGVuKG5zYXApOwotCi0JY29ubnJlc2V0ID0gMDsKLSBzYW1lX25zOgotCXRydW5jYXRpbmcgPSAwOwotCi0JLyogQXJlIHdlIHN0aWxsIHRhbGtpbmcgdG8gd2hvbSB3ZSB3YW50IHRvIHRhbGsgdG8/ICovCi0JaWYgKHN0YXRwLT5fdmNzb2NrID49IDAgJiYgKHN0YXRwLT5fZmxhZ3MgJiBSRVNfRl9WQykgIT0gMCkgewotCQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBwZWVyOwotCQlzb2NrbGVuX3Qgc2l6ZSA9IHNpemVvZiBwZWVyOwotCQlpbnQgb2xkX21hcms7Ci0JCWludCBtYXJrX3NpemUgPSBzaXplb2Yob2xkX21hcmspOwotCQlpZiAoZ2V0cGVlcm5hbWUoc3RhdHAtPl92Y3NvY2ssCi0JCQkJKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJnBlZXIsICZzaXplKSA8IDAgfHwKLQkJICAgICFzb2NrX2VxKChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZwZWVyLCBuc2FwKSB8fAotCQkJZ2V0c29ja29wdChzdGF0cC0+X3Zjc29jaywgU09MX1NPQ0tFVCwgU09fTUFSSywgJm9sZF9tYXJrLCAmbWFya19zaXplKSA8IDAgfHwKLQkJCW9sZF9tYXJrICE9IHN0YXRwLT5fbWFyaykgewotCQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCQlzdGF0cC0+X2ZsYWdzICY9IH5SRVNfRl9WQzsKLQkJfQotCX0KLQotCWlmIChzdGF0cC0+X3Zjc29jayA8IDAgfHwgKHN0YXRwLT5fZmxhZ3MgJiBSRVNfRl9WQykgPT0gMCkgewotCQlpZiAoc3RhdHAtPl92Y3NvY2sgPj0gMCkKLQkJCXJlc19uY2xvc2Uoc3RhdHApOwotCi0JCXN0YXRwLT5fdmNzb2NrID0gc29ja2V0KG5zYXAtPnNhX2ZhbWlseSwgU09DS19TVFJFQU0sIDApOwotCQlpZiAoc3RhdHAtPl92Y3NvY2sgPiBoaWdoZXN0RkQpIHsKLQkJCXJlc19uY2xvc2Uoc3RhdHApOwotCQkJZXJybm8gPSBFTk9UU09DSzsKLQkJfQotCQlpZiAoc3RhdHAtPl92Y3NvY2sgPCAwKSB7Ci0JCQlzd2l0Y2ggKGVycm5vKSB7Ci0JCQljYXNlIEVQUk9UT05PU1VQUE9SVDoKLSNpZmRlZiBFUEZOT1NVUFBPUlQKLQkJCWNhc2UgRVBGTk9TVVBQT1JUOgotI2VuZGlmCi0JCQljYXNlIEVBRk5PU1VQUE9SVDoKLQkJCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNvY2tldCh2YykiLCBlcnJubyk7Ci0JCQkJcmV0dXJuICgwKTsKLQkJCWRlZmF1bHQ6Ci0JCQkJKnRlcnJubyA9IGVycm5vOwotCQkJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAic29ja2V0KHZjKSIsIGVycm5vKTsKLQkJCQlyZXR1cm4gKC0xKTsKLQkJCX0KLQkJfQotCQlpZiAoc3RhdHAtPl9tYXJrICE9IDApIHsKLQkJCWlmIChzZXRzb2Nrb3B0KHN0YXRwLT5fdmNzb2NrLCBTT0xfU09DS0VULAotCQkJCSAgICAgICAgU09fTUFSSywgJnN0YXRwLT5fbWFyaywgc2l6ZW9mKHN0YXRwLT5fbWFyaykpIDwgMCkgewotCQkJCSp0ZXJybm8gPSBlcnJubzsKLQkJCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNldHNvY2tvcHQiLCBlcnJubyk7Ci0JCQkJcmV0dXJuIC0xOwotCQkJfQotCQl9Ci0JCWVycm5vID0gMDsKLQkJaWYgKHJhbmRvbV9iaW5kKHN0YXRwLT5fdmNzb2NrLG5zYXAtPnNhX2ZhbWlseSkgPCAwKSB7Ci0JCQkqdGVycm5vID0gZXJybm87Ci0JCQlBZXJyb3Ioc3RhdHAsIHN0ZGVyciwgImJpbmQvdmMiLCBlcnJubywgbnNhcCwKLQkJCSAgICBuc2FwbGVuKTsKLQkJCXJlc19uY2xvc2Uoc3RhdHApOwotCQkJcmV0dXJuICgwKTsKLQkJfQotCQlpZiAoY29ubmVjdF93aXRoX3RpbWVvdXQoc3RhdHAtPl92Y3NvY2ssIG5zYXAsIChzb2NrbGVuX3QpbnNhcGxlbiwKLQkJCQlnZXRfdGltZW91dChzdGF0cCwgbnMpKSA8IDApIHsKLQkJCSp0ZXJybm8gPSBlcnJubzsKLQkJCUFlcnJvcihzdGF0cCwgc3RkZXJyLCAiY29ubmVjdC92YyIsIGVycm5vLCBuc2FwLAotCQkJICAgIG5zYXBsZW4pOwotCQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0JCXN0YXRwLT5fZmxhZ3MgfD0gUkVTX0ZfVkM7Ci0JfQotCi0JLyoKLQkgKiBTZW5kIGxlbmd0aCAmIG1lc3NhZ2UKLQkgKi8KLQluc19wdXQxNigodV9zaG9ydClidWZsZW4sICh1X2NoYXIqKSh2b2lkICopJmxlbik7Ci0JaW92WzBdID0gZXZDb25zSW92ZWMoJmxlbiwgSU5UMTZTWik7Ci0JREVfQ09OU1QoYnVmLCB0bXApOwotCWlvdlsxXSA9IGV2Q29uc0lvdmVjKHRtcCwgKHNpemVfdClidWZsZW4pOwotCWlmICh3cml0ZXYoc3RhdHAtPl92Y3NvY2ssIGlvdiwgMikgIT0gKElOVDE2U1ogKyBidWZsZW4pKSB7Ci0JCSp0ZXJybm8gPSBlcnJubzsKLQkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJ3cml0ZSBmYWlsZWQiLCBlcnJubyk7Ci0JCXJlc19uY2xvc2Uoc3RhdHApOwotCQlyZXR1cm4gKDApOwotCX0KLQkvKgotCSAqIFJlY2VpdmUgbGVuZ3RoICYgcmVzcG9uc2UKLQkgKi8KLSByZWFkX2xlbjoKLQljcCA9IGFuczsKLQlsZW4gPSBJTlQxNlNaOwotCXdoaWxlICgobiA9IHJlYWQoc3RhdHAtPl92Y3NvY2ssIChjaGFyICopY3AsIChzaXplX3QpbGVuKSkgPiAwKSB7Ci0JCWNwICs9IG47Ci0JCWlmICgobGVuIC09IG4pID09IDApCi0JCQlicmVhazsKLQl9Ci0JaWYgKG4gPD0gMCkgewotCQkqdGVycm5vID0gZXJybm87Ci0JCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAicmVhZCBmYWlsZWQiLCBlcnJubyk7Ci0JCXJlc19uY2xvc2Uoc3RhdHApOwotCQkvKgotCQkgKiBBIGxvbmcgcnVubmluZyBwcm9jZXNzIG1pZ2h0IGdldCBpdHMgVENQCi0JCSAqIGNvbm5lY3Rpb24gcmVzZXQgaWYgdGhlIHJlbW90ZSBzZXJ2ZXIgd2FzCi0JCSAqIHJlc3RhcnRlZC4gIFJlcXVlcnkgdGhlIHNlcnZlciBpbnN0ZWFkIG9mCi0JCSAqIHRyeWluZyBhIG5ldyBvbmUuICBXaGVuIHRoZXJlIGlzIG9ubHkgb25lCi0JCSAqIHNlcnZlciwgdGhpcyBtZWFucyB0aGF0IGEgcXVlcnkgbWlnaHQgd29yawotCQkgKiBpbnN0ZWFkIG9mIGZhaWxpbmcuICBXZSBvbmx5IGFsbG93IG9uZSByZXNldAotCQkgKiBwZXIgcXVlcnkgdG8gcHJldmVudCBsb29waW5nLgotCQkgKi8KLQkJaWYgKCp0ZXJybm8gPT0gRUNPTk5SRVNFVCAmJiAhY29ubnJlc2V0KSB7Ci0JCQljb25ucmVzZXQgPSAxOwotCQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCQlnb3RvIHNhbWVfbnM7Ci0JCX0KLQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCXJldHVybiAoMCk7Ci0JfQotCXJlc3BsZW4gPSBuc19nZXQxNihhbnMpOwotCWlmIChyZXNwbGVuID4gYW5zc2l6KSB7Ci0JCURwcmludChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywKLQkJICAgICAgIChzdGRvdXQsICI7OyByZXNwb25zZSB0cnVuY2F0ZWRcbiIpCi0JCSAgICAgICApOwotCQl0cnVuY2F0aW5nID0gMTsKLQkJbGVuID0gYW5zc2l6OwotCX0gZWxzZQotCQlsZW4gPSByZXNwbGVuOwotCWlmIChsZW4gPCBIRklYRURTWikgewotCQkvKgotCQkgKiBVbmRlcnNpemVkIG1lc3NhZ2UuCi0JCSAqLwotCQlEcHJpbnQoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCi0JCSAgICAgICAoc3Rkb3V0LCAiOzsgdW5kZXJzaXplZDogJWRcbiIsIGxlbikpOwotCQkqdGVycm5vID0gRU1TR1NJWkU7Ci0JCXJlc19uY2xvc2Uoc3RhdHApOwotCQlyZXR1cm4gKDApOwotCX0KLQljcCA9IGFuczsKLQl3aGlsZSAobGVuICE9IDAgJiYgKG4gPSByZWFkKHN0YXRwLT5fdmNzb2NrLCAoY2hhciAqKWNwLCAoc2l6ZV90KWxlbikpID4gMCl7Ci0JCWNwICs9IG47Ci0JCWxlbiAtPSBuOwotCX0KLQlpZiAobiA8PSAwKSB7Ci0JCSp0ZXJybm8gPSBlcnJubzsKLQkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJyZWFkKHZjKSIsIGVycm5vKTsKLQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCXJldHVybiAoMCk7Ci0JfQotCWlmICh0cnVuY2F0aW5nKSB7Ci0JCS8qCi0JCSAqIEZsdXNoIHJlc3Qgb2YgYW5zd2VyIHNvIGNvbm5lY3Rpb24gc3RheXMgaW4gc3luY2guCi0JCSAqLwotCQlhbmhwLT50YyA9IDE7Ci0JCWxlbiA9IHJlc3BsZW4gLSBhbnNzaXo7Ci0JCXdoaWxlIChsZW4gIT0gMCkgewotCQkJY2hhciBqdW5rW1BBQ0tFVFNaXTsKLQotCQkJbiA9IHJlYWQoc3RhdHAtPl92Y3NvY2ssIGp1bmssCi0JCQkJIChsZW4gPiBzaXplb2YganVuaykgPyBzaXplb2YganVuayA6IGxlbik7Ci0JCQlpZiAobiA+IDApCi0JCQkJbGVuIC09IG47Ci0JCQllbHNlCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JLyoKLQkgKiBJZiB0aGUgY2FsbGluZyBhcHBsaWNhdGluZyBoYXMgYmFpbGVkIG91dCBvZgotCSAqIGEgcHJldmlvdXMgY2FsbCBhbmQgZmFpbGVkIHRvIGFycmFuZ2UgdG8gaGF2ZQotCSAqIHRoZSBjaXJjdWl0IGNsb3NlZCBvciB0aGUgc2VydmVyIGhhcyBnb3QKLQkgKiBpdHNlbGYgY29uZnVzZWQsIHRoZW4gZHJvcCB0aGUgcGFja2V0IGFuZAotCSAqIHdhaXQgZm9yIHRoZSBjb3JyZWN0IG9uZS4KLQkgKi8KLQlpZiAoaHAtPmlkICE9IGFuaHAtPmlkKSB7Ci0JCURwcmludFEoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fAotCQkJKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1JFUExZKSwKLQkJCShzdGRvdXQsICI7OyBvbGQgYW5zd2VyICh1bmV4cGVjdGVkKTpcbiIpLAotCQkJYW5zLCAocmVzcGxlbiA+IGFuc3NpeikgPyBhbnNzaXo6IHJlc3BsZW4pOwotCQlnb3RvIHJlYWRfbGVuOwotCX0KLQotCS8qCi0JICogQWxsIGlzIHdlbGwsIG9yIHRoZSBlcnJvciBpcyBmYXRhbC4gIFNpZ25hbCB0aGF0IHRoZQotCSAqIG5leHQgbmFtZXNlcnZlciBvdWdodCBub3QgYmUgdHJpZWQuCi0JICovCi0JcmV0dXJuIChyZXNwbGVuKTsKLX0KLQotLyogcmV0dXJuIC0xIG9uIGVycm9yIChlcnJubyBzZXQpLCAwIG9uIHN1Y2Nlc3MgKi8KLXN0YXRpYyBpbnQKLWNvbm5lY3Rfd2l0aF90aW1lb3V0KGludCBzb2NrLCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKm5zYXAsIHNvY2tsZW5fdCBzYWxlbiwgaW50IHNlYykKLXsKLQlpbnQgcmVzLCBvcmlnZmxhZ3M7Ci0JZmRfc2V0IHJzZXQsIHdzZXQ7Ci0Jc3RydWN0IHRpbWVzcGVjIG5vdywgdGltZW91dCwgZmluaXNoOwotCi0Jb3JpZ2ZsYWdzID0gZmNudGwoc29jaywgRl9HRVRGTCwgMCk7Ci0JZmNudGwoc29jaywgRl9TRVRGTCwgb3JpZ2ZsYWdzIHwgT19OT05CTE9DSyk7Ci0KLQlyZXMgPSBjb25uZWN0KHNvY2ssIG5zYXAsIHNhbGVuKTsKLQlpZiAocmVzIDwgMCAmJiBlcnJubyAhPSBFSU5QUk9HUkVTUykgewotICAgICAgICAgICAgICAgIHJlcyA9IC0xOwotICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKLQl9Ci0JaWYgKHJlcyAhPSAwKSB7Ci0JCW5vdyA9IGV2Tm93VGltZSgpOwotCQl0aW1lb3V0ID0gZXZDb25zVGltZSgobG9uZylzZWMsIDBMKTsKLQkJZmluaXNoID0gZXZBZGRUaW1lKG5vdywgdGltZW91dCk7Ci0JCWlmIChEQkcpIHsKLQkJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICIgICVkIHNlbmRfdmNcbiIsIHNvY2spOwotCQl9Ci0KLQkJcmVzID0gcmV0cnlpbmdfc2VsZWN0KHNvY2ssICZyc2V0LCAmd3NldCwgJmZpbmlzaCk7Ci0JCWlmIChyZXMgPD0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gLTE7Ci0JCX0KLQl9Ci1kb25lOgotCWZjbnRsKHNvY2ssIEZfU0VURkwsIG9yaWdmbGFncyk7Ci0JaWYgKERCRykgewotCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLAotCQkJIiAgJWQgY29ubmVjdF93aXRoX3RpbWVvdXQgcmV0dXJuaW5nICVkXG4iLCBzb2NrLCByZXMpOwotCX0KLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50Ci1yZXRyeWluZ19zZWxlY3QoY29uc3QgaW50IHNvY2ssIGZkX3NldCAqcmVhZHNldCwgZmRfc2V0ICp3cml0ZXNldCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpmaW5pc2gpCi17Ci0Jc3RydWN0IHRpbWVzcGVjIG5vdywgdGltZW91dDsKLQlpbnQgbiwgZXJyb3I7Ci0Jc29ja2xlbl90IGxlbjsKLQotCi1yZXRyeToKLQlpZiAoREJHKSB7Ci0JCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICIgICVkIHJldHlpbmdfc2VsZWN0XG4iLCBzb2NrKTsKLQl9Ci0KLQlub3cgPSBldk5vd1RpbWUoKTsKLQlpZiAocmVhZHNldCkgewotCQlGRF9aRVJPKHJlYWRzZXQpOwotCQlGRF9TRVQoc29jaywgcmVhZHNldCk7Ci0JfQotCWlmICh3cml0ZXNldCkgewotCQlGRF9aRVJPKHdyaXRlc2V0KTsKLQkJRkRfU0VUKHNvY2ssIHdyaXRlc2V0KTsKLQl9Ci0JaWYgKGV2Q21wVGltZSgqZmluaXNoLCBub3cpID4gMCkKLQkJdGltZW91dCA9IGV2U3ViVGltZSgqZmluaXNoLCBub3cpOwotCWVsc2UKLQkJdGltZW91dCA9IGV2Q29uc1RpbWUoMEwsIDBMKTsKLQotCW4gPSBwc2VsZWN0KHNvY2sgKyAxLCByZWFkc2V0LCB3cml0ZXNldCwgTlVMTCwgJnRpbWVvdXQsIE5VTEwpOwotCWlmIChuID09IDApIHsKLQkJaWYgKERCRykgewotCQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICIgbGliYyIsCi0JCQkJIiAgJWQgcmV0cnlpbmdfc2VsZWN0IHRpbWVvdXRcbiIsIHNvY2spOwotCQl9Ci0JCWVycm5vID0gRVRJTUVET1VUOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKG4gPCAwKSB7Ci0JCWlmIChlcnJubyA9PSBFSU5UUikKLQkJCWdvdG8gcmV0cnk7Ci0JCWlmIChEQkcpIHsKLQkJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsCi0JCQkJIiAgJWQgcmV0cnlpbmdfc2VsZWN0IGdvdCBlcnJvciAlZFxuIixzb2NrLCBuKTsKLQkJfQotCQlyZXR1cm4gbjsKLQl9Ci0JaWYgKChyZWFkc2V0ICYmIEZEX0lTU0VUKHNvY2ssIHJlYWRzZXQpKSB8fCAod3JpdGVzZXQgJiYgRkRfSVNTRVQoc29jaywgd3JpdGVzZXQpKSkgewotCQlsZW4gPSBzaXplb2YoZXJyb3IpOwotCQlpZiAoZ2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19FUlJPUiwgJmVycm9yLCAmbGVuKSA8IDAgfHwgZXJyb3IpIHsKLQkJCWVycm5vID0gZXJyb3I7Ci0JCQlpZiAoREJHKSB7Ci0JCQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwKLQkJCQkJIiAgJWQgcmV0cnlpbmdfc2VsZWN0IGRvdCBlcnJvcjIgJWRcbiIsIHNvY2ssIGVycm5vKTsKLQkJCX0KLQotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCWlmIChEQkcpIHsKLQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwKLQkJCSIgICVkIHJldHJ5aW5nX3NlbGVjdCByZXR1cm5pbmcgJWRcbiIsc29jaywgbik7Ci0JfQotCi0JcmV0dXJuIG47Ci19Ci0KLQotc3RhdGljIGludAotc2VuZF9kZyhyZXNfc3RhdGUgc3RhdHAsCi0JY29uc3QgdV9jaGFyICpidWYsIGludCBidWZsZW4sIHVfY2hhciAqYW5zLCBpbnQgYW5zc2l6LAotCWludCAqdGVycm5vLCBpbnQgbnMsIGludCAqdl9jaXJjdWl0LCBpbnQgKmdvdHNvbWV3aGVyZSkKLXsKLQljb25zdCBIRUFERVIgKmhwID0gKGNvbnN0IEhFQURFUiAqKShjb25zdCB2b2lkICopYnVmOwotCUhFQURFUiAqYW5ocCA9IChIRUFERVIgKikodm9pZCAqKWFuczsKLQljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKm5zYXA7Ci0JaW50IG5zYXBsZW47Ci0Jc3RydWN0IHRpbWVzcGVjIG5vdywgdGltZW91dCwgZmluaXNoOwotCWZkX3NldCBkc21hc2s7Ci0Jc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgZnJvbTsKLQlzb2NrbGVuX3QgZnJvbWxlbjsKLQlpbnQgcmVzcGxlbiwgc2Vjb25kcywgbiwgczsKLQotCW5zYXAgPSBnZXRfbnNhZGRyKHN0YXRwLCAoc2l6ZV90KW5zKTsKLQluc2FwbGVuID0gZ2V0X3NhbGVuKG5zYXApOwotCWlmIChFWFQoc3RhdHApLm5zc29ja3NbbnNdID09IC0xKSB7Ci0JCUVYVChzdGF0cCkubnNzb2Nrc1tuc10gPSBzb2NrZXQobnNhcC0+c2FfZmFtaWx5LCBTT0NLX0RHUkFNLCAwKTsKLQkJaWYgKEVYVChzdGF0cCkubnNzb2Nrc1tuc10gPiBoaWdoZXN0RkQpIHsKLQkJCXJlc19uY2xvc2Uoc3RhdHApOwotCQkJZXJybm8gPSBFTk9UU09DSzsKLQkJfQotCQlpZiAoRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA8IDApIHsKLQkJCXN3aXRjaCAoZXJybm8pIHsKLQkJCWNhc2UgRVBST1RPTk9TVVBQT1JUOgotI2lmZGVmIEVQRk5PU1VQUE9SVAotCQkJY2FzZSBFUEZOT1NVUFBPUlQ6Ci0jZW5kaWYKLQkJCWNhc2UgRUFGTk9TVVBQT1JUOgotCQkJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAic29ja2V0KGRnKSIsIGVycm5vKTsKLQkJCQlyZXR1cm4gKDApOwotCQkJZGVmYXVsdDoKLQkJCQkqdGVycm5vID0gZXJybm87Ci0JCQkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJzb2NrZXQoZGcpIiwgZXJybm8pOwotCQkJCXJldHVybiAoLTEpOwotCQkJfQotCQl9Ci0KLQkJaWYgKHN0YXRwLT5fbWFyayAhPSAwKSB7Ci0JCQlpZiAoc2V0c29ja29wdChFWFQoc3RhdHApLm5zc29ja3NbbnNdLCBTT0xfU09DS0VULAotCQkJCQlTT19NQVJLLCAmKHN0YXRwLT5fbWFyayksIHNpemVvZihzdGF0cC0+X21hcmspKSA8IDApIHsKLQkJCQlyZXNfbmNsb3NlKHN0YXRwKTsKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0JCX0KLSNpZm5kZWYgQ0FOTk9UX0NPTk5FQ1RfREdSQU0KLQkJLyoKLQkJICogT24gYSA0LjNCU0QrIG1hY2hpbmUgKGNsaWVudCBhbmQgc2VydmVyLAotCQkgKiBhY3R1YWxseSksIHNlbmRpbmcgdG8gYSBuYW1lc2VydmVyIGRhdGFncmFtCi0JCSAqIHBvcnQgd2l0aCBubyBuYW1lc2VydmVyIHdpbGwgY2F1c2UgYW4KLQkJICogSUNNUCBwb3J0IHVucmVhY2hhYmxlIG1lc3NhZ2UgdG8gYmUgcmV0dXJuZWQuCi0JCSAqIElmIG91ciBkYXRhZ3JhbSBzb2NrZXQgaXMgImNvbm5lY3RlZCIgdG8gdGhlCi0JCSAqIHNlcnZlciwgd2UgZ2V0IGFuIEVDT05OUkVGVVNFRCBlcnJvciBvbiB0aGUgbmV4dAotCQkgKiBzb2NrZXQgb3BlcmF0aW9uLCBhbmQgc2VsZWN0IHJldHVybnMgaWYgdGhlCi0JCSAqIGVycm9yIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuICBXZSBjYW4gdGh1cyBkZXRlY3QKLQkJICogdGhlIGFic2VuY2Ugb2YgYSBuYW1lc2VydmVyIHdpdGhvdXQgdGltaW5nIG91dC4KLQkJICovCi0JCWlmIChyYW5kb21fYmluZChFWFQoc3RhdHApLm5zc29ja3NbbnNdLCBuc2FwLT5zYV9mYW1pbHkpIDwgMCkgewotCQkJQWVycm9yKHN0YXRwLCBzdGRlcnIsICJiaW5kKGRnKSIsIGVycm5vLCBuc2FwLAotCQkJICAgIG5zYXBsZW4pOwotCQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0JCWlmIChjb25uZWN0KEVYVChzdGF0cCkubnNzb2Nrc1tuc10sIG5zYXAsIChzb2NrbGVuX3QpbnNhcGxlbikgPCAwKSB7Ci0JCQlBZXJyb3Ioc3RhdHAsIHN0ZGVyciwgImNvbm5lY3QoZGcpIiwgZXJybm8sIG5zYXAsCi0JCQkgICAgbnNhcGxlbik7Ci0JCQlyZXNfbmNsb3NlKHN0YXRwKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLSNlbmRpZiAvKiAhQ0FOTk9UX0NPTk5FQ1RfREdSQU0gKi8KLQkJRHByaW50KHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHLAotCQkgICAgICAgKHN0ZG91dCwgIjs7IG5ldyBERyBzb2NrZXRcbiIpKQotCi0JfQotCXMgPSBFWFQoc3RhdHApLm5zc29ja3NbbnNdOwotI2lmbmRlZiBDQU5OT1RfQ09OTkVDVF9ER1JBTQotCWlmIChzZW5kKHMsIChjb25zdCBjaGFyKilidWYsIChzaXplX3QpYnVmbGVuLCAwKSAhPSBidWZsZW4pIHsKLQkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJzZW5kIiwgZXJybm8pOwotCQlyZXNfbmNsb3NlKHN0YXRwKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0jZWxzZSAvKiAhQ0FOTk9UX0NPTk5FQ1RfREdSQU0gKi8KLQlpZiAoc2VuZHRvKHMsIChjb25zdCBjaGFyKilidWYsIGJ1ZmxlbiwgMCwgbnNhcCwgbnNhcGxlbikgIT0gYnVmbGVuKQotCXsKLQkJQWVycm9yKHN0YXRwLCBzdGRlcnIsICJzZW5kdG8iLCBlcnJubywgbnNhcCwgbnNhcGxlbik7Ci0JCXJlc19uY2xvc2Uoc3RhdHApOwotCQlyZXR1cm4gKDApOwotCX0KLSNlbmRpZiAvKiAhQ0FOTk9UX0NPTk5FQ1RfREdSQU0gKi8KLQotCS8qCi0JICogV2FpdCBmb3IgcmVwbHkuCi0JICovCi0Jc2Vjb25kcyA9IGdldF90aW1lb3V0KHN0YXRwLCBucyk7Ci0Jbm93ID0gZXZOb3dUaW1lKCk7Ci0JdGltZW91dCA9IGV2Q29uc1RpbWUoKGxvbmcpc2Vjb25kcywgMEwpOwotCWZpbmlzaCA9IGV2QWRkVGltZShub3csIHRpbWVvdXQpOwotcmV0cnk6Ci0JbiA9IHJldHJ5aW5nX3NlbGVjdChzLCAmZHNtYXNrLCBOVUxMLCAmZmluaXNoKTsKLQotCWlmIChuID09IDApIHsKLQkJRHByaW50KHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHLCAoc3Rkb3V0LCAiOzsgdGltZW91dFxuIikpOwotCQkqZ290c29tZXdoZXJlID0gMTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JaWYgKG4gPCAwKSB7Ci0JCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAic2VsZWN0IiwgZXJybm8pOwotCQlyZXNfbmNsb3NlKHN0YXRwKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JZXJybm8gPSAwOwotCWZyb21sZW4gPSBzaXplb2YoZnJvbSk7Ci0JcmVzcGxlbiA9IHJlY3Zmcm9tKHMsIChjaGFyKilhbnMsIChzaXplX3QpYW5zc2l6LDAsCi0JCQkgICAoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikmZnJvbSwgJmZyb21sZW4pOwotCWlmIChyZXNwbGVuIDw9IDApIHsKLQkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJyZWN2ZnJvbSIsIGVycm5vKTsKLQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCXJldHVybiAoMCk7Ci0JfQotCSpnb3Rzb21ld2hlcmUgPSAxOwotCWlmIChyZXNwbGVuIDwgSEZJWEVEU1opIHsKLQkJLyoKLQkJICogVW5kZXJzaXplZCBtZXNzYWdlLgotCQkgKi8KLQkJRHByaW50KHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHLAotCQkgICAgICAgKHN0ZG91dCwgIjs7IHVuZGVyc2l6ZWQ6ICVkXG4iLAotCQkJcmVzcGxlbikpOwotCQkqdGVycm5vID0gRU1TR1NJWkU7Ci0JCXJlc19uY2xvc2Uoc3RhdHApOwotCQlyZXR1cm4gKDApOwotCX0KLQlpZiAoaHAtPmlkICE9IGFuaHAtPmlkKSB7Ci0JCS8qCi0JCSAqIHJlc3BvbnNlIGZyb20gb2xkIHF1ZXJ5LCBpZ25vcmUgaXQuCi0JCSAqIFhYWCAtIHBvdGVudGlhbCBzZWN1cml0eSBoYXphcmQgY291bGQKLQkJICoJIGJlIGRldGVjdGVkIGhlcmUuCi0JCSAqLwotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotCQlfX2xpYmNfYW5kcm9pZF9sb2dfZXZlbnRfdWlkKEJJT05JQ19FVkVOVF9SRVNPTFZFUl9PTERfUkVTUE9OU0UpOwotI2VuZGlmCi0JCURwcmludFEoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fAotCQkJKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1JFUExZKSwKLQkJCShzdGRvdXQsICI7OyBvbGQgYW5zd2VyOlxuIiksCi0JCQlhbnMsIChyZXNwbGVuID4gYW5zc2l6KSA/IGFuc3NpeiA6IHJlc3BsZW4pOwotCQlnb3RvIHJldHJ5OwotCX0KLQlpZiAoIShzdGF0cC0+b3B0aW9ucyAmIFJFU19JTlNFQ1VSRTEpICYmCi0JICAgICFyZXNfb3Vyc2VydmVyX3Aoc3RhdHAsIChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZmcm9tKSkgewotCQkvKgotCQkgKiByZXNwb25zZSBmcm9tIHdyb25nIHNlcnZlcj8gaWdub3JlIGl0LgotCQkgKiBYWFggLSBwb3RlbnRpYWwgc2VjdXJpdHkgaGF6YXJkIGNvdWxkCi0JCSAqCSBiZSBkZXRlY3RlZCBoZXJlLgotCQkgKi8KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLQkJX19saWJjX2FuZHJvaWRfbG9nX2V2ZW50X3VpZChCSU9OSUNfRVZFTlRfUkVTT0xWRVJfV1JPTkdfU0VSVkVSKTsKLSNlbmRpZgotCQlEcHJpbnRRKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgfHwKLQkJCShzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9SRVBMWSksCi0JCQkoc3Rkb3V0LCAiOzsgbm90IG91ciBzZXJ2ZXI6XG4iKSwKLQkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6IDogcmVzcGxlbik7Ci0JCWdvdG8gcmV0cnk7Ci0JfQotI2lmZGVmIFJFU19VU0VfRUROUzAKLQlpZiAoYW5ocC0+cmNvZGUgPT0gRk9STUVSUiAmJiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfVVNFX0VETlMwKSAhPSAwVSkgewotCQkvKgotCQkgKiBEbyBub3QgcmV0cnkgaWYgdGhlIHNlcnZlciBkbyBub3QgdW5kZXJzdGFuZCBFRE5TMC4KLQkJICogVGhlIGNhc2UgaGFzIHRvIGJlIGNhcHR1cmVkIGhlcmUsIGFzIEZPUk1FUlIgcGFja2V0IGRvIG5vdAotCQkgKiBjYXJyeSBxdWVyeSBzZWN0aW9uLCBoZW5jZSByZXNfcXVlcmllc21hdGNoKCkgcmV0dXJucyAwLgotCQkgKi8KLQkJRHByaW50UShzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywKLQkJCShzdGRvdXQsICJzZXJ2ZXIgcmVqZWN0ZWQgcXVlcnkgd2l0aCBFRE5TMDpcbiIpLAotCQkJYW5zLCAocmVzcGxlbiA+IGFuc3NpeikgPyBhbnNzaXogOiByZXNwbGVuKTsKLQkJLyogcmVjb3JkIHRoZSBlcnJvciAqLwotCQlzdGF0cC0+X2ZsYWdzIHw9IFJFU19GX0VETlMwRVJSOwotCQlyZXNfbmNsb3NlKHN0YXRwKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0jZW5kaWYKLQlpZiAoIShzdGF0cC0+b3B0aW9ucyAmIFJFU19JTlNFQ1VSRTIpICYmCi0JICAgICFyZXNfcXVlcmllc21hdGNoKGJ1ZiwgYnVmICsgYnVmbGVuLAotCQkJICAgICAgYW5zLCBhbnMgKyBhbnNzaXopKSB7Ci0JCS8qCi0JCSAqIHJlc3BvbnNlIGNvbnRhaW5zIHdyb25nIHF1ZXJ5PyBpZ25vcmUgaXQuCi0JCSAqIFhYWCAtIHBvdGVudGlhbCBzZWN1cml0eSBoYXphcmQgY291bGQKLQkJICoJIGJlIGRldGVjdGVkIGhlcmUuCi0JCSAqLwotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotCQlfX2xpYmNfYW5kcm9pZF9sb2dfZXZlbnRfdWlkKEJJT05JQ19FVkVOVF9SRVNPTFZFUl9XUk9OR19RVUVSWSk7Ci0jZW5kaWYKLQkJRHByaW50USgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpIHx8Ci0JCQkoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfUkVQTFkpLAotCQkJKHN0ZG91dCwgIjs7IHdyb25nIHF1ZXJ5IG5hbWU6XG4iKSwKLQkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6IDogcmVzcGxlbik7Ci0JCWdvdG8gcmV0cnk7OwotCX0KLQlpZiAoYW5ocC0+cmNvZGUgPT0gU0VSVkZBSUwgfHwKLQkgICAgYW5ocC0+cmNvZGUgPT0gTk9USU1QIHx8Ci0JICAgIGFuaHAtPnJjb2RlID09IFJFRlVTRUQpIHsKLQkJRHByaW50UShzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywKLQkJCShzdGRvdXQsICJzZXJ2ZXIgcmVqZWN0ZWQgcXVlcnk6XG4iKSwKLQkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6IDogcmVzcGxlbik7Ci0JCXJlc19uY2xvc2Uoc3RhdHApOwotCQkvKiBkb24ndCByZXRyeSBpZiBjYWxsZWQgZnJvbSBkaWcgKi8KLQkJaWYgKCFzdGF0cC0+cGZjb2RlKQotCQkJcmV0dXJuICgwKTsKLQl9Ci0JaWYgKCEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfSUdOVEMpICYmIGFuaHAtPnRjKSB7Ci0JCS8qCi0JCSAqIFRvIGdldCB0aGUgcmVzdCBvZiBhbnN3ZXIsCi0JCSAqIHVzZSBUQ1Agd2l0aCBzYW1lIHNlcnZlci4KLQkJICovCi0JCURwcmludChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywKLQkJICAgICAgIChzdGRvdXQsICI7OyB0cnVuY2F0ZWQgYW5zd2VyXG4iKSk7Ci0JCSp2X2NpcmN1aXQgPSAxOwotCQlyZXNfbmNsb3NlKHN0YXRwKTsKLQkJcmV0dXJuICgxKTsKLQl9Ci0JLyoKLQkgKiBBbGwgaXMgd2VsbCwgb3IgdGhlIGVycm9yIGlzIGZhdGFsLiAgU2lnbmFsIHRoYXQgdGhlCi0JICogbmV4dCBuYW1lc2VydmVyIG91Z2h0IG5vdCBiZSB0cmllZC4KLQkgKi8KLQlyZXR1cm4gKHJlc3BsZW4pOwotfQotCi1zdGF0aWMgdm9pZAotQWVycm9yKGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwgRklMRSAqZmlsZSwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZXJyb3IsCi0gICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLCBpbnQgYWxlbikKLXsKLQlpbnQgc2F2ZSA9IGVycm5vOwotCWNoYXIgaGJ1ZltOSV9NQVhIT1NUXTsKLQljaGFyIHNidWZbTklfTUFYU0VSVl07Ci0KLQlhbGVuID0gYWxlbjsKLQotCWlmICgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpICE9IDBVKSB7Ci0JCWlmIChnZXRuYW1laW5mbyhhZGRyZXNzLCAoc29ja2xlbl90KWFsZW4sIGhidWYsIHNpemVvZihoYnVmKSwKLQkJICAgIHNidWYsIHNpemVvZihzYnVmKSwgbmlmbGFncykpIHsKLQkJCXN0cm5jcHkoaGJ1ZiwgIj8iLCBzaXplb2YoaGJ1ZikgLSAxKTsKLQkJCWhidWZbc2l6ZW9mKGhidWYpIC0gMV0gPSAnXDAnOwotCQkJc3RybmNweShzYnVmLCAiPyIsIHNpemVvZihzYnVmKSAtIDEpOwotCQkJc2J1ZltzaXplb2Yoc2J1ZikgLSAxXSA9ICdcMCc7Ci0JCX0KLQkJZnByaW50ZihmaWxlLCAicmVzX3NlbmQ6ICVzIChbJXNdLiVzKTogJXNcbiIsCi0JCQlzdHJpbmcsIGhidWYsIHNidWYsIHN0cmVycm9yKGVycm9yKSk7Ci0JfQotCWVycm5vID0gc2F2ZTsKLX0KLQotc3RhdGljIHZvaWQKLVBlcnJvcihjb25zdCByZXNfc3RhdGUgc3RhdHAsIEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGVycm9yKSB7Ci0JaW50IHNhdmUgPSBlcnJubzsKLQotCWlmICgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpICE9IDBVKQotCQlmcHJpbnRmKGZpbGUsICJyZXNfc2VuZDogJXM6ICVzXG4iLAotCQkJc3RyaW5nLCBzdHJlcnJvcihlcnJvcikpOwotCWVycm5vID0gc2F2ZTsKLX0KLQotc3RhdGljIGludAotc29ja19lcShzdHJ1Y3Qgc29ja2FkZHIgKmEsIHN0cnVjdCBzb2NrYWRkciAqYikgewotCXN0cnVjdCBzb2NrYWRkcl9pbiAqYTQsICpiNDsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICphNiwgKmI2OwotCi0JaWYgKGEtPnNhX2ZhbWlseSAhPSBiLT5zYV9mYW1pbHkpCi0JCXJldHVybiAwOwotCXN3aXRjaCAoYS0+c2FfZmFtaWx5KSB7Ci0JY2FzZSBBRl9JTkVUOgotCQlhNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikodm9pZCAqKWE7Ci0JCWI0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSh2b2lkICopYjsKLQkJcmV0dXJuIGE0LT5zaW5fcG9ydCA9PSBiNC0+c2luX3BvcnQgJiYKLQkJICAgIGE0LT5zaW5fYWRkci5zX2FkZHIgPT0gYjQtPnNpbl9hZGRyLnNfYWRkcjsKLQljYXNlIEFGX0lORVQ2OgotCQlhNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKHZvaWQgKilhOwotCQliNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKHZvaWQgKiliOwotCQlyZXR1cm4gYTYtPnNpbjZfcG9ydCA9PSBiNi0+c2luNl9wb3J0ICYmCi0jaWZkZWYgSEFWRV9TSU42X1NDT1BFX0lECi0JCSAgICBhNi0+c2luNl9zY29wZV9pZCA9PSBiNi0+c2luNl9zY29wZV9pZCAmJgotI2VuZGlmCi0JCSAgICBJTjZfQVJFX0FERFJfRVFVQUwoJmE2LT5zaW42X2FkZHIsICZiNi0+c2luNl9hZGRyKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLSNpZmRlZiBORUVEX1BTRUxFQ1QKLS8qIFhYWCBuZWVkcyB0byBtb3ZlIHRvIHRoZSBwb3J0aW5nIGxpYnJhcnkuICovCi1zdGF0aWMgaW50Ci1wc2VsZWN0KGludCBuZmRzLCB2b2lkICpyZmRzLCB2b2lkICp3ZmRzLCB2b2lkICplZmRzLAotCXN0cnVjdCB0aW1lc3BlYyAqdHNwLCBjb25zdCBzaWdzZXRfdCAqc2lnbWFzaykKLXsKLQlzdHJ1Y3QgdGltZXZhbCB0diwgKnR2cDsKLQlzaWdzZXRfdCBzaWdzOwotCWludCBuOwotCi0JaWYgKHRzcCkgewotCQl0dnAgPSAmdHY7Ci0JCXR2ID0gZXZUaW1lVmFsKCp0c3ApOwotCX0gZWxzZQotCQl0dnAgPSBOVUxMOwotCWlmIChzaWdtYXNrKQotCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgc2lnbWFzaywgJnNpZ3MpOwotCW4gPSBzZWxlY3QobmZkcywgcmZkcywgd2ZkcywgZWZkcywgdHZwKTsKLQlpZiAoc2lnbWFzaykKLQkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZzaWdzLCBOVUxMKTsKLQlpZiAodHNwKQotCQkqdHNwID0gZXZUaW1lU3BlYyh0dik7Ci0JcmV0dXJuIChuKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zdGF0ZS5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zdGF0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWQwMWExLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfc3RhdGUuYworKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2luY2x1ZGUgInJlc29sdl9jYWNoZS5oIgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2RlZmluZSBfUkVBTExZX0lOQ0xVREVfU1lTX19TWVNURU1fUFJPUEVSVElFU19IXwotI2luY2x1ZGUgPHN5cy9fc3lzdGVtX3Byb3BlcnRpZXMuaD4KLQotLyogU2V0IHRvIDEgdG8gZW5hYmxlIGRlYnVnIHRyYWNlcyAqLwotI2RlZmluZSBERUJVRyAwCi0KLSNpZiBERUJVRwotIyAgaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgLyogZm9yIGdldHRpZCgpICovCi0jICBkZWZpbmUgRCguLi4pIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCJsaWJjIiwgX19WQV9BUkdTX18pCi0jZWxzZQotIyAgZGVmaW5lIEQoLi4uKSAgZG97fXdoaWxlKDApCi0jZW5kaWYKLQotc3RhdGljIHB0aHJlYWRfa2V5X3QgICBfcmVzX2tleTsKLXN0YXRpYyBwdGhyZWFkX29uY2VfdCAgX3Jlc19vbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBpbnQgICAgICAgICAgICAgICAgICBfaF9lcnJubzsKLSAgICBzdHJ1Y3QgX19yZXNfc3RhdGUgIF9ucmVzWzFdOwotICAgIHVuc2lnbmVkICAgICAgICAgICAgIF9zZXJpYWw7Ci0gICAgc3RydWN0IHByb3BfaW5mbyogICBfcGk7Ci0gICAgc3RydWN0IHJlc19zdGF0aWMgICBfcnN0YXRpY1sxXTsKLX0gX3Jlc190aHJlYWQ7Ci0KLXN0YXRpYyBfcmVzX3RocmVhZCoKLV9yZXNfdGhyZWFkX2FsbG9jKHZvaWQpCi17Ci0gICAgX3Jlc190aHJlYWQqICBydCA9IGNhbGxvYygxLCBzaXplb2YoKnJ0KSk7Ci0KLSAgICBpZiAocnQpIHsKLSAgICAgICAgcnQtPl9oX2Vycm5vID0gMDsKLSAgICAgICAgLyogU3BlY2lhbCBzeXN0ZW0gcHJvcGVydHkgd2hpY2ggdHJhY2tzIGFueSBjaGFuZ2VzIHRvICduZXQuKicuICovCi0gICAgICAgIHJ0LT5fc2VyaWFsID0gMDsKLSAgICAgICAgcnQtPl9waSA9IChzdHJ1Y3QgcHJvcF9pbmZvKikgX19zeXN0ZW1fcHJvcGVydHlfZmluZCgibmV0LmNoYW5nZSIpOwotICAgICAgICBpZiAocnQtPl9waSkgewotICAgICAgICAgICAgcnQtPl9zZXJpYWwgPSBfX3N5c3RlbV9wcm9wZXJ0eV9zZXJpYWwocnQtPl9waSk7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtc2V0KHJ0LT5fcnN0YXRpYywgMCwgc2l6ZW9mIHJ0LT5fcnN0YXRpYyk7Ci0gICAgfQotICAgIHJldHVybiBydDsKLX0KLQotc3RhdGljIHZvaWQKLV9yZXNfc3RhdGljX2RvbmUoIHJlc19zdGF0aWMgIHJzICkKLXsKLSAgICAvKiBmb3J0dW5hdGVseSwgdGhlcmUgaXMgbm90aGluZyB0byBkbyBoZXJlLCBzaW5jZSB0aGUKLSAgICAgKiBwb2ludHMgaW4gaF9hZGRyX3B0cnMgYW5kIGhvc3RfYWxpYXNlcyBzaG91bGQgYWxsCi0gICAgICogcG9pbnQgdG8gJ2hvc3RidWYnCi0gICAgICovCi0gICAgaWYgKHJzLT5ob3N0ZikgeyAgLyogc2hvdWxkIG5vdCBoYXBwZW4gaW4gdGhlb3J5LCBidXQganVzdCBiZSBzYWZlICovCi0gICAgICAgIGZjbG9zZShycy0+aG9zdGYpOwotICAgICAgICBycy0+aG9zdGYgPSBOVUxMOwotICAgIH0KLSAgICBmcmVlKHJzLT5zZXJ2ZW50LnNfYWxpYXNlcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fcmVzX3RocmVhZF9mcmVlKCB2b2lkKiAgX3J0ICkKLXsKLSAgICBfcmVzX3RocmVhZCogIHJ0ID0gX3J0OwotCi0gICAgRCgiJXM6IHJ0PSVwIGZvciB0aHJlYWQ9JWQiLCBfX0ZVTkNUSU9OX18sIHJ0LCBnZXR0aWQoKSk7Ci0KLSAgICBfcmVzX3N0YXRpY19kb25lKHJ0LT5fcnN0YXRpYyk7Ci0gICAgcmVzX25kZXN0cm95KHJ0LT5fbnJlcyk7Ci0gICAgZnJlZShydCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fcmVzX2luaXRfa2V5KCB2b2lkICkKLXsKLSAgICBwdGhyZWFkX2tleV9jcmVhdGUoICZfcmVzX2tleSwgX3Jlc190aHJlYWRfZnJlZSApOwotfQotCi1zdGF0aWMgX3Jlc190aHJlYWQqCi1fcmVzX3RocmVhZF9nZXQodm9pZCkKLXsKLSAgICBfcmVzX3RocmVhZCogIHJ0OwotICAgIHB0aHJlYWRfb25jZSggJl9yZXNfb25jZSwgX3Jlc19pbml0X2tleSApOwotICAgIHJ0ID0gcHRocmVhZF9nZXRzcGVjaWZpYyggX3Jlc19rZXkgKTsKLQotICAgIGlmIChydCAhPSBOVUxMKSB7Ci0gICAgICAgIC8qIFdlIGFscmVhZHkgaGF2ZSBvbmUgdGhyZWFkLXNwZWNpZmljIEROUyBzdGF0ZSBvYmplY3QuCi0gICAgICAgICAqIENoZWNrIHRoZSBzZXJpYWwgdmFsdWUgZm9yIGFueSBjaGFuZ2VzIHRvIG5ldC4qIHByb3BlcnRpZXMgKi8KLSAgICAgICAgRCgiJXM6IENhbGxlZCBmb3IgdGlkPSVkIHJ0PSVwIHJ0LT5waT0lcCBydC0+c2VyaWFsPSVkIiwKLSAgICAgICAgICAgX19GVU5DVElPTl9fLCBnZXR0aWQoKSwgcnQsIHJ0LT5fcGksIHJ0LT5fc2VyaWFsKTsKLSAgICAgICAgaWYgKHJ0LT5fcGkgPT0gTlVMTCkgewotICAgICAgICAgICAgLyogVGhlIHByb3BlcnR5IHdhc24ndCBjcmVhdGVkIHdoZW4gX3Jlc190aHJlYWRfZ2V0KCkgd2FzCi0gICAgICAgICAgICAgKiBjYWxsZWQgdGhlIGxhc3QgdGltZS4gVGhpcyBzaG91bGQgb25seSBoYXBwZW4gdmVyeQotICAgICAgICAgICAgICogZWFybHkgZHVyaW5nIHRoZSBib290IHNlcXVlbmNlLiBGaXJzdCwgbGV0J3MgdHJ5IHRvIHNlZSBpZiBpdAotICAgICAgICAgICAgICogaXMgaGVyZSBub3cuICovCi0gICAgICAgICAgICBydC0+X3BpID0gKHN0cnVjdCBwcm9wX2luZm8qKSBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKCJuZXQuY2hhbmdlIik7Ci0gICAgICAgICAgICBpZiAocnQtPl9waSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgLyogU3RpbGwgbm90aGluZywgcmV0dXJuIGN1cnJlbnQgc3RhdGUgKi8KLSAgICAgICAgICAgICAgICBEKCIlczogZXhpdGluZyBmb3IgdGlkPSVkIHJ0PSVkIHNpbmNlIHN5c3RlbSBwcm9wZXJ0eSBub3QgZm91bmQiLAotICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBnZXR0aWQoKSwgcnQpOwotICAgICAgICAgICAgICAgIHJldHVybiBydDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocnQtPl9zZXJpYWwgPT0gX19zeXN0ZW1fcHJvcGVydHlfc2VyaWFsKHJ0LT5fcGkpKSB7Ci0gICAgICAgICAgICAvKiBOb3RoaW5nIGNoYW5nZWQsIHNvIHJldHVybiB0aGUgY3VycmVudCBzdGF0ZSAqLwotICAgICAgICAgICAgRCgiJXM6IHRpZD0lZCBydD0lcCBub3RoaW5nIGNoYW5nZWQsIHJldHVybmluZyIsCi0gICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZ2V0dGlkKCksIHJ0KTsKLSAgICAgICAgICAgIHJldHVybiBydDsKLSAgICAgICAgfQotICAgICAgICAvKiBVcGRhdGUgdGhlIHJlY29yZGVkIHNlcmlhbCBudW1iZXIsIGFuZCBnbyByZXNldCB0aGUgc3RhdGUgKi8KLSAgICAgICAgcnQtPl9zZXJpYWwgPSBfX3N5c3RlbV9wcm9wZXJ0eV9zZXJpYWwocnQtPl9waSk7Ci0gICAgICAgIGdvdG8gUkVTRVRfU1RBVEU7Ci0gICAgfQotCi0gICAgLyogSXQgaXMgdGhlIGZpcnN0IHRpbWUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gdGhpcyB0aHJlYWQsCi0gICAgICogd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgdGhyZWFkLXNwZWNpZmljIEROUyByZXNvbHZlciBzdGF0ZS4gKi8KLSAgICBydCA9IF9yZXNfdGhyZWFkX2FsbG9jKCk7Ci0gICAgaWYgKHJ0ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMoIF9yZXNfa2V5LCBydCApOwotICAgIEQoIiVzOiB0aWQ9JWQgQ3JlYXRlZCBuZXcgRE5TIHN0YXRlIHJ0PSVwIiwKLSAgICAgIF9fRlVOQ1RJT05fXywgZ2V0dGlkKCksIHJ0KTsKLQotUkVTRVRfU1RBVEU6Ci0gICAgLyogUmVzZXQgdGhlIHN0YXRlLCBub3RlIHRoYXQgcmVzX25pbml0KCkgY2FuIG5vdyBwcm9wZXJseSByZXNldAotICAgICAqIGFuIGV4aXN0aW5nIHN0YXRlIHdpdGhvdXQgbGVha2luZyBtZW1vcnkuCi0gICAgICovCi0gICAgRCgiJXM6IHRpZD0lZCwgcnQ9JXAsIHJlc2V0dGluZyBETlMgc3RhdGUgKG9wdGlvbnMgUkVTX0lOSVQ9JWQpIiwKLSAgICAgIF9fRlVOQ1RJT05fXywgZ2V0dGlkKCksIHJ0LCAocnQtPl9ucmVzLT5vcHRpb25zICYgUkVTX0lOSVQpICE9IDApOwotICAgIGlmICggcmVzX25pbml0KCBydC0+X25yZXMgKSA8IDAgKSB7Ci0gICAgICAgIC8qIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KLSAgICAgICAgRCgiJXM6IHRpZD0lZCBydD0lcCwgd29vdCwgcmVzX25pbml0KCkgcmV0dXJuZWQgPCAwIiwKLSAgICAgICAgICBfX0ZVTkNUSU9OX18sIGdldHRpZCgpLCBydCk7Ci0gICAgICAgIF9yZXNfdGhyZWFkX2ZyZWUocnQpOwotICAgICAgICBwdGhyZWFkX3NldHNwZWNpZmljKCBfcmVzX2tleSwgTlVMTCApOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIHJ0OwotfQotCi1fX0xJQkNfSElEREVOX18KLXN0cnVjdCBfX3Jlc19zdGF0ZSBfbnJlczsKLQotI2lmIDAKLXN0cnVjdCByZXNvbHZfY2FjaGUqCi1fX2dldF9yZXNfY2FjaGUodm9pZCkKLXsKLSAgICBfcmVzX3RocmVhZCogIHJ0ID0gX3Jlc190aHJlYWRfZ2V0KCk7Ci0KLSAgICBpZiAoIXJ0KQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmICghcnQtPl9jYWNoZSkgewotICAgICAgICBydC0+X2NhY2hlID0gX3Jlc29sdl9jYWNoZV9jcmVhdGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJ0LT5fY2FjaGU7Ci19Ci0jZW5kaWYKLQotaW50KgotX19nZXRfaF9lcnJubyh2b2lkKQotewotICAgIF9yZXNfdGhyZWFkKiAgcnQgICAgPSBfcmVzX3RocmVhZF9nZXQoKTsKLSAgICBzdGF0aWMgaW50ICAgIHBhbmljID0gTkVUREJfSU5URVJOQUw7Ci0KLSAgICByZXR1cm4gcnQgPyAmcnQtPl9oX2Vycm5vIDogJnBhbmljOwotfQotCi1yZXNfc3RhdGUKLV9fcmVzX2dldF9zdGF0ZSh2b2lkKQotewotICAgIF9yZXNfdGhyZWFkKiAgcnQgPSBfcmVzX3RocmVhZF9nZXQoKTsKLQotICAgIHJldHVybiBydCA/IHJ0LT5fbnJlcyA6IE5VTEw7Ci19Ci0KLXZvaWQKLV9fcmVzX3B1dF9zdGF0ZShyZXNfc3RhdGUgcmVzKQotewotICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KLSAgICByZXM9cmVzOwotfQotCi1yZXNfc3RhdGljCi1fX3Jlc19nZXRfc3RhdGljKHZvaWQpCi17Ci0gICAgX3Jlc190aHJlYWQqICBydCA9IF9yZXNfdGhyZWFkX2dldCgpOwotCi0gICAgcmV0dXJuIHJ0ID8gcnQtPl9yc3RhdGljIDogTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9FcnJub1Jlc3RvcmVyLmggYi9saWJjL3ByaXZhdGUvRXJybm9SZXN0b3Jlci5oCmluZGV4IGVkNmFiNjIuLmY0NjczOTMgMTAwNjQ0Ci0tLSBhL2xpYmMvcHJpdmF0ZS9FcnJub1Jlc3RvcmVyLmgKKysrIGIvbGliYy9wcml2YXRlL0Vycm5vUmVzdG9yZXIuaApAQCAtMTksNiArMTksOCBAQAogCiAjaW5jbHVkZSA8ZXJybm8uaD4KIAorI2luY2x1ZGUgImJpb25pY19tYWNyb3MuaCIKKwogY2xhc3MgRXJybm9SZXN0b3JlciB7CiAgcHVibGljOgogICBleHBsaWNpdCBFcnJub1Jlc3RvcmVyKCkgOiBzYXZlZF9lcnJub18oZXJybm8pIHsKQEAgLTM1LDkgKzM3LDcgQEAKICBwcml2YXRlOgogICBpbnQgc2F2ZWRfZXJybm9fOwogCi0gIC8vIERpc2FsbG93IGNvcHkgYW5kIGFzc2lnbm1lbnQuCi0gIEVycm5vUmVzdG9yZXIoY29uc3QgRXJybm9SZXN0b3JlciYpOwotICB2b2lkIG9wZXJhdG9yPShjb25zdCBFcnJub1Jlc3RvcmVyJik7CisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFcnJub1Jlc3RvcmVyKTsKIH07CiAKICNlbmRpZiAvLyBFUlJOT19SRVNUT1JFUl9ICmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvS2VybmVsQXJndW1lbnRCbG9jay5oIGIvbGliYy9wcml2YXRlL0tlcm5lbEFyZ3VtZW50QmxvY2suaAppbmRleCAxMDU5NjVlLi5jOGVhNDk3IDEwMDY0NAotLS0gYS9saWJjL3ByaXZhdGUvS2VybmVsQXJndW1lbnRCbG9jay5oCisrKyBiL2xpYmMvcHJpdmF0ZS9LZXJuZWxBcmd1bWVudEJsb2NrLmgKQEAgLTE4LDkgKzE4LDEyIEBACiAjZGVmaW5lIEtFUk5FTF9BUkdVTUVOVF9CTE9DS19ICiAKICNpbmNsdWRlIDxlbGYuaD4KKyNpbmNsdWRlIDxsaW5rLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3lzL2F1eHYuaD4KIAorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX21hY3Jvcy5oIgorCiBzdHJ1Y3QgYWJvcnRfbXNnX3Q7CiAKIC8vIFdoZW4gdGhlIGtlcm5lbCBzdGFydHMgdGhlIGR5bmFtaWMgbGlua2VyLCBpdCBwYXNzZXMgYSBwb2ludGVyIHRvIGEgYmxvY2sKQEAgLTQzLDE0ICs0NiwxNCBAQAogICAgIH0KICAgICArK3A7IC8vIFNraXAgc2Vjb25kIE5VTEw7CiAKLSAgICBhdXh2ID0gcmVpbnRlcnByZXRfY2FzdDxFbGZfYXV4dl90Kj4ocCk7CisgICAgYXV4diA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhhdXh2X3QpKj4ocCk7CiAgIH0KIAogICAvLyBTaW1pbGFyIHRvIDo6Z2V0YXV4dmFsIGJ1dCBkb2Vzbid0IHJlcXVpcmUgdGhlIGxpYmMgZ2xvYmFsIHZhcmlhYmxlcyB0byBiZSBzZXQgdXAsCiAgIC8vIHNvIGl0J3Mgc2FmZSB0byBjYWxsIHRoaXMgcmVhbGx5IGVhcmx5IG9uLiBUaGlzIGZ1bmN0aW9uIGFsc28gbGV0cyB5b3UgZGlzdGluZ3Vpc2gKICAgLy8gYmV0d2VlbiB0aGUgaW5hYmlsaXR5IHRvIGZpbmQgdGhlIGdpdmVuIHR5cGUgYW5kIGl0cyB2YWx1ZSBqdXN0IGhhcHBlbmluZyB0byBiZSAwLgogICB1bnNpZ25lZCBsb25nIGdldGF1eHZhbCh1bnNpZ25lZCBsb25nIHR5cGUsIGJvb2wqIGZvdW5kX21hdGNoID0gTlVMTCkgewotICAgIGZvciAoRWxmX2F1eHZfdCogdiA9IGF1eHY7IHYtPmFfdHlwZSAhPSBBVF9OVUxMOyArK3YpIHsKKyAgICBmb3IgKEVsZlcoYXV4dl90KSogdiA9IGF1eHY7IHYtPmFfdHlwZSAhPSBBVF9OVUxMOyArK3YpIHsKICAgICAgIGlmICh2LT5hX3R5cGUgPT0gdHlwZSkgewogICAgICAgICBpZiAoZm91bmRfbWF0Y2ggIT0gTlVMTCkgewogICAgICAgICAgICAgKmZvdW5kX21hdGNoID0gdHJ1ZTsKQEAgLTY3LDE0ICs3MCwxMiBAQAogICBpbnQgYXJnYzsKICAgY2hhcioqIGFyZ3Y7CiAgIGNoYXIqKiBlbnZwOwotICBFbGZfYXV4dl90KiBhdXh2OworICBFbGZXKGF1eHZfdCkqIGF1eHY7CiAKICAgYWJvcnRfbXNnX3QqKiBhYm9ydF9tZXNzYWdlX3B0cjsKIAogIHByaXZhdGU6Ci0gIC8vIERpc2FsbG93IGNvcHkgYW5kIGFzc2lnbm1lbnQuCi0gIEtlcm5lbEFyZ3VtZW50QmxvY2soY29uc3QgS2VybmVsQXJndW1lbnRCbG9jayYpOwotICB2b2lkIG9wZXJhdG9yPShjb25zdCBLZXJuZWxBcmd1bWVudEJsb2NrJik7CisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihLZXJuZWxBcmd1bWVudEJsb2NrKTsKIH07CiAKICNlbmRpZiAvLyBLRVJORUxfQVJHVU1FTlRfQkxPQ0tfSApkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL05ldGRDbGllbnREaXNwYXRjaC5oIGIvbGliYy9wcml2YXRlL05ldGRDbGllbnREaXNwYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkODk0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvTmV0ZENsaWVudERpc3BhdGNoLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgUFJJVkFURV9ORVREX0NMSUVOVF9ESVNQQVRDSF9ICisjZGVmaW5lIFBSSVZBVEVfTkVURF9DTElFTlRfRElTUEFUQ0hfSAorCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCitfX0JFR0lOX0RFQ0xTCisKK3N0cnVjdCBOZXRkQ2xpZW50RGlzcGF0Y2ggeworICAgIGludCAoKmFjY2VwdDQpKGludCwgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KiwgaW50KTsKKyAgICBpbnQgKCpjb25uZWN0KShpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCk7CisgICAgaW50ICgqc29ja2V0KShpbnQsIGludCwgaW50KTsKKyAgICB1bnNpZ25lZCAoKm5ldElkRm9yUmVzb2x2KSh1bnNpZ25lZCk7Cit9OworCitleHRlcm4gX19MSUJDX0hJRERFTl9fIHN0cnVjdCBOZXRkQ2xpZW50RGlzcGF0Y2ggX19uZXRkQ2xpZW50RGlzcGF0Y2g7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAgLy8gUFJJVkFURV9ORVREX0NMSUVOVF9ESVNQQVRDSF9ICmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvU2NvcGVHdWFyZC5oIGIvbGliYy9wcml2YXRlL1Njb3BlR3VhcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODNlMzIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL1Njb3BlR3VhcmQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBTQ09QRV9HVUFSRF9ICisjZGVmaW5lIFNDT1BFX0dVQVJEX0gKKworLy8gVE9ETzogaW5jbHVkZSBleHBsaWNpdCBzdGQ6Om1vdmUgd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZQordGVtcGxhdGU8dHlwZW5hbWUgRj4KK2NsYXNzIFNjb3BlR3VhcmQgeworIHB1YmxpYzoKKyAgU2NvcGVHdWFyZChGIGYpIDogZl8oZiksIGFjdGl2ZV8odHJ1ZSkge30KKworICBTY29wZUd1YXJkKFNjb3BlR3VhcmQmJiB0aGF0KSA6IGZfKHRoYXQuZl8pLCBhY3RpdmVfKHRoYXQuYWN0aXZlXykgeworICAgIHRoYXQuYWN0aXZlXyA9IGZhbHNlOworICB9CisKKyAgflNjb3BlR3VhcmQoKSB7CisgICAgaWYgKGFjdGl2ZV8pIHsKKyAgICAgIGZfKCk7CisgICAgfQorICB9CisKKyAgdm9pZCBkaXNhYmxlKCkgeworICAgIGFjdGl2ZV8gPSBmYWxzZTsKKyAgfQorIHByaXZhdGU6CisgIEYgZl87CisgIGJvb2wgYWN0aXZlXzsKKworICBTY29wZUd1YXJkKCkgPSBkZWxldGU7CisgIFNjb3BlR3VhcmQoY29uc3QgU2NvcGVHdWFyZCYpID0gZGVsZXRlOworICBTY29wZUd1YXJkJiBvcGVyYXRvcj0oY29uc3QgU2NvcGVHdWFyZCYpID0gZGVsZXRlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1Njb3BlR3VhcmQ8VD4gY3JlYXRlX3Njb3BlX2d1YXJkKFQgZikgeworICByZXR1cm4gU2NvcGVHdWFyZDxUPihmKTsKK30KKworI2VuZGlmICAvLyBTQ09QRV9HVUFSRF9ICmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvU2NvcGVkRmQuaCBiL2xpYmMvcHJpdmF0ZS9TY29wZWRGZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NmMxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvU2NvcGVkRmQuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBTQ09QRURfRkRfSAorI2RlZmluZSBTQ09QRURfRkRfSAorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAiYmlvbmljX21hY3Jvcy5oIgorCisvLyBBIHNtYXJ0IHBvaW50ZXIgdGhhdCBjbG9zZXMgdGhlIGdpdmVuIGZkIG9uIGdvaW5nIG91dCBvZiBzY29wZS4KKy8vIFVzZSB0aGlzIHdoZW4gdGhlIGZkIGlzIGluY2lkZW50YWwgdG8gdGhlIHB1cnBvc2Ugb2YgeW91ciBmdW5jdGlvbiwKKy8vIGJ1dCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIG9uIGV4aXQuCitjbGFzcyBTY29wZWRGZCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2NvcGVkRmQoaW50IGZkKSA6IGZkKGZkKSB7CisgICAgfQorCisgICAgflNjb3BlZEZkKCkgeworICAgICAgcmVzZXQoKTsKKyAgICB9CisKKyAgICBpbnQgZ2V0KCkgY29uc3QgeworICAgICAgICByZXR1cm4gZmQ7CisgICAgfQorCisgICAgaW50IHJlbGVhc2UoKSBfX2F0dHJpYnV0ZV9fKCh3YXJuX3VudXNlZF9yZXN1bHQpKSB7CisgICAgICAgIGludCBsb2NhbEZkID0gZmQ7CisgICAgICAgIGZkID0gLTE7CisgICAgICAgIHJldHVybiBsb2NhbEZkOworICAgIH0KKworICAgIHZvaWQgcmVzZXQoaW50IG5ld19mZCA9IC0xKSB7CisgICAgICBpZiAoZmQgIT0gLTEpIHsKKyAgICAgICAgICBURU1QX0ZBSUxVUkVfUkVUUlkoY2xvc2UoZmQpKTsKKyAgICAgIH0KKyAgICAgIGZkID0gbmV3X2ZkOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgZmQ7CisKKyAgICAvLyBEaXNhbGxvdyBjb3B5IGFuZCBhc3NpZ25tZW50LgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTY29wZWRGZCk7Cit9OworCisjZW5kaWYgIC8vIFNDT1BFRF9GRF9ICmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmggYi9saWJjL3ByaXZhdGUvU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmgKaW5kZXggMDZiOGUzNy4uNDNkYmRjMSAxMDA2NDQKLS0tIGEvbGliYy9wcml2YXRlL1Njb3BlZFB0aHJlYWRNdXRleExvY2tlci5oCisrKyBiL2xpYmMvcHJpdmF0ZS9TY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIuaApAQCAtMTksNiArMTksOCBAQAogCiAjaW5jbHVkZSA8cHRocmVhZC5oPgogCisjaW5jbHVkZSAiYmlvbmljX21hY3Jvcy5oIgorCiBjbGFzcyBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgewogIHB1YmxpYzoKICAgZXhwbGljaXQgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyKHB0aHJlYWRfbXV0ZXhfdCogbXUpIDogbXVfKG11KSB7CkBAIC0zMiw5ICszNCw3IEBACiAgcHJpdmF0ZToKICAgcHRocmVhZF9tdXRleF90KiBtdV87CiAKLSAgLy8gRGlzYWxsb3cgY29weSBhbmQgYXNzaWdubWVudC4KLSAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyKGNvbnN0IFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciYpOwotICB2b2lkIG9wZXJhdG9yPShjb25zdCBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXImKTsKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNjb3BlZFB0aHJlYWRNdXRleExvY2tlcik7CiB9OwogCiAjZW5kaWYgLy8gU0NPUEVEX1BUSFJFQURfTVVURVhfTE9DS0VSX0gKZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9TY29wZWRSZWFkZGlyLmggYi9saWJjL3ByaXZhdGUvU2NvcGVkUmVhZGRpci5oCmluZGV4IDc5NzgwOWEuLjg0YzFiOTMgMTAwNjQ0Ci0tLSBhL2xpYmMvcHJpdmF0ZS9TY29wZWRSZWFkZGlyLmgKKysrIGIvbGliYy9wcml2YXRlL1Njb3BlZFJlYWRkaXIuaApAQCAtMTksNiArMTksOCBAQAogCiAjaW5jbHVkZSA8ZGlyZW50Lmg+CiAKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19tYWNyb3MuaCIKKwogY2xhc3MgU2NvcGVkUmVhZGRpciB7CiAgcHVibGljOgogICBTY29wZWRSZWFkZGlyKGNvbnN0IGNoYXIqIHBhdGgpIHsKQEAgLTQyLDkgKzQ0LDcgQEAKICBwcml2YXRlOgogICBESVIqIGRpcl87CiAKLSAgLy8gRGlzYWxsb3cgY29weSBhbmQgYXNzaWdubWVudC4KLSAgU2NvcGVkUmVhZGRpcihjb25zdCBTY29wZWRSZWFkZGlyJik7Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFNjb3BlZFJlYWRkaXImKTsKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNjb3BlZFJlYWRkaXIpOwogfTsKIAogI2VuZGlmIC8vIFNDT1BFRF9SRUFERElSX0gKZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9hcnBhX25hbWVzZXIuaCBiL2xpYmMvcHJpdmF0ZS9hcnBhX25hbWVzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIxYzNlZS4uMDAwMDAwMAotLS0gYS9saWJjL3ByaXZhdGUvYXJwYV9uYW1lc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NzYgKzAsMCBAQAotLyoJJE5ldEJTRDogbmFtZXNlci5oLHYgMS4xOSAyMDA1LzEyLzI2IDE5OjAxOjQ3IHBlcnJ5IEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5ODksIDE5OTMKLSAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotLyoKLSAqCUlkOiBuYW1lc2VyLmgsdiAxLjIuMi40LjQuMSAyMDA0LzAzLzA5IDA4OjMzOjMwIG1hcmthIEV4cAotICovCi0KLSNpZm5kZWYgX0FSUEFfTkFNRVNFUl9IXwotI2RlZmluZSBfQVJQQV9OQU1FU0VSX0hfCi0KLSNkZWZpbmUgQklORF80X0NPTVBBVAotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0KLS8qCi0gKiBSZXZpc2lvbiBpbmZvcm1hdGlvbi4gIFRoaXMgaXMgdGhlIHJlbGVhc2UgZGF0ZSBpbiBZWVlZTU1ERCBmb3JtYXQuCi0gKiBJdCBjYW4gY2hhbmdlIGV2ZXJ5IGRheSBzbyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gd2l0aCBpdCBpcyB1c2UgaXQKLSAqIGluIHByZXByb2Nlc3NvciBjb21tYW5kcyBzdWNoIGFzICIjaWYgKF9fTkFNRVNFUiA+IDE5OTMxMTA0KSIuICBEbyBub3QKLSAqIGNvbXBhcmUgZm9yIGVxdWFsaXR5OyByYXRoZXIsIHVzZSBpdCB0byBkZXRlcm1pbmUgd2hldGhlciB5b3VyIGxpYmJpbmQuYQotICogY29udGFpbnMgYSBuZXcgZW5vdWdoIGxpYi9uYW1lc2VyLyB0byBzdXBwb3J0IHRoZSBmZWF0dXJlIHlvdSBuZWVkLgotICovCi0KLSNkZWZpbmUgX19OQU1FU0VSCTE5OTkxMDA2CS8qIE5ldyBpbnRlcmZhY2UgdmVyc2lvbiBzdGFtcC4gKi8KLQotLyoKLSAqIERlZmluZSBjb25zdGFudHMgYmFzZWQgb24gUkZDIDg4MywgUkZDIDEwMzQsIFJGQyAxMDM1Ci0gKi8KLSNkZWZpbmUgTlNfUEFDS0VUU1oJNTEyCS8qIGRlZmF1bHQgVURQIHBhY2tldCBzaXplICovCi0jZGVmaW5lIE5TX01BWEROQU1FCTEwMjUJLyogbWF4aW11bSBkb21haW4gbmFtZSAqLwotI2RlZmluZSBOU19NQVhNU0cJNjU1MzUJLyogbWF4aW11bSBtZXNzYWdlIHNpemUgKi8KLSNkZWZpbmUgTlNfTUFYQ0ROQU1FCTI1NQkvKiBtYXhpbXVtIGNvbXByZXNzZWQgZG9tYWluIG5hbWUgKi8KLSNkZWZpbmUgTlNfTUFYTEFCRUwJNjMJLyogbWF4aW11bSBsZW5ndGggb2YgZG9tYWluIGxhYmVsICovCi0jZGVmaW5lIE5TX0hGSVhFRFNaCTEyCS8qICMvYnl0ZXMgb2YgZml4ZWQgZGF0YSBpbiBoZWFkZXIgKi8KLSNkZWZpbmUgTlNfUUZJWEVEU1oJNAkvKiAjL2J5dGVzIG9mIGZpeGVkIGRhdGEgaW4gcXVlcnkgKi8KLSNkZWZpbmUgTlNfUlJGSVhFRFNaCTEwCS8qICMvYnl0ZXMgb2YgZml4ZWQgZGF0YSBpbiByIHJlY29yZCAqLwotI2RlZmluZSBOU19JTlQzMlNaCTQJLyogIy9ieXRlcyBvZiBkYXRhIGluIGEgdWludDMyX3QgKi8KLSNkZWZpbmUgTlNfSU5UMTZTWgkyCS8qICMvYnl0ZXMgb2YgZGF0YSBpbiBhIHVpbnQxNl90ICovCi0jZGVmaW5lIE5TX0lOVDhTWgkxCS8qICMvYnl0ZXMgb2YgZGF0YSBpbiBhIHVpbnQ4X3QgKi8KLSNkZWZpbmUgTlNfSU5BRERSU1oJNAkvKiBJUHY0IFRfQSAqLwotI2RlZmluZSBOU19JTjZBRERSU1oJMTYJLyogSVB2NiBUX0FBQUEgKi8KLSNkZWZpbmUgTlNfQ01QUlNGTEdTCTB4YzAJLyogRmxhZyBiaXRzIGluZGljYXRpbmcgbmFtZSBjb21wcmVzc2lvbi4gKi8KLSNkZWZpbmUgTlNfREVGQVVMVFBPUlQJNTMJLyogRm9yIGJvdGggVENQIGFuZCBVRFAuICovCi0KLS8qCi0gKiBUaGVzZSBjYW4gYmUgZXhwYW5kZWQgd2l0aCBzeW5vbnltcywganVzdCBrZWVwIG5zX3BhcnNlLmM6bnNfcGFyc2VyZWNvcmQoKQotICogaW4gc3luY2ggd2l0aCBpdC4KLSAqLwotdHlwZWRlZiBlbnVtIF9fbnNfc2VjdCB7Ci0JbnNfc19xZCA9IDAsCQkvKiBRdWVyeTogUXVlc3Rpb24uICovCi0JbnNfc196biA9IDAsCQkvKiBVcGRhdGU6IFpvbmUuICovCi0JbnNfc19hbiA9IDEsCQkvKiBRdWVyeTogQW5zd2VyLiAqLwotCW5zX3NfcHIgPSAxLAkJLyogVXBkYXRlOiBQcmVyZXF1aXNpdGVzLiAqLwotCW5zX3NfbnMgPSAyLAkJLyogUXVlcnk6IE5hbWUgc2VydmVycy4gKi8KLQluc19zX3VkID0gMiwJCS8qIFVwZGF0ZTogVXBkYXRlLiAqLwotCW5zX3NfYXIgPSAzLAkJLyogUXVlcnl8VXBkYXRlOiBBZGRpdGlvbmFsIHJlY29yZHMuICovCi0JbnNfc19tYXggPSA0Ci19IG5zX3NlY3Q7Ci0KLS8qCi0gKiBUaGlzIGlzIGEgbWVzc2FnZSBoYW5kbGUuICBJdCBpcyBjYWxsZXIgYWxsb2NhdGVkIGFuZCBoYXMgbm8gZHluYW1pYyBkYXRhLgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgaW50ZW5kZWQgdG8gYmUgb3BhcXVlIHRvIGFsbCBidXQgbnNfcGFyc2UuYywgdGh1cyB0aGUKLSAqIGxlYWRpbmcgXydzIG9uIHRoZSBtZW1iZXIgbmFtZXMuICBVc2UgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucywgbm90IHRoZSBfJ3MuCi0gKi8KLXR5cGVkZWYgc3RydWN0IF9fbnNfbXNnIHsKLQljb25zdCB1X2NoYXIJKl9tc2csICpfZW9tOwotCXVpbnQxNl90CV9pZCwgX2ZsYWdzLCBfY291bnRzW25zX3NfbWF4XTsKLQljb25zdCB1X2NoYXIJKl9zZWN0aW9uc1tuc19zX21heF07Ci0JbnNfc2VjdAkJX3NlY3Q7Ci0JaW50CQlfcnJudW07Ci0JY29uc3QgdV9jaGFyCSpfbXNnX3B0cjsKLX0gbnNfbXNnOwotCi0vKiBQcml2YXRlIGRhdGEgc3RydWN0dXJlIC0gZG8gbm90IHVzZSBmcm9tIG91dHNpZGUgbGlicmFyeS4gKi8KLXN0cnVjdCBfbnNfZmxhZ2RhdGEgeyAgaW50IG1hc2ssIHNoaWZ0OyAgfTsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgX25zX2ZsYWdkYXRhIF9uc19mbGFnZGF0YVtdOwotCi0vKiBBY2Nlc3NvciBtYWNyb3MgLSB0aGlzIGlzIHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuICovCi0KLSNkZWZpbmUgbnNfbXNnX2lkKGhhbmRsZSkgKChoYW5kbGUpLl9pZCArIDApCi0jZGVmaW5lIG5zX21zZ19iYXNlKGhhbmRsZSkgKChoYW5kbGUpLl9tc2cgKyAwKQotI2RlZmluZSBuc19tc2dfZW5kKGhhbmRsZSkgKChoYW5kbGUpLl9lb20gKyAwKQotI2RlZmluZSBuc19tc2dfc2l6ZShoYW5kbGUpICgoc2l6ZV90KSgoaGFuZGxlKS5fZW9tIC0gKGhhbmRsZSkuX21zZykpCi0jZGVmaW5lIG5zX21zZ19jb3VudChoYW5kbGUsIHNlY3Rpb24pICgoaGFuZGxlKS5fY291bnRzW3NlY3Rpb25dICsgMCkKLQotLyoKLSAqIFRoaXMgaXMgYSBwYXJzZWQgcmVjb3JkLiAgSXQgaXMgY2FsbGVyIGFsbG9jYXRlZCBhbmQgaGFzIG5vIGR5bmFtaWMgZGF0YS4KLSAqLwotdHlwZWRlZglzdHJ1Y3QgX19uc19yciB7Ci0JY2hhcgkJbmFtZVtOU19NQVhETkFNRV07Ci0JdWludDE2X3QJdHlwZTsKLQl1aW50MTZfdAlycl9jbGFzczsKLQl1aW50MzJfdAl0dGw7Ci0JdWludDE2X3QJcmRsZW5ndGg7Ci0JY29uc3QgdV9jaGFyICoJcmRhdGE7Ci19IG5zX3JyOwotCi0vKiBBY2Nlc3NvciBtYWNyb3MgLSB0aGlzIGlzIHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuICovCi0jZGVmaW5lIG5zX3JyX25hbWUocnIpCSgoKHJyKS5uYW1lWzBdICE9ICdcMCcpID8gKHJyKS5uYW1lIDogIi4iKQotI2RlZmluZSBuc19ycl90eXBlKHJyKQkoKG5zX3R5cGUpKChycikudHlwZSArIDApKQotI2RlZmluZSBuc19ycl9jbGFzcyhycikJKChuc19jbGFzcykoKHJyKS5ycl9jbGFzcyArIDApKQotI2RlZmluZSBuc19ycl90dGwocnIpCSgodV9sb25nKShycikudHRsICsgMCkKLSNkZWZpbmUgbnNfcnJfcmRsZW4ocnIpCSgoc2l6ZV90KShycikucmRsZW5ndGggKyAwKQotI2RlZmluZSBuc19ycl9yZGF0YShycikJKChycikucmRhdGEgKyAwKQotCi0vKgotICogVGhlc2UgZG9uJ3QgaGF2ZSB0byBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyBpbiB0aGUgcGFja2V0IGZsYWdzIHdvcmQsCi0gKiBhbmQgdGhleSBjYW4gZXZlbiBvdmVybGFwIGluIHNvbWUgY2FzZXMsIGJ1dCB0aGV5IHdpbGwgbmVlZCB0byBiZSBrZXB0Ci0gKiBpbiBzeW5jaCB3aXRoIG5zX3BhcnNlLmM6bnNfZmxhZ2RhdGFbXS4KLSAqLwotdHlwZWRlZiBlbnVtIF9fbnNfZmxhZyB7Ci0JbnNfZl9xciwJCS8qIFF1ZXN0aW9uL1Jlc3BvbnNlLiAqLwotCW5zX2Zfb3Bjb2RlLAkJLyogT3BlcmF0aW9uIGNvZGUuICovCi0JbnNfZl9hYSwJCS8qIEF1dGhvcml0YXRpdmUgQW5zd2VyLiAqLwotCW5zX2ZfdGMsCQkvKiBUcnVuY2F0aW9uIG9jY3VycmVkLiAqLwotCW5zX2ZfcmQsCQkvKiBSZWN1cnNpb24gRGVzaXJlZC4gKi8KLQluc19mX3JhLAkJLyogUmVjdXJzaW9uIEF2YWlsYWJsZS4gKi8KLQluc19mX3osCQkJLyogTUJaLiAqLwotCW5zX2ZfYWQsCQkvKiBBdXRoZW50aWMgRGF0YSAoRE5TU0VDKS4gKi8KLQluc19mX2NkLAkJLyogQ2hlY2tpbmcgRGlzYWJsZWQgKEROU1NFQykuICovCi0JbnNfZl9yY29kZSwJCS8qIFJlc3BvbnNlIGNvZGUuICovCi0JbnNfZl9tYXgKLX0gbnNfZmxhZzsKLQotLyoKLSAqIEN1cnJlbnRseSBkZWZpbmVkIG9wY29kZXMuCi0gKi8KLXR5cGVkZWYgZW51bSBfX25zX29wY29kZSB7Ci0JbnNfb19xdWVyeSA9IDAsCQkvKiBTdGFuZGFyZCBxdWVyeS4gKi8KLQluc19vX2lxdWVyeSA9IDEsCS8qIEludmVyc2UgcXVlcnkgKGRlcHJlY2F0ZWQvdW5zdXBwb3J0ZWQpLiAqLwotCW5zX29fc3RhdHVzID0gMiwJLyogTmFtZSBzZXJ2ZXIgc3RhdHVzIHF1ZXJ5ICh1bnN1cHBvcnRlZCkuICovCi0JCQkJLyogT3Bjb2RlIDMgaXMgdW5kZWZpbmVkL3Jlc2VydmVkLiAqLwotCW5zX29fbm90aWZ5ID0gNCwJLyogWm9uZSBjaGFuZ2Ugbm90aWZpY2F0aW9uLiAqLwotCW5zX29fdXBkYXRlID0gNSwJLyogWm9uZSB1cGRhdGUgbWVzc2FnZS4gKi8KLQluc19vX21heCA9IDYKLX0gbnNfb3Bjb2RlOwotCi0vKgotICogQ3VycmVudGx5IGRlZmluZWQgcmVzcG9uc2UgY29kZXMuCi0gKi8KLXR5cGVkZWYJZW51bSBfX25zX3Jjb2RlIHsKLQluc19yX25vZXJyb3IgPSAwLAkvKiBObyBlcnJvciBvY2N1cnJlZC4gKi8KLQluc19yX2Zvcm1lcnIgPSAxLAkvKiBGb3JtYXQgZXJyb3IuICovCi0JbnNfcl9zZXJ2ZmFpbCA9IDIsCS8qIFNlcnZlciBmYWlsdXJlLiAqLwotCW5zX3Jfbnhkb21haW4gPSAzLAkvKiBOYW1lIGVycm9yLiAqLwotCW5zX3Jfbm90aW1wbCA9IDQsCS8qIFVuaW1wbGVtZW50ZWQuICovCi0JbnNfcl9yZWZ1c2VkID0gNSwJLyogT3BlcmF0aW9uIHJlZnVzZWQuICovCi0JLyogdGhlc2UgYXJlIGZvciBCSU5EX1VQREFURSAqLwotCW5zX3JfeXhkb21haW4gPSA2LAkvKiBOYW1lIGV4aXN0cyAqLwotCW5zX3JfeXhycnNldCA9IDcsCS8qIFJSc2V0IGV4aXN0cyAqLwotCW5zX3JfbnhycnNldCA9IDgsCS8qIFJSc2V0IGRvZXMgbm90IGV4aXN0ICovCi0JbnNfcl9ub3RhdXRoID0gOSwJLyogTm90IGF1dGhvcml0YXRpdmUgZm9yIHpvbmUgKi8KLQluc19yX25vdHpvbmUgPSAxMCwJLyogWm9uZSBvZiByZWNvcmQgZGlmZmVyZW50IGZyb20gem9uZSBzZWN0aW9uICovCi0JbnNfcl9tYXggPSAxMSwKLQkvKiBUaGUgZm9sbG93aW5nIGFyZSBFRE5TIGV4dGVuZGVkIHJjb2RlcyAqLwotCW5zX3JfYmFkdmVycyA9IDE2LAotCS8qIFRoZSBmb2xsb3dpbmcgYXJlIFRTSUcgZXJyb3JzICovCi0JbnNfcl9iYWRzaWcgPSAxNiwKLQluc19yX2JhZGtleSA9IDE3LAotCW5zX3JfYmFkdGltZSA9IDE4Ci19IG5zX3Jjb2RlOwotCi0vKiBCSU5EX1VQREFURSAqLwotdHlwZWRlZiBlbnVtIF9fbnNfdXBkYXRlX29wZXJhdGlvbiB7Ci0JbnNfdW9wX2RlbGV0ZSA9IDAsCi0JbnNfdW9wX2FkZCA9IDEsCi0JbnNfdW9wX21heCA9IDIKLX0gbnNfdXBkYXRlX29wZXJhdGlvbjsKLQotLyoKLSAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIFRTSUcgYXV0aGVudGljYXRlZCBtZXNzYWdlcwotICovCi1zdHJ1Y3QgbnNfdHNpZ19rZXkgewotICAgICAgICBjaGFyIG5hbWVbTlNfTUFYRE5BTUVdLCBhbGdbTlNfTUFYRE5BTUVdOwotICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgICAgICBpbnQgbGVuOwotfTsKLXR5cGVkZWYgc3RydWN0IG5zX3RzaWdfa2V5IG5zX3RzaWdfa2V5OwotCi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgVFNJRyBhdXRoZW50aWNhdGVkIFRDUCBtZXNzYWdlcwotICovCi1zdHJ1Y3QgbnNfdGNwX3RzaWdfc3RhdGUgewotCWludCBjb3VudGVyOwotCXN0cnVjdCBkc3Rfa2V5ICprZXk7Ci0Jdm9pZCAqY3R4OwotCXVuc2lnbmVkIGNoYXIgc2lnW05TX1BBQ0tFVFNaXTsKLQlpbnQgc2lnbGVuOwotfTsKLXR5cGVkZWYgc3RydWN0IG5zX3RjcF90c2lnX3N0YXRlIG5zX3RjcF90c2lnX3N0YXRlOwotCi0jZGVmaW5lIE5TX1RTSUdfRlVER0UgMzAwCi0jZGVmaW5lIE5TX1RTSUdfVENQX0NPVU5UIDEwMAotI2RlZmluZSBOU19UU0lHX0FMR19ITUFDX01ENSAiSE1BQy1NRDUuU0lHLUFMRy5SRUcuSU5UIgotCi0jZGVmaW5lIE5TX1RTSUdfRVJST1JfTk9fVFNJRyAtMTAKLSNkZWZpbmUgTlNfVFNJR19FUlJPUl9OT19TUEFDRSAtMTEKLSNkZWZpbmUgTlNfVFNJR19FUlJPUl9GT1JNRVJSIC0xMgotCi0vKgotICogQ3VycmVudGx5IGRlZmluZWQgdHlwZSB2YWx1ZXMgZm9yIHJlc291cmNlcyBhbmQgcXVlcmllcy4KLSAqLwotdHlwZWRlZiBlbnVtIF9fbnNfdHlwZSB7Ci0JbnNfdF9pbnZhbGlkID0gMCwJLyogQ29va2llLiAqLwotCW5zX3RfYSA9IDEsCQkvKiBIb3N0IGFkZHJlc3MuICovCi0JbnNfdF9ucyA9IDIsCQkvKiBBdXRob3JpdGF0aXZlIHNlcnZlci4gKi8KLQluc190X21kID0gMywJCS8qIE1haWwgZGVzdGluYXRpb24uICovCi0JbnNfdF9tZiA9IDQsCQkvKiBNYWlsIGZvcndhcmRlci4gKi8KLQluc190X2NuYW1lID0gNSwJCS8qIENhbm9uaWNhbCBuYW1lLiAqLwotCW5zX3Rfc29hID0gNiwJCS8qIFN0YXJ0IG9mIGF1dGhvcml0eSB6b25lLiAqLwotCW5zX3RfbWIgPSA3LAkJLyogTWFpbGJveCBkb21haW4gbmFtZS4gKi8KLQluc190X21nID0gOCwJCS8qIE1haWwgZ3JvdXAgbWVtYmVyLiAqLwotCW5zX3RfbXIgPSA5LAkJLyogTWFpbCByZW5hbWUgbmFtZS4gKi8KLQluc190X251bGwgPSAxMCwJCS8qIE51bGwgcmVzb3VyY2UgcmVjb3JkLiAqLwotCW5zX3Rfd2tzID0gMTEsCQkvKiBXZWxsIGtub3duIHNlcnZpY2UuICovCi0JbnNfdF9wdHIgPSAxMiwJCS8qIERvbWFpbiBuYW1lIHBvaW50ZXIuICovCi0JbnNfdF9oaW5mbyA9IDEzLAkvKiBIb3N0IGluZm9ybWF0aW9uLiAqLwotCW5zX3RfbWluZm8gPSAxNCwJLyogTWFpbGJveCBpbmZvcm1hdGlvbi4gKi8KLQluc190X214ID0gMTUsCQkvKiBNYWlsIHJvdXRpbmcgaW5mb3JtYXRpb24uICovCi0JbnNfdF90eHQgPSAxNiwJCS8qIFRleHQgc3RyaW5ncy4gKi8KLQluc190X3JwID0gMTcsCQkvKiBSZXNwb25zaWJsZSBwZXJzb24uICovCi0JbnNfdF9hZnNkYiA9IDE4LAkvKiBBRlMgY2VsbCBkYXRhYmFzZS4gKi8KLQluc190X3gyNSA9IDE5LAkJLyogWF8yNSBjYWxsaW5nIGFkZHJlc3MuICovCi0JbnNfdF9pc2RuID0gMjAsCQkvKiBJU0ROIGNhbGxpbmcgYWRkcmVzcy4gKi8KLQluc190X3J0ID0gMjEsCQkvKiBSb3V0ZXIuICovCi0JbnNfdF9uc2FwID0gMjIsCQkvKiBOU0FQIGFkZHJlc3MuICovCi0JbnNfdF9uc2FwX3B0ciA9IDIzLAkvKiBSZXZlcnNlIE5TQVAgbG9va3VwIChkZXByZWNhdGVkKS4gKi8KLQluc190X3NpZyA9IDI0LAkJLyogU2VjdXJpdHkgc2lnbmF0dXJlLiAqLwotCW5zX3Rfa2V5ID0gMjUsCQkvKiBTZWN1cml0eSBrZXkuICovCi0JbnNfdF9weCA9IDI2LAkJLyogWC40MDAgbWFpbCBtYXBwaW5nLiAqLwotCW5zX3RfZ3BvcyA9IDI3LAkJLyogR2VvZ3JhcGhpY2FsIHBvc2l0aW9uICh3aXRoZHJhd24pLiAqLwotCW5zX3RfYWFhYSA9IDI4LAkJLyogSXA2IEFkZHJlc3MuICovCi0JbnNfdF9sb2MgPSAyOSwJCS8qIExvY2F0aW9uIEluZm9ybWF0aW9uLiAqLwotCW5zX3Rfbnh0ID0gMzAsCQkvKiBOZXh0IGRvbWFpbiAoc2VjdXJpdHkpLiAqLwotCW5zX3RfZWlkID0gMzEsCQkvKiBFbmRwb2ludCBpZGVudGlmaWVyLiAqLwotCW5zX3RfbmltbG9jID0gMzIsCS8qIE5pbXJvZCBMb2NhdG9yLiAqLwotCW5zX3Rfc3J2ID0gMzMsCQkvKiBTZXJ2ZXIgU2VsZWN0aW9uLiAqLwotCW5zX3RfYXRtYSA9IDM0LAkJLyogQVRNIEFkZHJlc3MgKi8KLQluc190X25hcHRyID0gMzUsCS8qIE5hbWluZyBBdXRob3JpdHkgUG9pblRlUiAqLwotCW5zX3Rfa3ggPSAzNiwJCS8qIEtleSBFeGNoYW5nZSAqLwotCW5zX3RfY2VydCA9IDM3LAkJLyogQ2VydGlmaWNhdGlvbiByZWNvcmQgKi8KLQluc190X2E2ID0gMzgsCQkvKiBJUHY2IGFkZHJlc3MgKGRlcHJlY2F0ZXMgQUFBQSkgKi8KLQluc190X2RuYW1lID0gMzksCS8qIE5vbi10ZXJtaW5hbCBETkFNRSAoZm9yIElQdjYpICovCi0JbnNfdF9zaW5rID0gNDAsCQkvKiBLaXRjaGVuIHNpbmsgKGV4cGVyaW1lbnRhdGwpICovCi0JbnNfdF9vcHQgPSA0MSwJCS8qIEVETlMwIG9wdGlvbiAobWV0YS1SUikgKi8KLQluc190X2FwbCA9IDQyLAkJLyogQWRkcmVzcyBwcmVmaXggbGlzdCAoUkZDIDMxMjMpICovCi0JbnNfdF90a2V5ID0gMjQ5LAkvKiBUcmFuc2FjdGlvbiBrZXkgKi8KLQluc190X3RzaWcgPSAyNTAsCS8qIFRyYW5zYWN0aW9uIHNpZ25hdHVyZS4gKi8KLQluc190X2l4ZnIgPSAyNTEsCS8qIEluY3JlbWVudGFsIHpvbmUgdHJhbnNmZXIuICovCi0JbnNfdF9heGZyID0gMjUyLAkvKiBUcmFuc2ZlciB6b25lIG9mIGF1dGhvcml0eS4gKi8KLQluc190X21haWxiID0gMjUzLAkvKiBUcmFuc2ZlciBtYWlsYm94IHJlY29yZHMuICovCi0JbnNfdF9tYWlsYSA9IDI1NCwJLyogVHJhbnNmZXIgbWFpbCBhZ2VudCByZWNvcmRzLiAqLwotCW5zX3RfYW55ID0gMjU1LAkJLyogV2lsZGNhcmQgbWF0Y2guICovCi0JbnNfdF96eGZyID0gMjU2LAkvKiBCSU5ELXNwZWNpZmljLCBub25zdGFuZGFyZC4gKi8KLQluc190X21heCA9IDY1NTM2Ci19IG5zX3R5cGU7Ci0KLS8qIEV4Y2x1c2l2ZWx5IGEgUVRZUEU/IChub3QgYWxzbyBhbiBSVFlQRSkgKi8KLSNkZWZpbmUJbnNfdF9xdF9wKHQpIChuc190X3hmcl9wKHQpIHx8ICh0KSA9PSBuc190X2FueSB8fCBcCi0JCSAgICAgICh0KSA9PSBuc190X21haWxiIHx8ICh0KSA9PSBuc190X21haWxhKQotLyogU29tZSBraW5kIG9mIG1ldGEtUlI/IChub3QgYSBRVFlQRSwgYnV0IGFsc28gbm90IGFuIFJUWVBFKSAqLwotI2RlZmluZQluc190X21ycl9wKHQpICgodCkgPT0gbnNfdF90c2lnIHx8ICh0KSA9PSBuc190X29wdCkKLS8qIEV4Y2x1c2l2ZWx5IGFuIFJUWVBFPyAobm90IGFsc28gYSBRVFlQRSBvciBhIG1ldGEtUlIpICovCi0jZGVmaW5lIG5zX3RfcnJfcCh0KSAoIW5zX3RfcXRfcCh0KSAmJiAhbnNfdF9tcnJfcCh0KSkKLSNkZWZpbmUgbnNfdF91ZHBfcCh0KSAoKHQpICE9IG5zX3RfYXhmciAmJiAodCkgIT0gbnNfdF96eGZyKQotI2RlZmluZSBuc190X3hmcl9wKHQpICgodCkgPT0gbnNfdF9heGZyIHx8ICh0KSA9PSBuc190X2l4ZnIgfHwgXAotCQkgICAgICAgKHQpID09IG5zX3RfenhmcikKLQotLyoKLSAqIFZhbHVlcyBmb3IgY2xhc3MgZmllbGQKLSAqLwotdHlwZWRlZiBlbnVtIF9fbnNfY2xhc3MgewotCW5zX2NfaW52YWxpZCA9IDAsCS8qIENvb2tpZS4gKi8KLQluc19jX2luID0gMSwJCS8qIEludGVybmV0LiAqLwotCW5zX2NfMiA9IDIsCQkvKiB1bmFsbG9jYXRlZC91bnN1cHBvcnRlZC4gKi8KLQluc19jX2NoYW9zID0gMywJCS8qIE1JVCBDaGFvcy1uZXQuICovCi0JbnNfY19ocyA9IDQsCQkvKiBNSVQgSGVzaW9kLiAqLwotCS8qIFF1ZXJ5IGNsYXNzIHZhbHVlcyB3aGljaCBkbyBub3QgYXBwZWFyIGluIHJlc291cmNlIHJlY29yZHMgKi8KLQluc19jX25vbmUgPSAyNTQsCS8qIGZvciBwcmVyZXEuIHNlY3Rpb25zIGluIHVwZGF0ZSByZXF1ZXN0cyAqLwotCW5zX2NfYW55ID0gMjU1LAkJLyogV2lsZGNhcmQgbWF0Y2guICovCi0JbnNfY19tYXggPSA2NTUzNgotfSBuc19jbGFzczsKLQotLyogRE5TU0VDIGNvbnN0YW50cy4gKi8KLQotdHlwZWRlZiBlbnVtIF9fbnNfa2V5X3R5cGVzIHsKLQluc19rdF9yc2EgPSAxLAkJLyoga2V5IHR5cGUgUlNBL01ENSAqLwotCW5zX2t0X2RoICA9IDIsCQkvKiBEaWZmaWUgSGVsbG1hbiAqLwotCW5zX2t0X2RzYSA9IDMsCQkvKiBEaWdpdGFsIFNpZ25hdHVyZSBTdGFuZGFyZCAoTUFOREFUT1JZKSAqLwotCW5zX2t0X3ByaXZhdGUgPSAyNTQJLyogUHJpdmF0ZSBrZXkgdHlwZSBzdGFydHMgd2l0aCBPSUQgKi8KLX0gbnNfa2V5X3R5cGVzOwotCi10eXBlZGVmIGVudW0gX19uc19jZXJ0X3R5cGVzIHsKLQljZXJ0X3RfcGtpeCA9IDEsCS8qIFBLSVggKFguNTA5djMpICovCi0JY2VydF90X3Nwa2kgPSAyLAkvKiBTUEtJICovCi0JY2VydF90X3BncCAgPSAzLAkvKiBQR1AgKi8KLQljZXJ0X3RfdXJsICA9IDI1MywJLyogVVJMIHByaXZhdGUgdHlwZSAqLwotCWNlcnRfdF9vaWQgID0gMjU0CS8qIE9JRCBwcml2YXRlIHR5cGUgKi8KLX0gbnNfY2VydF90eXBlczsKLQotLyogRmxhZ3MgZmllbGQgb2YgdGhlIEtFWSBSUiByZGF0YS4gKi8KLSNkZWZpbmUJTlNfS0VZX1RZUEVNQVNLCQkweEMwMDAJLyogTWFzayBmb3IgInR5cGUiIGJpdHMgKi8KLSNkZWZpbmUJTlNfS0VZX1RZUEVfQVVUSF9DT05GCTB4MDAwMAkvKiBLZXkgdXNhYmxlIGZvciBib3RoICovCi0jZGVmaW5lCU5TX0tFWV9UWVBFX0NPTkZfT05MWQkweDgwMDAJLyogS2V5IHVzYWJsZSBmb3IgY29uZmlkZW50aWFsaXR5ICovCi0jZGVmaW5lCU5TX0tFWV9UWVBFX0FVVEhfT05MWQkweDQwMDAJLyogS2V5IHVzYWJsZSBmb3IgYXV0aGVudGljYXRpb24gKi8KLSNkZWZpbmUJTlNfS0VZX1RZUEVfTk9fS0VZCTB4QzAwMAkvKiBObyBrZXkgdXNhYmxlIGZvciBlaXRoZXI7IG5vIGtleSAqLwotLyogVGhlIHR5cGUgYml0cyBjYW4gYWxzbyBiZSBpbnRlcnByZXRlZCBpbmRlcGVuZGVudGx5LCBhcyBzaW5nbGUgYml0czogKi8KLSNkZWZpbmUJTlNfS0VZX05PX0FVVEgJCTB4ODAwMAkvKiBLZXkgdW51c2FibGUgZm9yIGF1dGhlbnRpY2F0aW9uICovCi0jZGVmaW5lCU5TX0tFWV9OT19DT05GCQkweDQwMDAJLyogS2V5IHVudXNhYmxlIGZvciBjb25maWRlbnRpYWxpdHkgKi8KLSNkZWZpbmUJTlNfS0VZX1JFU0VSVkVEMgkweDIwMDAJLyogU2VjdXJpdHkgaXMgKm1hbmRhdG9yeSogaWYgYml0PTAgKi8KLSNkZWZpbmUJTlNfS0VZX0VYVEVOREVEX0ZMQUdTCTB4MTAwMAkvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLwotI2RlZmluZQlOU19LRVlfUkVTRVJWRUQ0CTB4MDgwMCAgLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KLSNkZWZpbmUJTlNfS0VZX1JFU0VSVkVENQkweDA0MDAgIC8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCi0jZGVmaW5lCU5TX0tFWV9OQU1FX1RZUEUJMHgwMzAwCS8qIHRoZXNlIGJpdHMgZGV0ZXJtaW5lIHRoZSB0eXBlICovCi0jZGVmaW5lCU5TX0tFWV9OQU1FX1VTRVIJMHgwMDAwCS8qIGtleSBpcyBhc3NvYy4gd2l0aCB1c2VyICovCi0jZGVmaW5lCU5TX0tFWV9OQU1FX0VOVElUWQkweDAyMDAJLyoga2V5IGlzIGFzc29jLiB3aXRoIGVudGl0eSBlZyBob3N0ICovCi0jZGVmaW5lCU5TX0tFWV9OQU1FX1pPTkUJMHgwMTAwCS8qIGtleSBpcyB6b25lIGtleSAqLwotI2RlZmluZQlOU19LRVlfTkFNRV9SRVNFUlZFRAkweDAzMDAJLyogcmVzZXJ2ZWQgbWVhbmluZyAqLwotI2RlZmluZQlOU19LRVlfUkVTRVJWRUQ4CTB4MDA4MCAgLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KLSNkZWZpbmUJTlNfS0VZX1JFU0VSVkVEOQkweDAwNDAgIC8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCi0jZGVmaW5lCU5TX0tFWV9SRVNFUlZFRDEwCTB4MDAyMCAgLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KLSNkZWZpbmUJTlNfS0VZX1JFU0VSVkVEMTEJMHgwMDEwICAvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLwotI2RlZmluZQlOU19LRVlfU0lHTkFUT1JZTUFTSwkweDAwMEYJLyoga2V5IGNhbiBzaWduIFJSJ3Mgb2Ygc2FtZSBuYW1lICovCi0jZGVmaW5lCU5TX0tFWV9SRVNFUlZFRF9CSVRNQVNLICggTlNfS0VZX1JFU0VSVkVEMiB8IFwKLQkJCQkgIE5TX0tFWV9SRVNFUlZFRDQgfCBcCi0JCQkJICBOU19LRVlfUkVTRVJWRUQ1IHwgXAotCQkJCSAgTlNfS0VZX1JFU0VSVkVEOCB8IFwKLQkJCQkgIE5TX0tFWV9SRVNFUlZFRDkgfCBcCi0JCQkJICBOU19LRVlfUkVTRVJWRUQxMCB8IFwKLQkJCQkgIE5TX0tFWV9SRVNFUlZFRDExICkKLSNkZWZpbmUgTlNfS0VZX1JFU0VSVkVEX0JJVE1BU0syIDB4RkZGRiAvKiBubyBiaXRzIGRlZmluZWQgaGVyZSAqLwotCi0vKiBUaGUgQWxnb3JpdGhtIGZpZWxkIG9mIHRoZSBLRVkgYW5kIFNJRyBSUidzIGlzIGFuIGludGVnZXIsIHsxLi4yNTR9ICovCi0jZGVmaW5lCU5TX0FMR19NRDVSU0EJCTEJLyogTUQ1IHdpdGggUlNBICovCi0jZGVmaW5lCU5TX0FMR19ESCAgICAgICAgICAgICAgIDIJLyogRGlmZmllIEhlbGxtYW4gS0VZICovCi0jZGVmaW5lCU5TX0FMR19EU0EgICAgICAgICAgICAgIDMJLyogRFNBIEtFWSAqLwotI2RlZmluZQlOU19BTEdfRFNTICAgICAgICAgICAgICBOU19BTEdfRFNBCi0jZGVmaW5lCU5TX0FMR19FWFBJUkVfT05MWQkyNTMJLyogTm8gYWxnLCBubyBzZWN1cml0eSAqLwotI2RlZmluZQlOU19BTEdfUFJJVkFURV9PSUQJMjU0CS8qIEtleSBiZWdpbnMgd2l0aCBPSUQgZ2l2aW5nIGFsZyAqLwotCi0vKiBQcm90b2NvbCB2YWx1ZXMgICovCi0vKiB2YWx1ZSAwIGlzIHJlc2VydmVkICovCi0jZGVmaW5lIE5TX0tFWV9QUk9UX1RMUyAgICAgICAgIDEKLSNkZWZpbmUgTlNfS0VZX1BST1RfRU1BSUwgICAgICAgMgotI2RlZmluZSBOU19LRVlfUFJPVF9ETlNTRUMgICAgICAzCi0jZGVmaW5lIE5TX0tFWV9QUk9UX0lQU0VDICAgICAgIDQKLSNkZWZpbmUgTlNfS0VZX1BST1RfQU5ZCQkyNTUKLQotLyogU2lnbmF0dXJlcyAqLwotI2RlZmluZQlOU19NRDVSU0FfTUlOX0JJVFMJIDUxMgkvKiBTaXplIG9mIGEgbW9kIG9yIGV4cCBpbiBiaXRzICovCi0jZGVmaW5lCU5TX01ENVJTQV9NQVhfQklUUwk0MDk2Ci0JLyogVG90YWwgb2YgYmluYXJ5IG1vZCBhbmQgZXhwICovCi0jZGVmaW5lCU5TX01ENVJTQV9NQVhfQllURVMJKChOU19NRDVSU0FfTUFYX0JJVFMrNy84KSoyKzMpCi0JLyogTWF4IGxlbmd0aCBvZiB0ZXh0IHNpZyBibG9jayAqLwotI2RlZmluZQlOU19NRDVSU0FfTUFYX0JBU0U2NAkoKChOU19NRDVSU0FfTUFYX0JZVEVTKzIpLzMpKjQpCi0jZGVmaW5lIE5TX01ENVJTQV9NSU5fU0laRQkoKE5TX01ENVJTQV9NSU5fQklUUys3KS84KQotI2RlZmluZSBOU19NRDVSU0FfTUFYX1NJWkUJKChOU19NRDVSU0FfTUFYX0JJVFMrNykvOCkKLQotI2RlZmluZSBOU19EU0FfU0lHX1NJWkUgICAgICAgICA0MQotI2RlZmluZSBOU19EU0FfTUlOX1NJWkUgICAgICAgICAyMTMKLSNkZWZpbmUgTlNfRFNBX01BWF9CWVRFUyAgICAgICAgNDA1Ci0KLS8qIE9mZnNldHMgaW50byBTSUcgcmVjb3JkIHJkYXRhIHRvIGZpbmQgdmFyaW91cyB2YWx1ZXMgKi8KLSNkZWZpbmUJTlNfU0lHX1RZUEUJMAkvKiBUeXBlIGZsYWdzICovCi0jZGVmaW5lCU5TX1NJR19BTEcJMgkvKiBBbGdvcml0aG0gKi8KLSNkZWZpbmUJTlNfU0lHX0xBQkVMUwkzCS8qIEhvdyBtYW55IGxhYmVscyBpbiBuYW1lICovCi0jZGVmaW5lCU5TX1NJR19PVFRMCTQJLyogT3JpZ2luYWwgVFRMICovCi0jZGVmaW5lCU5TX1NJR19FWFBJUgk4CS8qIEV4cGlyYXRpb24gdGltZSAqLwotI2RlZmluZQlOU19TSUdfU0lHTkVECTEyCS8qIFNpZ25hdHVyZSB0aW1lICovCi0jZGVmaW5lCU5TX1NJR19GT09UCTE2CS8qIEtleSBmb290cHJpbnQgKi8KLSNkZWZpbmUJTlNfU0lHX1NJR05FUgkxOAkvKiBEb21haW4gbmFtZSBvZiB3aG8gc2lnbmVkIGl0ICovCi0KLS8qIEhvdyBSUiB0eXBlcyBhcmUgcmVwcmVzZW50ZWQgYXMgYml0LWZsYWdzIGluIE5YVCByZWNvcmRzICovCi0jZGVmaW5lCU5TX05YVF9CSVRTIDgKLSNkZWZpbmUJTlNfTlhUX0JJVF9TRVQoICBuLHApIChwWyhuKS9OU19OWFRfQklUU10gfD0gICgweDgwPj4oKG4pJU5TX05YVF9CSVRTKSkpCi0jZGVmaW5lCU5TX05YVF9CSVRfQ0xFQVIobixwKSAocFsobikvTlNfTlhUX0JJVFNdICY9IH4oMHg4MD4+KChuKSVOU19OWFRfQklUUykpKQotI2RlZmluZQlOU19OWFRfQklUX0lTU0VUKG4scCkgKHBbKG4pL05TX05YVF9CSVRTXSAmICAgKDB4ODA+PigobiklTlNfTlhUX0JJVFMpKSkKLSNkZWZpbmUgTlNfTlhUX01BWCAxMjcKLQotLyoKLSAqIEVETlMwIGV4dGVuZGVkIGZsYWdzLCBob3N0IG9yZGVyLgotICovCi0jZGVmaW5lIE5TX09QVF9ETlNTRUNfT0sJMHg4MDAwVQotCi0vKgotICogSW5saW5lIHZlcnNpb25zIG9mIGdldC9wdXQgc2hvcnQvbG9uZy4gIFBvaW50ZXIgaXMgYWR2YW5jZWQuCi0gKi8KLSNkZWZpbmUgTlNfR0VUMTYocywgY3ApIGRvIHsgXAotCWNvbnN0IHVfY2hhciAqdF9jcCA9IChjb25zdCB1X2NoYXIgKikoY3ApOyBcCi0JKHMpID0gKCh1aW50MTZfdCl0X2NwWzBdIDw8IDgpIFwKLQkgICAgfCAoKHVpbnQxNl90KXRfY3BbMV0pIFwKLQkgICAgOyBcCi0JKGNwKSArPSBOU19JTlQxNlNaOyBcCi19IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLQotI2RlZmluZSBOU19HRVQzMihsLCBjcCkgZG8geyBcCi0JY29uc3QgdV9jaGFyICp0X2NwID0gKGNvbnN0IHVfY2hhciAqKShjcCk7IFwKLQkobCkgPSAoKHVpbnQzMl90KXRfY3BbMF0gPDwgMjQpIFwKLQkgICAgfCAoKHVpbnQzMl90KXRfY3BbMV0gPDwgMTYpIFwKLQkgICAgfCAoKHVpbnQzMl90KXRfY3BbMl0gPDwgOCkgXAotCSAgICB8ICgodWludDMyX3QpdF9jcFszXSkgXAotCSAgICA7IFwKLQkoY3ApICs9IE5TX0lOVDMyU1o7IFwKLX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQotCi0jZGVmaW5lIE5TX1BVVDE2KHMsIGNwKSBkbyB7IFwKLQl1aW50MzJfdCB0X3MgPSAodWludDMyX3QpKHMpOyBcCi0JdV9jaGFyICp0X2NwID0gKHVfY2hhciAqKShjcCk7IFwKLQkqdF9jcCsrID0gdF9zID4+IDg7IFwKLQkqdF9jcCAgID0gdF9zOyBcCi0JKGNwKSArPSBOU19JTlQxNlNaOyBcCi19IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLQotI2RlZmluZSBOU19QVVQzMihsLCBjcCkgZG8geyBcCi0JdWludDMyX3QgdF9sID0gKHVpbnQzMl90KShsKTsgXAotCXVfY2hhciAqdF9jcCA9ICh1X2NoYXIgKikoY3ApOyBcCi0JKnRfY3ArKyA9IHRfbCA+PiAyNDsgXAotCSp0X2NwKysgPSB0X2wgPj4gMTY7IFwKLQkqdF9jcCsrID0gdF9sID4+IDg7IFwKLQkqdF9jcCAgID0gdF9sOyBcCi0JKGNwKSArPSBOU19JTlQzMlNaOyBcCi19IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLQotLyoKLSAqIEFOU0kgQyBpZGVudGlmaWVyIGhpZGluZyBmb3IgYmluZCdzIGxpYi9uYW1lc2VyLgotICovCi0jZGVmaW5lCW5zX21zZ19nZXRmbGFnCQlfX25zX21zZ19nZXRmbGFnCi0jZGVmaW5lIG5zX2dldDE2CQlfX25zX2dldDE2Ci0jZGVmaW5lIG5zX2dldDMyCQlfX25zX2dldDMyCi0jZGVmaW5lIG5zX3B1dDE2CQlfX25zX3B1dDE2Ci0jZGVmaW5lIG5zX3B1dDMyCQlfX25zX3B1dDMyCi0jZGVmaW5lIG5zX2luaXRwYXJzZQkJX19uc19pbml0cGFyc2UKLSNkZWZpbmUgbnNfc2tpcHJyCQlfX25zX3NraXBycgotI2RlZmluZSBuc19wYXJzZXJyCQlfX25zX3BhcnNlcnIKLSNkZWZpbmUJbnNfc3ByaW50cnIJCV9fbnNfc3ByaW50cnIKLSNkZWZpbmUJbnNfc3ByaW50cnJmCQlfX25zX3NwcmludHJyZgotI2RlZmluZQluc19mb3JtYXRfdHRsCQlfX25zX2Zvcm1hdF90dGwKLSNkZWZpbmUJbnNfcGFyc2VfdHRsCQlfX25zX3BhcnNlX3R0bAotI2RlZmluZSBuc19kYXRldG9zZWNzCQlfX25zX2RhdGV0b3NlY3MKLSNkZWZpbmUJbnNfbmFtZV9udG9sCQlfX25zX25hbWVfbnRvbAotI2RlZmluZQluc19uYW1lX250b3AJCV9fbnNfbmFtZV9udG9wCi0jZGVmaW5lCW5zX25hbWVfcHRvbgkJX19uc19uYW1lX3B0b24KLSNkZWZpbmUJbnNfbmFtZV91bnBhY2sJCV9fbnNfbmFtZV91bnBhY2sKLSNkZWZpbmUJbnNfbmFtZV9wYWNrCQlfX25zX25hbWVfcGFjawotI2RlZmluZQluc19uYW1lX2NvbXByZXNzCV9fbnNfbmFtZV9jb21wcmVzcwotI2RlZmluZQluc19uYW1lX3VuY29tcHJlc3MJX19uc19uYW1lX3VuY29tcHJlc3MKLSNkZWZpbmUJbnNfbmFtZV9za2lwCQlfX25zX25hbWVfc2tpcAotI2RlZmluZQluc19uYW1lX3JvbGxiYWNrCV9fbnNfbmFtZV9yb2xsYmFjawotI2RlZmluZQluc19zaWduCQkJX19uc19zaWduCi0jZGVmaW5lCW5zX3NpZ24yCQlfX25zX3NpZ24yCi0jZGVmaW5lCW5zX3NpZ25fdGNwCQlfX25zX3NpZ25fdGNwCi0jZGVmaW5lCW5zX3NpZ25fdGNwMgkJX19uc19zaWduX3RjcDIKLSNkZWZpbmUJbnNfc2lnbl90Y3BfaW5pdAlfX25zX3NpZ25fdGNwX2luaXQKLSNkZWZpbmUgbnNfZmluZF90c2lnCQlfX25zX2ZpbmRfdHNpZwotI2RlZmluZQluc192ZXJpZnkJCV9fbnNfdmVyaWZ5Ci0jZGVmaW5lCW5zX3ZlcmlmeV90Y3AJCV9fbnNfdmVyaWZ5X3RjcAotI2RlZmluZQluc192ZXJpZnlfdGNwX2luaXQJX19uc192ZXJpZnlfdGNwX2luaXQKLSNkZWZpbmUJbnNfc2FtZWRvbWFpbgkJX19uc19zYW1lZG9tYWluCi0jZGVmaW5lCW5zX3N1YmRvbWFpbgkJX19uc19zdWJkb21haW4KLSNkZWZpbmUJbnNfbWFrZWNhbm9uCQlfX25zX21ha2VjYW5vbgotI2RlZmluZQluc19zYW1lbmFtZQkJX19uc19zYW1lbmFtZQotCi1fX0JFR0lOX0RFQ0xTCi1pbnQJCW5zX21zZ19nZXRmbGFnKG5zX21zZywgaW50KTsKLXVpbnQxNl90CW5zX2dldDE2KGNvbnN0IHVfY2hhciAqKTsKLXVpbnQzMl90CW5zX2dldDMyKGNvbnN0IHVfY2hhciAqKTsKLXZvaWQJCW5zX3B1dDE2KHVpbnQxNl90LCB1X2NoYXIgKik7Ci12b2lkCQluc19wdXQzMih1aW50MzJfdCwgdV9jaGFyICopOwotaW50CQluc19pbml0cGFyc2UoY29uc3QgdV9jaGFyICosIGludCwgbnNfbXNnICopOwotaW50CQluc19za2lwcnIoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLCBuc19zZWN0LCBpbnQpOwotaW50CQluc19wYXJzZXJyKG5zX21zZyAqLCBuc19zZWN0LCBpbnQsIG5zX3JyICopOwotaW50CQluc19zcHJpbnRycihjb25zdCBuc19tc2cgKiwgY29uc3QgbnNfcnIgKiwKLQkJCQkgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKLWludAkJbnNfc3ByaW50cnJmKGNvbnN0IHVfY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwKLQkJCQkgIG5zX2NsYXNzLCBuc190eXBlLCB1X2xvbmcsIGNvbnN0IHVfY2hhciAqLAotCQkJCSAgc2l6ZV90LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKLQkJCQkgIGNoYXIgKiwgc2l6ZV90KTsKLWludAkJbnNfZm9ybWF0X3R0bCh1X2xvbmcsIGNoYXIgKiwgc2l6ZV90KTsKLWludAkJbnNfcGFyc2VfdHRsKGNvbnN0IGNoYXIgKiwgdV9sb25nICopOwotdWludDMyX3QJbnNfZGF0ZXRvc2Vjcyhjb25zdCBjaGFyICpjcCwgaW50ICplcnJwKTsKLWludAkJbnNfbmFtZV9udG9sKGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgc2l6ZV90KTsKLWludAkJbnNfbmFtZV9udG9wKGNvbnN0IHVfY2hhciAqLCBjaGFyICosIHNpemVfdCk7Ci1pbnQJCW5zX25hbWVfcHRvbihjb25zdCBjaGFyICosIHVfY2hhciAqLCBzaXplX3QpOwotaW50CQluc19uYW1lX3VucGFjayhjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosCi0JCQkJICAgIGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgc2l6ZV90KTsKLWludAkJbnNfbmFtZV9wYWNrKGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgaW50LAotCQkJCSAgY29uc3QgdV9jaGFyICoqLCBjb25zdCB1X2NoYXIgKiopOwotaW50CQluc19uYW1lX3VuY29tcHJlc3MoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAotCQkJCQljb25zdCB1X2NoYXIgKiwgY2hhciAqLCBzaXplX3QpOwotaW50CQluc19uYW1lX2NvbXByZXNzKGNvbnN0IGNoYXIgKiwgdV9jaGFyICosIHNpemVfdCwKLQkJCQkgICAgICBjb25zdCB1X2NoYXIgKiosIGNvbnN0IHVfY2hhciAqKik7Ci1pbnQJCW5zX25hbWVfc2tpcChjb25zdCB1X2NoYXIgKiosIGNvbnN0IHVfY2hhciAqKTsKLXZvaWQJCW5zX25hbWVfcm9sbGJhY2soY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqKiwKLQkJCQkgICAgICBjb25zdCB1X2NoYXIgKiopOwotaW50CQluc19zaWduKHVfY2hhciAqLCBpbnQgKiwgaW50LCBpbnQsIHZvaWQgKiwKLQkJCSAgICAgY29uc3QgdV9jaGFyICosIGludCwgdV9jaGFyICosIGludCAqLCB0aW1lX3QpOwotaW50CQluc19zaWduMih1X2NoYXIgKiwgaW50ICosIGludCwgaW50LCB2b2lkICosCi0JCQkgICAgICBjb25zdCB1X2NoYXIgKiwgaW50LCB1X2NoYXIgKiwgaW50ICosIHRpbWVfdCwKLQkJCSAgICAgIHVfY2hhciAqKiwgdV9jaGFyICoqKTsKLWludAkJbnNfc2lnbl90Y3AodV9jaGFyICosIGludCAqLCBpbnQsIGludCwKLQkJCQkgbnNfdGNwX3RzaWdfc3RhdGUgKiwgaW50KTsKLWludAkJbnNfc2lnbl90Y3AyKHVfY2hhciAqLCBpbnQgKiwgaW50LCBpbnQsCi0JCQkJICBuc190Y3BfdHNpZ19zdGF0ZSAqLCBpbnQsCi0JCQkJICB1X2NoYXIgKiosIHVfY2hhciAqKik7Ci1pbnQJCW5zX3NpZ25fdGNwX2luaXQodm9pZCAqLCBjb25zdCB1X2NoYXIgKiwgaW50LAotCQkJCQluc190Y3BfdHNpZ19zdGF0ZSAqKTsKLXVfY2hhcgkJKm5zX2ZpbmRfdHNpZyh1X2NoYXIgKiwgdV9jaGFyICopOwotaW50CQluc192ZXJpZnkodV9jaGFyICosIGludCAqLCB2b2lkICosCi0JCQkgICAgICAgY29uc3QgdV9jaGFyICosIGludCwgdV9jaGFyICosIGludCAqLAotCQkJICAgICAgIHRpbWVfdCAqLCBpbnQpOwotaW50CQluc192ZXJpZnlfdGNwKHVfY2hhciAqLCBpbnQgKiwgbnNfdGNwX3RzaWdfc3RhdGUgKiwgaW50KTsKLWludAkJbnNfdmVyaWZ5X3RjcF9pbml0KHZvaWQgKiwgY29uc3QgdV9jaGFyICosIGludCwKLQkJCQkJbnNfdGNwX3RzaWdfc3RhdGUgKik7Ci1pbnQJCW5zX3NhbWVkb21haW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwotaW50CQluc19zdWJkb21haW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwotaW50CQluc19tYWtlY2Fub24oY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCk7Ci1pbnQJCW5zX3NhbWVuYW1lKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKLV9fRU5EX0RFQ0xTCi0KLSNpZmRlZiBCSU5EXzRfQ09NUEFUCi0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyX2NvbXBhdC5oIgotI2VuZGlmCi0KLSNpZiAwCi0jICBpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgotIyAgZGVmaW5lIFhMT0coLi4uKSAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsImxpYmMiLF9fVkFfQVJHU19fKQotI2Vsc2UKLSNkZWZpbmUgIFhMT0coLi4uKSAgIGRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhX0FSUEFfTkFNRVNFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2FycGFfbmFtZXNlcl9jb21wYXQuaCBiL2xpYmMvcHJpdmF0ZS9hcnBhX25hbWVzZXJfY29tcGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5YmRmZDAuLjAwMDAwMDAKLS0tIGEvbGliYy9wcml2YXRlL2FycGFfbmFtZXNlcl9jb21wYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0vKgkkTmV0QlNEOiBuYW1lc2VyX2NvbXBhdC5oLHYgMS4xLjEuMiAyMDA0LzExLzA3IDAxOjI4OjI3IGNocmlzdG9zIEV4cCAkCSovCi0KLS8qIENvcHlyaWdodCAoYykgMTk4MywgMTk4OQotICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiAgICAgIGZyb20gbmFtZXNlci5oCTguMSAoQmVya2VsZXkpIDYvMi85MwotICoJSWQ6IG5hbWVzZXJfY29tcGF0LmgsdiAxLjEuMi4zLjQuMiAyMDA0LzA3LzAxIDA0OjQzOjQxIG1hcmthIEV4cAotICovCi0KLSNpZm5kZWYgX0FSUEFfTkFNRVNFUl9DT01QQVRfCi0jZGVmaW5lCV9BUlBBX05BTUVTRVJfQ09NUEFUXwotCi0jZGVmaW5lCV9fQklORAkJMTk5NTA2MjEJLyogKERFQUQpIGludGVyZmFjZSB2ZXJzaW9uIHN0YW1wLiAqLwotCi0jaW5jbHVkZSA8ZW5kaWFuLmg+Ci0KLSNpZm5kZWYgQllURV9PUkRFUgotI2lmIChCU0QgPj0gMTk5MTAzKQotIyBpbmNsdWRlIDxtYWNoaW5lL2VuZGlhbi5oPgotI2Vsc2UKLSNpZmRlZiBfX2xpbnV4Ci0jIGluY2x1ZGUgPGVuZGlhbi5oPgotI2Vsc2UKLSNkZWZpbmUJTElUVExFX0VORElBTgkxMjM0CS8qIGxlYXN0LXNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKHZheCwgcGMpICovCi0jZGVmaW5lCUJJR19FTkRJQU4JNDMyMQkvKiBtb3N0LXNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKElCTSwgbmV0KSAqLwotI2RlZmluZQlQRFBfRU5ESUFOCTM0MTIJLyogTFNCIGZpcnN0IGluIHdvcmQsIE1TVyBmaXJzdCBpbiBsb25nIChwZHApKi8KLQotI2lmIGRlZmluZWQodmF4KSB8fCBkZWZpbmVkKG5zMzIwMDApIHx8IGRlZmluZWQoc3VuMzg2KSB8fCBkZWZpbmVkKGkzODYpIHx8IFwKLSAgICBkZWZpbmVkKE1JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKEJJVF9aRVJPX09OX1JJR0hUKSB8fCBcCi0gICAgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19hbHBoYSkgfHwgXAotICAgIChkZWZpbmVkKF9fTHlueF9fKSAmJiBkZWZpbmVkKF9feDg2X18pKQotI2RlZmluZSBCWVRFX09SREVSCUxJVFRMRV9FTkRJQU4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChzZWwpIHx8IGRlZmluZWQocHlyKSB8fCBkZWZpbmVkKG1jNjgwMDApIHx8IGRlZmluZWQoc3BhcmMpIHx8IFwKLSAgICBkZWZpbmVkKGlzNjhrKSB8fCBkZWZpbmVkKHRhaG9lKSB8fCBkZWZpbmVkKGlibTAzMikgfHwgZGVmaW5lZChpYm0zNzApIHx8IFwKLSAgICBkZWZpbmVkKE1JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKF9JQk1SMikgfHwgZGVmaW5lZChER1VYKSB8fFwKLSAgICBkZWZpbmVkKGFwb2xsbykgfHwgZGVmaW5lZChfX2NvbnZleF9fKSB8fCBkZWZpbmVkKF9DUkFZKSB8fCBcCi0gICAgZGVmaW5lZChfX2hwcGEpIHx8IGRlZmluZWQoX19ocDkwMDApIHx8IFwKLSAgICBkZWZpbmVkKF9faHA5MDAwczMwMCkgfHwgZGVmaW5lZChfX2hwOTAwMHM3MDApIHx8IFwKLSAgICBkZWZpbmVkKF9faHAzMDAwczkwMCkgfHwgZGVmaW5lZChfX2hwdXgpIHx8IGRlZmluZWQoTVBFKSB8fCBcCi0gICAgZGVmaW5lZCAoQklUX1pFUk9fT05fTEVGVCkgfHwgZGVmaW5lZChtNjhrKSB8fCBkZWZpbmVkKF9fc3BhcmMpIHx8ICBcCi0gICAgKGRlZmluZWQoX19MeW54X18pICYmIFwKLSAgICAgKGRlZmluZWQoX182OGtfXykgfHwgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19wb3dlcnBjX18pKSkKLSNkZWZpbmUgQllURV9PUkRFUglCSUdfRU5ESUFOCi0jZW5kaWYKLSNlbmRpZiAvKiBfX2xpbnV4ICovCi0jZW5kaWYgLyogQlNEICovCi0jZW5kaWYgLyogQllURV9PUkRFUiAqLwotCi0jaWYgIWRlZmluZWQoQllURV9PUkRFUikgfHwgXAotICAgIChCWVRFX09SREVSICE9IEJJR19FTkRJQU4gJiYgQllURV9PUkRFUiAhPSBMSVRUTEVfRU5ESUFOICYmIFwKLSAgICBCWVRFX09SREVSICE9IFBEUF9FTkRJQU4pCi0JLyogeW91IG11c3QgZGV0ZXJtaW5lIHdoYXQgdGhlIGNvcnJlY3QgYml0IG9yZGVyIGlzIGZvcgotCSAqIHlvdXIgY29tcGlsZXIgLSB0aGUgbmV4dCBsaW5lIGlzIGFuIGludGVudGlvbmFsIGVycm9yCi0JICogd2hpY2ggd2lsbCBmb3JjZSB5b3VyIGNvbXBpbGVzIHRvIGJvbWIgdW50aWwgeW91IGZpeAotCSAqIHRoZSBhYm92ZSBtYWNyb3MuCi0JICovCi0gICNlcnJvciAiVW5kZWZpbmVkIG9yIGludmFsaWQgQllURV9PUkRFUiI7Ci0jZW5kaWYKLQotLyoKLSAqIFN0cnVjdHVyZSBmb3IgcXVlcnkgaGVhZGVyLiAgVGhlIG9yZGVyIG9mIHRoZSBmaWVsZHMgaXMgbWFjaGluZS0gYW5kCi0gKiBjb21waWxlci1kZXBlbmRlbnQsIGRlcGVuZGluZyBvbiB0aGUgYnl0ZS9iaXQgb3JkZXIgYW5kIHRoZSBsYXlvdXQKLSAqIG9mIGJpdCBmaWVsZHMuICBXZSB1c2UgYml0IGZpZWxkcyBvbmx5IGluIGludCB2YXJpYWJsZXMsIGFzIHRoaXMKLSAqIGlzIGFsbCBBTlNJIHJlcXVpcmVzLiAgVGhpcyByZXF1aXJlcyBhIHNvbWV3aGF0IGNvbmZ1c2luZyByZWFycmFuZ2VtZW50LgotICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZAlpZCA6MTY7CQkvKiBxdWVyeSBpZGVudGlmaWNhdGlvbiBudW1iZXIgKi8KLSNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KLQkJCS8qIGZpZWxkcyBpbiB0aGlyZCBieXRlICovCi0JdW5zaWduZWQJcXI6IDE7CQkvKiByZXNwb25zZSBmbGFnICovCi0JdW5zaWduZWQJb3Bjb2RlOiA0OwkvKiBwdXJwb3NlIG9mIG1lc3NhZ2UgKi8KLQl1bnNpZ25lZAlhYTogMTsJCS8qIGF1dGhvcml0aXZlIGFuc3dlciAqLwotCXVuc2lnbmVkCXRjOiAxOwkJLyogdHJ1bmNhdGVkIG1lc3NhZ2UgKi8KLQl1bnNpZ25lZAlyZDogMTsJCS8qIHJlY3Vyc2lvbiBkZXNpcmVkICovCi0JCQkvKiBmaWVsZHMgaW4gZm91cnRoIGJ5dGUgKi8KLQl1bnNpZ25lZAlyYTogMTsJCS8qIHJlY3Vyc2lvbiBhdmFpbGFibGUgKi8KLQl1bnNpZ25lZAl1bnVzZWQgOjE7CS8qIHVudXNlZCBiaXRzIChNQlogYXMgb2YgNC45LjNhMykgKi8KLQl1bnNpZ25lZAlhZDogMTsJCS8qIGF1dGhlbnRpYyBkYXRhIGZyb20gbmFtZWQgKi8KLQl1bnNpZ25lZAljZDogMTsJCS8qIGNoZWNraW5nIGRpc2FibGVkIGJ5IHJlc29sdmVyICovCi0JdW5zaWduZWQJcmNvZGUgOjQ7CS8qIHJlc3BvbnNlIGNvZGUgKi8KLSNlbmRpZgotI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTiB8fCBCWVRFX09SREVSID09IFBEUF9FTkRJQU4KLQkJCS8qIGZpZWxkcyBpbiB0aGlyZCBieXRlICovCi0JdW5zaWduZWQJcmQgOjE7CQkvKiByZWN1cnNpb24gZGVzaXJlZCAqLwotCXVuc2lnbmVkCXRjIDoxOwkJLyogdHJ1bmNhdGVkIG1lc3NhZ2UgKi8KLQl1bnNpZ25lZAlhYSA6MTsJCS8qIGF1dGhvcml0aXZlIGFuc3dlciAqLwotCXVuc2lnbmVkCW9wY29kZSA6NDsJLyogcHVycG9zZSBvZiBtZXNzYWdlICovCi0JdW5zaWduZWQJcXIgOjE7CQkvKiByZXNwb25zZSBmbGFnICovCi0JCQkvKiBmaWVsZHMgaW4gZm91cnRoIGJ5dGUgKi8KLQl1bnNpZ25lZAlyY29kZSA6NDsJLyogcmVzcG9uc2UgY29kZSAqLwotCXVuc2lnbmVkCWNkOiAxOwkJLyogY2hlY2tpbmcgZGlzYWJsZWQgYnkgcmVzb2x2ZXIgKi8KLQl1bnNpZ25lZAlhZDogMTsJCS8qIGF1dGhlbnRpYyBkYXRhIGZyb20gbmFtZWQgKi8KLQl1bnNpZ25lZAl1bnVzZWQgOjE7CS8qIHVudXNlZCBiaXRzIChNQlogYXMgb2YgNC45LjNhMykgKi8KLQl1bnNpZ25lZAlyYSA6MTsJCS8qIHJlY3Vyc2lvbiBhdmFpbGFibGUgKi8KLSNlbmRpZgotCQkJLyogcmVtYWluaW5nIGJ5dGVzICovCi0JdW5zaWduZWQJcWRjb3VudCA6MTY7CS8qIG51bWJlciBvZiBxdWVzdGlvbiBlbnRyaWVzICovCi0JdW5zaWduZWQJYW5jb3VudCA6MTY7CS8qIG51bWJlciBvZiBhbnN3ZXIgZW50cmllcyAqLwotCXVuc2lnbmVkCW5zY291bnQgOjE2OwkvKiBudW1iZXIgb2YgYXV0aG9yaXR5IGVudHJpZXMgKi8KLQl1bnNpZ25lZAlhcmNvdW50IDoxNjsJLyogbnVtYmVyIG9mIHJlc291cmNlIGVudHJpZXMgKi8KLX0gSEVBREVSOwotCi0jZGVmaW5lIFBBQ0tFVFNaCU5TX1BBQ0tFVFNaCi0jZGVmaW5lIE1BWEROQU1FCU5TX01BWEROQU1FCi0jZGVmaW5lIE1BWENETkFNRQlOU19NQVhDRE5BTUUKLSNkZWZpbmUgTUFYTEFCRUwJTlNfTUFYTEFCRUwKLSNkZWZpbmUJSEZJWEVEU1oJTlNfSEZJWEVEU1oKLSNkZWZpbmUgUUZJWEVEU1oJTlNfUUZJWEVEU1oKLSNkZWZpbmUgUlJGSVhFRFNaCU5TX1JSRklYRURTWgotI2RlZmluZQlJTlQzMlNaCQlOU19JTlQzMlNaCi0jZGVmaW5lCUlOVDE2U1oJCU5TX0lOVDE2U1oKLSNkZWZpbmUJSU5UOFNaCQlOU19JTlQ4U1oKLSNkZWZpbmUJSU5BRERSU1oJTlNfSU5BRERSU1oKLSNkZWZpbmUJSU42QUREUlNaCU5TX0lONkFERFJTWgotI2RlZmluZQlJTkRJUl9NQVNLCU5TX0NNUFJTRkxHUwotI2RlZmluZSBOQU1FU0VSVkVSX1BPUlQJTlNfREVGQVVMVFBPUlQKLQotI2RlZmluZSBTX1pPTkUJCW5zX3Nfem4KLSNkZWZpbmUgU19QUkVSRVEJbnNfc19wcgotI2RlZmluZSBTX1VQREFURQluc19zX3VkCi0jZGVmaW5lIFNfQUREVAkJbnNfc19hcgotCi0jZGVmaW5lIFFVRVJZCQluc19vX3F1ZXJ5Ci0jZGVmaW5lIElRVUVSWQkJbnNfb19pcXVlcnkKLSNkZWZpbmUgU1RBVFVTCQluc19vX3N0YXR1cwotI2RlZmluZQlOU19OT1RJRllfT1AJbnNfb19ub3RpZnkKLSNkZWZpbmUJTlNfVVBEQVRFX09QCW5zX29fdXBkYXRlCi0KLSNkZWZpbmUgTk9FUlJPUgkJbnNfcl9ub2Vycm9yCi0jZGVmaW5lIEZPUk1FUlIJCW5zX3JfZm9ybWVycgotI2RlZmluZSBTRVJWRkFJTAluc19yX3NlcnZmYWlsCi0jZGVmaW5lIE5YRE9NQUlOCW5zX3Jfbnhkb21haW4KLSNkZWZpbmUgTk9USU1QCQluc19yX25vdGltcGwKLSNkZWZpbmUgUkVGVVNFRAkJbnNfcl9yZWZ1c2VkCi0jZGVmaW5lIFlYRE9NQUlOCW5zX3JfeXhkb21haW4KLSNkZWZpbmUgWVhSUlNFVAkJbnNfcl95eHJyc2V0Ci0jZGVmaW5lIE5YUlJTRVQJCW5zX3JfbnhycnNldAotI2RlZmluZSBOT1RBVVRICQluc19yX25vdGF1dGgKLSNkZWZpbmUgTk9UWk9ORQkJbnNfcl9ub3R6b25lCi0vKiNkZWZpbmUgQkFEU0lHCQluc19yX2JhZHNpZyovCi0vKiNkZWZpbmUgQkFES0VZCQluc19yX2JhZGtleSovCi0vKiNkZWZpbmUgQkFEVElNRQkJbnNfcl9iYWR0aW1lKi8KLQotCi0jZGVmaW5lIERFTEVURQkJbnNfdW9wX2RlbGV0ZQotI2RlZmluZSBBREQJCW5zX3VvcF9hZGQKLQotI2RlZmluZSBUX0EJCW5zX3RfYQotI2RlZmluZSBUX05TCQluc190X25zCi0jZGVmaW5lIFRfTUQJCW5zX3RfbWQKLSNkZWZpbmUgVF9NRgkJbnNfdF9tZgotI2RlZmluZSBUX0NOQU1FCQluc190X2NuYW1lCi0jZGVmaW5lIFRfU09BCQluc190X3NvYQotI2RlZmluZSBUX01CCQluc190X21iCi0jZGVmaW5lIFRfTUcJCW5zX3RfbWcKLSNkZWZpbmUgVF9NUgkJbnNfdF9tcgotI2RlZmluZSBUX05VTEwJCW5zX3RfbnVsbAotI2RlZmluZSBUX1dLUwkJbnNfdF93a3MKLSNkZWZpbmUgVF9QVFIJCW5zX3RfcHRyCi0jZGVmaW5lIFRfSElORk8JCW5zX3RfaGluZm8KLSNkZWZpbmUgVF9NSU5GTwkJbnNfdF9taW5mbwotI2RlZmluZSBUX01YCQluc190X214Ci0jZGVmaW5lIFRfVFhUCQluc190X3R4dAotI2RlZmluZQlUX1JQCQluc190X3JwCi0jZGVmaW5lIFRfQUZTREIJCW5zX3RfYWZzZGIKLSNkZWZpbmUgVF9YMjUJCW5zX3RfeDI1Ci0jZGVmaW5lIFRfSVNETgkJbnNfdF9pc2RuCi0jZGVmaW5lIFRfUlQJCW5zX3RfcnQKLSNkZWZpbmUgVF9OU0FQCQluc190X25zYXAKLSNkZWZpbmUgVF9OU0FQX1BUUgluc190X25zYXBfcHRyCi0jZGVmaW5lCVRfU0lHCQluc190X3NpZwotI2RlZmluZQlUX0tFWQkJbnNfdF9rZXkKLSNkZWZpbmUJVF9QWAkJbnNfdF9weAotI2RlZmluZQlUX0dQT1MJCW5zX3RfZ3BvcwotI2RlZmluZQlUX0FBQUEJCW5zX3RfYWFhYQotI2RlZmluZQlUX0xPQwkJbnNfdF9sb2MKLSNkZWZpbmUJVF9OWFQJCW5zX3Rfbnh0Ci0jZGVmaW5lCVRfRUlECQluc190X2VpZAotI2RlZmluZQlUX05JTUxPQwluc190X25pbWxvYwotI2RlZmluZQlUX1NSVgkJbnNfdF9zcnYKLSNkZWZpbmUgVF9BVE1BCQluc190X2F0bWEKLSNkZWZpbmUgVF9OQVBUUgkJbnNfdF9uYXB0cgotI2RlZmluZSBUX0E2CQluc190X2E2Ci0jZGVmaW5lCVRfVFNJRwkJbnNfdF90c2lnCi0jZGVmaW5lCVRfSVhGUgkJbnNfdF9peGZyCi0jZGVmaW5lIFRfQVhGUgkJbnNfdF9heGZyCi0jZGVmaW5lIFRfTUFJTEIJCW5zX3RfbWFpbGIKLSNkZWZpbmUgVF9NQUlMQQkJbnNfdF9tYWlsYQotI2RlZmluZSBUX0FOWQkJbnNfdF9hbnkKLQotI2RlZmluZSBDX0lOCQluc19jX2luCi0jZGVmaW5lIENfQ0hBT1MJCW5zX2NfY2hhb3MKLSNkZWZpbmUgQ19IUwkJbnNfY19ocwotLyogQklORF9VUERBVEUgKi8KLSNkZWZpbmUgQ19OT05FCQluc19jX25vbmUKLSNkZWZpbmUgQ19BTlkJCW5zX2NfYW55Ci0KLSNkZWZpbmUJR0VUU0hPUlQJCU5TX0dFVDE2Ci0jZGVmaW5lCUdFVExPTkcJCQlOU19HRVQzMgotI2RlZmluZQlQVVRTSE9SVAkJTlNfUFVUMTYKLSNkZWZpbmUJUFVUTE9ORwkJCU5TX1BVVDMyCi0KLSNlbmRpZiAvKiBfQVJQQV9OQU1FU0VSX0NPTVBBVF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXNtLmggYi9saWJjL3ByaXZhdGUvYmlvbmljX2FzbS5oCmluZGV4IDgwM2ZmMjkuLjdjMjY4NmYgMTAwNjQ0Ci0tLSBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXNtLmgKKysrIGIvbGliYy9wcml2YXRlL2Jpb25pY19hc20uaApAQCAtMjksMTUgKzI5LDMyIEBACiAjaWZuZGVmIF9QUklWQVRFX0JJT05JQ19BU01fSF8KICNkZWZpbmUgX1BSSVZBVEVfQklPTklDX0FTTV9IXwogCi0jaWYgIWRlZmluZWQoX19taXBzX18pCi0vKiA8bWFjaGluZS9hc20uaD4gY2F1c2VzIHRyb3VibGUgb24gbWlwcyBieSBpbmNsdWRpbmcgcmVnZGVmcy5oLiAqLwotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4gLyogRm9yIHN5c3RlbSBjYWxsIG51bWJlcnMuICovCiAjZGVmaW5lIE1BWF9FUlJOTyA0MDk1ICAvKiBGb3IgcmVjb2duaXppbmcgc3lzdGVtIGNhbGwgZXJyb3IgcmV0dXJucy4gKi8KIAotLyogVE9ETzogYWRkIEVOVFJZX1BSSVZBVEUuICovCi0vKiBUT0RPOiBhZGQgQVNNX0FMSUFTIG1hY3JvLiAqLworI2RlZmluZSBfX2Jpb25pY19hc21fY3VzdG9tX2VudHJ5KGYpCisjZGVmaW5lIF9fYmlvbmljX2FzbV9jdXN0b21fZW5kKGYpCisjZGVmaW5lIF9fYmlvbmljX2FzbV9mdW5jdGlvbl90eXBlIEBmdW5jdGlvbgorCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworI2RlZmluZSBFTlRSWShmKSBcCisgICAgLnRleHQ7IFwKKyAgICAuZ2xvYmwgZjsgXAorICAgIF9BTElHTl9URVhUOyBcCisgICAgLnR5cGUgZiwgX19iaW9uaWNfYXNtX2Z1bmN0aW9uX3R5cGU7IFwKKyAgICBmOiBcCisgICAgX19iaW9uaWNfYXNtX2N1c3RvbV9lbnRyeShmKTsgXAorICAgIC5jZmlfc3RhcnRwcm9jIFwKKworI2RlZmluZSBFTkQoZikgXAorICAgIC5jZmlfZW5kcHJvYzsgXAorICAgIC5zaXplIGYsIC4tZjsgXAorICAgIF9fYmlvbmljX2FzbV9jdXN0b21fZW5kKGYpIFwKKworLyogTGlrZSBFTlRSWSwgYnV0IHdpdGggaGlkZGVuIHZpc2liaWxpdHkuICovCisjZGVmaW5lIEVOVFJZX1BSSVZBVEUoZikgXAorICAgIEVOVFJZKGYpOyBcCisgICAgLmhpZGRlbiBmIFwKIAogI2VuZGlmIC8qIF9QUklWQVRFX0JJT05JQ19BU01fSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXV4di5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19hdXh2LmgKaW5kZXggNjljNTM0MS4uNTNmY2M0OSAxMDA2NDQKLS0tIGEvbGliYy9wcml2YXRlL2Jpb25pY19hdXh2LmgKKysrIGIvbGliYy9wcml2YXRlL2Jpb25pY19hdXh2LmgKQEAgLTI5LDExICsyOSwxMiBAQAogI2RlZmluZSBfUFJJVkFURV9CSU9OSUNfQVVYVl9IXwogCiAjaW5jbHVkZSA8ZWxmLmg+CisjaW5jbHVkZSA8bGluay5oPgogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogCiBfX0JFR0lOX0RFQ0xTCiAKLWV4dGVybiBFbGZfYXV4dl90KiBfX2xpYmNfYXV4djsKK2V4dGVybiBFbGZXKGF1eHZfdCkqIF9fbGliY19hdXh2OwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvYmlvbmljX2NvbmZpZy5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzk4MTFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL2Jpb25pY19jb25maWcuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfQklPTklDX0NPTkZJR19IXworI2RlZmluZSBfQklPTklDX0NPTkZJR19IXworCisvLyB2YWxsb2MoMykgYW5kIHB2YWxsb2MoMykgd2VyZSByZW1vdmVkIGZyb20gUE9TSVggMjAwNC4gV2UgZG8gbm90IGluY2x1ZGUgdGhlbQorLy8gZm9yIExQNjQsIGJ1dCB0aGUgc3ltYm9scyByZW1haW4gaW4gTFAzMiBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkuCisjaWYgIWRlZmluZWQoX19MUDY0X18pCisjZGVmaW5lIEhBVkVfREVQUkVDQVRFRF9NQUxMT0NfRlVOQ1MgMQorI2VuZGlmCisKKyNlbmRpZiAvLyBfQklPTklDX0NPTkZJR19IXwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2Jpb25pY19mdXRleC5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19mdXRleC5oCmluZGV4IGJmYzM1MjAuLmJkMmJkMzYgMTAwNjQ0Ci0tLSBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfZnV0ZXguaAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX2Z1dGV4LmgKQEAgLTI4LDM0ICsyOCw0MyBAQAogI2lmbmRlZiBfQklPTklDX0ZVVEVYX0gKICNkZWZpbmUgX0JJT05JQ19GVVRFWF9ICiAKKyNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2Z1dGV4Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiAKIF9fQkVHSU5fREVDTFMKIAotZXh0ZXJuIGludCBfX2Z1dGV4X3dhaXQodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgdmFsLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVvdXQpOwotZXh0ZXJuIGludCBfX2Z1dGV4X3dha2Uodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgY291bnQpOworc3RydWN0IHRpbWVzcGVjOwogCi1leHRlcm4gaW50IF9fZnV0ZXhfc3lzY2FsbDModm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgb3AsIGludCB2YWwpOwotZXh0ZXJuIGludCBfX2Z1dGV4X3N5c2NhbGw0KHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IG9wLCBpbnQgdmFsLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVvdXQpOworc3RhdGljIGlubGluZSBfX2Fsd2F5c19pbmxpbmUgaW50IF9fZnV0ZXgodm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgb3AsIGludCB2YWx1ZSwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiB0aW1lb3V0KSB7CisgIC8vIE91ciBnZW5lcmF0ZWQgc3lzY2FsbCBhc3NlbWJsZXIgc2V0cyBlcnJubywgYnV0IG91ciBjYWxsZXJzIChwdGhyZWFkIGZ1bmN0aW9ucykgZG9uJ3Qgd2FudCB0by4KKyAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisgIGludCByZXN1bHQgPSBzeXNjYWxsKF9fTlJfZnV0ZXgsIGZ0eCwgb3AsIHZhbHVlLCB0aW1lb3V0KTsKKyAgaWYgKF9fcHJlZGljdF9mYWxzZShyZXN1bHQgPT0gLTEpKSB7CisgICAgcmVzdWx0ID0gLWVycm5vOworICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KIAotI2lmbmRlZiBGVVRFWF9QUklWQVRFX0ZMQUcKLSNkZWZpbmUgRlVURVhfUFJJVkFURV9GTEFHICAxMjgKLSNlbmRpZgorc3RhdGljIGlubGluZSBpbnQgX19mdXRleF93YWtlKHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IGNvdW50KSB7CisgIHJldHVybiBfX2Z1dGV4KGZ0eCwgRlVURVhfV0FLRSwgY291bnQsIE5VTEwpOworfQogCi0jaWZuZGVmIEZVVEVYX1dBSVRfUFJJVkFURQotI2RlZmluZSBGVVRFWF9XQUlUX1BSSVZBVEUgIChGVVRFWF9XQUlUfEZVVEVYX1BSSVZBVEVfRkxBRykKLSNlbmRpZgorc3RhdGljIGlubGluZSBpbnQgX19mdXRleF93YWtlX2V4KHZvbGF0aWxlIHZvaWQqIGZ0eCwgYm9vbCBzaGFyZWQsIGludCBjb3VudCkgeworICByZXR1cm4gX19mdXRleChmdHgsIHNoYXJlZCA/IEZVVEVYX1dBS0UgOiBGVVRFWF9XQUtFX1BSSVZBVEUsIGNvdW50LCBOVUxMKTsKK30KIAotI2lmbmRlZiBGVVRFWF9XQUtFX1BSSVZBVEUKLSNkZWZpbmUgRlVURVhfV0FLRV9QUklWQVRFICAoRlVURVhfV0FLRXxGVVRFWF9QUklWQVRFX0ZMQUcpCi0jZW5kaWYKK3N0YXRpYyBpbmxpbmUgaW50IF9fZnV0ZXhfd2FpdCh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCB2YWx1ZSwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiB0aW1lb3V0KSB7CisgIHJldHVybiBfX2Z1dGV4KGZ0eCwgRlVURVhfV0FJVCwgdmFsdWUsIHRpbWVvdXQpOworfQogCi0vKiBMaWtlIF9fZnV0ZXhfd2FpdC93YWtlLCBidXQgdGFrZSBhbiBhZGRpdGlvbmFsICdwc2hhcmVkJyBhcmd1bWVudC4KLSAqIHdoZW4gbm9uLTAsIHRoaXMgd2lsbCB1c2Ugbm9ybWFsIGZ1dGV4ZXMuIE90aGVyd2lzZSwgcHJpdmF0ZSBmdXRleGVzLgotICovCi1leHRlcm4gaW50IF9fZnV0ZXhfd2FrZV9leCh2b2xhdGlsZSB2b2lkICpmdHgsIGludCBwc2hhcmVkLCBpbnQgdmFsKTsKLWV4dGVybiBpbnQgX19mdXRleF93YWl0X2V4KHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IHBzaGFyZWQsIGludCB2YWwsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdGltZW91dCk7CitzdGF0aWMgaW5saW5lIGludCBfX2Z1dGV4X3dhaXRfZXgodm9sYXRpbGUgdm9pZCogZnR4LCBib29sIHNoYXJlZCwgaW50IHZhbHVlLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqIHRpbWVvdXQpIHsKKyAgcmV0dXJuIF9fZnV0ZXgoZnR4LCBzaGFyZWQgPyBGVVRFWF9XQUlUIDogRlVURVhfV0FJVF9QUklWQVRFLCB2YWx1ZSwgdGltZW91dCk7Cit9CiAKIF9fRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfbWFjcm9zLmggYi9saWJjL3ByaXZhdGUvYmlvbmljX21hY3Jvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNzk0YmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX21hY3Jvcy5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9CSU9OSUNfTUFDUk9TX0hfCisjZGVmaW5lIF9CSU9OSUNfTUFDUk9TX0hfCisKKy8vIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTiBkaXNhbGxvd3MgdGhlIGNvcHkgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMuCisvLyBJdCBnb2VzIGluIHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMgaW4gYSBjbGFzcy4KKyNkZWZpbmUgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKSBcCisgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgXAorICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCisKKy8vIEEgbWFjcm8gdG8gZGlzYWxsb3cgYWxsIHRoZSBpbXBsaWNpdCBjb25zdHJ1Y3RvcnMsIG5hbWVseSB0aGUKKy8vIGRlZmF1bHQgY29uc3RydWN0b3IsIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMuCisvLworLy8gVGhpcyBzaG91bGQgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNzCisvLyB0aGF0IHdhbnRzIHRvIHByZXZlbnQgYW55b25lIGZyb20gaW5zdGFudGlhdGluZyBpdC4gVGhpcyBpcworLy8gZXNwZWNpYWxseSB1c2VmdWwgZm9yIGNsYXNzZXMgY29udGFpbmluZyBvbmx5IHN0YXRpYyBtZXRob2RzLgorI2RlZmluZSBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoVHlwZU5hbWUpIFwKKyAgVHlwZU5hbWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFtZSkKKworI2RlZmluZSBCSU9OSUNfQUxJR04odmFsdWUsIGFsaWdubWVudCkgXAorICAoKCh2YWx1ZSkgKyAoYWxpZ25tZW50KSAtIDEpICYgfigoYWxpZ25tZW50KSAtIDEpKQorCisjZGVmaW5lIEJJT05JQ19ST1VORF9VUF9QT1dFUl9PRl8yKHZhbHVlKSBcCisgIChzaXplb2YodmFsdWUpID09IDgpIFwKKyAgICA/ICgxVUwgPDwgKDY0IC0gX19idWlsdGluX2Nsemwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmFsdWUpKSkpIFwKKyAgICA6ICgxVUwgPDwgKDMyIC0gX19idWlsdGluX2NseihzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSkpKQorCisjZW5kaWYgLy8gX0JJT05JQ19NQUNST1NfSF8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfbWJzdGF0ZS5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19tYnN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4YjQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfbWJzdGF0ZS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfQklPTklDX01CU1RBVEVfSAorI2RlZmluZSBfQklPTklDX01CU1RBVEVfSAorCisjaW5jbHVkZSA8d2NoYXIuaD4KKworX19CRUdJTl9ERUNMUworCisvKgorICogVGhlc2UgcmV0dXJuIHZhbHVlcyBhcmUgc3BlY2lmaWVkIGJ5IFBPU0lYIGZvciBtdWx0aWJ5dGUgY29udmVyc2lvbgorICogZnVuY3Rpb25zLgorICovCisjZGVmaW5lIF9fTUJfRVJSX0lMTEVHQUxfU0VRVUVOQ0Ugc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKyNkZWZpbmUgX19NQl9FUlJfSU5DT01QTEVURV9TRVFVRU5DRSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKQorCisjZGVmaW5lIF9fTUJfSVNfRVJSKHJ2KSAocnYgPT0gX19NQl9FUlJfSUxMRUdBTF9TRVFVRU5DRSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgcnYgPT0gX19NQl9FUlJfSU5DT01QTEVURV9TRVFVRU5DRSkKKworc2l6ZV90IG1ic3RhdGVfYnl0ZXNfc29fZmFyKGNvbnN0IG1ic3RhdGVfdCogcHMpOwordm9pZCBtYnN0YXRlX3NldF9ieXRlKG1ic3RhdGVfdCogcHMsIGludCBpLCBjaGFyIGJ5dGUpOwordWludDhfdCBtYnN0YXRlX2dldF9ieXRlKGNvbnN0IG1ic3RhdGVfdCogcHMsIGludCBuKTsKK3NpemVfdCByZXNldF9hbmRfcmV0dXJuX2lsbGVnYWwoaW50IF9lcnJubywgbWJzdGF0ZV90KiBwcyk7CitzaXplX3QgcmVzZXRfYW5kX3JldHVybihpbnQgX3JldHVybiwgbWJzdGF0ZV90KiBwcyk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBfQklPTklDX01CU1RBVEVfSApkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2Jpb25pY19uYW1lX21lbS5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19uYW1lX21lbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjYxNjNkLi4wMDAwMDAwCi0tLSBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfbmFtZV9tZW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgX0JJT05JQ19OQU1FX01FTV9ICi0jZGVmaW5lIF9CSU9OSUNfTkFNRV9NRU1fSAotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KLV9fQkVHSU5fREVDTFMKLQotaW50IF9fYmlvbmljX25hbWVfbWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKm5hbWUpOwotCi1fX0VORF9ERUNMUwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfcHJjdGwuaCBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfcHJjdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDNjY2NiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL2Jpb25pY19wcmN0bC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEJJT05JQ19QUkNUTF9ICisjZGVmaW5lIEJJT05JQ19QUkNUTF9ICisKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKworLy8gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBieSBBbmRyb2lkIGtlcm5lbHMsIHNvIGl0J3Mgbm90IGluIHRoZSB1YXBpIGhlYWRlcnMuCisjZGVmaW5lIFBSX1NFVF9WTUEgICAweDUzNTY0ZDQxCisjZGVmaW5lIFBSX1NFVF9WTUFfQU5PTl9OQU1FICAgIDAKKworI2VuZGlmIC8vIEJJT05JQ19QUkNUTF9ICmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvYmlvbmljX3N0cmluZ191dGlscy5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19zdHJpbmdfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjBlY2NmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL2Jpb25pY19zdHJpbmdfdXRpbHMuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfQklPTklDX1NUUklOR19VVElMU19IXworI2RlZmluZSBfQklPTklDX1NUUklOR19VVElMU19IXworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBlbmRzX3dpdGgoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyKSB7CisgIHNpemVfdCBzMV9sZW5ndGggPSBzdHJsZW4oczEpOworICBzaXplX3QgczJfbGVuZ3RoID0gc3RybGVuKHMyKTsKKyAgaWYgKHMyX2xlbmd0aCA+IHMxX2xlbmd0aCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICByZXR1cm4gbWVtY21wKHMxICsgKHMxX2xlbmd0aCAtIHMyX2xlbmd0aCksIHMyLCBzMl9sZW5ndGgpID09IDA7Cit9CisKKyNlbmRpZiAvLyBfQklPTklDX1NUUklOR19VVElMU19IXwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2Jpb25pY190aW1lLmggYi9saWJjL3ByaXZhdGUvYmlvbmljX3RpbWUuaAppbmRleCA3YzgwZjU5Li4wMzBkY2ZkIDEwMDY0NAotLS0gYS9saWJjL3ByaXZhdGUvYmlvbmljX3RpbWUuaAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX3RpbWUuaApAQCAtMzMsMzEgKzMzLDggQEAKIAogX19CRUdJTl9ERUNMUwogCi0jaWZuZGVmIF9CSU9OSUNfU1RSRlRJTUVfVFpfREVDTEFSRUQKLSNkZWZpbmUgX0JJT05JQ19TVFJGVElNRV9UWl9ERUNMQVJFRAotCi1zdHJ1Y3Qgc3RyZnRpbWVfbG9jYWxlIHsKLSAgICBjb25zdCBjaGFyICogIG1vblsxMl07Ci0gICAgY29uc3QgY2hhciAqICBtb250aFsxMl07Ci0gICAgY29uc3QgY2hhciAqICBzdGFuZGFsb25lX21vbnRoWzEyXTsKLSAgICBjb25zdCBjaGFyICogIHdkYXlbN107Ci0gICAgY29uc3QgY2hhciAqICB3ZWVrZGF5WzddOwotICAgIGNvbnN0IGNoYXIgKiAgWF9mbXQ7Ci0gICAgY29uc3QgY2hhciAqICB4X2ZtdDsKLSAgICBjb25zdCBjaGFyICogIGNfZm10OwotICAgIGNvbnN0IGNoYXIgKiAgYW07Ci0gICAgY29uc3QgY2hhciAqICBwbTsKLSAgICBjb25zdCBjaGFyICogIGRhdGVfZm10OwotfTsKLQotLyoKLSAqIE5vdGU6IHlvdSBzaG91bGQgY29uc2lkZXIgdGhlc2UgZXh0ZW5zaW9ucyBkZXByZWNhdGVkIGFuZCB1c2UgbWFuYWdlZCBjb2RlIG9yIGljdTRjIGluc3RlYWQuCi0gKi8KLWV4dGVybiBzaXplX3Qgc3RyZnRpbWVfdHooY2hhciogcywgc2l6ZV90IG1heCwgY29uc3QgY2hhciogZm9ybWF0LCBjb25zdCBzdHJ1Y3QgdG0qIHRtLCBjb25zdCBzdHJ1Y3Qgc3RyZnRpbWVfbG9jYWxlKiBsYyk7Ci1leHRlcm4gdGltZV90IG1rdGltZV90eihzdHJ1Y3QgdG0qIGNvbnN0IHRtcCwgY2hhciBjb25zdCogdHopOwotZXh0ZXJuIHZvaWQgbG9jYWx0aW1lX3R6KGNvbnN0IHRpbWVfdCogY29uc3QgdGltZXAsIHN0cnVjdCB0bSogdG1wLCBjb25zdCBjaGFyKiB0eik7Ci0KLSNlbmRpZiAvKiBfQklPTklDX1NUUkZUSU1FX1RaX0RFQ0xBUkVEICovCisvLyBXZSBjYW4ndCByZW1vdmUgdGhpcyAoYW5kIHRoaXMgZmlsZSkgdW50aWwgd2UgZml4IE10cFV0aWxzLmNwcC4KK3RpbWVfdCBta3RpbWVfdHooc3RydWN0IHRtKiBjb25zdCwgY2hhciBjb25zdCopOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvYmlvbmljX3Rscy5oIGIvbGliYy9wcml2YXRlL2Jpb25pY190bHMuaAppbmRleCBhNDJhOGFiLi41NmE2MWJlIDEwMDY0NAotLS0gYS9saWJjL3ByaXZhdGUvYmlvbmljX3Rscy5oCisrKyBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfdGxzLmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2luY2x1ZGUgPHN5cy9saW1pdHMuaD4KKyNpbmNsdWRlICJiaW9uaWNfbWFjcm9zLmgiCiAjaW5jbHVkZSAiX19nZXRfdGxzLmgiCiAKIF9fQkVHSU5fREVDTFMKQEAgLTQ2LDMyICs0NywyNyBAQAogICoqIHByZS1hbGxvY2F0ZWQgc2xvdCBkaXJlY3RseSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uKS4KICAqKi8KIAotLyogV2VsbC1rbm93biBUTFMgc2xvdHMuIFdoYXQgZGF0YSBnb2VzIGluIHdoaWNoIHNsb3QgaXMgYXJiaXRyYXJ5IHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuICovCisvLyBXZWxsLWtub3duIFRMUyBzbG90cy4gV2hhdCBkYXRhIGdvZXMgaW4gd2hpY2ggc2xvdCBpcyBhcmJpdHJhcnkgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KIGVudW0gewotICBUTFNfU0xPVF9TRUxGID0gMCwgLyogVGhlIGtlcm5lbCByZXF1aXJlcyB0aGlzIHNwZWNpZmljIHNsb3QgZm9yIHg4Ni4gKi8KKyAgVExTX1NMT1RfU0VMRiA9IDAsIC8vIFRoZSBrZXJuZWwgcmVxdWlyZXMgdGhpcyBzcGVjaWZpYyBzbG90IGZvciB4ODYuCiAgIFRMU19TTE9UX1RIUkVBRF9JRCwKICAgVExTX1NMT1RfRVJSTk8sCiAKLSAgLyogVGhpcyBzbG90IGluIHRoZSBjaGlsZCdzIFRMUyBpcyB1c2VkIHRvIHN5bmNocm9uaXplIHRoZSBwYXJlbnQgYW5kIGNoaWxkCi0gICAqIGR1cmluZyB0aHJlYWQgaW5pdGlhbGl6YXRpb24uIFRoZSBjaGlsZCBmaW5pc2hlcyB3aXRoIHRoaXMgbXV0ZXggYmVmb3JlCi0gICAqIHJ1bm5pbmcgYW55IGNvZGUgdGhhdCBjYW4gc2V0IGVycm5vLCBzbyB3ZSBjYW4gcmV1c2UgdGhlIGVycm5vIHNsb3QuICovCi0gIFRMU19TTE9UX1NUQVJUX01VVEVYID0gVExTX1NMT1RfRVJSTk8sCi0KLSAgLyogVGhlc2UgdHdvIGFyZW4ndCB1c2VkIGJ5IGJpb25pYyBpdHNlbGYsIGJ1dCBhbGxvdyB0aGUgZ3JhcGhpY3MgY29kZSB0bwotICAgKiBhY2Nlc3MgVExTIGRpcmVjdGx5IHJhdGhlciB0aGFuIHVzaW5nIHRoZSBwdGhyZWFkIEFQSS4gKi8KKyAgLy8gVGhlc2UgdHdvIGFyZW4ndCB1c2VkIGJ5IGJpb25pYyBpdHNlbGYsIGJ1dCBhbGxvdyB0aGUgZ3JhcGhpY3MgY29kZSB0bworICAvLyBhY2Nlc3MgVExTIGRpcmVjdGx5IHJhdGhlciB0aGFuIHVzaW5nIHRoZSBwdGhyZWFkIEFQSS4KICAgVExTX1NMT1RfT1BFTkdMX0FQSSA9IDMsCiAgIFRMU19TTE9UX09QRU5HTCA9IDQsCiAKLSAgLyogVGhpcyBzbG90IGlzIG9ubHkgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGZyb20gdGhlIGR5bmFtaWMgbGlua2VyIHRvCi0gICAqIGxpYmMuc28gd2hlbiB0aGUgQyBsaWJyYXJ5IGlzIGxvYWRlZCBpbiB0byBtZW1vcnkuIFRoZSBDIHJ1bnRpbWUgaW5pdAotICAgKiBmdW5jdGlvbiB3aWxsIHRoZW4gY2xlYXIgaXQuIFNpbmNlIGl0cyB1c2UgaXMgZXh0cmVtZWx5IHRlbXBvcmFyeSwKLSAgICogd2UgcmV1c2UgYW4gZXhpc3RpbmcgbG9jYXRpb24gdGhhdCBpc24ndCBuZWVkZWQgZHVyaW5nIGxpYmMgc3RhcnR1cC4gKi8KKyAgLy8gVGhpcyBzbG90IGlzIG9ubHkgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGZyb20gdGhlIGR5bmFtaWMgbGlua2VyIHRvCisgIC8vIGxpYmMuc28gd2hlbiB0aGUgQyBsaWJyYXJ5IGlzIGxvYWRlZCBpbiB0byBtZW1vcnkuIFRoZSBDIHJ1bnRpbWUgaW5pdAorICAvLyBmdW5jdGlvbiB3aWxsIHRoZW4gY2xlYXIgaXQuIFNpbmNlIGl0cyB1c2UgaXMgZXh0cmVtZWx5IHRlbXBvcmFyeSwKKyAgLy8gd2UgcmV1c2UgYW4gZXhpc3RpbmcgbG9jYXRpb24gdGhhdCBpc24ndCBuZWVkZWQgZHVyaW5nIGxpYmMgc3RhcnR1cC4KICAgVExTX1NMT1RfQklPTklDX1BSRUlOSVQgPSBUTFNfU0xPVF9PUEVOR0xfQVBJLAogCi0gIFRMU19TTE9UX1NUQUNLX0dVQVJEID0gNSwgLyogR0NDIHJlcXVpcmVzIHRoaXMgc3BlY2lmaWMgc2xvdCBmb3IgeDg2LiAqLworICBUTFNfU0xPVF9TVEFDS19HVUFSRCA9IDUsIC8vIEdDQyByZXF1aXJlcyB0aGlzIHNwZWNpZmljIHNsb3QgZm9yIHg4Ni4KICAgVExTX1NMT1RfRExFUlJPUiwKIAotICBUTFNfU0xPVF9GSVJTVF9VU0VSX1NMT1QgLyogTXVzdCBjb21lIGxhc3QhICovCisgIFRMU19TTE9UX0ZJUlNUX1VTRVJfU0xPVCAvLyBNdXN0IGNvbWUgbGFzdCEKIH07CiAKIC8qCkBAIC04MCwxNiArNzYsMjEgQEAKICAqIHB0aHJlYWRfa2V5X2NyZWF0ZTsgZ3JlcCBmb3IgR0xPQkFMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUiB0byBmaW5kIHRob3NlLiBXZSBuZWVkIHRvIG1hbnVhbGx5CiAgKiBtYWludGFpbiB0aGF0IHNlY29uZCBudW1iZXIsIGJ1dCBwdGhyZWFkX3Rlc3Qgd2lsbCBmYWlsIGlmIHdlIGZvcmdldC4KICAqLwotI2RlZmluZSBHTE9CQUxfSU5JVF9USFJFQURfTE9DQUxfQlVGRkVSX0NPVU5UIDQKKyNkZWZpbmUgR0xPQkFMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUl9DT1VOVCA1CiAKLSNkZWZpbmUgQklPTklDX0FMSUdOKHgsIGEpICgoKHgpICsgKGEgLSAxKSkgJiB+KGEgLSAxKSkKKyNpZiBkZWZpbmVkKFVTRV9KRU1BTExPQykKKy8qIGplbWFsbG9jIHVzZXMgNSBrZXlzIGZvciBpdHNlbGYuICovCisjZGVmaW5lIEJJT05JQ19UTFNfUkVTRVJWRURfU0xPVFMgKEdMT0JBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVJfQ09VTlQgKyA1KQorI2Vsc2UKKyNkZWZpbmUgQklPTklDX1RMU19SRVNFUlZFRF9TTE9UUyBHTE9CQUxfSU5JVF9USFJFQURfTE9DQUxfQlVGRkVSX0NPVU5UCisjZW5kaWYKIAogLyoKICAqIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBUTFMgYXJyYXkuCiAgKiBUaGlzIGluY2x1ZGVzIHNwYWNlIGZvciBwdGhyZWFkIGtleXMgYW5kIG91ciBvd24gaW50ZXJuYWwgc2xvdHMuCiAgKiBXZSBuZWVkIHRvIHJvdW5kIHVwIHRvIG1haW50YWluIHN0YWNrIGFsaWdubWVudC4KICAqLwotI2RlZmluZSBCSU9OSUNfVExTX1NMT1RTIEJJT05JQ19BTElHTihQVEhSRUFEX0tFWVNfTUFYICsgVExTX1NMT1RfRklSU1RfVVNFUl9TTE9UICsgR0xPQkFMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUl9DT1VOVCwgNCkKKyNkZWZpbmUgQklPTklDX1RMU19TTE9UUyBCSU9OSUNfQUxJR04oUFRIUkVBRF9LRVlTX01BWCArIFRMU19TTE9UX0ZJUlNUX1VTRVJfU0xPVCArIEJJT05JQ19UTFNfUkVTRVJWRURfU0xPVFMsIDQpCiAKIF9fRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9saWJjX2V2ZW50cy5oIGIvbGliYy9wcml2YXRlL2xpYmNfZXZlbnRzLmgKaW5kZXggNWQyMGY0Yi4uZjJiOTczZCAxMDA2NDQKLS0tIGEvbGliYy9wcml2YXRlL2xpYmNfZXZlbnRzLmgKKysrIGIvbGliYy9wcml2YXRlL2xpYmNfZXZlbnRzLmgKQEAgLTQwLDYgKzQwLDggQEAKICNkZWZpbmUgQklPTklDX0VWRU5UX1NUUk5DUFlfQlVGRkVSX09WRVJGTE9XICA4MDEyMAogI2RlZmluZSBCSU9OSUNfRVZFTlRfTUVNU0VUX0JVRkZFUl9PVkVSRkxPVyAgIDgwMTI1CiAjZGVmaW5lIEJJT05JQ19FVkVOVF9TVFJDUFlfQlVGRkVSX09WRVJGTE9XICAgODAxMzAKKyNkZWZpbmUgQklPTklDX0VWRU5UX1NUUENQWV9CVUZGRVJfT1ZFUkZMT1cgICA4MDEzNQorI2RlZmluZSBCSU9OSUNfRVZFTlRfU1RQTkNQWV9CVUZGRVJfT1ZFUkZMT1cgIDgwMTQwCiAKICNkZWZpbmUgQklPTklDX0VWRU5UX1JFU09MVkVSX09MRF9SRVNQT05TRSAgICA4MDMwMAogI2RlZmluZSBCSU9OSUNfRVZFTlRfUkVTT0xWRVJfV1JPTkdfU0VSVkVSICAgIDgwMzA1CmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvbGliY19sb2dnaW5nLmggYi9saWJjL3ByaXZhdGUvbGliY19sb2dnaW5nLmgKaW5kZXggMWNkY2I2ZS4uZGEyMTkyYiAxMDA2NDQKLS0tIGEvbGliYy9wcml2YXRlL2xpYmNfbG9nZ2luZy5oCisrKyBiL2xpYmMvcHJpdmF0ZS9saWJjX2xvZ2dpbmcuaApAQCAtNTIsMTkgKzUyLDI4IEBACiAgIEFORFJPSURfTE9HX1NJTEVOVCwgICAgIC8qIG9ubHkgZm9yIFNldE1pblByaW9yaXR5KCk7IG11c3QgYmUgbGFzdCAqLwogfTsKIAorZW51bSB7CisgIExPR19JRF9NSU4gPSAwLAorCisgIExPR19JRF9NQUlOID0gMCwKKyAgTE9HX0lEX1JBRElPID0gMSwKKyAgTE9HX0lEX0VWRU5UUyA9IDIsCisgIExPR19JRF9TWVNURU0gPSAzLAorICBMT0dfSURfQ1JBU0ggPSA0LAorCisgIExPR19JRF9NQVgKK307CisKIHN0cnVjdCBhYm9ydF9tc2dfdCB7CiAgIHNpemVfdCBzaXplOwogICBjaGFyIG1zZ1swXTsKIH07CiAKLV9fTElCQ19ISURERU5fXyB2b2lkIF9fbGliY19zZXRfYWJvcnRfbWVzc2FnZShjb25zdCBjaGFyKiBtc2cpOwotCiAvLwogLy8gRm9ybWF0cyBhIG1lc3NhZ2UgdG8gdGhlIGxvZyAocHJpb3JpdHkgJ2ZhdGFsJyksIHRoZW4gYWJvcnRzLgogLy8KIAotX19MSUJDX0hJRERFTl9fIF9fbm9yZXR1cm4gdm9pZCBfX2xpYmNfZmF0YWwoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCi0gICAgX19wcmludGZsaWtlKDEsIDIpOworX19MSUJDX0hJRERFTl9fIF9fbm9yZXR1cm4gdm9pZCBfX2xpYmNfZmF0YWwoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIF9fcHJpbnRmbGlrZSgxLCAyKTsKIAogLy8KIC8vIEZvcm1hdHMgYSBtZXNzYWdlIHRvIHRoZSBsb2cgKHByaW9yaXR5ICdmYXRhbCcpLCBidXQgZG9lc24ndCBhYm9ydC4KQEAgLTc3LDcgKzg2LDcgQEAKIAogLy8KIC8vIEZvcm1hdHRpbmcgcm91dGluZXMgZm9yIHRoZSBDIGxpYnJhcnkncyBpbnRlcm5hbCBkZWJ1Z2dpbmcuCi0vLyBVbmxpa2UgdGhlIHVzdWFsIGFsdGVybmF0aXZlcywgdGhlc2UgZG9uJ3QgYWxsb2NhdGUuCisvLyBVbmxpa2UgdGhlIHVzdWFsIGFsdGVybmF0aXZlcywgdGhlc2UgZG9uJ3QgYWxsb2NhdGUsIGFuZCB0aGV5IGRvbid0IGRyYWcgaW4gYWxsIG9mIHN0ZGlvLgogLy8KIAogX19MSUJDX0hJRERFTl9fIGludCBfX2xpYmNfZm9ybWF0X2J1ZmZlcihjaGFyKiBidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSwgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvbnNzd2l0Y2guaCBiL2xpYmMvcHJpdmF0ZS9uc3N3aXRjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDM4NDRiLi4wMDAwMDAwCi0tLSBhL2xpYmMvcHJpdmF0ZS9uc3N3aXRjaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjM3ICswLDAgQEAKLS8qCSROZXRCU0Q6IG5zc3dpdGNoLmgsdiAxLjE4IDIwMDUvMTEvMjkgMDM6MTI6NTggY2hyaXN0b3MgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDQgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi0gKiBieSBMdWtlIE1ld2J1cm4uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBOZXRCU0QKLSAqICAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKLSAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgX05TU1dJVENIX0gKLSNkZWZpbmUgX05TU1dJVENIX0gJMQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0KLSNkZWZpbmUJTlNTX01PRFVMRV9JTlRFUkZBQ0VfVkVSU0lPTgkwCi0KLSNpZm5kZWYgX1BBVEhfTlNfQ09ORgotI2RlZmluZSBfUEFUSF9OU19DT05GCSIvZXRjL25zc3dpdGNoLmNvbmYiCi0jZW5kaWYKLQotI2RlZmluZQlOU19DT05USU5VRQkwCi0jZGVmaW5lCU5TX1JFVFVSTgkxCi0KLS8qCi0gKiBMYXlvdXQgb2Y6Ci0gKgl1aW50MzJfdCBuc19zcmMuZmxhZ3MKLSAqLwotCS8qIG5zc3dpdGNoLmNvbmYgc3RhdHVzIGNvZGVzIGFuZCBuc2Rpc3BhdGNoKDMpIHJldHVybiB2YWx1ZXMgKi8KLSNkZWZpbmUJTlNfU1VDQ0VTUwkoMTw8MCkJCS8qIGVudHJ5IHdhcyBmb3VuZCAqLwotI2RlZmluZQlOU19VTkFWQUlMCSgxPDwxKQkJLyogc291cmNlIG5vdCByZXNwb25kaW5nLCBvciBjb3JydXB0ICovCi0jZGVmaW5lCU5TX05PVEZPVU5ECSgxPDwyKQkJLyogc291cmNlIHJlc3BvbmRlZCAnbm8gc3VjaCBlbnRyeScgKi8KLSNkZWZpbmUJTlNfVFJZQUdBSU4JKDE8PDMpCQkvKiBzb3VyY2UgYnVzeSwgbWF5IHJlc3BvbmQgdG8gcmV0cnlzICovCi0jZGVmaW5lCU5TX1NUQVRVU01BU0sJMHgwMDAwMDBmZgkvKiBiaXRtYXNrIHRvIGdldCB0aGUgc3RhdHVzIGZsYWdzICovCi0KLQkvKiBpbnRlcm5hbCBuc2Rpc3BhdGNoKDMpIGZsYWdzOyBub3Qgc2V0dGFibGUgaW4gbnNzd2l0Y2guY29uZig1KSAgKi8KLSNkZWZpbmUJTlNfRk9SQ0VBTEwJKDE8PDgpCQkvKiBmb3JjZSBhbGwgbWV0aG9kcyB0byBiZSBpbnZva2VkOyAqLwotCi0vKgotICogQ3VycmVudGx5IGltcGxlbWVudGVkIHNvdXJjZXMuCi0gKi8KLSNkZWZpbmUgTlNTUkNfRklMRVMJImZpbGVzIgkJLyogbG9jYWwgZmlsZXMgKi8KLSNkZWZpbmUJTlNTUkNfRE5TCSJkbnMiCQkvKiBETlM7IElOIGZvciBob3N0cywgSFMgZm9yIG90aGVycyAqLwotI2RlZmluZQlOU1NSQ19OSVMJIm5pcyIJCS8qIFlQL05JUyAqLwotI2RlZmluZQlOU1NSQ19DT01QQVQJImNvbXBhdCIJLyogcGFzc3dkLGdyb3VwIGluIFlQIGNvbXBhdCBtb2RlICovCi0KLS8qCi0gKiBDdXJyZW50bHkgaW1wbGVtZW50ZWQgZGF0YWJhc2VzLgotICovCi0jZGVmaW5lIE5TREJfSE9TVFMJCSJob3N0cyIKLSNkZWZpbmUgTlNEQl9HUk9VUAkJImdyb3VwIgotI2RlZmluZSBOU0RCX0dST1VQX0NPTVBBVAkiZ3JvdXBfY29tcGF0IgotI2RlZmluZSBOU0RCX05FVEdST1VQCQkibmV0Z3JvdXAiCi0jZGVmaW5lIE5TREJfTkVUV09SS1MJCSJuZXR3b3JrcyIKLSNkZWZpbmUgTlNEQl9QQVNTV0QJCSJwYXNzd2QiCi0jZGVmaW5lIE5TREJfUEFTU1dEX0NPTVBBVAkicGFzc3dkX2NvbXBhdCIKLSNkZWZpbmUgTlNEQl9TSEVMTFMJCSJzaGVsbHMiCi0KLS8qCi0gKiBTdWdnZXN0ZWQgZGF0YWJhc2VzIHRvIGltcGxlbWVudC4KLSAqLwotI2RlZmluZSBOU0RCX0FMSUFTRVMJCSJhbGlhc2VzIgotI2RlZmluZSBOU0RCX0FVVEgJCSJhdXRoIgotI2RlZmluZSBOU0RCX0FVVE9NT1VOVAkJImF1dG9tb3VudCIKLSNkZWZpbmUgTlNEQl9CT09UUEFSQU1TCQkiYm9vdHBhcmFtcyIKLSNkZWZpbmUgTlNEQl9FVEhFUlMJCSJldGhlcnMiCi0jZGVmaW5lIE5TREJfRVhQT1JUUwkJImV4cG9ydHMiCi0jZGVmaW5lIE5TREJfTkVUTUFTS1MJCSJuZXRtYXNrcyIKLSNkZWZpbmUgTlNEQl9QSE9ORVMJCSJwaG9uZXMiCi0jZGVmaW5lIE5TREJfUFJJTlRDQVAJCSJwcmludGNhcCIKLSNkZWZpbmUgTlNEQl9QUk9UT0NPTFMJCSJwcm90b2NvbHMiCi0jZGVmaW5lIE5TREJfUkVNT1RFCQkicmVtb3RlIgotI2RlZmluZSBOU0RCX1JQQwkJInJwYyIKLSNkZWZpbmUgTlNEQl9TRU5ETUFJTFZBUlMJInNlbmRtYWlsdmFycyIKLSNkZWZpbmUgTlNEQl9TRVJWSUNFUwkJInNlcnZpY2VzIgotI2RlZmluZSBOU0RCX1RFUk1DQVAJCSJ0ZXJtY2FwIgotI2RlZmluZSBOU0RCX1RUWVMJCSJ0dHlzIgotCi0vKgotICogbnNfZHRhYiBgY2FsbGJhY2snIGZ1bmN0aW9uIHNpZ25hdHVyZS4KLSAqLwotdHlwZWRlZglpbnQgKCpuc3NfbWV0aG9kKSh2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7Ci0KLS8qCi0gKiBuc19kdGFiIC0gYG5zc3dpdGNoIGRpc3BhdGNoIHRhYmxlJwotICogQ29udGFpbnMgYW4gZW50cnkgZm9yIGVhY2ggc291cmNlIGFuZCB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24gdG8gY2FsbC4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCWNvbnN0IGNoYXIJICpzcmM7Ci0JbnNzX21ldGhvZAkgY2FsbGJhY2s7Ci0Jdm9pZAkJICpjYl9kYXRhOwotfSBuc19kdGFiOwotCi0vKgotICogTWFjcm9zIHRvIGhlbHAgYnVpbGQgYW4gbnNfZHRhYltdCi0gKi8KLSNkZWZpbmUgTlNfRklMRVNfQ0IoRixDKQl7IE5TU1JDX0ZJTEVTLAlGLAlfX1VOQ09OU1QoQykgfSwKLSNkZWZpbmUgTlNfQ09NUEFUX0NCKEYsQykJeyBOU1NSQ19DT01QQVQsCUYsCV9fVU5DT05TVChDKSB9LAotCi0jaWZkZWYgSEVTSU9ECi0jICAgZGVmaW5lIE5TX0ROU19DQihGLEMpCXsgTlNTUkNfRE5TLAlGLAlfX1VOQ09OU1QoQykgfSwKLSNlbHNlCi0jICAgZGVmaW5lIE5TX0ROU19DQihGLEMpCi0jZW5kaWYKLQotI2lmZGVmIFlQCi0jICAgZGVmaW5lIE5TX05JU19DQihGLEMpCXsgTlNTUkNfTklTLAlGLAlfX1VOQ09OU1QoQykgfSwKLSNlbHNlCi0jICAgZGVmaW5lIE5TX05JU19DQihGLEMpCi0jZW5kaWYKLQotLyoKLSAqIG5zX3NyYyAtIGBuc3N3aXRjaCBzb3VyY2UnCi0gKiBVc2VkIGJ5IHRoZSBuc3BhcnNlciByb3V0aW5lcyB0byBzdG9yZSBhIG1hcHBpbmcgYmV0d2VlbiBhIHNvdXJjZQotICogYW5kIGl0cyBkaXNwYXRjaCBjb250cm9sIGZsYWdzIGZvciBhIGdpdmVuIGRhdGFiYXNlLgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JY29uc3QgY2hhcgkqbmFtZTsKLQl1aW50MzJfdAkgZmxhZ3M7Ci19IG5zX3NyYzsKLQotCi0jaWYgMAotLyoKLSAqIERlZmF1bHQgc291cmNlbGlzdHMgKGlmIG5zc3dpdGNoLmNvbmYgaXMgbWlzc2luZywgY29ycnVwdCwKLSAqIG9yIHRoZSByZXF1ZXN0ZWQgZGF0YWJhc2UgZG9lc24ndCBoYXZlIGFuIGVudHJ5KQotICovCi1leHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0c3JjW107Ci1leHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0Y29tcGF0W107Ci1leHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0Y29tcGF0X2ZvcmNlYWxsW107Ci1leHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0ZmlsZXNbXTsKLWV4dGVybiBjb25zdCBuc19zcmMgX19uc2RlZmF1bHRmaWxlc19mb3JjZWFsbFtdOwotZXh0ZXJuIGNvbnN0IG5zX3NyYyBfX25zZGVmYXVsdG5pc1tdOwotZXh0ZXJuIGNvbnN0IG5zX3NyYyBfX25zZGVmYXVsdG5pc19mb3JjZWFsbFtdOwotI2VuZGlmCi0KLS8qCi0gKiBuc19tdGFiIC0gYG5zc3dpdGNoIG1ldGhvZCB0YWJsZScKLSAqIEFuIG5zc3dpdGNoIG1vZHVsZSBwcm92aWRlcyBhIG1hcHBpbmcgZnJvbSAoZGF0YWJhc2UgbmFtZSwgbWV0aG9kIG5hbWUpCi0gKiB0dXBsZXMgdG8gdGhlIG5zc19tZXRob2QgYW5kIGFzc29jaWF0ZWQgY2FsbGJhY2sgZGF0YS4gIEVmZmVjdGl2ZWx5LAotICogbnNfZHRhYiwgYnV0IHVzZWQgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzLgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JY29uc3QgY2hhcgkqZGF0YWJhc2U7Ci0JY29uc3QgY2hhcgkqbmFtZTsKLQluc3NfbWV0aG9kCSBtZXRob2Q7Ci0Jdm9pZAkJKm1kYXRhOwotfSBuc19tdGFiOwotCi0vKgotICogbnNzX21vZHVsZV9yZWdpc3Rlcl9mbiAtIG1vZHVsZSByZWdpc3RyYXRpb24gZnVuY3Rpb24KLSAqCWNhbGxlZCBhdCBtb2R1bGUgbG9hZAotICogbnNzX21vZHVsZV91bnJlZ2lzdGVyX2ZuIC0gbW9kdWxlIHVuLXJlZ2lzdHJhdGlvbiBmdW5jdGlvbgotICoJY2FsbGVkIGF0IG1vZHVsZSB1bmxvYWQKLSAqLwotdHlwZWRlZgl2b2lkICgqbnNzX21vZHVsZV91bnJlZ2lzdGVyX2ZuKShuc19tdGFiICosIHVfaW50KTsKLXR5cGVkZWYJbnNfbXRhYiAqKCpuc3NfbW9kdWxlX3JlZ2lzdGVyX2ZuKShjb25zdCBjaGFyICosIHVfaW50ICosCi0JCQkJCSAgIG5zc19tb2R1bGVfdW5yZWdpc3Rlcl9mbiAqKTsKLQotI2lmZGVmIF9OU19QUklWQVRFCi0KLS8qCi0gKiBQcml2YXRlIGRhdGEgc3RydWN0dXJlcyBmb3IgYmFjay1lbmQgbnNzd2l0Y2ggaW1wbGVtZW50YXRpb24uCi0gKi8KLQotLyoKLSAqIG5zX2RidCAtIGBuc3N3aXRjaCBkYXRhYmFzZSB0aGFuZycKLSAqIEZvciBlYWNoIGRhdGFiYXNlIGluIC9ldGMvbnNzd2l0Y2guY29uZiB0aGVyZSBpcyBhIG5zX2RidCwgd2l0aCBpdHMKLSAqIG5hbWUgYW5kIGEgbGlzdCBvZiBuc19zcmMncyBjb250YWluaW5nIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24uCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQljb25zdCBjaGFyCSpuYW1lOwkJLyogbmFtZSBvZiBkYXRhYmFzZSAqLwotCW5zX3NyYwkJKnNyY2xpc3Q7CS8qIGxpc3Qgb2Ygc291cmNlcyAqLwotCXVfaW50CQkgc3JjbGlzdHNpemU7CS8qIHNpemUgb2Ygc3JjbGlzdCAqLwotfSBuc19kYnQ7Ci0KLS8qCi0gKiBuc19tb2QgLSBgbnNzd2l0Y2ggbW9kdWxlJwotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JY29uc3QgY2hhcgkqbmFtZTsJCS8qIG1vZHVsZSBuYW1lICovCi0Jdm9pZAkJKmhhbmRsZTsJLyogaGFuZGxlIGZyb20gZGxvcGVuKCkgKi8KLQluc19tdGFiCQkqbXRhYjsJCS8qIG1ldGhvZCB0YWJsZSAqLwotCXVfaW50CQkgbXRhYnNpemU7CS8qIHNpemUgb2YgbXRhYiAqLwotCQkJCQkvKiBjYWxsZWQgdG8gdW5sb2FkIG1vZHVsZSAqLwotCW5zc19tb2R1bGVfdW5yZWdpc3Rlcl9mbiB1bnJlZ2lzdGVyOwotfSBuc19tb2Q7Ci0KLSNlbmRpZiAvKiBfTlNfUFJJVkFURSAqLwotCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQotX19CRUdJTl9ERUNMUwotaW50CW5zZGlzcGF0Y2godm9pZCAqLCBjb25zdCBuc19kdGFiIFtdLCBjb25zdCBjaGFyICosCi0JCQljb25zdCBjaGFyICosIGNvbnN0IG5zX3NyYyBbXSwgLi4uKTsKLQotI2lmZGVmIF9OU19QUklWQVRFCi1pbnQJCSBfbnNkYnRhZGRzcmMobnNfZGJ0ICosIGNvbnN0IG5zX3NyYyAqKTsKLXZvaWQJCSBfbnNkYnRkdW1wKGNvbnN0IG5zX2RidCAqKTsKLWludAkJIF9uc2RidHB1dChjb25zdCBuc19kYnQgKik7Ci12b2lkCQkgX25zeXllcnJvcihjb25zdCBjaGFyICopOwotaW50CQkgX25zeXlsZXgodm9pZCk7Ci0jZW5kaWYgLyogX05TX1BSSVZBVEUgKi8KLQotX19FTkRfREVDTFMKLQotI2VuZGlmIC8qICFfTlNTV0lUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL3Jlc29sdl9jYWNoZS5oIGIvbGliYy9wcml2YXRlL3Jlc29sdl9jYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGExMTgwLi4wMDAwMDAwCi0tLSBhL2xpYmMvcHJpdmF0ZS9yZXNvbHZfY2FjaGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIF9SRVNPTFZfQ0FDSEVfSF8KLSNkZWZpbmUgX1JFU09MVl9DQUNIRV9IXwotCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0KLXN0cnVjdCBfX3Jlc19zdGF0ZTsKLXN0cnVjdCByZXNvbHZfY2FjaGU7ICAvKiBmb3J3YXJkICovCi0KLS8qIGdldHMgdGhlIGNhY2hlIGZvciBhbiBpbnRlcmZhY2UuIFNldCBpZm5hbWUgYXJndW1lbnQgdG8gTlVMTCBvcgotICogZW1wdHkgYnVmZmVyICgnXDAnKSB0byBnZXQgY2FjaGUgZm9yIGRlZmF1bHQgaW50ZXJmYWNlLgotICogcmV0dXJuZWQgY2FjaGUgbWlnaHQgYmUgTlVMTCovCi1fX0xJQkNfSElEREVOX18KLWV4dGVybiBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiAgX19nZXRfcmVzX2NhY2hlKGNvbnN0IGNoYXIqIGlmbmFtZSk7Ci0KLS8qIHRoaXMgZ2V0cyBjYWxsZWQgZXZlcnl0aW1lIHdlIGRldGVjdCBzb21lIGNoYW5nZXMgaW4gdGhlIEROUyBjb25maWd1cmF0aW9uCi0gKiBhbmQgd2lsbCBmbHVzaCB0aGUgY2FjaGUgKi8KLV9fTElCQ19ISURERU5fXwotZXh0ZXJuIHZvaWQgIF9yZXNvbHZfY2FjaGVfcmVzZXQoIHVuc2lnbmVkICBnZW5lcmF0aW9uICk7Ci0KLS8qIEdldHMgdGhlIGFkZHJlc3Mgb2YgdGhlIG46dGggbmFtZSBzZXJ2ZXIgZm9yIHRoZSBkZWZhdWx0IGludGVyZmFjZQotICogUmV0dXJuIGxlbmd0aCBvZiBhZGRyZXNzIG9uIHN1Y2Nlc3MgZWxzZSAwLgotICogTm90ZTogVGhlIGZpcnN0IG5hbWUgc2VydmVyIGlzIGF0IG4gPSAxICovCi1fX0xJQkNfSElEREVOX18KLWV4dGVybiBpbnQgX3Jlc29sdl9jYWNoZV9nZXRfbmFtZXNlcnZlcihpbnQgbiwgY2hhciogYWRkciwgaW50IGFkZHJMZW4pOwotCi0vKiBHZXRzIHRoZSBhZGRyZXNzIG9mIHRoZSBuOnRoIG5hbWUgc2VydmVyIGZvciBhIGNlcnRhaW4gaW50ZXJmYWNlCi0gKiBSZXR1cm4gbGVuZ3RoIG9mIGFkZHJlc3Mgb24gc3VjY2VzcyBlbHNlIDAuCi0gKiBOb3RlOiBUaGUgZmlyc3QgbmFtZSBzZXJ2ZXIgaXMgYXQgbiA9IDEgKi8KLV9fTElCQ19ISURERU5fXwotZXh0ZXJuIGludCBfcmVzb2x2X2NhY2hlX2dldF9uYW1lc2VydmVyX2Zvcl9pZmFjZShjb25zdCBjaGFyKiBpZm5hbWUsIGludCBuLAotICAgICAgICBjaGFyKiBhZGRyLCBpbnQgYWRkckxlbik7Ci0KLS8qIEdldHMgYWRkcmluZm8gb2YgdGhlIG46dGggbmFtZSBzZXJ2ZXIgYXNzb2NpYXRlZCB3aXRoIGFuIGludGVyZmFjZS4KLSAqIE5VTEwgaXMgcmV0dXJuZWQgaWYgbm8gYWRkcmVzcyBpZiBmb3VuZC4KLSAqIE5vdGU6IFRoZSBmaXJzdCBuYW1lIHNlcnZlciBpcyBhdCBuID0gMS4gKi8KLV9fTElCQ19ISURERU5fXwotZXh0ZXJuIHN0cnVjdCBhZGRyaW5mbyogX3Jlc29sdl9jYWNoZV9nZXRfbmFtZXNlcnZlcl9hZGRyX2Zvcl9pZmFjZShjb25zdCBjaGFyKiBpZm5hbWUsIGludCBuKTsKLQotLyogR2V0cyBhZGRyaW5mbyBvZiB0aGUgbjp0aCBuYW1lIHNlcnZlciBhc3NvY2lhdGVkIHdpdGggdGhlIGRlZmF1bHQgaW50ZXJmYWNlCi0gKiBOVUxMIGlzIHJldHVybmVkIGlmIG5vIGFkZHJlc3MgaWYgZm91bmQuCi0gKiBOb3RlOiBUaGUgZmlyc3QgbmFtZSBzZXJ2ZXIgaXMgYXQgbiA9IDEuICovCi1fX0xJQkNfSElEREVOX18KLWV4dGVybiBzdHJ1Y3QgYWRkcmluZm8qIF9yZXNvbHZfY2FjaGVfZ2V0X25hbWVzZXJ2ZXJfYWRkcihpbnQgbik7Ci0KLS8qIGdldHMgdGhlIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZWZhdWx0IGludGVyZmFjZSAqLwotX19MSUJDX0hJRERFTl9fCi1leHRlcm4gc3RydWN0IGluX2FkZHIqIF9yZXNvbHZfZ2V0X2FkZHJfb2ZfZGVmYXVsdF9pZmFjZSgpOwotCi0vKiBnZXRzIHRoZSBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGludGVyZmFjZSAqLwotX19MSUJDX0hJRERFTl9fCi1leHRlcm4gc3RydWN0IGluX2FkZHIqIF9yZXNvbHZfZ2V0X2FkZHJfb2ZfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lKTsKLQotLyogQ29weSB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBpbnRlcmZhY2UgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlci4KLSAqIFJldHVybnMgdGhlIHN0cmluZyBsZW5ndGggb2YgdGhlIGRlZmF1bHQgaW50ZXJmYWNlLAotICogYmUgdGhhdCBsZXNzIG9yIG1vcmUgdGhhbiB0aGUgYnVmZkxlbiwgb3IgMCBpZiBub3RoaW5nIGhhZCBiZWVuIHdyaXR0ZW4gKi8KLV9fTElCQ19ISURERU5fXwotIGV4dGVybiBzaXplX3QgX3Jlc29sdl9nZXRfZGVmYXVsdF9pZmFjZShjaGFyKiBidWZmLCBzaXplX3QgYnVmZkxlbik7Ci0KLS8qIHNldHMgdGhlIG5hbWUgc2VydmVyIGFkZHJlc3NlcyB0byB0aGUgcHJvdmlkZWQgcmVzX3N0YXRlIHN0cnVjdHVyZS4gVGhlCi0gKiBuYW1lIHNlcnZlcnMgYXJlIHJldHJpZXZlZCBmcm9tIHRoZSBjYWNoZSB3aGljaCBpcyBhc3NvY2lhdGVkCi0gKiB3aXRoIHRoZSBpbnRlcmZhY2UgdG8gd2hpY2ggdGhlIHJlc19zdGF0ZSBzdHJ1Y3R1cmUgaXMgYXNzb2NpYXRlZCAqLwotX19MSUJDX0hJRERFTl9fCi1leHRlcm4gdm9pZCBfcmVzb2x2X3BvcHVsYXRlX3Jlc19mb3JfaWZhY2Uoc3RydWN0IF9fcmVzX3N0YXRlKiBzdGF0cCk7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gICAgUkVTT0xWX0NBQ0hFX1VOU1VQUE9SVEVELCAgLyogdGhlIGNhY2hlIGNhbid0IGhhbmRsZSB0aGF0IGtpbmQgb2YgcXVlcmllcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9yIHRoZSBhbnN3ZXIgYnVmZmVyIGlzIHRvbyBzbWFsbCAqLwotICAgIFJFU09MVl9DQUNIRV9OT1RGT1VORCwgICAgIC8qIHRoZSBjYWNoZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyBxdWVyeSAqLwotICAgIFJFU09MVl9DQUNIRV9GT1VORCAgICAgICAgIC8qIHRoZSBjYWNoZSBmb3VuZCB0aGUgYW5zd2VyICovCi19IFJlc29sdkNhY2hlU3RhdHVzOwotCi1fX0xJQkNfSElEREVOX18KLWV4dGVybiBSZXNvbHZDYWNoZVN0YXR1cwotX3Jlc29sdl9jYWNoZV9sb29rdXAoIHN0cnVjdCByZXNvbHZfY2FjaGUqICBjYWNoZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgICAgICAgICAgcXVlcnksCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIHF1ZXJ5bGVuLAotICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICBhbnN3ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGFuc3dlcnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgKmFuc3dlcmxlbiApOwotCi0vKiBhZGQgYSAocXVlcnksYW5zd2VyKSB0byB0aGUgY2FjaGUsIG9ubHkgY2FsbCBpZiBfcmVzb2x2X2NhY2hlX2xvb2t1cAotICogZGlkIHJldHVybiBSRVNPTFZfQ0FDSEVfTk9URk9VTkQKLSAqLwotX19MSUJDX0hJRERFTl9fCi1leHRlcm4gdm9pZAotX3Jlc29sdl9jYWNoZV9hZGQoIHN0cnVjdCByZXNvbHZfY2FjaGUqICBjYWNoZSwKLSAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgICAgICAgICAgcXVlcnksCi0gICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIHF1ZXJ5bGVuLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICAgICAgICAgICBhbnN3ZXIsCi0gICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGFuc3dlcmxlbiApOwotCi0vKiBOb3RpZnkgdGhlIGNhY2hlIGEgcmVxdWVzdCBmYWlsZWQgKi8KLV9fTElCQ19ISURERU5fXwotZXh0ZXJuIHZvaWQKLV9yZXNvbHZfY2FjaGVfcXVlcnlfZmFpbGVkKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiBjYWNoZSwKLSAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBxdWVyeSwKLSAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICBxdWVyeWxlbik7Ci0KLSNlbmRpZiAvKiBfUkVTT0xWX0NBQ0hFX0hfICovCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvcmVzb2x2X2lmYWNlLmggYi9saWJjL3ByaXZhdGUvcmVzb2x2X2lmYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMjQxMjQuLjAwMDAwMDAKLS0tIGEvbGliYy9wcml2YXRlL3Jlc29sdl9pZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgX1JFU09MVl9JRkFDRV9ICi0jZGVmaW5lIF9SRVNPTFZfSUZBQ0VfSAotCi0vKiBUaGlzIGhlYWRlciBjb250YWlucyBkZWNsYXJhdGlvbnMgcmVsYXRlZCB0byBwZXItaW50ZXJmYWNlIEROUwotICogc2VydmVyIHNlbGVjdGlvbi4gVGhleSBhcmUgdXNlZCBieSBzeXN0ZW0vbmV0ZC8gYW5kIHNob3VsZCBub3QgYmUKLSAqIGV4cG9zZWQgYnkgdGhlIEMgbGlicmFyeSdzIHB1YmxpYyBOREsgaGVhZGVycy4KLSAqCi0gKiBOT1RFOiA8cmVzb2x2Lmg+IGNvbnRhaW5zIHRoZSBzYW1lIGRlY2xhcmF0aW9ucywgdGhpcyB3aWxsIGJlIHJlbW92ZWQKLSAqICAgICAgICB3aGVuIHdlIGNoYW5nZSBzeXN0ZW0vbmV0ZCB0byB1c2UgdGhpcyBoZWFkZXIgaW5zdGVhZC4KLSAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLQotX19CRUdJTl9ERUNMUwotCi0vKiBVc2UgYSBndWFyZCBtYWNybyB1bnRpbCB3ZSByZW1vdmUgdGhlIHNhbWUgZGVmaW5pdGlvbnMgZnJvbSA8cmVzb2x2Lmg+ICovCi0jaWZuZGVmIF9CSU9OSUNfUkVTT0xWX0lGQUNFX0ZVTkNUSU9OU19ERUNMQVJFRAotI2RlZmluZSBfQklPTklDX1JFU09MVl9JRkFDRV9GVU5DVElPTlNfREVDTEFSRUQKLQotLyogU2V0IG5hbWUgb2YgZGVmYXVsdCBpbnRlcmZhY2UgKi8KLWV4dGVybiB2b2lkIF9yZXNvbHZfc2V0X2RlZmF1bHRfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lKTsKLQotLyogc2V0IG5hbWUgc2VydmVycyBmb3IgYW4gaW50ZXJmYWNlICovCi1leHRlcm4gdm9pZCBfcmVzb2x2X3NldF9uYW1lc2VydmVyc19mb3JfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lLCBjb25zdCBjaGFyKiogc2VydmVycywgaW50IG51bXNlcnZlcnMsCi0gICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbnMpOwotCi0vKiB0ZWxsIHJlc29sdmVyIG9mIHRoZSBhZGRyZXNzIG9mIGFuIGludGVyZmFjZSAqLwotZXh0ZXJuIHZvaWQgX3Jlc29sdl9zZXRfYWRkcl9vZl9pZmFjZShjb25zdCBjaGFyKiBpZm5hbWUsIHN0cnVjdCBpbl9hZGRyKiBhZGRyKTsKLQotLyogZmx1c2ggdGhlIGNhY2hlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVmYXVsdCBpbnRlcmZhY2UgKi8KLWV4dGVybiB2b2lkIF9yZXNvbHZfZmx1c2hfY2FjaGVfZm9yX2RlZmF1bHRfaWZhY2UoKTsKLQotLyogZmx1c2ggdGhlIGNhY2hlIGFzc29jaWF0ZWQgd2l0aCBhIGNlcnRhaW4gaW50ZXJmYWNlICovCi1leHRlcm4gdm9pZCBfcmVzb2x2X2ZsdXNoX2NhY2hlX2Zvcl9pZmFjZShjb25zdCBjaGFyKiBpZm5hbWUpOwotCi0vKiBzZXQgYSBwaWQgdG8gdXNlIHRoZSBuYW1lIHNlcnZlcnMgb2YgdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UgKi8KLWV4dGVybiB2b2lkIF9yZXNvbHZfc2V0X2lmYWNlX2Zvcl9waWQoY29uc3QgY2hhciogaWZuYW1lLCBpbnQgcGlkKTsKLQotLyogY2xlYXIgcGlkIGZyb20gYmVpbmcgYXNzb2NpYXRlZCB3aXRoIGFuIGludGVyZmFjZSAqLwotZXh0ZXJuIHZvaWQgX3Jlc29sdl9jbGVhcl9pZmFjZV9mb3JfcGlkKGludCBwaWQpOwotCi0vKiBjbGVhciB0aGUgZW50aXJlIG1hcHBpbmcgb2YgcGlkcyB0byBpbnRlcmZhY2VzLiAqLwotZXh0ZXJuIHZvaWQgX3Jlc29sdl9jbGVhcl9pZmFjZV9waWRfbWFwcGluZygpOwotCi0vKiogR2V0cyB0aGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIHRvIHdoaWNoIHRoZSBwaWQgaXMgYXR0YWNoZWQuCi0gKiAgT24gZXJyb3IsIC0xIGlzIHJldHVybmVkLgotICogIElmIG5vIGludGVyZmFjZSBpcyBmb3VuZCwgMCBpcyByZXR1cm5lZCBhbmQgYnVmZiBpcyBzZXQgdG8gZW1wdHkgKCdcMCcpLgotICogIElmIGFuIGludGVyZmFjZSBpcyBmb3VuZCwgdGhlIG5hbWUgaXMgY29waWVkIHRvIGJ1ZmYgYW5kIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgaXMgcmV0dXJuZWQuCi0gKiAgQXJndW1lbnRzOiAgIHBpZCBUaGUgcGlkIHRvIGZpbmQgYW4gaW50ZXJmYWNlIGZvcgotICogICAgICAgICAgICAgICBidWZmIEEgYnVmZmVyIHRvIGNvcHkgdGhlIHJlc3VsdCB0bwotICogICAgICAgICAgICAgICBidWZmTGVuIExlbmd0aCBvZiBidWZmLiBBbiBpbnRlcmZhY2UgaXMgYXQgbW9zdCBJRl9OQU1FU0laRSBpbiBsZW5ndGggKi8KLWV4dGVybiBpbnQgX3Jlc29sdl9nZXRfcGlkc19hc3NvY2lhdGVkX2ludGVyZmFjZShpbnQgcGlkLCBjaGFyKiBidWZmLCBpbnQgYnVmZkxlbik7Ci0KLQotLyoqIHNldCBhIHVpZCByYW5nZSB0byB1c2UgdGhlIG5hbWUgc2VydmVycyBvZiB0aGUgc3BlY2lmaWVkIGludGVyZmFjZSAqLwotZXh0ZXJuIGludCBfcmVzb2x2X3NldF9pZmFjZV9mb3JfdWlkX3JhbmdlKGNvbnN0IGNoYXIqIGlmbmFtZSwgaW50IHVpZF9zdGFydCwgaW50IHVpZF9lbmQpOwotCi0vKiogUmVtb3ZlIGEgbWFwcGluZyBhZGRlZCBieSBfcmVzb2x2X3NldF9pZmFjZV9mb3JfdWlkX3JhbmdlLgotICogIElmIG5vIHN1Y2ggcnVsZSBleGlzdHMgLTEgaXMgcmV0dXJuZWQuICovCi1leHRlcm4gaW50IF9yZXNvbHZfY2xlYXJfaWZhY2VfZm9yX3VpZF9yYW5nZShjb25zdCBjaGFyKiBpZm5hbWUsIGludCB1aWRfc3RhcnQsIGludCB1aWRfZW5kKTsKLQotLyogY2xlYXIgdGhlIGVudGlyZSBtYXBwaW5nIG9mIHVpZCByYW5nZXMgdG8gaW50ZXJmYWNlcy4gKi8KLWV4dGVybiB2b2lkIF9yZXNvbHZfY2xlYXJfaWZhY2VfdWlkX3JhbmdlX21hcHBpbmcoKTsKLQotLyoqIEdldHMgdGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSB0byB3aGljaCB0aGUgdWlkIGlzIGF0dGFjaGVkLgotICogIE9uIGVycm9yLCAtMSBpcyByZXR1cm5lZC4KLSAqICBJZiBubyBpbnRlcmZhY2UgaXMgZm91bmQsIDAgaXMgcmV0dXJuZWQgYW5kIGJ1ZmYgaXMgc2V0IHRvIGVtcHR5ICgnXDAnKS4KLSAqICBJZiBhbiBpbnRlcmZhY2UgaXMgZm91bmQsIHRoZSBuYW1lIGlzIGNvcGllZCB0byBidWZmIGFuZCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGlzIHJldHVybmVkLgotICogIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBydWxlcyBjb3ZlcmluZyB1aWQgdGhlIG1vc3QgcmVjZW50bHkgYWRkZWQgcnVsZSB3aWxsIGJlIHJldHVybmVkLgotICogIEFyZ3VtZW50czogICB1aWQgVGhlIHVpZCB0byBmaW5kIGFuIGludGVyZmFjZSBmb3IKLSAqICAgICAgICAgICAgICAgYnVmZiBBIGJ1ZmZlciB0byBjb3B5IHRoZSByZXN1bHQgdG8KLSAqICAgICAgICAgICAgICAgYnVmZkxlbiBMZW5ndGggb2YgYnVmZi4gQW4gaW50ZXJmYWNlIGlzIGF0IG1vc3QgSUZfTkFNRVNJWkUgaW4gbGVuZ3RoICovCi1leHRlcm4gaW50IF9yZXNvbHZfZ2V0X3VpZHNfYXNzb2NpYXRlZF9pbnRlcmZhY2UoaW50IHVpZCwgY2hhciogYnVmZiwgaW50IGJ1ZmZMZW4pOwotCi0jZW5kaWYgLyogX0JJT05JQ19SRVNPTFZfSUZBQ0VfRlVOQ1RJT05TX0RFQ0xBUkVEICovCi0KLV9fRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfUkVTT0xWX0lGQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9yZXNvbHZfcHJpdmF0ZS5oIGIvbGliYy9wcml2YXRlL3Jlc29sdl9wcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3YmNiODkuLjAwMDAwMDAKLS0tIGEvbGliYy9wcml2YXRlL3Jlc29sdl9wcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OTkgKzAsMCBAQAotLyoJJE5ldEJTRDogcmVzb2x2LmgsdiAxLjMxIDIwMDUvMTIvMjYgMTk6MDE6NDcgcGVycnkgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4MywgMTk4NywgMTk4OQotICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0vKgotICoJQCgjKXJlc29sdi5oCTguMSAoQmVya2VsZXkpIDYvMi85MwotICoJSWQ6IHJlc29sdi5oLHYgMS43LjIuMTEuNC4yIDIwMDQvMDYvMjUgMDA6NDE6MDUgbWFya2EgRXhwCi0gKi8KLQotI2lmbmRlZiBfUkVTT0xWX1BSSVZBVEVfSF8KLSNkZWZpbmUJX1JFU09MVl9QUklWQVRFX0hfCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQotI2luY2x1ZGUgPHJlc29sdi5oPgotI2luY2x1ZGUgInJlc29sdl9zdGF0aWMuaCIKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLQotLyoKLSAqIFJldmlzaW9uIGluZm9ybWF0aW9uLiAgVGhpcyBpcyB0aGUgcmVsZWFzZSBkYXRlIGluIFlZWVlNTUREIGZvcm1hdC4KLSAqIEl0IGNhbiBjaGFuZ2UgZXZlcnkgZGF5IHNvIHRoZSByaWdodCB0aGluZyB0byBkbyB3aXRoIGl0IGlzIHVzZSBpdAotICogaW4gcHJlcHJvY2Vzc29yIGNvbW1hbmRzIHN1Y2ggYXMgIiNpZiAoX19SRVMgPiAxOTkzMTEwNCkiLiAgRG8gbm90Ci0gKiBjb21wYXJlIGZvciBlcXVhbGl0eTsgcmF0aGVyLCB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgeW91ciByZXNvbHZlcgotICogaXMgbmV3IGVub3VnaCB0byBjb250YWluIGEgY2VydGFpbiBmZWF0dXJlLgotICovCi0KLSNkZWZpbmUJX19SRVMJMjAwMzAxMjQKLQotLyoKLSAqIFRoaXMgdXNlZCB0byBiZSBkZWZpbmVkIGluIHJlc19xdWVyeS5jLCBub3cgaXQncyBpbiBoZXJyb3IuYy4KLSAqIFtYWFggbm8gaXQncyBub3QuICBJdCdzIGluIGlycy9pcnNfZGF0YS5jXQotICogSXQgd2FzCi0gKiBuZXZlciBleHRlcm4nZCBieSBhbnkgKi5oIGZpbGUgYmVmb3JlIGl0IHdhcyBwbGFjZWQgaGVyZS4gIEZvciB0aHJlYWQKLSAqIGF3YXJlIHByb2dyYW1zLCB0aGUgbGFzdCBoX2Vycm5vIHZhbHVlIHNldCBpcyBzdG9yZWQgaW4gcmVzLT5oX2Vycm5vLgotICoKLSAqIFhYWDoJVGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgZ29vZCByZWFzb24gZm9yIGV4cG9zaW5nIFJFU19TRVRfSF9FUlJOTwotICoJKGFuZCBfX2hfZXJybm9fc2V0KSB0byB0aGUgcHVibGljIHZpYSA8cmVzb2x2Lmg+LgotICogWFhYOglfX2hfZXJybm9fc2V0IGlzIHJlYWxseSBwYXJ0IG9mIElSUywgbm90IHBhcnQgb2YgdGhlIHJlc29sdmVyLgotICoJSWYgc29tZWJvZHkgd2FudHMgdG8gYnVpbGQgYW5kIHVzZSBhIHJlc29sdmVyIHRoYXQgZG9lc24ndCB1c2UgSVJTLAotICoJd2hhdCBkbyB0aGV5IGRvPyAgUGVyaGFwcyBzb21ldGhpbmcgbGlrZQotICoJCSNpZmRlZiBXQU5UX0lSUwotICoJCSMgZGVmaW5lIFJFU19TRVRfSF9FUlJOTyhyLHgpIF9faF9lcnJub19zZXQocix4KQotICoJCSNlbHNlCi0gKgkJIyBkZWZpbmUgUkVTX1NFVF9IX0VSUk5PKHIseCkgKGhfZXJybm8gPSAociktPnJlc19oX2Vycm5vID0gKHgpKQotICoJCSNlbmRpZgotICovCi0KLSNkZWZpbmUgUkVTX1NFVF9IX0VSUk5PKHIseCkgKGhfZXJybm8gPSAociktPnJlc19oX2Vycm5vID0gKHgpKQotc3RydWN0IF9fcmVzX3N0YXRlOyAvKiBmb3J3YXJkICovCi0KLS8qCi0gKiBSZXNvbHZlciBjb25maWd1cmF0aW9uIGZpbGUuCi0gKiBOb3JtYWxseSBub3QgcHJlc2VudCwgYnV0IG1heSBjb250YWluIHRoZSBhZGRyZXNzIG9mIHRoZQotICogaW5pdGlhbCBuYW1lIHNlcnZlcihzKSB0byBxdWVyeSBhbmQgdGhlIGRvbWFpbiBzZWFyY2ggbGlzdC4KLSAqLwotCi0jaWZuZGVmIF9QQVRIX1JFU0NPTkYKLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLSNkZWZpbmUgX1BBVEhfUkVTQ09ORiAgICAgICAgIi9ldGMvcHBwL3Jlc29sdi5jb25mIgotI2Vsc2UKLSNkZWZpbmUgX1BBVEhfUkVTQ09ORiAgICAgICAgIi9ldGMvcmVzb2x2LmNvbmYiCi0jZW5kaWYKLSNlbmRpZgotCi10eXBlZGVmIGVudW0geyByZXNfZ29haGVhZCwgcmVzX25leHRucywgcmVzX21vZGlmaWVkLCByZXNfZG9uZSwgcmVzX2Vycm9yIH0KLQlyZXNfc2VuZGhvb2thY3Q7Ci0KLXR5cGVkZWYgcmVzX3NlbmRob29rYWN0ICgqcmVzX3NlbmRfcWhvb2spKHN0cnVjdCBzb2NrYWRkciAqIGNvbnN0ICosCi0JCQkJCSAgICAgIGNvbnN0IHVfY2hhciAqKiwgaW50ICosCi0JCQkJCSAgICAgIHVfY2hhciAqLCBpbnQsIGludCAqKTsKLQotdHlwZWRlZiByZXNfc2VuZGhvb2thY3QgKCpyZXNfc2VuZF9yaG9vaykoY29uc3Qgc3RydWN0IHNvY2thZGRyICosCi0JCQkJCSAgICAgIGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLAotCQkJCQkgICAgICBpbnQsIGludCAqKTsKLQotc3RydWN0IHJlc19zeW0gewotCWludAkJbnVtYmVyOwkgICAvKiBJZGVudGlmeWluZyBudW1iZXIsIGxpa2UgVF9NWCAqLwotCWNvbnN0IGNoYXIgKgluYW1lOwkgICAvKiBJdHMgc3ltYm9saWMgbmFtZSwgbGlrZSAiTVgiICovCi0JY29uc3QgY2hhciAqCWh1bWFubmFtZTsgLyogSXRzIGZ1biBuYW1lLCBsaWtlICJtYWlsIGV4Y2hhbmdlciIgKi8KLX07Ci0KLS8qCi0gKiBHbG9iYWwgZGVmaW5lcyBhbmQgdmFyaWFibGVzIGZvciByZXNvbHZlciBzdHViLgotICovCi0jZGVmaW5lCU1BWE5TCQkJMwkvKiBtYXggIyBuYW1lIHNlcnZlcnMgd2UnbGwgdHJhY2sgKi8KLSNkZWZpbmUJTUFYREZMU1JDSAkJMwkvKiAjIGRlZmF1bHQgZG9tYWluIGxldmVscyB0byB0cnkgKi8KLSNkZWZpbmUJTUFYRE5TUkNICQk2CS8qIG1heCAjIGRvbWFpbnMgaW4gc2VhcmNoIHBhdGggKi8KLSNkZWZpbmUJTE9DQUxET01BSU5QQVJUUwkyCS8qIG1pbiBsZXZlbHMgaW4gbmFtZSB0aGF0IGlzICJsb2NhbCIgKi8KLQotI2RlZmluZQlSRVNfVElNRU9VVAkJNQkvKiBtaW4uIHNlY29uZHMgYmV0d2VlbiByZXRyaWVzICovCi0jZGVmaW5lCU1BWFJFU09MVlNPUlQJCTEwCS8qIG51bWJlciBvZiBuZXQgdG8gc29ydCBvbiAqLwotI2RlZmluZQlSRVNfTUFYTkRPVFMJCTE1CS8qIHNob3VsZCByZWZsZWN0IGJpdCBmaWVsZCBzaXplICovCi0jZGVmaW5lCVJFU19NQVhSRVRSQU5TCQkzMAkvKiBvbmx5IGZvciByZXNvbHYuY29uZi9SRVNfT1BUSU9OUyAqLwotI2RlZmluZQlSRVNfTUFYUkVUUlkJCTUJLyogb25seSBmb3IgcmVzb2x2LmNvbmYvUkVTX09QVElPTlMgKi8KLSNkZWZpbmUJUkVTX0RGTFJFVFJZCQkyCS8qIERlZmF1bHQgIy90cmllcy4gKi8KLSNkZWZpbmUJUkVTX01BWFRJTUUJCTY1NTM1CS8qIEluZmluaXR5LCBpbiBtaWxsaXNlY29uZHMuICovCi0KLXN0cnVjdCBfX3Jlc19zdGF0ZV9leHQ7Ci0KLXN0cnVjdCBfX3Jlc19zdGF0ZSB7Ci0JY2hhcglpZmFjZVtJRl9OQU1FU0laRSsxXTsKLQlpbnQJcmV0cmFuczsJIAkvKiByZXRyYW5zbWlzc2lvbiB0aW1lIGludGVydmFsICovCi0JaW50CXJldHJ5OwkJCS8qIG51bWJlciBvZiB0aW1lcyB0byByZXRyYW5zbWl0ICovCi0jaWZkZWYgc3VuCi0JdV9pbnQJb3B0aW9uczsJCS8qIG9wdGlvbiBmbGFncyAtIHNlZSBiZWxvdy4gKi8KLSNlbHNlCi0JdV9sb25nCW9wdGlvbnM7CQkvKiBvcHRpb24gZmxhZ3MgLSBzZWUgYmVsb3cuICovCi0jZW5kaWYKLQlpbnQJbnNjb3VudDsJCS8qIG51bWJlciBvZiBuYW1lIHNlcnZlcnMgKi8KLQlzdHJ1Y3Qgc29ja2FkZHJfaW4KLQkJbnNhZGRyX2xpc3RbTUFYTlNdOwkvKiBhZGRyZXNzIG9mIG5hbWUgc2VydmVyICovCi0jZGVmaW5lCW5zYWRkcgluc2FkZHJfbGlzdFswXQkJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLQl1X3Nob3J0CWlkOwkJCS8qIGN1cnJlbnQgbWVzc2FnZSBpZCAqLwotCWNoYXIJKmRuc3JjaFtNQVhETlNSQ0grMV07CS8qIGNvbXBvbmVudHMgb2YgZG9tYWluIHRvIHNlYXJjaCAqLwotCWNoYXIJZGVmZG5hbWVbMjU2XTsJCS8qIGRlZmF1bHQgZG9tYWluIChkZXByZWNhdGVkKSAqLwotI2lmZGVmIHN1bgotCXVfaW50CXBmY29kZTsJCQkvKiBSRVNfUFJGXyBmbGFncyAtIHNlZSBiZWxvdy4gKi8KLSNlbHNlCi0JdV9sb25nCXBmY29kZTsJCQkvKiBSRVNfUFJGXyBmbGFncyAtIHNlZSBiZWxvdy4gKi8KLSNlbmRpZgotCXVuc2lnbmVkIG5kb3RzOjQ7CQkvKiB0aHJlc2hvbGQgZm9yIGluaXRpYWwgYWJzLiBxdWVyeSAqLwotCXVuc2lnbmVkIG5zb3J0OjQ7CQkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gc29ydF9saXN0W10gKi8KLQljaGFyCXVudXNlZFszXTsKLQlzdHJ1Y3QgewotCQlzdHJ1Y3QgaW5fYWRkcglhZGRyOwotCQl1aW50MzJfdAltYXNrOwotCX0gc29ydF9saXN0W01BWFJFU09MVlNPUlRdOwotI2lmZGVmIF9fT0xEX1JFU19TVEFURQotCWNoYXIgbG9va3Vwc1s0XTsKLSNlbHNlCi0JcmVzX3NlbmRfcWhvb2sgcWhvb2s7CQkvKiBxdWVyeSBob29rICovCi0JcmVzX3NlbmRfcmhvb2sgcmhvb2s7CQkvKiByZXNwb25zZSBob29rICovCi0JaW50CXJlc19oX2Vycm5vOwkJLyogbGFzdCBvbmUgc2V0IGZvciB0aGlzIGNvbnRleHQgKi8KLQlpbnQgX21hcms7ICAgICAgICAgIC8qIElmIG5vbi0wIFNFVF9NQVJLIHRvIF9tYXJrIG9uIGFsbCByZXF1ZXN0IHNvY2tldHMgKi8KLQlpbnQJX3Zjc29jazsJCS8qIFBSSVZBVEU6IGZvciByZXNfc2VuZCBWQyBpL28gKi8KLQl1X2ludAlfZmxhZ3M7CQkJLyogUFJJVkFURTogc2VlIGJlbG93ICovCi0JdV9pbnQJX3BhZDsJCQkvKiBtYWtlIF91IDY0IGJpdCBhbGlnbmVkICovCi0JdW5pb24gewotCQkvKiBPbiBhbiAzMi1iaXQgYXJjaCB0aGlzIG1lYW5zIDUxMmIgdG90YWwuICovCi0JCWNoYXIJcGFkWzcyIC0gNCpzaXplb2YgKGludCkgLSAyKnNpemVvZiAodm9pZCAqKV07Ci0JCXN0cnVjdCB7Ci0JCQl1aW50MTZfdAkJbnNjb3VudDsKLQkJCXVpbnQxNl90CQluc3RpbWVzW01BWE5TXTsJLyogbXMuICovCi0JCQlpbnQJCQluc3NvY2tzW01BWE5TXTsKLQkJCXN0cnVjdCBfX3Jlc19zdGF0ZV9leHQgKmV4dDsJLyogZXh0ZW50aW9uIGZvciBJUHY2ICovCi0JCX0gX2V4dDsKLQl9IF91OwotI2VuZGlmCi0gICAgICAgIHN0cnVjdCByZXNfc3RhdGljICAgcnN0YXRpY1sxXTsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IF9fcmVzX3N0YXRlICpyZXNfc3RhdGU7Ci0KLXVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiB7Ci0Jc3RydWN0IHNvY2thZGRyX2luCXNpbjsKLSNpZmRlZiBJTjZBRERSX0FOWV9JTklUCi0Jc3RydWN0IHNvY2thZGRyX2luNglzaW42OwotI2VuZGlmCi0jaWZkZWYgSVNDX0FMSUdONjQKLQlpbnQ2NF90CQkJX19hbGlnbjY0OwkvKiA2NGJpdCBhbGlnbm1lbnQgKi8KLSNlbHNlCi0JaW50MzJfdAkJCV9fYWxpZ24zMjsJLyogMzJiaXQgYWxpZ25tZW50ICovCi0jZW5kaWYKLQljaGFyCQkJX19zcGFjZVsxMjhdOyAgIC8qIG1heCBzaXplICovCi19OwotCi0vKgotICogUmVzb2x2ZXIgZmxhZ3MgKHVzZWQgdG8gYmUgZGlzY3JldGUgcGVyLW1vZHVsZSBzdGF0aWNzIGludHMpLgotICovCi0jZGVmaW5lCVJFU19GX1ZDCTB4MDAwMDAwMDEJLyogc29ja2V0IGlzIFRDUCAqLwotI2RlZmluZQlSRVNfRl9DT05OCTB4MDAwMDAwMDIJLyogc29ja2V0IGlzIGNvbm5lY3RlZCAqLwotI2RlZmluZQlSRVNfRl9FRE5TMEVSUgkweDAwMDAwMDA0CS8qIEVETlMwIGNhdXNlZCBlcnJvcnMgKi8KLSNkZWZpbmUJUkVTX0ZfX1VOVVNFRAkweDAwMDAwMDA4CS8qICh1bnVzZWQpICovCi0jZGVmaW5lCVJFU19GX0xBU1RNQVNLCTB4MDAwMDAwRjAJLyogb3JkaW5hbCBzZXJ2ZXIgb2YgbGFzdCByZXNfbnNlbmQgKi8KLSNkZWZpbmUJUkVTX0ZfTEFTVFNISUZUCTQJCS8qIGJpdCBwb3NpdGlvbiBvZiBMQVNUTUFTSyAiZmxhZyIgKi8KLSNkZWZpbmUJUkVTX0dFVExBU1QocmVzKSAoKChyZXMpLl9mbGFncyAmIFJFU19GX0xBU1RNQVNLKSA+PiBSRVNfRl9MQVNUU0hJRlQpCi0KLS8qIHJlc19maW5kem9uZWN1dDIoKSBvcHRpb25zICovCi0jZGVmaW5lCVJFU19FWEhBVVNUSVZFCTB4MDAwMDAwMDEJLyogYWx3YXlzIGRvIGFsbCBxdWVyaWVzICovCi0jZGVmaW5lCVJFU19JUFY0T05MWQkweDAwMDAwMDAyCS8qIElQdjQgb25seSAqLwotI2RlZmluZQlSRVNfSVBWNk9OTFkJMHgwMDAwMDAwNAkvKiBJUHY2IG9ubHkgKi8KLQotLyoKLSAqIFJlc29sdmVyIG9wdGlvbnMgKGtlZXAgdGhlc2UgaW4gc3luY2ggd2l0aCByZXNfZGVidWcuYywgcGxlYXNlKQotICovCi0jZGVmaW5lIFJFU19JTklUCTB4MDAwMDAwMDEJLyogYWRkcmVzcyBpbml0aWFsaXplZCAqLwotI2RlZmluZSBSRVNfREVCVUcJMHgwMDAwMDAwMgkvKiBwcmludCBkZWJ1ZyBtZXNzYWdlcyAqLwotI2RlZmluZSBSRVNfQUFPTkxZCTB4MDAwMDAwMDQJLyogYXV0aG9yaXRhdGl2ZSBhbnN3ZXJzIG9ubHkgKCFJTVBMKSovCi0jZGVmaW5lIFJFU19VU0VWQwkweDAwMDAwMDA4CS8qIHVzZSB2aXJ0dWFsIGNpcmN1aXQgKi8KLSNkZWZpbmUgUkVTX1BSSU1BUlkJMHgwMDAwMDAxMAkvKiBxdWVyeSBwcmltYXJ5IHNlcnZlciBvbmx5ICghSU1QTCkgKi8KLSNkZWZpbmUgUkVTX0lHTlRDCTB4MDAwMDAwMjAJLyogaWdub3JlIHRydWNhdGlvbiBlcnJvcnMgKi8KLSNkZWZpbmUgUkVTX1JFQ1VSU0UJMHgwMDAwMDA0MAkvKiByZWN1cnNpb24gZGVzaXJlZCAqLwotI2RlZmluZSBSRVNfREVGTkFNRVMJMHgwMDAwMDA4MAkvKiB1c2UgZGVmYXVsdCBkb21haW4gbmFtZSAqLwotI2RlZmluZSBSRVNfU1RBWU9QRU4JMHgwMDAwMDEwMAkvKiBLZWVwIFRDUCBzb2NrZXQgb3BlbiAqLwotI2RlZmluZSBSRVNfRE5TUkNICTB4MDAwMDAyMDAJLyogc2VhcmNoIHVwIGxvY2FsIGRvbWFpbiB0cmVlICovCi0jZGVmaW5lCVJFU19JTlNFQ1VSRTEJMHgwMDAwMDQwMAkvKiB0eXBlIDEgc2VjdXJpdHkgZGlzYWJsZWQgKi8KLSNkZWZpbmUJUkVTX0lOU0VDVVJFMgkweDAwMDAwODAwCS8qIHR5cGUgMiBzZWN1cml0eSBkaXNhYmxlZCAqLwotI2RlZmluZQlSRVNfTk9BTElBU0VTCTB4MDAwMDEwMDAJLyogc2h1dHMgb2ZmIEhPU1RBTElBU0VTIGZlYXR1cmUgKi8KLSNkZWZpbmUJUkVTX1VTRV9JTkVUNgkweDAwMDAyMDAwCS8qIHVzZS9tYXAgSVB2NiBpbiBnZXRob3N0YnluYW1lKCkgKi8KLSNkZWZpbmUgUkVTX1JPVEFURQkweDAwMDA0MDAwCS8qIHJvdGF0ZSBucyBsaXN0IGFmdGVyIGVhY2ggcXVlcnkgKi8KLSNkZWZpbmUJUkVTX05PQ0hFQ0tOQU1FCTB4MDAwMDgwMDAJLyogZG8gbm90IGNoZWNrIG5hbWVzIGZvciBzYW5pdHkuICovCi0jZGVmaW5lCVJFU19LRUVQVFNJRwkweDAwMDEwMDAwCS8qIGRvIG5vdCBzdHJpcCBUU0lHIHJlY29yZHMgKi8KLSNkZWZpbmUJUkVTX0JMQVNUCTB4MDAwMjAwMDAJLyogYmxhc3QgYWxsIHJlY3Vyc2l2ZSBzZXJ2ZXJzICovCi0jZGVmaW5lIFJFU19OT1RMRFFVRVJZCTB4MDAxMDAwMDAJLyogZG9uJ3QgdW5xdWFsaWZpZWQgbmFtZSBhcyBhIHRsZCAqLwotI2RlZmluZSBSRVNfVVNFX0ROU1NFQwkweDAwMjAwMDAwCS8qIHVzZSBETlNTRUMgdXNpbmcgT0sgYml0IGluIE9QVCAqLwotLyogI2RlZmluZSBSRVNfREVCVUcyCTB4MDA0MDAwMDAgKi8JLyogbnNsb29rdXAgaW50ZXJuYWwgKi8KLS8qIEtBTUUgZXh0ZW5zaW9uczogdXNlIGhpZ2hlciBiaXQgdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBJU0MgdXNlICovCi0jZGVmaW5lIFJFU19VU0VfRE5BTUUJMHgxMDAwMDAwMAkvKiB1c2UgRE5BTUUgKi8KLSNkZWZpbmUgUkVTX1VTRV9FRE5TMAkweDQwMDAwMDAwCS8qIHVzZSBFRE5TMCBpZiBjb25maWd1cmVkICovCi0jZGVmaW5lIFJFU19OT19OSUJCTEUyCTB4ODAwMDAwMDAJLyogZGlzYWJsZSBhbHRlcm5hdGUgbmliYmxlIGxvb2t1cCAqLwotCi0jZGVmaW5lIFJFU19ERUZBVUxUCShSRVNfUkVDVVJTRSB8IFJFU19ERUZOQU1FUyB8IFwKLQkJCSBSRVNfRE5TUkNIIHwgUkVTX05PX05JQkJMRTIpCi0KLS8qCi0gKiBSZXNvbHZlciAicGZjb2RlIiB2YWx1ZXMuICBVc2VkIGJ5IGRpZy4KLSAqLwotI2RlZmluZSBSRVNfUFJGX1NUQVRTCTB4MDAwMDAwMDEKLSNkZWZpbmUgUkVTX1BSRl9VUERBVEUJMHgwMDAwMDAwMgotI2RlZmluZSBSRVNfUFJGX0NMQVNTICAgMHgwMDAwMDAwNAotI2RlZmluZSBSRVNfUFJGX0NNRAkweDAwMDAwMDA4Ci0jZGVmaW5lIFJFU19QUkZfUVVFUwkweDAwMDAwMDEwCi0jZGVmaW5lIFJFU19QUkZfQU5TCTB4MDAwMDAwMjAKLSNkZWZpbmUgUkVTX1BSRl9BVVRICTB4MDAwMDAwNDAKLSNkZWZpbmUgUkVTX1BSRl9BREQJMHgwMDAwMDA4MAotI2RlZmluZSBSRVNfUFJGX0hFQUQxCTB4MDAwMDAxMDAKLSNkZWZpbmUgUkVTX1BSRl9IRUFEMgkweDAwMDAwMjAwCi0jZGVmaW5lIFJFU19QUkZfVFRMSUQJMHgwMDAwMDQwMAotI2RlZmluZSBSRVNfUFJGX0hFQURYCTB4MDAwMDA4MDAKLSNkZWZpbmUgUkVTX1BSRl9RVUVSWQkweDAwMDAxMDAwCi0jZGVmaW5lIFJFU19QUkZfUkVQTFkJMHgwMDAwMjAwMAotI2RlZmluZSBSRVNfUFJGX0lOSVQJMHgwMDAwNDAwMAotI2RlZmluZSBSRVNfUFJGX1RSVU5DCTB4MDAwMDgwMDAKLS8qCQkJMHgwMDAxMDAwMAkqLwotCi0vKiBUaGluZ3MgaW52b2x2aW5nIGFuIGludGVybmFsIChzdGF0aWMpIHJlc29sdmVyIGNvbnRleHQuICovCi1fX0JFR0lOX0RFQ0xTCi1leHRlcm4gc3RydWN0IF9fcmVzX3N0YXRlICpfX3Jlc19nZXRfc3RhdGUodm9pZCk7Ci1leHRlcm4gdm9pZCBfX3Jlc19wdXRfc3RhdGUoc3RydWN0IF9fcmVzX3N0YXRlICopOwotCi0jaWZuZGVmIEFORFJPSURfQ0hBTkdFUwotLyoKLSAqIFNvdXJjZSBhbmQgQmluYXJ5IGNvbXBhdGliaWxpdHk7IF9yZXMgd2lsbCBub3Qgd29yayBwcm9wZXJseQotICogd2l0aCBtdWx0aS10aHJlYWRlZCBwcm9ncmFtcy4KLSAqLwotZXh0ZXJuIHN0cnVjdCBfX3Jlc19zdGF0ZSAqX19yZXNfc3RhdGUodm9pZCk7Ci0jZGVmaW5lIF9yZXMgKCpfX3Jlc19zdGF0ZSgpKQotI2VuZGlmCi0KLV9fRU5EX0RFQ0xTCi0KLSNpZm5kZWYgX19CSU5EX05PU1RBVElDCi0jZGVmaW5lIGZwX25xdWVyeQkJX19mcF9ucXVlcnkKLSNkZWZpbmUgZnBfcXVlcnkJCV9fZnBfcXVlcnkKLSNkZWZpbmUgaG9zdGFsaWFzCQlfX2hvc3RhbGlhcwotI2RlZmluZSBwX3F1ZXJ5CQkJX19wX3F1ZXJ5Ci0jZGVmaW5lIHJlc19jbG9zZQkJX19yZXNfY2xvc2UKLSNkZWZpbmUgcmVzX29wdAkJCV9fcmVzX29wdAotI2RlZmluZSByZXNfaXNvdXJzZXJ2ZXIJCV9fcmVzX2lzb3Vyc2VydmVyCi0jZGVmaW5lCXJlc19xdWVyeWRvbWFpbgkJX19yZXNfcXVlcnlkb21haW4KLSNkZWZpbmUgcmVzX3NlbmQJCV9fcmVzX3NlbmQKLSNkZWZpbmUgcmVzX3NlbmRzaWduZWQJCV9fcmVzX3NlbmRzaWduZWQKLQotI2lmZGVmIEJJTkRfUkVTX1BPU0lYMwotI2RlZmluZQlkbl9leHBhbmQJX19kbl9leHBhbmQKLSNkZWZpbmUJcmVzX2luaXQJX19yZXNfaW5pdAotI2RlZmluZQlyZXNfcXVlcnkJX19yZXNfcXVlcnkKLSNkZWZpbmUJcmVzX3NlYXJjaAlfX3Jlc19zZWFyY2gKLSNkZWZpbmUJcmVzX21rcXVlcnkJX19yZXNfbWtxdWVyeQotI2VuZGlmCi0KLV9fQkVHSU5fREVDTFMKLXZvaWQJCWZwX25xdWVyeShjb25zdCB1X2NoYXIgKiwgaW50LCBGSUxFICopOwotdm9pZAkJZnBfcXVlcnkoY29uc3QgdV9jaGFyICosIEZJTEUgKik7Ci1jb25zdCBjaGFyICoJaG9zdGFsaWFzKGNvbnN0IGNoYXIgKik7Ci12b2lkCQlwX3F1ZXJ5KGNvbnN0IHVfY2hhciAqKTsKLXZvaWQJCXJlc19jbG9zZSh2b2lkKTsKLWludAkJcmVzX2luaXQodm9pZCk7Ci1pbnQJCXJlc19vcHQoaW50LCB1X2NoYXIgKiwgaW50LCBpbnQpOwotaW50CQlyZXNfaXNvdXJzZXJ2ZXIoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopOwotaW50CQlyZXNfbWtxdWVyeShpbnQsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGNvbnN0IHVfY2hhciAqLCBpbnQsIGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgaW50KTsKLWludAkJcmVzX3F1ZXJ5KGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHVfY2hhciAqLCBpbnQpOwotaW50CQlyZXNfcXVlcnlkb21haW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCwgaW50LCB1X2NoYXIgKiwgaW50KTsKLWludAkJcmVzX3NlYXJjaChjb25zdCBjaGFyICosIGludCwgaW50LCB1X2NoYXIgKiwgaW50KTsKLWludAkJcmVzX3NlbmQoY29uc3QgdV9jaGFyICosIGludCwgdV9jaGFyICosIGludCk7Ci1pbnQJCXJlc19zZW5kc2lnbmVkKGNvbnN0IHVfY2hhciAqLCBpbnQsIG5zX3RzaWdfa2V5ICosIHVfY2hhciAqLCBpbnQpOwotX19FTkRfREVDTFMKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoU0hBUkVEX0xJQkJJTkQpIHx8IGRlZmluZWQoTElCKQotLyoKLSAqIElmIGxpYmJpbmQgaXMgYSBzaGFyZWQgb2JqZWN0ICh3ZWxsLCBETEwgYW55d2F5KQotICogdGhlc2UgZXh0ZXJucyBicmVhayB0aGUgbGlua2VyIHdoZW4gcmVzb2x2LmggaXMKLSAqIGluY2x1ZGVkIGJ5IGEgbGliIGNsaWVudCAobGlrZSBuYW1lZCkKLSAqIE1ha2UgdGhlbSBnbyBhd2F5IGlmIGEgY2xpZW50IGlzIGluY2x1ZGluZyB0aGlzCi0gKgotICovCi1leHRlcm4gY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2tleV9zeW1zW107Ci1leHRlcm4gY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2NlcnRfc3ltc1tdOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9jbGFzc19zeW1zW107Ci1leHRlcm4gY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX3R5cGVfc3ltc1tdOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9yY29kZV9zeW1zW107Ci0jZW5kaWYgLyogU0hBUkVEX0xJQkJJTkQgKi8KLQotI2lmbmRlZiBBTkRST0lEX0NIQU5HRVMKLSNkZWZpbmUgZG5fY29tcAkJCV9fZG5fY29tcAotI2VuZGlmCi0jZGVmaW5lIGRuX2NvdW50X2xhYmVscwkJX19kbl9jb3VudF9sYWJlbHMKLSNkZWZpbmUgZG5fc2tpcG5hbWUJCV9fZG5fc2tpcG5hbWUKLSNkZWZpbmUgZnBfcmVzc3RhdAkJX19mcF9yZXNzdGF0Ci0jZGVmaW5lIGxvY19hdG9uCQlfX2xvY19hdG9uCi0jZGVmaW5lIGxvY19udG9hCQlfX2xvY19udG9hCi0jZGVmaW5lIHBfY2RuYW1lCQlfX3BfY2RuYW1lCi0jZGVmaW5lIHBfY2RubmFtZQkJX19wX2Nkbm5hbWUKLSNkZWZpbmUgcF9jbGFzcwkJCV9fcF9jbGFzcwotI2RlZmluZSBwX2ZxbmFtZQkJX19wX2ZxbmFtZQotI2RlZmluZSBwX2Zxbm5hbWUJCV9fcF9mcW5uYW1lCi0jZGVmaW5lIHBfb3B0aW9uCQlfX3Bfb3B0aW9uCi0jZGVmaW5lIHBfc2Vjc3RvZGF0ZQkJX19wX3NlY3N0b2RhdGUKLSNkZWZpbmUgcF9zZWN0aW9uCQlfX3Bfc2VjdGlvbgotI2RlZmluZSBwX3RpbWUJCQlfX3BfdGltZQotI2RlZmluZSBwX3R5cGUJCQlfX3BfdHlwZQotI2RlZmluZSBwX3Jjb2RlCQkJX19wX3Jjb2RlCi0jZGVmaW5lIHBfc29ja3VuCQlfX3Bfc29ja3VuCi0jZGVmaW5lIHB1dGxvbmcJCQlfX3B1dGxvbmcKLSNkZWZpbmUgcHV0c2hvcnQJCV9fcHV0c2hvcnQKLSNkZWZpbmUgcmVzX2Rub2sJCV9fcmVzX2Rub2sKLSNkZWZpbmUgcmVzX2ZpbmR6b25lY3V0CQlfX3Jlc19maW5kem9uZWN1dAotI2RlZmluZSByZXNfZmluZHpvbmVjdXQyCV9fcmVzX2ZpbmR6b25lY3V0MgotI2RlZmluZSByZXNfaG5vawkJX19yZXNfaG5vawotI2RlZmluZSByZXNfaG9zdGFsaWFzCQlfX3Jlc19ob3N0YWxpYXMKLSNkZWZpbmUgcmVzX21haWxvawkJX19yZXNfbWFpbG9rCi0jZGVmaW5lIHJlc19uYW1laW5xdWVyeQkJX19yZXNfbmFtZWlucXVlcnkKLSNkZWZpbmUgcmVzX25jbG9zZQkJX19yZXNfbmNsb3NlCi0jZGVmaW5lIHJlc19uaW5pdAkJX19yZXNfbmluaXQKLSNkZWZpbmUgcmVzX25ta3F1ZXJ5CQlfX3Jlc19ubWtxdWVyeQotI2RlZmluZSByZXNfcHF1ZXJ5CQlfX3Jlc19wcXVlcnkKLSNkZWZpbmUgcmVzX25xdWVyeQkJX19yZXNfbnF1ZXJ5Ci0jZGVmaW5lIHJlc19ucXVlcnlkb21haW4JX19yZXNfbnF1ZXJ5ZG9tYWluCi0jZGVmaW5lIHJlc19uc2VhcmNoCQlfX3Jlc19uc2VhcmNoCi0jZGVmaW5lIHJlc19uc2VuZAkJX19yZXNfbnNlbmQKLSNkZWZpbmUgcmVzX25zZW5kc2lnbmVkCQlfX3Jlc19uc2VuZHNpZ25lZAotI2RlZmluZSByZXNfbmlzb3Vyc2VydmVyCV9fcmVzX25pc291cnNlcnZlcgotI2RlZmluZSByZXNfb3dub2sJCV9fcmVzX293bm9rCi0jZGVmaW5lIHJlc19xdWVyaWVzbWF0Y2gJX19yZXNfcXVlcmllc21hdGNoCi0jZGVmaW5lIHJlc19yYW5kb21pZAkJX19yZXNfcmFuZG9taWQKLSNkZWZpbmUgc3ltX250b3AJCV9fc3ltX250b3AKLSNkZWZpbmUgc3ltX250b3MJCV9fc3ltX250b3MKLSNkZWZpbmUgc3ltX3N0b24JCV9fc3ltX3N0b24KLSNkZWZpbmUgcmVzX25vcHQJCV9fcmVzX25vcHQKLSNkZWZpbmUgcmVzX25kZXN0cm95CQlfX3Jlc19uZGVzdHJveQotI2RlZmluZQlyZXNfbmFtZXRvY2xhc3MJCV9fcmVzX25hbWV0b2NsYXNzCi0jZGVmaW5lCXJlc19uYW1ldG90eXBlCQlfX3Jlc19uYW1ldG90eXBlCi0jZGVmaW5lCXJlc19zZXRzZXJ2ZXJzCQlfX3Jlc19zZXRzZXJ2ZXJzCi0jZGVmaW5lCXJlc19nZXRzZXJ2ZXJzCQlfX3Jlc19nZXRzZXJ2ZXJzCi0jZGVmaW5lCXJlc19idWlsZHByb3RvbGlzdAlfX3Jlc19idWlsZHByb3RvbGlzdAotI2RlZmluZQlyZXNfZGVzdHJveXByb3RvbGlzdAlfX3Jlc19kZXN0cm95cHJvdG9saXN0Ci0jZGVmaW5lCXJlc19kZXN0cm95c2VydmljZWxpc3QJX19yZXNfZGVzdHJveXNlcnZpY2VsaXN0Ci0jZGVmaW5lCXJlc19nZXRfbmliYmxlc3VmZml4CV9fcmVzX2dldF9uaWJibGVzdWZmaXgKLSNkZWZpbmUJcmVzX2dldF9uaWJibGVzdWZmaXgyCV9fcmVzX2dldF9uaWJibGVzdWZmaXgyCi0jZGVmaW5lCXJlc19vdXJzZXJ2ZXJfcAkJX19yZXNfb3Vyc2VydmVyX3AKLSNkZWZpbmUJcmVzX3Byb3RvY29sbmFtZQlfX3Jlc19wcm90b2NvbG5hbWUKLSNkZWZpbmUJcmVzX3Byb3RvY29sbnVtYmVyCV9fcmVzX3Byb3RvY29sbnVtYmVyCi0jZGVmaW5lCXJlc19zZW5kX3NldHFob29rCV9fcmVzX3NlbmRfc2V0cWhvb2sKLSNkZWZpbmUJcmVzX3NlbmRfc2V0cmhvb2sJX19yZXNfc2VuZF9zZXRyaG9vawotI2RlZmluZQlyZXNfc2VydmljZW5hbWUJCV9fcmVzX3NlcnZpY2VuYW1lCi0jZGVmaW5lCXJlc19zZXJ2aWNlbnVtYmVyCV9fcmVzX3NlcnZpY2VudW1iZXIKLV9fQkVHSU5fREVDTFMKLWludAkJcmVzX2hub2soY29uc3QgY2hhciAqKTsKLWludAkJcmVzX293bm9rKGNvbnN0IGNoYXIgKik7Ci1pbnQJCXJlc19tYWlsb2soY29uc3QgY2hhciAqKTsKLWludAkJcmVzX2Rub2soY29uc3QgY2hhciAqKTsKLWludAkJc3ltX3N0b24oY29uc3Qgc3RydWN0IHJlc19zeW0gKiwgY29uc3QgY2hhciAqLCBpbnQgKik7Ci1jb25zdCBjaGFyICoJc3ltX250b3MoY29uc3Qgc3RydWN0IHJlc19zeW0gKiwgaW50LCBpbnQgKik7Ci1jb25zdCBjaGFyICoJc3ltX250b3AoY29uc3Qgc3RydWN0IHJlc19zeW0gKiwgaW50LCBpbnQgKik7Ci0jaWZuZGVmIEFORFJPSURfQ0hBTkdFUwotaW50CQliNjRfbnRvcCh1X2NoYXIgY29uc3QgKiwgc2l6ZV90LCBjaGFyICosIHNpemVfdCk7Ci1pbnQJCWI2NF9wdG9uKGNoYXIgY29uc3QgKiwgdV9jaGFyICosIHNpemVfdCk7Ci0jZW5kaWYKLWludAkJbG9jX2F0b24oY29uc3QgY2hhciAqLCB1X2NoYXIgKik7Ci1jb25zdCBjaGFyICoJbG9jX250b2EoY29uc3QgdV9jaGFyICosIGNoYXIgKik7Ci1pbnQJCWRuX3NraXBuYW1lKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKik7Ci12b2lkCQlwdXRsb25nKHVpbnQzMl90LCB1X2NoYXIgKik7Ci12b2lkCQlwdXRzaG9ydCh1aW50MTZfdCwgdV9jaGFyICopOwotI2lmbmRlZiBfX3VsdHJpeF9fCi11aW50MTZfdAlfZ2V0c2hvcnQoY29uc3QgdV9jaGFyICopOwotdWludDMyX3QJX2dldGxvbmcoY29uc3QgdV9jaGFyICopOwotI2VuZGlmCi1jb25zdCBjaGFyICoJcF9jbGFzcyhpbnQpOwotY29uc3QgY2hhciAqCXBfdGltZSh1aW50MzJfdCk7Ci1jb25zdCBjaGFyICoJcF90eXBlKGludCk7Ci1jb25zdCBjaGFyICoJcF9yY29kZShpbnQpOwotY29uc3QgY2hhciAqCXBfc29ja3VuKHVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiwgY2hhciAqLCBzaXplX3QpOwotY29uc3QgdV9jaGFyICoJcF9jZG5uYW1lKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgaW50LCBGSUxFICopOwotY29uc3QgdV9jaGFyICoJcF9jZG5hbWUoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLCBGSUxFICopOwotY29uc3QgdV9jaGFyICoJcF9mcW5uYW1lKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwKLQkJCSAgICAgICBpbnQsIGNoYXIgKiwgaW50KTsKLWNvbnN0IHVfY2hhciAqCXBfZnFuYW1lKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgRklMRSAqKTsKLWNvbnN0IGNoYXIgKglwX29wdGlvbih1X2xvbmcpOwotY2hhciAqCQlwX3NlY3N0b2RhdGUodV9sb25nKTsKLWludAkJZG5fY291bnRfbGFiZWxzKGNvbnN0IGNoYXIgKik7Ci11X2ludAkJcmVzX3JhbmRvbWlkKHZvaWQpOwotaW50CQlyZXNfbmFtZWlucXVlcnkoY29uc3QgY2hhciAqLCBpbnQsIGludCwgY29uc3QgdV9jaGFyICosCi0JCQkJICAgICBjb25zdCB1X2NoYXIgKik7Ci1pbnQJCXJlc19xdWVyaWVzbWF0Y2goY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAotCQkJCSAgICAgIGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKik7Ci1jb25zdCBjaGFyICoJcF9zZWN0aW9uKGludCwgaW50KTsKLS8qIFRoaW5ncyBpbnZvbHZpbmcgYSByZXNvbHZlciBjb250ZXh0LiAqLwotaW50CQlyZXNfbmluaXQocmVzX3N0YXRlKTsKLWludAkJcmVzX25pc291cnNlcnZlcihjb25zdCByZXNfc3RhdGUsIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKTsKLXZvaWQJCWZwX3Jlc3N0YXQoY29uc3QgcmVzX3N0YXRlLCBGSUxFICopOwotdm9pZAkJcmVzX3BxdWVyeShjb25zdCByZXNfc3RhdGUsIGNvbnN0IHVfY2hhciAqLCBpbnQsIEZJTEUgKik7Ci1jb25zdCBjaGFyICoJcmVzX2hvc3RhbGlhcyhjb25zdCByZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpOwotaW50CQlyZXNfbnF1ZXJ5KHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBpbnQsIGludCwgdV9jaGFyICosIGludCk7Ci1pbnQJCXJlc19uc2VhcmNoKHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBpbnQsIGludCwgdV9jaGFyICosIGludCk7Ci1pbnQJCXJlc19ucXVlcnlkb21haW4ocmVzX3N0YXRlLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKLQkJCQkgICAgICBpbnQsIGludCwgdV9jaGFyICosIGludCk7Ci1pbnQJCXJlc19ubWtxdWVyeShyZXNfc3RhdGUsIGludCwgY29uc3QgY2hhciAqLCBpbnQsIGludCwKLQkJCQkgIGNvbnN0IHVfY2hhciAqLCBpbnQsIGNvbnN0IHVfY2hhciAqLAotCQkJCSAgdV9jaGFyICosIGludCk7Ci1pbnQJCXJlc19uc2VuZChyZXNfc3RhdGUsIGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLCBpbnQpOwotaW50CQlyZXNfbnNlbmRzaWduZWQocmVzX3N0YXRlLCBjb25zdCB1X2NoYXIgKiwgaW50LAotCQkJCSAgICAgbnNfdHNpZ19rZXkgKiwgdV9jaGFyICosIGludCk7Ci1pbnQJCXJlc19maW5kem9uZWN1dChyZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgbnNfY2xhc3MsIGludCwKLQkJCQkgICAgIGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgaW5fYWRkciAqLCBpbnQpOwotaW50CQlyZXNfZmluZHpvbmVjdXQyKHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBuc19jbGFzcywgaW50LAotCQkJCSAgICAgIGNoYXIgKiwgc2l6ZV90LAotCQkJCSAgICAgIHVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiAqLCBpbnQpOwotdm9pZAkJcmVzX25jbG9zZShyZXNfc3RhdGUpOwotaW50CQlyZXNfbm9wdChyZXNfc3RhdGUsIGludCwgdV9jaGFyICosIGludCwgaW50KTsKLXZvaWQJCXJlc19zZW5kX3NldHFob29rKHJlc19zZW5kX3Fob29rKTsKLXZvaWQJCXJlc19zZW5kX3NldHJob29rKHJlc19zZW5kX3Job29rKTsKLWludAkJX19yZXNfdmluaXQocmVzX3N0YXRlLCBpbnQpOwotdm9pZAkJcmVzX2Rlc3Ryb3lzZXJ2aWNlbGlzdCh2b2lkKTsKLWNvbnN0IGNoYXIgKglyZXNfc2VydmljZW5hbWUodWludDE2X3QsIGNvbnN0IGNoYXIgKik7Ci1jb25zdCBjaGFyICoJcmVzX3Byb3RvY29sbmFtZShpbnQpOwotdm9pZAkJcmVzX2Rlc3Ryb3lwcm90b2xpc3Qodm9pZCk7Ci12b2lkCQlyZXNfYnVpbGRwcm90b2xpc3Qodm9pZCk7Ci1jb25zdCBjaGFyICoJcmVzX2dldF9uaWJibGVzdWZmaXgocmVzX3N0YXRlKTsKLWNvbnN0IGNoYXIgKglyZXNfZ2V0X25pYmJsZXN1ZmZpeDIocmVzX3N0YXRlKTsKLXZvaWQJCXJlc19uZGVzdHJveShyZXNfc3RhdGUpOwotdWludDE2X3QJcmVzX25hbWV0b2NsYXNzKGNvbnN0IGNoYXIgKiwgaW50ICopOwotdWludDE2X3QJcmVzX25hbWV0b3R5cGUoY29uc3QgY2hhciAqLCBpbnQgKik7Ci12b2lkCQlyZXNfc2V0c2VydmVycyhyZXNfc3RhdGUsCi0JCQkJICAgIGNvbnN0IHVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiAqLCBpbnQpOwotaW50CQlyZXNfZ2V0c2VydmVycyhyZXNfc3RhdGUsCi0JCQkJICAgIHVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiAqLCBpbnQpOwotCi12b2lkIHJlc19zZXRpZmFjZSgpOwotdm9pZCByZXNfc2V0bWFyaygpOwotdV9pbnQgIHJlc19yYW5kb21pZCh2b2lkKTsKLQotX19FTkRfREVDTFMKLQotI2VuZGlmIC8qICFfUkVTT0xWX1BSSVZBVEVfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS90aHJlYWRfcHJpdmF0ZS5oIGIvbGliYy9wcml2YXRlL3RocmVhZF9wcml2YXRlLmgKaW5kZXggYjE5YWQwOS4uMmUzYWMzZCAxMDA2NDQKLS0tIGEvbGliYy9wcml2YXRlL3RocmVhZF9wcml2YXRlLmgKKysrIGIvbGliYy9wcml2YXRlL3RocmVhZF9wcml2YXRlLmgKQEAgLTcsNiArNyw4IEBACiAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKK19fQkVHSU5fREVDTFMKKwogLyoKICAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0aHJlYWQgbGlicmFyeSBpbnRlcmZhY2UgdG8gbGliYy4gIFRocmVhZAogICogbGlicmFyaWVzIG11c3QgaW1wbGVtZW50IHRoZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGhlcmUgZm9yIHByb3BlcgpAQCAtMTUsMTEgKzE3LDYgQEAKICAqLwogCiAvKgotICogVGhpcyB2YXJpYWJsZSBpcyAwIHVudGlsIGEgc2Vjb25kIHRocmVhZCBpcyBjcmVhdGVkLgotICovCi1leHRlcm4gaW50IF9faXN0aHJlYWRlZDsKLQotLyoKICAqIGhlbHBlciBtYWNybyB0byBtYWtlIHVuaXF1ZSBuYW1lcyBpbiB0aGUgdGhyZWFkIG5hbWVzcGFjZQogICovCiAjZGVmaW5lIF9fVEhSRUFEX05BTUUobmFtZSkJX19DT05DQVQoX3RocmVhZF90YWduYW1lXyxuYW1lKQpAQCAtMzYsMTYgKzMzLDIzIEBACiAjZGVmaW5lIF9USFJFQURfUFJJVkFURV9NVVRFWF9VTkxPQ0sobmFtZSkgXAogCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmX19USFJFQURfTkFNRShuYW1lKS5fcHJpdmF0ZV9sb2NrICkKIAotdm9pZAlfdGhyZWFkX2F0ZXhpdF9sb2NrKHZvaWQpOwotdm9pZAlfdGhyZWFkX2F0ZXhpdF91bmxvY2sodm9pZCk7CisvKiBOb3RlIHRoYXQgdGhlc2UgYXJlbid0IGNvbXBhdGlibGUgd2l0aCB0aGUgdXN1YWwgT3BlbkJTRCBvbmVzIHdoaWNoIGxhenktaW5pdGlhbGl6ZSEgKi8KKyNkZWZpbmUgX01VVEVYX0xPQ0sobCkgcHRocmVhZF9tdXRleF9sb2NrKChwdGhyZWFkX211dGV4X3QqKSBsKQorI2RlZmluZSBfTVVURVhfVU5MT0NLKGwpIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKChwdGhyZWFkX211dGV4X3QqKSBsKQogCi0jZGVmaW5lIF9BVEVYSVRfTE9DSygpCQlkbyB7CQkJCQlcCi0JCQkJCWlmIChfX2lzdGhyZWFkZWQpCQlcCi0JCQkJCQlfdGhyZWFkX2F0ZXhpdF9sb2NrKCk7CVwKLQkJCQl9IHdoaWxlICgwKQotI2RlZmluZSBfQVRFWElUX1VOTE9DSygpCWRvIHsJCQkJCVwKLQkJCQkJaWYgKF9faXN0aHJlYWRlZCkJCVwKLQkJCQkJCV90aHJlYWRfYXRleGl0X3VubG9jaygpO1wKLQkJCQl9IHdoaWxlICgwKQorX19MSUJDX0hJRERFTl9fIHZvaWQgIF90aHJlYWRfYXRleGl0X2xvY2sodm9pZCk7CitfX0xJQkNfSElEREVOX18gdm9pZCAgX3RocmVhZF9hdGV4aXRfdW5sb2NrKHZvaWQpOworCisjZGVmaW5lIF9BVEVYSVRfTE9DSygpIF90aHJlYWRfYXRleGl0X2xvY2soKQorI2RlZmluZSBfQVRFWElUX1VOTE9DSygpIF90aHJlYWRfYXRleGl0X3VubG9jaygpCisKK19fTElCQ19ISURERU5fXyB2b2lkICAgIF90aHJlYWRfYXJjNF9sb2NrKHZvaWQpOworX19MSUJDX0hJRERFTl9fIHZvaWQgICAgX3RocmVhZF9hcmM0X3VubG9jayh2b2lkKTsKKworI2RlZmluZSBfQVJDNF9MT0NLKCkgX3RocmVhZF9hcmM0X2xvY2soKQorI2RlZmluZSBfQVJDNF9VTkxPQ0soKSBfdGhyZWFkX2FyYzRfdW5sb2NrKCkKKyNkZWZpbmUgX0FSQzRfQVRGT1JLKGYpIHB0aHJlYWRfYXRmb3JrKE5VTEwsIE5VTEwsIChmKSkKKworX19FTkRfREVDTFMKIAogI2VuZGlmIC8qIF9USFJFQURfUFJJVkFURV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9hc3ByaW50Zi5jIGIvbGliYy9zdGRpby9hc3ByaW50Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2Q4ZDYxLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vYXNwcmludGYuYworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBhc3ByaW50Zi5jLHYgMS4xNSAyMDA1LzEwLzEwIDEyOjAwOjUyIGVzcGllIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTcgVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+Ci0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi1pbnQKLWFzcHJpbnRmKGNoYXIgKipzdHIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCWludCByZXQ7Ci0JdmFfbGlzdCBhcDsKLQlGSUxFIGY7Ci0JdW5zaWduZWQgY2hhciAqX2Jhc2U7Ci0KLQlmLl9maWxlID0gLTE7Ci0JZi5fZmxhZ3MgPSBfX1NXUiB8IF9fU1NUUiB8IF9fU0FMQzsKLQlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYygxMjgpOwotCWlmIChmLl9iZi5fYmFzZSA9PSBOVUxMKQotCQlnb3RvIGVycjsKLQlmLl9iZi5fc2l6ZSA9IGYuX3cgPSAxMjc7CQkvKiBMZWF2ZSByb29tIGZvciB0aGUgTlVMICovCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JcmV0ID0gX192ZnByaW50ZigmZiwgZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQlpZiAocmV0ID09IC0xKQotCQlnb3RvIGVycjsKLQkqZi5fcCA9ICdcMCc7Ci0JX2Jhc2UgPSByZWFsbG9jKGYuX2JmLl9iYXNlLCByZXQgKyAxKTsKLQlpZiAoX2Jhc2UgPT0gTlVMTCkKLQkJZ290byBlcnI7Ci0JKnN0ciA9IChjaGFyICopX2Jhc2U7Ci0JcmV0dXJuIChyZXQpOwotCi1lcnI6Ci0JZnJlZShmLl9iZi5fYmFzZSk7Ci0JKnN0ciA9IE5VTEw7Ci0JZXJybm8gPSBFTk9NRU07Ci0JcmV0dXJuICgtMSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZmbHVzaC5jIGIvbGliYy9zdGRpby9mZmx1c2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5YmRjYy4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2ZmbHVzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZmbHVzaC5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi0vKiBGbHVzaCBhIHNpbmdsZSBmaWxlLCBvciAoaWYgZnAgaXMgTlVMTCkgYWxsIGZpbGVzLiAgKi8KLWludAotZmZsdXNoKEZJTEUgKmZwKQotewotCWludCByOwotCi0JaWYgKGZwID09IE5VTEwpCi0JCXJldHVybiAoX2Z3YWxrKF9fc2ZsdXNoX2xvY2tlZCkpOwotCUZMT0NLRklMRShmcCk7Ci0JaWYgKChmcC0+X2ZsYWdzICYgKF9fU1dSIHwgX19TUlcpKSA9PSAwKSB7Ci0JCWVycm5vID0gRUJBREY7Ci0JCXIgPSBFT0Y7Ci0JfSBlbHNlCi0JCXIgPSBfX3NmbHVzaChmcCk7Ci0JRlVOTE9DS0ZJTEUoZnApOwotCXJldHVybiAocik7Ci19Ci0KLWludAotX19zZmx1c2goRklMRSAqZnApCi17Ci0JdW5zaWduZWQgY2hhciAqcDsKLQlpbnQgbiwgdDsKLQotCXQgPSBmcC0+X2ZsYWdzOwotCWlmICgodCAmIF9fU1dSKSA9PSAwKQotCQlyZXR1cm4gKDApOwotCi0JaWYgKChwID0gZnAtPl9iZi5fYmFzZSkgPT0gTlVMTCkKLQkJcmV0dXJuICgwKTsKLQotCW4gPSBmcC0+X3AgLSBwOwkJLyogd3JpdGUgdGhpcyBtdWNoICovCi0KLQkvKgotCSAqIFNldCB0aGVzZSBpbW1lZGlhdGVseSB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIGxvbmdqbXAgYW5kIHRvIGFsbG93Ci0JICogZXhjaGFuZ2UgYnVmZmVyaW5nICh2aWEgc2V0dmJ1ZikgaW4gdXNlciB3cml0ZSBmdW5jdGlvbi4KLQkgKi8KLQlmcC0+X3AgPSBwOwotCWZwLT5fdyA9IHQgJiAoX19TTEJGfF9fU05CRikgPyAwIDogZnAtPl9iZi5fc2l6ZTsKLQotCWZvciAoOyBuID4gMDsgbiAtPSB0LCBwICs9IHQpIHsKLQkJdCA9ICgqZnAtPl93cml0ZSkoZnAtPl9jb29raWUsIChjaGFyICopcCwgbik7Ci0JCWlmICh0IDw9IDApIHsKLQkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOwotCQkJcmV0dXJuIChFT0YpOwotCQl9Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLWludAotX19zZmx1c2hfbG9ja2VkKEZJTEUgKmZwKQotewotCWludCByOwotCi0JRkxPQ0tGSUxFKGZwKTsKLQlyID0gX19zZmx1c2goZnApOwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKHIpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mZ2V0Yy5jIGIvbGliYy9zdGRpby9mZ2V0Yy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTZkNTRlLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vZmdldGMuYworKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmZ2V0Yy5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLWludAotZmdldGMoRklMRSAqZnApCi17Ci0JcmV0dXJuIChnZXRjKGZwKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZpbGVleHQuaCBiL2xpYmMvc3RkaW8vZmlsZWV4dC5oCmluZGV4IGIzNmE0NDguLjFmMmEzYTMgMTAwNjQ0Ci0tLSBhL2xpYmMvc3RkaW8vZmlsZWV4dC5oCisrKyBiL2xpYmMvc3RkaW8vZmlsZWV4dC5oCkBAIC0yOSw4ICsyOSwxMCBAQAogICogJENpdHJ1cyQKICAqLwogCisjaWZuZGVmIF9GSUxFRVhUX0hfCisjZGVmaW5lIF9GSUxFRVhUX0hfCisKICNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSAid2Npby5oIgogCiAvKgogICogZmlsZSBleHRlbnNpb24KQEAgLTUyLDIwICs1NCwxMyBAQAogCV9VQihmcCkuX2Jhc2UgPSBOVUxMOyBcCiAJX1VCKGZwKS5fc2l6ZSA9IDA7IFwKIAlXQ0lPX0lOSVQoZnApOyBcCi0JX0ZMT0NLX0lOSVQoZnApOyBcCisgICAgICAgIF9GTE9DSyhmcCkudmFsdWUgPSBfX1BUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRfVkFMVUU7IFwKIH0gd2hpbGUgKDApCiAKLS8qIEhlbHBlciBtYWNyb3MgdG8gYXZvaWQgYSBmdW5jdGlvbiBjYWxsIHdoZW4geW91IGtub3cgdGhhdCBmcCBpcyBub3QgTlVMTC4KLSAqIE5vdGljZSB0aGF0IHdlIGtlZXAgX0ZMT0NLX0lOSVQoKSBmYXN0IGJ5IHNsaWdodGx5IGJyZWFraW5nIG91ciBwdGhyZWFkCi0gKiBlbmNhcHN1bGF0aW9uLgotICovCi0jZGVmaW5lIF9GTE9DS19JTklUKGZwKSAgICBfRkxPQ0soZnApLnZhbHVlID0gX19QVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUX1ZBTFVFCi0jZGVmaW5lIF9GTE9DS19MT0NLKGZwKSAgICBwdGhyZWFkX211dGV4X2xvY2soJl9GTE9DSyhmcCkpCi0jZGVmaW5lIF9GTE9DS19UUllMT0NLKGZwKSBwdGhyZWFkX211dGV4X3RyeWxvY2soJl9GTE9DSyhmcCkpCi0jZGVmaW5lIF9GTE9DS19VTkxPQ0soZnApICBwdGhyZWFkX211dGV4X3VubG9jaygmX0ZMT0NLKGZwKSkKLQogI2RlZmluZSBfRklMRUVYVF9TRVRVUChmLCBmZXh0KSBcCiBkbyB7IFwKIAkoZiktPl9leHQuX2Jhc2UgPSAodW5zaWduZWQgY2hhciAqKShmZXh0KTsgXAogCV9GSUxFRVhUX0lOSVQoZik7IFwKIH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfRklMRUVYVF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9maW5kZnAuYyBiL2xpYmMvc3RkaW8vZmluZGZwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0M2M5MGEuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9maW5kZnAuYworKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKgkkT3BlbkJTRDogZmluZGZwLmMsdiAxLjkgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0jaW5jbHVkZSAiZ2x1ZS5oIgotI2luY2x1ZGUgInByaXZhdGUvdGhyZWFkX3ByaXZhdGUuaCIKLQotaW50CV9fc2RpZGluaXQ7Ci0KLSNkZWZpbmUJTkRZTkFNSUMgMTAJCS8qIGFkZCB0ZW4gbW9yZSB3aGVuZXZlciBuZWNlc3NhcnkgKi8KLQotI2RlZmluZQlzdGQoZmxhZ3MsIGZpbGUpIFwKLQl7MCwwLDAsZmxhZ3MsZmlsZSx7MCwwfSwwLF9fc0YrZmlsZSxfX3NjbG9zZSxfX3NyZWFkLF9fc3NlZWssX19zd3JpdGUsIFwKLQkgeyh1bnNpZ25lZCBjaGFyICopKF9fc0ZleHQrZmlsZSksIDB9LE5VTEwsMCx7MCwwLDB9LHswfSx7MCwwfSwwLDB9Ci0vKgkgcCByIHcgZmxhZ3MgZmlsZSBfYmYgeiAgY29va2llICAgICAgY2xvc2UgICAgcmVhZCAgICBzZWVrICAgIHdyaXRlCi0JIGV4dCAqLwotCi0vKiB0aGUgdXN1YWwgLSAoc3RkaW4gKyBzdGRvdXQgKyBzdGRlcnIpICovCi1zdGF0aWMgRklMRSB1c3VhbFtGT1BFTl9NQVggLSAzXTsKLXN0YXRpYyBzdHJ1Y3QgX19zZmlsZWV4dCB1c3VhbGV4dFtGT1BFTl9NQVggLSAzXTsKLXN0YXRpYyBzdHJ1Y3QgZ2x1ZSB1Z2x1ZSA9IHsgMCwgRk9QRU5fTUFYIC0gMywgdXN1YWwgfTsKLXN0YXRpYyBzdHJ1Y3QgZ2x1ZSAqbGFzdGdsdWUgPSAmdWdsdWU7Ci1fVEhSRUFEX1BSSVZBVEVfTVVURVgoX19zZnBfbXV0ZXgpOwotCi1zdGF0aWMgc3RydWN0IF9fc2ZpbGVleHQgX19zRmV4dFszXSA9IHsKLQlfRklMRUVYVF9JTklUSUFMSVpFUiwKLQlfRklMRUVYVF9JTklUSUFMSVpFUiwKLQlfRklMRUVYVF9JTklUSUFMSVpFUiwKLX07Ci0KLUZJTEUgX19zRlszXSA9IHsKLQlzdGQoX19TUkQsIFNURElOX0ZJTEVOTyksCQkvKiBzdGRpbiAqLwotCXN0ZChfX1NXUiwgU1RET1VUX0ZJTEVOTyksCQkvKiBzdGRvdXQgKi8KLQlzdGQoX19TV1J8X19TTkJGLCBTVERFUlJfRklMRU5PKQkvKiBzdGRlcnIgKi8KLX07Ci1zdHJ1Y3QgZ2x1ZSBfX3NnbHVlID0geyAmdWdsdWUsIDMsIF9fc0YgfTsKLQotc3RhdGljIHN0cnVjdCBnbHVlICoKLW1vcmVnbHVlKGludCBuKQotewotCXN0cnVjdCBnbHVlICpnOwotCUZJTEUgKnA7Ci0Jc3RydWN0IF9fc2ZpbGVleHQgKnBleHQ7Ci0Jc3RhdGljIEZJTEUgZW1wdHk7Ci0JY2hhciAqZGF0YTsKLQotCWRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpnKSArIEFMSUdOQllURVMgKyBuICogc2l6ZW9mKEZJTEUpCi0JICAgICsgbiAqIHNpemVvZihzdHJ1Y3QgX19zZmlsZWV4dCkpOwotCWlmIChkYXRhID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0JZyA9IChzdHJ1Y3QgZ2x1ZSAqKWRhdGE7Ci0JcCA9IChGSUxFICopQUxJR04oZGF0YSArIHNpemVvZigqZykpOwotCXBleHQgPSAoc3RydWN0IF9fc2ZpbGVleHQgKikKLQkgICAgKEFMSUdOKGRhdGEgKyBzaXplb2YoKmcpKSArIG4gKiBzaXplb2YoRklMRSkpOwotCWctPm5leHQgPSBOVUxMOwotCWctPm5pb2JzID0gbjsKLQlnLT5pb2JzID0gcDsKLQl3aGlsZSAoLS1uID49IDApIHsKLQkJKnAgPSBlbXB0eTsKLQkJX0ZJTEVFWFRfU0VUVVAocCwgcGV4dCk7Ci0JCXArKzsKLQkJcGV4dCsrOwotCX0KLQlyZXR1cm4gKGcpOwotfQotCi0vKgotICogRmluZCBhIGZyZWUgRklMRSBmb3IgZm9wZW4gZXQgYWwuCi0gKi8KLUZJTEUgKgotX19zZnAodm9pZCkKLXsKLQlGSUxFICpmcDsKLQlpbnQgbjsKLQlzdHJ1Y3QgZ2x1ZSAqZzsKLQotCWlmICghX19zZGlkaW5pdCkKLQkJX19zaW5pdCgpOwotCi0JX1RIUkVBRF9QUklWQVRFX01VVEVYX0xPQ0soX19zZnBfbXV0ZXgpOwotCWZvciAoZyA9ICZfX3NnbHVlOyBnICE9IE5VTEw7IGcgPSBnLT5uZXh0KSB7Ci0JCWZvciAoZnAgPSBnLT5pb2JzLCBuID0gZy0+bmlvYnM7IC0tbiA+PSAwOyBmcCsrKQotCQkJaWYgKGZwLT5fZmxhZ3MgPT0gMCkKLQkJCQlnb3RvIGZvdW5kOwotCX0KLQotCS8qIHJlbGVhc2UgbG9jayB3aGlsZSBtYWxsb2NpbmcgKi8KLQlfVEhSRUFEX1BSSVZBVEVfTVVURVhfVU5MT0NLKF9fc2ZwX211dGV4KTsKLQlpZiAoKGcgPSBtb3JlZ2x1ZShORFlOQU1JQykpID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0JX1RIUkVBRF9QUklWQVRFX01VVEVYX0xPQ0soX19zZnBfbXV0ZXgpOwotCWxhc3RnbHVlLT5uZXh0ID0gZzsKLQlsYXN0Z2x1ZSA9IGc7Ci0JZnAgPSBnLT5pb2JzOwotZm91bmQ6Ci0JZnAtPl9mbGFncyA9IDE7CQkvKiByZXNlcnZlIHRoaXMgc2xvdDsgY2FsbGVyIHNldHMgcmVhbCBmbGFncyAqLwotCV9USFJFQURfUFJJVkFURV9NVVRFWF9VTkxPQ0soX19zZnBfbXV0ZXgpOwotCWZwLT5fcCA9IE5VTEw7CQkvKiBubyBjdXJyZW50IHBvaW50ZXIgKi8KLQlmcC0+X3cgPSAwOwkJLyogbm90aGluZyB0byByZWFkIG9yIHdyaXRlICovCi0JZnAtPl9yID0gMDsKLQlmcC0+X2JmLl9iYXNlID0gTlVMTDsJLyogbm8gYnVmZmVyICovCi0JZnAtPl9iZi5fc2l6ZSA9IDA7Ci0JZnAtPl9sYmZzaXplID0gMDsJLyogbm90IGxpbmUgYnVmZmVyZWQgKi8KLQlmcC0+X2ZpbGUgPSAtMTsJCS8qIG5vIGZpbGUgKi8KLS8qCWZwLT5fY29va2llID0gPGFueT47ICovCS8qIGNhbGxlciBzZXRzIGNvb2tpZSwgX3JlYWQvX3dyaXRlIGV0YyAqLwotCWZwLT5fbGIuX2Jhc2UgPSBOVUxMOwkvKiBubyBsaW5lIGJ1ZmZlciAqLwotCWZwLT5fbGIuX3NpemUgPSAwOwotCV9GSUxFRVhUX0lOSVQoZnApOwotCXJldHVybiAoZnApOwotfQotCi0jaWYgMAotI2RlZmluZSBnZXRkdGFibGVzaXplKCkJc3lzY29uZihfU0NfT1BFTl9NQVgpCi0KLS8qCi0gKiBYWFguICBGb3JjZSBpbW1lZGlhdGUgYWxsb2NhdGlvbiBvZiBpbnRlcm5hbCBtZW1vcnkuICBOb3QgdXNlZCBieSBzdGRpbywKLSAqIGJ1dCBkb2N1bWVudGVkIGhpc3RvcmljYWxseSBmb3IgY2VydGFpbiBhcHBsaWNhdGlvbnMuICBCYWQgYXBwbGljYXRpb25zLgotICovCi12b2lkCi1mX3ByZWFsbG9jKHZvaWQpCi17Ci0Jc3RydWN0IGdsdWUgKmc7Ci0JaW50IG47Ci0KLQluID0gZ2V0ZHRhYmxlc2l6ZSgpIC0gRk9QRU5fTUFYICsgMjA7CQkvKiAyMCBmb3Igc2xvcC4gKi8KLQlmb3IgKGcgPSAmX19zZ2x1ZTsgKG4gLT0gZy0+bmlvYnMpID4gMCAmJiBnLT5uZXh0OyBnID0gZy0+bmV4dCkKLQkJLyogdm9pZCAqLzsKLQlpZiAobiA+IDAgJiYgKChnID0gbW9yZWdsdWUobikpICE9IE5VTEwpKSB7Ci0JCV9USFJFQURfUFJJVkFURV9NVVRFWF9MT0NLKF9fc2ZwX211dGV4KTsKLQkJbGFzdGdsdWUtPm5leHQgPSBnOwotCQlsYXN0Z2x1ZSA9IGc7Ci0JCV9USFJFQURfUFJJVkFURV9NVVRFWF9VTkxPQ0soX19zZnBfbXV0ZXgpOwotCX0KLX0KLSNlbmRpZgotCi0vKgotICogZXhpdCgpIGNhbGxzIF9jbGVhbnVwKCkgdGhyb3VnaCAqX19jbGVhbnVwLCBzZXQgd2hlbmV2ZXIgd2UKLSAqIG9wZW4gb3IgYnVmZmVyIGEgZmlsZS4gIFRoaXMgY2hpY2FuZXJ5IGlzIGRvbmUgc28gdGhhdCBwcm9ncmFtcwotICogdGhhdCBkbyBub3QgdXNlIHN0ZGlvIG5lZWQgbm90IGxpbmsgaXQgYWxsIGluLgotICoKLSAqIFRoZSBuYW1lIGBfY2xlYW51cCcgaXMsIGFsYXMsIGZhaXJseSB3ZWxsIGtub3duIG91dHNpZGUgc3RkaW8uCi0gKi8KLXZvaWQKLV9jbGVhbnVwKHZvaWQpCi17Ci0JLyogKHZvaWQpIF9md2FsayhmY2xvc2UpOyAqLwotCSh2b2lkKSBfZndhbGsoX19zZmx1c2gpOwkJLyogYGNoZWF0aW5nJyAqLwotfQotCi0vKgotICogX19zaW5pdCgpIGlzIGNhbGxlZCB3aGVuZXZlciBzdGRpbydzIGludGVybmFsIHZhcmlhYmxlcyBtdXN0IGJlIHNldCB1cC4KLSAqLwotdm9pZAotX19zaW5pdCh2b2lkKQotewotCV9USFJFQURfUFJJVkFURV9NVVRFWChfX3Npbml0X211dGV4KTsKLQlpbnQgaTsKLQotCV9USFJFQURfUFJJVkFURV9NVVRFWF9MT0NLKF9fc2luaXRfbXV0ZXgpOwotCWlmIChfX3NkaWRpbml0KQotCQlnb3RvIG91dDsJLyogYmFpbCBvdXQgaWYgY2FsbGVyIGxvc3QgdGhlIHJhY2UgKi8KLQlmb3IgKGkgPSAwOyBpIDwgRk9QRU5fTUFYIC0gMzsgaSsrKSB7Ci0JCV9GSUxFRVhUX1NFVFVQKHVzdWFsK2ksIHVzdWFsZXh0K2kpOwotCX0KLQkvKiBtYWtlIHN1cmUgd2UgY2xlYW4gdXAgb24gZXhpdCAqLwotCV9fY2xlYW51cCA9IF9jbGVhbnVwOyAvKiBjb25zZXJ2YXRpdmUgKi8KLQlfX3NkaWRpbml0ID0gMTsKLW91dDoKLQlfVEhSRUFEX1BSSVZBVEVfTVVURVhfVU5MT0NLKF9fc2luaXRfbXV0ZXgpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mbG9hdGlvLmggYi9saWJjL3N0ZGlvL2Zsb2F0aW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBmOTgwMS4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2Zsb2F0aW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmbG9hdGlvLmgsdiAxLjMgMjAwMy8wNi8wMiAyMDoxODozNyBtaWxsZXJ0IEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIEZsb2F0aW5nIHBvaW50IHNjYW5mL3ByaW50ZiAoaW5wdXQvb3V0cHV0KSBkZWZpbml0aW9ucy4KLSAqLwotCi0vKiAxMS1iaXQgZXhwb25lbnQgKFZBWCBHIGZsb2F0aW5nIHBvaW50KSBpcyAzMDggZGVjaW1hbCBkaWdpdHMgKi8KLSNkZWZpbmUJTUFYRVhQCQkzMDgKLS8qIDEyOCBiaXQgZnJhY3Rpb24gdGFrZXMgdXAgMzkgZGVjaW1hbCBkaWdpdHM7IG1heCByZWFzb25hYmxlIHByZWNpc2lvbiAqLwotI2RlZmluZQlNQVhGUkFDVAkzOQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mcHJpbnRmLmMgYi9saWJjL3N0ZGlvL2ZwcmludGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQxNWIyZi4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2ZwcmludGYuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmcHJpbnRmLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotaW50Ci1mcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlpbnQgcmV0OwotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQlyZXQgPSB2ZnByaW50ZihmcCwgZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQlyZXR1cm4gKHJldCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZwdXRjLmMgYi9saWJjL3N0ZGlvL2ZwdXRjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwODA5ZTIuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9mcHV0Yy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZwdXRjLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi1pbnQKLWZwdXRjKGludCBjLCBGSUxFICpmcCkKLXsKLQlyZXR1cm4gKHB1dGMoYywgZnApKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnJlYWQuYyBiL2xpYmMvc3RkaW8vZnJlYWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ5ZGIxNy4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2ZyZWFkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZyZWFkLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLXN0YXRpYyBpbnQKLWxmbHVzaChGSUxFICpmcCkKLXsKLSAgICBpZiAoKGZwLT5fZmxhZ3MgJiAoX19TTEJGfF9fU1dSKSkgPT0gKF9fU0xCRnxfX1NXUikpCi0gICAgICAgIHJldHVybiAoX19zZmx1c2hfbG9ja2VkKGZwKSk7Ci0gICAgcmV0dXJuICgwKTsKLX0KLQotc2l6ZV90Ci1mcmVhZCh2b2lkICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgY291bnQsIEZJTEUgKmZwKQotewotICAgIHNpemVfdCByZXNpZDsKLSAgICBjaGFyICpwOwotICAgIGludCByOwotICAgIHNpemVfdCB0b3RhbDsKLQotICAgIC8qCi0gICAgICogVGhlIEFOU0kgc3RhbmRhcmQgcmVxdWlyZXMgYSByZXR1cm4gdmFsdWUgb2YgMCBmb3IgYSBjb3VudAotICAgICAqIG9yIGEgc2l6ZSBvZiAwLiAgUGVjdWxpYXJpbHksIGl0IGltcG9zZXMgbm8gc3VjaCByZXF1aXJlbWVudHMKLSAgICAgKiBvbiBmd3JpdGU7IGl0IG9ubHkgcmVxdWlyZXMgZnJlYWQgdG8gYmUgYnJva2VuLgotICAgICAqLwotICAgIGlmICgocmVzaWQgPSBjb3VudCAqIHNpemUpID09IDApCi0gICAgICAgIHJldHVybiAoMCk7Ci0gICAgRkxPQ0tGSUxFKGZwKTsKLSAgICBpZiAoZnAtPl9yIDwgMCkKLSAgICAgICAgZnAtPl9yID0gMDsKLSAgICB0b3RhbCA9IHJlc2lkOwotICAgIHAgPSBidWY7Ci0KLSNpZiAxICAvKiBCSU9OSUM6IG9wdGltaXplIHVuYnVmZmVyZWQgcmVhZHMgKi8KLSAgICBpZiAoZnAtPl9mbGFncyAmIF9fU05CRiAmJiBmcC0+X3VyID09IDApCi0gICAgewotICAgICAgICAvKiB0aGUgZm9sbG93aW5nIGNvbWVzIG1haW5seSBmcm9tIF9fc3JlZmlsbCgpLCB3aXRoIHNsaWdodAotICAgICAgICAgKiBtb2RpZmljYXRpb25zCi0gICAgICAgICAqLwotCi0gICAgICAgIC8qIG1ha2Ugc3VyZSBzdGRpbyBpcyBzZXQgdXAgKi8KLSAgICAgICAgaWYgKCFfX3NkaWRpbml0KQotICAgICAgICAgICAgX19zaW5pdCgpOwotCi0gICAgICAgIGZwLT5fciA9IDA7ICAgICAvKiBsYXJnZWx5IGEgY29udmVuaWVuY2UgZm9yIGNhbGxlcnMgKi8KLQotICAgICAgICAvKiBTeXNWIGRvZXMgbm90IG1ha2UgdGhpcyB0ZXN0OyB0YWtlIGl0IG91dCBmb3IgY29tcGF0aWJpbGl0eSAqLwotICAgICAgICBpZiAoZnAtPl9mbGFncyAmIF9fU0VPRikgewotICAgICAgICAgICAgRlVOTE9DS0ZJTEUoZnApOwotICAgICAgICAgICAgcmV0dXJuIChFT0YpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogaWYgbm90IGFscmVhZHkgcmVhZGluZywgaGF2ZSB0byBiZSByZWFkaW5nIGFuZCB3cml0aW5nICovCi0gICAgICAgIGlmICgoZnAtPl9mbGFncyAmIF9fU1JEKSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoKGZwLT5fZmxhZ3MgJiBfX1NSVykgPT0gMCkgewotICAgICAgICAgICAgICAgIGZwLT5fZmxhZ3MgfD0gX19TRVJSOwotICAgICAgICAgICAgICAgIEZVTkxPQ0tGSUxFKGZwKTsKLSAgICAgICAgICAgICAgICBlcnJubyA9IEVCQURGOwotICAgICAgICAgICAgICAgIHJldHVybiAoRU9GKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIHN3aXRjaCB0byByZWFkaW5nICovCi0gICAgICAgICAgICBpZiAoZnAtPl9mbGFncyAmIF9fU1dSKSB7Ci0gICAgICAgICAgICAgICAgaWYgKF9fc2ZsdXNoKGZwKSkgewotICAgICAgICAgICAgICAgICAgICBGVU5MT0NLRklMRShmcCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoRU9GKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnAtPl9mbGFncyAmPSB+X19TV1I7Ci0gICAgICAgICAgICAgICAgZnAtPl93ID0gMDsKLSAgICAgICAgICAgICAgICBmcC0+X2xiZnNpemUgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnAtPl9mbGFncyB8PSBfX1NSRDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBXZSB3ZXJlIHJlYWRpbmcuICBJZiB0aGVyZSBpcyBhbiB1bmdldGMgYnVmZmVyLAotICAgICAgICAgICAgICogd2UgbXVzdCBoYXZlIGJlZW4gcmVhZGluZyBmcm9tIHRoYXQuICBEcm9wIGl0LAotICAgICAgICAgICAgICogcmVzdG9yaW5nIHRoZSBwcmV2aW91cyBidWZmZXIgKGlmIGFueSkuICBJZiB0aGVyZQotICAgICAgICAgICAgICogaXMgYW55dGhpbmcgaW4gdGhhdCBidWZmZXIsIHJldHVybi4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKEhBU1VCKGZwKSkgewotICAgICAgICAgICAgICAgIEZSRUVVQihmcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBCZWZvcmUgcmVhZGluZyBmcm9tIGEgbGluZSBidWZmZXJlZCBvciB1bmJ1ZmZlcmVkIGZpbGUsCi0gICAgICAgICAqIGZsdXNoIGFsbCBsaW5lIGJ1ZmZlcmVkIG91dHB1dCBmaWxlcywgcGVyIHRoZSBBTlNJIEMKLSAgICAgICAgICogc3RhbmRhcmQuCi0gICAgICAgICAqLwotCi0gICAgICAgIGlmIChmcC0+X2ZsYWdzICYgKF9fU0xCRnxfX1NOQkYpKSB7Ci0gICAgICAgICAgICAvKiBJZ25vcmUgdGhpcyBmaWxlIGluIF9md2FsayB0byBkZWFkbG9jay4gKi8KLSAgICAgICAgICAgIGZwLT5fZmxhZ3MgfD0gX19TSUdOOwotICAgICAgICAgICAgKHZvaWQpIF9md2FsayhsZmx1c2gpOwotICAgICAgICAgICAgZnAtPl9mbGFncyAmPSB+X19TSUdOOwotCi0gICAgICAgICAgICAvKiBOb3cgZmx1c2ggdGhpcyBmaWxlIHdpdGhvdXQgbG9ja2luZyBpdC4gKi8KLSAgICAgICAgICAgIGlmICgoZnAtPl9mbGFncyAmIChfX1NMQkZ8X19TV1IpKSA9PSAoX19TTEJGfF9fU1dSKSkKLSAgICAgICAgICAgICAgICBfX3NmbHVzaChmcCk7Ci0gICAgICAgIH0KLQotICAgICAgICB3aGlsZSAocmVzaWQgPiAwKSB7Ci0gICAgICAgICAgICBpbnQgICBsZW4gPSAoKmZwLT5fcmVhZCkoZnAtPl9jb29raWUsIHAsIHJlc2lkICk7Ci0gICAgICAgICAgICBmcC0+X2ZsYWdzICY9IH5fX1NNT0Q7Ci0gICAgICAgICAgICBpZiAobGVuIDw9IDApIHsKLSAgICAgICAgICAgICAgICBpZiAobGVuID09IDApCi0gICAgICAgICAgICAgICAgICAgIGZwLT5fZmxhZ3MgfD0gX19TRU9GOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgRlVOTE9DS0ZJTEUoZnApOwotICAgICAgICAgICAgICAgIHJldHVybiAoKHRvdGFsIC0gcmVzaWQpIC8gc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwICAgICArPSBsZW47Ci0gICAgICAgICAgICByZXNpZCAtPSBsZW47Ci0gICAgICAgIH0KLSAgICAgICAgRlVOTE9DS0ZJTEUoZnApOwotICAgICAgICByZXR1cm4gKGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZQotI2VuZGlmCi0gICAgewotICAgICAgICB3aGlsZSAocmVzaWQgPiAoc2l6ZV90KShyID0gZnAtPl9yKSkgewotICAgICAgICAgICAgKHZvaWQpbWVtY3B5KCh2b2lkICopcCwgKHZvaWQgKilmcC0+X3AsIChzaXplX3Qpcik7Ci0gICAgICAgICAgICBmcC0+X3AgKz0gcjsKLSAgICAgICAgICAgIC8qIGZwLT5fciA9IDAgLi4uIGRvbmUgaW4gX19zcmVmaWxsICovCi0gICAgICAgICAgICBwICs9IHI7Ci0gICAgICAgICAgICByZXNpZCAtPSByOwotICAgICAgICAgICAgaWYgKF9fc3JlZmlsbChmcCkpIHsKLSAgICAgICAgICAgICAgICAvKiBubyBtb3JlIGlucHV0OiByZXR1cm4gcGFydGlhbCByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICBGVU5MT0NLRklMRShmcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgodG90YWwgLSByZXNpZCkgLyBzaXplKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgICh2b2lkKW1lbWNweSgodm9pZCAqKXAsICh2b2lkICopZnAtPl9wLCByZXNpZCk7Ci0gICAgZnAtPl9yIC09IHJlc2lkOwotICAgIGZwLT5fcCArPSByZXNpZDsKLSAgICBGVU5MT0NLRklMRShmcCk7Ci0gICAgcmV0dXJuIChjb3VudCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZyZW9wZW4uYyBiL2xpYmMvc3RkaW8vZnJlb3Blbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDM4NmU5Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vZnJlb3Blbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmcmVvcGVuLmMsdiAxLjkgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jZGVmaW5lIF9fVVNFX0JTRAotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi0vKgotICogUmUtZGlyZWN0IGFuIGV4aXN0aW5nLCBvcGVuIChwcm9iYWJseSkgZmlsZSB0byBzb21lIG90aGVyIGZpbGUuCi0gKiBBTlNJIGlzIHdyaXR0ZW4gc3VjaCB0aGF0IHRoZSBvcmlnaW5hbCBmaWxlIGdldHMgY2xvc2VkIGlmIGF0Ci0gKiBhbGwgcG9zc2libGUsIG5vIG1hdHRlciB3aGF0LgotICovCi1GSUxFICoKLWZyZW9wZW4oY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqbW9kZSwgRklMRSAqZnApCi17Ci0JaW50IGY7Ci0JaW50IGZsYWdzLCBpc29wZW4sIG9mbGFncywgc3ZlcnJubywgd2FudGZkOwotCi0JaWYgKChmbGFncyA9IF9fc2ZsYWdzKG1vZGUsICZvZmxhZ3MpKSA9PSAwKSB7Ci0JCSh2b2lkKSBmY2xvc2UoZnApOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQotCWlmICghX19zZGlkaW5pdCkKLQkJX19zaW5pdCgpOwotCi0JRkxPQ0tGSUxFKGZwKTsKLQotCS8qCi0JICogVGhlcmUgYXJlIGFjdHVhbGx5IHByb2dyYW1zIHRoYXQgZGVwZW5kIG9uIGJlaW5nIGFibGUgdG8gImZyZW9wZW4iCi0JICogZGVzY3JpcHRvcnMgdGhhdCB3ZXJlbid0IG9yaWdpbmFsbHkgb3Blbi4gIEtlZXAgdGhpcyBmcm9tIGJyZWFraW5nLgotCSAqIFJlbWVtYmVyIHdoZXRoZXIgdGhlIHN0cmVhbSB3YXMgb3BlbiB0byBiZWdpbiB3aXRoLCBhbmQgd2hpY2ggZmlsZQotCSAqIGRlc2NyaXB0b3IgKGlmIGFueSkgd2FzIGFzc29jaWF0ZWQgd2l0aCBpdC4gIElmIGl0IHdhcyBhdHRhY2hlZCB0bwotCSAqIGEgZGVzY3JpcHRvciwgZGVmZXIgY2xvc2luZyBpdDsgZnJlb3BlbigiL2Rldi9zdGRpbiIsICJyIiwgc3RkaW4pCi0JICogc2hvdWxkIHdvcmsuICBUaGlzIGlzIHVubmVjZXNzYXJ5IGlmIGl0IHdhcyBub3QgYSBVbml4IGZpbGUuCi0JICovCi0JaWYgKGZwLT5fZmxhZ3MgPT0gMCkgewotCQlmcC0+X2ZsYWdzID0gX19TRU9GOwkvKiBob2xkIG9uIHRvIGl0ICovCi0JCWlzb3BlbiA9IDA7Ci0JCXdhbnRmZCA9IC0xOwotCX0gZWxzZSB7Ci0JCS8qIGZsdXNoIHRoZSBzdHJlYW07IEFOU0kgZG9lc24ndCByZXF1aXJlIHRoaXMuICovCi0JCWlmIChmcC0+X2ZsYWdzICYgX19TV1IpCi0JCQkodm9pZCkgX19zZmx1c2goZnApOwotCQkvKiBpZiBjbG9zZSBpcyBOVUxMLCBjbG9zaW5nIGlzIGEgbm8tb3AsIGhlbmNlIHBvaW50bGVzcyAqLwotCQlpc29wZW4gPSBmcC0+X2Nsb3NlICE9IE5VTEw7Ci0JCWlmICgod2FudGZkID0gZnAtPl9maWxlKSA8IDAgJiYgaXNvcGVuKSB7Ci0JCQkodm9pZCkgKCpmcC0+X2Nsb3NlKShmcC0+X2Nvb2tpZSk7Ci0JCQlpc29wZW4gPSAwOwotCQl9Ci0JfQotCi0JLyogR2V0IGEgbmV3IGRlc2NyaXB0b3IgdG8gcmVmZXIgdG8gdGhlIG5ldyBmaWxlLiAqLwotCWYgPSBvcGVuKGZpbGUsIG9mbGFncywgREVGRklMRU1PREUpOwotCWlmIChmIDwgMCAmJiBpc29wZW4pIHsKLQkJLyogSWYgb3V0IG9mIGZkJ3MgY2xvc2UgdGhlIG9sZCBvbmUgYW5kIHRyeSBhZ2Fpbi4gKi8KLQkJaWYgKGVycm5vID09IEVORklMRSB8fCBlcnJubyA9PSBFTUZJTEUpIHsKLQkJCSh2b2lkKSAoKmZwLT5fY2xvc2UpKGZwLT5fY29va2llKTsKLQkJCWlzb3BlbiA9IDA7Ci0JCQlmID0gb3BlbihmaWxlLCBvZmxhZ3MsIERFRkZJTEVNT0RFKTsKLQkJfQotCX0KLQlzdmVycm5vID0gZXJybm87Ci0KLQkvKgotCSAqIEZpbmlzaCBjbG9zaW5nIGZwLiAgRXZlbiBpZiB0aGUgb3BlbiBzdWNjZWVkZWQgYWJvdmUsIHdlIGNhbm5vdAotCSAqIGtlZXAgZnAtPl9iYXNlOiBpdCBtYXkgYmUgdGhlIHdyb25nIHNpemUuICBUaGlzIGxvc2VzIHRoZSBlZmZlY3QKLQkgKiBvZiBhbnkgc2V0YnVmZmVyIGNhbGxzLCBidXQgc3RkaW8gaGFzIGFsd2F5cyBkb25lIHRoaXMgYmVmb3JlLgotCSAqLwotCWlmIChpc29wZW4gJiYgZiAhPSB3YW50ZmQpCi0JCSh2b2lkKSAoKmZwLT5fY2xvc2UpKGZwLT5fY29va2llKTsKLQlpZiAoZnAtPl9mbGFncyAmIF9fU01CRikKLQkJZnJlZSgoY2hhciAqKWZwLT5fYmYuX2Jhc2UpOwotCWZwLT5fdyA9IDA7Ci0JZnAtPl9yID0gMDsKLQlmcC0+X3AgPSBOVUxMOwotCWZwLT5fYmYuX2Jhc2UgPSBOVUxMOwotCWZwLT5fYmYuX3NpemUgPSAwOwotCWZwLT5fbGJmc2l6ZSA9IDA7Ci0JaWYgKEhBU1VCKGZwKSkKLQkJRlJFRVVCKGZwKTsKLQlfVUIoZnApLl9zaXplID0gMDsKLQlXQ0lPX0ZSRUUoZnApOwotCWlmIChIQVNMQihmcCkpCi0JCUZSRUVMQihmcCk7Ci0JZnAtPl9sYi5fc2l6ZSA9IDA7Ci0KLQlpZiAoZiA8IDApIHsJCQkvKiBkaWQgbm90IGdldCBpdCBhZnRlciBhbGwgKi8KLQkJZnAtPl9mbGFncyA9IDA7CQkvKiBzZXQgaXQgZnJlZSAqLwotCQlGVU5MT0NLRklMRShmcCk7Ci0JCWVycm5vID0gc3ZlcnJubzsJLyogcmVzdG9yZSBpbiBjYXNlIF9jbG9zZSBjbG9iYmVyZWQgKi8KLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQkvKgotCSAqIElmIHJlb3BlbmluZyBzb21ldGhpbmcgdGhhdCB3YXMgb3BlbiBiZWZvcmUgb24gYSByZWFsIGZpbGUsIHRyeQotCSAqIHRvIG1haW50YWluIHRoZSBkZXNjcmlwdG9yLiAgVmFyaW91cyBDIGxpYnJhcnkgcm91dGluZXMgKHBlcnJvcikKLQkgKiBhc3N1bWUgc3RkZXJyIGlzIGFsd2F5cyBmZCBTVERFUlJfRklMRU5PLCBldmVuIGlmIGJlaW5nIGZyZW9wZW4nZC4KLQkgKi8KLQlpZiAod2FudGZkID49IDAgJiYgZiAhPSB3YW50ZmQpIHsKLQkJaWYgKGR1cDIoZiwgd2FudGZkKSA+PSAwKSB7Ci0JCQkodm9pZCkgY2xvc2UoZik7Ci0JCQlmID0gd2FudGZkOwotCQl9Ci0JfQotCi0JZnAtPl9mbGFncyA9IGZsYWdzOwotCWZwLT5fZmlsZSA9IGY7Ci0JZnAtPl9jb29raWUgPSBmcDsKLQlmcC0+X3JlYWQgPSBfX3NyZWFkOwotCWZwLT5fd3JpdGUgPSBfX3N3cml0ZTsKLQlmcC0+X3NlZWsgPSBfX3NzZWVrOwotCWZwLT5fY2xvc2UgPSBfX3NjbG9zZTsKLQotCS8qCi0JICogV2hlbiBvcGVuaW5nIGluIGFwcGVuZCBtb2RlLCBldmVuIHRob3VnaCB3ZSB1c2UgT19BUFBFTkQsCi0JICogd2UgbmVlZCB0byBzZWVrIHRvIHRoZSBlbmQgc28gdGhhdCBmdGVsbCgpIGdldHMgdGhlIHJpZ2h0Ci0JICogYW5zd2VyLiAgSWYgdGhlIHVzZXIgdGhlbiBhbHRlcnMgdGhlIHNlZWsgcG9pbnRlciwgb3IKLQkgKiB0aGUgZmlsZSBleHRlbmRzLCB0aGlzIHdpbGwgZmFpbCwgYnV0IHRoZXJlIGlzIG5vdCBtdWNoCi0JICogd2UgY2FuIGRvIGFib3V0IHRoaXMuICAoV2UgY291bGQgc2V0IF9fU0FQUCBhbmQgY2hlY2sgaW4KLQkgKiBmc2VlayBhbmQgZnRlbGwuKQotCSAqLwotCWlmIChvZmxhZ3MgJiBPX0FQUEVORCkKLQkJKHZvaWQpIF9fc3NlZWsoKHZvaWQgKilmcCwgKGZwb3NfdCkwLCBTRUVLX0VORCk7Ci0JRlVOTE9DS0ZJTEUoZnApOwotCXJldHVybiAoZnApOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mc2NhbmYuYyBiL2xpYmMvc3RkaW8vZnNjYW5mLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmM2ZjZWIuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9mc2NhbmYuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmc2NhbmYuYyx2IDEuOSAyMDA1LzEwLzEwIDE3OjM3OjQ0IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotCi1pbnQKLWZzY2FuZihGSUxFICpmcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JaW50IHJldDsKLQl2YV9saXN0IGFwOwotCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JcmV0ID0gdmZzY2FuZihmcCwgZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQlyZXR1cm4gKHJldCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZzZWVrLmMgYi9saWJjL3N0ZGlvL2ZzZWVrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4Njk3ZjUuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9mc2Vlay5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYwICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmc2Vlay5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLQotI2RlZmluZQlQT1NfRVJSCSgtKGZwb3NfdCkxKQotCi0vKgotICogU2VlayB0aGUgZ2l2ZW4gZmlsZSB0byB0aGUgZ2l2ZW4gb2Zmc2V0LgotICogYFdoZW5jZScgbXVzdCBiZSBvbmUgb2YgdGhlIHRocmVlIFNFRUtfKiBtYWNyb3MuCi0gKi8KLWludAotZnNlZWtvKEZJTEUgKmZwLCBvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpCi17Ci0JZnBvc190ICgqc2Vla2ZuKSh2b2lkICosIGZwb3NfdCwgaW50KTsKLQlmcG9zX3QgdGFyZ2V0LCBjdXJvZmY7Ci0Jc2l6ZV90IG47Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0JaW50IGhhdmVwb3M7Ci0KLQkvKiBtYWtlIHN1cmUgc3RkaW8gaXMgc2V0IHVwICovCi0JaWYgKCFfX3NkaWRpbml0KQotCQlfX3Npbml0KCk7Ci0KLQkvKgotCSAqIEhhdmUgdG8gYmUgYWJsZSB0byBzZWVrLgotCSAqLwotCWlmICgoc2Vla2ZuID0gZnAtPl9zZWVrKSA9PSBOVUxMKSB7Ci0JCWVycm5vID0gRVNQSVBFOwkJCS8qIGhpc3RvcmljIHByYWN0aWNlICovCi0JCXJldHVybiAoRU9GKTsKLQl9Ci0KLQkvKgotCSAqIENoYW5nZSBhbnkgU0VFS19DVVIgdG8gU0VFS19TRVQsIGFuZCBjaGVjayBgd2hlbmNlJyBhcmd1bWVudC4KLQkgKiBBZnRlciB0aGlzLCB3aGVuY2UgaXMgZWl0aGVyIFNFRUtfU0VUIG9yIFNFRUtfRU5ELgotCSAqLwotCUZMT0NLRklMRShmcCk7Ci0Jc3dpdGNoICh3aGVuY2UpIHsKLQotCWNhc2UgU0VFS19DVVI6Ci0JCS8qCi0JCSAqIEluIG9yZGVyIHRvIHNlZWsgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgc3RyZWFtIG9mZnNldCwKLQkJICogd2UgaGF2ZSB0byBmaXJzdCBmaW5kIHRoZSBjdXJyZW50IHN0cmVhbSBvZmZzZXQgYSBsYQotCQkgKiBmdGVsbCAoc2VlIGZ0ZWxsIGZvciBkZXRhaWxzKS4KLQkJICovCi0JCV9fc2ZsdXNoKGZwKTsJLyogbWF5IGFkanVzdCBzZWVrIG9mZnNldCBvbiBhcHBlbmQgc3RyZWFtICovCi0JCWlmIChmcC0+X2ZsYWdzICYgX19TT0ZGKQotCQkJY3Vyb2ZmID0gZnAtPl9vZmZzZXQ7Ci0JCWVsc2UgewotCQkJY3Vyb2ZmID0gKCpzZWVrZm4pKGZwLT5fY29va2llLCAoZnBvc190KTAsIFNFRUtfQ1VSKTsKLQkJCWlmIChjdXJvZmYgPT0gKGZwb3NfdCktMSkgewotCQkJCUZVTkxPQ0tGSUxFKGZwKTsKLQkJCQlyZXR1cm4gKEVPRik7Ci0JCQl9Ci0JCX0KLQkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NSRCkgewotCQkJY3Vyb2ZmIC09IGZwLT5fcjsKLQkJCWlmIChIQVNVQihmcCkpCi0JCQkJY3Vyb2ZmIC09IGZwLT5fdXI7Ci0JCX0gZWxzZSBpZiAoZnAtPl9mbGFncyAmIF9fU1dSICYmIGZwLT5fcCAhPSBOVUxMKQotCQkJY3Vyb2ZmICs9IGZwLT5fcCAtIGZwLT5fYmYuX2Jhc2U7Ci0KLQkJb2Zmc2V0ICs9IGN1cm9mZjsKLQkJd2hlbmNlID0gU0VFS19TRVQ7Ci0JCWhhdmVwb3MgPSAxOwotCQlicmVhazsKLQotCWNhc2UgU0VFS19TRVQ6Ci0JY2FzZSBTRUVLX0VORDoKLQkJY3Vyb2ZmID0gMDsJCS8qIFhYWCBqdXN0IHRvIGtlZXAgZ2NjIHF1aWV0ICovCi0JCWhhdmVwb3MgPSAwOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCUZVTkxPQ0tGSUxFKGZwKTsKLQkJZXJybm8gPSBFSU5WQUw7Ci0JCXJldHVybiAoRU9GKTsKLQl9Ci0KLQkvKgotCSAqIENhbiBvbmx5IG9wdGltaXNlIGlmOgotCSAqCXJlYWRpbmcgKGFuZCBub3QgcmVhZGluZy1hbmQtd3JpdGluZyk7Ci0JICoJbm90IHVuYnVmZmVyZWQ7IGFuZAotCSAqCXRoaXMgaXMgYSBgcmVndWxhcicgVW5peCBmaWxlIChhbmQgaGVuY2Ugc2Vla2ZuPT1fX3NzZWVrKS4KLQkgKiBXZSBtdXN0IGNoZWNrIF9fTkJGIGZpcnN0LCBiZWNhdXNlIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgX19OQkYKLQkgKiBhbmQgX19TT1BUIGJvdGggc2V0LgotCSAqLwotCWlmIChmcC0+X2JmLl9iYXNlID09IE5VTEwpCi0JCV9fc21ha2VidWYoZnApOwotCWlmIChmcC0+X2ZsYWdzICYgKF9fU1dSIHwgX19TUlcgfCBfX1NOQkYgfCBfX1NOUFQpKQotCQlnb3RvIGR1bWI7Ci0JaWYgKChmcC0+X2ZsYWdzICYgX19TT1BUKSA9PSAwKSB7Ci0JCWlmIChzZWVrZm4gIT0gX19zc2VlayB8fAotCQkgICAgZnAtPl9maWxlIDwgMCB8fCBmc3RhdChmcC0+X2ZpbGUsICZzdCkgfHwKLQkJICAgIChzdC5zdF9tb2RlICYgU19JRk1UKSAhPSBTX0lGUkVHKSB7Ci0JCQlmcC0+X2ZsYWdzIHw9IF9fU05QVDsKLQkJCWdvdG8gZHVtYjsKLQkJfQotCQlmcC0+X2Jsa3NpemUgPSBzdC5zdF9ibGtzaXplOwotCQlmcC0+X2ZsYWdzIHw9IF9fU09QVDsKLQl9Ci0KLQkvKgotCSAqIFdlIGFyZSByZWFkaW5nOyB3ZSBjYW4gdHJ5IHRvIG9wdGltaXNlLgotCSAqIEZpZ3VyZSBvdXQgd2hlcmUgd2UgYXJlIGdvaW5nIGFuZCB3aGVyZSB3ZSBhcmUgbm93LgotCSAqLwotCWlmICh3aGVuY2UgPT0gU0VFS19TRVQpCi0JCXRhcmdldCA9IG9mZnNldDsKLQllbHNlIHsKLQkJaWYgKGZzdGF0KGZwLT5fZmlsZSwgJnN0KSkKLQkJCWdvdG8gZHVtYjsKLQkJdGFyZ2V0ID0gc3Quc3Rfc2l6ZSArIG9mZnNldDsKLQl9Ci0KLQlpZiAoIWhhdmVwb3MpIHsKLQkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NPRkYpCi0JCQljdXJvZmYgPSBmcC0+X29mZnNldDsKLQkJZWxzZSB7Ci0JCQljdXJvZmYgPSAoKnNlZWtmbikoZnAtPl9jb29raWUsIChmcG9zX3QpMCwgU0VFS19DVVIpOwotCQkJaWYgKGN1cm9mZiA9PSBQT1NfRVJSKQotCQkJCWdvdG8gZHVtYjsKLQkJfQotCQljdXJvZmYgLT0gZnAtPl9yOwotCQlpZiAoSEFTVUIoZnApKQotCQkJY3Vyb2ZmIC09IGZwLT5fdXI7Ci0JfQotCi0JLyoKLQkgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGlucHV0IGJ1ZmZlciAocHJldGVuZGluZwotCSAqIHRoYXQgYW55IHVuZ2V0YygpIGlucHV0IGhhcyBiZWVuIGRpc2NhcmRlZCkuICBBZGp1c3QgY3VycmVudAotCSAqIG9mZnNldCBiYWNrd2FyZHMgYnkgdGhpcyBjb3VudCBzbyB0aGF0IGl0IHJlcHJlc2VudHMgdGhlCi0JICogZmlsZSBvZmZzZXQgZm9yIHRoZSBmaXJzdCBieXRlIGluIHRoZSBjdXJyZW50IGlucHV0IGJ1ZmZlci4KLQkgKi8KLQlpZiAoSEFTVUIoZnApKSB7Ci0JCWN1cm9mZiArPSBmcC0+X3I7CS8qIGtpbGwgb2ZmIHVuZ2V0YyAqLwotCQluID0gZnAtPl91cCAtIGZwLT5fYmYuX2Jhc2U7Ci0JCWN1cm9mZiAtPSBuOwotCQluICs9IGZwLT5fdXI7Ci0JfSBlbHNlIHsKLQkJbiA9IGZwLT5fcCAtIGZwLT5fYmYuX2Jhc2U7Ci0JCWN1cm9mZiAtPSBuOwotCQluICs9IGZwLT5fcjsKLQl9Ci0KLQkvKgotCSAqIElmIHRoZSB0YXJnZXQgb2Zmc2V0IGlzIHdpdGhpbiB0aGUgY3VycmVudCBidWZmZXIsCi0JICogc2ltcGx5IGFkanVzdCB0aGUgcG9pbnRlcnMsIGNsZWFyIEVPRiwgdW5kbyB1bmdldGMoKSwKLQkgKiBhbmQgcmV0dXJuLiAgKElmIHRoZSBidWZmZXIgd2FzIG1vZGlmaWVkLCB3ZSBoYXZlIHRvCi0JICogc2tpcCB0aGlzOyBzZWUgZmdldGxuLmMuKQotCSAqLwotCWlmICgoZnAtPl9mbGFncyAmIF9fU01PRCkgPT0gMCAmJgotCSAgICB0YXJnZXQgPj0gY3Vyb2ZmICYmIHRhcmdldCA8IChmcG9zX3QpKGN1cm9mZiArIG4pKSB7Ci0JCWludCBvID0gdGFyZ2V0IC0gY3Vyb2ZmOwotCi0JCWZwLT5fcCA9IGZwLT5fYmYuX2Jhc2UgKyBvOwotCQlmcC0+X3IgPSBuIC0gbzsKLQkJaWYgKEhBU1VCKGZwKSkKLQkJCUZSRUVVQihmcCk7Ci0JCWZwLT5fZmxhZ3MgJj0gfl9fU0VPRjsKLQkJRlVOTE9DS0ZJTEUoZnApOwotCQlyZXR1cm4gKDApOwotCX0KLQotCS8qCi0JICogVGhlIHBsYWNlIHdlIHdhbnQgdG8gZ2V0IHRvIGlzIG5vdCB3aXRoaW4gdGhlIGN1cnJlbnQgYnVmZmVyLAotCSAqIGJ1dCB3ZSBjYW4gc3RpbGwgYmUga2luZCB0byB0aGUga2VybmVsIGNvcHlvdXQgbWVjaGFuaXNtLgotCSAqIEJ5IGFsaWduaW5nIHRoZSBmaWxlIG9mZnNldCB0byBhIGJsb2NrIGJvdW5kYXJ5LCB3ZSBjYW4gbGV0Ci0JICogdGhlIGtlcm5lbCB1c2UgdGhlIFZNIGhhcmR3YXJlIHRvIG1hcCBwYWdlcyBpbnN0ZWFkIG9mCi0JICogY29weWluZyBieXRlcyBsYWJvcmlvdXNseS4gIFVzaW5nIGEgYmxvY2sgYm91bmRhcnkgYWxzbwotCSAqIGVuc3VyZXMgdGhhdCB3ZSBvbmx5IHJlYWQgb25lIGJsb2NrLCByYXRoZXIgdGhhbiB0d28uCi0JICovCi0JY3Vyb2ZmID0gdGFyZ2V0ICYgfihmcC0+X2Jsa3NpemUgLSAxKTsKLQlpZiAoKCpzZWVrZm4pKGZwLT5fY29va2llLCBjdXJvZmYsIFNFRUtfU0VUKSA9PSBQT1NfRVJSKQotCQlnb3RvIGR1bWI7Ci0JZnAtPl9yID0gMDsKLQlmcC0+X3AgPSBmcC0+X2JmLl9iYXNlOwotCWlmIChIQVNVQihmcCkpCi0JCUZSRUVVQihmcCk7Ci0JZnAtPl9mbGFncyAmPSB+X19TRU9GOwotCW4gPSB0YXJnZXQgLSBjdXJvZmY7Ci0JaWYgKG4pIHsKLQkJaWYgKF9fc3JlZmlsbChmcCkgfHwgKHNpemVfdClmcC0+X3IgPCBuKQotCQkJZ290byBkdW1iOwotCQlmcC0+X3AgKz0gbjsKLQkJZnAtPl9yIC09IG47Ci0JfQotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKDApOwotCi0JLyoKLQkgKiBXZSBnZXQgaGVyZSBpZiB3ZSBjYW5ub3Qgb3B0aW1pc2UgdGhlIHNlZWsgLi4uIGp1c3QKLQkgKiBkbyBpdC4gIEFsbG93IHRoZSBzZWVrIGZ1bmN0aW9uIHRvIGNoYW5nZSBmcC0+X2JmLl9iYXNlLgotCSAqLwotZHVtYjoKLQlpZiAoX19zZmx1c2goZnApIHx8Ci0JICAgICgqc2Vla2ZuKShmcC0+X2Nvb2tpZSwgKGZwb3NfdClvZmZzZXQsIHdoZW5jZSkgPT0gUE9TX0VSUikgewotCQlGVU5MT0NLRklMRShmcCk7Ci0JCXJldHVybiAoRU9GKTsKLQl9Ci0JLyogc3VjY2VzczogY2xlYXIgRU9GIGluZGljYXRvciBhbmQgZGlzY2FyZCB1bmdldGMoKSBkYXRhICovCi0JaWYgKEhBU1VCKGZwKSkKLQkJRlJFRVVCKGZwKTsKLQlmcC0+X3AgPSBmcC0+X2JmLl9iYXNlOwotCWZwLT5fciA9IDA7Ci0JLyogZnAtPl93ID0gMDsgKi8JLyogdW5uZWNlc3NhcnkgKEkgdGhpbmsuLi4pICovCi0JZnAtPl9mbGFncyAmPSB+X19TRU9GOwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogZnNlZWsoKSdzIG9mZnNldCBpcyBhIGxvbmcgYW5kIHNpemVvZihvZmZfdCkgIT0gc2l6ZW9mKGxvbmcpIG9uIGFsbCBhcmNoZXMKLSAqLwotI2lmIGRlZmluZWQoX19hbHBoYV9fKSAmJiBkZWZpbmVkKF9faW5kcl9yZWZlcmVuY2UpCi1fX2luZHJfcmVmZXJlbmNlKGZzZWVrbywgZnNlZWspOwotI2Vsc2UKLWludAotZnNlZWsoRklMRSAqZnAsIGxvbmcgb2Zmc2V0LCBpbnQgd2hlbmNlKQotewotCW9mZl90IG9mZiA9IG9mZnNldDsKLQotCXJldHVybihmc2Vla28oZnAsIG9mZiwgd2hlbmNlKSk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnRlbGwuYyBiL2xpYmMvc3RkaW8vZnRlbGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY4NTBlZS4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2Z0ZWxsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZ0ZWxsLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLS8qCi0gKiBmdGVsbG86IHJldHVybiBjdXJyZW50IG9mZnNldC4KLSAqLwotb2ZmX3QKLWZ0ZWxsbyhGSUxFICpmcCkKLXsKLQlmcG9zX3QgcG9zOwotCi0JaWYgKGZwLT5fc2VlayA9PSBOVUxMKSB7Ci0JCWVycm5vID0gRVNQSVBFOwkJCS8qIGhpc3RvcmljIHByYWN0aWNlICovCi0JCXBvcyA9IC0xOwotICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotCX0KLQotCS8qCi0JICogRmluZCBvZmZzZXQgb2YgdW5kZXJseWluZyBJL08gb2JqZWN0LCB0aGVuCi0JICogYWRqdXN0IGZvciBidWZmZXJlZCBieXRlcy4KLQkgKi8KLSAgICAgICAgRkxPQ0tGSUxFKGZwKTsKLQlfX3NmbHVzaChmcCk7CQkvKiBtYXkgYWRqdXN0IHNlZWsgb2Zmc2V0IG9uIGFwcGVuZCBzdHJlYW0gKi8KLQlpZiAoZnAtPl9mbGFncyAmIF9fU09GRikKLQkJcG9zID0gZnAtPl9vZmZzZXQ7Ci0JZWxzZSB7Ci0JCXBvcyA9ICgqZnAtPl9zZWVrKShmcC0+X2Nvb2tpZSwgKGZwb3NfdCkwLCBTRUVLX0NVUik7Ci0JCWlmIChwb3MgPT0gLTEpCi0JCQlnb3RvIG91dDsKLQl9Ci0JaWYgKGZwLT5fZmxhZ3MgJiBfX1NSRCkgewotCQkvKgotCQkgKiBSZWFkaW5nLiAgQW55IHVucmVhZCBjaGFyYWN0ZXJzIChpbmNsdWRpbmcKLQkJICogdGhvc2UgZnJvbSB1bmdldGMpIGNhdXNlIHRoZSBwb3NpdGlvbiB0byBiZQotCQkgKiBzbWFsbGVyIHRoYW4gdGhhdCBpbiB0aGUgdW5kZXJseWluZyBvYmplY3QuCi0JCSAqLwotCQlwb3MgLT0gZnAtPl9yOwotCQlpZiAoSEFTVUIoZnApKQotCQkJcG9zIC09IGZwLT5fdXI7Ci0JfSBlbHNlIGlmIChmcC0+X2ZsYWdzICYgX19TV1IgJiYgZnAtPl9wICE9IE5VTEwpIHsKLQkJLyoKLQkJICogV3JpdGluZy4gIEFueSBidWZmZXJlZCBjaGFyYWN0ZXJzIGNhdXNlIHRoZQotCQkgKiBwb3NpdGlvbiB0byBiZSBncmVhdGVyIHRoYW4gdGhhdCBpbiB0aGUKLQkJICogdW5kZXJseWluZyBvYmplY3QuCi0JCSAqLwotCQlwb3MgKz0gZnAtPl9wIC0gZnAtPl9iZi5fYmFzZTsKLQl9Ci1vdXQ6CUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKHBvcyk7Ci19Ci0KLS8qCi0gKiBmdGVsbCgpIHJldHVybnMgYSBsb25nIGFuZCBzaXplb2Yob2ZmX3QpICE9IHNpemVvZihsb25nKSBvbiBhbGwgYXJjaGVzCi0gKi8KLSNpZiBkZWZpbmVkKF9fYWxwaGFfXykgJiYgZGVmaW5lZChfX2luZHJfcmVmZXJlbmNlKQotX19pbmRyX3JlZmVyZW5jZShmdGVsbG8sIGZ0ZWxsKTsKLSNlbHNlCi1sb25nCi1mdGVsbChGSUxFICpmcCkKLXsKLQlsb25nIHBvczsKLQotCXBvcyA9IChsb25nKWZ0ZWxsbyhmcCk7Ci0JcmV0dXJuKHBvcyk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnZ3cml0ZS5jIGIvbGliYy9zdGRpby9mdndyaXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZDA2MDQuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9mdndyaXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZ2d3JpdGUuYyx2IDEuMTQgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0jaW5jbHVkZSAiZnZ3cml0ZS5oIgotCi0vKgotICogV3JpdGUgc29tZSBtZW1vcnkgcmVnaW9ucy4gIFJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MsIEVPRiBvbiBlcnJvci4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgbGFyZ2UgYW5kIHVuc2lnaHRseSwgYnV0IG1vc3Qgb2YgdGhlIHVnbGluZXNzIGR1ZQotICogdG8gdGhlIHRocmVlIGRpZmZlcmVudCBraW5kcyBvZiBvdXRwdXQgYnVmZmVyaW5nIGlzIGhhbmRsZWQgaGVyZS4KLSAqLwotX19MSUJDX0hJRERFTl9fIGludAotX19zZnZ3cml0ZShGSUxFICpmcCwgc3RydWN0IF9fc3VpbyAqdWlvKQotewotCXNpemVfdCBsZW47Ci0JY29uc3QgY2hhciAqcDsKLQlzdHJ1Y3QgX19zaW92ICppb3Y7Ci0JaW50IHcsIHM7Ci0JY2hhciAqbmw7Ci0JaW50IG5sa25vd24sIG5sZGlzdDsKLQotCWlmICgobGVuID0gdWlvLT51aW9fcmVzaWQpID09IDApCi0JCXJldHVybiAoMCk7Ci0JLyogbWFrZSBzdXJlIHdlIGNhbiB3cml0ZSAqLwotCWlmIChjYW50d3JpdGUoZnApKSB7Ci0JCWVycm5vID0gRUJBREY7Ci0JCXJldHVybiAoRU9GKTsKLQl9Ci0KLSNkZWZpbmUJTUlOKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCi0jZGVmaW5lCUNPUFkobikJICAodm9pZCltZW1jcHkoKHZvaWQgKilmcC0+X3AsICh2b2lkICopcCwgKHNpemVfdCkobikpCi0KLQlpb3YgPSB1aW8tPnVpb19pb3Y7Ci0JcCA9IGlvdi0+aW92X2Jhc2U7Ci0JbGVuID0gaW92LT5pb3ZfbGVuOwotCWlvdisrOwotI2RlZmluZSBHRVRJT1YoZXh0cmFfd29yaykgXAotCXdoaWxlIChsZW4gPT0gMCkgeyBcCi0JCWV4dHJhX3dvcms7IFwKLQkJcCA9IGlvdi0+aW92X2Jhc2U7IFwKLQkJbGVuID0gaW92LT5pb3ZfbGVuOyBcCi0JCWlvdisrOyBcCi0JfQotCWlmIChmcC0+X2ZsYWdzICYgX19TTkJGKSB7Ci0JCS8qCi0JCSAqIFVuYnVmZmVyZWQ6IHdyaXRlIHVwIHRvIEJVRlNJWiBieXRlcyBhdCBhIHRpbWUuCi0JCSAqLwotCQlkbyB7Ci0JCQlHRVRJT1YoOyk7Ci0jaWYgMSAgLyogQklPTklDOiBkb24ndCBsaW1pdCB0byAxS0Igd3JpdGVzICovCi0JCQl3ID0gKCpmcC0+X3dyaXRlKShmcC0+X2Nvb2tpZSwgcCwgbGVuKTsKLSNlbHNlCi0JCQl3ID0gKCpmcC0+X3dyaXRlKShmcC0+X2Nvb2tpZSwgcCwgTUlOKGxlbiwgQlVGU0laMikpOwotI2VuZGlmCi0JCQlpZiAodyA8PSAwKQotCQkJCWdvdG8gZXJyOwotCQkJcCArPSB3OwotCQkJbGVuIC09IHc7Ci0JCX0gd2hpbGUgKCh1aW8tPnVpb19yZXNpZCAtPSB3KSAhPSAwKTsKLQl9IGVsc2UgaWYgKChmcC0+X2ZsYWdzICYgX19TTEJGKSA9PSAwKSB7Ci0JCS8qCi0JCSAqIEZ1bGx5IGJ1ZmZlcmVkOiBmaWxsIHBhcnRpYWxseSBmdWxsIGJ1ZmZlciwgaWYgYW55LAotCQkgKiBhbmQgdGhlbiBmbHVzaC4gIElmIHRoZXJlIGlzIG5vIHBhcnRpYWwgYnVmZmVyLCB3cml0ZQotCQkgKiBvbmUgX2JmLl9zaXplIGJ5dGUgY2h1bmsgZGlyZWN0bHkgKHdpdGhvdXQgY29weWluZykuCi0JCSAqCi0JCSAqIFN0cmluZyBvdXRwdXQgaXMgYSBzcGVjaWFsIGNhc2U6IHdyaXRlIGFzIG1hbnkgYnl0ZXMKLQkJICogYXMgZml0LCBidXQgcHJldGVuZCB3ZSB3cm90ZSBldmVyeXRoaW5nLiAgVGhpcyBtYWtlcwotCQkgKiBzbnByaW50ZigpIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCwgcmF0aGVyCi0JCSAqIHRoYW4gdGhlIG51bWJlciB1c2VkLCBhbmQgYXZvaWRzIGl0cyB3cml0ZSBmdW5jdGlvbgotCQkgKiAoc28gdGhhdCB0aGUgd3JpdGUgZnVuY3Rpb24gY2FuIGJlIGludmFsaWQpLgotCQkgKi8KLQkJZG8gewotCQkJR0VUSU9WKDspOwotCQkJaWYgKChmcC0+X2ZsYWdzICYgKF9fU0FMQyB8IF9fU1NUUikpID09Ci0JCQkgICAgKF9fU0FMQyB8IF9fU1NUUikgJiYgZnAtPl93IDwgKGludClsZW4pIHsKLQkJCQlzaXplX3QgYmxlbiA9IGZwLT5fcCAtIGZwLT5fYmYuX2Jhc2U7Ci0JCQkJdW5zaWduZWQgY2hhciAqX2Jhc2U7Ci0JCQkJaW50IF9zaXplOwotCi0JCQkJLyogQWxsb2NhdGUgc3BhY2UgZXhwb25lbnRpYWxseS4gKi8KLQkJCQlfc2l6ZSA9IGZwLT5fYmYuX3NpemU7Ci0JCQkJZG8gewotCQkJCQlfc2l6ZSA9IChfc2l6ZSA8PCAxKSArIDE7Ci0JCQkJfSB3aGlsZSAoX3NpemUgPCAoaW50KShibGVuICsgbGVuKSk7Ci0JCQkJX2Jhc2UgPSByZWFsbG9jKGZwLT5fYmYuX2Jhc2UsIF9zaXplICsgMSk7Ci0JCQkJaWYgKF9iYXNlID09IE5VTEwpCi0JCQkJCWdvdG8gZXJyOwotCQkJCWZwLT5fdyArPSBfc2l6ZSAtIGZwLT5fYmYuX3NpemU7Ci0JCQkJZnAtPl9iZi5fYmFzZSA9IF9iYXNlOwotCQkJCWZwLT5fYmYuX3NpemUgPSBfc2l6ZTsKLQkJCQlmcC0+X3AgPSBfYmFzZSArIGJsZW47Ci0JCQl9Ci0JCQl3ID0gZnAtPl93OwotCQkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NTVFIpIHsKLQkJCQlpZiAoKGludClsZW4gPCB3KQotCQkJCQl3ID0gbGVuOwotCQkJCUNPUFkodyk7CS8qIGNvcHkgTUlOKGZwLT5fdyxsZW4pLCAqLwotCQkJCWZwLT5fdyAtPSB3OwotCQkJCWZwLT5fcCArPSB3OwotCQkJCXcgPSBsZW47CS8qIGJ1dCBwcmV0ZW5kIGNvcGllZCBhbGwgKi8KLQkJCX0gZWxzZSBpZiAoZnAtPl9wID4gZnAtPl9iZi5fYmFzZSAmJiAoaW50KWxlbiA+IHcpIHsKLQkJCQkvKiBmaWxsIGFuZCBmbHVzaCAqLwotCQkJCUNPUFkodyk7Ci0JCQkJLyogZnAtPl93IC09IHc7ICovIC8qIHVubmVlZGVkICovCi0JCQkJZnAtPl9wICs9IHc7Ci0JCQkJaWYgKGZmbHVzaChmcCkpCi0JCQkJCWdvdG8gZXJyOwotCQkJfSBlbHNlIGlmICgoaW50KWxlbiA+PSAodyA9IGZwLT5fYmYuX3NpemUpKSB7Ci0JCQkJLyogd3JpdGUgZGlyZWN0bHkgKi8KLQkJCQl3ID0gKCpmcC0+X3dyaXRlKShmcC0+X2Nvb2tpZSwgcCwgdyk7Ci0JCQkJaWYgKHcgPD0gMCkKLQkJCQkJZ290byBlcnI7Ci0JCQl9IGVsc2UgewotCQkJCS8qIGZpbGwgYW5kIGRvbmUgKi8KLQkJCQl3ID0gbGVuOwotCQkJCUNPUFkodyk7Ci0JCQkJZnAtPl93IC09IHc7Ci0JCQkJZnAtPl9wICs9IHc7Ci0JCQl9Ci0JCQlwICs9IHc7Ci0JCQlsZW4gLT0gdzsKLQkJfSB3aGlsZSAoKHVpby0+dWlvX3Jlc2lkIC09IHcpICE9IDApOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIExpbmUgYnVmZmVyZWQ6IGxpa2UgZnVsbHkgYnVmZmVyZWQsIGJ1dCB3ZQotCQkgKiBtdXN0IGNoZWNrIGZvciBuZXdsaW5lcy4gIENvbXB1dGUgdGhlIGRpc3RhbmNlCi0JCSAqIHRvIHRoZSBmaXJzdCBuZXdsaW5lIChpbmNsdWRpbmcgdGhlIG5ld2xpbmUpLAotCQkgKiBvciBgaW5maW5pdHknIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gcHJldGVuZAotCQkgKiB0aGF0IHRoZSBhbW91bnQgdG8gd3JpdGUgaXMgTUlOKGxlbixubGRpc3QpLgotCQkgKi8KLQkJbmxrbm93biA9IDA7Ci0JCW5sZGlzdCA9IDA7CS8qIFhYWCBqdXN0IHRvIGtlZXAgZ2NjIGhhcHB5ICovCi0JCWRvIHsKLQkJCUdFVElPVihubGtub3duID0gMCk7Ci0JCQlpZiAoIW5sa25vd24pIHsKLQkJCQlubCA9IG1lbWNocigodm9pZCAqKXAsICdcbicsIGxlbik7Ci0JCQkJbmxkaXN0ID0gbmwgPyBubCArIDEgLSBwIDogKGludClsZW4gKyAxOwotCQkJCW5sa25vd24gPSAxOwotCQkJfQotCQkJcyA9IE1JTigoaW50KWxlbiwgbmxkaXN0KTsKLQkJCXcgPSBmcC0+X3cgKyBmcC0+X2JmLl9zaXplOwotCQkJaWYgKGZwLT5fcCA+IGZwLT5fYmYuX2Jhc2UgJiYgcyA+IHcpIHsKLQkJCQlDT1BZKHcpOwotCQkJCS8qIGZwLT5fdyAtPSB3OyAqLwotCQkJCWZwLT5fcCArPSB3OwotCQkJCWlmIChmZmx1c2goZnApKQotCQkJCQlnb3RvIGVycjsKLQkJCX0gZWxzZSBpZiAocyA+PSAodyA9IGZwLT5fYmYuX3NpemUpKSB7Ci0JCQkJdyA9ICgqZnAtPl93cml0ZSkoZnAtPl9jb29raWUsIHAsIHcpOwotCQkJCWlmICh3IDw9IDApCi0JCQkJCWdvdG8gZXJyOwotCQkJfSBlbHNlIHsKLQkJCQl3ID0gczsKLQkJCQlDT1BZKHcpOwotCQkJCWZwLT5fdyAtPSB3OwotCQkJCWZwLT5fcCArPSB3OwotCQkJfQotCQkJaWYgKChubGRpc3QgLT0gdykgPT0gMCkgewotCQkJCS8qIGNvcGllZCB0aGUgbmV3bGluZTogZmx1c2ggYW5kIGZvcmdldCAqLwotCQkJCWlmIChmZmx1c2goZnApKQotCQkJCQlnb3RvIGVycjsKLQkJCQlubGtub3duID0gMDsKLQkJCX0KLQkJCXAgKz0gdzsKLQkJCWxlbiAtPSB3OwotCQl9IHdoaWxlICgodWlvLT51aW9fcmVzaWQgLT0gdykgIT0gMCk7Ci0JfQotCXJldHVybiAoMCk7Ci0KLWVycjoKLQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKLQlyZXR1cm4gKEVPRik7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2Z2d3JpdGUuaCBiL2xpYmMvc3RkaW8vZnZ3cml0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmY2NWRlLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vZnZ3cml0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZ2d3JpdGUuaCx2IDEuNSAyMDAzLzA2LzAyIDIwOjE4OjM3IG1pbGxlcnQgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogSS9PIGRlc2NyaXB0b3JzIGZvciBfX3NmdndyaXRlKCkuCi0gKi8KLXN0cnVjdCBfX3Npb3YgewotCWNvbnN0IHZvaWQJKmlvdl9iYXNlOwotCXNpemVfdAlpb3ZfbGVuOwotfTsKLXN0cnVjdCBfX3N1aW8gewotCXN0cnVjdAlfX3Npb3YgKnVpb19pb3Y7Ci0JaW50CXVpb19pb3ZjbnQ7Ci0JaW50CXVpb19yZXNpZDsKLX07Ci0KLWV4dGVybiBpbnQgX19zZnZ3cml0ZShGSUxFICosIHN0cnVjdCBfX3N1aW8gKik7CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2dldHMuYyBiL2xpYmMvc3RkaW8vZ2V0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2UyZWRkLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vZ2V0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGdldHMuYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLV9fd2Fybl9yZWZlcmVuY2VzKGdldHMsCi0gICAgIndhcm5pbmc6IGdldHMoKSBpcyB2ZXJ5IHVuc2FmZTsgY29uc2lkZXIgdXNpbmcgZmdldHMoKSIpOwotCi1jaGFyICoKLWdldHMoY2hhciAqYnVmKQotewotCWludCBjOwotCWNoYXIgKnM7Ci0KLQlGTE9DS0ZJTEUoc3RkaW4pOwotCWZvciAocyA9IGJ1ZjsgKGMgPSBnZXRjaGFyX3VubG9ja2VkKCkpICE9ICdcbic7KQotCQlpZiAoYyA9PSBFT0YpCi0JCQlpZiAocyA9PSBidWYpIHsKLQkJCQlGVU5MT0NLRklMRShzdGRpbik7Ci0JCQkJcmV0dXJuIChOVUxMKTsKLQkJCX0gZWxzZQotCQkJCWJyZWFrOwotCQllbHNlCi0JCQkqcysrID0gYzsKLQkqcyA9ICdcMCc7Ci0JRlVOTE9DS0ZJTEUoc3RkaW4pOwotCXJldHVybiAoYnVmKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZ2x1ZS5oIGIvbGliYy9zdGRpby9nbHVlLmgKaW5kZXggNzNjZWY2My4uNGVhZDIwYSAxMDA2NDQKLS0tIGEvbGliYy9zdGRpby9nbHVlLmgKKysrIGIvbGliYy9zdGRpby9nbHVlLmgKQEAgLTQyLDQgKzQyLDUgQEAKIAlGSUxFCSppb2JzOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBnbHVlIF9fc2dsdWU7CisvKiBUaGlzIHdhcyByZWZlcmVuY2VkIGJ5IGEgY291cGxlIG9mIGRpZmZlcmVudCBwaWVjZXMgb2YgbWlkZGxld2FyZSBhbmQgdGhlIENyeXN0YXggTkRLLiAqLworX19MSUJDNjRfSElEREVOX18gZXh0ZXJuIHN0cnVjdCBnbHVlIF9fc2dsdWU7CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2xvY2FsLmggYi9saWJjL3N0ZGlvL2xvY2FsLmgKaW5kZXggYTE3NWQ2Zi4uZWI4NDgzMyAxMDA2NDQKLS0tIGEvbGliYy9zdGRpby9sb2NhbC5oCisrKyBiL2xpYmMvc3RkaW8vbG9jYWwuaApAQCAtMzIsMzcgKzMyLDUzIEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSAid2Npby5oIgotI2luY2x1ZGUgImZpbGVleHQuaCIKLQotCiAvKgogICogSW5mb3JtYXRpb24gbG9jYWwgdG8gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBzdGRpbywKICAqIGluIHBhcnRpY3VsYXIsIG1hY3JvcyBhbmQgcHJpdmF0ZSB2YXJpYWJsZXMuCiAgKi8KIAorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSAid2Npby5oIgorI2luY2x1ZGUgImZpbGVleHQuaCIKKworLyoKKyAqIEFuZHJvaWQgPD0gS2l0S2F0IGhhZCBnZXRjL3B1dGMgbWFjcm9zIGluIDxzdGRpby5oPiB0aGF0IHJlZmVycmVkCisgKiB0byBfX3NyZ2V0L19fc3didWYsIHNvIHRob3NlIHN5bWJvbHMgbmVlZCB0byBiZSBwdWJsaWMgZm9yIExQMzIKKyAqIGJ1dCBjYW4gYmUgaGlkZGVuIGZvciBMUDY0LgorICovCitfX0xJQkM2NF9ISURERU5fXyBpbnQgX19zcmdldChGSUxFKik7CitfX0xJQkM2NF9ISURERU5fXyBpbnQgX19zd2J1ZihpbnQsIEZJTEUqKTsKK19fTElCQzY0X0hJRERFTl9fIGludCBfX3NyZWZpbGwoRklMRSopOworCisvKiBUaGlzIHdhcyByZWZlcmVuY2VkIGJ5IHRoZSBhcHBvcnRhYmxlIG1pZGRsZXdhcmUgZm9yIExQMzIuICovCitfX0xJQkM2NF9ISURERU5fXyBpbnQgX19zd3NldHVwKEZJTEUqKTsKKworLyogVGhlc2Ugd2VyZSByZWZlcmVuY2VkIGJ5IGEgY291cGxlIG9mIGRpZmZlcmVudCBwaWVjZXMgb2YgbWlkZGxld2FyZSBhbmQgdGhlIENyeXN0YXggTkRLLiAqLworX19MSUJDNjRfSElEREVOX18gZXh0ZXJuIGludCBfX3NkaWRpbml0OworX19MSUJDNjRfSElEREVOX18gaW50IF9fc2ZsYWdzKGNvbnN0IGNoYXIqLCBpbnQqKTsKK19fTElCQzY0X0hJRERFTl9fIEZJTEUqIF9fc2ZwKHZvaWQpOworX19MSUJDNjRfSElEREVOX18gdm9pZCBfX3Npbml0KHZvaWQpOworX19MSUJDNjRfSElEREVOX18gdm9pZCBfX3NtYWtlYnVmKEZJTEUqKTsKKworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGhpZGRlbikKKwogaW50CV9fc2ZsdXNoKEZJTEUgKik7CiBpbnQJX19zZmx1c2hfbG9ja2VkKEZJTEUgKik7Ci1GSUxFCSpfX3NmcCh2b2lkKTsKLWludAlfX3NyZWZpbGwoRklMRSAqKTsKIGludAlfX3NyZWFkKHZvaWQgKiwgY2hhciAqLCBpbnQpOwogaW50CV9fc3dyaXRlKHZvaWQgKiwgY29uc3QgY2hhciAqLCBpbnQpOwogZnBvc190CV9fc3NlZWsodm9pZCAqLCBmcG9zX3QsIGludCk7CiBpbnQJX19zY2xvc2Uodm9pZCAqKTsKLXZvaWQJX19zaW5pdCh2b2lkKTsKIHZvaWQJX2NsZWFudXAodm9pZCk7Ci12b2lkCV9fc21ha2VidWYoRklMRSAqKTsKIGludAlfX3N3aGF0YnVmKEZJTEUgKiwgc2l6ZV90ICosIGludCAqKTsKIGludAlfZndhbGsoaW50ICgqKShGSUxFICopKTsKLWludAlfX3N3c2V0dXAoRklMRSAqKTsKLWludAlfX3NmbGFncyhjb25zdCBjaGFyICosIGludCAqKTsKK3dpbnRfdCBfX2ZnZXR3Y191bmxvY2soRklMRSAqKTsKK3dpbnRfdAlfX3VuZ2V0d2Mod2ludF90LCBGSUxFICopOwogaW50CV9fdmZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCk7CitpbnQJX19zdmZzY2FuZihGSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsIF9fdmFfbGlzdCk7CitpbnQJX192ZndwcmludGYoRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LCBfX3ZhX2xpc3QpOworaW50CV9fdmZ3c2NhbmYoRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LCBfX3ZhX2xpc3QpOwogCi0vKgotICogRnVuY3Rpb24gdG8gY2xlYW4gdXAgc3RyZWFtcywgY2FsbGVkIGZyb20gYWJvcnQoKSBhbmQgZXhpdCgpLgotICovCi1leHRlcm4gdm9pZCAoKl9fY2xlYW51cCkodm9pZCk7Ci1leHRlcm4gaW50IF9fc2RpZGluaXQ7CitleHRlcm4gdm9pZCBfX2F0ZXhpdF9yZWdpc3Rlcl9jbGVhbnVwKHZvaWQgKCopKHZvaWQpKTsKIAogLyoKICAqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBGSUxFIGNhbm5vdCBiZSB3cml0dGVuIG5vdy4KQEAgLTkxLDcgKzEwNywzMSBAQAogCShmcCktPl9sYi5fYmFzZSA9IE5VTEw7IFwKIH0KIAotI2RlZmluZSBGTE9DS0ZJTEUoZnApICAgZG8geyBpZiAoX19pc3RocmVhZGVkKSBmbG9ja2ZpbGUoZnApOyB9IHdoaWxlICgwKQotI2RlZmluZSBGVU5MT0NLRklMRShmcCkgZG8geyBpZiAoX19pc3RocmVhZGVkKSBmdW5sb2NrZmlsZShmcCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIEZMT0NLRklMRShmcCkgICBmbG9ja2ZpbGUoZnApCisjZGVmaW5lIEZVTkxPQ0tGSUxFKGZwKSBmdW5sb2NrZmlsZShmcCkKIAogI2RlZmluZSBGTE9BVElOR19QT0lOVAorI2RlZmluZSBQUklOVEZfV0lERV9DSEFSCisjZGVmaW5lIFNDQU5GX1dJREVfQ0hBUgorI2RlZmluZSBOT19QUklOVEZfUEVSQ0VOVF9OCisKKy8qIE9wZW5CU0QgZXhwb3NlcyB0aGVzZSBpbiA8c3RkaW8uaD4sIGJ1dCB3ZSBvbmx5IHdhbnQgdGhlbSBleHBvc2VkIHRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gKi8KKyNkZWZpbmUgX19zZmVvZihwKSAgICAgKCgocCktPl9mbGFncyAmIF9fU0VPRikgIT0gMCkKKyNkZWZpbmUgX19zZmVycm9yKHApICAgKCgocCktPl9mbGFncyAmIF9fU0VSUikgIT0gMCkKKyNkZWZpbmUgX19zY2xlYXJlcnIocCkgKCh2b2lkKSgocCktPl9mbGFncyAmPSB+KF9fU0VSUnxfX1NFT0YpKSkKKyNkZWZpbmUgX19zZmlsZW5vKHApICAgKChwKS0+X2ZpbGUpCisjZGVmaW5lIF9fc2dldGMocCkgKC0tKHApLT5fciA8IDAgPyBfX3NyZ2V0KHApIDogKGludCkoKihwKS0+X3ArKykpCitzdGF0aWMgX19pbmxpbmUgaW50IF9fc3B1dGMoaW50IF9jLCBGSUxFKiBfcCkgeworICBpZiAoLS1fcC0+X3cgPj0gMCB8fCAoX3AtPl93ID49IF9wLT5fbGJmc2l6ZSAmJiAoY2hhcilfYyAhPSAnXG4nKSkgeworICAgIHJldHVybiAoKl9wLT5fcCsrID0gX2MpOworICB9IGVsc2UgeworICAgIHJldHVybiAoX19zd2J1ZihfYywgX3ApKTsKKyAgfQorfQorCisvKiBPcGVuQlNEIGRlY2xhcmVzIHRoZXNlIGluIGZ2d3JpdGUuaCBidXQgd2Ugd2FudCB0byBlbnN1cmUgdGhleSdyZSBoaWRkZW4uICovCitzdHJ1Y3QgX19zdWlvOworZXh0ZXJuIGludCBfX3NmdndyaXRlKEZJTEUgKiwgc3RydWN0IF9fc3VpbyAqKTsKK3dpbnRfdCBfX2ZwdXR3Y191bmxvY2sod2NoYXJfdCB3YywgRklMRSAqZnApOworCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcApkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9wcmludGYuYyBiL2xpYmMvc3RkaW8vcHJpbnRmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNGI0MzUuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9wcmludGYuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBwcmludGYuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotCi1pbnQKLXByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlpbnQgcmV0OwotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQlyZXQgPSB2ZnByaW50ZihzdGRvdXQsIGZtdCwgYXApOwotCXZhX2VuZChhcCk7Ci0JcmV0dXJuIChyZXQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9yZWZpbGwuYyBiL2xpYmMvc3RkaW8vcmVmaWxsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjYjZiNzguLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9yZWZpbGwuYworKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKgkkT3BlbkJTRDogcmVmaWxsLmMsdiAxLjggMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLXN0YXRpYyBpbnQKLWxmbHVzaChGSUxFICpmcCkKLXsKLQlpZiAoKGZwLT5fZmxhZ3MgJiAoX19TTEJGfF9fU1dSKSkgPT0gKF9fU0xCRnxfX1NXUikpCi0JCXJldHVybiAoX19zZmx1c2hfbG9ja2VkKGZwKSk7IC8qIGlnbm9yZWQuLi4gKi8KLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogUmVmaWxsIGEgc3RkaW8gYnVmZmVyLgotICogUmV0dXJuIEVPRiBvbiBlb2Ygb3IgZXJyb3IsIDAgb3RoZXJ3aXNlLgotICovCi1pbnQKLV9fc3JlZmlsbChGSUxFICpmcCkKLXsKLQotCS8qIG1ha2Ugc3VyZSBzdGRpbyBpcyBzZXQgdXAgKi8KLQlpZiAoIV9fc2RpZGluaXQpCi0JCV9fc2luaXQoKTsKLQotCWZwLT5fciA9IDA7CQkvKiBsYXJnZWx5IGEgY29udmVuaWVuY2UgZm9yIGNhbGxlcnMgKi8KLQotCS8qIFN5c1YgZG9lcyBub3QgbWFrZSB0aGlzIHRlc3Q7IHRha2UgaXQgb3V0IGZvciBjb21wYXRpYmlsaXR5ICovCi0JaWYgKGZwLT5fZmxhZ3MgJiBfX1NFT0YpCi0JCXJldHVybiAoRU9GKTsKLQotCS8qIGlmIG5vdCBhbHJlYWR5IHJlYWRpbmcsIGhhdmUgdG8gYmUgcmVhZGluZyBhbmQgd3JpdGluZyAqLwotCWlmICgoZnAtPl9mbGFncyAmIF9fU1JEKSA9PSAwKSB7Ci0JCWlmICgoZnAtPl9mbGFncyAmIF9fU1JXKSA9PSAwKSB7Ci0JCQllcnJubyA9IEVCQURGOwotCQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7Ci0JCQlyZXR1cm4gKEVPRik7Ci0JCX0KLQkJLyogc3dpdGNoIHRvIHJlYWRpbmcgKi8KLQkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NXUikgewotCQkJaWYgKF9fc2ZsdXNoKGZwKSkKLQkJCQlyZXR1cm4gKEVPRik7Ci0JCQlmcC0+X2ZsYWdzICY9IH5fX1NXUjsKLQkJCWZwLT5fdyA9IDA7Ci0JCQlmcC0+X2xiZnNpemUgPSAwOwotCQl9Ci0JCWZwLT5fZmxhZ3MgfD0gX19TUkQ7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogV2Ugd2VyZSByZWFkaW5nLiAgSWYgdGhlcmUgaXMgYW4gdW5nZXRjIGJ1ZmZlciwKLQkJICogd2UgbXVzdCBoYXZlIGJlZW4gcmVhZGluZyBmcm9tIHRoYXQuICBEcm9wIGl0LAotCQkgKiByZXN0b3JpbmcgdGhlIHByZXZpb3VzIGJ1ZmZlciAoaWYgYW55KS4gIElmIHRoZXJlCi0JCSAqIGlzIGFueXRoaW5nIGluIHRoYXQgYnVmZmVyLCByZXR1cm4uCi0JCSAqLwotCQlpZiAoSEFTVUIoZnApKSB7Ci0JCQlGUkVFVUIoZnApOwotCQkJaWYgKChmcC0+X3IgPSBmcC0+X3VyKSAhPSAwKSB7Ci0JCQkJZnAtPl9wID0gZnAtPl91cDsKLQkJCQlyZXR1cm4gKDApOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKGZwLT5fYmYuX2Jhc2UgPT0gTlVMTCkKLQkJX19zbWFrZWJ1ZihmcCk7Ci0KLQkvKgotCSAqIEJlZm9yZSByZWFkaW5nIGZyb20gYSBsaW5lIGJ1ZmZlcmVkIG9yIHVuYnVmZmVyZWQgZmlsZSwKLQkgKiBmbHVzaCBhbGwgbGluZSBidWZmZXJlZCBvdXRwdXQgZmlsZXMsIHBlciB0aGUgQU5TSSBDCi0JICogc3RhbmRhcmQuCi0JICovCi0JaWYgKGZwLT5fZmxhZ3MgJiAoX19TTEJGfF9fU05CRikpIHsKLQkJLyogSWdub3JlIHRoaXMgZmlsZSBpbiBfZndhbGsgdG8gYXZvaWQgcG90ZW50aWFsIGRlYWRsb2NrLiAqLwotCQlmcC0+X2ZsYWdzIHw9IF9fU0lHTjsKLQkJKHZvaWQpIF9md2FsayhsZmx1c2gpOwotCQlmcC0+X2ZsYWdzICY9IH5fX1NJR047Ci0KLQkJLyogTm93IGZsdXNoIHRoaXMgZmlsZSB3aXRob3V0IGxvY2tpbmcgaXQuICovCi0JCWlmICgoZnAtPl9mbGFncyAmIChfX1NMQkZ8X19TV1IpKSA9PSAoX19TTEJGfF9fU1dSKSkKLQkJICAgIF9fc2ZsdXNoKGZwKTsKLQl9Ci0JZnAtPl9wID0gZnAtPl9iZi5fYmFzZTsKLQlmcC0+X3IgPSAoKmZwLT5fcmVhZCkoZnAtPl9jb29raWUsIChjaGFyICopZnAtPl9wLCBmcC0+X2JmLl9zaXplKTsKLQlmcC0+X2ZsYWdzICY9IH5fX1NNT0Q7CS8qIGJ1ZmZlciBjb250ZW50cyBhcmUgYWdhaW4gcHJpc3RpbmUgKi8KLQlpZiAoZnAtPl9yIDw9IDApIHsKLQkJaWYgKGZwLT5fciA9PSAwKQotCQkJZnAtPl9mbGFncyB8PSBfX1NFT0Y7Ci0JCWVsc2UgewotCQkJZnAtPl9yID0gMDsKLQkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOwotCQl9Ci0JCXJldHVybiAoRU9GKTsKLQl9Ci0JcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vc2NhbmYuYyBiL2xpYmMvc3RkaW8vc2NhbmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzExOTRkMC4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL3NjYW5mLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgkkT3BlbkJTRDogc2NhbmYuYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotCi1pbnQKLXNjYW5mKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCWludCByZXQ7Ci0JdmFfbGlzdCBhcDsKLQotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCXJldCA9IHZmc2NhbmYoc3RkaW4sIGZtdCwgYXApOwotCXZhX2VuZChhcCk7Ci0JcmV0dXJuIChyZXQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9zc2NhbmYuYyBiL2xpYmMvc3RkaW8vc3NjYW5mLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYmRmMWMuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9zc2NhbmYuYworKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBzc2NhbmYuYyx2IDEuMTIgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi0vKiBBUkdTVVNFRCAqLwotc3RhdGljIGludAotZW9mcmVhZCh2b2lkICpjb29raWUsIGNoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLQotCXJldHVybiAoMCk7Ci19Ci0KLWludAotc3NjYW5mKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JaW50IHJldDsKLQl2YV9saXN0IGFwOwotCUZJTEUgZjsKLQlzdHJ1Y3QgX19zZmlsZWV4dCBmZXh0OwotCi0JX0ZJTEVFWFRfU0VUVVAoJmYsICZmZXh0KTsKLQlmLl9mbGFncyA9IF9fU1JEOwotCWYuX2JmLl9iYXNlID0gZi5fcCA9ICh1bnNpZ25lZCBjaGFyICopc3RyOwotCWYuX2JmLl9zaXplID0gZi5fciA9IHN0cmxlbihzdHIpOwotCWYuX3JlYWQgPSBlb2ZyZWFkOwotCWYuX2xiLl9iYXNlID0gTlVMTDsKLQl2YV9zdGFydChhcCwgZm10KTsKLQlyZXQgPSB2ZnNjYW5mKCZmLCBmbXQsIGFwKTsKLQl2YV9lbmQoYXApOwotCXJldHVybiAocmV0KTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vc3RkaW8uYyBiL2xpYmMvc3RkaW8vc3RkaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU5NmViZi4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL3N0ZGlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgkkT3BlbkJTRDogc3RkaW8uYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLQotLyoKLSAqIFNtYWxsIHN0YW5kYXJkIEkvTy9zZWVrL2Nsb3NlIGZ1bmN0aW9ucy4KLSAqIFRoZXNlIG1haW50YWluIHRoZSBga25vd24gc2VlayBvZmZzZXQnIGZvciBzZWVrIG9wdGltaXNhdGlvbi4KLSAqLwotaW50Ci1fX3NyZWFkKHZvaWQgKmNvb2tpZSwgY2hhciAqYnVmLCBpbnQgbikKLXsKLQlGSUxFICpmcCA9IGNvb2tpZTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVhZChmcC0+X2ZpbGUsIGJ1Ziwgbik7Ci0JLyogaWYgdGhlIHJlYWQgc3VjY2VlZGVkLCB1cGRhdGUgdGhlIGN1cnJlbnQgb2Zmc2V0ICovCi0JaWYgKHJldCA+PSAwKQotCQlmcC0+X29mZnNldCArPSByZXQ7Ci0JZWxzZQotCQlmcC0+X2ZsYWdzICY9IH5fX1NPRkY7CS8qIHBhcmFub2lhICovCi0JcmV0dXJuIChyZXQpOwotfQotCi1pbnQKLV9fc3dyaXRlKHZvaWQgKmNvb2tpZSwgY29uc3QgY2hhciAqYnVmLCBpbnQgbikKLXsKLQlGSUxFICpmcCA9IGNvb2tpZTsKLQotCWlmIChmcC0+X2ZsYWdzICYgX19TQVBQKQotCQkodm9pZCkgbHNlZWsoZnAtPl9maWxlLCAob2ZmX3QpMCwgU0VFS19FTkQpOwotCWZwLT5fZmxhZ3MgJj0gfl9fU09GRjsJLyogaW4gY2FzZSBGQVBQRU5EIG1vZGUgaXMgc2V0ICovCi0JcmV0dXJuICh3cml0ZShmcC0+X2ZpbGUsIGJ1ZiwgbikpOwotfQotCi1mcG9zX3QKLV9fc3NlZWsodm9pZCAqY29va2llLCBmcG9zX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQotewotCUZJTEUgKmZwID0gY29va2llOwotCW9mZl90IHJldDsKLQotCXJldCA9IGxzZWVrKGZwLT5fZmlsZSwgKG9mZl90KW9mZnNldCwgd2hlbmNlKTsKLQlpZiAocmV0ID09IChvZmZfdCktMSkKLQkJZnAtPl9mbGFncyAmPSB+X19TT0ZGOwotCWVsc2UgewotCQlmcC0+X2ZsYWdzIHw9IF9fU09GRjsKLQkJZnAtPl9vZmZzZXQgPSByZXQ7Ci0JfQotCXJldHVybiAocmV0KTsKLX0KLQotaW50Ci1fX3NjbG9zZSh2b2lkICpjb29raWUpCi17Ci0JcmV0dXJuIChjbG9zZSgoKEZJTEUgKiljb29raWUpLT5fZmlsZSkpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby91bmdldGMuYyBiL2xpYmMvc3RkaW8vdW5nZXRjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0OTNkMjEuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby91bmdldGMuYworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKgkkT3BlbkJTRDogdW5nZXRjLmMsdiAxLjkgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi1zdGF0aWMgaW50IF9fc3VibW9yZShGSUxFICopOwotLyoKLSAqIEV4cGFuZCB0aGUgdW5nZXRjIGJ1ZmZlciBgaW4gcGxhY2UnLiAgVGhhdCBpcywgYWRqdXN0IGZwLT5fcCB3aGVuCi0gKiB0aGUgYnVmZmVyIG1vdmVzLCBzbyB0aGF0IGl0IHBvaW50cyB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoZSBlbmQsCi0gKiBhbmQgbW92ZSB0aGUgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBhcm91bmQgYXMgbmVjZXNzYXJ5IHNvIHRoYXQgdGhleQotICogYXJlIGFsbCBhdCB0aGUgZW5kIChzdGFjay1zdHlsZSkuCi0gKi8KLXN0YXRpYyBpbnQKLV9fc3VibW9yZShGSUxFICpmcCkKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBjaGFyICpwOwotCi0JaWYgKF9VQihmcCkuX2Jhc2UgPT0gZnAtPl91YnVmKSB7Ci0JCS8qCi0JCSAqIEdldCBhIG5ldyBidWZmZXIgKHJhdGhlciB0aGFuIGV4cGFuZGluZyB0aGUgb2xkIG9uZSkuCi0JCSAqLwotCQlpZiAoKHAgPSBtYWxsb2MoKHNpemVfdClCVUZTSVopKSA9PSBOVUxMKQotCQkJcmV0dXJuIChFT0YpOwotCQlfVUIoZnApLl9iYXNlID0gcDsKLQkJX1VCKGZwKS5fc2l6ZSA9IEJVRlNJWjsKLQkJcCArPSBCVUZTSVogLSBzaXplb2YoZnAtPl91YnVmKTsKLQkJZm9yIChpID0gc2l6ZW9mKGZwLT5fdWJ1Zik7IC0taSA+PSAwOykKLQkJCXBbaV0gPSBmcC0+X3VidWZbaV07Ci0JCWZwLT5fcCA9IHA7Ci0JCXJldHVybiAoMCk7Ci0JfQotCWkgPSBfVUIoZnApLl9zaXplOwotCXAgPSByZWFsbG9jKF9VQihmcCkuX2Jhc2UsIGkgPDwgMSk7Ci0JaWYgKHAgPT0gTlVMTCkKLQkJcmV0dXJuIChFT0YpOwotCS8qIG5vIG92ZXJsYXAgKGhlbmNlIGNhbiB1c2UgbWVtY3B5KSBiZWNhdXNlIHdlIGRvdWJsZWQgdGhlIHNpemUgKi8KLQkodm9pZCltZW1jcHkoKHZvaWQgKikocCArIGkpLCAodm9pZCAqKXAsIChzaXplX3QpaSk7Ci0JZnAtPl9wID0gcCArIGk7Ci0JX1VCKGZwKS5fYmFzZSA9IHA7Ci0JX1VCKGZwKS5fc2l6ZSA9IGkgPDwgMTsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLXVuZ2V0YyhpbnQgYywgRklMRSAqZnApCi17Ci0JaWYgKGMgPT0gRU9GKQotCQlyZXR1cm4gKEVPRik7Ci0JaWYgKCFfX3NkaWRpbml0KQotCQlfX3Npbml0KCk7Ci0JRkxPQ0tGSUxFKGZwKTsKLQlfU0VUX09SSUVOVEFUSU9OKGZwLCAtMSk7Ci0JaWYgKChmcC0+X2ZsYWdzICYgX19TUkQpID09IDApIHsKLQkJLyoKLQkJICogTm90IGFscmVhZHkgcmVhZGluZzogbm8gZ29vZCB1bmxlc3MgcmVhZGluZy1hbmQtd3JpdGluZy4KLQkJICogT3RoZXJ3aXNlLCBmbHVzaCBhbnkgY3VycmVudCB3cml0ZSBzdHVmZi4KLQkJICovCi0JCWlmICgoZnAtPl9mbGFncyAmIF9fU1JXKSA9PSAwKSB7Ci1lcnJvcjoJCQlGVU5MT0NLRklMRShmcCk7Ci0JCQlyZXR1cm4gKEVPRik7Ci0JCX0KLQkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NXUikgewotCQkJaWYgKF9fc2ZsdXNoKGZwKSkKLQkJCQlnb3RvIGVycm9yOwotCQkJZnAtPl9mbGFncyAmPSB+X19TV1I7Ci0JCQlmcC0+X3cgPSAwOwotCQkJZnAtPl9sYmZzaXplID0gMDsKLQkJfQotCQlmcC0+X2ZsYWdzIHw9IF9fU1JEOwotCX0KLQljID0gKHVuc2lnbmVkIGNoYXIpYzsKLQotCS8qCi0JICogSWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgdW5nZXRjJ2luZywganVzdCBjb250aW51ZS4KLQkgKiBUaGlzIG1heSByZXF1aXJlIGV4cGFuZGluZyB0aGUgY3VycmVudCB1bmdldGMgYnVmZmVyLgotCSAqLwotCWlmIChIQVNVQihmcCkpIHsKLQkJaWYgKGZwLT5fciA+PSBfVUIoZnApLl9zaXplICYmIF9fc3VibW9yZShmcCkpCi0JCQlnb3RvIGVycm9yOwotCQkqLS1mcC0+X3AgPSBjOwotaW5jX3JldDoJZnAtPl9yKys7Ci0JCUZVTkxPQ0tGSUxFKGZwKTsKLQkJcmV0dXJuIChjKTsKLQl9Ci0JZnAtPl9mbGFncyAmPSB+X19TRU9GOwotCi0JLyoKLQkgKiBJZiB3ZSBjYW4gaGFuZGxlIHRoaXMgYnkgc2ltcGx5IGJhY2tpbmcgdXAsIGRvIHNvLAotCSAqIGJ1dCBuZXZlciByZXBsYWNlIHRoZSBvcmlnaW5hbCBjaGFyYWN0ZXIuCi0JICogKFRoaXMgbWFrZXMgc3NjYW5mKCkgd29yayB3aGVuIHNjYW5uaW5nIGBjb25zdCcgZGF0YS4pCi0JICovCi0JaWYgKGZwLT5fYmYuX2Jhc2UgIT0gTlVMTCAmJiBmcC0+X3AgPiBmcC0+X2JmLl9iYXNlICYmCi0JICAgIGZwLT5fcFstMV0gPT0gYykgewotCQlmcC0+X3AtLTsKLQkJZ290byBpbmNfcmV0OwotCX0KLQotCS8qCi0JICogQ3JlYXRlIGFuIHVuZ2V0YyBidWZmZXIuCi0JICogSW5pdGlhbGx5LCB3ZSB3aWxsIHVzZSB0aGUgYHJlc2VydmUnIGJ1ZmZlci4KLQkgKi8KLQlmcC0+X3VyID0gZnAtPl9yOwotCWZwLT5fdXAgPSBmcC0+X3A7Ci0JX1VCKGZwKS5fYmFzZSA9IGZwLT5fdWJ1ZjsKLQlfVUIoZnApLl9zaXplID0gc2l6ZW9mKGZwLT5fdWJ1Zik7Ci0JZnAtPl91YnVmW3NpemVvZihmcC0+X3VidWYpIC0gMV0gPSBjOwotCWZwLT5fcCA9ICZmcC0+X3VidWZbc2l6ZW9mKGZwLT5fdWJ1ZikgLSAxXTsKLQlmcC0+X3IgPSAxOwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKGMpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby92YXNwcmludGYuYyBiL2xpYmMvc3RkaW8vdmFzcHJpbnRmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MzBjY2IuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby92YXNwcmludGYuYworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCSRPcGVuQlNEOiB2YXNwcmludGYuYyx2IDEuMTMgMjAwNi8wMS8wNiAxODo1MzowNCBtaWxsZXJ0IEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTcgVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+Ci0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi1pbnQKLXZhc3ByaW50ZihjaGFyICoqc3RyLCBjb25zdCBjaGFyICpmbXQsIF9fdmFfbGlzdCBhcCkKLXsKLQlpbnQgcmV0OwotCUZJTEUgZjsKLQlzdHJ1Y3QgX19zZmlsZWV4dCBmZXh0OwotCXVuc2lnbmVkIGNoYXIgKl9iYXNlOwotCi0JX0ZJTEVFWFRfU0VUVVAoJmYsICZmZXh0KTsKLQlmLl9maWxlID0gLTE7Ci0JZi5fZmxhZ3MgPSBfX1NXUiB8IF9fU1NUUiB8IF9fU0FMQzsKLQlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYygxMjgpOwotCWlmIChmLl9iZi5fYmFzZSA9PSBOVUxMKQotCQlnb3RvIGVycjsKLQlmLl9iZi5fc2l6ZSA9IGYuX3cgPSAxMjc7CQkvKiBMZWF2ZSByb29tIGZvciB0aGUgTlVMICovCi0JcmV0ID0gX192ZnByaW50ZigmZiwgZm10LCBhcCk7Ci0JaWYgKHJldCA9PSAtMSkKLQkJZ290byBlcnI7Ci0JKmYuX3AgPSAnXDAnOwotCV9iYXNlID0gcmVhbGxvYyhmLl9iZi5fYmFzZSwgcmV0ICsgMSk7Ci0JaWYgKF9iYXNlID09IE5VTEwpCi0JCWdvdG8gZXJyOwotCSpzdHIgPSAoY2hhciAqKV9iYXNlOwotCXJldHVybiAocmV0KTsKLQotZXJyOgotCWZyZWUoZi5fYmYuX2Jhc2UpOwotCSpzdHIgPSBOVUxMOwotCWVycm5vID0gRU5PTUVNOwotCXJldHVybiAoLTEpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby92ZnByaW50Zi5jIGIvbGliYy9zdGRpby92ZnByaW50Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTAxMTQ1Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vdmZwcmludGYuYworKysgL2Rldi9udWxsCkBAIC0xLDEzMjkgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHZmcHJpbnRmLmMsdiAxLjM3IDIwMDYvMDEvMTMgMTc6NTY6MTggbWlsbGVydCBFeHAgJAkqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBBY3R1YWwgcHJpbnRmIGlubmFyZHMuCi0gKgotICogVGhpcyBjb2RlIGlzIGxhcmdlIGFuZCBjb21wbGljYXRlZC4uLgotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAibG9jYWwuaCIKLSNpbmNsdWRlICJmdndyaXRlLmgiCi0KLXN0YXRpYyB2b2lkIF9fZmluZF9hcmd1bWVudHMoY29uc3QgY2hhciAqZm10MCwgdmFfbGlzdCBhcCwgdmFfbGlzdCAqKmFyZ3RhYmxlLAotICAgIHNpemVfdCAqYXJndGFibGVzaXopOwotc3RhdGljIGludCBfX2dyb3dfdHlwZV90YWJsZSh1bnNpZ25lZCBjaGFyICoqdHlwZXRhYmxlLCBpbnQgKnRhYmxlc2l6ZSk7Ci0KLS8qCi0gKiBGbHVzaCBvdXQgYWxsIHRoZSB2ZWN0b3JzIGRlZmluZWQgYnkgdGhlIGdpdmVuIHVpbywKLSAqIHRoZW4gcmVzZXQgaXQgc28gdGhhdCBpdCBjYW4gYmUgcmV1c2VkLgotICovCi1zdGF0aWMgaW50Ci1fX3NwcmludChGSUxFICpmcCwgc3RydWN0IF9fc3VpbyAqdWlvKQotewotCWludCBlcnI7Ci0KLQlpZiAodWlvLT51aW9fcmVzaWQgPT0gMCkgewotCQl1aW8tPnVpb19pb3ZjbnQgPSAwOwotCQlyZXR1cm4gKDApOwotCX0KLQllcnIgPSBfX3NmdndyaXRlKGZwLCB1aW8pOwotCXVpby0+dWlvX3Jlc2lkID0gMDsKLQl1aW8tPnVpb19pb3ZjbnQgPSAwOwotCXJldHVybiAoZXJyKTsKLX0KLQotLyoKLSAqIEhlbHBlciBmdW5jdGlvbiBmb3IgYGZwcmludGYgdG8gdW5idWZmZXJlZCB1bml4IGZpbGUnOiBjcmVhdGVzIGEKLSAqIHRlbXBvcmFyeSBidWZmZXIuICBXZSBvbmx5IHdvcmsgb24gd3JpdGUtb25seSBmaWxlczsgdGhpcyBhdm9pZHMKLSAqIHdvcnJpZXMgYWJvdXQgdW5nZXRjIGJ1ZmZlcnMgYW5kIHNvIGZvcnRoLgotICovCi1zdGF0aWMgaW50Ci1fX3NicHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCi17Ci0JaW50IHJldDsKLQlGSUxFIGZha2U7Ci0Jc3RydWN0IF9fc2ZpbGVleHQgZmFrZWV4dDsKLQl1bnNpZ25lZCBjaGFyIGJ1ZltCVUZTSVpdOwotCi0JX0ZJTEVFWFRfU0VUVVAoJmZha2UsICZmYWtlZXh0KTsKLQkvKiBjb3B5IHRoZSBpbXBvcnRhbnQgdmFyaWFibGVzICovCi0JZmFrZS5fZmxhZ3MgPSBmcC0+X2ZsYWdzICYgfl9fU05CRjsKLQlmYWtlLl9maWxlID0gZnAtPl9maWxlOwotCWZha2UuX2Nvb2tpZSA9IGZwLT5fY29va2llOwotCWZha2UuX3dyaXRlID0gZnAtPl93cml0ZTsKLQotCS8qIHNldCB1cCB0aGUgYnVmZmVyICovCi0JZmFrZS5fYmYuX2Jhc2UgPSBmYWtlLl9wID0gYnVmOwotCWZha2UuX2JmLl9zaXplID0gZmFrZS5fdyA9IHNpemVvZihidWYpOwotCWZha2UuX2xiZnNpemUgPSAwOwkvKiBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IEp1c3QgSW4gQ2FzZSAqLwotCi0JLyogZG8gdGhlIHdvcmssIHRoZW4gY29weSBhbnkgZXJyb3Igc3RhdHVzICovCi0JcmV0ID0gX192ZnByaW50ZigmZmFrZSwgZm10LCBhcCk7Ci0JaWYgKHJldCA+PSAwICYmIF9fc2ZsdXNoKCZmYWtlKSkKLQkJcmV0ID0gRU9GOwotCWlmIChmYWtlLl9mbGFncyAmIF9fU0VSUikKLQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7Ci0JcmV0dXJuIChyZXQpOwotfQotCi0KLSNpZmRlZiBGTE9BVElOR19QT0lOVAotI2luY2x1ZGUgPGxvY2FsZS5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlICJmbG9hdGlvLmgiCi0KLSNkZWZpbmUJQlVGCQkoTUFYRVhQK01BWEZSQUNUKzEpCS8qICsgZGVjaW1hbCBwb2ludCAqLwotI2RlZmluZQlERUZQUkVDCQk2Ci0KLXN0YXRpYyBjaGFyICpjdnQoZG91YmxlLCBpbnQsIGludCwgY2hhciAqLCBpbnQgKiwgaW50LCBpbnQgKik7Ci1zdGF0aWMgaW50IGV4cG9uZW50KGNoYXIgKiwgaW50LCBpbnQpOwotI2Vsc2UgLyogbm8gRkxPQVRJTkdfUE9JTlQgKi8KLSNkZWZpbmUJQlVGCQk0MAotI2VuZGlmIC8qIEZMT0FUSU5HX1BPSU5UICovCi0KLSNkZWZpbmUgU1RBVElDX0FSR19UQkxfU0laRSA4CS8qIFNpemUgb2Ygc3RhdGljIGFyZ3VtZW50IHRhYmxlLiAqLwotCi0vKiBCSU9OSUM6IGRvIG5vdCBsaW5rIGxpYm0gZm9yIG9ubHkgdHdvIHJhdGhlciBzaW1wbGUgZnVuY3Rpb25zICovCi0jaWZkZWYgRkxPQVRJTkdfUE9JTlQKLXN0YXRpYyAgaW50ICBfbXlfaXNpbmYoZG91YmxlKTsKLXN0YXRpYyAgaW50ICBfbXlfaXNuYW4oZG91YmxlKTsKLSNlbmRpZgotCi0vKgotICogTWFjcm9zIGZvciBjb252ZXJ0aW5nIGRpZ2l0cyB0byBsZXR0ZXJzIGFuZCB2aWNlIHZlcnNhCi0gKi8KLSNkZWZpbmUJdG9fZGlnaXQoYykJKChjKSAtICcwJykKLSNkZWZpbmUgaXNfZGlnaXQoYykJKCh1bnNpZ25lZCl0b19kaWdpdChjKSA8PSA5KQotI2RlZmluZQl0b19jaGFyKG4pCSgobikgKyAnMCcpCi0KLS8qCi0gKiBGbGFncyB1c2VkIGR1cmluZyBjb252ZXJzaW9uLgotICovCi0jZGVmaW5lCUFMVAkJMHgwMDAxCQkvKiBhbHRlcm5hdGUgZm9ybSAqLwotI2RlZmluZQlIRVhQUkVGSVgJMHgwMDAyCQkvKiBhZGQgMHggb3IgMFggcHJlZml4ICovCi0jZGVmaW5lCUxBREpVU1QJCTB4MDAwNAkJLyogbGVmdCBhZGp1c3RtZW50ICovCi0jZGVmaW5lCUxPTkdEQkwJCTB4MDAwOAkJLyogbG9uZyBkb3VibGU7IHVuaW1wbGVtZW50ZWQgKi8KLSNkZWZpbmUJTE9OR0lOVAkJMHgwMDEwCQkvKiBsb25nIGludGVnZXIgKi8KLSNkZWZpbmUJTExPTkdJTlQJMHgwMDIwCQkvKiBsb25nIGxvbmcgaW50ZWdlciAqLwotI2RlZmluZQlTSE9SVElOVAkweDAwNDAJCS8qIHNob3J0IGludGVnZXIgKi8KLSNkZWZpbmUJWkVST1BBRAkJMHgwMDgwCQkvKiB6ZXJvIChhcyBvcHBvc2VkIHRvIGJsYW5rKSBwYWQgKi8KLSNkZWZpbmUgRlBUCQkweDAxMDAJCS8qIEZsb2F0aW5nIHBvaW50IG51bWJlciAqLwotI2RlZmluZSBQVFJJTlQJCTB4MDIwMAkJLyogKHVuc2lnbmVkKSBwdHJkaWZmX3QgKi8KLSNkZWZpbmUgU0laRUlOVAkJMHgwNDAwCQkvKiAoc2lnbmVkKSBzaXplX3QgKi8KLSNkZWZpbmUgQ0hBUklOVAkJMHgwODAwCQkvKiA4IGJpdCBpbnRlZ2VyICovCi0jZGVmaW5lIE1BWElOVAkJMHgxMDAwCQkvKiBsYXJnZXN0IGludGVnZXIgc2l6ZSAoaW50bWF4X3QpICovCi0KLWludAotdmZwcmludGYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdDAsIF9fdmFfbGlzdCBhcCkKLXsKLQlpbnQgcmV0OwotCi0JRkxPQ0tGSUxFKGZwKTsKLQlyZXQgPSBfX3ZmcHJpbnRmKGZwLCBmbXQwLCBhcCk7Ci0JRlVOTE9DS0ZJTEUoZnApOwotCXJldHVybiAocmV0KTsKLX0KLQotaW50Ci1fX3ZmcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQwLCBfX3ZhX2xpc3QgYXApCi17Ci0JY2hhciAqZm10OwkvKiBmb3JtYXQgc3RyaW5nICovCi0JaW50IGNoOwkvKiBjaGFyYWN0ZXIgZnJvbSBmbXQgKi8KLQlpbnQgbiwgbSwgbjI7CS8qIGhhbmR5IGludGVnZXJzIChzaG9ydCB0ZXJtIHVzYWdlKSAqLwotCWNoYXIgKmNwOwkvKiBoYW5keSBjaGFyIHBvaW50ZXIgKHNob3J0IHRlcm0gdXNhZ2UpICovCi0JY2hhciAqY3BfZnJlZSA9IE5VTEw7ICAvKiBCSU9OSUM6IGNvcHkgb2YgY3AgdG8gYmUgZnJlZWQgYWZ0ZXIgdXNhZ2UgKi8KLQlzdHJ1Y3QgX19zaW92ICppb3ZwOy8qIGZvciBQUklOVCBtYWNybyAqLwotCWludCBmbGFnczsJLyogZmxhZ3MgYXMgYWJvdmUgKi8KLQlpbnQgcmV0OwkJLyogcmV0dXJuIHZhbHVlIGFjY3VtdWxhdG9yICovCi0JaW50IHdpZHRoOwkJLyogd2lkdGggZnJvbSBmb3JtYXQgKCU4ZCksIG9yIDAgKi8KLQlpbnQgcHJlYzsJCS8qIHByZWNpc2lvbiBmcm9tIGZvcm1hdCAoJS4zZCksIG9yIC0xICovCi0JY2hhciBzaWduOwkJLyogc2lnbiBwcmVmaXggKCcgJywgJysnLCAnLScsIG9yIFwwKSAqLwotCXdjaGFyX3Qgd2M7Ci0Jdm9pZCogcHM7Ci0jaWZkZWYgRkxPQVRJTkdfUE9JTlQKLQljaGFyICpkZWNpbWFsX3BvaW50ID0gIi4iOwotCWNoYXIgc29mdHNpZ247CQkvKiB0ZW1wb3JhcnkgbmVnYXRpdmUgc2lnbiBmb3IgZmxvYXRzICovCi0JZG91YmxlIF9kb3VibGUgPSAwLjsJLyogZG91YmxlIHByZWNpc2lvbiBhcmd1bWVudHMgJVtlRWZnR10gKi8KLQlpbnQgZXhwdDsJCS8qIGludGVnZXIgdmFsdWUgb2YgZXhwb25lbnQgKi8KLQlpbnQgZXhwc2l6ZSA9IDA7CS8qIGNoYXJhY3RlciBjb3VudCBmb3IgZXhwc3RyICovCi0JaW50IG5kaWc7CQkvKiBhY3R1YWwgbnVtYmVyIG9mIGRpZ2l0cyByZXR1cm5lZCBieSBjdnQgKi8KLQljaGFyIGV4cHN0cls3XTsJCS8qIGJ1ZmZlciBmb3IgZXhwb25lbnQgc3RyaW5nICovCi0jZW5kaWYKLQotCXVpbnRtYXhfdCBfdW1heDsJLyogaW50ZWdlciBhcmd1bWVudHMgJVtkaW91eFhdICovCi0JZW51bSB7IE9DVCwgREVDLCBIRVggfSBiYXNlOy8qIGJhc2UgZm9yIFtkaW91eFhdIGNvbnZlcnNpb24gKi8KLQlpbnQgZHByZWM7CQkvKiBhIGNvcHkgb2YgcHJlYyBpZiBbZGlvdXhYXSwgMCBvdGhlcndpc2UgKi8KLQlpbnQgcmVhbHN6OwkJLyogZmllbGQgc2l6ZSBleHBhbmRlZCBieSBkcHJlYyAqLwotCWludCBzaXplOwkJLyogc2l6ZSBvZiBjb252ZXJ0ZWQgZmllbGQgb3Igc3RyaW5nICovCi0JY2hhciogeGRpZ3MgPSBOVUxMOwkJLyogZGlnaXRzIGZvciBbeFhdIGNvbnZlcnNpb24gKi8KLSNkZWZpbmUgTklPViA4Ci0Jc3RydWN0IF9fc3VpbyB1aW87CS8qIG91dHB1dCBpbmZvcm1hdGlvbjogc3VtbWFyeSAqLwotCXN0cnVjdCBfX3Npb3YgaW92W05JT1ZdOy8qIC4uLiBhbmQgaW5kaXZpZHVhbCBpbyB2ZWN0b3JzICovCi0JY2hhciBidWZbQlVGXTsJCS8qIHNwYWNlIGZvciAlYywgJVtkaW91eFhdLCAlW2VFZmdHXSAqLwotCWNoYXIgb3hbMl07CQkvKiBzcGFjZSBmb3IgMHggaGV4LXByZWZpeCAqLwotCXZhX2xpc3QgKmFyZ3RhYmxlOwkvKiBhcmdzLCBidWlsdCBkdWUgdG8gcG9zaXRpb25hbCBhcmcgKi8KLQl2YV9saXN0IHN0YXRhcmd0YWJsZVtTVEFUSUNfQVJHX1RCTF9TSVpFXTsKLQlzaXplX3QgYXJndGFibGVzaXo7Ci0JaW50IG5leHRhcmc7CQkvKiAxLWJhc2VkIGFyZ3VtZW50IGluZGV4ICovCi0JdmFfbGlzdCBvcmdhcDsJCS8qIG9yaWdpbmFsIGFyZ3VtZW50IHBvaW50ZXIgKi8KLQkvKgotCSAqIENob29zZSBQQURTSVpFIHRvIHRyYWRlIGVmZmljaWVuY3kgdnMuIHNpemUuICBJZiBsYXJnZXIgcHJpbnRmCi0JICogZmllbGRzIG9jY3VyIGZyZXF1ZW50bHksIGluY3JlYXNlIFBBRFNJWkUgYW5kIG1ha2UgdGhlIGluaXRpYWxpc2VycwotCSAqIGJlbG93IGxvbmdlci4KLQkgKi8KLSNkZWZpbmUJUEFEU0laRQkxNgkJLyogcGFkIGNodW5rIHNpemUgKi8KLQlzdGF0aWMgY29uc3QgY2hhciBibGFua3NbUEFEU0laRV0gPQotCSB7JyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnfTsKLQlzdGF0aWMgY29uc3QgY2hhciB6ZXJvZXNbUEFEU0laRV0gPQotCSB7JzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnfTsKLQotCS8qCi0JICogQkVXQVJFLCB0aGVzZSBgZ290byBlcnJvcicgb24gZXJyb3IsIGFuZCBQQUQgdXNlcyBgbicuCi0JICovCi0jZGVmaW5lCVBSSU5UKHB0ciwgbGVuKSBkbyB7IFwKLQlpb3ZwLT5pb3ZfYmFzZSA9IChwdHIpOyBcCi0JaW92cC0+aW92X2xlbiA9IChsZW4pOyBcCi0JdWlvLnVpb19yZXNpZCArPSAobGVuKTsgXAotCWlvdnArKzsgXAotCWlmICgrK3Vpby51aW9faW92Y250ID49IE5JT1YpIHsgXAotCQlpZiAoX19zcHJpbnQoZnAsICZ1aW8pKSBcCi0JCQlnb3RvIGVycm9yOyBcCi0JCWlvdnAgPSBpb3Y7IFwKLQl9IFwKLX0gd2hpbGUgKDApCi0jZGVmaW5lCVBBRChob3dtYW55LCB3aXRoKSBkbyB7IFwKLQlpZiAoKG4gPSAoaG93bWFueSkpID4gMCkgeyBcCi0JCXdoaWxlIChuID4gUEFEU0laRSkgeyBcCi0JCQlQUklOVCh3aXRoLCBQQURTSVpFKTsgXAotCQkJbiAtPSBQQURTSVpFOyBcCi0JCX0gXAotCQlQUklOVCh3aXRoLCBuKTsgXAotCX0gXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUJRkxVU0goKSBkbyB7IFwKLQlpZiAodWlvLnVpb19yZXNpZCAmJiBfX3NwcmludChmcCwgJnVpbykpIFwKLQkJZ290byBlcnJvcjsgXAotCXVpby51aW9faW92Y250ID0gMDsgXAotCWlvdnAgPSBpb3Y7IFwKLX0gd2hpbGUgKDApCi0KLQkvKgotCSAqIFRvIGV4dGVuZCBzaG9ydHMgcHJvcGVybHksIHdlIG5lZWQgYm90aCBzaWduZWQgYW5kIHVuc2lnbmVkCi0JICogYXJndW1lbnQgZXh0cmFjdGlvbiBtZXRob2RzLgotCSAqLwotI2RlZmluZQlTQVJHKCkgXAotCSgoaW50bWF4X3QpKGZsYWdzJk1BWElOVCA/IEdFVEFSRyhpbnRtYXhfdCkgOiBcCi0JICAgIGZsYWdzJkxMT05HSU5UID8gR0VUQVJHKGxvbmcgbG9uZykgOiBcCi0JICAgIGZsYWdzJkxPTkdJTlQgPyBHRVRBUkcobG9uZykgOiBcCi0JICAgIGZsYWdzJlBUUklOVCA/IEdFVEFSRyhwdHJkaWZmX3QpIDogXAotCSAgICBmbGFncyZTSVpFSU5UID8gR0VUQVJHKHNzaXplX3QpIDogXAotCSAgICBmbGFncyZTSE9SVElOVCA/IChzaG9ydClHRVRBUkcoaW50KSA6IFwKLQkgICAgZmxhZ3MmQ0hBUklOVCA/IChfX3NpZ25lZCBjaGFyKUdFVEFSRyhpbnQpIDogXAotCSAgICBHRVRBUkcoaW50KSkpCi0jZGVmaW5lCVVBUkcoKSBcCi0JKCh1aW50bWF4X3QpKGZsYWdzJk1BWElOVCA/IEdFVEFSRyh1aW50bWF4X3QpIDogXAotCSAgICBmbGFncyZMTE9OR0lOVCA/IEdFVEFSRyh1bnNpZ25lZCBsb25nIGxvbmcpIDogXAotCSAgICBmbGFncyZMT05HSU5UID8gR0VUQVJHKHVuc2lnbmVkIGxvbmcpIDogXAotCSAgICBmbGFncyZQVFJJTlQgPyAodWludHB0cl90KUdFVEFSRyhwdHJkaWZmX3QpIDogLyogWFhYICovIFwKLQkgICAgZmxhZ3MmU0laRUlOVCA/IEdFVEFSRyhzaXplX3QpIDogXAotCSAgICBmbGFncyZTSE9SVElOVCA/ICh1bnNpZ25lZCBzaG9ydClHRVRBUkcoaW50KSA6IFwKLQkgICAgZmxhZ3MmQ0hBUklOVCA/ICh1bnNpZ25lZCBjaGFyKUdFVEFSRyhpbnQpIDogXAotCSAgICBHRVRBUkcodW5zaWduZWQgaW50KSkpCi0KLQkgLyoKLQkgICogR2V0ICogYXJndW1lbnRzLCBpbmNsdWRpbmcgdGhlIGZvcm0gKm5uJC4gIFByZXNlcnZlIHRoZSBuZXh0YXJnCi0JICAqIHRoYXQgdGhlIGFyZ3VtZW50IGNhbiBiZSBnb3R0ZW4gb25jZSB0aGUgdHlwZSBpcyBkZXRlcm1pbmVkLgotCSAgKi8KLSNkZWZpbmUgR0VUQVNURVIodmFsKSBcCi0JbjIgPSAwOyBcCi0JY3AgPSBmbXQ7IFwKLQl3aGlsZSAoaXNfZGlnaXQoKmNwKSkgeyBcCi0JCW4yID0gMTAgKiBuMiArIHRvX2RpZ2l0KCpjcCk7IFwKLQkJY3ArKzsgXAotCX0gXAotCWlmICgqY3AgPT0gJyQnKSB7IFwKLQkJaW50IGhvbGQgPSBuZXh0YXJnOyBcCi0JCWlmIChhcmd0YWJsZSA9PSBOVUxMKSB7IFwKLQkJCWFyZ3RhYmxlID0gc3RhdGFyZ3RhYmxlOyBcCi0JCQlfX2ZpbmRfYXJndW1lbnRzKGZtdDAsIG9yZ2FwLCAmYXJndGFibGUsICZhcmd0YWJsZXNpeik7IFwKLQkJfSBcCi0JCW5leHRhcmcgPSBuMjsgXAotCQl2YWwgPSBHRVRBUkcoaW50KTsgXAotCQluZXh0YXJnID0gaG9sZDsgXAotCQlmbXQgPSArK2NwOyBcCi0JfSBlbHNlIHsgXAotCQl2YWwgPSBHRVRBUkcoaW50KTsgXAotCX0KLQotLyoKLSogR2V0IHRoZSBhcmd1bWVudCBpbmRleGVkIGJ5IG5leHRhcmcuICAgSWYgdGhlIGFyZ3VtZW50IHRhYmxlIGlzCi0qIGJ1aWx0LCB1c2UgaXQgdG8gZ2V0IHRoZSBhcmd1bWVudC4gIElmIGl0cyBub3QsIGdldCB0aGUgbmV4dAotKiBhcmd1bWVudCAoYW5kIGFyZ3VtZW50cyBtdXN0IGJlIGdvdHRlbiBzZXF1ZW50aWFsbHkpLgotKi8KLSNkZWZpbmUgR0VUQVJHKHR5cGUpIFwKLQkoKChhcmd0YWJsZSAhPSBOVUxMKSA/ICh2b2lkKShhcCA9IGFyZ3RhYmxlW25leHRhcmddKSA6ICh2b2lkKTApLCBcCi0JIG5leHRhcmcrKywgdmFfYXJnKGFwLCB0eXBlKSkKLQotCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKLQkvKiBzb3JyeSwgZnByaW50ZihyZWFkX29ubHlfZmlsZSwgIiIpIHJldHVybnMgRU9GLCBub3QgMCAqLwotCWlmIChjYW50d3JpdGUoZnApKSB7Ci0JCWVycm5vID0gRUJBREY7Ci0JCXJldHVybiAoRU9GKTsKLQl9Ci0KLQkvKiBvcHRpbWlzZSBmcHJpbnRmKHN0ZGVycikgKGFuZCBvdGhlciB1bmJ1ZmZlcmVkIFVuaXggZmlsZXMpICovCi0JaWYgKChmcC0+X2ZsYWdzICYgKF9fU05CRnxfX1NXUnxfX1NSVykpID09IChfX1NOQkZ8X19TV1IpICYmCi0JICAgIGZwLT5fZmlsZSA+PSAwKQotCQlyZXR1cm4gKF9fc2JwcmludGYoZnAsIGZtdDAsIGFwKSk7Ci0KLQlmbXQgPSAoY2hhciAqKWZtdDA7Ci0JYXJndGFibGUgPSBOVUxMOwotCW5leHRhcmcgPSAxOwotCXZhX2NvcHkob3JnYXAsIGFwKTsKLQl1aW8udWlvX2lvdiA9IGlvdnAgPSBpb3Y7Ci0JdWlvLnVpb19yZXNpZCA9IDA7Ci0JdWlvLnVpb19pb3ZjbnQgPSAwOwotCXJldCA9IDA7Ci0KLQltZW1zZXQoJnBzLCAwLCBzaXplb2YocHMpKTsKLQkvKgotCSAqIFNjYW4gdGhlIGZvcm1hdCBmb3IgY29udmVyc2lvbnMgKGAlJyBjaGFyYWN0ZXIpLgotCSAqLwotCWZvciAoOzspIHsKLQkJY3AgPSBmbXQ7Ci0jaWYgMSAgLyogQklPTklDICovCi0gICAgICAgICAgICAgICAgbiA9IC0xOwotICAgICAgICAgICAgICAgIHdoaWxlICggKHdjID0gKmZtdCkgIT0gMCApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdjID09ICclJykgewotICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBmbXQrKzsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotCQl3aGlsZSAoKG4gPSBtYnJ0b3djKCZ3YywgZm10LCBNQl9DVVJfTUFYLCAmcHMpKSA+IDApIHsKLQkJCWZtdCArPSBuOwotCQkJaWYgKHdjID09ICclJykgewotCQkJCWZtdC0tOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0jZW5kaWYKLQkJaWYgKChtID0gZm10IC0gY3ApICE9IDApIHsKLQkJCVBSSU5UKGNwLCBtKTsKLQkJCXJldCArPSBtOwotCQl9Ci0JCWlmIChuIDw9IDApCi0JCQlnb3RvIGRvbmU7Ci0JCWZtdCsrOwkJLyogc2tpcCBvdmVyICclJyAqLwotCi0JCWZsYWdzID0gMDsKLQkJZHByZWMgPSAwOwotCQl3aWR0aCA9IDA7Ci0JCXByZWMgPSAtMTsKLQkJc2lnbiA9ICdcMCc7Ci0KLXJmbGFnOgkJY2ggPSAqZm10Kys7Ci1yZXN3aXRjaDoJc3dpdGNoIChjaCkgewotCQljYXNlICcgJzoKLQkJCS8qCi0JCQkgKiBgYElmIHRoZSBzcGFjZSBhbmQgKyBmbGFncyBib3RoIGFwcGVhciwgdGhlIHNwYWNlCi0JCQkgKiBmbGFnIHdpbGwgYmUgaWdub3JlZC4nJwotCQkJICoJLS0gQU5TSSBYM0oxMQotCQkJICovCi0JCQlpZiAoIXNpZ24pCi0JCQkJc2lnbiA9ICcgJzsKLQkJCWdvdG8gcmZsYWc7Ci0JCWNhc2UgJyMnOgotCQkJZmxhZ3MgfD0gQUxUOwotCQkJZ290byByZmxhZzsKLQkJY2FzZSAnKic6Ci0JCQkvKgotCQkJICogYGBBIG5lZ2F0aXZlIGZpZWxkIHdpZHRoIGFyZ3VtZW50IGlzIHRha2VuIGFzIGEKLQkJCSAqIC0gZmxhZyBmb2xsb3dlZCBieSBhIHBvc2l0aXZlIGZpZWxkIHdpZHRoLicnCi0JCQkgKgktLSBBTlNJIFgzSjExCi0JCQkgKiBUaGV5IGRvbid0IGV4Y2x1ZGUgZmllbGQgd2lkdGhzIHJlYWQgZnJvbSBhcmdzLgotCQkJICovCi0JCQlHRVRBU1RFUih3aWR0aCk7Ci0JCQlpZiAod2lkdGggPj0gMCkKLQkJCQlnb3RvIHJmbGFnOwotCQkJd2lkdGggPSAtd2lkdGg7Ci0JCQkvKiBGQUxMVEhST1VHSCAqLwotCQljYXNlICctJzoKLQkJCWZsYWdzIHw9IExBREpVU1Q7Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICcrJzoKLQkJCXNpZ24gPSAnKyc7Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICcuJzoKLQkJCWlmICgoY2ggPSAqZm10KyspID09ICcqJykgewotCQkJCUdFVEFTVEVSKG4pOwotCQkJCXByZWMgPSBuIDwgMCA/IC0xIDogbjsKLQkJCQlnb3RvIHJmbGFnOwotCQkJfQotCQkJbiA9IDA7Ci0JCQl3aGlsZSAoaXNfZGlnaXQoY2gpKSB7Ci0JCQkJbiA9IDEwICogbiArIHRvX2RpZ2l0KGNoKTsKLQkJCQljaCA9ICpmbXQrKzsKLQkJCX0KLQkJCWlmIChjaCA9PSAnJCcpIHsKLQkJCQluZXh0YXJnID0gbjsKLQkJCQlpZiAoYXJndGFibGUgPT0gTlVMTCkgewotCQkJCQlhcmd0YWJsZSA9IHN0YXRhcmd0YWJsZTsKLQkJCQkJX19maW5kX2FyZ3VtZW50cyhmbXQwLCBvcmdhcCwKLQkJCQkJICAgICZhcmd0YWJsZSwgJmFyZ3RhYmxlc2l6KTsKLQkJCQl9Ci0JCQkJZ290byByZmxhZzsKLQkJCX0KLQkJCXByZWMgPSBuIDwgMCA/IC0xIDogbjsKLQkJCWdvdG8gcmVzd2l0Y2g7Ci0JCWNhc2UgJzAnOgotCQkJLyoKLQkJCSAqIGBgTm90ZSB0aGF0IDAgaXMgdGFrZW4gYXMgYSBmbGFnLCBub3QgYXMgdGhlCi0JCQkgKiBiZWdpbm5pbmcgb2YgYSBmaWVsZCB3aWR0aC4nJwotCQkJICoJLS0gQU5TSSBYM0oxMQotCQkJICovCi0JCQlmbGFncyB8PSBaRVJPUEFEOwotCQkJZ290byByZmxhZzsKLQkJY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6Ci0JCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKLQkJCW4gPSAwOwotCQkJZG8gewotCQkJCW4gPSAxMCAqIG4gKyB0b19kaWdpdChjaCk7Ci0JCQkJY2ggPSAqZm10Kys7Ci0JCQl9IHdoaWxlIChpc19kaWdpdChjaCkpOwotCQkJaWYgKGNoID09ICckJykgewotCQkJCW5leHRhcmcgPSBuOwotCQkJCWlmIChhcmd0YWJsZSA9PSBOVUxMKSB7Ci0JCQkJCWFyZ3RhYmxlID0gc3RhdGFyZ3RhYmxlOwotCQkJCQlfX2ZpbmRfYXJndW1lbnRzKGZtdDAsIG9yZ2FwLAotCQkJCQkgICAgJmFyZ3RhYmxlLCAmYXJndGFibGVzaXopOwotCQkJCX0KLQkJCQlnb3RvIHJmbGFnOwotCQkJfQotCQkJd2lkdGggPSBuOwotCQkJZ290byByZXN3aXRjaDsKLSNpZmRlZiBGTE9BVElOR19QT0lOVAotCQljYXNlICdMJzoKLQkJCWZsYWdzIHw9IExPTkdEQkw7Ci0JCQlnb3RvIHJmbGFnOwotI2VuZGlmCi0JCWNhc2UgJ2gnOgotCQkJaWYgKCpmbXQgPT0gJ2gnKSB7Ci0JCQkJZm10Kys7Ci0JCQkJZmxhZ3MgfD0gQ0hBUklOVDsKLQkJCX0gZWxzZSB7Ci0JCQkJZmxhZ3MgfD0gU0hPUlRJTlQ7Ci0JCQl9Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICdqJzoKLQkJCWZsYWdzIHw9IE1BWElOVDsKLQkJCWdvdG8gcmZsYWc7Ci0JCWNhc2UgJ2wnOgotCQkJaWYgKCpmbXQgPT0gJ2wnKSB7Ci0JCQkJZm10Kys7Ci0JCQkJZmxhZ3MgfD0gTExPTkdJTlQ7Ci0JCQl9IGVsc2UgewotCQkJCWZsYWdzIHw9IExPTkdJTlQ7Ci0JCQl9Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICdxJzoKLQkJCWZsYWdzIHw9IExMT05HSU5UOwotCQkJZ290byByZmxhZzsKLQkJY2FzZSAndCc6Ci0JCQlmbGFncyB8PSBQVFJJTlQ7Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICd6JzoKLQkJCWZsYWdzIHw9IFNJWkVJTlQ7Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICdjJzoKLQkJCSooY3AgPSBidWYpID0gR0VUQVJHKGludCk7Ci0JCQlzaXplID0gMTsKLQkJCXNpZ24gPSAnXDAnOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ0QnOgotCQkJZmxhZ3MgfD0gTE9OR0lOVDsKLQkJCS8qRkFMTFRIUk9VR0gqLwotCQljYXNlICdkJzoKLQkJY2FzZSAnaSc6Ci0JCQlfdW1heCA9IFNBUkcoKTsKLQkJCWlmICgoaW50bWF4X3QpX3VtYXggPCAwKSB7Ci0JCQkJX3VtYXggPSAtX3VtYXg7Ci0JCQkJc2lnbiA9ICctJzsKLQkJCX0KLQkJCWJhc2UgPSBERUM7Ci0JCQlnb3RvIG51bWJlcjsKLSNpZmRlZiBGTE9BVElOR19QT0lOVAotCQljYXNlICdlJzoKLQkJY2FzZSAnRSc6Ci0JCWNhc2UgJ2YnOgotCQljYXNlICdnJzoKLQkJY2FzZSAnRyc6Ci0JCQlpZiAocHJlYyA9PSAtMSkgewotCQkJCXByZWMgPSBERUZQUkVDOwotCQkJfSBlbHNlIGlmICgoY2ggPT0gJ2cnIHx8IGNoID09ICdHJykgJiYgcHJlYyA9PSAwKSB7Ci0JCQkJcHJlYyA9IDE7Ci0JCQl9Ci0KLQkJCWlmIChmbGFncyAmIExPTkdEQkwpIHsKLQkJCQlfZG91YmxlID0gKGRvdWJsZSkgR0VUQVJHKGxvbmcgZG91YmxlKTsKLQkJCX0gZWxzZSB7Ci0JCQkJX2RvdWJsZSA9IEdFVEFSRyhkb3VibGUpOwotCQkJfQotCi0JCQkvKiBkbyB0aGlzIGJlZm9yZSB0cmlja3kgcHJlY2lzaW9uIGNoYW5nZXMgKi8KLQkJCWlmIChfbXlfaXNpbmYoX2RvdWJsZSkpIHsKLQkJCQlpZiAoX2RvdWJsZSA8IDApCi0JCQkJCXNpZ24gPSAnLSc7Ci0JCQkJY3AgPSAiSW5mIjsKLQkJCQlzaXplID0gMzsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChfbXlfaXNuYW4oX2RvdWJsZSkpIHsKLQkJCQljcCA9ICJOYU4iOwotCQkJCXNpemUgPSAzOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlmbGFncyB8PSBGUFQ7Ci0JCQljcCA9IGN2dChfZG91YmxlLCBwcmVjLCBmbGFncywgJnNvZnRzaWduLAotCQkJCSZleHB0LCBjaCwgJm5kaWcpOwotCQkgICAgY3BfZnJlZSA9IGNwOwotCQkJaWYgKGNoID09ICdnJyB8fCBjaCA9PSAnRycpIHsKLQkJCQlpZiAoZXhwdCA8PSAtNCB8fCBleHB0ID4gcHJlYykKLQkJCQkJY2ggPSAoY2ggPT0gJ2cnKSA/ICdlJyA6ICdFJzsKLQkJCQllbHNlCi0JCQkJCWNoID0gJ2cnOwotCQkJfQotCQkJaWYgKGNoIDw9ICdlJykgewkvKiAnZScgb3IgJ0UnIGZtdCAqLwotCQkJCS0tZXhwdDsKLQkJCQlleHBzaXplID0gZXhwb25lbnQoZXhwc3RyLCBleHB0LCBjaCk7Ci0JCQkJc2l6ZSA9IGV4cHNpemUgKyBuZGlnOwotCQkJCWlmIChuZGlnID4gMSB8fCBmbGFncyAmIEFMVCkKLQkJCQkJKytzaXplOwotCQkJfSBlbHNlIGlmIChjaCA9PSAnZicpIHsJCS8qIGYgZm10ICovCi0JCQkJaWYgKGV4cHQgPiAwKSB7Ci0JCQkJCXNpemUgPSBleHB0OwotCQkJCQlpZiAocHJlYyB8fCBmbGFncyAmIEFMVCkKLQkJCQkJCXNpemUgKz0gcHJlYyArIDE7Ci0JCQkJfSBlbHNlCS8qICIwLlgiICovCi0JCQkJCXNpemUgPSBwcmVjICsgMjsKLQkJCX0gZWxzZSBpZiAoZXhwdCA+PSBuZGlnKSB7CS8qIGZpeGVkIGcgZm10ICovCi0JCQkJc2l6ZSA9IGV4cHQ7Ci0JCQkJaWYgKGZsYWdzICYgQUxUKQotCQkJCQkrK3NpemU7Ci0JCQl9IGVsc2UKLQkJCQlzaXplID0gbmRpZyArIChleHB0ID4gMCA/Ci0JCQkJCTEgOiAyIC0gZXhwdCk7Ci0KLQkJCWlmIChzb2Z0c2lnbikKLQkJCQlzaWduID0gJy0nOwotCQkJYnJlYWs7Ci0jZW5kaWYgLyogRkxPQVRJTkdfUE9JTlQgKi8KLS8qIHRoZSBBbmRyb2lkIHNlY3VyaXR5IHRlYW0gc3VnZ2VzdHMgcmVtb3Zpbmcgc3VwcG9ydCBmb3IgJW4KLSAqIHNpbmNlIGl0IGhhcyBubyByZWFsIHByYWN0aWNhbCB2YWx1ZSwgYW5kIGNvdWxkIGxlYWQgdG8KLSAqIHJ1bm5pbmcgbWFsaWNpb3VzIGNvZGUgKGZvciByZWFsbHkgYnVnZ3kgcHJvZ3JhbXMgdGhhdAotICogc2VuZCB0byBwcmludGYoKSB1c2VyLWdlbmVyYXRlZCBmb3JtYXR0aW5nIHN0cmluZ3MpLgotICovCi0jaWYgMAotCQljYXNlICduJzoKLQkJCWlmIChmbGFncyAmIExMT05HSU5UKQotCQkJCSpHRVRBUkcobG9uZyBsb25nICopID0gcmV0OwotCQkJZWxzZSBpZiAoZmxhZ3MgJiBMT05HSU5UKQotCQkJCSpHRVRBUkcobG9uZyAqKSA9IHJldDsKLQkJCWVsc2UgaWYgKGZsYWdzICYgU0hPUlRJTlQpCi0JCQkJKkdFVEFSRyhzaG9ydCAqKSA9IHJldDsKLQkJCWVsc2UgaWYgKGZsYWdzICYgQ0hBUklOVCkKLQkJCQkqR0VUQVJHKF9fc2lnbmVkIGNoYXIgKikgPSByZXQ7Ci0JCQllbHNlIGlmIChmbGFncyAmIFBUUklOVCkKLQkJCQkqR0VUQVJHKHB0cmRpZmZfdCAqKSA9IHJldDsKLQkJCWVsc2UgaWYgKGZsYWdzICYgU0laRUlOVCkKLQkJCQkqR0VUQVJHKHNzaXplX3QgKikgPSByZXQ7Ci0JCQllbHNlIGlmIChmbGFncyAmIE1BWElOVCkKLQkJCQkqR0VUQVJHKGludG1heF90ICopID0gcmV0OwotCQkJZWxzZQotCQkJCSpHRVRBUkcoaW50ICopID0gcmV0OwotCQkJY29udGludWU7CS8qIG5vIG91dHB1dCAqLwotI2VuZGlmCi0JCWNhc2UgJ08nOgotCQkJZmxhZ3MgfD0gTE9OR0lOVDsKLQkJCS8qRkFMTFRIUk9VR0gqLwotCQljYXNlICdvJzoKLQkJCV91bWF4ID0gVUFSRygpOwotCQkJYmFzZSA9IE9DVDsKLQkJCWdvdG8gbm9zaWduOwotCQljYXNlICdwJzoKLQkJCS8qCi0JCQkgKiBgYFRoZSBhcmd1bWVudCBzaGFsbCBiZSBhIHBvaW50ZXIgdG8gdm9pZC4gIFRoZQotCQkJICogdmFsdWUgb2YgdGhlIHBvaW50ZXIgaXMgY29udmVydGVkIHRvIGEgc2VxdWVuY2UKLQkJCSAqIG9mIHByaW50YWJsZSBjaGFyYWN0ZXJzLCBpbiBhbiBpbXBsZW1lbnRhdGlvbi0KLQkJCSAqIGRlZmluZWQgbWFubmVyLicnCi0JCQkgKgktLSBBTlNJIFgzSjExCi0JCQkgKi8KLQkJCS8qIE5PU1RSSUNUICovCi0JCQlfdW1heCA9ICh1X2xvbmcpR0VUQVJHKHZvaWQgKik7Ci0JCQliYXNlID0gSEVYOwotCQkJeGRpZ3MgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0JCQlmbGFncyB8PSBIRVhQUkVGSVg7Ci0JCQljaCA9ICd4JzsKLQkJCWdvdG8gbm9zaWduOwotCQljYXNlICdzJzoKLQkJCWlmICgoY3AgPSBHRVRBUkcoY2hhciAqKSkgPT0gTlVMTCkKLQkJCQljcCA9ICIobnVsbCkiOwotCQkJaWYgKHByZWMgPj0gMCkgewotCQkJCS8qCi0JCQkJICogY2FuJ3QgdXNlIHN0cmxlbjsgY2FuIG9ubHkgbG9vayBmb3IgdGhlCi0JCQkJICogTlVMIGluIHRoZSBmaXJzdCBgcHJlYycgY2hhcmFjdGVycywgYW5kCi0JCQkJICogc3RybGVuKCkgd2lsbCBnbyBmdXJ0aGVyLgotCQkJCSAqLwotCQkJCWNoYXIgKnAgPSBtZW1jaHIoY3AsIDAsIHByZWMpOwotCi0JCQkJaWYgKHAgIT0gTlVMTCkgewotCQkJCQlzaXplID0gcCAtIGNwOwotCQkJCQlpZiAoc2l6ZSA+IHByZWMpCi0JCQkJCQlzaXplID0gcHJlYzsKLQkJCQl9IGVsc2UKLQkJCQkJc2l6ZSA9IHByZWM7Ci0JCQl9IGVsc2UKLQkJCQlzaXplID0gc3RybGVuKGNwKTsKLQkJCXNpZ24gPSAnXDAnOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ1UnOgotCQkJZmxhZ3MgfD0gTE9OR0lOVDsKLQkJCS8qRkFMTFRIUk9VR0gqLwotCQljYXNlICd1JzoKLQkJCV91bWF4ID0gVUFSRygpOwotCQkJYmFzZSA9IERFQzsKLQkJCWdvdG8gbm9zaWduOwotCQljYXNlICdYJzoKLQkJCXhkaWdzID0gIjAxMjM0NTY3ODlBQkNERUYiOwotCQkJZ290byBoZXg7Ci0JCWNhc2UgJ3gnOgotCQkJeGRpZ3MgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci1oZXg6CQkJX3VtYXggPSBVQVJHKCk7Ci0JCQliYXNlID0gSEVYOwotCQkJLyogbGVhZGluZyAweC9YIG9ubHkgaWYgbm9uLXplcm8gKi8KLQkJCWlmIChmbGFncyAmIEFMVCAmJiBfdW1heCAhPSAwKQotCQkJCWZsYWdzIHw9IEhFWFBSRUZJWDsKLQotCQkJLyogdW5zaWduZWQgY29udmVyc2lvbnMgKi8KLW5vc2lnbjoJCQlzaWduID0gJ1wwJzsKLQkJCS8qCi0JCQkgKiBgYC4uLiBkaW91WHggY29udmVyc2lvbnMgLi4uIGlmIGEgcHJlY2lzaW9uIGlzCi0JCQkgKiBzcGVjaWZpZWQsIHRoZSAwIGZsYWcgd2lsbCBiZSBpZ25vcmVkLicnCi0JCQkgKgktLSBBTlNJIFgzSjExCi0JCQkgKi8KLW51bWJlcjoJCQlpZiAoKGRwcmVjID0gcHJlYykgPj0gMCkKLQkJCQlmbGFncyAmPSB+WkVST1BBRDsKLQotCQkJLyoKLQkJCSAqIGBgVGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGEgemVybyB2YWx1ZSB3aXRoIGFuCi0JCQkgKiBleHBsaWNpdCBwcmVjaXNpb24gb2YgemVybyBpcyBubyBjaGFyYWN0ZXJzLicnCi0JCQkgKgktLSBBTlNJIFgzSjExCi0JCQkgKi8KLQkJCWNwID0gYnVmICsgQlVGOwotCQkJaWYgKF91bWF4ICE9IDAgfHwgcHJlYyAhPSAwKSB7Ci0JCQkJLyoKLQkJCQkgKiBVbnNpZ25lZCBtb2QgaXMgaGFyZCwgYW5kIHVuc2lnbmVkIG1vZAotCQkJCSAqIGJ5IGEgY29uc3RhbnQgaXMgZWFzaWVyIHRoYW4gdGhhdCBieQotCQkJCSAqIGEgdmFyaWFibGU7IGhlbmNlIHRoaXMgc3dpdGNoLgotCQkJCSAqLwotCQkJCXN3aXRjaCAoYmFzZSkgewotCQkJCWNhc2UgT0NUOgotCQkJCQlkbyB7Ci0JCQkJCQkqLS1jcCA9IHRvX2NoYXIoX3VtYXggJiA3KTsKLQkJCQkJCV91bWF4ID4+PSAzOwotCQkJCQl9IHdoaWxlIChfdW1heCk7Ci0JCQkJCS8qIGhhbmRsZSBvY3RhbCBsZWFkaW5nIDAgKi8KLQkJCQkJaWYgKGZsYWdzICYgQUxUICYmICpjcCAhPSAnMCcpCi0JCQkJCQkqLS1jcCA9ICcwJzsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIERFQzoKLQkJCQkJLyogbWFueSBudW1iZXJzIGFyZSAxIGRpZ2l0ICovCi0JCQkJCXdoaWxlIChfdW1heCA+PSAxMCkgewotCQkJCQkJKi0tY3AgPSB0b19jaGFyKF91bWF4ICUgMTApOwotCQkJCQkJX3VtYXggLz0gMTA7Ci0JCQkJCX0KLQkJCQkJKi0tY3AgPSB0b19jaGFyKF91bWF4KTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIEhFWDoKLQkJCQkJZG8gewotCQkJCQkJKi0tY3AgPSB4ZGlnc1tfdW1heCAmIDE1XTsKLQkJCQkJCV91bWF4ID4+PSA0OwotCQkJCQl9IHdoaWxlIChfdW1heCk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJZGVmYXVsdDoKLQkJCQkJY3AgPSAiYnVnIGluIHZmcHJpbnRmOiBiYWQgYmFzZSI7Ci0JCQkJCXNpemUgPSBzdHJsZW4oY3ApOwotCQkJCQlnb3RvIHNraXBzaXplOwotCQkJCX0KLQkJCX0KLQkJCXNpemUgPSBidWYgKyBCVUYgLSBjcDsKLQkJc2tpcHNpemU6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoJLyogIiU/IiBwcmludHMgPywgdW5sZXNzID8gaXMgTlVMICovCi0JCQlpZiAoY2ggPT0gJ1wwJykKLQkJCQlnb3RvIGRvbmU7Ci0JCQkvKiBwcmV0ZW5kIGl0IHdhcyAlYyB3aXRoIGFyZ3VtZW50IGNoICovCi0JCQljcCA9IGJ1ZjsKLQkJCSpjcCA9IGNoOwotCQkJc2l6ZSA9IDE7Ci0JCQlzaWduID0gJ1wwJzsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyoKLQkJICogQWxsIHJlYXNvbmFibGUgZm9ybWF0cyB3aW5kIHVwIGhlcmUuICBBdCB0aGlzIHBvaW50LCBgY3AnCi0JCSAqIHBvaW50cyB0byBhIHN0cmluZyB3aGljaCAoaWYgbm90IGZsYWdzJkxBREpVU1QpIHNob3VsZCBiZQotCQkgKiBwYWRkZWQgb3V0IHRvIGB3aWR0aCcgcGxhY2VzLiAgSWYgZmxhZ3MmWkVST1BBRCwgaXQgc2hvdWxkCi0JCSAqIGZpcnN0IGJlIHByZWZpeGVkIGJ5IGFueSBzaWduIG9yIG90aGVyIHByZWZpeDsgb3RoZXJ3aXNlLAotCQkgKiBpdCBzaG91bGQgYmUgYmxhbmsgcGFkZGVkIGJlZm9yZSB0aGUgcHJlZml4IGlzIGVtaXR0ZWQuCi0JCSAqIEFmdGVyIGFueSBsZWZ0LWhhbmQgcGFkZGluZyBhbmQgcHJlZml4aW5nLCBlbWl0IHplcm9lcwotCQkgKiByZXF1aXJlZCBieSBhIGRlY2ltYWwgW2Rpb3V4WF0gcHJlY2lzaW9uLCB0aGVuIHByaW50IHRoZQotCQkgKiBzdHJpbmcgcHJvcGVyLCB0aGVuIGVtaXQgemVyb2VzIHJlcXVpcmVkIGJ5IGFueSBsZWZ0b3ZlcgotCQkgKiBmbG9hdGluZyBwcmVjaXNpb247IGZpbmFsbHksIGlmIExBREpVU1QsIHBhZCB3aXRoIGJsYW5rcy4KLQkJICoKLQkJICogQ29tcHV0ZSBhY3R1YWwgc2l6ZSwgc28gd2Uga25vdyBob3cgbXVjaCB0byBwYWQuCi0JCSAqIHNpemUgZXhjbHVkZXMgZGVjaW1hbCBwcmVjOyByZWFsc3ogaW5jbHVkZXMgaXQuCi0JCSAqLwotCQlyZWFsc3ogPSBkcHJlYyA+IHNpemUgPyBkcHJlYyA6IHNpemU7Ci0JCWlmIChzaWduKQotCQkJcmVhbHN6Kys7Ci0JCWVsc2UgaWYgKGZsYWdzICYgSEVYUFJFRklYKQotCQkJcmVhbHN6Kz0gMjsKLQotCQkvKiByaWdodC1hZGp1c3RpbmcgYmxhbmsgcGFkZGluZyAqLwotCQlpZiAoKGZsYWdzICYgKExBREpVU1R8WkVST1BBRCkpID09IDApCi0JCQlQQUQod2lkdGggLSByZWFsc3osIGJsYW5rcyk7Ci0KLQkJLyogcHJlZml4ICovCi0JCWlmIChzaWduKSB7Ci0JCQlQUklOVCgmc2lnbiwgMSk7Ci0JCX0gZWxzZSBpZiAoZmxhZ3MgJiBIRVhQUkVGSVgpIHsKLQkJCW94WzBdID0gJzAnOwotCQkJb3hbMV0gPSBjaDsKLQkJCVBSSU5UKG94LCAyKTsKLQkJfQotCi0JCS8qIHJpZ2h0LWFkanVzdGluZyB6ZXJvIHBhZGRpbmcgKi8KLQkJaWYgKChmbGFncyAmIChMQURKVVNUfFpFUk9QQUQpKSA9PSBaRVJPUEFEKQotCQkJUEFEKHdpZHRoIC0gcmVhbHN6LCB6ZXJvZXMpOwotCi0JCS8qIGxlYWRpbmcgemVyb2VzIGZyb20gZGVjaW1hbCBwcmVjaXNpb24gKi8KLQkJUEFEKGRwcmVjIC0gc2l6ZSwgemVyb2VzKTsKLQotCQkvKiB0aGUgc3RyaW5nIG9yIG51bWJlciBwcm9wZXIgKi8KLSNpZmRlZiBGTE9BVElOR19QT0lOVAotCQlpZiAoKGZsYWdzICYgRlBUKSA9PSAwKSB7Ci0JCQlQUklOVChjcCwgc2l6ZSk7Ci0JCX0gZWxzZSB7CS8qIGdsdWUgdG9nZXRoZXIgZl9wIGZyYWdtZW50cyAqLwotCQkJaWYgKGNoID49ICdmJykgewkvKiAnZicgb3IgJ2cnICovCi0JCQkJaWYgKF9kb3VibGUgPT0gMCkgewotCQkJCQkvKiBrbHVkZ2UgZm9yIF9fZHRvYSBpcnJlZ3VsYXJpdHkgKi8KLQkJCQkJUFJJTlQoIjAiLCAxKTsKLQkJCQkJaWYgKGV4cHQgPCBuZGlnIHx8IChmbGFncyAmIEFMVCkgIT0gMCkgewotCQkJCQkJUFJJTlQoZGVjaW1hbF9wb2ludCwgMSk7Ci0JCQkJCQlQQUQobmRpZyAtIDEsIHplcm9lcyk7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgaWYgKGV4cHQgPD0gMCkgewotCQkJCQlQUklOVCgiMCIsIDEpOwotCQkJCQlQUklOVChkZWNpbWFsX3BvaW50LCAxKTsKLQkJCQkJUEFEKC1leHB0LCB6ZXJvZXMpOwotCQkJCQlQUklOVChjcCwgbmRpZyk7Ci0JCQkJfSBlbHNlIGlmIChleHB0ID49IG5kaWcpIHsKLQkJCQkJUFJJTlQoY3AsIG5kaWcpOwotCQkJCQlQQUQoZXhwdCAtIG5kaWcsIHplcm9lcyk7Ci0JCQkJCWlmIChmbGFncyAmIEFMVCkKLQkJCQkJCVBSSU5UKCIuIiwgMSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJUFJJTlQoY3AsIGV4cHQpOwotCQkJCQljcCArPSBleHB0OwotCQkJCQlQUklOVCgiLiIsIDEpOwotCQkJCQlQUklOVChjcCwgbmRpZy1leHB0KTsKLQkJCQl9Ci0JCQl9IGVsc2UgewkvKiAnZScgb3IgJ0UnICovCi0JCQkJaWYgKG5kaWcgPiAxIHx8IGZsYWdzICYgQUxUKSB7Ci0JCQkJCW94WzBdID0gKmNwKys7Ci0JCQkJCW94WzFdID0gJy4nOwotCQkJCQlQUklOVChveCwgMik7Ci0JCQkJCWlmIChfZG91YmxlKSB7Ci0JCQkJCQlQUklOVChjcCwgbmRpZy0xKTsKLQkJCQkJfSBlbHNlCS8qIDAuWzAuLl0gKi8KLQkJCQkJCS8qIF9fZHRvYSBpcnJlZ3VsYXJpdHkgKi8KLQkJCQkJCVBBRChuZGlnIC0gMSwgemVyb2VzKTsKLQkJCQl9IGVsc2UJLyogWGVZWVkgKi8KLQkJCQkJUFJJTlQoY3AsIDEpOwotCQkJCVBSSU5UKGV4cHN0ciwgZXhwc2l6ZSk7Ci0JCQl9Ci0JCX0KLSNlbHNlCi0JCVBSSU5UKGNwLCBzaXplKTsKLSNlbmRpZgotCQkvKiBsZWZ0LWFkanVzdGluZyBwYWRkaW5nIChhbHdheXMgYmxhbmspICovCi0JCWlmIChmbGFncyAmIExBREpVU1QpCi0JCQlQQUQod2lkdGggLSByZWFsc3osIGJsYW5rcyk7Ci0KLQkJLyogZmluYWxseSwgYWRqdXN0IHJldCAqLwotCQlyZXQgKz0gd2lkdGggPiByZWFsc3ogPyB3aWR0aCA6IHJlYWxzejsKLQotCQlGTFVTSCgpOwkvKiBjb3B5IG91dCB0aGUgSS9PIHZlY3RvcnMgKi8KLSNpZiAxICAgLyogQklPTklDOiByZW1vdmUgbWVtb3J5IGxlYWsgd2hlbiBwcmludGluZyBkb3VibGVzICovCi0JCWlmIChjcF9mcmVlKSB7Ci0JCSAgZnJlZShjcF9mcmVlKTsKLQkJICBjcF9mcmVlID0gTlVMTDsKLQkJfQotI2VuZGlmCi0JfQotZG9uZToKLQlGTFVTSCgpOwotZXJyb3I6Ci0jaWYgMSAgIC8qIEJJT05JQzogcmVtb3ZlIG1lbW9yeSBsZWFrIHdoZW4gcHJpbnRpbmcgZG91YmxlcyAqLwotICAgIGlmIChjcF9mcmVlKSB7Ci0gICAgICAgIGZyZWUoY3BfZnJlZSk7Ci0gICAgICAgIGNwX2ZyZWUgPSBOVUxMOwotICAgIH0KLSNlbmRpZgotCWlmIChhcmd0YWJsZSAhPSBOVUxMICYmIGFyZ3RhYmxlICE9IHN0YXRhcmd0YWJsZSkgewotCQltdW5tYXAoYXJndGFibGUsIGFyZ3RhYmxlc2l6KTsKLQkJYXJndGFibGUgPSBOVUxMOwotCX0KLSAgICAgICAgdmFfZW5kKG9yZ2FwKTsKLQlyZXR1cm4gKF9fc2ZlcnJvcihmcCkgPyBFT0YgOiByZXQpOwotCS8qIE5PVFJFQUNIRUQgKi8KLX0KLQotLyoKLSAqIFR5cGUgaWRzIGZvciBhcmd1bWVudCB0eXBlIHRhYmxlLgotICovCi0jZGVmaW5lIFRfVU5VU0VECTAKLSNkZWZpbmUgVF9TSE9SVAkJMQotI2RlZmluZSBUX1VfU0hPUlQJMgotI2RlZmluZSBUUF9TSE9SVAkzCi0jZGVmaW5lIFRfSU5UCQk0Ci0jZGVmaW5lIFRfVV9JTlQJCTUKLSNkZWZpbmUgVFBfSU5UCQk2Ci0jZGVmaW5lIFRfTE9ORwkJNwotI2RlZmluZSBUX1VfTE9ORwk4Ci0jZGVmaW5lIFRQX0xPTkcJCTkKLSNkZWZpbmUgVF9MTE9ORwkJMTAKLSNkZWZpbmUgVF9VX0xMT05HCTExCi0jZGVmaW5lIFRQX0xMT05HCTEyCi0jZGVmaW5lIFRfRE9VQkxFCTEzCi0jZGVmaW5lIFRfTE9OR19ET1VCTEUJMTQKLSNkZWZpbmUgVFBfQ0hBUgkJMTUKLSNkZWZpbmUgVFBfVk9JRAkJMTYKLSNkZWZpbmUgVF9QVFJJTlQJMTcKLSNkZWZpbmUgVFBfUFRSSU5UCTE4Ci0jZGVmaW5lIFRfU0laRUlOVAkxOQotI2RlZmluZSBUX1NTSVpFSU5UCTIwCi0jZGVmaW5lIFRQX1NTSVpFSU5UCTIxCi0jZGVmaW5lIFRfTUFYSU5UCTIyCi0jZGVmaW5lIFRfTUFYVUlOVAkyMwotI2RlZmluZSBUUF9NQVhJTlQJMjQKLQotLyoKLSAqIEZpbmQgYWxsIGFyZ3VtZW50cyB3aGVuIGEgcG9zaXRpb25hbCBwYXJhbWV0ZXIgaXMgZW5jb3VudGVyZWQuICBSZXR1cm5zIGEKLSAqIHRhYmxlLCBpbmRleGVkIGJ5IGFyZ3VtZW50IG51bWJlciwgb2YgcG9pbnRlcnMgdG8gZWFjaCBhcmd1bWVudHMuICBUaGUKLSAqIGluaXRpYWwgYXJndW1lbnQgdGFibGUgc2hvdWxkIGJlIGFuIGFycmF5IG9mIFNUQVRJQ19BUkdfVEJMX1NJWkUgZW50cmllcy4KLSAqIEl0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIG1tYXAtZWQgb25lIGlmIGl0IG92ZXJmbG93cyAobWFsbG9jIGNhbm5vdCBiZQotICogdXNlZCBzaW5jZSB3ZSBhcmUgYXR0ZW1wdGluZyB0byBtYWtlIHNucHJpbnRmIHRocmVhZCBzYWZlLCBhbmQgYWxsb2NhIGlzCi0gKiBwcm9ibGVtYXRpYyBzaW5jZSB3ZSBoYXZlIG5lc3RlZCBmdW5jdGlvbnMuLikKLSAqLwotc3RhdGljIHZvaWQKLV9fZmluZF9hcmd1bWVudHMoY29uc3QgY2hhciAqZm10MCwgdmFfbGlzdCBhcCwgdmFfbGlzdCAqKmFyZ3RhYmxlLAotICAgIHNpemVfdCAqYXJndGFibGVzaXopCi17Ci0JY2hhciAqZm10OwkvKiBmb3JtYXQgc3RyaW5nICovCi0JaW50IGNoOwkvKiBjaGFyYWN0ZXIgZnJvbSBmbXQgKi8KLQlpbnQgbiwgbjI7CS8qIGhhbmR5IGludGVnZXIgKHNob3J0IHRlcm0gdXNhZ2UpICovCi0JY2hhciAqY3A7CS8qIGhhbmR5IGNoYXIgcG9pbnRlciAoc2hvcnQgdGVybSB1c2FnZSkgKi8KLQlpbnQgZmxhZ3M7CS8qIGZsYWdzIGFzIGFib3ZlICovCi0JdW5zaWduZWQgY2hhciAqdHlwZXRhYmxlOyAvKiB0YWJsZSBvZiB0eXBlcyAqLwotCXVuc2lnbmVkIGNoYXIgc3RhdHR5cGV0YWJsZVtTVEFUSUNfQVJHX1RCTF9TSVpFXTsKLQlpbnQgdGFibGVzaXplOwkJLyogY3VycmVudCBzaXplIG9mIHR5cGUgdGFibGUgKi8KLQlpbnQgdGFibGVtYXg7CQkvKiBsYXJnZXN0IHVzZWQgaW5kZXggaW4gdGFibGUgKi8KLQlpbnQgbmV4dGFyZzsJCS8qIDEtYmFzZWQgYXJndW1lbnQgaW5kZXggKi8KLQl3Y2hhcl90IHdjOwotCXZvaWQqIHBzOwotCi0JLyoKLQkgKiBBZGQgYW4gYXJndW1lbnQgdHlwZSB0byB0aGUgdGFibGUsIGV4cGFuZGluZyBpZiBuZWNlc3NhcnkuCi0JICovCi0jZGVmaW5lIEFERFRZUEUodHlwZSkgXAotCSgobmV4dGFyZyA+PSB0YWJsZXNpemUpID8gXAotCQlfX2dyb3dfdHlwZV90YWJsZSgmdHlwZXRhYmxlLCAmdGFibGVzaXplKSA6IDAsIFwKLQkobmV4dGFyZyA+IHRhYmxlbWF4KSA/IHRhYmxlbWF4ID0gbmV4dGFyZyA6IDAsIFwKLQl0eXBldGFibGVbbmV4dGFyZysrXSA9IHR5cGUpCi0KLSNkZWZpbmUJQUREU0FSRygpIFwKLSAgICAgICAgKChmbGFncyZNQVhJTlQpID8gQUREVFlQRShUX01BWElOVCkgOiBcCi0JICAgICgoZmxhZ3MmUFRSSU5UKSA/IEFERFRZUEUoVF9QVFJJTlQpIDogXAotCSAgICAoKGZsYWdzJlNJWkVJTlQpID8gQUREVFlQRShUX1NTSVpFSU5UKSA6IFwKLQkgICAgKChmbGFncyZMTE9OR0lOVCkgPyBBRERUWVBFKFRfTExPTkcpIDogXAotCSAgICAoKGZsYWdzJkxPTkdJTlQpID8gQUREVFlQRShUX0xPTkcpIDogXAotCSAgICAoKGZsYWdzJlNIT1JUSU5UKSA/IEFERFRZUEUoVF9TSE9SVCkgOiBBRERUWVBFKFRfSU5UKSkpKSkpKQotCi0jZGVmaW5lCUFERFVBUkcoKSBcCi0gICAgICAgICgoZmxhZ3MmTUFYSU5UKSA/IEFERFRZUEUoVF9NQVhVSU5UKSA6IFwKLQkgICAgKChmbGFncyZQVFJJTlQpID8gQUREVFlQRShUX1BUUklOVCkgOiBcCi0JICAgICgoZmxhZ3MmU0laRUlOVCkgPyBBRERUWVBFKFRfU0laRUlOVCkgOiBcCi0JICAgICgoZmxhZ3MmTExPTkdJTlQpID8gQUREVFlQRShUX1VfTExPTkcpIDogXAotCSAgICAoKGZsYWdzJkxPTkdJTlQpID8gQUREVFlQRShUX1VfTE9ORykgOiBcCi0JICAgICgoZmxhZ3MmU0hPUlRJTlQpID8gQUREVFlQRShUX1VfU0hPUlQpIDogQUREVFlQRShUX1VfSU5UKSkpKSkpKQotCi0JLyoKLQkgKiBBZGQgKiBhcmd1bWVudHMgdG8gdGhlIHR5cGUgYXJyYXkuCi0JICovCi0jZGVmaW5lIEFEREFTVEVSKCkgXAotCW4yID0gMDsgXAotCWNwID0gZm10OyBcCi0Jd2hpbGUgKGlzX2RpZ2l0KCpjcCkpIHsgXAotCQluMiA9IDEwICogbjIgKyB0b19kaWdpdCgqY3ApOyBcCi0JCWNwKys7IFwKLQl9IFwKLQlpZiAoKmNwID09ICckJykgeyBcCi0JCWludCBob2xkID0gbmV4dGFyZzsgXAotCQluZXh0YXJnID0gbjI7IFwKLQkJQUREVFlQRShUX0lOVCk7IFwKLQkJbmV4dGFyZyA9IGhvbGQ7IFwKLQkJZm10ID0gKytjcDsgXAotCX0gZWxzZSB7IFwKLQkJQUREVFlQRShUX0lOVCk7IFwKLQl9Ci0JZm10ID0gKGNoYXIgKilmbXQwOwotCXR5cGV0YWJsZSA9IHN0YXR0eXBldGFibGU7Ci0JdGFibGVzaXplID0gU1RBVElDX0FSR19UQkxfU0laRTsKLQl0YWJsZW1heCA9IDA7Ci0JbmV4dGFyZyA9IDE7Ci0JbWVtc2V0KHR5cGV0YWJsZSwgVF9VTlVTRUQsIFNUQVRJQ19BUkdfVEJMX1NJWkUpOwotCW1lbXNldCgmcHMsIDAsIHNpemVvZihwcykpOwotCi0JLyoKLQkgKiBTY2FuIHRoZSBmb3JtYXQgZm9yIGNvbnZlcnNpb25zIChgJScgY2hhcmFjdGVyKS4KLQkgKi8KLQlmb3IgKDs7KSB7Ci0JCWNwID0gZm10OwotI2lmIDEgIC8qIEJJT05JQyAqLwotICAgICAgICAgICAgICAgIG4gPSAtMTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKHdjID0gKmZtdCkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAod2MgPT0gJyUnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGZtdCsrOwotICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0JCXdoaWxlICgobiA9IG1icnRvd2MoJndjLCBmbXQsIE1CX0NVUl9NQVgsICZwcykpID4gMCkgewotCQkJZm10ICs9IG47Ci0JCQlpZiAod2MgPT0gJyUnKSB7Ci0JCQkJZm10LS07Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCQlpZiAobiA8PSAwKQotCQkJZ290byBkb25lOwotCQlmbXQrKzsJCS8qIHNraXAgb3ZlciAnJScgKi8KLQotCQlmbGFncyA9IDA7Ci0KLXJmbGFnOgkJY2ggPSAqZm10Kys7Ci1yZXN3aXRjaDoJc3dpdGNoIChjaCkgewotCQljYXNlICcgJzoKLQkJY2FzZSAnIyc6Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICcqJzoKLQkJCUFEREFTVEVSKCk7Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICctJzoKLQkJY2FzZSAnKyc6Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICcuJzoKLQkJCWlmICgoY2ggPSAqZm10KyspID09ICcqJykgewotCQkJCUFEREFTVEVSKCk7Ci0JCQkJZ290byByZmxhZzsKLQkJCX0KLQkJCXdoaWxlIChpc19kaWdpdChjaCkpIHsKLQkJCQljaCA9ICpmbXQrKzsKLQkJCX0KLQkJCWdvdG8gcmVzd2l0Y2g7Ci0JCWNhc2UgJzAnOgotCQkJZ290byByZmxhZzsKLQkJY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6Ci0JCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKLQkJCW4gPSAwOwotCQkJZG8gewotCQkJCW4gPSAxMCAqIG4gKyB0b19kaWdpdChjaCk7Ci0JCQkJY2ggPSAqZm10Kys7Ci0JCQl9IHdoaWxlIChpc19kaWdpdChjaCkpOwotCQkJaWYgKGNoID09ICckJykgewotCQkJCW5leHRhcmcgPSBuOwotCQkJCWdvdG8gcmZsYWc7Ci0JCQl9Ci0JCQlnb3RvIHJlc3dpdGNoOwotI2lmZGVmIEZMT0FUSU5HX1BPSU5UCi0JCWNhc2UgJ0wnOgotCQkJZmxhZ3MgfD0gTE9OR0RCTDsKLQkJCWdvdG8gcmZsYWc7Ci0jZW5kaWYKLQkJY2FzZSAnaCc6Ci0JCQlpZiAoKmZtdCA9PSAnaCcpIHsKLQkJCQlmbXQrKzsKLQkJCQlmbGFncyB8PSBDSEFSSU5UOwotCQkJfSBlbHNlIHsKLQkJCQlmbGFncyB8PSBTSE9SVElOVDsKLQkJCX0KLQkJCWdvdG8gcmZsYWc7Ci0JCWNhc2UgJ2wnOgotCQkJaWYgKCpmbXQgPT0gJ2wnKSB7Ci0JCQkJZm10Kys7Ci0JCQkJZmxhZ3MgfD0gTExPTkdJTlQ7Ci0JCQl9IGVsc2UgewotCQkJCWZsYWdzIHw9IExPTkdJTlQ7Ci0JCQl9Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICdxJzoKLQkJCWZsYWdzIHw9IExMT05HSU5UOwotCQkJZ290byByZmxhZzsKLQkJY2FzZSAndCc6Ci0JCQlmbGFncyB8PSBQVFJJTlQ7Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICd6JzoKLQkJCWZsYWdzIHw9IFNJWkVJTlQ7Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICdjJzoKLQkJCUFERFRZUEUoVF9JTlQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ0QnOgotCQkJZmxhZ3MgfD0gTE9OR0lOVDsKLQkJCS8qRkFMTFRIUk9VR0gqLwotCQljYXNlICdkJzoKLQkJY2FzZSAnaSc6Ci0JCQlBRERTQVJHKCk7Ci0JCQlicmVhazsKLSNpZmRlZiBGTE9BVElOR19QT0lOVAotCQljYXNlICdlJzoKLQkJY2FzZSAnRSc6Ci0JCWNhc2UgJ2YnOgotCQljYXNlICdnJzoKLQkJY2FzZSAnRyc6Ci0JCQlpZiAoZmxhZ3MgJiBMT05HREJMKQotCQkJCUFERFRZUEUoVF9MT05HX0RPVUJMRSk7Ci0JCQllbHNlCi0JCQkJQUREVFlQRShUX0RPVUJMRSk7Ci0JCQlicmVhazsKLSNlbmRpZiAvKiBGTE9BVElOR19QT0lOVCAqLwotCQljYXNlICduJzoKLQkJCWlmIChmbGFncyAmIExMT05HSU5UKQotCQkJCUFERFRZUEUoVFBfTExPTkcpOwotCQkJZWxzZSBpZiAoZmxhZ3MgJiBMT05HSU5UKQotCQkJCUFERFRZUEUoVFBfTE9ORyk7Ci0JCQllbHNlIGlmIChmbGFncyAmIFNIT1JUSU5UKQotCQkJCUFERFRZUEUoVFBfU0hPUlQpOwotCQkJZWxzZSBpZiAoZmxhZ3MgJiBQVFJJTlQpCi0JCQkJQUREVFlQRShUUF9QVFJJTlQpOwotCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSVpFSU5UKQotCQkJCUFERFRZUEUoVFBfU1NJWkVJTlQpOwotCQkJZWxzZSBpZiAoZmxhZ3MgJiBNQVhJTlQpCi0JCQkJQUREVFlQRShUUF9NQVhJTlQpOwotCQkJZWxzZQotCQkJCUFERFRZUEUoVFBfSU5UKTsKLQkJCWNvbnRpbnVlOwkvKiBubyBvdXRwdXQgKi8KLQkJY2FzZSAnTyc6Ci0JCQlmbGFncyB8PSBMT05HSU5UOwotCQkJLypGQUxMVEhST1VHSCovCi0JCWNhc2UgJ28nOgotCQkJQUREVUFSRygpOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ3AnOgotCQkJQUREVFlQRShUUF9WT0lEKTsKLQkJCWJyZWFrOwotCQljYXNlICdzJzoKLQkJCUFERFRZUEUoVFBfQ0hBUik7Ci0JCQlicmVhazsKLQkJY2FzZSAnVSc6Ci0JCQlmbGFncyB8PSBMT05HSU5UOwotCQkJLypGQUxMVEhST1VHSCovCi0JCWNhc2UgJ3UnOgotCQljYXNlICdYJzoKLQkJY2FzZSAneCc6Ci0JCQlBRERVQVJHKCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoJLyogIiU/IiBwcmludHMgPywgdW5sZXNzID8gaXMgTlVMICovCi0JCQlpZiAoY2ggPT0gJ1wwJykKLQkJCQlnb3RvIGRvbmU7Ci0JCQlicmVhazsKLQkJfQotCX0KLWRvbmU6Ci0JLyoKLQkgKiBCdWlsZCB0aGUgYXJndW1lbnQgdGFibGUuCi0JICovCi0JaWYgKHRhYmxlbWF4ID49IFNUQVRJQ19BUkdfVEJMX1NJWkUpIHsKLQkJKmFyZ3RhYmxlc2l6ID0gc2l6ZW9mICh2YV9saXN0KSAqICh0YWJsZW1heCArIDEpOwotCQkqYXJndGFibGUgPSAodmFfbGlzdCAqKW1tYXAoTlVMTCwgKmFyZ3RhYmxlc2l6LAotCQkgICAgUFJPVF9XUklURXxQUk9UX1JFQUQsIE1BUF9BTk9OfE1BUF9QUklWQVRFLCAtMSwgMCk7Ci0JfQotCi0jaWYgMAotCS8qIFhYWCBpcyB0aGlzIHJlcXVpcmVkPyAqLwotCSgqYXJndGFibGUpIFswXSA9IE5VTEw7Ci0jZW5kaWYKLQlmb3IgKG4gPSAxOyBuIDw9IHRhYmxlbWF4OyBuKyspIHsKLQkJdmFfY29weSgoKmFyZ3RhYmxlKVtuXSwgYXApOwotCQlzd2l0Y2ggKHR5cGV0YWJsZVtuXSkgewotCQljYXNlIFRfVU5VU0VEOgotCQkJKHZvaWQpIHZhX2FyZyhhcCwgaW50KTsKLQkJCWJyZWFrOwotCQljYXNlIFRfU0hPUlQ6Ci0JCQkodm9pZCkgdmFfYXJnKGFwLCBpbnQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVF9VX1NIT1JUOgotCQkJKHZvaWQpIHZhX2FyZyhhcCwgaW50KTsKLQkJCWJyZWFrOwotCQljYXNlIFRQX1NIT1JUOgotCQkJKHZvaWQpIHZhX2FyZyhhcCwgc2hvcnQgKik7Ci0JCQlicmVhazsKLQkJY2FzZSBUX0lOVDoKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIGludCk7Ci0JCQlicmVhazsKLQkJY2FzZSBUX1VfSU5UOgotCQkJKHZvaWQpIHZhX2FyZyhhcCwgdW5zaWduZWQgaW50KTsKLQkJCWJyZWFrOwotCQljYXNlIFRQX0lOVDoKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIGludCAqKTsKLQkJCWJyZWFrOwotCQljYXNlIFRfTE9ORzoKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIGxvbmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVF9VX0xPTkc6Ci0JCQkodm9pZCkgdmFfYXJnKGFwLCB1bnNpZ25lZCBsb25nKTsKLQkJCWJyZWFrOwotCQljYXNlIFRQX0xPTkc6Ci0JCQkodm9pZCkgdmFfYXJnKGFwLCBsb25nICopOwotCQkJYnJlYWs7Ci0JCWNhc2UgVF9MTE9ORzoKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIGxvbmcgbG9uZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBUX1VfTExPTkc6Ci0JCQkodm9pZCkgdmFfYXJnKGFwLCB1bnNpZ25lZCBsb25nIGxvbmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVFBfTExPTkc6Ci0JCQkodm9pZCkgdmFfYXJnKGFwLCBsb25nIGxvbmcgKik7Ci0JCQlicmVhazsKLQkJY2FzZSBUX0RPVUJMRToKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIGRvdWJsZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBUX0xPTkdfRE9VQkxFOgotCQkJKHZvaWQpIHZhX2FyZyhhcCwgbG9uZyBkb3VibGUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVFBfQ0hBUjoKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIGNoYXIgKik7Ci0JCQlicmVhazsKLQkJY2FzZSBUUF9WT0lEOgotCQkJKHZvaWQpIHZhX2FyZyhhcCwgdm9pZCAqKTsKLQkJCWJyZWFrOwotCQljYXNlIFRfUFRSSU5UOgotCQkJKHZvaWQpIHZhX2FyZyhhcCwgcHRyZGlmZl90KTsKLQkJCWJyZWFrOwotCQljYXNlIFRQX1BUUklOVDoKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIHB0cmRpZmZfdCAqKTsKLQkJCWJyZWFrOwotCQljYXNlIFRfU0laRUlOVDoKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIHNpemVfdCk7Ci0JCQlicmVhazsKLQkJY2FzZSBUX1NTSVpFSU5UOgotCQkJKHZvaWQpIHZhX2FyZyhhcCwgc3NpemVfdCk7Ci0JCQlicmVhazsKLQkJY2FzZSBUUF9TU0laRUlOVDoKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIHNzaXplX3QgKik7Ci0JCQlicmVhazsKLQkJY2FzZSBUUF9NQVhJTlQ6Ci0JCQkodm9pZCkgdmFfYXJnKGFwLCBpbnRtYXhfdCAqKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKHR5cGV0YWJsZSAhPSBOVUxMICYmIHR5cGV0YWJsZSAhPSBzdGF0dHlwZXRhYmxlKSB7Ci0JCW11bm1hcCh0eXBldGFibGUsICphcmd0YWJsZXNpeik7Ci0JCXR5cGV0YWJsZSA9IE5VTEw7Ci0JfQotfQotCi0vKgotICogSW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIHR5cGUgdGFibGUuCi0gKi8KLXN0YXRpYyBpbnQKLV9fZ3Jvd190eXBlX3RhYmxlKHVuc2lnbmVkIGNoYXIgKip0eXBldGFibGUsIGludCAqdGFibGVzaXplKQotewotCXVuc2lnbmVkIGNoYXIgKm9sZHRhYmxlID0gKnR5cGV0YWJsZTsKLQlpbnQgbmV3c2l6ZSA9ICp0YWJsZXNpemUgKiAyOwotCi0JaWYgKCp0YWJsZXNpemUgPT0gU1RBVElDX0FSR19UQkxfU0laRSkgewotCQkqdHlwZXRhYmxlID0gKHVuc2lnbmVkIGNoYXIgKiltbWFwKE5VTEwsCi0JCSAgICBzaXplb2YgKHVuc2lnbmVkIGNoYXIpICogbmV3c2l6ZSwgUFJPVF9XUklURXxQUk9UX1JFQUQsCi0JCSAgICBNQVBfQU5PTnxNQVBfUFJJVkFURSwgLTEsIDApOwotCQkvKiBYWFggdW5jaGVja2VkICovCi0JCW1lbWNweSggKnR5cGV0YWJsZSwgb2xkdGFibGUsICp0YWJsZXNpemUpOwotCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGNoYXIgKm5ldyA9ICh1bnNpZ25lZCBjaGFyICopbW1hcChOVUxMLAotCQkgICAgc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSAqIG5ld3NpemUsIFBST1RfV1JJVEV8UFJPVF9SRUFELAotCQkgICAgTUFQX0FOT058TUFQX1BSSVZBVEUsIC0xLCAwKTsKLQkJbWVtbW92ZShuZXcsICp0eXBldGFibGUsICp0YWJsZXNpemUpOwotCQltdW5tYXAoKnR5cGV0YWJsZSwgKnRhYmxlc2l6ZSk7Ci0JCSp0eXBldGFibGUgPSBuZXc7Ci0JCS8qIFhYWCB1bmNoZWNrZWQgKi8KLQl9Ci0JbWVtc2V0KCp0eXBldGFibGUgKyAqdGFibGVzaXplLCBUX1VOVVNFRCwgKG5ld3NpemUgLSAqdGFibGVzaXplKSk7Ci0KLQkqdGFibGVzaXplID0gbmV3c2l6ZTsKLQlyZXR1cm4oMCk7Ci19Ci0KLQotI2lmZGVmIEZMT0FUSU5HX1BPSU5UCi0KLWV4dGVybiBjaGFyICpfX2R0b2EoZG91YmxlLCBpbnQsIGludCwgaW50ICosIGludCAqLCBjaGFyICoqKTsKLQotc3RhdGljIGNoYXIgKgotY3Z0KGRvdWJsZSB2YWx1ZSwgaW50IG5kaWdpdHMsIGludCBmbGFncywgY2hhciAqc2lnbiwgaW50ICpkZWNwdCwgaW50IGNoLAotICAgIGludCAqbGVuZ3RoKQotewotCWludCBtb2RlLCBkc2duOwotCWNoYXIgKmRpZ2l0cywgKmJwLCAqcnZlOwotCi0JaWYgKGNoID09ICdmJykgewotCQltb2RlID0gMzsJCS8qIG5kaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgKi8KLQl9IGVsc2UgewotCQkvKiBUbyBvYnRhaW4gbmRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBmb3IgdGhlICdlJwotCQkgKiBhbmQgJ0UnIGZvcm1hdHMsIHJvdW5kIHRvIG5kaWdpdHMgKyAxIHNpZ25pZmljYW50Ci0JCSAqIGZpZ3VyZXMuCi0JCSAqLwotCQlpZiAoY2ggPT0gJ2UnIHx8IGNoID09ICdFJykgewotCQkJbmRpZ2l0cysrOwotCQl9Ci0JCW1vZGUgPSAyOwkJLyogbmRpZ2l0cyBzaWduaWZpY2FudCBkaWdpdHMgKi8KLQl9Ci0KLQlpZiAodmFsdWUgPCAwKSB7Ci0JCXZhbHVlID0gLXZhbHVlOwotCQkqc2lnbiA9ICctJzsKLQl9IGVsc2UKLQkJKnNpZ24gPSAnXDAwMCc7Ci0JZGlnaXRzID0gX19kdG9hKHZhbHVlLCBtb2RlLCBuZGlnaXRzLCBkZWNwdCwgJmRzZ24sICZydmUpOwotCWlmICgoY2ggIT0gJ2cnICYmIGNoICE9ICdHJykgfHwgZmxhZ3MgJiBBTFQpIHsJLyogUHJpbnQgdHJhaWxpbmcgemVyb3MgKi8KLQkJYnAgPSBkaWdpdHMgKyBuZGlnaXRzOwotCQlpZiAoY2ggPT0gJ2YnKSB7Ci0JCQlpZiAoKmRpZ2l0cyA9PSAnMCcgJiYgdmFsdWUpCi0JCQkJKmRlY3B0ID0gLW5kaWdpdHMgKyAxOwotCQkJYnAgKz0gKmRlY3B0OwotCQl9Ci0JCWlmICh2YWx1ZSA9PSAwKQkvKiBrbHVkZ2UgZm9yIF9fZHRvYSBpcnJlZ3VsYXJpdHkgKi8KLQkJCXJ2ZSA9IGJwOwotCQl3aGlsZSAocnZlIDwgYnApCi0JCQkqcnZlKysgPSAnMCc7Ci0JfQotCSpsZW5ndGggPSBydmUgLSBkaWdpdHM7Ci0JcmV0dXJuIChkaWdpdHMpOwotfQotCi1zdGF0aWMgaW50Ci1leHBvbmVudChjaGFyICpwMCwgaW50IGV4cCwgaW50IGZtdGNoKQotewotCWNoYXIgKnAsICp0OwotCWNoYXIgZXhwYnVmW01BWEVYUF07Ci0KLQlwID0gcDA7Ci0JKnArKyA9IGZtdGNoOwotCWlmIChleHAgPCAwKSB7Ci0JCWV4cCA9IC1leHA7Ci0JCSpwKysgPSAnLSc7Ci0JfQotCWVsc2UKLQkJKnArKyA9ICcrJzsKLQl0ID0gZXhwYnVmICsgTUFYRVhQOwotCWlmIChleHAgPiA5KSB7Ci0JCWRvIHsKLQkJCSotLXQgPSB0b19jaGFyKGV4cCAlIDEwKTsKLQkJfSB3aGlsZSAoKGV4cCAvPSAxMCkgPiA5KTsKLQkJKi0tdCA9IHRvX2NoYXIoZXhwKTsKLQkJZm9yICg7IHQgPCBleHBidWYgKyBNQVhFWFA7ICpwKysgPSAqdCsrKTsKLQl9Ci0JZWxzZSB7Ci0JCSpwKysgPSAnMCc7Ci0JCSpwKysgPSB0b19jaGFyKGV4cCk7Ci0JfQotCXJldHVybiAocCAtIHAwKTsKLX0KLQotCi0vKiBCSU9OSUMgKi8KLSNpbmNsdWRlIDxtYWNoaW5lL2llZWUuaD4KLXR5cGVkZWYgdW5pb24gewotICAgIGRvdWJsZSAgICAgICAgICAgICAgZDsKLSAgICBzdHJ1Y3QgaWVlZV9kb3VibGUgIGk7Ci19IGllZWVfdTsKLQotc3RhdGljIGludAotX215X2lzaW5mIChkb3VibGUgIHZhbHVlKQotewotICAgIGllZWVfdSAgIHU7Ci0KLSAgICB1LmQgPSB2YWx1ZTsKLSAgICByZXR1cm4gKHUuaS5kYmxfZXhwID09IDIwNDcgJiYgdS5pLmRibF9mcmFjaCA9PSAwICYmIHUuaS5kYmxfZnJhY2wgPT0gMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLV9teV9pc25hbiAoZG91YmxlICB2YWx1ZSkKLXsKLSAgICBpZWVlX3UgICB1OwotCi0gICAgdS5kID0gdmFsdWU7Ci0gICAgcmV0dXJuICh1LmkuZGJsX2V4cCA9PSAyMDQ3ICYmICh1LmkuZGJsX2ZyYWNoICE9IDAgfHwgdS5pLmRibF9mcmFjbCAhPSAwKSk7Ci19Ci0jZW5kaWYgLyogRkxPQVRJTkdfUE9JTlQgKi8KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vdmZzY2FuZi5jIGIvbGliYy9zdGRpby92ZnNjYW5mLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZjQwNGUuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby92ZnNjYW5mLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MDMgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHZmc2NhbmYuYyx2IDEuMjEgMjAwNi8wMS8xMyAyMTozMzoyOCBtaWxsZXJ0IEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi0jaWZkZWYgRkxPQVRJTkdfUE9JTlQKLSNpbmNsdWRlICJmbG9hdGlvLmgiCi0jZW5kaWYKLQotI2RlZmluZQlCVUYJCTUxMwkvKiBNYXhpbXVtIGxlbmd0aCBvZiBudW1lcmljIHN0cmluZy4gKi8KLQotLyoKLSAqIEZsYWdzIHVzZWQgZHVyaW5nIGNvbnZlcnNpb24uCi0gKi8KLSNkZWZpbmUJTE9ORwkJMHgwMDAwMQkvKiBsOiBsb25nIG9yIGRvdWJsZSAqLwotI2RlZmluZQlMT05HREJMCQkweDAwMDAyCS8qIEw6IGxvbmcgZG91YmxlOyB1bmltcGxlbWVudGVkICovCi0jZGVmaW5lCVNIT1JUCQkweDAwMDA0CS8qIGg6IHNob3J0ICovCi0jZGVmaW5lCVNIT1JUU0hPUlQJMHgwMDAwOAkvKiBoaDogOCBiaXQgaW50ZWdlciAqLwotI2RlZmluZSBMTE9ORwkJMHgwMDAxMAkvKiBsbDogbG9uZyBsb25nICgrIGRlcHJlY2F0ZWQgcTogcXVhZCkgKi8KLSNkZWZpbmUJUE9JTlRFUgkJMHgwMDAyMAkvKiBwOiB2b2lkICogKGFzIGhleCkgKi8KLSNkZWZpbmUJU0laRUlOVAkJMHgwMDA0MAkvKiB6OiAoc2lnbmVkKSBzaXplX3QgKi8KLSNkZWZpbmUJTUFYSU5UCQkweDAwMDgwCS8qIGo6IGludG1heF90ICovCi0jZGVmaW5lCVBUUklOVAkJMHgwMDEwMAkvKiB0OiBwdHJkaWZmX3QgKi8KLSNkZWZpbmUJTk9TS0lQCQkweDAwMjAwCS8qIFsgb3IgYzogZG8gbm90IHNraXAgYmxhbmtzICovCi0jZGVmaW5lCVNVUFBSRVNTCTB4MDA0MDAJLyogKjogc3VwcHJlc3MgYXNzaWdubWVudCAqLwotI2RlZmluZQlVTlNJR05FRAkweDAwODAwCS8qICVbb3VweFhdIGNvbnZlcnNpb25zICovCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGFyZSB1c2VkIGluIG51bWVyaWMgY29udmVyc2lvbnMgb25seToKLSAqIFNJR05PSywgSEFWRVNJR04sIE5ESUdJVFMsIERQVE9LLCBhbmQgRVhQT0sgYXJlIGZvciBmbG9hdGluZyBwb2ludDsKLSAqIFNJR05PSywgSEFWRVNJR04sIE5ESUdJVFMsIFBGWE9LLCBhbmQgTlpESUdJVFMgYXJlIGZvciBpbnRlZ3JhbC4KLSAqLwotI2RlZmluZQlTSUdOT0sJCTB4MDEwMDAJLyogKy8tIGlzIChzdGlsbCkgbGVnYWwgKi8KLSNkZWZpbmUJSEFWRVNJR04JMHgwMjAwMAkvKiBzaWduIGRldGVjdGVkICovCi0jZGVmaW5lCU5ESUdJVFMJCTB4MDQwMDAJLyogbm8gZGlnaXRzIGRldGVjdGVkICovCi0KLSNkZWZpbmUJRFBUT0sJCTB4MDgwMDAJLyogKGZsb2F0KSBkZWNpbWFsIHBvaW50IGlzIHN0aWxsIGxlZ2FsICovCi0jZGVmaW5lCUVYUE9LCQkweDEwMDAwCS8qIChmbG9hdCkgZXhwb25lbnQgKGUrMywgZXRjKSBzdGlsbCBsZWdhbCAqLwotCi0jZGVmaW5lCVBGWE9LCQkweDA4MDAwCS8qIDB4IHByZWZpeCBpcyAoc3RpbGwpIGxlZ2FsICovCi0jZGVmaW5lCU5aRElHSVRTCTB4MTAwMDAJLyogbm8gemVybyBkaWdpdHMgZGV0ZWN0ZWQgKi8KLQotLyoKLSAqIENvbnZlcnNpb24gdHlwZXMuCi0gKi8KLSNkZWZpbmUJQ1RfQ0hBUgkJMAkvKiAlYyBjb252ZXJzaW9uICovCi0jZGVmaW5lCUNUX0NDTAkJMQkvKiAlWy4uLl0gY29udmVyc2lvbiAqLwotI2RlZmluZQlDVF9TVFJJTkcJMgkvKiAlcyBjb252ZXJzaW9uICovCi0jZGVmaW5lCUNUX0lOVAkJMwkvKiBpbnRlZ2VyLCBpLmUuLCBzdHJ0b2ltYXggb3Igc3RydG91bWF4ICovCi0jZGVmaW5lCUNUX0ZMT0FUCTQJLyogZmxvYXRpbmcsIGkuZS4sIHN0cnRvZCAqLwotCi0jZGVmaW5lIHVfY2hhciB1bnNpZ25lZCBjaGFyCi0jZGVmaW5lIHVfbG9uZyB1bnNpZ25lZCBsb25nCi0KLXN0YXRpYyB1X2NoYXIgKl9fc2NjbChjaGFyICosIHVfY2hhciAqKTsKLQotI2lmICFkZWZpbmVkKFZGU0NBTkYpCi0jZGVmaW5lIFZGU0NBTkYJdmZzY2FuZgotI2VuZGlmCi0KLS8qCi0gKiB2ZnNjYW5mCi0gKi8KLWludAotVkZTQ0FORihGSUxFICpmcCwgY29uc3QgY2hhciAqZm10MCwgX192YV9saXN0IGFwKQotewotCXVfY2hhciAqZm10ID0gKHVfY2hhciAqKWZtdDA7Ci0JaW50IGM7CQkvKiBjaGFyYWN0ZXIgZnJvbSBmb3JtYXQsIG9yIGNvbnZlcnNpb24gKi8KLQlzaXplX3Qgd2lkdGg7CS8qIGZpZWxkIHdpZHRoLCBvciAwICovCi0JY2hhciAqcDsJLyogcG9pbnRzIGludG8gYWxsIGtpbmRzIG9mIHN0cmluZ3MgKi8KLQlpbnQgbjsJCS8qIGhhbmR5IGludGVnZXIgKi8KLQlpbnQgZmxhZ3M7CS8qIGZsYWdzIGFzIGRlZmluZWQgYWJvdmUgKi8KLQljaGFyICpwMDsJLyogc2F2ZXMgb3JpZ2luYWwgdmFsdWUgb2YgcCB3aGVuIG5lY2Vzc2FyeSAqLwotCWludCBuYXNzaWduZWQ7CQkvKiBudW1iZXIgb2YgZmllbGRzIGFzc2lnbmVkICovCi0JaW50IG5yZWFkOwkJLyogbnVtYmVyIG9mIGNoYXJhY3RlcnMgY29uc3VtZWQgZnJvbSBmcCAqLwotCWludCBiYXNlOwkJLyogYmFzZSBhcmd1bWVudCB0byBzdHJ0b2ltYXgvc3RydG91aW1heCAqLwotCWNoYXIgY2NsdGFiWzI1Nl07CS8qIGNoYXJhY3RlciBjbGFzcyB0YWJsZSBmb3IgJVsuLi5dICovCi0JY2hhciBidWZbQlVGXTsJCS8qIGJ1ZmZlciBmb3IgbnVtZXJpYyBjb252ZXJzaW9ucyAqLwotCi0JLyogYGJhc2VmaXgnIGlzIHVzZWQgdG8gYXZvaWQgYGlmJyB0ZXN0cyBpbiB0aGUgaW50ZWdlciBzY2FubmVyICovCi0Jc3RhdGljIHNob3J0IGJhc2VmaXhbMTddID0KLQkJeyAxMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYgfTsKLQotCUZMT0NLRklMRShmcCk7Ci0JX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOwotCi0JbmFzc2lnbmVkID0gMDsKLQlucmVhZCA9IDA7Ci0JYmFzZSA9IDA7CQkvKiBYWFgganVzdCB0byBrZWVwIGdjYyBoYXBweSAqLwotCWZvciAoOzspIHsKLQkJYyA9ICpmbXQrKzsKLQkJaWYgKGMgPT0gMCkgewotCQkJRlVOTE9DS0ZJTEUoZnApOwotCQkJcmV0dXJuIChuYXNzaWduZWQpOwotCQl9Ci0JCWlmIChpc3NwYWNlKGMpKSB7Ci0JCQl3aGlsZSAoKGZwLT5fciA+IDAgfHwgX19zcmVmaWxsKGZwKSA9PSAwKSAmJgotCQkJICAgIGlzc3BhY2UoKmZwLT5fcCkpCi0JCQkJbnJlYWQrKywgZnAtPl9yLS0sIGZwLT5fcCsrOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGMgIT0gJyUnKQotCQkJZ290byBsaXRlcmFsOwotCQl3aWR0aCA9IDA7Ci0JCWZsYWdzID0gMDsKLQkJLyoKLQkJICogc3dpdGNoIG9uIHRoZSBmb3JtYXQuICBjb250aW51ZSBpZiBkb25lOwotCQkgKiBicmVhayBvbmNlIGZvcm1hdCB0eXBlIGlzIGRlcml2ZWQuCi0JCSAqLwotYWdhaW46CQljID0gKmZtdCsrOwotCQlzd2l0Y2ggKGMpIHsKLQkJY2FzZSAnJSc6Ci1saXRlcmFsOgotCQkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpCi0JCQkJZ290byBpbnB1dF9mYWlsdXJlOwotCQkJaWYgKCpmcC0+X3AgIT0gYykKLQkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7Ci0JCQlmcC0+X3ItLSwgZnAtPl9wKys7Ci0JCQlucmVhZCsrOwotCQkJY29udGludWU7Ci0KLQkJY2FzZSAnKic6Ci0JCQlmbGFncyB8PSBTVVBQUkVTUzsKLQkJCWdvdG8gYWdhaW47Ci0JCWNhc2UgJ2onOgotCQkJZmxhZ3MgfD0gTUFYSU5UOwotCQkJZ290byBhZ2FpbjsKLQkJY2FzZSAnTCc6Ci0JCQlmbGFncyB8PQotCQkJCSgqZm10ID09ICdkJykgPyBMTE9ORyA6Ci0JCQkJKCpmbXQgPT0gJ2knKSA/IExMT05HIDoKLQkJCQkoKmZtdCA9PSAnbycpID8gTExPTkcgOgotCQkJCSgqZm10ID09ICd1JykgPyBMTE9ORyA6Ci0JCQkJKCpmbXQgPT0gJ3gnKSA/IExMT05HIDoKLQkJCQlMT05HREJMOwotCQkJZ290byBhZ2FpbjsKLQkJY2FzZSAnaCc6Ci0JCQlpZiAoKmZtdCA9PSAnaCcpIHsKLQkJCQlmbXQrKzsKLQkJCQlmbGFncyB8PSBTSE9SVFNIT1JUOwotCQkJfSBlbHNlIHsKLQkJCQlmbGFncyB8PSBTSE9SVDsKLQkJCX0KLQkJCWdvdG8gYWdhaW47Ci0JCWNhc2UgJ2wnOgotCQkJaWYgKCpmbXQgPT0gJ2wnKSB7Ci0JCQkJZm10Kys7Ci0JCQkJZmxhZ3MgfD0gTExPTkc7Ci0JCQl9IGVsc2UgewotCQkJCWZsYWdzIHw9IExPTkc7Ci0JCQl9Ci0JCQlnb3RvIGFnYWluOwotCQljYXNlICdxJzoKLQkJCWZsYWdzIHw9IExMT05HOwkJLyogZGVwcmVjYXRlZCAqLwotCQkJZ290byBhZ2FpbjsKLQkJY2FzZSAndCc6Ci0JCQlmbGFncyB8PSBQVFJJTlQ7Ci0JCQlnb3RvIGFnYWluOwotCQljYXNlICd6JzoKLQkJCWZsYWdzIHw9IFNJWkVJTlQ7Ci0JCQlnb3RvIGFnYWluOwotCi0JCWNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKLQkJY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgotCQkJd2lkdGggPSB3aWR0aCAqIDEwICsgYyAtICcwJzsKLQkJCWdvdG8gYWdhaW47Ci0KLQkJLyoKLQkJICogQ29udmVyc2lvbnMuCi0JCSAqIFRob3NlIG1hcmtlZCBgY29tcGF0JyBhcmUgZm9yIDQuWzEyM11CU0QgY29tcGF0aWJpbGl0eS4KLQkJICoKLQkJICogKEFjY29yZGluZyB0byBBTlNJLCBFIGFuZCBYIGZvcm1hdHMgYXJlIHN1cHBvc2VkCi0JCSAqIHRvIHRoZSBzYW1lIGFzIGUgYW5kIHguICBTb3JyeSBhYm91dCB0aGF0LikKLQkJICovCi0JCWNhc2UgJ0QnOgkvKiBjb21wYXQgKi8KLQkJCWZsYWdzIHw9IExPTkc7Ci0JCQkvKiBGQUxMVEhST1VHSCAqLwotCQljYXNlICdkJzoKLQkJCWMgPSBDVF9JTlQ7Ci0JCQliYXNlID0gMTA7Ci0JCQlicmVhazsKLQotCQljYXNlICdpJzoKLQkJCWMgPSBDVF9JTlQ7Ci0JCQliYXNlID0gMDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgJ08nOgkvKiBjb21wYXQgKi8KLQkJCWZsYWdzIHw9IExPTkc7Ci0JCQkvKiBGQUxMVEhST1VHSCAqLwotCQljYXNlICdvJzoKLQkJCWMgPSBDVF9JTlQ7Ci0JCQlmbGFncyB8PSBVTlNJR05FRDsKLQkJCWJhc2UgPSA4OwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAndSc6Ci0JCQljID0gQ1RfSU5UOwotCQkJZmxhZ3MgfD0gVU5TSUdORUQ7Ci0JCQliYXNlID0gMTA7Ci0JCQlicmVhazsKLQotCQljYXNlICdYJzoKLQkJY2FzZSAneCc6Ci0JCQlmbGFncyB8PSBQRlhPSzsJLyogZW5hYmxlIDB4IHByZWZpeGluZyAqLwotCQkJYyA9IENUX0lOVDsKLQkJCWZsYWdzIHw9IFVOU0lHTkVEOwotCQkJYmFzZSA9IDE2OwotCQkJYnJlYWs7Ci0KLSNpZmRlZiBGTE9BVElOR19QT0lOVAotCQljYXNlICdFJzoKLQkJY2FzZSAnRyc6Ci0JCWNhc2UgJ2UnOiAKLQkJY2FzZSAnZic6IAotCQljYXNlICdnJzoKLQkJCWMgPSBDVF9GTE9BVDsKLQkJCWJyZWFrOwotI2VuZGlmCi0KLQkJY2FzZSAncyc6Ci0JCQljID0gQ1RfU1RSSU5HOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAnWyc6Ci0JCQlmbXQgPSBfX3NjY2woY2NsdGFiLCBmbXQpOwotCQkJZmxhZ3MgfD0gTk9TS0lQOwotCQkJYyA9IENUX0NDTDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgJ2MnOgotCQkJZmxhZ3MgfD0gTk9TS0lQOwotCQkJYyA9IENUX0NIQVI7Ci0JCQlicmVhazsKLQotCQljYXNlICdwJzoJLyogcG9pbnRlciBmb3JtYXQgaXMgbGlrZSBoZXggKi8KLQkJCWZsYWdzIHw9IFBPSU5URVIgfCBQRlhPSzsKLQkJCWMgPSBDVF9JTlQ7Ci0JCQlmbGFncyB8PSBVTlNJR05FRDsKLQkJCWJhc2UgPSAxNjsKLQkJCWJyZWFrOwotCi0JCWNhc2UgJ24nOgotCQkJaWYgKGZsYWdzICYgU1VQUFJFU1MpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoZmxhZ3MgJiBTSE9SVFNIT1JUKQotCQkJCSp2YV9hcmcoYXAsIF9fc2lnbmVkIGNoYXIgKikgPSBucmVhZDsKLQkJCWVsc2UgaWYgKGZsYWdzICYgU0hPUlQpCi0JCQkJKnZhX2FyZyhhcCwgc2hvcnQgKikgPSBucmVhZDsKLQkJCWVsc2UgaWYgKGZsYWdzICYgTE9ORykKLQkJCQkqdmFfYXJnKGFwLCBsb25nICopID0gbnJlYWQ7Ci0JCQllbHNlIGlmIChmbGFncyAmIFNJWkVJTlQpCi0JCQkJKnZhX2FyZyhhcCwgc3NpemVfdCAqKSA9IG5yZWFkOwotCQkJZWxzZSBpZiAoZmxhZ3MgJiBQVFJJTlQpCi0JCQkJKnZhX2FyZyhhcCwgcHRyZGlmZl90ICopID0gbnJlYWQ7Ci0JCQllbHNlIGlmIChmbGFncyAmIExMT05HKQotCQkJCSp2YV9hcmcoYXAsIGxvbmcgbG9uZyAqKSA9IG5yZWFkOwotCQkJZWxzZSBpZiAoZmxhZ3MgJiBNQVhJTlQpCi0JCQkJKnZhX2FyZyhhcCwgaW50bWF4X3QgKikgPSBucmVhZDsKLQkJCWVsc2UKLQkJCQkqdmFfYXJnKGFwLCBpbnQgKikgPSBucmVhZDsKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAqIERpc2d1c3RpbmcgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaGFja3MuCVhYWAotCQkgKi8KLQkJY2FzZSAnXDAnOgkvKiBjb21wYXQgKi8KLQkJCUZVTkxPQ0tGSUxFKGZwKTsKLQkJCXJldHVybiAoRU9GKTsKLQotCQlkZWZhdWx0OgkvKiBjb21wYXQgKi8KLQkJCWlmIChpc3VwcGVyKGMpKQotCQkJCWZsYWdzIHw9IExPTkc7Ci0JCQljID0gQ1RfSU5UOwotCQkJYmFzZSA9IDEwOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKgotCQkgKiBXZSBoYXZlIGEgY29udmVyc2lvbiB0aGF0IHJlcXVpcmVzIGlucHV0LgotCQkgKi8KLQkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpCi0JCQlnb3RvIGlucHV0X2ZhaWx1cmU7Ci0KLQkJLyoKLQkJICogQ29uc3VtZSBsZWFkaW5nIHdoaXRlIHNwYWNlLCBleGNlcHQgZm9yIGZvcm1hdHMKLQkJICogdGhhdCBzdXBwcmVzcyB0aGlzLgotCQkgKi8KLQkJaWYgKChmbGFncyAmIE5PU0tJUCkgPT0gMCkgewotCQkJd2hpbGUgKGlzc3BhY2UoKmZwLT5fcCkpIHsKLQkJCQlucmVhZCsrOwotCQkJCWlmICgtLWZwLT5fciA+IDApCi0JCQkJCWZwLT5fcCsrOwotCQkJCWVsc2UgaWYgKF9fc3JlZmlsbChmcCkpCi0JCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKLQkJCX0KLQkJCS8qCi0JCQkgKiBOb3RlIHRoYXQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBpbgotCQkJICogdGhlIGJ1ZmZlciwgc28gY29udmVyc2lvbnMgdGhhdCBkbyBub3Qgc2V0IE5PU0tJUAotCQkJICogY2Egbm8gbG9uZ2VyIHJlc3VsdCBpbiBhbiBpbnB1dCBmYWlsdXJlLgotCQkJICovCi0JCX0KLQotCQkvKgotCQkgKiBEbyB0aGUgY29udmVyc2lvbi4KLQkJICovCi0JCXN3aXRjaCAoYykgewotCi0JCWNhc2UgQ1RfQ0hBUjoKLQkJCS8qIHNjYW4gYXJiaXRyYXJ5IGNoYXJhY3RlcnMgKHNldHMgTk9TS0lQKSAqLwotCQkJaWYgKHdpZHRoID09IDApCi0JCQkJd2lkdGggPSAxOwotCQkJaWYgKGZsYWdzICYgU1VQUFJFU1MpIHsKLQkJCQlzaXplX3Qgc3VtID0gMDsKLQkJCQlmb3IgKDs7KSB7Ci0JCQkJCWlmICgobiA9IGZwLT5fcikgPCAoaW50KXdpZHRoKSB7Ci0JCQkJCQlzdW0gKz0gbjsKLQkJCQkJCXdpZHRoIC09IG47Ci0JCQkJCQlmcC0+X3AgKz0gbjsKLQkJCQkJCWlmIChfX3NyZWZpbGwoZnApKSB7Ci0JCQkJCQkJaWYgKHN1bSA9PSAwKQotCQkJCQkJCSAgICBnb3RvIGlucHV0X2ZhaWx1cmU7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlzdW0gKz0gd2lkdGg7Ci0JCQkJCQlmcC0+X3IgLT0gd2lkdGg7Ci0JCQkJCQlmcC0+X3AgKz0gd2lkdGg7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCQlucmVhZCArPSBzdW07Ci0JCQl9IGVsc2UgewotCQkJCXNpemVfdCByID0gZnJlYWQoKHZvaWQgKil2YV9hcmcoYXAsIGNoYXIgKiksIDEsCi0JCQkJICAgIHdpZHRoLCBmcCk7Ci0KLQkJCQlpZiAociA9PSAwKQotCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7Ci0JCQkJbnJlYWQgKz0gcjsKLQkJCQluYXNzaWduZWQrKzsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgQ1RfQ0NMOgotCQkJLyogc2NhbiBhIChub25lbXB0eSkgY2hhcmFjdGVyIGNsYXNzIChzZXRzIE5PU0tJUCkgKi8KLQkJCWlmICh3aWR0aCA9PSAwKQotCQkJCXdpZHRoID0gKHNpemVfdCl+MDsJLyogYGluZmluaXR5JyAqLwotCQkJLyogdGFrZSBvbmx5IHRob3NlIHRoaW5ncyBpbiB0aGUgY2xhc3MgKi8KLQkJCWlmIChmbGFncyAmIFNVUFBSRVNTKSB7Ci0JCQkJbiA9IDA7Ci0JCQkJd2hpbGUgKGNjbHRhYlsqZnAtPl9wXSkgewotCQkJCQluKyssIGZwLT5fci0tLCBmcC0+X3ArKzsKLQkJCQkJaWYgKC0td2lkdGggPT0gMCkKLQkJCQkJCWJyZWFrOwotCQkJCQlpZiAoZnAtPl9yIDw9IDAgJiYgX19zcmVmaWxsKGZwKSkgewotCQkJCQkJaWYgKG4gPT0gMCkKLQkJCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCQlpZiAobiA9PSAwKQotCQkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7Ci0JCQl9IGVsc2UgewotCQkJCXAwID0gcCA9IHZhX2FyZyhhcCwgY2hhciAqKTsKLQkJCQl3aGlsZSAoY2NsdGFiWypmcC0+X3BdKSB7Ci0JCQkJCWZwLT5fci0tOwotCQkJCQkqcCsrID0gKmZwLT5fcCsrOwotCQkJCQlpZiAoLS13aWR0aCA9PSAwKQotCQkJCQkJYnJlYWs7Ci0JCQkJCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKSB7Ci0JCQkJCQlpZiAocCA9PSBwMCkKLQkJCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCQluID0gcCAtIHAwOwotCQkJCWlmIChuID09IDApCi0JCQkJCWdvdG8gbWF0Y2hfZmFpbHVyZTsKLQkJCQkqcCA9ICdcMCc7Ci0JCQkJbmFzc2lnbmVkKys7Ci0JCQl9Ci0JCQlucmVhZCArPSBuOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBDVF9TVFJJTkc6Ci0JCQkvKiBsaWtlIENDTCwgYnV0IHplcm8tbGVuZ3RoIHN0cmluZyBPSywgJiBubyBOT1NLSVAgKi8KLQkJCWlmICh3aWR0aCA9PSAwKQotCQkJCXdpZHRoID0gKHNpemVfdCl+MDsKLQkJCWlmIChmbGFncyAmIFNVUFBSRVNTKSB7Ci0JCQkJbiA9IDA7Ci0JCQkJd2hpbGUgKCFpc3NwYWNlKCpmcC0+X3ApKSB7Ci0JCQkJCW4rKywgZnAtPl9yLS0sIGZwLT5fcCsrOwotCQkJCQlpZiAoLS13aWR0aCA9PSAwKQotCQkJCQkJYnJlYWs7Ci0JCQkJCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKQotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCW5yZWFkICs9IG47Ci0JCQl9IGVsc2UgewotCQkJCXAwID0gcCA9IHZhX2FyZyhhcCwgY2hhciAqKTsKLQkJCQl3aGlsZSAoIWlzc3BhY2UoKmZwLT5fcCkpIHsKLQkJCQkJZnAtPl9yLS07Ci0JCQkJCSpwKysgPSAqZnAtPl9wKys7Ci0JCQkJCWlmICgtLXdpZHRoID09IDApCi0JCQkJCQlicmVhazsKLQkJCQkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJKnAgPSAnXDAnOwotCQkJCW5yZWFkICs9IHAgLSBwMDsKLQkJCQluYXNzaWduZWQrKzsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCi0JCWNhc2UgQ1RfSU5UOgotCQkJLyogc2NhbiBhbiBpbnRlZ2VyIGFzIGlmIGJ5IHN0cnRvaW1heC9zdHJ0b3VtYXggKi8KLSNpZmRlZiBoYXJkd2F5Ci0JCQlpZiAod2lkdGggPT0gMCB8fCB3aWR0aCA+IHNpemVvZihidWYpIC0gMSkKLQkJCQl3aWR0aCA9IHNpemVvZihidWYpIC0gMTsKLSNlbHNlCi0JCQkvKiBzaXplX3QgaXMgdW5zaWduZWQsIGhlbmNlIHRoaXMgb3B0aW1pc2F0aW9uICovCi0JCQlpZiAoLS13aWR0aCA+IHNpemVvZihidWYpIC0gMikKLQkJCQl3aWR0aCA9IHNpemVvZihidWYpIC0gMjsKLQkJCXdpZHRoKys7Ci0jZW5kaWYKLQkJCWZsYWdzIHw9IFNJR05PSyB8IE5ESUdJVFMgfCBOWkRJR0lUUzsKLQkJCWZvciAocCA9IGJ1Zjsgd2lkdGg7IHdpZHRoLS0pIHsKLQkJCQljID0gKmZwLT5fcDsKLQkJCQkvKgotCQkJCSAqIFN3aXRjaCBvbiB0aGUgY2hhcmFjdGVyOyBgZ290byBvaycKLQkJCQkgKiBpZiB3ZSBhY2NlcHQgaXQgYXMgYSBwYXJ0IG9mIG51bWJlci4KLQkJCQkgKi8KLQkJCQlzd2l0Y2ggKGMpIHsKLQotCQkJCS8qCi0JCQkJICogVGhlIGRpZ2l0IDAgaXMgYWx3YXlzIGxlZ2FsLCBidXQgaXMKLQkJCQkgKiBzcGVjaWFsLiAgRm9yICVpIGNvbnZlcnNpb25zLCBpZiBubwotCQkJCSAqIGRpZ2l0cyAoemVybyBvciBub256ZXJvKSBoYXZlIGJlZW4KLQkJCQkgKiBzY2FubmVkIChvbmx5IHNpZ25zKSwgd2Ugd2lsbCBoYXZlCi0JCQkJICogYmFzZT09MC4gIEluIHRoYXQgY2FzZSwgd2Ugc2hvdWxkIHNldAotCQkJCSAqIGl0IHRvIDggYW5kIGVuYWJsZSAweCBwcmVmaXhpbmcuCi0JCQkJICogQWxzbywgaWYgd2UgaGF2ZSBub3Qgc2Nhbm5lZCB6ZXJvIGRpZ2l0cwotCQkJCSAqIGJlZm9yZSB0aGlzLCBkbyBub3QgdHVybiBvZmYgcHJlZml4aW5nCi0JCQkJICogKHNvbWVvbmUgZWxzZSB3aWxsIHR1cm4gaXQgb2ZmIGlmIHdlCi0JCQkJICogaGF2ZSBzY2FubmVkIGFueSBub256ZXJvIGRpZ2l0cykuCi0JCQkJICovCi0JCQkJY2FzZSAnMCc6Ci0JCQkJCWlmIChiYXNlID09IDApIHsKLQkJCQkJCWJhc2UgPSA4OwotCQkJCQkJZmxhZ3MgfD0gUEZYT0s7Ci0JCQkJCX0KLQkJCQkJaWYgKGZsYWdzICYgTlpESUdJVFMpCi0JCQkJCSAgICBmbGFncyAmPSB+KFNJR05PS3xOWkRJR0lUU3xORElHSVRTKTsKLQkJCQkJZWxzZQotCQkJCQkgICAgZmxhZ3MgJj0gfihTSUdOT0t8UEZYT0t8TkRJR0lUUyk7Ci0JCQkJCWdvdG8gb2s7Ci0KLQkJCQkvKiAxIHRocm91Z2ggNyBhbHdheXMgbGVnYWwgKi8KLQkJCQljYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOgotCQkJCWNhc2UgJzQnOiBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOgotCQkJCQliYXNlID0gYmFzZWZpeFtiYXNlXTsKLQkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBQRlhPSyB8IE5ESUdJVFMpOwotCQkJCQlnb3RvIG9rOwotCi0JCQkJLyogZGlnaXRzIDggYW5kIDkgb2sgaWZmIGRlY2ltYWwgb3IgaGV4ICovCi0JCQkJY2FzZSAnOCc6IGNhc2UgJzknOgotCQkJCQliYXNlID0gYmFzZWZpeFtiYXNlXTsKLQkJCQkJaWYgKGJhc2UgPD0gOCkKLQkJCQkJCWJyZWFrOwkvKiBub3QgbGVnYWwgaGVyZSAqLwotCQkJCQlmbGFncyAmPSB+KFNJR05PSyB8IFBGWE9LIHwgTkRJR0lUUyk7Ci0JCQkJCWdvdG8gb2s7Ci0KLQkJCQkvKiBsZXR0ZXJzIG9rIGlmZiBoZXggKi8KLQkJCQljYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOgotCQkJCWNhc2UgJ0QnOiBjYXNlICdFJzogY2FzZSAnRic6Ci0JCQkJY2FzZSAnYSc6IGNhc2UgJ2InOiBjYXNlICdjJzoKLQkJCQljYXNlICdkJzogY2FzZSAnZSc6IGNhc2UgJ2YnOgotCQkJCQkvKiBubyBuZWVkIHRvIGZpeCBiYXNlIGhlcmUgKi8KLQkJCQkJaWYgKGJhc2UgPD0gMTApCi0JCQkJCQlicmVhazsJLyogbm90IGxlZ2FsIGhlcmUgKi8KLQkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBQRlhPSyB8IE5ESUdJVFMpOwotCQkJCQlnb3RvIG9rOwotCi0JCQkJLyogc2lnbiBvayBvbmx5IGFzIGZpcnN0IGNoYXJhY3RlciAqLwotCQkJCWNhc2UgJysnOiBjYXNlICctJzoKLQkJCQkJaWYgKGZsYWdzICYgU0lHTk9LKSB7Ci0JCQkJCQlmbGFncyAmPSB+U0lHTk9LOwotCQkJCQkJZmxhZ3MgfD0gSEFWRVNJR047Ci0JCQkJCQlnb3RvIG9rOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCi0JCQkJLyoKLQkJCQkgKiB4IG9rIGlmZiBmbGFnIHN0aWxsIHNldCBhbmQgMm5kIGNoYXIgKG9yCi0JCQkJICogM3JkIGNoYXIgaWYgd2UgaGF2ZSBhIHNpZ24pLgotCQkJCSAqLwotCQkJCWNhc2UgJ3gnOiBjYXNlICdYJzoKLQkJCQkJaWYgKChmbGFncyAmIFBGWE9LKSAmJiBwID09Ci0JCQkJCSAgICBidWYgKyAxICsgISEoZmxhZ3MgJiBIQVZFU0lHTikpIHsKLQkJCQkJCWJhc2UgPSAxNjsJLyogaWYgJWkgKi8KLQkJCQkJCWZsYWdzICY9IH5QRlhPSzsKLQkJCQkJCWdvdG8gb2s7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJLyoKLQkJCQkgKiBJZiB3ZSBnb3QgaGVyZSwgYyBpcyBub3QgYSBsZWdhbCBjaGFyYWN0ZXIKLQkJCQkgKiBmb3IgYSBudW1iZXIuICBTdG9wIGFjY3VtdWxhdGluZyBkaWdpdHMuCi0JCQkJICovCi0JCQkJYnJlYWs7Ci0JCW9rOgotCQkJCS8qCi0JCQkJICogYyBpcyBsZWdhbDogc3RvcmUgaXQgYW5kIGxvb2sgYXQgdGhlIG5leHQuCi0JCQkJICovCi0JCQkJKnArKyA9IGM7Ci0JCQkJaWYgKC0tZnAtPl9yID4gMCkKLQkJCQkJZnAtPl9wKys7Ci0JCQkJZWxzZSBpZiAoX19zcmVmaWxsKGZwKSkKLQkJCQkJYnJlYWs7CQkvKiBFT0YgKi8KLQkJCX0KLQkJCS8qCi0JCQkgKiBJZiB3ZSBoYWQgb25seSBhIHNpZ24sIGl0IGlzIG5vIGdvb2Q7IHB1c2gKLQkJCSAqIGJhY2sgdGhlIHNpZ24uICBJZiB0aGUgbnVtYmVyIGVuZHMgaW4gYHgnLAotCQkJICogaXQgd2FzIFtzaWduXSAnMCcgJ3gnLCBzbyBwdXNoIGJhY2sgdGhlIHgKLQkJCSAqIGFuZCB0cmVhdCBpdCBhcyBbc2lnbl0gJzAnLgotCQkJICovCi0JCQlpZiAoZmxhZ3MgJiBORElHSVRTKSB7Ci0JCQkJaWYgKHAgPiBidWYpCi0JCQkJCSh2b2lkKSB1bmdldGMoKih1X2NoYXIgKiktLXAsIGZwKTsKLQkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7Ci0JCQl9Ci0JCQljID0gKCh1X2NoYXIgKilwKVstMV07Ci0JCQlpZiAoYyA9PSAneCcgfHwgYyA9PSAnWCcpIHsKLQkJCQktLXA7Ci0JCQkJKHZvaWQpIHVuZ2V0YyhjLCBmcCk7Ci0JCQl9Ci0JCQlpZiAoKGZsYWdzICYgU1VQUFJFU1MpID09IDApIHsKLQkJCQl1aW50bWF4X3QgcmVzOwotCi0JCQkJKnAgPSAnXDAnOwotCQkJCWlmIChmbGFncyAmIFVOU0lHTkVEKQotCQkJCQlyZXMgPSBzdHJ0b3VtYXgoYnVmLCBOVUxMLCBiYXNlKTsKLQkJCQllbHNlCi0JCQkJCXJlcyA9IHN0cnRvaW1heChidWYsIE5VTEwsIGJhc2UpOwotCQkJCWlmIChmbGFncyAmIFBPSU5URVIpCi0JCQkJCSp2YV9hcmcoYXAsIHZvaWQgKiopID0KLQkJCQkJICAgICh2b2lkICopKHVpbnRwdHJfdClyZXM7Ci0JCQkJZWxzZSBpZiAoZmxhZ3MgJiBNQVhJTlQpCi0JCQkJCSp2YV9hcmcoYXAsIGludG1heF90ICopID0gcmVzOwotCQkJCWVsc2UgaWYgKGZsYWdzICYgTExPTkcpCi0JCQkJCSp2YV9hcmcoYXAsIGxvbmcgbG9uZyAqKSA9IHJlczsKLQkJCQllbHNlIGlmIChmbGFncyAmIFNJWkVJTlQpCi0JCQkJCSp2YV9hcmcoYXAsIHNzaXplX3QgKikgPSByZXM7Ci0JCQkJZWxzZSBpZiAoZmxhZ3MgJiBQVFJJTlQpCi0JCQkJCSp2YV9hcmcoYXAsIHB0cmRpZmZfdCAqKSA9IHJlczsKLQkJCQllbHNlIGlmIChmbGFncyAmIExPTkcpCi0JCQkJCSp2YV9hcmcoYXAsIGxvbmcgKikgPSByZXM7Ci0JCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVCkKLQkJCQkJKnZhX2FyZyhhcCwgc2hvcnQgKikgPSByZXM7Ci0JCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVFNIT1JUKQotCQkJCQkqdmFfYXJnKGFwLCBfX3NpZ25lZCBjaGFyICopID0gcmVzOwotCQkJCWVsc2UKLQkJCQkJKnZhX2FyZyhhcCwgaW50ICopID0gcmVzOwotCQkJCW5hc3NpZ25lZCsrOwotCQkJfQotCQkJbnJlYWQgKz0gcCAtIGJ1ZjsKLQkJCWJyZWFrOwotCi0jaWZkZWYgRkxPQVRJTkdfUE9JTlQKLQkJY2FzZSBDVF9GTE9BVDoKLQkJCS8qIHNjYW4gYSBmbG9hdGluZyBwb2ludCBudW1iZXIgYXMgaWYgYnkgc3RydG9kICovCi0jaWZkZWYgaGFyZHdheQotCQkJaWYgKHdpZHRoID09IDAgfHwgd2lkdGggPiBzaXplb2YoYnVmKSAtIDEpCi0JCQkJd2lkdGggPSBzaXplb2YoYnVmKSAtIDE7Ci0jZWxzZQotCQkJLyogc2l6ZV90IGlzIHVuc2lnbmVkLCBoZW5jZSB0aGlzIG9wdGltaXNhdGlvbiAqLwotCQkJaWYgKC0td2lkdGggPiBzaXplb2YoYnVmKSAtIDIpCi0JCQkJd2lkdGggPSBzaXplb2YoYnVmKSAtIDI7Ci0JCQl3aWR0aCsrOwotI2VuZGlmCi0JCQlmbGFncyB8PSBTSUdOT0sgfCBORElHSVRTIHwgRFBUT0sgfCBFWFBPSzsKLQkJCWZvciAocCA9IGJ1Zjsgd2lkdGg7IHdpZHRoLS0pIHsKLQkJCQljID0gKmZwLT5fcDsKLQkJCQkvKgotCQkJCSAqIFRoaXMgY29kZSBtaW1pY2tzIHRoZSBpbnRlZ2VyIGNvbnZlcnNpb24KLQkJCQkgKiBjb2RlLCBidXQgaXMgbXVjaCBzaW1wbGVyLgotCQkJCSAqLwotCQkJCXN3aXRjaCAoYykgewotCi0JCQkJY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6Ci0JCQkJY2FzZSAnNCc6IGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6Ci0JCQkJY2FzZSAnOCc6IGNhc2UgJzknOgotCQkJCQlmbGFncyAmPSB+KFNJR05PSyB8IE5ESUdJVFMpOwotCQkJCQlnb3RvIGZvazsKLQotCQkJCWNhc2UgJysnOiBjYXNlICctJzoKLQkJCQkJaWYgKGZsYWdzICYgU0lHTk9LKSB7Ci0JCQkJCQlmbGFncyAmPSB+U0lHTk9LOwotCQkJCQkJZ290byBmb2s7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnLic6Ci0JCQkJCWlmIChmbGFncyAmIERQVE9LKSB7Ci0JCQkJCQlmbGFncyAmPSB+KFNJR05PSyB8IERQVE9LKTsKLQkJCQkJCWdvdG8gZm9rOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJ2UnOiBjYXNlICdFJzoKLQkJCQkJLyogbm8gZXhwb25lbnQgd2l0aG91dCBzb21lIGRpZ2l0cyAqLwotCQkJCQlpZiAoKGZsYWdzJihORElHSVRTfEVYUE9LKSkgPT0gRVhQT0spIHsKLQkJCQkJCWZsYWdzID0KLQkJCQkJCSAgICAoZmxhZ3MgJiB+KEVYUE9LfERQVE9LKSkgfAotCQkJCQkJICAgIFNJR05PSyB8IE5ESUdJVFM7Ci0JCQkJCQlnb3RvIGZvazsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCWZvazoKLQkJCQkqcCsrID0gYzsKLQkJCQlpZiAoLS1mcC0+X3IgPiAwKQotCQkJCQlmcC0+X3ArKzsKLQkJCQllbHNlIGlmIChfX3NyZWZpbGwoZnApKQotCQkJCQlicmVhazsJLyogRU9GICovCi0JCQl9Ci0JCQkvKgotCQkJICogSWYgbm8gZGlnaXRzLCBtaWdodCBiZSBtaXNzaW5nIGV4cG9uZW50IGRpZ2l0cwotCQkJICogKGp1c3QgZ2l2ZSBiYWNrIHRoZSBleHBvbmVudCkgb3IgbWlnaHQgYmUgbWlzc2luZwotCQkJICogcmVndWxhciBkaWdpdHMsIGJ1dCBoYWQgc2lnbiBhbmQvb3IgZGVjaW1hbCBwb2ludC4KLQkJCSAqLwotCQkJaWYgKGZsYWdzICYgTkRJR0lUUykgewotCQkJCWlmIChmbGFncyAmIEVYUE9LKSB7Ci0JCQkJCS8qIG5vIGRpZ2l0cyBhdCBhbGwgKi8KLQkJCQkJd2hpbGUgKHAgPiBidWYpCi0JCQkJCQl1bmdldGMoKih1X2NoYXIgKiktLXAsIGZwKTsKLQkJCQkJZ290byBtYXRjaF9mYWlsdXJlOwotCQkJCX0KLQkJCQkvKiBqdXN0IGEgYmFkIGV4cG9uZW50IChlIGFuZCBtYXliZSBzaWduKSAqLwotCQkJCWMgPSAqKHVfY2hhciAqKS0tcDsKLQkJCQlpZiAoYyAhPSAnZScgJiYgYyAhPSAnRScpIHsKLQkJCQkJKHZvaWQpIHVuZ2V0YyhjLCBmcCk7Lyogc2lnbiAqLwotCQkJCQljID0gKih1X2NoYXIgKiktLXA7Ci0JCQkJfQotCQkJCSh2b2lkKSB1bmdldGMoYywgZnApOwotCQkJfQotCQkJaWYgKChmbGFncyAmIFNVUFBSRVNTKSA9PSAwKSB7Ci0JCQkJZG91YmxlIHJlczsKLQotCQkJCSpwID0gJ1wwJzsKLQkJCQlyZXMgPSBzdHJ0b2QoYnVmLCAoY2hhciAqKikgTlVMTCk7Ci0JCQkJaWYgKGZsYWdzICYgTE9OR0RCTCkKLQkJCQkJKnZhX2FyZyhhcCwgbG9uZyBkb3VibGUgKikgPSByZXM7Ci0JCQkJZWxzZSBpZiAoZmxhZ3MgJiBMT05HKQotCQkJCQkqdmFfYXJnKGFwLCBkb3VibGUgKikgPSByZXM7Ci0JCQkJZWxzZQotCQkJCQkqdmFfYXJnKGFwLCBmbG9hdCAqKSA9IHJlczsKLQkJCQluYXNzaWduZWQrKzsKLQkJCX0KLQkJCW5yZWFkICs9IHAgLSBidWY7Ci0JCQlicmVhazsKLSNlbmRpZiAvKiBGTE9BVElOR19QT0lOVCAqLwotCQl9Ci0JfQotaW5wdXRfZmFpbHVyZToKLQlpZiAobmFzc2lnbmVkID09IDApCi0JCW5hc3NpZ25lZCA9IC0xOwotbWF0Y2hfZmFpbHVyZToKLQlGVU5MT0NLRklMRShmcCk7Ci0JcmV0dXJuIChuYXNzaWduZWQpOwotfQotCi0vKgotICogRmlsbCBpbiB0aGUgZ2l2ZW4gdGFibGUgZnJvbSB0aGUgc2NhbnNldCBhdCB0aGUgZ2l2ZW4gZm9ybWF0Ci0gKiAoanVzdCBhZnRlciBgWycpLiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIHBhc3QgdGhlCi0gKiBjbG9zaW5nIGBdJy4gIFRoZSB0YWJsZSBoYXMgYSAxIHdoZXJldmVyIGNoYXJhY3RlcnMgc2hvdWxkIGJlCi0gKiBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNjYW5zZXQuCi0gKi8KLXN0YXRpYyB1X2NoYXIgKgotX19zY2NsKGNoYXIgKnRhYiwgdV9jaGFyICpmbXQpCi17Ci0JaW50IGMsIG4sIHY7Ci0KLQkvKiBmaXJzdCBgY2xlYXInIHRoZSB3aG9sZSB0YWJsZSAqLwotCWMgPSAqZm10Kys7CQkvKiBmaXJzdCBjaGFyIGhhdCA9PiBuZWdhdGVkIHNjYW5zZXQgKi8KLQlpZiAoYyA9PSAnXicpIHsKLQkJdiA9IDE7CQkvKiBkZWZhdWx0ID0+IGFjY2VwdCAqLwotCQljID0gKmZtdCsrOwkvKiBnZXQgbmV3IGZpcnN0IGNoYXIgKi8KLQl9IGVsc2UKLQkJdiA9IDA7CQkvKiBkZWZhdWx0ID0+IHJlamVjdCAqLwotCS8qIHNob3VsZCBwcm9iYWJseSB1c2UgbWVtc2V0IGhlcmUgKi8KLQlmb3IgKG4gPSAwOyBuIDwgMjU2OyBuKyspCi0JCXRhYltuXSA9IHY7Ci0JaWYgKGMgPT0gMCkKLQkJcmV0dXJuIChmbXQgLSAxKTsvKiBmb3JtYXQgZW5kZWQgYmVmb3JlIGNsb3NpbmcgXSAqLwotCi0JLyoKLQkgKiBOb3cgc2V0IHRoZSBlbnRyaWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFjdHVhbCBzY2Fuc2V0Ci0JICogdG8gdGhlIG9wcG9zaXRlIG9mIHRoZSBhYm92ZS4KLQkgKgotCSAqIFRoZSBmaXJzdCBjaGFyYWN0ZXIgbWF5IGJlICddJyAob3IgJy0nKSB3aXRob3V0IGJlaW5nIHNwZWNpYWw7Ci0JICogdGhlIGxhc3QgY2hhcmFjdGVyIG1heSBiZSAnLScuCi0JICovCi0JdiA9IDEgLSB2OwotCWZvciAoOzspIHsKLQkJdGFiW2NdID0gdjsJCS8qIHRha2UgY2hhcmFjdGVyIGMgKi8KLWRvc3dpdGNoOgotCQluID0gKmZtdCsrOwkJLyogYW5kIGV4YW1pbmUgdGhlIG5leHQgKi8KLQkJc3dpdGNoIChuKSB7Ci0KLQkJY2FzZSAwOgkJCS8qIGZvcm1hdCBlbmRlZCB0b28gc29vbiAqLwotCQkJcmV0dXJuIChmbXQgLSAxKTsKLQotCQljYXNlICctJzoKLQkJCS8qCi0JCQkgKiBBIHNjYW5zZXQgb2YgdGhlIGZvcm0KLQkJCSAqCVswMSstXQotCQkJICogaXMgZGVmaW5lZCBhcyBgdGhlIGRpZ2l0IDAsIHRoZSBkaWdpdCAxLAotCQkJICogdGhlIGNoYXJhY3RlciArLCB0aGUgY2hhcmFjdGVyIC0nLCBidXQKLQkJCSAqIHRoZSBlZmZlY3Qgb2YgYSBzY2Fuc2V0IHN1Y2ggYXMKLQkJCSAqCVthLXpBLVowLTldCi0JCQkgKiBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLiAgVGhlIFY3IFVuaXgKLQkJCSAqIHNjYW5mIHRyZWF0cyBgYS16JyBhcyBgdGhlIGxldHRlcnMgYSB0aHJvdWdoCi0JCQkgKiB6JywgYnV0IHRyZWF0cyBgYS1hJyBhcyBgdGhlIGxldHRlciBhLCB0aGUKLQkJCSAqIGNoYXJhY3RlciAtLCBhbmQgdGhlIGxldHRlciBhJy4KLQkJCSAqCi0JCQkgKiBGb3IgY29tcGF0aWJpbGl0eSwgdGhlIGAtJyBpcyBub3QgY29uc2lkZXJkCi0JCQkgKiB0byBkZWZpbmUgYSByYW5nZSBpZiB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZwotCQkJICogaXQgaXMgZWl0aGVyIGEgY2xvc2UgYnJhY2tldCAocmVxdWlyZWQgYnkgQU5TSSkKLQkJCSAqIG9yIGlzIG5vdCBudW1lcmljYWxseSBncmVhdGVyIHRoYW4gdGhlIGNoYXJhY3RlcgotCQkJICogd2UganVzdCBzdG9yZWQgaW4gdGhlIHRhYmxlIChjKS4KLQkJCSAqLwotCQkJbiA9ICpmbXQ7Ci0JCQlpZiAobiA9PSAnXScgfHwgbiA8IGMpIHsKLQkJCQljID0gJy0nOwotCQkJCWJyZWFrOwkvKiByZXN1bWUgdGhlIGZvcig7OykgKi8KLQkJCX0KLQkJCWZtdCsrOwotCQkJZG8gewkJLyogZmlsbCBpbiB0aGUgcmFuZ2UgKi8KLQkJCQl0YWJbKytjXSA9IHY7Ci0JCQl9IHdoaWxlIChjIDwgbik7Ci0jaWYgMQkvKiBYWFggYW5vdGhlciBkaXNndXN0aW5nIGNvbXBhdGliaWxpdHkgaGFjayAqLwotCQkJLyoKLQkJCSAqIEFsYXMsIHRoZSBWNyBVbml4IHNjYW5mIGFsc28gdHJlYXRzIGZvcm1hdHMKLQkJCSAqIHN1Y2ggYXMgW2EtYy1lXSBhcyBgdGhlIGxldHRlcnMgYSB0aHJvdWdoIGUnLgotCQkJICogVGhpcyB0b28gaXMgcGVybWl0dGVkIGJ5IHRoZSBzdGFuZGFyZC4uLi4KLQkJCSAqLwotCQkJZ290byBkb3N3aXRjaDsKLSNlbHNlCi0JCQljID0gKmZtdCsrOwotCQkJaWYgKGMgPT0gMCkKLQkJCQlyZXR1cm4gKGZtdCAtIDEpOwotCQkJaWYgKGMgPT0gJ10nKQotCQkJCXJldHVybiAoZm10KTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0KLQkJY2FzZSAnXSc6CQkvKiBlbmQgb2Ygc2NhbnNldCAqLwotCQkJcmV0dXJuIChmbXQpOwotCi0JCWRlZmF1bHQ6CQkvKiBqdXN0IGFub3RoZXIgY2hhcmFjdGVyICovCi0JCQljID0gbjsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCS8qIE5PVFJFQUNIRUQgKi8KLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vdnNucHJpbnRmLmMgYi9saWJjL3N0ZGlvL3ZzbnByaW50Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTMwZjk0Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vdnNucHJpbnRmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgkkT3BlbkJTRDogdnNucHJpbnRmLmMsdiAxLjEyIDIwMDYvMDEvMDYgMTg6NTM6MDQgbWlsbGVydCBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi1pbnQKLXZzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBuLCBjb25zdCBjaGFyICpmbXQsIF9fdmFfbGlzdCBhcCkKLXsKLQlpbnQgcmV0OwotCWNoYXIgZHVtbXk7Ci0JRklMRSBmOwotCXN0cnVjdCBfX3NmaWxlZXh0IGZleHQ7Ci0KLQlfRklMRUVYVF9TRVRVUCgmZiwgJmZleHQpOwotCi0JLyogV2hpbGUgc25wcmludGYoMykgc3BlY2lmaWVzIHNpemVfdCBzdGRpbyB1c2VzIGFuIGludCBpbnRlcm5hbGx5ICovCi0JaWYgKG4gPiBJTlRfTUFYKQotCQluID0gSU5UX01BWDsKLQkvKiBTdGRpbyBpbnRlcm5hbHMgZG8gbm90IGRlYWwgY29ycmVjdGx5IHdpdGggemVybyBsZW5ndGggYnVmZmVyICovCi0JaWYgKG4gPT0gMCkgewotCQlzdHIgPSAmZHVtbXk7Ci0JCW4gPSAxOwotCX0KLQlmLl9maWxlID0gLTE7Ci0JZi5fZmxhZ3MgPSBfX1NXUiB8IF9fU1NUUjsKLQlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKXN0cjsKLQlmLl9iZi5fc2l6ZSA9IGYuX3cgPSBuIC0gMTsKLQlyZXQgPSBfX3ZmcHJpbnRmKCZmLCBmbXQsIGFwKTsKLQkqZi5fcCA9ICdcMCc7Ci0JcmV0dXJuIChyZXQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby92c3ByaW50Zi5jIGIvbGliYy9zdGRpby92c3ByaW50Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDZlZThhLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vdnNwcmludGYuYworKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCSRPcGVuQlNEOiB2c3ByaW50Zi5jLHYgMS4xMyAyMDA2LzAxLzA2IDE4OjUzOjA0IG1pbGxlcnQgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLQotI2lmIGRlZmluZWQoQVBJV0FSTikKLV9fd2Fybl9yZWZlcmVuY2VzKHZzcHJpbnRmLAotICAgICJ3YXJuaW5nOiB2c3ByaW50ZigpIGlzIG9mdGVuIG1pc3VzZWQsIHBsZWFzZSB1c2UgdnNucHJpbnRmKCkiKTsKLSNlbmRpZgotCi1pbnQKLXZzcHJpbnRmKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZm10LCBfX3ZhX2xpc3QgYXApCi17Ci0JaW50IHJldDsKLQlGSUxFIGY7Ci0Jc3RydWN0IF9fc2ZpbGVleHQgZmV4dDsKLQotCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7Ci0JZi5fZmlsZSA9IC0xOwotCWYuX2ZsYWdzID0gX19TV1IgfCBfX1NTVFI7Ci0JZi5fYmYuX2Jhc2UgPSBmLl9wID0gKHVuc2lnbmVkIGNoYXIgKilzdHI7Ci0JZi5fYmYuX3NpemUgPSBmLl93ID0gSU5UX01BWDsKLQlyZXQgPSBfX3ZmcHJpbnRmKCZmLCBmbXQsIGFwKTsKLQkqZi5fcCA9ICdcMCc7Ci0JcmV0dXJuIChyZXQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby92c3NjYW5mLmMgYi9saWJjL3N0ZGlvL3Zzc2NhbmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM0ZDgwNS4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL3Zzc2NhbmYuYworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCSRPcGVuQlNEOiB2c3NjYW5mLmMsdiAxLjExIDIwMDYvMDEvMDYgMTg6NTM6MDQgbWlsbGVydCBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIERvbm4gU2VlbGV5IGF0IFVVTkVUIFRlY2hub2xvZ2llcywgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi0vKiBBUkdTVVNFRCAqLwotc3RhdGljIGludAotZW9mcmVhZCh2b2lkICpjb29raWUsIGNoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLXZzc2NhbmYoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmbXQsIF9fdmFfbGlzdCBhcCkKLXsKLQlGSUxFIGY7Ci0Jc3RydWN0IF9fc2ZpbGVleHQgZmV4dDsKLQotCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7Ci0JZi5fZmxhZ3MgPSBfX1NSRDsKLQlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKXN0cjsKLQlmLl9iZi5fc2l6ZSA9IGYuX3IgPSBzdHJsZW4oc3RyKTsKLQlmLl9yZWFkID0gZW9mcmVhZDsKLQlmLl9sYi5fYmFzZSA9IE5VTEw7Ci0JcmV0dXJuICh2ZnNjYW5mKCZmLCBmbXQsIGFwKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3didWYuYyBiL2xpYmMvc3RkaW8vd2J1Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDlhYzU5Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vd2J1Zi5jCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHdidWYuYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLQotLyoKLSAqIFdyaXRlIHRoZSBnaXZlbiBjaGFyYWN0ZXIgaW50byB0aGUgKHByb2JhYmx5IGZ1bGwpIGJ1ZmZlciBmb3IKLSAqIHRoZSBnaXZlbiBmaWxlLiAgRmx1c2ggdGhlIGJ1ZmZlciBvdXQgaWYgaXQgaXMgb3IgYmVjb21lcyBmdWxsLAotICogb3IgaWYgYz09J1xuJyBhbmQgdGhlIGZpbGUgaXMgbGluZSBidWZmZXJlZC4KLSAqLwotaW50Ci1fX3N3YnVmKGludCBjLCBGSUxFICpmcCkKLXsKLQlpbnQgbjsKLQotCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKLQkvKgotCSAqIEluIGNhc2Ugd2UgY2Fubm90IHdyaXRlLCBvciBsb25nam1wIHRha2VzIHVzIG91dCBlYXJseSwKLQkgKiBtYWtlIHN1cmUgX3cgaXMgMCAoaWYgZnVsbHktIG9yIHVuLWJ1ZmZlcmVkKSBvciAtX2JmLl9zaXplCi0JICogKGlmIGxpbmUgYnVmZmVyZWQpIHNvIHRoYXQgd2Ugd2lsbCBnZXQgY2FsbGVkIGFnYWluLgotCSAqIElmIHdlIGRpZCBub3QgZG8gdGhpcywgYSBzdWZmaWNpZW50IG51bWJlciBvZiBwdXRjKCkKLQkgKiBjYWxscyBtaWdodCB3cmFwIF93IGZyb20gbmVnYXRpdmUgdG8gcG9zaXRpdmUuCi0JICovCi0JZnAtPl93ID0gZnAtPl9sYmZzaXplOwotCWlmIChjYW50d3JpdGUoZnApKSB7Ci0JCWVycm5vID0gRUJBREY7Ci0JCXJldHVybiAoRU9GKTsKLQl9Ci0JYyA9ICh1bnNpZ25lZCBjaGFyKWM7Ci0KLQkvKgotCSAqIElmIGl0IGlzIGNvbXBsZXRlbHkgZnVsbCwgZmx1c2ggaXQgb3V0LiAgVGhlbiwgaW4gYW55IGNhc2UsCi0JICogc3R1ZmYgYyBpbnRvIHRoZSBidWZmZXIuICBJZiB0aGlzIGNhdXNlcyB0aGUgYnVmZmVyIHRvIGZpbGwKLQkgKiBjb21wbGV0ZWx5LCBvciBpZiBjIGlzICdcbicgYW5kIHRoZSBmaWxlIGlzIGxpbmUgYnVmZmVyZWQsCi0JICogZmx1c2ggaXQgKHBlcmhhcHMgYSBzZWNvbmQgdGltZSkuICBUaGUgc2Vjb25kIGZsdXNoIHdpbGwgYWx3YXlzCi0JICogaGFwcGVuIG9uIHVuYnVmZmVyZWQgc3RyZWFtcywgd2hlcmUgX2JmLl9zaXplPT0xOyBfX3NmbHVzaCgpCi0JICogZ3VhcmFudGVlcyB0aGF0IHB1dGMoKSB3aWxsIGFsd2F5cyBjYWxsIHdidWYoKSBieSBzZXR0aW5nIF93Ci0JICogdG8gMCwgc28gd2UgbmVlZCBub3QgZG8gYW55dGhpbmcgZWxzZS4KLQkgKi8KLQluID0gZnAtPl9wIC0gZnAtPl9iZi5fYmFzZTsKLQlpZiAobiA+PSBmcC0+X2JmLl9zaXplKSB7Ci0JCWlmIChfX3NmbHVzaChmcCkpCi0JCQlyZXR1cm4gKEVPRik7Ci0JCW4gPSAwOwotCX0KLQlmcC0+X3ctLTsKLQkqZnAtPl9wKysgPSBjOwotCWlmICgrK24gPT0gZnAtPl9iZi5fc2l6ZSB8fCAoZnAtPl9mbGFncyAmIF9fU0xCRiAmJiBjID09ICdcbicpKQotCQlpZiAoX19zZmx1c2goZnApKQotCQkJcmV0dXJuIChFT0YpOwotCXJldHVybiAoYyk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3djaW8uaCBiL2xpYmMvc3RkaW8vd2Npby5oCmluZGV4IGRkNmRiMjEuLjU4NGEzZjIgMTAwNjQ0Ci0tLSBhL2xpYmMvc3RkaW8vd2Npby5oCisrKyBiL2xpYmMvc3RkaW8vd2Npby5oCkBAIC0xLDM0ICsxLDM0IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKy8qCSRPcGVuQlNEOiB3Y2lvLmgsdiAxLjIgMjAxMy8wNC8xNyAxNzo0MDozNSB0ZWR1IEV4cCAkCSovCisvKiAkTmV0QlNEOiB3Y2lvLmgsdiAxLjMgMjAwMy8wMS8xOCAxMTozMDowMCB0aG9ycGVqIEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKTIwMDEgQ2l0cnVzIFByb2plY3QsCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkQ2l0cnVzJAogICovCiAKLS8qIHRoaXMgZmlsZSBpcyBvbmx5IHVzZWQgdG8gcXVpZXQgdGhlIEJTRCBzdGRpbyBpbXBsZW1lbnRhdGlvbgotICogc2luY2Ugd2UgZG9uJ3QgaW1wbGVtZW50IHdjaGFyIHN1cHBvcnQgYXQgYWxsCi0gKi8KICNpZm5kZWYgX1dDSU9fSF8KICNkZWZpbmUgX1dDSU9fSF8KIApAQCAtMzYsMjIgKzM2LDQ2IEBACiAjZGVmaW5lIFdDSU9fVU5HRVRXQ19CVUZTSVpFIDEKIAogc3RydWN0IHdjaGFyX2lvX2RhdGEgewotICAgICAgICBpbnQgZHVtbXk7CisJbWJzdGF0ZV90IHdjaW9fbWJzdGF0ZV9pbjsKKwltYnN0YXRlX3Qgd2Npb19tYnN0YXRlX291dDsKKworCXdjaGFyX3Qgd2Npb191bmdldHdjX2J1ZltXQ0lPX1VOR0VUV0NfQlVGU0laRV07CisJc2l6ZV90IHdjaW9fdW5nZXR3Y19pbmJ1ZjsKKworCWludCB3Y2lvX21vZGU7IC8qIG9yaWVudGF0aW9uICovCiB9OwogCi0vKiBCSU9OSUM6IGRpc2FibGUgd2NoYXIgc3VwcG9ydCAqLwogI2RlZmluZSBXQ0lPX0dFVChmcCkgXAotCSgoc3RydWN0IHdjaGFyX2lvX2RhdGEqKSAwKQorCShfRVhUKGZwKSA/ICYoX0VYVChmcCktPl93Y2lvKSA6IChzdHJ1Y3Qgd2NoYXJfaW9fZGF0YSAqKTApCiAKLSNkZWZpbmUgX1NFVF9PUklFTlRBVElPTihmcCwgbW9kZSkgKCh2b2lkKTApCisjZGVmaW5lIF9TRVRfT1JJRU5UQVRJT04oZnAsIG1vZGUpIFwKK2RvIHtcCisJc3RydWN0IHdjaGFyX2lvX2RhdGEgKl93Y2lvID0gV0NJT19HRVQoZnApOyBcCisJaWYgKF93Y2lvICYmIF93Y2lvLT53Y2lvX21vZGUgPT0gMCkgXAorCQlfd2Npby0+d2Npb19tb2RlID0gKG1vZGUpO1wKK30gd2hpbGUgKDApCiAKIC8qCiAgKiBXQ0lPX0ZSRUUgc2hvdWxkIGJlIGNhbGxlZCBieSBmY2xvc2UKICAqLwotI2RlZmluZSBXQ0lPX0ZSRUUoZnApICgodm9pZCkoMCkpCisjZGVmaW5lIFdDSU9fRlJFRShmcCkgXAorZG8ge1wKKwlzdHJ1Y3Qgd2NoYXJfaW9fZGF0YSAqX3djaW8gPSBXQ0lPX0dFVChmcCk7IFwKKwlpZiAoX3djaW8pIHsgXAorCQlfd2Npby0+d2Npb19tb2RlID0gMDtcCisJCV93Y2lvLT53Y2lvX3VuZ2V0d2NfaW5idWYgPSAwO1wKKwl9IFwKK30gd2hpbGUgKDApCiAKLSNkZWZpbmUgV0NJT19GUkVFVUIoZnApICgodm9pZCkwKQorI2RlZmluZSBXQ0lPX0ZSRUVVQihmcCkgXAorZG8ge1wKKwlzdHJ1Y3Qgd2NoYXJfaW9fZGF0YSAqX3djaW8gPSBXQ0lPX0dFVChmcCk7IFwKKwlpZiAoX3djaW8pIHsgXAorCQlfd2Npby0+d2Npb191bmdldHdjX2luYnVmID0gMDtcCisJfSBcCit9IHdoaWxlICgwKQogCi0jZGVmaW5lIFdDSU9fSU5JVChmcCkgICgodm9pZCkwKQorI2RlZmluZSBXQ0lPX0lOSVQoZnApIFwKKwltZW1zZXQoJihfRVhUKGZwKS0+X3djaW8pLCAwLCBzaXplb2Yoc3RydWN0IHdjaGFyX2lvX2RhdGEpKQogCiAjZW5kaWYgLypfV0NJT19IXyovCmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9hdGV4aXQuYyBiL2xpYmMvc3RkbGliL2F0ZXhpdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTE0NDM0Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL2F0ZXhpdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBhdGV4aXQuYyx2IDEuMTQgMjAwNy8wOS8wNSAyMDo0Nzo0NyBjaGwgRXhwICQgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgRGFuaWVsIEhhcnRtZWllcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KLSAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgImF0ZXhpdC5oIgotI2luY2x1ZGUgInByaXZhdGUvdGhyZWFkX3ByaXZhdGUuaCIKLQotaW50IF9fYXRleGl0X2ludmFsaWQgPSAxOwotc3RydWN0IGF0ZXhpdCAqX19hdGV4aXQ7Ci0KLS8qCi0gKiBGdW5jdGlvbiBwb2ludGVycyBhcmUgc3RvcmVkIGluIGEgbGlua2VkIGxpc3Qgb2YgcGFnZXMuIFRoZSBsaXN0Ci0gKiBpcyBpbml0aWFsbHkgZW1wdHksIGFuZCBwYWdlcyBhcmUgYWxsb2NhdGVkIG9uIGRlbWFuZC4gVGhlIGZpcnN0Ci0gKiBmdW5jdGlvbiBwb2ludGVyIGluIHRoZSBmaXJzdCBhbGxvY2F0ZWQgcGFnZSAodGhlIGxhc3Qgb25lIGluCi0gKiB0aGUgbGlua2VkIGxpc3QpIHdhcyByZXNlcnZlZCBmb3IgdGhlIGNsZWFudXAgZnVuY3Rpb24uCi0gKiBUT0RPOiBzd2l0Y2ggdG8gdGhlIHJlZ3VsYXIgRnJlZUJTRC9OZXRCU0QgYXRleGl0IGltcGxlbWVudGF0aW9uLgotICoKLSAqIE91dHNpZGUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMsIGFsbCBwYWdlcyBhcmUgbXByb3RlY3QoKSdlZAotICogdG8gcHJldmVudCB1bmludGVudGlvbmFsL21hbGljaW91cyBjb3JydXB0aW9uLgotICovCi0KLS8qCi0gKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIHBlcmZvcm1lZCBhdCBleGl0IG9yIHdoZW4gYSBzaGFyZWQgb2JqZWN0Ci0gKiB3aXRoIHRoZSBnaXZlbiBkc28gaGFuZGxlIGlzIHVubG9hZGVkIGR5bmFtaWNhbGx5LiAgQWxzbyB1c2VkIGFzCi0gKiB0aGUgYmFja2VuZCBmb3IgYXRleGl0KCkuICBGb3IgbW9yZSBpbmZvIG9uIHRoaXMgQVBJLCBzZWU6Ci0gKgotICoJaHR0cDovL3d3dy5jb2Rlc291cmNlcnkuY29tL2N4eC1hYmkvYWJpLmh0bWwjZHNvLWR0b3IKLSAqLwotaW50Ci1fX2N4YV9hdGV4aXQodm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmFyZywgdm9pZCAqZHNvKQotewotCXN0cnVjdCBhdGV4aXQgKnAgPSBfX2F0ZXhpdDsKLQlzdHJ1Y3QgYXRleGl0X2ZuICpmbnA7Ci0JaW50IHBnc2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0JaW50IHJldCA9IC0xOwotCi0JaWYgKHBnc2l6ZSA8IChpbnQpc2l6ZW9mKCpwKSkKLQkJcmV0dXJuICgtMSk7Ci0JX0FURVhJVF9MT0NLKCk7Ci0JcCA9IF9fYXRleGl0OwotCWlmIChwICE9IE5VTEwpIHsKLQkJaWYgKHAtPmluZCArIDEgPj0gcC0+bWF4KQotCQkJcCA9IE5VTEw7Ci0JCWVsc2UgaWYgKG1wcm90ZWN0KHAsIHBnc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpCi0JCQlnb3RvIHVubG9jazsKLQl9Ci0JaWYgKHAgPT0gTlVMTCkgewotCQlwID0gbW1hcChOVUxMLCBwZ3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0JCSAgICBNQVBfQU5PTiB8IE1BUF9QUklWQVRFLCAtMSwgMCk7Ci0JCWlmIChwID09IE1BUF9GQUlMRUQpCi0JCQlnb3RvIHVubG9jazsKLQkJaWYgKF9fYXRleGl0ID09IE5VTEwpIHsKLQkJCW1lbXNldCgmcC0+Zm5zWzBdLCAwLCBzaXplb2YocC0+Zm5zWzBdKSk7Ci0JCQlwLT5pbmQgPSAxOwotCQl9IGVsc2UKLQkJCXAtPmluZCA9IDA7Ci0JCXAtPm1heCA9IChwZ3NpemUgLSAoKGNoYXIgKikmcC0+Zm5zWzBdIC0gKGNoYXIgKilwKSkgLwotCQkgICAgc2l6ZW9mKHAtPmZuc1swXSk7Ci0JCXAtPm5leHQgPSBfX2F0ZXhpdDsKLQkJX19hdGV4aXQgPSBwOwotCQlpZiAoX19hdGV4aXRfaW52YWxpZCkKLQkJCV9fYXRleGl0X2ludmFsaWQgPSAwOwotCX0KLQlmbnAgPSAmcC0+Zm5zW3AtPmluZCsrXTsKLQlmbnAtPmZuX3B0ci5jeGFfZnVuYyA9IGZ1bmM7Ci0JZm5wLT5mbl9hcmcgPSBhcmc7Ci0JZm5wLT5mbl9kc28gPSBkc287Ci0JaWYgKG1wcm90ZWN0KHAsIHBnc2l6ZSwgUFJPVF9SRUFEKSkKLQkJZ290byB1bmxvY2s7Ci0JcmV0ID0gMDsKLXVubG9jazoKLQlfQVRFWElUX1VOTE9DSygpOwotCXJldHVybiAocmV0KTsKLX0KLQotLyoKLSAqIENhbGwgYWxsIGhhbmRsZXJzIHJlZ2lzdGVyZWQgd2l0aCBfX2N4YV9hdGV4aXQoKSBmb3IgdGhlIHNoYXJlZAotICogb2JqZWN0IG93bmluZyAnZHNvJy4KLSAqIE5vdGU6IGlmICdkc28nIGlzIE5VTEwsIHRoZW4gYWxsIHJlbWFpbmluZyBoYW5kbGVycyBhcmUgY2FsbGVkLgotICovCi12b2lkCi1fX2N4YV9maW5hbGl6ZSh2b2lkICpkc28pCi17Ci0Jc3RydWN0IGF0ZXhpdCAqcCwgKnE7Ci0Jc3RydWN0IGF0ZXhpdF9mbiBmbjsKLQlpbnQgbiwgcGdzaXplID0gZ2V0cGFnZXNpemUoKTsKLQlzdGF0aWMgaW50IGNhbGxfZGVwdGg7Ci0KLQlpZiAoX19hdGV4aXRfaW52YWxpZCkKLQkJcmV0dXJuOwotCi0JX0FURVhJVF9MT0NLKCk7Ci0JY2FsbF9kZXB0aCsrOwotCi0JZm9yIChwID0gX19hdGV4aXQ7IHAgIT0gTlVMTDsgcCA9IHAtPm5leHQpIHsKLQkJZm9yIChuID0gcC0+aW5kOyAtLW4gPj0gMDspIHsKLQkJCWlmIChwLT5mbnNbbl0uZm5fcHRyLmN4YV9mdW5jID09IE5VTEwpCi0JCQkJY29udGludWU7CS8qIGFscmVhZHkgY2FsbGVkICovCi0JCQlpZiAoZHNvICE9IE5VTEwgJiYgZHNvICE9IHAtPmZuc1tuXS5mbl9kc28pCi0JCQkJY29udGludWU7CS8qIHdyb25nIERTTyAqLwotCi0JCQkvKgotCQkJICogTWFyayBoYW5kbGVyIGFzIGhhdmluZyBiZWVuIGFscmVhZHkgY2FsbGVkIHRvIGF2b2lkCi0JCQkgKiBkdXBlcyBhbmQgbG9vcHMsIHRoZW4gY2FsbCB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24uCi0JCQkgKi8KLQkJCWZuID0gcC0+Zm5zW25dOwotCQkJaWYgKG1wcm90ZWN0KHAsIHBnc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkgPT0gMCkgewotCQkJCXAtPmZuc1tuXS5mbl9wdHIuY3hhX2Z1bmMgPSBOVUxMOwotCQkJCW1wcm90ZWN0KHAsIHBnc2l6ZSwgUFJPVF9SRUFEKTsKLQkJCX0KLQkJCV9BVEVYSVRfVU5MT0NLKCk7Ci0jaWYgQU5EUk9JRAotICAgICAgICAgICAgICAgICAgICAgICAgLyogaXQgbG9va3MgbGlrZSB3ZSBzaG91bGQgYWx3YXlzIGNhbGwgdGhlIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiB3aXRoIGFuIGFyZ3VtZW50LCBldmVuIGlmIGRzbyBpcyBub3QgTlVMTC4gT3RoZXJ3aXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBzdGF0aWMgZGVzdHJ1Y3RvcnMgd2lsbCBub3QgYmUgY2FsbGVkIHByb3Blcmx5IG9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgQVJNLgotICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAoKmZuLmZuX3B0ci5jeGFfZnVuYykoZm4uZm5fYXJnKTsKLSNlbHNlIC8qICFBTkRST0lEICovCi0JCQlpZiAoZHNvICE9IE5VTEwpCi0JCQkJKCpmbi5mbl9wdHIuY3hhX2Z1bmMpKGZuLmZuX2FyZyk7Ci0JCQllbHNlCi0JCQkJKCpmbi5mbl9wdHIuc3RkX2Z1bmMpKCk7Ci0jZW5kaWYgLyogIUFORFJPSUQgKi8KLQkJCV9BVEVYSVRfTE9DSygpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBJZiBjYWxsZWQgdmlhIGV4aXQoKSwgdW5tYXAgdGhlIHBhZ2VzIHNpbmNlIHdlIGhhdmUgbm93IHJ1bgotCSAqIGFsbCB0aGUgaGFuZGxlcnMuICBXZSBkZWZlciB0aGlzIHVudGlsIGNhbGxkZXB0aCA9PSAwIHNvIHRoYXQKLQkgKiB3ZSBkb24ndCB1bm1hcCB0aGluZ3MgcHJlbWF0dXJlbHkgaWYgY2FsbGVkIHJlY3Vyc2l2ZWx5LgotCSAqLwotCWlmIChkc28gPT0gTlVMTCAmJiAtLWNhbGxfZGVwdGggPT0gMCkgewotCQlmb3IgKHAgPSBfX2F0ZXhpdDsgcCAhPSBOVUxMOyApIHsKLQkJCXEgPSBwOwotCQkJcCA9IHAtPm5leHQ7Ci0JCQltdW5tYXAocSwgcGdzaXplKTsKLQkJfQotCQlfX2F0ZXhpdCA9IE5VTEw7Ci0JfQotCV9BVEVYSVRfVU5MT0NLKCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9hdGV4aXQuaCBiL2xpYmMvc3RkbGliL2F0ZXhpdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjNlNWFiLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL2F0ZXhpdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGF0ZXhpdC5oLHYgMS43IDIwMDcvMDkvMDMgMTQ6NDA6MTYgbWlsbGVydCBFeHAgJCAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDAyIERhbmllbCBIYXJ0bWVpZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCi0gKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0KLXN0cnVjdCBhdGV4aXQgewotCXN0cnVjdCBhdGV4aXQgKm5leHQ7CQkvKiBuZXh0IGluIGxpc3QgKi8KLQlpbnQgaW5kOwkJCS8qIG5leHQgaW5kZXggaW4gdGhpcyB0YWJsZSAqLwotCWludCBtYXg7CQkJLyogbWF4IGVudHJpZXMgPj0gQVRFWElUX1NJWkUgKi8KLQlzdHJ1Y3QgYXRleGl0X2ZuIHsKLQkJdW5pb24gewotCQkJdm9pZCAoKnN0ZF9mdW5jKSh2b2lkKTsKLQkJCXZvaWQgKCpjeGFfZnVuYykodm9pZCAqKTsKLQkJfSBmbl9wdHI7Ci0JCXZvaWQgKmZuX2FyZzsJCS8qIGFyZ3VtZW50IGZvciBDWEEgY2FsbGJhY2sgKi8KLQkJdm9pZCAqZm5fZHNvOwkJLyogc2hhcmVkIG1vZHVsZSBoYW5kbGUgKi8KLQl9IGZuc1sxXTsJCQkvKiB0aGUgdGFibGUgaXRzZWxmICovCi19OwotCi1fX0JFR0lOX0RFQ0xTCi0KLWV4dGVybiBpbnQgX19hdGV4aXRfaW52YWxpZDsKLWV4dGVybiBzdHJ1Y3QgYXRleGl0ICpfX2F0ZXhpdDsJCS8qIHBvaW50cyB0byBoZWFkIG9mIExJRk8gc3RhY2sgKi8KLQotaW50CV9fY3hhX2F0ZXhpdCh2b2lkICgqKSh2b2lkICopLCB2b2lkICosIHZvaWQgKik7Ci12b2lkCV9fY3hhX2ZpbmFsaXplKHZvaWQgKik7Ci0KLV9fRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9jdHlwZV8uYyBiL2xpYmMvc3RkbGliL2N0eXBlXy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzAzZjY0Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL2N0eXBlXy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBjdHlwZV8uYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjMzIGVzcGllIEV4cCAkICovCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg5IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgotICogQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKLSAqIHRvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKLSAqIENvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoCi0gKiB0aGUgcGVybWlzc2lvbiBvZiBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSAiY3R5cGVfcHJpdmF0ZS5oIgotCi0jZGVmaW5lIF9VIF9DVFlQRV9VCi0jZGVmaW5lIF9MIF9DVFlQRV9MCi0jZGVmaW5lIF9OIF9DVFlQRV9OCi0jZGVmaW5lIF9TIF9DVFlQRV9TCi0jZGVmaW5lIF9QIF9DVFlQRV9QCi0jZGVmaW5lIF9DIF9DVFlQRV9DCi0jZGVmaW5lIF9YIF9DVFlQRV9YCi0jZGVmaW5lIF9CIF9DVFlQRV9CCi0KLWNvbnN0IGNoYXIgX0NfY3R5cGVfWzEgKyBDVFlQRV9OVU1fQ0hBUlNdID0gewotCTAsCi0JX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAotCV9DLAlfQ3xfUywJX0N8X1MsCV9DfF9TLAlfQ3xfUywJX0N8X1MsCV9DLAlfQywKLQlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCi0JX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAotICAgX1N8KGNoYXIpX0IsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAotCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwKLQlfTiwJX04sCV9OLAlfTiwJX04sCV9OLAlfTiwJX04sCi0JX04sCV9OLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAotCV9QLAlfVXxfWCwJX1V8X1gsCV9VfF9YLAlfVXxfWCwJX1V8X1gsCV9VfF9YLAlfVSwKLQlfVSwJX1UsCV9VLAlfVSwJX1UsCV9VLAlfVSwJX1UsCi0JX1UsCV9VLAlfVSwJX1UsCV9VLAlfVSwJX1UsCV9VLAotCV9VLAlfVSwJX1UsCV9QLAlfUCwJX1AsCV9QLAlfUCwKLQlfUCwJX0x8X1gsCV9MfF9YLAlfTHxfWCwJX0x8X1gsCV9MfF9YLAlfTHxfWCwJX0wsCi0JX0wsCV9MLAlfTCwJX0wsCV9MLAlfTCwJX0wsCV9MLAotCV9MLAlfTCwJX0wsCV9MLAlfTCwJX0wsCV9MLAlfTCwKLQkvKiBkZXRlcm1pbmUgcHJpbnRhYmlsaXR5IGJhc2VkIG9uIHRoZSBJUzAgODg1OSA4LWJpdCBzdGFuZGFyZCAqLwotCV9MLAlfTCwJX0wsCV9QLAlfUCwJX1AsCV9QLAlfQywKLQotCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywgLyogODAgKi8KLQlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsIC8qIDg4ICovCi0JX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLCAvKiA5MCAqLwotCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywgLyogOTggKi8KLQlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsIC8qIEEwICovCi0JX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLCAvKiBBOCAqLwotCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwgLyogQjAgKi8KLQlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsIC8qIEI4ICovCi0JX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLCAvKiBDMCAqLwotCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwgLyogQzggKi8KLQlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsIC8qIEQwICovCi0JX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLCAvKiBEOCAqLwotCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwgLyogRTAgKi8KLQlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsIC8qIEU4ICovCi0JX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLCAvKiBGMCAqLwotCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCAgLyogRjggKi8KLX07Ci0KLWNvbnN0IGNoYXIgKl9jdHlwZV8gPSBfQ19jdHlwZV87Ci0KLQotLy8gVE9ETzogZml4IHRoZSBoZWFkZXIgZmlsZSBzbyB3ZSBkb24ndCBoYXZlIHRvIGR1cGxpY2F0ZSBhbGwgdGhpcyBpbmxpbmVkIHN0dWZmLgotCi0jaWYgMSAvKiBuZGVmIE5ERUJVRyAqLwotaW50IGlzYWxudW0oaW50IGMpCi17Ci0JcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgKF9VfF9MfF9OKSkpOwotfQotCi1pbnQgaXNhbHBoYShpbnQgYykKLXsKLQlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiAoX1V8X0wpKSk7Ci19Ci0KLWludCBpc2NudHJsKGludCBjKQotewotCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9DKSk7Ci19Ci0KLWludCBpc2RpZ2l0KGludCBjKQotewotCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9OKSk7Ci19Ci0KLWludCBpc2dyYXBoKGludCBjKQotewotCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfUHxfVXxfTHxfTikpKTsKLX0KLQotaW50IGlzbG93ZXIoaW50IGMpCi17Ci0JcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX0wpKTsKLX0KLQotaW50IGlzcHJpbnQoaW50IGMpCi17Ci0JcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgKF9QfF9VfF9MfF9OfF9CKSkpOwotfQotCi1pbnQgaXNwdW5jdChpbnQgYykKLXsKLQlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfUCkpOwotfQotCi1pbnQgaXNzcGFjZShpbnQgYykKLXsKLQlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfUykpOwotfQotCi1pbnQgaXN1cHBlcihpbnQgYykKLXsKLQlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfVSkpOwotfQotCi1pbnQgaXN4ZGlnaXQoaW50IGMpCi17Ci0JcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgKF9OfF9YKSkpOwotfQotCi0jaWYgX19CU0RfVklTSUJMRSB8fCBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OSB8fCBfX1BPU0lYX1ZJU0lCTEUgPiAyMDAxMTIgXAotICAgIHx8IF9fWFBHX1ZJU0lCTEUgPiA2MDAKLWludCBpc2JsYW5rKGludCBjKQotewotCXJldHVybiAoYyA9PSAnICcgfHwgYyA9PSAnXHQnKTsKLX0KLSNlbmRpZgotCi0jaWYgX19CU0RfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFCi1pbnQgaXNhc2NpaShpbnQgYykKLXsKLQlyZXR1cm4gKCh1bnNpZ25lZCBpbnQpYyA8PSAwMTc3KTsKLX0KLQotaW50IHRvYXNjaWkoaW50IGMpCi17Ci0JcmV0dXJuIChjICYgMDE3Nyk7Ci19Ci0KLSNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFIHx8IF9fWFBHX1ZJU0lCTEUgKi8KLQotI2VuZGlmIC8qICFOREJFVUcgKi8KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL2dldGVudi5jIGIvbGliYy9zdGRsaWIvZ2V0ZW52LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMzY3YjMuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRsaWIvZ2V0ZW52LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgkkT3BlbkJTRDogZ2V0ZW52LmMsdiAxLjggMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4NywgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotY2hhciAqX19maW5kZW52KGNvbnN0IGNoYXIgKm5hbWUsIGludCAqb2Zmc2V0KTsKLQotLyoKLSAqIF9fZmluZGVudiAtLQotICoJUmV0dXJucyBwb2ludGVyIHRvIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBuYW1lLCBpZiBhbnksIGVsc2UgTlVMTC4KLSAqCVNldHMgb2Zmc2V0IHRvIGJlIHRoZSBvZmZzZXQgb2YgdGhlIG5hbWUvdmFsdWUgY29tYmluYXRpb24gaW4gdGhlCi0gKgllbnZpcm9ubWVudGFsIGFycmF5LCBmb3IgdXNlIGJ5IHNldGVudigzKSBhbmQgdW5zZXRlbnYoMykuCi0gKglFeHBsaWNpdGx5IHJlbW92ZXMgJz0nIGluIGFyZ3VtZW50IG5hbWUuCi0gKgotICoJVGhpcyByb3V0aW5lICpzaG91bGQqIGJlIGEgc3RhdGljOyBkb24ndCB1c2UgaXQuCi0gKi8KLWNoYXIgKgotX19maW5kZW52KGNvbnN0IGNoYXIgKm5hbWUsIGludCAqb2Zmc2V0KQotewotCWV4dGVybiBjaGFyICoqZW52aXJvbjsKLQlpbnQgbGVuLCBpOwotCWNvbnN0IGNoYXIgKm5wOwotCWNoYXIgKipwLCAqY3A7Ci0KLQlpZiAobmFtZSA9PSBOVUxMIHx8IGVudmlyb24gPT0gTlVMTCkKLQkJcmV0dXJuIChOVUxMKTsKLQlmb3IgKG5wID0gbmFtZTsgKm5wICYmICpucCAhPSAnPSc7ICsrbnApCi0JCTsKLQlsZW4gPSBucCAtIG5hbWU7Ci0JZm9yIChwID0gZW52aXJvbjsgKGNwID0gKnApICE9IE5VTEw7ICsrcCkgewotCQlmb3IgKG5wID0gbmFtZSwgaSA9IGxlbjsgaSAmJiAqY3A7IGktLSkKLQkJCWlmICgqY3ArKyAhPSAqbnArKykKLQkJCQlicmVhazsKLQkJaWYgKGkgPT0gMCAmJiAqY3ArKyA9PSAnPScpIHsKLQkJCSpvZmZzZXQgPSBwIC0gZW52aXJvbjsKLQkJCXJldHVybiAoY3ApOwotCQl9Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLS8qCi0gKiBnZXRlbnYgLS0KLSAqCVJldHVybnMgcHRyIHRvIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBuYW1lLCBpZiBhbnksIGVsc2UgTlVMTC4KLSAqLwotY2hhciAqCi1nZXRlbnYoY29uc3QgY2hhciAqbmFtZSkKLXsKLQlpbnQgb2Zmc2V0OwotCi0JcmV0dXJuIChfX2ZpbmRlbnYobmFtZSwgJm9mZnNldCkpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvcHV0ZW52LmMgYi9saWJjL3N0ZGxpYi9wdXRlbnYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ0ODJmNi4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGxpYi9wdXRlbnYuYworKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCSRPcGVuQlNEOiBwdXRlbnYuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MwotICogICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLWludAotcHV0ZW52KGNvbnN0IGNoYXIgKnN0cikKLXsKLQljaGFyICpwLCAqZXF1YWw7Ci0JaW50IHJ2YWw7Ci0KLQlpZiAoKHAgPSBzdHJkdXAoc3RyKSkgPT0gTlVMTCkKLQkJcmV0dXJuICgtMSk7Ci0JaWYgKChlcXVhbCA9IHN0cmNocihwLCAnPScpKSA9PSBOVUxMKSB7Ci0JCSh2b2lkKWZyZWUocCk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQkqZXF1YWwgPSAnXDAnOwotCXJ2YWwgPSBzZXRlbnYocCwgZXF1YWwgKyAxLCAxKTsKLQkodm9pZClmcmVlKHApOwotCXJldHVybiAocnZhbCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zZXRlbnYuYyBiL2xpYmMvc3RkbGliL3NldGVudi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTZkYjVlLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL3NldGVudi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBzZXRlbnYuYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg3IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotY2hhciAqX19maW5kZW52KGNvbnN0IGNoYXIgKm5hbWUsIGludCAqb2Zmc2V0KTsKLQotZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwotCi0vKgotICogc2V0ZW52IC0tCi0gKglTZXQgdGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlICJuYW1lIiB0byBiZQotICoJInZhbHVlIi4gIElmIHJld3JpdGUgaXMgc2V0LCByZXBsYWNlIGFueSBjdXJyZW50IHZhbHVlLgotICovCi1pbnQKLXNldGVudihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHJld3JpdGUpCi17Ci0Jc3RhdGljIGNoYXIgKipsYXN0ZW52OwkJCS8qIGxhc3QgdmFsdWUgb2YgZW52aXJvbiAqLwotCWNoYXIgKkM7Ci0JaW50IGxfdmFsdWUsIG9mZnNldDsKLQotCWlmICgqdmFsdWUgPT0gJz0nKQkJCS8qIG5vIGA9JyBpbiB2YWx1ZSAqLwotCQkrK3ZhbHVlOwotCWxfdmFsdWUgPSBzdHJsZW4odmFsdWUpOwotCWlmICgoQyA9IF9fZmluZGVudihuYW1lLCAmb2Zmc2V0KSkpIHsJLyogZmluZCBpZiBhbHJlYWR5IGV4aXN0cyAqLwotCQlpZiAoIXJld3JpdGUpCi0JCQlyZXR1cm4gKDApOwotCQlpZiAoKGludClzdHJsZW4oQykgPj0gbF92YWx1ZSkgewkvKiBvbGQgbGFyZ2VyOyBjb3B5IG92ZXIgKi8KLQkJCXdoaWxlICgoKkMrKyA9ICp2YWx1ZSsrKSkKLQkJCQk7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0JfSBlbHNlIHsJCQkJCS8qIGNyZWF0ZSBuZXcgc2xvdCAqLwotCQlzaXplX3QgY250OwotCQljaGFyICoqUDsKLQotCQlmb3IgKFAgPSBlbnZpcm9uOyAqUCAhPSBOVUxMOyBQKyspCi0JCQk7Ci0JCWNudCA9IFAgLSBlbnZpcm9uOwotICAgICAgICBQID0gKGNoYXIgKiopcmVhbGxvYyhsYXN0ZW52LCBzaXplb2YoY2hhciAqKSAqIChjbnQgKyAyKSk7Ci0JCWlmICghUCkKLQkJCXJldHVybiAoLTEpOwotCQlpZiAobGFzdGVudiAhPSBlbnZpcm9uKQotCQkJbWVtY3B5KFAsIGVudmlyb24sIGNudCAqIHNpemVvZihjaGFyICopKTsKLQkJbGFzdGVudiA9IGVudmlyb24gPSBQOwotCQlvZmZzZXQgPSBjbnQ7Ci0JCWVudmlyb25bY250ICsgMV0gPSBOVUxMOwotCX0KLQlmb3IgKEMgPSAoY2hhciAqKW5hbWU7ICpDICYmICpDICE9ICc9JzsgKytDKQotCQk7CQkJCS8qIG5vIGA9JyBpbiBuYW1lICovCi0JaWYgKCEoZW52aXJvbltvZmZzZXRdID0JCQkvKiBuYW1lICsgYD0nICsgdmFsdWUgKi8KLQkgICAgbWFsbG9jKChzaXplX3QpKChpbnQpKEMgLSBuYW1lKSArIGxfdmFsdWUgKyAyKSkpKQotCQlyZXR1cm4gKC0xKTsKLQlmb3IgKEMgPSBlbnZpcm9uW29mZnNldF07ICgqQyA9ICpuYW1lKyspICYmICpDICE9ICc9JzsgKytDKQotCQk7Ci0JZm9yICgqQysrID0gJz0nOyAoKkMrKyA9ICp2YWx1ZSsrKTsgKQotCQk7Ci0JcmV0dXJuICgwKTsKLX0KLQotLyoKLSAqIHVuc2V0ZW52KG5hbWUpIC0tCi0gKglEZWxldGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSAibmFtZSIuCi0gKi8KLWludAotdW5zZXRlbnYoY29uc3QgY2hhciAqbmFtZSkKLXsKLQljaGFyICoqUDsKLQlpbnQgb2Zmc2V0OwotCi0Jd2hpbGUgKF9fZmluZGVudihuYW1lLCAmb2Zmc2V0KSkJLyogaWYgc2V0IG11bHRpcGxlIHRpbWVzICovCi0JCWZvciAoUCA9ICZlbnZpcm9uW29mZnNldF07OyArK1ApCi0JCQlpZiAoISgqUCA9ICooUCArIDEpKSkKLQkJCQlicmVhazsKLQotICAgICAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3N0cnRvZC5jIGIvbGliYy9zdGRsaWIvc3RydG9kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MzRkOWEuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRsaWIvc3RydG9kLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzA4ICswLDAgQEAKLS8qCSROZXRCU0Q6IHN0cnRvZC5jLHYgMS40NS4yLjEgMjAwNS8wNC8xOSAxMzozNTo1NCB0cm9uIEV4cCAkCSovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTEgYnkgQVQmVC4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBlbnRpcmUgbm90aWNlCi0gKiBpcyBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIGFueSBzb2Z0d2FyZSB3aGljaCBpcyBvciBpbmNsdWRlcyBhIGNvcHkKLSAqIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBpbiBhbGwgY29waWVzIG9mIHRoZSBzdXBwb3J0aW5nCi0gKiBkb2N1bWVudGF0aW9uIGZvciBzdWNoIHNvZnR3YXJlLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiBXQVJSQU5UWS4gIElOIFBBUlRJQ1VMQVIsIE5FSVRIRVIgVEhFIEFVVEhPUiBOT1IgQVQmVCBNQUtFUyBBTlkKLSAqIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1FUkNIQU5UQUJJTElUWQotICogT0YgVEhJUyBTT0ZUV0FSRSBPUiBJVFMgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0bwotCURhdmlkIE0uIEdheQotCUFUJlQgQmVsbCBMYWJvcmF0b3JpZXMsIFJvb20gMkMtNDYzCi0JNjAwIE1vdW50YWluIEF2ZW51ZQotCU11cnJheSBIaWxsLCBOSiAwNzk3NC0yMDcwCi0JVS5TLkEuCi0JZG1nQHJlc2VhcmNoLmF0dC5jb20gb3IgcmVzZWFyY2ghZG1nCi0gKi8KLQotLyogc3RydG9kIGZvciBJRUVFLSwgVkFYLSwgYW5kIElCTS1hcml0aG1ldGljIG1hY2hpbmVzLgotICoKLSAqIFRoaXMgc3RydG9kIHJldHVybnMgYSBuZWFyZXN0IG1hY2hpbmUgbnVtYmVyIHRvIHRoZSBpbnB1dCBkZWNpbWFsCi0gKiBzdHJpbmcgKG9yIHNldHMgZXJybm8gdG8gRVJBTkdFKS4gIFdpdGggSUVFRSBhcml0aG1ldGljLCB0aWVzIGFyZQotICogYnJva2VuIGJ5IHRoZSBJRUVFIHJvdW5kLWV2ZW4gcnVsZS4gIE90aGVyd2lzZSB0aWVzIGFyZSBicm9rZW4gYnkKLSAqIGJpYXNlZCByb3VuZGluZyAoYWRkIGhhbGYgYW5kIGNob3ApLgotICoKLSAqIEluc3BpcmVkIGxvb3NlbHkgYnkgV2lsbGlhbSBELiBDbGluZ2VyJ3MgcGFwZXIgIkhvdyB0byBSZWFkIEZsb2F0aW5nCi0gKiBQb2ludCBOdW1iZXJzIEFjY3VyYXRlbHkiIFtQcm9jLiBBQ00gU0lHUExBTiAnOTAsIHBwLiA5Mi0xMDFdLgotICoKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKgotICoJMS4gV2Ugb25seSByZXF1aXJlIElFRUUsIElCTSwgb3IgVkFYIGRvdWJsZS1wcmVjaXNpb24KLSAqCQlhcml0aG1ldGljIChub3QgSUVFRSBkb3VibGUtZXh0ZW5kZWQpLgotICoJMi4gV2UgZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyBpbiBhIGNhc2UgdGhhdAotICoJCUNsaW5nZXIgbWlzc2VkIC0tIHdoZW4gd2UncmUgY29tcHV0aW5nIGQgKiAxMF5uCi0gKgkJZm9yIGEgc21hbGwgaW50ZWdlciBkIGFuZCB0aGUgaW50ZWdlciBuIGlzIG5vdCB0b28KLSAqCQltdWNoIGxhcmdlciB0aGFuIDIyICh0aGUgbWF4aW11bSBpbnRlZ2VyIGsgZm9yIHdoaWNoCi0gKgkJd2UgY2FuIHJlcHJlc2VudCAxMF5rIGV4YWN0bHkpLCB3ZSBtYXkgYmUgYWJsZSB0bwotICoJCWNvbXB1dGUgKGQqMTBeaykgKiAxMF4oZS1rKSB3aXRoIGp1c3Qgb25lIHJvdW5kb2ZmLgotICoJMy4gUmF0aGVyIHRoYW4gYSBiaXQtYXQtYS10aW1lIGFkanVzdG1lbnQgb2YgdGhlIGJpbmFyeQotICoJCXJlc3VsdCBpbiB0aGUgaGFyZCBjYXNlLCB3ZSB1c2UgZmxvYXRpbmctcG9pbnQKLSAqCQlhcml0aG1ldGljIHRvIGRldGVybWluZSB0aGUgYWRqdXN0bWVudCB0byB3aXRoaW4KLSAqCQlvbmUgYml0OyBvbmx5IGluIHJlYWxseSBoYXJkIGNhc2VzIGRvIHdlIG5lZWQgdG8KLSAqCQljb21wdXRlIGEgc2Vjb25kIHJlc2lkdWFsLgotICoJNC4gQmVjYXVzZSBvZiAzLiwgd2UgZG9uJ3QgbmVlZCBhIGxhcmdlIHRhYmxlIG9mIHBvd2VycyBvZiAxMAotICoJCWZvciB0ZW4tdG8tZSAoanVzdCBzb21lIHNtYWxsIHRhYmxlcywgZS5nLiBvZiAxMF5rCi0gKgkJZm9yIDAgPD0gayA8PSAyMikuCi0gKi8KLQotLyoKLSAqICNkZWZpbmUgSUVFRV9MSVRUTEVfRU5ESUFOIGZvciBJRUVFLWFyaXRobWV0aWMgbWFjaGluZXMgd2hlcmUgdGhlIGxlYXN0Ci0gKglzaWduaWZpY2FudCBieXRlIGhhcyB0aGUgbG93ZXN0IGFkZHJlc3MuCi0gKiAjZGVmaW5lIElFRUVfQklHX0VORElBTiBmb3IgSUVFRS1hcml0aG1ldGljIG1hY2hpbmVzIHdoZXJlIHRoZSBtb3N0Ci0gKglzaWduaWZpY2FudCBieXRlIGhhcyB0aGUgbG93ZXN0IGFkZHJlc3MuCi0gKiAjZGVmaW5lIExvbmcgaW50IG9uIG1hY2hpbmVzIHdpdGggMzItYml0IGludHMgYW5kIDY0LWJpdCBsb25ncy4KLSAqICNkZWZpbmUgU3VkZGVuX1VuZGVyZmxvdyBmb3IgSUVFRS1mb3JtYXQgbWFjaGluZXMgd2l0aG91dCBncmFkdWFsCi0gKgl1bmRlcmZsb3cgKGkuZS4sIHRoYXQgZmx1c2ggdG8gemVybyBvbiB1bmRlcmZsb3cpLgotICogI2RlZmluZSBJQk0gZm9yIElCTSBtYWluZnJhbWUtc3R5bGUgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4KLSAqICNkZWZpbmUgVkFYIGZvciBWQVgtc3R5bGUgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4KLSAqICNkZWZpbmUgVW5zaWduZWRfU2hpZnRzIGlmID4+IGRvZXMgdHJlYXRzIGl0cyBsZWZ0IG9wZXJhbmQgYXMgdW5zaWduZWQuCi0gKiAjZGVmaW5lIE5vX2xlZnRyaWdodCB0byBvbWl0IGxlZnQtcmlnaHQgbG9naWMgaW4gZmFzdCBmbG9hdGluZy1wb2ludAotICoJY29tcHV0YXRpb24gb2YgZHRvYS4KLSAqICNkZWZpbmUgQ2hlY2tfRkxUX1JPVU5EUyBpZiBGTFRfUk9VTkRTIGNhbiBhc3N1bWUgdGhlIHZhbHVlcyAyIG9yIDMuCi0gKiAjZGVmaW5lIFJORF9QUk9EUVVPVCB0byB1c2Ugcm5kX3Byb2QgYW5kIHJuZF9xdW90IChhc3NlbWJseSByb3V0aW5lcwotICoJdGhhdCB1c2UgZXh0ZW5kZWQtcHJlY2lzaW9uIGluc3RydWN0aW9ucyB0byBjb21wdXRlIHJvdW5kZWQKLSAqCXByb2R1Y3RzIGFuZCBxdW90aWVudHMpIHdpdGggSUJNLgotICogI2RlZmluZSBST1VORF9CSUFTRUQgZm9yIElFRUUtZm9ybWF0IHdpdGggYmlhc2VkIHJvdW5kaW5nLgotICogI2RlZmluZSBJbmFjY3VyYXRlX0RpdmlkZSBmb3IgSUVFRS1mb3JtYXQgd2l0aCBjb3JyZWN0bHkgcm91bmRlZAotICoJcHJvZHVjdHMgYnV0IGluYWNjdXJhdGUgcXVvdGllbnRzLCBlLmcuLCBmb3IgSW50ZWwgaTg2MC4KLSAqICNkZWZpbmUgSnVzdF8xNiB0byBzdG9yZSAxNiBiaXRzIHBlciAzMi1iaXQgTG9uZyB3aGVuIGRvaW5nIGhpZ2gtcHJlY2lzaW9uCi0gKglpbnRlZ2VyIGFyaXRobWV0aWMuICBXaGV0aGVyIHRoaXMgc3BlZWRzIHRoaW5ncyB1cCBvciBzbG93cyB0aGluZ3MKLSAqCWRvd24gZGVwZW5kcyBvbiB0aGUgbWFjaGluZSBhbmQgdGhlIG51bWJlciBiZWluZyBjb252ZXJ0ZWQuCi0gKiAjZGVmaW5lIEtSX2hlYWRlcnMgZm9yIG9sZC1zdHlsZSBDIGZ1bmN0aW9uIGhlYWRlcnMuCi0gKiAjZGVmaW5lIEJhZF9mbG9hdF9oIGlmIHlvdXIgc3lzdGVtIGxhY2tzIGEgZmxvYXQuaCBvciBpZiBpdCBkb2VzIG5vdAotICoJZGVmaW5lIHNvbWUgb3IgYWxsIG9mIERCTF9ESUcsIERCTF9NQVhfMTBfRVhQLCBEQkxfTUFYX0VYUCwKLSAqCUZMVF9SQURJWCwgRkxUX1JPVU5EUywgYW5kIERCTF9NQVguCi0gKiAjZGVmaW5lIE1BTExPQyB5b3VyX21hbGxvYywgd2hlcmUgeW91cl9tYWxsb2MobikgYWN0cyBsaWtlIG1hbGxvYyhuKQotICoJaWYgbWVtb3J5IGlzIGF2YWlsYWJsZSBhbmQgb3RoZXJ3aXNlIGRvZXMgc29tZXRoaW5nIHlvdSBkZWVtCi0gKglhcHByb3ByaWF0ZS4gIElmIE1BTExPQyBpcyB1bmRlZmluZWQsIG1hbGxvYyB3aWxsIGJlIGludm9rZWQKLSAqCWRpcmVjdGx5IC0tIGFuZCBhc3N1bWVkIGFsd2F5cyB0byBzdWNjZWVkLgotICovCi0KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jZGVmaW5lIG11dGV4X2xvY2soeCkgcHRocmVhZF9tdXRleF9sb2NrKHgpCi0jZGVmaW5lIG11dGV4X3VubG9jayh4KSBwdGhyZWFkX211dGV4X3VubG9jayh4KQotI2VuZGlmCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLV9fUkNTSUQoIiROZXRCU0Q6IHN0cnRvZC5jLHYgMS40NS4yLjEgMjAwNS8wNC8xOSAxMzozNTo1NCB0cm9uIEV4cCAkIik7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotCi0jZGVmaW5lIFVuc2lnbmVkX1NoaWZ0cwotI2lmIGRlZmluZWQoX19tNjhrX18pIHx8IGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBcCi0gICAgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChfX25zMzJrX18pIHx8IGRlZmluZWQoX19hbHBoYV9fKSB8fCBcCi0gICAgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX3NoX18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgXAotICAgIGRlZmluZWQoX19ocHBhX18pIHx8IFwKLSAgICAoZGVmaW5lZChfX2FybV9fKSAmJiBkZWZpbmVkKF9fVkZQX0ZQX18pKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQotI2luY2x1ZGUgPGVuZGlhbi5oPgotI2lmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgotI2RlZmluZSBJRUVFX0JJR19FTkRJQU4KLSNlbHNlCi0jZGVmaW5lIElFRUVfTElUVExFX0VORElBTgotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX19WRlBfRlBfXykKLS8qCi0gKiBBbHRob3VnaCB0aGUgQ1BVIGlzIGxpdHRsZSBlbmRpYW4gdGhlIEZQIGhhcyBkaWZmZXJlbnQKLSAqIGJ5dGUgYW5kIHdvcmQgZW5kaWFubmVzcy4gVGhlIGJ5dGUgb3JkZXIgaXMgc3RpbGwgbGl0dGxlIGVuZGlhbgotICogYnV0IHRoZSB3b3JkIG9yZGVyIGlzIGJpZyBlbmRpYW4uCi0gKi8KLSNkZWZpbmUgSUVFRV9CSUdfRU5ESUFOCi0jZW5kaWYKLQotI2lmZGVmIF9fdmF4X18KLSNkZWZpbmUgVkFYCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19ocHBhX18pIHx8IGRlZmluZWQoX19taXBzX18pIHx8IGRlZmluZWQoX19zaF9fKQotI2RlZmluZQlOQU5fV09SRDAJMHg3ZmY0MDAwMAotI2Vsc2UKLSNkZWZpbmUJTkFOX1dPUkQwCTB4N2ZmODAwMDAKLSNlbmRpZgotI2RlZmluZQlOQU5fV09SRDEJMAotCi0jZGVmaW5lIExvbmcJaW50MzJfdAotI2RlZmluZSBVTG9uZwl1X2ludDMyX3QKLQotI2lmZGVmIERFQlVHCi0jaW5jbHVkZSAic3RkaW8uaCIKLSNkZWZpbmUgQnVnKHgpIHtmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB4KTsgZXhpdCgxKTt9Ci0jZW5kaWYKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0jaW5jbHVkZSAibWFsbG9jLmgiCi0jaW5jbHVkZSAibWVtb3J5LmgiCi0jZWxzZQotI2lmbmRlZiBLUl9oZWFkZXJzCi0jaW5jbHVkZSAic3RkbGliLmgiCi0jaW5jbHVkZSAic3RyaW5nLmgiCi0jaWZuZGVmIEFORFJPSURfQ0hBTkdFUwotI2luY2x1ZGUgImxvY2FsZS5oIgotI2VuZGlmIC8qIEFORFJPSURfQ0hBTkdFUyAqLwotI2Vsc2UKLSNpbmNsdWRlICJtYWxsb2MuaCIKLSNpbmNsdWRlICJtZW1vcnkuaCIKLSNlbmRpZgotI2VuZGlmCi0jaWZuZGVmIEFORFJPSURfQ0hBTkdFUwotI2luY2x1ZGUgImV4dGVybi5oIgotI2luY2x1ZGUgInJlZW50cmFudC5oIgotI2VuZGlmIC8qIEFORFJPSURfQ0hBTkdFUyAqLwotCi0jaWZkZWYgTUFMTE9DCi0jaWZkZWYgS1JfaGVhZGVycwotZXh0ZXJuIGNoYXIgKk1BTExPQygpOwotI2Vsc2UKLWV4dGVybiB2b2lkICpNQUxMT0Moc2l6ZV90KTsKLSNlbmRpZgotI2Vsc2UKLSNkZWZpbmUgTUFMTE9DIG1hbGxvYwotI2VuZGlmCi0KLSNpbmNsdWRlICJjdHlwZS5oIgotI2luY2x1ZGUgImVycm5vLmgiCi0jaW5jbHVkZSAiZmxvYXQuaCIKLQotI2lmbmRlZiBfX01BVEhfSF9fCi0jaW5jbHVkZSAibWF0aC5oIgotI2VuZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2lmbmRlZiBDT05TVAotI2lmZGVmIEtSX2hlYWRlcnMKLSNkZWZpbmUgQ09OU1QgLyogYmxhbmsgKi8KLSNlbHNlCi0jZGVmaW5lIENPTlNUIGNvbnN0Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgVW5zaWduZWRfU2hpZnRzCi0jZGVmaW5lIFNpZ25fRXh0ZW5kKGEsYikgaWYgKGIgPCAwKSBhIHw9IDB4ZmZmZjAwMDA7Ci0jZWxzZQotI2RlZmluZSBTaWduX0V4dGVuZChhLGIpIC8qbm8tb3AqLwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKElFRUVfTElUVExFX0VORElBTikgKyBkZWZpbmVkKElFRUVfQklHX0VORElBTikgKyBkZWZpbmVkKFZBWCkgKyBcCi0gICAgZGVmaW5lZChJQk0pICE9IDEKLUV4YWN0bHkgb25lIG9mIElFRUVfTElUVExFX0VORElBTiBJRUVFX0JJR19FTkRJQU4sIFZBWCwgb3IKLUlCTSBzaG91bGQgYmUgZGVmaW5lZC4KLSNlbmRpZgotCi10eXBlZGVmIHVuaW9uIHsKLQlkb3VibGUgZDsKLQlVTG9uZyB1bFsyXTsKLX0gX2RvdWJsZTsKLSNkZWZpbmUgdmFsdWUoeCkgKCh4KS5kKQotI2lmZGVmIElFRUVfTElUVExFX0VORElBTgotI2RlZmluZSB3b3JkMCh4KSAoKHgpLnVsWzFdKQotI2RlZmluZSB3b3JkMSh4KSAoKHgpLnVsWzBdKQotI2Vsc2UKLSNkZWZpbmUgd29yZDAoeCkgKCh4KS51bFswXSkKLSNkZWZpbmUgd29yZDEoeCkgKCh4KS51bFsxXSkKLSNlbmRpZgotCi0vKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb24gb2YgU3RvcmVpbmMgaXMgYXBwcm9wcmlhdGUgZm9yIE1JUFMgcHJvY2Vzc29ycy4KLSAqIEFuIGFsdGVybmF0aXZlIHRoYXQgbWlnaHQgYmUgYmV0dGVyIG9uIHNvbWUgbWFjaGluZXMgaXMKLSAqICNkZWZpbmUgU3RvcmVpbmMoYSxiLGMpICgqYSsrID0gYiA8PCAxNiB8IGMgJiAweGZmZmYpCi0gKi8KLSNpZiBkZWZpbmVkKElFRUVfTElUVExFX0VORElBTikgKyBkZWZpbmVkKFZBWCkgKyBkZWZpbmVkKF9fYXJtX18pCi0jZGVmaW5lIFN0b3JlaW5jKGEsYixjKSBcCi0gICAgKCgodV9zaG9ydCAqKSh2b2lkICopYSlbMV0gPSBcCi0JKHVfc2hvcnQpYiwgKCh1X3Nob3J0ICopKHZvaWQgKilhKVswXSA9ICh1X3Nob3J0KWMsIGErKykKLSNlbHNlCi0jZGVmaW5lIFN0b3JlaW5jKGEsYixjKSBcCi0gICAgKCgodV9zaG9ydCAqKSh2b2lkICopYSlbMF0gPSBcCi0JKHVfc2hvcnQpYiwgKCh1X3Nob3J0ICopKHZvaWQgKilhKVsxXSA9ICh1X3Nob3J0KWMsIGErKykKLSNlbmRpZgotCi0vKiAjZGVmaW5lIFAgREJMX01BTlRfRElHICovCi0vKiBUZW5fcG1heCA9IGZsb29yKFAqbG9nKDIpL2xvZyg1KSkgKi8KLS8qIEJsZXRjaCA9IChoaWdoZXN0IHBvd2VyIG9mIDIgPCBEQkxfTUFYXzEwX0VYUCkgLyAxNiAqLwotLyogUXVpY2tfbWF4ID0gZmxvb3IoKFAtMSkqbG9nKEZMVF9SQURJWCkvbG9nKDEwKSAtIDEpICovCi0vKiBJbnRfbWF4ID0gZmxvb3IoUCpsb2coRkxUX1JBRElYKS9sb2coMTApIC0gMSkgKi8KLQotI2lmIGRlZmluZWQoSUVFRV9MSVRUTEVfRU5ESUFOKSArIGRlZmluZWQoSUVFRV9CSUdfRU5ESUFOKQotI2RlZmluZSBFeHBfc2hpZnQgIDIwCi0jZGVmaW5lIEV4cF9zaGlmdDEgMjAKLSNkZWZpbmUgRXhwX21zazEgICAgMHgxMDAwMDAKLSNkZWZpbmUgRXhwX21zazExICAgMHgxMDAwMDAKLSNkZWZpbmUgRXhwX21hc2sgIDB4N2ZmMDAwMDAKLSNkZWZpbmUgUCA1MwotI2RlZmluZSBCaWFzIDEwMjMKLSNkZWZpbmUgSUVFRV9Bcml0aAotI2RlZmluZSBFbWluICgtMTAyMikKLSNkZWZpbmUgRXhwXzEgIDB4M2ZmMDAwMDAKLSNkZWZpbmUgRXhwXzExIDB4M2ZmMDAwMDAKLSNkZWZpbmUgRWJpdHMgMTEKLSNkZWZpbmUgRnJhY19tYXNrICAweGZmZmZmCi0jZGVmaW5lIEZyYWNfbWFzazEgMHhmZmZmZgotI2RlZmluZSBUZW5fcG1heCAyMgotI2RlZmluZSBCbGV0Y2ggMHgxMAotI2RlZmluZSBCbmRyeV9tYXNrICAweGZmZmZmCi0jZGVmaW5lIEJuZHJ5X21hc2sxIDB4ZmZmZmYKLSNkZWZpbmUgTFNCIDEKLSNkZWZpbmUgU2lnbl9iaXQgMHg4MDAwMDAwMAotI2RlZmluZSBMb2cyUCAxCi0jZGVmaW5lIFRpbnkwIDAKLSNkZWZpbmUgVGlueTEgMQotI2RlZmluZSBRdWlja19tYXggMTQKLSNkZWZpbmUgSW50X21heCAxNAotI2RlZmluZSBJbmZpbml0ZSh4KSAod29yZDAoeCkgPT0gMHg3ZmYwMDAwMCkgLyogc3VmZmljaWVudCB0ZXN0IGZvciBoZXJlICovCi0jZWxzZQotI3VuZGVmICBTdWRkZW5fVW5kZXJmbG93Ci0jZGVmaW5lIFN1ZGRlbl9VbmRlcmZsb3cKLSNpZmRlZiBJQk0KLSNkZWZpbmUgRXhwX3NoaWZ0ICAyNAotI2RlZmluZSBFeHBfc2hpZnQxIDI0Ci0jZGVmaW5lIEV4cF9tc2sxICAgMHgxMDAwMDAwCi0jZGVmaW5lIEV4cF9tc2sxMSAgMHgxMDAwMDAwCi0jZGVmaW5lIEV4cF9tYXNrICAweDdmMDAwMDAwCi0jZGVmaW5lIFAgMTQKLSNkZWZpbmUgQmlhcyA2NQotI2RlZmluZSBFeHBfMSAgMHg0MTAwMDAwMAotI2RlZmluZSBFeHBfMTEgMHg0MTAwMDAwMAotI2RlZmluZSBFYml0cyA4CS8qIGV4cG9uZW50IGhhcyA3IGJpdHMsIGJ1dCA4IGlzIHRoZSByaWdodCB2YWx1ZSBpbiBiMmQgKi8KLSNkZWZpbmUgRnJhY19tYXNrICAweGZmZmZmZgotI2RlZmluZSBGcmFjX21hc2sxIDB4ZmZmZmZmCi0jZGVmaW5lIEJsZXRjaCA0Ci0jZGVmaW5lIFRlbl9wbWF4IDIyCi0jZGVmaW5lIEJuZHJ5X21hc2sgIDB4ZWZmZmZmCi0jZGVmaW5lIEJuZHJ5X21hc2sxIDB4ZmZmZmZmCi0jZGVmaW5lIExTQiAxCi0jZGVmaW5lIFNpZ25fYml0IDB4ODAwMDAwMDAKLSNkZWZpbmUgTG9nMlAgNAotI2RlZmluZSBUaW55MCAweDEwMDAwMAotI2RlZmluZSBUaW55MSAwCi0jZGVmaW5lIFF1aWNrX21heCAxNAotI2RlZmluZSBJbnRfbWF4IDE1Ci0jZWxzZSAvKiBWQVggKi8KLSNkZWZpbmUgRXhwX3NoaWZ0ICAyMwotI2RlZmluZSBFeHBfc2hpZnQxIDcKLSNkZWZpbmUgRXhwX21zazEgICAgMHg4MAotI2RlZmluZSBFeHBfbXNrMTEgICAweDgwMDAwMAotI2RlZmluZSBFeHBfbWFzayAgMHg3ZjgwCi0jZGVmaW5lIFAgNTYKLSNkZWZpbmUgQmlhcyAxMjkKLSNkZWZpbmUgRXhwXzEgIDB4NDA4MDAwMDAKLSNkZWZpbmUgRXhwXzExIDB4NDA4MAotI2RlZmluZSBFYml0cyA4Ci0jZGVmaW5lIEZyYWNfbWFzayAgMHg3ZmZmZmYKLSNkZWZpbmUgRnJhY19tYXNrMSAweGZmZmYwMDdmCi0jZGVmaW5lIFRlbl9wbWF4IDI0Ci0jZGVmaW5lIEJsZXRjaCAyCi0jZGVmaW5lIEJuZHJ5X21hc2sgIDB4ZmZmZjAwN2YKLSNkZWZpbmUgQm5kcnlfbWFzazEgMHhmZmZmMDA3ZgotI2RlZmluZSBMU0IgMHgxMDAwMAotI2RlZmluZSBTaWduX2JpdCAweDgwMDAKLSNkZWZpbmUgTG9nMlAgMQotI2RlZmluZSBUaW55MCAweDgwCi0jZGVmaW5lIFRpbnkxIDAKLSNkZWZpbmUgUXVpY2tfbWF4IDE1Ci0jZGVmaW5lIEludF9tYXggMTUKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSUVFRV9Bcml0aAotI2RlZmluZSBST1VORF9CSUFTRUQKLSNlbmRpZgotCi0jaWZkZWYgUk5EX1BST0RRVU9UCi0jZGVmaW5lIHJvdW5kZWRfcHJvZHVjdChhLGIpIGEgPSBybmRfcHJvZChhLCBiKQotI2RlZmluZSByb3VuZGVkX3F1b3RpZW50KGEsYikgYSA9IHJuZF9xdW90KGEsIGIpCi0jaWZkZWYgS1JfaGVhZGVycwotZXh0ZXJuIGRvdWJsZSBybmRfcHJvZCgpLCBybmRfcXVvdCgpOwotI2Vsc2UKLWV4dGVybiBkb3VibGUgcm5kX3Byb2QoZG91YmxlLCBkb3VibGUpLCBybmRfcXVvdChkb3VibGUsIGRvdWJsZSk7Ci0jZW5kaWYKLSNlbHNlCi0jZGVmaW5lIHJvdW5kZWRfcHJvZHVjdChhLGIpIGEgKj0gYgotI2RlZmluZSByb3VuZGVkX3F1b3RpZW50KGEsYikgYSAvPSBiCi0jZW5kaWYKLQotI2RlZmluZSBCaWcwIChGcmFjX21hc2sxIHwgRXhwX21zazEqKERCTF9NQVhfRVhQK0JpYXMtMSkpCi0jZGVmaW5lIEJpZzEgMHhmZmZmZmZmZgotCi0jaWZuZGVmIEp1c3RfMTYKLS8qIFdoZW4gUGFja18zMiBpcyBub3QgZGVmaW5lZCwgd2Ugc3RvcmUgMTYgYml0cyBwZXIgMzItYml0IExvbmcuCi0gKiBUaGlzIG1ha2VzIHNvbWUgaW5uZXIgbG9vcHMgc2ltcGxlciBhbmQgc29tZXRpbWVzIHNhdmVzIHdvcmsKLSAqIGR1cmluZyBtdWx0aXBsaWNhdGlvbnMsIGJ1dCBpdCBvZnRlbiBzZWVtcyB0byBtYWtlIHRoaW5ncyBzbGlnaHRseQotICogc2xvd2VyLiAgSGVuY2UgdGhlIGRlZmF1bHQgaXMgbm93IHRvIHN0b3JlIDMyIGJpdHMgcGVyIExvbmcuCi0gKi8KLSNpZm5kZWYgUGFja18zMgotI2RlZmluZSBQYWNrXzMyCi0jZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIEttYXggMTUKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIGRvdWJsZSBzdHJ0b2QoY29uc3QgY2hhciAqczAwLCBjaGFyICoqc2UpOwotZXh0ZXJuICJDIiBjaGFyICpfX2R0b2EoZG91YmxlIGQsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywKLQkJCWludCAqZGVjcHQsIGludCAqc2lnbiwgY2hhciAqKnJ2ZSk7Ci0jZW5kaWYKLQotIHN0cnVjdAotQmlnaW50IHsKLQlzdHJ1Y3QgQmlnaW50ICpuZXh0OwotCWludCBrLCBtYXh3ZHMsIHNpZ24sIHdkczsKLQlVTG9uZyB4WzFdOwotfTsKLQotIHR5cGVkZWYgc3RydWN0IEJpZ2ludCBCaWdpbnQ7Ci0KLSBzdGF0aWMgQmlnaW50ICpmcmVlbGlzdFtLbWF4KzFdOwotCi0jaWZkZWYgQU5EUk9JRF9DSEFOR0VTCi0gc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBmcmVlbGlzdF9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7Ci0jZWxzZQotI2lmZGVmIF9SRUVOVFJBTlQKLSBzdGF0aWMgbXV0ZXhfdCBmcmVlbGlzdF9tdXRleCA9IE1VVEVYX0lOSVRJQUxJWkVSOwotI2VuZGlmCi0jZW5kaWYKLQotLyogU3BlY2lhbCB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIGFuIGludmFsaWQgQmlnaW50IHZhbHVlLAotICogZS5nLiB3aGVuIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIFRoZSBpZGVhIGlzIHRoYXQgd2UKLSAqIHdhbnQgdG8gYXZvaWQgaW50cm9kdWNpbmcgTlVMTCBjaGVja3MgZXZlcnl0aW1lIGEgYmlnaW50Ci0gKiBjb21wdXRhdGlvbiBpcyBwZXJmb3JtZWQuIEFsc28gdGhlIE5VTEwgdmFsdWUgY2FuIGFsc28gYmUKLSAqIGFscmVhZHkgdXNlZCB0byBpbmRpY2F0ZSAidmFsdWUgbm90IGluaXRpYWxpemVkIHlldCIgYW5kCi0gKiByZXR1cm5pbmcgTlVMTCBtaWdodCBhbHRlciB0aGUgZXhlY3V0aW9uIGNvZGUgcGF0aCBpbgotICogY2FzZSBvZiBPT00uCi0gKi8KLSNkZWZpbmUgIEJJR0lOVF9JTlZBTElEICAgKChCaWdpbnQgKikmYmlnaW50X2ludmFsaWRfdmFsdWUpCi0KLXN0YXRpYyBjb25zdCBCaWdpbnQgYmlnaW50X2ludmFsaWRfdmFsdWU7Ci0KLQotLyogUmV0dXJuIEJJR0lOVF9JTlZBTElEIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KLSAqCi0gKiBNb3N0IG9mIHRoZSBjb2RlIGhlcmUgZGVwZW5kcyBvbiB0aGUgZmFjdCB0aGF0IHRoaXMgZnVuY3Rpb24KLSAqIG5ldmVyIHJldHVybnMgTlVMTC4KLSAqLwotIHN0YXRpYyBCaWdpbnQgKgotQmFsbG9jCi0jaWZkZWYgS1JfaGVhZGVycwotCShrKSBpbnQgazsKLSNlbHNlCi0JKGludCBrKQotI2VuZGlmCi17Ci0JaW50IHg7Ci0JQmlnaW50ICpydjsKLQotCW11dGV4X2xvY2soJmZyZWVsaXN0X211dGV4KTsKLQotCWlmICgocnYgPSBmcmVlbGlzdFtrXSkgIT0gTlVMTCkgewotCQlmcmVlbGlzdFtrXSA9IHJ2LT5uZXh0OwotCX0KLQllbHNlIHsKLQkJeCA9IDEgPDwgazsKLQkJcnYgPSAoQmlnaW50ICopTUFMTE9DKHNpemVvZihCaWdpbnQpICsgKHgtMSkqc2l6ZW9mKExvbmcpKTsKLQkJaWYgKHJ2ID09IE5VTEwpIHsKLQkJICAgICAgICBydiA9IEJJR0lOVF9JTlZBTElEOwotCQkJZ290byBFWElUOwotCQl9Ci0JCXJ2LT5rID0gazsKLQkJcnYtPm1heHdkcyA9IHg7Ci0JfQotCXJ2LT5zaWduID0gcnYtPndkcyA9IDA7Ci1FWElUOgotCW11dGV4X3VubG9jaygmZnJlZWxpc3RfbXV0ZXgpOwotCi0JcmV0dXJuIHJ2OwotfQotCi0gc3RhdGljIHZvaWQKLUJmcmVlCi0jaWZkZWYgS1JfaGVhZGVycwotCSh2KSBCaWdpbnQgKnY7Ci0jZWxzZQotCShCaWdpbnQgKnYpCi0jZW5kaWYKLXsKLQlpZiAodiAmJiB2ICE9IEJJR0lOVF9JTlZBTElEKSB7Ci0JCW11dGV4X2xvY2soJmZyZWVsaXN0X211dGV4KTsKLQotCQl2LT5uZXh0ID0gZnJlZWxpc3Rbdi0+a107Ci0JCWZyZWVsaXN0W3YtPmtdID0gdjsKLQotCQltdXRleF91bmxvY2soJmZyZWVsaXN0X211dGV4KTsKLQl9Ci19Ci0KLSNkZWZpbmUgQmNvcHlfdmFsaWQoeCx5KSBtZW1jcHkoJih4KS0+c2lnbiwgJih5KS0+c2lnbiwgXAotICAgICh5KS0+d2RzKnNpemVvZihMb25nKSArIDIqc2l6ZW9mKGludCkpCi0KLSNkZWZpbmUgQmNvcHkoeCx5KSAgQmNvcHlfcHRyKCYoeCksKHkpKQotCi0gc3RhdGljIHZvaWQKLUJjb3B5X3B0cihCaWdpbnQgKipweCwgQmlnaW50ICp5KQotewotCWlmICgqcHggPT0gQklHSU5UX0lOVkFMSUQpCi0JCXJldHVybjsgLyogbm8gc3BhY2UgdG8gc3RvcmUgY29weSAqLwotCWlmICh5ID09IEJJR0lOVF9JTlZBTElEKSB7Ci0JCUJmcmVlKCpweCk7IC8qIGludmFsaWQgaW5wdXQgKi8KLQkJKnB4ID0gQklHSU5UX0lOVkFMSUQ7Ci0JfSBlbHNlIHsKLQkJQmNvcHlfdmFsaWQoKnB4LHkpOwotCX0KLX0KLQotIHN0YXRpYyBCaWdpbnQgKgotbXVsdGFkZAotI2lmZGVmIEtSX2hlYWRlcnMKLQkoYiwgbSwgYSkgQmlnaW50ICpiOyBpbnQgbSwgYTsKLSNlbHNlCi0JKEJpZ2ludCAqYiwgaW50IG0sIGludCBhKQkvKiBtdWx0aXBseSBieSBtIGFuZCBhZGQgYSAqLwotI2VuZGlmCi17Ci0JaW50IGksIHdkczsKLQlVTG9uZyAqeCwgeTsKLSNpZmRlZiBQYWNrXzMyCi0JVUxvbmcgeGksIHo7Ci0jZW5kaWYKLQlCaWdpbnQgKmIxOwotCi0JaWYgKGIgPT0gQklHSU5UX0lOVkFMSUQpCi0JCXJldHVybiBiOwotCi0Jd2RzID0gYi0+d2RzOwotCXggPSBiLT54OwotCWkgPSAwOwotCWRvIHsKLSNpZmRlZiBQYWNrXzMyCi0JCXhpID0gKng7Ci0JCXkgPSAoeGkgJiAweGZmZmYpICogbSArIGE7Ci0JCXogPSAoeGkgPj4gMTYpICogbSArICh5ID4+IDE2KTsKLQkJYSA9IChpbnQpKHogPj4gMTYpOwotCQkqeCsrID0gKHogPDwgMTYpICsgKHkgJiAweGZmZmYpOwotI2Vsc2UKLQkJeSA9ICp4ICogbSArIGE7Ci0JCWEgPSAoaW50KSh5ID4+IDE2KTsKLQkJKngrKyA9IHkgJiAweGZmZmY7Ci0jZW5kaWYKLQl9Ci0Jd2hpbGUoKytpIDwgd2RzKTsKLQlpZiAoYSkgewotCQlpZiAod2RzID49IGItPm1heHdkcykgewotCQkJYjEgPSBCYWxsb2MoYi0+aysxKTsKLQkJCWlmIChiMSA9PSBCSUdJTlRfSU5WQUxJRCkgewotCQkJCUJmcmVlKGIpOwotCQkJCXJldHVybiBiMTsKLQkJCX0KLQkJCUJjb3B5X3ZhbGlkKGIxLCBiKTsKLQkJCUJmcmVlKGIpOwotCQkJYiA9IGIxOwotCQkJfQotCQliLT54W3dkcysrXSA9IGE7Ci0JCWItPndkcyA9IHdkczsKLQl9Ci0JcmV0dXJuIGI7Ci19Ci0KLSBzdGF0aWMgQmlnaW50ICoKLXMyYgotI2lmZGVmIEtSX2hlYWRlcnMKLQkocywgbmQwLCBuZCwgeTkpIENPTlNUIGNoYXIgKnM7IGludCBuZDAsIG5kOyBVTG9uZyB5OTsKLSNlbHNlCi0JKENPTlNUIGNoYXIgKnMsIGludCBuZDAsIGludCBuZCwgVUxvbmcgeTkpCi0jZW5kaWYKLXsKLQlCaWdpbnQgKmI7Ci0JaW50IGksIGs7Ci0JTG9uZyB4LCB5OwotCi0JeCA9IChuZCArIDgpIC8gOTsKLQlmb3IoayA9IDAsIHkgPSAxOyB4ID4geTsgeSA8PD0gMSwgaysrKSA7Ci0jaWZkZWYgUGFja18zMgotCWIgPSBCYWxsb2Moayk7Ci0JaWYgKGIgPT0gQklHSU5UX0lOVkFMSUQpCi0JCXJldHVybiBiOwotCWItPnhbMF0gPSB5OTsKLQliLT53ZHMgPSAxOwotI2Vsc2UKLQliID0gQmFsbG9jKGsrMSk7Ci0JaWYgKGIgPT0gQklHSU5UX0lOVkFMSUQpCi0JCXJldHVybiBiOwotCi0JYi0+eFswXSA9IHk5ICYgMHhmZmZmOwotCWItPndkcyA9IChiLT54WzFdID0geTkgPj4gMTYpID8gMiA6IDE7Ci0jZW5kaWYKLQotCWkgPSA5OwotCWlmICg5IDwgbmQwKSB7Ci0JCXMgKz0gOTsKLQkJZG8gYiA9IG11bHRhZGQoYiwgMTAsICpzKysgLSAnMCcpOwotCQkJd2hpbGUoKytpIDwgbmQwKTsKLQkJcysrOwotCX0KLQllbHNlCi0JCXMgKz0gMTA7Ci0JZm9yKDsgaSA8IG5kOyBpKyspCi0JCWIgPSBtdWx0YWRkKGIsIDEwLCAqcysrIC0gJzAnKTsKLQlyZXR1cm4gYjsKLX0KLQotIHN0YXRpYyBpbnQKLWhpMGJpdHMKLSNpZmRlZiBLUl9oZWFkZXJzCi0JKHgpIFVMb25nIHg7Ci0jZWxzZQotCShVTG9uZyB4KQotI2VuZGlmCi17Ci0JaW50IGsgPSAwOwotCi0JaWYgKCEoeCAmIDB4ZmZmZjAwMDApKSB7Ci0JCWsgPSAxNjsKLQkJeCA8PD0gMTY7Ci0JfQotCWlmICghKHggJiAweGZmMDAwMDAwKSkgewotCQlrICs9IDg7Ci0JCXggPDw9IDg7Ci0JfQotCWlmICghKHggJiAweGYwMDAwMDAwKSkgewotCQlrICs9IDQ7Ci0JCXggPDw9IDQ7Ci0JfQotCWlmICghKHggJiAweGMwMDAwMDAwKSkgewotCQlrICs9IDI7Ci0JCXggPDw9IDI7Ci0JfQotCWlmICghKHggJiAweDgwMDAwMDAwKSkgewotCQlrKys7Ci0JCWlmICghKHggJiAweDQwMDAwMDAwKSkKLQkJCXJldHVybiAzMjsKLQl9Ci0JcmV0dXJuIGs7Ci19Ci0KLSBzdGF0aWMgaW50Ci1sbzBiaXRzCi0jaWZkZWYgS1JfaGVhZGVycwotCSh5KSBVTG9uZyAqeTsKLSNlbHNlCi0JKFVMb25nICp5KQotI2VuZGlmCi17Ci0JaW50IGs7Ci0JVUxvbmcgeCA9ICp5OwotCi0JaWYgKHggJiA3KSB7Ci0JCWlmICh4ICYgMSkKLQkJCXJldHVybiAwOwotCQlpZiAoeCAmIDIpIHsKLQkJCSp5ID0geCA+PiAxOwotCQkJcmV0dXJuIDE7Ci0JCQl9Ci0JCSp5ID0geCA+PiAyOwotCQlyZXR1cm4gMjsKLQl9Ci0JayA9IDA7Ci0JaWYgKCEoeCAmIDB4ZmZmZikpIHsKLQkJayA9IDE2OwotCQl4ID4+PSAxNjsKLQl9Ci0JaWYgKCEoeCAmIDB4ZmYpKSB7Ci0JCWsgKz0gODsKLQkJeCA+Pj0gODsKLQl9Ci0JaWYgKCEoeCAmIDB4ZikpIHsKLQkJayArPSA0OwotCQl4ID4+PSA0OwotCX0KLQlpZiAoISh4ICYgMHgzKSkgewotCQlrICs9IDI7Ci0JCXggPj49IDI7Ci0JfQotCWlmICghKHggJiAxKSkgewotCQlrKys7Ci0JCXggPj49IDE7Ci0JCWlmICgheCAmIDEpCi0JCQlyZXR1cm4gMzI7Ci0JfQotCSp5ID0geDsKLQlyZXR1cm4gazsKLX0KLQotIHN0YXRpYyBCaWdpbnQgKgotaTJiCi0jaWZkZWYgS1JfaGVhZGVycwotCShpKSBpbnQgaTsKLSNlbHNlCi0JKGludCBpKQotI2VuZGlmCi17Ci0JQmlnaW50ICpiOwotCi0JYiA9IEJhbGxvYygxKTsKLQlpZiAoYiAhPSBCSUdJTlRfSU5WQUxJRCkgewotCQliLT54WzBdID0gaTsKLQkJYi0+d2RzID0gMTsKLQkJfQotCXJldHVybiBiOwotfQotCi0gc3RhdGljIEJpZ2ludCAqCi1tdWx0Ci0jaWZkZWYgS1JfaGVhZGVycwotCShhLCBiKSBCaWdpbnQgKmEsICpiOwotI2Vsc2UKLQkoQmlnaW50ICphLCBCaWdpbnQgKmIpCi0jZW5kaWYKLXsKLQlCaWdpbnQgKmM7Ci0JaW50IGssIHdhLCB3Yiwgd2M7Ci0JVUxvbmcgY2FycnksIHksIHo7Ci0JVUxvbmcgKngsICp4YSwgKnhhZSwgKnhiLCAqeGJlLCAqeGMsICp4YzA7Ci0jaWZkZWYgUGFja18zMgotCVVMb25nIHoyOwotI2VuZGlmCi0KLQlpZiAoYSA9PSBCSUdJTlRfSU5WQUxJRCB8fCBiID09IEJJR0lOVF9JTlZBTElEKQotCQlyZXR1cm4gQklHSU5UX0lOVkFMSUQ7Ci0KLQlpZiAoYS0+d2RzIDwgYi0+d2RzKSB7Ci0JCWMgPSBhOwotCQlhID0gYjsKLQkJYiA9IGM7Ci0JfQotCWsgPSBhLT5rOwotCXdhID0gYS0+d2RzOwotCXdiID0gYi0+d2RzOwotCXdjID0gd2EgKyB3YjsKLQlpZiAod2MgPiBhLT5tYXh3ZHMpCi0JCWsrKzsKLQljID0gQmFsbG9jKGspOwotCWlmIChjID09IEJJR0lOVF9JTlZBTElEKQotCQlyZXR1cm4gYzsKLQlmb3IoeCA9IGMtPngsIHhhID0geCArIHdjOyB4IDwgeGE7IHgrKykKLQkJKnggPSAwOwotCXhhID0gYS0+eDsKLQl4YWUgPSB4YSArIHdhOwotCXhiID0gYi0+eDsKLQl4YmUgPSB4YiArIHdiOwotCXhjMCA9IGMtPng7Ci0jaWZkZWYgUGFja18zMgotCWZvcig7IHhiIDwgeGJlOyB4YisrLCB4YzArKykgewotCQlpZiAoKHkgPSAqeGIgJiAweGZmZmYpICE9IDApIHsKLQkJCXggPSB4YTsKLQkJCXhjID0geGMwOwotCQkJY2FycnkgPSAwOwotCQkJZG8gewotCQkJCXogPSAoKnggJiAweGZmZmYpICogeSArICgqeGMgJiAweGZmZmYpICsgY2Fycnk7Ci0JCQkJY2FycnkgPSB6ID4+IDE2OwotCQkJCXoyID0gKCp4KysgPj4gMTYpICogeSArICgqeGMgPj4gMTYpICsgY2Fycnk7Ci0JCQkJY2FycnkgPSB6MiA+PiAxNjsKLQkJCQlTdG9yZWluYyh4YywgejIsIHopOwotCQkJfQotCQkJd2hpbGUoeCA8IHhhZSk7Ci0JCQkqeGMgPSBjYXJyeTsKLQkJfQotCQlpZiAoKHkgPSAqeGIgPj4gMTYpICE9IDApIHsKLQkJCXggPSB4YTsKLQkJCXhjID0geGMwOwotCQkJY2FycnkgPSAwOwotCQkJejIgPSAqeGM7Ci0JCQlkbyB7Ci0JCQkJeiA9ICgqeCAmIDB4ZmZmZikgKiB5ICsgKCp4YyA+PiAxNikgKyBjYXJyeTsKLQkJCQljYXJyeSA9IHogPj4gMTY7Ci0JCQkJU3RvcmVpbmMoeGMsIHosIHoyKTsKLQkJCQl6MiA9ICgqeCsrID4+IDE2KSAqIHkgKyAoKnhjICYgMHhmZmZmKSArIGNhcnJ5OwotCQkJCWNhcnJ5ID0gejIgPj4gMTY7Ci0JCQl9Ci0JCQl3aGlsZSh4IDwgeGFlKTsKLQkJCSp4YyA9IHoyOwotCQl9Ci0JfQotI2Vsc2UKLQlmb3IoOyB4YiA8IHhiZTsgeGMwKyspIHsKLQkJaWYgKHkgPSAqeGIrKykgewotCQkJeCA9IHhhOwotCQkJeGMgPSB4YzA7Ci0JCQljYXJyeSA9IDA7Ci0JCQlkbyB7Ci0JCQkJeiA9ICp4KysgKiB5ICsgKnhjICsgY2Fycnk7Ci0JCQkJY2FycnkgPSB6ID4+IDE2OwotCQkJCSp4YysrID0geiAmIDB4ZmZmZjsKLQkJCX0KLQkJCXdoaWxlKHggPCB4YWUpOwotCQkJKnhjID0gY2Fycnk7Ci0JCX0KLQl9Ci0jZW5kaWYKLQlmb3IoeGMwID0gYy0+eCwgeGMgPSB4YzAgKyB3Yzsgd2MgPiAwICYmICEqLS14YzsgLS13YykgOwotCWMtPndkcyA9IHdjOwotCXJldHVybiBjOwotfQotCi0gc3RhdGljIEJpZ2ludCAqcDVzOwotIHN0YXRpYyBwdGhyZWFkX211dGV4X3QgcDVzX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKLQotIHN0YXRpYyBCaWdpbnQgKgotcG93NW11bHQKLSNpZmRlZiBLUl9oZWFkZXJzCi0JKGIsIGspIEJpZ2ludCAqYjsgaW50IGs7Ci0jZWxzZQotCShCaWdpbnQgKmIsIGludCBrKQotI2VuZGlmCi17Ci0JQmlnaW50ICpiMSwgKnA1LCAqcDUxOwotCWludCBpOwotCXN0YXRpYyBjb25zdCBpbnQgcDA1WzNdID0geyA1LCAyNSwgMTI1IH07Ci0KLQlpZiAoYiA9PSBCSUdJTlRfSU5WQUxJRCkKLQkJcmV0dXJuIGI7Ci0KLQlpZiAoKGkgPSBrICYgMykgIT0gMCkKLQkJYiA9IG11bHRhZGQoYiwgcDA1W2ktMV0sIDApOwotCi0JaWYgKCEoayA9ICh1bnNpZ25lZCBpbnQpIGsgPj4gMikpCi0JCXJldHVybiBiOwotCW11dGV4X2xvY2soJnA1c19tdXRleCk7Ci0JaWYgKCEocDUgPSBwNXMpKSB7Ci0JCS8qIGZpcnN0IHRpbWUgKi8KLQkJcDUgPSBpMmIoNjI1KTsKLQkJaWYgKHA1ID09IEJJR0lOVF9JTlZBTElEKSB7Ci0JCQlCZnJlZShiKTsKLQkJCW11dGV4X3VubG9jaygmcDVzX211dGV4KTsKLQkJCXJldHVybiBwNTsKLQkJfQotCQlwNXMgPSBwNTsKLQkJcDUtPm5leHQgPSAwOwotCX0KLQlmb3IoOzspIHsKLQkJaWYgKGsgJiAxKSB7Ci0JCQliMSA9IG11bHQoYiwgcDUpOwotCQkJQmZyZWUoYik7Ci0JCQliID0gYjE7Ci0JCX0KLQkJaWYgKCEoayA9ICh1bnNpZ25lZCBpbnQpIGsgPj4gMSkpCi0JCQlicmVhazsKLQkJaWYgKCEocDUxID0gcDUtPm5leHQpKSB7Ci0JCQlwNTEgPSBtdWx0KHA1LHA1KTsKLQkJCWlmIChwNTEgPT0gQklHSU5UX0lOVkFMSUQpIHsKLQkJCQlCZnJlZShiKTsKLQkJCQltdXRleF91bmxvY2soJnA1c19tdXRleCk7Ci0JCQkJcmV0dXJuIHA1MTsKLQkJCX0KLQkJCXA1LT5uZXh0ID0gcDUxOwotCQkJcDUxLT5uZXh0ID0gMDsKLQkJfQotCQlwNSA9IHA1MTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZwNXNfbXV0ZXgpOwotCXJldHVybiBiOwotfQotCi0gc3RhdGljIEJpZ2ludCAqCi1sc2hpZnQKLSNpZmRlZiBLUl9oZWFkZXJzCi0JKGIsIGspIEJpZ2ludCAqYjsgaW50IGs7Ci0jZWxzZQotCShCaWdpbnQgKmIsIGludCBrKQotI2VuZGlmCi17Ci0JaW50IGksIGsxLCBuLCBuMTsKLQlCaWdpbnQgKmIxOwotCVVMb25nICp4LCAqeDEsICp4ZSwgejsKLQotCWlmIChiID09IEJJR0lOVF9JTlZBTElEKQotCQlyZXR1cm4gYjsKLQotI2lmZGVmIFBhY2tfMzIKLQluID0gKHVuc2lnbmVkIGludClrID4+IDU7Ci0jZWxzZQotCW4gPSAodW5zaWduZWQgaW50KWsgPj4gNDsKLSNlbmRpZgotCWsxID0gYi0+azsKLQluMSA9IG4gKyBiLT53ZHMgKyAxOwotCWZvcihpID0gYi0+bWF4d2RzOyBuMSA+IGk7IGkgPDw9IDEpCi0JCWsxKys7Ci0JYjEgPSBCYWxsb2MoazEpOwotCWlmIChiMSA9PSBCSUdJTlRfSU5WQUxJRCkgewotCQlCZnJlZShiKTsKLQkJcmV0dXJuIGIxOwotCX0KLQl4MSA9IGIxLT54OwotCWZvcihpID0gMDsgaSA8IG47IGkrKykKLQkJKngxKysgPSAwOwotCXggPSBiLT54OwotCXhlID0geCArIGItPndkczsKLSNpZmRlZiBQYWNrXzMyCi0JaWYgKGsgJj0gMHgxZikgewotCQlrMSA9IDMyIC0gazsKLQkJeiA9IDA7Ci0JCWRvIHsKLQkJCSp4MSsrID0gKnggPDwgayB8IHo7Ci0JCQl6ID0gKngrKyA+PiBrMTsKLQkJfQotCQl3aGlsZSh4IDwgeGUpOwotCQlpZiAoKCp4MSA9IHopICE9IDApCi0JCQkrK24xOwotCX0KLSNlbHNlCi0JaWYgKGsgJj0gMHhmKSB7Ci0JCWsxID0gMTYgLSBrOwotCQl6ID0gMDsKLQkJZG8gewotCQkJKngxKysgPSAqeCA8PCBrICAmIDB4ZmZmZiB8IHo7Ci0JCQl6ID0gKngrKyA+PiBrMTsKLQkJfQotCQl3aGlsZSh4IDwgeGUpOwotCQlpZiAoKngxID0geikKLQkJCSsrbjE7Ci0JfQotI2VuZGlmCi0JZWxzZSBkbwotCQkqeDErKyA9ICp4Kys7Ci0JCXdoaWxlKHggPCB4ZSk7Ci0JYjEtPndkcyA9IG4xIC0gMTsKLQlCZnJlZShiKTsKLQlyZXR1cm4gYjE7Ci19Ci0KLSBzdGF0aWMgaW50Ci1jbXAKLSNpZmRlZiBLUl9oZWFkZXJzCi0JKGEsIGIpIEJpZ2ludCAqYSwgKmI7Ci0jZWxzZQotCShCaWdpbnQgKmEsIEJpZ2ludCAqYikKLSNlbmRpZgotewotCVVMb25nICp4YSwgKnhhMCwgKnhiLCAqeGIwOwotCWludCBpLCBqOwotCi0JaWYgKGEgPT0gQklHSU5UX0lOVkFMSUQgfHwgYiA9PSBCSUdJTlRfSU5WQUxJRCkKLSNpZmRlZiBERUJVRwotCQlCdWcoImNtcCBjYWxsZWQgd2l0aCBhIG9yIGIgaW52YWxpZCIpOwotI2Vsc2UKLQkJcmV0dXJuIDA7IC8qIGVxdWFsIC0gdGhlIGJlc3Qgd2UgY2FuIGRvIHJpZ2h0IG5vdyAqLwotI2VuZGlmCi0KLQlpID0gYS0+d2RzOwotCWogPSBiLT53ZHM7Ci0jaWZkZWYgREVCVUcKLQlpZiAoaSA+IDEgJiYgIWEtPnhbaS0xXSkKLQkJQnVnKCJjbXAgY2FsbGVkIHdpdGggYS0+eFthLT53ZHMtMV0gPT0gMCIpOwotCWlmIChqID4gMSAmJiAhYi0+eFtqLTFdKQotCQlCdWcoImNtcCBjYWxsZWQgd2l0aCBiLT54W2ItPndkcy0xXSA9PSAwIik7Ci0jZW5kaWYKLQlpZiAoaSAtPSBqKQotCQlyZXR1cm4gaTsKLQl4YTAgPSBhLT54OwotCXhhID0geGEwICsgajsKLQl4YjAgPSBiLT54OwotCXhiID0geGIwICsgajsKLQlmb3IoOzspIHsKLQkJaWYgKCotLXhhICE9ICotLXhiKQotCQkJcmV0dXJuICp4YSA8ICp4YiA/IC0xIDogMTsKLQkJaWYgKHhhIDw9IHhhMCkKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotIHN0YXRpYyBCaWdpbnQgKgotZGlmZgotI2lmZGVmIEtSX2hlYWRlcnMKLQkoYSwgYikgQmlnaW50ICphLCAqYjsKLSNlbHNlCi0JKEJpZ2ludCAqYSwgQmlnaW50ICpiKQotI2VuZGlmCi17Ci0JQmlnaW50ICpjOwotCWludCBpLCB3YSwgd2I7Ci0JTG9uZyBib3Jyb3csIHk7CS8qIFdlIG5lZWQgc2lnbmVkIHNoaWZ0cyBoZXJlLiAqLwotCVVMb25nICp4YSwgKnhhZSwgKnhiLCAqeGJlLCAqeGM7Ci0jaWZkZWYgUGFja18zMgotCUxvbmcgejsKLSNlbmRpZgotCi0JaWYgKGEgPT0gQklHSU5UX0lOVkFMSUQgfHwgYiA9PSBCSUdJTlRfSU5WQUxJRCkKLQkJcmV0dXJuIEJJR0lOVF9JTlZBTElEOwotCi0JaSA9IGNtcChhLGIpOwotCWlmICghaSkgewotCQljID0gQmFsbG9jKDApOwotCQlpZiAoYyAhPSBCSUdJTlRfSU5WQUxJRCkgewotCQkJYy0+d2RzID0gMTsKLQkJCWMtPnhbMF0gPSAwOwotCQkJfQotCQlyZXR1cm4gYzsKLQl9Ci0JaWYgKGkgPCAwKSB7Ci0JCWMgPSBhOwotCQlhID0gYjsKLQkJYiA9IGM7Ci0JCWkgPSAxOwotCX0KLQllbHNlCi0JCWkgPSAwOwotCWMgPSBCYWxsb2MoYS0+ayk7Ci0JaWYgKGMgPT0gQklHSU5UX0lOVkFMSUQpCi0JCXJldHVybiBjOwotCWMtPnNpZ24gPSBpOwotCXdhID0gYS0+d2RzOwotCXhhID0gYS0+eDsKLQl4YWUgPSB4YSArIHdhOwotCXdiID0gYi0+d2RzOwotCXhiID0gYi0+eDsKLQl4YmUgPSB4YiArIHdiOwotCXhjID0gYy0+eDsKLQlib3Jyb3cgPSAwOwotI2lmZGVmIFBhY2tfMzIKLQlkbyB7Ci0JCXkgPSAoKnhhICYgMHhmZmZmKSAtICgqeGIgJiAweGZmZmYpICsgYm9ycm93OwotCQlib3Jyb3cgPSAoVUxvbmcpeSA+PiAxNjsKLQkJU2lnbl9FeHRlbmQoYm9ycm93LCB5KTsKLQkJeiA9ICgqeGErKyA+PiAxNikgLSAoKnhiKysgPj4gMTYpICsgYm9ycm93OwotCQlib3Jyb3cgPSAoVUxvbmcpeiA+PiAxNjsKLQkJU2lnbl9FeHRlbmQoYm9ycm93LCB6KTsKLQkJU3RvcmVpbmMoeGMsIHosIHkpOwotCX0KLQl3aGlsZSh4YiA8IHhiZSk7Ci0Jd2hpbGUoeGEgPCB4YWUpIHsKLQkJeSA9ICgqeGEgJiAweGZmZmYpICsgYm9ycm93OwotCQlib3Jyb3cgPSAoVUxvbmcpeSA+PiAxNjsKLQkJU2lnbl9FeHRlbmQoYm9ycm93LCB5KTsKLQkJeiA9ICgqeGErKyA+PiAxNikgKyBib3Jyb3c7Ci0JCWJvcnJvdyA9IChVTG9uZyl6ID4+IDE2OwotCQlTaWduX0V4dGVuZChib3Jyb3csIHopOwotCQlTdG9yZWluYyh4YywgeiwgeSk7Ci0JfQotI2Vsc2UKLQlkbyB7Ci0JCXkgPSAqeGErKyAtICp4YisrICsgYm9ycm93OwotCQlib3Jyb3cgPSB5ID4+IDE2OwotCQlTaWduX0V4dGVuZChib3Jyb3csIHkpOwotCQkqeGMrKyA9IHkgJiAweGZmZmY7Ci0JfQotCXdoaWxlKHhiIDwgeGJlKTsKLQl3aGlsZSh4YSA8IHhhZSkgewotCQl5ID0gKnhhKysgKyBib3Jyb3c7Ci0JCWJvcnJvdyA9IHkgPj4gMTY7Ci0JCVNpZ25fRXh0ZW5kKGJvcnJvdywgeSk7Ci0JCSp4YysrID0geSAmIDB4ZmZmZjsKLQl9Ci0jZW5kaWYKLQl3aGlsZSghKi0teGMpCi0JCXdhLS07Ci0JYy0+d2RzID0gd2E7Ci0JcmV0dXJuIGM7Ci19Ci0KLSBzdGF0aWMgZG91YmxlCi11bHAKLSNpZmRlZiBLUl9oZWFkZXJzCi0JKF94KSBkb3VibGUgX3g7Ci0jZWxzZQotCShkb3VibGUgX3gpCi0jZW5kaWYKLXsKLQlfZG91YmxlIHg7Ci0JTG9uZyBMOwotCV9kb3VibGUgYTsKLQotCXZhbHVlKHgpID0gX3g7Ci0JTCA9ICh3b3JkMCh4KSAmIEV4cF9tYXNrKSAtIChQLTEpKkV4cF9tc2sxOwotI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93Ci0JaWYgKEwgPiAwKSB7Ci0jZW5kaWYKLSNpZmRlZiBJQk0KLQkJTCB8PSBFeHBfbXNrMSA+PiA0OwotI2VuZGlmCi0JCXdvcmQwKGEpID0gTDsKLQkJd29yZDEoYSkgPSAwOwotI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93Ci0JfQotCWVsc2UgewotCQlMID0gKFVMb25nKS1MID4+IEV4cF9zaGlmdDsKLQkJaWYgKEwgPCBFeHBfc2hpZnQpIHsKLQkJCXdvcmQwKGEpID0gMHg4MDAwMCA+PiBMOwotCQkJd29yZDEoYSkgPSAwOwotCQl9Ci0JCWVsc2UgewotCQkJd29yZDAoYSkgPSAwOwotCQkJTCAtPSBFeHBfc2hpZnQ7Ci0JCQl3b3JkMShhKSA9IEwgPj0gMzEgPyAxIDogMSA8PCAoMzEgLSBMKTsKLQkJfQotCX0KLSNlbmRpZgotCXJldHVybiB2YWx1ZShhKTsKLX0KLQotIHN0YXRpYyBkb3VibGUKLWIyZAotI2lmZGVmIEtSX2hlYWRlcnMKLQkoYSwgZSkgQmlnaW50ICphOyBpbnQgKmU7Ci0jZWxzZQotCShCaWdpbnQgKmEsIGludCAqZSkKLSNlbmRpZgotewotCVVMb25nICp4YSwgKnhhMCwgdywgeSwgejsKLQlpbnQgazsKLQlfZG91YmxlIGQ7Ci0jaWZkZWYgVkFYCi0JVUxvbmcgZDAsIGQxOwotI2Vsc2UKLSNkZWZpbmUgZDAgd29yZDAoZCkKLSNkZWZpbmUgZDEgd29yZDEoZCkKLSNlbmRpZgotCi0JaWYgKGEgPT0gQklHSU5UX0lOVkFMSUQpCi0JCXJldHVybiBOQU47Ci0KLQl4YTAgPSBhLT54OwotCXhhID0geGEwICsgYS0+d2RzOwotCXkgPSAqLS14YTsKLSNpZmRlZiBERUJVRwotCWlmICgheSkgQnVnKCJ6ZXJvIHkgaW4gYjJkIik7Ci0jZW5kaWYKLQlrID0gaGkwYml0cyh5KTsKLQkqZSA9IDMyIC0gazsKLSNpZmRlZiBQYWNrXzMyCi0JaWYgKGsgPCBFYml0cykgewotCQlkMCA9IEV4cF8xIHwgeSA+PiAoRWJpdHMgLSBrKTsKLQkJdyA9IHhhID4geGEwID8gKi0teGEgOiAwOwotCQlkMSA9IHkgPDwgKCgzMi1FYml0cykgKyBrKSB8IHcgPj4gKEViaXRzIC0gayk7Ci0JCWdvdG8gcmV0X2Q7Ci0JfQotCXogPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKLQlpZiAoayAtPSBFYml0cykgewotCQlkMCA9IEV4cF8xIHwgeSA8PCBrIHwgeiA+PiAoMzIgLSBrKTsKLQkJeSA9IHhhID4geGEwID8gKi0teGEgOiAwOwotCQlkMSA9IHogPDwgayB8IHkgPj4gKDMyIC0gayk7Ci0JfQotCWVsc2UgewotCQlkMCA9IEV4cF8xIHwgeTsKLQkJZDEgPSB6OwotCX0KLSNlbHNlCi0JaWYgKGsgPCBFYml0cyArIDE2KSB7Ci0JCXogPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKLQkJZDAgPSBFeHBfMSB8IHkgPDwgayAtIEViaXRzIHwgeiA+PiBFYml0cyArIDE2IC0gazsKLQkJdyA9IHhhID4geGEwID8gKi0teGEgOiAwOwotCQl5ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7Ci0JCWQxID0geiA8PCBrICsgMTYgLSBFYml0cyB8IHcgPDwgayAtIEViaXRzIHwgeSA+PiAxNiArIEViaXRzIC0gazsKLQkJZ290byByZXRfZDsKLQl9Ci0JeiA9IHhhID4geGEwID8gKi0teGEgOiAwOwotCXcgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKLQlrIC09IEViaXRzICsgMTY7Ci0JZDAgPSBFeHBfMSB8IHkgPDwgayArIDE2IHwgeiA8PCBrIHwgdyA+PiAxNiAtIGs7Ci0JeSA9IHhhID4geGEwID8gKi0teGEgOiAwOwotCWQxID0gdyA8PCBrICsgMTYgfCB5IDw8IGs7Ci0jZW5kaWYKLSByZXRfZDoKLSNpZmRlZiBWQVgKLQl3b3JkMChkKSA9IGQwID4+IDE2IHwgZDAgPDwgMTY7Ci0Jd29yZDEoZCkgPSBkMSA+PiAxNiB8IGQxIDw8IDE2OwotI2Vsc2UKLSN1bmRlZiBkMAotI3VuZGVmIGQxCi0jZW5kaWYKLQlyZXR1cm4gdmFsdWUoZCk7Ci19Ci0KLSBzdGF0aWMgQmlnaW50ICoKLWQyYgotI2lmZGVmIEtSX2hlYWRlcnMKLQkoX2QsIGUsIGJpdHMpIGRvdWJsZSBkOyBpbnQgKmUsICpiaXRzOwotI2Vsc2UKLQkoZG91YmxlIF9kLCBpbnQgKmUsIGludCAqYml0cykKLSNlbmRpZgotewotCUJpZ2ludCAqYjsKLQlpbnQgZGUsIGksIGs7Ci0JVUxvbmcgKngsIHksIHo7Ci0JX2RvdWJsZSBkOwotI2lmZGVmIFZBWAotCVVMb25nIGQwLCBkMTsKLSNlbmRpZgotCi0JdmFsdWUoZCkgPSBfZDsKLSNpZmRlZiBWQVgKLQlkMCA9IHdvcmQwKGQpID4+IDE2IHwgd29yZDAoZCkgPDwgMTY7Ci0JZDEgPSB3b3JkMShkKSA+PiAxNiB8IHdvcmQxKGQpIDw8IDE2OwotI2Vsc2UKLSNkZWZpbmUgZDAgd29yZDAoZCkKLSNkZWZpbmUgZDEgd29yZDEoZCkKLSNlbmRpZgotCi0jaWZkZWYgUGFja18zMgotCWIgPSBCYWxsb2MoMSk7Ci0jZWxzZQotCWIgPSBCYWxsb2MoMik7Ci0jZW5kaWYKLQlpZiAoYiA9PSBCSUdJTlRfSU5WQUxJRCkKLQkJcmV0dXJuIGI7Ci0JeCA9IGItPng7Ci0KLQl6ID0gZDAgJiBGcmFjX21hc2s7Ci0JZDAgJj0gMHg3ZmZmZmZmZjsJLyogY2xlYXIgc2lnbiBiaXQsIHdoaWNoIHdlIGlnbm9yZSAqLwotI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKLQlkZSA9IChpbnQpKGQwID4+IEV4cF9zaGlmdCk7Ci0jaWZuZGVmIElCTQotCXogfD0gRXhwX21zazExOwotI2VuZGlmCi0jZWxzZQotCWlmICgoZGUgPSAoaW50KShkMCA+PiBFeHBfc2hpZnQpKSAhPSAwKQotCQl6IHw9IEV4cF9tc2sxOwotI2VuZGlmCi0jaWZkZWYgUGFja18zMgotCWlmICgoeSA9IGQxKSAhPSAwKSB7Ci0JCWlmICgoayA9IGxvMGJpdHMoJnkpKSAhPSAwKSB7Ci0JCQl4WzBdID0geSB8IHogPDwgKDMyIC0gayk7Ci0JCQl6ID4+PSBrOwotCQl9Ci0JCWVsc2UKLQkJCXhbMF0gPSB5OwotCQlpID0gYi0+d2RzID0gKHhbMV0gPSB6KSA/IDIgOiAxOwotCX0KLQllbHNlIHsKLSNpZmRlZiBERUJVRwotCQlpZiAoIXopCi0JCQlCdWcoIlplcm8gcGFzc2VkIHRvIGQyYiIpOwotI2VuZGlmCi0JCWsgPSBsbzBiaXRzKCZ6KTsKLQkJeFswXSA9IHo7Ci0JCWkgPSBiLT53ZHMgPSAxOwotCQlrICs9IDMyOwotCX0KLSNlbHNlCi0JaWYgKHkgPSBkMSkgewotCQlpZiAoayA9IGxvMGJpdHMoJnkpKQotCQkJaWYgKGsgPj0gMTYpIHsKLQkJCQl4WzBdID0geSB8IHogPDwgMzIgLSBrICYgMHhmZmZmOwotCQkJCXhbMV0gPSB6ID4+IGsgLSAxNiAmIDB4ZmZmZjsKLQkJCQl4WzJdID0geiA+PiBrOwotCQkJCWkgPSAyOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJeFswXSA9IHkgJiAweGZmZmY7Ci0JCQkJeFsxXSA9IHkgPj4gMTYgfCB6IDw8IDE2IC0gayAmIDB4ZmZmZjsKLQkJCQl4WzJdID0geiA+PiBrICYgMHhmZmZmOwotCQkJCXhbM10gPSB6ID4+IGsrMTY7Ci0JCQkJaSA9IDM7Ci0JCQl9Ci0JCWVsc2UgewotCQkJeFswXSA9IHkgJiAweGZmZmY7Ci0JCQl4WzFdID0geSA+PiAxNjsKLQkJCXhbMl0gPSB6ICYgMHhmZmZmOwotCQkJeFszXSA9IHogPj4gMTY7Ci0JCQlpID0gMzsKLQkJfQotCX0KLQllbHNlIHsKLSNpZmRlZiBERUJVRwotCQlpZiAoIXopCi0JCQlCdWcoIlplcm8gcGFzc2VkIHRvIGQyYiIpOwotI2VuZGlmCi0JCWsgPSBsbzBiaXRzKCZ6KTsKLQkJaWYgKGsgPj0gMTYpIHsKLQkJCXhbMF0gPSB6OwotCQkJaSA9IDA7Ci0JCX0KLQkJZWxzZSB7Ci0JCQl4WzBdID0geiAmIDB4ZmZmZjsKLQkJCXhbMV0gPSB6ID4+IDE2OwotCQkJaSA9IDE7Ci0JCX0KLQkJayArPSAzMjsKLQl9Ci0Jd2hpbGUoIXhbaV0pCi0JCS0taTsKLQliLT53ZHMgPSBpICsgMTsKLSNlbmRpZgotI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93Ci0JaWYgKGRlKSB7Ci0jZW5kaWYKLSNpZmRlZiBJQk0KLQkJKmUgPSAoZGUgLSBCaWFzIC0gKFAtMSkgPDwgMikgKyBrOwotCQkqYml0cyA9IDQqUCArIDggLSBrIC0gaGkwYml0cyh3b3JkMChkKSAmIEZyYWNfbWFzayk7Ci0jZWxzZQotCQkqZSA9IGRlIC0gQmlhcyAtIChQLTEpICsgazsKLQkJKmJpdHMgPSBQIC0gazsKLSNlbmRpZgotI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93Ci0JfQotCWVsc2UgewotCQkqZSA9IGRlIC0gQmlhcyAtIChQLTEpICsgMSArIGs7Ci0jaWZkZWYgUGFja18zMgotCQkqYml0cyA9IDMyKmkgLSBoaTBiaXRzKHhbaS0xXSk7Ci0jZWxzZQotCQkqYml0cyA9IChpKzIpKjE2IC0gaGkwYml0cyh4W2ldKTsKLSNlbmRpZgotCQl9Ci0jZW5kaWYKLQlyZXR1cm4gYjsKLX0KLSN1bmRlZiBkMAotI3VuZGVmIGQxCi0KLSBzdGF0aWMgZG91YmxlCi1yYXRpbwotI2lmZGVmIEtSX2hlYWRlcnMKLQkoYSwgYikgQmlnaW50ICphLCAqYjsKLSNlbHNlCi0JKEJpZ2ludCAqYSwgQmlnaW50ICpiKQotI2VuZGlmCi17Ci0JX2RvdWJsZSBkYSwgZGI7Ci0JaW50IGssIGthLCBrYjsKLQotCWlmIChhID09IEJJR0lOVF9JTlZBTElEIHx8IGIgPT0gQklHSU5UX0lOVkFMSUQpCi0JCXJldHVybiBOQU47IC8qIGZvciBsYWNrIG9mIGJldHRlciB2YWx1ZSA/ICovCi0KLQl2YWx1ZShkYSkgPSBiMmQoYSwgJmthKTsKLQl2YWx1ZShkYikgPSBiMmQoYiwgJmtiKTsKLSNpZmRlZiBQYWNrXzMyCi0JayA9IGthIC0ga2IgKyAzMiooYS0+d2RzIC0gYi0+d2RzKTsKLSNlbHNlCi0JayA9IGthIC0ga2IgKyAxNiooYS0+d2RzIC0gYi0+d2RzKTsKLSNlbmRpZgotI2lmZGVmIElCTQotCWlmIChrID4gMCkgewotCQl3b3JkMChkYSkgKz0gKGsgPj4gMikqRXhwX21zazE7Ci0JCWlmIChrICY9IDMpCi0JCQlkYSAqPSAxIDw8IGs7Ci0JfQotCWVsc2UgewotCQlrID0gLWs7Ci0JCXdvcmQwKGRiKSArPSAoayA+PiAyKSpFeHBfbXNrMTsKLQkJaWYgKGsgJj0gMykKLQkJCWRiICo9IDEgPDwgazsKLQl9Ci0jZWxzZQotCWlmIChrID4gMCkKLQkJd29yZDAoZGEpICs9IGsqRXhwX21zazE7Ci0JZWxzZSB7Ci0JCWsgPSAtazsKLQkJd29yZDAoZGIpICs9IGsqRXhwX21zazE7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIHZhbHVlKGRhKSAvIHZhbHVlKGRiKTsKLX0KLQotc3RhdGljIENPTlNUIGRvdWJsZQotdGVuc1tdID0gewotCQkxZTAsIDFlMSwgMWUyLCAxZTMsIDFlNCwgMWU1LCAxZTYsIDFlNywgMWU4LCAxZTksCi0JCTFlMTAsIDFlMTEsIDFlMTIsIDFlMTMsIDFlMTQsIDFlMTUsIDFlMTYsIDFlMTcsIDFlMTgsIDFlMTksCi0JCTFlMjAsIDFlMjEsIDFlMjIKLSNpZmRlZiBWQVgKLQkJLCAxZTIzLCAxZTI0Ci0jZW5kaWYKLX07Ci0KLSNpZmRlZiBJRUVFX0FyaXRoCi1zdGF0aWMgQ09OU1QgZG91YmxlIGJpZ3RlbnNbXSA9IHsgMWUxNiwgMWUzMiwgMWU2NCwgMWUxMjgsIDFlMjU2IH07Ci1zdGF0aWMgQ09OU1QgZG91YmxlIHRpbnl0ZW5zW10gPSB7IDFlLTE2LCAxZS0zMiwgMWUtNjQsIDFlLTEyOCwgMWUtMjU2IH07Ci0jZGVmaW5lIG5fYmlndGVucyA1Ci0jZWxzZQotI2lmZGVmIElCTQotc3RhdGljIENPTlNUIGRvdWJsZSBiaWd0ZW5zW10gPSB7IDFlMTYsIDFlMzIsIDFlNjQgfTsKLXN0YXRpYyBDT05TVCBkb3VibGUgdGlueXRlbnNbXSA9IHsgMWUtMTYsIDFlLTMyLCAxZS02NCB9OwotI2RlZmluZSBuX2JpZ3RlbnMgMwotI2Vsc2UKLXN0YXRpYyBDT05TVCBkb3VibGUgYmlndGVuc1tdID0geyAxZTE2LCAxZTMyIH07Ci1zdGF0aWMgQ09OU1QgZG91YmxlIHRpbnl0ZW5zW10gPSB7IDFlLTE2LCAxZS0zMiB9OwotI2RlZmluZSBuX2JpZ3RlbnMgMgotI2VuZGlmCi0jZW5kaWYKLQotIGRvdWJsZQotc3RydG9kCi0jaWZkZWYgS1JfaGVhZGVycwotCShzMDAsIHNlKSBDT05TVCBjaGFyICpzMDA7IGNoYXIgKipzZTsKLSNlbHNlCi0JKENPTlNUIGNoYXIgKnMwMCwgY2hhciAqKnNlKQotI2VuZGlmCi17Ci0JaW50IGJiMiwgYmI1LCBiYmUsIGJkMiwgYmQ1LCBiYmJpdHMsIGJzMiwgYywgZHNpZ24sCi0JCSBlLCBlMSwgZXNpZ24sIGksIGosIGssIG5kLCBuZDAsIG5mLCBueiwgbnowLCBzaWduOwotCUNPTlNUIGNoYXIgKnMsICpzMCwgKnMxOwotCWRvdWJsZSBhYWRqLCBhYWRqMSwgYWRqOwotCV9kb3VibGUgcnYsIHJ2MDsKLQlMb25nIEw7Ci0JVUxvbmcgeSwgejsKLQlCaWdpbnQgKmJiMSwgKmJkMDsKLQlCaWdpbnQgKmJiID0gTlVMTCwgKmJkID0gTlVMTCwgKmJzID0gTlVMTCwgKmRlbHRhID0gTlVMTDsvKiBwYWNpZnkgZ2NjICovCi0KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLQlDT05TVCBjaGFyIGRlY2ltYWxfcG9pbnQgPSAnLic7Ci0jZWxzZSAvKiBBTkRST0lEX0NIQU5HRVMgKi8KLSNpZm5kZWYgS1JfaGVhZGVycwotCUNPTlNUIGNoYXIgZGVjaW1hbF9wb2ludCA9IGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2ludFswXTsKLSNlbHNlCi0JQ09OU1QgY2hhciBkZWNpbWFsX3BvaW50ID0gJy4nOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KLQotCXNpZ24gPSBuejAgPSBueiA9IDA7Ci0JdmFsdWUocnYpID0gMC47Ci0KLQotCWZvcihzID0gczAwOyBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSAqcyk7IHMrKykKLQkJOwotCi0JaWYgKCpzID09ICctJykgewotCQlzaWduID0gMTsKLQkJcysrOwotCX0gZWxzZSBpZiAoKnMgPT0gJysnKSB7Ci0JCXMrKzsKLQl9Ci0KLQlpZiAoKnMgPT0gJ1wwJykgewotCQlzID0gczAwOwotCQlnb3RvIHJldDsKLQl9Ci0KLQkvKiAiSU5GIiBvciAiSU5GSU5JVFkiICovCi0JaWYgKHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKnMpID09ICdpJyAmJiBzdHJuY2FzZWNtcChzLCAiaW5mIiwgMykgPT0gMCkgewotCQlpZiAoc3RybmNhc2VjbXAocyArIDMsICJpbml0eSIsIDUpID09IDApCi0JCQlzICs9IDg7Ci0JCWVsc2UKLQkJCXMgKz0gMzsKLQotCQl2YWx1ZShydikgPSBIVUdFX1ZBTDsKLQkJZ290byByZXQ7Ci0JfQotCi0jaWZkZWYgSUVFRV9Bcml0aAotCS8qICJOQU4iIG9yICJOQU4obi1jaGFyLXNlcXVlbmNlLW9wdCkiICovCi0JaWYgKHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKnMpID09ICduJyAmJiBzdHJuY2FzZWNtcChzLCAibmFuIiwgMykgPT0gMCkgewotCQkvKiBCdWlsZCBhIHF1aWV0IE5hTi4gKi8KLQkJd29yZDAocnYpID0gTkFOX1dPUkQwOwotCQl3b3JkMShydikgPSBOQU5fV09SRDE7Ci0JCXMrPSAzOwotCi0JCS8qIERvbid0IGludGVycHJldCAobi1jaGFyLXNlcXVlbmNlLW9wdCksIGZvciBub3cuICovCi0JCWlmICgqcyA9PSAnKCcpIHsKLQkJCXMwID0gczsKLQkJCWZvciAocysrOyAqcyAhPSAnKScgJiYgKnMgIT0gJ1wwJzsgcysrKQotCQkJCTsKLQkJCWlmICgqcyA9PSAnKScpCi0JCQkJcysrOwkvKiBTa2lwIG92ZXIgY2xvc2luZyBwYXJlbiAuLi4gKi8KLQkJCWVsc2UKLQkJCQlzID0gczA7CS8qIC4uLiBvdGhlcndpc2UgZ28gYmFjay4gKi8KLQkJfQotCi0JCWdvdG8gcmV0OwotCX0KLSNlbmRpZgotCi0JaWYgKCpzID09ICcwJykgewotCQluejAgPSAxOwotCQl3aGlsZSgqKytzID09ICcwJykgOwotCQlpZiAoISpzKQotCQkJZ290byByZXQ7Ci0JfQotCXMwID0gczsKLQl5ID0geiA9IDA7Ci0JZm9yKG5kID0gbmYgPSAwOyAoYyA9ICpzKSA+PSAnMCcgJiYgYyA8PSAnOSc7IG5kKyssIHMrKykKLQkJaWYgKG5kIDwgOSkKLQkJCXkgPSAxMCp5ICsgYyAtICcwJzsKLQkJZWxzZSBpZiAobmQgPCAxNikKLQkJCXogPSAxMCp6ICsgYyAtICcwJzsKLQluZDAgPSBuZDsKLQlpZiAoYyA9PSBkZWNpbWFsX3BvaW50KSB7Ci0JCWMgPSAqKytzOwotCQlpZiAoIW5kKSB7Ci0JCQlmb3IoOyBjID09ICcwJzsgYyA9ICorK3MpCi0JCQkJbnorKzsKLQkJCWlmIChjID4gJzAnICYmIGMgPD0gJzknKSB7Ci0JCQkJczAgPSBzOwotCQkJCW5mICs9IG56OwotCQkJCW56ID0gMDsKLQkJCQlnb3RvIGhhdmVfZGlnOwotCQkJCX0KLQkJCWdvdG8gZGlnX2RvbmU7Ci0JCX0KLQkJZm9yKDsgYyA+PSAnMCcgJiYgYyA8PSAnOSc7IGMgPSAqKytzKSB7Ci0gaGF2ZV9kaWc6Ci0JCQlueisrOwotCQkJaWYgKGMgLT0gJzAnKSB7Ci0JCQkJbmYgKz0gbno7Ci0JCQkJZm9yKGkgPSAxOyBpIDwgbno7IGkrKykKLQkJCQkJaWYgKG5kKysgPCA5KQotCQkJCQkJeSAqPSAxMDsKLQkJCQkJZWxzZSBpZiAobmQgPD0gREJMX0RJRyArIDEpCi0JCQkJCQl6ICo9IDEwOwotCQkJCWlmIChuZCsrIDwgOSkKLQkJCQkJeSA9IDEwKnkgKyBjOwotCQkJCWVsc2UgaWYgKG5kIDw9IERCTF9ESUcgKyAxKQotCQkJCQl6ID0gMTAqeiArIGM7Ci0JCQkJbnogPSAwOwotCQkJfQotCQl9Ci0JfQotIGRpZ19kb25lOgotCWUgPSAwOwotCWlmIChjID09ICdlJyB8fCBjID09ICdFJykgewotCQlpZiAoIW5kICYmICFueiAmJiAhbnowKSB7Ci0JCQlzID0gczAwOwotCQkJZ290byByZXQ7Ci0JCX0KLQkJczAwID0gczsKLQkJZXNpZ24gPSAwOwotCQlzd2l0Y2goYyA9ICorK3MpIHsKLQkJCWNhc2UgJy0nOgotCQkJCWVzaWduID0gMTsKLQkJCQkvKiBGQUxMVEhST1VHSCAqLwotCQkJY2FzZSAnKyc6Ci0JCQkJYyA9ICorK3M7Ci0JCX0KLQkJaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7Ci0JCQl3aGlsZShjID09ICcwJykKLQkJCQljID0gKisrczsKLQkJCWlmIChjID4gJzAnICYmIGMgPD0gJzknKSB7Ci0JCQkJTCA9IGMgLSAnMCc7Ci0JCQkJczEgPSBzOwotCQkJCXdoaWxlKChjID0gKisrcykgPj0gJzAnICYmIGMgPD0gJzknKQotCQkJCQlMID0gMTAqTCArIGMgLSAnMCc7Ci0JCQkJaWYgKHMgLSBzMSA+IDggfHwgTCA+IDE5OTk5KQotCQkJCQkvKiBBdm9pZCBjb25mdXNpb24gZnJvbSBleHBvbmVudHMKLQkJCQkJICogc28gbGFyZ2UgdGhhdCBlIG1pZ2h0IG92ZXJmbG93LgotCQkJCQkgKi8KLQkJCQkJZSA9IDE5OTk5OyAvKiBzYWZlIGZvciAxNiBiaXQgaW50cyAqLwotCQkJCWVsc2UKLQkJCQkJZSA9IChpbnQpTDsKLQkJCQlpZiAoZXNpZ24pCi0JCQkJCWUgPSAtZTsKLQkJCX0KLQkJCWVsc2UKLQkJCQllID0gMDsKLQkJfQotCQllbHNlCi0JCQlzID0gczAwOwotCX0KLQlpZiAoIW5kKSB7Ci0JCWlmICghbnogJiYgIW56MCkKLQkJCXMgPSBzMDA7Ci0JCWdvdG8gcmV0OwotCX0KLQllMSA9IGUgLT0gbmY7Ci0KLQkvKiBOb3cgd2UgaGF2ZSBuZDAgZGlnaXRzLCBzdGFydGluZyBhdCBzMCwgZm9sbG93ZWQgYnkgYQotCSAqIGRlY2ltYWwgcG9pbnQsIGZvbGxvd2VkIGJ5IG5kLW5kMCBkaWdpdHMuICBUaGUgbnVtYmVyIHdlJ3JlCi0JICogYWZ0ZXIgaXMgdGhlIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgdGhvc2UgZGlnaXRzIHRpbWVzCi0JICogMTAqKmUgKi8KLQotCWlmICghbmQwKQotCQluZDAgPSBuZDsKLQlrID0gbmQgPCBEQkxfRElHICsgMSA/IG5kIDogREJMX0RJRyArIDE7Ci0JdmFsdWUocnYpID0geTsKLQlpZiAoayA+IDkpCi0JCXZhbHVlKHJ2KSA9IHRlbnNbayAtIDldICogdmFsdWUocnYpICsgejsKLQliZDAgPSAwOwotCWlmIChuZCA8PSBEQkxfRElHCi0jaWZuZGVmIFJORF9QUk9EUVVPVAotCQkmJiBGTFRfUk9VTkRTID09IDEKLSNlbmRpZgotCQkpIHsKLQkJaWYgKCFlKQotCQkJZ290byByZXQ7Ci0JCWlmIChlID4gMCkgewotCQkJaWYgKGUgPD0gVGVuX3BtYXgpIHsKLSNpZmRlZiBWQVgKLQkJCQlnb3RvIHZheF9vdmZsX2NoZWNrOwotI2Vsc2UKLQkJCQkvKiB2YWx1ZShydikgPSAqLyByb3VuZGVkX3Byb2R1Y3QodmFsdWUocnYpLAotCQkJCSAgICB0ZW5zW2VdKTsKLQkJCQlnb3RvIHJldDsKLSNlbmRpZgotCQkJfQotCQkJaSA9IERCTF9ESUcgLSBuZDsKLQkJCWlmIChlIDw9IFRlbl9wbWF4ICsgaSkgewotCQkJCS8qIEEgZmFuY2llciB0ZXN0IHdvdWxkIHNvbWV0aW1lcyBsZXQgdXMgZG8KLQkJCQkgKiB0aGlzIGZvciBsYXJnZXIgaSB2YWx1ZXMuCi0JCQkJICovCi0JCQkJZSAtPSBpOwotCQkJCXZhbHVlKHJ2KSAqPSB0ZW5zW2ldOwotI2lmZGVmIFZBWAotCQkJCS8qIFZBWCBleHBvbmVudCByYW5nZSBpcyBzbyBuYXJyb3cgd2UgbXVzdAotCQkJCSAqIHdvcnJ5IGFib3V0IG92ZXJmbG93IGhlcmUuLi4KLQkJCQkgKi8KLSB2YXhfb3ZmbF9jaGVjazoKLQkJCQl3b3JkMChydikgLT0gUCpFeHBfbXNrMTsKLQkJCQkvKiB2YWx1ZShydikgPSAqLyByb3VuZGVkX3Byb2R1Y3QodmFsdWUocnYpLAotCQkJCSAgICB0ZW5zW2VdKTsKLQkJCQlpZiAoKHdvcmQwKHJ2KSAmIEV4cF9tYXNrKQotCQkJCSA+IEV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLTEtUCkpCi0JCQkJCWdvdG8gb3ZmbDsKLQkJCQl3b3JkMChydikgKz0gUCpFeHBfbXNrMTsKLSNlbHNlCi0JCQkJLyogdmFsdWUocnYpID0gKi8gcm91bmRlZF9wcm9kdWN0KHZhbHVlKHJ2KSwKLQkJCQkgICAgdGVuc1tlXSk7Ci0jZW5kaWYKLQkJCQlnb3RvIHJldDsKLQkJCX0KLQkJfQotI2lmbmRlZiBJbmFjY3VyYXRlX0RpdmlkZQotCQllbHNlIGlmIChlID49IC1UZW5fcG1heCkgewotCQkJLyogdmFsdWUocnYpID0gKi8gcm91bmRlZF9xdW90aWVudCh2YWx1ZShydiksCi0JCQkgICAgdGVuc1stZV0pOwotCQkJZ290byByZXQ7Ci0JCX0KLSNlbmRpZgotCX0KLQllMSArPSBuZCAtIGs7Ci0KLQkvKiBHZXQgc3RhcnRpbmcgYXBwcm94aW1hdGlvbiA9IHJ2ICogMTAqKmUxICovCi0KLQlpZiAoZTEgPiAwKSB7Ci0JCWlmICgoaSA9IGUxICYgMTUpICE9IDApCi0JCQl2YWx1ZShydikgKj0gdGVuc1tpXTsKLQkJaWYgKGUxICY9IH4xNSkgewotCQkJaWYgKGUxID4gREJMX01BWF8xMF9FWFApIHsKLSBvdmZsOgotCQkJCWVycm5vID0gRVJBTkdFOwotCQkJCXZhbHVlKHJ2KSA9IEhVR0VfVkFMOwotCQkJCWlmIChiZDApCi0JCQkJCWdvdG8gcmV0ZnJlZTsKLQkJCQlnb3RvIHJldDsKLQkJCX0KLQkJCWlmICgoZTEgPSAodW5zaWduZWQgaW50KWUxID4+IDQpICE9IDApIHsKLQkJCQlmb3IoaiA9IDA7IGUxID4gMTsgaisrLAotCQkJCSAgICBlMSA9ICh1bnNpZ25lZCBpbnQpZTEgPj4gMSkKLQkJCQkJaWYgKGUxICYgMSkKLQkJCQkJCXZhbHVlKHJ2KSAqPSBiaWd0ZW5zW2pdOwotCQkJLyogVGhlIGxhc3QgbXVsdGlwbGljYXRpb24gY291bGQgb3ZlcmZsb3cuICovCi0JCQkJd29yZDAocnYpIC09IFAqRXhwX21zazE7Ci0JCQkJdmFsdWUocnYpICo9IGJpZ3RlbnNbal07Ci0JCQkJaWYgKCh6ID0gd29yZDAocnYpICYgRXhwX21hc2spCi0JCQkJID4gRXhwX21zazEqKERCTF9NQVhfRVhQK0JpYXMtUCkpCi0JCQkJCWdvdG8gb3ZmbDsKLQkJCQlpZiAoeiA+IEV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLTEtUCkpIHsKLQkJCQkJLyogc2V0IHRvIGxhcmdlc3QgbnVtYmVyICovCi0JCQkJCS8qIChDYW4ndCB0cnVzdCBEQkxfTUFYKSAqLwotCQkJCQl3b3JkMChydikgPSBCaWcwOwotCQkJCQl3b3JkMShydikgPSBCaWcxOwotCQkJCQl9Ci0JCQkJZWxzZQotCQkJCQl3b3JkMChydikgKz0gUCpFeHBfbXNrMTsKLQkJCX0KLQkJfQotCX0KLQllbHNlIGlmIChlMSA8IDApIHsKLQkJZTEgPSAtZTE7Ci0JCWlmICgoaSA9IGUxICYgMTUpICE9IDApCi0JCQl2YWx1ZShydikgLz0gdGVuc1tpXTsKLQkJaWYgKGUxICY9IH4xNSkgewotCQkJZTEgPSAodW5zaWduZWQgaW50KWUxID4+IDQ7Ci0JCQlpZiAoZTEgPj0gMSA8PCBuX2JpZ3RlbnMpCi0JCQkJZ290byB1bmRmbDsKLQkJCWZvcihqID0gMDsgZTEgPiAxOyBqKyssCi0JCQkgICAgZTEgPSAodW5zaWduZWQgaW50KWUxID4+IDEpCi0JCQkJaWYgKGUxICYgMSkKLQkJCQkJdmFsdWUocnYpICo9IHRpbnl0ZW5zW2pdOwotCQkJLyogVGhlIGxhc3QgbXVsdGlwbGljYXRpb24gY291bGQgdW5kZXJmbG93LiAqLwotCQkJdmFsdWUocnYwKSA9IHZhbHVlKHJ2KTsKLQkJCXZhbHVlKHJ2KSAqPSB0aW55dGVuc1tqXTsKLQkJCWlmICghdmFsdWUocnYpKSB7Ci0JCQkJdmFsdWUocnYpID0gMi4qdmFsdWUocnYwKTsKLQkJCQl2YWx1ZShydikgKj0gdGlueXRlbnNbal07Ci0JCQkJaWYgKCF2YWx1ZShydikpIHsKLSB1bmRmbDoKLQkJCQkJdmFsdWUocnYpID0gMC47Ci0JCQkJCWVycm5vID0gRVJBTkdFOwotCQkJCQlpZiAoYmQwKQotCQkJCQkJZ290byByZXRmcmVlOwotCQkJCQlnb3RvIHJldDsKLQkJCQl9Ci0JCQkJd29yZDAocnYpID0gVGlueTA7Ci0JCQkJd29yZDEocnYpID0gVGlueTE7Ci0JCQkJLyogVGhlIHJlZmluZW1lbnQgYmVsb3cgd2lsbCBjbGVhbgotCQkJCSAqIHRoaXMgYXBwcm94aW1hdGlvbiB1cC4KLQkJCQkgKi8KLQkJCX0KLQkJfQotCX0KLQotCS8qIE5vdyB0aGUgaGFyZCBwYXJ0IC0tIGFkanVzdGluZyBydiB0byB0aGUgY29ycmVjdCB2YWx1ZS4qLwotCi0JLyogUHV0IGRpZ2l0cyBpbnRvIGJkOiB0cnVlIHZhbHVlID0gYmQgKiAxMF5lICovCi0KLQliZDAgPSBzMmIoczAsIG5kMCwgbmQsIHkpOwotCi0JZm9yKDs7KSB7Ci0JCWJkID0gQmFsbG9jKGJkMC0+ayk7Ci0JCUJjb3B5KGJkLCBiZDApOwotCQliYiA9IGQyYih2YWx1ZShydiksICZiYmUsICZiYmJpdHMpOwkvKiBydiA9IGJiICogMl5iYmUgKi8KLQkJYnMgPSBpMmIoMSk7Ci0KLQkJaWYgKGUgPj0gMCkgewotCQkJYmIyID0gYmI1ID0gMDsKLQkJCWJkMiA9IGJkNSA9IGU7Ci0JCX0KLQkJZWxzZSB7Ci0JCQliYjIgPSBiYjUgPSAtZTsKLQkJCWJkMiA9IGJkNSA9IDA7Ci0JCX0KLQkJaWYgKGJiZSA+PSAwKQotCQkJYmIyICs9IGJiZTsKLQkJZWxzZQotCQkJYmQyIC09IGJiZTsKLQkJYnMyID0gYmIyOwotI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKLSNpZmRlZiBJQk0KLQkJaiA9IDEgKyA0KlAgLSAzIC0gYmJiaXRzICsgKChiYmUgKyBiYmJpdHMgLSAxKSAmIDMpOwotI2Vsc2UKLQkJaiA9IFAgKyAxIC0gYmJiaXRzOwotI2VuZGlmCi0jZWxzZQotCQlpID0gYmJlICsgYmJiaXRzIC0gMTsJLyogbG9nYihydikgKi8KLQkJaWYgKGkgPCBFbWluKQkvKiBkZW5vcm1hbCAqLwotCQkJaiA9IGJiZSArIChQLUVtaW4pOwotCQllbHNlCi0JCQlqID0gUCArIDEgLSBiYmJpdHM7Ci0jZW5kaWYKLQkJYmIyICs9IGo7Ci0JCWJkMiArPSBqOwotCQlpID0gYmIyIDwgYmQyID8gYmIyIDogYmQyOwotCQlpZiAoaSA+IGJzMikKLQkJCWkgPSBiczI7Ci0JCWlmIChpID4gMCkgewotCQkJYmIyIC09IGk7Ci0JCQliZDIgLT0gaTsKLQkJCWJzMiAtPSBpOwotCQl9Ci0JCWlmIChiYjUgPiAwKSB7Ci0JCQlicyA9IHBvdzVtdWx0KGJzLCBiYjUpOwotCQkJYmIxID0gbXVsdChicywgYmIpOwotCQkJQmZyZWUoYmIpOwotCQkJYmIgPSBiYjE7Ci0JCX0KLQkJaWYgKGJiMiA+IDApCi0JCQliYiA9IGxzaGlmdChiYiwgYmIyKTsKLQkJaWYgKGJkNSA+IDApCi0JCQliZCA9IHBvdzVtdWx0KGJkLCBiZDUpOwotCQlpZiAoYmQyID4gMCkKLQkJCWJkID0gbHNoaWZ0KGJkLCBiZDIpOwotCQlpZiAoYnMyID4gMCkKLQkJCWJzID0gbHNoaWZ0KGJzLCBiczIpOwotCQlkZWx0YSA9IGRpZmYoYmIsIGJkKTsKLQkJZHNpZ24gPSBkZWx0YS0+c2lnbjsKLQkJZGVsdGEtPnNpZ24gPSAwOwotCQlpID0gY21wKGRlbHRhLCBicyk7Ci0JCWlmIChpIDwgMCkgewotCQkJLyogRXJyb3IgaXMgbGVzcyB0aGFuIGhhbGYgYW4gdWxwIC0tIGNoZWNrIGZvcgotCQkJICogc3BlY2lhbCBjYXNlIG9mIG1hbnRpc3NhIGEgcG93ZXIgb2YgdHdvLgotCQkJICovCi0JCQlpZiAoZHNpZ24gfHwgd29yZDEocnYpIHx8IHdvcmQwKHJ2KSAmIEJuZHJ5X21hc2spCi0JCQkJYnJlYWs7Ci0JCQlkZWx0YSA9IGxzaGlmdChkZWx0YSxMb2cyUCk7Ci0JCQlpZiAoY21wKGRlbHRhLCBicykgPiAwKQotCQkJCWdvdG8gZHJvcF9kb3duOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGkgPT0gMCkgewotCQkJLyogZXhhY3RseSBoYWxmLXdheSBiZXR3ZWVuICovCi0JCQlpZiAoZHNpZ24pIHsKLQkJCQlpZiAoKHdvcmQwKHJ2KSAmIEJuZHJ5X21hc2sxKSA9PSBCbmRyeV9tYXNrMQotCQkJCSAmJiAgd29yZDEocnYpID09IDB4ZmZmZmZmZmYpIHsKLQkJCQkJLypib3VuZGFyeSBjYXNlIC0tIGluY3JlbWVudCBleHBvbmVudCovCi0JCQkJCXdvcmQwKHJ2KSA9ICh3b3JkMChydikgJiBFeHBfbWFzaykKLQkJCQkJCSsgRXhwX21zazEKLSNpZmRlZiBJQk0KLQkJCQkJCXwgRXhwX21zazEgPj4gNAotI2VuZGlmCi0JCQkJCQk7Ci0JCQkJCXdvcmQxKHJ2KSA9IDA7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKCEod29yZDAocnYpICYgQm5kcnlfbWFzaykgJiYgIXdvcmQxKHJ2KSkgewotIGRyb3BfZG93bjoKLQkJCQkvKiBib3VuZGFyeSBjYXNlIC0tIGRlY3JlbWVudCBleHBvbmVudCAqLwotI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKLQkJCQlMID0gd29yZDAocnYpICYgRXhwX21hc2s7Ci0jaWZkZWYgSUJNCi0JCQkJaWYgKEwgPCAgRXhwX21zazEpCi0jZWxzZQotCQkJCWlmIChMIDw9IEV4cF9tc2sxKQotI2VuZGlmCi0JCQkJCWdvdG8gdW5kZmw7Ci0JCQkJTCAtPSBFeHBfbXNrMTsKLSNlbHNlCi0JCQkJTCA9ICh3b3JkMChydikgJiBFeHBfbWFzaykgLSBFeHBfbXNrMTsKLSNlbmRpZgotCQkJCXdvcmQwKHJ2KSA9IEwgfCBCbmRyeV9tYXNrMTsKLQkJCQl3b3JkMShydikgPSAweGZmZmZmZmZmOwotI2lmZGVmIElCTQotCQkJCWdvdG8gY29udDsKLSNlbHNlCi0JCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCX0KLSNpZm5kZWYgUk9VTkRfQklBU0VECi0JCQlpZiAoISh3b3JkMShydikgJiBMU0IpKQotCQkJCWJyZWFrOwotI2VuZGlmCi0JCQlpZiAoZHNpZ24pCi0JCQkJdmFsdWUocnYpICs9IHVscCh2YWx1ZShydikpOwotI2lmbmRlZiBST1VORF9CSUFTRUQKLQkJCWVsc2UgewotCQkJCXZhbHVlKHJ2KSAtPSB1bHAodmFsdWUocnYpKTsKLSNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdwotCQkJCWlmICghdmFsdWUocnYpKQotCQkJCQlnb3RvIHVuZGZsOwotI2VuZGlmCi0JCQl9Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICgoYWFkaiA9IHJhdGlvKGRlbHRhLCBicykpIDw9IDIuKSB7Ci0JCQlpZiAoZHNpZ24pCi0JCQkJYWFkaiA9IGFhZGoxID0gMS47Ci0JCQllbHNlIGlmICh3b3JkMShydikgfHwgd29yZDAocnYpICYgQm5kcnlfbWFzaykgewotI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93Ci0JCQkJaWYgKHdvcmQxKHJ2KSA9PSBUaW55MSAmJiAhd29yZDAocnYpKQotCQkJCQlnb3RvIHVuZGZsOwotI2VuZGlmCi0JCQkJYWFkaiA9IDEuOwotCQkJCWFhZGoxID0gLTEuOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLyogc3BlY2lhbCBjYXNlIC0tIHBvd2VyIG9mIEZMVF9SQURJWCB0byBiZSAqLwotCQkJCS8qIHJvdW5kZWQgZG93bi4uLiAqLwotCi0JCQkJaWYgKGFhZGogPCAyLi9GTFRfUkFESVgpCi0JCQkJCWFhZGogPSAxLi9GTFRfUkFESVg7Ci0JCQkJZWxzZQotCQkJCQlhYWRqICo9IDAuNTsKLQkJCQlhYWRqMSA9IC1hYWRqOwotCQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCWFhZGogKj0gMC41OwotCQkJYWFkajEgPSBkc2lnbiA/IGFhZGogOiAtYWFkajsKLSNpZmRlZiBDaGVja19GTFRfUk9VTkRTCi0JCQlzd2l0Y2goRkxUX1JPVU5EUykgewotCQkJCWNhc2UgMjogLyogdG93YXJkcyAraW5maW5pdHkgKi8KLQkJCQkJYWFkajEgLT0gMC41OwotCQkJCQlicmVhazsKLQkJCQljYXNlIDA6IC8qIHRvd2FyZHMgMCAqLwotCQkJCWNhc2UgMzogLyogdG93YXJkcyAtaW5maW5pdHkgKi8KLQkJCQkJYWFkajEgKz0gMC41OwotCQkJfQotI2Vsc2UKLQkJCWlmIChGTFRfUk9VTkRTID09IDApCi0JCQkJYWFkajEgKz0gMC41OwotI2VuZGlmCi0JCX0KLQkJeSA9IHdvcmQwKHJ2KSAmIEV4cF9tYXNrOwotCi0JCS8qIENoZWNrIGZvciBvdmVyZmxvdyAqLwotCi0JCWlmICh5ID09IEV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLTEpKSB7Ci0JCQl2YWx1ZShydjApID0gdmFsdWUocnYpOwotCQkJd29yZDAocnYpIC09IFAqRXhwX21zazE7Ci0JCQlhZGogPSBhYWRqMSAqIHVscCh2YWx1ZShydikpOwotCQkJdmFsdWUocnYpICs9IGFkajsKLQkJCWlmICgod29yZDAocnYpICYgRXhwX21hc2spID49Ci0JCQkJCUV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLVApKSB7Ci0JCQkJaWYgKHdvcmQwKHJ2MCkgPT0gQmlnMCAmJiB3b3JkMShydjApID09IEJpZzEpCi0JCQkJCWdvdG8gb3ZmbDsKLQkJCQl3b3JkMChydikgPSBCaWcwOwotCQkJCXdvcmQxKHJ2KSA9IEJpZzE7Ci0JCQkJZ290byBjb250OwotCQkJfQotCQkJZWxzZQotCQkJCXdvcmQwKHJ2KSArPSBQKkV4cF9tc2sxOwotCQl9Ci0JCWVsc2UgewotI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKLQkJCWlmICgod29yZDAocnYpICYgRXhwX21hc2spIDw9IFAqRXhwX21zazEpIHsKLQkJCQl2YWx1ZShydjApID0gdmFsdWUocnYpOwotCQkJCXdvcmQwKHJ2KSArPSBQKkV4cF9tc2sxOwotCQkJCWFkaiA9IGFhZGoxICogdWxwKHZhbHVlKHJ2KSk7Ci0JCQkJdmFsdWUocnYpICs9IGFkajsKLSNpZmRlZiBJQk0KLQkJCQlpZiAoKHdvcmQwKHJ2KSAmIEV4cF9tYXNrKSA8ICBQKkV4cF9tc2sxKQotI2Vsc2UKLQkJCQlpZiAoKHdvcmQwKHJ2KSAmIEV4cF9tYXNrKSA8PSBQKkV4cF9tc2sxKQotI2VuZGlmCi0JCQkJewotCQkJCQlpZiAod29yZDAocnYwKSA9PSBUaW55MAotCQkJCQkgJiYgd29yZDEocnYwKSA9PSBUaW55MSkKLQkJCQkJCWdvdG8gdW5kZmw7Ci0JCQkJCXdvcmQwKHJ2KSA9IFRpbnkwOwotCQkJCQl3b3JkMShydikgPSBUaW55MTsKLQkJCQkJZ290byBjb250OwotCQkJCX0KLQkJCQllbHNlCi0JCQkJCXdvcmQwKHJ2KSAtPSBQKkV4cF9tc2sxOwotCQkJCX0KLQkJCWVsc2UgewotCQkJCWFkaiA9IGFhZGoxICogdWxwKHZhbHVlKHJ2KSk7Ci0JCQkJdmFsdWUocnYpICs9IGFkajsKLQkJCX0KLSNlbHNlCi0JCQkvKiBDb21wdXRlIGFkaiBzbyB0aGF0IHRoZSBJRUVFIHJvdW5kaW5nIHJ1bGVzIHdpbGwKLQkJCSAqIGNvcnJlY3RseSByb3VuZCBydiArIGFkaiBpbiBzb21lIGhhbGYtd2F5IGNhc2VzLgotCQkJICogSWYgcnYgKiB1bHAocnYpIGlzIGRlbm9ybWFsaXplZCAoaS5lLiwKLQkJCSAqIHkgPD0gKFAtMSkqRXhwX21zazEpLCB3ZSBtdXN0IGFkanVzdCBhYWRqIHRvIGF2b2lkCi0JCQkgKiB0cm91YmxlIGZyb20gYml0cyBsb3N0IHRvIGRlbm9ybWFsaXphdGlvbjsKLQkJCSAqIGV4YW1wbGU6IDEuMmUtMzA3IC4KLQkJCSAqLwotCQkJaWYgKHkgPD0gKFAtMSkqRXhwX21zazEgJiYgYWFkaiA+PSAxLikgewotCQkJCWFhZGoxID0gKGRvdWJsZSkoaW50KShhYWRqICsgMC41KTsKLQkJCQlpZiAoIWRzaWduKQotCQkJCQlhYWRqMSA9IC1hYWRqMTsKLQkJCX0KLQkJCWFkaiA9IGFhZGoxICogdWxwKHZhbHVlKHJ2KSk7Ci0JCQl2YWx1ZShydikgKz0gYWRqOwotI2VuZGlmCi0JCX0KLQkJeiA9IHdvcmQwKHJ2KSAmIEV4cF9tYXNrOwotCQlpZiAoeSA9PSB6KSB7Ci0JCQkvKiBDYW4gd2Ugc3RvcCBub3c/ICovCi0JCQlMID0gYWFkajsKLQkJCWFhZGogLT0gTDsKLQkJCS8qIFRoZSB0b2xlcmFuY2VzIGJlbG93IGFyZSBjb25zZXJ2YXRpdmUuICovCi0JCQlpZiAoZHNpZ24gfHwgd29yZDEocnYpIHx8IHdvcmQwKHJ2KSAmIEJuZHJ5X21hc2spIHsKLQkJCQlpZiAoYWFkaiA8IC40OTk5OTk5IHx8IGFhZGogPiAuNTAwMDAwMSkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQllbHNlIGlmIChhYWRqIDwgLjQ5OTk5OTkvRkxUX1JBRElYKQotCQkJCWJyZWFrOwotCQl9Ci0gY29udDoKLQkJQmZyZWUoYmIpOwotCQlCZnJlZShiZCk7Ci0JCUJmcmVlKGJzKTsKLQkJQmZyZWUoZGVsdGEpOwotCX0KLSByZXRmcmVlOgotCUJmcmVlKGJiKTsKLQlCZnJlZShiZCk7Ci0JQmZyZWUoYnMpOwotCUJmcmVlKGJkMCk7Ci0JQmZyZWUoZGVsdGEpOwotIHJldDoKLQlpZiAoc2UpCi0JCS8qIExJTlRFRCBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiAqLwotCQkqc2UgPSAoY2hhciAqKXM7Ci0JcmV0dXJuIHNpZ24gPyAtdmFsdWUocnYpIDogdmFsdWUocnYpOwotfQotCi0gc3RhdGljIGludAotcXVvcmVtCi0jaWZkZWYgS1JfaGVhZGVycwotCShiLCBTKSBCaWdpbnQgKmIsICpTOwotI2Vsc2UKLQkoQmlnaW50ICpiLCBCaWdpbnQgKlMpCi0jZW5kaWYKLXsKLQlpbnQgbjsKLQlMb25nIGJvcnJvdywgeTsKLQlVTG9uZyBjYXJyeSwgcSwgeXM7Ci0JVUxvbmcgKmJ4LCAqYnhlLCAqc3gsICpzeGU7Ci0jaWZkZWYgUGFja18zMgotCUxvbmcgejsKLQlVTG9uZyBzaSwgenM7Ci0jZW5kaWYKLQotCWlmIChiID09IEJJR0lOVF9JTlZBTElEIHx8IFMgPT0gQklHSU5UX0lOVkFMSUQpCi0JCXJldHVybiAwOwotCi0JbiA9IFMtPndkczsKLSNpZmRlZiBERUJVRwotCS8qZGVidWcqLyBpZiAoYi0+d2RzID4gbikKLQkvKmRlYnVnKi8JQnVnKCJvdmVyc2l6ZSBiIGluIHF1b3JlbSIpOwotI2VuZGlmCi0JaWYgKGItPndkcyA8IG4pCi0JCXJldHVybiAwOwotCXN4ID0gUy0+eDsKLQlzeGUgPSBzeCArIC0tbjsKLQlieCA9IGItPng7Ci0JYnhlID0gYnggKyBuOwotCXEgPSAqYnhlIC8gKCpzeGUgKyAxKTsJLyogZW5zdXJlIHEgPD0gdHJ1ZSBxdW90aWVudCAqLwotI2lmZGVmIERFQlVHCi0JLypkZWJ1ZyovIGlmIChxID4gOSkKLQkvKmRlYnVnKi8JQnVnKCJvdmVyc2l6ZWQgcXVvdGllbnQgaW4gcXVvcmVtIik7Ci0jZW5kaWYKLQlpZiAocSkgewotCQlib3Jyb3cgPSAwOwotCQljYXJyeSA9IDA7Ci0JCWRvIHsKLSNpZmRlZiBQYWNrXzMyCi0JCQlzaSA9ICpzeCsrOwotCQkJeXMgPSAoc2kgJiAweGZmZmYpICogcSArIGNhcnJ5OwotCQkJenMgPSAoc2kgPj4gMTYpICogcSArICh5cyA+PiAxNik7Ci0JCQljYXJyeSA9IHpzID4+IDE2OwotCQkJeSA9ICgqYnggJiAweGZmZmYpIC0gKHlzICYgMHhmZmZmKSArIGJvcnJvdzsKLQkJCWJvcnJvdyA9IChVTG9uZyl5ID4+IDE2OwotCQkJU2lnbl9FeHRlbmQoYm9ycm93LCB5KTsKLQkJCXogPSAoKmJ4ID4+IDE2KSAtICh6cyAmIDB4ZmZmZikgKyBib3Jyb3c7Ci0JCQlib3Jyb3cgPSAoVUxvbmcpeiA+PiAxNjsKLQkJCVNpZ25fRXh0ZW5kKGJvcnJvdywgeik7Ci0JCQlTdG9yZWluYyhieCwgeiwgeSk7Ci0jZWxzZQotCQkJeXMgPSAqc3grKyAqIHEgKyBjYXJyeTsKLQkJCWNhcnJ5ID0geXMgPj4gMTY7Ci0JCQl5ID0gKmJ4IC0gKHlzICYgMHhmZmZmKSArIGJvcnJvdzsKLQkJCWJvcnJvdyA9IHkgPj4gMTY7Ci0JCQlTaWduX0V4dGVuZChib3Jyb3csIHkpOwotCQkJKmJ4KysgPSB5ICYgMHhmZmZmOwotI2VuZGlmCi0JCX0KLQkJd2hpbGUoc3ggPD0gc3hlKTsKLQkJaWYgKCEqYnhlKSB7Ci0JCQlieCA9IGItPng7Ci0JCQl3aGlsZSgtLWJ4ZSA+IGJ4ICYmICEqYnhlKQotCQkJCS0tbjsKLQkJCWItPndkcyA9IG47Ci0JCX0KLQl9Ci0JaWYgKGNtcChiLCBTKSA+PSAwKSB7Ci0JCXErKzsKLQkJYm9ycm93ID0gMDsKLQkJY2FycnkgPSAwOwotCQlieCA9IGItPng7Ci0JCXN4ID0gUy0+eDsKLQkJZG8gewotI2lmZGVmIFBhY2tfMzIKLQkJCXNpID0gKnN4Kys7Ci0JCQl5cyA9IChzaSAmIDB4ZmZmZikgKyBjYXJyeTsKLQkJCXpzID0gKHNpID4+IDE2KSArICh5cyA+PiAxNik7Ci0JCQljYXJyeSA9IHpzID4+IDE2OwotCQkJeSA9ICgqYnggJiAweGZmZmYpIC0gKHlzICYgMHhmZmZmKSArIGJvcnJvdzsKLQkJCWJvcnJvdyA9IChVTG9uZyl5ID4+IDE2OwotCQkJU2lnbl9FeHRlbmQoYm9ycm93LCB5KTsKLQkJCXogPSAoKmJ4ID4+IDE2KSAtICh6cyAmIDB4ZmZmZikgKyBib3Jyb3c7Ci0JCQlib3Jyb3cgPSAoVUxvbmcpeiA+PiAxNjsKLQkJCVNpZ25fRXh0ZW5kKGJvcnJvdywgeik7Ci0JCQlTdG9yZWluYyhieCwgeiwgeSk7Ci0jZWxzZQotCQkJeXMgPSAqc3grKyArIGNhcnJ5OwotCQkJY2FycnkgPSB5cyA+PiAxNjsKLQkJCXkgPSAqYnggLSAoeXMgJiAweGZmZmYpICsgYm9ycm93OwotCQkJYm9ycm93ID0geSA+PiAxNjsKLQkJCVNpZ25fRXh0ZW5kKGJvcnJvdywgeSk7Ci0JCQkqYngrKyA9IHkgJiAweGZmZmY7Ci0jZW5kaWYKLQkJfQotCQl3aGlsZShzeCA8PSBzeGUpOwotCQlieCA9IGItPng7Ci0JCWJ4ZSA9IGJ4ICsgbjsKLQkJaWYgKCEqYnhlKSB7Ci0JCQl3aGlsZSgtLWJ4ZSA+IGJ4ICYmICEqYnhlKQotCQkJCS0tbjsKLQkJCWItPndkcyA9IG47Ci0JCX0KLQl9Ci0JcmV0dXJuIHE7Ci19Ci0KLS8qIGZyZWVkdG9hKHMpIG11c3QgYmUgdXNlZCB0byBmcmVlIHZhbHVlcyBzIHJldHVybmVkIGJ5IGR0b2EKLSAqIHdoZW4gTVVMVElQTEVfVEhSRUFEUyBpcyAjZGVmaW5lZC4gIEl0IHNob3VsZCBiZSB1c2VkIGluIGFsbCBjYXNlcywKLSAqIGJ1dCBmb3IgY29uc2lzdGVuY3kgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIGR0b2EsIGl0IGlzIG9wdGlvbmFsCi0gKiB3aGVuIE1VTFRJUExFX1RIUkVBRFMgaXMgbm90IGRlZmluZWQuCi0gKi8KLQotdm9pZAotI2lmZGVmIEtSX2hlYWRlcnMKLWZyZWVkdG9hKHMpIGNoYXIgKnM7Ci0jZWxzZQotZnJlZWR0b2EoY2hhciAqcykKLSNlbmRpZgotewotCWZyZWUocyk7Ci19Ci0KLQotCi0vKiBkdG9hIGZvciBJRUVFIGFyaXRobWV0aWMgKGRtZyk6IGNvbnZlcnQgZG91YmxlIHRvIEFTQ0lJIHN0cmluZy4KLSAqCi0gKiBJbnNwaXJlZCBieSAiSG93IHRvIFByaW50IEZsb2F0aW5nLVBvaW50IE51bWJlcnMgQWNjdXJhdGVseSIgYnkKLSAqIEd1eSBMLiBTdGVlbGUsIEpyLiBhbmQgSm9uIEwuIFdoaXRlIFtQcm9jLiBBQ00gU0lHUExBTiAnOTAsIHBwLiA5Mi0xMDFdLgotICoKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKgkxLiBSYXRoZXIgdGhhbiBpdGVyYXRpbmcsIHdlIHVzZSBhIHNpbXBsZSBudW1lcmljIG92ZXJlc3RpbWF0ZQotICoJICAgdG8gZGV0ZXJtaW5lIGsgPSBmbG9vcihsb2cxMChkKSkuICBXZSBzY2FsZSByZWxldmFudAotICoJICAgcXVhbnRpdGllcyB1c2luZyBPKGxvZzIoaykpIHJhdGhlciB0aGFuIE8oaykgbXVsdGlwbGljYXRpb25zLgotICoJMi4gRm9yIHNvbWUgbW9kZXMgPiAyIChjb3JyZXNwb25kaW5nIHRvIGVjdnQgYW5kIGZjdnQpLCB3ZSBkb24ndAotICoJICAgdHJ5IHRvIGdlbmVyYXRlIGRpZ2l0cyBzdHJpY3RseSBsZWZ0IHRvIHJpZ2h0LiAgSW5zdGVhZCwgd2UKLSAqCSAgIGNvbXB1dGUgd2l0aCBmZXdlciBiaXRzIGFuZCBwcm9wYWdhdGUgdGhlIGNhcnJ5IGlmIG5lY2Vzc2FyeQotICoJICAgd2hlbiByb3VuZGluZyB0aGUgZmluYWwgZGlnaXQgdXAuICBUaGlzIGlzIG9mdGVuIGZhc3Rlci4KLSAqCTMuIFVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgaW5wdXQgd2lsbCBiZSByb3VuZGVkIG5lYXJlc3QsCi0gKgkgICBtb2RlIDAgcmVuZGVycyAxZTIzIGFzIDFlMjMgcmF0aGVyIHRoYW4gOS45OTk5OTk5OTk5OTk5OTllMjIuCi0gKgkgICBUaGF0IGlzLCB3ZSBhbGxvdyBlcXVhbGl0eSBpbiBzdG9wcGluZyB0ZXN0cyB3aGVuIHRoZQotICoJICAgcm91bmQtbmVhcmVzdCBydWxlIHdpbGwgZ2l2ZSB0aGUgc2FtZSBmbG9hdGluZy1wb2ludCB2YWx1ZQotICoJICAgYXMgd291bGQgc2F0aXNmYWN0aW9uIG9mIHRoZSBzdG9wcGluZyB0ZXN0IHdpdGggc3RyaWN0Ci0gKgkgICBpbmVxdWFsaXR5LgotICoJNC4gV2UgcmVtb3ZlIGNvbW1vbiBmYWN0b3JzIG9mIHBvd2VycyBvZiAyIGZyb20gcmVsZXZhbnQKLSAqCSAgIHF1YW50aXRpZXMuCi0gKgk1LiBXaGVuIGNvbnZlcnRpbmcgZmxvYXRpbmctcG9pbnQgaW50ZWdlcnMgbGVzcyB0aGFuIDFlMTYsCi0gKgkgICB3ZSB1c2UgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyByYXRoZXIgdGhhbiByZXNvcnRpbmcKLSAqCSAgIHRvIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2Vycy4KLSAqCTYuIFdoZW4gYXNrZWQgdG8gcHJvZHVjZSBmZXdlciB0aGFuIDE1IGRpZ2l0cywgd2UgZmlyc3QgdHJ5Ci0gKgkgICB0byBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljOyB3ZSByZXNvcnQgdG8KLSAqCSAgIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMgb25seSBpZiB3ZSBjYW5ub3QKLSAqCSAgIGd1YXJhbnRlZSB0aGF0IHRoZSBmbG9hdGluZy1wb2ludCBjYWxjdWxhdGlvbiBoYXMgZ2l2ZW4KLSAqCSAgIHRoZSBjb3JyZWN0bHkgcm91bmRlZCByZXN1bHQuICBGb3IgayByZXF1ZXN0ZWQgZGlnaXRzIGFuZAotICoJICAgInVuaWZvcm1seSIgZGlzdHJpYnV0ZWQgaW5wdXQsIHRoZSBwcm9iYWJpbGl0eSBpcwotICoJICAgc29tZXRoaW5nIGxpa2UgMTBeKGstMTUpIHRoYXQgd2UgbXVzdCByZXNvcnQgdG8gdGhlIExvbmcKLSAqCSAgIGNhbGN1bGF0aW9uLgotICovCi0KLV9fTElCQ19ISURERU5fXyAgY2hhciAqCi1fX2R0b2EKLSNpZmRlZiBLUl9oZWFkZXJzCi0JKF9kLCBtb2RlLCBuZGlnaXRzLCBkZWNwdCwgc2lnbiwgcnZlKQotCWRvdWJsZSBfZDsgaW50IG1vZGUsIG5kaWdpdHMsICpkZWNwdCwgKnNpZ247IGNoYXIgKipydmU7Ci0jZWxzZQotCShkb3VibGUgX2QsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwgaW50ICpzaWduLCBjaGFyICoqcnZlKQotI2VuZGlmCi17Ci0gLyoJQXJndW1lbnRzIG5kaWdpdHMsIGRlY3B0LCBzaWduIGFyZSBzaW1pbGFyIHRvIHRob3NlCi0Jb2YgZWN2dCBhbmQgZmN2dDsgdHJhaWxpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQgZnJvbQotCXRoZSByZXR1cm5lZCBzdHJpbmcuICBJZiBub3QgbnVsbCwgKnJ2ZSBpcyBzZXQgdG8gcG9pbnQKLQl0byB0aGUgZW5kIG9mIHRoZSByZXR1cm4gdmFsdWUuICBJZiBkIGlzICstSW5maW5pdHkgb3IgTmFOLAotCXRoZW4gKmRlY3B0IGlzIHNldCB0byA5OTk5LgotCi0JbW9kZToKLQkJMCA9PT4gc2hvcnRlc3Qgc3RyaW5nIHRoYXQgeWllbGRzIGQgd2hlbiByZWFkIGluCi0JCQlhbmQgcm91bmRlZCB0byBuZWFyZXN0LgotCQkxID09PiBsaWtlIDAsIGJ1dCB3aXRoIFN0ZWVsZSAmIFdoaXRlIHN0b3BwaW5nIHJ1bGU7Ci0JCQllLmcuIHdpdGggSUVFRSBQNzU0IGFyaXRobWV0aWMgLCBtb2RlIDAgZ2l2ZXMKLQkJCTFlMjMgd2hlcmVhcyBtb2RlIDEgZ2l2ZXMgOS45OTk5OTk5OTk5OTk5OTllMjIuCi0JCTIgPT0+IG1heCgxLG5kaWdpdHMpIHNpZ25pZmljYW50IGRpZ2l0cy4gIFRoaXMgZ2l2ZXMgYQotCQkJcmV0dXJuIHZhbHVlIHNpbWlsYXIgdG8gdGhhdCBvZiBlY3Z0LCBleGNlcHQKLQkJCXRoYXQgdHJhaWxpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQuCi0JCTMgPT0+IHRocm91Z2ggbmRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50LiAgVGhpcwotCQkJZ2l2ZXMgYSByZXR1cm4gdmFsdWUgc2ltaWxhciB0byB0aGF0IGZyb20gZmN2dCwKLQkJCWV4Y2VwdCB0aGF0IHRyYWlsaW5nIHplcm9zIGFyZSBzdXBwcmVzc2VkLCBhbmQKLQkJCW5kaWdpdHMgY2FuIGJlIG5lZ2F0aXZlLgotCQk0LTkgc2hvdWxkIGdpdmUgdGhlIHNhbWUgcmV0dXJuIHZhbHVlcyBhcyAyLTMsIGkuZS4sCi0JCQk0IDw9IG1vZGUgPD0gOSA9PT4gc2FtZSByZXR1cm4gYXMgbW9kZQotCQkJMiArIChtb2RlICYgMSkuICBUaGVzZSBtb2RlcyBhcmUgbWFpbmx5IGZvcgotCQkJZGVidWdnaW5nOyBvZnRlbiB0aGV5IHJ1biBzbG93ZXIgYnV0IHNvbWV0aW1lcwotCQkJZmFzdGVyIHRoYW4gbW9kZXMgMi0zLgotCQk0LDUsOCw5ID09PiBsZWZ0LXRvLXJpZ2h0IGRpZ2l0IGdlbmVyYXRpb24uCi0JCTYtOSA9PT4gZG9uJ3QgdHJ5IGZhc3QgZmxvYXRpbmctcG9pbnQgZXN0aW1hdGUKLQkJCShpZiBhcHBsaWNhYmxlKS4KLQotCQlWYWx1ZXMgb2YgbW9kZSBvdGhlciB0aGFuIDAtOSBhcmUgdHJlYXRlZCBhcyBtb2RlIDAuCi0KLQkJU3VmZmljaWVudCBzcGFjZSBpcyBhbGxvY2F0ZWQgdG8gdGhlIHJldHVybiB2YWx1ZQotCQl0byBob2xkIHRoZSBzdXBwcmVzc2VkIHRyYWlsaW5nIHplcm9zLgotCSovCi0KLQlpbnQgYmJpdHMsIGIyLCBiNSwgYmUsIGRpZywgaSwgaWVwcywgaWxpbTAsCi0JCWosIGpqMSwgaywgazAsIGtfY2hlY2ssIGxlZnRyaWdodCwgbTIsIG01LCBzMiwgczUsCi0JCXRyeV9xdWljazsKLQlpbnQgaWxpbSA9IDAsIGlsaW0xID0gMCwgc3BlY19jYXNlID0gMDsJLyogcGFjaWZ5IGdjYyAqLwotCUxvbmcgTDsKLSNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdwotCWludCBkZW5vcm07Ci0JVUxvbmcgeDsKLSNlbmRpZgotCUJpZ2ludCAqYiwgKmIxLCAqZGVsdGEsICptaGksICpTOwotCUJpZ2ludCAqbWxvID0gTlVMTDsgLyogcGFjaWZ5IGdjYyAqLwotCWRvdWJsZSBkczsKLQljaGFyICpzLCAqczA7Ci0JQmlnaW50ICpyZXN1bHQgPSBOVUxMOwotCWludCByZXN1bHRfayA9IDA7Ci0JX2RvdWJsZSBkLCBkMiwgZXBzOwotCi0JdmFsdWUoZCkgPSBfZDsKLQotCWlmICh3b3JkMChkKSAmIFNpZ25fYml0KSB7Ci0JCS8qIHNldCBzaWduIGZvciBldmVyeXRoaW5nLCBpbmNsdWRpbmcgMCdzIGFuZCBOYU5zICovCi0JCSpzaWduID0gMTsKLQkJd29yZDAoZCkgJj0gflNpZ25fYml0OwkvKiBjbGVhciBzaWduIGJpdCAqLwotCX0KLQllbHNlCi0JCSpzaWduID0gMDsKLQotI2lmIGRlZmluZWQoSUVFRV9Bcml0aCkgKyBkZWZpbmVkKFZBWCkKLSNpZmRlZiBJRUVFX0FyaXRoCi0JaWYgKCh3b3JkMChkKSAmIEV4cF9tYXNrKSA9PSBFeHBfbWFzaykKLSNlbHNlCi0JaWYgKHdvcmQwKGQpICA9PSAweDgwMDApCi0jZW5kaWYKLQl7Ci0JCS8qIEluZmluaXR5IG9yIE5hTiAqLwotCQkqZGVjcHQgPSA5OTk5OwotCQlzID0KLSNpZmRlZiBJRUVFX0FyaXRoCi0JCQkhd29yZDEoZCkgJiYgISh3b3JkMChkKSAmIDB4ZmZmZmYpID8gIkluZmluaXR5IiA6Ci0jZW5kaWYKLQkJCQkiTmFOIjsKLQkJcmVzdWx0ID0gQmFsbG9jKHN0cmxlbihzKSsxKTsKLQkJaWYgKHJlc3VsdCA9PSBCSUdJTlRfSU5WQUxJRCkKLQkJCXJldHVybiBOVUxMOwotCQlzMCA9IChjaGFyICopKHZvaWQgKilyZXN1bHQ7Ci0JCXN0cmNweShzMCwgcyk7Ci0JCWlmIChydmUpCi0JCQkqcnZlID0KLSNpZmRlZiBJRUVFX0FyaXRoCi0JCQkJczBbM10gPyBzMCArIDggOgotI2VuZGlmCi0JCQkJczAgKyAzOwotCQlyZXR1cm4gczA7Ci0JfQotI2VuZGlmCi0jaWZkZWYgSUJNCi0JdmFsdWUoZCkgKz0gMDsgLyogbm9ybWFsaXplICovCi0jZW5kaWYKLQlpZiAoIXZhbHVlKGQpKSB7Ci0JCSpkZWNwdCA9IDE7Ci0JCXJlc3VsdCA9IEJhbGxvYygyKTsKLQkJaWYgKHJlc3VsdCA9PSBCSUdJTlRfSU5WQUxJRCkKLQkJCXJldHVybiBOVUxMOwotCQlzMCA9IChjaGFyICopKHZvaWQgKilyZXN1bHQ7Ci0JCXN0cmNweShzMCwgIjAiKTsKLQkJaWYgKHJ2ZSkKLQkJCSpydmUgPSBzMCArIDE7Ci0JCXJldHVybiBzMDsKLQl9Ci0KLQliID0gZDJiKHZhbHVlKGQpLCAmYmUsICZiYml0cyk7Ci0jaWZkZWYgU3VkZGVuX1VuZGVyZmxvdwotCWkgPSAoaW50KSh3b3JkMChkKSA+PiBFeHBfc2hpZnQxICYgKEV4cF9tYXNrPj5FeHBfc2hpZnQxKSk7Ci0jZWxzZQotCWlmICgoaSA9IChpbnQpKHdvcmQwKGQpID4+IEV4cF9zaGlmdDEgJiAoRXhwX21hc2s+PkV4cF9zaGlmdDEpKSkgIT0gMCkgewotI2VuZGlmCi0JCXZhbHVlKGQyKSA9IHZhbHVlKGQpOwotCQl3b3JkMChkMikgJj0gRnJhY19tYXNrMTsKLQkJd29yZDAoZDIpIHw9IEV4cF8xMTsKLSNpZmRlZiBJQk0KLQkJaWYgKGogPSAxMSAtIGhpMGJpdHMod29yZDAoZDIpICYgRnJhY19tYXNrKSkKLQkJCXZhbHVlKGQyKSAvPSAxIDw8IGo7Ci0jZW5kaWYKLQotCQkvKiBsb2coeCkJfj1+IGxvZygxLjUpICsgKHgtMS41KS8xLjUKLQkJICogbG9nMTAoeCkJID0gIGxvZyh4KSAvIGxvZygxMCkKLQkJICoJCX49fiBsb2coMS41KS9sb2coMTApICsgKHgtMS41KS8oMS41KmxvZygxMCkpCi0JCSAqIGxvZzEwKGQpID0gKGktQmlhcykqbG9nKDIpL2xvZygxMCkgKyBsb2cxMChkMikKLQkJICoKLQkJICogVGhpcyBzdWdnZXN0cyBjb21wdXRpbmcgYW4gYXBwcm94aW1hdGlvbiBrIHRvIGxvZzEwKGQpIGJ5Ci0JCSAqCi0JCSAqIGsgPSAoaSAtIEJpYXMpKjAuMzAxMDI5OTk1NjYzOTgxCi0JCSAqCSsgKCAoZDItMS41KSowLjI4OTUyOTY1NDYwMjE2OCArIDAuMTc2MDkxMjU5MDU1NjgxICk7Ci0JCSAqCi0JCSAqIFdlIHdhbnQgayB0byBiZSB0b28gbGFyZ2UgcmF0aGVyIHRoYW4gdG9vIHNtYWxsLgotCQkgKiBUaGUgZXJyb3IgaW4gdGhlIGZpcnN0LW9yZGVyIFRheWxvciBzZXJpZXMgYXBwcm94aW1hdGlvbgotCQkgKiBpcyBpbiBvdXIgZmF2b3IsIHNvIHdlIGp1c3Qgcm91bmQgdXAgdGhlIGNvbnN0YW50IGVub3VnaAotCQkgKiB0byBjb21wZW5zYXRlIGZvciBhbnkgZXJyb3IgaW4gdGhlIG11bHRpcGxpY2F0aW9uIG9mCi0JCSAqIChpIC0gQmlhcykgYnkgMC4zMDEwMjk5OTU2NjM5ODE7IHNpbmNlIHxpIC0gQmlhc3wgPD0gMTA3NywKLQkJICogYW5kIDEwNzcgKiAwLjMwMTAzICogMl4tNTIgfj1+IDcuMmUtMTQsCi0JCSAqIGFkZGluZyAxZS0xMyB0byB0aGUgY29uc3RhbnQgdGVybSBtb3JlIHRoYW4gc3VmZmljZXMuCi0JCSAqIEhlbmNlIHdlIGFkanVzdCB0aGUgY29uc3RhbnQgdGVybSB0byAwLjE3NjA5MTI1OTA1NTguCi0JCSAqIChXZSBjb3VsZCBnZXQgYSBtb3JlIGFjY3VyYXRlIGsgYnkgaW52b2tpbmcgbG9nMTAsCi0JCSAqICBidXQgdGhpcyBpcyBwcm9iYWJseSBub3Qgd29ydGh3aGlsZS4pCi0JCSAqLwotCi0JCWkgLT0gQmlhczsKLSNpZmRlZiBJQk0KLQkJaSA8PD0gMjsKLQkJaSArPSBqOwotI2VuZGlmCi0jaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKLQkJZGVub3JtID0gMDsKLQl9Ci0JZWxzZSB7Ci0JCS8qIGQgaXMgZGVub3JtYWxpemVkICovCi0KLQkJaSA9IGJiaXRzICsgYmUgKyAoQmlhcyArIChQLTEpIC0gMSk7Ci0JCXggPSBpID4gMzIgID8gd29yZDAoZCkgPDwgKDY0IC0gaSkgfCB3b3JkMShkKSA+PiAoaSAtIDMyKQotCQkJICAgIDogd29yZDEoZCkgPDwgKDMyIC0gaSk7Ci0JCXZhbHVlKGQyKSA9IHg7Ci0JCXdvcmQwKGQyKSAtPSAzMSpFeHBfbXNrMTsgLyogYWRqdXN0IGV4cG9uZW50ICovCi0JCWkgLT0gKEJpYXMgKyAoUC0xKSAtIDEpICsgMTsKLQkJZGVub3JtID0gMTsKLQl9Ci0jZW5kaWYKLQlkcyA9ICh2YWx1ZShkMiktMS41KSowLjI4OTUyOTY1NDYwMjE2OCArIDAuMTc2MDkxMjU5MDU1OCArCi0JICAgIGkqMC4zMDEwMjk5OTU2NjM5ODE7Ci0JayA9IChpbnQpZHM7Ci0JaWYgKGRzIDwgMC4gJiYgZHMgIT0gaykKLQkJay0tOwkvKiB3YW50IGsgPSBmbG9vcihkcykgKi8KLQlrX2NoZWNrID0gMTsKLQlpZiAoayA+PSAwICYmIGsgPD0gVGVuX3BtYXgpIHsKLQkJaWYgKHZhbHVlKGQpIDwgdGVuc1trXSkKLQkJCWstLTsKLQkJa19jaGVjayA9IDA7Ci0JfQotCWogPSBiYml0cyAtIGkgLSAxOwotCWlmIChqID49IDApIHsKLQkJYjIgPSAwOwotCQlzMiA9IGo7Ci0JfQotCWVsc2UgewotCQliMiA9IC1qOwotCQlzMiA9IDA7Ci0JfQotCWlmIChrID49IDApIHsKLQkJYjUgPSAwOwotCQlzNSA9IGs7Ci0JCXMyICs9IGs7Ci0JfQotCWVsc2UgewotCQliMiAtPSBrOwotCQliNSA9IC1rOwotCQlzNSA9IDA7Ci0JfQotCWlmIChtb2RlIDwgMCB8fCBtb2RlID4gOSkKLQkJbW9kZSA9IDA7Ci0JdHJ5X3F1aWNrID0gMTsKLQlpZiAobW9kZSA+IDUpIHsKLQkJbW9kZSAtPSA0OwotCQl0cnlfcXVpY2sgPSAwOwotCX0KLQlsZWZ0cmlnaHQgPSAxOwotCXN3aXRjaChtb2RlKSB7Ci0JCWNhc2UgMDoKLQkJY2FzZSAxOgotCQkJaWxpbSA9IGlsaW0xID0gLTE7Ci0JCQlpID0gMTg7Ci0JCQluZGlnaXRzID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlsZWZ0cmlnaHQgPSAwOwotCQkJLyogRkFMTFRIUk9VR0ggKi8KLQkJY2FzZSA0OgotCQkJaWYgKG5kaWdpdHMgPD0gMCkKLQkJCQluZGlnaXRzID0gMTsKLQkJCWlsaW0gPSBpbGltMSA9IGkgPSBuZGlnaXRzOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCWxlZnRyaWdodCA9IDA7Ci0JCQkvKiBGQUxMVEhST1VHSCAqLwotCQljYXNlIDU6Ci0JCQlpID0gbmRpZ2l0cyArIGsgKyAxOwotCQkJaWxpbSA9IGk7Ci0JCQlpbGltMSA9IGkgLSAxOwotCQkJaWYgKGkgPD0gMCkKLQkJCQlpID0gMTsKLQl9Ci0JaiA9IHNpemVvZihVTG9uZyk7Ci0gICAgICAgIGZvcihyZXN1bHRfayA9IDA7IChpbnQpKHNpemVvZihCaWdpbnQpIC0gc2l6ZW9mKFVMb25nKSkgKyBqIDw9IGk7Ci0JCWogPDw9IDEpIHJlc3VsdF9rKys7Ci0gICAgICAgIC8vIHRoaXMgaXMgcmVhbGx5IGEgdWdseSBoYWNrLCB0aGUgY29kZSB1c2VzIEJhbGxvYwotICAgICAgICAvLyBpbnN0ZWFkIG9mIG1hbGxvYywgYnV0IGNhc3RzIHRoZSByZXN1bHQgaW50byBhIGNoYXIqCi0gICAgICAgIC8vIGl0IHNlZW1zIHRoZSBvbmx5IHJlYXNvbiB0byBkbyB0aGF0IGlzIGR1ZSB0byB0aGUKLSAgICAgICAgLy8gY29tcGxpY2F0ZWQgd2F5IHRoZSBibG9jayBzaXplIG5lZWQgdG8gYmUgY29tcHV0ZWQKLSAgICAgICAgLy8gYnV1dXJrLi4uLgotCXJlc3VsdCA9IEJhbGxvYyhyZXN1bHRfayk7Ci0JaWYgKHJlc3VsdCA9PSBCSUdJTlRfSU5WQUxJRCkgewotCQlCZnJlZShiKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXMgPSBzMCA9IChjaGFyICopKHZvaWQgKilyZXN1bHQ7Ci0KLQlpZiAoaWxpbSA+PSAwICYmIGlsaW0gPD0gUXVpY2tfbWF4ICYmIHRyeV9xdWljaykgewotCi0JCS8qIFRyeSB0byBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLiAqLwotCi0JCWkgPSAwOwotCQl2YWx1ZShkMikgPSB2YWx1ZShkKTsKLQkJazAgPSBrOwotCQlpbGltMCA9IGlsaW07Ci0JCWllcHMgPSAyOyAvKiBjb25zZXJ2YXRpdmUgKi8KLQkJaWYgKGsgPiAwKSB7Ci0JCQlkcyA9IHRlbnNbayYweGZdOwotCQkJaiA9ICh1bnNpZ25lZCBpbnQpayA+PiA0OwotCQkJaWYgKGogJiBCbGV0Y2gpIHsKLQkJCQkvKiBwcmV2ZW50IG92ZXJmbG93cyAqLwotCQkJCWogJj0gQmxldGNoIC0gMTsKLQkJCQl2YWx1ZShkKSAvPSBiaWd0ZW5zW25fYmlndGVucy0xXTsKLQkJCQlpZXBzKys7Ci0JCQkJfQotCQkJZm9yKDsgajsgaiA9ICh1bnNpZ25lZCBpbnQpaiA+PiAxLCBpKyspCi0JCQkJaWYgKGogJiAxKSB7Ci0JCQkJCWllcHMrKzsKLQkJCQkJZHMgKj0gYmlndGVuc1tpXTsKLQkJCQkJfQotCQkJdmFsdWUoZCkgLz0gZHM7Ci0JCX0KLQkJZWxzZSBpZiAoKGpqMSA9IC1rKSAhPSAwKSB7Ci0JCQl2YWx1ZShkKSAqPSB0ZW5zW2pqMSAmIDB4Zl07Ci0JCQlmb3IoaiA9ICh1bnNpZ25lZCBpbnQpamoxID4+IDQ7IGo7Ci0JCQkgICAgaiA9ICh1bnNpZ25lZCBpbnQpaiA+PiAxLCBpKyspCi0JCQkJaWYgKGogJiAxKSB7Ci0JCQkJCWllcHMrKzsKLQkJCQkJdmFsdWUoZCkgKj0gYmlndGVuc1tpXTsKLQkJCQl9Ci0JCX0KLQkJaWYgKGtfY2hlY2sgJiYgdmFsdWUoZCkgPCAxLiAmJiBpbGltID4gMCkgewotCQkJaWYgKGlsaW0xIDw9IDApCi0JCQkJZ290byBmYXN0X2ZhaWxlZDsKLQkJCWlsaW0gPSBpbGltMTsKLQkJCWstLTsKLQkJCXZhbHVlKGQpICo9IDEwLjsKLQkJCWllcHMrKzsKLQkJfQotCQl2YWx1ZShlcHMpID0gaWVwcyp2YWx1ZShkKSArIDcuOwotCQl3b3JkMChlcHMpIC09IChQLTEpKkV4cF9tc2sxOwotCQlpZiAoaWxpbSA9PSAwKSB7Ci0JCQlTID0gbWhpID0gMDsKLQkJCXZhbHVlKGQpIC09IDUuOwotCQkJaWYgKHZhbHVlKGQpID4gdmFsdWUoZXBzKSkKLQkJCQlnb3RvIG9uZV9kaWdpdDsKLQkJCWlmICh2YWx1ZShkKSA8IC12YWx1ZShlcHMpKQotCQkJCWdvdG8gbm9fZGlnaXRzOwotCQkJZ290byBmYXN0X2ZhaWxlZDsKLQkJfQotI2lmbmRlZiBOb19sZWZ0cmlnaHQKLQkJaWYgKGxlZnRyaWdodCkgewotCQkJLyogVXNlIFN0ZWVsZSAmIFdoaXRlIG1ldGhvZCBvZiBvbmx5Ci0JCQkgKiBnZW5lcmF0aW5nIGRpZ2l0cyBuZWVkZWQuCi0JCQkgKi8KLQkJCXZhbHVlKGVwcykgPSAwLjUvdGVuc1tpbGltLTFdIC0gdmFsdWUoZXBzKTsKLQkJCWZvcihpID0gMDs7KSB7Ci0JCQkJTCA9IHZhbHVlKGQpOwotCQkJCXZhbHVlKGQpIC09IEw7Ci0JCQkJKnMrKyA9ICcwJyArIChpbnQpTDsKLQkJCQlpZiAodmFsdWUoZCkgPCB2YWx1ZShlcHMpKQotCQkJCQlnb3RvIHJldDE7Ci0JCQkJaWYgKDEuIC0gdmFsdWUoZCkgPCB2YWx1ZShlcHMpKQotCQkJCQlnb3RvIGJ1bXBfdXA7Ci0JCQkJaWYgKCsraSA+PSBpbGltKQotCQkJCQlicmVhazsKLQkJCQl2YWx1ZShlcHMpICo9IDEwLjsKLQkJCQl2YWx1ZShkKSAqPSAxMC47Ci0JCQkJfQotCQl9Ci0JCWVsc2UgewotI2VuZGlmCi0JCQkvKiBHZW5lcmF0ZSBpbGltIGRpZ2l0cywgdGhlbiBmaXggdGhlbSB1cC4gKi8KLQkJCXZhbHVlKGVwcykgKj0gdGVuc1tpbGltLTFdOwotCQkJZm9yKGkgPSAxOzsgaSsrLCB2YWx1ZShkKSAqPSAxMC4pIHsKLQkJCQlMID0gdmFsdWUoZCk7Ci0JCQkJdmFsdWUoZCkgLT0gTDsKLQkJCQkqcysrID0gJzAnICsgKGludClMOwotCQkJCWlmIChpID09IGlsaW0pIHsKLQkJCQkJaWYgKHZhbHVlKGQpID4gMC41ICsgdmFsdWUoZXBzKSkKLQkJCQkJCWdvdG8gYnVtcF91cDsKLQkJCQkJZWxzZSBpZiAodmFsdWUoZCkgPCAwLjUgLSB2YWx1ZShlcHMpKSB7Ci0JCQkJCQl3aGlsZSgqLS1zID09ICcwJyk7Ci0JCQkJCQlzKys7Ci0JCQkJCQlnb3RvIHJldDE7Ci0JCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLSNpZm5kZWYgTm9fbGVmdHJpZ2h0Ci0JCX0KLSNlbmRpZgotIGZhc3RfZmFpbGVkOgotCQlzID0gczA7Ci0JCXZhbHVlKGQpID0gdmFsdWUoZDIpOwotCQlrID0gazA7Ci0JCWlsaW0gPSBpbGltMDsKLQl9Ci0KLQkvKiBEbyB3ZSBoYXZlIGEgInNtYWxsIiBpbnRlZ2VyPyAqLwotCi0JaWYgKGJlID49IDAgJiYgayA8PSBJbnRfbWF4KSB7Ci0JCS8qIFllcy4gKi8KLQkJZHMgPSB0ZW5zW2tdOwotCQlpZiAobmRpZ2l0cyA8IDAgJiYgaWxpbSA8PSAwKSB7Ci0JCQlTID0gbWhpID0gMDsKLQkJCWlmIChpbGltIDwgMCB8fCB2YWx1ZShkKSA8PSA1KmRzKQotCQkJCWdvdG8gbm9fZGlnaXRzOwotCQkJZ290byBvbmVfZGlnaXQ7Ci0JCX0KLQkJZm9yKGkgPSAxOzsgaSsrKSB7Ci0JCQlMID0gdmFsdWUoZCkgLyBkczsKLQkJCXZhbHVlKGQpIC09IEwqZHM7Ci0jaWZkZWYgQ2hlY2tfRkxUX1JPVU5EUwotCQkJLyogSWYgRkxUX1JPVU5EUyA9PSAyLCBMIHdpbGwgdXN1YWxseSBiZSBoaWdoIGJ5IDEgKi8KLQkJCWlmICh2YWx1ZShkKSA8IDApIHsKLQkJCQlMLS07Ci0JCQkJdmFsdWUoZCkgKz0gZHM7Ci0JCQl9Ci0jZW5kaWYKLQkJCSpzKysgPSAnMCcgKyAoaW50KUw7Ci0JCQlpZiAoaSA9PSBpbGltKSB7Ci0JCQkJdmFsdWUoZCkgKz0gdmFsdWUoZCk7Ci0JCQkJaWYgKHZhbHVlKGQpID4gZHMgfHwgKHZhbHVlKGQpID09IGRzICYmIEwgJiAxKSkgewotIGJ1bXBfdXA6Ci0JCQkJCXdoaWxlKCotLXMgPT0gJzknKQotCQkJCQkJaWYgKHMgPT0gczApIHsKLQkJCQkJCQlrKys7Ci0JCQkJCQkJKnMgPSAnMCc7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCSsrKnMrKzsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoISh2YWx1ZShkKSAqPSAxMC4pKQotCQkJCWJyZWFrOwotCQkJfQotCQlnb3RvIHJldDE7Ci0JfQotCi0JbTIgPSBiMjsKLQltNSA9IGI1OwotCW1oaSA9IG1sbyA9IDA7Ci0JaWYgKGxlZnRyaWdodCkgewotCQlpZiAobW9kZSA8IDIpIHsKLQkJCWkgPQotI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93Ci0JCQkJZGVub3JtID8gYmUgKyAoQmlhcyArIChQLTEpIC0gMSArIDEpIDoKLSNlbmRpZgotI2lmZGVmIElCTQotCQkJCTEgKyA0KlAgLSAzIC0gYmJpdHMgKyAoKGJiaXRzICsgYmUgLSAxKSAmIDMpOwotI2Vsc2UKLQkJCQkxICsgUCAtIGJiaXRzOwotI2VuZGlmCi0JCX0KLQkJZWxzZSB7Ci0JCQlqID0gaWxpbSAtIDE7Ci0JCQlpZiAobTUgPj0gaikKLQkJCQltNSAtPSBqOwotCQkJZWxzZSB7Ci0JCQkJczUgKz0gaiAtPSBtNTsKLQkJCQliNSArPSBqOwotCQkJCW01ID0gMDsKLQkJCX0KLQkJCWlmICgoaSA9IGlsaW0pIDwgMCkgewotCQkJCW0yIC09IGk7Ci0JCQkJaSA9IDA7Ci0JCQl9Ci0JCX0KLQkJYjIgKz0gaTsKLQkJczIgKz0gaTsKLQkJbWhpID0gaTJiKDEpOwotCX0KLQlpZiAobTIgPiAwICYmIHMyID4gMCkgewotCQlpID0gbTIgPCBzMiA/IG0yIDogczI7Ci0JCWIyIC09IGk7Ci0JCW0yIC09IGk7Ci0JCXMyIC09IGk7Ci0JfQotCWlmIChiNSA+IDApIHsKLQkJaWYgKGxlZnRyaWdodCkgewotCQkJaWYgKG01ID4gMCkgewotCQkJCW1oaSA9IHBvdzVtdWx0KG1oaSwgbTUpOwotCQkJCWIxID0gbXVsdChtaGksIGIpOwotCQkJCUJmcmVlKGIpOwotCQkJCWIgPSBiMTsKLQkJCX0KLQkJCWlmICgoaiA9IGI1IC0gbTUpICE9IDApCi0JCQkJYiA9IHBvdzVtdWx0KGIsIGopOwotCQkJfQotCQllbHNlCi0JCQliID0gcG93NW11bHQoYiwgYjUpOwotCX0KLQlTID0gaTJiKDEpOwotCWlmIChzNSA+IDApCi0JCVMgPSBwb3c1bXVsdChTLCBzNSk7Ci0KLQkvKiBDaGVjayBmb3Igc3BlY2lhbCBjYXNlIHRoYXQgZCBpcyBhIG5vcm1hbGl6ZWQgcG93ZXIgb2YgMi4gKi8KLQotCWlmIChtb2RlIDwgMikgewotCQlpZiAoIXdvcmQxKGQpICYmICEod29yZDAoZCkgJiBCbmRyeV9tYXNrKQotI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93Ci0JCSAmJiB3b3JkMChkKSAmIEV4cF9tYXNrCi0jZW5kaWYKLQkJCQkpIHsKLQkJCS8qIFRoZSBzcGVjaWFsIGNhc2UgKi8KLQkJCWIyICs9IExvZzJQOwotCQkJczIgKz0gTG9nMlA7Ci0JCQlzcGVjX2Nhc2UgPSAxOwotCQkJfQotCQllbHNlCi0JCQlzcGVjX2Nhc2UgPSAwOwotCX0KLQotCS8qIEFycmFuZ2UgZm9yIGNvbnZlbmllbnQgY29tcHV0YXRpb24gb2YgcXVvdGllbnRzOgotCSAqIHNoaWZ0IGxlZnQgaWYgbmVjZXNzYXJ5IHNvIGRpdmlzb3IgaGFzIDQgbGVhZGluZyAwIGJpdHMuCi0JICoKLQkgKiBQZXJoYXBzIHdlIHNob3VsZCBqdXN0IGNvbXB1dGUgbGVhZGluZyAyOCBiaXRzIG9mIFMgb25jZQotCSAqIGFuZCBmb3IgYWxsIGFuZCBwYXNzIHRoZW0gYW5kIGEgc2hpZnQgdG8gcXVvcmVtLCBzbyBpdAotCSAqIGNhbiBkbyBzaGlmdHMgYW5kIG9ycyB0byBjb21wdXRlIHRoZSBudW1lcmF0b3IgZm9yIHEuCi0JICovCi0JaWYgKFMgPT0gQklHSU5UX0lOVkFMSUQpIHsKLQkJaSA9IDA7Ci0JfSBlbHNlIHsKLSNpZmRlZiBQYWNrXzMyCi0JCWlmICgoaSA9ICgoczUgPyAzMiAtIGhpMGJpdHMoUy0+eFtTLT53ZHMtMV0pIDogMSkgKyBzMikgJiAweDFmKSAhPSAwKQotCQkJaSA9IDMyIC0gaTsKLSNlbHNlCi0JCWlmIChpID0gKChzNSA/IDMyIC0gaGkwYml0cyhTLT54W1MtPndkcy0xXSkgOiAxKSArIHMyKSAmIDB4ZikKLQkJCWkgPSAxNiAtIGk7Ci0jZW5kaWYKLQl9Ci0KLQlpZiAoaSA+IDQpIHsKLQkJaSAtPSA0OwotCQliMiArPSBpOwotCQltMiArPSBpOwotCQlzMiArPSBpOwotCX0KLQllbHNlIGlmIChpIDwgNCkgewotCQlpICs9IDI4OwotCQliMiArPSBpOwotCQltMiArPSBpOwotCQlzMiArPSBpOwotCX0KLQlpZiAoYjIgPiAwKQotCQliID0gbHNoaWZ0KGIsIGIyKTsKLQlpZiAoczIgPiAwKQotCQlTID0gbHNoaWZ0KFMsIHMyKTsKLQlpZiAoa19jaGVjaykgewotCQlpZiAoY21wKGIsUykgPCAwKSB7Ci0JCQlrLS07Ci0JCQliID0gbXVsdGFkZChiLCAxMCwgMCk7CS8qIHdlIGJvdGNoZWQgdGhlIGsgZXN0aW1hdGUgKi8KLQkJCWlmIChsZWZ0cmlnaHQpCi0JCQkJbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKLQkJCWlsaW0gPSBpbGltMTsKLQkJCX0KLQl9Ci0JaWYgKGlsaW0gPD0gMCAmJiBtb2RlID4gMikgewotCQlpZiAoaWxpbSA8IDAgfHwgY21wKGIsUyA9IG11bHRhZGQoUyw1LDApKSA8PSAwKSB7Ci0JCQkvKiBubyBkaWdpdHMsIGZjdnQgc3R5bGUgKi8KLSBub19kaWdpdHM6Ci0JCQlrID0gLTEgLSBuZGlnaXRzOwotCQkJZ290byByZXQ7Ci0JCX0KLSBvbmVfZGlnaXQ6Ci0JCSpzKysgPSAnMSc7Ci0JCWsrKzsKLQkJZ290byByZXQ7Ci0JfQotCWlmIChsZWZ0cmlnaHQpIHsKLQkJaWYgKG0yID4gMCkKLQkJCW1oaSA9IGxzaGlmdChtaGksIG0yKTsKLQotCQkvKiBDb21wdXRlIG1sbyAtLSBjaGVjayBmb3Igc3BlY2lhbCBjYXNlCi0JCSAqIHRoYXQgZCBpcyBhIG5vcm1hbGl6ZWQgcG93ZXIgb2YgMi4KLQkJICovCi0KLQkJbWxvID0gbWhpOwotCQlpZiAoc3BlY19jYXNlKSB7Ci0JCQltaGkgPSBCYWxsb2MobWhpLT5rKTsKLQkJCUJjb3B5KG1oaSwgbWxvKTsKLQkJCW1oaSA9IGxzaGlmdChtaGksIExvZzJQKTsKLQkJfQotCi0JCWZvcihpID0gMTs7aSsrKSB7Ci0JCQlkaWcgPSBxdW9yZW0oYixTKSArICcwJzsKLQkJCS8qIERvIHdlIHlldCBoYXZlIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHN0cmluZwotCQkJICogdGhhdCB3aWxsIHJvdW5kIHRvIGQ/Ci0JCQkgKi8KLQkJCWogPSBjbXAoYiwgbWxvKTsKLQkJCWRlbHRhID0gZGlmZihTLCBtaGkpOwotCQkJamoxID0gZGVsdGEtPnNpZ24gPyAxIDogY21wKGIsIGRlbHRhKTsKLQkJCUJmcmVlKGRlbHRhKTsKLSNpZm5kZWYgUk9VTkRfQklBU0VECi0JCQlpZiAoamoxID09IDAgJiYgIW1vZGUgJiYgISh3b3JkMShkKSAmIDEpKSB7Ci0JCQkJaWYgKGRpZyA9PSAnOScpCi0JCQkJCWdvdG8gcm91bmRfOV91cDsKLQkJCQlpZiAoaiA+IDApCi0JCQkJCWRpZysrOwotCQkJCSpzKysgPSBkaWc7Ci0JCQkJZ290byByZXQ7Ci0JCQl9Ci0jZW5kaWYKLQkJCWlmIChqIDwgMCB8fCAoaiA9PSAwICYmICFtb2RlCi0jaWZuZGVmIFJPVU5EX0JJQVNFRAotCQkJCQkJCSYmICEod29yZDEoZCkgJiAxKQotI2VuZGlmCi0JCQkJCSkpIHsKLQkJCQlpZiAoamoxID4gMCkgewotCQkJCQliID0gbHNoaWZ0KGIsIDEpOwotCQkJCQlqajEgPSBjbXAoYiwgUyk7Ci0JCQkJCWlmICgoamoxID4gMCB8fCAoamoxID09IDAgJiYgZGlnICYgMSkpCi0JCQkJCSYmIGRpZysrID09ICc5JykKLQkJCQkJCWdvdG8gcm91bmRfOV91cDsKLQkJCQkJfQotCQkJCSpzKysgPSBkaWc7Ci0JCQkJZ290byByZXQ7Ci0JCQl9Ci0JCQlpZiAoamoxID4gMCkgewotCQkJCWlmIChkaWcgPT0gJzknKSB7IC8qIHBvc3NpYmxlIGlmIGkgPT0gMSAqLwotIHJvdW5kXzlfdXA6Ci0JCQkJCSpzKysgPSAnOSc7Ci0JCQkJCWdvdG8gcm91bmRvZmY7Ci0JCQkJCX0KLQkJCQkqcysrID0gZGlnICsgMTsKLQkJCQlnb3RvIHJldDsKLQkJCX0KLQkJCSpzKysgPSBkaWc7Ci0JCQlpZiAoaSA9PSBpbGltKQotCQkJCWJyZWFrOwotCQkJYiA9IG11bHRhZGQoYiwgMTAsIDApOwotCQkJaWYgKG1sbyA9PSBtaGkpCi0JCQkJbWxvID0gbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKLQkJCWVsc2UgewotCQkJCW1sbyA9IG11bHRhZGQobWxvLCAxMCwgMCk7Ci0JCQkJbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKLQkJCX0KLQkJfQotCX0KLQllbHNlCi0JCWZvcihpID0gMTs7IGkrKykgewotCQkJKnMrKyA9IGRpZyA9IHF1b3JlbShiLFMpICsgJzAnOwotCQkJaWYgKGkgPj0gaWxpbSkKLQkJCQlicmVhazsKLQkJCWIgPSBtdWx0YWRkKGIsIDEwLCAwKTsKLQkJfQotCi0JLyogUm91bmQgb2ZmIGxhc3QgZGlnaXQgKi8KLQotCWIgPSBsc2hpZnQoYiwgMSk7Ci0JaiA9IGNtcChiLCBTKTsKLQlpZiAoaiA+IDAgfHwgKGogPT0gMCAmJiBkaWcgJiAxKSkgewotIHJvdW5kb2ZmOgotCQl3aGlsZSgqLS1zID09ICc5JykKLQkJCWlmIChzID09IHMwKSB7Ci0JCQkJaysrOwotCQkJCSpzKysgPSAnMSc7Ci0JCQkJZ290byByZXQ7Ci0JCQkJfQotCQkrKypzKys7Ci0JfQotCWVsc2UgewotCQl3aGlsZSgqLS1zID09ICcwJyk7Ci0JCXMrKzsKLQl9Ci0gcmV0OgotCUJmcmVlKFMpOwotCWlmIChtaGkpIHsKLQkJaWYgKG1sbyAmJiBtbG8gIT0gbWhpKQotCQkJQmZyZWUobWxvKTsKLQkJQmZyZWUobWhpKTsKLQl9Ci0gcmV0MToKLQlCZnJlZShiKTsKLQlpZiAocyA9PSBzMCkgewkJCQkvKiBkb24ndCByZXR1cm4gZW1wdHkgc3RyaW5nICovCi0JCSpzKysgPSAnMCc7Ci0JCWsgPSAwOwotCX0KLQkqcyA9IDA7Ci0JKmRlY3B0ID0gayArIDE7Ci0JaWYgKHJ2ZSkKLQkJKnJ2ZSA9IHM7Ci0JcmV0dXJuIHMwOwotfQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3N0cnRvaW1heC5jIGIvbGliYy9zdGRsaWIvc3RydG9pbWF4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNDMyM2QuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRsaWIvc3RydG9pbWF4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cnRvaW1heC5jLHYgMS4xIDIwMDYvMDEvMTMgMTc6NTg6MDkgbWlsbGVydCBFeHAgJAkqLwotCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MiBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotCi0vKgotICogQ29udmVydCBhIHN0cmluZyB0byBhbiBpbnRtYXhfdAotICoKLSAqIElnbm9yZXMgYGxvY2FsZScgc3R1ZmYuICBBc3N1bWVzIHRoYXQgdGhlIHVwcGVyIGFuZCBsb3dlciBjYXNlCi0gKiBhbHBoYWJldHMgYW5kIGRpZ2l0cyBhcmUgZWFjaCBjb250aWd1b3VzLgotICovCi1pbnRtYXhfdAotc3RydG9pbWF4KGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQotewotCWNvbnN0IGNoYXIgKnM7Ci0JaW50bWF4X3QgYWNjLCBjdXRvZmY7Ci0JaW50IGM7Ci0JaW50IG5lZywgYW55LCBjdXRsaW07Ci0KLQkvKgotCSAqIFNraXAgd2hpdGUgc3BhY2UgYW5kIHBpY2sgdXAgbGVhZGluZyArLy0gc2lnbiBpZiBhbnkuCi0JICogSWYgYmFzZSBpcyAwLCBhbGxvdyAweCBmb3IgaGV4IGFuZCAwIGZvciBvY3RhbCwgZWxzZQotCSAqIGFzc3VtZSBkZWNpbWFsOyBpZiBiYXNlIGlzIGFscmVhZHkgMTYsIGFsbG93IDB4LgotCSAqLwotCXMgPSBucHRyOwotCWRvIHsKLQkJYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrOwotCX0gd2hpbGUgKGlzc3BhY2UoYykpOwotCWlmIChjID09ICctJykgewotCQluZWcgPSAxOwotCQljID0gKnMrKzsKLQl9IGVsc2UgewotCQluZWcgPSAwOwotCQlpZiAoYyA9PSAnKycpCi0JCQljID0gKnMrKzsKLQl9Ci0JaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKLQkgICAgYyA9PSAnMCcgJiYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpKSB7Ci0JCWMgPSBzWzFdOwotCQlzICs9IDI7Ci0JCWJhc2UgPSAxNjsKLQl9Ci0JaWYgKGJhc2UgPT0gMCkKLQkJYmFzZSA9IGMgPT0gJzAnID8gOCA6IDEwOwotCi0JLyoKLQkgKiBDb21wdXRlIHRoZSBjdXRvZmYgdmFsdWUgYmV0d2VlbiBsZWdhbCBudW1iZXJzIGFuZCBpbGxlZ2FsCi0JICogbnVtYmVycy4gIFRoYXQgaXMgdGhlIGxhcmdlc3QgbGVnYWwgdmFsdWUsIGRpdmlkZWQgYnkgdGhlCi0JICogYmFzZS4gIEFuIGlucHV0IG51bWJlciB0aGF0IGlzIGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlLCBpZgotCSAqIGZvbGxvd2VkIGJ5IGEgbGVnYWwgaW5wdXQgY2hhcmFjdGVyLCBpcyB0b28gYmlnLiAgT25lIHRoYXQKLQkgKiBpcyBlcXVhbCB0byB0aGlzIHZhbHVlIG1heSBiZSB2YWxpZCBvciBub3Q7IHRoZSBsaW1pdAotCSAqIGJldHdlZW4gdmFsaWQgYW5kIGludmFsaWQgbnVtYmVycyBpcyB0aGVuIGJhc2VkIG9uIHRoZSBsYXN0Ci0JICogZGlnaXQuICBGb3IgaW5zdGFuY2UsIGlmIHRoZSByYW5nZSBmb3IgaW50bWF4X3QgaXMKLQkgKiBbLTkyMjMzNzIwMzY4NTQ3NzU4MDguLjkyMjMzNzIwMzY4NTQ3NzU4MDddIGFuZCB0aGUgaW5wdXQgYmFzZQotCSAqIGlzIDEwLCBjdXRvZmYgd2lsbCBiZSBzZXQgdG8gOTIyMzM3MjAzNjg1NDc3NTgwIGFuZCBjdXRsaW0gdG8KLQkgKiBlaXRoZXIgNyAobmVnPT0wKSBvciA4IChuZWc9PTEpLCBtZWFuaW5nIHRoYXQgaWYgd2UgaGF2ZQotCSAqIGFjY3VtdWxhdGVkIGEgdmFsdWUgPiA5MjIzMzcyMDM2ODU0Nzc1ODAsIG9yIGVxdWFsIGJ1dCB0aGUKLQkgKiBuZXh0IGRpZ2l0IGlzID4gNyAob3IgOCksIHRoZSBudW1iZXIgaXMgdG9vIGJpZywgYW5kIHdlIHdpbGwKLQkgKiByZXR1cm4gYSByYW5nZSBlcnJvci4KLQkgKgotCSAqIFNldCBhbnkgaWYgYW55IGBkaWdpdHMnIGNvbnN1bWVkOyBtYWtlIGl0IG5lZ2F0aXZlIHRvIGluZGljYXRlCi0JICogb3ZlcmZsb3cuCi0JICovCi0KLQkvKiBCSU9OSUM6IGF2b2lkIGRpdmlzaW9uIGFuZCBtb2R1bGUgZm9yIGNvbW1vbiBjYXNlcyAqLwotI2RlZmluZSAgQ0FTRV9CQVNFKHgpIFwKLSAgICAgICAgICAgIGNhc2UgeDogIFwKLQkgICAgICAgIGlmIChuZWcpIHsgXAotICAgICAgICAgICAgICAgICAgICBjdXRsaW0gPSBJTlRNQVhfTUlOICUgeDsgXAotCQkgICAgY3V0b2ZmID0gSU5UTUFYX01JTiAvIHg7IFwKLQkgICAgICAgIH0gZWxzZSB7IFwKLQkJICAgIGN1dGxpbSA9IElOVE1BWF9NQVggJSB4OyBcCi0JCSAgICBjdXRvZmYgPSBJTlRNQVhfTUFYIC8geDsgXAotCQkgfTsgXAotCQkgYnJlYWsKLQotCXN3aXRjaCAoYmFzZSkgewotICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgIGlmIChuZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgY3V0bGltID0gKGludCkoSU5UTUFYX01JTiAlIDQpOwotICAgICAgICAgICAgICAgICAgICBjdXRvZmYgPSBJTlRNQVhfTUlOIC8gNDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjdXRsaW0gPSAoaW50KShJTlRNQVhfTUFYICUgNCk7Ci0gICAgICAgICAgICAgICAgICAgIGN1dG9mZiA9IElOVE1BWF9NQVggLyA0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotCSAgICBDQVNFX0JBU0UoOCk7Ci0JICAgIENBU0VfQkFTRSgxMCk7Ci0JICAgIENBU0VfQkFTRSgxNik7Ci0JICAgIGRlZmF1bHQ6Ci0JICAgICAgICAgICAgICBjdXRvZmYgID0gbmVnID8gSU5UTUFYX01JTiA6IElOVE1BWF9NQVg7Ci0JCSAgICAgIGN1dGxpbSAgPSBjdXRvZmYgJSBiYXNlOwotCSAgICAgICAgICAgICAgY3V0b2ZmIC89IGJhc2U7Ci0JfQotI3VuZGVmIENBU0VfQkFTRQotCi0JaWYgKG5lZykgewotCQlpZiAoY3V0bGltID4gMCkgewotCQkJY3V0bGltIC09IGJhc2U7Ci0JCQljdXRvZmYgKz0gMTsKLQkJfQotCQljdXRsaW0gPSAtY3V0bGltOwotCX0KLQlmb3IgKGFjYyA9IDAsIGFueSA9IDA7OyBjID0gKHVuc2lnbmVkIGNoYXIpICpzKyspIHsKLQkJaWYgKGlzZGlnaXQoYykpCi0JCQljIC09ICcwJzsKLQkJZWxzZSBpZiAoaXNhbHBoYShjKSkKLQkJCWMgLT0gaXN1cHBlcihjKSA/ICdBJyAtIDEwIDogJ2EnIC0gMTA7Ci0JCWVsc2UKLQkJCWJyZWFrOwotCQlpZiAoYyA+PSBiYXNlKQotCQkJYnJlYWs7Ci0JCWlmIChhbnkgPCAwKQotCQkJY29udGludWU7Ci0JCWlmIChuZWcpIHsKLQkJCWlmIChhY2MgPCBjdXRvZmYgfHwgKGFjYyA9PSBjdXRvZmYgJiYgYyA+IGN1dGxpbSkpIHsKLQkJCQlhbnkgPSAtMTsKLQkJCQlhY2MgPSBJTlRNQVhfTUlOOwotCQkJCWVycm5vID0gRVJBTkdFOwotCQkJfSBlbHNlIHsKLQkJCQlhbnkgPSAxOwotCQkJCWFjYyAqPSBiYXNlOwotCQkJCWFjYyAtPSBjOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKGFjYyA+IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgewotCQkJCWFueSA9IC0xOwotCQkJCWFjYyA9IElOVE1BWF9NQVg7Ci0JCQkJZXJybm8gPSBFUkFOR0U7Ci0JCQl9IGVsc2UgewotCQkJCWFueSA9IDE7Ci0JCQkJYWNjICo9IGJhc2U7Ci0JCQkJYWNjICs9IGM7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKGVuZHB0ciAhPSAwKQotCQkqZW5kcHRyID0gKGNoYXIgKikgKGFueSA/IHMgLSAxIDogbnB0cik7Ci0JcmV0dXJuIChhY2MpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvc3RydG9sLmMgYi9saWJjL3N0ZGxpYi9zdHJ0b2wuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNjZGJjZC4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGxpYi9zdHJ0b2wuYworKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKgkkT3BlbkJTRDogc3RydG9sLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLQotLyoKLSAqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBsb25nIGludGVnZXIuCi0gKgotICogSWdub3JlcyBgbG9jYWxlJyBzdHVmZi4gIEFzc3VtZXMgdGhhdCB0aGUgdXBwZXIgYW5kIGxvd2VyIGNhc2UKLSAqIGFscGhhYmV0cyBhbmQgZGlnaXRzIGFyZSBlYWNoIGNvbnRpZ3VvdXMuCi0gKi8KLWxvbmcKLXN0cnRvbChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKLXsKLQljb25zdCBjaGFyICpzOwotCWxvbmcgYWNjLCBjdXRvZmY7Ci0JaW50IGM7Ci0JaW50IG5lZywgYW55LCBjdXRsaW07Ci0KLQkvKgotCSAqIFNraXAgd2hpdGUgc3BhY2UgYW5kIHBpY2sgdXAgbGVhZGluZyArLy0gc2lnbiBpZiBhbnkuCi0JICogSWYgYmFzZSBpcyAwLCBhbGxvdyAweCBmb3IgaGV4IGFuZCAwIGZvciBvY3RhbCwgZWxzZQotCSAqIGFzc3VtZSBkZWNpbWFsOyBpZiBiYXNlIGlzIGFscmVhZHkgMTYsIGFsbG93IDB4LgotCSAqLwotCXMgPSBucHRyOwotCWRvIHsKLQkJYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrOwotCX0gd2hpbGUgKGlzc3BhY2UoYykpOwotCWlmIChjID09ICctJykgewotCQluZWcgPSAxOwotCQljID0gKnMrKzsKLQl9IGVsc2UgewotCQluZWcgPSAwOwotCQlpZiAoYyA9PSAnKycpCi0JCQljID0gKnMrKzsKLQl9Ci0JaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKLQkgICAgYyA9PSAnMCcgJiYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpKSB7Ci0JCWMgPSBzWzFdOwotCQlzICs9IDI7Ci0JCWJhc2UgPSAxNjsKLQl9Ci0JaWYgKGJhc2UgPT0gMCkKLQkJYmFzZSA9IGMgPT0gJzAnID8gOCA6IDEwOwotCi0JLyoKLQkgKiBDb21wdXRlIHRoZSBjdXRvZmYgdmFsdWUgYmV0d2VlbiBsZWdhbCBudW1iZXJzIGFuZCBpbGxlZ2FsCi0JICogbnVtYmVycy4gIFRoYXQgaXMgdGhlIGxhcmdlc3QgbGVnYWwgdmFsdWUsIGRpdmlkZWQgYnkgdGhlCi0JICogYmFzZS4gIEFuIGlucHV0IG51bWJlciB0aGF0IGlzIGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlLCBpZgotCSAqIGZvbGxvd2VkIGJ5IGEgbGVnYWwgaW5wdXQgY2hhcmFjdGVyLCBpcyB0b28gYmlnLiAgT25lIHRoYXQKLQkgKiBpcyBlcXVhbCB0byB0aGlzIHZhbHVlIG1heSBiZSB2YWxpZCBvciBub3Q7IHRoZSBsaW1pdAotCSAqIGJldHdlZW4gdmFsaWQgYW5kIGludmFsaWQgbnVtYmVycyBpcyB0aGVuIGJhc2VkIG9uIHRoZSBsYXN0Ci0JICogZGlnaXQuICBGb3IgaW5zdGFuY2UsIGlmIHRoZSByYW5nZSBmb3IgbG9uZ3MgaXMKLQkgKiBbLTIxNDc0ODM2NDguLjIxNDc0ODM2NDddIGFuZCB0aGUgaW5wdXQgYmFzZSBpcyAxMCwKLQkgKiBjdXRvZmYgd2lsbCBiZSBzZXQgdG8gMjE0NzQ4MzY0IGFuZCBjdXRsaW0gdG8gZWl0aGVyCi0JICogNyAobmVnPT0wKSBvciA4IChuZWc9PTEpLCBtZWFuaW5nIHRoYXQgaWYgd2UgaGF2ZSBhY2N1bXVsYXRlZAotCSAqIGEgdmFsdWUgPiAyMTQ3NDgzNjQsIG9yIGVxdWFsIGJ1dCB0aGUgbmV4dCBkaWdpdCBpcyA+IDcgKG9yIDgpLAotCSAqIHRoZSBudW1iZXIgaXMgdG9vIGJpZywgYW5kIHdlIHdpbGwgcmV0dXJuIGEgcmFuZ2UgZXJyb3IuCi0JICoKLQkgKiBTZXQgYW55IGlmIGFueSBgZGlnaXRzJyBjb25zdW1lZDsgbWFrZSBpdCBuZWdhdGl2ZSB0byBpbmRpY2F0ZQotCSAqIG92ZXJmbG93LgotCSAqLwotCWN1dG9mZiA9IG5lZyA/IExPTkdfTUlOIDogTE9OR19NQVg7Ci0JY3V0bGltID0gY3V0b2ZmICUgYmFzZTsKLQljdXRvZmYgLz0gYmFzZTsKLQlpZiAobmVnKSB7Ci0JCWlmIChjdXRsaW0gPiAwKSB7Ci0JCQljdXRsaW0gLT0gYmFzZTsKLQkJCWN1dG9mZiArPSAxOwotCQl9Ci0JCWN1dGxpbSA9IC1jdXRsaW07Ci0JfQotCWZvciAoYWNjID0gMCwgYW55ID0gMDs7IGMgPSAodW5zaWduZWQgY2hhcikgKnMrKykgewotCQlpZiAoaXNkaWdpdChjKSkKLQkJCWMgLT0gJzAnOwotCQllbHNlIGlmIChpc2FscGhhKGMpKQotCQkJYyAtPSBpc3VwcGVyKGMpID8gJ0EnIC0gMTAgOiAnYScgLSAxMDsKLQkJZWxzZQotCQkJYnJlYWs7Ci0JCWlmIChjID49IGJhc2UpCi0JCQlicmVhazsKLQkJaWYgKGFueSA8IDApCi0JCQljb250aW51ZTsKLQkJaWYgKG5lZykgewotCQkJaWYgKGFjYyA8IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgewotCQkJCWFueSA9IC0xOwotCQkJCWFjYyA9IExPTkdfTUlOOwotCQkJCWVycm5vID0gRVJBTkdFOwotCQkJfSBlbHNlIHsKLQkJCQlhbnkgPSAxOwotCQkJCWFjYyAqPSBiYXNlOwotCQkJCWFjYyAtPSBjOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKGFjYyA+IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgewotCQkJCWFueSA9IC0xOwotCQkJCWFjYyA9IExPTkdfTUFYOwotCQkJCWVycm5vID0gRVJBTkdFOwotCQkJfSBlbHNlIHsKLQkJCQlhbnkgPSAxOwotCQkJCWFjYyAqPSBiYXNlOwotCQkJCWFjYyArPSBjOwotCQkJfQotCQl9Ci0JfQotCWlmIChlbmRwdHIgIT0gMCkKLQkJKmVuZHB0ciA9IChjaGFyICopIChhbnkgPyBzIC0gMSA6IG5wdHIpOwotCXJldHVybiAoYWNjKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3N0cnRvbGwuYyBiL2xpYmMvc3RkbGliL3N0cnRvbGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M3NTI3MS4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGxpYi9zdHJ0b2xsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKiAkT3BlbkJTRDogc3RydG9sbC5jLHYgMS42IDIwMDUvMTEvMTAgMTA6MDA6MTcgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkyIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLQotLyoKLSAqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBsb25nIGxvbmcuCi0gKgotICogSWdub3JlcyBgbG9jYWxlJyBzdHVmZi4gIEFzc3VtZXMgdGhhdCB0aGUgdXBwZXIgYW5kIGxvd2VyIGNhc2UKLSAqIGFscGhhYmV0cyBhbmQgZGlnaXRzIGFyZSBlYWNoIGNvbnRpZ3VvdXMuCi0gKi8KLWxvbmcgbG9uZwotc3RydG9sbChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKLXsKLSAgICByZXR1cm4gc3RydG9pbWF4KG5wdHIsIGVuZHB0ciwgYmFzZSk7Ci19Ci0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3N0cnRvdWwuYyBiL2xpYmMvc3RkbGliL3N0cnRvdWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFkYmI2Zi4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGxpYi9zdHJ0b3VsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cnRvdWwuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkwIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLS8qCi0gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcgaW50ZWdlci4KLSAqCi0gKiBJZ25vcmVzIGBsb2NhbGUnIHN0dWZmLiAgQXNzdW1lcyB0aGF0IHRoZSB1cHBlciBhbmQgbG93ZXIgY2FzZQotICogYWxwaGFiZXRzIGFuZCBkaWdpdHMgYXJlIGVhY2ggY29udGlndW91cy4KLSAqLwotdW5zaWduZWQgbG9uZwotc3RydG91bChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKLXsKLQljb25zdCBjaGFyICpzOwotCXVuc2lnbmVkIGxvbmcgYWNjLCBjdXRvZmY7Ci0JaW50IGM7Ci0JaW50IG5lZywgYW55LCBjdXRsaW07Ci0KLQkvKgotCSAqIFNlZSBzdHJ0b2wgZm9yIGNvbW1lbnRzIGFzIHRvIHRoZSBsb2dpYyB1c2VkLgotCSAqLwotCXMgPSBucHRyOwotCWRvIHsKLQkJYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrOwotCX0gd2hpbGUgKGlzc3BhY2UoYykpOwotCWlmIChjID09ICctJykgewotCQluZWcgPSAxOwotCQljID0gKnMrKzsKLQl9IGVsc2UgewotCQluZWcgPSAwOwotCQlpZiAoYyA9PSAnKycpCi0JCQljID0gKnMrKzsKLQl9Ci0JaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKLQkgICAgYyA9PSAnMCcgJiYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpKSB7Ci0JCWMgPSBzWzFdOwotCQlzICs9IDI7Ci0JCWJhc2UgPSAxNjsKLQl9Ci0JaWYgKGJhc2UgPT0gMCkKLQkJYmFzZSA9IGMgPT0gJzAnID8gOCA6IDEwOwotCi0JY3V0b2ZmID0gVUxPTkdfTUFYIC8gKHVuc2lnbmVkIGxvbmcpYmFzZTsKLQljdXRsaW0gPSBVTE9OR19NQVggJSAodW5zaWduZWQgbG9uZyliYXNlOwotCWZvciAoYWNjID0gMCwgYW55ID0gMDs7IGMgPSAodW5zaWduZWQgY2hhcikgKnMrKykgewotCQlpZiAoaXNkaWdpdChjKSkKLQkJCWMgLT0gJzAnOwotCQllbHNlIGlmIChpc2FscGhhKGMpKQotCQkJYyAtPSBpc3VwcGVyKGMpID8gJ0EnIC0gMTAgOiAnYScgLSAxMDsKLQkJZWxzZQotCQkJYnJlYWs7Ci0JCWlmIChjID49IGJhc2UpCi0JCQlicmVhazsKLQkJaWYgKGFueSA8IDApCi0JCQljb250aW51ZTsKLQkJaWYgKGFjYyA+IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgewotCQkJYW55ID0gLTE7Ci0JCQlhY2MgPSBVTE9OR19NQVg7Ci0JCQllcnJubyA9IEVSQU5HRTsKLQkJfSBlbHNlIHsKLQkJCWFueSA9IDE7Ci0JCQlhY2MgKj0gKHVuc2lnbmVkIGxvbmcpYmFzZTsKLQkJCWFjYyArPSBjOwotCQl9Ci0JfQotCWlmIChuZWcgJiYgYW55ID4gMCkKLQkJYWNjID0gLWFjYzsKLQlpZiAoZW5kcHRyICE9IDApCi0JCSplbmRwdHIgPSAoY2hhciAqKSAoYW55ID8gcyAtIDEgOiBucHRyKTsKLQlyZXR1cm4gKGFjYyk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zdHJ0b3VsbC5jIGIvbGliYy9zdGRsaWIvc3RydG91bGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY2OThhYy4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGxpYi9zdHJ0b3VsbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cnRvdWxsLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotCi0vKgotICogQ29udmVydCBhIHN0cmluZyB0byBhbiB1bnNpZ25lZCBsb25nIGxvbmcuCi0gKgotICogSWdub3JlcyBgbG9jYWxlJyBzdHVmZi4gIEFzc3VtZXMgdGhhdCB0aGUgdXBwZXIgYW5kIGxvd2VyIGNhc2UKLSAqIGFscGhhYmV0cyBhbmQgZGlnaXRzIGFyZSBlYWNoIGNvbnRpZ3VvdXMuCi0gKi8KLXVuc2lnbmVkIGxvbmcgbG9uZwotc3RydG91bGwoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCi17Ci0gICAgcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpc3RydG91bWF4KG5wdHIsIGVuZHB0ciwgYmFzZSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zdHJ0b3VtYXguYyBiL2xpYmMvc3RkbGliL3N0cnRvdW1heC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWZmNjIzLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL3N0cnRvdW1heC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBzdHJ0b3VtYXguYyx2IDEuMSAyMDA2LzAxLzEzIDE3OjU4OjA5IG1pbGxlcnQgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLQotLyoKLSAqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSB1aW50bWF4X3QuCi0gKgotICogSWdub3JlcyBgbG9jYWxlJyBzdHVmZi4gIEFzc3VtZXMgdGhhdCB0aGUgdXBwZXIgYW5kIGxvd2VyIGNhc2UKLSAqIGFscGhhYmV0cyBhbmQgZGlnaXRzIGFyZSBlYWNoIGNvbnRpZ3VvdXMuCi0gKi8KLXVpbnRtYXhfdAotc3RydG91bWF4KGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQotewotCWNvbnN0IGNoYXIgKnM7Ci0JdWludG1heF90IGFjYywgY3V0b2ZmOwotCWludCBjOwotCWludCBuZWcsIGFueSwgY3V0bGltOwotCi0JLyoKLQkgKiBTZWUgc3RydG9xIGZvciBjb21tZW50cyBhcyB0byB0aGUgbG9naWMgdXNlZC4KLQkgKi8KLQlzID0gbnB0cjsKLQlkbyB7Ci0JCWMgPSAodW5zaWduZWQgY2hhcikgKnMrKzsKLQl9IHdoaWxlIChpc3NwYWNlKGMpKTsKLQlpZiAoYyA9PSAnLScpIHsKLQkJbmVnID0gMTsKLQkJYyA9ICpzKys7Ci0JfSBlbHNlIHsKLQkJbmVnID0gMDsKLQkJaWYgKGMgPT0gJysnKQotCQkJYyA9ICpzKys7Ci0JfQotCWlmICgoYmFzZSA9PSAwIHx8IGJhc2UgPT0gMTYpICYmCi0JICAgIGMgPT0gJzAnICYmICgqcyA9PSAneCcgfHwgKnMgPT0gJ1gnKSkgewotCQljID0gc1sxXTsKLQkJcyArPSAyOwotCQliYXNlID0gMTY7Ci0JfQotCWlmIChiYXNlID09IDApCi0JCWJhc2UgPSBjID09ICcwJyA/IDggOiAxMDsKLQotICAgICAgICAvKiBCSU9OSUM6IGF2b2lkIGRpdmlzaW9uIGFuZCBtb2R1bG8gZm9yIGNvbW1vbiBjYXNlcyAqLwotI2RlZmluZSAgQ0FTRV9CQVNFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGNhc2UgeDogY3V0b2ZmID0gVUlOVE1BWF9NQVggLyB4OyAgICBcCi0JICAgICAgICAgICAgY3V0bGltID0gVUlOVE1BWF9NQVggJSB4OyAgICBcCi0JCSAgICBicmVhawotCi0gICAgICAgIHN3aXRjaCAoYmFzZSkgewotICAgICAgICBDQVNFX0JBU0UoOCk7Ci0JQ0FTRV9CQVNFKDEwKTsKLQlDQVNFX0JBU0UoMTYpOwotCWRlZmF1bHQ6Ci0JICAgIGN1dG9mZiA9IFVJTlRNQVhfTUFYIC8gYmFzZTsKLQkgICAgY3V0bGltID0gVUlOVE1BWF9NQVggJSBiYXNlOwotCX0KLQotCWZvciAoYWNjID0gMCwgYW55ID0gMDs7IGMgPSAodW5zaWduZWQgY2hhcikgKnMrKykgewotCQlpZiAoaXNkaWdpdChjKSkKLQkJCWMgLT0gJzAnOwotCQllbHNlIGlmIChpc2FscGhhKGMpKQotCQkJYyAtPSBpc3VwcGVyKGMpID8gJ0EnIC0gMTAgOiAnYScgLSAxMDsKLQkJZWxzZQotCQkJYnJlYWs7Ci0JCWlmIChjID49IGJhc2UpCi0JCQlicmVhazsKLQkJaWYgKGFueSA8IDApCi0JCQljb250aW51ZTsKLQkJaWYgKGFjYyA+IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgewotCQkJYW55ID0gLTE7Ci0JCQlhY2MgPSBVSU5UTUFYX01BWDsKLQkJCWVycm5vID0gRVJBTkdFOwotCQl9IGVsc2UgewotCQkJYW55ID0gMTsKLQkJCWFjYyAqPSAodWludG1heF90KWJhc2U7Ci0JCQlhY2MgKz0gYzsKLQkJfQotCX0KLQlpZiAobmVnICYmIGFueSA+IDApCi0JCWFjYyA9IC1hY2M7Ci0JaWYgKGVuZHB0ciAhPSAwKQotCQkqZW5kcHRyID0gKGNoYXIgKikgKGFueSA/IHMgLSAxIDogbnB0cik7Ci0JcmV0dXJuIChhY2MpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvaW5kZXguYyBiL2xpYmMvc3RyaW5nL2luZGV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxYmZiYTQuLjAwMDAwMDAKLS0tIGEvbGliYy9zdHJpbmcvaW5kZXguYworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCSRPcGVuQlNEOiBpbmRleC5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLWNoYXIgKgotaW5kZXgoY29uc3QgY2hhciAqcCwgaW50IGNoKQotewotCWZvciAoOzsgKytwKSB7Ci0JCWlmICgqcCA9PSAoY2hhcikgY2gpCi0JCQlyZXR1cm4oKGNoYXIgKilwKTsKLQkJaWYgKCEqcCkKLQkJCXJldHVybigoY2hhciAqKU5VTEwpOwotCX0KLQkvKiBOT1RSRUFDSEVEICovCi19CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9tZW1jbXAxNi5jIGIvbGliYy9zdHJpbmcvbWVtY21wMTYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI2NzcyMi4uMDAwMDAwMAotLS0gYS9saWJjL3N0cmluZy9tZW1jbXAxNi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLUNvcHlyaWdodCAoYykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci1MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLUFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KLS8qIFVub3B0aW1pc2VkIHZlcnNpb24gb2YgX19tZW1jbXAxNiAqLwotaW50IF9fbWVtY21wMTYoY29uc3QgdW5zaWduZWQgc2hvcnQgKnB0cjEsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwdHIyLCBzaXplX3QgbikKLXsKLSAgc2l6ZV90IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIGlmICgqcHRyMSAhPSAqcHRyMikKLSAgICAgIHJldHVybiAqcHRyMSAtICpwdHIyOwotICAgIHB0cjErKzsKLSAgICBwdHIyKys7Ci0gIH0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJjYXQuYyBiL2xpYmMvc3RyaW5nL3N0cmNhdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2VhNTIyLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RyaW5nL3N0cmNhdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cmNhdC5jLHYgMS44IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGxpYi9saWJrZXJuL2xpYmtlcm4uaD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChBUElXQVJOKQotX193YXJuX3JlZmVyZW5jZXMoc3RyY2F0LAotICAgICJ3YXJuaW5nOiBzdHJjYXQoKSBpcyBhbG1vc3QgYWx3YXlzIG1pc3VzZWQsIHBsZWFzZSB1c2Ugc3RybGNhdCgpIik7Ci0jZW5kaWYKLQotY2hhciAqCi1zdHJjYXQoY2hhciAqcywgY29uc3QgY2hhciAqYXBwZW5kKQotewotCWNoYXIgKnNhdmUgPSBzOwotCi0JZm9yICg7ICpzOyArK3MpOwotCXdoaWxlICgoKnMrKyA9ICphcHBlbmQrKykgIT0gJ1wwJyk7Ci0JcmV0dXJuKHNhdmUpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RyY21wLmMgYi9saWJjL3N0cmluZy9zdHJjbXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE2ZmQxMS4uMDAwMDAwMAotLS0gYS9saWJjL3N0cmluZy9zdHJjbXAuYworKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCSRPcGVuQlNEOiBzdHJjbXAuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGxpYi9saWJrZXJuL2xpYmtlcm4uaD4KLSNlbmRpZgotCi0vKgotICogQ29tcGFyZSBzdHJpbmdzLgotICovCi1pbnQKLXN0cmNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCi17Ci0Jd2hpbGUgKCpzMSA9PSAqczIrKykKLQkJaWYgKCpzMSsrID09IDApCi0JCQlyZXR1cm4gKDApOwotCXJldHVybiAoKih1bnNpZ25lZCBjaGFyICopczEgLSAqKHVuc2lnbmVkIGNoYXIgKiktLXMyKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmNweS5jIGIvbGliYy9zdHJpbmcvc3RyY3B5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMjFkNjcuLjAwMDAwMDAKLS0tIGEvbGliYy9zdHJpbmcvc3RyY3B5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgkkT3BlbkJTRDogc3RyY3B5LmMsdiAxLjggMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg4IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotY2hhciAqCi1zdHJjcHkoY2hhciAqdG8sIGNvbnN0IGNoYXIgKmZyb20pCi17Ci0JY2hhciAqc2F2ZSA9IHRvOwotCi0JZm9yICg7ICgqdG8gPSAqZnJvbSkgIT0gJ1wwJzsgKytmcm9tLCArK3RvKTsKLQlyZXR1cm4oc2F2ZSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJsZW4uYyBiL2xpYmMvc3RyaW5nL3N0cmxlbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmQ5ZWM0Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RyaW5nL3N0cmxlbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cmxlbi5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGxpYi9saWJrZXJuL2xpYmtlcm4uaD4KLSNlbmRpZgotCi1zaXplX3QKLXN0cmxlbihjb25zdCBjaGFyICpzdHIpCi17Ci0JY29uc3QgY2hhciAqczsKLQotCWZvciAocyA9IHN0cjsgKnM7ICsrcykKLQkJOwotCXJldHVybiAocyAtIHN0cik7Ci19Ci0KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cm5jbXAuYyBiL2xpYmMvc3RyaW5nL3N0cm5jbXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc2ODgwOC4uMDAwMDAwMAotLS0gYS9saWJjL3N0cmluZy9zdHJuY21wLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgkkT3BlbkJTRDogc3RybmNtcC5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmICFkZWZpbmVkKF9LRVJORUwpICYmICFkZWZpbmVkKF9TVEFOREFMT05FKQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxsaWIvbGlia2Vybi9saWJrZXJuLmg+Ci0jZW5kaWYKLQotaW50Ci1zdHJuY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pCi17Ci0JaWYgKG4gPT0gMCkKLQkJcmV0dXJuICgwKTsKLQlkbyB7Ci0JCWlmICgqczEgIT0gKnMyKyspCi0JCQlyZXR1cm4gKCoodW5zaWduZWQgY2hhciAqKXMxIC0gKih1bnNpZ25lZCBjaGFyICopLS1zMik7Ci0JCWlmICgqczErKyA9PSAwKQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAoLS1uICE9IDApOwotCXJldHVybiAoMCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJuY3B5LmMgYi9saWJjL3N0cmluZy9zdHJuY3B5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MjZjYmUuLjAwMDAwMDAKLS0tIGEvbGliYy9zdHJpbmcvc3RybmNweS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cm5jcHkuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGxpYi9saWJrZXJuL2xpYmtlcm4uaD4KLSNlbmRpZgotCi0vKgotICogQ29weSBzcmMgdG8gZHN0LCB0cnVuY2F0aW5nIG9yIG51bGwtcGFkZGluZyB0byBhbHdheXMgY29weSBuIGJ5dGVzLgotICogUmV0dXJuIGRzdC4KLSAqLwotY2hhciAqCi1zdHJuY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbikKLXsKLQlpZiAobiAhPSAwKSB7Ci0JCWNoYXIgKmQgPSBkc3Q7Ci0JCWNvbnN0IGNoYXIgKnMgPSBzcmM7Ci0KLQkJZG8gewotCQkJaWYgKCgqZCsrID0gKnMrKykgPT0gMCkgewotCQkJCS8qIE5VTCBwYWQgdGhlIHJlbWFpbmluZyBuLTEgYnl0ZXMgKi8KLQkJCQl3aGlsZSAoLS1uICE9IDApCi0JCQkJCSpkKysgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IHdoaWxlICgtLW4gIT0gMCk7Ci0JfQotCXJldHVybiAoZHN0KTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cnJjaHIuYyBiL2xpYmMvc3RyaW5nL3N0cnJjaHIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUyMzA2YS4uMDAwMDAwMAotLS0gYS9saWJjL3N0cmluZy9zdHJyY2hyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgkkT3BlbkJTRDogcmluZGV4LmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLwotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLWNoYXIgKgotc3RycmNocihjb25zdCBjaGFyICpwLCBpbnQgY2gpCi17Ci0JcmV0dXJuIF9fc3RycmNocl9jaGsocCwgY2gsIF9fQklPTklDX0ZPUlRJRllfVU5LTk9XTl9TSVpFKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cnNlcC5jIGIvbGliYy9zdHJpbmcvc3Ryc2VwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NGJjNWIuLjAwMDAwMDAKLS0tIGEvbGliYy9zdHJpbmcvc3Ryc2VwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgkkT3BlbkJTRDogc3Ryc2VwLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJAkqLwotCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0vKgotICogR2V0IG5leHQgdG9rZW4gZnJvbSBzdHJpbmcgKnN0cmluZ3AsIHdoZXJlIHRva2VucyBhcmUgcG9zc2libHktZW1wdHkKLSAqIHN0cmluZ3Mgc2VwYXJhdGVkIGJ5IGNoYXJhY3RlcnMgZnJvbSBkZWxpbS4KLSAqCi0gKiBXcml0ZXMgTlVMcyBpbnRvIHRoZSBzdHJpbmcgYXQgKnN0cmluZ3AgdG8gZW5kIHRva2Vucy4KLSAqIGRlbGltIG5lZWQgbm90IHJlbWFpbiBjb25zdGFudCBmcm9tIGNhbGwgdG8gY2FsbC4KLSAqIE9uIHJldHVybiwgKnN0cmluZ3AgcG9pbnRzIHBhc3QgdGhlIGxhc3QgTlVMIHdyaXR0ZW4gKGlmIHRoZXJlIG1pZ2h0Ci0gKiBiZSBmdXJ0aGVyIHRva2VucyksIG9yIGlzIE5VTEwgKGlmIHRoZXJlIGFyZSBkZWZpbml0ZWx5IG5vIG1vcmUgdG9rZW5zKS4KLSAqCi0gKiBJZiAqc3RyaW5ncCBpcyBOVUxMLCBzdHJzZXAgcmV0dXJucyBOVUxMLgotICovCi1jaGFyICoKLXN0cnNlcChjaGFyICoqc3RyaW5ncCwgY29uc3QgY2hhciAqZGVsaW0pCi17Ci0JY2hhciAqczsKLQljb25zdCBjaGFyICpzcGFucDsKLQlpbnQgYywgc2M7Ci0JY2hhciAqdG9rOwotCi0JaWYgKChzID0gKnN0cmluZ3ApID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0JZm9yICh0b2sgPSBzOzspIHsKLQkJYyA9ICpzKys7Ci0JCXNwYW5wID0gZGVsaW07Ci0JCWRvIHsKLQkJCWlmICgoc2MgPSAqc3BhbnArKykgPT0gYykgewotCQkJCWlmIChjID09IDApCi0JCQkJCXMgPSBOVUxMOwotCQkJCWVsc2UKLQkJCQkJc1stMV0gPSAwOwotCQkJCSpzdHJpbmdwID0gczsKLQkJCQlyZXR1cm4gKHRvayk7Ci0JCQl9Ci0JCX0gd2hpbGUgKHNjICE9IDApOwotCX0KLQkvKiBOT1RSRUFDSEVEICovCi19CmRpZmYgLS1naXQgYS9saWJjL3Rvb2xzL2Jpb25pY191dGlscy5weSBiL2xpYmMvdG9vbHMvYmlvbmljX3V0aWxzLnB5CmluZGV4IDg4ZGRkNTUuLmMzOGVmYjUgMTAwNjQ0Ci0tLSBhL2xpYmMvdG9vbHMvYmlvbmljX3V0aWxzLnB5CisrKyBiL2xpYmMvdG9vbHMvYmlvbmljX3V0aWxzLnB5CkBAIC0yLDcgKzIsNyBAQAogCiBpbXBvcnQgc3lzLCBvcywgY29tbWFuZHMsIHN0cmluZwogCi1hbGxfYXJjaGVzID0gWyAiYXJtIiwgImFybTY0IiwgIm1pcHMiLCAieDg2IiwgIng4Nl82NCIgXQorYWxsX2FyY2hlcyA9IFsgImFybSIsICJhcm02NCIsICJtaXBzIiwgIm1pcHM2NCIsICJ4ODYiLCAieDg2XzY0IiBdCiAKICMgYmFzaWMgZGVidWdnaW5nIHRyYWNlIHN1cHBvcnQKICMgY2FsbCBEX3NldGxldmVsIHRvIHNldCB0aGUgdmVyYm9zaXR5IGxldmVsCkBAIC0xMzAsNyArMTMwLDcgQEAKICAgICAgICAgICAgICAgICBpZiBhcmNoIGluIGFsbF9hcmNoZXM6CiAgICAgICAgICAgICAgICAgICAgIHRbYXJjaF0gPSBUcnVlCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgRSgiaW52YWxpZCBzeXNjYWxsIGFyY2hpdGVjdHVyZSBsaXN0IGluICclcyciICUgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgRSgiaW52YWxpZCBzeXNjYWxsIGFyY2hpdGVjdHVyZSAnJXMnIGluICclcyciICUgKGFyY2gsIGxpbmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBzZWxmLnN5c2NhbGxzLmFwcGVuZCh0KQpkaWZmIC0tZ2l0IGEvbGliYy90b29scy9jaGVjay1zeW1ib2xzLWdsaWJjLnB5IGIvbGliYy90b29scy9jaGVjay1zeW1ib2xzLWdsaWJjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4YTEwZTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Rvb2xzL2NoZWNrLXN5bWJvbHMtZ2xpYmMucHkKQEAgLTAsMCArMSwxNTMgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKK2ltcG9ydCBnbG9iCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKwordG9vbGNoYWluID0gb3MuZW52aXJvblsnQU5EUk9JRF9UT09MQ0hBSU4nXQorYXJjaCA9IHJlLnN1YihyJy4qL2xpbnV4LXg4Ni8oW14vXSspLy4qJywgcidcMScsIHRvb2xjaGFpbikKKworZGVmIEdldFN5bWJvbHNGcm9tU28oc29fZmlsZSk6CisgICMgRXhhbXBsZSByZWFkZWxmIG91dHB1dDoKKyAgIyAgIDI2NDogMDAwMTYyM2MgICAgIDQgRlVOQyAgICBHTE9CQUwgREVGQVVMVCAgICA4IGNhYnNmCisgICMgICAyNjY6IDAwMDE2MjQ0ICAgICA0IEZVTkMgICAgR0xPQkFMIERFRkFVTFQgICAgOCBkcmVtZgorICAjICAgMjY3OiAwMDAxOTAxOCAgICAgNCBPQkpFQ1QgIEdMT0JBTCBERUZBVUxUICAgMTEgX19mZV9kZmxfZW52CisgICMgICAyNjg6IDAwMDAwMDAwICAgICAwIEZVTkMgICAgR0xPQkFMIERFRkFVTFQgIFVORCBfX2FlYWJpX2RjbXBsdAorCisgIHIgPSByZS5jb21waWxlKHInICtcZCs6IFswLTlhLWZdKyArXGQrIChJP0ZVTkN8T0JKRUNUKSArXFMrICtcUysgK1xkKyAoXFMrKScpCisKKyAgc3ltYm9scyA9IHNldCgpCisKKyAgZm9yIGxpbmUgaW4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWydyZWFkZWxmJywgJy0tZHluLXN5bXMnLCAnLVcnLCBzb19maWxlXSkuc3BsaXQoJ1xuJyk6CisgICAgaWYgJyBISURERU4gJyBpbiBsaW5lIG9yICcgVU5EICcgaW4gbGluZToKKyAgICAgIGNvbnRpbnVlCisgICAgbSA9IHIubWF0Y2gobGluZSkKKyAgICBpZiBtOgorICAgICAgc3ltYm9sID0gbS5ncm91cCgyKQorICAgICAgc3ltYm9sID0gcmUuc3ViKCdALionLCAnJywgc3ltYm9sKQorICAgICAgc3ltYm9scy5hZGQoc3ltYm9sKQorCisgIHJldHVybiBzeW1ib2xzCisKK2RlZiBHZXRTeW1ib2xzRnJvbUFuZHJvaWRTbygqZmlsZXMpOgorICBzeW1ib2xzID0gc2V0KCkKKyAgZm9yIGYgaW4gZmlsZXM6CisgICAgc3ltYm9scyA9IHN5bWJvbHMgfCBHZXRTeW1ib2xzRnJvbVNvKCclcy9zeXN0ZW0vbGliNjQvJXMnICUgKG9zLmVudmlyb25bJ0FORFJPSURfUFJPRFVDVF9PVVQnXSwgZikpCisgIHJldHVybiBzeW1ib2xzCisKK2RlZiBHZXRTeW1ib2xzRnJvbVN5c3RlbVNvKCpmaWxlcyk6CisgIHN5bWJvbHMgPSBzZXQoKQorICBmb3IgZiBpbiBmaWxlczoKKyAgICBmID0gZ2xvYi5nbG9iKCcvbGliL3g4Nl82NC1saW51eC1nbnUvJXMnICUgZilbLTFdCisgICAgc3ltYm9scyA9IHN5bWJvbHMgfCBHZXRTeW1ib2xzRnJvbVNvKGYpCisgIHJldHVybiBzeW1ib2xzCisKK2RlZiBNYW5nbGVHbGliY05hbWVUb0Jpb25pYyhuYW1lKToKKyAgaWYgbmFtZSBpbiBnbGliY190b19iaW9uaWNfbmFtZXM6CisgICAgcmV0dXJuIGdsaWJjX3RvX2Jpb25pY19uYW1lc1tuYW1lXQorICByZXR1cm4gbmFtZQorCitnbGliY190b19iaW9uaWNfbmFtZXMgPSB7CisgICdfX3Jlc19pbml0JzogJ3Jlc19pbml0JywKKyAgJ19fcmVzX21rcXVlcnknOiAncmVzX21rcXVlcnknLAorICAnX19yZXNfcXVlcnknOiAncmVzX3F1ZXJ5JywKKyAgJ19fcmVzX3NlYXJjaCc6ICdyZXNfc2VhcmNoJywKK30KKworZ2xpYmMgPSBHZXRTeW1ib2xzRnJvbVN5c3RlbVNvKCdsaWJjLnNvLionLCAnbGlicnQuc28uKicsICdsaWJwdGhyZWFkLnNvLionLCAnbGlicmVzb2x2LnNvLionLCAnbGlibS5zby4qJykKK2Jpb25pYyA9IEdldFN5bWJvbHNGcm9tQW5kcm9pZFNvKCdsaWJjLnNvJywgJ2xpYm0uc28nKQorCitnbGliYyA9IG1hcChNYW5nbGVHbGliY05hbWVUb0Jpb25pYywgZ2xpYmMpCisKKyMgYmlvbmljIGluY2x1ZGVzIHZhcmlvdXMgQlNEIHN5bWJvbHMgdG8gZWFzZSBwb3J0aW5nIG90aGVyIEJTRC1saWNlbnNlZCBjb2RlLgorYnNkX3N0dWZmID0gc2V0KFsKKyAgJ2Jhc2VuYW1lX3InLAorICAnZGlybmFtZV9yJywKKyAgJ2ZnZXRsbicsCisgICdmcHVyZ2UnLAorICAnZnVub3BlbicsCisgICdnYW1tYV9yJywKKyAgJ2dhbW1hZl9yJywKKyAgJ2dldHByb2duYW1lJywKKyAgJ3NldHByb2duYW1lJywKKyAgJ3N0cmxjYXQnLAorICAnc3RybGNweScsCisgICdzeXNfc2lnbmFtZScsCisgICd3Y3NsY2F0JywKKyAgJ3djc2xjcHknCitdKQorIyBTb21lIHN5bWJvbHMgYXJlIHBhcnQgb2YgdGhlIEZPUlRJRlkgaW1wbGVtZW50YXRpb24uCitGT1JUSUZZX3N0dWZmID0gc2V0KFsKKyAgJ19fRkRfQ0xSX2NoaycsCisgICdfX0ZEX0lTU0VUX2NoaycsCisgICdfX0ZEX1NFVF9jaGsnLAorICAnX19zdGFja19jaGtfZ3VhcmQnLAorICAnX19zdHBuY3B5X2NoazInLAorICAnX19zdHJjaHJfY2hrJywKKyAgJ19fc3RybGNhdF9jaGsnLAorICAnX19zdHJsY3B5X2NoaycsCisgICdfX3N0cmxlbl9jaGsnLAorICAnX19zdHJuY3B5X2NoazInLAorICAnX19zdHJyY2hyX2NoaycsCisgICdfX3VtYXNrX2NoaycKK10pCisjIFNvbWUgc3ltYm9scyBhcmUgdXNlZCB0byBpbXBsZW1lbnQgcHVibGljIG1hY3Jvcy4KK21hY3JvX3N0dWZmID0gc2V0KFsKKyAgJ19fYXNzZXJ0MicsCisgICdfX2Vycm5vJywKKyAgJ19fZmVfZGZsX2VudicsCisgICdfX2dldF9oX2Vycm5vJywKK10pCisjIGJpb25pYyBleHBvc2VzIHZhcmlvdXMgTGludXggZmVhdHVyZXMgdGhhdCBnbGliYyBkb2Vzbid0LgorbGludXhfc3R1ZmYgPSBzZXQoWworICAnZ2V0YXV4dmFsJywKKyAgJ2dldHRpZCcsCisgICd0Z2tpbGwnCitdKQorIyBTb21lIHN0YW5kYXJkIHN0dWZmIGlzbid0IHlldCBpbiB0aGUgdmVyc2lvbnMgb2YgZ2xpYmMgd2UncmUgdXNpbmcuCitzdGRfc3R1ZmYgPSBzZXQoWworICAnYXRfcXVpY2tfZXhpdCcsCisgICdjMTZydG9tYicsCisgICdjMzJydG9tYicsCisgICdtYnJ0b2MxNicsCisgICdtYnJ0b2MzMicsCitdKQorIyBUaGVzZSBoYXZlIG1hbmdsZWQgbmFtZXMgaW4gZ2xpYmMsIHdpdGggYSBtYWNybyB0YWtpbmcgdGhlICJvYnZpb3VzIiBuYW1lLgord2VpcmRfc3R1ZmYgPSBzZXQoWworICAnZnN0YXQnLAorICAnZnN0YXQ2NCcsCisgICdmc3RhdGF0JywKKyAgJ2ZzdGF0YXQ2NCcsCisgICdpc2Zpbml0ZScsCisgICdpc2Zpbml0ZWYnLAorICAnaXNmaW5pdGVsJywKKyAgJ2lzbm9ybWFsJywKKyAgJ2lzbm9ybWFsZicsCisgICdpc25vcm1hbGwnLAorICAnbHN0YXQnLAorICAnbHN0YXQ2NCcsCisgICdta25vZCcsCisgICdta25vZGF0JywKKyAgJ3N0YXQnLAorICAnc3RhdDY0JywKK10pCisKK3ByaW50ICdnbGliYzonCitmb3Igc3ltYm9sIGluIHNvcnRlZChnbGliYyk6CisgIHByaW50IHN5bWJvbAorCitwcmludAorcHJpbnQgJ2Jpb25pYzonCitmb3Igc3ltYm9sIGluIHNvcnRlZChiaW9uaWMpOgorICBwcmludCBzeW1ib2wKKworcHJpbnQKK3ByaW50ICdpbiBiaW9uaWMgYnV0IG5vdCBnbGliYzonCithbGxvd2VkX3N0dWZmID0gKGJzZF9zdHVmZiB8IEZPUlRJRllfc3R1ZmYgfCBsaW51eF9zdHVmZiB8IG1hY3JvX3N0dWZmIHwgc3RkX3N0dWZmIHwgd2VpcmRfc3R1ZmYpCitmb3Igc3ltYm9sIGluIHNvcnRlZCgoYmlvbmljIC0gYWxsb3dlZF9zdHVmZikuZGlmZmVyZW5jZShnbGliYykpOgorICBwcmludCBzeW1ib2wKKworc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL2xpYmMvdG9vbHMvZ2VuZXJhdGUtTk9USUNFLnB5IGIvbGliYy90b29scy9nZW5lcmF0ZS1OT1RJQ0UucHkKaW5kZXggNTExNTMxNy4uOGNkNzVhMyAxMDA3NTUKLS0tIGEvbGliYy90b29scy9nZW5lcmF0ZS1OT1RJQ0UucHkKKysrIGIvbGliYy90b29scy9nZW5lcmF0ZS1OT1RJQ0UucHkKQEAgLTI1LDcgKzI1LDcgQEAKICAgICByZXR1cm4gRmFsc2UKIAogZGVmIElzQXV0b0dlbmVyYXRlZChjb250ZW50KToKLSAgICBpZiAiZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5IiBpbiBjb250ZW50IG9yICJnZW5lcmF0ZWQgYnkgZ2Vuc2Vydi5weSIgaW4gY29udGVudDoKKyAgICBpZiAiR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5IiBpbiBjb250ZW50IG9yICJnZW5lcmF0ZWQgYnkgZ2Vuc2Vydi5weSIgaW4gY29udGVudDoKICAgICAgICAgcmV0dXJuIFRydWUKICAgICBpZiAiVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyIiBpbiBjb250ZW50OgogICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtNTUsMTAgKzU1LDEzIEBACiAgICAgICAgICAgICBicmVhawogICAgICAgICBpZiAiXHRjaXRydXMgSWQ6ICIgaW4gbGluZXNbaV06CiAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiAiXHQkT3BlbkJTRDogIiBpbiBsaW5lc1tpXSBvciAiICRGcmVlQlNEOiAiIGluIGxpbmVzW2ldIG9yICJcdCROZXRCU0Q6ICIgaW4gbGluZXNbaV06CisgICAgICAgIGlmICJcdCRDaXRydXM6ICIgaW4gbGluZXNbaV0gb3IgIlx0JE9wZW5CU0Q6ICIgaW4gbGluZXNbaV0gb3IgIiAkRnJlZUJTRDogIiBpbiBsaW5lc1tpXSBvciAiXHQkTmV0QlNEOiAiIGluIGxpbmVzW2ldOgogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgaWYgIiRGcmVlQlNEJCIgaW4gbGluZXNbaV0gb3IgIiRDaXRydXMkIiBpbiBsaW5lc1tpXToKICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICMgT3BlbkJTRCBsaWtlcyB0byBzYXkgd2hlcmUgc3R1ZmYgb3JpZ2luYWxseSBjYW1lIGZyb206CisgICAgICAgIGlmICJPcmlnaW5hbCB2ZXJzaW9uIElEOiIgaW4gbGluZXNbaV06CisgICAgICAgICAgICBicmVhawogICAgICAgICBpICs9IDEKIAogICAgIGVuZCA9IGkKQEAgLTc0LDcgKzc3LDcgQEAKICAgICBmb3IgbGluZSBpbiBsaW5lc1tzdGFydDplbmRdOgogICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCJcdCIsICIgICAgIikKICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiLyogIiwgIiIpCi0gICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIiAqICIsICIiKQorICAgICAgICBsaW5lID0gcmUuc3ViKCJeIFwqICIsICIiLCBsaW5lKQogICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCIqKiAiLCAiIikKICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiIyAiLCAiIikKICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIrK0NvcHlyaWdodCsrIik6CkBAIC0xNDEsNyArMTQ0LDcgQEAKIAogICAgICAgICAgICAgaSA9IDAKICAgICAgICAgICAgIHdoaWxlIGkgPCBsZW4obGluZXMpOgotICAgICAgICAgICAgICAgIGlmICJDb3B5cmlnaHQiIGluIGxpbmVzW2ldOgorICAgICAgICAgICAgICAgIGlmICJDb3B5cmlnaHQiIGluIGxpbmVzW2ldIGFuZCBub3QgIkAoIykgQ29weXJpZ2h0IiBpbiBsaW5lc1tpXToKICAgICAgICAgICAgICAgICAgICAgaSA9IEV4dHJhY3RDb3B5cmlnaHRBdChsaW5lcywgaSkKICAgICAgICAgICAgICAgICBpICs9IDEKIApkaWZmIC0tZ2l0IGEvbGliYy90b29scy9nZW5saWJnY2NfY29tcGF0LnB5IGIvbGliYy90b29scy9nZW5saWJnY2NfY29tcGF0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyOGJmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Rvb2xzL2dlbmxpYmdjY19jb21wYXQucHkKQEAgLTAsMCArMSwxMzYgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKycnJworLyogVGhpcyBmaWxlIGdlbmVyYXRlcyBsaWJnY2NfY29tcGF0LmMgZmlsZSB0aGF0IGNvbnRhaW5zIGR1bW15CisgKiByZWZlcmVuY2VzIHRvIGxpYmdjYy5hIGZ1bmN0aW9ucyB0byBmb3JjZSB0aGUgZHluYW1pYyBsaW5rZXIKKyAqIHRvIGNvcHkgdGhlaXIgZGVmaW5pdGlvbiBpbnRvIHRoZSBmaW5hbCBsaWJjLnNvIGJpbmFyeS4KKyAqCisgKiBUaGV5IGFyZSByZXF1aXJlZCB0byBlbnN1cmUgYmFja3dhcmRzIGJpbmFyeSBjb21wYXRpYmlsaXR5IHdpdGgKKyAqIGxpYmMuc28gcHJvdmlkZWQgYnkgdGhlIHBsYXRmb3JtIGFuZCBiaW5hcmllcyBidWlsdCB3aXRoIHRoZSBOREsgb3IKKyAqIGRpZmZlcmVudCB2ZXJzaW9ucy9jb25maWd1cmF0aW9ucyBvZiB0b29sY2hhaW5zLgorICoKKyAqIE5vdywgZm9yIGEgbW9yZSBlbGFib3JhdGUgZGVzY3JpcHRpb24gb2YgdGhlIGlzc3VlOgorICoKKyAqIGxpYmdjYy5hIGlzIGEgY29tcGlsZXItc3BlY2lmaWMgbGlicmFyeSBjb250YWluaW5nIHZhcmlvdXMgaGVscGVyCisgKiBmdW5jdGlvbnMgdXNlZCB0byBpbXBsZW1lbnQgY2VydGFpbiBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBuZWNlc3NhcmlseQorICogc3VwcG9ydGVkIGJ5IHRoZSB0YXJnZXQgQ1BVLiBGb3IgZXhhbXBsZSwgaW50ZWdlciBkaXZpc2lvbiBkb2Vzbid0IGhhdmUgYQorICogY29ycmVzcG9uZGluZyBDUFUgaW5zdHJ1Y3Rpb24gb24gQVJNdjUsIGFuZCBpcyBpbnN0ZWFkIGltcGxlbWVudGVkIGluIHRoZQorICogY29tcGlsZXItZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSBhcyBhIGNhbGwgdG8gYW4gX19pZGl2IGhlbHBlciBmdW5jdGlvbi4KKyAqCisgKiBOb3JtYWxseSwgb25lIGhhcyB0byBwbGFjZSBsaWJnY2MuYSBpbiB0aGUgbGluayBjb21tYW5kIHVzZWQgdG8gZ2VuZXJhdGUKKyAqIHRhcmdldCBiaW5hcmllcyAoc2hhcmVkIGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMpIGFmdGVyIGFsbCBvYmplY3RzIGFuZAorICogc3RhdGljIGxpYnJhcmllcywgYnV0IGJlZm9yZSBkZXBlbmRlbnQgc2hhcmVkIGxpYnJhcmllcywgaS5lLiBzb21ldGhpbmcKKyAqIGxpa2U6CisgKiAgICAgICAgIGdjYyA8b3B0aW9ucz4gLW8gbGliZm9vLnNvICBmb28uYSBsaWJnY2MuYSAtbGMgLWxtCisgKgorICogVGhpcyBlbnN1cmVzIHRoYXQgYW55IGhlbHBlciBmdW5jdGlvbiBuZWVkZWQgYnkgdGhlIGNvZGUgaW4gZm9vLmEgaXMgY29waWVkCisgKiBpbnRvIHRoZSBmaW5hbCBsaWJmb28uc28uIEhvd2V2ZXIsIGRvaW5nIHNvIHdpbGwgbGluayBhIGJ1bmNoIG9mIG90aGVyIF9fY3hhCisgKiBmdW5jdGlvbnMgZnJvbSBsaWJnY2MuYSBpbnRvIGVhY2ggLnNvIGFuZCBleGVjdXRhYmxlLCBjYXVzaW5nIDRrKyBpbmNyZWFzZQorICogaW4gZXZlcnkgYmluYXJ5LiBUaGVyZWZvcmUgdGhlIEFuZHJvaWQgcGxhdGZvcm0gYnVpbGQgc3lzdGVtIGhhcyBiZWVuCisgKiB1c2luZyB0aGlzIGluc3RlYWQ6CisgKgorICogICAgICAgICBnY2MgPG9wdGlvbnM+IC1vIGxpYmZvby5zbyBmb28uYSAtbGMgLWxtIGxpYmdjYy5hCisgKgorICogVGhlIHByb2JsZW0gd2l0aCB0aGlzIGlzIHRoYXQgaWYgb25lIGhlbHBlciBmdW5jdGlvbiBuZWVkZWQgYnkgZm9vLmEgaGFzCisgKiBhbHJlYWR5IGJlZW4gY29waWVkIGludG8gbGliYy5zbyBvciBsaWJtLnNvLCB0aGVuIG5vdGhpbmcgd2lsbCBiZSBjb3BpZWQKKyAqIGludG8gbGliZm9vLnNvLiBJbnN0ZWFkLCBhIHN5bWJvbCBpbXBvcnQgZGVmaW5pdGlvbiB3aWxsIGJlIGFkZGVkIHRvIGl0CisgKiBzbyBsaWJmb28uc28gY2FuIGRpcmVjdGx5IGNhbGwgdGhlIG9uZSBpbiBsaWJjLnNvIGF0IHJ1bnRpbWUuCisgKgorICogV2hlbiByZWZyZXNoaW5nIHRvb2xjaGFpbnMgZm9yIG5ldyB2ZXJzaW9ucyBvciB1c2luZyBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlCisgKiBmbGFncywgdGhlIHNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIGNvcGllZCB0byBsaWJjLnNvIG1heSBjaGFuZ2UsIHdoaWNoCisgKiByZXN1bHRlZCBpbiBzb21lIG5hdGl2ZSBzaGFyZWQgbGlicmFyaWVzIGdlbmVyYXRlZCB3aXRoIHRoZSBOREsgb3IgcHJlYnVpbHRzCisgKiBmcm9tIHZlbmRvcnMgdG8gZmFpbCB0byBsb2FkIHByb3Blcmx5LgorICoKKyAqIFRoZSBOREsgaGFzIGJlZW4gZml4ZWQgYWZ0ZXIgMS42X3IxIHRvIHVzZSB0aGUgY29ycmVjdCBsaW5rIGNvbW1hbmQsIHNvCisgKiBhbnkgbmF0aXZlIHNoYXJlZCBsaWJyYXJ5IGdlbmVyYXRlZCB3aXRoIGl0IHNob3VsZCBub3cgYmUgc2FmZSBmcm9tIHRoYXQKKyAqIHByb2JsZW0uIE9uIHRoZSBvdGhlciBoYW5kLCBleGlzdGluZyBzaGFyZWQgbGlicmFyaWVzIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIGFwcGxpY2F0aW9ucyB0aGF0IHdlcmUgZ2VuZXJhdGVkIHdpdGggYSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBOREsKKyAqIHN0aWxsIG5lZWQgYWxsIDEuNS8xLjYgaGVscGVyIGZ1bmN0aW9ucyBpbiBsaWJjLnNvIGFuZCBsaWJtLnNvCisgKgorICogQWZ0ZXIgMy4yLCB0aGUgdG9vbGNoYWluIHdhcyB1cGRhdGVkIGFnYWluLCBhZGRpbmcgX19hZWFiaV9mMnVpeiB0byB0aGUKKyAqIGxpc3Qgb2YgcmVxdWlyZW1lbnRzLiBUZWNobmljYWxseSwgdGhpcyBpcyBkdWUgdG8gbWlzLWxpbmtlZCBOREsgbGlicmFyaWVzCisgKiBidXQgaXQgaXMgZWFzaWVyIHRvIGFkZCBhIHNpbmdsZSBmdW5jdGlvbiBoZXJlIHRoYW4gYXNraW5nIHNldmVyYWwgYXBwCisgKiBkZXZlbG9wZXJzIHRvIGZpeCB0aGVpciBidWlsZC4KKyAqCisgKiBUaGUgX19hZWFiaV9pZGl2IGZ1bmN0aW9uIGlzIGFkZGVkIHRvIHRoZSBsaXN0IHNpbmNlIGNvcnRleC1hMTUgc3VwcG9ydHMKKyAqIEhXIGlkaXYgaW5zdHJ1Y3Rpb25zIHNvIHRoZSBzeXN0ZW0gbGliYy5zbyBkb2Vzbid0IHB1bGwgaW4gdGhlIHJlZmVyZW5jZSB0bworICogX19hZWFiaV9pZGl2IGJ1dCBsZWdhY3kgbGlicmFyaWVzIGJ1aWx0IGFnYWluc3QgY29ydGV4LWE5IHRhcmdldHMgc3RpbGwgbmVlZAorICogaXQuCisgKgorICogRmluYWwgbm90ZTogc29tZSBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IHNob3VsZCByZWFsbHkgYmUgaW4gbGlibS5zbyB0bworICogICAgICAgICAgICAgY29tcGxldGVseSByZWZsZWN0IHRoZSBzdGF0ZSBvZiAxLjUvMS42IHN5c3RlbSBpbWFnZXMuIEhvd2V2ZXIsCisgKiAgICAgICAgICAgICBzaW5jZSBsaWJtLnNvIGRlcGVuZHMgb24gbGliYy5zbywgaXQncyBlYXNpZXIgdG8gcHV0IGFsbCBvZgorICogICAgICAgICAgICAgdGhlc2UgaW4gbGliYy5zbyBpbnN0ZWFkLCBzaW5jZSB0aGUgZHluYW1pYyBsaW5rZXIgd2lsbCBhbHdheXMKKyAqICAgICAgICAgICAgIHNlYXJjaCBpbiBsaWJjLnNvIGJlZm9yZSBsaWJtLnNvIGZvciBkZXBlbmRlbmNpZXMuCisgKi8KKycnJworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCByZQorCitsaWJnY2NfY29tcGF0X2hlYWRlciA9ICIvKiBHZW5lcmF0ZWQgYnkgZ2VubGliZ2NjX2NvbXBhdC5weSAqL1xuXG4iCisKK2NsYXNzIEdlbmVyYXRvcjoKKyAgICBkZWYgcHJvY2VzcyhzZWxmKToKKyAgICAgICAgYW5kcm9pZF9idWlsZF90b3BfcGF0aCA9IG9zLmVudmlyb25bIkFORFJPSURfQlVJTERfVE9QIl0KKworICAgICAgICBwcmludCAiKiBBTkRST0lEX0JVSUxEX1RPUD0iICsgYW5kcm9pZF9idWlsZF90b3BfcGF0aAorCisgICAgICAgICMgQ2hlY2sgVEFSR0VUX0FSQ0gKKyAgICAgICAgYXJjaCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiQ0FMTEVEX0ZST01fU0VUVVA9dHJ1ZSBCVUlMRF9TWVNURU09YnVpbGQvY29yZSBtYWtlIC0tbm8tcHJpbnQtZGlyZWN0b3J5IC1mIGJ1aWxkL2NvcmUvY29uZmlnLm1rIGR1bXB2YXItVEFSR0VUX0FSQ0giXSwKKyAgICAgICAgICAgICAgICAgICAgY3dkPWFuZHJvaWRfYnVpbGRfdG9wX3BhdGgsIHNoZWxsPVRydWUpLnN0cmlwKCkKKworICAgICAgICBpZiBhcmNoICE9ICdhcm0nIGFuZCBhcmNoICE9ICd4ODYnOgorICAgICAgICAgICAgc3lzLmV4aXQoIkVycm9yOiBJbnZhbGlkIFRBUkdFVF9BUkNIPSciICsgYXJjaCArICInIGV4cGVjdGluZyAnYXJtJyBvciAneDg2JyIpCisKKyAgICAgICAgYnVpbGRfcGF0aCA9ICBhbmRyb2lkX2J1aWxkX3RvcF9wYXRoICsgIi9iaW9uaWMvbGliYyIKKyAgICAgICAgZmlsZV9uYW1lID0gImxpYmdjY19jb21wYXQuYyIKKyAgICAgICAgZmlsZV9wYXRoID0gYnVpbGRfcGF0aCArICIvYXJjaC0iICsgYXJjaCArICIvYmlvbmljLyIgKyBmaWxlX25hbWUKKworICAgICAgICBidWlsZF9vdXRwdXRfZmlsZV9wYXRoID0gdGVtcGZpbGUubWtzdGVtcCgpWzFdCisKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJPTkVfU0hPVF9NQUtFRklMRT1iaW9uaWMvbGliYy9BbmRyb2lkLm1rIG1ha2UgLUMgIiArIGFuZHJvaWRfYnVpbGRfdG9wX3BhdGgKKyAgICAgICAgICAgICAgICAgICAgKyAiIC1mIGJ1aWxkL2NvcmUvbWFpbi5tayBhbGxfbW9kdWxlcyBUQVJHRVRfTElCR0NDPSAtajIwIC1CIDI+JjEgfCB0ZWUgIiArIGJ1aWxkX291dHB1dF9maWxlX3BhdGhdLAorICAgICAgICAgICAgICAgICAgICBjd2Q9YnVpbGRfcGF0aCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgcC53YWl0KCkKKworICAgICAgICBwcmludCAiKiBCdWlsZCBjb21wbGV0ZSwgbG9nZmlsZTogIiArIGJ1aWxkX291dHB1dF9maWxlX3BhdGgKKworICAgICAgICBzeW1ib2xfc2V0ID0gc2V0KCkKKyAgICAgICAgcHJvZz1yZS5jb21waWxlKCIoPzw9dW5kZWZpbmVkIHJlZmVyZW5jZSB0byAnKVx3KyIpCisgICAgICAgIGZkID0gb3BlbihidWlsZF9vdXRwdXRfZmlsZV9wYXRoLCAncicpCisgICAgICAgIGZvciBsaW5lIGluIGZkOgorICAgICAgICAgICAgbSA9IHByb2cuc2VhcmNoKGxpbmUpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHN5bWJvbF9zZXQuYWRkKG0uZ3JvdXAoMCkpCisKKyAgICAgICAgZmQuY2xvc2UoKQorCisgICAgICAgIHN5bWJvbF9saXN0ID0gc29ydGVkKHN5bWJvbF9zZXQpCisKKyAgICAgICAgcHJpbnQgIiogRm91bmQgIiArIHJlcHIobGVuKHN5bWJvbF9saXN0KSkgKyAiIHJlZmVyZW5jZWQgc3ltYm9sczogIiArIHJlcHIoc3ltYm9sX2xpc3QpCisKKyAgICAgICAgaWYgMCA9PSBsZW4oc3ltYm9sX2xpc3QpOgorICAgICAgICAgICAgc3lzLmV4aXQoIkVycm9yOiBzeW1ib2wgbGlzdCBpcyBlbXB0eSwgcGxlYXNlIGNoZWNrIHRoZSBidWlsZCBsb2c6ICIgKyBidWlsZF9vdXRwdXRfZmlsZV9wYXRoKQorCisgICAgICAgIHByaW50ICIqIEdlbmVyYXRpbmcgIiArIGZpbGVfcGF0aAorICAgICAgICBmcmVzID0gb3BlbihmaWxlX3BhdGgsICd3JykKKyAgICAgICAgZnJlcy53cml0ZShsaWJnY2NfY29tcGF0X2hlYWRlcikKKworICAgICAgICBmb3Igc3ltX25hbWUgaW4gc3ltYm9sX2xpc3Q6CisgICAgICAgICAgICBmcmVzLndyaXRlKCJleHRlcm4gY2hhciAiK3N5bV9uYW1lKyI7XG4iKQorICAgICAgICBmcmVzLndyaXRlKCJcbiIpOworCisgICAgICAgIGZyZXMud3JpdGUoInZvaWQqIF9fYmlvbmljX2xpYmdjY19jb21wYXRfc3ltYm9sc1tdID0ge1xuIik7CisgICAgICAgIGZvciBzeW1fbmFtZSBpbiBzeW1ib2xfbGlzdDoKKyAgICAgICAgICAgIGZyZXMud3JpdGUoIiAgICAmIitzeW1fbmFtZSsiLFxuIikKKyAgICAgICAgZnJlcy53cml0ZSgifTtcbiIpOworCisgICAgICAgIGZyZXMuY2xvc2UoKQorCitnZW5lcmF0b3IgPSBHZW5lcmF0b3IoKQorZ2VuZXJhdG9yLnByb2Nlc3MoKQorCmRpZmYgLS1naXQgYS9saWJjL3Rvb2xzL2dlbnN5c2NhbGxzLnB5IGIvbGliYy90b29scy9nZW5zeXNjYWxscy5weQppbmRleCA5N2RjNjI4Li5lOGVjNjM2IDEwMDc1NQotLS0gYS9saWJjL3Rvb2xzL2dlbnN5c2NhbGxzLnB5CisrKyBiL2xpYmMvdG9vbHMvZ2Vuc3lzY2FsbHMucHkKQEAgLTQ4LDggKzQ4LDggQEAKIAogCiBmdW5jdGlvbl9hbGlhcyA9ICIiIgotICAgIC5nbG9ibCBfQ19MQUJFTCglKGFsaWFzKXMpCi0gICAgLmVxdSBfQ19MQUJFTCglKGFsaWFzKXMpLCBfQ19MQUJFTCglKGZ1bmMpcykKKyAgICAuZ2xvYmwgJShhbGlhcylzCisgICAgLmVxdSAlKGFsaWFzKXMsICUoZnVuYylzCiAiIiIKIAogCkBAIC02NSwxMyArNjUsMTIgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORCglKGZ1bmMpcykKICIiIgogCiBhcm1fZWFiaV9jYWxsX2xvbmcgPSBzeXNjYWxsX3N0dWJfaGVhZGVyICsgIiIiXAogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC04Niw3ICs4NSw3IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoJShmdW5jKXMpCiAiIiIKIApAQCAtOTYsMTkgKzk1LDEyIEBACiAjCiAKIGFybTY0X2NhbGwgPSBzeXNjYWxsX3N0dWJfaGVhZGVyICsgIiIiXAotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCAlKF9fTlJfbmFtZSlzCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKCUoZnVuYylzKQpAQCAtMTE5LDI5ICsxMTEsNDkgQEAKICMgTUlQUyBhc3NlbWJsZXIgdGVtcGxhdGVzIGZvciBlYWNoIHN5c2NhbGwgc3R1YgogIwogCi1taXBzX2NhbGwgPSAiLyogIiArIHdhcm5pbmcgKyAiICovXG4iICsgXAotIiIiCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsICUoZnVuYylzCi0gICAgLmFsaWduIDQKLSAgICAuZW50ICUoZnVuYylzCi0KLSUoZnVuYylzOgorbWlwc19jYWxsID0gc3lzY2FsbF9zdHViX2hlYWRlciArICIiIlwKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCAlKF9fTlJfbmFtZSlzCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCAlKF9fTlJfbmFtZSlzCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCAlKGZ1bmMpcworRU5EKCUoZnVuYylzKQorIiIiCisKKworIworIyBNSVBTNjQgYXNzZW1ibGVyIHRlbXBsYXRlcyBmb3IgZWFjaCBzeXNjYWxsIHN0dWIKKyMKKworbWlwczY0X2NhbGwgPSBzeXNjYWxsX3N0dWJfaGVhZGVyICsgIiIiXAorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsICUoX19OUl9uYW1lKXMKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoJShmdW5jKXMpCiAiIiIKIAogCkBAIC0xNTgsOSArMTcwLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlJWVheAogICAgIHB1c2hsICAgJSVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICUlZXNwCi0gICAgb3JsICAgICAkLTEsICUlZWF4CiAxOgogIiIiCiAKQEAgLTE4MSw4ICsxOTIsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICUlZWF4CiAgICAgbW92bCAgICAlJWVheCwgJSVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICUlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORCglKGZ1bmMpcykKQEAgLTI2OSw3ICsyNzksNyBAQAogCiAgICAgIyBVc2UgaGlkZGVuIHZpc2liaWxpdHkgZm9yIGFueSBmdW5jdGlvbnMgYmVnaW5uaW5nIHdpdGggdW5kZXJzY29yZXMuCiAgICAgaWYgcG9pbnRlcl9sZW5ndGggPT0gNjQgYW5kIHN5c2NhbGxbImZ1bmMiXS5zdGFydHN3aXRoKCJfXyIpOgotICAgICAgICBzdHViICs9ICcuaGlkZGVuIF9DX0xBQkVMKCcgKyBzeXNjYWxsWyJmdW5jIl0gKyAnKVxuJworICAgICAgICBzdHViICs9ICcuaGlkZGVuICcgKyBzeXNjYWxsWyJmdW5jIl0gKyAnXG4nCiAKICAgICByZXR1cm4gc3R1YgogCkBAIC0yODksNiArMjk5LDEwIEBACiAgICAgcmV0dXJuIG1pcHNfY2FsbCAlIHN5c2NhbGwKIAogCitkZWYgbWlwczY0X2dlbnN0dWIoc3lzY2FsbCk6CisgICAgcmV0dXJuIG1pcHM2NF9jYWxsICUgc3lzY2FsbAorCisKIGRlZiB4ODZfZ2Vuc3R1YihzeXNjYWxsKToKICAgICByZXN1bHQgICAgID0gc3lzY2FsbF9zdHViX2hlYWRlciAlIHN5c2NhbGwKIApAQCAtMjk2LDE3ICszMTAsMjAgQEAKICAgICBzdGFja19iaWFzID0gbnVtcGFyYW1zKjQgKyA0CiAgICAgb2Zmc2V0ID0gMAogICAgIG1vdl9yZXN1bHQgPSAiIgotICAgIGNmaV9yZXN1bHQgPSAiICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgJWRcbiIgJSAobnVtcGFyYW1zKjQpCisgICAgZmlyc3RfcHVzaCA9IFRydWUKICAgICBmb3IgcmVnaXN0ZXIgaW4geDg2X3JlZ2lzdGVyc1s6bnVtcGFyYW1zXToKICAgICAgICAgcmVzdWx0ICAgICArPSAiICAgIHB1c2hsICAgJSUlc1xuIiAlIHJlZ2lzdGVyCisgICAgICAgIGlmIGZpcnN0X3B1c2g6CisgICAgICAgICAgcmVzdWx0ICAgKz0gIiAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDhcbiIKKyAgICAgICAgICByZXN1bHQgICArPSAiICAgIC5jZmlfcmVsX29mZnNldCAlcywgMFxuIiAlIHJlZ2lzdGVyCisgICAgICAgICAgZmlyc3RfcHVzaCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgcmVzdWx0ICAgKz0gIiAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDRcbiIKKyAgICAgICAgICByZXN1bHQgICArPSAiICAgIC5jZmlfcmVsX29mZnNldCAlcywgMFxuIiAlIHJlZ2lzdGVyCiAgICAgICAgIG1vdl9yZXN1bHQgKz0gIiAgICBtb3YgICAgICVkKCUlZXNwKSwgJSUlc1xuIiAlIChzdGFja19iaWFzK29mZnNldCwgcmVnaXN0ZXIpCi0gICAgICAgIGNmaV9yZXN1bHQgKz0gIiAgICAuY2ZpX3JlbF9vZmZzZXQgJXMsICVkXG4iICUgKHJlZ2lzdGVyLCBvZmZzZXQpCiAgICAgICAgIG9mZnNldCArPSA0CiAKLSAgICBpZiBudW1wYXJhbXM6Ci0gICAgICAgIHJlc3VsdCArPSBjZmlfcmVzdWx0Ci0gICAgICAgIHJlc3VsdCArPSBtb3ZfcmVzdWx0Ci0KKyAgICByZXN1bHQgKz0gbW92X3Jlc3VsdAogICAgIHJlc3VsdCArPSB4ODZfY2FsbCAlIHN5c2NhbGwKIAogICAgIGZvciByZWdpc3RlciBpbiByZXZlcnNlZCh4ODZfcmVnaXN0ZXJzWzpudW1wYXJhbXNdKToKQEAgLTMyNiwxMCArMzQzLDExIEBACiAKICAgICAjIHNhdmUgdGhlIHJlZ3Mgd2UgbmVlZAogICAgIHJlc3VsdCArPSAiICAgIHB1c2hsICAgJWVieFxuIgotICAgIHJlc3VsdCArPSAiICAgIHB1c2hsICAgJWVjeFxuIgogICAgIHJlc3VsdCArPSAiICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOFxuIgogICAgIHJlc3VsdCArPSAiICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDBcbiIKLSAgICByZXN1bHQgKz0gIiAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0XG4iCisgICAgcmVzdWx0ICs9ICIgICAgcHVzaGwgICAlZWN4XG4iCisgICAgcmVzdWx0ICs9ICIgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0XG4iCisgICAgcmVzdWx0ICs9ICIgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMFxuIgogICAgIHN0YWNrX2JpYXMgPSAxMgogCiAgICAgIyBzZXQgdGhlIGNhbGwgaWQgKCVlYngpCkBAIC0zOTcsNiArNDE1LDkgQEAKICAgICAgICAgICAgIGlmIHN5c2NhbGwuaGFzX2tleSgibWlwcyIpOgogICAgICAgICAgICAgICAgIHN5c2NhbGxbImFzbS1taXBzIl0gPSBhZGRfZm9vdGVyKDMyLCBtaXBzX2dlbnN0dWIoc3lzY2FsbCksIHN5c2NhbGwpCiAKKyAgICAgICAgICAgIGlmIHN5c2NhbGwuaGFzX2tleSgibWlwczY0Iik6CisgICAgICAgICAgICAgICAgc3lzY2FsbFsiYXNtLW1pcHM2NCJdID0gYWRkX2Zvb3Rlcig2NCwgbWlwczY0X2dlbnN0dWIoc3lzY2FsbCksIHN5c2NhbGwpCisKICAgICAgICAgICAgIGlmIHN5c2NhbGwuaGFzX2tleSgieDg2XzY0Iik6CiAgICAgICAgICAgICAgICAgc3lzY2FsbFsiYXNtLXg4Nl82NCJdID0gYWRkX2Zvb3Rlcig2NCwgeDg2XzY0X2dlbnN0dWIoc3lzY2FsbCksIHN5c2NhbGwpCiAKQEAgLTQzOSwyMCArNDYwLDYgQEAKICAgICAgICAgc2VsZi5vdGhlcl9maWxlcy5hcHBlbmQoZ2xpYmNfc3lzY2FsbHNfaF9wYXRoKQogCiAKLSAgICAjIFdyaXRlIHRoZSBjb250ZW50cyBvZiBzeXNjYWxscy5tay4KLSAgICBkZWYgZ2VuX2FyY2hfc3lzY2FsbHNfbWsoc2VsZiwgYXJjaCk6Ci0gICAgICAgIHBhdGggPSAiYXJjaC0lcy9zeXNjYWxscy5tayIgJSBhcmNoCi0gICAgICAgIEQoImdlbmVyYXRpbmcgIiArIHBhdGgpCi0gICAgICAgIGZwID0gY3JlYXRlX2ZpbGUocGF0aCkKLSAgICAgICAgZnAud3JpdGUoIiMgJXNcbiIgJSB3YXJuaW5nKQotICAgICAgICBmcC53cml0ZSgic3lzY2FsbF9zcmMgOj1cbiIpCi0gICAgICAgIGZvciBzeXNjYWxsIGluIHNvcnRlZChzZWxmLnN5c2NhbGxzLCBrZXk9bGFtYmRhIHN5c2NhbGw6IHN5c2NhbGxbImZ1bmMiXSk6Ci0gICAgICAgICAgICBpZiBzeXNjYWxsLmhhc19rZXkoImFzbS0lcyIgJSBhcmNoKToKLSAgICAgICAgICAgICAgICBmcC53cml0ZSgic3lzY2FsbF9zcmMgKz0gYXJjaC0lcy9zeXNjYWxscy8lcy5TXG4iICUgKGFyY2gsIHN5c2NhbGxbImZ1bmMiXSkpCi0gICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgc2VsZi5vdGhlcl9maWxlcy5hcHBlbmQocGF0aCkKLQotCiAgICAgIyBXcml0ZSBlYWNoIHN5c2NhbGwgc3R1Yi4KICAgICBkZWYgZ2VuX3N5c2NhbGxfc3R1YnMoc2VsZik6CiAgICAgICAgIGZvciBzeXNjYWxsIGluIHNlbGYuc3lzY2FsbHM6CkBAIC00ODcsOCArNDk0LDYgQEAKICAgICAgICAgRCgicmUtZ2VuZXJhdGluZyBzdHVicyBhbmQgc3VwcG9ydCBmaWxlcy4uLiIpCiAKICAgICAgICAgc2VsZi5nZW5fZ2xpYmNfc3lzY2FsbHNfaCgpCi0gICAgICAgIGZvciBhcmNoIGluIGFsbF9hcmNoZXM6Ci0gICAgICAgICAgICBzZWxmLmdlbl9hcmNoX3N5c2NhbGxzX21rKGFyY2gpCiAgICAgICAgIHNlbGYuZ2VuX3N5c2NhbGxfc3R1YnMoKQogCiAgICAgICAgIEQoImNvbXBhcmluZyBmaWxlcy4uLiIpCmRpZmYgLS1naXQgYS9saWJjL3Rvb2xzL3pvbmVpbmZvL1pvbmVDb21wYWN0b3IuamF2YSBiL2xpYmMvdG9vbHMvem9uZWluZm8vWm9uZUNvbXBhY3Rvci5qYXZhCmluZGV4IGY0N2FmZDEuLmJmMzE1M2UgMTAwNjQ0Ci0tLSBhL2xpYmMvdG9vbHMvem9uZWluZm8vWm9uZUNvbXBhY3Rvci5qYXZhCisrKyBiL2xpYmMvdG9vbHMvem9uZWluZm8vWm9uZUNvbXBhY3Rvci5qYXZhCkBAIC0xLDkgKzEsNiBAQAogCiBpbXBvcnQgamF2YS5pby4qOwotaW1wb3J0IGphdmEubmlvLkJ5dGVPcmRlcjsKIGltcG9ydCBqYXZhLnV0aWwuKjsKLWltcG9ydCBsaWJjb3JlLmlvLkJ1ZmZlckl0ZXJhdG9yOwotaW1wb3J0IGxpYmNvcmUudXRpbC5ab25lSW5mbzsKIAogLy8gdXNhZ2U6IGphdmEgWm9uZUNvbXBpbGVyIDxzZXR1cCBmaWxlPiA8ZGF0YSBkaXJlY3Rvcnk+IDxvdXRwdXQgZGlyZWN0b3J5PiA8dHpkYXRhIHZlcnNpb24+CiAvLwpAQCAtMjcsNjYgKzI0LDIwIEBACiAvLwogCiBwdWJsaWMgY2xhc3MgWm9uZUNvbXBhY3RvciB7Ci0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgQnl0ZUFycmF5QnVmZmVySXRlcmF0b3JCRSBleHRlbmRzIEJ1ZmZlckl0ZXJhdG9yIHsKLSAgICBwcml2YXRlIGZpbmFsIGJ5dGVbXSBieXRlczsKLSAgICBwcml2YXRlIGludCBvZmZzZXQgPSAwOwotCi0gICAgcHVibGljIEJ5dGVBcnJheUJ1ZmZlckl0ZXJhdG9yQkUoYnl0ZVtdIGJ5dGVzKSB7Ci0gICAgICB0aGlzLmJ5dGVzID0gYnl0ZXM7Ci0gICAgICB0aGlzLm9mZnNldCA9IDA7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2VlayhpbnQgb2Zmc2V0KSB7Ci0gICAgICB0aGlzLm9mZnNldCA9IG9mZnNldDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBza2lwKGludCBieXRlQ291bnQpIHsKLSAgICAgIHRoaXMub2Zmc2V0ICs9IGJ5dGVDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZWFkQnl0ZUFycmF5KGJ5dGVbXSBkc3QsIGludCBkc3RPZmZzZXQsIGludCBieXRlQ291bnQpIHsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoYnl0ZXMsIG9mZnNldCwgZHN0LCBkc3RPZmZzZXQsIGJ5dGVDb3VudCk7Ci0gICAgICBvZmZzZXQgKz0gYnl0ZUNvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyBieXRlIHJlYWRCeXRlKCkgewotICAgICAgcmV0dXJuIGJ5dGVzW29mZnNldCsrXTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IHJlYWRJbnQoKSB7Ci0gICAgICByZXR1cm4gKChyZWFkQnl0ZSgpICYgMHhmZikgPDwgMjQpIHwgKChyZWFkQnl0ZSgpICYgMHhmZikgPDwgMTYpIHwgKChyZWFkQnl0ZSgpICYgMHhmZikgPDwgOCkgfCAocmVhZEJ5dGUoKSAmIDB4ZmYpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlYWRJbnRBcnJheShpbnRbXSBkc3QsIGludCBkc3RPZmZzZXQsIGludCBpbnRDb3VudCkgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRDb3VudDsgKytpKSB7Ci0gICAgICAgIGRzdFtkc3RPZmZzZXQrK10gPSByZWFkSW50KCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHNob3J0IHJlYWRTaG9ydCgpIHsKLSAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLSAgfQotCi0gIC8vIE1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gYSB6b25lIG5hbWUsIGluY2x1ZGluZyAnXDAnIHRlcm1pbmF0b3IKKyAgLy8gTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBhIHpvbmUgbmFtZSwgaW5jbHVkaW5nICdcMCcgdGVybWluYXRvci4KICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWE5BTUUgPSA0MDsKIAotICAvLyBab25lIG5hbWUgc3lub255bXMKKyAgLy8gWm9uZSBuYW1lIHN5bm9ueW1zLgogICBwcml2YXRlIE1hcDxTdHJpbmcsU3RyaW5nPiBsaW5rcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KCk7CiAKLSAgLy8gRmlsZSBzdGFydGluZyBieXRlcyBieSB6b25lIG5hbWUKLSAgcHJpdmF0ZSBNYXA8U3RyaW5nLEludGVnZXI+IHN0YXJ0cyA9IG5ldyBIYXNoTWFwPFN0cmluZyxJbnRlZ2VyPigpOworICAvLyBGaWxlIG9mZnNldHMgYnkgem9uZSBuYW1lLgorICBwcml2YXRlIE1hcDxTdHJpbmcsSW50ZWdlcj4gb2Zmc2V0cyA9IG5ldyBIYXNoTWFwPFN0cmluZyxJbnRlZ2VyPigpOwogCi0gIC8vIEZpbGUgbGVuZ3RocyBieSB6b25lIG5hbWUKKyAgLy8gRmlsZSBsZW5ndGhzIGJ5IHpvbmUgbmFtZS4KICAgcHJpdmF0ZSBNYXA8U3RyaW5nLEludGVnZXI+IGxlbmd0aHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsSW50ZWdlcj4oKTsKIAotICAvLyBSYXcgR01UIG9mZnNldHMgYnkgem9uZSBuYW1lCi0gIHByaXZhdGUgTWFwPFN0cmluZyxJbnRlZ2VyPiBvZmZzZXRzID0gbmV3IEhhc2hNYXA8U3RyaW5nLEludGVnZXI+KCk7Ci0gIHByaXZhdGUgaW50IHN0YXJ0ID0gMDsKLQotICAvLyBDb25jYXRlbmF0ZSB0aGUgY29udGVudHMgb2YgJ2luRmlsZScgb250byAnb3V0JwotICAvLyBhbmQgcmV0dXJuIHRoZSBjb250ZW50cyBhcyBhIGJ5dGUgYXJyYXkuCi0gIHByaXZhdGUgc3RhdGljIGJ5dGVbXSBjb3B5RmlsZShGaWxlIGluRmlsZSwgT3V0cHV0U3RyZWFtIG91dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgIC8vIENvbmNhdGVuYXRlIHRoZSBjb250ZW50cyBvZiAnaW5GaWxlJyBvbnRvICdvdXQnLgorICBwcml2YXRlIHN0YXRpYyB2b2lkIGNvcHlGaWxlKEZpbGUgaW5GaWxlLCBPdXRwdXRTdHJlYW0gb3V0KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICBieXRlW10gcmV0ID0gbmV3IGJ5dGVbMF07CiAKICAgICBJbnB1dFN0cmVhbSBpbiA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oaW5GaWxlKTsKQEAgLTEwNCwxNCArNTUsMTQgQEAKICAgICAgIHJldCA9IG5yZXQ7CiAgICAgfQogICAgIG91dC5mbHVzaCgpOwotICAgIHJldHVybiByZXQ7CiAgIH0KIAogICBwdWJsaWMgWm9uZUNvbXBhY3RvcihTdHJpbmcgc2V0dXBGaWxlLCBTdHJpbmcgZGF0YURpcmVjdG9yeSwgU3RyaW5nIHpvbmVUYWJGaWxlLCBTdHJpbmcgb3V0cHV0RGlyZWN0b3J5LCBTdHJpbmcgdmVyc2lvbikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gUmVhZCB0aGUgc2V0dXAgZmlsZSwgYW5kIGNvbmNhdGVuYXRlIGFsbCB0aGUgZGF0YS4KKyAgICAvLyBSZWFkIHRoZSBzZXR1cCBmaWxlIGFuZCBjb25jYXRlbmF0ZSBhbGwgdGhlIGRhdGEuCiAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFsbERhdGEgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CiAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKHNldHVwRmlsZSkpOwogICAgIFN0cmluZyBzOworICAgIGludCBvZmZzZXQgPSAwOwogICAgIHdoaWxlICgocyA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICBzID0gcy50cmltKCk7CiAgICAgICBpZiAocy5zdGFydHNXaXRoKCJMaW5rIikpIHsKQEAgLTEyNSwxNiArNzYsMTEgQEAKICAgICAgICAgaWYgKGxpbmsgPT0gbnVsbCkgewogICAgICAgICAgIEZpbGUgc291cmNlRmlsZSA9IG5ldyBGaWxlKGRhdGFEaXJlY3RvcnksIHMpOwogICAgICAgICAgIGxvbmcgbGVuZ3RoID0gc291cmNlRmlsZS5sZW5ndGgoKTsKLSAgICAgICAgICBzdGFydHMucHV0KHMsIHN0YXJ0KTsKKyAgICAgICAgICBvZmZzZXRzLnB1dChzLCBvZmZzZXQpOwogICAgICAgICAgIGxlbmd0aHMucHV0KHMsIChpbnQpIGxlbmd0aCk7CiAKLSAgICAgICAgICBzdGFydCArPSBsZW5ndGg7Ci0gICAgICAgICAgYnl0ZVtdIGRhdGEgPSBjb3B5RmlsZShzb3VyY2VGaWxlLCBhbGxEYXRhKTsKLQotICAgICAgICAgIEJ1ZmZlckl0ZXJhdG9yIGl0ID0gbmV3IEJ5dGVBcnJheUJ1ZmZlckl0ZXJhdG9yQkUoZGF0YSk7Ci0gICAgICAgICAgVGltZVpvbmUgdHogPSBab25lSW5mby5tYWtlVGltZVpvbmUocywgaXQpOwotICAgICAgICAgIGludCBnbXRPZmZzZXQgPSB0ei5nZXRSYXdPZmZzZXQoKTsKLSAgICAgICAgICBvZmZzZXRzLnB1dChzLCBnbXRPZmZzZXQpOworICAgICAgICAgIG9mZnNldCArPSBsZW5ndGg7CisgICAgICAgICAgY29weUZpbGUoc291cmNlRmlsZSwgYWxsRGF0YSk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC0xNDYsOSArOTIsOCBAQAogICAgICAgU3RyaW5nIGZyb20gPSBpdC5uZXh0KCk7CiAgICAgICBTdHJpbmcgdG8gPSBsaW5rcy5nZXQoZnJvbSk7CiAKLSAgICAgIHN0YXJ0cy5wdXQoZnJvbSwgc3RhcnRzLmdldCh0bykpOwotICAgICAgbGVuZ3Rocy5wdXQoZnJvbSwgbGVuZ3Rocy5nZXQodG8pKTsKICAgICAgIG9mZnNldHMucHV0KGZyb20sIG9mZnNldHMuZ2V0KHRvKSk7CisgICAgICBsZW5ndGhzLnB1dChmcm9tLCBsZW5ndGhzLmdldCh0bykpOwogICAgIH0KIAogICAgIC8vIENyZWF0ZS90cnVuY2F0ZSB0aGUgZGVzdGluYXRpb24gZmlsZS4KQEAgLTE3OCw3ICsxMjMsNyBAQAogCiAgICAgLy8gV3JpdGUgdGhlIGluZGV4LgogICAgIEFycmF5TGlzdDxTdHJpbmc+IHNvcnRlZE9sc29uSWRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgc29ydGVkT2xzb25JZHMuYWRkQWxsKHN0YXJ0cy5rZXlTZXQoKSk7CisgICAgc29ydGVkT2xzb25JZHMuYWRkQWxsKG9mZnNldHMua2V5U2V0KCkpOwogICAgIENvbGxlY3Rpb25zLnNvcnQoc29ydGVkT2xzb25JZHMpOwogICAgIGl0ID0gc29ydGVkT2xzb25JZHMuaXRlcmF0b3IoKTsKICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CkBAIC0xODgsOSArMTMzLDkgQEAKICAgICAgIH0KIAogICAgICAgZi53cml0ZSh0b0FzY2lpKG5ldyBieXRlW01BWE5BTUVdLCB6b25lTmFtZSkpOwotICAgICAgZi53cml0ZUludChzdGFydHMuZ2V0KHpvbmVOYW1lKSk7Ci0gICAgICBmLndyaXRlSW50KGxlbmd0aHMuZ2V0KHpvbmVOYW1lKSk7CiAgICAgICBmLndyaXRlSW50KG9mZnNldHMuZ2V0KHpvbmVOYW1lKSk7CisgICAgICBmLndyaXRlSW50KGxlbmd0aHMuZ2V0KHpvbmVOYW1lKSk7CisgICAgICBmLndyaXRlSW50KDApOyAvLyBVc2VkIHRvIGJlIHJhdyBHTVQgb2Zmc2V0LiBObyBsb25nZXIgdXNlZC4KICAgICB9CiAKICAgICBpbnQgZGF0YV9vZmZzZXQgPSAoaW50KSBmLmdldEZpbGVQb2ludGVyKCk7CmRpZmYgLS1naXQgYS9saWJjL3Rvb2xzL3pvbmVpbmZvL3VwZGF0ZS10emRhdGEucHkgYi9saWJjL3Rvb2xzL3pvbmVpbmZvL3VwZGF0ZS10emRhdGEucHkKaW5kZXggODk1NjEzNi4uZTgwMGU4ZiAxMDA3NTUKLS0tIGEvbGliYy90b29scy96b25laW5mby91cGRhdGUtdHpkYXRhLnB5CisrKyBiL2xpYmMvdG9vbHMvem9uZWluZm8vdXBkYXRlLXR6ZGF0YS5weQpAQCAtMSwzNiArMSw0MCBAQAogIyEvdXNyL2Jpbi9weXRob24KIAotIiIiVXBkYXRlcyB0aGUgdHpkYXRhIGZpbGUuIiIiCisiIiJVcGRhdGVzIHRoZSB0aW1lem9uZSBkYXRhIGhlbGQgaW4gYmlvbmljIGFuZCBJQ1UuIiIiCiAKIGltcG9ydCBmdHBsaWIKK2ltcG9ydCBnbG9iCiBpbXBvcnQgaHR0cGxpYgogaW1wb3J0IG9zCiBpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGFyZmlsZQogaW1wb3J0IHRlbXBmaWxlCiAKLSMgRmluZCB0aGUgYmlvbmljIGRpcmVjdG9yeSwgc2VhcmNoaW5nIHVwd2FyZCBmcm9tIHRoaXMgc2NyaXB0LgotYmlvbmljX2xpYmNfdG9vbHNfem9uZWluZm9fZGlyID0gb3MucGF0aC5yZWFscGF0aChvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pKQotYmlvbmljX2xpYmNfdG9vbHNfZGlyID0gb3MucGF0aC5kaXJuYW1lKGJpb25pY19saWJjX3Rvb2xzX3pvbmVpbmZvX2RpcikKLWJpb25pY19saWJjX2RpciA9IG9zLnBhdGguZGlybmFtZShiaW9uaWNfbGliY190b29sc19kaXIpCi1iaW9uaWNfZGlyID0gb3MucGF0aC5kaXJuYW1lKGJpb25pY19saWJjX2RpcikKLWJpb25pY19saWJjX3pvbmVpbmZvX2RpciA9ICclcy9saWJjL3pvbmVpbmZvJyAlIGJpb25pY19kaXIKLQotaWYgbm90IG9zLnBhdGguaXNkaXIoYmlvbmljX2xpYmNfdG9vbHNfem9uZWluZm9fZGlyKToKLSAgcHJpbnQgIkNvdWxkbid0IGZpbmQgYmlvbmljL2xpYmMvdG9vbHMvem9uZWluZm8hIgotICBzeXMuZXhpdCgxKQotaWYgbm90IG9zLnBhdGguaXNkaXIoYmlvbmljX2xpYmNfem9uZWluZm9fZGlyKToKLSAgcHJpbnQgIkNvdWxkbid0IGZpbmQgYmlvbmljL2xpYmMvem9uZWluZm8hIgotICBzeXMuZXhpdCgxKQotCi1wcmludCAnRm91bmQgYmlvbmljIGluICVzLi4uJyAlIGJpb25pY19kaXIKLQotCiByZWdpb25zID0gWydhZnJpY2EnLCAnYW50YXJjdGljYScsICdhc2lhJywgJ2F1c3RyYWxhc2lhJywgJ2JhY2t3YXJkJywKICAgICAgICAgICAgJ2V0Y2V0ZXJhJywgJ2V1cm9wZScsICdub3J0aGFtZXJpY2EnLCAnc291dGhhbWVyaWNhJ10KIAorZGVmIENoZWNrRGlyRXhpc3RzKGRpciwgZGlybmFtZSk6CisgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRpcik6CisgICAgcHJpbnQgIkNvdWxkbid0IGZpbmQgJXMgKCVzKSEiICUgKGRpcm5hbWUsIGRpcikKKyAgICBzeXMuZXhpdCgxKQorCitiaW9uaWNfbGliY190b29sc196b25laW5mb19kaXIgPSBvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkpCisKKyMgRmluZCB0aGUgYmlvbmljIGRpcmVjdG9yeSwgc2VhcmNoaW5nIHVwd2FyZCBmcm9tIHRoaXMgc2NyaXB0LgorYmlvbmljX2RpciA9IG9zLnBhdGgucmVhbHBhdGgoJyVzLy4uLy4uLy4uJyAlIGJpb25pY19saWJjX3Rvb2xzX3pvbmVpbmZvX2RpcikKK2Jpb25pY19saWJjX3pvbmVpbmZvX2RpciA9ICclcy9saWJjL3pvbmVpbmZvJyAlIGJpb25pY19kaXIKK0NoZWNrRGlyRXhpc3RzKGJpb25pY19saWJjX3pvbmVpbmZvX2RpciwgJ2Jpb25pYy9saWJjL3pvbmVpbmZvJykKK0NoZWNrRGlyRXhpc3RzKGJpb25pY19saWJjX3Rvb2xzX3pvbmVpbmZvX2RpciwgJ2Jpb25pYy9saWJjL3Rvb2xzL3pvbmVpbmZvJykKK3ByaW50ICdGb3VuZCBiaW9uaWMgaW4gJXMgLi4uJyAlIGJpb25pY19kaXIKKworIyBGaW5kIHRoZSBpY3U0YyBkaXJlY3RvcnkuCitpY3VfZGlyID0gb3MucGF0aC5yZWFscGF0aCgnJXMvLi4vZXh0ZXJuYWwvaWN1L2ljdTRjL3NvdXJjZScgJSBiaW9uaWNfZGlyKQorQ2hlY2tEaXJFeGlzdHMoaWN1X2RpciwgJ2V4dGVybmFsL2ljdS9pY3U0Yy9zb3VyY2UnKQorcHJpbnQgJ0ZvdW5kIGljdSBpbiAlcyAuLi4nICUgaWN1X2RpcgorCiAKIGRlZiBHZXRDdXJyZW50VHpEYXRhVmVyc2lvbigpOgogICByZXR1cm4gb3BlbignJXMvdHpkYXRhJyAlIGJpb25pY19saWJjX3pvbmVpbmZvX2RpcikucmVhZCgpLnNwbGl0KCdceDAwJywgMSlbMF0KQEAgLTY1LDUwICs2OSw4MSBAQAogICBwcmludCAnQ3JlYXRlZCB0ZW1wb3JhcnkgZGlyZWN0b3J5ICIlcyIuLi4nICUgdG1wX2RpcgogCiAKLWRlZiBGdHBSZXRyaWV2ZShmdHAsIGZpbGVuYW1lKToKK2RlZiBGdHBSZXRyaWV2ZUZpbGUoZnRwLCBmaWxlbmFtZSk6CiAgIGZ0cC5yZXRyYmluYXJ5KCdSRVRSICVzJyAlIGZpbGVuYW1lLCBvcGVuKGZpbGVuYW1lLCAnd2InKS53cml0ZSkKIAogCi1kZWYgRnRwVXBncmFkZShmdHAsIGRhdGFfZmlsZW5hbWUpOgorZGVmIEZ0cFJldHJpZXZlRmlsZUFuZFNpZ25hdHVyZShmdHAsIGRhdGFfZmlsZW5hbWUpOgogICAiIiJEb3dubG9hZHMgYW5kIHJlcGFja2FnZXMgdGhlIGdpdmVuIGRhdGEgZnJvbSB0aGUgZ2l2ZW4gRlRQIHNlcnZlci4iIiIKLSAgU3dpdGNoVG9OZXdUZW1wb3JhcnlEaXJlY3RvcnkoKQotCiAgIHByaW50ICdEb3dubG9hZGluZyBkYXRhLi4uJwotICBGdHBSZXRyaWV2ZShmdHAsIGRhdGFfZmlsZW5hbWUpCisgIEZ0cFJldHJpZXZlRmlsZShmdHAsIGRhdGFfZmlsZW5hbWUpCiAKICAgcHJpbnQgJ0Rvd25sb2FkaW5nIHNpZ25hdHVyZS4uLicKICAgc2lnbmF0dXJlX2ZpbGVuYW1lID0gJyVzLmFzYycgJSBkYXRhX2ZpbGVuYW1lCi0gIEZ0cFJldHJpZXZlKGZ0cCwgc2lnbmF0dXJlX2ZpbGVuYW1lKQotCi0gIEV4dHJhY3RBbmRDb21waWxlKGRhdGFfZmlsZW5hbWUpCisgIEZ0cFJldHJpZXZlRmlsZShmdHAsIHNpZ25hdHVyZV9maWxlbmFtZSkKIAogCi1kZWYgSHR0cFJldHJpZXZlKGh0dHAsIHBhdGgsIG91dHB1dF9maWxlbmFtZSk6CitkZWYgSHR0cFJldHJpZXZlRmlsZShodHRwLCBwYXRoLCBvdXRwdXRfZmlsZW5hbWUpOgogICBodHRwLnJlcXVlc3QoIkdFVCIsIHBhdGgpCiAgIGYgPSBvcGVuKG91dHB1dF9maWxlbmFtZSwgJ3diJykKICAgZi53cml0ZShodHRwLmdldHJlc3BvbnNlKCkucmVhZCgpKQogICBmLmNsb3NlKCkKIAogCi1kZWYgSHR0cFVwZ3JhZGUoaHR0cCwgZGF0YV9maWxlbmFtZSk6CitkZWYgSHR0cFJldHJpZXZlRmlsZUFuZFNpZ25hdHVyZShodHRwLCBkYXRhX2ZpbGVuYW1lKToKICAgIiIiRG93bmxvYWRzIGFuZCByZXBhY2thZ2VzIHRoZSBnaXZlbiBkYXRhIGZyb20gdGhlIGdpdmVuIEhUVFAgc2VydmVyLiIiIgotICBTd2l0Y2hUb05ld1RlbXBvcmFyeURpcmVjdG9yeSgpCi0KICAgcGF0aCA9ICIvdGltZS16b25lcy9yZXBvc2l0b3J5L3JlbGVhc2VzLyVzIiAlIGRhdGFfZmlsZW5hbWUKIAogICBwcmludCAnRG93bmxvYWRpbmcgZGF0YS4uLicKLSAgSHR0cFJldHJpZXZlKGh0dHAsIHBhdGgsIGRhdGFfZmlsZW5hbWUpCisgIEh0dHBSZXRyaWV2ZUZpbGUoaHR0cCwgcGF0aCwgZGF0YV9maWxlbmFtZSkKIAogICBwcmludCAnRG93bmxvYWRpbmcgc2lnbmF0dXJlLi4uJwogICBzaWduYXR1cmVfZmlsZW5hbWUgPSAnJXMuYXNjJyAlIGRhdGFfZmlsZW5hbWUKLSAgSHR0cFJldHJpZXZlKGh0dHAsICIlcy5hc2MiICUgcGF0aCwgc2lnbmF0dXJlX2ZpbGVuYW1lKQotCi0gIEV4dHJhY3RBbmRDb21waWxlKGRhdGFfZmlsZW5hbWUpCisgIEh0dHBSZXRyaWV2ZWZpbGUoaHR0cCwgIiVzLmFzYyIgJSBwYXRoLCBzaWduYXR1cmVfZmlsZW5hbWUpCiAKIAotZGVmIEV4dHJhY3RBbmRDb21waWxlKGRhdGFfZmlsZW5hbWUpOgotICBuZXdfdmVyc2lvbiA9IHJlLnNlYXJjaCgnKHR6ZGF0YS4rKVxcLnRhclxcLmd6JywgZGF0YV9maWxlbmFtZSkuZ3JvdXAoMSkKK2RlZiBCdWlsZEljdVRvb2xzQW5kRGF0YShkYXRhX2ZpbGVuYW1lKToKKyAgIyBLZWVwIHRyYWNrIG9mIHRoZSBvcmlnaW5hbCBjd2Qgc28gd2UgY2FuIGdvIGJhY2sgdG8gaXQgYXQgdGhlIGVuZC4KKyAgb3JpZ2luYWxfd29ya2luZ19kaXIgPSBvcy5nZXRjd2QoKQogCisgICMgQ3JlYXRlIGEgZGlyZWN0b3J5IHRvIHJ1biAnbWFrZScgZnJvbS4KKyAgaWN1X3dvcmtpbmdfZGlyID0gJyVzL2ljdScgJSBvcmlnaW5hbF93b3JraW5nX2RpcgorICBvcy5ta2RpcihpY3Vfd29ya2luZ19kaXIpCisgIG9zLmNoZGlyKGljdV93b3JraW5nX2RpcikKKworICAjIEJ1aWxkIHRoZSBJQ1UgdG9vbHMuCisgIHByaW50ICdDb25maWd1cmluZyBJQ1UgdG9vbHMuLi4nCisgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJyVzL3J1bkNvbmZpZ3VyZUlDVScgJSBpY3VfZGlyLCAnTGludXgnXSkKKyAgcHJpbnQgJ01ha2luZyBJQ1UgdG9vbHMuLi4nCisgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJ21ha2UnLCAnLWozMiddKQorCisgICMgUnVuIHRoZSBJQ1UgdG9vbHMuCisgIG9zLmNoZGlyKCd0b29scy90emNvZGUnKQorICBzaHV0aWwuY29weWZpbGUoJyVzLyVzJyAlIChvcmlnaW5hbF93b3JraW5nX2RpciwgZGF0YV9maWxlbmFtZSksIGRhdGFfZmlsZW5hbWUpCisgIHByaW50ICdNYWtpbmcgSUNVIGRhdGEuLi4nCisgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJ21ha2UnXSkKKworICAjIENvcHkgdGhlIG91dHB1dCBmaWxlcyB0byB0aGVpciB1bHRpbWF0ZSBkZXN0aW5hdGlvbi4KKyAgaWN1X3R4dF9kYXRhX2RpciA9ICclcy9kYXRhL21pc2MnICUgaWN1X2RpcgorICBwcmludCAnQ29weWluZyB6b25laW5mbzY0LnR4dCB0byAlcyAuLi4nICUgaWN1X3R4dF9kYXRhX2RpcgorICBzaHV0aWwuY29weSgnem9uZWluZm82NC50eHQnLCBpY3VfdHh0X2RhdGFfZGlyKQorCisgIG9zLmNoZGlyKGljdV93b3JraW5nX2RpcikKKyAgaWN1X2RhdF9kYXRhX2RpciA9ICclcy9zdHViZGF0YScgJSBpY3VfZGlyCisgIGRhdGZpbGVzID0gZ2xvYi5nbG9iKCdkYXRhL291dC90bXAvaWN1ZHQ/P2wuZGF0JykKKyAgaWYgbGVuKGRhdGZpbGVzKSAhPSAxOgorICAgIHByaW50ICdFUlJPUjogVW5leHBlY3RlZGx5IGZvdW5kICVkIC5kYXQgZmlsZXMgKCVzKS4gSGFsdGluZy4nICUgKGxlbihkYXRmaWxlcyksIGRhdGZpbGVzKQorICAgIHN5cy5leGl0KDEpCisKKyAgZGF0ZmlsZSA9IGRhdGZpbGVzWzBdCisgIHByaW50ICdDb3B5aW5nICVzIHRvICVzIC4uLicgJSAoZGF0ZmlsZSwgaWN1X2RhdF9kYXRhX2RpcikKKyAgc2h1dGlsLmNvcHkoZGF0ZmlsZSwgaWN1X2RhdF9kYXRhX2RpcikKKworICAjIFN3aXRjaCBiYWNrIHRvIHRoZSBvcmlnaW5hbCB3b3JraW5nIGN3ZC4KKyAgb3MuY2hkaXIob3JpZ2luYWxfd29ya2luZ19kaXIpCisKKworZGVmIENoZWNrU2lnbmF0dXJlKGRhdGFfZmlsZW5hbWUpOgogICBzaWduYXR1cmVfZmlsZW5hbWUgPSAnJXMuYXNjJyAlIGRhdGFfZmlsZW5hbWUKICAgcHJpbnQgJ1ZlcmlmeWluZyBzaWduYXR1cmUuLi4nCiAgICMgSWYgdGhpcyBmYWlscyBmb3IgeW91LCB5b3UgcHJvYmFibHkgbmVlZCB0byBpbXBvcnQgUGF1bCBFZ2dlcnQncyBwdWJsaWMga2V5OgpAQCAtMTE2LDYgKzE1MSwxMCBAQAogICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWydncGcnLCAnLS10cnVzdGVkLWtleT1FRDk3RTkwRTYyQUE3RTM0JywgJy0tdmVyaWZ5JywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVfZmlsZW5hbWUsIGRhdGFfZmlsZW5hbWVdKQogCisKK2RlZiBCdWlsZEJpb25pY1Rvb2xzQW5kRGF0YShkYXRhX2ZpbGVuYW1lKToKKyAgbmV3X3ZlcnNpb24gPSByZS5zZWFyY2goJyh0emRhdGEuKylcXC50YXJcXC5neicsIGRhdGFfZmlsZW5hbWUpLmdyb3VwKDEpCisKICAgcHJpbnQgJ0V4dHJhY3RpbmcuLi4nCiAgIG9zLm1rZGlyKCdleHRyYWN0ZWQnKQogICB0YXIgPSB0YXJmaWxlLm9wZW4oZGF0YV9maWxlbmFtZSwgJ3InKQpAQCAtMTMwLDExICsxNjksOCBAQAogICBXcml0ZVNldHVwRmlsZSgpCiAKICAgcHJpbnQgJ0NhbGxpbmcgWm9uZUNvbXBhY3RvciB0byB1cGRhdGUgYmlvbmljIHRvICVzLi4uJyAlIG5ld192ZXJzaW9uCi0gIGxpYmNvcmVfc3JjX2RpciA9ICclcy8uLi9saWJjb3JlL2x1bmkvc3JjL21haW4vamF2YS8nICUgYmlvbmljX2RpcgogICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWydqYXZhYycsICctZCcsICcuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnJXMvWm9uZUNvbXBhY3Rvci5qYXZhJyAlIGJpb25pY19saWJjX3Rvb2xzX3pvbmVpbmZvX2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnJXMvbGliY29yZS91dGlsL1pvbmVJbmZvLmphdmEnICUgbGliY29yZV9zcmNfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICclcy9saWJjb3JlL2lvL0J1ZmZlckl0ZXJhdG9yLmphdmEnICUgbGliY29yZV9zcmNfZGlyXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAnJXMvWm9uZUNvbXBhY3Rvci5qYXZhJyAlIGJpb25pY19saWJjX3Rvb2xzX3pvbmVpbmZvX2Rpcl0pCiAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJ2phdmEnLCAnWm9uZUNvbXBhY3RvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NldHVwJywgJ2RhdGEnLCAnZXh0cmFjdGVkL3pvbmUudGFiJywKICAgICAgICAgICAgICAgICAgICAgICAgICBiaW9uaWNfbGliY196b25laW5mb19kaXIsIG5ld192ZXJzaW9uXSkKQEAgLTE3NSwxMCArMjExLDE2IEBACiAgIGZvciBmaWxlbmFtZSBpbiB0emRhdGFfZmlsZW5hbWVzOgogICAgIGlmIGZpbGVuYW1lID4gY3VycmVudF9maWxlbmFtZToKICAgICAgIHByaW50ICdGb3VuZCBuZXcgdHpkYXRhOiAlcycgJSBmaWxlbmFtZQorICAgICAgU3dpdGNoVG9OZXdUZW1wb3JhcnlEaXJlY3RvcnkoKQogICAgICAgaWYgdXNlX2Z0cDoKLSAgICAgICAgRnRwVXBncmFkZShmdHAsIGZpbGVuYW1lKQorICAgICAgICBGdHBSZXRyaWV2ZUZpbGVBbmRTaWduYXR1cmUoZnRwLCBmaWxlbmFtZSkKICAgICAgIGVsc2U6Ci0gICAgICAgIEh0dHBVcGdyYWRlKGh0dHAsIGZpbGVuYW1lKQorICAgICAgICBIdHRwUmV0cmlldmVGaWxlQW5kU2lnbmF0dXJlKGh0dHAsIGZpbGVuYW1lKQorCisgICAgICBDaGVja1NpZ25hdHVyZShmaWxlbmFtZSkKKyAgICAgIEJ1aWxkSWN1VG9vbHNBbmREYXRhKGZpbGVuYW1lKQorICAgICAgQnVpbGRCaW9uaWNUb29sc0FuZERhdGEoZmlsZW5hbWUpCisgICAgICBwcmludCAnTG9vayBpbiAlcyBhbmQgJXMgZm9yIG5ldyBkYXRhIGZpbGVzJyAlIChiaW9uaWNfZGlyLCBpY3VfZGlyKQogICAgICAgc3lzLmV4aXQoMCkKIAogICBwcmludCAnWW91IGFscmVhZHkgaGF2ZSB0aGUgbGF0ZXN0IHR6ZGF0YSAoJXMpIScgJSBjdXJyZW50X3ZlcnNpb24KZGlmZiAtLWdpdCBhL2xpYmMvdHpjb2RlL2xvY2FsdGltZS5jIGIvbGliYy90emNvZGUvbG9jYWx0aW1lLmMKaW5kZXggZTI1OTliNC4uM2JiZWQ5MCAxMDA2NDQKLS0tIGEvbGliYy90emNvZGUvbG9jYWx0aW1lLmMKKysrIGIvbGliYy90emNvZGUvbG9jYWx0aW1lLmMKQEAgLTc0LDkgKzc0LDkgQEAKICNkZWZpbmUgV0lMREFCQlIgICAgIiAgICIKICNlbmRpZiAvKiAhZGVmaW5lZCBXSUxEQUJCUiAqLwogCi1zdGF0aWMgY2hhciAgICAgd2lsZGFiYnJbXSA9IFdJTERBQkJSOworc3RhdGljIGNvbnN0IGNoYXIgICAgICAgd2lsZGFiYnJbXSA9IFdJTERBQkJSOwogCi1zdGF0aWMgY29uc3QgY2hhciAgIGdtdFtdID0gIkdNVCI7CitzdGF0aWMgY29uc3QgY2hhciBnbXRbXSA9ICJHTVQiOwogCiAvKgogKiogVGhlIERTVCBydWxlcyB0byB1c2UgaWYgVFogaGFzIG5vIHJ1bGVzIGFuZCB3ZSBjYW4ndCBsb2FkIFRaREVGUlVMRVMuCkBAIC04OSw3ICs4OSw3IEBACiAjZGVmaW5lIFRaREVGUlVMRVNUUklORyAiLE00LjEuMCxNMTAuNS4wIgogI2VuZGlmIC8qICFkZWZpbmVkIFRaREVGRFNUICovCiAKLXN0cnVjdCB0dGluZm8geyAgICAgICAgICAgICAvKiB0aW1lIHR5cGUgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCB0dGluZm8geyAgICAgICAgICAgICAgLyogdGltZSB0eXBlIGluZm9ybWF0aW9uICovCiAgICAgaW50X2Zhc3QzMl90IHR0X2dtdG9mZjsgIC8qIFVUIG9mZnNldCBpbiBzZWNvbmRzICovCiAgICAgaW50ICAgICAgICAgIHR0X2lzZHN0OyAgIC8qIHVzZWQgdG8gc2V0IHRtX2lzZHN0ICovCiAgICAgaW50ICAgICAgICAgIHR0X2FiYnJpbmQ7IC8qIGFiYnJldmlhdGlvbiBsaXN0IGluZGV4ICovCkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgaW50ICAgICAgICAgIHR0X3R0aXNnbXQ7IC8qIFRSVUUgaWYgdHJhbnNpdGlvbiBpcyBVVCAqLwogfTsKIAotc3RydWN0IGxzaW5mbyB7ICAgICAgICAgICAgIC8qIGxlYXAgc2Vjb25kIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgbHNpbmZvIHsgICAgICAgICAgICAgIC8qIGxlYXAgc2Vjb25kIGluZm9ybWF0aW9uICovCiAgICAgdGltZV90ICAgICAgIGxzX3RyYW5zOyAgIC8qIHRyYW5zaXRpb24gdGltZSAqLwogICAgIGludF9mYXN0NjRfdCBsc19jb3JyOyAgICAvKiBjb3JyZWN0aW9uIHRvIGFwcGx5ICovCiB9OwpAQCAtMTEyLDMyICsxMTIsMzIgQEAKICNlbmRpZiAvKiAhZGVmaW5lZCBUWk5BTUVfTUFYICovCiAKIHN0cnVjdCBzdGF0ZSB7Ci0gICAgaW50ICAgICBsZWFwY250OwotICAgIGludCAgICAgdGltZWNudDsKLSAgICBpbnQgICAgIHR5cGVjbnQ7Ci0gICAgaW50ICAgICBjaGFyY250OwotICAgIGludCAgICAgZ29iYWNrOwotICAgIGludCAgICAgZ29haGVhZDsKLSAgICB0aW1lX3QgICAgICBhdHNbVFpfTUFYX1RJTUVTXTsKLSAgICB1bnNpZ25lZCBjaGFyICAgdHlwZXNbVFpfTUFYX1RJTUVTXTsKLSAgICBzdHJ1Y3QgdHRpbmZvICAgdHRpc1tUWl9NQVhfVFlQRVNdOwotICAgIGNoYXIgICAgICAgIGNoYXJzW0JJR0dFU1QoQklHR0VTVChUWl9NQVhfQ0hBUlMgKyAxLCBzaXplb2YgZ210KSwKLSAgICAgICAgICAgICAgICAoMiAqIChNWV9UWk5BTUVfTUFYICsgMSkpKV07Ci0gICAgc3RydWN0IGxzaW5mbyAgIGxzaXNbVFpfTUFYX0xFQVBTXTsKLSAgICBpbnQgZGVmYXVsdHR5cGU7IC8qIGZvciBlYXJseSB0aW1lcyBvciBpZiBubyB0cmFuc2l0aW9ucyAqLworICAgIGludCAgICAgICAgICAgbGVhcGNudDsKKyAgICBpbnQgICAgICAgICAgIHRpbWVjbnQ7CisgICAgaW50ICAgICAgICAgICB0eXBlY250OworICAgIGludCAgICAgICAgICAgY2hhcmNudDsKKyAgICBpbnQgICAgICAgICAgIGdvYmFjazsKKyAgICBpbnQgICAgICAgICAgIGdvYWhlYWQ7CisgICAgdGltZV90ICAgICAgICBhdHNbVFpfTUFYX1RJTUVTXTsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVzW1RaX01BWF9USU1FU107CisgICAgc3RydWN0IHR0aW5mbyB0dGlzW1RaX01BWF9UWVBFU107CisgICAgY2hhciAgICAgICAgICBjaGFyc1tCSUdHRVNUKEJJR0dFU1QoVFpfTUFYX0NIQVJTICsgMSwgc2l6ZW9mIGdtdCksCisgICAgICAgICAgICAgICAgICAoMiAqIChNWV9UWk5BTUVfTUFYICsgMSkpKV07CisgICAgc3RydWN0IGxzaW5mbyBsc2lzW1RaX01BWF9MRUFQU107CisgICAgaW50ICAgICAgICAgICBkZWZhdWx0dHlwZTsgLyogZm9yIGVhcmx5IHRpbWVzIG9yIGlmIG5vIHRyYW5zaXRpb25zICovCiB9OwogCiBzdHJ1Y3QgcnVsZSB7Ci0gICAgaW50ICAgICAgICAgIHJfdHlwZTsgICAgIC8qIHR5cGUgb2YgcnVsZS0tc2VlIGJlbG93ICovCi0gICAgaW50ICAgICAgICAgIHJfZGF5OyAgICAgIC8qIGRheSBudW1iZXIgb2YgcnVsZSAqLwotICAgIGludCAgICAgICAgICByX3dlZWs7ICAgICAvKiB3ZWVrIG51bWJlciBvZiBydWxlICovCi0gICAgaW50ICAgICAgICAgIHJfbW9uOyAgICAgIC8qIG1vbnRoIG51bWJlciBvZiBydWxlICovCi0gICAgaW50X2Zhc3QzMl90IHJfdGltZTsgICAgIC8qIHRyYW5zaXRpb24gdGltZSBvZiBydWxlICovCisgICAgaW50ICAgICAgICAgIHJfdHlwZTsgLyogdHlwZSBvZiBydWxlOyBzZWUgYmVsb3cgKi8KKyAgICBpbnQgICAgICAgICAgcl9kYXk7ICAvKiBkYXkgbnVtYmVyIG9mIHJ1bGUgKi8KKyAgICBpbnQgICAgICAgICAgcl93ZWVrOyAvKiB3ZWVrIG51bWJlciBvZiBydWxlICovCisgICAgaW50ICAgICAgICAgIHJfbW9uOyAgLyogbW9udGggbnVtYmVyIG9mIHJ1bGUgKi8KKyAgICBpbnRfZmFzdDMyX3Qgcl90aW1lOyAvKiB0cmFuc2l0aW9uIHRpbWUgb2YgcnVsZSAqLwogfTsKIAotI2RlZmluZSBKVUxJQU5fREFZICAgICAgMCAgIC8qIEpuIC0gSnVsaWFuIGRheSAqLwotI2RlZmluZSBEQVlfT0ZfWUVBUiAgICAgMSAgIC8qIG4gLSBkYXkgb2YgeWVhciAqLwotI2RlZmluZSBNT05USF9OVEhfREFZX09GX1dFRUsgICAyICAgLyogTW0ubi5kIC0gbW9udGgsIHdlZWssIGRheSBvZiB3ZWVrICovCisjZGVmaW5lIEpVTElBTl9EQVkgICAgICAgICAgICAgMCAgICAgICAvKiBKbiA9IEp1bGlhbiBkYXkgKi8KKyNkZWZpbmUgREFZX09GX1lFQVIgICAgICAgICAgICAxICAgICAgIC8qIG4gPSBkYXkgb2YgeWVhciAqLworI2RlZmluZSBNT05USF9OVEhfREFZX09GX1dFRUsgIDIgICAgICAgLyogTW0ubi5kID0gbW9udGgsIHdlZWssIGRheSBvZiB3ZWVrICovCiAKIC8qCiAqKiBQcm90b3R5cGVzIGZvciBzdGF0aWMgZnVuY3Rpb25zLgpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAKIHN0YXRpYyBpbnQgX19iaW9uaWNfb3Blbl90emRhdGEoY29uc3QgY2hhciosIGludCopOwogc3RhdGljIGludF9mYXN0MzJfdCBkZXR6Y29kZShjb25zdCBjaGFyICogY29kZXApOwotc3RhdGljIHRpbWVfdCAgIGRldHpjb2RlNjQoY29uc3QgY2hhciAqIGNvZGVwKTsKK3N0YXRpYyBpbnRfZmFzdDY0X3QgZGV0emNvZGU2NChjb25zdCBjaGFyICogY29kZXApOwogc3RhdGljIGludCAgICAgIGRpZmZlcl9ieV9yZXBlYXQodGltZV90IHQxLCB0aW1lX3QgdDApOwogc3RhdGljIGNvbnN0IGNoYXIgKiBnZXR6bmFtZShjb25zdCBjaGFyICogc3RycCkgQVRUUklCVVRFX1BVUkU7CiBzdGF0aWMgY29uc3QgY2hhciAqIGdldHF6bmFtZShjb25zdCBjaGFyICogc3RycCwgY29uc3QgaW50IGRlbGltKQpAQCAtMTU4LDEzICsxNTgsMTQgQEAKIHN0YXRpYyBjb25zdCBjaGFyICogZ2V0b2Zmc2V0KGNvbnN0IGNoYXIgKiBzdHJwLCBpbnRfZmFzdDMyX3QgKiBvZmZzZXRwKTsKIHN0YXRpYyBjb25zdCBjaGFyICogZ2V0cnVsZShjb25zdCBjaGFyICogc3RycCwgc3RydWN0IHJ1bGUgKiBydWxlcCk7CiBzdGF0aWMgdm9pZCAgICAgZ210bG9hZChzdHJ1Y3Qgc3RhdGUgKiBzcCk7Ci1zdGF0aWMgc3RydWN0IHRtICogIGdtdHN1Yihjb25zdCB0aW1lX3QgKiB0aW1lcCwgY29uc3QgaW50X2Zhc3QzMl90IG9mZnNldCwKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKiB0bXAsIGNvbnN0IHN0cnVjdCBzdGF0ZSAqIHNwKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KK3N0YXRpYyBzdHJ1Y3QgdG0gKiAgZ210c3ViKGNvbnN0IHRpbWVfdCAqIHRpbWVwLCBpbnRfZmFzdDMyX3Qgb2Zmc2V0LAorICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqIHRtcCwgc3RydWN0IHN0YXRlICogc3ApOyAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwLgogc3RhdGljIHN0cnVjdCB0bSAqICBsb2NhbHN1Yihjb25zdCB0aW1lX3QgKiB0aW1lcCwgaW50X2Zhc3QzMl90IG9mZnNldCwKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKiB0bXAsIGNvbnN0IHN0cnVjdCBzdGF0ZSAqIHNwKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKiB0bXAsIHN0cnVjdCBzdGF0ZSAqIHNwKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KIHN0YXRpYyBpbnQgICAgICBpbmNyZW1lbnRfb3ZlcmZsb3coaW50ICogbnVtYmVyLCBpbnQgZGVsdGEpOwogc3RhdGljIGludCAgICAgIGxlYXBzX3RocnVfZW5kX29mKGludCB5KSBBVFRSSUJVVEVfUFVSRTsKIHN0YXRpYyBpbnQgICAgICBpbmNyZW1lbnRfb3ZlcmZsb3czMihpbnRfZmFzdDMyX3QgKiBudW1iZXIsIGludCBkZWx0YSk7CitzdGF0aWMgaW50ICAgICAgaW5jcmVtZW50X292ZXJmbG93X3RpbWUodGltZV90ICp0LCBpbnRfZmFzdDMyX3QgZGVsdGEpOwogc3RhdGljIGludCAgICAgIG5vcm1hbGl6ZV9vdmVyZmxvdzMyKGludF9mYXN0MzJfdCAqIHRlbnNwdHIsCiAgICAgICAgICAgICAgICAgaW50ICogdW5pdHNwdHIsIGludCBiYXNlKTsKIHN0YXRpYyBpbnQgICAgICBub3JtYWxpemVfb3ZlcmZsb3coaW50ICogdGVuc3B0ciwgaW50ICogdW5pdHNwdHIsCkBAIC0xNzIsMzIgKzE3MywzMiBAQAogc3RhdGljIHZvaWQgICAgIHNldHR6bmFtZSh2b2lkKTsKIHN0YXRpYyB0aW1lX3QgICAgICAgdGltZTEoc3RydWN0IHRtICogdG1wLAogICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqICgqZnVuY3ApKGNvbnN0IHRpbWVfdCAqLAotICAgICAgICAgICAgICAgIGludF9mYXN0MzJfdCwgc3RydWN0IHRtICosIGNvbnN0IHN0cnVjdCBzdGF0ZSAqKSwgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzdGF0ZSouCi0gICAgICAgICAgICAgICAgaW50X2Zhc3QzMl90IG9mZnNldCwgY29uc3Qgc3RydWN0IHN0YXRlICogc3ApOyAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwLgotc3RhdGljIHRpbWVfdCAgICAgICB0aW1lMihzdHJ1Y3QgdG0gKiBjb25zdCB0bXAsCi0gICAgICAgICAgICAgICAgc3RydWN0IHRtICogKCpjb25zdCBmdW5jcCkoY29uc3QgdGltZV90ICosCi0gICAgICAgICAgICAgICAgaW50X2Zhc3QzMl90LCBzdHJ1Y3QgdG0qLCBjb25zdCBzdHJ1Y3Qgc3RhdGUgKiksIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3RhdGUqLgotICAgICAgICAgICAgICAgIGludF9mYXN0MzJfdCBvZmZzZXQsIGludCAqIG9rYXlwLCBjb25zdCBzdHJ1Y3Qgc3RhdGUgKiBzcCk7IC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCisgICAgICAgICAgICAgICAgaW50X2Zhc3QzMl90LCBzdHJ1Y3QgdG0gKiwgc3RydWN0IHN0YXRlICopLCAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHN0YXRlKi4KKyAgICAgICAgICAgICAgICBpbnRfZmFzdDMyX3QsIHN0cnVjdCBzdGF0ZSAqIHNwKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KK3N0YXRpYyB0aW1lX3QgICAgICAgdGltZTIoc3RydWN0IHRtICogdG1wLAorICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqICgqZnVuY3ApKGNvbnN0IHRpbWVfdCAqLAorICAgICAgICAgICAgICAgIGludF9mYXN0MzJfdCwgc3RydWN0IHRtKiwgc3RydWN0IHN0YXRlICopLCAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHN0YXRlKi4KKyAgICAgICAgICAgICAgICBpbnRfZmFzdDMyX3Qgb2Zmc2V0LCBpbnQgKiBva2F5cCwgc3RydWN0IHN0YXRlICogc3ApOyAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwLgogc3RhdGljIHRpbWVfdCAgICAgICB0aW1lMnN1YihzdHJ1Y3QgdG0gKnRtcCwKICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKiAoKmZ1bmNwKSAoY29uc3QgdGltZV90ICosCi0gICAgICAgICAgICAgICAgaW50X2Zhc3QzMl90LCBzdHJ1Y3QgdG0qLCBjb25zdCBzdHJ1Y3Qgc3RhdGUgKiksIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3RhdGUqLgotICAgICAgICAgICAgICAgIGludF9mYXN0MzJfdCBvZmZzZXQsIGludCAqIG9rYXlwLCBpbnQgZG9fbm9ybV9zZWNzLCBjb25zdCBzdHJ1Y3Qgc3RhdGUgKiBzcCk7IC8vIGFuZHJvaWQtY2hhbmdlOiBhZGRlZCBzcC4KKyAgICAgICAgICAgICAgICBpbnRfZmFzdDMyX3QsIHN0cnVjdCB0bSosIHN0cnVjdCBzdGF0ZSAqKSwgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzdGF0ZSouCisgICAgICAgICAgICAgICAgaW50X2Zhc3QzMl90IG9mZnNldCwgaW50ICogb2theXAsIGludCBkb19ub3JtX3NlY3MsIHN0cnVjdCBzdGF0ZSAqIHNwKTsgLy8gYW5kcm9pZC1jaGFuZ2U6IGFkZGVkIHNwLgogc3RhdGljIHN0cnVjdCB0bSAqICB0aW1lc3ViKGNvbnN0IHRpbWVfdCAqIHRpbWVwLCBpbnRfZmFzdDMyX3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzdGF0ZSAqIHNwLCBzdHJ1Y3QgdG0gKiB0bXApOwogc3RhdGljIGludCAgICAgIHRtY29tcChjb25zdCBzdHJ1Y3QgdG0gKiBhdG1wLAogICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0bSAqIGJ0bXApOwotc3RhdGljIHRpbWVfdCB0cmFuc3RpbWUodGltZV90IGphbmZpcnN0LCBpbnQgeWVhciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBydWxlICogcnVsZXAsIGludF9mYXN0MzJfdCBvZmZzZXQpCitzdGF0aWMgaW50X2Zhc3QzMl90IHRyYW5zdGltZShpbnQgeWVhciwgY29uc3Qgc3RydWN0IHJ1bGUgKiBydWxlcCwKKyAgICAgICAgICAgICAgICBpbnRfZmFzdDMyX3Qgb2Zmc2V0KQogICAgICAgICBBVFRSSUJVVEVfUFVSRTsKLXN0YXRpYyBpbnQJCXR5cGVzZXF1aXYoY29uc3Qgc3RydWN0IHN0YXRlICogc3AsIGludCBhLCBpbnQgYik7CitzdGF0aWMgaW50ICAgICAgdHlwZXNlcXVpdihjb25zdCBzdHJ1Y3Qgc3RhdGUgKiBzcCwgaW50IGEsIGludCBiKTsKIHN0YXRpYyBpbnQgICAgICB0emxvYWQoY29uc3QgY2hhciAqIG5hbWUsIHN0cnVjdCBzdGF0ZSAqIHNwLAogICAgICAgICAgICAgICAgIGludCBkb2V4dGVuZCk7CiBzdGF0aWMgaW50ICAgICAgdHpwYXJzZShjb25zdCBjaGFyICogbmFtZSwgc3RydWN0IHN0YXRlICogc3AsCiAgICAgICAgICAgICAgICAgaW50IGxhc3RkaXRjaCk7CiAKICNpZmRlZiBBTExfU1RBVEUKLXN0YXRpYyBzdHJ1Y3Qgc3RhdGUgKiAgIGxjbHB0cjsKLXN0YXRpYyBzdHJ1Y3Qgc3RhdGUgKiAgIGdtdHB0cjsKK3N0YXRpYyBzdHJ1Y3Qgc3RhdGUgKiBsY2xwdHI7CitzdGF0aWMgc3RydWN0IHN0YXRlICogZ210cHRyOwogI2VuZGlmIC8qIGRlZmluZWQgQUxMX1NUQVRFICovCiAKICNpZm5kZWYgQUxMX1NUQVRFCkBAIC0yMTEsMTMgKzIxMiwxMyBAQAogI2RlZmluZSBUWl9TVFJMRU5fTUFYIDI1NQogI2VuZGlmIC8qICFkZWZpbmVkIFRaX1NUUkxFTl9NQVggKi8KIAotc3RhdGljIGNoYXIgICAgIGxjbF9UWm5hbWVbVFpfU1RSTEVOX01BWCArIDFdOwotc3RhdGljIGludCAgICAgIGxjbF9pc19zZXQ7Ci1zdGF0aWMgaW50ICAgICAgZ210X2lzX3NldDsKK3N0YXRpYyBjaGFyIGxjbF9UWm5hbWVbVFpfU1RSTEVOX01BWCArIDFdOworc3RhdGljIGludCAgbGNsX2lzX3NldDsKK3N0YXRpYyBpbnQgIGdtdF9pc19zZXQ7CiAKLWNoYXIgKiAgICAgICAgICB0em5hbWVbMl0gPSB7Ci0gICAgd2lsZGFiYnIsCi0gICAgd2lsZGFiYnIKK2NoYXIgKiB0em5hbWVbMl0gPSB7CisgICAgKGNoYXIgKikgd2lsZGFiYnIsCisgICAgKGNoYXIgKikgd2lsZGFiYnIKIH07CiAKIC8qCkBAIC0yMzEsNDYgKzIzMiw0NSBAQAogc3RhdGljIHN0cnVjdCB0bSAgICB0bUdsb2JhbDsKIAogI2lmZGVmIFVTR19DT01QQVQKLWxvbmcJCQl0aW1lem9uZSA9IDA7Ci1pbnQJCQlkYXlsaWdodCA9IDA7Citsb25nICAgICAgICAgICAgICAgIHRpbWV6b25lID0gMDsKK2ludCAgICAgICAgICAgICAgICAgZGF5bGlnaHQgPSAwOwogI2VuZGlmIC8qIGRlZmluZWQgVVNHX0NPTVBBVCAqLwogCiAjaWZkZWYgQUxUWk9ORQotbG9uZwkJCWFsdHpvbmUgPSAwOworbG9uZyAgICAgICAgICAgICAgICBhbHR6b25lID0gMDsKICNlbmRpZiAvKiBkZWZpbmVkIEFMVFpPTkUgKi8KIAogc3RhdGljIGludF9mYXN0MzJfdAogZGV0emNvZGUoY29uc3QgY2hhciAqY29uc3QgY29kZXApCiB7Ci0JcmVnaXN0ZXIgaW50X2Zhc3QzMl90CXJlc3VsdDsKLQlyZWdpc3RlciBpbnQJCWk7CisgICAgcmVnaXN0ZXIgaW50X2Zhc3QzMl90IHJlc3VsdDsKKyAgICByZWdpc3RlciBpbnQgICAgICAgICAgaTsKIAotCXJlc3VsdCA9IChjb2RlcFswXSAmIDB4ODApID8gLTEgOiAwOwotCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCi0JCXJlc3VsdCA9IChyZXN1bHQgPDwgOCkgfCAoY29kZXBbaV0gJiAweGZmKTsKLQlyZXR1cm4gcmVzdWx0OworICAgIHJlc3VsdCA9IChjb2RlcFswXSAmIDB4ODApID8gLTEgOiAwOworICAgIGZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgIHJlc3VsdCA9IChyZXN1bHQgPDwgOCkgfCAoY29kZXBbaV0gJiAweGZmKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdGltZV90CitzdGF0aWMgaW50X2Zhc3Q2NF90CiBkZXR6Y29kZTY0KGNvbnN0IGNoYXIgKmNvbnN0IGNvZGVwKQogewotCXJlZ2lzdGVyIHRpbWVfdAlyZXN1bHQ7Ci0JcmVnaXN0ZXIgaW50CWk7CisgICAgcmVnaXN0ZXIgaW50X2Zhc3Q2NF90IHJlc3VsdDsKKyAgICByZWdpc3RlciBpbnQgICAgICAgICAgaTsKIAotCXJlc3VsdCA9IChjb2RlcFswXSAmIDB4ODApID8gICh+KGludF9mYXN0NjRfdCkgMCkgOiAwOwotCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCi0JCXJlc3VsdCA9IHJlc3VsdCAqIDI1NiArIChjb2RlcFtpXSAmIDB4ZmYpOwotCXJldHVybiByZXN1bHQ7CisgICAgcmVzdWx0ID0gKGNvZGVwWzBdICYgMHg4MCkgPyAtMSA6IDA7CisgICAgZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKyAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA8PCA4KSB8IChjb2RlcFtpXSAmIDB4ZmYpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyB2b2lkCiBzZXR0em5hbWUodm9pZCkKIHsKLSAgICByZWdpc3RlciBzdHJ1Y3Qgc3RhdGUgKiBjb25zdCAgIHNwID0gbGNscHRyOwotICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIGk7CisgICAgcmVnaXN0ZXIgc3RydWN0IHN0YXRlICogY29uc3Qgc3AgPSBsY2xwdHI7CisgICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgICAgICAgaTsKIAotICAgIHR6bmFtZVswXSA9IHdpbGRhYmJyOwotICAgIHR6bmFtZVsxXSA9IHdpbGRhYmJyOworICAgIHR6bmFtZVswXSA9IHR6bmFtZVsxXSA9IChjaGFyICopIHdpbGRhYmJyOwogI2lmZGVmIFVTR19DT01QQVQKICAgICBkYXlsaWdodCA9IDA7CiAgICAgdGltZXpvbmUgPSAwOwpAQCAtMjc4LDEyICsyNzgsMTAgQEAKICNpZmRlZiBBTFRaT05FCiAgICAgYWx0em9uZSA9IDA7CiAjZW5kaWYgLyogZGVmaW5lZCBBTFRaT05FICovCi0jaWZkZWYgQUxMX1NUQVRFCiAgICAgaWYgKHNwID09IE5VTEwpIHsKLSAgICAgICAgdHpuYW1lWzBdID0gdHpuYW1lWzFdID0gZ210OworICAgICAgICB0em5hbWVbMF0gPSB0em5hbWVbMV0gPSAoY2hhciAqKSBnbXQ7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0jZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KICAgICAvKgogICAgICoqIEFuZCB0byBnZXQgdGhlIGxhdGVzdCB6b25lIG5hbWVzIGludG8gdHpuYW1lLiAuIC4KICAgICAqLwpAQCAtMzMxLDEyICszMjksMTIgQEAKIH0KIAogc3RhdGljIGludAotZGlmZmVyX2J5X3JlcGVhdChjb25zdCB0aW1lX3QgdDEsIGNvbnN0IHRpbWVfdCB0MCkKK2RpZmZlcl9ieV9yZXBlYXQoY29uc3QgdGltZV90IHQxIF9fdW51c2VkLCBjb25zdCB0aW1lX3QgdDAgX191bnVzZWQpCiB7Ci0JaWYgKFRZUEVfQklUKHRpbWVfdCkgLSBUWVBFX1NJR05FRCh0aW1lX3QpIDwgU0VDU1BFUlJFUEVBVF9CSVRTKQotCQkJcmV0dXJuIDA7Ci0jaWYgX19MUDY0X18gLy8gMzItYml0IEFuZHJvaWQgb25seSBoYXMgYSBzaWduZWQgMzItYml0IHRpbWVfdDsgNjQtYml0IEFuZHJvaWQgaXMgZml4ZWQuCi0JcmV0dXJuIHQxIC0gdDAgPT0gU0VDU1BFUlJFUEVBVDsKKyAgICBpZiAoVFlQRV9CSVQodGltZV90KSAtIFRZUEVfU0lHTkVEKHRpbWVfdCkgPCBTRUNTUEVSUkVQRUFUX0JJVFMpCisgICAgICAgIHJldHVybiAwOworI2lmIGRlZmluZWQoX19MUDY0X18pIC8vIDMyLWJpdCBBbmRyb2lkIG9ubHkgaGFzIGEgc2lnbmVkIDMyLWJpdCB0aW1lX3Q7IDY0LWJpdCBBbmRyb2lkIGlzIGZpeGVkLgorICAgIHJldHVybiB0MSAtIHQwID09IFNFQ1NQRVJSRVBFQVQ7CiAjZW5kaWYKIH0KIApAQCAtMzQ0LDQyICszNDIsNjcgQEAKIHR6bG9hZChyZWdpc3RlciBjb25zdCBjaGFyKiBuYW1lLCByZWdpc3RlciBzdHJ1Y3Qgc3RhdGUqIGNvbnN0IHNwLAogICAgICAgIHJlZ2lzdGVyIGNvbnN0IGludCBkb2V4dGVuZCkKIHsKLSAgICByZWdpc3RlciBjb25zdCBjaGFyICogICAgICAgcDsKLSAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBpOwotICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIGZpZDsKLSAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBzdG9yZWQ7Ci0gICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgbnJlYWQ7CisgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqIHA7CisgICAgcmVnaXN0ZXIgaW50ICAgICAgICAgIGk7CisgICAgcmVnaXN0ZXIgaW50ICAgICAgICAgIGZpZDsKKyAgICByZWdpc3RlciBpbnQgICAgICAgICAgc3RvcmVkOworICAgIHJlZ2lzdGVyIGludCAgICAgICAgICBucmVhZDsKICAgICB0eXBlZGVmIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHR6aGVhZCAgIHR6aGVhZDsKLSAgICAgICAgY2hhciAgICAgICAgYnVmWzIgKiBzaXplb2Yoc3RydWN0IHR6aGVhZCkgKwotICAgICAgICAgICAgICAgICAgICAyICogc2l6ZW9mICpzcCArCi0gICAgICAgICAgICAgICAgICAgIDQgKiBUWl9NQVhfVElNRVNdOworICAgICAgICBzdHJ1Y3QgdHpoZWFkIHR6aGVhZDsKKyAgICAgICAgY2hhciAgICAgICAgICBidWZbMiAqIHNpemVvZihzdHJ1Y3QgdHpoZWFkKSArCisgICAgICAgICAgICAgICAgICAgICAgMiAqIHNpemVvZiAqc3AgKworICAgICAgICAgICAgICAgICAgICAgIDQgKiBUWl9NQVhfVElNRVNdOwogICAgIH0gdV90OwotI2lmZGVmIEFMTF9TVEFURQotICAgIHJlZ2lzdGVyIHVfdCAqCQkJdXA7CisgICAgdW5pb24gbG9jYWxfc3RvcmFnZSB7CisgICAgICAgIC8qCisgICAgICAgICoqIFNlY3Rpb24gNC45LjEgb2YgdGhlIEMgc3RhbmRhcmQgc2F5cyB0aGF0CisgICAgICAgICoqICJGSUxFTkFNRV9NQVggZXhwYW5kcyB0byBhbiBpbnRlZ3JhbCBjb25zdGFudCBleHByZXNzaW9uCisgICAgICAgICoqIHRoYXQgaXMgdGhlIHNpemUgbmVlZGVkIGZvciBhbiBhcnJheSBvZiBjaGFyIGxhcmdlIGVub3VnaAorICAgICAgICAqKiB0byBob2xkIHRoZSBsb25nZXN0IGZpbGUgbmFtZSBzdHJpbmcgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24KKyAgICAgICAgKiogZ3VhcmFudGVlcyBjYW4gYmUgb3BlbmVkLiIKKyAgICAgICAgKi8KKyAgICAgICAgLy9jaGFyICAgICAgICAgICAgZnVsbG5hbWVbRklMRU5BTUVfTUFYICsgMV07CiAKLSAgICB1cCA9ICh1X3QgKikgY2FsbG9jKDEsIHNpemVvZiAqdXApOwotICAgIGlmICh1cCA9PSBOVUxMKQorICAgICAgICAvKiBUaGUgbWFpbiBwYXJ0IG9mIHRoZSBzdG9yYWdlIGZvciB0aGlzIGZ1bmN0aW9uLiAgKi8KKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVfdCB1OworICAgICAgICAgICAgc3RydWN0IHN0YXRlIHN0OworICAgICAgICB9IHU7CisgICAgfTsKKyAgICAvL3JlZ2lzdGVyIGNoYXIgKmZ1bGxuYW1lOworICAgIHJlZ2lzdGVyIHVfdCAqdXA7CisgICAgcmVnaXN0ZXIgdW5pb24gbG9jYWxfc3RvcmFnZSAqbHNwOworI2lmZGVmIEFMTF9TVEFURQorICAgIGxzcCA9IG1hbGxvYyhzaXplb2YgKmxzcCk7CisgICAgaWYgKCFsc3ApCiAgICAgICAgIHJldHVybiAtMTsKICNlbHNlIC8qICFkZWZpbmVkIEFMTF9TVEFURSAqLwotICAgIHVfdAkJCQl1OwotICAgIHJlZ2lzdGVyIHVfdCAqIGNvbnN0CQl1cCA9ICZ1OworICAgIHVuaW9uIGxvY2FsX3N0b3JhZ2UgbHM7CisgICAgbHNwID0gJmxzOwogI2VuZGlmIC8qICFkZWZpbmVkIEFMTF9TVEFURSAqLworICAgIC8vZnVsbG5hbWUgPSBsc3AtPmZ1bGxuYW1lOworICAgIHVwID0gJmxzcC0+dS51OwogCiAgICAgc3AtPmdvYmFjayA9IHNwLT5nb2FoZWFkID0gRkFMU0U7Ci0gICAgaWYgKG5hbWUgPT0gTlVMTCAmJiAobmFtZSA9IFRaREVGQVVMVCkgPT0gTlVMTCkKLSAgICAgICAgZ290byBvb3BzOworCisgICAgaWYgKCEgbmFtZSkgeworICAgICAgICBuYW1lID0gVFpERUZBVUxUOworICAgICAgICBpZiAoISBuYW1lKQorICAgICAgICAgICAgZ290byBvb3BzOworICAgIH0KKwogICAgIGludCB0b3JlYWQ7CiAgICAgZmlkID0gX19iaW9uaWNfb3Blbl90emRhdGEobmFtZSwgJnRvcmVhZCk7Ci0gICAgaWYgKGZpZCA8IDApIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBucmVhZCA9IHJlYWQoZmlkLCB1cC0+YnVmLCB0b3JlYWQpOworICAgIGlmIChmaWQgPCAwKQorICAgICAgICBnb3RvIG9vcHM7CisKKyAgICBucmVhZCA9IHJlYWQoZmlkLCB1cC0+YnVmLCBzaXplb2YgdXAtPmJ1Zik7CiAgICAgaWYgKGNsb3NlKGZpZCkgPCAwIHx8IG5yZWFkIDw9IDApCiAgICAgICAgIGdvdG8gb29wczsKICAgICBmb3IgKHN0b3JlZCA9IDQ7IHN0b3JlZCA8PSA4OyBzdG9yZWQgKj0gMikgewotICAgICAgICBpbnQgICAgIHR0aXNzdGRjbnQ7Ci0gICAgICAgIGludCAgICAgdHRpc2dtdGNudDsKKyAgICAgICAgaW50IHR0aXNzdGRjbnQ7CisgICAgICAgIGludCB0dGlzZ210Y250OworICAgICAgICBpbnQgdGltZWNudDsKIAogICAgICAgICB0dGlzc3RkY250ID0gKGludCkgZGV0emNvZGUodXAtPnR6aGVhZC50emhfdHRpc3N0ZGNudCk7CiAgICAgICAgIHR0aXNnbXRjbnQgPSAoaW50KSBkZXR6Y29kZSh1cC0+dHpoZWFkLnR6aF90dGlzZ210Y250KTsKQEAgLTM5NiwyNCArNDE5LDQ1IEBACiAgICAgICAgICAgICAodHRpc2dtdGNudCAhPSBzcC0+dHlwZWNudCAmJiB0dGlzZ210Y250ICE9IDApKQogICAgICAgICAgICAgICAgIGdvdG8gb29wczsKICAgICAgICAgaWYgKG5yZWFkIC0gKHAgLSB1cC0+YnVmKSA8Ci0gICAgICAgICAgICBzcC0+dGltZWNudCAqIHN0b3JlZCArICAgICAgLyogYXRzICovCi0gICAgICAgICAgICBzcC0+dGltZWNudCArICAgICAgICAgICAvKiB0eXBlcyAqLwotICAgICAgICAgICAgc3AtPnR5cGVjbnQgKiA2ICsgICAgICAgLyogdHRpbmZvcyAqLwotICAgICAgICAgICAgc3AtPmNoYXJjbnQgKyAgICAgICAgICAgLyogY2hhcnMgKi8KLSAgICAgICAgICAgIHNwLT5sZWFwY250ICogKHN0b3JlZCArIDQpICsgICAgLyogbHNpbmZvcyAqLwotICAgICAgICAgICAgdHRpc3N0ZGNudCArICAgICAgICAgICAgLyogdHRpc3N0ZHMgKi8KLSAgICAgICAgICAgIHR0aXNnbXRjbnQpICAgICAgICAgLyogdHRpc2dtdHMgKi8KKyAgICAgICAgICAgIHNwLT50aW1lY250ICogc3RvcmVkICsgICAgICAgLyogYXRzICovCisgICAgICAgICAgICBzcC0+dGltZWNudCArICAgICAgICAgICAgICAgIC8qIHR5cGVzICovCisgICAgICAgICAgICBzcC0+dHlwZWNudCAqIDYgKyAgICAgICAgICAgIC8qIHR0aW5mb3MgKi8KKyAgICAgICAgICAgIHNwLT5jaGFyY250ICsgICAgICAgICAgICAgICAgLyogY2hhcnMgKi8KKyAgICAgICAgICAgIHNwLT5sZWFwY250ICogKHN0b3JlZCArIDQpICsgLyogbHNpbmZvcyAqLworICAgICAgICAgICAgdHRpc3N0ZGNudCArICAgICAgICAgICAgICAgICAvKiB0dGlzc3RkcyAqLworICAgICAgICAgICAgdHRpc2dtdGNudCkgICAgICAgICAgICAgICAgICAvKiB0dGlzZ210cyAqLwogICAgICAgICAgICAgICAgIGdvdG8gb29wczsKKyAgICAgICAgdGltZWNudCA9IDA7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzcC0+dGltZWNudDsgKytpKSB7Ci0gICAgICAgICAgICBzcC0+YXRzW2ldID0gKHN0b3JlZCA9PSA0KSA/Ci0gICAgICAgICAgICAgICAgZGV0emNvZGUocCkgOiBkZXR6Y29kZTY0KHApOworICAgICAgICAgICAgaW50X2Zhc3Q2NF90IGF0CisgICAgICAgICAgICAgID0gc3RvcmVkID09IDQgPyBkZXR6Y29kZShwKSA6IGRldHpjb2RlNjQocCk7CisgICAgICAgICAgICBzcC0+dHlwZXNbaV0gPSAoKFRZUEVfU0lHTkVEKHRpbWVfdCkKKyAgICAgICAgICAgICAgICAgICAgID8gdGltZV90X21pbiA8PSBhdAorICAgICAgICAgICAgICAgICAgICAgOiAwIDw9IGF0KQorICAgICAgICAgICAgICAgICAgICAmJiBhdCA8PSB0aW1lX3RfbWF4KTsKKyAgICAgICAgICAgIGlmIChzcC0+dHlwZXNbaV0pIHsKKyAgICAgICAgICAgICAgICBpZiAoaSAmJiAhdGltZWNudCAmJiBhdCAhPSB0aW1lX3RfbWluKSB7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICoqIEtlZXAgdGhlIGVhcmxpZXIgcmVjb3JkLCBidXQgdHdlYWsKKyAgICAgICAgICAgICAgICAgICAgKiogaXQgc28gdGhhdCBpdCBzdGFydHMgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgKiogbWluaW11bSB0aW1lX3QgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIHNwLT50eXBlc1tpIC0gMV0gPSAxOworICAgICAgICAgICAgICAgICAgICBzcC0+YXRzW3RpbWVjbnQrK10gPSB0aW1lX3RfbWluOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzcC0+YXRzW3RpbWVjbnQrK10gPSBhdDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHAgKz0gc3RvcmVkOwogICAgICAgICB9CisgICAgICAgIHRpbWVjbnQgPSAwOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3AtPnRpbWVjbnQ7ICsraSkgewotICAgICAgICAgICAgc3AtPnR5cGVzW2ldID0gKHVuc2lnbmVkIGNoYXIpICpwKys7Ci0gICAgICAgICAgICBpZiAoc3AtPnR5cGVzW2ldID49IHNwLT50eXBlY250KQorICAgICAgICAgICAgdW5zaWduZWQgY2hhciB0eXAgPSAqcCsrOworICAgICAgICAgICAgaWYgKHNwLT50eXBlY250IDw9IHR5cCkKICAgICAgICAgICAgICAgICBnb3RvIG9vcHM7CisgICAgICAgICAgICBpZiAoc3AtPnR5cGVzW2ldKQorICAgICAgICAgICAgICAgIHNwLT50eXBlc1t0aW1lY250KytdID0gdHlwOwogICAgICAgICB9CisgICAgICAgIHNwLT50aW1lY250ID0gdGltZWNudDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwLT50eXBlY250OyArK2kpIHsKICAgICAgICAgICAgIHJlZ2lzdGVyIHN0cnVjdCB0dGluZm8gKiAgICB0dGlzcDsKIApAQCAtNDY4LDQ0ICs1MTIsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8qCi0gICAgICAgICoqIE91dC1vZi1zb3J0IGF0cyBzaG91bGQgbWVhbiB3ZSdyZSBydW5uaW5nIG9uIGEKLSAgICAgICAgKiogc2lnbmVkIHRpbWVfdCBzeXN0ZW0gYnV0IHVzaW5nIGEgZGF0YSBmaWxlIHdpdGgKLSAgICAgICAgKiogdW5zaWduZWQgdmFsdWVzIChvciB2aWNlIHZlcnNhKS4KLSAgICAgICAgKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwLT50aW1lY250OyArK2kpCi0gICAgICAgICAgICBpZiAoKGkgPCBzcC0+dGltZWNudCAtIDEgJiYKLSAgICAgICAgICAgICAgICBzcC0+YXRzW2ldID4gc3AtPmF0c1tpICsgMV0pIHx8Ci0gICAgICAgICAgICAgICAgKGkgPT0gc3AtPnRpbWVjbnQgLSAxICYmICFUWVBFX1NJR05FRCh0aW1lX3QpICYmCi0gICAgICAgICAgICAgICAgc3AtPmF0c1tpXSA+Ci0gICAgICAgICAgICAgICAgKChzdG9yZWQgPT0gNCkgPyBJTlQzMl9NQVggOiBJTlQ2NF9NQVgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoVFlQRV9TSUdORUQodGltZV90KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICAgICoqIElnbm9yZSB0aGUgZW5kIChlYXN5KS4KLSAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICBzcC0+dGltZWNudCA9IGkgKyAxOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICAgICoqIElnbm9yZSB0aGUgYmVnaW5uaW5nIChoYXJkZXIpLgotICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCAgICBqOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICAgICAgKiogS2VlcCB0aGUgcmVjb3JkIHJpZ2h0IGJlZm9yZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICoqIGVwb2NoIGJvdW5kYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgKiogYnV0IHR3ZWFrIGl0IHNvIHRoYXQgaXQgc3RhcnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAqKiByaWdodCB3aXRoIHRoZSBlcG9jaAotICAgICAgICAgICAgICAgICAgICAgICAgKiogKHRoYW5rcyB0byBEb3VnIEJhaWxleSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc3AtPmF0c1tpXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqICsgaSA8IHNwLT50aW1lY250OyArK2opIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcC0+YXRzW2pdID0gc3AtPmF0c1tqICsgaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3AtPnR5cGVzW2pdID0gc3AtPnR5cGVzW2ogKyBpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNwLT50aW1lY250ID0gajsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgLyoKICAgICAgICAgKiogSWYgdGhpcyBpcyBhbiBvbGQgZmlsZSwgd2UncmUgZG9uZS4KICAgICAgICAgKi8KICAgICAgICAgaWYgKHVwLT50emhlYWQudHpoX3ZlcnNpb25bMF0gPT0gJ1wwJykKQEAgLTUxNCw0NCArNTIwLDQ0IEBACiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBucmVhZDsgKytpKQogICAgICAgICAgICAgdXAtPmJ1ZltpXSA9IHBbaV07CiAgICAgICAgIC8qCi0gICAgICAgICoqIElmIHRoaXMgaXMgYSBuYXJyb3cgdGltZV90IHN5c3RlbSwgd2UncmUgZG9uZS4KKyAgICAgICAgKiogSWYgdGhpcyBpcyBhIHNpZ25lZCBuYXJyb3cgdGltZV90IHN5c3RlbSwgd2UncmUgZG9uZS4KICAgICAgICAgKi8KLSAgICAgICAgaWYgKHN0b3JlZCA+PSAoaW50KSBzaXplb2YodGltZV90KSkKKyAgICAgICAgaWYgKFRZUEVfU0lHTkVEKHRpbWVfdCkgJiYgc3RvcmVkID49IChpbnQpIHNpemVvZih0aW1lX3QpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmIChkb2V4dGVuZCAmJiBucmVhZCA+IDIgJiYKICAgICAgICAgdXAtPmJ1ZlswXSA9PSAnXG4nICYmIHVwLT5idWZbbnJlYWQgLSAxXSA9PSAnXG4nICYmCiAgICAgICAgIHNwLT50eXBlY250ICsgMiA8PSBUWl9NQVhfVFlQRVMpIHsKLSAgICAgICAgICAgIHN0cnVjdCBzdGF0ZSAgICB0czsKLSAgICAgICAgICAgIHJlZ2lzdGVyIGludCAgICByZXN1bHQ7CisgICAgICAgICAgICBzdHJ1Y3Qgc3RhdGUgICAgKnRzID0gJmxzcC0+dS5zdDsKKyAgICAgICAgICAgIHJlZ2lzdGVyIGludCByZXN1bHQ7CiAKICAgICAgICAgICAgIHVwLT5idWZbbnJlYWQgLSAxXSA9ICdcMCc7Ci0gICAgICAgICAgICByZXN1bHQgPSB0enBhcnNlKCZ1cC0+YnVmWzFdLCAmdHMsIEZBTFNFKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gMCAmJiB0cy50eXBlY250ID09IDIgJiYKLSAgICAgICAgICAgICAgICBzcC0+Y2hhcmNudCArIHRzLmNoYXJjbnQgPD0gVFpfTUFYX0NIQVJTKSB7CisgICAgICAgICAgICByZXN1bHQgPSB0enBhcnNlKCZ1cC0+YnVmWzFdLCB0cywgRkFMU0UpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAwICYmIHRzLT50eXBlY250ID09IDIgJiYKKyAgICAgICAgICAgICAgICBzcC0+Y2hhcmNudCArIHRzLT5jaGFyY250IDw9IFRaX01BWF9DSEFSUykgewogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjsgKytpKQotICAgICAgICAgICAgICAgICAgICAgICAgdHMudHRpc1tpXS50dF9hYmJyaW5kICs9CisgICAgICAgICAgICAgICAgICAgICAgICB0cy0+dHRpc1tpXS50dF9hYmJyaW5kICs9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3AtPmNoYXJjbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cy5jaGFyY250OyArK2kpCisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cy0+Y2hhcmNudDsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc3AtPmNoYXJzW3NwLT5jaGFyY250KytdID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cy5jaGFyc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cy0+Y2hhcnNbaV07CiAgICAgICAgICAgICAgICAgICAgIGkgPSAwOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IHRzLnRpbWVjbnQgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIHRzLmF0c1tpXSA8PQorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IHRzLT50aW1lY250ICYmCisgICAgICAgICAgICAgICAgICAgICAgICB0cy0+YXRzW2ldIDw9CiAgICAgICAgICAgICAgICAgICAgICAgICBzcC0+YXRzW3NwLT50aW1lY250IC0gMV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IHRzLnRpbWVjbnQgJiYKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCB0cy0+dGltZWNudCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgc3AtPnRpbWVjbnQgPCBUWl9NQVhfVElNRVMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHNwLT5hdHNbc3AtPnRpbWVjbnRdID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cy5hdHNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHMtPmF0c1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNwLT50eXBlc1tzcC0+dGltZWNudF0gPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwLT50eXBlY250ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cy50eXBlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cy0+dHlwZXNbaV07CiAgICAgICAgICAgICAgICAgICAgICAgICArK3NwLT50aW1lY250OwogICAgICAgICAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHNwLT50dGlzW3NwLT50eXBlY250KytdID0gdHMudHRpc1swXTsKLSAgICAgICAgICAgICAgICAgICAgc3AtPnR0aXNbc3AtPnR5cGVjbnQrK10gPSB0cy50dGlzWzFdOworICAgICAgICAgICAgICAgICAgICBzcC0+dHRpc1tzcC0+dHlwZWNudCsrXSA9IHRzLT50dGlzWzBdOworICAgICAgICAgICAgICAgICAgICBzcC0+dHRpc1tzcC0+dHlwZWNudCsrXSA9IHRzLT50dGlzWzFdOwogICAgICAgICAgICAgfQogICAgIH0KICAgICBpZiAoc3AtPnRpbWVjbnQgPiAxKSB7CkBAIC02MTgsMzEgKzYyNCwzMSBAQAogc3RhdGljIGludAogdHlwZXNlcXVpdihjb25zdCBzdHJ1Y3Qgc3RhdGUgKmNvbnN0IHNwLCBjb25zdCBpbnQgYSwgY29uc3QgaW50IGIpCiB7Ci0JcmVnaXN0ZXIgaW50CXJlc3VsdDsKKyAgICByZWdpc3RlciBpbnQgcmVzdWx0OwogCi0JaWYgKHNwID09IE5VTEwgfHwKLQkJYSA8IDAgfHwgYSA+PSBzcC0+dHlwZWNudCB8fAotCQliIDwgMCB8fCBiID49IHNwLT50eXBlY250KQotCQkJcmVzdWx0ID0gRkFMU0U7Ci0JZWxzZSB7Ci0JCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0dGluZm8gKglhcCA9ICZzcC0+dHRpc1thXTsKLQkJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHR0aW5mbyAqCWJwID0gJnNwLT50dGlzW2JdOwotCQlyZXN1bHQgPSBhcC0+dHRfZ210b2ZmID09IGJwLT50dF9nbXRvZmYgJiYKLQkJCWFwLT50dF9pc2RzdCA9PSBicC0+dHRfaXNkc3QgJiYKLQkJCWFwLT50dF90dGlzc3RkID09IGJwLT50dF90dGlzc3RkICYmCi0JCQlhcC0+dHRfdHRpc2dtdCA9PSBicC0+dHRfdHRpc2dtdCAmJgotCQkJc3RyY21wKCZzcC0+Y2hhcnNbYXAtPnR0X2FiYnJpbmRdLAotCQkJJnNwLT5jaGFyc1ticC0+dHRfYWJicmluZF0pID09IDA7Ci0JfQotCXJldHVybiByZXN1bHQ7CisgICAgaWYgKHNwID09IE5VTEwgfHwKKyAgICAgICAgYSA8IDAgfHwgYSA+PSBzcC0+dHlwZWNudCB8fAorICAgICAgICBiIDwgMCB8fCBiID49IHNwLT50eXBlY250KQorICAgICAgICAgICAgcmVzdWx0ID0gRkFMU0U7CisgICAgZWxzZSB7CisgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0dGluZm8gKiAgYXAgPSAmc3AtPnR0aXNbYV07CisgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0dGluZm8gKiAgYnAgPSAmc3AtPnR0aXNbYl07CisgICAgICAgIHJlc3VsdCA9IGFwLT50dF9nbXRvZmYgPT0gYnAtPnR0X2dtdG9mZiAmJgorICAgICAgICAgICAgYXAtPnR0X2lzZHN0ID09IGJwLT50dF9pc2RzdCAmJgorICAgICAgICAgICAgYXAtPnR0X3R0aXNzdGQgPT0gYnAtPnR0X3R0aXNzdGQgJiYKKyAgICAgICAgICAgIGFwLT50dF90dGlzZ210ID09IGJwLT50dF90dGlzZ210ICYmCisgICAgICAgICAgICBzdHJjbXAoJnNwLT5jaGFyc1thcC0+dHRfYWJicmluZF0sCisgICAgICAgICAgICAmc3AtPmNoYXJzW2JwLT50dF9hYmJyaW5kXSkgPT0gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGNvbnN0IGludCAgICBtb25fbGVuZ3Roc1syXVtNT05TUEVSWUVBUl0gPSB7CitzdGF0aWMgY29uc3QgaW50IG1vbl9sZW5ndGhzWzJdW01PTlNQRVJZRUFSXSA9IHsKICAgICB7IDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzEgfSwKICAgICB7IDMxLCAyOSwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzEgfQogfTsKIAotc3RhdGljIGNvbnN0IGludCAgICB5ZWFyX2xlbmd0aHNbMl0gPSB7CitzdGF0aWMgY29uc3QgaW50IHllYXJfbGVuZ3Roc1syXSA9IHsKICAgICBEQVlTUEVSTllFQVIsIERBWVNQRVJMWUVBUgogfTsKIApAQCAtNjc1LDcgKzY4MSw3IEBACiBzdGF0aWMgY29uc3QgY2hhciAqCiBnZXRxem5hbWUocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RycCwgY29uc3QgaW50IGRlbGltKQogewotICAgIHJlZ2lzdGVyIGludCAgICBjOworICAgIHJlZ2lzdGVyIGludCBjOwogCiAgICAgd2hpbGUgKChjID0gKnN0cnApICE9ICdcMCcgJiYgYyAhPSBkZWxpbSkKICAgICAgICAgKytzdHJwOwpAQCAtNjkyLDggKzY5OCw4IEBACiBzdGF0aWMgY29uc3QgY2hhciAqCiBnZXRudW0ocmVnaXN0ZXIgY29uc3QgY2hhciAqIHN0cnAsIGludCAqIGNvbnN0IG51bXAsIGNvbnN0IGludCBtaW4sIGNvbnN0IGludCBtYXgpCiB7Ci0gICAgcmVnaXN0ZXIgY2hhciAgIGM7Ci0gICAgcmVnaXN0ZXIgaW50ICAgIG51bTsKKyAgICByZWdpc3RlciBjaGFyIGM7CisgICAgcmVnaXN0ZXIgaW50ICBudW07CiAKICAgICBpZiAoc3RycCA9PSBOVUxMIHx8ICFpc19kaWdpdChjID0gKnN0cnApKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTcyNCwxMCArNzMwLDEwIEBACiAgICAgaW50IG51bTsKIAogICAgIC8qCi0gICAgKiogYEhPVVJTUEVSREFZICogREFZU1BFUldFRUsgLSAxJyBhbGxvd3MgcXVhc2ktUG9zaXggcnVsZXMgbGlrZQorICAgICoqICdIT1VSU1BFUkRBWSAqIERBWVNQRVJXRUVLIC0gMScgYWxsb3dzIHF1YXNpLVBvc2l4IHJ1bGVzIGxpa2UKICAgICAqKiAiTTEwLjQuNi8yNiIsIHdoaWNoIGRvZXMgbm90IGNvbmZvcm0gdG8gUG9zaXgsCiAgICAgKiogYnV0IHdoaWNoIHNwZWNpZmllcyB0aGUgZXF1aXZhbGVudCBvZgotICAgICoqIGBgMDI6MDAgb24gdGhlIGZpcnN0IFN1bmRheSBvbiBvciBhZnRlciAyMyBPY3QnJy4KKyAgICAqKiAiMDI6MDAgb24gdGhlIGZpcnN0IFN1bmRheSBvbiBvciBhZnRlciAyMyBPY3QiLgogICAgICovCiAgICAgc3RycCA9IGdldG51bShzdHJwLCAmbnVtLCAwLCBIT1VSU1BFUkRBWSAqIERBWVNQRVJXRUVLIC0gMSk7CiAgICAgaWYgKHN0cnAgPT0gTlVMTCkKQEAgLTc0MSw3ICs3NDcsNyBAQAogICAgICAgICAqc2Vjc3AgKz0gbnVtICogU0VDU1BFUk1JTjsKICAgICAgICAgaWYgKCpzdHJwID09ICc6JykgewogICAgICAgICAgICAgKytzdHJwOwotICAgICAgICAgICAgLyogYFNFQ1NQRVJNSU4nIGFsbG93cyBmb3IgbGVhcCBzZWNvbmRzLiAqLworICAgICAgICAgICAgLyogJ1NFQ1NQRVJNSU4nIGFsbG93cyBmb3IgbGVhcCBzZWNvbmRzLiAqLwogICAgICAgICAgICAgc3RycCA9IGdldG51bShzdHJwLCAmbnVtLCAwLCBTRUNTUEVSTUlOKTsKICAgICAgICAgICAgIGlmIChzdHJwID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03NjEsNyArNzY3LDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyICoKIGdldG9mZnNldChyZWdpc3RlciBjb25zdCBjaGFyICpzdHJwLCBpbnRfZmFzdDMyX3QgKmNvbnN0IG9mZnNldHApCiB7Ci0gICAgcmVnaXN0ZXIgaW50ICAgIG5lZyA9IDA7CisgICAgcmVnaXN0ZXIgaW50IG5lZyA9IDA7CiAKICAgICBpZiAoKnN0cnAgPT0gJy0nKSB7CiAgICAgICAgIG5lZyA9IDE7CkBAIC04MzAsMTkgKzgzNiwxOCBAQAogfQogCiAvKgotKiogR2l2ZW4gdGhlIEVwb2NoLXJlbGF0aXZlIHRpbWUgb2YgSmFudWFyeSAxLCAwMDowMDowMCBVVEMsIGluIGEgeWVhciwgdGhlCi0qKiB5ZWFyLCBhIHJ1bGUsIGFuZCB0aGUgb2Zmc2V0IGZyb20gVVQgYXQgdGhlIHRpbWUgdGhhdCBydWxlIHRha2VzIGVmZmVjdCwKLSoqIGNhbGN1bGF0ZSB0aGUgRXBvY2gtcmVsYXRpdmUgdGltZSB0aGF0IHJ1bGUgdGFrZXMgZWZmZWN0LgorKiogR2l2ZW4gYSB5ZWFyLCBhIHJ1bGUsIGFuZCB0aGUgb2Zmc2V0IGZyb20gVVQgYXQgdGhlIHRpbWUgdGhhdCBydWxlIHRha2VzCisqKiBlZmZlY3QsIGNhbGN1bGF0ZSB0aGUgeWVhci1yZWxhdGl2ZSB0aW1lIHRoYXQgcnVsZSB0YWtlcyBlZmZlY3QuCiAqLwogCi1zdGF0aWMgdGltZV90Ci10cmFuc3RpbWUoY29uc3QgdGltZV90IGphbmZpcnN0LCBjb25zdCBpbnQgeWVhciwKLSAgICAgICAgICByZWdpc3RlciBjb25zdCBzdHJ1Y3QgcnVsZSAqY29uc3QgcnVsZXAsIGNvbnN0IGludF9mYXN0MzJfdCBvZmZzZXQpCitzdGF0aWMgaW50X2Zhc3QzMl90Cit0cmFuc3RpbWUoY29uc3QgaW50IHllYXIsIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBydWxlICpjb25zdCBydWxlcCwKKyAgICAgICAgICBjb25zdCBpbnRfZmFzdDMyX3Qgb2Zmc2V0KQogewotICAgIHJlZ2lzdGVyIGludCAgICBsZWFweWVhcjsKLSAgICByZWdpc3RlciB0aW1lX3QgdmFsdWU7Ci0gICAgcmVnaXN0ZXIgaW50ICAgIGk7Ci0gICAgaW50ICAgICBkLCBtMSwgeXkwLCB5eTEsIHl5MiwgZG93OworICAgIHJlZ2lzdGVyIGludCAgICAgICAgICBsZWFweWVhcjsKKyAgICByZWdpc3RlciBpbnRfZmFzdDMyX3QgdmFsdWU7CisgICAgcmVnaXN0ZXIgaW50ICAgICAgICAgIGk7CisgICAgaW50IGQsIG0xLCB5eTAsIHl5MSwgeXkyLCBkb3c7CiAKICAgICBJTklUSUFMSVpFKHZhbHVlKTsKICAgICBsZWFweWVhciA9IGlzbGVhcCh5ZWFyKTsKQEAgLTg1Niw3ICs4NjEsNyBAQAogICAgICAgICAqKiBhZGQgU0VDU1BFUkRBWSB0aW1lcyB0aGUgZGF5IG51bWJlci0xIHRvIHRoZSB0aW1lIG9mCiAgICAgICAgICoqIEphbnVhcnkgMSwgbWlkbmlnaHQsIHRvIGdldCB0aGUgZGF5LgogICAgICAgICAqLwotICAgICAgICB2YWx1ZSA9IGphbmZpcnN0ICsgKHJ1bGVwLT5yX2RheSAtIDEpICogU0VDU1BFUkRBWTsKKyAgICAgICAgdmFsdWUgPSAocnVsZXAtPnJfZGF5IC0gMSkgKiBTRUNTUEVSREFZOwogICAgICAgICBpZiAobGVhcHllYXIgJiYgcnVsZXAtPnJfZGF5ID49IDYwKQogICAgICAgICAgICAgdmFsdWUgKz0gU0VDU1BFUkRBWTsKICAgICAgICAgYnJlYWs7CkBAIC04NjcsMTYgKzg3MiwxMyBAQAogICAgICAgICAqKiBKdXN0IGFkZCBTRUNTUEVSREFZIHRpbWVzIHRoZSBkYXkgbnVtYmVyIHRvIHRoZSB0aW1lIG9mCiAgICAgICAgICoqIEphbnVhcnkgMSwgbWlkbmlnaHQsIHRvIGdldCB0aGUgZGF5LgogICAgICAgICAqLwotICAgICAgICB2YWx1ZSA9IGphbmZpcnN0ICsgcnVsZXAtPnJfZGF5ICogU0VDU1BFUkRBWTsKKyAgICAgICAgdmFsdWUgPSBydWxlcC0+cl9kYXkgKiBTRUNTUEVSREFZOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTU9OVEhfTlRIX0RBWV9PRl9XRUVLOgogICAgICAgICAvKgogICAgICAgICAqKiBNbS5uLmQgLSBudGggImR0aCBkYXkiIG9mIG1vbnRoIG0uCiAgICAgICAgICovCi0gICAgICAgIHZhbHVlID0gamFuZmlyc3Q7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBydWxlcC0+cl9tb24gLSAxOyArK2kpCi0gICAgICAgICAgICB2YWx1ZSArPSBtb25fbGVuZ3Roc1tsZWFweWVhcl1baV0gKiBTRUNTUEVSREFZOwogCiAgICAgICAgIC8qCiAgICAgICAgICoqIFVzZSBaZWxsZXIncyBDb25ncnVlbmNlIHRvIGdldCBkYXktb2Ytd2VlayBvZiBmaXJzdCBkYXkgb2YKQEAgLTkwOSwxMyArOTExLDE1IEBACiAgICAgICAgIC8qCiAgICAgICAgICoqICJkIiBpcyB0aGUgZGF5LW9mLW1vbnRoICh6ZXJvLW9yaWdpbikgb2YgdGhlIGRheSB3ZSB3YW50LgogICAgICAgICAqLwotICAgICAgICB2YWx1ZSArPSBkICogU0VDU1BFUkRBWTsKKyAgICAgICAgdmFsdWUgPSBkICogU0VDU1BFUkRBWTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHJ1bGVwLT5yX21vbiAtIDE7ICsraSkKKyAgICAgICAgICAgIHZhbHVlICs9IG1vbl9sZW5ndGhzW2xlYXB5ZWFyXVtpXSAqIFNFQ1NQRVJEQVk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIC8qCi0gICAgKiogInZhbHVlIiBpcyB0aGUgRXBvY2gtcmVsYXRpdmUgdGltZSBvZiAwMDowMDowMCBVVCBvbiB0aGUgZGF5IGluCi0gICAgKiogcXVlc3Rpb24uIFRvIGdldCB0aGUgRXBvY2gtcmVsYXRpdmUgdGltZSBvZiB0aGUgc3BlY2lmaWVkIGxvY2FsCisgICAgKiogInZhbHVlIiBpcyB0aGUgeWVhci1yZWxhdGl2ZSB0aW1lIG9mIDAwOjAwOjAwIFVUIG9uIHRoZSBkYXkgaW4KKyAgICAqKiBxdWVzdGlvbi4gVG8gZ2V0IHRoZSB5ZWFyLXJlbGF0aXZlIHRpbWUgb2YgdGhlIHNwZWNpZmllZCBsb2NhbAogICAgICoqIHRpbWUgb24gdGhhdCBkYXksIGFkZCB0aGUgdHJhbnNpdGlvbiB0aW1lIGFuZCB0aGUgY3VycmVudCBvZmZzZXQKICAgICAqKiBmcm9tIFVULgogICAgICovCkBAIC05MzEsMTkgKzkzNSwxNiBAQAogdHpwYXJzZShjb25zdCBjaGFyICogbmFtZSwgcmVnaXN0ZXIgc3RydWN0IHN0YXRlICogY29uc3Qgc3AsCiAgICAgICAgIGNvbnN0IGludCBsYXN0ZGl0Y2gpCiB7Ci0gICAgY29uc3QgY2hhciAqICAgICAgICAgICAgc3RkbmFtZTsKLSAgICBjb25zdCBjaGFyICogICAgICAgICAgICBkc3RuYW1lOwotICAgIHNpemVfdCAgICAgICAgICAgICAgc3RkbGVuOwotICAgIHNpemVfdCAgICAgICAgICAgICAgZHN0bGVuOwotICAgIGludF9mYXN0MzJfdCAgICAgICAgICAgICAgICBzdGRvZmZzZXQ7Ci0gICAgaW50X2Zhc3QzMl90ICAgICAgICAgICAgICAgIGRzdG9mZnNldDsKLSAgICByZWdpc3RlciB0aW1lX3QgKiAgICAgICAgICAgYXRwOwotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKiAgICB0eXBlcDsKLSAgICByZWdpc3RlciBjaGFyICogICAgICAgICBjcDsKLSAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBsb2FkX3Jlc3VsdDsKLSAgICBzdGF0aWMgc3RydWN0IHR0aW5mbyAgICB6dHRpbmZvOworICAgIGNvbnN0IGNoYXIgKiAgICAgICAgIHN0ZG5hbWU7CisgICAgY29uc3QgY2hhciAqICAgICAgICAgZHN0bmFtZTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICBzdGRsZW47CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgZHN0bGVuOworICAgIGludF9mYXN0MzJfdCAgICAgICAgIHN0ZG9mZnNldDsKKyAgICBpbnRfZmFzdDMyX3QgICAgICAgICBkc3RvZmZzZXQ7CisgICAgcmVnaXN0ZXIgY2hhciAqICAgICAgY3A7CisgICAgcmVnaXN0ZXIgaW50ICAgICAgICAgbG9hZF9yZXN1bHQ7CisgICAgc3RhdGljIHN0cnVjdCB0dGluZm8genR0aW5mbzsKIAotICAgIElOSVRJQUxJWkUoZHN0bmFtZSk7CiAgICAgc3RkbmFtZSA9IG5hbWU7CiAgICAgaWYgKGxhc3RkaXRjaCkgewogICAgICAgICBzdGRsZW4gPSBzdHJsZW4obmFtZSk7ICAvKiBsZW5ndGggb2Ygc3RhbmRhcmQgem9uZSBuYW1lICovCkBAIC05OTQsMTMgKzk5NSwxMiBAQAogICAgICAgICBpZiAoKm5hbWUgPT0gJ1wwJyAmJiBsb2FkX3Jlc3VsdCAhPSAwKQogICAgICAgICAgICAgbmFtZSA9IFRaREVGUlVMRVNUUklORzsKICAgICAgICAgaWYgKCpuYW1lID09ICcsJyB8fCAqbmFtZSA9PSAnOycpIHsKLSAgICAgICAgICAgIHN0cnVjdCBydWxlIHN0YXJ0OwotICAgICAgICAgICAgc3RydWN0IHJ1bGUgZW5kOwotICAgICAgICAgICAgcmVnaXN0ZXIgaW50ICAgIHllYXI7Ci0gICAgICAgICAgICByZWdpc3RlciBpbnQgICAgeWVhcmxpbTsKLSAgICAgICAgICAgIHJlZ2lzdGVyIHRpbWVfdCBqYW5maXJzdDsKLSAgICAgICAgICAgIHRpbWVfdCAgICAgIHN0YXJ0dGltZTsKLSAgICAgICAgICAgIHRpbWVfdCAgICAgIGVuZHRpbWU7CisgICAgICAgICAgICBzdHJ1Y3QgcnVsZSAgc3RhcnQ7CisgICAgICAgICAgICBzdHJ1Y3QgcnVsZSAgZW5kOworICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHllYXI7CisgICAgICAgICAgICByZWdpc3RlciBpbnQgeWVhcmxpbTsKKyAgICAgICAgICAgIHJlZ2lzdGVyIGludCB0aW1lY250OworICAgICAgICAgICAgdGltZV90ICAgICAgIGphbmZpcnN0OwogCiAgICAgICAgICAgICArK25hbWU7CiAgICAgICAgICAgICBpZiAoKG5hbWUgPSBnZXRydWxlKG5hbWUsICZzdGFydCkpID09IE5VTEwpCkBAIC0xMDIyLDQ2ICsxMDIyLDQ4IEBACiAgICAgICAgICAgICBzcC0+dHRpc1sxXS50dF9nbXRvZmYgPSAtc3Rkb2Zmc2V0OwogICAgICAgICAgICAgc3AtPnR0aXNbMV0udHRfaXNkc3QgPSAwOwogICAgICAgICAgICAgc3AtPnR0aXNbMV0udHRfYWJicmluZCA9IDA7Ci0gICAgICAgICAgICBhdHAgPSBzcC0+YXRzOwotICAgICAgICAgICAgdHlwZXAgPSBzcC0+dHlwZXM7CisgICAgICAgICAgICBzcC0+ZGVmYXVsdHR5cGUgPSAwOworICAgICAgICAgICAgdGltZWNudCA9IDA7CiAgICAgICAgICAgICBqYW5maXJzdCA9IDA7CiAgICAgICAgICAgICB5ZWFybGltID0gRVBPQ0hfWUVBUiArIFlFQVJTUEVSUkVQRUFUOwogICAgICAgICAgICAgZm9yICh5ZWFyID0gRVBPQ0hfWUVBUjsgeWVhciA8IHllYXJsaW07IHllYXIrKykgewotICAgICAgICAgICAgICAgIGludF9mYXN0MzJfdCB5ZWFyc2VjczsKLQotICAgICAgICAgICAgICAgIHN0YXJ0dGltZSA9IHRyYW5zdGltZShqYW5maXJzdCwgeWVhciwgJnN0YXJ0LAotICAgICAgICAgICAgICAgICAgICBzdGRvZmZzZXQpOwotICAgICAgICAgICAgICAgIGVuZHRpbWUgPSB0cmFuc3RpbWUoamFuZmlyc3QsIHllYXIsICZlbmQsCi0gICAgICAgICAgICAgICAgICAgIGRzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgaW50X2Zhc3QzMl90CisgICAgICAgICAgICAgICAgICBzdGFydHRpbWUgPSB0cmFuc3RpbWUoeWVhciwgJnN0YXJ0LCBzdGRvZmZzZXQpLAorICAgICAgICAgICAgICAgICAgZW5kdGltZSA9IHRyYW5zdGltZSh5ZWFyLCAmZW5kLCBkc3RvZmZzZXQpOworICAgICAgICAgICAgICAgIGludF9mYXN0MzJfdAogICAgICAgICAgICAgICAgIHllYXJzZWNzID0gKHllYXJfbGVuZ3Roc1tpc2xlYXAoeWVhcildCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBTRUNTUEVSREFZKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhcnR0aW1lID4gZW5kdGltZQorICAgICAgICAgICAgICAgIGludCByZXZlcnNlZCA9IGVuZHRpbWUgPCBzdGFydHRpbWU7CisgICAgICAgICAgICAgICAgaWYgKHJldmVyc2VkKSB7CisgICAgICAgICAgICAgICAgICAgIGludF9mYXN0MzJfdCBzd2FwID0gc3RhcnR0aW1lOworICAgICAgICAgICAgICAgICAgICBzdGFydHRpbWUgPSBlbmR0aW1lOworICAgICAgICAgICAgICAgICAgICBlbmR0aW1lID0gc3dhcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHJldmVyc2VkCiAgICAgICAgICAgICAgICAgICAgIHx8IChzdGFydHRpbWUgPCBlbmR0aW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoZW5kdGltZSAtIHN0YXJ0dGltZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgKHllYXJzZWNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoc3Rkb2Zmc2V0IC0gZHN0b2Zmc2V0KSkpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoJnNwLT5hdHNbVFpfTUFYX1RJTUVTIC0gMl0gPCBhdHApCisgICAgICAgICAgICAgICAgICAgIGlmIChUWl9NQVhfVElNRVMgLSAyIDwgdGltZWNudCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB5ZWFybGltID0geWVhciArIFlFQVJTUEVSUkVQRUFUICsgMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0dGltZSA+IGVuZHRpbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICphdHArKyA9IGVuZHRpbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqdHlwZXArKyA9IDE7ICAgLyogRFNUIGVuZHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICphdHArKyA9IHN0YXJ0dGltZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICp0eXBlcCsrID0gMDsgICAvKiBEU1QgYmVnaW5zICovCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqYXRwKysgPSBzdGFydHRpbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqdHlwZXArKyA9IDA7ICAgLyogRFNUIGJlZ2lucyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICphdHArKyA9IGVuZHRpbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqdHlwZXArKyA9IDE7ICAgLyogRFNUIGVuZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgc3AtPmF0c1t0aW1lY250XSA9IGphbmZpcnN0OworICAgICAgICAgICAgICAgICAgICBpZiAoaW5jcmVtZW50X292ZXJmbG93X3RpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICgmc3AtPmF0c1t0aW1lY250XSwgc3RhcnR0aW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBzcC0+dHlwZXNbdGltZWNudCsrXSA9IHJldmVyc2VkOworICAgICAgICAgICAgICAgICAgICBzcC0+YXRzW3RpbWVjbnRdID0gamFuZmlyc3Q7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmNyZW1lbnRfb3ZlcmZsb3dfdGltZQorICAgICAgICAgICAgICAgICAgICAgICAgKCZzcC0+YXRzW3RpbWVjbnRdLCBlbmR0aW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBzcC0+dHlwZXNbdGltZWNudCsrXSA9ICFyZXZlcnNlZDsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGltZV90X21heCAtIGphbmZpcnN0IDwgeWVhcnNlY3MpCisgICAgICAgICAgICAgICAgaWYgKGluY3JlbWVudF9vdmVyZmxvd190aW1lKCZqYW5maXJzdCwgeWVhcnNlY3MpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBqYW5maXJzdCArPSB5ZWFyc2VjczsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNwLT50aW1lY250ID0gYXRwIC0gc3AtPmF0czsKLSAgICAgICAgICAgIGlmICghc3AtPnRpbWVjbnQpCi0gICAgICAgICAgICAgICAgc3AtPnR5cGVjbnQgPSAxOwkvKiBQZXJwZXR1YWwgRFNULiAgKi8KKyAgICAgICAgICAgIHNwLT50aW1lY250ID0gdGltZWNudDsKKyAgICAgICAgICAgIGlmICghdGltZWNudCkKKyAgICAgICAgICAgICAgICBzcC0+dHlwZWNudCA9IDE7ICAgIC8qIFBlcnBldHVhbCBEU1QuICAqLwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmVnaXN0ZXIgaW50X2Zhc3QzMl90ICAgdGhlaXJzdGRvZmZzZXQ7CiAgICAgICAgICAgICByZWdpc3RlciBpbnRfZmFzdDMyX3QgICB0aGVpcmRzdG9mZnNldDsKQEAgLTExNDYsNiArMTE0OCw3IEBACiAgICAgICAgICAgICBzcC0+dHRpc1sxXS50dF9pc2RzdCA9IFRSVUU7CiAgICAgICAgICAgICBzcC0+dHRpc1sxXS50dF9hYmJyaW5kID0gc3RkbGVuICsgMTsKICAgICAgICAgICAgIHNwLT50eXBlY250ID0gMjsKKyAgICAgICAgICAgIHNwLT5kZWZhdWx0dHlwZSA9IDA7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBkc3RsZW4gPSAwOwpAQCAtMTE1NSw2ICsxMTU4LDcgQEAKICAgICAgICAgc3AtPnR0aXNbMF0udHRfZ210b2ZmID0gLXN0ZG9mZnNldDsKICAgICAgICAgc3AtPnR0aXNbMF0udHRfaXNkc3QgPSAwOwogICAgICAgICBzcC0+dHRpc1swXS50dF9hYmJyaW5kID0gMDsKKyAgICAgICAgc3AtPmRlZmF1bHR0eXBlID0gMDsKICAgICB9CiAgICAgc3AtPmNoYXJjbnQgPSBzdGRsZW4gKyAxOwogICAgIGlmIChkc3RsZW4gIT0gMCkKQEAgLTExOTUsNyArMTE5OSw3IEBACiAKICNpZmRlZiBBTExfU1RBVEUKICAgICBpZiAobGNscHRyID09IE5VTEwpIHsKLSAgICAgICAgbGNscHRyID0gY2FsbG9jKDEsIHNpemVvZiAqbGNscHRyKTsKKyAgICAgICAgbGNscHRyID0gbWFsbG9jKHNpemVvZiAqbGNscHRyKTsKICAgICAgICAgaWYgKGxjbHB0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBzZXR0em5hbWUoKTsgICAgLyogYWxsIHdlIGNhbiBkbyAqLwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIxMiw3ICsxMjE2LDcgQEAKIHN0YXRpYyB2b2lkCiB0enNldF9sb2NrZWQodm9pZCkKIHsKLSAgICByZWdpc3RlciBjb25zdCBjaGFyICogICBuYW1lID0gTlVMTDsKKyAgICByZWdpc3RlciBjb25zdCBjaGFyICogbmFtZTsKIAogICAgIG5hbWUgPSBnZXRlbnYoIlRaIik7CiAKQEAgLTEyMzUsNyArMTIzOSw3IEBACiAKICNpZmRlZiBBTExfU1RBVEUKICAgICBpZiAobGNscHRyID09IE5VTEwpIHsKLSAgICAgICAgbGNscHRyID0gY2FsbG9jKDEsIHNpemVvZiAqbGNscHRyKTsKKyAgICAgICAgbGNscHRyID0gbWFsbG9jKHNpemVvZiAqbGNscHRyKTsKICAgICAgICAgaWYgKGxjbHB0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBzZXR0em5hbWUoKTsgICAgLyogYWxsIHdlIGNhbiBkbyAqLwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTI3OSwyNyArMTI4MywyNSBAQAogLypBUkdTVVNFRCovCiBzdGF0aWMgc3RydWN0IHRtICoKIGxvY2Fsc3ViKGNvbnN0IHRpbWVfdCAqIGNvbnN0IHRpbWVwLCBjb25zdCBpbnRfZmFzdDMyX3Qgb2Zmc2V0LAotICAgICAgICAgc3RydWN0IHRtICogY29uc3QgdG1wLCBjb25zdCBzdHJ1Y3Qgc3RhdGUgKiBzcCkgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KKyAgICAgICAgIHN0cnVjdCB0bSAqIGNvbnN0IHRtcCwgc3RydWN0IHN0YXRlICogc3ApIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHR0aW5mbyAqICB0dGlzcDsKLSAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBpOwotICAgIHJlZ2lzdGVyIHN0cnVjdCB0bSAqICAgICAgICByZXN1bHQ7Ci0gICAgY29uc3QgdGltZV90ICAgICAgICAgICAgdCA9ICp0aW1lcDsKKyAgICByZWdpc3RlciBjb25zdCBzdHJ1Y3QgdHRpbmZvICogdHRpc3A7CisgICAgcmVnaXN0ZXIgaW50ICAgICAgICAgaTsKKyAgICByZWdpc3RlciBzdHJ1Y3QgdG0gKiByZXN1bHQ7CisgICAgY29uc3QgdGltZV90ICAgICAgICAgdCA9ICp0aW1lcDsKIAogICAgIC8vIEJFR0lOIGFuZHJvaWQtY2hhbmdlZDogc3VwcG9ydCB1c2VyLXN1cHBsaWVkIHNwLgogICAgIGlmIChzcCA9PSBOVUxMKSB7CiAgICAgICAgIHNwID0gbGNscHRyOwogICAgIH0KICAgICAvLyBFTkQgYW5kcm9pZC1jaGFuZ2VkCi0jaWZkZWYgQUxMX1NUQVRFCiAgICAgaWYgKHNwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBnbXRzdWIodGltZXAsIG9mZnNldCwgdG1wLCBzcCk7IC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCi0jZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KICAgICBpZiAoKHNwLT5nb2JhY2sgJiYgdCA8IHNwLT5hdHNbMF0pIHx8CiAgICAgICAgIChzcC0+Z29haGVhZCAmJiB0ID4gc3AtPmF0c1tzcC0+dGltZWNudCAtIDFdKSkgewogICAgICAgICAgICAgdGltZV90ICAgICAgICAgIG5ld3QgPSB0OwotICAgICAgICAgICAgcmVnaXN0ZXIgdGltZV90ICAgICBzZWNvbmRzOwotICAgICAgICAgICAgcmVnaXN0ZXIgdGltZV90ICAgICB5ZWFyczsKKyAgICAgICAgICAgIHJlZ2lzdGVyIHRpbWVfdCBzZWNvbmRzOworICAgICAgICAgICAgcmVnaXN0ZXIgdGltZV90IHllYXJzOwogCiAgICAgICAgICAgICBpZiAodCA8IHNwLT5hdHNbMF0pCiAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNwLT5hdHNbMF0gLSB0OwpAQCAtMTMzMCw4ICsxMzMyLDggQEAKICAgICBpZiAoc3AtPnRpbWVjbnQgPT0gMCB8fCB0IDwgc3AtPmF0c1swXSkgewogICAgICAgICBpID0gc3AtPmRlZmF1bHR0eXBlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlZ2lzdGVyIGludCAgICBsbyA9IDE7Ci0gICAgICAgIHJlZ2lzdGVyIGludCAgICBoaSA9IHNwLT50aW1lY250OworICAgICAgICByZWdpc3RlciBpbnQgbG8gPSAxOworICAgICAgICByZWdpc3RlciBpbnQgaGkgPSBzcC0+dGltZWNudDsKIAogICAgICAgICB3aGlsZSAobG8gPCBoaSkgewogICAgICAgICAgICAgcmVnaXN0ZXIgaW50ICAgIG1pZCA9IChsbyArIGhpKSA+PiAxOwpAQCAtMTM3MSw3ICsxMzczLDcgQEAKIHN0cnVjdCB0bSAqCiBsb2NhbHRpbWVfcihjb25zdCB0aW1lX3QgKiBjb25zdCB0aW1lcCwgc3RydWN0IHRtICogdG1wKQogewotICAgIHN0cnVjdCB0bSogIHJlc3VsdDsKKyAgICBzdHJ1Y3QgdG0qIHJlc3VsdDsKIAogICAgIF90ekxvY2soKTsKICAgICB0enNldF9sb2NrZWQoKTsKQEAgLTEzODcsMTggKzEzODksMTggQEAKIAogc3RhdGljIHN0cnVjdCB0bSAqCiBnbXRzdWIoY29uc3QgdGltZV90ICogY29uc3QgdGltZXAsIGNvbnN0IGludF9mYXN0MzJfdCBvZmZzZXQsCi0gICAgICAgc3RydWN0IHRtICpjb25zdCB0bXAsIGNvbnN0IHN0cnVjdCBzdGF0ZSAqIHNwKSAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwLgorICAgICAgIHN0cnVjdCB0bSAqY29uc3QgdG1wLCBzdHJ1Y3Qgc3RhdGUgKiBzcCBfX3VudXNlZCkgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KIHsKLSAgICByZWdpc3RlciBzdHJ1Y3QgdG0gKiAgICByZXN1bHQ7Ci0KLSAgICAodm9pZCkgc3A7IC8vIGFuZHJvaWQtYWRkZWQ6IHVudXNlZC4KKyAgICByZWdpc3RlciBzdHJ1Y3QgdG0gKiByZXN1bHQ7CiAKICAgICBpZiAoIWdtdF9pc19zZXQpIHsKLSAgICAgICAgZ210X2lzX3NldCA9IFRSVUU7CiAjaWZkZWYgQUxMX1NUQVRFCi0gICAgICAgIGdtdHB0ciA9IGNhbGxvYygxLCBzaXplb2YgKmdtdHB0cik7Ci0gICAgICAgIGlmIChnbXRwdHIgIT0gTlVMTCkKKyAgICAgICAgZ210cHRyID0gbWFsbG9jKHNpemVvZiAqZ210cHRyKTsKKyAgICAgICAgZ210X2lzX3NldCA9IGdtdHB0ciAhPSBOVUxMOworI2Vsc2UKKyAgICAgICAgZ210X2lzX3NldCA9IFRSVUU7CiAjZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KKyAgICAgICAgaWYgKGdtdF9pc19zZXQpCiAgICAgICAgICAgICBnbXRsb2FkKGdtdHB0cik7CiAgICAgfQogICAgIHJlc3VsdCA9IHRpbWVzdWIodGltZXAsIG9mZnNldCwgZ210cHRyLCB0bXApOwpAQCAtMTQwOCwxOCArMTQxMCw3IEBACiAgICAgKiogIlVUK3h4eHgiIG9yICJVVC14eHh4IiBpZiBvZmZzZXQgaXMgbm9uLXplcm8sCiAgICAgKiogYnV0IHRoaXMgaXMgbm8gdGltZSBmb3IgYSB0cmVhc3VyZSBodW50LgogICAgICovCi0gICAgaWYgKG9mZnNldCAhPSAwKQotICAgICAgICB0bXAtPlRNX1pPTkUgPSB3aWxkYWJicjsKLSAgICBlbHNlIHsKLSNpZmRlZiBBTExfU1RBVEUKLSAgICAgICAgaWYgKGdtdHB0ciA9PSBOVUxMKQotICAgICAgICAgICAgdG1wLT5UTV9aT05FID0gZ210OwotICAgICAgICBlbHNlICAgIHRtcC0+VE1fWk9ORSA9IGdtdHB0ci0+Y2hhcnM7Ci0jZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KLSNpZm5kZWYgQUxMX1NUQVRFCi0gICAgICAgIHRtcC0+VE1fWk9ORSA9IGdtdHB0ci0+Y2hhcnM7Ci0jZW5kaWYgLyogU3RhdGUgRmFybSAqLwotICAgIH0KKyAgICB0bXAtPlRNX1pPTkUgPSBvZmZzZXQgPyB3aWxkYWJiciA6IGdtdHB0ciA/IGdtdHB0ci0+Y2hhcnMgOiBnbXQ7CiAjZW5kaWYgLyogZGVmaW5lZCBUTV9aT05FICovCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE0MzcsNyArMTQyOCw3IEBACiBzdHJ1Y3QgdG0gKgogZ210aW1lX3IoY29uc3QgdGltZV90ICogY29uc3QgdGltZXAsIHN0cnVjdCB0bSAqIHRtcCkKIHsKLSAgICBzdHJ1Y3QgdG0qICByZXN1bHQ7CisgICAgc3RydWN0IHRtKiByZXN1bHQ7CiAKICAgICBfdHpMb2NrKCk7CiAgICAgcmVzdWx0ID0gZ210c3ViKHRpbWVwLCAwTCwgdG1wLCBOVUxMKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBleHRyYSBwYXJhbWV0ZXIuCkBAIC0xNDQ2LDYgKzE0MzcsMTYgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWZkZWYgU1REX0lOU1BJUkVECisKK3N0cnVjdCB0bSAqCitvZmZ0aW1lKGNvbnN0IHRpbWVfdCAqY29uc3QgdGltZXAsIGNvbnN0IGxvbmcgb2Zmc2V0KQoreworICAgIHJldHVybiBnbXRzdWIodGltZXAsIG9mZnNldCwgJnRtR2xvYmFsLCBOVUxMKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBleHRyYSBwYXJhbWV0ZXIuCit9CisKKyNlbmRpZiAvKiBkZWZpbmVkIFNURF9JTlNQSVJFRCAqLworCiAvKgogKiogUmV0dXJuIHRoZSBudW1iZXIgb2YgbGVhcCB5ZWFycyB0aHJvdWdoIHRoZSBlbmQgb2YgdGhlIGdpdmVuIHllYXIKICoqIHdoZXJlLCB0byBtYWtlIHRoZSBtYXRoIGVhc3ksIHRoZSBhbnN3ZXIgZm9yIHllYXIgemVybyBpcyBkZWZpbmVkIGFzIHplcm8uCkBAIC0xNDYzLDI0ICsxNDY0LDE5IEBACiAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBzdGF0ZSAqY29uc3Qgc3AsCiAgICAgICAgIHJlZ2lzdGVyIHN0cnVjdCB0bSAqY29uc3QgdG1wKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBsc2luZm8gKiAgbHA7Ci0gICAgcmVnaXN0ZXIgdGltZV90ICAgICAgICAgdGRheXM7Ci0gICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgaWRheXM7ICAvKiB1bnNpZ25lZCB3b3VsZCBiZSBzbyAyMDAzICovCi0gICAgcmVnaXN0ZXIgaW50X2Zhc3Q2NF90ICAgICAgICAgICByZW07Ci0gICAgaW50ICAgICAgICAgICAgIHk7Ci0gICAgcmVnaXN0ZXIgY29uc3QgaW50ICogICAgICAgIGlwOwotICAgIHJlZ2lzdGVyIGludF9mYXN0NjRfdCAgICAgICAgICAgY29ycjsKLSAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBoaXQ7Ci0gICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgaTsKKyAgICByZWdpc3RlciBjb25zdCBzdHJ1Y3QgbHNpbmZvICogbHA7CisgICAgcmVnaXN0ZXIgdGltZV90ICAgICAgIHRkYXlzOworICAgIHJlZ2lzdGVyIGludCAgICAgICAgICBpZGF5czsgIC8qIHVuc2lnbmVkIHdvdWxkIGJlIHNvIDIwMDMgKi8KKyAgICByZWdpc3RlciBpbnRfZmFzdDY0X3QgcmVtOworICAgIGludCAgICAgICAgICAgICAgICAgICB5OworICAgIHJlZ2lzdGVyIGNvbnN0IGludCAqICBpcDsKKyAgICByZWdpc3RlciBpbnRfZmFzdDY0X3QgY29ycjsKKyAgICByZWdpc3RlciBpbnQgICAgICAgICAgaGl0OworICAgIHJlZ2lzdGVyIGludCAgICAgICAgICBpOwogCiAgICAgY29yciA9IDA7CiAgICAgaGl0ID0gMDsKLSNpZmRlZiBBTExfU1RBVEUKICAgICBpID0gKHNwID09IE5VTEwpID8gMCA6IHNwLT5sZWFwY250OwotI2VuZGlmIC8qIGRlZmluZWQgQUxMX1NUQVRFICovCi0jaWZuZGVmIEFMTF9TVEFURQotICAgIGkgPSBzcC0+bGVhcGNudDsKLSNlbmRpZiAvKiBTdGF0ZSBGYXJtICovCiAgICAgd2hpbGUgKC0taSA+PSAwKSB7CiAgICAgICAgIGxwID0gJnNwLT5sc2lzW2ldOwogICAgICAgICBpZiAoKnRpbWVwID49IGxwLT5sc190cmFucykgewpAQCAtMTYzMSw2MSArMTYyNyw3NyBAQAogc3RhdGljIGludAogaW5jcmVtZW50X292ZXJmbG93KGludCAqY29uc3QgaXAsIGludCBqKQogewotCXJlZ2lzdGVyIGludCBjb25zdAlpID0gKmlwOworICAgIHJlZ2lzdGVyIGludCBjb25zdCBpID0gKmlwOwogCi0JLyoKLQkqKiBJZiBpID49IDAgdGhlcmUgY2FuIG9ubHkgYmUgb3ZlcmZsb3cgaWYgaSArIGogPiBJTlRfTUFYCi0JKiogb3IgaWYgaiA+IElOVF9NQVggLSBpOyBnaXZlbiBpID49IDAsIElOVF9NQVggLSBpIGNhbm5vdCBvdmVyZmxvdy4KLQkqKiBJZiBpIDwgMCB0aGVyZSBjYW4gb25seSBiZSBvdmVyZmxvdyBpZiBpICsgaiA8IElOVF9NSU4KLQkqKiBvciBpZiBqIDwgSU5UX01JTiAtIGk7IGdpdmVuIGkgPCAwLCBJTlRfTUlOIC0gaSBjYW5ub3Qgb3ZlcmZsb3cuCi0JKi8KLQlpZiAoKGkgPj0gMCkgPyAoaiA+IElOVF9NQVggLSBpKSA6IChqIDwgSU5UX01JTiAtIGkpKQotCQlyZXR1cm4gVFJVRTsKLQkqaXAgKz0gajsKLQlyZXR1cm4gRkFMU0U7CisgICAgLyoKKyAgICAqKiBJZiBpID49IDAgdGhlcmUgY2FuIG9ubHkgYmUgb3ZlcmZsb3cgaWYgaSArIGogPiBJTlRfTUFYCisgICAgKiogb3IgaWYgaiA+IElOVF9NQVggLSBpOyBnaXZlbiBpID49IDAsIElOVF9NQVggLSBpIGNhbm5vdCBvdmVyZmxvdy4KKyAgICAqKiBJZiBpIDwgMCB0aGVyZSBjYW4gb25seSBiZSBvdmVyZmxvdyBpZiBpICsgaiA8IElOVF9NSU4KKyAgICAqKiBvciBpZiBqIDwgSU5UX01JTiAtIGk7IGdpdmVuIGkgPCAwLCBJTlRfTUlOIC0gaSBjYW5ub3Qgb3ZlcmZsb3cuCisgICAgKi8KKyAgICBpZiAoKGkgPj0gMCkgPyAoaiA+IElOVF9NQVggLSBpKSA6IChqIDwgSU5UX01JTiAtIGkpKQorICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAqaXAgKz0gajsKKyAgICByZXR1cm4gRkFMU0U7CiB9CiAKIHN0YXRpYyBpbnQKIGluY3JlbWVudF9vdmVyZmxvdzMyKGludF9mYXN0MzJfdCAqY29uc3QgbHAsIGludCBjb25zdCBtKQogewotCXJlZ2lzdGVyIGludF9mYXN0MzJfdCBjb25zdAlsID0gKmxwOworICAgIHJlZ2lzdGVyIGludF9mYXN0MzJfdCBjb25zdCBsID0gKmxwOwogCi0JaWYgKChsID49IDApID8gKG0gPiBJTlRfRkFTVDMyX01BWCAtIGwpIDogKG0gPCBJTlRfRkFTVDMyX01JTiAtIGwpKQotCQlyZXR1cm4gVFJVRTsKLQkqbHAgKz0gbTsKLQlyZXR1cm4gRkFMU0U7CisgICAgaWYgKChsID49IDApID8gKG0gPiBJTlRfRkFTVDMyX01BWCAtIGwpIDogKG0gPCBJTlRfRkFTVDMyX01JTiAtIGwpKQorICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAqbHAgKz0gbTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBpbnQKK2luY3JlbWVudF9vdmVyZmxvd190aW1lKHRpbWVfdCAqdHAsIGludF9mYXN0MzJfdCBqKQoreworICAgIC8qCisgICAgKiogVGhpcyBpcyBsaWtlCisgICAgKiogJ2lmICghICh0aW1lX3RfbWluIDw9ICp0cCArIGogJiYgKnRwICsgaiA8PSB0aW1lX3RfbWF4KSkgLi4uJywKKyAgICAqKiBleGNlcHQgdGhhdCBpdCBkb2VzIHRoZSByaWdodCB0aGluZyBldmVuIGlmICp0cCArIGogd291bGQgb3ZlcmZsb3cuCisgICAgKi8KKyAgICBpZiAoISAoaiA8IDAKKyAgICAgICAgICAgPyAoVFlQRV9TSUdORUQodGltZV90KSA/IHRpbWVfdF9taW4gLSBqIDw9ICp0cCA6IC0xIC0gaiA8ICp0cCkKKyAgICAgICAgICAgOiAqdHAgPD0gdGltZV90X21heCAtIGopKQorICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAqdHAgKz0gajsKKyAgICByZXR1cm4gRkFMU0U7CiB9CiAKIHN0YXRpYyBpbnQKIG5vcm1hbGl6ZV9vdmVyZmxvdyhpbnQgKmNvbnN0IHRlbnNwdHIsIGludCAqY29uc3QgdW5pdHNwdHIsIGNvbnN0IGludCBiYXNlKQogewotCXJlZ2lzdGVyIGludAl0ZW5zZGVsdGE7CisgICAgcmVnaXN0ZXIgaW50IHRlbnNkZWx0YTsKIAotCXRlbnNkZWx0YSA9ICgqdW5pdHNwdHIgPj0gMCkgPwotCQkoKnVuaXRzcHRyIC8gYmFzZSkgOgotCQkoLTEgLSAoLTEgLSAqdW5pdHNwdHIpIC8gYmFzZSk7Ci0JKnVuaXRzcHRyIC09IHRlbnNkZWx0YSAqIGJhc2U7Ci0JcmV0dXJuIGluY3JlbWVudF9vdmVyZmxvdyh0ZW5zcHRyLCB0ZW5zZGVsdGEpOworICAgIHRlbnNkZWx0YSA9ICgqdW5pdHNwdHIgPj0gMCkgPworICAgICAgICAoKnVuaXRzcHRyIC8gYmFzZSkgOgorICAgICAgICAoLTEgLSAoLTEgLSAqdW5pdHNwdHIpIC8gYmFzZSk7CisgICAgKnVuaXRzcHRyIC09IHRlbnNkZWx0YSAqIGJhc2U7CisgICAgcmV0dXJuIGluY3JlbWVudF9vdmVyZmxvdyh0ZW5zcHRyLCB0ZW5zZGVsdGEpOwogfQogCiBzdGF0aWMgaW50CiBub3JtYWxpemVfb3ZlcmZsb3czMihpbnRfZmFzdDMyX3QgKmNvbnN0IHRlbnNwdHIsIGludCAqY29uc3QgdW5pdHNwdHIsCi0JCSAgICAgY29uc3QgaW50IGJhc2UpCisgICAgICAgICAgICAgY29uc3QgaW50IGJhc2UpCiB7Ci0JcmVnaXN0ZXIgaW50CXRlbnNkZWx0YTsKKyAgICByZWdpc3RlciBpbnQgdGVuc2RlbHRhOwogCi0JdGVuc2RlbHRhID0gKCp1bml0c3B0ciA+PSAwKSA/Ci0JCSgqdW5pdHNwdHIgLyBiYXNlKSA6Ci0JCSgtMSAtICgtMSAtICp1bml0c3B0cikgLyBiYXNlKTsKLQkqdW5pdHNwdHIgLT0gdGVuc2RlbHRhICogYmFzZTsKLQlyZXR1cm4gaW5jcmVtZW50X292ZXJmbG93MzIodGVuc3B0ciwgdGVuc2RlbHRhKTsKKyAgICB0ZW5zZGVsdGEgPSAoKnVuaXRzcHRyID49IDApID8KKyAgICAgICAgKCp1bml0c3B0ciAvIGJhc2UpIDoKKyAgICAgICAgKC0xIC0gKC0xIC0gKnVuaXRzcHRyKSAvIGJhc2UpOworICAgICp1bml0c3B0ciAtPSB0ZW5zZGVsdGEgKiBiYXNlOworICAgIHJldHVybiBpbmNyZW1lbnRfb3ZlcmZsb3czMih0ZW5zcHRyLCB0ZW5zZGVsdGEpOwogfQogCiBzdGF0aWMgaW50CiB0bWNvbXAocmVnaXN0ZXIgY29uc3Qgc3RydWN0IHRtICogY29uc3QgYXRtcCwKICAgICAgICByZWdpc3RlciBjb25zdCBzdHJ1Y3QgdG0gKiBjb25zdCBidG1wKQogewotICAgIHJlZ2lzdGVyIGludCAgICByZXN1bHQ7CisgICAgcmVnaXN0ZXIgaW50IHJlc3VsdDsKIAogICAgIGlmIChhdG1wLT50bV95ZWFyICE9IGJ0bXAtPnRtX3llYXIpCiAgICAgICAgIHJldHVybiBhdG1wLT50bV95ZWFyIDwgYnRtcC0+dG1feWVhciA/IC0xIDogMTsKQEAgLTE2OTksMjEgKzE3MTEsMjEgQEAKIAogc3RhdGljIHRpbWVfdAogdGltZTJzdWIoc3RydWN0IHRtICogY29uc3QgdG1wLAotICAgICAgICAgc3RydWN0IHRtICooKmNvbnN0IGZ1bmNwKShjb25zdCB0aW1lX3QqLCBpbnRfZmFzdDMyX3QsIHN0cnVjdCB0bSosIGNvbnN0IHN0cnVjdCBzdGF0ZSopLAorICAgICAgICAgc3RydWN0IHRtICooKmNvbnN0IGZ1bmNwKShjb25zdCB0aW1lX3QqLCBpbnRfZmFzdDMyX3QsIHN0cnVjdCB0bSosIHN0cnVjdCBzdGF0ZSopLAogICAgICAgICAgY29uc3QgaW50X2Zhc3QzMl90IG9mZnNldCwKICAgICAgICAgIGludCAqIGNvbnN0IG9rYXlwLAotICAgICAgICAgY29uc3QgaW50IGRvX25vcm1fc2VjcywgY29uc3Qgc3RydWN0IHN0YXRlICogc3ApIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AKKyAgICAgICAgIGNvbnN0IGludCBkb19ub3JtX3NlY3MsIHN0cnVjdCBzdGF0ZSAqIHNwKSAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwCiB7Ci0gICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgZGlyOwotICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIGksIGo7Ci0gICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgc2F2ZWRfc2Vjb25kczsKLSAgICByZWdpc3RlciBpbnRfZmFzdDMyX3QgICAgICAgICAgIGxpOwotICAgIHJlZ2lzdGVyIHRpbWVfdCAgICAgICAgIGxvOwotICAgIHJlZ2lzdGVyIHRpbWVfdCAgICAgICAgIGhpOwotICAgIGludF9mYXN0MzJfdCAgICAgICAgICAgICAgICB5OwotICAgIHRpbWVfdCAgICAgICAgICAgICAgbmV3dDsKLSAgICB0aW1lX3QgICAgICAgICAgICAgIHQ7Ci0gICAgc3RydWN0IHRtICAgICAgICAgICB5b3VydG0sIG15dG07CisgICAgcmVnaXN0ZXIgaW50ICAgICAgICAgIGRpcjsKKyAgICByZWdpc3RlciBpbnQgICAgICAgICAgaSwgajsKKyAgICByZWdpc3RlciBpbnQgICAgICAgICAgc2F2ZWRfc2Vjb25kczsKKyAgICByZWdpc3RlciBpbnRfZmFzdDMyX3QgbGk7CisgICAgcmVnaXN0ZXIgdGltZV90ICAgICAgIGxvOworICAgIHJlZ2lzdGVyIHRpbWVfdCAgICAgICBoaTsKKyAgICBpbnRfZmFzdDMyX3QgICAgICAgICAgeTsKKyAgICB0aW1lX3QgICAgICAgICAgICAgICAgbmV3dDsKKyAgICB0aW1lX3QgICAgICAgICAgICAgICAgdDsKKyAgICBzdHJ1Y3QgdG0gICAgICAgICAgICAgeW91cnRtLCBteXRtOwogCiAgICAgKm9rYXlwID0gRkFMU0U7CiAgICAgeW91cnRtID0gKnRtcDsKQEAgLTE4MzcsMTQgKzE4NDksMTIgQEAKICAgICAgICAgKi8KICAgICAgICAgLy8gQkVHSU4gYW5kcm9pZC1jaGFuZ2VkOiBzdXBwb3J0IHVzZXItc3VwcGxpZWQgc3AKICAgICAgICAgaWYgKHNwID09IE5VTEwpIHsKLSAgICAgICAgICAgIHNwID0gKGNvbnN0IHN0cnVjdCBzdGF0ZSAqKQorICAgICAgICAgICAgc3AgPSAoc3RydWN0IHN0YXRlICopCiAgICAgICAgICAgICAgICAgKChmdW5jcCA9PSBsb2NhbHN1YikgPyBsY2xwdHIgOiBnbXRwdHIpOwogICAgICAgICB9CiAgICAgICAgIC8vIEVORCBhbmRyb2lkLWNoYW5nZWQKLSNpZmRlZiBBTExfU1RBVEUKICAgICAgICAgaWYgKHNwID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gV1JPTkc7Ci0jZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KICAgICAgICAgZm9yIChpID0gc3AtPnR5cGVjbnQgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICAgICAgaWYgKHNwLT50dGlzW2ldLnR0X2lzZHN0ICE9IHlvdXJ0bS50bV9pc2RzdCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE4ODAsMTEgKzE4OTAsMTEgQEAKIAogc3RhdGljIHRpbWVfdAogdGltZTIoc3RydWN0IHRtICogY29uc3QgdG1wLAotICAgICAgc3RydWN0IHRtICogKCpjb25zdCBmdW5jcCkoY29uc3QgdGltZV90ICosIGludF9mYXN0MzJfdCwgc3RydWN0IHRtICosIGNvbnN0IHN0cnVjdCBzdGF0ZSAqKSwgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KKyAgICAgIHN0cnVjdCB0bSAqICgqY29uc3QgZnVuY3ApKGNvbnN0IHRpbWVfdCAqLCBpbnRfZmFzdDMyX3QsIHN0cnVjdCB0bSAqLCBzdHJ1Y3Qgc3RhdGUgKiksIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCiAgICAgICBjb25zdCBpbnRfZmFzdDMyX3Qgb2Zmc2V0LAotICAgICAgaW50ICpjb25zdCBva2F5cCwgY29uc3Qgc3RydWN0IHN0YXRlKiBzcCkgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KKyAgICAgIGludCAqY29uc3Qgb2theXAsIHN0cnVjdCBzdGF0ZSogc3ApIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCiB7Ci0gICAgdGltZV90ICB0OworICAgIHRpbWVfdCB0OwogCiAgICAgLyoKICAgICAqKiBGaXJzdCB0cnkgd2l0aG91dCBub3JtYWxpemF0aW9uIG9mIHNlY29uZHMKQEAgLTE4OTcsMTYgKzE5MDcsMTYgQEAKIAogc3RhdGljIHRpbWVfdAogdGltZTEoc3RydWN0IHRtICogY29uc3QgdG1wLAotICAgICAgc3RydWN0IHRtICogKCogY29uc3QgZnVuY3ApIChjb25zdCB0aW1lX3QgKiwgaW50X2Zhc3QzMl90LCBzdHJ1Y3QgdG0gKiwgY29uc3Qgc3RydWN0IHN0YXRlICopLCAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwLgotICAgICAgY29uc3QgaW50X2Zhc3QzMl90IG9mZnNldCwgY29uc3Qgc3RydWN0IHN0YXRlICogc3ApIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCisgICAgICBzdHJ1Y3QgdG0gKiAoKiBjb25zdCBmdW5jcCkgKGNvbnN0IHRpbWVfdCAqLCBpbnRfZmFzdDMyX3QsIHN0cnVjdCB0bSAqLCBzdHJ1Y3Qgc3RhdGUgKiksIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCisgICAgICBjb25zdCBpbnRfZmFzdDMyX3Qgb2Zmc2V0LCBzdHJ1Y3Qgc3RhdGUgKiBzcCkgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KIHsKLSAgICByZWdpc3RlciB0aW1lX3QgICAgICAgICB0OwotICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIHNhbWVpLCBvdGhlcmk7Ci0gICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgc2FtZWluZCwgb3RoZXJpbmQ7Ci0gICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgaTsKLSAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBuc2VlbjsKLSAgICBpbnQgICAgICAgICAgICAgc2VlbltUWl9NQVhfVFlQRVNdOwotICAgIGludCAgICAgICAgICAgICB0eXBlc1tUWl9NQVhfVFlQRVNdOworICAgIHJlZ2lzdGVyIHRpbWVfdCB0OworICAgIHJlZ2lzdGVyIGludCAgICBzYW1laSwgb3RoZXJpOworICAgIHJlZ2lzdGVyIGludCAgICBzYW1laW5kLCBvdGhlcmluZDsKKyAgICByZWdpc3RlciBpbnQgICAgaTsKKyAgICByZWdpc3RlciBpbnQgICAgbnNlZW47CisgICAgY2hhciAgICAgICAgICAgIHNlZW5bVFpfTUFYX1RZUEVTXTsKKyAgICB1bnNpZ25lZCBjaGFyICAgdHlwZXNbVFpfTUFYX1RZUEVTXTsKICAgICBpbnQgICAgICAgICAgICAgb2theTsKIAogICAgIGlmICh0bXAgPT0gTlVMTCkgewpAQCAtMTkxNiwxNyArMTkyNiwxNSBAQAogICAgIGlmICh0bXAtPnRtX2lzZHN0ID4gMSkKICAgICAgICAgdG1wLT50bV9pc2RzdCA9IDE7CiAgICAgdCA9IHRpbWUyKHRtcCwgZnVuY3AsIG9mZnNldCwgJm9rYXksIHNwKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KLSNpZmRlZiBQQ1RTCi0gICAgLyoKLSAgICAqKiBQQ1RTIGNvZGUgY291cnRlc3kgR3JhbnQgU3VsbGl2YW4uCi0gICAgKi8KICAgICBpZiAob2theSkKICAgICAgICAgcmV0dXJuIHQ7CiAgICAgaWYgKHRtcC0+dG1faXNkc3QgPCAwKQorI2lmZGVmIFBDVFMKKyAgICAgICAgLyoKKyAgICAgICAgKiogUE9TSVggQ29uZm9ybWFuY2UgVGVzdCBTdWl0ZSBjb2RlIGNvdXJ0ZXN5IEdyYW50IFN1bGxpdmFuLgorICAgICAgICAqLwogICAgICAgICB0bXAtPnRtX2lzZHN0ID0gMDsgIC8qIHJlc2V0IHRvIHN0ZCBhbmQgdHJ5IGFnYWluICovCi0jZW5kaWYgLyogZGVmaW5lZCBQQ1RTICovCi0jaWZuZGVmIFBDVFMKLSAgICBpZiAob2theSB8fCB0bXAtPnRtX2lzZHN0IDwgMCkKKyNlbHNlCiAgICAgICAgIHJldHVybiB0OwogI2VuZGlmIC8qICFkZWZpbmVkIFBDVFMgKi8KICAgICAvKgpAQCAtMTkzNywxMyArMTk0NSwxMSBAQAogICAgICovCiAgICAgLy8gQkVHSU4gYW5kcm9pZC1jaGFuZ2VkOiBzdXBwb3J0IHVzZXItc3VwcGxpZWQgc3AuCiAgICAgaWYgKHNwID09IE5VTEwpIHsKLSAgICAgICAgc3AgPSAoY29uc3Qgc3RydWN0IHN0YXRlICopICgoZnVuY3AgPT0gbG9jYWxzdWIpID8gIGxjbHB0ciA6IGdtdHB0cik7CisgICAgICAgIHNwID0gKHN0cnVjdCBzdGF0ZSAqKSAoKGZ1bmNwID09IGxvY2Fsc3ViKSA/ICBsY2xwdHIgOiBnbXRwdHIpOwogICAgIH0KICAgICAvLyBCRUdJTiBhbmRyb2lkLWNoYW5nZWQKLSNpZmRlZiBBTExfU1RBVEUKICAgICBpZiAoc3AgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFdST05HOwotI2VuZGlmIC8qIGRlZmluZWQgQUxMX1NUQVRFICovCiAgICAgZm9yIChpID0gMDsgaSA8IHNwLT50eXBlY250OyArK2kpCiAgICAgICAgIHNlZW5baV0gPSBGQUxTRTsKICAgICBuc2VlbiA9IDA7CkBAIC0xOTk3LDcgKzIwMDMsNyBAQAogdGltZV90CiB0aW1lZ20oc3RydWN0IHRtICogY29uc3QgdG1wKQogewotICAgIHRpbWVfdCAgcmVzdWx0OworICAgIHRpbWVfdCByZXN1bHQ7CiAKICAgICBpZiAodG1wICE9IE5VTEwpCiAgICAgICAgIHRtcC0+dG1faXNkc3QgPSAwOwpAQCAtMjAwOCw2ICsyMDE0LDE0IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordGltZV90Cit0aW1lb2ZmKHN0cnVjdCB0bSAqY29uc3QgdG1wLCBjb25zdCBsb25nIG9mZnNldCkKK3sKKyAgICBpZiAodG1wICE9IE5VTEwpCisgICAgICAgIHRtcC0+dG1faXNkc3QgPSAwOworICAgIHJldHVybiB0aW1lMSh0bXAsIGdtdHN1Yiwgb2Zmc2V0LCBOVUxMKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBleHRyYSBwYXJhbWV0ZXIuCit9CisKICNlbmRpZiAvKiBkZWZpbmVkIFNURF9JTlNQSVJFRCAqLwogCiAjaWZkZWYgQ01VQ1MKQEAgLTIwMjAsNyArMjAzNCw3IEBACiBsb25nCiBndGltZShzdHJ1Y3QgdG0gKiBjb25zdCB0bXApCiB7Ci0gICAgY29uc3QgdGltZV90ICAgIHQgPSBta3RpbWUodG1wKTsKKyAgICBjb25zdCB0aW1lX3QgdCA9IG1rdGltZSh0bXApOwogCiAgICAgaWYgKHQgPT0gV1JPTkcpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTIwNDYsOSArMjA2MCw5IEBACiBzdGF0aWMgaW50X2Zhc3Q2NF90CiBsZWFwY29ycih0aW1lX3QgKiB0aW1lcCkKIHsKLSAgICByZWdpc3RlciBzdHJ1Y3Qgc3RhdGUgKiAgICAgc3A7Ci0gICAgcmVnaXN0ZXIgc3RydWN0IGxzaW5mbyAqICAgIGxwOwotICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIGk7CisgICAgcmVnaXN0ZXIgc3RydWN0IHN0YXRlICogIHNwOworICAgIHJlZ2lzdGVyIHN0cnVjdCBsc2luZm8gKiBscDsKKyAgICByZWdpc3RlciBpbnQgICAgICAgICAgICAgaTsKIAogICAgIHNwID0gbGNscHRyOwogICAgIGkgPSBzcC0+bGVhcGNudDsKQEAgLTIwNzAsOCArMjA4NCw4IEBACiB0aW1lX3QKIHBvc2l4MnRpbWUodGltZV90IHQpCiB7Ci0gICAgdGltZV90ICB4OwotICAgIHRpbWVfdCAgeTsKKyAgICB0aW1lX3QgeDsKKyAgICB0aW1lX3QgeTsKIAogICAgIHR6c2V0KCk7CiAgICAgLyoKQEAgLTIxMDgsMTAgKzIxMjIsNiBAQAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPGFycGEvaW5ldC5oPiAvLyBGb3IgbnRvaGwoMykuCiAKLXN0YXRpYyBpbnQgdG9faW50KHVuc2lnbmVkIGNoYXIqIHMpIHsKLSAgcmV0dXJuIChzWzBdIDw8IDI0KSB8IChzWzFdIDw8IDE2KSB8IChzWzJdIDw8IDgpIHwgc1szXTsKLX0KLQogc3RhdGljIGludCBfX2Jpb25pY19vcGVuX3R6ZGF0YV9wYXRoKGNvbnN0IGNoYXIqIHBhdGhfcHJlZml4X3ZhcmlhYmxlLCBjb25zdCBjaGFyKiBwYXRoX3N1ZmZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBvbHNvbl9pZCwgaW50KiBkYXRhX3NpemUpIHsKICAgY29uc3QgY2hhciogcGF0aF9wcmVmaXggPSBnZXRlbnYocGF0aF9wcmVmaXhfdmFyaWFibGUpOwpAQCAtMjExOSwxMSArMjEyOSwxNyBAQAogICAgIGZwcmludGYoc3RkZXJyLCAiJXM6ICVzIG5vdCBzZXQhXG4iLCBfX0ZVTkNUSU9OX18sIHBhdGhfcHJlZml4X3ZhcmlhYmxlKTsKICAgICByZXR1cm4gLTE7CiAgIH0KLSAgY2hhciBwYXRoW1BBVEhfTUFYXTsKLSAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvJXMiLCBwYXRoX3ByZWZpeCwgcGF0aF9zdWZmaXgpOworICBzaXplX3QgcGF0aF9sZW5ndGggPSBzdHJsZW4ocGF0aF9wcmVmaXgpICsgMSArIHN0cmxlbihwYXRoX3N1ZmZpeCkgKyAxOworICBjaGFyKiBwYXRoID0gbWFsbG9jKHBhdGhfbGVuZ3RoKTsKKyAgaWYgKHBhdGggPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNvdWxkbid0IGFsbG9jYXRlICV6dS1ieXRlIHBhdGhcbiIsIF9fRlVOQ1RJT05fXywgcGF0aF9sZW5ndGgpOworICAgIHJldHVybiAtMTsKKyAgfQorICBzbnByaW50ZihwYXRoLCBwYXRoX2xlbmd0aCwgIiVzLyVzIiwgcGF0aF9wcmVmaXgsIHBhdGhfc3VmZml4KTsKICAgaW50IGZkID0gVEVNUF9GQUlMVVJFX1JFVFJZKG9wZW4ocGF0aCwgT1BFTl9NT0RFKSk7CiAgIGlmIChmZCA9PSAtMSkgewogICAgIFhMT0coKCIlczogY291bGQgbm90IG9wZW4gXCIlc1wiOiAlc1xuIiwgX19GVU5DVElPTl9fLCBwYXRoLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICBmcmVlKHBhdGgpOwogICAgIHJldHVybiAtMjsgLy8gRGlzdGluZ3Vpc2ggZmFpbHVyZSB0byBmaW5kIGFueSBkYXRhIGZyb20gZmFpbHVyZSB0byBmaW5kIGEgc3BlY2lmaWMgaWQuCiAgIH0KIApAQCAtMjE0Miw2ICsyMTU4LDcgQEAKICAgaWYgKGJ5dGVzX3JlYWQgIT0gc2l6ZW9mKGhlYWRlcikpIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjb3VsZCBub3QgcmVhZCBoZWFkZXIgb2YgXCIlc1wiOiAlc1xuIiwKICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgcGF0aCwgKGJ5dGVzX3JlYWQgPT0gLTEpID8gc3RyZXJyb3IoZXJybm8pIDogInNob3J0IHJlYWQiKTsKKyAgICBmcmVlKHBhdGgpOwogICAgIGNsb3NlKGZkKTsKICAgICByZXR1cm4gLTE7CiAgIH0KQEAgLTIxNDksNiArMjE2Niw3IEBACiAgIGlmIChzdHJuY21wKGhlYWRlci50emRhdGFfdmVyc2lvbiwgInR6ZGF0YSIsIDYpICE9IDAgfHwgaGVhZGVyLnR6ZGF0YV92ZXJzaW9uWzExXSAhPSAwKSB7CiAgICAgZnByaW50ZihzdGRlcnIsICIlczogYmFkIG1hZ2ljIGluIFwiJXNcIjogXCIlLjZzXCJcbiIsCiAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHBhdGgsIGhlYWRlci50emRhdGFfdmVyc2lvbik7CisgICAgZnJlZShwYXRoKTsKICAgICBjbG9zZShmZCk7CiAgICAgcmV0dXJuIC0xOwogICB9CkBAIC0yMTYzLDM0ICsyMTgxLDU4IEBACiAgIGlmIChURU1QX0ZBSUxVUkVfUkVUUlkobHNlZWsoZmQsIG50b2hsKGhlYWRlci5pbmRleF9vZmZzZXQpLCBTRUVLX1NFVCkpID09IC0xKSB7CiAgICAgZnByaW50ZihzdGRlcnIsICIlczogY291bGRuJ3Qgc2VlayB0byBpbmRleCBpbiBcIiVzXCI6ICVzXG4iLAogICAgICAgICAgICAgX19GVU5DVElPTl9fLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworICAgIGZyZWUocGF0aCk7CiAgICAgY2xvc2UoZmQpOwogICAgIHJldHVybiAtMTsKICAgfQogCiAgIG9mZl90IHNwZWNpZmljX3pvbmVfb2Zmc2V0ID0gLTE7CisgIHNzaXplX3QgaW5kZXhfc2l6ZSA9IG50b2hsKGhlYWRlci5kYXRhX29mZnNldCkgLSBudG9obChoZWFkZXIuaW5kZXhfb2Zmc2V0KTsKKyAgY2hhciogaW5kZXggPSBtYWxsb2MoaW5kZXhfc2l6ZSk7CisgIGlmIChpbmRleCA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogY291bGRuJ3QgYWxsb2NhdGUgJXpkLWJ5dGUgaW5kZXggZm9yIFwiJXNcIlxuIiwKKyAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgaW5kZXhfc2l6ZSwgcGF0aCk7CisgICAgZnJlZShwYXRoKTsKKyAgICBjbG9zZShmZCk7CisgICAgcmV0dXJuIC0xOworICB9CisgIGlmIChURU1QX0ZBSUxVUkVfUkVUUlkocmVhZChmZCwgaW5kZXgsIGluZGV4X3NpemUpKSAhPSBpbmRleF9zaXplKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogY291bGQgbm90IHJlYWQgaW5kZXggb2YgXCIlc1wiOiAlc1xuIiwKKyAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgcGF0aCwgKGJ5dGVzX3JlYWQgPT0gLTEpID8gc3RyZXJyb3IoZXJybm8pIDogInNob3J0IHJlYWQiKTsKKyAgICBmcmVlKHBhdGgpOworICAgIGZyZWUoaW5kZXgpOworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gLTE7CisgIH0KIAogICBzdGF0aWMgY29uc3Qgc2l6ZV90IE5BTUVfTEVOR1RIID0gNDA7Ci0gIHVuc2lnbmVkIGNoYXIgYnVmW05BTUVfTEVOR1RIICsgMyAqIHNpemVvZihpbnQzMl90KV07CisgIHN0cnVjdCBpbmRleF9lbnRyeV90IHsKKyAgICBjaGFyIGJ1ZltOQU1FX0xFTkdUSF07CisgICAgaW50MzJfdCBzdGFydDsKKyAgICBpbnQzMl90IGxlbmd0aDsKKyAgICBpbnQzMl90IHVudXNlZDsgLy8gV2FzIHJhdyBHTVQgb2Zmc2V0OyBhbHdheXMgMCBzaW5jZSB0emRhdGEyMDE0ZiAoTCkuCisgIH07CiAKLSAgc2l6ZV90IGlkX2NvdW50ID0gKG50b2hsKGhlYWRlci5kYXRhX29mZnNldCkgLSBudG9obChoZWFkZXIuaW5kZXhfb2Zmc2V0KSkgLyBzaXplb2YoYnVmKTsKKyAgc2l6ZV90IGlkX2NvdW50ID0gKG50b2hsKGhlYWRlci5kYXRhX29mZnNldCkgLSBudG9obChoZWFkZXIuaW5kZXhfb2Zmc2V0KSkgLyBzaXplb2Yoc3RydWN0IGluZGV4X2VudHJ5X3QpOworICBzdHJ1Y3QgaW5kZXhfZW50cnlfdCogZW50cnkgPSAoc3RydWN0IGluZGV4X2VudHJ5X3QqKSBpbmRleDsKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZF9jb3VudDsgKytpKSB7Ci0gICAgaWYgKFRFTVBfRkFJTFVSRV9SRVRSWShyZWFkKGZkLCBidWYsIHNpemVvZihidWYpKSkgIT0gKHNzaXplX3QpIHNpemVvZihidWYpKSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KICAgICBjaGFyIHRoaXNfaWRbTkFNRV9MRU5HVEggKyAxXTsKLSAgICBtZW1jcHkodGhpc19pZCwgYnVmLCBOQU1FX0xFTkdUSCk7CisgICAgbWVtY3B5KHRoaXNfaWQsIGVudHJ5LT5idWYsIE5BTUVfTEVOR1RIKTsKICAgICB0aGlzX2lkW05BTUVfTEVOR1RIXSA9ICdcMCc7CiAKICAgICBpZiAoc3RyY21wKHRoaXNfaWQsIG9sc29uX2lkKSA9PSAwKSB7Ci0gICAgICBzcGVjaWZpY196b25lX29mZnNldCA9IHRvX2ludChidWYgKyBOQU1FX0xFTkdUSCkgKyBudG9obChoZWFkZXIuZGF0YV9vZmZzZXQpOwotICAgICAgKmRhdGFfc2l6ZSA9IHRvX2ludChidWYgKyBOQU1FX0xFTkdUSCArIHNpemVvZihpbnQzMl90KSk7CisgICAgICBzcGVjaWZpY196b25lX29mZnNldCA9IG50b2hsKGVudHJ5LT5zdGFydCkgKyBudG9obChoZWFkZXIuZGF0YV9vZmZzZXQpOworICAgICAgKmRhdGFfc2l6ZSA9IG50b2hsKGVudHJ5LT5sZW5ndGgpOwogICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgKytlbnRyeTsKICAgfQorICBmcmVlKGluZGV4KTsKIAogICBpZiAoc3BlY2lmaWNfem9uZV9vZmZzZXQgPT0gLTEpIHsKICAgICBYTE9HKCgiJXM6IGNvdWxkbid0IGZpbmQgem9uZSBcIiVzXCJcbiIsIF9fRlVOQ1RJT05fXywgb2xzb25faWQpKTsKKyAgICBmcmVlKHBhdGgpOwogICAgIGNsb3NlKGZkKTsKICAgICByZXR1cm4gLTE7CiAgIH0KQEAgLTIxOTgsMTIgKzIyNDAsMTQgQEAKICAgaWYgKFRFTVBfRkFJTFVSRV9SRVRSWShsc2VlayhmZCwgc3BlY2lmaWNfem9uZV9vZmZzZXQsIFNFRUtfU0VUKSkgPT0gLTEpIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjb3VsZCBub3Qgc2VlayB0byAlbGQgaW4gXCIlc1wiOiAlc1xuIiwKICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgc3BlY2lmaWNfem9uZV9vZmZzZXQsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgZnJlZShwYXRoKTsKICAgICBjbG9zZShmZCk7CiAgICAgcmV0dXJuIC0xOwogICB9CiAKICAgLy8gVE9ETzogY2hlY2sgdGhhdCB0aGVyZSdzIFRaX01BR0lDIGF0IHRoaXMgb2Zmc2V0LCBzbyB3ZSBjYW4gZmFsbCBiYWNrIHRvIHRoZSBvdGhlciBmaWxlIGlmIG5vdC4KIAorICBmcmVlKHBhdGgpOwogICByZXR1cm4gZmQ7CiB9CiAKQEAgLTIyMjUsMTIgKzIyNjksMTIgQEAKICAgX3R6TG9jaygpOwogCiAgIC8vIE91ciBzaW5nbGUtaXRlbSBjYWNoZS4KLSAgc3RhdGljIGNoYXIqIGdDYWNoZWRUaW1lWm9uZU5hbWU7Ci0gIHN0YXRpYyBzdHJ1Y3Qgc3RhdGUgZ0NhY2hlZFRpbWVab25lOworICBzdGF0aWMgY2hhciogZ19jYWNoZWRfdGltZV96b25lX25hbWU7CisgIHN0YXRpYyBzdHJ1Y3Qgc3RhdGUgZ19jYWNoZWRfdGltZV96b25lOwogCiAgIC8vIERvIHdlIGFscmVhZHkgaGF2ZSB0aGlzIHRpbWV6b25lIGNhY2hlZD8KLSAgaWYgKGdDYWNoZWRUaW1lWm9uZU5hbWUgIT0gTlVMTCAmJiBzdHJjbXAobmFtZSwgZ0NhY2hlZFRpbWVab25lTmFtZSkgPT0gMCkgewotICAgICpzcCA9IGdDYWNoZWRUaW1lWm9uZTsKKyAgaWYgKGdfY2FjaGVkX3RpbWVfem9uZV9uYW1lICE9IE5VTEwgJiYgc3RyY21wKG5hbWUsIGdfY2FjaGVkX3RpbWVfem9uZV9uYW1lKSA9PSAwKSB7CisgICAgKnNwID0gZ19jYWNoZWRfdGltZV96b25lOwogICAgIF90elVubG9jaygpOwogICAgIHJldHVybiAwOwogICB9CkBAIC0yMjM5LDkgKzIyODMsOSBAQAogICBpbnQgcmMgPSB0emxvYWQobmFtZSwgc3AsIGRvZXh0ZW5kKTsKICAgaWYgKHJjID09IDApIHsKICAgICAvLyBVcGRhdGUgdGhlIGNhY2hlLgotICAgIGZyZWUoZ0NhY2hlZFRpbWVab25lTmFtZSk7Ci0gICAgZ0NhY2hlZFRpbWVab25lTmFtZSA9IHN0cmR1cChuYW1lKTsKLSAgICBnQ2FjaGVkVGltZVpvbmUgPSAqc3A7CisgICAgZnJlZShnX2NhY2hlZF90aW1lX3pvbmVfbmFtZSk7CisgICAgZ19jYWNoZWRfdGltZV96b25lX25hbWUgPSBzdHJkdXAobmFtZSk7CisgICAgZ19jYWNoZWRfdGltZV96b25lID0gKnNwOwogICB9CiAKICAgX3R6VW5sb2NrKCk7CkBAIC0yMjQ5LDIzICsyMjkzLDIxIEBACiB9CiAKIC8vIE5vbi1zdGFuZGFyZCBBUEk6IG1rdGltZSgzKSBidXQgd2l0aCBhbiBleHBsaWNpdCB0aW1lem9uZSBwYXJhbWV0ZXIuCi10aW1lX3QgbWt0aW1lX3R6KHN0cnVjdCB0bSogY29uc3QgdG1wLCBjb25zdCBjaGFyKiB0eikgewotICBzdHJ1Y3Qgc3RhdGUgc3Q7Ci0gIGlmIChfX2Jpb25pY190emxvYWRfY2FjaGVkKHR6LCAmc3QsIFRSVUUpICE9IDApIHsKLSAgICAvLyBUT0RPOiBub3Qgc3VyZSB3aGF0J3MgYmVzdCBoZXJlLCBidXQgZm9yIG5vdywgd2UgZmFsbCBiYWNrIHRvIGdtdC4KLSAgICBnbXRsb2FkKCZzdCk7Ci0gIH0KLSAgcmV0dXJuIHRpbWUxKHRtcCwgbG9jYWxzdWIsIDBMLCAmc3QpOwotfQorLy8gVGhpcyBjYW4ndCBhY3R1YWxseSBiZSBoaWRkZW4vcmVtb3ZlZCB1bnRpbCB3ZSBmaXggTXRwVXRpbHMuY3BwCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSB0aW1lX3QgbWt0aW1lX3R6KHN0cnVjdCB0bSogY29uc3QgdG1wLCBjb25zdCBjaGFyKiB0eikgeworICBzdHJ1Y3Qgc3RhdGUqIHN0ID0gbWFsbG9jKHNpemVvZigqc3QpKTsKKyAgdGltZV90IHJldHVybl92YWx1ZTsKIAotLy8gTm9uLXN0YW5kYXJkIEFQSTogbG9jYWx0aW1lKDMpIGJ1dCB3aXRoIGFuIGV4cGxpY2l0IHRpbWV6b25lIHBhcmFtZXRlci4KLXZvaWQgbG9jYWx0aW1lX3R6KGNvbnN0IHRpbWVfdCogY29uc3QgdGltZXAsIHN0cnVjdCB0bSogdG1wLCBjb25zdCBjaGFyKiB0eikgewotICBzdHJ1Y3Qgc3RhdGUgc3Q7Ci0gIGlmIChfX2Jpb25pY190emxvYWRfY2FjaGVkKHR6LCAmc3QsIFRSVUUpICE9IDApIHsKKyAgaWYgKHN0ID09IE5VTEwpCisgICAgcmV0dXJuIDA7CisgIGlmIChfX2Jpb25pY190emxvYWRfY2FjaGVkKHR6LCBzdCwgVFJVRSkgIT0gMCkgewogICAgIC8vIFRPRE86IG5vdCBzdXJlIHdoYXQncyBiZXN0IGhlcmUsIGJ1dCBmb3Igbm93LCB3ZSBmYWxsIGJhY2sgdG8gZ210LgotICAgIGdtdGxvYWQoJnN0KTsKKyAgICBnbXRsb2FkKHN0KTsKICAgfQotICBsb2NhbHN1Yih0aW1lcCwgMEwsIHRtcCwgJnN0KTsKKworICByZXR1cm5fdmFsdWUgPSB0aW1lMSh0bXAsIGxvY2Fsc3ViLCAwTCwgc3QpOworICBmcmVlKHN0KTsKKyAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KIAogLy8gRU5EIGFuZHJvaWQtYWRkZWQKZGlmZiAtLWdpdCBhL2xpYmMvdHpjb2RlL3ByaXZhdGUuaCBiL2xpYmMvdHpjb2RlL3ByaXZhdGUuaAppbmRleCAzYTE5MzA1Li5jMzBjNzExIDEwMDY0NAotLS0gYS9saWJjL3R6Y29kZS9wcml2YXRlLmgKKysrIGIvbGliYy90emNvZGUvcHJpdmF0ZS5oCkBAIC0xOSw3ICsxOSw3IEBACiAKIC8qCiAqKiBEZWZhdWx0cyBmb3IgcHJlcHJvY2Vzc29yIHN5bWJvbHMuCi0qKiBZb3UgY2FuIG92ZXJyaWRlIHRoZXNlIGluIHlvdXIgQyBjb21waWxlciBvcHRpb25zLCBlLmcuIGAtREhBVkVfQURKVElNRT0wJy4KKyoqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlc2UgaW4geW91ciBDIGNvbXBpbGVyIG9wdGlvbnMsIGUuZy4gJy1ESEFWRV9BREpUSU1FPTAnLgogKi8KIAogI2lmbmRlZiBIQVZFX0FESlRJTUUKQEAgLTM0LDYgKzM0LDEwIEBACiAjZGVmaW5lIEhBVkVfSU5DT01QQVRJQkxFX0NUSU1FX1IJMAogI2VuZGlmIC8qICFkZWZpbmVkIElOQ09NUEFUSUJMRV9DVElNRV9SICovCiAKKyNpZm5kZWYgSEFWRV9MSU5LCisjZGVmaW5lIEhBVkVfTElOSwkJMQorI2VuZGlmIC8qICFkZWZpbmVkIEhBVkVfTElOSyAqLworCiAjaWZuZGVmIEhBVkVfU0VUVElNRU9GREFZCiAjZGVmaW5lIEhBVkVfU0VUVElNRU9GREFZCTMKICNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX1NFVFRJTUVPRkRBWSAqLwpAQCAtNTgsOSArNjIsMTEgQEAKICNkZWZpbmUgSEFWRV9VVE1QWF9ICQkwCiAjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9VVE1QWF9IICovCiAKKyNpZiAhZGVmaW5lZChfX0FORFJPSURfXykKICNpZm5kZWYgTE9DQUxFX0hPTUUKICNkZWZpbmUgTE9DQUxFX0hPTUUJCSIvdXNyL2xpYi9sb2NhbGUiCiAjZW5kaWYgLyogIWRlZmluZWQgTE9DQUxFX0hPTUUgKi8KKyNlbmRpZiAvLyBfX0FORFJPSURfXwogCiAjaWYgSEFWRV9JTkNPTVBBVElCTEVfQ1RJTUVfUgogI2RlZmluZSBhc2N0aW1lX3IgX2luY29tcGF0aWJsZV9hc2N0aW1lX3IKQEAgLTExNiw4ICsxMjIsOSBAQAogKi8KICNpZm5kZWYgSEFWRV9TVERJTlRfSAogI2RlZmluZSBIQVZFX1NURElOVF9IIFwKLQkoMTk5OTAxIDw9IF9fU1REQ19WRVJTSU9OX18gfHwgXAotCTIgPCAoX19HTElCQ19fICsgKDAgPCBfX0dMSUJDX01JTk9SX18pKSkKKyAgICgxOTk5MDEgPD0gX19TVERDX1ZFUlNJT05fXyBcCisgICAgfHwgMiA8IF9fR0xJQkNfXyArICgxIDw9IF9fR0xJQkNfTUlOT1JfXykJXAorICAgIHx8IF9fQ1lHV0lOX18pCiAjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9TVERJTlRfSCAqLwogCiAjaWYgSEFWRV9TVERJTlRfSApAQCAtMjAxLDYgKzIwOCwxMCBAQAogI2RlZmluZSBJTlQzMl9NSU4gKC0xIC0gSU5UMzJfTUFYKQogI2VuZGlmIC8qICFkZWZpbmVkIElOVDMyX01JTiAqLwogCisjaWZuZGVmIFNJWkVfTUFYCisjZGVmaW5lIFNJWkVfTUFYICgoc2l6ZV90KSAtMSkKKyNlbmRpZgorCiAjaWYgMiA8IF9fR05VQ19fICsgKDk2IDw9IF9fR05VQ19NSU5PUl9fKQogIyBkZWZpbmUgQVRUUklCVVRFX0NPTlNUIF9fYXR0cmlidXRlX18gKChjb25zdCkpCiAjIGRlZmluZSBBVFRSSUJVVEVfUFVSRSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQpAQCAtMzQzLDI5ICszNTQsMTUgQEAKICoqIElOSVRJQUxJWkUoeCkKICovCiAKLSNpZm5kZWYgR05VQ19vcl9saW50CiAjaWZkZWYgbGludAotI2RlZmluZSBHTlVDX29yX2xpbnQKLSNlbmRpZiAvKiBkZWZpbmVkIGxpbnQgKi8KLSNpZm5kZWYgbGludAotI2lmZGVmIF9fR05VQ19fCi0jZGVmaW5lIEdOVUNfb3JfbGludAotI2VuZGlmIC8qIGRlZmluZWQgX19HTlVDX18gKi8KLSNlbmRpZiAvKiAhZGVmaW5lZCBsaW50ICovCi0jZW5kaWYgLyogIWRlZmluZWQgR05VQ19vcl9saW50ICovCi0KLSNpZm5kZWYgSU5JVElBTElaRQotI2lmZGVmIEdOVUNfb3JfbGludAotI2RlZmluZSBJTklUSUFMSVpFKHgpCSgoeCkgPSAwKQotI2VuZGlmIC8qIGRlZmluZWQgR05VQ19vcl9saW50ICovCi0jaWZuZGVmIEdOVUNfb3JfbGludAotI2RlZmluZSBJTklUSUFMSVpFKHgpCi0jZW5kaWYgLyogIWRlZmluZWQgR05VQ19vcl9saW50ICovCi0jZW5kaWYgLyogIWRlZmluZWQgSU5JVElBTElaRSAqLworIyBkZWZpbmUgSU5JVElBTElaRSh4KQkoKHgpID0gMCkKKyNlbHNlCisjIGRlZmluZSBJTklUSUFMSVpFKHgpCisjZW5kaWYKIAogLyoKICoqIEZvciB0aGUgYmVuZWZpdCBvZiBHTlUgZm9say4uLgotKiogYF8oTVNHSUQpJyB1c2VzIHRoZSBjdXJyZW50IGxvY2FsZSdzIG1lc3NhZ2UgbGlicmFyeSBzdHJpbmcgZm9yIE1TR0lELgorKiogJ18oTVNHSUQpJyB1c2VzIHRoZSBjdXJyZW50IGxvY2FsZSdzIG1lc3NhZ2UgbGlicmFyeSBzdHJpbmcgZm9yIE1TR0lELgogKiogVGhlIGRlZmF1bHQgaXMgdG8gdXNlIGdldHRleHQgaWYgYXZhaWxhYmxlLCBhbmQgdXNlIE1TR0lEIG90aGVyd2lzZS4KICovCiAKQEAgLTM3Nyw5ICszNzQsOSBAQAogI2VuZGlmIC8qICFIQVZFX0dFVFRFWFQgKi8KICNlbmRpZiAvKiAhZGVmaW5lZCBfICovCiAKLSNpZm5kZWYgVFpfRE9NQUlOCi0jZGVmaW5lIFRaX0RPTUFJTiAidHoiCi0jZW5kaWYgLyogIWRlZmluZWQgVFpfRE9NQUlOICovCisjaWYgIWRlZmluZWQgVFpfRE9NQUlOICYmIGRlZmluZWQgVFpfRE9NQUlORElSCisjIGRlZmluZSBUWl9ET01BSU4gInR6IgorI2VuZGlmCiAKICNpZiBIQVZFX0lOQ09NUEFUSUJMRV9DVElNRV9SCiAjdW5kZWYgYXNjdGltZV9yCmRpZmYgLS1naXQgYS9saWJjL3R6Y29kZS9zdHJmdGltZS5jIGIvbGliYy90emNvZGUvc3RyZnRpbWUuYwppbmRleCAxMTY0YTEzLi40MzI4YjRjIDEwMDY0NAotLS0gYS9saWJjL3R6Y29kZS9zdHJmdGltZS5jCisrKyBiL2xpYmMvdHpjb2RlL3N0cmZ0aW1lLmMKQEAgLTEsMTIgKzEsOSBAQAotI2lmbmRlZiBsaW50Ci0jaWZuZGVmIE5PSUQKLXN0YXRpYyBjaGFyIGVsc2llaWRbXSA9ICJAKCMpc3RyZnRpbWUuYyA4LjEiOwogLyoKLSoqIEJhc2VkIG9uIHRoZSBVQ0IgdmVyc2lvbiB3aXRoIHRoZSBJRCBhcHBlYXJpbmcgYmVsb3cuCisqKiBCYXNlZCBvbiB0aGUgVUNCIHZlcnNpb24gd2l0aCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgc2Njc2lkCisqKiBhcHBlYXJpbmcgYmVsb3cuCisqKgogKiogVGhpcyBpcyBBTlNJaXNoIG9ubHkgd2hlbiAibXVsdGlieXRlIGNoYXJhY3RlciA9PSBwbGFpbiBjaGFyYWN0ZXIiLgogKi8KLSNlbmRpZiAvKiAhZGVmaW5lZCBOT0lEICovCi0jZW5kaWYgLyogIWRlZmluZWQgbGludCAqLwogCiAjaW5jbHVkZSAicHJpdmF0ZS5oIgogCkBAIC0yMiwzMCArMTksMjkgQEAKICoqIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIEJlcmtlbGV5LiBUaGUgbmFtZSBvZiB0aGUKICoqIFVuaXZlcnNpdHkgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAqKiBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0qKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorKiogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCiAqKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAogKiogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogKi8KIAotI2lmbmRlZiBMSUJDX1NDQ1MKLSNpZm5kZWYgbGludAotc3RhdGljIGNvbnN0IGNoYXIgICBzY2NzaWRbXSA9ICJAKCMpc3RyZnRpbWUuYyAgNS40IChCZXJrZWxleSkgMy8xNC84OSI7Ci0jZW5kaWYgLyogIWRlZmluZWQgbGludCAqLwotI2VuZGlmIC8qICFkZWZpbmVkIExJQkNfU0NDUyAqLwotCiAjaW5jbHVkZSAidHpmaWxlLmgiCiAjaW5jbHVkZSAiZmNudGwuaCIKICNpbmNsdWRlICJsb2NhbGUuaCIKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHRpbWU2NC5oPgotI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX3RpbWUuaCIgIC8qIGZvciBzdHJmdGltZV90eiAqLwogCi0vKiBzdHJ1Y3QgbGNfdGltZV9UIGlzIG5vdyBkZWZpbmVkIGFzIHN0cmZ0aW1lX2xvY2FsZQotICogaW4gPHRpbWUuaD4KLSAqLwotI2lmIDEKLSNkZWZpbmUgIGxjX3RpbWVfVCAgICBzdHJmdGltZV9sb2NhbGUKKyNpZiBfX0FORFJPSURfXworCisvKiBMUDMyIGhhZCBhIDMyLWJpdCB0aW1lX3QsIHNvIHdlIG5lZWQgdG8gd29yayBhcm91bmQgdGhhdCBoZXJlLiAqLworI2lmIGRlZmluZWQoX19MUDY0X18pCisjZGVmaW5lIHRpbWU2NF90IHRpbWVfdAorI2RlZmluZSBta3RpbWU2NCBta3RpbWUKICNlbHNlCisjaW5jbHVkZSA8dGltZTY0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNlbmRpZgorCiBzdHJ1Y3QgbGNfdGltZV9UIHsKICAgICBjb25zdCBjaGFyICogICAgbW9uW01PTlNQRVJZRUFSXTsKICAgICBjb25zdCBjaGFyICogICAgbW9udGhbTU9OU1BFUllFQVJdOwpAQCAtNTgsOSArNTQsMTYgQEAKICAgICBjb25zdCBjaGFyICogICAgcG07CiAgICAgY29uc3QgY2hhciAqICAgIGRhdGVfZm10OwogfTsKLSNlbmRpZgogCisjaWZkZWYgTE9DQUxFX0hPTUUKKyNpbmNsdWRlICJzeXMvc3RhdC5oIgorc3RhdGljIHN0cnVjdCBsY190aW1lX1QgICAgICAgICAgICAgICAgbG9jYWxlYnVmOworc3RhdGljIHN0cnVjdCBsY190aW1lX1QgKiAgICAgIF9sb2Modm9pZCk7CisjZGVmaW5lIExvY2FsZSBfbG9jKCkKKyNlbmRpZiAvKiBkZWZpbmVkIExPQ0FMRV9IT01FICovCisjaWZuZGVmIExPQ0FMRV9IT01FCiAjZGVmaW5lIExvY2FsZSAgKCZDX3RpbWVfbG9jYWxlKQorI2VuZGlmIC8qICFkZWZpbmVkIExPQ0FMRV9IT01FICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGNfdGltZV9UICAgQ190aW1lX2xvY2FsZSA9IHsKICAgICB7CkBAIC03MCw5ICs3Myw2IEBACiAgICAgICAgICJKYW51YXJ5IiwgIkZlYnJ1YXJ5IiwgIk1hcmNoIiwgIkFwcmlsIiwgIk1heSIsICJKdW5lIiwKICAgICAgICAgIkp1bHkiLCAiQXVndXN0IiwgIlNlcHRlbWJlciIsICJPY3RvYmVyIiwgIk5vdmVtYmVyIiwgIkRlY2VtYmVyIgogICAgIH0sIHsKLSAgICAgICAgIkphbnVhcnkiLCAiRmVicnVhcnkiLCAiTWFyY2giLCAiQXByaWwiLCAiTWF5IiwgIkp1bmUiLAotICAgICAgICAiSnVseSIsICJBdWd1c3QiLCAiU2VwdGVtYmVyIiwgIk9jdG9iZXIiLCAiTm92ZW1iZXIiLCAiRGVjZW1iZXIiCi0gICAgfSwgewogICAgICAgICAiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwKICAgICAgICAgIlRodSIsICJGcmkiLCAiU2F0IgogICAgIH0sIHsKQEAgLTExNCw3ICsxMTQsNyBAQAogc3RhdGljIGNoYXIgKiAgIF9hZGQoY29uc3QgY2hhciAqLCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKIHN0YXRpYyBjaGFyICogICBfY29udihpbnQsIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBjb25zdCBjaGFyICopOwogc3RhdGljIGNoYXIgKiAgIF9mbXQoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0gKiwgY2hhciAqLCBjb25zdCBjaGFyICosCi0gICAgICAgICAgICBpbnQgKiwgY29uc3Qgc3RydWN0IHN0cmZ0aW1lX2xvY2FsZSopOworICAgICAgICAgICAgaW50ICopOwogc3RhdGljIGNoYXIgKiAgIF95Y29udihpbnQsIGludCwgaW50LCBpbnQsIGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwogc3RhdGljIGNoYXIgKiAgIGdldGZvcm1hdChpbnQsIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKik7CiAKQEAgLTEzMiwzMCArMTMyLDE5IEBACiAjZGVmaW5lIEZPUkNFX0xPV0VSX0NBU0UgMHgxMDAKIAogc2l6ZV90Ci1zdHJmdGltZShzLCBtYXhzaXplLCBmb3JtYXQsIHQpCi1jaGFyICogY29uc3QgICAgICAgIHM7Ci1jb25zdCBzaXplX3QgICAgICAgIG1heHNpemU7Ci1jb25zdCBjaGFyICogY29uc3QgIGZvcm1hdDsKLWNvbnN0IHN0cnVjdCB0bSAqIGNvbnN0IHQ7Ci17Ci0gICAgcmV0dXJuIHN0cmZ0aW1lX3R6KHMsIG1heHNpemUsIGZvcm1hdCwgdCwgTG9jYWxlKTsKLX0KLQotc2l6ZV90Ci1zdHJmdGltZV90eihzLCBtYXhzaXplLCBmb3JtYXQsIHQsIGxvY2FsZSkKLWNoYXIgKiBjb25zdCAgICAgICAgczsKLWNvbnN0IHNpemVfdCAgICAgICAgbWF4c2l6ZTsKLWNvbnN0IGNoYXIgKiBjb25zdCAgZm9ybWF0OwotY29uc3Qgc3RydWN0IHRtICogY29uc3QgdDsKLWNvbnN0IHN0cnVjdCBzdHJmdGltZV9sb2NhbGUgKmxvY2FsZTsKK3N0cmZ0aW1lKGNoYXIgKiBjb25zdCBzLCBjb25zdCBzaXplX3QgbWF4c2l6ZSwgY29uc3QgY2hhciAqY29uc3QgZm9ybWF0LAorICAgICAgICBjb25zdCBzdHJ1Y3QgdG0gKmNvbnN0IHQpCiB7CiAgICAgY2hhciAqICBwOwogICAgIGludCB3YXJuOwogCiAgICAgdHpzZXQoKTsKKyNpZmRlZiBMT0NBTEVfSE9NRQorICAgIGxvY2FsZWJ1Zi5tb25bMF0gPSAwOworI2VuZGlmIC8qIGRlZmluZWQgTE9DQUxFX0hPTUUgKi8KICAgICB3YXJuID0gSU5fTk9ORTsKLSAgICBwID0gX2ZtdCgoKGZvcm1hdCA9PSBOVUxMKSA/ICIlYyIgOiBmb3JtYXQpLCB0LCBzLCBzICsgbWF4c2l6ZSwgJndhcm4sIGxvY2FsZSk7Ci0jaWYgMCAgLyogaWZuZGVmIE5PX1JVTl9USU1FX1dBUk5JTkdTX0FCT1VUX1lFQVJfMjAwMF9QUk9CTEVNU19USEFOS19ZT1UgKi8KKyAgICBwID0gX2ZtdCgoKGZvcm1hdCA9PSBOVUxMKSA/ICIlYyIgOiBmb3JtYXQpLCB0LCBzLCBzICsgbWF4c2l6ZSwgJndhcm4pOworI2lmbmRlZiBOT19SVU5fVElNRV9XQVJOSU5HU19BQk9VVF9ZRUFSXzIwMDBfUFJPQkxFTVNfVEhBTktfWU9VCiAgICAgaWYgKHdhcm4gIT0gSU5fTk9ORSAmJiBnZXRlbnYoWUVBUl8yMDAwX05BTUUpICE9IE5VTEwpIHsKICAgICAgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKICAgICAgICAgaWYgKGZvcm1hdCA9PSBOVUxMKQpAQCAtMTk0LDEzICsxODMsOCBAQAogfQogCiBzdGF0aWMgY2hhciAqCi1fZm10KGZvcm1hdCwgdCwgcHQsIHB0bGltLCB3YXJucCwgbG9jYWxlKQotY29uc3QgY2hhciAqICAgICAgICBmb3JtYXQ7Ci1jb25zdCBzdHJ1Y3QgdG0gKiBjb25zdCB0OwotY2hhciAqICAgICAgICAgIHB0OwotY29uc3QgY2hhciAqIGNvbnN0ICBwdGxpbTsKLWludCAqICAgICAgICAgICB3YXJucDsKLWNvbnN0IHN0cnVjdCBzdHJmdGltZV9sb2NhbGUqIGxvY2FsZTsKK19mbXQoY29uc3QgY2hhciAqZm9ybWF0LCBjb25zdCBzdHJ1Y3QgdG0gKmNvbnN0IHQsIGNoYXIgKiBwdCwKKyAgICAgICAgY29uc3QgY2hhciAqY29uc3QgcHRsaW0sIGludCAqd2FybnApCiB7CiAgICAgZm9yICggOyAqZm9ybWF0OyArK2Zvcm1hdCkgewogICAgICAgICBpZiAoKmZvcm1hdCA9PSAnJScpIHsKQEAgLTIxMywzMyArMTk3LDI2IEBACiAgICAgICAgICAgICBjYXNlICdBJzoKICAgICAgICAgICAgICAgICBwdCA9IF9hZGQoKHQtPnRtX3dkYXkgPCAwIHx8CiAgICAgICAgICAgICAgICAgICAgIHQtPnRtX3dkYXkgPj0gREFZU1BFUldFRUspID8KLSAgICAgICAgICAgICAgICAgICAgIj8iIDogbG9jYWxlLT53ZWVrZGF5W3QtPnRtX3dkYXldLAorICAgICAgICAgICAgICAgICAgICAiPyIgOiBMb2NhbGUtPndlZWtkYXlbdC0+dG1fd2RheV0sCiAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSwgbW9kaWZpZXIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY2FzZSAnYSc6CiAgICAgICAgICAgICAgICAgcHQgPSBfYWRkKCh0LT50bV93ZGF5IDwgMCB8fAogICAgICAgICAgICAgICAgICAgICB0LT50bV93ZGF5ID49IERBWVNQRVJXRUVLKSA/Ci0gICAgICAgICAgICAgICAgICAgICI/IiA6IGxvY2FsZS0+d2RheVt0LT50bV93ZGF5XSwKKyAgICAgICAgICAgICAgICAgICAgIj8iIDogTG9jYWxlLT53ZGF5W3QtPnRtX3dkYXldLAogICAgICAgICAgICAgICAgICAgICBwdCwgcHRsaW0sIG1vZGlmaWVyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJ0InOgotICAgICAgICAgICAgICAgIGlmIChtb2RpZmllciA9PSAnLScpIHsKLSAgICAgICAgICAgICAgICAgICAgcHQgPSBfYWRkKCh0LT50bV9tb24gPCAwIHx8CisgICAgICAgICAgICAgICAgcHQgPSBfYWRkKCh0LT50bV9tb24gPCAwIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQtPnRtX21vbiA+PSBNT05TUEVSWUVBUikgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPyIgOiBsb2NhbGUtPnN0YW5kYWxvbmVfbW9udGhbdC0+dG1fbW9uXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj8iIDogTG9jYWxlLT5tb250aFt0LT50bV9tb25dLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdCwgcHRsaW0sIG1vZGlmaWVyKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwdCA9IF9hZGQoKHQtPnRtX21vbiA8IDAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC0+dG1fbW9uID49IE1PTlNQRVJZRUFSKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI/IiA6IGxvY2FsZS0+bW9udGhbdC0+dG1fbW9uXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHQsIHB0bGltLCBtb2RpZmllcik7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY2FzZSAnYic6CiAgICAgICAgICAgICBjYXNlICdoJzoKICAgICAgICAgICAgICAgICBwdCA9IF9hZGQoKHQtPnRtX21vbiA8IDAgfHwKICAgICAgICAgICAgICAgICAgICAgdC0+dG1fbW9uID49IE1PTlNQRVJZRUFSKSA/Ci0gICAgICAgICAgICAgICAgICAgICI/IiA6IGxvY2FsZS0+bW9uW3QtPnRtX21vbl0sCisgICAgICAgICAgICAgICAgICAgICI/IiA6IExvY2FsZS0+bW9uW3QtPnRtX21vbl0sCiAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSwgbW9kaWZpZXIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY2FzZSAnQyc6CkBAIC0yNTcsNyArMjM0LDcgQEAKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaW50IHdhcm4yID0gSU5fU09NRTsKIAotICAgICAgICAgICAgICAgIHB0ID0gX2ZtdChsb2NhbGUtPmNfZm10LCB0LCBwdCwgcHRsaW0sIHdhcm5wLCBsb2NhbGUpOworICAgICAgICAgICAgICAgIHB0ID0gX2ZtdChMb2NhbGUtPmNfZm10LCB0LCBwdCwgcHRsaW0sICZ3YXJuMik7CiAgICAgICAgICAgICAgICAgaWYgKHdhcm4yID09IElOX0FMTCkKICAgICAgICAgICAgICAgICAgICAgd2FybjIgPSBJTl9USElTOwogICAgICAgICAgICAgICAgIGlmICh3YXJuMiA+ICp3YXJucCkKQEAgLTI2NSw3ICsyNDIsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJ0QnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdCA9IF9mbXQoIiVtLyVkLyV5IiwgdCwgcHQsIHB0bGltLCB3YXJucCwgbG9jYWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHQgPSBfZm10KCIlbS8lZC8leSIsIHQsIHB0LCBwdGxpbSwgd2FybnApOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY2FzZSAnZCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ID0gX2NvbnYodC0+dG1fbWRheSwKQEAgLTI5OSw3ICsyNzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjYXNlICdGJzoKLSAgICAgICAgICAgICAgICBwdCA9IF9mbXQoIiVZLSVtLSVkIiwgdCwgcHQsIHB0bGltLCB3YXJucCwgbG9jYWxlKTsKKyAgICAgICAgICAgICAgICBwdCA9IF9mbXQoIiVZLSVtLSVkIiwgdCwgcHQsIHB0bGltLCB3YXJucCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjYXNlICdIJzoKICAgICAgICAgICAgICAgICBwdCA9IF9jb252KHQtPnRtX2hvdXIsCkBAIC0zNDAsNyArMzE3LDcgQEAKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICoqIEFmdGVyIGFsbCB0aGlzIHRpbWUsIHN0aWxsIHVuY2xhaW1lZCEKICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHB0ID0gX2FkZCgia2l0Y2hlbiBzaW5rIiwgcHQsIHB0bGltLCBtb2RpZmllcik7CisgICAgICAgICAgICAgICAgcHQgPSBfYWRkKCJraXRjaGVuIHNpbmsiLCBwdCwgcHRsaW0pOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmIC8qIGRlZmluZWQgS0lUQ0hFTl9TSU5LICovCiAgICAgICAgICAgICBjYXNlICdsJzoKQEAgLTM3NiwyMSArMzUzLDIxIEBACiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjYXNlICdwJzoKICAgICAgICAgICAgICAgICBwdCA9IF9hZGQoKHQtPnRtX2hvdXIgPj0gKEhPVVJTUEVSREFZIC8gMikpID8KLSAgICAgICAgICAgICAgICAgICAgbG9jYWxlLT5wbSA6Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsZS0+YW0sCisgICAgICAgICAgICAgICAgICAgIExvY2FsZS0+cG0gOgorICAgICAgICAgICAgICAgICAgICBMb2NhbGUtPmFtLAogICAgICAgICAgICAgICAgICAgICBwdCwgcHRsaW0sIG1vZGlmaWVyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJ1AnOgogICAgICAgICAgICAgICAgIHB0ID0gX2FkZCgodC0+dG1faG91ciA+PSAoSE9VUlNQRVJEQVkgLyAyKSkgPwotICAgICAgICAgICAgICAgICAgICBsb2NhbGUtPnBtIDoKLSAgICAgICAgICAgICAgICAgICAgbG9jYWxlLT5hbSwKKyAgICAgICAgICAgICAgICAgICAgTG9jYWxlLT5wbSA6CisgICAgICAgICAgICAgICAgICAgIExvY2FsZS0+YW0sCiAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSwgRk9SQ0VfTE9XRVJfQ0FTRSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjYXNlICdSJzoKLSAgICAgICAgICAgICAgICBwdCA9IF9mbXQoIiVIOiVNIiwgdCwgcHQsIHB0bGltLCB3YXJucCwgbG9jYWxlKTsKKyAgICAgICAgICAgICAgICBwdCA9IF9mbXQoIiVIOiVNIiwgdCwgcHQsIHB0bGltLCB3YXJucCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjYXNlICdyJzoKLSAgICAgICAgICAgICAgICBwdCA9IF9mbXQoIiVJOiVNOiVTICVwIiwgdCwgcHQsIHB0bGltLCB3YXJucCwgbG9jYWxlKTsKKyAgICAgICAgICAgICAgICBwdCA9IF9mbXQoIiVJOiVNOiVTICVwIiwgdCwgcHQsIHB0bGltLCB3YXJucCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjYXNlICdTJzoKICAgICAgICAgICAgICAgICBwdCA9IF9jb252KHQtPnRtX3NlYywKQEAgLTQxNiw3ICszOTMsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJ1QnOgotICAgICAgICAgICAgICAgIHB0ID0gX2ZtdCgiJUg6JU06JVMiLCB0LCBwdCwgcHRsaW0sIHdhcm5wLCBsb2NhbGUpOworICAgICAgICAgICAgICAgIHB0ID0gX2ZtdCgiJUg6JU06JVMiLCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJ3QnOgogICAgICAgICAgICAgICAgIHB0ID0gX2FkZCgiXHQiLCBwdCwgcHRsaW0sIG1vZGlmaWVyKTsKQEAgLTQ0Nyw3ICs0MjQsNyBAQAogKiogKDAxLTUzKS4iCiAqKiAoYWRvLCAxOTkzLTA1LTI0KQogKioKLSoqIEZyb20gImh0dHA6Ly93d3cuZnQudW5pLWVybGFuZ2VuLmRlL35tc2t1aG4vaXNvLXRpbWUuaHRtbCIgYnkgTWFya3VzIEt1aG46CisqKiBGcm9tIDxodHRwOi8vd3d3LmZ0LnVuaS1lcmxhbmdlbi5kZS9+bXNrdWhuL2lzby10aW1lLmh0bWw+IGJ5IE1hcmt1cyBLdWhuOgogKiogIldlZWsgMDEgb2YgYSB5ZWFyIGlzIHBlciBkZWZpbml0aW9uIHRoZSBmaXJzdCB3ZWVrIHdoaWNoIGhhcyB0aGUKICoqIFRodXJzZGF5IGluIHRoaXMgeWVhciwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byB0aGUgd2VlayB3aGljaCBjb250YWlucwogKiogdGhlIGZvdXJ0aCBkYXkgb2YgSmFudWFyeS4gSW4gb3RoZXIgd29yZHMsIHRoZSBmaXJzdCB3ZWVrIG9mIGEgbmV3IHllYXIKQEAgLTUxNywxMSArNDk0LDcgQEAKICNlbmRpZiAvKiBkZWZpbmVkIFhQRzRfMTk5NF8wNF8wOSAqLwogICAgICAgICAgICAgICAgICAgICBpZiAoKmZvcm1hdCA9PSAnVicpCiAgICAgICAgICAgICAgICAgICAgICAgICBwdCA9IF9jb252KHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGZvcm1hdChtb2RpZmllciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMDJkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMDJkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGZvcm1hdChtb2RpZmllciwgIiUwMmQiLCAiJTJkIiwgIiVkIiwgIiUwMmQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdCwgcHRsaW0pOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgqZm9ybWF0ID09ICdnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgKndhcm5wID0gSU5fQUxMOwpAQCAtNTM3LDcgKzUxMCw3IEBACiAgICAgICAgICAgICAgICAgKiogImRhdGUgYXMgZGQtYmJiLVlZWVkiCiAgICAgICAgICAgICAgICAgKiogKGFkbywgMTk5My0wNS0yNCkKICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHB0ID0gX2ZtdCgiJWUtJWItJVkiLCB0LCBwdCwgcHRsaW0sIHdhcm5wLCBsb2NhbGUpOworICAgICAgICAgICAgICAgIHB0ID0gX2ZtdCgiJWUtJWItJVkiLCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJ1cnOgogICAgICAgICAgICAgICAgIHB0ID0gX2NvbnYoKHQtPnRtX3lkYXkgKyBEQVlTUEVSV0VFSyAtCkBAIC01NTIsMTMgKzUyNSwxMyBAQAogICAgICAgICAgICAgICAgIHB0ID0gX2NvbnYodC0+dG1fd2RheSwgIiVkIiwgcHQsIHB0bGltKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJ1gnOgotICAgICAgICAgICAgICAgIHB0ID0gX2ZtdChsb2NhbGUtPlhfZm10LCB0LCBwdCwgcHRsaW0sIHdhcm5wLCBsb2NhbGUpOworICAgICAgICAgICAgICAgIHB0ID0gX2ZtdChMb2NhbGUtPlhfZm10LCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJ3gnOgogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpbnQgd2FybjIgPSBJTl9TT01FOwogCi0gICAgICAgICAgICAgICAgcHQgPSBfZm10KGxvY2FsZS0+eF9mbXQsIHQsIHB0LCBwdGxpbSwgJndhcm4yLCBsb2NhbGUpOworICAgICAgICAgICAgICAgIHB0ID0gX2ZtdChMb2NhbGUtPnhfZm10LCB0LCBwdCwgcHRsaW0sICZ3YXJuMik7CiAgICAgICAgICAgICAgICAgaWYgKHdhcm4yID09IElOX0FMTCkKICAgICAgICAgICAgICAgICAgICAgd2FybjIgPSBJTl9USElTOwogICAgICAgICAgICAgICAgIGlmICh3YXJuMiA+ICp3YXJucCkKQEAgLTY0Nyw4ICs2MjAsOCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJysnOgotICAgICAgICAgICAgICAgIHB0ID0gX2ZtdChsb2NhbGUtPmRhdGVfZm10LCB0LCBwdCwgcHRsaW0sCi0gICAgICAgICAgICAgICAgICAgIHdhcm5wLCBsb2NhbGUpOworICAgICAgICAgICAgICAgIHB0ID0gX2ZtdChMb2NhbGUtPmRhdGVfZm10LCB0LCBwdCwgcHRsaW0sCisgICAgICAgICAgICAgICAgICAgIHdhcm5wKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJyUnOgogICAgICAgICAgICAgLyoKQEAgLTY2OCwxMSArNjQxLDggQEAKIH0KIAogc3RhdGljIGNoYXIgKgotX2NvbnYobiwgZm9ybWF0LCBwdCwgcHRsaW0pCi1jb25zdCBpbnQgICAgICAgbjsKLWNvbnN0IGNoYXIgKiBjb25zdCAgZm9ybWF0OwotY2hhciAqIGNvbnN0ICAgICAgICBwdDsKLWNvbnN0IGNoYXIgKiBjb25zdCAgcHRsaW07CitfY29udihjb25zdCBpbnQgbiwgY29uc3QgY2hhciAqY29uc3QgZm9ybWF0LCBjaGFyICpjb25zdCBwdCwKKyAgICAgICAgY29uc3QgY2hhciAqY29uc3QgcHRsaW0pCiB7CiAgICAgY2hhciAgICBidWZbSU5UX1NUUkxFTl9NQVhJTVVNKGludCkgKyAxXTsKIApAQCAtNjgxLDExICs2NTEsNyBAQAogfQogCiBzdGF0aWMgY2hhciAqCi1fYWRkKHN0ciwgcHQsIHB0bGltLCBtb2RpZmllcikKLWNvbnN0IGNoYXIgKiAgICAgICAgc3RyOwotY2hhciAqICAgICAgICAgIHB0OwotY29uc3QgY2hhciAqIGNvbnN0ICBwdGxpbTsKLWludCAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyOworX2FkZChjb25zdCBjaGFyICpzdHIsIGNoYXIgKnB0LCBjb25zdCBjaGFyICpjb25zdCBwdGxpbSwgaW50IG1vZGlmaWVyKQogewogICAgICAgICBpbnQgYzsKIApAQCAtNzMzLDE0ICs2OTksOCBAQAogKi8KIAogc3RhdGljIGNoYXIgKgotX3ljb252KGEsIGIsIGNvbnZlcnRfdG9wLCBjb252ZXJ0X3l5LCBwdCwgcHRsaW0sIG1vZGlmaWVyKQotY29uc3QgaW50ICAgICAgIGE7Ci1jb25zdCBpbnQgICAgICAgYjsKLWNvbnN0IGludCAgICAgICBjb252ZXJ0X3RvcDsKLWNvbnN0IGludCAgICAgICBjb252ZXJ0X3l5OwotY2hhciAqICAgICAgICAgIHB0OwotY29uc3QgY2hhciAqIGNvbnN0ICBwdGxpbTsKLWludCAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyOworX3ljb252KGNvbnN0IGludCBhLCBjb25zdCBpbnQgYiwgY29uc3QgaW50IGNvbnZlcnRfdG9wLCBjb25zdCBpbnQgY29udmVydF95eSwKKyAgICAgICAgY2hhciAqcHQsIGNvbnN0IGNoYXIgKmNvbnN0IHB0bGltLCBpbnQgbW9kaWZpZXIpCiB7CiAgICAgcmVnaXN0ZXIgaW50ICAgIGxlYWQ7CiAgICAgcmVnaXN0ZXIgaW50ICAgIHRyYWlsOwpAQCAtNzU5LDEzICs3MTksOSBAQAogICAgIGlmIChjb252ZXJ0X3RvcCkgewogICAgICAgICBpZiAobGVhZCA9PSAwICYmIHRyYWlsIDwgMCkKICAgICAgICAgICAgIHB0ID0gX2FkZCgiLTAiLCBwdCwgcHRsaW0sIG1vZGlmaWVyKTsKLSAgICAgICAgZWxzZSAgICBwdCA9IF9jb252KGxlYWQsIGdldGZvcm1hdChtb2RpZmllciwgIiUwMmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUyZCIsICIlZCIsICIlMDJkIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisgICAgICAgIGVsc2UgICAgcHQgPSBfY29udihsZWFkLCBnZXRmb3JtYXQobW9kaWZpZXIsICIlMDJkIiwgIiUyZCIsICIlZCIsICIlMDJkIiksIHB0LCBwdGxpbSk7CiAgICAgfQogICAgIGlmIChjb252ZXJ0X3l5KQotICAgICAgICBwdCA9IF9jb252KCgodHJhaWwgPCAwKSA/IC10cmFpbCA6IHRyYWlsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGZvcm1hdChtb2RpZmllciwgIiUwMmQiLCAiJTJkIiwgIiVkIiwgIiUwMmQiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisgICAgICAgIHB0ID0gX2NvbnYoKCh0cmFpbCA8IDApID8gLXRyYWlsIDogdHJhaWwpLCBnZXRmb3JtYXQobW9kaWZpZXIsICIlMDJkIiwgIiUyZCIsICIlZCIsICIlMDJkIiksIHB0LCBwdGxpbSk7CiAgICAgcmV0dXJuIHB0OwogfQpkaWZmIC0tZ2l0IGEvbGliYy90emNvZGUvdHpmaWxlLmggYi9saWJjL3R6Y29kZS90emZpbGUuaAppbmRleCBhMjk1NWRkLi41Mjk2NTBkIDEwMDY0NAotLS0gYS9saWJjL3R6Y29kZS90emZpbGUuaAorKysgYi9saWJjL3R6Y29kZS90emZpbGUuaApAQCAtMTAxLDE2ICsxMDEsOCBAQAogI2VuZGlmIC8qICFkZWZpbmVkIFRaX01BWF9USU1FUyAqLwogCiAjaWZuZGVmIFRaX01BWF9UWVBFUwotI2lmbmRlZiBOT1NPTEFSCisvKiBUaGlzIG11c3QgYmUgYXQgbGVhc3QgMTcgZm9yIEV1cm9wZS9TYW1hcmEgYW5kIEV1cm9wZS9WaWxuaXVzLiAgKi8KICNkZWZpbmUgVFpfTUFYX1RZUEVTCTI1NiAvKiBMaW1pdGVkIGJ5IHdoYXQgKHVuc2lnbmVkIGNoYXIpJ3MgY2FuIGhvbGQgKi8KLSNlbmRpZiAvKiAhZGVmaW5lZCBOT1NPTEFSICovCi0jaWZkZWYgTk9TT0xBUgotLyoKLSoqIE11c3QgYmUgYXQgbGVhc3QgMTQgZm9yIEV1cm9wZS9SaWdhIGFzIG9mIEphbiAxMiAxOTk1LAotKiogYXMgbm90ZWQgYnkgRWFybCBDaGV3LgotKi8KLSNkZWZpbmUgVFpfTUFYX1RZUEVTCTIwCS8qIE1heGltdW0gbnVtYmVyIG9mIGxvY2FsIHRpbWUgdHlwZXMgKi8KLSNlbmRpZiAvKiAhZGVmaW5lZCBOT1NPTEFSICovCiAjZW5kaWYgLyogIWRlZmluZWQgVFpfTUFYX1RZUEVTICovCiAKICNpZm5kZWYgVFpfTUFYX0NIQVJTCmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9hbGFybS5jIGIvbGliYy91bmlzdGQvYWxhcm0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNlZGVhOS4uMDAwMDAwMAotLS0gYS9saWJjL3VuaXN0ZC9hbGFybS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylhbGFybS5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotLy9fX0ZCU0RJRCgiJEZyZWVCU0Q6IC9yZXBvbWFuL3IvbmN2cy9zcmMvbGliL2xpYmMvZ2VuL2FsYXJtLmMsdiAxLjMgMjAwNy8wMS8wOSAwMDoyNzo1MyBpbXAgRXhwICQiKTsKLQotLyoKLSAqIEJhY2t3YXJkcyBjb21wYXRpYmxlIGFsYXJtLgotICovCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotdW5zaWduZWQgaW50Ci1hbGFybShzZWNzKQotCXVuc2lnbmVkIGludCBzZWNzOwotewotCXN0cnVjdCBpdGltZXJ2YWwgaXQsIG9pdHY7Ci0Jc3RydWN0IGl0aW1lcnZhbCAqaXRwID0gJml0OwotCi0gICAgaXRwLT5pdF9pbnRlcnZhbC50dl91c2VjID0gMDsKLSAgICBpdHAtPml0X2ludGVydmFsLnR2X3NlYyA9IDA7Ci0JaXRwLT5pdF92YWx1ZS50dl9zZWMgPSBzZWNzOwotCWl0cC0+aXRfdmFsdWUudHZfdXNlYyA9IDA7Ci0JaWYgKHNldGl0aW1lcihJVElNRVJfUkVBTCwgaXRwLCAmb2l0dikgPCAwKQotI2lmIDEgLyogQklPTklDOiBTYW1lIGJlaGF2aW91ciB0aGFuIEdMaWJjIGZvciBlcnJvcnMgKi8KLQkJcmV0dXJuIDA7Ci0jZWxzZQotCQlyZXR1cm4gKC0xKTsKLSNlbmRpZgotCWlmIChvaXR2Lml0X3ZhbHVlLnR2X3VzZWMpCi0JCW9pdHYuaXRfdmFsdWUudHZfc2VjKys7Ci0JcmV0dXJuIChvaXR2Lml0X3ZhbHVlLnR2X3NlYyk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9leGVjLmMgYi9saWJjL3VuaXN0ZC9leGVjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZTJhNGUuLjAwMDAwMDAKLS0tIGEvbGliYy91bmlzdGQvZXhlYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQ1ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBleGVjLmMsdiAxLjE4IDIwMDUvMDgvMDggMDg6MDU6MzQgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy91aW8uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHBhdGhzLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8YWxsb2NhLmg+Ci0KLWV4dGVybiBjaGFyICoqZW52aXJvbjsKLQotaW50Ci1leGVjbChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphcmcsIC4uLikKLXsKLQl2YV9saXN0IGFwOwotCWNoYXIgKiphcmd2OwotCWludCBuOwotCi0JdmFfc3RhcnQoYXAsIGFyZyk7Ci0JbiA9IDE7Ci0Jd2hpbGUgKHZhX2FyZyhhcCwgY2hhciAqKSAhPSBOVUxMKQotCQluKys7Ci0JdmFfZW5kKGFwKTsKLQlhcmd2ID0gYWxsb2NhKChuICsgMSkgKiBzaXplb2YoKmFyZ3YpKTsKLQlpZiAoYXJndiA9PSBOVUxMKSB7Ci0JCWVycm5vID0gRU5PTUVNOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JdmFfc3RhcnQoYXAsIGFyZyk7Ci0JbiA9IDE7Ci0JYXJndlswXSA9IChjaGFyICopYXJnOwotCXdoaWxlICgoYXJndltuXSA9IHZhX2FyZyhhcCwgY2hhciAqKSkgIT0gTlVMTCkKLQkJbisrOwotCXZhX2VuZChhcCk7Ci0JcmV0dXJuIChleGVjdmUobmFtZSwgYXJndiwgZW52aXJvbikpOwotfQotCi1pbnQKLWV4ZWNsZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphcmcsIC4uLikKLXsKLQl2YV9saXN0IGFwOwotCWNoYXIgKiphcmd2LCAqKmVudnA7Ci0JaW50IG47Ci0KLQl2YV9zdGFydChhcCwgYXJnKTsKLQluID0gMTsKLQl3aGlsZSAodmFfYXJnKGFwLCBjaGFyICopICE9IE5VTEwpCi0JCW4rKzsKLQl2YV9lbmQoYXApOwotCWFyZ3YgPSBhbGxvY2EoKG4gKyAxKSAqIHNpemVvZigqYXJndikpOwotCWlmIChhcmd2ID09IE5VTEwpIHsKLQkJZXJybm8gPSBFTk9NRU07Ci0JCXJldHVybiAoLTEpOwotCX0KLQl2YV9zdGFydChhcCwgYXJnKTsKLQluID0gMTsKLQlhcmd2WzBdID0gKGNoYXIgKilhcmc7Ci0Jd2hpbGUgKChhcmd2W25dID0gdmFfYXJnKGFwLCBjaGFyICopKSAhPSBOVUxMKQotCQluKys7Ci0JZW52cCA9IHZhX2FyZyhhcCwgY2hhciAqKik7Ci0JdmFfZW5kKGFwKTsKLQlyZXR1cm4gKGV4ZWN2ZShuYW1lLCBhcmd2LCBlbnZwKSk7Ci19Ci0KLWludAotZXhlY2xwKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmFyZywgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0JY2hhciAqKmFyZ3Y7Ci0JaW50IG47Ci0KLQl2YV9zdGFydChhcCwgYXJnKTsKLQluID0gMTsKLQl3aGlsZSAodmFfYXJnKGFwLCBjaGFyICopICE9IE5VTEwpCi0JCW4rKzsKLQl2YV9lbmQoYXApOwotCWFyZ3YgPSBhbGxvY2EoKG4gKyAxKSAqIHNpemVvZigqYXJndikpOwotCWlmIChhcmd2ID09IE5VTEwpIHsKLQkJZXJybm8gPSBFTk9NRU07Ci0JCXJldHVybiAoLTEpOwotCX0KLQl2YV9zdGFydChhcCwgYXJnKTsKLQluID0gMTsKLQlhcmd2WzBdID0gKGNoYXIgKilhcmc7Ci0Jd2hpbGUgKChhcmd2W25dID0gdmFfYXJnKGFwLCBjaGFyICopKSAhPSBOVUxMKQotCQluKys7Ci0JdmFfZW5kKGFwKTsKLQlyZXR1cm4gKGV4ZWN2cChuYW1lLCBhcmd2KSk7Ci19Ci0KLWludAotZXhlY3YoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqIGNvbnN0ICphcmd2KQotewotCSh2b2lkKWV4ZWN2ZShuYW1lLCBhcmd2LCBlbnZpcm9uKTsKLQlyZXR1cm4gKC0xKTsKLX0KLQotaW50Ci1leGVjdnAoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqIGNvbnN0ICphcmd2KQotewotCWNoYXIgKiptZW1wOwotCWludCBjbnQsIGxwLCBsbiwgbGVuOwotCWNoYXIgKnA7Ci0JaW50IGVhY2NlcyA9IDA7Ci0JY2hhciAqYnAsICpjdXIsICpwYXRoLCBidWZbTUFYUEFUSExFTl07Ci0KLQkvKgotCSAqIERvIG5vdCBhbGxvdyBudWxsIG5hbWUKLQkgKi8KLQlpZiAobmFtZSA9PSBOVUxMIHx8ICpuYW1lID09ICdcMCcpIHsKLQkJZXJybm8gPSBFTk9FTlQ7Ci0JCXJldHVybiAoLTEpOwotIAl9Ci0KLQkvKiBJZiBpdCdzIGFuIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggbmFtZSwgaXQncyBlYXN5LiAqLwotCWlmIChzdHJjaHIobmFtZSwgJy8nKSkgewotCQlicCA9IChjaGFyICopbmFtZTsKLQkJY3VyID0gcGF0aCA9IE5VTEw7Ci0JCWdvdG8gcmV0cnk7Ci0JfQotCWJwID0gYnVmOwotCi0JLyogR2V0IHRoZSBwYXRoIHdlJ3JlIHNlYXJjaGluZy4gKi8KLQlpZiAoIShwYXRoID0gZ2V0ZW52KCJQQVRIIikpKQotCQlwYXRoID0gX1BBVEhfREVGUEFUSDsKLQlsZW4gPSBzdHJsZW4ocGF0aCkgKyAxOwotCWN1ciA9IGFsbG9jYShsZW4pOwotCWlmIChjdXIgPT0gTlVMTCkgewotCQllcnJubyA9IEVOT01FTTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXN0cmxjcHkoY3VyLCBwYXRoLCBsZW4pOwotCXBhdGggPSBjdXI7Ci0Jd2hpbGUgKChwID0gc3Ryc2VwKCZjdXIsICI6IikpKSB7Ci0JCS8qCi0JCSAqIEl0J3MgYSBTSEVMTCBwYXRoIC0tIGRvdWJsZSwgbGVhZGluZyBhbmQgdHJhaWxpbmcgY29sb25zCi0JCSAqIG1lYW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgotCQkgKi8KLQkJaWYgKCEqcCkgewotCQkJcCA9ICIuIjsKLQkJCWxwID0gMTsKLQkJfSBlbHNlCi0JCQlscCA9IHN0cmxlbihwKTsKLQkJbG4gPSBzdHJsZW4obmFtZSk7Ci0KLQkJLyoKLQkJICogSWYgdGhlIHBhdGggaXMgdG9vIGxvbmcgY29tcGxhaW4uICBUaGlzIGlzIGEgcG9zc2libGUKLQkJICogc2VjdXJpdHkgaXNzdWU7IGdpdmVuIGEgd2F5IHRvIG1ha2UgdGhlIHBhdGggdG9vIGxvbmcKLQkJICogdGhlIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIHdyb25nIHByb2dyYW0uCi0JCSAqLwotCQlpZiAobHAgKyBsbiArIDIgPiAoaW50KXNpemVvZihidWYpKSB7Ci0JCQlzdHJ1Y3QgaW92ZWMgaW92WzNdOwotCi0JCQlpb3ZbMF0uaW92X2Jhc2UgPSAiZXhlY3ZwOiAiOwotCQkJaW92WzBdLmlvdl9sZW4gPSA4OwotCQkJaW92WzFdLmlvdl9iYXNlID0gcDsKLQkJCWlvdlsxXS5pb3ZfbGVuID0gbHA7Ci0JCQlpb3ZbMl0uaW92X2Jhc2UgPSAiOiBwYXRoIHRvbyBsb25nXG4iOwotCQkJaW92WzJdLmlvdl9sZW4gPSAxNjsKLQkJCSh2b2lkKXdyaXRldihTVERFUlJfRklMRU5PLCBpb3YsIDMpOwotCQkJY29udGludWU7Ci0JCX0KLQkJbWVtY3B5KGJ1ZiwgcCwgbHApOwotCQlidWZbbHBdID0gJy8nOwotCQltZW1jcHkoYnVmICsgbHAgKyAxLCBuYW1lLCBsbik7Ci0JCWJ1ZltscCArIGxuICsgMV0gPSAnXDAnOwotCi1yZXRyeToJCSh2b2lkKWV4ZWN2ZShicCwgYXJndiwgZW52aXJvbik7Ci0JCXN3aXRjaChlcnJubykgewotCQljYXNlIEUyQklHOgotCQkJZ290byBkb25lOwotCQljYXNlIEVJU0RJUjoKLQkJY2FzZSBFTE9PUDoKLQkJY2FzZSBFTkFNRVRPT0xPTkc6Ci0JCWNhc2UgRU5PRU5UOgotCQkJYnJlYWs7Ci0JCWNhc2UgRU5PRVhFQzoKLQkJCWZvciAoY250ID0gMDsgYXJndltjbnRdOyArK2NudCkKLQkJCQk7Ci0JCQltZW1wID0gYWxsb2NhKChjbnQgKyAyKSAqIHNpemVvZihjaGFyICopKTsKLQkJCWlmIChtZW1wID09IE5VTEwpCi0JCQkJZ290byBkb25lOwotCQkJbWVtcFswXSA9ICJzaCI7Ci0JCQltZW1wWzFdID0gYnA7Ci0JCQltZW1jcHkobWVtcCArIDIsIGFyZ3YgKyAxLCBjbnQgKiBzaXplb2YoY2hhciAqKSk7Ci0JCQkodm9pZClleGVjdmUoX1BBVEhfQlNIRUxMLCBtZW1wLCBlbnZpcm9uKTsKLQkJCWdvdG8gZG9uZTsKLQkJY2FzZSBFTk9NRU06Ci0JCQlnb3RvIGRvbmU7Ci0JCWNhc2UgRU5PVERJUjoKLQkJCWJyZWFrOwotCQljYXNlIEVUWFRCU1k6Ci0JCQkvKgotCQkJICogV2UgdXNlZCB0byByZXRyeSBoZXJlLCBidXQgc2goMSkgZG9lc24ndC4KLQkJCSAqLwotCQkJZ290byBkb25lOwotCQljYXNlIEVBQ0NFUzoKLQkJCWVhY2NlcyA9IDE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0KLQlpZiAoZWFjY2VzKQotCQllcnJubyA9IEVBQ0NFUzsKLQllbHNlIGlmICghZXJybm8pCi0JCWVycm5vID0gRU5PRU5UOwotZG9uZToKLQlyZXR1cm4gKC0xKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2ZubWF0Y2guYyBiL2xpYmMvdW5pc3RkL2ZubWF0Y2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNkMWEzYy4uMDAwMDAwMAotLS0gYS9saWJjL3VuaXN0ZC9mbm1hdGNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0ODAgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZubWF0Y2guYyx2IDEuMTYgMjAxMS8xMi8wNiAxMTo0Nzo0NiBzdHNwIEV4cCAkCSovCi0KLS8qIENvcHlyaWdodCAoYykgMjAxMSwgVk13YXJlLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVk13YXJlLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFZNV0FSRSwgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBUb2RkIEMuIE1pbGxlciA8bWlsbGVydEBvcGVuYnNkLm9yZz4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0vKiBBdXRob3JlZCBieSBXaWxsaWFtIEEuIFJvd2UgSnIuIDx3cm93ZTsgYXBhY2hlLm9yZywgdm13YXJlLmNvbT4sIEFwcmlsIDIwMTEKLSAqCi0gKiBEZXJpdmVkIGZyb20gVGhlIE9wZW4gR3JvdXAgQmFzZSBTcGVjaWZpY2F0aW9ucyBJc3N1ZSA3LCBJRUVFIFN0ZCAxMDAzLjEtMjAwOAotICogYXMgZGVzY3JpYmVkIGluOwotICogICBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvZm5tYXRjaC5odG1sCi0gKgotICogRmlsZW5hbWUgcGF0dGVybiBtYXRjaGVzIGRlZmluZWQgaW4gc2VjdGlvbiAyLjEzLCAiUGF0dGVybiBNYXRjaGluZyBOb3RhdGlvbiIKLSAqIGZyb20gY2hhcHRlciAyLiAiU2hlbGwgQ29tbWFuZCBMYW5ndWFnZSIKLSAqICAgaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvdXRpbGl0aWVzL1YzX2NoYXAwMi5odG1sI3RhZ18xOF8xMwotICogd2hlcmU7IDEuIEEgYnJhY2tldCBleHByZXNzaW9uIHN0YXJ0aW5nIHdpdGggYW4gdW5xdW90ZWQgPGNpcmN1bWZsZXg+ICdeJyAKLSAqIGNoYXJhY3RlciBDT05USU5VRVMgdG8gc3BlY2lmeSBhIG5vbi1tYXRjaGluZyBsaXN0OyAyLiBhbiBleHBsaWNpdCA8cGVyaW9kPiAnLicgCi0gKiBpbiBhIGJyYWNrZXQgZXhwcmVzc2lvbiBtYXRjaGluZyBsaXN0LCBlLmcuICJbLmFiY10iIGRvZXMgTk9UIG1hdGNoIGEgbGVhZGluZyAKLSAqIDxwZXJpb2Q+IGluIGEgZmlsZW5hbWU7IDMuIGEgPGxlZnQtc3F1YXJlLWJyYWNrZXQ+ICdbJyB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2UKLSAqIGEgdmFsaWQgYnJhY2tldCBleHByZXNzaW9uIGlzIHRyZWF0ZWQgYXMgYW4gb3JkaW5hcnkgY2hhcmFjdGVyOyA0LiBhIGRpZmZlcmluZwotICogbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aGluIHBhdHRlcm4gYW5kIHN0cmluZyB3aWxsIE5PVCBtYXRjaDsKLSAqIDUuIGEgdHJhaWxpbmcgJ1wnIGluIEZOTV9FU0NBUEUgbW9kZSBpcyB0cmVhdGVkIGFzIGFuIG9yZGluYXJ5ICdcJyBjaGFyYWN0ZXIuCi0gKgotICogQnJhY2tldCBleHBhbnNpb24gZGVmaW5lZCBpbiBzZWN0aW9uIDkuMy41LCAiUkUgQnJhY2tldCBFeHByZXNzaW9uIiwKLSAqIGZyb20gY2hhcHRlciA5LCAiUmVndWxhciBFeHByZXNzaW9ucyIKLSAqICAgaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvVjFfY2hhcDA5Lmh0bWwjdGFnXzA5XzAzXzA1Ci0gKiB3aXRoIG5vIHN1cHBvcnQgZm9yIGNvbGxhdGluZyBzeW1ib2xzLCBlcXVpdmFsZW5jZSBjbGFzcyBleHByZXNzaW9ucyBvciAKLSAqIGNoYXJhY3RlciBjbGFzcyBleHByZXNzaW9ucy4gIEEgcGFydGlhbCByYW5nZSBleHByZXNzaW9uIHdpdGggYSBsZWFkaW5nIAotICogaHlwaGVuIGZvbGxvd2luZyBhIHZhbGlkIHJhbmdlIGV4cHJlc3Npb24gd2lsbCBtYXRjaCBvbmx5IHRoZSBvcmRpbmFyeQotICogPGh5cGhlbj4gYW5kIHRoZSBlbmRpbmcgY2hhcmFjdGVyIChlLmcuICJbYS1tLXpdIiB3aWxsIG1hdGNoIGNoYXJhY3RlcnMgCi0gKiAnYScgdGhyb3VnaCAnbScsIGEgPGh5cGhlbj4gJy0nLCBvciBhICd6JykuCi0gKgotICogU3VwcG9ydHMgQlNEIGV4dGVuc2lvbnMgRk5NX0xFQURJTkdfRElSIHRvIG1hdGNoIHBhdHRlcm4gdG8gdGhlIGVuZCBvZiBvbmUKLSAqIHBhdGggc2VnbWVudCBvZiBzdHJpbmcsIGFuZCBGTk1fQ0FTRUZPTEQgdG8gaWdub3JlIGFscGhhIGNhc2UuCi0gKgotICogTk9URTogT25seSBQT1NJWC9DIHNpbmdsZSBieXRlIGxvY2FsZXMgYXJlIGNvcnJlY3RseSBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLgotICogTm90YWJseSwgbm9uLVBPU0lYIGxvY2FsZXMgd2l0aCBGTk1fQ0FTRUZPTEQgcHJvZHVjZSB1bmRlZmluZWQgcmVzdWx0cywKLSAqIHBhcnRpY3VsYXJseSBpbiByYW5nZXMgb2YgbWl4ZWQgY2FzZSAoZS5nLiAiW0Etel0iKSBvciBzcGFubmluZyBhbHBoYSBhbmQKLSAqIG5vbmFscGhhIGNoYXJhY3RlcnMgd2l0aGluIGEgcmFuZ2UuCi0gKgotICogWFhYIGNvbW1lbnRzIGJlbG93IGluZGljYXRlIHBvcnRpbmcgcmVxdWlyZWQgZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVyIHNldHMKLSAqIGFuZCBub24tUE9TSVggbG9jYWxlIGNvbGxhdGlvbiBvcmRlcnM7IHJlcXVpcmVzIG1iciogQVBJcyB0byB0cmFjayBzaGlmdAotICogc3RhdGUgb2YgcGF0dGVybiBhbmQgc3RyaW5nIChyZXdpbmRpbmcgcGF0dGVybiBhbmQgc3RyaW5nIHJlcGVhdGVkbHkpLgotICoKLSAqIENlcnRhaW4gcGFydHMgb2YgdGhlIGNvZGUgYXNzdW1lIDB4MDAtMHgzRiBhcmUgdW5pcXVlIHdpdGggYW55IE1CQ1MgKGUuZy4KLSAqIFVURi04LCBTSElGVC1KSVMsIGV0YykuICBBbnkgaW1wbGVtZW50YXRpb24gYWxsb3dpbmcgJ1wnIGFzIGFuIGFsdGVybmF0ZQotICogcGF0aCBkZWxpbWl0ZXIgbXVzdCBiZSBhd2FyZSB0aGF0IDB4NUMgaXMgTk9UIHVuaXF1ZSB3aXRoaW4gU0hJRlQtSklTLgotICovCi0KLSNpbmNsdWRlIDxmbm1hdGNoLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLQotI2luY2x1ZGUgImNoYXJjbGFzcy5oIgotCi0jZGVmaW5lCVJBTkdFX01BVENICTEKLSNkZWZpbmUJUkFOR0VfTk9NQVRDSAkwCi0jZGVmaW5lCVJBTkdFX0VSUk9SCSgtMSkKLQotc3RhdGljIGludAotY2xhc3NtYXRjaChjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyIHRlc3QsIGludCBmb2xkY2FzZSwgY29uc3QgY2hhciAqKmVwKQotewotCXN0cnVjdCBjY2xhc3MgKmNjOwotCWNvbnN0IGNoYXIgKmNvbG9uOwotCXNpemVfdCBsZW47Ci0JaW50IHJ2YWwgPSBSQU5HRV9OT01BVENIOwotCWNvbnN0IGNoYXIgKiBjb25zdCBtaXNtYXRjaCA9IHBhdHRlcm47Ci0KLQlpZiAoKnBhdHRlcm4gIT0gJ1snIHx8IHBhdHRlcm5bMV0gIT0gJzonKSB7Ci0JCSplcCA9IG1pc21hdGNoOwotCQlyZXR1cm4oUkFOR0VfRVJST1IpOwotCX0KLQotCXBhdHRlcm4gKz0gMjsKLQotCWlmICgoY29sb24gPSBzdHJjaHIocGF0dGVybiwgJzonKSkgPT0gTlVMTCB8fCBjb2xvblsxXSAhPSAnXScpIHsKLQkJKmVwID0gbWlzbWF0Y2g7Ci0JCXJldHVybihSQU5HRV9FUlJPUik7Ci0JfQotCSplcCA9IGNvbG9uICsgMjsKLQlsZW4gPSAoc2l6ZV90KShjb2xvbiAtIHBhdHRlcm4pOwotCi0JaWYgKGZvbGRjYXNlICYmIHN0cm5jbXAocGF0dGVybiwgInVwcGVyOl0iLCA3KSA9PSAwKQotCQlwYXR0ZXJuID0gImxvd2VyOl0iOwotCWZvciAoY2MgPSBjY2xhc3NlczsgY2MtPm5hbWUgIT0gTlVMTDsgY2MrKykgewotCQlpZiAoIXN0cm5jbXAocGF0dGVybiwgY2MtPm5hbWUsIGxlbikgJiYgY2MtPm5hbWVbbGVuXSA9PSAnXDAnKSB7Ci0JCQlpZiAoY2MtPmlzY3R5cGUoKHVuc2lnbmVkIGNoYXIpdGVzdCkpCi0JCQkJcnZhbCA9IFJBTkdFX01BVENIOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGNjLT5uYW1lID09IE5VTEwpIHsKLQkJLyogaW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MsIHRyZWF0IGFzIG5vcm1hbCB0ZXh0ICovCi0JCSplcCA9IG1pc21hdGNoOwotCQlydmFsID0gUkFOR0VfRVJST1I7Ci0JfQotCXJldHVybihydmFsKTsKLX0KLQotLyogTW9zdCBNQkNTL2NvbGxhdGlvbi9jYXNlIGlzc3VlcyBoYW5kbGVkIGhlcmUuICBXaWxkY2FyZCAnKicgaXMgbm90IGhhbmRsZWQuCi0gKiBFT1MgJ1wwJyBhbmQgdGhlIEZOTV9QQVRITkFNRSAnLycgZGVsaW1pdGVycyBhcmUgbm90IGFkdmFuY2VkIG92ZXIsIAotICogaG93ZXZlciB0aGUgIlwvIiBzZXF1ZW5jZSBpcyBhZHZhbmNlZCB0byAnLycuCi0gKgotICogQm90aCBwYXR0ZXJuIGFuZCBzdHJpbmcgYXJlICoqY2hhciB0byBzdXBwb3J0IHBvaW50ZXIgaW5jcmVtZW50IG9mIGFyYml0cmFyeQotICogbXVsdGlieXRlIGNoYXJhY3RlcnMgZm9yIHRoZSBnaXZlbiBsb2NhbGUsIGluIGEgbGF0ZXIgaXRlcmF0aW9uIG9mIHRoaXMgY29kZQotICovCi1zdGF0aWMgaW50IGZubWF0Y2hfY2goY29uc3QgY2hhciAqKnBhdHRlcm4sIGNvbnN0IGNoYXIgKipzdHJpbmcsIGludCBmbGFncykKLXsKLSAgICBjb25zdCBjaGFyICogY29uc3QgbWlzbWF0Y2ggPSAqcGF0dGVybjsKLSAgICBjb25zdCBpbnQgbm9jYXNlID0gISEoZmxhZ3MgJiBGTk1fQ0FTRUZPTEQpOwotICAgIGNvbnN0IGludCBlc2NhcGUgPSAhKGZsYWdzICYgRk5NX05PRVNDQVBFKTsKLSAgICBjb25zdCBpbnQgc2xhc2ggPSAhIShmbGFncyAmIEZOTV9QQVRITkFNRSk7Ci0gICAgaW50IHJlc3VsdCA9IEZOTV9OT01BVENIOwotICAgIGNvbnN0IGNoYXIgKnN0YXJ0Y2g7Ci0gICAgaW50IG5lZ2F0ZTsKLQotICAgIGlmICgqKnBhdHRlcm4gPT0gJ1snKQotICAgIHsKLSAgICAgICAgKysqcGF0dGVybjsKLQotICAgICAgICAvKiBIYW5kbGUgbmVnYXRpb24sIGVpdGhlciBsZWFkaW5nICEgb3IgXiBvcGVyYXRvcnMgKG5ldmVyIGJvdGgpICovCi0gICAgICAgIG5lZ2F0ZSA9ICgoKipwYXR0ZXJuID09ICchJykgfHwgKCoqcGF0dGVybiA9PSAnXicpKTsKLSAgICAgICAgaWYgKG5lZ2F0ZSkKLSAgICAgICAgICAgICsrKnBhdHRlcm47Ci0KLSAgICAgICAgLyogJ10nIGlzIGFuIG9yZGluYXJ5IGNoYXJhY3RlciBhdCB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHBhdHRlcm4gKi8KLSAgICAgICAgaWYgKCoqcGF0dGVybiA9PSAnXScpCi0gICAgICAgICAgICBnb3RvIGxlYWRpbmdjbG9zZWJyYWNlOwotCi0gICAgICAgIHdoaWxlICgqKnBhdHRlcm4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgqKnBhdHRlcm4gPT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgKysqcGF0dGVybjsKLSAgICAgICAgICAgICAgICAvKiBYWFg6IEZpeCBmb3IgTUJDUyBjaGFyYWN0ZXIgd2lkdGggKi8KLSAgICAgICAgICAgICAgICArKypzdHJpbmc7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQgXiBuZWdhdGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZXNjYXBlICYmICgqKnBhdHRlcm4gPT0gJ1xcJykpIHsKLSAgICAgICAgICAgICAgICArKypwYXR0ZXJuOwotCi0gICAgICAgICAgICAgICAgLyogUGF0dGVybnMgbXVzdCBiZSB0ZXJtaW5hdGVkIHdpdGggJ10nLCBub3QgRU9TICovCi0gICAgICAgICAgICAgICAgaWYgKCEqKnBhdHRlcm4pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBQYXR0ZXJucyBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCAnXScgbm90ICcvJyAqLwotICAgICAgICAgICAgaWYgKHNsYXNoICYmICgqKnBhdHRlcm4gPT0gJy8nKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLyogTWF0Y2ggY2hhcmFjdGVyIGNsYXNzZXMuICovCi0gICAgICAgICAgICBpZiAoY2xhc3NtYXRjaCgqcGF0dGVybiwgKipzdHJpbmcsIG5vY2FzZSwgcGF0dGVybikKLSAgICAgICAgICAgICAgICA9PSBSQU5HRV9NQVRDSCkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLWxlYWRpbmdjbG9zZWJyYWNlOgotICAgICAgICAgICAgLyogTG9vayBhdCBvbmx5IHdlbGwtZm9ybWVkIHJhbmdlIHBhdHRlcm5zOyAKLSAgICAgICAgICAgICAqICJ4LV0iIGlzIG5vdCBhbGxvd2VkIHVubGVzcyBlc2NhcGVkICgieC1cXSIpCi0gICAgICAgICAgICAgKiBYWFg6IEZpeCBmb3IgbG9jYWxlL01CQ1MgY2hhcmFjdGVyIHdpZHRoCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICgoKCpwYXR0ZXJuKVsxXSA9PSAnLScpICYmICgoKnBhdHRlcm4pWzJdICE9ICddJykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RhcnRjaCA9ICpwYXR0ZXJuOwotICAgICAgICAgICAgICAgICpwYXR0ZXJuICs9IChlc2NhcGUgJiYgKCgqcGF0dGVybilbMl0gPT0gJ1xcJykpID8gMyA6IDI7Ci0KLSAgICAgICAgICAgICAgICAvKiBOT1QgYSBwcm9wZXJseSBiYWxhbmNlZCBbZXhwcl0gcGF0dGVybiwgRU9TIHRlcm1pbmF0ZWQgCi0gICAgICAgICAgICAgICAgICogb3IgcmFuZ2VzIGNvbnRhaW5pbmcgYSBzbGFzaCBpbiBGTk1fUEFUSE5BTUUgbW9kZSBwYXR0ZXJuCi0gICAgICAgICAgICAgICAgICogZmFsbCBvdXQgdG8gdG8gdGhlIHJld2luZCBhbmQgdGVzdCAnWycgbGl0ZXJhbCBjb2RlIHBhdGgKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoISoqcGF0dGVybiB8fCAoc2xhc2ggJiYgKCoqcGF0dGVybiA9PSAnLycpKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAvKiBYWFg6IGhhbmRsZSBsb2NhbGUvTUJDUyBjb21wYXJpc29uLCBhZHZhbmNlIGJ5IE1CQ1MgY2hhciB3aWR0aCAqLwotICAgICAgICAgICAgICAgIGlmICgoKipzdHJpbmcgPj0gKnN0YXJ0Y2gpICYmICgqKnN0cmluZyA8PSAqKnBhdHRlcm4pKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vY2FzZSAmJiAoaXN1cHBlcigqKnN0cmluZykgfHwgaXN1cHBlcigqc3RhcnRjaCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGlzdXBwZXIoKipwYXR0ZXJuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodG9sb3dlcigqKnN0cmluZykgPj0gdG9sb3dlcigqc3RhcnRjaCkpIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICh0b2xvd2VyKCoqc3RyaW5nKSA8PSB0b2xvd2VyKCoqcGF0dGVybikpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAwOwotCi0gICAgICAgICAgICAgICAgKysqcGF0dGVybjsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogWFhYOiBoYW5kbGUgbG9jYWxlL01CQ1MgY29tcGFyaXNvbiwgYWR2YW5jZSBieSBNQkNTIGNoYXIgd2lkdGggKi8KLSAgICAgICAgICAgIGlmICgoKipzdHJpbmcgPT0gKipwYXR0ZXJuKSkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICAgICAgZWxzZSBpZiAobm9jYXNlICYmIChpc3VwcGVyKCoqc3RyaW5nKSB8fCBpc3VwcGVyKCoqcGF0dGVybikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHRvbG93ZXIoKipzdHJpbmcpID09IHRvbG93ZXIoKipwYXR0ZXJuKSkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gMDsKLQotICAgICAgICAgICAgKysqcGF0dGVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE5PVCBhIHByb3Blcmx5IGJhbGFuY2VkIFtleHByXSBwYXR0ZXJuOyBSZXdpbmQKLSAgICAgICAgICogYW5kIHJlc2V0IHJlc3VsdCB0byB0ZXN0ICdbJyBsaXRlcmFsCi0gICAgICAgICAqLwotICAgICAgICAqcGF0dGVybiA9IG1pc21hdGNoOwotICAgICAgICByZXN1bHQgPSBGTk1fTk9NQVRDSDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKipwYXR0ZXJuID09ICc/JykgewotICAgICAgICAvKiBPcHRpbWl6ZSAnPycgbWF0Y2ggYmVmb3JlIHVuZXNjYXBpbmcgKipwYXR0ZXJuICovCi0gICAgICAgIGlmICghKipzdHJpbmcgfHwgKHNsYXNoICYmICgqKnN0cmluZyA9PSAnLycpKSkKLSAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKLSAgICAgICAgcmVzdWx0ID0gMDsKLSAgICAgICAgZ290byBmbm1hdGNoX2NoX3N1Y2Nlc3M7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVzY2FwZSAmJiAoKipwYXR0ZXJuID09ICdcXCcpICYmICgqcGF0dGVybilbMV0pIHsKLSAgICAgICAgKysqcGF0dGVybjsKLSAgICB9Ci0KLSAgICAvKiBYWFg6IGhhbmRsZSBsb2NhbGUvTUJDUyBjb21wYXJpc29uLCBhZHZhbmNlIGJ5IHRoZSBNQkNTIGNoYXIgd2lkdGggKi8KLSAgICBpZiAoKipzdHJpbmcgPT0gKipwYXR0ZXJuKQotICAgICAgICByZXN1bHQgPSAwOwotICAgIGVsc2UgaWYgKG5vY2FzZSAmJiAoaXN1cHBlcigqKnN0cmluZykgfHwgaXN1cHBlcigqKnBhdHRlcm4pKQotICAgICAgICAgICAgICAgICAgICAmJiAodG9sb3dlcigqKnN0cmluZykgPT0gdG9sb3dlcigqKnBhdHRlcm4pKSkKLSAgICAgICAgcmVzdWx0ID0gMDsKLQotICAgIC8qIFJlZnVzZSB0byBhZHZhbmNlIG92ZXIgdHJhaWxpbmcgc2xhc2ggb3IgbnVsbHMKLSAgICAgKi8KLSAgICBpZiAoISoqc3RyaW5nIHx8ICEqKnBhdHRlcm4gfHwgKHNsYXNoICYmICgoKipzdHJpbmcgPT0gJy8nKSB8fCAoKipwYXR0ZXJuID09ICcvJykpKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotZm5tYXRjaF9jaF9zdWNjZXNzOgotICAgICsrKnBhdHRlcm47Ci0gICAgKysqc3RyaW5nOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotaW50IGZubWF0Y2goY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZmxhZ3MpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgZHVtbXlzdHJpbmdbMl0gPSB7JyAnLCAwfTsKLSAgICBjb25zdCBpbnQgZXNjYXBlID0gIShmbGFncyAmIEZOTV9OT0VTQ0FQRSk7Ci0gICAgY29uc3QgaW50IHNsYXNoID0gISEoZmxhZ3MgJiBGTk1fUEFUSE5BTUUpOwotICAgIGNvbnN0IGludCBsZWFkaW5nX2RpciA9ICEhKGZsYWdzICYgRk5NX0xFQURJTkdfRElSKTsKLSAgICBjb25zdCBjaGFyICpzdHJlbmRzZWc7Ci0gICAgY29uc3QgY2hhciAqZHVtbXlwdHI7Ci0gICAgY29uc3QgY2hhciAqbWF0Y2hwdHI7Ci0gICAgaW50IHdpbGQ7Ci0gICAgLyogRm9yICcqJyB3aWxkIHByb2Nlc3Npbmcgb25seTsgc3VycHJlc3MgJ3VzZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uJwotICAgICAqIHdhcm5pbmdzIHdpdGggZHVtbXkgaW5pdGlhbGl6YXRpb24gdmFsdWVzOwotICAgICAqLwotICAgIGNvbnN0IGNoYXIgKnN0cnN0YXJ0c2VnID0gTlVMTDsKLSAgICBjb25zdCBjaGFyICptaXNtYXRjaCA9IE5VTEw7Ci0gICAgaW50IG1hdGNobGVuID0gMDsKLQotICAgIGlmIChzdHJubGVuKHBhdHRlcm4sIFBBVEhfTUFYKSA9PSBQQVRIX01BWCB8fAotICAgICAgICBzdHJubGVuKHN0cmluZywgUEFUSF9NQVgpID09IFBBVEhfTUFYKQotICAgICAgICAgICAgcmV0dXJuIChGTk1fTk9NQVRDSCk7Ci0KLSAgICBpZiAoKnBhdHRlcm4gPT0gJyonKQotICAgICAgICBnb3RvIGZpcnN0c2VnbWVudDsKLQotICAgIHdoaWxlICgqcGF0dGVybiAmJiAqc3RyaW5nKQotICAgIHsKLSAgICAgICAgLyogUHJlLWRlY29kZSAiXC8iIHdoaWNoIGhhcyBubyBzcGVjaWFsIHNpZ25pZmljYW5jZSwgYW5kCi0gICAgICAgICAqIG1hdGNoIGJhbGFuY2VkIHNsYXNoZXMsIHN0YXJ0aW5nIGEgbmV3IHNlZ21lbnQgcGF0dGVybgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKHNsYXNoICYmIGVzY2FwZSAmJiAoKnBhdHRlcm4gPT0gJ1xcJykgJiYgKHBhdHRlcm5bMV0gPT0gJy8nKSkKLSAgICAgICAgICAgICsrcGF0dGVybjsKLSAgICAgICAgaWYgKHNsYXNoICYmICgqcGF0dGVybiA9PSAnLycpICYmICgqc3RyaW5nID09ICcvJykpIHsKLSAgICAgICAgICAgICsrcGF0dGVybjsKLSAgICAgICAgICAgICsrc3RyaW5nOwotICAgICAgICB9ICAgICAgICAgICAgCi0KLWZpcnN0c2VnbWVudDoKLSAgICAgICAgLyogQXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHNlZ21lbnQsIHZhbGlkYXRlIGxlYWRpbmcgcGVyaW9kIGJlaGF2aW9yLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKChmbGFncyAmIEZOTV9QRVJJT0QpICYmICgqc3RyaW5nID09ICcuJykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgqcGF0dGVybiA9PSAnLicpCi0gICAgICAgICAgICAgICAgKytwYXR0ZXJuOwotICAgICAgICAgICAgZWxzZSBpZiAoZXNjYXBlICYmICgqcGF0dGVybiA9PSAnXFwnKSAmJiAocGF0dGVyblsxXSA9PSAnLicpKQotICAgICAgICAgICAgICAgIHBhdHRlcm4gKz0gMjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7Ci0gICAgICAgICAgICArK3N0cmluZzsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIERldGVybWluZSB0aGUgZW5kIG9mIHN0cmluZyBzZWdtZW50Ci0gICAgICAgICAqCi0gICAgICAgICAqIFByZXN1bWVzICcvJyBjaGFyYWN0ZXIgaXMgdW5pcXVlLCBub3QgY29tcG9zaXRlIGluIGFueSBNQkNTIGVuY29kaW5nCi0gICAgICAgICAqLwotICAgICAgICBpZiAoc2xhc2gpIHsKLSAgICAgICAgICAgIHN0cmVuZHNlZyA9IHN0cmNocihzdHJpbmcsICcvJyk7Ci0gICAgICAgICAgICBpZiAoIXN0cmVuZHNlZykKLSAgICAgICAgICAgICAgICBzdHJlbmRzZWcgPSBzdHJjaHIoc3RyaW5nLCAnXDAnKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN0cmVuZHNlZyA9IHN0cmNocihzdHJpbmcsICdcMCcpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogQWxsb3cgcGF0dGVybiAnKicgdG8gYmUgY29uc3VtZWQgZXZlbiB3aXRoIG5vIHJlbWFpbmluZyBzdHJpbmcgdG8gbWF0Y2gKLSAgICAgICAgICovCi0gICAgICAgIHdoaWxlICgqcGF0dGVybikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKChzdHJpbmcgPiBzdHJlbmRzZWcpCi0gICAgICAgICAgICAgICAgfHwgKChzdHJpbmcgPT0gc3RyZW5kc2VnKSAmJiAoKnBhdHRlcm4gIT0gJyonKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmIChzbGFzaCAmJiAoKCpwYXR0ZXJuID09ICcvJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChlc2NhcGUgJiYgKCpwYXR0ZXJuID09ICdcXCcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChwYXR0ZXJuWzFdID09ICcvJykpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLyogUmVkdWNlIGdyb3VwcyBvZiAnKicgYW5kICc/JyB0byBuICc/JyBtYXRjaGVzCi0gICAgICAgICAgICAgKiBmb2xsb3dlZCBieSBvbmUgJyonIHRlc3QgZm9yIHNpbXBsaWNpdHkKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZm9yICh3aWxkID0gMDsgKCgqcGF0dGVybiA9PSAnKicpIHx8ICgqcGF0dGVybiA9PSAnPycpKTsgKytwYXR0ZXJuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICgqcGF0dGVybiA9PSAnKicpIHsKLSAgICAgICAgICAgICAgICAgICAgd2lsZCA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmluZyA8IHN0cmVuZHNlZykgeyAgLyogJiYgKCpwYXR0ZXJuID09ICc/JykgKi8KLSAgICAgICAgICAgICAgICAgICAgLyogWFhYOiBBZHZhbmNlIDEgY2hhciBmb3IgTUJDUyBsb2NhbGUgKi8KLSAgICAgICAgICAgICAgICAgICAgKytzdHJpbmc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgeyAgLyogKHN0cmluZyA+PSBzdHJlbmRzZWcpICYmICgqcGF0dGVybiA9PSAnPycpICovCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh3aWxkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0cnN0YXJ0c2VnID0gc3RyaW5nOwotICAgICAgICAgICAgICAgIG1pc21hdGNoID0gcGF0dGVybjsKLQotICAgICAgICAgICAgICAgIC8qIENvdW50IGZpeGVkIChub24gJyonKSBjaGFyIG1hdGNoZXMgcmVtYWluaW5nIGluIHBhdHRlcm4KLSAgICAgICAgICAgICAgICAgKiBleGNsdWRpbmcgJy8nIChvciAiXC8iKSBhbmQgJyonCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgZm9yIChtYXRjaHB0ciA9IHBhdHRlcm4sIG1hdGNobGVuID0gMDsgMTsgKyttYXRjaGxlbikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoKm1hdGNocHRyID09ICdcMCcpIAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHNsYXNoICYmICgoKm1hdGNocHRyID09ICcvJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGVzY2FwZSAmJiAoKm1hdGNocHRyID09ICdcXCcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG1hdGNocHRyWzFdID09ICcvJykpKSkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbXBhcmUgcHJlY2lzZWx5IHRoaXMgbWFueSB0cmFpbGluZyBzdHJpbmcgY2hhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgcmVzdWx0aW5nIG1hdGNoIG5lZWRzIG5vIHdpbGRjYXJkIGxvb3AKLSAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgLyogWFhYOiBBZGp1c3QgZm9yIE1CQ1MgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmcgKyBtYXRjaGxlbiA+IHN0cmVuZHNlZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmVuZHNlZyAtIG1hdGNobGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgd2lsZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmICgqbWF0Y2hwdHIgPT0gJyonKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgYXQgbGVhc3QgdGhpcyBtYW55IHRyYWlsaW5nIHN0cmluZyBjaGFycyByZW1haW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGZvciB0aGUgZmlyc3QgY29tcGFyaXNvbgotICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IEFkanVzdCBmb3IgTUJDUyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZyArIG1hdGNobGVuID4gc3RyZW5kc2VnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLyogQmVnaW4gZmlyc3Qgd2lsZCBjb21wYXJpc29uIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8qIFNraXAgZm9yd2FyZCBpbiBwYXR0ZXJuIGJ5IGEgc2luZ2xlIGNoYXJhY3RlciBtYXRjaAotICAgICAgICAgICAgICAgICAgICAgKiBVc2UgYSBkdW1teSBmbm1hdGNoX2NoKCkgdGVzdCB0byBjb3VudCBvbmUgIltyYW5nZV0iIGVzY2FwZQotICAgICAgICAgICAgICAgICAgICAgKi8gCi0gICAgICAgICAgICAgICAgICAgIC8qIFhYWDogQWRqdXN0IGZvciBNQkNTICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChlc2NhcGUgJiYgKCptYXRjaHB0ciA9PSAnXFwnKSAmJiBtYXRjaHB0clsxXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hwdHIgKz0gMjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgqbWF0Y2hwdHIgPT0gJ1snKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkdW1teXB0ciA9IGR1bW15c3RyaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgZm5tYXRjaF9jaCgmbWF0Y2hwdHIsICZkdW1teXB0ciwgZmxhZ3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgKyttYXRjaHB0cjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogSW5jcmVtZW50YWxseSBtYXRjaCBzdHJpbmcgYWdhaW5zdCB0aGUgcGF0dGVybgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICB3aGlsZSAoKnBhdHRlcm4gJiYgKHN0cmluZyA8IHN0cmVuZHNlZykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogU3VjY2VzczsgYmVnaW4gYSBuZXcgd2lsZCBwYXR0ZXJuIHNlYXJjaAotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmICgqcGF0dGVybiA9PSAnKicpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgaWYgKHNsYXNoICYmICgoKnN0cmluZyA9PSAnLycpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKnBhdHRlcm4gPT0gJy8nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGVzY2FwZSAmJiAoKnBhdHRlcm4gPT0gJ1xcJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHBhdHRlcm5bMV0gPT0gJy8nKSkpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIC8qIENvbXBhcmUgY2gncyAodGhlIHBhdHRlcm4gaXMgYWR2YW5jZWQgb3ZlciAiXC8iIHRvIHRoZSAnLycsCi0gICAgICAgICAgICAgICAgICogYnV0IHNsYXNoZXMgd2lsbCBtaXNtYXRjaCwgYW5kIGFyZSBub3QgY29uc3VtZWQpCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKCFmbm1hdGNoX2NoKCZwYXR0ZXJuLCAmc3RyaW5nLCBmbGFncykpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgLyogRmFpbGVkIHRvIG1hdGNoLCBsb29wIGFnYWluc3QgbmV4dCBjaGFyIG9mZnNldCBvZiBzdHJpbmcgc2VnbWVudCAKLSAgICAgICAgICAgICAgICAgKiB1bnRpbCBub3QgZW5vdWdoIHN0cmluZyBjaGFycyByZW1haW4gdG8gbWF0Y2ggdGhlIGZpeGVkIHBhdHRlcm4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAod2lsZCkgewotICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IEFkdmFuY2UgMSBjaGFyIGZvciBNQkNTIGxvY2FsZSAqLwotICAgICAgICAgICAgICAgICAgICBzdHJpbmcgPSArK3N0cnN0YXJ0c2VnOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nICsgbWF0Y2hsZW4gPiBzdHJlbmRzZWcpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7Ci0KLSAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IG1pc21hdGNoOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKnN0cmluZyAmJiAhKChzbGFzaCB8fCBsZWFkaW5nX2RpcikgJiYgKCpzdHJpbmcgPT0gJy8nKSkpCi0gICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7Ci0KLSAgICAgICAgaWYgKCpwYXR0ZXJuICYmICEoc2xhc2ggJiYgKCgqcGF0dGVybiA9PSAnLycpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoZXNjYXBlICYmICgqcGF0dGVybiA9PSAnXFwnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAocGF0dGVyblsxXSA9PSAnLycpKSkpKQotICAgICAgICAgICAgcmV0dXJuIEZOTV9OT01BVENIOwotCi0gICAgICAgIGlmIChsZWFkaW5nX2RpciAmJiAhKnBhdHRlcm4gJiYgKnN0cmluZyA9PSAnLycpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKiBXaGVyZSBib3RoIHBhdHRlcm4gYW5kIHN0cmluZyBhcmUgYXQgRU9TLCBkZWNsYXJlIHN1Y2Nlc3MKLSAgICAgKi8KLSAgICBpZiAoISpzdHJpbmcgJiYgISpwYXR0ZXJuKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIHBhdHRlcm4gZGlkbid0IG1hdGNoIHRvIHRoZSBlbmQgb2Ygc3RyaW5nICovCi0gICAgcmV0dXJuIEZOTV9OT01BVENIOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc3lzbG9nLmMgYi9saWJjL3VuaXN0ZC9zeXNsb2cuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg3ODQ3NS4uMDAwMDAwMAotLS0gYS9saWJjL3VuaXN0ZC9zeXNsb2cuYworKysgL2Rldi9udWxsCkBAIC0xLDM2OCArMCwwIEBACi0vKgkkT3BlbkJTRDogc3lzbG9nLmMsdiAxLjI4IDIwMDUvMDgvMDggMDg6MDU6MzQgZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5ODgsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPHN5cy91aW8uaD4KLSNpbmNsdWRlIDxzeXNsb2cuaD4KLSNpbmNsdWRlIDxzeXMvdW4uaD4KLSNpbmNsdWRlIDxuZXRkYi5oPgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHBhdGhzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzbG9nX2RhdGEgc2RhdGEgPSBTWVNMT0dfREFUQV9JTklUOwotCi1leHRlcm4gY29uc3QgY2hhcgkqX19wcm9nbmFtZTsJCS8qIFByb2dyYW0gbmFtZSwgZnJvbSBjcnQwLiAqLwotCi1zdGF0aWMgdm9pZAlkaXNjb25uZWN0bG9nX3Ioc3RydWN0IHN5c2xvZ19kYXRhICopOwkvKiBkaXNjb25uZWN0IGZyb20gc3lzbG9nZCAqLwotc3RhdGljIHZvaWQJY29ubmVjdGxvZ19yKHN0cnVjdCBzeXNsb2dfZGF0YSAqKTsJLyogKHJlKWNvbm5lY3QgdG8gc3lzbG9nZCAqLwotCi0vKgotICogc3lzbG9nLCB2c3lzbG9nIC0tCi0gKglwcmludCBtZXNzYWdlIG9uIGxvZyBmaWxlOyBvdXRwdXQgaXMgaW50ZW5kZWQgZm9yIHN5c2xvZ2QoOCkuCi0gKi8KLXZvaWQKLXN5c2xvZyhpbnQgcHJpLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQl2YV9saXN0IGFwOwotCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JdnN5c2xvZyhwcmksIGZtdCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci0KLXZvaWQKLXZzeXNsb2coaW50IHByaSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQotewotCXZzeXNsb2dfcihwcmksICZzZGF0YSwgZm10LCBhcCk7Ci19Ci0KLXZvaWQKLW9wZW5sb2coY29uc3QgY2hhciAqaWRlbnQsIGludCBsb2dzdGF0LCBpbnQgbG9nZmFjKQotewotCW9wZW5sb2dfcihpZGVudCwgbG9nc3RhdCwgbG9nZmFjLCAmc2RhdGEpOwotfQotCi12b2lkCi1jbG9zZWxvZyh2b2lkKQotewotCWNsb3NlbG9nX3IoJnNkYXRhKTsKLX0KLQotLyogc2V0bG9nbWFzayAtLSBzZXQgdGhlIGxvZyBtYXNrIGxldmVsICovCi1pbnQKLXNldGxvZ21hc2soaW50IHBtYXNrKQotewotCXJldHVybiBzZXRsb2dtYXNrX3IocG1hc2ssICZzZGF0YSk7Ci19Ci0KLS8qIFJlZW50cmFudCB2ZXJzaW9uIG9mIHN5c2xvZywgaS5lLiBzeXNsb2dfcigpICovCi0KLXZvaWQKLXN5c2xvZ19yKGludCBwcmksIHN0cnVjdCBzeXNsb2dfZGF0YSAqZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCXZzeXNsb2dfcihwcmksIGRhdGEsIGZtdCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci0KLXZvaWQKLXZzeXNsb2dfcihpbnQgcHJpLCBzdHJ1Y3Qgc3lzbG9nX2RhdGEgKmRhdGEsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKLXsKLQlpbnQgY250OwotCWNoYXIgY2gsICpwLCAqdDsKLQl0aW1lX3Qgbm93OwotCWludCBmZCwgc2F2ZWRfZXJybm8sIGVycm9yOwotI2RlZmluZQlUQlVGX0xFTgkyMDQ4Ci0jZGVmaW5lCUZNVF9MRU4JCTEwMjQKLQljaGFyICpzdGRwID0gTlVMTCwgdGJ1ZltUQlVGX0xFTl0sIGZtdF9jcHlbRk1UX0xFTl07Ci0JaW50IHRidWZfbGVmdCwgZm10X2xlZnQsIHBybGVuOwotCi0jZGVmaW5lCUlOVEVSTkFMTE9HCUxPR19FUlJ8TE9HX0NPTlN8TE9HX1BFUlJPUnxMT0dfUElECi0JLyogQ2hlY2sgZm9yIGludmFsaWQgYml0cy4gKi8KLQlpZiAocHJpICYgfihMT0dfUFJJTUFTS3xMT0dfRkFDTUFTSykpIHsKLQkJaWYgKGRhdGEgPT0gJnNkYXRhKSB7Ci0JCQlzeXNsb2coSU5URVJOQUxMT0csCi0JCQkgICAgInN5c2xvZzogdW5rbm93biBmYWNpbGl0eS9wcmlvcml0eTogJXgiLCBwcmkpOwotCQl9IGVsc2UgewotCQkJc3lzbG9nX3IoSU5URVJOQUxMT0csIGRhdGEsCi0JCQkgICAgInN5c2xvZ19yOiB1bmtub3duIGZhY2lsaXR5L3ByaW9yaXR5OiAleCIsIHByaSk7Ci0JCX0KLQkJcHJpICY9IExPR19QUklNQVNLfExPR19GQUNNQVNLOwotCX0KLQotCS8qIENoZWNrIHByaW9yaXR5IGFnYWluc3Qgc2V0bG9nbWFzayB2YWx1ZXMuICovCi0JaWYgKCEoTE9HX01BU0soTE9HX1BSSShwcmkpKSAmIGRhdGEtPmxvZ19tYXNrKSkKLQkJcmV0dXJuOwotCi0Jc2F2ZWRfZXJybm8gPSBlcnJubzsKLQotCS8qIFNldCBkZWZhdWx0IGZhY2lsaXR5IGlmIG5vbmUgc3BlY2lmaWVkLiAqLwotCWlmICgocHJpICYgTE9HX0ZBQ01BU0spID09IDApCi0JCXByaSB8PSBkYXRhLT5sb2dfZmFjOwotCi0JLyogSWYgd2UgaGF2ZSBiZWVuIGNhbGxlZCB0aHJvdWdoIHN5c2xvZygpLCBubyBuZWVkIGZvciByZWVudHJhbmN5LiAqLwotCWlmIChkYXRhID09ICZzZGF0YSkKLQkJKHZvaWQpdGltZSgmbm93KTsKLQotCXAgPSB0YnVmOwotCXRidWZfbGVmdCA9IFRCVUZfTEVOOwotCi0jZGVmaW5lCURFQygpCVwKLQlkbyB7CQkJCQlcCi0JCWlmIChwcmxlbiA8IDApCQkJXAotCQkJcHJsZW4gPSAwOwkJXAotCQlpZiAocHJsZW4gPj0gdGJ1Zl9sZWZ0KQkJXAotCQkJcHJsZW4gPSB0YnVmX2xlZnQgLSAxOwlcCi0JCXAgKz0gcHJsZW47CQkJXAotCQl0YnVmX2xlZnQgLT0gcHJsZW47CQlcCi0JfSB3aGlsZSAoMCkKLQotCXBybGVuID0gc25wcmludGYocCwgdGJ1Zl9sZWZ0LCAiPCVkPiIsIHByaSk7Ci0JREVDKCk7Ci0KLQkvKiAKLQkgKiBzeXNsb2dkIHdpbGwgZXhwYW5kIHRpbWUgYXV0b21hZ2ljYWxseSBmb3IgcmVlbnRyYW50IGNhc2UsIGFuZAotCSAqIGZvciBub3JtYWwgY2FzZSwganVzdCBkbyBsaWtlIGJlZm9yZQotCSAqLwotCWlmIChkYXRhID09ICZzZGF0YSkgewotCQlwcmxlbiA9IHN0cmZ0aW1lKHAsIHRidWZfbGVmdCwgIiVoICVlICVUICIsIGxvY2FsdGltZSgmbm93KSk7Ci0JCURFQygpOwotCX0KLQotCWlmIChkYXRhLT5sb2dfc3RhdCAmIExPR19QRVJST1IpCi0JCXN0ZHAgPSBwOwotCWlmIChkYXRhLT5sb2dfdGFnID09IE5VTEwpCi0JCWRhdGEtPmxvZ190YWcgPSBfX3Byb2duYW1lOwotCWlmIChkYXRhLT5sb2dfdGFnICE9IE5VTEwpIHsKLQkJcHJsZW4gPSBzbnByaW50ZihwLCB0YnVmX2xlZnQsICIlcyIsIGRhdGEtPmxvZ190YWcpOwotCQlERUMoKTsKLQl9Ci0JaWYgKGRhdGEtPmxvZ19zdGF0ICYgTE9HX1BJRCkgewotCQlwcmxlbiA9IHNucHJpbnRmKHAsIHRidWZfbGVmdCwgIlslbGRdIiwgKGxvbmcpZ2V0cGlkKCkpOwotCQlERUMoKTsKLQl9Ci0JaWYgKGRhdGEtPmxvZ190YWcgIT0gTlVMTCkgewotCQlpZiAodGJ1Zl9sZWZ0ID4gMSkgewotCQkJKnArKyA9ICc6JzsKLQkJCXRidWZfbGVmdC0tOwotCQl9Ci0JCWlmICh0YnVmX2xlZnQgPiAxKSB7Ci0JCQkqcCsrID0gJyAnOwotCQkJdGJ1Zl9sZWZ0LS07Ci0JCX0KLQl9Ci0KLQkvKiBzdHJlcnJvcigpIGlzIG5vdCByZWVudHJhbnQgKi8KLQotCWZvciAodCA9IGZtdF9jcHksIGZtdF9sZWZ0ID0gRk1UX0xFTjsgKGNoID0gKmZtdCk7ICsrZm10KSB7Ci0JCWlmIChjaCA9PSAnJScgJiYgZm10WzFdID09ICdtJykgewotCQkJKytmbXQ7Ci0JCQlpZiAoZGF0YSA9PSAmc2RhdGEpIHsKLQkJCQlwcmxlbiA9IHNucHJpbnRmKHQsIGZtdF9sZWZ0LCAiJXMiLAotCQkJCSAgICBzdHJlcnJvcihzYXZlZF9lcnJubykpOyAKLQkJCX0gZWxzZSB7Ci0JCQkJcHJsZW4gPSBzbnByaW50Zih0LCBmbXRfbGVmdCwgIkVycm9yICVkIiwKLQkJCQkgICAgc2F2ZWRfZXJybm8pOyAKLQkJCX0KLQkJCWlmIChwcmxlbiA8IDApCi0JCQkJcHJsZW4gPSAwOwotCQkJaWYgKHBybGVuID49IGZtdF9sZWZ0KQotCQkJCXBybGVuID0gZm10X2xlZnQgLSAxOwotCQkJdCArPSBwcmxlbjsKLQkJCWZtdF9sZWZ0IC09IHBybGVuOwotCQl9IGVsc2UgaWYgKGNoID09ICclJyAmJiBmbXRbMV0gPT0gJyUnICYmIGZtdF9sZWZ0ID4gMikgewotCQkJKnQrKyA9ICclJzsKLQkJCSp0KysgPSAnJSc7Ci0JCQlmbXQrKzsKLQkJCWZtdF9sZWZ0IC09IDI7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZm10X2xlZnQgPiAxKSB7Ci0JCQkJKnQrKyA9IGNoOwotCQkJCWZtdF9sZWZ0LS07Ci0JCQl9Ci0JCX0KLQl9Ci0JKnQgPSAnXDAnOwotCi0JcHJsZW4gPSB2c25wcmludGYocCwgdGJ1Zl9sZWZ0LCBmbXRfY3B5LCBhcCk7Ci0JREVDKCk7Ci0JY250ID0gcCAtIHRidWY7Ci0KLQkvKiBPdXRwdXQgdG8gc3RkZXJyIGlmIHJlcXVlc3RlZC4gKi8KLQlpZiAoZGF0YS0+bG9nX3N0YXQgJiBMT0dfUEVSUk9SKSB7Ci0JCXN0cnVjdCBpb3ZlYyBpb3ZbMl07Ci0KLQkJaW92WzBdLmlvdl9iYXNlID0gc3RkcDsKLQkJaW92WzBdLmlvdl9sZW4gPSBjbnQgLSAoc3RkcCAtIHRidWYpOwotCQlpb3ZbMV0uaW92X2Jhc2UgPSAiXG4iOwotCQlpb3ZbMV0uaW92X2xlbiA9IDE7Ci0JCSh2b2lkKXdyaXRldihTVERFUlJfRklMRU5PLCBpb3YsIDIpOwotCX0KLQotCS8qIEdldCBjb25uZWN0ZWQsIG91dHB1dCB0aGUgbWVzc2FnZSB0byB0aGUgbG9jYWwgbG9nZ2VyLiAqLwotCWlmICghZGF0YS0+b3BlbmVkKQotCQlvcGVubG9nX3IoZGF0YS0+bG9nX3RhZywgZGF0YS0+bG9nX3N0YXQsIDAsIGRhdGEpOwotCWNvbm5lY3Rsb2dfcihkYXRhKTsKLQotCS8qCi0JICogSWYgdGhlIHNlbmQoKSBmYWlsZWQsIHRoZXJlIGFyZSB0d28gbGlrZWx5IHNjZW5hcmlvczoKLQkgKiAgMSkgc3lzbG9nZCB3YXMgcmVzdGFydGVkCi0JICogIDIpIC9kZXYvbG9nIGlzIG91dCBvZiBzb2NrZXQgYnVmZmVyIHNwYWNlCi0JICogV2UgYXR0ZW1wdCB0byByZWNvbm5lY3QgdG8gL2Rldi9sb2cgdG8gdGFrZSBjYXJlIG9mCi0JICogY2FzZSAjMSBhbmQga2VlcCBzZW5kKClpbmcgZGF0YSB0byBjb3ZlciBjYXNlICMyCi0JICogdG8gZ2l2ZSBzeXNsb2dkIGEgY2hhbmNlIHRvIGVtcHR5IGl0cyBzb2NrZXQgYnVmZmVyLgotCSAqLwotCWlmICgoZXJyb3IgPSBzZW5kKGRhdGEtPmxvZ19maWxlLCB0YnVmLCBjbnQsIDApKSA8IDApIHsKLQkJaWYgKGVycm5vICE9IEVOT0JVRlMpIHsKLQkJCWRpc2Nvbm5lY3Rsb2dfcihkYXRhKTsKLQkJCWNvbm5lY3Rsb2dfcihkYXRhKTsKLQkJfQotCQlkbyB7Ci0JCQl1c2xlZXAoMSk7Ci0JCQlpZiAoKGVycm9yID0gc2VuZChkYXRhLT5sb2dfZmlsZSwgdGJ1ZiwgY250LCAwKSkgPj0gMCkKLQkJCQlicmVhazsKLQkJfSB3aGlsZSAoZXJybm8gPT0gRU5PQlVGUyk7Ci0JfQotCi0JLyoKLQkgKiBPdXRwdXQgdGhlIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGU7IHRyeSBub3QgdG8gYmxvY2sKLQkgKiBhcyBhIGJsb2NraW5nIGNvbnNvbGUgc2hvdWxkIG5vdCBzdG9wIG90aGVyIHByb2Nlc3Nlcy4KLQkgKiBNYWtlIHN1cmUgdGhlIGVycm9yIHJlcG9ydGVkIGlzIHRoZSBvbmUgZnJvbSB0aGUgc3lzbG9nZCBmYWlsdXJlLgotCSAqLwotCWlmIChlcnJvciA9PSAtMSAmJiAoZGF0YS0+bG9nX3N0YXQgJiBMT0dfQ09OUykgJiYKLQkgICAgKGZkID0gb3BlbihfUEFUSF9DT05TT0xFLCBPX1dST05MWXxPX05PTkJMT0NLLCAwKSkgPj0gMCkgewotCQlzdHJ1Y3QgaW92ZWMgaW92WzJdOwotCQkKLQkJcCA9IHN0cmNocih0YnVmLCAnPicpICsgMTsKLQkJaW92WzBdLmlvdl9iYXNlID0gcDsKLQkJaW92WzBdLmlvdl9sZW4gPSBjbnQgLSAocCAtIHRidWYpOwotCQlpb3ZbMV0uaW92X2Jhc2UgPSAiXHJcbiI7Ci0JCWlvdlsxXS5pb3ZfbGVuID0gMjsKLQkJKHZvaWQpd3JpdGV2KGZkLCBpb3YsIDIpOwotCQkodm9pZCljbG9zZShmZCk7Ci0JfQotCi0JaWYgKGRhdGEgIT0gJnNkYXRhKQotCQljbG9zZWxvZ19yKGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZAotZGlzY29ubmVjdGxvZ19yKHN0cnVjdCBzeXNsb2dfZGF0YSAqZGF0YSkKLXsKLQkvKgotCSAqIElmIHRoZSB1c2VyIGNsb3NlZCB0aGUgRkQgYW5kIG9wZW5lZCBhbm90aGVyIGluIHRoZSBzYW1lIHNsb3QsCi0JICogdGhhdCdzIHRoZWlyIHByb2JsZW0uICBUaGV5IHNob3VsZCBjbG9zZSBpdCBiZWZvcmUgY2FsbGluZyBvbgotCSAqIHN5c3RlbSBzZXJ2aWNlcy4KLQkgKi8KLQlpZiAoZGF0YS0+bG9nX2ZpbGUgIT0gLTEpIHsKLQkJY2xvc2UoZGF0YS0+bG9nX2ZpbGUpOwotCQlkYXRhLT5sb2dfZmlsZSA9IC0xOwotCX0KLQlkYXRhLT5jb25uZWN0ZWQgPSAwOwkJLyogcmV0cnkgY29ubmVjdCAqLwotfQotCi1zdGF0aWMgdm9pZAotY29ubmVjdGxvZ19yKHN0cnVjdCBzeXNsb2dfZGF0YSAqZGF0YSkKLXsKLSAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCBzb2NrYWRkciAgICAgc3lzbG9nQWRkcjsKLSAgICAgICAgc3RydWN0IHNvY2thZGRyX3VuICBzeXNsb2dBZGRyVW47Ci0gICAgfSB1OwotCi0jZGVmaW5lIFN5c2xvZ0FkZHIgICB1LnN5c2xvZ0FkZHJVbgotCi0JaWYgKGRhdGEtPmxvZ19maWxlID09IC0xKSB7Ci0JCWlmICgoZGF0YS0+bG9nX2ZpbGUgPSBzb2NrZXQoQUZfVU5JWCwgU09DS19ER1JBTSwgMCkpID09IC0xKQotCQkJcmV0dXJuOwotCQkodm9pZClmY250bChkYXRhLT5sb2dfZmlsZSwgRl9TRVRGRCwgMSk7Ci0JfQotCWlmIChkYXRhLT5sb2dfZmlsZSAhPSAtMSAmJiAhZGF0YS0+Y29ubmVjdGVkKSB7Ci0JCW1lbXNldCgmU3lzbG9nQWRkciwgJ1wwJywgc2l6ZW9mKFN5c2xvZ0FkZHIpKTsKLSNpZiAwCi0gICAgICAgICAgICAgICAgLyogQklPTklDOiBubyBzdW5fbGVuIGZpZWxkIHRvIGZpbGwgb24gTGludXggKi8KLQkJU3lzbG9nQWRkci5zdW5fbGVuID0gc2l6ZW9mKFN5c2xvZ0FkZHIpOwotI2VuZGlmCi0JCVN5c2xvZ0FkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7Ci0JCXN0cmxjcHkoU3lzbG9nQWRkci5zdW5fcGF0aCwgX1BBVEhfTE9HLAotCQkgICAgc2l6ZW9mKFN5c2xvZ0FkZHIuc3VuX3BhdGgpKTsKLQkJaWYgKGNvbm5lY3QoZGF0YS0+bG9nX2ZpbGUsICZ1LnN5c2xvZ0FkZHIsCi0JCSAgICBzaXplb2YoU3lzbG9nQWRkcikpID09IC0xKSB7Ci0JCQkodm9pZCljbG9zZShkYXRhLT5sb2dfZmlsZSk7Ci0JCQlkYXRhLT5sb2dfZmlsZSA9IC0xOwotCQl9IGVsc2UKLQkJCWRhdGEtPmNvbm5lY3RlZCA9IDE7Ci0JfQotfQotCi12b2lkCi1vcGVubG9nX3IoY29uc3QgY2hhciAqaWRlbnQsIGludCBsb2dzdGF0LCBpbnQgbG9nZmFjLCBzdHJ1Y3Qgc3lzbG9nX2RhdGEgKmRhdGEpCi17Ci0JaWYgKGlkZW50ICE9IE5VTEwpCi0JCWRhdGEtPmxvZ190YWcgPSBpZGVudDsKLQlkYXRhLT5sb2dfc3RhdCA9IGxvZ3N0YXQ7Ci0JaWYgKGxvZ2ZhYyAhPSAwICYmIChsb2dmYWMgJn4gTE9HX0ZBQ01BU0spID09IDApCi0JCWRhdGEtPmxvZ19mYWMgPSBsb2dmYWM7Ci0KLQlpZiAoZGF0YS0+bG9nX3N0YXQgJiBMT0dfTkRFTEFZKQkvKiBvcGVuIGltbWVkaWF0ZWx5ICovCi0JCWNvbm5lY3Rsb2dfcihkYXRhKTsKLQotCWRhdGEtPm9wZW5lZCA9IDE7CS8qIGlkZW50IGFuZCBmYWNpbGl0eSBoYXMgYmVlbiBzZXQgKi8KLX0KLQotdm9pZAotY2xvc2Vsb2dfcihzdHJ1Y3Qgc3lzbG9nX2RhdGEgKmRhdGEpCi17Ci0JKHZvaWQpY2xvc2UoZGF0YS0+bG9nX2ZpbGUpOwotCWRhdGEtPmxvZ19maWxlID0gLTE7Ci0JZGF0YS0+Y29ubmVjdGVkID0gMDsKLQlkYXRhLT5sb2dfdGFnID0gTlVMTDsKLX0KLQotLyogc2V0bG9nbWFzayAtLSBzZXQgdGhlIGxvZyBtYXNrIGxldmVsICovCi1pbnQKLXNldGxvZ21hc2tfcihpbnQgcG1hc2ssIHN0cnVjdCBzeXNsb2dfZGF0YSAqZGF0YSkKLXsKLQlpbnQgb21hc2s7Ci0KLQlvbWFzayA9IGRhdGEtPmxvZ19tYXNrOwotCWlmIChwbWFzayAhPSAwKQotCQlkYXRhLT5sb2dfbWFzayA9IHBtYXNrOwotCXJldHVybiAob21hc2spOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc3lzdGVtLmMgYi9saWJjL3VuaXN0ZC9zeXN0ZW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJjYzM3ZS4uMDAwMDAwMAotLS0gYS9saWJjL3VuaXN0ZC9zeXN0ZW0uYworKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBzeXN0ZW0uYyx2IDEuOCAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg4IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8cGF0aHMuaD4KLSNpbmNsdWRlIDxzeXMvd2FpdC5oPgotCi1leHRlcm4gY2hhciAqKmVudmlyb247Ci0KLWludAotc3lzdGVtKGNvbnN0IGNoYXIgKmNvbW1hbmQpCi17Ci0gIHBpZF90IHBpZDsKLQlzaWdfdCBpbnRzYXZlLCBxdWl0c2F2ZTsKLQlzaWdzZXRfdCBtYXNrLCBvbWFzazsKLQlpbnQgcHN0YXQ7Ci0JY2hhciAqYXJncFtdID0geyJzaCIsICItYyIsIE5VTEwsIE5VTEx9OwotCi0JaWYgKCFjb21tYW5kKQkJLyoganVzdCBjaGVja2luZy4uLiAqLwotCQlyZXR1cm4oMSk7Ci0KLQlhcmdwWzJdID0gKGNoYXIgKiljb21tYW5kOwotCi0Jc2lnZW1wdHlzZXQoJm1hc2spOwotCXNpZ2FkZHNldCgmbWFzaywgU0lHQ0hMRCk7Ci0Jc2lncHJvY21hc2soU0lHX0JMT0NLLCAmbWFzaywgJm9tYXNrKTsKLQlzd2l0Y2ggKHBpZCA9IHZmb3JrKCkpIHsKLQljYXNlIC0xOgkJCS8qIGVycm9yICovCi0JCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb21hc2ssIE5VTEwpOwotCQlyZXR1cm4oLTEpOwotCWNhc2UgMDoJCQkJLyogY2hpbGQgKi8KLQkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvbWFzaywgTlVMTCk7Ci0JCWV4ZWN2ZShfUEFUSF9CU0hFTEwsIGFyZ3AsIGVudmlyb24pOwotICAgIF9leGl0KDEyNyk7Ci0gIH0KLQotCWludHNhdmUgPSAoc2lnX3QpICBic2Rfc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7Ci0JcXVpdHNhdmUgPSAoc2lnX3QpIGJzZF9zaWduYWwoU0lHUVVJVCwgU0lHX0lHTik7Ci0JcGlkID0gd2FpdHBpZChwaWQsIChpbnQgKikmcHN0YXQsIDApOwotCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb21hc2ssIE5VTEwpOwotCSh2b2lkKWJzZF9zaWduYWwoU0lHSU5ULCBpbnRzYXZlKTsKLQkodm9pZClic2Rfc2lnbmFsKFNJR1FVSVQsIHF1aXRzYXZlKTsKLQlyZXR1cm4gKHBpZCA9PSAtMSA/IC0xIDogcHN0YXQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvdGltZS5jIGIvbGliYy91bmlzdGQvdGltZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGFhNjJjLi4wMDAwMDAwCi0tLSBhL2xpYmMvdW5pc3RkL3RpbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCSRPcGVuQlNEOiB0aW1lLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNCBlc3BpZSBFeHAgJCAqLwotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDx0aW1lLmg+Ci0KLXRpbWVfdAotdGltZSh0aW1lX3QgKnQpCi17Ci0Jc3RydWN0IHRpbWV2YWwgdHQ7Ci0JdGltZV90IHJldDsKLQotCWlmIChnZXR0aW1lb2ZkYXkoJnR0LCAoc3RydWN0IHRpbWV6b25lICopMCkgPCAwKQotCQlyZXQgPSAtMTsKLQllbHNlCi0JCXJldCA9IHR0LnR2X3NlYzsKLQlpZiAodCAhPSBOVUxMKQotCQkqdCA9IHJldDsKLQlyZXR1cm4gcmV0OwotfQotCi0vLyByZXR1cm4gbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIENQVSB0aW1lIGluIHRpY2tzIHJlbGF0aXZlIHRvIHVuc3BlY2lmaWVkIGVwb2NoCi1zdGF0aWMgaW5saW5lIGNsb2NrX3QgY2xvY2tfbm93KHZvaWQpCi17Ci0Jc3RydWN0IHRpbWVzcGVjIHRtOwotCWNsb2NrX2dldHRpbWUoIENMT0NLX01PTk9UT05JQywgJnRtKTsKLQlyZXR1cm4gdG0udHZfc2VjICogQ0xPQ0tTX1BFUl9TRUMgKyAodG0udHZfbnNlYyAqIChDTE9DS1NfUEVSX1NFQy8xZTkpKTsKLX0KLQotLy8gaW5pdGlhbGl6ZWQgYnkgdGhlIGNvbnN0cnVjdG9yIGJlbG93Ci1zdGF0aWMgY2xvY2tfdCBjbG9ja19zdGFydDsKLQotLy8gY2FsbGVkIGJ5IGRsb3BlbiB3aGVuIC5zbyBpcyBsb2FkZWQKLV9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgc3RhdGljIHZvaWQgY2xvY2tfY3J0MCh2b2lkKQotewotCWNsb2NrX3N0YXJ0ID0gY2xvY2tfbm93KCk7Ci19Ci0KLS8vIHJldHVybiBlbGFwc2VkIENQVSB0aW1lIGluIGNsb2NrIHRpY2tzLCBzaW5jZSBzdGFydCBvZiBwcm9ncmFtIGV4ZWN1dGlvbgotLy8gKHNwZWMgc2F5cyBlcG9jaCBpcyB1bmRlZmluZWQsIGJ1dCBnbGliYyB1c2VzIGNydDAgYXMgZXBvY2gpCi1jbG9ja190Ci1jbG9jayh2b2lkKQotewotCS8vIG5vdGUgdGhhdCBpZiB3ZSBhcmUgZXhlY3V0aW5nIGluIGEgZGlmZmVyZW50IHRocmVhZCB0aGFuIGNydDAsIHRoZW4gdGhlCi0JLy8gcHRocmVhZF9jcmVhdGUgdGhhdCBtYWRlIHVzIGhhZCBhIG1lbW9yeSBiYXJyaWVyIHNvIGNsb2NrX3N0YXJ0IGlzIGRlZmluZWQKLQlyZXR1cm4gY2xvY2tfbm93KCkgLSBjbG9ja19zdGFydDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZGxtYWxsb2MvbWFsbG9jLmMgYi9saWJjL3Vwc3RyZWFtLWRsbWFsbG9jL21hbGxvYy5jCmluZGV4IDNlZjliNjEuLjQzNjJmNDkgMTAwNjQ0Ci0tLSBhL2xpYmMvdXBzdHJlYW0tZGxtYWxsb2MvbWFsbG9jLmMKKysrIGIvbGliYy91cHN0cmVhbS1kbG1hbGxvYy9tYWxsb2MuYwpAQCAtNTMxNywxMiArNTMxNywxOSBAQAogICByZXR1cm4gZGxtZW1hbGlnbihwYWdlc3osIGJ5dGVzKTsKIH0KIAorLyogQkVHSU4gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBvdmVyZmxvdyBjaGVjayAqLwogdm9pZCogZGxwdmFsbG9jKHNpemVfdCBieXRlcykgewogICBzaXplX3QgcGFnZXN6OworICBzaXplX3Qgc2l6ZTsKICAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CiAgIHBhZ2VzeiA9IG1wYXJhbXMucGFnZV9zaXplOwotICByZXR1cm4gZGxtZW1hbGlnbihwYWdlc3osIChieXRlcyArIHBhZ2VzeiAtIFNJWkVfVF9PTkUpICYgfihwYWdlc3ogLSBTSVpFX1RfT05FKSk7CisgIHNpemUgPSAoYnl0ZXMgKyBwYWdlc3ogLSBTSVpFX1RfT05FKSAmIH4ocGFnZXN6IC0gU0laRV9UX09ORSk7CisgIGlmIChzaXplIDwgYnl0ZXMpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICByZXR1cm4gZGxtZW1hbGlnbihwYWdlc3osIHNpemUpOwogfQorLyogRU5EIGFuZHJvaWQtY2hhbmdlICovCiAKIHZvaWQqKiBkbGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjaHVua3NbXSkgewpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2FuZHJvaWQvaW5jbHVkZS9mcmVlYnNkLWNvbXBhdC5oIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2FuZHJvaWQvaW5jbHVkZS9mcmVlYnNkLWNvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZjE0MjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvYW5kcm9pZC9pbmNsdWRlL2ZyZWVic2QtY29tcGF0LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0JJT05JQ19GUkVFQlNEX0NPTVBBVF9IX2luY2x1ZGVkCisjZGVmaW5lIF9CSU9OSUNfRlJFRUJTRF9DT01QQVRfSF9pbmNsdWRlZAorCisjZGVmaW5lIF9fVVNFX0JTRAorI2RlZmluZSBSRVBMQUNFX0dFVE9QVAorCisvKgorICogRnJlZUJTRCdzIGxpYmMgaGFzIHRocmVlIHN5bWJvbHMgZm9yIGV2ZXJ5IHN5bWJvbDoKKyAqCisgKiAgICAgX19mIHdpbGwgYmUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbi4KKyAqICAgICBfZiB3aWxsIGJlIGEgd2VhayByZWZlcmVuY2UgdG8gX19mICh1c2VkIGZvciBjYWxscyB0byBmIGZyb20gd2l0aGluIHRoZSBsaWJyYXJ5KS4KKyAqICAgICBmIHdpbGwgYmUgYSB3ZWFrIHJlZmVyZW5jZSB0byBfX2YgKHVzZWQgZm9yIGNhbGxzIHRvIGYgZnJvbSBvdXRzaWRlIHRoZSBsaWJyYXJ5KS4KKyAqCisgKiBXZSBjb2xsYXBzZSB0aGlzIGludG8ganVzdCB0aGUgb25lIHN5bWJvbCwgZi4KKyAqLworCisvKiBQcmV2ZW50IHdlYWsgcmVmZXJlbmNlIGdlbmVyYXRpb24uICovCisjZGVmaW5lIF9fd2Vha19yZWZlcmVuY2Uoc3ltLGFsaWFzKQorCisvKiBFbnN1cmUgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gaXRzZWxmIGdldHMgdGhlIHVuZGVyc2NvcmUtZnJlZSBuYW1lLiAqLworI2RlZmluZSBfX3NsZWVwIHNsZWVwCisjZGVmaW5lIF9fdXNsZWVwIHVzbGVlcAorCisvKiBSZWRpcmVjdCBpbnRlcm5hbCBDIGxpYnJhcnkgY2FsbHMgdG8gdGhlIHB1YmxpYyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX2Nsb3NlIGNsb3NlCisjZGVmaW5lIF9mY250bCBmY250bAorI2RlZmluZSBfZnN0YXQgZnN0YXQKKyNkZWZpbmUgX25hbm9zbGVlcCBuYW5vc2xlZXAKKyNkZWZpbmUgX29wZW4gb3BlbgorCisvKiBUaGlzIG9uZSBpcyBvbmx5IG5lZWRlZCBhcyBsb25nIGFzIHdlIGhhdmUgYSBtaXggb2YgT3BlbkJTRCBhbmQgRnJlZUJTRCBzdGRpby4gKi8KKyNkZWZpbmUgX3NzZWVrIF9fc3NlZWsKKworLyogVGhpcyBpcyBpbiBCU0QncyA8c3RkbGliLmg+LiAqLworI2luY2x1ZGUgPHN0ZGludC5oPgorZXh0ZXJuIHVpbnQzMl90IGFyYzRyYW5kb21fdW5pZm9ybSh1aW50MzJfdCB1cHBlcl9ib3VuZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2FuZHJvaWQvaW5jbHVkZS9saWJjX3ByaXZhdGUuaCBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9hbmRyb2lkL2luY2x1ZGUvbGliY19wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhNjQzMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9hbmRyb2lkL2luY2x1ZGUvbGliY19wcml2YXRlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0JJT05JQ19GUkVFQlNEX0xJQkNfUFJJVkFURV9IX2luY2x1ZGVkCisjZGVmaW5lIF9CSU9OSUNfRlJFRUJTRF9MSUJDX1BSSVZBVEVfSF9pbmNsdWRlZAorCisjZGVmaW5lIFNURElPX1RIUkVBRF9MT0NLKCkgICAvKiBUT0RPOiB1bnRpbCB3ZSBoYXZlIHRoZSBGcmVlQlNEIGZpbmRmcC5jLCB0aGlzIGlzIHVzZWxlc3MuICovCisjZGVmaW5lIFNURElPX1RIUkVBRF9VTkxPQ0soKSAvKiBUT0RPOiB1bnRpbCB3ZSBoYXZlIHRoZSBGcmVlQlNEIGZpbmRmcC5jLCB0aGlzIGlzIHVzZWxlc3MuICovCisKKyNkZWZpbmUgT1JJRU5UKGZwLCBvKSAvKiBPbmx5IG5lZWRlZCBmb3Igd2lkZS1jaGFyYWN0ZXIgc3RyZWFtIHN1cHBvcnQuICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL3VuLW5hbWVzcGFjZS5oIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2FuZHJvaWQvaW5jbHVkZS9uYW1lc3BhY2UuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGxpYmMvdXBzdHJlYW0tZnJlZWJzZC91bi1uYW1lc3BhY2UuaApjb3B5IHRvIGxpYmMvdXBzdHJlYW0tZnJlZWJzZC9hbmRyb2lkL2luY2x1ZGUvbmFtZXNwYWNlLmgKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9zcGlubG9jay5oIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2FuZHJvaWQvaW5jbHVkZS9zcGlubG9jay5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLWZyZWVic2Qvc3BpbmxvY2suaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1mcmVlYnNkL2FuZHJvaWQvaW5jbHVkZS9zcGlubG9jay5oCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvdW4tbmFtZXNwYWNlLmggYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvYW5kcm9pZC9pbmNsdWRlL3VuLW5hbWVzcGFjZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLWZyZWVic2QvdW4tbmFtZXNwYWNlLmgKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tZnJlZWJzZC9hbmRyb2lkL2luY2x1ZGUvdW4tbmFtZXNwYWNlLmgKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9mcmVlYnNkLWNvbXBhdC5oIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2ZyZWVic2QtY29tcGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZGM2NzkuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2ZyZWVic2QtY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBfQklPTklDX0ZSRUVCU0RfQ09NUEFUX0hfaW5jbHVkZWQKLSNkZWZpbmUgX0JJT05JQ19GUkVFQlNEX0NPTVBBVF9IX2luY2x1ZGVkCi0KLSNkZWZpbmUgX19VU0VfQlNECi0jZGVmaW5lIFJFUExBQ0VfR0VUT1BUCi0KLS8qCi0gKiBGcmVlQlNEJ3MgbGliYyBoYXMgdGhyZWUgc3ltYm9scyBmb3IgZXZlcnkgc3ltYm9sOgotICoKLSAqICAgICBfX2Ygd2lsbCBiZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLgotICogICAgIF9mIHdpbGwgYmUgYSB3ZWFrIHJlZmVyZW5jZSB0byBfX2YgKHVzZWQgZm9yIGNhbGxzIHRvIGYgZnJvbSB3aXRoaW4gdGhlIGxpYnJhcnkpLgotICogICAgIGYgd2lsbCBiZSBhIHdlYWsgcmVmZXJlbmNlIHRvIF9fZiAodXNlZCBmb3IgY2FsbHMgdG8gZiBmcm9tIG91dHNpZGUgdGhlIGxpYnJhcnkpLgotICoKLSAqIFdlIGNvbGxhcHNlIHRoaXMgaW50byBqdXN0IHRoZSBvbmUgc3ltYm9sLCBmLgotICovCi0KLS8qIFByZXZlbnQgd2VhayByZWZlcmVuY2UgZ2VuZXJhdGlvbi4gKi8KLSNkZWZpbmUgX193ZWFrX3JlZmVyZW5jZShzeW0sYWxpYXMpCi0KLS8qIEVuc3VyZSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYgZ2V0cyB0aGUgdW5kZXJzY29yZS1mcmVlIG5hbWUuICovCi0jZGVmaW5lIF9fc2xlZXAgc2xlZXAKLSNkZWZpbmUgX191c2xlZXAgdXNsZWVwCi0KLS8qIFJlZGlyZWN0IGludGVybmFsIEMgbGlicmFyeSBjYWxscyB0byB0aGUgcHVibGljIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBfY2xvc2UgY2xvc2UKLSNkZWZpbmUgX2ZjbnRsIGZjbnRsCi0jZGVmaW5lIF9mc3RhdCBmc3RhdAotI2RlZmluZSBfbmFub3NsZWVwIG5hbm9zbGVlcAotI2RlZmluZSBfb3BlbiBvcGVuCi0KLS8qIFRoaXMgb25lIGlzIG9ubHkgbmVlZGVkIGFzIGxvbmcgYXMgd2UgaGF2ZSBhIG1peCBvZiBPcGVuQlNEIGFuZCBGcmVlQlNEIHN0ZGlvLiAqLwotI2RlZmluZSBfc3NlZWsgX19zc2VlawotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9nZW4vbGRleHAuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9nZW4vbGRleHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODdmNjczCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL2dlbi9sZGV4cC5jCkBAIC0wLDAgKzEsMTIzIEBACisvKiBAKCMpc19zY2FsYm4uYyA1LjEgOTMvMDkvMjQgKi8KKy8qIEAoIylmZGxpYm0uaCA1LjEgOTMvMDkvMjQgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9lbmRpYW4uaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKy8qIEJpdCBmaWRkbGluZyByb3V0aW5lcyBjb3BpZWQgZnJvbSBtc3VuL3NyYy9tYXRoX3ByaXZhdGUuaCx2IDEuMTUgKi8KKworI2lmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgorCit0eXBlZGVmIHVuaW9uCit7CisgIGRvdWJsZSB2YWx1ZTsKKyAgc3RydWN0CisgIHsKKyAgICB1X2ludDMyX3QgbXN3OworICAgIHVfaW50MzJfdCBsc3c7CisgIH0gcGFydHM7Cit9IGllZWVfZG91YmxlX3NoYXBlX3R5cGU7CisKKyNlbmRpZgorCisjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCisKK3R5cGVkZWYgdW5pb24KK3sKKyAgZG91YmxlIHZhbHVlOworICBzdHJ1Y3QKKyAgeworICAgIHVfaW50MzJfdCBsc3c7CisgICAgdV9pbnQzMl90IG1zdzsKKyAgfSBwYXJ0czsKK30gaWVlZV9kb3VibGVfc2hhcGVfdHlwZTsKKworI2VuZGlmCisKKy8qIEdldCB0d28gMzIgYml0IGludHMgZnJvbSBhIGRvdWJsZS4gICovCisKKyNkZWZpbmUgRVhUUkFDVF9XT1JEUyhpeDAsaXgxLGQpCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSBld191OwkJCQkJXAorICBld191LnZhbHVlID0gKGQpOwkJCQkJCVwKKyAgKGl4MCkgPSBld191LnBhcnRzLm1zdzsJCQkJCVwKKyAgKGl4MSkgPSBld191LnBhcnRzLmxzdzsJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIEdldCB0aGUgbW9yZSBzaWduaWZpY2FudCAzMiBiaXQgaW50IGZyb20gYSBkb3VibGUuICAqLworCisjZGVmaW5lIEdFVF9ISUdIX1dPUkQoaSxkKQkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIGdoX3U7CQkJCQlcCisgIGdoX3UudmFsdWUgPSAoZCk7CQkJCQkJXAorICAoaSkgPSBnaF91LnBhcnRzLm1zdzsJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKiBTZXQgdGhlIG1vcmUgc2lnbmlmaWNhbnQgMzIgYml0cyBvZiBhIGRvdWJsZSBmcm9tIGFuIGludC4gICovCisKKyNkZWZpbmUgU0VUX0hJR0hfV09SRChkLHYpCQkJCQlcCitkbyB7CQkJCQkJCQlcCisgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgc2hfdTsJCQkJCVwKKyAgc2hfdS52YWx1ZSA9IChkKTsJCQkJCQlcCisgIHNoX3UucGFydHMubXN3ID0gKHYpOwkJCQkJCVwKKyAgKGQpID0gc2hfdS52YWx1ZTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisKK3N0YXRpYyBjb25zdCBkb3VibGUKK3R3bzU0ICAgPSAgMS44MDE0Mzk4NTA5NDgxOTg0MDAwMGUrMTYsIC8qIDB4NDM1MDAwMDAsIDB4MDAwMDAwMDAgKi8KK3R3b201NCAgPSAgNS41NTExMTUxMjMxMjU3ODI3MDIxMmUtMTcsIC8qIDB4M0M5MDAwMDAsIDB4MDAwMDAwMDAgKi8KK2h1Z2UgICA9IDEuMGUrMzAwLAordGlueSAgID0gMS4wZS0zMDA7CisKK3N0YXRpYyBkb3VibGUKK19jb3B5c2lnbihkb3VibGUgeCwgZG91YmxlIHkpCit7CisJdV9pbnQzMl90IGh4LGh5OworCUdFVF9ISUdIX1dPUkQoaHgseCk7CisJR0VUX0hJR0hfV09SRChoeSx5KTsKKwlTRVRfSElHSF9XT1JEKHgsKGh4JjB4N2ZmZmZmZmYpfChoeSYweDgwMDAwMDAwKSk7CisJcmV0dXJuIHg7Cit9CisKK2RvdWJsZQorbGRleHAoZG91YmxlIHgsIGludCBuKQoreworCWludDMyX3QgayxoeCxseDsKKwlFWFRSQUNUX1dPUkRTKGh4LGx4LHgpOworICAgICAgICBrID0gKGh4JjB4N2ZmMDAwMDApPj4yMDsJCS8qIGV4dHJhY3QgZXhwb25lbnQgKi8KKyAgICAgICAgaWYgKGs9PTApIHsJCQkJLyogMCBvciBzdWJub3JtYWwgeCAqLworICAgICAgICAgICAgaWYgKChseHwoaHgmMHg3ZmZmZmZmZikpPT0wKSByZXR1cm4geDsgLyogKy0wICovCisJICAgIHggKj0gdHdvNTQ7CisJICAgIEdFVF9ISUdIX1dPUkQoaHgseCk7CisJICAgIGsgPSAoKGh4JjB4N2ZmMDAwMDApPj4yMCkgLSA1NDsKKyAgICAgICAgICAgIGlmIChuPCAtNTAwMDApIHJldHVybiB0aW55Kng7IAkvKnVuZGVyZmxvdyovCisJICAgIH0KKyAgICAgICAgaWYgKGs9PTB4N2ZmKSByZXR1cm4geCt4OwkJLyogTmFOIG9yIEluZiAqLworICAgICAgICBrID0gaytuOworICAgICAgICBpZiAoayA+ICAweDdmZSkgcmV0dXJuIGh1Z2UqX2NvcHlzaWduKGh1Z2UseCk7IC8qIG92ZXJmbG93ICAqLworICAgICAgICBpZiAoayA+IDApIAkJCQkvKiBub3JtYWwgcmVzdWx0ICovCisJICAgIHtTRVRfSElHSF9XT1JEKHgsKGh4JjB4ODAwZmZmZmYpfChrPDwyMCkpOyByZXR1cm4geDt9CisgICAgICAgIGlmIChrIDw9IC01NCkgeworICAgICAgICAgICAgaWYgKG4gPiA1MDAwMCkgCS8qIGluIGNhc2UgaW50ZWdlciBvdmVyZmxvdyBpbiBuK2sgKi8KKwkJcmV0dXJuIGh1Z2UqX2NvcHlzaWduKGh1Z2UseCk7CS8qb3ZlcmZsb3cqLworCSAgICBlbHNlIHJldHVybiB0aW55Kl9jb3B5c2lnbih0aW55LHgpOyAJLyp1bmRlcmZsb3cqLworCX0KKyAgICAgICAgayArPSA1NDsJCQkJLyogc3Vibm9ybWFsIHJlc3VsdCAqLworCVNFVF9ISUdIX1dPUkQoeCwoaHgmMHg4MDBmZmZmZil8KGs8PDIwKSk7CisgICAgICAgIHJldHVybiB4KnR3b201NDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9jbHJlcnIuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9jbHJlcnIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE2MWE2ZS4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vY2xyZXJyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIyljbHJlcnIuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAibGliY19wcml2YXRlLmgiCi0KLSN1bmRlZiBjbGVhcmVycgotI3VuZGVmIGNsZWFyZXJyX3VubG9ja2VkCi0KLXZvaWQKLWNsZWFyZXJyKEZJTEUgKmZwKQotewotCUZMT0NLRklMRShmcCk7Ci0JX19zY2xlYXJlcnIoZnApOwotCUZVTkxPQ0tGSUxFKGZwKTsKLX0KLQotdm9pZAotY2xlYXJlcnJfdW5sb2NrZWQoRklMRSAqZnApCi17Ci0KLQlfX3NjbGVhcmVycihmcCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmRvcGVuLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmRvcGVuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMTliOWYuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Zkb3Blbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZkb3Blbi5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSAibmFtZXNwYWNlLmgiCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAibG9jYWwuaCIKLQotRklMRSAqCi1mZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlKQotewotCUZJTEUgKmZwOwotCWludCBmbGFncywgb2ZsYWdzLCBmZGZsYWdzLCB0bXA7Ci0KLQkvKgotCSAqIEZpbGUgZGVzY3JpcHRvcnMgYXJlIGEgZnVsbCBpbnQsIGJ1dCBfZmlsZSBpcyBvbmx5IGEgc2hvcnQuCi0JICogSWYgd2UgZ2V0IGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yIHRoYXQgaXMgZ3JlYXRlciB0aGFuCi0JICogU0hSVF9NQVgsIHRoZW4gdGhlIGZkIHdpbGwgZ2V0IHNpZ24tZXh0ZW5kZWQgaW50byBhbgotCSAqIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yLiAgSGFuZGxlIHRoaXMgY2FzZSBieSBmYWlsaW5nIHRoZQotCSAqIG9wZW4uCi0JICovCi0JaWYgKGZkID4gU0hSVF9NQVgpIHsKLQkJZXJybm8gPSBFTUZJTEU7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCi0JaWYgKChmbGFncyA9IF9fc2ZsYWdzKG1vZGUsICZvZmxhZ3MpKSA9PSAwKQotCQlyZXR1cm4gKE5VTEwpOwotCi0JLyogTWFrZSBzdXJlIHRoZSBtb2RlIHRoZSB1c2VyIHdhbnRzIGlzIGEgc3Vic2V0IG9mIHRoZSBhY3R1YWwgbW9kZS4gKi8KLQlpZiAoKGZkZmxhZ3MgPSBfZmNudGwoZmQsIEZfR0VURkwsIDApKSA8IDApCi0JCXJldHVybiAoTlVMTCk7Ci0JdG1wID0gZmRmbGFncyAmIE9fQUNDTU9ERTsKLQlpZiAodG1wICE9IE9fUkRXUiAmJiAodG1wICE9IChvZmxhZ3MgJiBPX0FDQ01PREUpKSkgewotCQllcnJubyA9IEVJTlZBTDsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQlpZiAoKGZwID0gX19zZnAoKSkgPT0gTlVMTCkKLQkJcmV0dXJuIChOVUxMKTsKLQotCWlmICgob2ZsYWdzICYgT19DTE9FWEVDKSAmJiBfZmNudGwoZmQsIEZfU0VURkQsIEZEX0NMT0VYRUMpID09IC0xKSB7Ci0JCWZwLT5fZmxhZ3MgPSAwOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQotCWZwLT5fZmxhZ3MgPSBmbGFnczsKLQkvKgotCSAqIElmIG9wZW5lZCBmb3IgYXBwZW5kaW5nLCBidXQgdW5kZXJseWluZyBkZXNjcmlwdG9yIGRvZXMgbm90IGhhdmUKLQkgKiBPX0FQUEVORCBiaXQgc2V0LCBhc3NlcnQgX19TQVBQIHNvIHRoYXQgX19zd3JpdGUoKSBjYWxsZXIKLQkgKiB3aWxsIF9zc2VlaygpIHRvIHRoZSBlbmQgYmVmb3JlIHdyaXRlLgotCSAqLwotCWlmICgob2ZsYWdzICYgT19BUFBFTkQpICYmICEoZmRmbGFncyAmIE9fQVBQRU5EKSkKLQkJZnAtPl9mbGFncyB8PSBfX1NBUFA7Ci0JZnAtPl9maWxlID0gZmQ7Ci0JZnAtPl9jb29raWUgPSBmcDsKLQlmcC0+X3JlYWQgPSBfX3NyZWFkOwotCWZwLT5fd3JpdGUgPSBfX3N3cml0ZTsKLQlmcC0+X3NlZWsgPSBfX3NzZWVrOwotCWZwLT5fY2xvc2UgPSBfX3NjbG9zZTsKLQlyZXR1cm4gKGZwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZW9mLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmVvZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTcwMjQ4Li4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZW9mLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylmZW9mLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgotCi0jdW5kZWYgZmVvZgotI3VuZGVmIGZlb2ZfdW5sb2NrZWQKLQotaW50Ci1mZW9mKEZJTEUgKmZwKQotewotCWludAlyZXQ7Ci0KLQlGTE9DS0ZJTEUoZnApOwotCXJldD0gX19zZmVvZihmcCk7Ci0JRlVOTE9DS0ZJTEUoZnApOwotCXJldHVybiAocmV0KTsKLX0KLQotaW50Ci1mZW9mX3VubG9ja2VkKEZJTEUgKmZwKQotewotCi0JcmV0dXJuIChfX3NmZW9mKGZwKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmVycm9yLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmVycm9yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMGY4ZjkuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZlcnJvci5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZmVycm9yLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgotCi0jdW5kZWYgZmVycm9yCi0jdW5kZWYgZmVycm9yX3VubG9ja2VkCi0KLWludAotZmVycm9yKEZJTEUgKmZwKQotewotCWludAlyZXQ7Ci0KLQlGTE9DS0ZJTEUoZnApOwotCXJldCA9IF9fc2ZlcnJvcihmcCk7Ci0JRlVOTE9DS0ZJTEUoZnApOwotCXJldHVybiAocmV0KTsKLX0KLQotaW50Ci1mZXJyb3JfdW5sb2NrZWQoRklMRSAqZnApCi17Ci0KLQlyZXR1cm4gKF9fc2ZlcnJvcihmcCkpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRsbi5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRsbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzc5ZGUyLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZ2V0bG4uYworKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylmZ2V0bG4uYwk4LjIgKEJlcmtlbGV5KSAxLzIvOTQiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAibGliY19wcml2YXRlLmgiCi0jaW5jbHVkZSAibG9jYWwuaCIKLQotLyoKLSAqIEV4cGFuZCB0aGUgbGluZSBidWZmZXIuICBSZXR1cm4gLTEgb24gZXJyb3IuCi0jaWZkZWYgbm90ZGVmCi0gKiBUaGUgYG5ldyBzaXplJyBkb2VzIG5vdCBhY2NvdW50IGZvciBhIHRlcm1pbmF0aW5nICdcMCcsCi0gKiBzbyB3ZSBhZGQgMSBoZXJlLgotI2VuZGlmCi0gKi8KLWludAotX19zbGJleHBhbmQoRklMRSAqZnAsIHNpemVfdCBuZXdzaXplKQotewotCXZvaWQgKnA7Ci0KLSNpZmRlZiBub3RkZWYKLQkrK25ld3NpemU7Ci0jZW5kaWYKLQlpZiAoZnAtPl9sYi5fc2l6ZSA+PSBuZXdzaXplKQotCQlyZXR1cm4gKDApOwotCWlmICgocCA9IHJlYWxsb2MoZnAtPl9sYi5fYmFzZSwgbmV3c2l6ZSkpID09IE5VTEwpCi0JCXJldHVybiAoLTEpOwotCWZwLT5fbGIuX2Jhc2UgPSBwOwotCWZwLT5fbGIuX3NpemUgPSBuZXdzaXplOwotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBHZXQgYW4gaW5wdXQgbGluZS4gIFRoZSByZXR1cm5lZCBwb2ludGVyIG9mdGVuIChidXQgbm90IGFsd2F5cykKLSAqIHBvaW50cyBpbnRvIGEgc3RkaW8gYnVmZmVyLiAgRmdldGxuIGRvZXMgbm90IGFsdGVyIHRoZSB0ZXh0IG9mCi0gKiB0aGUgcmV0dXJuZWQgbGluZSAod2hpY2ggaXMgdGh1cyBub3QgYSBDIHN0cmluZyBiZWNhdXNlIGl0IHdpbGwKLSAqIG5vdCBuZWNlc3NhcmlseSBlbmQgd2l0aCAnXDAnKSwgYnV0IGRvZXMgYWxsb3cgY2FsbGVycyB0byBtb2RpZnkKLSAqIGl0IGlmIHRoZXkgd2lzaC4gIFRodXMsIHdlIHNldCBfX1NNT0QgaW4gY2FzZSB0aGUgY2FsbGVyIGRvZXMuCi0gKi8KLWNoYXIgKgotZmdldGxuKEZJTEUgKmZwLCBzaXplX3QgKmxlbnApCi17Ci0JdW5zaWduZWQgY2hhciAqcDsKLQlzaXplX3QgbGVuOwotCXNpemVfdCBvZmY7Ci0KLQlGTE9DS0ZJTEUoZnApOwotCU9SSUVOVChmcCwgLTEpOwotCS8qIG1ha2Ugc3VyZSB0aGVyZSBpcyBpbnB1dCAqLwotCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKSB7Ci0JCSpsZW5wID0gMDsKLQkJRlVOTE9DS0ZJTEUoZnApOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQotCS8qIGxvb2sgZm9yIGEgbmV3bGluZSBpbiB0aGUgaW5wdXQgKi8KLQlpZiAoKHAgPSBtZW1jaHIoKHZvaWQgKilmcC0+X3AsICdcbicsIChzaXplX3QpZnAtPl9yKSkgIT0gTlVMTCkgewotCQljaGFyICpyZXQ7Ci0KLQkJLyoKLQkJICogRm91bmQgb25lLiAgRmxhZyBidWZmZXIgYXMgbW9kaWZpZWQgdG8ga2VlcCBmc2VlayBmcm9tCi0JCSAqIGBvcHRpbWlzaW5nJyBhIGJhY2t3YXJkIHNlZWssIGluIGNhc2UgdGhlIHVzZXIgc3RvbXBzIG9uCi0JCSAqIHRoZSB0ZXh0LgotCQkgKi8KLQkJcCsrOwkJLyogYWR2YW5jZSBvdmVyIGl0ICovCi0JCXJldCA9IChjaGFyICopZnAtPl9wOwotCQkqbGVucCA9IGxlbiA9IHAgLSBmcC0+X3A7Ci0JCWZwLT5fZmxhZ3MgfD0gX19TTU9EOwotCQlmcC0+X3IgLT0gbGVuOwotCQlmcC0+X3AgPSBwOwotCQlGVU5MT0NLRklMRShmcCk7Ci0JCXJldHVybiAocmV0KTsKLQl9Ci0KLQkvKgotCSAqIFdlIGhhdmUgdG8gY29weSB0aGUgY3VycmVudCBidWZmZXJlZCBkYXRhIHRvIHRoZSBsaW5lIGJ1ZmZlci4KLQkgKiBBcyBhIGJvbnVzLCB0aG91Z2gsIHdlIGNhbiBsZWF2ZSBvZmYgdGhlIF9fU01PRC4KLQkgKgotCSAqIE9QVElNSVNUSUMgaXMgbGVuZ3RoIHRoYXQgd2UgKG9wdGltaXN0aWNhbGx5KSBleHBlY3Qgd2lsbAotCSAqIGFjY29tbW9kYXRlIHRoZSBgcmVzdCcgb2YgdGhlIHN0cmluZywgb24gZWFjaCB0cmlwIHRocm91Z2ggdGhlCi0JICogbG9vcCBiZWxvdy4KLQkgKi8KLSNkZWZpbmUgT1BUSU1JU1RJQyA4MAotCi0JZm9yIChsZW4gPSBmcC0+X3IsIG9mZiA9IDA7OyBsZW4gKz0gZnAtPl9yKSB7Ci0JCXNpemVfdCBkaWZmOwotCi0JCS8qCi0JCSAqIE1ha2Ugc3VyZSB0aGVyZSBpcyByb29tIGZvciBtb3JlIGJ5dGVzLiAgQ29weSBkYXRhIGZyb20KLQkJICogZmlsZSBidWZmZXIgdG8gbGluZSBidWZmZXIsIHJlZmlsbCBmaWxlIGFuZCBsb29rIGZvcgotCQkgKiBuZXdsaW5lLiAgVGhlIGxvb3Agc3RvcHMgb25seSB3aGVuIHdlIGZpbmQgYSBuZXdsaW5lLgotCQkgKi8KLQkJaWYgKF9fc2xiZXhwYW5kKGZwLCBsZW4gKyBPUFRJTUlTVElDKSkKLQkJCWdvdG8gZXJyb3I7Ci0JCSh2b2lkKW1lbWNweSgodm9pZCAqKShmcC0+X2xiLl9iYXNlICsgb2ZmKSwgKHZvaWQgKilmcC0+X3AsCi0JCSAgICBsZW4gLSBvZmYpOwotCQlvZmYgPSBsZW47Ci0JCWlmIChfX3NyZWZpbGwoZnApKQotCQkJYnJlYWs7CS8qIEVPRiBvciBlcnJvcjogcmV0dXJuIHBhcnRpYWwgbGluZSAqLwotCQlpZiAoKHAgPSBtZW1jaHIoKHZvaWQgKilmcC0+X3AsICdcbicsIChzaXplX3QpZnAtPl9yKSkgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIGdvdCBpdDogZmluaXNoIHVwIHRoZSBsaW5lIChsaWtlIGNvZGUgYWJvdmUpICovCi0JCXArKzsKLQkJZGlmZiA9IHAgLSBmcC0+X3A7Ci0JCWxlbiArPSBkaWZmOwotCQlpZiAoX19zbGJleHBhbmQoZnAsIGxlbikpCi0JCQlnb3RvIGVycm9yOwotCQkodm9pZCltZW1jcHkoKHZvaWQgKikoZnAtPl9sYi5fYmFzZSArIG9mZiksICh2b2lkICopZnAtPl9wLAotCQkgICAgZGlmZik7Ci0JCWZwLT5fciAtPSBkaWZmOwotCQlmcC0+X3AgPSBwOwotCQlicmVhazsKLQl9Ci0JKmxlbnAgPSBsZW47Ci0jaWZkZWYgbm90ZGVmCi0JZnAtPl9sYi5fYmFzZVtsZW5dID0gMDsKLSNlbmRpZgotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKChjaGFyICopZnAtPl9sYi5fYmFzZSk7Ci0KLWVycm9yOgotCSpsZW5wID0gMDsJCS8qID8/PyAqLwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKE5VTEwpOwkJLyogPz8/ICovCi19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmdldHBvcy5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRwb3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE2MWY0My4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmdldHBvcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZmdldHBvcy5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotaW50Ci1mZ2V0cG9zKEZJTEUgKiBfX3Jlc3RyaWN0IGZwLCBmcG9zX3QgKiBfX3Jlc3RyaWN0IHBvcykKLXsKLQkvKgotCSAqIGZ0ZWxsbyBpcyB0aHJlYWQtc2FmZTsgbm8gbmVlZCB0byBsb2NrIGZwLgotCSAqLwotCWlmICgoKnBvcyA9IGZ0ZWxsbyhmcCkpID09IChmcG9zX3QpLTEpCi0JCXJldHVybiAoLTEpOwotCWVsc2UKLQkJcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZ2V0cy5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYmY1NTkuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZmdldHMuYwk4LjIgKEJlcmtlbGV5KSAxMi8yMi85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSAibmFtZXNwYWNlLmgiCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKLSNpbmNsdWRlICJsb2NhbC5oIgotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgotCi0vKgotICogUmVhZCBhdCBtb3N0IG4tMSBjaGFyYWN0ZXJzIGZyb20gdGhlIGdpdmVuIGZpbGUuCi0gKiBTdG9wIHdoZW4gYSBuZXdsaW5lIGhhcyBiZWVuIHJlYWQsIG9yIHRoZSBjb3VudCBydW5zIG91dC4KLSAqIFJldHVybiBmaXJzdCBhcmd1bWVudCwgb3IgTlVMTCBpZiBubyBjaGFyYWN0ZXJzIHdlcmUgcmVhZC4KLSAqLwotY2hhciAqCi1mZ2V0cyhjaGFyICogX19yZXN0cmljdCBidWYsIGludCBuLCBGSUxFICogX19yZXN0cmljdCBmcCkKLXsKLQlzaXplX3QgbGVuOwotCWNoYXIgKnM7Ci0JdW5zaWduZWQgY2hhciAqcCwgKnQ7Ci0KLQlpZiAobiA8PSAwKQkJLyogc2FuaXR5IGNoZWNrICovCi0JCXJldHVybiAoTlVMTCk7Ci0KLQlGTE9DS0ZJTEUoZnApOwotCU9SSUVOVChmcCwgLTEpOwotCXMgPSBidWY7Ci0Jbi0tOwkJCS8qIGxlYXZlIHNwYWNlIGZvciBOVUwgKi8KLQl3aGlsZSAobiAhPSAwKSB7Ci0JCS8qCi0JCSAqIElmIHRoZSBidWZmZXIgaXMgZW1wdHksIHJlZmlsbCBpdC4KLQkJICovCi0JCWlmICgobGVuID0gZnAtPl9yKSA8PSAwKSB7Ci0JCQlpZiAoX19zcmVmaWxsKGZwKSkgewotCQkJCS8qIEVPRi9lcnJvcjogc3RvcCB3aXRoIHBhcnRpYWwgb3Igbm8gbGluZSAqLwotCQkJCWlmIChzID09IGJ1ZikgewotCQkJCQlGVU5MT0NLRklMRShmcCk7Ci0JCQkJCXJldHVybiAoTlVMTCk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCQkJbGVuID0gZnAtPl9yOwotCQl9Ci0JCXAgPSBmcC0+X3A7Ci0KLQkJLyoKLQkJICogU2NhbiB0aHJvdWdoIGF0IG1vc3QgbiBieXRlcyBvZiB0aGUgY3VycmVudCBidWZmZXIsCi0JCSAqIGxvb2tpbmcgZm9yICdcbicuICBJZiBmb3VuZCwgY29weSB1cCB0byBhbmQgaW5jbHVkaW5nCi0JCSAqIG5ld2xpbmUsIGFuZCBzdG9wLiAgT3RoZXJ3aXNlLCBjb3B5IGVudGlyZSBjaHVuawotCQkgKiBhbmQgbG9vcC4KLQkJICovCi0JCWlmIChsZW4gPiBuKQotCQkJbGVuID0gbjsKLQkJdCA9IG1lbWNocigodm9pZCAqKXAsICdcbicsIGxlbik7Ci0JCWlmICh0ICE9IE5VTEwpIHsKLQkJCWxlbiA9ICsrdCAtIHA7Ci0JCQlmcC0+X3IgLT0gbGVuOwotCQkJZnAtPl9wID0gdDsKLQkJCSh2b2lkKW1lbWNweSgodm9pZCAqKXMsICh2b2lkICopcCwgbGVuKTsKLQkJCXNbbGVuXSA9IDA7Ci0JCQlGVU5MT0NLRklMRShmcCk7Ci0JCQlyZXR1cm4gKGJ1Zik7Ci0JCX0KLQkJZnAtPl9yIC09IGxlbjsKLQkJZnAtPl9wICs9IGxlbjsKLQkJKHZvaWQpbWVtY3B5KCh2b2lkICopcywgKHZvaWQgKilwLCBsZW4pOwotCQlzICs9IGxlbjsKLQkJbiAtPSBsZW47Ci0JfQotCSpzID0gMDsKLQlGVU5MT0NLRklMRShmcCk7Ci0JcmV0dXJuIChidWYpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZpbGVuby5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZpbGVuby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWMxODMwLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9maWxlbm8uYworKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZpbGVuby5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSAibmFtZXNwYWNlLmgiCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKLSNpbmNsdWRlICJsaWJjX3ByaXZhdGUuaCIKLQotI3VuZGVmIGZpbGVubwotI3VuZGVmIGZpbGVub191bmxvY2tlZAotCi1pbnQKLWZpbGVubyhGSUxFICpmcCkKLXsKLQlpbnQgZmQ7Ci0KLQlGTE9DS0ZJTEUoZnApOwotCWZkID0gX19zZmlsZW5vKGZwKTsKLQlGVU5MT0NLRklMRShmcCk7Ci0KLQlyZXR1cm4gKGZkKTsKLX0KLQotaW50Ci1maWxlbm9fdW5sb2NrZWQoRklMRSAqZnApCi17Ci0KLQlyZXR1cm4gKF9fc2ZpbGVubyhmcCkpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXJnZS5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXJnZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjA1YmRmLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mcHVyZ2UuYworKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZwdXJnZS5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSAibmFtZXNwYWNlLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgotI2luY2x1ZGUgImxvY2FsLmgiCi0jaW5jbHVkZSAibGliY19wcml2YXRlLmgiCi0KLS8qCi0gKiBmcHVyZ2U6IGxpa2UgZmZsdXNoLCBidXQgd2l0aG91dCB3cml0aW5nIGFueXRoaW5nOiBsZWF2ZSB0aGUKLSAqIGdpdmVuIEZJTEUncyBidWZmZXIgZW1wdHkuCi0gKi8KLWludAotZnB1cmdlKEZJTEUgKmZwKQotewotCWludCByZXR2YWw7Ci0JRkxPQ0tGSUxFKGZwKTsKLQlpZiAoIWZwLT5fZmxhZ3MpIHsKLQkJZXJybm8gPSBFQkFERjsKLQkJcmV0dmFsID0gRU9GOwotCX0gZWxzZSB7Ci0JCWlmIChIQVNVQihmcCkpCi0JCQlGUkVFVUIoZnApOwotCQlmcC0+X3AgPSBmcC0+X2JmLl9iYXNlOwotCQlmcC0+X3IgPSAwOwotCQlmcC0+X3cgPSBmcC0+X2ZsYWdzICYgKF9fU0xCRnxfX1NOQkZ8X19TUkQpID8gMCA6IGZwLT5fYmYuX3NpemU7Ci0JCXJldHZhbCA9IDA7Ci0JfQotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKHJldHZhbCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZnB1dHMuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mcHV0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjhmMmM5Li4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mcHV0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZnB1dHMuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAiZnZ3cml0ZS5oIgotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLS8qCi0gKiBXcml0ZSB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBnaXZlbiBmaWxlLgotICovCi1pbnQKLWZwdXRzKGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IHMsIEZJTEUgKiBfX3Jlc3RyaWN0IGZwKQotewotCWludCByZXR2YWw7Ci0Jc3RydWN0IF9fc3VpbyB1aW87Ci0Jc3RydWN0IF9fc2lvdiBpb3Y7Ci0KLQlpb3YuaW92X2Jhc2UgPSAodm9pZCAqKXM7Ci0JaW92Lmlvdl9sZW4gPSB1aW8udWlvX3Jlc2lkID0gc3RybGVuKHMpOwotCXVpby51aW9faW92ID0gJmlvdjsKLQl1aW8udWlvX2lvdmNudCA9IDE7Ci0JRkxPQ0tGSUxFKGZwKTsKLQlPUklFTlQoZnAsIC0xKTsKLQlyZXR2YWwgPSBfX3NmdndyaXRlKGZwLCAmdWlvKTsKLQlGVU5MT0NLRklMRShmcCk7Ci0JcmV0dXJuIChyZXR2YWwpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZzZXRwb3MuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mc2V0cG9zLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YjhiNzguLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZzZXRwb3MuYworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZzZXRwb3MuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLS8qCi0gKiBmc2V0cG9zOiBsaWtlIGZzZWVrLgotICovCi1pbnQKLWZzZXRwb3MoRklMRSAqaW9wLCBjb25zdCBmcG9zX3QgKnBvcykKLXsKLQlyZXR1cm4gKGZzZWVrbyhpb3AsIChvZmZfdCkqcG9zLCBTRUVLX1NFVCkpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Z1bm9wZW4uYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mdW5vcGVuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4M2ZlNTAuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Z1bm9wZW4uYworKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZ1bm9wZW4uYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2luY2x1ZGUgImxvY2FsLmgiCi0KLUZJTEUgKgotZnVub3Blbihjb25zdCB2b2lkICpjb29raWUsCi0JaW50ICgqcmVhZGZuKSh2b2lkICosIGNoYXIgKiwgaW50KSwKLQlpbnQgKCp3cml0ZWZuKSh2b2lkICosIGNvbnN0IGNoYXIgKiwgaW50KSwKLQlmcG9zX3QgKCpzZWVrZm4pKHZvaWQgKiwgZnBvc190LCBpbnQpLAotCWludCAoKmNsb3NlZm4pKHZvaWQgKikpCi17Ci0JRklMRSAqZnA7Ci0JaW50IGZsYWdzOwotCi0JaWYgKHJlYWRmbiA9PSBOVUxMKSB7Ci0JCWlmICh3cml0ZWZuID09IE5VTEwpIHsJCS8qIGlsbGVnYWwgKi8KLQkJCWVycm5vID0gRUlOVkFMOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfSBlbHNlCi0JCQlmbGFncyA9IF9fU1dSOwkJLyogd3JpdGUgb25seSAqLwotCX0gZWxzZSB7Ci0JCWlmICh3cml0ZWZuID09IE5VTEwpCi0JCQlmbGFncyA9IF9fU1JEOwkJLyogcmVhZCBvbmx5ICovCi0JCWVsc2UKLQkJCWZsYWdzID0gX19TUlc7CQkvKiByZWFkLXdyaXRlICovCi0JfQotCWlmICgoZnAgPSBfX3NmcCgpKSA9PSBOVUxMKQotCQlyZXR1cm4gKE5VTEwpOwotCWZwLT5fZmxhZ3MgPSBmbGFnczsKLQlmcC0+X2ZpbGUgPSAtMTsKLQlmcC0+X2Nvb2tpZSA9ICh2b2lkICopY29va2llOwotCWZwLT5fcmVhZCA9IHJlYWRmbjsKLQlmcC0+X3dyaXRlID0gd3JpdGVmbjsKLQlmcC0+X3NlZWsgPSBzZWVrZm47Ci0JZnAtPl9jbG9zZSA9IGNsb3NlZm47Ci0JcmV0dXJuIChmcCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZndhbGsuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9md2Fsay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTE4MzdiLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9md2Fsay5jCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZndhbGsuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLSNpbmNsdWRlICJnbHVlLmgiCi0KLWludAotX2Z3YWxrKGludCAoKmZ1bmN0aW9uKShGSUxFICopKQotewotCUZJTEUgKmZwOwotCWludCBuLCByZXQ7Ci0Jc3RydWN0IGdsdWUgKmc7Ci0KLQlyZXQgPSAwOwotCS8qCi0JICogSXQgc2hvdWxkIGJlIHNhZmUgdG8gd2FsayB0aGUgbGlzdCB3aXRob3V0IGxvY2tpbmcgaXQ7Ci0JICogbmV3IG5vZGVzIGFyZSBvbmx5IGFkZGVkIHRvIHRoZSBlbmQgYW5kIG5vbmUgYXJlIGV2ZXIKLQkgKiByZW1vdmVkLgotCSAqCi0JICogQXZvaWQgbG9ja2luZyB0aGlzIGxpc3Qgd2hpbGUgd2Fsa2luZyBpdCBvciBlbHNlIHlvdSB3aWxsCi0JICogaW50cm9kdWNlIGEgcG90ZW50aWFsIGRlYWRsb2NrIGluIFthdCBsZWFzdF0gcmVmaWxsLmMuCi0JICovCi0JZm9yIChnID0gJl9fc2dsdWU7IGcgIT0gTlVMTDsgZyA9IGctPm5leHQpCi0JCWZvciAoZnAgPSBnLT5pb2JzLCBuID0gZy0+bmlvYnM7IC0tbiA+PSAwOyBmcCsrKQotCQkJaWYgKChmcC0+X2ZsYWdzICE9IDApICYmICgoZnAtPl9mbGFncyAmIF9fU0lHTikgPT0gMCkpCi0JCQkJcmV0IHw9ICgqZnVuY3Rpb24pKGZwKTsKLQlyZXR1cm4gKHJldCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZndyaXRlLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZndyaXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwN2QzNjIuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Z3cml0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZndyaXRlLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAibG9jYWwuaCIKLSNpbmNsdWRlICJmdndyaXRlLmgiCi0jaW5jbHVkZSAibGliY19wcml2YXRlLmgiCi0KLS8qCi0gKiBXcml0ZSBgY291bnQnIG9iamVjdHMgKGVhY2ggc2l6ZSBgc2l6ZScpIGZyb20gbWVtb3J5IHRvIHRoZSBnaXZlbiBmaWxlLgotICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2hvbGUgb2JqZWN0cyB3cml0dGVuLgotICovCi1zaXplX3QKLWZ3cml0ZShjb25zdCB2b2lkICogX19yZXN0cmljdCBidWYsIHNpemVfdCBzaXplLCBzaXplX3QgY291bnQsIEZJTEUgKiBfX3Jlc3RyaWN0IGZwKQotewotCXNpemVfdCBuOwotCXN0cnVjdCBfX3N1aW8gdWlvOwotCXN0cnVjdCBfX3Npb3YgaW92OwotCi0JLyoKLQkgKiBBTlNJIGFuZCBTVVN2MiByZXF1aXJlIGEgcmV0dXJuIHZhbHVlIG9mIDAgaWYgc2l6ZSBvciBjb3VudCBhcmUgMC4KLQkgKi8KLQlpZiAoKGNvdW50ID09IDApIHx8IChzaXplID09IDApKQotCQlyZXR1cm4gKDApOwotCi0JLyoKLQkgKiBDaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdy4gIEFzIGFuIG9wdGltaXphdGlvbiwgZmlyc3QgY2hlY2sgdGhhdAotCSAqIGF0IGxlYXN0IG9uZSBvZiB7Y291bnQsIHNpemV9IGlzIGF0IGxlYXN0IDJeMTYsIHNpbmNlIGlmIGJvdGgKLQkgKiB2YWx1ZXMgYXJlIGxlc3MgdGhhbiB0aGF0LCB0aGVpciBwcm9kdWN0IGNhbid0IHBvc3NpYmxlIG92ZXJmbG93Ci0JICogKHNpemVfdCBpcyBhbHdheXMgYXQgbGVhc3QgMzIgYml0cyBvbiBGcmVlQlNEKS4KLQkgKi8KLQlpZiAoKChjb3VudCB8IHNpemUpID4gMHhGRkZGKSAmJgotCSAgICAoY291bnQgPiBTSVpFX01BWCAvIHNpemUpKSB7Ci0JCWVycm5vID0gRUlOVkFMOwotCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKLQkJcmV0dXJuICgwKTsKLQl9Ci0KLQluID0gY291bnQgKiBzaXplOwotCi0JaW92Lmlvdl9iYXNlID0gKHZvaWQgKilidWY7Ci0JdWlvLnVpb19yZXNpZCA9IGlvdi5pb3ZfbGVuID0gbjsKLQl1aW8udWlvX2lvdiA9ICZpb3Y7Ci0JdWlvLnVpb19pb3ZjbnQgPSAxOwotCi0JRkxPQ0tGSUxFKGZwKTsKLQlPUklFTlQoZnAsIC0xKTsKLQkvKgotCSAqIFRoZSB1c3VhbCBjYXNlIGlzIHN1Y2Nlc3MgKF9fc2Z2d3JpdGUgcmV0dXJucyAwKTsKLQkgKiBza2lwIHRoZSBkaXZpZGUgaWYgdGhpcyBoYXBwZW5zLCBzaW5jZSBkaXZpZGVzIGFyZQotCSAqIGdlbmVyYWxseSBzbG93IGFuZCBzaW5jZSB0aGlzIG9jY3VycyB3aGVuZXZlciBzaXplPT0wLgotCSAqLwotCWlmIChfX3NmdndyaXRlKGZwLCAmdWlvKSAhPSAwKQotCSAgICBjb3VudCA9IChuIC0gdWlvLnVpb19yZXNpZCkgLyBzaXplOwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKGNvdW50KTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9nZXRjLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZ2V0Yy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTYzYzhjLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9nZXRjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylnZXRjLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLSN1bmRlZiBnZXRjCi0jdW5kZWYgZ2V0Y191bmxvY2tlZAotCi1pbnQKLWdldGMoRklMRSAqZnApCi17Ci0JaW50IHJldHZhbDsKLQlGTE9DS0ZJTEUoZnApOwotCS8qIE9yaWVudGF0aW9uIHNldCBieSBfX3NnZXRjKCkgd2hlbiBidWZmZXIgaXMgZW1wdHkuICovCi0JLyogT1JJRU5UKGZwLCAtMSk7ICovCi0JcmV0dmFsID0gX19zZ2V0YyhmcCk7Ci0JRlVOTE9DS0ZJTEUoZnApOwotCXJldHVybiAocmV0dmFsKTsKLX0KLQotaW50Ci1nZXRjX3VubG9ja2VkKEZJTEUgKmZwKQotewotCi0JcmV0dXJuIChfX3NnZXRjKGZwKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZ2V0Y2hhci5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2dldGNoYXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEwNDBiYy4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZ2V0Y2hhci5jCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZ2V0Y2hhci5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0vKgotICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIGdldGNoYXIuCi0gKi8KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgotI2luY2x1ZGUgImxvY2FsLmgiCi0jaW5jbHVkZSAibGliY19wcml2YXRlLmgiCi0KLSN1bmRlZiBnZXRjaGFyCi0jdW5kZWYgZ2V0Y2hhcl91bmxvY2tlZAotCi1pbnQKLWdldGNoYXIoKQotewotCWludCByZXR2YWw7Ci0JRkxPQ0tGSUxFKHN0ZGluKTsKLQkvKiBPcmllbnRhdGlvbiBzZXQgYnkgX19zZ2V0YygpIHdoZW4gYnVmZmVyIGlzIGVtcHR5LiAqLwotCS8qIE9SSUVOVChzdGRpbiwgLTEpOyAqLwotCXJldHZhbCA9IF9fc2dldGMoc3RkaW4pOwotCUZVTkxPQ0tGSUxFKHN0ZGluKTsKLQlyZXR1cm4gKHJldHZhbCk7Ci19Ci0KLWludAotZ2V0Y2hhcl91bmxvY2tlZCh2b2lkKQotewotCi0JcmV0dXJuIChfX3NnZXRjKHN0ZGluKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vbWFrZWJ1Zi5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL21ha2VidWYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkyMDg3ZS4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vbWFrZWJ1Zi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKW1ha2VidWYuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKLQotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLS8qCi0gKiBBbGxvY2F0ZSBhIGZpbGUgYnVmZmVyLCBvciBzd2l0Y2ggdG8gdW5idWZmZXJlZCBJL08uCi0gKiBQZXIgdGhlIEFOU0kgQyBzdGFuZGFyZCwgQUxMIHR0eSBkZXZpY2VzIGRlZmF1bHQgdG8gbGluZSBidWZmZXJlZC4KLSAqCi0gKiBBcyBhIHNpZGUgZWZmZWN0LCB3ZSBzZXQgX19TT1BUIG9yIF9fU05QVCAoZW4vZGlzLWFibGUgZnNlZWsKLSAqIG9wdGltaXNhdGlvbikgcmlnaHQgYWZ0ZXIgdGhlIF9mc3RhdCgpIHRoYXQgZmluZHMgdGhlIGJ1ZmZlciBzaXplLgotICovCi12b2lkCi1fX3NtYWtlYnVmKEZJTEUgKmZwKQotewotCXZvaWQgKnA7Ci0JaW50IGZsYWdzOwotCXNpemVfdCBzaXplOwotCWludCBjb3VsZGJldHR5OwotCi0JaWYgKGZwLT5fZmxhZ3MgJiBfX1NOQkYpIHsKLQkJZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9IGZwLT5fbmJ1ZjsKLQkJZnAtPl9iZi5fc2l6ZSA9IDE7Ci0JCXJldHVybjsKLQl9Ci0JZmxhZ3MgPSBfX3N3aGF0YnVmKGZwLCAmc2l6ZSwgJmNvdWxkYmV0dHkpOwotCWlmICgocCA9IG1hbGxvYyhzaXplKSkgPT0gTlVMTCkgewotCQlmcC0+X2ZsYWdzIHw9IF9fU05CRjsKLQkJZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9IGZwLT5fbmJ1ZjsKLQkJZnAtPl9iZi5fc2l6ZSA9IDE7Ci0JCXJldHVybjsKLQl9Ci0JX19jbGVhbnVwID0gX2NsZWFudXA7Ci0JZmxhZ3MgfD0gX19TTUJGOwotCWZwLT5fYmYuX2Jhc2UgPSBmcC0+X3AgPSBwOwotCWZwLT5fYmYuX3NpemUgPSBzaXplOwotCWlmIChjb3VsZGJldHR5ICYmIGlzYXR0eShmcC0+X2ZpbGUpKQotCQlmbGFncyB8PSBfX1NMQkY7Ci0JZnAtPl9mbGFncyB8PSBmbGFnczsKLX0KLQotLyoKLSAqIEludGVybmFsIHJvdXRpbmUgdG8gZGV0ZXJtaW5lIGBwcm9wZXInIGJ1ZmZlcmluZyBmb3IgYSBmaWxlLgotICovCi1pbnQKLV9fc3doYXRidWYoRklMRSAqZnAsIHNpemVfdCAqYnVmc2l6ZSwgaW50ICpjb3VsZGJldHR5KQotewotCXN0cnVjdCBzdGF0IHN0OwotCi0JaWYgKGZwLT5fZmlsZSA8IDAgfHwgX2ZzdGF0KGZwLT5fZmlsZSwgJnN0KSA8IDApIHsKLQkJKmNvdWxkYmV0dHkgPSAwOwotCQkqYnVmc2l6ZSA9IEJVRlNJWjsKLQkJcmV0dXJuIChfX1NOUFQpOwotCX0KLQotCS8qIGNvdWxkIGJlIGEgdHR5IGlmZiBpdCBpcyBhIGNoYXJhY3RlciBkZXZpY2UgKi8KLQkqY291bGRiZXR0eSA9IChzdC5zdF9tb2RlICYgU19JRk1UKSA9PSBTX0lGQ0hSOwotCWlmIChzdC5zdF9ibGtzaXplIDw9IDApIHsKLQkJKmJ1ZnNpemUgPSBCVUZTSVo7Ci0JCXJldHVybiAoX19TTlBUKTsKLQl9Ci0KLQkvKgotCSAqIE9wdGltaXNlIGZzZWVrKCkgb25seSBpZiBpdCBpcyBhIHJlZ3VsYXIgZmlsZS4gIChUaGUgdGVzdCBmb3IKLQkgKiBfX3NzZWVrIGlzIG1haW5seSBwYXJhbm9pYS4pICBJdCBpcyBzYWZlIHRvIHNldCBfYmxrc2l6ZQotCSAqIHVuY29uZGl0aW9uYWxseTsgaXQgd2lsbCBvbmx5IGJlIHVzZWQgaWYgX19TT1BUIGlzIGFsc28gc2V0LgotCSAqLwotCSpidWZzaXplID0gc3Quc3RfYmxrc2l6ZTsKLQlmcC0+X2Jsa3NpemUgPSBzdC5zdF9ibGtzaXplOwotCXJldHVybiAoKHN0LnN0X21vZGUgJiBTX0lGTVQpID09IFNfSUZSRUcgJiYgZnAtPl9zZWVrID09IF9fc3NlZWsgPwotCSAgICBfX1NPUFQgOiBfX1NOUFQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL21rdGVtcC5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL21rdGVtcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODc4M2RkLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9ta3RlbXAuYworKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg3LCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKW1rdGVtcC5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSAibmFtZXNwYWNlLmgiCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgotCi1jaGFyICpfbWt0ZW1wKGNoYXIgKik7Ci0KLXN0YXRpYyBpbnQgX2dldHRlbXAoY2hhciAqLCBpbnQgKiwgaW50LCBpbnQpOwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwYWRjaGFyW10gPQotIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKLQotaW50Ci1ta3N0ZW1wcyhjaGFyICpwYXRoLCBpbnQgc2xlbikKLXsKLQlpbnQgZmQ7Ci0KLQlyZXR1cm4gKF9nZXR0ZW1wKHBhdGgsICZmZCwgMCwgc2xlbikgPyBmZCA6IC0xKTsKLX0KLQotaW50Ci1ta3N0ZW1wKGNoYXIgKnBhdGgpCi17Ci0JaW50IGZkOwotCi0JcmV0dXJuIChfZ2V0dGVtcChwYXRoLCAmZmQsIDAsIDApID8gZmQgOiAtMSk7Ci19Ci0KLWNoYXIgKgotbWtkdGVtcChjaGFyICpwYXRoKQotewotCXJldHVybiAoX2dldHRlbXAocGF0aCwgKGludCAqKU5VTEwsIDEsIDApID8gcGF0aCA6IChjaGFyICopTlVMTCk7Ci19Ci0KLWNoYXIgKgotX21rdGVtcChjaGFyICpwYXRoKQotewotCXJldHVybiAoX2dldHRlbXAocGF0aCwgKGludCAqKU5VTEwsIDAsIDApID8gcGF0aCA6IChjaGFyICopTlVMTCk7Ci19Ci0KLV9fd2Fybl9yZWZlcmVuY2VzKG1rdGVtcCwKLSAgICAid2FybmluZzogbWt0ZW1wKCkgcG9zc2libHkgdXNlZCB1bnNhZmVseTsgY29uc2lkZXIgdXNpbmcgbWtzdGVtcCgpIik7Ci0KLWNoYXIgKgotbWt0ZW1wKGNoYXIgKnBhdGgpCi17Ci0JcmV0dXJuIChfbWt0ZW1wKHBhdGgpKTsKLX0KLQotc3RhdGljIGludAotX2dldHRlbXAoY2hhciAqcGF0aCwgaW50ICpkb29wZW4sIGludCBkb21rZGlyLCBpbnQgc2xlbikKLXsKLQljaGFyICpzdGFydCwgKnRydiwgKnN1ZmZwLCAqY2FycnlwOwotCWNoYXIgKnBhZDsKLQlzdHJ1Y3Qgc3RhdCBzYnVmOwotCWludCBydmFsOwotCXVpbnQzMl90IHJhbmQ7Ci0JY2hhciBjYXJyeWJ1ZltNQVhQQVRITEVOXTsKLQotCWlmICgoZG9vcGVuICE9IE5VTEwgJiYgZG9ta2RpcikgfHwgc2xlbiA8IDApIHsKLQkJZXJybm8gPSBFSU5WQUw7Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0JZm9yICh0cnYgPSBwYXRoOyAqdHJ2ICE9ICdcMCc7ICsrdHJ2KQotCQk7Ci0JaWYgKHRydiAtIHBhdGggPj0gTUFYUEFUSExFTikgewotCQllcnJubyA9IEVOQU1FVE9PTE9ORzsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JdHJ2IC09IHNsZW47Ci0Jc3VmZnAgPSB0cnY7Ci0JLS10cnY7Ci0JaWYgKHRydiA8IHBhdGggfHwgTlVMTCAhPSBzdHJjaHIoc3VmZnAsICcvJykpIHsKLQkJZXJybm8gPSBFSU5WQUw7Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0JLyogRmlsbCBzcGFjZSB3aXRoIHJhbmRvbSBjaGFyYWN0ZXJzICovCi0Jd2hpbGUgKHRydiA+PSBwYXRoICYmICp0cnYgPT0gJ1gnKSB7Ci0JCXJhbmQgPSBhcmM0cmFuZG9tX3VuaWZvcm0oc2l6ZW9mKHBhZGNoYXIpIC0gMSk7Ci0JCSp0cnYtLSA9IHBhZGNoYXJbcmFuZF07Ci0JfQotCXN0YXJ0ID0gdHJ2ICsgMTsKLQotCS8qIHNhdmUgZmlyc3QgY29tYmluYXRpb24gb2YgcmFuZG9tIGNoYXJhY3RlcnMgKi8KLQltZW1jcHkoY2FycnlidWYsIHN0YXJ0LCBzdWZmcCAtIHN0YXJ0KTsKLQotCS8qCi0JICogY2hlY2sgdGhlIHRhcmdldCBkaXJlY3RvcnkuCi0JICovCi0JaWYgKGRvb3BlbiAhPSBOVUxMIHx8IGRvbWtkaXIpIHsKLQkJZm9yICg7IHRydiA+IHBhdGg7IC0tdHJ2KSB7Ci0JCQlpZiAoKnRydiA9PSAnLycpIHsKLQkJCQkqdHJ2ID0gJ1wwJzsKLQkJCQlydmFsID0gc3RhdChwYXRoLCAmc2J1Zik7Ci0JCQkJKnRydiA9ICcvJzsKLQkJCQlpZiAocnZhbCAhPSAwKQotCQkJCQlyZXR1cm4gKDApOwotCQkJCWlmICghU19JU0RJUihzYnVmLnN0X21vZGUpKSB7Ci0JCQkJCWVycm5vID0gRU5PVERJUjsKLQkJCQkJcmV0dXJuICgwKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlmb3IgKDs7KSB7Ci0JCWlmIChkb29wZW4pIHsKLQkJCWlmICgoKmRvb3BlbiA9Ci0JCQkgICAgX29wZW4ocGF0aCwgT19DUkVBVHxPX0VYQ0x8T19SRFdSLCAwNjAwKSkgPj0gMCkKLQkJCQlyZXR1cm4gKDEpOwotCQkJaWYgKGVycm5vICE9IEVFWElTVCkKLQkJCQlyZXR1cm4gKDApOwotCQl9IGVsc2UgaWYgKGRvbWtkaXIpIHsKLQkJCWlmIChta2RpcihwYXRoLCAwNzAwKSA9PSAwKQotCQkJCXJldHVybiAoMSk7Ci0JCQlpZiAoZXJybm8gIT0gRUVYSVNUKQotCQkJCXJldHVybiAoMCk7Ci0JCX0gZWxzZSBpZiAobHN0YXQocGF0aCwgJnNidWYpKQotCQkJcmV0dXJuIChlcnJubyA9PSBFTk9FTlQpOwotCi0JCS8qIElmIHdlIGhhdmUgYSBjb2xsaXNpb24sIGN5Y2xlIHRocm91Z2ggdGhlIHNwYWNlIG9mIGZpbGVuYW1lcyAqLwotCQlmb3IgKHRydiA9IHN0YXJ0LCBjYXJyeXAgPSBjYXJyeWJ1Zjs7KSB7Ci0JCQkvKiBoYXZlIHdlIHRyaWVkIGFsbCBwb3NzaWJsZSBwZXJtdXRhdGlvbnM/ICovCi0JCQlpZiAodHJ2ID09IHN1ZmZwKQotCQkJCXJldHVybiAoMCk7IC8qIHllcyAtIGV4aXQgd2l0aCBFRVhJU1QgKi8KLQkJCXBhZCA9IHN0cmNocihwYWRjaGFyLCAqdHJ2KTsKLQkJCWlmIChwYWQgPT0gTlVMTCkgewotCQkJCS8qIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCQkJCWVycm5vID0gRUlPOwotCQkJCXJldHVybiAoMCk7Ci0JCQl9Ci0JCQkvKiBpbmNyZW1lbnQgY2hhcmFjdGVyICovCi0JCQkqdHJ2ID0gKCorK3BhZCA9PSAnXDAnKSA/IHBhZGNoYXJbMF0gOiAqcGFkOwotCQkJLyogY2FycnkgdG8gbmV4dCBwb3NpdGlvbj8gKi8KLQkJCWlmICgqdHJ2ID09ICpjYXJyeXApIHsKLQkJCQkvKiBpbmNyZW1lbnQgcG9zaXRpb24gYW5kIGxvb3AgKi8KLQkJCQkrK3RydjsKLQkJCQkrK2NhcnJ5cDsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogdHJ5IHdpdGggbmV3IG5hbWUgKi8KLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQkvKk5PVFJFQUNIRUQqLwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dGMuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXRjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZmZlY2UuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dGMuYworKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXB1dGMuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAibG9jYWwuaCIKLSNpbmNsdWRlICJsaWJjX3ByaXZhdGUuaCIKLQotI3VuZGVmIHB1dGMKLSN1bmRlZiBwdXRjX3VubG9ja2VkCi0KLWludAotcHV0YyhpbnQgYywgRklMRSAqZnApCi17Ci0JaW50IHJldHZhbDsKLQlGTE9DS0ZJTEUoZnApOwotCS8qIE9yaWVudGF0aW9uIHNldCBieSBfX3NwdXRjKCkgd2hlbiBidWZmZXIgaXMgZnVsbC4gKi8KLQkvKiBPUklFTlQoZnAsIC0xKTsgKi8KLQlyZXR2YWwgPSBfX3NwdXRjKGMsIGZwKTsKLQlGVU5MT0NLRklMRShmcCk7Ci0JcmV0dXJuIChyZXR2YWwpOwotfQotCi1pbnQKLXB1dGNfdW5sb2NrZWQoaW50IGNoLCBGSUxFICpmcCkKLXsKLQotCXJldHVybiAoX19zcHV0YyhjaCwgZnApKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXRjaGFyLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcHV0Y2hhci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTYxNTU5Li4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXRjaGFyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylwdXRjaGFyLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgotI2luY2x1ZGUgImxvY2FsLmgiCi0jaW5jbHVkZSAibGliY19wcml2YXRlLmgiCi0KLSN1bmRlZiBwdXRjaGFyCi0jdW5kZWYgcHV0Y2hhcl91bmxvY2tlZAotCi0vKgotICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIHB1dGNoYXIKLSAqLwotaW50Ci1wdXRjaGFyKGludCBjKQotewotCWludCByZXR2YWw7Ci0JRklMRSAqc28gPSBzdGRvdXQ7Ci0KLQlGTE9DS0ZJTEUoc28pOwotCS8qIE9yaWVudGF0aW9uIHNldCBieSBfX3NwdXRjKCkgd2hlbiBidWZmZXIgaXMgZnVsbC4gKi8KLQkvKiBPUklFTlQoc28sIC0xKTsgKi8KLQlyZXR2YWwgPSBfX3NwdXRjKGMsIHNvKTsKLQlGVU5MT0NLRklMRShzbyk7Ci0JcmV0dXJuIChyZXR2YWwpOwotfQotCi1pbnQKLXB1dGNoYXJfdW5sb2NrZWQoaW50IGNoKQotewotCi0JcmV0dXJuIChfX3NwdXRjKGNoLCBzdGRvdXQpKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXRzLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcHV0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWU3ZmMxLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylwdXRzLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgotI2luY2x1ZGUgImZ2d3JpdGUuaCIKLSNpbmNsdWRlICJsaWJjX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJsb2NhbC5oIgotCi0vKgotICogV3JpdGUgdGhlIGdpdmVuIHN0cmluZyB0byBzdGRvdXQsIGFwcGVuZGluZyBhIG5ld2xpbmUuCi0gKi8KLWludAotcHV0cyhjaGFyIGNvbnN0ICpzKQotewotCWludCByZXR2YWw7Ci0Jc2l6ZV90IGMgPSBzdHJsZW4ocyk7Ci0Jc3RydWN0IF9fc3VpbyB1aW87Ci0Jc3RydWN0IF9fc2lvdiBpb3ZbMl07Ci0KLQlpb3ZbMF0uaW92X2Jhc2UgPSAodm9pZCAqKXM7Ci0JaW92WzBdLmlvdl9sZW4gPSBjOwotCWlvdlsxXS5pb3ZfYmFzZSA9ICJcbiI7Ci0JaW92WzFdLmlvdl9sZW4gPSAxOwotCXVpby51aW9fcmVzaWQgPSBjICsgMTsKLQl1aW8udWlvX2lvdiA9ICZpb3ZbMF07Ci0JdWlvLnVpb19pb3ZjbnQgPSAyOwotCUZMT0NLRklMRShzdGRvdXQpOwotCU9SSUVOVChzdGRvdXQsIC0xKTsKLQlyZXR2YWwgPSBfX3NmdndyaXRlKHN0ZG91dCwgJnVpbykgPyBFT0YgOiAnXG4nOwotCUZVTkxPQ0tGSUxFKHN0ZG91dCk7Ci0JcmV0dXJuIChyZXR2YWwpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHcuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXR3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNjBjYWYuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHcuYworKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXB1dHcuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAiZnZ3cml0ZS5oIgotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgotCi1pbnQKLXB1dHcoaW50IHcsIEZJTEUgKmZwKQotewotCWludCByZXR2YWw7Ci0Jc3RydWN0IF9fc3VpbyB1aW87Ci0Jc3RydWN0IF9fc2lvdiBpb3Y7Ci0KLQlpb3YuaW92X2Jhc2UgPSAmdzsKLQlpb3YuaW92X2xlbiA9IHVpby51aW9fcmVzaWQgPSBzaXplb2Yodyk7Ci0JdWlvLnVpb19pb3YgPSAmaW92OwotCXVpby51aW9faW92Y250ID0gMTsKLQlGTE9DS0ZJTEUoZnApOwotCXJldHZhbCA9IF9fc2Z2d3JpdGUoZnAsICZ1aW8pOwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKHJldHZhbCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcmVtb3ZlLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcmVtb3ZlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlOTg0YmEuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3JlbW92ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVtb3ZlLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLWludAotcmVtb3ZlKGNvbnN0IGNoYXIgKmZpbGUpCi17Ci0Jc3RydWN0IHN0YXQgc2I7Ci0KLQlpZiAobHN0YXQoZmlsZSwgJnNiKSA8IDApCi0JCXJldHVybiAoLTEpOwotCWlmIChTX0lTRElSKHNiLnN0X21vZGUpKQotCQlyZXR1cm4gKHJtZGlyKGZpbGUpKTsKLQlyZXR1cm4gKHVubGluayhmaWxlKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcmdldC5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3JnZXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRjMDMxMS4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcmdldC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmdldC5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi0vKgotICogSGFuZGxlIGdldGMoKSB3aGVuIHRoZSBidWZmZXIgcmFuIG91dDoKLSAqIFJlZmlsbCwgdGhlbiByZXR1cm4gdGhlIGZpcnN0IGNoYXJhY3RlcgotICogaW4gdGhlIG5ld2x5LWZpbGxlZCBidWZmZXIuCi0gKi8KLWludAotX19zcmdldChGSUxFICpmcCkKLXsKLQlpZiAoX19zcmVmaWxsKGZwKSA9PSAwKSB7Ci0JCWZwLT5fci0tOwotCQlyZXR1cm4gKCpmcC0+X3ArKyk7Ci0JfQotCXJldHVybiAoRU9GKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9zZXRidWYuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9zZXRidWYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM2NWY5Ny4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vc2V0YnVmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylzZXRidWYuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLQotdm9pZAotc2V0YnVmKEZJTEUgKiBfX3Jlc3RyaWN0IGZwLCBjaGFyICogX19yZXN0cmljdCBidWYpCi17Ci0JKHZvaWQpIHNldHZidWYoZnAsIGJ1ZiwgYnVmID8gX0lPRkJGIDogX0lPTkJGLCBCVUZTSVopOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3NldGJ1ZmZlci5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3NldGJ1ZmZlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjVlYjNjLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9zZXRidWZmZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXNldGJ1ZmZlci5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotdm9pZAotc2V0YnVmZmVyKEZJTEUgKmZwLCBjaGFyICpidWYsIGludCBzaXplKQotewotCi0JKHZvaWQpc2V0dmJ1ZihmcCwgYnVmLCBidWYgPyBfSU9GQkYgOiBfSU9OQkYsIChzaXplX3Qpc2l6ZSk7Ci19Ci0KLS8qCi0gKiBzZXQgbGluZSBidWZmZXJpbmcKLSAqLwotaW50Ci1zZXRsaW5lYnVmKEZJTEUgKmZwKQotewotCi0JcmV0dXJuIChzZXR2YnVmKGZwLCAoY2hhciAqKU5VTEwsIF9JT0xCRiwgKHNpemVfdCkwKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vc2V0dmJ1Zi5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3NldHZidWYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM5Njk2MC4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vc2V0dmJ1Zi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXNldHZidWYuYwk4LjIgKEJlcmtlbGV5KSAxMS8xNi85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSAibmFtZXNwYWNlLmgiCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKLSNpbmNsdWRlICJsb2NhbC5oIgotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgotCi0vKgotICogU2V0IG9uZSBvZiB0aGUgdGhyZWUga2luZHMgb2YgYnVmZmVyaW5nLCBvcHRpb25hbGx5IGluY2x1ZGluZwotICogYSBidWZmZXIuCi0gKi8KLWludAotc2V0dmJ1ZihGSUxFICogX19yZXN0cmljdCBmcCwgY2hhciAqIF9fcmVzdHJpY3QgYnVmLCBpbnQgbW9kZSwgc2l6ZV90IHNpemUpCi17Ci0JaW50IHJldCwgZmxhZ3M7Ci0Jc2l6ZV90IGlvc2l6ZTsKLQlpbnQgdHR5ZmxhZzsKLQotCS8qCi0JICogVmVyaWZ5IGFyZ3VtZW50cy4gIFRoZSBgaW50JyBsaW1pdCBvbiBgc2l6ZScgaXMgZHVlIHRvIHRoaXMKLQkgKiBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLiAgTm90ZSwgYnVmIGFuZCBzaXplIGFyZSBpZ25vcmVkCi0JICogd2hlbiBzZXR0aW5nIF9JT05CRi4KLQkgKi8KLQlpZiAobW9kZSAhPSBfSU9OQkYpCi0JCWlmICgobW9kZSAhPSBfSU9GQkYgJiYgbW9kZSAhPSBfSU9MQkYpIHx8IChpbnQpc2l6ZSA8IDApCi0JCQlyZXR1cm4gKEVPRik7Ci0KLQlGTE9DS0ZJTEUoZnApOwotCS8qCi0JICogV3JpdGUgY3VycmVudCBidWZmZXIsIGlmIGFueS4gIERpc2NhcmQgdW5yZWFkIGlucHV0IChpbmNsdWRpbmcKLQkgKiB1bmdldGMgZGF0YSksIGNhbmNlbCBsaW5lIGJ1ZmZlcmluZywgYW5kIGZyZWUgb2xkIGJ1ZmZlciBpZgotCSAqIG1hbGxvYygpZWQuICBXZSBhbHNvIGNsZWFyIGFueSBlb2YgY29uZGl0aW9uLCBhcyBpZiB0aGlzIHdlcmUKLQkgKiBhIHNlZWsuCi0JICovCi0JcmV0ID0gMDsKLQkodm9pZClfX3NmbHVzaChmcCk7Ci0JaWYgKEhBU1VCKGZwKSkKLQkJRlJFRVVCKGZwKTsKLQlmcC0+X3IgPSBmcC0+X2xiZnNpemUgPSAwOwotCWZsYWdzID0gZnAtPl9mbGFnczsKLQlpZiAoZmxhZ3MgJiBfX1NNQkYpCi0JCWZyZWUoKHZvaWQgKilmcC0+X2JmLl9iYXNlKTsKLQlmbGFncyAmPSB+KF9fU0xCRiB8IF9fU05CRiB8IF9fU01CRiB8IF9fU09QVCB8IF9fU09GRiB8IF9fU05QVCB8IF9fU0VPRik7Ci0KLQkvKiBJZiBzZXR0aW5nIHVuYnVmZmVyZWQgbW9kZSwgc2tpcCBhbGwgdGhlIGhhcmQgd29yay4gKi8KLQlpZiAobW9kZSA9PSBfSU9OQkYpCi0JCWdvdG8gbmJmOwotCi0JLyoKLQkgKiBGaW5kIG9wdGltYWwgSS9PIHNpemUgZm9yIHNlZWsgb3B0aW1pemF0aW9uLiAgVGhpcyBhbHNvIHJldHVybnMKLQkgKiBhIGB0dHkgZmxhZycgdG8gc3VnZ2VzdCB0aGF0IHdlIGNoZWNrIGlzYXR0eShmZCksIGJ1dCB3ZSBkbyBub3QKLQkgKiBjYXJlIHNpbmNlIG91ciBjYWxsZXIgdG9sZCB1cyBob3cgdG8gYnVmZmVyLgotCSAqLwotCWZsYWdzIHw9IF9fc3doYXRidWYoZnAsICZpb3NpemUsICZ0dHlmbGFnKTsKLQlpZiAoc2l6ZSA9PSAwKSB7Ci0JCWJ1ZiA9IE5VTEw7CS8qIGZvcmNlIGxvY2FsIGFsbG9jYXRpb24gKi8KLQkJc2l6ZSA9IGlvc2l6ZTsKLQl9Ci0KLQkvKiBBbGxvY2F0ZSBidWZmZXIgaWYgbmVlZGVkLiAqLwotCWlmIChidWYgPT0gTlVMTCkgewotCQlpZiAoKGJ1ZiA9IG1hbGxvYyhzaXplKSkgPT0gTlVMTCkgewotCQkJLyoKLQkJCSAqIFVuYWJsZSB0byBob25vciB1c2VyJ3MgcmVxdWVzdC4gIFdlIHdpbGwgcmV0dXJuCi0JCQkgKiBmYWlsdXJlLCBidXQgdHJ5IGFnYWluIHdpdGggZmlsZSBzeXN0ZW0gc2l6ZS4KLQkJCSAqLwotCQkJcmV0ID0gRU9GOwotCQkJaWYgKHNpemUgIT0gaW9zaXplKSB7Ci0JCQkJc2l6ZSA9IGlvc2l6ZTsKLQkJCQlidWYgPSBtYWxsb2Moc2l6ZSk7Ci0JCQl9Ci0JCX0KLQkJaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0JCQkvKiBObyBsdWNrOyBzd2l0Y2ggdG8gdW5idWZmZXJlZCBJL08uICovCi1uYmY6Ci0JCQlmcC0+X2ZsYWdzID0gZmxhZ3MgfCBfX1NOQkY7Ci0JCQlmcC0+X3cgPSAwOwotCQkJZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9IGZwLT5fbmJ1ZjsKLQkJCWZwLT5fYmYuX3NpemUgPSAxOwotCQkJRlVOTE9DS0ZJTEUoZnApOwotCQkJcmV0dXJuIChyZXQpOwotCQl9Ci0JCWZsYWdzIHw9IF9fU01CRjsKLQl9Ci0KLQkvKgotCSAqIEtpbGwgYW55IHNlZWsgb3B0aW1pemF0aW9uIGlmIHRoZSBidWZmZXIgaXMgbm90IHRoZQotCSAqIHJpZ2h0IHNpemUuCi0JICoKLQkgKiBTSE9VTEQgV0UgQUxMT1cgTVVMVElQTEVTIEhFUkUgKGkuZS4sIG9rIGlmZiAoc2l6ZSAlIGlvc2l6ZSkgPT0gMCk/Ci0JICovCi0JaWYgKHNpemUgIT0gaW9zaXplKQotCQlmbGFncyB8PSBfX1NOUFQ7Ci0KLQkvKgotCSAqIEZpeCB1cCB0aGUgRklMRSBmaWVsZHMsIGFuZCBzZXQgX19jbGVhbnVwIGZvciBvdXRwdXQgZmx1c2ggb24KLQkgKiBleGl0IChzaW5jZSB3ZSBhcmUgYnVmZmVyZWQgaW4gc29tZSB3YXkpLgotCSAqLwotCWlmIChtb2RlID09IF9JT0xCRikKLQkJZmxhZ3MgfD0gX19TTEJGOwotCWZwLT5fZmxhZ3MgPSBmbGFnczsKLQlmcC0+X2JmLl9iYXNlID0gZnAtPl9wID0gKHVuc2lnbmVkIGNoYXIgKilidWY7Ci0JZnAtPl9iZi5fc2l6ZSA9IHNpemU7Ci0JLyogZnAtPl9sYmZzaXplIGlzIHN0aWxsIDAgKi8KLQlpZiAoZmxhZ3MgJiBfX1NXUikgewotCQkvKgotCQkgKiBCZWdpbiBvciBjb250aW51ZSB3cml0aW5nOiBzZWUgX19zd3NldHVwKCkuICBOb3RlCi0JCSAqIHRoYXQgX19TTkJGIGlzIGltcG9zc2libGUgKGl0IHdhcyBoYW5kbGVkIGVhcmxpZXIpLgotCQkgKi8KLQkJaWYgKGZsYWdzICYgX19TTEJGKSB7Ci0JCQlmcC0+X3cgPSAwOwotCQkJZnAtPl9sYmZzaXplID0gLWZwLT5fYmYuX3NpemU7Ci0JCX0gZWxzZQotCQkJZnAtPl93ID0gc2l6ZTsKLQl9IGVsc2UgewotCQkvKiBiZWdpbi9jb250aW51ZSByZWFkaW5nLCBvciBzdGF5IGluIGludGVybWVkaWF0ZSBzdGF0ZSAqLwotCQlmcC0+X3cgPSAwOwotCX0KLQlfX2NsZWFudXAgPSBfY2xlYW51cDsKLQotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKHJldCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vdGVtcG5hbS5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3RlbXBuYW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE1NzQ2Zi4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vdGVtcG5hbS5jCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIyl0ZW1wbmFtLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8cGF0aHMuaD4KLQotX193YXJuX3JlZmVyZW5jZXModGVtcG5hbSwKLSAgICAid2FybmluZzogdGVtcG5hbSgpIHBvc3NpYmx5IHVzZWQgdW5zYWZlbHk7IGNvbnNpZGVyIHVzaW5nIG1rc3RlbXAoKSIpOwotCi1leHRlcm4gY2hhciAqX21rdGVtcChjaGFyICopOwotCi1jaGFyICoKLXRlbXBuYW0oY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpwZngpCi17Ci0JaW50IHN2ZXJybm87Ci0JY2hhciAqZiwgKm5hbWU7Ci0KLQlpZiAoIShuYW1lID0gbWFsbG9jKE1BWFBBVEhMRU4pKSkKLQkJcmV0dXJuKE5VTEwpOwotCi0JaWYgKCFwZngpCi0JCXBmeCA9ICJ0bXAuIjsKLQotCWlmIChpc3NldHVnaWQoKSA9PSAwICYmIChmID0gZ2V0ZW52KCJUTVBESVIiKSkpIHsKLQkJKHZvaWQpc25wcmludGYobmFtZSwgTUFYUEFUSExFTiwgIiVzJXMlc1hYWFhYWCIsIGYsCi0JCSAgICAqKGYgKyBzdHJsZW4oZikgLSAxKSA9PSAnLyc/ICIiOiAiLyIsIHBmeCk7Ci0JCWlmICgoZiA9IF9ta3RlbXAobmFtZSkpKQotCQkJcmV0dXJuKGYpOwotCX0KLQotCWlmICgoZiA9IChjaGFyICopZGlyKSkgewotCQkodm9pZClzbnByaW50ZihuYW1lLCBNQVhQQVRITEVOLCAiJXMlcyVzWFhYWFhYIiwgZiwKLQkJICAgICooZiArIHN0cmxlbihmKSAtIDEpID09ICcvJz8gIiI6ICIvIiwgcGZ4KTsKLQkJaWYgKChmID0gX21rdGVtcChuYW1lKSkpCi0JCQlyZXR1cm4oZik7Ci0JfQotCi0JZiA9IFBfdG1wZGlyOwotCSh2b2lkKXNucHJpbnRmKG5hbWUsIE1BWFBBVEhMRU4sICIlcyVzWFhYWFhYIiwgZiwgcGZ4KTsKLQlpZiAoKGYgPSBfbWt0ZW1wKG5hbWUpKSkKLQkJcmV0dXJuKGYpOwotCi0JZiA9IF9QQVRIX1RNUDsKLQkodm9pZClzbnByaW50ZihuYW1lLCBNQVhQQVRITEVOLCAiJXMlc1hYWFhYWCIsIGYsIHBmeCk7Ci0JaWYgKChmID0gX21rdGVtcChuYW1lKSkpCi0JCXJldHVybihmKTsKLQotCXN2ZXJybm8gPSBlcnJubzsKLQlmcmVlKG5hbWUpOwotCWVycm5vID0gc3ZlcnJubzsKLQlyZXR1cm4oTlVMTCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vdG1wbmFtLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vdG1wbmFtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMzJkY2MuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3RtcG5hbS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMsIDE5OTQKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpdG1wbmFtLmMJOC4zIChCZXJrZWxleSkgMy8yOC85NCI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi1fX3dhcm5fcmVmZXJlbmNlcyh0bXBuYW0sCi0gICAgIndhcm5pbmc6IHRtcG5hbSgpIHBvc3NpYmx5IHVzZWQgdW5zYWZlbHk7IGNvbnNpZGVyIHVzaW5nIG1rc3RlbXAoKSIpOwotCi1leHRlcm4gY2hhciAqX21rdGVtcChjaGFyICopOwotCi1jaGFyICoKLXRtcG5hbShjaGFyICpzKQotewotCXN0YXRpYyB1X2xvbmcgdG1wY291bnQ7Ci0Jc3RhdGljIGNoYXIgYnVmW0xfdG1wbmFtXTsKLQotCWlmIChzID09IE5VTEwpCi0JCXMgPSBidWY7Ci0JKHZvaWQpc25wcmludGYocywgTF90bXBuYW0sICIlc3RtcC4lbHUuWFhYWFhYIiwgUF90bXBkaXIsIHRtcGNvdW50KTsKLQkrK3RtcGNvdW50OwotCXJldHVybiAoX21rdGVtcChzKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vd3NldHVwLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vd3NldHVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZjgyNDcuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3dzZXR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpd3NldHVwLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLQotLyoKLSAqIFZhcmlvdXMgb3V0cHV0IHJvdXRpbmVzIGNhbGwgd3NldHVwIHRvIGJlIHN1cmUgaXQgaXMgc2FmZSB0byB3cml0ZSwKLSAqIGJlY2F1c2UgZWl0aGVyIF9mbGFncyBkb2VzIG5vdCBpbmNsdWRlIF9fU1dSLCBvciBfYnVmIGlzIE5VTEwuCi0gKiBfd3NldHVwIHJldHVybnMgMCBpZiBPSyB0byB3cml0ZTsgb3RoZXJ3aXNlLCBpdCByZXR1cm5zIEVPRiBhbmQgc2V0cyBlcnJuby4KLSAqLwotaW50Ci1fX3N3c2V0dXAoRklMRSAqZnApCi17Ci0JLyogbWFrZSBzdXJlIHN0ZGlvIGlzIHNldCB1cCAqLwotCWlmICghX19zZGlkaW5pdCkKLQkJX19zaW5pdCgpOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgbm90IHdyaXRpbmcsIHdlIGhhZCBiZXR0ZXIgYmUgcmVhZGluZyBhbmQgd3JpdGluZy4KLQkgKi8KLQlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NXUikgPT0gMCkgewotCQlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NSVykgPT0gMCkgewotCQkJZXJybm8gPSBFQkFERjsKLQkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOwotCQkJcmV0dXJuIChFT0YpOwotCQl9Ci0JCWlmIChmcC0+X2ZsYWdzICYgX19TUkQpIHsKLQkJCS8qIGNsb2JiZXIgYW55IHVuZ2V0YyBkYXRhICovCi0JCQlpZiAoSEFTVUIoZnApKQotCQkJCUZSRUVVQihmcCk7Ci0JCQlmcC0+X2ZsYWdzICY9IH4oX19TUkR8X19TRU9GKTsKLQkJCWZwLT5fciA9IDA7Ci0JCQlmcC0+X3AgPSBmcC0+X2JmLl9iYXNlOwotCQl9Ci0JCWZwLT5fZmxhZ3MgfD0gX19TV1I7Ci0JfQotCi0JLyoKLQkgKiBNYWtlIGEgYnVmZmVyIGlmIG5lY2Vzc2FyeSwgdGhlbiBzZXQgX3cuCi0JICovCi0JaWYgKGZwLT5fYmYuX2Jhc2UgPT0gTlVMTCkKLQkJX19zbWFrZWJ1ZihmcCk7Ci0JaWYgKGZwLT5fZmxhZ3MgJiBfX1NMQkYpIHsKLQkJLyoKLQkJICogSXQgaXMgbGluZSBidWZmZXJlZCwgc28gbWFrZSBfbGJmc2l6ZSBiZSAtX2J1ZnNpemUKLQkJICogZm9yIHRoZSBwdXRjKCkgbWFjcm8uICBXZSB3aWxsIGNoYW5nZSBfbGJmc2l6ZSBiYWNrCi0JCSAqIHRvIDAgd2hlbmV2ZXIgd2UgdHVybiBvZmYgX19TV1IuCi0JCSAqLwotCQlmcC0+X3cgPSAwOwotCQlmcC0+X2xiZnNpemUgPSAtZnAtPl9iZi5fc2l6ZTsKLQl9IGVsc2UKLQkJZnAtPl93ID0gZnAtPl9mbGFncyAmIF9fU05CRiA/IDAgOiBmcC0+X2JmLl9zaXplOwotCXJldHVybiAoMCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkbGliL3F1aWNrX2V4aXQuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvcXVpY2tfZXhpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmOGNkYjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkbGliL3F1aWNrX2V4aXQuYwpAQCAtMCwwICsxLDgwIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBEYXZpZCBDaGlzbmFsbAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorCisvKioKKyAqIExpbmtlZCBsaXN0IG9mIHF1aWNrIGV4aXQgaGFuZGxlcnMuICBUaGlzIGlzIHNpbXBsZXIgdGhhbiB0aGUgYXRleGl0KCkKKyAqIHZlcnNpb24sIGJlY2F1c2UgaXQgaXMgbm90IHJlcXVpcmVkIHRvIHN1cHBvcnQgQysrIGRlc3RydWN0b3JzIG9yCisgKiBEU08tc3BlY2lmaWMgY2xlYW51cHMuCisgKi8KK3N0cnVjdCBxdWlja19leGl0X2hhbmRsZXIgeworCXN0cnVjdCBxdWlja19leGl0X2hhbmRsZXIgKm5leHQ7CisJdm9pZCAoKmNsZWFudXApKHZvaWQpOworfTsKKworLyoqCisgKiBMb2NrIHByb3RlY3RpbmcgdGhlIGhhbmRsZXJzIGxpc3QuCisgKi8KK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgYXRleGl0X211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKy8qKgorICogU3RhY2sgb2YgY2xlYW51cCBoYW5kbGVycy4gIFRoZXNlIHdpbGwgYmUgaW52b2tlZCBpbiByZXZlcnNlIG9yZGVyIHdoZW4gCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcXVpY2tfZXhpdF9oYW5kbGVyICpoYW5kbGVyczsKKworaW50CithdF9xdWlja19leGl0KHZvaWQgKCpmdW5jKSh2b2lkKSkKK3sKKwlzdHJ1Y3QgcXVpY2tfZXhpdF9oYW5kbGVyICpoOworCQorCWggPSBtYWxsb2Moc2l6ZW9mKCpoKSk7CisKKwlpZiAoTlVMTCA9PSBoKQorCQlyZXR1cm4gKDEpOworCWgtPmNsZWFudXAgPSBmdW5jOworCXB0aHJlYWRfbXV0ZXhfbG9jaygmYXRleGl0X211dGV4KTsKKwloLT5uZXh0ID0gaGFuZGxlcnM7CisJaGFuZGxlcnMgPSBoOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhdGV4aXRfbXV0ZXgpOworCXJldHVybiAoMCk7Cit9CisKK3ZvaWQKK3F1aWNrX2V4aXQoaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgcXVpY2tfZXhpdF9oYW5kbGVyICpoOworCisJLyoKKwkgKiBYWFg6IFRoZSBDKysgc3BlYyByZXF1aXJlcyB1cyB0byBjYWxsIHN0ZDo6dGVybWluYXRlIGlmIHRoZXJlIGlzIGFuCisJICogZXhjZXB0aW9uIGhlcmUuCisJICovCisJZm9yIChoID0gaGFuZGxlcnM7IE5VTEwgIT0gaDsgaCA9IGgtPm5leHQpCisJCWgtPmNsZWFudXAoKTsKKwlfRXhpdChzdGF0dXMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NsY3B5LmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xjcHkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEwNGEwNi4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xjcHkuYworKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAotICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCi0gKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7Ci0gKiBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKLSAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCi0gKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCi0gKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKglmcm9tIE9wZW5CU0Q6IHN0cmxjcHkuYyx2IDEuNCAxOTk5LzA1LzAxIDE4OjU2OjQxIG1pbGxlcnQgRXhwCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIDAKLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLV9fUkNTSUQoIiROZXRCU0Q6IHdjc2xjcHkuYyx2IDEuMSAyMDAwLzEyLzIzIDIzOjE0OjM2IGl0b2p1biBFeHAgJCIpOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNlbmRpZgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8d2NoYXIuaD4KLQotLyoKLSAqIENvcHkgc3JjIHRvIHN0cmluZyBkc3Qgb2Ygc2l6ZSBzaXouICBBdCBtb3N0IHNpei0xIGNoYXJhY3RlcnMKLSAqIHdpbGwgYmUgY29waWVkLiAgQWx3YXlzIE5VTCB0ZXJtaW5hdGVzICh1bmxlc3Mgc2l6ID09IDApLgotICogUmV0dXJucyB3Y3NsZW4oc3JjKTsgaWYgcmV0dmFsID49IHNpeiwgdHJ1bmNhdGlvbiBvY2N1cnJlZC4KLSAqLwotc2l6ZV90Ci13Y3NsY3B5KHdjaGFyX3QgKmRzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3Qgc2l6KQotewotCXdjaGFyX3QgKmQgPSBkc3Q7Ci0JY29uc3Qgd2NoYXJfdCAqcyA9IHNyYzsKLQlzaXplX3QgbiA9IHNpejsKLQotCS8qIENvcHkgYXMgbWFueSBieXRlcyBhcyB3aWxsIGZpdCAqLwotCWlmIChuICE9IDAgJiYgLS1uICE9IDApIHsKLQkJZG8gewotCQkJaWYgKCgqZCsrID0gKnMrKykgPT0gMCkKLQkJCQlicmVhazsKLQkJfSB3aGlsZSAoLS1uICE9IDApOwotCX0KLQotCS8qIE5vdCBlbm91Z2ggcm9vbSBpbiBkc3QsIGFkZCBOVUwgYW5kIHRyYXZlcnNlIHJlc3Qgb2Ygc3JjICovCi0JaWYgKG4gPT0gMCkgewotCQlpZiAoc2l6ICE9IDApCi0JCQkqZCA9ICdcMCc7CQkvKiBOVUwtdGVybWluYXRlIGRzdCAqLwotCQl3aGlsZSAoKnMrKykKLQkJCTsKLQl9Ci0KLQlyZXR1cm4ocyAtIHNyYyAtIDEpOwkvKiBjb3VudCBkb2VzIG5vdCBpbmNsdWRlIE5VTCAqLwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NzdHIuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2Nzc3RyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNTk4YTYuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NzdHIuYworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIDAKLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylzdHJzdHIuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSA8d2NoYXIuaD4KLQotLyoKLSAqIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgZmluZCBpbiBzLgotICovCi13Y2hhcl90ICoKLXdjc3N0cihjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBzLCBjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBmaW5kKQotewotCXdjaGFyX3QgYywgc2M7Ci0Jc2l6ZV90IGxlbjsKLQotCWlmICgoYyA9ICpmaW5kKyspICE9IEwnXDAnKSB7Ci0JCWxlbiA9IHdjc2xlbihmaW5kKTsKLQkJZG8gewotCQkJZG8gewotCQkJCWlmICgoc2MgPSAqcysrKSA9PSBMJ1wwJykKLQkJCQkJcmV0dXJuIChOVUxMKTsKLQkJCX0gd2hpbGUgKHNjICE9IGMpOwotCQl9IHdoaWxlICh3Y3NuY21wKHMsIGZpbmQsIGxlbikgIT0gMCk7Ci0JCXMtLTsKLQl9Ci0JcmV0dXJuICgod2NoYXJfdCAqKXMpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYmNfcHJpdmF0ZS5oIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYmNfcHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2RiYjdlLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWJjX3ByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIF9CSU9OSUNfRlJFRUJTRF9MSUJDX1BSSVZBVEVfSF9pbmNsdWRlZAotI2RlZmluZSBfQklPTklDX0ZSRUVCU0RfTElCQ19QUklWQVRFX0hfaW5jbHVkZWQKLQotI2RlZmluZSBGTE9DS0ZJTEUoZnApICAgZG8geyBpZiAoX19pc3RocmVhZGVkKSBmbG9ja2ZpbGUoZnApOyB9IHdoaWxlICgwKQotI2RlZmluZSBGVU5MT0NLRklMRShmcCkgZG8geyBpZiAoX19pc3RocmVhZGVkKSBmdW5sb2NrZmlsZShmcCk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU1RESU9fVEhSRUFEX0xPQ0soKSAgIC8qIFRPRE86IHVudGlsIHdlIGhhdmUgdGhlIEZyZWVCU0QgZmluZGZwLmMsIHRoaXMgaXMgdXNlbGVzcy4gKi8KLSNkZWZpbmUgU1RESU9fVEhSRUFEX1VOTE9DSygpIC8qIFRPRE86IHVudGlsIHdlIGhhdmUgdGhlIEZyZWVCU0QgZmluZGZwLmMsIHRoaXMgaXMgdXNlbGVzcy4gKi8KLQotI2RlZmluZSBPUklFTlQoZnAsIG8pIC8qIE9ubHkgbmVlZGVkIGZvciB3aWRlLWNoYXJhY3RlciBzdHJlYW0gc3VwcG9ydC4gKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbmFtZXNwYWNlLmggYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbmFtZXNwYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ODBiNTcuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL25hbWVzcGFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgX0JJT05JQ19GUkVFQlNEX05BTUVTUEFDRV9IX2luY2x1ZGVkCi0jZGVmaW5lIF9CSU9OSUNfRlJFRUJTRF9OQU1FU1BBQ0VfSF9pbmNsdWRlZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpIGNoYXIqIF9ta3RlbXAoY2hhciopOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL1JFQURNRS50eHQgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9SRUFETUUudHh0CmluZGV4IDg2YWY2ZWIuLmUyZDE0NmUgMTAwNjQ0Ci0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL1JFQURNRS50eHQKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvUkVBRE1FLnR4dApAQCAtMiw4ICsyLDQgQEAKIGZpbGVzIGRpcmVjdGx5LiBNYWtlIGZpeGVzIHVwc3RyZWFtIGFuZCB0aGVuIHB1bGwgZG93biB0aGUgbmV3IHZlcnNpb24gb2YKIHRoZSBmaWxlLgogCi1Ob3RlIHRoYXQgY29kZSBpbiB0aGUgb3RoZXIgJ25ldGJzZCcgZGlyZWN0b3J5IGNvbnRhaW5zIEFuZHJvaWQgbW9kaWZpY2F0aW9ucy4KLVdlIHNob3VsZCB3b3JrIHRvd2FyZHMgZ2V0dGluZyBhcyBtYW55IG9mIHRob3NlIGNoYW5nZXMgYXMgcG9zc2libGUgdXBzdHJlYW0KLWFuZCB0aGVuIGxvc2luZyB0aG9zZSBmaWxlcyBpbiBmYXZvciBvZiBwdXJlIHVwc3RyZWFtIGNvcGllcyBoZXJlIGluc3RlYWQuCi0KIFRPRE86IHdyaXRlIGEgc2NyaXB0IHRvIG1ha2UgdGhpcyBwcm9jZXNzIGF1dG9tYXRlZC4KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2Vudi5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL2Vudi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9lbnYuaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL2Vudi5oCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9leHRlcm4uaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9leHRlcm4uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvZXh0ZXJuLmgKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9leHRlcm4uaApkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvZmRfc2V0c2l6ZS5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL2ZkX3NldHNpemUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvZmRfc2V0c2l6ZS5oCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9hbmRyb2lkL2luY2x1ZGUvZmRfc2V0c2l6ZS5oCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9hbmRyb2lkL2luY2x1ZGUvbmFtZXNwYWNlLmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9hbmRyb2lkL2luY2x1ZGUvbmFtZXNwYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmNTQzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9uYW1lc3BhY2UuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfQklPTklDX05FVEJTRF9OQU1FU1BBQ0VfSF9pbmNsdWRlZAorI2RlZmluZSBfQklPTklDX05FVEJTRF9OQU1FU1BBQ0VfSF9pbmNsdWRlZAorCisvLyBOZXRCU0QgdXNlcyBfX3dlYWtfYWxpYXMgb24gYSBsb3Qgb2YgZnVuY3Rpb25zLiBXZSBkb24ndCB3YW50IHRoYXQuCisjaWYgZGVmaW5lZChfX3dlYWtfYWxpYXMpCisjdW5kZWYgX193ZWFrX2FsaWFzCisjZW5kaWYKKworX19MSUJDX0hJRERFTl9fIGludCBfX3Jlc19lbmFibGVfbXQodm9pZCk7CitfX0xJQkNfSElEREVOX18gaW50IF9fcmVzX2Rpc2FibGVfbXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL25ldGJzZC1jb21wYXQuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9uZXRic2QtY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRiZTkzMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9uZXRic2QtY29tcGF0LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0JJT05JQ19ORVRCU0RfQ09NUEFUX0hfaW5jbHVkZWQKKyNkZWZpbmUgX0JJT05JQ19ORVRCU0RfQ09NUEFUX0hfaW5jbHVkZWQKKworLy8gTmV0QlNEIHVzZXMgX0RJQUdBU1NFUlQgdG8gbnVsbC1jaGVjayBhcmd1bWVudHMgYW5kIHRoZSBsaWtlLgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2RlZmluZSBfRElBR0FTU0VSVChlKSAoKGUpID8gKHZvaWQpIDAgOiBfX2Fzc2VydDIoX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywgI2UpKQorCisvLyBUT0RPOiB1cGRhdGUgb3VyIDxzeXMvY2RlZnMuaD4gdG8gc3VwcG9ydCB0aGlzIHByb3Blcmx5LgorI2RlZmluZSBfX3R5cGVfZml0KHQsIGEpICgwID09IDApCisKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNkZWZpbmUgX19VU0VfQlNECisKKy8vIFRPRE86IHdlIGRvbid0IHlldCBoYXZlIHRocmVhZC1zYWZlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyNkZWZpbmUgX19yZWFkbG9ja2VudigpIDAKKyNkZWZpbmUgX191bmxvY2tlbnYoKSAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvcG9ydF9hZnRlci5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL3BvcnRfYWZ0ZXIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvcG9ydF9hZnRlci5oCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9hbmRyb2lkL2luY2x1ZGUvcG9ydF9hZnRlci5oCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9hbmRyb2lkL2luY2x1ZGUvcG9ydF9iZWZvcmUuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9wb3J0X2JlZm9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYTk0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9hbmRyb2lkL2luY2x1ZGUvcG9ydF9iZWZvcmUuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfQklPTklDX05FVEJTRF9QT1JUX0JFRk9SRV9IX2luY2x1ZGVkCisjZGVmaW5lIF9CSU9OSUNfTkVUQlNEX1BPUlRfQkVGT1JFX0hfaW5jbHVkZWQKKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKworI2RlZmluZSBJU0NfRk9STUFUX1BSSU5URihhLGIpIF9fcHJpbnRmbGlrZShhLGIpCisjZGVmaW5lIElTQ19TT0NLTEVOX1Qgc29ja2xlbl90CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL3JhbmQ0OC5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL3JhbmQ0OC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNzk5MDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9hbmRyb2lkL2luY2x1ZGUvcmFuZDQ4LmgKQEAgLTAsMCArMSwzNCBAQAorLyoJJE5ldEJTRDogcmFuZDQ4LmgsdiAxLjYgMjAxMS8wNS8xOCAxOTozNjozNiBkc2wgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKKyAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCisgKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKKyAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCisgKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgorICovCisKKyNpZm5kZWYgX1JBTkQ0OF9IXworI2RlZmluZSBfUkFORDQ4X0hfCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworX19MSUJDX0hJRERFTl9fIHZvaWQJCV9fZG9yYW5kNDgodW5zaWduZWQgc2hvcnRbM10pOworX19MSUJDX0hJRERFTl9fIHVuc2lnbmVkIHNob3J0CV9fcmFuZDQ4X3NlZWRbM107CitfX0xJQkNfSElEREVOX18gdW5zaWduZWQgc2hvcnQJX19yYW5kNDhfbXVsdFszXTsKK19fTElCQ19ISURERU5fXyB1bnNpZ25lZCBzaG9ydAlfX3JhbmQ0OF9hZGQ7CisKKyNkZWZpbmUJUkFORDQ4X1NFRURfMAkoMHgzMzBlKQorI2RlZmluZQlSQU5ENDhfU0VFRF8xCSgweGFiY2QpCisjZGVmaW5lCVJBTkQ0OF9TRUVEXzIJKDB4MTIzNCkKKyNkZWZpbmUJUkFORDQ4X01VTFRfMAkoMHhlNjZkKQorI2RlZmluZQlSQU5ENDhfTVVMVF8xCSgweGRlZWMpCisjZGVmaW5lCVJBTkQ0OF9NVUxUXzIJKDB4MDAwNSkKKyNkZWZpbmUJUkFORDQ4X0FERAkoMHgwMDBiKQorCisjZW5kaWYgLyogX1JBTkQ0OF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL3JlZW50cmFudC5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL3JlZW50cmFudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYThmZDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9hbmRyb2lkL2luY2x1ZGUvcmVlbnRyYW50LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0JJT05JQ19ORVRCU0RfUkVFTlRSQU5UX0hfaW5jbHVkZWQKKyNkZWZpbmUgX0JJT05JQ19ORVRCU0RfUkVFTlRSQU5UX0hfaW5jbHVkZWQKKworI2RlZmluZSBfUkVFTlRSQU5UCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKy8vCisvLyBNYXAgTmV0QlNEIGxpYmMgaW50ZXJuYWwgbG9ja2luZyB0byBwdGhyZWFkIGxvY2tpbmcuCisvLworCisjZGVmaW5lIE1VVEVYX0lOSVRJQUxJWkVSIFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIKKyNkZWZpbmUgbXV0ZXhfdCBwdGhyZWFkX211dGV4X3QKKyNkZWZpbmUgbXV0ZXhfbG9jayh4KSBwdGhyZWFkX211dGV4X2xvY2soeCkKKyNkZWZpbmUgbXV0ZXhfdW5sb2NrKHgpIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKHgpCisKKyNkZWZpbmUgUldMT0NLX0lOSVRJQUxJWkVSIFBUSFJFQURfUldMT0NLX0lOSVRJQUxJWkVSCisjZGVmaW5lIHJ3bG9ja190IHB0aHJlYWRfcndsb2NrX3QKKyNkZWZpbmUgcndsb2NrX3JkbG9jayBwdGhyZWFkX3J3bG9ja19yZGxvY2sKKyNkZWZpbmUgcndsb2NrX3VubG9jayBwdGhyZWFkX3J3bG9ja191bmxvY2sKKyNkZWZpbmUgcndsb2NrX3dybG9jayBwdGhyZWFkX3J3bG9ja193cmxvY2sKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3NoYTEuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9zeXMvc2hhMS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2luY2x1ZGUvc3lzL3NoYTEuaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL3N5cy9zaGExLmgKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2NvbW1vbi9saWIvbGliYy9pbmV0L2luZXRfYWRkci5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvY29tbW9uL2xpYi9saWJjL2luZXQvaW5ldF9hZGRyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNjBjZTkuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1uZXRic2QvY29tbW9uL2xpYi9saWJjL2luZXQvaW5ldF9hZGRyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjQgKzAsMCBAQAotLyoJJE5ldEJTRDogaW5ldF9hZGRyLmMsdiAxLjMgMjAxMi8wMy8wOSAxNTo0MToxNiBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkwLCAxOTkzCi0gKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgotICogCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0Ci0gKiB0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgotICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0Ci0gKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgotICogCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAotICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCi0gKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLSAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCi0gKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLgotICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaWYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWYgMAotc3RhdGljIGNvbnN0IGNoYXIgc2Njc2lkW10gPSAiQCgjKWluZXRfYWRkci5jCTguMSAoQmVya2VsZXkpIDYvMTcvOTMiOwotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogaW5ldF9hZGRyLmMsdiAxLjIuMjA2LjIgMjAwNC8wMy8xNyAwMDoyOTo0NSBtYXJrYSBFeHAiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IGluZXRfYWRkci5jLHYgMS4zIDIwMTIvMDMvMDkgMTU6NDE6MTYgY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotI2luY2x1ZGUgInBvcnRfYmVmb3JlLmgiCi0KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLQotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0KLSNpbmNsdWRlICJwb3J0X2FmdGVyLmgiCi0KLSNpZmRlZiBfX3dlYWtfYWxpYXMKLV9fd2Vha19hbGlhcyhpbmV0X2F0b24sX2luZXRfYXRvbikKLSNlbmRpZgotI2Vsc2UKLSNpbmNsdWRlIDxsaWIvbGlia2Vybi9saWJrZXJuLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0KLS8qCi0gKiBBc2NpaSBpbnRlcm5ldCBhZGRyZXNzIGludGVycHJldGF0aW9uIHJvdXRpbmUuCi0gKiBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgaW4gbmV0d29yayBvcmRlci4KLSAqLwotdWludDMyX3QKLWluZXRfYWRkcihjb25zdCBjaGFyICpjcCkgewotCXN0cnVjdCBpbl9hZGRyIHZhbDsKLQotCWlmIChpbmV0X2F0b24oY3AsICZ2YWwpKQotCQlyZXR1cm4gKHZhbC5zX2FkZHIpOwotCXJldHVybiAoSU5BRERSX05PTkUpOwotfQotCi0vKiAKLSAqIENoZWNrIHdoZXRoZXIgImNwIiBpcyBhIHZhbGlkIGFzY2lpIHJlcHJlc2VudGF0aW9uCi0gKiBvZiBhbiBJbnRlcm5ldCBhZGRyZXNzIGFuZCBjb252ZXJ0IHRvIGEgYmluYXJ5IGFkZHJlc3MuCi0gKiBSZXR1cm5zIDEgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQsIDAgaWYgbm90LgotICogVGhpcyByZXBsYWNlcyBpbmV0X2FkZHIsIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB3aGljaAotICogY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gZmFpbHVyZSBhbmQgYSBsb2NhbCBicm9hZGNhc3QgYWRkcmVzcy4KLSAqLwotaW50Ci1pbmV0X2F0b24oY29uc3QgY2hhciAqY3AsIHN0cnVjdCBpbl9hZGRyICphZGRyKSB7Ci0JdWludDMyX3QgdmFsOwotCWludCBiYXNlOwotCXNpemVfdCBuOwotCWNoYXIgYzsKLQl1aW50OF90IHBhcnRzWzRdOwotCXVpbnQ4X3QgKnBwID0gcGFydHM7Ci0JaW50IGRpZ2l0OwotCi0JYyA9ICpjcDsKLQlmb3IgKDs7KSB7Ci0JCS8qCi0JCSAqIENvbGxlY3QgbnVtYmVyIHVwIHRvIGBgLicnLgotCQkgKiBWYWx1ZXMgYXJlIHNwZWNpZmllZCBhcyBmb3IgQzoKLQkJICogMHg9aGV4LCAwPW9jdGFsLCBpc2RpZ2l0PWRlY2ltYWwuCi0JCSAqLwotCQlpZiAoIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpYykpCi0JCQlyZXR1cm4gKDApOwotCQl2YWwgPSAwOyBiYXNlID0gMTA7IGRpZ2l0ID0gMDsKLQkJaWYgKGMgPT0gJzAnKSB7Ci0JCQljID0gKisrY3A7Ci0JCQlpZiAoYyA9PSAneCcgfHwgYyA9PSAnWCcpCi0JCQkJYmFzZSA9IDE2LCBjID0gKisrY3A7Ci0JCQllbHNlIHsKLQkJCQliYXNlID0gODsKLQkJCQlkaWdpdCA9IDEgOwotCQkJfQotCQl9Ci0JCWZvciAoOzspIHsKLQkJCWlmIChpc2FzY2lpKGMpICYmIGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpYykpIHsKLQkJCQlpZiAoYmFzZSA9PSA4ICYmIChjID09ICc4JyB8fCBjID09ICc5JykpCi0JCQkJCXJldHVybiAoMCk7Ci0JCQkJdmFsID0gKHZhbCAqIGJhc2UpICsgKGMgLSAnMCcpOwotCQkJCWMgPSAqKytjcDsKLQkJCQlkaWdpdCA9IDE7Ci0JCQl9IGVsc2UgaWYgKGJhc2UgPT0gMTYgJiYgaXNhc2NpaShjKSAmJiAKLQkJCQkgICBpc3hkaWdpdCgodW5zaWduZWQgY2hhciljKSkgewotCQkJCXZhbCA9ICh2YWwgPDwgNCkgfAotCQkJCQkoYyArIDEwIC0gKGlzbG93ZXIoKHVuc2lnbmVkIGNoYXIpYykgPyAnYScgOiAnQScpKTsKLQkJCQljID0gKisrY3A7Ci0JCQkJZGlnaXQgPSAxOwotCQkJfSBlbHNlCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGMgPT0gJy4nKSB7Ci0JCQkvKgotCQkJICogSW50ZXJuZXQgZm9ybWF0OgotCQkJICoJYS5iLmMuZAotCQkJICoJYS5iLmMJKHdpdGggYyB0cmVhdGVkIGFzIDE2IGJpdHMpCi0JCQkgKglhLmIJKHdpdGggYiB0cmVhdGVkIGFzIDI0IGJpdHMpCi0JCQkgKi8KLQkJCWlmIChwcCA+PSBwYXJ0cyArIDMgfHwgdmFsID4gMHhmZlUpCi0JCQkJcmV0dXJuICgwKTsKLQkJCSpwcCsrID0gdmFsOwotCQkJYyA9ICorK2NwOwotCQl9IGVsc2UKLQkJCWJyZWFrOwotCX0KLQkvKgotCSAqIENoZWNrIGZvciB0cmFpbGluZyBjaGFyYWN0ZXJzLgotCSAqLwotCWlmIChjICE9ICdcMCcgJiYgKCFpc2FzY2lpKGMpIHx8ICFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKWMpKSkKLQkJcmV0dXJuICgwKTsKLQkvKgotCSAqIERpZCB3ZSBnZXQgYSB2YWxpZCBkaWdpdD8KLQkgKi8KLQlpZiAoIWRpZ2l0KQotCQlyZXR1cm4gKDApOwotCS8qCi0JICogQ29uY29jdCB0aGUgYWRkcmVzcyBhY2NvcmRpbmcgdG8KLQkgKiB0aGUgbnVtYmVyIG9mIHBhcnRzIHNwZWNpZmllZC4KLQkgKi8KLQluID0gcHAgLSBwYXJ0cyArIDE7Ci0Jc3dpdGNoIChuKSB7Ci0JY2FzZSAxOgkJCQkvKiBhIC0tIDMyIGJpdHMgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIDI6CQkJCS8qIGEuYiAtLSA4LjI0IGJpdHMgKi8KLQkJaWYgKHZhbCA+IDB4ZmZmZmZmVSkKLQkJCXJldHVybiAoMCk7Ci0JCXZhbCB8PSBwYXJ0c1swXSA8PCAyNDsKLQkJYnJlYWs7Ci0KLQljYXNlIDM6CQkJCS8qIGEuYi5jIC0tIDguOC4xNiBiaXRzICovCi0JCWlmICh2YWwgPiAweGZmZmZVKQotCQkJcmV0dXJuICgwKTsKLQkJdmFsIHw9IChwYXJ0c1swXSA8PCAyNCkgfCAocGFydHNbMV0gPDwgMTYpOwotCQlicmVhazsKLQotCWNhc2UgNDoJCQkJLyogYS5iLmMuZCAtLSA4LjguOC44IGJpdHMgKi8KLQkJaWYgKHZhbCA+IDB4ZmZVKQotCQkJcmV0dXJuICgwKTsKLQkJdmFsIHw9IChwYXJ0c1swXSA8PCAyNCkgfCAocGFydHNbMV0gPDwgMTYpIHwgKHBhcnRzWzJdIDw8IDgpOwotCQlicmVhazsKLQl9Ci0JaWYgKGFkZHIgIT0gTlVMTCkKLQkJYWRkci0+c19hZGRyID0gaHRvbmwodmFsKTsKLQlyZXR1cm4gKDEpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvY29tbW9uL2xpYi9saWJjL3N0ZGxpYi9yYW5kb20uYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2NvbW1vbi9saWIvbGliYy9zdGRsaWIvcmFuZG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc1MDNjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2NvbW1vbi9saWIvbGliYy9zdGRsaWIvcmFuZG9tLmMKQEAgLTAsMCArMSw1MzAgQEAKKy8qCSROZXRCU0Q6IHJhbmRvbS5jLHYgMS40IDIwMTQvMDYvMTIgMjA6NTk6NDYgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiAhZGVmaW5lZChfS0VSTkVMKSAmJiAhZGVmaW5lZChfU1RBTkRBTE9ORSkKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZiAwCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmFuZG9tLmMJOC4yIChCZXJrZWxleSkgNS8xOS85NSI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogcmFuZG9tLmMsdiAxLjQgMjAxNC8wNi8xMiAyMDo1OTo0NiBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSAibmFtZXNwYWNlLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgInJlZW50cmFudC5oIgorCisjaWZkZWYgX193ZWFrX2FsaWFzCitfX3dlYWtfYWxpYXMoaW5pdHN0YXRlLF9pbml0c3RhdGUpCitfX3dlYWtfYWxpYXMocmFuZG9tLF9yYW5kb20pCitfX3dlYWtfYWxpYXMoc2V0c3RhdGUsX3NldHN0YXRlKQorX193ZWFrX2FsaWFzKHNyYW5kb20sX3NyYW5kb20pCisjZW5kaWYKKworCisjaWZkZWYgX1JFRU5UUkFOVAorc3RhdGljIG11dGV4X3QgcmFuZG9tX211dGV4ID0gTVVURVhfSU5JVElBTElaRVI7CisjZW5kaWYKKyNlbHNlCisjaW5jbHVkZSA8bGliL2xpYmtlcm4vbGlia2Vybi5oPgorI2RlZmluZSBtdXRleF9sb2NrKGEpCSh2b2lkKTAKKyNkZWZpbmUgbXV0ZXhfdW5sb2NrKGEpICh2b2lkKTAKKyNlbmRpZgorCisjaWZuZGVmIFNNQUxMX1JBTkRPTQorc3RhdGljIHZvaWQgc3JhbmRvbV91bmxvY2tlZCh1bnNpZ25lZCBpbnQpOworc3RhdGljIGxvbmcgcmFuZG9tX3VubG9ja2VkKHZvaWQpOworCisjZGVmaW5lIFVTRV9CRVRURVJfUkFORE9NCisKKy8qCisgKiByYW5kb20uYzoKKyAqCisgKiBBbiBpbXByb3ZlZCByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gcGFja2FnZS4gIEluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZAorICogcmFuZCgpL3NyYW5kKCkgbGlrZSBpbnRlcmZhY2UsIHRoaXMgcGFja2FnZSBhbHNvIGhhcyBhIHNwZWNpYWwgc3RhdGUgaW5mbworICogaW50ZXJmYWNlLiAgVGhlIGluaXRzdGF0ZSgpIHJvdXRpbmUgaXMgY2FsbGVkIHdpdGggYSBzZWVkLCBhbiBhcnJheSBvZgorICogYnl0ZXMsIGFuZCBhIGNvdW50IG9mIGhvdyBtYW55IGJ5dGVzIGFyZSBiZWluZyBwYXNzZWQgaW47IHRoaXMgYXJyYXkgaXMKKyAqIHRoZW4gaW5pdGlhbGl6ZWQgdG8gY29udGFpbiBpbmZvcm1hdGlvbiBmb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIHdpdGgKKyAqIHRoYXQgbXVjaCBzdGF0ZSBpbmZvcm1hdGlvbi4gIEdvb2Qgc2l6ZXMgZm9yIHRoZSBhbW91bnQgb2Ygc3RhdGUKKyAqIGluZm9ybWF0aW9uIGFyZSAzMiwgNjQsIDEyOCwgYW5kIDI1NiBieXRlcy4gIFRoZSBzdGF0ZSBjYW4gYmUgc3dpdGNoZWQgYnkKKyAqIGNhbGxpbmcgdGhlIHNldHN0YXRlKCkgcm91dGluZSB3aXRoIHRoZSBzYW1lIGFycmF5IGFzIHdhcyBpbml0aWFsbGl6ZWQKKyAqIHdpdGggaW5pdHN0YXRlKCkuICBCeSBkZWZhdWx0LCB0aGUgcGFja2FnZSBydW5zIHdpdGggMTI4IGJ5dGVzIG9mIHN0YXRlCisgKiBpbmZvcm1hdGlvbiBhbmQgZ2VuZXJhdGVzIGZhciBiZXR0ZXIgcmFuZG9tIG51bWJlcnMgdGhhbiBhIGxpbmVhcgorICogY29uZ3J1ZW50aWFsIGdlbmVyYXRvci4gIElmIHRoZSBhbW91bnQgb2Ygc3RhdGUgaW5mb3JtYXRpb24gaXMgbGVzcyB0aGFuCisgKiAzMiBieXRlcywgYSBzaW1wbGUgbGluZWFyIGNvbmdydWVudGlhbCBSLk4uRy4gaXMgdXNlZC4KKyAqCisgKiBJbnRlcm5hbGx5LCB0aGUgc3RhdGUgaW5mb3JtYXRpb24gaXMgdHJlYXRlZCBhcyBhbiBhcnJheSBvZiBpbnRzOyB0aGUKKyAqIHplcm9ldGggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdGhlIHR5cGUgb2YgUi5OLkcuIGJlaW5nIHVzZWQgKHNtYWxsCisgKiBpbnRlZ2VyKTsgdGhlIHJlbWFpbmRlciBvZiB0aGUgYXJyYXkgaXMgdGhlIHN0YXRlIGluZm9ybWF0aW9uIGZvciB0aGUKKyAqIFIuTi5HLiAgVGh1cywgMzIgYnl0ZXMgb2Ygc3RhdGUgaW5mb3JtYXRpb24gd2lsbCBnaXZlIDcgaW50cyB3b3J0aCBvZgorICogc3RhdGUgaW5mb3JtYXRpb24sIHdoaWNoIHdpbGwgYWxsb3cgYSBkZWdyZWUgc2V2ZW4gcG9seW5vbWlhbC4gIChOb3RlOgorICogdGhlIHplcm9ldGggd29yZCBvZiBzdGF0ZSBpbmZvcm1hdGlvbiBhbHNvIGhhcyBzb21lIG90aGVyIGluZm9ybWF0aW9uCisgKiBzdG9yZWQgaW4gaXQgLS0gc2VlIHNldHN0YXRlKCkgZm9yIGRldGFpbHMpLgorICogCisgKiBUaGUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIHRlY2huaXF1ZSBpcyBhIGxpbmVhciBmZWVkYmFjayBzaGlmdCByZWdpc3RlcgorICogYXBwcm9hY2gsIGVtcGxveWluZyB0cmlub21pYWxzIChzaW5jZSB0aGVyZSBhcmUgZmV3ZXIgdGVybXMgdG8gc3VtIHVwIHRoYXQKKyAqIHdheSkuICBJbiB0aGlzIGFwcHJvYWNoLCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IG9mIGFsbCB0aGUgbnVtYmVycyBpbgorICogdGhlIHN0YXRlIHRhYmxlIHdpbGwgYWN0IGFzIGEgbGluZWFyIGZlZWRiYWNrIHNoaWZ0IHJlZ2lzdGVyLCBhbmQgd2lsbAorICogaGF2ZSBwZXJpb2QgMl5kZWcgLSAxICh3aGVyZSBkZWcgaXMgdGhlIGRlZ3JlZSBvZiB0aGUgcG9seW5vbWlhbCBiZWluZworICogdXNlZCwgYXNzdW1pbmcgdGhhdCB0aGUgcG9seW5vbWlhbCBpcyBpcnJlZHVjaWJsZSBhbmQgcHJpbWl0aXZlKS4gIFRoZQorICogaGlnaGVyIG9yZGVyIGJpdHMgd2lsbCBoYXZlIGxvbmdlciBwZXJpb2RzLCBzaW5jZSB0aGVpciB2YWx1ZXMgYXJlIGFsc28KKyAqIGluZmx1ZW5jZWQgYnkgcHNldWRvLXJhbmRvbSBjYXJyaWVzIG91dCBvZiB0aGUgbG93ZXIgYml0cy4gIFRoZSB0b3RhbAorICogcGVyaW9kIG9mIHRoZSBnZW5lcmF0b3IgaXMgYXBwcm94aW1hdGVseSBkZWcqKDIqKmRlZyAtIDEpOyB0aHVzIGRvdWJsaW5nCisgKiB0aGUgYW1vdW50IG9mIHN0YXRlIGluZm9ybWF0aW9uIGhhcyBhIHZhc3QgaW5mbHVlbmNlIG9uIHRoZSBwZXJpb2Qgb2YgdGhlCisgKiBnZW5lcmF0b3IuICBOb3RlOiB0aGUgZGVnKigyKipkZWcgLSAxKSBpcyBhbiBhcHByb3hpbWF0aW9uIG9ubHkgZ29vZCBmb3IKKyAqIGxhcmdlIGRlZywgd2hlbiB0aGUgcGVyaW9kIG9mIHRoZSBzaGlmdCByZWdpc3RlciBpcyB0aGUgZG9taW5hbnQgZmFjdG9yLgorICogV2l0aCBkZWcgZXF1YWwgdG8gc2V2ZW4sIHRoZSBwZXJpb2QgaXMgYWN0dWFsbHkgbXVjaCBsb25nZXIgdGhhbiB0aGUKKyAqIDcqKDIqKjcgLSAxKSBwcmVkaWN0ZWQgYnkgdGhpcyBmb3JtdWxhLgorICoKKyAqIE1vZGlmaWVkIDI4IERlY2VtYmVyIDE5OTQgYnkgSmFjb2IgUy4gUm9zZW5iZXJnLgorICogVGhlIGZvbGxvd2luZyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlOgorICogQWxsIHJlZmVyZW5jZXMgdG8gdGhlIHR5cGUgdV9pbnQgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gdW5zaWduZWQgbG9uZy4KKyAqIEFsbCByZWZlcmVuY2VzIHRvIHR5cGUgaW50IGhhdmUgYmVlbiBjaGFuZ2VkIHRvIHR5cGUgbG9uZy4gIE90aGVyCisgKiBjbGVhbnVwcyBoYXZlIGJlZW4gbWFkZSBhcyB3ZWxsLiAgQSB3YXJuaW5nIGZvciBib3RoIGluaXRzdGF0ZSBhbmQKKyAqIHNldHN0YXRlIGhhcyBiZWVuIGluc2VydGVkIHRvIHRoZSBlZmZlY3QgdGhhdCBvbiBTcGFyYyBwbGF0Zm9ybXMKKyAqIHRoZSAnYXJnX3N0YXRlJyB2YXJpYWJsZSBtdXN0IGJlIGZvcmNlZCB0byBiZWdpbiBvbiB3b3JkIGJvdW5kYXJpZXMuCisgKiBUaGlzIGNhbiBiZSBlYXNpbHkgZG9uZSBieSBjYXN0aW5nIGEgbG9uZyBpbnRlZ2VyIGFycmF5IHRvIGNoYXIgKi4KKyAqIFRoZSBvdmVyYWxsIGxvZ2ljIGhhcyBiZWVuIGxlZnQgU1RSSUNUTFkgYWxvbmUuICBUaGlzIHNvZnR3YXJlIHdhcworICogdGVzdGVkIG9uIGJvdGggYSBWQVggYW5kIFN1biBTcGFjc1N0YXRpb24gd2l0aCBleGFjdGx5IHRoZSBzYW1lCisgKiByZXN1bHRzLiAgVGhlIG5ldyB2ZXJzaW9uIGFuZCB0aGUgb3JpZ2luYWwgZ2l2ZSBJREVOVElDQUwgcmVzdWx0cy4KKyAqIFRoZSBuZXcgdmVyc2lvbiBpcyBzb21ld2hhdCBmYXN0ZXIgdGhhbiB0aGUgb3JpZ2luYWwuICBBcyB0aGUKKyAqIGRvY3VtZW50YXRpb24gc2F5czogICJCeSBkZWZhdWx0LCB0aGUgcGFja2FnZSBydW5zIHdpdGggMTI4IGJ5dGVzIG9mCisgKiBzdGF0ZSBpbmZvcm1hdGlvbiBhbmQgZ2VuZXJhdGVzIGZhciBiZXR0ZXIgcmFuZG9tIG51bWJlcnMgdGhhbiBhIGxpbmVhcgorICogY29uZ3J1ZW50aWFsIGdlbmVyYXRvci4gIElmIHRoZSBhbW91bnQgb2Ygc3RhdGUgaW5mb3JtYXRpb24gaXMgbGVzcyB0aGFuCisgKiAzMiBieXRlcywgYSBzaW1wbGUgbGluZWFyIGNvbmdydWVudGlhbCBSLk4uRy4gaXMgdXNlZC4iICBGb3IgYSBidWZmZXIgb2YKKyAqIDEyOCBieXRlcywgdGhpcyBuZXcgdmVyc2lvbiBydW5zIGFib3V0IDE5IHBlcmNlbnQgZmFzdGVyIGFuZCBmb3IgYSAxNgorICogYnl0ZSBidWZmZXIgaXQgaXMgYWJvdXQgNSBwZXJjZW50IGZhc3Rlci4KKyAqCisgKiBNb2RpZmllZCAwNyBKYW51YXJ5IDIwMDIgYnkgSmFzb24gUi4gVGhvcnBlLgorICogVGhlIGZvbGxvd2luZyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlOgorICogQWxsIHRoZSByZWZlcmVuY2VzIHRvICJsb25nIiBoYXZlIGJlZW4gY2hhbmdlZCBiYWNrIHRvICJpbnQiLiAgVGhpcworICogZml4ZXMgbWVtb3J5IGNvcnJ1cHRpb24gcHJvYmxlbXMgb24gTFA2NCBwbGF0Zm9ybXMuCisgKi8KKworLyoKKyAqIEZvciBlYWNoIG9mIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9ycywgd2UgaGF2ZSBhCisgKiBicmVhayB2YWx1ZSBvbiB0aGUgYW1vdW50IG9mIHN0YXRlIGluZm9ybWF0aW9uICh5b3UgbmVlZCBhdCBsZWFzdCB0aGlzCisgKiBtYW55IGJ5dGVzIG9mIHN0YXRlIGluZm8gdG8gc3VwcG9ydCB0aGlzIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yKSwgYSBkZWdyZWUKKyAqIGZvciB0aGUgcG9seW5vbWlhbCAoYWN0dWFsbHkgYSB0cmlub21pYWwpIHRoYXQgdGhlIFIuTi5HLiBpcyBiYXNlZCBvbiwgYW5kCisgKiB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIHRoZSB0d28gbG93ZXIgb3JkZXIgY29lZmZpY2llbnRzIG9mIHRoZSB0cmlub21pYWwuCisgKi8KKyNkZWZpbmUJVFlQRV8wCQkwCQkvKiBsaW5lYXIgY29uZ3J1ZW50aWFsICovCisjZGVmaW5lCUJSRUFLXzAJCTgKKyNkZWZpbmUJREVHXzAJCTAKKyNkZWZpbmUJU0VQXzAJCTAKKworI2RlZmluZQlUWVBFXzEJCTEJCS8qIHgqKjcgKyB4KiozICsgMSAqLworI2RlZmluZQlCUkVBS18xCQkzMgorI2RlZmluZQlERUdfMQkJNworI2RlZmluZQlTRVBfMQkJMworCisjZGVmaW5lCVRZUEVfMgkJMgkJLyogeCoqMTUgKyB4ICsgMSAqLworI2RlZmluZQlCUkVBS18yCQk2NAorI2RlZmluZQlERUdfMgkJMTUKKyNkZWZpbmUJU0VQXzIJCTEKKworI2RlZmluZQlUWVBFXzMJCTMJCS8qIHgqKjMxICsgeCoqMyArIDEgKi8KKyNkZWZpbmUJQlJFQUtfMwkJMTI4CisjZGVmaW5lCURFR18zCQkzMQorI2RlZmluZQlTRVBfMwkJMworCisjZGVmaW5lCVRZUEVfNAkJNAkJLyogeCoqNjMgKyB4ICsgMSAqLworI2RlZmluZQlCUkVBS180CQkyNTYKKyNkZWZpbmUJREVHXzQJCTYzCisjZGVmaW5lCVNFUF80CQkxCisKKy8qCisgKiBBcnJheSB2ZXJzaW9ucyBvZiB0aGUgYWJvdmUgaW5mb3JtYXRpb24gdG8gbWFrZSBjb2RlIHJ1biBmYXN0ZXIgLS0KKyAqIHJlbGllcyBvbiBmYWN0IHRoYXQgVFlQRV9pID09IGkuCisgKi8KKyNkZWZpbmUJTUFYX1RZUEVTCTUJCS8qIG1heCBudW1iZXIgb2YgdHlwZXMgYWJvdmUgKi8KKworc3RhdGljIGNvbnN0IGludCBkZWdyZWVzW01BWF9UWVBFU10gPQl7IERFR18wLCBERUdfMSwgREVHXzIsIERFR18zLCBERUdfNCB9Oworc3RhdGljIGNvbnN0IGludCBzZXBzW01BWF9UWVBFU10gPQl7IFNFUF8wLCBTRVBfMSwgU0VQXzIsIFNFUF8zLCBTRVBfNCB9OworCisvKgorICogSW5pdGlhbGx5LCBldmVyeXRoaW5nIGlzIHNldCB1cCBhcyBpZiBmcm9tOgorICoKKyAqCWluaXRzdGF0ZSgxLCAmcmFuZHRibCwgMTI4KTsKKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBpbml0aWFsaXphdGlvbiB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCBzcmFuZG9tKCkKKyAqIGFkdmFuY2VzIHRoZSBmcm9udCBhbmQgcmVhciBwb2ludGVycyAxMCpyYW5kX2RlZyB0aW1lcywgYW5kIGhlbmNlIHRoZQorICogcmVhciBwb2ludGVyIHdoaWNoIHN0YXJ0cyBhdCAwIHdpbGwgYWxzbyBlbmQgdXAgYXQgemVybzsgdGh1cyB0aGUgemVyb2V0aAorICogZWxlbWVudCBvZiB0aGUgc3RhdGUgaW5mb3JtYXRpb24sIHdoaWNoIGNvbnRhaW5zIGluZm8gYWJvdXQgdGhlIGN1cnJlbnQKKyAqIHBvc2l0aW9uIG9mIHRoZSByZWFyIHBvaW50ZXIgaXMganVzdAorICoKKyAqCU1BWF9UWVBFUyAqIChycHRyIC0gc3RhdGUpICsgVFlQRV8zID09IFRZUEVfMy4KKyAqLworCisvKiBMSU5URUQgKi8KK3N0YXRpYyBpbnQgcmFuZHRibFtERUdfMyArIDFdID0geworCVRZUEVfMywKKyNpZmRlZiBVU0VfQkVUVEVSX1JBTkRPTQorCTB4OTkxNTM5YjEsIDB4MTZhNWJjZTMsIDB4Njc3NGE0Y2QsCisJMHgzZTAxNTExZSwgMHg0ZTUwOGFhYSwgMHg2MTA0OGMwNSwKKwkweGY1NTAwNjE3LCAweDg0NmI3MTE1LCAweDZhMTk4OTJjLAorCTB4ODk2YTk3YWYsIDB4ZGI0OGY5MzYsIDB4MTQ4OTg0NTQsCisJMHgzN2ZmZDEwNiwgMHhiNThiZmY5YywgMHg1OWUxNzEwNCwKKwkweGNmOTE4YTQ5LCAweDA5Mzc4YzgzLCAweDUyYzdhNDcxLAorCTB4OGQyOTNlYTksIDB4MWY0ZmMzMDEsIDB4YzNkYjcxYmUsCisJMHgzOWI0NGUxYywgMHhmOGE0NGVmOSwgMHg0YzhiODBiMSwKKwkweDE5ZWRjMzI4LCAweDg3YmY0YmRkLCAweGM5YjI0MGU1LAorCTB4ZTllZTRiMWIsIDB4NDM4MmFlZTcsIDB4NTM1YjZiNDEsCisJMHhmM2JlYzVkYSwKKyNlbHNlCisJMHg5YTMxOTAzOSwgMHgzMmQ5YzAyNCwgMHg5YjY2MzE4MiwKKwkweDVkYTFmMzQyLCAweGRlM2I4MWUwLCAweGRmMGE2ZmI1LAorCTB4ZjEwM2JjMDIsIDB4NDhmMzQwZmIsIDB4NzQ0OWU1NmIsCisJMHhiZWIxZGJiMCwgMHhhYjVjNTkxOCwgMHg5NDY1NTRmZCwKKwkweDhjMmU2ODBmLCAweGViM2Q3OTlmLCAweGIxMWVlMGI3LAorCTB4MmQ0MzZiODYsIDB4ZGE2NzJlMmEsIDB4MTU4OGNhODgsCisJMHhlMzY5NzM1ZCwgMHg5MDRmMzVmNywgMHhkNzE1OGZkNiwKKwkweDZmYTZmMDUxLCAweDYxNmU2Yjk2LCAweGFjOTRlZmRjLAorCTB4MzY0MTNmOTMsIDB4YzYyMmMyOTgsIDB4ZjVhNDJhYjgsCisJMHg4YTg4ZDc3YiwgMHhmNWFkOWQwZSwgMHg4OTk5MjIwYiwKKwkweDI3ZmI0N2I5LAorI2VuZGlmIC8qIFVTRV9CRVRURVJfUkFORE9NICovCit9OworCisvKgorICogZnB0ciBhbmQgcnB0ciBhcmUgdHdvIHBvaW50ZXJzIGludG8gdGhlIHN0YXRlIGluZm8sIGEgZnJvbnQgYW5kIGEgcmVhcgorICogcG9pbnRlci4gIFRoZXNlIHR3byBwb2ludGVycyBhcmUgYWx3YXlzIHJhbmRfc2VwIHBsYWNlcyBhcGFydHMsIGFzIHRoZXkKKyAqIGN5Y2xlIGN5Y2xpY2FsbHkgdGhyb3VnaCB0aGUgc3RhdGUgaW5mb3JtYXRpb24uICAoWWVzLCB0aGlzIGRvZXMgbWVhbiB3ZQorICogY291bGQgZ2V0IGF3YXkgd2l0aCBqdXN0IG9uZSBwb2ludGVyLCBidXQgdGhlIGNvZGUgZm9yIHJhbmRvbSgpIGlzIG1vcmUKKyAqIGVmZmljaWVudCB0aGlzIHdheSkuICBUaGUgcG9pbnRlcnMgYXJlIGxlZnQgcG9zaXRpb25lZCBhcyB0aGV5IHdvdWxkIGJlCisgKiBmcm9tIHRoZSBjYWxsCisgKgorICoJaW5pdHN0YXRlKDEsIHJhbmR0YmwsIDEyOCk7CisgKgorICogKFRoZSBwb3NpdGlvbiBvZiB0aGUgcmVhciBwb2ludGVyLCBycHRyLCBpcyByZWFsbHkgMCAoYXMgZXhwbGFpbmVkIGFib3ZlCisgKiBpbiB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcmFuZHRibCkgYmVjYXVzZSB0aGUgc3RhdGUgdGFibGUgcG9pbnRlciBpcyBzZXQKKyAqIHRvIHBvaW50IHRvIHJhbmR0YmxbMV0gKGFzIGV4cGxhaW5lZCBiZWxvdykuCisgKi8KK3N0YXRpYyBpbnQgKmZwdHIgPSAmcmFuZHRibFtTRVBfMyArIDFdOworc3RhdGljIGludCAqcnB0ciA9ICZyYW5kdGJsWzFdOworCisvKgorICogVGhlIGZvbGxvd2luZyB0aGluZ3MgYXJlIHRoZSBwb2ludGVyIHRvIHRoZSBzdGF0ZSBpbmZvcm1hdGlvbiB0YWJsZSwgdGhlCisgKiB0eXBlIG9mIHRoZSBjdXJyZW50IGdlbmVyYXRvciwgdGhlIGRlZ3JlZSBvZiB0aGUgY3VycmVudCBwb2x5bm9taWFsIGJlaW5nCisgKiB1c2VkLCBhbmQgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiB0aGUgdHdvIHBvaW50ZXJzLiAgTm90ZSB0aGF0IGZvciBlZmZpY2llbmN5CisgKiBvZiByYW5kb20oKSwgd2UgcmVtZW1iZXIgdGhlIGZpcnN0IGxvY2F0aW9uIG9mIHRoZSBzdGF0ZSBpbmZvcm1hdGlvbiwgbm90CisgKiB0aGUgemVyb2V0aC4gIEhlbmNlIGl0IGlzIHZhbGlkIHRvIGFjY2VzcyBzdGF0ZVstMV0sIHdoaWNoIGlzIHVzZWQgdG8KKyAqIHN0b3JlIHRoZSB0eXBlIG9mIHRoZSBSLk4uRy4gIEFsc28sIHdlIHJlbWVtYmVyIHRoZSBsYXN0IGxvY2F0aW9uLCBzaW5jZQorICogdGhpcyBpcyBtb3JlIGVmZmljaWVudCB0aGFuIGluZGV4aW5nIGV2ZXJ5IHRpbWUgdG8gZmluZCB0aGUgYWRkcmVzcyBvZgorICogdGhlIGxhc3QgZWxlbWVudCB0byBzZWUgaWYgdGhlIGZyb250IGFuZCByZWFyIHBvaW50ZXJzIGhhdmUgd3JhcHBlZC4KKyAqLworc3RhdGljIGludCAqc3RhdGUgPSAmcmFuZHRibFsxXTsKK3N0YXRpYyBpbnQgcmFuZF90eXBlID0gVFlQRV8zOworc3RhdGljIGludCByYW5kX2RlZyA9IERFR18zOworc3RhdGljIGludCByYW5kX3NlcCA9IFNFUF8zOworc3RhdGljIGludCAqZW5kX3B0ciA9ICZyYW5kdGJsW0RFR18zICsgMV07CisKKy8qCisgKiBzcmFuZG9tOgorICoKKyAqIEluaXRpYWxpemUgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGJhc2VkIG9uIHRoZSBnaXZlbiBzZWVkLiAgSWYgdGhlCisgKiB0eXBlIGlzIHRoZSB0cml2aWFsIG5vLXN0YXRlLWluZm9ybWF0aW9uIHR5cGUsIGp1c3QgcmVtZW1iZXIgdGhlIHNlZWQuCisgKiBPdGhlcndpc2UsIGluaXRpYWxpemVzIHN0YXRlW10gYmFzZWQgb24gdGhlIGdpdmVuICJzZWVkIiB2aWEgYSBsaW5lYXIKKyAqIGNvbmdydWVudGlhbCBnZW5lcmF0b3IuICBUaGVuLCB0aGUgcG9pbnRlcnMgYXJlIHNldCB0byBrbm93biBsb2NhdGlvbnMKKyAqIHRoYXQgYXJlIGV4YWN0bHkgcmFuZF9zZXAgcGxhY2VzIGFwYXJ0LiAgTGFzdGx5LCBpdCBjeWNsZXMgdGhlIHN0YXRlCisgKiBpbmZvcm1hdGlvbiBhIGdpdmVuIG51bWJlciBvZiB0aW1lcyB0byBnZXQgcmlkIG9mIGFueSBpbml0aWFsIGRlcGVuZGVuY2llcworICogaW50cm9kdWNlZCBieSB0aGUgTC5DLlIuTi5HLiAgTm90ZSB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBvZiByYW5kdGJsW10KKyAqIGZvciBkZWZhdWx0IHVzYWdlIHJlbGllcyBvbiB2YWx1ZXMgcHJvZHVjZWQgYnkgdGhpcyByb3V0aW5lLgorICovCitzdGF0aWMgdm9pZAorc3JhbmRvbV91bmxvY2tlZCh1bnNpZ25lZCBpbnQgeCkKK3sKKwlpbnQgaTsKKworCWlmIChyYW5kX3R5cGUgPT0gVFlQRV8wKQorCQlzdGF0ZVswXSA9IHg7CisJZWxzZSB7CisJCXN0YXRlWzBdID0geDsKKwkJZm9yIChpID0gMTsgaSA8IHJhbmRfZGVnOyBpKyspIHsKKyNpZmRlZiBVU0VfQkVUVEVSX1JBTkRPTQorCQkJaW50IHgxLCBoaSwgbG8sIHQ7CisKKwkJCS8qCisJCQkgKiBDb21wdXRlIHhbbiArIDFdID0gKDdeNSAqIHhbbl0pIG1vZCAoMl4zMSAtIDEpLgorCQkJICogRnJvbSAiUmFuZG9tIG51bWJlciBnZW5lcmF0b3JzOiBnb29kIG9uZXMgYXJlIGhhcmQKKwkJCSAqIHRvIGZpbmQiLCBQYXJrIGFuZCBNaWxsZXIsIENvbW11bmljYXRpb25zIG9mIHRoZSBBQ00sCisJCQkgKiB2b2wuIDMxLCBuby4gMTAsCisJCQkgKiBPY3RvYmVyIDE5ODgsIHAuIDExOTUuCisJCQkgKi8KKwkJCXgxID0gc3RhdGVbaSAtIDFdOworCQkJaGkgPSB4MSAvIDEyNzc3MzsKKwkJCWxvID0geDEgJSAxMjc3NzM7CisJCQl0ID0gMTY4MDcgKiBsbyAtIDI4MzYgKiBoaTsKKwkJCWlmICh0IDw9IDApCisJCQkJdCArPSAweDdmZmZmZmZmOworCQkJc3RhdGVbaV0gPSB0OworI2Vsc2UKKwkJCXN0YXRlW2ldID0gMTEwMzUxNTI0NSAqIHN0YXRlW2kgLSAxXSArIDEyMzQ1OworI2VuZGlmIC8qIFVTRV9CRVRURVJfUkFORE9NICovCisJCX0KKwkJZnB0ciA9ICZzdGF0ZVtyYW5kX3NlcF07CisJCXJwdHIgPSAmc3RhdGVbMF07CisJCWZvciAoaSA9IDA7IGkgPCAxMCAqIHJhbmRfZGVnOyBpKyspCisJCQkodm9pZClyYW5kb21fdW5sb2NrZWQoKTsKKwl9Cit9CisKK3ZvaWQKK3NyYW5kb20odW5zaWduZWQgaW50IHgpCit7CisKKwltdXRleF9sb2NrKCZyYW5kb21fbXV0ZXgpOworCXNyYW5kb21fdW5sb2NrZWQoeCk7CisJbXV0ZXhfdW5sb2NrKCZyYW5kb21fbXV0ZXgpOworfQorCisvKgorICogaW5pdHN0YXRlOgorICoKKyAqIEluaXRpYWxpemUgdGhlIHN0YXRlIGluZm9ybWF0aW9uIGluIHRoZSBnaXZlbiBhcnJheSBvZiBuIGJ5dGVzIGZvciBmdXR1cmUKKyAqIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbi4gIEJhc2VkIG9uIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgYXJlIGdpdmVuLCBhbmQKKyAqIHRoZSBicmVhayB2YWx1ZXMgZm9yIHRoZSBkaWZmZXJlbnQgUi5OLkcuJ3MsIHdlIGNob29zZSB0aGUgYmVzdCAobGFyZ2VzdCkKKyAqIG9uZSB3ZSBjYW4gYW5kIHNldCB0aGluZ3MgdXAgZm9yIGl0LiAgc3JhbmRvbSgpIGlzIHRoZW4gY2FsbGVkIHRvCisgKiBpbml0aWFsaXplIHRoZSBzdGF0ZSBpbmZvcm1hdGlvbi4KKyAqIAorICogTm90ZSB0aGF0IG9uIHJldHVybiBmcm9tIHNyYW5kb20oKSwgd2Ugc2V0IHN0YXRlWy0xXSB0byBiZSB0aGUgdHlwZQorICogbXVsdGlwbGV4ZWQgd2l0aCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcmVhciBwb2ludGVyOyB0aGlzIGlzIHNvCisgKiBzdWNjZXNzaXZlIGNhbGxzIHRvIGluaXRzdGF0ZSgpIHdvbid0IGxvc2UgdGhpcyBpbmZvcm1hdGlvbiBhbmQgd2lsbCBiZQorICogYWJsZSB0byByZXN0YXJ0IHdpdGggc2V0c3RhdGUoKS4KKyAqIAorICogTm90ZTogdGhlIGZpcnN0IHRoaW5nIHdlIGRvIGlzIHNhdmUgdGhlIGN1cnJlbnQgc3RhdGUsIGlmIGFueSwganVzdCBsaWtlCisgKiBzZXRzdGF0ZSgpIHNvIHRoYXQgaXQgZG9lc24ndCBtYXR0ZXIgd2hlbiBpbml0c3RhdGUgaXMgY2FsbGVkLgorICoKKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBvbGQgc3RhdGUuCisgKgorICogTm90ZTogVGhlIFNwYXJjIHBsYXRmb3JtIHJlcXVpcmVzIHRoYXQgYXJnX3N0YXRlIGJlZ2luIG9uIGFuIGludAorICogd29yZCBib3VuZGFyeTsgb3RoZXJ3aXNlIGEgYnVzIGVycm9yIHdpbGwgb2NjdXIuIEV2ZW4gc28sIGxpbnQgd2lsbAorICogY29tcGxhaW4gYWJvdXQgbWlzLWFsaWdubWVudCwgYnV0IHlvdSBzaG91bGQgZGlzcmVnYXJkIHRoZXNlIG1lc3NhZ2VzLgorICovCitjaGFyICoKK2luaXRzdGF0ZSgKKwl1bnNpZ25lZCBpbnQgc2VlZCwJCS8qIHNlZWQgZm9yIFIuTi5HLiAqLworCWNoYXIgKmFyZ19zdGF0ZSwJCS8qIHBvaW50ZXIgdG8gc3RhdGUgYXJyYXkgKi8KKwlzaXplX3QgbikJCQkvKiAjIGJ5dGVzIG9mIHN0YXRlIGluZm8gKi8KK3sKKwl2b2lkICpvc3RhdGUgPSAodm9pZCAqKSgmc3RhdGVbLTFdKTsKKwlpbnQgKmludF9hcmdfc3RhdGU7CisKKwlfRElBR0FTU0VSVChhcmdfc3RhdGUgIT0gTlVMTCk7CisKKwlpbnRfYXJnX3N0YXRlID0gKGludCAqKSh2b2lkICopYXJnX3N0YXRlOworCisJbXV0ZXhfbG9jaygmcmFuZG9tX211dGV4KTsKKwlpZiAocmFuZF90eXBlID09IFRZUEVfMCkKKwkJc3RhdGVbLTFdID0gcmFuZF90eXBlOworCWVsc2UKKwkJc3RhdGVbLTFdID0gTUFYX1RZUEVTICogKGludCkocnB0ciAtIHN0YXRlKSArIHJhbmRfdHlwZTsKKwlpZiAobiA8IEJSRUFLXzApIHsKKwkJbXV0ZXhfdW5sb2NrKCZyYW5kb21fbXV0ZXgpOworCQlyZXR1cm4gKE5VTEwpOworCX0gZWxzZSBpZiAobiA8IEJSRUFLXzEpIHsKKwkJcmFuZF90eXBlID0gVFlQRV8wOworCQlyYW5kX2RlZyA9IERFR18wOworCQlyYW5kX3NlcCA9IFNFUF8wOworCX0gZWxzZSBpZiAobiA8IEJSRUFLXzIpIHsKKwkJcmFuZF90eXBlID0gVFlQRV8xOworCQlyYW5kX2RlZyA9IERFR18xOworCQlyYW5kX3NlcCA9IFNFUF8xOworCX0gZWxzZSBpZiAobiA8IEJSRUFLXzMpIHsKKwkJcmFuZF90eXBlID0gVFlQRV8yOworCQlyYW5kX2RlZyA9IERFR18yOworCQlyYW5kX3NlcCA9IFNFUF8yOworCX0gZWxzZSBpZiAobiA8IEJSRUFLXzQpIHsKKwkJcmFuZF90eXBlID0gVFlQRV8zOworCQlyYW5kX2RlZyA9IERFR18zOworCQlyYW5kX3NlcCA9IFNFUF8zOworCX0gZWxzZSB7CisJCXJhbmRfdHlwZSA9IFRZUEVfNDsKKwkJcmFuZF9kZWcgPSBERUdfNDsKKwkJcmFuZF9zZXAgPSBTRVBfNDsKKwl9CisJc3RhdGUgPSAoaW50ICopIChpbnRfYXJnX3N0YXRlICsgMSk7IC8qIGZpcnN0IGxvY2F0aW9uICovCisJZW5kX3B0ciA9ICZzdGF0ZVtyYW5kX2RlZ107CS8qIG11c3Qgc2V0IGVuZF9wdHIgYmVmb3JlIHNyYW5kb20gKi8KKwlzcmFuZG9tX3VubG9ja2VkKHNlZWQpOworCWlmIChyYW5kX3R5cGUgPT0gVFlQRV8wKQorCQlpbnRfYXJnX3N0YXRlWzBdID0gcmFuZF90eXBlOworCWVsc2UKKwkJaW50X2FyZ19zdGF0ZVswXSA9IE1BWF9UWVBFUyAqIChpbnQpKHJwdHIgLSBzdGF0ZSkgKyByYW5kX3R5cGU7CisJbXV0ZXhfdW5sb2NrKCZyYW5kb21fbXV0ZXgpOworCXJldHVybigoY2hhciAqKW9zdGF0ZSk7Cit9CisKKy8qCisgKiBzZXRzdGF0ZToKKyAqCisgKiBSZXN0b3JlIHRoZSBzdGF0ZSBmcm9tIHRoZSBnaXZlbiBzdGF0ZSBhcnJheS4KKyAqCisgKiBOb3RlOiBpdCBpcyBpbXBvcnRhbnQgdGhhdCB3ZSBhbHNvIHJlbWVtYmVyIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHBvaW50ZXJzCisgKiBpbiB0aGUgY3VycmVudCBzdGF0ZSBpbmZvcm1hdGlvbiwgYW5kIHJlc3RvcmUgdGhlIGxvY2F0aW9ucyBvZiB0aGUgcG9pbnRlcnMKKyAqIGZyb20gdGhlIG9sZCBzdGF0ZSBpbmZvcm1hdGlvbi4gIFRoaXMgaXMgZG9uZSBieSBtdWx0aXBsZXhpbmcgdGhlIHBvaW50ZXIKKyAqIGxvY2F0aW9uIGludG8gdGhlIHplcm9ldGggd29yZCBvZiB0aGUgc3RhdGUgaW5mb3JtYXRpb24uCisgKgorICogTm90ZSB0aGF0IGR1ZSB0byB0aGUgb3JkZXIgaW4gd2hpY2ggdGhpbmdzIGFyZSBkb25lLCBpdCBpcyBPSyB0byBjYWxsCisgKiBzZXRzdGF0ZSgpIHdpdGggdGhlIHNhbWUgc3RhdGUgYXMgdGhlIGN1cnJlbnQgc3RhdGUuCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG9sZCBzdGF0ZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBOb3RlOiBUaGUgU3BhcmMgcGxhdGZvcm0gcmVxdWlyZXMgdGhhdCBhcmdfc3RhdGUgYmVnaW4gb24gYSBsb25nCisgKiB3b3JkIGJvdW5kYXJ5OyBvdGhlcndpc2UgYSBidXMgZXJyb3Igd2lsbCBvY2N1ci4gRXZlbiBzbywgbGludCB3aWxsCisgKiBjb21wbGFpbiBhYm91dCBtaXMtYWxpZ25tZW50LCBidXQgeW91IHNob3VsZCBkaXNyZWdhcmQgdGhlc2UgbWVzc2FnZXMuCisgKi8KK2NoYXIgKgorc2V0c3RhdGUoY2hhciAqYXJnX3N0YXRlKQkJLyogcG9pbnRlciB0byBzdGF0ZSBhcnJheSAqLworeworCWludCAqbmV3X3N0YXRlOworCWludCB0eXBlOworCWludCByZWFyOworCXZvaWQgKm9zdGF0ZSA9ICh2b2lkICopKCZzdGF0ZVstMV0pOworCisJX0RJQUdBU1NFUlQoYXJnX3N0YXRlICE9IE5VTEwpOworCisJbmV3X3N0YXRlID0gKGludCAqKSh2b2lkICopYXJnX3N0YXRlOworCXR5cGUgPSAoaW50KShuZXdfc3RhdGVbMF0gJSBNQVhfVFlQRVMpOworCXJlYXIgPSAoaW50KShuZXdfc3RhdGVbMF0gLyBNQVhfVFlQRVMpOworCisJbXV0ZXhfbG9jaygmcmFuZG9tX211dGV4KTsKKwlpZiAocmFuZF90eXBlID09IFRZUEVfMCkKKwkJc3RhdGVbLTFdID0gcmFuZF90eXBlOworCWVsc2UKKwkJc3RhdGVbLTFdID0gTUFYX1RZUEVTICogKGludCkocnB0ciAtIHN0YXRlKSArIHJhbmRfdHlwZTsKKwlzd2l0Y2godHlwZSkgeworCWNhc2UgVFlQRV8wOgorCWNhc2UgVFlQRV8xOgorCWNhc2UgVFlQRV8yOgorCWNhc2UgVFlQRV8zOgorCWNhc2UgVFlQRV80OgorCQlyYW5kX3R5cGUgPSB0eXBlOworCQlyYW5kX2RlZyA9IGRlZ3JlZXNbdHlwZV07CisJCXJhbmRfc2VwID0gc2Vwc1t0eXBlXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbXV0ZXhfdW5sb2NrKCZyYW5kb21fbXV0ZXgpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlzdGF0ZSA9IChpbnQgKikgKG5ld19zdGF0ZSArIDEpOworCWlmIChyYW5kX3R5cGUgIT0gVFlQRV8wKSB7CisJCXJwdHIgPSAmc3RhdGVbcmVhcl07CisJCWZwdHIgPSAmc3RhdGVbKHJlYXIgKyByYW5kX3NlcCkgJSByYW5kX2RlZ107CisJfQorCWVuZF9wdHIgPSAmc3RhdGVbcmFuZF9kZWddOwkJLyogc2V0IGVuZF9wdHIgdG9vICovCisJbXV0ZXhfdW5sb2NrKCZyYW5kb21fbXV0ZXgpOworCXJldHVybigoY2hhciAqKW9zdGF0ZSk7Cit9CisKKy8qCisgKiByYW5kb206CisgKgorICogSWYgd2UgYXJlIHVzaW5nIHRoZSB0cml2aWFsIFRZUEVfMCBSLk4uRy4sIGp1c3QgZG8gdGhlIG9sZCBsaW5lYXIKKyAqIGNvbmdydWVudGlhbCBiaXQuICBPdGhlcndpc2UsIHdlIGRvIG91ciBmYW5jeSB0cmlub21pYWwgc3R1ZmYsIHdoaWNoIGlzCisgKiB0aGUgc2FtZSBpbiBhbGwgdGhlIG90aGVyIGNhc2VzIGR1ZSB0byBhbGwgdGhlIGdsb2JhbCB2YXJpYWJsZXMgdGhhdCBoYXZlCisgKiBiZWVuIHNldCB1cC4gIFRoZSBiYXNpYyBvcGVyYXRpb24gaXMgdG8gYWRkIHRoZSBudW1iZXIgYXQgdGhlIHJlYXIgcG9pbnRlcgorICogaW50byB0aGUgb25lIGF0IHRoZSBmcm9udCBwb2ludGVyLiAgVGhlbiBib3RoIHBvaW50ZXJzIGFyZSBhZHZhbmNlZCB0bworICogdGhlIG5leHQgbG9jYXRpb24gY3ljbGljYWxseSBpbiB0aGUgdGFibGUuICBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIHN1bQorICogZ2VuZXJhdGVkLCByZWR1Y2VkIHRvIDMxIGJpdHMgYnkgdGhyb3dpbmcgYXdheSB0aGUgImxlYXN0IHJhbmRvbSIgbG93IGJpdC4KKyAqCisgKiBOb3RlOiB0aGUgY29kZSB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCBib3RoIHRoZSBmcm9udCBhbmQKKyAqIHJlYXIgcG9pbnRlcnMgY2FuJ3Qgd3JhcCBvbiB0aGUgc2FtZSBjYWxsIGJ5IG5vdCB0ZXN0aW5nIHRoZSByZWFyCisgKiBwb2ludGVyIGlmIHRoZSBmcm9udCBvbmUgaGFzIHdyYXBwZWQuCisgKgorICogUmV0dXJucyBhIDMxLWJpdCByYW5kb20gbnVtYmVyLgorICovCitzdGF0aWMgbG9uZworcmFuZG9tX3VubG9ja2VkKHZvaWQpCit7CisJaW50IGk7CisJaW50ICpmLCAqcjsKKworCWlmIChyYW5kX3R5cGUgPT0gVFlQRV8wKSB7CisJCWkgPSBzdGF0ZVswXTsKKwkJc3RhdGVbMF0gPSBpID0gKGkgKiAxMTAzNTE1MjQ1ICsgMTIzNDUpICYgMHg3ZmZmZmZmZjsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBVc2UgbG9jYWwgdmFyaWFibGVzIHJhdGhlciB0aGFuIHN0YXRpYyB2YXJpYWJsZXMgZm9yIHNwZWVkLgorCQkgKi8KKwkJZiA9IGZwdHI7IHIgPSBycHRyOworCQkqZiArPSAqcjsKKwkJLyogY2h1Y2tpbmcgbGVhc3QgcmFuZG9tIGJpdCAqLworCQlpID0gKCh1bnNpZ25lZCBpbnQpKmYgPj4gMSkgJiAweDdmZmZmZmZmOworCQlpZiAoKytmID49IGVuZF9wdHIpIHsKKwkJCWYgPSBzdGF0ZTsKKwkJCSsrcjsKKwkJfQorCQllbHNlIGlmICgrK3IgPj0gZW5kX3B0cikgeworCQkJciA9IHN0YXRlOworCQl9CisKKwkJZnB0ciA9IGY7IHJwdHIgPSByOworCX0KKwlyZXR1cm4oaSk7Cit9CisKK2xvbmcKK3JhbmRvbSh2b2lkKQoreworCWxvbmcgcjsKKworCW11dGV4X2xvY2soJnJhbmRvbV9tdXRleCk7CisJciA9IHJhbmRvbV91bmxvY2tlZCgpOworCW11dGV4X3VubG9jaygmcmFuZG9tX211dGV4KTsKKwlyZXR1cm4gKHIpOworfQorI2Vsc2UKK2xvbmcKK3JhbmRvbSh2b2lkKQoreworCXN0YXRpYyB1X2xvbmcgcmFuZHNlZWQgPSAxOworCWxvbmcgeCwgaGksIGxvLCB0OworIAorCS8qCisJICogQ29tcHV0ZSB4W24gKyAxXSA9ICg3XjUgKiB4W25dKSBtb2QgKDJeMzEgLSAxKS4KKwkgKiBGcm9tICJSYW5kb20gbnVtYmVyIGdlbmVyYXRvcnM6IGdvb2Qgb25lcyBhcmUgaGFyZCB0byBmaW5kIiwKKwkgKiBQYXJrIGFuZCBNaWxsZXIsIENvbW11bmljYXRpb25zIG9mIHRoZSBBQ00sIHZvbC4gMzEsIG5vLiAxMCwKKwkgKiBPY3RvYmVyIDE5ODgsIHAuIDExOTUuCisJICovCisJeCA9IHJhbmRzZWVkOworCWhpID0geCAvIDEyNzc3MzsKKwlsbyA9IHggJSAxMjc3NzM7CisJdCA9IDE2ODA3ICogbG8gLSAyODM2ICogaGk7CisJaWYgKHQgPD0gMCkKKwkJdCArPSAweDdmZmZmZmZmOworCXJhbmRzZWVkID0gdDsKKwlyZXR1cm4gKHQpOworfQorI2VuZGlmIC8qIFNNQUxMX1JBTkRPTSAqLwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vZnR3LmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9nZW4vZnR3LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL2Z0dy5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9nZW4vZnR3LmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL25mdHcuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2dlbi9uZnR3LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL25mdHcuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvZ2VuL25mdHcuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vbmljZS5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvZ2VuL25pY2UuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vbmljZS5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9nZW4vbmljZS5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9wb3Blbi5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvZ2VuL3BvcGVuLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3BvcGVuLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2dlbi9wb3Blbi5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9wc2lnbmFsLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9nZW4vcHNpZ25hbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9wc2lnbmFsLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2dlbi9wc2lnbmFsLmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3V0aW1lLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9nZW4vdXRpbWUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vdXRpbWUuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvZ2VuL3V0aW1lLmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2dlbi91dG1wLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9nZW4vdXRtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYjA3OTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9nZW4vdXRtcC5jCkBAIC0wLDAgKzEsMTA2IEBACisvKgkkTmV0QlNEOiB1dG1wLmMsdiAxLjEwIDIwMTEvMTAvMTUgMjM6MDA6MDIgY2hyaXN0b3MgRXhwICQJICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAyIFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICogYnkgQ2hyaXN0b3MgWm91bGFzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK19fUkNTSUQoIiROZXRCU0Q6IHV0bXAuYyx2IDEuMTAgMjAxMS8xMC8xNSAyMzowMDowMiBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHV0bXAuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCitzdGF0aWMgc3RydWN0IHV0bXAgdXRtcDsKK3N0YXRpYyBGSUxFICp1dDsKK3N0YXRpYyBjaGFyIHV0ZmlsZVtNQVhQQVRITEVOXSA9IF9QQVRIX1VUTVA7CisKK3ZvaWQKK3NldHV0ZW50KHZvaWQpCit7CisJaWYgKHV0ID09IE5VTEwpCisJCXJldHVybjsKKwkodm9pZClmc2Vla28odXQsIChvZmZfdCkwLCBTRUVLX1NFVCk7Cit9CisKK3N0cnVjdCB1dG1wICoKK2dldHV0ZW50KHZvaWQpCit7CisJaWYgKHV0ID09IE5VTEwpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCW9mZl90IG51bWVudHJpZXM7CisJCWlmICgodXQgPSBmb3Blbih1dGZpbGUsICJyZSIpKSA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmIChmc3RhdChmaWxlbm8odXQpLCAmc3QpID09IC0xKQorCQkJZ290byBvdXQ7CisJCS8qCisJCSAqIElmIHdlIGhhdmUgYSBhbiBvbGQgdmVyc2lvbiB1dG1wIGZpbGUgYmFpbC4KKwkJICovCisJCW51bWVudHJpZXMgPSBzdC5zdF9zaXplIC8gc2l6ZW9mKHV0bXApOworCQlpZiAoKG9mZl90KShudW1lbnRyaWVzICogc2l6ZW9mKHV0bXApKSAhPSBzdC5zdF9zaXplKQorCQkJZ290byBvdXQ7CisJfQorCWlmIChmcmVhZCgmdXRtcCwgc2l6ZW9mKHV0bXApLCAxLCB1dCkgPT0gMSkKKwkJcmV0dXJuICZ1dG1wOworb3V0OgorCSh2b2lkKWZjbG9zZSh1dCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2VuZHV0ZW50KHZvaWQpCit7CisJaWYgKHV0ICE9IE5VTEwpIHsKKwkJKHZvaWQpZmNsb3NlKHV0KTsKKwkJdXQgPSBOVUxMOworCX0KK30KKworaW50Cit1dG1wbmFtZShjb25zdCBjaGFyICpmbmFtZSkKK3sKKwlzaXplX3QgbGVuID0gc3RybGVuKGZuYW1lKTsKKworCWlmIChsZW4gPj0gc2l6ZW9mKHV0ZmlsZSkpCisJCXJldHVybiAwOworCisJLyogbXVzdCBub3QgZW5kIGluIHghICovCisJaWYgKGZuYW1lW2xlbiAtIDFdID09ICd4JykKKwkJcmV0dXJuIDA7CisKKwkodm9pZClzdHJsY3B5KHV0ZmlsZSwgZm5hbWUsIHNpemVvZih1dGZpbGUpKTsKKwllbmR1dGVudCgpOworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmNsdWRlL2lzYy9hc3NlcnRpb25zLmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmNsdWRlL2lzYy9hc3NlcnRpb25zLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvYXNzZXJ0aW9ucy5oCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmNsdWRlL2lzYy9hc3NlcnRpb25zLmgKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvZHN0LmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmNsdWRlL2lzYy9kc3QuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmNsdWRlL2lzYy9kc3QuaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaW5jbHVkZS9pc2MvZHN0LmgKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvZXZlbnRsaWIuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2luY2x1ZGUvaXNjL2V2ZW50bGliLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvZXZlbnRsaWIuaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaW5jbHVkZS9pc2MvZXZlbnRsaWIuaApkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmNsdWRlL2lzYy9oZWFwLmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmNsdWRlL2lzYy9oZWFwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvaGVhcC5oCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmNsdWRlL2lzYy9oZWFwLmgKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvbGlzdC5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaW5jbHVkZS9pc2MvbGlzdC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luY2x1ZGUvaXNjL2xpc3QuaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaW5jbHVkZS9pc2MvbGlzdC5oCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luY2x1ZGUvaXNjL21lbWNsdXN0ZXIuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2luY2x1ZGUvaXNjL21lbWNsdXN0ZXIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmNsdWRlL2lzYy9tZW1jbHVzdGVyLmgKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2luY2x1ZGUvaXNjL21lbWNsdXN0ZXIuaApkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaW5jbHVkZS9yZXNvbHZfbXQuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2luY2x1ZGUvcmVzb2x2X210LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNhOGRjYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2luY2x1ZGUvcmVzb2x2X210LmgKQEAgLTAsMCArMSw0OSBAQAorLyoJJE5ldEJTRDogcmVzb2x2X210LmgsdiAxLjEuMS4zIDIwMDkvMDQvMTIgMTY6MzU6NDQgY2hyaXN0b3MgRXhwICQJKi8KKworI2lmbmRlZiBfUkVTT0xWX01UX0gKKyNkZWZpbmUgX1JFU09MVl9NVF9ICisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjaW5jbHVkZSA8cmVzb2x2Lmg+CisKKy8qIEFjY2VzcyBmdW5jdGlvbnMgZm9yIHRoZSBsaWJyZXNvbHYgcHJpdmF0ZSBpbnRlcmZhY2UgKi8KKworaW50CV9fcmVzX2VuYWJsZV9tdCh2b2lkKTsKK2ludAlfX3Jlc19kaXNhYmxlX210KHZvaWQpOworCisvKiBQZXItdGhyZWFkIGNvbnRleHQgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworaW50CW5vX2hvc3RzX2ZhbGxiYWNrX3ByaXZhdGU7CitpbnQJcmV0cnlfc2F2ZTsKK2ludAlyZXRyeV9wcml2YXRlOworY2hhcglpbmV0X25zYXBfbnRvYV90bXBidWZbMjU1KjNdOworY2hhcglzeW1fbnRvc191bm5hbWVbMjBdOworY2hhcglzeW1fbnRvcF91bm5hbWVbMjBdOworY2hhcglwX29wdGlvbl9uYnVmWzQwXTsKK2NoYXIJcF90aW1lX25idWZbNDBdOworY2hhcglwcmVjc2l6ZV9udG9hX3JldGJ1ZltzaXplb2YgIjkwMDAwMDAwLjAwIl07CitjaGFyCWxvY19udG9hX3RtcGJ1ZltzaXplb2YKKyIxMDAwIDYwIDYwLjAwMCBOIDEwMDAgNjAgNjAuMDAwIFcgLTEyMzQ1Njc4LjAwbSA5MDAwMDAwMC4wMG0gOTAwMDAwMDAuMDBtIDkwMDAwMDAwLjAwbSJdOworY2hhcglwX3NlY3N0b2RhdGVfb3V0cHV0WzE1XTsKK30gbXRjdHhyZXNfdDsKKworLyogVGhyZWFkLXNwZWNpZmljIGRhdGEgKFRTRCkgKi8KKworbXRjdHhyZXNfdAkqX19fbXRjdHhyZXModm9pZCk7CisjZGVmaW5lIG10Y3R4cmVzCShfX19tdGN0eHJlcygpKQorCisvKiBWYXJpb3VzIHN0YXRpYyBkYXRhIHRoYXQgc2hvdWxkIGJlIFRTRCAqLworCisjZGVmaW5lIHN5bV9udG9zX3VubmFtZQkJKG10Y3R4cmVzLT5zeW1fbnRvc191bm5hbWUpCisjZGVmaW5lIHN5bV9udG9wX3VubmFtZQkJKG10Y3R4cmVzLT5zeW1fbnRvcF91bm5hbWUpCisjZGVmaW5lIGluZXRfbnNhcF9udG9hX3RtcGJ1ZgkobXRjdHhyZXMtPmluZXRfbnNhcF9udG9hX3RtcGJ1ZikKKyNkZWZpbmUgcF9vcHRpb25fbmJ1ZgkJKG10Y3R4cmVzLT5wX29wdGlvbl9uYnVmKQorI2RlZmluZSBwX3RpbWVfbmJ1ZgkJKG10Y3R4cmVzLT5wX3RpbWVfbmJ1ZikKKyNkZWZpbmUgcHJlY3NpemVfbnRvYV9yZXRidWYJKG10Y3R4cmVzLT5wcmVjc2l6ZV9udG9hX3JldGJ1ZikKKyNkZWZpbmUgbG9jX250b2FfdG1wYnVmCQkobXRjdHhyZXMtPmxvY19udG9hX3RtcGJ1ZikKKyNkZWZpbmUgcF9zZWNzdG9kYXRlX291dHB1dAkobXRjdHhyZXMtPnBfc2Vjc3RvZGF0ZV9vdXRwdXQpCisKKyNlbmRpZiAvKiBfUkVTT0xWX01UX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2luZXQvbnNhcF9hZGRyLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmV0L25zYXBfYWRkci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MzMyMDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmV0L25zYXBfYWRkci5jCkBAIC0wLDAgKzEsMTMwIEBACisvKgkkTmV0QlNEOiBuc2FwX2FkZHIuYyx2IDEuNiAyMDA5LzA0LzEyIDE3OjA3OjE3IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWYgMAorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogbnNhcF9hZGRyLmMsdiAxLjUgMjAwNS8wNy8yOCAwNjo1MTo0OCBtYXJrYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IG5zYXBfYWRkci5jLHYgMS42IDIwMDkvMDQvMTIgMTc6MDc6MTcgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgInBvcnRfYmVmb3JlLmgiCisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHJlc29sdi5oPgorI2luY2x1ZGUgPHJlc29sdl9tdC5oPgorCisjaW5jbHVkZSAicG9ydF9hZnRlci5oIgorCisjaWZkZWYgX193ZWFrX2FsaWFzCitfX3dlYWtfYWxpYXMoaW5ldF9uc2FwX2FkZHIsX2luZXRfbnNhcF9hZGRyKQorX193ZWFrX2FsaWFzKGluZXRfbnNhcF9udG9hLF9pbmV0X25zYXBfbnRvYSkKKyNlbmRpZgorCitzdGF0aWMgY2hhcgoreHRvYihpbnQgYykgeworCXJldHVybiAoYyAtICgoKGMgPj0gJzAnKSAmJiAoYyA8PSAnOScpKSA/ICcwJyA6ICc3JykpOworfQorCit1X2ludAoraW5ldF9uc2FwX2FkZHIoY29uc3QgY2hhciAqYXNjaWksIHVfY2hhciAqYmluYXJ5LCBpbnQgbWF4bGVuKSB7CisJdV9jaGFyIGMsIG5pYjsKKwl1X2ludCBsZW4gPSAwOworCisJX0RJQUdBU1NFUlQoYXNjaWkgIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoYmluYXJ5ICE9IE5VTEwpOworCisJaWYgKGFzY2lpWzBdICE9ICcwJyB8fCAoYXNjaWlbMV0gIT0gJ3gnICYmIGFzY2lpWzFdICE9ICdYJykpCisJCXJldHVybiAoMCk7CisJYXNjaWkgKz0gMjsKKworCXdoaWxlICgoYyA9ICphc2NpaSsrKSAhPSAnXDAnICYmIGxlbiA8ICh1X2ludCltYXhsZW4pIHsKKwkJaWYgKGMgPT0gJy4nIHx8IGMgPT0gJysnIHx8IGMgPT0gJy8nKQorCQkJY29udGludWU7CisJCWlmICghaXNhc2NpaShjKSkKKwkJCXJldHVybiAoMCk7CisJCWlmIChpc2xvd2VyKGMpKQorCQkJYyA9IHRvdXBwZXIoYyk7CisJCWlmIChpc3hkaWdpdChjKSkgeworCQkJbmliID0geHRvYihjKTsKKwkJCWMgPSAqYXNjaWkrKzsKKwkJCWlmIChjICE9ICdcMCcpIHsKKwkJCQljID0gdG91cHBlcihjKTsKKwkJCQlpZiAoaXN4ZGlnaXQoYykpIHsKKwkJCQkJKmJpbmFyeSsrID0gKG5pYiA8PCA0KSB8IHh0b2IoYyk7CisJCQkJCWxlbisrOworCQkJCX0gZWxzZQorCQkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJZWxzZQorCQkJCXJldHVybiAoMCk7CisJCX0KKwkJZWxzZQorCQkJcmV0dXJuICgwKTsKKwl9CisJcmV0dXJuIChsZW4pOworfQorCitjaGFyICoKK2luZXRfbnNhcF9udG9hKGludCBiaW5sZW4sIGNvbnN0IHVfY2hhciAqYmluYXJ5LCBjaGFyICphc2NpaSkgeworCWludCBuaWI7CisJaW50IGk7CisJY2hhciAqdG1wYnVmID0gaW5ldF9uc2FwX250b2FfdG1wYnVmOworCWNoYXIgKnN0YXJ0OworCisJX0RJQUdBU1NFUlQoYmluYXJ5ICE9IE5VTEwpOworCisJaWYgKGFzY2lpKQorCQlzdGFydCA9IGFzY2lpOworCWVsc2UgeworCQlhc2NpaSA9IHRtcGJ1ZjsKKwkJc3RhcnQgPSB0bXBidWY7CisJfQorCisJKmFzY2lpKysgPSAnMCc7CisJKmFzY2lpKysgPSAneCc7CisKKwlpZiAoYmlubGVuID4gMjU1KQorCQliaW5sZW4gPSAyNTU7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmlubGVuOyBpKyspIHsKKwkJbmliID0gKHVfaW50MzJfdCkqYmluYXJ5ID4+IDQ7CisJCSphc2NpaSsrID0gbmliICsgKG5pYiA8IDEwID8gJzAnIDogJzcnKTsKKwkJbmliID0gKmJpbmFyeSsrICYgMHgwZjsKKwkJKmFzY2lpKysgPSBuaWIgKyAobmliIDwgMTAgPyAnMCcgOiAnNycpOworCQlpZiAoKChpICUgMikgPT0gMCAmJiAoaSArIDEpIDwgYmlubGVuKSkKKwkJCSphc2NpaSsrID0gJy4nOworCX0KKwkqYXNjaWkgPSAnXDAnOworCXJldHVybiAoc3RhcnQpOworfQorCisvKiEgXGZpbGUgKi8KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaXNjL2V2X3N0cmVhbXMuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2lzYy9ldl9zdHJlYW1zLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaXNjL2V2X3N0cmVhbXMuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaXNjL2V2X3N0cmVhbXMuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pc2MvZXZfdGltZXJzLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pc2MvZXZfdGltZXJzLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaXNjL2V2X3RpbWVycy5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pc2MvZXZfdGltZXJzLmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaXNjL2V2ZW50bGliX3AuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2lzYy9ldmVudGxpYl9wLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaXNjL2V2ZW50bGliX3AuaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaXNjL2V2ZW50bGliX3AuaApkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9jY2xhc3MuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L2NjbGFzcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L2NjbGFzcy5oCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9yZWdleC9jY2xhc3MuaApkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9jbmFtZS5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVnZXgvY25hbWUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9jbmFtZS5oCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9yZWdleC9jbmFtZS5oCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L2VuZ2luZS5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVnZXgvZW5naW5lLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvZW5naW5lLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L2VuZ2luZS5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3JlZ2NvbXAuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L3JlZ2NvbXAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9yZWdjb21wLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L3JlZ2NvbXAuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9yZWdlcnJvci5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVnZXgvcmVnZXJyb3IuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9yZWdlcnJvci5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9yZWdleC9yZWdlcnJvci5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3JlZ2V4Mi5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVnZXgvcmVnZXgyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvcmVnZXgyLmgKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L3JlZ2V4Mi5oCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3JlZ2V4ZWMuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L3JlZ2V4ZWMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9yZWdleGVjLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L3JlZ2V4ZWMuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9yZWdmcmVlLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9yZWdleC9yZWdmcmVlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvcmVnZnJlZS5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9yZWdleC9yZWdmcmVlLmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvdXRpbHMuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L3V0aWxzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvdXRpbHMuaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVnZXgvdXRpbHMuaApkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVzb2x2L210Y3R4cmVzLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9yZXNvbHYvbXRjdHhyZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTMyODFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVzb2x2L210Y3R4cmVzLmMKQEAgLTAsMCArMSwxMzAgQEAKKy8qCSROZXRCU0Q6IG10Y3R4cmVzLmMsdiAxLjQgMjAwNy8wMy8zMCAyMDo0MDo1MiBnaGVuIEV4cCAkCSovCisKKyNpbmNsdWRlIDxwb3J0X2JlZm9yZS5oPgorI2lmZGVmIERPX1BUSFJFQURTCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHJlc29sdl9tdC5oPgorI2luY2x1ZGUgPHBvcnRfYWZ0ZXIuaD4KKworI2lmZGVmIERPX1BUSFJFQURTCitzdGF0aWMgcHRocmVhZF9rZXlfdAlrZXk7CitzdGF0aWMgaW50CQltdF9rZXlfaW5pdGlhbGl6ZWQgPSAwOworCitzdGF0aWMgaW50CQlfX3Jlc19pbml0X2N0eCh2b2lkKTsKK3N0YXRpYyB2b2lkCQlfX3Jlc19kZXN0cm95X2N0eCh2b2lkICopOworCisjaWYgZGVmaW5lZChzdW4pICYmICFkZWZpbmVkKF9fR05VQ19fKQorI3ByYWdtYSBpbml0CShfbXRjdHhyZXNfaW5pdCkKKyNlbmRpZgorI2VuZGlmCisKK3N0YXRpYyBtdGN0eHJlc190CXNoYXJlZGN0eDsKKworI2lmZGVmIERPX1BUSFJFQURTCisvKgorICogSW5pdGlhbGl6ZSB0aGUgVFNEIGtleS4gQnkgZG9pbmcgdGhpcyBhdCBsaWJyYXJ5IGxvYWQgdGltZSwgd2UncmUKKyAqIGltcGxpY2l0bHkgcnVubmluZyB3aXRob3V0IGludGVyZmVyZW5jZSBmcm9tIG90aGVyIHRocmVhZHMsIHNvIHRoZXJlJ3MKKyAqIG5vIG5lZWQgZm9yIGxvY2tpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfbXRjdHhyZXNfaW5pdCh2b2lkKSB7CisJaW50IHB0aHJlYWRfa2V5Y3JlYXRlX3JldDsKKworCXB0aHJlYWRfa2V5Y3JlYXRlX3JldCA9IHB0aHJlYWRfa2V5X2NyZWF0ZSgma2V5LCBfX3Jlc19kZXN0cm95X2N0eCk7CisJaWYgKHB0aHJlYWRfa2V5Y3JlYXRlX3JldCA9PSAwKQorCQltdF9rZXlfaW5pdGlhbGl6ZWQgPSAxOworfQorI2VuZGlmCisKKy8qCisgKiBUbyBzdXBwb3J0IGJpbmFyaWVzIHRoYXQgdXNlZCB0aGUgcHJpdmF0ZSBNVC1zYWZlIGludGVyZmFjZSBpbgorICogU29sYXJpcyA4LCB3ZSBzdGlsbCBuZWVkIHRvIHByb3ZpZGUgdGhlIF9fcmVzX2VuYWJsZV9tdCgpCisgKiBhbmQgX19yZXNfZGlzYWJsZV9tdCgpIGVudHJ5IHBvaW50cy4gVGhleSdyZSBkby1ub3RoaW5nIHJvdXRpbmVzLgorICovCitpbnQKK19fcmVzX2VuYWJsZV9tdCh2b2lkKSB7CisJcmV0dXJuICgtMSk7Cit9CisKK2ludAorX19yZXNfZGlzYWJsZV9tdCh2b2lkKSB7CisJcmV0dXJuICgwKTsKK30KKworI2lmZGVmIERPX1BUSFJFQURTCitzdGF0aWMgaW50CitfX3Jlc19pbml0X2N0eCh2b2lkKSB7CisKKwltdGN0eHJlc190CSptdDsKKwlpbnQJCXJldDsKKworCisJaWYgKHB0aHJlYWRfZ2V0c3BlY2lmaWMoa2V5KSAhPSAwKSB7CisJCS8qIEFscmVhZHkgZXhpc3RzICovCisJCXJldHVybiAoMCk7CisJfQorCisJaWYgKChtdCA9IG1hbGxvYyhzaXplb2YgKG10Y3R4cmVzX3QpKSkgPT0gMCkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJbWVtc2V0KG10LCAwLCBzaXplb2YgKG10Y3R4cmVzX3QpKTsKKworCWlmICgocmV0ID0gcHRocmVhZF9zZXRzcGVjaWZpYyhrZXksIG10KSkgIT0gMCkgeworCQlmcmVlKG10KTsKKwkJZXJybm8gPSByZXQ7CisJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitfX3Jlc19kZXN0cm95X2N0eCh2b2lkICp2YWx1ZSkgeworCisJbXRjdHhyZXNfdAkqbXQgPSAobXRjdHhyZXNfdCAqKXZhbHVlOworCisJaWYgKG10ICE9IDApCisJCWZyZWUobXQpOworfQorI2VuZGlmCisKK210Y3R4cmVzX3QgKgorX19fbXRjdHhyZXModm9pZCkgeworI2lmZGVmIERPX1BUSFJFQURTCisJbXRjdHhyZXNfdAkqbXQ7CisKKwkvKgorCSAqIFRoaXMgaWYgY2xhdXNlIHNob3VsZCBvbmx5IGJlIGV4ZWN1dGVkIGlmIHdlIGFyZSBsaW5raW5nCisJICogc3RhdGljYWxseS4gIFdoZW4gbGlua2VkIGR5bmFtaWNhbGx5IF9tdGN0eHJlc19pbml0KCkgc2hvdWxkCisJICogYmUgY2FsbGVkIGF0IGJpbmRpbmcgdGltZSBkdWUgdGhlICNwcmFnbWEgYWJvdmUuCisJICovCisJaWYgKCFtdF9rZXlfaW5pdGlhbGl6ZWQpIHsKKwkJc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBrZXlsb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKyAgICAgICAgICAgICAgICBpZiAocHRocmVhZF9tdXRleF9sb2NrKCZrZXlsb2NrKSA9PSAwKSB7CisJCQlfbXRjdHhyZXNfaW5pdCgpOworCQkJKHZvaWQpIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZrZXlsb2NrKTsKKwkJfQorCX0KKworCS8qCisJICogSWYgd2UgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGluIHRoaXMgdGhyZWFkIHJldHVybiB0aGUgZXhpc3RpbmcKKwkgKiBjb250ZXh0LiAgT3RoZXJ3aXNlIHJlY3JlYXQgYSBuZXcgY29udGV4dCBhbmQgcmV0dXJuIGl0LiAgSWYKKwkgKiB0aGF0IGZhaWxzIHJldHVybiBhIGdsb2JhbCBjb250ZXh0LgorCSAqLworCWlmIChtdF9rZXlfaW5pdGlhbGl6ZWQpIHsKKwkJaWYgKCgobXQgPSBwdGhyZWFkX2dldHNwZWNpZmljKGtleSkpICE9IDApIHx8CisJCSAgICAoX19yZXNfaW5pdF9jdHgoKSA9PSAwICYmCisJCSAgICAgKG10ID0gcHRocmVhZF9nZXRzcGVjaWZpYyhrZXkpKSAhPSAwKSkgeworCQkJcmV0dXJuIChtdCk7CisJCX0KKwl9CisjZW5kaWYKKwlyZXR1cm4gKCZzaGFyZWRjdHgpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvX3JhbmQ0OC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL19yYW5kNDguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvX3JhbmQ0OC5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvX3JhbmQ0OC5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9ic2VhcmNoLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvYnNlYXJjaC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9ic2VhcmNoLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9ic2VhcmNoLmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2Rpdi5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2Rpdi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9kaXYuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2Rpdi5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9kcmFuZDQ4LmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvZHJhbmQ0OC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9kcmFuZDQ4LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9kcmFuZDQ4LmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2VyYW5kNDguYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9lcmFuZDQ4LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2VyYW5kNDguYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2VyYW5kNDguYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2luc3F1ZS5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2luc3F1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MDIwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvaW5zcXVlLmMKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTMgSm9obiBCcmV6YWsKKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqICBhcmUgbWV0OgorICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK19fUkNTSUQoIiROZXRCU0Q6IGluc3F1ZS5jLHYgMS4zIDIwMTIvMDYvMjUgMjI6MzI6NDUgYWJzIEV4cCAkIik7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c2VhcmNoLmg+CisKK3N0cnVjdCBxZWxlbSB7CisgICAgICAgIHN0cnVjdCBxZWxlbSAqcV9mb3J3OworICAgICAgICBzdHJ1Y3QgcWVsZW0gKnFfYmFjazsKK307CisKK3ZvaWQKK2luc3F1ZSh2b2lkICplbnRyeSwgdm9pZCAqcHJlZCkKK3sKKwlzdHJ1Y3QgcWVsZW0gKmUgPSAoc3RydWN0IHFlbGVtICopIGVudHJ5OworCXN0cnVjdCBxZWxlbSAqcCA9IChzdHJ1Y3QgcWVsZW0gKikgcHJlZDsKKworCV9ESUFHQVNTRVJUKGUgIT0gMCk7CisKKwllLT5xX2JhY2sgPSBwOworCWlmIChwKSB7CisJCWUtPnFfZm9ydyA9IHAtPnFfZm9ydzsKKwkJaWYgKHAtPnFfZm9ydykKKwkJCXAtPnFfZm9ydy0+cV9iYWNrID0gZTsKKwkJcC0+cV9mb3J3ID0gZTsKKwl9IGVsc2UKKwkJZS0+cV9mb3J3ID0gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2pyYW5kNDguYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9qcmFuZDQ4LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2pyYW5kNDguYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2pyYW5kNDguYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbGRpdi5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2xkaXYuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbGRpdi5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvbGRpdi5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9sbGRpdi5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2xsZGl2LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2xsZGl2LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9sbGRpdi5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9scmFuZDQ4LmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvbHJhbmQ0OC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9scmFuZDQ4LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9scmFuZDQ4LmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL21yYW5kNDguYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9tcmFuZDQ4LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL21yYW5kNDguYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL21yYW5kNDguYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbnJhbmQ0OC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL25yYW5kNDguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbnJhbmQ0OC5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvbnJhbmQ0OC5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvcmFuZF9yLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvcmFuZF9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyYjJiZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9yYW5kX3IuYwpAQCAtMCwwICsxLDUxIEBACisvKgkkTmV0QlNEOiByYW5kX3IuYyx2IDEuNiAyMDEyLzA2LzI1IDIyOjMyOjQ1IGFicyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmIDAKK3N0YXRpYyBjaGFyICpzY2NzaWQgPSAiZnJvbTogQCgjKXJhbmQuYwk1LjYgKEJlcmtlbGV5KSA2LzI0LzkxIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiByYW5kX3IuYyx2IDEuNiAyMDEyLzA2LzI1IDIyOjMyOjQ1IGFicyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworaW50CityYW5kX3IodW5zaWduZWQgaW50ICpzZWVkKQoreworCV9ESUFHQVNTRVJUKHNlZWQgIT0gTlVMTCk7CisKKwlyZXR1cm4gKCgqc2VlZCA9ICpzZWVkICogMTEwMzUxNTI0NSArIDEyMzQ1KSAmIFJBTkRfTUFYKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9yZW1xdWUuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9yZW1xdWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDYwYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL3JlbXF1ZS5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAxOTkzIEpvaG4gQnJlemFrCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiAgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitfX1JDU0lEKCIkTmV0QlNEOiByZW1xdWUuYyx2IDEuMyAyMDEyLzA2LzI1IDIyOjMyOjQ1IGFicyBFeHAgJCIpOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHNlYXJjaC5oPgorCitzdHJ1Y3QgcWVsZW0geworICAgICAgICBzdHJ1Y3QgcWVsZW0gKnFfZm9ydzsKKyAgICAgICAgc3RydWN0IHFlbGVtICpxX2JhY2s7Cit9OworCit2b2lkCityZW1xdWUodm9pZCAqZWxlbWVudCkKK3sKKwlzdHJ1Y3QgcWVsZW0gKmUgPSAoc3RydWN0IHFlbGVtICopIGVsZW1lbnQ7CisKKwlfRElBR0FTU0VSVChlICE9IDApOworCisJaWYgKGUtPnFfZm9ydykKKwkJZS0+cV9mb3J3LT5xX2JhY2sgPSBlLT5xX2JhY2s7CisJaWYgKGUtPnFfYmFjaykKKwkJZS0+cV9iYWNrLT5xX2ZvcncgPSBlLT5xX2Zvcnc7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9zZWVkNDguYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9zZWVkNDguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvc2VlZDQ4LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9zZWVkNDguYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvc3JhbmQ0OC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL3NyYW5kNDguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvc3JhbmQ0OC5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvc3JhbmQ0OC5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9tZW1jY3B5LmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdHJpbmcvbWVtY2NweS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9tZW1jY3B5LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0cmluZy9tZW1jY3B5LmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RyaW5nL3N0cmNhc2VzdHIuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0cmluZy9zdHJjYXNlc3RyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RyaW5nL3N0cmNhc2VzdHIuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNhc2VzdHIuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdHJpbmcvc3RyY29sbC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNvbGwuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdHJpbmcvc3RyY29sbC5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdHJpbmcvc3RyY29sbC5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9zdHJ4ZnJtLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdHJpbmcvc3RyeGZybS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9zdHJ4ZnJtLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0cmluZy9zdHJ4ZnJtLmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvdW5pc3RkL2tpbGxwZy5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvdW5pc3RkL2tpbGxwZy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3VuaXN0ZC9raWxscGcuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvdW5pc3RkL2tpbGxwZy5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2NvbXBhdC00My9jcmVhdC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9jb21wYXQtNDMvY3JlYXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU2MGJlYS4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2NvbXBhdC00My9jcmVhdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoJJE5ldEJTRDogY3JlYXQuYyx2IDEuMTAgMjAwMy8wOC8wNyAxNjo0MjozOSBhZ2MgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLSNpZiAwCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpY3JlYXQuYwk4LjEgKEJlcmtlbGV5KSA2LzIvOTMiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IGNyZWF0LmMsdiAxLjEwIDIwMDMvMDgvMDcgMTY6NDI6MzkgYWdjIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0KLWludAotY3JlYXQoY29uc3QgY2hhciAqcGF0aCwgbW9kZV90IG1vZGUpCi17Ci0KLQlfRElBR0FTU0VSVChwYXRoICE9IE5VTEwpOwotCi0JcmV0dXJuKG9wZW4ocGF0aCwgT19XUk9OTFl8T19DUkVBVHxPX1RSVU5DLCBtb2RlKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9zZXRqbXBlcnIuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3NldGptcGVyci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjE0MzJlLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3NldGptcGVyci5jCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoJJE5ldEJTRDogc2V0am1wZXJyLmMsdiAxLjggMjAxMi8wNi8yNCAxNToyNjowMyBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTgwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmIDAKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylzZXRqbXBlcnIuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IHNldGptcGVyci5jLHYgMS44IDIwMTIvMDYvMjQgMTU6MjY6MDMgY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotLyoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZnJvbSBsb25nam1wKCkgd2hlbiBhbiBlcnJvciBvY2N1cnMuCi0gKiBQcm9ncmFtcyB0aGF0IHdpc2ggdG8gZXhpdCBncmFjZWZ1bGx5IGZyb20gdGhpcyBlcnJvciBtYXkKLSAqIHdyaXRlIHRoZWlyIG93biB2ZXJzaW9ucy4KLSAqIElmIHRoaXMgcm91dGluZSByZXR1cm5zLCB0aGUgcHJvZ3JhbSBpcyBhYm9ydGVkLgotICovCi0KLSNpbmNsdWRlIDxzZXRqbXAuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotdm9pZAotbG9uZ2ptcGVycm9yKHZvaWQpCi17Ci0jZGVmaW5lCUVSUk1TRwkibG9uZ2ptcCBib3RjaC5cbiIKLQkodm9pZCl3cml0ZShTVERFUlJfRklMRU5PLCBFUlJNU0csIHNpemVvZihFUlJNU0cpIC0gMSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9udG9hLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9udG9hLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlZDAyM2IuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmV0L2luZXRfbnRvYS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoJJE5ldEJTRDogaW5ldF9udG9hLmMsdiAxLjIgMjAxMi8wMy8xMyAyMToxMzozOCBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmIDAKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylpbmV0X250b2EuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IGluZXRfbnRvYS5jLHYgMS4yIDIwMTIvMDMvMTMgMjE6MTM6MzggY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmZGVmIF9fd2Vha19hbGlhcwotX193ZWFrX2FsaWFzKGluZXRfbnRvYSxfaW5ldF9udG9hKQotI2VuZGlmCi0KLS8qCi0gKiBDb252ZXJ0IG5ldHdvcmstZm9ybWF0IGludGVybmV0IGFkZHJlc3MKLSAqIHRvIGJhc2UgMjU2IGQuZC5kLmQgcmVwcmVzZW50YXRpb24uCi0gKi8KLS8qY29uc3QqLyBjaGFyICoKLWluZXRfbnRvYShzdHJ1Y3QgaW5fYWRkciBpbikgewotCXN0YXRpYyBjaGFyIHJldFsxOF07Ci0KLQlzdHJsY3B5KHJldCwgIltpbmV0X250b2EgZXJyb3JdIiwgc2l6ZW9mKHJldCkpOwotCSh2b2lkKSBpbmV0X250b3AoQUZfSU5FVCwgJmluLCByZXQsIChzb2NrbGVuX3Qpc2l6ZW9mIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5ldC9pbmV0X250b3AuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5ldC9pbmV0X250b3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBjNTVhOC4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9udG9wLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzIgKzAsMCBAQAotLyoJJE5ldEJTRDogaW5ldF9udG9wLmMsdiAxLjkgMjAxMi8wMy8yMCAxNzowODoxMyBtYXR0IEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWYgMAotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogaW5ldF9udG9wLmMsdiAxLjUgMjAwNS8xMS8wMyAyMjo1OTo1MiBtYXJrYSBFeHAiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IGluZXRfbnRvcC5jLHYgMS45IDIwMTIvMDMvMjAgMTc6MDg6MTMgbWF0dCBFeHAgJCIpOwotI2VuZGlmCi0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotCi0jaW5jbHVkZSAicG9ydF9iZWZvcmUuaCIKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLQotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgInBvcnRfYWZ0ZXIuaCIKLQotI2lmZGVmIF9fd2Vha19hbGlhcwotX193ZWFrX2FsaWFzKGluZXRfbnRvcCxfaW5ldF9udG9wKQotI2VuZGlmCi0KLS8qJQotICogV0FSTklORzogRG9uJ3QgZXZlbiBjb25zaWRlciB0cnlpbmcgdG8gY29tcGlsZSB0aGlzIG9uIGEgc3lzdGVtIHdoZXJlCi0gKiBzaXplb2YoaW50KSA8IDQuICBzaXplb2YoaW50KSA+IDQgaXMgZmluZTsgYWxsIHRoZSB3b3JsZCdzIG5vdCBhIFZBWC4KLSAqLwotCi1zdGF0aWMgY29uc3QgY2hhciAqaW5ldF9udG9wNChjb25zdCB1X2NoYXIgKnNyYywgY2hhciAqZHN0LCBzb2NrbGVuX3Qgc2l6ZSk7Ci1zdGF0aWMgY29uc3QgY2hhciAqaW5ldF9udG9wNihjb25zdCB1X2NoYXIgKnNyYywgY2hhciAqZHN0LCBzb2NrbGVuX3Qgc2l6ZSk7Ci0KLS8qIGNoYXIgKgotICogaW5ldF9udG9wKGFmLCBzcmMsIGRzdCwgc2l6ZSkKLSAqCWNvbnZlcnQgYSBuZXR3b3JrIGZvcm1hdCBhZGRyZXNzIHRvIHByZXNlbnRhdGlvbiBmb3JtYXQuCi0gKiByZXR1cm46Ci0gKglwb2ludGVyIHRvIHByZXNlbnRhdGlvbiBmb3JtYXQgYWRkcmVzcyAoYGRzdCcpLCBvciBOVUxMIChzZWUgZXJybm8pLgotICogYXV0aG9yOgotICoJUGF1bCBWaXhpZSwgMTk5Ni4KLSAqLwotY29uc3QgY2hhciAqCi1pbmV0X250b3AoaW50IGFmLCBjb25zdCB2b2lkICpzcmMsIGNoYXIgKmRzdCwgc29ja2xlbl90IHNpemUpCi17Ci0KLQlfRElBR0FTU0VSVChzcmMgIT0gTlVMTCk7Ci0JX0RJQUdBU1NFUlQoZHN0ICE9IE5VTEwpOwotCi0Jc3dpdGNoIChhZikgewotCWNhc2UgQUZfSU5FVDoKLQkJcmV0dXJuIChpbmV0X250b3A0KHNyYywgZHN0LCBzaXplKSk7Ci0JY2FzZSBBRl9JTkVUNjoKLQkJcmV0dXJuIChpbmV0X250b3A2KHNyYywgZHN0LCBzaXplKSk7Ci0JZGVmYXVsdDoKLQkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCS8qIE5PVFJFQUNIRUQgKi8KLX0KLQotLyogY29uc3QgY2hhciAqCi0gKiBpbmV0X250b3A0KHNyYywgZHN0LCBzaXplKQotICoJZm9ybWF0IGFuIElQdjQgYWRkcmVzcywgbW9yZSBvciBsZXNzIGxpa2UgaW5ldF9udG9hKCkKLSAqIHJldHVybjoKLSAqCWBkc3QnIChhcyBhIGNvbnN0KQotICogbm90ZXM6Ci0gKgkoMSkgdXNlcyBubyBzdGF0aWNzCi0gKgkoMikgdGFrZXMgYSB1X2NoYXIqIG5vdCBhbiBpbl9hZGRyIGFzIGlucHV0Ci0gKiBhdXRob3I6Ci0gKglQYXVsIFZpeGllLCAxOTk2LgotICovCi1zdGF0aWMgY29uc3QgY2hhciAqCi1pbmV0X250b3A0KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNvY2tsZW5fdCBzaXplKQotewotCWNoYXIgdG1wW3NpemVvZiAiMjU1LjI1NS4yNTUuMjU1Il07Ci0JaW50IGw7Ci0KLQlfRElBR0FTU0VSVChzcmMgIT0gTlVMTCk7Ci0JX0RJQUdBU1NFUlQoZHN0ICE9IE5VTEwpOwotCi0JbCA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIldS4ldS4ldS4ldSIsCi0JICAgIHNyY1swXSwgc3JjWzFdLCBzcmNbMl0sIHNyY1szXSk7Ci0JaWYgKGwgPD0gMCB8fCAoc29ja2xlbl90KSBsID49IHNpemUpIHsKLQkJZXJybm8gPSBFTk9TUEM7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCXN0cmxjcHkoZHN0LCB0bXAsIHNpemUpOwotCXJldHVybiAoZHN0KTsKLX0KLQotLyogY29uc3QgY2hhciAqCi0gKiBpbmV0X250b3A2KHNyYywgZHN0LCBzaXplKQotICoJY29udmVydCBJUHY2IGJpbmFyeSBhZGRyZXNzIGludG8gcHJlc2VudGF0aW9uIChwcmludGFibGUpIGZvcm1hdAotICogYXV0aG9yOgotICoJUGF1bCBWaXhpZSwgMTk5Ni4KLSAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgotaW5ldF9udG9wNihjb25zdCB1X2NoYXIgKnNyYywgY2hhciAqZHN0LCBzb2NrbGVuX3Qgc2l6ZSkKLXsKLQkvKgotCSAqIE5vdGUgdGhhdCBpbnQzMl90IGFuZCBpbnQxNl90IG5lZWQgb25seSBiZSAiYXQgbGVhc3QiIGxhcmdlIGVub3VnaAotCSAqIHRvIGNvbnRhaW4gYSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHNpemUuICBPbiBzb21lIHN5c3RlbXMsIGxpa2UKLQkgKiBDcmF5cywgdGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcyBhbiBpbnRlZ2VyIHZhcmlhYmxlIHdpdGggMTYgYml0cy4KLQkgKiBLZWVwIHRoaXMgaW4gbWluZCBpZiB5b3UgdGhpbmsgdGhpcyBmdW5jdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGNvZGVkCi0JICogdG8gdXNlIHBvaW50ZXIgb3ZlcmxheXMuICBBbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgotCSAqLwotCWNoYXIgdG1wW3NpemVvZiAiZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6MjU1LjI1NS4yNTUuMjU1Il07Ci0JY2hhciAqdHAsICplcDsKLQlzdHJ1Y3QgeyBpbnQgYmFzZSwgbGVuOyB9IGJlc3QsIGN1cjsKLQl1X2ludCB3b3Jkc1tOU19JTjZBRERSU1ogLyBOU19JTlQxNlNaXTsKLQlpbnQgaTsKLQlpbnQgYWR2YW5jZTsKLQotCV9ESUFHQVNTRVJUKHNyYyAhPSBOVUxMKTsKLQlfRElBR0FTU0VSVChkc3QgIT0gTlVMTCk7Ci0KLQkvKgotCSAqIFByZXByb2Nlc3M6Ci0JICoJQ29weSB0aGUgaW5wdXQgKGJ5dGV3aXNlKSBhcnJheSBpbnRvIGEgd29yZHdpc2UgYXJyYXkuCi0JICoJRmluZCB0aGUgbG9uZ2VzdCBydW4gb2YgMHgwMCdzIGluIHNyY1tdIGZvciA6OiBzaG9ydGhhbmRpbmcuCi0JICovCi0JbWVtc2V0KHdvcmRzLCAnXDAnLCBzaXplb2Ygd29yZHMpOwotCWZvciAoaSA9IDA7IGkgPCBOU19JTjZBRERSU1o7IGkrKykKLQkJd29yZHNbaSAvIDJdIHw9IChzcmNbaV0gPDwgKCgxIC0gKGkgJSAyKSkgPDwgMykpOwotCWJlc3QuYmFzZSA9IC0xOwotCWJlc3QubGVuID0gMDsKLQljdXIuYmFzZSA9IC0xOwotCWN1ci5sZW4gPSAwOwotCWZvciAoaSA9IDA7IGkgPCAoTlNfSU42QUREUlNaIC8gTlNfSU5UMTZTWik7IGkrKykgewotCQlpZiAod29yZHNbaV0gPT0gMCkgewotCQkJaWYgKGN1ci5iYXNlID09IC0xKQotCQkJCWN1ci5iYXNlID0gaSwgY3VyLmxlbiA9IDE7Ci0JCQllbHNlCi0JCQkJY3VyLmxlbisrOwotCQl9IGVsc2UgewotCQkJaWYgKGN1ci5iYXNlICE9IC0xKSB7Ci0JCQkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCi0JCQkJCWJlc3QgPSBjdXI7Ci0JCQkJY3VyLmJhc2UgPSAtMTsKLQkJCX0KLQkJfQotCX0KLQlpZiAoY3VyLmJhc2UgIT0gLTEpIHsKLQkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCi0JCQliZXN0ID0gY3VyOwotCX0KLQlpZiAoYmVzdC5iYXNlICE9IC0xICYmIGJlc3QubGVuIDwgMikKLQkJYmVzdC5iYXNlID0gLTE7Ci0KLQkvKgotCSAqIEZvcm1hdCB0aGUgcmVzdWx0LgotCSAqLwotCXRwID0gdG1wOwotCWVwID0gdG1wICsgc2l6ZW9mKHRtcCk7Ci0JZm9yIChpID0gMDsgaSA8IChOU19JTjZBRERSU1ogLyBOU19JTlQxNlNaKTsgaSsrKSB7Ci0JCS8qIEFyZSB3ZSBpbnNpZGUgdGhlIGJlc3QgcnVuIG9mIDB4MDAncz8gKi8KLQkJaWYgKGJlc3QuYmFzZSAhPSAtMSAmJiBpID49IGJlc3QuYmFzZSAmJgotCQkgICAgaSA8IChiZXN0LmJhc2UgKyBiZXN0LmxlbikpIHsKLQkJCWlmIChpID09IGJlc3QuYmFzZSkKLQkJCQkqdHArKyA9ICc6JzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIEFyZSB3ZSBmb2xsb3dpbmcgYW4gaW5pdGlhbCBydW4gb2YgMHgwMHMgb3IgYW55IHJlYWwgaGV4PyAqLwotCQlpZiAoaSAhPSAwKSB7Ci0JCQlpZiAodHAgKyAxID49IGVwKQotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQkqdHArKyA9ICc6JzsKLQkJfQotCQkvKiBJcyB0aGlzIGFkZHJlc3MgYW4gZW5jYXBzdWxhdGVkIElQdjQ/ICovCi0JCWlmIChpID09IDYgJiYgYmVzdC5iYXNlID09IDAgJiYKLQkJICAgIChiZXN0LmxlbiA9PSA2IHx8Ci0JCSAgICAoYmVzdC5sZW4gPT0gNyAmJiB3b3Jkc1s3XSAhPSAweDAwMDEpIHx8Ci0JCSAgICAoYmVzdC5sZW4gPT0gNSAmJiB3b3Jkc1s1XSA9PSAweGZmZmYpKSkgewotCQkJaWYgKCFpbmV0X250b3A0KHNyYysxMiwgdHAsIChzb2NrbGVuX3QpKGVwIC0gdHApKSkKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJdHAgKz0gc3RybGVuKHRwKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWFkdmFuY2UgPSBzbnByaW50Zih0cCwgKHNpemVfdCkoZXAgLSB0cCksICIleCIsIHdvcmRzW2ldKTsKLQkJaWYgKGFkdmFuY2UgPD0gMCB8fCBhZHZhbmNlID49IGVwIC0gdHApCi0JCQlyZXR1cm4gKE5VTEwpOwotCQl0cCArPSBhZHZhbmNlOwotCX0KLQkvKiBXYXMgaXQgYSB0cmFpbGluZyBydW4gb2YgMHgwMCdzPyAqLwotCWlmIChiZXN0LmJhc2UgIT0gLTEgJiYgKGJlc3QuYmFzZSArIGJlc3QubGVuKSA9PSAKLQkgICAgKE5TX0lONkFERFJTWiAvIE5TX0lOVDE2U1opKSB7Ci0JCWlmICh0cCArIDEgPj0gZXApCi0JCQlyZXR1cm4gKE5VTEwpOwotCQkqdHArKyA9ICc6JzsKLQl9Ci0JaWYgKHRwICsgMSA+PSBlcCkKLQkJcmV0dXJuIChOVUxMKTsKLQkqdHArKyA9ICdcMCc7Ci0KLQkvKgotCSAqIENoZWNrIGZvciBvdmVyZmxvdywgY29weSwgYW5kIHdlJ3JlIGRvbmUuCi0JICovCi0JaWYgKChzaXplX3QpKHRwIC0gdG1wKSA+IHNpemUpIHsKLQkJZXJybm8gPSBFTk9TUEM7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCXN0cmxjcHkoZHN0LCB0bXAsIHNpemUpOwotCXJldHVybiAoZHN0KTsKLX0KLQotLyohIFxmaWxlICovCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9wdG9uLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9wdG9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZTlhNjkuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmV0L2luZXRfcHRvbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzEwICswLDAgQEAKLS8qCSROZXRCU0Q6IGluZXRfcHRvbi5jLHYgMS44IDIwMTIvMDMvMTMgMjE6MTM6MzggY2hyaXN0b3MgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQotICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCi0gKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLSNpZiAwCi1zdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBpbmV0X3B0b24uYyx2IDEuNSAyMDA1LzA3LzI4IDA2OjUxOjQ3IG1hcmthIEV4cCI7Ci0jZWxzZQotX19SQ1NJRCgiJE5ldEJTRDogaW5ldF9wdG9uLmMsdiAxLjggMjAxMi8wMy8xMyAyMToxMzozOCBjaHJpc3RvcyBFeHAgJCIpOwotI2VuZGlmCi0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotCi0jaW5jbHVkZSAicG9ydF9iZWZvcmUuaCIKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaW5jbHVkZSAicG9ydF9hZnRlci5oIgotCi0jaWZkZWYgX193ZWFrX2FsaWFzCi1fX3dlYWtfYWxpYXMoaW5ldF9wdG9uLF9pbmV0X3B0b24pCi0jZW5kaWYKLQotLyolCi0gKiBXQVJOSU5HOiBEb24ndCBldmVuIGNvbnNpZGVyIHRyeWluZyB0byBjb21waWxlIHRoaXMgb24gYSBzeXN0ZW0gd2hlcmUKLSAqIHNpemVvZihpbnQpIDwgNC4gIHNpemVvZihpbnQpID4gNCBpcyBmaW5lOyBhbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgotICovCi0KLXN0YXRpYyBpbnQJaW5ldF9wdG9uNChjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0LCBpbnQgcHRvbik7Ci1zdGF0aWMgaW50CWluZXRfcHRvbjYoY29uc3QgY2hhciAqc3JjLCB1X2NoYXIgKmRzdCk7Ci0KLS8qIGludAotICogaW5ldF9wdG9uKGFmLCBzcmMsIGRzdCkKLSAqCWNvbnZlcnQgZnJvbSBwcmVzZW50YXRpb24gZm9ybWF0ICh3aGljaCB1c3VhbGx5IG1lYW5zIEFTQ0lJIHByaW50YWJsZSkKLSAqCXRvIG5ldHdvcmsgZm9ybWF0ICh3aGljaCBpcyB1c3VhbGx5IHNvbWUga2luZCBvZiBiaW5hcnkgZm9ybWF0KS4KLSAqIHJldHVybjoKLSAqCTEgaWYgdGhlIGFkZHJlc3Mgd2FzIHZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgZmFtaWx5Ci0gKgkwIGlmIHRoZSBhZGRyZXNzIHdhc24ndCB2YWxpZCAoYGRzdCcgaXMgdW50b3VjaGVkIGluIHRoaXMgY2FzZSkKLSAqCS0xIGlmIHNvbWUgb3RoZXIgZXJyb3Igb2NjdXJyZWQgKGBkc3QnIGlzIHVudG91Y2hlZCBpbiB0aGlzIGNhc2UsIHRvbykKLSAqIGF1dGhvcjoKLSAqCVBhdWwgVml4aWUsIDE5OTYuCi0gKi8KLWludAotaW5ldF9wdG9uKGludCBhZiwgY29uc3QgY2hhciAqc3JjLCB2b2lkICpkc3QpCi17Ci0KLQlfRElBR0FTU0VSVChzcmMgIT0gTlVMTCk7Ci0JX0RJQUdBU1NFUlQoZHN0ICE9IE5VTEwpOwotCi0Jc3dpdGNoIChhZikgewotCWNhc2UgQUZfSU5FVDoKLQkJcmV0dXJuIChpbmV0X3B0b240KHNyYywgZHN0LCAxKSk7Ci0JY2FzZSBBRl9JTkVUNjoKLQkJcmV0dXJuIChpbmV0X3B0b242KHNyYywgZHN0KSk7Ci0JZGVmYXVsdDoKLQkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7Ci0JCXJldHVybiAoLTEpOwotCX0KLQkvKiBOT1RSRUFDSEVEICovCi19Ci0KLS8qIGludAotICogaW5ldF9wdG9uNChzcmMsIGRzdCwgcHRvbikKLSAqCXdoZW4gbGFzdCBhcmcgaXMgMDogaW5ldF9hdG9uKCkuIHdpdGggaGV4YWRlY2ltYWwsIG9jdGFsIGFuZCBzaG9ydGhhbmQuCi0gKgl3aGVuIGxhc3QgYXJnIGlzIDE6IGluZXRfcHRvbigpLiBkZWNpbWFsIGRvdHRlZC1xdWFkIG9ubHkuCi0gKiByZXR1cm46Ci0gKgkxIGlmIGBzcmMnIGlzIGEgdmFsaWQgaW5wdXQsIGVsc2UgMC4KLSAqIG5vdGljZToKLSAqCWRvZXMgbm90IHRvdWNoIGBkc3QnIHVubGVzcyBpdCdzIHJldHVybmluZyAxLgotICogYXV0aG9yOgotICoJUGF1bCBWaXhpZSwgMTk5Ni4KLSAqLwotc3RhdGljIGludAotaW5ldF9wdG9uNChjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0LCBpbnQgcHRvbikKLXsKLQl1X2ludDMyX3QgdmFsOwotCXVfaW50IGRpZ2l0LCBiYXNlOwotCXB0cmRpZmZfdCBuOwotCXVuc2lnbmVkIGNoYXIgYzsKLQl1X2ludCBwYXJ0c1s0XTsKLQl1X2ludCAqcHAgPSBwYXJ0czsKLQotCV9ESUFHQVNTRVJUKHNyYyAhPSBOVUxMKTsKLQlfRElBR0FTU0VSVChkc3QgIT0gTlVMTCk7Ci0KLQljID0gKnNyYzsKLQlmb3IgKDs7KSB7Ci0JCS8qCi0JCSAqIENvbGxlY3QgbnVtYmVyIHVwIHRvIGBgLicnLgotCQkgKiBWYWx1ZXMgYXJlIHNwZWNpZmllZCBhcyBmb3IgQzoKLQkJICogMHg9aGV4LCAwPW9jdGFsLCBpc2RpZ2l0PWRlY2ltYWwuCi0JCSAqLwotCQlpZiAoIWlzZGlnaXQoYykpCi0JCQlyZXR1cm4gKDApOwotCQl2YWwgPSAwOyBiYXNlID0gMTA7Ci0JCWlmIChjID09ICcwJykgewotCQkJYyA9ICorK3NyYzsKLQkJCWlmIChjID09ICd4JyB8fCBjID09ICdYJykKLQkJCQliYXNlID0gMTYsIGMgPSAqKytzcmM7Ci0JCQllbHNlIGlmIChpc2RpZ2l0KGMpICYmIGMgIT0gJzknKQotCQkJCWJhc2UgPSA4OwotCQl9Ci0JCS8qIGluZXRfcHRvbigpIHRha2VzIGRlY2ltYWwgb25seSAqLwotCQlpZiAocHRvbiAmJiBiYXNlICE9IDEwKQotCQkJcmV0dXJuICgwKTsKLQkJZm9yICg7OykgewotCQkJaWYgKGlzZGlnaXQoYykpIHsKLQkJCQlkaWdpdCA9IGMgLSAnMCc7Ci0JCQkJaWYgKGRpZ2l0ID49IGJhc2UpCi0JCQkJCWJyZWFrOwotCQkJCXZhbCA9ICh2YWwgKiBiYXNlKSArIGRpZ2l0OwotCQkJCWMgPSAqKytzcmM7Ci0JCQl9IGVsc2UgaWYgKGJhc2UgPT0gMTYgJiYgaXN4ZGlnaXQoYykpIHsKLQkJCQlkaWdpdCA9IGMgKyAxMCAtIChpc2xvd2VyKGMpID8gJ2EnIDogJ0EnKTsKLQkJCQlpZiAoZGlnaXQgPj0gMTYpCi0JCQkJCWJyZWFrOwotCQkJCXZhbCA9ICh2YWwgPDwgNCkgfCBkaWdpdDsKLQkJCQljID0gKisrc3JjOwotCQkJfSBlbHNlCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGMgPT0gJy4nKSB7Ci0JCQkvKgotCQkJICogSW50ZXJuZXQgZm9ybWF0OgotCQkJICoJYS5iLmMuZAotCQkJICoJYS5iLmMJKHdpdGggYyB0cmVhdGVkIGFzIDE2IGJpdHMpCi0JCQkgKglhLmIJKHdpdGggYiB0cmVhdGVkIGFzIDI0IGJpdHMpCi0JCQkgKglhCSh3aXRoIGEgdHJlYXRlZCBhcyAzMiBiaXRzKQotCQkJICovCi0JCQlpZiAocHAgPj0gcGFydHMgKyAzKQotCQkJCXJldHVybiAoMCk7Ci0JCQkqcHArKyA9IHZhbDsKLQkJCWMgPSAqKytzcmM7Ci0JCX0gZWxzZQotCQkJYnJlYWs7Ci0JfQotCS8qCi0JICogQ2hlY2sgZm9yIHRyYWlsaW5nIGNoYXJhY3RlcnMuCi0JICovCi0JaWYgKGMgIT0gJ1wwJyAmJiAhaXNzcGFjZShjKSkKLQkJcmV0dXJuICgwKTsKLQkvKgotCSAqIENvbmNvY3QgdGhlIGFkZHJlc3MgYWNjb3JkaW5nIHRvCi0JICogdGhlIG51bWJlciBvZiBwYXJ0cyBzcGVjaWZpZWQuCi0JICovCi0JbiA9IHBwIC0gcGFydHMgKyAxOwotCS8qIGluZXRfcHRvbigpIHRha2VzIGRvdHRlZC1xdWFkIG9ubHkuICBpdCBkb2VzIG5vdCB0YWtlIHNob3J0aGFuZC4gKi8KLQlpZiAocHRvbiAmJiBuICE9IDQpCi0JCXJldHVybiAoMCk7Ci0Jc3dpdGNoIChuKSB7Ci0KLQljYXNlIDA6Ci0JCXJldHVybiAoMCk7CQkvKiBpbml0aWFsIG5vbmRpZ2l0ICovCi0KLQljYXNlIDE6CQkJCS8qIGEgLS0gMzIgYml0cyAqLwotCQlicmVhazsKLQotCWNhc2UgMjoJCQkJLyogYS5iIC0tIDguMjQgYml0cyAqLwotCQlpZiAocGFydHNbMF0gPiAweGZmIHx8IHZhbCA+IDB4ZmZmZmZmKQotCQkJcmV0dXJuICgwKTsKLQkJdmFsIHw9IHBhcnRzWzBdIDw8IDI0OwotCQlicmVhazsKLQotCWNhc2UgMzoJCQkJLyogYS5iLmMgLS0gOC44LjE2IGJpdHMgKi8KLQkJaWYgKChwYXJ0c1swXSB8IHBhcnRzWzFdKSA+IDB4ZmYgfHwgdmFsID4gMHhmZmZmKQotCQkJcmV0dXJuICgwKTsKLQkJdmFsIHw9IChwYXJ0c1swXSA8PCAyNCkgfCAocGFydHNbMV0gPDwgMTYpOwotCQlicmVhazsKLQotCWNhc2UgNDoJCQkJLyogYS5iLmMuZCAtLSA4LjguOC44IGJpdHMgKi8KLQkJaWYgKChwYXJ0c1swXSB8IHBhcnRzWzFdIHwgcGFydHNbMl0gfCB2YWwpID4gMHhmZikKLQkJCXJldHVybiAoMCk7Ci0JCXZhbCB8PSAocGFydHNbMF0gPDwgMjQpIHwgKHBhcnRzWzFdIDw8IDE2KSB8IChwYXJ0c1syXSA8PCA4KTsKLQkJYnJlYWs7Ci0JfQotCWlmIChkc3QpIHsKLQkJdmFsID0gaHRvbmwodmFsKTsKLQkJbWVtY3B5KGRzdCwgJnZhbCwgTlNfSU5BRERSU1opOwotCX0KLQlyZXR1cm4gKDEpOwotfQotCi0vKiBpbnQKLSAqIGluZXRfcHRvbjYoc3JjLCBkc3QpCi0gKgljb252ZXJ0IHByZXNlbnRhdGlvbiBsZXZlbCBhZGRyZXNzIHRvIG5ldHdvcmsgb3JkZXIgYmluYXJ5IGZvcm0uCi0gKiByZXR1cm46Ci0gKgkxIGlmIGBzcmMnIGlzIGEgdmFsaWQgW1JGQzE4ODQgMi4yXSBhZGRyZXNzLCBlbHNlIDAuCi0gKiBub3RpY2U6Ci0gKgkoMSkgZG9lcyBub3QgdG91Y2ggYGRzdCcgdW5sZXNzIGl0J3MgcmV0dXJuaW5nIDEuCi0gKgkoMikgOjogaW4gYSBmdWxsIGFkZHJlc3MgaXMgc2lsZW50bHkgaWdub3JlZC4KLSAqIGNyZWRpdDoKLSAqCWluc3BpcmVkIGJ5IE1hcmsgQW5kcmV3cy4KLSAqIGF1dGhvcjoKLSAqCVBhdWwgVml4aWUsIDE5OTYuCi0gKi8KLXN0YXRpYyBpbnQKLWluZXRfcHRvbjYoY29uc3QgY2hhciAqc3JjLCB1X2NoYXIgKmRzdCkKLXsKLQlzdGF0aWMgY29uc3QgY2hhciB4ZGlnaXRzX2xbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIiwKLQkJCSAgeGRpZ2l0c191W10gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7Ci0JdV9jaGFyIHRtcFtOU19JTjZBRERSU1pdLCAqdHAsICplbmRwLCAqY29sb25wOwotCWNvbnN0IGNoYXIgKnhkaWdpdHMsICpjdXJ0b2s7Ci0JaW50IGNoLCBzZWVuX3hkaWdpdHM7Ci0JdV9pbnQgdmFsOwotCi0JX0RJQUdBU1NFUlQoc3JjICE9IE5VTEwpOwotCV9ESUFHQVNTRVJUKGRzdCAhPSBOVUxMKTsKLQotCW1lbXNldCgodHAgPSB0bXApLCAnXDAnLCBOU19JTjZBRERSU1opOwotCWVuZHAgPSB0cCArIE5TX0lONkFERFJTWjsKLQljb2xvbnAgPSBOVUxMOwotCS8qIExlYWRpbmcgOjogcmVxdWlyZXMgc29tZSBzcGVjaWFsIGhhbmRsaW5nLiAqLwotCWlmICgqc3JjID09ICc6JykKLQkJaWYgKCorK3NyYyAhPSAnOicpCi0JCQlyZXR1cm4gKDApOwotCWN1cnRvayA9IHNyYzsKLQlzZWVuX3hkaWdpdHMgPSAwOwotCXZhbCA9IDA7Ci0Jd2hpbGUgKChjaCA9ICpzcmMrKykgIT0gJ1wwJykgewotCQljb25zdCBjaGFyICpwY2g7Ci0KLQkJaWYgKChwY2ggPSBzdHJjaHIoKHhkaWdpdHMgPSB4ZGlnaXRzX2wpLCBjaCkpID09IE5VTEwpCi0JCQlwY2ggPSBzdHJjaHIoKHhkaWdpdHMgPSB4ZGlnaXRzX3UpLCBjaCk7Ci0JCWlmIChwY2ggIT0gTlVMTCkgewotCQkJdmFsIDw8PSA0OwotCQkJdmFsIHw9IChpbnQpKHBjaCAtIHhkaWdpdHMpOwotCQkJaWYgKCsrc2Vlbl94ZGlnaXRzID4gNCkKLQkJCQlyZXR1cm4gKDApOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGNoID09ICc6JykgewotCQkJY3VydG9rID0gc3JjOwotCQkJaWYgKCFzZWVuX3hkaWdpdHMpIHsKLQkJCQlpZiAoY29sb25wKQotCQkJCQlyZXR1cm4gKDApOwotCQkJCWNvbG9ucCA9IHRwOwotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIGlmICgqc3JjID09ICdcMCcpCi0JCQkJcmV0dXJuICgwKTsKLQkJCWlmICh0cCArIE5TX0lOVDE2U1ogPiBlbmRwKQotCQkJCXJldHVybiAoMCk7Ci0JCQkqdHArKyA9ICh1X2NoYXIpICh2YWwgPj4gOCkgJiAweGZmOwotCQkJKnRwKysgPSAodV9jaGFyKSB2YWwgJiAweGZmOwotCQkJc2Vlbl94ZGlnaXRzID0gMDsKLQkJCXZhbCA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY2ggPT0gJy4nICYmICgodHAgKyBOU19JTkFERFJTWikgPD0gZW5kcCkgJiYKLQkJICAgIGluZXRfcHRvbjQoY3VydG9rLCB0cCwgMSkgPiAwKSB7Ci0JCQl0cCArPSBOU19JTkFERFJTWjsKLQkJCXNlZW5feGRpZ2l0cyA9IDA7Ci0JCQlicmVhazsJLyolPCAnXFwwJyB3YXMgc2VlbiBieSBpbmV0X3B0b240KCkuICovCi0JCX0KLQkJcmV0dXJuICgwKTsKLQl9Ci0JaWYgKHNlZW5feGRpZ2l0cykgewotCQlpZiAodHAgKyBOU19JTlQxNlNaID4gZW5kcCkKLQkJCXJldHVybiAoMCk7Ci0JCSp0cCsrID0gKHVfY2hhcikgKHZhbCA+PiA4KSAmIDB4ZmY7Ci0JCSp0cCsrID0gKHVfY2hhcikgdmFsICYgMHhmZjsKLQl9Ci0JaWYgKGNvbG9ucCAhPSBOVUxMKSB7Ci0JCS8qCi0JCSAqIFNpbmNlIHNvbWUgbWVtbW92ZSgpJ3MgZXJyb25lb3VzbHkgZmFpbCB0byBoYW5kbGUKLQkJICogb3ZlcmxhcHBpbmcgcmVnaW9ucywgd2UnbGwgZG8gdGhlIHNoaWZ0IGJ5IGhhbmQuCi0JCSAqLwotCQljb25zdCBwdHJkaWZmX3QgbiA9IHRwIC0gY29sb25wOwotCQlpbnQgaTsKLQotCQlpZiAodHAgPT0gZW5kcCkKLQkJCXJldHVybiAoMCk7Ci0JCWZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7Ci0JCQllbmRwWy0gaV0gPSBjb2xvbnBbbiAtIGldOwotCQkJY29sb25wW24gLSBpXSA9IDA7Ci0JCX0KLQkJdHAgPSBlbmRwOwotCX0KLQlpZiAodHAgIT0gZW5kcCkKLQkJcmV0dXJuICgwKTsKLQltZW1jcHkoZHN0LCB0bXAsIE5TX0lONkFERFJTWik7Ci0JcmV0dXJuICgxKTsKLX0KLQotLyohIFxmaWxlICovCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGlvL2dldGRlbGltLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGlvL2dldGRlbGltLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjY2UzNzYuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRpby9nZXRkZWxpbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qICROZXRCU0Q6IGdldGRlbGltLmMsdiAxLjEzIDIwMTEvMDcvMjIgMjM6MTI6MzAgam9lcmcgRXhwICQgKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOSBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgotICogYnkgUm95IE1hcnBsZXMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fUkNTSUQoIiROZXRCU0Q6IGdldGRlbGltLmMsdiAxLjEzIDIwMTEvMDcvMjIgMjM6MTI6MzAgam9lcmcgRXhwICQiKTsKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJyZWVudHJhbnQuaCIKLSNpbmNsdWRlICJsb2NhbC5oIgotCi0jaWZkZWYgX193ZWFrX2FsaWFzCi1fX3dlYWtfYWxpYXMoZ2V0ZGVsaW0sIF9nZXRkZWxpbSkKLSNlbmRpZgotCi0vKiBNaW5pbXVtIGJ1ZmZlciBzaXplIHdlIGNyZWF0ZS4KLSAqIFRoaXMgc2hvdWxkIGFsbG93IGNvbmZpZyBmaWxlcyB0byBmaXQgaW50byBvdXIgcG93ZXIgb2YgMiBidWZmZXIgZ3Jvd3RoCi0gKiB3aXRob3V0IHRoZSBuZWVkIGZvciBhIHJlYWxsb2MuICovCi0jZGVmaW5lIE1JTkJVRgkxMjgKLQotc3NpemVfdAotX19nZXRkZWxpbShjaGFyICoqX19yZXN0cmljdCBidWYsIHNpemVfdCAqX19yZXN0cmljdCBidWZsZW4sCi0gICAgaW50IHNlcCwgRklMRSAqX19yZXN0cmljdCBmcCkKLXsKLQl1bnNpZ25lZCBjaGFyICpwOwotCXNpemVfdCBsZW4sIG5ld2xlbiwgb2ZmOwotCWNoYXIgKm5ld2I7Ci0KLQlfRElBR0FTU0VSVChmcCAhPSBOVUxMKTsKLQotCWlmIChidWYgPT0gTlVMTCB8fCBidWZsZW4gPT0gTlVMTCkgewotCQllcnJubyA9IEVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiBJZiBidWYgaXMgTlVMTCwgd2UgaGF2ZSB0byBhc3N1bWUgYSBzaXplIG9mIHplcm8gKi8KLQlpZiAoKmJ1ZiA9PSBOVUxMKQotCQkqYnVmbGVuID0gMDsKLQotCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKLQlvZmYgPSAwOwotCWRvIHsKLQkJLyogSWYgdGhlIGlucHV0IGJ1ZmZlciBpcyBlbXB0eSwgcmVmaWxsIGl0ICovCi0JCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKSB7Ci0JCQlpZiAoX19zZmVycm9yKGZwKSkKLQkJCQlnb3RvIGVycm9yOwotCQkJLyogTm8gZXJyb3IsIHNvIEVPRi4gKi8KLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogU2NhbiB0aHJvdWdoIGxvb2tpbmcgZm9yIHRoZSBzZXBhcmF0b3IgKi8KLQkJcCA9IG1lbWNocihmcC0+X3AsIHNlcCwgKHNpemVfdClmcC0+X3IpOwotCQlpZiAocCA9PSBOVUxMKQotCQkJbGVuID0gZnAtPl9yOwotCQllbHNlCi0JCQlsZW4gPSAocCAtIGZwLT5fcCkgKyAxOwotCi0JCW5ld2xlbiA9IG9mZiArIGxlbjsKLQkJLyogRW5zdXJlIHdlIGNhbiBoYW5kbGUgaXQgKi8KLQkJaWYgKG5ld2xlbiA8IG9mZiB8fCBuZXdsZW4gPiBTU0laRV9NQVgpIHsKLQkJCWVycm5vID0gRU9WRVJGTE9XOwotCQkJZ290byBlcnJvcjsKLQkJfQotCQluZXdsZW4rKzsgLyogcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIE5VTEwgdGVybWluYXRvciAqLwotCQlpZiAobmV3bGVuID4gKmJ1ZmxlbikgewotCQkJaWYgKG5ld2xlbiA8IE1JTkJVRikKLQkJCQluZXdsZW4gPSBNSU5CVUY7Ci0JCQlpZiAoIXBvd2Vyb2YyKG5ld2xlbikpIHsKLQkJCQkvKiBHcm93IHRoZSBidWZmZXIgdG8gdGhlIG5leHQgcG93ZXIgb2YgMiAqLwotCQkJCW5ld2xlbi0tOwotCQkJCW5ld2xlbiB8PSBuZXdsZW4gPj4gMTsKLQkJCQluZXdsZW4gfD0gbmV3bGVuID4+IDI7Ci0JCQkJbmV3bGVuIHw9IG5ld2xlbiA+PiA0OwotCQkJCW5ld2xlbiB8PSBuZXdsZW4gPj4gODsKLQkJCQluZXdsZW4gfD0gbmV3bGVuID4+IDE2OwotI2lmIFNJWkVfVF9NQVggPiAweGZmZmZmZmZmVQotCQkJCW5ld2xlbiB8PSBuZXdsZW4gPj4gMzI7Ci0jZW5kaWYKLQkJCQluZXdsZW4rKzsKLQkJCX0KLQotCQkJbmV3YiA9IHJlYWxsb2MoKmJ1ZiwgbmV3bGVuKTsKLQkJCWlmIChuZXdiID09IE5VTEwpCi0JCQkJZ290byBlcnJvcjsKLQkJCSpidWYgPSBuZXdiOwotCQkJKmJ1ZmxlbiA9IG5ld2xlbjsKLQkJfQotCi0JCSh2b2lkKW1lbWNweSgoKmJ1ZiArIG9mZiksIGZwLT5fcCwgbGVuKTsKLQkJLyogU2FmZSwgbGVuIGlzIG5ldmVyIGdyZWF0ZXIgdGhhbiB3aGF0IGZwLT5fciBjYW4gZml0LiAqLwotCQlmcC0+X3IgLT0gKGludClsZW47Ci0JCWZwLT5fcCArPSAoaW50KWxlbjsKLQkJb2ZmICs9IGxlbjsKLQl9IHdoaWxlIChwID09IE5VTEwpOwotCi0JLyogUE9TSVggZGVtYW5kcyB3ZSByZXR1cm4gLTEgb24gRU9GLiAqLwotCWlmIChvZmYgPT0gMCkgCi0JCXJldHVybiAtMTsKLQotCWlmICgqYnVmICE9IE5VTEwpCi0JCSooKmJ1ZiArIG9mZikgPSAnXDAnOwotCXJldHVybiBvZmY7Ci0KLWVycm9yOgotCWZwLT5fZmxhZ3MgfD0gX19TRVJSOwotCXJldHVybiAtMTsKLX0KLQotc3NpemVfdAotZ2V0ZGVsaW0oY2hhciAqKl9fcmVzdHJpY3QgYnVmLCBzaXplX3QgKl9fcmVzdHJpY3QgYnVmbGVuLAotICAgIGludCBzZXAsIEZJTEUgKl9fcmVzdHJpY3QgZnApCi17Ci0Jc3NpemVfdCBuOwotCi0JRkxPQ0tGSUxFKGZwKTsKLQluID0gX19nZXRkZWxpbShidWYsIGJ1Zmxlbiwgc2VwLCBmcCk7Ci0JRlVOTE9DS0ZJTEUoZnApOwotCXJldHVybiBuOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRpby9nZXRsaW5lLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGlvL2dldGxpbmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVkNGJhYi4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGlvL2dldGxpbmUuYworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qICROZXRCU0Q6IGdldGxpbmUuYyx2IDEuMyAyMDA5LzEyLzAyIDA4OjQ2OjMzIHJveSBFeHAgJCAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi0gKiBieSBSb3kgTWFycGxlcy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19SQ1NJRCgiJE5ldEJTRDogZ2V0bGluZS5jLHYgMS4zIDIwMDkvMTIvMDIgMDg6NDY6MzMgcm95IEV4cCAkIik7Ci0KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpZmRlZiBfX3dlYWtfYWxpYXMKLV9fd2Vha19hbGlhcyhnZXRsaW5lLCBfZ2V0bGluZSkKLSNlbmRpZgotCi1zc2l6ZV90Ci1nZXRsaW5lKGNoYXIgKipfX3Jlc3RyaWN0IGJ1Ziwgc2l6ZV90ICpfX3Jlc3RyaWN0IGJ1ZmxlbiwgRklMRSAqX19yZXN0cmljdCBmcCkKLXsKLQlyZXR1cm4gZ2V0ZGVsaW0oYnVmLCBidWZsZW4sICdcbicsIGZwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2V4aXQuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2V4aXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdlNmFkZi4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9leGl0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgkkTmV0QlNEOiBleGl0LmMsdiAxLjE1IDIwMTEvMDUvMTggMTk6MzY6MzYgZHNsIEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmIDAKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylleGl0LmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiBleGl0LmMsdiAxLjE1IDIwMTEvMDUvMTggMTk6MzY6MzYgZHNsIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpZmRlZiBfTElCQwotI2luY2x1ZGUgInJlZW50cmFudC5oIgotI2luY2x1ZGUgImF0ZXhpdC5oIgotI2VuZGlmCi0KLXZvaWQgKCpfX2NsZWFudXApKHZvaWQpOwotCi0vKgotICogRXhpdCwgZmx1c2hpbmcgc3RkaW8gYnVmZmVycyBpZiBuZWNlc3NhcnkuCi0gKi8KLXZvaWQKLWV4aXQoaW50IHN0YXR1cykKLXsKLQotI2lmZGVmIF9MSUJDCi0JX19jeGFfZmluYWxpemUoTlVMTCk7Ci0jZW5kaWYKLQlpZiAoX19jbGVhbnVwKQotCQkoKl9fY2xlYW51cCkoKTsKLQlfZXhpdChzdGF0dXMpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvdGRlbGV0ZS5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvdGRlbGV0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDAxN2RjLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3RkZWxldGUuYworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCSROZXRCU0Q6IHRkZWxldGUuYyx2IDEuNiAyMDEyLzA2LzI1IDIyOjMyOjQ1IGFicyBFeHAgJAkqLwotCi0vKgotICogVHJlZSBzZWFyY2ggZ2VuZXJhbGl6ZWQgZnJvbSBLbnV0aCAoNi4yLjIpIEFsZ29yaXRobSBUIGp1c3QgbGlrZQotICogdGhlIEFUJlQgbWFuIHBhZ2Ugc2F5cy4KLSAqCi0gKiBUaGUgbm9kZV90IHN0cnVjdHVyZSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHksIGxpbnQgZG9lc24ndCBncm9rIGl0LgotICoKLSAqIFdyaXR0ZW4gYnkgcmVhZGluZyB0aGUgU3lzdGVtIFYgSW50ZXJmYWNlIERlZmluaXRpb24sIG5vdCB0aGUgY29kZS4KLSAqCi0gKiBUb3RhbGx5IHB1YmxpYyBkb21haW4uCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotX19SQ1NJRCgiJE5ldEJTRDogdGRlbGV0ZS5jLHYgMS42IDIwMTIvMDYvMjUgMjI6MzI6NDUgYWJzIEV4cCAkIik7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZGVmaW5lIF9TRUFSQ0hfUFJJVkFURQotI2luY2x1ZGUgPHNlYXJjaC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0KLS8qIGZpbmQgYSBub2RlIHdpdGgga2V5ICJ2a2V5IiBpbiB0cmVlICJ2cm9vdHAiICovCi12b2lkICoKLXRkZWxldGUoY29uc3Qgdm9pZCAqdmtleSwgdm9pZCAqKnZyb290cCwKLSAgICBpbnQgKCpjb21wYXIpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkKLXsKLQlub2RlX3QgKipyb290cCA9IChub2RlX3QgKiopdnJvb3RwOwotCW5vZGVfdCAqcCwgKnEsICpyOwotCWludCAgY21wOwotCi0JX0RJQUdBU1NFUlQodmtleSAhPSBOVUxMKTsKLQlfRElBR0FTU0VSVChjb21wYXIgIT0gTlVMTCk7Ci0KLQlpZiAocm9vdHAgPT0gTlVMTCB8fCAocCA9ICpyb290cCkgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQl3aGlsZSAoKGNtcCA9ICgqY29tcGFyKSh2a2V5LCAoKnJvb3RwKS0+a2V5KSkgIT0gMCkgewotCQlwID0gKnJvb3RwOwotCQlyb290cCA9IChjbXAgPCAwKSA/Ci0JCSAgICAmKCpyb290cCktPmxsaW5rIDoJCS8qIGZvbGxvdyBsbGluayBicmFuY2ggKi8KLQkJICAgICYoKnJvb3RwKS0+cmxpbms7CQkvKiBmb2xsb3cgcmxpbmsgYnJhbmNoICovCi0JCWlmICgqcm9vdHAgPT0gTlVMTCkKLQkJCXJldHVybiBOVUxMOwkJLyoga2V5IG5vdCBmb3VuZCAqLwotCX0KLQlyID0gKCpyb290cCktPnJsaW5rOwkJCS8qIEQxOiAqLwotCWlmICgocSA9ICgqcm9vdHApLT5sbGluaykgPT0gTlVMTCkJLyogTGVmdCBOVUxMPyAqLwotCQlxID0gcjsKLQllbHNlIGlmIChyICE9IE5VTEwpIHsJCQkvKiBSaWdodCBsaW5rIGlzIE5VTEw/ICovCi0JCWlmIChyLT5sbGluayA9PSBOVUxMKSB7CQkvKiBEMjogRmluZCBzdWNjZXNzb3IgKi8KLQkJCXItPmxsaW5rID0gcTsKLQkJCXEgPSByOwotCQl9IGVsc2UgewkJCS8qIEQzOiBGaW5kIE5VTEwgbGluayAqLwotCQkJZm9yIChxID0gci0+bGxpbms7IHEtPmxsaW5rICE9IE5VTEw7IHEgPSByLT5sbGluaykKLQkJCQlyID0gcTsKLQkJCXItPmxsaW5rID0gcS0+cmxpbms7Ci0JCQlxLT5sbGluayA9ICgqcm9vdHApLT5sbGluazsKLQkJCXEtPnJsaW5rID0gKCpyb290cCktPnJsaW5rOwotCQl9Ci0JfQotCWlmIChwICE9ICpyb290cCkKLQkJZnJlZSgqcm9vdHApOwkJCS8qIEQ0OiBGcmVlIG5vZGUgKi8KLQkqcm9vdHAgPSBxOwkJCQkvKiBsaW5rIHBhcmVudCB0byBuZXcgbm9kZSAqLwotCXJldHVybiBwOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvdGZpbmQuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3RmaW5kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkM2YzNjIuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvdGZpbmQuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCSROZXRCU0Q6IHRmaW5kLmMsdiAxLjcgMjAxMi8wNi8yNSAyMjozMjo0NSBhYnMgRXhwICQJKi8KLQotLyoKLSAqIFRyZWUgc2VhcmNoIGdlbmVyYWxpemVkIGZyb20gS251dGggKDYuMi4yKSBBbGdvcml0aG0gVCBqdXN0IGxpa2UKLSAqIHRoZSBBVCZUIG1hbiBwYWdlIHNheXMuCi0gKgotICogVGhlIG5vZGVfdCBzdHJ1Y3R1cmUgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5LCBsaW50IGRvZXNuJ3QgZ3JvayBpdC4KLSAqCi0gKiBXcml0dGVuIGJ5IHJlYWRpbmcgdGhlIFN5c3RlbSBWIEludGVyZmFjZSBEZWZpbml0aW9uLCBub3QgdGhlIGNvZGUuCi0gKgotICogVG90YWxseSBwdWJsaWMgZG9tYWluLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLV9fUkNTSUQoIiROZXRCU0Q6IHRmaW5kLmMsdiAxLjcgMjAxMi8wNi8yNSAyMjozMjo0NSBhYnMgRXhwICQiKTsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNkZWZpbmUgX1NFQVJDSF9QUklWQVRFCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c2VhcmNoLmg+Ci0KLS8qIGZpbmQgYSBub2RlIGJ5IGtleSAidmtleSIgaW4gdHJlZSAidnJvb3RwIiwgb3IgcmV0dXJuIDAgKi8KLXZvaWQgKgotdGZpbmQoY29uc3Qgdm9pZCAqdmtleSwgdm9pZCAqIGNvbnN0ICp2cm9vdHAsCi0gICAgaW50ICgqY29tcGFyKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpCi17Ci0Jbm9kZV90ICogY29uc3QgKnJvb3RwID0gKG5vZGVfdCAqIGNvbnN0Kil2cm9vdHA7Ci0KLQlfRElBR0FTU0VSVCh2a2V5ICE9IE5VTEwpOwotCV9ESUFHQVNTRVJUKGNvbXBhciAhPSBOVUxMKTsKLQotCWlmIChyb290cCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXdoaWxlICgqcm9vdHAgIT0gTlVMTCkgewkJLyogVDE6ICovCi0JCWludCByOwotCi0JCWlmICgociA9ICgqY29tcGFyKSh2a2V5LCAoKnJvb3RwKS0+a2V5KSkgPT0gMCkJLyogVDI6ICovCi0JCQlyZXR1cm4gKnJvb3RwOwkJLyoga2V5IGZvdW5kICovCi0JCXJvb3RwID0gKHIgPCAwKSA/Ci0JCSAgICAmKCpyb290cCktPmxsaW5rIDoJCS8qIFQzOiBmb2xsb3cgbGVmdCBicmFuY2ggKi8KLQkJICAgICYoKnJvb3RwKS0+cmxpbms7CQkvKiBUNDogZm9sbG93IHJpZ2h0IGJyYW5jaCAqLwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3RzZWFyY2guYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3RzZWFyY2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYyZmU5Yy4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi90c2VhcmNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgkkTmV0QlNEOiB0c2VhcmNoLmMsdiAxLjcgMjAxMi8wNi8yNSAyMjozMjo0NSBhYnMgRXhwICQJKi8KLQotLyoKLSAqIFRyZWUgc2VhcmNoIGdlbmVyYWxpemVkIGZyb20gS251dGggKDYuMi4yKSBBbGdvcml0aG0gVCBqdXN0IGxpa2UKLSAqIHRoZSBBVCZUIG1hbiBwYWdlIHNheXMuCi0gKgotICogVGhlIG5vZGVfdCBzdHJ1Y3R1cmUgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5LCBsaW50IGRvZXNuJ3QgZ3JvayBpdC4KLSAqCi0gKiBXcml0dGVuIGJ5IHJlYWRpbmcgdGhlIFN5c3RlbSBWIEludGVyZmFjZSBEZWZpbml0aW9uLCBub3QgdGhlIGNvZGUuCi0gKgotICogVG90YWxseSBwdWJsaWMgZG9tYWluLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLV9fUkNTSUQoIiROZXRCU0Q6IHRzZWFyY2guYyx2IDEuNyAyMDEyLzA2LzI1IDIyOjMyOjQ1IGFicyBFeHAgJCIpOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2RlZmluZSBfU0VBUkNIX1BSSVZBVEUKLSNpbmNsdWRlIDxzZWFyY2guaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotLyogZmluZCBvciBpbnNlcnQgZGF0dW0gaW50byBzZWFyY2ggdHJlZSAqLwotdm9pZCAqCi10c2VhcmNoKGNvbnN0IHZvaWQgKnZrZXksIHZvaWQgKip2cm9vdHAsCi0gICAgaW50ICgqY29tcGFyKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpCi17Ci0Jbm9kZV90ICpxOwotCW5vZGVfdCAqKnJvb3RwID0gKG5vZGVfdCAqKil2cm9vdHA7Ci0KLQlfRElBR0FTU0VSVCh2a2V5ICE9IE5VTEwpOwotCV9ESUFHQVNTRVJUKGNvbXBhciAhPSBOVUxMKTsKLQotCWlmIChyb290cCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXdoaWxlICgqcm9vdHAgIT0gTlVMTCkgewkvKiBLbnV0aCdzIFQxOiAqLwotCQlpbnQgcjsKLQotCQlpZiAoKHIgPSAoKmNvbXBhcikodmtleSwgKCpyb290cCktPmtleSkpID09IDApCS8qIFQyOiAqLwotCQkJcmV0dXJuICpyb290cDsJCS8qIHdlIGZvdW5kIGl0ISAqLwotCi0JCXJvb3RwID0gKHIgPCAwKSA/Ci0JCSAgICAmKCpyb290cCktPmxsaW5rIDoJCS8qIFQzOiBmb2xsb3cgbGVmdCBicmFuY2ggKi8KLQkJICAgICYoKnJvb3RwKS0+cmxpbms7CQkvKiBUNDogZm9sbG93IHJpZ2h0IGJyYW5jaCAqLwotCX0KLQotCXEgPSBtYWxsb2Moc2l6ZW9mKG5vZGVfdCkpOwkJLyogVDU6IGtleSBub3QgZm91bmQgKi8KLQlpZiAocSAhPSAwKSB7CQkJCS8qIG1ha2UgbmV3IG5vZGUgKi8KLQkJKnJvb3RwID0gcTsJCQkvKiBsaW5rIG5ldyBub2RlIHRvIG9sZCAqLwotCQlxLT5rZXkgPSBfX1VOQ09OU1QodmtleSk7CS8qIGluaXRpYWxpemUgbmV3IG5vZGUgKi8KLQkJcS0+bGxpbmsgPSBxLT5ybGluayA9IE5VTEw7Ci0JfQotCXJldHVybiBxOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy90aHJlYWQtc3R1Yi9fX2lzdGhyZWFkZWQuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvdGhyZWFkLXN0dWIvX19pc3RocmVhZGVkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYzFiNmYuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy90aHJlYWQtc3R1Yi9fX2lzdGhyZWFkZWQuYworKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qCSROZXRCU0Q6IF9faXN0aHJlYWRlZC5jLHYgMS4zIDIwMDkvMTIvMDEgMDE6MzM6MjUgZXhwbG9yZXIgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTkgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi0gKiBieSBNaWNoYWVsIEdyYWZmLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKLSAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLV9fUkNTSUQoIiROZXRCU0Q6IF9faXN0aHJlYWRlZC5jLHYgMS4zIDIwMDkvMTIvMDEgMDE6MzM6MjUgZXhwbG9yZXIgRXhwICQiKTsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLWludCBfX2lzdGhyZWFkZWQgPSAwOwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbmFtZXNwYWNlLmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9uYW1lc3BhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRkNDE1MS4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9uYW1lc3BhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIF9CSU9OSUNfTkVUQlNEX05BTUVTUEFDRV9IX2luY2x1ZGVkCi0jZGVmaW5lIF9CSU9OSUNfTkVUQlNEX05BTUVTUEFDRV9IX2luY2x1ZGVkCi0KLS8vIE5ldEJTRCB1c2VzIF9fd2Vha19hbGlhcyBvbiBhIGxvdCBvZiBmdW5jdGlvbnMuIFdlIGRvbid0IHdhbnQgdGhhdC4KLSNpZiBkZWZpbmVkKF9fd2Vha19hbGlhcykKLSN1bmRlZiBfX3dlYWtfYWxpYXMKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL25ldGJzZC1jb21wYXQuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL25ldGJzZC1jb21wYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgzMGYzOC4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9uZXRic2QtY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBfQklPTklDX05FVEJTRF9DT01QQVRfSF9pbmNsdWRlZAotI2RlZmluZSBfQklPTklDX05FVEJTRF9DT01QQVRfSF9pbmNsdWRlZAotCi0vLyBOZXRCU0QgdXNlcyBfRElBR0FTU0VSVCB0byBudWxsLWNoZWNrIGFyZ3VtZW50cyBhbmQgdGhlIGxpa2UuCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZGVmaW5lIF9ESUFHQVNTRVJUKGUpICgoZSkgPyAodm9pZCkgMCA6IF9fYXNzZXJ0MihfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCAjZSkpCi0KLS8vIFRPRE86IHVwZGF0ZSBvdXIgPHN5cy9jZGVmcy5oPiB0byBzdXBwb3J0IHRoaXMgcHJvcGVybHkuCi0jZGVmaW5lIF9fdHlwZV9maXQodCwgYSkgKDAgPT0gMCkKLQotI2RlZmluZSBfR05VX1NPVVJDRQotCi0vLyBUT0RPOiB3ZSBkb24ndCB5ZXQgaGF2ZSB0aHJlYWQtc2FmZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCi0jZGVmaW5lIF9fcmVhZGxvY2tlbnYoKSAwCi0jZGVmaW5lIF9fdW5sb2NrZW52KCkgMAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL3BvcnRfYmVmb3JlLmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9wb3J0X2JlZm9yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTA2ZTUyLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL3BvcnRfYmVmb3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBfQklPTklDX05FVEJTRF9QT1JUX0JFRk9SRV9IX2luY2x1ZGVkCi0jZGVmaW5lIF9CSU9OSUNfTkVUQlNEX1BPUlRfQkVGT1JFX0hfaW5jbHVkZWQKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgInByaXZhdGUvYXJwYV9uYW1lc2VyLmgiCi0KLSNkZWZpbmUgSVNDX0ZPUk1BVF9QUklOVEYoYSxiKSBfX3ByaW50Zmxpa2UoYSxiKQotI2RlZmluZSBJU0NfU09DS0xFTl9UIHNvY2tsZW5fdAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL3JhbmQ0OC5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvcmFuZDQ4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZDhiMGQuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1uZXRic2QvcmFuZDQ4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgkkTmV0QlNEOiByYW5kNDguaCx2IDEuNiAyMDExLzA1LzE4IDE5OjM2OjM2IGRzbCBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkzIE1hcnRpbiBCaXJnbWVpZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogWW91IG1heSByZWRpc3RyaWJ1dGUgdW5tb2RpZmllZCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvdXJjZQotICogY29kZSBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGFuZCB0aGUKLSAqIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSByZXRhaW5lZC4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBgYXMgaXMnJywgYW5kIGNvbWVzIHdpdGggbm8gd2FycmFudGllcwotICogb2YgYW55IGtpbmQuIEkgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnl0aGluZyB0aGF0IGhhcHBlbnMKLSAqIHRvIGFueW9uZS9hbnl0aGluZyB3aGVuIHVzaW5nIHRoaXMgc29mdHdhcmUuCi0gKi8KLQotI2lmbmRlZiBfUkFORDQ4X0hfCi0jZGVmaW5lIF9SQU5ENDhfSF8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1leHRlcm4gdm9pZAkJX19kb3JhbmQ0OCh1bnNpZ25lZCBzaG9ydFszXSk7Ci1leHRlcm4gdW5zaWduZWQgc2hvcnQJX19yYW5kNDhfc2VlZFszXTsKLWV4dGVybiB1bnNpZ25lZCBzaG9ydAlfX3JhbmQ0OF9tdWx0WzNdOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0CV9fcmFuZDQ4X2FkZDsKLQotI2RlZmluZQlSQU5ENDhfU0VFRF8wCSgweDMzMGUpCi0jZGVmaW5lCVJBTkQ0OF9TRUVEXzEJKDB4YWJjZCkKLSNkZWZpbmUJUkFORDQ4X1NFRURfMgkoMHgxMjM0KQotI2RlZmluZQlSQU5ENDhfTVVMVF8wCSgweGU2NmQpCi0jZGVmaW5lCVJBTkQ0OF9NVUxUXzEJKDB4ZGVlYykKLSNkZWZpbmUJUkFORDQ4X01VTFRfMgkoMHgwMDA1KQotI2RlZmluZQlSQU5ENDhfQURECSgweDAwMGIpCi0KLSNlbmRpZiAvKiBfUkFORDQ4X0hfICovCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9yZWVudHJhbnQuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL3JlZW50cmFudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjk0NWRhLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL3JlZW50cmFudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgX0JJT05JQ19ORVRCU0RfUkVFTlRSQU5UX0hfaW5jbHVkZWQKLSNkZWZpbmUgX0JJT05JQ19ORVRCU0RfUkVFTlRSQU5UX0hfaW5jbHVkZWQKLQotI2RlZmluZSBfUkVFTlRSQU5UCi0KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLS8vCi0vLyBNYXAgTmV0QlNEIGxpYmMgaW50ZXJuYWwgbG9ja2luZyB0byBwdGhyZWFkIGxvY2tpbmcuCi0vLwotCi0jZGVmaW5lIE1VVEVYX0lOSVRJQUxJWkVSIFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIKLSNkZWZpbmUgbXV0ZXhfdCBwdGhyZWFkX211dGV4X3QKLQotI2RlZmluZSBSV0xPQ0tfSU5JVElBTElaRVIgUFRIUkVBRF9SV0xPQ0tfSU5JVElBTElaRVIKLSNkZWZpbmUgcndsb2NrX3QgcHRocmVhZF9yd2xvY2tfdAotI2RlZmluZSByd2xvY2tfcmRsb2NrIHB0aHJlYWRfcndsb2NrX3JkbG9jawotI2RlZmluZSByd2xvY2tfdW5sb2NrIHB0aHJlYWRfcndsb2NrX3VubG9jawotI2RlZmluZSByd2xvY2tfd3Jsb2NrIHB0aHJlYWRfcndsb2NrX3dybG9jawotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9SRUFETUUudHh0IGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRiNjRlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9SRUFETUUudHh0CkBAIC0wLDAgKzEsNSBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdXBzdHJlYW0gT3BlbkJTRCBzb3VyY2UuIFlvdSBzaG91bGQgbm90IGVkaXQgdGhlc2UKK2ZpbGVzIGRpcmVjdGx5LiBNYWtlIGZpeGVzIHVwc3RyZWFtIGFuZCB0aGVuIHB1bGwgZG93biB0aGUgbmV3IHZlcnNpb24gb2YKK3RoZSBmaWxlLgorCitUT0RPOiB3cml0ZSBhIHNjcmlwdCB0byBtYWtlIHRoaXMgcHJvY2VzcyBhdXRvbWF0ZWQuCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvYW5kcm9pZC9nZHRvYV9zdXBwb3J0LmNwcCBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9hbmRyb2lkL2dkdG9hX3N1cHBvcnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlN2JmM2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvYW5kcm9pZC9nZHRvYV9zdXBwb3J0LmNwcApAQCAtMCwwICsxLDE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworX19MSUJDX0hJRERFTl9fIHB0aHJlYWRfbXV0ZXhfdCBfX2R0b2FfbG9ja3NbXSA9IHsgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiwgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiB9OwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2FuZHJvaWQvaW5jbHVkZS9hcmM0cmFuZG9tLmggYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvYW5kcm9pZC9pbmNsdWRlL2FyYzRyYW5kb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDcyNTdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2FuZHJvaWQvaW5jbHVkZS9hcmM0cmFuZG9tLmgKQEAgLTAsMCArMSw4NyBAQAorLyoJJE9wZW5CU0Q6IGFyYzRyYW5kb21fbGludXguaCx2IDEuNyAyMDE0LzA3LzIwIDIwOjUxOjEzIGJjb29rIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsIERhdmlkIE1hemllcmVzIDxkbUB1dW4ub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDA4LCBEYW1pZW4gTWlsbGVyIDxkam1Ab3BlbmJzZC5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDIwMTMsIE1hcmt1cyBGcmllZGwgPG1hcmt1c0BvcGVuYnNkLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisvKgorICogU3R1YiBmdW5jdGlvbnMgZm9yIHBvcnRhYmlsaXR5LgorICovCisKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisvLyBBbmRyb2lkIGdldHMgdGhlc2UgZnJvbSAidGhyZWFkX3ByaXZhdGUuaCIuCisjaW5jbHVkZSAidGhyZWFkX3ByaXZhdGUuaCIKKy8vc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBhcmM0cmFuZG9tX210eCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisvLyNkZWZpbmUgX0FSQzRfTE9DSygpICAgcHRocmVhZF9tdXRleF9sb2NrKCZhcmM0cmFuZG9tX210eCkKKy8vI2RlZmluZSBfQVJDNF9VTkxPQ0soKSBwdGhyZWFkX211dGV4X3VubG9jaygmYXJjNHJhbmRvbV9tdHgpCisKKyNpZmRlZiBfX0dMSUJDX18KK2V4dGVybiB2b2lkICpfX2Rzb19oYW5kbGU7CitleHRlcm4gaW50IF9fcmVnaXN0ZXJfYXRmb3JrKHZvaWQgKCopKHZvaWQpLCB2b2lkKCopKHZvaWQpLCB2b2lkICgqKSh2b2lkKSwgdm9pZCAqKTsKKyNkZWZpbmUgX0FSQzRfQVRGT1JLKGYpIF9fcmVnaXN0ZXJfYXRmb3JrKE5VTEwsIE5VTEwsIChmKSwgX19kc29faGFuZGxlKQorI2Vsc2UKKyNkZWZpbmUgX0FSQzRfQVRGT1JLKGYpIHB0aHJlYWRfYXRmb3JrKE5VTEwsIE5VTEwsIChmKSkKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQKK19nZXRlbnRyb3B5X2ZhaWwodm9pZCkKK3sKKwlyYWlzZShTSUdLSUxMKTsKK30KKworc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBfcnNfZm9ya2VkOworCitzdGF0aWMgaW5saW5lIHZvaWQKK19yc19mb3JraGFuZGxlcih2b2lkKQoreworCV9yc19mb3JrZWQgPSAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19yc19mb3JrZGV0ZWN0KHZvaWQpCit7CisJc3RhdGljIHBpZF90IF9yc19waWQgPSAwOworCXBpZF90IHBpZCA9IGdldHBpZCgpOworCisJaWYgKF9yc19waWQgPT0gMCB8fCBfcnNfcGlkICE9IHBpZCB8fCBfcnNfZm9ya2VkKSB7CisJCV9yc19waWQgPSBwaWQ7CisJCV9yc19mb3JrZWQgPSAwOworCQlpZiAocnMpCisJCQltZW1zZXQocnMsIDAsIHNpemVvZigqcnMpKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfcnNfYWxsb2NhdGUoc3RydWN0IF9ycyAqKnJzcCwgc3RydWN0IF9yc3ggKipyc3hwKQoreworCWlmICgoKnJzcCA9IG1tYXAoTlVMTCwgc2l6ZW9mKCoqcnNwKSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsCisJICAgIE1BUF9BTk9OfE1BUF9QUklWQVRFLCAtMSwgMCkpID09IE1BUF9GQUlMRUQpCisJCXJldHVybiAoLTEpOworCisJaWYgKCgqcnN4cCA9IG1tYXAoTlVMTCwgc2l6ZW9mKCoqcnN4cCksIFBST1RfUkVBRHxQUk9UX1dSSVRFLAorCSAgICBNQVBfQU5PTnxNQVBfUFJJVkFURSwgLTEsIDApKSA9PSBNQVBfRkFJTEVEKSB7CisJCW11bm1hcCgqcnN4cCwgc2l6ZW9mKCoqcnN4cCkpOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlfQVJDNF9BVEZPUksoX3JzX2ZvcmtoYW5kbGVyKTsKKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2FuZHJvaWQvaW5jbHVkZS9hcml0aC5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2FuZHJvaWQvaW5jbHVkZS9hcml0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNjJlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvYW5kcm9pZC9pbmNsdWRlL2FyaXRoLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNkZWZpbmUgSUVFRV84MDg3CisKKyNpZiBfX0xQNjRfXworI2RlZmluZSBMb25nIGludAorI2VuZGlmCisKKyNkZWZpbmUgSU5GTkFOX0NIRUNLCisjZGVmaW5lIE1VTFRJUExFX1RIUkVBRFMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9hbmRyb2lkL2luY2x1ZGUvZ2RfcW5hbi5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2FuZHJvaWQvaW5jbHVkZS9nZF9xbmFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThlOTA3YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9hbmRyb2lkL2luY2x1ZGUvZ2RfcW5hbi5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWYgX19hcm1fXworCisjZGVmaW5lIGZfUU5BTiAgMHhmZmZmZmZmZgorCisjZGVmaW5lIGRfUU5BTjAgMHhmZmZmZmZmZgorI2RlZmluZSBkX1FOQU4xIDB4ZmZmZmZmZmYKKworI2VsaWYgX19taXBzX18KKworI2RlZmluZSBmX1FOQU4gIDB4N2ZiZmZmZmYKKworI2RlZmluZSBkX1FOQU4wIDB4N2ZmN2ZmZmYKKyNkZWZpbmUgZF9RTkFOMSAweGZmZmZmZmZmCisKKyNlbHNlCisKKyNkZWZpbmUgZl9RTkFOICAweGZmYzAwMDAwCisKKyNkZWZpbmUgZF9RTkFOMCAweDAwMDAwMDAwCisjZGVmaW5lIGRfUU5BTjEgMHhmZmY4MDAwMAorCisjZW5kaWYKKworLyogbG9uZyBkb3VibGUuICovCisjaWYgX19MUDY0X18KKyNkZWZpbmUgbGRfUU5BTjAgMHg3ZmZmODAwMAorI2RlZmluZSBsZF9RTkFOMSAweDAwMDAwMDAwCisjZGVmaW5lIGxkX1FOQU4yIDB4MDAwMDAwMDAKKyNkZWZpbmUgbGRfUU5BTjMgMHgwMDAwMDAwMAorI2Vsc2UKKy8qIHNpemVvZihsb25nIGRvdWJsZSkgPT0gc2l6ZW9mKGRvdWJsZSksIHNvIHdlIHNob3VsZG4ndCBiZSB0cnlpbmcgdG8gdXNlIHRoZXNlIGNvbnN0YW50cy4gKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2FuZHJvaWQvaW5jbHVkZS9vcGVuYnNkLWNvbXBhdC5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2FuZHJvaWQvaW5jbHVkZS9vcGVuYnNkLWNvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YWQyYzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvYW5kcm9pZC9pbmNsdWRlL29wZW5ic2QtY29tcGF0LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0JJT05JQ19PUEVOQlNEX0NPTVBBVF9IX2luY2x1ZGVkCisjZGVmaW5lIF9CSU9OSUNfT1BFTkJTRF9DT01QQVRfSF9pbmNsdWRlZAorCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+IC8vIEZvciBzaXplX3QuCisKKyNkZWZpbmUgX19VU0VfQlNECisKKy8qIE9wZW5CU0QncyA8Y3R5cGUuaD4gdXNlcyB0aGVzZSBuYW1lcywgd2hpY2ggY29uZmxpY3RlZCB3aXRoIHN0bHBvcnQuCisgKiBBZGRpdGlvbmFsbHksIHdlIGNoYW5nZWQgdGhlIG51bWVyaWMvZGlnaXQgdHlwZSBmcm9tIE4gdG8gRCBmb3IgbGliY3h4LgorICovCisjZGVmaW5lIF9VIF9DVFlQRV9VCisjZGVmaW5lIF9MIF9DVFlQRV9MCisjZGVmaW5lIF9OIF9DVFlQRV9ECisjZGVmaW5lIF9TIF9DVFlQRV9TCisjZGVmaW5lIF9QIF9DVFlQRV9QCisjZGVmaW5lIF9DIF9DVFlQRV9DCisjZGVmaW5lIF9YIF9DVFlQRV9YCisjZGVmaW5lIF9CIF9DVFlQRV9CCisKKy8qIE9wZW5CU0QgaGFzIHRoaXMsIGJ1dCB3ZSBjYW4ndCByZWFsbHkgaW1wbGVtZW50IGl0IGNvcnJlY3RseSBvbiBMaW51eC4gKi8KKyNkZWZpbmUgaXNzZXR1Z2lkKCkgMAorCisjZGVmaW5lIGV4cGxpY2l0X2J6ZXJvKHAsIHMpIG1lbXNldChwLCAwLCBzKQorCisvKiBXZSBoYXZlIE9wZW5CU0QncyBnZXRlbnRyb3B5X2xpbnV4LmMsIGJ1dCB3ZSBkb24ndCBtZW50aW9uIGdldGVudHJvcHkgaW4gYW55IGhlYWRlci4gKi8KK19fTElCQ19ISURERU5fXyBleHRlcm4gaW50IGdldGVudHJvcHkodm9pZCosIHNpemVfdCk7CisKKy8qIExQMzIgTkRLIGN0eXBlLmggY29udGFpbmVkIHJlZmVyZW5jZXMgdG8gdGhlc2UuICovCitfX0xJQkM2NF9ISURERU5fXyBleHRlcm4gY29uc3Qgc2hvcnQqIF90b2xvd2VyX3RhYl87CitfX0xJQkM2NF9ISURERU5fXyBleHRlcm4gY29uc3Qgc2hvcnQqIF90b3VwcGVyX3RhYl87CisKK19fTElCQ19ISURERU5fXyBleHRlcm4gc3RydWN0IGF0ZXhpdCogX19hdGV4aXQ7CitfX0xJQkNfSElEREVOX18gZXh0ZXJuIGNvbnN0IGNoYXIgX0NfY3R5cGVfW107CitfX0xJQkNfSElEREVOX18gZXh0ZXJuIGNvbnN0IHNob3J0IF9DX3RvdXBwZXJfW107CitfX0xJQkNfSElEREVOX18gZXh0ZXJuIGNvbnN0IHNob3J0IF9DX3RvbG93ZXJfW107CitfX0xJQkNfSElEREVOX18gZXh0ZXJuIGNoYXIqIF9fZmluZGVudihjb25zdCBjaGFyKiwgaW50LCBpbnQqKTsKK19fTElCQ19ISURERU5fXyBleHRlcm4gY2hhciogX21rdGVtcChjaGFyKik7CisKKy8qIFRPRE86IGhpZGUgdGhpcyB3aGVuIGFuZHJvaWRfc3VwcG9ydC5hIGlzIGZpeGVkIChodHRwOi8vYi8xNjI5ODU4MCkuKi8KKy8qX19MSUJDX0hJRERFTl9fKi8gZXh0ZXJuIGludCBfX2lzdGhyZWFkZWQ7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2NyeXB0L2FyYzRyYW5kb20uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9jcnlwdC9hcmM0cmFuZG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyNDhiNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9jcnlwdC9hcmM0cmFuZG9tLmMKQEAgLTAsMCArMSwxOTUgQEAKKy8qCSRPcGVuQlNEOiBhcmM0cmFuZG9tLmMsdiAxLjUwIDIwMTQvMDcvMjEgMTg6MTM6MTIgZGVyYWFkdCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk2LCBEYXZpZCBNYXppZXJlcyA8ZG1AdXVuLm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwOCwgRGFtaWVuIE1pbGxlciA8ZGptQG9wZW5ic2Qub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDEzLCBNYXJrdXMgRnJpZWRsIDxtYXJrdXNAb3BlbmJzZC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworLyoKKyAqIENoYUNoYSBiYXNlZCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBmb3IgT3BlbkJTRC4KKyAqLworCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjZGVmaW5lIEtFWVNUUkVBTV9PTkxZCisjaW5jbHVkZSAiY2hhY2hhX3ByaXZhdGUuaCIKKworI2RlZmluZSBtaW4oYSwgYikgKChhKSA8IChiKSA/IChhKSA6IChiKSkKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBpbmxpbmUgX19pbmxpbmUKKyNlbHNlCQkJCS8qICFfX0dOVUNfXyAqLworI2RlZmluZSBpbmxpbmUKKyNlbmRpZgkJCQkvKiAhX19HTlVDX18gKi8KKworI2RlZmluZSBLRVlTWgkzMgorI2RlZmluZSBJVlNaCTgKKyNkZWZpbmUgQkxPQ0tTWgk2NAorI2RlZmluZSBSU0JVRlNaCSgxNipCTE9DS1NaKQorCisvKiBNYXJrZWQgTUFQX0lOSEVSSVRfWkVSTywgc28gemVybydkIG91dCBpbiBmb3JrIGNoaWxkcmVuLiAqLworc3RhdGljIHN0cnVjdCBfcnMgeworCXNpemVfdAkJcnNfaGF2ZTsJLyogdmFsaWQgYnl0ZXMgYXQgZW5kIG9mIHJzX2J1ZiAqLworCXNpemVfdAkJcnNfY291bnQ7CS8qIGJ5dGVzIHRpbGwgcmVzZWVkICovCit9ICpyczsKKworLyogTWF5YmUgYmUgcHJlc2VydmVkIGluIGZvcmsgY2hpbGRyZW4sIGlmIF9yc19hbGxvY2F0ZSgpIGRlY2lkZXMuICovCitzdGF0aWMgc3RydWN0IF9yc3ggeworCWNoYWNoYV9jdHgJcnNfY2hhY2hhOwkvKiBjaGFjaGEgY29udGV4dCBmb3IgcmFuZG9tIGtleXN0cmVhbSAqLworCXVfY2hhcgkJcnNfYnVmW1JTQlVGU1pdOwkvKiBrZXlzdHJlYW0gYmxvY2tzICovCit9ICpyc3g7CisKK3N0YXRpYyBpbmxpbmUgaW50IF9yc19hbGxvY2F0ZShzdHJ1Y3QgX3JzICoqLCBzdHJ1Y3QgX3JzeCAqKik7CitzdGF0aWMgaW5saW5lIHZvaWQgX3JzX2ZvcmtkZXRlY3Qodm9pZCk7CisjaW5jbHVkZSAiYXJjNHJhbmRvbS5oIgorCitzdGF0aWMgaW5saW5lIHZvaWQgX3JzX3Jla2V5KHVfY2hhciAqZGF0LCBzaXplX3QgZGF0bGVuKTsKKworc3RhdGljIGlubGluZSB2b2lkCitfcnNfaW5pdCh1X2NoYXIgKmJ1Ziwgc2l6ZV90IG4pCit7CisJaWYgKG4gPCBLRVlTWiArIElWU1opCisJCXJldHVybjsKKworCWlmIChycyA9PSBOVUxMKSB7CisJCWlmIChfcnNfYWxsb2NhdGUoJnJzLCAmcnN4KSA9PSAtMSkKKwkJCWFib3J0KCk7CisJfQorCisJY2hhY2hhX2tleXNldHVwKCZyc3gtPnJzX2NoYWNoYSwgYnVmLCBLRVlTWiAqIDgsIDApOworCWNoYWNoYV9pdnNldHVwKCZyc3gtPnJzX2NoYWNoYSwgYnVmICsgS0VZU1opOworfQorCitzdGF0aWMgdm9pZAorX3JzX3N0aXIodm9pZCkKK3sKKwl1X2NoYXIgcm5kW0tFWVNaICsgSVZTWl07CisKKwlpZiAoZ2V0ZW50cm9weShybmQsIHNpemVvZiBybmQpID09IC0xKQorCQlfZ2V0ZW50cm9weV9mYWlsKCk7CisKKwlpZiAoIXJzKQorCQlfcnNfaW5pdChybmQsIHNpemVvZihybmQpKTsKKwllbHNlCisJCV9yc19yZWtleShybmQsIHNpemVvZihybmQpKTsKKwlleHBsaWNpdF9iemVybyhybmQsIHNpemVvZihybmQpKTsJLyogZGlzY2FyZCBzb3VyY2Ugc2VlZCAqLworCisJLyogaW52YWxpZGF0ZSByc19idWYgKi8KKwlycy0+cnNfaGF2ZSA9IDA7CisJbWVtc2V0KHJzeC0+cnNfYnVmLCAwLCBzaXplb2YocnN4LT5yc19idWYpKTsKKworCXJzLT5yc19jb3VudCA9IDE2MDAwMDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX3JzX3N0aXJfaWZfbmVlZGVkKHNpemVfdCBsZW4pCit7CisJX3JzX2ZvcmtkZXRlY3QoKTsKKwlpZiAoIXJzIHx8IHJzLT5yc19jb3VudCA8PSBsZW4pCisJCV9yc19zdGlyKCk7CisJaWYgKHJzLT5yc19jb3VudCA8PSBsZW4pCisJCXJzLT5yc19jb3VudCA9IDA7CisJZWxzZQorCQlycy0+cnNfY291bnQgLT0gbGVuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19yc19yZWtleSh1X2NoYXIgKmRhdCwgc2l6ZV90IGRhdGxlbikKK3sKKyNpZm5kZWYgS0VZU1RSRUFNX09OTFkKKwltZW1zZXQocnN4LT5yc19idWYsIDAsIHNpemVvZihyc3gtPnJzX2J1ZikpOworI2VuZGlmCisJLyogZmlsbCByc19idWYgd2l0aCB0aGUga2V5c3RyZWFtICovCisJY2hhY2hhX2VuY3J5cHRfYnl0ZXMoJnJzeC0+cnNfY2hhY2hhLCByc3gtPnJzX2J1ZiwKKwkgICAgcnN4LT5yc19idWYsIHNpemVvZihyc3gtPnJzX2J1ZikpOworCS8qIG1peCBpbiBvcHRpb25hbCB1c2VyIHByb3ZpZGVkIGRhdGEgKi8KKwlpZiAoZGF0KSB7CisJCXNpemVfdCBpLCBtOworCisJCW0gPSBtaW4oZGF0bGVuLCBLRVlTWiArIElWU1opOworCQlmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKQorCQkJcnN4LT5yc19idWZbaV0gXj0gZGF0W2ldOworCX0KKwkvKiBpbW1lZGlhdGVseSByZWluaXQgZm9yIGJhY2t0cmFja2luZyByZXNpc3RhbmNlICovCisJX3JzX2luaXQocnN4LT5yc19idWYsIEtFWVNaICsgSVZTWik7CisJbWVtc2V0KHJzeC0+cnNfYnVmLCAwLCBLRVlTWiArIElWU1opOworCXJzLT5yc19oYXZlID0gc2l6ZW9mKHJzeC0+cnNfYnVmKSAtIEtFWVNaIC0gSVZTWjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfcnNfcmFuZG9tX2J1Zih2b2lkICpfYnVmLCBzaXplX3QgbikKK3sKKwl1X2NoYXIgKmJ1ZiA9ICh1X2NoYXIgKilfYnVmOworCXVfY2hhciAqa2V5c3RyZWFtOworCXNpemVfdCBtOworCisJX3JzX3N0aXJfaWZfbmVlZGVkKG4pOworCXdoaWxlIChuID4gMCkgeworCQlpZiAocnMtPnJzX2hhdmUgPiAwKSB7CisJCQltID0gbWluKG4sIHJzLT5yc19oYXZlKTsKKwkJCWtleXN0cmVhbSA9IHJzeC0+cnNfYnVmICsgc2l6ZW9mKHJzeC0+cnNfYnVmKQorCQkJICAgIC0gcnMtPnJzX2hhdmU7CisJCQltZW1jcHkoYnVmLCBrZXlzdHJlYW0sIG0pOworCQkJbWVtc2V0KGtleXN0cmVhbSwgMCwgbSk7CisJCQlidWYgKz0gbTsKKwkJCW4gLT0gbTsKKwkJCXJzLT5yc19oYXZlIC09IG07CisJCX0KKwkJaWYgKHJzLT5yc19oYXZlID09IDApCisJCQlfcnNfcmVrZXkoTlVMTCwgMCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19yc19yYW5kb21fdTMyKHVpbnQzMl90ICp2YWwpCit7CisJdV9jaGFyICprZXlzdHJlYW07CisKKwlfcnNfc3Rpcl9pZl9uZWVkZWQoc2l6ZW9mKCp2YWwpKTsKKwlpZiAocnMtPnJzX2hhdmUgPCBzaXplb2YoKnZhbCkpCisJCV9yc19yZWtleShOVUxMLCAwKTsKKwlrZXlzdHJlYW0gPSByc3gtPnJzX2J1ZiArIHNpemVvZihyc3gtPnJzX2J1ZikgLSBycy0+cnNfaGF2ZTsKKwltZW1jcHkodmFsLCBrZXlzdHJlYW0sIHNpemVvZigqdmFsKSk7CisJbWVtc2V0KGtleXN0cmVhbSwgMCwgc2l6ZW9mKCp2YWwpKTsKKwlycy0+cnNfaGF2ZSAtPSBzaXplb2YoKnZhbCk7Cit9CisKK3VpbnQzMl90CithcmM0cmFuZG9tKHZvaWQpCit7CisJdWludDMyX3QgdmFsOworCisJX0FSQzRfTE9DSygpOworCV9yc19yYW5kb21fdTMyKCZ2YWwpOworCV9BUkM0X1VOTE9DSygpOworCXJldHVybiB2YWw7Cit9CisKK3ZvaWQKK2FyYzRyYW5kb21fYnVmKHZvaWQgKmJ1Ziwgc2l6ZV90IG4pCit7CisJX0FSQzRfTE9DSygpOworCV9yc19yYW5kb21fYnVmKGJ1Ziwgbik7CisJX0FSQzRfVU5MT0NLKCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvY3J5cHQvYXJjNHJhbmRvbV91bmlmb3JtLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvY3J5cHQvYXJjNHJhbmRvbV91bmlmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFhOWE2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9jcnlwdC9hcmM0cmFuZG9tX3VuaWZvcm0uYwpAQCAtMCwwICsxLDU2IEBACisvKgkkT3BlbkJTRDogYXJjNHJhbmRvbV91bmlmb3JtLmMsdiAxLjEgMjAxNC8wNy8xMiAxMzoyNDo1NCBkZXJhYWR0IEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIERhbWllbiBNaWxsZXIgPGRqbUBvcGVuYnNkLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qCisgKiBDYWxjdWxhdGUgYSB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgcmFuZG9tIG51bWJlciBsZXNzIHRoYW4gdXBwZXJfYm91bmQKKyAqIGF2b2lkaW5nICJtb2R1bG8gYmlhcyIuCisgKgorICogVW5pZm9ybWl0eSBpcyBhY2hpZXZlZCBieSBnZW5lcmF0aW5nIG5ldyByYW5kb20gbnVtYmVycyB1bnRpbCB0aGUgb25lCisgKiByZXR1cm5lZCBpcyBvdXRzaWRlIHRoZSByYW5nZSBbMCwgMioqMzIgJSB1cHBlcl9ib3VuZCkuICBUaGlzCisgKiBndWFyYW50ZWVzIHRoZSBzZWxlY3RlZCByYW5kb20gbnVtYmVyIHdpbGwgYmUgaW5zaWRlCisgKiBbMioqMzIgJSB1cHBlcl9ib3VuZCwgMioqMzIpIHdoaWNoIG1hcHMgYmFjayB0byBbMCwgdXBwZXJfYm91bmQpCisgKiBhZnRlciByZWR1Y3Rpb24gbW9kdWxvIHVwcGVyX2JvdW5kLgorICovCit1aW50MzJfdAorYXJjNHJhbmRvbV91bmlmb3JtKHVpbnQzMl90IHVwcGVyX2JvdW5kKQoreworCXVpbnQzMl90IHIsIG1pbjsKKworCWlmICh1cHBlcl9ib3VuZCA8IDIpCisJCXJldHVybiAwOworCisJLyogMioqMzIgJSB4ID09ICgyKiozMiAtIHgpICUgeCAqLworCW1pbiA9IC11cHBlcl9ib3VuZCAlIHVwcGVyX2JvdW5kOworCisJLyoKKwkgKiBUaGlzIGNvdWxkIHRoZW9yZXRpY2FsbHkgbG9vcCBmb3JldmVyIGJ1dCBlYWNoIHJldHJ5IGhhcworCSAqIHAgPiAwLjUgKHdvcnN0IGNhc2UsIHVzdWFsbHkgZmFyIGJldHRlcikgb2Ygc2VsZWN0aW5nIGEKKwkgKiBudW1iZXIgaW5zaWRlIHRoZSByYW5nZSB3ZSBuZWVkLCBzbyBpdCBzaG91bGQgcmFyZWx5IG5lZWQKKwkgKiB0byByZS1yb2xsLgorCSAqLworCWZvciAoOzspIHsKKwkJciA9IGFyYzRyYW5kb20oKTsKKwkJaWYgKHIgPj0gbWluKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHIgJSB1cHBlcl9ib3VuZDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9jcnlwdC9jaGFjaGFfcHJpdmF0ZS5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2NyeXB0L2NoYWNoYV9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MzNjgwZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9jcnlwdC9jaGFjaGFfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjIyIEBACisvKgorY2hhY2hhLW1lcmdlZC5jIHZlcnNpb24gMjAwODAxMTgKK0QuIEouIEJlcm5zdGVpbgorUHVibGljIGRvbWFpbi4KKyovCisKKy8qICRPcGVuQlNEOiBjaGFjaGFfcHJpdmF0ZS5oLHYgMS4yIDIwMTMvMTAvMDQgMDc6MDI6MjcgZGptIEV4cCAkICovCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdTMyIGlucHV0WzE2XTsgLyogY291bGQgYmUgY29tcHJlc3NlZCAqLworfSBjaGFjaGFfY3R4OworCisjZGVmaW5lIFU4Qyh2KSAodiMjVSkKKyNkZWZpbmUgVTMyQyh2KSAodiMjVSkKKworI2RlZmluZSBVOFYodikgKCh1OCkodikgJiBVOEMoMHhGRikpCisjZGVmaW5lIFUzMlYodikgKCh1MzIpKHYpICYgVTMyQygweEZGRkZGRkZGKSkKKworI2RlZmluZSBST1RMMzIodiwgbikgXAorICAoVTMyVigodikgPDwgKG4pKSB8ICgodikgPj4gKDMyIC0gKG4pKSkpCisKKyNkZWZpbmUgVThUTzMyX0xJVFRMRShwKSBcCisgICgoKHUzMikoKHApWzBdKSAgICAgICkgfCBcCisgICAoKHUzMikoKHApWzFdKSA8PCAgOCkgfCBcCisgICAoKHUzMikoKHApWzJdKSA8PCAxNikgfCBcCisgICAoKHUzMikoKHApWzNdKSA8PCAyNCkpCisKKyNkZWZpbmUgVTMyVE84X0xJVFRMRShwLCB2KSBcCisgIGRvIHsgXAorICAgIChwKVswXSA9IFU4VigodikgICAgICApOyBcCisgICAgKHApWzFdID0gVThWKCh2KSA+PiAgOCk7IFwKKyAgICAocClbMl0gPSBVOFYoKHYpID4+IDE2KTsgXAorICAgIChwKVszXSA9IFU4VigodikgPj4gMjQpOyBcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgUk9UQVRFKHYsYykgKFJPVEwzMih2LGMpKQorI2RlZmluZSBYT1Iodix3KSAoKHYpIF4gKHcpKQorI2RlZmluZSBQTFVTKHYsdykgKFUzMlYoKHYpICsgKHcpKSkKKyNkZWZpbmUgUExVU09ORSh2KSAoUExVUygodiksMSkpCisKKyNkZWZpbmUgUVVBUlRFUlJPVU5EKGEsYixjLGQpIFwKKyAgYSA9IFBMVVMoYSxiKTsgZCA9IFJPVEFURShYT1IoZCxhKSwxNik7IFwKKyAgYyA9IFBMVVMoYyxkKTsgYiA9IFJPVEFURShYT1IoYixjKSwxMik7IFwKKyAgYSA9IFBMVVMoYSxiKTsgZCA9IFJPVEFURShYT1IoZCxhKSwgOCk7IFwKKyAgYyA9IFBMVVMoYyxkKTsgYiA9IFJPVEFURShYT1IoYixjKSwgNyk7CisKK3N0YXRpYyBjb25zdCBjaGFyIHNpZ21hWzE2XSA9ICJleHBhbmQgMzItYnl0ZSBrIjsKK3N0YXRpYyBjb25zdCBjaGFyIHRhdVsxNl0gPSAiZXhwYW5kIDE2LWJ5dGUgayI7CisKK3N0YXRpYyB2b2lkCitjaGFjaGFfa2V5c2V0dXAoY2hhY2hhX2N0eCAqeCxjb25zdCB1OCAqayx1MzIga2JpdHMsdTMyIGl2Yml0cykKK3sKKyAgY29uc3QgY2hhciAqY29uc3RhbnRzOworCisgIHgtPmlucHV0WzRdID0gVThUTzMyX0xJVFRMRShrICsgMCk7CisgIHgtPmlucHV0WzVdID0gVThUTzMyX0xJVFRMRShrICsgNCk7CisgIHgtPmlucHV0WzZdID0gVThUTzMyX0xJVFRMRShrICsgOCk7CisgIHgtPmlucHV0WzddID0gVThUTzMyX0xJVFRMRShrICsgMTIpOworICBpZiAoa2JpdHMgPT0gMjU2KSB7IC8qIHJlY29tbWVuZGVkICovCisgICAgayArPSAxNjsKKyAgICBjb25zdGFudHMgPSBzaWdtYTsKKyAgfSBlbHNlIHsgLyoga2JpdHMgPT0gMTI4ICovCisgICAgY29uc3RhbnRzID0gdGF1OworICB9CisgIHgtPmlucHV0WzhdID0gVThUTzMyX0xJVFRMRShrICsgMCk7CisgIHgtPmlucHV0WzldID0gVThUTzMyX0xJVFRMRShrICsgNCk7CisgIHgtPmlucHV0WzEwXSA9IFU4VE8zMl9MSVRUTEUoayArIDgpOworICB4LT5pbnB1dFsxMV0gPSBVOFRPMzJfTElUVExFKGsgKyAxMik7CisgIHgtPmlucHV0WzBdID0gVThUTzMyX0xJVFRMRShjb25zdGFudHMgKyAwKTsKKyAgeC0+aW5wdXRbMV0gPSBVOFRPMzJfTElUVExFKGNvbnN0YW50cyArIDQpOworICB4LT5pbnB1dFsyXSA9IFU4VE8zMl9MSVRUTEUoY29uc3RhbnRzICsgOCk7CisgIHgtPmlucHV0WzNdID0gVThUTzMyX0xJVFRMRShjb25zdGFudHMgKyAxMik7Cit9CisKK3N0YXRpYyB2b2lkCitjaGFjaGFfaXZzZXR1cChjaGFjaGFfY3R4ICp4LGNvbnN0IHU4ICppdikKK3sKKyAgeC0+aW5wdXRbMTJdID0gMDsKKyAgeC0+aW5wdXRbMTNdID0gMDsKKyAgeC0+aW5wdXRbMTRdID0gVThUTzMyX0xJVFRMRShpdiArIDApOworICB4LT5pbnB1dFsxNV0gPSBVOFRPMzJfTElUVExFKGl2ICsgNCk7Cit9CisKK3N0YXRpYyB2b2lkCitjaGFjaGFfZW5jcnlwdF9ieXRlcyhjaGFjaGFfY3R4ICp4LGNvbnN0IHU4ICptLHU4ICpjLHUzMiBieXRlcykKK3sKKyAgdTMyIHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2LCB4NywgeDgsIHg5LCB4MTAsIHgxMSwgeDEyLCB4MTMsIHgxNCwgeDE1OworICB1MzIgajAsIGoxLCBqMiwgajMsIGo0LCBqNSwgajYsIGo3LCBqOCwgajksIGoxMCwgajExLCBqMTIsIGoxMywgajE0LCBqMTU7CisgIHU4ICpjdGFyZ2V0ID0gTlVMTDsKKyAgdTggdG1wWzY0XTsKKyAgdV9pbnQgaTsKKworICBpZiAoIWJ5dGVzKSByZXR1cm47CisKKyAgajAgPSB4LT5pbnB1dFswXTsKKyAgajEgPSB4LT5pbnB1dFsxXTsKKyAgajIgPSB4LT5pbnB1dFsyXTsKKyAgajMgPSB4LT5pbnB1dFszXTsKKyAgajQgPSB4LT5pbnB1dFs0XTsKKyAgajUgPSB4LT5pbnB1dFs1XTsKKyAgajYgPSB4LT5pbnB1dFs2XTsKKyAgajcgPSB4LT5pbnB1dFs3XTsKKyAgajggPSB4LT5pbnB1dFs4XTsKKyAgajkgPSB4LT5pbnB1dFs5XTsKKyAgajEwID0geC0+aW5wdXRbMTBdOworICBqMTEgPSB4LT5pbnB1dFsxMV07CisgIGoxMiA9IHgtPmlucHV0WzEyXTsKKyAgajEzID0geC0+aW5wdXRbMTNdOworICBqMTQgPSB4LT5pbnB1dFsxNF07CisgIGoxNSA9IHgtPmlucHV0WzE1XTsKKworICBmb3IgKDs7KSB7CisgICAgaWYgKGJ5dGVzIDwgNjQpIHsKKyAgICAgIGZvciAoaSA9IDA7aSA8IGJ5dGVzOysraSkgdG1wW2ldID0gbVtpXTsKKyAgICAgIG0gPSB0bXA7CisgICAgICBjdGFyZ2V0ID0gYzsKKyAgICAgIGMgPSB0bXA7CisgICAgfQorICAgIHgwID0gajA7CisgICAgeDEgPSBqMTsKKyAgICB4MiA9IGoyOworICAgIHgzID0gajM7CisgICAgeDQgPSBqNDsKKyAgICB4NSA9IGo1OworICAgIHg2ID0gajY7CisgICAgeDcgPSBqNzsKKyAgICB4OCA9IGo4OworICAgIHg5ID0gajk7CisgICAgeDEwID0gajEwOworICAgIHgxMSA9IGoxMTsKKyAgICB4MTIgPSBqMTI7CisgICAgeDEzID0gajEzOworICAgIHgxNCA9IGoxNDsKKyAgICB4MTUgPSBqMTU7CisgICAgZm9yIChpID0gMjA7aSA+IDA7aSAtPSAyKSB7CisgICAgICBRVUFSVEVSUk9VTkQoIHgwLCB4NCwgeDgseDEyKQorICAgICAgUVVBUlRFUlJPVU5EKCB4MSwgeDUsIHg5LHgxMykKKyAgICAgIFFVQVJURVJST1VORCggeDIsIHg2LHgxMCx4MTQpCisgICAgICBRVUFSVEVSUk9VTkQoIHgzLCB4Nyx4MTEseDE1KQorICAgICAgUVVBUlRFUlJPVU5EKCB4MCwgeDUseDEwLHgxNSkKKyAgICAgIFFVQVJURVJST1VORCggeDEsIHg2LHgxMSx4MTIpCisgICAgICBRVUFSVEVSUk9VTkQoIHgyLCB4NywgeDgseDEzKQorICAgICAgUVVBUlRFUlJPVU5EKCB4MywgeDQsIHg5LHgxNCkKKyAgICB9CisgICAgeDAgPSBQTFVTKHgwLGowKTsKKyAgICB4MSA9IFBMVVMoeDEsajEpOworICAgIHgyID0gUExVUyh4MixqMik7CisgICAgeDMgPSBQTFVTKHgzLGozKTsKKyAgICB4NCA9IFBMVVMoeDQsajQpOworICAgIHg1ID0gUExVUyh4NSxqNSk7CisgICAgeDYgPSBQTFVTKHg2LGo2KTsKKyAgICB4NyA9IFBMVVMoeDcsajcpOworICAgIHg4ID0gUExVUyh4OCxqOCk7CisgICAgeDkgPSBQTFVTKHg5LGo5KTsKKyAgICB4MTAgPSBQTFVTKHgxMCxqMTApOworICAgIHgxMSA9IFBMVVMoeDExLGoxMSk7CisgICAgeDEyID0gUExVUyh4MTIsajEyKTsKKyAgICB4MTMgPSBQTFVTKHgxMyxqMTMpOworICAgIHgxNCA9IFBMVVMoeDE0LGoxNCk7CisgICAgeDE1ID0gUExVUyh4MTUsajE1KTsKKworI2lmbmRlZiBLRVlTVFJFQU1fT05MWQorICAgIHgwID0gWE9SKHgwLFU4VE8zMl9MSVRUTEUobSArIDApKTsKKyAgICB4MSA9IFhPUih4MSxVOFRPMzJfTElUVExFKG0gKyA0KSk7CisgICAgeDIgPSBYT1IoeDIsVThUTzMyX0xJVFRMRShtICsgOCkpOworICAgIHgzID0gWE9SKHgzLFU4VE8zMl9MSVRUTEUobSArIDEyKSk7CisgICAgeDQgPSBYT1IoeDQsVThUTzMyX0xJVFRMRShtICsgMTYpKTsKKyAgICB4NSA9IFhPUih4NSxVOFRPMzJfTElUVExFKG0gKyAyMCkpOworICAgIHg2ID0gWE9SKHg2LFU4VE8zMl9MSVRUTEUobSArIDI0KSk7CisgICAgeDcgPSBYT1IoeDcsVThUTzMyX0xJVFRMRShtICsgMjgpKTsKKyAgICB4OCA9IFhPUih4OCxVOFRPMzJfTElUVExFKG0gKyAzMikpOworICAgIHg5ID0gWE9SKHg5LFU4VE8zMl9MSVRUTEUobSArIDM2KSk7CisgICAgeDEwID0gWE9SKHgxMCxVOFRPMzJfTElUVExFKG0gKyA0MCkpOworICAgIHgxMSA9IFhPUih4MTEsVThUTzMyX0xJVFRMRShtICsgNDQpKTsKKyAgICB4MTIgPSBYT1IoeDEyLFU4VE8zMl9MSVRUTEUobSArIDQ4KSk7CisgICAgeDEzID0gWE9SKHgxMyxVOFRPMzJfTElUVExFKG0gKyA1MikpOworICAgIHgxNCA9IFhPUih4MTQsVThUTzMyX0xJVFRMRShtICsgNTYpKTsKKyAgICB4MTUgPSBYT1IoeDE1LFU4VE8zMl9MSVRUTEUobSArIDYwKSk7CisjZW5kaWYKKworICAgIGoxMiA9IFBMVVNPTkUoajEyKTsKKyAgICBpZiAoIWoxMikgeworICAgICAgajEzID0gUExVU09ORShqMTMpOworICAgICAgLyogc3RvcHBpbmcgYXQgMl43MCBieXRlcyBwZXIgbm9uY2UgaXMgdXNlcidzIHJlc3BvbnNpYmlsaXR5ICovCisgICAgfQorCisgICAgVTMyVE84X0xJVFRMRShjICsgMCx4MCk7CisgICAgVTMyVE84X0xJVFRMRShjICsgNCx4MSk7CisgICAgVTMyVE84X0xJVFRMRShjICsgOCx4Mik7CisgICAgVTMyVE84X0xJVFRMRShjICsgMTIseDMpOworICAgIFUzMlRPOF9MSVRUTEUoYyArIDE2LHg0KTsKKyAgICBVMzJUTzhfTElUVExFKGMgKyAyMCx4NSk7CisgICAgVTMyVE84X0xJVFRMRShjICsgMjQseDYpOworICAgIFUzMlRPOF9MSVRUTEUoYyArIDI4LHg3KTsKKyAgICBVMzJUTzhfTElUVExFKGMgKyAzMix4OCk7CisgICAgVTMyVE84X0xJVFRMRShjICsgMzYseDkpOworICAgIFUzMlRPOF9MSVRUTEUoYyArIDQwLHgxMCk7CisgICAgVTMyVE84X0xJVFRMRShjICsgNDQseDExKTsKKyAgICBVMzJUTzhfTElUVExFKGMgKyA0OCx4MTIpOworICAgIFUzMlRPOF9MSVRUTEUoYyArIDUyLHgxMyk7CisgICAgVTMyVE84X0xJVFRMRShjICsgNTYseDE0KTsKKyAgICBVMzJUTzhfTElUVExFKGMgKyA2MCx4MTUpOworCisgICAgaWYgKGJ5dGVzIDw9IDY0KSB7CisgICAgICBpZiAoYnl0ZXMgPCA2NCkgeworICAgICAgICBmb3IgKGkgPSAwO2kgPCBieXRlczsrK2kpIGN0YXJnZXRbaV0gPSBjW2ldOworICAgICAgfQorICAgICAgeC0+aW5wdXRbMTJdID0gajEyOworICAgICAgeC0+aW5wdXRbMTNdID0gajEzOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBieXRlcyAtPSA2NDsKKyAgICBjICs9IDY0OworI2lmbmRlZiBLRVlTVFJFQU1fT05MWQorICAgIG0gKz0gNjQ7CisjZW5kaWYKKyAgfQorfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2RtaXNjLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvZG1pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTc5NWNmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2RtaXNjLmMKQEAgLTAsMCArMSwyMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OCBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRXQVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byBEYXZpZCBNLiBHYXkgKGRtZyBhdCBhY20gZG90IG9yZywKKyAqIHdpdGggIiBhdCAiIGNoYW5nZWQgYXQgIkAiIGFuZCAiIGRvdCAiIGNoYW5nZWQgdG8gIi4iKS4JKi8KKworI2luY2x1ZGUgImdkdG9haW1wLmgiCisKKyNpZm5kZWYgTVVMVElQTEVfVEhSRUFEUworIGNoYXIgKmR0b2FfcmVzdWx0OworI2VuZGlmCisKKyBjaGFyICoKKyNpZmRlZiBLUl9oZWFkZXJzCitydl9hbGxvYyhpKSBpbnQgaTsKKyNlbHNlCitydl9hbGxvYyhpbnQgaSkKKyNlbmRpZgoreworCWludCBqLCBrLCAqcjsKKworCWogPSBzaXplb2YoVUxvbmcpOworCWZvcihrID0gMDsKKwkJc2l6ZW9mKEJpZ2ludCkgLSBzaXplb2YoVUxvbmcpIC0gc2l6ZW9mKGludCkgKyBqIDw9IGk7CisJCWogPDw9IDEpCisJCQlrKys7CisJciA9IChpbnQqKUJhbGxvYyhrKTsKKwlpZiAociA9PSBOVUxMKQorCQlyZXR1cm4gKAorI2lmbmRlZiBNVUxUSVBMRV9USFJFQURTCisJCWR0b2FfcmVzdWx0ID0KKyNlbmRpZgorCQkJTlVMTCk7CisJKnIgPSBrOworCXJldHVybgorI2lmbmRlZiBNVUxUSVBMRV9USFJFQURTCisJZHRvYV9yZXN1bHQgPQorI2VuZGlmCisJCShjaGFyICopKHIrMSk7CisJfQorCisgY2hhciAqCisjaWZkZWYgS1JfaGVhZGVycworbnJ2X2FsbG9jKHMsIHJ2ZSwgbikgY2hhciAqcywgKipydmU7IGludCBuOworI2Vsc2UKK25ydl9hbGxvYyhjaGFyICpzLCBjaGFyICoqcnZlLCBpbnQgbikKKyNlbmRpZgoreworCWNoYXIgKnJ2LCAqdDsKKworCXQgPSBydiA9IHJ2X2FsbG9jKG4pOworCWlmICh0ID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJd2hpbGUoKCp0ID0gKnMrKykgIT0wKQorCQl0Kys7CisJaWYgKHJ2ZSkKKwkJKnJ2ZSA9IHQ7CisJcmV0dXJuIHJ2OworCX0KKworLyogZnJlZWR0b2EocykgbXVzdCBiZSB1c2VkIHRvIGZyZWUgdmFsdWVzIHMgcmV0dXJuZWQgYnkgZHRvYQorICogd2hlbiBNVUxUSVBMRV9USFJFQURTIGlzICNkZWZpbmVkLiAgSXQgc2hvdWxkIGJlIHVzZWQgaW4gYWxsIGNhc2VzLAorICogYnV0IGZvciBjb25zaXN0ZW5jeSB3aXRoIGVhcmxpZXIgdmVyc2lvbnMgb2YgZHRvYSwgaXQgaXMgb3B0aW9uYWwKKyAqIHdoZW4gTVVMVElQTEVfVEhSRUFEUyBpcyBub3QgZGVmaW5lZC4KKyAqLworCisgdm9pZAorI2lmZGVmIEtSX2hlYWRlcnMKK2ZyZWVkdG9hKHMpIGNoYXIgKnM7CisjZWxzZQorZnJlZWR0b2EoY2hhciAqcykKKyNlbmRpZgoreworCUJpZ2ludCAqYiA9IChCaWdpbnQgKikoKGludCAqKXMgLSAxKTsKKwliLT5tYXh3ZHMgPSAxIDw8IChiLT5rID0gKihpbnQqKWIpOworCUJmcmVlKGIpOworI2lmbmRlZiBNVUxUSVBMRV9USFJFQURTCisJaWYgKHMgPT0gZHRvYV9yZXN1bHQpCisJCWR0b2FfcmVzdWx0ID0gMDsKKyNlbmRpZgorCX0KKworIGludAorcXVvcmVtCisjaWZkZWYgS1JfaGVhZGVycworCShiLCBTKSBCaWdpbnQgKmIsICpTOworI2Vsc2UKKwkoQmlnaW50ICpiLCBCaWdpbnQgKlMpCisjZW5kaWYKK3sKKwlpbnQgbjsKKwlVTG9uZyAqYngsICpieGUsIHEsICpzeCwgKnN4ZTsKKyNpZmRlZiBVTExvbmcKKwlVTExvbmcgYm9ycm93LCBjYXJyeSwgeSwgeXM7CisjZWxzZQorCVVMb25nIGJvcnJvdywgY2FycnksIHksIHlzOworI2lmZGVmIFBhY2tfMzIKKwlVTG9uZyBzaSwgeiwgenM7CisjZW5kaWYKKyNlbmRpZgorCisJbiA9IFMtPndkczsKKyNpZmRlZiBERUJVRworCS8qZGVidWcqLyBpZiAoYi0+d2RzID4gbikKKwkvKmRlYnVnKi8JQnVnKCJvdmVyc2l6ZSBiIGluIHF1b3JlbSIpOworI2VuZGlmCisJaWYgKGItPndkcyA8IG4pCisJCXJldHVybiAwOworCXN4ID0gUy0+eDsKKwlzeGUgPSBzeCArIC0tbjsKKwlieCA9IGItPng7CisJYnhlID0gYnggKyBuOworCXEgPSAqYnhlIC8gKCpzeGUgKyAxKTsJLyogZW5zdXJlIHEgPD0gdHJ1ZSBxdW90aWVudCAqLworI2lmZGVmIERFQlVHCisJLypkZWJ1ZyovIGlmIChxID4gOSkKKwkvKmRlYnVnKi8JQnVnKCJvdmVyc2l6ZWQgcXVvdGllbnQgaW4gcXVvcmVtIik7CisjZW5kaWYKKwlpZiAocSkgeworCQlib3Jyb3cgPSAwOworCQljYXJyeSA9IDA7CisJCWRvIHsKKyNpZmRlZiBVTExvbmcKKwkJCXlzID0gKnN4KysgKiAoVUxMb25nKXEgKyBjYXJyeTsKKwkJCWNhcnJ5ID0geXMgPj4gMzI7CisJCQl5ID0gKmJ4IC0gKHlzICYgMHhmZmZmZmZmZlVMKSAtIGJvcnJvdzsKKwkJCWJvcnJvdyA9IHkgPj4gMzIgJiAxVUw7CisJCQkqYngrKyA9IHkgJiAweGZmZmZmZmZmVUw7CisjZWxzZQorI2lmZGVmIFBhY2tfMzIKKwkJCXNpID0gKnN4Kys7CisJCQl5cyA9IChzaSAmIDB4ZmZmZikgKiBxICsgY2Fycnk7CisJCQl6cyA9IChzaSA+PiAxNikgKiBxICsgKHlzID4+IDE2KTsKKwkJCWNhcnJ5ID0genMgPj4gMTY7CisJCQl5ID0gKCpieCAmIDB4ZmZmZikgLSAoeXMgJiAweGZmZmYpIC0gYm9ycm93OworCQkJYm9ycm93ID0gKHkgJiAweDEwMDAwKSA+PiAxNjsKKwkJCXogPSAoKmJ4ID4+IDE2KSAtICh6cyAmIDB4ZmZmZikgLSBib3Jyb3c7CisJCQlib3Jyb3cgPSAoeiAmIDB4MTAwMDApID4+IDE2OworCQkJU3RvcmVpbmMoYngsIHosIHkpOworI2Vsc2UKKwkJCXlzID0gKnN4KysgKiBxICsgY2Fycnk7CisJCQljYXJyeSA9IHlzID4+IDE2OworCQkJeSA9ICpieCAtICh5cyAmIDB4ZmZmZikgLSBib3Jyb3c7CisJCQlib3Jyb3cgPSAoeSAmIDB4MTAwMDApID4+IDE2OworCQkJKmJ4KysgPSB5ICYgMHhmZmZmOworI2VuZGlmCisjZW5kaWYKKwkJCX0KKwkJCXdoaWxlKHN4IDw9IHN4ZSk7CisJCWlmICghKmJ4ZSkgeworCQkJYnggPSBiLT54OworCQkJd2hpbGUoLS1ieGUgPiBieCAmJiAhKmJ4ZSkKKwkJCQktLW47CisJCQliLT53ZHMgPSBuOworCQkJfQorCQl9CisJaWYgKGNtcChiLCBTKSA+PSAwKSB7CisJCXErKzsKKwkJYm9ycm93ID0gMDsKKwkJY2FycnkgPSAwOworCQlieCA9IGItPng7CisJCXN4ID0gUy0+eDsKKwkJZG8geworI2lmZGVmIFVMTG9uZworCQkJeXMgPSAqc3grKyArIGNhcnJ5OworCQkJY2FycnkgPSB5cyA+PiAzMjsKKwkJCXkgPSAqYnggLSAoeXMgJiAweGZmZmZmZmZmVUwpIC0gYm9ycm93OworCQkJYm9ycm93ID0geSA+PiAzMiAmIDFVTDsKKwkJCSpieCsrID0geSAmIDB4ZmZmZmZmZmZVTDsKKyNlbHNlCisjaWZkZWYgUGFja18zMgorCQkJc2kgPSAqc3grKzsKKwkJCXlzID0gKHNpICYgMHhmZmZmKSArIGNhcnJ5OworCQkJenMgPSAoc2kgPj4gMTYpICsgKHlzID4+IDE2KTsKKwkJCWNhcnJ5ID0genMgPj4gMTY7CisJCQl5ID0gKCpieCAmIDB4ZmZmZikgLSAoeXMgJiAweGZmZmYpIC0gYm9ycm93OworCQkJYm9ycm93ID0gKHkgJiAweDEwMDAwKSA+PiAxNjsKKwkJCXogPSAoKmJ4ID4+IDE2KSAtICh6cyAmIDB4ZmZmZikgLSBib3Jyb3c7CisJCQlib3Jyb3cgPSAoeiAmIDB4MTAwMDApID4+IDE2OworCQkJU3RvcmVpbmMoYngsIHosIHkpOworI2Vsc2UKKwkJCXlzID0gKnN4KysgKyBjYXJyeTsKKwkJCWNhcnJ5ID0geXMgPj4gMTY7CisJCQl5ID0gKmJ4IC0gKHlzICYgMHhmZmZmKSAtIGJvcnJvdzsKKwkJCWJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCQkqYngrKyA9IHkgJiAweGZmZmY7CisjZW5kaWYKKyNlbmRpZgorCQkJfQorCQkJd2hpbGUoc3ggPD0gc3hlKTsKKwkJYnggPSBiLT54OworCQlieGUgPSBieCArIG47CisJCWlmICghKmJ4ZSkgeworCQkJd2hpbGUoLS1ieGUgPiBieCAmJiAhKmJ4ZSkKKwkJCQktLW47CisJCQliLT53ZHMgPSBuOworCQkJfQorCQl9CisJcmV0dXJuIHE7CisJfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2R0b2EuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9kdG9hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4ZjdiNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9kdG9hLmMKQEAgLTAsMCArMSw4MzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRXQVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byBEYXZpZCBNLiBHYXkgKGRtZyBhdCBhY20gZG90IG9yZywKKyAqIHdpdGggIiBhdCAiIGNoYW5nZWQgYXQgIkAiIGFuZCAiIGRvdCAiIGNoYW5nZWQgdG8gIi4iKS4JKi8KKworI2luY2x1ZGUgImdkdG9haW1wLmgiCisKKy8qIGR0b2EgZm9yIElFRUUgYXJpdGhtZXRpYyAoZG1nKTogY29udmVydCBkb3VibGUgdG8gQVNDSUkgc3RyaW5nLgorICoKKyAqIEluc3BpcmVkIGJ5ICJIb3cgdG8gUHJpbnQgRmxvYXRpbmctUG9pbnQgTnVtYmVycyBBY2N1cmF0ZWx5IiBieQorICogR3V5IEwuIFN0ZWVsZSwgSnIuIGFuZCBKb24gTC4gV2hpdGUgW1Byb2MuIEFDTSBTSUdQTEFOICc5MCwgcHAuIDExMi0xMjZdLgorICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKgkxLiBSYXRoZXIgdGhhbiBpdGVyYXRpbmcsIHdlIHVzZSBhIHNpbXBsZSBudW1lcmljIG92ZXJlc3RpbWF0ZQorICoJICAgdG8gZGV0ZXJtaW5lIGsgPSBmbG9vcihsb2cxMChkKSkuICBXZSBzY2FsZSByZWxldmFudAorICoJICAgcXVhbnRpdGllcyB1c2luZyBPKGxvZzIoaykpIHJhdGhlciB0aGFuIE8oaykgbXVsdGlwbGljYXRpb25zLgorICoJMi4gRm9yIHNvbWUgbW9kZXMgPiAyIChjb3JyZXNwb25kaW5nIHRvIGVjdnQgYW5kIGZjdnQpLCB3ZSBkb24ndAorICoJICAgdHJ5IHRvIGdlbmVyYXRlIGRpZ2l0cyBzdHJpY3RseSBsZWZ0IHRvIHJpZ2h0LiAgSW5zdGVhZCwgd2UKKyAqCSAgIGNvbXB1dGUgd2l0aCBmZXdlciBiaXRzIGFuZCBwcm9wYWdhdGUgdGhlIGNhcnJ5IGlmIG5lY2Vzc2FyeQorICoJICAgd2hlbiByb3VuZGluZyB0aGUgZmluYWwgZGlnaXQgdXAuICBUaGlzIGlzIG9mdGVuIGZhc3Rlci4KKyAqCTMuIFVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgaW5wdXQgd2lsbCBiZSByb3VuZGVkIG5lYXJlc3QsCisgKgkgICBtb2RlIDAgcmVuZGVycyAxZTIzIGFzIDFlMjMgcmF0aGVyIHRoYW4gOS45OTk5OTk5OTk5OTk5OTllMjIuCisgKgkgICBUaGF0IGlzLCB3ZSBhbGxvdyBlcXVhbGl0eSBpbiBzdG9wcGluZyB0ZXN0cyB3aGVuIHRoZQorICoJICAgcm91bmQtbmVhcmVzdCBydWxlIHdpbGwgZ2l2ZSB0aGUgc2FtZSBmbG9hdGluZy1wb2ludCB2YWx1ZQorICoJICAgYXMgd291bGQgc2F0aXNmYWN0aW9uIG9mIHRoZSBzdG9wcGluZyB0ZXN0IHdpdGggc3RyaWN0CisgKgkgICBpbmVxdWFsaXR5LgorICoJNC4gV2UgcmVtb3ZlIGNvbW1vbiBmYWN0b3JzIG9mIHBvd2VycyBvZiAyIGZyb20gcmVsZXZhbnQKKyAqCSAgIHF1YW50aXRpZXMuCisgKgk1LiBXaGVuIGNvbnZlcnRpbmcgZmxvYXRpbmctcG9pbnQgaW50ZWdlcnMgbGVzcyB0aGFuIDFlMTYsCisgKgkgICB3ZSB1c2UgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyByYXRoZXIgdGhhbiByZXNvcnRpbmcKKyAqCSAgIHRvIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2Vycy4KKyAqCTYuIFdoZW4gYXNrZWQgdG8gcHJvZHVjZSBmZXdlciB0aGFuIDE1IGRpZ2l0cywgd2UgZmlyc3QgdHJ5CisgKgkgICB0byBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljOyB3ZSByZXNvcnQgdG8KKyAqCSAgIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMgb25seSBpZiB3ZSBjYW5ub3QKKyAqCSAgIGd1YXJhbnRlZSB0aGF0IHRoZSBmbG9hdGluZy1wb2ludCBjYWxjdWxhdGlvbiBoYXMgZ2l2ZW4KKyAqCSAgIHRoZSBjb3JyZWN0bHkgcm91bmRlZCByZXN1bHQuICBGb3IgayByZXF1ZXN0ZWQgZGlnaXRzIGFuZAorICoJICAgInVuaWZvcm1seSIgZGlzdHJpYnV0ZWQgaW5wdXQsIHRoZSBwcm9iYWJpbGl0eSBpcworICoJICAgc29tZXRoaW5nIGxpa2UgMTBeKGstMTUpIHRoYXQgd2UgbXVzdCByZXNvcnQgdG8gdGhlIExvbmcKKyAqCSAgIGNhbGN1bGF0aW9uLgorICovCisKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisjdW5kZWYgQ2hlY2tfRkxUX1JPVU5EUworI2RlZmluZSBDaGVja19GTFRfUk9VTkRTCisjZWxzZQorI2RlZmluZSBSb3VuZGluZyBGbHRfUm91bmRzCisjZW5kaWYKKworIGNoYXIgKgorZHRvYQorI2lmZGVmIEtSX2hlYWRlcnMKKwkoZDAsIG1vZGUsIG5kaWdpdHMsIGRlY3B0LCBzaWduLCBydmUpCisJZG91YmxlIGQwOyBpbnQgbW9kZSwgbmRpZ2l0cywgKmRlY3B0LCAqc2lnbjsgY2hhciAqKnJ2ZTsKKyNlbHNlCisJKGRvdWJsZSBkMCwgaW50IG1vZGUsIGludCBuZGlnaXRzLCBpbnQgKmRlY3B0LCBpbnQgKnNpZ24sIGNoYXIgKipydmUpCisjZW5kaWYKK3sKKyAvKglBcmd1bWVudHMgbmRpZ2l0cywgZGVjcHQsIHNpZ24gYXJlIHNpbWlsYXIgdG8gdGhvc2UKKwlvZiBlY3Z0IGFuZCBmY3Z0OyB0cmFpbGluZyB6ZXJvcyBhcmUgc3VwcHJlc3NlZCBmcm9tCisJdGhlIHJldHVybmVkIHN0cmluZy4gIElmIG5vdCBudWxsLCAqcnZlIGlzIHNldCB0byBwb2ludAorCXRvIHRoZSBlbmQgb2YgdGhlIHJldHVybiB2YWx1ZS4gIElmIGQgaXMgKy1JbmZpbml0eSBvciBOYU4sCisJdGhlbiAqZGVjcHQgaXMgc2V0IHRvIDk5OTkuCisKKwltb2RlOgorCQkwID09PiBzaG9ydGVzdCBzdHJpbmcgdGhhdCB5aWVsZHMgZCB3aGVuIHJlYWQgaW4KKwkJCWFuZCByb3VuZGVkIHRvIG5lYXJlc3QuCisJCTEgPT0+IGxpa2UgMCwgYnV0IHdpdGggU3RlZWxlICYgV2hpdGUgc3RvcHBpbmcgcnVsZTsKKwkJCWUuZy4gd2l0aCBJRUVFIFA3NTQgYXJpdGhtZXRpYyAsIG1vZGUgMCBnaXZlcworCQkJMWUyMyB3aGVyZWFzIG1vZGUgMSBnaXZlcyA5Ljk5OTk5OTk5OTk5OTk5OWUyMi4KKwkJMiA9PT4gbWF4KDEsbmRpZ2l0cykgc2lnbmlmaWNhbnQgZGlnaXRzLiAgVGhpcyBnaXZlcyBhCisJCQlyZXR1cm4gdmFsdWUgc2ltaWxhciB0byB0aGF0IG9mIGVjdnQsIGV4Y2VwdAorCQkJdGhhdCB0cmFpbGluZyB6ZXJvcyBhcmUgc3VwcHJlc3NlZC4KKwkJMyA9PT4gdGhyb3VnaCBuZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQuICBUaGlzCisJCQlnaXZlcyBhIHJldHVybiB2YWx1ZSBzaW1pbGFyIHRvIHRoYXQgZnJvbSBmY3Z0LAorCQkJZXhjZXB0IHRoYXQgdHJhaWxpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQsIGFuZAorCQkJbmRpZ2l0cyBjYW4gYmUgbmVnYXRpdmUuCisJCTQsNSA9PT4gc2ltaWxhciB0byAyIGFuZCAzLCByZXNwZWN0aXZlbHksIGJ1dCAoaW4KKwkJCXJvdW5kLW5lYXJlc3QgbW9kZSkgd2l0aCB0aGUgdGVzdHMgb2YgbW9kZSAwIHRvCisJCQlwb3NzaWJseSByZXR1cm4gYSBzaG9ydGVyIHN0cmluZyB0aGF0IHJvdW5kcyB0byBkLgorCQkJV2l0aCBJRUVFIGFyaXRobWV0aWMgYW5kIGNvbXBpbGF0aW9uIHdpdGgKKwkJCS1ESG9ub3JfRkxUX1JPVU5EUywgbW9kZXMgNCBhbmQgNSBiZWhhdmUgdGhlIHNhbWUKKwkJCWFzIG1vZGVzIDIgYW5kIDMgd2hlbiBGTFRfUk9VTkRTICE9IDEuCisJCTYtOSA9PT4gRGVidWdnaW5nIG1vZGVzIHNpbWlsYXIgdG8gbW9kZSAtIDQ6ICBkb24ndCB0cnkKKwkJCWZhc3QgZmxvYXRpbmctcG9pbnQgZXN0aW1hdGUgKGlmIGFwcGxpY2FibGUpLgorCisJCVZhbHVlcyBvZiBtb2RlIG90aGVyIHRoYW4gMC05IGFyZSB0cmVhdGVkIGFzIG1vZGUgMC4KKworCQlTdWZmaWNpZW50IHNwYWNlIGlzIGFsbG9jYXRlZCB0byB0aGUgcmV0dXJuIHZhbHVlCisJCXRvIGhvbGQgdGhlIHN1cHByZXNzZWQgdHJhaWxpbmcgemVyb3MuCisJKi8KKworCWludCBiYml0cywgYjIsIGI1LCBiZSwgZGlnLCBpLCBpZXBzLCBpbGltLCBpbGltMCwgaWxpbTEsCisJCWosIGoxLCBrLCBrMCwga19jaGVjaywgbGVmdHJpZ2h0LCBtMiwgbTUsIHMyLCBzNSwKKwkJc3BlY19jYXNlLCB0cnlfcXVpY2s7CisJTG9uZyBMOworI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJaW50IGRlbm9ybTsKKwlVTG9uZyB4OworI2VuZGlmCisJQmlnaW50ICpiLCAqYjEsICpkZWx0YSwgKm1sbywgKm1oaSwgKlM7CisJVSBkLCBkMiwgZXBzOworCWRvdWJsZSBkczsKKwljaGFyICpzLCAqczA7CisjaWZkZWYgU0VUX0lORVhBQ1QKKwlpbnQgaW5leGFjdCwgb2xkaW5leGFjdDsKKyNlbmRpZgorI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMgLyp7Ki8KKwlpbnQgUm91bmRpbmc7CisjaWZkZWYgVHJ1c3RfRkxUX1JPVU5EUyAvKnt7IG9ubHkgZGVmaW5lIHRoaXMgaWYgRkxUX1JPVU5EUyByZWFsbHkgd29ya3MhICovCisJUm91bmRpbmcgPSBGbHRfUm91bmRzOworI2Vsc2UgLyp9eyovCisJUm91bmRpbmcgPSAxOworCXN3aXRjaChmZWdldHJvdW5kKCkpIHsKKwkgIGNhc2UgRkVfVE9XQVJEWkVSTzoJUm91bmRpbmcgPSAwOyBicmVhazsKKwkgIGNhc2UgRkVfVVBXQVJEOglSb3VuZGluZyA9IDI7IGJyZWFrOworCSAgY2FzZSBGRV9ET1dOV0FSRDoJUm91bmRpbmcgPSAzOworCSAgfQorI2VuZGlmIC8qfX0qLworI2VuZGlmIC8qfSovCisKKyNpZm5kZWYgTVVMVElQTEVfVEhSRUFEUworCWlmIChkdG9hX3Jlc3VsdCkgeworCQlmcmVlZHRvYShkdG9hX3Jlc3VsdCk7CisJCWR0b2FfcmVzdWx0ID0gMDsKKwkJfQorI2VuZGlmCisJZC5kID0gZDA7CisJaWYgKHdvcmQwKCZkKSAmIFNpZ25fYml0KSB7CisJCS8qIHNldCBzaWduIGZvciBldmVyeXRoaW5nLCBpbmNsdWRpbmcgMCdzIGFuZCBOYU5zICovCisJCSpzaWduID0gMTsKKwkJd29yZDAoJmQpICY9IH5TaWduX2JpdDsJLyogY2xlYXIgc2lnbiBiaXQgKi8KKwkJfQorCWVsc2UKKwkJKnNpZ24gPSAwOworCisjaWYgZGVmaW5lZChJRUVFX0FyaXRoKSArIGRlZmluZWQoVkFYKQorI2lmZGVmIElFRUVfQXJpdGgKKwlpZiAoKHdvcmQwKCZkKSAmIEV4cF9tYXNrKSA9PSBFeHBfbWFzaykKKyNlbHNlCisJaWYgKHdvcmQwKCZkKSAgPT0gMHg4MDAwKQorI2VuZGlmCisJCXsKKwkJLyogSW5maW5pdHkgb3IgTmFOICovCisJCSpkZWNwdCA9IDk5OTk7CisjaWZkZWYgSUVFRV9Bcml0aAorCQlpZiAoIXdvcmQxKCZkKSAmJiAhKHdvcmQwKCZkKSAmIDB4ZmZmZmYpKQorCQkJcmV0dXJuIG5ydl9hbGxvYygiSW5maW5pdHkiLCBydmUsIDgpOworI2VuZGlmCisJCXJldHVybiBucnZfYWxsb2MoIk5hTiIsIHJ2ZSwgMyk7CisJCX0KKyNlbmRpZgorI2lmZGVmIElCTQorCWR2YWwoJmQpICs9IDA7IC8qIG5vcm1hbGl6ZSAqLworI2VuZGlmCisJaWYgKCFkdmFsKCZkKSkgeworCQkqZGVjcHQgPSAxOworCQlyZXR1cm4gbnJ2X2FsbG9jKCIwIiwgcnZlLCAxKTsKKwkJfQorCisjaWZkZWYgU0VUX0lORVhBQ1QKKwl0cnlfcXVpY2sgPSBvbGRpbmV4YWN0ID0gZ2V0X2luZXhhY3QoKTsKKwlpbmV4YWN0ID0gMTsKKyNlbmRpZgorI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKwlpZiAoUm91bmRpbmcgPj0gMikgeworCQlpZiAoKnNpZ24pCisJCQlSb3VuZGluZyA9IFJvdW5kaW5nID09IDIgPyAwIDogMjsKKwkJZWxzZQorCQkJaWYgKFJvdW5kaW5nICE9IDIpCisJCQkJUm91bmRpbmcgPSAwOworCQl9CisjZW5kaWYKKworCWIgPSBkMmIoZHZhbCgmZCksICZiZSwgJmJiaXRzKTsKKwlpZiAoYiA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwlpID0gKGludCkod29yZDAoJmQpID4+IEV4cF9zaGlmdDEgJiAoRXhwX21hc2s+PkV4cF9zaGlmdDEpKTsKKyNlbHNlCisJaWYgKCggaSA9IChpbnQpKHdvcmQwKCZkKSA+PiBFeHBfc2hpZnQxICYgKEV4cF9tYXNrPj5FeHBfc2hpZnQxKSkgKSE9MCkgeworI2VuZGlmCisJCWR2YWwoJmQyKSA9IGR2YWwoJmQpOworCQl3b3JkMCgmZDIpICY9IEZyYWNfbWFzazE7CisJCXdvcmQwKCZkMikgfD0gRXhwXzExOworI2lmZGVmIElCTQorCQlpZiAoKCBqID0gMTEgLSBoaTBiaXRzKHdvcmQwKCZkMikgJiBGcmFjX21hc2spICkhPTApCisJCQlkdmFsKCZkMikgLz0gMSA8PCBqOworI2VuZGlmCisKKwkJLyogbG9nKHgpCX49fiBsb2coMS41KSArICh4LTEuNSkvMS41CisJCSAqIGxvZzEwKHgpCSA9ICBsb2coeCkgLyBsb2coMTApCisJCSAqCQl+PX4gbG9nKDEuNSkvbG9nKDEwKSArICh4LTEuNSkvKDEuNSpsb2coMTApKQorCQkgKiBsb2cxMCgmZCkgPSAoaS1CaWFzKSpsb2coMikvbG9nKDEwKSArIGxvZzEwKCZkMikKKwkJICoKKwkJICogVGhpcyBzdWdnZXN0cyBjb21wdXRpbmcgYW4gYXBwcm94aW1hdGlvbiBrIHRvIGxvZzEwKCZkKSBieQorCQkgKgorCQkgKiBrID0gKGkgLSBCaWFzKSowLjMwMTAyOTk5NTY2Mzk4MQorCQkgKgkrICggKGQyLTEuNSkqMC4yODk1Mjk2NTQ2MDIxNjggKyAwLjE3NjA5MTI1OTA1NTY4MSApOworCQkgKgorCQkgKiBXZSB3YW50IGsgdG8gYmUgdG9vIGxhcmdlIHJhdGhlciB0aGFuIHRvbyBzbWFsbC4KKwkJICogVGhlIGVycm9yIGluIHRoZSBmaXJzdC1vcmRlciBUYXlsb3Igc2VyaWVzIGFwcHJveGltYXRpb24KKwkJICogaXMgaW4gb3VyIGZhdm9yLCBzbyB3ZSBqdXN0IHJvdW5kIHVwIHRoZSBjb25zdGFudCBlbm91Z2gKKwkJICogdG8gY29tcGVuc2F0ZSBmb3IgYW55IGVycm9yIGluIHRoZSBtdWx0aXBsaWNhdGlvbiBvZgorCQkgKiAoaSAtIEJpYXMpIGJ5IDAuMzAxMDI5OTk1NjYzOTgxOyBzaW5jZSB8aSAtIEJpYXN8IDw9IDEwNzcsCisJCSAqIGFuZCAxMDc3ICogMC4zMDEwMyAqIDJeLTUyIH49fiA3LjJlLTE0LAorCQkgKiBhZGRpbmcgMWUtMTMgdG8gdGhlIGNvbnN0YW50IHRlcm0gbW9yZSB0aGFuIHN1ZmZpY2VzLgorCQkgKiBIZW5jZSB3ZSBhZGp1c3QgdGhlIGNvbnN0YW50IHRlcm0gdG8gMC4xNzYwOTEyNTkwNTU4LgorCQkgKiAoV2UgY291bGQgZ2V0IGEgbW9yZSBhY2N1cmF0ZSBrIGJ5IGludm9raW5nIGxvZzEwLAorCQkgKiAgYnV0IHRoaXMgaXMgcHJvYmFibHkgbm90IHdvcnRod2hpbGUuKQorCQkgKi8KKworCQlpIC09IEJpYXM7CisjaWZkZWYgSUJNCisJCWkgPDw9IDI7CisJCWkgKz0gajsKKyNlbmRpZgorI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCWRlbm9ybSA9IDA7CisJCX0KKwllbHNlIHsKKwkJLyogZCBpcyBkZW5vcm1hbGl6ZWQgKi8KKworCQlpID0gYmJpdHMgKyBiZSArIChCaWFzICsgKFAtMSkgLSAxKTsKKwkJeCA9IGkgPiAzMiAgPyB3b3JkMCgmZCkgPDwgKDY0IC0gaSkgfCB3b3JkMSgmZCkgPj4gKGkgLSAzMikKKwkJCSAgICA6IHdvcmQxKCZkKSA8PCAoMzIgLSBpKTsKKwkJZHZhbCgmZDIpID0geDsKKwkJd29yZDAoJmQyKSAtPSAzMSpFeHBfbXNrMTsgLyogYWRqdXN0IGV4cG9uZW50ICovCisJCWkgLT0gKEJpYXMgKyAoUC0xKSAtIDEpICsgMTsKKwkJZGVub3JtID0gMTsKKwkJfQorI2VuZGlmCisJZHMgPSAoZHZhbCgmZDIpLTEuNSkqMC4yODk1Mjk2NTQ2MDIxNjggKyAwLjE3NjA5MTI1OTA1NTggKyBpKjAuMzAxMDI5OTk1NjYzOTgxOworCWsgPSAoaW50KWRzOworCWlmIChkcyA8IDAuICYmIGRzICE9IGspCisJCWstLTsJLyogd2FudCBrID0gZmxvb3IoZHMpICovCisJa19jaGVjayA9IDE7CisJaWYgKGsgPj0gMCAmJiBrIDw9IFRlbl9wbWF4KSB7CisJCWlmIChkdmFsKCZkKSA8IHRlbnNba10pCisJCQlrLS07CisJCWtfY2hlY2sgPSAwOworCQl9CisJaiA9IGJiaXRzIC0gaSAtIDE7CisJaWYgKGogPj0gMCkgeworCQliMiA9IDA7CisJCXMyID0gajsKKwkJfQorCWVsc2UgeworCQliMiA9IC1qOworCQlzMiA9IDA7CisJCX0KKwlpZiAoayA+PSAwKSB7CisJCWI1ID0gMDsKKwkJczUgPSBrOworCQlzMiArPSBrOworCQl9CisJZWxzZSB7CisJCWIyIC09IGs7CisJCWI1ID0gLWs7CisJCXM1ID0gMDsKKwkJfQorCWlmIChtb2RlIDwgMCB8fCBtb2RlID4gOSkKKwkJbW9kZSA9IDA7CisKKyNpZm5kZWYgU0VUX0lORVhBQ1QKKyNpZmRlZiBDaGVja19GTFRfUk9VTkRTCisJdHJ5X3F1aWNrID0gUm91bmRpbmcgPT0gMTsKKyNlbHNlCisJdHJ5X3F1aWNrID0gMTsKKyNlbmRpZgorI2VuZGlmIC8qU0VUX0lORVhBQ1QqLworCisJaWYgKG1vZGUgPiA1KSB7CisJCW1vZGUgLT0gNDsKKwkJdHJ5X3F1aWNrID0gMDsKKwkJfQorCWxlZnRyaWdodCA9IDE7CisJaWxpbSA9IGlsaW0xID0gLTE7CS8qIFZhbHVlcyBmb3IgY2FzZXMgMCBhbmQgMTsgZG9uZSBoZXJlIHRvICovCisJCQkJLyogc2lsZW5jZSBlcnJvbmVvdXMgImdjYyAtV2FsbCIgd2FybmluZy4gKi8KKwlzd2l0Y2gobW9kZSkgeworCQljYXNlIDA6CisJCWNhc2UgMToKKwkJCWkgPSAxODsKKwkJCW5kaWdpdHMgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWxlZnRyaWdodCA9IDA7CisJCQkvKiBubyBicmVhayAqLworCQljYXNlIDQ6CisJCQlpZiAobmRpZ2l0cyA8PSAwKQorCQkJCW5kaWdpdHMgPSAxOworCQkJaWxpbSA9IGlsaW0xID0gaSA9IG5kaWdpdHM7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJbGVmdHJpZ2h0ID0gMDsKKwkJCS8qIG5vIGJyZWFrICovCisJCWNhc2UgNToKKwkJCWkgPSBuZGlnaXRzICsgayArIDE7CisJCQlpbGltID0gaTsKKwkJCWlsaW0xID0gaSAtIDE7CisJCQlpZiAoaSA8PSAwKQorCQkJCWkgPSAxOworCQl9CisJcyA9IHMwID0gcnZfYWxsb2MoaSk7CisJaWYgKHMgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKwlpZiAobW9kZSA+IDEgJiYgUm91bmRpbmcgIT0gMSkKKwkJbGVmdHJpZ2h0ID0gMDsKKyNlbmRpZgorCisJaWYgKGlsaW0gPj0gMCAmJiBpbGltIDw9IFF1aWNrX21heCAmJiB0cnlfcXVpY2spIHsKKworCQkvKiBUcnkgdG8gZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4gKi8KKworCQlpID0gMDsKKwkJZHZhbCgmZDIpID0gZHZhbCgmZCk7CisJCWswID0gazsKKwkJaWxpbTAgPSBpbGltOworCQlpZXBzID0gMjsgLyogY29uc2VydmF0aXZlICovCisJCWlmIChrID4gMCkgeworCQkJZHMgPSB0ZW5zW2smMHhmXTsKKwkJCWogPSBrID4+IDQ7CisJCQlpZiAoaiAmIEJsZXRjaCkgeworCQkJCS8qIHByZXZlbnQgb3ZlcmZsb3dzICovCisJCQkJaiAmPSBCbGV0Y2ggLSAxOworCQkJCWR2YWwoJmQpIC89IGJpZ3RlbnNbbl9iaWd0ZW5zLTFdOworCQkJCWllcHMrKzsKKwkJCQl9CisJCQlmb3IoOyBqOyBqID4+PSAxLCBpKyspCisJCQkJaWYgKGogJiAxKSB7CisJCQkJCWllcHMrKzsKKwkJCQkJZHMgKj0gYmlndGVuc1tpXTsKKwkJCQkJfQorCQkJZHZhbCgmZCkgLz0gZHM7CisJCQl9CisJCWVsc2UgaWYgKCggajEgPSAtayApIT0wKSB7CisJCQlkdmFsKCZkKSAqPSB0ZW5zW2oxICYgMHhmXTsKKwkJCWZvcihqID0gajEgPj4gNDsgajsgaiA+Pj0gMSwgaSsrKQorCQkJCWlmIChqICYgMSkgeworCQkJCQlpZXBzKys7CisJCQkJCWR2YWwoJmQpICo9IGJpZ3RlbnNbaV07CisJCQkJCX0KKwkJCX0KKwkJaWYgKGtfY2hlY2sgJiYgZHZhbCgmZCkgPCAxLiAmJiBpbGltID4gMCkgeworCQkJaWYgKGlsaW0xIDw9IDApCisJCQkJZ290byBmYXN0X2ZhaWxlZDsKKwkJCWlsaW0gPSBpbGltMTsKKwkJCWstLTsKKwkJCWR2YWwoJmQpICo9IDEwLjsKKwkJCWllcHMrKzsKKwkJCX0KKwkJZHZhbCgmZXBzKSA9IGllcHMqZHZhbCgmZCkgKyA3LjsKKwkJd29yZDAoJmVwcykgLT0gKFAtMSkqRXhwX21zazE7CisJCWlmIChpbGltID09IDApIHsKKwkJCVMgPSBtaGkgPSAwOworCQkJZHZhbCgmZCkgLT0gNS47CisJCQlpZiAoZHZhbCgmZCkgPiBkdmFsKCZlcHMpKQorCQkJCWdvdG8gb25lX2RpZ2l0OworCQkJaWYgKGR2YWwoJmQpIDwgLWR2YWwoJmVwcykpCisJCQkJZ290byBub19kaWdpdHM7CisJCQlnb3RvIGZhc3RfZmFpbGVkOworCQkJfQorI2lmbmRlZiBOb19sZWZ0cmlnaHQKKwkJaWYgKGxlZnRyaWdodCkgeworCQkJLyogVXNlIFN0ZWVsZSAmIFdoaXRlIG1ldGhvZCBvZiBvbmx5CisJCQkgKiBnZW5lcmF0aW5nIGRpZ2l0cyBuZWVkZWQuCisJCQkgKi8KKwkJCWR2YWwoJmVwcykgPSAwLjUvdGVuc1tpbGltLTFdIC0gZHZhbCgmZXBzKTsKKwkJCWZvcihpID0gMDs7KSB7CisJCQkJTCA9IGR2YWwoJmQpOworCQkJCWR2YWwoJmQpIC09IEw7CisJCQkJKnMrKyA9ICcwJyArIChpbnQpTDsKKwkJCQlpZiAoZHZhbCgmZCkgPCBkdmFsKCZlcHMpKQorCQkJCQlnb3RvIHJldDE7CisJCQkJaWYgKDEuIC0gZHZhbCgmZCkgPCBkdmFsKCZlcHMpKQorCQkJCQlnb3RvIGJ1bXBfdXA7CisJCQkJaWYgKCsraSA+PSBpbGltKQorCQkJCQlicmVhazsKKwkJCQlkdmFsKCZlcHMpICo9IDEwLjsKKwkJCQlkdmFsKCZkKSAqPSAxMC47CisJCQkJfQorCQkJfQorCQllbHNlIHsKKyNlbmRpZgorCQkJLyogR2VuZXJhdGUgaWxpbSBkaWdpdHMsIHRoZW4gZml4IHRoZW0gdXAuICovCisJCQlkdmFsKCZlcHMpICo9IHRlbnNbaWxpbS0xXTsKKwkJCWZvcihpID0gMTs7IGkrKywgZHZhbCgmZCkgKj0gMTAuKSB7CisJCQkJTCA9IChMb25nKShkdmFsKCZkKSk7CisJCQkJaWYgKCEoZHZhbCgmZCkgLT0gTCkpCisJCQkJCWlsaW0gPSBpOworCQkJCSpzKysgPSAnMCcgKyAoaW50KUw7CisJCQkJaWYgKGkgPT0gaWxpbSkgeworCQkJCQlpZiAoZHZhbCgmZCkgPiAwLjUgKyBkdmFsKCZlcHMpKQorCQkJCQkJZ290byBidW1wX3VwOworCQkJCQllbHNlIGlmIChkdmFsKCZkKSA8IDAuNSAtIGR2YWwoJmVwcykpIHsKKwkJCQkJCXdoaWxlKCotLXMgPT0gJzAnKTsKKwkJCQkJCXMrKzsKKwkJCQkJCWdvdG8gcmV0MTsKKwkJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisjaWZuZGVmIE5vX2xlZnRyaWdodAorCQkJfQorI2VuZGlmCisgZmFzdF9mYWlsZWQ6CisJCXMgPSBzMDsKKwkJZHZhbCgmZCkgPSBkdmFsKCZkMik7CisJCWsgPSBrMDsKKwkJaWxpbSA9IGlsaW0wOworCQl9CisKKwkvKiBEbyB3ZSBoYXZlIGEgInNtYWxsIiBpbnRlZ2VyPyAqLworCisJaWYgKGJlID49IDAgJiYgayA8PSBJbnRfbWF4KSB7CisJCS8qIFllcy4gKi8KKwkJZHMgPSB0ZW5zW2tdOworCQlpZiAobmRpZ2l0cyA8IDAgJiYgaWxpbSA8PSAwKSB7CisJCQlTID0gbWhpID0gMDsKKwkJCWlmIChpbGltIDwgMCB8fCBkdmFsKCZkKSA8PSA1KmRzKQorCQkJCWdvdG8gbm9fZGlnaXRzOworCQkJZ290byBvbmVfZGlnaXQ7CisJCQl9CisJCWZvcihpID0gMTs7IGkrKywgZHZhbCgmZCkgKj0gMTAuKSB7CisJCQlMID0gKExvbmcpKGR2YWwoJmQpIC8gZHMpOworCQkJZHZhbCgmZCkgLT0gTCpkczsKKyNpZmRlZiBDaGVja19GTFRfUk9VTkRTCisJCQkvKiBJZiBGTFRfUk9VTkRTID09IDIsIEwgd2lsbCB1c3VhbGx5IGJlIGhpZ2ggYnkgMSAqLworCQkJaWYgKGR2YWwoJmQpIDwgMCkgeworCQkJCUwtLTsKKwkJCQlkdmFsKCZkKSArPSBkczsKKwkJCQl9CisjZW5kaWYKKwkJCSpzKysgPSAnMCcgKyAoaW50KUw7CisJCQlpZiAoIWR2YWwoJmQpKSB7CisjaWZkZWYgU0VUX0lORVhBQ1QKKwkJCQlpbmV4YWN0ID0gMDsKKyNlbmRpZgorCQkJCWJyZWFrOworCQkJCX0KKwkJCWlmIChpID09IGlsaW0pIHsKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisJCQkJaWYgKG1vZGUgPiAxKQorCQkJCXN3aXRjaChSb3VuZGluZykgeworCQkJCSAgY2FzZSAwOiBnb3RvIHJldDE7CisJCQkJICBjYXNlIDI6IGdvdG8gYnVtcF91cDsKKwkJCQkgIH0KKyNlbmRpZgorCQkJCWR2YWwoJmQpICs9IGR2YWwoJmQpOworI2lmZGVmIFJPVU5EX0JJQVNFRAorCQkJCWlmIChkdmFsKCZkKSA+PSBkcykKKyNlbHNlCisJCQkJaWYgKGR2YWwoJmQpID4gZHMgfHwgKGR2YWwoJmQpID09IGRzICYmIEwgJiAxKSkKKyNlbmRpZgorCQkJCQl7CisgYnVtcF91cDoKKwkJCQkJd2hpbGUoKi0tcyA9PSAnOScpCisJCQkJCQlpZiAocyA9PSBzMCkgeworCQkJCQkJCWsrKzsKKwkJCQkJCQkqcyA9ICcwJzsKKwkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCSsrKnMrKzsKKwkJCQkJfQorCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJZ290byByZXQxOworCQl9CisKKwltMiA9IGIyOworCW01ID0gYjU7CisJbWhpID0gbWxvID0gMDsKKwlpZiAobGVmdHJpZ2h0KSB7CisJCWkgPQorI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCQlkZW5vcm0gPyBiZSArIChCaWFzICsgKFAtMSkgLSAxICsgMSkgOgorI2VuZGlmCisjaWZkZWYgSUJNCisJCQkxICsgNCpQIC0gMyAtIGJiaXRzICsgKChiYml0cyArIGJlIC0gMSkgJiAzKTsKKyNlbHNlCisJCQkxICsgUCAtIGJiaXRzOworI2VuZGlmCisJCWIyICs9IGk7CisJCXMyICs9IGk7CisJCW1oaSA9IGkyYigxKTsKKwkJaWYgKG1oaSA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCWlmIChtMiA+IDAgJiYgczIgPiAwKSB7CisJCWkgPSBtMiA8IHMyID8gbTIgOiBzMjsKKwkJYjIgLT0gaTsKKwkJbTIgLT0gaTsKKwkJczIgLT0gaTsKKwkJfQorCWlmIChiNSA+IDApIHsKKwkJaWYgKGxlZnRyaWdodCkgeworCQkJaWYgKG01ID4gMCkgeworCQkJCW1oaSA9IHBvdzVtdWx0KG1oaSwgbTUpOworCQkJCWlmIChtaGkgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQliMSA9IG11bHQobWhpLCBiKTsKKwkJCQlpZiAoYjEgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQlCZnJlZShiKTsKKwkJCQliID0gYjE7CisJCQkJfQorCQkJaWYgKCggaiA9IGI1IC0gbTUgKSE9MCkgeworCQkJCWIgPSBwb3c1bXVsdChiLCBqKTsKKwkJCQlpZiAoYiA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCX0KKwkJCX0KKwkJZWxzZSB7CisJCQliID0gcG93NW11bHQoYiwgYjUpOworCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCQl9CisJUyA9IGkyYigxKTsKKwlpZiAoUyA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWlmIChzNSA+IDApIHsKKwkJUyA9IHBvdzVtdWx0KFMsIHM1KTsKKwkJaWYgKFMgPT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKworCS8qIENoZWNrIGZvciBzcGVjaWFsIGNhc2UgdGhhdCBkIGlzIGEgbm9ybWFsaXplZCBwb3dlciBvZiAyLiAqLworCisJc3BlY19jYXNlID0gMDsKKwlpZiAoKG1vZGUgPCAyIHx8IGxlZnRyaWdodCkKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisJCQkmJiBSb3VuZGluZyA9PSAxCisjZW5kaWYKKwkJCQkpIHsKKwkJaWYgKCF3b3JkMSgmZCkgJiYgISh3b3JkMCgmZCkgJiBCbmRyeV9tYXNrKQorI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCSAmJiB3b3JkMCgmZCkgJiAoRXhwX21hc2sgJiB+RXhwX21zazEpCisjZW5kaWYKKwkJCQkpIHsKKwkJCS8qIFRoZSBzcGVjaWFsIGNhc2UgKi8KKwkJCWIyICs9IExvZzJQOworCQkJczIgKz0gTG9nMlA7CisJCQlzcGVjX2Nhc2UgPSAxOworCQkJfQorCQl9CisKKwkvKiBBcnJhbmdlIGZvciBjb252ZW5pZW50IGNvbXB1dGF0aW9uIG9mIHF1b3RpZW50czoKKwkgKiBzaGlmdCBsZWZ0IGlmIG5lY2Vzc2FyeSBzbyBkaXZpc29yIGhhcyA0IGxlYWRpbmcgMCBiaXRzLgorCSAqCisJICogUGVyaGFwcyB3ZSBzaG91bGQganVzdCBjb21wdXRlIGxlYWRpbmcgMjggYml0cyBvZiBTIG9uY2UKKwkgKiBhbmQgZm9yIGFsbCBhbmQgcGFzcyB0aGVtIGFuZCBhIHNoaWZ0IHRvIHF1b3JlbSwgc28gaXQKKwkgKiBjYW4gZG8gc2hpZnRzIGFuZCBvcnMgdG8gY29tcHV0ZSB0aGUgbnVtZXJhdG9yIGZvciBxLgorCSAqLworI2lmZGVmIFBhY2tfMzIKKwlpZiAoKCBpID0gKChzNSA/IDMyIC0gaGkwYml0cyhTLT54W1MtPndkcy0xXSkgOiAxKSArIHMyKSAmIDB4MWYgKSE9MCkKKwkJaSA9IDMyIC0gaTsKKyNlbHNlCisJaWYgKCggaSA9ICgoczUgPyAzMiAtIGhpMGJpdHMoUy0+eFtTLT53ZHMtMV0pIDogMSkgKyBzMikgJiAweGYgKSE9MCkKKwkJaSA9IDE2IC0gaTsKKyNlbmRpZgorCWlmIChpID4gNCkgeworCQlpIC09IDQ7CisJCWIyICs9IGk7CisJCW0yICs9IGk7CisJCXMyICs9IGk7CisJCX0KKwllbHNlIGlmIChpIDwgNCkgeworCQlpICs9IDI4OworCQliMiArPSBpOworCQltMiArPSBpOworCQlzMiArPSBpOworCQl9CisJaWYgKGIyID4gMCkgeworCQliID0gbHNoaWZ0KGIsIGIyKTsKKwkJaWYgKGIgPT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwlpZiAoczIgPiAwKSB7CisJCVMgPSBsc2hpZnQoUywgczIpOworCQlpZiAoUyA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCWlmIChrX2NoZWNrKSB7CisJCWlmIChjbXAoYixTKSA8IDApIHsKKwkJCWstLTsKKwkJCWIgPSBtdWx0YWRkKGIsIDEwLCAwKTsJLyogd2UgYm90Y2hlZCB0aGUgayBlc3RpbWF0ZSAqLworCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJaWYgKGxlZnRyaWdodCkgeworCQkJCW1oaSA9IG11bHRhZGQobWhpLCAxMCwgMCk7CisJCQkJaWYgKG1oaSA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCX0KKwkJCWlsaW0gPSBpbGltMTsKKwkJCX0KKwkJfQorCWlmIChpbGltIDw9IDAgJiYgKG1vZGUgPT0gMyB8fCBtb2RlID09IDUpKSB7CisJCVMgPSBtdWx0YWRkKFMsNSwwKTsKKwkJaWYgKFMgPT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCWlmIChpbGltIDwgMCB8fCBjbXAoYixTKSA8PSAwKSB7CisJCQkvKiBubyBkaWdpdHMsIGZjdnQgc3R5bGUgKi8KKyBub19kaWdpdHM6CisJCQlrID0gLTEgLSBuZGlnaXRzOworCQkJZ290byByZXQ7CisJCQl9Cisgb25lX2RpZ2l0OgorCQkqcysrID0gJzEnOworCQlrKys7CisJCWdvdG8gcmV0OworCQl9CisJaWYgKGxlZnRyaWdodCkgeworCQlpZiAobTIgPiAwKSB7CisJCQltaGkgPSBsc2hpZnQobWhpLCBtMik7CisJCQlpZiAobWhpID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKworCQkvKiBDb21wdXRlIG1sbyAtLSBjaGVjayBmb3Igc3BlY2lhbCBjYXNlCisJCSAqIHRoYXQgZCBpcyBhIG5vcm1hbGl6ZWQgcG93ZXIgb2YgMi4KKwkJICovCisKKwkJbWxvID0gbWhpOworCQlpZiAoc3BlY19jYXNlKSB7CisJCQltaGkgPSBCYWxsb2MobWhpLT5rKTsKKwkJCWlmIChtaGkgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJQmNvcHkobWhpLCBtbG8pOworCQkJbWhpID0gbHNoaWZ0KG1oaSwgTG9nMlApOworCQkJaWYgKG1oaSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisKKwkJZm9yKGkgPSAxOztpKyspIHsKKwkJCWRpZyA9IHF1b3JlbShiLFMpICsgJzAnOworCQkJLyogRG8gd2UgeWV0IGhhdmUgdGhlIHNob3J0ZXN0IGRlY2ltYWwgc3RyaW5nCisJCQkgKiB0aGF0IHdpbGwgcm91bmQgdG8gZD8KKwkJCSAqLworCQkJaiA9IGNtcChiLCBtbG8pOworCQkJZGVsdGEgPSBkaWZmKFMsIG1oaSk7CisJCQlpZiAoZGVsdGEgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJajEgPSBkZWx0YS0+c2lnbiA/IDEgOiBjbXAoYiwgZGVsdGEpOworCQkJQmZyZWUoZGVsdGEpOworI2lmbmRlZiBST1VORF9CSUFTRUQKKwkJCWlmIChqMSA9PSAwICYmIG1vZGUgIT0gMSAmJiAhKHdvcmQxKCZkKSAmIDEpCisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCQkJCSYmIFJvdW5kaW5nID49IDEKKyNlbmRpZgorCQkJCQkJCQkgICApIHsKKwkJCQlpZiAoZGlnID09ICc5JykKKwkJCQkJZ290byByb3VuZF85X3VwOworCQkJCWlmIChqID4gMCkKKwkJCQkJZGlnKys7CisjaWZkZWYgU0VUX0lORVhBQ1QKKwkJCQllbHNlIGlmICghYi0+eFswXSAmJiBiLT53ZHMgPD0gMSkKKwkJCQkJaW5leGFjdCA9IDA7CisjZW5kaWYKKwkJCQkqcysrID0gZGlnOworCQkJCWdvdG8gcmV0OworCQkJCX0KKyNlbmRpZgorCQkJaWYgKGogPCAwIHx8IChqID09IDAgJiYgbW9kZSAhPSAxCisjaWZuZGVmIFJPVU5EX0JJQVNFRAorCQkJCQkJCSYmICEod29yZDEoJmQpICYgMSkKKyNlbmRpZgorCQkJCQkpKSB7CisJCQkJaWYgKCFiLT54WzBdICYmIGItPndkcyA8PSAxKSB7CisjaWZkZWYgU0VUX0lORVhBQ1QKKwkJCQkJaW5leGFjdCA9IDA7CisjZW5kaWYKKwkJCQkJZ290byBhY2NlcHRfZGlnOworCQkJCQl9CisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCQkJCWlmIChtb2RlID4gMSkKKwkJCQkgc3dpdGNoKFJvdW5kaW5nKSB7CisJCQkJICBjYXNlIDA6IGdvdG8gYWNjZXB0X2RpZzsKKwkJCQkgIGNhc2UgMjogZ290byBrZWVwX2RpZzsKKwkJCQkgIH0KKyNlbmRpZiAvKkhvbm9yX0ZMVF9ST1VORFMqLworCQkJCWlmIChqMSA+IDApIHsKKwkJCQkJYiA9IGxzaGlmdChiLCAxKTsKKwkJCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJCWoxID0gY21wKGIsIFMpOworI2lmZGVmIFJPVU5EX0JJQVNFRAorCQkJCQlpZiAoajEgPj0gMCAvKikqLworI2Vsc2UKKwkJCQkJaWYgKChqMSA+IDAgfHwgKGoxID09IDAgJiYgZGlnICYgMSkpCisjZW5kaWYKKwkJCQkJJiYgZGlnKysgPT0gJzknKQorCQkJCQkJZ290byByb3VuZF85X3VwOworCQkJCQl9CisgYWNjZXB0X2RpZzoKKwkJCQkqcysrID0gZGlnOworCQkJCWdvdG8gcmV0OworCQkJCX0KKwkJCWlmIChqMSA+IDApIHsKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisJCQkJaWYgKCFSb3VuZGluZykKKwkJCQkJZ290byBhY2NlcHRfZGlnOworI2VuZGlmCisJCQkJaWYgKGRpZyA9PSAnOScpIHsgLyogcG9zc2libGUgaWYgaSA9PSAxICovCisgcm91bmRfOV91cDoKKwkJCQkJKnMrKyA9ICc5JzsKKwkJCQkJZ290byByb3VuZG9mZjsKKwkJCQkJfQorCQkJCSpzKysgPSBkaWcgKyAxOworCQkJCWdvdG8gcmV0OworCQkJCX0KKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisga2VlcF9kaWc6CisjZW5kaWYKKwkJCSpzKysgPSBkaWc7CisJCQlpZiAoaSA9PSBpbGltKQorCQkJCWJyZWFrOworCQkJYiA9IG11bHRhZGQoYiwgMTAsIDApOworCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJaWYgKG1sbyA9PSBtaGkpIHsKKwkJCQltbG8gPSBtaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJCWlmIChtbG8gPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQllbHNlIHsKKwkJCQltbG8gPSBtdWx0YWRkKG1sbywgMTAsIDApOworCQkJCWlmIChtbG8gPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQltaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJCWlmIChtaGkgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQl9CisJCX0KKwllbHNlCisJCWZvcihpID0gMTs7IGkrKykgeworCQkJKnMrKyA9IGRpZyA9IHF1b3JlbShiLFMpICsgJzAnOworCQkJaWYgKCFiLT54WzBdICYmIGItPndkcyA8PSAxKSB7CisjaWZkZWYgU0VUX0lORVhBQ1QKKwkJCQlpbmV4YWN0ID0gMDsKKyNlbmRpZgorCQkJCWdvdG8gcmV0OworCQkJCX0KKwkJCWlmIChpID49IGlsaW0pCisJCQkJYnJlYWs7CisJCQliID0gbXVsdGFkZChiLCAxMCwgMCk7CisJCQlpZiAoYiA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisKKwkvKiBSb3VuZCBvZmYgbGFzdCBkaWdpdCAqLworCisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCXN3aXRjaChSb3VuZGluZykgeworCSAgY2FzZSAwOiBnb3RvIHRyaW16ZXJvczsKKwkgIGNhc2UgMjogZ290byByb3VuZG9mZjsKKwkgIH0KKyNlbmRpZgorCWIgPSBsc2hpZnQoYiwgMSk7CisJaWYgKGIgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwlqID0gY21wKGIsIFMpOworI2lmZGVmIFJPVU5EX0JJQVNFRAorCWlmIChqID49IDApCisjZWxzZQorCWlmIChqID4gMCB8fCAoaiA9PSAwICYmIGRpZyAmIDEpKQorI2VuZGlmCisJCXsKKyByb3VuZG9mZjoKKwkJd2hpbGUoKi0tcyA9PSAnOScpCisJCQlpZiAocyA9PSBzMCkgeworCQkJCWsrKzsKKwkJCQkqcysrID0gJzEnOworCQkJCWdvdG8gcmV0OworCQkJCX0KKwkJKysqcysrOworCQl9CisJZWxzZSB7CisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworIHRyaW16ZXJvczoKKyNlbmRpZgorCQl3aGlsZSgqLS1zID09ICcwJyk7CisJCXMrKzsKKwkJfQorIHJldDoKKwlCZnJlZShTKTsKKwlpZiAobWhpKSB7CisJCWlmIChtbG8gJiYgbWxvICE9IG1oaSkKKwkJCUJmcmVlKG1sbyk7CisJCUJmcmVlKG1oaSk7CisJCX0KKyByZXQxOgorI2lmZGVmIFNFVF9JTkVYQUNUCisJaWYgKGluZXhhY3QpIHsKKwkJaWYgKCFvbGRpbmV4YWN0KSB7CisJCQl3b3JkMCgmZCkgPSBFeHBfMSArICg3MCA8PCBFeHBfc2hpZnQpOworCQkJd29yZDEoJmQpID0gMDsKKwkJCWR2YWwoJmQpICs9IDEuOworCQkJfQorCQl9CisJZWxzZSBpZiAoIW9sZGluZXhhY3QpCisJCWNsZWFyX2luZXhhY3QoKTsKKyNlbmRpZgorCUJmcmVlKGIpOworCSpzID0gMDsKKwkqZGVjcHQgPSBrICsgMTsKKwlpZiAocnZlKQorCQkqcnZlID0gczsKKwlyZXR1cm4gczA7CisJfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2dkdG9hLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvZ2R0b2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDExZGU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2dkdG9hLmMKQEAgLTAsMCArMSw4MjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRXQVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byBEYXZpZCBNLiBHYXkgKGRtZyBhdCBhY20gZG90IG9yZywKKyAqIHdpdGggIiBhdCAiIGNoYW5nZWQgYXQgIkAiIGFuZCAiIGRvdCAiIGNoYW5nZWQgdG8gIi4iKS4JKi8KKworI2luY2x1ZGUgImdkdG9haW1wLmgiCisKKyBzdGF0aWMgQmlnaW50ICoKKyNpZmRlZiBLUl9oZWFkZXJzCitiaXRzdG9iKGJpdHMsIG5iaXRzLCBiYml0cykgVUxvbmcgKmJpdHM7IGludCBuYml0czsgaW50ICpiYml0czsKKyNlbHNlCitiaXRzdG9iKFVMb25nICpiaXRzLCBpbnQgbmJpdHMsIGludCAqYmJpdHMpCisjZW5kaWYKK3sKKwlpbnQgaSwgazsKKwlCaWdpbnQgKmI7CisJVUxvbmcgKmJlLCAqeCwgKngwOworCisJaSA9IFVMYml0czsKKwlrID0gMDsKKwl3aGlsZShpIDwgbmJpdHMpIHsKKwkJaSA8PD0gMTsKKwkJaysrOworCQl9CisjaWZuZGVmIFBhY2tfMzIKKwlpZiAoIWspCisJCWsgPSAxOworI2VuZGlmCisJYiA9IEJhbGxvYyhrKTsKKwlpZiAoYiA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWJlID0gYml0cyArICgobmJpdHMgLSAxKSA+PiBrc2hpZnQpOworCXggPSB4MCA9IGItPng7CisJZG8geworCQkqeCsrID0gKmJpdHMgJiBBTExfT047CisjaWZkZWYgUGFja18xNgorCQkqeCsrID0gKCpiaXRzID4+IDE2KSAmIEFMTF9PTjsKKyNlbmRpZgorCQl9IHdoaWxlKCsrYml0cyA8PSBiZSk7CisJaSA9IHggLSB4MDsKKwl3aGlsZSgheDBbLS1pXSkKKwkJaWYgKCFpKSB7CisJCQliLT53ZHMgPSAwOworCQkJKmJiaXRzID0gMDsKKwkJCWdvdG8gcmV0OworCQkJfQorCWItPndkcyA9IGkgKyAxOworCSpiYml0cyA9IGkqVUxiaXRzICsgMzIgLSBoaTBiaXRzKGItPnhbaV0pOworIHJldDoKKwlyZXR1cm4gYjsKKwl9CisKKy8qIGR0b2EgZm9yIElFRUUgYXJpdGhtZXRpYyAoZG1nKTogY29udmVydCBkb3VibGUgdG8gQVNDSUkgc3RyaW5nLgorICoKKyAqIEluc3BpcmVkIGJ5ICJIb3cgdG8gUHJpbnQgRmxvYXRpbmctUG9pbnQgTnVtYmVycyBBY2N1cmF0ZWx5IiBieQorICogR3V5IEwuIFN0ZWVsZSwgSnIuIGFuZCBKb24gTC4gV2hpdGUgW1Byb2MuIEFDTSBTSUdQTEFOICc5MCwgcHAuIDExMi0xMjZdLgorICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKgkxLiBSYXRoZXIgdGhhbiBpdGVyYXRpbmcsIHdlIHVzZSBhIHNpbXBsZSBudW1lcmljIG92ZXJlc3RpbWF0ZQorICoJICAgdG8gZGV0ZXJtaW5lIGsgPSBmbG9vcihsb2cxMChkKSkuICBXZSBzY2FsZSByZWxldmFudAorICoJICAgcXVhbnRpdGllcyB1c2luZyBPKGxvZzIoaykpIHJhdGhlciB0aGFuIE8oaykgbXVsdGlwbGljYXRpb25zLgorICoJMi4gRm9yIHNvbWUgbW9kZXMgPiAyIChjb3JyZXNwb25kaW5nIHRvIGVjdnQgYW5kIGZjdnQpLCB3ZSBkb24ndAorICoJICAgdHJ5IHRvIGdlbmVyYXRlIGRpZ2l0cyBzdHJpY3RseSBsZWZ0IHRvIHJpZ2h0LiAgSW5zdGVhZCwgd2UKKyAqCSAgIGNvbXB1dGUgd2l0aCBmZXdlciBiaXRzIGFuZCBwcm9wYWdhdGUgdGhlIGNhcnJ5IGlmIG5lY2Vzc2FyeQorICoJICAgd2hlbiByb3VuZGluZyB0aGUgZmluYWwgZGlnaXQgdXAuICBUaGlzIGlzIG9mdGVuIGZhc3Rlci4KKyAqCTMuIFVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgaW5wdXQgd2lsbCBiZSByb3VuZGVkIG5lYXJlc3QsCisgKgkgICBtb2RlIDAgcmVuZGVycyAxZTIzIGFzIDFlMjMgcmF0aGVyIHRoYW4gOS45OTk5OTk5OTk5OTk5OTllMjIuCisgKgkgICBUaGF0IGlzLCB3ZSBhbGxvdyBlcXVhbGl0eSBpbiBzdG9wcGluZyB0ZXN0cyB3aGVuIHRoZQorICoJICAgcm91bmQtbmVhcmVzdCBydWxlIHdpbGwgZ2l2ZSB0aGUgc2FtZSBmbG9hdGluZy1wb2ludCB2YWx1ZQorICoJICAgYXMgd291bGQgc2F0aXNmYWN0aW9uIG9mIHRoZSBzdG9wcGluZyB0ZXN0IHdpdGggc3RyaWN0CisgKgkgICBpbmVxdWFsaXR5LgorICoJNC4gV2UgcmVtb3ZlIGNvbW1vbiBmYWN0b3JzIG9mIHBvd2VycyBvZiAyIGZyb20gcmVsZXZhbnQKKyAqCSAgIHF1YW50aXRpZXMuCisgKgk1LiBXaGVuIGNvbnZlcnRpbmcgZmxvYXRpbmctcG9pbnQgaW50ZWdlcnMgbGVzcyB0aGFuIDFlMTYsCisgKgkgICB3ZSB1c2UgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyByYXRoZXIgdGhhbiByZXNvcnRpbmcKKyAqCSAgIHRvIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2Vycy4KKyAqCTYuIFdoZW4gYXNrZWQgdG8gcHJvZHVjZSBmZXdlciB0aGFuIDE1IGRpZ2l0cywgd2UgZmlyc3QgdHJ5CisgKgkgICB0byBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljOyB3ZSByZXNvcnQgdG8KKyAqCSAgIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMgb25seSBpZiB3ZSBjYW5ub3QKKyAqCSAgIGd1YXJhbnRlZSB0aGF0IHRoZSBmbG9hdGluZy1wb2ludCBjYWxjdWxhdGlvbiBoYXMgZ2l2ZW4KKyAqCSAgIHRoZSBjb3JyZWN0bHkgcm91bmRlZCByZXN1bHQuICBGb3IgayByZXF1ZXN0ZWQgZGlnaXRzIGFuZAorICoJICAgInVuaWZvcm1seSIgZGlzdHJpYnV0ZWQgaW5wdXQsIHRoZSBwcm9iYWJpbGl0eSBpcworICoJICAgc29tZXRoaW5nIGxpa2UgMTBeKGstMTUpIHRoYXQgd2UgbXVzdCByZXNvcnQgdG8gdGhlIExvbmcKKyAqCSAgIGNhbGN1bGF0aW9uLgorICovCisKKyBjaGFyICoKK2dkdG9hCisjaWZkZWYgS1JfaGVhZGVycworCShmcGksIGJlLCBiaXRzLCBraW5kcCwgbW9kZSwgbmRpZ2l0cywgZGVjcHQsIHJ2ZSkKKwlGUEkgKmZwaTsgaW50IGJlOyBVTG9uZyAqYml0czsKKwlpbnQgKmtpbmRwLCBtb2RlLCBuZGlnaXRzLCAqZGVjcHQ7IGNoYXIgKipydmU7CisjZWxzZQorCShGUEkgKmZwaSwgaW50IGJlLCBVTG9uZyAqYml0cywgaW50ICpraW5kcCwgaW50IG1vZGUsIGludCBuZGlnaXRzLCBpbnQgKmRlY3B0LCBjaGFyICoqcnZlKQorI2VuZGlmCit7CisgLyoJQXJndW1lbnRzIG5kaWdpdHMgYW5kIGRlY3B0IGFyZSBzaW1pbGFyIHRvIHRoZSBzZWNvbmQgYW5kIHRoaXJkCisJYXJndW1lbnRzIG9mIGVjdnQgYW5kIGZjdnQ7IHRyYWlsaW5nIHplcm9zIGFyZSBzdXBwcmVzc2VkIGZyb20KKwl0aGUgcmV0dXJuZWQgc3RyaW5nLiAgSWYgbm90IG51bGwsICpydmUgaXMgc2V0IHRvIHBvaW50CisJdG8gdGhlIGVuZCBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgSWYgZCBpcyArLUluZmluaXR5IG9yIE5hTiwKKwl0aGVuICpkZWNwdCBpcyBzZXQgdG8gOTk5OS4KKwliZSA9IGV4cG9uZW50OiB2YWx1ZSA9IChpbnRlZ2VyIHJlcHJlc2VudGVkIGJ5IGJpdHMpICogKDIgdG8gdGhlIHBvd2VyIG9mIGJlKS4KKworCW1vZGU6CisJCTAgPT0+IHNob3J0ZXN0IHN0cmluZyB0aGF0IHlpZWxkcyBkIHdoZW4gcmVhZCBpbgorCQkJYW5kIHJvdW5kZWQgdG8gbmVhcmVzdC4KKwkJMSA9PT4gbGlrZSAwLCBidXQgd2l0aCBTdGVlbGUgJiBXaGl0ZSBzdG9wcGluZyBydWxlOworCQkJZS5nLiB3aXRoIElFRUUgUDc1NCBhcml0aG1ldGljICwgbW9kZSAwIGdpdmVzCisJCQkxZTIzIHdoZXJlYXMgbW9kZSAxIGdpdmVzIDkuOTk5OTk5OTk5OTk5OTk5ZTIyLgorCQkyID09PiBtYXgoMSxuZGlnaXRzKSBzaWduaWZpY2FudCBkaWdpdHMuICBUaGlzIGdpdmVzIGEKKwkJCXJldHVybiB2YWx1ZSBzaW1pbGFyIHRvIHRoYXQgb2YgZWN2dCwgZXhjZXB0CisJCQl0aGF0IHRyYWlsaW5nIHplcm9zIGFyZSBzdXBwcmVzc2VkLgorCQkzID09PiB0aHJvdWdoIG5kaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludC4gIFRoaXMKKwkJCWdpdmVzIGEgcmV0dXJuIHZhbHVlIHNpbWlsYXIgdG8gdGhhdCBmcm9tIGZjdnQsCisJCQlleGNlcHQgdGhhdCB0cmFpbGluZyB6ZXJvcyBhcmUgc3VwcHJlc3NlZCwgYW5kCisJCQluZGlnaXRzIGNhbiBiZSBuZWdhdGl2ZS4KKwkJNC05IHNob3VsZCBnaXZlIHRoZSBzYW1lIHJldHVybiB2YWx1ZXMgYXMgMi0zLCBpLmUuLAorCQkJNCA8PSBtb2RlIDw9IDkgPT0+IHNhbWUgcmV0dXJuIGFzIG1vZGUKKwkJCTIgKyAobW9kZSAmIDEpLiAgVGhlc2UgbW9kZXMgYXJlIG1haW5seSBmb3IKKwkJCWRlYnVnZ2luZzsgb2Z0ZW4gdGhleSBydW4gc2xvd2VyIGJ1dCBzb21ldGltZXMKKwkJCWZhc3RlciB0aGFuIG1vZGVzIDItMy4KKwkJNCw1LDgsOSA9PT4gbGVmdC10by1yaWdodCBkaWdpdCBnZW5lcmF0aW9uLgorCQk2LTkgPT0+IGRvbid0IHRyeSBmYXN0IGZsb2F0aW5nLXBvaW50IGVzdGltYXRlCisJCQkoaWYgYXBwbGljYWJsZSkuCisKKwkJVmFsdWVzIG9mIG1vZGUgb3RoZXIgdGhhbiAwLTkgYXJlIHRyZWF0ZWQgYXMgbW9kZSAwLgorCisJCVN1ZmZpY2llbnQgc3BhY2UgaXMgYWxsb2NhdGVkIHRvIHRoZSByZXR1cm4gdmFsdWUKKwkJdG8gaG9sZCB0aGUgc3VwcHJlc3NlZCB0cmFpbGluZyB6ZXJvcy4KKwkqLworCisJaW50IGJiaXRzLCBiMiwgYjUsIGJlMCwgZGlnLCBpLCBpZXBzLCBpbGltLCBpbGltMCwgaWxpbTEsIGluZXg7CisJaW50IGosIGoxLCBrLCBrMCwga19jaGVjaywga2luZCwgbGVmdHJpZ2h0LCBtMiwgbTUsIG5iaXRzOworCWludCByZGlyLCBzMiwgczUsIHNwZWNfY2FzZSwgdHJ5X3F1aWNrOworCUxvbmcgTDsKKwlCaWdpbnQgKmIsICpiMSwgKmRlbHRhLCAqbWxvLCAqbWhpLCAqbWhpMSwgKlM7CisJZG91YmxlIGQyLCBkczsKKwljaGFyICpzLCAqczA7CisJVSBkLCBlcHM7CisKKyNpZm5kZWYgTVVMVElQTEVfVEhSRUFEUworCWlmIChkdG9hX3Jlc3VsdCkgeworCQlmcmVlZHRvYShkdG9hX3Jlc3VsdCk7CisJCWR0b2FfcmVzdWx0ID0gMDsKKwkJfQorI2VuZGlmCisJaW5leCA9IDA7CisJa2luZCA9ICpraW5kcCAmPSB+U1RSVE9HX0luZXhhY3Q7CisJc3dpdGNoKGtpbmQgJiBTVFJUT0dfUmV0bWFzaykgeworCSAgY2FzZSBTVFJUT0dfWmVybzoKKwkJZ290byByZXRfemVybzsKKwkgIGNhc2UgU1RSVE9HX05vcm1hbDoKKwkgIGNhc2UgU1RSVE9HX0Rlbm9ybWFsOgorCQlicmVhazsKKwkgIGNhc2UgU1RSVE9HX0luZmluaXRlOgorCQkqZGVjcHQgPSAtMzI3Njg7CisJCXJldHVybiBucnZfYWxsb2MoIkluZmluaXR5IiwgcnZlLCA4KTsKKwkgIGNhc2UgU1RSVE9HX05hTjoKKwkJKmRlY3B0ID0gLTMyNzY4OworCQlyZXR1cm4gbnJ2X2FsbG9jKCJOYU4iLCBydmUsIDMpOworCSAgZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJICB9CisJYiA9IGJpdHN0b2IoYml0cywgbmJpdHMgPSBmcGktPm5iaXRzLCAmYmJpdHMpOworCWlmIChiID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJYmUwID0gYmU7CisJaWYgKCAoaSA9IHRyYWlseihiKSkgIT0wKSB7CisJCXJzaGlmdChiLCBpKTsKKwkJYmUgKz0gaTsKKwkJYmJpdHMgLT0gaTsKKwkJfQorCWlmICghYi0+d2RzKSB7CisJCUJmcmVlKGIpOworIHJldF96ZXJvOgorCQkqZGVjcHQgPSAxOworCQlyZXR1cm4gbnJ2X2FsbG9jKCIwIiwgcnZlLCAxKTsKKwkJfQorCisJZHZhbCgmZCkgPSBiMmQoYiwgJmkpOworCWkgPSBiZSArIGJiaXRzIC0gMTsKKwl3b3JkMCgmZCkgJj0gRnJhY19tYXNrMTsKKwl3b3JkMCgmZCkgfD0gRXhwXzExOworI2lmZGVmIElCTQorCWlmICggKGogPSAxMSAtIGhpMGJpdHMod29yZDAoJmQpICYgRnJhY19tYXNrKSkgIT0wKQorCQlkdmFsKCZkKSAvPSAxIDw8IGo7CisjZW5kaWYKKworCS8qIGxvZyh4KQl+PX4gbG9nKDEuNSkgKyAoeC0xLjUpLzEuNQorCSAqIGxvZzEwKHgpCSA9ICBsb2coeCkgLyBsb2coMTApCisJICoJCX49fiBsb2coMS41KS9sb2coMTApICsgKHgtMS41KS8oMS41KmxvZygxMCkpCisJICogbG9nMTAoJmQpID0gKGktQmlhcykqbG9nKDIpL2xvZygxMCkgKyBsb2cxMChkMikKKwkgKgorCSAqIFRoaXMgc3VnZ2VzdHMgY29tcHV0aW5nIGFuIGFwcHJveGltYXRpb24gayB0byBsb2cxMCgmZCkgYnkKKwkgKgorCSAqIGsgPSAoaSAtIEJpYXMpKjAuMzAxMDI5OTk1NjYzOTgxCisJICoJKyAoIChkMi0xLjUpKjAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkwNTU2ODEgKTsKKwkgKgorCSAqIFdlIHdhbnQgayB0byBiZSB0b28gbGFyZ2UgcmF0aGVyIHRoYW4gdG9vIHNtYWxsLgorCSAqIFRoZSBlcnJvciBpbiB0aGUgZmlyc3Qtb3JkZXIgVGF5bG9yIHNlcmllcyBhcHByb3hpbWF0aW9uCisJICogaXMgaW4gb3VyIGZhdm9yLCBzbyB3ZSBqdXN0IHJvdW5kIHVwIHRoZSBjb25zdGFudCBlbm91Z2gKKwkgKiB0byBjb21wZW5zYXRlIGZvciBhbnkgZXJyb3IgaW4gdGhlIG11bHRpcGxpY2F0aW9uIG9mCisJICogKGkgLSBCaWFzKSBieSAwLjMwMTAyOTk5NTY2Mzk4MTsgc2luY2UgfGkgLSBCaWFzfCA8PSAxMDc3LAorCSAqIGFuZCAxMDc3ICogMC4zMDEwMyAqIDJeLTUyIH49fiA3LjJlLTE0LAorCSAqIGFkZGluZyAxZS0xMyB0byB0aGUgY29uc3RhbnQgdGVybSBtb3JlIHRoYW4gc3VmZmljZXMuCisJICogSGVuY2Ugd2UgYWRqdXN0IHRoZSBjb25zdGFudCB0ZXJtIHRvIDAuMTc2MDkxMjU5MDU1OC4KKwkgKiAoV2UgY291bGQgZ2V0IGEgbW9yZSBhY2N1cmF0ZSBrIGJ5IGludm9raW5nIGxvZzEwLAorCSAqICBidXQgdGhpcyBpcyBwcm9iYWJseSBub3Qgd29ydGh3aGlsZS4pCisJICovCisjaWZkZWYgSUJNCisJaSA8PD0gMjsKKwlpICs9IGo7CisjZW5kaWYKKwlkcyA9IChkdmFsKCZkKS0xLjUpKjAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkwNTU4ICsgaSowLjMwMTAyOTk5NTY2Mzk4MTsKKworCS8qIGNvcnJlY3QgYXNzdW1wdGlvbiBhYm91dCBleHBvbmVudCByYW5nZSAqLworCWlmICgoaiA9IGkpIDwgMCkKKwkJaiA9IC1qOworCWlmICgoaiAtPSAxMDc3KSA+IDApCisJCWRzICs9IGogKiA3ZS0xNzsKKworCWsgPSAoaW50KWRzOworCWlmIChkcyA8IDAuICYmIGRzICE9IGspCisJCWstLTsJLyogd2FudCBrID0gZmxvb3IoZHMpICovCisJa19jaGVjayA9IDE7CisjaWZkZWYgSUJNCisJaiA9IGJlICsgYmJpdHMgLSAxOworCWlmICggKGoxID0gaiAmIDMpICE9MCkKKwkJZHZhbCgmZCkgKj0gMSA8PCBqMTsKKwl3b3JkMCgmZCkgKz0gaiA8PCBFeHBfc2hpZnQgLSAyICYgRXhwX21hc2s7CisjZWxzZQorCXdvcmQwKCZkKSArPSAoYmUgKyBiYml0cyAtIDEpIDw8IEV4cF9zaGlmdDsKKyNlbmRpZgorCWlmIChrID49IDAgJiYgayA8PSBUZW5fcG1heCkgeworCQlpZiAoZHZhbCgmZCkgPCB0ZW5zW2tdKQorCQkJay0tOworCQlrX2NoZWNrID0gMDsKKwkJfQorCWogPSBiYml0cyAtIGkgLSAxOworCWlmIChqID49IDApIHsKKwkJYjIgPSAwOworCQlzMiA9IGo7CisJCX0KKwllbHNlIHsKKwkJYjIgPSAtajsKKwkJczIgPSAwOworCQl9CisJaWYgKGsgPj0gMCkgeworCQliNSA9IDA7CisJCXM1ID0gazsKKwkJczIgKz0gazsKKwkJfQorCWVsc2UgeworCQliMiAtPSBrOworCQliNSA9IC1rOworCQlzNSA9IDA7CisJCX0KKwlpZiAobW9kZSA8IDAgfHwgbW9kZSA+IDkpCisJCW1vZGUgPSAwOworCXRyeV9xdWljayA9IDE7CisJaWYgKG1vZGUgPiA1KSB7CisJCW1vZGUgLT0gNDsKKwkJdHJ5X3F1aWNrID0gMDsKKwkJfQorCWVsc2UgaWYgKGkgPj0gLTQgLSBFbWluIHx8IGkgPCBFbWluKQorCQl0cnlfcXVpY2sgPSAwOworCWxlZnRyaWdodCA9IDE7CisJaWxpbSA9IGlsaW0xID0gLTE7CS8qIFZhbHVlcyBmb3IgY2FzZXMgMCBhbmQgMTsgZG9uZSBoZXJlIHRvICovCisJCQkJLyogc2lsZW5jZSBlcnJvbmVvdXMgImdjYyAtV2FsbCIgd2FybmluZy4gKi8KKwlzd2l0Y2gobW9kZSkgeworCQljYXNlIDA6CisJCWNhc2UgMToKKwkJCWkgPSAoaW50KShuYml0cyAqIC4zMDEwMykgKyAzOworCQkJbmRpZ2l0cyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJbGVmdHJpZ2h0ID0gMDsKKwkJCS8qIG5vIGJyZWFrICovCisJCWNhc2UgNDoKKwkJCWlmIChuZGlnaXRzIDw9IDApCisJCQkJbmRpZ2l0cyA9IDE7CisJCQlpbGltID0gaWxpbTEgPSBpID0gbmRpZ2l0czsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlsZWZ0cmlnaHQgPSAwOworCQkJLyogbm8gYnJlYWsgKi8KKwkJY2FzZSA1OgorCQkJaSA9IG5kaWdpdHMgKyBrICsgMTsKKwkJCWlsaW0gPSBpOworCQkJaWxpbTEgPSBpIC0gMTsKKwkJCWlmIChpIDw9IDApCisJCQkJaSA9IDE7CisJCX0KKwlzID0gczAgPSBydl9hbGxvYyhpKTsKKwlpZiAocyA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJaWYgKCAocmRpciA9IGZwaS0+cm91bmRpbmcgLSAxKSAhPTApIHsKKwkJaWYgKHJkaXIgPCAwKQorCQkJcmRpciA9IDI7CisJCWlmIChraW5kICYgU1RSVE9HX05lZykKKwkJCXJkaXIgPSAzIC0gcmRpcjsKKwkJfQorCisJLyogTm93IHJkaXIgPSAwID09PiByb3VuZCBuZWFyLCAxID09PiByb3VuZCB1cCwgMiA9PT4gcm91bmQgZG93bi4gKi8KKworCWlmIChpbGltID49IDAgJiYgaWxpbSA8PSBRdWlja19tYXggJiYgdHJ5X3F1aWNrICYmICFyZGlyCisjaWZuZGVmIElNUFJFQ0lTRV9JTkVYQUNUCisJCSYmIGsgPT0gMAorI2VuZGlmCisJCQkJCQkJCSkgeworCisJCS8qIFRyeSB0byBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLiAqLworCisJCWkgPSAwOworCQlkMiA9IGR2YWwoJmQpOworI2lmZGVmIElCTQorCQlpZiAoIChqID0gMTEgLSBoaTBiaXRzKHdvcmQwKCZkKSAmIEZyYWNfbWFzaykpICE9MCkKKwkJCWR2YWwoJmQpIC89IDEgPDwgajsKKyNlbmRpZgorCQlrMCA9IGs7CisJCWlsaW0wID0gaWxpbTsKKwkJaWVwcyA9IDI7IC8qIGNvbnNlcnZhdGl2ZSAqLworCQlpZiAoayA+IDApIHsKKwkJCWRzID0gdGVuc1trJjB4Zl07CisJCQlqID0gayA+PiA0OworCQkJaWYgKGogJiBCbGV0Y2gpIHsKKwkJCQkvKiBwcmV2ZW50IG92ZXJmbG93cyAqLworCQkJCWogJj0gQmxldGNoIC0gMTsKKwkJCQlkdmFsKCZkKSAvPSBiaWd0ZW5zW25fYmlndGVucy0xXTsKKwkJCQlpZXBzKys7CisJCQkJfQorCQkJZm9yKDsgajsgaiA+Pj0gMSwgaSsrKQorCQkJCWlmIChqICYgMSkgeworCQkJCQlpZXBzKys7CisJCQkJCWRzICo9IGJpZ3RlbnNbaV07CisJCQkJCX0KKwkJCX0KKwkJZWxzZSAgeworCQkJZHMgPSAxLjsKKwkJCWlmICggKGoxID0gLWspICE9MCkgeworCQkJCWR2YWwoJmQpICo9IHRlbnNbajEgJiAweGZdOworCQkJCWZvcihqID0gajEgPj4gNDsgajsgaiA+Pj0gMSwgaSsrKQorCQkJCQlpZiAoaiAmIDEpIHsKKwkJCQkJCWllcHMrKzsKKwkJCQkJCWR2YWwoJmQpICo9IGJpZ3RlbnNbaV07CisJCQkJCQl9CisJCQkJfQorCQkJfQorCQlpZiAoa19jaGVjayAmJiBkdmFsKCZkKSA8IDEuICYmIGlsaW0gPiAwKSB7CisJCQlpZiAoaWxpbTEgPD0gMCkKKwkJCQlnb3RvIGZhc3RfZmFpbGVkOworCQkJaWxpbSA9IGlsaW0xOworCQkJay0tOworCQkJZHZhbCgmZCkgKj0gMTAuOworCQkJaWVwcysrOworCQkJfQorCQlkdmFsKCZlcHMpID0gaWVwcypkdmFsKCZkKSArIDcuOworCQl3b3JkMCgmZXBzKSAtPSAoUC0xKSpFeHBfbXNrMTsKKwkJaWYgKGlsaW0gPT0gMCkgeworCQkJUyA9IG1oaSA9IDA7CisJCQlkdmFsKCZkKSAtPSA1LjsKKwkJCWlmIChkdmFsKCZkKSA+IGR2YWwoJmVwcykpCisJCQkJZ290byBvbmVfZGlnaXQ7CisJCQlpZiAoZHZhbCgmZCkgPCAtZHZhbCgmZXBzKSkKKwkJCQlnb3RvIG5vX2RpZ2l0czsKKwkJCWdvdG8gZmFzdF9mYWlsZWQ7CisJCQl9CisjaWZuZGVmIE5vX2xlZnRyaWdodAorCQlpZiAobGVmdHJpZ2h0KSB7CisJCQkvKiBVc2UgU3RlZWxlICYgV2hpdGUgbWV0aG9kIG9mIG9ubHkKKwkJCSAqIGdlbmVyYXRpbmcgZGlnaXRzIG5lZWRlZC4KKwkJCSAqLworCQkJZHZhbCgmZXBzKSA9IGRzKjAuNS90ZW5zW2lsaW0tMV0gLSBkdmFsKCZlcHMpOworCQkJZm9yKGkgPSAwOzspIHsKKwkJCQlMID0gKExvbmcpKGR2YWwoJmQpL2RzKTsKKwkJCQlkdmFsKCZkKSAtPSBMKmRzOworCQkJCSpzKysgPSAnMCcgKyAoaW50KUw7CisJCQkJaWYgKGR2YWwoJmQpIDwgZHZhbCgmZXBzKSkgeworCQkJCQlpZiAoZHZhbCgmZCkpCisJCQkJCQlpbmV4ID0gU1RSVE9HX0luZXhsbzsKKwkJCQkJZ290byByZXQxOworCQkJCQl9CisJCQkJaWYgKGRzIC0gZHZhbCgmZCkgPCBkdmFsKCZlcHMpKQorCQkJCQlnb3RvIGJ1bXBfdXA7CisJCQkJaWYgKCsraSA+PSBpbGltKQorCQkJCQlicmVhazsKKwkJCQlkdmFsKCZlcHMpICo9IDEwLjsKKwkJCQlkdmFsKCZkKSAqPSAxMC47CisJCQkJfQorCQkJfQorCQllbHNlIHsKKyNlbmRpZgorCQkJLyogR2VuZXJhdGUgaWxpbSBkaWdpdHMsIHRoZW4gZml4IHRoZW0gdXAuICovCisJCQlkdmFsKCZlcHMpICo9IHRlbnNbaWxpbS0xXTsKKwkJCWZvcihpID0gMTs7IGkrKywgZHZhbCgmZCkgKj0gMTAuKSB7CisJCQkJaWYgKCAoTCA9IChMb25nKShkdmFsKCZkKS9kcykpICE9MCkKKwkJCQkJZHZhbCgmZCkgLT0gTCpkczsKKwkJCQkqcysrID0gJzAnICsgKGludClMOworCQkJCWlmIChpID09IGlsaW0pIHsKKwkJCQkJZHMgKj0gMC41OworCQkJCQlpZiAoZHZhbCgmZCkgPiBkcyArIGR2YWwoJmVwcykpCisJCQkJCQlnb3RvIGJ1bXBfdXA7CisJCQkJCWVsc2UgaWYgKGR2YWwoJmQpIDwgZHMgLSBkdmFsKCZlcHMpKSB7CisJCQkJCQlpZiAoZHZhbCgmZCkpCisJCQkJCQkJaW5leCA9IFNUUlRPR19JbmV4bG87CisJCQkJCQlnb3RvIGNsZWFyX3RyYWlsaW5nMDsKKwkJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisjaWZuZGVmIE5vX2xlZnRyaWdodAorCQkJfQorI2VuZGlmCisgZmFzdF9mYWlsZWQ6CisJCXMgPSBzMDsKKwkJZHZhbCgmZCkgPSBkMjsKKwkJayA9IGswOworCQlpbGltID0gaWxpbTA7CisJCX0KKworCS8qIERvIHdlIGhhdmUgYSAic21hbGwiIGludGVnZXI/ICovCisKKwlpZiAoYmUgPj0gMCAmJiBrIDw9IEludF9tYXgpIHsKKwkJLyogWWVzLiAqLworCQlkcyA9IHRlbnNba107CisJCWlmIChuZGlnaXRzIDwgMCAmJiBpbGltIDw9IDApIHsKKwkJCVMgPSBtaGkgPSAwOworCQkJaWYgKGlsaW0gPCAwIHx8IGR2YWwoJmQpIDw9IDUqZHMpCisJCQkJZ290byBub19kaWdpdHM7CisJCQlnb3RvIG9uZV9kaWdpdDsKKwkJCX0KKwkJZm9yKGkgPSAxOzsgaSsrLCBkdmFsKCZkKSAqPSAxMC4pIHsKKwkJCUwgPSBkdmFsKCZkKSAvIGRzOworCQkJZHZhbCgmZCkgLT0gTCpkczsKKyNpZmRlZiBDaGVja19GTFRfUk9VTkRTCisJCQkvKiBJZiBGTFRfUk9VTkRTID09IDIsIEwgd2lsbCB1c3VhbGx5IGJlIGhpZ2ggYnkgMSAqLworCQkJaWYgKGR2YWwoJmQpIDwgMCkgeworCQkJCUwtLTsKKwkJCQlkdmFsKCZkKSArPSBkczsKKwkJCQl9CisjZW5kaWYKKwkJCSpzKysgPSAnMCcgKyAoaW50KUw7CisJCQlpZiAoZHZhbCgmZCkgPT0gMC4pCisJCQkJYnJlYWs7CisJCQlpZiAoaSA9PSBpbGltKSB7CisJCQkJaWYgKHJkaXIpIHsKKwkJCQkJaWYgKHJkaXIgPT0gMSkKKwkJCQkJCWdvdG8gYnVtcF91cDsKKwkJCQkJaW5leCA9IFNUUlRPR19JbmV4bG87CisJCQkJCWdvdG8gcmV0MTsKKwkJCQkJfQorCQkJCWR2YWwoJmQpICs9IGR2YWwoJmQpOworI2lmZGVmIFJPVU5EX0JJQVNFRAorCQkJCWlmIChkdmFsKCZkKSA+PSBkcykKKyNlbHNlCisJCQkJaWYgKGR2YWwoJmQpID4gZHMgfHwgKGR2YWwoJmQpID09IGRzICYmIEwgJiAxKSkKKyNlbmRpZgorCQkJCQl7CisgYnVtcF91cDoKKwkJCQkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCQkJCXdoaWxlKCotLXMgPT0gJzknKQorCQkJCQkJaWYgKHMgPT0gczApIHsKKwkJCQkJCQlrKys7CisJCQkJCQkJKnMgPSAnMCc7CisJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkrKypzKys7CisJCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJaW5leCA9IFNUUlRPR19JbmV4bG87CisgY2xlYXJfdHJhaWxpbmcwOgorCQkJCQl3aGlsZSgqLS1zID09ICcwJyl7fQorCQkJCQkrK3M7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCWdvdG8gcmV0MTsKKwkJfQorCisJbTIgPSBiMjsKKwltNSA9IGI1OworCW1oaSA9IG1sbyA9IDA7CisJaWYgKGxlZnRyaWdodCkgeworCQlpID0gbmJpdHMgLSBiYml0czsKKwkJaWYgKGJlIC0gaSsrIDwgZnBpLT5lbWluICYmIG1vZGUgIT0gMyAmJiBtb2RlICE9IDUpIHsKKwkJCS8qIGRlbm9ybWFsICovCisJCQlpID0gYmUgLSBmcGktPmVtaW4gKyAxOworCQkJaWYgKG1vZGUgPj0gMiAmJiBpbGltID4gMCAmJiBpbGltIDwgaSkKKwkJCQlnb3RvIHNtYWxsX2lsaW07CisJCQl9CisJCWVsc2UgaWYgKG1vZGUgPj0gMikgeworIHNtYWxsX2lsaW06CisJCQlqID0gaWxpbSAtIDE7CisJCQlpZiAobTUgPj0gaikKKwkJCQltNSAtPSBqOworCQkJZWxzZSB7CisJCQkJczUgKz0gaiAtPSBtNTsKKwkJCQliNSArPSBqOworCQkJCW01ID0gMDsKKwkJCQl9CisJCQlpZiAoKGkgPSBpbGltKSA8IDApIHsKKwkJCQltMiAtPSBpOworCQkJCWkgPSAwOworCQkJCX0KKwkJCX0KKwkJYjIgKz0gaTsKKwkJczIgKz0gaTsKKwkJbWhpID0gaTJiKDEpOworCQlpZiAobWhpID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJaWYgKG0yID4gMCAmJiBzMiA+IDApIHsKKwkJaSA9IG0yIDwgczIgPyBtMiA6IHMyOworCQliMiAtPSBpOworCQltMiAtPSBpOworCQlzMiAtPSBpOworCQl9CisJaWYgKGI1ID4gMCkgeworCQlpZiAobGVmdHJpZ2h0KSB7CisJCQlpZiAobTUgPiAwKSB7CisJCQkJbWhpID0gcG93NW11bHQobWhpLCBtNSk7CisJCQkJaWYgKG1oaSA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCWIxID0gbXVsdChtaGksIGIpOworCQkJCWlmIChiMSA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCUJmcmVlKGIpOworCQkJCWIgPSBiMTsKKwkJCQl9CisJCQlpZiAoIChqID0gYjUgLSBtNSkgIT0wKSB7CisJCQkJYiA9IHBvdzVtdWx0KGIsIGopOworCQkJCWlmIChiID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQorCQkJfQorCQllbHNlIHsKKwkJCWIgPSBwb3c1bXVsdChiLCBiNSk7CisJCQlpZiAoYiA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJCX0KKwlTID0gaTJiKDEpOworCWlmIChTID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJaWYgKHM1ID4gMCkgeworCQlTID0gcG93NW11bHQoUywgczUpOworCQlpZiAoUyA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCisJLyogQ2hlY2sgZm9yIHNwZWNpYWwgY2FzZSB0aGF0IGQgaXMgYSBub3JtYWxpemVkIHBvd2VyIG9mIDIuICovCisKKwlzcGVjX2Nhc2UgPSAwOworCWlmIChtb2RlIDwgMikgeworCQlpZiAoYmJpdHMgPT0gMSAmJiBiZTAgPiBmcGktPmVtaW4gKyAxKSB7CisJCQkvKiBUaGUgc3BlY2lhbCBjYXNlICovCisJCQliMisrOworCQkJczIrKzsKKwkJCXNwZWNfY2FzZSA9IDE7CisJCQl9CisJCX0KKworCS8qIEFycmFuZ2UgZm9yIGNvbnZlbmllbnQgY29tcHV0YXRpb24gb2YgcXVvdGllbnRzOgorCSAqIHNoaWZ0IGxlZnQgaWYgbmVjZXNzYXJ5IHNvIGRpdmlzb3IgaGFzIDQgbGVhZGluZyAwIGJpdHMuCisJICoKKwkgKiBQZXJoYXBzIHdlIHNob3VsZCBqdXN0IGNvbXB1dGUgbGVhZGluZyAyOCBiaXRzIG9mIFMgb25jZQorCSAqIGFuZCBmb3IgYWxsIGFuZCBwYXNzIHRoZW0gYW5kIGEgc2hpZnQgdG8gcXVvcmVtLCBzbyBpdAorCSAqIGNhbiBkbyBzaGlmdHMgYW5kIG9ycyB0byBjb21wdXRlIHRoZSBudW1lcmF0b3IgZm9yIHEuCisJICovCisJaSA9ICgoczUgPyBoaTBiaXRzKFMtPnhbUy0+d2RzLTFdKSA6IFVMYml0cyAtIDEpIC0gczIgLSA0KSAmIGttYXNrOworCW0yICs9IGk7CisJaWYgKChiMiArPSBpKSA+IDApIHsKKwkJYiA9IGxzaGlmdChiLCBiMik7CisJCWlmIChiID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJaWYgKChzMiArPSBpKSA+IDApIHsKKwkJUyA9IGxzaGlmdChTLCBzMik7CisJCWlmIChTID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJaWYgKGtfY2hlY2spIHsKKwkJaWYgKGNtcChiLFMpIDwgMCkgeworCQkJay0tOworCQkJYiA9IG11bHRhZGQoYiwgMTAsIDApOwkvKiB3ZSBib3RjaGVkIHRoZSBrIGVzdGltYXRlICovCisJCQlpZiAoYiA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlpZiAobGVmdHJpZ2h0KSB7CisJCQkJbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKKwkJCQlpZiAobWhpID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQorCQkJaWxpbSA9IGlsaW0xOworCQkJfQorCQl9CisJaWYgKGlsaW0gPD0gMCAmJiBtb2RlID4gMikgeworCQlTID0gbXVsdGFkZChTLDUsMCk7CisJCWlmIChTID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQlpZiAoaWxpbSA8IDAgfHwgY21wKGIsUykgPD0gMCkgeworCQkJLyogbm8gZGlnaXRzLCBmY3Z0IHN0eWxlICovCisgbm9fZGlnaXRzOgorCQkJayA9IC0xIC0gbmRpZ2l0czsKKwkJCWluZXggPSBTVFJUT0dfSW5leGxvOworCQkJZ290byByZXQ7CisJCQl9Cisgb25lX2RpZ2l0OgorCQlpbmV4ID0gU1RSVE9HX0luZXhoaTsKKwkJKnMrKyA9ICcxJzsKKwkJaysrOworCQlnb3RvIHJldDsKKwkJfQorCWlmIChsZWZ0cmlnaHQpIHsKKwkJaWYgKG0yID4gMCkgeworCQkJbWhpID0gbHNoaWZ0KG1oaSwgbTIpOworCQkJaWYgKG1oaSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisKKwkJLyogQ29tcHV0ZSBtbG8gLS0gY2hlY2sgZm9yIHNwZWNpYWwgY2FzZQorCQkgKiB0aGF0IGQgaXMgYSBub3JtYWxpemVkIHBvd2VyIG9mIDIuCisJCSAqLworCisJCW1sbyA9IG1oaTsKKwkJaWYgKHNwZWNfY2FzZSkgeworCQkJbWhpID0gQmFsbG9jKG1oaS0+ayk7CisJCQlpZiAobWhpID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCUJjb3B5KG1oaSwgbWxvKTsKKwkJCW1oaSA9IGxzaGlmdChtaGksIDEpOworCQkJaWYgKG1oaSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisKKwkJZm9yKGkgPSAxOztpKyspIHsKKwkJCWRpZyA9IHF1b3JlbShiLFMpICsgJzAnOworCQkJLyogRG8gd2UgeWV0IGhhdmUgdGhlIHNob3J0ZXN0IGRlY2ltYWwgc3RyaW5nCisJCQkgKiB0aGF0IHdpbGwgcm91bmQgdG8gZD8KKwkJCSAqLworCQkJaiA9IGNtcChiLCBtbG8pOworCQkJZGVsdGEgPSBkaWZmKFMsIG1oaSk7CisJCQlpZiAoZGVsdGEgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJajEgPSBkZWx0YS0+c2lnbiA/IDEgOiBjbXAoYiwgZGVsdGEpOworCQkJQmZyZWUoZGVsdGEpOworI2lmbmRlZiBST1VORF9CSUFTRUQKKwkJCWlmIChqMSA9PSAwICYmICFtb2RlICYmICEoYml0c1swXSAmIDEpICYmICFyZGlyKSB7CisJCQkJaWYgKGRpZyA9PSAnOScpCisJCQkJCWdvdG8gcm91bmRfOV91cDsKKwkJCQlpZiAoaiA8PSAwKSB7CisJCQkJCWlmIChiLT53ZHMgPiAxIHx8IGItPnhbMF0pCisJCQkJCQlpbmV4ID0gU1RSVE9HX0luZXhsbzsKKwkJCQkJfQorCQkJCWVsc2UgeworCQkJCQlkaWcrKzsKKwkJCQkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCQkJCX0KKwkJCQkqcysrID0gZGlnOworCQkJCWdvdG8gcmV0OworCQkJCX0KKyNlbmRpZgorCQkJaWYgKGogPCAwIHx8IChqID09IDAgJiYgIW1vZGUKKyNpZm5kZWYgUk9VTkRfQklBU0VECisJCQkJCQkJJiYgIShiaXRzWzBdICYgMSkKKyNlbmRpZgorCQkJCQkpKSB7CisJCQkJaWYgKHJkaXIgJiYgKGItPndkcyA+IDEgfHwgYi0+eFswXSkpIHsKKwkJCQkJaWYgKHJkaXIgPT0gMikgeworCQkJCQkJaW5leCA9IFNUUlRPR19JbmV4bG87CisJCQkJCQlnb3RvIGFjY2VwdDsKKwkJCQkJCX0KKwkJCQkJd2hpbGUgKGNtcChTLG1oaSkgPiAwKSB7CisJCQkJCQkqcysrID0gZGlnOworCQkJCQkJbWhpMSA9IG11bHRhZGQobWhpLCAxMCwgMCk7CisJCQkJCQlpZiAobWhpMSA9PSBOVUxMKQorCQkJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJCQlpZiAobWxvID09IG1oaSkKKwkJCQkJCQltbG8gPSBtaGkxOworCQkJCQkJbWhpID0gbWhpMTsKKwkJCQkJCWIgPSBtdWx0YWRkKGIsIDEwLCAwKTsKKwkJCQkJCWlmIChiID09IE5VTEwpCisJCQkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQkJCWRpZyA9IHF1b3JlbShiLFMpICsgJzAnOworCQkJCQkJfQorCQkJCQlpZiAoZGlnKysgPT0gJzknKQorCQkJCQkJZ290byByb3VuZF85X3VwOworCQkJCQlpbmV4ID0gU1RSVE9HX0luZXhoaTsKKwkJCQkJZ290byBhY2NlcHQ7CisJCQkJCX0KKwkJCQlpZiAoajEgPiAwKSB7CisJCQkJCWIgPSBsc2hpZnQoYiwgMSk7CisJCQkJCWlmIChiID09IE5VTEwpCisJCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCQlqMSA9IGNtcChiLCBTKTsKKyNpZmRlZiBST1VORF9CSUFTRUQKKwkJCQkJaWYgKGoxID49IDAgLyopKi8KKyNlbHNlCisJCQkJCWlmICgoajEgPiAwIHx8IChqMSA9PSAwICYmIGRpZyAmIDEpKQorI2VuZGlmCisJCQkJCSYmIGRpZysrID09ICc5JykKKwkJCQkJCWdvdG8gcm91bmRfOV91cDsKKwkJCQkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCQkJCX0KKwkJCQlpZiAoYi0+d2RzID4gMSB8fCBiLT54WzBdKQorCQkJCQlpbmV4ID0gU1RSVE9HX0luZXhsbzsKKyBhY2NlcHQ6CisJCQkJKnMrKyA9IGRpZzsKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisJCQlpZiAoajEgPiAwICYmIHJkaXIgIT0gMikgeworCQkJCWlmIChkaWcgPT0gJzknKSB7IC8qIHBvc3NpYmxlIGlmIGkgPT0gMSAqLworIHJvdW5kXzlfdXA6CisJCQkJCSpzKysgPSAnOSc7CisJCQkJCWluZXggPSBTVFJUT0dfSW5leGhpOworCQkJCQlnb3RvIHJvdW5kb2ZmOworCQkJCQl9CisJCQkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCQkJKnMrKyA9IGRpZyArIDE7CisJCQkJZ290byByZXQ7CisJCQkJfQorCQkJKnMrKyA9IGRpZzsKKwkJCWlmIChpID09IGlsaW0pCisJCQkJYnJlYWs7CisJCQliID0gbXVsdGFkZChiLCAxMCwgMCk7CisJCQlpZiAoYiA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlpZiAobWxvID09IG1oaSkgeworCQkJCW1sbyA9IG1oaSA9IG11bHRhZGQobWhpLCAxMCwgMCk7CisJCQkJaWYgKG1sbyA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCX0KKwkJCWVsc2UgeworCQkJCW1sbyA9IG11bHRhZGQobWxvLCAxMCwgMCk7CisJCQkJaWYgKG1sbyA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCW1oaSA9IG11bHRhZGQobWhpLCAxMCwgMCk7CisJCQkJaWYgKG1oaSA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCX0KKwkJCX0KKwkJfQorCWVsc2UKKwkJZm9yKGkgPSAxOzsgaSsrKSB7CisJCQkqcysrID0gZGlnID0gcXVvcmVtKGIsUykgKyAnMCc7CisJCQlpZiAoaSA+PSBpbGltKQorCQkJCWJyZWFrOworCQkJYiA9IG11bHRhZGQoYiwgMTAsIDApOworCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCisJLyogUm91bmQgb2ZmIGxhc3QgZGlnaXQgKi8KKworCWlmIChyZGlyKSB7CisJCWlmIChyZGlyID09IDIgfHwgKGItPndkcyA8PSAxICYmICFiLT54WzBdKSkKKwkJCWdvdG8gY2hvcHplcm9zOworCQlnb3RvIHJvdW5kb2ZmOworCQl9CisJYiA9IGxzaGlmdChiLCAxKTsKKwlpZiAoYiA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWogPSBjbXAoYiwgUyk7CisjaWZkZWYgUk9VTkRfQklBU0VECisJaWYgKGogPj0gMCkKKyNlbHNlCisJaWYgKGogPiAwIHx8IChqID09IDAgJiYgZGlnICYgMSkpCisjZW5kaWYKKwkJeworIHJvdW5kb2ZmOgorCQlpbmV4ID0gU1RSVE9HX0luZXhoaTsKKwkJd2hpbGUoKi0tcyA9PSAnOScpCisJCQlpZiAocyA9PSBzMCkgeworCQkJCWsrKzsKKwkJCQkqcysrID0gJzEnOworCQkJCWdvdG8gcmV0OworCQkJCX0KKwkJKysqcysrOworCQl9CisJZWxzZSB7CisgY2hvcHplcm9zOgorCQlpZiAoYi0+d2RzID4gMSB8fCBiLT54WzBdKQorCQkJaW5leCA9IFNUUlRPR19JbmV4bG87CisJCXdoaWxlKCotLXMgPT0gJzAnKXt9CisJCSsrczsKKwkJfQorIHJldDoKKwlCZnJlZShTKTsKKwlpZiAobWhpKSB7CisJCWlmIChtbG8gJiYgbWxvICE9IG1oaSkKKwkJCUJmcmVlKG1sbyk7CisJCUJmcmVlKG1oaSk7CisJCX0KKyByZXQxOgorCUJmcmVlKGIpOworCSpzID0gMDsKKwkqZGVjcHQgPSBrICsgMTsKKwlpZiAocnZlKQorCQkqcnZlID0gczsKKwkqa2luZHAgfD0gaW5leDsKKwlyZXR1cm4gczA7CisJfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2dkdG9hLmggYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvZ2R0b2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTFjZWEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2dkdG9hLmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OCBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRXQVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byBEYXZpZCBNLiBHYXkgKGRtZyBhdCBhY20gZG90IG9yZywKKyAqIHdpdGggIiBhdCAiIGNoYW5nZWQgYXQgIkAiIGFuZCAiIGRvdCAiIGNoYW5nZWQgdG8gIi4iKS4JKi8KKworI2lmbmRlZiBHRFRPQV9IX0lOQ0xVREVECisjZGVmaW5lIEdEVE9BX0hfSU5DTFVERUQKKworI2luY2x1ZGUgImFyaXRoLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+IC8qIGZvciBzaXplX3QgKi8KKworI2lmbmRlZiBMb25nCisjZGVmaW5lIExvbmcgaW50CisjZW5kaWYKKyNpZm5kZWYgVUxvbmcKK3R5cGVkZWYgdW5zaWduZWQgTG9uZyBVTG9uZzsKKyNlbmRpZgorI2lmbmRlZiBVU2hvcnQKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVVNob3J0OworI2VuZGlmCisKKyNpZm5kZWYgQU5TSQorI2lmZGVmIEtSX2hlYWRlcnMKKyNkZWZpbmUgQU5TSSh4KSAoKQorI2RlZmluZSBWb2lkIC8qbm90aGluZyovCisjZWxzZQorI2RlZmluZSBBTlNJKHgpIHgKKyNkZWZpbmUgVm9pZCB2b2lkCisjZW5kaWYKKyNlbmRpZiAvKiBBTlNJICovCisKKyNpZm5kZWYgQ09OU1QKKyNpZmRlZiBLUl9oZWFkZXJzCisjZGVmaW5lIENPTlNUIC8qIGJsYW5rICovCisjZWxzZQorI2RlZmluZSBDT05TVCBjb25zdAorI2VuZGlmCisjZW5kaWYgLyogQ09OU1QgKi8KKworIGVudW0gewkvKiByZXR1cm4gdmFsdWVzIGZyb20gc3RydG9kZyAqLworCVNUUlRPR19aZXJvCT0gMHgwMDAsCisJU1RSVE9HX05vcm1hbAk9IDB4MDAxLAorCVNUUlRPR19EZW5vcm1hbAk9IDB4MDAyLAorCVNUUlRPR19JbmZpbml0ZQk9IDB4MDAzLAorCVNUUlRPR19OYU4JPSAweDAwNCwKKwlTVFJUT0dfTmFOYml0cwk9IDB4MDA1LAorCVNUUlRPR19Ob051bWJlcgk9IDB4MDA2LAorCVNUUlRPR19Ob01lbW9yeSA9IDB4MDA3LAorCVNUUlRPR19SZXRtYXNrCT0gMHgwMGYsCisKKwkvKiBUaGUgZm9sbG93aW5nIG1heSBiZSBvci1lZCBpbnRvIG9uZSBvZiB0aGUgYWJvdmUgdmFsdWVzLiAqLworCisJU1RSVE9HX0luZXhsbwk9IDB4MDEwLCAvKiByZXR1cm5lZCByZXN1bHQgcm91bmRlZCB0b3dhcmQgemVybyAqLworCVNUUlRPR19JbmV4aGkJPSAweDAyMCwgLyogcmV0dXJuZWQgcmVzdWx0IHJvdW5kZWQgYXdheSBmcm9tIHplcm8gKi8KKwlTVFJUT0dfSW5leGFjdAk9IDB4MDMwLAorCVNUUlRPR19VbmRlcmZsb3c9IDB4MDQwLAorCVNUUlRPR19PdmVyZmxvdwk9IDB4MDgwLAorCVNUUlRPR19OZWcJPSAweDEwMCAvKiBkb2VzIG5vdCBhZmZlY3QgU1RSVE9HX0luZXhsbyBvciBTVFJUT0dfSW5leGhpICovCisJfTsKKworIHR5cGVkZWYgc3RydWN0CitGUEkgeworCWludCBuYml0czsKKwlpbnQgZW1pbjsKKwlpbnQgZW1heDsKKwlpbnQgcm91bmRpbmc7CisJaW50IHN1ZGRlbl91bmRlcmZsb3c7CisJfSBGUEk7CisKK2VudW0gewkvKiBGUEkucm91bmRpbmcgdmFsdWVzOiBzYW1lIGFzIEZMVF9ST1VORFMgKi8KKwlGUElfUm91bmRfemVybyA9IDAsCisJRlBJX1JvdW5kX25lYXIgPSAxLAorCUZQSV9Sb3VuZF91cCA9IDIsCisJRlBJX1JvdW5kX2Rvd24gPSAzCisJfTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitleHRlcm4gY2hhciogX19kdG9hICBBTlNJKChkb3VibGUgZCwgaW50IG1vZGUsIGludCBuZGlnaXRzLCBpbnQgKmRlY3B0LAorCQkJaW50ICpzaWduLCBjaGFyICoqcnZlKSk7CitleHRlcm4gY2hhciogX19nZHRvYSBBTlNJKChGUEkgKmZwaSwgaW50IGJlLCBVTG9uZyAqYml0cywgaW50ICpraW5kcCwKKwkJCWludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwgY2hhciAqKnJ2ZSkpOworZXh0ZXJuIHZvaWQgX19mcmVlZHRvYSBBTlNJKChjaGFyKikpOworZXh0ZXJuIGZsb2F0ICBzdHJ0b2YgQU5TSSgoQ09OU1QgY2hhciAqLCBjaGFyICoqKSk7CitleHRlcm4gZG91YmxlIHN0cnRvZCBBTlNJKChDT05TVCBjaGFyICosIGNoYXIgKiopKTsKK2V4dGVybiBpbnQgX19zdHJ0b2RnIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIEZQSSosIExvbmcqLCBVTG9uZyopKTsKKworZXh0ZXJuIGNoYXIqCV9fZ19kZGZtdCAgQU5TSSgoY2hhciosIGRvdWJsZSosIGludCwgc2l6ZV90KSk7CitleHRlcm4gY2hhcioJX19nX2RmbXQgICBBTlNJKChjaGFyKiwgZG91YmxlKiwgaW50LCBzaXplX3QpKTsKK2V4dGVybiBjaGFyKglfX2dfZmZtdCAgIEFOU0koKGNoYXIqLCBmbG9hdCosICBpbnQsIHNpemVfdCkpOworZXh0ZXJuIGNoYXIqCV9fZ19RZm10ICAgQU5TSSgoY2hhciosIHZvaWQqLCAgIGludCwgc2l6ZV90KSk7CitleHRlcm4gY2hhcioJX19nX3hmbXQgICBBTlNJKChjaGFyKiwgdm9pZCosICAgaW50LCBzaXplX3QpKTsKK2V4dGVybiBjaGFyKglfX2dfeExmbXQgIEFOU0koKGNoYXIqLCB2b2lkKiwgICBpbnQsIHNpemVfdCkpOworCitleHRlcm4gaW50CV9fc3RydG9JZCAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgZG91YmxlKiwgZG91YmxlKikpOworZXh0ZXJuIGludAlfX3N0cnRvSWRkIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGRvdWJsZSosIGRvdWJsZSopKTsKK2V4dGVybiBpbnQJX19zdHJ0b0lmICBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBmbG9hdCosIGZsb2F0KikpOworZXh0ZXJuIGludAlfX3N0cnRvSVEgIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIHZvaWQqLCB2b2lkKikpOworZXh0ZXJuIGludAlfX3N0cnRvSXggIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIHZvaWQqLCB2b2lkKikpOworZXh0ZXJuIGludAlfX3N0cnRvSXhMIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIHZvaWQqLCB2b2lkKikpOworZXh0ZXJuIGludAlfX3N0cnRvcmQgIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGludCwgZG91YmxlKikpOworZXh0ZXJuIGludAlfX3N0cnRvcmRkIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGludCwgZG91YmxlKikpOworZXh0ZXJuIGludAlfX3N0cnRvcmYgIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGludCwgZmxvYXQqKSk7CitleHRlcm4gaW50CV9fc3RydG9yUSAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgaW50LCB2b2lkKikpOworZXh0ZXJuIGludAlfX3N0cnRvcnggIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGludCwgdm9pZCopKTsKK2V4dGVybiBpbnQJX19zdHJ0b3J4TCBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBpbnQsIHZvaWQqKSk7CisjaWYgMQorZXh0ZXJuIGludAlfX3N0cnRvZEkgIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGRvdWJsZSopKTsKK2V4dGVybiBpbnQJX19zdHJ0b3BkICBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBkb3VibGUqKSk7CitleHRlcm4gaW50CV9fc3RydG9wZGQgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgZG91YmxlKikpOworZXh0ZXJuIGludAlfX3N0cnRvcGYgIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGZsb2F0KikpOworZXh0ZXJuIGludAlfX3N0cnRvcFEgIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIHZvaWQqKSk7CitleHRlcm4gaW50CV9fc3RydG9weCAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgdm9pZCopKTsKK2V4dGVybiBpbnQJX19zdHJ0b3B4TCBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCB2b2lkKikpOworI2Vsc2UKKyNkZWZpbmUgX19zdHJ0b3BkKHMsc2UseCkgc3RydG9yZChzLHNlLDEseCkKKyNkZWZpbmUgX19zdHJ0b3BkZChzLHNlLHgpIHN0cnRvcmRkKHMsc2UsMSx4KQorI2RlZmluZSBfX3N0cnRvcGYocyxzZSx4KSBzdHJ0b3JmKHMsc2UsMSx4KQorI2RlZmluZSBfX3N0cnRvcFEocyxzZSx4KSBzdHJ0b3JRKHMsc2UsMSx4KQorI2RlZmluZSBfX3N0cnRvcHgocyxzZSx4KSBzdHJ0b3J4KHMsc2UsMSx4KQorI2RlZmluZSBfX3N0cnRvcHhMKHMsc2UseCkgc3RydG9yeEwocyxzZSwxLHgpCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvKiBHRFRPQV9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvZ2R0b2FfZmx0cm5kcy5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2dkdG9hX2ZsdHJuZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2U1ZjllCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2dkdG9hX2ZsdHJuZHMuaApAQCAtMCwwICsxLDE4IEBACisJRlBJICpmcGksIGZwaTE7CisJaW50IFJvdW5kaW5nOworI2lmZGVmIFRydXN0X0ZMVF9ST1VORFMgLyp7eyBvbmx5IGRlZmluZSB0aGlzIGlmIEZMVF9ST1VORFMgcmVhbGx5IHdvcmtzISAqLworCVJvdW5kaW5nID0gRmx0X1JvdW5kczsKKyNlbHNlIC8qfXsqLworCVJvdW5kaW5nID0gMTsKKwlzd2l0Y2goZmVnZXRyb3VuZCgpKSB7CisJICBjYXNlIEZFX1RPV0FSRFpFUk86CVJvdW5kaW5nID0gMDsgYnJlYWs7CisJICBjYXNlIEZFX1VQV0FSRDoJUm91bmRpbmcgPSAyOyBicmVhazsKKwkgIGNhc2UgRkVfRE9XTldBUkQ6CVJvdW5kaW5nID0gMzsKKwkgIH0KKyNlbmRpZiAvKn19Ki8KKwlmcGkgPSAmZnBpMDsKKwlpZiAoUm91bmRpbmcgIT0gMSkgeworCQlmcGkxID0gZnBpMDsKKwkJZnBpID0gJmZwaTE7CisJCWZwaTEucm91bmRpbmcgPSBSb3VuZGluZzsKKwkJfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2dkdG9haW1wLmggYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvZ2R0b2FpbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTM2OTY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2dkdG9haW1wLmgKQEAgLTAsMCArMSw2NjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OC0yMDAwIGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgaXMgYSB2YXJpYXRpb24gb24gZHRvYS5jIHRoYXQgY29udmVydHMgYXJiaXRhcnkgYmluYXJ5CisgICBmbG9hdGluZy1wb2ludCBmb3JtYXRzIHRvIGFuZCBmcm9tIGRlY2ltYWwgbm90YXRpb24uICBJdCB1c2VzCisgICBkb3VibGUtcHJlY2lzaW9uIGFyaXRobWV0aWMgaW50ZXJuYWxseSwgc28gdGhlcmUgYXJlIHN0aWxsCisgICB2YXJpb3VzICNpZmRlZnMgdGhhdCBhZGFwdCB0aGUgY2FsY3VsYXRpb25zIHRvIHRoZSBuYXRpdmUKKyAgIGRvdWJsZS1wcmVjaXNpb24gYXJpdGhtZXRpYyAoYW55IG9mIElFRUUsIFZBWCBEX2Zsb2F0aW5nLAorICAgb3IgSUJNIG1haW5mcmFtZSBhcml0aG1ldGljKS4KKworICAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgICB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCisgKi8KKworLyogT24gYSBtYWNoaW5lIHdpdGggSUVFRSBleHRlbmRlZC1wcmVjaXNpb24gcmVnaXN0ZXJzLCBpdCBpcworICogbmVjZXNzYXJ5IHRvIHNwZWNpZnkgZG91YmxlLXByZWNpc2lvbiAoNTMtYml0KSByb3VuZGluZyBwcmVjaXNpb24KKyAqIGJlZm9yZSBpbnZva2luZyBzdHJ0b2Qgb3IgZHRvYS4gIElmIHRoZSBtYWNoaW5lIHVzZXMgKHRoZSBlcXVpdmFsZW50CisgKiBvZikgSW50ZWwgODB4ODcgYXJpdGhtZXRpYywgdGhlIGNhbGwKKyAqCV9jb250cm9sODcoUENfNTMsIE1DV19QQyk7CisgKiBkb2VzIHRoaXMgd2l0aCBtYW55IGNvbXBpbGVycy4gIFdoZXRoZXIgdGhpcyBvciBhbm90aGVyIGNhbGwgaXMKKyAqIGFwcHJvcHJpYXRlIGRlcGVuZHMgb24gdGhlIGNvbXBpbGVyOyBmb3IgdGhpcyB0byB3b3JrLCBpdCBtYXkgYmUKKyAqIG5lY2Vzc2FyeSB0byAjaW5jbHVkZSAiZmxvYXQuaCIgb3IgYW5vdGhlciBzeXN0ZW0tZGVwZW5kZW50IGhlYWRlcgorICogZmlsZS4KKyAqLworCisvKiBzdHJ0b2QgZm9yIElFRUUtLCBWQVgtLCBhbmQgSUJNLWFyaXRobWV0aWMgbWFjaGluZXMuCisgKgorICogVGhpcyBzdHJ0b2QgcmV0dXJucyBhIG5lYXJlc3QgbWFjaGluZSBudW1iZXIgdG8gdGhlIGlucHV0IGRlY2ltYWwKKyAqIHN0cmluZyAob3Igc2V0cyBlcnJubyB0byBFUkFOR0UpLiAgV2l0aCBJRUVFIGFyaXRobWV0aWMsIHRpZXMgYXJlCisgKiBicm9rZW4gYnkgdGhlIElFRUUgcm91bmQtZXZlbiBydWxlLiAgT3RoZXJ3aXNlIHRpZXMgYXJlIGJyb2tlbiBieQorICogYmlhc2VkIHJvdW5kaW5nIChhZGQgaGFsZiBhbmQgY2hvcCkuCisgKgorICogSW5zcGlyZWQgbG9vc2VseSBieSBXaWxsaWFtIEQuIENsaW5nZXIncyBwYXBlciAiSG93IHRvIFJlYWQgRmxvYXRpbmcKKyAqIFBvaW50IE51bWJlcnMgQWNjdXJhdGVseSIgW1Byb2MuIEFDTSBTSUdQTEFOICc5MCwgcHAuIDExMi0xMjZdLgorICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKgorICoJMS4gV2Ugb25seSByZXF1aXJlIElFRUUsIElCTSwgb3IgVkFYIGRvdWJsZS1wcmVjaXNpb24KKyAqCQlhcml0aG1ldGljIChub3QgSUVFRSBkb3VibGUtZXh0ZW5kZWQpLgorICoJMi4gV2UgZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyBpbiBhIGNhc2UgdGhhdAorICoJCUNsaW5nZXIgbWlzc2VkIC0tIHdoZW4gd2UncmUgY29tcHV0aW5nIGQgKiAxMF5uCisgKgkJZm9yIGEgc21hbGwgaW50ZWdlciBkIGFuZCB0aGUgaW50ZWdlciBuIGlzIG5vdCB0b28KKyAqCQltdWNoIGxhcmdlciB0aGFuIDIyICh0aGUgbWF4aW11bSBpbnRlZ2VyIGsgZm9yIHdoaWNoCisgKgkJd2UgY2FuIHJlcHJlc2VudCAxMF5rIGV4YWN0bHkpLCB3ZSBtYXkgYmUgYWJsZSB0bworICoJCWNvbXB1dGUgKGQqMTBeaykgKiAxMF4oZS1rKSB3aXRoIGp1c3Qgb25lIHJvdW5kb2ZmLgorICoJMy4gUmF0aGVyIHRoYW4gYSBiaXQtYXQtYS10aW1lIGFkanVzdG1lbnQgb2YgdGhlIGJpbmFyeQorICoJCXJlc3VsdCBpbiB0aGUgaGFyZCBjYXNlLCB3ZSB1c2UgZmxvYXRpbmctcG9pbnQKKyAqCQlhcml0aG1ldGljIHRvIGRldGVybWluZSB0aGUgYWRqdXN0bWVudCB0byB3aXRoaW4KKyAqCQlvbmUgYml0OyBvbmx5IGluIHJlYWxseSBoYXJkIGNhc2VzIGRvIHdlIG5lZWQgdG8KKyAqCQljb21wdXRlIGEgc2Vjb25kIHJlc2lkdWFsLgorICoJNC4gQmVjYXVzZSBvZiAzLiwgd2UgZG9uJ3QgbmVlZCBhIGxhcmdlIHRhYmxlIG9mIHBvd2VycyBvZiAxMAorICoJCWZvciB0ZW4tdG8tZSAoanVzdCBzb21lIHNtYWxsIHRhYmxlcywgZS5nLiBvZiAxMF5rCisgKgkJZm9yIDAgPD0gayA8PSAyMikuCisgKi8KKworLyoKKyAqICNkZWZpbmUgSUVFRV84MDg3IGZvciBJRUVFLWFyaXRobWV0aWMgbWFjaGluZXMgd2hlcmUgdGhlIGxlYXN0CisgKglzaWduaWZpY2FudCBieXRlIGhhcyB0aGUgbG93ZXN0IGFkZHJlc3MuCisgKiAjZGVmaW5lIElFRUVfTUM2OGsgZm9yIElFRUUtYXJpdGhtZXRpYyBtYWNoaW5lcyB3aGVyZSB0aGUgbW9zdAorICoJc2lnbmlmaWNhbnQgYnl0ZSBoYXMgdGhlIGxvd2VzdCBhZGRyZXNzLgorICogI2RlZmluZSBMb25nIGludCBvbiBtYWNoaW5lcyB3aXRoIDMyLWJpdCBpbnRzIGFuZCA2NC1iaXQgbG9uZ3MuCisgKiAjZGVmaW5lIFN1ZGRlbl9VbmRlcmZsb3cgZm9yIElFRUUtZm9ybWF0IG1hY2hpbmVzIHdpdGhvdXQgZ3JhZHVhbAorICoJdW5kZXJmbG93IChpLmUuLCB0aGF0IGZsdXNoIHRvIHplcm8gb24gdW5kZXJmbG93KS4KKyAqICNkZWZpbmUgSUJNIGZvciBJQk0gbWFpbmZyYW1lLXN0eWxlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMuCisgKiAjZGVmaW5lIFZBWCBmb3IgVkFYLXN0eWxlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgKERfZmxvYXRpbmcpLgorICogI2RlZmluZSBOb19sZWZ0cmlnaHQgdG8gb21pdCBsZWZ0LXJpZ2h0IGxvZ2ljIGluIGZhc3QgZmxvYXRpbmctcG9pbnQKKyAqCWNvbXB1dGF0aW9uIG9mIGR0b2EgYW5kIGdkdG9hLiAgVGhpcyB3aWxsIGNhdXNlIG1vZGVzIDQgYW5kIDUgdG8gYmUKKyAqCXRyZWF0ZWQgdGhlIHNhbWUgYXMgbW9kZXMgMiBhbmQgMyBmb3Igc29tZSBpbnB1dHMuCisgKiAjZGVmaW5lIENoZWNrX0ZMVF9ST1VORFMgaWYgRkxUX1JPVU5EUyBjYW4gYXNzdW1lIHRoZSB2YWx1ZXMgMiBvciAzLgorICogI2RlZmluZSBSTkRfUFJPRFFVT1QgdG8gdXNlIHJuZF9wcm9kIGFuZCBybmRfcXVvdCAoYXNzZW1ibHkgcm91dGluZXMKKyAqCXRoYXQgdXNlIGV4dGVuZGVkLXByZWNpc2lvbiBpbnN0cnVjdGlvbnMgdG8gY29tcHV0ZSByb3VuZGVkCisgKglwcm9kdWN0cyBhbmQgcXVvdGllbnRzKSB3aXRoIElCTS4KKyAqICNkZWZpbmUgUk9VTkRfQklBU0VEIGZvciBJRUVFLWZvcm1hdCB3aXRoIGJpYXNlZCByb3VuZGluZyBhbmQgYXJpdGhtZXRpYworICoJdGhhdCByb3VuZHMgdG93YXJkICtJbmZpbml0eS4KKyAqICNkZWZpbmUgUk9VTkRfQklBU0VEX3dpdGhvdXRfUm91bmRfVXAgZm9yIElFRUUtZm9ybWF0IHdpdGggYmlhc2VkCisgKglyb3VuZGluZyB3aGVuIHRoZSB1bmRlcmx5aW5nIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgdXNlcworICoJdW5iaWFzZWQgcm91bmRpbmcuICBUaGlzIHByZXZlbnQgdXNpbmcgb3JkaW5hcnkgZmxvYXRpbmctcG9pbnQKKyAqCWFyaXRobWV0aWMgd2hlbiB0aGUgcmVzdWx0IGNvdWxkIGJlIGNvbXB1dGVkIHdpdGggb25lIHJvdW5kaW5nIGVycm9yLgorICogI2RlZmluZSBJbmFjY3VyYXRlX0RpdmlkZSBmb3IgSUVFRS1mb3JtYXQgd2l0aCBjb3JyZWN0bHkgcm91bmRlZAorICoJcHJvZHVjdHMgYnV0IGluYWNjdXJhdGUgcXVvdGllbnRzLCBlLmcuLCBmb3IgSW50ZWwgaTg2MC4KKyAqICNkZWZpbmUgTk9fTE9OR19MT05HIG9uIG1hY2hpbmVzIHRoYXQgZG8gbm90IGhhdmUgYSAibG9uZyBsb25nIgorICoJaW50ZWdlciB0eXBlIChvZiA+PSA2NCBiaXRzKS4gIE9uIHN1Y2ggbWFjaGluZXMsIHlvdSBjYW4KKyAqCSNkZWZpbmUgSnVzdF8xNiB0byBzdG9yZSAxNiBiaXRzIHBlciAzMi1iaXQgTG9uZyB3aGVuIGRvaW5nCisgKgloaWdoLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICBXaGV0aGVyIHRoaXMgc3BlZWRzIHRoaW5ncworICoJdXAgb3Igc2xvd3MgdGhpbmdzIGRvd24gZGVwZW5kcyBvbiB0aGUgbWFjaGluZSBhbmQgdGhlIG51bWJlcgorICoJYmVpbmcgY29udmVydGVkLiAgSWYgbG9uZyBsb25nIGlzIGF2YWlsYWJsZSBhbmQgdGhlIG5hbWUgaXMKKyAqCXNvbWV0aGluZyBvdGhlciB0aGFuICJsb25nIGxvbmciLCAjZGVmaW5lIExsb25nIHRvIGJlIHRoZSBuYW1lLAorICoJYW5kIGlmICJ1bnNpZ25lZCBMbG9uZyIgZG9lcyBub3Qgd29yayBhcyBhbiB1bnNpZ25lZCB2ZXJzaW9uIG9mCisgKglMbG9uZywgI2RlZmluZSAjVUxMb25nIHRvIGJlIHRoZSBjb3JyZXNwb25kaW5nIHVuc2lnbmVkIHR5cGUuCisgKiAjZGVmaW5lIEtSX2hlYWRlcnMgZm9yIG9sZC1zdHlsZSBDIGZ1bmN0aW9uIGhlYWRlcnMuCisgKiAjZGVmaW5lIEJhZF9mbG9hdF9oIGlmIHlvdXIgc3lzdGVtIGxhY2tzIGEgZmxvYXQuaCBvciBpZiBpdCBkb2VzIG5vdAorICoJZGVmaW5lIHNvbWUgb3IgYWxsIG9mIERCTF9ESUcsIERCTF9NQVhfMTBfRVhQLCBEQkxfTUFYX0VYUCwKKyAqCUZMVF9SQURJWCwgRkxUX1JPVU5EUywgYW5kIERCTF9NQVguCisgKiAjZGVmaW5lIE1BTExPQyB5b3VyX21hbGxvYywgd2hlcmUgeW91cl9tYWxsb2MobikgYWN0cyBsaWtlIG1hbGxvYyhuKQorICoJaWYgbWVtb3J5IGlzIGF2YWlsYWJsZSBhbmQgb3RoZXJ3aXNlIGRvZXMgc29tZXRoaW5nIHlvdSBkZWVtCisgKglhcHByb3ByaWF0ZS4gIElmIE1BTExPQyBpcyB1bmRlZmluZWQsIG1hbGxvYyB3aWxsIGJlIGludm9rZWQKKyAqCWRpcmVjdGx5IC0tIGFuZCBhc3N1bWVkIGFsd2F5cyB0byBzdWNjZWVkLiAgU2ltaWxhcmx5LCBpZiB5b3UKKyAqCXdhbnQgc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIHN5c3RlbSdzIGZyZWUoKSB0byBiZSBjYWxsZWQgdG8KKyAqCXJlY3ljbGUgbWVtb3J5IGFjcXVpcmVkIGZyb20gTUFMTE9DLCAjZGVmaW5lIEZSRUUgdG8gYmUgdGhlCisgKgluYW1lIG9mIHRoZSBhbHRlcm5hdGUgcm91dGluZS4gIChGUkVFIG9yIGZyZWUgaXMgb25seSBjYWxsZWQgaW4KKyAqCXBhdGhvbG9naWNhbCBjYXNlcywgZS5nLiwgaW4gYSBnZHRvYSBjYWxsIGFmdGVyIGEgZ2R0b2EgcmV0dXJuIGluCisgKgltb2RlIDMgd2l0aCB0aG91c2FuZHMgb2YgZGlnaXRzIHJlcXVlc3RlZC4pCisgKiAjZGVmaW5lIE9taXRfUHJpdmF0ZV9NZW1vcnkgdG8gb21pdCBsb2dpYyAoYWRkZWQgSmFuLiAxOTk4KSBmb3IgbWFraW5nCisgKgltZW1vcnkgYWxsb2NhdGlvbnMgZnJvbSBhIHByaXZhdGUgcG9vbCBvZiBtZW1vcnkgd2hlbiBwb3NzaWJsZS4KKyAqCVdoZW4gdXNlZCwgdGhlIHByaXZhdGUgcG9vbCBpcyBQUklWQVRFX01FTSBieXRlcyBsb25nOiAgMjMwNCBieXRlcywKKyAqCXVubGVzcyAjZGVmaW5lZCB0byBiZSBhIGRpZmZlcmVudCBsZW5ndGguICBUaGlzIGRlZmF1bHQgbGVuZ3RoCisgKglzdWZmaWNlcyB0byBnZXQgcmlkIG9mIE1BTExPQyBjYWxscyBleGNlcHQgZm9yIHVudXN1YWwgY2FzZXMsCisgKglzdWNoIGFzIGRlY2ltYWwtdG8tYmluYXJ5IGNvbnZlcnNpb24gb2YgYSB2ZXJ5IGxvbmcgc3RyaW5nIG9mCisgKglkaWdpdHMuICBXaGVuIGNvbnZlcnRpbmcgSUVFRSBkb3VibGUgcHJlY2lzaW9uIHZhbHVlcywgdGhlCisgKglsb25nZXN0IHN0cmluZyBnZHRvYSBjYW4gcmV0dXJuIGlzIGFib3V0IDc1MSBieXRlcyBsb25nLiAgRm9yCisgKgljb252ZXJzaW9ucyBieSBzdHJ0b2Qgb2Ygc3RyaW5ncyBvZiA4MDAgZGlnaXRzIGFuZCBhbGwgZ2R0b2EKKyAqCWNvbnZlcnNpb25zIG9mIElFRUUgZG91YmxlcyBpbiBzaW5nbGUtdGhyZWFkZWQgZXhlY3V0aW9ucyB3aXRoCisgKgk4LWJ5dGUgcG9pbnRlcnMsIFBSSVZBVEVfTUVNID49IDc0MDAgYXBwZWFycyB0byBzdWZmaWNlOyB3aXRoCisgKgk0LWJ5dGUgcG9pbnRlcnMsIFBSSVZBVEVfTUVNID49IDcxMTIgYXBwZWFycyBhZGVxdWF0ZS4KKyAqICNkZWZpbmUgTk9fSU5GTkFOX0NIRUNLIGlmIHlvdSBkbyBub3Qgd2lzaCB0byBoYXZlIElORk5BTl9DSEVDSworICoJI2RlZmluZWQgYXV0b21hdGljYWxseSBvbiBJRUVFIHN5c3RlbXMuICBPbiBzdWNoIHN5c3RlbXMsCisgKgl3aGVuIElORk5BTl9DSEVDSyBpcyAjZGVmaW5lZCwgc3RydG9kIGNoZWNrcworICoJZm9yIEluZmluaXR5IGFuZCBOYU4gKGNhc2UgaW5zZW5zaXRpdmVseSkuCisgKglXaGVuIElORk5BTl9DSEVDSyBpcyAjZGVmaW5lZCBhbmQgTm9fSGV4X05hTiBpcyBub3QgI2RlZmluZWQsCisgKglzdHJ0b2RnIGFsc28gYWNjZXB0cyAoY2FzZSBpbnNlbnNpdGl2ZWx5KSBzdHJpbmdzIG9mIHRoZSBmb3JtCisgKglOYU4oeCksIHdoZXJlIHggaXMgYSBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgZGlnaXRzIChvcHRpb25hbGx5CisgKglwcmVjZWRlZCBieSAweCBvciAwWCkgYW5kIHNwYWNlczsgaWYgdGhlcmUgaXMgb25seSBvbmUgc3RyaW5nCisgKglvZiBoZXhhZGVjaW1hbCBkaWdpdHMsIGl0IGlzIHRha2VuIGZvciB0aGUgZnJhY3Rpb24gYml0cyBvZiB0aGUKKyAqCXJlc3VsdGluZyBOYU47IGlmIHRoZXJlIGFyZSB0d28gb3IgbW9yZSBzdHJpbmdzIG9mIGhleGFkZWNpbWFsCisgKglkaWdpdHMsIGVhY2ggc3RyaW5nIGlzIGFzc2lnbmVkIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBzZXF1ZW5jZQorICoJb2YgMzItYml0IHdvcmRzIG9mIGZyYWN0aW9ucyBiaXRzIChzdGFydGluZyB3aXRoIHRoZSBtb3N0CisgKglzaWduaWZpY2FudCksIHJpZ2h0LWFsaWduZWQgaW4gZWFjaCBzZXF1ZW5jZS4KKyAqCVVubGVzcyBHRFRPQV9OT05fUEVEQU5USUNfTkFOQ0hFQ0sgaXMgI2RlZmluZWQsIGlucHV0ICJOYU4oLi4uKSIKKyAqCWlzIGNvbnN1bWVkIGV2ZW4gd2hlbiAuLi4gaGFzIHRoZSB3cm9uZyBmb3JtIChpbiB3aGljaCBjYXNlIHRoZQorICoJIiguLi4pIiBpcyBjb25zdW1lZCBidXQgaWdub3JlZCkuCisgKiAjZGVmaW5lIE1VTFRJUExFX1RIUkVBRFMgaWYgdGhlIHN5c3RlbSBvZmZlcnMgcHJlZW1wdGl2ZWx5IHNjaGVkdWxlZAorICoJbXVsdGlwbGUgdGhyZWFkcy4gIEluIHRoaXMgY2FzZSwgeW91IG11c3QgcHJvdmlkZSAob3Igc3VpdGFibHkKKyAqCSNkZWZpbmUpIHR3byBsb2NrcywgYWNxdWlyZWQgYnkgQUNRVUlSRV9EVE9BX0xPQ0sobikgYW5kIGZyZWVkCisgKglieSBGUkVFX0RUT0FfTE9DSyhuKSBmb3IgbiA9IDAgb3IgMS4gIChUaGUgc2Vjb25kIGxvY2ssIGFjY2Vzc2VkCisgKglpbiBwb3c1bXVsdCwgZW5zdXJlcyBsYXp5IGV2YWx1YXRpb24gb2Ygb25seSBvbmUgY29weSBvZiBoaWdoCisgKglwb3dlcnMgb2YgNTsgb21pdHRpbmcgdGhpcyBsb2NrIHdvdWxkIGludHJvZHVjZSBhIHNtYWxsCisgKglwcm9iYWJpbGl0eSBvZiB3YXN0aW5nIG1lbW9yeSwgYnV0IHdvdWxkIG90aGVyd2lzZSBiZSBoYXJtbGVzcy4pCisgKglZb3UgbXVzdCBhbHNvIGludm9rZSBmcmVlZHRvYShzKSB0byBmcmVlIHRoZSB2YWx1ZSBzIHJldHVybmVkIGJ5CisgKglkdG9hLiAgWW91IG1heSBkbyBzbyB3aGV0aGVyIG9yIG5vdCBNVUxUSVBMRV9USFJFQURTIGlzICNkZWZpbmVkLgorICogI2RlZmluZSBJTVBSRUNJU0VfSU5FWEFDVCBpZiB5b3UgZG8gbm90IGNhcmUgYWJvdXQgdGhlIHNldHRpbmcgb2YKKyAqCXRoZSBTVFJUT0dfSW5leGFjdCBiaXRzIGluIHRoZSBzcGVjaWFsIGNhc2Ugb2YgZG9pbmcgSUVFRSBkb3VibGUKKyAqCXByZWNpc2lvbiBjb252ZXJzaW9ucyAod2hpY2ggY291bGQgYWxzbyBiZSBkb25lIGJ5IHRoZSBzdHJ0b2QgaW4KKyAqCWR0b2EuYykuCisgKiAjZGVmaW5lIE5PX0hFWF9GUCB0byBkaXNhYmxlIHJlY29nbml0aW9uIG9mIEM5eCdzIGhleGFkZWNpbWFsCisgKglmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCisgKiAjZGVmaW5lIC1ETk9fRVJSTk8gdG8gc3VwcHJlc3Mgc2V0dGluZyBlcnJubyAoaW4gc3RydG9kLmMgYW5kCisgKglzdHJ0b2RnLmMpLgorICogI2RlZmluZSBOT19TVFJJTkdfSCB0byB1c2UgcHJpdmF0ZSB2ZXJzaW9ucyBvZiBtZW1jcHkuCisgKglPbiBzb21lIEsmUiBzeXN0ZW1zLCBpdCBtYXkgYWxzbyBiZSBuZWNlc3NhcnkgdG8KKyAqCSNkZWZpbmUgREVDTEFSRV9TSVpFX1QgaW4gdGhpcyBjYXNlLgorICogI2RlZmluZSBVU0VfTE9DQUxFIHRvIHVzZSB0aGUgY3VycmVudCBsb2NhbGUncyBkZWNpbWFsX3BvaW50IHZhbHVlLgorICovCisKKyNpZm5kZWYgR0RUT0FJTVBfSF9JTkNMVURFRAorI2RlZmluZSBHRFRPQUlNUF9IX0lOQ0xVREVECisjaW5jbHVkZSAiZ2R0b2EuaCIKKyNpbmNsdWRlICJnZF9xbmFuLmgiCisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworI2luY2x1ZGUgPGZlbnYuaD4KKyNlbmRpZgorCisjaWZkZWYgREVCVUcKKyNpbmNsdWRlICJzdGRpby5oIgorI2RlZmluZSBCdWcoeCkge2ZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHgpOyBleGl0KDEpO30KKyNlbmRpZgorCisjaW5jbHVkZSAic3RkbGliLmgiCisjaW5jbHVkZSAic3RyaW5nLmgiCisKKyNpZmRlZiBLUl9oZWFkZXJzCisjZGVmaW5lIENoYXIgY2hhcgorI2Vsc2UKKyNkZWZpbmUgQ2hhciB2b2lkCisjZW5kaWYKKworI2lmZGVmIE1BTExPQworZXh0ZXJuIENoYXIgKk1BTExPQyBBTlNJKChzaXplX3QpKTsKKyNlbHNlCisjZGVmaW5lIE1BTExPQyBtYWxsb2MKKyNlbmRpZgorCisjdW5kZWYgSUVFRV9Bcml0aAorI3VuZGVmIEF2b2lkX1VuZGVyZmxvdworI2lmZGVmIElFRUVfTUM2OGsKKyNkZWZpbmUgSUVFRV9Bcml0aAorI2VuZGlmCisjaWZkZWYgSUVFRV84MDg3CisjZGVmaW5lIElFRUVfQXJpdGgKKyNlbmRpZgorCisjaW5jbHVkZSAiZXJybm8uaCIKKyNpZmRlZiBCYWRfZmxvYXRfaAorCisjaWZkZWYgSUVFRV9Bcml0aAorI2RlZmluZSBEQkxfRElHIDE1CisjZGVmaW5lIERCTF9NQVhfMTBfRVhQIDMwOAorI2RlZmluZSBEQkxfTUFYX0VYUCAxMDI0CisjZGVmaW5lIEZMVF9SQURJWCAyCisjZGVmaW5lIERCTF9NQVggMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgKKyNlbmRpZgorCisjaWZkZWYgSUJNCisjZGVmaW5lIERCTF9ESUcgMTYKKyNkZWZpbmUgREJMX01BWF8xMF9FWFAgNzUKKyNkZWZpbmUgREJMX01BWF9FWFAgNjMKKyNkZWZpbmUgRkxUX1JBRElYIDE2CisjZGVmaW5lIERCTF9NQVggNy4yMzcwMDU1NzczMzIyNjIxZSs3NQorI2VuZGlmCisKKyNpZmRlZiBWQVgKKyNkZWZpbmUgREJMX0RJRyAxNgorI2RlZmluZSBEQkxfTUFYXzEwX0VYUCAzOAorI2RlZmluZSBEQkxfTUFYX0VYUCAxMjcKKyNkZWZpbmUgRkxUX1JBRElYIDIKKyNkZWZpbmUgREJMX01BWCAxLjcwMTQxMTgzNDYwNDY5MjNlKzM4CisjZGVmaW5lIG5fYmlndGVucyAyCisjZW5kaWYKKworI2lmbmRlZiBMT05HX01BWAorI2RlZmluZSBMT05HX01BWCAyMTQ3NDgzNjQ3CisjZW5kaWYKKworI2Vsc2UgLyogaWZuZGVmIEJhZF9mbG9hdF9oICovCisjaW5jbHVkZSAiZmxvYXQuaCIKKyNlbmRpZiAvKiBCYWRfZmxvYXRfaCAqLworCisjaWZkZWYgSUVFRV9Bcml0aAorI2RlZmluZSBTY2FsZV9CaXQgMHgxMAorI2RlZmluZSBuX2JpZ3RlbnMgNQorI2VuZGlmCisKKyNpZmRlZiBJQk0KKyNkZWZpbmUgbl9iaWd0ZW5zIDMKKyNlbmRpZgorCisjaWZkZWYgVkFYCisjZGVmaW5lIG5fYmlndGVucyAyCisjZW5kaWYKKworI2lmbmRlZiBfX01BVEhfSF9fCisjaW5jbHVkZSAibWF0aC5oIgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSUVFRV84MDg3KSArIGRlZmluZWQoSUVFRV9NQzY4aykgKyBkZWZpbmVkKFZBWCkgKyBkZWZpbmVkKElCTSkgIT0gMQorRXhhY3RseSBvbmUgb2YgSUVFRV84MDg3LCBJRUVFX01DNjhrLCBWQVgsIG9yIElCTSBzaG91bGQgYmUgZGVmaW5lZC4KKyNlbmRpZgorCit0eXBlZGVmIHVuaW9uIHsgZG91YmxlIGQ7IFVMb25nIExbMl07IH0gVTsKKworI2lmZGVmIElFRUVfODA4NworI2RlZmluZSB3b3JkMCh4KSAoeCktPkxbMV0KKyNkZWZpbmUgd29yZDEoeCkgKHgpLT5MWzBdCisjZWxzZQorI2RlZmluZSB3b3JkMCh4KSAoeCktPkxbMF0KKyNkZWZpbmUgd29yZDEoeCkgKHgpLT5MWzFdCisjZW5kaWYKKyNkZWZpbmUgZHZhbCh4KSAoeCktPmQKKworLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIG9mIFN0b3JlaW5jIGlzIGFwcHJvcHJpYXRlIGZvciBNSVBTIHByb2Nlc3NvcnMuCisgKiBBbiBhbHRlcm5hdGl2ZSB0aGF0IG1pZ2h0IGJlIGJldHRlciBvbiBzb21lIG1hY2hpbmVzIGlzCisgKiAjZGVmaW5lIFN0b3JlaW5jKGEsYixjKSAoKmErKyA9IGIgPDwgMTYgfCBjICYgMHhmZmZmKQorICovCisjaWYgZGVmaW5lZChJRUVFXzgwODcpICsgZGVmaW5lZChWQVgpCisjZGVmaW5lIFN0b3JlaW5jKGEsYixjKSAoKCh1bnNpZ25lZCBzaG9ydCAqKWEpWzFdID0gKHVuc2lnbmVkIHNob3J0KWIsIFwKKygodW5zaWduZWQgc2hvcnQgKilhKVswXSA9ICh1bnNpZ25lZCBzaG9ydCljLCBhKyspCisjZWxzZQorI2RlZmluZSBTdG9yZWluYyhhLGIsYykgKCgodW5zaWduZWQgc2hvcnQgKilhKVswXSA9ICh1bnNpZ25lZCBzaG9ydCliLCBcCisoKHVuc2lnbmVkIHNob3J0ICopYSlbMV0gPSAodW5zaWduZWQgc2hvcnQpYywgYSsrKQorI2VuZGlmCisKKy8qICNkZWZpbmUgUCBEQkxfTUFOVF9ESUcgKi8KKy8qIFRlbl9wbWF4ID0gZmxvb3IoUCpsb2coMikvbG9nKDUpKSAqLworLyogQmxldGNoID0gKGhpZ2hlc3QgcG93ZXIgb2YgMiA8IERCTF9NQVhfMTBfRVhQKSAvIDE2ICovCisvKiBRdWlja19tYXggPSBmbG9vcigoUC0xKSpsb2coRkxUX1JBRElYKS9sb2coMTApIC0gMSkgKi8KKy8qIEludF9tYXggPSBmbG9vcihQKmxvZyhGTFRfUkFESVgpL2xvZygxMCkgLSAxKSAqLworCisjaWZkZWYgSUVFRV9Bcml0aAorI2RlZmluZSBFeHBfc2hpZnQgIDIwCisjZGVmaW5lIEV4cF9zaGlmdDEgMjAKKyNkZWZpbmUgRXhwX21zazEgICAgMHgxMDAwMDAKKyNkZWZpbmUgRXhwX21zazExICAgMHgxMDAwMDAKKyNkZWZpbmUgRXhwX21hc2sgIDB4N2ZmMDAwMDAKKyNkZWZpbmUgUCA1MworI2RlZmluZSBCaWFzIDEwMjMKKyNkZWZpbmUgRW1pbiAoLTEwMjIpCisjZGVmaW5lIEV4cF8xICAweDNmZjAwMDAwCisjZGVmaW5lIEV4cF8xMSAweDNmZjAwMDAwCisjZGVmaW5lIEViaXRzIDExCisjZGVmaW5lIEZyYWNfbWFzayAgMHhmZmZmZgorI2RlZmluZSBGcmFjX21hc2sxIDB4ZmZmZmYKKyNkZWZpbmUgVGVuX3BtYXggMjIKKyNkZWZpbmUgQmxldGNoIDB4MTAKKyNkZWZpbmUgQm5kcnlfbWFzayAgMHhmZmZmZgorI2RlZmluZSBCbmRyeV9tYXNrMSAweGZmZmZmCisjZGVmaW5lIExTQiAxCisjZGVmaW5lIFNpZ25fYml0IDB4ODAwMDAwMDAKKyNkZWZpbmUgTG9nMlAgMQorI2RlZmluZSBUaW55MCAwCisjZGVmaW5lIFRpbnkxIDEKKyNkZWZpbmUgUXVpY2tfbWF4IDE0CisjZGVmaW5lIEludF9tYXggMTQKKworI2lmbmRlZiBGbHRfUm91bmRzCisjaWZkZWYgRkxUX1JPVU5EUworI2RlZmluZSBGbHRfUm91bmRzIEZMVF9ST1VORFMKKyNlbHNlCisjZGVmaW5lIEZsdF9Sb3VuZHMgMQorI2VuZGlmCisjZW5kaWYgLypGbHRfUm91bmRzKi8KKworI2Vsc2UgLyogaWZuZGVmIElFRUVfQXJpdGggKi8KKyN1bmRlZiAgU3VkZGVuX1VuZGVyZmxvdworI2RlZmluZSBTdWRkZW5fVW5kZXJmbG93CisjaWZkZWYgSUJNCisjdW5kZWYgRmx0X1JvdW5kcworI2RlZmluZSBGbHRfUm91bmRzIDAKKyNkZWZpbmUgRXhwX3NoaWZ0ICAyNAorI2RlZmluZSBFeHBfc2hpZnQxIDI0CisjZGVmaW5lIEV4cF9tc2sxICAgMHgxMDAwMDAwCisjZGVmaW5lIEV4cF9tc2sxMSAgMHgxMDAwMDAwCisjZGVmaW5lIEV4cF9tYXNrICAweDdmMDAwMDAwCisjZGVmaW5lIFAgMTQKKyNkZWZpbmUgQmlhcyA2NQorI2RlZmluZSBFeHBfMSAgMHg0MTAwMDAwMAorI2RlZmluZSBFeHBfMTEgMHg0MTAwMDAwMAorI2RlZmluZSBFYml0cyA4CS8qIGV4cG9uZW50IGhhcyA3IGJpdHMsIGJ1dCA4IGlzIHRoZSByaWdodCB2YWx1ZSBpbiBiMmQgKi8KKyNkZWZpbmUgRnJhY19tYXNrICAweGZmZmZmZgorI2RlZmluZSBGcmFjX21hc2sxIDB4ZmZmZmZmCisjZGVmaW5lIEJsZXRjaCA0CisjZGVmaW5lIFRlbl9wbWF4IDIyCisjZGVmaW5lIEJuZHJ5X21hc2sgIDB4ZWZmZmZmCisjZGVmaW5lIEJuZHJ5X21hc2sxIDB4ZmZmZmZmCisjZGVmaW5lIExTQiAxCisjZGVmaW5lIFNpZ25fYml0IDB4ODAwMDAwMDAKKyNkZWZpbmUgTG9nMlAgNAorI2RlZmluZSBUaW55MCAweDEwMDAwMAorI2RlZmluZSBUaW55MSAwCisjZGVmaW5lIFF1aWNrX21heCAxNAorI2RlZmluZSBJbnRfbWF4IDE1CisjZWxzZSAvKiBWQVggKi8KKyN1bmRlZiBGbHRfUm91bmRzCisjZGVmaW5lIEZsdF9Sb3VuZHMgMQorI2RlZmluZSBFeHBfc2hpZnQgIDIzCisjZGVmaW5lIEV4cF9zaGlmdDEgNworI2RlZmluZSBFeHBfbXNrMSAgICAweDgwCisjZGVmaW5lIEV4cF9tc2sxMSAgIDB4ODAwMDAwCisjZGVmaW5lIEV4cF9tYXNrICAweDdmODAKKyNkZWZpbmUgUCA1NgorI2RlZmluZSBCaWFzIDEyOQorI2RlZmluZSBFbWluICgtMTI3KQorI2RlZmluZSBFeHBfMSAgMHg0MDgwMDAwMAorI2RlZmluZSBFeHBfMTEgMHg0MDgwCisjZGVmaW5lIEViaXRzIDgKKyNkZWZpbmUgRnJhY19tYXNrICAweDdmZmZmZgorI2RlZmluZSBGcmFjX21hc2sxIDB4ZmZmZjAwN2YKKyNkZWZpbmUgVGVuX3BtYXggMjQKKyNkZWZpbmUgQmxldGNoIDIKKyNkZWZpbmUgQm5kcnlfbWFzayAgMHhmZmZmMDA3ZgorI2RlZmluZSBCbmRyeV9tYXNrMSAweGZmZmYwMDdmCisjZGVmaW5lIExTQiAweDEwMDAwCisjZGVmaW5lIFNpZ25fYml0IDB4ODAwMAorI2RlZmluZSBMb2cyUCAxCisjZGVmaW5lIFRpbnkwIDB4ODAKKyNkZWZpbmUgVGlueTEgMAorI2RlZmluZSBRdWlja19tYXggMTUKKyNkZWZpbmUgSW50X21heCAxNQorI2VuZGlmIC8qIElCTSwgVkFYICovCisjZW5kaWYgLyogSUVFRV9Bcml0aCAqLworCisjaWZuZGVmIElFRUVfQXJpdGgKKyNkZWZpbmUgUk9VTkRfQklBU0VECisjZWxzZQorI2lmZGVmIFJPVU5EX0JJQVNFRF93aXRob3V0X1JvdW5kX1VwCisjdW5kZWYgIFJPVU5EX0JJQVNFRAorI2RlZmluZSBST1VORF9CSUFTRUQKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBSTkRfUFJPRFFVT1QKKyNkZWZpbmUgcm91bmRlZF9wcm9kdWN0KGEsYikgYSA9IHJuZF9wcm9kKGEsIGIpCisjZGVmaW5lIHJvdW5kZWRfcXVvdGllbnQoYSxiKSBhID0gcm5kX3F1b3QoYSwgYikKKyNpZmRlZiBLUl9oZWFkZXJzCitleHRlcm4gZG91YmxlIHJuZF9wcm9kKCksIHJuZF9xdW90KCk7CisjZWxzZQorZXh0ZXJuIGRvdWJsZSBybmRfcHJvZChkb3VibGUsIGRvdWJsZSksIHJuZF9xdW90KGRvdWJsZSwgZG91YmxlKTsKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgcm91bmRlZF9wcm9kdWN0KGEsYikgYSAqPSBiCisjZGVmaW5lIHJvdW5kZWRfcXVvdGllbnQoYSxiKSBhIC89IGIKKyNlbmRpZgorCisjZGVmaW5lIEJpZzAgKEZyYWNfbWFzazEgfCBFeHBfbXNrMSooREJMX01BWF9FWFArQmlhcy0xKSkKKyNkZWZpbmUgQmlnMSAweGZmZmZmZmZmCisKKyN1bmRlZiAgUGFja18xNgorI2lmbmRlZiBQYWNrXzMyCisjZGVmaW5lIFBhY2tfMzIKKyNlbmRpZgorCisjaWZkZWYgTk9fTE9OR19MT05HCisjdW5kZWYgVUxMb25nCisjaWZkZWYgSnVzdF8xNgorI3VuZGVmIFBhY2tfMzIKKyNkZWZpbmUgUGFja18xNgorLyogV2hlbiBQYWNrXzMyIGlzIG5vdCBkZWZpbmVkLCB3ZSBzdG9yZSAxNiBiaXRzIHBlciAzMi1iaXQgTG9uZy4KKyAqIFRoaXMgbWFrZXMgc29tZSBpbm5lciBsb29wcyBzaW1wbGVyIGFuZCBzb21ldGltZXMgc2F2ZXMgd29yaworICogZHVyaW5nIG11bHRpcGxpY2F0aW9ucywgYnV0IGl0IG9mdGVuIHNlZW1zIHRvIG1ha2UgdGhpbmdzIHNsaWdodGx5CisgKiBzbG93ZXIuICBIZW5jZSB0aGUgZGVmYXVsdCBpcyBub3cgdG8gc3RvcmUgMzIgYml0cyBwZXIgTG9uZy4KKyAqLworI2VuZGlmCisjZWxzZQkvKiBsb25nIGxvbmcgYXZhaWxhYmxlICovCisjaWZuZGVmIExsb25nCisjZGVmaW5lIExsb25nIGxvbmcgbG9uZworI2VuZGlmCisjaWZuZGVmIFVMTG9uZworI2RlZmluZSBVTExvbmcgdW5zaWduZWQgTGxvbmcKKyNlbmRpZgorI2VuZGlmIC8qIE5PX0xPTkdfTE9ORyAqLworCisjaWZkZWYgUGFja18zMgorI2RlZmluZSBVTGJpdHMgMzIKKyNkZWZpbmUga3NoaWZ0IDUKKyNkZWZpbmUga21hc2sgMzEKKyNkZWZpbmUgQUxMX09OIDB4ZmZmZmZmZmYKKyNlbHNlCisjZGVmaW5lIFVMYml0cyAxNgorI2RlZmluZSBrc2hpZnQgNAorI2RlZmluZSBrbWFzayAxNQorI2RlZmluZSBBTExfT04gMHhmZmZmCisjZW5kaWYKKworI2lmbmRlZiBNVUxUSVBMRV9USFJFQURTCisjZGVmaW5lIEFDUVVJUkVfRFRPQV9MT0NLKG4pCS8qbm90aGluZyovCisjZGVmaW5lIEZSRUVfRFRPQV9MT0NLKG4pCS8qbm90aGluZyovCisjZWxzZQorI2luY2x1ZGUgInRocmVhZF9wcml2YXRlLmgiCitleHRlcm4gdm9pZCAqX19kdG9hX2xvY2tzW107CisjZGVmaW5lIEFDUVVJUkVfRFRPQV9MT0NLKG4pCV9NVVRFWF9MT0NLKCZfX2R0b2FfbG9ja3Nbbl0pCisjZGVmaW5lIEZSRUVfRFRPQV9MT0NLKG4pCV9NVVRFWF9VTkxPQ0soJl9fZHRvYV9sb2Nrc1tuXSkKKyNlbmRpZgorCisjZGVmaW5lIEttYXggOQorCisgc3RydWN0CitCaWdpbnQgeworCXN0cnVjdCBCaWdpbnQgKm5leHQ7CisJaW50IGssIG1heHdkcywgc2lnbiwgd2RzOworCVVMb25nIHhbMV07CisJfTsKKworIHR5cGVkZWYgc3RydWN0IEJpZ2ludCBCaWdpbnQ7CisKKyNpZmRlZiBOT19TVFJJTkdfSAorI2lmZGVmIERFQ0xBUkVfU0laRV9UCit0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CisjZW5kaWYKK2V4dGVybiB2b2lkIG1lbWNweV9EMkEgQU5TSSgodm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3QpKTsKKyNkZWZpbmUgQmNvcHkoeCx5KSBtZW1jcHlfRDJBKCZ4LT5zaWduLCZ5LT5zaWduLHktPndkcypzaXplb2YoVUxvbmcpICsgMipzaXplb2YoaW50KSkKKyNlbHNlIC8qICFOT19TVFJJTkdfSCAqLworI2RlZmluZSBCY29weSh4LHkpIG1lbWNweSgmeC0+c2lnbiwmeS0+c2lnbix5LT53ZHMqc2l6ZW9mKFVMb25nKSArIDIqc2l6ZW9mKGludCkpCisjZW5kaWYgLyogTk9fU1RSSU5HX0ggKi8KKworI2RlZmluZSBkdG9hIF9fZHRvYQorI2RlZmluZSBnZHRvYSBfX2dkdG9hCisjZGVmaW5lIGZyZWVkdG9hIF9fZnJlZWR0b2EKKyNkZWZpbmUgc3RydG9kZyBfX3N0cnRvZGcKKyNkZWZpbmUgZ19kZGZtdCBfX2dfZGRmbXQKKyNkZWZpbmUgZ19kZm10IF9fZ19kZm10CisjZGVmaW5lIGdfZmZtdCBfX2dfZmZtdAorI2RlZmluZSBnX1FmbXQgX19nX1FmbXQKKyNkZWZpbmUgZ194Zm10IF9fZ194Zm10CisjZGVmaW5lIGdfeExmbXQgX19nX3hMZm10CisjZGVmaW5lIHN0cnRvSWQgX19zdHJ0b0lkCisjZGVmaW5lIHN0cnRvSWRkIF9fc3RydG9JZGQKKyNkZWZpbmUgc3RydG9JZiBfX3N0cnRvSWYKKyNkZWZpbmUgc3RydG9JUSBfX3N0cnRvSVEKKyNkZWZpbmUgc3RydG9JeCBfX3N0cnRvSXgKKyNkZWZpbmUgc3RydG9JeEwgX19zdHJ0b0l4TAorI2RlZmluZSBzdHJ0b3JkIF9fc3RydG9yZAorI2RlZmluZSBzdHJ0b3JkZCBfX3N0cnRvcmRkCisjZGVmaW5lIHN0cnRvcmYgX19zdHJ0b3JmCisjZGVmaW5lIHN0cnRvclEgX19zdHJ0b3JRCisjZGVmaW5lIHN0cnRvcnggX19zdHJ0b3J4CisjZGVmaW5lIHN0cnRvcnhMIF9fc3RydG9yeEwKKyNkZWZpbmUgc3RydG9kSSBfX3N0cnRvZEkKKyNkZWZpbmUgc3RydG9wZCBfX3N0cnRvcGQKKyNkZWZpbmUgc3RydG9wZGQgX19zdHJ0b3BkZAorI2RlZmluZSBzdHJ0b3BmIF9fc3RydG9wZgorI2RlZmluZSBzdHJ0b3BRIF9fc3RydG9wUQorI2RlZmluZSBzdHJ0b3B4IF9fc3RydG9weAorI2RlZmluZSBzdHJ0b3B4TCBfX3N0cnRvcHhMCisKKyNkZWZpbmUgQmFsbG9jIF9fQmFsbG9jX0QyQQorI2RlZmluZSBCZnJlZSBfX0JmcmVlX0QyQQorI2RlZmluZSBVTHRvUSBfX1VMdG9RX0QyQQorI2RlZmluZSBVTHRvZiBfX1VMdG9mX0QyQQorI2RlZmluZSBVTHRvZCBfX1VMdG9kX0QyQQorI2RlZmluZSBVTHRvZGQgX19VTHRvZGRfRDJBCisjZGVmaW5lIFVMdG94IF9fVUx0b3hfRDJBCisjZGVmaW5lIFVMdG94TCBfX1VMdG94TF9EMkEKKyNkZWZpbmUgYW55X29uIF9fYW55X29uX0QyQQorI2RlZmluZSBiMmQgX19iMmRfRDJBCisjZGVmaW5lIGJpZ3RlbnMgX19iaWd0ZW5zX0QyQQorI2RlZmluZSBjbXAgX19jbXBfRDJBCisjZGVmaW5lIGNvcHliaXRzIF9fY29weWJpdHNfRDJBCisjZGVmaW5lIGQyYiBfX2QyYl9EMkEKKyNkZWZpbmUgZGVjcmVtZW50IF9fZGVjcmVtZW50X0QyQQorI2RlZmluZSBkaWZmIF9fZGlmZl9EMkEKKyNkZWZpbmUgZHRvYV9yZXN1bHQgX19kdG9hX3Jlc3VsdF9EMkEKKyNkZWZpbmUgZ19fZm10IF9fZ19fZm10X0QyQQorI2RlZmluZSBnZXRoZXggX19nZXRoZXhfRDJBCisjZGVmaW5lIGhleGRpZyBfX2hleGRpZ19EMkEKKyNkZWZpbmUgaGV4bmFuIF9faGV4bmFuX0QyQQorI2RlZmluZSBoaTBiaXRzKHgpIF9faGkwYml0c19EMkEoKFVMb25nKSh4KSkKKyNkZWZpbmUgaGkwYml0c19EMkEgX19oaTBiaXRzX0QyQQorI2RlZmluZSBpMmIgX19pMmJfRDJBCisjZGVmaW5lIGluY3JlbWVudCBfX2luY3JlbWVudF9EMkEKKyNkZWZpbmUgbG8wYml0cyBfX2xvMGJpdHNfRDJBCisjZGVmaW5lIGxzaGlmdCBfX2xzaGlmdF9EMkEKKyNkZWZpbmUgbWF0Y2ggX19tYXRjaF9EMkEKKyNkZWZpbmUgbXVsdCBfX211bHRfRDJBCisjZGVmaW5lIG11bHRhZGQgX19tdWx0YWRkX0QyQQorI2RlZmluZSBucnZfYWxsb2MgX19ucnZfYWxsb2NfRDJBCisjZGVmaW5lIHBvdzVtdWx0IF9fcG93NW11bHRfRDJBCisjZGVmaW5lIHF1b3JlbSBfX3F1b3JlbV9EMkEKKyNkZWZpbmUgcmF0aW8gX19yYXRpb19EMkEKKyNkZWZpbmUgcnNoaWZ0IF9fcnNoaWZ0X0QyQQorI2RlZmluZSBydl9hbGxvYyBfX3J2X2FsbG9jX0QyQQorI2RlZmluZSBzMmIgX19zMmJfRDJBCisjZGVmaW5lIHNldF9vbmVzIF9fc2V0X29uZXNfRDJBCisjZGVmaW5lIHN0cmNwIF9fc3RyY3BfRDJBCisjZGVmaW5lIHN0cnRvSWcgX19zdHJ0b0lnX0QyQQorI2RlZmluZSBzdWxwIF9fc3VscF9EMkEKKyNkZWZpbmUgc3VtIF9fc3VtX0QyQQorI2RlZmluZSB0ZW5zIF9fdGVuc19EMkEKKyNkZWZpbmUgdGlueXRlbnMgX190aW55dGVuc19EMkEKKyNkZWZpbmUgdGlueXRlbnMgX190aW55dGVuc19EMkEKKyNkZWZpbmUgdHJhaWx6IF9fdHJhaWx6X0QyQQorI2RlZmluZSB1bHAgX191bHBfRDJBCisKKyBleHRlcm4gY2hhciAqZHRvYV9yZXN1bHQ7CisgZXh0ZXJuIENPTlNUIGRvdWJsZSBiaWd0ZW5zW10sIHRlbnNbXSwgdGlueXRlbnNbXTsKKyBleHRlcm4gdW5zaWduZWQgY2hhciBoZXhkaWdbXTsKKworIGV4dGVybiBCaWdpbnQgKkJhbGxvYyBBTlNJKChpbnQpKTsKKyBleHRlcm4gdm9pZCBCZnJlZSBBTlNJKChCaWdpbnQqKSk7CisgZXh0ZXJuIHZvaWQgVUx0b2YgQU5TSSgoVUxvbmcqLCBVTG9uZyosIExvbmcsIGludCkpOworIGV4dGVybiB2b2lkIFVMdG9kIEFOU0koKFVMb25nKiwgVUxvbmcqLCBMb25nLCBpbnQpKTsKKyBleHRlcm4gdm9pZCBVTHRvZGQgQU5TSSgoVUxvbmcqLCBVTG9uZyosIExvbmcsIGludCkpOworIGV4dGVybiB2b2lkIFVMdG9RIEFOU0koKFVMb25nKiwgVUxvbmcqLCBMb25nLCBpbnQpKTsKKyBleHRlcm4gdm9pZCBVTHRveCBBTlNJKChVU2hvcnQqLCBVTG9uZyosIExvbmcsIGludCkpOworIGV4dGVybiB2b2lkIFVMdG94TCBBTlNJKChVTG9uZyosIFVMb25nKiwgTG9uZywgaW50KSk7CisgZXh0ZXJuIFVMb25nIGFueV9vbiBBTlNJKChCaWdpbnQqLCBpbnQpKTsKKyBleHRlcm4gZG91YmxlIGIyZCBBTlNJKChCaWdpbnQqLCBpbnQqKSk7CisgZXh0ZXJuIGludCBjbXAgQU5TSSgoQmlnaW50KiwgQmlnaW50KikpOworIGV4dGVybiB2b2lkIGNvcHliaXRzIEFOU0koKFVMb25nKiwgaW50LCBCaWdpbnQqKSk7CisgZXh0ZXJuIEJpZ2ludCAqZDJiIEFOU0koKGRvdWJsZSwgaW50KiwgaW50KikpOworIGV4dGVybiB2b2lkIGRlY3JlbWVudCBBTlNJKChCaWdpbnQqKSk7CisgZXh0ZXJuIEJpZ2ludCAqZGlmZiBBTlNJKChCaWdpbnQqLCBCaWdpbnQqKSk7CisgZXh0ZXJuIGNoYXIgKmR0b2EgQU5TSSgoZG91YmxlIGQsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywKKwkJCWludCAqZGVjcHQsIGludCAqc2lnbiwgY2hhciAqKnJ2ZSkpOworIGV4dGVybiBjaGFyICpnX19mbXQgQU5TSSgoY2hhciosIGNoYXIqLCBjaGFyKiwgaW50LCBVTG9uZywgc2l6ZV90KSk7CisgZXh0ZXJuIGludCBnZXRoZXggQU5TSSgoQ09OU1QgY2hhcioqLCBGUEkqLCBMb25nKiwgQmlnaW50KiosIGludCkpOworIGV4dGVybiB2b2lkIGhleGRpZ19pbml0X0QyQShWb2lkKTsKKyBleHRlcm4gaW50IGhleG5hbiBBTlNJKChDT05TVCBjaGFyKiosIEZQSSosIFVMb25nKikpOworIGV4dGVybiBpbnQgaGkwYml0c19EMkEgQU5TSSgoVUxvbmcpKTsKKyBleHRlcm4gQmlnaW50ICppMmIgQU5TSSgoaW50KSk7CisgZXh0ZXJuIEJpZ2ludCAqaW5jcmVtZW50IEFOU0koKEJpZ2ludCopKTsKKyBleHRlcm4gaW50IGxvMGJpdHMgQU5TSSgoVUxvbmcqKSk7CisgZXh0ZXJuIEJpZ2ludCAqbHNoaWZ0IEFOU0koKEJpZ2ludCosIGludCkpOworIGV4dGVybiBpbnQgbWF0Y2ggQU5TSSgoQ09OU1QgY2hhcioqLCBjaGFyKikpOworIGV4dGVybiBCaWdpbnQgKm11bHQgQU5TSSgoQmlnaW50KiwgQmlnaW50KikpOworIGV4dGVybiBCaWdpbnQgKm11bHRhZGQgQU5TSSgoQmlnaW50KiwgaW50LCBpbnQpKTsKKyBleHRlcm4gY2hhciAqbnJ2X2FsbG9jIEFOU0koKGNoYXIqLCBjaGFyICoqLCBpbnQpKTsKKyBleHRlcm4gQmlnaW50ICpwb3c1bXVsdCBBTlNJKChCaWdpbnQqLCBpbnQpKTsKKyBleHRlcm4gaW50IHF1b3JlbSBBTlNJKChCaWdpbnQqLCBCaWdpbnQqKSk7CisgZXh0ZXJuIGRvdWJsZSByYXRpbyBBTlNJKChCaWdpbnQqLCBCaWdpbnQqKSk7CisgZXh0ZXJuIHZvaWQgcnNoaWZ0IEFOU0koKEJpZ2ludCosIGludCkpOworIGV4dGVybiBjaGFyICpydl9hbGxvYyBBTlNJKChpbnQpKTsKKyBleHRlcm4gQmlnaW50ICpzMmIgQU5TSSgoQ09OU1QgY2hhciosIGludCwgaW50LCBVTG9uZywgaW50KSk7CisgZXh0ZXJuIEJpZ2ludCAqc2V0X29uZXMgQU5TSSgoQmlnaW50KiwgaW50KSk7CisgZXh0ZXJuIGNoYXIgKnN0cmNwIEFOU0koKGNoYXIqLCBjb25zdCBjaGFyKikpOworIGV4dGVybiBpbnQgc3RydG9JZyBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBGUEkqLCBMb25nKiwgQmlnaW50KiosIGludCopKTsKKyBleHRlcm4gZG91YmxlIHN0cnRvZCBBTlNJKChjb25zdCBjaGFyICpzMDAsIGNoYXIgKipzZSkpOworIGV4dGVybiBCaWdpbnQgKnN1bSBBTlNJKChCaWdpbnQqLCBCaWdpbnQqKSk7CisgZXh0ZXJuIGludCB0cmFpbHogQU5TSSgoQmlnaW50KikpOworIGV4dGVybiBkb3VibGUgdWxwIEFOU0koKFUqKSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisvKgorICogTkFOX1dPUkQwIGFuZCBOQU5fV09SRDEgYXJlIG9ubHkgcmVmZXJlbmNlZCBpbiBzdHJ0b2QuYy4gIFByaW9yIHRvCisgKiAyMDA1MDExNSwgdGhleSB1c2VkIHRvIGJlIGhhcmQtd2lyZWQgaGVyZSAodG8gMHg3ZmY4MDAwMCBhbmQgMCwKKyAqIHJlc3BlY3RpdmVseSksIGJ1dCBub3cgYXJlIGRldGVybWluZWQgYnkgY29tcGlsaW5nIGFuZCBydW5uaW5nCisgKiBxbmFuLmMgdG8gZ2VuZXJhdGUgZ2RfcW5hbi5oLCB3aGljaCBzcGVjaWZpZXMgZF9RTkFOMCBhbmQgZF9RTkFOMS4KKyAqIEZvcm1lcmx5IGdkdG9haW1wLmggcmVjb21tZW5kZWQgc3VwcGx5aW5nIHN1aXRhYmxlIC1ETkFOX1dPUkQwPS4uLgorICogYW5kIC1ETkFOX1dPUkQxPS4uLiAgdmFsdWVzIGlmIG5lY2Vzc2FyeS4gIFRoaXMgc2hvdWxkIHN0aWxsIHdvcmsuCisgKiAoT24gSFAgU2VyaWVzIDcwMC84MDAgbWFjaGluZXMsIC1ETkFOX1dPUkQwPTB4N2ZmNDAwMDAgd29ya3MuKQorICovCisjaWZkZWYgSUVFRV9Bcml0aAorI2lmbmRlZiBOT19JTkZOQU5fQ0hFQ0sKKyN1bmRlZiBJTkZOQU5fQ0hFQ0sKKyNkZWZpbmUgSU5GTkFOX0NIRUNLCisjZW5kaWYKKyNpZmRlZiBJRUVFX01DNjhrCisjZGVmaW5lIF8wIDAKKyNkZWZpbmUgXzEgMQorI2lmbmRlZiBOQU5fV09SRDAKKyNkZWZpbmUgTkFOX1dPUkQwIGRfUU5BTjAKKyNlbmRpZgorI2lmbmRlZiBOQU5fV09SRDEKKyNkZWZpbmUgTkFOX1dPUkQxIGRfUU5BTjEKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgXzAgMQorI2RlZmluZSBfMSAwCisjaWZuZGVmIE5BTl9XT1JEMAorI2RlZmluZSBOQU5fV09SRDAgZF9RTkFOMQorI2VuZGlmCisjaWZuZGVmIE5BTl9XT1JEMQorI2RlZmluZSBOQU5fV09SRDEgZF9RTkFOMAorI2VuZGlmCisjZW5kaWYKKyNlbHNlCisjdW5kZWYgSU5GTkFOX0NIRUNLCisjZW5kaWYKKworI3VuZGVmIFNJCisjaWZkZWYgU3VkZGVuX1VuZGVyZmxvdworI2RlZmluZSBTSSAxCisjZWxzZQorI2RlZmluZSBTSSAwCisjZW5kaWYKKworI2VuZGlmIC8qIEdEVE9BSU1QX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9nZXRoZXguYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9nZXRoZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWNlMGZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2dldGhleC5jCkBAIC0wLDAgKzEsMzYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5OTggYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgorCisjaWZkZWYgVVNFX0xPQ0FMRQorI2luY2x1ZGUgImxvY2FsZS5oIgorI2VuZGlmCisKKyBpbnQKKyNpZmRlZiBLUl9oZWFkZXJzCitnZXRoZXgoc3AsIGZwaSwgZXhwLCBicCwgc2lnbikKKwlDT05TVCBjaGFyICoqc3A7IEZQSSAqZnBpOyBMb25nICpleHA7IEJpZ2ludCAqKmJwOyBpbnQgc2lnbjsKKyNlbHNlCitnZXRoZXgoIENPTlNUIGNoYXIgKipzcCwgRlBJICpmcGksIExvbmcgKmV4cCwgQmlnaW50ICoqYnAsIGludCBzaWduKQorI2VuZGlmCit7CisJQmlnaW50ICpiOworCUNPTlNUIHVuc2lnbmVkIGNoYXIgKmRlY3B0LCAqczAsICpzLCAqczE7CisJaW50IGJpZywgZXNpZ24sIGhhdmVkaWcsIGlydiwgaiwgaywgbiwgbjAsIG5iaXRzLCB1cCwgenJldDsKKwlVTG9uZyBMLCBsb3N0Yml0cywgKng7CisJTG9uZyBlLCBlMTsKKyNpZmRlZiBVU0VfTE9DQUxFCisJaW50IGk7CisjaWZkZWYgTk9fTE9DQUxFX0NBQ0hFCisJY29uc3QgdW5zaWduZWQgY2hhciAqZGVjaW1hbHBvaW50ID0gKHVuc2lnbmVkIGNoYXIqKWxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2ludDsKKyNlbHNlCisJY29uc3QgdW5zaWduZWQgY2hhciAqZGVjaW1hbHBvaW50OworCXN0YXRpYyB1bnNpZ25lZCBjaGFyICpkZWNpbWFscG9pbnRfY2FjaGU7CisJaWYgKCEoczAgPSBkZWNpbWFscG9pbnRfY2FjaGUpKSB7CisJCXMwID0gKHVuc2lnbmVkIGNoYXIqKWxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2ludDsKKwkJaWYgKChkZWNpbWFscG9pbnRfY2FjaGUgPSAoY2hhciopTUFMTE9DKHN0cmxlbihzMCkgKyAxKSkpIHsKKwkJCXN0cmxjcHkoZGVjaW1hbHBvaW50X2NhY2hlLCBzMCwgc3RybGVuKHMwKSArIDEpOworCQkJczAgPSBkZWNpbWFscG9pbnRfY2FjaGU7CisJCQl9CisJCX0KKwlkZWNpbWFscG9pbnQgPSBzMDsKKyNlbmRpZgorI2VuZGlmCisKKwlpZiAoIWhleGRpZ1snMCddKQorCQloZXhkaWdfaW5pdF9EMkEoKTsKKwkqYnAgPSAwOworCWhhdmVkaWcgPSAwOworCXMwID0gKihDT05TVCB1bnNpZ25lZCBjaGFyICoqKXNwICsgMjsKKwl3aGlsZShzMFtoYXZlZGlnXSA9PSAnMCcpCisJCWhhdmVkaWcrKzsKKwlzMCArPSBoYXZlZGlnOworCXMgPSBzMDsKKwlkZWNwdCA9IDA7CisJenJldCA9IDA7CisJZSA9IDA7CisJaWYgKGhleGRpZ1sqc10pCisJCWhhdmVkaWcrKzsKKwllbHNlIHsKKwkJenJldCA9IDE7CisjaWZkZWYgVVNFX0xPQ0FMRQorCQlmb3IoaSA9IDA7IGRlY2ltYWxwb2ludFtpXTsgKytpKSB7CisJCQlpZiAoc1tpXSAhPSBkZWNpbWFscG9pbnRbaV0pCisJCQkJZ290byBwY2hlY2s7CisJCQl9CisJCWRlY3B0ID0gcyArPSBpOworI2Vsc2UKKwkJaWYgKCpzICE9ICcuJykKKwkJCWdvdG8gcGNoZWNrOworCQlkZWNwdCA9ICsrczsKKyNlbmRpZgorCQlpZiAoIWhleGRpZ1sqc10pCisJCQlnb3RvIHBjaGVjazsKKwkJd2hpbGUoKnMgPT0gJzAnKQorCQkJcysrOworCQlpZiAoaGV4ZGlnWypzXSkKKwkJCXpyZXQgPSAwOworCQloYXZlZGlnID0gMTsKKwkJczAgPSBzOworCQl9CisJd2hpbGUoaGV4ZGlnWypzXSkKKwkJcysrOworI2lmZGVmIFVTRV9MT0NBTEUKKwlpZiAoKnMgPT0gKmRlY2ltYWxwb2ludCAmJiAhZGVjcHQpIHsKKwkJZm9yKGkgPSAxOyBkZWNpbWFscG9pbnRbaV07ICsraSkgeworCQkJaWYgKHNbaV0gIT0gZGVjaW1hbHBvaW50W2ldKQorCQkJCWdvdG8gcGNoZWNrOworCQkJfQorCQlkZWNwdCA9IHMgKz0gaTsKKyNlbHNlCisJaWYgKCpzID09ICcuJyAmJiAhZGVjcHQpIHsKKwkJZGVjcHQgPSArK3M7CisjZW5kaWYKKwkJd2hpbGUoaGV4ZGlnWypzXSkKKwkJCXMrKzsKKwkJfS8qfSovCisJaWYgKGRlY3B0KQorCQllID0gLSgoKExvbmcpKHMtZGVjcHQpKSA8PCAyKTsKKyBwY2hlY2s6CisJczEgPSBzOworCWJpZyA9IGVzaWduID0gMDsKKwlzd2l0Y2goKnMpIHsKKwkgIGNhc2UgJ3AnOgorCSAgY2FzZSAnUCc6CisJCXN3aXRjaCgqKytzKSB7CisJCSAgY2FzZSAnLSc6CisJCQllc2lnbiA9IDE7CisJCQkvKiBubyBicmVhayAqLworCQkgIGNhc2UgJysnOgorCQkJcysrOworCQkgIH0KKwkJaWYgKChuID0gaGV4ZGlnWypzXSkgPT0gMCB8fCBuID4gMHgxOSkgeworCQkJcyA9IHMxOworCQkJYnJlYWs7CisJCQl9CisJCWUxID0gbiAtIDB4MTA7CisJCXdoaWxlKChuID0gaGV4ZGlnWyorK3NdKSAhPTAgJiYgbiA8PSAweDE5KSB7CisJCQlpZiAoZTEgJiAweGY4MDAwMDAwKQorCQkJCWJpZyA9IDE7CisJCQllMSA9IDEwKmUxICsgbiAtIDB4MTA7CisJCQl9CisJCWlmIChlc2lnbikKKwkJCWUxID0gLWUxOworCQllICs9IGUxOworCSAgfQorCSpzcCA9IChjaGFyKilzOworCWlmICghaGF2ZWRpZykKKwkJKnNwID0gKGNoYXIqKXMwIC0gMTsKKwlpZiAoenJldCkKKwkJcmV0dXJuIFNUUlRPR19aZXJvOworCWlmIChiaWcpIHsKKwkJaWYgKGVzaWduKSB7CisJCQlzd2l0Y2goZnBpLT5yb3VuZGluZykgeworCQkJICBjYXNlIEZQSV9Sb3VuZF91cDoKKwkJCQlpZiAoc2lnbikKKwkJCQkJYnJlYWs7CisJCQkJZ290byByZXRfdGlueTsKKwkJCSAgY2FzZSBGUElfUm91bmRfZG93bjoKKwkJCQlpZiAoIXNpZ24pCisJCQkJCWJyZWFrOworCQkJCWdvdG8gcmV0X3Rpbnk7CisJCQkgIH0KKwkJCWdvdG8gcmV0ejsKKyByZXRfdGlueToKKwkJCWIgPSBCYWxsb2MoMCk7CisJCQlpZiAoYiA9PSBOVUxMKQorCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCWItPndkcyA9IDE7CisJCQliLT54WzBdID0gMTsKKwkJCWdvdG8gZHJldDsKKwkJCX0KKwkJc3dpdGNoKGZwaS0+cm91bmRpbmcpIHsKKwkJICBjYXNlIEZQSV9Sb3VuZF9uZWFyOgorCQkJZ290byBvdmZsMTsKKwkJICBjYXNlIEZQSV9Sb3VuZF91cDoKKwkJCWlmICghc2lnbikKKwkJCQlnb3RvIG92ZmwxOworCQkJZ290byByZXRfYmlnOworCQkgIGNhc2UgRlBJX1JvdW5kX2Rvd246CisJCQlpZiAoc2lnbikKKwkJCQlnb3RvIG92ZmwxOworCQkJZ290byByZXRfYmlnOworCQkgIH0KKyByZXRfYmlnOgorCQluYml0cyA9IGZwaS0+bmJpdHM7CisJCW4wID0gbiA9IG5iaXRzID4+IGtzaGlmdDsKKwkJaWYgKG5iaXRzICYga21hc2spCisJCQkrK247CisJCWZvcihqID0gbiwgayA9IDA7IGogPj49IDE7ICsrayk7CisJCSpicCA9IGIgPSBCYWxsb2Moayk7CisJCWlmICgqYnAgPT0gTlVMTCkKKwkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJYi0+d2RzID0gbjsKKwkJZm9yKGogPSAwOyBqIDwgbjA7ICsraikKKwkJCWItPnhbal0gPSBBTExfT047CisJCWlmIChuID4gbjApCisJCQliLT54W2pdID0gVUxiaXRzID4+IChVTGJpdHMgLSAobmJpdHMgJiBrbWFzaykpOworCQkqZXhwID0gZnBpLT5lbWluOworCQlyZXR1cm4gU1RSVE9HX05vcm1hbCB8IFNUUlRPR19JbmV4bG87CisJCX0KKwluID0gczEgLSBzMCAtIDE7CisJZm9yKGsgPSAwOyBuID4gKDEgPDwgKGtzaGlmdC0yKSkgLSAxOyBuID4+PSAxKQorCQlrKys7CisJYiA9IEJhbGxvYyhrKTsKKwlpZiAoYiA9PSBOVUxMKQorCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJeCA9IGItPng7CisJbiA9IDA7CisJTCA9IDA7CisjaWZkZWYgVVNFX0xPQ0FMRQorCWZvcihpID0gMDsgZGVjaW1hbHBvaW50W2krMV07ICsraSk7CisjZW5kaWYKKwl3aGlsZShzMSA+IHMwKSB7CisjaWZkZWYgVVNFX0xPQ0FMRQorCQlpZiAoKi0tczEgPT0gZGVjaW1hbHBvaW50W2ldKSB7CisJCQlzMSAtPSBpOworCQkJY29udGludWU7CisJCQl9CisjZWxzZQorCQlpZiAoKi0tczEgPT0gJy4nKQorCQkJY29udGludWU7CisjZW5kaWYKKwkJaWYgKG4gPT0gVUxiaXRzKSB7CisJCQkqeCsrID0gTDsKKwkJCUwgPSAwOworCQkJbiA9IDA7CisJCQl9CisJCUwgfD0gKGhleGRpZ1sqczFdICYgMHgwZikgPDwgbjsKKwkJbiArPSA0OworCQl9CisJKngrKyA9IEw7CisJYi0+d2RzID0gbiA9IHggLSBiLT54OworCW4gPSBVTGJpdHMqbiAtIGhpMGJpdHMoTCk7CisJbmJpdHMgPSBmcGktPm5iaXRzOworCWxvc3RiaXRzID0gMDsKKwl4ID0gYi0+eDsKKwlpZiAobiA+IG5iaXRzKSB7CisJCW4gLT0gbmJpdHM7CisJCWlmIChhbnlfb24oYixuKSkgeworCQkJbG9zdGJpdHMgPSAxOworCQkJayA9IG4gLSAxOworCQkJaWYgKHhbaz4+a3NoaWZ0XSAmIDEgPDwgKGsgJiBrbWFzaykpIHsKKwkJCQlsb3N0Yml0cyA9IDI7CisJCQkJaWYgKGsgPiAwICYmIGFueV9vbihiLGspKQorCQkJCQlsb3N0Yml0cyA9IDM7CisJCQkJfQorCQkJfQorCQlyc2hpZnQoYiwgbik7CisJCWUgKz0gbjsKKwkJfQorCWVsc2UgaWYgKG4gPCBuYml0cykgeworCQluID0gbmJpdHMgLSBuOworCQliID0gbHNoaWZ0KGIsIG4pOworCQlpZiAoYiA9PSBOVUxMKQorCQkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCQllIC09IG47CisJCXggPSBiLT54OworCQl9CisJaWYgKGUgPiBmcGktPmVtYXgpIHsKKyBvdmZsOgorCQlCZnJlZShiKTsKKyBvdmZsMToKKyNpZm5kZWYgTk9fRVJSTk8KKwkJZXJybm8gPSBFUkFOR0U7CisjZW5kaWYKKwkJcmV0dXJuIFNUUlRPR19JbmZpbml0ZSB8IFNUUlRPR19PdmVyZmxvdyB8IFNUUlRPR19JbmV4aGk7CisJCX0KKwlpcnYgPSBTVFJUT0dfTm9ybWFsOworCWlmIChlIDwgZnBpLT5lbWluKSB7CisJCWlydiA9IFNUUlRPR19EZW5vcm1hbDsKKwkJbiA9IGZwaS0+ZW1pbiAtIGU7CisJCWlmIChuID49IG5iaXRzKSB7CisJCQlzd2l0Y2ggKGZwaS0+cm91bmRpbmcpIHsKKwkJCSAgY2FzZSBGUElfUm91bmRfbmVhcjoKKwkJCQlpZiAobiA9PSBuYml0cyAmJiAobiA8IDIgfHwgYW55X29uKGIsbi0xKSkpCisJCQkJCWdvdG8gb25lX2JpdDsKKwkJCQlicmVhazsKKwkJCSAgY2FzZSBGUElfUm91bmRfdXA6CisJCQkJaWYgKCFzaWduKQorCQkJCQlnb3RvIG9uZV9iaXQ7CisJCQkJYnJlYWs7CisJCQkgIGNhc2UgRlBJX1JvdW5kX2Rvd246CisJCQkJaWYgKHNpZ24pIHsKKyBvbmVfYml0OgorCQkJCQl4WzBdID0gYi0+d2RzID0gMTsKKyBkcmV0OgorCQkJCQkqYnAgPSBiOworCQkJCQkqZXhwID0gZnBpLT5lbWluOworI2lmbmRlZiBOT19FUlJOTworCQkJCQllcnJubyA9IEVSQU5HRTsKKyNlbmRpZgorCQkJCQlyZXR1cm4gU1RSVE9HX0Rlbm9ybWFsIHwgU1RSVE9HX0luZXhoaQorCQkJCQkJfCBTVFJUT0dfVW5kZXJmbG93OworCQkJCQl9CisJCQkgIH0KKwkJCUJmcmVlKGIpOworIHJldHo6CisjaWZuZGVmIE5PX0VSUk5PCisJCQllcnJubyA9IEVSQU5HRTsKKyNlbmRpZgorCQkJcmV0dXJuIFNUUlRPR19aZXJvIHwgU1RSVE9HX0luZXhsbyB8IFNUUlRPR19VbmRlcmZsb3c7CisJCQl9CisJCWsgPSBuIC0gMTsKKwkJaWYgKGxvc3RiaXRzKQorCQkJbG9zdGJpdHMgPSAxOworCQllbHNlIGlmIChrID4gMCkKKwkJCWxvc3RiaXRzID0gYW55X29uKGIsayk7CisJCWlmICh4W2s+PmtzaGlmdF0gJiAxIDw8IChrICYga21hc2spKQorCQkJbG9zdGJpdHMgfD0gMjsKKwkJbmJpdHMgLT0gbjsKKwkJcnNoaWZ0KGIsbik7CisJCWUgPSBmcGktPmVtaW47CisJCX0KKwlpZiAobG9zdGJpdHMpIHsKKwkJdXAgPSAwOworCQlzd2l0Y2goZnBpLT5yb3VuZGluZykgeworCQkgIGNhc2UgRlBJX1JvdW5kX3plcm86CisJCQlicmVhazsKKwkJICBjYXNlIEZQSV9Sb3VuZF9uZWFyOgorCQkJaWYgKGxvc3RiaXRzICYgMgorCQkJICYmIChsb3N0Yml0cyB8IHhbMF0pICYgMSkKKwkJCQl1cCA9IDE7CisJCQlicmVhazsKKwkJICBjYXNlIEZQSV9Sb3VuZF91cDoKKwkJCXVwID0gMSAtIHNpZ247CisJCQlicmVhazsKKwkJICBjYXNlIEZQSV9Sb3VuZF9kb3duOgorCQkJdXAgPSBzaWduOworCQkgIH0KKwkJaWYgKHVwKSB7CisJCQlrID0gYi0+d2RzOworCQkJYiA9IGluY3JlbWVudChiKTsKKwkJCWlmIChiID09IE5VTEwpCisJCQkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCQkJeCA9IGItPng7CisJCQlpZiAoaXJ2ID09IFNUUlRPR19EZW5vcm1hbCkgeworCQkJCWlmIChuYml0cyA9PSBmcGktPm5iaXRzIC0gMQorCQkJCSAmJiB4W25iaXRzID4+IGtzaGlmdF0gJiAxIDw8IChuYml0cyAmIGttYXNrKSkKKwkJCQkJaXJ2ID0gIFNUUlRPR19Ob3JtYWw7CisJCQkJfQorCQkJZWxzZSBpZiAoYi0+d2RzID4gaworCQkJIHx8ICgobiA9IG5iaXRzICYga21hc2spICE9MAorCQkJICAgICAgJiYgaGkwYml0cyh4W2stMV0pIDwgMzItbikpIHsKKwkJCQlyc2hpZnQoYiwxKTsKKwkJCQlpZiAoKytlID4gZnBpLT5lbWF4KQorCQkJCQlnb3RvIG92Zmw7CisJCQkJfQorCQkJaXJ2IHw9IFNUUlRPR19JbmV4aGk7CisJCQl9CisJCWVsc2UKKwkJCWlydiB8PSBTVFJUT0dfSW5leGxvOworCQl9CisJKmJwID0gYjsKKwkqZXhwID0gZTsKKwlyZXR1cm4gaXJ2OworCX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9nbWlzYy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2dtaXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI3MGVmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9nbWlzYy5jCkBAIC0wLDAgKzEsODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OCBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRXQVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byBEYXZpZCBNLiBHYXkgKGRtZyBhdCBhY20gZG90IG9yZywKKyAqIHdpdGggIiBhdCAiIGNoYW5nZWQgYXQgIkAiIGFuZCAiIGRvdCAiIGNoYW5nZWQgdG8gIi4iKS4JKi8KKworI2luY2x1ZGUgImdkdG9haW1wLmgiCisKKyB2b2lkCisjaWZkZWYgS1JfaGVhZGVycworcnNoaWZ0KGIsIGspIEJpZ2ludCAqYjsgaW50IGs7CisjZWxzZQorcnNoaWZ0KEJpZ2ludCAqYiwgaW50IGspCisjZW5kaWYKK3sKKwlVTG9uZyAqeCwgKngxLCAqeGUsIHk7CisJaW50IG47CisKKwl4ID0geDEgPSBiLT54OworCW4gPSBrID4+IGtzaGlmdDsKKwlpZiAobiA8IGItPndkcykgeworCQl4ZSA9IHggKyBiLT53ZHM7CisJCXggKz0gbjsKKwkJaWYgKGsgJj0ga21hc2spIHsKKwkJCW4gPSBVTGJpdHMgLSBrOworCQkJeSA9ICp4KysgPj4gazsKKwkJCXdoaWxlKHggPCB4ZSkgeworCQkJCSp4MSsrID0gKHkgfCAoKnggPDwgbikpICYgQUxMX09OOworCQkJCXkgPSAqeCsrID4+IGs7CisJCQkJfQorCQkJaWYgKCgqeDEgPSB5KSAhPTApCisJCQkJeDErKzsKKwkJCX0KKwkJZWxzZQorCQkJd2hpbGUoeCA8IHhlKQorCQkJCSp4MSsrID0gKngrKzsKKwkJfQorCWlmICgoYi0+d2RzID0geDEgLSBiLT54KSA9PSAwKQorCQliLT54WzBdID0gMDsKKwl9CisKKyBpbnQKKyNpZmRlZiBLUl9oZWFkZXJzCit0cmFpbHooYikgQmlnaW50ICpiOworI2Vsc2UKK3RyYWlseihCaWdpbnQgKmIpCisjZW5kaWYKK3sKKwlVTG9uZyBMLCAqeCwgKnhlOworCWludCBuID0gMDsKKworCXggPSBiLT54OworCXhlID0geCArIGItPndkczsKKwlmb3IobiA9IDA7IHggPCB4ZSAmJiAhKng7IHgrKykKKwkJbiArPSBVTGJpdHM7CisJaWYgKHggPCB4ZSkgeworCQlMID0gKng7CisJCW4gKz0gbG8wYml0cygmTCk7CisJCX0KKwlyZXR1cm4gbjsKKwl9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvaGRfaW5pdC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2hkX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTZlMThkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2hkX2luaXQuYwpAQCAtMCwwICsxLDU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDIwMDAgYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgorCisgdW5zaWduZWQgY2hhciBoZXhkaWdbMjU2XTsKKworIHN0YXRpYyB2b2lkCisjaWZkZWYgS1JfaGVhZGVycworaHRpbml0KGgsIHMsIGluYykgdW5zaWduZWQgY2hhciAqaDsgdW5zaWduZWQgY2hhciAqczsgaW50IGluYzsKKyNlbHNlCitodGluaXQodW5zaWduZWQgY2hhciAqaCwgdW5zaWduZWQgY2hhciAqcywgaW50IGluYykKKyNlbmRpZgoreworCWludCBpLCBqOworCWZvcihpID0gMDsgKGogPSBzW2ldKSAhPTA7IGkrKykKKwkJaFtqXSA9IGkgKyBpbmM7CisJfQorCisgdm9pZAoraGV4ZGlnX2luaXRfRDJBKFZvaWQpCit7CisjZGVmaW5lIFVTQyAodW5zaWduZWQgY2hhciAqKQorCWh0aW5pdChoZXhkaWcsIFVTQyAiMDEyMzQ1Njc4OSIsIDB4MTApOworCWh0aW5pdChoZXhkaWcsIFVTQyAiYWJjZGVmIiwgMHgxMCArIDEwKTsKKwlodGluaXQoaGV4ZGlnLCBVU0MgIkFCQ0RFRiIsIDB4MTAgKyAxMCk7CisJfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2hkdG9hLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvaGR0b2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjJmNmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2hkdG9hLmMKQEAgLTAsMCArMSwzMzIgQEAKKy8qCSRPcGVuQlNEOiBoZHRvYS5jLHYgMS4yIDIwMDkvMTAvMTYgMTI6MTU6MDMgbWFydHluYXMgRXhwICQJKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvaWVlZS5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiZ2R0b2FpbXAuaCIKKworLyogU3RyaW5ncyB2YWx1ZXMgdXNlZCBieSBkdG9hKCkgKi8KKyNkZWZpbmUJSU5GU1RSCSJJbmZpbml0eSIKKyNkZWZpbmUJTkFOU1RSCSJOYU4iCisKKyNkZWZpbmUJREJMX0FESgkJKERCTF9NQVhfRVhQIC0gMiArICgoREJMX01BTlRfRElHIC0gMSkgJSA0KSkKKyNkZWZpbmUJTERCTF9BREoJKExEQkxfTUFYX0VYUCAtIDIgKyAoKExEQkxfTUFOVF9ESUcgLSAxKSAlIDQpKQorCisvKgorICogUm91bmQgdXAgdGhlIGdpdmVuIGRpZ2l0IHN0cmluZy4gIElmIHRoZSBkaWdpdCBzdHJpbmcgaXMgZmZmLi4uZiwKKyAqIHRoaXMgcHJvY2VkdXJlIHNldHMgaXQgdG8gMTAwLi4uMCBhbmQgcmV0dXJucyAxIHRvIGluZGljYXRlIHRoYXQKKyAqIHRoZSBleHBvbmVudCBuZWVkcyB0byBiZSBidW1wZWQuICBPdGhlcndpc2UsIDAgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbnQKK3JvdW5kdXAoY2hhciAqczAsIGludCBuZGlnaXRzKQoreworCWNoYXIgKnM7CisKKwlmb3IgKHMgPSBzMCArIG5kaWdpdHMgLSAxOyAqcyA9PSAweGY7IHMtLSkgeworCQlpZiAocyA9PSBzMCkgeworCQkJKnMgPSAxOworCQkJcmV0dXJuICgxKTsKKwkJfQorCQkqcyA9IDA7CisJfQorCSsrKnM7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIFJvdW5kIHRoZSBnaXZlbiBkaWdpdCBzdHJpbmcgdG8gbmRpZ2l0cyBkaWdpdHMgYWNjb3JkaW5nIHRvIHRoZQorICogY3VycmVudCByb3VuZGluZyBtb2RlLiAgTm90ZSB0aGF0IHRoaXMgY291bGQgcHJvZHVjZSBhIHN0cmluZyB3aG9zZQorICogdmFsdWUgaXMgbm90IHJlcHJlc2VudGFibGUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgZmxvYXRpbmctcG9pbnQKKyAqIHR5cGUuICBUaGUgZXhwb25lbnQgcG9pbnRlZCB0byBieSBkZWNwdCBpcyBhZGp1c3RlZCBpZiBuZWNlc3NhcnkuCisgKi8KK3N0YXRpYyB2b2lkCitkb3JvdW5kaW5nKGNoYXIgKnMwLCBpbnQgbmRpZ2l0cywgaW50IHNpZ24sIGludCAqZGVjcHQpCit7CisJaW50IGFkanVzdCA9IDA7CS8qIGRvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZSBleHBvbmVudD8gKi8KKworCXN3aXRjaCAoRkxUX1JPVU5EUykgeworCWNhc2UgMDoJCS8qIHRvd2FyZCB6ZXJvICovCisJZGVmYXVsdDoJLyogaW1wbGVtZW50YXRpb24tZGVmaW5lZCAqLworCQlicmVhazsKKwljYXNlIDE6CQkvKiB0byBuZWFyZXN0LCBoYWxmd2F5IHJvdW5kcyB0byBldmVuICovCisJCWlmICgoczBbbmRpZ2l0c10gPiA4KSB8fAorCQkgICAgKHMwW25kaWdpdHNdID09IDggJiYgczBbbmRpZ2l0cyArIDFdICYgMSkpCisJCQlhZGp1c3QgPSByb3VuZHVwKHMwLCBuZGlnaXRzKTsKKwkJYnJlYWs7CisJY2FzZSAyOgkJLyogdG93YXJkICtpbmYgKi8KKwkJaWYgKHNpZ24gPT0gMCkKKwkJCWFkanVzdCA9IHJvdW5kdXAoczAsIG5kaWdpdHMpOworCQlicmVhazsKKwljYXNlIDM6CQkvKiB0b3dhcmQgLWluZiAqLworCQlpZiAoc2lnbiAhPSAwKQorCQkJYWRqdXN0ID0gcm91bmR1cChzMCwgbmRpZ2l0cyk7CisJCWJyZWFrOworCX0KKworCWlmIChhZGp1c3QpCisJCSpkZWNwdCArPSA0OworfQorCisvKgorICogVGhpcyBwcm9jZWR1cmUgY29udmVydHMgYSBkb3VibGUtcHJlY2lzaW9uIG51bWJlciBpbiBJRUVFIGZvcm1hdAorICogaW50byBhIHN0cmluZyBvZiBoZXhhZGVjaW1hbCBkaWdpdHMgYW5kIGFuIGV4cG9uZW50IG9mIDIuICBJdHMKKyAqIGJlaGF2aW9yIGlzIGJ1Zy1mb3ItYnVnIGNvbXBhdGlibGUgd2l0aCBkdG9hKCkgaW4gbW9kZSAyLCB3aXRoIHRoZQorICogZm9sbG93aW5nIGV4Y2VwdGlvbnM6CisgKgorICogLSBBbiBuZGlnaXRzIDwgMCBjYXVzZXMgaXQgdG8gdXNlIGFzIG1hbnkgZGlnaXRzIGFzIG5lY2Vzc2FyeSB0bworICogICByZXByZXNlbnQgdGhlIG51bWJlciBleGFjdGx5LgorICogLSBUaGUgYWRkaXRpb25hbCB4ZGlncyBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gZWl0aGVyIHRoZSBzdHJpbmcKKyAqICAgIjAxMjM0NTY3ODlBQkNERUYiIG9yIHRoZSBzdHJpbmcgIjAxMjM0NTY3ODlhYmNkZWYiLCBkZXBlbmRpbmcgb24KKyAqICAgd2hpY2ggY2FzZSBpcyBkZXNpcmVkLgorICogLSBUaGlzIHJvdXRpbmUgZG9lcyBub3QgcmVwZWF0IGR0b2EncyBtaXN0YWtlIG9mIHNldHRpbmcgZGVjcHQKKyAqICAgdG8gOTk5OSBpbiB0aGUgY2FzZSBvZiBhbiBpbmZpbml0eSBvciBOYU4uICBJTlRfTUFYIGlzIHVzZWQKKyAqICAgZm9yIHRoaXMgcHVycG9zZSBpbnN0ZWFkLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgQzk5IHN0YW5kYXJkIGRvZXMgbm90IHNwZWNpZnkgd2hhdCB0aGUgbGVhZGluZyBkaWdpdAorICogc2hvdWxkIGJlIGZvciBub24temVybyBudW1iZXJzLiAgRm9yIGluc3RhbmNlLCAweDEuM3AzIGlzIHRoZSBzYW1lCisgKiBhcyAweDIuNnAyIGlzIHRoZSBzYW1lIGFzIDB4NC5jcDMuICBUaGlzIGltcGxlbWVudGF0aW9uIGNob29zZXMgdGhlCisgKiBmaXJzdCBkaWdpdCBzbyB0aGF0IHN1YnNlcXVlbnQgZGlnaXRzIGFyZSBhbGlnbmVkIG9uIG5pYmJsZQorICogYm91bmRhcmllcyAoYmVmb3JlIHJvdW5kaW5nKS4KKyAqCisgKiBJbnB1dHM6CWQsIHhkaWdzLCBuZGlnaXRzCisgKiBPdXRwdXRzOglkZWNwdCwgc2lnbiwgcnZlCisgKi8KK2NoYXIgKgorX19oZHRvYShkb3VibGUgZCwgY29uc3QgY2hhciAqeGRpZ3MsIGludCBuZGlnaXRzLCBpbnQgKmRlY3B0LCBpbnQgKnNpZ24sCisgICAgY2hhciAqKnJ2ZSkKK3sKKwlzdGF0aWMgY29uc3QgaW50IHNpZ2ZpZ3MgPSAoREJMX01BTlRfRElHICsgMykgLyA0OworCXN0cnVjdCBpZWVlX2RvdWJsZSAqcCA9IChzdHJ1Y3QgaWVlZV9kb3VibGUgKikmZDsKKwljaGFyICpzLCAqczA7CisJaW50IGJ1ZnNpemU7CisKKwkqc2lnbiA9IHAtPmRibF9zaWduOworCisJc3dpdGNoIChmcGNsYXNzaWZ5KGQpKSB7CisJY2FzZSBGUF9OT1JNQUw6CisJCSpkZWNwdCA9IHAtPmRibF9leHAgLSBEQkxfQURKOworCQlicmVhazsKKwljYXNlIEZQX1pFUk86CisJCSpkZWNwdCA9IDE7CisJCXJldHVybiAobnJ2X2FsbG9jKCIwIiwgcnZlLCAxKSk7CisJY2FzZSBGUF9TVUJOT1JNQUw6CisJCWQgKj0gMHgxcDUxNDsKKwkJKmRlY3B0ID0gcC0+ZGJsX2V4cCAtICg1MTQgKyBEQkxfQURKKTsKKwkJYnJlYWs7CisJY2FzZSBGUF9JTkZJTklURToKKwkJKmRlY3B0ID0gSU5UX01BWDsKKwkJcmV0dXJuIChucnZfYWxsb2MoSU5GU1RSLCBydmUsIHNpemVvZihJTkZTVFIpIC0gMSkpOworCWNhc2UgRlBfTkFOOgorCQkqZGVjcHQgPSBJTlRfTUFYOworCQlyZXR1cm4gKG5ydl9hbGxvYyhOQU5TVFIsIHJ2ZSwgc2l6ZW9mKE5BTlNUUikgLSAxKSk7CisJZGVmYXVsdDoKKwkJYWJvcnQoKTsKKwl9CisKKwkvKiBGUF9OT1JNQUwgb3IgRlBfU1VCTk9STUFMICovCisKKwlpZiAobmRpZ2l0cyA9PSAwKQkJLyogZHRvYSgpIGNvbXBhdGliaWxpdHkgKi8KKwkJbmRpZ2l0cyA9IDE7CisKKwkvKgorCSAqIEZvciBzaW1wbGljaXR5LCB3ZSBnZW5lcmF0ZSBhbGwgdGhlIGRpZ2l0cyBldmVuIGlmIHRoZQorCSAqIGNhbGxlciBoYXMgcmVxdWVzdGVkIGZld2VyLgorCSAqLworCWJ1ZnNpemUgPSAoc2lnZmlncyA+IG5kaWdpdHMpID8gc2lnZmlncyA6IG5kaWdpdHM7CisJczAgPSBydl9hbGxvYyhidWZzaXplKTsKKwlpZiAoczAgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworCS8qCisJICogV2Ugd29yayBmcm9tIHJpZ2h0IHRvIGxlZnQsIGZpcnN0IGFkZGluZyBhbnkgcmVxdWVzdGVkIHplcm8KKwkgKiBwYWRkaW5nLCB0aGVuIHRoZSBsZWFzdCBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZQorCSAqIG1hbnRpc3NhLCBmb2xsb3dlZCBieSB0aGUgbW9zdCBzaWduaWZpY2FudC4gIFRoZSBidWZmZXIgaXMKKwkgKiBmaWxsZWQgd2l0aCB0aGUgYnl0ZSB2YWx1ZXMgMHgwIHRocm91Z2ggMHhmLCB3aGljaCBhcmUKKwkgKiBjb252ZXJ0ZWQgdG8geGRpZ3NbMHgwXSB0aHJvdWdoIHhkaWdzWzB4Zl0gYWZ0ZXIgdGhlCisJICogcm91bmRpbmcgcGhhc2UuCisJICovCisJZm9yIChzID0gczAgKyBidWZzaXplIC0gMTsgcyA+IHMwICsgc2lnZmlncyAtIDE7IHMtLSkKKwkJKnMgPSAwOworCWZvciAoOyBzID4gczAgKyBzaWdmaWdzIC0gKERCTF9GUkFDTEJJVFMgLyA0KSAtIDEgJiYgcyA+IHMwOyBzLS0pIHsKKwkJKnMgPSBwLT5kYmxfZnJhY2wgJiAweGY7CisJCXAtPmRibF9mcmFjbCA+Pj0gNDsKKwl9CisJZm9yICg7IHMgPiBzMDsgcy0tKSB7CisJCSpzID0gcC0+ZGJsX2ZyYWNoICYgMHhmOworCQlwLT5kYmxfZnJhY2ggPj49IDQ7CisJfQorCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIHNuYXJmZWQgYWxsIHRoZSBiaXRzIGluIHRoZQorCSAqIG1hbnRpc3NhLCB3aXRoIHRoZSBwb3NzaWJsZSBleGNlcHRpb24gb2YgdGhlIGhpZ2hlc3Qtb3JkZXIKKwkgKiAocGFydGlhbCkgbmliYmxlLCB3aGljaCBpcyBkZWFsdCB3aXRoIGJ5IHRoZSBuZXh0CisJICogc3RhdGVtZW50LiAgV2UgYWxzbyB0YWNrIG9uIHRoZSBpbXBsaWNpdCBub3JtYWxpemF0aW9uIGJpdC4KKwkgKi8KKwkqcyA9IHAtPmRibF9mcmFjaCB8ICgxVSA8PCAoKERCTF9NQU5UX0RJRyAtIDEpICUgNCkpOworCisJLyogSWYgbmRpZ2l0cyA8IDAsIHdlIGFyZSBleHBlY3RlZCB0byBhdXRvLXNpemUgdGhlIHByZWNpc2lvbi4gKi8KKwlpZiAobmRpZ2l0cyA8IDApIHsKKwkJZm9yIChuZGlnaXRzID0gc2lnZmlnczsgczBbbmRpZ2l0cyAtIDFdID09IDA7IG5kaWdpdHMtLSkKKwkJCTsKKwl9CisKKwlpZiAoc2lnZmlncyA+IG5kaWdpdHMgJiYgczBbbmRpZ2l0c10gIT0gMCkKKwkJZG9yb3VuZGluZyhzMCwgbmRpZ2l0cywgcC0+ZGJsX3NpZ24sIGRlY3B0KTsKKworCXMgPSBzMCArIG5kaWdpdHM7CisJaWYgKHJ2ZSAhPSBOVUxMKQorCQkqcnZlID0gczsKKwkqcy0tID0gJ1wwJzsKKwlmb3IgKDsgcyA+PSBzMDsgcy0tKQorCQkqcyA9IHhkaWdzWyh1bnNpZ25lZCBpbnQpKnNdOworCisJcmV0dXJuIChzMCk7Cit9CisKKyNpZiAoTERCTF9NQU5UX0RJRyA+IERCTF9NQU5UX0RJRykKKworLyoKKyAqIFRoaXMgaXMgdGhlIGxvbmcgZG91YmxlIHZlcnNpb24gb2YgX19oZHRvYSgpLgorICovCitjaGFyICoKK19faGxkdG9hKGxvbmcgZG91YmxlIGUsIGNvbnN0IGNoYXIgKnhkaWdzLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwgaW50ICpzaWduLAorICAgIGNoYXIgKipydmUpCit7CisJc3RhdGljIGNvbnN0IGludCBzaWdmaWdzID0gKExEQkxfTUFOVF9ESUcgKyAzKSAvIDQ7CisJc3RydWN0IGllZWVfZXh0ICpwID0gKHN0cnVjdCBpZWVlX2V4dCAqKSZlOworCWNoYXIgKnMsICpzMDsKKwlpbnQgYnVmc2l6ZTsKKworCSpzaWduID0gcC0+ZXh0X3NpZ247CisKKwlzd2l0Y2ggKGZwY2xhc3NpZnkoZSkpIHsKKwljYXNlIEZQX05PUk1BTDoKKwkJKmRlY3B0ID0gcC0+ZXh0X2V4cCAtIExEQkxfQURKOworCQlicmVhazsKKwljYXNlIEZQX1pFUk86CisJCSpkZWNwdCA9IDE7CisJCXJldHVybiAobnJ2X2FsbG9jKCIwIiwgcnZlLCAxKSk7CisJY2FzZSBGUF9TVUJOT1JNQUw6CisJCWUgKj0gMHgxcDUxNEw7CisJCSpkZWNwdCA9IHAtPmV4dF9leHAgLSAoNTE0ICsgTERCTF9BREopOworCQlicmVhazsKKwljYXNlIEZQX0lORklOSVRFOgorCQkqZGVjcHQgPSBJTlRfTUFYOworCQlyZXR1cm4gKG5ydl9hbGxvYyhJTkZTVFIsIHJ2ZSwgc2l6ZW9mKElORlNUUikgLSAxKSk7CisJY2FzZSBGUF9OQU46CisJCSpkZWNwdCA9IElOVF9NQVg7CisJCXJldHVybiAobnJ2X2FsbG9jKE5BTlNUUiwgcnZlLCBzaXplb2YoTkFOU1RSKSAtIDEpKTsKKwlkZWZhdWx0OgorCQlhYm9ydCgpOworCX0KKworCS8qIEZQX05PUk1BTCBvciBGUF9TVUJOT1JNQUwgKi8KKworCWlmIChuZGlnaXRzID09IDApCQkvKiBkdG9hKCkgY29tcGF0aWJpbGl0eSAqLworCQluZGlnaXRzID0gMTsKKworCS8qCisJICogRm9yIHNpbXBsaWNpdHksIHdlIGdlbmVyYXRlIGFsbCB0aGUgZGlnaXRzIGV2ZW4gaWYgdGhlCisJICogY2FsbGVyIGhhcyByZXF1ZXN0ZWQgZmV3ZXIuCisJICovCisJYnVmc2l6ZSA9IChzaWdmaWdzID4gbmRpZ2l0cykgPyBzaWdmaWdzIDogbmRpZ2l0czsKKwlzMCA9IHJ2X2FsbG9jKGJ1ZnNpemUpOworCWlmIChzMCA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJLyoKKwkgKiBXZSB3b3JrIGZyb20gcmlnaHQgdG8gbGVmdCwgZmlyc3QgYWRkaW5nIGFueSByZXF1ZXN0ZWQgemVybworCSAqIHBhZGRpbmcsIHRoZW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IHBvcnRpb24gb2YgdGhlCisJICogbWFudGlzc2EsIGZvbGxvd2VkIGJ5IHRoZSBtb3N0IHNpZ25pZmljYW50LiAgVGhlIGJ1ZmZlciBpcworCSAqIGZpbGxlZCB3aXRoIHRoZSBieXRlIHZhbHVlcyAweDAgdGhyb3VnaCAweGYsIHdoaWNoIGFyZQorCSAqIGNvbnZlcnRlZCB0byB4ZGlnc1sweDBdIHRocm91Z2ggeGRpZ3NbMHhmXSBhZnRlciB0aGUKKwkgKiByb3VuZGluZyBwaGFzZS4KKwkgKi8KKwlmb3IgKHMgPSBzMCArIGJ1ZnNpemUgLSAxOyBzID4gczAgKyBzaWdmaWdzIC0gMTsgcy0tKQorCQkqcyA9IDA7CisJZm9yICg7IHMgPiBzMCArIHNpZ2ZpZ3MgLSAoRVhUX0ZSQUNMQklUUyAvIDQpIC0gMSAmJiBzID4gczA7IHMtLSkgeworCQkqcyA9IHAtPmV4dF9mcmFjbCAmIDB4ZjsKKwkJcC0+ZXh0X2ZyYWNsID4+PSA0OworCX0KKyNpZmRlZiBFWFRfRlJBQ0hNQklUUworCWZvciAoOyBzID4gczA7IHMtLSkgeworCQkqcyA9IHAtPmV4dF9mcmFjaG0gJiAweGY7CisJCXAtPmV4dF9mcmFjaG0gPj49IDQ7CisJfQorI2VuZGlmCisjaWZkZWYgRVhUX0ZSQUNMTUJJVFMKKwlmb3IgKDsgcyA+IHMwOyBzLS0pIHsKKwkJKnMgPSBwLT5leHRfZnJhY2xtICYgMHhmOworCQlwLT5leHRfZnJhY2xtID4+PSA0OworCX0KKyNlbmRpZgorCWZvciAoOyBzID4gczA7IHMtLSkgeworCQkqcyA9IHAtPmV4dF9mcmFjaCAmIDB4ZjsKKwkJcC0+ZXh0X2ZyYWNoID4+PSA0OworCX0KKworCS8qCisJICogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBzbmFyZmVkIGFsbCB0aGUgYml0cyBpbiB0aGUKKwkgKiBtYW50aXNzYSwgd2l0aCB0aGUgcG9zc2libGUgZXhjZXB0aW9uIG9mIHRoZSBoaWdoZXN0LW9yZGVyCisJICogKHBhcnRpYWwpIG5pYmJsZSwgd2hpY2ggaXMgZGVhbHQgd2l0aCBieSB0aGUgbmV4dAorCSAqIHN0YXRlbWVudC4gIFdlIGFsc28gdGFjayBvbiB0aGUgaW1wbGljaXQgbm9ybWFsaXphdGlvbiBiaXQuCisJICovCisJKnMgPSBwLT5leHRfZnJhY2ggfCAoMVUgPDwgKChMREJMX01BTlRfRElHIC0gMSkgJSA0KSk7CisKKwkvKiBJZiBuZGlnaXRzIDwgMCwgd2UgYXJlIGV4cGVjdGVkIHRvIGF1dG8tc2l6ZSB0aGUgcHJlY2lzaW9uLiAqLworCWlmIChuZGlnaXRzIDwgMCkgeworCQlmb3IgKG5kaWdpdHMgPSBzaWdmaWdzOyBzMFtuZGlnaXRzIC0gMV0gPT0gMDsgbmRpZ2l0cy0tKQorCQkJOworCX0KKworCWlmIChzaWdmaWdzID4gbmRpZ2l0cyAmJiBzMFtuZGlnaXRzXSAhPSAwKQorCQlkb3JvdW5kaW5nKHMwLCBuZGlnaXRzLCBwLT5leHRfc2lnbiwgZGVjcHQpOworCisJcyA9IHMwICsgbmRpZ2l0czsKKwlpZiAocnZlICE9IE5VTEwpCisJCSpydmUgPSBzOworCSpzLS0gPSAnXDAnOworCWZvciAoOyBzID49IHMwOyBzLS0pCisJCSpzID0geGRpZ3NbKHVuc2lnbmVkIGludCkqc107CisKKwlyZXR1cm4gKHMwKTsKK30KKworI2Vsc2UJLyogKExEQkxfTUFOVF9ESUcgPT0gREJMX01BTlRfRElHKSAqLworCitjaGFyICoKK19faGxkdG9hKGxvbmcgZG91YmxlIGUsIGNvbnN0IGNoYXIgKnhkaWdzLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwgaW50ICpzaWduLAorICAgIGNoYXIgKipydmUpCit7CisJcmV0dXJuIChfX2hkdG9hKChkb3VibGUpZSwgeGRpZ3MsIG5kaWdpdHMsIGRlY3B0LCBzaWduLCBydmUpKTsKK30KKworI2VuZGlmCS8qIChMREJMX01BTlRfRElHID09IERCTF9NQU5UX0RJRykgKi8KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9oZXhuYW4uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9oZXhuYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDQzNzIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2hleG5hbi5jCkBAIC0wLDAgKzEsMTUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDIwMDAgYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgorCisgc3RhdGljIHZvaWQKKyNpZmRlZiBLUl9oZWFkZXJzCitMX3NoaWZ0KHgsIHgxLCBpKSBVTG9uZyAqeDsgVUxvbmcgKngxOyBpbnQgaTsKKyNlbHNlCitMX3NoaWZ0KFVMb25nICp4LCBVTG9uZyAqeDEsIGludCBpKQorI2VuZGlmCit7CisJaW50IGo7CisKKwlpID0gOCAtIGk7CisJaSA8PD0gMjsKKwlqID0gVUxiaXRzIC0gaTsKKwlkbyB7CisJCSp4IHw9IHhbMV0gPDwgajsKKwkJeFsxXSA+Pj0gaTsKKwkJfSB3aGlsZSgrK3ggPCB4MSk7CisJfQorCisgaW50CisjaWZkZWYgS1JfaGVhZGVycworaGV4bmFuKHNwLCBmcGksIHgwKQorCUNPTlNUIGNoYXIgKipzcDsgRlBJICpmcGk7IFVMb25nICp4MDsKKyNlbHNlCitoZXhuYW4oIENPTlNUIGNoYXIgKipzcCwgRlBJICpmcGksIFVMb25nICp4MCkKKyNlbmRpZgoreworCVVMb25nIGMsIGgsICp4LCAqeDEsICp4ZTsKKwlDT05TVCBjaGFyICpzOworCWludCBoYXZlZGlnLCBoZDAsIGksIG5iaXRzOworCisJaWYgKCFoZXhkaWdbJzAnXSkKKwkJaGV4ZGlnX2luaXRfRDJBKCk7CisJbmJpdHMgPSBmcGktPm5iaXRzOworCXggPSB4MCArIChuYml0cyA+PiBrc2hpZnQpOworCWlmIChuYml0cyAmIGttYXNrKQorCQl4Kys7CisJKi0teCA9IDA7CisJeDEgPSB4ZSA9IHg7CisJaGF2ZWRpZyA9IGhkMCA9IGkgPSAwOworCXMgPSAqc3A7CisJLyogYWxsb3cgb3B0aW9uYWwgaW5pdGlhbCAweCBvciAwWCAqLworCXdoaWxlKChjID0gKihDT05TVCB1bnNpZ25lZCBjaGFyKikocysxKSkgJiYgYyA8PSAnICcpCisJCSsrczsKKwlpZiAoc1sxXSA9PSAnMCcgJiYgKHNbMl0gPT0gJ3gnIHx8IHNbMl0gPT0gJ1gnKQorCSAmJiAqKENPTlNUIHVuc2lnbmVkIGNoYXIqKShzKzMpID4gJyAnKQorCQlzICs9IDI7CisJd2hpbGUoKGMgPSAqKENPTlNUIHVuc2lnbmVkIGNoYXIqKSsrcykpIHsKKwkJaWYgKCEoaCA9IGhleGRpZ1tjXSkpIHsKKwkJCWlmIChjIDw9ICcgJykgeworCQkJCWlmIChoZDAgPCBoYXZlZGlnKSB7CisJCQkJCWlmICh4IDwgeDEgJiYgaSA8IDgpCisJCQkJCQlMX3NoaWZ0KHgsIHgxLCBpKTsKKwkJCQkJaWYgKHggPD0geDApIHsKKwkJCQkJCWkgPSA4OworCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCWhkMCA9IGhhdmVkaWc7CisJCQkJCSotLXggPSAwOworCQkJCQl4MSA9IHg7CisJCQkJCWkgPSAwOworCQkJCQl9CisJCQkJd2hpbGUoKihDT05TVCB1bnNpZ25lZCBjaGFyKikocysxKSA8PSAnICcpCisJCQkJCSsrczsKKwkJCQlpZiAoc1sxXSA9PSAnMCcgJiYgKHNbMl0gPT0gJ3gnIHx8IHNbMl0gPT0gJ1gnKQorCQkJCSAmJiAqKENPTlNUIHVuc2lnbmVkIGNoYXIqKShzKzMpID4gJyAnKQorCQkJCQlzICs9IDI7CisJCQkJY29udGludWU7CisJCQkJfQorCQkJaWYgKC8qKCovIGMgPT0gJyknICYmIGhhdmVkaWcpIHsKKwkJCQkqc3AgPSBzICsgMTsKKwkJCQlicmVhazsKKwkJCQl9CisjaWZuZGVmIEdEVE9BX05PTl9QRURBTlRJQ19OQU5DSEVDSworCQkJZG8geworCQkJCWlmICgvKigqLyBjID09ICcpJykgeworCQkJCQkqc3AgPSBzICsgMTsKKwkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9IHdoaWxlKChjID0gKisrcykpOworI2VuZGlmCisJCQlyZXR1cm4gU1RSVE9HX05hTjsKKwkJCX0KKwkJaGF2ZWRpZysrOworCQlpZiAoKytpID4gOCkgeworCQkJaWYgKHggPD0geDApCisJCQkJY29udGludWU7CisJCQlpID0gMTsKKwkJCSotLXggPSAwOworCQkJfQorCQkqeCA9ICgqeCA8PCA0KSB8IChoICYgMHhmKTsKKwkJfQorCWlmICghaGF2ZWRpZykKKwkJcmV0dXJuIFNUUlRPR19OYU47CisJaWYgKHggPCB4MSAmJiBpIDwgOCkKKwkJTF9zaGlmdCh4LCB4MSwgaSk7CisJaWYgKHggPiB4MCkgeworCQl4MSA9IHgwOworCQlkbyAqeDErKyA9ICp4Kys7CisJCQl3aGlsZSh4IDw9IHhlKTsKKwkJZG8gKngxKysgPSAwOworCQkJd2hpbGUoeDEgPD0geGUpOworCQl9CisJZWxzZSB7CisJCS8qIHRydW5jYXRlIGhpZ2gtb3JkZXIgd29yZCBpZiBuZWNlc3NhcnkgKi8KKwkJaWYgKCAoaSA9IG5iaXRzICYgKFVMYml0cy0xKSkgIT0wKQorCQkJKnhlICY9ICgoVUxvbmcpMHhmZmZmZmZmZikgPj4gKFVMYml0cyAtIGkpOworCQl9CisJZm9yKHgxID0geGU7OyAtLXgxKSB7CisJCWlmICgqeDEgIT0gMCkKKwkJCWJyZWFrOworCQlpZiAoeDEgPT0geDApIHsKKwkJCSp4MSA9IDE7CisJCQlicmVhazsKKwkJCX0KKwkJfQorCXJldHVybiBTVFJUT0dfTmFOYml0czsKKwl9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvbGR0b2EuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9sZHRvYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5M2Q3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvbGR0b2EuYwpAQCAtMCwwICsxLDEyNCBAQAorLyoJJE9wZW5CU0Q6IGxkdG9hLmMsdiAxLjEgMjAwOC8wOS8wNyAyMDozNjowOCBtYXJ0eW5hcyBFeHAgJAkqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZuZGVmIF9fdmF4X18KKyNpbmNsdWRlIDxtYWNoaW5lL2llZWUuaD4KKyNlbmRpZiAvKiAhX192YXhfXyAqLworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAiZ2R0b2FpbXAuaCIKKworI2lmIChMREJMX01BTlRfRElHID4gREJMX01BTlRfRElHKQorCisvKgorICogbGR0b2EoKSBpcyBhIHdyYXBwZXIgZm9yIGdkdG9hKCkgdGhhdCBtYWtlcyBpdCBzbWVsbCBsaWtlIGR0b2EoKSwKKyAqIGV4Y2VwdCB0aGF0IHRoZSBmbG9hdGluZyBwb2ludCBhcmd1bWVudCBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlLgorICogV2hlbiBkdG9hKCkgaXMgcGFzc2VkIGEgTmFOIG9yIGluZmluaXR5LCBpdCBzZXRzIGV4cHQgdG8gOTk5OS4KKyAqIEhvd2V2ZXIsIGEgbG9uZyBkb3VibGUgY291bGQgaGF2ZSBhIHZhbGlkIGV4cG9uZW50IG9mIDk5OTksIHNvIHdlCisgKiB1c2UgSU5UX01BWCBpbiBsZHRvYSgpIGluc3RlYWQuCisgKi8KK2NoYXIgKgorX19sZHRvYShsb25nIGRvdWJsZSAqbGQsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwgaW50ICpzaWduLAorICAgIGNoYXIgKipydmUpCit7CisJRlBJIGZwaSA9IHsKKwkJTERCTF9NQU5UX0RJRywJCQkvKiBuYml0cyAqLworCQlMREJMX01JTl9FWFAgLSBMREJMX01BTlRfRElHLAkvKiBlbWluICovCisJCUxEQkxfTUFYX0VYUCAtIExEQkxfTUFOVF9ESUcsCS8qIGVtYXggKi8KKwkJRkxUX1JPVU5EUywJICAgICAgIAkJLyogcm91bmRpbmcgKi8KKyNpZmRlZiBTdWRkZW5fVW5kZXJmbG93CS8qIHVudXNlZCwgYnV0IGNvcnJlY3QgYW55d2F5ICovCisJCTEKKyNlbHNlCisJCTAKKyNlbmRpZgorCX07CisJaW50IGJlLCBraW5kOworCWNoYXIgKnJldDsKKwlzdHJ1Y3QgaWVlZV9leHQgKnAgPSAoc3RydWN0IGllZWVfZXh0ICopbGQ7CisJdWludDMyX3QgYml0c1soTERCTF9NQU5UX0RJRyArIDMxKSAvIDMyXTsKKwl2b2lkICp2Yml0cyA9IGJpdHM7CisKKwkvKgorCSAqIGdkdG9hIGRvZXNuJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgc2lnbiBvZiB0aGUgbnVtYmVyLCBzbworCSAqIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUsIHdlIG5lZWQgdG8gc3dhcCByb3VuZGluZyBtb2RlcyBvZgorCSAqIDIgKHVwd2FyZHMpIGFuZCAzIChkb3dud2FyZHMpLgorCSAqLworCSpzaWduID0gcC0+ZXh0X3NpZ247CisJZnBpLnJvdW5kaW5nIF49IChmcGkucm91bmRpbmcgPj4gMSkgJiBwLT5leHRfc2lnbjsKKworCWJlID0gcC0+ZXh0X2V4cCAtIChMREJMX01BWF9FWFAgLSAxKSAtIChMREJMX01BTlRfRElHIC0gMSk7CisJRVhUX1RPX0FSUkFZMzIocCwgYml0cyk7CisKKwlzd2l0Y2ggKGZwY2xhc3NpZnkoKmxkKSkgeworCWNhc2UgRlBfTk9STUFMOgorCQlraW5kID0gU1RSVE9HX05vcm1hbDsKKyNpZmRlZiBFWFRfSU1QTElDSVRfTkJJVAorCQliaXRzW0xEQkxfTUFOVF9ESUcgLyAzMl0gfD0gMSA8PCAoKExEQkxfTUFOVF9ESUcgLSAxKSAlIDMyKTsKKyNlbmRpZiAvKiBFWFRfSU1QTElDSVRfTkJJVCAqLworCQlicmVhazsKKwljYXNlIEZQX1pFUk86CisJCWtpbmQgPSBTVFJUT0dfWmVybzsKKwkJYnJlYWs7CisJY2FzZSBGUF9TVUJOT1JNQUw6CisJCWtpbmQgPSBTVFJUT0dfRGVub3JtYWw7CisJCWJlKys7CisJCWJyZWFrOworCWNhc2UgRlBfSU5GSU5JVEU6CisJCWtpbmQgPSBTVFJUT0dfSW5maW5pdGU7CisJCWJyZWFrOworCWNhc2UgRlBfTkFOOgorCQlraW5kID0gU1RSVE9HX05hTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYWJvcnQoKTsKKwl9CisKKwlyZXQgPSBnZHRvYSgmZnBpLCBiZSwgdmJpdHMsICZraW5kLCBtb2RlLCBuZGlnaXRzLCBkZWNwdCwgcnZlKTsKKwlpZiAoKmRlY3B0ID09IC0zMjc2OCkKKwkJKmRlY3B0ID0gSU5UX01BWDsKKwlyZXR1cm4gcmV0OworfQorCisjZWxzZSAgIC8qIChMREJMX01BTlRfRElHID09IERCTF9NQU5UX0RJRykgKi8KKworY2hhciAqCitfX2xkdG9hKGxvbmcgZG91YmxlICpsZCwgaW50IG1vZGUsIGludCBuZGlnaXRzLCBpbnQgKmRlY3B0LCBpbnQgKnNpZ24sCisgICAgY2hhciAqKnJ2ZSkKK3sKKwljaGFyICpyZXQ7CisKKwlyZXQgPSBkdG9hKChkb3VibGUpKmxkLCBtb2RlLCBuZGlnaXRzLCBkZWNwdCwgc2lnbiwgcnZlKTsKKwlpZiAoKmRlY3B0ID09IDk5OTkpCisJCSpkZWNwdCA9IElOVF9NQVg7CisJcmV0dXJuIHJldDsKK30KKworI2VuZGlmICAvKiAoTERCTF9NQU5UX0RJRyA9PSBEQkxfTUFOVF9ESUcpICovCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvbWlzYy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWQ3MDZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL21pc2MuYwpAQCAtMCwwICsxLDkwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5IGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlkIE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICogd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAiQCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgkqLworCisjaW5jbHVkZSAiZ2R0b2FpbXAuaCIKKworIHN0YXRpYyBCaWdpbnQgKmZyZWVsaXN0W0ttYXgrMV07CisjaWZuZGVmIE9taXRfUHJpdmF0ZV9NZW1vcnkKKyNpZm5kZWYgUFJJVkFURV9NRU0KKyNkZWZpbmUgUFJJVkFURV9NRU0gMjMwNAorI2VuZGlmCisjZGVmaW5lIFBSSVZBVEVfbWVtICgoUFJJVkFURV9NRU0rc2l6ZW9mKGRvdWJsZSktMSkvc2l6ZW9mKGRvdWJsZSkpCitzdGF0aWMgZG91YmxlIHByaXZhdGVfbWVtW1BSSVZBVEVfbWVtXSwgKnBtZW1fbmV4dCA9IHByaXZhdGVfbWVtOworI2VuZGlmCisKKyBCaWdpbnQgKgorQmFsbG9jCisjaWZkZWYgS1JfaGVhZGVycworCShrKSBpbnQgazsKKyNlbHNlCisJKGludCBrKQorI2VuZGlmCit7CisJaW50IHg7CisJQmlnaW50ICpydjsKKyNpZm5kZWYgT21pdF9Qcml2YXRlX01lbW9yeQorCXVuc2lnbmVkIGludCBsZW47CisjZW5kaWYKKworCUFDUVVJUkVfRFRPQV9MT0NLKDApOworCS8qIFRoZSBrID4gS21heCBjYXNlIGRvZXMgbm90IG5lZWQgQUNRVUlSRV9EVE9BX0xPQ0soMCksICovCisJLyogYnV0IHRoaXMgY2FzZSBzZWVtcyB2ZXJ5IHVubGlrZWx5LiAqLworCWlmIChrIDw9IEttYXggJiYgKHJ2ID0gZnJlZWxpc3Rba10pICE9MCkgeworCQlmcmVlbGlzdFtrXSA9IHJ2LT5uZXh0OworCQl9CisJZWxzZSB7CisJCXggPSAxIDw8IGs7CisjaWZkZWYgT21pdF9Qcml2YXRlX01lbW9yeQorCQlydiA9IChCaWdpbnQgKilNQUxMT0Moc2l6ZW9mKEJpZ2ludCkgKyAoeC0xKSpzaXplb2YoVUxvbmcpKTsKKwkJaWYgKHJ2ID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworI2Vsc2UKKwkJbGVuID0gKHNpemVvZihCaWdpbnQpICsgKHgtMSkqc2l6ZW9mKFVMb25nKSArIHNpemVvZihkb3VibGUpIC0gMSkKKwkJCS9zaXplb2YoZG91YmxlKTsKKwkJaWYgKGsgPD0gS21heCAmJiBwbWVtX25leHQgLSBwcml2YXRlX21lbSArIGxlbiA8PSBQUklWQVRFX21lbSkgeworCQkJcnYgPSAoQmlnaW50KilwbWVtX25leHQ7CisJCQlwbWVtX25leHQgKz0gbGVuOworCQkJfQorCQllbHNlIHsKKwkJCXJ2ID0gKEJpZ2ludCopTUFMTE9DKGxlbipzaXplb2YoZG91YmxlKSk7CisJCQlpZiAocnYgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQl9CisjZW5kaWYKKwkJcnYtPmsgPSBrOworCQlydi0+bWF4d2RzID0geDsKKwkJfQorCUZSRUVfRFRPQV9MT0NLKDApOworCXJ2LT5zaWduID0gcnYtPndkcyA9IDA7CisJcmV0dXJuIHJ2OworCX0KKworIHZvaWQKK0JmcmVlCisjaWZkZWYgS1JfaGVhZGVycworCSh2KSBCaWdpbnQgKnY7CisjZWxzZQorCShCaWdpbnQgKnYpCisjZW5kaWYKK3sKKwlpZiAodikgeworCQlpZiAodi0+ayA+IEttYXgpCisjaWZkZWYgRlJFRQorCQkJRlJFRSgodm9pZCopdik7CisjZWxzZQorCQkJZnJlZSgodm9pZCopdik7CisjZW5kaWYKKwkJZWxzZSB7CisJCQlBQ1FVSVJFX0RUT0FfTE9DSygwKTsKKwkJCXYtPm5leHQgPSBmcmVlbGlzdFt2LT5rXTsKKwkJCWZyZWVsaXN0W3YtPmtdID0gdjsKKwkJCUZSRUVfRFRPQV9MT0NLKDApOworCQkJfQorCQl9CisJfQorCisgaW50CitsbzBiaXRzCisjaWZkZWYgS1JfaGVhZGVycworCSh5KSBVTG9uZyAqeTsKKyNlbHNlCisJKFVMb25nICp5KQorI2VuZGlmCit7CisJaW50IGs7CisJVUxvbmcgeCA9ICp5OworCisJaWYgKHggJiA3KSB7CisJCWlmICh4ICYgMSkKKwkJCXJldHVybiAwOworCQlpZiAoeCAmIDIpIHsKKwkJCSp5ID0geCA+PiAxOworCQkJcmV0dXJuIDE7CisJCQl9CisJCSp5ID0geCA+PiAyOworCQlyZXR1cm4gMjsKKwkJfQorCWsgPSAwOworCWlmICghKHggJiAweGZmZmYpKSB7CisJCWsgPSAxNjsKKwkJeCA+Pj0gMTY7CisJCX0KKwlpZiAoISh4ICYgMHhmZikpIHsKKwkJayArPSA4OworCQl4ID4+PSA4OworCQl9CisJaWYgKCEoeCAmIDB4ZikpIHsKKwkJayArPSA0OworCQl4ID4+PSA0OworCQl9CisJaWYgKCEoeCAmIDB4MykpIHsKKwkJayArPSAyOworCQl4ID4+PSAyOworCQl9CisJaWYgKCEoeCAmIDEpKSB7CisJCWsrKzsKKwkJeCA+Pj0gMTsKKwkJaWYgKCF4KQorCQkJcmV0dXJuIDMyOworCQl9CisJKnkgPSB4OworCXJldHVybiBrOworCX0KKworIEJpZ2ludCAqCittdWx0YWRkCisjaWZkZWYgS1JfaGVhZGVycworCShiLCBtLCBhKSBCaWdpbnQgKmI7IGludCBtLCBhOworI2Vsc2UKKwkoQmlnaW50ICpiLCBpbnQgbSwgaW50IGEpCS8qIG11bHRpcGx5IGJ5IG0gYW5kIGFkZCBhICovCisjZW5kaWYKK3sKKwlpbnQgaSwgd2RzOworI2lmZGVmIFVMTG9uZworCVVMb25nICp4OworCVVMTG9uZyBjYXJyeSwgeTsKKyNlbHNlCisJVUxvbmcgY2FycnksICp4LCB5OworI2lmZGVmIFBhY2tfMzIKKwlVTG9uZyB4aSwgejsKKyNlbmRpZgorI2VuZGlmCisJQmlnaW50ICpiMTsKKworCXdkcyA9IGItPndkczsKKwl4ID0gYi0+eDsKKwlpID0gMDsKKwljYXJyeSA9IGE7CisJZG8geworI2lmZGVmIFVMTG9uZworCQl5ID0gKnggKiAoVUxMb25nKW0gKyBjYXJyeTsKKwkJY2FycnkgPSB5ID4+IDMyOworCQkqeCsrID0geSAmIDB4ZmZmZmZmZmZVTDsKKyNlbHNlCisjaWZkZWYgUGFja18zMgorCQl4aSA9ICp4OworCQl5ID0gKHhpICYgMHhmZmZmKSAqIG0gKyBjYXJyeTsKKwkJeiA9ICh4aSA+PiAxNikgKiBtICsgKHkgPj4gMTYpOworCQljYXJyeSA9IHogPj4gMTY7CisJCSp4KysgPSAoeiA8PCAxNikgKyAoeSAmIDB4ZmZmZik7CisjZWxzZQorCQl5ID0gKnggKiBtICsgY2Fycnk7CisJCWNhcnJ5ID0geSA+PiAxNjsKKwkJKngrKyA9IHkgJiAweGZmZmY7CisjZW5kaWYKKyNlbmRpZgorCQl9CisJCXdoaWxlKCsraSA8IHdkcyk7CisJaWYgKGNhcnJ5KSB7CisJCWlmICh3ZHMgPj0gYi0+bWF4d2RzKSB7CisJCQliMSA9IEJhbGxvYyhiLT5rKzEpOworCQkJaWYgKGIxID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCUJjb3B5KGIxLCBiKTsKKwkJCUJmcmVlKGIpOworCQkJYiA9IGIxOworCQkJfQorCQliLT54W3dkcysrXSA9IGNhcnJ5OworCQliLT53ZHMgPSB3ZHM7CisJCX0KKwlyZXR1cm4gYjsKKwl9CisKKyBpbnQKK2hpMGJpdHNfRDJBCisjaWZkZWYgS1JfaGVhZGVycworCSh4KSBVTG9uZyB4OworI2Vsc2UKKwkoVUxvbmcgeCkKKyNlbmRpZgoreworCWludCBrID0gMDsKKworCWlmICghKHggJiAweGZmZmYwMDAwKSkgeworCQlrID0gMTY7CisJCXggPDw9IDE2OworCQl9CisJaWYgKCEoeCAmIDB4ZmYwMDAwMDApKSB7CisJCWsgKz0gODsKKwkJeCA8PD0gODsKKwkJfQorCWlmICghKHggJiAweGYwMDAwMDAwKSkgeworCQlrICs9IDQ7CisJCXggPDw9IDQ7CisJCX0KKwlpZiAoISh4ICYgMHhjMDAwMDAwMCkpIHsKKwkJayArPSAyOworCQl4IDw8PSAyOworCQl9CisJaWYgKCEoeCAmIDB4ODAwMDAwMDApKSB7CisJCWsrKzsKKwkJaWYgKCEoeCAmIDB4NDAwMDAwMDApKQorCQkJcmV0dXJuIDMyOworCQl9CisJcmV0dXJuIGs7CisJfQorCisgQmlnaW50ICoKK2kyYgorI2lmZGVmIEtSX2hlYWRlcnMKKwkoaSkgaW50IGk7CisjZWxzZQorCShpbnQgaSkKKyNlbmRpZgoreworCUJpZ2ludCAqYjsKKworCWIgPSBCYWxsb2MoMSk7CisJaWYgKGIgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwliLT54WzBdID0gaTsKKwliLT53ZHMgPSAxOworCXJldHVybiBiOworCX0KKworIEJpZ2ludCAqCittdWx0CisjaWZkZWYgS1JfaGVhZGVycworCShhLCBiKSBCaWdpbnQgKmEsICpiOworI2Vsc2UKKwkoQmlnaW50ICphLCBCaWdpbnQgKmIpCisjZW5kaWYKK3sKKwlCaWdpbnQgKmM7CisJaW50IGssIHdhLCB3Yiwgd2M7CisJVUxvbmcgKngsICp4YSwgKnhhZSwgKnhiLCAqeGJlLCAqeGMsICp4YzA7CisJVUxvbmcgeTsKKyNpZmRlZiBVTExvbmcKKwlVTExvbmcgY2FycnksIHo7CisjZWxzZQorCVVMb25nIGNhcnJ5LCB6OworI2lmZGVmIFBhY2tfMzIKKwlVTG9uZyB6MjsKKyNlbmRpZgorI2VuZGlmCisKKwlpZiAoYS0+d2RzIDwgYi0+d2RzKSB7CisJCWMgPSBhOworCQlhID0gYjsKKwkJYiA9IGM7CisJCX0KKwlrID0gYS0+azsKKwl3YSA9IGEtPndkczsKKwl3YiA9IGItPndkczsKKwl3YyA9IHdhICsgd2I7CisJaWYgKHdjID4gYS0+bWF4d2RzKQorCQlrKys7CisJYyA9IEJhbGxvYyhrKTsKKwlpZiAoYyA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWZvcih4ID0gYy0+eCwgeGEgPSB4ICsgd2M7IHggPCB4YTsgeCsrKQorCQkqeCA9IDA7CisJeGEgPSBhLT54OworCXhhZSA9IHhhICsgd2E7CisJeGIgPSBiLT54OworCXhiZSA9IHhiICsgd2I7CisJeGMwID0gYy0+eDsKKyNpZmRlZiBVTExvbmcKKwlmb3IoOyB4YiA8IHhiZTsgeGMwKyspIHsKKwkJaWYgKCAoeSA9ICp4YisrKSAhPTApIHsKKwkJCXggPSB4YTsKKwkJCXhjID0geGMwOworCQkJY2FycnkgPSAwOworCQkJZG8geworCQkJCXogPSAqeCsrICogKFVMTG9uZyl5ICsgKnhjICsgY2Fycnk7CisJCQkJY2FycnkgPSB6ID4+IDMyOworCQkJCSp4YysrID0geiAmIDB4ZmZmZmZmZmZVTDsKKwkJCQl9CisJCQkJd2hpbGUoeCA8IHhhZSk7CisJCQkqeGMgPSBjYXJyeTsKKwkJCX0KKwkJfQorI2Vsc2UKKyNpZmRlZiBQYWNrXzMyCisJZm9yKDsgeGIgPCB4YmU7IHhiKyssIHhjMCsrKSB7CisJCWlmICggKHkgPSAqeGIgJiAweGZmZmYpICE9MCkgeworCQkJeCA9IHhhOworCQkJeGMgPSB4YzA7CisJCQljYXJyeSA9IDA7CisJCQlkbyB7CisJCQkJeiA9ICgqeCAmIDB4ZmZmZikgKiB5ICsgKCp4YyAmIDB4ZmZmZikgKyBjYXJyeTsKKwkJCQljYXJyeSA9IHogPj4gMTY7CisJCQkJejIgPSAoKngrKyA+PiAxNikgKiB5ICsgKCp4YyA+PiAxNikgKyBjYXJyeTsKKwkJCQljYXJyeSA9IHoyID4+IDE2OworCQkJCVN0b3JlaW5jKHhjLCB6Miwgeik7CisJCQkJfQorCQkJCXdoaWxlKHggPCB4YWUpOworCQkJKnhjID0gY2Fycnk7CisJCQl9CisJCWlmICggKHkgPSAqeGIgPj4gMTYpICE9MCkgeworCQkJeCA9IHhhOworCQkJeGMgPSB4YzA7CisJCQljYXJyeSA9IDA7CisJCQl6MiA9ICp4YzsKKwkJCWRvIHsKKwkJCQl6ID0gKCp4ICYgMHhmZmZmKSAqIHkgKyAoKnhjID4+IDE2KSArIGNhcnJ5OworCQkJCWNhcnJ5ID0geiA+PiAxNjsKKwkJCQlTdG9yZWluYyh4YywgeiwgejIpOworCQkJCXoyID0gKCp4KysgPj4gMTYpICogeSArICgqeGMgJiAweGZmZmYpICsgY2Fycnk7CisJCQkJY2FycnkgPSB6MiA+PiAxNjsKKwkJCQl9CisJCQkJd2hpbGUoeCA8IHhhZSk7CisJCQkqeGMgPSB6MjsKKwkJCX0KKwkJfQorI2Vsc2UKKwlmb3IoOyB4YiA8IHhiZTsgeGMwKyspIHsKKwkJaWYgKCAoeSA9ICp4YisrKSAhPTApIHsKKwkJCXggPSB4YTsKKwkJCXhjID0geGMwOworCQkJY2FycnkgPSAwOworCQkJZG8geworCQkJCXogPSAqeCsrICogeSArICp4YyArIGNhcnJ5OworCQkJCWNhcnJ5ID0geiA+PiAxNjsKKwkJCQkqeGMrKyA9IHogJiAweGZmZmY7CisJCQkJfQorCQkJCXdoaWxlKHggPCB4YWUpOworCQkJKnhjID0gY2Fycnk7CisJCQl9CisJCX0KKyNlbmRpZgorI2VuZGlmCisJZm9yKHhjMCA9IGMtPngsIHhjID0geGMwICsgd2M7IHdjID4gMCAmJiAhKi0teGM7IC0td2MpIDsKKwljLT53ZHMgPSB3YzsKKwlyZXR1cm4gYzsKKwl9CisKKyBzdGF0aWMgQmlnaW50ICpwNXM7CisKKyBCaWdpbnQgKgorcG93NW11bHQKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGIsIGspIEJpZ2ludCAqYjsgaW50IGs7CisjZWxzZQorCShCaWdpbnQgKmIsIGludCBrKQorI2VuZGlmCit7CisJQmlnaW50ICpiMSwgKnA1LCAqcDUxOworCWludCBpOworCXN0YXRpYyBpbnQgcDA1WzNdID0geyA1LCAyNSwgMTI1IH07CisKKwlpZiAoIChpID0gayAmIDMpICE9MCkgeworCQliID0gbXVsdGFkZChiLCBwMDVbaS0xXSwgMCk7CisJCWlmIChiID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisKKwlpZiAoIShrID4+PSAyKSkKKwkJcmV0dXJuIGI7CisJaWYgKChwNSA9IHA1cykgPT0gMCkgeworCQkvKiBmaXJzdCB0aW1lICovCisjaWZkZWYgTVVMVElQTEVfVEhSRUFEUworCQlBQ1FVSVJFX0RUT0FfTE9DSygxKTsKKwkJaWYgKCEocDUgPSBwNXMpKSB7CisJCQlwNSA9IHA1cyA9IGkyYig2MjUpOworCQkJaWYgKHA1ID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCXA1LT5uZXh0ID0gMDsKKwkJCX0KKwkJRlJFRV9EVE9BX0xPQ0soMSk7CisjZWxzZQorCQlwNSA9IHA1cyA9IGkyYig2MjUpOworCQlpZiAocDUgPT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCXA1LT5uZXh0ID0gMDsKKyNlbmRpZgorCQl9CisJZm9yKDs7KSB7CisJCWlmIChrICYgMSkgeworCQkJYjEgPSBtdWx0KGIsIHA1KTsKKwkJCWlmIChiMSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlCZnJlZShiKTsKKwkJCWIgPSBiMTsKKwkJCX0KKwkJaWYgKCEoayA+Pj0gMSkpCisJCQlicmVhazsKKwkJaWYgKChwNTEgPSBwNS0+bmV4dCkgPT0gMCkgeworI2lmZGVmIE1VTFRJUExFX1RIUkVBRFMKKwkJCUFDUVVJUkVfRFRPQV9MT0NLKDEpOworCQkJaWYgKCEocDUxID0gcDUtPm5leHQpKSB7CisJCQkJcDUxID0gcDUtPm5leHQgPSBtdWx0KHA1LHA1KTsKKwkJCQlpZiAocDUxID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJcDUxLT5uZXh0ID0gMDsKKwkJCQl9CisJCQlGUkVFX0RUT0FfTE9DSygxKTsKKyNlbHNlCisJCQlwNTEgPSBwNS0+bmV4dCA9IG11bHQocDUscDUpOworCQkJaWYgKHA1MSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlwNTEtPm5leHQgPSAwOworI2VuZGlmCisJCQl9CisJCXA1ID0gcDUxOworCQl9CisJcmV0dXJuIGI7CisJfQorCisgQmlnaW50ICoKK2xzaGlmdAorI2lmZGVmIEtSX2hlYWRlcnMKKwkoYiwgaykgQmlnaW50ICpiOyBpbnQgazsKKyNlbHNlCisJKEJpZ2ludCAqYiwgaW50IGspCisjZW5kaWYKK3sKKwlpbnQgaSwgazEsIG4sIG4xOworCUJpZ2ludCAqYjE7CisJVUxvbmcgKngsICp4MSwgKnhlLCB6OworCisJbiA9IGsgPj4ga3NoaWZ0OworCWsxID0gYi0+azsKKwluMSA9IG4gKyBiLT53ZHMgKyAxOworCWZvcihpID0gYi0+bWF4d2RzOyBuMSA+IGk7IGkgPDw9IDEpCisJCWsxKys7CisJYjEgPSBCYWxsb2MoazEpOworCWlmIChiMSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCXgxID0gYjEtPng7CisJZm9yKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkqeDErKyA9IDA7CisJeCA9IGItPng7CisJeGUgPSB4ICsgYi0+d2RzOworCWlmIChrICY9IGttYXNrKSB7CisjaWZkZWYgUGFja18zMgorCQlrMSA9IDMyIC0gazsKKwkJeiA9IDA7CisJCWRvIHsKKwkJCSp4MSsrID0gKnggPDwgayB8IHo7CisJCQl6ID0gKngrKyA+PiBrMTsKKwkJCX0KKwkJCXdoaWxlKHggPCB4ZSk7CisJCWlmICgoKngxID0geikgIT0wKQorCQkJKytuMTsKKyNlbHNlCisJCWsxID0gMTYgLSBrOworCQl6ID0gMDsKKwkJZG8geworCQkJKngxKysgPSAqeCA8PCBrICAmIDB4ZmZmZiB8IHo7CisJCQl6ID0gKngrKyA+PiBrMTsKKwkJCX0KKwkJCXdoaWxlKHggPCB4ZSk7CisJCWlmICgqeDEgPSB6KQorCQkJKytuMTsKKyNlbmRpZgorCQl9CisJZWxzZSBkbworCQkqeDErKyA9ICp4Kys7CisJCXdoaWxlKHggPCB4ZSk7CisJYjEtPndkcyA9IG4xIC0gMTsKKwlCZnJlZShiKTsKKwlyZXR1cm4gYjE7CisJfQorCisgaW50CitjbXAKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGEsIGIpIEJpZ2ludCAqYSwgKmI7CisjZWxzZQorCShCaWdpbnQgKmEsIEJpZ2ludCAqYikKKyNlbmRpZgoreworCVVMb25nICp4YSwgKnhhMCwgKnhiLCAqeGIwOworCWludCBpLCBqOworCisJaSA9IGEtPndkczsKKwlqID0gYi0+d2RzOworI2lmZGVmIERFQlVHCisJaWYgKGkgPiAxICYmICFhLT54W2ktMV0pCisJCUJ1ZygiY21wIGNhbGxlZCB3aXRoIGEtPnhbYS0+d2RzLTFdID09IDAiKTsKKwlpZiAoaiA+IDEgJiYgIWItPnhbai0xXSkKKwkJQnVnKCJjbXAgY2FsbGVkIHdpdGggYi0+eFtiLT53ZHMtMV0gPT0gMCIpOworI2VuZGlmCisJaWYgKGkgLT0gaikKKwkJcmV0dXJuIGk7CisJeGEwID0gYS0+eDsKKwl4YSA9IHhhMCArIGo7CisJeGIwID0gYi0+eDsKKwl4YiA9IHhiMCArIGo7CisJZm9yKDs7KSB7CisJCWlmICgqLS14YSAhPSAqLS14YikKKwkJCXJldHVybiAqeGEgPCAqeGIgPyAtMSA6IDE7CisJCWlmICh4YSA8PSB4YTApCisJCQlicmVhazsKKwkJfQorCXJldHVybiAwOworCX0KKworIEJpZ2ludCAqCitkaWZmCisjaWZkZWYgS1JfaGVhZGVycworCShhLCBiKSBCaWdpbnQgKmEsICpiOworI2Vsc2UKKwkoQmlnaW50ICphLCBCaWdpbnQgKmIpCisjZW5kaWYKK3sKKwlCaWdpbnQgKmM7CisJaW50IGksIHdhLCB3YjsKKwlVTG9uZyAqeGEsICp4YWUsICp4YiwgKnhiZSwgKnhjOworI2lmZGVmIFVMTG9uZworCVVMTG9uZyBib3Jyb3csIHk7CisjZWxzZQorCVVMb25nIGJvcnJvdywgeTsKKyNpZmRlZiBQYWNrXzMyCisJVUxvbmcgejsKKyNlbmRpZgorI2VuZGlmCisKKwlpID0gY21wKGEsYik7CisJaWYgKCFpKSB7CisJCWMgPSBCYWxsb2MoMCk7CisJCWlmIChjID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQljLT53ZHMgPSAxOworCQljLT54WzBdID0gMDsKKwkJcmV0dXJuIGM7CisJCX0KKwlpZiAoaSA8IDApIHsKKwkJYyA9IGE7CisJCWEgPSBiOworCQliID0gYzsKKwkJaSA9IDE7CisJCX0KKwllbHNlCisJCWkgPSAwOworCWMgPSBCYWxsb2MoYS0+ayk7CisJaWYgKGMgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwljLT5zaWduID0gaTsKKwl3YSA9IGEtPndkczsKKwl4YSA9IGEtPng7CisJeGFlID0geGEgKyB3YTsKKwl3YiA9IGItPndkczsKKwl4YiA9IGItPng7CisJeGJlID0geGIgKyB3YjsKKwl4YyA9IGMtPng7CisJYm9ycm93ID0gMDsKKyNpZmRlZiBVTExvbmcKKwlkbyB7CisJCXkgPSAoVUxMb25nKSp4YSsrIC0gKnhiKysgLSBib3Jyb3c7CisJCWJvcnJvdyA9IHkgPj4gMzIgJiAxVUw7CisJCSp4YysrID0geSAmIDB4ZmZmZmZmZmZVTDsKKwkJfQorCQl3aGlsZSh4YiA8IHhiZSk7CisJd2hpbGUoeGEgPCB4YWUpIHsKKwkJeSA9ICp4YSsrIC0gYm9ycm93OworCQlib3Jyb3cgPSB5ID4+IDMyICYgMVVMOworCQkqeGMrKyA9IHkgJiAweGZmZmZmZmZmVUw7CisJCX0KKyNlbHNlCisjaWZkZWYgUGFja18zMgorCWRvIHsKKwkJeSA9ICgqeGEgJiAweGZmZmYpIC0gKCp4YiAmIDB4ZmZmZikgLSBib3Jyb3c7CisJCWJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCXogPSAoKnhhKysgPj4gMTYpIC0gKCp4YisrID4+IDE2KSAtIGJvcnJvdzsKKwkJYm9ycm93ID0gKHogJiAweDEwMDAwKSA+PiAxNjsKKwkJU3RvcmVpbmMoeGMsIHosIHkpOworCQl9CisJCXdoaWxlKHhiIDwgeGJlKTsKKwl3aGlsZSh4YSA8IHhhZSkgeworCQl5ID0gKCp4YSAmIDB4ZmZmZikgLSBib3Jyb3c7CisJCWJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCXogPSAoKnhhKysgPj4gMTYpIC0gYm9ycm93OworCQlib3Jyb3cgPSAoeiAmIDB4MTAwMDApID4+IDE2OworCQlTdG9yZWluYyh4YywgeiwgeSk7CisJCX0KKyNlbHNlCisJZG8geworCQl5ID0gKnhhKysgLSAqeGIrKyAtIGJvcnJvdzsKKwkJYm9ycm93ID0gKHkgJiAweDEwMDAwKSA+PiAxNjsKKwkJKnhjKysgPSB5ICYgMHhmZmZmOworCQl9CisJCXdoaWxlKHhiIDwgeGJlKTsKKwl3aGlsZSh4YSA8IHhhZSkgeworCQl5ID0gKnhhKysgLSBib3Jyb3c7CisJCWJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCSp4YysrID0geSAmIDB4ZmZmZjsKKwkJfQorI2VuZGlmCisjZW5kaWYKKwl3aGlsZSghKi0teGMpCisJCXdhLS07CisJYy0+d2RzID0gd2E7CisJcmV0dXJuIGM7CisJfQorCisgZG91YmxlCitiMmQKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGEsIGUpIEJpZ2ludCAqYTsgaW50ICplOworI2Vsc2UKKwkoQmlnaW50ICphLCBpbnQgKmUpCisjZW5kaWYKK3sKKwlVTG9uZyAqeGEsICp4YTAsIHcsIHksIHo7CisJaW50IGs7CisJVSBkOworI2lmZGVmIFZBWAorCVVMb25nIGQwLCBkMTsKKyNlbHNlCisjZGVmaW5lIGQwIHdvcmQwKCZkKQorI2RlZmluZSBkMSB3b3JkMSgmZCkKKyNlbmRpZgorCisJeGEwID0gYS0+eDsKKwl4YSA9IHhhMCArIGEtPndkczsKKwl5ID0gKi0teGE7CisjaWZkZWYgREVCVUcKKwlpZiAoIXkpIEJ1ZygiemVybyB5IGluIGIyZCIpOworI2VuZGlmCisJayA9IGhpMGJpdHMoeSk7CisJKmUgPSAzMiAtIGs7CisjaWZkZWYgUGFja18zMgorCWlmIChrIDwgRWJpdHMpIHsKKwkJZDAgPSBFeHBfMSB8IHkgPj4gKEViaXRzIC0gayk7CisJCXcgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwkJZDEgPSB5IDw8ICgoMzItRWJpdHMpICsgaykgfCB3ID4+IChFYml0cyAtIGspOworCQlnb3RvIHJldF9kOworCQl9CisJeiA9IHhhID4geGEwID8gKi0teGEgOiAwOworCWlmIChrIC09IEViaXRzKSB7CisJCWQwID0gRXhwXzEgfCB5IDw8IGsgfCB6ID4+ICgzMiAtIGspOworCQl5ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJCWQxID0geiA8PCBrIHwgeSA+PiAoMzIgLSBrKTsKKwkJfQorCWVsc2UgeworCQlkMCA9IEV4cF8xIHwgeTsKKwkJZDEgPSB6OworCQl9CisjZWxzZQorCWlmIChrIDwgRWJpdHMgKyAxNikgeworCQl6ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJCWQwID0gRXhwXzEgfCB5IDw8IGsgLSBFYml0cyB8IHogPj4gRWJpdHMgKyAxNiAtIGs7CisJCXcgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwkJeSA9IHhhID4geGEwID8gKi0teGEgOiAwOworCQlkMSA9IHogPDwgayArIDE2IC0gRWJpdHMgfCB3IDw8IGsgLSBFYml0cyB8IHkgPj4gMTYgKyBFYml0cyAtIGs7CisJCWdvdG8gcmV0X2Q7CisJCX0KKwl6ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJdyA9IHhhID4geGEwID8gKi0teGEgOiAwOworCWsgLT0gRWJpdHMgKyAxNjsKKwlkMCA9IEV4cF8xIHwgeSA8PCBrICsgMTYgfCB6IDw8IGsgfCB3ID4+IDE2IC0gazsKKwl5ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJZDEgPSB3IDw8IGsgKyAxNiB8IHkgPDwgazsKKyNlbmRpZgorIHJldF9kOgorI2lmZGVmIFZBWAorCXdvcmQwKCZkKSA9IGQwID4+IDE2IHwgZDAgPDwgMTY7CisJd29yZDEoJmQpID0gZDEgPj4gMTYgfCBkMSA8PCAxNjsKKyNlbmRpZgorCXJldHVybiBkdmFsKCZkKTsKKwl9CisjdW5kZWYgZDAKKyN1bmRlZiBkMQorCisgQmlnaW50ICoKK2QyYgorI2lmZGVmIEtSX2hlYWRlcnMKKwkoZGQsIGUsIGJpdHMpIGRvdWJsZSBkZDsgaW50ICplLCAqYml0czsKKyNlbHNlCisJKGRvdWJsZSBkZCwgaW50ICplLCBpbnQgKmJpdHMpCisjZW5kaWYKK3sKKwlCaWdpbnQgKmI7CisJVSBkOworI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJaW50IGk7CisjZW5kaWYKKwlpbnQgZGUsIGs7CisJVUxvbmcgKngsIHksIHo7CisjaWZkZWYgVkFYCisJVUxvbmcgZDAsIGQxOworI2Vsc2UKKyNkZWZpbmUgZDAgd29yZDAoJmQpCisjZGVmaW5lIGQxIHdvcmQxKCZkKQorI2VuZGlmCisJZC5kID0gZGQ7CisjaWZkZWYgVkFYCisJZDAgPSB3b3JkMCgmZCkgPj4gMTYgfCB3b3JkMCgmZCkgPDwgMTY7CisJZDEgPSB3b3JkMSgmZCkgPj4gMTYgfCB3b3JkMSgmZCkgPDwgMTY7CisjZW5kaWYKKworI2lmZGVmIFBhY2tfMzIKKwliID0gQmFsbG9jKDEpOworI2Vsc2UKKwliID0gQmFsbG9jKDIpOworI2VuZGlmCisJaWYgKGIgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwl4ID0gYi0+eDsKKworCXogPSBkMCAmIEZyYWNfbWFzazsKKwlkMCAmPSAweDdmZmZmZmZmOwkvKiBjbGVhciBzaWduIGJpdCwgd2hpY2ggd2UgaWdub3JlICovCisjaWZkZWYgU3VkZGVuX1VuZGVyZmxvdworCWRlID0gKGludCkoZDAgPj4gRXhwX3NoaWZ0KTsKKyNpZm5kZWYgSUJNCisJeiB8PSBFeHBfbXNrMTE7CisjZW5kaWYKKyNlbHNlCisJaWYgKCAoZGUgPSAoaW50KShkMCA+PiBFeHBfc2hpZnQpKSAhPTApCisJCXogfD0gRXhwX21zazE7CisjZW5kaWYKKyNpZmRlZiBQYWNrXzMyCisJaWYgKCAoeSA9IGQxKSAhPTApIHsKKwkJaWYgKCAoayA9IGxvMGJpdHMoJnkpKSAhPTApIHsKKwkJCXhbMF0gPSB5IHwgeiA8PCAoMzIgLSBrKTsKKwkJCXogPj49IGs7CisJCQl9CisJCWVsc2UKKwkJCXhbMF0gPSB5OworI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCWkgPQorI2VuZGlmCisJCSAgICAgYi0+d2RzID0gKHhbMV0gPSB6KSAhPTAgPyAyIDogMTsKKwkJfQorCWVsc2UgeworCQlrID0gbG8wYml0cygmeik7CisJCXhbMF0gPSB6OworI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCWkgPQorI2VuZGlmCisJCSAgICBiLT53ZHMgPSAxOworCQlrICs9IDMyOworCQl9CisjZWxzZQorCWlmICggKHkgPSBkMSkgIT0wKSB7CisJCWlmICggKGsgPSBsbzBiaXRzKCZ5KSkgIT0wKQorCQkJaWYgKGsgPj0gMTYpIHsKKwkJCQl4WzBdID0geSB8IHogPDwgMzIgLSBrICYgMHhmZmZmOworCQkJCXhbMV0gPSB6ID4+IGsgLSAxNiAmIDB4ZmZmZjsKKwkJCQl4WzJdID0geiA+PiBrOworCQkJCWkgPSAyOworCQkJCX0KKwkJCWVsc2UgeworCQkJCXhbMF0gPSB5ICYgMHhmZmZmOworCQkJCXhbMV0gPSB5ID4+IDE2IHwgeiA8PCAxNiAtIGsgJiAweGZmZmY7CisJCQkJeFsyXSA9IHogPj4gayAmIDB4ZmZmZjsKKwkJCQl4WzNdID0geiA+PiBrKzE2OworCQkJCWkgPSAzOworCQkJCX0KKwkJZWxzZSB7CisJCQl4WzBdID0geSAmIDB4ZmZmZjsKKwkJCXhbMV0gPSB5ID4+IDE2OworCQkJeFsyXSA9IHogJiAweGZmZmY7CisJCQl4WzNdID0geiA+PiAxNjsKKwkJCWkgPSAzOworCQkJfQorCQl9CisJZWxzZSB7CisjaWZkZWYgREVCVUcKKwkJaWYgKCF6KQorCQkJQnVnKCJaZXJvIHBhc3NlZCB0byBkMmIiKTsKKyNlbmRpZgorCQlrID0gbG8wYml0cygmeik7CisJCWlmIChrID49IDE2KSB7CisJCQl4WzBdID0gejsKKwkJCWkgPSAwOworCQkJfQorCQllbHNlIHsKKwkJCXhbMF0gPSB6ICYgMHhmZmZmOworCQkJeFsxXSA9IHogPj4gMTY7CisJCQlpID0gMTsKKwkJCX0KKwkJayArPSAzMjsKKwkJfQorCXdoaWxlKCF4W2ldKQorCQktLWk7CisJYi0+d2RzID0gaSArIDE7CisjZW5kaWYKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCWlmIChkZSkgeworI2VuZGlmCisjaWZkZWYgSUJNCisJCSplID0gKGRlIC0gQmlhcyAtIChQLTEpIDw8IDIpICsgazsKKwkJKmJpdHMgPSA0KlAgKyA4IC0gayAtIGhpMGJpdHMod29yZDAoJmQpICYgRnJhY19tYXNrKTsKKyNlbHNlCisJCSplID0gZGUgLSBCaWFzIC0gKFAtMSkgKyBrOworCQkqYml0cyA9IFAgLSBrOworI2VuZGlmCisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJfQorCWVsc2UgeworCQkqZSA9IGRlIC0gQmlhcyAtIChQLTEpICsgMSArIGs7CisjaWZkZWYgUGFja18zMgorCQkqYml0cyA9IDMyKmkgLSBoaTBiaXRzKHhbaS0xXSk7CisjZWxzZQorCQkqYml0cyA9IChpKzIpKjE2IC0gaGkwYml0cyh4W2ldKTsKKyNlbmRpZgorCQl9CisjZW5kaWYKKwlyZXR1cm4gYjsKKwl9CisjdW5kZWYgZDAKKyN1bmRlZiBkMQorCisgQ09OU1QgZG91YmxlCisjaWZkZWYgSUVFRV9Bcml0aAorYmlndGVuc1tdID0geyAxZTE2LCAxZTMyLCAxZTY0LCAxZTEyOCwgMWUyNTYgfTsKK0NPTlNUIGRvdWJsZSB0aW55dGVuc1tdID0geyAxZS0xNiwgMWUtMzIsIDFlLTY0LCAxZS0xMjgsIDFlLTI1NgorCQl9OworI2Vsc2UKKyNpZmRlZiBJQk0KK2JpZ3RlbnNbXSA9IHsgMWUxNiwgMWUzMiwgMWU2NCB9OworQ09OU1QgZG91YmxlIHRpbnl0ZW5zW10gPSB7IDFlLTE2LCAxZS0zMiwgMWUtNjQgfTsKKyNlbHNlCitiaWd0ZW5zW10gPSB7IDFlMTYsIDFlMzIgfTsKK0NPTlNUIGRvdWJsZSB0aW55dGVuc1tdID0geyAxZS0xNiwgMWUtMzIgfTsKKyNlbmRpZgorI2VuZGlmCisKKyBDT05TVCBkb3VibGUKK3RlbnNbXSA9IHsKKwkJMWUwLCAxZTEsIDFlMiwgMWUzLCAxZTQsIDFlNSwgMWU2LCAxZTcsIDFlOCwgMWU5LAorCQkxZTEwLCAxZTExLCAxZTEyLCAxZTEzLCAxZTE0LCAxZTE1LCAxZTE2LCAxZTE3LCAxZTE4LCAxZTE5LAorCQkxZTIwLCAxZTIxLCAxZTIyCisjaWZkZWYgVkFYCisJCSwgMWUyMywgMWUyNAorI2VuZGlmCisJCX07CisKKyBjaGFyICoKKyNpZmRlZiBLUl9oZWFkZXJzCitzdHJjcF9EMkEoYSwgYikgY2hhciAqYTsgY2hhciAqYjsKKyNlbHNlCitzdHJjcF9EMkEoY2hhciAqYSwgQ09OU1QgY2hhciAqYikKKyNlbmRpZgoreworCXdoaWxlKCgqYSA9ICpiKyspKQorCQlhKys7CisJcmV0dXJuIGE7CisJfQorCisjaWZkZWYgTk9fU1RSSU5HX0gKKworIENoYXIgKgorI2lmZGVmIEtSX2hlYWRlcnMKK21lbWNweV9EMkEoYSwgYiwgbGVuKSBDaGFyICphOyBDaGFyICpiOyBzaXplX3QgbGVuOworI2Vsc2UKK21lbWNweV9EMkEodm9pZCAqYTEsIHZvaWQgKmIxLCBzaXplX3QgbGVuKQorI2VuZGlmCit7CisJY2hhciAqYSA9IChjaGFyKilhMSwgKmFlID0gYSArIGxlbjsKKwljaGFyICpiID0gKGNoYXIqKWIxLCAqYTAgPSBhOworCXdoaWxlKGEgPCBhZSkKKwkJKmErKyA9ICpiKys7CisJcmV0dXJuIGEwOworCX0KKworI2VuZGlmIC8qIE5PX1NUUklOR19IICovCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc21pc2MuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9zbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNjNhMzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc21pc2MuYwpAQCAtMCwwICsxLDIwMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5IGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlkIE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICogd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAiQCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgkqLworCisjaW5jbHVkZSAiZ2R0b2FpbXAuaCIKKworIEJpZ2ludCAqCitzMmIKKyNpZmRlZiBLUl9oZWFkZXJzCisJKHMsIG5kMCwgbmQsIHk5LCBkcGxlbikgQ09OU1QgY2hhciAqczsgaW50IGRwbGVuLCBuZDAsIG5kOyBVTG9uZyB5OTsKKyNlbHNlCisJKENPTlNUIGNoYXIgKnMsIGludCBuZDAsIGludCBuZCwgVUxvbmcgeTksIGludCBkcGxlbikKKyNlbmRpZgoreworCUJpZ2ludCAqYjsKKwlpbnQgaSwgazsKKwlMb25nIHgsIHk7CisKKwl4ID0gKG5kICsgOCkgLyA5OworCWZvcihrID0gMCwgeSA9IDE7IHggPiB5OyB5IDw8PSAxLCBrKyspIDsKKyNpZmRlZiBQYWNrXzMyCisJYiA9IEJhbGxvYyhrKTsKKwlpZiAoYiA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWItPnhbMF0gPSB5OTsKKwliLT53ZHMgPSAxOworI2Vsc2UKKwliID0gQmFsbG9jKGsrMSk7CisJaWYgKGIgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwliLT54WzBdID0geTkgJiAweGZmZmY7CisJYi0+d2RzID0gKGItPnhbMV0gPSB5OSA+PiAxNikgPyAyIDogMTsKKyNlbmRpZgorCisJaSA9IDk7CisJaWYgKDkgPCBuZDApIHsKKwkJcyArPSA5OworCQlkbyB7CisJCQliID0gbXVsdGFkZChiLCAxMCwgKnMrKyAtICcwJyk7CisJCQlpZiAoYiA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQl9IHdoaWxlKCsraSA8IG5kMCk7CisJCXMgKz0gZHBsZW47CisJCX0KKwllbHNlCisJCXMgKz0gZHBsZW4gKyA5OworCWZvcig7IGkgPCBuZDsgaSsrKSB7CisJCWIgPSBtdWx0YWRkKGIsIDEwLCAqcysrIC0gJzAnKTsKKwkJaWYgKGIgPT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwlyZXR1cm4gYjsKKwl9CisKKyBkb3VibGUKK3JhdGlvCisjaWZkZWYgS1JfaGVhZGVycworCShhLCBiKSBCaWdpbnQgKmEsICpiOworI2Vsc2UKKwkoQmlnaW50ICphLCBCaWdpbnQgKmIpCisjZW5kaWYKK3sKKwlVIGRhLCBkYjsKKwlpbnQgaywga2EsIGtiOworCisJZHZhbCgmZGEpID0gYjJkKGEsICZrYSk7CisJZHZhbCgmZGIpID0gYjJkKGIsICZrYik7CisJayA9IGthIC0ga2IgKyBVTGJpdHMqKGEtPndkcyAtIGItPndkcyk7CisjaWZkZWYgSUJNCisJaWYgKGsgPiAwKSB7CisJCXdvcmQwKCZkYSkgKz0gKGsgPj4gMikqRXhwX21zazE7CisJCWlmIChrICY9IDMpCisJCQlkdmFsKCZkYSkgKj0gMSA8PCBrOworCQl9CisJZWxzZSB7CisJCWsgPSAtazsKKwkJd29yZDAoJmRiKSArPSAoayA+PiAyKSpFeHBfbXNrMTsKKwkJaWYgKGsgJj0gMykKKwkJCWR2YWwoJmRiKSAqPSAxIDw8IGs7CisJCX0KKyNlbHNlCisJaWYgKGsgPiAwKQorCQl3b3JkMCgmZGEpICs9IGsqRXhwX21zazE7CisJZWxzZSB7CisJCWsgPSAtazsKKwkJd29yZDAoJmRiKSArPSBrKkV4cF9tc2sxOworCQl9CisjZW5kaWYKKwlyZXR1cm4gZHZhbCgmZGEpIC8gZHZhbCgmZGIpOworCX0KKworI2lmZGVmIElORk5BTl9DSEVDSworCisgaW50CittYXRjaAorI2lmZGVmIEtSX2hlYWRlcnMKKwkoc3AsIHQpIGNoYXIgKipzcCwgKnQ7CisjZWxzZQorCShDT05TVCBjaGFyICoqc3AsIGNoYXIgKnQpCisjZW5kaWYKK3sKKwlpbnQgYywgZDsKKwlDT05TVCBjaGFyICpzID0gKnNwOworCisJd2hpbGUoIChkID0gKnQrKykgIT0wKSB7CisJCWlmICgoYyA9ICorK3MpID49ICdBJyAmJiBjIDw9ICdaJykKKwkJCWMgKz0gJ2EnIC0gJ0EnOworCQlpZiAoYyAhPSBkKQorCQkJcmV0dXJuIDA7CisJCX0KKwkqc3AgPSBzICsgMTsKKwlyZXR1cm4gMTsKKwl9CisjZW5kaWYgLyogSU5GTkFOX0NIRUNLICovCisKKyB2b2lkCisjaWZkZWYgS1JfaGVhZGVycworY29weWJpdHMoYywgbiwgYikgVUxvbmcgKmM7IGludCBuOyBCaWdpbnQgKmI7CisjZWxzZQorY29weWJpdHMoVUxvbmcgKmMsIGludCBuLCBCaWdpbnQgKmIpCisjZW5kaWYKK3sKKwlVTG9uZyAqY2UsICp4LCAqeGU7CisjaWZkZWYgUGFja18xNgorCWludCBudywgbncxOworI2VuZGlmCisKKwljZSA9IGMgKyAoKG4tMSkgPj4ga3NoaWZ0KSArIDE7CisJeCA9IGItPng7CisjaWZkZWYgUGFja18zMgorCXhlID0geCArIGItPndkczsKKwl3aGlsZSh4IDwgeGUpCisJCSpjKysgPSAqeCsrOworI2Vsc2UKKwludyA9IGItPndkczsKKwludzEgPSBudyAmIDE7CisJZm9yKHhlID0geCArIChudyAtIG53MSk7IHggPCB4ZTsgeCArPSAyKQorCQlTdG9yZWluYyhjLCB4WzFdLCB4WzBdKTsKKwlpZiAobncxKQorCQkqYysrID0gKng7CisjZW5kaWYKKwl3aGlsZShjIDwgY2UpCisJCSpjKysgPSAwOworCX0KKworIFVMb25nCisjaWZkZWYgS1JfaGVhZGVycworYW55X29uKGIsIGspIEJpZ2ludCAqYjsgaW50IGs7CisjZWxzZQorYW55X29uKEJpZ2ludCAqYiwgaW50IGspCisjZW5kaWYKK3sKKwlpbnQgbiwgbndkczsKKwlVTG9uZyAqeCwgKngwLCB4MSwgeDI7CisKKwl4ID0gYi0+eDsKKwlud2RzID0gYi0+d2RzOworCW4gPSBrID4+IGtzaGlmdDsKKwlpZiAobiA+IG53ZHMpCisJCW4gPSBud2RzOworCWVsc2UgaWYgKG4gPCBud2RzICYmIChrICY9IGttYXNrKSkgeworCQl4MSA9IHgyID0geFtuXTsKKwkJeDEgPj49IGs7CisJCXgxIDw8PSBrOworCQlpZiAoeDEgIT0geDIpCisJCQlyZXR1cm4gMTsKKwkJfQorCXgwID0geDsKKwl4ICs9IG47CisJd2hpbGUoeCA+IHgwKQorCQlpZiAoKi0teCkKKwkJCXJldHVybiAxOworCXJldHVybiAwOworCX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9zdHJ0b2QuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9zdHJ0b2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWQ0N2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N0cnRvZC5jCkBAIC0wLDAgKzEsMTEwNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAxOTk4LTIwMDEgYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgorI2lmbmRlZiBOT19GRU5WX0gKKyNpbmNsdWRlIDxmZW52Lmg+CisjZW5kaWYKKworI2lmZGVmIFVTRV9MT0NBTEUKKyNpbmNsdWRlICJsb2NhbGUuaCIKKyNlbmRpZgorCisjaWZkZWYgSUVFRV9Bcml0aAorI2lmbmRlZiBOT19JRUVFX1NjYWxlCisjZGVmaW5lIEF2b2lkX1VuZGVyZmxvdworI3VuZGVmIHRpbnl0ZW5zCisvKiBUaGUgZmFjdG9yIG9mIDJeMTA2IGluIHRpbnl0ZW5zWzRdIGhlbHBzIHVzIGF2b2lkIHNldHRpbmcgdGhlIHVuZGVyZmxvdyAqLworLyogZmxhZyB1bm5lY2Vzc2FyaWx5LiAgSXQgbGVhZHMgdG8gYSBzb25nIGFuZCBkYW5jZSBhdCB0aGUgZW5kIG9mIHN0cnRvZC4gKi8KK3N0YXRpYyBDT05TVCBkb3VibGUgdGlueXRlbnNbXSA9IHsgMWUtMTYsIDFlLTMyLCAxZS02NCwgMWUtMTI4LAorCQk5MDA3MTk5MjU0NzQwOTkyLio5MDA3MTk5MjU0NzQwOTkyLmUtMjU2CisJCX07CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworI3VuZGVmIENoZWNrX0ZMVF9ST1VORFMKKyNkZWZpbmUgQ2hlY2tfRkxUX1JPVU5EUworI2Vsc2UKKyNkZWZpbmUgUm91bmRpbmcgRmx0X1JvdW5kcworI2VuZGlmCisKKyNpZmRlZiBBdm9pZF9VbmRlcmZsb3cgLyp7Ki8KKyBzdGF0aWMgZG91YmxlCitzdWxwCisjaWZkZWYgS1JfaGVhZGVycworCSh4LCBzY2FsZSkgVSAqeDsgaW50IHNjYWxlOworI2Vsc2UKKwkoVSAqeCwgaW50IHNjYWxlKQorI2VuZGlmCit7CisJVSB1OworCWRvdWJsZSBydjsKKwlpbnQgaTsKKworCXJ2ID0gdWxwKHgpOworCWlmICghc2NhbGUgfHwgKGkgPSAyKlAgKyAxIC0gKCh3b3JkMCh4KSAmIEV4cF9tYXNrKSA+PiBFeHBfc2hpZnQpKSA8PSAwKQorCQlyZXR1cm4gcnY7IC8qIElzIHRoZXJlIGFuIGV4YW1wbGUgd2hlcmUgaSA8PSAwID8gKi8KKwl3b3JkMCgmdSkgPSBFeHBfMSArIChpIDw8IEV4cF9zaGlmdCk7CisJd29yZDEoJnUpID0gMDsKKwlyZXR1cm4gcnYgKiB1LmQ7CisJfQorI2VuZGlmIC8qfSovCisKKyBkb3VibGUKK3N0cnRvZAorI2lmZGVmIEtSX2hlYWRlcnMKKwkoczAwLCBzZSkgQ09OU1QgY2hhciAqczAwOyBjaGFyICoqc2U7CisjZWxzZQorCShDT05TVCBjaGFyICpzMDAsIGNoYXIgKipzZSkKKyNlbmRpZgoreworI2lmZGVmIEF2b2lkX1VuZGVyZmxvdworCWludCBzY2FsZTsKKyNlbmRpZgorCWludCBiYjIsIGJiNSwgYmJlLCBiZDIsIGJkNSwgYmJiaXRzLCBiczIsIGMsIGRlY3B0LCBkc2lnbiwKKwkJIGUsIGUxLCBlc2lnbiwgaSwgaiwgaywgbmQsIG5kMCwgbmYsIG56LCBuejAsIHNpZ247CisJQ09OU1QgY2hhciAqcywgKnMwLCAqczE7CisJZG91YmxlIGFhZGo7CisJTG9uZyBMOworCVUgYWRqLCBhYWRqMSwgcnYsIHJ2MDsKKwlVTG9uZyB5LCB6OworCUJpZ2ludCAqYmIgPSBOVUxMLCAqYmIxLCAqYmQgPSBOVUxMLCAqYmQwID0gTlVMTCwgKmJzID0gTlVMTCwgKmRlbHRhID0gTlVMTDsKKyNpZmRlZiBBdm9pZF9VbmRlcmZsb3cKKwlVTG9uZyBMc2IsIExzYjE7CisjZW5kaWYKKyNpZmRlZiBTRVRfSU5FWEFDVAorCWludCBpbmV4YWN0LCBvbGRpbmV4YWN0OworI2VuZGlmCisjaWZkZWYgVVNFX0xPQ0FMRSAvKnt7Ki8KKyNpZmRlZiBOT19MT0NBTEVfQ0FDSEUKKwljaGFyICpkZWNpbWFscG9pbnQgPSBsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQ7CisJaW50IGRwbGVuID0gc3RybGVuKGRlY2ltYWxwb2ludCk7CisjZWxzZQorCWNoYXIgKmRlY2ltYWxwb2ludDsKKwlzdGF0aWMgY2hhciAqZGVjaW1hbHBvaW50X2NhY2hlOworCXN0YXRpYyBpbnQgZHBsZW47CisJaWYgKCEoczAgPSBkZWNpbWFscG9pbnRfY2FjaGUpKSB7CisJCXMwID0gbG9jYWxlY29udigpLT5kZWNpbWFsX3BvaW50OworCQlpZiAoKGRlY2ltYWxwb2ludF9jYWNoZSA9IChjaGFyKilNQUxMT0Moc3RybGVuKHMwKSArIDEpKSkgeworCQkJc3RybGNweShkZWNpbWFscG9pbnRfY2FjaGUsIHMwLCBzdHJsZW4oczApICsgMSk7CisJCQlzMCA9IGRlY2ltYWxwb2ludF9jYWNoZTsKKwkJCX0KKwkJZHBsZW4gPSBzdHJsZW4oczApOworCQl9CisJZGVjaW1hbHBvaW50ID0gKGNoYXIqKXMwOworI2VuZGlmIC8qTk9fTE9DQUxFX0NBQ0hFKi8KKyNlbHNlICAvKlVTRV9MT0NBTEV9eyovCisjZGVmaW5lIGRwbGVuIDEKKyNlbmRpZiAvKlVTRV9MT0NBTEV9fSovCisKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTIC8qeyovCisJaW50IFJvdW5kaW5nOworI2lmZGVmIFRydXN0X0ZMVF9ST1VORFMgLyp7eyBvbmx5IGRlZmluZSB0aGlzIGlmIEZMVF9ST1VORFMgcmVhbGx5IHdvcmtzISAqLworCVJvdW5kaW5nID0gRmx0X1JvdW5kczsKKyNlbHNlIC8qfXsqLworCVJvdW5kaW5nID0gMTsKKwlzd2l0Y2goZmVnZXRyb3VuZCgpKSB7CisJICBjYXNlIEZFX1RPV0FSRFpFUk86CVJvdW5kaW5nID0gMDsgYnJlYWs7CisJICBjYXNlIEZFX1VQV0FSRDoJUm91bmRpbmcgPSAyOyBicmVhazsKKwkgIGNhc2UgRkVfRE9XTldBUkQ6CVJvdW5kaW5nID0gMzsKKwkgIH0KKyNlbmRpZiAvKn19Ki8KKyNlbmRpZiAvKn0qLworCisJc2lnbiA9IG56MCA9IG56ID0gZGVjcHQgPSAwOworCWR2YWwoJnJ2KSA9IDAuOworCWZvcihzID0gczAwOztzKyspIHN3aXRjaCgqcykgeworCQljYXNlICctJzoKKwkJCXNpZ24gPSAxOworCQkJLyogbm8gYnJlYWsgKi8KKwkJY2FzZSAnKyc6CisJCQlpZiAoKisrcykKKwkJCQlnb3RvIGJyZWFrMjsKKwkJCS8qIG5vIGJyZWFrICovCisJCWNhc2UgMDoKKwkJCWdvdG8gcmV0MDsKKwkJY2FzZSAnXHQnOgorCQljYXNlICdcbic6CisJCWNhc2UgJ1x2JzoKKwkJY2FzZSAnXGYnOgorCQljYXNlICdccic6CisJCWNhc2UgJyAnOgorCQkJY29udGludWU7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGJyZWFrMjsKKwkJfQorIGJyZWFrMjoKKwlpZiAoKnMgPT0gJzAnKSB7CisjaWZuZGVmIE5PX0hFWF9GUCAvKnsqLworCQl7CisJCXN0YXRpYyBGUEkgZnBpID0geyA1MywgMS0xMDIzLTUzKzEsIDIwNDYtMTAyMy01MysxLCAxLCBTSSB9OworCQlMb25nIGV4cDsKKwkJVUxvbmcgYml0c1syXTsKKwkJc3dpdGNoKHNbMV0pIHsKKwkJICBjYXNlICd4JzoKKwkJICBjYXNlICdYJzoKKwkJCXsKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisJCQlGUEkgZnBpMSA9IGZwaTsKKwkJCWZwaTEucm91bmRpbmcgPSBSb3VuZGluZzsKKyNlbHNlCisjZGVmaW5lIGZwaTEgZnBpCisjZW5kaWYKKwkJCXN3aXRjaCgoaSA9IGdldGhleCgmcywgJmZwaTEsICZleHAsICZiYiwgc2lnbikpICYgU1RSVE9HX1JldG1hc2spIHsKKwkJCSAgY2FzZSBTVFJUT0dfTm9NZW1vcnk6CisJCQkJZ290byBvdmZsOworCQkJICBjYXNlIFNUUlRPR19Ob051bWJlcjoKKwkJCQlzID0gczAwOworCQkJCXNpZ24gPSAwOworCQkJICBjYXNlIFNUUlRPR19aZXJvOgorCQkJCWJyZWFrOworCQkJICBkZWZhdWx0OgorCQkJCWlmIChiYikgeworCQkJCQljb3B5Yml0cyhiaXRzLCBmcGkubmJpdHMsIGJiKTsKKwkJCQkJQmZyZWUoYmIpOworCQkJCQl9CisJCQkJVUx0b2QoKChVKikmcnYpLT5MLCBiaXRzLCBleHAsIGkpOworCQkJICB9fQorCQkJZ290byByZXQ7CisJCSAgfQorCQl9CisjZW5kaWYgLyp9Ki8KKwkJbnowID0gMTsKKwkJd2hpbGUoKisrcyA9PSAnMCcpIDsKKwkJaWYgKCEqcykKKwkJCWdvdG8gcmV0OworCQl9CisJczAgPSBzOworCXkgPSB6ID0gMDsKKwlmb3IobmQgPSBuZiA9IDA7IChjID0gKnMpID49ICcwJyAmJiBjIDw9ICc5JzsgbmQrKywgcysrKQorCQlpZiAobmQgPCA5KQorCQkJeSA9IDEwKnkgKyBjIC0gJzAnOworCQllbHNlIGlmIChuZCA8IDE2KQorCQkJeiA9IDEwKnogKyBjIC0gJzAnOworCW5kMCA9IG5kOworI2lmZGVmIFVTRV9MT0NBTEUKKwlpZiAoYyA9PSAqZGVjaW1hbHBvaW50KSB7CisJCWZvcihpID0gMTsgZGVjaW1hbHBvaW50W2ldOyArK2kpCisJCQlpZiAoc1tpXSAhPSBkZWNpbWFscG9pbnRbaV0pCisJCQkJZ290byBkaWdfZG9uZTsKKwkJcyArPSBpOworCQljID0gKnM7CisjZWxzZQorCWlmIChjID09ICcuJykgeworCQljID0gKisrczsKKyNlbmRpZgorCQlkZWNwdCA9IDE7CisJCWlmICghbmQpIHsKKwkJCWZvcig7IGMgPT0gJzAnOyBjID0gKisrcykKKwkJCQlueisrOworCQkJaWYgKGMgPiAnMCcgJiYgYyA8PSAnOScpIHsKKwkJCQlzMCA9IHM7CisJCQkJbmYgKz0gbno7CisJCQkJbnogPSAwOworCQkJCWdvdG8gaGF2ZV9kaWc7CisJCQkJfQorCQkJZ290byBkaWdfZG9uZTsKKwkJCX0KKwkJZm9yKDsgYyA+PSAnMCcgJiYgYyA8PSAnOSc7IGMgPSAqKytzKSB7CisgaGF2ZV9kaWc6CisJCQlueisrOworCQkJaWYgKGMgLT0gJzAnKSB7CisJCQkJbmYgKz0gbno7CisJCQkJZm9yKGkgPSAxOyBpIDwgbno7IGkrKykKKwkJCQkJaWYgKG5kKysgPCA5KQorCQkJCQkJeSAqPSAxMDsKKwkJCQkJZWxzZSBpZiAobmQgPD0gREJMX0RJRyArIDEpCisJCQkJCQl6ICo9IDEwOworCQkJCWlmIChuZCsrIDwgOSkKKwkJCQkJeSA9IDEwKnkgKyBjOworCQkJCWVsc2UgaWYgKG5kIDw9IERCTF9ESUcgKyAxKQorCQkJCQl6ID0gMTAqeiArIGM7CisJCQkJbnogPSAwOworCQkJCX0KKwkJCX0KKwkJfS8qfSovCisgZGlnX2RvbmU6CisJZSA9IDA7CisJaWYgKGMgPT0gJ2UnIHx8IGMgPT0gJ0UnKSB7CisJCWlmICghbmQgJiYgIW56ICYmICFuejApIHsKKwkJCWdvdG8gcmV0MDsKKwkJCX0KKwkJczAwID0gczsKKwkJZXNpZ24gPSAwOworCQlzd2l0Y2goYyA9ICorK3MpIHsKKwkJCWNhc2UgJy0nOgorCQkJCWVzaWduID0gMTsKKwkJCWNhc2UgJysnOgorCQkJCWMgPSAqKytzOworCQkJfQorCQlpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsKKwkJCXdoaWxlKGMgPT0gJzAnKQorCQkJCWMgPSAqKytzOworCQkJaWYgKGMgPiAnMCcgJiYgYyA8PSAnOScpIHsKKwkJCQlMID0gYyAtICcwJzsKKwkJCQlzMSA9IHM7CisJCQkJd2hpbGUoKGMgPSAqKytzKSA+PSAnMCcgJiYgYyA8PSAnOScpCisJCQkJCUwgPSAxMCpMICsgYyAtICcwJzsKKwkJCQlpZiAocyAtIHMxID4gOCB8fCBMID4gMTk5OTkpCisJCQkJCS8qIEF2b2lkIGNvbmZ1c2lvbiBmcm9tIGV4cG9uZW50cworCQkJCQkgKiBzbyBsYXJnZSB0aGF0IGUgbWlnaHQgb3ZlcmZsb3cuCisJCQkJCSAqLworCQkJCQllID0gMTk5OTk7IC8qIHNhZmUgZm9yIDE2IGJpdCBpbnRzICovCisJCQkJZWxzZQorCQkJCQllID0gKGludClMOworCQkJCWlmIChlc2lnbikKKwkJCQkJZSA9IC1lOworCQkJCX0KKwkJCWVsc2UKKwkJCQllID0gMDsKKwkJCX0KKwkJZWxzZQorCQkJcyA9IHMwMDsKKwkJfQorCWlmICghbmQpIHsKKwkJaWYgKCFueiAmJiAhbnowKSB7CisjaWZkZWYgSU5GTkFOX0NIRUNLCisJCQkvKiBDaGVjayBmb3IgTmFuIGFuZCBJbmZpbml0eSAqLworCQkJVUxvbmcgYml0c1syXTsKKwkJCXN0YXRpYyBGUEkgZnBpbmFuID0JLyogb25seSA1MiBleHBsaWNpdCBiaXRzICovCisJCQkJeyA1MiwgMS0xMDIzLTUzKzEsIDIwNDYtMTAyMy01MysxLCAxLCBTSSB9OworCQkJaWYgKCFkZWNwdCkKKwkJCSBzd2l0Y2goYykgeworCQkJICBjYXNlICdpJzoKKwkJCSAgY2FzZSAnSSc6CisJCQkJaWYgKG1hdGNoKCZzLCJuZiIpKSB7CisJCQkJCS0tczsKKwkJCQkJaWYgKCFtYXRjaCgmcywiaW5pdHkiKSkKKwkJCQkJCSsrczsKKwkJCQkJd29yZDAoJnJ2KSA9IDB4N2ZmMDAwMDA7CisJCQkJCXdvcmQxKCZydikgPSAwOworCQkJCQlnb3RvIHJldDsKKwkJCQkJfQorCQkJCWJyZWFrOworCQkJICBjYXNlICduJzoKKwkJCSAgY2FzZSAnTic6CisJCQkJaWYgKG1hdGNoKCZzLCAiYW4iKSkgeworI2lmbmRlZiBOb19IZXhfTmFOCisJCQkJCWlmICgqcyA9PSAnKCcgLyopKi8KKwkJCQkJICYmIGhleG5hbigmcywgJmZwaW5hbiwgYml0cykKKwkJCQkJCQk9PSBTVFJUT0dfTmFOYml0cykgeworCQkJCQkJd29yZDAoJnJ2KSA9IDB4N2ZmMDAwMDAgfCBiaXRzWzFdOworCQkJCQkJd29yZDEoJnJ2KSA9IGJpdHNbMF07CisJCQkJCQl9CisJCQkJCWVsc2UgeworI2VuZGlmCisJCQkJCQl3b3JkMCgmcnYpID0gTkFOX1dPUkQwOworCQkJCQkJd29yZDEoJnJ2KSA9IE5BTl9XT1JEMTsKKyNpZm5kZWYgTm9fSGV4X05hTgorCQkJCQkJfQorI2VuZGlmCisJCQkJCWdvdG8gcmV0OworCQkJCQl9CisJCQkgIH0KKyNlbmRpZiAvKiBJTkZOQU5fQ0hFQ0sgKi8KKyByZXQwOgorCQkJcyA9IHMwMDsKKwkJCXNpZ24gPSAwOworCQkJfQorCQlnb3RvIHJldDsKKwkJfQorCWUxID0gZSAtPSBuZjsKKworCS8qIE5vdyB3ZSBoYXZlIG5kMCBkaWdpdHMsIHN0YXJ0aW5nIGF0IHMwLCBmb2xsb3dlZCBieSBhCisJICogZGVjaW1hbCBwb2ludCwgZm9sbG93ZWQgYnkgbmQtbmQwIGRpZ2l0cy4gIFRoZSBudW1iZXIgd2UncmUKKwkgKiBhZnRlciBpcyB0aGUgaW50ZWdlciByZXByZXNlbnRlZCBieSB0aG9zZSBkaWdpdHMgdGltZXMKKwkgKiAxMCoqZSAqLworCisJaWYgKCFuZDApCisJCW5kMCA9IG5kOworCWsgPSBuZCA8IERCTF9ESUcgKyAxID8gbmQgOiBEQkxfRElHICsgMTsKKwlkdmFsKCZydikgPSB5OworCWlmIChrID4gOSkgeworI2lmZGVmIFNFVF9JTkVYQUNUCisJCWlmIChrID4gREJMX0RJRykKKwkJCW9sZGluZXhhY3QgPSBnZXRfaW5leGFjdCgpOworI2VuZGlmCisJCWR2YWwoJnJ2KSA9IHRlbnNbayAtIDldICogZHZhbCgmcnYpICsgejsKKwkJfQorCWlmIChuZCA8PSBEQkxfRElHCisjaWZuZGVmIFJORF9QUk9EUVVPVAorI2lmbmRlZiBIb25vcl9GTFRfUk9VTkRTCisJCSYmIEZsdF9Sb3VuZHMgPT0gMQorI2VuZGlmCisjZW5kaWYKKwkJCSkgeworCQlpZiAoIWUpCisJCQlnb3RvIHJldDsKKyNpZm5kZWYgUk9VTkRfQklBU0VEX3dpdGhvdXRfUm91bmRfVXAKKwkJaWYgKGUgPiAwKSB7CisJCQlpZiAoZSA8PSBUZW5fcG1heCkgeworI2lmZGVmIFZBWAorCQkJCWdvdG8gdmF4X292ZmxfY2hlY2s7CisjZWxzZQorI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKwkJCQkvKiByb3VuZCBjb3JyZWN0bHkgRkxUX1JPVU5EUyA9IDIgb3IgMyAqLworCQkJCWlmIChzaWduKSB7CisJCQkJCXJ2LmQgPSAtcnYuZDsKKwkJCQkJc2lnbiA9IDA7CisJCQkJCX0KKyNlbmRpZgorCQkJCS8qIHJ2ID0gKi8gcm91bmRlZF9wcm9kdWN0KGR2YWwoJnJ2KSwgdGVuc1tlXSk7CisJCQkJZ290byByZXQ7CisjZW5kaWYKKwkJCQl9CisJCQlpID0gREJMX0RJRyAtIG5kOworCQkJaWYgKGUgPD0gVGVuX3BtYXggKyBpKSB7CisJCQkJLyogQSBmYW5jaWVyIHRlc3Qgd291bGQgc29tZXRpbWVzIGxldCB1cyBkbworCQkJCSAqIHRoaXMgZm9yIGxhcmdlciBpIHZhbHVlcy4KKwkJCQkgKi8KKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisJCQkJLyogcm91bmQgY29ycmVjdGx5IEZMVF9ST1VORFMgPSAyIG9yIDMgKi8KKwkJCQlpZiAoc2lnbikgeworCQkJCQlydi5kID0gLXJ2LmQ7CisJCQkJCXNpZ24gPSAwOworCQkJCQl9CisjZW5kaWYKKwkJCQllIC09IGk7CisJCQkJZHZhbCgmcnYpICo9IHRlbnNbaV07CisjaWZkZWYgVkFYCisJCQkJLyogVkFYIGV4cG9uZW50IHJhbmdlIGlzIHNvIG5hcnJvdyB3ZSBtdXN0CisJCQkJICogd29ycnkgYWJvdXQgb3ZlcmZsb3cgaGVyZS4uLgorCQkJCSAqLworIHZheF9vdmZsX2NoZWNrOgorCQkJCXdvcmQwKCZydikgLT0gUCpFeHBfbXNrMTsKKwkJCQkvKiBydiA9ICovIHJvdW5kZWRfcHJvZHVjdChkdmFsKCZydiksIHRlbnNbZV0pOworCQkJCWlmICgod29yZDAoJnJ2KSAmIEV4cF9tYXNrKQorCQkJCSA+IEV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLTEtUCkpCisJCQkJCWdvdG8gb3ZmbDsKKwkJCQl3b3JkMCgmcnYpICs9IFAqRXhwX21zazE7CisjZWxzZQorCQkJCS8qIHJ2ID0gKi8gcm91bmRlZF9wcm9kdWN0KGR2YWwoJnJ2KSwgdGVuc1tlXSk7CisjZW5kaWYKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisJCQl9CisjaWZuZGVmIEluYWNjdXJhdGVfRGl2aWRlCisJCWVsc2UgaWYgKGUgPj0gLVRlbl9wbWF4KSB7CisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCQkJLyogcm91bmQgY29ycmVjdGx5IEZMVF9ST1VORFMgPSAyIG9yIDMgKi8KKwkJCWlmIChzaWduKSB7CisJCQkJcnYuZCA9IC1ydi5kOworCQkJCXNpZ24gPSAwOworCQkJCX0KKyNlbmRpZgorCQkJLyogcnYgPSAqLyByb3VuZGVkX3F1b3RpZW50KGR2YWwoJnJ2KSwgdGVuc1stZV0pOworCQkJZ290byByZXQ7CisJCQl9CisjZW5kaWYKKyNlbmRpZiAvKiBST1VORF9CSUFTRURfd2l0aG91dF9Sb3VuZF9VcCAqLworCQl9CisJZTEgKz0gbmQgLSBrOworCisjaWZkZWYgSUVFRV9Bcml0aAorI2lmZGVmIFNFVF9JTkVYQUNUCisJaW5leGFjdCA9IDE7CisJaWYgKGsgPD0gREJMX0RJRykKKwkJb2xkaW5leGFjdCA9IGdldF9pbmV4YWN0KCk7CisjZW5kaWYKKyNpZmRlZiBBdm9pZF9VbmRlcmZsb3cKKwlzY2FsZSA9IDA7CisjZW5kaWYKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisJaWYgKFJvdW5kaW5nID49IDIpIHsKKwkJaWYgKHNpZ24pCisJCQlSb3VuZGluZyA9IFJvdW5kaW5nID09IDIgPyAwIDogMjsKKwkJZWxzZQorCQkJaWYgKFJvdW5kaW5nICE9IDIpCisJCQkJUm91bmRpbmcgPSAwOworCQl9CisjZW5kaWYKKyNlbmRpZiAvKklFRUVfQXJpdGgqLworCisJLyogR2V0IHN0YXJ0aW5nIGFwcHJveGltYXRpb24gPSBydiAqIDEwKiplMSAqLworCisJaWYgKGUxID4gMCkgeworCQlpZiAoIChpID0gZTEgJiAxNSkgIT0wKQorCQkJZHZhbCgmcnYpICo9IHRlbnNbaV07CisJCWlmIChlMSAmPSB+MTUpIHsKKwkJCWlmIChlMSA+IERCTF9NQVhfMTBfRVhQKSB7Cisgb3ZmbDoKKwkJCQkvKiBDYW4ndCB0cnVzdCBIVUdFX1ZBTCAqLworI2lmZGVmIElFRUVfQXJpdGgKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisJCQkJc3dpdGNoKFJvdW5kaW5nKSB7CisJCQkJICBjYXNlIDA6IC8qIHRvd2FyZCAwICovCisJCQkJICBjYXNlIDM6IC8qIHRvd2FyZCAtaW5maW5pdHkgKi8KKwkJCQkJd29yZDAoJnJ2KSA9IEJpZzA7CisJCQkJCXdvcmQxKCZydikgPSBCaWcxOworCQkJCQlicmVhazsKKwkJCQkgIGRlZmF1bHQ6CisJCQkJCXdvcmQwKCZydikgPSBFeHBfbWFzazsKKwkJCQkJd29yZDEoJnJ2KSA9IDA7CisJCQkJICB9CisjZWxzZSAvKkhvbm9yX0ZMVF9ST1VORFMqLworCQkJCXdvcmQwKCZydikgPSBFeHBfbWFzazsKKwkJCQl3b3JkMSgmcnYpID0gMDsKKyNlbmRpZiAvKkhvbm9yX0ZMVF9ST1VORFMqLworI2lmZGVmIFNFVF9JTkVYQUNUCisJCQkJLyogc2V0IG92ZXJmbG93IGJpdCAqLworCQkJCWR2YWwoJnJ2MCkgPSAxZTMwMDsKKwkJCQlkdmFsKCZydjApICo9IGR2YWwoJnJ2MCk7CisjZW5kaWYKKyNlbHNlIC8qSUVFRV9Bcml0aCovCisJCQkJd29yZDAoJnJ2KSA9IEJpZzA7CisJCQkJd29yZDEoJnJ2KSA9IEJpZzE7CisjZW5kaWYgLypJRUVFX0FyaXRoKi8KKyByYW5nZV9lcnI6CisJCQkJaWYgKGJkMCkgeworCQkJCQlCZnJlZShiYik7CisJCQkJCUJmcmVlKGJkKTsKKwkJCQkJQmZyZWUoYnMpOworCQkJCQlCZnJlZShiZDApOworCQkJCQlCZnJlZShkZWx0YSk7CisJCQkJCX0KKyNpZm5kZWYgTk9fRVJSTk8KKwkJCQllcnJubyA9IEVSQU5HRTsKKyNlbmRpZgorCQkJCWdvdG8gcmV0OworCQkJCX0KKwkJCWUxID4+PSA0OworCQkJZm9yKGogPSAwOyBlMSA+IDE7IGorKywgZTEgPj49IDEpCisJCQkJaWYgKGUxICYgMSkKKwkJCQkJZHZhbCgmcnYpICo9IGJpZ3RlbnNbal07CisJCS8qIFRoZSBsYXN0IG11bHRpcGxpY2F0aW9uIGNvdWxkIG92ZXJmbG93LiAqLworCQkJd29yZDAoJnJ2KSAtPSBQKkV4cF9tc2sxOworCQkJZHZhbCgmcnYpICo9IGJpZ3RlbnNbal07CisJCQlpZiAoKHogPSB3b3JkMCgmcnYpICYgRXhwX21hc2spCisJCQkgPiBFeHBfbXNrMSooREJMX01BWF9FWFArQmlhcy1QKSkKKwkJCQlnb3RvIG92Zmw7CisJCQlpZiAoeiA+IEV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLTEtUCkpIHsKKwkJCQkvKiBzZXQgdG8gbGFyZ2VzdCBudW1iZXIgKi8KKwkJCQkvKiAoQ2FuJ3QgdHJ1c3QgREJMX01BWCkgKi8KKwkJCQl3b3JkMCgmcnYpID0gQmlnMDsKKwkJCQl3b3JkMSgmcnYpID0gQmlnMTsKKwkJCQl9CisJCQllbHNlCisJCQkJd29yZDAoJnJ2KSArPSBQKkV4cF9tc2sxOworCQkJfQorCQl9CisJZWxzZSBpZiAoZTEgPCAwKSB7CisJCWUxID0gLWUxOworCQlpZiAoIChpID0gZTEgJiAxNSkgIT0wKQorCQkJZHZhbCgmcnYpIC89IHRlbnNbaV07CisJCWlmIChlMSA+Pj0gNCkgeworCQkJaWYgKGUxID49IDEgPDwgbl9iaWd0ZW5zKQorCQkJCWdvdG8gdW5kZmw7CisjaWZkZWYgQXZvaWRfVW5kZXJmbG93CisJCQlpZiAoZTEgJiBTY2FsZV9CaXQpCisJCQkJc2NhbGUgPSAyKlA7CisJCQlmb3IoaiA9IDA7IGUxID4gMDsgaisrLCBlMSA+Pj0gMSkKKwkJCQlpZiAoZTEgJiAxKQorCQkJCQlkdmFsKCZydikgKj0gdGlueXRlbnNbal07CisJCQlpZiAoc2NhbGUgJiYgKGogPSAyKlAgKyAxIC0gKCh3b3JkMCgmcnYpICYgRXhwX21hc2spCisJCQkJCQk+PiBFeHBfc2hpZnQpKSA+IDApIHsKKwkJCQkvKiBzY2FsZWQgcnYgaXMgZGVub3JtYWw7IHphcCBqIGxvdyBiaXRzICovCisJCQkJaWYgKGogPj0gMzIpIHsKKwkJCQkJd29yZDEoJnJ2KSA9IDA7CisJCQkJCWlmIChqID49IDUzKQorCQkJCQkgd29yZDAoJnJ2KSA9IChQKzIpKkV4cF9tc2sxOworCQkJCQllbHNlCisJCQkJCSB3b3JkMCgmcnYpICY9IDB4ZmZmZmZmZmYgPDwgKGotMzIpOworCQkJCQl9CisJCQkJZWxzZQorCQkJCQl3b3JkMSgmcnYpICY9IDB4ZmZmZmZmZmYgPDwgajsKKwkJCQl9CisjZWxzZQorCQkJZm9yKGogPSAwOyBlMSA+IDE7IGorKywgZTEgPj49IDEpCisJCQkJaWYgKGUxICYgMSkKKwkJCQkJZHZhbCgmcnYpICo9IHRpbnl0ZW5zW2pdOworCQkJLyogVGhlIGxhc3QgbXVsdGlwbGljYXRpb24gY291bGQgdW5kZXJmbG93LiAqLworCQkJZHZhbCgmcnYwKSA9IGR2YWwoJnJ2KTsKKwkJCWR2YWwoJnJ2KSAqPSB0aW55dGVuc1tqXTsKKwkJCWlmICghZHZhbCgmcnYpKSB7CisJCQkJZHZhbCgmcnYpID0gMi4qZHZhbCgmcnYwKTsKKwkJCQlkdmFsKCZydikgKj0gdGlueXRlbnNbal07CisjZW5kaWYKKwkJCQlpZiAoIWR2YWwoJnJ2KSkgeworIHVuZGZsOgorCQkJCQlkdmFsKCZydikgPSAwLjsKKwkJCQkJZ290byByYW5nZV9lcnI7CisJCQkJCX0KKyNpZm5kZWYgQXZvaWRfVW5kZXJmbG93CisJCQkJd29yZDAoJnJ2KSA9IFRpbnkwOworCQkJCXdvcmQxKCZydikgPSBUaW55MTsKKwkJCQkvKiBUaGUgcmVmaW5lbWVudCBiZWxvdyB3aWxsIGNsZWFuCisJCQkJICogdGhpcyBhcHByb3hpbWF0aW9uIHVwLgorCQkJCSAqLworCQkJCX0KKyNlbmRpZgorCQkJfQorCQl9CisKKwkvKiBOb3cgdGhlIGhhcmQgcGFydCAtLSBhZGp1c3RpbmcgcnYgdG8gdGhlIGNvcnJlY3QgdmFsdWUuKi8KKworCS8qIFB1dCBkaWdpdHMgaW50byBiZDogdHJ1ZSB2YWx1ZSA9IGJkICogMTBeZSAqLworCisJYmQwID0gczJiKHMwLCBuZDAsIG5kLCB5LCBkcGxlbik7CisJaWYgKGJkMCA9PSBOVUxMKQorCQlnb3RvIG92Zmw7CisKKwlmb3IoOzspIHsKKwkJYmQgPSBCYWxsb2MoYmQwLT5rKTsKKwkJaWYgKGJkID09IE5VTEwpCisJCQlnb3RvIG92Zmw7CisJCUJjb3B5KGJkLCBiZDApOworCQliYiA9IGQyYihkdmFsKCZydiksICZiYmUsICZiYmJpdHMpOwkvKiBydiA9IGJiICogMl5iYmUgKi8KKwkJaWYgKGJiID09IE5VTEwpCisJCQlnb3RvIG92Zmw7CisJCWJzID0gaTJiKDEpOworCQlpZiAoYnMgPT0gTlVMTCkKKwkJCWdvdG8gb3ZmbDsKKworCQlpZiAoZSA+PSAwKSB7CisJCQliYjIgPSBiYjUgPSAwOworCQkJYmQyID0gYmQ1ID0gZTsKKwkJCX0KKwkJZWxzZSB7CisJCQliYjIgPSBiYjUgPSAtZTsKKwkJCWJkMiA9IGJkNSA9IDA7CisJCQl9CisJCWlmIChiYmUgPj0gMCkKKwkJCWJiMiArPSBiYmU7CisJCWVsc2UKKwkJCWJkMiAtPSBiYmU7CisJCWJzMiA9IGJiMjsKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisJCWlmIChSb3VuZGluZyAhPSAxKQorCQkJYnMyKys7CisjZW5kaWYKKyNpZmRlZiBBdm9pZF9VbmRlcmZsb3cKKwkJTHNiID0gTFNCOworCQlMc2IxID0gMDsKKwkJaiA9IGJiZSAtIHNjYWxlOworCQlpID0gaiArIGJiYml0cyAtIDE7CS8qIGxvZ2IocnYpICovCisJCWogPSBQICsgMSAtIGJiYml0czsKKwkJaWYgKGkgPCBFbWluKSB7CS8qIGRlbm9ybWFsICovCisJCQlpID0gRW1pbiAtIGk7CisJCQlqIC09IGk7CisJCQlpZiAoaSA8IDMyKQorCQkJCUxzYiA8PD0gaTsKKwkJCWVsc2UKKwkJCQlMc2IxID0gTHNiIDw8IChpLTMyKTsKKwkJCX0KKyNlbHNlIC8qQXZvaWRfVW5kZXJmbG93Ki8KKyNpZmRlZiBTdWRkZW5fVW5kZXJmbG93CisjaWZkZWYgSUJNCisJCWogPSAxICsgNCpQIC0gMyAtIGJiYml0cyArICgoYmJlICsgYmJiaXRzIC0gMSkgJiAzKTsKKyNlbHNlCisJCWogPSBQICsgMSAtIGJiYml0czsKKyNlbmRpZgorI2Vsc2UgLypTdWRkZW5fVW5kZXJmbG93Ki8KKwkJaiA9IGJiZTsKKwkJaSA9IGogKyBiYmJpdHMgLSAxOwkvKiBsb2diKCZydikgKi8KKwkJaWYgKGkgPCBFbWluKQkvKiBkZW5vcm1hbCAqLworCQkJaiArPSBQIC0gRW1pbjsKKwkJZWxzZQorCQkJaiA9IFAgKyAxIC0gYmJiaXRzOworI2VuZGlmIC8qU3VkZGVuX1VuZGVyZmxvdyovCisjZW5kaWYgLypBdm9pZF9VbmRlcmZsb3cqLworCQliYjIgKz0gajsKKwkJYmQyICs9IGo7CisjaWZkZWYgQXZvaWRfVW5kZXJmbG93CisJCWJkMiArPSBzY2FsZTsKKyNlbmRpZgorCQlpID0gYmIyIDwgYmQyID8gYmIyIDogYmQyOworCQlpZiAoaSA+IGJzMikKKwkJCWkgPSBiczI7CisJCWlmIChpID4gMCkgeworCQkJYmIyIC09IGk7CisJCQliZDIgLT0gaTsKKwkJCWJzMiAtPSBpOworCQkJfQorCQlpZiAoYmI1ID4gMCkgeworCQkJYnMgPSBwb3c1bXVsdChicywgYmI1KTsKKwkJCWlmIChicyA9PSBOVUxMKQorCQkJCWdvdG8gb3ZmbDsKKwkJCWJiMSA9IG11bHQoYnMsIGJiKTsKKwkJCWlmIChiYjEgPT0gTlVMTCkKKwkJCQlnb3RvIG92Zmw7CisJCQlCZnJlZShiYik7CisJCQliYiA9IGJiMTsKKwkJCX0KKwkJaWYgKGJiMiA+IDApIHsKKwkJCWJiID0gbHNoaWZ0KGJiLCBiYjIpOworCQkJaWYgKGJiID09IE5VTEwpCisJCQkJZ290byBvdmZsOworCQkJfQorCQlpZiAoYmQ1ID4gMCkgeworCQkJYmQgPSBwb3c1bXVsdChiZCwgYmQ1KTsKKwkJCWlmIChiZCA9PSBOVUxMKQorCQkJCWdvdG8gb3ZmbDsKKwkJCX0KKwkJaWYgKGJkMiA+IDApIHsKKwkJCWJkID0gbHNoaWZ0KGJkLCBiZDIpOworCQkJaWYgKGJkID09IE5VTEwpCisJCQkJZ290byBvdmZsOworCQkJfQorCQlpZiAoYnMyID4gMCkgeworCQkJYnMgPSBsc2hpZnQoYnMsIGJzMik7CisJCQlpZiAoYnMgPT0gTlVMTCkKKwkJCQlnb3RvIG92Zmw7CisJCQl9CisJCWRlbHRhID0gZGlmZihiYiwgYmQpOworCQlpZiAoZGVsdGEgPT0gTlVMTCkKKwkJCWdvdG8gb3ZmbDsKKwkJZHNpZ24gPSBkZWx0YS0+c2lnbjsKKwkJZGVsdGEtPnNpZ24gPSAwOworCQlpID0gY21wKGRlbHRhLCBicyk7CisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCQlpZiAoUm91bmRpbmcgIT0gMSkgeworCQkJaWYgKGkgPCAwKSB7CisJCQkJLyogRXJyb3IgaXMgbGVzcyB0aGFuIGFuIHVscCAqLworCQkJCWlmICghZGVsdGEtPnhbMF0gJiYgZGVsdGEtPndkcyA8PSAxKSB7CisJCQkJCS8qIGV4YWN0ICovCisjaWZkZWYgU0VUX0lORVhBQ1QKKwkJCQkJaW5leGFjdCA9IDA7CisjZW5kaWYKKwkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQlpZiAoUm91bmRpbmcpIHsKKwkJCQkJaWYgKGRzaWduKSB7CisJCQkJCQlkdmFsKCZhZGopID0gMS47CisJCQkJCQlnb3RvIGFwcGx5X2FkajsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCWVsc2UgaWYgKCFkc2lnbikgeworCQkJCQlkdmFsKCZhZGopID0gLTEuOworCQkJCQlpZiAoIXdvcmQxKCZydikKKwkJCQkJICYmICEod29yZDAoJnJ2KSAmIEZyYWNfbWFzaykpIHsKKwkJCQkJCXkgPSB3b3JkMCgmcnYpICYgRXhwX21hc2s7CisjaWZkZWYgQXZvaWRfVW5kZXJmbG93CisJCQkJCQlpZiAoIXNjYWxlIHx8IHkgPiAyKlAqRXhwX21zazEpCisjZWxzZQorCQkJCQkJaWYgKHkpCisjZW5kaWYKKwkJCQkJCSAgeworCQkJCQkJICBkZWx0YSA9IGxzaGlmdChkZWx0YSxMb2cyUCk7CisJCQkJCQkgIGlmIChkZWx0YSA9PSBOVUxMKQorCQkJCQkJCWdvdG8gb3ZmbDsKKwkJCQkJCSAgaWYgKGNtcChkZWx0YSwgYnMpIDw9IDApCisJCQkJCQkJZHZhbCgmYWRqKSA9IC0wLjU7CisJCQkJCQkgIH0KKwkJCQkJCX0KKyBhcHBseV9hZGo6CisjaWZkZWYgQXZvaWRfVW5kZXJmbG93CisJCQkJCWlmIChzY2FsZSAmJiAoeSA9IHdvcmQwKCZydikgJiBFeHBfbWFzaykKKwkJCQkJCTw9IDIqUCpFeHBfbXNrMSkKKwkJCQkJICB3b3JkMCgmYWRqKSArPSAoMipQKzEpKkV4cF9tc2sxIC0geTsKKyNlbHNlCisjaWZkZWYgU3VkZGVuX1VuZGVyZmxvdworCQkJCQlpZiAoKHdvcmQwKCZydikgJiBFeHBfbWFzaykgPD0KKwkJCQkJCQlQKkV4cF9tc2sxKSB7CisJCQkJCQl3b3JkMCgmcnYpICs9IFAqRXhwX21zazE7CisJCQkJCQlkdmFsKCZydikgKz0gYWRqKnVscCgmcnYpOworCQkJCQkJd29yZDAoJnJ2KSAtPSBQKkV4cF9tc2sxOworCQkJCQkJfQorCQkJCQllbHNlCisjZW5kaWYgLypTdWRkZW5fVW5kZXJmbG93Ki8KKyNlbmRpZiAvKkF2b2lkX1VuZGVyZmxvdyovCisJCQkJCWR2YWwoJnJ2KSArPSBhZGouZCp1bHAoJnJ2KTsKKwkJCQkJfQorCQkJCWJyZWFrOworCQkJCX0KKwkJCWR2YWwoJmFkaikgPSByYXRpbyhkZWx0YSwgYnMpOworCQkJaWYgKGFkai5kIDwgMS4pCisJCQkJZHZhbCgmYWRqKSA9IDEuOworCQkJaWYgKGFkai5kIDw9IDB4N2ZmZmZmZmUpIHsKKwkJCQkvKiBkdmFsKCZhZGopID0gUm91bmRpbmcgPyBjZWlsKCZhZGopIDogZmxvb3IoJmFkaik7ICovCisJCQkJeSA9IGFkai5kOworCQkJCWlmICh5ICE9IGFkai5kKSB7CisJCQkJCWlmICghKChSb3VuZGluZz4+MSkgXiBkc2lnbikpCisJCQkJCQl5Kys7CisJCQkJCWR2YWwoJmFkaikgPSB5OworCQkJCQl9CisJCQkJfQorI2lmZGVmIEF2b2lkX1VuZGVyZmxvdworCQkJaWYgKHNjYWxlICYmICh5ID0gd29yZDAoJnJ2KSAmIEV4cF9tYXNrKSA8PSAyKlAqRXhwX21zazEpCisJCQkJd29yZDAoJmFkaikgKz0gKDIqUCsxKSpFeHBfbXNrMSAtIHk7CisjZWxzZQorI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJCWlmICgod29yZDAoJnJ2KSAmIEV4cF9tYXNrKSA8PSBQKkV4cF9tc2sxKSB7CisJCQkJd29yZDAoJnJ2KSArPSBQKkV4cF9tc2sxOworCQkJCWR2YWwoJmFkaikgKj0gdWxwKCZydik7CisJCQkJaWYgKGRzaWduKQorCQkJCQlkdmFsKCZydikgKz0gYWRqOworCQkJCWVsc2UKKwkJCQkJZHZhbCgmcnYpIC09IGFkajsKKwkJCQl3b3JkMCgmcnYpIC09IFAqRXhwX21zazE7CisJCQkJZ290byBjb250OworCQkJCX0KKyNlbmRpZiAvKlN1ZGRlbl9VbmRlcmZsb3cqLworI2VuZGlmIC8qQXZvaWRfVW5kZXJmbG93Ki8KKwkJCWR2YWwoJmFkaikgKj0gdWxwKCZydik7CisJCQlpZiAoZHNpZ24pIHsKKwkJCQlpZiAod29yZDAoJnJ2KSA9PSBCaWcwICYmIHdvcmQxKCZydikgPT0gQmlnMSkKKwkJCQkJZ290byBvdmZsOworCQkJCWR2YWwoJnJ2KSArPSBhZGouZDsKKwkJCQl9CisJCQllbHNlCisJCQkJZHZhbCgmcnYpIC09IGFkai5kOworCQkJZ290byBjb250OworCQkJfQorI2VuZGlmIC8qSG9ub3JfRkxUX1JPVU5EUyovCisKKwkJaWYgKGkgPCAwKSB7CisJCQkvKiBFcnJvciBpcyBsZXNzIHRoYW4gaGFsZiBhbiB1bHAgLS0gY2hlY2sgZm9yCisJCQkgKiBzcGVjaWFsIGNhc2Ugb2YgbWFudGlzc2EgYSBwb3dlciBvZiB0d28uCisJCQkgKi8KKwkJCWlmIChkc2lnbiB8fCB3b3JkMSgmcnYpIHx8IHdvcmQwKCZydikgJiBCbmRyeV9tYXNrCisjaWZkZWYgSUVFRV9Bcml0aAorI2lmZGVmIEF2b2lkX1VuZGVyZmxvdworCQkJIHx8ICh3b3JkMCgmcnYpICYgRXhwX21hc2spIDw9ICgyKlArMSkqRXhwX21zazEKKyNlbHNlCisJCQkgfHwgKHdvcmQwKCZydikgJiBFeHBfbWFzaykgPD0gRXhwX21zazEKKyNlbmRpZgorI2VuZGlmCisJCQkJKSB7CisjaWZkZWYgU0VUX0lORVhBQ1QKKwkJCQlpZiAoIWRlbHRhLT54WzBdICYmIGRlbHRhLT53ZHMgPD0gMSkKKwkJCQkJaW5leGFjdCA9IDA7CisjZW5kaWYKKwkJCQlicmVhazsKKwkJCQl9CisJCQlpZiAoIWRlbHRhLT54WzBdICYmIGRlbHRhLT53ZHMgPD0gMSkgeworCQkJCS8qIGV4YWN0IHJlc3VsdCAqLworI2lmZGVmIFNFVF9JTkVYQUNUCisJCQkJaW5leGFjdCA9IDA7CisjZW5kaWYKKwkJCQlicmVhazsKKwkJCQl9CisJCQlkZWx0YSA9IGxzaGlmdChkZWx0YSxMb2cyUCk7CisJCQlpZiAoZGVsdGEgPT0gTlVMTCkKKwkJCQlnb3RvIG92Zmw7CisJCQlpZiAoY21wKGRlbHRhLCBicykgPiAwKQorCQkJCWdvdG8gZHJvcF9kb3duOworCQkJYnJlYWs7CisJCQl9CisJCWlmIChpID09IDApIHsKKwkJCS8qIGV4YWN0bHkgaGFsZi13YXkgYmV0d2VlbiAqLworCQkJaWYgKGRzaWduKSB7CisJCQkJaWYgKCh3b3JkMCgmcnYpICYgQm5kcnlfbWFzazEpID09IEJuZHJ5X21hc2sxCisJCQkJICYmICB3b3JkMSgmcnYpID09ICgKKyNpZmRlZiBBdm9pZF9VbmRlcmZsb3cKKwkJCShzY2FsZSAmJiAoeSA9IHdvcmQwKCZydikgJiBFeHBfbWFzaykgPD0gMipQKkV4cF9tc2sxKQorCQk/ICgweGZmZmZmZmZmICYgKDB4ZmZmZmZmZmYgPDwgKDIqUCsxLSh5Pj5FeHBfc2hpZnQpKSkpIDoKKyNlbmRpZgorCQkJCQkJICAgMHhmZmZmZmZmZikpIHsKKwkJCQkJLypib3VuZGFyeSBjYXNlIC0tIGluY3JlbWVudCBleHBvbmVudCovCisJCQkJCWlmICh3b3JkMCgmcnYpID09IEJpZzAgJiYgd29yZDEoJnJ2KSA9PSBCaWcxKQorCQkJCQkJZ290byBvdmZsOworCQkJCQl3b3JkMCgmcnYpID0gKHdvcmQwKCZydikgJiBFeHBfbWFzaykKKwkJCQkJCSsgRXhwX21zazEKKyNpZmRlZiBJQk0KKwkJCQkJCXwgRXhwX21zazEgPj4gNAorI2VuZGlmCisJCQkJCQk7CisJCQkJCXdvcmQxKCZydikgPSAwOworI2lmZGVmIEF2b2lkX1VuZGVyZmxvdworCQkJCQlkc2lnbiA9IDA7CisjZW5kaWYKKwkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQllbHNlIGlmICghKHdvcmQwKCZydikgJiBCbmRyeV9tYXNrKSAmJiAhd29yZDEoJnJ2KSkgeworIGRyb3BfZG93bjoKKwkJCQkvKiBib3VuZGFyeSBjYXNlIC0tIGRlY3JlbWVudCBleHBvbmVudCAqLworI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cgLyp7eyovCisJCQkJTCA9IHdvcmQwKCZydikgJiBFeHBfbWFzazsKKyNpZmRlZiBJQk0KKwkJCQlpZiAoTCA8ICBFeHBfbXNrMSkKKyNlbHNlCisjaWZkZWYgQXZvaWRfVW5kZXJmbG93CisJCQkJaWYgKEwgPD0gKHNjYWxlID8gKDIqUCsxKSpFeHBfbXNrMSA6IEV4cF9tc2sxKSkKKyNlbHNlCisJCQkJaWYgKEwgPD0gRXhwX21zazEpCisjZW5kaWYgLypBdm9pZF9VbmRlcmZsb3cqLworI2VuZGlmIC8qSUJNKi8KKwkJCQkJZ290byB1bmRmbDsKKwkJCQlMIC09IEV4cF9tc2sxOworI2Vsc2UgLypTdWRkZW5fVW5kZXJmbG93fXsqLworI2lmZGVmIEF2b2lkX1VuZGVyZmxvdworCQkJCWlmIChzY2FsZSkgeworCQkJCQlMID0gd29yZDAoJnJ2KSAmIEV4cF9tYXNrOworCQkJCQlpZiAoTCA8PSAoMipQKzEpKkV4cF9tc2sxKSB7CisJCQkJCQlpZiAoTCA+IChQKzIpKkV4cF9tc2sxKQorCQkJCQkJCS8qIHJvdW5kIGV2ZW4gPT0+ICovCisJCQkJCQkJLyogYWNjZXB0IHJ2ICovCisJCQkJCQkJYnJlYWs7CisJCQkJCQkvKiBydiA9IHNtYWxsZXN0IGRlbm9ybWFsICovCisJCQkJCQlnb3RvIHVuZGZsOworCQkJCQkJfQorCQkJCQl9CisjZW5kaWYgLypBdm9pZF9VbmRlcmZsb3cqLworCQkJCUwgPSAod29yZDAoJnJ2KSAmIEV4cF9tYXNrKSAtIEV4cF9tc2sxOworI2VuZGlmIC8qU3VkZGVuX1VuZGVyZmxvd319Ki8KKwkJCQl3b3JkMCgmcnYpID0gTCB8IEJuZHJ5X21hc2sxOworCQkJCXdvcmQxKCZydikgPSAweGZmZmZmZmZmOworI2lmZGVmIElCTQorCQkJCWdvdG8gY29udDsKKyNlbHNlCisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCQl9CisjaWZuZGVmIFJPVU5EX0JJQVNFRAorI2lmZGVmIEF2b2lkX1VuZGVyZmxvdworCQkJaWYgKExzYjEpIHsKKwkJCQlpZiAoISh3b3JkMCgmcnYpICYgTHNiMSkpCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCWVsc2UgaWYgKCEod29yZDEoJnJ2KSAmIExzYikpCisJCQkJYnJlYWs7CisjZWxzZQorCQkJaWYgKCEod29yZDEoJnJ2KSAmIExTQikpCisJCQkJYnJlYWs7CisjZW5kaWYKKyNlbmRpZgorCQkJaWYgKGRzaWduKQorI2lmZGVmIEF2b2lkX1VuZGVyZmxvdworCQkJCWR2YWwoJnJ2KSArPSBzdWxwKCZydiwgc2NhbGUpOworI2Vsc2UKKwkJCQlkdmFsKCZydikgKz0gdWxwKCZydik7CisjZW5kaWYKKyNpZm5kZWYgUk9VTkRfQklBU0VECisJCQllbHNlIHsKKyNpZmRlZiBBdm9pZF9VbmRlcmZsb3cKKwkJCQlkdmFsKCZydikgLT0gc3VscCgmcnYsIHNjYWxlKTsKKyNlbHNlCisJCQkJZHZhbCgmcnYpIC09IHVscCgmcnYpOworI2VuZGlmCisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJCQlpZiAoIWR2YWwoJnJ2KSkKKwkJCQkJZ290byB1bmRmbDsKKyNlbmRpZgorCQkJCX0KKyNpZmRlZiBBdm9pZF9VbmRlcmZsb3cKKwkJCWRzaWduID0gMSAtIGRzaWduOworI2VuZGlmCisjZW5kaWYKKwkJCWJyZWFrOworCQkJfQorCQlpZiAoKGFhZGogPSByYXRpbyhkZWx0YSwgYnMpKSA8PSAyLikgeworCQkJaWYgKGRzaWduKQorCQkJCWFhZGogPSBkdmFsKCZhYWRqMSkgPSAxLjsKKwkJCWVsc2UgaWYgKHdvcmQxKCZydikgfHwgd29yZDAoJnJ2KSAmIEJuZHJ5X21hc2spIHsKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQkJCWlmICh3b3JkMSgmcnYpID09IFRpbnkxICYmICF3b3JkMCgmcnYpKQorCQkJCQlnb3RvIHVuZGZsOworI2VuZGlmCisJCQkJYWFkaiA9IDEuOworCQkJCWR2YWwoJmFhZGoxKSA9IC0xLjsKKwkJCQl9CisJCQllbHNlIHsKKwkJCQkvKiBzcGVjaWFsIGNhc2UgLS0gcG93ZXIgb2YgRkxUX1JBRElYIHRvIGJlICovCisJCQkJLyogcm91bmRlZCBkb3duLi4uICovCisKKwkJCQlpZiAoYWFkaiA8IDIuL0ZMVF9SQURJWCkKKwkJCQkJYWFkaiA9IDEuL0ZMVF9SQURJWDsKKwkJCQllbHNlCisJCQkJCWFhZGogKj0gMC41OworCQkJCWR2YWwoJmFhZGoxKSA9IC1hYWRqOworCQkJCX0KKwkJCX0KKwkJZWxzZSB7CisJCQlhYWRqICo9IDAuNTsKKwkJCWR2YWwoJmFhZGoxKSA9IGRzaWduID8gYWFkaiA6IC1hYWRqOworI2lmZGVmIENoZWNrX0ZMVF9ST1VORFMKKwkJCXN3aXRjaChSb3VuZGluZykgeworCQkJCWNhc2UgMjogLyogdG93YXJkcyAraW5maW5pdHkgKi8KKwkJCQkJZHZhbCgmYWFkajEpIC09IDAuNTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAwOiAvKiB0b3dhcmRzIDAgKi8KKwkJCQljYXNlIDM6IC8qIHRvd2FyZHMgLWluZmluaXR5ICovCisJCQkJCWR2YWwoJmFhZGoxKSArPSAwLjU7CisJCQkJfQorI2Vsc2UKKwkJCWlmIChGbHRfUm91bmRzID09IDApCisJCQkJZHZhbCgmYWFkajEpICs9IDAuNTsKKyNlbmRpZiAvKkNoZWNrX0ZMVF9ST1VORFMqLworCQkJfQorCQl5ID0gd29yZDAoJnJ2KSAmIEV4cF9tYXNrOworCisJCS8qIENoZWNrIGZvciBvdmVyZmxvdyAqLworCisJCWlmICh5ID09IEV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLTEpKSB7CisJCQlkdmFsKCZydjApID0gZHZhbCgmcnYpOworCQkJd29yZDAoJnJ2KSAtPSBQKkV4cF9tc2sxOworCQkJZHZhbCgmYWRqKSA9IGR2YWwoJmFhZGoxKSAqIHVscCgmcnYpOworCQkJZHZhbCgmcnYpICs9IGR2YWwoJmFkaik7CisJCQlpZiAoKHdvcmQwKCZydikgJiBFeHBfbWFzaykgPj0KKwkJCQkJRXhwX21zazEqKERCTF9NQVhfRVhQK0JpYXMtUCkpIHsKKwkJCQlpZiAod29yZDAoJnJ2MCkgPT0gQmlnMCAmJiB3b3JkMSgmcnYwKSA9PSBCaWcxKQorCQkJCQlnb3RvIG92Zmw7CisJCQkJd29yZDAoJnJ2KSA9IEJpZzA7CisJCQkJd29yZDEoJnJ2KSA9IEJpZzE7CisJCQkJZ290byBjb250OworCQkJCX0KKwkJCWVsc2UKKwkJCQl3b3JkMCgmcnYpICs9IFAqRXhwX21zazE7CisJCQl9CisJCWVsc2UgeworI2lmZGVmIEF2b2lkX1VuZGVyZmxvdworCQkJaWYgKHNjYWxlICYmIHkgPD0gMipQKkV4cF9tc2sxKSB7CisJCQkJaWYgKGFhZGogPD0gMHg3ZmZmZmZmZikgeworCQkJCQlpZiAoKHogPSBhYWRqKSA8PSAwKQorCQkJCQkJeiA9IDE7CisJCQkJCWFhZGogPSB6OworCQkJCQlkdmFsKCZhYWRqMSkgPSBkc2lnbiA/IGFhZGogOiAtYWFkajsKKwkJCQkJfQorCQkJCXdvcmQwKCZhYWRqMSkgKz0gKDIqUCsxKSpFeHBfbXNrMSAtIHk7CisJCQkJfQorCQkJZHZhbCgmYWRqKSA9IGR2YWwoJmFhZGoxKSAqIHVscCgmcnYpOworCQkJZHZhbCgmcnYpICs9IGR2YWwoJmFkaik7CisjZWxzZQorI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJCWlmICgod29yZDAoJnJ2KSAmIEV4cF9tYXNrKSA8PSBQKkV4cF9tc2sxKSB7CisJCQkJZHZhbCgmcnYwKSA9IGR2YWwoJnJ2KTsKKwkJCQl3b3JkMCgmcnYpICs9IFAqRXhwX21zazE7CisJCQkJZHZhbCgmYWRqKSA9IGR2YWwoJmFhZGoxKSAqIHVscCgmcnYpOworCQkJCWR2YWwoJnJ2KSArPSBkdmFsKCZhZGopOworI2lmZGVmIElCTQorCQkJCWlmICgod29yZDAoJnJ2KSAmIEV4cF9tYXNrKSA8ICBQKkV4cF9tc2sxKQorI2Vsc2UKKwkJCQlpZiAoKHdvcmQwKCZydikgJiBFeHBfbWFzaykgPD0gUCpFeHBfbXNrMSkKKyNlbmRpZgorCQkJCQl7CisJCQkJCWlmICh3b3JkMCgmcnYwKSA9PSBUaW55MAorCQkJCQkgJiYgd29yZDEoJnJ2MCkgPT0gVGlueTEpCisJCQkJCQlnb3RvIHVuZGZsOworCQkJCQl3b3JkMCgmcnYpID0gVGlueTA7CisJCQkJCXdvcmQxKCZydikgPSBUaW55MTsKKwkJCQkJZ290byBjb250OworCQkJCQl9CisJCQkJZWxzZQorCQkJCQl3b3JkMCgmcnYpIC09IFAqRXhwX21zazE7CisJCQkJfQorCQkJZWxzZSB7CisJCQkJZHZhbCgmYWRqKSA9IGR2YWwoJmFhZGoxKSAqIHVscCgmcnYpOworCQkJCWR2YWwoJnJ2KSArPSBkdmFsKCZhZGopOworCQkJCX0KKyNlbHNlIC8qU3VkZGVuX1VuZGVyZmxvdyovCisJCQkvKiBDb21wdXRlIGR2YWwoJmFkaikgc28gdGhhdCB0aGUgSUVFRSByb3VuZGluZyBydWxlcyB3aWxsCisJCQkgKiBjb3JyZWN0bHkgcm91bmQgcnYgKyBkdmFsKCZhZGopIGluIHNvbWUgaGFsZi13YXkgY2FzZXMuCisJCQkgKiBJZiBydiAqIHVscCgmcnYpIGlzIGRlbm9ybWFsaXplZCAoaS5lLiwKKwkJCSAqIHkgPD0gKFAtMSkqRXhwX21zazEpLCB3ZSBtdXN0IGFkanVzdCBhYWRqIHRvIGF2b2lkCisJCQkgKiB0cm91YmxlIGZyb20gYml0cyBsb3N0IHRvIGRlbm9ybWFsaXphdGlvbjsKKwkJCSAqIGV4YW1wbGU6IDEuMmUtMzA3IC4KKwkJCSAqLworCQkJaWYgKHkgPD0gKFAtMSkqRXhwX21zazEgJiYgYWFkaiA+IDEuKSB7CisJCQkJZHZhbCgmYWFkajEpID0gKGRvdWJsZSkoaW50KShhYWRqICsgMC41KTsKKwkJCQlpZiAoIWRzaWduKQorCQkJCQlkdmFsKCZhYWRqMSkgPSAtZHZhbCgmYWFkajEpOworCQkJCX0KKwkJCWR2YWwoJmFkaikgPSBkdmFsKCZhYWRqMSkgKiB1bHAoJnJ2KTsKKwkJCWR2YWwoJnJ2KSArPSBhZGo7CisjZW5kaWYgLypTdWRkZW5fVW5kZXJmbG93Ki8KKyNlbmRpZiAvKkF2b2lkX1VuZGVyZmxvdyovCisJCQl9CisJCXogPSB3b3JkMCgmcnYpICYgRXhwX21hc2s7CisjaWZuZGVmIFNFVF9JTkVYQUNUCisjaWZkZWYgQXZvaWRfVW5kZXJmbG93CisJCWlmICghc2NhbGUpCisjZW5kaWYKKwkJaWYgKHkgPT0geikgeworCQkJLyogQ2FuIHdlIHN0b3Agbm93PyAqLworCQkJTCA9IChMb25nKWFhZGo7CisJCQlhYWRqIC09IEw7CisJCQkvKiBUaGUgdG9sZXJhbmNlcyBiZWxvdyBhcmUgY29uc2VydmF0aXZlLiAqLworCQkJaWYgKGRzaWduIHx8IHdvcmQxKCZydikgfHwgd29yZDAoJnJ2KSAmIEJuZHJ5X21hc2spIHsKKwkJCQlpZiAoYWFkaiA8IC40OTk5OTk5IHx8IGFhZGogPiAuNTAwMDAwMSkKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJZWxzZSBpZiAoYWFkaiA8IC40OTk5OTk5L0ZMVF9SQURJWCkKKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZgorIGNvbnQ6CisJCUJmcmVlKGJiKTsKKwkJQmZyZWUoYmQpOworCQlCZnJlZShicyk7CisJCUJmcmVlKGRlbHRhKTsKKwkJfQorCUJmcmVlKGJiKTsKKwlCZnJlZShiZCk7CisJQmZyZWUoYnMpOworCUJmcmVlKGJkMCk7CisJQmZyZWUoZGVsdGEpOworI2lmZGVmIFNFVF9JTkVYQUNUCisJaWYgKGluZXhhY3QpIHsKKwkJaWYgKCFvbGRpbmV4YWN0KSB7CisJCQl3b3JkMCgmcnYwKSA9IEV4cF8xICsgKDcwIDw8IEV4cF9zaGlmdCk7CisJCQl3b3JkMSgmcnYwKSA9IDA7CisJCQlkdmFsKCZydjApICs9IDEuOworCQkJfQorCQl9CisJZWxzZSBpZiAoIW9sZGluZXhhY3QpCisJCWNsZWFyX2luZXhhY3QoKTsKKyNlbmRpZgorI2lmZGVmIEF2b2lkX1VuZGVyZmxvdworCWlmIChzY2FsZSkgeworCQl3b3JkMCgmcnYwKSA9IEV4cF8xIC0gMipQKkV4cF9tc2sxOworCQl3b3JkMSgmcnYwKSA9IDA7CisJCWR2YWwoJnJ2KSAqPSBkdmFsKCZydjApOworI2lmbmRlZiBOT19FUlJOTworCQkvKiB0cnkgdG8gYXZvaWQgdGhlIGJ1ZyBvZiB0ZXN0aW5nIGFuIDgwODcgcmVnaXN0ZXIgdmFsdWUgKi8KKyNpZmRlZiBJRUVFX0FyaXRoCisJCWlmICghKHdvcmQwKCZydikgJiBFeHBfbWFzaykpCisjZWxzZQorCQlpZiAod29yZDAoJnJ2KSA9PSAwICYmIHdvcmQxKCZydikgPT0gMCkKKyNlbmRpZgorCQkJZXJybm8gPSBFUkFOR0U7CisjZW5kaWYKKwkJfQorI2VuZGlmIC8qIEF2b2lkX1VuZGVyZmxvdyAqLworI2lmZGVmIFNFVF9JTkVYQUNUCisJaWYgKGluZXhhY3QgJiYgISh3b3JkMCgmcnYpICYgRXhwX21hc2spKSB7CisJCS8qIHNldCB1bmRlcmZsb3cgYml0ICovCisJCWR2YWwoJnJ2MCkgPSAxZS0zMDA7CisJCWR2YWwoJnJ2MCkgKj0gZHZhbCgmcnYwKTsKKwkJfQorI2VuZGlmCisgcmV0OgorCWlmIChzZSkKKwkJKnNlID0gKGNoYXIgKilzOworCXJldHVybiBzaWduID8gLWR2YWwoJnJ2KSA6IGR2YWwoJnJ2KTsKKwl9CisKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9zdHJ0b2RnLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3RydG9kZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1M2Y2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3RydG9kZy5jCkBAIC0wLDAgKzEsMTE1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAxOTk4LTIwMDEgYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgorCisjaWZkZWYgVVNFX0xPQ0FMRQorI2luY2x1ZGUgImxvY2FsZS5oIgorI2VuZGlmCisKKyBzdGF0aWMgQ09OU1QgaW50CitmaXZlc2JpdHNbXSA9IHsJIDAsICAzLCAgNSwgIDcsIDEwLCAxMiwgMTQsIDE3LCAxOSwgMjEsCisJCTI0LCAyNiwgMjgsIDMxLCAzMywgMzUsIDM4LCA0MCwgNDIsIDQ1LAorCQk0NywgNDksIDUyCisjaWZkZWYgVkFYCisJCSwgNTQsIDU2CisjZW5kaWYKKwkJfTsKKworIEJpZ2ludCAqCisjaWZkZWYgS1JfaGVhZGVycworaW5jcmVtZW50KGIpIEJpZ2ludCAqYjsKKyNlbHNlCitpbmNyZW1lbnQoQmlnaW50ICpiKQorI2VuZGlmCit7CisJVUxvbmcgKngsICp4ZTsKKwlCaWdpbnQgKmIxOworI2lmZGVmIFBhY2tfMTYKKwlVTG9uZyBjYXJyeSA9IDEsIHk7CisjZW5kaWYKKworCXggPSBiLT54OworCXhlID0geCArIGItPndkczsKKyNpZmRlZiBQYWNrXzMyCisJZG8geworCQlpZiAoKnggPCAoVUxvbmcpMHhmZmZmZmZmZkwpIHsKKwkJCSsrKng7CisJCQlyZXR1cm4gYjsKKwkJCX0KKwkJKngrKyA9IDA7CisJCX0gd2hpbGUoeCA8IHhlKTsKKyNlbHNlCisJZG8geworCQl5ID0gKnggKyBjYXJyeTsKKwkJY2FycnkgPSB5ID4+IDE2OworCQkqeCsrID0geSAmIDB4ZmZmZjsKKwkJaWYgKCFjYXJyeSkKKwkJCXJldHVybiBiOworCQl9IHdoaWxlKHggPCB4ZSk7CisJaWYgKGNhcnJ5KQorI2VuZGlmCisJeworCQlpZiAoYi0+d2RzID49IGItPm1heHdkcykgeworCQkJYjEgPSBCYWxsb2MoYi0+aysxKTsKKwkJCWlmIChiMSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlCY29weShiMSxiKTsKKwkJCUJmcmVlKGIpOworCQkJYiA9IGIxOworCQkJfQorCQliLT54W2ItPndkcysrXSA9IDE7CisJCX0KKwlyZXR1cm4gYjsKKwl9CisKKyB2b2lkCisjaWZkZWYgS1JfaGVhZGVycworZGVjcmVtZW50KGIpIEJpZ2ludCAqYjsKKyNlbHNlCitkZWNyZW1lbnQoQmlnaW50ICpiKQorI2VuZGlmCit7CisJVUxvbmcgKngsICp4ZTsKKyNpZmRlZiBQYWNrXzE2CisJVUxvbmcgYm9ycm93ID0gMSwgeTsKKyNlbmRpZgorCisJeCA9IGItPng7CisJeGUgPSB4ICsgYi0+d2RzOworI2lmZGVmIFBhY2tfMzIKKwlkbyB7CisJCWlmICgqeCkgeworCQkJLS0qeDsKKwkJCWJyZWFrOworCQkJfQorCQkqeCsrID0gMHhmZmZmZmZmZkw7CisJCX0KKwkJd2hpbGUoeCA8IHhlKTsKKyNlbHNlCisJZG8geworCQl5ID0gKnggLSBib3Jyb3c7CisJCWJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCSp4KysgPSB5ICYgMHhmZmZmOworCQl9IHdoaWxlKGJvcnJvdyAmJiB4IDwgeGUpOworI2VuZGlmCisJfQorCisgc3RhdGljIGludAorI2lmZGVmIEtSX2hlYWRlcnMKK2FsbF9vbihiLCBuKSBCaWdpbnQgKmI7IGludCBuOworI2Vsc2UKK2FsbF9vbihCaWdpbnQgKmIsIGludCBuKQorI2VuZGlmCit7CisJVUxvbmcgKngsICp4ZTsKKworCXggPSBiLT54OworCXhlID0geCArIChuID4+IGtzaGlmdCk7CisJd2hpbGUoeCA8IHhlKQorCQlpZiAoKCp4KysgJiBBTExfT04pICE9IEFMTF9PTikKKwkJCXJldHVybiAwOworCWlmIChuICY9IGttYXNrKQorCQlyZXR1cm4gKCgqeCB8IChBTExfT04gPDwgbikpICYgQUxMX09OKSA9PSBBTExfT047CisJcmV0dXJuIDE7CisJfQorCisgQmlnaW50ICoKKyNpZmRlZiBLUl9oZWFkZXJzCitzZXRfb25lcyhiLCBuKSBCaWdpbnQgKmI7IGludCBuOworI2Vsc2UKK3NldF9vbmVzKEJpZ2ludCAqYiwgaW50IG4pCisjZW5kaWYKK3sKKwlpbnQgazsKKwlVTG9uZyAqeCwgKnhlOworCisJayA9IChuICsgKCgxIDw8IGtzaGlmdCkgLSAxKSkgPj4ga3NoaWZ0OworCWlmIChiLT5rIDwgaykgeworCQlCZnJlZShiKTsKKwkJYiA9IEJhbGxvYyhrKTsKKwkJaWYgKGIgPT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwlrID0gbiA+PiBrc2hpZnQ7CisJaWYgKG4gJj0ga21hc2spCisJCWsrKzsKKwliLT53ZHMgPSBrOworCXggPSBiLT54OworCXhlID0geCArIGs7CisJd2hpbGUoeCA8IHhlKQorCQkqeCsrID0gQUxMX09OOworCWlmIChuKQorCQl4Wy0xXSA+Pj0gVUxiaXRzIC0gbjsKKwlyZXR1cm4gYjsKKwl9CisKKyBzdGF0aWMgaW50Citydk9LCisjaWZkZWYgS1JfaGVhZGVycworIChkLCBmcGksIGV4cCwgYml0cywgZXhhY3QsIHJkLCBpcnYpCisgVSAqZDsgRlBJICpmcGk7IExvbmcgKmV4cDsgVUxvbmcgKmJpdHM7IGludCBleGFjdCwgcmQsICppcnY7CisjZWxzZQorIChVICpkLCBGUEkgKmZwaSwgTG9uZyAqZXhwLCBVTG9uZyAqYml0cywgaW50IGV4YWN0LCBpbnQgcmQsIGludCAqaXJ2KQorI2VuZGlmCit7CisJQmlnaW50ICpiOworCVVMb25nIGNhcnJ5LCBpbmV4LCBsb3N0Yml0czsKKwlpbnQgYmRpZiwgZSwgaiwgaywgazEsIG5iLCBydjsKKworCWNhcnJ5ID0gcnYgPSAwOworCWIgPSBkMmIoZHZhbChkKSwgJmUsICZiZGlmKTsKKwlpZiAoYiA9PSBOVUxMKSB7CisJCSppcnYgPSBTVFJUT0dfTm9NZW1vcnk7CisJCXJldHVybiAoMSk7CisJfQorCWJkaWYgLT0gbmIgPSBmcGktPm5iaXRzOworCWUgKz0gYmRpZjsKKwlpZiAoYmRpZiA8PSAwKSB7CisJCWlmIChleGFjdCkKKwkJCWdvdG8gdHJ1bmM7CisJCWdvdG8gcmV0OworCQl9CisJaWYgKFAgPT0gbmIpIHsKKwkJaWYgKAorI2lmbmRlZiBJTVBSRUNJU0VfSU5FWEFDVAorCQkJZXhhY3QgJiYKKyNlbmRpZgorCQkJZnBpLT5yb3VuZGluZyA9PQorI2lmZGVmIFJORF9QUk9EUVVPVAorCQkJCQlGUElfUm91bmRfbmVhcgorI2Vsc2UKKwkJCQkJRmx0X1JvdW5kcworI2VuZGlmCisJCQkpIGdvdG8gdHJ1bmM7CisJCWdvdG8gcmV0OworCQl9CisJc3dpdGNoKHJkKSB7CisJICBjYXNlIDE6IC8qIHJvdW5kIGRvd24gKHRvd2FyZCAtSW5maW5pdHkpICovCisJCWdvdG8gdHJ1bmM7CisJICBjYXNlIDI6IC8qIHJvdW5kIHVwICh0b3dhcmQgK0luZmluaXR5KSAqLworCQlicmVhazsKKwkgIGRlZmF1bHQ6IC8qIHJvdW5kIG5lYXIgKi8KKwkJayA9IGJkaWYgLSAxOworCQlpZiAoayA8IDApCisJCQlnb3RvIHRydW5jOworCQlpZiAoIWspIHsKKwkJCWlmICghZXhhY3QpCisJCQkJZ290byByZXQ7CisJCQlpZiAoYi0+eFswXSAmIDIpCisJCQkJYnJlYWs7CisJCQlnb3RvIHRydW5jOworCQkJfQorCQlpZiAoYi0+eFtrPj5rc2hpZnRdICYgKChVTG9uZykxIDw8IChrICYga21hc2spKSkKKwkJCWJyZWFrOworCQlnb3RvIHRydW5jOworCSAgfQorCS8qICJicmVhayIgY2FzZXM6IHJvdW5kIHVwIDEgYml0LCB0aGVuIHRydW5jYXRlOyBiZGlmID4gMCAqLworCWNhcnJ5ID0gMTsKKyB0cnVuYzoKKwlpbmV4ID0gbG9zdGJpdHMgPSAwOworCWlmIChiZGlmID4gMCkgeworCQlpZiAoIChsb3N0Yml0cyA9IGFueV9vbihiLCBiZGlmKSkgIT0wKQorCQkJaW5leCA9IFNUUlRPR19JbmV4bG87CisJCXJzaGlmdChiLCBiZGlmKTsKKwkJaWYgKGNhcnJ5KSB7CisJCQlpbmV4ID0gU1RSVE9HX0luZXhoaTsKKwkJCWIgPSBpbmNyZW1lbnQoYik7CisJCQlpZiAoYiA9PSBOVUxMKSB7CisJCQkJKmlydiA9IFNUUlRPR19Ob01lbW9yeTsKKwkJCQlyZXR1cm4gKDEpOworCQkJCX0KKwkJCWlmICggKGogPSBuYiAmIGttYXNrKSAhPTApCisJCQkJaiA9IFVMYml0cyAtIGo7CisJCQlpZiAoaGkwYml0cyhiLT54W2ItPndkcyAtIDFdKSAhPSBqKSB7CisJCQkJaWYgKCFsb3N0Yml0cykKKwkJCQkJbG9zdGJpdHMgPSBiLT54WzBdICYgMTsKKwkJCQlyc2hpZnQoYiwgMSk7CisJCQkJZSsrOworCQkJCX0KKwkJCX0KKwkJfQorCWVsc2UgaWYgKGJkaWYgPCAwKSB7CisJCWIgPSBsc2hpZnQoYiwgLWJkaWYpOworCQlpZiAoYiA9PSBOVUxMKSB7CisJCQkqaXJ2ID0gU1RSVE9HX05vTWVtb3J5OworCQkJcmV0dXJuICgxKTsKKwkJCX0KKwkJfQorCWlmIChlIDwgZnBpLT5lbWluKSB7CisJCWsgPSBmcGktPmVtaW4gLSBlOworCQllID0gZnBpLT5lbWluOworCQlpZiAoayA+IG5iIHx8IGZwaS0+c3VkZGVuX3VuZGVyZmxvdykgeworCQkJYi0+d2RzID0gaW5leCA9IDA7CisJCQkqaXJ2ID0gU1RSVE9HX1VuZGVyZmxvdyB8IFNUUlRPR19JbmV4bG87CisJCQl9CisJCWVsc2UgeworCQkJazEgPSBrIC0gMTsKKwkJCWlmIChrMSA+IDAgJiYgIWxvc3RiaXRzKQorCQkJCWxvc3RiaXRzID0gYW55X29uKGIsIGsxKTsKKwkJCWlmICghbG9zdGJpdHMgJiYgIWV4YWN0KQorCQkJCWdvdG8gcmV0OworCQkJbG9zdGJpdHMgfD0KKwkJCSAgY2FycnkgPSBiLT54W2sxPj5rc2hpZnRdICYgKDEgPDwgKGsxICYga21hc2spKTsKKwkJCXJzaGlmdChiLCBrKTsKKwkJCSppcnYgPSBTVFJUT0dfRGVub3JtYWw7CisJCQlpZiAoY2FycnkpIHsKKwkJCQliID0gaW5jcmVtZW50KGIpOworCQkJCWlmIChiID09IE5VTEwpIHsKKwkJCQkJKmlydiA9IFNUUlRPR19Ob01lbW9yeTsKKwkJCQkJcmV0dXJuICgxKTsKKwkJCQkJfQorCQkJCWluZXggPSBTVFJUT0dfSW5leGhpIHwgU1RSVE9HX1VuZGVyZmxvdzsKKwkJCQl9CisJCQllbHNlIGlmIChsb3N0Yml0cykKKwkJCQlpbmV4ID0gU1RSVE9HX0luZXhsbyB8IFNUUlRPR19VbmRlcmZsb3c7CisJCQl9CisJCX0KKwllbHNlIGlmIChlID4gZnBpLT5lbWF4KSB7CisJCWUgPSBmcGktPmVtYXggKyAxOworCQkqaXJ2ID0gU1RSVE9HX0luZmluaXRlIHwgU1RSVE9HX092ZXJmbG93IHwgU1RSVE9HX0luZXhoaTsKKyNpZm5kZWYgTk9fRVJSTk8KKwkJZXJybm8gPSBFUkFOR0U7CisjZW5kaWYKKwkJYi0+d2RzID0gaW5leCA9IDA7CisJCX0KKwkqZXhwID0gZTsKKwljb3B5Yml0cyhiaXRzLCBuYiwgYik7CisJKmlydiB8PSBpbmV4OworCXJ2ID0gMTsKKyByZXQ6CisJQmZyZWUoYik7CisJcmV0dXJuIHJ2OworCX0KKworIHN0YXRpYyBpbnQKKyNpZmRlZiBLUl9oZWFkZXJzCittYW50Yml0cyhkKSBVICpkOworI2Vsc2UKK21hbnRiaXRzKFUgKmQpCisjZW5kaWYKK3sKKwlVTG9uZyBMOworI2lmZGVmIFZBWAorCUwgPSB3b3JkMShkKSA8PCAxNiB8IHdvcmQxKGQpID4+IDE2OworCWlmIChMKQorI2Vsc2UKKwlpZiAoIChMID0gd29yZDEoZCkpICE9MCkKKyNlbmRpZgorCQlyZXR1cm4gUCAtIGxvMGJpdHMoJkwpOworI2lmZGVmIFZBWAorCUwgPSB3b3JkMChkKSA8PCAxNiB8IHdvcmQwKGQpID4+IDE2IHwgRXhwX21zazExOworI2Vsc2UKKwlMID0gd29yZDAoZCkgfCBFeHBfbXNrMTsKKyNlbmRpZgorCXJldHVybiBQIC0gMzIgLSBsbzBiaXRzKCZMKTsKKwl9CisKKyBpbnQKK3N0cnRvZGcKKyNpZmRlZiBLUl9oZWFkZXJzCisJKHMwMCwgc2UsIGZwaSwgZXhwLCBiaXRzKQorCUNPTlNUIGNoYXIgKnMwMDsgY2hhciAqKnNlOyBGUEkgKmZwaTsgTG9uZyAqZXhwOyBVTG9uZyAqYml0czsKKyNlbHNlCisJKENPTlNUIGNoYXIgKnMwMCwgY2hhciAqKnNlLCBGUEkgKmZwaSwgTG9uZyAqZXhwLCBVTG9uZyAqYml0cykKKyNlbmRpZgoreworCWludCBhYmUsIGFiaXRzLCBhc3ViOworCWludCBiYjAsIGJiMiwgYmI1LCBiYmUsIGJkMiwgYmQ1LCBiYmJpdHMsIGJzMiwgYywgZGVjcHQsIGRlbm9ybTsKKwlpbnQgZHNpZ24sIGUsIGUxLCBlMiwgZW1pbiwgZXNpZ24sIGZpbmlzaGVkLCBpLCBpbmV4LCBpcnY7CisJaW50IGosIGssIG5iaXRzLCBuZCwgbmQwLCBuZiwgbnosIG56MCwgcmQsIHJ2Yml0cywgcnZlLCBydmUxLCBzaWduOworCWludCBzdWRkZW5fdW5kZXJmbG93OworCUNPTlNUIGNoYXIgKnMsICpzMCwgKnMxOworCWRvdWJsZSBhZGowLCB0b2w7CisJTG9uZyBMOworCVUgYWRqLCBydjsKKwlVTG9uZyAqYiwgKmJlLCB5LCB6OworCUJpZ2ludCAqYWIsICpiYiwgKmJiMSwgKmJkLCAqYmQwLCAqYnMsICpkZWx0YSwgKnJ2YiwgKnJ2YjA7CisjaWZkZWYgVVNFX0xPQ0FMRSAvKnt7Ki8KKyNpZmRlZiBOT19MT0NBTEVfQ0FDSEUKKwljaGFyICpkZWNpbWFscG9pbnQgPSBsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQ7CisJaW50IGRwbGVuID0gc3RybGVuKGRlY2ltYWxwb2ludCk7CisjZWxzZQorCWNoYXIgKmRlY2ltYWxwb2ludDsKKwlzdGF0aWMgY2hhciAqZGVjaW1hbHBvaW50X2NhY2hlOworCXN0YXRpYyBpbnQgZHBsZW47CisJaWYgKCEoczAgPSBkZWNpbWFscG9pbnRfY2FjaGUpKSB7CisJCXMwID0gbG9jYWxlY29udigpLT5kZWNpbWFsX3BvaW50OworCQlpZiAoKGRlY2ltYWxwb2ludF9jYWNoZSA9IChjaGFyKilNQUxMT0Moc3RybGVuKHMwKSArIDEpKSkgeworCQkJc3RybGNweShkZWNpbWFscG9pbnRfY2FjaGUsIHMwLCBzdHJsZW4oczApICsgMSk7CisJCQlzMCA9IGRlY2ltYWxwb2ludF9jYWNoZTsKKwkJCX0KKwkJZHBsZW4gPSBzdHJsZW4oczApOworCQl9CisJZGVjaW1hbHBvaW50ID0gKGNoYXIqKXMwOworI2VuZGlmIC8qTk9fTE9DQUxFX0NBQ0hFKi8KKyNlbHNlICAvKlVTRV9MT0NBTEV9eyovCisjZGVmaW5lIGRwbGVuIDEKKyNlbmRpZiAvKlVTRV9MT0NBTEV9fSovCisKKwlpcnYgPSBTVFJUT0dfWmVybzsKKwlkZW5vcm0gPSBzaWduID0gbnowID0gbnogPSAwOworCWR2YWwoJnJ2KSA9IDAuOworCXJ2YiA9IDA7CisJbmJpdHMgPSBmcGktPm5iaXRzOworCWZvcihzID0gczAwOztzKyspIHN3aXRjaCgqcykgeworCQljYXNlICctJzoKKwkJCXNpZ24gPSAxOworCQkJLyogbm8gYnJlYWsgKi8KKwkJY2FzZSAnKyc6CisJCQlpZiAoKisrcykKKwkJCQlnb3RvIGJyZWFrMjsKKwkJCS8qIG5vIGJyZWFrICovCisJCWNhc2UgMDoKKwkJCXNpZ24gPSAwOworCQkJaXJ2ID0gU1RSVE9HX05vTnVtYmVyOworCQkJcyA9IHMwMDsKKwkJCWdvdG8gcmV0OworCQljYXNlICdcdCc6CisJCWNhc2UgJ1xuJzoKKwkJY2FzZSAnXHYnOgorCQljYXNlICdcZic6CisJCWNhc2UgJ1xyJzoKKwkJY2FzZSAnICc6CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gYnJlYWsyOworCQl9CisgYnJlYWsyOgorCWlmICgqcyA9PSAnMCcpIHsKKyNpZm5kZWYgTk9fSEVYX0ZQCisJCXN3aXRjaChzWzFdKSB7CisJCSAgY2FzZSAneCc6CisJCSAgY2FzZSAnWCc6CisJCQlpcnYgPSBnZXRoZXgoJnMsIGZwaSwgZXhwLCAmcnZiLCBzaWduKTsKKwkJCWlmIChpcnYgPT0gU1RSVE9HX05vTWVtb3J5KQorCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCWlmIChpcnYgPT0gU1RSVE9HX05vTnVtYmVyKSB7CisJCQkJcyA9IHMwMDsKKwkJCQlzaWduID0gMDsKKwkJCQl9CisJCQlnb3RvIHJldDsKKwkJICB9CisjZW5kaWYKKwkJbnowID0gMTsKKwkJd2hpbGUoKisrcyA9PSAnMCcpIDsKKwkJaWYgKCEqcykKKwkJCWdvdG8gcmV0OworCQl9CisJc3VkZGVuX3VuZGVyZmxvdyA9IGZwaS0+c3VkZGVuX3VuZGVyZmxvdzsKKwlzMCA9IHM7CisJeSA9IHogPSAwOworCWZvcihkZWNwdCA9IG5kID0gbmYgPSAwOyAoYyA9ICpzKSA+PSAnMCcgJiYgYyA8PSAnOSc7IG5kKyssIHMrKykKKwkJaWYgKG5kIDwgOSkKKwkJCXkgPSAxMCp5ICsgYyAtICcwJzsKKwkJZWxzZSBpZiAobmQgPCAxNikKKwkJCXogPSAxMCp6ICsgYyAtICcwJzsKKwluZDAgPSBuZDsKKyNpZmRlZiBVU0VfTE9DQUxFCisJaWYgKGMgPT0gKmRlY2ltYWxwb2ludCkgeworCQlmb3IoaSA9IDE7IGRlY2ltYWxwb2ludFtpXTsgKytpKQorCQkJaWYgKHNbaV0gIT0gZGVjaW1hbHBvaW50W2ldKQorCQkJCWdvdG8gZGlnX2RvbmU7CisJCXMgKz0gaTsKKwkJYyA9ICpzOworI2Vsc2UKKwlpZiAoYyA9PSAnLicpIHsKKwkJYyA9ICorK3M7CisjZW5kaWYKKwkJZGVjcHQgPSAxOworCQlpZiAoIW5kKSB7CisJCQlmb3IoOyBjID09ICcwJzsgYyA9ICorK3MpCisJCQkJbnorKzsKKwkJCWlmIChjID4gJzAnICYmIGMgPD0gJzknKSB7CisJCQkJczAgPSBzOworCQkJCW5mICs9IG56OworCQkJCW56ID0gMDsKKwkJCQlnb3RvIGhhdmVfZGlnOworCQkJCX0KKwkJCWdvdG8gZGlnX2RvbmU7CisJCQl9CisJCWZvcig7IGMgPj0gJzAnICYmIGMgPD0gJzknOyBjID0gKisrcykgeworIGhhdmVfZGlnOgorCQkJbnorKzsKKwkJCWlmIChjIC09ICcwJykgeworCQkJCW5mICs9IG56OworCQkJCWZvcihpID0gMTsgaSA8IG56OyBpKyspCisJCQkJCWlmIChuZCsrIDwgOSkKKwkJCQkJCXkgKj0gMTA7CisJCQkJCWVsc2UgaWYgKG5kIDw9IERCTF9ESUcgKyAxKQorCQkJCQkJeiAqPSAxMDsKKwkJCQlpZiAobmQrKyA8IDkpCisJCQkJCXkgPSAxMCp5ICsgYzsKKwkJCQllbHNlIGlmIChuZCA8PSBEQkxfRElHICsgMSkKKwkJCQkJeiA9IDEwKnogKyBjOworCQkJCW56ID0gMDsKKwkJCQl9CisJCQl9CisJCX0vKn0qLworIGRpZ19kb25lOgorCWUgPSAwOworCWlmIChjID09ICdlJyB8fCBjID09ICdFJykgeworCQlpZiAoIW5kICYmICFueiAmJiAhbnowKSB7CisJCQlpcnYgPSBTVFJUT0dfTm9OdW1iZXI7CisJCQlzID0gczAwOworCQkJZ290byByZXQ7CisJCQl9CisJCXMwMCA9IHM7CisJCWVzaWduID0gMDsKKwkJc3dpdGNoKGMgPSAqKytzKSB7CisJCQljYXNlICctJzoKKwkJCQllc2lnbiA9IDE7CisJCQljYXNlICcrJzoKKwkJCQljID0gKisrczsKKwkJCX0KKwkJaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7CisJCQl3aGlsZShjID09ICcwJykKKwkJCQljID0gKisrczsKKwkJCWlmIChjID4gJzAnICYmIGMgPD0gJzknKSB7CisJCQkJTCA9IGMgLSAnMCc7CisJCQkJczEgPSBzOworCQkJCXdoaWxlKChjID0gKisrcykgPj0gJzAnICYmIGMgPD0gJzknKQorCQkJCQlMID0gMTAqTCArIGMgLSAnMCc7CisJCQkJaWYgKHMgLSBzMSA+IDggfHwgTCA+IDE5OTk5KQorCQkJCQkvKiBBdm9pZCBjb25mdXNpb24gZnJvbSBleHBvbmVudHMKKwkJCQkJICogc28gbGFyZ2UgdGhhdCBlIG1pZ2h0IG92ZXJmbG93LgorCQkJCQkgKi8KKwkJCQkJZSA9IDE5OTk5OyAvKiBzYWZlIGZvciAxNiBiaXQgaW50cyAqLworCQkJCWVsc2UKKwkJCQkJZSA9IChpbnQpTDsKKwkJCQlpZiAoZXNpZ24pCisJCQkJCWUgPSAtZTsKKwkJCQl9CisJCQllbHNlCisJCQkJZSA9IDA7CisJCQl9CisJCWVsc2UKKwkJCXMgPSBzMDA7CisJCX0KKwlpZiAoIW5kKSB7CisJCWlmICghbnogJiYgIW56MCkgeworI2lmZGVmIElORk5BTl9DSEVDSworCQkJLyogQ2hlY2sgZm9yIE5hbiBhbmQgSW5maW5pdHkgKi8KKwkJCWlmICghZGVjcHQpCisJCQkgc3dpdGNoKGMpIHsKKwkJCSAgY2FzZSAnaSc6CisJCQkgIGNhc2UgJ0knOgorCQkJCWlmIChtYXRjaCgmcywibmYiKSkgeworCQkJCQktLXM7CisJCQkJCWlmICghbWF0Y2goJnMsImluaXR5IikpCisJCQkJCQkrK3M7CisJCQkJCWlydiA9IFNUUlRPR19JbmZpbml0ZTsKKwkJCQkJZ290byBpbmZuYW5leHA7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCSAgY2FzZSAnbic6CisJCQkgIGNhc2UgJ04nOgorCQkJCWlmIChtYXRjaCgmcywgImFuIikpIHsKKwkJCQkJaXJ2ID0gU1RSVE9HX05hTjsKKwkJCQkJKmV4cCA9IGZwaS0+ZW1heCArIDE7CisjaWZuZGVmIE5vX0hleF9OYU4KKwkJCQkJaWYgKCpzID09ICcoJykgLyopKi8KKwkJCQkJCWlydiA9IGhleG5hbigmcywgZnBpLCBiaXRzKTsKKyNlbmRpZgorCQkJCQlnb3RvIGluZm5hbmV4cDsKKwkJCQkJfQorCQkJICB9CisjZW5kaWYgLyogSU5GTkFOX0NIRUNLICovCisJCQlpcnYgPSBTVFJUT0dfTm9OdW1iZXI7CisJCQlzID0gczAwOworCQkJfQorCQlnb3RvIHJldDsKKwkJfQorCisJaXJ2ID0gU1RSVE9HX05vcm1hbDsKKwllMSA9IGUgLT0gbmY7CisJcmQgPSAwOworCXN3aXRjaChmcGktPnJvdW5kaW5nICYgMykgeworCSAgY2FzZSBGUElfUm91bmRfdXA6CisJCXJkID0gMiAtIHNpZ247CisJCWJyZWFrOworCSAgY2FzZSBGUElfUm91bmRfemVybzoKKwkJcmQgPSAxOworCQlicmVhazsKKwkgIGNhc2UgRlBJX1JvdW5kX2Rvd246CisJCXJkID0gMSArIHNpZ247CisJICB9CisKKwkvKiBOb3cgd2UgaGF2ZSBuZDAgZGlnaXRzLCBzdGFydGluZyBhdCBzMCwgZm9sbG93ZWQgYnkgYQorCSAqIGRlY2ltYWwgcG9pbnQsIGZvbGxvd2VkIGJ5IG5kLW5kMCBkaWdpdHMuICBUaGUgbnVtYmVyIHdlJ3JlCisJICogYWZ0ZXIgaXMgdGhlIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgdGhvc2UgZGlnaXRzIHRpbWVzCisJICogMTAqKmUgKi8KKworCWlmICghbmQwKQorCQluZDAgPSBuZDsKKwlrID0gbmQgPCBEQkxfRElHICsgMSA/IG5kIDogREJMX0RJRyArIDE7CisJZHZhbCgmcnYpID0geTsKKwlpZiAoayA+IDkpCisJCWR2YWwoJnJ2KSA9IHRlbnNbayAtIDldICogZHZhbCgmcnYpICsgejsKKwliZDAgPSAwOworCWlmIChuYml0cyA8PSBQICYmIG5kIDw9IERCTF9ESUcpIHsKKwkJaWYgKCFlKSB7CisJCQlpZiAocnZPSygmcnYsIGZwaSwgZXhwLCBiaXRzLCAxLCByZCwgJmlydikpIHsKKwkJCQlpZiAoaXJ2ID09IFNUUlRPR19Ob01lbW9yeSkKKwkJCQkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCQkJCWdvdG8gcmV0OworCQkJCX0KKwkJCX0KKwkJZWxzZSBpZiAoZSA+IDApIHsKKwkJCWlmIChlIDw9IFRlbl9wbWF4KSB7CisjaWZkZWYgVkFYCisJCQkJZ290byB2YXhfb3ZmbF9jaGVjazsKKyNlbHNlCisJCQkJaSA9IGZpdmVzYml0c1tlXSArIG1hbnRiaXRzKCZydikgPD0gUDsKKwkJCQkvKiBydiA9ICovIHJvdW5kZWRfcHJvZHVjdChkdmFsKCZydiksIHRlbnNbZV0pOworCQkJCWlmIChydk9LKCZydiwgZnBpLCBleHAsIGJpdHMsIGksIHJkLCAmaXJ2KSkgeworCQkJCQlpZiAoaXJ2ID09IFNUUlRPR19Ob01lbW9yeSkKKwkJCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCQkJZ290byByZXQ7CisJCQkJCX0KKwkJCQllMSAtPSBlOworCQkJCWdvdG8gcnZfbm90T0s7CisjZW5kaWYKKwkJCQl9CisJCQlpID0gREJMX0RJRyAtIG5kOworCQkJaWYgKGUgPD0gVGVuX3BtYXggKyBpKSB7CisJCQkJLyogQSBmYW5jaWVyIHRlc3Qgd291bGQgc29tZXRpbWVzIGxldCB1cyBkbworCQkJCSAqIHRoaXMgZm9yIGxhcmdlciBpIHZhbHVlcy4KKwkJCQkgKi8KKwkJCQllMiA9IGUgLSBpOworCQkJCWUxIC09IGk7CisJCQkJZHZhbCgmcnYpICo9IHRlbnNbaV07CisjaWZkZWYgVkFYCisJCQkJLyogVkFYIGV4cG9uZW50IHJhbmdlIGlzIHNvIG5hcnJvdyB3ZSBtdXN0CisJCQkJICogd29ycnkgYWJvdXQgb3ZlcmZsb3cgaGVyZS4uLgorCQkJCSAqLworIHZheF9vdmZsX2NoZWNrOgorCQkJCWR2YWwoJmFkaikgPSBkdmFsKCZydik7CisJCQkJd29yZDAoJmFkaikgLT0gUCpFeHBfbXNrMTsKKwkJCQkvKiBhZGogPSAqLyByb3VuZGVkX3Byb2R1Y3QoZHZhbCgmYWRqKSwgdGVuc1tlMl0pOworCQkJCWlmICgod29yZDAoJmFkaikgJiBFeHBfbWFzaykKKwkJCQkgPiBFeHBfbXNrMSooREJMX01BWF9FWFArQmlhcy0xLVApKQorCQkJCQlnb3RvIHJ2X25vdE9LOworCQkJCXdvcmQwKCZhZGopICs9IFAqRXhwX21zazE7CisJCQkJZHZhbCgmcnYpID0gZHZhbCgmYWRqKTsKKyNlbHNlCisJCQkJLyogcnYgPSAqLyByb3VuZGVkX3Byb2R1Y3QoZHZhbCgmcnYpLCB0ZW5zW2UyXSk7CisjZW5kaWYKKwkJCQlpZiAocnZPSygmcnYsIGZwaSwgZXhwLCBiaXRzLCAwLCByZCwgJmlydikpIHsKKwkJCQkJaWYgKGlydiA9PSBTVFJUT0dfTm9NZW1vcnkpCisJCQkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQkJCWdvdG8gcmV0OworCQkJCQl9CisJCQkJZTEgLT0gZTI7CisJCQkJfQorCQkJfQorI2lmbmRlZiBJbmFjY3VyYXRlX0RpdmlkZQorCQllbHNlIGlmIChlID49IC1UZW5fcG1heCkgeworCQkJLyogcnYgPSAqLyByb3VuZGVkX3F1b3RpZW50KGR2YWwoJnJ2KSwgdGVuc1stZV0pOworCQkJaWYgKHJ2T0soJnJ2LCBmcGksIGV4cCwgYml0cywgMCwgcmQsICZpcnYpKSB7CisJCQkJaWYgKGlydiA9PSBTVFJUT0dfTm9NZW1vcnkpCisJCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisJCQllMSAtPSBlOworCQkJfQorI2VuZGlmCisJCX0KKyBydl9ub3RPSzoKKwllMSArPSBuZCAtIGs7CisKKwkvKiBHZXQgc3RhcnRpbmcgYXBwcm94aW1hdGlvbiA9IHJ2ICogMTAqKmUxICovCisKKwllMiA9IDA7CisJaWYgKGUxID4gMCkgeworCQlpZiAoIChpID0gZTEgJiAxNSkgIT0wKQorCQkJZHZhbCgmcnYpICo9IHRlbnNbaV07CisJCWlmIChlMSAmPSB+MTUpIHsKKwkJCWUxID4+PSA0OworCQkJd2hpbGUoZTEgPj0gKDEgPDwgKG5fYmlndGVucy0xKSkpIHsKKwkJCQllMiArPSAoKHdvcmQwKCZydikgJiBFeHBfbWFzaykKKwkJCQkJPj4gRXhwX3NoaWZ0MSkgLSBCaWFzOworCQkJCXdvcmQwKCZydikgJj0gfkV4cF9tYXNrOworCQkJCXdvcmQwKCZydikgfD0gQmlhcyA8PCBFeHBfc2hpZnQxOworCQkJCWR2YWwoJnJ2KSAqPSBiaWd0ZW5zW25fYmlndGVucy0xXTsKKwkJCQllMSAtPSAxIDw8IChuX2JpZ3RlbnMtMSk7CisJCQkJfQorCQkJZTIgKz0gKCh3b3JkMCgmcnYpICYgRXhwX21hc2spID4+IEV4cF9zaGlmdDEpIC0gQmlhczsKKwkJCXdvcmQwKCZydikgJj0gfkV4cF9tYXNrOworCQkJd29yZDAoJnJ2KSB8PSBCaWFzIDw8IEV4cF9zaGlmdDE7CisJCQlmb3IoaiA9IDA7IGUxID4gMDsgaisrLCBlMSA+Pj0gMSkKKwkJCQlpZiAoZTEgJiAxKQorCQkJCQlkdmFsKCZydikgKj0gYmlndGVuc1tqXTsKKwkJCX0KKwkJfQorCWVsc2UgaWYgKGUxIDwgMCkgeworCQllMSA9IC1lMTsKKwkJaWYgKCAoaSA9IGUxICYgMTUpICE9MCkKKwkJCWR2YWwoJnJ2KSAvPSB0ZW5zW2ldOworCQlpZiAoZTEgJj0gfjE1KSB7CisJCQllMSA+Pj0gNDsKKwkJCXdoaWxlKGUxID49ICgxIDw8IChuX2JpZ3RlbnMtMSkpKSB7CisJCQkJZTIgKz0gKCh3b3JkMCgmcnYpICYgRXhwX21hc2spCisJCQkJCT4+IEV4cF9zaGlmdDEpIC0gQmlhczsKKwkJCQl3b3JkMCgmcnYpICY9IH5FeHBfbWFzazsKKwkJCQl3b3JkMCgmcnYpIHw9IEJpYXMgPDwgRXhwX3NoaWZ0MTsKKwkJCQlkdmFsKCZydikgKj0gdGlueXRlbnNbbl9iaWd0ZW5zLTFdOworCQkJCWUxIC09IDEgPDwgKG5fYmlndGVucy0xKTsKKwkJCQl9CisJCQllMiArPSAoKHdvcmQwKCZydikgJiBFeHBfbWFzaykgPj4gRXhwX3NoaWZ0MSkgLSBCaWFzOworCQkJd29yZDAoJnJ2KSAmPSB+RXhwX21hc2s7CisJCQl3b3JkMCgmcnYpIHw9IEJpYXMgPDwgRXhwX3NoaWZ0MTsKKwkJCWZvcihqID0gMDsgZTEgPiAwOyBqKyssIGUxID4+PSAxKQorCQkJCWlmIChlMSAmIDEpCisJCQkJCWR2YWwoJnJ2KSAqPSB0aW55dGVuc1tqXTsKKwkJCX0KKwkJfQorI2lmZGVmIElCTQorCS8qIGUyIGlzIGEgY29ycmVjdGlvbiB0byB0aGUgKGJhc2UgMikgZXhwb25lbnQgb2YgdGhlIHJldHVybgorCSAqIHZhbHVlLCByZWZsZWN0aW5nIGFkanVzdG1lbnRzIGFib3ZlIHRvIGF2b2lkIG92ZXJmbG93IGluIHRoZQorCSAqIG5hdGl2ZSBhcml0aG1ldGljLiAgRm9yIG5hdGl2ZSBJQk0gKGJhc2UgMTYpIGFyaXRobWV0aWMsIHdlCisJICogbXVzdCBtdWx0aXBseSBlMiBieSA0IHRvIGNoYW5nZSBmcm9tIGJhc2UgMTYgdG8gMi4KKwkgKi8KKwllMiA8PD0gMjsKKyNlbmRpZgorCXJ2YiA9IGQyYihkdmFsKCZydiksICZydmUsICZydmJpdHMpOwkvKiBydiA9IHJ2YiAqIDJecnZlICovCisJaWYgKHJ2YiA9PSBOVUxMKQorCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJcnZlICs9IGUyOworCWlmICgoaiA9IHJ2Yml0cyAtIG5iaXRzKSA+IDApIHsKKwkJcnNoaWZ0KHJ2Yiwgaik7CisJCXJ2Yml0cyA9IG5iaXRzOworCQlydmUgKz0gajsKKwkJfQorCWJiMCA9IDA7CS8qIHRyYWlsaW5nIHplcm8gYml0cyBpbiBydmIgKi8KKwllMiA9IHJ2ZSArIHJ2Yml0cyAtIG5iaXRzOworCWlmIChlMiA+IGZwaS0+ZW1heCArIDEpCisJCWdvdG8gaHVnZTsKKwlydmUxID0gcnZlICsgcnZiaXRzIC0gbmJpdHM7CisJaWYgKGUyIDwgKGVtaW4gPSBmcGktPmVtaW4pKSB7CisJCWRlbm9ybSA9IDE7CisJCWogPSBydmUgLSBlbWluOworCQlpZiAoaiA+IDApIHsKKwkJCXJ2YiA9IGxzaGlmdChydmIsIGopOworCQkJaWYgKHJ2YiA9PSBOVUxMKQorCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCXJ2Yml0cyArPSBqOworCQkJfQorCQllbHNlIGlmIChqIDwgMCkgeworCQkJcnZiaXRzICs9IGo7CisJCQlpZiAocnZiaXRzIDw9IDApIHsKKwkJCQlpZiAocnZiaXRzIDwgLTEpIHsKKyB1Zmw6CisJCQkJCXJ2Yi0+d2RzID0gMDsKKwkJCQkJcnZiLT54WzBdID0gMDsKKwkJCQkJKmV4cCA9IGVtaW47CisJCQkJCWlydiA9IFNUUlRPR19VbmRlcmZsb3cgfCBTVFJUT0dfSW5leGxvOworCQkJCQlnb3RvIHJldDsKKwkJCQkJfQorCQkJCXJ2Yi0+eFswXSA9IHJ2Yi0+d2RzID0gcnZiaXRzID0gMTsKKwkJCQl9CisJCQllbHNlCisJCQkJcnNoaWZ0KHJ2YiwgLWopOworCQkJfQorCQlydmUgPSBydmUxID0gZW1pbjsKKwkJaWYgKHN1ZGRlbl91bmRlcmZsb3cgJiYgZTIgKyAxIDwgZW1pbikKKwkJCWdvdG8gdWZsOworCQl9CisKKwkvKiBOb3cgdGhlIGhhcmQgcGFydCAtLSBhZGp1c3RpbmcgcnYgdG8gdGhlIGNvcnJlY3QgdmFsdWUuKi8KKworCS8qIFB1dCBkaWdpdHMgaW50byBiZDogdHJ1ZSB2YWx1ZSA9IGJkICogMTBeZSAqLworCisJYmQwID0gczJiKHMwLCBuZDAsIG5kLCB5LCBkcGxlbik7CisJaWYgKGJkMCA9PSBOVUxMKQorCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisKKwlmb3IoOzspIHsKKwkJYmQgPSBCYWxsb2MoYmQwLT5rKTsKKwkJaWYgKGJkID09IE5VTEwpCisJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCUJjb3B5KGJkLCBiZDApOworCQliYiA9IEJhbGxvYyhydmItPmspOworCQlpZiAoYmIgPT0gTlVMTCkKKwkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJQmNvcHkoYmIsIHJ2Yik7CisJCWJiYml0cyA9IHJ2Yml0cyAtIGJiMDsKKwkJYmJlID0gcnZlICsgYmIwOworCQlicyA9IGkyYigxKTsKKwkJaWYgKGJzID09IE5VTEwpCisJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisKKwkJaWYgKGUgPj0gMCkgeworCQkJYmIyID0gYmI1ID0gMDsKKwkJCWJkMiA9IGJkNSA9IGU7CisJCQl9CisJCWVsc2UgeworCQkJYmIyID0gYmI1ID0gLWU7CisJCQliZDIgPSBiZDUgPSAwOworCQkJfQorCQlpZiAoYmJlID49IDApCisJCQliYjIgKz0gYmJlOworCQllbHNlCisJCQliZDIgLT0gYmJlOworCQliczIgPSBiYjI7CisJCWogPSBuYml0cyArIDEgLSBiYmJpdHM7CisJCWkgPSBiYmUgKyBiYmJpdHMgLSBuYml0czsKKwkJaWYgKGkgPCBlbWluKQkvKiBkZW5vcm1hbCAqLworCQkJaiArPSBpIC0gZW1pbjsKKwkJYmIyICs9IGo7CisJCWJkMiArPSBqOworCQlpID0gYmIyIDwgYmQyID8gYmIyIDogYmQyOworCQlpZiAoaSA+IGJzMikKKwkJCWkgPSBiczI7CisJCWlmIChpID4gMCkgeworCQkJYmIyIC09IGk7CisJCQliZDIgLT0gaTsKKwkJCWJzMiAtPSBpOworCQkJfQorCQlpZiAoYmI1ID4gMCkgeworCQkJYnMgPSBwb3c1bXVsdChicywgYmI1KTsKKwkJCWlmIChicyA9PSBOVUxMKQorCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCWJiMSA9IG11bHQoYnMsIGJiKTsKKwkJCWlmIChiYjEgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQlCZnJlZShiYik7CisJCQliYiA9IGJiMTsKKwkJCX0KKwkJYmIyIC09IGJiMDsKKwkJaWYgKGJiMiA+IDApIHsKKwkJCWJiID0gbHNoaWZ0KGJiLCBiYjIpOworCQkJaWYgKGJiID09IE5VTEwpCisJCQkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCQkJfQorCQllbHNlIGlmIChiYjIgPCAwKQorCQkJcnNoaWZ0KGJiLCAtYmIyKTsKKwkJaWYgKGJkNSA+IDApIHsKKwkJCWJkID0gcG93NW11bHQoYmQsIGJkNSk7CisJCQlpZiAoYmQgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQl9CisJCWlmIChiZDIgPiAwKSB7CisJCQliZCA9IGxzaGlmdChiZCwgYmQyKTsKKwkJCWlmIChiZCA9PSBOVUxMKQorCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCX0KKwkJaWYgKGJzMiA+IDApIHsKKwkJCWJzID0gbHNoaWZ0KGJzLCBiczIpOworCQkJaWYgKGJzID09IE5VTEwpCisJCQkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCQkJfQorCQlhc3ViID0gMTsKKwkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCWRlbHRhID0gZGlmZihiYiwgYmQpOworCQlpZiAoZGVsdGEgPT0gTlVMTCkKKwkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJaWYgKGRlbHRhLT53ZHMgPD0gMSAmJiAhZGVsdGEtPnhbMF0pCisJCQlicmVhazsKKwkJZHNpZ24gPSBkZWx0YS0+c2lnbjsKKwkJZGVsdGEtPnNpZ24gPSBmaW5pc2hlZCA9IDA7CisJCUwgPSAwOworCQlpID0gY21wKGRlbHRhLCBicyk7CisJCWlmIChyZCAmJiBpIDw9IDApIHsKKwkJCWlydiA9IFNUUlRPR19Ob3JtYWw7CisJCQlpZiAoIChmaW5pc2hlZCA9IGRzaWduIF4gKHJkJjEpKSAhPTApIHsKKwkJCQlpZiAoZHNpZ24gIT0gMCkgeworCQkJCQlpcnYgfD0gU1RSVE9HX0luZXhoaTsKKwkJCQkJZ290byBhZGoxOworCQkJCQl9CisJCQkJaXJ2IHw9IFNUUlRPR19JbmV4bG87CisJCQkJaWYgKHJ2ZTEgPT0gZW1pbikKKwkJCQkJZ290byBhZGoxOworCQkJCWZvcihpID0gMCwgaiA9IG5iaXRzOyBqID49IFVMYml0czsKKwkJCQkJCWkrKywgaiAtPSBVTGJpdHMpIHsKKwkJCQkJaWYgKHJ2Yi0+eFtpXSAmIEFMTF9PTikKKwkJCQkJCWdvdG8gYWRqMTsKKwkJCQkJfQorCQkJCWlmIChqID4gMSAmJiBsbzBiaXRzKHJ2Yi0+eCArIGkpIDwgaiAtIDEpCisJCQkJCWdvdG8gYWRqMTsKKwkJCQlydmUgPSBydmUxIC0gMTsKKwkJCQlydmIgPSBzZXRfb25lcyhydmIsIHJ2Yml0cyA9IG5iaXRzKTsKKwkJCQlpZiAocnZiID09IE5VTEwpCisJCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCQlicmVhazsKKwkJCQl9CisJCQlpcnYgfD0gZHNpZ24gPyBTVFJUT0dfSW5leGxvIDogU1RSVE9HX0luZXhoaTsKKwkJCWJyZWFrOworCQkJfQorCQlpZiAoaSA8IDApIHsKKwkJCS8qIEVycm9yIGlzIGxlc3MgdGhhbiBoYWxmIGFuIHVscCAtLSBjaGVjayBmb3IKKwkJCSAqIHNwZWNpYWwgY2FzZSBvZiBtYW50aXNzYSBhIHBvd2VyIG9mIHR3by4KKwkJCSAqLworCQkJaXJ2ID0gZHNpZ24KKwkJCQk/IFNUUlRPR19Ob3JtYWwgfCBTVFJUT0dfSW5leGxvCisJCQkJOiBTVFJUT0dfTm9ybWFsIHwgU1RSVE9HX0luZXhoaTsKKwkJCWlmIChkc2lnbiB8fCBiYmJpdHMgPiAxIHx8IGRlbm9ybSB8fCBydmUxID09IGVtaW4pCisJCQkJYnJlYWs7CisJCQlkZWx0YSA9IGxzaGlmdChkZWx0YSwxKTsKKwkJCWlmIChkZWx0YSA9PSBOVUxMKQorCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCWlmIChjbXAoZGVsdGEsIGJzKSA+IDApIHsKKwkJCQlpcnYgPSBTVFJUT0dfTm9ybWFsIHwgU1RSVE9HX0luZXhsbzsKKwkJCQlnb3RvIGRyb3BfZG93bjsKKwkJCQl9CisJCQlicmVhazsKKwkJCX0KKwkJaWYgKGkgPT0gMCkgeworCQkJLyogZXhhY3RseSBoYWxmLXdheSBiZXR3ZWVuICovCisJCQlpZiAoZHNpZ24pIHsKKwkJCQlpZiAoZGVub3JtICYmIGFsbF9vbihydmIsIHJ2Yml0cykpIHsKKwkJCQkJLypib3VuZGFyeSBjYXNlIC0tIGluY3JlbWVudCBleHBvbmVudCovCisJCQkJCXJ2Yi0+d2RzID0gMTsKKwkJCQkJcnZiLT54WzBdID0gMTsKKwkJCQkJcnZlID0gZW1pbiArIG5iaXRzIC0gKHJ2Yml0cyA9IDEpOworCQkJCQlpcnYgPSBTVFJUT0dfTm9ybWFsIHwgU1RSVE9HX0luZXhoaTsKKwkJCQkJZGVub3JtID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQlpcnYgPSBTVFJUT0dfTm9ybWFsIHwgU1RSVE9HX0luZXhsbzsKKwkJCQl9CisJCQllbHNlIGlmIChiYmJpdHMgPT0gMSkgeworCQkJCWlydiA9IFNUUlRPR19Ob3JtYWw7CisgZHJvcF9kb3duOgorCQkJCS8qIGJvdW5kYXJ5IGNhc2UgLS0gZGVjcmVtZW50IGV4cG9uZW50ICovCisJCQkJaWYgKHJ2ZTEgPT0gZW1pbikgeworCQkJCQlpcnYgPSBTVFJUT0dfTm9ybWFsIHwgU1RSVE9HX0luZXhoaTsKKwkJCQkJaWYgKHJ2Yi0+d2RzID09IDEgJiYgcnZiLT54WzBdID09IDEpCisJCQkJCQlzdWRkZW5fdW5kZXJmbG93ID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQlydmUgLT0gbmJpdHM7CisJCQkJcnZiID0gc2V0X29uZXMocnZiLCBydmJpdHMgPSBuYml0cyk7CisJCQkJaWYgKHJ2YiA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQkJYnJlYWs7CisJCQkJfQorCQkJZWxzZQorCQkJCWlydiA9IFNUUlRPR19Ob3JtYWwgfCBTVFJUT0dfSW5leGhpOworCQkJaWYgKChiYmJpdHMgPCBuYml0cyAmJiAhZGVub3JtKSB8fCAhKHJ2Yi0+eFswXSAmIDEpKQorCQkJCWJyZWFrOworCQkJaWYgKGRzaWduKSB7CisJCQkJcnZiID0gaW5jcmVtZW50KHJ2Yik7CisJCQkJaWYgKHJ2YiA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQkJaiA9IGttYXNrICYgKFVMYml0cyAtIChydmJpdHMgJiBrbWFzaykpOworCQkJCWlmIChoaTBiaXRzKHJ2Yi0+eFtydmItPndkcyAtIDFdKSAhPSBqKQorCQkJCQlydmJpdHMrKzsKKwkJCQlpcnYgPSBTVFJUT0dfTm9ybWFsIHwgU1RSVE9HX0luZXhoaTsKKwkJCQl9CisJCQllbHNlIHsKKwkJCQlpZiAoYmJiaXRzID09IDEpCisJCQkJCWdvdG8gdW5kZmw7CisJCQkJZGVjcmVtZW50KHJ2Yik7CisJCQkJaXJ2ID0gU1RSVE9HX05vcm1hbCB8IFNUUlRPR19JbmV4bG87CisJCQkJfQorCQkJYnJlYWs7CisJCQl9CisJCWlmICgoZHZhbCgmYWRqKSA9IHJhdGlvKGRlbHRhLCBicykpIDw9IDIuKSB7CisgYWRqMToKKwkJCWluZXggPSBTVFJUT0dfSW5leGxvOworCQkJaWYgKGRzaWduKSB7CisJCQkJYXN1YiA9IDA7CisJCQkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCQkJfQorCQkJZWxzZSBpZiAoZGVub3JtICYmIGJiYml0cyA8PSAxKSB7CisgdW5kZmw6CisJCQkJcnZiLT53ZHMgPSAwOworCQkJCXJ2ZSA9IGVtaW47CisJCQkJaXJ2ID0gU1RSVE9HX1VuZGVyZmxvdyB8IFNUUlRPR19JbmV4bG87CisJCQkJYnJlYWs7CisJCQkJfQorCQkJYWRqMCA9IGR2YWwoJmFkaikgPSAxLjsKKwkJCX0KKwkJZWxzZSB7CisJCQlhZGowID0gZHZhbCgmYWRqKSAqPSAwLjU7CisJCQlpZiAoZHNpZ24pIHsKKwkJCQlhc3ViID0gMDsKKwkJCQlpbmV4ID0gU1RSVE9HX0luZXhsbzsKKwkJCQl9CisJCQlpZiAoZHZhbCgmYWRqKSA8IDIxNDc0ODM2NDcuKSB7CisJCQkJTCA9IGFkajA7CisJCQkJYWRqMCAtPSBMOworCQkJCXN3aXRjaChyZCkgeworCQkJCSAgY2FzZSAwOgorCQkJCQlpZiAoYWRqMCA+PSAuNSkKKwkJCQkJCWdvdG8gaW5jX0w7CisJCQkJCWJyZWFrOworCQkJCSAgY2FzZSAxOgorCQkJCQlpZiAoYXN1YiAmJiBhZGowID4gMC4pCisJCQkJCQlnb3RvIGluY19MOworCQkJCQlicmVhazsKKwkJCQkgIGNhc2UgMjoKKwkJCQkJaWYgKCFhc3ViICYmIGFkajAgPiAwLikgeworIGluY19MOgorCQkJCQkJTCsrOworCQkJCQkJaW5leCA9IFNUUlRPR19JbmV4YWN0IC0gaW5leDsKKwkJCQkJCX0KKwkJCQkgIH0KKwkJCQlkdmFsKCZhZGopID0gTDsKKwkJCQl9CisJCQl9CisJCXkgPSBydmUgKyBydmJpdHM7CisKKwkJLyogYWRqICo9IHVscChkdmFsKCZydikpOyAqLworCQkvKiBpZiAoYXN1YikgcnYgLT0gYWRqOyBlbHNlIHJ2ICs9IGFkajsgKi8KKworCQlpZiAoIWRlbm9ybSAmJiBydmJpdHMgPCBuYml0cykgeworCQkJcnZiID0gbHNoaWZ0KHJ2YiwgaiA9IG5iaXRzIC0gcnZiaXRzKTsKKwkJCWlmIChydmIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQlydmUgLT0gajsKKwkJCXJ2Yml0cyA9IG5iaXRzOworCQkJfQorCQlhYiA9IGQyYihkdmFsKCZhZGopLCAmYWJlLCAmYWJpdHMpOworCQlpZiAoYWIgPT0gTlVMTCkKKwkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJaWYgKGFiZSA8IDApCisJCQlyc2hpZnQoYWIsIC1hYmUpOworCQllbHNlIGlmIChhYmUgPiAwKSB7CisJCQlhYiA9IGxzaGlmdChhYiwgYWJlKTsKKwkJCWlmIChhYiA9PSBOVUxMKQorCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCX0KKwkJcnZiMCA9IHJ2YjsKKwkJaWYgKGFzdWIpIHsKKwkJCS8qIHJ2IC09IGFkajsgKi8KKwkJCWogPSBoaTBiaXRzKHJ2Yi0+eFtydmItPndkcy0xXSk7CisJCQlydmIgPSBkaWZmKHJ2YiwgYWIpOworCQkJaWYgKHJ2YiA9PSBOVUxMKQorCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCWsgPSBydmIwLT53ZHMgLSAxOworCQkJaWYgKGRlbm9ybSkKKwkJCQkvKiBkbyBub3RoaW5nICovOworCQkJZWxzZSBpZiAocnZiLT53ZHMgPD0gaworCQkJCXx8IGhpMGJpdHMoIHJ2Yi0+eFtrXSkgPgorCQkJCSAgIGhpMGJpdHMocnZiMC0+eFtrXSkpIHsKKwkJCQkvKiB1bmxpa2VseTsgY2FuIG9ubHkgaGF2ZSBsb3N0IDEgaGlnaCBiaXQgKi8KKwkJCQlpZiAocnZlMSA9PSBlbWluKSB7CisJCQkJCS0tcnZiaXRzOworCQkJCQlkZW5vcm0gPSAxOworCQkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXJ2YiA9IGxzaGlmdChydmIsIDEpOworCQkJCQlpZiAocnZiID09IE5VTEwpCisJCQkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQkJCS0tcnZlOworCQkJCQktLXJ2ZTE7CisJCQkJCUwgPSBmaW5pc2hlZCA9IDA7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCWVsc2UgeworCQkJcnZiID0gc3VtKHJ2YiwgYWIpOworCQkJaWYgKHJ2YiA9PSBOVUxMKQorCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCWsgPSBydmItPndkcyAtIDE7CisJCQlpZiAoayA+PSBydmIwLT53ZHMKKwkJCSB8fCBoaTBiaXRzKHJ2Yi0+eFtrXSkgPCBoaTBiaXRzKHJ2YjAtPnhba10pKSB7CisJCQkJaWYgKGRlbm9ybSkgeworCQkJCQlpZiAoKytydmJpdHMgPT0gbmJpdHMpCisJCQkJCQlkZW5vcm0gPSAwOworCQkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXJzaGlmdChydmIsIDEpOworCQkJCQlydmUrKzsKKwkJCQkJcnZlMSsrOworCQkJCQlMID0gMDsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJQmZyZWUoYWIpOworCQlCZnJlZShydmIwKTsKKwkJaWYgKGZpbmlzaGVkKQorCQkJYnJlYWs7CisKKwkJeiA9IHJ2ZSArIHJ2Yml0czsKKwkJaWYgKHkgPT0geiAmJiBMKSB7CisJCQkvKiBDYW4gd2Ugc3RvcCBub3c/ICovCisJCQl0b2wgPSBkdmFsKCZhZGopICogNWUtMTY7IC8qID4gbWF4IHJlbCBlcnJvciAqLworCQkJZHZhbCgmYWRqKSA9IGFkajAgLSAuNTsKKwkJCWlmIChkdmFsKCZhZGopIDwgLXRvbCkgeworCQkJCWlmIChhZGowID4gdG9sKSB7CisJCQkJCWlydiB8PSBpbmV4OworCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCWVsc2UgaWYgKGR2YWwoJmFkaikgPiB0b2wgJiYgYWRqMCA8IDEuIC0gdG9sKSB7CisJCQkJaXJ2IHw9IGluZXg7CisJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQliYjAgPSBkZW5vcm0gPyAwIDogdHJhaWx6KHJ2Yik7CisJCUJmcmVlKGJiKTsKKwkJQmZyZWUoYmQpOworCQlCZnJlZShicyk7CisJCUJmcmVlKGRlbHRhKTsKKwkJfQorCWlmICghZGVub3JtICYmIChqID0gbmJpdHMgLSBydmJpdHMpKSB7CisJCWlmIChqID4gMCkgeworCQkJcnZiID0gbHNoaWZ0KHJ2Yiwgaik7CisJCQlpZiAocnZiID09IE5VTEwpCisJCQkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCQkJfQorCQllbHNlCisJCQlyc2hpZnQocnZiLCAtaik7CisJCXJ2ZSAtPSBqOworCQl9CisJKmV4cCA9IHJ2ZTsKKwlCZnJlZShiYik7CisJQmZyZWUoYmQpOworCUJmcmVlKGJzKTsKKwlCZnJlZShiZDApOworCUJmcmVlKGRlbHRhKTsKKwlpZiAocnZlID4gZnBpLT5lbWF4KSB7CisJCXN3aXRjaChmcGktPnJvdW5kaW5nICYgMykgeworCQkgIGNhc2UgRlBJX1JvdW5kX25lYXI6CisJCQlnb3RvIGh1Z2U7CisJCSAgY2FzZSBGUElfUm91bmRfdXA6CisJCQlpZiAoIXNpZ24pCisJCQkJZ290byBodWdlOworCQkJYnJlYWs7CisJCSAgY2FzZSBGUElfUm91bmRfZG93bjoKKwkJCWlmIChzaWduKQorCQkJCWdvdG8gaHVnZTsKKwkJICB9CisJCS8qIFJvdW5kIHRvIGxhcmdlc3QgcmVwcmVzZW50YWJsZSBtYWduaXR1ZGUgKi8KKwkJQmZyZWUocnZiKTsKKwkJcnZiID0gMDsKKwkJaXJ2ID0gU1RSVE9HX05vcm1hbCB8IFNUUlRPR19JbmV4bG87CisJCSpleHAgPSBmcGktPmVtYXg7CisJCWIgPSBiaXRzOworCQliZSA9IGIgKyAoKGZwaS0+bmJpdHMgKyAzMSkgPj4gNSk7CisJCXdoaWxlKGIgPCBiZSkKKwkJCSpiKysgPSAtMTsKKwkJaWYgKChqID0gZnBpLT5uYml0cyAmIDB4MWYpKQorCQkJKi0tYmUgPj49ICgzMiAtIGopOworCQlnb3RvIHJldDsKKyBodWdlOgorCQlydmItPndkcyA9IDA7CisJCWlydiA9IFNUUlRPR19JbmZpbml0ZSB8IFNUUlRPR19PdmVyZmxvdyB8IFNUUlRPR19JbmV4aGk7CisjaWZuZGVmIE5PX0VSUk5PCisJCWVycm5vID0gRVJBTkdFOworI2VuZGlmCisgaW5mbmFuZXhwOgorCQkqZXhwID0gZnBpLT5lbWF4ICsgMTsKKwkJfQorIHJldDoKKwlpZiAoZGVub3JtKSB7CisJCWlmIChzdWRkZW5fdW5kZXJmbG93KSB7CisJCQlydmItPndkcyA9IDA7CisJCQlpcnYgPSBTVFJUT0dfVW5kZXJmbG93IHwgU1RSVE9HX0luZXhsbzsKKyNpZm5kZWYgTk9fRVJSTk8KKwkJCWVycm5vID0gRVJBTkdFOworI2VuZGlmCisJCQl9CisJCWVsc2UgIHsKKwkJCWlydiA9IChpcnYgJiB+U1RSVE9HX1JldG1hc2spIHwKKwkJCQkocnZiLT53ZHMgPiAwID8gU1RSVE9HX0Rlbm9ybWFsIDogU1RSVE9HX1plcm8pOworCQkJaWYgKGlydiAmIFNUUlRPR19JbmV4YWN0KSB7CisJCQkJaXJ2IHw9IFNUUlRPR19VbmRlcmZsb3c7CisjaWZuZGVmIE5PX0VSUk5PCisJCQkJZXJybm8gPSBFUkFOR0U7CisjZW5kaWYKKwkJCQl9CisJCQl9CisJCX0KKwlpZiAoc2UpCisJCSpzZSA9IChjaGFyICopczsKKwlpZiAoc2lnbikKKwkJaXJ2IHw9IFNUUlRPR19OZWc7CisJaWYgKHJ2YikgeworCQljb3B5Yml0cyhiaXRzLCBuYml0cywgcnZiKTsKKwkJQmZyZWUocnZiKTsKKwkJfQorCXJldHVybiBpcnY7CisJfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N0cnRvZi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N0cnRvZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNDQ5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3RydG9mLmMKQEAgLTAsMCArMSw4MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAwIGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlkIE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICogd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAiQCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgkqLworCisjaW5jbHVkZSAiZ2R0b2FpbXAuaCIKKworIGZsb2F0CisjaWZkZWYgS1JfaGVhZGVycworc3RydG9mKHMsIHNwKSBDT05TVCBjaGFyICpzOyBjaGFyICoqc3A7CisjZWxzZQorc3RydG9mKENPTlNUIGNoYXIgKnMsIGNoYXIgKipzcCkKKyNlbmRpZgoreworCXN0YXRpYyBGUEkgZnBpMCA9IHsgMjQsIDEtMTI3LTI0KzEsICAyNTQtMTI3LTI0KzEsIDEsIFNJIH07CisJVUxvbmcgYml0c1sxXTsKKwlMb25nIGV4cDsKKwlpbnQgazsKKwl1bmlvbiB7IFVMb25nIExbMV07IGZsb2F0IGY7IH0gdTsKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisjaW5jbHVkZSAiZ2R0b2FfZmx0cm5kcy5oIgorI2Vsc2UKKyNkZWZpbmUgZnBpICZmcGkwCisjZW5kaWYKKworCWsgPSBzdHJ0b2RnKHMsIHNwLCBmcGksICZleHAsIGJpdHMpOworCXN3aXRjaChrICYgU1RSVE9HX1JldG1hc2spIHsKKwkgIGNhc2UgU1RSVE9HX05vTnVtYmVyOgorCSAgY2FzZSBTVFJUT0dfWmVybzoKKwkJdS5MWzBdID0gMDsKKwkJYnJlYWs7CisKKwkgIGNhc2UgU1RSVE9HX05vcm1hbDoKKwkgIGNhc2UgU1RSVE9HX05hTmJpdHM6CisJCXUuTFswXSA9IChiaXRzWzBdICYgMHg3ZmZmZmYpIHwgKChleHAgKyAweDdmICsgMjMpIDw8IDIzKTsKKwkJYnJlYWs7CisKKwkgIGNhc2UgU1RSVE9HX0Rlbm9ybWFsOgorCQl1LkxbMF0gPSBiaXRzWzBdOworCQlicmVhazsKKworCSAgY2FzZSBTVFJUT0dfTm9NZW1vcnk6CisJCWVycm5vID0gRVJBTkdFOworCQkvKiBGQUxMVEhST1VHSCAqLworCSAgY2FzZSBTVFJUT0dfSW5maW5pdGU6CisJCXUuTFswXSA9IDB4N2Y4MDAwMDA7CisJCWJyZWFrOworCisJICBjYXNlIFNUUlRPR19OYU46CisJCXUuTFswXSA9IGZfUU5BTjsKKwkgIH0KKwlpZiAoayAmIFNUUlRPR19OZWcpCisJCXUuTFswXSB8PSAweDgwMDAwMDAwTDsKKwlyZXR1cm4gdS5mOworCX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9zdHJ0b3JRLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3RydG9yUS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNWNiMDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3RydG9yUS5jCkBAIC0wLDAgKzEsMTIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDAgYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgorCisjdW5kZWYgXzAKKyN1bmRlZiBfMQorCisvKiBvbmUgb3IgdGhlIG90aGVyIG9mIElFRUVfTUM2OGsgb3IgSUVFRV84MDg3IHNob3VsZCBiZSAjZGVmaW5lZCAqLworCisjaWZkZWYgSUVFRV9NQzY4aworI2RlZmluZSBfMCAwCisjZGVmaW5lIF8xIDEKKyNkZWZpbmUgXzIgMgorI2RlZmluZSBfMyAzCisjZW5kaWYKKyNpZmRlZiBJRUVFXzgwODcKKyNkZWZpbmUgXzAgMworI2RlZmluZSBfMSAyCisjZGVmaW5lIF8yIDEKKyNkZWZpbmUgXzMgMAorI2VuZGlmCisKKyB2b2lkCisjaWZkZWYgS1JfaGVhZGVycworVUx0b1EoTCwgYml0cywgZXhwLCBrKSBVTG9uZyAqTDsgVUxvbmcgKmJpdHM7IExvbmcgZXhwOyBpbnQgazsKKyNlbHNlCitVTHRvUShVTG9uZyAqTCwgVUxvbmcgKmJpdHMsIExvbmcgZXhwLCBpbnQgaykKKyNlbmRpZgoreworCXN3aXRjaChrICYgU1RSVE9HX1JldG1hc2spIHsKKwkgIGNhc2UgU1RSVE9HX05vTnVtYmVyOgorCSAgY2FzZSBTVFJUT0dfWmVybzoKKwkJTFswXSA9IExbMV0gPSBMWzJdID0gTFszXSA9IDA7CisJCWJyZWFrOworCisJICBjYXNlIFNUUlRPR19Ob3JtYWw6CisJICBjYXNlIFNUUlRPR19OYU5iaXRzOgorCQlMW18zXSA9IGJpdHNbMF07CisJCUxbXzJdID0gYml0c1sxXTsKKwkJTFtfMV0gPSBiaXRzWzJdOworCQlMW18wXSA9IChiaXRzWzNdICYgfjB4MTAwMDApIHwgKChleHAgKyAweDNmZmYgKyAxMTIpIDw8IDE2KTsKKwkJYnJlYWs7CisKKwkgIGNhc2UgU1RSVE9HX0Rlbm9ybWFsOgorCQlMW18zXSA9IGJpdHNbMF07CisJCUxbXzJdID0gYml0c1sxXTsKKwkJTFtfMV0gPSBiaXRzWzJdOworCQlMW18wXSA9IGJpdHNbM107CisJCWJyZWFrOworCisJICBjYXNlIFNUUlRPR19Ob01lbW9yeToKKwkJZXJybm8gPSBFUkFOR0U7CisJCS8qIEZBTExUSFJPVUdIICovCisJICBjYXNlIFNUUlRPR19JbmZpbml0ZToKKwkJTFtfMF0gPSAweDdmZmYwMDAwOworCQlMW18xXSA9IExbXzJdID0gTFtfM10gPSAwOworCQlicmVhazsKKworCSAgY2FzZSBTVFJUT0dfTmFOOgorCQlMWzBdID0gbGRfUU5BTjA7CisJCUxbMV0gPSBsZF9RTkFOMTsKKwkJTFsyXSA9IGxkX1FOQU4yOworCQlMWzNdID0gbGRfUU5BTjM7CisJICB9CisJaWYgKGsgJiBTVFJUT0dfTmVnKQorCQlMW18wXSB8PSAweDgwMDAwMDAwTDsKKwl9CisKKyBpbnQKKyNpZmRlZiBLUl9oZWFkZXJzCitzdHJ0b3JRKHMsIHNwLCByb3VuZGluZywgTCkgQ09OU1QgY2hhciAqczsgY2hhciAqKnNwOyBpbnQgcm91bmRpbmc7IHZvaWQgKkw7CisjZWxzZQorc3RydG9yUShDT05TVCBjaGFyICpzLCBjaGFyICoqc3AsIGludCByb3VuZGluZywgdm9pZCAqTCkKKyNlbmRpZgoreworCXN0YXRpYyBGUEkgZnBpMCA9IHsgMTEzLCAxLTE2MzgzLTExMysxLCAzMjc2Ni0xNjM4My0xMTMrMSwgMSwgU0kgfTsKKwlGUEkgKmZwaSwgZnBpMTsKKwlVTG9uZyBiaXRzWzRdOworCUxvbmcgZXhwOworCWludCBrOworCisJZnBpID0gJmZwaTA7CisJaWYgKHJvdW5kaW5nICE9IEZQSV9Sb3VuZF9uZWFyKSB7CisJCWZwaTEgPSBmcGkwOworCQlmcGkxLnJvdW5kaW5nID0gcm91bmRpbmc7CisJCWZwaSA9ICZmcGkxOworCQl9CisJayA9IHN0cnRvZGcocywgc3AsIGZwaSwgJmV4cCwgYml0cyk7CisJVUx0b1EoKFVMb25nKilMLCBiaXRzLCBleHAsIGspOworCXJldHVybiBrOworCX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9zdHJ0b3JkLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3RydG9yZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NmQyNjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3RydG9yZC5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OCwgMjAwMCBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRXQVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byBEYXZpZCBNLiBHYXkgKGRtZyBhdCBhY20gZG90IG9yZywKKyAqIHdpdGggIiBhdCAiIGNoYW5nZWQgYXQgIkAiIGFuZCAiIGRvdCAiIGNoYW5nZWQgdG8gIi4iKS4JKi8KKworI2luY2x1ZGUgImdkdG9haW1wLmgiCisKKyB2b2lkCisjaWZkZWYgS1JfaGVhZGVycworVUx0b2QoTCwgYml0cywgZXhwLCBrKSBVTG9uZyAqTDsgVUxvbmcgKmJpdHM7IExvbmcgZXhwOyBpbnQgazsKKyNlbHNlCitVTHRvZChVTG9uZyAqTCwgVUxvbmcgKmJpdHMsIExvbmcgZXhwLCBpbnQgaykKKyNlbmRpZgoreworCXN3aXRjaChrICYgU1RSVE9HX1JldG1hc2spIHsKKwkgIGNhc2UgU1RSVE9HX05vTnVtYmVyOgorCSAgY2FzZSBTVFJUT0dfWmVybzoKKwkJTFswXSA9IExbMV0gPSAwOworCQlicmVhazsKKworCSAgY2FzZSBTVFJUT0dfRGVub3JtYWw6CisJCUxbXzFdID0gYml0c1swXTsKKwkJTFtfMF0gPSBiaXRzWzFdOworCQlicmVhazsKKworCSAgY2FzZSBTVFJUT0dfTm9ybWFsOgorCSAgY2FzZSBTVFJUT0dfTmFOYml0czoKKwkJTFtfMV0gPSBiaXRzWzBdOworCQlMW18wXSA9IChiaXRzWzFdICYgfjB4MTAwMDAwKSB8ICgoZXhwICsgMHgzZmYgKyA1MikgPDwgMjApOworCQlicmVhazsKKworCSAgY2FzZSBTVFJUT0dfTm9NZW1vcnk6CisJCWVycm5vID0gRVJBTkdFOworCQkvKiBGQUxMVEhST1VHSCAqLworCSAgY2FzZSBTVFJUT0dfSW5maW5pdGU6CisJCUxbXzBdID0gMHg3ZmYwMDAwMDsKKwkJTFtfMV0gPSAwOworCQlicmVhazsKKworCSAgY2FzZSBTVFJUT0dfTmFOOgorCQlMWzBdID0gZF9RTkFOMDsKKwkJTFsxXSA9IGRfUU5BTjE7CisJICB9CisJaWYgKGsgJiBTVFJUT0dfTmVnKQorCQlMW18wXSB8PSAweDgwMDAwMDAwTDsKKwl9CisKKyBpbnQKKyNpZmRlZiBLUl9oZWFkZXJzCitzdHJ0b3JkKHMsIHNwLCByb3VuZGluZywgZCkgQ09OU1QgY2hhciAqczsgY2hhciAqKnNwOyBpbnQgcm91bmRpbmc7IGRvdWJsZSAqZDsKKyNlbHNlCitzdHJ0b3JkKENPTlNUIGNoYXIgKnMsIGNoYXIgKipzcCwgaW50IHJvdW5kaW5nLCBkb3VibGUgKmQpCisjZW5kaWYKK3sKKwlzdGF0aWMgRlBJIGZwaTAgPSB7IDUzLCAxLTEwMjMtNTMrMSwgMjA0Ni0xMDIzLTUzKzEsIDEsIFNJIH07CisJRlBJICpmcGksIGZwaTE7CisJVUxvbmcgYml0c1syXTsKKwlMb25nIGV4cDsKKwlpbnQgazsKKworCWZwaSA9ICZmcGkwOworCWlmIChyb3VuZGluZyAhPSBGUElfUm91bmRfbmVhcikgeworCQlmcGkxID0gZnBpMDsKKwkJZnBpMS5yb3VuZGluZyA9IHJvdW5kaW5nOworCQlmcGkgPSAmZnBpMTsKKwkJfQorCWsgPSBzdHJ0b2RnKHMsIHNwLCBmcGksICZleHAsIGJpdHMpOworCVVMdG9kKChVTG9uZyopZCwgYml0cywgZXhwLCBrKTsKKwlyZXR1cm4gazsKKwl9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3VtLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlYjk1NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9zdW0uYwpAQCAtMCwwICsxLDEwMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAxOTk4IGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlkIE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICogd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAiQCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgkqLworCisjaW5jbHVkZSAiZ2R0b2FpbXAuaCIKKworIEJpZ2ludCAqCisjaWZkZWYgS1JfaGVhZGVycworc3VtKGEsIGIpIEJpZ2ludCAqYTsgQmlnaW50ICpiOworI2Vsc2UKK3N1bShCaWdpbnQgKmEsIEJpZ2ludCAqYikKKyNlbmRpZgoreworCUJpZ2ludCAqYzsKKwlVTG9uZyBjYXJyeSwgKnhjLCAqeGEsICp4YiwgKnhlLCB5OworI2lmZGVmIFBhY2tfMzIKKwlVTG9uZyB6OworI2VuZGlmCisKKwlpZiAoYS0+d2RzIDwgYi0+d2RzKSB7CisJCWMgPSBiOyBiID0gYTsgYSA9IGM7CisJCX0KKwljID0gQmFsbG9jKGEtPmspOworCWlmIChjID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJYy0+d2RzID0gYS0+d2RzOworCWNhcnJ5ID0gMDsKKwl4YSA9IGEtPng7CisJeGIgPSBiLT54OworCXhjID0gYy0+eDsKKwl4ZSA9IHhjICsgYi0+d2RzOworI2lmZGVmIFBhY2tfMzIKKwlkbyB7CisJCXkgPSAoKnhhICYgMHhmZmZmKSArICgqeGIgJiAweGZmZmYpICsgY2Fycnk7CisJCWNhcnJ5ID0gKHkgJiAweDEwMDAwKSA+PiAxNjsKKwkJeiA9ICgqeGErKyA+PiAxNikgKyAoKnhiKysgPj4gMTYpICsgY2Fycnk7CisJCWNhcnJ5ID0gKHogJiAweDEwMDAwKSA+PiAxNjsKKwkJU3RvcmVpbmMoeGMsIHosIHkpOworCQl9CisJCXdoaWxlKHhjIDwgeGUpOworCXhlICs9IGEtPndkcyAtIGItPndkczsKKwl3aGlsZSh4YyA8IHhlKSB7CisJCXkgPSAoKnhhICYgMHhmZmZmKSArIGNhcnJ5OworCQljYXJyeSA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCXogPSAoKnhhKysgPj4gMTYpICsgY2Fycnk7CisJCWNhcnJ5ID0gKHogJiAweDEwMDAwKSA+PiAxNjsKKwkJU3RvcmVpbmMoeGMsIHosIHkpOworCQl9CisjZWxzZQorCWRvIHsKKwkJeSA9ICp4YSsrICsgKnhiKysgKyBjYXJyeTsKKwkJY2FycnkgPSAoeSAmIDB4MTAwMDApID4+IDE2OworCQkqeGMrKyA9IHkgJiAweGZmZmY7CisJCX0KKwkJd2hpbGUoeGMgPCB4ZSk7CisJeGUgKz0gYS0+d2RzIC0gYi0+d2RzOworCXdoaWxlKHhjIDwgeGUpIHsKKwkJeSA9ICp4YSsrICsgY2Fycnk7CisJCWNhcnJ5ID0gKHkgJiAweDEwMDAwKSA+PiAxNjsKKwkJKnhjKysgPSB5ICYgMHhmZmZmOworCQl9CisjZW5kaWYKKwlpZiAoY2FycnkpIHsKKwkJaWYgKGMtPndkcyA9PSBjLT5tYXh3ZHMpIHsKKwkJCWIgPSBCYWxsb2MoYy0+ayArIDEpOworCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJQmNvcHkoYiwgYyk7CisJCQlCZnJlZShjKTsKKwkJCWMgPSBiOworCQkJfQorCQljLT54W2MtPndkcysrXSA9IDE7CisJCX0KKwlyZXR1cm4gYzsKKwl9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvdWxwLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvdWxwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlOWY4NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS91bHAuYwpAQCAtMCwwICsxLDcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgorCisgZG91YmxlCit1bHAKKyNpZmRlZiBLUl9oZWFkZXJzCisJKHgpIFUgKng7CisjZWxzZQorCShVICp4KQorI2VuZGlmCit7CisJTG9uZyBMOworCVUgYTsKKworCUwgPSAod29yZDAoeCkgJiBFeHBfbWFzaykgLSAoUC0xKSpFeHBfbXNrMTsKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCWlmIChMID4gMCkgeworI2VuZGlmCisjaWZkZWYgSUJNCisJCUwgfD0gRXhwX21zazEgPj4gNDsKKyNlbmRpZgorCQl3b3JkMCgmYSkgPSBMOworCQl3b3JkMSgmYSkgPSAwOworI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCX0KKwllbHNlIHsKKwkJTCA9IC1MID4+IEV4cF9zaGlmdDsKKwkJaWYgKEwgPCBFeHBfc2hpZnQpIHsKKwkJCXdvcmQwKCZhKSA9IDB4ODAwMDAgPj4gTDsKKwkJCXdvcmQxKCZhKSA9IDA7CisJCQl9CisJCWVsc2UgeworCQkJd29yZDAoJmEpID0gMDsKKwkJCUwgLT0gRXhwX3NoaWZ0OworCQkJd29yZDEoJmEpID0gTCA+PSAzMSA/IDEgOiAxIDw8ICgzMSAtIEwpOworCQkJfQorCQl9CisjZW5kaWYKKwlyZXR1cm4gZHZhbCgmYSk7CisJfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9hbGFybS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9hbGFybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZjg0N2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2FsYXJtLmMKQEAgLTAsMCArMSw1MSBAQAorLyoJJE9wZW5CU0Q6IGFsYXJtLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozMyBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBCYWNrd2FyZHMgY29tcGF0aWJsZSBhbGFybS4KKyAqLworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3Vuc2lnbmVkIGludAorYWxhcm0odW5zaWduZWQgaW50IHNlY3MpCit7CisJc3RydWN0IGl0aW1lcnZhbCBpdCwgb2l0djsKKwlzdHJ1Y3QgaXRpbWVydmFsICppdHAgPSAmaXQ7CisKKwl0aW1lcmNsZWFyKCZpdHAtPml0X2ludGVydmFsKTsKKwlpdHAtPml0X3ZhbHVlLnR2X3NlYyA9IHNlY3M7CisJaXRwLT5pdF92YWx1ZS50dl91c2VjID0gMDsKKwlpZiAoc2V0aXRpbWVyKElUSU1FUl9SRUFMLCBpdHAsICZvaXR2KSA8IDApCisJCXJldHVybiAoKHVuc2lnbmVkIGludCkgLTEpOworCWlmIChvaXR2Lml0X3ZhbHVlLnR2X3VzZWMpCisJCW9pdHYuaXRfdmFsdWUudHZfc2VjKys7CisJcmV0dXJuIChvaXR2Lml0X3ZhbHVlLnR2X3NlYyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9jaGFyY2xhc3MuaCBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vY2hhcmNsYXNzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdW5pc3RkL2NoYXJjbGFzcy5oCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2NoYXJjbGFzcy5oCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2N0eXBlXy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9jdHlwZV8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWM4MjU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9jdHlwZV8uYwpAQCAtMCwwICsxLDc2IEBACisvKgkkT3BlbkJTRDogY3R5cGVfLmMsdiAxLjEwIDIwMTEvMDkvMjIgMDk6MDY6MTAgc3RzcCBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIChjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIEFsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCisgKiB0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCisgKiBDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAorICogdGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgImN0eXBlX3ByaXZhdGUuaCIKKworY29uc3QgY2hhciBfQ19jdHlwZV9bMSArIENUWVBFX05VTV9DSEFSU10gPSB7CisJMCwKKwlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCisJX0MsCV9DfF9TLAlfQ3xfUywJX0N8X1MsCV9DfF9TLAlfQ3xfUywJX0MsCV9DLAorCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywKKwlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCisgICBfU3woY2hhcilfQiwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCisJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAorCV9OLAlfTiwJX04sCV9OLAlfTiwJX04sCV9OLAlfTiwKKwlfTiwJX04sCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCisJX1AsCV9VfF9YLAlfVXxfWCwJX1V8X1gsCV9VfF9YLAlfVXxfWCwJX1V8X1gsCV9VLAorCV9VLAlfVSwJX1UsCV9VLAlfVSwJX1UsCV9VLAlfVSwKKwlfVSwJX1UsCV9VLAlfVSwJX1UsCV9VLAlfVSwJX1UsCisJX1UsCV9VLAlfVSwJX1AsCV9QLAlfUCwJX1AsCV9QLAorCV9QLAlfTHxfWCwJX0x8X1gsCV9MfF9YLAlfTHxfWCwJX0x8X1gsCV9MfF9YLAlfTCwKKwlfTCwJX0wsCV9MLAlfTCwJX0wsCV9MLAlfTCwJX0wsCisJX0wsCV9MLAlfTCwJX0wsCV9MLAlfTCwJX0wsCV9MLAorCV9MLAlfTCwJX0wsCV9QLAlfUCwJX1AsCV9QLAlfQywKKworCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwgLyogODAgKi8KKwkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsIC8qIDg4ICovCisJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLCAvKiA5MCAqLworCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwgLyogOTggKi8KKwkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsIC8qIEEwICovCisJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLCAvKiBBOCAqLworCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwgLyogQjAgKi8KKwkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsIC8qIEI4ICovCisJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLCAvKiBDMCAqLworCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwgLyogQzggKi8KKwkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsIC8qIEQwICovCisJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLCAvKiBEOCAqLworCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwgLyogRTAgKi8KKwkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsIC8qIEU4ICovCisJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLCAvKiBGMCAqLworCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCAgLyogRjggKi8KK307CisKK2NvbnN0IGNoYXIgKl9jdHlwZV8gPSBfQ19jdHlwZV87CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2V4ZWMuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vZXhlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMmY3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2V4ZWMuYwpAQCAtMCwwICsxLDI1MSBAQAorLyoJJE9wZW5CU0Q6IGV4ZWMuYyx2IDEuMjEgMjAxMy8wOS8zMCAxMjowMjozMyBtaWxsZXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MSwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHBhdGhzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworZXh0ZXJuIGNoYXIgKiplbnZpcm9uOworCitpbnQKK2V4ZWNsKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmFyZywgLi4uKQoreworCXZhX2xpc3QgYXA7CisJY2hhciAqKmFyZ3Y7CisJaW50IG47CisKKwl2YV9zdGFydChhcCwgYXJnKTsKKwluID0gMTsKKwl3aGlsZSAodmFfYXJnKGFwLCBjaGFyICopICE9IE5VTEwpCisJCW4rKzsKKwl2YV9lbmQoYXApOworCWFyZ3YgPSBhbGxvY2EoKG4gKyAxKSAqIHNpemVvZigqYXJndikpOworCWlmIChhcmd2ID09IE5VTEwpIHsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiAoLTEpOworCX0KKwl2YV9zdGFydChhcCwgYXJnKTsKKwluID0gMTsKKwlhcmd2WzBdID0gKGNoYXIgKilhcmc7CisJd2hpbGUgKChhcmd2W25dID0gdmFfYXJnKGFwLCBjaGFyICopKSAhPSBOVUxMKQorCQluKys7CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gKGV4ZWN2ZShuYW1lLCBhcmd2LCBlbnZpcm9uKSk7Cit9CisKK2ludAorZXhlY2xlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmFyZywgLi4uKQoreworCXZhX2xpc3QgYXA7CisJY2hhciAqKmFyZ3YsICoqZW52cDsKKwlpbnQgbjsKKworCXZhX3N0YXJ0KGFwLCBhcmcpOworCW4gPSAxOworCXdoaWxlICh2YV9hcmcoYXAsIGNoYXIgKikgIT0gTlVMTCkKKwkJbisrOworCXZhX2VuZChhcCk7CisJYXJndiA9IGFsbG9jYSgobiArIDEpICogc2l6ZW9mKCphcmd2KSk7CisJaWYgKGFyZ3YgPT0gTlVMTCkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXZhX3N0YXJ0KGFwLCBhcmcpOworCW4gPSAxOworCWFyZ3ZbMF0gPSAoY2hhciAqKWFyZzsKKwl3aGlsZSAoKGFyZ3Zbbl0gPSB2YV9hcmcoYXAsIGNoYXIgKikpICE9IE5VTEwpCisJCW4rKzsKKwllbnZwID0gdmFfYXJnKGFwLCBjaGFyICoqKTsKKwl2YV9lbmQoYXApOworCXJldHVybiAoZXhlY3ZlKG5hbWUsIGFyZ3YsIGVudnApKTsKK30KKworaW50CitleGVjbHAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqYXJnLCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwljaGFyICoqYXJndjsKKwlpbnQgbjsKKworCXZhX3N0YXJ0KGFwLCBhcmcpOworCW4gPSAxOworCXdoaWxlICh2YV9hcmcoYXAsIGNoYXIgKikgIT0gTlVMTCkKKwkJbisrOworCXZhX2VuZChhcCk7CisJYXJndiA9IGFsbG9jYSgobiArIDEpICogc2l6ZW9mKCphcmd2KSk7CisJaWYgKGFyZ3YgPT0gTlVMTCkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXZhX3N0YXJ0KGFwLCBhcmcpOworCW4gPSAxOworCWFyZ3ZbMF0gPSAoY2hhciAqKWFyZzsKKwl3aGlsZSAoKGFyZ3Zbbl0gPSB2YV9hcmcoYXAsIGNoYXIgKikpICE9IE5VTEwpCisJCW4rKzsKKwl2YV9lbmQoYXApOworCXJldHVybiAoZXhlY3ZwKG5hbWUsIGFyZ3YpKTsKK30KKworaW50CitleGVjdihjb25zdCBjaGFyICpuYW1lLCBjaGFyICpjb25zdCAqYXJndikKK3sKKwkodm9pZClleGVjdmUobmFtZSwgYXJndiwgZW52aXJvbik7CisJcmV0dXJuICgtMSk7Cit9CisKK2ludAorZXhlY3ZwZShjb25zdCBjaGFyICpuYW1lLCBjaGFyICpjb25zdCAqYXJndiwgY2hhciAqY29uc3QgKmVudnApCit7CisJY2hhciAqKm1lbXA7CisJaW50IGNudDsKKwlzaXplX3QgbHAsIGxuLCBsZW47CisJY2hhciAqcDsKKwlpbnQgZWFjY2VzID0gMDsKKwljaGFyICpicCwgKmN1ciwgKnBhdGgsIGJ1ZltQQVRIX01BWF07CisKKwkvKgorCSAqIERvIG5vdCBhbGxvdyBudWxsIG5hbWUKKwkgKi8KKwlpZiAobmFtZSA9PSBOVUxMIHx8ICpuYW1lID09ICdcMCcpIHsKKwkJZXJybm8gPSBFTk9FTlQ7CisJCXJldHVybiAoLTEpOworIAl9CisKKwkvKiBJZiBpdCdzIGFuIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggbmFtZSwgaXQncyBlYXN5LiAqLworCWlmIChzdHJjaHIobmFtZSwgJy8nKSkgeworCQlicCA9IChjaGFyICopbmFtZTsKKwkJY3VyID0gcGF0aCA9IE5VTEw7CisJCWdvdG8gcmV0cnk7CisJfQorCWJwID0gYnVmOworCisJLyogR2V0IHRoZSBwYXRoIHdlJ3JlIHNlYXJjaGluZy4gKi8KKwlpZiAoIShwYXRoID0gZ2V0ZW52KCJQQVRIIikpKQorCQlwYXRoID0gX1BBVEhfREVGUEFUSDsKKwlsZW4gPSBzdHJsZW4ocGF0aCkgKyAxOworCWN1ciA9IGFsbG9jYShsZW4pOworCWlmIChjdXIgPT0gTlVMTCkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXN0cmxjcHkoY3VyLCBwYXRoLCBsZW4pOworCXBhdGggPSBjdXI7CisJd2hpbGUgKChwID0gc3Ryc2VwKCZjdXIsICI6IikpKSB7CisJCS8qCisJCSAqIEl0J3MgYSBTSEVMTCBwYXRoIC0tIGRvdWJsZSwgbGVhZGluZyBhbmQgdHJhaWxpbmcgY29sb25zCisJCSAqIG1lYW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCQkgKi8KKwkJaWYgKCEqcCkgeworCQkJcCA9ICIuIjsKKwkJCWxwID0gMTsKKwkJfSBlbHNlCisJCQlscCA9IHN0cmxlbihwKTsKKwkJbG4gPSBzdHJsZW4obmFtZSk7CisKKwkJLyoKKwkJICogSWYgdGhlIHBhdGggaXMgdG9vIGxvbmcgY29tcGxhaW4uICBUaGlzIGlzIGEgcG9zc2libGUKKwkJICogc2VjdXJpdHkgaXNzdWU7IGdpdmVuIGEgd2F5IHRvIG1ha2UgdGhlIHBhdGggdG9vIGxvbmcKKwkJICogdGhlIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIHdyb25nIHByb2dyYW0uCisJCSAqLworCQlpZiAobHAgKyBsbiArIDIgPiBzaXplb2YoYnVmKSkgeworCQkJc3RydWN0IGlvdmVjIGlvdlszXTsKKworCQkJaW92WzBdLmlvdl9iYXNlID0gImV4ZWN2cDogIjsKKwkJCWlvdlswXS5pb3ZfbGVuID0gODsKKwkJCWlvdlsxXS5pb3ZfYmFzZSA9IHA7CisJCQlpb3ZbMV0uaW92X2xlbiA9IGxwOworCQkJaW92WzJdLmlvdl9iYXNlID0gIjogcGF0aCB0b28gbG9uZ1xuIjsKKwkJCWlvdlsyXS5pb3ZfbGVuID0gMTY7CisJCQkodm9pZCl3cml0ZXYoU1RERVJSX0ZJTEVOTywgaW92LCAzKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJjb3B5KHAsIGJ1ZiwgbHApOworCQlidWZbbHBdID0gJy8nOworCQliY29weShuYW1lLCBidWYgKyBscCArIDEsIGxuKTsKKwkJYnVmW2xwICsgbG4gKyAxXSA9ICdcMCc7CisKK3JldHJ5OgkJKHZvaWQpZXhlY3ZlKGJwLCBhcmd2LCBlbnZwKTsKKwkJc3dpdGNoKGVycm5vKSB7CisJCWNhc2UgRTJCSUc6CisJCQlnb3RvIGRvbmU7CisJCWNhc2UgRUlTRElSOgorCQljYXNlIEVMT09QOgorCQljYXNlIEVOQU1FVE9PTE9ORzoKKwkJY2FzZSBFTk9FTlQ6CisJCQlicmVhazsKKwkJY2FzZSBFTk9FWEVDOgorCQkJZm9yIChjbnQgPSAwOyBhcmd2W2NudF07ICsrY250KQorCQkJCTsKKwkJCW1lbXAgPSBhbGxvY2EoKGNudCArIDIpICogc2l6ZW9mKGNoYXIgKikpOworCQkJaWYgKG1lbXAgPT0gTlVMTCkKKwkJCQlnb3RvIGRvbmU7CisJCQltZW1wWzBdID0gInNoIjsKKwkJCW1lbXBbMV0gPSBicDsKKwkJCWJjb3B5KGFyZ3YgKyAxLCBtZW1wICsgMiwgY250ICogc2l6ZW9mKGNoYXIgKikpOworCQkJKHZvaWQpZXhlY3ZlKF9QQVRIX0JTSEVMTCwgbWVtcCwgZW52cCk7CisJCQlnb3RvIGRvbmU7CisJCWNhc2UgRU5PTUVNOgorCQkJZ290byBkb25lOworCQljYXNlIEVOT1RESVI6CisJCQlicmVhazsKKwkJY2FzZSBFVFhUQlNZOgorCQkJLyoKKwkJCSAqIFdlIHVzZWQgdG8gcmV0cnkgaGVyZSwgYnV0IHNoKDEpIGRvZXNuJ3QuCisJCQkgKi8KKwkJCWdvdG8gZG9uZTsKKwkJY2FzZSBFQUNDRVM6CisJCQllYWNjZXMgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisJaWYgKGVhY2NlcykKKwkJZXJybm8gPSBFQUNDRVM7CisJZWxzZSBpZiAoIWVycm5vKQorCQllcnJubyA9IEVOT0VOVDsKK2RvbmU6CisJcmV0dXJuICgtMSk7Cit9CisKK2ludAorZXhlY3ZwKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKmNvbnN0ICphcmd2KQoreworICAgIHJldHVybiBleGVjdnBlKG5hbWUsIGFyZ3YsIGVudmlyb24pOworfQorCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2ZubWF0Y2guYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vZm5tYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjODYwZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2ZubWF0Y2guYwpAQCAtMCwwICsxLDQ4NyBAQAorLyoJJE9wZW5CU0Q6IGZubWF0Y2guYyx2IDEuMTcgMjAxMy8xMS8yNCAyMzo1MToyOSBkZXJhYWR0IEV4cCAkCSovCisKKy8qIENvcHlyaWdodCAoYykgMjAxMSwgVk13YXJlLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVk13YXJlLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFZNV0FSRSwgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBUb2RkIEMuIE1pbGxlciA8bWlsbGVydEBvcGVuYnNkLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisvKiBBdXRob3JlZCBieSBXaWxsaWFtIEEuIFJvd2UgSnIuIDx3cm93ZTsgYXBhY2hlLm9yZywgdm13YXJlLmNvbT4sIEFwcmlsIDIwMTEKKyAqCisgKiBEZXJpdmVkIGZyb20gVGhlIE9wZW4gR3JvdXAgQmFzZSBTcGVjaWZpY2F0aW9ucyBJc3N1ZSA3LCBJRUVFIFN0ZCAxMDAzLjEtMjAwOAorICogYXMgZGVzY3JpYmVkIGluOworICogICBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvZm5tYXRjaC5odG1sCisgKgorICogRmlsZW5hbWUgcGF0dGVybiBtYXRjaGVzIGRlZmluZWQgaW4gc2VjdGlvbiAyLjEzLCAiUGF0dGVybiBNYXRjaGluZyBOb3RhdGlvbiIKKyAqIGZyb20gY2hhcHRlciAyLiAiU2hlbGwgQ29tbWFuZCBMYW5ndWFnZSIKKyAqICAgaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvdXRpbGl0aWVzL1YzX2NoYXAwMi5odG1sI3RhZ18xOF8xMworICogd2hlcmU7IDEuIEEgYnJhY2tldCBleHByZXNzaW9uIHN0YXJ0aW5nIHdpdGggYW4gdW5xdW90ZWQgPGNpcmN1bWZsZXg+ICdeJyAKKyAqIGNoYXJhY3RlciBDT05USU5VRVMgdG8gc3BlY2lmeSBhIG5vbi1tYXRjaGluZyBsaXN0OyAyLiBhbiBleHBsaWNpdCA8cGVyaW9kPiAnLicgCisgKiBpbiBhIGJyYWNrZXQgZXhwcmVzc2lvbiBtYXRjaGluZyBsaXN0LCBlLmcuICJbLmFiY10iIGRvZXMgTk9UIG1hdGNoIGEgbGVhZGluZyAKKyAqIDxwZXJpb2Q+IGluIGEgZmlsZW5hbWU7IDMuIGEgPGxlZnQtc3F1YXJlLWJyYWNrZXQ+ICdbJyB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2UKKyAqIGEgdmFsaWQgYnJhY2tldCBleHByZXNzaW9uIGlzIHRyZWF0ZWQgYXMgYW4gb3JkaW5hcnkgY2hhcmFjdGVyOyA0LiBhIGRpZmZlcmluZworICogbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aGluIHBhdHRlcm4gYW5kIHN0cmluZyB3aWxsIE5PVCBtYXRjaDsKKyAqIDUuIGEgdHJhaWxpbmcgJ1wnIGluIEZOTV9FU0NBUEUgbW9kZSBpcyB0cmVhdGVkIGFzIGFuIG9yZGluYXJ5ICdcJyBjaGFyYWN0ZXIuCisgKgorICogQnJhY2tldCBleHBhbnNpb24gZGVmaW5lZCBpbiBzZWN0aW9uIDkuMy41LCAiUkUgQnJhY2tldCBFeHByZXNzaW9uIiwKKyAqIGZyb20gY2hhcHRlciA5LCAiUmVndWxhciBFeHByZXNzaW9ucyIKKyAqICAgaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvVjFfY2hhcDA5Lmh0bWwjdGFnXzA5XzAzXzA1CisgKiB3aXRoIG5vIHN1cHBvcnQgZm9yIGNvbGxhdGluZyBzeW1ib2xzLCBlcXVpdmFsZW5jZSBjbGFzcyBleHByZXNzaW9ucyBvciAKKyAqIGNoYXJhY3RlciBjbGFzcyBleHByZXNzaW9ucy4gIEEgcGFydGlhbCByYW5nZSBleHByZXNzaW9uIHdpdGggYSBsZWFkaW5nIAorICogaHlwaGVuIGZvbGxvd2luZyBhIHZhbGlkIHJhbmdlIGV4cHJlc3Npb24gd2lsbCBtYXRjaCBvbmx5IHRoZSBvcmRpbmFyeQorICogPGh5cGhlbj4gYW5kIHRoZSBlbmRpbmcgY2hhcmFjdGVyIChlLmcuICJbYS1tLXpdIiB3aWxsIG1hdGNoIGNoYXJhY3RlcnMgCisgKiAnYScgdGhyb3VnaCAnbScsIGEgPGh5cGhlbj4gJy0nLCBvciBhICd6JykuCisgKgorICogU3VwcG9ydHMgQlNEIGV4dGVuc2lvbnMgRk5NX0xFQURJTkdfRElSIHRvIG1hdGNoIHBhdHRlcm4gdG8gdGhlIGVuZCBvZiBvbmUKKyAqIHBhdGggc2VnbWVudCBvZiBzdHJpbmcsIGFuZCBGTk1fQ0FTRUZPTEQgdG8gaWdub3JlIGFscGhhIGNhc2UuCisgKgorICogTk9URTogT25seSBQT1NJWC9DIHNpbmdsZSBieXRlIGxvY2FsZXMgYXJlIGNvcnJlY3RseSBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLgorICogTm90YWJseSwgbm9uLVBPU0lYIGxvY2FsZXMgd2l0aCBGTk1fQ0FTRUZPTEQgcHJvZHVjZSB1bmRlZmluZWQgcmVzdWx0cywKKyAqIHBhcnRpY3VsYXJseSBpbiByYW5nZXMgb2YgbWl4ZWQgY2FzZSAoZS5nLiAiW0Etel0iKSBvciBzcGFubmluZyBhbHBoYSBhbmQKKyAqIG5vbmFscGhhIGNoYXJhY3RlcnMgd2l0aGluIGEgcmFuZ2UuCisgKgorICogWFhYIGNvbW1lbnRzIGJlbG93IGluZGljYXRlIHBvcnRpbmcgcmVxdWlyZWQgZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVyIHNldHMKKyAqIGFuZCBub24tUE9TSVggbG9jYWxlIGNvbGxhdGlvbiBvcmRlcnM7IHJlcXVpcmVzIG1iciogQVBJcyB0byB0cmFjayBzaGlmdAorICogc3RhdGUgb2YgcGF0dGVybiBhbmQgc3RyaW5nIChyZXdpbmRpbmcgcGF0dGVybiBhbmQgc3RyaW5nIHJlcGVhdGVkbHkpLgorICoKKyAqIENlcnRhaW4gcGFydHMgb2YgdGhlIGNvZGUgYXNzdW1lIDB4MDAtMHgzRiBhcmUgdW5pcXVlIHdpdGggYW55IE1CQ1MgKGUuZy4KKyAqIFVURi04LCBTSElGVC1KSVMsIGV0YykuICBBbnkgaW1wbGVtZW50YXRpb24gYWxsb3dpbmcgJ1wnIGFzIGFuIGFsdGVybmF0ZQorICogcGF0aCBkZWxpbWl0ZXIgbXVzdCBiZSBhd2FyZSB0aGF0IDB4NUMgaXMgTk9UIHVuaXF1ZSB3aXRoaW4gU0hJRlQtSklTLgorICovCisKKyNpbmNsdWRlIDxmbm1hdGNoLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgImNoYXJjbGFzcy5oIgorCisjZGVmaW5lCVJBTkdFX01BVENICTEKKyNkZWZpbmUJUkFOR0VfTk9NQVRDSAkwCisjZGVmaW5lCVJBTkdFX0VSUk9SCSgtMSkKKworc3RhdGljIGludAorY2xhc3NtYXRjaChjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyIHRlc3QsIGludCBmb2xkY2FzZSwgY29uc3QgY2hhciAqKmVwKQoreworCXN0cnVjdCBjY2xhc3MgKmNjOworCWNvbnN0IGNoYXIgKmNvbG9uOworCXNpemVfdCBsZW47CisJaW50IHJ2YWwgPSBSQU5HRV9OT01BVENIOworCWNvbnN0IGNoYXIgKiBjb25zdCBtaXNtYXRjaCA9IHBhdHRlcm47CisKKwlpZiAoKnBhdHRlcm4gIT0gJ1snIHx8IHBhdHRlcm5bMV0gIT0gJzonKSB7CisJCSplcCA9IG1pc21hdGNoOworCQlyZXR1cm4oUkFOR0VfRVJST1IpOworCX0KKworCXBhdHRlcm4gKz0gMjsKKworCWlmICgoY29sb24gPSBzdHJjaHIocGF0dGVybiwgJzonKSkgPT0gTlVMTCB8fCBjb2xvblsxXSAhPSAnXScpIHsKKwkJKmVwID0gbWlzbWF0Y2g7CisJCXJldHVybihSQU5HRV9FUlJPUik7CisJfQorCSplcCA9IGNvbG9uICsgMjsKKwlsZW4gPSAoc2l6ZV90KShjb2xvbiAtIHBhdHRlcm4pOworCisJaWYgKGZvbGRjYXNlICYmIHN0cm5jbXAocGF0dGVybiwgInVwcGVyOl0iLCA3KSA9PSAwKQorCQlwYXR0ZXJuID0gImxvd2VyOl0iOworCWZvciAoY2MgPSBjY2xhc3NlczsgY2MtPm5hbWUgIT0gTlVMTDsgY2MrKykgeworCQlpZiAoIXN0cm5jbXAocGF0dGVybiwgY2MtPm5hbWUsIGxlbikgJiYgY2MtPm5hbWVbbGVuXSA9PSAnXDAnKSB7CisJCQlpZiAoY2MtPmlzY3R5cGUoKHVuc2lnbmVkIGNoYXIpdGVzdCkpCisJCQkJcnZhbCA9IFJBTkdFX01BVENIOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGNjLT5uYW1lID09IE5VTEwpIHsKKwkJLyogaW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MsIHRyZWF0IGFzIG5vcm1hbCB0ZXh0ICovCisJCSplcCA9IG1pc21hdGNoOworCQlydmFsID0gUkFOR0VfRVJST1I7CisJfQorCXJldHVybihydmFsKTsKK30KKworLyogTW9zdCBNQkNTL2NvbGxhdGlvbi9jYXNlIGlzc3VlcyBoYW5kbGVkIGhlcmUuICBXaWxkY2FyZCAnKicgaXMgbm90IGhhbmRsZWQuCisgKiBFT1MgJ1wwJyBhbmQgdGhlIEZOTV9QQVRITkFNRSAnLycgZGVsaW1pdGVycyBhcmUgbm90IGFkdmFuY2VkIG92ZXIsIAorICogaG93ZXZlciB0aGUgIlwvIiBzZXF1ZW5jZSBpcyBhZHZhbmNlZCB0byAnLycuCisgKgorICogQm90aCBwYXR0ZXJuIGFuZCBzdHJpbmcgYXJlICoqY2hhciB0byBzdXBwb3J0IHBvaW50ZXIgaW5jcmVtZW50IG9mIGFyYml0cmFyeQorICogbXVsdGlieXRlIGNoYXJhY3RlcnMgZm9yIHRoZSBnaXZlbiBsb2NhbGUsIGluIGEgbGF0ZXIgaXRlcmF0aW9uIG9mIHRoaXMgY29kZQorICovCitzdGF0aWMgaW50IGZubWF0Y2hfY2goY29uc3QgY2hhciAqKnBhdHRlcm4sIGNvbnN0IGNoYXIgKipzdHJpbmcsIGludCBmbGFncykKK3sKKyAgICBjb25zdCBjaGFyICogY29uc3QgbWlzbWF0Y2ggPSAqcGF0dGVybjsKKyAgICBjb25zdCBpbnQgbm9jYXNlID0gISEoZmxhZ3MgJiBGTk1fQ0FTRUZPTEQpOworICAgIGNvbnN0IGludCBlc2NhcGUgPSAhKGZsYWdzICYgRk5NX05PRVNDQVBFKTsKKyAgICBjb25zdCBpbnQgc2xhc2ggPSAhIShmbGFncyAmIEZOTV9QQVRITkFNRSk7CisgICAgaW50IHJlc3VsdCA9IEZOTV9OT01BVENIOworICAgIGNvbnN0IGNoYXIgKnN0YXJ0Y2g7CisgICAgaW50IG5lZ2F0ZTsKKworICAgIGlmICgqKnBhdHRlcm4gPT0gJ1snKQorICAgIHsKKyAgICAgICAgKysqcGF0dGVybjsKKworICAgICAgICAvKiBIYW5kbGUgbmVnYXRpb24sIGVpdGhlciBsZWFkaW5nICEgb3IgXiBvcGVyYXRvcnMgKG5ldmVyIGJvdGgpICovCisgICAgICAgIG5lZ2F0ZSA9ICgoKipwYXR0ZXJuID09ICchJykgfHwgKCoqcGF0dGVybiA9PSAnXicpKTsKKyAgICAgICAgaWYgKG5lZ2F0ZSkKKyAgICAgICAgICAgICsrKnBhdHRlcm47CisKKyAgICAgICAgLyogJ10nIGlzIGFuIG9yZGluYXJ5IGNoYXJhY3RlciBhdCB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHBhdHRlcm4gKi8KKyAgICAgICAgaWYgKCoqcGF0dGVybiA9PSAnXScpCisgICAgICAgICAgICBnb3RvIGxlYWRpbmdjbG9zZWJyYWNlOworCisgICAgICAgIHdoaWxlICgqKnBhdHRlcm4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgqKnBhdHRlcm4gPT0gJ10nKSB7CisgICAgICAgICAgICAgICAgKysqcGF0dGVybjsKKyAgICAgICAgICAgICAgICAvKiBYWFg6IEZpeCBmb3IgTUJDUyBjaGFyYWN0ZXIgd2lkdGggKi8KKyAgICAgICAgICAgICAgICArKypzdHJpbmc7CisgICAgICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQgXiBuZWdhdGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZXNjYXBlICYmICgqKnBhdHRlcm4gPT0gJ1xcJykpIHsKKyAgICAgICAgICAgICAgICArKypwYXR0ZXJuOworCisgICAgICAgICAgICAgICAgLyogUGF0dGVybnMgbXVzdCBiZSB0ZXJtaW5hdGVkIHdpdGggJ10nLCBub3QgRU9TICovCisgICAgICAgICAgICAgICAgaWYgKCEqKnBhdHRlcm4pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBQYXR0ZXJucyBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCAnXScgbm90ICcvJyAqLworICAgICAgICAgICAgaWYgKHNsYXNoICYmICgqKnBhdHRlcm4gPT0gJy8nKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLyogTWF0Y2ggY2hhcmFjdGVyIGNsYXNzZXMuICovCisgICAgICAgICAgICBpZiAoY2xhc3NtYXRjaCgqcGF0dGVybiwgKipzdHJpbmcsIG5vY2FzZSwgcGF0dGVybikKKyAgICAgICAgICAgICAgICA9PSBSQU5HRV9NQVRDSCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKK2xlYWRpbmdjbG9zZWJyYWNlOgorICAgICAgICAgICAgLyogTG9vayBhdCBvbmx5IHdlbGwtZm9ybWVkIHJhbmdlIHBhdHRlcm5zOyAKKyAgICAgICAgICAgICAqICJ4LV0iIGlzIG5vdCBhbGxvd2VkIHVubGVzcyBlc2NhcGVkICgieC1cXSIpCisgICAgICAgICAgICAgKiBYWFg6IEZpeCBmb3IgbG9jYWxlL01CQ1MgY2hhcmFjdGVyIHdpZHRoCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICgoKCpwYXR0ZXJuKVsxXSA9PSAnLScpICYmICgoKnBhdHRlcm4pWzJdICE9ICddJykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RhcnRjaCA9ICpwYXR0ZXJuOworICAgICAgICAgICAgICAgICpwYXR0ZXJuICs9IChlc2NhcGUgJiYgKCgqcGF0dGVybilbMl0gPT0gJ1xcJykpID8gMyA6IDI7CisKKyAgICAgICAgICAgICAgICAvKiBOT1QgYSBwcm9wZXJseSBiYWxhbmNlZCBbZXhwcl0gcGF0dGVybiwgRU9TIHRlcm1pbmF0ZWQgCisgICAgICAgICAgICAgICAgICogb3IgcmFuZ2VzIGNvbnRhaW5pbmcgYSBzbGFzaCBpbiBGTk1fUEFUSE5BTUUgbW9kZSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgICogZmFsbCBvdXQgdG8gdG8gdGhlIHJld2luZCBhbmQgdGVzdCAnWycgbGl0ZXJhbCBjb2RlIHBhdGgKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoISoqcGF0dGVybiB8fCAoc2xhc2ggJiYgKCoqcGF0dGVybiA9PSAnLycpKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAvKiBYWFg6IGhhbmRsZSBsb2NhbGUvTUJDUyBjb21wYXJpc29uLCBhZHZhbmNlIGJ5IE1CQ1MgY2hhciB3aWR0aCAqLworICAgICAgICAgICAgICAgIGlmICgoKipzdHJpbmcgPj0gKnN0YXJ0Y2gpICYmICgqKnN0cmluZyA8PSAqKnBhdHRlcm4pKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAwOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vY2FzZSAmJiAoaXN1cHBlcigodW5zaWduZWQgY2hhcikqKnN0cmluZykgfHwKKwkJCSAgICBpc3VwcGVyKCh1bnNpZ25lZCBjaGFyKSpzdGFydGNoKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzdXBwZXIoKHVuc2lnbmVkIGNoYXIpKipwYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodG9sb3dlcigodW5zaWduZWQgY2hhcikqKnN0cmluZykgPj0KKwkJCSAgICAgICAgdG9sb3dlcigodW5zaWduZWQgY2hhcikqc3RhcnRjaCkpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICh0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKSoqc3RyaW5nKSA8PQorCQkJCXRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKipwYXR0ZXJuKSkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IDA7CisKKyAgICAgICAgICAgICAgICArKypwYXR0ZXJuOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBYWFg6IGhhbmRsZSBsb2NhbGUvTUJDUyBjb21wYXJpc29uLCBhZHZhbmNlIGJ5IE1CQ1MgY2hhciB3aWR0aCAqLworICAgICAgICAgICAgaWYgKCgqKnN0cmluZyA9PSAqKnBhdHRlcm4pKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICAgICAgICBlbHNlIGlmIChub2Nhc2UgJiYgKGlzdXBwZXIoKHVuc2lnbmVkIGNoYXIpKipzdHJpbmcpIHx8CisJCQkgICAgaXN1cHBlcigodW5zaWduZWQgY2hhcikqKnBhdHRlcm4pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICh0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKSoqc3RyaW5nKSA9PQorCQkJCXRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKipwYXR0ZXJuKSkpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKworICAgICAgICAgICAgKysqcGF0dGVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIE5PVCBhIHByb3Blcmx5IGJhbGFuY2VkIFtleHByXSBwYXR0ZXJuOyBSZXdpbmQKKyAgICAgICAgICogYW5kIHJlc2V0IHJlc3VsdCB0byB0ZXN0ICdbJyBsaXRlcmFsCisgICAgICAgICAqLworICAgICAgICAqcGF0dGVybiA9IG1pc21hdGNoOworICAgICAgICByZXN1bHQgPSBGTk1fTk9NQVRDSDsKKyAgICB9CisgICAgZWxzZSBpZiAoKipwYXR0ZXJuID09ICc/JykgeworICAgICAgICAvKiBPcHRpbWl6ZSAnPycgbWF0Y2ggYmVmb3JlIHVuZXNjYXBpbmcgKipwYXR0ZXJuICovCisgICAgICAgIGlmICghKipzdHJpbmcgfHwgKHNsYXNoICYmICgqKnN0cmluZyA9PSAnLycpKSkKKyAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKyAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgZ290byBmbm1hdGNoX2NoX3N1Y2Nlc3M7CisgICAgfQorICAgIGVsc2UgaWYgKGVzY2FwZSAmJiAoKipwYXR0ZXJuID09ICdcXCcpICYmICgqcGF0dGVybilbMV0pIHsKKyAgICAgICAgKysqcGF0dGVybjsKKyAgICB9CisKKyAgICAvKiBYWFg6IGhhbmRsZSBsb2NhbGUvTUJDUyBjb21wYXJpc29uLCBhZHZhbmNlIGJ5IHRoZSBNQkNTIGNoYXIgd2lkdGggKi8KKyAgICBpZiAoKipzdHJpbmcgPT0gKipwYXR0ZXJuKQorICAgICAgICByZXN1bHQgPSAwOworICAgIGVsc2UgaWYgKG5vY2FzZSAmJiAoaXN1cHBlcigodW5zaWduZWQgY2hhcikqKnN0cmluZykgfHwKKwkJICAgIGlzdXBwZXIoKHVuc2lnbmVkIGNoYXIpKipwYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgKHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKipzdHJpbmcpID09CisJCQl0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKSoqcGF0dGVybikpKQorICAgICAgICByZXN1bHQgPSAwOworCisgICAgLyogUmVmdXNlIHRvIGFkdmFuY2Ugb3ZlciB0cmFpbGluZyBzbGFzaCBvciBudWxscworICAgICAqLworICAgIGlmICghKipzdHJpbmcgfHwgISoqcGF0dGVybiB8fCAoc2xhc2ggJiYgKCgqKnN0cmluZyA9PSAnLycpIHx8ICgqKnBhdHRlcm4gPT0gJy8nKSkpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCitmbm1hdGNoX2NoX3N1Y2Nlc3M6CisgICAgKysqcGF0dGVybjsKKyAgICArKypzdHJpbmc7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitpbnQgZm5tYXRjaChjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpzdHJpbmcsIGludCBmbGFncykKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciBkdW1teXN0cmluZ1syXSA9IHsnICcsIDB9OworICAgIGNvbnN0IGludCBlc2NhcGUgPSAhKGZsYWdzICYgRk5NX05PRVNDQVBFKTsKKyAgICBjb25zdCBpbnQgc2xhc2ggPSAhIShmbGFncyAmIEZOTV9QQVRITkFNRSk7CisgICAgY29uc3QgaW50IGxlYWRpbmdfZGlyID0gISEoZmxhZ3MgJiBGTk1fTEVBRElOR19ESVIpOworICAgIGNvbnN0IGNoYXIgKnN0cmVuZHNlZzsKKyAgICBjb25zdCBjaGFyICpkdW1teXB0cjsKKyAgICBjb25zdCBjaGFyICptYXRjaHB0cjsKKyAgICBpbnQgd2lsZDsKKyAgICAvKiBGb3IgJyonIHdpbGQgcHJvY2Vzc2luZyBvbmx5OyBzdXJwcmVzcyAndXNlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24nCisgICAgICogd2FybmluZ3Mgd2l0aCBkdW1teSBpbml0aWFsaXphdGlvbiB2YWx1ZXM7CisgICAgICovCisgICAgY29uc3QgY2hhciAqc3Ryc3RhcnRzZWcgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKm1pc21hdGNoID0gTlVMTDsKKyAgICBpbnQgbWF0Y2hsZW4gPSAwOworCisgICAgaWYgKHN0cm5sZW4ocGF0dGVybiwgUEFUSF9NQVgpID09IFBBVEhfTUFYIHx8CisgICAgICAgIHN0cm5sZW4oc3RyaW5nLCBQQVRIX01BWCkgPT0gUEFUSF9NQVgpCisgICAgICAgICAgICByZXR1cm4gKEZOTV9OT01BVENIKTsKKworICAgIGlmICgqcGF0dGVybiA9PSAnKicpCisgICAgICAgIGdvdG8gZmlyc3RzZWdtZW50OworCisgICAgd2hpbGUgKCpwYXR0ZXJuICYmICpzdHJpbmcpCisgICAgeworICAgICAgICAvKiBQcmUtZGVjb2RlICJcLyIgd2hpY2ggaGFzIG5vIHNwZWNpYWwgc2lnbmlmaWNhbmNlLCBhbmQKKyAgICAgICAgICogbWF0Y2ggYmFsYW5jZWQgc2xhc2hlcywgc3RhcnRpbmcgYSBuZXcgc2VnbWVudCBwYXR0ZXJuCisgICAgICAgICAqLworICAgICAgICBpZiAoc2xhc2ggJiYgZXNjYXBlICYmICgqcGF0dGVybiA9PSAnXFwnKSAmJiAocGF0dGVyblsxXSA9PSAnLycpKQorICAgICAgICAgICAgKytwYXR0ZXJuOworICAgICAgICBpZiAoc2xhc2ggJiYgKCpwYXR0ZXJuID09ICcvJykgJiYgKCpzdHJpbmcgPT0gJy8nKSkgeworICAgICAgICAgICAgKytwYXR0ZXJuOworICAgICAgICAgICAgKytzdHJpbmc7CisgICAgICAgIH0gICAgICAgICAgICAKKworZmlyc3RzZWdtZW50OgorICAgICAgICAvKiBBdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggc2VnbWVudCwgdmFsaWRhdGUgbGVhZGluZyBwZXJpb2QgYmVoYXZpb3IuCisgICAgICAgICAqLworICAgICAgICBpZiAoKGZsYWdzICYgRk5NX1BFUklPRCkgJiYgKCpzdHJpbmcgPT0gJy4nKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCpwYXR0ZXJuID09ICcuJykKKyAgICAgICAgICAgICAgICArK3BhdHRlcm47CisgICAgICAgICAgICBlbHNlIGlmIChlc2NhcGUgJiYgKCpwYXR0ZXJuID09ICdcXCcpICYmIChwYXR0ZXJuWzFdID09ICcuJykpCisgICAgICAgICAgICAgICAgcGF0dGVybiArPSAyOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKyAgICAgICAgICAgICsrc3RyaW5nOworICAgICAgICB9CisKKyAgICAgICAgLyogRGV0ZXJtaW5lIHRoZSBlbmQgb2Ygc3RyaW5nIHNlZ21lbnQKKyAgICAgICAgICoKKyAgICAgICAgICogUHJlc3VtZXMgJy8nIGNoYXJhY3RlciBpcyB1bmlxdWUsIG5vdCBjb21wb3NpdGUgaW4gYW55IE1CQ1MgZW5jb2RpbmcKKyAgICAgICAgICovCisgICAgICAgIGlmIChzbGFzaCkgeworICAgICAgICAgICAgc3RyZW5kc2VnID0gc3RyY2hyKHN0cmluZywgJy8nKTsKKyAgICAgICAgICAgIGlmICghc3RyZW5kc2VnKQorICAgICAgICAgICAgICAgIHN0cmVuZHNlZyA9IHN0cmNocihzdHJpbmcsICdcMCcpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3RyZW5kc2VnID0gc3RyY2hyKHN0cmluZywgJ1wwJyk7CisgICAgICAgIH0KKworICAgICAgICAvKiBBbGxvdyBwYXR0ZXJuICcqJyB0byBiZSBjb25zdW1lZCBldmVuIHdpdGggbm8gcmVtYWluaW5nIHN0cmluZyB0byBtYXRjaAorICAgICAgICAgKi8KKyAgICAgICAgd2hpbGUgKCpwYXR0ZXJuKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHN0cmluZyA+IHN0cmVuZHNlZykKKyAgICAgICAgICAgICAgICB8fCAoKHN0cmluZyA9PSBzdHJlbmRzZWcpICYmICgqcGF0dGVybiAhPSAnKicpKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKHNsYXNoICYmICgoKnBhdHRlcm4gPT0gJy8nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGVzY2FwZSAmJiAoKnBhdHRlcm4gPT0gJ1xcJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHBhdHRlcm5bMV0gPT0gJy8nKSkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvKiBSZWR1Y2UgZ3JvdXBzIG9mICcqJyBhbmQgJz8nIHRvIG4gJz8nIG1hdGNoZXMKKyAgICAgICAgICAgICAqIGZvbGxvd2VkIGJ5IG9uZSAnKicgdGVzdCBmb3Igc2ltcGxpY2l0eQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBmb3IgKHdpbGQgPSAwOyAoKCpwYXR0ZXJuID09ICcqJykgfHwgKCpwYXR0ZXJuID09ICc/JykpOyArK3BhdHRlcm4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCpwYXR0ZXJuID09ICcqJykgeworICAgICAgICAgICAgICAgICAgICB3aWxkID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyaW5nIDwgc3RyZW5kc2VnKSB7ICAvKiAmJiAoKnBhdHRlcm4gPT0gJz8nKSAqLworICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IEFkdmFuY2UgMSBjaGFyIGZvciBNQkNTIGxvY2FsZSAqLworICAgICAgICAgICAgICAgICAgICArK3N0cmluZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7ICAvKiAoc3RyaW5nID49IHN0cmVuZHNlZykgJiYgKCpwYXR0ZXJuID09ICc/JykgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZOTV9OT01BVENIOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdpbGQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3Ryc3RhcnRzZWcgPSBzdHJpbmc7CisgICAgICAgICAgICAgICAgbWlzbWF0Y2ggPSBwYXR0ZXJuOworCisgICAgICAgICAgICAgICAgLyogQ291bnQgZml4ZWQgKG5vbiAnKicpIGNoYXIgbWF0Y2hlcyByZW1haW5pbmcgaW4gcGF0dGVybgorICAgICAgICAgICAgICAgICAqIGV4Y2x1ZGluZyAnLycgKG9yICJcLyIpIGFuZCAnKicKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBmb3IgKG1hdGNocHRyID0gcGF0dGVybiwgbWF0Y2hsZW4gPSAwOyAxOyArK21hdGNobGVuKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCgqbWF0Y2hwdHIgPT0gJ1wwJykgCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAoc2xhc2ggJiYgKCgqbWF0Y2hwdHIgPT0gJy8nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoZXNjYXBlICYmICgqbWF0Y2hwdHIgPT0gJ1xcJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAobWF0Y2hwdHJbMV0gPT0gJy8nKSkpKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tcGFyZSBwcmVjaXNlbHkgdGhpcyBtYW55IHRyYWlsaW5nIHN0cmluZyBjaGFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSByZXN1bHRpbmcgbWF0Y2ggbmVlZHMgbm8gd2lsZGNhcmQgbG9vcAorICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IEFkanVzdCBmb3IgTUJDUyAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZyArIG1hdGNobGVuID4gc3RyZW5kc2VnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKworICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyZW5kc2VnIC0gbWF0Y2hsZW47CisgICAgICAgICAgICAgICAgICAgICAgICB3aWxkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCptYXRjaHB0ciA9PSAnKicpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBhdCBsZWFzdCB0aGlzIG1hbnkgdHJhaWxpbmcgc3RyaW5nIGNoYXJzIHJlbWFpbgorICAgICAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSBmaXJzdCBjb21wYXJpc29uCisgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWDogQWRqdXN0IGZvciBNQkNTICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nICsgbWF0Y2hsZW4gPiBzdHJlbmRzZWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZOTV9OT01BVENIOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBCZWdpbiBmaXJzdCB3aWxkIGNvbXBhcmlzb24gYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLyogU2tpcCBmb3J3YXJkIGluIHBhdHRlcm4gYnkgYSBzaW5nbGUgY2hhcmFjdGVyIG1hdGNoCisgICAgICAgICAgICAgICAgICAgICAqIFVzZSBhIGR1bW15IGZubWF0Y2hfY2goKSB0ZXN0IHRvIGNvdW50IG9uZSAiW3JhbmdlXSIgZXNjYXBlCisgICAgICAgICAgICAgICAgICAgICAqLyAKKyAgICAgICAgICAgICAgICAgICAgLyogWFhYOiBBZGp1c3QgZm9yIE1CQ1MgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGVzY2FwZSAmJiAoKm1hdGNocHRyID09ICdcXCcpICYmIG1hdGNocHRyWzFdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaHB0ciArPSAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCptYXRjaHB0ciA9PSAnWycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15cHRyID0gZHVtbXlzdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICBmbm1hdGNoX2NoKCZtYXRjaHB0ciwgJmR1bW15cHRyLCBmbGFncyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK21hdGNocHRyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBJbmNyZW1lbnRhbGx5IG1hdGNoIHN0cmluZyBhZ2FpbnN0IHRoZSBwYXR0ZXJuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHdoaWxlICgqcGF0dGVybiAmJiAoc3RyaW5nIDwgc3RyZW5kc2VnKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTdWNjZXNzOyBiZWdpbiBhIG5ldyB3aWxkIHBhdHRlcm4gc2VhcmNoCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKCpwYXR0ZXJuID09ICcqJykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBpZiAoc2xhc2ggJiYgKCgqc3RyaW5nID09ICcvJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgqcGF0dGVybiA9PSAnLycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoZXNjYXBlICYmICgqcGF0dGVybiA9PSAnXFwnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAocGF0dGVyblsxXSA9PSAnLycpKSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLyogQ29tcGFyZSBjaCdzICh0aGUgcGF0dGVybiBpcyBhZHZhbmNlZCBvdmVyICJcLyIgdG8gdGhlICcvJywKKyAgICAgICAgICAgICAgICAgKiBidXQgc2xhc2hlcyB3aWxsIG1pc21hdGNoLCBhbmQgYXJlIG5vdCBjb25zdW1lZCkKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoIWZubWF0Y2hfY2goJnBhdHRlcm4sICZzdHJpbmcsIGZsYWdzKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAvKiBGYWlsZWQgdG8gbWF0Y2gsIGxvb3AgYWdhaW5zdCBuZXh0IGNoYXIgb2Zmc2V0IG9mIHN0cmluZyBzZWdtZW50IAorICAgICAgICAgICAgICAgICAqIHVudGlsIG5vdCBlbm91Z2ggc3RyaW5nIGNoYXJzIHJlbWFpbiB0byBtYXRjaCB0aGUgZml4ZWQgcGF0dGVybgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICh3aWxkKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIFhYWDogQWR2YW5jZSAxIGNoYXIgZm9yIE1CQ1MgbG9jYWxlICovCisgICAgICAgICAgICAgICAgICAgIHN0cmluZyA9ICsrc3Ryc3RhcnRzZWc7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmcgKyBtYXRjaGxlbiA+IHN0cmVuZHNlZykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKworICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gbWlzbWF0Y2g7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgqc3RyaW5nICYmICEoKHNsYXNoIHx8IGxlYWRpbmdfZGlyKSAmJiAoKnN0cmluZyA9PSAnLycpKSkKKyAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKworICAgICAgICBpZiAoKnBhdHRlcm4gJiYgIShzbGFzaCAmJiAoKCpwYXR0ZXJuID09ICcvJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChlc2NhcGUgJiYgKCpwYXR0ZXJuID09ICdcXCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChwYXR0ZXJuWzFdID09ICcvJykpKSkpCisgICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7CisKKyAgICAgICAgaWYgKGxlYWRpbmdfZGlyICYmICEqcGF0dGVybiAmJiAqc3RyaW5nID09ICcvJykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIFdoZXJlIGJvdGggcGF0dGVybiBhbmQgc3RyaW5nIGFyZSBhdCBFT1MsIGRlY2xhcmUgc3VjY2VzcworICAgICAqLworICAgIGlmICghKnN0cmluZyAmJiAhKnBhdHRlcm4pCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogcGF0dGVybiBkaWRuJ3QgbWF0Y2ggdG8gdGhlIGVuZCBvZiBzdHJpbmcgKi8KKyAgICByZXR1cm4gRk5NX05PTUFUQ0g7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2Z0b2suYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vZnRvay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZDY2MjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2Z0b2suYwpAQCAtMCwwICsxLDQzIEBACisvKgkkT3BlbkJTRDogZnRvay5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzQgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQgU2lnbWFTb2Z0LCBUaC4gTG9ja2VydCA8dGhvbG9Ac2lnbWFzb2Z0LmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7CisgKiBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCisgKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvaXBjLmg+CisKK2tleV90CitmdG9rKGNvbnN0IGNoYXIgKnBhdGgsIGludCBpZCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChzdGF0KHBhdGgsICZzdCkgPCAwKQorCQlyZXR1cm4gKGtleV90KS0xOworCisJcmV0dXJuIChrZXlfdCkKKwkgICAgKChpZCAmIDB4ZmYpIDw8IDI0IHwgKHN0LnN0X2RldiAmIDB4ZmYpIDw8IDE2IHwgKHN0LnN0X2lubyAmIDB4ZmZmZikpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9nZXRwcm9nbmFtZS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9nZXRwcm9nbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MDQ2YWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2dldHByb2duYW1lLmMKQEAgLTAsMCArMSwyNiBAQAorLyogJE9wZW5CU0Q6IGdldHByb2duYW1lLmMsdiAxLjMgMjAxMy8xMS8xMiAwNjowOTo0OCBkZXJhYWR0IEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzIEFudG9pbmUgSmFjb3V0b3QgPGFqYWNvdXRvdEBvcGVuYnNkLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2V4dGVybiBjb25zdCBjaGFyICpfX3Byb2duYW1lOworCitjb25zdCBjaGFyICoKK2dldHByb2duYW1lKHZvaWQpCit7CisJcmV0dXJuIChfX3Byb2duYW1lKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vaXNjdHlwZS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9pc2N0eXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcwYjVlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vaXNjdHlwZS5jCkBAIC0wLDAgKzEsMTUwIEBACisvKgkkT3BlbkJTRDogaXNjdHlwZS5jLHYgMS4xMSAyMDA1LzA4LzA4IDA4OjA1OjM0IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg5IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorICogQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKKyAqIHRvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKKyAqIENvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoCisgKiB0aGUgcGVybWlzc2lvbiBvZiBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2RlZmluZSBfQU5TSV9MSUJSQVJZCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjdW5kZWYgaXNhbG51bQoraW50Citpc2FsbnVtKGludCBjKQoreworCXJldHVybiAoYyA9PSBFT0YgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiAoX1V8X0x8X04pKSk7Cit9CisKKyN1bmRlZiBpc2FscGhhCitpbnQKK2lzYWxwaGEoaW50IGMpCit7CisJcmV0dXJuIChjID09IEVPRiA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfVXxfTCkpKTsKK30KKworI3VuZGVmIGlzYmxhbmsKK2ludAoraXNibGFuayhpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7Cit9CisKKyN1bmRlZiBpc2NudHJsCitpbnQKK2lzY250cmwoaW50IGMpCit7CisJcmV0dXJuIChjID09IEVPRiA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9DKSk7Cit9CisKKyN1bmRlZiBpc2RpZ2l0CitpbnQKK2lzZGlnaXQoaW50IGMpCit7CisJcmV0dXJuIChjID09IEVPRiA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9OKSk7Cit9CisKKyN1bmRlZiBpc2dyYXBoCitpbnQKK2lzZ3JhcGgoaW50IGMpCit7CisJcmV0dXJuIChjID09IEVPRiA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfUHxfVXxfTHxfTikpKTsKK30KKworI3VuZGVmIGlzbG93ZXIKK2ludAoraXNsb3dlcihpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gRU9GID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX0wpKTsKK30KKworI3VuZGVmIGlzcHJpbnQKK2ludAoraXNwcmludChpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gRU9GID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgKF9QfF9VfF9MfF9OfF9CKSkpOworfQorCisjdW5kZWYgaXNwdW5jdAoraW50Citpc3B1bmN0KGludCBjKQoreworCXJldHVybiAoYyA9PSBFT0YgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfUCkpOworfQorCisjdW5kZWYgaXNzcGFjZQoraW50Citpc3NwYWNlKGludCBjKQoreworCXJldHVybiAoYyA9PSBFT0YgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfUykpOworfQorCisjdW5kZWYgaXN1cHBlcgoraW50Citpc3VwcGVyKGludCBjKQoreworCXJldHVybiAoYyA9PSBFT0YgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfVSkpOworfQorCisjdW5kZWYgaXN4ZGlnaXQKK2ludAoraXN4ZGlnaXQoaW50IGMpCit7CisJcmV0dXJuIChjID09IEVPRiA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfTnxfWCkpKTsKK30KKworI3VuZGVmIGlzYXNjaWkKK2ludAoraXNhc2NpaShpbnQgYykKK3sKKwlyZXR1cm4gKCh1bnNpZ25lZCBpbnQpYyA8PSAwMTc3KTsKK30KKworI3VuZGVmIHRvYXNjaWkKK2ludAordG9hc2NpaShpbnQgYykKK3sKKwlyZXR1cm4gKGMgJiAwMTc3KTsKK30KKworI3VuZGVmIF90b3VwcGVyCitpbnQKK190b3VwcGVyKGludCBjKQoreworCXJldHVybiAoYyAtICdhJyArICdBJyk7Cit9CisKKyN1bmRlZiBfdG9sb3dlcgoraW50CitfdG9sb3dlcihpbnQgYykKK3sKKwlyZXR1cm4gKGMgLSAnQScgKyAnYScpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9zZXRwcm9nbmFtZS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9zZXRwcm9nbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OWExNWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL3NldHByb2duYW1lLmMKQEAgLTAsMCArMSwzMyBAQAorLyogJE9wZW5CU0Q6IHNldHByb2duYW1lLmMsdiAxLjQgMjAxMy8xMS8xMiAwNjowOTo0OCBkZXJhYWR0IEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzIEFudG9pbmUgSmFjb3V0b3QgPGFqYWNvdXRvdEBvcGVuYnNkLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2V4dGVybiBjb25zdCBjaGFyICpfX3Byb2duYW1lOworCit2b2lkCitzZXRwcm9nbmFtZShjb25zdCBjaGFyICpwcm9nbmFtZSkKK3sKKwljb25zdCBjaGFyICp0bXBuOworCisJdG1wbiA9IHN0cnJjaHIocHJvZ25hbWUsICcvJyk7CisJaWYgKHRtcG4gPT0gTlVMTCkKKwkJX19wcm9nbmFtZSA9IHByb2duYW1lOworCWVsc2UKKwkJX19wcm9nbmFtZSA9IHRtcG4gKyAxOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi90aW1lLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTU3NTAwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi90aW1lLmMKQEAgLTAsMCArMSw0NCBAQAorLyoJJE9wZW5CU0Q6IHRpbWUuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM0IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKK3RpbWVfdAordGltZSh0aW1lX3QgKnQpCit7CisJc3RydWN0IHRpbWV2YWwgdHQ7CisKKwlpZiAoZ2V0dGltZW9mZGF5KCZ0dCwgKHN0cnVjdCB0aW1lem9uZSAqKTApIDwgMCkKKwkJcmV0dXJuICgtMSk7CisJaWYgKHQpCisJCSp0ID0gKHRpbWVfdCl0dC50dl9zZWM7CisJcmV0dXJuICh0dC50dl9zZWMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvdG9sb3dlcl8uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vdG9sb3dlcl8uYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdGRsaWIvdG9sb3dlcl8uYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi90b2xvd2VyXy5jCmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi90b3VwcGVyXy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi90b3VwcGVyXy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3N0ZGxpYi90b3VwcGVyXy5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL3RvdXBwZXJfLmMKZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL2N0eXBlX3ByaXZhdGUuaCBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9pbmNsdWRlL2N0eXBlX3ByaXZhdGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdGRsaWIvY3R5cGVfcHJpdmF0ZS5oCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvaW5jbHVkZS9jdHlwZV9wcml2YXRlLmgKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9pbmNsdWRlL2xhbmdpbmZvLmggYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvaW5jbHVkZS9sYW5naW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NzFhYjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvaW5jbHVkZS9sYW5naW5mby5oCkBAIC0wLDAgKzEsMyBAQAorLyogSGFjayB0byBidWlsZCAidmZwcmludGYuYyIuICovCisjZGVmaW5lIFJBRElYQ0hBUiAxCisjZGVmaW5lIG5sX2xhbmdpbmZvKGkpICgoaSA9PSBSQURJWENIQVIpID8gKGNoYXIqKSAiLiIgOiBOVUxMKQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9fd2NzdG9kLmggYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL193Y3N0b2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTk5M2FkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9fd2NzdG9kLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qCSRPcGVuQlNEOiBfd2NzdG9kLmgsdiAxLjIgMjAxMy8wNi8wMiAxNToyMjoyMCBtYXR0aGV3IEV4cCAkCSovCisvKiAkTmV0QlNEOiB3Y3N0b2QuYyx2IDEuNCAyMDAxLzEwLzI4IDEyOjA4OjQzIHlhbXQgRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpMTk5OSwgMjAwMCwgMjAwMSBDaXRydXMgUHJvamVjdCwKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJJENpdHJ1czogeHBnNGRsL0ZyZWVCU0QvbGliL2xpYmMvbG9jYWxlL3djc3RvZC5jLHYgMS4yIDIwMDEvMDkvMjcgMTY6MjM6NTcgeWFtdCBFeHAgJAorICovCisKKy8qCisgKiBmdW5jdGlvbiB0ZW1wbGF0ZSBmb3Igd2NzdG9mLCB3Y3N0b2QgYW5kIHdjc3RvbGQuCisgKgorICogcGFyYW1ldGVyczoKKyAqCUZVTkNOQU1FIDogZnVuY3Rpb24gbmFtZQorICogICAgICBmbG9hdF90eXBlIDogcmV0dXJuIHR5cGUKKyAqICAgICAgU1RSVE9EX0ZVTkMgOiBjb252ZXJzaW9uIGZ1bmN0aW9uCisgKi8KKworZmxvYXRfdHlwZQorRlVOQ05BTUUoY29uc3Qgd2NoYXJfdCAqbnB0ciwgd2NoYXJfdCAqKmVuZHB0cikKK3sKKwljb25zdCB3Y2hhcl90ICpzcmM7CisJc2l6ZV90IHNpemU7CisJY29uc3Qgd2NoYXJfdCAqc3RhcnQ7CisJY29uc3Qgd2NoYXJfdCAqYWZ0ZXJzaWduOworCisJLyoKKwkgKiBjaGVjayBsZW5ndGggb2Ygc3RyaW5nIGFuZCBjYWxsIHN0cnRvZAorCSAqLworCXNyYyA9IG5wdHI7CisKKwkvKiBza2lwIHNwYWNlIGZpcnN0ICovCisJd2hpbGUgKGlzd3NwYWNlKCpzcmMpKSB7CisJCXNyYysrOworCX0KKworCS8qIGdldCBsZW5ndGggb2Ygc3RyaW5nICovCisJc3RhcnQgPSBzcmM7CisJaWYgKCpzcmMgJiYgd2NzY2hyKEwiKy0iLCAqc3JjKSkKKwkJc3JjKys7CisJYWZ0ZXJzaWduID0gc3JjOworCWlmICh3Y3NuY2FzZWNtcChzcmMsIEwiaW5mIiwgMykgPT0gMCkgeworCQlzcmMgKz0gMzsKKwkJaWYgKHdjc25jYXNlY21wKHNyYywgTCJpbml0eSIsIDUpID09IDApCisJCQlzcmMgKz0gNTsKKwkJZ290byBtYXRjaDsKKwl9CisJaWYgKHdjc25jYXNlY21wKHNyYywgTCJuYW4iLCAzKSA9PSAwKSB7CisJCXNyYyArPSAzOworCQlpZiAoKnNyYyA9PSBMJygnKSB7CisJCQlzaXplID0gMTsKKwkJCXdoaWxlIChzcmNbc2l6ZV0gIT0gTCdcMCcgJiYgc3JjW3NpemVdICE9IEwnKScpCisJCQkJc2l6ZSsrOworCQkJaWYgKHNyY1tzaXplXSA9PSBMJyknKQorCQkJCXNyYyArPSBzaXplICsgMTsKKwkJfQorCQlnb3RvIG1hdGNoOworCX0KKwlzaXplID0gd2Nzc3BuKHNyYywgTCIwMTIzNDU2Nzg5Iik7CisJc3JjICs9IHNpemU7CisJaWYgKCpzcmMgPT0gTCcuJykgey8qIFhYWCB1c2UgbG9jYWxlY29udiAqLworCQlzcmMrKzsKKwkJc2l6ZSA9IHdjc3NwbihzcmMsIEwiMDEyMzQ1Njc4OSIpOworCQlzcmMgKz0gc2l6ZTsKKwl9CisJaWYgKCpzcmMgJiYgd2NzY2hyKEwiRWUiLCAqc3JjKSkgeworCQlzcmMrKzsKKwkJaWYgKCpzcmMgJiYgd2NzY2hyKEwiKy0iLCAqc3JjKSkKKwkJCXNyYysrOworCQlzaXplID0gd2Nzc3BuKHNyYywgTCIwMTIzNDU2Nzg5Iik7CisJCXNyYyArPSBzaXplOworCX0KK21hdGNoOgorCXNpemUgPSBzcmMgLSBzdGFydDsKKworCS8qCisJICogY29udmVydCB0byBhIGNoYXItc3RyaW5nIGFuZCBwYXNzIGl0IHRvIHN0cnRvZC4KKwkgKi8KKwlpZiAoc3JjID4gYWZ0ZXJzaWduKSB7CisJCW1ic3RhdGVfdCBzdDsKKwkJY2hhciAqYnVmOworCQljaGFyICplbmQ7CisJCWNvbnN0IHdjaGFyX3QgKnM7CisJCXNpemVfdCBzaXplX2NvbnZlcnRlZDsKKwkJZmxvYXRfdHlwZSByZXN1bHQ7CisJCXNpemVfdCBidWZzaXplOworCisJCXMgPSBzdGFydDsKKwkJbWVtc2V0KCZzdCwgMCwgc2l6ZW9mKHN0KSk7CisJCWJ1ZnNpemUgPSB3Y3NucnRvbWJzKE5VTEwsICZzLCBzaXplLCAwLCAmc3QpOworCisJCWJ1ZiA9IG1hbGxvYyhidWZzaXplICsgMSk7CisJCWlmICghYnVmKSB7CisJCQllcnJubyA9IEVOT01FTTsgLyogWFhYICovCisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlzID0gc3RhcnQ7CisJCW1lbXNldCgmc3QsIDAsIHNpemVvZihzdCkpOworCQlzaXplX2NvbnZlcnRlZCA9IHdjc25ydG9tYnMoYnVmLCAmcywgc2l6ZSwgYnVmc2l6ZSwgJnN0KTsKKwkJaWYgKHNpemVfY29udmVydGVkICE9IGJ1ZnNpemUpIHsKKwkJCS8qIFhYWCBzaG91bGQgbm90IGhhcHBlbiAqLworCQkJZnJlZShidWYpOworCQkJZXJybm8gPSBFSUxTRVE7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlidWZbYnVmc2l6ZV0gPSAwOworCQlyZXN1bHQgPSBTVFJUT0RfRlVOQyhidWYsICZlbmQpOworCisJCWlmIChlbmRwdHIpIHsKKwkJCWNvbnN0IGNoYXIgKnMgPSBidWY7CisJCQltZW1zZXQoJnN0LCAwLCBzaXplb2Yoc3QpKTsKKwkJCXNpemUgPSBtYnNucnRvd2NzKE5VTEwsICZzLCBlbmQgLSBidWYsIDAsICZzdCk7CisKKwkJCS8qIExJTlRFRCBiYWQgaW50ZXJmYWNlICovCisJCQkqZW5kcHRyID0gKHdjaGFyX3QqKXN0YXJ0ICsgc2l6ZTsKKwkJfQorCisJCWZyZWUoYnVmKTsKKworCQlyZXR1cm4gcmVzdWx0OworCX0KKworZmFpbDoKKwlpZiAoZW5kcHRyKQorCQkvKiBMSU5URUQgYmFkIGludGVyZmFjZSAqLworCQkqZW5kcHRyID0gKHdjaGFyX3QqKW5wdHI7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvX3djc3RvbC5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9fd2NzdG9sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0OWJiZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvX3djc3RvbC5oCkBAIC0wLDAgKzEsMTM2IEBACisvKgkkT3BlbkJTRDogX3djc3RvbC5oLHYgMS4xIDIwMDUvMDcvMDEgMDg6NTk6MjcgZXNwaWUgRXhwICQJKi8KKy8qICROZXRCU0Q6IF93Y3N0b2wuaCx2IDEuMiAyMDAzLzA4LzA3IDE2OjQzOjAzIGFnYyBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIE9yaWdpbmFsIHZlcnNpb24gSUQ6CisgKiBAKCMpc3RydG9sLmMJOC4xIChCZXJrZWxleSkgNi80LzkzCisgKiBOZXRCU0Q6IHdjc3RvbC5jLHYgMS4xIDIwMDEvMDkvMjcgMTY6MzA6MzYgeWFtdCBFeHAKKyAqIENpdHJ1czogeHBnNGRsL0ZyZWVCU0QvbGliL2xpYmMvbG9jYWxlL3djc3RvbC5jLHYgMS4yIDIwMDEvMDkvMjEgMTY6MTE6NDEgeWFtdCBFeHAKKyAqLworCisvKgorICogZnVuY3Rpb24gdGVtcGxhdGUgZm9yIHdjc3RvbCwgd2NzdG9sbCBhbmQgd2NzdG9pbWF4LgorICoKKyAqIHBhcmFtZXRlcnM6CisgKglGVU5DTkFNRSA6IGZ1bmN0aW9uIG5hbWUKKyAqICAgICAgaW50X3R5cGUgOiByZXR1cm4gdHlwZQorICogICAgICBNSU5fVkFMVUUgOiBsb3dlciBsaW1pdCBvZiB0aGUgcmV0dXJuIHR5cGUKKyAqICAgICAgTUFYX1ZBTFVFIDogdXBwZXIgbGltaXQgb2YgdGhlIHJldHVybiB0eXBlCisgKi8KKworaW50X3R5cGUKK0ZVTkNOQU1FKGNvbnN0IHdjaGFyX3QgKm5wdHIsIHdjaGFyX3QgKiplbmRwdHIsIGludCBiYXNlKQoreworCWNvbnN0IHdjaGFyX3QgKnM7CisJaW50X3R5cGUgYWNjLCBjdXRvZmY7CisJd2ludF90IHdjOworCWludCBpOworCWludCBuZWcsIGFueSwgY3V0bGltOworCisJLyogY2hlY2sgYmFzZSB2YWx1ZSAqLworCWlmIChiYXNlICYmIChiYXNlIDwgMiB8fCBiYXNlID4gMzYpKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFNraXAgd2hpdGUgc3BhY2UgYW5kIHBpY2sgdXAgbGVhZGluZyArLy0gc2lnbiBpZiBhbnkuCisJICogSWYgYmFzZSBpcyAwLCBhbGxvdyAweCBmb3IgaGV4IGFuZCAwIGZvciBvY3RhbCwgZWxzZQorCSAqIGFzc3VtZSBkZWNpbWFsOyBpZiBiYXNlIGlzIGFscmVhZHkgMTYsIGFsbG93IDB4LgorCSAqLworCXMgPSBucHRyOworCWRvIHsKKwkJd2MgPSAod2NoYXJfdCkgKnMrKzsKKwl9IHdoaWxlIChpc3dzcGFjZSh3YykpOworCWlmICh3YyA9PSBMJy0nKSB7CisJCW5lZyA9IDE7CisJCXdjID0gKnMrKzsKKwl9IGVsc2UgeworCQluZWcgPSAwOworCQlpZiAod2MgPT0gTCcrJykKKwkJCXdjID0gKnMrKzsKKwl9CisJaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKKwkgICAgd2MgPT0gTCcwJyAmJiAoKnMgPT0gTCd4JyB8fCAqcyA9PSBMJ1gnKSkgeworCQl3YyA9IHNbMV07CisJCXMgKz0gMjsKKwkJYmFzZSA9IDE2OworCX0KKwlpZiAoYmFzZSA9PSAwKQorCQliYXNlID0gd2MgPT0gTCcwJyA/IDggOiAxMDsKKworCS8qCisJICogU2VlIHN0cnRvbCBmb3IgY29tbWVudHMgYXMgdG8gdGhlIGxvZ2ljIHVzZWQuCisJICovCisJY3V0b2ZmID0gbmVnID8gTUlOX1ZBTFVFIDogTUFYX1ZBTFVFOworCWN1dGxpbSA9IChpbnQpKGN1dG9mZiAlIGJhc2UpOworCWN1dG9mZiAvPSBiYXNlOworCWlmIChuZWcpIHsKKwkJaWYgKGN1dGxpbSA+IDApIHsKKwkJCWN1dGxpbSAtPSBiYXNlOworCQkJY3V0b2ZmICs9IDE7CisJCX0KKwkJY3V0bGltID0gLWN1dGxpbTsKKwl9CisJZm9yIChhY2MgPSAwLCBhbnkgPSAwOzsgd2MgPSAod2NoYXJfdCkgKnMrKykgeworCQlpID0gd2N0b2ludCh3Yyk7CisJCWlmIChpID09IC0xKQorCQkJYnJlYWs7CisJCWlmIChpID49IGJhc2UpCisJCQlicmVhazsKKwkJaWYgKGFueSA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKG5lZykgeworCQkJaWYgKGFjYyA8IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBpID4gY3V0bGltKSkgeworCQkJCWFueSA9IC0xOworCQkJCWFjYyA9IE1JTl9WQUxVRTsKKwkJCQllcnJubyA9IEVSQU5HRTsKKwkJCX0gZWxzZSB7CisJCQkJYW55ID0gMTsKKwkJCQlhY2MgKj0gYmFzZTsKKwkJCQlhY2MgLT0gaTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChhY2MgPiBjdXRvZmYgfHwgKGFjYyA9PSBjdXRvZmYgJiYgaSA+IGN1dGxpbSkpIHsKKwkJCQlhbnkgPSAtMTsKKwkJCQlhY2MgPSBNQVhfVkFMVUU7CisJCQkJZXJybm8gPSBFUkFOR0U7CisJCQl9IGVsc2UgeworCQkJCWFueSA9IDE7CisJCQkJYWNjICo9IGJhc2U7CisJCQkJYWNjICs9IGk7CisJCQl9CisJCX0KKwl9CisJaWYgKGVuZHB0ciAhPSAwKQorCQkvKiBMSU5URUQgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gKi8KKwkJKmVuZHB0ciA9ICh3Y2hhcl90ICopKGFueSA/IHMgLSAxIDogbnB0cik7CisJcmV0dXJuIChhY2MpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9fd2NzdG91bC5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9fd2NzdG91bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNmIzOGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL193Y3N0b3VsLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCSRPcGVuQlNEOiBfd2NzdG91bC5oLHYgMS4xIDIwMDUvMDcvMDEgMDg6NTk6MjcgZXNwaWUgRXhwICQJKi8KKy8qICROZXRCU0Q6IF93Y3N0b3VsLmgsdiAxLjIgMjAwMy8wOC8wNyAxNjo0MzowMyBhZ2MgRXhwICQgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIE9yaWdpbmFsIHZlcnNpb24gSUQ6CisgKiBAKCMpc3RydG91bC5jCTguMSAoQmVya2VsZXkpIDYvNC85MworICogQ2l0cnVzOiB4cGc0ZGwvRnJlZUJTRC9saWIvbGliYy9sb2NhbGUvd2NzdG91bC5jLHYgMS4yIDIwMDEvMDkvMjEgMTY6MTE6NDEgeWFtdCBFeHAKKyAqIE5ldEJTRDogd2NzdG91bC5jLHYgMS4xIDIwMDEvMDkvMjcgMTY6MzA6MzcgeWFtdCBFeHAKKyAqLworCisvKgorICogZnVuY3Rpb24gdGVtcGxhdGUgZm9yIHdjc3RvdWwsIHdjc3RvdWxsIGFuZCB3Y3N0b3VtYXguCisgKgorICogcGFyYW1ldGVyczoKKyAqCUZVTkNOQU1FICA6IGZ1bmN0aW9uIG5hbWUKKyAqICAgICAgdWludF90eXBlIDogcmV0dXJuIHR5cGUKKyAqICAgICAgTUFYX1ZBTFVFIDogdXBwZXIgbGltaXQgb2YgdGhlIHJldHVybiB0eXBlCisgKi8KKwordWludF90eXBlCitGVU5DTkFNRShjb25zdCB3Y2hhcl90ICpucHRyLCB3Y2hhcl90ICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKwljb25zdCB3Y2hhcl90ICpzOworCXVpbnRfdHlwZSBhY2MsIGN1dG9mZjsKKwl3aW50X3Qgd2M7CisJaW50IGk7CisJaW50IG5lZywgYW55LCBjdXRsaW07CisKKwlpZiAoYmFzZSAmJiAoYmFzZSA8IDIgfHwgYmFzZSA+IDM2KSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBTa2lwIHdoaXRlIHNwYWNlIGFuZCBwaWNrIHVwIGxlYWRpbmcgKy8tIHNpZ24gaWYgYW55LgorCSAqIElmIGJhc2UgaXMgMCwgYWxsb3cgMHggZm9yIGhleCBhbmQgMCBmb3Igb2N0YWwsIGVsc2UKKwkgKiBhc3N1bWUgZGVjaW1hbDsgaWYgYmFzZSBpcyBhbHJlYWR5IDE2LCBhbGxvdyAweC4KKwkgKi8KKwlzID0gbnB0cjsKKwlkbyB7CisJCXdjID0gKHdjaGFyX3QpICpzKys7CisJfSB3aGlsZSAoaXN3c3BhY2Uod2MpKTsKKwlpZiAod2MgPT0gTCctJykgeworCQluZWcgPSAxOworCQl3YyA9ICpzKys7CisJfSBlbHNlIHsKKwkJbmVnID0gMDsKKwkJaWYgKHdjID09IEwnKycpCisJCQl3YyA9ICpzKys7CisJfQorCWlmICgoYmFzZSA9PSAwIHx8IGJhc2UgPT0gMTYpICYmCisJICAgIHdjID09IEwnMCcgJiYgKCpzID09IEwneCcgfHwgKnMgPT0gTCdYJykpIHsKKwkJd2MgPSBzWzFdOworCQlzICs9IDI7CisJCWJhc2UgPSAxNjsKKwl9CisJaWYgKGJhc2UgPT0gMCkKKwkJYmFzZSA9IHdjID09IEwnMCcgPyA4IDogMTA7CisKKwkvKgorCSAqIFNlZSBzdHJ0b3VsIGZvciBjb21tZW50cyBhcyB0byB0aGUgbG9naWMgdXNlZC4KKwkgKi8KKwljdXRvZmYgPSBNQVhfVkFMVUUgLyAodWludF90eXBlKWJhc2U7CisJY3V0bGltID0gKGludCkoTUFYX1ZBTFVFICUgKHVpbnRfdHlwZSliYXNlKTsKKwlmb3IgKGFjYyA9IDAsIGFueSA9IDA7OyB3YyA9ICh3Y2hhcl90KSAqcysrKSB7CisJCWkgPSB3Y3RvaW50KHdjKTsKKwkJaWYgKGkgPT0gKHdpbnRfdCktMSkKKwkJCWJyZWFrOworCQlpZiAoaSA+PSBiYXNlKQorCQkJYnJlYWs7CisJCWlmIChhbnkgPCAwKQorCQkJY29udGludWU7CisJCWlmIChhY2MgPiBjdXRvZmYgfHwgKGFjYyA9PSBjdXRvZmYgJiYgaSA+IGN1dGxpbSkpIHsKKwkJCWFueSA9IC0xOworCQkJYWNjID0gTUFYX1ZBTFVFOworCQkJZXJybm8gPSBFUkFOR0U7CisJCX0gZWxzZSB7CisJCQlhbnkgPSAxOworCQkJYWNjICo9ICh1aW50X3R5cGUpYmFzZTsKKwkJCWFjYyArPSBpOworCQl9CisJfQorCWlmIChuZWcgJiYgYW55ID4gMCkKKwkJYWNjID0gLWFjYzsKKwlpZiAoZW5kcHRyICE9IDApCisJCS8qIExJTlRFRCBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiAqLworCQkqZW5kcHRyID0gKHdjaGFyX3QgKikoYW55ID8gcyAtIDEgOiBucHRyKTsKKwlyZXR1cm4gKGFjYyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL2J0b3djLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL2J0b3djLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYyNzM0MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvYnRvd2MuYwpAQCAtMCwwICsxLDUyIEBACisvKgkkT3BlbkJTRDogYnRvd2MuYyx2IDEuMiAyMDEyLzEyLzA1IDIzOjIwOjAwIGRlcmFhZHQgRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgVGltIEouIFJvYmJpbnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKK3dpbnRfdAorYnRvd2MoaW50IGMpCit7CisJbWJzdGF0ZV90IG1iczsKKwljaGFyIGNjOworCXdjaGFyX3Qgd2M7CisKKwlpZiAoYyA9PSBFT0YpCisJCXJldHVybiAoV0VPRik7CisJLyoKKwkgKiBXZSBleHBlY3QgbWJydG93YygpIHRvIHJldHVybiAwIG9yIDEsIGhlbmNlIHRoZSBjaGVjayBmb3IgbiA+IDEKKwkgKiB3aGljaCBkZXRlY3RzIGVycm9yIHJldHVybiB2YWx1ZXMgYXMgd2VsbCBhcyAiaW1wb3NzaWJsZSIgYnl0ZQorCSAqIGNvdW50cy4KKwkgKi8KKwltZW1zZXQoJm1icywgMCwgc2l6ZW9mKG1icykpOworCWNjID0gKGNoYXIpYzsKKwlpZiAobWJydG93Yygmd2MsICZjYywgMSwgJm1icykgPiAxKQorCQlyZXR1cm4gKFdFT0YpOworCXJldHVybiAod2MpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9tYnJsZW4uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvbWJybGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYwNWJkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvbWJybGVuLmMKQEAgLTAsMCArMSwzOSBAQAorLyoJJE9wZW5CU0Q6IG1icmxlbi5jLHYgMS4yIDIwMTIvMTIvMDUgMjM6MjA6MDAgZGVyYWFkdCBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IFRpbSBKLiBSb2JiaW5zLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8d2NoYXIuaD4KKworc2l6ZV90CittYnJsZW4oY29uc3QgY2hhciAqIF9fcmVzdHJpY3Qgcywgc2l6ZV90IG4sIG1ic3RhdGVfdCAqIF9fcmVzdHJpY3QgcHMpCit7CisJc3RhdGljIG1ic3RhdGVfdCBtYnM7CisKKwlpZiAocHMgPT0gTlVMTCkKKwkJcHMgPSAmbWJzOworCXJldHVybiAobWJydG93YyhOVUxMLCBzLCBuLCBwcykpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9tYnN0b3djcy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9tYnN0b3djcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxN2E4NTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL21ic3Rvd2NzLmMKQEAgLTAsMCArMSw0NCBAQAorLyoJJE9wZW5CU0Q6IG1ic3Rvd2NzLmMsdiAxLjIgMjAxMi8xMi8wNSAyMzoyMDowMCBkZXJhYWR0IEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgVGltIEouIFJvYmJpbnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKK3NpemVfdAorbWJzdG93Y3Mod2NoYXJfdCAqIF9fcmVzdHJpY3QgcHdjcywgY29uc3QgY2hhciAqIF9fcmVzdHJpY3Qgcywgc2l6ZV90IG4pCit7CisJbWJzdGF0ZV90IG1iczsKKwljb25zdCBjaGFyICpzcDsKKworCW1lbXNldCgmbWJzLCAwLCBzaXplb2YobWJzKSk7CisJc3AgPSBzOworCXJldHVybiAobWJzcnRvd2NzKHB3Y3MsICZzcCwgbiwgJm1icykpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9tYnRvd2MuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvbWJ0b3djLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIwZjRiZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvbWJ0b3djLmMKQEAgLTAsMCArMSw1MCBAQAorLyoJJE9wZW5CU0Q6IG1idG93Yy5jLHYgMS4yIDIwMTIvMTIvMDUgMjM6MjA6MDAgZGVyYWFkdCBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IFRpbSBKLiBSb2JiaW5zLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKK2ludAorbWJ0b3djKHdjaGFyX3QgKiBfX3Jlc3RyaWN0IHB3YywgY29uc3QgY2hhciAqIF9fcmVzdHJpY3Qgcywgc2l6ZV90IG4pCit7CisJc3RhdGljIG1ic3RhdGVfdCBtYnM7CisJc2l6ZV90IHJ2YWw7CisKKwlpZiAocyA9PSBOVUxMKSB7CisJCS8qIE5vIHN1cHBvcnQgZm9yIHN0YXRlIGRlcGVuZGVudCBlbmNvZGluZ3MuICovCisJCW1lbXNldCgmbWJzLCAwLCBzaXplb2YobWJzKSk7CisJCXJldHVybiAoMCk7CisJfQorCXJ2YWwgPSBtYnJ0b3djKHB3YywgcywgbiwgJm1icyk7CisJaWYgKHJ2YWwgPT0gKHNpemVfdCktMSB8fCBydmFsID09IChzaXplX3QpLTIpCisJCXJldHVybiAoLTEpOworCXJldHVybiAoKGludClydmFsKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzY29sbC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3Njb2xsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVjMzJjZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzY29sbC5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qCSRPcGVuQlNEOiB3Y3Njb2xsLmMsdiAxLjIgMjAxMi8xMi8wNSAyMzoyMDowMCBkZXJhYWR0IEV4cCAkICovCisvKgkkTmV0QlNEOiB3Y3Njb2xsLmMsdiAxLjEgMjAwMy8wMy8wMiAyMjoxODoxNiB0c2hpb3phayBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykyMDAzIENpdHJ1cyBQcm9qZWN0LAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworLyoKKyAqIENvbXBhcmUgc3RyaW5ncyB3aXRoIHVzaW5nIGNvbGxhdGluZyBpbmZvcm1hdGlvbi4KKyAqLworaW50Cit3Y3Njb2xsKGNvbnN0IHdjaGFyX3QgKnMxLCBjb25zdCB3Y2hhcl90ICpzMikKK3sKKwkvKiBYWFg6IExDX0NPTExBVEUgc2hvdWxkIGJlIGltcGxlbWVudGVkLiAqLworCXJldHVybiAod2NzY21wKHMxLCBzMikpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2QuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU3ZDBhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG9kLmMKQEAgLTAsMCArMSwxMyBAQAorLyoJJE9wZW5CU0Q6IHdjc3RvZC5jLHYgMS4zIDIwMDkvMDEvMTMgMTg6MTg6MzEga2V0dGVuaXMgRXhwICQJKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKworI2RlZmluZSBGVU5DTkFNRQl3Y3N0b2QKK3R5cGVkZWYgZG91YmxlCQlmbG9hdF90eXBlOworI2RlZmluZSBTVFJUT0RfRlVOQwlzdHJ0b2QKKworI2luY2x1ZGUgIl93Y3N0b2QuaCIKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG9mLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZDc2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvZi5jCkBAIC0wLDAgKzEsMTMgQEAKKy8qCSRPcGVuQlNEOiB3Y3N0b2YuYyx2IDEuMSAyMDA5LzAxLzEzIDE4OjE4OjMxIGtldHRlbmlzIEV4cCAkCSovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8d2N0eXBlLmg+CisKKyNkZWZpbmUgRlVOQ05BTUUJd2NzdG9mCit0eXBlZGVmIGZsb2F0CQlmbG9hdF90eXBlOworI2RlZmluZSBTVFJUT0RfRlVOQwlzdHJ0b2YKKworI2luY2x1ZGUgIl93Y3N0b2QuaCIKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG9pbWF4LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvaW1heC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NmE3YzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvaW1heC5jCkBAIC0wLDAgKzEsMTkgQEAKKy8qCSRPcGVuQlNEOiB3Y3N0b2ltYXguYyx2IDEuMSAyMDA5LzAxLzEzIDE4OjEzOjUxIGtldHRlbmlzIEV4cCAkCSovCisvKiAkTmV0QlNEOiB3Y3N0b2wuYyx2IDEuMiAyMDAzLzAzLzExIDA5OjIxOjIzIHRzaGlvemFrIEV4cCAkICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgPHdjdHlwZS5oPgorCisjaW5jbHVkZSAid2N0b2ludC5oIgorCisjZGVmaW5lCUZVTkNOQU1FCXdjc3RvaW1heAordHlwZWRlZiBpbnRtYXhfdAlpbnRfdHlwZTsKKyNkZWZpbmUJTUlOX1ZBTFVFCUlOVE1BWF9NSU4KKyNkZWZpbmUJTUFYX1ZBTFVFCUlOVE1BWF9NQVgKKworI2luY2x1ZGUgIl93Y3N0b2wuaCIKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG9sLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMzk1YTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvbC5jCkBAIC0wLDAgKzEsMTggQEAKKy8qCSRPcGVuQlNEOiB3Y3N0b2wuYyx2IDEuMiAyMDA1LzA4LzA4IDA4OjA1OjM1IGVzcGllIEV4cCAkCSovCisvKiAkTmV0QlNEOiB3Y3N0b2wuYyx2IDEuMiAyMDAzLzAzLzExIDA5OjIxOjIzIHRzaGlvemFrIEV4cCAkICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKworI2luY2x1ZGUgIndjdG9pbnQuaCIKKworI2RlZmluZQlGVU5DTkFNRQl3Y3N0b2wKK3R5cGVkZWYgbG9uZyBpbnRfdHlwZTsKKyNkZWZpbmUJTUlOX1ZBTFVFCUxPTkdfTUlOCisjZGVmaW5lCU1BWF9WQUxVRQlMT05HX01BWAorCisjaW5jbHVkZSAiX3djc3RvbC5oIgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2xkLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvbGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjQyNTQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2xkLmMKQEAgLTAsMCArMSwxMyBAQAorLyoJJE9wZW5CU0Q6IHdjc3RvbGQuYyx2IDEuMSAyMDA5LzAxLzEzIDE4OjE4OjMxIGtldHRlbmlzIEV4cCAkCSovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8d2N0eXBlLmg+CisKKyNkZWZpbmUgRlVOQ05BTUUJd2NzdG9sZAordHlwZWRlZiBsb25nIGRvdWJsZQlmbG9hdF90eXBlOworI2RlZmluZSBTVFJUT0RfRlVOQwlzdHJ0b2xkCisKKyNpbmNsdWRlICJfd2NzdG9kLmgiCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvbGwuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG9sbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNmRiNzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvbGwuYwpAQCAtMCwwICsxLDE4IEBACisvKgkkT3BlbkJTRDogd2NzdG9sbC5jLHYgMS4yIDIwMDUvMDgvMDggMDg6MDU6MzUgZXNwaWUgRXhwICQJKi8KKy8qICROZXRCU0Q6IHdjc3RvbGwuYyx2IDEuMSAyMDAzLzAzLzExIDA5OjIxOjIzIHRzaGlvemFrIEV4cCAkICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKworI2luY2x1ZGUgIndjdG9pbnQuaCIKKworI2RlZmluZQlGVU5DTkFNRQl3Y3N0b2xsCit0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50X3R5cGU7CisjZGVmaW5lCU1JTl9WQUxVRQlMTE9OR19NSU4KKyNkZWZpbmUJTUFYX1ZBTFVFCUxMT05HX01BWAorCisjaW5jbHVkZSAiX3djc3RvbC5oIgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b21icy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b21icy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MDU0YzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvbWJzLmMKQEAgLTAsMCArMSw0MyBAQAorLyoJJE9wZW5CU0Q6IHdjc3RvbWJzLmMsdiAxLjIgMjAxMi8xMi8wNSAyMzoyMDowMCBkZXJhYWR0IEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgVGltIEouIFJvYmJpbnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCitzaXplX3QKK3djc3RvbWJzKGNoYXIgKiBfX3Jlc3RyaWN0IHMsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IHB3Y3MsIHNpemVfdCBuKQoreworCW1ic3RhdGVfdCBtYnM7CisJY29uc3Qgd2NoYXJfdCAqcHdjc3A7CisKKwltZW1zZXQoJm1icywgMCwgc2l6ZW9mKG1icykpOworCXB3Y3NwID0gcHdjczsKKwlyZXR1cm4gKHdjc3J0b21icyhzLCAmcHdjc3AsIG4sICZtYnMpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG91bC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b3VsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg2Mzg2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG91bC5jCkBAIC0wLDAgKzEsMTcgQEAKKy8qCSRPcGVuQlNEOiB3Y3N0b3VsLmMsdiAxLjIgMjAwNS8wOC8wOCAwODowNTozNSBlc3BpZSBFeHAgJAkqLworLyoJJE5ldEJTRDogd2NzdG91bC5jLHYgMS4yIDIwMDMvMDMvMTEgMDk6MjE6MjQgdHNoaW96YWsgRXhwICQJKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgPHdjdHlwZS5oPgorCisjaW5jbHVkZSAid2N0b2ludC5oIgorCisjZGVmaW5lCUZVTkNOQU1FCXdjc3RvdWwKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50X3R5cGU7CisjZGVmaW5lCU1BWF9WQUxVRQlVTE9OR19NQVgKKworI2luY2x1ZGUgIl93Y3N0b3VsLmgiCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvdWxsLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvdWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY3MWMzNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG91bGwuYwpAQCAtMCwwICsxLDE3IEBACisvKgkkT3BlbkJTRDogd2NzdG91bGwuYyx2IDEuMiAyMDA1LzA4LzA4IDA4OjA1OjM1IGVzcGllIEV4cCAkCSovCisvKgkkTmV0QlNEOiB3Y3N0b3VsbC5jLHYgMS4xIDIwMDMvMDMvMTEgMDk6MjE6MjQgdHNoaW96YWsgRXhwICQJKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgPHdjdHlwZS5oPgorCisjaW5jbHVkZSAid2N0b2ludC5oIgorCisjZGVmaW5lCUZVTkNOQU1FCXdjc3RvdWxsCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludF90eXBlOworI2RlZmluZQlNQVhfVkFMVUUJVUxMT05HX01BWAorCisjaW5jbHVkZSAiX3djc3RvdWwuaCIKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG91bWF4LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvdW1heC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZDQ3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvdW1heC5jCkBAIC0wLDAgKzEsMTggQEAKKy8qCSRPcGVuQlNEOiB3Y3N0b3VtYXguYyx2IDEuMSAyMDA5LzAxLzEzIDE4OjEzOjUxIGtldHRlbmlzIEV4cCAkCSovCisvKgkkTmV0QlNEOiB3Y3N0b3VsLmMsdiAxLjIgMjAwMy8wMy8xMSAwOToyMToyNCB0c2hpb3phayBFeHAgJAkqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKworI2luY2x1ZGUgIndjdG9pbnQuaCIKKworI2RlZmluZQlGVU5DTkFNRQl3Y3N0b3VtYXgKK3R5cGVkZWYgdWludG1heF90CXVpbnRfdHlwZTsKKyNkZWZpbmUJTUFYX1ZBTFVFCVVJTlRNQVhfTUFYCisKKyNpbmNsdWRlICJfd2NzdG91bC5oIgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N4ZnJtLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3hmcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGRiNGE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N4ZnJtLmMKQEAgLTAsMCArMSw0MiBAQAorLyoJJE9wZW5CU0Q6IHdjc3hmcm0uYyx2IDEuMiAyMDEyLzEyLzA1IDIzOjIwOjAwIGRlcmFhZHQgRXhwICQgKi8KKy8qCSRPcGVuQlNEOiB3Y3N4ZnJtLmMsdiAxLjIgMjAxMi8xMi8wNSAyMzoyMDowMCBkZXJhYWR0IEV4cCAkCSovCisvKgkkTmV0QlNEOiBtdWx0aWJ5dGVfc2IuYyx2IDEuNCAyMDAzLzA4LzA3IDE2OjQzOjA0IGFnYyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkxIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8d2NoYXIuaD4KKworc2l6ZV90IAord2NzeGZybSh3Y2hhcl90ICpkZXN0LCBjb25zdCB3Y2hhcl90ICpzcmMsIHNpemVfdCBuKQoreworCWlmIChuID09IDApCisJCXJldHVybiB3Y3NsZW4oc3JjKTsKKwlyZXR1cm4gd2NzbGNweShkZXN0LCBzcmMsIG4pOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3RvYi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3RvYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMWY0MGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djdG9iLmMKQEAgLTAsMCArMSw0MyBAQAorLyoJJE9wZW5CU0Q6IHdjdG9iLmMsdiAxLjIgMjAxMi8xMi8wNSAyMzoyMDowMCBkZXJhYWR0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IFRpbSBKLiBSb2JiaW5zLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCitpbnQKK3djdG9iKHdpbnRfdCBjKQoreworCW1ic3RhdGVfdCBtYnM7CisJY2hhciBidWZbTUJfTEVOX01BWF07CisKKwltZW1zZXQoJm1icywgMCwgc2l6ZW9mKG1icykpOworCWlmIChjID09IFdFT0YgfHwgd2NydG9tYihidWYsIGMsICZtYnMpICE9IDEpCisJCXJldHVybiAoRU9GKTsKKwlyZXR1cm4gKCh1bnNpZ25lZCBjaGFyKSpidWYpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3RvaW50LmggYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djdG9pbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWJmMDg0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3RvaW50LmgKQEAgLTAsMCArMSw3OSBAQAorLyoJJE9wZW5CU0Q6IHdjdG9pbnQuaCx2IDEuMSAyMDA1LzA3LzAxIDA4OjU5OjI3IGVzcGllIEV4cCAkCSovCisvKiAkTmV0QlNEOiBfX3djdG9pbnQuaCx2IDEuMSAyMDAxLzA5LzI4IDExOjI1OjM3IHlhbXQgRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpMjAwMSBDaXRydXMgUHJvamVjdCwKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJJENpdHJ1czogeHBnNGRsL0ZyZWVCU0QvbGliL2xpYmMvbG9jYWxlL19fd2N0b2ludC5oLHYgMS4xIDIwMDEvMDkvMjEgMTM6NTI6MzIgeWFtdCBFeHAgJAorICovCisKKworX19pbmxpbmUgc3RhdGljIGludAord2N0b2ludCh3Y2hhcl90IHdjKQoreworCWludCBuOworCisJc3dpdGNoICh3YykgeworCWNhc2UgTCcwJzogbiA9IDA7IGJyZWFrOworCWNhc2UgTCcxJzogbiA9IDE7IGJyZWFrOworCWNhc2UgTCcyJzogbiA9IDI7IGJyZWFrOworCWNhc2UgTCczJzogbiA9IDM7IGJyZWFrOworCWNhc2UgTCc0JzogbiA9IDQ7IGJyZWFrOworCWNhc2UgTCc1JzogbiA9IDU7IGJyZWFrOworCWNhc2UgTCc2JzogbiA9IDY7IGJyZWFrOworCWNhc2UgTCc3JzogbiA9IDc7IGJyZWFrOworCWNhc2UgTCc4JzogbiA9IDg7IGJyZWFrOworCWNhc2UgTCc5JzogbiA9IDk7IGJyZWFrOworCWNhc2UgTCdBJzogY2FzZSBMJ2EnOiBuID0gMTA7IGJyZWFrOworCWNhc2UgTCdCJzogY2FzZSBMJ2InOiBuID0gMTE7IGJyZWFrOworCWNhc2UgTCdDJzogY2FzZSBMJ2MnOiBuID0gMTI7IGJyZWFrOworCWNhc2UgTCdEJzogY2FzZSBMJ2QnOiBuID0gMTM7IGJyZWFrOworCWNhc2UgTCdFJzogY2FzZSBMJ2UnOiBuID0gMTQ7IGJyZWFrOworCWNhc2UgTCdGJzogY2FzZSBMJ2YnOiBuID0gMTU7IGJyZWFrOworCWNhc2UgTCdHJzogY2FzZSBMJ2cnOiBuID0gMTY7IGJyZWFrOworCWNhc2UgTCdIJzogY2FzZSBMJ2gnOiBuID0gMTc7IGJyZWFrOworCWNhc2UgTCdJJzogY2FzZSBMJ2knOiBuID0gMTg7IGJyZWFrOworCWNhc2UgTCdKJzogY2FzZSBMJ2onOiBuID0gMTk7IGJyZWFrOworCWNhc2UgTCdLJzogY2FzZSBMJ2snOiBuID0gMjA7IGJyZWFrOworCWNhc2UgTCdMJzogY2FzZSBMJ2wnOiBuID0gMjE7IGJyZWFrOworCWNhc2UgTCdNJzogY2FzZSBMJ20nOiBuID0gMjI7IGJyZWFrOworCWNhc2UgTCdOJzogY2FzZSBMJ24nOiBuID0gMjM7IGJyZWFrOworCWNhc2UgTCdPJzogY2FzZSBMJ28nOiBuID0gMjQ7IGJyZWFrOworCWNhc2UgTCdQJzogY2FzZSBMJ3AnOiBuID0gMjU7IGJyZWFrOworCWNhc2UgTCdRJzogY2FzZSBMJ3EnOiBuID0gMjY7IGJyZWFrOworCWNhc2UgTCdSJzogY2FzZSBMJ3InOiBuID0gMjc7IGJyZWFrOworCWNhc2UgTCdTJzogY2FzZSBMJ3MnOiBuID0gMjg7IGJyZWFrOworCWNhc2UgTCdUJzogY2FzZSBMJ3QnOiBuID0gMjk7IGJyZWFrOworCWNhc2UgTCdVJzogY2FzZSBMJ3UnOiBuID0gMzA7IGJyZWFrOworCWNhc2UgTCdWJzogY2FzZSBMJ3YnOiBuID0gMzE7IGJyZWFrOworCWNhc2UgTCdXJzogY2FzZSBMJ3cnOiBuID0gMzI7IGJyZWFrOworCWNhc2UgTCdYJzogY2FzZSBMJ3gnOiBuID0gMzM7IGJyZWFrOworCWNhc2UgTCdZJzogY2FzZSBMJ3knOiBuID0gMzQ7IGJyZWFrOworCWNhc2UgTCdaJzogY2FzZSBMJ3onOiBuID0gMzU7IGJyZWFrOworCWRlZmF1bHQ6IG4gPSAtMTsgYnJlYWs7IC8qIGVycm9yICovCisJfQorCisJcmV0dXJuIG47Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djdG9tYi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3RvbWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWY3YTdjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3RvbWIuYwpAQCAtMCwwICsxLDQ3IEBACisvKgkkT3BlbkJTRDogd2N0b21iLmMsdiAxLjIgMjAxMi8xMi8wNSAyMzoyMDowMCBkZXJhYWR0IEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgVGltIEouIFJvYmJpbnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCitpbnQKK3djdG9tYihjaGFyICpzLCB3Y2hhcl90IHdjaGFyKQoreworCXN0YXRpYyBtYnN0YXRlX3QgbWJzOworCXNpemVfdCBydmFsOworCisJaWYgKHMgPT0gTlVMTCkgeworCQkvKiBObyBzdXBwb3J0IGZvciBzdGF0ZSBkZXBlbmRlbnQgZW5jb2RpbmdzLiAqLworCQltZW1zZXQoJm1icywgMCwgc2l6ZW9mKG1icykpOworCQlyZXR1cm4gKDApOworCX0KKwlpZiAoKHJ2YWwgPSB3Y3J0b21iKHMsIHdjaGFyLCAmbWJzKSkgPT0gKHNpemVfdCktMSkKKwkJcmV0dXJuICgtMSk7CisJcmV0dXJuICgoaW50KXJ2YWwpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9odG9ubC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9odG9ubC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYjQxODkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2h0b25sLmMKQEAgLTAsMCArMSwyMSBAQAorLyoJJE9wZW5CU0Q6IGh0b25sLmMsdiAxLjYgMjAwNS8wOC8wNiAyMDozMDowMyBlc3BpZSBFeHAgJCAqLworLyoKKyAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCisgKiBQdWJsaWMgZG9tYWluLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2VuZGlhbi5oPgorCisjdW5kZWYgaHRvbmwKKwordV9pbnQzMl90CitodG9ubCh1X2ludDMyX3QgeCkKK3sKKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KKwl1X2NoYXIgKnMgPSAodV9jaGFyICopJng7CisJcmV0dXJuICh1X2ludDMyX3QpKHNbMF0gPDwgMjQgfCBzWzFdIDw8IDE2IHwgc1syXSA8PCA4IHwgc1szXSk7CisjZWxzZQorCXJldHVybiB4OworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2h0b25zLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2h0b25zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhiNzNmZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaHRvbnMuYwpAQCAtMCwwICsxLDIxIEBACisvKgkkT3BlbkJTRDogaHRvbnMuYyx2IDEuOCAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkICovCisvKgorICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KKyAqIFB1YmxpYyBkb21haW4uCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvZW5kaWFuLmg+CisKKyN1bmRlZiBodG9ucworCit1X2ludDE2X3QKK2h0b25zKHVfaW50MTZfdCB4KQoreworI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgorCXVfY2hhciAqcyA9ICh1X2NoYXIgKikgJng7CisJcmV0dXJuICh1X2ludDE2X3QpKHNbMF0gPDwgOCB8IHNbMV0pOworI2Vsc2UKKwlyZXR1cm4geDsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X2FkZHIuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9hZGRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg3NjJhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9hZGRyLmMKQEAgLTAsMCArMSwxNzUgQEAKKy8qCSRPcGVuQlNEOiBpbmV0X2FkZHIuYyx2IDEuMTAgMjAxMy8xMS8yNCAyMzo1MToyOCBkZXJhYWR0IEV4cCAkCSovCisKKy8qCisgKiArK0NvcHlyaWdodCsrIDE5ODMsIDE5OTAsIDE5OTMKKyAqIC0KKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MCwgMTk5MworICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAtCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisgKiAKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCisgKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKKyAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKiAtCisgKiAtLUNvcHlyaWdodC0tCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisvKgorICogQXNjaWkgaW50ZXJuZXQgYWRkcmVzcyBpbnRlcnByZXRhdGlvbiByb3V0aW5lLgorICogVGhlIHZhbHVlIHJldHVybmVkIGlzIGluIG5ldHdvcmsgb3JkZXIuCisgKi8KK2luX2FkZHJfdAoraW5ldF9hZGRyKGNvbnN0IGNoYXIgKmNwKQoreworCXN0cnVjdCBpbl9hZGRyIHZhbDsKKworCWlmIChpbmV0X2F0b24oY3AsICZ2YWwpKQorCQlyZXR1cm4gKHZhbC5zX2FkZHIpOworCXJldHVybiAoSU5BRERSX05PTkUpOworfQorCisvKiAKKyAqIENoZWNrIHdoZXRoZXIgImNwIiBpcyBhIHZhbGlkIGFzY2lpIHJlcHJlc2VudGF0aW9uCisgKiBvZiBhbiBJbnRlcm5ldCBhZGRyZXNzIGFuZCBjb252ZXJ0IHRvIGEgYmluYXJ5IGFkZHJlc3MuCisgKiBSZXR1cm5zIDEgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQsIDAgaWYgbm90LgorICogVGhpcyByZXBsYWNlcyBpbmV0X2FkZHIsIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB3aGljaAorICogY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gZmFpbHVyZSBhbmQgYSBsb2NhbCBicm9hZGNhc3QgYWRkcmVzcy4KKyAqLworaW50CitpbmV0X2F0b24oY29uc3QgY2hhciAqY3AsIHN0cnVjdCBpbl9hZGRyICphZGRyKQoreworCWluX2FkZHJfdCB2YWw7CisJaW50IGJhc2UsIG47CisJY2hhciBjOworCXVfaW50IHBhcnRzWzRdOworCXVfaW50ICpwcCA9IHBhcnRzOworCisJYyA9ICpjcDsKKwlmb3IgKDs7KSB7CisJCS8qCisJCSAqIENvbGxlY3QgbnVtYmVyIHVwIHRvIGBgLicnLgorCQkgKiBWYWx1ZXMgYXJlIHNwZWNpZmllZCBhcyBmb3IgQzoKKwkJICogMHg9aGV4LCAwPW9jdGFsLCBpc2RpZ2l0PWRlY2ltYWwuCisJCSAqLworCQlpZiAoIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpYykpCisJCQlyZXR1cm4gKDApOworCQl2YWwgPSAwOyBiYXNlID0gMTA7CisJCWlmIChjID09ICcwJykgeworCQkJYyA9ICorK2NwOworCQkJaWYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnKQorCQkJCWJhc2UgPSAxNiwgYyA9ICorK2NwOworCQkJZWxzZQorCQkJCWJhc2UgPSA4OworCQl9CisJCWZvciAoOzspIHsKKwkJCWlmIChpc2FzY2lpKCh1bnNpZ25lZCBjaGFyKWMpICYmCisJCQkgICAgaXNkaWdpdCgodW5zaWduZWQgY2hhciljKSkgeworCQkJCXZhbCA9ICh2YWwgKiBiYXNlKSArIChjIC0gJzAnKTsKKwkJCQljID0gKisrY3A7CisJCQl9IGVsc2UgaWYgKGJhc2UgPT0gMTYgJiYKKwkJCSAgICBpc2FzY2lpKCh1bnNpZ25lZCBjaGFyKWMpICYmCisJCQkgICAgaXN4ZGlnaXQoKHVuc2lnbmVkIGNoYXIpYykpIHsKKwkJCQl2YWwgPSAodmFsIDw8IDQpIHwKKwkJCQkgICAgKGMgKyAxMCAtIChpc2xvd2VyKCh1bnNpZ25lZCBjaGFyKWMpID8gJ2EnIDogJ0EnKSk7CisJCQkJYyA9ICorK2NwOworCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGMgPT0gJy4nKSB7CisJCQkvKgorCQkJICogSW50ZXJuZXQgZm9ybWF0OgorCQkJICoJYS5iLmMuZAorCQkJICoJYS5iLmMJKHdpdGggYyB0cmVhdGVkIGFzIDE2IGJpdHMpCisJCQkgKglhLmIJKHdpdGggYiB0cmVhdGVkIGFzIDI0IGJpdHMpCisJCQkgKi8KKwkJCWlmIChwcCA+PSBwYXJ0cyArIDMpCisJCQkJcmV0dXJuICgwKTsKKwkJCSpwcCsrID0gdmFsOworCQkJYyA9ICorK2NwOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KKwkvKgorCSAqIENoZWNrIGZvciB0cmFpbGluZyBjaGFyYWN0ZXJzLgorCSAqLworCWlmIChjICE9ICdcMCcgJiYKKwkgICAgKCFpc2FzY2lpKCh1bnNpZ25lZCBjaGFyKWMpIHx8ICFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKWMpKSkKKwkJcmV0dXJuICgwKTsKKwkvKgorCSAqIENvbmNvY3QgdGhlIGFkZHJlc3MgYWNjb3JkaW5nIHRvCisJICogdGhlIG51bWJlciBvZiBwYXJ0cyBzcGVjaWZpZWQuCisJICovCisJbiA9IHBwIC0gcGFydHMgKyAxOworCXN3aXRjaCAobikgeworCisJY2FzZSAwOgorCQlyZXR1cm4gKDApOwkJLyogaW5pdGlhbCBub25kaWdpdCAqLworCisJY2FzZSAxOgkJCQkvKiBhIC0tIDMyIGJpdHMgKi8KKwkJYnJlYWs7CisKKwljYXNlIDI6CQkJCS8qIGEuYiAtLSA4LjI0IGJpdHMgKi8KKwkJaWYgKCh2YWwgPiAweGZmZmZmZikgfHwgKHBhcnRzWzBdID4gMHhmZikpCisJCQlyZXR1cm4gKDApOworCQl2YWwgfD0gcGFydHNbMF0gPDwgMjQ7CisJCWJyZWFrOworCisJY2FzZSAzOgkJCQkvKiBhLmIuYyAtLSA4LjguMTYgYml0cyAqLworCQlpZiAoKHZhbCA+IDB4ZmZmZikgfHwgKHBhcnRzWzBdID4gMHhmZikgfHwgKHBhcnRzWzFdID4gMHhmZikpCisJCQlyZXR1cm4gKDApOworCQl2YWwgfD0gKHBhcnRzWzBdIDw8IDI0KSB8IChwYXJ0c1sxXSA8PCAxNik7CisJCWJyZWFrOworCisJY2FzZSA0OgkJCQkvKiBhLmIuYy5kIC0tIDguOC44LjggYml0cyAqLworCQlpZiAoKHZhbCA+IDB4ZmYpIHx8IChwYXJ0c1swXSA+IDB4ZmYpIHx8IChwYXJ0c1sxXSA+IDB4ZmYpIHx8IChwYXJ0c1syXSA+IDB4ZmYpKQorCQkJcmV0dXJuICgwKTsKKwkJdmFsIHw9IChwYXJ0c1swXSA8PCAyNCkgfCAocGFydHNbMV0gPDwgMTYpIHwgKHBhcnRzWzJdIDw8IDgpOworCQlicmVhazsKKwl9CisJaWYgKGFkZHIpCisJCWFkZHItPnNfYWRkciA9IGh0b25sKHZhbCk7CisJcmV0dXJuICgxKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9sbmFvZi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X2xuYW9mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhNThjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9sbmFvZi5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCSRPcGVuQlNEOiBpbmV0X2xuYW9mLmMsdiAxLjYgMjAwNS8wOC8wNiAyMDozMDowMyBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKKy8qCisgKiBSZXR1cm4gdGhlIGxvY2FsIG5ldHdvcmsgYWRkcmVzcyBwb3J0aW9uIG9mIGFuCisgKiBpbnRlcm5ldCBhZGRyZXNzOyBoYW5kbGVzIGNsYXNzIGEvYi9jIG5ldHdvcmsKKyAqIG51bWJlciBmb3JtYXRzLgorICovCitpbl9hZGRyX3QKK2luZXRfbG5hb2Yoc3RydWN0IGluX2FkZHIgaW4pCit7CisJaW5fYWRkcl90IGkgPSBudG9obChpbi5zX2FkZHIpOworCisJaWYgKElOX0NMQVNTQShpKSkKKwkJcmV0dXJuICgoaSkmSU5fQ0xBU1NBX0hPU1QpOworCWVsc2UgaWYgKElOX0NMQVNTQihpKSkKKwkJcmV0dXJuICgoaSkmSU5fQ0xBU1NCX0hPU1QpOworCWVsc2UKKwkJcmV0dXJuICgoaSkmSU5fQ0xBU1NDX0hPU1QpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X21ha2VhZGRyLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfbWFrZWFkZHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2Q5MzI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X21ha2VhZGRyLmMKQEAgLTAsMCArMSw1NCBAQAorLyoJJE9wZW5CU0Q6IGluZXRfbWFrZWFkZHIuYyx2IDEuNiAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKworLyoKKyAqIEZvcm11bGF0ZSBhbiBJbnRlcm5ldCBhZGRyZXNzIGZyb20gbmV0d29yayArIGhvc3QuICBVc2VkIGluCisgKiBidWlsZGluZyBhZGRyZXNzZXMgc3RvcmVkIGluIHRoZSBpZm5ldCBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBpbl9hZGRyCitpbmV0X21ha2VhZGRyKGluX2FkZHJfdCBuZXQsIGluX2FkZHJfdCBob3N0KQoreworCWluX2FkZHJfdCBhZGRyOworCisJaWYgKG5ldCA8IDEyOCkKKwkJYWRkciA9IChuZXQgPDwgSU5fQ0xBU1NBX05TSElGVCkgfCAoaG9zdCAmIElOX0NMQVNTQV9IT1NUKTsKKwllbHNlIGlmIChuZXQgPCA2NTUzNikKKwkJYWRkciA9IChuZXQgPDwgSU5fQ0xBU1NCX05TSElGVCkgfCAoaG9zdCAmIElOX0NMQVNTQl9IT1NUKTsKKwllbHNlIGlmIChuZXQgPCAxNjc3NzIxNkwpCisJCWFkZHIgPSAobmV0IDw8IElOX0NMQVNTQ19OU0hJRlQpIHwgKGhvc3QgJiBJTl9DTEFTU0NfSE9TVCk7CisJZWxzZQorCQlhZGRyID0gbmV0IHwgaG9zdDsKKwlhZGRyID0gaHRvbmwoYWRkcik7CisJcmV0dXJuICgqKHN0cnVjdCBpbl9hZGRyICopJmFkZHIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X25ldG9mLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfbmV0b2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjQ2OGMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X25ldG9mLmMKQEAgLTAsMCArMSw1MCBAQAorLyoJJE9wZW5CU0Q6IGluZXRfbmV0b2YuYyx2IDEuNiAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKworLyoKKyAqIFJldHVybiB0aGUgbmV0d29yayBudW1iZXIgZnJvbSBhbiBpbnRlcm5ldAorICogYWRkcmVzczsgaGFuZGxlcyBjbGFzcyBhL2IvYyBuZXR3b3JrICMncy4KKyAqLworaW5fYWRkcl90CitpbmV0X25ldG9mKHN0cnVjdCBpbl9hZGRyIGluKQoreworCWluX2FkZHJfdCBpID0gbnRvaGwoaW4uc19hZGRyKTsKKworCWlmIChJTl9DTEFTU0EoaSkpCisJCXJldHVybiAoKChpKSZJTl9DTEFTU0FfTkVUKSA+PiBJTl9DTEFTU0FfTlNISUZUKTsKKwllbHNlIGlmIChJTl9DTEFTU0IoaSkpCisJCXJldHVybiAoKChpKSZJTl9DTEFTU0JfTkVUKSA+PiBJTl9DTEFTU0JfTlNISUZUKTsKKwllbHNlCisJCXJldHVybiAoKChpKSZJTl9DTEFTU0NfTkVUKSA+PiBJTl9DTEFTU0NfTlNISUZUKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9uZXR3b3JrLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfbmV0d29yay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZjU1NGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfbmV0d29yay5jCkBAIC0wLDAgKzEsODQgQEAKKy8qCSRPcGVuQlNEOiBpbmV0X25ldHdvcmsuYyx2IDEuMTEgMjAxMy8xMS8yNSAxNzoyOToxOSBkZXJhYWR0IEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisvKgorICogSW50ZXJuZXQgbmV0d29yayBhZGRyZXNzIGludGVycHJldGF0aW9uIHJvdXRpbmUuCisgKiBUaGUgbGlicmFyeSByb3V0aW5lcyBjYWxsIHRoaXMgcm91dGluZSB0byBpbnRlcnByZXQKKyAqIG5ldHdvcmsgbnVtYmVycy4KKyAqLworaW5fYWRkcl90CitpbmV0X25ldHdvcmsoY29uc3QgY2hhciAqY3ApCit7CisJaW5fYWRkcl90IHZhbCwgYmFzZSwgbjsKKwl1X2NoYXIgYzsKKwlpbl9hZGRyX3QgcGFydHNbNF0sICpwcCA9IHBhcnRzOworCWludCBpOworCithZ2FpbjoKKwl2YWwgPSAwOyBiYXNlID0gMTA7CisJaWYgKCpjcCA9PSAnMCcpCisJCWJhc2UgPSA4LCBjcCsrOworCWlmICgqY3AgPT0gJ3gnIHx8ICpjcCA9PSAnWCcpCisJCWJhc2UgPSAxNiwgY3ArKzsKKwl3aGlsZSAoKGMgPSAqY3ApKSB7CisJCWlmIChpc2RpZ2l0KGMpKSB7CisJCQl2YWwgPSAodmFsICogYmFzZSkgKyAoYyAtICcwJyk7CisJCQljcCsrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGJhc2UgPT0gMTYgJiYgaXN4ZGlnaXQoYykpIHsKKwkJCXZhbCA9ICh2YWwgPDwgNCkgKyAoYyArIDEwIC0gKGlzbG93ZXIoYykgPyAnYScgOiAnQScpKTsKKwkJCWNwKys7CisJCQljb250aW51ZTsKKwkJfQorCQlicmVhazsKKwl9CisJaWYgKCpjcCA9PSAnLicpIHsKKwkJaWYgKHBwID49IHBhcnRzICsgMykKKwkJCXJldHVybiAoSU5BRERSX05PTkUpOworCQkqcHArKyA9IHZhbCwgY3ArKzsKKwkJZ290byBhZ2FpbjsKKwl9CisJaWYgKCpjcCAmJiAhaXNzcGFjZSgqY3ApKQorCQlyZXR1cm4gKElOQUREUl9OT05FKTsKKwkqcHArKyA9IHZhbDsKKwluID0gcHAgLSBwYXJ0czsKKwlmb3IgKHZhbCA9IDAsIGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXZhbCA8PD0gODsKKwkJaWYgKGkgPCBuKQorCQkJdmFsIHw9IHBhcnRzW2ldICYgMHhmZjsKKwl9CisJcmV0dXJuICh2YWwpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X250b2EuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9udG9hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY1ZDkzZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9udG9hLmMKQEAgLTAsMCArMSw1MSBAQAorLyoJJE9wZW5CU0Q6IGluZXRfbnRvYS5jLHYgMS42IDIwMDUvMDgvMDYgMjA6MzA6MDMgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogQ29udmVydCBuZXR3b3JrLWZvcm1hdCBpbnRlcm5ldCBhZGRyZXNzCisgKiB0byBiYXNlIDI1NiBkLmQuZC5kIHJlcHJlc2VudGF0aW9uLgorICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2NoYXIgKgoraW5ldF9udG9hKHN0cnVjdCBpbl9hZGRyIGluKQoreworCXN0YXRpYyBjaGFyIGJbMThdOworCWNoYXIgKnA7CisKKwlwID0gKGNoYXIgKikmaW47CisjZGVmaW5lCVVDKGIpCSgoKGludCliKSYweGZmKQorCSh2b2lkKXNucHJpbnRmKGIsIHNpemVvZihiKSwKKwkgICAgIiV1LiV1LiV1LiV1IiwgVUMocFswXSksIFVDKHBbMV0pLCBVQyhwWzJdKSwgVUMocFszXSkpOworCXJldHVybiAoYik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfbnRvcC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X250b3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTkxYTA3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X250b3AuYwpAQCAtMCwwICsxLDIwNSBAQAorLyoJJE9wZW5CU0Q6IGluZXRfbnRvcC5jLHYgMS4xMCAyMDE0LzA1LzE3IDE4OjE2OjE0IHRlZHUgRXhwICQJKi8KKworLyogQ29weXJpZ2h0IChjKSAxOTk2IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJTlRFUk5FVCBTT0ZUV0FSRSBDT05TT1JUSVVNIERJU0NMQUlNUworICogQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBJTlRFUk5FVCBTT0ZUV0FSRQorICogQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyoKKyAqIFdBUk5JTkc6IERvbid0IGV2ZW4gY29uc2lkZXIgdHJ5aW5nIHRvIGNvbXBpbGUgdGhpcyBvbiBhIHN5c3RlbSB3aGVyZQorICogc2l6ZW9mKGludCkgPCA0LiAgc2l6ZW9mKGludCkgPiA0IGlzIGZpbmU7IGFsbCB0aGUgd29ybGQncyBub3QgYSBWQVguCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKmluZXRfbnRvcDQoY29uc3QgdV9jaGFyICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpOworc3RhdGljIGNvbnN0IGNoYXIgKmluZXRfbnRvcDYoY29uc3QgdV9jaGFyICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpOworCisvKiBjb25zdCBjaGFyICoKKyAqIGluZXRfbnRvcChhZiwgc3JjLCBkc3QsIHNpemUpCisgKgljb252ZXJ0IGEgbmV0d29yayBmb3JtYXQgYWRkcmVzcyB0byBwcmVzZW50YXRpb24gZm9ybWF0LgorICogcmV0dXJuOgorICoJcG9pbnRlciB0byBwcmVzZW50YXRpb24gZm9ybWF0IGFkZHJlc3MgKGBkc3QnKSwgb3IgTlVMTCAoc2VlIGVycm5vKS4KKyAqIGF1dGhvcjoKKyAqCVBhdWwgVml4aWUsIDE5OTYuCisgKi8KK2NvbnN0IGNoYXIgKgoraW5ldF9udG9wKGludCBhZiwgY29uc3Qgdm9pZCAqc3JjLCBjaGFyICpkc3QsIHNvY2tsZW5fdCBzaXplKQoreworCXN3aXRjaCAoYWYpIHsKKwljYXNlIEFGX0lORVQ6CisJCXJldHVybiAoaW5ldF9udG9wNChzcmMsIGRzdCwgKHNpemVfdClzaXplKSk7CisJY2FzZSBBRl9JTkVUNjoKKwkJcmV0dXJuIChpbmV0X250b3A2KHNyYywgZHN0LCAoc2l6ZV90KXNpemUpKTsKKwlkZWZhdWx0OgorCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyogTk9UUkVBQ0hFRCAqLworfQorCisvKiBjb25zdCBjaGFyICoKKyAqIGluZXRfbnRvcDQoc3JjLCBkc3QsIHNpemUpCisgKglmb3JtYXQgYW4gSVB2NCBhZGRyZXNzLCBtb3JlIG9yIGxlc3MgbGlrZSBpbmV0X250b2EoKQorICogcmV0dXJuOgorICoJYGRzdCcgKGFzIGEgY29uc3QpCisgKiBub3RlczoKKyAqCSgxKSB1c2VzIG5vIHN0YXRpY3MKKyAqCSgyKSB0YWtlcyBhIHVfY2hhciogbm90IGFuIGluX2FkZHIgYXMgaW5wdXQKKyAqIGF1dGhvcjoKKyAqCVBhdWwgVml4aWUsIDE5OTYuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2luZXRfbnRvcDQoY29uc3QgdV9jaGFyICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpCit7CisJY2hhciB0bXBbc2l6ZW9mICIyNTUuMjU1LjI1NS4yNTUiXTsKKwlpbnQgbDsKKworCWwgPSBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiJXUuJXUuJXUuJXUiLAorCSAgICBzcmNbMF0sIHNyY1sxXSwgc3JjWzJdLCBzcmNbM10pOworCWlmIChsIDw9IDAgfHwgbCA+PSBzaXplKSB7CisJCWVycm5vID0gRU5PU1BDOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlzdHJsY3B5KGRzdCwgdG1wLCBzaXplKTsKKwlyZXR1cm4gKGRzdCk7Cit9CisKKy8qIGNvbnN0IGNoYXIgKgorICogaW5ldF9udG9wNihzcmMsIGRzdCwgc2l6ZSkKKyAqCWNvbnZlcnQgSVB2NiBiaW5hcnkgYWRkcmVzcyBpbnRvIHByZXNlbnRhdGlvbiAocHJpbnRhYmxlKSBmb3JtYXQKKyAqIGF1dGhvcjoKKyAqCVBhdWwgVml4aWUsIDE5OTYuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2luZXRfbnRvcDYoY29uc3QgdV9jaGFyICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpCit7CisJLyoKKwkgKiBOb3RlIHRoYXQgaW50MzJfdCBhbmQgaW50MTZfdCBuZWVkIG9ubHkgYmUgImF0IGxlYXN0IiBsYXJnZSBlbm91Z2gKKwkgKiB0byBjb250YWluIGEgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBzaXplLiAgT24gc29tZSBzeXN0ZW1zLCBsaWtlCisJICogQ3JheXMsIHRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMgYW4gaW50ZWdlciB2YXJpYWJsZSB3aXRoIDE2IGJpdHMuCisJICogS2VlcCB0aGlzIGluIG1pbmQgaWYgeW91IHRoaW5rIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGhhdmUgYmVlbiBjb2RlZAorCSAqIHRvIHVzZSBwb2ludGVyIG92ZXJsYXlzLiAgQWxsIHRoZSB3b3JsZCdzIG5vdCBhIFZBWC4KKwkgKi8KKwljaGFyIHRtcFtzaXplb2YgImZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOjI1NS4yNTUuMjU1LjI1NSJdOworCWNoYXIgKnRwLCAqZXA7CisJc3RydWN0IHsgaW50IGJhc2UsIGxlbjsgfSBiZXN0LCBjdXI7CisJdV9pbnQgd29yZHNbSU42QUREUlNaIC8gSU5UMTZTWl07CisJaW50IGk7CisJaW50IGFkdmFuY2U7CisKKwkvKgorCSAqIFByZXByb2Nlc3M6CisJICoJQ29weSB0aGUgaW5wdXQgKGJ5dGV3aXNlKSBhcnJheSBpbnRvIGEgd29yZHdpc2UgYXJyYXkuCisJICoJRmluZCB0aGUgbG9uZ2VzdCBydW4gb2YgMHgwMCdzIGluIHNyY1tdIGZvciA6OiBzaG9ydGhhbmRpbmcuCisJICovCisJbWVtc2V0KHdvcmRzLCAnXDAnLCBzaXplb2Ygd29yZHMpOworCWZvciAoaSA9IDA7IGkgPCBJTjZBRERSU1o7IGkrKykKKwkJd29yZHNbaSAvIDJdIHw9IChzcmNbaV0gPDwgKCgxIC0gKGkgJSAyKSkgPDwgMykpOworCWJlc3QuYmFzZSA9IC0xOworCWN1ci5iYXNlID0gLTE7CisJZm9yIChpID0gMDsgaSA8IChJTjZBRERSU1ogLyBJTlQxNlNaKTsgaSsrKSB7CisJCWlmICh3b3Jkc1tpXSA9PSAwKSB7CisJCQlpZiAoY3VyLmJhc2UgPT0gLTEpCisJCQkJY3VyLmJhc2UgPSBpLCBjdXIubGVuID0gMTsKKwkJCWVsc2UKKwkJCQljdXIubGVuKys7CisJCX0gZWxzZSB7CisJCQlpZiAoY3VyLmJhc2UgIT0gLTEpIHsKKwkJCQlpZiAoYmVzdC5iYXNlID09IC0xIHx8IGN1ci5sZW4gPiBiZXN0LmxlbikKKwkJCQkJYmVzdCA9IGN1cjsKKwkJCQljdXIuYmFzZSA9IC0xOworCQkJfQorCQl9CisJfQorCWlmIChjdXIuYmFzZSAhPSAtMSkgeworCQlpZiAoYmVzdC5iYXNlID09IC0xIHx8IGN1ci5sZW4gPiBiZXN0LmxlbikKKwkJCWJlc3QgPSBjdXI7CisJfQorCWlmIChiZXN0LmJhc2UgIT0gLTEgJiYgYmVzdC5sZW4gPCAyKQorCQliZXN0LmJhc2UgPSAtMTsKKworCS8qCisJICogRm9ybWF0IHRoZSByZXN1bHQuCisJICovCisJdHAgPSB0bXA7CisJZXAgPSB0bXAgKyBzaXplb2YodG1wKTsKKwlmb3IgKGkgPSAwOyBpIDwgKElONkFERFJTWiAvIElOVDE2U1opICYmIHRwIDwgZXA7IGkrKykgeworCQkvKiBBcmUgd2UgaW5zaWRlIHRoZSBiZXN0IHJ1biBvZiAweDAwJ3M/ICovCisJCWlmIChiZXN0LmJhc2UgIT0gLTEgJiYgaSA+PSBiZXN0LmJhc2UgJiYKKwkJICAgIGkgPCAoYmVzdC5iYXNlICsgYmVzdC5sZW4pKSB7CisJCQlpZiAoaSA9PSBiZXN0LmJhc2UpIHsKKwkJCQlpZiAodHAgKyAxID49IGVwKSB7CisJCQkJCWVycm5vID0gRU5PU1BDOworCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCX0KKwkJCQkqdHArKyA9ICc6JzsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIEFyZSB3ZSBmb2xsb3dpbmcgYW4gaW5pdGlhbCBydW4gb2YgMHgwMHMgb3IgYW55IHJlYWwgaGV4PyAqLworCQlpZiAoaSAhPSAwKSB7CisJCQlpZiAodHAgKyAxID49IGVwKSB7CisJCQkJZXJybm8gPSBFTk9TUEM7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCSp0cCsrID0gJzonOworCQl9CisJCS8qIElzIHRoaXMgYWRkcmVzcyBhbiBlbmNhcHN1bGF0ZWQgSVB2ND8gKi8KKwkJaWYgKGkgPT0gNiAmJiBiZXN0LmJhc2UgPT0gMCAmJgorCQkgICAgKGJlc3QubGVuID09IDYgfHwgKGJlc3QubGVuID09IDUgJiYgd29yZHNbNV0gPT0gMHhmZmZmKSkpIHsKKwkJCWlmICghaW5ldF9udG9wNChzcmMrMTIsIHRwLCAoc2l6ZV90KShlcCAtIHRwKSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCXRwICs9IHN0cmxlbih0cCk7CisJCQlicmVhazsKKwkJfQorCQlhZHZhbmNlID0gc25wcmludGYodHAsIGVwIC0gdHAsICIleCIsIHdvcmRzW2ldKTsKKwkJaWYgKGFkdmFuY2UgPD0gMCB8fCBhZHZhbmNlID49IGVwIC0gdHApIHsKKwkJCWVycm5vID0gRU5PU1BDOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQl0cCArPSBhZHZhbmNlOworCX0KKwkvKiBXYXMgaXQgYSB0cmFpbGluZyBydW4gb2YgMHgwMCdzPyAqLworCWlmIChiZXN0LmJhc2UgIT0gLTEgJiYgKGJlc3QuYmFzZSArIGJlc3QubGVuKSA9PSAoSU42QUREUlNaIC8gSU5UMTZTWikpIHsKKwkJaWYgKHRwICsgMSA+PSBlcCkgeworCQkJZXJybm8gPSBFTk9TUEM7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCSp0cCsrID0gJzonOworCX0KKwlpZiAodHAgKyAxID49IGVwKSB7CisJCWVycm5vID0gRU5PU1BDOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwkqdHArKyA9ICdcMCc7CisKKwkvKgorCSAqIENoZWNrIGZvciBvdmVyZmxvdywgY29weSwgYW5kIHdlJ3JlIGRvbmUuCisJICovCisJaWYgKChzaXplX3QpKHRwIC0gdG1wKSA+IHNpemUpIHsKKwkJZXJybm8gPSBFTk9TUEM7CisJCXJldHVybiAoTlVMTCk7CisJfQorCXN0cmxjcHkoZHN0LCB0bXAsIHNpemUpOworCXJldHVybiAoZHN0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9wdG9uLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfcHRvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNTIxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfcHRvbi5jCkBAIC0wLDAgKzEsMjEzIEBACisvKgkkT3BlbkJTRDogaW5ldF9wdG9uLmMsdiAxLjggMjAxMC8wNS8wNiAxNTo0NzoxNCBjbGF1ZGlvIEV4cCAkCSovCisKKy8qIENvcHlyaWdodCAoYykgMTk5NiBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSU5URVJORVQgU09GVFdBUkUgQ09OU09SVElVTSBESVNDTEFJTVMKKyAqIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgSU5URVJORVQgU09GVFdBUkUKKyAqIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisvKgorICogV0FSTklORzogRG9uJ3QgZXZlbiBjb25zaWRlciB0cnlpbmcgdG8gY29tcGlsZSB0aGlzIG9uIGEgc3lzdGVtIHdoZXJlCisgKiBzaXplb2YoaW50KSA8IDQuICBzaXplb2YoaW50KSA+IDQgaXMgZmluZTsgYWxsIHRoZSB3b3JsZCdzIG5vdCBhIFZBWC4KKyAqLworCitzdGF0aWMgaW50CWluZXRfcHRvbjQoY29uc3QgY2hhciAqc3JjLCB1X2NoYXIgKmRzdCk7CitzdGF0aWMgaW50CWluZXRfcHRvbjYoY29uc3QgY2hhciAqc3JjLCB1X2NoYXIgKmRzdCk7CisKKy8qIGludAorICogaW5ldF9wdG9uKGFmLCBzcmMsIGRzdCkKKyAqCWNvbnZlcnQgZnJvbSBwcmVzZW50YXRpb24gZm9ybWF0ICh3aGljaCB1c3VhbGx5IG1lYW5zIEFTQ0lJIHByaW50YWJsZSkKKyAqCXRvIG5ldHdvcmsgZm9ybWF0ICh3aGljaCBpcyB1c3VhbGx5IHNvbWUga2luZCBvZiBiaW5hcnkgZm9ybWF0KS4KKyAqIHJldHVybjoKKyAqCTEgaWYgdGhlIGFkZHJlc3Mgd2FzIHZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgZmFtaWx5CisgKgkwIGlmIHRoZSBhZGRyZXNzIHdhc24ndCB2YWxpZCAoYGRzdCcgaXMgdW50b3VjaGVkIGluIHRoaXMgY2FzZSkKKyAqCS0xIGlmIHNvbWUgb3RoZXIgZXJyb3Igb2NjdXJyZWQgKGBkc3QnIGlzIHVudG91Y2hlZCBpbiB0aGlzIGNhc2UsIHRvbykKKyAqIGF1dGhvcjoKKyAqCVBhdWwgVml4aWUsIDE5OTYuCisgKi8KK2ludAoraW5ldF9wdG9uKGludCBhZiwgY29uc3QgY2hhciAqc3JjLCB2b2lkICpkc3QpCit7CisJc3dpdGNoIChhZikgeworCWNhc2UgQUZfSU5FVDoKKwkJcmV0dXJuIChpbmV0X3B0b240KHNyYywgZHN0KSk7CisJY2FzZSBBRl9JTkVUNjoKKwkJcmV0dXJuIChpbmV0X3B0b242KHNyYywgZHN0KSk7CisJZGVmYXVsdDoKKwkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7CisJCXJldHVybiAoLTEpOworCX0KKwkvKiBOT1RSRUFDSEVEICovCit9CisKKy8qIGludAorICogaW5ldF9wdG9uNChzcmMsIGRzdCkKKyAqCWxpa2UgaW5ldF9hdG9uKCkgYnV0IHdpdGhvdXQgYWxsIHRoZSBoZXhhZGVjaW1hbCBhbmQgc2hvcnRoYW5kLgorICogcmV0dXJuOgorICoJMSBpZiBgc3JjJyBpcyBhIHZhbGlkIGRvdHRlZCBxdWFkLCBlbHNlIDAuCisgKiBub3RpY2U6CisgKglkb2VzIG5vdCB0b3VjaCBgZHN0JyB1bmxlc3MgaXQncyByZXR1cm5pbmcgMS4KKyAqIGF1dGhvcjoKKyAqCVBhdWwgVml4aWUsIDE5OTYuCisgKi8KK3N0YXRpYyBpbnQKK2luZXRfcHRvbjQoY29uc3QgY2hhciAqc3JjLCB1X2NoYXIgKmRzdCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBkaWdpdHNbXSA9ICIwMTIzNDU2Nzg5IjsKKwlpbnQgc2F3X2RpZ2l0LCBvY3RldHMsIGNoOworCXVfY2hhciB0bXBbSU5BRERSU1pdLCAqdHA7CisKKwlzYXdfZGlnaXQgPSAwOworCW9jdGV0cyA9IDA7CisJKih0cCA9IHRtcCkgPSAwOworCXdoaWxlICgoY2ggPSAqc3JjKyspICE9ICdcMCcpIHsKKwkJY29uc3QgY2hhciAqcGNoOworCisJCWlmICgocGNoID0gc3RyY2hyKGRpZ2l0cywgY2gpKSAhPSBOVUxMKSB7CisJCQl1X2ludCBuZXcgPSAqdHAgKiAxMCArIChwY2ggLSBkaWdpdHMpOworCisJCQlpZiAobmV3ID4gMjU1KQorCQkJCXJldHVybiAoMCk7CisJCQlpZiAoISBzYXdfZGlnaXQpIHsKKwkJCQlpZiAoKytvY3RldHMgPiA0KQorCQkJCQlyZXR1cm4gKDApOworCQkJCXNhd19kaWdpdCA9IDE7CisJCQl9CisJCQkqdHAgPSBuZXc7CisJCX0gZWxzZSBpZiAoY2ggPT0gJy4nICYmIHNhd19kaWdpdCkgeworCQkJaWYgKG9jdGV0cyA9PSA0KQorCQkJCXJldHVybiAoMCk7CisJCQkqKyt0cCA9IDA7CisJCQlzYXdfZGlnaXQgPSAwOworCQl9IGVsc2UKKwkJCXJldHVybiAoMCk7CisJfQorCWlmIChvY3RldHMgPCA0KQorCQlyZXR1cm4gKDApOworCisJbWVtY3B5KGRzdCwgdG1wLCBJTkFERFJTWik7CisJcmV0dXJuICgxKTsKK30KKworLyogaW50CisgKiBpbmV0X3B0b242KHNyYywgZHN0KQorICoJY29udmVydCBwcmVzZW50YXRpb24gbGV2ZWwgYWRkcmVzcyB0byBuZXR3b3JrIG9yZGVyIGJpbmFyeSBmb3JtLgorICogcmV0dXJuOgorICoJMSBpZiBgc3JjJyBpcyBhIHZhbGlkIFtSRkMxODg0IDIuMl0gYWRkcmVzcywgZWxzZSAwLgorICogbm90aWNlOgorICoJZG9lcyBub3QgdG91Y2ggYGRzdCcgdW5sZXNzIGl0J3MgcmV0dXJuaW5nIDEuCisgKiBjcmVkaXQ6CisgKglpbnNwaXJlZCBieSBNYXJrIEFuZHJld3MuCisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitzdGF0aWMgaW50CitpbmV0X3B0b242KGNvbnN0IGNoYXIgKnNyYywgdV9jaGFyICpkc3QpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgeGRpZ2l0c19sW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiIsCisJCQkgIHhkaWdpdHNfdVtdID0gIjAxMjM0NTY3ODlBQkNERUYiOworCXVfY2hhciB0bXBbSU42QUREUlNaXSwgKnRwLCAqZW5kcCwgKmNvbG9ucDsKKwljb25zdCBjaGFyICp4ZGlnaXRzLCAqY3VydG9rOworCWludCBjaCwgc2F3X3hkaWdpdCwgY291bnRfeGRpZ2l0OworCXVfaW50IHZhbDsKKworCW1lbXNldCgodHAgPSB0bXApLCAnXDAnLCBJTjZBRERSU1opOworCWVuZHAgPSB0cCArIElONkFERFJTWjsKKwljb2xvbnAgPSBOVUxMOworCS8qIExlYWRpbmcgOjogcmVxdWlyZXMgc29tZSBzcGVjaWFsIGhhbmRsaW5nLiAqLworCWlmICgqc3JjID09ICc6JykKKwkJaWYgKCorK3NyYyAhPSAnOicpCisJCQlyZXR1cm4gKDApOworCWN1cnRvayA9IHNyYzsKKwlzYXdfeGRpZ2l0ID0gY291bnRfeGRpZ2l0ID0gMDsKKwl2YWwgPSAwOworCXdoaWxlICgoY2ggPSAqc3JjKyspICE9ICdcMCcpIHsKKwkJY29uc3QgY2hhciAqcGNoOworCisJCWlmICgocGNoID0gc3RyY2hyKCh4ZGlnaXRzID0geGRpZ2l0c19sKSwgY2gpKSA9PSBOVUxMKQorCQkJcGNoID0gc3RyY2hyKCh4ZGlnaXRzID0geGRpZ2l0c191KSwgY2gpOworCQlpZiAocGNoICE9IE5VTEwpIHsKKwkJCWlmIChjb3VudF94ZGlnaXQgPj0gNCkKKwkJCQlyZXR1cm4gKDApOworCQkJdmFsIDw8PSA0OworCQkJdmFsIHw9IChwY2ggLSB4ZGlnaXRzKTsKKwkJCWlmICh2YWwgPiAweGZmZmYpCisJCQkJcmV0dXJuICgwKTsKKwkJCXNhd194ZGlnaXQgPSAxOworCQkJY291bnRfeGRpZ2l0Kys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY2ggPT0gJzonKSB7CisJCQljdXJ0b2sgPSBzcmM7CisJCQlpZiAoIXNhd194ZGlnaXQpIHsKKwkJCQlpZiAoY29sb25wKQorCQkJCQlyZXR1cm4gKDApOworCQkJCWNvbG9ucCA9IHRwOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmICgqc3JjID09ICdcMCcpIHsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJaWYgKHRwICsgSU5UMTZTWiA+IGVuZHApCisJCQkJcmV0dXJuICgwKTsKKwkJCSp0cCsrID0gKHVfY2hhcikgKHZhbCA+PiA4KSAmIDB4ZmY7CisJCQkqdHArKyA9ICh1X2NoYXIpIHZhbCAmIDB4ZmY7CisJCQlzYXdfeGRpZ2l0ID0gMDsKKwkJCWNvdW50X3hkaWdpdCA9IDA7CisJCQl2YWwgPSAwOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGNoID09ICcuJyAmJiAoKHRwICsgSU5BRERSU1opIDw9IGVuZHApICYmCisJCSAgICBpbmV0X3B0b240KGN1cnRvaywgdHApID4gMCkgeworCQkJdHAgKz0gSU5BRERSU1o7CisJCQlzYXdfeGRpZ2l0ID0gMDsKKwkJCWNvdW50X3hkaWdpdCA9IDA7CisJCQlicmVhazsJLyogJ1wwJyB3YXMgc2VlbiBieSBpbmV0X3B0b240KCkuICovCisJCX0KKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKHNhd194ZGlnaXQpIHsKKwkJaWYgKHRwICsgSU5UMTZTWiA+IGVuZHApCisJCQlyZXR1cm4gKDApOworCQkqdHArKyA9ICh1X2NoYXIpICh2YWwgPj4gOCkgJiAweGZmOworCQkqdHArKyA9ICh1X2NoYXIpIHZhbCAmIDB4ZmY7CisJfQorCWlmIChjb2xvbnAgIT0gTlVMTCkgeworCQkvKgorCQkgKiBTaW5jZSBzb21lIG1lbW1vdmUoKSdzIGVycm9uZW91c2x5IGZhaWwgdG8gaGFuZGxlCisJCSAqIG92ZXJsYXBwaW5nIHJlZ2lvbnMsIHdlJ2xsIGRvIHRoZSBzaGlmdCBieSBoYW5kLgorCQkgKi8KKwkJY29uc3QgaW50IG4gPSB0cCAtIGNvbG9ucDsKKwkJaW50IGk7CisKKwkJaWYgKHRwID09IGVuZHApCisJCQlyZXR1cm4gKDApOworCQlmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgeworCQkJZW5kcFstIGldID0gY29sb25wW24gLSBpXTsKKwkJCWNvbG9ucFtuIC0gaV0gPSAwOworCQl9CisJCXRwID0gZW5kcDsKKwl9CisJaWYgKHRwICE9IGVuZHApCisJCXJldHVybiAoMCk7CisJbWVtY3B5KGRzdCwgdG1wLCBJTjZBRERSU1opOworCXJldHVybiAoMSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L250b2hsLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L250b2hsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0MTRiNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvbnRvaGwuYwpAQCAtMCwwICsxLDIxIEBACisvKgkkT3BlbkJTRDogbnRvaGwuYyx2IDEuNiAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkICovCisvKgorICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KKyAqIFB1YmxpYyBkb21haW4uCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvZW5kaWFuLmg+CisKKyN1bmRlZiBudG9obAorCit1X2ludDMyX3QKK250b2hsKHVfaW50MzJfdCB4KQoreworI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgorCXVfY2hhciAqcyA9ICh1X2NoYXIgKikmeDsKKwlyZXR1cm4gKHVfaW50MzJfdCkoc1swXSA8PCAyNCB8IHNbMV0gPDwgMTYgfCBzWzJdIDw8IDggfCBzWzNdKTsKKyNlbHNlCisJcmV0dXJuIHg7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvbnRvaHMuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvbnRvaHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjM0NWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9udG9ocy5jCkBAIC0wLDAgKzEsMjEgQEAKKy8qCSRPcGVuQlNEOiBudG9ocy5jLHYgMS44IDIwMDUvMDgvMDYgMjA6MzA6MDMgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9lbmRpYW4uaD4KKworI3VuZGVmIG50b2hzCisKK3VfaW50MTZfdAorbnRvaHModV9pbnQxNl90IHgpCit7CisjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCisJdV9jaGFyICpzID0gKHVfY2hhciAqKSAmeDsKKwlyZXR1cm4gKHVfaW50MTZfdCkoc1swXSA8PCA4IHwgc1sxXSk7CisjZWxzZQorCXJldHVybiB4OworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vYXNwcmludGYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9hc3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MjRjOTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vYXNwcmludGYuYwpAQCAtMCwwICsxLDYzIEBACisvKgkkT3BlbkJTRDogYXNwcmludGYuYyx2IDEuMTkgMjAxMS8wNS8zMCAxODo0ODozMyBtYXJ0eW5hcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk3IFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyogUFJJTlRGTElLRTIgKi8KK2ludAorYXNwcmludGYoY2hhciAqKnN0ciwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHJldDsKKwl2YV9saXN0IGFwOworCUZJTEUgZjsKKwlzdHJ1Y3QgX19zZmlsZWV4dCBmZXh0OworCXVuc2lnbmVkIGNoYXIgKl9iYXNlOworCisJX0ZJTEVFWFRfU0VUVVAoJmYsICZmZXh0KTsKKwlmLl9maWxlID0gLTE7CisJZi5fZmxhZ3MgPSBfX1NXUiB8IF9fU1NUUiB8IF9fU0FMQzsKKwlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYygxMjgpOworCWlmIChmLl9iZi5fYmFzZSA9PSBOVUxMKQorCQlnb3RvIGVycjsKKwlmLl9iZi5fc2l6ZSA9IGYuX3cgPSAxMjc7CQkvKiBMZWF2ZSByb29tIGZvciB0aGUgTlVMICovCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gX192ZnByaW50ZigmZiwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlpZiAocmV0ID09IC0xKQorCQlnb3RvIGVycjsKKwkqZi5fcCA9ICdcMCc7CisJX2Jhc2UgPSByZWFsbG9jKGYuX2JmLl9iYXNlLCByZXQgKyAxKTsKKwlpZiAoX2Jhc2UgPT0gTlVMTCkKKwkJZ290byBlcnI7CisJKnN0ciA9IChjaGFyICopX2Jhc2U7CisJcmV0dXJuIChyZXQpOworCitlcnI6CisJaWYgKGYuX2JmLl9iYXNlKSB7CisJCWZyZWUoZi5fYmYuX2Jhc2UpOworCQlmLl9iZi5fYmFzZSA9IE5VTEw7CisJfQorCSpzdHIgPSBOVUxMOworCWVycm5vID0gRU5PTUVNOworCXJldHVybiAoLTEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2NscmVyci5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2NscmVyci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMDhjNzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vY2xyZXJyLmMKQEAgLTAsMCArMSw0NCBAQAorLyoJJE9wZW5CU0Q6IGNscmVyci5jLHYgMS45IDIwMDkvMTEvMDkgMDA6MTg6Mjcga3VydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorI3VuZGVmCWNsZWFyZXJyCisKK3ZvaWQKK2NsZWFyZXJyKEZJTEUgKmZwKQoreworCUZMT0NLRklMRShmcCk7CisJX19zY2xlYXJlcnIoZnApOworCUZVTkxPQ0tGSUxFKGZwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9kcHJpbnRmLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZHByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZjdkMzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZHByaW50Zi5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCSRPcGVuQlNEOiBkcHJpbnRmLmMsdiAxLjEgMjAxMy8wMS8zMCAwMDowODoxMyBicmFkIEV4cCAkCSovCisvKgkkRnJlZUJTRDogc3JjL2xpYi9saWJjL3N0ZGlvL2RwcmludGYuYyx2IDEuMiAyMDEyLzExLzE3IDAxOjQ5OjM5IHN2bmV4cCBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGRldmVsb3BlZCBieSBEYXZpZCBDaGlzbmFsbAorICogdW5kZXIgc3BvbnNvcnNoaXAgZnJvbSB0aGUgRnJlZUJTRCBGb3VuZGF0aW9uLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitpbnQKK2RwcmludGYoaW50IGZkLCBjb25zdCBjaGFyICogX19yZXN0cmljdCBmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCByZXQ7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2ZHByaW50ZihmZCwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Zkb3Blbi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Zkb3Blbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNDdmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmRvcGVuLmMKQEAgLTAsMCArMSw4MyBAQAorLyoJJE9wZW5CU0Q6IGZkb3Blbi5jLHYgMS42IDIwMDgvMDQvMjEgMTI6Mjg6MzUgb3R0byBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworRklMRSAqCitmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlKQoreworCUZJTEUgKmZwOworCWludCBmbGFncywgb2ZsYWdzLCBmZGZsYWdzLCB0bXA7CisKKwkvKiBfZmlsZSBpcyBvbmx5IGEgc2hvcnQgKi8KKwlpZiAoZmQgPiBTSFJUX01BWCkgeworCQllcnJubyA9IEVNRklMRTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlpZiAoKGZsYWdzID0gX19zZmxhZ3MobW9kZSwgJm9mbGFncykpID09IDApCisJCXJldHVybiAoTlVMTCk7CisKKwkvKiBNYWtlIHN1cmUgdGhlIG1vZGUgdGhlIHVzZXIgd2FudHMgaXMgYSBzdWJzZXQgb2YgdGhlIGFjdHVhbCBtb2RlLiAqLworCWlmICgoZmRmbGFncyA9IGZjbnRsKGZkLCBGX0dFVEZMLCAwKSkgPCAwKQorCQlyZXR1cm4gKE5VTEwpOworCXRtcCA9IGZkZmxhZ3MgJiBPX0FDQ01PREU7CisJaWYgKHRtcCAhPSBPX1JEV1IgJiYgKHRtcCAhPSAob2ZsYWdzICYgT19BQ0NNT0RFKSkpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJaWYgKChmcCA9IF9fc2ZwKCkpID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJZnAtPl9mbGFncyA9IGZsYWdzOworCS8qCisJICogSWYgb3BlbmVkIGZvciBhcHBlbmRpbmcsIGJ1dCB1bmRlcmx5aW5nIGRlc2NyaXB0b3IgZG9lcyBub3QgaGF2ZQorCSAqIE9fQVBQRU5EIGJpdCBzZXQsIGFzc2VydCBfX1NBUFAgc28gdGhhdCBfX3N3cml0ZSgpIHdpbGwgbHNlZWsgdG8KKwkgKiBlbmQgYmVmb3JlIGVhY2ggd3JpdGUuCisJICovCisJaWYgKChvZmxhZ3MgJiBPX0FQUEVORCkgJiYgIShmZGZsYWdzICYgT19BUFBFTkQpKQorCQlmcC0+X2ZsYWdzIHw9IF9fU0FQUDsKKwlmcC0+X2ZpbGUgPSBmZDsKKwlmcC0+X2Nvb2tpZSA9IGZwOworCWZwLT5fcmVhZCA9IF9fc3JlYWQ7CisJZnAtPl93cml0ZSA9IF9fc3dyaXRlOworCWZwLT5fc2VlayA9IF9fc3NlZWs7CisJZnAtPl9jbG9zZSA9IF9fc2Nsb3NlOworCXJldHVybiAoZnApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Zlb2YuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZW9mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAzNmJhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZW9mLmMKQEAgLTAsMCArMSw1MSBAQAorLyoJJE9wZW5CU0Q6IGZlb2YuYyx2IDEuOCAyMDA5LzExLzA5IDAwOjE4OjI3IGt1cnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIEEgc3Vicm91dGluZSB2ZXJzaW9uIG9mIHRoZSBtYWNybyBmZW9mLgorICovCisjdW5kZWYgZmVvZgorCitpbnQKK2Zlb2YoRklMRSAqZnApCit7CisJaW50CXJldDsKKworCUZMT0NLRklMRShmcCk7CisJcmV0ID0gX19zZmVvZihmcCk7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZXJyb3IuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZXJyb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGI5YzhiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZlcnJvci5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCSRPcGVuQlNEOiBmZXJyb3IuYyx2IDEuOCAyMDA5LzExLzA5IDAwOjE4OjI3IGt1cnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIEEgc3Vicm91dGluZSB2ZXJzaW9uIG9mIHRoZSBtYWNybyBmZXJyb3IuCisgKi8KKyN1bmRlZiBmZXJyb3IKKworaW50CitmZXJyb3IoRklMRSAqZnApCit7CisJaW50ICAgICByZXQ7CisKKwlGTE9DS0ZJTEUoZnApOworCXJldCA9IF9fc2ZlcnJvcihmcCk7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZmx1c2guYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZmx1c2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTMwZjEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZmbHVzaC5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCSRPcGVuQlNEOiBmZmx1c2guYyx2IDEuOCAyMDA5LzExLzA5IDAwOjE4OjI3IGt1cnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKiBGbHVzaCBhIHNpbmdsZSBmaWxlLCBvciAoaWYgZnAgaXMgTlVMTCkgYWxsIGZpbGVzLiAgKi8KK2ludAorZmZsdXNoKEZJTEUgKmZwKQoreworCWludAlyOworCisJaWYgKGZwID09IE5VTEwpCisJCXJldHVybiAoX2Z3YWxrKF9fc2ZsdXNoX2xvY2tlZCkpOworCUZMT0NLRklMRShmcCk7CisJaWYgKChmcC0+X2ZsYWdzICYgKF9fU1dSIHwgX19TUlcpKSA9PSAwKSB7CisJCWVycm5vID0gRUJBREY7CisJCXIgPSBFT0Y7CisJfSBlbHNlCisJCXIgPSBfX3NmbHVzaChmcCk7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAocik7Cit9CisKK2ludAorX19zZmx1c2goRklMRSAqZnApCit7CisJdW5zaWduZWQgY2hhciAqcDsKKwlpbnQgbiwgdDsKKworCXQgPSBmcC0+X2ZsYWdzOworCWlmICgodCAmIF9fU1dSKSA9PSAwKQorCQlyZXR1cm4gKDApOworCisJaWYgKChwID0gZnAtPl9iZi5fYmFzZSkgPT0gTlVMTCkKKwkJcmV0dXJuICgwKTsKKworCW4gPSBmcC0+X3AgLSBwOwkJLyogd3JpdGUgdGhpcyBtdWNoICovCisKKwkvKgorCSAqIFNldCB0aGVzZSBpbW1lZGlhdGVseSB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIGxvbmdqbXAgYW5kIHRvIGFsbG93CisJICogZXhjaGFuZ2UgYnVmZmVyaW5nICh2aWEgc2V0dmJ1ZikgaW4gdXNlciB3cml0ZSBmdW5jdGlvbi4KKwkgKi8KKwlmcC0+X3AgPSBwOworCWZwLT5fdyA9IHQgJiAoX19TTEJGfF9fU05CRikgPyAwIDogZnAtPl9iZi5fc2l6ZTsKKworCWZvciAoOyBuID4gMDsgbiAtPSB0LCBwICs9IHQpIHsKKwkJdCA9ICgqZnAtPl93cml0ZSkoZnAtPl9jb29raWUsIChjaGFyICopcCwgbik7CisJCWlmICh0IDw9IDApIHsKKwkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCQkJcmV0dXJuIChFT0YpOworCQl9CisJfQorCXJldHVybiAoMCk7Cit9CisKK2ludAorX19zZmx1c2hfbG9ja2VkKEZJTEUgKmZwKQoreworCWludAlyOworCisJRkxPQ0tGSUxFKGZwKTsKKwlyID0gX19zZmx1c2goZnApOworCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKHIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRjLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmdldGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWQ3ZGRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRjLmMKQEAgLTAsMCArMSw0MCBAQAorLyoJJE9wZW5CU0Q6IGZnZXRjLmMsdiAxLjggMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQKK2ZnZXRjKEZJTEUgKmZwKQoreworCXJldHVybiAoZ2V0YyhmcCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRsbi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRsbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYzA4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmdldGxuLmMKQEAgLTAsMCArMSwxNTQgQEAKKy8qCSRPcGVuQlNEOiBmZ2V0bG4uYyx2IDEuMTIgMjAxMy8xMS8xMiAwNzowNDowNiBkZXJhYWR0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBFeHBhbmQgdGhlIGxpbmUgYnVmZmVyLiAgUmV0dXJuIC0xIG9uIGVycm9yLgorI2lmZGVmIG5vdGRlZgorICogVGhlIGBuZXcgc2l6ZScgZG9lcyBub3QgYWNjb3VudCBmb3IgYSB0ZXJtaW5hdGluZyAnXDAnLAorICogc28gd2UgYWRkIDEgaGVyZS4KKyNlbmRpZgorICovCitzdGF0aWMgaW50CitfX3NsYmV4cGFuZChGSUxFICpmcCwgc2l6ZV90IG5ld3NpemUpCit7CisJdm9pZCAqcDsKKworI2lmZGVmIG5vdGRlZgorCSsrbmV3c2l6ZTsKKyNlbmRpZgorCWlmIChmcC0+X2xiLl9zaXplID49IG5ld3NpemUpCisJCXJldHVybiAoMCk7CisJaWYgKChwID0gcmVhbGxvYyhmcC0+X2xiLl9iYXNlLCBuZXdzaXplKSkgPT0gTlVMTCkKKwkJcmV0dXJuICgtMSk7CisJZnAtPl9sYi5fYmFzZSA9IHA7CisJZnAtPl9sYi5fc2l6ZSA9IG5ld3NpemU7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIEdldCBhbiBpbnB1dCBsaW5lLiAgVGhlIHJldHVybmVkIHBvaW50ZXIgb2Z0ZW4gKGJ1dCBub3QgYWx3YXlzKQorICogcG9pbnRzIGludG8gYSBzdGRpbyBidWZmZXIuICBGZ2V0bGluZSBkb2VzIG5vdCBhbHRlciB0aGUgdGV4dCBvZgorICogdGhlIHJldHVybmVkIGxpbmUgKHdoaWNoIGlzIHRodXMgbm90IGEgQyBzdHJpbmcgYmVjYXVzZSBpdCB3aWxsCisgKiBub3QgbmVjZXNzYXJpbHkgZW5kIHdpdGggJ1wwJyksIGJ1dCBkb2VzIGFsbG93IGNhbGxlcnMgdG8gbW9kaWZ5CisgKiBpdCBpZiB0aGV5IHdpc2guICBUaHVzLCB3ZSBzZXQgX19TTU9EIGluIGNhc2UgdGhlIGNhbGxlciBkb2VzLgorICovCitjaGFyICoKK2ZnZXRsbihGSUxFICpmcCwgc2l6ZV90ICpsZW5wKQoreworCXVuc2lnbmVkIGNoYXIgKnA7CisJY2hhciAqcmV0OworCXNpemVfdCBsZW47CisJc2l6ZV90IG9mZjsKKworCUZMT0NLRklMRShmcCk7CisJX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOworCisJLyogbWFrZSBzdXJlIHRoZXJlIGlzIGlucHV0ICovCisJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBsb29rIGZvciBhIG5ld2xpbmUgaW4gdGhlIGlucHV0ICovCisJaWYgKChwID0gbWVtY2hyKCh2b2lkICopZnAtPl9wLCAnXG4nLCBmcC0+X3IpKSAhPSBOVUxMKSB7CisJCS8qCisJCSAqIEZvdW5kIG9uZS4gIEZsYWcgYnVmZmVyIGFzIG1vZGlmaWVkIHRvIGtlZXAgZnNlZWsgZnJvbQorCQkgKiBgb3B0aW1pc2luZycgYSBiYWNrd2FyZCBzZWVrLCBpbiBjYXNlIHRoZSB1c2VyIHN0b21wcyBvbgorCQkgKiB0aGUgdGV4dC4KKwkJICovCisJCXArKzsJCS8qIGFkdmFuY2Ugb3ZlciBpdCAqLworCQlyZXQgPSAoY2hhciAqKWZwLT5fcDsKKwkJKmxlbnAgPSBsZW4gPSBwIC0gZnAtPl9wOworCQlmcC0+X2ZsYWdzIHw9IF9fU01PRDsKKwkJZnAtPl9yIC09IGxlbjsKKwkJZnAtPl9wID0gcDsKKwkJRlVOTE9DS0ZJTEUoZnApOworCQlyZXR1cm4gKHJldCk7CisJfQorCisJLyoKKwkgKiBXZSBoYXZlIHRvIGNvcHkgdGhlIGN1cnJlbnQgYnVmZmVyZWQgZGF0YSB0byB0aGUgbGluZSBidWZmZXIuCisJICogQXMgYSBib251cywgdGhvdWdoLCB3ZSBjYW4gbGVhdmUgb2ZmIHRoZSBfX1NNT0QuCisJICoKKwkgKiBPUFRJTUlTVElDIGlzIGxlbmd0aCB0aGF0IHdlIChvcHRpbWlzdGljYWxseSkgZXhwZWN0IHdpbGwKKwkgKiBhY2NvbW1vZGF0ZSB0aGUgYHJlc3QnIG9mIHRoZSBzdHJpbmcsIG9uIGVhY2ggdHJpcCB0aHJvdWdoIHRoZQorCSAqIGxvb3AgYmVsb3cuCisJICovCisjZGVmaW5lIE9QVElNSVNUSUMgODAKKworCWZvciAobGVuID0gZnAtPl9yLCBvZmYgPSAwOzsgbGVuICs9IGZwLT5fcikgeworCQlzaXplX3QgZGlmZjsKKworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhlcmUgaXMgcm9vbSBmb3IgbW9yZSBieXRlcy4gIENvcHkgZGF0YSBmcm9tCisJCSAqIGZpbGUgYnVmZmVyIHRvIGxpbmUgYnVmZmVyLCByZWZpbGwgZmlsZSBhbmQgbG9vayBmb3IKKwkJICogbmV3bGluZS4gIFRoZSBsb29wIHN0b3BzIG9ubHkgd2hlbiB3ZSBmaW5kIGEgbmV3bGluZS4KKwkJICovCisJCWlmIChfX3NsYmV4cGFuZChmcCwgbGVuICsgT1BUSU1JU1RJQykpCisJCQlnb3RvIGVycm9yOworCQkodm9pZCltZW1jcHkoKHZvaWQgKikoZnAtPl9sYi5fYmFzZSArIG9mZiksICh2b2lkICopZnAtPl9wLAorCQkgICAgbGVuIC0gb2ZmKTsKKwkJb2ZmID0gbGVuOworCQlpZiAoX19zcmVmaWxsKGZwKSkKKwkJCWJyZWFrOwkvKiBFT0Ygb3IgZXJyb3I6IHJldHVybiBwYXJ0aWFsIGxpbmUgKi8KKwkJaWYgKChwID0gbWVtY2hyKCh2b2lkICopZnAtPl9wLCAnXG4nLCBmcC0+X3IpKSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJLyogZ290IGl0OiBmaW5pc2ggdXAgdGhlIGxpbmUgKGxpa2UgY29kZSBhYm92ZSkgKi8KKwkJcCsrOworCQlkaWZmID0gcCAtIGZwLT5fcDsKKwkJbGVuICs9IGRpZmY7CisJCWlmIChfX3NsYmV4cGFuZChmcCwgbGVuKSkKKwkJCWdvdG8gZXJyb3I7CisJCSh2b2lkKW1lbWNweSgodm9pZCAqKShmcC0+X2xiLl9iYXNlICsgb2ZmKSwgKHZvaWQgKilmcC0+X3AsCisJCSAgICBkaWZmKTsKKwkJZnAtPl9yIC09IGRpZmY7CisJCWZwLT5fcCA9IHA7CisJCWJyZWFrOworCX0KKwkqbGVucCA9IGxlbjsKKwlyZXQgPSAoY2hhciAqKWZwLT5fbGIuX2Jhc2U7CisjaWZkZWYgbm90ZGVmCisJcmV0W2xlbl0gPSAnXDAnOworI2VuZGlmCisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAocmV0KTsKKworZXJyb3I6CisJKmxlbnAgPSAwOwkJLyogPz8/ICovCisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAoTlVMTCk7CQkvKiA/Pz8gKi8KK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0cG9zLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmdldHBvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MTg4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmdldHBvcy5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCSRPcGVuQlNEOiBmZ2V0cG9zLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyoKKyAqIGZnZXRwb3M6IGxpa2UgZnRlbGxvLgorICovCitpbnQKK2ZnZXRwb3MoRklMRSAqZnAsIGZwb3NfdCAqcG9zKQoreworCXJldHVybigoKnBvcyA9IGZ0ZWxsbyhmcCkpID09IChmcG9zX3QpLTEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRzLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmdldHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmE4NzcwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRzLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCSRPcGVuQlNEOiBmZ2V0cy5jLHYgMS4xNCAyMDA5LzExLzA5IDAwOjE4OjI3IGt1cnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogUmVhZCBhdCBtb3N0IG4tMSBjaGFyYWN0ZXJzIGZyb20gdGhlIGdpdmVuIGZpbGUuCisgKiBTdG9wIHdoZW4gYSBuZXdsaW5lIGhhcyBiZWVuIHJlYWQsIG9yIHRoZSBjb3VudCBydW5zIG91dC4KKyAqIFJldHVybiBmaXJzdCBhcmd1bWVudCwgb3IgTlVMTCBpZiBubyBjaGFyYWN0ZXJzIHdlcmUgcmVhZC4KKyAqIERvIG5vdCByZXR1cm4gTlVMTCBpZiBuID09IDEuCisgKi8KK2NoYXIgKgorZmdldHMoY2hhciAqYnVmLCBpbnQgbiwgRklMRSAqZnApCit7CisJc2l6ZV90IGxlbjsKKwljaGFyICpzOworCXVuc2lnbmVkIGNoYXIgKnAsICp0OworCisJaWYgKG4gPD0gMCkgewkJLyogc2FuaXR5IGNoZWNrICovCisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCUZMT0NLRklMRShmcCk7CisJX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOworCXMgPSBidWY7CisJbi0tOwkJCS8qIGxlYXZlIHNwYWNlIGZvciBOVUwgKi8KKwl3aGlsZSAobiAhPSAwKSB7CisJCS8qCisJCSAqIElmIHRoZSBidWZmZXIgaXMgZW1wdHksIHJlZmlsbCBpdC4KKwkJICovCisJCWlmIChmcC0+X3IgPD0gMCkgeworCQkJaWYgKF9fc3JlZmlsbChmcCkpIHsKKwkJCQkvKiBFT0YvZXJyb3I6IHN0b3Agd2l0aCBwYXJ0aWFsIG9yIG5vIGxpbmUgKi8KKwkJCQlpZiAocyA9PSBidWYpIHsKKwkJCQkJRlVOTE9DS0ZJTEUoZnApOworCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlsZW4gPSBmcC0+X3I7CisJCXAgPSBmcC0+X3A7CisKKwkJLyoKKwkJICogU2NhbiB0aHJvdWdoIGF0IG1vc3QgbiBieXRlcyBvZiB0aGUgY3VycmVudCBidWZmZXIsCisJCSAqIGxvb2tpbmcgZm9yICdcbicuICBJZiBmb3VuZCwgY29weSB1cCB0byBhbmQgaW5jbHVkaW5nCisJCSAqIG5ld2xpbmUsIGFuZCBzdG9wLiAgT3RoZXJ3aXNlLCBjb3B5IGVudGlyZSBjaHVuaworCQkgKiBhbmQgbG9vcC4KKwkJICovCisJCWlmIChsZW4gPiBuKQorCQkJbGVuID0gbjsKKwkJdCA9IG1lbWNocigodm9pZCAqKXAsICdcbicsIGxlbik7CisJCWlmICh0ICE9IE5VTEwpIHsKKwkJCWxlbiA9ICsrdCAtIHA7CisJCQlmcC0+X3IgLT0gbGVuOworCQkJZnAtPl9wID0gdDsKKwkJCSh2b2lkKW1lbWNweSgodm9pZCAqKXMsICh2b2lkICopcCwgbGVuKTsKKwkJCXNbbGVuXSA9ICdcMCc7CisJCQlGVU5MT0NLRklMRShmcCk7CisJCQlyZXR1cm4gKGJ1Zik7CisJCX0KKwkJZnAtPl9yIC09IGxlbjsKKwkJZnAtPl9wICs9IGxlbjsKKwkJKHZvaWQpbWVtY3B5KCh2b2lkICopcywgKHZvaWQgKilwLCBsZW4pOworCQlzICs9IGxlbjsKKwkJbiAtPSBsZW47CisJfQorCSpzID0gJ1wwJzsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChidWYpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXR3Yy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXR3Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNmZmYWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmdldHdjLmMKQEAgLTAsMCArMSw5MCBAQAorLyoJJE9wZW5CU0Q6IGZnZXR3Yy5jLHYgMS40IDIwMDkvMTEvMDkgMDA6MTg6Mjcga3VydCBFeHAgJAkqLworLyogJE5ldEJTRDogZmdldHdjLmMsdiAxLjMgMjAwMy8wMy8wNyAwNzoxMTozNiB0c2hpb3phayBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykyMDAxIENpdHJ1cyBQcm9qZWN0LAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkQ2l0cnVzJAorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCit3aW50X3QKK19fZmdldHdjX3VubG9jayhGSUxFICpmcCkKK3sKKwlzdHJ1Y3Qgd2NoYXJfaW9fZGF0YSAqd2NpbzsKKwltYnN0YXRlX3QgKnN0OworCXdjaGFyX3Qgd2M7CisJc2l6ZV90IHNpemU7CisKKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAxKTsKKwl3Y2lvID0gV0NJT19HRVQoZnApOworCWlmICh3Y2lvID09IDApIHsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiBXRU9GOworCX0KKworCS8qIGlmIHRoZXJlJ3JlIHVuZ2V0d2MnZWQgd2NoYXJzLCB1c2UgdGhlbSAqLworCWlmICh3Y2lvLT53Y2lvX3VuZ2V0d2NfaW5idWYpIHsKKwkJd2MgPSB3Y2lvLT53Y2lvX3VuZ2V0d2NfYnVmWy0td2Npby0+d2Npb191bmdldHdjX2luYnVmXTsKKworCQlyZXR1cm4gd2M7CisJfQorCisJc3QgPSAmd2Npby0+d2Npb19tYnN0YXRlX2luOworCisJZG8geworCQljaGFyIGM7CisJCWludCBjaCA9IF9fc2dldGMoZnApOworCisJCWlmIChjaCA9PSBFT0YpIHsKKwkJCXJldHVybiBXRU9GOworCQl9CisKKwkJYyA9IGNoOworCQlzaXplID0gbWJydG93Yygmd2MsICZjLCAxLCBzdCk7CisJCWlmIChzaXplID09IChzaXplX3QpLTEpIHsKKwkJCWVycm5vID0gRUlMU0VROworCQkJcmV0dXJuIFdFT0Y7CisJCX0KKwl9IHdoaWxlIChzaXplID09IChzaXplX3QpLTIpOworCisJcmV0dXJuIHdjOworfQorCit3aW50X3QKK2ZnZXR3YyhGSUxFICpmcCkKK3sKKwl3aW50X3QgcjsKKworCUZMT0NLRklMRShmcCk7CisJciA9IF9fZmdldHdjX3VubG9jayhmcCk7CisJRlVOTE9DS0ZJTEUoZnApOworCisJcmV0dXJuIChyKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0d3MuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0d3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGNkMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXR3cy5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCSRPcGVuQlNEOiBmZ2V0d3MuYyx2IDEuNiAyMDA5LzExLzA5IDAwOjE4OjI3IGt1cnQgRXhwICQJKi8KKy8qICROZXRCU0Q6IGZnZXR3cy5jLHYgMS4xIDIwMDMvMDMvMDcgMDc6MTE6MzcgdHNoaW96YWsgRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgVGltIEouIFJvYmJpbnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIE9yaWdpbmFsIHZlcnNpb24gSUQ6CisgKiBGcmVlQlNEOiBzcmMvbGliL2xpYmMvc3RkaW8vZmdldHdzLmMsdiAxLjQgMjAwMi8wOS8yMCAxMzoyNTo0MCB0anIgRXhwCisgKgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCit3Y2hhcl90ICoKK2ZnZXR3cyh3Y2hhcl90ICogX19yZXN0cmljdCB3cywgaW50IG4sIEZJTEUgKiBfX3Jlc3RyaWN0IGZwKQoreworCXdjaGFyX3QgKndzcDsKKwl3aW50X3Qgd2M7CisKKwlGTE9DS0ZJTEUoZnApOworCV9TRVRfT1JJRU5UQVRJT04oZnAsIDEpOworCisJaWYgKG4gPD0gMCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwl3c3AgPSB3czsKKwl3aGlsZSAobi0tID4gMSkgeworCQlpZiAoKHdjID0gX19mZ2V0d2NfdW5sb2NrKGZwKSkgPT0gV0VPRiAmJiBlcnJubyA9PSBFSUxTRVEpIHsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJaWYgKHdjID09IFdFT0YpIHsKKwkJCWlmICh3c3AgPT0gd3MpIHsKKwkJCQkvKiBFT0YvZXJyb3IsIG5vIGNoYXJhY3RlcnMgcmVhZCB5ZXQuICovCisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCSp3c3ArKyA9ICh3Y2hhcl90KXdjOworCQlpZiAod2MgPT0gTCdcbicpIHsKKwkJCWJyZWFrOworCQl9CisJfQorCisJKndzcCsrID0gTCdcMCc7CisJRlVOTE9DS0ZJTEUoZnApOworCisJcmV0dXJuICh3cyk7CisKK2Vycm9yOgorCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZpbGVuby5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZpbGVuby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NjI4ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmlsZW5vLmMKQEAgLTAsMCArMSw1MSBAQAorLyoJJE9wZW5CU0Q6IGZpbGVuby5jLHYgMS44IDIwMDkvMTEvMDkgMDA6MTg6Mjcga3VydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIGZpbGVuby4KKyAqLworI3VuZGVmIGZpbGVubworCitpbnQKK2ZpbGVubyhGSUxFICpmcCkKK3sKKwlpbnQgICAgIHJldDsKKworCUZMT0NLRklMRShmcCk7CisJcmV0ID0gX19zZmlsZW5vKGZwKTsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZpbmRmcC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZpbmRmcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YzdkYzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmluZGZwLmMKQEAgLTAsMCArMSwxODEgQEAKKy8qCSRPcGVuQlNEOiBmaW5kZnAuYyx2IDEuMTUgMjAxMy8xMi8xNyAxNjozMzoyNyBkZXJhYWR0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKyNpbmNsdWRlICJnbHVlLmgiCisjaW5jbHVkZSAicHJpdmF0ZS90aHJlYWRfcHJpdmF0ZS5oIgorCisjZGVmaW5lIEFMSUdOQllURVMgKHNpemVvZih1aW50cHRyX3QpIC0gMSkKKyNkZWZpbmUgQUxJR04ocCkgKCgodWludHB0cl90KShwKSArIEFMSUdOQllURVMpICZ+IEFMSUdOQllURVMpCisKK2ludAlfX3NkaWRpbml0OworCisjZGVmaW5lCU5EWU5BTUlDIDEwCQkvKiBhZGQgdGVuIG1vcmUgd2hlbmV2ZXIgbmVjZXNzYXJ5ICovCisKKyNkZWZpbmUJc3RkKGZsYWdzLCBmaWxlKSBcCisJezAsMCwwLGZsYWdzLGZpbGUsezAsMH0sMCxfX3NGK2ZpbGUsX19zY2xvc2UsX19zcmVhZCxfX3NzZWVrLF9fc3dyaXRlLCBcCisJIHsodW5zaWduZWQgY2hhciAqKShfX3NGZXh0K2ZpbGUpLCAwfSxOVUxMLDAsezAsMCwwfSx7MH0sezAsMH0sMCwwfQorLyoJIHAgciB3IGZsYWdzIGZpbGUgX2JmIHogIGNvb2tpZSAgICAgIGNsb3NlICAgIHJlYWQgICAgc2VlayAgICB3cml0ZQorCSBleHQgKi8KKworCQkJCS8qIHRoZSB1c3VhbCAtIChzdGRpbiArIHN0ZG91dCArIHN0ZGVycikgKi8KK3N0YXRpYyBGSUxFIHVzdWFsW0ZPUEVOX01BWCAtIDNdOworc3RhdGljIHN0cnVjdCBfX3NmaWxlZXh0IHVzdWFsZXh0W0ZPUEVOX01BWCAtIDNdOworc3RhdGljIHN0cnVjdCBnbHVlIHVnbHVlID0geyAwLCBGT1BFTl9NQVggLSAzLCB1c3VhbCB9Oworc3RhdGljIHN0cnVjdCBnbHVlICpsYXN0Z2x1ZSA9ICZ1Z2x1ZTsKK19USFJFQURfUFJJVkFURV9NVVRFWChfX3NmcF9tdXRleCk7CisKK3N0YXRpYyBzdHJ1Y3QgX19zZmlsZWV4dCBfX3NGZXh0WzNdOworRklMRSBfX3NGWzNdID0geworCXN0ZChfX1NSRCwgU1RESU5fRklMRU5PKSwJCS8qIHN0ZGluICovCisJc3RkKF9fU1dSLCBTVERPVVRfRklMRU5PKSwJCS8qIHN0ZG91dCAqLworCXN0ZChfX1NXUnxfX1NOQkYsIFNUREVSUl9GSUxFTk8pCS8qIHN0ZGVyciAqLworfTsKK3N0cnVjdCBnbHVlIF9fc2dsdWUgPSB7ICZ1Z2x1ZSwgMywgX19zRiB9OworCitzdGF0aWMgc3RydWN0IGdsdWUgKgorbW9yZWdsdWUoaW50IG4pCit7CisJc3RydWN0IGdsdWUgKmc7CisJRklMRSAqcDsKKwlzdHJ1Y3QgX19zZmlsZWV4dCAqcGV4dDsKKwlzdGF0aWMgRklMRSBlbXB0eTsKKwljaGFyICpkYXRhOworCisJZGF0YSA9IG1hbGxvYyhzaXplb2YoKmcpICsgQUxJR05CWVRFUyArIG4gKiBzaXplb2YoRklMRSkKKwkgICAgKyBuICogc2l6ZW9mKHN0cnVjdCBfX3NmaWxlZXh0KSk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwlnID0gKHN0cnVjdCBnbHVlICopZGF0YTsKKwlwID0gKEZJTEUgKilBTElHTihkYXRhICsgc2l6ZW9mKCpnKSk7CisJcGV4dCA9IChzdHJ1Y3QgX19zZmlsZWV4dCAqKQorCSAgICAoQUxJR04oZGF0YSArIHNpemVvZigqZykpICsgbiAqIHNpemVvZihGSUxFKSk7CisJZy0+bmV4dCA9IE5VTEw7CisJZy0+bmlvYnMgPSBuOworCWctPmlvYnMgPSBwOworCXdoaWxlICgtLW4gPj0gMCkgeworCQkqcCA9IGVtcHR5OworCQlfRklMRUVYVF9TRVRVUChwLCBwZXh0KTsKKwkJcCsrOworCQlwZXh0Kys7CisJfQorCXJldHVybiAoZyk7Cit9CisKKy8qCisgKiBGaW5kIGEgZnJlZSBGSUxFIGZvciBmb3BlbiBldCBhbC4KKyAqLworRklMRSAqCitfX3NmcCh2b2lkKQoreworCUZJTEUgKmZwOworCWludCBuOworCXN0cnVjdCBnbHVlICpnOworCisJaWYgKCFfX3NkaWRpbml0KQorCQlfX3Npbml0KCk7CisKKwlfVEhSRUFEX1BSSVZBVEVfTVVURVhfTE9DSyhfX3NmcF9tdXRleCk7CisJZm9yIChnID0gJl9fc2dsdWU7IGcgIT0gTlVMTDsgZyA9IGctPm5leHQpIHsKKwkJZm9yIChmcCA9IGctPmlvYnMsIG4gPSBnLT5uaW9iczsgLS1uID49IDA7IGZwKyspCisJCQlpZiAoZnAtPl9mbGFncyA9PSAwKQorCQkJCWdvdG8gZm91bmQ7CisJfQorCisJLyogcmVsZWFzZSBsb2NrIHdoaWxlIG1hbGxvY2luZyAqLworCV9USFJFQURfUFJJVkFURV9NVVRFWF9VTkxPQ0soX19zZnBfbXV0ZXgpOworCWlmICgoZyA9IG1vcmVnbHVlKE5EWU5BTUlDKSkgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwlfVEhSRUFEX1BSSVZBVEVfTVVURVhfTE9DSyhfX3NmcF9tdXRleCk7CisJbGFzdGdsdWUtPm5leHQgPSBnOworCWxhc3RnbHVlID0gZzsKKwlmcCA9IGctPmlvYnM7Citmb3VuZDoKKwlmcC0+X2ZsYWdzID0gMTsJCS8qIHJlc2VydmUgdGhpcyBzbG90OyBjYWxsZXIgc2V0cyByZWFsIGZsYWdzICovCisJX1RIUkVBRF9QUklWQVRFX01VVEVYX1VOTE9DSyhfX3NmcF9tdXRleCk7CisJZnAtPl9wID0gTlVMTDsJCS8qIG5vIGN1cnJlbnQgcG9pbnRlciAqLworCWZwLT5fdyA9IDA7CQkvKiBub3RoaW5nIHRvIHJlYWQgb3Igd3JpdGUgKi8KKwlmcC0+X3IgPSAwOworCWZwLT5fYmYuX2Jhc2UgPSBOVUxMOwkvKiBubyBidWZmZXIgKi8KKwlmcC0+X2JmLl9zaXplID0gMDsKKwlmcC0+X2xiZnNpemUgPSAwOwkvKiBub3QgbGluZSBidWZmZXJlZCAqLworCWZwLT5fZmlsZSA9IC0xOwkJLyogbm8gZmlsZSAqLworLyoJZnAtPl9jb29raWUgPSA8YW55PjsgKi8JLyogY2FsbGVyIHNldHMgY29va2llLCBfcmVhZC9fd3JpdGUgZXRjICovCisJZnAtPl9sYi5fYmFzZSA9IE5VTEw7CS8qIG5vIGxpbmUgYnVmZmVyICovCisJZnAtPl9sYi5fc2l6ZSA9IDA7CisJX0ZJTEVFWFRfSU5JVChmcCk7CisJcmV0dXJuIChmcCk7Cit9CisKKy8qCisgKiBleGl0KCkgYW5kIGFib3J0KCkgY2FsbCBfY2xlYW51cCgpIHRocm91Z2ggdGhlIGNhbGxiYWNrIHJlZ2lzdGVyZWQKKyAqIHdpdGggX19hdGV4aXRfcmVnaXN0ZXJfY2xlYW51cCgpLCBzZXQgd2hlbmV2ZXIgd2Ugb3BlbiBvciBidWZmZXIgYQorICogZmlsZS4gVGhpcyBjaGljYW5lcnkgaXMgZG9uZSBzbyB0aGF0IHByb2dyYW1zIHRoYXQgZG8gbm90IHVzZSBzdGRpbworICogbmVlZCBub3QgbGluayBpdCBhbGwgaW4uCisgKgorICogVGhlIG5hbWUgYF9jbGVhbnVwJyBpcywgYWxhcywgZmFpcmx5IHdlbGwga25vd24gb3V0c2lkZSBzdGRpby4KKyAqLwordm9pZAorX2NsZWFudXAodm9pZCkKK3sKKwkvKiAodm9pZCkgX2Z3YWxrKGZjbG9zZSk7ICovCisJKHZvaWQpIF9md2FsayhfX3NmbHVzaCk7CQkvKiBgY2hlYXRpbmcnICovCit9CisKKy8qCisgKiBfX3Npbml0KCkgaXMgY2FsbGVkIHdoZW5ldmVyIHN0ZGlvJ3MgaW50ZXJuYWwgdmFyaWFibGVzIG11c3QgYmUgc2V0IHVwLgorICovCit2b2lkCitfX3Npbml0KHZvaWQpCit7CisJX1RIUkVBRF9QUklWQVRFX01VVEVYKF9fc2luaXRfbXV0ZXgpOworCWludCBpOworCisJX1RIUkVBRF9QUklWQVRFX01VVEVYX0xPQ0soX19zaW5pdF9tdXRleCk7CisJaWYgKF9fc2RpZGluaXQpCisJCWdvdG8gb3V0OwkvKiBiYWlsIG91dCBpZiBjYWxsZXIgbG9zdCB0aGUgcmFjZSAqLworCWZvciAoaSA9IDA7IGkgPCBGT1BFTl9NQVggLSAzOyBpKyspIHsKKwkJX0ZJTEVFWFRfU0VUVVAodXN1YWwraSwgdXN1YWxleHQraSk7CisJfQorCS8qIG1ha2Ugc3VyZSB3ZSBjbGVhbiB1cCBvbiBleGl0ICovCisJX19hdGV4aXRfcmVnaXN0ZXJfY2xlYW51cChfY2xlYW51cCk7IC8qIGNvbnNlcnZhdGl2ZSAqLworCV9fc2RpZGluaXQgPSAxOworb3V0OgorCV9USFJFQURfUFJJVkFURV9NVVRFWF9VTkxPQ0soX19zaW5pdF9tdXRleCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmxvYXRpby5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Zsb2F0aW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzY5MDMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Zsb2F0aW8uaApAQCAtMCwwICsxLDU4IEBACisvKgkkT3BlbkJTRDogZmxvYXRpby5oLHYgMS40IDIwMDgvMDkvMDcgMjA6MzY6MDggbWFydHluYXMgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogRmxvYXRpbmcgcG9pbnQgc2NhbmYvcHJpbnRmIChpbnB1dC9vdXRwdXQpIGRlZmluaXRpb25zLgorICovCisKKy8qIDExLWJpdCBleHBvbmVudCAoVkFYIEcgZmxvYXRpbmcgcG9pbnQpIGlzIDMwOCBkZWNpbWFsIGRpZ2l0cyAqLworI2RlZmluZQlNQVhFWFAJCTMwOAorLyogMTI4IGJpdCBmcmFjdGlvbiB0YWtlcyB1cCAzOSBkZWNpbWFsIGRpZ2l0czsgbWF4IHJlYXNvbmFibGUgcHJlY2lzaW9uICovCisjZGVmaW5lCU1BWEZSQUNUCTM5CisKKy8qCisgKiBNQVhFWFBESUcgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGRlY2ltYWwgZGlnaXRzIG5lZWRlZCB0byBzdG9yZSBhCisgKiBmbG9hdGluZyBwb2ludCBleHBvbmVudCBpbiB0aGUgbGFyZ2VzdCBzdXBwb3J0ZWQgZm9ybWF0LiAgSXQgc2hvdWxkCisgKiBiZSBjZWlsKGxvZzEwKExEQkxfTUFYXzEwX0VYUCkpIG9yLCBpZiBoZXhhZGVjaW1hbCBmbG9hdGluZyBwb2ludAorICogY29udmVyc2lvbnMgYXJlIHN1cHBvcnRlZCwgY2VpbChsb2cxMChMREJMX01BWF9FWFApKS4gIEJ1dCBzaW5jZSBpdAorICogaXMgcHJlc2VudGx5IG5ldmVyIGdyZWF0ZXIgdGhhbiA1IGluIHByYWN0aWNlLCB3ZSBmdWRnZSBpdC4KKyAqLworI2RlZmluZQlNQVhFWFBESUcJNgorI2lmIExEQkxfTUFYX0VYUCA+IDk5OTk5OQorI2Vycm9yICJmbG9hdGluZyBwb2ludCBidWZmZXJzIHRvbyBzbWFsbCIKKyNlbmRpZgorCitjaGFyICpfX2hkdG9hKGRvdWJsZSwgY29uc3QgY2hhciAqLCBpbnQsIGludCAqLCBpbnQgKiwgY2hhciAqKik7CitjaGFyICpfX2hsZHRvYShsb25nIGRvdWJsZSwgY29uc3QgY2hhciAqLCBpbnQsIGludCAqLCBpbnQgKiwgY2hhciAqKik7CitjaGFyICpfX2xkdG9hKGxvbmcgZG91YmxlICosIGludCwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKiopOwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZwcmludGYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM5MTE0MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHJpbnRmLmMKQEAgLTAsMCArMSw0OCBAQAorLyoJJE9wZW5CU0Q6IGZwcmludGYuYyx2IDEuNyAyMDExLzA1LzMwIDE4OjQ4OjMzIG1hcnR5bmFzIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisvKiBQUklOVEZMSUtFMiAqLworaW50CitmcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2ZnByaW50ZihmcCwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1cmdlLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1cmdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjViZDc0OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHVyZ2UuYwpAQCAtMCwwICsxLDYxIEBACisvKgkkT3BlbkJTRDogZnB1cmdlLmMsdiAxLjkgMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIGZwdXJnZTogbGlrZSBmZmx1c2gsIGJ1dCB3aXRob3V0IHdyaXRpbmcgYW55dGhpbmc6IGxlYXZlIHRoZQorICogZ2l2ZW4gRklMRSdzIGJ1ZmZlciBlbXB0eS4KKyAqLworaW50CitmcHVyZ2UoRklMRSAqZnApCit7CisJRkxPQ0tGSUxFKGZwKTsKKwlpZiAoIWZwLT5fZmxhZ3MpIHsKKwkJRlVOTE9DS0ZJTEUoZnApOworCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4oRU9GKTsKKwl9CisKKwlpZiAoSEFTVUIoZnApKQorCQlGUkVFVUIoZnApOworCVdDSU9fRlJFRShmcCk7CisJZnAtPl9wID0gZnAtPl9iZi5fYmFzZTsKKwlmcC0+X3IgPSAwOworCWZwLT5fdyA9IGZwLT5fZmxhZ3MgJiAoX19TTEJGfF9fU05CRikgPyAwIDogZnAtPl9iZi5fc2l6ZTsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHV0Yy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThlMzk2MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHV0Yy5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qCSRPcGVuQlNEOiBmcHV0Yy5jLHYgMS4xMCAyMDA5LzExLzA5IDAwOjE4OjI3IGt1cnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworaW50CitmcHV0YyhpbnQgYywgRklMRSAqZnApCit7CisJcmV0dXJuIChwdXRjKGMsIGZwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1dHMuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHV0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhODU1NmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1dHMuYwpAQCAtMCwwICsxLDU4IEBACisvKgkkT3BlbkJTRDogZnB1dHMuYyx2IDEuMTAgMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisjaW5jbHVkZSAiZnZ3cml0ZS5oIgorCisvKgorICogV3JpdGUgdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgZ2l2ZW4gZmlsZS4KKyAqLworaW50CitmcHV0cyhjb25zdCBjaGFyICpzLCBGSUxFICpmcCkKK3sKKwlzdHJ1Y3QgX19zdWlvIHVpbzsKKwlzdHJ1Y3QgX19zaW92IGlvdjsKKwlpbnQgcmV0OworCisJaW92Lmlvdl9iYXNlID0gKHZvaWQgKilzOworCWlvdi5pb3ZfbGVuID0gdWlvLnVpb19yZXNpZCA9IHN0cmxlbihzKTsKKwl1aW8udWlvX2lvdiA9ICZpb3Y7CisJdWlvLnVpb19pb3ZjbnQgPSAxOworCUZMT0NLRklMRShmcCk7CisJX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOworCXJldCA9IF9fc2Z2d3JpdGUoZnAsICZ1aW8pOworCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1dHdjLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1dHdjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRiNzBkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHV0d2MuYwpAQCAtMCwwICsxLDg4IEBACisvKgkkT3BlbkJTRDogZnB1dHdjLmMsdiAxLjQgMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkCSovCisvKiAkTmV0QlNEOiBmcHV0d2MuYyx2IDEuMyAyMDAzLzAzLzA3IDA3OjExOjM3IHRzaGlvemFrIEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKTIwMDEgQ2l0cnVzIFByb2plY3QsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRDaXRydXMkCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisjaW5jbHVkZSAiZnZ3cml0ZS5oIgorCit3aW50X3QKK19fZnB1dHdjX3VubG9jayh3Y2hhcl90IHdjLCBGSUxFICpmcCkKK3sKKwlzdHJ1Y3Qgd2NoYXJfaW9fZGF0YSAqd2NpbzsKKwltYnN0YXRlX3QgKnN0OworCXNpemVfdCBzaXplOworCWNoYXIgYnVmW01CX0xFTl9NQVhdOworCXN0cnVjdCBfX3N1aW8gdWlvOworCXN0cnVjdCBfX3Npb3YgaW92OworCisJLyogTElOVEVEIHdlIGRvbid0IHBsYXkgd2l0aCBidWYgKi8KKwlpb3YuaW92X2Jhc2UgPSAodm9pZCAqKWJ1ZjsKKwl1aW8udWlvX2lvdiA9ICZpb3Y7CisJdWlvLnVpb19pb3ZjbnQgPSAxOworCisJX1NFVF9PUklFTlRBVElPTihmcCwgMSk7CisJd2NpbyA9IFdDSU9fR0VUKGZwKTsKKwlpZiAod2NpbyA9PSAwKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gV0VPRjsKKwl9CisKKwl3Y2lvLT53Y2lvX3VuZ2V0d2NfaW5idWYgPSAwOworCXN0ID0gJndjaW8tPndjaW9fbWJzdGF0ZV9vdXQ7CisKKwlzaXplID0gd2NydG9tYihidWYsIHdjLCBzdCk7CisJaWYgKHNpemUgPT0gKHNpemVfdCktMSkgeworCQllcnJubyA9IEVJTFNFUTsKKwkJcmV0dXJuIFdFT0Y7CisJfQorCisJdWlvLnVpb19yZXNpZCA9IGlvdi5pb3ZfbGVuID0gc2l6ZTsKKwlpZiAoX19zZnZ3cml0ZShmcCwgJnVpbykpIHsKKwkJcmV0dXJuIFdFT0Y7CisJfQorCisJcmV0dXJuICh3aW50X3Qpd2M7Cit9CisKK3dpbnRfdAorZnB1dHdjKHdjaGFyX3Qgd2MsIEZJTEUgKmZwKQoreworCXdpbnRfdCByOworCisJRkxPQ0tGSUxFKGZwKTsKKwlyID0gX19mcHV0d2NfdW5sb2NrKHdjLCBmcCk7CisJRlVOTE9DS0ZJTEUoZnApOworCisJcmV0dXJuIChyKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHV0d3MuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHV0d3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDg4NDZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXR3cy5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCSRPcGVuQlNEOiBmcHV0d3MuYyx2IDEuNyAyMDEzLzExLzEyIDA3OjA0OjM1IGRlcmFhZHQgRXhwICQJKi8KKy8qICROZXRCU0Q6IGZwdXR3cy5jLHYgMS4xIDIwMDMvMDMvMDcgMDc6MTE6MzcgdHNoaW96YWsgRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgVGltIEouIFJvYmJpbnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIE9yaWdpbmFsIHZlcnNpb24gSUQ6CisgKiBGcmVlQlNEOiBzcmMvbGliL2xpYmMvc3RkaW8vZnB1dHdzLmMsdiAxLjQgMjAwMi8wOS8yMCAxMzoyNTo0MCB0anIgRXhwCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisjaW5jbHVkZSAiZnZ3cml0ZS5oIgorCitpbnQKK2ZwdXR3cyh3cywgZnApCisJY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3Qgd3M7CisJRklMRSAqIF9fcmVzdHJpY3QgZnA7Cit7CisJRkxPQ0tGSUxFKGZwKTsKKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAxKTsKKworCXdoaWxlICgqd3MgIT0gJ1wwJykgeworCQlpZiAoX19mcHV0d2NfdW5sb2NrKCp3cysrLCBmcCkgPT0gV0VPRikgeworCQkJRlVOTE9DS0ZJTEUoZnApOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwl9CisKKwlGVU5MT0NLRklMRShmcCk7CisKKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZyZWFkLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnJlYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTU5MmY2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZyZWFkLmMKQEAgLTAsMCArMSw4OCBAQAorLyoJJE9wZW5CU0Q6IGZyZWFkLmMsdiAxLjEyIDIwMTQvMDUvMDEgMTY6NDA6MzYgZGVyYWFkdCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKyNkZWZpbmUgTVVMX05PX09WRVJGTE9XCSgxVUwgPDwgKHNpemVvZihzaXplX3QpICogNCkpCisKK3NpemVfdAorZnJlYWQodm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGNvdW50LCBGSUxFICpmcCkKK3sKKwlzaXplX3QgcmVzaWQ7CisJY2hhciAqcDsKKwlpbnQgcjsKKwlzaXplX3QgdG90YWw7CisKKwkvKgorCSAqIEV4dGVuc2lvbjogIENhdGNoIGludGVnZXIgb3ZlcmZsb3cKKwkgKi8KKwlpZiAoKHNpemUgPj0gTVVMX05PX09WRVJGTE9XIHx8IGNvdW50ID49IE1VTF9OT19PVkVSRkxPVykgJiYKKwkgICAgc2l6ZSA+IDAgJiYgU0laRV9NQVggLyBzaXplIDwgY291bnQpIHsKKwkJZXJybm8gPSBFT1ZFUkZMT1c7CisJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCQlyZXR1cm4gKDApOworCX0KKworCS8qCisJICogQU5TSSBhbmQgU1VTdjIgcmVxdWlyZSBhIHJldHVybiB2YWx1ZSBvZiAwIGlmIHNpemUgb3IgY291bnQgYXJlIDAuCisJICovCisJaWYgKChyZXNpZCA9IGNvdW50ICogc2l6ZSkgPT0gMCkKKwkJcmV0dXJuICgwKTsKKwlGTE9DS0ZJTEUoZnApOworCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKKwlpZiAoZnAtPl9yIDwgMCkKKwkJZnAtPl9yID0gMDsKKwl0b3RhbCA9IHJlc2lkOworCXAgPSBidWY7CisJd2hpbGUgKHJlc2lkID4gKHIgPSBmcC0+X3IpKSB7CisJCSh2b2lkKW1lbWNweSgodm9pZCAqKXAsICh2b2lkICopZnAtPl9wLCAoc2l6ZV90KXIpOworCQlmcC0+X3AgKz0gcjsKKwkJLyogZnAtPl9yID0gMCAuLi4gZG9uZSBpbiBfX3NyZWZpbGwgKi8KKwkJcCArPSByOworCQlyZXNpZCAtPSByOworCQlpZiAoX19zcmVmaWxsKGZwKSkgeworCQkJLyogbm8gbW9yZSBpbnB1dDogcmV0dXJuIHBhcnRpYWwgcmVzdWx0ICovCisJCQlGVU5MT0NLRklMRShmcCk7CisJCQlyZXR1cm4gKCh0b3RhbCAtIHJlc2lkKSAvIHNpemUpOworCQl9CisJfQorCSh2b2lkKW1lbWNweSgodm9pZCAqKXAsICh2b2lkICopZnAtPl9wLCByZXNpZCk7CisJZnAtPl9yIC09IHJlc2lkOworCWZwLT5fcCArPSByZXNpZDsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChjb3VudCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnJlb3Blbi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZyZW9wZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTU4ZmIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZyZW9wZW4uYwpAQCAtMCwwICsxLDE3MSBAQAorLyoJJE9wZW5CU0Q6IGZyZW9wZW4uYyx2IDEuMTMgMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qIAorICogUmUtZGlyZWN0IGFuIGV4aXN0aW5nLCBvcGVuIChwcm9iYWJseSkgZmlsZSB0byBzb21lIG90aGVyIGZpbGUuIAorICogQU5TSSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgb3JpZ2luYWwgZmlsZSBnZXRzIGNsb3NlZCBpZiBhdAorICogYWxsIHBvc3NpYmxlLCBubyBtYXR0ZXIgd2hhdC4KKyAqLworRklMRSAqCitmcmVvcGVuKGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKm1vZGUsIEZJTEUgKmZwKQoreworCWludCBmOworCWludCBmbGFncywgaXNvcGVuLCBvZmxhZ3MsIHN2ZXJybm8sIHdhbnRmZDsKKworCWlmICgoZmxhZ3MgPSBfX3NmbGFncyhtb2RlLCAmb2ZsYWdzKSkgPT0gMCkgeworCQkodm9pZCkgZmNsb3NlKGZwKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlpZiAoIV9fc2RpZGluaXQpCisJCV9fc2luaXQoKTsKKworCUZMT0NLRklMRShmcCk7CisKKwkvKgorCSAqIFRoZXJlIGFyZSBhY3R1YWxseSBwcm9ncmFtcyB0aGF0IGRlcGVuZCBvbiBiZWluZyBhYmxlIHRvICJmcmVvcGVuIgorCSAqIGRlc2NyaXB0b3JzIHRoYXQgd2VyZW4ndCBvcmlnaW5hbGx5IG9wZW4uICBLZWVwIHRoaXMgZnJvbSBicmVha2luZy4KKwkgKiBSZW1lbWJlciB3aGV0aGVyIHRoZSBzdHJlYW0gd2FzIG9wZW4gdG8gYmVnaW4gd2l0aCwgYW5kIHdoaWNoIGZpbGUKKwkgKiBkZXNjcmlwdG9yIChpZiBhbnkpIHdhcyBhc3NvY2lhdGVkIHdpdGggaXQuICBJZiBpdCB3YXMgYXR0YWNoZWQgdG8KKwkgKiBhIGRlc2NyaXB0b3IsIGRlZmVyIGNsb3NpbmcgaXQ7IGZyZW9wZW4oIi9kZXYvc3RkaW4iLCAiciIsIHN0ZGluKQorCSAqIHNob3VsZCB3b3JrLiAgVGhpcyBpcyB1bm5lY2Vzc2FyeSBpZiBpdCB3YXMgbm90IGEgVW5peCBmaWxlLgorCSAqLworCWlmIChmcC0+X2ZsYWdzID09IDApIHsKKwkJZnAtPl9mbGFncyA9IF9fU0VPRjsJLyogaG9sZCBvbiB0byBpdCAqLworCQlpc29wZW4gPSAwOworCQl3YW50ZmQgPSAtMTsKKwl9IGVsc2UgeworCQkvKiBmbHVzaCB0aGUgc3RyZWFtOyBBTlNJIGRvZXNuJ3QgcmVxdWlyZSB0aGlzLiAqLworCQlpZiAoZnAtPl9mbGFncyAmIF9fU1dSKQorCQkJKHZvaWQpIF9fc2ZsdXNoKGZwKTsKKwkJLyogaWYgY2xvc2UgaXMgTlVMTCwgY2xvc2luZyBpcyBhIG5vLW9wLCBoZW5jZSBwb2ludGxlc3MgKi8KKwkJaXNvcGVuID0gZnAtPl9jbG9zZSAhPSBOVUxMOworCQlpZiAoKHdhbnRmZCA9IGZwLT5fZmlsZSkgPCAwICYmIGlzb3BlbikgeworCQkJKHZvaWQpICgqZnAtPl9jbG9zZSkoZnAtPl9jb29raWUpOworCQkJaXNvcGVuID0gMDsKKwkJfQorCX0KKworCS8qIEdldCBhIG5ldyBkZXNjcmlwdG9yIHRvIHJlZmVyIHRvIHRoZSBuZXcgZmlsZS4gKi8KKwlmID0gb3BlbihmaWxlLCBvZmxhZ3MsIERFRkZJTEVNT0RFKTsKKwlpZiAoZiA8IDAgJiYgaXNvcGVuKSB7CisJCS8qIElmIG91dCBvZiBmZCdzIGNsb3NlIHRoZSBvbGQgb25lIGFuZCB0cnkgYWdhaW4uICovCisJCWlmIChlcnJubyA9PSBFTkZJTEUgfHwgZXJybm8gPT0gRU1GSUxFKSB7CisJCQkodm9pZCkgKCpmcC0+X2Nsb3NlKShmcC0+X2Nvb2tpZSk7CisJCQlpc29wZW4gPSAwOworCQkJZiA9IG9wZW4oZmlsZSwgb2ZsYWdzLCBERUZGSUxFTU9ERSk7CisJCX0KKwl9CisJc3ZlcnJubyA9IGVycm5vOworCisJLyoKKwkgKiBGaW5pc2ggY2xvc2luZyBmcC4gIEV2ZW4gaWYgdGhlIG9wZW4gc3VjY2VlZGVkIGFib3ZlLCB3ZSBjYW5ub3QKKwkgKiBrZWVwIGZwLT5fYmFzZTogaXQgbWF5IGJlIHRoZSB3cm9uZyBzaXplLiAgVGhpcyBsb3NlcyB0aGUgZWZmZWN0CisJICogb2YgYW55IHNldGJ1ZmZlciBjYWxscywgYnV0IHN0ZGlvIGhhcyBhbHdheXMgZG9uZSB0aGlzIGJlZm9yZS4KKwkgKi8KKwlpZiAoaXNvcGVuICYmIGYgIT0gd2FudGZkKQorCQkodm9pZCkgKCpmcC0+X2Nsb3NlKShmcC0+X2Nvb2tpZSk7CisJaWYgKGZwLT5fZmxhZ3MgJiBfX1NNQkYpCisJCWZyZWUoKGNoYXIgKilmcC0+X2JmLl9iYXNlKTsKKwlmcC0+X3cgPSAwOworCWZwLT5fciA9IDA7CisJZnAtPl9wID0gTlVMTDsKKwlmcC0+X2JmLl9iYXNlID0gTlVMTDsKKwlmcC0+X2JmLl9zaXplID0gMDsKKwlmcC0+X2xiZnNpemUgPSAwOworCWlmIChIQVNVQihmcCkpCisJCUZSRUVVQihmcCk7CisJX1VCKGZwKS5fc2l6ZSA9IDA7CisJV0NJT19GUkVFKGZwKTsKKwlpZiAoSEFTTEIoZnApKQorCQlGUkVFTEIoZnApOworCWZwLT5fbGIuX3NpemUgPSAwOworCisJaWYgKGYgPCAwKSB7CQkJLyogZGlkIG5vdCBnZXQgaXQgYWZ0ZXIgYWxsICovCisJCWZwLT5fZmxhZ3MgPSAwOwkJLyogc2V0IGl0IGZyZWUgKi8KKwkJRlVOTE9DS0ZJTEUoZnApOworCQllcnJubyA9IHN2ZXJybm87CS8qIHJlc3RvcmUgaW4gY2FzZSBfY2xvc2UgY2xvYmJlcmVkICovCisJCXJldHVybiAoTlVMTCk7CisJfQorCisJLyoKKwkgKiBJZiByZW9wZW5pbmcgc29tZXRoaW5nIHRoYXQgd2FzIG9wZW4gYmVmb3JlIG9uIGEgcmVhbCBmaWxlLCB0cnkKKwkgKiB0byBtYWludGFpbiB0aGUgZGVzY3JpcHRvci4gIFZhcmlvdXMgQyBsaWJyYXJ5IHJvdXRpbmVzIChwZXJyb3IpCisJICogYXNzdW1lIHN0ZGVyciBpcyBhbHdheXMgZmQgU1RERVJSX0ZJTEVOTywgZXZlbiBpZiBiZWluZyBmcmVvcGVuJ2QuCisJICovCisJaWYgKHdhbnRmZCA+PSAwICYmIGYgIT0gd2FudGZkKSB7CisJCWlmIChkdXAyKGYsIHdhbnRmZCkgPj0gMCkgeworCQkJKHZvaWQpIGNsb3NlKGYpOworCQkJZiA9IHdhbnRmZDsKKwkJfQorCX0KKworCS8qIF9maWxlIGlzIG9ubHkgYSBzaG9ydCAqLworCWlmIChmID4gU0hSVF9NQVgpIHsKKwkJZnAtPl9mbGFncyA9IDA7CQkvKiBzZXQgaXQgZnJlZSAqLworCQlGVU5MT0NLRklMRShmcCk7CisJCWVycm5vID0gRU1GSUxFOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCWZwLT5fZmxhZ3MgPSBmbGFnczsKKwlmcC0+X2ZpbGUgPSBmOworCWZwLT5fY29va2llID0gZnA7CisJZnAtPl9yZWFkID0gX19zcmVhZDsKKwlmcC0+X3dyaXRlID0gX19zd3JpdGU7CisJZnAtPl9zZWVrID0gX19zc2VlazsKKwlmcC0+X2Nsb3NlID0gX19zY2xvc2U7CisKKwkvKgorCSAqIFdoZW4gb3BlbmluZyBpbiBhcHBlbmQgbW9kZSwgZXZlbiB0aG91Z2ggd2UgdXNlIE9fQVBQRU5ELAorCSAqIHdlIG5lZWQgdG8gc2VlayB0byB0aGUgZW5kIHNvIHRoYXQgZnRlbGwoKSBnZXRzIHRoZSByaWdodAorCSAqIGFuc3dlci4gIElmIHRoZSB1c2VyIHRoZW4gYWx0ZXJzIHRoZSBzZWVrIHBvaW50ZXIsIG9yCisJICogdGhlIGZpbGUgZXh0ZW5kcywgdGhpcyB3aWxsIGZhaWwsIGJ1dCB0aGVyZSBpcyBub3QgbXVjaAorCSAqIHdlIGNhbiBkbyBhYm91dCB0aGlzLiAgKFdlIGNvdWxkIHNldCBfX1NBUFAgYW5kIGNoZWNrIGluCisJICogZnNlZWsgYW5kIGZ0ZWxsLikKKwkgKi8KKwlpZiAob2ZsYWdzICYgT19BUFBFTkQpCisJCSh2b2lkKSBfX3NzZWVrKCh2b2lkICopZnAsIChmcG9zX3QpMCwgU0VFS19FTkQpOworCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKGZwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mc2NhbmYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mc2NhbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmQxMGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZzY2FuZi5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCSRPcGVuQlNEOiBmc2NhbmYuYyx2IDEuMTAgMjAxMS8wNS8zMCAxODo0ODozMyBtYXJ0eW5hcyBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworLyogU0NBTkZMSUtFMiAqLworaW50Citmc2NhbmYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCByZXQ7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHZmc2NhbmYoZnAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZzZWVrLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnNlZWsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGQ0MGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZzZWVrLmMKQEAgLTAsMCArMSwyNTEgQEAKKy8qCSRPcGVuQlNEOiBmc2Vlay5jLHYgMS4xMSAyMDEyLzA1LzIxIDIyOjI0OjE5IG1hdHRoZXcgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworI2RlZmluZQlQT1NfRVJSCSgtKGZwb3NfdCkxKQorCisvKgorICogU2VlayB0aGUgZ2l2ZW4gZmlsZSB0byB0aGUgZ2l2ZW4gb2Zmc2V0LgorICogYFdoZW5jZScgbXVzdCBiZSBvbmUgb2YgdGhlIHRocmVlIFNFRUtfKiBtYWNyb3MuCisgKi8KK2ludAorZnNlZWtvKEZJTEUgKmZwLCBvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpCit7CisJZnBvc190ICgqc2Vla2ZuKSh2b2lkICosIGZwb3NfdCwgaW50KTsKKwlmcG9zX3QgdGFyZ2V0LCBjdXJvZmY7CisJc2l6ZV90IG47CisJc3RydWN0IHN0YXQgc3Q7CisJaW50IGhhdmVwb3M7CisKKwkvKiBtYWtlIHN1cmUgc3RkaW8gaXMgc2V0IHVwICovCisJaWYgKCFfX3NkaWRpbml0KQorCQlfX3Npbml0KCk7CisKKwkvKgorCSAqIEhhdmUgdG8gYmUgYWJsZSB0byBzZWVrLgorCSAqLworCWlmICgoc2Vla2ZuID0gZnAtPl9zZWVrKSA9PSBOVUxMKSB7CisJCWVycm5vID0gRVNQSVBFOwkJCS8qIGhpc3RvcmljIHByYWN0aWNlICovCisJCXJldHVybiAoRU9GKTsKKwl9CisKKwkvKgorCSAqIENoYW5nZSBhbnkgU0VFS19DVVIgdG8gU0VFS19TRVQsIGFuZCBjaGVjayBgd2hlbmNlJyBhcmd1bWVudC4KKwkgKiBBZnRlciB0aGlzLCB3aGVuY2UgaXMgZWl0aGVyIFNFRUtfU0VUIG9yIFNFRUtfRU5ELgorCSAqLworCUZMT0NLRklMRShmcCk7CisJc3dpdGNoICh3aGVuY2UpIHsKKworCWNhc2UgU0VFS19DVVI6CisJCS8qCisJCSAqIEluIG9yZGVyIHRvIHNlZWsgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgc3RyZWFtIG9mZnNldCwKKwkJICogd2UgaGF2ZSB0byBmaXJzdCBmaW5kIHRoZSBjdXJyZW50IHN0cmVhbSBvZmZzZXQgYSBsYQorCQkgKiBmdGVsbCAoc2VlIGZ0ZWxsIGZvciBkZXRhaWxzKS4KKwkJICovCisJCV9fc2ZsdXNoKGZwKTsJLyogbWF5IGFkanVzdCBzZWVrIG9mZnNldCBvbiBhcHBlbmQgc3RyZWFtICovCisJCWlmIChmcC0+X2ZsYWdzICYgX19TT0ZGKQorCQkJY3Vyb2ZmID0gZnAtPl9vZmZzZXQ7CisJCWVsc2UgeworCQkJY3Vyb2ZmID0gKCpzZWVrZm4pKGZwLT5fY29va2llLCAoZnBvc190KTAsIFNFRUtfQ1VSKTsKKwkJCWlmIChjdXJvZmYgPT0gKGZwb3NfdCktMSkgeworCQkJCUZVTkxPQ0tGSUxFKGZwKTsKKwkJCQlyZXR1cm4gKEVPRik7CisJCQl9CisJCX0KKwkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NSRCkgeworCQkJY3Vyb2ZmIC09IGZwLT5fcjsKKwkJCWlmIChIQVNVQihmcCkpCisJCQkJY3Vyb2ZmIC09IGZwLT5fdXI7CisJCX0gZWxzZSBpZiAoZnAtPl9mbGFncyAmIF9fU1dSICYmIGZwLT5fcCAhPSBOVUxMKQorCQkJY3Vyb2ZmICs9IGZwLT5fcCAtIGZwLT5fYmYuX2Jhc2U7CisKKwkJb2Zmc2V0ICs9IGN1cm9mZjsKKwkJd2hlbmNlID0gU0VFS19TRVQ7CisJCWhhdmVwb3MgPSAxOworCQlicmVhazsKKworCWNhc2UgU0VFS19TRVQ6CisJY2FzZSBTRUVLX0VORDoKKwkJY3Vyb2ZmID0gMDsJCS8qIFhYWCBqdXN0IHRvIGtlZXAgZ2NjIHF1aWV0ICovCisJCWhhdmVwb3MgPSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUZVTkxPQ0tGSUxFKGZwKTsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoRU9GKTsKKwl9CisKKwkvKgorCSAqIENhbiBvbmx5IG9wdGltaXNlIGlmOgorCSAqCXJlYWRpbmcgKGFuZCBub3QgcmVhZGluZy1hbmQtd3JpdGluZyk7CisJICoJbm90IHVuYnVmZmVyZWQ7IGFuZAorCSAqCXRoaXMgaXMgYSBgcmVndWxhcicgVW5peCBmaWxlIChhbmQgaGVuY2Ugc2Vla2ZuPT1fX3NzZWVrKS4KKwkgKiBXZSBtdXN0IGNoZWNrIF9fTkJGIGZpcnN0LCBiZWNhdXNlIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgX19OQkYKKwkgKiBhbmQgX19TT1BUIGJvdGggc2V0LgorCSAqLworCWlmIChmcC0+X2JmLl9iYXNlID09IE5VTEwpCisJCV9fc21ha2VidWYoZnApOworCWlmIChmcC0+X2ZsYWdzICYgKF9fU1dSIHwgX19TUlcgfCBfX1NOQkYgfCBfX1NOUFQpKQorCQlnb3RvIGR1bWI7CisJaWYgKChmcC0+X2ZsYWdzICYgX19TT1BUKSA9PSAwKSB7CisJCWlmIChzZWVrZm4gIT0gX19zc2VlayB8fAorCQkgICAgZnAtPl9maWxlIDwgMCB8fCBmc3RhdChmcC0+X2ZpbGUsICZzdCkgfHwKKwkJICAgIChzdC5zdF9tb2RlICYgU19JRk1UKSAhPSBTX0lGUkVHKSB7CisJCQlmcC0+X2ZsYWdzIHw9IF9fU05QVDsKKwkJCWdvdG8gZHVtYjsKKwkJfQorCQlmcC0+X2Jsa3NpemUgPSBzdC5zdF9ibGtzaXplOworCQlmcC0+X2ZsYWdzIHw9IF9fU09QVDsKKwl9CisKKwkvKgorCSAqIFdlIGFyZSByZWFkaW5nOyB3ZSBjYW4gdHJ5IHRvIG9wdGltaXNlLgorCSAqIEZpZ3VyZSBvdXQgd2hlcmUgd2UgYXJlIGdvaW5nIGFuZCB3aGVyZSB3ZSBhcmUgbm93LgorCSAqLworCWlmICh3aGVuY2UgPT0gU0VFS19TRVQpCisJCXRhcmdldCA9IG9mZnNldDsKKwllbHNlIHsKKwkJaWYgKGZzdGF0KGZwLT5fZmlsZSwgJnN0KSkKKwkJCWdvdG8gZHVtYjsKKwkJdGFyZ2V0ID0gc3Quc3Rfc2l6ZSArIG9mZnNldDsKKwl9CisKKwlpZiAoIWhhdmVwb3MpIHsKKwkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NPRkYpCisJCQljdXJvZmYgPSBmcC0+X29mZnNldDsKKwkJZWxzZSB7CisJCQljdXJvZmYgPSAoKnNlZWtmbikoZnAtPl9jb29raWUsIChmcG9zX3QpMCwgU0VFS19DVVIpOworCQkJaWYgKGN1cm9mZiA9PSBQT1NfRVJSKQorCQkJCWdvdG8gZHVtYjsKKwkJfQorCQljdXJvZmYgLT0gZnAtPl9yOworCQlpZiAoSEFTVUIoZnApKQorCQkJY3Vyb2ZmIC09IGZwLT5fdXI7CisJfQorCisJLyoKKwkgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGlucHV0IGJ1ZmZlciAocHJldGVuZGluZworCSAqIHRoYXQgYW55IHVuZ2V0YygpIGlucHV0IGhhcyBiZWVuIGRpc2NhcmRlZCkuICBBZGp1c3QgY3VycmVudAorCSAqIG9mZnNldCBiYWNrd2FyZHMgYnkgdGhpcyBjb3VudCBzbyB0aGF0IGl0IHJlcHJlc2VudHMgdGhlCisJICogZmlsZSBvZmZzZXQgZm9yIHRoZSBmaXJzdCBieXRlIGluIHRoZSBjdXJyZW50IGlucHV0IGJ1ZmZlci4KKwkgKi8KKwlpZiAoSEFTVUIoZnApKSB7CisJCWN1cm9mZiArPSBmcC0+X3I7CS8qIGtpbGwgb2ZmIHVuZ2V0YyAqLworCQluID0gZnAtPl91cCAtIGZwLT5fYmYuX2Jhc2U7CisJCWN1cm9mZiAtPSBuOworCQluICs9IGZwLT5fdXI7CisJfSBlbHNlIHsKKwkJbiA9IGZwLT5fcCAtIGZwLT5fYmYuX2Jhc2U7CisJCWN1cm9mZiAtPSBuOworCQluICs9IGZwLT5fcjsKKwl9CisKKwkvKgorCSAqIElmIHRoZSB0YXJnZXQgb2Zmc2V0IGlzIHdpdGhpbiB0aGUgY3VycmVudCBidWZmZXIsCisJICogc2ltcGx5IGFkanVzdCB0aGUgcG9pbnRlcnMsIGNsZWFyIEVPRiwgdW5kbyB1bmdldGMoKSwKKwkgKiBhbmQgcmV0dXJuLiAgKElmIHRoZSBidWZmZXIgd2FzIG1vZGlmaWVkLCB3ZSBoYXZlIHRvCisJICogc2tpcCB0aGlzOyBzZWUgZmdldGxuLmMuKQorCSAqLworCWlmICgoZnAtPl9mbGFncyAmIF9fU01PRCkgPT0gMCAmJgorCSAgICB0YXJnZXQgPj0gY3Vyb2ZmICYmIHRhcmdldCA8IGN1cm9mZiArIG4pIHsKKwkJaW50IG8gPSB0YXJnZXQgLSBjdXJvZmY7CisKKwkJZnAtPl9wID0gZnAtPl9iZi5fYmFzZSArIG87CisJCWZwLT5fciA9IG4gLSBvOworCQlpZiAoSEFTVUIoZnApKQorCQkJRlJFRVVCKGZwKTsKKwkJZnAtPl9mbGFncyAmPSB+X19TRU9GOworCQlGVU5MT0NLRklMRShmcCk7CisJCXJldHVybiAoMCk7CisJfQorCisJLyoKKwkgKiBUaGUgcGxhY2Ugd2Ugd2FudCB0byBnZXQgdG8gaXMgbm90IHdpdGhpbiB0aGUgY3VycmVudCBidWZmZXIsCisJICogYnV0IHdlIGNhbiBzdGlsbCBiZSBraW5kIHRvIHRoZSBrZXJuZWwgY29weW91dCBtZWNoYW5pc20uCisJICogQnkgYWxpZ25pbmcgdGhlIGZpbGUgb2Zmc2V0IHRvIGEgYmxvY2sgYm91bmRhcnksIHdlIGNhbiBsZXQKKwkgKiB0aGUga2VybmVsIHVzZSB0aGUgVk0gaGFyZHdhcmUgdG8gbWFwIHBhZ2VzIGluc3RlYWQgb2YKKwkgKiBjb3B5aW5nIGJ5dGVzIGxhYm9yaW91c2x5LiAgVXNpbmcgYSBibG9jayBib3VuZGFyeSBhbHNvCisJICogZW5zdXJlcyB0aGF0IHdlIG9ubHkgcmVhZCBvbmUgYmxvY2ssIHJhdGhlciB0aGFuIHR3by4KKwkgKi8KKwljdXJvZmYgPSB0YXJnZXQgJiB+KGZwLT5fYmxrc2l6ZSAtIDEpOworCWlmICgoKnNlZWtmbikoZnAtPl9jb29raWUsIGN1cm9mZiwgU0VFS19TRVQpID09IFBPU19FUlIpCisJCWdvdG8gZHVtYjsKKwlmcC0+X3IgPSAwOworIAlmcC0+X3AgPSBmcC0+X2JmLl9iYXNlOworCWlmIChIQVNVQihmcCkpCisJCUZSRUVVQihmcCk7CisJZnAtPl9mbGFncyAmPSB+X19TRU9GOworCW4gPSB0YXJnZXQgLSBjdXJvZmY7CisJaWYgKG4pIHsKKwkJaWYgKF9fc3JlZmlsbChmcCkgfHwgZnAtPl9yIDwgbikKKwkJCWdvdG8gZHVtYjsKKwkJZnAtPl9wICs9IG47CisJCWZwLT5fciAtPSBuOworCX0KKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuICgwKTsKKworCS8qCisJICogV2UgZ2V0IGhlcmUgaWYgd2UgY2Fubm90IG9wdGltaXNlIHRoZSBzZWVrIC4uLiBqdXN0CisJICogZG8gaXQuICBBbGxvdyB0aGUgc2VlayBmdW5jdGlvbiB0byBjaGFuZ2UgZnAtPl9iZi5fYmFzZS4KKwkgKi8KK2R1bWI6CisJaWYgKF9fc2ZsdXNoKGZwKSB8fAorCSAgICAoKnNlZWtmbikoZnAtPl9jb29raWUsIChmcG9zX3Qpb2Zmc2V0LCB3aGVuY2UpID09IFBPU19FUlIpIHsKKwkJRlVOTE9DS0ZJTEUoZnApOworCQlyZXR1cm4gKEVPRik7CisJfQorCS8qIHN1Y2Nlc3M6IGNsZWFyIEVPRiBpbmRpY2F0b3IgYW5kIGRpc2NhcmQgdW5nZXRjKCkgZGF0YSAqLworCWlmIChIQVNVQihmcCkpCisJCUZSRUVVQihmcCk7CisJZnAtPl9wID0gZnAtPl9iZi5fYmFzZTsKKwlmcC0+X3IgPSAwOworCS8qIGZwLT5fdyA9IDA7ICovCS8qIHVubmVjZXNzYXJ5IChJIHRoaW5rLi4uKSAqLworCWZwLT5fZmxhZ3MgJj0gfl9fU0VPRjsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuICgwKTsKK30KKworaW50Citmc2VlayhGSUxFICpmcCwgbG9uZyBvZmZzZXQsIGludCB3aGVuY2UpCit7CisJcmV0dXJuIChmc2Vla28oZnAsIG9mZnNldCwgd2hlbmNlKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnNldHBvcy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZzZXRwb3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjI0ZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZzZXRwb3MuYwpAQCAtMCwwICsxLDQzIEBACisvKgkkT3BlbkJTRDogZnNldHBvcy5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qCisgKiBmc2V0cG9zOiBsaWtlIGZzZWVrby4KKyAqLworaW50Citmc2V0cG9zKEZJTEUgKmlvcCwgY29uc3QgZnBvc190ICpwb3MpCit7CisJcmV0dXJuIChmc2Vla28oaW9wLCAob2ZmX3QpKnBvcywgU0VFS19TRVQpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mdGVsbC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z0ZWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEyMDE2YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mdGVsbC5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCSRPcGVuQlNEOiBmdGVsbC5jLHYgMS4xMCAyMDEyLzA1LzIxIDIyOjI0OjE5IG1hdHRoZXcgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogZnRlbGxvOiByZXR1cm4gY3VycmVudCBvZmZzZXQuCisgKi8KK29mZl90CitmdGVsbG8oRklMRSAqZnApCit7CisJZnBvc190IHBvczsKKworCWlmIChmcC0+X3NlZWsgPT0gTlVMTCkgeworCQllcnJubyA9IEVTUElQRTsJCQkvKiBoaXN0b3JpYyBwcmFjdGljZSAqLworCQlwb3MgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBGaW5kIG9mZnNldCBvZiB1bmRlcmx5aW5nIEkvTyBvYmplY3QsIHRoZW4KKwkgKiBhZGp1c3QgZm9yIGJ1ZmZlcmVkIGJ5dGVzLgorCSAqLworCUZMT0NLRklMRShmcCk7CisJX19zZmx1c2goZnApOwkJLyogbWF5IGFkanVzdCBzZWVrIG9mZnNldCBvbiBhcHBlbmQgc3RyZWFtICovCisJaWYgKGZwLT5fZmxhZ3MgJiBfX1NPRkYpCisJCXBvcyA9IGZwLT5fb2Zmc2V0OworCWVsc2UgeworCQlwb3MgPSAoKmZwLT5fc2VlaykoZnAtPl9jb29raWUsIChmcG9zX3QpMCwgU0VFS19DVVIpOworCQlpZiAocG9zID09IC0xKQorCQkJZ290byBvdXQ7CisJfQorCWlmIChmcC0+X2ZsYWdzICYgX19TUkQpIHsKKwkJLyoKKwkJICogUmVhZGluZy4gIEFueSB1bnJlYWQgY2hhcmFjdGVycyAoaW5jbHVkaW5nCisJCSAqIHRob3NlIGZyb20gdW5nZXRjKSBjYXVzZSB0aGUgcG9zaXRpb24gdG8gYmUKKwkJICogc21hbGxlciB0aGFuIHRoYXQgaW4gdGhlIHVuZGVybHlpbmcgb2JqZWN0LgorCQkgKi8KKwkJcG9zIC09IGZwLT5fcjsKKwkJaWYgKEhBU1VCKGZwKSkKKwkJCXBvcyAtPSBmcC0+X3VyOworCX0gZWxzZSBpZiAoZnAtPl9mbGFncyAmIF9fU1dSICYmIGZwLT5fcCAhPSBOVUxMKSB7CisJCS8qCisJCSAqIFdyaXRpbmcuICBBbnkgYnVmZmVyZWQgY2hhcmFjdGVycyBjYXVzZSB0aGUKKwkJICogcG9zaXRpb24gdG8gYmUgZ3JlYXRlciB0aGFuIHRoYXQgaW4gdGhlCisJCSAqIHVuZGVybHlpbmcgb2JqZWN0LgorCQkgKi8KKwkJcG9zICs9IGZwLT5fcCAtIGZwLT5fYmYuX2Jhc2U7CisJfQorb3V0OglGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChwb3MpOworfQorCitsb25nCitmdGVsbChGSUxFICpmcCkKK3sKKwlvZmZfdCBvZmZzZXQgPSBmdGVsbG8oZnApOworCWlmIChvZmZzZXQgPiBMT05HX01BWCkgeworCQllcnJubyA9IEVPVkVSRkxPVzsKKwkJcmV0dXJuICgtMSk7CisJfQorCXJldHVybiAoKGxvbmcpb2Zmc2V0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mdW5vcGVuLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnVub3Blbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NWVlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnVub3Blbi5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCSRPcGVuQlNEOiBmdW5vcGVuLmMsdiAxLjggMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKK0ZJTEUgKgorZnVub3Blbihjb25zdCB2b2lkICpjb29raWUsIGludCAoKnJlYWRmbikodm9pZCAqLCBjaGFyICosIGludCksCisJaW50ICgqd3JpdGVmbikodm9pZCAqLCBjb25zdCBjaGFyICosIGludCksCisJZnBvc190ICgqc2Vla2ZuKSh2b2lkICosIGZwb3NfdCwgaW50KSwgaW50ICgqY2xvc2Vmbikodm9pZCAqKSkKK3sKKwlGSUxFICpmcDsKKwlpbnQgZmxhZ3M7CisKKwlpZiAocmVhZGZuID09IE5VTEwpIHsKKwkJaWYgKHdyaXRlZm4gPT0gTlVMTCkgewkJLyogaWxsZWdhbCAqLworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9IGVsc2UKKwkJCWZsYWdzID0gX19TV1I7CQkvKiB3cml0ZSBvbmx5ICovCisJfSBlbHNlIHsKKwkJaWYgKHdyaXRlZm4gPT0gTlVMTCkKKwkJCWZsYWdzID0gX19TUkQ7CQkvKiByZWFkIG9ubHkgKi8KKwkJZWxzZQorCQkJZmxhZ3MgPSBfX1NSVzsJCS8qIHJlYWQtd3JpdGUgKi8KKwl9CisJaWYgKChmcCA9IF9fc2ZwKCkpID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJZnAtPl9mbGFncyA9IGZsYWdzOworCWZwLT5fZmlsZSA9IC0xOworCWZwLT5fY29va2llID0gKHZvaWQgKiljb29raWU7CQkvKiBTQUZFOiBjb29raWUgbm90IG1vZGlmaWVkICovCisJZnAtPl9yZWFkID0gcmVhZGZuOworCWZwLT5fd3JpdGUgPSB3cml0ZWZuOworCWZwLT5fc2VlayA9IHNlZWtmbjsKKwlmcC0+X2Nsb3NlID0gY2xvc2VmbjsKKwlyZXR1cm4gKGZwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mdndyaXRlLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnZ3cml0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwODg5OTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnZ3cml0ZS5jCkBAIC0wLDAgKzEsMjA0IEBACisvKgkkT3BlbkJTRDogZnZ3cml0ZS5jLHYgMS4xNyAyMDA5LzExLzA5IDAwOjE4OjI3IGt1cnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorI2luY2x1ZGUgImZ2d3JpdGUuaCIKKworLyoKKyAqIFdyaXRlIHNvbWUgbWVtb3J5IHJlZ2lvbnMuICBSZXR1cm4gemVybyBvbiBzdWNjZXNzLCBFT0Ygb24gZXJyb3IuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGxhcmdlIGFuZCB1bnNpZ2h0bHksIGJ1dCBtb3N0IG9mIHRoZSB1Z2xpbmVzcyBkdWUKKyAqIHRvIHRoZSB0aHJlZSBkaWZmZXJlbnQga2luZHMgb2Ygb3V0cHV0IGJ1ZmZlcmluZyBpcyBoYW5kbGVkIGhlcmUuCisgKi8KK2ludAorX19zZnZ3cml0ZShGSUxFICpmcCwgc3RydWN0IF9fc3VpbyAqdWlvKQoreworCXNpemVfdCBsZW47CisJY2hhciAqcDsKKwlzdHJ1Y3QgX19zaW92ICppb3Y7CisJaW50IHcsIHM7CisJY2hhciAqbmw7CisJaW50IG5sa25vd24sIG5sZGlzdDsKKworCWlmICgobGVuID0gdWlvLT51aW9fcmVzaWQpID09IDApCisJCXJldHVybiAoMCk7CisJLyogbWFrZSBzdXJlIHdlIGNhbiB3cml0ZSAqLworCWlmIChjYW50d3JpdGUoZnApKSB7CisJCWVycm5vID0gRUJBREY7CisJCXJldHVybiAoRU9GKTsKKwl9CisKKyNkZWZpbmUJTUlOKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisjZGVmaW5lCUNPUFkobikJICAodm9pZCltZW1jcHkoKHZvaWQgKilmcC0+X3AsICh2b2lkICopcCwgKHNpemVfdCkobikpCisKKwlpb3YgPSB1aW8tPnVpb19pb3Y7CisJcCA9IGlvdi0+aW92X2Jhc2U7CisJbGVuID0gaW92LT5pb3ZfbGVuOworCWlvdisrOworI2RlZmluZSBHRVRJT1YoZXh0cmFfd29yaykgXAorCXdoaWxlIChsZW4gPT0gMCkgeyBcCisJCWV4dHJhX3dvcms7IFwKKwkJcCA9IGlvdi0+aW92X2Jhc2U7IFwKKwkJbGVuID0gaW92LT5pb3ZfbGVuOyBcCisJCWlvdisrOyBcCisJfQorCWlmIChmcC0+X2ZsYWdzICYgX19TTkJGKSB7CisJCS8qCisJCSAqIFVuYnVmZmVyZWQ6IHdyaXRlIHVwIHRvIEJVRlNJWiBieXRlcyBhdCBhIHRpbWUuCisJCSAqLworCQlkbyB7CisJCQlHRVRJT1YoOyk7CisJCQl3ID0gKCpmcC0+X3dyaXRlKShmcC0+X2Nvb2tpZSwgcCwgTUlOKGxlbiwgQlVGU0laKSk7CisJCQlpZiAodyA8PSAwKQorCQkJCWdvdG8gZXJyOworCQkJcCArPSB3OworCQkJbGVuIC09IHc7CisJCX0gd2hpbGUgKCh1aW8tPnVpb19yZXNpZCAtPSB3KSAhPSAwKTsKKwl9IGVsc2UgaWYgKChmcC0+X2ZsYWdzICYgX19TTEJGKSA9PSAwKSB7CisJCS8qCisJCSAqIEZ1bGx5IGJ1ZmZlcmVkOiBmaWxsIHBhcnRpYWxseSBmdWxsIGJ1ZmZlciwgaWYgYW55LAorCQkgKiBhbmQgdGhlbiBmbHVzaC4gIElmIHRoZXJlIGlzIG5vIHBhcnRpYWwgYnVmZmVyLCB3cml0ZQorCQkgKiBvbmUgX2JmLl9zaXplIGJ5dGUgY2h1bmsgZGlyZWN0bHkgKHdpdGhvdXQgY29weWluZykuCisJCSAqCisJCSAqIFN0cmluZyBvdXRwdXQgaXMgYSBzcGVjaWFsIGNhc2U6IHdyaXRlIGFzIG1hbnkgYnl0ZXMKKwkJICogYXMgZml0LCBidXQgcHJldGVuZCB3ZSB3cm90ZSBldmVyeXRoaW5nLiAgVGhpcyBtYWtlcworCQkgKiBzbnByaW50ZigpIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCwgcmF0aGVyCisJCSAqIHRoYW4gdGhlIG51bWJlciB1c2VkLCBhbmQgYXZvaWRzIGl0cyB3cml0ZSBmdW5jdGlvbgorCQkgKiAoc28gdGhhdCB0aGUgd3JpdGUgZnVuY3Rpb24gY2FuIGJlIGludmFsaWQpLgorCQkgKi8KKwkJZG8geworCQkJR0VUSU9WKDspOworCQkJaWYgKChmcC0+X2ZsYWdzICYgKF9fU0FMQyB8IF9fU1NUUikpID09CisJCQkgICAgKF9fU0FMQyB8IF9fU1NUUikgJiYgZnAtPl93IDwgbGVuKSB7CisJCQkJc2l6ZV90IGJsZW4gPSBmcC0+X3AgLSBmcC0+X2JmLl9iYXNlOworCQkJCXVuc2lnbmVkIGNoYXIgKl9iYXNlOworCQkJCWludCBfc2l6ZTsKKworCQkJCS8qIEFsbG9jYXRlIHNwYWNlIGV4cG9uZW50aWFsbHkuICovCisJCQkJX3NpemUgPSBmcC0+X2JmLl9zaXplOworCQkJCWRvIHsKKwkJCQkJX3NpemUgPSAoX3NpemUgPDwgMSkgKyAxOworCQkJCX0gd2hpbGUgKF9zaXplIDwgYmxlbiArIGxlbik7CisJCQkJX2Jhc2UgPSByZWFsbG9jKGZwLT5fYmYuX2Jhc2UsIF9zaXplICsgMSk7CisJCQkJaWYgKF9iYXNlID09IE5VTEwpCisJCQkJCWdvdG8gZXJyOworCQkJCWZwLT5fdyArPSBfc2l6ZSAtIGZwLT5fYmYuX3NpemU7CisJCQkJZnAtPl9iZi5fYmFzZSA9IF9iYXNlOworCQkJCWZwLT5fYmYuX3NpemUgPSBfc2l6ZTsKKwkJCQlmcC0+X3AgPSBfYmFzZSArIGJsZW47CisJCQl9CisJCQl3ID0gZnAtPl93OworCQkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NTVFIpIHsKKwkJCQlpZiAobGVuIDwgdykKKwkJCQkJdyA9IGxlbjsKKwkJCQlDT1BZKHcpOwkvKiBjb3B5IE1JTihmcC0+X3csbGVuKSwgKi8KKwkJCQlmcC0+X3cgLT0gdzsKKwkJCQlmcC0+X3AgKz0gdzsKKwkJCQl3ID0gbGVuOwkvKiBidXQgcHJldGVuZCBjb3BpZWQgYWxsICovCisJCQl9IGVsc2UgaWYgKGZwLT5fcCA+IGZwLT5fYmYuX2Jhc2UgJiYgbGVuID4gdykgeworCQkJCS8qIGZpbGwgYW5kIGZsdXNoICovCisJCQkJQ09QWSh3KTsKKwkJCQkvKiBmcC0+X3cgLT0gdzsgKi8gLyogdW5uZWVkZWQgKi8KKwkJCQlmcC0+X3AgKz0gdzsKKwkJCQlpZiAoX19zZmx1c2goZnApKQorCQkJCQlnb3RvIGVycjsKKwkJCX0gZWxzZSBpZiAobGVuID49ICh3ID0gZnAtPl9iZi5fc2l6ZSkpIHsKKwkJCQkvKiB3cml0ZSBkaXJlY3RseSAqLworCQkJCXcgPSAoKmZwLT5fd3JpdGUpKGZwLT5fY29va2llLCBwLCB3KTsKKwkJCQlpZiAodyA8PSAwKQorCQkJCQlnb3RvIGVycjsKKwkJCX0gZWxzZSB7CisJCQkJLyogZmlsbCBhbmQgZG9uZSAqLworCQkJCXcgPSBsZW47CisJCQkJQ09QWSh3KTsKKwkJCQlmcC0+X3cgLT0gdzsKKwkJCQlmcC0+X3AgKz0gdzsKKwkJCX0KKwkJCXAgKz0gdzsKKwkJCWxlbiAtPSB3OworCQl9IHdoaWxlICgodWlvLT51aW9fcmVzaWQgLT0gdykgIT0gMCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogTGluZSBidWZmZXJlZDogbGlrZSBmdWxseSBidWZmZXJlZCwgYnV0IHdlCisJCSAqIG11c3QgY2hlY2sgZm9yIG5ld2xpbmVzLiAgQ29tcHV0ZSB0aGUgZGlzdGFuY2UKKwkJICogdG8gdGhlIGZpcnN0IG5ld2xpbmUgKGluY2x1ZGluZyB0aGUgbmV3bGluZSksCisJCSAqIG9yIGBpbmZpbml0eScgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiBwcmV0ZW5kCisJCSAqIHRoYXQgdGhlIGFtb3VudCB0byB3cml0ZSBpcyBNSU4obGVuLG5sZGlzdCkuCisJCSAqLworCQlubGtub3duID0gMDsKKwkJbmxkaXN0ID0gMDsJLyogWFhYIGp1c3QgdG8ga2VlcCBnY2MgaGFwcHkgKi8KKwkJZG8geworCQkJR0VUSU9WKG5sa25vd24gPSAwKTsKKwkJCWlmICghbmxrbm93bikgeworCQkJCW5sID0gbWVtY2hyKCh2b2lkICopcCwgJ1xuJywgbGVuKTsKKwkJCQlubGRpc3QgPSBubCA/IG5sICsgMSAtIHAgOiBsZW4gKyAxOworCQkJCW5sa25vd24gPSAxOworCQkJfQorCQkJcyA9IE1JTihsZW4sIG5sZGlzdCk7CisJCQl3ID0gZnAtPl93ICsgZnAtPl9iZi5fc2l6ZTsKKwkJCWlmIChmcC0+X3AgPiBmcC0+X2JmLl9iYXNlICYmIHMgPiB3KSB7CisJCQkJQ09QWSh3KTsKKwkJCQkvKiBmcC0+X3cgLT0gdzsgKi8KKwkJCQlmcC0+X3AgKz0gdzsKKwkJCQlpZiAoX19zZmx1c2goZnApKQorCQkJCQlnb3RvIGVycjsKKwkJCX0gZWxzZSBpZiAocyA+PSAodyA9IGZwLT5fYmYuX3NpemUpKSB7CisJCQkJdyA9ICgqZnAtPl93cml0ZSkoZnAtPl9jb29raWUsIHAsIHcpOworCQkJCWlmICh3IDw9IDApCisJCQkJIAlnb3RvIGVycjsKKwkJCX0gZWxzZSB7CisJCQkJdyA9IHM7CisJCQkJQ09QWSh3KTsKKwkJCQlmcC0+X3cgLT0gdzsKKwkJCQlmcC0+X3AgKz0gdzsKKwkJCX0KKwkJCWlmICgobmxkaXN0IC09IHcpID09IDApIHsKKwkJCQkvKiBjb3BpZWQgdGhlIG5ld2xpbmU6IGZsdXNoIGFuZCBmb3JnZXQgKi8KKwkJCQlpZiAoX19zZmx1c2goZnApKQorCQkJCQlnb3RvIGVycjsKKwkJCQlubGtub3duID0gMDsKKwkJCX0KKwkJCXAgKz0gdzsKKwkJCWxlbiAtPSB3OworCQl9IHdoaWxlICgodWlvLT51aW9fcmVzaWQgLT0gdykgIT0gMCk7CisJfQorCXJldHVybiAoMCk7CisKK2VycjoKKwlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwlyZXR1cm4gKEVPRik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnZ3cml0ZS5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z2d3JpdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2EzMDliCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z2d3JpdGUuaApAQCAtMCwwICsxLDQ5IEBACisvKgkkT3BlbkJTRDogZnZ3cml0ZS5oLHYgMS42IDIwMTMvMTEvMTIgMDc6MDQ6MzUgZGVyYWFkdCBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBJL08gZGVzY3JpcHRvcnMgZm9yIF9fc2Z2d3JpdGUoKS4KKyAqLworc3RydWN0IF9fc2lvdiB7CisJdm9pZAkqaW92X2Jhc2U7CisJc2l6ZV90CWlvdl9sZW47Cit9Oworc3RydWN0IF9fc3VpbyB7CisJc3RydWN0CV9fc2lvdiAqdWlvX2lvdjsKKwlpbnQJdWlvX2lvdmNudDsKKwlpbnQJdWlvX3Jlc2lkOworfTsKKworZXh0ZXJuIGludCBfX3NmdndyaXRlKEZJTEUgKiwgc3RydWN0IF9fc3VpbyAqKTsKK3dpbnRfdCBfX2ZwdXR3Y191bmxvY2sod2NoYXJfdCB3YywgRklMRSAqZnApOwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z3YWxrLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZndhbGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWM2NjI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z3YWxrLmMKQEAgLTAsMCArMSw1MyBAQAorLyoJJE9wZW5CU0Q6IGZ3YWxrLmMsdiAxLjEwIDIwMDkvMTEvMDkgMDA6MTg6Mjcga3VydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisjaW5jbHVkZSAiZ2x1ZS5oIgorCitpbnQKK19md2FsayhpbnQgKCpmdW5jdGlvbikoRklMRSAqKSkKK3sKKwlGSUxFICpmcDsKKwlpbnQgbiwgcmV0OworCXN0cnVjdCBnbHVlICpnOworCisJcmV0ID0gMDsKKwlmb3IgKGcgPSAmX19zZ2x1ZTsgZyAhPSBOVUxMOyBnID0gZy0+bmV4dCkKKwkJZm9yIChmcCA9IGctPmlvYnMsIG4gPSBnLT5uaW9iczsgLS1uID49IDA7IGZwKyspIHsKKwkJCWlmICgoZnAtPl9mbGFncyAhPSAwKSAmJiAoKGZwLT5fZmxhZ3MgJiBfX1NJR04pID09IDApKQorCQkJCXJldCB8PSAoKmZ1bmN0aW9uKShmcCk7CisJCX0KKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZndpZGUuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9md2lkZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzY2RkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZndpZGUuYwpAQCAtMCwwICsxLDY0IEBACisvKgkkT3BlbkJTRDogZndpZGUuYyx2IDEuNCAyMDA5LzExLzA5IDAwOjE4OjI3IGt1cnQgRXhwICQJKi8KKy8qICROZXRCU0Q6IGZ3aWRlLmMsdiAxLjIgMjAwMy8wMS8xOCAxMToyOTo1NCB0aG9ycGVqIEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKTIwMDEgQ2l0cnVzIFByb2plY3QsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRDaXRydXMkCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCitpbnQKK2Z3aWRlKEZJTEUgKmZwLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3Qgd2NoYXJfaW9fZGF0YSAqd2NpbzsKKworCS8qCisJICogdGhpcyBpbXBsZW1lbnRhdGlvbiB1c2Ugb25seSAtMSwgMCwgMQorCSAqIGZvciBtb2RlIHZhbHVlLgorCSAqICh3ZSBkb24ndCBuZWVkIHRvIGRvIHRoaXMsIGJ1dAorCSAqICB0aGlzIGNhbiBtYWtlIHRoaW5ncyBzaW1wbGVyLikKKwkgKi8KKwlpZiAobW9kZSA+IDApCisJCW1vZGUgPSAxOworCWVsc2UgaWYgKG1vZGUgPCAwKQorCQltb2RlID0gLTE7CisKKwlGTE9DS0ZJTEUoZnApOworCXdjaW8gPSBXQ0lPX0dFVChmcCk7CisJaWYgKCF3Y2lvKQorCQlyZXR1cm4gMDsgLyogWFhYICovCisKKwlpZiAod2Npby0+d2Npb19tb2RlID09IDAgJiYgbW9kZSAhPSAwKQorCQl3Y2lvLT53Y2lvX21vZGUgPSBtb2RlOworCWVsc2UKKwkJbW9kZSA9IHdjaW8tPndjaW9fbW9kZTsKKwlGVU5MT0NLRklMRShmcCk7CisKKwlyZXR1cm4gbW9kZTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9md3ByaW50Zi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z3cHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ3NGU4YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9md3ByaW50Zi5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCSRPcGVuQlNEOiBmd3ByaW50Zi5jLHYgMS4zIDIwMTEvMDQvMjggMTc6Mzg6NDYgc3RzcCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCitpbnQKK2Z3cHJpbnRmKEZJTEUgKiBfX3Jlc3RyaWN0IGZwLCBjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2ZndwcmludGYoZnAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z3cml0ZS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z3cml0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYTE3YmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZndyaXRlLmMKQEAgLTAsMCArMSw4OCBAQAorLyoJJE9wZW5CU0Q6IGZ3cml0ZS5jLHYgMS4xMSAyMDE0LzA1LzAxIDE2OjQwOjM2IGRlcmFhZHQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorI2luY2x1ZGUgImZ2d3JpdGUuaCIKKworI2RlZmluZSBNVUxfTk9fT1ZFUkZMT1cJKDFVTCA8PCAoc2l6ZW9mKHNpemVfdCkgKiA0KSkKKworLyoKKyAqIFdyaXRlIGBjb3VudCcgb2JqZWN0cyAoZWFjaCBzaXplIGBzaXplJykgZnJvbSBtZW1vcnkgdG8gdGhlIGdpdmVuIGZpbGUuCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiB3aG9sZSBvYmplY3RzIHdyaXR0ZW4uCisgKi8KK3NpemVfdAorZndyaXRlKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCBjb3VudCwgRklMRSAqZnApCit7CisJc2l6ZV90IG47CisJc3RydWN0IF9fc3VpbyB1aW87CisJc3RydWN0IF9fc2lvdiBpb3Y7CisJaW50IHJldDsKKworCS8qCisJICogRXh0ZW5zaW9uOiAgQ2F0Y2ggaW50ZWdlciBvdmVyZmxvdworCSAqLworCWlmICgoc2l6ZSA+PSBNVUxfTk9fT1ZFUkZMT1cgfHwgY291bnQgPj0gTVVMX05PX09WRVJGTE9XKSAmJgorCSAgICBzaXplID4gMCAmJiBTSVpFX01BWCAvIHNpemUgPCBjb3VudCkgeworCQllcnJubyA9IEVPVkVSRkxPVzsKKwkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJCXJldHVybiAoMCk7CisJfQorCisJLyoKKwkgKiBBTlNJIGFuZCBTVVN2MiByZXF1aXJlIGEgcmV0dXJuIHZhbHVlIG9mIDAgaWYgc2l6ZSBvciBjb3VudCBhcmUgMC4KKwkgKi8KKwlpZiAoKG4gPSBjb3VudCAqIHNpemUpID09IDApCisJCXJldHVybiAoMCk7CisKKwlpb3YuaW92X2Jhc2UgPSAodm9pZCAqKWJ1ZjsKKwl1aW8udWlvX3Jlc2lkID0gaW92Lmlvdl9sZW4gPSBuOworCXVpby51aW9faW92ID0gJmlvdjsKKwl1aW8udWlvX2lvdmNudCA9IDE7CisKKwkvKgorCSAqIFRoZSB1c3VhbCBjYXNlIGlzIHN1Y2Nlc3MgKF9fc2Z2d3JpdGUgcmV0dXJucyAwKTsKKwkgKiBza2lwIHRoZSBkaXZpZGUgaWYgdGhpcyBoYXBwZW5zLCBzaW5jZSBkaXZpZGVzIGFyZQorCSAqIGdlbmVyYWxseSBzbG93IGFuZCBzaW5jZSB0aGlzIG9jY3VycyB3aGVuZXZlciBzaXplPT0wLgorCSAqLworCUZMT0NLRklMRShmcCk7CisJX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOworCXJldCA9IF9fc2Z2d3JpdGUoZnAsICZ1aW8pOworCUZVTkxPQ0tGSUxFKGZwKTsKKwlpZiAocmV0ID09IDApCisJCXJldHVybiAoY291bnQpOworCXJldHVybiAoKG4gLSB1aW8udWlvX3Jlc2lkKSAvIHNpemUpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z3c2NhbmYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9md3NjYW5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxNmNiZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9md3NjYW5mLmMKQEAgLTAsMCArMSw0NCBAQAorLyogJE9wZW5CU0Q6IGZ3c2NhbmYuYyx2IDEuMiAyMDEyLzEyLzA1IDIzOjIwOjAxIGRlcmFhZHQgRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgVGltIEouIFJvYmJpbnMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworaW50Citmd3NjYW5mKEZJTEUgKiBfX3Jlc3RyaWN0IGZwLCBjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCByOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJciA9IHZmd3NjYW5mKGZwLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJcmV0dXJuIChyKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXRjLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NzljYmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0Yy5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qCSRPcGVuQlNEOiBnZXRjLmMsdiAxLjkgMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gZ2V0Y191bmxvY2tlZC4KKyAqLworI3VuZGVmIGdldGNfdW5sb2NrZWQKKworaW50CitnZXRjX3VubG9ja2VkKEZJTEUgKmZwKQoreworCXJldHVybiAoX19zZ2V0YyhmcCkpOworfQorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIGdldGMuCisgKi8KKyN1bmRlZiBnZXRjCisKK2ludAorZ2V0YyhGSUxFICpmcCkKK3sKKwlpbnQgYzsKKworCUZMT0NLRklMRShmcCk7CisJYyA9IF9fc2dldGMoZnApOworCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKGMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2dldGNoYXIuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXRjaGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUwODE3ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXRjaGFyLmMKQEAgLTAsMCArMSw1OCBAQAorLyoJJE9wZW5CU0Q6IGdldGNoYXIuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIGdldGNoYXJfdW5sb2NrZWQuCisgKi8KKyN1bmRlZiBnZXRjaGFyX3VubG9ja2VkCisKK2ludAorZ2V0Y2hhcl91bmxvY2tlZCh2b2lkKQoreworCXJldHVybiAoZ2V0Y191bmxvY2tlZChzdGRpbikpOworfQorCisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gZ2V0Y2hhci4KKyAqLworCisjdW5kZWYgZ2V0Y2hhcgorCitpbnQKK2dldGNoYXIodm9pZCkKK3sKKwlyZXR1cm4gKGdldGMoc3RkaW4pKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXRkZWxpbS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2dldGRlbGltLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNkZTBjMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXRkZWxpbS5jCkBAIC0wLDAgKzEsMTM0IEBACisvKgkkT3BlbkJTRDogZ2V0ZGVsaW0uYyx2IDEuMSAyMDEyLzAzLzIxIDIzOjQ0OjM1IGZnc2NoIEV4cCAkCSovCisvKiAkTmV0QlNEOiBnZXRkZWxpbS5jLHYgMS4xMyAyMDExLzA3LzIyIDIzOjEyOjMwIGpvZXJnIEV4cCAkICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IFJveSBNYXJwbGVzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9jYWwuaCIKKworLyogTWluaW11bSBidWZmZXIgc2l6ZSB3ZSBjcmVhdGUuCisgKiBUaGlzIHNob3VsZCBhbGxvdyBjb25maWcgZmlsZXMgdG8gZml0IGludG8gb3VyIHBvd2VyIG9mIDIgYnVmZmVyIGdyb3d0aAorICogd2l0aG91dCB0aGUgbmVlZCBmb3IgYSByZWFsbG9jLiAqLworI2RlZmluZSBNSU5CVUYJMTI4CisKK3NzaXplX3QKK2dldGRlbGltKGNoYXIgKipfX3Jlc3RyaWN0IGJ1Ziwgc2l6ZV90ICpfX3Jlc3RyaWN0IGJ1ZmxlbiwKKyAgICBpbnQgc2VwLCBGSUxFICpfX3Jlc3RyaWN0IGZwKQoreworCXVuc2lnbmVkIGNoYXIgKnA7CisJc2l6ZV90IGxlbiwgbmV3bGVuLCBvZmY7CisJY2hhciAqbmV3YjsKKworCUZMT0NLRklMRShmcCk7CisKKwlpZiAoYnVmID09IE5VTEwgfHwgYnVmbGVuID09IE5VTEwpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogSWYgYnVmIGlzIE5VTEwsIHdlIGhhdmUgdG8gYXNzdW1lIGEgc2l6ZSBvZiB6ZXJvICovCisJaWYgKCpidWYgPT0gTlVMTCkKKwkJKmJ1ZmxlbiA9IDA7CisKKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAtMSk7CisJb2ZmID0gMDsKKwlkbyB7CisJCS8qIElmIHRoZSBpbnB1dCBidWZmZXIgaXMgZW1wdHksIHJlZmlsbCBpdCAqLworCQlpZiAoZnAtPl9yIDw9IDAgJiYgX19zcmVmaWxsKGZwKSkgeworCQkJaWYgKF9fc2ZlcnJvcihmcCkpCisJCQkJZ290byBlcnJvcjsKKwkJCS8qIE5vIGVycm9yLCBzbyBFT0YuICovCisJCQlicmVhazsKKwkJfQorCisJCS8qIFNjYW4gdGhyb3VnaCBsb29raW5nIGZvciB0aGUgc2VwYXJhdG9yICovCisJCXAgPSBtZW1jaHIoZnAtPl9wLCBzZXAsIChzaXplX3QpZnAtPl9yKTsKKwkJaWYgKHAgPT0gTlVMTCkKKwkJCWxlbiA9IGZwLT5fcjsKKwkJZWxzZQorCQkJbGVuID0gKHAgLSBmcC0+X3ApICsgMTsKKworCQluZXdsZW4gPSBvZmYgKyBsZW47CisJCS8qIEVuc3VyZSB3ZSBjYW4gaGFuZGxlIGl0ICovCisJCWlmIChuZXdsZW4gPCBvZmYgfHwgbmV3bGVuID4gU1NJWkVfTUFYKSB7CisJCQllcnJubyA9IEVPVkVSRkxPVzsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJbmV3bGVuKys7IC8qIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBOVUxMIHRlcm1pbmF0b3IgKi8KKwkJaWYgKG5ld2xlbiA+ICpidWZsZW4pIHsKKwkJCWlmIChuZXdsZW4gPCBNSU5CVUYpCisJCQkJbmV3bGVuID0gTUlOQlVGOworI2RlZmluZSBwb3dlcm9mMih4KSAoKCgoeCktMSkmKHgpKT09MCkKKwkJCWlmICghcG93ZXJvZjIobmV3bGVuKSkgeworCQkJCS8qIEdyb3cgdGhlIGJ1ZmZlciB0byB0aGUgbmV4dCBwb3dlciBvZiAyICovCisJCQkJbmV3bGVuLS07CisJCQkJbmV3bGVuIHw9IG5ld2xlbiA+PiAxOworCQkJCW5ld2xlbiB8PSBuZXdsZW4gPj4gMjsKKwkJCQluZXdsZW4gfD0gbmV3bGVuID4+IDQ7CisJCQkJbmV3bGVuIHw9IG5ld2xlbiA+PiA4OworCQkJCW5ld2xlbiB8PSBuZXdsZW4gPj4gMTY7CisjaWYgU0laRV9UX01BWCA+IDB4ZmZmZmZmZmZVCisJCQkJbmV3bGVuIHw9IG5ld2xlbiA+PiAzMjsKKyNlbmRpZgorCQkJCW5ld2xlbisrOworCQkJfQorCisJCQluZXdiID0gcmVhbGxvYygqYnVmLCBuZXdsZW4pOworCQkJaWYgKG5ld2IgPT0gTlVMTCkKKwkJCQlnb3RvIGVycm9yOworCQkJKmJ1ZiA9IG5ld2I7CisJCQkqYnVmbGVuID0gbmV3bGVuOworCQl9CisKKwkJKHZvaWQpbWVtY3B5KCgqYnVmICsgb2ZmKSwgZnAtPl9wLCBsZW4pOworCQkvKiBTYWZlLCBsZW4gaXMgbmV2ZXIgZ3JlYXRlciB0aGFuIHdoYXQgZnAtPl9yIGNhbiBmaXQuICovCisJCWZwLT5fciAtPSAoaW50KWxlbjsKKwkJZnAtPl9wICs9IChpbnQpbGVuOworCQlvZmYgKz0gbGVuOworCX0gd2hpbGUgKHAgPT0gTlVMTCk7CisKKwlGVU5MT0NLRklMRShmcCk7CisKKwkvKiBQT1NJWCBkZW1hbmRzIHdlIHJldHVybiAtMSBvbiBFT0YuICovCisJaWYgKG9mZiA9PSAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoKmJ1ZiAhPSBOVUxMKQorCQkqKCpidWYgKyBvZmYpID0gJ1wwJzsKKwlyZXR1cm4gb2ZmOworCitlcnJvcjoKKwlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2dldGxpbmUuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXRsaW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhZDM5NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXRsaW5lLmMKQEAgLTAsMCArMSwzNyBAQAorLyoJJE9wZW5CU0Q6IGdldGxpbmUuYyx2IDEuMSAyMDEyLzAzLzIxIDIzOjQ0OjM1IGZnc2NoIEV4cCAkCSovCisvKiAkTmV0QlNEOiBnZXRsaW5lLmMsdiAxLjMgMjAwOS8xMi8wMiAwODo0NjozMyByb3kgRXhwICQgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICogYnkgUm95IE1hcnBsZXMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitzc2l6ZV90CitnZXRsaW5lKGNoYXIgKipfX3Jlc3RyaWN0IGJ1Ziwgc2l6ZV90ICpfX3Jlc3RyaWN0IGJ1ZmxlbiwgRklMRSAqX19yZXN0cmljdCBmcCkKK3sKKwlyZXR1cm4gZ2V0ZGVsaW0oYnVmLCBidWZsZW4sICdcbicsIGZwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXRzLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZTFiNTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0cy5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCSRPcGVuQlNEOiBnZXRzLmMsdiAxLjEyIDIwMDkvMTEvMDkgMDA6MTg6Mjcga3VydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCitfX3dhcm5fcmVmZXJlbmNlcyhnZXRzLAorICAgICJ3YXJuaW5nOiBnZXRzKCkgaXMgdmVyeSB1bnNhZmU7IGNvbnNpZGVyIHVzaW5nIGZnZXRzKCkiKTsKKworY2hhciAqCitnZXRzKGNoYXIgKmJ1ZikKK3sKKwlpbnQgYzsKKwljaGFyICpzOworCisJRkxPQ0tGSUxFKHN0ZGluKTsKKwlmb3IgKHMgPSBidWY7IChjID0gZ2V0Y2hhcl91bmxvY2tlZCgpKSAhPSAnXG4nOykKKwkJaWYgKGMgPT0gRU9GKQorCQkJaWYgKHMgPT0gYnVmKSB7CisJCQkJRlVOTE9DS0ZJTEUoc3RkaW4pOworCQkJCXJldHVybiAoTlVMTCk7CisJCQl9IGVsc2UKKwkJCQlicmVhazsKKwkJZWxzZQorCQkJKnMrKyA9IGM7CisJKnMgPSAnXDAnOworCUZVTkxPQ0tGSUxFKHN0ZGluKTsKKwlyZXR1cm4gKGJ1Zik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0d2MuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXR3Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YmJiN2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0d2MuYwpAQCAtMCwwICsxLDQ1IEBACisvKgkkT3BlbkJTRDogZ2V0d2MuYyx2IDEuMSAyMDA1LzA2LzE3IDIwOjQwOjMyIGVzcGllIEV4cCAkCSovCisvKiAkTmV0QlNEOiBnZXR3Yy5jLHYgMS4yIDIwMDMvMDEvMTggMTE6Mjk6NTUgdGhvcnBlaiBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykyMDAxIENpdHJ1cyBQcm9qZWN0LAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkQ2l0cnVzJAorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gZ2V0d2MuCisgKi8KKyN1bmRlZiBnZXR3YworCit3aW50X3QKK2dldHdjKEZJTEUgKmZwKQoreworCisJcmV0dXJuIGZnZXR3YyhmcCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0d2NoYXIuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXR3Y2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMTEyZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0d2NoYXIuYwpAQCAtMCwwICsxLDQ1IEBACisvKgkkT3BlbkJTRDogZ2V0d2NoYXIuYyx2IDEuMSAyMDA1LzA2LzE3IDIwOjQwOjMyIGVzcGllIEV4cCAkCSovCisvKiAkTmV0QlNEOiBnZXR3Y2hhci5jLHYgMS4yIDIwMDMvMDEvMTggMTE6Mjk6NTUgdGhvcnBlaiBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykyMDAxIENpdHJ1cyBQcm9qZWN0LAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkQ2l0cnVzJAorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gZ2V0d2NoYXIuCisgKi8KKyN1bmRlZiBnZXR3Y2hhcgorCit3aW50X3QKK2dldHdjaGFyKCkKK3sKKworCXJldHVybiBmZ2V0d2Moc3RkaW4pOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL21ha2VidWYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9tYWtlYnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3ZTI3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9tYWtlYnVmLmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qCSRPcGVuQlNEOiBtYWtlYnVmLmMsdiAxLjggMjAwNS8xMi8yOCAxODo1MDoyMiBtaWxsZXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIEFsbG9jYXRlIGEgZmlsZSBidWZmZXIsIG9yIHN3aXRjaCB0byB1bmJ1ZmZlcmVkIEkvTy4KKyAqIFBlciB0aGUgQU5TSSBDIHN0YW5kYXJkLCBBTEwgdHR5IGRldmljZXMgZGVmYXVsdCB0byBsaW5lIGJ1ZmZlcmVkLgorICoKKyAqIEFzIGEgc2lkZSBlZmZlY3QsIHdlIHNldCBfX1NPUFQgb3IgX19TTlBUIChlbi9kaXMtYWJsZSBmc2VlaworICogb3B0aW1pc2F0aW9uKSByaWdodCBhZnRlciB0aGUgZnN0YXQoKSB0aGF0IGZpbmRzIHRoZSBidWZmZXIgc2l6ZS4KKyAqLwordm9pZAorX19zbWFrZWJ1ZihGSUxFICpmcCkKK3sKKwl2b2lkICpwOworCWludCBmbGFnczsKKwlzaXplX3Qgc2l6ZTsKKwlpbnQgY291bGRiZXR0eTsKKworCWlmIChmcC0+X2ZsYWdzICYgX19TTkJGKSB7CisJCWZwLT5fYmYuX2Jhc2UgPSBmcC0+X3AgPSBmcC0+X25idWY7CisJCWZwLT5fYmYuX3NpemUgPSAxOworCQlyZXR1cm47CisJfQorCWZsYWdzID0gX19zd2hhdGJ1ZihmcCwgJnNpemUsICZjb3VsZGJldHR5KTsKKwlpZiAoKHAgPSBtYWxsb2Moc2l6ZSkpID09IE5VTEwpIHsKKwkJZnAtPl9mbGFncyB8PSBfX1NOQkY7CisJCWZwLT5fYmYuX2Jhc2UgPSBmcC0+X3AgPSBmcC0+X25idWY7CisJCWZwLT5fYmYuX3NpemUgPSAxOworCQlyZXR1cm47CisJfQorCV9fYXRleGl0X3JlZ2lzdGVyX2NsZWFudXAoX2NsZWFudXApOworCWZsYWdzIHw9IF9fU01CRjsKKwlmcC0+X2JmLl9iYXNlID0gZnAtPl9wID0gcDsKKwlmcC0+X2JmLl9zaXplID0gc2l6ZTsKKwlpZiAoY291bGRiZXR0eSAmJiBpc2F0dHkoZnAtPl9maWxlKSkKKwkJZmxhZ3MgfD0gX19TTEJGOworCWZwLT5fZmxhZ3MgfD0gZmxhZ3M7Cit9CisKKy8qCisgKiBJbnRlcm5hbCByb3V0aW5lIHRvIGRldGVybWluZSBgcHJvcGVyJyBidWZmZXJpbmcgZm9yIGEgZmlsZS4KKyAqLworaW50CitfX3N3aGF0YnVmKEZJTEUgKmZwLCBzaXplX3QgKmJ1ZnNpemUsIGludCAqY291bGRiZXR0eSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChmcC0+X2ZpbGUgPCAwIHx8IGZzdGF0KGZwLT5fZmlsZSwgJnN0KSA8IDApIHsKKwkJKmNvdWxkYmV0dHkgPSAwOworCQkqYnVmc2l6ZSA9IEJVRlNJWjsKKwkJcmV0dXJuIChfX1NOUFQpOworCX0KKworCS8qIGNvdWxkIGJlIGEgdHR5IGlmZiBpdCBpcyBhIGNoYXJhY3RlciBkZXZpY2UgKi8KKwkqY291bGRiZXR0eSA9IFNfSVNDSFIoc3Quc3RfbW9kZSk7CisJaWYgKHN0LnN0X2Jsa3NpemUgPT0gMCkgeworCQkqYnVmc2l6ZSA9IEJVRlNJWjsKKwkJcmV0dXJuIChfX1NOUFQpOworCX0KKworCS8qCisJICogT3B0aW1pc2UgZnNlZWsoKSBvbmx5IGlmIGl0IGlzIGEgcmVndWxhciBmaWxlLiAgKFRoZSB0ZXN0IGZvcgorCSAqIF9fc3NlZWsgaXMgbWFpbmx5IHBhcmFub2lhLikgIEl0IGlzIHNhZmUgdG8gc2V0IF9ibGtzaXplCisJICogdW5jb25kaXRpb25hbGx5OyBpdCB3aWxsIG9ubHkgYmUgdXNlZCBpZiBfX1NPUFQgaXMgYWxzbyBzZXQuCisJICovCisJKmJ1ZnNpemUgPSBzdC5zdF9ibGtzaXplOworCWZwLT5fYmxrc2l6ZSA9IHN0LnN0X2Jsa3NpemU7CisJcmV0dXJuICgoc3Quc3RfbW9kZSAmIFNfSUZNVCkgPT0gU19JRlJFRyAmJiBmcC0+X3NlZWsgPT0gX19zc2VlayA/CisJICAgIF9fU09QVCA6IF9fU05QVCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vbWt0ZW1wLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vbWt0ZW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxNTRjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9ta3RlbXAuYwpAQCAtMCwwICsxLDE0MyBAQAorLyoJJE9wZW5CU0Q6IG1rdGVtcC5jLHYgMS4zMyAyMDE0LzA1LzA2IDIyOjU1OjI3IG1pbGxlcnQgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OCwgMjAwOCBUaGVvIGRlIFJhYWR0CisgKiBDb3B5cmlnaHQgKGMpIDE5OTcsIDIwMDgtMjAwOSBUb2RkIEMuIE1pbGxlcgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNkZWZpbmUgTUtURU1QX05BTUUJMAorI2RlZmluZSBNS1RFTVBfRklMRQkxCisjZGVmaW5lIE1LVEVNUF9ESVIJMgorCisjZGVmaW5lIFRFTVBDSEFSUwkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiCisjZGVmaW5lIE5VTV9DSEFSUwkoc2l6ZW9mKFRFTVBDSEFSUykgLSAxKQorI2RlZmluZSBNSU5fWAkJNgorCisjaWZuZGVmIG5pdGVtcworI2RlZmluZSBuaXRlbXMoX2EpCShzaXplb2YoKF9hKSkgLyBzaXplb2YoKF9hKVswXSkpCisjZW5kaWYKKworc3RhdGljIGludAorbWt0ZW1wX2ludGVybmFsKGNoYXIgKnBhdGgsIGludCBzbGVuLCBpbnQgbW9kZSkKK3sKKwljaGFyICpzdGFydCwgKmNwLCAqZXA7CisJY29uc3QgY2hhciAqdGVtcGNoYXJzID0gVEVNUENIQVJTOworCXVuc2lnbmVkIGludCB0cmllczsKKwlzdHJ1Y3Qgc3RhdCBzYjsKKwlzaXplX3QgbGVuOworCWludCBmZDsKKworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwlpZiAobGVuIDwgTUlOX1ggfHwgc2xlbiA8IDAgfHwgKHNpemVfdClzbGVuID4gbGVuIC0gTUlOX1gpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybigtMSk7CisJfQorCWVwID0gcGF0aCArIGxlbiAtIHNsZW47CisKKwlmb3IgKHN0YXJ0ID0gZXA7IHN0YXJ0ID4gcGF0aCAmJiBzdGFydFstMV0gPT0gJ1gnOyBzdGFydC0tKQorCQk7CisJaWYgKGVwIC0gc3RhcnQgPCBNSU5fWCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuKC0xKTsKKwl9CisKKwl0cmllcyA9IElOVF9NQVg7CisJZG8geworCQljcCA9IHN0YXJ0OworCQlkbyB7CisJCQl1bnNpZ25lZCBzaG9ydCByYnVmWzE2XTsKKwkJCXVuc2lnbmVkIGludCBpOworCisJCQkvKgorCQkJICogQXZvaWQgbG90cyBvZiBhcmM0cmFuZG9tKCkgY2FsbHMgYnkgdXNpbmcKKwkJCSAqIGEgYnVmZmVyIHNpemVkIGZvciB1cCB0byAxNiBYcyBhdCBhIHRpbWUuCisJCQkgKi8KKwkJCWFyYzRyYW5kb21fYnVmKHJidWYsIHNpemVvZihyYnVmKSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgbml0ZW1zKHJidWYpICYmIGNwICE9IGVwOyBpKyspCisJCQkJKmNwKysgPSB0ZW1wY2hhcnNbcmJ1ZltpXSAlIE5VTV9DSEFSU107CisJCX0gd2hpbGUgKGNwICE9IGVwKTsKKworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBNS1RFTVBfTkFNRToKKwkJCWlmIChsc3RhdChwYXRoLCAmc2IpICE9IDApCisJCQkJcmV0dXJuKGVycm5vID09IEVOT0VOVCA/IDAgOiAtMSk7CisJCQlicmVhazsKKwkJY2FzZSBNS1RFTVBfRklMRToKKwkJCWZkID0gb3BlbihwYXRoLCBPX0NSRUFUfE9fRVhDTHxPX1JEV1IsIFNfSVJVU1J8U19JV1VTUik7CisJCQlpZiAoZmQgIT0gLTEgfHwgZXJybm8gIT0gRUVYSVNUKQorCQkJCXJldHVybihmZCk7CisJCQlicmVhazsKKwkJY2FzZSBNS1RFTVBfRElSOgorCQkJaWYgKG1rZGlyKHBhdGgsIFNfSVJVU1J8U19JV1VTUnxTX0lYVVNSKSA9PSAwKQorCQkJCXJldHVybigwKTsKKwkJCWlmIChlcnJubyAhPSBFRVhJU1QpCisJCQkJcmV0dXJuKC0xKTsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoLS10cmllcyk7CisKKwllcnJubyA9IEVFWElTVDsKKwlyZXR1cm4oLTEpOworfQorCitjaGFyICpfbWt0ZW1wKGNoYXIgKik7CisKK2NoYXIgKgorX21rdGVtcChjaGFyICpwYXRoKQoreworCWlmIChta3RlbXBfaW50ZXJuYWwocGF0aCwgMCwgTUtURU1QX05BTUUpID09IC0xKQorCQlyZXR1cm4oTlVMTCk7CisJcmV0dXJuKHBhdGgpOworfQorCitfX3dhcm5fcmVmZXJlbmNlcyhta3RlbXAsCisgICAgIndhcm5pbmc6IG1rdGVtcCgpIHBvc3NpYmx5IHVzZWQgdW5zYWZlbHk7IGNvbnNpZGVyIHVzaW5nIG1rc3RlbXAoKSIpOworCitjaGFyICoKK21rdGVtcChjaGFyICpwYXRoKQoreworCXJldHVybihfbWt0ZW1wKHBhdGgpKTsKK30KKworaW50Citta3N0ZW1wKGNoYXIgKnBhdGgpCit7CisJcmV0dXJuKG1rdGVtcF9pbnRlcm5hbChwYXRoLCAwLCBNS1RFTVBfRklMRSkpOworfQorCitpbnQKK21rc3RlbXBzKGNoYXIgKnBhdGgsIGludCBzbGVuKQoreworCXJldHVybihta3RlbXBfaW50ZXJuYWwocGF0aCwgc2xlbiwgTUtURU1QX0ZJTEUpKTsKK30KKworY2hhciAqCitta2R0ZW1wKGNoYXIgKnBhdGgpCit7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBta3RlbXBfaW50ZXJuYWwocGF0aCwgMCwgTUtURU1QX0RJUik7CisJcmV0dXJuKGVycm9yID8gTlVMTCA6IHBhdGgpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3BlcnJvci5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3BlcnJvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Mjg3MTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcGVycm9yLmMKQEAgLTAsMCArMSw2MiBAQAorLyoJJE9wZW5CU0Q6IHBlcnJvci5jLHYgMS44IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKwordm9pZAorcGVycm9yKGNvbnN0IGNoYXIgKnMpCit7CisJc3RydWN0IGlvdmVjICp2OworCXN0cnVjdCBpb3ZlYyBpb3ZbNF07CisJY2hhciBidWZbTkxfVEVYVE1BWF07CisKKwl2ID0gaW92OworCWlmIChzICYmICpzKSB7CisJCXYtPmlvdl9iYXNlID0gKGNoYXIgKilzOworCQl2LT5pb3ZfbGVuID0gc3RybGVuKHMpOworCQl2Kys7CisJCXYtPmlvdl9iYXNlID0gIjogIjsKKwkJdi0+aW92X2xlbiA9IDI7CisJCXYrKzsKKwl9CisJKHZvaWQpc3RyZXJyb3JfcihlcnJubywgYnVmLCBzaXplb2YoYnVmKSk7CisJdi0+aW92X2Jhc2UgPSBidWY7CisJdi0+aW92X2xlbiA9IHN0cmxlbih2LT5pb3ZfYmFzZSk7CisJdisrOworCXYtPmlvdl9iYXNlID0gIlxuIjsKKwl2LT5pb3ZfbGVuID0gMTsKKwkodm9pZCl3cml0ZXYoU1RERVJSX0ZJTEVOTywgaW92LCAodiAtIGlvdikgKyAxKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wcmludGYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWJiM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ByaW50Zi5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCSRPcGVuQlNEOiBwcmludGYuYyx2IDEuOCAyMDExLzA1LzMwIDE4OjQ4OjMzIG1hcnR5bmFzIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisvKiBQUklOVEZMSUtFMSAqLworaW50CitwcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHJldDsKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdmZwcmludGYoc3Rkb3V0LCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXRjLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MmZlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0Yy5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCSRPcGVuQlNEOiBwdXRjLmMsdiAxLjEyIDIwMDkvMTEvMjEgMTA6MTE6NTQgZ3VlbnRoZXIgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIHB1dGNfdW5sb2NrZWQuCisgKi8KKyN1bmRlZiBwdXRjX3VubG9ja2VkCisKK2ludAorcHV0Y191bmxvY2tlZChpbnQgYywgRklMRSAqZnApCit7CisJaWYgKGNhbnR3cml0ZShmcCkpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuIChFT0YpOworCX0KKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAtMSk7CisJcmV0dXJuIChfX3NwdXRjKGMsIGZwKSk7Cit9CisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gcHV0Yy4KKyAqLworI3VuZGVmIHB1dGMKKworaW50CitwdXRjKGludCBjLCBGSUxFICpmcCkKK3sKKwlpbnQgcmV0OworCisJRkxPQ0tGSUxFKGZwKTsKKwlyZXQgPSBwdXRjX3VubG9ja2VkKGMsIGZwKTsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3B1dGNoYXIuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXRjaGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMzY2RmZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXRjaGFyLmMKQEAgLTAsMCArMSw1OSBAQAorLyoJJE9wZW5CU0Q6IHB1dGNoYXIuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjdW5kZWYgcHV0Y2hhcl91bmxvY2tlZAorLyoKKyAqIEEgc3Vicm91dGluZyB2ZXJzaW9uIG9mIHRoZSBtYWNybyBwdXRjaGFyX3VubG9ja2VkCisgKi8KK2ludAorcHV0Y2hhcl91bmxvY2tlZChpbnQgYykKK3sKKwlGSUxFICpzbyA9IHN0ZG91dDsKKworCXJldHVybiAocHV0Y191bmxvY2tlZChjLHNvKSk7Cit9CisKKyN1bmRlZiBwdXRjaGFyCisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gcHV0Y2hhcgorICovCitpbnQKK3B1dGNoYXIoaW50IGMpCit7CisJRklMRSAqc28gPSBzdGRvdXQ7CisKKwlyZXR1cm4gKHB1dGMoYywgc28pKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXRzLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NWFlZDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0cy5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qCSRPcGVuQlNEOiBwdXRzLmMsdiAxLjExIDIwMDkvMTEvMjEgMDk6NTM6NDQgZ3VlbnRoZXIgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKyNpbmNsdWRlICJmdndyaXRlLmgiCisKKy8qCisgKiBXcml0ZSB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHN0ZG91dCwgYXBwZW5kaW5nIGEgbmV3bGluZS4KKyAqLworaW50CitwdXRzKGNvbnN0IGNoYXIgKnMpCit7CisJc2l6ZV90IGMgPSBzdHJsZW4ocyk7CisJc3RydWN0IF9fc3VpbyB1aW87CisJc3RydWN0IF9fc2lvdiBpb3ZbMl07CisJaW50IHJldDsKKworCWlvdlswXS5pb3ZfYmFzZSA9ICh2b2lkICopczsKKwlpb3ZbMF0uaW92X2xlbiA9IGM7CisJaW92WzFdLmlvdl9iYXNlID0gIlxuIjsKKwlpb3ZbMV0uaW92X2xlbiA9IDE7CisJdWlvLnVpb19yZXNpZCA9IGMgKyAxOworCXVpby51aW9faW92ID0gJmlvdlswXTsKKwl1aW8udWlvX2lvdmNudCA9IDI7CisJRkxPQ0tGSUxFKHN0ZG91dCk7CisJX1NFVF9PUklFTlRBVElPTihzdGRvdXQsIC0xKTsKKwlyZXQgPSBfX3NmdndyaXRlKHN0ZG91dCwgJnVpbyk7CisJRlVOTE9DS0ZJTEUoc3Rkb3V0KTsKKwlyZXR1cm4gKHJldCA/IEVPRiA6ICdcbicpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHcuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXR3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc5NDFhNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXR3LmMKQEAgLTAsMCArMSw1NCBAQAorLyoJJE9wZW5CU0Q6IHB1dHcuYyx2IDEuMTAgMjAwOS8xMS8yMSAwOTo1Mzo0NCBndWVudGhlciBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorI2luY2x1ZGUgImZ2d3JpdGUuaCIKKworaW50CitwdXR3KGludCB3LCBGSUxFICpmcCkKK3sKKwlzdHJ1Y3QgX19zdWlvIHVpbzsKKwlzdHJ1Y3QgX19zaW92IGlvdjsKKwlpbnQgcmV0OworCisJaW92Lmlvdl9iYXNlID0gJnc7CisJaW92Lmlvdl9sZW4gPSB1aW8udWlvX3Jlc2lkID0gc2l6ZW9mKHcpOworCXVpby51aW9faW92ID0gJmlvdjsKKwl1aW8udWlvX2lvdmNudCA9IDE7CisJRkxPQ0tGSUxFKGZwKTsKKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAtMSk7CisJcmV0ID0gX19zZnZ3cml0ZShmcCwgJnVpbyk7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXR3Yy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHdjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUyZmYyZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXR3Yy5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCSRPcGVuQlNEOiBwdXR3Yy5jLHYgMS4xIDIwMDUvMDYvMTcgMjA6NDA6MzIgZXNwaWUgRXhwICQJKi8KKy8qICROZXRCU0Q6IHB1dHdjLmMsdiAxLjMgMjAwMy8wMS8xOCAxMToyOTo1NiB0aG9ycGVqIEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKTIwMDEgQ2l0cnVzIFByb2plY3QsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRDaXRydXMkCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworLyoKKyAqIEEgc3Vicm91dGluZSB2ZXJzaW9uIG9mIHRoZSBtYWNybyBwdXR3Yy4KKyAqLworI3VuZGVmIHB1dHdjCisKK3dpbnRfdAorcHV0d2Mod2NoYXJfdCB3YywgRklMRSAqZnApCit7CisKKwlyZXR1cm4gZnB1dHdjKHdjLCBmcCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0d2NoYXIuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXR3Y2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MGVjMDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0d2NoYXIuYwpAQCAtMCwwICsxLDQ1IEBACisvKgkkT3BlbkJTRDogcHV0d2NoYXIuYyx2IDEuMSAyMDA1LzA2LzE3IDIwOjQwOjMyIGVzcGllIEV4cCAkCSovCisvKiAkTmV0QlNEOiBwdXR3Y2hhci5jLHYgMS4zIDIwMDMvMDEvMTggMTE6Mjk6NTYgdGhvcnBlaiBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykyMDAxIENpdHJ1cyBQcm9qZWN0LAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkQ2l0cnVzJAorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gcHV0d2NoYXIuCisgKi8KKyN1bmRlZiBwdXR3Y2hhcgorCit3aW50X3QKK3B1dHdjaGFyKHdjaGFyX3Qgd2MpCit7CisKKwlyZXR1cm4gZnB1dHdjKHdjLCBzdGRvdXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3JlZmlsbC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3JlZmlsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NWM3MmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcmVmaWxsLmMKQEAgLTAsMCArMSwxMjggQEAKKy8qCSRPcGVuQlNEOiByZWZpbGwuYyx2IDEuMTEgMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworc3RhdGljIGludAorbGZsdXNoKEZJTEUgKmZwKQoreworCWlmICgoZnAtPl9mbGFncyAmIChfX1NMQkZ8X19TV1IpKSA9PSAoX19TTEJGfF9fU1dSKSkKKwkJcmV0dXJuIChfX3NmbHVzaF9sb2NrZWQoZnApKTsJLyogaWdub3JlZC4uLiAqLworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBSZWZpbGwgYSBzdGRpbyBidWZmZXIuCisgKiBSZXR1cm4gRU9GIG9uIGVvZiBvciBlcnJvciwgMCBvdGhlcndpc2UuCisgKi8KK2ludAorX19zcmVmaWxsKEZJTEUgKmZwKQoreworCisJLyogbWFrZSBzdXJlIHN0ZGlvIGlzIHNldCB1cCAqLworCWlmICghX19zZGlkaW5pdCkKKwkJX19zaW5pdCgpOworCisJZnAtPl9yID0gMDsJCS8qIGxhcmdlbHkgYSBjb252ZW5pZW5jZSBmb3IgY2FsbGVycyAqLworCisJLyogU3lzViBkb2VzIG5vdCBtYWtlIHRoaXMgdGVzdDsgdGFrZSBpdCBvdXQgZm9yIGNvbXBhdGliaWxpdHkgKi8KKwlpZiAoZnAtPl9mbGFncyAmIF9fU0VPRikKKwkJcmV0dXJuIChFT0YpOworCisJLyogaWYgbm90IGFscmVhZHkgcmVhZGluZywgaGF2ZSB0byBiZSByZWFkaW5nIGFuZCB3cml0aW5nICovCisJaWYgKChmcC0+X2ZsYWdzICYgX19TUkQpID09IDApIHsKKwkJaWYgKChmcC0+X2ZsYWdzICYgX19TUlcpID09IDApIHsKKwkJCWVycm5vID0gRUJBREY7CisJCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwkJCXJldHVybiAoRU9GKTsKKwkJfQorCQkvKiBzd2l0Y2ggdG8gcmVhZGluZyAqLworCQlpZiAoZnAtPl9mbGFncyAmIF9fU1dSKSB7CisJCQlpZiAoX19zZmx1c2goZnApKQorCQkJCXJldHVybiAoRU9GKTsKKwkJCWZwLT5fZmxhZ3MgJj0gfl9fU1dSOworCQkJZnAtPl93ID0gMDsKKwkJCWZwLT5fbGJmc2l6ZSA9IDA7CisJCX0KKwkJZnAtPl9mbGFncyB8PSBfX1NSRDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBXZSB3ZXJlIHJlYWRpbmcuICBJZiB0aGVyZSBpcyBhbiB1bmdldGMgYnVmZmVyLAorCQkgKiB3ZSBtdXN0IGhhdmUgYmVlbiByZWFkaW5nIGZyb20gdGhhdC4gIERyb3AgaXQsCisJCSAqIHJlc3RvcmluZyB0aGUgcHJldmlvdXMgYnVmZmVyIChpZiBhbnkpLiAgSWYgdGhlcmUKKwkJICogaXMgYW55dGhpbmcgaW4gdGhhdCBidWZmZXIsIHJldHVybi4KKwkJICovCisJCWlmIChIQVNVQihmcCkpIHsKKwkJCUZSRUVVQihmcCk7CisJCQlpZiAoKGZwLT5fciA9IGZwLT5fdXIpICE9IDApIHsKKwkJCQlmcC0+X3AgPSBmcC0+X3VwOworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZnAtPl9iZi5fYmFzZSA9PSBOVUxMKQorCQlfX3NtYWtlYnVmKGZwKTsKKworCS8qCisJICogQmVmb3JlIHJlYWRpbmcgZnJvbSBhIGxpbmUgYnVmZmVyZWQgb3IgdW5idWZmZXJlZCBmaWxlLAorCSAqIGZsdXNoIGFsbCBsaW5lIGJ1ZmZlcmVkIG91dHB1dCBmaWxlcywgcGVyIHRoZSBBTlNJIEMKKwkgKiBzdGFuZGFyZC4KKwkgKi8KKwlpZiAoZnAtPl9mbGFncyAmIChfX1NMQkZ8X19TTkJGKSkgeworCQkvKiBJZ25vcmUgdGhpcyBmaWxlIGluIF9md2FsayB0byBhdm9pZCBwb3RlbnRpYWwgZGVhZGxvY2suICovCisJCWZwLT5fZmxhZ3MgfD0gX19TSUdOOworCQkodm9pZCkgX2Z3YWxrKGxmbHVzaCk7CisJCWZwLT5fZmxhZ3MgJj0gfl9fU0lHTjsKKworCQkvKiBOb3cgZmx1c2ggdGhpcyBmaWxlIHdpdGhvdXQgbG9ja2luZyBpdC4gKi8KKwkJaWYgKChmcC0+X2ZsYWdzICYgKF9fU0xCRnxfX1NXUikpID09IChfX1NMQkZ8X19TV1IpKQorCQkJX19zZmx1c2goZnApOworCX0KKwlmcC0+X3AgPSBmcC0+X2JmLl9iYXNlOworCWZwLT5fciA9ICgqZnAtPl9yZWFkKShmcC0+X2Nvb2tpZSwgKGNoYXIgKilmcC0+X3AsIGZwLT5fYmYuX3NpemUpOworCWZwLT5fZmxhZ3MgJj0gfl9fU01PRDsJLyogYnVmZmVyIGNvbnRlbnRzIGFyZSBhZ2FpbiBwcmlzdGluZSAqLworCWlmIChmcC0+X3IgPD0gMCkgeworCQlpZiAoZnAtPl9yID09IDApCisJCQlmcC0+X2ZsYWdzIHw9IF9fU0VPRjsKKwkJZWxzZSB7CisJCQlmcC0+X3IgPSAwOworCQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJCX0KKwkJcmV0dXJuIChFT0YpOworCX0KKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3JlbW92ZS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3JlbW92ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOWQ3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcmVtb3ZlLmMKQEAgLTAsMCArMSw0OSBAQAorLyoJJE9wZW5CU0Q6IHJlbW92ZS5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCitpbnQKK3JlbW92ZShjb25zdCBjaGFyICpmaWxlKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKGxzdGF0KGZpbGUsICZzdCkgPCAwKQorCQlyZXR1cm4gKC0xKTsKKwlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJcmV0dXJuIChybWRpcihmaWxlKSk7CisJcmV0dXJuICh1bmxpbmsoZmlsZSkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9yZXdpbmQuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9yZXdpbmQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdGRpby9yZXdpbmQuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Jld2luZC5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcmdldC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3JnZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2Q5N2NiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3JnZXQuYwpAQCAtMCwwICsxLDUxIEBACisvKgkkT3BlbkJTRDogcmdldC5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIEhhbmRsZSBnZXRjKCkgd2hlbiB0aGUgYnVmZmVyIHJhbiBvdXQ6CisgKiBSZWZpbGwsIHRoZW4gcmV0dXJuIHRoZSBmaXJzdCBjaGFyYWN0ZXIKKyAqIGluIHRoZSBuZXdseS1maWxsZWQgYnVmZmVyLgorICovCitpbnQKK19fc3JnZXQoRklMRSAqZnApCit7CisJX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOworCWlmIChfX3NyZWZpbGwoZnApID09IDApIHsKKwkJZnAtPl9yLS07CisJCXJldHVybiAoKmZwLT5fcCsrKTsKKwl9CisJcmV0dXJuIChFT0YpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3NjYW5mLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc2NhbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGNmMTJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3NjYW5mLmMKQEAgLTAsMCArMSw0OCBAQAorLyoJJE9wZW5CU0Q6IHNjYW5mLmMsdiAxLjEwIDIwMTEvMDUvMzAgMTg6NDg6MzMgbWFydHluYXMgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKy8qIFNDQU5GTElLRTEgKi8KK2ludAorc2NhbmYoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHJldDsKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdmZzY2FuZihzdGRpbiwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc2V0YnVmLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc2V0YnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzYjg5NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zZXRidWYuYwpAQCAtMCwwICsxLDQxIEBACisvKgkkT3BlbkJTRDogc2V0YnVmLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCit2b2lkCitzZXRidWYoRklMRSAqZnAsIGNoYXIgKmJ1ZikKK3sKKwkodm9pZCkgc2V0dmJ1ZihmcCwgYnVmLCBidWYgPyBfSU9GQkYgOiBfSU9OQkYsIEJVRlNJWik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc2V0YnVmZmVyLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc2V0YnVmZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcyNWZmNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zZXRidWZmZXIuYwpAQCAtMCwwICsxLDUxIEBACisvKgkkT3BlbkJTRDogc2V0YnVmZmVyLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKwordm9pZAorc2V0YnVmZmVyKEZJTEUgKmZwLCBjaGFyICpidWYsIGludCBzaXplKQoreworCisJKHZvaWQpc2V0dmJ1ZihmcCwgYnVmLCBidWYgPyBfSU9GQkYgOiBfSU9OQkYsIHNpemUpOworfQorCisvKgorICogc2V0IGxpbmUgYnVmZmVyaW5nCisgKi8KK2ludAorc2V0bGluZWJ1ZihGSUxFICpmcCkKK3sKKworCXJldHVybiAoc2V0dmJ1ZihmcCwgKGNoYXIgKilOVUxMLCBfSU9MQkYsIChzaXplX3QpMCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3NldHZidWYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zZXR2YnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0OWY3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zZXR2YnVmLmMKQEAgLTAsMCArMSwxNTQgQEAKKy8qCSRPcGVuQlNEOiBzZXR2YnVmLmMsdiAxLjExIDIwMDkvMTEvMDkgMDA6MTg6Mjcga3VydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogU2V0IG9uZSBvZiB0aGUgdGhyZWUga2luZHMgb2YgYnVmZmVyaW5nLCBvcHRpb25hbGx5IGluY2x1ZGluZworICogYSBidWZmZXIuCisgKi8KK2ludAorc2V0dmJ1ZihGSUxFICpmcCwgY2hhciAqYnVmLCBpbnQgbW9kZSwgc2l6ZV90IHNpemUpCit7CisJaW50IHJldCwgZmxhZ3M7CisJc2l6ZV90IGlvc2l6ZTsKKwlpbnQgdHR5ZmxhZzsKKworCS8qCisJICogVmVyaWZ5IGFyZ3VtZW50cy4gIFRoZSBgaW50JyBsaW1pdCBvbiBgc2l6ZScgaXMgZHVlIHRvIHRoaXMKKwkgKiBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLiAgTm90ZSwgYnVmIGFuZCBzaXplIGFyZSBpZ25vcmVkCisJICogd2hlbiBzZXR0aW5nIF9JT05CRi4KKwkgKi8KKwlpZiAobW9kZSAhPSBfSU9OQkYpCisJCWlmICgobW9kZSAhPSBfSU9GQkYgJiYgbW9kZSAhPSBfSU9MQkYpIHx8IChpbnQpc2l6ZSA8IDApCisJCQlyZXR1cm4gKEVPRik7CisKKwkvKgorCSAqIFdyaXRlIGN1cnJlbnQgYnVmZmVyLCBpZiBhbnkuICBEaXNjYXJkIHVucmVhZCBpbnB1dCAoaW5jbHVkaW5nCisJICogdW5nZXRjIGRhdGEpLCBjYW5jZWwgbGluZSBidWZmZXJpbmcsIGFuZCBmcmVlIG9sZCBidWZmZXIgaWYKKwkgKiBtYWxsb2MoKWVkLiAgV2UgYWxzbyBjbGVhciBhbnkgZW9mIGNvbmRpdGlvbiwgYXMgaWYgdGhpcyB3ZXJlCisJICogYSBzZWVrLgorCSAqLworCUZMT0NLRklMRShmcCk7CisJcmV0ID0gMDsKKwkodm9pZClfX3NmbHVzaChmcCk7CisJaWYgKEhBU1VCKGZwKSkKKwkJRlJFRVVCKGZwKTsKKwlXQ0lPX0ZSRUUoZnApOworCWZwLT5fciA9IGZwLT5fbGJmc2l6ZSA9IDA7CisJZmxhZ3MgPSBmcC0+X2ZsYWdzOworCWlmIChmbGFncyAmIF9fU01CRikKKwkJZnJlZSgodm9pZCAqKWZwLT5fYmYuX2Jhc2UpOworCWZsYWdzICY9IH4oX19TTEJGIHwgX19TTkJGIHwgX19TTUJGIHwgX19TT1BUIHwgX19TTlBUIHwgX19TRU9GKTsKKworCS8qIElmIHNldHRpbmcgdW5idWZmZXJlZCBtb2RlLCBza2lwIGFsbCB0aGUgaGFyZCB3b3JrLiAqLworCWlmIChtb2RlID09IF9JT05CRikKKwkJZ290byBuYmY7CisKKwkvKgorCSAqIEZpbmQgb3B0aW1hbCBJL08gc2l6ZSBmb3Igc2VlayBvcHRpbWl6YXRpb24uICBUaGlzIGFsc28gcmV0dXJucworCSAqIGEgYHR0eSBmbGFnJyB0byBzdWdnZXN0IHRoYXQgd2UgY2hlY2sgaXNhdHR5KGZkKSwgYnV0IHdlIGRvIG5vdAorCSAqIGNhcmUgc2luY2Ugb3VyIGNhbGxlciB0b2xkIHVzIGhvdyB0byBidWZmZXIuCisJICovCisJZmxhZ3MgfD0gX19zd2hhdGJ1ZihmcCwgJmlvc2l6ZSwgJnR0eWZsYWcpOworCWlmIChzaXplID09IDApIHsKKwkJYnVmID0gTlVMTDsJLyogZm9yY2UgbG9jYWwgYWxsb2NhdGlvbiAqLworCQlzaXplID0gaW9zaXplOworCX0KKworCS8qIEFsbG9jYXRlIGJ1ZmZlciBpZiBuZWVkZWQuICovCisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCWlmICgoYnVmID0gbWFsbG9jKHNpemUpKSA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogVW5hYmxlIHRvIGhvbm9yIHVzZXIncyByZXF1ZXN0LiAgV2Ugd2lsbCByZXR1cm4KKwkJCSAqIGZhaWx1cmUsIGJ1dCB0cnkgYWdhaW4gd2l0aCBmaWxlIHN5c3RlbSBzaXplLgorCQkJICovCisJCQlyZXQgPSBFT0Y7CisJCQlpZiAoc2l6ZSAhPSBpb3NpemUpIHsKKwkJCQlzaXplID0gaW9zaXplOworCQkJCWJ1ZiA9IG1hbGxvYyhzaXplKTsKKwkJCX0KKwkJfQorCQlpZiAoYnVmID09IE5VTEwpIHsKKwkJCS8qIE5vIGx1Y2s7IHN3aXRjaCB0byB1bmJ1ZmZlcmVkIEkvTy4gKi8KK25iZjoKKwkJCWZwLT5fZmxhZ3MgPSBmbGFncyB8IF9fU05CRjsKKwkJCWZwLT5fdyA9IDA7CisJCQlmcC0+X2JmLl9iYXNlID0gZnAtPl9wID0gZnAtPl9uYnVmOworCQkJZnAtPl9iZi5fc2l6ZSA9IDE7CisJCQlGVU5MT0NLRklMRShmcCk7CisJCQlyZXR1cm4gKHJldCk7CisJCX0KKwkJZmxhZ3MgfD0gX19TTUJGOworCX0KKworCS8qCisJICogS2lsbCBhbnkgc2VlayBvcHRpbWl6YXRpb24gaWYgdGhlIGJ1ZmZlciBpcyBub3QgdGhlCisJICogcmlnaHQgc2l6ZS4KKwkgKgorCSAqIFNIT1VMRCBXRSBBTExPVyBNVUxUSVBMRVMgSEVSRSAoaS5lLiwgb2sgaWZmIChzaXplICUgaW9zaXplKSA9PSAwKT8KKwkgKi8KKwlpZiAoc2l6ZSAhPSBpb3NpemUpCisJCWZsYWdzIHw9IF9fU05QVDsKKworCS8qCisJICogRml4IHVwIHRoZSBGSUxFIGZpZWxkcywgYW5kIHNldCBfX2NsZWFudXAgZm9yIG91dHB1dCBmbHVzaCBvbgorCSAqIGV4aXQgKHNpbmNlIHdlIGFyZSBidWZmZXJlZCBpbiBzb21lIHdheSkuCisJICovCisJaWYgKG1vZGUgPT0gX0lPTEJGKQorCQlmbGFncyB8PSBfX1NMQkY7CisJZnAtPl9mbGFncyA9IGZsYWdzOworCWZwLT5fYmYuX2Jhc2UgPSBmcC0+X3AgPSAodW5zaWduZWQgY2hhciAqKWJ1ZjsKKwlmcC0+X2JmLl9zaXplID0gc2l6ZTsKKwkvKiBmcC0+X2xiZnNpemUgaXMgc3RpbGwgMCAqLworCWlmIChmbGFncyAmIF9fU1dSKSB7CisJCS8qCisJCSAqIEJlZ2luIG9yIGNvbnRpbnVlIHdyaXRpbmc6IHNlZSBfX3N3c2V0dXAoKS4gIE5vdGUKKwkJICogdGhhdCBfX1NOQkYgaXMgaW1wb3NzaWJsZSAoaXQgd2FzIGhhbmRsZWQgZWFybGllcikuCisJCSAqLworCQlpZiAoZmxhZ3MgJiBfX1NMQkYpIHsKKwkJCWZwLT5fdyA9IDA7CisJCQlmcC0+X2xiZnNpemUgPSAtZnAtPl9iZi5fc2l6ZTsKKwkJfSBlbHNlCisJCQlmcC0+X3cgPSBzaXplOworCX0gZWxzZSB7CisJCS8qIGJlZ2luL2NvbnRpbnVlIHJlYWRpbmcsIG9yIHN0YXkgaW4gaW50ZXJtZWRpYXRlIHN0YXRlICovCisJCWZwLT5fdyA9IDA7CisJfQorCUZVTkxPQ0tGSUxFKGZwKTsKKwlfX2F0ZXhpdF9yZWdpc3Rlcl9jbGVhbnVwKF9jbGVhbnVwKTsKKworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zc2NhbmYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zc2NhbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzcxY2E2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3NzY2FuZi5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qCSRPcGVuQlNEOiBzc2NhbmYuYyx2IDEuMTQgMjAxMS8xMS8wOCAxODozMDo0MiBndWVudGhlciBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKiBBUkdTVVNFRCAqLworc3RhdGljIGludAorZW9mcmVhZCh2b2lkICpjb29raWUsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKworCXJldHVybiAoMCk7Cit9CisKKy8qIFNDQU5GTElLRTIgKi8KK2ludAorc3NjYW5mKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHJldDsKKwl2YV9saXN0IGFwOworCUZJTEUgZjsKKwlzdHJ1Y3QgX19zZmlsZWV4dCBmZXh0OworCisJX0ZJTEVFWFRfU0VUVVAoJmYsICZmZXh0KTsKKwlmLl9mbGFncyA9IF9fU1JEOworCWYuX2JmLl9iYXNlID0gZi5fcCA9ICh1bnNpZ25lZCBjaGFyICopc3RyOworCWYuX2JmLl9zaXplID0gZi5fciA9IHN0cmxlbihzdHIpOworCWYuX3JlYWQgPSBlb2ZyZWFkOworCWYuX2xiLl9iYXNlID0gTlVMTDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSBfX3N2ZnNjYW5mKCZmLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zdGRpby5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3N0ZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhMjdiNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zdGRpby5jCkBAIC0wLDAgKzEsODkgQEAKKy8qCSRPcGVuQlNEOiBzdGRpby5jLHYgMS45IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogU21hbGwgc3RhbmRhcmQgSS9PL3NlZWsvY2xvc2UgZnVuY3Rpb25zLgorICogVGhlc2UgbWFpbnRhaW4gdGhlIGBrbm93biBzZWVrIG9mZnNldCcgZm9yIHNlZWsgb3B0aW1pc2F0aW9uLgorICovCitpbnQKK19fc3JlYWQodm9pZCAqY29va2llLCBjaGFyICpidWYsIGludCBuKQoreworCUZJTEUgKmZwID0gY29va2llOworCWludCByZXQ7CisJCisJcmV0ID0gcmVhZChmcC0+X2ZpbGUsIGJ1Ziwgbik7CisJLyogaWYgdGhlIHJlYWQgc3VjY2VlZGVkLCB1cGRhdGUgdGhlIGN1cnJlbnQgb2Zmc2V0ICovCisJaWYgKHJldCA+PSAwKQorCQlmcC0+X29mZnNldCArPSByZXQ7CisJZWxzZQorCQlmcC0+X2ZsYWdzICY9IH5fX1NPRkY7CS8qIHBhcmFub2lhICovCisJcmV0dXJuIChyZXQpOworfQorCitpbnQKK19fc3dyaXRlKHZvaWQgKmNvb2tpZSwgY29uc3QgY2hhciAqYnVmLCBpbnQgbikKK3sKKwlGSUxFICpmcCA9IGNvb2tpZTsKKworCWlmIChmcC0+X2ZsYWdzICYgX19TQVBQKQorCQkodm9pZCkgbHNlZWsoZnAtPl9maWxlLCAob2ZmX3QpMCwgU0VFS19FTkQpOworCWZwLT5fZmxhZ3MgJj0gfl9fU09GRjsJLyogaW4gY2FzZSBGQVBQRU5EIG1vZGUgaXMgc2V0ICovCisJcmV0dXJuICh3cml0ZShmcC0+X2ZpbGUsIGJ1ZiwgbikpOworfQorCitmcG9zX3QKK19fc3NlZWsodm9pZCAqY29va2llLCBmcG9zX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQoreworCUZJTEUgKmZwID0gY29va2llOworCW9mZl90IHJldDsKKwkKKwlyZXQgPSBsc2VlayhmcC0+X2ZpbGUsIChvZmZfdClvZmZzZXQsIHdoZW5jZSk7CisJaWYgKHJldCA9PSAob2ZmX3QpLTEpCisJCWZwLT5fZmxhZ3MgJj0gfl9fU09GRjsKKwllbHNlIHsKKwkJZnAtPl9mbGFncyB8PSBfX1NPRkY7CisJCWZwLT5fb2Zmc2V0ID0gcmV0OworCX0KKwlyZXR1cm4gKHJldCk7Cit9CisKK2ludAorX19zY2xvc2Uodm9pZCAqY29va2llKQoreworCXJldHVybiAoY2xvc2UoKChGSUxFICopY29va2llKS0+X2ZpbGUpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zd3ByaW50Zi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3N3cHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkyOGFlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zd3ByaW50Zi5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCSRPcGVuQlNEOiBzd3ByaW50Zi5jLHYgMS41IDIwMTIvMTIvMDUgMjM6MjA6MDEgZGVyYWFkdCBFeHAgJCAqLworLyoJJE5ldEJTRDogc3dwcmludGYuYyx2IDEuMSAyMDA1LzA1LzE0IDIzOjUxOjAyIGNocmlzdG9zIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAyIFRpbSBKLiBSb2JiaW5zCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKK2ludAorc3dwcmludGYod2NoYXJfdCAqIF9fcmVzdHJpY3Qgcywgc2l6ZV90IG4sIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IGZtdCwgLi4uKQoreworCWludCByZXQ7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHZzd3ByaW50ZihzLCBuLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3N3c2NhbmYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zd3NjYW5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg1ZTllZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zd3NjYW5mLmMKQEAgLTAsMCArMSw0NCBAQAorLyogJE9wZW5CU0Q6IHN3c2NhbmYuYyx2IDEuMiAyMDEyLzEyLzA1IDIzOjIwOjAxIGRlcmFhZHQgRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgVGltIEouIFJvYmJpbnMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworaW50Citzd3NjYW5mKGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IHN0ciwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgcjsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXIgPSB2c3dzY2FuZihzdHIsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlyZXR1cm4gKHIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3RlbXBuYW0uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby90ZW1wbmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNmMmFiNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby90ZW1wbmFtLmMKQEAgLTAsMCArMSwxMDEgQEAKKy8qCSRPcGVuQlNEOiB0ZW1wbmFtLmMsdiAxLjE3IDIwMTMvMDkvMzAgMTI6MDI6MzUgbWlsbGVydCBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHBhdGhzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworX193YXJuX3JlZmVyZW5jZXModGVtcG5hbSwKKyAgICAid2FybmluZzogdGVtcG5hbSgpIHBvc3NpYmx5IHVzZWQgdW5zYWZlbHk7IGNvbnNpZGVyIHVzaW5nIG1rc3RlbXAoKSIpOworCitleHRlcm4gY2hhciAqX21rdGVtcChjaGFyICopOworCitjaGFyICoKK3RlbXBuYW0oY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpwZngpCit7CisJaW50IHN2ZXJybm8sIGxlbjsKKwljaGFyICpmLCAqbmFtZTsKKworCWlmICghKG5hbWUgPSBtYWxsb2MoUEFUSF9NQVgpKSkKKwkJcmV0dXJuKE5VTEwpOworCisJaWYgKCFwZngpCisJCXBmeCA9ICJ0bXAuIjsKKworCWlmIChpc3NldHVnaWQoKSA9PSAwICYmIChmID0gZ2V0ZW52KCJUTVBESVIiKSkgJiYgKmYgIT0gJ1wwJykgeworCQlsZW4gPSBzbnByaW50ZihuYW1lLCBQQVRIX01BWCwgIiVzJXMlc1hYWFhYWFhYWFgiLCBmLAorCQkgICAgZltzdHJsZW4oZikgLSAxXSA9PSAnLycgPyAiIiA6ICIvIiwgcGZ4KTsKKwkJaWYgKGxlbiA8IDAgfHwgbGVuID49IFBBVEhfTUFYKSB7CisJCQllcnJubyA9IEVOQU1FVE9PTE9ORzsKKwkJCXJldHVybihOVUxMKTsKKwkJfQorCQlpZiAoKGYgPSBfbWt0ZW1wKG5hbWUpKSkKKwkJCXJldHVybihmKTsKKwl9CisKKwlpZiAoZGlyICE9IE5VTEwpIHsKKwkJZiA9ICpkaXIgPyAoY2hhciAqKWRpciA6ICIuIjsKKwkJbGVuID0gc25wcmludGYobmFtZSwgUEFUSF9NQVgsICIlcyVzJXNYWFhYWFhYWFhYIiwgZiwKKwkJICAgIGZbc3RybGVuKGYpIC0gMV0gPT0gJy8nID8gIiIgOiAiLyIsIHBmeCk7CisJCWlmIChsZW4gPCAwIHx8IGxlbiA+PSBQQVRIX01BWCkgeworCQkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCQlyZXR1cm4oTlVMTCk7CisJCX0KKwkJaWYgKChmID0gX21rdGVtcChuYW1lKSkpCisJCQlyZXR1cm4oZik7CisJfQorCisJZiA9IFBfdG1wZGlyOworCWxlbiA9IHNucHJpbnRmKG5hbWUsIFBBVEhfTUFYLCAiJXMlc1hYWFhYWFhYWCIsIGYsIHBmeCk7CisJaWYgKGxlbiA8IDAgfHwgbGVuID49IFBBVEhfTUFYKSB7CisJCWVycm5vID0gRU5BTUVUT09MT05HOworCQlyZXR1cm4oTlVMTCk7CisJfQorCWlmICgoZiA9IF9ta3RlbXAobmFtZSkpKQorCQlyZXR1cm4oZik7CisKKwlmID0gX1BBVEhfVE1QOworCWxlbiA9IHNucHJpbnRmKG5hbWUsIFBBVEhfTUFYLCAiJXMlc1hYWFhYWFhYWCIsIGYsIHBmeCk7CisJaWYgKGxlbiA8IDAgfHwgbGVuID49IFBBVEhfTUFYKSB7CisJCWVycm5vID0gRU5BTUVUT09MT05HOworCQlyZXR1cm4oTlVMTCk7CisJfQorCWlmICgoZiA9IF9ta3RlbXAobmFtZSkpKQorCQlyZXR1cm4oZik7CisKKwlzdmVycm5vID0gZXJybm87CisJZnJlZShuYW1lKTsKKwllcnJubyA9IHN2ZXJybm87CisJcmV0dXJuKE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3RtcG5hbS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3RtcG5hbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZTBhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdG1wbmFtLmMKQEAgLTAsMCArMSw1NSBAQAorLyoJJE9wZW5CU0Q6IHRtcG5hbS5jLHYgMS4xMCAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MywgMTk5NAorICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK19fd2Fybl9yZWZlcmVuY2VzKHRtcG5hbSwKKyAgICAid2FybmluZzogdG1wbmFtKCkgcG9zc2libHkgdXNlZCB1bnNhZmVseTsgY29uc2lkZXIgdXNpbmcgbWtzdGVtcCgpIik7CisKK2V4dGVybiBjaGFyICpfbWt0ZW1wKGNoYXIgKik7CisKK2NoYXIgKgordG1wbmFtKGNoYXIgKnMpCit7CisJc3RhdGljIHVfbG9uZyB0bXBjb3VudDsKKwlzdGF0aWMgY2hhciBidWZbTF90bXBuYW1dOworCisJaWYgKHMgPT0gTlVMTCkKKwkJcyA9IGJ1ZjsKKwkodm9pZClzbnByaW50ZihzLCBMX3RtcG5hbSwgIiVzdG1wLiVsdS5YWFhYWFhYWFgiLCBQX3RtcGRpciwgdG1wY291bnQpOworCSsrdG1wY291bnQ7CisJcmV0dXJuIChfbWt0ZW1wKHMpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby91bmdldGMuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby91bmdldGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzU3MzNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3VuZ2V0Yy5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKgkkT3BlbkJTRDogdW5nZXRjLmMsdiAxLjEyIDIwMDkvMTEvMDkgMDA6MTg6Mjcga3VydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCitzdGF0aWMgaW50IF9fc3VibW9yZShGSUxFICopOworLyoKKyAqIEV4cGFuZCB0aGUgdW5nZXRjIGJ1ZmZlciBgaW4gcGxhY2UnLiAgVGhhdCBpcywgYWRqdXN0IGZwLT5fcCB3aGVuCisgKiB0aGUgYnVmZmVyIG1vdmVzLCBzbyB0aGF0IGl0IHBvaW50cyB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoZSBlbmQsCisgKiBhbmQgbW92ZSB0aGUgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBhcm91bmQgYXMgbmVjZXNzYXJ5IHNvIHRoYXQgdGhleQorICogYXJlIGFsbCBhdCB0aGUgZW5kIChzdGFjay1zdHlsZSkuCisgKi8KK3N0YXRpYyBpbnQKK19fc3VibW9yZShGSUxFICpmcCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyICpwOworCisJaWYgKF9VQihmcCkuX2Jhc2UgPT0gZnAtPl91YnVmKSB7CisJCS8qCisJCSAqIEdldCBhIG5ldyBidWZmZXIgKHJhdGhlciB0aGFuIGV4cGFuZGluZyB0aGUgb2xkIG9uZSkuCisJCSAqLworCQlpZiAoKHAgPSBtYWxsb2MoKHNpemVfdClCVUZTSVopKSA9PSBOVUxMKQorCQkJcmV0dXJuIChFT0YpOworCQlfVUIoZnApLl9iYXNlID0gcDsKKwkJX1VCKGZwKS5fc2l6ZSA9IEJVRlNJWjsKKwkJcCArPSBCVUZTSVogLSBzaXplb2YoZnAtPl91YnVmKTsKKwkJZm9yIChpID0gc2l6ZW9mKGZwLT5fdWJ1Zik7IC0taSA+PSAwOykKKwkJCXBbaV0gPSBmcC0+X3VidWZbaV07CisJCWZwLT5fcCA9IHA7CisJCXJldHVybiAoMCk7CisJfQorCWkgPSBfVUIoZnApLl9zaXplOworCXAgPSByZWFsbG9jKF9VQihmcCkuX2Jhc2UsIGkgPDwgMSk7CisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuIChFT0YpOworCS8qIG5vIG92ZXJsYXAgKGhlbmNlIGNhbiB1c2UgbWVtY3B5KSBiZWNhdXNlIHdlIGRvdWJsZWQgdGhlIHNpemUgKi8KKwkodm9pZCltZW1jcHkoKHZvaWQgKikocCArIGkpLCAodm9pZCAqKXAsIChzaXplX3QpaSk7CisJZnAtPl9wID0gcCArIGk7CisJX1VCKGZwKS5fYmFzZSA9IHA7CisJX1VCKGZwKS5fc2l6ZSA9IGkgPDwgMTsKKwlyZXR1cm4gKDApOworfQorCitpbnQKK3VuZ2V0YyhpbnQgYywgRklMRSAqZnApCit7CisJaWYgKGMgPT0gRU9GKQorCQlyZXR1cm4gKEVPRik7CisJaWYgKCFfX3NkaWRpbml0KQorCQlfX3Npbml0KCk7CisJRkxPQ0tGSUxFKGZwKTsKKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAtMSk7CisJaWYgKChmcC0+X2ZsYWdzICYgX19TUkQpID09IDApIHsKKwkJLyoKKwkJICogTm90IGFscmVhZHkgcmVhZGluZzogbm8gZ29vZCB1bmxlc3MgcmVhZGluZy1hbmQtd3JpdGluZy4KKwkJICogT3RoZXJ3aXNlLCBmbHVzaCBhbnkgY3VycmVudCB3cml0ZSBzdHVmZi4KKwkJICovCisJCWlmICgoZnAtPl9mbGFncyAmIF9fU1JXKSA9PSAwKSB7CitlcnJvcjoJCQlGVU5MT0NLRklMRShmcCk7CisJCQlyZXR1cm4gKEVPRik7CisJCX0KKwkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NXUikgeworCQkJaWYgKF9fc2ZsdXNoKGZwKSkKKwkJCQlnb3RvIGVycm9yOworCQkJZnAtPl9mbGFncyAmPSB+X19TV1I7CisJCQlmcC0+X3cgPSAwOworCQkJZnAtPl9sYmZzaXplID0gMDsKKwkJfQorCQlmcC0+X2ZsYWdzIHw9IF9fU1JEOworCX0KKwljID0gKHVuc2lnbmVkIGNoYXIpYzsKKworCS8qCisJICogSWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgdW5nZXRjJ2luZywganVzdCBjb250aW51ZS4KKwkgKiBUaGlzIG1heSByZXF1aXJlIGV4cGFuZGluZyB0aGUgY3VycmVudCB1bmdldGMgYnVmZmVyLgorCSAqLworCWlmIChIQVNVQihmcCkpIHsKKwkJaWYgKGZwLT5fciA+PSBfVUIoZnApLl9zaXplICYmIF9fc3VibW9yZShmcCkpCisJCQlnb3RvIGVycm9yOworCQkqLS1mcC0+X3AgPSBjOworaW5jX3JldDoJZnAtPl9yKys7CisJCUZVTkxPQ0tGSUxFKGZwKTsKKwkJcmV0dXJuIChjKTsKKwl9CisJZnAtPl9mbGFncyAmPSB+X19TRU9GOworCisJLyoKKwkgKiBJZiB3ZSBjYW4gaGFuZGxlIHRoaXMgYnkgc2ltcGx5IGJhY2tpbmcgdXAsIGRvIHNvLAorCSAqIGJ1dCBuZXZlciByZXBsYWNlIHRoZSBvcmlnaW5hbCBjaGFyYWN0ZXIuCisJICogKFRoaXMgbWFrZXMgc3NjYW5mKCkgd29yayB3aGVuIHNjYW5uaW5nIGBjb25zdCcgZGF0YS4pCisJICovCisJaWYgKGZwLT5fYmYuX2Jhc2UgIT0gTlVMTCAmJiBmcC0+X3AgPiBmcC0+X2JmLl9iYXNlICYmCisJICAgIGZwLT5fcFstMV0gPT0gYykgeworCQlmcC0+X3AtLTsKKwkJZ290byBpbmNfcmV0OworCX0KKworCS8qCisJICogQ3JlYXRlIGFuIHVuZ2V0YyBidWZmZXIuCisJICogSW5pdGlhbGx5LCB3ZSB3aWxsIHVzZSB0aGUgYHJlc2VydmUnIGJ1ZmZlci4KKwkgKi8KKwlmcC0+X3VyID0gZnAtPl9yOworCWZwLT5fdXAgPSBmcC0+X3A7CisJX1VCKGZwKS5fYmFzZSA9IGZwLT5fdWJ1ZjsKKwlfVUIoZnApLl9zaXplID0gc2l6ZW9mKGZwLT5fdWJ1Zik7CisJZnAtPl91YnVmW3NpemVvZihmcC0+X3VidWYpIC0gMV0gPSBjOworCWZwLT5fcCA9ICZmcC0+X3VidWZbc2l6ZW9mKGZwLT5fdWJ1ZikgLSAxXTsKKwlmcC0+X3IgPSAxOworCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKGMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3VuZ2V0d2MuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby91bmdldHdjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzMjFlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby91bmdldHdjLmMKQEAgLTAsMCArMSw3NyBAQAorLyoJJE9wZW5CU0Q6IHVuZ2V0d2MuYyx2IDEuNSAyMDExLzEwLzE2IDEzOjIwOjUxIHN0c3AgRXhwICQJKi8KKy8qICROZXRCU0Q6IHVuZ2V0d2MuYyx2IDEuMiAyMDAzLzAxLzE4IDExOjI5OjU5IHRob3JwZWogRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpMjAwMSBDaXRydXMgUHJvamVjdCwKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJENpdHJ1cyQKKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKword2ludF90CitfX3VuZ2V0d2Mod2ludF90IHdjLCBGSUxFICpmcCkKK3sKKwlzdHJ1Y3Qgd2NoYXJfaW9fZGF0YSAqd2NpbzsKKworCWlmICh3YyA9PSBXRU9GKQorCQlyZXR1cm4gV0VPRjsKKworCV9TRVRfT1JJRU5UQVRJT04oZnAsIDEpOworCS8qCisJICogWFhYIHNpbmNlIHdlIGhhdmUgbm8gd2F5IHRvIHRyYW5zZm9ybSBhIHdjaGFyIHN0cmluZyB0bworCSAqIGEgY2hhciBzdHJpbmcgaW4gcmV2ZXJzZSBvcmRlciwgd2UgY2FuJ3QgdXNlIHVuZ2V0Yy4KKwkgKi8KKwkvKiBYWFggc2hvdWxkIHdlIGZsdXNoIHVuZ2V0YyBidWZmZXI/ICovCisKKwl3Y2lvID0gV0NJT19HRVQoZnApOworCWlmICh3Y2lvID09IDApIHsKKwkJZXJybm8gPSBFTk9NRU07IC8qIFhYWCAqLworCQlyZXR1cm4gV0VPRjsKKwl9CisKKwlpZiAod2Npby0+d2Npb191bmdldHdjX2luYnVmID49IFdDSU9fVU5HRVRXQ19CVUZTSVpFKSB7CisJCXJldHVybiBXRU9GOworCX0KKworCXdjaW8tPndjaW9fdW5nZXR3Y19idWZbd2Npby0+d2Npb191bmdldHdjX2luYnVmKytdID0gd2M7CisJX19zY2xlYXJlcnIoZnApOworCisJcmV0dXJuIHdjOworfQorCit3aW50X3QKK3VuZ2V0d2Mod2ludF90IHdjLCBGSUxFICpmcCkKK3sKKwl3aW50X3QgcjsKKworCUZMT0NLRklMRShmcCk7CisJciA9IF9fdW5nZXR3Yyh3YywgZnApOworCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKHIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zhc3ByaW50Zi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zhc3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZTdjNWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdmFzcHJpbnRmLmMKQEAgLTAsMCArMSw1OCBAQAorLyoJJE9wZW5CU0Q6IHZhc3ByaW50Zi5jLHYgMS4xNiAyMDA5LzExLzA5IDAwOjE4OjI3IGt1cnQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NyBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKK2ludAordmFzcHJpbnRmKGNoYXIgKipzdHIsIGNvbnN0IGNoYXIgKmZtdCwgX192YV9saXN0IGFwKQoreworCWludCByZXQ7CisJRklMRSBmOworCXN0cnVjdCBfX3NmaWxlZXh0IGZleHQ7CisJdW5zaWduZWQgY2hhciAqX2Jhc2U7CisKKwlfRklMRUVYVF9TRVRVUCgmZiwgJmZleHQpOworCWYuX2ZpbGUgPSAtMTsKKwlmLl9mbGFncyA9IF9fU1dSIHwgX19TU1RSIHwgX19TQUxDOworCWYuX2JmLl9iYXNlID0gZi5fcCA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKDEyOCk7CisJaWYgKGYuX2JmLl9iYXNlID09IE5VTEwpCisJCWdvdG8gZXJyOworCWYuX2JmLl9zaXplID0gZi5fdyA9IDEyNzsJCS8qIExlYXZlIHJvb20gZm9yIHRoZSBOVUwgKi8KKwlyZXQgPSBfX3ZmcHJpbnRmKCZmLCBmbXQsIGFwKTsKKwlpZiAocmV0ID09IC0xKQorCQlnb3RvIGVycjsKKwkqZi5fcCA9ICdcMCc7CisJX2Jhc2UgPSByZWFsbG9jKGYuX2JmLl9iYXNlLCByZXQgKyAxKTsKKwlpZiAoX2Jhc2UgPT0gTlVMTCkKKwkJZ290byBlcnI7CisJKnN0ciA9IChjaGFyICopX2Jhc2U7CisJcmV0dXJuIChyZXQpOworCitlcnI6CisJaWYgKGYuX2JmLl9iYXNlKSB7CisJCWZyZWUoZi5fYmYuX2Jhc2UpOworCQlmLl9iZi5fYmFzZSA9IE5VTEw7CisJfQorCSpzdHIgPSBOVUxMOworCWVycm5vID0gRU5PTUVNOworCXJldHVybiAoLTEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ZkcHJpbnRmLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdmRwcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWMxOTY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ZkcHJpbnRmLmMKQEAgLTAsMCArMSw3MyBAQAorLyoJJE9wZW5CU0Q6IHZkcHJpbnRmLmMsdiAxLjEgMjAxMy8wMS8zMCAwMDowODoxMyBicmFkIEV4cCAkCSovCisvKgkkRnJlZUJTRDogc3JjL2xpYi9saWJjL3N0ZGlvL3ZkcHJpbnRmLmMsdiAxLjQgMjAxMi8xMS8xNyAwMTo0OTo0MCBzdm5leHAgRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgd2VyZSBkZXZlbG9wZWQgYnkgRGF2aWQgQ2hpc25hbGwKKyAqIHVuZGVyIHNwb25zb3JzaGlwIGZyb20gdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAibG9jYWwuaCIKKworc3RhdGljIGludAorX19kd3JpdGUodm9pZCAqY29va2llLCBjb25zdCBjaGFyICpidWYsIGludCBuKQoreworCWludCAqZmRwID0gY29va2llOworCXJldHVybiAod3JpdGUoKmZkcCwgYnVmLCBuKSk7Cit9CisKK2ludAordmRwcmludGYoaW50IGZkLCBjb25zdCBjaGFyICogX19yZXN0cmljdCBmbXQsIHZhX2xpc3QgYXApCit7CisJRklMRSBmOworCXN0cnVjdCBfX3NmaWxlZXh0IGZleHQ7CisJdW5zaWduZWQgY2hhciBidWZbQlVGU0laXTsKKwlpbnQgcmV0OworCisJX0ZJTEVFWFRfU0VUVVAoJmYsICZmZXh0KTsKKworCWYuX3AgPSBidWY7CisJZi5fdyA9IHNpemVvZihidWYpOworCWYuX2ZsYWdzID0gX19TV1I7CisJZi5fZmlsZSA9IC0xOworCWYuX2JmLl9iYXNlID0gYnVmOworCWYuX2JmLl9zaXplID0gc2l6ZW9mKGJ1Zik7CisJZi5fY29va2llID0gJmZkOworCWYuX3dyaXRlID0gX19kd3JpdGU7CisKKwlpZiAoKHJldCA9IF9fdmZwcmludGYoJmYsIGZtdCwgYXApKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gZmZsdXNoKCZmKSA/IEVPRiA6IHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92ZnByaW50Zi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ZmcHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4ZmYzMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92ZnByaW50Zi5jCkBAIC0wLDAgKzEsMTU1NSBAQAorLyoJJE9wZW5CU0Q6IHZmcHJpbnRmLmMsdiAxLjY2IDIwMTQvMDUvMDMgMTI6MzY6NDUgZGVyYWFkdCBFeHAgJAkqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBBY3R1YWwgcHJpbnRmIGlubmFyZHMuCisgKgorICogVGhpcyBjb2RlIGlzIGxhcmdlIGFuZCBjb21wbGljYXRlZC4uLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsYW5naW5mby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworI2luY2x1ZGUgImxvY2FsLmgiCisjaW5jbHVkZSAiZnZ3cml0ZS5oIgorCit1bmlvbiBhcmcgeworCWludAkJCWludGFyZzsKKwl1bnNpZ25lZCBpbnQJCXVpbnRhcmc7CisJbG9uZwkJCWxvbmdhcmc7CisJdW5zaWduZWQgbG9uZwkJdWxvbmdhcmc7CisJbG9uZyBsb25nCQlsb25nbG9uZ2FyZzsKKwl1bnNpZ25lZCBsb25nIGxvbmcJdWxvbmdsb25nYXJnOworCXB0cmRpZmZfdAkJcHRyZGlmZmFyZzsKKwlzaXplX3QJCQlzaXplYXJnOworCXNzaXplX3QJCQlzc2l6ZWFyZzsKKwlpbnRtYXhfdAkJaW50bWF4YXJnOworCXVpbnRtYXhfdAkJdWludG1heGFyZzsKKwl2b2lkCQkJKnB2b2lkYXJnOworCWNoYXIJCQkqcGNoYXJhcmc7CisJc2lnbmVkIGNoYXIJCSpwc2NoYXJhcmc7CisJc2hvcnQJCQkqcHNob3J0YXJnOworCWludAkJCSpwaW50YXJnOworCWxvbmcJCQkqcGxvbmdhcmc7CisJbG9uZyBsb25nCQkqcGxvbmdsb25nYXJnOworCXB0cmRpZmZfdAkJKnBwdHJkaWZmYXJnOworCXNzaXplX3QJCQkqcHNzaXplYXJnOworCWludG1heF90CQkqcGludG1heGFyZzsKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCWRvdWJsZQkJCWRvdWJsZWFyZzsKKwlsb25nIGRvdWJsZQkJbG9uZ2RvdWJsZWFyZzsKKyNlbmRpZgorI2lmZGVmIFBSSU5URl9XSURFX0NIQVIKKwl3aW50X3QJCQl3aW50YXJnOworCXdjaGFyX3QJCQkqcHdjaGFyYXJnOworI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9fZmluZF9hcmd1bWVudHMoY29uc3QgY2hhciAqZm10MCwgdmFfbGlzdCBhcCwgdW5pb24gYXJnICoqYXJndGFibGUsCisgICAgc2l6ZV90ICphcmd0YWJsZXNpeik7CitzdGF0aWMgaW50IF9fZ3Jvd190eXBlX3RhYmxlKHVuc2lnbmVkIGNoYXIgKip0eXBldGFibGUsIGludCAqdGFibGVzaXplKTsKKworLyoKKyAqIEZsdXNoIG91dCBhbGwgdGhlIHZlY3RvcnMgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gdWlvLAorICogdGhlbiByZXNldCBpdCBzbyB0aGF0IGl0IGNhbiBiZSByZXVzZWQuCisgKi8KK3N0YXRpYyBpbnQKK19fc3ByaW50KEZJTEUgKmZwLCBzdHJ1Y3QgX19zdWlvICp1aW8pCit7CisJaW50IGVycjsKKworCWlmICh1aW8tPnVpb19yZXNpZCA9PSAwKSB7CisJCXVpby0+dWlvX2lvdmNudCA9IDA7CisJCXJldHVybiAoMCk7CisJfQorCWVyciA9IF9fc2Z2d3JpdGUoZnAsIHVpbyk7CisJdWlvLT51aW9fcmVzaWQgPSAwOworCXVpby0+dWlvX2lvdmNudCA9IDA7CisJcmV0dXJuIChlcnIpOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBgZnByaW50ZiB0byB1bmJ1ZmZlcmVkIHVuaXggZmlsZSc6IGNyZWF0ZXMgYQorICogdGVtcG9yYXJ5IGJ1ZmZlci4gIFdlIG9ubHkgd29yayBvbiB3cml0ZS1vbmx5IGZpbGVzOyB0aGlzIGF2b2lkcworICogd29ycmllcyBhYm91dCB1bmdldGMgYnVmZmVycyBhbmQgc28gZm9ydGguCisgKi8KK3N0YXRpYyBpbnQKK19fc2JwcmludGYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwlpbnQgcmV0OworCUZJTEUgZmFrZTsKKwlzdHJ1Y3QgX19zZmlsZWV4dCBmYWtlZXh0OworCXVuc2lnbmVkIGNoYXIgYnVmW0JVRlNJWl07CisKKwlfRklMRUVYVF9TRVRVUCgmZmFrZSwgJmZha2VleHQpOworCS8qIGNvcHkgdGhlIGltcG9ydGFudCB2YXJpYWJsZXMgKi8KKwlmYWtlLl9mbGFncyA9IGZwLT5fZmxhZ3MgJiB+X19TTkJGOworCWZha2UuX2ZpbGUgPSBmcC0+X2ZpbGU7CisJZmFrZS5fY29va2llID0gZnAtPl9jb29raWU7CisJZmFrZS5fd3JpdGUgPSBmcC0+X3dyaXRlOworCisJLyogc2V0IHVwIHRoZSBidWZmZXIgKi8KKwlmYWtlLl9iZi5fYmFzZSA9IGZha2UuX3AgPSBidWY7CisJZmFrZS5fYmYuX3NpemUgPSBmYWtlLl93ID0gc2l6ZW9mKGJ1Zik7CisJZmFrZS5fbGJmc2l6ZSA9IDA7CS8qIG5vdCBhY3R1YWxseSB1c2VkLCBidXQgSnVzdCBJbiBDYXNlICovCisKKwkvKiBkbyB0aGUgd29yaywgdGhlbiBjb3B5IGFueSBlcnJvciBzdGF0dXMgKi8KKwlyZXQgPSBfX3ZmcHJpbnRmKCZmYWtlLCBmbXQsIGFwKTsKKwlpZiAocmV0ID49IDAgJiYgX19zZmx1c2goJmZha2UpKQorCQlyZXQgPSBFT0Y7CisJaWYgKGZha2UuX2ZsYWdzICYgX19TRVJSKQorCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwlyZXR1cm4gKHJldCk7Cit9CisKKyNpZmRlZiBQUklOVEZfV0lERV9DSEFSCisvKgorICogQ29udmVydCBhIHdpZGUgY2hhcmFjdGVyIHN0cmluZyBhcmd1bWVudCBmb3IgdGhlICVscyBmb3JtYXQgdG8gYSBtdWx0aWJ5dGUKKyAqIHN0cmluZyByZXByZXNlbnRhdGlvbi4gSWYgbm90IC0xLCBwcmVjIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YKKyAqIGJ5dGVzIHRvIG91dHB1dCwgYW5kIGFsc28gbWVhbnMgdGhhdCB3ZSBjYW4ndCBhc3N1bWUgdGhhdCB0aGUgd2lkZSBjaGFyCisgKiBzdHJpbmcgaXMgbnVsbC10ZXJtaW5hdGVkLgorICovCitzdGF0aWMgY2hhciAqCitfX3djc2NvbnYod2NoYXJfdCAqd2NzYXJnLCBpbnQgcHJlYykKK3sKKwltYnN0YXRlX3QgbWJzOworCWNoYXIgYnVmW01CX0xFTl9NQVhdOworCXdjaGFyX3QgKnA7CisJY2hhciAqY29udmJ1ZjsKKwlzaXplX3QgY2xlbiwgbmJ5dGVzOworCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB3ZSBjb3VsZCBvdXRwdXQuICovCisJaWYgKHByZWMgPCAwKSB7CisJCW1lbXNldCgmbWJzLCAwLCBzaXplb2YobWJzKSk7CisJCXAgPSB3Y3Nhcmc7CisJCW5ieXRlcyA9IHdjc3J0b21icyhOVUxMLCAoY29uc3Qgd2NoYXJfdCAqKikmcCwgMCwgJm1icyk7CisJCWlmIChuYnl0ZXMgPT0gKHNpemVfdCktMSkgeworCQkJZXJybm8gPSBFSUxTRVE7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogT3B0aW1pc2F0aW9uOiBpZiB0aGUgb3V0cHV0IHByZWNpc2lvbiBpcyBzbWFsbCBlbm91Z2gsCisJCSAqIGp1c3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIG1heGltdW0gaW5zdGVhZCBvZgorCQkgKiBzY2FubmluZyB0aGUgc3RyaW5nLgorCQkgKi8KKwkJaWYgKHByZWMgPCAxMjgpCisJCQluYnl0ZXMgPSBwcmVjOworCQllbHNlIHsKKwkJCW5ieXRlcyA9IDA7CisJCQlwID0gd2NzYXJnOworCQkJbWVtc2V0KCZtYnMsIDAsIHNpemVvZihtYnMpKTsKKwkJCWZvciAoOzspIHsKKwkJCQljbGVuID0gd2NydG9tYihidWYsICpwKyssICZtYnMpOworCQkJCWlmIChjbGVuID09IDAgfHwgY2xlbiA9PSAoc2l6ZV90KS0xIHx8CisJCQkJICAgIG5ieXRlcyArIGNsZW4gPiAoc2l6ZV90KXByZWMpCisJCQkJCWJyZWFrOworCQkJCW5ieXRlcyArPSBjbGVuOworCQkJfQorCQkJaWYgKGNsZW4gPT0gKHNpemVfdCktMSkgeworCQkJCWVycm5vID0gRUlMU0VROworCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJCX0KKwl9CisJaWYgKChjb252YnVmID0gbWFsbG9jKG5ieXRlcyArIDEpKSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJLyogRmlsbCB0aGUgb3V0cHV0IGJ1ZmZlci4gKi8KKwlwID0gd2NzYXJnOworCW1lbXNldCgmbWJzLCAwLCBzaXplb2YobWJzKSk7CisJaWYgKChuYnl0ZXMgPSB3Y3NydG9tYnMoY29udmJ1ZiwgKGNvbnN0IHdjaGFyX3QgKiopJnAsCisJICAgIG5ieXRlcywgJm1icykpID09IChzaXplX3QpLTEpIHsKKwkJZnJlZShjb252YnVmKTsKKwkJZXJybm8gPSBFSUxTRVE7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWNvbnZidWZbbmJ5dGVzXSA9ICdcMCc7CisJcmV0dXJuIChjb252YnVmKTsKK30KKyNlbmRpZgorCisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlICJmbG9hdGlvLmgiCisjaW5jbHVkZSAiZ2R0b2EuaCIKKworI2RlZmluZQlERUZQUkVDCQk2CisKK3N0YXRpYyBpbnQgZXhwb25lbnQoY2hhciAqLCBpbnQsIGludCk7CisjZW5kaWYgLyogRkxPQVRJTkdfUE9JTlQgKi8KKworLyoKKyAqIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgd2UgdXNlIGFzIHNjcmF0Y2ggc3BhY2UgZm9yIGludGVnZXIKKyAqIGNvbnZlcnNpb25zLCBhbW9uZyBvdGhlciB0aGluZ3MuICBUZWNobmljYWxseSwgd2Ugd291bGQgbmVlZCB0aGUKKyAqIG1vc3Qgc3BhY2UgZm9yIGJhc2UgMTAgY29udmVyc2lvbnMgd2l0aCB0aG91c2FuZHMnIGdyb3VwaW5nCisgKiBjaGFyYWN0ZXJzIGJldHdlZW4gZWFjaCBwYWlyIG9mIGRpZ2l0cy4gIDEwMCBieXRlcyBpcyBhCisgKiBjb25zZXJ2YXRpdmUgb3ZlcmVzdGltYXRlIGV2ZW4gZm9yIGEgMTI4LWJpdCB1aW50bWF4X3QuCisgKi8KKyNkZWZpbmUgQlVGCTEwMAorCisjZGVmaW5lIFNUQVRJQ19BUkdfVEJMX1NJWkUgOAkvKiBTaXplIG9mIHN0YXRpYyBhcmd1bWVudCB0YWJsZS4gKi8KKworCisvKgorICogTWFjcm9zIGZvciBjb252ZXJ0aW5nIGRpZ2l0cyB0byBsZXR0ZXJzIGFuZCB2aWNlIHZlcnNhCisgKi8KKyNkZWZpbmUJdG9fZGlnaXQoYykJKChjKSAtICcwJykKKyNkZWZpbmUgaXNfZGlnaXQoYykJKCh1bnNpZ25lZCl0b19kaWdpdChjKSA8PSA5KQorI2RlZmluZQl0b19jaGFyKG4pCSgobikgKyAnMCcpCisKKy8qCisgKiBGbGFncyB1c2VkIGR1cmluZyBjb252ZXJzaW9uLgorICovCisjZGVmaW5lCUFMVAkJMHgwMDAxCQkvKiBhbHRlcm5hdGUgZm9ybSAqLworI2RlZmluZQlMQURKVVNUCQkweDAwMDQJCS8qIGxlZnQgYWRqdXN0bWVudCAqLworI2RlZmluZQlMT05HREJMCQkweDAwMDgJCS8qIGxvbmcgZG91YmxlICovCisjZGVmaW5lCUxPTkdJTlQJCTB4MDAxMAkJLyogbG9uZyBpbnRlZ2VyICovCisjZGVmaW5lCUxMT05HSU5UCTB4MDAyMAkJLyogbG9uZyBsb25nIGludGVnZXIgKi8KKyNkZWZpbmUJU0hPUlRJTlQJMHgwMDQwCQkvKiBzaG9ydCBpbnRlZ2VyICovCisjZGVmaW5lCVpFUk9QQUQJCTB4MDA4MAkJLyogemVybyAoYXMgb3Bwb3NlZCB0byBibGFuaykgcGFkICovCisjZGVmaW5lIEZQVAkJMHgwMTAwCQkvKiBGbG9hdGluZyBwb2ludCBudW1iZXIgKi8KKyNkZWZpbmUgUFRSSU5UCQkweDAyMDAJCS8qICh1bnNpZ25lZCkgcHRyZGlmZl90ICovCisjZGVmaW5lIFNJWkVJTlQJCTB4MDQwMAkJLyogKHNpZ25lZCkgc2l6ZV90ICovCisjZGVmaW5lIENIQVJJTlQJCTB4MDgwMAkJLyogOCBiaXQgaW50ZWdlciAqLworI2RlZmluZSBNQVhJTlQJCTB4MTAwMAkJLyogbGFyZ2VzdCBpbnRlZ2VyIHNpemUgKGludG1heF90KSAqLworCitpbnQKK3ZmcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQwLCBfX3ZhX2xpc3QgYXApCit7CisJaW50IHJldDsKKworCUZMT0NLRklMRShmcCk7CisJcmV0ID0gX192ZnByaW50ZihmcCwgZm10MCwgYXApOworCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKHJldCk7Cit9CisKK2ludAorX192ZnByaW50ZihGSUxFICpmcCwgY29uc3QgY2hhciAqZm10MCwgX192YV9saXN0IGFwKQoreworCWNoYXIgKmZtdDsJCS8qIGZvcm1hdCBzdHJpbmcgKi8KKwlpbnQgY2g7CQkJLyogY2hhcmFjdGVyIGZyb20gZm10ICovCisJaW50IG4sIG4yOwkJLyogaGFuZHkgaW50ZWdlcnMgKHNob3J0IHRlcm0gdXNhZ2UpICovCisJY2hhciAqY3A7CQkvKiBoYW5keSBjaGFyIHBvaW50ZXIgKHNob3J0IHRlcm0gdXNhZ2UpICovCisJc3RydWN0IF9fc2lvdiAqaW92cDsJLyogZm9yIFBSSU5UIG1hY3JvICovCisJaW50IGZsYWdzOwkJLyogZmxhZ3MgYXMgYWJvdmUgKi8KKwlpbnQgcmV0OwkJLyogcmV0dXJuIHZhbHVlIGFjY3VtdWxhdG9yICovCisJaW50IHdpZHRoOwkJLyogd2lkdGggZnJvbSBmb3JtYXQgKCU4ZCksIG9yIDAgKi8KKwlpbnQgcHJlYzsJCS8qIHByZWNpc2lvbiBmcm9tIGZvcm1hdDsgPDAgZm9yIE4vQSAqLworCWNoYXIgc2lnbjsJCS8qIHNpZ24gcHJlZml4ICgnICcsICcrJywgJy0nLCBvciBcMCkgKi8KKwl3Y2hhcl90IHdjOworCW1ic3RhdGVfdCBwczsKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCS8qCisJICogV2UgY2FuIGRlY29tcG9zZSB0aGUgcHJpbnRlZCByZXByZXNlbnRhdGlvbiBvZiBmbG9hdGluZworCSAqIHBvaW50IG51bWJlcnMgaW50byBzZXZlcmFsIHBhcnRzLCBzb21lIG9mIHdoaWNoIG1heSBiZSBlbXB0eToKKwkgKgorCSAqIFsrfC18IF0gWzB4fDBYXSBNTU0gLiBOTk4gW2V8RXxwfFBdIFsrfC1dIFpaCisJICogICAgQSAgICAgICBCICAgICAtLS1DLS0tICAgICAgRCAgICAgICBFICAgRgorCSAqCisJICogQToJJ3NpZ24nIGhvbGRzIHRoaXMgdmFsdWUgaWYgcHJlc2VudDsgJ1wwJyBvdGhlcndpc2UKKwkgKiBCOglveFsxXSBob2xkcyB0aGUgJ3gnIG9yICdYJzsgJ1wwJyBpZiBub3QgaGV4YWRlY2ltYWwKKwkgKiBDOgljcCBwb2ludHMgdG8gdGhlIHN0cmluZyBNTU1OTk4uICBMZWFkaW5nIGFuZCB0cmFpbGluZworCSAqCXplcm9zIGFyZSBub3QgaW4gdGhlIHN0cmluZyBhbmQgbXVzdCBiZSBhZGRlZC4KKwkgKiBEOglleHBjaGFyIGhvbGRzIHRoaXMgY2hhcmFjdGVyOyAnXDAnIGlmIG5vIGV4cG9uZW50LCBlLmcuICVmCisJICogRjoJYXQgbGVhc3QgdHdvIGRpZ2l0cyBmb3IgZGVjaW1hbCwgYXQgbGVhc3Qgb25lIGRpZ2l0IGZvciBoZXgKKwkgKi8KKwljaGFyICpkZWNpbWFsX3BvaW50ID0gTlVMTDsKKwlpbnQgc2lnbmZsYWc7CQkvKiB0cnVlIGlmIGZsb2F0IGlzIG5lZ2F0aXZlICovCisJdW5pb24gewkJCS8qIGZsb2F0aW5nIHBvaW50IGFyZ3VtZW50cyAlW2FBZUVmRmdHXSAqLworCQlkb3VibGUgZGJsOworCQlsb25nIGRvdWJsZSBsZGJsOworCX0gZnBhcmc7CisJaW50IGV4cHQ7CQkvKiBpbnRlZ2VyIHZhbHVlIG9mIGV4cG9uZW50ICovCisJY2hhciBleHBjaGFyOwkJLyogZXhwb25lbnQgY2hhcmFjdGVyOiBbZUVwUFwwXSAqLworCWNoYXIgKmR0b2FlbmQ7CQkvKiBwb2ludGVyIHRvIGVuZCBvZiBjb252ZXJ0ZWQgZGlnaXRzICovCisJaW50IGV4cHNpemU7CQkvKiBjaGFyYWN0ZXIgY291bnQgZm9yIGV4cHN0ciAqLworCWludCBsZWFkOwkJLyogc2lnIGZpZ3MgYmVmb3JlIGRlY2ltYWwgb3IgZ3JvdXAgc2VwICovCisJaW50IG5kaWc7CQkvKiBhY3R1YWwgbnVtYmVyIG9mIGRpZ2l0cyByZXR1cm5lZCBieSBkdG9hICovCisJY2hhciBleHBzdHJbTUFYRVhQRElHKzJdOwkvKiBidWZmZXIgZm9yIGV4cG9uZW50IHN0cmluZzogZStaWlogKi8KKwljaGFyICpkdG9hcmVzdWx0ID0gTlVMTDsKKyNlbmRpZgorCisJdWludG1heF90IF91bWF4OwkvKiBpbnRlZ2VyIGFyZ3VtZW50cyAlW2Rpb3V4WF0gKi8KKwllbnVtIHsgT0NULCBERUMsIEhFWCB9IGJhc2U7CS8qIGJhc2UgZm9yICVbZGlvdXhYXSBjb252ZXJzaW9uICovCisJaW50IGRwcmVjOwkJLyogYSBjb3B5IG9mIHByZWMgaWYgJVtkaW91eFhdLCAwIG90aGVyd2lzZSAqLworCWludCByZWFsc3o7CQkvKiBmaWVsZCBzaXplIGV4cGFuZGVkIGJ5IGRwcmVjICovCisJaW50IHNpemU7CQkvKiBzaXplIG9mIGNvbnZlcnRlZCBmaWVsZCBvciBzdHJpbmcgKi8KKwljb25zdCBjaGFyICp4ZGlnczsJLyogZGlnaXRzIGZvciAlW3hYXSBjb252ZXJzaW9uICovCisjZGVmaW5lIE5JT1YgOAorCXN0cnVjdCBfX3N1aW8gdWlvOwkvKiBvdXRwdXQgaW5mb3JtYXRpb246IHN1bW1hcnkgKi8KKwlzdHJ1Y3QgX19zaW92IGlvdltOSU9WXTsvKiAuLi4gYW5kIGluZGl2aWR1YWwgaW8gdmVjdG9ycyAqLworCWNoYXIgYnVmW0JVRl07CQkvKiBidWZmZXIgd2l0aCBzcGFjZSBmb3IgZGlnaXRzIG9mIHVpbnRtYXhfdCAqLworCWNoYXIgb3hbMl07CQkvKiBzcGFjZSBmb3IgMHg7IG94WzFdIGlzIGVpdGhlciB4LCBYLCBvciBcMCAqLworCXVuaW9uIGFyZyAqYXJndGFibGU7CS8qIGFyZ3MsIGJ1aWx0IGR1ZSB0byBwb3NpdGlvbmFsIGFyZyAqLworCXVuaW9uIGFyZyBzdGF0YXJndGFibGVbU1RBVElDX0FSR19UQkxfU0laRV07CisJc2l6ZV90IGFyZ3RhYmxlc2l6OworCWludCBuZXh0YXJnOwkJLyogMS1iYXNlZCBhcmd1bWVudCBpbmRleCAqLworCXZhX2xpc3Qgb3JnYXA7CQkvKiBvcmlnaW5hbCBhcmd1bWVudCBwb2ludGVyICovCisjaWZkZWYgUFJJTlRGX1dJREVfQ0hBUgorCWNoYXIgKmNvbnZidWY7CQkvKiBidWZmZXIgZm9yIHdpZGUgdG8gbXVsdGktYnl0ZSBjb252ZXJzaW9uICovCisjZW5kaWYKKworCS8qCisJICogQ2hvb3NlIFBBRFNJWkUgdG8gdHJhZGUgZWZmaWNpZW5jeSB2cy4gc2l6ZS4gIElmIGxhcmdlciBwcmludGYKKwkgKiBmaWVsZHMgb2NjdXIgZnJlcXVlbnRseSwgaW5jcmVhc2UgUEFEU0laRSBhbmQgbWFrZSB0aGUgaW5pdGlhbGlzZXJzCisJICogYmVsb3cgbG9uZ2VyLgorCSAqLworI2RlZmluZQlQQURTSVpFCTE2CQkvKiBwYWQgY2h1bmsgc2l6ZSAqLworCXN0YXRpYyBjaGFyIGJsYW5rc1tQQURTSVpFXSA9CisJIHsnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICd9OworCXN0YXRpYyBjaGFyIHplcm9lc1tQQURTSVpFXSA9CisJIHsnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCd9OworCisJc3RhdGljIGNvbnN0IGNoYXIgeGRpZ3NfbG93ZXJbMTZdID0gIjAxMjM0NTY3ODlhYmNkZWYiOworCXN0YXRpYyBjb25zdCBjaGFyIHhkaWdzX3VwcGVyWzE2XSA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKKworCS8qCisJICogQkVXQVJFLCB0aGVzZSBgZ290byBlcnJvcicgb24gZXJyb3IsIGFuZCBQQUQgdXNlcyBgbicuCisJICovCisjZGVmaW5lCVBSSU5UKHB0ciwgbGVuKSBkbyB7IFwKKwlpb3ZwLT5pb3ZfYmFzZSA9IChwdHIpOyBcCisJaW92cC0+aW92X2xlbiA9IChsZW4pOyBcCisJdWlvLnVpb19yZXNpZCArPSAobGVuKTsgXAorCWlvdnArKzsgXAorCWlmICgrK3Vpby51aW9faW92Y250ID49IE5JT1YpIHsgXAorCQlpZiAoX19zcHJpbnQoZnAsICZ1aW8pKSBcCisJCQlnb3RvIGVycm9yOyBcCisJCWlvdnAgPSBpb3Y7IFwKKwl9IFwKK30gd2hpbGUgKDApCisjZGVmaW5lCVBBRChob3dtYW55LCB3aXRoKSBkbyB7IFwKKwlpZiAoKG4gPSAoaG93bWFueSkpID4gMCkgeyBcCisJCXdoaWxlIChuID4gUEFEU0laRSkgeyBcCisJCQlQUklOVCh3aXRoLCBQQURTSVpFKTsgXAorCQkJbiAtPSBQQURTSVpFOyBcCisJCX0gXAorCQlQUklOVCh3aXRoLCBuKTsgXAorCX0gXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJUFJJTlRBTkRQQUQocCwgZXAsIGxlbiwgd2l0aCkgZG8gewlcCisJbjIgPSAoZXApIC0gKHApOyAgICAgICAJCQlcCisJaWYgKG4yID4gKGxlbikpCQkJCVwKKwkJbjIgPSAobGVuKTsJCQlcCisJaWYgKG4yID4gMCkJCQkJXAorCQlQUklOVCgocCksIG4yKTsJCQlcCisJUEFEKChsZW4pIC0gKG4yID4gMCA/IG4yIDogMCksICh3aXRoKSk7CVwKK30gd2hpbGUoMCkKKyNkZWZpbmUJRkxVU0goKSBkbyB7IFwKKwlpZiAodWlvLnVpb19yZXNpZCAmJiBfX3NwcmludChmcCwgJnVpbykpIFwKKwkJZ290byBlcnJvcjsgXAorCXVpby51aW9faW92Y250ID0gMDsgXAorCWlvdnAgPSBpb3Y7IFwKK30gd2hpbGUgKDApCisKKwkvKgorCSAqIFRvIGV4dGVuZCBzaG9ydHMgcHJvcGVybHksIHdlIG5lZWQgYm90aCBzaWduZWQgYW5kIHVuc2lnbmVkCisJICogYXJndW1lbnQgZXh0cmFjdGlvbiBtZXRob2RzLgorCSAqLworI2RlZmluZQlTQVJHKCkgXAorCSgoaW50bWF4X3QpKGZsYWdzJk1BWElOVCA/IEdFVEFSRyhpbnRtYXhfdCkgOiBcCisJICAgIGZsYWdzJkxMT05HSU5UID8gR0VUQVJHKGxvbmcgbG9uZykgOiBcCisJICAgIGZsYWdzJkxPTkdJTlQgPyBHRVRBUkcobG9uZykgOiBcCisJICAgIGZsYWdzJlBUUklOVCA/IEdFVEFSRyhwdHJkaWZmX3QpIDogXAorCSAgICBmbGFncyZTSVpFSU5UID8gR0VUQVJHKHNzaXplX3QpIDogXAorCSAgICBmbGFncyZTSE9SVElOVCA/IChzaG9ydClHRVRBUkcoaW50KSA6IFwKKwkgICAgZmxhZ3MmQ0hBUklOVCA/IChzaWduZWQgY2hhcilHRVRBUkcoaW50KSA6IFwKKwkgICAgR0VUQVJHKGludCkpKQorI2RlZmluZQlVQVJHKCkgXAorCSgodWludG1heF90KShmbGFncyZNQVhJTlQgPyBHRVRBUkcodWludG1heF90KSA6IFwKKwkgICAgZmxhZ3MmTExPTkdJTlQgPyBHRVRBUkcodW5zaWduZWQgbG9uZyBsb25nKSA6IFwKKwkgICAgZmxhZ3MmTE9OR0lOVCA/IEdFVEFSRyh1bnNpZ25lZCBsb25nKSA6IFwKKwkgICAgZmxhZ3MmUFRSSU5UID8gKHVpbnRwdHJfdClHRVRBUkcocHRyZGlmZl90KSA6IC8qIFhYWCAqLyBcCisJICAgIGZsYWdzJlNJWkVJTlQgPyBHRVRBUkcoc2l6ZV90KSA6IFwKKwkgICAgZmxhZ3MmU0hPUlRJTlQgPyAodW5zaWduZWQgc2hvcnQpR0VUQVJHKGludCkgOiBcCisJICAgIGZsYWdzJkNIQVJJTlQgPyAodW5zaWduZWQgY2hhcilHRVRBUkcoaW50KSA6IFwKKwkgICAgR0VUQVJHKHVuc2lnbmVkIGludCkpKQorCisJLyoKKwkgKiBBcHBlbmQgYSBkaWdpdCB0byBhIHZhbHVlIGFuZCBjaGVjayBmb3Igb3ZlcmZsb3cuCisJICovCisjZGVmaW5lIEFQUEVORF9ESUdJVCh2YWwsIGRpZykgZG8geyBcCisJaWYgKCh2YWwpID4gSU5UX01BWCAvIDEwKSBcCisJCWdvdG8gb3ZlcmZsb3c7IFwKKwkodmFsKSAqPSAxMDsgXAorCWlmICgodmFsKSA+IElOVF9NQVggLSB0b19kaWdpdCgoZGlnKSkpIFwKKwkJZ290byBvdmVyZmxvdzsgXAorCSh2YWwpICs9IHRvX2RpZ2l0KChkaWcpKTsgXAorfSB3aGlsZSAoMCkKKworCSAvKgorCSAgKiBHZXQgKiBhcmd1bWVudHMsIGluY2x1ZGluZyB0aGUgZm9ybSAqbm4kLiAgUHJlc2VydmUgdGhlIG5leHRhcmcKKwkgICogdGhhdCB0aGUgYXJndW1lbnQgY2FuIGJlIGdvdHRlbiBvbmNlIHRoZSB0eXBlIGlzIGRldGVybWluZWQuCisJICAqLworI2RlZmluZSBHRVRBU1RFUih2YWwpIFwKKwluMiA9IDA7IFwKKwljcCA9IGZtdDsgXAorCXdoaWxlIChpc19kaWdpdCgqY3ApKSB7IFwKKwkJQVBQRU5EX0RJR0lUKG4yLCAqY3ApOyBcCisJCWNwKys7IFwKKwl9IFwKKwlpZiAoKmNwID09ICckJykgeyBcCisJCWludCBob2xkID0gbmV4dGFyZzsgXAorCQlpZiAoYXJndGFibGUgPT0gTlVMTCkgeyBcCisJCQlhcmd0YWJsZSA9IHN0YXRhcmd0YWJsZTsgXAorCQkJX19maW5kX2FyZ3VtZW50cyhmbXQwLCBvcmdhcCwgJmFyZ3RhYmxlLCAmYXJndGFibGVzaXopOyBcCisJCX0gXAorCQluZXh0YXJnID0gbjI7IFwKKwkJdmFsID0gR0VUQVJHKGludCk7IFwKKwkJbmV4dGFyZyA9IGhvbGQ7IFwKKwkJZm10ID0gKytjcDsgXAorCX0gZWxzZSB7IFwKKwkJdmFsID0gR0VUQVJHKGludCk7IFwKKwl9CisKKy8qCisqIEdldCB0aGUgYXJndW1lbnQgaW5kZXhlZCBieSBuZXh0YXJnLiAgIElmIHRoZSBhcmd1bWVudCB0YWJsZSBpcworKiBidWlsdCwgdXNlIGl0IHRvIGdldCB0aGUgYXJndW1lbnQuICBJZiBpdHMgbm90LCBnZXQgdGhlIG5leHQKKyogYXJndW1lbnQgKGFuZCBhcmd1bWVudHMgbXVzdCBiZSBnb3R0ZW4gc2VxdWVudGlhbGx5KS4KKyovCisjZGVmaW5lIEdFVEFSRyh0eXBlKSBcCisJKChhcmd0YWJsZSAhPSBOVUxMKSA/ICooKHR5cGUqKSgmYXJndGFibGVbbmV4dGFyZysrXSkpIDogXAorCQkobmV4dGFyZysrLCB2YV9hcmcoYXAsIHR5cGUpKSkKKworCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKKwkvKiBzb3JyeSwgZnByaW50ZihyZWFkX29ubHlfZmlsZSwgIiIpIHJldHVybnMgRU9GLCBub3QgMCAqLworCWlmIChjYW50d3JpdGUoZnApKSB7CisJCWVycm5vID0gRUJBREY7CisJCXJldHVybiAoRU9GKTsKKwl9CisKKwkvKiBvcHRpbWlzZSBmcHJpbnRmKHN0ZGVycikgKGFuZCBvdGhlciB1bmJ1ZmZlcmVkIFVuaXggZmlsZXMpICovCisJaWYgKChmcC0+X2ZsYWdzICYgKF9fU05CRnxfX1NXUnxfX1NSVykpID09IChfX1NOQkZ8X19TV1IpICYmCisJICAgIGZwLT5fZmlsZSA+PSAwKQorCQlyZXR1cm4gKF9fc2JwcmludGYoZnAsIGZtdDAsIGFwKSk7CisKKwlmbXQgPSAoY2hhciAqKWZtdDA7CisJYXJndGFibGUgPSBOVUxMOworCW5leHRhcmcgPSAxOworCXZhX2NvcHkob3JnYXAsIGFwKTsKKwl1aW8udWlvX2lvdiA9IGlvdnAgPSBpb3Y7CisJdWlvLnVpb19yZXNpZCA9IDA7CisJdWlvLnVpb19pb3ZjbnQgPSAwOworCXJldCA9IDA7CisjaWZkZWYgUFJJTlRGX1dJREVfQ0hBUgorCWNvbnZidWYgPSBOVUxMOworI2VuZGlmCisKKwltZW1zZXQoJnBzLCAwLCBzaXplb2YocHMpKTsKKwkvKgorCSAqIFNjYW4gdGhlIGZvcm1hdCBmb3IgY29udmVyc2lvbnMgKGAlJyBjaGFyYWN0ZXIpLgorCSAqLworCWZvciAoOzspIHsKKwkJY3AgPSBmbXQ7CisJCXdoaWxlICgobiA9IG1icnRvd2MoJndjLCBmbXQsIE1CX0NVUl9NQVgsICZwcykpID4gMCkgeworCQkJZm10ICs9IG47CisJCQlpZiAod2MgPT0gJyUnKSB7CisJCQkJZm10LS07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGZtdCAhPSBjcCkgeworCQkJcHRyZGlmZl90IG0gPSBmbXQgLSBjcDsKKwkJCWlmIChtIDwgMCB8fCBtID4gSU5UX01BWCAtIHJldCkKKwkJCQlnb3RvIG92ZXJmbG93OworCQkJUFJJTlQoY3AsIG0pOworCQkJcmV0ICs9IG07CisJCX0KKwkJaWYgKG4gPD0gMCkKKwkJCWdvdG8gZG9uZTsKKwkJZm10Kys7CQkvKiBza2lwIG92ZXIgJyUnICovCisKKwkJZmxhZ3MgPSAwOworCQlkcHJlYyA9IDA7CisJCXdpZHRoID0gMDsKKwkJcHJlYyA9IC0xOworCQlzaWduID0gJ1wwJzsKKwkJb3hbMV0gPSAnXDAnOworCityZmxhZzoJCWNoID0gKmZtdCsrOworcmVzd2l0Y2g6CXN3aXRjaCAoY2gpIHsKKwkJY2FzZSAnICc6CisJCQkvKgorCQkJICogYGBJZiB0aGUgc3BhY2UgYW5kICsgZmxhZ3MgYm90aCBhcHBlYXIsIHRoZSBzcGFjZQorCQkJICogZmxhZyB3aWxsIGJlIGlnbm9yZWQuJycKKwkJCSAqCS0tIEFOU0kgWDNKMTEKKwkJCSAqLworCQkJaWYgKCFzaWduKQorCQkJCXNpZ24gPSAnICc7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICcjJzoKKwkJCWZsYWdzIHw9IEFMVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ1wnJzoKKwkJCS8qIGdyb3VwaW5nIG5vdCBpbXBsZW1lbnRlZCAqLworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnKic6CisJCQkvKgorCQkJICogYGBBIG5lZ2F0aXZlIGZpZWxkIHdpZHRoIGFyZ3VtZW50IGlzIHRha2VuIGFzIGEKKwkJCSAqIC0gZmxhZyBmb2xsb3dlZCBieSBhIHBvc2l0aXZlIGZpZWxkIHdpZHRoLicnCisJCQkgKgktLSBBTlNJIFgzSjExCisJCQkgKiBUaGV5IGRvbid0IGV4Y2x1ZGUgZmllbGQgd2lkdGhzIHJlYWQgZnJvbSBhcmdzLgorCQkJICovCisJCQlHRVRBU1RFUih3aWR0aCk7CisJCQlpZiAod2lkdGggPj0gMCkKKwkJCQlnb3RvIHJmbGFnOworCQkJaWYgKHdpZHRoID09IElOVF9NSU4pCisJCQkJZ290byBvdmVyZmxvdzsKKwkJCXdpZHRoID0gLXdpZHRoOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSAnLSc6CisJCQlmbGFncyB8PSBMQURKVVNUOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnKyc6CisJCQlzaWduID0gJysnOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnLic6CisJCQlpZiAoKGNoID0gKmZtdCsrKSA9PSAnKicpIHsKKwkJCQlHRVRBU1RFUihuKTsKKwkJCQlwcmVjID0gbiA8IDAgPyAtMSA6IG47CisJCQkJZ290byByZmxhZzsKKwkJCX0KKwkJCW4gPSAwOworCQkJd2hpbGUgKGlzX2RpZ2l0KGNoKSkgeworCQkJCUFQUEVORF9ESUdJVChuLCBjaCk7CisJCQkJY2ggPSAqZm10Kys7CisJCQl9CisJCQlpZiAoY2ggPT0gJyQnKSB7CisJCQkJbmV4dGFyZyA9IG47CisJCQkJaWYgKGFyZ3RhYmxlID09IE5VTEwpIHsKKwkJCQkJYXJndGFibGUgPSBzdGF0YXJndGFibGU7CisJCQkJCV9fZmluZF9hcmd1bWVudHMoZm10MCwgb3JnYXAsCisJCQkJCSAgICAmYXJndGFibGUsICZhcmd0YWJsZXNpeik7CisJCQkJfQorCQkJCWdvdG8gcmZsYWc7CisJCQl9CisJCQlwcmVjID0gbjsKKwkJCWdvdG8gcmVzd2l0Y2g7CisJCWNhc2UgJzAnOgorCQkJLyoKKwkJCSAqIGBgTm90ZSB0aGF0IDAgaXMgdGFrZW4gYXMgYSBmbGFnLCBub3QgYXMgdGhlCisJCQkgKiBiZWdpbm5pbmcgb2YgYSBmaWVsZCB3aWR0aC4nJworCQkJICoJLS0gQU5TSSBYM0oxMQorCQkJICovCisJCQlmbGFncyB8PSBaRVJPUEFEOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisJCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKwkJCW4gPSAwOworCQkJZG8geworCQkJCUFQUEVORF9ESUdJVChuLCBjaCk7CisJCQkJY2ggPSAqZm10Kys7CisJCQl9IHdoaWxlIChpc19kaWdpdChjaCkpOworCQkJaWYgKGNoID09ICckJykgeworCQkJCW5leHRhcmcgPSBuOworCQkJCWlmIChhcmd0YWJsZSA9PSBOVUxMKSB7CisJCQkJCWFyZ3RhYmxlID0gc3RhdGFyZ3RhYmxlOworCQkJCQlfX2ZpbmRfYXJndW1lbnRzKGZtdDAsIG9yZ2FwLAorCQkJCQkgICAgJmFyZ3RhYmxlLCAmYXJndGFibGVzaXopOworCQkJCX0KKwkJCQlnb3RvIHJmbGFnOworCQkJfQorCQkJd2lkdGggPSBuOworCQkJZ290byByZXN3aXRjaDsKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCQljYXNlICdMJzoKKwkJCWZsYWdzIHw9IExPTkdEQkw7CisJCQlnb3RvIHJmbGFnOworI2VuZGlmCisJCWNhc2UgJ2gnOgorCQkJaWYgKCpmbXQgPT0gJ2gnKSB7CisJCQkJZm10Kys7CisJCQkJZmxhZ3MgfD0gQ0hBUklOVDsKKwkJCX0gZWxzZSB7CisJCQkJZmxhZ3MgfD0gU0hPUlRJTlQ7CisJCQl9CisJCQlnb3RvIHJmbGFnOworCQljYXNlICdqJzoKKwkJCWZsYWdzIHw9IE1BWElOVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ2wnOgorCQkJaWYgKCpmbXQgPT0gJ2wnKSB7CisJCQkJZm10Kys7CisJCQkJZmxhZ3MgfD0gTExPTkdJTlQ7CisJCQl9IGVsc2UgeworCQkJCWZsYWdzIHw9IExPTkdJTlQ7CisJCQl9CisJCQlnb3RvIHJmbGFnOworCQljYXNlICdxJzoKKwkJCWZsYWdzIHw9IExMT05HSU5UOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAndCc6CisJCQlmbGFncyB8PSBQVFJJTlQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICd6JzoKKwkJCWZsYWdzIHw9IFNJWkVJTlQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICdjJzoKKyNpZmRlZiBQUklOVEZfV0lERV9DSEFSCisJCQlpZiAoZmxhZ3MgJiBMT05HSU5UKSB7CisJCQkJbWJzdGF0ZV90IG1iczsKKwkJCQlzaXplX3QgbWJzZXFsZW47CisKKwkJCQltZW1zZXQoJm1icywgMCwgc2l6ZW9mKG1icykpOworCQkJCW1ic2VxbGVuID0gd2NydG9tYihidWYsCisJCQkJICAgICh3Y2hhcl90KUdFVEFSRyh3aW50X3QpLCAmbWJzKTsKKwkJCQlpZiAobWJzZXFsZW4gPT0gKHNpemVfdCktMSkgeworCQkJCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwkJCQkJZXJybm8gPSBFSUxTRVE7CisJCQkJCWdvdG8gZXJyb3I7CisJCQkJfQorCQkJCWNwID0gYnVmOworCQkJCXNpemUgPSAoaW50KW1ic2VxbGVuOworCQkJfSBlbHNlIHsKKyNlbmRpZgorCQkJCSooY3AgPSBidWYpID0gR0VUQVJHKGludCk7CisJCQkJc2l6ZSA9IDE7CisjaWZkZWYgUFJJTlRGX1dJREVfQ0hBUgorCQkJfQorI2VuZGlmCisJCQlzaWduID0gJ1wwJzsKKwkJCWJyZWFrOworCQljYXNlICdEJzoKKwkJCWZsYWdzIHw9IExPTkdJTlQ7CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAnZCc6CisJCWNhc2UgJ2knOgorCQkJX3VtYXggPSBTQVJHKCk7CisJCQlpZiAoKGludG1heF90KV91bWF4IDwgMCkgeworCQkJCV91bWF4ID0gLV91bWF4OworCQkJCXNpZ24gPSAnLSc7CisJCQl9CisJCQliYXNlID0gREVDOworCQkJZ290byBudW1iZXI7CisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwkJY2FzZSAnYSc6CisJCWNhc2UgJ0EnOgorCQkJaWYgKGNoID09ICdhJykgeworCQkJCW94WzFdID0gJ3gnOworCQkJCXhkaWdzID0geGRpZ3NfbG93ZXI7CisJCQkJZXhwY2hhciA9ICdwJzsKKwkJCX0gZWxzZSB7CisJCQkJb3hbMV0gPSAnWCc7CisJCQkJeGRpZ3MgPSB4ZGlnc191cHBlcjsKKwkJCQlleHBjaGFyID0gJ1AnOworCQkJfQorCQkJaWYgKHByZWMgPj0gMCkKKwkJCQlwcmVjKys7CisJCQlpZiAoZHRvYXJlc3VsdCkKKwkJCQlfX2ZyZWVkdG9hKGR0b2FyZXN1bHQpOworCQkJaWYgKGZsYWdzICYgTE9OR0RCTCkgeworCQkJCWZwYXJnLmxkYmwgPSBHRVRBUkcobG9uZyBkb3VibGUpOworCQkJCWR0b2FyZXN1bHQgPSBjcCA9CisJCQkJICAgIF9faGxkdG9hKGZwYXJnLmxkYmwsIHhkaWdzLCBwcmVjLAorCQkJCSAgICAmZXhwdCwgJnNpZ25mbGFnLCAmZHRvYWVuZCk7CisJCQkJaWYgKGR0b2FyZXN1bHQgPT0gTlVMTCkgeworCQkJCQllcnJubyA9IEVOT01FTTsKKwkJCQkJZ290byBlcnJvcjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWZwYXJnLmRibCA9IEdFVEFSRyhkb3VibGUpOworCQkJCWR0b2FyZXN1bHQgPSBjcCA9CisJCQkJICAgIF9faGR0b2EoZnBhcmcuZGJsLCB4ZGlncywgcHJlYywKKwkJCQkgICAgJmV4cHQsICZzaWduZmxhZywgJmR0b2FlbmQpOworCQkJCWlmIChkdG9hcmVzdWx0ID09IE5VTEwpIHsKKwkJCQkJZXJybm8gPSBFTk9NRU07CisJCQkJCWdvdG8gZXJyb3I7CisJCQkJfQorCQkJfQorCQkJaWYgKHByZWMgPCAwKQorCQkJCXByZWMgPSBkdG9hZW5kIC0gY3A7CisJCQlpZiAoZXhwdCA9PSBJTlRfTUFYKQorCQkJCW94WzFdID0gJ1wwJzsKKwkJCWdvdG8gZnBfY29tbW9uOworCQljYXNlICdlJzoKKwkJY2FzZSAnRSc6CisJCQlleHBjaGFyID0gY2g7CisJCQlpZiAocHJlYyA8IDApCS8qIGFjY291bnQgZm9yIGRpZ2l0IGJlZm9yZSBkZWNwdCAqLworCQkJCXByZWMgPSBERUZQUkVDICsgMTsKKwkJCWVsc2UKKwkJCQlwcmVjKys7CisJCQlnb3RvIGZwX2JlZ2luOworCQljYXNlICdmJzoKKwkJY2FzZSAnRic6CisJCQlleHBjaGFyID0gJ1wwJzsKKwkJCWdvdG8gZnBfYmVnaW47CisJCWNhc2UgJ2cnOgorCQljYXNlICdHJzoKKwkJCWV4cGNoYXIgPSBjaCAtICgnZycgLSAnZScpOworIAkJCWlmIChwcmVjID09IDApCisgCQkJCXByZWMgPSAxOworZnBfYmVnaW46CisJCQlpZiAocHJlYyA8IDApCisJCQkJcHJlYyA9IERFRlBSRUM7CisJCQlpZiAoZHRvYXJlc3VsdCkKKwkJCQlfX2ZyZWVkdG9hKGR0b2FyZXN1bHQpOworCQkJaWYgKGZsYWdzICYgTE9OR0RCTCkgeworCQkJCWZwYXJnLmxkYmwgPSBHRVRBUkcobG9uZyBkb3VibGUpOworCQkJCWR0b2FyZXN1bHQgPSBjcCA9CisJCQkJICAgIF9fbGR0b2EoJmZwYXJnLmxkYmwsIGV4cGNoYXIgPyAyIDogMywgcHJlYywKKwkJCQkgICAgJmV4cHQsICZzaWduZmxhZywgJmR0b2FlbmQpOworCQkJCWlmIChkdG9hcmVzdWx0ID09IE5VTEwpIHsKKwkJCQkJZXJybm8gPSBFTk9NRU07CisJCQkJCWdvdG8gZXJyb3I7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlmcGFyZy5kYmwgPSBHRVRBUkcoZG91YmxlKTsKKwkJCQlkdG9hcmVzdWx0ID0gY3AgPQorCQkJCSAgICBfX2R0b2EoZnBhcmcuZGJsLCBleHBjaGFyID8gMiA6IDMsIHByZWMsCisJCQkJICAgICZleHB0LCAmc2lnbmZsYWcsICZkdG9hZW5kKTsKKwkJCQlpZiAoZHRvYXJlc3VsdCA9PSBOVUxMKSB7CisJCQkJCWVycm5vID0gRU5PTUVNOworCQkJCQlnb3RvIGVycm9yOworCQkJCX0KKwkJCQlpZiAoZXhwdCA9PSA5OTk5KQorCQkJCQlleHB0ID0gSU5UX01BWDsKKyAJCQl9CitmcF9jb21tb246CisJCQlpZiAoc2lnbmZsYWcpCisJCQkJc2lnbiA9ICctJzsKKwkJCWlmIChleHB0ID09IElOVF9NQVgpIHsJLyogaW5mIG9yIG5hbiAqLworCQkJCWlmICgqY3AgPT0gJ04nKSB7CisJCQkJCWNwID0gKGNoID49ICdhJykgPyAibmFuIiA6ICJOQU4iOworCQkJCQlzaWduID0gJ1wwJzsKKwkJCQl9IGVsc2UKKwkJCQkJY3AgPSAoY2ggPj0gJ2EnKSA/ICJpbmYiIDogIklORiI7CisgCQkJCXNpemUgPSAzOworCQkJCWZsYWdzICY9IH5aRVJPUEFEOworIAkJCQlicmVhazsKKyAJCQl9CisJCQlmbGFncyB8PSBGUFQ7CisJCQluZGlnID0gZHRvYWVuZCAtIGNwOworIAkJCWlmIChjaCA9PSAnZycgfHwgY2ggPT0gJ0cnKSB7CisJCQkJaWYgKGV4cHQgPiAtNCAmJiBleHB0IDw9IHByZWMpIHsKKwkJCQkJLyogTWFrZSAlW2dHXSBzbWVsbCBsaWtlICVbZkZdICovCisJCQkJCWV4cGNoYXIgPSAnXDAnOworCQkJCQlpZiAoZmxhZ3MgJiBBTFQpCisJCQkJCQlwcmVjIC09IGV4cHQ7CisJCQkJCWVsc2UKKwkJCQkJCXByZWMgPSBuZGlnIC0gZXhwdDsKKwkJCQkJaWYgKHByZWMgPCAwKQorCQkJCQkJcHJlYyA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyoKKwkJCQkJICogTWFrZSAlW2dHXSBzbWVsbCBsaWtlICVbZUVdLCBidXQKKwkJCQkJICogdHJpbSB0cmFpbGluZyB6ZXJvZXMgaWYgbm8gIyBmbGFnLgorCQkJCQkgKi8KKwkJCQkJaWYgKCEoZmxhZ3MgJiBBTFQpKQorCQkJCQkJcHJlYyA9IG5kaWc7CisJCQkJfQorIAkJCX0KKwkJCWlmIChleHBjaGFyKSB7CisJCQkJZXhwc2l6ZSA9IGV4cG9uZW50KGV4cHN0ciwgZXhwdCAtIDEsIGV4cGNoYXIpOworCQkJCXNpemUgPSBleHBzaXplICsgcHJlYzsKKwkJCQlpZiAocHJlYyA+IDEgfHwgZmxhZ3MgJiBBTFQpCisgCQkJCQkrK3NpemU7CisJCQl9IGVsc2UgeworCQkJCS8qIHNwYWNlIGZvciBkaWdpdHMgYmVmb3JlIGRlY2ltYWwgcG9pbnQgKi8KKwkJCQlpZiAoZXhwdCA+IDApCisJCQkJCXNpemUgPSBleHB0OworCQkJCWVsc2UJLyogIjAiICovCisJCQkJCXNpemUgPSAxOworCQkJCS8qIHNwYWNlIGZvciBkZWNpbWFsIHB0IGFuZCBmb2xsb3dpbmcgZGlnaXRzICovCisJCQkJaWYgKHByZWMgfHwgZmxhZ3MgJiBBTFQpCisJCQkJCXNpemUgKz0gcHJlYyArIDE7CisJCQkJbGVhZCA9IGV4cHQ7CisJCQl9CisJCQlicmVhazsKKyNlbmRpZiAvKiBGTE9BVElOR19QT0lOVCAqLworI2lmbmRlZiBOT19QUklOVEZfUEVSQ0VOVF9OCisJCWNhc2UgJ24nOgorCQkJaWYgKGZsYWdzICYgTExPTkdJTlQpCisJCQkJKkdFVEFSRyhsb25nIGxvbmcgKikgPSByZXQ7CisJCQllbHNlIGlmIChmbGFncyAmIExPTkdJTlQpCisJCQkJKkdFVEFSRyhsb25nICopID0gcmV0OworCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVElOVCkKKwkJCQkqR0VUQVJHKHNob3J0ICopID0gcmV0OworCQkJZWxzZSBpZiAoZmxhZ3MgJiBDSEFSSU5UKQorCQkJCSpHRVRBUkcoc2lnbmVkIGNoYXIgKikgPSByZXQ7CisJCQllbHNlIGlmIChmbGFncyAmIFBUUklOVCkKKwkJCQkqR0VUQVJHKHB0cmRpZmZfdCAqKSA9IHJldDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgU0laRUlOVCkKKwkJCQkqR0VUQVJHKHNzaXplX3QgKikgPSByZXQ7CisJCQllbHNlIGlmIChmbGFncyAmIE1BWElOVCkKKwkJCQkqR0VUQVJHKGludG1heF90ICopID0gcmV0OworCQkJZWxzZQorCQkJCSpHRVRBUkcoaW50ICopID0gcmV0OworCQkJY29udGludWU7CS8qIG5vIG91dHB1dCAqLworI2VuZGlmIC8qIE5PX1BSSU5URl9QRVJDRU5UX04gKi8KKwkJY2FzZSAnTyc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ28nOgorCQkJX3VtYXggPSBVQVJHKCk7CisJCQliYXNlID0gT0NUOworCQkJZ290byBub3NpZ247CisJCWNhc2UgJ3AnOgorCQkJLyoKKwkJCSAqIGBgVGhlIGFyZ3VtZW50IHNoYWxsIGJlIGEgcG9pbnRlciB0byB2b2lkLiAgVGhlCisJCQkgKiB2YWx1ZSBvZiB0aGUgcG9pbnRlciBpcyBjb252ZXJ0ZWQgdG8gYSBzZXF1ZW5jZQorCQkJICogb2YgcHJpbnRhYmxlIGNoYXJhY3RlcnMsIGluIGFuIGltcGxlbWVudGF0aW9uLQorCQkJICogZGVmaW5lZCBtYW5uZXIuJycKKwkJCSAqCS0tIEFOU0kgWDNKMTEKKwkJCSAqLworCQkJLyogTk9TVFJJQ1QgKi8KKwkJCV91bWF4ID0gKHVfbG9uZylHRVRBUkcodm9pZCAqKTsKKwkJCWJhc2UgPSBIRVg7CisJCQl4ZGlncyA9IHhkaWdzX2xvd2VyOworCQkJb3hbMV0gPSAneCc7CisJCQlnb3RvIG5vc2lnbjsKKwkJY2FzZSAncyc6CisjaWZkZWYgUFJJTlRGX1dJREVfQ0hBUgorCQkJaWYgKGZsYWdzICYgTE9OR0lOVCkgeworCQkJCXdjaGFyX3QgKndjcDsKKworCQkJCWlmIChjb252YnVmICE9IE5VTEwpIHsKKwkJCQkJZnJlZShjb252YnVmKTsKKwkJCQkJY29udmJ1ZiA9IE5VTEw7CisJCQkJfQorCQkJCWlmICgod2NwID0gR0VUQVJHKHdjaGFyX3QgKikpID09IE5VTEwpIHsKKwkJCQkJY3AgPSAiKG51bGwpIjsKKwkJCQl9IGVsc2UgeworCQkJCQljb252YnVmID0gX193Y3Njb252KHdjcCwgcHJlYyk7CisJCQkJCWlmIChjb252YnVmID09IE5VTEwpIHsKKwkJCQkJCWZwLT5fZmxhZ3MgPSBfX1NFUlI7CisJCQkJCQlnb3RvIGVycm9yOworCQkJCQl9CisJCQkJCWNwID0gY29udmJ1ZjsKKwkJCQl9CisJCQl9IGVsc2UKKyNlbmRpZiAvKiBQUklOVEZfV0lERV9DSEFSICovCisJCQlpZiAoKGNwID0gR0VUQVJHKGNoYXIgKikpID09IE5VTEwpCisJCQkJY3AgPSAiKG51bGwpIjsKKwkJCWlmIChwcmVjID49IDApIHsKKwkJCQkvKgorCQkJCSAqIGNhbid0IHVzZSBzdHJsZW47IGNhbiBvbmx5IGxvb2sgZm9yIHRoZQorCQkJCSAqIE5VTCBpbiB0aGUgZmlyc3QgYHByZWMnIGNoYXJhY3RlcnMsIGFuZAorCQkJCSAqIHN0cmxlbigpIHdpbGwgZ28gZnVydGhlci4KKwkJCQkgKi8KKwkJCQljaGFyICpwID0gbWVtY2hyKGNwLCAwLCBwcmVjKTsKKworCQkJCXNpemUgPSBwID8gKHAgLSBjcCkgOiBwcmVjOworCQkJfSBlbHNlIHsKKwkJCQlzaXplX3QgbGVuOworCisJCQkJaWYgKChsZW4gPSBzdHJsZW4oY3ApKSA+IElOVF9NQVgpCisJCQkJCWdvdG8gb3ZlcmZsb3c7CisJCQkJc2l6ZSA9IChpbnQpbGVuOworCQkJfQorCQkJc2lnbiA9ICdcMCc7CisJCQlicmVhazsKKwkJY2FzZSAnVSc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ3UnOgorCQkJX3VtYXggPSBVQVJHKCk7CisJCQliYXNlID0gREVDOworCQkJZ290byBub3NpZ247CisJCWNhc2UgJ1gnOgorCQkJeGRpZ3MgPSB4ZGlnc191cHBlcjsKKwkJCWdvdG8gaGV4OworCQljYXNlICd4JzoKKwkJCXhkaWdzID0geGRpZ3NfbG93ZXI7CitoZXg6CQkJX3VtYXggPSBVQVJHKCk7CisJCQliYXNlID0gSEVYOworCQkJLyogbGVhZGluZyAweC9YIG9ubHkgaWYgbm9uLXplcm8gKi8KKwkJCWlmIChmbGFncyAmIEFMVCAmJiBfdW1heCAhPSAwKQorCQkJCW94WzFdID0gY2g7CisKKwkJCS8qIHVuc2lnbmVkIGNvbnZlcnNpb25zICovCitub3NpZ246CQkJc2lnbiA9ICdcMCc7CisJCQkvKgorCQkJICogYGAuLi4gZGlvdVh4IGNvbnZlcnNpb25zIC4uLiBpZiBhIHByZWNpc2lvbiBpcworCQkJICogc3BlY2lmaWVkLCB0aGUgMCBmbGFnIHdpbGwgYmUgaWdub3JlZC4nJworCQkJICoJLS0gQU5TSSBYM0oxMQorCQkJICovCitudW1iZXI6CQkJaWYgKChkcHJlYyA9IHByZWMpID49IDApCisJCQkJZmxhZ3MgJj0gflpFUk9QQUQ7CisKKwkJCS8qCisJCQkgKiBgYFRoZSByZXN1bHQgb2YgY29udmVydGluZyBhIHplcm8gdmFsdWUgd2l0aCBhbgorCQkJICogZXhwbGljaXQgcHJlY2lzaW9uIG9mIHplcm8gaXMgbm8gY2hhcmFjdGVycy4nJworCQkJICoJLS0gQU5TSSBYM0oxMQorCQkJICovCisJCQljcCA9IGJ1ZiArIEJVRjsKKwkJCWlmIChfdW1heCAhPSAwIHx8IHByZWMgIT0gMCkgeworCQkJCS8qCisJCQkJICogVW5zaWduZWQgbW9kIGlzIGhhcmQsIGFuZCB1bnNpZ25lZCBtb2QKKwkJCQkgKiBieSBhIGNvbnN0YW50IGlzIGVhc2llciB0aGFuIHRoYXQgYnkKKwkJCQkgKiBhIHZhcmlhYmxlOyBoZW5jZSB0aGlzIHN3aXRjaC4KKwkJCQkgKi8KKwkJCQlzd2l0Y2ggKGJhc2UpIHsKKwkJCQljYXNlIE9DVDoKKwkJCQkJZG8geworCQkJCQkJKi0tY3AgPSB0b19jaGFyKF91bWF4ICYgNyk7CisJCQkJCQlfdW1heCA+Pj0gMzsKKwkJCQkJfSB3aGlsZSAoX3VtYXgpOworCQkJCQkvKiBoYW5kbGUgb2N0YWwgbGVhZGluZyAwICovCisJCQkJCWlmIChmbGFncyAmIEFMVCAmJiAqY3AgIT0gJzAnKQorCQkJCQkJKi0tY3AgPSAnMCc7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBERUM6CisJCQkJCS8qIG1hbnkgbnVtYmVycyBhcmUgMSBkaWdpdCAqLworCQkJCQl3aGlsZSAoX3VtYXggPj0gMTApIHsKKwkJCQkJCSotLWNwID0gdG9fY2hhcihfdW1heCAlIDEwKTsKKwkJCQkJCV91bWF4IC89IDEwOworCQkJCQl9CisJCQkJCSotLWNwID0gdG9fY2hhcihfdW1heCk7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBIRVg6CisJCQkJCWRvIHsKKwkJCQkJCSotLWNwID0geGRpZ3NbX3VtYXggJiAxNV07CisJCQkJCQlfdW1heCA+Pj0gNDsKKwkJCQkJfSB3aGlsZSAoX3VtYXgpOworCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCWNwID0gImJ1ZyBpbiB2ZnByaW50ZjogYmFkIGJhc2UiOworCQkJCQlzaXplID0gc3RybGVuKGNwKTsKKwkJCQkJZ290byBza2lwc2l6ZTsKKwkJCQl9CisJCQl9CisJCQlzaXplID0gYnVmICsgQlVGIC0gY3A7CisJCQlpZiAoc2l6ZSA+IEJVRikJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQkJCWFib3J0KCk7CisJCXNraXBzaXplOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CS8qICIlPyIgcHJpbnRzID8sIHVubGVzcyA/IGlzIE5VTCAqLworCQkJaWYgKGNoID09ICdcMCcpCisJCQkJZ290byBkb25lOworCQkJLyogcHJldGVuZCBpdCB3YXMgJWMgd2l0aCBhcmd1bWVudCBjaCAqLworCQkJY3AgPSBidWY7CisJCQkqY3AgPSBjaDsKKwkJCXNpemUgPSAxOworCQkJc2lnbiA9ICdcMCc7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIEFsbCByZWFzb25hYmxlIGZvcm1hdHMgd2luZCB1cCBoZXJlLiAgQXQgdGhpcyBwb2ludCwgYGNwJworCQkgKiBwb2ludHMgdG8gYSBzdHJpbmcgd2hpY2ggKGlmIG5vdCBmbGFncyZMQURKVVNUKSBzaG91bGQgYmUKKwkJICogcGFkZGVkIG91dCB0byBgd2lkdGgnIHBsYWNlcy4gIElmIGZsYWdzJlpFUk9QQUQsIGl0IHNob3VsZAorCQkgKiBmaXJzdCBiZSBwcmVmaXhlZCBieSBhbnkgc2lnbiBvciBvdGhlciBwcmVmaXg7IG90aGVyd2lzZSwKKwkJICogaXQgc2hvdWxkIGJlIGJsYW5rIHBhZGRlZCBiZWZvcmUgdGhlIHByZWZpeCBpcyBlbWl0dGVkLgorCQkgKiBBZnRlciBhbnkgbGVmdC1oYW5kIHBhZGRpbmcgYW5kIHByZWZpeGluZywgZW1pdCB6ZXJvZXMKKwkJICogcmVxdWlyZWQgYnkgYSBkZWNpbWFsICVbZGlvdXhYXSBwcmVjaXNpb24sIHRoZW4gcHJpbnQgdGhlCisJCSAqIHN0cmluZyBwcm9wZXIsIHRoZW4gZW1pdCB6ZXJvZXMgcmVxdWlyZWQgYnkgYW55IGxlZnRvdmVyCisJCSAqIGZsb2F0aW5nIHByZWNpc2lvbjsgZmluYWxseSwgaWYgTEFESlVTVCwgcGFkIHdpdGggYmxhbmtzLgorCQkgKgorCQkgKiBDb21wdXRlIGFjdHVhbCBzaXplLCBzbyB3ZSBrbm93IGhvdyBtdWNoIHRvIHBhZC4KKwkJICogc2l6ZSBleGNsdWRlcyBkZWNpbWFsIHByZWM7IHJlYWxzeiBpbmNsdWRlcyBpdC4KKwkJICovCisJCXJlYWxzeiA9IGRwcmVjID4gc2l6ZSA/IGRwcmVjIDogc2l6ZTsKKwkJaWYgKHNpZ24pCisJCQlyZWFsc3orKzsKKwkJaWYgKG94WzFdKQorCQkJcmVhbHN6Kz0gMjsKKworCQkvKiByaWdodC1hZGp1c3RpbmcgYmxhbmsgcGFkZGluZyAqLworCQlpZiAoKGZsYWdzICYgKExBREpVU1R8WkVST1BBRCkpID09IDApCisJCQlQQUQod2lkdGggLSByZWFsc3osIGJsYW5rcyk7CisKKwkJLyogcHJlZml4ICovCisJCWlmIChzaWduKQorCQkJUFJJTlQoJnNpZ24sIDEpOworCQlpZiAob3hbMV0pIHsJLyogb3hbMV0gaXMgZWl0aGVyIHgsIFgsIG9yIFwwICovCisJCQlveFswXSA9ICcwJzsKKwkJCVBSSU5UKG94LCAyKTsKKwkJfQorCisJCS8qIHJpZ2h0LWFkanVzdGluZyB6ZXJvIHBhZGRpbmcgKi8KKwkJaWYgKChmbGFncyAmIChMQURKVVNUfFpFUk9QQUQpKSA9PSBaRVJPUEFEKQorCQkJUEFEKHdpZHRoIC0gcmVhbHN6LCB6ZXJvZXMpOworCisJCS8qIGxlYWRpbmcgemVyb2VzIGZyb20gZGVjaW1hbCBwcmVjaXNpb24gKi8KKwkJUEFEKGRwcmVjIC0gc2l6ZSwgemVyb2VzKTsKKworCQkvKiB0aGUgc3RyaW5nIG9yIG51bWJlciBwcm9wZXIgKi8KKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCQlpZiAoKGZsYWdzICYgRlBUKSA9PSAwKSB7CisJCQlQUklOVChjcCwgc2l6ZSk7CisJCX0gZWxzZSB7CS8qIGdsdWUgdG9nZXRoZXIgZl9wIGZyYWdtZW50cyAqLworCQkJaWYgKGRlY2ltYWxfcG9pbnQgPT0gTlVMTCkKKwkJCQlkZWNpbWFsX3BvaW50ID0gbmxfbGFuZ2luZm8oUkFESVhDSEFSKTsKKwkJCWlmICghZXhwY2hhcikgewkvKiAlW2ZGXSBvciBzdWZmaWNpZW50bHkgc2hvcnQgJVtnR10gKi8KKwkJCQlpZiAoZXhwdCA8PSAwKSB7CisJCQkJCVBSSU5UKHplcm9lcywgMSk7CisJCQkJCWlmIChwcmVjIHx8IGZsYWdzICYgQUxUKQorCQkJCQkJUFJJTlQoZGVjaW1hbF9wb2ludCwgMSk7CisJCQkJCVBBRCgtZXhwdCwgemVyb2VzKTsKKwkJCQkJLyogYWxyZWFkeSBoYW5kbGVkIGluaXRpYWwgMCdzICovCisJCQkJCXByZWMgKz0gZXhwdDsKKyAJCQkJfSBlbHNlIHsKKwkJCQkJUFJJTlRBTkRQQUQoY3AsIGR0b2FlbmQsIGxlYWQsIHplcm9lcyk7CisJCQkJCWNwICs9IGxlYWQ7CisJCQkJCWlmIChwcmVjIHx8IGZsYWdzICYgQUxUKQorCQkJCQkJUFJJTlQoZGVjaW1hbF9wb2ludCwgMSk7CisJCQkJfQorCQkJCVBSSU5UQU5EUEFEKGNwLCBkdG9hZW5kLCBwcmVjLCB6ZXJvZXMpOworCQkJfSBlbHNlIHsJLyogJVtlRV0gb3Igc3VmZmljaWVudGx5IGxvbmcgJVtnR10gKi8KKwkJCQlpZiAocHJlYyA+IDEgfHwgZmxhZ3MgJiBBTFQpIHsKKwkJCQkJYnVmWzBdID0gKmNwKys7CisJCQkJCWJ1ZlsxXSA9ICpkZWNpbWFsX3BvaW50OworCQkJCQlQUklOVChidWYsIDIpOworCQkJCQlQUklOVChjcCwgbmRpZy0xKTsKKwkJCQkJUEFEKHByZWMgLSBuZGlnLCB6ZXJvZXMpOworCQkJCX0gZWxzZSB7IC8qIFhlWVlZICovCisJCQkJCVBSSU5UKGNwLCAxKTsKKwkJCQl9CisJCQkJUFJJTlQoZXhwc3RyLCBleHBzaXplKTsKKwkJCX0KKwkJfQorI2Vsc2UKKwkJUFJJTlQoY3AsIHNpemUpOworI2VuZGlmCisJCS8qIGxlZnQtYWRqdXN0aW5nIHBhZGRpbmcgKGFsd2F5cyBibGFuaykgKi8KKwkJaWYgKGZsYWdzICYgTEFESlVTVCkKKwkJCVBBRCh3aWR0aCAtIHJlYWxzeiwgYmxhbmtzKTsKKworCQkvKiBmaW5hbGx5LCBhZGp1c3QgcmV0ICovCisJCWlmICh3aWR0aCA8IHJlYWxzeikKKwkJCXdpZHRoID0gcmVhbHN6OworCQlpZiAod2lkdGggPiBJTlRfTUFYIC0gcmV0KQorCQkJZ290byBvdmVyZmxvdzsKKwkJcmV0ICs9IHdpZHRoOworCisJCUZMVVNIKCk7CS8qIGNvcHkgb3V0IHRoZSBJL08gdmVjdG9ycyAqLworCX0KK2RvbmU6CisJRkxVU0goKTsKK2Vycm9yOgorCXZhX2VuZChvcmdhcCk7CisJaWYgKF9fc2ZlcnJvcihmcCkpCisJCXJldCA9IC0xOworCWdvdG8gZmluaXNoOworCitvdmVyZmxvdzoKKwllcnJubyA9IEVOT01FTTsKKwlyZXQgPSAtMTsKKworZmluaXNoOgorI2lmZGVmIFBSSU5URl9XSURFX0NIQVIKKwlpZiAoY29udmJ1ZikKKwkJZnJlZShjb252YnVmKTsKKyNlbmRpZgorI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJaWYgKGR0b2FyZXN1bHQpCisJCV9fZnJlZWR0b2EoZHRvYXJlc3VsdCk7CisjZW5kaWYKKwlpZiAoYXJndGFibGUgIT0gTlVMTCAmJiBhcmd0YWJsZSAhPSBzdGF0YXJndGFibGUpIHsKKwkJbXVubWFwKGFyZ3RhYmxlLCBhcmd0YWJsZXNpeik7CisJCWFyZ3RhYmxlID0gTlVMTDsKKwl9CisJcmV0dXJuIChyZXQpOworfQorCisvKgorICogVHlwZSBpZHMgZm9yIGFyZ3VtZW50IHR5cGUgdGFibGUuCisgKi8KKyNkZWZpbmUgVF9VTlVTRUQJMAorI2RlZmluZSBUX1NIT1JUCQkxCisjZGVmaW5lIFRfVV9TSE9SVAkyCisjZGVmaW5lIFRQX1NIT1JUCTMKKyNkZWZpbmUgVF9JTlQJCTQKKyNkZWZpbmUgVF9VX0lOVAkJNQorI2RlZmluZSBUUF9JTlQJCTYKKyNkZWZpbmUgVF9MT05HCQk3CisjZGVmaW5lIFRfVV9MT05HCTgKKyNkZWZpbmUgVFBfTE9ORwkJOQorI2RlZmluZSBUX0xMT05HCQkxMAorI2RlZmluZSBUX1VfTExPTkcJMTEKKyNkZWZpbmUgVFBfTExPTkcJMTIKKyNkZWZpbmUgVF9ET1VCTEUJMTMKKyNkZWZpbmUgVF9MT05HX0RPVUJMRQkxNAorI2RlZmluZSBUUF9DSEFSCQkxNQorI2RlZmluZSBUUF9WT0lECQkxNgorI2RlZmluZSBUX1BUUklOVAkxNworI2RlZmluZSBUUF9QVFJJTlQJMTgKKyNkZWZpbmUgVF9TSVpFSU5UCTE5CisjZGVmaW5lIFRfU1NJWkVJTlQJMjAKKyNkZWZpbmUgVFBfU1NJWkVJTlQJMjEKKyNkZWZpbmUgVF9NQVhJTlQJMjIKKyNkZWZpbmUgVF9NQVhVSU5UCTIzCisjZGVmaW5lIFRQX01BWElOVAkyNAorI2RlZmluZSBUX0NIQVIJCTI1CisjZGVmaW5lIFRfVV9DSEFSCTI2CisjZGVmaW5lIFRfV0lOVAkJMjcKKyNkZWZpbmUgVFBfV0NIQVIJMjgKKworLyoKKyAqIEZpbmQgYWxsIGFyZ3VtZW50cyB3aGVuIGEgcG9zaXRpb25hbCBwYXJhbWV0ZXIgaXMgZW5jb3VudGVyZWQuICBSZXR1cm5zIGEKKyAqIHRhYmxlLCBpbmRleGVkIGJ5IGFyZ3VtZW50IG51bWJlciwgb2YgcG9pbnRlcnMgdG8gZWFjaCBhcmd1bWVudHMuICBUaGUKKyAqIGluaXRpYWwgYXJndW1lbnQgdGFibGUgc2hvdWxkIGJlIGFuIGFycmF5IG9mIFNUQVRJQ19BUkdfVEJMX1NJWkUgZW50cmllcy4KKyAqIEl0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIG1tYXAtZWQgb25lIGlmIGl0IG92ZXJmbG93cyAobWFsbG9jIGNhbm5vdCBiZQorICogdXNlZCBzaW5jZSB3ZSBhcmUgYXR0ZW1wdGluZyB0byBtYWtlIHNucHJpbnRmIHRocmVhZCBzYWZlLCBhbmQgYWxsb2NhIGlzCisgKiBwcm9ibGVtYXRpYyBzaW5jZSB3ZSBoYXZlIG5lc3RlZCBmdW5jdGlvbnMuLikKKyAqLworc3RhdGljIGludAorX19maW5kX2FyZ3VtZW50cyhjb25zdCBjaGFyICpmbXQwLCB2YV9saXN0IGFwLCB1bmlvbiBhcmcgKiphcmd0YWJsZSwKKyAgICBzaXplX3QgKmFyZ3RhYmxlc2l6KQoreworCWNoYXIgKmZtdDsJCS8qIGZvcm1hdCBzdHJpbmcgKi8KKwlpbnQgY2g7CQkJLyogY2hhcmFjdGVyIGZyb20gZm10ICovCisJaW50IG4sIG4yOwkJLyogaGFuZHkgaW50ZWdlciAoc2hvcnQgdGVybSB1c2FnZSkgKi8KKwljaGFyICpjcDsJCS8qIGhhbmR5IGNoYXIgcG9pbnRlciAoc2hvcnQgdGVybSB1c2FnZSkgKi8KKwlpbnQgZmxhZ3M7CQkvKiBmbGFncyBhcyBhYm92ZSAqLworCXVuc2lnbmVkIGNoYXIgKnR5cGV0YWJsZTsgLyogdGFibGUgb2YgdHlwZXMgKi8KKwl1bnNpZ25lZCBjaGFyIHN0YXR0eXBldGFibGVbU1RBVElDX0FSR19UQkxfU0laRV07CisJaW50IHRhYmxlc2l6ZTsJCS8qIGN1cnJlbnQgc2l6ZSBvZiB0eXBlIHRhYmxlICovCisJaW50IHRhYmxlbWF4OwkJLyogbGFyZ2VzdCB1c2VkIGluZGV4IGluIHRhYmxlICovCisJaW50IG5leHRhcmc7CQkvKiAxLWJhc2VkIGFyZ3VtZW50IGluZGV4ICovCisJaW50IHJldCA9IDA7CQkvKiByZXR1cm4gdmFsdWUgKi8KKwl3Y2hhcl90IHdjOworCW1ic3RhdGVfdCBwczsKKworCS8qCisJICogQWRkIGFuIGFyZ3VtZW50IHR5cGUgdG8gdGhlIHRhYmxlLCBleHBhbmRpbmcgaWYgbmVjZXNzYXJ5LgorCSAqLworI2RlZmluZSBBRERUWVBFKHR5cGUpIFwKKwkoKG5leHRhcmcgPj0gdGFibGVzaXplKSA/IFwKKwkJX19ncm93X3R5cGVfdGFibGUoJnR5cGV0YWJsZSwgJnRhYmxlc2l6ZSkgOiAwLCBcCisJKG5leHRhcmcgPiB0YWJsZW1heCkgPyB0YWJsZW1heCA9IG5leHRhcmcgOiAwLCBcCisJdHlwZXRhYmxlW25leHRhcmcrK10gPSB0eXBlKQorCisjZGVmaW5lCUFERFNBUkcoKSBcCisgICAgICAgICgoZmxhZ3MmTUFYSU5UKSA/IEFERFRZUEUoVF9NQVhJTlQpIDogXAorCSAgICAoKGZsYWdzJlBUUklOVCkgPyBBRERUWVBFKFRfUFRSSU5UKSA6IFwKKwkgICAgKChmbGFncyZTSVpFSU5UKSA/IEFERFRZUEUoVF9TU0laRUlOVCkgOiBcCisJICAgICgoZmxhZ3MmTExPTkdJTlQpID8gQUREVFlQRShUX0xMT05HKSA6IFwKKwkgICAgKChmbGFncyZMT05HSU5UKSA/IEFERFRZUEUoVF9MT05HKSA6IFwKKwkgICAgKChmbGFncyZTSE9SVElOVCkgPyBBRERUWVBFKFRfU0hPUlQpIDogXAorCSAgICAoKGZsYWdzJkNIQVJJTlQpID8gQUREVFlQRShUX0NIQVIpIDogQUREVFlQRShUX0lOVCkpKSkpKSkpCisKKyNkZWZpbmUJQUREVUFSRygpIFwKKyAgICAgICAgKChmbGFncyZNQVhJTlQpID8gQUREVFlQRShUX01BWFVJTlQpIDogXAorCSAgICAoKGZsYWdzJlBUUklOVCkgPyBBRERUWVBFKFRfUFRSSU5UKSA6IFwKKwkgICAgKChmbGFncyZTSVpFSU5UKSA/IEFERFRZUEUoVF9TSVpFSU5UKSA6IFwKKwkgICAgKChmbGFncyZMTE9OR0lOVCkgPyBBRERUWVBFKFRfVV9MTE9ORykgOiBcCisJICAgICgoZmxhZ3MmTE9OR0lOVCkgPyBBRERUWVBFKFRfVV9MT05HKSA6IFwKKwkgICAgKChmbGFncyZTSE9SVElOVCkgPyBBRERUWVBFKFRfVV9TSE9SVCkgOiBcCisJICAgICgoZmxhZ3MmQ0hBUklOVCkgPyBBRERUWVBFKFRfVV9DSEFSKSA6IEFERFRZUEUoVF9VX0lOVCkpKSkpKSkpCisKKwkvKgorCSAqIEFkZCAqIGFyZ3VtZW50cyB0byB0aGUgdHlwZSBhcnJheS4KKwkgKi8KKyNkZWZpbmUgQUREQVNURVIoKSBcCisJbjIgPSAwOyBcCisJY3AgPSBmbXQ7IFwKKwl3aGlsZSAoaXNfZGlnaXQoKmNwKSkgeyBcCisJCUFQUEVORF9ESUdJVChuMiwgKmNwKTsgXAorCQljcCsrOyBcCisJfSBcCisJaWYgKCpjcCA9PSAnJCcpIHsgXAorCQlpbnQgaG9sZCA9IG5leHRhcmc7IFwKKwkJbmV4dGFyZyA9IG4yOyBcCisJCUFERFRZUEUoVF9JTlQpOyBcCisJCW5leHRhcmcgPSBob2xkOyBcCisJCWZtdCA9ICsrY3A7IFwKKwl9IGVsc2UgeyBcCisJCUFERFRZUEUoVF9JTlQpOyBcCisJfQorCWZtdCA9IChjaGFyICopZm10MDsKKwl0eXBldGFibGUgPSBzdGF0dHlwZXRhYmxlOworCXRhYmxlc2l6ZSA9IFNUQVRJQ19BUkdfVEJMX1NJWkU7CisJdGFibGVtYXggPSAwOworCW5leHRhcmcgPSAxOworCW1lbXNldCh0eXBldGFibGUsIFRfVU5VU0VELCBTVEFUSUNfQVJHX1RCTF9TSVpFKTsKKwltZW1zZXQoJnBzLCAwLCBzaXplb2YocHMpKTsKKworCS8qCisJICogU2NhbiB0aGUgZm9ybWF0IGZvciBjb252ZXJzaW9ucyAoYCUnIGNoYXJhY3RlcikuCisJICovCisJZm9yICg7OykgeworCQljcCA9IGZtdDsKKwkJd2hpbGUgKChuID0gbWJydG93Yygmd2MsIGZtdCwgTUJfQ1VSX01BWCwgJnBzKSkgPiAwKSB7CisJCQlmbXQgKz0gbjsKKwkJCWlmICh3YyA9PSAnJScpIHsKKwkJCQlmbXQtLTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAobiA8PSAwKQorCQkJZ290byBkb25lOworCQlmbXQrKzsJCS8qIHNraXAgb3ZlciAnJScgKi8KKworCQlmbGFncyA9IDA7CisKK3JmbGFnOgkJY2ggPSAqZm10Kys7CityZXN3aXRjaDoJc3dpdGNoIChjaCkgeworCQljYXNlICcgJzoKKwkJY2FzZSAnIyc6CisJCWNhc2UgJ1wnJzoKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJyonOgorCQkJQUREQVNURVIoKTsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJy0nOgorCQljYXNlICcrJzoKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJy4nOgorCQkJaWYgKChjaCA9ICpmbXQrKykgPT0gJyonKSB7CisJCQkJQUREQVNURVIoKTsKKwkJCQlnb3RvIHJmbGFnOworCQkJfQorCQkJd2hpbGUgKGlzX2RpZ2l0KGNoKSkgeworCQkJCWNoID0gKmZtdCsrOworCQkJfQorCQkJZ290byByZXN3aXRjaDsKKwkJY2FzZSAnMCc6CisJCQlnb3RvIHJmbGFnOworCQljYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKwkJY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorCQkJbiA9IDA7CisJCQlkbyB7CisJCQkJQVBQRU5EX0RJR0lUKG4gLGNoKTsKKwkJCQljaCA9ICpmbXQrKzsKKwkJCX0gd2hpbGUgKGlzX2RpZ2l0KGNoKSk7CisJCQlpZiAoY2ggPT0gJyQnKSB7CisJCQkJbmV4dGFyZyA9IG47CisJCQkJZ290byByZmxhZzsKKwkJCX0KKwkJCWdvdG8gcmVzd2l0Y2g7CisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwkJY2FzZSAnTCc6CisJCQlmbGFncyB8PSBMT05HREJMOworCQkJZ290byByZmxhZzsKKyNlbmRpZgorCQljYXNlICdoJzoKKwkJCWlmICgqZm10ID09ICdoJykgeworCQkJCWZtdCsrOworCQkJCWZsYWdzIHw9IENIQVJJTlQ7CisJCQl9IGVsc2UgeworCQkJCWZsYWdzIHw9IFNIT1JUSU5UOworCQkJfQorCQkJZ290byByZmxhZzsKKwkJY2FzZSAnaic6CisJCQlmbGFncyB8PSBNQVhJTlQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICdsJzoKKwkJCWlmICgqZm10ID09ICdsJykgeworCQkJCWZtdCsrOworCQkJCWZsYWdzIHw9IExMT05HSU5UOworCQkJfSBlbHNlIHsKKwkJCQlmbGFncyB8PSBMT05HSU5UOworCQkJfQorCQkJZ290byByZmxhZzsKKwkJY2FzZSAncSc6CisJCQlmbGFncyB8PSBMTE9OR0lOVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ3QnOgorCQkJZmxhZ3MgfD0gUFRSSU5UOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAneic6CisJCQlmbGFncyB8PSBTSVpFSU5UOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnYyc6CisjaWZkZWYgUFJJTlRGX1dJREVfQ0hBUgorCQkJaWYgKGZsYWdzICYgTE9OR0lOVCkKKwkJCQlBRERUWVBFKFRfV0lOVCk7CisJCQllbHNlCisjZW5kaWYKKwkJCQlBRERUWVBFKFRfSU5UKTsKKwkJCWJyZWFrOworCQljYXNlICdEJzoKKwkJCWZsYWdzIHw9IExPTkdJTlQ7CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAnZCc6CisJCWNhc2UgJ2knOgorCQkJQUREU0FSRygpOworCQkJYnJlYWs7CisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwkJY2FzZSAnYSc6CisJCWNhc2UgJ0EnOgorCQljYXNlICdlJzoKKwkJY2FzZSAnRSc6CisJCWNhc2UgJ2YnOgorCQljYXNlICdGJzoKKwkJY2FzZSAnZyc6CisJCWNhc2UgJ0cnOgorCQkJaWYgKGZsYWdzICYgTE9OR0RCTCkKKwkJCQlBRERUWVBFKFRfTE9OR19ET1VCTEUpOworCQkJZWxzZQorCQkJCUFERFRZUEUoVF9ET1VCTEUpOworCQkJYnJlYWs7CisjZW5kaWYgLyogRkxPQVRJTkdfUE9JTlQgKi8KKyNpZm5kZWYgTk9fUFJJTlRGX1BFUkNFTlRfTgorCQljYXNlICduJzoKKwkJCWlmIChmbGFncyAmIExMT05HSU5UKQorCQkJCUFERFRZUEUoVFBfTExPTkcpOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBMT05HSU5UKQorCQkJCUFERFRZUEUoVFBfTE9ORyk7CisJCQllbHNlIGlmIChmbGFncyAmIFNIT1JUSU5UKQorCQkJCUFERFRZUEUoVFBfU0hPUlQpOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBQVFJJTlQpCisJCQkJQUREVFlQRShUUF9QVFJJTlQpOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSVpFSU5UKQorCQkJCUFERFRZUEUoVFBfU1NJWkVJTlQpOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBNQVhJTlQpCisJCQkJQUREVFlQRShUUF9NQVhJTlQpOworCQkJZWxzZQorCQkJCUFERFRZUEUoVFBfSU5UKTsKKwkJCWNvbnRpbnVlOwkvKiBubyBvdXRwdXQgKi8KKyNlbmRpZiAvKiBOT19QUklOVEZfUEVSQ0VOVF9OICovCisJCWNhc2UgJ08nOgorCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCS8qRkFMTFRIUk9VR0gqLworCQljYXNlICdvJzoKKwkJCUFERFVBUkcoKTsKKwkJCWJyZWFrOworCQljYXNlICdwJzoKKwkJCUFERFRZUEUoVFBfVk9JRCk7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisjaWZkZWYgUFJJTlRGX1dJREVfQ0hBUgorCQkJaWYgKGZsYWdzICYgTE9OR0lOVCkKKwkJCQlBRERUWVBFKFRQX1dDSEFSKTsKKwkJCWVsc2UKKyNlbmRpZgorCQkJCUFERFRZUEUoVFBfQ0hBUik7CisJCQlicmVhazsKKwkJY2FzZSAnVSc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ3UnOgorCQljYXNlICdYJzoKKwkJY2FzZSAneCc6CisJCQlBRERVQVJHKCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoJLyogIiU/IiBwcmludHMgPywgdW5sZXNzID8gaXMgTlVMICovCisJCQlpZiAoY2ggPT0gJ1wwJykKKwkJCQlnb3RvIGRvbmU7CisJCQlicmVhazsKKwkJfQorCX0KK2RvbmU6CisJLyoKKwkgKiBCdWlsZCB0aGUgYXJndW1lbnQgdGFibGUuCisJICovCisJaWYgKHRhYmxlbWF4ID49IFNUQVRJQ19BUkdfVEJMX1NJWkUpIHsKKwkJKmFyZ3RhYmxlc2l6ID0gc2l6ZW9mKHVuaW9uIGFyZykgKiAodGFibGVtYXggKyAxKTsKKwkJKmFyZ3RhYmxlID0gbW1hcChOVUxMLCAqYXJndGFibGVzaXosCisJCSAgICBQUk9UX1dSSVRFfFBST1RfUkVBRCwgTUFQX0FOT058TUFQX1BSSVZBVEUsIC0xLCAwKTsKKwkJaWYgKCphcmd0YWJsZSA9PSBNQVBfRkFJTEVEKQorCQkJcmV0dXJuICgtMSk7CisJfQorCisjaWYgMAorCS8qIFhYWCBpcyB0aGlzIHJlcXVpcmVkPyAqLworCSgqYXJndGFibGUpWzBdLmludGFyZyA9IDA7CisjZW5kaWYKKwlmb3IgKG4gPSAxOyBuIDw9IHRhYmxlbWF4OyBuKyspIHsKKwkJc3dpdGNoICh0eXBldGFibGVbbl0pIHsKKwkJY2FzZSBUX1VOVVNFRDoKKwkJY2FzZSBUX0NIQVI6CisJCWNhc2UgVF9VX0NIQVI6CisJCWNhc2UgVF9TSE9SVDoKKwkJY2FzZSBUX1VfU0hPUlQ6CisJCWNhc2UgVF9JTlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS5pbnRhcmcgPSB2YV9hcmcoYXAsIGludCk7CisJCQlicmVhazsKKwkJY2FzZSBUUF9TSE9SVDoKKwkJCSgqYXJndGFibGUpW25dLnBzaG9ydGFyZyA9IHZhX2FyZyhhcCwgc2hvcnQgKik7CisJCQlicmVhazsKKwkJY2FzZSBUX1VfSU5UOgorCQkJKCphcmd0YWJsZSlbbl0udWludGFyZyA9IHZhX2FyZyhhcCwgdW5zaWduZWQgaW50KTsKKwkJCWJyZWFrOworCQljYXNlIFRQX0lOVDoKKwkJCSgqYXJndGFibGUpW25dLnBpbnRhcmcgPSB2YV9hcmcoYXAsIGludCAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRfTE9ORzoKKwkJCSgqYXJndGFibGUpW25dLmxvbmdhcmcgPSB2YV9hcmcoYXAsIGxvbmcpOworCQkJYnJlYWs7CisJCWNhc2UgVF9VX0xPTkc6CisJCQkoKmFyZ3RhYmxlKVtuXS51bG9uZ2FyZyA9IHZhX2FyZyhhcCwgdW5zaWduZWQgbG9uZyk7CisJCQlicmVhazsKKwkJY2FzZSBUUF9MT05HOgorCQkJKCphcmd0YWJsZSlbbl0ucGxvbmdhcmcgPSB2YV9hcmcoYXAsIGxvbmcgKik7CisJCQlicmVhazsKKwkJY2FzZSBUX0xMT05HOgorCQkJKCphcmd0YWJsZSlbbl0ubG9uZ2xvbmdhcmcgPSB2YV9hcmcoYXAsIGxvbmcgbG9uZyk7CisJCQlicmVhazsKKwkJY2FzZSBUX1VfTExPTkc6CisJCQkoKmFyZ3RhYmxlKVtuXS51bG9uZ2xvbmdhcmcgPSB2YV9hcmcoYXAsIHVuc2lnbmVkIGxvbmcgbG9uZyk7CisJCQlicmVhazsKKwkJY2FzZSBUUF9MTE9ORzoKKwkJCSgqYXJndGFibGUpW25dLnBsb25nbG9uZ2FyZyA9IHZhX2FyZyhhcCwgbG9uZyBsb25nICopOworCQkJYnJlYWs7CisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwkJY2FzZSBUX0RPVUJMRToKKwkJCSgqYXJndGFibGUpW25dLmRvdWJsZWFyZyA9IHZhX2FyZyhhcCwgZG91YmxlKTsKKwkJCWJyZWFrOworCQljYXNlIFRfTE9OR19ET1VCTEU6CisJCQkoKmFyZ3RhYmxlKVtuXS5sb25nZG91YmxlYXJnID0gdmFfYXJnKGFwLCBsb25nIGRvdWJsZSk7CisJCQlicmVhazsKKyNlbmRpZgorCQljYXNlIFRQX0NIQVI6CisJCQkoKmFyZ3RhYmxlKVtuXS5wY2hhcmFyZyA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRQX1ZPSUQ6CisJCQkoKmFyZ3RhYmxlKVtuXS5wdm9pZGFyZyA9IHZhX2FyZyhhcCwgdm9pZCAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRfUFRSSU5UOgorCQkJKCphcmd0YWJsZSlbbl0ucHRyZGlmZmFyZyA9IHZhX2FyZyhhcCwgcHRyZGlmZl90KTsKKwkJCWJyZWFrOworCQljYXNlIFRQX1BUUklOVDoKKwkJCSgqYXJndGFibGUpW25dLnBwdHJkaWZmYXJnID0gdmFfYXJnKGFwLCBwdHJkaWZmX3QgKik7CisJCQlicmVhazsKKwkJY2FzZSBUX1NJWkVJTlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS5zaXplYXJnID0gdmFfYXJnKGFwLCBzaXplX3QpOworCQkJYnJlYWs7CisJCWNhc2UgVF9TU0laRUlOVDoKKwkJCSgqYXJndGFibGUpW25dLnNzaXplYXJnID0gdmFfYXJnKGFwLCBzc2l6ZV90KTsKKwkJCWJyZWFrOworCQljYXNlIFRQX1NTSVpFSU5UOgorCQkJKCphcmd0YWJsZSlbbl0ucHNzaXplYXJnID0gdmFfYXJnKGFwLCBzc2l6ZV90ICopOworCQkJYnJlYWs7CisJCWNhc2UgVF9NQVhJTlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS5pbnRtYXhhcmcgPSB2YV9hcmcoYXAsIGludG1heF90KTsKKwkJCWJyZWFrOworCQljYXNlIFRfTUFYVUlOVDoKKwkJCSgqYXJndGFibGUpW25dLnVpbnRtYXhhcmcgPSB2YV9hcmcoYXAsIHVpbnRtYXhfdCk7CisJCQlicmVhazsKKwkJY2FzZSBUUF9NQVhJTlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS5waW50bWF4YXJnID0gdmFfYXJnKGFwLCBpbnRtYXhfdCAqKTsKKwkJCWJyZWFrOworI2lmZGVmIFBSSU5URl9XSURFX0NIQVIKKwkJY2FzZSBUX1dJTlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS53aW50YXJnID0gdmFfYXJnKGFwLCB3aW50X3QpOworCQkJYnJlYWs7CisJCWNhc2UgVFBfV0NIQVI6CisJCQkoKmFyZ3RhYmxlKVtuXS5wd2NoYXJhcmcgPSB2YV9hcmcoYXAsIHdjaGFyX3QgKik7CisJCQlicmVhazsKKyNlbmRpZgorCQl9CisJfQorCWdvdG8gZmluaXNoOworCitvdmVyZmxvdzoKKwllcnJubyA9IEVOT01FTTsKKwlyZXQgPSAtMTsKKworZmluaXNoOgorCWlmICh0eXBldGFibGUgIT0gTlVMTCAmJiB0eXBldGFibGUgIT0gc3RhdHR5cGV0YWJsZSkgeworCQltdW5tYXAodHlwZXRhYmxlLCAqYXJndGFibGVzaXopOworCQl0eXBldGFibGUgPSBOVUxMOworCX0KKwlyZXR1cm4gKHJldCk7Cit9CisKKy8qCisgKiBJbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgdHlwZSB0YWJsZS4KKyAqLworc3RhdGljIGludAorX19ncm93X3R5cGVfdGFibGUodW5zaWduZWQgY2hhciAqKnR5cGV0YWJsZSwgaW50ICp0YWJsZXNpemUpCit7CisJdW5zaWduZWQgY2hhciAqb2xkdGFibGUgPSAqdHlwZXRhYmxlOworCWludCBuZXdzaXplID0gKnRhYmxlc2l6ZSAqIDI7CisKKwlpZiAobmV3c2l6ZSA8IGdldHBhZ2VzaXplKCkpCisJCW5ld3NpemUgPSBnZXRwYWdlc2l6ZSgpOworCisJaWYgKCp0YWJsZXNpemUgPT0gU1RBVElDX0FSR19UQkxfU0laRSkgeworCQkqdHlwZXRhYmxlID0gbW1hcChOVUxMLCBuZXdzaXplLCBQUk9UX1dSSVRFfFBST1RfUkVBRCwKKwkJICAgIE1BUF9BTk9OfE1BUF9QUklWQVRFLCAtMSwgMCk7CisJCWlmICgqdHlwZXRhYmxlID09IE1BUF9GQUlMRUQpCisJCQlyZXR1cm4gKC0xKTsKKwkJYmNvcHkob2xkdGFibGUsICp0eXBldGFibGUsICp0YWJsZXNpemUpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGNoYXIgKm5ldyA9IG1tYXAoTlVMTCwgbmV3c2l6ZSwgUFJPVF9XUklURXxQUk9UX1JFQUQsCisJCSAgICBNQVBfQU5PTnxNQVBfUFJJVkFURSwgLTEsIDApOworCQlpZiAobmV3ID09IE1BUF9GQUlMRUQpCisJCQlyZXR1cm4gKC0xKTsKKwkJbWVtbW92ZShuZXcsICp0eXBldGFibGUsICp0YWJsZXNpemUpOworCQltdW5tYXAoKnR5cGV0YWJsZSwgKnRhYmxlc2l6ZSk7CisJCSp0eXBldGFibGUgPSBuZXc7CisJfQorCW1lbXNldCgqdHlwZXRhYmxlICsgKnRhYmxlc2l6ZSwgVF9VTlVTRUQsIChuZXdzaXplIC0gKnRhYmxlc2l6ZSkpOworCisJKnRhYmxlc2l6ZSA9IG5ld3NpemU7CisJcmV0dXJuICgwKTsKK30KKworIAorI2lmZGVmIEZMT0FUSU5HX1BPSU5UCitzdGF0aWMgaW50CitleHBvbmVudChjaGFyICpwMCwgaW50IGV4cCwgaW50IGZtdGNoKQoreworCWNoYXIgKnAsICp0OworCWNoYXIgZXhwYnVmW01BWEVYUERJR107CisKKwlwID0gcDA7CisJKnArKyA9IGZtdGNoOworCWlmIChleHAgPCAwKSB7CisJCWV4cCA9IC1leHA7CisJCSpwKysgPSAnLSc7CisJfSBlbHNlCisJCSpwKysgPSAnKyc7CisJdCA9IGV4cGJ1ZiArIE1BWEVYUERJRzsKKwlpZiAoZXhwID4gOSkgeworCQlkbyB7CisJCQkqLS10ID0gdG9fY2hhcihleHAgJSAxMCk7CisJCX0gd2hpbGUgKChleHAgLz0gMTApID4gOSk7CisJCSotLXQgPSB0b19jaGFyKGV4cCk7CisJCWZvciAoOyB0IDwgZXhwYnVmICsgTUFYRVhQRElHOyAqcCsrID0gKnQrKykKKwkJCS8qIG5vdGhpbmcgKi87CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRXhwb25lbnRzIGZvciBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGNvbnZlcnNpb25zCisJCSAqICglW2VFZ0ddKSBtdXN0IGJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGxvbmcsCisJCSAqIHdoZXJlYXMgZXhwb25lbnRzIGZvciBoZXhhZGVjaW1hbCBjb252ZXJzaW9ucyBjYW4KKwkJICogYmUgb25seSBvbmUgY2hhcmFjdGVyIGxvbmcuCisJCSAqLworCQlpZiAoZm10Y2ggPT0gJ2UnIHx8IGZtdGNoID09ICdFJykKKwkJCSpwKysgPSAnMCc7CisJCSpwKysgPSB0b19jaGFyKGV4cCk7CisJfQorCXJldHVybiAocCAtIHAwKTsKK30KKyNlbmRpZiAvKiBGTE9BVElOR19QT0lOVCAqLwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zmc2NhbmYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92ZnNjYW5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJlZmUzMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92ZnNjYW5mLmMKQEAgLTAsMCArMSw5NjkgQEAKKy8qCSRPcGVuQlNEOiB2ZnNjYW5mLmMsdiAxLjMxIDIwMTQvMDMvMTkgMDU6MTc6MDEgZ3VlbnRoZXIgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8d2N0eXBlLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorI2luY2x1ZGUgImZsb2F0aW8uaCIKKyNlbmRpZgorCisjZGVmaW5lCUJVRgkJNTEzCS8qIE1heGltdW0gbGVuZ3RoIG9mIG51bWVyaWMgc3RyaW5nLiAqLworCisvKgorICogRmxhZ3MgdXNlZCBkdXJpbmcgY29udmVyc2lvbi4KKyAqLworI2RlZmluZQlMT05HCQkweDAwMDAxCS8qIGw6IGxvbmcgb3IgZG91YmxlICovCisjZGVmaW5lCUxPTkdEQkwJCTB4MDAwMDIJLyogTDogbG9uZyBkb3VibGUgKi8KKyNkZWZpbmUJU0hPUlQJCTB4MDAwMDQJLyogaDogc2hvcnQgKi8KKyNkZWZpbmUJU0hPUlRTSE9SVAkweDAwMDA4CS8qIGhoOiA4IGJpdCBpbnRlZ2VyICovCisjZGVmaW5lIExMT05HCQkweDAwMDEwCS8qIGxsOiBsb25nIGxvbmcgKCsgZGVwcmVjYXRlZCBxOiBxdWFkKSAqLworI2RlZmluZQlQT0lOVEVSCQkweDAwMDIwCS8qIHA6IHZvaWQgKiAoYXMgaGV4KSAqLworI2RlZmluZQlTSVpFSU5UCQkweDAwMDQwCS8qIHo6IChzaWduZWQpIHNpemVfdCAqLworI2RlZmluZQlNQVhJTlQJCTB4MDAwODAJLyogajogaW50bWF4X3QgKi8KKyNkZWZpbmUJUFRSSU5UCQkweDAwMTAwCS8qIHQ6IHB0cmRpZmZfdCAqLworI2RlZmluZQlOT1NLSVAJCTB4MDAyMDAJLyogWyBvciBjOiBkbyBub3Qgc2tpcCBibGFua3MgKi8KKyNkZWZpbmUJU1VQUFJFU1MJMHgwMDQwMAkvKiAqOiBzdXBwcmVzcyBhc3NpZ25tZW50ICovCisjZGVmaW5lCVVOU0lHTkVECTB4MDA4MDAJLyogJVtvdXB4WF0gY29udmVyc2lvbnMgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIHVzZWQgaW4gbnVtZXJpYyBjb252ZXJzaW9ucyBvbmx5OgorICogU0lHTk9LLCBIQVZFU0lHTiwgTkRJR0lUUywgRFBUT0ssIGFuZCBFWFBPSyBhcmUgZm9yIGZsb2F0aW5nIHBvaW50OworICogU0lHTk9LLCBIQVZFU0lHTiwgTkRJR0lUUywgUEZYT0ssIGFuZCBOWkRJR0lUUyBhcmUgZm9yIGludGVncmFsLgorICovCisjZGVmaW5lCVNJR05PSwkJMHgwMTAwMAkvKiArLy0gaXMgKHN0aWxsKSBsZWdhbCAqLworI2RlZmluZQlIQVZFU0lHTgkweDAyMDAwCS8qIHNpZ24gZGV0ZWN0ZWQgKi8KKyNkZWZpbmUJTkRJR0lUUwkJMHgwNDAwMAkvKiBubyBkaWdpdHMgZGV0ZWN0ZWQgKi8KKworI2RlZmluZQlEUFRPSwkJMHgwODAwMAkvKiAoZmxvYXQpIGRlY2ltYWwgcG9pbnQgaXMgc3RpbGwgbGVnYWwgKi8KKyNkZWZpbmUJRVhQT0sJCTB4MTAwMDAJLyogKGZsb2F0KSBleHBvbmVudCAoZSszLCBldGMpIHN0aWxsIGxlZ2FsICovCisKKyNkZWZpbmUJUEZYT0sJCTB4MDgwMDAJLyogMHggcHJlZml4IGlzIChzdGlsbCkgbGVnYWwgKi8KKyNkZWZpbmUJTlpESUdJVFMJMHgxMDAwMAkvKiBubyB6ZXJvIGRpZ2l0cyBkZXRlY3RlZCAqLworCisvKgorICogQ29udmVyc2lvbiB0eXBlcy4KKyAqLworI2RlZmluZQlDVF9DSEFSCQkwCS8qICVjIGNvbnZlcnNpb24gKi8KKyNkZWZpbmUJQ1RfQ0NMCQkxCS8qICVbLi4uXSBjb252ZXJzaW9uICovCisjZGVmaW5lCUNUX1NUUklORwkyCS8qICVzIGNvbnZlcnNpb24gKi8KKyNkZWZpbmUJQ1RfSU5UCQkzCS8qIGludGVnZXIsIGkuZS4sIHN0cnRvaW1heCBvciBzdHJ0b3VtYXggKi8KKyNkZWZpbmUJQ1RfRkxPQVQJNAkvKiBmbG9hdGluZywgaS5lLiwgc3RydG9kICovCisKKyNkZWZpbmUgdV9jaGFyIHVuc2lnbmVkIGNoYXIKKyNkZWZpbmUgdV9sb25nIHVuc2lnbmVkIGxvbmcKKworc3RhdGljIHVfY2hhciAqX19zY2NsKGNoYXIgKiwgdV9jaGFyICopOworCisvKgorICogSW50ZXJuYWwsIHVubG9ja2VkIHZlcnNpb24gb2YgdmZzY2FuZgorICovCitpbnQKK19fc3Zmc2NhbmYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdDAsIF9fdmFfbGlzdCBhcCkKK3sKKwl1X2NoYXIgKmZtdCA9ICh1X2NoYXIgKilmbXQwOworCWludCBjOwkJLyogY2hhcmFjdGVyIGZyb20gZm9ybWF0LCBvciBjb252ZXJzaW9uICovCisJc2l6ZV90IHdpZHRoOwkvKiBmaWVsZCB3aWR0aCwgb3IgMCAqLworCWNoYXIgKnA7CS8qIHBvaW50cyBpbnRvIGFsbCBraW5kcyBvZiBzdHJpbmdzICovCisJaW50IG47CQkvKiBoYW5keSBpbnRlZ2VyICovCisJaW50IGZsYWdzOwkvKiBmbGFncyBhcyBkZWZpbmVkIGFib3ZlICovCisJY2hhciAqcDA7CS8qIHNhdmVzIG9yaWdpbmFsIHZhbHVlIG9mIHAgd2hlbiBuZWNlc3NhcnkgKi8KKwlpbnQgbmFzc2lnbmVkOwkJLyogbnVtYmVyIG9mIGZpZWxkcyBhc3NpZ25lZCAqLworCWludCBucmVhZDsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIGNvbnN1bWVkIGZyb20gZnAgKi8KKwlpbnQgYmFzZTsJCS8qIGJhc2UgYXJndW1lbnQgdG8gc3RydG9pbWF4L3N0cnRvdWltYXggKi8KKwljaGFyIGNjbHRhYlsyNTZdOwkvKiBjaGFyYWN0ZXIgY2xhc3MgdGFibGUgZm9yICVbLi4uXSAqLworCWNoYXIgYnVmW0JVRl07CQkvKiBidWZmZXIgZm9yIG51bWVyaWMgY29udmVyc2lvbnMgKi8KKyNpZmRlZiBTQ0FORl9XSURFX0NIQVIKKwl3Y2hhcl90ICp3Y3A7CQkvKiBoYW5keSB3aWRlIGNoYXJhY3RlciBwb2ludGVyICovCisJc2l6ZV90IG5jb252OwkJLyogbGVuZ3RoIG9mIG11bHRpYnl0ZSBzZXF1ZW5jZSBjb252ZXJ0ZWQgKi8KKwltYnN0YXRlX3QgbWJzOworI2VuZGlmCisKKwkvKiBgYmFzZWZpeCcgaXMgdXNlZCB0byBhdm9pZCBgaWYnIHRlc3RzIGluIHRoZSBpbnRlZ2VyIHNjYW5uZXIgKi8KKwlzdGF0aWMgc2hvcnQgYmFzZWZpeFsxN10gPQorCQl7IDEwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiB9OworCisJX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOworCisJbmFzc2lnbmVkID0gMDsKKwlucmVhZCA9IDA7CisJYmFzZSA9IDA7CQkvKiBYWFgganVzdCB0byBrZWVwIGdjYyBoYXBweSAqLworCWZvciAoOzspIHsKKwkJYyA9ICpmbXQrKzsKKwkJaWYgKGMgPT0gMCkKKwkJCXJldHVybiAobmFzc2lnbmVkKTsKKwkJaWYgKGlzc3BhY2UoYykpIHsKKwkJCXdoaWxlICgoZnAtPl9yID4gMCB8fCBfX3NyZWZpbGwoZnApID09IDApICYmCisJCQkgICAgaXNzcGFjZSgqZnAtPl9wKSkKKwkJCQlucmVhZCsrLCBmcC0+X3ItLSwgZnAtPl9wKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYyAhPSAnJScpCisJCQlnb3RvIGxpdGVyYWw7CisJCXdpZHRoID0gMDsKKwkJZmxhZ3MgPSAwOworCQkvKgorCQkgKiBzd2l0Y2ggb24gdGhlIGZvcm1hdC4gIGNvbnRpbnVlIGlmIGRvbmU7CisJCSAqIGJyZWFrIG9uY2UgZm9ybWF0IHR5cGUgaXMgZGVyaXZlZC4KKwkJICovCithZ2FpbjoJCWMgPSAqZm10Kys7CisJCXN3aXRjaCAoYykgeworCQljYXNlICclJzoKK2xpdGVyYWw6CisJCQlpZiAoZnAtPl9yIDw9IDAgJiYgX19zcmVmaWxsKGZwKSkKKwkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQlpZiAoKmZwLT5fcCAhPSBjKQorCQkJCWdvdG8gbWF0Y2hfZmFpbHVyZTsKKwkJCWZwLT5fci0tLCBmcC0+X3ArKzsKKwkJCW5yZWFkKys7CisJCQljb250aW51ZTsKKworCQljYXNlICcqJzoKKwkJCWZsYWdzIHw9IFNVUFBSRVNTOworCQkJZ290byBhZ2FpbjsKKwkJY2FzZSAnaic6CisJCQlmbGFncyB8PSBNQVhJTlQ7CisJCQlnb3RvIGFnYWluOworCQljYXNlICdMJzoKKwkJCWZsYWdzIHw9IExPTkdEQkw7CisJCQlnb3RvIGFnYWluOworCQljYXNlICdoJzoKKwkJCWlmICgqZm10ID09ICdoJykgeworCQkJCWZtdCsrOworCQkJCWZsYWdzIHw9IFNIT1JUU0hPUlQ7CisJCQl9IGVsc2UgeworCQkJCWZsYWdzIHw9IFNIT1JUOworCQkJfQorCQkJZ290byBhZ2FpbjsKKwkJY2FzZSAnbCc6CisJCQlpZiAoKmZtdCA9PSAnbCcpIHsKKwkJCQlmbXQrKzsKKwkJCQlmbGFncyB8PSBMTE9ORzsKKwkJCX0gZWxzZSB7CisJCQkJZmxhZ3MgfD0gTE9ORzsKKwkJCX0KKwkJCWdvdG8gYWdhaW47CisJCWNhc2UgJ3EnOgorCQkJZmxhZ3MgfD0gTExPTkc7CQkvKiBkZXByZWNhdGVkICovCisJCQlnb3RvIGFnYWluOworCQljYXNlICd0JzoKKwkJCWZsYWdzIHw9IFBUUklOVDsKKwkJCWdvdG8gYWdhaW47CisJCWNhc2UgJ3onOgorCQkJZmxhZ3MgfD0gU0laRUlOVDsKKwkJCWdvdG8gYWdhaW47CisKKwkJY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorCQljYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisJCQl3aWR0aCA9IHdpZHRoICogMTAgKyBjIC0gJzAnOworCQkJZ290byBhZ2FpbjsKKworCQkvKgorCQkgKiBDb252ZXJzaW9ucy4KKwkJICogVGhvc2UgbWFya2VkIGBjb21wYXQnIGFyZSBmb3IgNC5bMTIzXUJTRCBjb21wYXRpYmlsaXR5LgorCQkgKgorCQkgKiAoQWNjb3JkaW5nIHRvIEFOU0ksIEUgYW5kIFggZm9ybWF0cyBhcmUgc3VwcG9zZWQKKwkJICogdG8gdGhlIHNhbWUgYXMgZSBhbmQgeC4gIFNvcnJ5IGFib3V0IHRoYXQuKQorCQkgKi8KKwkJY2FzZSAnRCc6CS8qIGNvbXBhdCAqLworCQkJZmxhZ3MgfD0gTE9ORzsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWNhc2UgJ2QnOgorCQkJYyA9IENUX0lOVDsKKwkJCWJhc2UgPSAxMDsKKwkJCWJyZWFrOworCisJCWNhc2UgJ2knOgorCQkJYyA9IENUX0lOVDsKKwkJCWJhc2UgPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSAnTyc6CS8qIGNvbXBhdCAqLworCQkJZmxhZ3MgfD0gTE9ORzsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWNhc2UgJ28nOgorCQkJYyA9IENUX0lOVDsKKwkJCWZsYWdzIHw9IFVOU0lHTkVEOworCQkJYmFzZSA9IDg7CisJCQlicmVhazsKKworCQljYXNlICd1JzoKKwkJCWMgPSBDVF9JTlQ7CisJCQlmbGFncyB8PSBVTlNJR05FRDsKKwkJCWJhc2UgPSAxMDsKKwkJCWJyZWFrOworCisJCWNhc2UgJ1gnOgorCQljYXNlICd4JzoKKwkJCWZsYWdzIHw9IFBGWE9LOwkvKiBlbmFibGUgMHggcHJlZml4aW5nICovCisJCQljID0gQ1RfSU5UOworCQkJZmxhZ3MgfD0gVU5TSUdORUQ7CisJCQliYXNlID0gMTY7CisJCQlicmVhazsKKworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJCWNhc2UgJ2UnOiBjYXNlICdFJzoKKwkJY2FzZSAnZic6IGNhc2UgJ0YnOgorCQljYXNlICdnJzogY2FzZSAnRyc6CisJCWNhc2UgJ2EnOiBjYXNlICdBJzoKKwkJCWMgPSBDVF9GTE9BVDsKKwkJCWJyZWFrOworI2VuZGlmCisKKwkJY2FzZSAncyc6CisJCQljID0gQ1RfU1RSSU5HOworCQkJYnJlYWs7CisKKwkJY2FzZSAnWyc6CisJCQlmbXQgPSBfX3NjY2woY2NsdGFiLCBmbXQpOworCQkJZmxhZ3MgfD0gTk9TS0lQOworCQkJYyA9IENUX0NDTDsKKwkJCWJyZWFrOworCisJCWNhc2UgJ2MnOgorCQkJZmxhZ3MgfD0gTk9TS0lQOworCQkJYyA9IENUX0NIQVI7CisJCQlicmVhazsKKworCQljYXNlICdwJzoJLyogcG9pbnRlciBmb3JtYXQgaXMgbGlrZSBoZXggKi8KKwkJCWZsYWdzIHw9IFBPSU5URVIgfCBQRlhPSzsKKwkJCWMgPSBDVF9JTlQ7CisJCQlmbGFncyB8PSBVTlNJR05FRDsKKwkJCWJhc2UgPSAxNjsKKwkJCWJyZWFrOworCisJCWNhc2UgJ24nOgorCQkJaWYgKGZsYWdzICYgU1VQUFJFU1MpCisJCQkJY29udGludWU7CisJCQlpZiAoZmxhZ3MgJiBTSE9SVFNIT1JUKQorCQkJCSp2YV9hcmcoYXAsIHNpZ25lZCBjaGFyICopID0gbnJlYWQ7CisJCQllbHNlIGlmIChmbGFncyAmIFNIT1JUKQorCQkJCSp2YV9hcmcoYXAsIHNob3J0ICopID0gbnJlYWQ7CisJCQllbHNlIGlmIChmbGFncyAmIExPTkcpCisJCQkJKnZhX2FyZyhhcCwgbG9uZyAqKSA9IG5yZWFkOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSVpFSU5UKQorCQkJCSp2YV9hcmcoYXAsIHNzaXplX3QgKikgPSBucmVhZDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgUFRSSU5UKQorCQkJCSp2YV9hcmcoYXAsIHB0cmRpZmZfdCAqKSA9IG5yZWFkOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBMTE9ORykKKwkJCQkqdmFfYXJnKGFwLCBsb25nIGxvbmcgKikgPSBucmVhZDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgTUFYSU5UKQorCQkJCSp2YV9hcmcoYXAsIGludG1heF90ICopID0gbnJlYWQ7CisJCQllbHNlCisJCQkJKnZhX2FyZyhhcCwgaW50ICopID0gbnJlYWQ7CisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBEaXNndXN0aW5nIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGhhY2tzLglYWFgKKwkJICovCisJCWNhc2UgJ1wwJzoJLyogY29tcGF0ICovCisJCQlyZXR1cm4gKEVPRik7CisKKwkJZGVmYXVsdDoJLyogY29tcGF0ICovCisJCQlpZiAoaXN1cHBlcihjKSkKKwkJCQlmbGFncyB8PSBMT05HOworCQkJYyA9IENUX0lOVDsKKwkJCWJhc2UgPSAxMDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogV2UgaGF2ZSBhIGNvbnZlcnNpb24gdGhhdCByZXF1aXJlcyBpbnB1dC4KKwkJICovCisJCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKQorCQkJZ290byBpbnB1dF9mYWlsdXJlOworCisJCS8qCisJCSAqIENvbnN1bWUgbGVhZGluZyB3aGl0ZSBzcGFjZSwgZXhjZXB0IGZvciBmb3JtYXRzCisJCSAqIHRoYXQgc3VwcHJlc3MgdGhpcy4KKwkJICovCisJCWlmICgoZmxhZ3MgJiBOT1NLSVApID09IDApIHsKKwkJCXdoaWxlIChpc3NwYWNlKCpmcC0+X3ApKSB7CisJCQkJbnJlYWQrKzsKKwkJCQlpZiAoLS1mcC0+X3IgPiAwKQorCQkJCQlmcC0+X3ArKzsKKwkJCQllbHNlIGlmIChfX3NyZWZpbGwoZnApKQorCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQl9CisJCQkvKgorCQkJICogTm90ZSB0aGF0IHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgaW4KKwkJCSAqIHRoZSBidWZmZXIsIHNvIGNvbnZlcnNpb25zIHRoYXQgZG8gbm90IHNldCBOT1NLSVAKKwkJCSAqIGNhIG5vIGxvbmdlciByZXN1bHQgaW4gYW4gaW5wdXQgZmFpbHVyZS4KKwkJCSAqLworCQl9CisKKwkJLyoKKwkJICogRG8gdGhlIGNvbnZlcnNpb24uCisJCSAqLworCQlzd2l0Y2ggKGMpIHsKKworCQljYXNlIENUX0NIQVI6CisJCQkvKiBzY2FuIGFyYml0cmFyeSBjaGFyYWN0ZXJzIChzZXRzIE5PU0tJUCkgKi8KKwkJCWlmICh3aWR0aCA9PSAwKQorCQkJCXdpZHRoID0gMTsKKyNpZmRlZiBTQ0FORl9XSURFX0NIQVIKKwkJCWlmIChmbGFncyAmIExPTkcpIHsKKwkJCQlpZiAoKGZsYWdzICYgU1VQUFJFU1MpID09IDApCisJCQkJCXdjcCA9IHZhX2FyZyhhcCwgd2NoYXJfdCAqKTsKKwkJCQllbHNlCisJCQkJCXdjcCA9IE5VTEw7CisJCQkJbiA9IDA7CisJCQkJd2hpbGUgKHdpZHRoICE9IDApIHsKKwkJCQkJaWYgKG4gPT0gTUJfQ1VSX01BWCkgeworCQkJCQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJCX0KKwkJCQkJYnVmW24rK10gPSAqZnAtPl9wOworCQkJCQlmcC0+X3ArKzsKKwkJCQkJZnAtPl9yLS07CisJCQkJCWJ6ZXJvKCZtYnMsIHNpemVvZihtYnMpKTsKKwkJCQkJbmNvbnYgPSBtYnJ0b3djKHdjcCwgYnVmLCBuLCAmbWJzKTsKKwkJCQkJaWYgKG5jb252ID09IChzaXplX3QpLTEpIHsKKwkJCQkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCQkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQl9CisJCQkJCWlmIChuY29udiA9PSAwICYmICEoZmxhZ3MgJiBTVVBQUkVTUykpCisJCQkJCQkqd2NwID0gTCdcMCc7CisJCQkJCWlmIChuY29udiAhPSAoc2l6ZV90KS0yKSB7CisJCQkJCQlucmVhZCArPSBuOworCQkJCQkJd2lkdGgtLTsKKwkJCQkJCWlmICghKGZsYWdzICYgU1VQUFJFU1MpKQorCQkJCQkJCXdjcCsrOworCQkJCQkJbiA9IDA7CisJCQkJCX0KKwkJCQkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpIHsKKwkJCQkJCWlmIChuICE9IDApIHsKKwkJCQkJCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwkJCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoIShmbGFncyAmIFNVUFBSRVNTKSkKKwkJCQkJbmFzc2lnbmVkKys7CisJCQl9IGVsc2UKKyNlbmRpZiAvKiBTQ0FORl9XSURFX0NIQVIgKi8KKwkJCWlmIChmbGFncyAmIFNVUFBSRVNTKSB7CisJCQkJc2l6ZV90IHN1bSA9IDA7CisJCQkJZm9yICg7OykgeworCQkJCQlpZiAoKG4gPSBmcC0+X3IpIDwgd2lkdGgpIHsKKwkJCQkJCXN1bSArPSBuOworCQkJCQkJd2lkdGggLT0gbjsKKwkJCQkJCWZwLT5fcCArPSBuOworCQkJCQkJaWYgKF9fc3JlZmlsbChmcCkpIHsKKwkJCQkJCQlpZiAoc3VtID09IDApCisJCQkJCQkJICAgIGdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXN1bSArPSB3aWR0aDsKKwkJCQkJCWZwLT5fciAtPSB3aWR0aDsKKwkJCQkJCWZwLT5fcCArPSB3aWR0aDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCW5yZWFkICs9IHN1bTsKKwkJCX0gZWxzZSB7CisJCQkJc2l6ZV90IHIgPSBmcmVhZCgodm9pZCAqKXZhX2FyZyhhcCwgY2hhciAqKSwgMSwKKwkJCQkgICAgd2lkdGgsIGZwKTsKKworCQkJCWlmIChyID09IDApCisJCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCQlucmVhZCArPSByOworCQkJCW5hc3NpZ25lZCsrOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBDVF9DQ0w6CisJCQkvKiBzY2FuIGEgKG5vbmVtcHR5KSBjaGFyYWN0ZXIgY2xhc3MgKHNldHMgTk9TS0lQKSAqLworCQkJaWYgKHdpZHRoID09IDApCisJCQkJd2lkdGggPSAoc2l6ZV90KX4wOwkvKiBgaW5maW5pdHknICovCisjaWZkZWYgU0NBTkZfV0lERV9DSEFSCisJCQkvKiB0YWtlIG9ubHkgdGhvc2UgdGhpbmdzIGluIHRoZSBjbGFzcyAqLworCQkJaWYgKGZsYWdzICYgTE9ORykgeworCQkJCXdjaGFyX3QgdHdjOworCQkJCWludCBuY2hhcnM7CisKKwkJCQlpZiAoKGZsYWdzICYgU1VQUFJFU1MpID09IDApCisJCQkJCXdjcCA9IHZhX2FyZyhhcCwgd2NoYXJfdCAqKTsKKwkJCQllbHNlCisJCQkJCXdjcCA9ICZ0d2M7CisJCQkJbiA9IDA7CisJCQkJbmNoYXJzID0gMDsKKwkJCQl3aGlsZSAod2lkdGggIT0gMCkgeworCQkJCQlpZiAobiA9PSBNQl9DVVJfTUFYKSB7CisJCQkJCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwkJCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCQkJfQorCQkJCQlidWZbbisrXSA9ICpmcC0+X3A7CisJCQkJCWZwLT5fcCsrOworCQkJCQlmcC0+X3ItLTsKKwkJCQkJYnplcm8oJm1icywgc2l6ZW9mKG1icykpOworCQkJCQluY29udiA9IG1icnRvd2Mod2NwLCBidWYsIG4sICZtYnMpOworCQkJCQlpZiAobmNvbnYgPT0gKHNpemVfdCktMSkgeworCQkJCQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJCX0KKwkJCQkJaWYgKG5jb252ID09IDApCisJCQkJCQkqd2NwID0gTCdcMCc7CisJCQkJCWlmIChuY29udiAhPSAoc2l6ZV90KS0yKSB7CisJCQkJCQlpZiAod2N0b2IoKndjcCkgIT0gRU9GICYmCisJCQkJCQkgICAgIWNjbHRhYlt3Y3RvYigqd2NwKV0pIHsKKwkJCQkJCQl3aGlsZSAobiAhPSAwKSB7CisJCQkJCQkJCW4tLTsKKwkJCQkJCQkJdW5nZXRjKGJ1ZltuXSwKKwkJCQkJCQkJICAgIGZwKTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlucmVhZCArPSBuOworCQkJCQkJd2lkdGgtLTsKKwkJCQkJCWlmICghKGZsYWdzICYgU1VQUFJFU1MpKQorCQkJCQkJCXdjcCsrOworCQkJCQkJbmNoYXJzKys7CisJCQkJCQluID0gMDsKKwkJCQkJfQorCQkJCQlpZiAoZnAtPl9yIDw9IDAgJiYgX19zcmVmaWxsKGZwKSkgeworCQkJCQkJaWYgKG4gIT0gMCkgeworCQkJCQkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCQkJCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmIChuICE9IDApIHsKKwkJCQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCQl9CisJCQkJbiA9IG5jaGFyczsKKwkJCQlpZiAobiA9PSAwKQorCQkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7CisJCQkJaWYgKCEoZmxhZ3MgJiBTVVBQUkVTUykpIHsKKwkJCQkJKndjcCA9IEwnXDAnOworCQkJCQluYXNzaWduZWQrKzsKKwkJCQl9CisJCQl9IGVsc2UKKyNlbmRpZiAvKiBTQ0FORl9XSURFX0NIQVIgKi8KKwkJCS8qIHRha2Ugb25seSB0aG9zZSB0aGluZ3MgaW4gdGhlIGNsYXNzICovCisJCQlpZiAoZmxhZ3MgJiBTVVBQUkVTUykgeworCQkJCW4gPSAwOworCQkJCXdoaWxlIChjY2x0YWJbKmZwLT5fcF0pIHsKKwkJCQkJbisrLCBmcC0+X3ItLSwgZnAtPl9wKys7CisJCQkJCWlmICgtLXdpZHRoID09IDApCisJCQkJCQlicmVhazsKKwkJCQkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpIHsKKwkJCQkJCWlmIChuID09IDApCisJCQkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKG4gPT0gMCkKKwkJCQkJZ290byBtYXRjaF9mYWlsdXJlOworCQkJfSBlbHNlIHsKKwkJCQlwMCA9IHAgPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJCQkJd2hpbGUgKGNjbHRhYlsqZnAtPl9wXSkgeworCQkJCQlmcC0+X3ItLTsKKwkJCQkJKnArKyA9ICpmcC0+X3ArKzsKKwkJCQkJaWYgKC0td2lkdGggPT0gMCkKKwkJCQkJCWJyZWFrOworCQkJCQlpZiAoZnAtPl9yIDw9IDAgJiYgX19zcmVmaWxsKGZwKSkgeworCQkJCQkJaWYgKHAgPT0gcDApCisJCQkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJbiA9IHAgLSBwMDsKKwkJCQlpZiAobiA9PSAwKQorCQkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7CisJCQkJKnAgPSAnXDAnOworCQkJCW5hc3NpZ25lZCsrOworCQkJfQorCQkJbnJlYWQgKz0gbjsKKwkJCWJyZWFrOworCisJCWNhc2UgQ1RfU1RSSU5HOgorCQkJLyogbGlrZSBDQ0wsIGJ1dCB6ZXJvLWxlbmd0aCBzdHJpbmcgT0ssICYgbm8gTk9TS0lQICovCisJCQlpZiAod2lkdGggPT0gMCkKKwkJCQl3aWR0aCA9IChzaXplX3QpfjA7CisjaWZkZWYgU0NBTkZfV0lERV9DSEFSCisJCQlpZiAoZmxhZ3MgJiBMT05HKSB7CisJCQkJd2NoYXJfdCB0d2M7CisKKwkJCQlpZiAoKGZsYWdzICYgU1VQUFJFU1MpID09IDApCisJCQkJCXdjcCA9IHZhX2FyZyhhcCwgd2NoYXJfdCAqKTsKKwkJCQllbHNlCisJCQkJCXdjcCA9ICZ0d2M7CisJCQkJbiA9IDA7CisJCQkJd2hpbGUgKCFpc3NwYWNlKCpmcC0+X3ApICYmIHdpZHRoICE9IDApIHsKKwkJCQkJaWYgKG4gPT0gTUJfQ1VSX01BWCkgeworCQkJCQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJCX0KKwkJCQkJYnVmW24rK10gPSAqZnAtPl9wOworCQkJCQlmcC0+X3ArKzsKKwkJCQkJZnAtPl9yLS07CisJCQkJCWJ6ZXJvKCZtYnMsIHNpemVvZihtYnMpKTsKKwkJCQkJbmNvbnYgPSBtYnJ0b3djKHdjcCwgYnVmLCBuLCAmbWJzKTsKKwkJCQkJaWYgKG5jb252ID09IChzaXplX3QpLTEpIHsKKwkJCQkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCQkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQl9CisJCQkJCWlmIChuY29udiA9PSAwKQorCQkJCQkJKndjcCA9IEwnXDAnOworCQkJCQlpZiAobmNvbnYgIT0gKHNpemVfdCktMikgeworCQkJCQkJaWYgKGlzd3NwYWNlKCp3Y3ApKSB7CisJCQkJCQkJd2hpbGUgKG4gIT0gMCkgeworCQkJCQkJCQluLS07CisJCQkJCQkJCXVuZ2V0YyhidWZbbl0sCisJCQkJCQkJCSAgICBmcCk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJbnJlYWQgKz0gbjsKKwkJCQkJCXdpZHRoLS07CisJCQkJCQlpZiAoIShmbGFncyAmIFNVUFBSRVNTKSkKKwkJCQkJCQl3Y3ArKzsKKwkJCQkJCW4gPSAwOworCQkJCQl9CisJCQkJCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKSB7CisJCQkJCQlpZiAobiAhPSAwKSB7CisJCQkJCQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJCQkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKCEoZmxhZ3MgJiBTVVBQUkVTUykpIHsKKwkJCQkJKndjcCA9IEwnXDAnOworCQkJCQluYXNzaWduZWQrKzsKKwkJCQl9CisJCQl9IGVsc2UKKyNlbmRpZiAvKiBTQ0FORl9XSURFX0NIQVIgKi8KKwkJCWlmIChmbGFncyAmIFNVUFBSRVNTKSB7CisJCQkJbiA9IDA7CisJCQkJd2hpbGUgKCFpc3NwYWNlKCpmcC0+X3ApKSB7CisJCQkJCW4rKywgZnAtPl9yLS0sIGZwLT5fcCsrOworCQkJCQlpZiAoLS13aWR0aCA9PSAwKQorCQkJCQkJYnJlYWs7CisJCQkJCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW5yZWFkICs9IG47CisJCQl9IGVsc2UgeworCQkJCXAwID0gcCA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwkJCQl3aGlsZSAoIWlzc3BhY2UoKmZwLT5fcCkpIHsKKwkJCQkJZnAtPl9yLS07CisJCQkJCSpwKysgPSAqZnAtPl9wKys7CisJCQkJCWlmICgtLXdpZHRoID09IDApCisJCQkJCQlicmVhazsKKwkJCQkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJKnAgPSAnXDAnOworCQkJCW5yZWFkICs9IHAgLSBwMDsKKwkJCQluYXNzaWduZWQrKzsKKwkJCX0KKwkJCWNvbnRpbnVlOworCisJCWNhc2UgQ1RfSU5UOgorCQkJLyogc2NhbiBhbiBpbnRlZ2VyIGFzIGlmIGJ5IHN0cnRvaW1heC9zdHJ0b3VtYXggKi8KKyNpZmRlZiBoYXJkd2F5CisJCQlpZiAod2lkdGggPT0gMCB8fCB3aWR0aCA+IHNpemVvZihidWYpIC0gMSkKKwkJCQl3aWR0aCA9IHNpemVvZihidWYpIC0gMTsKKyNlbHNlCisJCQkvKiBzaXplX3QgaXMgdW5zaWduZWQsIGhlbmNlIHRoaXMgb3B0aW1pc2F0aW9uICovCisJCQlpZiAoLS13aWR0aCA+IHNpemVvZihidWYpIC0gMikKKwkJCQl3aWR0aCA9IHNpemVvZihidWYpIC0gMjsKKwkJCXdpZHRoKys7CisjZW5kaWYKKwkJCWZsYWdzIHw9IFNJR05PSyB8IE5ESUdJVFMgfCBOWkRJR0lUUzsKKwkJCWZvciAocCA9IGJ1Zjsgd2lkdGg7IHdpZHRoLS0pIHsKKwkJCQljID0gKmZwLT5fcDsKKwkJCQkvKgorCQkJCSAqIFN3aXRjaCBvbiB0aGUgY2hhcmFjdGVyOyBgZ290byBvaycKKwkJCQkgKiBpZiB3ZSBhY2NlcHQgaXQgYXMgYSBwYXJ0IG9mIG51bWJlci4KKwkJCQkgKi8KKwkJCQlzd2l0Y2ggKGMpIHsKKworCQkJCS8qCisJCQkJICogVGhlIGRpZ2l0IDAgaXMgYWx3YXlzIGxlZ2FsLCBidXQgaXMKKwkJCQkgKiBzcGVjaWFsLiAgRm9yICVpIGNvbnZlcnNpb25zLCBpZiBubworCQkJCSAqIGRpZ2l0cyAoemVybyBvciBub256ZXJvKSBoYXZlIGJlZW4KKwkJCQkgKiBzY2FubmVkIChvbmx5IHNpZ25zKSwgd2Ugd2lsbCBoYXZlCisJCQkJICogYmFzZT09MC4gIEluIHRoYXQgY2FzZSwgd2Ugc2hvdWxkIHNldAorCQkJCSAqIGl0IHRvIDggYW5kIGVuYWJsZSAweCBwcmVmaXhpbmcuCisJCQkJICogQWxzbywgaWYgd2UgaGF2ZSBub3Qgc2Nhbm5lZCB6ZXJvIGRpZ2l0cworCQkJCSAqIGJlZm9yZSB0aGlzLCBkbyBub3QgdHVybiBvZmYgcHJlZml4aW5nCisJCQkJICogKHNvbWVvbmUgZWxzZSB3aWxsIHR1cm4gaXQgb2ZmIGlmIHdlCisJCQkJICogaGF2ZSBzY2FubmVkIGFueSBub256ZXJvIGRpZ2l0cykuCisJCQkJICovCisJCQkJY2FzZSAnMCc6CisJCQkJCWlmIChiYXNlID09IDApIHsKKwkJCQkJCWJhc2UgPSA4OworCQkJCQkJZmxhZ3MgfD0gUEZYT0s7CisJCQkJCX0KKwkJCQkJaWYgKGZsYWdzICYgTlpESUdJVFMpCisJCQkJCSAgICBmbGFncyAmPSB+KFNJR05PS3xOWkRJR0lUU3xORElHSVRTKTsKKwkJCQkJZWxzZQorCQkJCQkgICAgZmxhZ3MgJj0gfihTSUdOT0t8UEZYT0t8TkRJR0lUUyk7CisJCQkJCWdvdG8gb2s7CisKKwkJCQkvKiAxIHRocm91Z2ggNyBhbHdheXMgbGVnYWwgKi8KKwkJCQljYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOgorCQkJCWNhc2UgJzQnOiBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOgorCQkJCQliYXNlID0gYmFzZWZpeFtiYXNlXTsKKwkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBQRlhPSyB8IE5ESUdJVFMpOworCQkJCQlnb3RvIG9rOworCisJCQkJLyogZGlnaXRzIDggYW5kIDkgb2sgaWZmIGRlY2ltYWwgb3IgaGV4ICovCisJCQkJY2FzZSAnOCc6IGNhc2UgJzknOgorCQkJCQliYXNlID0gYmFzZWZpeFtiYXNlXTsKKwkJCQkJaWYgKGJhc2UgPD0gOCkKKwkJCQkJCWJyZWFrOwkvKiBub3QgbGVnYWwgaGVyZSAqLworCQkJCQlmbGFncyAmPSB+KFNJR05PSyB8IFBGWE9LIHwgTkRJR0lUUyk7CisJCQkJCWdvdG8gb2s7CisKKwkJCQkvKiBsZXR0ZXJzIG9rIGlmZiBoZXggKi8KKwkJCQljYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOgorCQkJCWNhc2UgJ0QnOiBjYXNlICdFJzogY2FzZSAnRic6CisJCQkJY2FzZSAnYSc6IGNhc2UgJ2InOiBjYXNlICdjJzoKKwkJCQljYXNlICdkJzogY2FzZSAnZSc6IGNhc2UgJ2YnOgorCQkJCQkvKiBubyBuZWVkIHRvIGZpeCBiYXNlIGhlcmUgKi8KKwkJCQkJaWYgKGJhc2UgPD0gMTApCisJCQkJCQlicmVhazsJLyogbm90IGxlZ2FsIGhlcmUgKi8KKwkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBQRlhPSyB8IE5ESUdJVFMpOworCQkJCQlnb3RvIG9rOworCisJCQkJLyogc2lnbiBvayBvbmx5IGFzIGZpcnN0IGNoYXJhY3RlciAqLworCQkJCWNhc2UgJysnOiBjYXNlICctJzoKKwkJCQkJaWYgKGZsYWdzICYgU0lHTk9LKSB7CisJCQkJCQlmbGFncyAmPSB+U0lHTk9LOworCQkJCQkJZmxhZ3MgfD0gSEFWRVNJR047CisJCQkJCQlnb3RvIG9rOworCQkJCQl9CisJCQkJCWJyZWFrOworCisJCQkJLyoKKwkJCQkgKiB4IG9rIGlmZiBmbGFnIHN0aWxsIHNldCBhbmQgMm5kIGNoYXIgKG9yCisJCQkJICogM3JkIGNoYXIgaWYgd2UgaGF2ZSBhIHNpZ24pLgorCQkJCSAqLworCQkJCWNhc2UgJ3gnOiBjYXNlICdYJzoKKwkJCQkJaWYgKChmbGFncyAmIFBGWE9LKSAmJiBwID09CisJCQkJCSAgICBidWYgKyAxICsgISEoZmxhZ3MgJiBIQVZFU0lHTikpIHsKKwkJCQkJCWJhc2UgPSAxNjsJLyogaWYgJWkgKi8KKwkJCQkJCWZsYWdzICY9IH5QRlhPSzsKKwkJCQkJCWdvdG8gb2s7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBJZiB3ZSBnb3QgaGVyZSwgYyBpcyBub3QgYSBsZWdhbCBjaGFyYWN0ZXIKKwkJCQkgKiBmb3IgYSBudW1iZXIuICBTdG9wIGFjY3VtdWxhdGluZyBkaWdpdHMuCisJCQkJICovCisJCQkJYnJlYWs7CisJCW9rOgorCQkJCS8qCisJCQkJICogYyBpcyBsZWdhbDogc3RvcmUgaXQgYW5kIGxvb2sgYXQgdGhlIG5leHQuCisJCQkJICovCisJCQkJKnArKyA9IGM7CisJCQkJaWYgKC0tZnAtPl9yID4gMCkKKwkJCQkJZnAtPl9wKys7CisJCQkJZWxzZSBpZiAoX19zcmVmaWxsKGZwKSkKKwkJCQkJYnJlYWs7CQkvKiBFT0YgKi8KKwkJCX0KKwkJCS8qCisJCQkgKiBJZiB3ZSBoYWQgb25seSBhIHNpZ24sIGl0IGlzIG5vIGdvb2Q7IHB1c2gKKwkJCSAqIGJhY2sgdGhlIHNpZ24uICBJZiB0aGUgbnVtYmVyIGVuZHMgaW4gYHgnLAorCQkJICogaXQgd2FzIFtzaWduXSAnMCcgJ3gnLCBzbyBwdXNoIGJhY2sgdGhlIHgKKwkJCSAqIGFuZCB0cmVhdCBpdCBhcyBbc2lnbl0gJzAnLgorCQkJICovCisJCQlpZiAoZmxhZ3MgJiBORElHSVRTKSB7CisJCQkJaWYgKHAgPiBidWYpCisJCQkJCSh2b2lkKSB1bmdldGMoKih1X2NoYXIgKiktLXAsIGZwKTsKKwkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7CisJCQl9CisJCQljID0gKCh1X2NoYXIgKilwKVstMV07CisJCQlpZiAoYyA9PSAneCcgfHwgYyA9PSAnWCcpIHsKKwkJCQktLXA7CisJCQkJKHZvaWQpIHVuZ2V0YyhjLCBmcCk7CisJCQl9CisJCQlpZiAoKGZsYWdzICYgU1VQUFJFU1MpID09IDApIHsKKwkJCQl1aW50bWF4X3QgcmVzOworCisJCQkJKnAgPSAnXDAnOworCQkJCWlmIChmbGFncyAmIFVOU0lHTkVEKQorCQkJCQlyZXMgPSBzdHJ0b3VtYXgoYnVmLCBOVUxMLCBiYXNlKTsKKwkJCQllbHNlCisJCQkJCXJlcyA9IHN0cnRvaW1heChidWYsIE5VTEwsIGJhc2UpOworCQkJCWlmIChmbGFncyAmIFBPSU5URVIpCisJCQkJCSp2YV9hcmcoYXAsIHZvaWQgKiopID0KKwkJCQkJICAgICh2b2lkICopKHVpbnRwdHJfdClyZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBNQVhJTlQpCisJCQkJCSp2YV9hcmcoYXAsIGludG1heF90ICopID0gcmVzOworCQkJCWVsc2UgaWYgKGZsYWdzICYgTExPTkcpCisJCQkJCSp2YV9hcmcoYXAsIGxvbmcgbG9uZyAqKSA9IHJlczsKKwkJCQllbHNlIGlmIChmbGFncyAmIFNJWkVJTlQpCisJCQkJCSp2YV9hcmcoYXAsIHNzaXplX3QgKikgPSByZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBQVFJJTlQpCisJCQkJCSp2YV9hcmcoYXAsIHB0cmRpZmZfdCAqKSA9IHJlczsKKwkJCQllbHNlIGlmIChmbGFncyAmIExPTkcpCisJCQkJCSp2YV9hcmcoYXAsIGxvbmcgKikgPSByZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVCkKKwkJCQkJKnZhX2FyZyhhcCwgc2hvcnQgKikgPSByZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVFNIT1JUKQorCQkJCQkqdmFfYXJnKGFwLCBzaWduZWQgY2hhciAqKSA9IHJlczsKKwkJCQllbHNlCisJCQkJCSp2YV9hcmcoYXAsIGludCAqKSA9IHJlczsKKwkJCQluYXNzaWduZWQrKzsKKwkJCX0KKwkJCW5yZWFkICs9IHAgLSBidWY7CisJCQlicmVhazsKKworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJCWNhc2UgQ1RfRkxPQVQ6CisJCQkvKiBzY2FuIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGFzIGlmIGJ5IHN0cnRvZCAqLworI2lmZGVmIGhhcmR3YXkKKwkJCWlmICh3aWR0aCA9PSAwIHx8IHdpZHRoID4gc2l6ZW9mKGJ1ZikgLSAxKQorCQkJCXdpZHRoID0gc2l6ZW9mKGJ1ZikgLSAxOworI2Vsc2UKKwkJCS8qIHNpemVfdCBpcyB1bnNpZ25lZCwgaGVuY2UgdGhpcyBvcHRpbWlzYXRpb24gKi8KKwkJCWlmICgtLXdpZHRoID4gc2l6ZW9mKGJ1ZikgLSAyKQorCQkJCXdpZHRoID0gc2l6ZW9mKGJ1ZikgLSAyOworCQkJd2lkdGgrKzsKKyNlbmRpZgorCQkJZmxhZ3MgfD0gU0lHTk9LIHwgTkRJR0lUUyB8IERQVE9LIHwgRVhQT0s7CisJCQlmb3IgKHAgPSBidWY7IHdpZHRoOyB3aWR0aC0tKSB7CisJCQkJYyA9ICpmcC0+X3A7CisJCQkJLyoKKwkJCQkgKiBUaGlzIGNvZGUgbWltaWNrcyB0aGUgaW50ZWdlciBjb252ZXJzaW9uCisJCQkJICogY29kZSwgYnV0IGlzIG11Y2ggc2ltcGxlci4KKwkJCQkgKi8KKwkJCQlzd2l0Y2ggKGMpIHsKKworCQkJCWNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOgorCQkJCWNhc2UgJzQnOiBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOgorCQkJCWNhc2UgJzgnOiBjYXNlICc5JzoKKwkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBORElHSVRTKTsKKwkJCQkJZ290byBmb2s7CisKKwkJCQljYXNlICcrJzogY2FzZSAnLSc6CisJCQkJCWlmIChmbGFncyAmIFNJR05PSykgeworCQkJCQkJZmxhZ3MgJj0gflNJR05PSzsKKwkJCQkJCWdvdG8gZm9rOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJy4nOgorCQkJCQlpZiAoZmxhZ3MgJiBEUFRPSykgeworCQkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBEUFRPSyk7CisJCQkJCQlnb3RvIGZvazsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQljYXNlICdlJzogY2FzZSAnRSc6CisJCQkJCS8qIG5vIGV4cG9uZW50IHdpdGhvdXQgc29tZSBkaWdpdHMgKi8KKwkJCQkJaWYgKChmbGFncyYoTkRJR0lUU3xFWFBPSykpID09IEVYUE9LKSB7CisJCQkJCQlmbGFncyA9CisJCQkJCQkgICAgKGZsYWdzICYgfihFWFBPS3xEUFRPSykpIHwKKwkJCQkJCSAgICBTSUdOT0sgfCBORElHSVRTOworCQkJCQkJZ290byBmb2s7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWJyZWFrOworCQlmb2s6CisJCQkJKnArKyA9IGM7CisJCQkJaWYgKC0tZnAtPl9yID4gMCkKKwkJCQkJZnAtPl9wKys7CisJCQkJZWxzZSBpZiAoX19zcmVmaWxsKGZwKSkKKwkJCQkJYnJlYWs7CS8qIEVPRiAqLworCQkJfQorCQkJLyoKKwkJCSAqIElmIG5vIGRpZ2l0cywgbWlnaHQgYmUgbWlzc2luZyBleHBvbmVudCBkaWdpdHMKKwkJCSAqIChqdXN0IGdpdmUgYmFjayB0aGUgZXhwb25lbnQpIG9yIG1pZ2h0IGJlIG1pc3NpbmcKKwkJCSAqIHJlZ3VsYXIgZGlnaXRzLCBidXQgaGFkIHNpZ24gYW5kL29yIGRlY2ltYWwgcG9pbnQuCisJCQkgKi8KKwkJCWlmIChmbGFncyAmIE5ESUdJVFMpIHsKKwkJCQlpZiAoZmxhZ3MgJiBFWFBPSykgeworCQkJCQkvKiBubyBkaWdpdHMgYXQgYWxsICovCisJCQkJCXdoaWxlIChwID4gYnVmKQorCQkJCQkJdW5nZXRjKCoodV9jaGFyICopLS1wLCBmcCk7CisJCQkJCWdvdG8gbWF0Y2hfZmFpbHVyZTsKKwkJCQl9CisJCQkJLyoganVzdCBhIGJhZCBleHBvbmVudCAoZSBhbmQgbWF5YmUgc2lnbikgKi8KKwkJCQljID0gKih1X2NoYXIgKiktLXA7CisJCQkJaWYgKGMgIT0gJ2UnICYmIGMgIT0gJ0UnKSB7CisJCQkJCSh2b2lkKSB1bmdldGMoYywgZnApOy8qIHNpZ24gKi8KKwkJCQkJYyA9ICoodV9jaGFyICopLS1wOworCQkJCX0KKwkJCQkodm9pZCkgdW5nZXRjKGMsIGZwKTsKKwkJCX0KKwkJCWlmICgoZmxhZ3MgJiBTVVBQUkVTUykgPT0gMCkgeworCQkJCSpwID0gJ1wwJzsKKwkJCQlpZiAoZmxhZ3MgJiBMT05HREJMKSB7CisJCQkJCWxvbmcgZG91YmxlIHJlcyA9IHN0cnRvbGQoYnVmLAorCQkJCQkgICAgKGNoYXIgKiopTlVMTCk7CisJCQkJCSp2YV9hcmcoYXAsIGxvbmcgZG91YmxlICopID0gcmVzOworCQkJCX0gZWxzZSBpZiAoZmxhZ3MgJiBMT05HKSB7CisJCQkJCWRvdWJsZSByZXMgPSBzdHJ0b2QoYnVmLCAoY2hhciAqKilOVUxMKTsKKwkJCQkJKnZhX2FyZyhhcCwgZG91YmxlICopID0gcmVzOworCQkJCX0gZWxzZSB7CisJCQkJCWZsb2F0IHJlcyA9IHN0cnRvZihidWYsIChjaGFyICoqKU5VTEwpOworCQkJCQkqdmFfYXJnKGFwLCBmbG9hdCAqKSA9IHJlczsKKwkJCQl9CisJCQkJbmFzc2lnbmVkKys7CisJCQl9CisJCQlucmVhZCArPSBwIC0gYnVmOworCQkJYnJlYWs7CisjZW5kaWYgLyogRkxPQVRJTkdfUE9JTlQgKi8KKwkJfQorCX0KK2lucHV0X2ZhaWx1cmU6CisJaWYgKG5hc3NpZ25lZCA9PSAwKQorCQluYXNzaWduZWQgPSAtMTsKK21hdGNoX2ZhaWx1cmU6CisJcmV0dXJuIChuYXNzaWduZWQpOworfQorCisvKgorICogRmlsbCBpbiB0aGUgZ2l2ZW4gdGFibGUgZnJvbSB0aGUgc2NhbnNldCBhdCB0aGUgZ2l2ZW4gZm9ybWF0CisgKiAoanVzdCBhZnRlciBgWycpLiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIHBhc3QgdGhlCisgKiBjbG9zaW5nIGBdJy4gIFRoZSB0YWJsZSBoYXMgYSAxIHdoZXJldmVyIGNoYXJhY3RlcnMgc2hvdWxkIGJlCisgKiBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNjYW5zZXQuCisgKi8KK3N0YXRpYyB1X2NoYXIgKgorX19zY2NsKGNoYXIgKnRhYiwgdV9jaGFyICpmbXQpCit7CisJaW50IGMsIG4sIHY7CisKKwkvKiBmaXJzdCBgY2xlYXInIHRoZSB3aG9sZSB0YWJsZSAqLworCWMgPSAqZm10Kys7CQkvKiBmaXJzdCBjaGFyIGhhdCA9PiBuZWdhdGVkIHNjYW5zZXQgKi8KKwlpZiAoYyA9PSAnXicpIHsKKwkJdiA9IDE7CQkvKiBkZWZhdWx0ID0+IGFjY2VwdCAqLworCQljID0gKmZtdCsrOwkvKiBnZXQgbmV3IGZpcnN0IGNoYXIgKi8KKwl9IGVsc2UKKwkJdiA9IDA7CQkvKiBkZWZhdWx0ID0+IHJlamVjdCAqLworCS8qIHNob3VsZCBwcm9iYWJseSB1c2UgbWVtc2V0IGhlcmUgKi8KKwlmb3IgKG4gPSAwOyBuIDwgMjU2OyBuKyspCisJCXRhYltuXSA9IHY7CisJaWYgKGMgPT0gMCkKKwkJcmV0dXJuIChmbXQgLSAxKTsvKiBmb3JtYXQgZW5kZWQgYmVmb3JlIGNsb3NpbmcgXSAqLworCisJLyoKKwkgKiBOb3cgc2V0IHRoZSBlbnRyaWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFjdHVhbCBzY2Fuc2V0CisJICogdG8gdGhlIG9wcG9zaXRlIG9mIHRoZSBhYm92ZS4KKwkgKgorCSAqIFRoZSBmaXJzdCBjaGFyYWN0ZXIgbWF5IGJlICddJyAob3IgJy0nKSB3aXRob3V0IGJlaW5nIHNwZWNpYWw7CisJICogdGhlIGxhc3QgY2hhcmFjdGVyIG1heSBiZSAnLScuCisJICovCisJdiA9IDEgLSB2OworCWZvciAoOzspIHsKKwkJdGFiW2NdID0gdjsJCS8qIHRha2UgY2hhcmFjdGVyIGMgKi8KK2Rvc3dpdGNoOgorCQluID0gKmZtdCsrOwkJLyogYW5kIGV4YW1pbmUgdGhlIG5leHQgKi8KKwkJc3dpdGNoIChuKSB7CisKKwkJY2FzZSAwOgkJCS8qIGZvcm1hdCBlbmRlZCB0b28gc29vbiAqLworCQkJcmV0dXJuIChmbXQgLSAxKTsKKworCQljYXNlICctJzoKKwkJCS8qCisJCQkgKiBBIHNjYW5zZXQgb2YgdGhlIGZvcm0KKwkJCSAqCVswMSstXQorCQkJICogaXMgZGVmaW5lZCBhcyBgdGhlIGRpZ2l0IDAsIHRoZSBkaWdpdCAxLAorCQkJICogdGhlIGNoYXJhY3RlciArLCB0aGUgY2hhcmFjdGVyIC0nLCBidXQKKwkJCSAqIHRoZSBlZmZlY3Qgb2YgYSBzY2Fuc2V0IHN1Y2ggYXMKKwkJCSAqCVthLXpBLVowLTldCisJCQkgKiBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLiAgVGhlIFY3IFVuaXgKKwkJCSAqIHNjYW5mIHRyZWF0cyBgYS16JyBhcyBgdGhlIGxldHRlcnMgYSB0aHJvdWdoCisJCQkgKiB6JywgYnV0IHRyZWF0cyBgYS1hJyBhcyBgdGhlIGxldHRlciBhLCB0aGUKKwkJCSAqIGNoYXJhY3RlciAtLCBhbmQgdGhlIGxldHRlciBhJy4KKwkJCSAqCisJCQkgKiBGb3IgY29tcGF0aWJpbGl0eSwgdGhlIGAtJyBpcyBub3QgY29uc2lkZXJkCisJCQkgKiB0byBkZWZpbmUgYSByYW5nZSBpZiB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZworCQkJICogaXQgaXMgZWl0aGVyIGEgY2xvc2UgYnJhY2tldCAocmVxdWlyZWQgYnkgQU5TSSkKKwkJCSAqIG9yIGlzIG5vdCBudW1lcmljYWxseSBncmVhdGVyIHRoYW4gdGhlIGNoYXJhY3RlcgorCQkJICogd2UganVzdCBzdG9yZWQgaW4gdGhlIHRhYmxlIChjKS4KKwkJCSAqLworCQkJbiA9ICpmbXQ7CisJCQlpZiAobiA9PSAnXScgfHwgbiA8IGMpIHsKKwkJCQljID0gJy0nOworCQkJCWJyZWFrOwkvKiByZXN1bWUgdGhlIGZvcig7OykgKi8KKwkJCX0KKwkJCWZtdCsrOworCQkJZG8gewkJLyogZmlsbCBpbiB0aGUgcmFuZ2UgKi8KKwkJCQl0YWJbKytjXSA9IHY7CisJCQl9IHdoaWxlIChjIDwgbik7CisjaWYgMQkvKiBYWFggYW5vdGhlciBkaXNndXN0aW5nIGNvbXBhdGliaWxpdHkgaGFjayAqLworCQkJLyoKKwkJCSAqIEFsYXMsIHRoZSBWNyBVbml4IHNjYW5mIGFsc28gdHJlYXRzIGZvcm1hdHMKKwkJCSAqIHN1Y2ggYXMgW2EtYy1lXSBhcyBgdGhlIGxldHRlcnMgYSB0aHJvdWdoIGUnLgorCQkJICogVGhpcyB0b28gaXMgcGVybWl0dGVkIGJ5IHRoZSBzdGFuZGFyZC4uLi4KKwkJCSAqLworCQkJZ290byBkb3N3aXRjaDsKKyNlbHNlCisJCQljID0gKmZtdCsrOworCQkJaWYgKGMgPT0gMCkKKwkJCQlyZXR1cm4gKGZtdCAtIDEpOworCQkJaWYgKGMgPT0gJ10nKQorCQkJCXJldHVybiAoZm10KTsKKyNlbmRpZgorCQkJYnJlYWs7CisKKwkJY2FzZSAnXSc6CQkvKiBlbmQgb2Ygc2NhbnNldCAqLworCQkJcmV0dXJuIChmbXQpOworCisJCWRlZmF1bHQ6CQkvKiBqdXN0IGFub3RoZXIgY2hhcmFjdGVyICovCisJCQljID0gbjsKKwkJCWJyZWFrOworCQl9CisJfQorCS8qIE5PVFJFQUNIRUQgKi8KK30KKworaW50Cit2ZnNjYW5mKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQwLCBfX3ZhX2xpc3QgYXApCit7CisJaW50IHI7CisKKwlGTE9DS0ZJTEUoZnApOworCXIgPSBfX3N2ZnNjYW5mKGZwLCBmbXQwLCBhcCk7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAocik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdmZ3cHJpbnRmLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdmZ3cHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYwY2E0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92ZndwcmludGYuYwpAQCAtMCwwICsxLDE1MjEgQEAKKy8qCSRPcGVuQlNEOiB2ZndwcmludGYuYyx2IDEuMTEgMjAxNC8wNi8wNCAwNzo0NToyNSBzdHNwIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIEFjdHVhbCB3cHJpbnRmIGlubmFyZHMuCisgKgorICogVGhpcyBjb2RlIGlzIGxhcmdlIGFuZCBjb21wbGljYXRlZC4uLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsYW5naW5mby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJsb2NhbC5oIgorI2luY2x1ZGUgImZ2d3JpdGUuaCIKKwordW5pb24gYXJnIHsKKwlpbnQJCQlpbnRhcmc7CisJdW5zaWduZWQgaW50CQl1aW50YXJnOworCWxvbmcJCQlsb25nYXJnOworCXVuc2lnbmVkIGxvbmcJCXVsb25nYXJnOworCWxvbmcgbG9uZwkJbG9uZ2xvbmdhcmc7CisJdW5zaWduZWQgbG9uZyBsb25nCXVsb25nbG9uZ2FyZzsKKwlwdHJkaWZmX3QJCXB0cmRpZmZhcmc7CisJc2l6ZV90CQkJc2l6ZWFyZzsKKwlzc2l6ZV90CQkJc3NpemVhcmc7CisJaW50bWF4X3QJCWludG1heGFyZzsKKwl1aW50bWF4X3QJCXVpbnRtYXhhcmc7CisJdm9pZAkJCSpwdm9pZGFyZzsKKwljaGFyCQkJKnBjaGFyYXJnOworCXNpZ25lZCBjaGFyCQkqcHNjaGFyYXJnOworCXNob3J0CQkJKnBzaG9ydGFyZzsKKwlpbnQJCQkqcGludGFyZzsKKwlsb25nCQkJKnBsb25nYXJnOworCWxvbmcgbG9uZwkJKnBsb25nbG9uZ2FyZzsKKwlwdHJkaWZmX3QJCSpwcHRyZGlmZmFyZzsKKwlzc2l6ZV90CQkJKnBzc2l6ZWFyZzsKKwlpbnRtYXhfdAkJKnBpbnRtYXhhcmc7CisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwlkb3VibGUJCQlkb3VibGVhcmc7CisJbG9uZyBkb3VibGUJCWxvbmdkb3VibGVhcmc7CisjZW5kaWYKKwl3aW50X3QJCQl3aW50YXJnOworCXdjaGFyX3QJCQkqcHdjaGFyYXJnOworfTsKKworc3RhdGljIGludCBfX2ZpbmRfYXJndW1lbnRzKGNvbnN0IHdjaGFyX3QgKmZtdDAsIHZhX2xpc3QgYXAsIHVuaW9uIGFyZyAqKmFyZ3RhYmxlLAorICAgIHNpemVfdCAqYXJndGFibGVzaXopOworc3RhdGljIGludCBfX2dyb3dfdHlwZV90YWJsZSh1bnNpZ25lZCBjaGFyICoqdHlwZXRhYmxlLCBpbnQgKnRhYmxlc2l6ZSk7CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGBmcHJpbnRmIHRvIHVuYnVmZmVyZWQgdW5peCBmaWxlJzogY3JlYXRlcyBhCisgKiB0ZW1wb3JhcnkgYnVmZmVyLiAgV2Ugb25seSB3b3JrIG9uIHdyaXRlLW9ubHkgZmlsZXM7IHRoaXMgYXZvaWRzCisgKiB3b3JyaWVzIGFib3V0IHVuZ2V0YyBidWZmZXJzIGFuZCBzbyBmb3J0aC4KKyAqLworc3RhdGljIGludAorX19zYnByaW50ZihGSUxFICpmcCwgY29uc3Qgd2NoYXJfdCAqZm10LCB2YV9saXN0IGFwKQoreworCWludCByZXQ7CisJRklMRSBmYWtlOworCXN0cnVjdCBfX3NmaWxlZXh0IGZha2VleHQ7CisJdW5zaWduZWQgY2hhciBidWZbQlVGU0laXTsKKworCV9GSUxFRVhUX1NFVFVQKCZmYWtlLCAmZmFrZWV4dCk7CisJLyogY29weSB0aGUgaW1wb3J0YW50IHZhcmlhYmxlcyAqLworCWZha2UuX2ZsYWdzID0gZnAtPl9mbGFncyAmIH5fX1NOQkY7CisJZmFrZS5fZmlsZSA9IGZwLT5fZmlsZTsKKwlmYWtlLl9jb29raWUgPSBmcC0+X2Nvb2tpZTsKKwlmYWtlLl93cml0ZSA9IGZwLT5fd3JpdGU7CisKKwkvKiBzZXQgdXAgdGhlIGJ1ZmZlciAqLworCWZha2UuX2JmLl9iYXNlID0gZmFrZS5fcCA9IGJ1ZjsKKwlmYWtlLl9iZi5fc2l6ZSA9IGZha2UuX3cgPSBzaXplb2YoYnVmKTsKKwlmYWtlLl9sYmZzaXplID0gMDsJLyogbm90IGFjdHVhbGx5IHVzZWQsIGJ1dCBKdXN0IEluIENhc2UgKi8KKworCS8qIGRvIHRoZSB3b3JrLCB0aGVuIGNvcHkgYW55IGVycm9yIHN0YXR1cyAqLworCXJldCA9IF9fdmZ3cHJpbnRmKCZmYWtlLCBmbXQsIGFwKTsKKwlpZiAocmV0ID49IDAgJiYgX19zZmx1c2goJmZha2UpKQorCQlyZXQgPSBFT0Y7CisJaWYgKGZha2UuX2ZsYWdzICYgX19TRVJSKQorCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwlyZXR1cm4gKHJldCk7Cit9CisKKy8qCisgKiBMaWtlIF9fZnB1dHdjX3VubG9jaywgYnV0IGhhbmRsZXMgZmFrZSBzdHJpbmcgKF9fU1NUUikgZmlsZXMgcHJvcGVybHkuCisgKiBGaWxlIG11c3QgYWxyZWFkeSBiZSBsb2NrZWQuCisgKi8KK3N0YXRpYyB3aW50X3QKK19feGZwdXR3Yyh3Y2hhcl90IHdjLCBGSUxFICpmcCkKK3sKKwltYnN0YXRlX3QgbWJzOworCWNoYXIgYnVmW01CX0xFTl9NQVhdOworCXN0cnVjdCBfX3N1aW8gdWlvOworCXN0cnVjdCBfX3Npb3YgaW92OworCXNpemVfdCBsZW47CisKKwlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NTVFIpID09IDApCisJCXJldHVybiAoX19mcHV0d2NfdW5sb2NrKHdjLCBmcCkpOworCisJYnplcm8oJm1icywgc2l6ZW9mKG1icykpOworCWxlbiA9IHdjcnRvbWIoYnVmLCB3YywgJm1icyk7CisJaWYgKGxlbiA9PSAoc2l6ZV90KS0xKSB7CisJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCQllcnJubyA9IEVJTFNFUTsKKwkJcmV0dXJuIChXRU9GKTsKKwl9CisJdWlvLnVpb19pb3YgPSAmaW92OworCXVpby51aW9fcmVzaWQgPSBsZW47CisJdWlvLnVpb19pb3ZjbnQgPSAxOworCWlvdi5pb3ZfYmFzZSA9IGJ1ZjsKKwlpb3YuaW92X2xlbiA9IGxlbjsKKwlyZXR1cm4gKF9fc2Z2d3JpdGUoZnAsICZ1aW8pICE9IEVPRiA/ICh3aW50X3Qpd2MgOiBXRU9GKTsKK30KKworLyoKKyAqIENvbnZlcnQgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyIHN0cmluZyBhcmd1bWVudCBmb3IgdGhlICVzIGZvcm1hdCB0byBhIHdpZGUKKyAqIHN0cmluZyByZXByZXNlbnRhdGlvbi4gYGBwcmVjJycgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcworICogdG8gb3V0cHV0LiBJZiBgYHByZWMnJyBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybywgd2UgY2FuJ3QgYXNzdW1lCisgKiB0aGF0IHRoZSBtdWx0aWJ5dGUgY2hhcmFjdGVyIHN0cmluZyBlbmRzIGluIGEgbnVsbCBjaGFyYWN0ZXIuCisgKiAKKyAqIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLgorICogVG8gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCBjaGVjayBlcnJubyBmb3IgRU5PTUVNLCBFSUxTRVEgYW5kIEVJTlZBTC4KKyAqLworc3RhdGljIHdjaGFyX3QgKgorX19tYnNjb252KGNoYXIgKm1ic2FyZywgaW50IHByZWMpCit7CisJbWJzdGF0ZV90IG1iczsKKwl3Y2hhcl90ICpjb252YnVmLCAqd2NwOworCWNvbnN0IGNoYXIgKnA7CisJc2l6ZV90IGluc2l6ZSwgbmNoYXJzLCBuY29udjsKKworCWlmIChtYnNhcmcgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworCS8qCisJICogU3VwcGxpZWQgYXJndW1lbnQgaXMgYSBtdWx0aWJ5dGUgc3RyaW5nOyBjb252ZXJ0IGl0IHRvIHdpZGUKKwkgKiBjaGFyYWN0ZXJzIGZpcnN0LgorCSAqLworCWlmIChwcmVjID49IDApIHsKKwkJLyoKKwkJICogU3RyaW5nIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIE5VTC10ZXJtaW5hdGVkLiBGaW5kIHRoZQorCQkgKiBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBwcmludC4KKwkJICovCisJCXAgPSBtYnNhcmc7CisJCWluc2l6ZSA9IG5jaGFycyA9IG5jb252ID0gMDsKKwkJYnplcm8oJm1icywgc2l6ZW9mKG1icykpOworCQl3aGlsZSAobmNoYXJzICE9IChzaXplX3QpcHJlYykgeworCQkJbmNvbnYgPSBtYnJsZW4ocCwgTUJfQ1VSX01BWCwgJm1icyk7CisJCQlpZiAobmNvbnYgPT0gKHNpemVfdCkwIHx8IG5jb252ID09IChzaXplX3QpLTEgfHwKKwkJCSAgICBuY29udiA9PSAoc2l6ZV90KS0yKQorCQkJCWJyZWFrOworCQkJcCArPSBuY29udjsKKwkJCW5jaGFycysrOworCQkJaW5zaXplICs9IG5jb252OworCQl9CisJCWlmIChuY29udiA9PSAoc2l6ZV90KS0xIHx8IG5jb252ID09IChzaXplX3QpLTIpCisJCQlyZXR1cm4gKE5VTEwpOworCX0gZWxzZQorCQlpbnNpemUgPSBzdHJsZW4obWJzYXJnKTsKKworCS8qCisJICogQWxsb2NhdGUgYnVmZmVyIGZvciB0aGUgcmVzdWx0IGFuZCBwZXJmb3JtIHRoZSBjb252ZXJzaW9uLAorCSAqIGNvbnZlcnRpbmcgYXQgbW9zdCBgc2l6ZScgYnl0ZXMgb2YgdGhlIGlucHV0IG11bHRpYnl0ZSBzdHJpbmcgdG8KKwkgKiB3aWRlIGNoYXJhY3RlcnMgZm9yIHByaW50aW5nLgorCSAqLworCWNvbnZidWYgPSBjYWxsb2MoaW5zaXplICsgMSwgc2l6ZW9mKCpjb252YnVmKSk7CisJaWYgKGNvbnZidWYgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwl3Y3AgPSBjb252YnVmOworCXAgPSBtYnNhcmc7CisJYnplcm8oJm1icywgc2l6ZW9mKG1icykpOworCW5jb252ID0gMDsKKwl3aGlsZSAoaW5zaXplICE9IDApIHsKKwkJbmNvbnYgPSBtYnJ0b3djKHdjcCwgcCwgaW5zaXplLCAmbWJzKTsKKwkJaWYgKG5jb252ID09IDAgfHwgbmNvbnYgPT0gKHNpemVfdCktMSB8fCBuY29udiA9PSAoc2l6ZV90KS0yKQorCQkJYnJlYWs7CisJCXdjcCsrOworCQlwICs9IG5jb252OworCQlpbnNpemUgLT0gbmNvbnY7CisJfQorCWlmIChuY29udiA9PSAoc2l6ZV90KS0xIHx8IG5jb252ID09IChzaXplX3QpLTIpIHsKKwkJZnJlZShjb252YnVmKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJKndjcCA9ICdcMCc7CisKKwlyZXR1cm4gKGNvbnZidWYpOworfQorCisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlICJmbG9hdGlvLmgiCisjaW5jbHVkZSAiZ2R0b2EuaCIKKworI2RlZmluZQlERUZQUkVDCQk2CisKK3N0YXRpYyBpbnQgZXhwb25lbnQod2NoYXJfdCAqLCBpbnQsIGludCk7CisjZW5kaWYgLyogRkxPQVRJTkdfUE9JTlQgKi8KKworLyoKKyAqIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgd2UgdXNlIGFzIHNjcmF0Y2ggc3BhY2UgZm9yIGludGVnZXIKKyAqIGNvbnZlcnNpb25zLCBhbW9uZyBvdGhlciB0aGluZ3MuICBUZWNobmljYWxseSwgd2Ugd291bGQgbmVlZCB0aGUKKyAqIG1vc3Qgc3BhY2UgZm9yIGJhc2UgMTAgY29udmVyc2lvbnMgd2l0aCB0aG91c2FuZHMnIGdyb3VwaW5nCisgKiBjaGFyYWN0ZXJzIGJldHdlZW4gZWFjaCBwYWlyIG9mIGRpZ2l0cy4gIDEwMCBieXRlcyBpcyBhCisgKiBjb25zZXJ2YXRpdmUgb3ZlcmVzdGltYXRlIGV2ZW4gZm9yIGEgMTI4LWJpdCB1aW50bWF4X3QuCisgKi8KKyNkZWZpbmUgQlVGCTEwMAorCisjZGVmaW5lIFNUQVRJQ19BUkdfVEJMX1NJWkUgOAkvKiBTaXplIG9mIHN0YXRpYyBhcmd1bWVudCB0YWJsZS4gKi8KKworCisvKgorICogTWFjcm9zIGZvciBjb252ZXJ0aW5nIGRpZ2l0cyB0byBsZXR0ZXJzIGFuZCB2aWNlIHZlcnNhCisgKi8KKyNkZWZpbmUJdG9fZGlnaXQoYykJKChjKSAtICcwJykKKyNkZWZpbmUgaXNfZGlnaXQoYykJKCh1bnNpZ25lZCl0b19kaWdpdChjKSA8PSA5KQorI2RlZmluZQl0b19jaGFyKG4pCSgod2NoYXJfdCkoKG4pICsgJzAnKSkKKworLyoKKyAqIEZsYWdzIHVzZWQgZHVyaW5nIGNvbnZlcnNpb24uCisgKi8KKyNkZWZpbmUJQUxUCQkweDAwMDEJCS8qIGFsdGVybmF0ZSBmb3JtICovCisjZGVmaW5lCUxBREpVU1QJCTB4MDAwNAkJLyogbGVmdCBhZGp1c3RtZW50ICovCisjZGVmaW5lCUxPTkdEQkwJCTB4MDAwOAkJLyogbG9uZyBkb3VibGUgKi8KKyNkZWZpbmUJTE9OR0lOVAkJMHgwMDEwCQkvKiBsb25nIGludGVnZXIgKi8KKyNkZWZpbmUJTExPTkdJTlQJMHgwMDIwCQkvKiBsb25nIGxvbmcgaW50ZWdlciAqLworI2RlZmluZQlTSE9SVElOVAkweDAwNDAJCS8qIHNob3J0IGludGVnZXIgKi8KKyNkZWZpbmUJWkVST1BBRAkJMHgwMDgwCQkvKiB6ZXJvIChhcyBvcHBvc2VkIHRvIGJsYW5rKSBwYWQgKi8KKyNkZWZpbmUgRlBUCQkweDAxMDAJCS8qIEZsb2F0aW5nIHBvaW50IG51bWJlciAqLworI2RlZmluZSBQVFJJTlQJCTB4MDIwMAkJLyogKHVuc2lnbmVkKSBwdHJkaWZmX3QgKi8KKyNkZWZpbmUgU0laRUlOVAkJMHgwNDAwCQkvKiAoc2lnbmVkKSBzaXplX3QgKi8KKyNkZWZpbmUgQ0hBUklOVAkJMHgwODAwCQkvKiA4IGJpdCBpbnRlZ2VyICovCisjZGVmaW5lIE1BWElOVAkJMHgxMDAwCQkvKiBsYXJnZXN0IGludGVnZXIgc2l6ZSAoaW50bWF4X3QpICovCisKK2ludAorX192ZndwcmludGYoRklMRSAqIF9fcmVzdHJpY3QgZnAsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IGZtdDAsIF9fdmFfbGlzdCBhcCkKK3sKKwl3Y2hhcl90ICpmbXQ7CQkvKiBmb3JtYXQgc3RyaW5nICovCisJd2NoYXJfdCBjaDsJCS8qIGNoYXJhY3RlciBmcm9tIGZtdCAqLworCWludCBuLCBuMiwgbjM7CQkvKiBoYW5keSBpbnRlZ2VycyAoc2hvcnQgdGVybSB1c2FnZSkgKi8KKwl3Y2hhcl90ICpjcDsJCS8qIGhhbmR5IGNoYXIgcG9pbnRlciAoc2hvcnQgdGVybSB1c2FnZSkgKi8KKwlpbnQgZmxhZ3M7CQkvKiBmbGFncyBhcyBhYm92ZSAqLworCWludCByZXQ7CQkvKiByZXR1cm4gdmFsdWUgYWNjdW11bGF0b3IgKi8KKwlpbnQgd2lkdGg7CQkvKiB3aWR0aCBmcm9tIGZvcm1hdCAoJThkKSwgb3IgMCAqLworCWludCBwcmVjOwkJLyogcHJlY2lzaW9uIGZyb20gZm9ybWF0OyA8MCBmb3IgTi9BICovCisJd2NoYXJfdCBzaWduOwkJLyogc2lnbiBwcmVmaXggKCcgJywgJysnLCAnLScsIG9yIFwwKSAqLworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJLyoKKwkgKiBXZSBjYW4gZGVjb21wb3NlIHRoZSBwcmludGVkIHJlcHJlc2VudGF0aW9uIG9mIGZsb2F0aW5nCisJICogcG9pbnQgbnVtYmVycyBpbnRvIHNldmVyYWwgcGFydHMsIHNvbWUgb2Ygd2hpY2ggbWF5IGJlIGVtcHR5OgorCSAqCisJICogWyt8LXwgXSBbMHh8MFhdIE1NTSAuIE5OTiBbZXxFfHB8UF0gWyt8LV0gWloKKwkgKiAgICBBICAgICAgIEIgICAgIC0tLUMtLS0gICAgICBEICAgICAgIEUgICBGCisJICoKKwkgKiBBOgknc2lnbicgaG9sZHMgdGhpcyB2YWx1ZSBpZiBwcmVzZW50OyAnXDAnIG90aGVyd2lzZQorCSAqIEI6CW94WzFdIGhvbGRzIHRoZSAneCcgb3IgJ1gnOyAnXDAnIGlmIG5vdCBoZXhhZGVjaW1hbAorCSAqIEM6CWNwIHBvaW50cyB0byB0aGUgc3RyaW5nIE1NTU5OTi4gIExlYWRpbmcgYW5kIHRyYWlsaW5nCisJICoJemVyb3MgYXJlIG5vdCBpbiB0aGUgc3RyaW5nIGFuZCBtdXN0IGJlIGFkZGVkLgorCSAqIEQ6CWV4cGNoYXIgaG9sZHMgdGhpcyBjaGFyYWN0ZXI7ICdcMCcgaWYgbm8gZXhwb25lbnQsIGUuZy4gJWYKKwkgKiBGOglhdCBsZWFzdCB0d28gZGlnaXRzIGZvciBkZWNpbWFsLCBhdCBsZWFzdCBvbmUgZGlnaXQgZm9yIGhleAorCSAqLworCWNoYXIgKmRlY2ltYWxfcG9pbnQgPSBOVUxMOworCWludCBzaWduZmxhZzsJCS8qIHRydWUgaWYgZmxvYXQgaXMgbmVnYXRpdmUgKi8KKwl1bmlvbiB7CQkJLyogZmxvYXRpbmcgcG9pbnQgYXJndW1lbnRzICVbYUFlRWZGZ0ddICovCisJCWRvdWJsZSBkYmw7CisJCWxvbmcgZG91YmxlIGxkYmw7CisJfSBmcGFyZzsKKwlpbnQgZXhwdDsJCS8qIGludGVnZXIgdmFsdWUgb2YgZXhwb25lbnQgKi8KKwljaGFyIGV4cGNoYXI7CQkvKiBleHBvbmVudCBjaGFyYWN0ZXI6IFtlRXBQXDBdICovCisJY2hhciAqZHRvYWVuZDsJCS8qIHBvaW50ZXIgdG8gZW5kIG9mIGNvbnZlcnRlZCBkaWdpdHMgKi8KKwlpbnQgZXhwc2l6ZTsJCS8qIGNoYXJhY3RlciBjb3VudCBmb3IgZXhwc3RyICovCisJaW50IGxlYWQ7CQkvKiBzaWcgZmlncyBiZWZvcmUgZGVjaW1hbCBvciBncm91cCBzZXAgKi8KKwlpbnQgbmRpZzsJCS8qIGFjdHVhbCBudW1iZXIgb2YgZGlnaXRzIHJldHVybmVkIGJ5IGR0b2EgKi8KKwl3Y2hhcl90IGV4cHN0cltNQVhFWFBESUcrMl07CS8qIGJ1ZmZlciBmb3IgZXhwb25lbnQgc3RyaW5nOiBlK1paWiAqLworCWNoYXIgKmR0b2FyZXN1bHQgPSBOVUxMOworI2VuZGlmCisKKwl1aW50bWF4X3QgX3VtYXg7CS8qIGludGVnZXIgYXJndW1lbnRzICVbZGlvdXhYXSAqLworCWVudW0geyBPQ1QsIERFQywgSEVYIH0gYmFzZTsJLyogYmFzZSBmb3IgJVtkaW91eFhdIGNvbnZlcnNpb24gKi8KKwlpbnQgZHByZWM7CQkvKiBhIGNvcHkgb2YgcHJlYyBpZiAlW2Rpb3V4WF0sIDAgb3RoZXJ3aXNlICovCisJaW50IHJlYWxzejsJCS8qIGZpZWxkIHNpemUgZXhwYW5kZWQgYnkgZHByZWMgKi8KKwlpbnQgc2l6ZTsJCS8qIHNpemUgb2YgY29udmVydGVkIGZpZWxkIG9yIHN0cmluZyAqLworCWNvbnN0IGNoYXIgKnhkaWdzOwkvKiBkaWdpdHMgZm9yICVbeFhdIGNvbnZlcnNpb24gKi8KKwl3Y2hhcl90IGJ1ZltCVUZdOwkvKiBidWZmZXIgd2l0aCBzcGFjZSBmb3IgZGlnaXRzIG9mIHVpbnRtYXhfdCAqLworCXdjaGFyX3Qgb3hbMl07CQkvKiBzcGFjZSBmb3IgMHg7IG94WzFdIGlzIGVpdGhlciB4LCBYLCBvciBcMCAqLworCXVuaW9uIGFyZyAqYXJndGFibGU7CS8qIGFyZ3MsIGJ1aWx0IGR1ZSB0byBwb3NpdGlvbmFsIGFyZyAqLworCXVuaW9uIGFyZyBzdGF0YXJndGFibGVbU1RBVElDX0FSR19UQkxfU0laRV07CisJc2l6ZV90IGFyZ3RhYmxlc2l6OworCWludCBuZXh0YXJnOwkJLyogMS1iYXNlZCBhcmd1bWVudCBpbmRleCAqLworCXZhX2xpc3Qgb3JnYXA7CQkvKiBvcmlnaW5hbCBhcmd1bWVudCBwb2ludGVyICovCisJd2NoYXJfdCAqY29udmJ1ZjsJLyogYnVmZmVyIGZvciBtdWx0aWJ5dGUgdG8gd2lkZSBjb252ZXJzaW9uICovCisKKwkvKgorCSAqIENob29zZSBQQURTSVpFIHRvIHRyYWRlIGVmZmljaWVuY3kgdnMuIHNpemUuICBJZiBsYXJnZXIgcHJpbnRmCisJICogZmllbGRzIG9jY3VyIGZyZXF1ZW50bHksIGluY3JlYXNlIFBBRFNJWkUgYW5kIG1ha2UgdGhlIGluaXRpYWxpc2VycworCSAqIGJlbG93IGxvbmdlci4KKwkgKi8KKyNkZWZpbmUJUEFEU0laRQkxNgkJLyogcGFkIGNodW5rIHNpemUgKi8KKwlzdGF0aWMgd2NoYXJfdCBibGFua3NbUEFEU0laRV0gPQorCSB7JyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnfTsKKwlzdGF0aWMgd2NoYXJfdCB6ZXJvZXNbUEFEU0laRV0gPQorCSB7JzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnfTsKKworCXN0YXRpYyBjb25zdCBjaGFyIHhkaWdzX2xvd2VyWzE2XSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKwlzdGF0aWMgY29uc3QgY2hhciB4ZGlnc191cHBlclsxNl0gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CisKKwkvKgorCSAqIEJFV0FSRSwgdGhlc2UgYGdvdG8gZXJyb3InIG9uIGVycm9yLCBQUklOVCB1c2VzICduMycsCisJICogUEFEIHVzZXMgYG4nIGFuZCAnbjMnLCBhbmQgUFJJTlRBTkRQQUQgdXNlcyAnbicsICduMicsIGFuZCAnbjMnLgorCSAqLworI2RlZmluZQlQUklOVChwdHIsIGxlbikJZG8gewlcCisJZm9yIChuMyA9IDA7IG4zIDwgKGxlbik7IG4zKyspIHsJXAorCQlpZiAoKF9feGZwdXR3YygocHRyKVtuM10sIGZwKSkgPT0gV0VPRikJXAorCQkJZ290byBlcnJvcjsgXAorCX0gXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJUEFEKGhvd21hbnksIHdpdGgpIGRvIHsgXAorCWlmICgobiA9IChob3dtYW55KSkgPiAwKSB7IFwKKwkJd2hpbGUgKG4gPiBQQURTSVpFKSB7IFwKKwkJCVBSSU5UKHdpdGgsIFBBRFNJWkUpOyBcCisJCQluIC09IFBBRFNJWkU7IFwKKwkJfSBcCisJCVBSSU5UKHdpdGgsIG4pOyBcCisJfSBcCit9IHdoaWxlICgwKQorI2RlZmluZQlQUklOVEFORFBBRChwLCBlcCwgbGVuLCB3aXRoKSBkbyB7CVwKKwluMiA9IChlcCkgLSAocCk7ICAgICAgIAkJCVwKKwlpZiAobjIgPiAobGVuKSkJCQkJXAorCQluMiA9IChsZW4pOwkJCVwKKwlpZiAobjIgPiAwKQkJCQlcCisJCVBSSU5UKChwKSwgbjIpOwkJCVwKKwlQQUQoKGxlbikgLSAobjIgPiAwID8gbjIgOiAwKSwgKHdpdGgpKTsJXAorfSB3aGlsZSgwKQorCisJLyoKKwkgKiBUbyBleHRlbmQgc2hvcnRzIHByb3Blcmx5LCB3ZSBuZWVkIGJvdGggc2lnbmVkIGFuZCB1bnNpZ25lZAorCSAqIGFyZ3VtZW50IGV4dHJhY3Rpb24gbWV0aG9kcy4KKwkgKi8KKyNkZWZpbmUJU0FSRygpIFwKKwkoKGludG1heF90KShmbGFncyZNQVhJTlQgPyBHRVRBUkcoaW50bWF4X3QpIDogXAorCSAgICBmbGFncyZMTE9OR0lOVCA/IEdFVEFSRyhsb25nIGxvbmcpIDogXAorCSAgICBmbGFncyZMT05HSU5UID8gR0VUQVJHKGxvbmcpIDogXAorCSAgICBmbGFncyZQVFJJTlQgPyBHRVRBUkcocHRyZGlmZl90KSA6IFwKKwkgICAgZmxhZ3MmU0laRUlOVCA/IEdFVEFSRyhzc2l6ZV90KSA6IFwKKwkgICAgZmxhZ3MmU0hPUlRJTlQgPyAoc2hvcnQpR0VUQVJHKGludCkgOiBcCisJICAgIGZsYWdzJkNIQVJJTlQgPyAoc2lnbmVkIGNoYXIpR0VUQVJHKGludCkgOiBcCisJICAgIEdFVEFSRyhpbnQpKSkKKyNkZWZpbmUJVUFSRygpIFwKKwkoKHVpbnRtYXhfdCkoZmxhZ3MmTUFYSU5UID8gR0VUQVJHKHVpbnRtYXhfdCkgOiBcCisJICAgIGZsYWdzJkxMT05HSU5UID8gR0VUQVJHKHVuc2lnbmVkIGxvbmcgbG9uZykgOiBcCisJICAgIGZsYWdzJkxPTkdJTlQgPyBHRVRBUkcodW5zaWduZWQgbG9uZykgOiBcCisJICAgIGZsYWdzJlBUUklOVCA/ICh1aW50cHRyX3QpR0VUQVJHKHB0cmRpZmZfdCkgOiAvKiBYWFggKi8gXAorCSAgICBmbGFncyZTSVpFSU5UID8gR0VUQVJHKHNpemVfdCkgOiBcCisJICAgIGZsYWdzJlNIT1JUSU5UID8gKHVuc2lnbmVkIHNob3J0KUdFVEFSRyhpbnQpIDogXAorCSAgICBmbGFncyZDSEFSSU5UID8gKHVuc2lnbmVkIGNoYXIpR0VUQVJHKGludCkgOiBcCisJICAgIEdFVEFSRyh1bnNpZ25lZCBpbnQpKSkKKworCS8qCisJICogQXBwZW5kIGEgZGlnaXQgdG8gYSB2YWx1ZSBhbmQgY2hlY2sgZm9yIG92ZXJmbG93LgorCSAqLworI2RlZmluZSBBUFBFTkRfRElHSVQodmFsLCBkaWcpIGRvIHsgXAorCWlmICgodmFsKSA+IElOVF9NQVggLyAxMCkgXAorCQlnb3RvIG92ZXJmbG93OyBcCisJKHZhbCkgKj0gMTA7IFwKKwlpZiAoKHZhbCkgPiBJTlRfTUFYIC0gdG9fZGlnaXQoKGRpZykpKSBcCisJCWdvdG8gb3ZlcmZsb3c7IFwKKwkodmFsKSArPSB0b19kaWdpdCgoZGlnKSk7IFwKK30gd2hpbGUgKDApCisKKwkgLyoKKwkgICogR2V0ICogYXJndW1lbnRzLCBpbmNsdWRpbmcgdGhlIGZvcm0gKm5uJC4gIFByZXNlcnZlIHRoZSBuZXh0YXJnCisJICAqIHRoYXQgdGhlIGFyZ3VtZW50IGNhbiBiZSBnb3R0ZW4gb25jZSB0aGUgdHlwZSBpcyBkZXRlcm1pbmVkLgorCSAgKi8KKyNkZWZpbmUgR0VUQVNURVIodmFsKSBcCisJbjIgPSAwOyBcCisJY3AgPSBmbXQ7IFwKKwl3aGlsZSAoaXNfZGlnaXQoKmNwKSkgeyBcCisJCUFQUEVORF9ESUdJVChuMiwgKmNwKTsgXAorCQljcCsrOyBcCisJfSBcCisJaWYgKCpjcCA9PSAnJCcpIHsgXAorCQlpbnQgaG9sZCA9IG5leHRhcmc7IFwKKwkJaWYgKGFyZ3RhYmxlID09IE5VTEwpIHsgXAorCQkJYXJndGFibGUgPSBzdGF0YXJndGFibGU7IFwKKwkJCV9fZmluZF9hcmd1bWVudHMoZm10MCwgb3JnYXAsICZhcmd0YWJsZSwgJmFyZ3RhYmxlc2l6KTsgXAorCQl9IFwKKwkJbmV4dGFyZyA9IG4yOyBcCisJCXZhbCA9IEdFVEFSRyhpbnQpOyBcCisJCW5leHRhcmcgPSBob2xkOyBcCisJCWZtdCA9ICsrY3A7IFwKKwl9IGVsc2UgeyBcCisJCXZhbCA9IEdFVEFSRyhpbnQpOyBcCisJfQorCisvKgorKiBHZXQgdGhlIGFyZ3VtZW50IGluZGV4ZWQgYnkgbmV4dGFyZy4gICBJZiB0aGUgYXJndW1lbnQgdGFibGUgaXMKKyogYnVpbHQsIHVzZSBpdCB0byBnZXQgdGhlIGFyZ3VtZW50LiAgSWYgaXRzIG5vdCwgZ2V0IHRoZSBuZXh0CisqIGFyZ3VtZW50IChhbmQgYXJndW1lbnRzIG11c3QgYmUgZ290dGVuIHNlcXVlbnRpYWxseSkuCisqLworI2RlZmluZSBHRVRBUkcodHlwZSkgXAorCSgoYXJndGFibGUgIT0gTlVMTCkgPyAqKCh0eXBlKikoJmFyZ3RhYmxlW25leHRhcmcrK10pKSA6IFwKKwkJKG5leHRhcmcrKywgdmFfYXJnKGFwLCB0eXBlKSkpCisKKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAxKTsKKwkvKiBzb3JyeSwgZndwcmludGYocmVhZF9vbmx5X2ZpbGUsICIiKSByZXR1cm5zIEVPRiwgbm90IDAgKi8KKwlpZiAoY2FudHdyaXRlKGZwKSkgeworCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gKEVPRik7CisJfQorCisJLyogb3B0aW1pc2UgZndwcmludGYoc3RkZXJyKSAoYW5kIG90aGVyIHVuYnVmZmVyZWQgVW5peCBmaWxlcykgKi8KKwlpZiAoKGZwLT5fZmxhZ3MgJiAoX19TTkJGfF9fU1dSfF9fU1JXKSkgPT0gKF9fU05CRnxfX1NXUikgJiYKKwkgICAgZnAtPl9maWxlID49IDApCisJCXJldHVybiAoX19zYnByaW50ZihmcCwgZm10MCwgYXApKTsKKworCWZtdCA9ICh3Y2hhcl90ICopZm10MDsKKwlhcmd0YWJsZSA9IE5VTEw7CisJbmV4dGFyZyA9IDE7CisJdmFfY29weShvcmdhcCwgYXApOworCXJldCA9IDA7CisJY29udmJ1ZiA9IE5VTEw7CisKKwkvKgorCSAqIFNjYW4gdGhlIGZvcm1hdCBmb3IgY29udmVyc2lvbnMgKGAlJyBjaGFyYWN0ZXIpLgorCSAqLworCWZvciAoOzspIHsKKwkJZm9yIChjcCA9IGZtdDsgKGNoID0gKmZtdCkgIT0gJ1wwJyAmJiBjaCAhPSAnJSc7IGZtdCsrKQorCQkJY29udGludWU7CisJCWlmIChmbXQgIT0gY3ApIHsKKwkJCXB0cmRpZmZfdCBtID0gZm10IC0gY3A7CisJCQlpZiAobSA8IDAgfHwgbSA+IElOVF9NQVggLSByZXQpCisJCQkJZ290byBvdmVyZmxvdzsKKwkJCVBSSU5UKGNwLCBtKTsKKwkJCXJldCArPSBtOworCQl9CisJCWlmIChjaCA9PSAnXDAnKQorCQkJZ290byBkb25lOworCQlmbXQrKzsJCS8qIHNraXAgb3ZlciAnJScgKi8KKworCQlmbGFncyA9IDA7CisJCWRwcmVjID0gMDsKKwkJd2lkdGggPSAwOworCQlwcmVjID0gLTE7CisJCXNpZ24gPSAnXDAnOworCQlveFsxXSA9ICdcMCc7CisKK3JmbGFnOgkJY2ggPSAqZm10Kys7CityZXN3aXRjaDoJc3dpdGNoIChjaCkgeworCQljYXNlICcgJzoKKwkJCS8qCisJCQkgKiBgYElmIHRoZSBzcGFjZSBhbmQgKyBmbGFncyBib3RoIGFwcGVhciwgdGhlIHNwYWNlCisJCQkgKiBmbGFnIHdpbGwgYmUgaWdub3JlZC4nJworCQkJICoJLS0gQU5TSSBYM0oxMQorCQkJICovCisJCQlpZiAoIXNpZ24pCisJCQkJc2lnbiA9ICcgJzsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJyMnOgorCQkJZmxhZ3MgfD0gQUxUOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnXCcnOgorCQkJLyogZ3JvdXBpbmcgbm90IGltcGxlbWVudGVkICovCisJCQlnb3RvIHJmbGFnOworCQljYXNlICcqJzoKKwkJCS8qCisJCQkgKiBgYEEgbmVnYXRpdmUgZmllbGQgd2lkdGggYXJndW1lbnQgaXMgdGFrZW4gYXMgYQorCQkJICogLSBmbGFnIGZvbGxvd2VkIGJ5IGEgcG9zaXRpdmUgZmllbGQgd2lkdGguJycKKwkJCSAqCS0tIEFOU0kgWDNKMTEKKwkJCSAqIFRoZXkgZG9uJ3QgZXhjbHVkZSBmaWVsZCB3aWR0aHMgcmVhZCBmcm9tIGFyZ3MuCisJCQkgKi8KKwkJCUdFVEFTVEVSKHdpZHRoKTsKKwkJCWlmICh3aWR0aCA+PSAwKQorCQkJCWdvdG8gcmZsYWc7CisJCQlpZiAod2lkdGggPT0gSU5UX01JTikKKwkJCQlnb3RvIG92ZXJmbG93OworCQkJd2lkdGggPSAtd2lkdGg7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQljYXNlICctJzoKKwkJCWZsYWdzIHw9IExBREpVU1Q7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICcrJzoKKwkJCXNpZ24gPSAnKyc7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICcuJzoKKwkJCWlmICgoY2ggPSAqZm10KyspID09ICcqJykgeworCQkJCUdFVEFTVEVSKG4pOworCQkJCXByZWMgPSBuIDwgMCA/IC0xIDogbjsKKwkJCQlnb3RvIHJmbGFnOworCQkJfQorCQkJbiA9IDA7CisJCQl3aGlsZSAoaXNfZGlnaXQoY2gpKSB7CisJCQkJQVBQRU5EX0RJR0lUKG4sIGNoKTsKKwkJCQljaCA9ICpmbXQrKzsKKwkJCX0KKwkJCWlmIChjaCA9PSAnJCcpIHsKKwkJCQluZXh0YXJnID0gbjsKKwkJCQlpZiAoYXJndGFibGUgPT0gTlVMTCkgeworCQkJCQlhcmd0YWJsZSA9IHN0YXRhcmd0YWJsZTsKKwkJCQkJX19maW5kX2FyZ3VtZW50cyhmbXQwLCBvcmdhcCwKKwkJCQkJICAgICZhcmd0YWJsZSwgJmFyZ3RhYmxlc2l6KTsKKwkJCQl9CisJCQkJZ290byByZmxhZzsKKwkJCX0KKwkJCXByZWMgPSBuOworCQkJZ290byByZXN3aXRjaDsKKwkJY2FzZSAnMCc6CisJCQkvKgorCQkJICogYGBOb3RlIHRoYXQgMCBpcyB0YWtlbiBhcyBhIGZsYWcsIG5vdCBhcyB0aGUKKwkJCSAqIGJlZ2lubmluZyBvZiBhIGZpZWxkIHdpZHRoLicnCisJCQkgKgktLSBBTlNJIFgzSjExCisJCQkgKi8KKwkJCWZsYWdzIHw9IFpFUk9QQUQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKwkJY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorCQkJbiA9IDA7CisJCQlkbyB7CisJCQkJQVBQRU5EX0RJR0lUKG4sIGNoKTsKKwkJCQljaCA9ICpmbXQrKzsKKwkJCX0gd2hpbGUgKGlzX2RpZ2l0KGNoKSk7CisJCQlpZiAoY2ggPT0gJyQnKSB7CisJCQkJbmV4dGFyZyA9IG47CisJCQkJaWYgKGFyZ3RhYmxlID09IE5VTEwpIHsKKwkJCQkJYXJndGFibGUgPSBzdGF0YXJndGFibGU7CisJCQkJCV9fZmluZF9hcmd1bWVudHMoZm10MCwgb3JnYXAsCisJCQkJCSAgICAmYXJndGFibGUsICZhcmd0YWJsZXNpeik7CisJCQkJfQorCQkJCWdvdG8gcmZsYWc7CisJCQl9CisJCQl3aWR0aCA9IG47CisJCQlnb3RvIHJlc3dpdGNoOworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJCWNhc2UgJ0wnOgorCQkJZmxhZ3MgfD0gTE9OR0RCTDsKKwkJCWdvdG8gcmZsYWc7CisjZW5kaWYKKwkJY2FzZSAnaCc6CisJCQlpZiAoKmZtdCA9PSAnaCcpIHsKKwkJCQlmbXQrKzsKKwkJCQlmbGFncyB8PSBDSEFSSU5UOworCQkJfSBlbHNlIHsKKwkJCQlmbGFncyB8PSBTSE9SVElOVDsKKwkJCX0KKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ2onOgorCQkJZmxhZ3MgfD0gTUFYSU5UOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnbCc6CisJCQlpZiAoKmZtdCA9PSAnbCcpIHsKKwkJCQlmbXQrKzsKKwkJCQlmbGFncyB8PSBMTE9OR0lOVDsKKwkJCX0gZWxzZSB7CisJCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCX0KKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ3EnOgorCQkJZmxhZ3MgfD0gTExPTkdJTlQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICd0JzoKKwkJCWZsYWdzIHw9IFBUUklOVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ3onOgorCQkJZmxhZ3MgfD0gU0laRUlOVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ0MnOgorCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCS8qRkFMTFRIUk9VR0gqLworCQljYXNlICdjJzoKKwkJCWlmIChmbGFncyAmIExPTkdJTlQpCisJCQkJKihjcCA9IGJ1ZikgPSAod2NoYXJfdClHRVRBUkcod2ludF90KTsKKwkJCWVsc2UKKwkJCQkqKGNwID0gYnVmKSA9ICh3Y2hhcl90KWJ0b3djKEdFVEFSRyhpbnQpKTsKKwkJCXNpemUgPSAxOworCQkJc2lnbiA9ICdcMCc7CisJCQlicmVhazsKKwkJY2FzZSAnRCc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ2QnOgorCQljYXNlICdpJzoKKwkJCV91bWF4ID0gU0FSRygpOworCQkJaWYgKChpbnRtYXhfdClfdW1heCA8IDApIHsKKwkJCQlfdW1heCA9IC1fdW1heDsKKwkJCQlzaWduID0gJy0nOworCQkJfQorCQkJYmFzZSA9IERFQzsKKwkJCWdvdG8gbnVtYmVyOworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJCWNhc2UgJ2EnOgorCQljYXNlICdBJzoKKwkJCWlmIChjaCA9PSAnYScpIHsKKwkJCQlveFsxXSA9ICd4JzsKKwkJCQl4ZGlncyA9IHhkaWdzX2xvd2VyOworCQkJCWV4cGNoYXIgPSAncCc7CisJCQl9IGVsc2UgeworCQkJCW94WzFdID0gJ1gnOworCQkJCXhkaWdzID0geGRpZ3NfdXBwZXI7CisJCQkJZXhwY2hhciA9ICdQJzsKKwkJCX0KKwkJCWlmIChwcmVjID49IDApCisJCQkJcHJlYysrOworCQkJaWYgKGR0b2FyZXN1bHQpCisJCQkJX19mcmVlZHRvYShkdG9hcmVzdWx0KTsKKwkJCWlmIChmbGFncyAmIExPTkdEQkwpIHsKKwkJCQlmcGFyZy5sZGJsID0gR0VUQVJHKGxvbmcgZG91YmxlKTsKKwkJCQlkdG9hcmVzdWx0ID0KKwkJCQkgICAgX19obGR0b2EoZnBhcmcubGRibCwgeGRpZ3MsIHByZWMsCisJCQkJICAgICZleHB0LCAmc2lnbmZsYWcsICZkdG9hZW5kKTsKKwkJCQlpZiAoZHRvYXJlc3VsdCA9PSBOVUxMKSB7CisJCQkJCWVycm5vID0gRU5PTUVNOworCQkJCQlnb3RvIGVycm9yOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJZnBhcmcuZGJsID0gR0VUQVJHKGRvdWJsZSk7CisJCQkJZHRvYXJlc3VsdCA9CisJCQkJICAgIF9faGR0b2EoZnBhcmcuZGJsLCB4ZGlncywgcHJlYywKKwkJCQkgICAgJmV4cHQsICZzaWduZmxhZywgJmR0b2FlbmQpOworCQkJCWlmIChkdG9hcmVzdWx0ID09IE5VTEwpIHsKKwkJCQkJZXJybm8gPSBFTk9NRU07CisJCQkJCWdvdG8gZXJyb3I7CisJCQkJfQorCQkJfQorCQkJaWYgKHByZWMgPCAwKQorCQkJCXByZWMgPSBkdG9hZW5kIC0gZHRvYXJlc3VsdDsKKwkJCWlmIChleHB0ID09IElOVF9NQVgpCisJCQkJb3hbMV0gPSAnXDAnOworCQkJaWYgKGNvbnZidWYpIHsKKwkJCQlmcmVlKGNvbnZidWYpOworCQkJCWNvbnZidWYgPSBOVUxMOworCQkJfQorCQkJY3AgPSBjb252YnVmID0gX19tYnNjb252KGR0b2FyZXN1bHQsIC0xKTsKKwkJCWlmIChjcCA9PSBOVUxMKQorCQkJCWdvdG8gZXJyb3I7CisJCQluZGlnID0gZHRvYWVuZCAtIGR0b2FyZXN1bHQ7CisJCQlnb3RvIGZwX2NvbW1vbjsKKwkJY2FzZSAnZSc6CisJCWNhc2UgJ0UnOgorCQkJZXhwY2hhciA9IGNoOworCQkJaWYgKHByZWMgPCAwKQkvKiBhY2NvdW50IGZvciBkaWdpdCBiZWZvcmUgZGVjcHQgKi8KKwkJCQlwcmVjID0gREVGUFJFQyArIDE7CisJCQllbHNlCisJCQkJcHJlYysrOworCQkJZ290byBmcF9iZWdpbjsKKwkJY2FzZSAnZic6CisJCWNhc2UgJ0YnOgorCQkJZXhwY2hhciA9ICdcMCc7CisJCQlnb3RvIGZwX2JlZ2luOworCQljYXNlICdnJzoKKwkJY2FzZSAnRyc6CisJCQlleHBjaGFyID0gY2ggLSAoJ2cnIC0gJ2UnKTsKKyAJCQlpZiAocHJlYyA9PSAwKQorIAkJCQlwcmVjID0gMTsKK2ZwX2JlZ2luOgorCQkJaWYgKHByZWMgPCAwKQorCQkJCXByZWMgPSBERUZQUkVDOworCQkJaWYgKGR0b2FyZXN1bHQpCisJCQkJX19mcmVlZHRvYShkdG9hcmVzdWx0KTsKKwkJCWlmIChmbGFncyAmIExPTkdEQkwpIHsKKwkJCQlmcGFyZy5sZGJsID0gR0VUQVJHKGxvbmcgZG91YmxlKTsKKwkJCQlkdG9hcmVzdWx0ID0KKwkJCQkgICAgX19sZHRvYSgmZnBhcmcubGRibCwgZXhwY2hhciA/IDIgOiAzLCBwcmVjLAorCQkJCSAgICAmZXhwdCwgJnNpZ25mbGFnLCAmZHRvYWVuZCk7CisJCQkJaWYgKGR0b2FyZXN1bHQgPT0gTlVMTCkgeworCQkJCQllcnJubyA9IEVOT01FTTsKKwkJCQkJZ290byBlcnJvcjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWZwYXJnLmRibCA9IEdFVEFSRyhkb3VibGUpOworCQkJCWR0b2FyZXN1bHQgPQorCQkJCSAgICBfX2R0b2EoZnBhcmcuZGJsLCBleHBjaGFyID8gMiA6IDMsIHByZWMsCisJCQkJICAgICZleHB0LCAmc2lnbmZsYWcsICZkdG9hZW5kKTsKKwkJCQlpZiAoZHRvYXJlc3VsdCA9PSBOVUxMKSB7CisJCQkJCWVycm5vID0gRU5PTUVNOworCQkJCQlnb3RvIGVycm9yOworCQkJCX0KKwkJCQlpZiAoZXhwdCA9PSA5OTk5KQorCQkJCQlleHB0ID0gSU5UX01BWDsKKyAJCQl9CisJCQlpZiAoY29udmJ1ZikgeworCQkJCWZyZWUoY29udmJ1Zik7CisJCQkJY29udmJ1ZiA9IE5VTEw7CisJCQl9CisJCQljcCA9IGNvbnZidWYgPSBfX21ic2NvbnYoZHRvYXJlc3VsdCwgLTEpOworCQkJaWYgKGNwID09IE5VTEwpCisJCQkJZ290byBlcnJvcjsKKwkJCW5kaWcgPSBkdG9hZW5kIC0gZHRvYXJlc3VsdDsKK2ZwX2NvbW1vbjoKKwkJCWlmIChzaWduZmxhZykKKwkJCQlzaWduID0gJy0nOworCQkJaWYgKGV4cHQgPT0gSU5UX01BWCkgewkvKiBpbmYgb3IgbmFuICovCisJCQkJaWYgKCpjcCA9PSAnTicpIHsKKwkJCQkJY3AgPSAoY2ggPj0gJ2EnKSA/IEwibmFuIiA6IEwiTkFOIjsKKwkJCQkJc2lnbiA9ICdcMCc7CisJCQkJfSBlbHNlCisJCQkJCWNwID0gKGNoID49ICdhJykgPyBMImluZiIgOiBMIklORiI7CisgCQkJCXNpemUgPSAzOworCQkJCWZsYWdzICY9IH5aRVJPUEFEOworIAkJCQlicmVhazsKKyAJCQl9CisJCQlmbGFncyB8PSBGUFQ7CisgCQkJaWYgKGNoID09ICdnJyB8fCBjaCA9PSAnRycpIHsKKwkJCQlpZiAoZXhwdCA+IC00ICYmIGV4cHQgPD0gcHJlYykgeworCQkJCQkvKiBNYWtlICVbZ0ddIHNtZWxsIGxpa2UgJVtmRl0gKi8KKwkJCQkJZXhwY2hhciA9ICdcMCc7CisJCQkJCWlmIChmbGFncyAmIEFMVCkKKwkJCQkJCXByZWMgLT0gZXhwdDsKKwkJCQkJZWxzZQorCQkJCQkJcHJlYyA9IG5kaWcgLSBleHB0OworCQkJCQlpZiAocHJlYyA8IDApCisJCQkJCQlwcmVjID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQkvKgorCQkJCQkgKiBNYWtlICVbZ0ddIHNtZWxsIGxpa2UgJVtlRV0sIGJ1dAorCQkJCQkgKiB0cmltIHRyYWlsaW5nIHplcm9lcyBpZiBubyAjIGZsYWcuCisJCQkJCSAqLworCQkJCQlpZiAoIShmbGFncyAmIEFMVCkpCisJCQkJCQlwcmVjID0gbmRpZzsKKwkJCQl9CisgCQkJfQorCQkJaWYgKGV4cGNoYXIpIHsKKwkJCQlleHBzaXplID0gZXhwb25lbnQoZXhwc3RyLCBleHB0IC0gMSwgZXhwY2hhcik7CisJCQkJc2l6ZSA9IGV4cHNpemUgKyBwcmVjOworCQkJCWlmIChwcmVjID4gMSB8fCBmbGFncyAmIEFMVCkKKyAJCQkJCSsrc2l6ZTsKKwkJCX0gZWxzZSB7CisJCQkJLyogc3BhY2UgZm9yIGRpZ2l0cyBiZWZvcmUgZGVjaW1hbCBwb2ludCAqLworCQkJCWlmIChleHB0ID4gMCkKKwkJCQkJc2l6ZSA9IGV4cHQ7CisJCQkJZWxzZQkvKiAiMCIgKi8KKwkJCQkJc2l6ZSA9IDE7CisJCQkJLyogc3BhY2UgZm9yIGRlY2ltYWwgcHQgYW5kIGZvbGxvd2luZyBkaWdpdHMgKi8KKwkJCQlpZiAocHJlYyB8fCBmbGFncyAmIEFMVCkKKwkJCQkJc2l6ZSArPSBwcmVjICsgMTsKKwkJCQlsZWFkID0gZXhwdDsKKwkJCX0KKwkJCWJyZWFrOworI2VuZGlmIC8qIEZMT0FUSU5HX1BPSU5UICovCisjaWZuZGVmIE5PX1BSSU5URl9QRVJDRU5UX04KKwkJY2FzZSAnbic6CisJCQlpZiAoZmxhZ3MgJiBMTE9OR0lOVCkKKwkJCQkqR0VUQVJHKGxvbmcgbG9uZyAqKSA9IHJldDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgTE9OR0lOVCkKKwkJCQkqR0VUQVJHKGxvbmcgKikgPSByZXQ7CisJCQllbHNlIGlmIChmbGFncyAmIFNIT1JUSU5UKQorCQkJCSpHRVRBUkcoc2hvcnQgKikgPSByZXQ7CisJCQllbHNlIGlmIChmbGFncyAmIENIQVJJTlQpCisJCQkJKkdFVEFSRyhzaWduZWQgY2hhciAqKSA9IHJldDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgUFRSSU5UKQorCQkJCSpHRVRBUkcocHRyZGlmZl90ICopID0gcmV0OworCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSVpFSU5UKQorCQkJCSpHRVRBUkcoc3NpemVfdCAqKSA9IHJldDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgTUFYSU5UKQorCQkJCSpHRVRBUkcoaW50bWF4X3QgKikgPSByZXQ7CisJCQllbHNlCisJCQkJKkdFVEFSRyhpbnQgKikgPSByZXQ7CisJCQljb250aW51ZTsJLyogbm8gb3V0cHV0ICovCisjZW5kaWYgLyogTk9fUFJJTlRGX1BFUkNFTlRfTiAqLworCQljYXNlICdPJzoKKwkJCWZsYWdzIHw9IExPTkdJTlQ7CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAnbyc6CisJCQlfdW1heCA9IFVBUkcoKTsKKwkJCWJhc2UgPSBPQ1Q7CisJCQlnb3RvIG5vc2lnbjsKKwkJY2FzZSAncCc6CisJCQkvKgorCQkJICogYGBUaGUgYXJndW1lbnQgc2hhbGwgYmUgYSBwb2ludGVyIHRvIHZvaWQuICBUaGUKKwkJCSAqIHZhbHVlIG9mIHRoZSBwb2ludGVyIGlzIGNvbnZlcnRlZCB0byBhIHNlcXVlbmNlCisJCQkgKiBvZiBwcmludGFibGUgY2hhcmFjdGVycywgaW4gYW4gaW1wbGVtZW50YXRpb24tCisJCQkgKiBkZWZpbmVkIG1hbm5lci4nJworCQkJICoJLS0gQU5TSSBYM0oxMQorCQkJICovCisJCQkvKiBOT1NUUklDVCAqLworCQkJX3VtYXggPSAodV9sb25nKUdFVEFSRyh2b2lkICopOworCQkJYmFzZSA9IEhFWDsKKwkJCXhkaWdzID0geGRpZ3NfbG93ZXI7CisJCQlveFsxXSA9ICd4JzsKKwkJCWdvdG8gbm9zaWduOworCQljYXNlICdTJzoKKwkJCWZsYWdzIHw9IExPTkdJTlQ7CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAncyc6CisJCQlpZiAoZmxhZ3MgJiBMT05HSU5UKSB7CisJCQkJaWYgKChjcCA9IEdFVEFSRyh3Y2hhcl90ICopKSA9PSBOVUxMKQorCQkJCQljcCA9IEwiKG51bGwpIjsKKwkJCX0gZWxzZSB7CisJCQkJY2hhciAqbWJzYXJnOworCQkJCWlmICgobWJzYXJnID0gR0VUQVJHKGNoYXIgKikpID09IE5VTEwpCisJCQkJCW1ic2FyZyA9ICIobnVsbCkiOworCQkJCWlmIChjb252YnVmKSB7CisJCQkJCWZyZWUoY29udmJ1Zik7CisJCQkJCWNvbnZidWYgPSBOVUxMOworCQkJCX0KKwkJCQljb252YnVmID0gX19tYnNjb252KG1ic2FyZywgcHJlYyk7CisJCQkJaWYgKGNvbnZidWYgPT0gTlVMTCkgeworCQkJCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwkJCQkJZ290byBlcnJvcjsKKwkJCQl9IGVsc2UKKwkJCQkJY3AgPSBjb252YnVmOworCQkJfQorCQkJaWYgKHByZWMgPj0gMCkgeworCQkJCS8qCisJCQkJICogY2FuJ3QgdXNlIHdjc2xlbjsgY2FuIG9ubHkgbG9vayBmb3IgdGhlCisJCQkJICogTlVMIGluIHRoZSBmaXJzdCBgcHJlYycgY2hhcmFjdGVycywgYW5kCisJCQkJICogd2NzbGVuKCkgd2lsbCBnbyBmdXJ0aGVyLgorCQkJCSAqLworCQkJCXdjaGFyX3QgKnAgPSB3bWVtY2hyKGNwLCAwLCBwcmVjKTsKKworCQkJCXNpemUgPSBwID8gKHAgLSBjcCkgOiBwcmVjOworCQkJfSBlbHNlIHsKKwkJCQlzaXplX3QgbGVuOworCisJCQkJaWYgKChsZW4gPSB3Y3NsZW4oY3ApKSA+IElOVF9NQVgpCisJCQkJCWdvdG8gb3ZlcmZsb3c7CisJCQkJc2l6ZSA9IChpbnQpbGVuOworCQkJfQorCQkJc2lnbiA9ICdcMCc7CisJCQlicmVhazsKKwkJY2FzZSAnVSc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ3UnOgorCQkJX3VtYXggPSBVQVJHKCk7CisJCQliYXNlID0gREVDOworCQkJZ290byBub3NpZ247CisJCWNhc2UgJ1gnOgorCQkJeGRpZ3MgPSB4ZGlnc191cHBlcjsKKwkJCWdvdG8gaGV4OworCQljYXNlICd4JzoKKwkJCXhkaWdzID0geGRpZ3NfbG93ZXI7CitoZXg6CQkJX3VtYXggPSBVQVJHKCk7CisJCQliYXNlID0gSEVYOworCQkJLyogbGVhZGluZyAweC9YIG9ubHkgaWYgbm9uLXplcm8gKi8KKwkJCWlmIChmbGFncyAmIEFMVCAmJiBfdW1heCAhPSAwKQorCQkJCW94WzFdID0gY2g7CisKKwkJCS8qIHVuc2lnbmVkIGNvbnZlcnNpb25zICovCitub3NpZ246CQkJc2lnbiA9ICdcMCc7CisJCQkvKgorCQkJICogYGAuLi4gZGlvdVh4IGNvbnZlcnNpb25zIC4uLiBpZiBhIHByZWNpc2lvbiBpcworCQkJICogc3BlY2lmaWVkLCB0aGUgMCBmbGFnIHdpbGwgYmUgaWdub3JlZC4nJworCQkJICoJLS0gQU5TSSBYM0oxMQorCQkJICovCitudW1iZXI6CQkJaWYgKChkcHJlYyA9IHByZWMpID49IDApCisJCQkJZmxhZ3MgJj0gflpFUk9QQUQ7CisKKwkJCS8qCisJCQkgKiBgYFRoZSByZXN1bHQgb2YgY29udmVydGluZyBhIHplcm8gdmFsdWUgd2l0aCBhbgorCQkJICogZXhwbGljaXQgcHJlY2lzaW9uIG9mIHplcm8gaXMgbm8gY2hhcmFjdGVycy4nJworCQkJICoJLS0gQU5TSSBYM0oxMQorCQkJICovCisJCQljcCA9IGJ1ZiArIEJVRjsKKwkJCWlmIChfdW1heCAhPSAwIHx8IHByZWMgIT0gMCkgeworCQkJCS8qCisJCQkJICogVW5zaWduZWQgbW9kIGlzIGhhcmQsIGFuZCB1bnNpZ25lZCBtb2QKKwkJCQkgKiBieSBhIGNvbnN0YW50IGlzIGVhc2llciB0aGFuIHRoYXQgYnkKKwkJCQkgKiBhIHZhcmlhYmxlOyBoZW5jZSB0aGlzIHN3aXRjaC4KKwkJCQkgKi8KKwkJCQlzd2l0Y2ggKGJhc2UpIHsKKwkJCQljYXNlIE9DVDoKKwkJCQkJZG8geworCQkJCQkJKi0tY3AgPSB0b19jaGFyKF91bWF4ICYgNyk7CisJCQkJCQlfdW1heCA+Pj0gMzsKKwkJCQkJfSB3aGlsZSAoX3VtYXgpOworCQkJCQkvKiBoYW5kbGUgb2N0YWwgbGVhZGluZyAwICovCisJCQkJCWlmIChmbGFncyAmIEFMVCAmJiAqY3AgIT0gJzAnKQorCQkJCQkJKi0tY3AgPSAnMCc7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBERUM6CisJCQkJCS8qIG1hbnkgbnVtYmVycyBhcmUgMSBkaWdpdCAqLworCQkJCQl3aGlsZSAoX3VtYXggPj0gMTApIHsKKwkJCQkJCSotLWNwID0gdG9fY2hhcihfdW1heCAlIDEwKTsKKwkJCQkJCV91bWF4IC89IDEwOworCQkJCQl9CisJCQkJCSotLWNwID0gdG9fY2hhcihfdW1heCk7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBIRVg6CisJCQkJCWRvIHsKKwkJCQkJCSotLWNwID0geGRpZ3NbX3VtYXggJiAxNV07CisJCQkJCQlfdW1heCA+Pj0gNDsKKwkJCQkJfSB3aGlsZSAoX3VtYXgpOworCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCWNwID0gTCJidWcgaW4gdmZ3cHJpbnRmOiBiYWQgYmFzZSI7CisJCQkJCXNpemUgPSB3Y3NsZW4oY3ApOworCQkJCQlnb3RvIHNraXBzaXplOworCQkJCX0KKwkJCX0KKwkJCXNpemUgPSBidWYgKyBCVUYgLSBjcDsKKwkJCWlmIChzaXplID4gQlVGKQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCQkJYWJvcnQoKTsKKwkJc2tpcHNpemU6CisJCQlicmVhazsKKwkJZGVmYXVsdDoJLyogIiU/IiBwcmludHMgPywgdW5sZXNzID8gaXMgTlVMICovCisJCQlpZiAoY2ggPT0gJ1wwJykKKwkJCQlnb3RvIGRvbmU7CisJCQkvKiBwcmV0ZW5kIGl0IHdhcyAlYyB3aXRoIGFyZ3VtZW50IGNoICovCisJCQljcCA9IGJ1ZjsKKwkJCSpjcCA9IGNoOworCQkJc2l6ZSA9IDE7CisJCQlzaWduID0gJ1wwJzsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogQWxsIHJlYXNvbmFibGUgZm9ybWF0cyB3aW5kIHVwIGhlcmUuICBBdCB0aGlzIHBvaW50LCBgY3AnCisJCSAqIHBvaW50cyB0byBhIHN0cmluZyB3aGljaCAoaWYgbm90IGZsYWdzJkxBREpVU1QpIHNob3VsZCBiZQorCQkgKiBwYWRkZWQgb3V0IHRvIGB3aWR0aCcgcGxhY2VzLiAgSWYgZmxhZ3MmWkVST1BBRCwgaXQgc2hvdWxkCisJCSAqIGZpcnN0IGJlIHByZWZpeGVkIGJ5IGFueSBzaWduIG9yIG90aGVyIHByZWZpeDsgb3RoZXJ3aXNlLAorCQkgKiBpdCBzaG91bGQgYmUgYmxhbmsgcGFkZGVkIGJlZm9yZSB0aGUgcHJlZml4IGlzIGVtaXR0ZWQuCisJCSAqIEFmdGVyIGFueSBsZWZ0LWhhbmQgcGFkZGluZyBhbmQgcHJlZml4aW5nLCBlbWl0IHplcm9lcworCQkgKiByZXF1aXJlZCBieSBhIGRlY2ltYWwgJVtkaW91eFhdIHByZWNpc2lvbiwgdGhlbiBwcmludCB0aGUKKwkJICogc3RyaW5nIHByb3BlciwgdGhlbiBlbWl0IHplcm9lcyByZXF1aXJlZCBieSBhbnkgbGVmdG92ZXIKKwkJICogZmxvYXRpbmcgcHJlY2lzaW9uOyBmaW5hbGx5LCBpZiBMQURKVVNULCBwYWQgd2l0aCBibGFua3MuCisJCSAqCisJCSAqIENvbXB1dGUgYWN0dWFsIHNpemUsIHNvIHdlIGtub3cgaG93IG11Y2ggdG8gcGFkLgorCQkgKiBzaXplIGV4Y2x1ZGVzIGRlY2ltYWwgcHJlYzsgcmVhbHN6IGluY2x1ZGVzIGl0LgorCQkgKi8KKwkJcmVhbHN6ID0gZHByZWMgPiBzaXplID8gZHByZWMgOiBzaXplOworCQlpZiAoc2lnbikKKwkJCXJlYWxzeisrOworCQlpZiAob3hbMV0pCisJCQlyZWFsc3orPSAyOworCisJCS8qIHJpZ2h0LWFkanVzdGluZyBibGFuayBwYWRkaW5nICovCisJCWlmICgoZmxhZ3MgJiAoTEFESlVTVHxaRVJPUEFEKSkgPT0gMCkKKwkJCVBBRCh3aWR0aCAtIHJlYWxzeiwgYmxhbmtzKTsKKworCQkvKiBwcmVmaXggKi8KKwkJaWYgKHNpZ24pCisJCQlQUklOVCgmc2lnbiwgMSk7CisJCWlmIChveFsxXSkgewkvKiBveFsxXSBpcyBlaXRoZXIgeCwgWCwgb3IgXDAgKi8KKwkJCW94WzBdID0gJzAnOworCQkJUFJJTlQob3gsIDIpOworCQl9CisKKwkJLyogcmlnaHQtYWRqdXN0aW5nIHplcm8gcGFkZGluZyAqLworCQlpZiAoKGZsYWdzICYgKExBREpVU1R8WkVST1BBRCkpID09IFpFUk9QQUQpCisJCQlQQUQod2lkdGggLSByZWFsc3osIHplcm9lcyk7CisKKwkJLyogbGVhZGluZyB6ZXJvZXMgZnJvbSBkZWNpbWFsIHByZWNpc2lvbiAqLworCQlQQUQoZHByZWMgLSBzaXplLCB6ZXJvZXMpOworCisJCS8qIHRoZSBzdHJpbmcgb3IgbnVtYmVyIHByb3BlciAqLworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJCWlmICgoZmxhZ3MgJiBGUFQpID09IDApIHsKKwkJCVBSSU5UKGNwLCBzaXplKTsKKwkJfSBlbHNlIHsJLyogZ2x1ZSB0b2dldGhlciBmX3AgZnJhZ21lbnRzICovCisJCQlpZiAoZGVjaW1hbF9wb2ludCA9PSBOVUxMKQorCQkJCWRlY2ltYWxfcG9pbnQgPSBubF9sYW5naW5mbyhSQURJWENIQVIpOworCQkJaWYgKCFleHBjaGFyKSB7CS8qICVbZkZdIG9yIHN1ZmZpY2llbnRseSBzaG9ydCAlW2dHXSAqLworCQkJCWlmIChleHB0IDw9IDApIHsKKwkJCQkJUFJJTlQoemVyb2VzLCAxKTsKKwkJCQkJaWYgKHByZWMgfHwgZmxhZ3MgJiBBTFQpCisJCQkJCQlQUklOVChkZWNpbWFsX3BvaW50LCAxKTsKKwkJCQkJUEFEKC1leHB0LCB6ZXJvZXMpOworCQkJCQkvKiBhbHJlYWR5IGhhbmRsZWQgaW5pdGlhbCAwJ3MgKi8KKwkJCQkJcHJlYyArPSBleHB0OworIAkJCQl9IGVsc2UgeworCQkJCQlQUklOVEFORFBBRChjcCwgY29udmJ1ZiArIG5kaWcsCisJCQkJCSAgICBsZWFkLCB6ZXJvZXMpOworCQkJCQljcCArPSBsZWFkOworCQkJCQlpZiAocHJlYyB8fCBmbGFncyAmIEFMVCkKKwkJCQkJCVBSSU5UKGRlY2ltYWxfcG9pbnQsIDEpOworCQkJCX0KKwkJCQlQUklOVEFORFBBRChjcCwgY29udmJ1ZiArIG5kaWcsIHByZWMsIHplcm9lcyk7CisJCQl9IGVsc2UgewkvKiAlW2VFXSBvciBzdWZmaWNpZW50bHkgbG9uZyAlW2dHXSAqLworCQkJCWlmIChwcmVjID4gMSB8fCBmbGFncyAmIEFMVCkgeworCQkJCQlidWZbMF0gPSAqY3ArKzsKKwkJCQkJYnVmWzFdID0gKmRlY2ltYWxfcG9pbnQ7CisJCQkJCVBSSU5UKGJ1ZiwgMik7CisJCQkJCVBSSU5UKGNwLCBuZGlnLTEpOworCQkJCQlQQUQocHJlYyAtIG5kaWcsIHplcm9lcyk7CisJCQkJfSBlbHNlIHsgLyogWGVZWVkgKi8KKwkJCQkJUFJJTlQoY3AsIDEpOworCQkJCX0KKwkJCQlQUklOVChleHBzdHIsIGV4cHNpemUpOworCQkJfQorCQl9CisjZWxzZQorCQlQUklOVChjcCwgc2l6ZSk7CisjZW5kaWYKKwkJLyogbGVmdC1hZGp1c3RpbmcgcGFkZGluZyAoYWx3YXlzIGJsYW5rKSAqLworCQlpZiAoZmxhZ3MgJiBMQURKVVNUKQorCQkJUEFEKHdpZHRoIC0gcmVhbHN6LCBibGFua3MpOworCisJCS8qIGZpbmFsbHksIGFkanVzdCByZXQgKi8KKwkJaWYgKHdpZHRoIDwgcmVhbHN6KQorCQkJd2lkdGggPSByZWFsc3o7CisJCWlmICh3aWR0aCA+IElOVF9NQVggLSByZXQpCisJCQlnb3RvIG92ZXJmbG93OworCQlyZXQgKz0gd2lkdGg7CisJfQorZG9uZToKK2Vycm9yOgorCXZhX2VuZChvcmdhcCk7CisJaWYgKF9fc2ZlcnJvcihmcCkpCisJCXJldCA9IC0xOworCWdvdG8gZmluaXNoOworCitvdmVyZmxvdzoKKwllcnJubyA9IEVOT01FTTsKKwlyZXQgPSAtMTsKKworZmluaXNoOgorCWlmIChjb252YnVmKQorCQlmcmVlKGNvbnZidWYpOworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJaWYgKGR0b2FyZXN1bHQpCisJCV9fZnJlZWR0b2EoZHRvYXJlc3VsdCk7CisjZW5kaWYKKwlpZiAoYXJndGFibGUgIT0gTlVMTCAmJiBhcmd0YWJsZSAhPSBzdGF0YXJndGFibGUpIHsKKwkJbXVubWFwKGFyZ3RhYmxlLCBhcmd0YWJsZXNpeik7CisJCWFyZ3RhYmxlID0gTlVMTDsKKwl9CisJcmV0dXJuIChyZXQpOworfQorCitpbnQKK3Zmd3ByaW50ZihGSUxFICogX19yZXN0cmljdCBmcCwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgZm10MCwgX192YV9saXN0IGFwKQoreworCWludCByOworCisJRkxPQ0tGSUxFKGZwKTsKKwlyID0gX192ZndwcmludGYoZnAsIGZtdDAsIGFwKTsKKwlGVU5MT0NLRklMRShmcCk7CisKKwlyZXR1cm4gKHIpOworfQorCisvKgorICogVHlwZSBpZHMgZm9yIGFyZ3VtZW50IHR5cGUgdGFibGUuCisgKi8KKyNkZWZpbmUgVF9VTlVTRUQJMAorI2RlZmluZSBUX1NIT1JUCQkxCisjZGVmaW5lIFRfVV9TSE9SVAkyCisjZGVmaW5lIFRQX1NIT1JUCTMKKyNkZWZpbmUgVF9JTlQJCTQKKyNkZWZpbmUgVF9VX0lOVAkJNQorI2RlZmluZSBUUF9JTlQJCTYKKyNkZWZpbmUgVF9MT05HCQk3CisjZGVmaW5lIFRfVV9MT05HCTgKKyNkZWZpbmUgVFBfTE9ORwkJOQorI2RlZmluZSBUX0xMT05HCQkxMAorI2RlZmluZSBUX1VfTExPTkcJMTEKKyNkZWZpbmUgVFBfTExPTkcJMTIKKyNkZWZpbmUgVF9ET1VCTEUJMTMKKyNkZWZpbmUgVF9MT05HX0RPVUJMRQkxNAorI2RlZmluZSBUUF9DSEFSCQkxNQorI2RlZmluZSBUUF9WT0lECQkxNgorI2RlZmluZSBUX1BUUklOVAkxNworI2RlZmluZSBUUF9QVFJJTlQJMTgKKyNkZWZpbmUgVF9TSVpFSU5UCTE5CisjZGVmaW5lIFRfU1NJWkVJTlQJMjAKKyNkZWZpbmUgVFBfU1NJWkVJTlQJMjEKKyNkZWZpbmUgVF9NQVhJTlQJMjIKKyNkZWZpbmUgVF9NQVhVSU5UCTIzCisjZGVmaW5lIFRQX01BWElOVAkyNAorI2RlZmluZSBUX0NIQVIJCTI1CisjZGVmaW5lIFRfVV9DSEFSCTI2CisjZGVmaW5lIFRfV0lOVAkJMjcKKyNkZWZpbmUgVFBfV0NIQVIJMjgKKworLyoKKyAqIEZpbmQgYWxsIGFyZ3VtZW50cyB3aGVuIGEgcG9zaXRpb25hbCBwYXJhbWV0ZXIgaXMgZW5jb3VudGVyZWQuICBSZXR1cm5zIGEKKyAqIHRhYmxlLCBpbmRleGVkIGJ5IGFyZ3VtZW50IG51bWJlciwgb2YgcG9pbnRlcnMgdG8gZWFjaCBhcmd1bWVudHMuICBUaGUKKyAqIGluaXRpYWwgYXJndW1lbnQgdGFibGUgc2hvdWxkIGJlIGFuIGFycmF5IG9mIFNUQVRJQ19BUkdfVEJMX1NJWkUgZW50cmllcy4KKyAqIEl0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIG1tYXAtZWQgb25lIGlmIGl0IG92ZXJmbG93cyAobWFsbG9jIGNhbm5vdCBiZQorICogdXNlZCBzaW5jZSB3ZSBhcmUgYXR0ZW1wdGluZyB0byBtYWtlIHNucHJpbnRmIHRocmVhZCBzYWZlLCBhbmQgYWxsb2NhIGlzCisgKiBwcm9ibGVtYXRpYyBzaW5jZSB3ZSBoYXZlIG5lc3RlZCBmdW5jdGlvbnMuLikKKyAqLworc3RhdGljIGludAorX19maW5kX2FyZ3VtZW50cyhjb25zdCB3Y2hhcl90ICpmbXQwLCB2YV9saXN0IGFwLCB1bmlvbiBhcmcgKiphcmd0YWJsZSwKKyAgICBzaXplX3QgKmFyZ3RhYmxlc2l6KQoreworCXdjaGFyX3QgKmZtdDsJCS8qIGZvcm1hdCBzdHJpbmcgKi8KKwlpbnQgY2g7CQkJLyogY2hhcmFjdGVyIGZyb20gZm10ICovCisJaW50IG4sIG4yOwkJLyogaGFuZHkgaW50ZWdlciAoc2hvcnQgdGVybSB1c2FnZSkgKi8KKwl3Y2hhcl90ICpjcDsJCS8qIGhhbmR5IGNoYXIgcG9pbnRlciAoc2hvcnQgdGVybSB1c2FnZSkgKi8KKwlpbnQgZmxhZ3M7CQkvKiBmbGFncyBhcyBhYm92ZSAqLworCXVuc2lnbmVkIGNoYXIgKnR5cGV0YWJsZTsgLyogdGFibGUgb2YgdHlwZXMgKi8KKwl1bnNpZ25lZCBjaGFyIHN0YXR0eXBldGFibGVbU1RBVElDX0FSR19UQkxfU0laRV07CisJaW50IHRhYmxlc2l6ZTsJCS8qIGN1cnJlbnQgc2l6ZSBvZiB0eXBlIHRhYmxlICovCisJaW50IHRhYmxlbWF4OwkJLyogbGFyZ2VzdCB1c2VkIGluZGV4IGluIHRhYmxlICovCisJaW50IG5leHRhcmc7CQkvKiAxLWJhc2VkIGFyZ3VtZW50IGluZGV4ICovCisJaW50IHJldCA9IDA7CQkvKiByZXR1cm4gdmFsdWUgKi8KKworCS8qCisJICogQWRkIGFuIGFyZ3VtZW50IHR5cGUgdG8gdGhlIHRhYmxlLCBleHBhbmRpbmcgaWYgbmVjZXNzYXJ5LgorCSAqLworI2RlZmluZSBBRERUWVBFKHR5cGUpIFwKKwkoKG5leHRhcmcgPj0gdGFibGVzaXplKSA/IFwKKwkJX19ncm93X3R5cGVfdGFibGUoJnR5cGV0YWJsZSwgJnRhYmxlc2l6ZSkgOiAwLCBcCisJKG5leHRhcmcgPiB0YWJsZW1heCkgPyB0YWJsZW1heCA9IG5leHRhcmcgOiAwLCBcCisJdHlwZXRhYmxlW25leHRhcmcrK10gPSB0eXBlKQorCisjZGVmaW5lCUFERFNBUkcoKSBcCisgICAgICAgICgoZmxhZ3MmTUFYSU5UKSA/IEFERFRZUEUoVF9NQVhJTlQpIDogXAorCSAgICAoKGZsYWdzJlBUUklOVCkgPyBBRERUWVBFKFRfUFRSSU5UKSA6IFwKKwkgICAgKChmbGFncyZTSVpFSU5UKSA/IEFERFRZUEUoVF9TU0laRUlOVCkgOiBcCisJICAgICgoZmxhZ3MmTExPTkdJTlQpID8gQUREVFlQRShUX0xMT05HKSA6IFwKKwkgICAgKChmbGFncyZMT05HSU5UKSA/IEFERFRZUEUoVF9MT05HKSA6IFwKKwkgICAgKChmbGFncyZTSE9SVElOVCkgPyBBRERUWVBFKFRfU0hPUlQpIDogXAorCSAgICAoKGZsYWdzJkNIQVJJTlQpID8gQUREVFlQRShUX0NIQVIpIDogQUREVFlQRShUX0lOVCkpKSkpKSkpCisKKyNkZWZpbmUJQUREVUFSRygpIFwKKyAgICAgICAgKChmbGFncyZNQVhJTlQpID8gQUREVFlQRShUX01BWFVJTlQpIDogXAorCSAgICAoKGZsYWdzJlBUUklOVCkgPyBBRERUWVBFKFRfUFRSSU5UKSA6IFwKKwkgICAgKChmbGFncyZTSVpFSU5UKSA/IEFERFRZUEUoVF9TSVpFSU5UKSA6IFwKKwkgICAgKChmbGFncyZMTE9OR0lOVCkgPyBBRERUWVBFKFRfVV9MTE9ORykgOiBcCisJICAgICgoZmxhZ3MmTE9OR0lOVCkgPyBBRERUWVBFKFRfVV9MT05HKSA6IFwKKwkgICAgKChmbGFncyZTSE9SVElOVCkgPyBBRERUWVBFKFRfVV9TSE9SVCkgOiBcCisJICAgICgoZmxhZ3MmQ0hBUklOVCkgPyBBRERUWVBFKFRfVV9DSEFSKSA6IEFERFRZUEUoVF9VX0lOVCkpKSkpKSkpCisKKwkvKgorCSAqIEFkZCAqIGFyZ3VtZW50cyB0byB0aGUgdHlwZSBhcnJheS4KKwkgKi8KKyNkZWZpbmUgQUREQVNURVIoKSBcCisJbjIgPSAwOyBcCisJY3AgPSBmbXQ7IFwKKwl3aGlsZSAoaXNfZGlnaXQoKmNwKSkgeyBcCisJCUFQUEVORF9ESUdJVChuMiwgKmNwKTsgXAorCQljcCsrOyBcCisJfSBcCisJaWYgKCpjcCA9PSAnJCcpIHsgXAorCQlpbnQgaG9sZCA9IG5leHRhcmc7IFwKKwkJbmV4dGFyZyA9IG4yOyBcCisJCUFERFRZUEUoVF9JTlQpOyBcCisJCW5leHRhcmcgPSBob2xkOyBcCisJCWZtdCA9ICsrY3A7IFwKKwl9IGVsc2UgeyBcCisJCUFERFRZUEUoVF9JTlQpOyBcCisJfQorCWZtdCA9ICh3Y2hhcl90ICopZm10MDsKKwl0eXBldGFibGUgPSBzdGF0dHlwZXRhYmxlOworCXRhYmxlc2l6ZSA9IFNUQVRJQ19BUkdfVEJMX1NJWkU7CisJdGFibGVtYXggPSAwOworCW5leHRhcmcgPSAxOworCW1lbXNldCh0eXBldGFibGUsIFRfVU5VU0VELCBTVEFUSUNfQVJHX1RCTF9TSVpFKTsKKworCS8qCisJICogU2NhbiB0aGUgZm9ybWF0IGZvciBjb252ZXJzaW9ucyAoYCUnIGNoYXJhY3RlcikuCisJICovCisJZm9yICg7OykgeworCQlmb3IgKGNwID0gZm10OyAoY2ggPSAqZm10KSAhPSAnXDAnICYmIGNoICE9ICclJzsgZm10KyspCisJCQljb250aW51ZTsKKwkJaWYgKGNoID09ICdcMCcpCisJCQlnb3RvIGRvbmU7CisJCWZtdCsrOwkJLyogc2tpcCBvdmVyICclJyAqLworCisJCWZsYWdzID0gMDsKKworcmZsYWc6CQljaCA9ICpmbXQrKzsKK3Jlc3dpdGNoOglzd2l0Y2ggKGNoKSB7CisJCWNhc2UgJyAnOgorCQljYXNlICcjJzoKKwkJY2FzZSAnXCcnOgorCQkJZ290byByZmxhZzsKKwkJY2FzZSAnKic6CisJCQlBRERBU1RFUigpOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnLSc6CisJCWNhc2UgJysnOgorCQkJZ290byByZmxhZzsKKwkJY2FzZSAnLic6CisJCQlpZiAoKGNoID0gKmZtdCsrKSA9PSAnKicpIHsKKwkJCQlBRERBU1RFUigpOworCQkJCWdvdG8gcmZsYWc7CisJCQl9CisJCQl3aGlsZSAoaXNfZGlnaXQoY2gpKSB7CisJCQkJY2ggPSAqZm10Kys7CisJCQl9CisJCQlnb3RvIHJlc3dpdGNoOworCQljYXNlICcwJzoKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorCQljYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisJCQluID0gMDsKKwkJCWRvIHsKKwkJCQlBUFBFTkRfRElHSVQobiAsY2gpOworCQkJCWNoID0gKmZtdCsrOworCQkJfSB3aGlsZSAoaXNfZGlnaXQoY2gpKTsKKwkJCWlmIChjaCA9PSAnJCcpIHsKKwkJCQluZXh0YXJnID0gbjsKKwkJCQlnb3RvIHJmbGFnOworCQkJfQorCQkJZ290byByZXN3aXRjaDsKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCQljYXNlICdMJzoKKwkJCWZsYWdzIHw9IExPTkdEQkw7CisJCQlnb3RvIHJmbGFnOworI2VuZGlmCisJCWNhc2UgJ2gnOgorCQkJaWYgKCpmbXQgPT0gJ2gnKSB7CisJCQkJZm10Kys7CisJCQkJZmxhZ3MgfD0gQ0hBUklOVDsKKwkJCX0gZWxzZSB7CisJCQkJZmxhZ3MgfD0gU0hPUlRJTlQ7CisJCQl9CisJCQlnb3RvIHJmbGFnOworCQljYXNlICdsJzoKKwkJCWlmICgqZm10ID09ICdsJykgeworCQkJCWZtdCsrOworCQkJCWZsYWdzIHw9IExMT05HSU5UOworCQkJfSBlbHNlIHsKKwkJCQlmbGFncyB8PSBMT05HSU5UOworCQkJfQorCQkJZ290byByZmxhZzsKKwkJY2FzZSAncSc6CisJCQlmbGFncyB8PSBMTE9OR0lOVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ3QnOgorCQkJZmxhZ3MgfD0gUFRSSU5UOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAneic6CisJCQlmbGFncyB8PSBTSVpFSU5UOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnQyc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ2MnOgorCQkJaWYgKGZsYWdzICYgTE9OR0lOVCkKKwkJCQlBRERUWVBFKFRfV0lOVCk7CisJCQllbHNlCisJCQkJQUREVFlQRShUX0lOVCk7CisJCQlicmVhazsKKwkJY2FzZSAnRCc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ2QnOgorCQljYXNlICdpJzoKKwkJCUFERFNBUkcoKTsKKwkJCWJyZWFrOworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJCWNhc2UgJ2EnOgorCQljYXNlICdBJzoKKwkJY2FzZSAnZSc6CisJCWNhc2UgJ0UnOgorCQljYXNlICdmJzoKKwkJY2FzZSAnRic6CisJCWNhc2UgJ2cnOgorCQljYXNlICdHJzoKKwkJCWlmIChmbGFncyAmIExPTkdEQkwpCisJCQkJQUREVFlQRShUX0xPTkdfRE9VQkxFKTsKKwkJCWVsc2UKKwkJCQlBRERUWVBFKFRfRE9VQkxFKTsKKwkJCWJyZWFrOworI2VuZGlmIC8qIEZMT0FUSU5HX1BPSU5UICovCisjaWZuZGVmIE5PX1BSSU5URl9QRVJDRU5UX04KKwkJY2FzZSAnbic6CisJCQlpZiAoZmxhZ3MgJiBMTE9OR0lOVCkKKwkJCQlBRERUWVBFKFRQX0xMT05HKTsKKwkJCWVsc2UgaWYgKGZsYWdzICYgTE9OR0lOVCkKKwkJCQlBRERUWVBFKFRQX0xPTkcpOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVElOVCkKKwkJCQlBRERUWVBFKFRQX1NIT1JUKTsKKwkJCWVsc2UgaWYgKGZsYWdzICYgUFRSSU5UKQorCQkJCUFERFRZUEUoVFBfUFRSSU5UKTsKKwkJCWVsc2UgaWYgKGZsYWdzICYgU0laRUlOVCkKKwkJCQlBRERUWVBFKFRQX1NTSVpFSU5UKTsKKwkJCWVsc2UgaWYgKGZsYWdzICYgTUFYSU5UKQorCQkJCUFERFRZUEUoVFBfTUFYSU5UKTsKKwkJCWVsc2UKKwkJCQlBRERUWVBFKFRQX0lOVCk7CisJCQljb250aW51ZTsJLyogbm8gb3V0cHV0ICovCisjZW5kaWYgLyogTk9fUFJJTlRGX1BFUkNFTlRfTiAqLworCQljYXNlICdPJzoKKwkJCWZsYWdzIHw9IExPTkdJTlQ7CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAnbyc6CisJCQlBRERVQVJHKCk7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQlBRERUWVBFKFRQX1ZPSUQpOworCQkJYnJlYWs7CisJCWNhc2UgJ1MnOgorCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCS8qRkFMTFRIUk9VR0gqLworCQljYXNlICdzJzoKKwkJCWlmIChmbGFncyAmIExPTkdJTlQpCisJCQkJQUREVFlQRShUUF9DSEFSKTsKKwkJCWVsc2UKKwkJCQlBRERUWVBFKFRQX1dDSEFSKTsKKwkJCWJyZWFrOworCQljYXNlICdVJzoKKwkJCWZsYWdzIHw9IExPTkdJTlQ7CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAndSc6CisJCWNhc2UgJ1gnOgorCQljYXNlICd4JzoKKwkJCUFERFVBUkcoKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgkvKiAiJT8iIHByaW50cyA/LCB1bmxlc3MgPyBpcyBOVUwgKi8KKwkJCWlmIChjaCA9PSAnXDAnKQorCQkJCWdvdG8gZG9uZTsKKwkJCWJyZWFrOworCQl9CisJfQorZG9uZToKKwkvKgorCSAqIEJ1aWxkIHRoZSBhcmd1bWVudCB0YWJsZS4KKwkgKi8KKwlpZiAodGFibGVtYXggPj0gU1RBVElDX0FSR19UQkxfU0laRSkgeworCQkqYXJndGFibGVzaXogPSBzaXplb2YodW5pb24gYXJnKSAqICh0YWJsZW1heCArIDEpOworCQkqYXJndGFibGUgPSBtbWFwKE5VTEwsICphcmd0YWJsZXNpeiwKKwkJICAgIFBST1RfV1JJVEV8UFJPVF9SRUFELCBNQVBfQU5PTnxNQVBfUFJJVkFURSwgLTEsIDApOworCQlpZiAoKmFyZ3RhYmxlID09IE1BUF9GQUlMRUQpCisJCQlyZXR1cm4gKC0xKTsKKwl9CisKKyNpZiAwCisJLyogWFhYIGlzIHRoaXMgcmVxdWlyZWQ/ICovCisJKCphcmd0YWJsZSlbMF0uaW50YXJnID0gMDsKKyNlbmRpZgorCWZvciAobiA9IDE7IG4gPD0gdGFibGVtYXg7IG4rKykgeworCQlzd2l0Y2ggKHR5cGV0YWJsZVtuXSkgeworCQljYXNlIFRfVU5VU0VEOgorCQljYXNlIFRfQ0hBUjoKKwkJY2FzZSBUX1VfQ0hBUjoKKwkJY2FzZSBUX1NIT1JUOgorCQljYXNlIFRfVV9TSE9SVDoKKwkJY2FzZSBUX0lOVDoKKwkJCSgqYXJndGFibGUpW25dLmludGFyZyA9IHZhX2FyZyhhcCwgaW50KTsKKwkJCWJyZWFrOworCQljYXNlIFRQX1NIT1JUOgorCQkJKCphcmd0YWJsZSlbbl0ucHNob3J0YXJnID0gdmFfYXJnKGFwLCBzaG9ydCAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRfVV9JTlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS51aW50YXJnID0gdmFfYXJnKGFwLCB1bnNpZ25lZCBpbnQpOworCQkJYnJlYWs7CisJCWNhc2UgVFBfSU5UOgorCQkJKCphcmd0YWJsZSlbbl0ucGludGFyZyA9IHZhX2FyZyhhcCwgaW50ICopOworCQkJYnJlYWs7CisJCWNhc2UgVF9MT05HOgorCQkJKCphcmd0YWJsZSlbbl0ubG9uZ2FyZyA9IHZhX2FyZyhhcCwgbG9uZyk7CisJCQlicmVhazsKKwkJY2FzZSBUX1VfTE9ORzoKKwkJCSgqYXJndGFibGUpW25dLnVsb25nYXJnID0gdmFfYXJnKGFwLCB1bnNpZ25lZCBsb25nKTsKKwkJCWJyZWFrOworCQljYXNlIFRQX0xPTkc6CisJCQkoKmFyZ3RhYmxlKVtuXS5wbG9uZ2FyZyA9IHZhX2FyZyhhcCwgbG9uZyAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRfTExPTkc6CisJCQkoKmFyZ3RhYmxlKVtuXS5sb25nbG9uZ2FyZyA9IHZhX2FyZyhhcCwgbG9uZyBsb25nKTsKKwkJCWJyZWFrOworCQljYXNlIFRfVV9MTE9ORzoKKwkJCSgqYXJndGFibGUpW25dLnVsb25nbG9uZ2FyZyA9IHZhX2FyZyhhcCwgdW5zaWduZWQgbG9uZyBsb25nKTsKKwkJCWJyZWFrOworCQljYXNlIFRQX0xMT05HOgorCQkJKCphcmd0YWJsZSlbbl0ucGxvbmdsb25nYXJnID0gdmFfYXJnKGFwLCBsb25nIGxvbmcgKik7CisJCQlicmVhazsKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCQljYXNlIFRfRE9VQkxFOgorCQkJKCphcmd0YWJsZSlbbl0uZG91YmxlYXJnID0gdmFfYXJnKGFwLCBkb3VibGUpOworCQkJYnJlYWs7CisJCWNhc2UgVF9MT05HX0RPVUJMRToKKwkJCSgqYXJndGFibGUpW25dLmxvbmdkb3VibGVhcmcgPSB2YV9hcmcoYXAsIGxvbmcgZG91YmxlKTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWNhc2UgVFBfQ0hBUjoKKwkJCSgqYXJndGFibGUpW25dLnBjaGFyYXJnID0gdmFfYXJnKGFwLCBjaGFyICopOworCQkJYnJlYWs7CisJCWNhc2UgVFBfVk9JRDoKKwkJCSgqYXJndGFibGUpW25dLnB2b2lkYXJnID0gdmFfYXJnKGFwLCB2b2lkICopOworCQkJYnJlYWs7CisJCWNhc2UgVF9QVFJJTlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS5wdHJkaWZmYXJnID0gdmFfYXJnKGFwLCBwdHJkaWZmX3QpOworCQkJYnJlYWs7CisJCWNhc2UgVFBfUFRSSU5UOgorCQkJKCphcmd0YWJsZSlbbl0ucHB0cmRpZmZhcmcgPSB2YV9hcmcoYXAsIHB0cmRpZmZfdCAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRfU0laRUlOVDoKKwkJCSgqYXJndGFibGUpW25dLnNpemVhcmcgPSB2YV9hcmcoYXAsIHNpemVfdCk7CisJCQlicmVhazsKKwkJY2FzZSBUX1NTSVpFSU5UOgorCQkJKCphcmd0YWJsZSlbbl0uc3NpemVhcmcgPSB2YV9hcmcoYXAsIHNzaXplX3QpOworCQkJYnJlYWs7CisJCWNhc2UgVFBfU1NJWkVJTlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS5wc3NpemVhcmcgPSB2YV9hcmcoYXAsIHNzaXplX3QgKik7CisJCQlicmVhazsKKwkJY2FzZSBUUF9NQVhJTlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS5pbnRtYXhhcmcgPSB2YV9hcmcoYXAsIGludG1heF90KTsKKwkJCWJyZWFrOworCQljYXNlIFRfV0lOVDoKKwkJCSgqYXJndGFibGUpW25dLndpbnRhcmcgPSB2YV9hcmcoYXAsIHdpbnRfdCk7CisJCQlicmVhazsKKwkJY2FzZSBUUF9XQ0hBUjoKKwkJCSgqYXJndGFibGUpW25dLnB3Y2hhcmFyZyA9IHZhX2FyZyhhcCwgd2NoYXJfdCAqKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWdvdG8gZmluaXNoOworCitvdmVyZmxvdzoKKwllcnJubyA9IEVOT01FTTsKKwlyZXQgPSAtMTsKKworZmluaXNoOgorCWlmICh0eXBldGFibGUgIT0gTlVMTCAmJiB0eXBldGFibGUgIT0gc3RhdHR5cGV0YWJsZSkgeworCQltdW5tYXAodHlwZXRhYmxlLCAqYXJndGFibGVzaXopOworCQl0eXBldGFibGUgPSBOVUxMOworCX0KKwlyZXR1cm4gKHJldCk7Cit9CisKKy8qCisgKiBJbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgdHlwZSB0YWJsZS4KKyAqLworc3RhdGljIGludAorX19ncm93X3R5cGVfdGFibGUodW5zaWduZWQgY2hhciAqKnR5cGV0YWJsZSwgaW50ICp0YWJsZXNpemUpCit7CisJdW5zaWduZWQgY2hhciAqb2xkdGFibGUgPSAqdHlwZXRhYmxlOworCWludCBuZXdzaXplID0gKnRhYmxlc2l6ZSAqIDI7CisKKwlpZiAobmV3c2l6ZSA8IGdldHBhZ2VzaXplKCkpCisJCW5ld3NpemUgPSBnZXRwYWdlc2l6ZSgpOworCisJaWYgKCp0YWJsZXNpemUgPT0gU1RBVElDX0FSR19UQkxfU0laRSkgeworCQkqdHlwZXRhYmxlID0gbW1hcChOVUxMLCBuZXdzaXplLCBQUk9UX1dSSVRFfFBST1RfUkVBRCwKKwkJICAgIE1BUF9BTk9OfE1BUF9QUklWQVRFLCAtMSwgMCk7CisJCWlmICgqdHlwZXRhYmxlID09IE1BUF9GQUlMRUQpCisJCQlyZXR1cm4gKC0xKTsKKwkJYmNvcHkob2xkdGFibGUsICp0eXBldGFibGUsICp0YWJsZXNpemUpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGNoYXIgKm5ldyA9IG1tYXAoTlVMTCwgbmV3c2l6ZSwgUFJPVF9XUklURXxQUk9UX1JFQUQsCisJCSAgICBNQVBfQU5PTnxNQVBfUFJJVkFURSwgLTEsIDApOworCQlpZiAobmV3ID09IE1BUF9GQUlMRUQpCisJCQlyZXR1cm4gKC0xKTsKKwkJbWVtbW92ZShuZXcsICp0eXBldGFibGUsICp0YWJsZXNpemUpOworCQltdW5tYXAoKnR5cGV0YWJsZSwgKnRhYmxlc2l6ZSk7CisJCSp0eXBldGFibGUgPSBuZXc7CisJfQorCW1lbXNldCgqdHlwZXRhYmxlICsgKnRhYmxlc2l6ZSwgVF9VTlVTRUQsIChuZXdzaXplIC0gKnRhYmxlc2l6ZSkpOworCisJKnRhYmxlc2l6ZSA9IG5ld3NpemU7CisJcmV0dXJuICgwKTsKK30KKworIAorI2lmZGVmIEZMT0FUSU5HX1BPSU5UCitzdGF0aWMgaW50CitleHBvbmVudCh3Y2hhcl90ICpwMCwgaW50IGV4cCwgaW50IGZtdGNoKQoreworCXdjaGFyX3QgKnAsICp0OworCXdjaGFyX3QgZXhwYnVmW01BWEVYUERJR107CisKKwlwID0gcDA7CisJKnArKyA9IGZtdGNoOworCWlmIChleHAgPCAwKSB7CisJCWV4cCA9IC1leHA7CisJCSpwKysgPSAnLSc7CisJfSBlbHNlCisJCSpwKysgPSAnKyc7CisJdCA9IGV4cGJ1ZiArIE1BWEVYUERJRzsKKwlpZiAoZXhwID4gOSkgeworCQlkbyB7CisJCQkqLS10ID0gdG9fY2hhcihleHAgJSAxMCk7CisJCX0gd2hpbGUgKChleHAgLz0gMTApID4gOSk7CisJCSotLXQgPSB0b19jaGFyKGV4cCk7CisJCWZvciAoOyB0IDwgZXhwYnVmICsgTUFYRVhQRElHOyAqcCsrID0gKnQrKykKKwkJCS8qIG5vdGhpbmcgKi87CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRXhwb25lbnRzIGZvciBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGNvbnZlcnNpb25zCisJCSAqICglW2VFZ0ddKSBtdXN0IGJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGxvbmcsCisJCSAqIHdoZXJlYXMgZXhwb25lbnRzIGZvciBoZXhhZGVjaW1hbCBjb252ZXJzaW9ucyBjYW4KKwkJICogYmUgb25seSBvbmUgY2hhcmFjdGVyIGxvbmcuCisJCSAqLworCQlpZiAoZm10Y2ggPT0gJ2UnIHx8IGZtdGNoID09ICdFJykKKwkJCSpwKysgPSAnMCc7CisJCSpwKysgPSB0b19jaGFyKGV4cCk7CisJfQorCXJldHVybiAocCAtIHAwKTsKK30KKyNlbmRpZiAvKiBGTE9BVElOR19QT0lOVCAqLwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zmd3NjYW5mLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdmZ3c2NhbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmIzNmJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zmd3NjYW5mLmMKQEAgLTAsMCArMSw3OTggQEAKKy8qCSRPcGVuQlNEOiB2ZndzY2FuZi5jLHYgMS40IDIwMTQvMDMvMTkgMDU6MTc6MDEgZ3VlbnRoZXIgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKyNpbmNsdWRlICJmbG9hdGlvLmgiCisjZW5kaWYKKworI2RlZmluZQlCVUYJCTUxMwkvKiBNYXhpbXVtIGxlbmd0aCBvZiBudW1lcmljIHN0cmluZy4gKi8KKworLyoKKyAqIEZsYWdzIHVzZWQgZHVyaW5nIGNvbnZlcnNpb24uCisgKi8KKyNkZWZpbmUJTE9ORwkJMHgwMDAwMQkvKiBsOiBsb25nIG9yIGRvdWJsZSAqLworI2RlZmluZQlMT05HREJMCQkweDAwMDAyCS8qIEw6IGxvbmcgZG91YmxlICovCisjZGVmaW5lCVNIT1JUCQkweDAwMDA0CS8qIGg6IHNob3J0ICovCisjZGVmaW5lCVNIT1JUU0hPUlQJMHgwMDAwOAkvKiBoaDogOCBiaXQgaW50ZWdlciAqLworI2RlZmluZSBMTE9ORwkJMHgwMDAxMAkvKiBsbDogbG9uZyBsb25nICgrIGRlcHJlY2F0ZWQgcTogcXVhZCkgKi8KKyNkZWZpbmUJUE9JTlRFUgkJMHgwMDAyMAkvKiBwOiB2b2lkICogKGFzIGhleCkgKi8KKyNkZWZpbmUJU0laRUlOVAkJMHgwMDA0MAkvKiB6OiAoc2lnbmVkKSBzaXplX3QgKi8KKyNkZWZpbmUJTUFYSU5UCQkweDAwMDgwCS8qIGo6IGludG1heF90ICovCisjZGVmaW5lCVBUUklOVAkJMHgwMDEwMAkvKiB0OiBwdHJkaWZmX3QgKi8KKyNkZWZpbmUJTk9TS0lQCQkweDAwMjAwCS8qIFsgb3IgYzogZG8gbm90IHNraXAgYmxhbmtzICovCisjZGVmaW5lCVNVUFBSRVNTCTB4MDA0MDAJLyogKjogc3VwcHJlc3MgYXNzaWdubWVudCAqLworI2RlZmluZQlVTlNJR05FRAkweDAwODAwCS8qICVbb3VweFhdIGNvbnZlcnNpb25zICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB1c2VkIGluIG51bWVyaWMgY29udmVyc2lvbnMgb25seToKKyAqIFNJR05PSywgSEFWRVNJR04sIE5ESUdJVFMsIERQVE9LLCBhbmQgRVhQT0sgYXJlIGZvciBmbG9hdGluZyBwb2ludDsKKyAqIFNJR05PSywgSEFWRVNJR04sIE5ESUdJVFMsIFBGWE9LLCBhbmQgTlpESUdJVFMgYXJlIGZvciBpbnRlZ3JhbC4KKyAqLworI2RlZmluZQlTSUdOT0sJCTB4MDEwMDAJLyogKy8tIGlzIChzdGlsbCkgbGVnYWwgKi8KKyNkZWZpbmUJSEFWRVNJR04JMHgwMjAwMAkvKiBzaWduIGRldGVjdGVkICovCisjZGVmaW5lCU5ESUdJVFMJCTB4MDQwMDAJLyogbm8gZGlnaXRzIGRldGVjdGVkICovCisKKyNkZWZpbmUJRFBUT0sJCTB4MDgwMDAJLyogKGZsb2F0KSBkZWNpbWFsIHBvaW50IGlzIHN0aWxsIGxlZ2FsICovCisjZGVmaW5lCUVYUE9LCQkweDEwMDAwCS8qIChmbG9hdCkgZXhwb25lbnQgKGUrMywgZXRjKSBzdGlsbCBsZWdhbCAqLworCisjZGVmaW5lCVBGWE9LCQkweDA4MDAwCS8qIDB4IHByZWZpeCBpcyAoc3RpbGwpIGxlZ2FsICovCisjZGVmaW5lCU5aRElHSVRTCTB4MTAwMDAJLyogbm8gemVybyBkaWdpdHMgZGV0ZWN0ZWQgKi8KKworLyoKKyAqIENvbnZlcnNpb24gdHlwZXMuCisgKi8KKyNkZWZpbmUJQ1RfQ0hBUgkJMAkvKiAlYyBjb252ZXJzaW9uICovCisjZGVmaW5lCUNUX0NDTAkJMQkvKiAlWy4uLl0gY29udmVyc2lvbiAqLworI2RlZmluZQlDVF9TVFJJTkcJMgkvKiAlcyBjb252ZXJzaW9uICovCisjZGVmaW5lCUNUX0lOVAkJMwkvKiBpbnRlZ2VyLCBpLmUuLCBzdHJ0b2ltYXggb3Igc3RydG91bWF4ICovCisjZGVmaW5lCUNUX0ZMT0FUCTQJLyogZmxvYXRpbmcsIGkuZS4sIHN0cnRvZCAqLworCisjZGVmaW5lIHVfY2hhciB1bnNpZ25lZCBjaGFyCisjZGVmaW5lIHVfbG9uZyB1bnNpZ25lZCBsb25nCisKKyNkZWZpbmUJSU5DQ0woX2MpCVwKKwkoY2NsY29tcGwgPyAod21lbWNocihjY2xzLCAoX2MpLCBjY2xlIC0gY2NscykgPT0gTlVMTCkgOiBcCisJKHdtZW1jaHIoY2NscywgKF9jKSwgY2NsZSAtIGNjbHMpICE9IE5VTEwpKQorCisvKgorICogdmZ3c2NhbmYKKyAqLworaW50CitfX3Zmd3NjYW5mKEZJTEUgKiBfX3Jlc3RyaWN0IGZwLCBjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBmbXQsIF9fdmFfbGlzdCBhcCkKK3sKKwl3aW50X3QgYzsJLyogY2hhcmFjdGVyIGZyb20gZm9ybWF0LCBvciBjb252ZXJzaW9uICovCisJc2l6ZV90IHdpZHRoOwkvKiBmaWVsZCB3aWR0aCwgb3IgMCAqLworCXdjaGFyX3QgKnA7CS8qIHBvaW50cyBpbnRvIGFsbCBraW5kcyBvZiBzdHJpbmdzICovCisJaW50IG47CQkvKiBoYW5keSBpbnRlZ2VyICovCisJaW50IGZsYWdzOwkvKiBmbGFncyBhcyBkZWZpbmVkIGFib3ZlICovCisJd2NoYXJfdCAqcDA7CS8qIHNhdmVzIG9yaWdpbmFsIHZhbHVlIG9mIHAgd2hlbiBuZWNlc3NhcnkgKi8KKwlpbnQgbmFzc2lnbmVkOwkJLyogbnVtYmVyIG9mIGZpZWxkcyBhc3NpZ25lZCAqLworCWludCBuY29udmVyc2lvbnM7CS8qIG51bWJlciBvZiBjb252ZXJzaW9ucyAqLworCWludCBucmVhZDsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIGNvbnN1bWVkIGZyb20gZnAgKi8KKwlpbnQgYmFzZTsJCS8qIGJhc2UgYXJndW1lbnQgdG8gc3RydG9pbWF4L3N0cnRvdWltYXggKi8KKwl3Y2hhcl90IGJ1ZltCVUZdOwkvKiBidWZmZXIgZm9yIG51bWVyaWMgY29udmVyc2lvbnMgKi8KKwljb25zdCB3Y2hhcl90ICpjY2xzOwkvKiBjaGFyYWN0ZXIgY2xhc3Mgc3RhcnQgKi8KKwljb25zdCB3Y2hhcl90ICpjY2xlOwkvKiBjaGFyYWN0ZXIgY2xhc3MgZW5kICovCisJaW50IGNjbGNvbXBsOwkJLyogY2NsIGlzIGNvbXBsZW1lbnRlZD8gKi8KKwl3aW50X3Qgd2k7CQkvKiBoYW5keSB3aW50X3QgKi8KKwljaGFyICptYnA7CQkvKiBtdWx0aWJ5dGUgc3RyaW5nIHBvaW50ZXIgZm9yICVjICVzICVbICovCisJc2l6ZV90IG5jb252OwkJLyogbnVtYmVyIG9mIGJ5dGVzIGluIG1iLiBjb252ZXJzaW9uICovCisJY2hhciBtYmJ1ZltNQl9MRU5fTUFYXTsJLyogdGVtcG9yYXJ5IG1iLiBjaGFyYWN0ZXIgYnVmZmVyICovCisgCW1ic3RhdGVfdCBtYnM7CisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwl3Y2hhcl90IGRlY2ltYWxfcG9pbnQgPSAwOworI2VuZGlmCisKKwkvKiBgYmFzZWZpeCcgaXMgdXNlZCB0byBhdm9pZCBgaWYnIHRlc3RzIGluIHRoZSBpbnRlZ2VyIHNjYW5uZXIgKi8KKwlzdGF0aWMgc2hvcnQgYmFzZWZpeFsxN10gPQorCQl7IDEwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiB9OworCisJX1NFVF9PUklFTlRBVElPTihmcCwgMSk7CisKKwluYXNzaWduZWQgPSAwOworCW5jb252ZXJzaW9ucyA9IDA7CisJbnJlYWQgPSAwOworCWJhc2UgPSAwOwkJLyogWFhYIGp1c3QgdG8ga2VlcCBnY2MgaGFwcHkgKi8KKwljY2xzID0gY2NsZSA9IE5VTEw7CisJZm9yICg7OykgeworCQljID0gKmZtdCsrOworCQlpZiAoYyA9PSAwKSB7CisJCQlyZXR1cm4gKG5hc3NpZ25lZCk7CisJCX0KKwkJaWYgKGlzd3NwYWNlKGMpKSB7CisJCQl3aGlsZSAoKGMgPSBfX2ZnZXR3Y191bmxvY2soZnApKSAhPSBXRU9GICYmCisJCQkgICAgaXN3c3BhY2UoYykpCisJCQkJOworCQkJaWYgKGMgIT0gV0VPRikKKwkJCQlfX3VuZ2V0d2MoYywgZnApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGMgIT0gJyUnKQorCQkJZ290byBsaXRlcmFsOworCQl3aWR0aCA9IDA7CisJCWZsYWdzID0gMDsKKwkJLyoKKwkJICogc3dpdGNoIG9uIHRoZSBmb3JtYXQuICBjb250aW51ZSBpZiBkb25lOworCQkgKiBicmVhayBvbmNlIGZvcm1hdCB0eXBlIGlzIGRlcml2ZWQuCisJCSAqLworYWdhaW46CQljID0gKmZtdCsrOworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnJSc6CitsaXRlcmFsOgorCQkJaWYgKCh3aSA9IF9fZmdldHdjX3VubG9jayhmcCkpID09IFdFT0YpCisJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJaWYgKHdpICE9IGMpIHsKKwkJCQlfX3VuZ2V0d2Mod2ksIGZwKTsKKwkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQl9CisJCQlucmVhZCsrOworCQkJY29udGludWU7CisKKwkJY2FzZSAnKic6CisJCQlmbGFncyB8PSBTVVBQUkVTUzsKKwkJCWdvdG8gYWdhaW47CisJCWNhc2UgJ2onOgorCQkJZmxhZ3MgfD0gTUFYSU5UOworCQkJZ290byBhZ2FpbjsKKwkJY2FzZSAnTCc6CisJCQlmbGFncyB8PSBMT05HREJMOworCQkJZ290byBhZ2FpbjsKKwkJY2FzZSAnaCc6CisJCQlpZiAoKmZtdCA9PSAnaCcpIHsKKwkJCQlmbXQrKzsKKwkJCQlmbGFncyB8PSBTSE9SVFNIT1JUOworCQkJfSBlbHNlIHsKKwkJCQlmbGFncyB8PSBTSE9SVDsKKwkJCX0KKwkJCWdvdG8gYWdhaW47CisJCWNhc2UgJ2wnOgorCQkJaWYgKCpmbXQgPT0gJ2wnKSB7CisJCQkJZm10Kys7CisJCQkJZmxhZ3MgfD0gTExPTkc7CisJCQl9IGVsc2UgeworCQkJCWZsYWdzIHw9IExPTkc7CisJCQl9CisJCQlnb3RvIGFnYWluOworCQljYXNlICdxJzoKKwkJCWZsYWdzIHw9IExMT05HOwkJLyogZGVwcmVjYXRlZCAqLworCQkJZ290byBhZ2FpbjsKKwkJY2FzZSAndCc6CisJCQlmbGFncyB8PSBQVFJJTlQ7CisJCQlnb3RvIGFnYWluOworCQljYXNlICd6JzoKKwkJCWZsYWdzIHw9IFNJWkVJTlQ7CisJCQlnb3RvIGFnYWluOworCisJCWNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKwkJY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorCQkJd2lkdGggPSB3aWR0aCAqIDEwICsgYyAtICcwJzsKKwkJCWdvdG8gYWdhaW47CisKKwkJLyoKKwkJICogQ29udmVyc2lvbnMuCisJCSAqIFRob3NlIG1hcmtlZCBgY29tcGF0JyBhcmUgZm9yIDQuWzEyM11CU0QgY29tcGF0aWJpbGl0eS4KKwkJICoKKwkJICogKEFjY29yZGluZyB0byBBTlNJLCBFIGFuZCBYIGZvcm1hdHMgYXJlIHN1cHBvc2VkCisJCSAqIHRvIHRoZSBzYW1lIGFzIGUgYW5kIHguICBTb3JyeSBhYm91dCB0aGF0LikKKwkJICovCisJCWNhc2UgJ0QnOgkvKiBjb21wYXQgKi8KKwkJCWZsYWdzIHw9IExPTkc7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQljYXNlICdkJzoKKwkJCWMgPSBDVF9JTlQ7CisJCQliYXNlID0gMTA7CisJCQlicmVhazsKKworCQljYXNlICdpJzoKKwkJCWMgPSBDVF9JTlQ7CisJCQliYXNlID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgJ08nOgkvKiBjb21wYXQgKi8KKwkJCWZsYWdzIHw9IExPTkc7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQljYXNlICdvJzoKKwkJCWMgPSBDVF9JTlQ7CisJCQlmbGFncyB8PSBVTlNJR05FRDsKKwkJCWJhc2UgPSA4OworCQkJYnJlYWs7CisKKwkJY2FzZSAndSc6CisJCQljID0gQ1RfSU5UOworCQkJZmxhZ3MgfD0gVU5TSUdORUQ7CisJCQliYXNlID0gMTA7CisJCQlicmVhazsKKworCQljYXNlICdYJzoKKwkJY2FzZSAneCc6CisJCQlmbGFncyB8PSBQRlhPSzsJLyogZW5hYmxlIDB4IHByZWZpeGluZyAqLworCQkJYyA9IENUX0lOVDsKKwkJCWZsYWdzIHw9IFVOU0lHTkVEOworCQkJYmFzZSA9IDE2OworCQkJYnJlYWs7CisKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCQljYXNlICdlJzogY2FzZSAnRSc6CisJCWNhc2UgJ2YnOiBjYXNlICdGJzoKKwkJY2FzZSAnZyc6IGNhc2UgJ0cnOgorCQljYXNlICdhJzogY2FzZSAnQSc6CisJCQljID0gQ1RfRkxPQVQ7CisJCQlicmVhazsKKyNlbmRpZgorCisJCWNhc2UgJ3MnOgorCQkJYyA9IENUX1NUUklORzsKKwkJCWJyZWFrOworCisJCWNhc2UgJ1snOgorCQkJY2NscyA9IGZtdDsKKwkJCWlmICgqZm10ID09ICdeJykgeworCQkJCWNjbGNvbXBsID0gMTsKKwkJCQlmbXQrKzsKKwkJCX0gZWxzZQorCQkJCWNjbGNvbXBsID0gMDsKKwkJCWlmICgqZm10ID09ICddJykKKwkJCQlmbXQrKzsKKwkJCXdoaWxlICgqZm10ICE9ICdcMCcgJiYgKmZtdCAhPSAnXScpCisJCQkJZm10Kys7CisJCQljY2xlID0gZm10OworCQkJZm10Kys7CisJCQlmbGFncyB8PSBOT1NLSVA7CisJCQljID0gQ1RfQ0NMOworCQkJYnJlYWs7CisKKwkJY2FzZSAnYyc6CisJCQlmbGFncyB8PSBOT1NLSVA7CisJCQljID0gQ1RfQ0hBUjsKKwkJCWJyZWFrOworCisJCWNhc2UgJ3AnOgkvKiBwb2ludGVyIGZvcm1hdCBpcyBsaWtlIGhleCAqLworCQkJZmxhZ3MgfD0gUE9JTlRFUiB8IFBGWE9LOworCQkJYyA9IENUX0lOVDsKKwkJCWZsYWdzIHw9IFVOU0lHTkVEOworCQkJYmFzZSA9IDE2OworCQkJYnJlYWs7CisKKwkJY2FzZSAnbic6CisJCQluY29udmVyc2lvbnMrKzsKKwkJCWlmIChmbGFncyAmIFNVUFBSRVNTKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGZsYWdzICYgU0hPUlRTSE9SVCkKKwkJCQkqdmFfYXJnKGFwLCBzaWduZWQgY2hhciAqKSA9IG5yZWFkOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVCkKKwkJCQkqdmFfYXJnKGFwLCBzaG9ydCAqKSA9IG5yZWFkOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBMT05HKQorCQkJCSp2YV9hcmcoYXAsIGxvbmcgKikgPSBucmVhZDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgU0laRUlOVCkKKwkJCQkqdmFfYXJnKGFwLCBzc2l6ZV90ICopID0gbnJlYWQ7CisJCQllbHNlIGlmIChmbGFncyAmIFBUUklOVCkKKwkJCQkqdmFfYXJnKGFwLCBwdHJkaWZmX3QgKikgPSBucmVhZDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgTExPTkcpCisJCQkJKnZhX2FyZyhhcCwgbG9uZyBsb25nICopID0gbnJlYWQ7CisJCQllbHNlIGlmIChmbGFncyAmIE1BWElOVCkKKwkJCQkqdmFfYXJnKGFwLCBpbnRtYXhfdCAqKSA9IG5yZWFkOworCQkJZWxzZQorCQkJCSp2YV9hcmcoYXAsIGludCAqKSA9IG5yZWFkOworCQkJY29udGludWU7CisKKwkJLyoKKwkJICogRGlzZ3VzdGluZyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBoYWNrcy4JWFhYCisJCSAqLworCQljYXNlICdcMCc6CS8qIGNvbXBhdCAqLworCQkJcmV0dXJuIChFT0YpOworCisJCWRlZmF1bHQ6CS8qIGNvbXBhdCAqLworCQkJaWYgKGlzd3VwcGVyKGMpKQorCQkJCWZsYWdzIHw9IExPTkc7CisJCQljID0gQ1RfSU5UOworCQkJYmFzZSA9IDEwOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBDb25zdW1lIGxlYWRpbmcgd2hpdGUgc3BhY2UsIGV4Y2VwdCBmb3IgZm9ybWF0cworCQkgKiB0aGF0IHN1cHByZXNzIHRoaXMuCisJCSAqLworCQlpZiAoKGZsYWdzICYgTk9TS0lQKSA9PSAwKSB7CisJCQl3aGlsZSAoKHdpID0gX19mZ2V0d2NfdW5sb2NrKGZwKSkgIT0gV0VPRiAmJgorCQkJICAgIGlzd3NwYWNlKHdpKSkKKwkJCQlucmVhZCsrOworCQkJaWYgKHdpID09IFdFT0YpCisJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJX191bmdldHdjKHdpLCBmcCk7CisJCX0KKworCQkvKgorCQkgKiBEbyB0aGUgY29udmVyc2lvbi4KKwkJICovCisJCXN3aXRjaCAoYykgeworCisJCWNhc2UgQ1RfQ0hBUjoKKwkJCS8qIHNjYW4gYXJiaXRyYXJ5IGNoYXJhY3RlcnMgKHNldHMgTk9TS0lQKSAqLworCQkJaWYgKHdpZHRoID09IDApCisJCQkJd2lkdGggPSAxOworIAkJCWlmIChmbGFncyAmIExPTkcpIHsKKwkJCQlpZiAoIShmbGFncyAmIFNVUFBSRVNTKSkKKwkJCQkJcCA9IHZhX2FyZyhhcCwgd2NoYXJfdCAqKTsKKwkJCQluID0gMDsKKwkJCQl3aGlsZSAod2lkdGgtLSAhPSAwICYmCisJCQkJICAgICh3aSA9IF9fZmdldHdjX3VubG9jayhmcCkpICE9IFdFT0YpIHsKKwkJCQkJaWYgKCEoZmxhZ3MgJiBTVVBQUkVTUykpCisJCQkJCQkqcCsrID0gKHdjaGFyX3Qpd2k7CisJCQkJCW4rKzsKKwkJCQl9CisJCQkJaWYgKG4gPT0gMCkKKwkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCW5yZWFkICs9IG47CisgCQkJCWlmICghKGZsYWdzICYgU1VQUFJFU1MpKQorIAkJCQkJbmFzc2lnbmVkKys7CisJCQl9IGVsc2UgeworCQkJCWlmICghKGZsYWdzICYgU1VQUFJFU1MpKQorCQkJCQltYnAgPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJCQkJbiA9IDA7CisJCQkJYnplcm8oJm1icywgc2l6ZW9mKG1icykpOworCQkJCXdoaWxlICh3aWR0aCAhPSAwICYmCisJCQkJICAgICh3aSA9IF9fZmdldHdjX3VubG9jayhmcCkpICE9IFdFT0YpIHsKKwkJCQkJaWYgKHdpZHRoID49IE1CX0NVUl9NQVggJiYKKwkJCQkJICAgICEoZmxhZ3MgJiBTVVBQUkVTUykpIHsKKwkJCQkJCW5jb252ID0gd2NydG9tYihtYnAsIHdpLCAmbWJzKTsKKwkJCQkJCWlmIChuY29udiA9PSAoc2l6ZV90KS0xKQorCQkJCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCW5jb252ID0gd2NydG9tYihtYmJ1Ziwgd2ksCisJCQkJCQkgICAgJm1icyk7CisJCQkJCQlpZiAobmNvbnYgPT0gKHNpemVfdCktMSkKKwkJCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJCQlpZiAobmNvbnYgPiB3aWR0aCkgeworCQkJCQkJCV9fdW5nZXR3Yyh3aSwgZnApOworIAkJCQkJCQlicmVhazsKKyAJCQkJCQl9CisJCQkJCQlpZiAoIShmbGFncyAmIFNVUFBSRVNTKSkKKwkJCQkJCQltZW1jcHkobWJwLCBtYmJ1ZiwKKwkJCQkJCQkgICAgbmNvbnYpOworIAkJCQkJfQorCQkJCQlpZiAoIShmbGFncyAmIFNVUFBSRVNTKSkKKwkJCQkJCW1icCArPSBuY29udjsKKwkJCQkJd2lkdGggLT0gbmNvbnY7CisJCQkJCW4rKzsKKyAJCQkJfQorCQkJCWlmIChuID09IDApCisgCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJbnJlYWQgKz0gbjsKKwkJCQlpZiAoIShmbGFncyAmIFNVUFBSRVNTKSkKKwkJCQkJbmFzc2lnbmVkKys7CisJCQl9CisJCQluY29udmVyc2lvbnMrKzsKKwkJCWJyZWFrOworCisJCWNhc2UgQ1RfQ0NMOgorCQkJLyogc2NhbiBhIChub25lbXB0eSkgY2hhcmFjdGVyIGNsYXNzIChzZXRzIE5PU0tJUCkgKi8KKwkJCWlmICh3aWR0aCA9PSAwKQorCQkJCXdpZHRoID0gKHNpemVfdCl+MDsJLyogYGluZmluaXR5JyAqLworCQkJLyogdGFrZSBvbmx5IHRob3NlIHRoaW5ncyBpbiB0aGUgY2xhc3MgKi8KKwkJCWlmICgoZmxhZ3MgJiBTVVBQUkVTUykgJiYgKGZsYWdzICYgTE9ORykpIHsKKwkJCQluID0gMDsKKwkJCQl3aGlsZSAoKHdpID0gX19mZ2V0d2NfdW5sb2NrKGZwKSkgIT0gV0VPRiAmJgorCQkJCSAgICB3aWR0aC0tICE9IDAgJiYgSU5DQ0wod2kpKQorCQkJCQluKys7CisJCQkJaWYgKHdpICE9IFdFT0YpCisJCQkJCV9fdW5nZXR3Yyh3aSwgZnApOworCQkJCWlmIChuID09IDApCisJCQkJCWdvdG8gbWF0Y2hfZmFpbHVyZTsKKwkJCX0gZWxzZSBpZiAoZmxhZ3MgJiBMT05HKSB7CisJCQkJcDAgPSBwID0gdmFfYXJnKGFwLCB3Y2hhcl90ICopOworCQkJCXdoaWxlICgod2kgPSBfX2ZnZXR3Y191bmxvY2soZnApKSAhPSBXRU9GICYmCisJCQkJICAgIHdpZHRoLS0gIT0gMCAmJiBJTkNDTCh3aSkpCisJCQkJCSpwKysgPSAod2NoYXJfdCl3aTsKKwkJCQlpZiAod2kgIT0gV0VPRikKKwkJCQkJX191bmdldHdjKHdpLCBmcCk7CisJCQkJbiA9IHAgLSBwMDsKKwkJCQlpZiAobiA9PSAwKQorCQkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7CisJCQkJKnAgPSAwOworCQkJCW5hc3NpZ25lZCsrOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoIShmbGFncyAmIFNVUFBSRVNTKSkKKwkJCQkJbWJwID0gdmFfYXJnKGFwLCBjaGFyICopOworCQkJCW4gPSAwOworCQkJCWJ6ZXJvKCZtYnMsIHNpemVvZihtYnMpKTsKKwkJCQl3aGlsZSAoKHdpID0gX19mZ2V0d2NfdW5sb2NrKGZwKSkgIT0gV0VPRiAmJgorCQkJCSAgICB3aWR0aCAhPSAwICYmIElOQ0NMKHdpKSkgeworCQkJCQlpZiAod2lkdGggPj0gTUJfQ1VSX01BWCAmJgorCQkJCQkgICAhKGZsYWdzICYgU1VQUFJFU1MpKSB7CisJCQkJCQluY29udiA9IHdjcnRvbWIobWJwLCB3aSwgJm1icyk7CisJCQkJCQlpZiAobmNvbnYgPT0gKHNpemVfdCktMSkKKwkJCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJCX0gZWxzZSB7CisJCQkJCQluY29udiA9IHdjcnRvbWIobWJidWYsIHdpLAorCQkJCQkJICAgICZtYnMpOworCQkJCQkJaWYgKG5jb252ID09IChzaXplX3QpLTEpCisJCQkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQkJaWYgKG5jb252ID4gd2lkdGgpCisJCQkJCQkJYnJlYWs7CisJCQkJCQlpZiAoIShmbGFncyAmIFNVUFBSRVNTKSkKKwkJCQkJCQltZW1jcHkobWJwLCBtYmJ1ZiwKKwkJCQkJCQkgICAgbmNvbnYpOworCQkJCQl9CisJCQkJCWlmICghKGZsYWdzICYgU1VQUFJFU1MpKQorCQkJCQkJbWJwICs9IG5jb252OworCQkJCQl3aWR0aCAtPSBuY29udjsKKwkJCQkJbisrOworCQkJCX0KKwkJCQlpZiAod2kgIT0gV0VPRikKKwkJCQkJX191bmdldHdjKHdpLCBmcCk7CisJCQkJaWYgKCEoZmxhZ3MgJiBTVVBQUkVTUykpIHsKKwkJCQkJKm1icCA9IDA7CisJCQkJCW5hc3NpZ25lZCsrOworCQkJCX0KKyAJCQl9CisJCQlucmVhZCArPSBuOworCQkJbmNvbnZlcnNpb25zKys7CisJCQlicmVhazsKKworCQljYXNlIENUX1NUUklORzoKKwkJCS8qIGxpa2UgQ0NMLCBidXQgemVyby1sZW5ndGggc3RyaW5nIE9LLCAmIG5vIE5PU0tJUCAqLworCQkJaWYgKHdpZHRoID09IDApCisJCQkJd2lkdGggPSAoc2l6ZV90KX4wOworCQkJaWYgKChmbGFncyAmIFNVUFBSRVNTKSAmJiAoZmxhZ3MgJiBMT05HKSkgeworCQkJCXdoaWxlICgod2kgPSBfX2ZnZXR3Y191bmxvY2soZnApKSAhPSBXRU9GICYmCisJCQkJICAgIHdpZHRoLS0gIT0gMCAmJgorCQkJCSAgICAhaXN3c3BhY2Uod2kpKQorCQkJCQlucmVhZCsrOworCQkJCWlmICh3aSAhPSBXRU9GKQorCQkJCQlfX3VuZ2V0d2Mod2ksIGZwKTsKKwkJCX0gZWxzZSBpZiAoZmxhZ3MgJiBMT05HKSB7CisJCQkJcDAgPSBwID0gdmFfYXJnKGFwLCB3Y2hhcl90ICopOworCQkJCXdoaWxlICgod2kgPSBfX2ZnZXR3Y191bmxvY2soZnApKSAhPSBXRU9GICYmCisJCQkJICAgIHdpZHRoLS0gIT0gMCAmJgorCQkJCSAgICAhaXN3c3BhY2Uod2kpKSB7CisJCQkJCSpwKysgPSAod2NoYXJfdCl3aTsKKwkJCQkJbnJlYWQrKzsKKwkJCQl9CisJCQkJaWYgKHdpICE9IFdFT0YpCisJCQkJCV9fdW5nZXR3Yyh3aSwgZnApOworCQkJCSpwID0gMDsKKwkJCQluYXNzaWduZWQrKzsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCEoZmxhZ3MgJiBTVVBQUkVTUykpCisJCQkJCW1icCA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwkJCQliemVybygmbWJzLCBzaXplb2YobWJzKSk7CisJCQkJd2hpbGUgKCh3aSA9IF9fZmdldHdjX3VubG9jayhmcCkpICE9IFdFT0YgJiYKKwkJCQkgICAgd2lkdGggIT0gMCAmJgorCQkJCSAgICAhaXN3c3BhY2Uod2kpKSB7CisJCQkJCWlmICh3aWR0aCA+PSBNQl9DVVJfTUFYICYmCisJCQkJCSAgICAhKGZsYWdzICYgU1VQUFJFU1MpKSB7CisJCQkJCQluY29udiA9IHdjcnRvbWIobWJwLCB3aSwgJm1icyk7CisJCQkJCQlpZiAobmNvbnYgPT0gKHNpemVfdCktMSkKKwkJCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJCX0gZWxzZSB7CisJCQkJCQluY29udiA9IHdjcnRvbWIobWJidWYsIHdpLAorCQkJCQkJICAgICZtYnMpOworCQkJCQkJaWYgKG5jb252ID09IChzaXplX3QpLTEpCisJCQkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQkJaWYgKG5jb252ID4gd2lkdGgpCisJCQkJCQkJYnJlYWs7CisJCQkJCQlpZiAoIShmbGFncyAmIFNVUFBSRVNTKSkKKwkJCQkJCQltZW1jcHkobWJwLCBtYmJ1ZiwKKwkJCQkJCQkgICAgbmNvbnYpOworCQkJCQl9CisJCQkJCWlmICghKGZsYWdzICYgU1VQUFJFU1MpKQorCQkJCQkJbWJwICs9IG5jb252OworCQkJCQl3aWR0aCAtPSBuY29udjsKKwkJCQkJbnJlYWQrKzsKKwkJCQl9CisJCQkJaWYgKHdpICE9IFdFT0YpCisJCQkJCV9fdW5nZXR3Yyh3aSwgZnApOworCQkJCWlmICghKGZsYWdzICYgU1VQUFJFU1MpKSB7CisJCQkJCSptYnAgPSAwOworIAkJCQkJbmFzc2lnbmVkKys7CisgCQkJCX0KKwkJCX0KKwkJCW5jb252ZXJzaW9ucysrOworCQkJY29udGludWU7CisKKwkJY2FzZSBDVF9JTlQ6CisJCQkvKiBzY2FuIGFuIGludGVnZXIgYXMgaWYgYnkgc3RydG9pbWF4L3N0cnRvdW1heCAqLworCQkJaWYgKHdpZHRoID09IDAgfHwgd2lkdGggPiBzaXplb2YoYnVmKSAvCisJCQkgICAgc2l6ZW9mKCpidWYpIC0gMSkKKwkJCQl3aWR0aCA9IHNpemVvZihidWYpIC8gc2l6ZW9mKCpidWYpIC0gMTsKKwkJCWZsYWdzIHw9IFNJR05PSyB8IE5ESUdJVFMgfCBOWkRJR0lUUzsKKwkJCWZvciAocCA9IGJ1Zjsgd2lkdGg7IHdpZHRoLS0pIHsKKwkJCQljID0gX19mZ2V0d2NfdW5sb2NrKGZwKTsKKwkJCQkvKgorCQkJCSAqIFN3aXRjaCBvbiB0aGUgY2hhcmFjdGVyOyBgZ290byBvaycKKwkJCQkgKiBpZiB3ZSBhY2NlcHQgaXQgYXMgYSBwYXJ0IG9mIG51bWJlci4KKwkJCQkgKi8KKwkJCQlzd2l0Y2ggKGMpIHsKKworCQkJCS8qCisJCQkJICogVGhlIGRpZ2l0IDAgaXMgYWx3YXlzIGxlZ2FsLCBidXQgaXMKKwkJCQkgKiBzcGVjaWFsLiAgRm9yICVpIGNvbnZlcnNpb25zLCBpZiBubworCQkJCSAqIGRpZ2l0cyAoemVybyBvciBub256ZXJvKSBoYXZlIGJlZW4KKwkJCQkgKiBzY2FubmVkIChvbmx5IHNpZ25zKSwgd2Ugd2lsbCBoYXZlCisJCQkJICogYmFzZT09MC4gIEluIHRoYXQgY2FzZSwgd2Ugc2hvdWxkIHNldAorCQkJCSAqIGl0IHRvIDggYW5kIGVuYWJsZSAweCBwcmVmaXhpbmcuCisJCQkJICogQWxzbywgaWYgd2UgaGF2ZSBub3Qgc2Nhbm5lZCB6ZXJvIGRpZ2l0cworCQkJCSAqIGJlZm9yZSB0aGlzLCBkbyBub3QgdHVybiBvZmYgcHJlZml4aW5nCisJCQkJICogKHNvbWVvbmUgZWxzZSB3aWxsIHR1cm4gaXQgb2ZmIGlmIHdlCisJCQkJICogaGF2ZSBzY2FubmVkIGFueSBub256ZXJvIGRpZ2l0cykuCisJCQkJICovCisJCQkJY2FzZSAnMCc6CisJCQkJCWlmIChiYXNlID09IDApIHsKKwkJCQkJCWJhc2UgPSA4OworCQkJCQkJZmxhZ3MgfD0gUEZYT0s7CisJCQkJCX0KKwkJCQkJaWYgKGZsYWdzICYgTlpESUdJVFMpCisJCQkJCSAgICBmbGFncyAmPSB+KFNJR05PS3xOWkRJR0lUU3xORElHSVRTKTsKKwkJCQkJZWxzZQorCQkJCQkgICAgZmxhZ3MgJj0gfihTSUdOT0t8UEZYT0t8TkRJR0lUUyk7CisJCQkJCWdvdG8gb2s7CisKKwkJCQkvKiAxIHRocm91Z2ggNyBhbHdheXMgbGVnYWwgKi8KKwkJCQljYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOgorCQkJCWNhc2UgJzQnOiBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOgorCQkJCQliYXNlID0gYmFzZWZpeFtiYXNlXTsKKwkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBQRlhPSyB8IE5ESUdJVFMpOworCQkJCQlnb3RvIG9rOworCisJCQkJLyogZGlnaXRzIDggYW5kIDkgb2sgaWZmIGRlY2ltYWwgb3IgaGV4ICovCisJCQkJY2FzZSAnOCc6IGNhc2UgJzknOgorCQkJCQliYXNlID0gYmFzZWZpeFtiYXNlXTsKKwkJCQkJaWYgKGJhc2UgPD0gOCkKKwkJCQkJCWJyZWFrOwkvKiBub3QgbGVnYWwgaGVyZSAqLworCQkJCQlmbGFncyAmPSB+KFNJR05PSyB8IFBGWE9LIHwgTkRJR0lUUyk7CisJCQkJCWdvdG8gb2s7CisKKwkJCQkvKiBsZXR0ZXJzIG9rIGlmZiBoZXggKi8KKwkJCQljYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOgorCQkJCWNhc2UgJ0QnOiBjYXNlICdFJzogY2FzZSAnRic6CisJCQkJY2FzZSAnYSc6IGNhc2UgJ2InOiBjYXNlICdjJzoKKwkJCQljYXNlICdkJzogY2FzZSAnZSc6IGNhc2UgJ2YnOgorCQkJCQkvKiBubyBuZWVkIHRvIGZpeCBiYXNlIGhlcmUgKi8KKwkJCQkJaWYgKGJhc2UgPD0gMTApCisJCQkJCQlicmVhazsJLyogbm90IGxlZ2FsIGhlcmUgKi8KKwkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBQRlhPSyB8IE5ESUdJVFMpOworCQkJCQlnb3RvIG9rOworCisJCQkJLyogc2lnbiBvayBvbmx5IGFzIGZpcnN0IGNoYXJhY3RlciAqLworCQkJCWNhc2UgJysnOiBjYXNlICctJzoKKwkJCQkJaWYgKGZsYWdzICYgU0lHTk9LKSB7CisJCQkJCQlmbGFncyAmPSB+U0lHTk9LOworCQkJCQkJZmxhZ3MgfD0gSEFWRVNJR047CisJCQkJCQlnb3RvIG9rOworCQkJCQl9CisJCQkJCWJyZWFrOworCisJCQkJLyoKKwkJCQkgKiB4IG9rIGlmZiBmbGFnIHN0aWxsIHNldCBhbmQgMm5kIGNoYXIgKG9yCisJCQkJICogM3JkIGNoYXIgaWYgd2UgaGF2ZSBhIHNpZ24pLgorCQkJCSAqLworCQkJCWNhc2UgJ3gnOiBjYXNlICdYJzoKKwkJCQkJaWYgKChmbGFncyAmIFBGWE9LKSAmJiBwID09CisJCQkJCSAgICBidWYgKyAxICsgISEoZmxhZ3MgJiBIQVZFU0lHTikpIHsKKwkJCQkJCWJhc2UgPSAxNjsJLyogaWYgJWkgKi8KKwkJCQkJCWZsYWdzICY9IH5QRlhPSzsKKwkJCQkJCWdvdG8gb2s7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBJZiB3ZSBnb3QgaGVyZSwgYyBpcyBub3QgYSBsZWdhbCBjaGFyYWN0ZXIKKwkJCQkgKiBmb3IgYSBudW1iZXIuICBTdG9wIGFjY3VtdWxhdGluZyBkaWdpdHMuCisJCQkJICovCisJCQkJaWYgKGMgIT0gV0VPRikKKwkJCQkJX191bmdldHdjKGMsIGZwKTsKKwkJCQlicmVhazsKKwkJb2s6CisJCQkJLyoKKwkJCQkgKiBjIGlzIGxlZ2FsOiBzdG9yZSBpdCBhbmQgbG9vayBhdCB0aGUgbmV4dC4KKwkJCQkgKi8KKwkJCQkqcCsrID0gKHdjaGFyX3QpYzsKKwkJCX0KKwkJCS8qCisJCQkgKiBJZiB3ZSBoYWQgb25seSBhIHNpZ24sIGl0IGlzIG5vIGdvb2Q7IHB1c2gKKwkJCSAqIGJhY2sgdGhlIHNpZ24uICBJZiB0aGUgbnVtYmVyIGVuZHMgaW4gYHgnLAorCQkJICogaXQgd2FzIFtzaWduXSAnMCcgJ3gnLCBzbyBwdXNoIGJhY2sgdGhlIHgKKwkJCSAqIGFuZCB0cmVhdCBpdCBhcyBbc2lnbl0gJzAnLgorCQkJICovCisJCQlpZiAoZmxhZ3MgJiBORElHSVRTKSB7CisJCQkJaWYgKHAgPiBidWYpCisJCQkJCV9fdW5nZXR3YygqLS1wLCBmcCk7CisJCQkJZ290byBtYXRjaF9mYWlsdXJlOworCQkJfQorCQkJYyA9IHBbLTFdOworCQkJaWYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnKSB7CisJCQkJLS1wOworCQkJCV9fdW5nZXR3YyhjLCBmcCk7CisJCQl9CisJCQlpZiAoKGZsYWdzICYgU1VQUFJFU1MpID09IDApIHsKKwkJCQl1aW50bWF4X3QgcmVzOworCisJCQkJKnAgPSAnXDAnOworCQkJCWlmIChmbGFncyAmIFVOU0lHTkVEKQorCQkJCQlyZXMgPSB3Y3N0b2ltYXgoYnVmLCBOVUxMLCBiYXNlKTsKKwkJCQllbHNlCisJCQkJCXJlcyA9IHdjc3RvdW1heChidWYsIE5VTEwsIGJhc2UpOworCQkJCWlmIChmbGFncyAmIFBPSU5URVIpCisJCQkJCSp2YV9hcmcoYXAsIHZvaWQgKiopID0KKwkJCQkJICAgICh2b2lkICopKHVpbnRwdHJfdClyZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBNQVhJTlQpCisJCQkJCSp2YV9hcmcoYXAsIGludG1heF90ICopID0gcmVzOworCQkJCWVsc2UgaWYgKGZsYWdzICYgTExPTkcpCisJCQkJCSp2YV9hcmcoYXAsIGxvbmcgbG9uZyAqKSA9IHJlczsKKwkJCQllbHNlIGlmIChmbGFncyAmIFNJWkVJTlQpCisJCQkJCSp2YV9hcmcoYXAsIHNzaXplX3QgKikgPSByZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBQVFJJTlQpCisJCQkJCSp2YV9hcmcoYXAsIHB0cmRpZmZfdCAqKSA9IHJlczsKKwkJCQllbHNlIGlmIChmbGFncyAmIExPTkcpCisJCQkJCSp2YV9hcmcoYXAsIGxvbmcgKikgPSByZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVCkKKwkJCQkJKnZhX2FyZyhhcCwgc2hvcnQgKikgPSByZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVFNIT1JUKQorCQkJCQkqdmFfYXJnKGFwLCBzaWduZWQgY2hhciAqKSA9IHJlczsKKwkJCQllbHNlCisJCQkJCSp2YV9hcmcoYXAsIGludCAqKSA9IHJlczsKKwkJCQluYXNzaWduZWQrKzsKKwkJCX0KKwkJCW5yZWFkICs9IHAgLSBidWY7CisJCQluY29udmVyc2lvbnMrKzsKKwkJCWJyZWFrOworCisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwkJY2FzZSBDVF9GTE9BVDoKKwkJCS8qIHNjYW4gYSBmbG9hdGluZyBwb2ludCBudW1iZXIgYXMgaWYgYnkgc3RydG9kICovCisJCQlpZiAod2lkdGggPT0gMCB8fCB3aWR0aCA+IHNpemVvZihidWYpIC8KKwkJCSAgICBzaXplb2YoKmJ1ZikgLSAxKQorCQkJCXdpZHRoID0gc2l6ZW9mKGJ1ZikgLyBzaXplb2YoKmJ1ZikgLSAxOworCQkJZmxhZ3MgfD0gU0lHTk9LIHwgTkRJR0lUUyB8IERQVE9LIHwgRVhQT0s7CisJCQlmb3IgKHAgPSBidWY7IHdpZHRoOyB3aWR0aC0tKSB7CisJCQkJYyA9IF9fZmdldHdjX3VubG9jayhmcCk7CisJCQkJLyoKKwkJCQkgKiBUaGlzIGNvZGUgbWltaWNrcyB0aGUgaW50ZWdlciBjb252ZXJzaW9uCisJCQkJICogY29kZSwgYnV0IGlzIG11Y2ggc2ltcGxlci4KKwkJCQkgKi8KKwkJCQlzd2l0Y2ggKGMpIHsKKworCQkJCWNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOgorCQkJCWNhc2UgJzQnOiBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOgorCQkJCWNhc2UgJzgnOiBjYXNlICc5JzoKKwkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBORElHSVRTKTsKKwkJCQkJZ290byBmb2s7CisKKwkJCQljYXNlICcrJzogY2FzZSAnLSc6CisJCQkJCWlmIChmbGFncyAmIFNJR05PSykgeworCQkJCQkJZmxhZ3MgJj0gflNJR05PSzsKKwkJCQkJCWdvdG8gZm9rOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ2UnOiBjYXNlICdFJzoKKwkJCQkJLyogbm8gZXhwb25lbnQgd2l0aG91dCBzb21lIGRpZ2l0cyAqLworCQkJCQlpZiAoKGZsYWdzJihORElHSVRTfEVYUE9LKSkgPT0gRVhQT0spIHsKKwkJCQkJCWZsYWdzID0KKwkJCQkJCSAgICAoZmxhZ3MgJiB+KEVYUE9LfERQVE9LKSkgfAorCQkJCQkJICAgIFNJR05PSyB8IE5ESUdJVFM7CisJCQkJCQlnb3RvIGZvazsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlpZiAoZGVjaW1hbF9wb2ludCA9PSAwKSB7CisJCQkJCQliemVybygmbWJzLCBzaXplb2YobWJzKSk7CisJCQkJCQluY29udiA9IG1icnRvd2MoJmRlY2ltYWxfcG9pbnQsCisJCQkJCQkgICAgbG9jYWxlY29udigpLT5kZWNpbWFsX3BvaW50LAorCQkJCQkgICAgCSAgICBNQl9DVVJfTUFYLCAmbWJzKTsKKwkJCQkJCWlmIChuY29udiA9PSAwIHx8CisJCQkJCQkgICAgbmNvbnYgPT0gKHNpemVfdCktMSB8fAorCQkJCQkJICAgIG5jb252ID09IChzaXplX3QpLTIpCisJCQkJCQkJZGVjaW1hbF9wb2ludCA9ICcuJzsKKwkJCQkJfQorCQkJCQlpZiAoYyA9PSBkZWNpbWFsX3BvaW50ICYmCisJCQkJCSAgICAoZmxhZ3MgJiBEUFRPSykpIHsKKwkJCQkJCWZsYWdzICY9IH4oU0lHTk9LIHwgRFBUT0spOworCQkJCQkJZ290byBmb2s7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChjICE9IFdFT0YpCisJCQkJCV9fdW5nZXR3YyhjLCBmcCk7CisJCQkJYnJlYWs7CisJCWZvazoKKwkJCQkqcCsrID0gYzsKKwkJCX0KKwkJCS8qCisJCQkgKiBJZiBubyBkaWdpdHMsIG1pZ2h0IGJlIG1pc3NpbmcgZXhwb25lbnQgZGlnaXRzCisJCQkgKiAoanVzdCBnaXZlIGJhY2sgdGhlIGV4cG9uZW50KSBvciBtaWdodCBiZSBtaXNzaW5nCisJCQkgKiByZWd1bGFyIGRpZ2l0cywgYnV0IGhhZCBzaWduIGFuZC9vciBkZWNpbWFsIHBvaW50LgorCQkJICovCisJCQlpZiAoZmxhZ3MgJiBORElHSVRTKSB7CisJCQkJaWYgKGZsYWdzICYgRVhQT0spIHsKKwkJCQkJLyogbm8gZGlnaXRzIGF0IGFsbCAqLworCQkJCQl3aGlsZSAocCA+IGJ1ZikKKwkJCQkJCV9fdW5nZXR3YygqLS1wLCBmcCk7CisJCQkJCWdvdG8gbWF0Y2hfZmFpbHVyZTsKKwkJCQl9CisJCQkJLyoganVzdCBhIGJhZCBleHBvbmVudCAoZSBhbmQgbWF5YmUgc2lnbikgKi8KKwkJCQljID0gKi0tcDsKKwkJCQlpZiAoYyAhPSAnZScgJiYgYyAhPSAnRScpIHsKKwkJCQkJX191bmdldHdjKGMsIGZwKTsvKiBzaWduICovCisJCQkJCWMgPSAqLS1wOworCQkJCX0KKwkJCQlfX3VuZ2V0d2MoYywgZnApOworCQkJfQorCQkJaWYgKChmbGFncyAmIFNVUFBSRVNTKSA9PSAwKSB7CisJCQkJKnAgPSAwOworCQkJCWlmIChmbGFncyAmIExPTkdEQkwpIHsKKwkJCQkJbG9uZyBkb3VibGUgcmVzID0gd2NzdG9sZChidWYsIE5VTEwpOworCQkJCQkqdmFfYXJnKGFwLCBsb25nIGRvdWJsZSAqKSA9IHJlczsKKwkJCQl9IGVsc2UgaWYgKGZsYWdzICYgTE9ORykgeworCQkJCQlkb3VibGUgcmVzID0gd2NzdG9kKGJ1ZiwgTlVMTCk7CisJCQkJCSp2YV9hcmcoYXAsIGRvdWJsZSAqKSA9IHJlczsKKwkJCQl9IGVsc2UgeworCQkJCQlmbG9hdCByZXMgPSB3Y3N0b2YoYnVmLCBOVUxMKTsKKwkJCQkJKnZhX2FyZyhhcCwgZmxvYXQgKikgPSByZXM7CisJCQkJfQorCQkJCW5hc3NpZ25lZCsrOworCQkJfQorCQkJbnJlYWQgKz0gcCAtIGJ1ZjsKKwkJCW5jb252ZXJzaW9ucysrOworCQkJYnJlYWs7CisjZW5kaWYgLyogRkxPQVRJTkdfUE9JTlQgKi8KKwkJfQorCX0KK2lucHV0X2ZhaWx1cmU6CisJcmV0dXJuIChuY29udmVyc2lvbnMgIT0gMCA/IG5hc3NpZ25lZCA6IEVPRik7CittYXRjaF9mYWlsdXJlOgorCXJldHVybiAobmFzc2lnbmVkKTsKK30KKworaW50Cit2ZndzY2FuZihGSUxFICogX19yZXN0cmljdCBmcCwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgZm10LCBfX3ZhX2xpc3QgYXApCit7CisJaW50IHI7CisKKwlGTE9DS0ZJTEUoZnApOworCXIgPSBfX3Zmd3NjYW5mKGZwLCBmbXQsIGFwKTsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChyKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vdnByaW50Zi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ZwcmludGYuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdGRpby92cHJpbnRmLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92cHJpbnRmLmMKZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vdnNjYW5mLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnNjYW5mLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RkaW8vdnNjYW5mLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92c2NhbmYuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ZzbnByaW50Zi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ZzbnByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMWEwODgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnNucHJpbnRmLmMKQEAgLTAsMCArMSw2NCBAQAorLyoJJE9wZW5CU0Q6IHZzbnByaW50Zi5jLHYgMS4xNSAyMDA5LzExLzA5IDAwOjE4OjI4IGt1cnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworaW50Cit2c25wcmludGYoY2hhciAqc3RyLCBzaXplX3QgbiwgY29uc3QgY2hhciAqZm10LCBfX3ZhX2xpc3QgYXApCit7CisJaW50IHJldDsKKwljaGFyIGR1bW15OworCUZJTEUgZjsKKwlzdHJ1Y3QgX19zZmlsZWV4dCBmZXh0OworCisJX0ZJTEVFWFRfU0VUVVAoJmYsICZmZXh0KTsKKworCS8qIFdoaWxlIHNucHJpbnRmKDMpIHNwZWNpZmllcyBzaXplX3Qgc3RkaW8gdXNlcyBhbiBpbnQgaW50ZXJuYWxseSAqLworCWlmIChuID4gSU5UX01BWCkKKwkJbiA9IElOVF9NQVg7CisJLyogU3RkaW8gaW50ZXJuYWxzIGRvIG5vdCBkZWFsIGNvcnJlY3RseSB3aXRoIHplcm8gbGVuZ3RoIGJ1ZmZlciAqLworCWlmIChuID09IDApIHsKKwkJc3RyID0gJmR1bW15OworCQluID0gMTsKKwl9CisJZi5fZmlsZSA9IC0xOworCWYuX2ZsYWdzID0gX19TV1IgfCBfX1NTVFI7CisJZi5fYmYuX2Jhc2UgPSBmLl9wID0gKHVuc2lnbmVkIGNoYXIgKilzdHI7CisJZi5fYmYuX3NpemUgPSBmLl93ID0gbiAtIDE7CisJcmV0ID0gX192ZnByaW50ZigmZiwgZm10LCBhcCk7CisJKmYuX3AgPSAnXDAnOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92c3ByaW50Zi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ZzcHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4ZmYzNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92c3ByaW50Zi5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCSRPcGVuQlNEOiB2c3ByaW50Zi5jLHYgMS4xNiAyMDA5LzExLzA5IDAwOjE4OjI4IGt1cnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworI2lmIGRlZmluZWQoQVBJV0FSTikKK19fd2Fybl9yZWZlcmVuY2VzKHZzcHJpbnRmLAorICAgICJ3YXJuaW5nOiB2c3ByaW50ZigpIGlzIG9mdGVuIG1pc3VzZWQsIHBsZWFzZSB1c2UgdnNucHJpbnRmKCkiKTsKKyNlbmRpZgorCitpbnQKK3ZzcHJpbnRmKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZm10LCBfX3ZhX2xpc3QgYXApCit7CisJaW50IHJldDsKKwlGSUxFIGY7CisJc3RydWN0IF9fc2ZpbGVleHQgZmV4dDsKKworCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7CisJZi5fZmlsZSA9IC0xOworCWYuX2ZsYWdzID0gX19TV1IgfCBfX1NTVFI7CisJZi5fYmYuX2Jhc2UgPSBmLl9wID0gKHVuc2lnbmVkIGNoYXIgKilzdHI7CisJZi5fYmYuX3NpemUgPSBmLl93ID0gSU5UX01BWDsKKwlyZXQgPSBfX3ZmcHJpbnRmKCZmLCBmbXQsIGFwKTsKKwkqZi5fcCA9ICdcMCc7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zzc2NhbmYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92c3NjYW5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlYjc1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92c3NjYW5mLmMKQEAgLTAsMCArMSw1OSBAQAorLyoJJE9wZW5CU0Q6IHZzc2NhbmYuYyx2IDEuMTIgMjAxMS8xMS8wOCAxODozMDo0MiBndWVudGhlciBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIERvbm4gU2VlbGV5IGF0IFVVTkVUIFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKiBBUkdTVVNFRCAqLworc3RhdGljIGludAorZW9mcmVhZCh2b2lkICpjb29raWUsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKworCXJldHVybiAoMCk7Cit9CisKK2ludAordnNzY2FuZihjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZtdCwgX192YV9saXN0IGFwKQoreworCUZJTEUgZjsKKwlzdHJ1Y3QgX19zZmlsZWV4dCBmZXh0OworCisJX0ZJTEVFWFRfU0VUVVAoJmYsICZmZXh0KTsKKwlmLl9mbGFncyA9IF9fU1JEOworCWYuX2JmLl9iYXNlID0gZi5fcCA9ICh1bnNpZ25lZCBjaGFyICopc3RyOworCWYuX2JmLl9zaXplID0gZi5fciA9IHN0cmxlbihzdHIpOworCWYuX3JlYWQgPSBlb2ZyZWFkOworCWYuX2xiLl9iYXNlID0gTlVMTDsKKwlyZXR1cm4gKF9fc3Zmc2NhbmYoJmYsIGZtdCwgYXApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92c3dwcmludGYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92c3dwcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTdjNGRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zzd3ByaW50Zi5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCSRPcGVuQlNEOiB2c3dwcmludGYuYyx2IDEuNCAyMDEyLzEyLzA1IDIzOjIwOjAxIGRlcmFhZHQgRXhwICQJKi8KKy8qCSROZXRCU0Q6IHZzd3ByaW50Zi5jLHYgMS4xIDIwMDUvMDUvMTQgMjM6NTE6MDIgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NyBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKKyAqIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKKyAqIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCitpbnQKK3Zzd3ByaW50Zih3Y2hhcl90ICogX19yZXN0cmljdCBzLCBzaXplX3QgbiwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgZm10LAorICAgIF9fdmFfbGlzdCBhcCkKK3sKKwltYnN0YXRlX3QgbWJzOworCUZJTEUgZjsKKwljaGFyICptYnA7CisJaW50IHJldCwgc3ZlcnJubzsKKwlzaXplX3QgbndjOworCXN0cnVjdCBfX3NmaWxlZXh0IGZleHQ7CisKKwlpZiAobiA9PSAwKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlfRklMRUVYVF9TRVRVUCgmZiwgJmZleHQpOworCWYuX2ZpbGUgPSAtMTsKKwlmLl9mbGFncyA9IF9fU1dSIHwgX19TU1RSIHwgX19TQUxDOworCWYuX2JmLl9iYXNlID0gZi5fcCA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKDEyOCk7CisJaWYgKGYuX2JmLl9iYXNlID09IE5VTEwpIHsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiAoLTEpOworCX0KKwlmLl9iZi5fc2l6ZSA9IGYuX3cgPSAxMjc7CQkvKiBMZWF2ZSByb29tIGZvciB0aGUgTlVMICovCisJcmV0ID0gX192ZndwcmludGYoJmYsIGZtdCwgYXApOworCWlmIChyZXQgPCAwKSB7CisJCXN2ZXJybm8gPSBlcnJubzsKKwkJZnJlZShmLl9iZi5fYmFzZSk7CisJCWVycm5vID0gc3ZlcnJubzsKKwkJcmV0dXJuICgtMSk7CisJfQorCWlmIChyZXQgPT0gMCkgeworCQlzWzBdID0gTCdcMCc7CisJCWZyZWUoZi5fYmYuX2Jhc2UpOworCQlyZXR1cm4gKDApOworCX0KKwkqZi5fcCA9ICdcMCc7CisJbWJwID0gKGNoYXIgKilmLl9iZi5fYmFzZTsKKwkvKgorCSAqIFhYWCBVbmRvIHRoZSBjb252ZXJzaW9uIGZyb20gd2lkZSBjaGFyYWN0ZXJzIHRvIG11bHRpYnl0ZSB0aGF0CisJICogZnB1dHdjKCkgZGlkIGluIF9fdmZ3cHJpbnRmKCkuCisJICovCisJYnplcm8oJm1icywgc2l6ZW9mKG1icykpOworCW53YyA9IG1ic3J0b3djcyhzLCAoY29uc3QgY2hhciAqKikmbWJwLCBuLCAmbWJzKTsKKwlmcmVlKGYuX2JmLl9iYXNlKTsKKwlpZiAobndjID09IChzaXplX3QpLTEpIHsKKwkJZXJybm8gPSBFSUxTRVE7CisJCXJldHVybiAoLTEpOworCX0KKwlpZiAobndjID09IG4pIHsKKwkJc1tuIC0gMV0gPSBMJ1wwJzsKKwkJZXJybm8gPSBFT1ZFUkZMT1c7CisJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92c3dzY2FuZi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zzd3NjYW5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhYTI1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92c3dzY2FuZi5jCkBAIC0wLDAgKzEsODggQEAKKy8qICRPcGVuQlNEOiB2c3dzY2FuZi5jLHYgMS4yIDIwMTIvMTIvMDUgMjM6MjA6MDEgZGVyYWFkdCBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogRG9ubiBTZWVsZXkgYXQgVVVORVQgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworc3RhdGljIGludAllb2ZyZWFkKHZvaWQgKiwgY2hhciAqLCBpbnQpOworCitzdGF0aWMgaW50Citlb2ZyZWFkKHZvaWQgKmNvb2tpZSwgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXJldHVybiAoMCk7Cit9CisKK2ludAordnN3c2NhbmYoY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3Qgc3RyLCBjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBmbXQsCisgICAgX192YV9saXN0IGFwKQoreworCW1ic3RhdGVfdCBtYnM7CisJRklMRSBmOworCXN0cnVjdCBfX3NmaWxlZXh0IGZleHQ7CisJY2hhciAqbWJzdHI7CisJc2l6ZV90IGxlbiwgbWxlbjsKKwlpbnQgcjsKKwljb25zdCB3Y2hhcl90ICpzdHJwOworCisJLyoKKwkgKiBYWFggQ29udmVydCB0aGUgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nIHRvIG11bHRpYnl0ZSwgd2hpY2gKKwkgKiBfX3Zmd3NjYW5mKCkgd2lsbCBjb252ZXJ0IGJhY2sgdG8gd2lkZSBjaGFyYWN0ZXJzLgorCSAqLworCWxlbiA9IHdjc2xlbihzdHIpICogTUJfQ1VSX01BWDsKKwlpZiAoKG1ic3RyID0gbWFsbG9jKGxlbiArIDEpKSA9PSBOVUxMKQorCQlyZXR1cm4gKEVPRik7CisJYnplcm8oJm1icywgc2l6ZW9mKG1icykpOworCXN0cnAgPSBzdHI7CisJaWYgKChtbGVuID0gd2NzcnRvbWJzKG1ic3RyLCAmc3RycCwgbGVuLCAmbWJzKSkgPT0gKHNpemVfdCktMSkgeworCQlmcmVlKG1ic3RyKTsKKwkJcmV0dXJuIChFT0YpOworCX0KKwlpZiAobWxlbiA9PSBsZW4pCisJCW1ic3RyW2xlbl0gPSAnXDAnOworCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7CisJZi5fZmxhZ3MgPSBfX1NSRDsKKwlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKW1ic3RyOworCWYuX2JmLl9zaXplID0gZi5fciA9IG1sZW47CisJZi5fcmVhZCA9IGVvZnJlYWQ7CisJZi5fbGIuX2Jhc2UgPSBOVUxMOworCXIgPSBfX3Zmd3NjYW5mKCZmLCBmbXQsIGFwKTsKKwlmcmVlKG1ic3RyKTsKKworCXJldHVybiAocik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdndwcmludGYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92d3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NTY5YzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdndwcmludGYuYwpAQCAtMCwwICsxLDQyIEBACisvKgkkT3BlbkJTRDogdndwcmludGYuYyx2IDEuMyAyMDExLzA0LzI4IDE3OjM4OjQ2IHN0c3AgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworaW50Cit2d3ByaW50Zihjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBmbXQsIF9fdmFfbGlzdCBhcCkKK3sKKwlyZXR1cm4gKHZmd3ByaW50ZihzdGRvdXQsIGZtdCwgYXApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92d3NjYW5mLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdndzY2FuZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMzlmMDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdndzY2FuZi5jCkBAIC0wLDAgKzEsMzggQEAKKy8qICRPcGVuQlNEOiB2d3NjYW5mLmMsdiAxLjIgMjAxMi8xMi8wNSAyMzoyMDowMSBkZXJhYWR0IEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAyIFRpbSBKLiBSb2JiaW5zCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKK2ludAordndzY2FuZihjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBmbXQsIF9fdmFfbGlzdCBhcCkKK3sKKworCXJldHVybiAodmZ3c2NhbmYoc3RkaW4sIGZtdCwgYXApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby93YnVmLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vd2J1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYTAwZTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vd2J1Zi5jCkBAIC0wLDAgKzEsODQgQEAKKy8qCSRPcGVuQlNEOiB3YnVmLmMsdiAxLjEyIDIwMDkvMTEvMDkgMDA6MTg6Mjgga3VydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBXcml0ZSB0aGUgZ2l2ZW4gY2hhcmFjdGVyIGludG8gdGhlIChwcm9iYWJseSBmdWxsKSBidWZmZXIgZm9yCisgKiB0aGUgZ2l2ZW4gZmlsZS4gIEZsdXNoIHRoZSBidWZmZXIgb3V0IGlmIGl0IGlzIG9yIGJlY29tZXMgZnVsbCwKKyAqIG9yIGlmIGM9PSdcbicgYW5kIHRoZSBmaWxlIGlzIGxpbmUgYnVmZmVyZWQuCisgKi8KK2ludAorX19zd2J1ZihpbnQgYywgRklMRSAqZnApCit7CisJaW50IG47CisKKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAtMSk7CisJLyoKKwkgKiBJbiBjYXNlIHdlIGNhbm5vdCB3cml0ZSwgb3IgbG9uZ2ptcCB0YWtlcyB1cyBvdXQgZWFybHksCisJICogbWFrZSBzdXJlIF93IGlzIDAgKGlmIGZ1bGx5LSBvciB1bi1idWZmZXJlZCkgb3IgLV9iZi5fc2l6ZQorCSAqIChpZiBsaW5lIGJ1ZmZlcmVkKSBzbyB0aGF0IHdlIHdpbGwgZ2V0IGNhbGxlZCBhZ2Fpbi4KKwkgKiBJZiB3ZSBkaWQgbm90IGRvIHRoaXMsIGEgc3VmZmljaWVudCBudW1iZXIgb2YgcHV0YygpCisJICogY2FsbHMgbWlnaHQgd3JhcCBfdyBmcm9tIG5lZ2F0aXZlIHRvIHBvc2l0aXZlLgorCSAqLworCWZwLT5fdyA9IGZwLT5fbGJmc2l6ZTsKKwlpZiAoY2FudHdyaXRlKGZwKSkgeworCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gKEVPRik7CisJfQorCWMgPSAodW5zaWduZWQgY2hhciljOworCisJLyoKKwkgKiBJZiBpdCBpcyBjb21wbGV0ZWx5IGZ1bGwsIGZsdXNoIGl0IG91dC4gIFRoZW4sIGluIGFueSBjYXNlLAorCSAqIHN0dWZmIGMgaW50byB0aGUgYnVmZmVyLiAgSWYgdGhpcyBjYXVzZXMgdGhlIGJ1ZmZlciB0byBmaWxsCisJICogY29tcGxldGVseSwgb3IgaWYgYyBpcyAnXG4nIGFuZCB0aGUgZmlsZSBpcyBsaW5lIGJ1ZmZlcmVkLAorCSAqIGZsdXNoIGl0IChwZXJoYXBzIGEgc2Vjb25kIHRpbWUpLiAgVGhlIHNlY29uZCBmbHVzaCB3aWxsIGFsd2F5cworCSAqIGhhcHBlbiBvbiB1bmJ1ZmZlcmVkIHN0cmVhbXMsIHdoZXJlIF9iZi5fc2l6ZT09MTsgX19zZmx1c2goKQorCSAqIGd1YXJhbnRlZXMgdGhhdCBwdXRjKCkgd2lsbCBhbHdheXMgY2FsbCB3YnVmKCkgYnkgc2V0dGluZyBfdworCSAqIHRvIDAsIHNvIHdlIG5lZWQgbm90IGRvIGFueXRoaW5nIGVsc2UuCisJICovCisJbiA9IGZwLT5fcCAtIGZwLT5fYmYuX2Jhc2U7CisJaWYgKG4gPj0gZnAtPl9iZi5fc2l6ZSkgeworCQlpZiAoX19zZmx1c2goZnApKQorCQkJcmV0dXJuIChFT0YpOworCQluID0gMDsKKwl9CisJZnAtPl93LS07CisJKmZwLT5fcCsrID0gYzsKKwlpZiAoKytuID09IGZwLT5fYmYuX3NpemUgfHwgKGZwLT5fZmxhZ3MgJiBfX1NMQkYgJiYgYyA9PSAnXG4nKSkKKwkJaWYgKF9fc2ZsdXNoKGZwKSkKKwkJCXJldHVybiAoRU9GKTsKKwlyZXR1cm4gKGMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3dwcmludGYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby93cHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3YWJiNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby93cHJpbnRmLmMKQEAgLTAsMCArMSw0OCBAQAorLyoJJE9wZW5CU0Q6IHdwcmludGYuYyx2IDEuMyAyMDExLzA0LzI4IDE3OjM4OjQ2IHN0c3AgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworaW50Cit3cHJpbnRmKGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IGZtdCwgLi4uKQoreworCWludCByZXQ7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHZmd3ByaW50ZihzdGRvdXQsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3dzY2FuZi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3dzY2FuZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YzA4MjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vd3NjYW5mLmMKQEAgLTAsMCArMSw0NCBAQAorLyogJE9wZW5CU0Q6IHdzY2FuZi5jLHYgMS4yIDIwMTIvMTIvMDUgMjM6MjA6MDEgZGVyYWFkdCBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMiBUaW0gSi4gUm9iYmlucworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCitpbnQKK3dzY2FuZihjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCByOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJciA9IHZmd3NjYW5mKHN0ZGluLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJcmV0dXJuIChyKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby93c2V0dXAuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby93c2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODM0MjIzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3dzZXR1cC5jCkBAIC0wLDAgKzEsODYgQEAKKy8qCSRPcGVuQlNEOiB3c2V0dXAuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBWYXJpb3VzIG91dHB1dCByb3V0aW5lcyBjYWxsIHdzZXR1cCB0byBiZSBzdXJlIGl0IGlzIHNhZmUgdG8gd3JpdGUsCisgKiBiZWNhdXNlIGVpdGhlciBfZmxhZ3MgZG9lcyBub3QgaW5jbHVkZSBfX1NXUiwgb3IgX2J1ZiBpcyBOVUxMLgorICogX3dzZXR1cCByZXR1cm5zIDAgaWYgT0sgdG8gd3JpdGUsIG5vbnplcm8gb3RoZXJ3aXNlLgorICovCitpbnQKK19fc3dzZXR1cChGSUxFICpmcCkKK3sKKwkvKiBtYWtlIHN1cmUgc3RkaW8gaXMgc2V0IHVwICovCisJaWYgKCFfX3NkaWRpbml0KQorCQlfX3Npbml0KCk7CisKKwkvKgorCSAqIElmIHdlIGFyZSBub3Qgd3JpdGluZywgd2UgaGFkIGJldHRlciBiZSByZWFkaW5nIGFuZCB3cml0aW5nLgorCSAqLworCWlmICgoZnAtPl9mbGFncyAmIF9fU1dSKSA9PSAwKSB7CisJCWlmICgoZnAtPl9mbGFncyAmIF9fU1JXKSA9PSAwKQorCQkJcmV0dXJuIChFT0YpOworCQlpZiAoZnAtPl9mbGFncyAmIF9fU1JEKSB7CisJCQkvKiBjbG9iYmVyIGFueSB1bmdldGMgZGF0YSAqLworCQkJaWYgKEhBU1VCKGZwKSkKKwkJCQlGUkVFVUIoZnApOworCQkJZnAtPl9mbGFncyAmPSB+KF9fU1JEfF9fU0VPRik7CisJCQlmcC0+X3IgPSAwOworCQkJZnAtPl9wID0gZnAtPl9iZi5fYmFzZTsKKwkJfQorCQlmcC0+X2ZsYWdzIHw9IF9fU1dSOworCX0KKworCS8qCisJICogTWFrZSBhIGJ1ZmZlciBpZiBuZWNlc3NhcnksIHRoZW4gc2V0IF93LgorCSAqLworCWlmIChmcC0+X2JmLl9iYXNlID09IE5VTEwpIHsKKwkJaWYgKChmcC0+X2ZsYWdzICYgKF9fU1NUUiB8IF9fU0FMQykpID09IF9fU1NUUikKKwkJCXJldHVybiAoRU9GKTsKKwkJX19zbWFrZWJ1ZihmcCk7CisJfQorCWlmIChmcC0+X2ZsYWdzICYgX19TTEJGKSB7CisJCS8qCisJCSAqIEl0IGlzIGxpbmUgYnVmZmVyZWQsIHNvIG1ha2UgX2xiZnNpemUgYmUgLV9idWZzaXplCisJCSAqIGZvciB0aGUgcHV0YygpIG1hY3JvLiAgV2Ugd2lsbCBjaGFuZ2UgX2xiZnNpemUgYmFjaworCQkgKiB0byAwIHdoZW5ldmVyIHdlIHR1cm4gb2ZmIF9fU1dSLgorCQkgKi8KKwkJZnAtPl93ID0gMDsKKwkJZnAtPl9sYmZzaXplID0gLWZwLT5fYmYuX3NpemU7CisJfSBlbHNlCisJCWZwLT5fdyA9IGZwLT5fZmxhZ3MgJiBfX1NOQkYgPyAwIDogZnAtPl9iZi5fc2l6ZTsKKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9hdGV4aXQuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvYXRleGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUzMmIzOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvYXRleGl0LmMKQEAgLTAsMCArMSwyMDIgQEAKKy8qCSRPcGVuQlNEOiBhdGV4aXQuYyx2IDEuMjAgMjAxNC8wNy8xMSAwOTo1MTozNyBrZXR0ZW5pcyBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMiBEYW5pZWwgSGFydG1laWVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAiYXRleGl0LmgiCisjaW5jbHVkZSAidGhyZWFkX3ByaXZhdGUuaCIKKworc3RydWN0IGF0ZXhpdCAqX19hdGV4aXQ7CitzdGF0aWMgaW50IHJlc3RhcnRsb29wOworCisvKgorICogRnVuY3Rpb24gcG9pbnRlcnMgYXJlIHN0b3JlZCBpbiBhIGxpbmtlZCBsaXN0IG9mIHBhZ2VzLiBUaGUgbGlzdAorICogaXMgaW5pdGlhbGx5IGVtcHR5LCBhbmQgcGFnZXMgYXJlIGFsbG9jYXRlZCBvbiBkZW1hbmQuIFRoZSBmaXJzdAorICogZnVuY3Rpb24gcG9pbnRlciBpbiB0aGUgZmlyc3QgYWxsb2NhdGVkIHBhZ2UgKHRoZSBsYXN0IG9uZSBpbgorICogdGhlIGxpbmtlZCBsaXN0KSBpcyByZXNlcnZlZCBmb3IgdGhlIGNsZWFudXAgZnVuY3Rpb24uCisgKgorICogT3V0c2lkZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucywgYWxsIHBhZ2VzIGFyZSBtcHJvdGVjdCgpJ2VkCisgKiB0byBwcmV2ZW50IHVuaW50ZW50aW9uYWwvbWFsaWNpb3VzIGNvcnJ1cHRpb24uCisgKi8KKworLyoKKyAqIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgcGVyZm9ybWVkIGF0IGV4aXQgb3Igd2hlbiBhIHNoYXJlZCBvYmplY3QKKyAqIHdpdGggdGhlIGdpdmVuIGRzbyBoYW5kbGUgaXMgdW5sb2FkZWQgZHluYW1pY2FsbHkuICBBbHNvIHVzZWQgYXMKKyAqIHRoZSBiYWNrZW5kIGZvciBhdGV4aXQoKS4gIEZvciBtb3JlIGluZm8gb24gdGhpcyBBUEksIHNlZToKKyAqCisgKglodHRwOi8vd3d3LmNvZGVzb3VyY2VyeS5jb20vY3h4LWFiaS9hYmkuaHRtbCNkc28tZHRvcgorICovCitpbnQKK19fY3hhX2F0ZXhpdCh2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqYXJnLCB2b2lkICpkc28pCit7CisJc3RydWN0IGF0ZXhpdCAqcCA9IF9fYXRleGl0OworCXN0cnVjdCBhdGV4aXRfZm4gKmZucDsKKwlpbnQgcGdzaXplID0gZ2V0cGFnZXNpemUoKTsKKwlpbnQgcmV0ID0gLTE7CisKKwlpZiAocGdzaXplIDwgc2l6ZW9mKCpwKSkKKwkJcmV0dXJuICgtMSk7CisJX0FURVhJVF9MT0NLKCk7CisJcCA9IF9fYXRleGl0OworCWlmIChwICE9IE5VTEwpIHsKKwkJaWYgKHAtPmluZCArIDEgPj0gcC0+bWF4KQorCQkJcCA9IE5VTEw7CisJCWVsc2UgaWYgKG1wcm90ZWN0KHAsIHBnc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpCisJCQlnb3RvIHVubG9jazsKKwl9CisJaWYgKHAgPT0gTlVMTCkgeworCQlwID0gbW1hcChOVUxMLCBwZ3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisJCSAgICBNQVBfQU5PTiB8IE1BUF9QUklWQVRFLCAtMSwgMCk7CisJCWlmIChwID09IE1BUF9GQUlMRUQpCisJCQlnb3RvIHVubG9jazsKKwkJaWYgKF9fYXRleGl0ID09IE5VTEwpIHsKKwkJCW1lbXNldCgmcC0+Zm5zWzBdLCAwLCBzaXplb2YocC0+Zm5zWzBdKSk7CisJCQlwLT5pbmQgPSAxOworCQl9IGVsc2UKKwkJCXAtPmluZCA9IDA7CisJCXAtPm1heCA9IChwZ3NpemUgLSAoKGNoYXIgKikmcC0+Zm5zWzBdIC0gKGNoYXIgKilwKSkgLworCQkgICAgc2l6ZW9mKHAtPmZuc1swXSk7CisJCXAtPm5leHQgPSBfX2F0ZXhpdDsKKwkJX19hdGV4aXQgPSBwOworCX0KKwlmbnAgPSAmcC0+Zm5zW3AtPmluZCsrXTsKKwlmbnAtPmZuX3B0ciA9IGZ1bmM7CisJZm5wLT5mbl9hcmcgPSBhcmc7CisJZm5wLT5mbl9kc28gPSBkc287CisJaWYgKG1wcm90ZWN0KHAsIHBnc2l6ZSwgUFJPVF9SRUFEKSkKKwkJZ290byB1bmxvY2s7CisJcmVzdGFydGxvb3AgPSAxOworCXJldCA9IDA7Cit1bmxvY2s6CisJX0FURVhJVF9VTkxPQ0soKTsKKwlyZXR1cm4gKHJldCk7Cit9CisKKy8qCisgKiBDYWxsIGFsbCBoYW5kbGVycyByZWdpc3RlcmVkIHdpdGggX19jeGFfYXRleGl0KCkgZm9yIHRoZSBzaGFyZWQKKyAqIG9iamVjdCBvd25pbmcgJ2RzbycuCisgKiBOb3RlOiBpZiAnZHNvJyBpcyBOVUxMLCB0aGVuIGFsbCByZW1haW5pbmcgaGFuZGxlcnMgYXJlIGNhbGxlZC4KKyAqLwordm9pZAorX19jeGFfZmluYWxpemUodm9pZCAqZHNvKQoreworCXN0cnVjdCBhdGV4aXQgKnAsICpxOworCXN0cnVjdCBhdGV4aXRfZm4gZm47CisJaW50IG4sIHBnc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisJc3RhdGljIGludCBjYWxsX2RlcHRoOworCisJX0FURVhJVF9MT0NLKCk7CisJY2FsbF9kZXB0aCsrOworCityZXN0YXJ0OgorCXJlc3RhcnRsb29wID0gMDsKKwlmb3IgKHAgPSBfX2F0ZXhpdDsgcCAhPSBOVUxMOyBwID0gcC0+bmV4dCkgeworCQlmb3IgKG4gPSBwLT5pbmQ7IC0tbiA+PSAwOykgeworCQkJaWYgKHAtPmZuc1tuXS5mbl9wdHIgPT0gTlVMTCkKKwkJCQljb250aW51ZTsJLyogYWxyZWFkeSBjYWxsZWQgKi8KKwkJCWlmIChkc28gIT0gTlVMTCAmJiBkc28gIT0gcC0+Zm5zW25dLmZuX2RzbykKKwkJCQljb250aW51ZTsJLyogd3JvbmcgRFNPICovCisKKwkJCS8qCisJCQkgKiBNYXJrIGhhbmRsZXIgYXMgaGF2aW5nIGJlZW4gYWxyZWFkeSBjYWxsZWQgdG8gYXZvaWQKKwkJCSAqIGR1cGVzIGFuZCBsb29wcywgdGhlbiBjYWxsIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbi4KKwkJCSAqLworCQkJZm4gPSBwLT5mbnNbbl07CisJCQlpZiAobXByb3RlY3QocCwgcGdzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSA9PSAwKSB7CisJCQkJcC0+Zm5zW25dLmZuX3B0ciA9IE5VTEw7CisJCQkJbXByb3RlY3QocCwgcGdzaXplLCBQUk9UX1JFQUQpOworCQkJfQorCQkJX0FURVhJVF9VTkxPQ0soKTsKKwkJCSgqZm4uZm5fcHRyKShmbi5mbl9hcmcpOworCQkJX0FURVhJVF9MT0NLKCk7CisJCQlpZiAocmVzdGFydGxvb3ApCisJCQkJZ290byByZXN0YXJ0OworCQl9CisJfQorCisJY2FsbF9kZXB0aC0tOworCisJLyoKKwkgKiBJZiBjYWxsZWQgdmlhIGV4aXQoKSwgdW5tYXAgdGhlIHBhZ2VzIHNpbmNlIHdlIGhhdmUgbm93IHJ1bgorCSAqIGFsbCB0aGUgaGFuZGxlcnMuICBXZSBkZWZlciB0aGlzIHVudGlsIGNhbGxkZXB0aCA9PSAwIHNvIHRoYXQKKwkgKiB3ZSBkb24ndCB1bm1hcCB0aGluZ3MgcHJlbWF0dXJlbHkgaWYgY2FsbGVkIHJlY3Vyc2l2ZWx5LgorCSAqLworCWlmIChkc28gPT0gTlVMTCAmJiBjYWxsX2RlcHRoID09IDApIHsKKwkJZm9yIChwID0gX19hdGV4aXQ7IHAgIT0gTlVMTDsgKSB7CisJCQlxID0gcDsKKwkJCXAgPSBwLT5uZXh0OworCQkJbXVubWFwKHEsIHBnc2l6ZSk7CisJCX0KKwkJX19hdGV4aXQgPSBOVUxMOworCX0KKwlfQVRFWElUX1VOTE9DSygpOworfQorCisvKgorICogUmVnaXN0ZXIgdGhlIGNsZWFudXAgZnVuY3Rpb24KKyAqLwordm9pZAorX19hdGV4aXRfcmVnaXN0ZXJfY2xlYW51cCh2b2lkICgqZnVuYykodm9pZCkpCit7CisJc3RydWN0IGF0ZXhpdCAqcDsKKwlpbnQgcGdzaXplID0gZ2V0cGFnZXNpemUoKTsKKworCWlmIChwZ3NpemUgPCBzaXplb2YoKnApKQorCQlyZXR1cm47CisJX0FURVhJVF9MT0NLKCk7CisJcCA9IF9fYXRleGl0OworCXdoaWxlIChwICE9IE5VTEwgJiYgcC0+bmV4dCAhPSBOVUxMKQorCQlwID0gcC0+bmV4dDsKKwlpZiAocCA9PSBOVUxMKSB7CisJCXAgPSBtbWFwKE5VTEwsIHBnc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKwkJICAgIE1BUF9BTk9OIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTsKKwkJaWYgKHAgPT0gTUFQX0ZBSUxFRCkKKwkJCWdvdG8gdW5sb2NrOworCQlwLT5pbmQgPSAxOworCQlwLT5tYXggPSAocGdzaXplIC0gKChjaGFyICopJnAtPmZuc1swXSAtIChjaGFyICopcCkpIC8KKwkJICAgIHNpemVvZihwLT5mbnNbMF0pOworCQlwLT5uZXh0ID0gTlVMTDsKKwkJX19hdGV4aXQgPSBwOworCX0gZWxzZSB7CisJCWlmIChtcHJvdGVjdChwLCBwZ3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKQorCQkJZ290byB1bmxvY2s7CisJfQorCXAtPmZuc1swXS5mbl9wdHIgPSAodm9pZCAoKikodm9pZCAqKSlmdW5jOworCXAtPmZuc1swXS5mbl9hcmcgPSBOVUxMOworCXAtPmZuc1swXS5mbl9kc28gPSBOVUxMOworCW1wcm90ZWN0KHAsIHBnc2l6ZSwgUFJPVF9SRUFEKTsKKwlyZXN0YXJ0bG9vcCA9IDE7Cit1bmxvY2s6CisJX0FURVhJVF9VTkxPQ0soKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvYXRleGl0LmggYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2F0ZXhpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZTJhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2F0ZXhpdC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCSRPcGVuQlNEOiBhdGV4aXQuaCx2IDEuOSAyMDE0LzA2LzE4IDE5OjAxOjEwIGtldHRlbmlzIEV4cCAkICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgRGFuaWVsIEhhcnRtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKK3N0cnVjdCBhdGV4aXQgeworCXN0cnVjdCBhdGV4aXQgKm5leHQ7CQkvKiBuZXh0IGluIGxpc3QgKi8KKwlpbnQgaW5kOwkJCS8qIG5leHQgaW5kZXggaW4gdGhpcyB0YWJsZSAqLworCWludCBtYXg7CQkJLyogbWF4IGVudHJpZXMgPj0gQVRFWElUX1NJWkUgKi8KKwlzdHJ1Y3QgYXRleGl0X2ZuIHsKKwkJdm9pZCAoKmZuX3B0cikodm9pZCAqKTsKKwkJdm9pZCAqZm5fYXJnOwkJLyogYXJndW1lbnQgZm9yIENYQSBjYWxsYmFjayAqLworCQl2b2lkICpmbl9kc287CQkvKiBzaGFyZWQgbW9kdWxlIGhhbmRsZSAqLworCX0gZm5zWzFdOwkJCS8qIHRoZSB0YWJsZSBpdHNlbGYgKi8KK307CisKK2V4dGVybiBzdHJ1Y3QgYXRleGl0ICpfX2F0ZXhpdDsJCS8qIHBvaW50cyB0byBoZWFkIG9mIExJRk8gc3RhY2sgKi8KKworaW50CV9fY3hhX2F0ZXhpdCh2b2lkICgqKSh2b2lkICopLCB2b2lkICosIHZvaWQgKik7Cit2b2lkCV9fY3hhX2ZpbmFsaXplKHZvaWQgKik7CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2F0b2kuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvYXRvaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwODQyNjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2F0b2kuYwpAQCAtMCwwICsxLDM3IEBACisvKgkkT3BlbkJTRDogYXRvaS5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODggUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitpbnQKK2F0b2koY29uc3QgY2hhciAqc3RyKQoreworCXJldHVybigoaW50KXN0cnRvbChzdHIsIChjaGFyICoqKU5VTEwsIDEwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2F0b2wuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvYXRvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NzA4MDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2F0b2wuYwpAQCAtMCwwICsxLDM3IEBACisvKgkkT3BlbkJTRDogYXRvbC5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODggUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitsb25nCithdG9sKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlyZXR1cm4oc3RydG9sKHN0ciwgKGNoYXIgKiopTlVMTCwgMTApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvYXRvbGwuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvYXRvbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjVlNjgyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9hdG9sbC5jCkBAIC0wLDAgKzEsMzggQEAKKy8qCSRPcGVuQlNEOiBhdG9sbC5jLHYgMS4zIDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODggUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitsb25nIGxvbmcKK2F0b2xsKHN0cikKKwljb25zdCBjaGFyICpzdHI7Cit7CisJcmV0dXJuKHN0cnRvbGwoc3RyLCAoY2hhciAqKilOVUxMLCAxMCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9leGl0LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2V4aXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2ZlM2QyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9leGl0LmMKQEAgLTAsMCArMSw1OSBAQAorLyoJJE9wZW5CU0Q6IGV4aXQuYyx2IDEuMTIgMjAwNy8wOS8wMyAxNDo0MDoxNiBtaWxsZXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAiYXRleGl0LmgiCisjaW5jbHVkZSAidGhyZWFkX3ByaXZhdGUuaCIKKworLyoKKyAqIFRoaXMgdmFyaWFibGUgaXMgemVybyB1bnRpbCBhIHByb2Nlc3MgaGFzIGNyZWF0ZWQgYSB0aHJlYWQuCisgKiBJdCBpcyB1c2VkIHRvIGF2b2lkIGNhbGxpbmcgbG9ja2luZyBmdW5jdGlvbnMgaW4gbGliYyB3aGVuIHRoZXkKKyAqIGFyZSBub3QgcmVxdWlyZWQuIEJ5IGRlZmF1bHQsIGxpYmMgaXMgaW50ZW5kZWQgdG8gYmUoY29tZSkKKyAqIHRocmVhZC1zYWZlLCBidXQgd2l0aG91dCBhIChzaWduaWZpY2FudCkgcGVuYWx0eSB0byBub24tdGhyZWFkZWQKKyAqIHByb2Nlc3Nlcy4KKyAqLworaW50ICAgICBfX2lzdGhyZWFkZWQgICAgPSAwOworCisvKgorICogRXhpdCwgZmx1c2hpbmcgc3RkaW8gYnVmZmVycyBpZiBuZWNlc3NhcnkuCisgKi8KK3ZvaWQKK2V4aXQoaW50IHN0YXR1cykKK3sKKwkvKgorCSAqIENhbGwgZnVuY3Rpb25zIHJlZ2lzdGVyZWQgYnkgYXRleGl0KCkgb3IgX2N4YV9hdGV4aXQoKQorCSAqIChpbmNsdWRpbmcgdGhlIHN0ZGlvIGNsZWFudXAgcm91dGluZSkgYW5kIHRoZW4gX2V4aXQoKS4KKwkgKi8KKwlfX2N4YV9maW5hbGl6ZShOVUxMKTsKKwlfZXhpdChzdGF0dXMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9nZXRlbnYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvZ2V0ZW52LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ4NDgyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvZ2V0ZW52LmMKQEAgLTAsMCArMSw4MSBAQAorLyoJJE9wZW5CU0Q6IGdldGVudi5jLHYgMS4xMCAyMDEwLzA4LzIzIDIyOjMxOjUwIG1pbGxlcnQgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODcsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2NoYXIgKl9fZmluZGVudihjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgKm9mZnNldCk7CisKKy8qCisgKiBfX2ZpbmRlbnYgLS0KKyAqCVJldHVybnMgcG9pbnRlciB0byB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggbmFtZSwgaWYgYW55LCBlbHNlIE5VTEwuCisgKglTdGFydHMgc2VhcmNoaW5nIHdpdGhpbiB0aGUgZW52aXJvbm1lbnRhbCBhcnJheSBhdCBvZmZzZXQuCisgKglTZXRzIG9mZnNldCB0byBiZSB0aGUgb2Zmc2V0IG9mIHRoZSBuYW1lL3ZhbHVlIGNvbWJpbmF0aW9uIGluIHRoZQorICoJZW52aXJvbm1lbnRhbCBhcnJheSwgZm9yIHVzZSBieSBwdXRlbnYoMyksIHNldGVudigzKSBhbmQgdW5zZXRlbnYoMykuCisgKglFeHBsaWNpdGx5IHJlbW92ZXMgJz0nIGluIGFyZ3VtZW50IG5hbWUuCisgKgorICoJVGhpcyByb3V0aW5lICpzaG91bGQqIGJlIGEgc3RhdGljOyBkb24ndCB1c2UgaXQuCisgKi8KK2NoYXIgKgorX19maW5kZW52KGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIGludCAqb2Zmc2V0KQoreworCWV4dGVybiBjaGFyICoqZW52aXJvbjsKKwlpbnQgaTsKKwljb25zdCBjaGFyICpucDsKKwljaGFyICoqcCwgKmNwOworCisJaWYgKG5hbWUgPT0gTlVMTCB8fCBlbnZpcm9uID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJZm9yIChwID0gZW52aXJvbiArICpvZmZzZXQ7IChjcCA9ICpwKSAhPSBOVUxMOyArK3ApIHsKKwkJZm9yIChucCA9IG5hbWUsIGkgPSBsZW47IGkgJiYgKmNwOyBpLS0pCisJCQlpZiAoKmNwKysgIT0gKm5wKyspCisJCQkJYnJlYWs7CisJCWlmIChpID09IDAgJiYgKmNwKysgPT0gJz0nKSB7CisJCQkqb2Zmc2V0ID0gcCAtIGVudmlyb247CisJCQlyZXR1cm4gKGNwKTsKKwkJfQorCX0KKwlyZXR1cm4gKE5VTEwpOworfQorCisvKgorICogZ2V0ZW52IC0tCisgKglSZXR1cm5zIHB0ciB0byB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggbmFtZSwgaWYgYW55LCBlbHNlIE5VTEwuCisgKi8KK2NoYXIgKgorZ2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IG9mZnNldCA9IDA7CisJY29uc3QgY2hhciAqbnA7CisKKwlmb3IgKG5wID0gbmFtZTsgKm5wICYmICpucCAhPSAnPSc7ICsrbnApCisJCTsKKwlyZXR1cm4gKF9fZmluZGVudihuYW1lLCAoaW50KShucCAtIG5hbWUpLCAmb2Zmc2V0KSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2xzZWFyY2guYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvbHNlYXJjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYWQwNWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2xzZWFyY2guYwpAQCAtMCwwICsxLDg0IEBACisvKgkkT3BlbkJTRDogbHNlYXJjaC5jLHYgMS41IDIwMTQvMDcvMTggMDQ6MTY6MDkgbWF0dGhldyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBSb2dlciBMLiBTbnlkZXIuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzZWFyY2guaD4KKwordHlwZWRlZiBpbnQgKCpjbXBfZm5fdCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworc3RhdGljIHZvaWQgKmxpbmVhcl9iYXNlKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QgKiwgc2l6ZV90LAorICAgIGNtcF9mbl90LCBpbnQpOworCit2b2lkICoKK2xzZWFyY2goY29uc3Qgdm9pZCAqa2V5LCB2b2lkICpiYXNlLCBzaXplX3QgKm5lbHAsIHNpemVfdCB3aWR0aCwKKyAgICAJY21wX2ZuX3QgY29tcGFyKQoreworCisJcmV0dXJuKGxpbmVhcl9iYXNlKGtleSwgYmFzZSwgbmVscCwgd2lkdGgsIGNvbXBhciwgMSkpOworfQorCit2b2lkICoKK2xmaW5kKGNvbnN0IHZvaWQgKmtleSwgY29uc3Qgdm9pZCAqYmFzZSwgc2l6ZV90ICpuZWxwLCBzaXplX3Qgd2lkdGgsCisJY21wX2ZuX3QgY29tcGFyKQoreworCXJldHVybihsaW5lYXJfYmFzZShrZXksIGJhc2UsIG5lbHAsIHdpZHRoLCBjb21wYXIsIDApKTsKK30KKworc3RhdGljIHZvaWQgKgorbGluZWFyX2Jhc2UoY29uc3Qgdm9pZCAqa2V5LCBjb25zdCB2b2lkICpiYXNlLCBzaXplX3QgKm5lbHAsIHNpemVfdCB3aWR0aCwKKwljbXBfZm5fdCBjb21wYXIsIGludCBhZGRfZmxhZykKK3sKKwljb25zdCBjaGFyICplbGVtZW50LCAqZW5kOworCisJZW5kID0gKGNvbnN0IGNoYXIgKiliYXNlICsgKm5lbHAgKiB3aWR0aDsKKwlmb3IgKGVsZW1lbnQgPSBiYXNlOyBlbGVtZW50IDwgZW5kOyBlbGVtZW50ICs9IHdpZHRoKQorCQlpZiAoIWNvbXBhcihrZXksIGVsZW1lbnQpKQkJLyoga2V5IGZvdW5kICovCisJCQlyZXR1cm4oKHZvaWQgKillbGVtZW50KTsKKworCWlmICghYWRkX2ZsYWcpCQkJCQkvKiBrZXkgbm90IGZvdW5kICovCisJCXJldHVybihOVUxMKTsKKworCS8qCisJICogVGhlIFVOSVggU3lzdGVtIFVzZXIncyBNYW51YWwsIDE5ODYgZWRpdGlvbiBjbGFpbXMgdGhhdAorCSAqIGEgTlVMTCBwb2ludGVyIGlzIHJldHVybmVkIGJ5IGxzZWFyY2ggd2l0aCBlcnJubyBzZXQKKwkgKiBhcHByb3ByaWF0ZWx5LCBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIHRhYmxlCisJICogdG8gYWRkIGEgbmV3IGl0ZW0uICBUaGlzIGNhbid0IGJlIGRvbmUgYXMgbm9uZSBvZiB0aGVzZQorCSAqIHJvdXRpbmVzIGhhdmUgYW55IG1ldGhvZCBvZiBkZXRlcm1pbmluZyB0aGUgc2l6ZSBvZiB0aGUKKwkgKiB0YWJsZS4gIFRoaXMgY29tbWVudCBpc24ndCBpbiB0aGUgMTk4Ni04NyBTeXN0ZW0gVgorCSAqIG1hbnVhbC4KKwkgKi8KKwkrKypuZWxwOworCW1lbWNweSgodm9pZCAqKWVuZCwga2V5LCB3aWR0aCk7CisJcmV0dXJuKCh2b2lkICopZW5kKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc2V0ZW52LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3NldGVudi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNjBmZGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3NldGVudi5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgkkT3BlbkJTRDogc2V0ZW52LmMsdiAxLjE0IDIwMTIvMDkvMjMgMTY6MDg6MDQgamVyZW15IEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg3IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitjaGFyICpfX2ZpbmRlbnYoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgaW50ICpvZmZzZXQpOworCitleHRlcm4gY2hhciAqKmVudmlyb247CitzdGF0aWMgY2hhciAqKmxhc3RlbnY7CQkJCS8qIGxhc3QgdmFsdWUgb2YgZW52aXJvbiAqLworCisvKgorICogcHV0ZW52IC0tCisgKglBZGQgYSBuYW1lPXZhbHVlIHN0cmluZyBkaXJlY3RseSB0byB0aGUgZW52aXJvbm1lbnRhbCwgcmVwbGFjaW5nCisgKglhbnkgY3VycmVudCB2YWx1ZS4KKyAqLworaW50CitwdXRlbnYoY2hhciAqc3RyKQoreworCWNoYXIgKipQLCAqY3A7CisJc2l6ZV90IGNudDsKKwlpbnQgb2Zmc2V0ID0gMDsKKworCWZvciAoY3AgPSBzdHI7ICpjcCAmJiAqY3AgIT0gJz0nOyArK2NwKQorCQk7CisJaWYgKCpjcCAhPSAnPScpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOwkJCS8qIG1pc3NpbmcgYD0nIGluIHN0cmluZyAqLworCX0KKworCWlmIChfX2ZpbmRlbnYoc3RyLCAoaW50KShjcCAtIHN0ciksICZvZmZzZXQpICE9IE5VTEwpIHsKKwkJZW52aXJvbltvZmZzZXQrK10gPSBzdHI7CisJCS8qIGNvdWxkIGJlIHNldCBtdWx0aXBsZSB0aW1lcyAqLworCQl3aGlsZSAoX19maW5kZW52KHN0ciwgKGludCkoY3AgLSBzdHIpLCAmb2Zmc2V0KSkgeworCQkJZm9yIChQID0gJmVudmlyb25bb2Zmc2V0XTs7ICsrUCkKKwkJCQlpZiAoISgqUCA9ICooUCArIDEpKSkKKwkJCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKiBjcmVhdGUgbmV3IHNsb3QgZm9yIHN0cmluZyAqLworCWZvciAoUCA9IGVudmlyb247ICpQICE9IE5VTEw7IFArKykKKwkJOworCWNudCA9IFAgLSBlbnZpcm9uOworCVAgPSAoY2hhciAqKilyZWFsbG9jKGxhc3RlbnYsIHNpemVvZihjaGFyICopICogKGNudCArIDIpKTsKKwlpZiAoIVApCisJCXJldHVybiAoLTEpOworCWlmIChsYXN0ZW52ICE9IGVudmlyb24pCisJCW1lbWNweShQLCBlbnZpcm9uLCBjbnQgKiBzaXplb2YoY2hhciAqKSk7CisJbGFzdGVudiA9IGVudmlyb24gPSBQOworCWVudmlyb25bY250XSA9IHN0cjsKKwllbnZpcm9uW2NudCArIDFdID0gTlVMTDsKKwlyZXR1cm4gKDApOworfQorCisvKgorICogc2V0ZW52IC0tCisgKglTZXQgdGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlICJuYW1lIiB0byBiZQorICoJInZhbHVlIi4gIElmIHJld3JpdGUgaXMgc2V0LCByZXBsYWNlIGFueSBjdXJyZW50IHZhbHVlLgorICovCitpbnQKK3NldGVudihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHJld3JpdGUpCit7CisJY2hhciAqQywgKipQOworCWNvbnN0IGNoYXIgKm5wOworCWludCBsX3ZhbHVlLCBvZmZzZXQgPSAwOworCisJaWYgKCFuYW1lIHx8ICEqbmFtZSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCWZvciAobnAgPSBuYW1lOyAqbnAgJiYgKm5wICE9ICc9JzsgKytucCkKKwkJOworCWlmICgqbnApIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOwkJCS8qIGhhcyBgPScgaW4gbmFtZSAqLworCX0KKworCWxfdmFsdWUgPSBzdHJsZW4odmFsdWUpOworCWlmICgoQyA9IF9fZmluZGVudihuYW1lLCAoaW50KShucCAtIG5hbWUpLCAmb2Zmc2V0KSkgIT0gTlVMTCkgeworCQlpbnQgdG1wb2ZmID0gb2Zmc2V0ICsgMTsKKwkJaWYgKCFyZXdyaXRlKQorCQkJcmV0dXJuICgwKTsKKyNpZiAwIC8qIFhYWCAtIGV4aXN0aW5nIGVudHJ5IG1heSBub3QgYmUgd3JpdGFibGUgKi8KKwkJaWYgKHN0cmxlbihDKSA+PSBsX3ZhbHVlKSB7CS8qIG9sZCBsYXJnZXI7IGNvcHkgb3ZlciAqLworCQkJd2hpbGUgKCgqQysrID0gKnZhbHVlKyspKQorCQkJCTsKKwkJCXJldHVybiAoMCk7CisJCX0KKyNlbmRpZgorCQkvKiBjb3VsZCBiZSBzZXQgbXVsdGlwbGUgdGltZXMgKi8KKwkJd2hpbGUgKF9fZmluZGVudihuYW1lLCAoaW50KShucCAtIG5hbWUpLCAmdG1wb2ZmKSkgeworCQkJZm9yIChQID0gJmVudmlyb25bdG1wb2ZmXTs7ICsrUCkKKwkJCQlpZiAoISgqUCA9ICooUCArIDEpKSkKKwkJCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgewkJCQkJLyogY3JlYXRlIG5ldyBzbG90ICovCisJCXNpemVfdCBjbnQ7CisKKwkJZm9yIChQID0gZW52aXJvbjsgKlAgIT0gTlVMTDsgUCsrKQorCQkJOworCQljbnQgPSBQIC0gZW52aXJvbjsKKwkJUCA9IChjaGFyICoqKXJlYWxsb2MobGFzdGVudiwgc2l6ZW9mKGNoYXIgKikgKiAoY250ICsgMikpOworCQlpZiAoIVApCisJCQlyZXR1cm4gKC0xKTsKKwkJaWYgKGxhc3RlbnYgIT0gZW52aXJvbikKKwkJCW1lbWNweShQLCBlbnZpcm9uLCBjbnQgKiBzaXplb2YoY2hhciAqKSk7CisJCWxhc3RlbnYgPSBlbnZpcm9uID0gUDsKKwkJb2Zmc2V0ID0gY250OworCQllbnZpcm9uW2NudCArIDFdID0gTlVMTDsKKwl9CisJaWYgKCEoZW52aXJvbltvZmZzZXRdID0JCQkvKiBuYW1lICsgYD0nICsgdmFsdWUgKi8KKwkgICAgbWFsbG9jKChzaXplX3QpKChpbnQpKG5wIC0gbmFtZSkgKyBsX3ZhbHVlICsgMikpKSkKKwkJcmV0dXJuICgtMSk7CisJZm9yIChDID0gZW52aXJvbltvZmZzZXRdOyAoKkMgPSAqbmFtZSsrKSAmJiAqQyAhPSAnPSc7ICsrQykKKwkJOworCWZvciAoKkMrKyA9ICc9JzsgKCpDKysgPSAqdmFsdWUrKyk7ICkKKwkJOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiB1bnNldGVudihuYW1lKSAtLQorICoJRGVsZXRlIGVudmlyb25tZW50YWwgdmFyaWFibGUgIm5hbWUiLgorICovCitpbnQKK3Vuc2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY2hhciAqKlA7CisJY29uc3QgY2hhciAqbnA7CisJaW50IG9mZnNldCA9IDA7CisKKwlpZiAoIW5hbWUgfHwgISpuYW1lKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisJZm9yIChucCA9IG5hbWU7ICpucCAmJiAqbnAgIT0gJz0nOyArK25wKQorCQk7CisJaWYgKCpucCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CQkJLyogaGFzIGA9JyBpbiBuYW1lICovCisJfQorCisJLyogY291bGQgYmUgc2V0IG11bHRpcGxlIHRpbWVzICovCisJd2hpbGUgKF9fZmluZGVudihuYW1lLCAoaW50KShucCAtIG5hbWUpLCAmb2Zmc2V0KSkgeworCQlmb3IgKFAgPSAmZW52aXJvbltvZmZzZXRdOzsgKytQKQorCQkJaWYgKCEoKlAgPSAqKFAgKyAxKSkpCisJCQkJYnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvaW1heC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b2ltYXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzc3ZjQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b2ltYXguYwpAQCAtMCwwICsxLDE0MCBAQAorLyoJJE9wZW5CU0Q6IHN0cnRvaW1heC5jLHYgMS4xIDIwMDYvMDEvMTMgMTc6NTg6MDkgbWlsbGVydCBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCisvKgorICogQ29udmVydCBhIHN0cmluZyB0byBhbiBpbnRtYXhfdAorICoKKyAqIElnbm9yZXMgYGxvY2FsZScgc3R1ZmYuICBBc3N1bWVzIHRoYXQgdGhlIHVwcGVyIGFuZCBsb3dlciBjYXNlCisgKiBhbHBoYWJldHMgYW5kIGRpZ2l0cyBhcmUgZWFjaCBjb250aWd1b3VzLgorICovCitpbnRtYXhfdAorc3RydG9pbWF4KGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQoreworCWNvbnN0IGNoYXIgKnM7CisJaW50bWF4X3QgYWNjLCBjdXRvZmY7CisJaW50IGM7CisJaW50IG5lZywgYW55LCBjdXRsaW07CisKKwkvKgorCSAqIFNraXAgd2hpdGUgc3BhY2UgYW5kIHBpY2sgdXAgbGVhZGluZyArLy0gc2lnbiBpZiBhbnkuCisJICogSWYgYmFzZSBpcyAwLCBhbGxvdyAweCBmb3IgaGV4IGFuZCAwIGZvciBvY3RhbCwgZWxzZQorCSAqIGFzc3VtZSBkZWNpbWFsOyBpZiBiYXNlIGlzIGFscmVhZHkgMTYsIGFsbG93IDB4LgorCSAqLworCXMgPSBucHRyOworCWRvIHsKKwkJYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrOworCX0gd2hpbGUgKGlzc3BhY2UoYykpOworCWlmIChjID09ICctJykgeworCQluZWcgPSAxOworCQljID0gKnMrKzsKKwl9IGVsc2UgeworCQluZWcgPSAwOworCQlpZiAoYyA9PSAnKycpCisJCQljID0gKnMrKzsKKwl9CisJaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKKwkgICAgYyA9PSAnMCcgJiYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpKSB7CisJCWMgPSBzWzFdOworCQlzICs9IDI7CisJCWJhc2UgPSAxNjsKKwl9CisJaWYgKGJhc2UgPT0gMCkKKwkJYmFzZSA9IGMgPT0gJzAnID8gOCA6IDEwOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSBjdXRvZmYgdmFsdWUgYmV0d2VlbiBsZWdhbCBudW1iZXJzIGFuZCBpbGxlZ2FsCisJICogbnVtYmVycy4gIFRoYXQgaXMgdGhlIGxhcmdlc3QgbGVnYWwgdmFsdWUsIGRpdmlkZWQgYnkgdGhlCisJICogYmFzZS4gIEFuIGlucHV0IG51bWJlciB0aGF0IGlzIGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlLCBpZgorCSAqIGZvbGxvd2VkIGJ5IGEgbGVnYWwgaW5wdXQgY2hhcmFjdGVyLCBpcyB0b28gYmlnLiAgT25lIHRoYXQKKwkgKiBpcyBlcXVhbCB0byB0aGlzIHZhbHVlIG1heSBiZSB2YWxpZCBvciBub3Q7IHRoZSBsaW1pdAorCSAqIGJldHdlZW4gdmFsaWQgYW5kIGludmFsaWQgbnVtYmVycyBpcyB0aGVuIGJhc2VkIG9uIHRoZSBsYXN0CisJICogZGlnaXQuICBGb3IgaW5zdGFuY2UsIGlmIHRoZSByYW5nZSBmb3IgaW50bWF4X3QgaXMKKwkgKiBbLTkyMjMzNzIwMzY4NTQ3NzU4MDguLjkyMjMzNzIwMzY4NTQ3NzU4MDddIGFuZCB0aGUgaW5wdXQgYmFzZQorCSAqIGlzIDEwLCBjdXRvZmYgd2lsbCBiZSBzZXQgdG8gOTIyMzM3MjAzNjg1NDc3NTgwIGFuZCBjdXRsaW0gdG8KKwkgKiBlaXRoZXIgNyAobmVnPT0wKSBvciA4IChuZWc9PTEpLCBtZWFuaW5nIHRoYXQgaWYgd2UgaGF2ZQorCSAqIGFjY3VtdWxhdGVkIGEgdmFsdWUgPiA5MjIzMzcyMDM2ODU0Nzc1ODAsIG9yIGVxdWFsIGJ1dCB0aGUKKwkgKiBuZXh0IGRpZ2l0IGlzID4gNyAob3IgOCksIHRoZSBudW1iZXIgaXMgdG9vIGJpZywgYW5kIHdlIHdpbGwKKwkgKiByZXR1cm4gYSByYW5nZSBlcnJvci4KKwkgKgorCSAqIFNldCBhbnkgaWYgYW55IGBkaWdpdHMnIGNvbnN1bWVkOyBtYWtlIGl0IG5lZ2F0aXZlIHRvIGluZGljYXRlCisJICogb3ZlcmZsb3cuCisJICovCisJY3V0b2ZmID0gbmVnID8gSU5UTUFYX01JTiA6IElOVE1BWF9NQVg7CisJY3V0bGltID0gY3V0b2ZmICUgYmFzZTsKKwljdXRvZmYgLz0gYmFzZTsKKwlpZiAobmVnKSB7CisJCWlmIChjdXRsaW0gPiAwKSB7CisJCQljdXRsaW0gLT0gYmFzZTsKKwkJCWN1dG9mZiArPSAxOworCQl9CisJCWN1dGxpbSA9IC1jdXRsaW07CisJfQorCWZvciAoYWNjID0gMCwgYW55ID0gMDs7IGMgPSAodW5zaWduZWQgY2hhcikgKnMrKykgeworCQlpZiAoaXNkaWdpdChjKSkKKwkJCWMgLT0gJzAnOworCQllbHNlIGlmIChpc2FscGhhKGMpKQorCQkJYyAtPSBpc3VwcGVyKGMpID8gJ0EnIC0gMTAgOiAnYScgLSAxMDsKKwkJZWxzZQorCQkJYnJlYWs7CisJCWlmIChjID49IGJhc2UpCisJCQlicmVhazsKKwkJaWYgKGFueSA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKG5lZykgeworCQkJaWYgKGFjYyA8IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgeworCQkJCWFueSA9IC0xOworCQkJCWFjYyA9IElOVE1BWF9NSU47CisJCQkJZXJybm8gPSBFUkFOR0U7CisJCQl9IGVsc2UgeworCQkJCWFueSA9IDE7CisJCQkJYWNjICo9IGJhc2U7CisJCQkJYWNjIC09IGM7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYWNjID4gY3V0b2ZmIHx8IChhY2MgPT0gY3V0b2ZmICYmIGMgPiBjdXRsaW0pKSB7CisJCQkJYW55ID0gLTE7CisJCQkJYWNjID0gSU5UTUFYX01BWDsKKwkJCQllcnJubyA9IEVSQU5HRTsKKwkJCX0gZWxzZSB7CisJCQkJYW55ID0gMTsKKwkJCQlhY2MgKj0gYmFzZTsKKwkJCQlhY2MgKz0gYzsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZW5kcHRyICE9IDApCisJCSplbmRwdHIgPSAoY2hhciAqKSAoYW55ID8gcyAtIDEgOiBucHRyKTsKKwlyZXR1cm4gKGFjYyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvbC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzJjZjg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b2wuYwpAQCAtMCwwICsxLDE1MSBAQAorLyoJJE9wZW5CU0Q6IHN0cnRvbC5jLHYgMS45IDIwMTMvMDQvMTcgMTc6NDA6MzUgdGVkdSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKworLyoKKyAqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBsb25nIGludGVnZXIuCisgKgorICogSWdub3JlcyBgbG9jYWxlJyBzdHVmZi4gIEFzc3VtZXMgdGhhdCB0aGUgdXBwZXIgYW5kIGxvd2VyIGNhc2UKKyAqIGFscGhhYmV0cyBhbmQgZGlnaXRzIGFyZSBlYWNoIGNvbnRpZ3VvdXMuCisgKi8KK2xvbmcKK3N0cnRvbChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKwljb25zdCBjaGFyICpzOworCWxvbmcgYWNjLCBjdXRvZmY7CisJaW50IGM7CisJaW50IG5lZywgYW55LCBjdXRsaW07CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0IGJhc2UgaXMgYmV0d2VlbiAyIGFuZCAzNiBpbmNsdXNpdmUsIG9yIHRoZSBzcGVjaWFsCisJICogdmFsdWUgb2YgMC4KKwkgKi8KKwlpZiAoYmFzZSAhPSAwICYmIChiYXNlIDwgMiB8fCBiYXNlID4gMzYpKSB7CisJCWlmIChlbmRwdHIgIT0gMCkKKwkJCSplbmRwdHIgPSAoY2hhciAqKW5wdHI7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFNraXAgd2hpdGUgc3BhY2UgYW5kIHBpY2sgdXAgbGVhZGluZyArLy0gc2lnbiBpZiBhbnkuCisJICogSWYgYmFzZSBpcyAwLCBhbGxvdyAweCBmb3IgaGV4IGFuZCAwIGZvciBvY3RhbCwgZWxzZQorCSAqIGFzc3VtZSBkZWNpbWFsOyBpZiBiYXNlIGlzIGFscmVhZHkgMTYsIGFsbG93IDB4LgorCSAqLworCXMgPSBucHRyOworCWRvIHsKKwkJYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrOworCX0gd2hpbGUgKGlzc3BhY2UoYykpOworCWlmIChjID09ICctJykgeworCQluZWcgPSAxOworCQljID0gKnMrKzsKKwl9IGVsc2UgeworCQluZWcgPSAwOworCQlpZiAoYyA9PSAnKycpCisJCQljID0gKnMrKzsKKwl9CisJaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKKwkgICAgYyA9PSAnMCcgJiYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpKSB7CisJCWMgPSBzWzFdOworCQlzICs9IDI7CisJCWJhc2UgPSAxNjsKKwl9CisJaWYgKGJhc2UgPT0gMCkKKwkJYmFzZSA9IGMgPT0gJzAnID8gOCA6IDEwOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSBjdXRvZmYgdmFsdWUgYmV0d2VlbiBsZWdhbCBudW1iZXJzIGFuZCBpbGxlZ2FsCisJICogbnVtYmVycy4gIFRoYXQgaXMgdGhlIGxhcmdlc3QgbGVnYWwgdmFsdWUsIGRpdmlkZWQgYnkgdGhlCisJICogYmFzZS4gIEFuIGlucHV0IG51bWJlciB0aGF0IGlzIGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlLCBpZgorCSAqIGZvbGxvd2VkIGJ5IGEgbGVnYWwgaW5wdXQgY2hhcmFjdGVyLCBpcyB0b28gYmlnLiAgT25lIHRoYXQKKwkgKiBpcyBlcXVhbCB0byB0aGlzIHZhbHVlIG1heSBiZSB2YWxpZCBvciBub3Q7IHRoZSBsaW1pdAorCSAqIGJldHdlZW4gdmFsaWQgYW5kIGludmFsaWQgbnVtYmVycyBpcyB0aGVuIGJhc2VkIG9uIHRoZSBsYXN0CisJICogZGlnaXQuICBGb3IgaW5zdGFuY2UsIGlmIHRoZSByYW5nZSBmb3IgbG9uZ3MgaXMKKwkgKiBbLTIxNDc0ODM2NDguLjIxNDc0ODM2NDddIGFuZCB0aGUgaW5wdXQgYmFzZSBpcyAxMCwKKwkgKiBjdXRvZmYgd2lsbCBiZSBzZXQgdG8gMjE0NzQ4MzY0IGFuZCBjdXRsaW0gdG8gZWl0aGVyCisJICogNyAobmVnPT0wKSBvciA4IChuZWc9PTEpLCBtZWFuaW5nIHRoYXQgaWYgd2UgaGF2ZSBhY2N1bXVsYXRlZAorCSAqIGEgdmFsdWUgPiAyMTQ3NDgzNjQsIG9yIGVxdWFsIGJ1dCB0aGUgbmV4dCBkaWdpdCBpcyA+IDcgKG9yIDgpLAorCSAqIHRoZSBudW1iZXIgaXMgdG9vIGJpZywgYW5kIHdlIHdpbGwgcmV0dXJuIGEgcmFuZ2UgZXJyb3IuCisJICoKKwkgKiBTZXQgYW55IGlmIGFueSBgZGlnaXRzJyBjb25zdW1lZDsgbWFrZSBpdCBuZWdhdGl2ZSB0byBpbmRpY2F0ZQorCSAqIG92ZXJmbG93LgorCSAqLworCWN1dG9mZiA9IG5lZyA/IExPTkdfTUlOIDogTE9OR19NQVg7CisJY3V0bGltID0gY3V0b2ZmICUgYmFzZTsKKwljdXRvZmYgLz0gYmFzZTsKKwlpZiAobmVnKSB7CisJCWlmIChjdXRsaW0gPiAwKSB7CisJCQljdXRsaW0gLT0gYmFzZTsKKwkJCWN1dG9mZiArPSAxOworCQl9CisJCWN1dGxpbSA9IC1jdXRsaW07CisJfQorCWZvciAoYWNjID0gMCwgYW55ID0gMDs7IGMgPSAodW5zaWduZWQgY2hhcikgKnMrKykgeworCQlpZiAoaXNkaWdpdChjKSkKKwkJCWMgLT0gJzAnOworCQllbHNlIGlmIChpc2FscGhhKGMpKQorCQkJYyAtPSBpc3VwcGVyKGMpID8gJ0EnIC0gMTAgOiAnYScgLSAxMDsKKwkJZWxzZQorCQkJYnJlYWs7CisJCWlmIChjID49IGJhc2UpCisJCQlicmVhazsKKwkJaWYgKGFueSA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKG5lZykgeworCQkJaWYgKGFjYyA8IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgeworCQkJCWFueSA9IC0xOworCQkJCWFjYyA9IExPTkdfTUlOOworCQkJCWVycm5vID0gRVJBTkdFOworCQkJfSBlbHNlIHsKKwkJCQlhbnkgPSAxOworCQkJCWFjYyAqPSBiYXNlOworCQkJCWFjYyAtPSBjOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGFjYyA+IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgeworCQkJCWFueSA9IC0xOworCQkJCWFjYyA9IExPTkdfTUFYOworCQkJCWVycm5vID0gRVJBTkdFOworCQkJfSBlbHNlIHsKKwkJCQlhbnkgPSAxOworCQkJCWFjYyAqPSBiYXNlOworCQkJCWFjYyArPSBjOworCQkJfQorCQl9CisJfQorCWlmIChlbmRwdHIgIT0gMCkKKwkJKmVuZHB0ciA9IChjaGFyICopIChhbnkgPyBzIC0gMSA6IG5wdHIpOworCXJldHVybiAoYWNjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG9sbC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b2xsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjYzU1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG9sbC5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKiAkT3BlbkJTRDogc3RydG9sbC5jLHYgMS43IDIwMTMvMDMvMjggMTg6MDk6MzggbWFydHluYXMgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkyIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qCisgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgbG9uZyBsb25nLgorICoKKyAqIElnbm9yZXMgYGxvY2FsZScgc3R1ZmYuICBBc3N1bWVzIHRoYXQgdGhlIHVwcGVyIGFuZCBsb3dlciBjYXNlCisgKiBhbHBoYWJldHMgYW5kIGRpZ2l0cyBhcmUgZWFjaCBjb250aWd1b3VzLgorICovCitsb25nIGxvbmcKK3N0cnRvbGwoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCit7CisJY29uc3QgY2hhciAqczsKKwlsb25nIGxvbmcgYWNjLCBjdXRvZmY7CisJaW50IGM7CisJaW50IG5lZywgYW55LCBjdXRsaW07CisKKwkvKgorCSAqIFNraXAgd2hpdGUgc3BhY2UgYW5kIHBpY2sgdXAgbGVhZGluZyArLy0gc2lnbiBpZiBhbnkuCisJICogSWYgYmFzZSBpcyAwLCBhbGxvdyAweCBmb3IgaGV4IGFuZCAwIGZvciBvY3RhbCwgZWxzZQorCSAqIGFzc3VtZSBkZWNpbWFsOyBpZiBiYXNlIGlzIGFscmVhZHkgMTYsIGFsbG93IDB4LgorCSAqLworCXMgPSBucHRyOworCWRvIHsKKwkJYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrOworCX0gd2hpbGUgKGlzc3BhY2UoYykpOworCWlmIChjID09ICctJykgeworCQluZWcgPSAxOworCQljID0gKnMrKzsKKwl9IGVsc2UgeworCQluZWcgPSAwOworCQlpZiAoYyA9PSAnKycpCisJCQljID0gKnMrKzsKKwl9CisJaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKKwkgICAgYyA9PSAnMCcgJiYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpKSB7CisJCWMgPSBzWzFdOworCQlzICs9IDI7CisJCWJhc2UgPSAxNjsKKwl9CisJaWYgKGJhc2UgPT0gMCkKKwkJYmFzZSA9IGMgPT0gJzAnID8gOCA6IDEwOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSBjdXRvZmYgdmFsdWUgYmV0d2VlbiBsZWdhbCBudW1iZXJzIGFuZCBpbGxlZ2FsCisJICogbnVtYmVycy4gIFRoYXQgaXMgdGhlIGxhcmdlc3QgbGVnYWwgdmFsdWUsIGRpdmlkZWQgYnkgdGhlCisJICogYmFzZS4gIEFuIGlucHV0IG51bWJlciB0aGF0IGlzIGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlLCBpZgorCSAqIGZvbGxvd2VkIGJ5IGEgbGVnYWwgaW5wdXQgY2hhcmFjdGVyLCBpcyB0b28gYmlnLiAgT25lIHRoYXQKKwkgKiBpcyBlcXVhbCB0byB0aGlzIHZhbHVlIG1heSBiZSB2YWxpZCBvciBub3Q7IHRoZSBsaW1pdAorCSAqIGJldHdlZW4gdmFsaWQgYW5kIGludmFsaWQgbnVtYmVycyBpcyB0aGVuIGJhc2VkIG9uIHRoZSBsYXN0CisJICogZGlnaXQuICBGb3IgaW5zdGFuY2UsIGlmIHRoZSByYW5nZSBmb3IgbG9uZyBsb25ncyBpcworCSAqIFstOTIyMzM3MjAzNjg1NDc3NTgwOC4uOTIyMzM3MjAzNjg1NDc3NTgwN10gYW5kIHRoZSBpbnB1dCBiYXNlCisJICogaXMgMTAsIGN1dG9mZiB3aWxsIGJlIHNldCB0byA5MjIzMzcyMDM2ODU0Nzc1ODAgYW5kIGN1dGxpbSB0bworCSAqIGVpdGhlciA3IChuZWc9PTApIG9yIDggKG5lZz09MSksIG1lYW5pbmcgdGhhdCBpZiB3ZSBoYXZlCisJICogYWNjdW11bGF0ZWQgYSB2YWx1ZSA+IDkyMjMzNzIwMzY4NTQ3NzU4MCwgb3IgZXF1YWwgYnV0IHRoZQorCSAqIG5leHQgZGlnaXQgaXMgPiA3IChvciA4KSwgdGhlIG51bWJlciBpcyB0b28gYmlnLCBhbmQgd2Ugd2lsbAorCSAqIHJldHVybiBhIHJhbmdlIGVycm9yLgorCSAqCisJICogU2V0IGFueSBpZiBhbnkgYGRpZ2l0cycgY29uc3VtZWQ7IG1ha2UgaXQgbmVnYXRpdmUgdG8gaW5kaWNhdGUKKwkgKiBvdmVyZmxvdy4KKwkgKi8KKwljdXRvZmYgPSBuZWcgPyBMTE9OR19NSU4gOiBMTE9OR19NQVg7CisJY3V0bGltID0gY3V0b2ZmICUgYmFzZTsKKwljdXRvZmYgLz0gYmFzZTsKKwlpZiAobmVnKSB7CisJCWlmIChjdXRsaW0gPiAwKSB7CisJCQljdXRsaW0gLT0gYmFzZTsKKwkJCWN1dG9mZiArPSAxOworCQl9CisJCWN1dGxpbSA9IC1jdXRsaW07CisJfQorCWZvciAoYWNjID0gMCwgYW55ID0gMDs7IGMgPSAodW5zaWduZWQgY2hhcikgKnMrKykgeworCQlpZiAoaXNkaWdpdChjKSkKKwkJCWMgLT0gJzAnOworCQllbHNlIGlmIChpc2FscGhhKGMpKQorCQkJYyAtPSBpc3VwcGVyKGMpID8gJ0EnIC0gMTAgOiAnYScgLSAxMDsKKwkJZWxzZQorCQkJYnJlYWs7CisJCWlmIChjID49IGJhc2UpCisJCQlicmVhazsKKwkJaWYgKGFueSA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKG5lZykgeworCQkJaWYgKGFjYyA8IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgeworCQkJCWFueSA9IC0xOworCQkJCWFjYyA9IExMT05HX01JTjsKKwkJCQllcnJubyA9IEVSQU5HRTsKKwkJCX0gZWxzZSB7CisJCQkJYW55ID0gMTsKKwkJCQlhY2MgKj0gYmFzZTsKKwkJCQlhY2MgLT0gYzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChhY2MgPiBjdXRvZmYgfHwgKGFjYyA9PSBjdXRvZmYgJiYgYyA+IGN1dGxpbSkpIHsKKwkJCQlhbnkgPSAtMTsKKwkJCQlhY2MgPSBMTE9OR19NQVg7CisJCQkJZXJybm8gPSBFUkFOR0U7CisJCQl9IGVsc2UgeworCQkJCWFueSA9IDE7CisJCQkJYWNjICo9IGJhc2U7CisJCQkJYWNjICs9IGM7CisJCQl9CisJCX0KKwl9CisJaWYgKGVuZHB0ciAhPSAwKQorCQkqZW5kcHRyID0gKGNoYXIgKikgKGFueSA/IHMgLSAxIDogbnB0cik7CisJcmV0dXJuIChhY2MpOworfQorCitfX3N0cm9uZ19hbGlhcyhzdHJ0b3EsIHN0cnRvbGwpOwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b3VsLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvdWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjM2MzY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b3VsLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCSRPcGVuQlNEOiBzdHJ0b3VsLmMsdiAxLjggMjAxMy8wNC8xNyAxNzo0MDozNSB0ZWR1IEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkwIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qCisgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcgaW50ZWdlci4KKyAqCisgKiBJZ25vcmVzIGBsb2NhbGUnIHN0dWZmLiAgQXNzdW1lcyB0aGF0IHRoZSB1cHBlciBhbmQgbG93ZXIgY2FzZQorICogYWxwaGFiZXRzIGFuZCBkaWdpdHMgYXJlIGVhY2ggY29udGlndW91cy4KKyAqLwordW5zaWduZWQgbG9uZworc3RydG91bChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKwljb25zdCBjaGFyICpzOworCXVuc2lnbmVkIGxvbmcgYWNjLCBjdXRvZmY7CisJaW50IGM7CisJaW50IG5lZywgYW55LCBjdXRsaW07CisKKwkvKgorCSAqIFNlZSBzdHJ0b2wgZm9yIGNvbW1lbnRzIGFzIHRvIHRoZSBsb2dpYyB1c2VkLgorCSAqLworCXMgPSBucHRyOworCWRvIHsKKwkJYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrOworCX0gd2hpbGUgKGlzc3BhY2UoYykpOworCWlmIChjID09ICctJykgeworCQluZWcgPSAxOworCQljID0gKnMrKzsKKwl9IGVsc2UgeworCQluZWcgPSAwOworCQlpZiAoYyA9PSAnKycpCisJCQljID0gKnMrKzsKKwl9CisJaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKKwkgICAgYyA9PSAnMCcgJiYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpKSB7CisJCWMgPSBzWzFdOworCQlzICs9IDI7CisJCWJhc2UgPSAxNjsKKwl9CisJaWYgKGJhc2UgPT0gMCkKKwkJYmFzZSA9IGMgPT0gJzAnID8gOCA6IDEwOworCisJY3V0b2ZmID0gVUxPTkdfTUFYIC8gKHVuc2lnbmVkIGxvbmcpYmFzZTsKKwljdXRsaW0gPSBVTE9OR19NQVggJSAodW5zaWduZWQgbG9uZyliYXNlOworCWZvciAoYWNjID0gMCwgYW55ID0gMDs7IGMgPSAodW5zaWduZWQgY2hhcikgKnMrKykgeworCQlpZiAoaXNkaWdpdChjKSkKKwkJCWMgLT0gJzAnOworCQllbHNlIGlmIChpc2FscGhhKGMpKQorCQkJYyAtPSBpc3VwcGVyKGMpID8gJ0EnIC0gMTAgOiAnYScgLSAxMDsKKwkJZWxzZQorCQkJYnJlYWs7CisJCWlmIChjID49IGJhc2UpCisJCQlicmVhazsKKwkJaWYgKGFueSA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKGFjYyA+IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgeworCQkJYW55ID0gLTE7CisJCQlhY2MgPSBVTE9OR19NQVg7CisJCQllcnJubyA9IEVSQU5HRTsKKwkJfSBlbHNlIHsKKwkJCWFueSA9IDE7CisJCQlhY2MgKj0gKHVuc2lnbmVkIGxvbmcpYmFzZTsKKwkJCWFjYyArPSBjOworCQl9CisJfQorCWlmIChuZWcgJiYgYW55ID4gMCkKKwkJYWNjID0gLWFjYzsKKwlpZiAoZW5kcHRyICE9IDApCisJCSplbmRwdHIgPSAoY2hhciAqKSAoYW55ID8gcyAtIDEgOiBucHRyKTsKKwlyZXR1cm4gKGFjYyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvdWxsLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvdWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmNjEzYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG91bGwuYwpAQCAtMCwwICsxLDEwNiBAQAorLyoJJE9wZW5CU0Q6IHN0cnRvdWxsLmMsdiAxLjYgMjAxMy8wMy8yOCAxODowOTozOCBtYXJ0eW5hcyBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyoKKyAqIENvbnZlcnQgYSBzdHJpbmcgdG8gYW4gdW5zaWduZWQgbG9uZyBsb25nLgorICoKKyAqIElnbm9yZXMgYGxvY2FsZScgc3R1ZmYuICBBc3N1bWVzIHRoYXQgdGhlIHVwcGVyIGFuZCBsb3dlciBjYXNlCisgKiBhbHBoYWJldHMgYW5kIGRpZ2l0cyBhcmUgZWFjaCBjb250aWd1b3VzLgorICovCit1bnNpZ25lZCBsb25nIGxvbmcKK3N0cnRvdWxsKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQoreworCWNvbnN0IGNoYXIgKnM7CisJdW5zaWduZWQgbG9uZyBsb25nIGFjYywgY3V0b2ZmOworCWludCBjOworCWludCBuZWcsIGFueSwgY3V0bGltOworCisJLyoKKwkgKiBTZWUgc3RydG9xIGZvciBjb21tZW50cyBhcyB0byB0aGUgbG9naWMgdXNlZC4KKwkgKi8KKwlzID0gbnB0cjsKKwlkbyB7CisJCWMgPSAodW5zaWduZWQgY2hhcikgKnMrKzsKKwl9IHdoaWxlIChpc3NwYWNlKGMpKTsKKwlpZiAoYyA9PSAnLScpIHsKKwkJbmVnID0gMTsKKwkJYyA9ICpzKys7CisJfSBlbHNlIHsgCisJCW5lZyA9IDA7CisJCWlmIChjID09ICcrJykKKwkJCWMgPSAqcysrOworCX0KKwlpZiAoKGJhc2UgPT0gMCB8fCBiYXNlID09IDE2KSAmJgorCSAgICBjID09ICcwJyAmJiAoKnMgPT0gJ3gnIHx8ICpzID09ICdYJykpIHsKKwkJYyA9IHNbMV07CisJCXMgKz0gMjsKKwkJYmFzZSA9IDE2OworCX0KKwlpZiAoYmFzZSA9PSAwKQorCQliYXNlID0gYyA9PSAnMCcgPyA4IDogMTA7CisKKwljdXRvZmYgPSBVTExPTkdfTUFYIC8gKHVuc2lnbmVkIGxvbmcgbG9uZyliYXNlOworCWN1dGxpbSA9IFVMTE9OR19NQVggJSAodW5zaWduZWQgbG9uZyBsb25nKWJhc2U7CisJZm9yIChhY2MgPSAwLCBhbnkgPSAwOzsgYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrKSB7CisJCWlmIChpc2RpZ2l0KGMpKQorCQkJYyAtPSAnMCc7CisJCWVsc2UgaWYgKGlzYWxwaGEoYykpCisJCQljIC09IGlzdXBwZXIoYykgPyAnQScgLSAxMCA6ICdhJyAtIDEwOworCQllbHNlCisJCQlicmVhazsKKwkJaWYgKGMgPj0gYmFzZSkKKwkJCWJyZWFrOworCQlpZiAoYW55IDwgMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoYWNjID4gY3V0b2ZmIHx8IChhY2MgPT0gY3V0b2ZmICYmIGMgPiBjdXRsaW0pKSB7CisJCQlhbnkgPSAtMTsKKwkJCWFjYyA9IFVMTE9OR19NQVg7CisJCQllcnJubyA9IEVSQU5HRTsKKwkJfSBlbHNlIHsKKwkJCWFueSA9IDE7CisJCQlhY2MgKj0gKHVuc2lnbmVkIGxvbmcgbG9uZyliYXNlOworCQkJYWNjICs9IGM7CisJCX0KKwl9CisJaWYgKG5lZyAmJiBhbnkgPiAwKQorCQlhY2MgPSAtYWNjOworCWlmIChlbmRwdHIgIT0gMCkKKwkJKmVuZHB0ciA9IChjaGFyICopIChhbnkgPyBzIC0gMSA6IG5wdHIpOworCXJldHVybiAoYWNjKTsKK30KKworX19zdHJvbmdfYWxpYXMoc3RydG91cSwgc3RydG91bGwpOwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b3VtYXguYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG91bWF4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U2ZTJjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG91bWF4LmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCSRPcGVuQlNEOiBzdHJ0b3VtYXguYyx2IDEuMSAyMDA2LzAxLzEzIDE3OjU4OjA5IG1pbGxlcnQgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworLyoKKyAqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSB1aW50bWF4X3QuCisgKgorICogSWdub3JlcyBgbG9jYWxlJyBzdHVmZi4gIEFzc3VtZXMgdGhhdCB0aGUgdXBwZXIgYW5kIGxvd2VyIGNhc2UKKyAqIGFscGhhYmV0cyBhbmQgZGlnaXRzIGFyZSBlYWNoIGNvbnRpZ3VvdXMuCisgKi8KK3VpbnRtYXhfdAorc3RydG91bWF4KGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQoreworCWNvbnN0IGNoYXIgKnM7CisJdWludG1heF90IGFjYywgY3V0b2ZmOworCWludCBjOworCWludCBuZWcsIGFueSwgY3V0bGltOworCisJLyoKKwkgKiBTZWUgc3RydG9xIGZvciBjb21tZW50cyBhcyB0byB0aGUgbG9naWMgdXNlZC4KKwkgKi8KKwlzID0gbnB0cjsKKwlkbyB7CisJCWMgPSAodW5zaWduZWQgY2hhcikgKnMrKzsKKwl9IHdoaWxlIChpc3NwYWNlKGMpKTsKKwlpZiAoYyA9PSAnLScpIHsKKwkJbmVnID0gMTsKKwkJYyA9ICpzKys7CisJfSBlbHNlIHsgCisJCW5lZyA9IDA7CisJCWlmIChjID09ICcrJykKKwkJCWMgPSAqcysrOworCX0KKwlpZiAoKGJhc2UgPT0gMCB8fCBiYXNlID09IDE2KSAmJgorCSAgICBjID09ICcwJyAmJiAoKnMgPT0gJ3gnIHx8ICpzID09ICdYJykpIHsKKwkJYyA9IHNbMV07CisJCXMgKz0gMjsKKwkJYmFzZSA9IDE2OworCX0KKwlpZiAoYmFzZSA9PSAwKQorCQliYXNlID0gYyA9PSAnMCcgPyA4IDogMTA7CisKKwljdXRvZmYgPSBVSU5UTUFYX01BWCAvICh1aW50bWF4X3QpYmFzZTsKKwljdXRsaW0gPSBVSU5UTUFYX01BWCAlICh1aW50bWF4X3QpYmFzZTsKKwlmb3IgKGFjYyA9IDAsIGFueSA9IDA7OyBjID0gKHVuc2lnbmVkIGNoYXIpICpzKyspIHsKKwkJaWYgKGlzZGlnaXQoYykpCisJCQljIC09ICcwJzsKKwkJZWxzZSBpZiAoaXNhbHBoYShjKSkKKwkJCWMgLT0gaXN1cHBlcihjKSA/ICdBJyAtIDEwIDogJ2EnIC0gMTA7CisJCWVsc2UKKwkJCWJyZWFrOworCQlpZiAoYyA+PSBiYXNlKQorCQkJYnJlYWs7CisJCWlmIChhbnkgPCAwKQorCQkJY29udGludWU7CisJCWlmIChhY2MgPiBjdXRvZmYgfHwgKGFjYyA9PSBjdXRvZmYgJiYgYyA+IGN1dGxpbSkpIHsKKwkJCWFueSA9IC0xOworCQkJYWNjID0gVUlOVE1BWF9NQVg7CisJCQllcnJubyA9IEVSQU5HRTsKKwkJfSBlbHNlIHsKKwkJCWFueSA9IDE7CisJCQlhY2MgKj0gKHVpbnRtYXhfdCliYXNlOworCQkJYWNjICs9IGM7CisJCX0KKwl9CisJaWYgKG5lZyAmJiBhbnkgPiAwKQorCQlhY2MgPSAtYWNjOworCWlmIChlbmRwdHIgIT0gMCkKKwkJKmVuZHB0ciA9IChjaGFyICopIChhbnkgPyBzIC0gMSA6IG5wdHIpOworCXJldHVybiAoYWNjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3lzdGVtLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N5c3RlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZGRjYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N5c3RlbS5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCSRPcGVuQlNEOiBzeXN0ZW0uYyx2IDEuOCAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxwYXRocy5oPgorCitleHRlcm4gY2hhciAqKmVudmlyb247CisKK2ludAorc3lzdGVtKGNvbnN0IGNoYXIgKmNvbW1hbmQpCit7CisJcGlkX3QgcGlkOworCXNpZ190IGludHNhdmUsIHF1aXRzYXZlOworCXNpZ3NldF90IG1hc2ssIG9tYXNrOworCWludCBwc3RhdDsKKwljaGFyICphcmdwW10gPSB7InNoIiwgIi1jIiwgTlVMTCwgTlVMTH07CisKKwlpZiAoIWNvbW1hbmQpCQkvKiBqdXN0IGNoZWNraW5nLi4uICovCisJCXJldHVybigxKTsKKworCWFyZ3BbMl0gPSAoY2hhciAqKWNvbW1hbmQ7CisKKwlzaWdlbXB0eXNldCgmbWFzayk7CisJc2lnYWRkc2V0KCZtYXNrLCBTSUdDSExEKTsKKwlzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZtYXNrLCAmb21hc2spOworCXN3aXRjaCAocGlkID0gdmZvcmsoKSkgeworCWNhc2UgLTE6CQkJLyogZXJyb3IgKi8KKwkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvbWFzaywgTlVMTCk7CisJCXJldHVybigtMSk7CisJY2FzZSAwOgkJCQkvKiBjaGlsZCAqLworCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9tYXNrLCBOVUxMKTsKKwkJZXhlY3ZlKF9QQVRIX0JTSEVMTCwgYXJncCwgZW52aXJvbik7CisJCV9leGl0KDEyNyk7CisJfQorCisJaW50c2F2ZSA9IHNpZ25hbChTSUdJTlQsIFNJR19JR04pOworCXF1aXRzYXZlID0gc2lnbmFsKFNJR1FVSVQsIFNJR19JR04pOworCXBpZCA9IHdhaXRwaWQocGlkLCAoaW50ICopJnBzdGF0LCAwKTsKKwlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9tYXNrLCBOVUxMKTsKKwkodm9pZClzaWduYWwoU0lHSU5ULCBpbnRzYXZlKTsKKwkodm9pZClzaWduYWwoU0lHUVVJVCwgcXVpdHNhdmUpOworCXJldHVybiAocGlkID09IC0xID8gLTEgOiBwc3RhdCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3RmaW5kLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3RmaW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQxZDUxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvdGZpbmQuYwpAQCAtMCwwICsxLDQxIEBACisvKgkkT3BlbkJTRDogdGZpbmQuYyx2IDEuNiAyMDE0LzAzLzE2IDE4OjM4OjMwIGd1ZW50aGVyIEV4cCAkCSovCisKKy8qCisgKiBUcmVlIHNlYXJjaCBnZW5lcmFsaXplZCBmcm9tIEtudXRoICg2LjIuMikgQWxnb3JpdGhtIFQganVzdCBsaWtlCisgKiB0aGUgQVQmVCBtYW4gcGFnZSBzYXlzLgorICoKKyAqIFRoZSBub2RlX3Qgc3RydWN0dXJlIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seQorICoKKyAqIFdyaXR0ZW4gYnkgcmVhZGluZyB0aGUgU3lzdGVtIFYgSW50ZXJmYWNlIERlZmluaXRpb24sIG5vdCB0aGUgY29kZS4KKyAqCisgKiBUb3RhbGx5IHB1YmxpYyBkb21haW4uCisgKi8KKy8qTElOVExJQlJBUlkqLworI2luY2x1ZGUgPHNlYXJjaC5oPgorCit0eXBlZGVmIHN0cnVjdCBub2RlX3QKK3sKKyAgICBjaGFyCSAgKmtleTsKKyAgICBzdHJ1Y3Qgbm9kZV90ICpsbGluaywgKnJsaW5rOworfSBub2RlOworCisvKiBmaW5kIGEgbm9kZSwgb3IgcmV0dXJuIDAgKi8KK3ZvaWQgKgordGZpbmQoY29uc3Qgdm9pZCAqdmtleSwgdm9pZCAqIGNvbnN0ICp2cm9vdHAsCisgICAgaW50ICgqY29tcGFyKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpCit7CisgICAgY2hhciAqa2V5ID0gKGNoYXIgKil2a2V5OworICAgIG5vZGUgKipyb290cCA9IChub2RlICoqKXZyb290cDsKKworICAgIGlmIChyb290cCA9PSAoc3RydWN0IG5vZGVfdCAqKikwKQorCXJldHVybiAoKHN0cnVjdCBub2RlX3QgKikwKTsKKyAgICB3aGlsZSAoKnJvb3RwICE9IChzdHJ1Y3Qgbm9kZV90ICopMCkgewkvKiBUMTogKi8KKwlpbnQgcjsKKwlpZiAoKHIgPSAoKmNvbXBhcikoa2V5LCAoKnJvb3RwKS0+a2V5KSkgPT0gMCkJLyogVDI6ICovCisJICAgIHJldHVybiAoKnJvb3RwKTsJCS8qIGtleSBmb3VuZCAqLworCXJvb3RwID0gKHIgPCAwKSA/CisJICAgICYoKnJvb3RwKS0+bGxpbmsgOgkJLyogVDM6IGZvbGxvdyBsZWZ0IGJyYW5jaCAqLworCSAgICAmKCpyb290cCktPnJsaW5rOwkJLyogVDQ6IGZvbGxvdyByaWdodCBicmFuY2ggKi8KKyAgICB9CisgICAgcmV0dXJuIChub2RlICopMDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvdHNlYXJjaC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi90c2VhcmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0MTA4NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvdHNlYXJjaC5jCkBAIC0wLDAgKzEsMTE5IEBACisvKgkkT3BlbkJTRDogdHNlYXJjaC5jLHYgMS44IDIwMTQvMDMvMTYgMTg6Mzg6MzAgZ3VlbnRoZXIgRXhwICQJKi8KKworLyoKKyAqIFRyZWUgc2VhcmNoIGdlbmVyYWxpemVkIGZyb20gS251dGggKDYuMi4yKSBBbGdvcml0aG0gVCBqdXN0IGxpa2UKKyAqIHRoZSBBVCZUIG1hbiBwYWdlIHNheXMuCisgKgorICogVGhlIG5vZGVfdCBzdHJ1Y3R1cmUgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5CisgKgorICogV3JpdHRlbiBieSByZWFkaW5nIHRoZSBTeXN0ZW0gViBJbnRlcmZhY2UgRGVmaW5pdGlvbiwgbm90IHRoZSBjb2RlLgorICoKKyAqIFRvdGFsbHkgcHVibGljIGRvbWFpbi4KKyAqLworLypMSU5UTElCUkFSWSovCisKKyNpbmNsdWRlIDxzZWFyY2guaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwordHlwZWRlZiBzdHJ1Y3Qgbm9kZV90IHsKKyAgICBjaGFyCSAgKmtleTsKKyAgICBzdHJ1Y3Qgbm9kZV90ICpsZWZ0LCAqcmlnaHQ7Cit9IG5vZGU7CisKKy8qIGZpbmQgb3IgaW5zZXJ0IGRhdHVtIGludG8gc2VhcmNoIHRyZWUgKi8KK3ZvaWQgKgordHNlYXJjaChjb25zdCB2b2lkICp2a2V5LCB2b2lkICoqdnJvb3RwLAorICAgIGludCAoKmNvbXBhcikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQoreworICAgIG5vZGUgKnE7CisgICAgY2hhciAqa2V5ID0gKGNoYXIgKil2a2V5OworICAgIG5vZGUgKipyb290cCA9IChub2RlICoqKXZyb290cDsKKworICAgIGlmIChyb290cCA9PSAoc3RydWN0IG5vZGVfdCAqKikwKQorCXJldHVybiAoKHZvaWQgKikwKTsKKyAgICB3aGlsZSAoKnJvb3RwICE9IChzdHJ1Y3Qgbm9kZV90ICopMCkgewkvKiBLbnV0aCdzIFQxOiAqLworCWludCByOworCisJaWYgKChyID0gKCpjb21wYXIpKGtleSwgKCpyb290cCktPmtleSkpID09IDApCS8qIFQyOiAqLworCSAgICByZXR1cm4gKCh2b2lkICopKnJvb3RwKTsJCS8qIHdlIGZvdW5kIGl0ISAqLworCXJvb3RwID0gKHIgPCAwKSA/CisJICAgICYoKnJvb3RwKS0+bGVmdCA6CQkvKiBUMzogZm9sbG93IGxlZnQgYnJhbmNoICovCisJICAgICYoKnJvb3RwKS0+cmlnaHQ7CQkvKiBUNDogZm9sbG93IHJpZ2h0IGJyYW5jaCAqLworICAgIH0KKyAgICBxID0gKG5vZGUgKikgbWFsbG9jKHNpemVvZihub2RlKSk7CS8qIFQ1OiBrZXkgbm90IGZvdW5kICovCisgICAgaWYgKHEgIT0gKHN0cnVjdCBub2RlX3QgKikwKSB7CS8qIG1ha2UgbmV3IG5vZGUgKi8KKwkqcm9vdHAgPSBxOwkJCS8qIGxpbmsgbmV3IG5vZGUgdG8gb2xkICovCisJcS0+a2V5ID0ga2V5OwkJCS8qIGluaXRpYWxpemUgbmV3IG5vZGUgKi8KKwlxLT5sZWZ0ID0gcS0+cmlnaHQgPSAoc3RydWN0IG5vZGVfdCAqKTA7CisgICAgfQorICAgIHJldHVybiAoKHZvaWQgKilxKTsKK30KKworLyogZGVsZXRlIG5vZGUgd2l0aCBnaXZlbiBrZXkgKi8KK3ZvaWQgKgordGRlbGV0ZShjb25zdCB2b2lkICp2a2V5LCB2b2lkICoqdnJvb3RwLAorICAgIGludCAoKmNvbXBhcikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQoreworICAgIG5vZGUgKipyb290cCA9IChub2RlICoqKXZyb290cDsKKyAgICBjaGFyICprZXkgPSAoY2hhciAqKXZrZXk7CisgICAgbm9kZSAqcCA9IChub2RlICopMTsKKyAgICBub2RlICpxOworICAgIG5vZGUgKnI7CisgICAgaW50IGNtcDsKKworICAgIGlmIChyb290cCA9PSAoc3RydWN0IG5vZGVfdCAqKikwIHx8ICpyb290cCA9PSAoc3RydWN0IG5vZGVfdCAqKTApCisJcmV0dXJuICgoc3RydWN0IG5vZGVfdCAqKTApOworICAgIHdoaWxlICgoY21wID0gKCpjb21wYXIpKGtleSwgKCpyb290cCktPmtleSkpICE9IDApIHsKKwlwID0gKnJvb3RwOworCXJvb3RwID0gKGNtcCA8IDApID8KKwkgICAgJigqcm9vdHApLT5sZWZ0IDoJCS8qIGZvbGxvdyBsZWZ0IGJyYW5jaCAqLworCSAgICAmKCpyb290cCktPnJpZ2h0OwkJLyogZm9sbG93IHJpZ2h0IGJyYW5jaCAqLworCWlmICgqcm9vdHAgPT0gKHN0cnVjdCBub2RlX3QgKikwKQorCSAgICByZXR1cm4gKCh2b2lkICopMCk7CQkvKiBrZXkgbm90IGZvdW5kICovCisgICAgfQorICAgIHIgPSAoKnJvb3RwKS0+cmlnaHQ7CQkJLyogRDE6ICovCisgICAgaWYgKChxID0gKCpyb290cCktPmxlZnQpID09IChzdHJ1Y3Qgbm9kZV90ICopMCkJLyogTGVmdCAoc3RydWN0IG5vZGVfdCAqKTA/ICovCisJcSA9IHI7CisgICAgZWxzZSBpZiAociAhPSAoc3RydWN0IG5vZGVfdCAqKTApIHsJCS8qIFJpZ2h0IGxpbmsgaXMgbnVsbD8gKi8KKwlpZiAoci0+bGVmdCA9PSAoc3RydWN0IG5vZGVfdCAqKTApIHsJLyogRDI6IEZpbmQgc3VjY2Vzc29yICovCisJICAgIHItPmxlZnQgPSBxOworCSAgICBxID0gcjsKKwl9IGVsc2UgewkJCS8qIEQzOiBGaW5kIChzdHJ1Y3Qgbm9kZV90ICopMCBsaW5rICovCisJICAgIGZvciAocSA9IHItPmxlZnQ7IHEtPmxlZnQgIT0gKHN0cnVjdCBub2RlX3QgKikwOyBxID0gci0+bGVmdCkKKwkJciA9IHE7CisJICAgIHItPmxlZnQgPSBxLT5yaWdodDsKKwkgICAgcS0+bGVmdCA9ICgqcm9vdHApLT5sZWZ0OworCSAgICBxLT5yaWdodCA9ICgqcm9vdHApLT5yaWdodDsKKwl9CisgICAgfQorICAgIGZyZWUoKHN0cnVjdCBub2RlX3QgKikgKnJvb3RwKTsJLyogRDQ6IEZyZWUgbm9kZSAqLworICAgICpyb290cCA9IHE7CQkJCS8qIGxpbmsgcGFyZW50IHRvIG5ldyBub2RlICovCisgICAgcmV0dXJuKHApOworfQorCisvKiBXYWxrIHRoZSBub2RlcyBvZiBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCit0cmVjdXJzZShub2RlICpyb290LCB2b2lkICgqYWN0aW9uKShjb25zdCB2b2lkICosIFZJU0lULCBpbnQpLCBpbnQgbGV2ZWwpCit7CisgICAgaWYgKHJvb3QtPmxlZnQgPT0gKHN0cnVjdCBub2RlX3QgKikwICYmIHJvb3QtPnJpZ2h0ID09IChzdHJ1Y3Qgbm9kZV90ICopMCkKKwkoKmFjdGlvbikocm9vdCwgbGVhZiwgbGV2ZWwpOworICAgIGVsc2UgeworCSgqYWN0aW9uKShyb290LCBwcmVvcmRlciwgbGV2ZWwpOworCWlmIChyb290LT5sZWZ0ICE9IChzdHJ1Y3Qgbm9kZV90ICopMCkKKwkgICAgdHJlY3Vyc2Uocm9vdC0+bGVmdCwgYWN0aW9uLCBsZXZlbCArIDEpOworCSgqYWN0aW9uKShyb290LCBwb3N0b3JkZXIsIGxldmVsKTsKKwlpZiAocm9vdC0+cmlnaHQgIT0gKHN0cnVjdCBub2RlX3QgKikwKQorCSAgICB0cmVjdXJzZShyb290LT5yaWdodCwgYWN0aW9uLCBsZXZlbCArIDEpOworCSgqYWN0aW9uKShyb290LCBlbmRvcmRlciwgbGV2ZWwpOworICAgIH0KK30KKworLyogV2FsayB0aGUgbm9kZXMgb2YgYSB0cmVlICovCit2b2lkCit0d2Fsayhjb25zdCB2b2lkICp2cm9vdCwgdm9pZCAoKmFjdGlvbikoY29uc3Qgdm9pZCAqLCBWSVNJVCwgaW50KSkKK3sKKyAgICBub2RlICpyb290ID0gKG5vZGUgKil2cm9vdDsKKworICAgIGlmIChyb290ICE9IChub2RlICopMCAmJiBhY3Rpb24gIT0gKHZvaWQgKCopKGNvbnN0IHZvaWQgKiwgVklTSVQsIGludCkpMCkKKwl0cmVjdXJzZShyb290LCBhY3Rpb24sIDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvYmNvcHkuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvYmNvcHkuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdHJpbmcvYmNvcHkuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9iY29weS5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cGNweS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHBjcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODhhZmFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHBjcHkuYwpAQCAtMCwwICsxLDQ0IEBACisvKgkkT3BlbkJTRDogc3RwY3B5LmMsdiAxLjIgMjAxNC8wNy8wOSAxNzowODoyMSBuYWRkeSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoQVBJV0FSTikKK19fd2Fybl9yZWZlcmVuY2VzKHN0cGNweSwKKyAgICAid2FybmluZzogc3RwY3B5KCkgaXMgZGFuZ2Vyb3VzOyBkbyBub3QgdXNlIGl0Iik7CisjZW5kaWYKKworY2hhciAqCitzdHBjcHkoY2hhciAqdG8sIGNvbnN0IGNoYXIgKmZyb20pCit7CisJZm9yICg7ICgqdG8gPSAqZnJvbSkgIT0gJ1wwJzsgKytmcm9tLCArK3RvKTsKKwlyZXR1cm4odG8pOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHBuY3B5LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cG5jcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2MyYTU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHBuY3B5LmMKQEAgLTAsMCArMSw1NiBAQAorLyoJJE9wZW5CU0Q6IHN0cG5jcHkuYyx2IDEuMiAyMDEyLzA3LzExIDEwOjQ0OjU5IG5hZGR5IEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2NoYXIgKgorc3RwbmNweShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pCit7CisJaWYgKG4gIT0gMCkgeworCQljaGFyICpkID0gZHN0OworCQljb25zdCBjaGFyICpzID0gc3JjOworCisJCWRzdCA9ICZkc3Rbbl07CisJCWRvIHsKKwkJCWlmICgoKmQrKyA9ICpzKyspID09IDApIHsKKwkJCQlkc3QgPSBkIC0gMTsKKwkJCQkvKiBOVUwgcGFkIHRoZSByZW1haW5pbmcgbi0xIGJ5dGVzICovCisJCQkJd2hpbGUgKC0tbiAhPSAwKQorCQkJCQkqZCsrID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSB3aGlsZSAoLS1uICE9IDApOworCX0KKwlyZXR1cm4gKGRzdCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJjYXNlY21wLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNhc2VjbXAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdHJpbmcvc3RyY2FzZWNtcC5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNhc2VjbXAuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjYXQuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RyY2F0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ2YzljMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RyY2F0LmMKQEAgLTAsMCArMSw0NyBAQAorLyoJJE9wZW5CU0Q6IHN0cmNhdC5jLHYgMS45IDIwMTQvMDYvMTAgMDQ6MTc6MzcgZGVyYWFkdCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoQVBJV0FSTikKK19fd2Fybl9yZWZlcmVuY2VzKHN0cmNhdCwKKyAgICAid2FybmluZzogc3RyY2F0KCkgaXMgYWxtb3N0IGFsd2F5cyBtaXN1c2VkLCBwbGVhc2UgdXNlIHN0cmxjYXQoKSIpOworI2VuZGlmCisKK2NoYXIgKgorc3RyY2F0KGNoYXIgKnMsIGNvbnN0IGNoYXIgKmFwcGVuZCkKK3sKKwljaGFyICpzYXZlID0gczsKKworCWZvciAoOyAqczsgKytzKTsKKwl3aGlsZSAoKCpzKysgPSAqYXBwZW5kKyspICE9ICdcMCcpOworCXJldHVybihzYXZlKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RyY21wLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYjZjNTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNtcC5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qCSRPcGVuQlNEOiBzdHJjbXAuYyx2IDEuOCAyMDE0LzA2LzEwIDA0OjE3OjM3IGRlcmFhZHQgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoKKyAqIENvbXBhcmUgc3RyaW5ncy4KKyAqLworaW50CitzdHJjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQoreworCXdoaWxlICgqczEgPT0gKnMyKyspCisJCWlmICgqczErKyA9PSAwKQorCQkJcmV0dXJuICgwKTsKKwlyZXR1cm4gKCoodW5zaWduZWQgY2hhciAqKXMxIC0gKih1bnNpZ25lZCBjaGFyICopLS1zMik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNweS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTkwMDFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjcHkuYwpAQCAtMCwwICsxLDQ2IEBACisvKgkkT3BlbkJTRDogc3RyY3B5LmMsdiAxLjkgMjAxNC8wNi8xMCAwNDoxNzozNyBkZXJhYWR0IEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODggUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZChBUElXQVJOKQorX193YXJuX3JlZmVyZW5jZXMoc3RyY3B5LAorICAgICJ3YXJuaW5nOiBzdHJjcHkoKSBpcyBhbG1vc3QgYWx3YXlzIG1pc3VzZWQsIHBsZWFzZSB1c2Ugc3RybGNweSgpIik7CisjZW5kaWYKKworY2hhciAqCitzdHJjcHkoY2hhciAqdG8sIGNvbnN0IGNoYXIgKmZyb20pCit7CisJY2hhciAqc2F2ZSA9IHRvOworCisJZm9yICg7ICgqdG8gPSAqZnJvbSkgIT0gJ1wwJzsgKytmcm9tLCArK3RvKTsKKwlyZXR1cm4oc2F2ZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJjc3BuLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNzcG4uYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdHJpbmcvc3RyY3Nwbi5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNzcG4uYwpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RyZHVwLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmR1cC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3N0cmluZy9zdHJkdXAuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJkdXAuYwpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RybGNhdC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJsY2F0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RyaW5nL3N0cmxjYXQuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJsY2F0LmMKZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmxjcHkuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybGNweS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3N0cmluZy9zdHJsY3B5LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybGNweS5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmxlbi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJsZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTBlMjdiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJsZW4uYwpAQCAtMCwwICsxLDQzIEBACisvKgkkT3BlbkJTRDogc3RybGVuLmMsdiAxLjggMjAxNC8wNi8xMCAwNDoxNzozNyBkZXJhYWR0IEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCitzaXplX3QKK3N0cmxlbihjb25zdCBjaGFyICpzdHIpCit7CisJY29uc3QgY2hhciAqczsKKworCWZvciAocyA9IHN0cjsgKnM7ICsrcykKKwkJOworCXJldHVybiAocyAtIHN0cik7Cit9CisKZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cm5jYXQuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybmNhdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3N0cmluZy9zdHJuY2F0LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybmNhdC5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5jbXAuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybmNtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNGRkYzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5jbXAuYwpAQCAtMCwwICsxLDQ3IEBACisvKgkkT3BlbkJTRDogc3RybmNtcC5jLHYgMS44IDIwMTQvMDYvMTAgMDQ6MTc6MzcgZGVyYWFkdCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg5IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2ludAorc3RybmNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBuKQoreworCisJaWYgKG4gPT0gMCkKKwkJcmV0dXJuICgwKTsKKwlkbyB7CisJCWlmICgqczEgIT0gKnMyKyspCisJCQlyZXR1cm4gKCoodW5zaWduZWQgY2hhciAqKXMxIC0gKih1bnNpZ25lZCBjaGFyICopLS1zMik7CisJCWlmICgqczErKyA9PSAwKQorCQkJYnJlYWs7CisJfSB3aGlsZSAoLS1uICE9IDApOworCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5jcHkuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybmNweS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMDNhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5jcHkuYwpAQCAtMCwwICsxLDU4IEBACisvKgkkT3BlbkJTRDogc3RybmNweS5jLHYgMS43IDIwMTQvMDYvMTAgMDQ6MTc6MzcgZGVyYWFkdCBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKgorICogQ29weSBzcmMgdG8gZHN0LCB0cnVuY2F0aW5nIG9yIG51bGwtcGFkZGluZyB0byBhbHdheXMgY29weSBuIGJ5dGVzLgorICogUmV0dXJuIGRzdC4KKyAqLworY2hhciAqCitzdHJuY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbikKK3sKKwlpZiAobiAhPSAwKSB7CisJCWNoYXIgKmQgPSBkc3Q7CisJCWNvbnN0IGNoYXIgKnMgPSBzcmM7CisKKwkJZG8geworCQkJaWYgKCgqZCsrID0gKnMrKykgPT0gMCkgeworCQkJCS8qIE5VTCBwYWQgdGhlIHJlbWFpbmluZyBuLTEgYnl0ZXMgKi8KKwkJCQl3aGlsZSAoLS1uICE9IDApCisJCQkJCSpkKysgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9IHdoaWxlICgtLW4gIT0gMCk7CisJfQorCXJldHVybiAoZHN0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybmR1cC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJuZHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc3MDFhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybmR1cC5jCkBAIC0wLDAgKzEsMzkgQEAKKy8qCSRPcGVuQlNEOiBzdHJuZHVwLmMsdiAxLjEgMjAxMC8wNS8xOCAyMjoyNDo1NSB0ZWR1IEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2NoYXIgKgorc3RybmR1cChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBtYXhsZW4pCit7CisJY2hhciAqY29weTsKKwlzaXplX3QgbGVuOworCisJbGVuID0gc3RybmxlbihzdHIsIG1heGxlbik7CisJY29weSA9IG1hbGxvYyhsZW4gKyAxKTsKKwlpZiAoY29weSAhPSBOVUxMKSB7CisJCSh2b2lkKW1lbWNweShjb3B5LCBzdHIsIGxlbik7CisJCWNvcHlbbGVuXSA9ICdcMCc7CisJfQorCisJcmV0dXJuIGNvcHk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJwYnJrLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cnBicmsuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdHJpbmcvc3RycGJyay5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cnBicmsuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJzZXAuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3Ryc2VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZmYzRiNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3Ryc2VwLmMKQEAgLTAsMCArMSw3MCBAQAorLyoJJE9wZW5CU0Q6IHN0cnNlcC5jLHYgMS43IDIwMTQvMDIvMDUgMjA6NDI6MzIgc3RzcCBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoKKyAqIEdldCBuZXh0IHRva2VuIGZyb20gc3RyaW5nICpzdHJpbmdwLCB3aGVyZSB0b2tlbnMgYXJlIHBvc3NpYmx5LWVtcHR5CisgKiBzdHJpbmdzIHNlcGFyYXRlZCBieSBjaGFyYWN0ZXJzIGZyb20gZGVsaW0uICAKKyAqCisgKiBXcml0ZXMgTlVMcyBpbnRvIHRoZSBzdHJpbmcgYXQgKnN0cmluZ3AgdG8gZW5kIHRva2Vucy4KKyAqIGRlbGltIG5lZWQgbm90IHJlbWFpbiBjb25zdGFudCBmcm9tIGNhbGwgdG8gY2FsbC4KKyAqIE9uIHJldHVybiwgKnN0cmluZ3AgcG9pbnRzIHBhc3QgdGhlIGxhc3QgTlVMIHdyaXR0ZW4gKGlmIHRoZXJlIG1pZ2h0CisgKiBiZSBmdXJ0aGVyIHRva2VucyksIG9yIGlzIE5VTEwgKGlmIHRoZXJlIGFyZSBkZWZpbml0ZWx5IG5vIG1vcmUgdG9rZW5zKS4KKyAqCisgKiBJZiAqc3RyaW5ncCBpcyBOVUxMLCBzdHJzZXAgcmV0dXJucyBOVUxMLgorICovCitjaGFyICoKK3N0cnNlcChjaGFyICoqc3RyaW5ncCwgY29uc3QgY2hhciAqZGVsaW0pCit7CisJY2hhciAqczsKKwljb25zdCBjaGFyICpzcGFucDsKKwlpbnQgYywgc2M7CisJY2hhciAqdG9rOworCisJaWYgKChzID0gKnN0cmluZ3ApID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJZm9yICh0b2sgPSBzOzspIHsKKwkJYyA9ICpzKys7CisJCXNwYW5wID0gZGVsaW07CisJCWRvIHsKKwkJCWlmICgoc2MgPSAqc3BhbnArKykgPT0gYykgeworCQkJCWlmIChjID09IDApCisJCQkJCXMgPSBOVUxMOworCQkJCWVsc2UKKwkJCQkJc1stMV0gPSAwOworCQkJCSpzdHJpbmdwID0gczsKKwkJCQlyZXR1cm4gKHRvayk7CisJCQl9CisJCX0gd2hpbGUgKHNjICE9IDApOworCX0KKwkvKiBOT1RSRUFDSEVEICovCit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJzcG4uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3Ryc3BuLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RyaW5nL3N0cnNwbi5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cnNwbi5jCmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJzdHIuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3Ryc3RyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RyaW5nL3N0cnN0ci5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cnN0ci5jCmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJ0b2suYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RydG9rLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RyaW5nL3N0cnRvay5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cnRvay5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3djc2xjcHkuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvd2NzbGNweS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OTkzNmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3djc2xjcHkuYwpAQCAtMCwwICsxLDUyIEBACisvKgkkT3BlbkJTRDogd2NzbGNweS5jLHYgMS41IDIwMTEvMDcvMjQgMTU6MjE6MjggbWlsbGVydCBFeHAgJAkqLworLyoJJE5ldEJTRDogd2NzbGNweS5jLHYgMS4yIDIwMDEvMDEvMDMgMTQ6MzM6MDIgbHVrZW0gRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5OCBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworLyoKKyAqIENvcHkgc3JjIHRvIHN0cmluZyBkc3Qgb2Ygc2l6ZSBzaXouICBBdCBtb3N0IHNpei0xIGNoYXJhY3RlcnMKKyAqIHdpbGwgYmUgY29waWVkLiAgQWx3YXlzIE5VTCB0ZXJtaW5hdGVzICh1bmxlc3Mgc2l6ID09IDApLgorICogUmV0dXJucyB3Y3NsZW4oc3JjKTsgaWYgcmV0dmFsID49IHNpeiwgdHJ1bmNhdGlvbiBvY2N1cnJlZC4KKyAqLworc2l6ZV90Cit3Y3NsY3B5KHdjaGFyX3QgKmRzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3Qgc2l6KQoreworCXdjaGFyX3QgKmQgPSBkc3Q7CisJY29uc3Qgd2NoYXJfdCAqcyA9IHNyYzsKKwlzaXplX3QgbiA9IHNpejsKKworCS8qIENvcHkgYXMgbWFueSBieXRlcyBhcyB3aWxsIGZpdCAqLworCWlmIChuICE9IDApIHsKKwkJd2hpbGUgKC0tbiAhPSAwKSB7CisJCQlpZiAoKCpkKysgPSAqcysrKSA9PSAnXDAnKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJLyogTm90IGVub3VnaCByb29tIGluIGRzdCwgYWRkIE5VTCBhbmQgdHJhdmVyc2UgcmVzdCBvZiBzcmMgKi8KKwlpZiAobiA9PSAwKSB7CisJCWlmIChzaXogIT0gMCkKKwkJCSpkID0gJ1wwJzsJCS8qIE5VTC10ZXJtaW5hdGUgZHN0ICovCisJCXdoaWxlICgqcysrKQorCQkJOworCX0KKworCXJldHVybihzIC0gc3JjIC0gMSk7CS8qIGNvdW50IGRvZXMgbm90IGluY2x1ZGUgTlVMICovCit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3djc3N0ci5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy93Y3NzdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjllMzQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy93Y3NzdHIuYwpAQCAtMCwwICsxLDcwIEBACisvKgkkT3BlbkJTRDogd2Nzc3RyLmMsdiAxLjMgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJAkqLworLyoJJE5ldEJTRDogd2Nzc3RyLmMsdiAxLjMgMjAwMy8wMy8wNSAyMDoxODoxNyB0c2hpb3phayBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykxOTk5IENpdHJ1cyBQcm9qZWN0LAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKgljaXRydXMgSWQ6IHdjc3N0ci5jLHYgMS4yIDIwMDAvMTIvMjEgMDU6MDc6MjUgaXRvanVuIEV4cAorICovCisKKyNpbmNsdWRlIDx3Y2hhci5oPgorCit3Y2hhcl90ICoKKyNpZmRlZiBXQ1NXQ1MKK3djc3djcyhjb25zdCB3Y2hhcl90ICpiaWcsIGNvbnN0IHdjaGFyX3QgKmxpdHRsZSkKKyNlbHNlCit3Y3NzdHIoY29uc3Qgd2NoYXJfdCAqYmlnLCBjb25zdCB3Y2hhcl90ICpsaXR0bGUpCisjZW5kaWYKK3sKKwljb25zdCB3Y2hhcl90ICpwOworCWNvbnN0IHdjaGFyX3QgKnE7CisJY29uc3Qgd2NoYXJfdCAqcjsKKworCWlmICghKmxpdHRsZSkgeworCQkvKiBMSU5URUQgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gKi8KKwkJcmV0dXJuICh3Y2hhcl90ICopYmlnOworCX0KKwlpZiAod2NzbGVuKGJpZykgPCB3Y3NsZW4obGl0dGxlKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwID0gYmlnOworCXEgPSBsaXR0bGU7CisJd2hpbGUgKCpwKSB7CisJCXEgPSBsaXR0bGU7CisJCXIgPSBwOworCQl3aGlsZSAoKnEpIHsKKwkJCWlmICgqciAhPSAqcSkKKwkJCQlicmVhazsKKwkJCXErKzsKKwkJCXIrKzsKKwkJfQorCQlpZiAoISpxKSB7CisJCQkvKiBMSU5URUQgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gKi8KKwkJCXJldHVybiAod2NoYXJfdCAqKXA7CisJCX0KKwkJcCsrOworCX0KKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvd2Nzd2lkdGguYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvd2Nzd2lkdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWExYmRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy93Y3N3aWR0aC5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCSRPcGVuQlNEOiB3Y3N3aWR0aC5jLHYgMS40IDIwMTEvMDQvMDQgMTg6MTY6MjQgc3RzcCBFeHAgJAkqLworLyoJJE5ldEJTRDogd2Nzd2lkdGguYyx2IDEuMiAyMDAxLzAxLzAzIDE0OjI5OjM3IGx1a2VtIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKTE5OTkgQ2l0cnVzIFByb2plY3QsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCWNpdHJ1cyBJZDogd2Nzd2lkdGguYyx2IDEuMSAxOTk5LzEyLzI5IDIxOjQ3OjQ1IHRzaGlvemFrIEV4cAorICovCisKKyNpbmNsdWRlIDx3Y2hhci5oPgorCitpbnQKK3djc3dpZHRoKGNvbnN0IHdjaGFyX3QgKnMsIHNpemVfdCBuKQoreworCWludCB3LCBxOworCisJdyA9IDA7CisJd2hpbGUgKG4gJiYgKnMpIHsKKwkJcSA9IHdjd2lkdGgoKnMpOworCQlpZiAocSA9PSAtMSkKKwkJCXJldHVybiAoLTEpOworCQl3ICs9IHE7CisJCXMrKzsKKwkJbi0tOworCX0KKworCXJldHVybiB3OworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3RpbWUvd2NzZnRpbWUuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy90aW1lL3djc2Z0aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFjY2FjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy90aW1lL3djc2Z0aW1lLmMKQEAgLTAsMCArMSw1NTUgQEAKKy8qCSRPcGVuQlNEOiB3Y3NmdGltZS5jLHYgMS4zIDIwMTQvMDUvMDYgMTU6NDk6NDUgdGVkdSBFeHAgJCAqLworI2luY2x1ZGUgInByaXZhdGUuaCIKKworLyoKKyoqIEJhc2VkIG9uIHRoZSBVQ0IgdmVyc2lvbiB3aXRoIHRoZSBJRCBhcHBlYXJpbmcgYmVsb3cuCisqKiBUaGlzIGlzIEFOU0lpc2ggb25seSB3aGVuICJtdWx0aWJ5dGUgY2hhcmFjdGVyID09IHBsYWluIGNoYXJhY3RlciIuCisqKgorKiogQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzCisqKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoqCisqKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyoqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiogYXJlIG1ldDoKKyoqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisqKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyoqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKioKKyoqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisqKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyoqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisqKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyoqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisqKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworKiogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisqKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKiogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorKiogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorKiogU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAidHpmaWxlLmgiCisjaW5jbHVkZSAiZmNudGwuaCIKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCitzdHJ1Y3QgbGNfdGltZV9UIHsKKwljb25zdCB3Y2hhcl90ICoJbW9uW01PTlNQRVJZRUFSXTsKKwljb25zdCB3Y2hhcl90ICoJbW9udGhbTU9OU1BFUllFQVJdOworCWNvbnN0IHdjaGFyX3QgKgl3ZGF5W0RBWVNQRVJXRUVLXTsKKwljb25zdCB3Y2hhcl90ICoJd2Vla2RheVtEQVlTUEVSV0VFS107CisJY29uc3Qgd2NoYXJfdCAqCVhfZm10OworCWNvbnN0IHdjaGFyX3QgKgl4X2ZtdDsKKwljb25zdCB3Y2hhcl90ICoJY19mbXQ7CisJY29uc3Qgd2NoYXJfdCAqCWFtOworCWNvbnN0IHdjaGFyX3QgKglwbTsKKwljb25zdCB3Y2hhcl90ICoJZGF0ZV9mbXQ7Cit9OworCisjZGVmaW5lIExvY2FsZQkoJkNfdGltZV9sb2NhbGUpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGNfdGltZV9UCUNfdGltZV9sb2NhbGUgPSB7CisJeworCQlMIkphbiIsIEwiRmViIiwgTCJNYXIiLCBMIkFwciIsIEwiTWF5IiwgTCJKdW4iLAorCQlMIkp1bCIsIEwiQXVnIiwgTCJTZXAiLCBMIk9jdCIsIEwiTm92IiwgTCJEZWMiCisJfSwgeworCQlMIkphbnVhcnkiLCBMIkZlYnJ1YXJ5IiwgTCJNYXJjaCIsIEwiQXByaWwiLCBMIk1heSIsIEwiSnVuZSIsCisJCUwiSnVseSIsIEwiQXVndXN0IiwgTCJTZXB0ZW1iZXIiLCBMIk9jdG9iZXIiLCBMIk5vdmVtYmVyIiwgCisJCUwiRGVjZW1iZXIiCisJfSwgeworCQlMIlN1biIsIEwiTW9uIiwgTCJUdWUiLCBMIldlZCIsCisJCUwiVGh1IiwgTCJGcmkiLCBMIlNhdCIKKwl9LCB7CisJCUwiU3VuZGF5IiwgTCJNb25kYXkiLCBMIlR1ZXNkYXkiLCBMIldlZG5lc2RheSIsCisJCUwiVGh1cnNkYXkiLCBMIkZyaWRheSIsIEwiU2F0dXJkYXkiCisJfSwKKworCS8qIFhfZm10ICovCisJTCIlSDolTTolUyIsCisKKwkvKgorCSoqIHhfZm10CisJKiogQzk5IHJlcXVpcmVzIHRoaXMgZm9ybWF0LgorCSoqIFVzaW5nIGp1c3QgbnVtYmVycyAoYXMgaGVyZSkgbWFrZXMgUXVha2VycyBoYXBwaWVyOworCSoqIGl0J3MgYWxzbyBjb21wYXRpYmxlIHdpdGggU1ZSNC4KKwkqLworCUwiJW0vJWQvJXkiLAorCisJLyoKKwkqKiBjX2ZtdAorCSoqIEM5OSByZXF1aXJlcyB0aGlzIGZvcm1hdC4KKwkqKiBQcmV2aW91c2x5IHRoaXMgY29kZSB1c2VkICIlRCAlWCIsIGJ1dCB3ZSBub3cgY29uZm9ybSB0byBDOTkuCisJKiogTm90ZSB0aGF0CisJKioJIiVhICViICVkICVIOiVNOiVTICVZIgorCSoqIGlzIHVzZWQgYnkgU29sYXJpcyAyLjMuCisJKi8KKwlMIiVhICViICVlICVUICVZIiwKKworCS8qIGFtICovCisJTCJBTSIsCisKKwkvKiBwbSAqLworCUwiUE0iLAorCisJLyogZGF0ZV9mbXQgKi8KKwlMIiVhICViICVlICVIOiVNOiVTICVaICVZIgorfTsKKworI2RlZmluZSBVTktOT1dOIEwiPyIKK3N0YXRpYyB3Y2hhcl90ICoJX2FkZChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKK3N0YXRpYyB3Y2hhcl90ICoJX3NhZGQoY29uc3QgY2hhciAqLCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CitzdGF0aWMgd2NoYXJfdCAqCV9jb252KGludCwgY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CitzdGF0aWMgd2NoYXJfdCAqCV9mbXQoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCBzdHJ1Y3QgdG0gKiwgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosCisJCQlpbnQgKik7CitzdGF0aWMgd2NoYXJfdCAqCV95Y29udihpbnQsIGludCwgaW50LCBpbnQsIHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKKworZXh0ZXJuIGNoYXIgKgl0em5hbWVbXTsKKworI2RlZmluZSBJTl9OT05FCTAKKyNkZWZpbmUgSU5fU09NRQkxCisjZGVmaW5lIElOX1RISVMJMgorI2RlZmluZSBJTl9BTEwJMworCitzaXplX3QKK3djc2Z0aW1lKHdjaGFyX3QgKl9fcmVzdHJpY3Qgcywgc2l6ZV90IG1heHNpemUsIAorICAgIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgZm9ybWF0LCBjb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgdCkKK3sKKwl3Y2hhcl90ICpwOworCWludAl3YXJuOworCisJdHpzZXQoKTsKKwl3YXJuID0gSU5fTk9ORTsKKwlwID0gX2ZtdCgoKGZvcm1hdCA9PSBOVUxMKSA/IEwiJWMiIDogZm9ybWF0KSwgdCwgcywgcyArIG1heHNpemUsICZ3YXJuKTsKKwlpZiAocCA9PSBzICsgbWF4c2l6ZSkgeworCQlpZiAobWF4c2l6ZSA+IDApCisJCQlzW21heHNpemUgLSAxXSA9ICdcMCc7CisJCXJldHVybiAwOworCX0KKwkqcCA9IEwnXDAnOworCXJldHVybiBwIC0gczsKK30KKworc3RhdGljIHdjaGFyX3QgKgorX2ZtdChjb25zdCB3Y2hhcl90ICpmb3JtYXQsIGNvbnN0IHN0cnVjdCB0bSAqdCwgd2NoYXJfdCAqcHQsIAorICAgIGNvbnN0IHdjaGFyX3QgKnB0bGltLCBpbnQgKndhcm5wKQoreworCWZvciAoIDsgKmZvcm1hdDsgKytmb3JtYXQpIHsKKwkJaWYgKCpmb3JtYXQgIT0gTCclJykgeworCQkJaWYgKHB0ID09IHB0bGltKQorCQkJCWJyZWFrOworCQkJKnB0KysgPSAqZm9ybWF0OworCQkJY29udGludWU7CisJCX0KK2xhYmVsOgorCQlzd2l0Y2ggKCorK2Zvcm1hdCkgeworCQljYXNlICdcMCc6CisJCQktLWZvcm1hdDsKKwkJCWJyZWFrOworCQljYXNlICdBJzoKKwkJCXB0ID0gX2FkZCgodC0+dG1fd2RheSA8IDAgfHwKKwkJCQl0LT50bV93ZGF5ID49IERBWVNQRVJXRUVLKSA/CisJCQkJVU5LTk9XTiA6IExvY2FsZS0+d2Vla2RheVt0LT50bV93ZGF5XSwKKwkJCQlwdCwgcHRsaW0pOworCQkJY29udGludWU7CisJCWNhc2UgJ2EnOgorCQkJcHQgPSBfYWRkKCh0LT50bV93ZGF5IDwgMCB8fAorCQkJCXQtPnRtX3dkYXkgPj0gREFZU1BFUldFRUspID8KKwkJCQlVTktOT1dOIDogTG9jYWxlLT53ZGF5W3QtPnRtX3dkYXldLAorCQkJCXB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnQic6CisJCQlwdCA9IF9hZGQoKHQtPnRtX21vbiA8IDAgfHwKKwkJCQl0LT50bV9tb24gPj0gTU9OU1BFUllFQVIpID8KKwkJCQlVTktOT1dOIDogTG9jYWxlLT5tb250aFt0LT50bV9tb25dLAorCQkJCXB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnYic6CisJCWNhc2UgJ2gnOgorCQkJcHQgPSBfYWRkKCh0LT50bV9tb24gPCAwIHx8CisJCQkJdC0+dG1fbW9uID49IE1PTlNQRVJZRUFSKSA/CisJCQkJVU5LTk9XTiA6IExvY2FsZS0+bW9uW3QtPnRtX21vbl0sCisJCQkJcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdDJzoKKwkJCS8qCisJCQkqKiAlQyB1c2VkIHRvIGRvIGEuLi4KKwkJCSoqCV9mbXQoIiVhICViICVlICVYICVZIiwgdCk7CisJCQkqKiAuLi53aGVyZWFzIG5vdyBQT1NJWCAxMDAzLjIgY2FsbHMgZm9yCisJCQkqKiBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQuCisJCQkqKiAoYWRvLCAxOTkzLTA1LTI0KQorCQkJKi8KKwkJCXB0ID0gX3ljb252KHQtPnRtX3llYXIsIFRNX1lFQVJfQkFTRSwgMSwgMCwKKwkJCQlwdCwgcHRsaW0pOworCQkJY29udGludWU7CisJCWNhc2UgJ2MnOgorCQkJeworCQkJaW50IHdhcm4yID0gSU5fU09NRTsKKworCQkJcHQgPSBfZm10KExvY2FsZS0+Y19mbXQsIHQsIHB0LCBwdGxpbSwgJndhcm4yKTsKKwkJCWlmICh3YXJuMiA9PSBJTl9BTEwpCisJCQkJd2FybjIgPSBJTl9USElTOworCQkJaWYgKHdhcm4yID4gKndhcm5wKQorCQkJCSp3YXJucCA9IHdhcm4yOworCQkJfQorCQkJY29udGludWU7CisJCWNhc2UgJ0QnOgorCQkJcHQgPSBfZm10KEwiJW0vJWQvJXkiLCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdkJzoKKwkJCXB0ID0gX2NvbnYodC0+dG1fbWRheSwgTCIlMDJkIiwgcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdFJzoKKwkJY2FzZSAnTyc6CisJCQkvKgorCQkJKiogQzk5IGxvY2FsZSBtb2RpZmllcnMuCisJCQkqKiBUaGUgc2VxdWVuY2VzCisJCQkqKgklRWMgJUVDICVFeCAlRVggJUV5ICVFWQorCQkJKioJJU9kICVvZSAlT0ggJU9JICVPbSAlT00KKwkJCSoqCSVPUyAlT3UgJU9VICVPViAlT3cgJU9XICVPeQorCQkJKiogYXJlIHN1cHBvc2VkIHRvIHByb3ZpZGUgYWx0ZXJuYXRlCisJCQkqKiByZXByZXNlbnRhdGlvbnMuCisJCQkqLworCQkJZ290byBsYWJlbDsKKwkJY2FzZSAnZSc6CisJCQlwdCA9IF9jb252KHQtPnRtX21kYXksIEwiJTJkIiwgcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdGJzoKKwkJCXB0ID0gX2ZtdChMIiVZLSVtLSVkIiwgdCwgcHQsIHB0bGltLCB3YXJucCk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnSCc6CisJCQlwdCA9IF9jb252KHQtPnRtX2hvdXIsIEwiJTAyZCIsIHB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnSSc6CisJCQlwdCA9IF9jb252KCh0LT50bV9ob3VyICUgMTIpID8KKwkJCQkodC0+dG1faG91ciAlIDEyKSA6IDEyLAorCQkJCUwiJTAyZCIsIHB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnaic6CisJCQlwdCA9IF9jb252KHQtPnRtX3lkYXkgKyAxLCBMIiUwM2QiLCBwdCwgcHRsaW0pOworCQkJY29udGludWU7CisJCWNhc2UgJ2snOgorCQkJLyoKKwkJCSoqIFRoaXMgdXNlZCB0byBiZS4uLgorCQkJKioJX2NvbnYodC0+dG1faG91ciAlIDEyID8KKwkJCSoqCQl0LT50bV9ob3VyICUgMTIgOiAxMiwgMiwgJyAnKTsKKwkJCSoqIC4uLmFuZCBoYXMgYmVlbiBjaGFuZ2VkIHRvIHRoZSBiZWxvdyB0bworCQkJKiogbWF0Y2ggU3VuT1MgNC4xLjEgYW5kIEFybm9sZCBSb2JiaW5zJworCQkJKiogc3RyZnRpbWUgdmVyc2lvbiAzLjAuIFRoYXQgaXMsICIlayIgYW5kCisJCQkqKiAiJWwiIGhhdmUgYmVlbiBzd2FwcGVkLgorCQkJKiogKGFkbywgMTk5My0wNS0yNCkKKwkJCSovCisJCQlwdCA9IF9jb252KHQtPnRtX2hvdXIsIEwiJTJkIiwgcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdsJzoKKwkJCS8qCisJCQkqKiBUaGlzIHVzZWQgdG8gYmUuLi4KKwkJCSoqCV9jb252KHQtPnRtX2hvdXIsIDIsICcgJyk7CisJCQkqKiAuLi5hbmQgaGFzIGJlZW4gY2hhbmdlZCB0byB0aGUgYmVsb3cgdG8KKwkJCSoqIG1hdGNoIFN1bk9TIDQuMS4xIGFuZCBBcm5vbGQgUm9iYmluJ3MKKwkJCSoqIHN0cmZ0aW1lIHZlcnNpb24gMy4wLiBUaGF0IGlzLCAiJWsiIGFuZAorCQkJKiogIiVsIiBoYXZlIGJlZW4gc3dhcHBlZC4KKwkJCSoqIChhZG8sIDE5OTMtMDUtMjQpCisJCQkqLworCQkJcHQgPSBfY29udigodC0+dG1faG91ciAlIDEyKSA/CisJCQkJKHQtPnRtX2hvdXIgJSAxMikgOiAxMiwKKwkJCQlMIiUyZCIsIHB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnTSc6CisJCQlwdCA9IF9jb252KHQtPnRtX21pbiwgTCIlMDJkIiwgcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdtJzoKKwkJCXB0ID0gX2NvbnYodC0+dG1fbW9uICsgMSwgTCIlMDJkIiwgcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICduJzoKKwkJCXB0ID0gX2FkZChMIlxuIiwgcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdwJzoKKwkJCXB0ID0gX2FkZCgodC0+dG1faG91ciA+PSAoSE9VUlNQRVJEQVkgLyAyKSkgPworCQkJCUxvY2FsZS0+cG0gOgorCQkJCUxvY2FsZS0+YW0sCisJCQkJcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdSJzoKKwkJCXB0ID0gX2ZtdChMIiVIOiVNIiwgdCwgcHQsIHB0bGltLCB3YXJucCk7CisJCQljb250aW51ZTsKKwkJY2FzZSAncic6CisJCQlwdCA9IF9mbXQoTCIlSTolTTolUyAlcCIsIHQsIHB0LCBwdGxpbSwgd2FybnApOworCQkJY29udGludWU7CisJCWNhc2UgJ1MnOgorCQkJcHQgPSBfY29udih0LT50bV9zZWMsIEwiJTAyZCIsIHB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAncyc6CisJCQl7CisJCQkJc3RydWN0IHRtCXRtOworCQkJCXdjaGFyX3QJCWJ1ZltJTlRfU1RSTEVOX01BWElNVU0oCisJCQkJCQkJdGltZV90KSArIDFdOworCQkJCXRpbWVfdAkJbWt0OworCisJCQkJdG0gPSAqdDsKKwkJCQlta3QgPSBta3RpbWUoJnRtKTsKKwkJCQlpZiAoVFlQRV9TSUdORUQodGltZV90KSkKKwkJCQkJKHZvaWQpIHN3cHJpbnRmKGJ1ZiwgCisJCQkJCSAgICBzaXplb2YgYnVmL3NpemVvZiBidWZbMF0sCisJCQkJCSAgICBMIiVsZCIsIChsb25nKSBta3QpOworCQkJCWVsc2UJCisJCQkJCSh2b2lkKSBzd3ByaW50ZihidWYsIAorCQkJCQkgICAgc2l6ZW9mIGJ1Zi9zaXplb2YgYnVmWzBdLAorCQkJCQkgICAgTCIlbHUiLCAodW5zaWduZWQgbG9uZykgbWt0KTsKKwkJCQlwdCA9IF9hZGQoYnVmLCBwdCwgcHRsaW0pOworCQkJfQorCQkJY29udGludWU7CisJCWNhc2UgJ1QnOgorCQkJcHQgPSBfZm10KEwiJUg6JU06JVMiLCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICd0JzoKKwkJCXB0ID0gX2FkZChMIlx0IiwgcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdVJzoKKwkJCXB0ID0gX2NvbnYoKHQtPnRtX3lkYXkgKyBEQVlTUEVSV0VFSyAtCisJCQkJdC0+dG1fd2RheSkgLyBEQVlTUEVSV0VFSywKKwkJCQlMIiUwMmQiLCBwdCwgcHRsaW0pOworCQkJY29udGludWU7CisJCWNhc2UgJ3UnOgorCQkJLyoKKwkJCSoqIEZyb20gQXJub2xkIFJvYmJpbnMnIHN0cmZ0aW1lIHZlcnNpb24gMy4wOgorCQkJKiogIklTTyA4NjAxOiBXZWVrZGF5IGFzIGEgZGVjaW1hbCBudW1iZXIKKwkJCSoqIFsxIChNb25kYXkpIC0gN10iCisJCQkqKiAoYWRvLCAxOTkzLTA1LTI0KQorCQkJKi8KKwkJCXB0ID0gX2NvbnYoKHQtPnRtX3dkYXkgPT0gMCkgPworCQkJCURBWVNQRVJXRUVLIDogdC0+dG1fd2RheSwKKwkJCQlMIiVkIiwgcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdWJzoJLyogSVNPIDg2MDEgd2VlayBudW1iZXIgKi8KKwkJY2FzZSAnRyc6CS8qIElTTyA4NjAxIHllYXIgKGZvdXIgZGlnaXRzKSAqLworCQljYXNlICdnJzoJLyogSVNPIDg2MDEgeWVhciAodHdvIGRpZ2l0cykgKi8KKy8qCisqKiBGcm9tIEFybm9sZCBSb2JiaW5zJyBzdHJmdGltZSB2ZXJzaW9uIDMuMDogInRoZSB3ZWVrIG51bWJlciBvZiB0aGUKKyoqIHllYXIgKHRoZSBmaXJzdCBNb25kYXkgYXMgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIDEpIGFzIGEgZGVjaW1hbCBudW1iZXIKKyoqICgwMS01MykuIgorKiogKGFkbywgMTk5My0wNS0yNCkKKyoqCisqKiBGcm9tICJodHRwOi8vd3d3LmZ0LnVuaS1lcmxhbmdlbi5kZS9+bXNrdWhuL2lzby10aW1lLmh0bWwiIGJ5IE1hcmt1cyBLdWhuOgorKiogIldlZWsgMDEgb2YgYSB5ZWFyIGlzIHBlciBkZWZpbml0aW9uIHRoZSBmaXJzdCB3ZWVrIHdoaWNoIGhhcyB0aGUKKyoqIFRodXJzZGF5IGluIHRoaXMgeWVhciwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byB0aGUgd2VlayB3aGljaCBjb250YWlucworKiogdGhlIGZvdXJ0aCBkYXkgb2YgSmFudWFyeS4gSW4gb3RoZXIgd29yZHMsIHRoZSBmaXJzdCB3ZWVrIG9mIGEgbmV3IHllYXIKKyoqIGlzIHRoZSB3ZWVrIHdoaWNoIGhhcyB0aGUgbWFqb3JpdHkgb2YgaXRzIGRheXMgaW4gdGhlIG5ldyB5ZWFyLiBXZWVrIDAxCisqKiBtaWdodCBhbHNvIGNvbnRhaW4gZGF5cyBmcm9tIHRoZSBwcmV2aW91cyB5ZWFyIGFuZCB0aGUgd2VlayBiZWZvcmUgd2VlaworKiogMDEgb2YgYSB5ZWFyIGlzIHRoZSBsYXN0IHdlZWsgKDUyIG9yIDUzKSBvZiB0aGUgcHJldmlvdXMgeWVhciBldmVuIGlmCisqKiBpdCBjb250YWlucyBkYXlzIGZyb20gdGhlIG5ldyB5ZWFyLiBBIHdlZWsgc3RhcnRzIHdpdGggTW9uZGF5IChkYXkgMSkKKyoqIGFuZCBlbmRzIHdpdGggU3VuZGF5IChkYXkgNykuIEZvciBleGFtcGxlLCB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhcgorKiogMTk5NyBsYXN0cyBmcm9tIDE5OTYtMTItMzAgdG8gMTk5Ny0wMS0wNS4uLiIKKyoqIChhZG8sIDE5OTYtMDEtMDIpCisqLworCQkJeworCQkJaW50CXllYXI7CisJCQlpbnQJYmFzZTsKKwkJCWludAl5ZGF5OworCQkJaW50CXdkYXk7CisJCQlpbnQJdzsKKworCQkJeWVhciA9IHQtPnRtX3llYXI7CisJCQliYXNlID0gVE1fWUVBUl9CQVNFOworCQkJeWRheSA9IHQtPnRtX3lkYXk7CisJCQl3ZGF5ID0gdC0+dG1fd2RheTsKKwkJCWZvciAoIDsgOyApIHsKKwkJCQlpbnQJbGVuOworCQkJCWludAlib3Q7CisJCQkJaW50CXRvcDsKKworCQkJCWxlbiA9IGlzbGVhcF9zdW0oeWVhciwgYmFzZSkgPworCQkJCQlEQVlTUEVSTFlFQVIgOgorCQkJCQlEQVlTUEVSTllFQVI7CisJCQkJLyoKKwkJCQkqKiBXaGF0IHlkYXkgKC0zIC4uLiAzKSBkb2VzIHRoZSBJU08geWVhciAKKwkJCQkqKiBiZWdpbiBvbj8KKwkJCQkqLworCQkJCWJvdCA9ICgoeWRheSArIDExIC0gd2RheSkgJSBEQVlTUEVSV0VFSykgLSAzOworCQkJCS8qCisJCQkJKiogV2hhdCB5ZGF5IGRvZXMgdGhlIE5FWFQgSVNPIHllYXIgYmVnaW4gb24/CisJCQkJKi8KKwkJCQl0b3AgPSBib3QgLSAobGVuICUgREFZU1BFUldFRUspOworCQkJCWlmICh0b3AgPCAtMykKKwkJCQkJdG9wICs9IERBWVNQRVJXRUVLOworCQkJCXRvcCArPSBsZW47CisJCQkJaWYgKHlkYXkgPj0gdG9wKSB7CisJCQkJCSsrYmFzZTsKKwkJCQkJdyA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoeWRheSA+PSBib3QpIHsKKwkJCQkJdyA9IDEgKyAoKHlkYXkgLSBib3QpIC8gREFZU1BFUldFRUspOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLS1iYXNlOworCQkJCXlkYXkgKz0gaXNsZWFwX3N1bSh5ZWFyLCBiYXNlKSA/CisJCQkJCURBWVNQRVJMWUVBUiA6CisJCQkJCURBWVNQRVJOWUVBUjsKKwkJCX0KKwkJCWlmICgodyA9PSA1MiAmJiB0LT50bV9tb24gPT0gVE1fSkFOVUFSWSkgfHwKKwkJCQkodyA9PSAxICYmIHQtPnRtX21vbiA9PSBUTV9ERUNFTUJFUikpCisJCQkJCXcgPSA1MzsKKwkJCWlmICgqZm9ybWF0ID09ICdWJykKKwkJCQlwdCA9IF9jb252KHcsIEwiJTAyZCIsIHB0LCBwdGxpbSk7CisJCQllbHNlIGlmICgqZm9ybWF0ID09ICdnJykgeworCQkJCSp3YXJucCA9IElOX0FMTDsKKwkJCQlwdCA9IF95Y29udih5ZWFyLCBiYXNlLCAwLCAxLCBwdCwgcHRsaW0pOworCQkJfSBlbHNlCQorCQkJCXB0ID0gX3ljb252KHllYXIsIGJhc2UsIDEsIDEsIHB0LCBwdGxpbSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJY2FzZSAndic6CisJCQkvKgorCQkJKiogRnJvbSBBcm5vbGQgUm9iYmlucycgc3RyZnRpbWUgdmVyc2lvbiAzLjA6CisJCQkqKiAiZGF0ZSBhcyBkZC1iYmItWVlZWSIKKwkJCSoqIChhZG8sIDE5OTMtMDUtMjQpCisJCQkqLworCQkJcHQgPSBfZm10KEwiJWUtJWItJVkiLCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdXJzoKKwkJCXB0ID0gX2NvbnYoKHQtPnRtX3lkYXkgKyBEQVlTUEVSV0VFSyAtCisJCQkJKHQtPnRtX3dkYXkgPworCQkJCSh0LT50bV93ZGF5IC0gMSkgOgorCQkJCShEQVlTUEVSV0VFSyAtIDEpKSkgLyBEQVlTUEVSV0VFSywKKwkJCQlMIiUwMmQiLCBwdCwgcHRsaW0pOworCQkJY29udGludWU7CisJCWNhc2UgJ3cnOgorCQkJcHQgPSBfY29udih0LT50bV93ZGF5LCBMIiVkIiwgcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdYJzoKKwkJCXB0ID0gX2ZtdChMb2NhbGUtPlhfZm10LCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICd4JzoKKwkJCXsKKwkJCWludAl3YXJuMiA9IElOX1NPTUU7CisKKwkJCXB0ID0gX2ZtdChMb2NhbGUtPnhfZm10LCB0LCBwdCwgcHRsaW0sICZ3YXJuMik7CisJCQlpZiAod2FybjIgPT0gSU5fQUxMKQorCQkJCXdhcm4yID0gSU5fVEhJUzsKKwkJCWlmICh3YXJuMiA+ICp3YXJucCkKKwkJCQkqd2FybnAgPSB3YXJuMjsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQljYXNlICd5JzoKKwkJCSp3YXJucCA9IElOX0FMTDsKKwkJCXB0ID0gX3ljb252KHQtPnRtX3llYXIsIFRNX1lFQVJfQkFTRSwgMCwgMSwgcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdZJzoKKwkJCXB0ID0gX3ljb252KHQtPnRtX3llYXIsIFRNX1lFQVJfQkFTRSwgMSwgMSwgcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdaJzoKKwkJCWlmICh0LT50bV96b25lICE9IE5VTEwpCisJCQkJcHQgPSBfc2FkZCh0LT5UTV9aT05FLCBwdCwgcHRsaW0pOworCQkJZWxzZQorCQkJCWlmICh0LT50bV9pc2RzdCA+PSAwKQorCQkJCQlwdCA9IF9zYWRkKHR6bmFtZVt0LT50bV9pc2RzdCAhPSAwXSwgCisJCQkJCSAgICBwdCwgcHRsaW0pOworCQkJLyoKKwkJCSoqIEM5OSBzYXlzIHRoYXQgJVogbXVzdCBiZSByZXBsYWNlZCBieSB0aGUKKwkJCSoqIGVtcHR5IHN0cmluZyBpZiB0aGUgdGltZSB6b25lIGlzIG5vdAorCQkJKiogZGV0ZXJtaW5hYmxlLgorCQkJKi8KKwkJCWNvbnRpbnVlOworCQljYXNlICd6JzoKKwkJCXsKKwkJCWludAkJZGlmZjsKKwkJCXdjaGFyX3QgY29uc3QgKglzaWduOworCisJCQlpZiAodC0+dG1faXNkc3QgPCAwKQorCQkJCWNvbnRpbnVlOworCQkJZGlmZiA9IHQtPnRtX2dtdG9mZjsKKwkJCWlmIChkaWZmIDwgMCkgeworCQkJCXNpZ24gPSBMIi0iOworCQkJCWRpZmYgPSAtZGlmZjsKKwkJCX0gZWxzZQkKKwkJCQlzaWduID0gTCIrIjsKKwkJCXB0ID0gX2FkZChzaWduLCBwdCwgcHRsaW0pOworCQkJZGlmZiAvPSBTRUNTUEVSTUlOOworCQkJZGlmZiA9IChkaWZmIC8gTUlOU1BFUkhPVVIpICogMTAwICsKKwkJCQkoZGlmZiAlIE1JTlNQRVJIT1VSKTsKKwkJCXB0ID0gX2NvbnYoZGlmZiwgTCIlMDRkIiwgcHQsIHB0bGltKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQljYXNlICcrJzoKKwkJCXB0ID0gX2ZtdChMb2NhbGUtPmRhdGVfZm10LCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICclJzoKKwkJLyoKKwkJKiogWDMxMUovODgtMDkwICg0LjEyLjMuNSk6IGlmIGNvbnZlcnNpb24gd2NoYXJfdCBpcworCQkqKiB1bmRlZmluZWQsIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4gUHJpbnQgb3V0IHRoZQorCQkqKiBjaGFyYWN0ZXIgaXRzZWxmIGFzIHByaW50ZigzKSBhbHNvIGRvZXMuCisJCSovCisJCWRlZmF1bHQ6CisJCQlpZiAocHQgIT0gcHRsaW0pCisJCQkJKnB0KysgPSAqZm9ybWF0OworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHB0OworfQorCitzdGF0aWMgd2NoYXJfdCAqCitfY29udihpbnQgbiwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB3Y2hhcl90ICpwdCwgY29uc3Qgd2NoYXJfdCAqcHRsaW0pCit7CisJd2NoYXJfdAlidWZbSU5UX1NUUkxFTl9NQVhJTVVNKGludCkgKyAxXTsKKworCSh2b2lkKSBzd3ByaW50ZihidWYsIHNpemVvZiBidWYvc2l6ZW9mIGJ1ZlswXSwgZm9ybWF0LCBuKTsKKwlyZXR1cm4gX2FkZChidWYsIHB0LCBwdGxpbSk7Cit9CisKK3N0YXRpYyB3Y2hhcl90ICoKK19hZGQoY29uc3Qgd2NoYXJfdCAqc3RyLCB3Y2hhcl90ICpwdCwgY29uc3Qgd2NoYXJfdCAqcHRsaW0pCit7CisJd2hpbGUgKHB0IDwgcHRsaW0gJiYgKCpwdCA9ICpzdHIrKykgIT0gTCdcMCcpCisJCSsrcHQ7CisJcmV0dXJuIHB0OworfQorCitzdGF0aWMgd2NoYXJfdCAqCitfc2FkZChjb25zdCBjaGFyICpzdHIsIHdjaGFyX3QgKnB0LCBjb25zdCB3Y2hhcl90ICpwdGxpbSkKK3sKKwl3aGlsZSAocHQgPCBwdGxpbSAmJiAoKnB0ID0gYnRvd2MoKnN0cisrKSkgIT0gTCdcMCcpCisJCSsrcHQ7CisJcmV0dXJuIHB0OworfQorLyoKKyoqIFBPU0lYIGFuZCB0aGUgQyBTdGFuZGFyZCBhcmUgdW5jbGVhciBvciBpbmNvbnNpc3RlbnQgYWJvdXQKKyoqIHdoYXQgJUMgYW5kICV5IGRvIGlmIHRoZSB5ZWFyIGlzIG5lZ2F0aXZlIG9yIGV4Y2VlZHMgOTk5OS4KKyoqIFVzZSB0aGUgY29udmVudGlvbiB0aGF0ICVDIGNvbmNhdGVuYXRlZCB3aXRoICV5IHlpZWxkcyB0aGUKKyoqIHNhbWUgb3V0cHV0IGFzICVZLCBhbmQgdGhhdCAlWSBjb250YWlucyBhdCBsZWFzdCA0IGJ5dGVzLAorKiogd2l0aCBtb3JlIG9ubHkgaWYgbmVjZXNzYXJ5LgorKi8KKworc3RhdGljIHdjaGFyX3QgKgorX3ljb252KGludCBhLCBpbnQgYiwgaW50IGNvbnZlcnRfdG9wLCBpbnQgY29udmVydF95eSwgd2NoYXJfdCAqcHQsIAorICAgIGNvbnN0IHdjaGFyX3QgKnB0bGltKQoreworCXJlZ2lzdGVyIGludAlsZWFkOworCXJlZ2lzdGVyIGludAl0cmFpbDsKKworI2RlZmluZSBESVZJU09SCTEwMAorCXRyYWlsID0gYSAlIERJVklTT1IgKyBiICUgRElWSVNPUjsKKwlsZWFkID0gYSAvIERJVklTT1IgKyBiIC8gRElWSVNPUiArIHRyYWlsIC8gRElWSVNPUjsKKwl0cmFpbCAlPSBESVZJU09SOworCWlmICh0cmFpbCA8IDAgJiYgbGVhZCA+IDApIHsKKwkJdHJhaWwgKz0gRElWSVNPUjsKKwkJLS1sZWFkOworCX0gZWxzZSBpZiAobGVhZCA8IDAgJiYgdHJhaWwgPiAwKSB7CisJCXRyYWlsIC09IERJVklTT1I7CisJCSsrbGVhZDsKKwl9CisJaWYgKGNvbnZlcnRfdG9wKSB7CisJCWlmIChsZWFkID09IDAgJiYgdHJhaWwgPCAwKQorCQkJcHQgPSBfYWRkKEwiLTAiLCBwdCwgcHRsaW0pOworCQllbHNlCXB0ID0gX2NvbnYobGVhZCwgTCIlMDJkIiwgcHQsIHB0bGltKTsKKwl9CisJaWYgKGNvbnZlcnRfeXkpCisJCXB0ID0gX2NvbnYoKCh0cmFpbCA8IDApID8gLXRyYWlsIDogdHJhaWwpLCBMIiUwMmQiLCBwdCwgcHRsaW0pOworCXJldHVybiBwdDsKK30KKwpkaWZmIC0tZ2l0IGEvbGliYy93Y2hhci93Y3N3aWR0aC5jIGIvbGliYy93Y2hhci93Y3N3aWR0aC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTQyMDc0Li4wMDAwMDAwCi0tLSBhL2xpYmMvd2NoYXIvd2Nzd2lkdGguYworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgotICogQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKLSAqIHRvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKLSAqIENvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoCi0gKiB0aGUgcGVybWlzc2lvbiBvZiBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBQYXVsIEJvcm1hbiBhdCBLcnlzdGFsIFRlY2hub2xvZ2llcy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSA8d2NoYXIuaD4KLQotaW50Ci13Y3N3aWR0aChjb25zdCB3Y2hhcl90ICpwd2NzLCBzaXplX3QgbikKLXsKLQl3Y2hhcl90IHdjOwotCWludCBsZW4sIGw7Ci0KLQlsZW4gPSAwOwotCXdoaWxlIChuLS0gPiAwICYmICh3YyA9ICpwd2NzKyspICE9IEwnXDAnKSB7Ci0JCWlmICgobCA9IHdjd2lkdGgod2MpKSA8IDApCi0JCQlyZXR1cm4gKC0xKTsKLQkJbGVuICs9IGw7Ci0JfQotCXJldHVybiAobGVuKTsKLX0KLQpkaWZmIC0tZ2l0IGEvbGliYy93Y2hhci93Y3N4ZnJtLmMgYi9saWJjL3djaGFyL3djc3hmcm0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQyZWE1Ni4uMDAwMDAwMAotLS0gYS9saWJjL3djaGFyL3djc3hmcm0uYworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTk1IEFsZXggVGF0bWFuamFudHMgPGFsZXhAZWx2aXN0aS5raWV2LnVhPgotICoJCWF0IEVsZWN0cm9ubmkgVmlzdGkgSUEsIEtpZXYsIFVrcmFpbmUuCi0gKgkJCUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHdjaGFyLmg+Ci0KLS8qCi0gKiBQbGFjZWhvbGRlciB3Y3N4ZnJtKCkgaW1wbGVtZW50YXRpb24uIFNlZSB3Y3Njb2xsLmMgZm9yIGEgZGVzY3JpcHRpb24gb2YKLSAqIHRoZSBsb2dpYyB1c2VkLgotICovCi1zaXplX3QKLXdjc3hmcm0od2NoYXJfdCAqIF9fcmVzdHJpY3QgZGVzdCwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3Qgc3JjLCBzaXplX3QgbGVuKQotewotICAgIGludCBwcmltLCBzZWMsIGw7Ci0gICAgc2l6ZV90IHNsZW47Ci0gICAgY2hhciAqbWJzcmMsICpzLCAqc3M7Ci0KLSAgICBpZiAoKnNyYyA9PSBMJ1wwJykgewotICAgICAgICBpZiAobGVuICE9IDApCi0gICAgICAgICAgICAqZGVzdCA9IEwnXDAnOwotICAgICAgICByZXR1cm4gKDApOwotICAgIH0KLQotICAgIHNsZW4gPSB3Y3NsZW4oc3JjKTsKLSAgICBpZiAobGVuID4gMCkgewotICAgICAgICBpZiAoc2xlbiA8IGxlbikKLSAgICAgICAgICAgIHdjc2NweShkZXN0LCBzcmMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHdjc25jcHkoZGVzdCwgc3JjLCBsZW4gLSAxKTsKLSAgICAgICAgICAgIGRlc3RbbGVuIC0gMV0gPSBMJ1wwJzsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gKHNsZW4pOwotfQpkaWZmIC0tZ2l0IGEvbGliYy96b25laW5mby90emRhdGEgYi9saWJjL3pvbmVpbmZvL3R6ZGF0YQppbmRleCA4NDY4ZTgzLi44ZDU3NGY1IDEwMDY0NAotLS0gYS9saWJjL3pvbmVpbmZvL3R6ZGF0YQorKysgYi9saWJjL3pvbmVpbmZvL3R6ZGF0YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJkbC9BbmRyb2lkLm1rIGIvbGliZGwvQW5kcm9pZC5tawppbmRleCAzZDYwNDc0Li5jYjFjYjdkIDEwMDY0NAotLS0gYS9saWJkbC9BbmRyb2lkLm1rCisrKyBiL2xpYmRsL0FuZHJvaWQubWsKQEAgLTIyLDcgKzIyLDcgQEAKIExPQ0FMX0xERkxBR1NfeDg2XzY0IDo9ICQoTE9DQUxfTERGTEFHU194ODYpCiAKIExPQ0FMX1NSQ19GSUxFUzo9IGxpYmRsLmMKLUxPQ0FMX0NGTEFHUyA6PSAtV2FsbCAtV2V4dHJhIC1XZXJyb3IKK0xPQ0FMX0NGTEFHUyA6PSAtV2FsbCAtV2V4dHJhIC1XdW51c2VkIC1XZXJyb3IKIAogTE9DQUxfTU9EVUxFIDo9IGxpYmRsCiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKZGlmZiAtLWdpdCBhL2xpYmRsL2xpYmRsLmMgYi9saWJkbC9saWJkbC5jCmluZGV4IDMxMGRiNTQuLmRjYTUxYjAgMTAwNjQ0Ci0tLSBhL2xpYmRsL2xpYmRsLmMKKysrIGIvbGliZGwvbGliZGwuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGRsZmNuLmg+CiAjaW5jbHVkZSA8bGluay5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGFuZHJvaWQvZGxleHQuaD4KIAogLy8gVGhlc2UgYXJlIHN0dWJzIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgYWN0dWFsbHkgZGVmaW5lZAogLy8gaW4gdGhlIGR5bmFtaWMgbGlua2VyIGFuZCBoaWphY2tlZCBhdCBydW50aW1lLgpAQCAtMjcsMTEgKzI4LDEzIEBACiBpbnQgZGxhZGRyKGNvbnN0IHZvaWQqIGFkZHIgX191bnVzZWQsIERsX2luZm8qIGluZm8gX191bnVzZWQpIHsgcmV0dXJuIDA7IH0KIGludCBkbGNsb3NlKHZvaWQqIGhhbmRsZSBfX3VudXNlZCkgeyByZXR1cm4gMDsgfQogCi12b2lkIGFuZHJvaWRfZ2V0X0xEX0xJQlJBUllfUEFUSChjaGFyKiBidWZmZXIgX191bnVzZWQsIHNpemVfdCBidWZmZXJfc2l6ZSBfX3VudXNlZCkgeyB9Ci12b2lkIGFuZHJvaWRfdXBkYXRlX0xEX0xJQlJBUllfUEFUSChjb25zdCBjaGFyKiBsZF9saWJyYXJ5X3BhdGggX191bnVzZWQpIHsgfQotCiAjaWYgZGVmaW5lZChfX2FybV9fKQogX1Vud2luZF9QdHIgZGxfdW53aW5kX2ZpbmRfZXhpZHgoX1Vud2luZF9QdHIgcGMgX191bnVzZWQsIGludCogcGNvdW50IF9fdW51c2VkKSB7IHJldHVybiAwOyB9CiAjZW5kaWYKIAogaW50IGRsX2l0ZXJhdGVfcGhkcihpbnQgKCpjYikoc3RydWN0IGRsX3BoZHJfaW5mbyogaW5mbywgc2l6ZV90IHNpemUsIHZvaWQqIGRhdGEpIF9fdW51c2VkLCB2b2lkKiBkYXRhIF9fdW51c2VkKSB7IHJldHVybiAwOyB9CisKK3ZvaWQgYW5kcm9pZF9nZXRfTERfTElCUkFSWV9QQVRIKGNoYXIqIGJ1ZmZlciBfX3VudXNlZCwgc2l6ZV90IGJ1ZmZlcl9zaXplIF9fdW51c2VkKSB7IH0KK3ZvaWQgYW5kcm9pZF91cGRhdGVfTERfTElCUkFSWV9QQVRIKGNvbnN0IGNoYXIqIGxkX2xpYnJhcnlfcGF0aCBfX3VudXNlZCkgeyB9CisKK3ZvaWQqIGFuZHJvaWRfZGxvcGVuX2V4dChjb25zdCBjaGFyKiBmaWxlbmFtZSBfX3VudXNlZCwgaW50IGZsYWcgX191bnVzZWQsIGNvbnN0IGFuZHJvaWRfZGxleHRpbmZvKiBleHRpbmZvIF9fdW51c2VkKSB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9saWJtL0FuZHJvaWQubWsgYi9saWJtL0FuZHJvaWQubWsKaW5kZXggY2U5ODIzNi4uOTk0Y2FhMCAxMDA2NDQKLS0tIGEvbGlibS9BbmRyb2lkLm1rCisrKyBiL2xpYm0vQW5kcm9pZC5tawpAQCAtMSwxMyArMSwxNSBAQAoraWZuZXEgKCQoVEFSR0VUX1VTRV9QUklWQVRFX0xJQk0pLHRydWUpCiBMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKIAotIyBUT0RPOiB0aGVzZSBjb21lIGZyb20gZnJvbSB1cHN0cmVhbSdzIGxpYmMsIG5vdCBsaWJtIQorIyBUT0RPOiB0aGlzIGNvbWVzIGZyb20gZnJvbSB1cHN0cmVhbSdzIGxpYmMsIG5vdCBsaWJtLCBidXQgaXQncyBhbgorIyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgdGhhdCBzaG91bGQgaGF2ZSBoaWRkZW4gdmlzaWJpbGl0eSwgc28gaXQgbmVlZHMKKyMgdG8gYmUgaW4gd2hhdGV2ZXIgbGlicmFyeSB0aGUgbWF0aCBjb2RlIGlzIGluLgogbGlibV9jb21tb25fc3JjX2ZpbGVzIDo9IFwKICAgICBkaWdpdHRvaW50LmMgIFwKLSAgICBmcGNsYXNzaWZ5LmMgXAotICAgIGlzaW5mLmMgIFwKIAogIyBUT0RPOiB0aGlzIGlzIG5vdCBpbiB0aGUgQlNEcy4KIGxpYm1fY29tbW9uX3NyY19maWxlcyArPSBcCisgICAgc2lnbmlmaWNhbmRsLmMgXAogICAgIHNpbmNvcy5jIFwKIAogbGlibV9jb21tb25fc3JjX2ZpbGVzICs9IFwKQEAgLTY0LDYgKzY2LDcgQEAKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3NpbmhmLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc3FydC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3NxcnRmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2ltcHJlY2lzZS5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX2Nvcy5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX2Nvc2YuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19leHAuYyBcCkBAIC0xMjgsOSArMTMxLDYgQEAKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZyZXhwZi5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lsb2diLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaWxvZ2JmLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaXNmaW5pdGUuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pc25hbi5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lzbm9ybWFsLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbGxyaW50LmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbGxyaW50Zi5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xscm91bmQuYyBcCkBAIC0xNDksNyArMTQ5LDYgQEAKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX25lYXJieWludC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX25leHRhZnRlci5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX25leHRhZnRlcmYuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZXh0dG93YXJkZi5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JlbXF1by5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JlbXF1b2YuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yaW50LmMgXApAQCAtMTU5LDcgKzE1OCw2IEBACiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zY2FsYmxuLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2NhbGJuLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2NhbGJuZi5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpZ25iaXQuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zaWduZ2FtLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2lnbmlmaWNhbmQuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zaWduaWZpY2FuZGYuYyBcCkBAIC0xNzksNDIgKzE3Nyw1NyBAQAogCiBsaWJtX2NvbW1vbl9zcmNfZmlsZXMgKz0gXAogICAgIGZha2VfbG9uZ19kb3VibGUuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19tb2RmbC5jIFwKKyAgICBzaWduYml0LmMgXAogCi0jIFRPRE86IG9uIEFuZHJvaWQsICJsb25nIGRvdWJsZSIgaXMgImRvdWJsZSIuCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYWNvc2wuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXNpbmwuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXRhbjJsLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Ztb2RsLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2h5cG90bC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9yZW1haW5kZXJsLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3NxcnRsLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2F0YW5sLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NicnRsLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NlaWxsLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NvcHlzaWdubC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jb3NsLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZhYnNsLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Zsb29ybC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWFsLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtYXhsLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtaW5sLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZyZXhwbC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pbG9nYmwuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbGxyaW50bC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sbHJvdW5kbC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sb2dibC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19scmludGwuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbHJvdW5kbC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZXh0YWZ0ZXJsLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX25leHR0b3dhcmQuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmVtcXVvbC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yaW50bC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yb3VuZGwuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2NhbGJubC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zaW5sLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RhbmwuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfdHJ1bmNsLmMgXAorbGlibV9sZF9zcmNfZmlsZXMgPSBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hY29zbC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Fjb3NobC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2FzaW5sLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXRhbjJsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXRhbmhsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfZm1vZGwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9oeXBvdGwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9yZW1haW5kZXJsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc3FydGwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19hc2luaGwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19hdGFubC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NicnRsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2VpbGwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jb3B5c2lnbmwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jb3NsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZmFic2wuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbG9vcmwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWFsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1heGwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWlubC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX21vZGZsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZnJleHBsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaWxvZ2JsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbGxyaW50bC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xscm91bmRsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbG9nYmwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19scmludGwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19scm91bmRsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbmV4dGFmdGVybC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX25leHR0b3dhcmQuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZXh0dG93YXJkZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JlbXF1b2wuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yaW50bC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JvdW5kbC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NjYWxibmwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zaW5sLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfdGFubC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RydW5jbC5jIFwKKworbGlibV9sZF9zcmNfZmlsZXMgKz0gXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvaW52dHJpZy5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2tfY29zbC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2tfc2lubC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2tfdGFubC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L3NfZXhwMmwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX2V4cGwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX2xvZ2wuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX25hbmwuYyBcCiAKICMgVE9ETzogcmUtZW5hYmxlIGkzODcvZV9zcXJ0Zi5TIGZvciB4ODYsIGFuZCBtYXliZSBvdGhlcnMuCiAKQEAgLTIyMiwyNCArMjM1LDIxIEBACiAgICAgLURGTFRfRVZBTF9NRVRIT0Q9MCBcCiAgICAgLXN0ZD1jOTkgXAogICAgIC1pbmNsdWRlICQoTE9DQUxfUEFUSCkvZnJlZWJzZC1jb21wYXQuaCBcCisgICAgLVduby1taXNzaW5nLWJyYWNlcyBcCisgICAgLVduby1wYXJlbnRoZXNlcyBcCisgICAgLVduby1zaWduLWNvbXBhcmUgXAorICAgIC1Xbm8tdW5pbml0aWFsaXplZCBcCisgICAgLVduby11bmtub3duLXByYWdtYXMgXAorICAgIC1mdmlzaWJpbGl0eT1oaWRkZW4gXAorCisjIFdvcmthcm91bmQgdGhlIEdDQyAiKGxvbmcpZm4gLT4gbGZuIiBvcHRpbWl6YXRpb24gYnVnIHdoaWNoIHdpbGwgcmVzdWx0IGluCisjIHNlbGYgcmVjdXJzaW9ucyBmb3IgbHJpbnQsIGxyaW50ZiwgYW5kIGxyaW50bC4KKyMgQlVHOiAxNDIyNTk2OAorbGlibV9jb21tb25fY2ZsYWdzICs9IC1mbm8tYnVpbHRpbi1yaW50IC1mbm8tYnVpbHRpbi1yaW50ZiAtZm5vLWJ1aWx0aW4tcmludGwKIAogbGlibV9jb21tb25faW5jbHVkZXMgOj0gJChMT0NBTF9QQVRIKS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy8KIAotbGlibV9hcm1faW5jbHVkZXMgOj0gJChMT0NBTF9QQVRIKS9hcm0KLWxpYm1fYXJtX3NyY19maWxlcyA6PSBhcm0vZmVudi5jCi0KLWxpYm1fYXJtNjRfaW5jbHVkZXMgOj0gJChMT0NBTF9QQVRIKS9hcm02NAotbGlibV9hcm02NF9zcmNfZmlsZXMgOj0gYXJtNjQvZmVudi5jCi0KLWxpYm1feDg2X2luY2x1ZGVzIDo9ICQoTE9DQUxfUEFUSCkvaTM4NiAkKExPQ0FMX1BBVEgpL2kzODcKLWxpYm1feDg2X3NyY19maWxlcyA6PSBpMzg3L2ZlbnYuYwotCi1saWJtX3g4Nl82NF9pbmNsdWRlcyA6PSAkKExPQ0FMX1BBVEgpL2FtZDY0Ci1saWJtX3g4Nl82NF9zcmNfZmlsZXMgOj0gYW1kNjQvZmVudi5jCi0KLWxpYm1fbWlwc19jZmxhZ3MgOj0gLWZuby1idWlsdGluLXJpbnRmIC1mbm8tYnVpbHRpbi1yaW50Ci1saWJtX21pcHNfaW5jbHVkZXMgOj0gJChMT0NBTF9QQVRIKS9taXBzCi1saWJtX21pcHNfc3JjX2ZpbGVzIDo9IG1pcHMvZmVudi5jCitsaWJtX2xkX2luY2x1ZGVzIDo9ICQoTE9DQUxfUEFUSCkvdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC8KIAogIwogIyBsaWJtLmEgZm9yIHRhcmdldC4KQEAgLTI0OCwxMCArMjU4LDI5IEBACiBMT0NBTF9NT0RVTEU6PSBsaWJtCiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKIExPQ0FMX0FSTV9NT0RFIDo9IGFybQotTE9DQUxfQ0ZMQUdTIDo9ICQobGlibV9jb21tb25fY2ZsYWdzKSAkKGxpYm1fJChUQVJHRVRfQVJDSClfY2ZsYWdzKQotTE9DQUxfQ19JTkNMVURFUyArPSAkKGxpYm1fY29tbW9uX2luY2x1ZGVzKSAkKGxpYm1fJChUQVJHRVRfQVJDSClfaW5jbHVkZXMpCi1MT0NBTF9TUkNfRklMRVMgOj0gJChsaWJtX2NvbW1vbl9zcmNfZmlsZXMpICQobGlibV8kKFRBUkdFVF9BUkNIKV9zcmNfZmlsZXMpCitMT0NBTF9DRkxBR1MgOj0gJChsaWJtX2NvbW1vbl9jZmxhZ3MpCitMT0NBTF9DX0lOQ0xVREVTICs9ICQobGlibV9jb21tb25faW5jbHVkZXMpCitMT0NBTF9TUkNfRklMRVMgOj0gJChsaWJtX2NvbW1vbl9zcmNfZmlsZXMpCiBMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJjCisKKyMgYXJjaC1zcGVjaWZpYyBzZXR0aW5ncworTE9DQUxfQ19JTkNMVURFU19hcm0gOj0gJChMT0NBTF9QQVRIKS9hcm0KK0xPQ0FMX1NSQ19GSUxFU19hcm0gOj0gYXJtL2ZlbnYuYworCitMT0NBTF9DX0lOQ0xVREVTX2FybTY0IDo9ICQobGlibV9sZF9pbmNsdWRlcykKK0xPQ0FMX1NSQ19GSUxFU19hcm02NCA6PSBhcm02NC9mZW52LmMgJChsaWJtX2xkX3NyY19maWxlcykKKworTE9DQUxfQ19JTkNMVURFU194ODYgOj0gJChMT0NBTF9QQVRIKS9pMzg3CitMT0NBTF9TUkNfRklMRVNfeDg2IDo9IGkzODcvZmVudi5jCisKK0xPQ0FMX0NfSU5DTFVERVNfeDg2XzY0IDo9ICQobGlibV9sZF9pbmNsdWRlcykKK0xPQ0FMX1NSQ19GSUxFU194ODZfNjQgOj0gYW1kNjQvZmVudi5jICQobGlibV9sZF9zcmNfZmlsZXMpCisKK0xPQ0FMX1NSQ19GSUxFU19taXBzIDo9IG1pcHMvZmVudi5jCisKK0xPQ0FMX0NfSU5DTFVERVNfbWlwczY0IDo9ICQobGlibV9sZF9pbmNsdWRlcykKK0xPQ0FMX1NSQ19GSUxFU19taXBzNjQgOj0gbWlwcy9mZW52LmMgJChsaWJtX2xkX3NyY19maWxlcykKKwogaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQogCiAjCkBAIC0yNjIsNCArMjkxLDEyIEBACiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKIExPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmMKIExPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGlibQorCisjIFdlJ2QgcmVhbGx5IGxpa2UgdG8gZG8gdGhpcyBmb3IgYWxsIGFyY2hpdGVjdHVyZXMsIGJ1dCBzaW5jZSB0aGlzIHdhc24ndCBkb25lCisjIGJlZm9yZSwgdGhlc2Ugc3ltYm9scyBtdXN0IGNvbnRpbnVlIHRvIGJlIGV4cG9ydGVkIG9uIExQMzIgZm9yIGJpbmFyeQorIyBjb21wYXRpYmlsaXR5LgorTE9DQUxfTERGTEFHU19hcm02NCA6PSAtV2wsLS1leGNsdWRlLWxpYnMsbGliZ2NjLmEKK0xPQ0FMX0xERkxBR1NfbWlwczY0IDo9IC1XbCwtLWV4Y2x1ZGUtbGlicyxsaWJnY2MuYQorTE9DQUxfTERGTEFHU194ODZfNjQgOj0gLVdsLC0tZXhjbHVkZS1saWJzLGxpYmdjYy5hCiBpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCitlbmRpZgpkaWZmIC0tZ2l0IGEvbGlibS9OT1RJQ0UgYi9saWJtL05PVElDRQppbmRleCA3MDk1NjNjLi41YmU2MGRiIDEwMDY0NAotLS0gYS9saWJtL05PVElDRQorKysgYi9saWJtL05PVElDRQpAQCAtNDYsNiArNDYsMzEgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0NvcHlyaWdodCAoYykgMjAwOCBTdGV2ZW4gRy4gS2FyZ2wsIERhdmlkIFNjaHVsdHosIEJydWNlIEQuIEV2YW5zLgorCitEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKK2lzIHByZXNlcnZlZC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorQ29weXJpZ2h0IChjKSAyMDA4IFN0ZXZlbiBHLiBLYXJnbCwgRGF2aWQgU2NodWx0eiwgQnJ1Y2UgRC4gRXZhbnMuCisKK0RldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQoraXMgcHJlc2VydmVkLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitPcHRpbWl6ZWQgYnkgQnJ1Y2UgRC4gRXZhbnMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIENvcHlyaWdodCAoYykgMjAwOS0yMDExLCBCcnVjZSBELiBFdmFucywgU3RldmVuIEcuIEthcmdsLCBEYXZpZCBTY2h1bHR6LgogCiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCkBAIC03OCw2ICsxMDMsMTYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3B5cmlnaHQgMjAwNCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorQ29weXJpZ2h0IChjKSAyMDA4IFN0ZXZlbiBHLiBLYXJnbCwgRGF2aWQgU2NodWx0eiwgQnJ1Y2UgRC4gRXZhbnMuCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKK3NvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCitpcyBwcmVzZXJ2ZWQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTEyMCw2ICsxNTUsMzIgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIENvcHlyaWdodCAoYykgMTk4NSwgMTk5MwogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTI3NywzMiArMzM4LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLWFyZSBtZXQ6Ci0xLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLUFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi1GT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLU9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLUxJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLU9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLVNVQ0ggREFNQUdFLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIENvcHlyaWdodCAoYykgMjAwMyBEYWctRXJsaW5nIFNtw7hyZ3JhdgogQWxsIHJpZ2h0cyByZXNlcnZlZC4KIApAQCAtMzg0LDMzICs0MTksNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAoYykgMjAwMyBNaWtlIEJhcmNyb2Z0IDxtaWtlQEZyZWVCU0Qub3JnPgotQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzIERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi1hcmUgbWV0OgotMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLUlNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi1BUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi1PUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLUhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi1MSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi1TVUNIIERBTUFHRS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBDb3B5cmlnaHQgKGMpIDIwMDMsIFN0ZXZlbiBHLiBLYXJnbAogQWxsIHJpZ2h0cyByZXNlcnZlZC4KIApAQCAtODEwLDYgKzgxOCwzMiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0NvcHlyaWdodCAoYykgMjAwNy0yMDEzIEJydWNlIEQuIEV2YW5zCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgICBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCitOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBDb3B5cmlnaHQgKGMpIDIwMDggRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgogQWxsIHJpZ2h0cyByZXNlcnZlZC4KIApAQCAtODM2LDYgKzg3MCw2MCBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0NvcHlyaWdodCAoYykgMjAwOS0yMDEzIFN0ZXZlbiBHLiBLYXJnbAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKK1RISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK09wdGltaXplZCBieSBCcnVjZSBELiBFdmFucy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogQ29weXJpZ2h0IChjKSAyMDExIERhdmlkIFNjaHVsdHoKIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTg4OCw2ICs5NzYsMzIgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitDb3B5cmlnaHQgKGMpIDIwMTMgRGF2aWQgQ2hpc25hbGwKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBGcm9tOiBAKCMpc19pbG9nYi5jIDUuMSA5My8wOS8yNAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL2xpYm0vYW1kNjQvX2ZwbWF0aC5oIGIvbGlibS9hbWQ2NC9fZnBtYXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGMyYTczODQuLjAwMDAwMDAKLS0tIGEvbGlibS9hbWQ2NC9fZnBtYXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMyBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEJAotICovCi0KLXVuaW9uIElFRUVsMmJpdHMgewotCWxvbmcgZG91YmxlCWU7Ci0Jc3RydWN0IHsKLQkJdW5zaWduZWQgaW50CW1hbmwJOjMyOwotCQl1bnNpZ25lZCBpbnQJbWFuaAk6MzI7Ci0JCXVuc2lnbmVkIGludAlleHAJOjE1OwotCQl1bnNpZ25lZCBpbnQJc2lnbgk6MTsKLQkJdW5zaWduZWQgaW50CWp1bmtsCToxNjsKLQkJdW5zaWduZWQgaW50CWp1bmtoCTozMjsKLQl9IGJpdHM7Ci0Jc3RydWN0IHsKLQkJdW5zaWduZWQgbG9uZwltYW4JOjY0OwotCQl1bnNpZ25lZCBpbnQJZXhwc2lnbgk6MTY7Ci0JCXVuc2lnbmVkIGxvbmcJanVuawk6NDg7Ci0JfSB4Yml0czsKLX07Ci0KLSNkZWZpbmUJTERCTF9OQklUCTB4ODAwMDAwMDAKLSNkZWZpbmUJbWFza19uYml0X2wodSkJKCh1KS5iaXRzLm1hbmggJj0gfkxEQkxfTkJJVCkKLQotI2RlZmluZQlMREJMX01BTkhfU0laRQkzMgotI2RlZmluZQlMREJMX01BTkxfU0laRQkzMgotCi0jZGVmaW5lCUxEQkxfVE9fQVJSQVkzMih1LCBhKSBkbyB7CQkJXAotCShhKVswXSA9ICh1aW50MzJfdCkodSkuYml0cy5tYW5sOwkJXAotCShhKVsxXSA9ICh1aW50MzJfdCkodSkuYml0cy5tYW5oOwkJXAotfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2xpYm0vYW1kNjQvZmVudi5jIGIvbGlibS9hbWQ2NC9mZW52LmMKaW5kZXggN2FkM2JlNy4uNGIyNGZmOSAxMDA3NTUKLS0tIGEvbGlibS9hbWQ2NC9mZW52LmMKKysrIGIvbGlibS9hbWQ2NC9mZW52LmMKQEAgLTEsNSArMSw1IEBACi0vKgkkT3BlbkJTRDogZmVudi5jLHYgMS4zIDIwMTIvMTIvMDUgMjM6MjA6MDIgZGVyYWFkdCBFeHAgJAkqLwotLyoJJE5ldEJTRDogZmVudi5jLHYgMS4xIDIwMTAvMDcvMzEgMjE6NDc6NTMgam9lcmcgRXhwICQJKi8KKy8qICAkT3BlbkJTRDogZmVudi5jLHYgMS4zIDIwMTIvMTIvMDUgMjM6MjA6MDIgZGVyYWFkdCBFeHAgJCAgKi8KKy8qICAkTmV0QlNEOiBmZW52LmMsdiAxLjEgMjAxMC8wNy8zMSAyMTo0Nzo1MyBqb2VyZyBFeHAgJCAqLwogCiAvKi0KICAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IERhdmlkIFNjaHVsdHogPGRhcyAoYXQpIEZyZWVCU0QuT1JHPgpAQCAtMzAsNiArMzAsMTUgQEAKICNpbmNsdWRlIDxmZW52Lmg+CiAjaW5jbHVkZSA8bWFjaGluZS9mcHUuaD4KIAorI2RlZmluZSBTU0VfTUFTS19TSElGVCA3CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHN5bWJvbCBpcyBzaW1wbHkgdGhlIGJpdHdpc2UtaW5jbHVzaXZlIE9SIG9mIGFsbCBmbG9hdGluZy1wb2ludAorICogcm91bmRpbmcgZGlyZWN0aW9uIGNvbnN0YW50cyBkZWZpbmVkIGFib3ZlLgorICovCisjZGVmaW5lIFg4N19ST1VORF9NQVNLICAoRkVfVE9ORUFSRVNUIHwgRkVfRE9XTldBUkQgfCBGRV9VUFdBUkQgfCBGRV9UT1dBUkRaRVJPKQorI2RlZmluZSBTU0VfUk9VTkRfU0hJRlQgMworCiAvKgogICogVGhlIGZvbGxvd2luZyBjb25zdGFudCByZXByZXNlbnRzIHRoZSBkZWZhdWx0IGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50CiAgKiAodGhhdCBpcywgdGhlIG9uZSBpbnN0YWxsZWQgYXQgcHJvZ3JhbSBzdGFydHVwKSBhbmQgaGFzIHR5cGUgcG9pbnRlciB0bwpAQCAtNDIsMTkgKzUxLDE5IEBACiAgKiB4ODcgZnB1IHJlZ2lzdGVycyBhcmUgMTZiaXQgd2lkZS4gVGhlIHVwcGVyIGJpdHMsIDMxLTE2LCBhcmUgbWFya2VkIGFzCiAgKiBSRVNFUlZFRC4KICAqLwotZmVudl90IF9fZmVfZGZsX2VudiA9IHsKLQl7Ci0JCTB4ZmZmZjAwMDAgfCBfX0lOSVRJQUxfTlBYQ1dfXywJLyogQ29udHJvbCB3b3JkIHJlZ2lzdGVyICovCi0JCTB4ZmZmZjAwMDAsCQkJLyogU3RhdHVzIHdvcmQgcmVnaXN0ZXIgKi8KLQkJMHhmZmZmZmZmZiwJCQkvKiBUYWcgd29yZCByZWdpc3RlciAqLwotCQl7Ci0JCQkweDAwMDAwMDAwLAotCQkJMHgwMDAwMDAwMCwKLQkJCTB4MDAwMDAwMDAsCi0JCQkweGZmZmYwMDAwCi0JCX0KLQl9LAotCV9fSU5JVElBTF9NWENTUl9fCQkJLyogTVhDU1IgcmVnaXN0ZXIgKi8KK2NvbnN0IGZlbnZfdCBfX2ZlX2RmbF9lbnYgPSB7CisgIHsKKyAgICAweGZmZmYwMDAwIHwgX19JTklUSUFMX05QWENXX18sIC8qIENvbnRyb2wgd29yZCByZWdpc3RlciAqLworICAgIDB4ZmZmZjAwMDAsICAgICAgICAgICAgICAgICAgICAgLyogU3RhdHVzIHdvcmQgcmVnaXN0ZXIgKi8KKyAgICAweGZmZmZmZmZmLCAgICAgICAgICAgICAgICAgICAgIC8qIFRhZyB3b3JkIHJlZ2lzdGVyICovCisgICAgeworICAgICAgMHgwMDAwMDAwMCwKKyAgICAgIDB4MDAwMDAwMDAsCisgICAgICAweDAwMDAwMDAwLAorICAgICAgMHhmZmZmMDAwMAorICAgIH0KKyAgfSwKKyAgX19JTklUSUFMX01YQ1NSX18gICAgICAgICAgICAgICAgIC8qIE1YQ1NSIHJlZ2lzdGVyICovCiB9OwogCiAKQEAgLTY1LDI2ICs3NCwyNiBAQAogaW50CiBmZWNsZWFyZXhjZXB0KGludCBleGNlcHRzKQogewotCWZlbnZfdCBmZW52OwotCXVuc2lnbmVkIGludCBteGNzcjsKKyAgZmVudl90IGZlbnY7CisgIHVuc2lnbmVkIGludCBteGNzcjsKIAotCWV4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKKyAgZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOwogCi0JLyogU3RvcmUgdGhlIGN1cnJlbnQgeDg3IGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50ICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0ZW52ICUwIiA6ICI9bSIgKGZlbnYpKTsKKyAgLyogU3RvcmUgdGhlIGN1cnJlbnQgeDg3IGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50ICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdGVudiAlMCIgOiAiPW0iIChmZW52KSk7CiAKLQkvKiBDbGVhciB0aGUgcmVxdWVzdGVkIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbnMgKi8KLQlmZW52Ll9feDg3Ll9fc3RhdHVzICY9IH5leGNlcHRzOworICAvKiBDbGVhciB0aGUgcmVxdWVzdGVkIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbnMgKi8KKyAgZmVudi5fX3g4Ny5fX3N0YXR1cyAmPSB+ZXhjZXB0czsKIAotCS8qIExvYWQgdGhlIHg4NyBmbG9hdGluZy1wb2ludCBlbnZpcm9uZW50ICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbGRlbnYgJTAiIDogOiAibSIgKGZlbnYpKTsKKyAgLyogTG9hZCB0aGUgeDg3IGZsb2F0aW5nLXBvaW50IGVudmlyb25lbnQgKi8KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbGRlbnYgJTAiIDogOiAibSIgKGZlbnYpKTsKIAotCS8qIFNhbWUgZm9yIFNTRSBlbnZpcm9ubWVudCAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RteGNzciAlMCIgOiAiPW0iIChteGNzcikpOwotCW14Y3NyICY9IH5leGNlcHRzOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgibGRteGNzciAlMCIgOiA6ICJtIiAobXhjc3IpKTsKKyAgLyogU2FtZSBmb3IgU1NFIGVudmlyb25tZW50ICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3RteGNzciAlMCIgOiAiPW0iIChteGNzcikpOworICBteGNzciAmPSB+ZXhjZXB0czsKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZG14Y3NyICUwIiA6IDogIm0iIChteGNzcikpOwogCi0JcmV0dXJuICgwKTsKKyAgcmV0dXJuICgwKTsKIH0KIAogLyoKQEAgLTk1LDIxICsxMDQsMjEgQEAKIGludAogZmVnZXRleGNlcHRmbGFnKGZleGNlcHRfdCAqZmxhZ3AsIGludCBleGNlcHRzKQogewotCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKLQl1bnNpZ25lZCBpbnQgbXhjc3I7CisgIHVuc2lnbmVkIHNob3J0IHN0YXR1czsKKyAgdW5zaWduZWQgaW50IG14Y3NyOwogCi0JZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOworICBleGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7CiAKLQkvKiBTdG9yZSB0aGUgY3VycmVudCB4ODcgc3RhdHVzIHJlZ2lzdGVyICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0c3cgJTAiIDogIj1hbSIgKHN0YXR1cykpOworICAvKiBTdG9yZSB0aGUgY3VycmVudCB4ODcgc3RhdHVzIHJlZ2lzdGVyICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdHN3ICUwIiA6ICI9YW0iIChzdGF0dXMpKTsKIAotCS8qIFN0b3JlIHRoZSBNWENTUiByZWdpc3RlciAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RteGNzciAlMCIgOiAiPW0iIChteGNzcikpOworICAvKiBTdG9yZSB0aGUgTVhDU1IgcmVnaXN0ZXIgKi8KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG14Y3NyICUwIiA6ICI9bSIgKG14Y3NyKSk7CiAKLQkvKiBTdG9yZSB0aGUgcmVzdWx0cyBpbiBmbGFncCAqLwotCSpmbGFncCA9IChzdGF0dXMgfCBteGNzcikgJiBleGNlcHRzOworICAvKiBTdG9yZSB0aGUgcmVzdWx0cyBpbiBmbGFncCAqLworICAqZmxhZ3AgPSAoc3RhdHVzIHwgbXhjc3IpICYgZXhjZXB0czsKIAotCXJldHVybiAoMCk7CisgIHJldHVybiAoMCk7CiB9CiAKIC8qCkBAIC0xMjUsMTIgKzEzNCwxMiBAQAogaW50CiBmZXJhaXNlZXhjZXB0KGludCBleGNlcHRzKQogewotCWV4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKKyAgZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOwogCi0JZmVzZXRleGNlcHRmbGFnKChmZXhjZXB0X3QgKikmZXhjZXB0cywgZXhjZXB0cyk7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmd2FpdCIpOworICBmZXNldGV4Y2VwdGZsYWcoKGZleGNlcHRfdCAqKSZleGNlcHRzLCBleGNlcHRzKTsKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmd2FpdCIpOwogCi0JcmV0dXJuICgwKTsKKyAgcmV0dXJuICgwKTsKIH0KIAogLyoKQEAgLTE0MSwyOCArMTUwLDI4IEBACiBpbnQKIGZlc2V0ZXhjZXB0ZmxhZyhjb25zdCBmZXhjZXB0X3QgKmZsYWdwLCBpbnQgZXhjZXB0cykKIHsKLQlmZW52X3QgZmVudjsKLQl1bnNpZ25lZCBpbnQgbXhjc3I7CisgIGZlbnZfdCBmZW52OworICB1bnNpZ25lZCBpbnQgbXhjc3I7CiAKLQlleGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7CisgIGV4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKIAotCS8qIFN0b3JlIHRoZSBjdXJyZW50IHg4NyBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdGVudiAlMCIgOiAiPW0iIChmZW52KSk7CisgIC8qIFN0b3JlIHRoZSBjdXJyZW50IHg4NyBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RlbnYgJTAiIDogIj1tIiAoZmVudikpOwogCi0JLyogU2V0IHRoZSByZXF1ZXN0ZWQgc3RhdHVzIGZsYWdzICovCi0JZmVudi5fX3g4Ny5fX3N0YXR1cyAmPSB+ZXhjZXB0czsKLQlmZW52Ll9feDg3Ll9fc3RhdHVzIHw9ICpmbGFncCAmIGV4Y2VwdHM7CisgIC8qIFNldCB0aGUgcmVxdWVzdGVkIHN0YXR1cyBmbGFncyAqLworICBmZW52Ll9feDg3Ll9fc3RhdHVzICY9IH5leGNlcHRzOworICBmZW52Ll9feDg3Ll9fc3RhdHVzIHw9ICpmbGFncCAmIGV4Y2VwdHM7CiAKLQkvKiBMb2FkIHRoZSB4ODcgZmxvYXRpbmctcG9pbnQgZW52aXJvbmVudCAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZmxkZW52ICUwIiA6IDogIm0iIChmZW52KSk7CisgIC8qIExvYWQgdGhlIHg4NyBmbG9hdGluZy1wb2ludCBlbnZpcm9uZW50ICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZmxkZW52ICUwIiA6IDogIm0iIChmZW52KSk7CiAKLQkvKiBTYW1lIGZvciBTU0UgZW52aXJvbm1lbnQgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAobXhjc3IpKTsKLQlteGNzciAmPSB+ZXhjZXB0czsKLQlteGNzciB8PSAqZmxhZ3AgJiBleGNlcHRzOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgibGRteGNzciAlMCIgOiA6ICJtIiAobXhjc3IpKTsKKyAgLyogU2FtZSBmb3IgU1NFIGVudmlyb25tZW50ICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3RteGNzciAlMCIgOiAiPW0iIChteGNzcikpOworICBteGNzciAmPSB+ZXhjZXB0czsKKyAgbXhjc3IgfD0gKmZsYWdwICYgZXhjZXB0czsKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZG14Y3NyICUwIiA6IDogIm0iIChteGNzcikpOwogCi0JcmV0dXJuICgwKTsKKyAgcmV0dXJuICgwKTsKIH0KIAogLyoKQEAgLTE3MywxOCArMTgyLDE4IEBACiBpbnQKIGZldGVzdGV4Y2VwdChpbnQgZXhjZXB0cykKIHsKLQl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7Ci0JdW5zaWduZWQgaW50IG14Y3NyOworICB1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CisgIHVuc2lnbmVkIGludCBteGNzcjsKIAotCWV4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKKyAgZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOwogCi0JLyogU3RvcmUgdGhlIGN1cnJlbnQgeDg3IHN0YXR1cyByZWdpc3RlciAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdHN3ICUwIiA6ICI9YW0iIChzdGF0dXMpKTsKKyAgLyogU3RvcmUgdGhlIGN1cnJlbnQgeDg3IHN0YXR1cyByZWdpc3RlciAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RzdyAlMCIgOiAiPWFtIiAoc3RhdHVzKSk7CiAKLQkvKiBTdG9yZSB0aGUgTVhDU1IgcmVnaXN0ZXIgc3RhdGUgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAobXhjc3IpKTsKKyAgLyogU3RvcmUgdGhlIE1YQ1NSIHJlZ2lzdGVyIHN0YXRlICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3RteGNzciAlMCIgOiAiPW0iIChteGNzcikpOwogCi0JcmV0dXJuICgoc3RhdHVzIHwgbXhjc3IpICYgZXhjZXB0cyk7CisgIHJldHVybiAoKHN0YXR1cyB8IG14Y3NyKSAmIGV4Y2VwdHMpOwogfQogCiAvKgpAQCAtMTkzLDE3ICsyMDIsMTcgQEAKIGludAogZmVnZXRyb3VuZCh2b2lkKQogewotCXVuc2lnbmVkIHNob3J0IGNvbnRyb2w7CisgIHVuc2lnbmVkIHNob3J0IGNvbnRyb2w7CiAKLQkvKgotCSAqIFdlIGFzc3VtZSB0aGF0IHRoZSB4ODcgYW5kIHRoZSBTU0UgdW5pdCBhZ3JlZSBvbiB0aGUKLQkgKiByb3VuZGluZyBtb2RlLiAgUmVhZGluZyB0aGUgY29udHJvbCB3b3JkIG9uIHRoZSB4ODcgdHVybnMKLQkgKiBvdXQgdG8gYmUgYWJvdXQgNSB0aW1lcyBmYXN0ZXIgdGhhbiByZWFkaW5nIGl0IG9uIHRoZSBTU0UKLQkgKiB1bml0IG9uIGFuIE9wdGVyb24gMjQ0LgotCSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdGN3ICUwIiA6ICI9bSIgKGNvbnRyb2wpKTsKKyAgLyoKKyAgICogV2UgYXNzdW1lIHRoYXQgdGhlIHg4NyBhbmQgdGhlIFNTRSB1bml0IGFncmVlIG9uIHRoZQorICAgKiByb3VuZGluZyBtb2RlLiAgUmVhZGluZyB0aGUgY29udHJvbCB3b3JkIG9uIHRoZSB4ODcgdHVybnMKKyAgICogb3V0IHRvIGJlIGFib3V0IDUgdGltZXMgZmFzdGVyIHRoYW4gcmVhZGluZyBpdCBvbiB0aGUgU1NFCisgICAqIHVuaXQgb24gYW4gT3B0ZXJvbiAyNDQuCisgICAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RjdyAlMCIgOiAiPW0iIChjb250cm9sKSk7CiAKLQlyZXR1cm4gKGNvbnRyb2wgJiBfWDg3X1JPVU5EX01BU0spOworICByZXR1cm4gKGNvbnRyb2wgJiBYODdfUk9VTkRfTUFTSyk7CiB9CiAKIC8qCkBAIC0yMTQsMzAgKzIyMywzMCBAQAogaW50CiBmZXNldHJvdW5kKGludCByb3VuZCkKIHsKLQl1bnNpZ25lZCBzaG9ydCBjb250cm9sOwotCXVuc2lnbmVkIGludCBteGNzcjsKKyAgdW5zaWduZWQgc2hvcnQgY29udHJvbDsKKyAgdW5zaWduZWQgaW50IG14Y3NyOwogCi0JLyogQ2hlY2sgd2hldGhlciByZXF1ZXN0ZWQgcm91bmRpbmcgZGlyZWN0aW9uIGlzIHN1cHBvcnRlZCAqLwotCWlmIChyb3VuZCAmIH5fWDg3X1JPVU5EX01BU0spCi0JCXJldHVybiAoLTEpOworICAvKiBDaGVjayB3aGV0aGVyIHJlcXVlc3RlZCByb3VuZGluZyBkaXJlY3Rpb24gaXMgc3VwcG9ydGVkICovCisgIGlmIChyb3VuZCAmIH5YODdfUk9VTkRfTUFTSykKKyAgICByZXR1cm4gKC0xKTsKIAotCS8qIFN0b3JlIHRoZSBjdXJyZW50IHg4NyBjb250cm9sIHdvcmQgcmVnaXN0ZXIgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RjdyAlMCIgOiAiPW0iIChjb250cm9sKSk7CisgIC8qIFN0b3JlIHRoZSBjdXJyZW50IHg4NyBjb250cm9sIHdvcmQgcmVnaXN0ZXIgKi8KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0Y3cgJTAiIDogIj1tIiAoY29udHJvbCkpOwogCi0JLyogU2V0IHRoZSByb3VuZGluZyBkaXJlY3Rpb24gKi8KLQljb250cm9sICY9IH5fWDg3X1JPVU5EX01BU0s7Ci0JY29udHJvbCB8PSByb3VuZDsKKyAgLyogU2V0IHRoZSByb3VuZGluZyBkaXJlY3Rpb24gKi8KKyAgY29udHJvbCAmPSB+WDg3X1JPVU5EX01BU0s7CisgIGNvbnRyb2wgfD0gcm91bmQ7CiAKLQkvKiBMb2FkIHRoZSB4ODcgY29udHJvbCB3b3JkIHJlZ2lzdGVyICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbGRjdyAlMCIgOiA6ICJtIiAoY29udHJvbCkpOworICAvKiBMb2FkIHRoZSB4ODcgY29udHJvbCB3b3JkIHJlZ2lzdGVyICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZmxkY3cgJTAiIDogOiAibSIgKGNvbnRyb2wpKTsKIAotCS8qIFNhbWUgZm9yIHRoZSBTU0UgZW52aXJvbm1lbnQgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAobXhjc3IpKTsKLQlteGNzciAmPSB+KF9YODdfUk9VTkRfTUFTSyA8PCBfU1NFX1JPVU5EX1NISUZUKTsKLQlteGNzciB8PSByb3VuZCA8PCBfU1NFX1JPVU5EX1NISUZUOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgibGRteGNzciAlMCIgOiA6ICJtIiAobXhjc3IpKTsKKyAgLyogU2FtZSBmb3IgdGhlIFNTRSBlbnZpcm9ubWVudCAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAobXhjc3IpKTsKKyAgbXhjc3IgJj0gfihYODdfUk9VTkRfTUFTSyA8PCBTU0VfUk9VTkRfU0hJRlQpOworICBteGNzciB8PSByb3VuZCA8PCBTU0VfUk9VTkRfU0hJRlQ7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgibGRteGNzciAlMCIgOiA6ICJtIiAobXhjc3IpKTsKIAotCXJldHVybiAoMCk7CisgIHJldHVybiAoMCk7CiB9CiAKIC8qCkBAIC0yNDcsMjMgKzI1NiwyMyBAQAogaW50CiBmZWdldGVudihmZW52X3QgKmVudnApCiB7Ci0JLyogU3RvcmUgdGhlIGN1cnJlbnQgeDg3IGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50ICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0ZW52ICUwIiA6ICI9bSIgKCplbnZwKSk7CisgIC8qIFN0b3JlIHRoZSBjdXJyZW50IHg4NyBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RlbnYgJTAiIDogIj1tIiAoKmVudnApKTsKIAotCS8qIFN0b3JlIHRoZSBNWENTUiByZWdpc3RlciBzdGF0ZSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RteGNzciAlMCIgOiAiPW0iIChlbnZwLT5fX214Y3NyKSk7CisgIC8qIFN0b3JlIHRoZSBNWENTUiByZWdpc3RlciBzdGF0ZSAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAoZW52cC0+X19teGNzcikpOwogCi0JLyoKLQkgKiBXaGVuIGFuIEZOU1RFTlYgaW5zdHJ1Y3Rpb24gaXMgZXhlY3V0ZWQsIGFsbCBwZW5kaW5nIGV4Y2VwdGlvbnMgYXJlCi0JICogZXNzZW50aWFsbHkgbG9zdCAoZWl0aGVyIHRoZSB4ODcgRlBVIHN0YXR1cyByZWdpc3RlciBpcyBjbGVhcmVkIG9yCi0JICogYWxsIGV4Y2VwdGlvbnMgYXJlIG1hc2tlZCkuCi0JICoKLQkgKiA4LjYgWDg3IEZQVSBFWENFUFRJT04gU1lOQ0hST05JWkFUSU9OIC0KLQkgKiBJbnRlbChSKSA2NCBhbmQgSUEtMzIgQXJjaGl0ZWN0dXJlcyBTb2Z0YXJlIERldmVsb3BlcidzIE1hbnVhbCAtIFZvbDEKLQkgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZsZGN3ICUwIiA6IDogIm0iIChlbnZwLT5fX3g4Ny5fX2NvbnRyb2wpKTsKKyAgLyoKKyAgICogV2hlbiBhbiBGTlNURU5WIGluc3RydWN0aW9uIGlzIGV4ZWN1dGVkLCBhbGwgcGVuZGluZyBleGNlcHRpb25zIGFyZQorICAgKiBlc3NlbnRpYWxseSBsb3N0IChlaXRoZXIgdGhlIHg4NyBGUFUgc3RhdHVzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgb3IKKyAgICogYWxsIGV4Y2VwdGlvbnMgYXJlIG1hc2tlZCkuCisgICAqCisgICAqIDguNiBYODcgRlBVIEVYQ0VQVElPTiBTWU5DSFJPTklaQVRJT04gLQorICAgKiBJbnRlbChSKSA2NCBhbmQgSUEtMzIgQXJjaGl0ZWN0dXJlcyBTb2Z0YXJlIERldmVsb3BlcidzIE1hbnVhbCAtIFZvbDEKKyAgICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZmxkY3cgJTAiIDogOiAibSIgKGVudnAtPl9feDg3Ll9fY29udHJvbCkpOwogCi0JcmV0dXJuICgwKTsKKyAgcmV0dXJuICgwKTsKIH0KIAogLyoKQEAgLTI3NSwyOCArMjg0LDI4IEBACiBpbnQKIGZlaG9sZGV4Y2VwdChmZW52X3QgKmVudnApCiB7Ci0JdW5zaWduZWQgaW50IG14Y3NyOworICB1bnNpZ25lZCBpbnQgbXhjc3I7CiAKLQkvKiBTdG9yZSB0aGUgY3VycmVudCB4ODcgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RlbnYgJTAiIDogIj1tIiAoKmVudnApKTsKKyAgLyogU3RvcmUgdGhlIGN1cnJlbnQgeDg3IGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50ICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdGVudiAlMCIgOiAiPW0iICgqZW52cCkpOwogCi0JLyogQ2xlYXIgYWxsIGV4Y2VwdGlvbiBmbGFncyBpbiBGUFUgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuY2xleCIpOworICAvKiBDbGVhciBhbGwgZXhjZXB0aW9uIGZsYWdzIGluIEZQVSAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuY2xleCIpOwogCi0JLyogU3RvcmUgdGhlIE1YQ1NSIHJlZ2lzdGVyIHN0YXRlICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG14Y3NyICUwIiA6ICI9bSIgKGVudnAtPl9fbXhjc3IpKTsKKyAgLyogU3RvcmUgdGhlIE1YQ1NSIHJlZ2lzdGVyIHN0YXRlICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3RteGNzciAlMCIgOiAiPW0iIChlbnZwLT5fX214Y3NyKSk7CiAKLQkvKiBDbGVhciBleGNlcHRpb24gZmxhZ3MgaW4gTVhDU1IgKi8KLQlteGNzciA9IGVudnAtPl9fbXhjc3I7Ci0JbXhjc3IgJj0gfkZFX0FMTF9FWENFUFQ7CisgIC8qIENsZWFyIGV4Y2VwdGlvbiBmbGFncyBpbiBNWENTUiAqLworICBteGNzciA9IGVudnAtPl9fbXhjc3I7CisgIG14Y3NyICY9IH5GRV9BTExfRVhDRVBUOwogCi0JLyogTWFzayBhbGwgZXhjZXB0aW9ucyAqLwotCW14Y3NyIHw9IEZFX0FMTF9FWENFUFQgPDwgX1NTRV9NQVNLX1NISUZUOworICAvKiBNYXNrIGFsbCBleGNlcHRpb25zICovCisgIG14Y3NyIHw9IEZFX0FMTF9FWENFUFQgPDwgU1NFX01BU0tfU0hJRlQ7CiAKLQkvKiBTdG9yZSB0aGUgTVhDU1IgcmVnaXN0ZXIgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkbXhjc3IgJTAiIDogOiAibSIgKG14Y3NyKSk7CisgIC8qIFN0b3JlIHRoZSBNWENTUiByZWdpc3RlciAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkbXhjc3IgJTAiIDogOiAibSIgKG14Y3NyKSk7CiAKLQlyZXR1cm4gKDApOworICByZXR1cm4gKDApOwogfQogCiAvKgpAQCAtMzEwLDEzICszMTksMTMgQEAKIGludAogZmVzZXRlbnYoY29uc3QgZmVudl90ICplbnZwKQogewotCS8qIExvYWQgdGhlIHg4NyBmbG9hdGluZy1wb2ludCBlbnZpcm9uZW50ICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbGRlbnYgJTAiIDogOiAibSIgKCplbnZwKSk7CisgIC8qIExvYWQgdGhlIHg4NyBmbG9hdGluZy1wb2ludCBlbnZpcm9uZW50ICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZmxkZW52ICUwIiA6IDogIm0iICgqZW52cCkpOwogCi0JLyogU3RvcmUgdGhlIE1YQ1NSIHJlZ2lzdGVyICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZG14Y3NyICUwIiA6IDogIm0iIChlbnZwLT5fX214Y3NyKSk7CisgIC8qIFN0b3JlIHRoZSBNWENTUiByZWdpc3RlciAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkbXhjc3IgJTAiIDogOiAibSIgKGVudnAtPl9fbXhjc3IpKTsKIAotCXJldHVybiAoMCk7CisgIHJldHVybiAoMCk7CiB9CiAKIC8qCkBAIC0zMzAsMjIgKzMzOSwyMiBAQAogaW50CiBmZXVwZGF0ZWVudihjb25zdCBmZW52X3QgKmVudnApCiB7Ci0JdW5zaWduZWQgc2hvcnQgc3RhdHVzOwotCXVuc2lnbmVkIGludCBteGNzcjsKKyAgdW5zaWduZWQgc2hvcnQgc3RhdHVzOworICB1bnNpZ25lZCBpbnQgbXhjc3I7CiAKLQkvKiBTdG9yZSB0aGUgeDg3IHN0YXR1cyByZWdpc3RlciAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdHN3ICUwIiA6ICI9YW0iIChzdGF0dXMpKTsKKyAgLyogU3RvcmUgdGhlIHg4NyBzdGF0dXMgcmVnaXN0ZXIgKi8KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0c3cgJTAiIDogIj1hbSIgKHN0YXR1cykpOwogCi0JLyogU3RvcmUgdGhlIE1YQ1NSIHJlZ2lzdGVyICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG14Y3NyICUwIiA6ICI9bSIgKG14Y3NyKSk7CisgIC8qIFN0b3JlIHRoZSBNWENTUiByZWdpc3RlciAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAobXhjc3IpKTsKIAotCS8qIEluc3RhbGwgbmV3IGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50ICovCi0JZmVzZXRlbnYoZW52cCk7CisgIC8qIEluc3RhbGwgbmV3IGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50ICovCisgIGZlc2V0ZW52KGVudnApOwogCi0JLyogUmFpc2UgYW55IHByZXZpb3VzbHkgYWNjdW11bGF0ZWQgZXhjZXB0aW9ucyAqLwotCWZlcmFpc2VleGNlcHQoc3RhdHVzIHwgbXhjc3IpOworICAvKiBSYWlzZSBhbnkgcHJldmlvdXNseSBhY2N1bXVsYXRlZCBleGNlcHRpb25zICovCisgIGZlcmFpc2VleGNlcHQoc3RhdHVzIHwgbXhjc3IpOwogCi0JcmV0dXJuICgwKTsKKyAgcmV0dXJuICgwKTsKIH0KIAogLyoKQEAgLTM1NCw1NSArMzYzLDU1IEBACiBpbnQKIGZlZW5hYmxlZXhjZXB0KGludCBtYXNrKQogewotCXVuc2lnbmVkIGludCBteGNzciwgb21hc2s7Ci0JdW5zaWduZWQgc2hvcnQgY29udHJvbDsKKyAgdW5zaWduZWQgaW50IG14Y3NyLCBvbWFzazsKKyAgdW5zaWduZWQgc2hvcnQgY29udHJvbDsKIAotCW1hc2sgJj0gRkVfQUxMX0VYQ0VQVDsKKyAgbWFzayAmPSBGRV9BTExfRVhDRVBUOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0Y3cgJTAiIDogIj1tIiAoY29udHJvbCkpOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RteGNzciAlMCIgOiAiPW0iIChteGNzcikpOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RjdyAlMCIgOiAiPW0iIChjb250cm9sKSk7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3RteGNzciAlMCIgOiAiPW0iIChteGNzcikpOwogCi0Jb21hc2sgPSB+KGNvbnRyb2wgfCAobXhjc3IgPj4gX1NTRV9NQVNLX1NISUZUKSkgJiBGRV9BTExfRVhDRVBUOwotCWNvbnRyb2wgJj0gfm1hc2s7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbGRjdyAlMCIgOiA6ICJtIiAoY29udHJvbCkpOworICBvbWFzayA9IH4oY29udHJvbCB8IChteGNzciA+PiBTU0VfTUFTS19TSElGVCkpICYgRkVfQUxMX0VYQ0VQVDsKKyAgY29udHJvbCAmPSB+bWFzazsKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbGRjdyAlMCIgOiA6ICJtIiAoY29udHJvbCkpOwogCi0JbXhjc3IgJj0gfihtYXNrIDw8IF9TU0VfTUFTS19TSElGVCk7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZG14Y3NyICUwIiA6IDogIm0iIChteGNzcikpOworICBteGNzciAmPSB+KG1hc2sgPDwgU1NFX01BU0tfU0hJRlQpOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkbXhjc3IgJTAiIDogOiAibSIgKG14Y3NyKSk7CiAKLQlyZXR1cm4gKG9tYXNrKTsKKyAgcmV0dXJuIChvbWFzayk7CiB9CiAKIGludAogZmVkaXNhYmxlZXhjZXB0KGludCBtYXNrKQogewotCXVuc2lnbmVkIGludCBteGNzciwgb21hc2s7Ci0JdW5zaWduZWQgc2hvcnQgY29udHJvbDsKKyAgdW5zaWduZWQgaW50IG14Y3NyLCBvbWFzazsKKyAgdW5zaWduZWQgc2hvcnQgY29udHJvbDsKIAotCW1hc2sgJj0gRkVfQUxMX0VYQ0VQVDsKKyAgbWFzayAmPSBGRV9BTExfRVhDRVBUOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0Y3cgJTAiIDogIj1tIiAoY29udHJvbCkpOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RteGNzciAlMCIgOiAiPW0iIChteGNzcikpOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RjdyAlMCIgOiAiPW0iIChjb250cm9sKSk7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3RteGNzciAlMCIgOiAiPW0iIChteGNzcikpOwogCi0Jb21hc2sgPSB+KGNvbnRyb2wgfCAobXhjc3IgPj4gX1NTRV9NQVNLX1NISUZUKSkgJiBGRV9BTExfRVhDRVBUOwotCWNvbnRyb2wgfD0gbWFzazsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZsZGN3ICUwIiA6IDogIm0iIChjb250cm9sKSk7CisgIG9tYXNrID0gfihjb250cm9sIHwgKG14Y3NyID4+IFNTRV9NQVNLX1NISUZUKSkgJiBGRV9BTExfRVhDRVBUOworICBjb250cm9sIHw9IG1hc2s7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZmxkY3cgJTAiIDogOiAibSIgKGNvbnRyb2wpKTsKIAotCW14Y3NyIHw9IG1hc2sgPDwgX1NTRV9NQVNLX1NISUZUOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgibGRteGNzciAlMCIgOiA6ICJtIiAobXhjc3IpKTsKKyAgbXhjc3IgfD0gbWFzayA8PCBTU0VfTUFTS19TSElGVDsKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZG14Y3NyICUwIiA6IDogIm0iIChteGNzcikpOwogCi0JcmV0dXJuIChvbWFzayk7CisgIHJldHVybiAob21hc2spOwogfQogCiBpbnQKIGZlZ2V0ZXhjZXB0KHZvaWQpCiB7Ci0JdW5zaWduZWQgc2hvcnQgY29udHJvbDsKKyAgdW5zaWduZWQgc2hvcnQgY29udHJvbDsKIAotCS8qCi0JICogV2UgYXNzdW1lIHRoYXQgdGhlIG1hc2tzIGZvciB0aGUgeDg3IGFuZCB0aGUgU1NFIHVuaXQgYXJlCi0JICogdGhlIHNhbWUuCi0JICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0Y3cgJTAiIDogIj1tIiAoY29udHJvbCkpOworICAvKgorICAgKiBXZSBhc3N1bWUgdGhhdCB0aGUgbWFza3MgZm9yIHRoZSB4ODcgYW5kIHRoZSBTU0UgdW5pdCBhcmUKKyAgICogdGhlIHNhbWUuCisgICAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RjdyAlMCIgOiAiPW0iIChjb250cm9sKSk7CiAKLQlyZXR1cm4gKH5jb250cm9sICYgRkVfQUxMX0VYQ0VQVCk7CisgIHJldHVybiAofmNvbnRyb2wgJiBGRV9BTExfRVhDRVBUKTsKIH0KZGlmZiAtLWdpdCBhL2xpYm0vYXJtL19mcG1hdGguaCBiL2xpYm0vYXJtL19mcG1hdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMxODk0NS4uMDAwMDAwMAotLS0gYS9saWJtL2FybS9fZnBtYXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMyBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEJAotICovCi0KLSNpZiBkZWZpbmVkKF9fVkZQX0ZQX18pCi0jZGVmaW5lCV9JRUVFX1dPUkRfT1JERVIJX0JZVEVfT1JERVIKLSNlbHNlCi0jZGVmaW5lCV9JRUVFX1dPUkRfT1JERVIJX0JJR19FTkRJQU4KLSNlbmRpZgotCi11bmlvbiBJRUVFbDJiaXRzIHsKLQlsb25nIGRvdWJsZQllOwotCXN0cnVjdCB7Ci0jaWYgX0JZVEVfT1JERVIgPT0gX0xJVFRMRV9FTkRJQU4KLSNpZiBfSUVFRV9XT1JEX09SREVSID09IF9MSVRUTEVfRU5ESUFOCi0JCXVuc2lnbmVkIGludAltYW5sCTozMjsKLSNlbmRpZgotCQl1bnNpZ25lZCBpbnQJbWFuaAk6MjA7Ci0JCXVuc2lnbmVkIGludAlleHAJOjExOwotCQl1bnNpZ25lZCBpbnQJc2lnbgk6MTsKLSNpZiBfSUVFRV9XT1JEX09SREVSID09IF9CSUdfRU5ESUFOCi0JCXVuc2lnbmVkIGludAltYW5sCTozMjsKLSNlbmRpZgotI2Vsc2UJLyogX0JZVEVfT1JERVIgPT0gX0xJVFRMRV9FTkRJQU4gKi8KLQkJdW5zaWduZWQgaW50CQlzaWduCToxOwotCQl1bnNpZ25lZCBpbnQJCWV4cAk6MTE7Ci0JCXVuc2lnbmVkIGludAkJbWFuaAk6MjA7Ci0JCXVuc2lnbmVkIGludAkJbWFubAk6MzI7Ci0jZW5kaWYKLQl9IGJpdHM7Ci19OwotCi0jZGVmaW5lCUxEQkxfTkJJVAkwCi0jZGVmaW5lCUxEQkxfSU1QTElDSVRfTkJJVAotI2RlZmluZQltYXNrX25iaXRfbCh1KQkoKHZvaWQpMCkKLQotI2RlZmluZQlMREJMX01BTkhfU0laRQkyMAotI2RlZmluZQlMREJMX01BTkxfU0laRQkzMgotCi0jZGVmaW5lCUxEQkxfVE9fQVJSQVkzMih1LCBhKSBkbyB7CQkJXAotCShhKVswXSA9ICh1aW50MzJfdCkodSkuYml0cy5tYW5sOwkJXAotCShhKVsxXSA9ICh1aW50MzJfdCkodSkuYml0cy5tYW5oOwkJXAotfSB3aGlsZSgwKQpkaWZmIC0tZ2l0IGEvbGlibS9hcm0vZmVudi5jIGIvbGlibS9hcm0vZmVudi5jCmluZGV4IDQ2OWYxOTguLjIxMjQ3MzAgMTAwNjQ0Ci0tLSBhL2xpYm0vYXJtL2ZlbnYuYworKysgYi9saWJtL2FybS9mZW52LmMKQEAgLTI4LDggKzI4LDExMiBAQAogCiAjaW5jbHVkZSA8ZmVudi5oPgogCi0vKgotICogSG9wZWZ1bGx5IHRoZSBzeXN0ZW0gSUQgYnl0ZSBpcyBpbW11dGFibGUsIHNvIGl0J3MgdmFsaWQgdG8gdXNlCi0gKiB0aGlzIGFzIGEgZGVmYXVsdCBlbnZpcm9ubWVudC4KLSAqLworI2RlZmluZSBGUFNDUl9FTkFCTEVfU0hJRlQgOAorI2RlZmluZSBGUFNDUl9FTkFCTEVfTUFTSyAgKEZFX0FMTF9FWENFUFQgPDwgRlBTQ1JfRU5BQkxFX1NISUZUKQorCisjZGVmaW5lIEZQU0NSX1JNT0RFX1NISUZUIDIyCisKIGNvbnN0IGZlbnZfdCBfX2ZlX2RmbF9lbnYgPSAwOworCitpbnQgZmVnZXRlbnYoZmVudl90KiBfX2VudnApIHsKKyAgZmVudl90IF9mcHNjcjsKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18oInZtcnMgJTAsZnBzY3IiIDogIj1yIiAoX2Zwc2NyKSk7CisgICpfX2VudnAgPSBfZnBzY3I7CisgIHJldHVybiAwOworfQorCitpbnQgZmVzZXRlbnYoY29uc3QgZmVudl90KiBfX2VudnApIHsKKyAgZmVudl90IF9mcHNjciA9ICpfX2VudnA7CisgIF9fYXNtX18gX192b2xhdGlsZV9fKCJ2bXNyIGZwc2NyLCUwIiA6IDoicmkiIChfZnBzY3IpKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZWNsZWFyZXhjZXB0KGludCBfX2V4Y2VwdHMpIHsKKyAgZmV4Y2VwdF90IF9fZnBzY3I7CisgIGZlZ2V0ZW52KCZfX2Zwc2NyKTsKKyAgX19mcHNjciAmPSB+X19leGNlcHRzOworICBmZXNldGVudigmX19mcHNjcik7CisgIHJldHVybiAwOworfQorCitpbnQgZmVnZXRleGNlcHRmbGFnKGZleGNlcHRfdCogX19mbGFncCwgaW50IF9fZXhjZXB0cykgeworICBmZXhjZXB0X3QgX19mcHNjcjsKKyAgZmVnZXRlbnYoJl9fZnBzY3IpOworICAqX19mbGFncCA9IF9fZnBzY3IgJiBfX2V4Y2VwdHM7CisgIHJldHVybiAwOworfQorCitpbnQgZmVzZXRleGNlcHRmbGFnKGNvbnN0IGZleGNlcHRfdCogX19mbGFncCwgaW50IF9fZXhjZXB0cykgeworICBmZXhjZXB0X3QgX19mcHNjcjsKKyAgZmVnZXRlbnYoJl9fZnBzY3IpOworICBfX2Zwc2NyICY9IH5fX2V4Y2VwdHM7CisgIF9fZnBzY3IgfD0gKl9fZmxhZ3AgJiBfX2V4Y2VwdHM7CisgIGZlc2V0ZW52KCZfX2Zwc2NyKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZXJhaXNlZXhjZXB0KGludCBfX2V4Y2VwdHMpIHsKKyAgZmV4Y2VwdF90IF9fZXggPSBfX2V4Y2VwdHM7CisgIGZlc2V0ZXhjZXB0ZmxhZygmX19leCwgX19leGNlcHRzKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZXRlc3RleGNlcHQoaW50IF9fZXhjZXB0cykgeworICBmZXhjZXB0X3QgX19mcHNjcjsKKyAgZmVnZXRlbnYoJl9fZnBzY3IpOworICByZXR1cm4gKF9fZnBzY3IgJiBfX2V4Y2VwdHMpOworfQorCitpbnQgZmVnZXRyb3VuZCh2b2lkKSB7CisgIGZlbnZfdCBfZnBzY3I7CisgIGZlZ2V0ZW52KCZfZnBzY3IpOworICByZXR1cm4gKChfZnBzY3IgPj4gRlBTQ1JfUk1PREVfU0hJRlQpICYgMHgzKTsKK30KKworaW50IGZlc2V0cm91bmQoaW50IF9fcm91bmQpIHsKKyAgZmVudl90IF9mcHNjcjsKKyAgZmVnZXRlbnYoJl9mcHNjcik7CisgIF9mcHNjciAmPSB+KDB4MyA8PCBGUFNDUl9STU9ERV9TSElGVCk7CisgIF9mcHNjciB8PSAoX19yb3VuZCA8PCBGUFNDUl9STU9ERV9TSElGVCk7CisgIGZlc2V0ZW52KCZfZnBzY3IpOworICByZXR1cm4gMDsKK30KKworaW50IGZlaG9sZGV4Y2VwdChmZW52X3QqIF9fZW52cCkgeworICBmZW52X3QgX19lbnY7CisgIGZlZ2V0ZW52KCZfX2Vudik7CisgICpfX2VudnAgPSBfX2VudjsKKyAgX19lbnYgJj0gfihGRV9BTExfRVhDRVBUIHwgRlBTQ1JfRU5BQkxFX01BU0spOworICBmZXNldGVudigmX19lbnYpOworICByZXR1cm4gMDsKK30KKworaW50IGZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCogX19lbnZwKSB7CisgIGZleGNlcHRfdCBfX2Zwc2NyOworICBmZWdldGVudigmX19mcHNjcik7CisgIGZlc2V0ZW52KF9fZW52cCk7CisgIGZlcmFpc2VleGNlcHQoX19mcHNjciAmIEZFX0FMTF9FWENFUFQpOworICByZXR1cm4gMDsKK30KKworaW50IGZlZW5hYmxlZXhjZXB0KGludCBfX21hc2spIHsKKyAgZmVudl90IF9fb2xkX2Zwc2NyLCBfX25ld19mcHNjcjsKKyAgZmVnZXRlbnYoJl9fb2xkX2Zwc2NyKTsKKyAgX19uZXdfZnBzY3IgPSBfX29sZF9mcHNjciB8IChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBGUFNDUl9FTkFCTEVfU0hJRlQ7CisgIGZlc2V0ZW52KCZfX25ld19mcHNjcik7CisgIHJldHVybiAoKF9fb2xkX2Zwc2NyID4+IEZQU0NSX0VOQUJMRV9TSElGVCkgJiBGRV9BTExfRVhDRVBUKTsKK30KKworaW50IGZlZGlzYWJsZWV4Y2VwdChpbnQgX19tYXNrKSB7CisgIGZlbnZfdCBfX29sZF9mcHNjciwgX19uZXdfZnBzY3I7CisgIGZlZ2V0ZW52KCZfX29sZF9mcHNjcik7CisgIF9fbmV3X2Zwc2NyID0gX19vbGRfZnBzY3IgJiB+KChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBGUFNDUl9FTkFCTEVfU0hJRlQpOworICBmZXNldGVudigmX19uZXdfZnBzY3IpOworICByZXR1cm4gKChfX29sZF9mcHNjciA+PiBGUFNDUl9FTkFCTEVfU0hJRlQpICYgRkVfQUxMX0VYQ0VQVCk7Cit9CisKK2ludCBmZWdldGV4Y2VwdCh2b2lkKSB7CisgIGZlbnZfdCBfX2Zwc2NyOworICBmZWdldGVudigmX19mcHNjcik7CisgIHJldHVybiAoKF9fZnBzY3IgJiBGUFNDUl9FTkFCTEVfTUFTSykgPj4gRlBTQ1JfRU5BQkxFX1NISUZUKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vYXJtNjQvX2ZwbWF0aC5oIGIvbGlibS9hcm02NC9fZnBtYXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNDYzMmEuLjAwMDAwMDAKLS0tIGEvbGlibS9hcm02NC9fZnBtYXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMyBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL2xpYmMvYWFyY2g2NC9fZnBtYXRoLmggJAotICovCi0KLXVuaW9uIElFRUVsMmJpdHMgewotCWxvbmcgZG91YmxlCWU7Ci0Jc3RydWN0IHsKLSNpZm5kZWYgX19BQVJDSDY0RUJfXwotCQl1bnNpZ25lZCBpbnQJbWFubAk6MzI7Ci0JCXVuc2lnbmVkIGludAltYW5oCToyMDsKLQkJdW5zaWduZWQgaW50CWV4cAk6MTE7Ci0JCXVuc2lnbmVkIGludAlzaWduCToxOwotI2Vsc2UKLQkJdW5zaWduZWQgaW50CQlzaWduCToxOwotCQl1bnNpZ25lZCBpbnQJCWV4cAk6MTE7Ci0JCXVuc2lnbmVkIGludAkJbWFuaAk6MjA7Ci0JCXVuc2lnbmVkIGludAkJbWFubAk6MzI7Ci0jZW5kaWYKLQl9IGJpdHM7Ci19OwotCi0jZGVmaW5lCUxEQkxfTkJJVAkwCi0jZGVmaW5lCUxEQkxfSU1QTElDSVRfTkJJVAotI2RlZmluZQltYXNrX25iaXRfbCh1KQkoKHZvaWQpMCkKLQotI2RlZmluZQlMREJMX01BTkhfU0laRQkzMgotI2RlZmluZQlMREJMX01BTkxfU0laRQkzMgotCi0jZGVmaW5lCUxEQkxfVE9fQVJSQVkzMih1LCBhKSBkbyB7CQkJXAotCShhKVswXSA9ICh1aW50MzJfdCkodSkuYml0cy5tYW5sOwkJXAotCShhKVsxXSA9ICh1aW50MzJfdCkodSkuYml0cy5tYW5oOwkJXAotfSB3aGlsZSgwKQpkaWZmIC0tZ2l0IGEvbGlibS9hcm02NC9mZW52LmMgYi9saWJtL2FybTY0L2ZlbnYuYwppbmRleCAyN2M0MDVmLi5jZTU2MGE3IDEwMDY0NAotLS0gYS9saWJtL2FybTY0L2ZlbnYuYworKysgYi9saWJtL2FybTY0L2ZlbnYuYwpAQCAtMjgsOCArMjgsMTY4IEBACiAKICNpbmNsdWRlIDxmZW52Lmg+CiAKLS8qCi0gKiBIb3BlZnVsbHkgdGhlIHN5c3RlbSBJRCBieXRlIGlzIGltbXV0YWJsZSwgc28gaXQncyB2YWxpZCB0byB1c2UKLSAqIHRoaXMgYXMgYSBkZWZhdWx0IGVudmlyb25tZW50LgotICovCi1jb25zdCBmZW52X3QgX19mZV9kZmxfZW52ID0gMDsKKyNkZWZpbmUgRlBDUl9FWENFUFRfU0hJRlQgOAorI2RlZmluZSBGUENSX0VYQ0VQVF9NQVNLICAoRkVfQUxMX0VYQ0VQVCA8PCBGUENSX0VYQ0VQVF9TSElGVCkKKworI2RlZmluZSBGUENSX1JNT0RFX1NISUZUIDIyCisKK2NvbnN0IGZlbnZfdCBfX2ZlX2RmbF9lbnYgPSB7IDAgLyogY29udHJvbCAqLywgMCAvKiBzdGF0dXMgKi99OworCit0eXBlZGVmIF9fdWludDMyX3QgZnB1X2NvbnRyb2xfdDsgICAvLyBGUENSLCBGbG9hdGluZy1wb2ludCBDb250cm9sIFJlZ2lzdGVyLgordHlwZWRlZiBfX3VpbnQzMl90IGZwdV9zdGF0dXNfdDsgICAgLy8gRlBTUiwgRmxvYXRpbmctcG9pbnQgU3RhdHVzIFJlZ2lzdGVyLgorCisjZGVmaW5lIF9fZ2V0X2ZwY3IoX19mcGNyKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJzICUwLGZwY3IiIDogIj1yIiAoX19mcGNyKSkKKyNkZWZpbmUgX19nZXRfZnBzcihfX2Zwc3IpIF9fYXNtX18gX192b2xhdGlsZV9fKCJtcnMgJTAsZnBzciIgOiAiPXIiIChfX2Zwc3IpKQorI2RlZmluZSBfX3NldF9mcGNyKF9fZnBjcikgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1zciBmcGNyLCUwIiA6IDoicmkiIChfX2ZwY3IpKQorI2RlZmluZSBfX3NldF9mcHNyKF9fZnBzcikgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1zciBmcHNyLCUwIiA6IDoicmkiIChfX2Zwc3IpKQorCitpbnQgZmVnZXRlbnYoZmVudl90KiBlbnZwKSB7CisgIF9fZ2V0X2ZwY3IoZW52cC0+X19jb250cm9sKTsKKyAgX19nZXRfZnBzcihlbnZwLT5fX3N0YXR1cyk7CisgIHJldHVybiAwOworfQorCitpbnQgZmVzZXRlbnYoY29uc3QgZmVudl90KiBlbnZwKSB7CisgIGZwdV9jb250cm9sX3QgZnBjcjsKKworICBfX2dldF9mcGNyKGZwY3IpOworICBpZiAoZW52cC0+X19jb250cm9sICE9IGZwY3IpIHsKKyAgICBfX3NldF9mcGNyKGVudnAtPl9fY29udHJvbCk7CisgIH0KKyAgX19zZXRfZnBzcihlbnZwLT5fX3N0YXR1cyk7CisgIHJldHVybiAwOworfQorCitpbnQgZmVjbGVhcmV4Y2VwdChpbnQgZXhjZXB0cykgeworICBmcHVfc3RhdHVzX3QgZnBzcjsKKworICBleGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7CisgIF9fZ2V0X2Zwc3IoZnBzcik7CisgIGZwc3IgJj0gfmV4Y2VwdHM7CisgIF9fc2V0X2Zwc3IoZnBzcik7CisgIHJldHVybiAwOworfQorCitpbnQgZmVnZXRleGNlcHRmbGFnKGZleGNlcHRfdCogZmxhZ3AsIGludCBleGNlcHRzKSB7CisgIGZwdV9zdGF0dXNfdCBmcHNyOworCisgIGV4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKKyAgX19nZXRfZnBzcihmcHNyKTsKKyAgKmZsYWdwID0gZnBzciAmIGV4Y2VwdHM7CisgIHJldHVybiAwOworfQorCitpbnQgZmVzZXRleGNlcHRmbGFnKGNvbnN0IGZleGNlcHRfdCogZmxhZ3AsIGludCBleGNlcHRzKSB7CisgIGZwdV9zdGF0dXNfdCBmcHNyOworCisgIGV4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKKyAgX19nZXRfZnBzcihmcHNyKTsKKyAgZnBzciAmPSB+ZXhjZXB0czsKKyAgZnBzciB8PSAqZmxhZ3AgJiBleGNlcHRzOworICBfX3NldF9mcHNyKGZwc3IpOworICByZXR1cm4gMDsKK30KKworaW50IGZlcmFpc2VleGNlcHQoaW50IGV4Y2VwdHMpIHsKKyAgZmV4Y2VwdF90IGV4ID0gZXhjZXB0czsKKworICBmZXNldGV4Y2VwdGZsYWcoJmV4LCBleGNlcHRzKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZXRlc3RleGNlcHQoaW50IGV4Y2VwdHMpIHsKKyAgZnB1X3N0YXR1c190IGZwc3I7CisKKyAgZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOworICBfX2dldF9mcHNyKGZwc3IpOworICByZXR1cm4gKGZwc3IgJiBleGNlcHRzKTsKK30KKworaW50IGZlZ2V0cm91bmQodm9pZCkgeworICBmcHVfY29udHJvbF90IGZwY3I7CisKKyAgX19nZXRfZnBjcihmcGNyKTsKKyAgcmV0dXJuICgoZnBjciA+PiBGUENSX1JNT0RFX1NISUZUKSAmIEZFX1RPV0FSRFpFUk8pOworfQorCitpbnQgZmVzZXRyb3VuZChpbnQgcm91bmQpIHsKKyAgZnB1X2NvbnRyb2xfdCBmcGNyLCBuZXdfZnBjcjsKKworICByb3VuZCAmPSBGRV9UT1dBUkRaRVJPOworICBfX2dldF9mcGNyKGZwY3IpOworICBuZXdfZnBjciA9IGZwY3IgJiB+KEZFX1RPV0FSRFpFUk8gPDwgRlBDUl9STU9ERV9TSElGVCk7CisgIG5ld19mcGNyIHw9IChyb3VuZCA8PCBGUENSX1JNT0RFX1NISUZUKTsKKyAgaWYgKG5ld19mcGNyICE9IGZwY3IpIHsKKyAgICBfX3NldF9mcGNyKG5ld19mcGNyKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IGZlaG9sZGV4Y2VwdChmZW52X3QqIGVudnApIHsKKyAgZmVudl90IGVudjsKKyAgZnB1X3N0YXR1c190IGZwc3I7CisgIGZwdV9jb250cm9sX3QgZnBjciwgbmV3X2ZwY3I7CisKKyAgX19nZXRfZnBzcihmcHNyKTsKKyAgX19nZXRfZnBjcihmcGNyKTsKKyAgZW52Ll9fc3RhdHVzID0gZnBzcjsKKyAgZW52Ll9fY29udHJvbCA9IGZwY3I7CisgICplbnZwID0gZW52OworCisgIC8vIFNldCBleGNlcHRpb25zIHRvIHVudHJhcHBlZC4KKyAgbmV3X2ZwY3IgPSBmcGNyICYgfihGRV9BTExfRVhDRVBUIDw8IEZQQ1JfRVhDRVBUX1NISUZUKTsKKyAgaWYgKG5ld19mcGNyICE9IGZwY3IpIHsKKyAgICBfX3NldF9mcGNyKG5ld19mcGNyKTsKKyAgfQorCisgIC8vIENsZWFyIGFsbCBleGNlcHRpb25zLgorICBmcHNyICY9IH5GRV9BTExfRVhDRVBUOworICBfX3NldF9mcHNyKGZwc3IpOworICByZXR1cm4gMDsKK30KKworaW50IGZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCogZW52cCkgeworICBmcHVfc3RhdHVzX3QgZnBzcjsKKyAgZnB1X2NvbnRyb2xfdCBmcGNyOworCisgIC8vIFNldCBGUFUgQ29udHJvbCByZWdpc3Rlci4KKyAgX19nZXRfZnBjcihmcGNyKTsKKyAgaWYgKGVudnAtPl9fY29udHJvbCAhPSBmcGNyKSB7CisgICAgX19zZXRfZnBjcihlbnZwLT5fX2NvbnRyb2wpOworICB9CisKKyAgLy8gU2V0IEZQVSBTdGF0dXMgcmVnaXN0ZXIgdG8gc3RhdHVzIHwgY3VycmVudGx5IHJhaXNlZCBleGNlcHRpb25zLgorICBfX2dldF9mcHNyKGZwc3IpOworICBmcHNyID0gZW52cC0+X19zdGF0dXMgfCAoZnBzciAmIEZFX0FMTF9FWENFUFQpOworICBfX3NldF9mcHNyKGZwc3IpOworICByZXR1cm4gMDsKK30KKworaW50IGZlZW5hYmxlZXhjZXB0KGludCBtYXNrKSB7CisgIGZwdV9jb250cm9sX3Qgb2xkX2ZwY3IsIG5ld19mcGNyOworCisgIF9fZ2V0X2ZwY3Iob2xkX2ZwY3IpOworICBuZXdfZnBjciA9IG9sZF9mcGNyIHwgKChtYXNrICYgRkVfQUxMX0VYQ0VQVCkgPDwgRlBDUl9FWENFUFRfU0hJRlQpOworICBpZiAobmV3X2ZwY3IgIT0gb2xkX2ZwY3IpIHsKKyAgICBfX3NldF9mcGNyKG5ld19mcGNyKTsKKyAgfQorICByZXR1cm4gKChvbGRfZnBjciA+PiBGUENSX0VYQ0VQVF9TSElGVCkgJiBGRV9BTExfRVhDRVBUKTsKK30KKworaW50IGZlZGlzYWJsZWV4Y2VwdChpbnQgbWFzaykgeworICBmcHVfY29udHJvbF90IG9sZF9mcGNyLCBuZXdfZnBjcjsKKworICBfX2dldF9mcGNyKG9sZF9mcGNyKTsKKyAgbmV3X2ZwY3IgPSBvbGRfZnBjciAmIH4oKG1hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBGUENSX0VYQ0VQVF9TSElGVCk7CisgIGlmIChuZXdfZnBjciAhPSBvbGRfZnBjcikgeworICAgIF9fc2V0X2ZwY3IobmV3X2ZwY3IpOworICB9CisgIHJldHVybiAoKG9sZF9mcGNyID4+IEZQQ1JfRVhDRVBUX1NISUZUKSAmIEZFX0FMTF9FWENFUFQpOworfQorCitpbnQgZmVnZXRleGNlcHQodm9pZCkgeworICBmcHVfY29udHJvbF90IGZwY3I7CisKKyAgX19nZXRfZnBjcihmcGNyKTsKKyAgcmV0dXJuICgoZnBjciAmIEZQQ1JfRVhDRVBUX01BU0spID4+IEZQQ1JfRVhDRVBUX1NISUZUKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vZmFrZV9sb25nX2RvdWJsZS5jIGIvbGlibS9mYWtlX2xvbmdfZG91YmxlLmMKaW5kZXggNzU2ZTM1Yi4uMzE3YTExNSAxMDA2NDQKLS0tIGEvbGlibS9mYWtlX2xvbmdfZG91YmxlLmMKKysrIGIvbGlibS9mYWtlX2xvbmdfZG91YmxlLmMKQEAgLTE3LDc0ICsxNywyNSBAQAogI2luY2x1ZGUgPGZsb2F0Lmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogCi1leHRlcm4gaW50IF9faXNpbmYoZG91YmxlKTsgLyogaXNpbmYuYyAqLwotaW50IChpc2luZikoZG91YmxlIGExKSB7IHJldHVybiBfX2lzaW5mKGExKTsgfQotCi1pbnQgKGlzbmFuZikoZmxvYXQgYTEpIHsgcmV0dXJuIF9faXNuYW5mKGExKTsgfQotCisjaWZuZGVmIF9fTFA2NF9fCiAvKgogICogVGhlIEJTRCAibG9uZyBkb3VibGUiIGZ1bmN0aW9ucyBhcmUgYnJva2VuIHdoZW4gc2l6ZW9mKGxvbmcgZG91YmxlKSA9PSBzaXplb2YoZG91YmxlKS4KICAqIEFuZHJvaWQgd29ya3MgYXJvdW5kIHRob3NlIGNhc2VzIGJ5IHJlcGxhY2luZyB0aGUgYnJva2VuIGZ1bmN0aW9ucyB3aXRoIG91ciBvd24gdHJpdmlhbCBzdHVicwogICogdGhhdCBjYWxsIHRoZSByZWd1bGFyICJkb3VibGUiIGZ1bmN0aW9uLgogICovCiAKLWludCBfX2ZwY2xhc3NpZnlsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBfX2ZwY2xhc3NpZnlkKGExKTsgfQotaW50IF9faXNmaW5pdGVsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBfX2lzZmluaXRlKGExKTsgfQotaW50IF9faXNpbmZsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBfX2lzaW5mKGExKTsgfQotaW50IF9faXNuYW5sKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiAoaXNuYW4pKGExKTsgfQotaW50IF9faXNub3JtYWxsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBfX2lzbm9ybWFsKGExKTsgfQotaW50IF9fc2lnbmJpdGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIF9fc2lnbmJpdChhMSk7IH0KLQotbG9uZyBkb3VibGUgYWNvc2hsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBhY29zaChhMSk7IH0KLWxvbmcgZG91YmxlIGFjb3NsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBhY29zKGExKTsgfQotbG9uZyBkb3VibGUgYXNpbmhsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBhc2luaChhMSk7IH0KLWxvbmcgZG91YmxlIGFzaW5sKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBhc2luKGExKTsgfQotbG9uZyBkb3VibGUgYXRhbjJsKGxvbmcgZG91YmxlIGExLCBsb25nIGRvdWJsZSBhMikgeyByZXR1cm4gYXRhbjIoYTEsIGEyKTsgfQotbG9uZyBkb3VibGUgYXRhbmhsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBhdGFuaChhMSk7IH0KLWxvbmcgZG91YmxlIGF0YW5sKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBhdGFuKGExKTsgfQotbG9uZyBkb3VibGUgY2JydGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGNicnQoYTEpOyB9Ci1sb25nIGRvdWJsZSBjZWlsbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gY2VpbChhMSk7IH0KIGxvbmcgZG91YmxlIGNvcHlzaWdubChsb25nIGRvdWJsZSBhMSwgbG9uZyBkb3VibGUgYTIpIHsgcmV0dXJuIGNvcHlzaWduKGExLCBhMik7IH0KLWxvbmcgZG91YmxlIGNvc2hsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBjb3NoKGExKTsgfQotbG9uZyBkb3VibGUgY29zbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gY29zKGExKTsgfQotbG9uZyBkb3VibGUgZXJmY2wobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGVyZmMoYTEpOyB9Ci1sb25nIGRvdWJsZSBlcmZsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBlcmYoYTEpOyB9Ci1sb25nIGRvdWJsZSBleHAybChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gZXhwMihhMSk7IH0KLWxvbmcgZG91YmxlIGV4cGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGV4cChhMSk7IH0KLWxvbmcgZG91YmxlIGV4cG0xbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gZXhwbTEoYTEpOyB9CiBsb25nIGRvdWJsZSBmYWJzbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gZmFicyhhMSk7IH0KLWxvbmcgZG91YmxlIGZsb29ybChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gZmxvb3IoYTEpOyB9Ci1sb25nIGRvdWJsZSBmbWFsKGxvbmcgZG91YmxlIGExLCBsb25nIGRvdWJsZSBhMiwgbG9uZyBkb3VibGUgYTMpIHsgcmV0dXJuIGZtYShhMSwgYTIsIGEzKTsgfQogbG9uZyBkb3VibGUgZm1heGwobG9uZyBkb3VibGUgYTEsIGxvbmcgZG91YmxlIGEyKSB7IHJldHVybiBmbWF4KGExLCBhMik7IH0KIGxvbmcgZG91YmxlIGZtb2RsKGxvbmcgZG91YmxlIGExLCBsb25nIGRvdWJsZSBhMikgeyByZXR1cm4gZm1vZChhMSwgYTIpOyB9CiBsb25nIGRvdWJsZSBmbWlubChsb25nIGRvdWJsZSBhMSwgbG9uZyBkb3VibGUgYTIpIHsgcmV0dXJuIGZtaW4oYTEsIGEyKTsgfQotbG9uZyBkb3VibGUgZnJleHBsKGxvbmcgZG91YmxlIGExLCBpbnQqIGEyKSB7IHJldHVybiBmcmV4cChhMSwgYTIpOyB9Ci1sb25nIGRvdWJsZSBoeXBvdGwobG9uZyBkb3VibGUgYTEsIGxvbmcgZG91YmxlIGEyKSB7IHJldHVybiBoeXBvdChhMSwgYTIpOyB9CiBpbnQgaWxvZ2JsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBpbG9nYihhMSk7IH0KLWxvbmcgZG91YmxlIGxkZXhwbChsb25nIGRvdWJsZSBhMSwgaW50IGEyKSB7IHJldHVybiBsZGV4cChhMSwgYTIpOyB9Ci1sb25nIGRvdWJsZSBsZ2FtbWFsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBsZ2FtbWEoYTEpOyB9CiBsb25nIGxvbmcgbGxyaW50bChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gbGxyaW50KGExKTsgfQotbG9uZyBkb3VibGUgbG9nMTBsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBsb2cxMChhMSk7IH0KLWxvbmcgZG91YmxlIGxvZzFwbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gbG9nMXAoYTEpOyB9Ci1sb25nIGRvdWJsZSBsb2cybChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gbG9nMihhMSk7IH0KLWxvbmcgZG91YmxlIGxvZ2JsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBsb2diKGExKTsgfQotbG9uZyBkb3VibGUgbG9nbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gbG9nKGExKTsgfQogbG9uZyBscmludGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGxyaW50KGExKTsgfQogbG9uZyBsb25nIGxscm91bmRsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBsbHJvdW5kKGExKTsgfQogbG9uZyBscm91bmRsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBscm91bmQoYTEpOyB9Ci1sb25nIGRvdWJsZSBuYW5sKGNvbnN0IGNoYXIqIGExKSB7IHJldHVybiBuYW4oYTEpOyB9Ci1sb25nIGRvdWJsZSBuZXh0YWZ0ZXJsKGxvbmcgZG91YmxlIGExLCBsb25nIGRvdWJsZSBhMikgeyByZXR1cm4gbmV4dGFmdGVyKGExLCBhMik7IH0KLWxvbmcgZG91YmxlIHBvd2wobG9uZyBkb3VibGUgYTEsIGxvbmcgZG91YmxlIGEyKSB7IHJldHVybiBwb3coYTEsIGEyKTsgfQotbG9uZyBkb3VibGUgcmVtYWluZGVybChsb25nIGRvdWJsZSBhMSwgbG9uZyBkb3VibGUgYTIpIHsgcmV0dXJuIHJlbWFpbmRlcihhMSwgYTIpOyB9Ci1sb25nIGRvdWJsZSByZW1xdW9sKGxvbmcgZG91YmxlIGExLCBsb25nIGRvdWJsZSBhMiwgaW50KiBhMykgeyByZXR1cm4gcmVtcXVvKGExLCBhMiwgYTMpOyB9Ci1sb25nIGRvdWJsZSByaW50bChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gcmludChhMSk7IH0KK2xvbmcgZG91YmxlIG1vZGZsKGxvbmcgZG91YmxlIGExLCBsb25nIGRvdWJsZSogYTIpIHsgZG91YmxlIGk7IGRvdWJsZSBmID0gbW9kZihhMSwgJmkpOyAqYTIgPSBpOyByZXR1cm4gZjsgfQorZmxvYXQgbmV4dHRvd2FyZGYoZmxvYXQgYTEsIGxvbmcgZG91YmxlIGEyKSB7IHJldHVybiBuZXh0YWZ0ZXJmKGExLCAoZmxvYXQpIGEyKTsgfQogbG9uZyBkb3VibGUgcm91bmRsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiByb3VuZChhMSk7IH0KLWxvbmcgZG91YmxlIHNjYWxibmwobG9uZyBkb3VibGUgYTEsIGludCBhMikgeyByZXR1cm4gc2NhbGJuKGExLCBhMik7IH0KLWxvbmcgZG91YmxlIHNpZ25pZmljYW5kbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gc2lnbmlmaWNhbmQoYTEpOyB9Ci1sb25nIGRvdWJsZSBzaW5obChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gc2luaChhMSk7IH0KLWxvbmcgZG91YmxlIHNpbmwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIHNpbihhMSk7IH0KLWxvbmcgZG91YmxlIHNxcnRsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBzcXJ0KGExKTsgfQotbG9uZyBkb3VibGUgdGFuaGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIHRhbmgoYTEpOyB9Ci1sb25nIGRvdWJsZSB0YW5sKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiB0YW4oYTEpOyB9Ci1sb25nIGRvdWJsZSB0Z2FtbWFsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiB0Z2FtbWEoYTEpOyB9Ci1sb25nIGRvdWJsZSB0cnVuY2wobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIHRydW5jKGExKTsgfQorCisjZW5kaWYgLy8gX19MUDY0X18KZGlmZiAtLWdpdCBhL2xpYm0vZnBjbGFzc2lmeS5jIGIvbGlibS9mcGNsYXNzaWZ5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMzkxMzguLjAwMDAwMDAKLS0tIGEvbGlibS9mcGNsYXNzaWZ5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMyBNaWtlIEJhcmNyb2Z0IDxtaWtlQEZyZWVCU0Qub3JnPgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzIERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbGliYy9nZW4vZnBjbGFzc2lmeS5jLHYgMS4yIDIwMDUvMDIvMDYgMDM6MjM6MzEgZGFzIEV4cCAkCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KLQotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotI2luY2x1ZGUgImZwbWF0aC5oIgotCi1pbnQKLV9fZnBjbGFzc2lmeWYoZmxvYXQgZikKLXsKLQl1bmlvbiBJRUVFZjJiaXRzIHU7Ci0KLQl1LmYgPSBmOwotCWlmICh1LmJpdHMuZXhwID09IDApIHsKLQkJaWYgKHUuYml0cy5tYW4gPT0gMCkKLQkJCXJldHVybiAoRlBfWkVSTyk7Ci0JCXJldHVybiAoRlBfU1VCTk9STUFMKTsKLQl9Ci0JaWYgKHUuYml0cy5leHAgPT0gMjU1KSB7Ci0JCWlmICh1LmJpdHMubWFuID09IDApCi0JCQlyZXR1cm4gKEZQX0lORklOSVRFKTsKLQkJcmV0dXJuIChGUF9OQU4pOwotCX0KLQlyZXR1cm4gKEZQX05PUk1BTCk7Ci19Ci0KLWludAotX19mcGNsYXNzaWZ5ZChkb3VibGUgZCkKLXsKLQl1bmlvbiBJRUVFZDJiaXRzIHU7Ci0KLQl1LmQgPSBkOwotCWlmICh1LmJpdHMuZXhwID09IDApIHsKLQkJaWYgKCh1LmJpdHMubWFubCB8IHUuYml0cy5tYW5oKSA9PSAwKQotCQkJcmV0dXJuIChGUF9aRVJPKTsKLQkJcmV0dXJuIChGUF9TVUJOT1JNQUwpOwotCX0KLQlpZiAodS5iaXRzLmV4cCA9PSAyMDQ3KSB7Ci0JCWlmICgodS5iaXRzLm1hbmwgfCB1LmJpdHMubWFuaCkgPT0gMCkKLQkJCXJldHVybiAoRlBfSU5GSU5JVEUpOwotCQlyZXR1cm4gKEZQX05BTik7Ci0JfQotCXJldHVybiAoRlBfTk9STUFMKTsKLX0KLQotaW50Ci1fX2ZwY2xhc3NpZnlsKGxvbmcgZG91YmxlIGUpCi17Ci0JdW5pb24gSUVFRWwyYml0cyB1OwotCi0JdS5lID0gZTsKLQlpZiAodS5iaXRzLmV4cCA9PSAwKSB7Ci0JCWlmICgodS5iaXRzLm1hbmwgfCB1LmJpdHMubWFuaCkgPT0gMCkKLQkJCXJldHVybiAoRlBfWkVSTyk7Ci0JCXJldHVybiAoRlBfU1VCTk9STUFMKTsKLQl9Ci0JbWFza19uYml0X2wodSk7CQkvKiBNYXNrIG5vcm1hbGl6YXRpb24gYml0IGlmIGFwcGxpY2FibGUuICovCi0JaWYgKHUuYml0cy5leHAgPT0gMzI3NjcpIHsKLQkJaWYgKCh1LmJpdHMubWFubCB8IHUuYml0cy5tYW5oKSA9PSAwKQotCQkJcmV0dXJuIChGUF9JTkZJTklURSk7Ci0JCXJldHVybiAoRlBfTkFOKTsKLQl9Ci0JcmV0dXJuIChGUF9OT1JNQUwpOwotfQotCmRpZmYgLS1naXQgYS9saWJtL2ZwbWF0aC5oIGIvbGlibS9mcG1hdGguaAppbmRleCBmMzc1M2MxLi44MDQyMGU1IDEwMDY0NAotLS0gYS9saWJtL2ZwbWF0aC5oCisrKyBiL2xpYm0vZnBtYXRoLmgKQEAgLTI0LDYxICsyNCw3MyBAQAogICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbGliYy9pbmNsdWRlL2ZwbWF0aC5oLHYgMS4zIDIwMDUvMDIvMDYgMDM6MjM6MzEgZGFzIEV4cCAkCisgKiAkRnJlZUJTRCQKICAqLwogCisvLyBBTkRST0lEIGNoYW5nZWQ6CisvLyAtIGtlZXAgb25seSBsaXR0bGUgZW5kaWFuIHZhcmlhbnRzIGFzIHRoZXkncmUgdGhlIG9ubHkgb25lIHN1cHBvcnRlZC4KKy8vIC0gYWRkIGxvbmcgZG91YmxlIHN0cnVjdHVyZXMgaGVyZSBpbnN0ZWFkIG9mIF9mcG1hdGguaC4KKy8vIC0gYW5kcm9pZCB1c2VzIDEyOCBiaXRzIGxvbmcgZG91YmxlcyBmb3IgTFA2NCwgc28gdGhlIHN0cnVjdHVyZSBhbmQgbWFjcm9zCisvLyAgIHdlcmUgcmV3b3JrZWQgZm9yIHRoZSBxdWFkIHByZWNpc2lvbiBpZWVlIHJlcHJlc2VudGF0aW9uLgorCisjaWZuZGVmIF9GUE1BVEhfCisjZGVmaW5lIF9GUE1BVEhfCisKICNpbmNsdWRlIDxlbmRpYW4uaD4KLSNpbmNsdWRlICJfZnBtYXRoLmgiCiAKIHVuaW9uIElFRUVmMmJpdHMgewotCWZsb2F0CWY7Ci0Jc3RydWN0IHsKLSNpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCi0JCXVuc2lnbmVkIGludAltYW4JOjIzOwotCQl1bnNpZ25lZCBpbnQJZXhwCTo4OwotCQl1bnNpZ25lZCBpbnQJc2lnbgk6MTsKLSNlbHNlIC8qIF9CSUdfRU5ESUFOICovCi0JCXVuc2lnbmVkIGludAlzaWduCToxOwotCQl1bnNpZ25lZCBpbnQJZXhwCTo4OwotCQl1bnNpZ25lZCBpbnQJbWFuCToyMzsKLSNlbmRpZgotCX0gYml0czsKKyAgZmxvYXQgZjsKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBpbnQgbWFuICAgOjIzOworICAgIHVuc2lnbmVkIGludCBleHAgICA6ODsKKyAgICB1bnNpZ25lZCBpbnQgc2lnbiAgOjE7CisgIH0gYml0czsKIH07CiAKLSNkZWZpbmUJREJMX01BTkhfU0laRQkyMAotI2RlZmluZQlEQkxfTUFOTF9TSVpFCTMyCisjZGVmaW5lIERCTF9NQU5IX1NJWkUgIDIwCisjZGVmaW5lIERCTF9NQU5MX1NJWkUgIDMyCiAKIHVuaW9uIElFRUVkMmJpdHMgewotCWRvdWJsZQlkOwotCXN0cnVjdCB7Ci0vKiAjaWZkZWYgX19BUk1FQl9fICovCi0jaWYgKF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4pIHx8IChkZWZpbmVkKF9fYXJtX18pICYmICFkZWZpbmVkKF9fVkZQX0ZQX18pKQotCQl1bnNpZ25lZCBpbnQJbWFuaAk6MjA7Ci0JCXVuc2lnbmVkIGludAlleHAJOjExOwotCQl1bnNpZ25lZCBpbnQJc2lnbgk6MTsKLQkJdW5zaWduZWQgaW50CW1hbmwJOjMyOwotI2VsaWYgIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KLQkJdW5zaWduZWQgaW50CW1hbmwJOjMyOwotCQl1bnNpZ25lZCBpbnQJbWFuaAk6MjA7Ci0JCXVuc2lnbmVkIGludAlleHAJOjExOwotCQl1bnNpZ25lZCBpbnQJc2lnbgk6MTsKLSNlbGlmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KLQkJdW5zaWduZWQgaW50CXNpZ24JOjE7Ci0JCXVuc2lnbmVkIGludAlleHAJOjExOwotCQl1bnNpZ25lZCBpbnQJbWFuaAk6MjA7Ci0JCXVuc2lnbmVkIGludAltYW5sCTozMjsKLSNlbmRpZgotCX0gYml0czsKKyAgZG91YmxlICBkOworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCBtYW5sICA6MzI7CisgICAgdW5zaWduZWQgaW50IG1hbmggIDoyMDsKKyAgICB1bnNpZ25lZCBpbnQgZXhwICAgOjExOworICAgIHVuc2lnbmVkIGludCBzaWduICA6MTsKKyAgfSBiaXRzOwogfTsKIAotLyoKLSAqIFRoZSBCU0QgImxvbmcgZG91YmxlIiBmdW5jdGlvbnMgYXJlIGJyb2tlbiB3aGVuIHNpemVvZihsb25nIGRvdWJsZSkgPT0gc2l6ZW9mKGRvdWJsZSkuCi0gKiBBbmRyb2lkIHdvcmtzIGFyb3VuZCB0aG9zZSBjYXNlcyBieSByZXBsYWNpbmcgdGhlIGJyb2tlbiBmdW5jdGlvbnMgd2l0aCBvdXIgb3duIHRyaXZpYWwgc3R1YnMKLSAqIHRoYXQgY2FsbCB0aGUgcmVndWxhciAiZG91YmxlIiBmdW5jdGlvbi4KLSAqLwotI2RlZmluZSBfX2ZwY2xhc3NpZnlsIF9fYnJva2VuX19mcGNsYXNzaWZ5Ci0jZGVmaW5lIF9faXNmaW5pdGVsIF9fYnJva2VuX19pc2Zpbml0ZWwKLSNkZWZpbmUgX19pc2luZmwgX19icm9rZW5fX2lzaW5mbAotI2RlZmluZSBfX2lzbmFubCBfX2Jyb2tlbl9faXNuYW5sCi0jZGVmaW5lIF9faXNub3JtYWxsIF9fYnJva2VuX19pc25vcm1hbGwKLSNkZWZpbmUgX19zaWduYml0bCBfX2Jyb2tlbl9zaWduYml0bAorI2lmZGVmIF9fTFA2NF9fCisKK3VuaW9uIElFRUVsMmJpdHMgeworICBsb25nIGRvdWJsZSBlOworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGxvbmcgbWFubCAgOjY0OworICAgIHVuc2lnbmVkIGxvbmcgbWFuaCAgOjQ4OworICAgIHVuc2lnbmVkIGludCAgZXhwICAgOjE1OworICAgIHVuc2lnbmVkIGludCAgc2lnbiAgOjE7CisgIH0gYml0czsKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBsb25nIG1hbmwgICAgIDo2NDsKKyAgICB1bnNpZ25lZCBsb25nIG1hbmggICAgIDo0ODsKKyAgICB1bnNpZ25lZCBpbnQgIGV4cHNpZ24gIDoxNjsKKyAgfSB4Yml0czsKK307CisKKyNkZWZpbmUgTERCTF9OQklUICAwCisjZGVmaW5lIExEQkxfSU1QTElDSVRfTkJJVAorI2RlZmluZSBtYXNrX25iaXRfbCh1KSAgKCh2b2lkKTApCisKKyNkZWZpbmUgTERCTF9NQU5IX1NJWkUgIDQ4CisjZGVmaW5lIExEQkxfTUFOTF9TSVpFICA2NAorCisjZGVmaW5lIExEQkxfVE9fQVJSQVkzMih1LCBhKSBkbyB7ICAgICAgICAgICBcCisgIChhKVswXSA9ICh1aW50MzJfdCkodSkuYml0cy5tYW5sOyAgICAgICAgICBcCisgIChhKVsxXSA9ICh1aW50MzJfdCkoKHUpLmJpdHMubWFubCA+PiAzMik7ICBcCisgIChhKVsyXSA9ICh1aW50MzJfdCkodSkuYml0cy5tYW5oOyAgICAgICAgICBcCisgIChhKVszXSA9ICh1aW50MzJfdCkoKHUpLmJpdHMubWFuaCA+PiAzMik7ICBcCit9IHdoaWxlKDApCisKKyNlbmRpZiAvLyBfX0xQNjRfXworCisjZW5kaWYgLy8gX0ZQTUFUSF8KZGlmZiAtLWdpdCBhL2xpYm0vZnJlZWJzZC1jb21wYXQuaCBiL2xpYm0vZnJlZWJzZC1jb21wYXQuaAppbmRleCA0YjE0ZmFlLi4xNDgxY2MyIDEwMDY0NAotLS0gYS9saWJtL2ZyZWVic2QtY29tcGF0LmgKKysrIGIvbGlibS9mcmVlYnNkLWNvbXBhdC5oCkBAIC0xNywxMCArMTcsMTYgQEAKICNpZm5kZWYgX0JJT05JQ19MSUJNX0ZSRUVCU0RfQ09NUEFUX0hfaW5jbHVkZWQKICNkZWZpbmUgX0JJT05JQ19MSUJNX0ZSRUVCU0RfQ09NUEFUX0hfaW5jbHVkZWQKIAotI2RlZmluZSBfX3dlYWtfcmVmZXJlbmNlKHN5bSxhbGlhcykgXAotICAgIC8qIFdlIGRvbid0IHVzZSBfX3dlYWtfcmVmZXJlbmNlOyBzZWUgImZha2VfbG9uZ19kb3VibGUuYyIuICovCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2RlZmluZSBfX3dlYWtfcmVmZXJlbmNlKHN5bSxhbGlhcykgICAgIFwKKyAgICBfX2FzbV9fKCIud2VhayAiICNhbGlhcyk7ICAgICAgICAgICBcCisgICAgX19hc21fXygiLmVxdSAiICAjYWxpYXMgIiwgIiAjc3ltKQogCiAjZGVmaW5lIF9fc3Ryb25nX3JlZmVyZW5jZShzeW0sYWxpYXNzeW0pIFwKICAgICBleHRlcm4gX190eXBlb2YgKHN5bSkgYWxpYXNzeW0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpYXNfXyAoI3N5bSkpKQogCisvKiBkaWdpdHRvaW50IGlzIGluIEJTRCdzIDxjdHlwZS5oPi4gKi8KK2ludCBkaWdpdHRvaW50KGNoYXIgY2gpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ni9fZnBtYXRoLmggYi9saWJtL2kzODYvX2ZwbWF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjFmNWY0Li4wMDAwMDAwCi0tLSBhL2xpYm0vaTM4Ni9fZnBtYXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMyBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEJAotICovCi0KLXVuaW9uIElFRUVsMmJpdHMgewotCWxvbmcgZG91YmxlCWU7Ci0Jc3RydWN0IHsKLQkJdW5zaWduZWQgaW50CW1hbmwJOjMyOwotCQl1bnNpZ25lZCBpbnQJbWFuaAk6MzI7Ci0JCXVuc2lnbmVkIGludAlleHAJOjE1OwotCQl1bnNpZ25lZCBpbnQJc2lnbgk6MTsKLQkJdW5zaWduZWQgaW50CWp1bmsJOjE2OwotCX0gYml0czsKLQlzdHJ1Y3QgewotCQl1bnNpZ25lZCBsb25nIGxvbmcgbWFuCTo2NDsKLQkJdW5zaWduZWQgaW50IAlleHBzaWduCToxNjsKLQkJdW5zaWduZWQgaW50CWp1bmsJOjE2OwotCX0geGJpdHM7Ci19OwotCi0jZGVmaW5lCUxEQkxfTkJJVAkweDgwMDAwMDAwCi0jZGVmaW5lCW1hc2tfbmJpdF9sKHUpCSgodSkuYml0cy5tYW5oICY9IH5MREJMX05CSVQpCi0KLSNkZWZpbmUJTERCTF9NQU5IX1NJWkUJMzIKLSNkZWZpbmUJTERCTF9NQU5MX1NJWkUJMzIKLQotI2RlZmluZQlMREJMX1RPX0FSUkFZMzIodSwgYSkgZG8gewkJCVwKLQkoYSlbMF0gPSAodWludDMyX3QpKHUpLmJpdHMubWFubDsJCVwKLQkoYSlbMV0gPSAodWludDMyX3QpKHUpLmJpdHMubWFuaDsJCVwKLX0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9saWJtL2kzODcvZmVudi5jIGIvbGlibS9pMzg3L2ZlbnYuYwppbmRleCA4OWRkYzU1Li5mNjRmOGRjIDEwMDY0NAotLS0gYS9saWJtL2kzODcvZmVudi5jCisrKyBiL2xpYm0vaTM4Ny9mZW52LmMKQEAgLTMxLDI5ICszMSwzMSBAQAogI2luY2x1ZGUgIm5weC5oIgogI2luY2x1ZGUgImZlbnYuaCIKIAorI2RlZmluZSBST1VORF9NQVNLICAgKEZFX1RPTkVBUkVTVCB8IEZFX0RPV05XQVJEIHwgRkVfVVBXQVJEIHwgRkVfVE9XQVJEWkVSTykKKwogLyoKICAqIEFzIGNvbXBhcmVkIHRvIHRoZSB4ODcgY29udHJvbCB3b3JkLCB0aGUgU1NFIHVuaXQncyBjb250cm9sIHdvcmQKICAqIGhhcyB0aGUgcm91bmRpbmcgY29udHJvbCBiaXRzIG9mZnNldCBieSAzIGFuZCB0aGUgZXhjZXB0aW9uIG1hc2sKICAqIGJpdHMgb2Zmc2V0IGJ5IDcuCiAgKi8KLSNkZWZpbmUJX1NTRV9ST1VORF9TSElGVAkzCi0jZGVmaW5lCV9TU0VfRU1BU0tfU0hJRlQJNworI2RlZmluZSBfU1NFX1JPVU5EX1NISUZUIDMKKyNkZWZpbmUgX1NTRV9FTUFTS19TSElGVCA3CiAKIGNvbnN0IGZlbnZfdCBfX2ZlX2RmbF9lbnYgPSB7Ci0JX19JTklUSUFMX05QWENXX18sIC8qX19jb250cm9sKi8KLQkweDAwMDAsICAgICAgICAgICAgLypfX214Y3NyX2hpKi8KLQkweDAwMDAsICAgICAgICAgICAgLypfX3N0YXR1cyovCi0JMHgxZjgwLCAgICAgICAgICAgIC8qX19teGNzcl9sbyovCi0JMHhmZmZmZmZmZiwgICAgICAgIC8qX190YWcqLwotCXsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYgfSAvKl9fb3RoZXIqLworICBfX0lOSVRJQUxfTlBYQ1dfXywgLypfX2NvbnRyb2wqLworICAweDAwMDAsICAgICAgICAgICAgLypfX214Y3NyX2hpKi8KKyAgMHgwMDAwLCAgICAgICAgICAgIC8qX19zdGF0dXMqLworICAweDFmODAsICAgICAgICAgICAgLypfX214Y3NyX2xvKi8KKyAgMHhmZmZmZmZmZiwgICAgICAgIC8qX190YWcqLworICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiB9IC8qX19vdGhlciovCiB9OwogCiAjZGVmaW5lIF9fZmxkY3coX19jdykgICAgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSkKICNkZWZpbmUgX19mbGRlbnYoX19lbnYpICAgICAgICAgX19hc20gX192b2xhdGlsZSgiZmxkZW52ICUwIiA6IDogIm0iIChfX2VudikpCi0jZGVmaW5lCV9fZmxkZW52eChfX2VudikJX19hc20gX192b2xhdGlsZSgiZmxkZW52ICUwIiA6IDogIm0iIChfX2VudikgIFwKLQkJCQk6ICJzdCIsICJzdCgxKSIsICJzdCgyKSIsICJzdCgzKSIsICJzdCg0KSIsICAgXAotCQkJCSJzdCg1KSIsICJzdCg2KSIsICJzdCg3KSIpCisjZGVmaW5lIF9fZmxkZW52eChfX2VudikgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUoImZsZGVudiAlMCIgOiA6ICJtIiAoX19lbnYpICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInN0IiwgInN0KDEpIiwgInN0KDIpIiwgInN0KDMpIiwgInN0KDQpIiwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdCg1KSIsICJzdCg2KSIsICJzdCg3KSIpCiAjZGVmaW5lIF9fZm5jbGV4KCkgICAgICAgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUoImZuY2xleCIpCiAjZGVmaW5lIF9fZm5zdGVudihfX2VudikgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUoImZuc3RlbnYgJTAiIDogIj1tIiAoKihfX2VudikpKQogI2RlZmluZSBfX2Zuc3RjdyhfX2N3KSAgICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlKCJmbnN0Y3cgJTAiIDogIj1tIiAoKihfX2N3KSkpCkBAIC02OCwyMiArNzAsMjIgQEAKICNkZWZpbmUgX19IQVNfU1NFKCkgICAgIDEKICNlbHNlCiAjZGVmaW5lIF9fSEFTX1NTRSgpICAgICAoX19oYXNfc3NlID09IF9fU1NFX1lFUyB8fCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgKF9faGFzX3NzZSA9PSBfX1NTRV9VTksgJiYgX190ZXN0X3NzZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIChfX2hhc19zc2UgPT0gX19TU0VfVU5LICYmIF9fdGVzdF9zc2UoKSkpCiAjZW5kaWYKIAogZW51bSBfX3NzZV9zdXBwb3J0IF9faGFzX3NzZSA9CiAjaWZkZWYgX19TU0VfXwotCV9fU1NFX1lFUzsKKyAgX19TU0VfWUVTOwogI2Vsc2UKLQlfX1NTRV9VTks7CisgIF9fU1NFX1VOSzsKICNlbmRpZgogCiAjaWZuZGVmIF9fU1NFX18KLSNkZWZpbmUJZ2V0ZmwoeCkJX19hc20gX192b2xhdGlsZSgicHVzaGZsXG5cdHBvcGwgJTAiIDogIj1tciIgKCooeCkpKQotI2RlZmluZQlzZXRmbCh4KQlfX2FzbSBfX3ZvbGF0aWxlKCJwdXNobCAlMFxuXHRwb3BmbCIgOiA6ICJnIiAoeCkpCi0jZGVmaW5lCWNwdWlkX2R4KHgpCV9fYXNtIF9fdm9sYXRpbGUoInB1c2hsICUlZWJ4XG5cdG1vdmwgJDEsICUlZWF4XG5cdCIgIFwKLQkJCQkJICJjcHVpZFxuXHRwb3BsICUlZWJ4IgkJICAgICAgXAotCQkJCQk6ICI9ZCIgKCooeCkpIDogOiAiZWF4IiwgImVjeCIpCisjZGVmaW5lIGdldGZsKHgpICAgIF9fYXNtIF9fdm9sYXRpbGUoInB1c2hmbFxuXHRwb3BsICUwIiA6ICI9bXIiICgqKHgpKSkKKyNkZWZpbmUgc2V0ZmwoeCkgICAgX19hc20gX192b2xhdGlsZSgicHVzaGwgJTBcblx0cG9wZmwiIDogOiAiZyIgKHgpKQorI2RlZmluZSBjcHVpZF9keCh4KSBfX2FzbSBfX3ZvbGF0aWxlKCJwdXNobCAlJWVieFxuXHRtb3ZsICQxLCAlJWVheFxuXHQiICBcCisgICAgICAgICAgICAgICAgICAgICJjcHVpZFxuXHRwb3BsICUlZWJ4IiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIDogIj1kIiAoKih4KSkgOiA6ICJlYXgiLCAiZWN4IikKIAogLyoKICAqIFRlc3QgZm9yIFNTRSBzdXBwb3J0IG9uIHRoaXMgcHJvY2Vzc29yLiAgV2UgbmVlZCB0byBkbyB0aGlzIGJlY2F1c2UKQEAgLTk0LDI5OCArOTYsMjk4IEBACiBpbnQKIF9fdGVzdF9zc2Uodm9pZCkKIHsKLQlpbnQgZmxhZywgbmZsYWc7Ci0JaW50IGR4X2ZlYXR1cmVzOworICBpbnQgZmxhZywgbmZsYWc7CisgIGludCBkeF9mZWF0dXJlczsKIAotCS8qIEFtIEkgYSA0ODY/ICovCi0JZ2V0ZmwoJmZsYWcpOwotCW5mbGFnID0gZmxhZyBeIDB4MjAwMDAwOwotCXNldGZsKG5mbGFnKTsKLQlnZXRmbCgmbmZsYWcpOwotCWlmIChmbGFnICE9IG5mbGFnKSB7Ci0JCS8qIE5vdCBhIDQ4Niwgc28gQ1BVSUQgc2hvdWxkIHdvcmsuICovCi0JCWNwdWlkX2R4KCZkeF9mZWF0dXJlcyk7Ci0JCWlmIChkeF9mZWF0dXJlcyAmIDB4MjAwMDAwMCkgewotCQkJX19oYXNfc3NlID0gX19TU0VfWUVTOwotCQkJcmV0dXJuICgxKTsKLQkJfQotCX0KLQlfX2hhc19zc2UgPSBfX1NTRV9OTzsKLQlyZXR1cm4gKDApOworICAvKiBBbSBJIGEgNDg2PyAqLworICBnZXRmbCgmZmxhZyk7CisgIG5mbGFnID0gZmxhZyBeIDB4MjAwMDAwOworICBzZXRmbChuZmxhZyk7CisgIGdldGZsKCZuZmxhZyk7CisgIGlmIChmbGFnICE9IG5mbGFnKSB7CisgICAgLyogTm90IGEgNDg2LCBzbyBDUFVJRCBzaG91bGQgd29yay4gKi8KKyAgICBjcHVpZF9keCgmZHhfZmVhdHVyZXMpOworICAgIGlmIChkeF9mZWF0dXJlcyAmIDB4MjAwMDAwMCkgeworICAgICAgX19oYXNfc3NlID0gX19TU0VfWUVTOworICAgICAgcmV0dXJuICgxKTsKKyAgICB9CisgIH0KKyAgX19oYXNfc3NlID0gX19TU0VfTk87CisgIHJldHVybiAoMCk7CiB9CiAjZW5kaWYgLyogX19TU0VfXyAqLwogCiBpbnQKIGZlc2V0ZXhjZXB0ZmxhZyhjb25zdCBmZXhjZXB0X3QgKmZsYWdwLCBpbnQgZXhjZXB0cykKIHsKLQlmZW52X3QgZW52OwotCV9fdWludDMyX3QgbXhjc3I7CisgIGZlbnZfdCBlbnY7CisgIF9fdWludDMyX3QgbXhjc3I7CiAKLQlleGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7Ci0JaWYgKGV4Y2VwdHMpIHsgLyogRG8gbm90aGluZyBpZiBleGNlcHRzIGlzIDAgKi8KLQkJX19mbnN0ZW52KCZlbnYpOwotCQllbnYuX19zdGF0dXMgJj0gfmV4Y2VwdHM7Ci0JCWVudi5fX3N0YXR1cyB8PSAqZmxhZ3AgJiBleGNlcHRzOwotCQlfX2ZuY2xleCgpOwotCQlfX2ZsZGVudihlbnYpOwotCQlpZiAoX19IQVNfU1NFKCkpIHsKLQkJCV9fc3RteGNzcigmbXhjc3IpOwotCQkJbXhjc3IgJj0gfmV4Y2VwdHM7Ci0JCQlteGNzciB8PSAqZmxhZ3AgJiBleGNlcHRzOwotCQkJX19sZG14Y3NyKG14Y3NyKTsKLQkJfQotCX0KKyAgZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOworICBpZiAoZXhjZXB0cykgeyAvKiBEbyBub3RoaW5nIGlmIGV4Y2VwdHMgaXMgMCAqLworICAgIF9fZm5zdGVudigmZW52KTsKKyAgICBlbnYuX19zdGF0dXMgJj0gfmV4Y2VwdHM7CisgICAgZW52Ll9fc3RhdHVzIHw9ICpmbGFncCAmIGV4Y2VwdHM7CisgICAgX19mbmNsZXgoKTsKKyAgICBfX2ZsZGVudihlbnYpOworICAgIGlmIChfX0hBU19TU0UoKSkgeworICAgICAgX19zdG14Y3NyKCZteGNzcik7CisgICAgICBteGNzciAmPSB+ZXhjZXB0czsKKyAgICAgIG14Y3NyIHw9ICpmbGFncCAmIGV4Y2VwdHM7CisgICAgICBfX2xkbXhjc3IobXhjc3IpOworICAgIH0KKyAgfQogCi0JcmV0dXJuICgwKTsKKyAgcmV0dXJuICgwKTsKIH0KIAogaW50CiBmZXJhaXNlZXhjZXB0KGludCBleGNlcHRzKQogewotCWZleGNlcHRfdCBleCA9IGV4Y2VwdHM7CisgIGZleGNlcHRfdCBleCA9IGV4Y2VwdHM7CiAKLQlmZXNldGV4Y2VwdGZsYWcoJmV4LCBleGNlcHRzKTsKLQlfX2Z3YWl0KCk7Ci0JcmV0dXJuICgwKTsKKyAgZmVzZXRleGNlcHRmbGFnKCZleCwgZXhjZXB0cyk7CisgIF9fZndhaXQoKTsKKyAgcmV0dXJuICgwKTsKIH0KIAogaW50CiBmZWdldGVudihmZW52X3QgKmVudnApCiB7Ci0JX191aW50MzJfdCBteGNzcjsKKyAgX191aW50MzJfdCBteGNzcjsKIAotCV9fZm5zdGVudihlbnZwKTsKLQkvKgotCSAqIGZuc3RlbnYgbWFza3MgYWxsIGV4Y2VwdGlvbnMsIHNvIHdlIG5lZWQgdG8gcmVzdG9yZQotCSAqIHRoZSBvbGQgY29udHJvbCB3b3JkIHRvIGF2b2lkIHRoaXMgc2lkZSBlZmZlY3QuCi0JICovCi0JX19mbGRjdyhlbnZwLT5fX2NvbnRyb2wpOwotCWlmIChfX0hBU19TU0UoKSkgewotCQlfX3N0bXhjc3IoJm14Y3NyKTsKLQkJZW52cC0+X19teGNzcl9oaSA9IG14Y3NyID4+IDE2OwotCQllbnZwLT5fX214Y3NyX2xvID0gbXhjc3IgJiAweGZmZmY7Ci0JfQotCXJldHVybiAoMCk7CisgIF9fZm5zdGVudihlbnZwKTsKKyAgLyoKKyAgICogZm5zdGVudiBtYXNrcyBhbGwgZXhjZXB0aW9ucywgc28gd2UgbmVlZCB0byByZXN0b3JlCisgICAqIHRoZSBvbGQgY29udHJvbCB3b3JkIHRvIGF2b2lkIHRoaXMgc2lkZSBlZmZlY3QuCisgICAqLworICBfX2ZsZGN3KGVudnAtPl9fY29udHJvbCk7CisgIGlmIChfX0hBU19TU0UoKSkgeworICAgIF9fc3RteGNzcigmbXhjc3IpOworICAgIGVudnAtPl9fbXhjc3JfaGkgPSBteGNzciA+PiAxNjsKKyAgICBlbnZwLT5fX214Y3NyX2xvID0gbXhjc3IgJiAweGZmZmY7CisgIH0KKyAgcmV0dXJuICgwKTsKIH0KIAogaW50CiBmZWhvbGRleGNlcHQoZmVudl90ICplbnZwKQogewotCV9fdWludDMyX3QgbXhjc3I7Ci0JZmVudl90IGVudjsKKyAgX191aW50MzJfdCBteGNzcjsKKyAgZmVudl90IGVudjsKIAotCV9fZm5zdGVudigmZW52KTsKLQkqZW52cCA9IGVudjsKLQllbnYuX19zdGF0dXMgJj0gfkZFX0FMTF9FWENFUFQ7Ci0JZW52Ll9fY29udHJvbCB8PSBGRV9BTExfRVhDRVBUOwotCV9fZm5jbGV4KCk7Ci0JX19mbGRlbnYoZW52KTsKLQlpZiAoX19IQVNfU1NFKCkpIHsKLQkJX19zdG14Y3NyKCZteGNzcik7Ci0JCWVudnAtPl9fbXhjc3JfaGkgPSBteGNzciA+PiAxNjsKLQkJZW52cC0+X19teGNzcl9sbyA9IG14Y3NyICYgMHhmZmZmOwotCQlteGNzciAmPSB+RkVfQUxMX0VYQ0VQVDsKLQkJbXhjc3IgfD0gRkVfQUxMX0VYQ0VQVCA8PCBfU1NFX0VNQVNLX1NISUZUOwotCQlfX2xkbXhjc3IobXhjc3IpOwotCX0KLQlyZXR1cm4gKDApOworICBfX2Zuc3RlbnYoJmVudik7CisgICplbnZwID0gZW52OworICBlbnYuX19zdGF0dXMgJj0gfkZFX0FMTF9FWENFUFQ7CisgIGVudi5fX2NvbnRyb2wgfD0gRkVfQUxMX0VYQ0VQVDsKKyAgX19mbmNsZXgoKTsKKyAgX19mbGRlbnYoZW52KTsKKyAgaWYgKF9fSEFTX1NTRSgpKSB7CisgICAgX19zdG14Y3NyKCZteGNzcik7CisgICAgZW52cC0+X19teGNzcl9oaSA9IG14Y3NyID4+IDE2OworICAgIGVudnAtPl9fbXhjc3JfbG8gPSBteGNzciAmIDB4ZmZmZjsKKyAgICBteGNzciAmPSB+RkVfQUxMX0VYQ0VQVDsKKyAgICBteGNzciB8PSBGRV9BTExfRVhDRVBUIDw8IF9TU0VfRU1BU0tfU0hJRlQ7CisgICAgX19sZG14Y3NyKG14Y3NyKTsKKyAgfQorICByZXR1cm4gKDApOwogfQogCiBpbnQKIGZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCAqZW52cCkKIHsKLQlfX3VpbnQzMl90IG14Y3NyOwotCV9fdWludDE2X3Qgc3RhdHVzOworICBfX3VpbnQzMl90IG14Y3NyOworICBfX3VpbnQxNl90IHN0YXR1czsKIAotCV9fZm5zdHN3KCZzdGF0dXMpOwotCWlmIChfX0hBU19TU0UoKSkgewotCQlfX3N0bXhjc3IoJm14Y3NyKTsKLQl9IGVsc2UgewotCQlteGNzciA9IDA7Ci0JfQotCWZlc2V0ZW52KGVudnApOwotCWZlcmFpc2VleGNlcHQoKG14Y3NyIHwgc3RhdHVzKSAmIEZFX0FMTF9FWENFUFQpOwotCXJldHVybiAoMCk7CisgIF9fZm5zdHN3KCZzdGF0dXMpOworICBpZiAoX19IQVNfU1NFKCkpIHsKKyAgICBfX3N0bXhjc3IoJm14Y3NyKTsKKyAgfSBlbHNlIHsKKyAgICBteGNzciA9IDA7CisgIH0KKyAgZmVzZXRlbnYoZW52cCk7CisgIGZlcmFpc2VleGNlcHQoKG14Y3NyIHwgc3RhdHVzKSAmIEZFX0FMTF9FWENFUFQpOworICByZXR1cm4gKDApOwogfQogCiBpbnQKIGZlZW5hYmxlZXhjZXB0KGludCBtYXNrKQogewotCV9fdWludDMyX3QgbXhjc3I7Ci0JX191aW50MTZfdCBjb250cm9sLCBvbWFzazsKKyAgX191aW50MzJfdCBteGNzcjsKKyAgX191aW50MTZfdCBjb250cm9sLCBvbWFzazsKIAotCW1hc2sgJj0gRkVfQUxMX0VYQ0VQVDsKLQlfX2Zuc3RjdygmY29udHJvbCk7Ci0JaWYgKF9fSEFTX1NTRSgpKSB7Ci0JCV9fc3RteGNzcigmbXhjc3IpOwotCX0gZWxzZSB7Ci0JCW14Y3NyID0gMDsKLQl9Ci0Jb21hc2sgPSB+KGNvbnRyb2wgfCBteGNzciA+PiBfU1NFX0VNQVNLX1NISUZUKSAmIEZFX0FMTF9FWENFUFQ7Ci0JaWYgKG1hc2spIHsKLQkJY29udHJvbCAmPSB+bWFzazsKLQkJX19mbGRjdyhjb250cm9sKTsKLQkJaWYgKF9fSEFTX1NTRSgpKSB7Ci0JCQlteGNzciAmPSB+KG1hc2sgPDwgX1NTRV9FTUFTS19TSElGVCk7Ci0JCQlfX2xkbXhjc3IobXhjc3IpOwotCQl9Ci0JfQotCXJldHVybiAob21hc2spOworICBtYXNrICY9IEZFX0FMTF9FWENFUFQ7CisgIF9fZm5zdGN3KCZjb250cm9sKTsKKyAgaWYgKF9fSEFTX1NTRSgpKSB7CisgICAgX19zdG14Y3NyKCZteGNzcik7CisgIH0gZWxzZSB7CisgICAgbXhjc3IgPSAwOworICB9CisgIG9tYXNrID0gfihjb250cm9sIHwgbXhjc3IgPj4gX1NTRV9FTUFTS19TSElGVCkgJiBGRV9BTExfRVhDRVBUOworICBpZiAobWFzaykgeworICAgIGNvbnRyb2wgJj0gfm1hc2s7CisgICAgX19mbGRjdyhjb250cm9sKTsKKyAgICBpZiAoX19IQVNfU1NFKCkpIHsKKyAgICAgIG14Y3NyICY9IH4obWFzayA8PCBfU1NFX0VNQVNLX1NISUZUKTsKKyAgICAgIF9fbGRteGNzcihteGNzcik7CisgICAgfQorICB9CisgIHJldHVybiAob21hc2spOwogfQogCiBpbnQKIGZlZGlzYWJsZWV4Y2VwdChpbnQgbWFzaykKIHsKLQlfX3VpbnQzMl90IG14Y3NyOwotCV9fdWludDE2X3QgY29udHJvbCwgb21hc2s7CisgIF9fdWludDMyX3QgbXhjc3I7CisgIF9fdWludDE2X3QgY29udHJvbCwgb21hc2s7CiAKLQltYXNrICY9IEZFX0FMTF9FWENFUFQ7Ci0JX19mbnN0Y3coJmNvbnRyb2wpOwotCWlmIChfX0hBU19TU0UoKSkgewotCQlfX3N0bXhjc3IoJm14Y3NyKTsKLQl9IGVsc2UgewotCQlteGNzciA9IDA7Ci0JfQotCW9tYXNrID0gfihjb250cm9sIHwgbXhjc3IgPj4gX1NTRV9FTUFTS19TSElGVCkgJiBGRV9BTExfRVhDRVBUOwotCWlmIChtYXNrKSB7Ci0JCWNvbnRyb2wgfD0gbWFzazsKLQkJX19mbGRjdyhjb250cm9sKTsKLQkJaWYgKF9fSEFTX1NTRSgpKSB7Ci0JCQlteGNzciB8PSBtYXNrIDw8IF9TU0VfRU1BU0tfU0hJRlQ7Ci0JCQlfX2xkbXhjc3IobXhjc3IpOwotCQl9Ci0JfQotCXJldHVybiAob21hc2spOworICBtYXNrICY9IEZFX0FMTF9FWENFUFQ7CisgIF9fZm5zdGN3KCZjb250cm9sKTsKKyAgaWYgKF9fSEFTX1NTRSgpKSB7CisgICAgX19zdG14Y3NyKCZteGNzcik7CisgIH0gZWxzZSB7CisgICAgbXhjc3IgPSAwOworICB9CisgIG9tYXNrID0gfihjb250cm9sIHwgbXhjc3IgPj4gX1NTRV9FTUFTS19TSElGVCkgJiBGRV9BTExfRVhDRVBUOworICBpZiAobWFzaykgeworICAgIGNvbnRyb2wgfD0gbWFzazsKKyAgICBfX2ZsZGN3KGNvbnRyb2wpOworICAgIGlmIChfX0hBU19TU0UoKSkgeworICAgICAgbXhjc3IgfD0gbWFzayA8PCBfU1NFX0VNQVNLX1NISUZUOworICAgICAgX19sZG14Y3NyKG14Y3NyKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIChvbWFzayk7CiB9CiAKIGludAogZmVjbGVhcmV4Y2VwdChpbnQgZXhjZXB0cykKIHsKLQlmZW52X3QgZW52OwotCV9fdWludDMyX3QgbXhjc3I7CisgIGZlbnZfdCBlbnY7CisgIF9fdWludDMyX3QgbXhjc3I7CiAKLQlleGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7Ci0JaWYgKGV4Y2VwdHMpIHsgLyogRG8gbm90aGluZyBpZiBleGNlcHRzIGlzIDAgKi8KLQkJX19mbnN0ZW52KCZlbnYpOwotCQllbnYuX19zdGF0dXMgJj0gfmV4Y2VwdHM7Ci0JCV9fZm5jbGV4KCk7Ci0JCV9fZmxkZW52KGVudik7Ci0JCWlmIChfX0hBU19TU0UoKSkgewotCQkJX19zdG14Y3NyKCZteGNzcik7Ci0JCQlteGNzciAmPSB+ZXhjZXB0czsKLQkJCV9fbGRteGNzcihteGNzcik7Ci0JCX0KLQl9Ci0JcmV0dXJuICgwKTsKKyAgZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOworICBpZiAoZXhjZXB0cykgeyAvKiBEbyBub3RoaW5nIGlmIGV4Y2VwdHMgaXMgMCAqLworICAgIF9fZm5zdGVudigmZW52KTsKKyAgICBlbnYuX19zdGF0dXMgJj0gfmV4Y2VwdHM7CisgICAgX19mbmNsZXgoKTsKKyAgICBfX2ZsZGVudihlbnYpOworICAgIGlmIChfX0hBU19TU0UoKSkgeworICAgICAgX19zdG14Y3NyKCZteGNzcik7CisgICAgICBteGNzciAmPSB+ZXhjZXB0czsKKyAgICAgIF9fbGRteGNzcihteGNzcik7CisgICAgfQorICB9CisgIHJldHVybiAoMCk7CiB9CiAKIGludAogZmVnZXRleGNlcHRmbGFnKGZleGNlcHRfdCAqZmxhZ3AsIGludCBleGNlcHRzKQogewotCV9fdWludDMyX3QgbXhjc3I7Ci0JX191aW50MTZfdCBzdGF0dXM7CisgIF9fdWludDMyX3QgbXhjc3I7CisgIF9fdWludDE2X3Qgc3RhdHVzOwogCi0JZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOwotCV9fZm5zdHN3KCZzdGF0dXMpOwotCWlmIChfX0hBU19TU0UoKSkgewotCQlfX3N0bXhjc3IoJm14Y3NyKTsKLQl9IGVsc2UgewotCQlteGNzciA9IDA7Ci0JfQotCSpmbGFncCA9IChzdGF0dXMgfCBteGNzcikgJiBleGNlcHRzOwotCXJldHVybiAoMCk7CisgIGV4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKKyAgX19mbnN0c3coJnN0YXR1cyk7CisgIGlmIChfX0hBU19TU0UoKSkgeworICAgIF9fc3RteGNzcigmbXhjc3IpOworICB9IGVsc2UgeworICAgIG14Y3NyID0gMDsKKyAgfQorICAqZmxhZ3AgPSAoc3RhdHVzIHwgbXhjc3IpICYgZXhjZXB0czsKKyAgcmV0dXJuICgwKTsKIH0KIAogaW50CiBmZXRlc3RleGNlcHQoaW50IGV4Y2VwdHMpCiB7Ci0JX191aW50MzJfdCBteGNzcjsKLQlfX3VpbnQxNl90IHN0YXR1czsKKyAgX191aW50MzJfdCBteGNzcjsKKyAgX191aW50MTZfdCBzdGF0dXM7CiAKLQlleGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7Ci0JaWYgKGV4Y2VwdHMpIHsgLyogRG8gbm90aGluZyBpZiBleGNlcHRzIGlzIDAgKi8KLQkJX19mbnN0c3coJnN0YXR1cyk7Ci0JCWlmIChfX0hBU19TU0UoKSkgewotCQkJX19zdG14Y3NyKCZteGNzcik7Ci0JCX0gZWxzZSB7Ci0JCQlteGNzciA9IDA7Ci0JCX0KLQkJcmV0dXJuICgoc3RhdHVzIHwgbXhjc3IpICYgZXhjZXB0cyk7Ci0JfQotCXJldHVybiAoMCk7CisgIGV4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKKyAgaWYgKGV4Y2VwdHMpIHsgLyogRG8gbm90aGluZyBpZiBleGNlcHRzIGlzIDAgKi8KKyAgICBfX2Zuc3Rzdygmc3RhdHVzKTsKKyAgICBpZiAoX19IQVNfU1NFKCkpIHsKKyAgICAgIF9fc3RteGNzcigmbXhjc3IpOworICAgIH0gZWxzZSB7CisgICAgICBteGNzciA9IDA7CisgICAgfQorICAgIHJldHVybiAoKHN0YXR1cyB8IG14Y3NyKSAmIGV4Y2VwdHMpOworICB9CisgIHJldHVybiAoMCk7CiB9CiAKIGludAogZmVnZXRyb3VuZCh2b2lkKQogewotCV9fdWludDE2X3QgY29udHJvbDsKKyAgX191aW50MTZfdCBjb250cm9sOwogCi0JLyoKLQkgKiBXZSBhc3N1bWUgdGhhdCB0aGUgeDg3IGFuZCB0aGUgU1NFIHVuaXQgYWdyZWUgb24gdGhlCi0JICogcm91bmRpbmcgbW9kZS4gIFJlYWRpbmcgdGhlIGNvbnRyb2wgd29yZCBvbiB0aGUgeDg3IHR1cm5zCi0JICogb3V0IHRvIGJlIGFib3V0IDUgdGltZXMgZmFzdGVyIHRoYW4gcmVhZGluZyBpdCBvbiB0aGUgU1NFCi0JICogdW5pdCBvbiBhbiBPcHRlcm9uIDI0NC4KLQkgKi8KLQlfX2Zuc3RjdygmY29udHJvbCk7Ci0JcmV0dXJuIChjb250cm9sICYgX1JPVU5EX01BU0spOworICAvKgorICAgKiBXZSBhc3N1bWUgdGhhdCB0aGUgeDg3IGFuZCB0aGUgU1NFIHVuaXQgYWdyZWUgb24gdGhlCisgICAqIHJvdW5kaW5nIG1vZGUuICBSZWFkaW5nIHRoZSBjb250cm9sIHdvcmQgb24gdGhlIHg4NyB0dXJucworICAgKiBvdXQgdG8gYmUgYWJvdXQgNSB0aW1lcyBmYXN0ZXIgdGhhbiByZWFkaW5nIGl0IG9uIHRoZSBTU0UKKyAgICogdW5pdCBvbiBhbiBPcHRlcm9uIDI0NC4KKyAgICovCisgIF9fZm5zdGN3KCZjb250cm9sKTsKKyAgcmV0dXJuIChjb250cm9sICYgUk9VTkRfTUFTSyk7CiB9CiAKIGludAogZmVzZXRyb3VuZChpbnQgcm91bmQpCiB7Ci0JX191aW50MzJfdCBteGNzcjsKLQlfX3VpbnQxNl90IGNvbnRyb2w7CisgIF9fdWludDMyX3QgbXhjc3I7CisgIF9fdWludDE2X3QgY29udHJvbDsKIAotCWlmIChyb3VuZCAmIH5fUk9VTkRfTUFTSykgewotCQlyZXR1cm4gKC0xKTsKLQl9IGVsc2UgewotCQlfX2Zuc3RjdygmY29udHJvbCk7Ci0JCWNvbnRyb2wgJj0gfl9ST1VORF9NQVNLOwotCQljb250cm9sIHw9IHJvdW5kOwotCQlfX2ZsZGN3KGNvbnRyb2wpOwotCQlpZiAoX19IQVNfU1NFKCkpIHsKLQkJCV9fc3RteGNzcigmbXhjc3IpOwotCQkJbXhjc3IgJj0gfihfUk9VTkRfTUFTSyA8PCBfU1NFX1JPVU5EX1NISUZUKTsKLQkJCW14Y3NyIHw9IHJvdW5kIDw8IF9TU0VfUk9VTkRfU0hJRlQ7Ci0JCQlfX2xkbXhjc3IobXhjc3IpOwotCQl9Ci0JCXJldHVybiAoMCk7Ci0JfQorICBpZiAocm91bmQgJiB+Uk9VTkRfTUFTSykgeworICAgIHJldHVybiAoLTEpOworICB9IGVsc2UgeworICAgIF9fZm5zdGN3KCZjb250cm9sKTsKKyAgICBjb250cm9sICY9IH5ST1VORF9NQVNLOworICAgIGNvbnRyb2wgfD0gcm91bmQ7CisgICAgX19mbGRjdyhjb250cm9sKTsKKyAgICBpZiAoX19IQVNfU1NFKCkpIHsKKyAgICAgIF9fc3RteGNzcigmbXhjc3IpOworICAgICAgbXhjc3IgJj0gfihST1VORF9NQVNLIDw8IF9TU0VfUk9VTkRfU0hJRlQpOworICAgICAgbXhjc3IgfD0gcm91bmQgPDwgX1NTRV9ST1VORF9TSElGVDsKKyAgICAgIF9fbGRteGNzcihteGNzcik7CisgICAgfQorICAgIHJldHVybiAoMCk7CisgIH0KIH0KIAogaW50CiBmZXNldGVudihjb25zdCBmZW52X3QgKmVudnApCiB7Ci0JZmVudl90IGVudiA9ICplbnZwOwotCV9fdWludDMyX3QgbXhjc3I7CisgIGZlbnZfdCBlbnYgPSAqZW52cDsKKyAgX191aW50MzJfdCBteGNzcjsKIAotCW14Y3NyID0gKGVudi5fX214Y3NyX2hpIDw8IDE2KSB8IChlbnYuX19teGNzcl9sbyk7Ci0JZW52Ll9fbXhjc3JfaGkgPSAweGZmZmY7Ci0JZW52Ll9fbXhjc3JfbG8gPSAweGZmZmY7Ci0JLyoKLQkgKiBYWFggVXNpbmcgZmxkZW52eCgpIGluc3RlYWQgb2YgZmxkZW52KCkgdGVsbHMgdGhlIGNvbXBpbGVyIHRoYXQgdGhpcwotCSAqIGluc3RydWN0aW9uIGNsb2JiZXJzIHRoZSBpMzg3IHJlZ2lzdGVyIHN0YWNrLiAgVGhpcyBoYXBwZW5zIGJlY2F1c2UKLQkgKiB3ZSByZXN0b3JlIHRoZSB0YWcgd29yZCBmcm9tIHRoZSBzYXZlZCBlbnZpcm9ubWVudC4gIE5vcm1hbGx5LCB0aGlzCi0JICogd291bGQgaGFwcGVuIGFueXdheSBhbmQgd2Ugd291bGRuJ3QgY2FyZSwgYmVjYXVzZSB0aGUgQUJJIGFsbG93cwotCSAqIGZ1bmN0aW9uIGNhbGxzIHRvIGNsb2JiZXIgdGhlIGkzODcgcmVncy4gIEhvd2V2ZXIsIGZlc2V0ZW52KCkgaXMKLQkgKiBpbmxpbmVkLCBzbyB3ZSBuZWVkIHRvIGJlIG1vcmUgY2FyZWZ1bC4KLQkgKi8KLQlfX2ZsZGVudngoZW52KTsKLQlpZiAoX19IQVNfU1NFKCkpIHsKLQkJX19sZG14Y3NyKG14Y3NyKTsKLQl9Ci0JcmV0dXJuICgwKTsKKyAgbXhjc3IgPSAoZW52Ll9fbXhjc3JfaGkgPDwgMTYpIHwgKGVudi5fX214Y3NyX2xvKTsKKyAgZW52Ll9fbXhjc3JfaGkgPSAweGZmZmY7CisgIGVudi5fX214Y3NyX2xvID0gMHhmZmZmOworICAvKgorICAgKiBYWFggVXNpbmcgZmxkZW52eCgpIGluc3RlYWQgb2YgZmxkZW52KCkgdGVsbHMgdGhlIGNvbXBpbGVyIHRoYXQgdGhpcworICAgKiBpbnN0cnVjdGlvbiBjbG9iYmVycyB0aGUgaTM4NyByZWdpc3RlciBzdGFjay4gIFRoaXMgaGFwcGVucyBiZWNhdXNlCisgICAqIHdlIHJlc3RvcmUgdGhlIHRhZyB3b3JkIGZyb20gdGhlIHNhdmVkIGVudmlyb25tZW50LiAgTm9ybWFsbHksIHRoaXMKKyAgICogd291bGQgaGFwcGVuIGFueXdheSBhbmQgd2Ugd291bGRuJ3QgY2FyZSwgYmVjYXVzZSB0aGUgQUJJIGFsbG93cworICAgKiBmdW5jdGlvbiBjYWxscyB0byBjbG9iYmVyIHRoZSBpMzg3IHJlZ3MuICBIb3dldmVyLCBmZXNldGVudigpIGlzCisgICAqIGlubGluZWQsIHNvIHdlIG5lZWQgdG8gYmUgbW9yZSBjYXJlZnVsLgorICAgKi8KKyAgX19mbGRlbnZ4KGVudik7CisgIGlmIChfX0hBU19TU0UoKSkgeworICAgIF9fbGRteGNzcihteGNzcik7CisgIH0KKyAgcmV0dXJuICgwKTsKIH0KIAogaW50CiBmZWdldGV4Y2VwdCh2b2lkKQogewotCV9fdWludDE2X3QgY29udHJvbDsKKyAgX191aW50MTZfdCBjb250cm9sOwogCi0JLyoKLQkgKiBXZSBhc3N1bWUgdGhhdCB0aGUgbWFza3MgZm9yIHRoZSB4ODcgYW5kIHRoZSBTU0UgdW5pdCBhcmUKLQkgKiB0aGUgc2FtZS4KLQkgKi8KLQlfX2Zuc3RjdygmY29udHJvbCk7Ci0JcmV0dXJuICh+Y29udHJvbCAmIEZFX0FMTF9FWENFUFQpOworICAvKgorICAgKiBXZSBhc3N1bWUgdGhhdCB0aGUgbWFza3MgZm9yIHRoZSB4ODcgYW5kIHRoZSBTU0UgdW5pdCBhcmUKKyAgICogdGhlIHNhbWUuCisgICAqLworICBfX2Zuc3RjdygmY29udHJvbCk7CisgIHJldHVybiAofmNvbnRyb2wgJiBGRV9BTExfRVhDRVBUKTsKIH0KZGlmZiAtLWdpdCBhL2xpYm0vaW5jbHVkZS9hbWQ2NC9mZW52LmggYi9saWJtL2luY2x1ZGUvYW1kNjQvZmVudi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGM0MjE1Li4wMDAwMDAwCi0tLSBhL2xpYm0vaW5jbHVkZS9hbWQ2NC9mZW52LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXMgKGF0KSBGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZglfQU1ENjRfRkVOVl9IXwotI2RlZmluZQlfQU1ENjRfRkVOVl9IXwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLS8qCi0gKiBUaGlzIGZpbGUgY29tYmluZXMgdGhlIE9wZW5CU0QgaW5jbHVkZS9mZW52LmggYW5kIG1hY2hpbmUvZmVudi5oIHRvIGZpdAotICogdGhlIHN0eWxlIG9mIHRoZSBvdGhlciBhcmNoaXRlY3R1cmVzICh3aGVyZSB3ZSBjb3VsZG4ndCBqdXN0IHRha2UgYW4KLSAqIHVwc3RyZWFtIGZlbnYuaCBhbmQgaGFkIHRvIHdyaXRlIG91ciBvd24pLgotICovCi0KLV9fQkVHSU5fREVDTFMKLQotLyoKLSAqIEVhY2ggc3ltYm9sIHJlcHJlc2VudGluZyBhIGZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbiBleHBhbmRzIHRvIGFuIGludGVnZXIKLSAqIGNvbnN0YW50IGV4cHJlc3Npb24gd2l0aCB2YWx1ZXMsIHN1Y2ggdGhhdCBiaXR3aXNlLWluY2x1c2l2ZSBPUnMgb2YgX2FsbAotICogY29tYmluYXRpb25zXyBvZiB0aGUgY29uc3RhbnRzIHJlc3VsdCBpbiBkaXN0aW5jdCB2YWx1ZXMuCi0gKgotICogV2UgdXNlIHN1Y2ggdmFsdWVzIHRoYXQgYWxsb3cgZGlyZWN0IGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBGUFUvU1NFIHJlZ2lzdGVycy4KLSAqLwotI2RlZmluZQlGRV9JTlZBTElECQkweDAxCi0jZGVmaW5lCUZFX0RFTk9STUFMCQkweDAyCi0jZGVmaW5lCUZFX0RJVkJZWkVSTwkJMHgwNAotI2RlZmluZQlGRV9PVkVSRkxPVwkJMHgwOAotI2RlZmluZQlGRV9VTkRFUkZMT1cJCTB4MTAKLSNkZWZpbmUJRkVfSU5FWEFDVAkJMHgyMAotCi0vKgotICogVGhlIGZvbGxvd2luZyBzeW1ib2wgaXMgc2ltcGx5IHRoZSBiaXR3aXNlLWluY2x1c2l2ZSBPUiBvZiBhbGwgZmxvYXRpbmctcG9pbnQKLSAqIGV4Y2VwdGlvbiBjb25zdGFudHMgZGVmaW5lZCBhYm92ZS4KLSAqLwotI2RlZmluZQlGRV9BTExfRVhDRVBUCQkoRkVfSU5WQUxJRCB8IEZFX0RFTk9STUFMIHwgRkVfRElWQllaRVJPIHwgXAotCQkJCSBGRV9PVkVSRkxPVyB8IEZFX1VOREVSRkxPVyB8IEZFX0lORVhBQ1QpCi0jZGVmaW5lCV9TU0VfTUFTS19TSElGVAkJNwotCi0vKgotICogRWFjaCBzeW1ib2wgcmVwcmVzZW50aW5nIHRoZSByb3VuZGluZyBkaXJlY3Rpb24sIGV4cGFuZHMgdG8gYW4gaW50ZWdlcgotICogY29uc3RhbnQgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBkaXN0aW5jdCBub24tbmVnYXRpdmUgdmFsdWUuCi0gKgotICogV2UgdXNlIHN1Y2ggdmFsdWVzIHRoYXQgYWxsb3cgZGlyZWN0IGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBGUFUvU1NFIHJlZ2lzdGVycy4KLSAqLwotI2RlZmluZQlGRV9UT05FQVJFU1QJCTB4MDAwCi0jZGVmaW5lCUZFX0RPV05XQVJECQkweDQwMAotI2RlZmluZQlGRV9VUFdBUkQJCTB4ODAwCi0jZGVmaW5lCUZFX1RPV0FSRFpFUk8JCTB4YzAwCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIHN5bWJvbCBpcyBzaW1wbHkgdGhlIGJpdHdpc2UtaW5jbHVzaXZlIE9SIG9mIGFsbCBmbG9hdGluZy1wb2ludAotICogcm91bmRpbmcgZGlyZWN0aW9uIGNvbnN0YW50cyBkZWZpbmVkIGFib3ZlLgotICovCi0jZGVmaW5lCV9YODdfUk9VTkRfTUFTSwkJKEZFX1RPTkVBUkVTVCB8IEZFX0RPV05XQVJEIHwgRkVfVVBXQVJEIHwgXAotCQkJCSBGRV9UT1dBUkRaRVJPKQotI2RlZmluZQlfU1NFX1JPVU5EX1NISUZUCTMKLQotLyoKLSAqIGZlbnZfdCByZXByZXNlbnRzIHRoZSBlbnRpcmUgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQuCi0gKi8KLXR5cGVkZWYJc3RydWN0IHsKLQlzdHJ1Y3QgewotCQl1bnNpZ25lZCBpbnQgX19jb250cm9sOwkJLyogQ29udHJvbCB3b3JkIHJlZ2lzdGVyICovCi0JCXVuc2lnbmVkIGludCBfX3N0YXR1czsJCS8qIFN0YXR1cyB3b3JkIHJlZ2lzdGVyICovCi0JCXVuc2lnbmVkIGludCBfX3RhZzsJCS8qIFRhZyB3b3JkIHJlZ2lzdGVyICovCi0JCXVuc2lnbmVkIGludCBfX290aGVyc1s0XTsJLyogRUlQLCBQb2ludGVyIFNlbGVjdG9yLCBldGMgKi8KLQl9IF9feDg3OwotCXVuc2lnbmVkIGludCBfX214Y3NyOwkJCS8qIENvbnRyb2wsIHN0YXR1cyByZWdpc3RlciAqLwotfSBmZW52X3Q7Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IHJlcHJlc2VudHMgdGhlIGRlZmF1bHQgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQKLSAqICh0aGF0IGlzLCB0aGUgb25lIGluc3RhbGxlZCBhdCBwcm9ncmFtIHN0YXJ0dXApIGFuZCBoYXMgdHlwZSBwb2ludGVyIHRvCi0gKiBjb25zdC1xdWFsaWZpZWQgZmVudl90LgotICoKLSAqIEl0IGNhbiBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRoZSA8ZmVudi5oPiBoZWFkZXIKLSAqIHRoYXQgbWFuYWdlIHRoZSBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCwgbmFtZWx5IGZlc2V0ZW52KCkgYW5kCi0gKiBmZXVwZGF0ZWVudigpLgotICovCi1leHRlcm4JZmVudl90CQkJX19mZV9kZmxfZW52OwotI2RlZmluZQlGRV9ERkxfRU5WCQkoKGNvbnN0IGZlbnZfdCAqKSZfX2ZlX2RmbF9lbnYpCi0KLS8qCi0gKiBmZXhjZXB0X3QgcmVwcmVzZW50cyB0aGUgZmxvYXRpbmctcG9pbnQgc3RhdHVzIGZsYWdzIGNvbGxlY3RpdmVseSwgaW5jbHVkaW5nCi0gKiBhbnkgc3RhdHVzIHRoZSBpbXBsZW1lbnRhdGlvbiBhc3NvY2lhdGVzIHdpdGggdGhlIGZsYWdzLgotICoKLSAqIEEgZmxvYXRpbmctcG9pbnQgc3RhdHVzIGZsYWcgaXMgYSBzeXN0ZW0gdmFyaWFibGUgd2hvc2UgdmFsdWUgaXMgc2V0IChidXQKLSAqIG5ldmVyIGNsZWFyZWQpIHdoZW4gYSBmbG9hdGluZy1wb2ludCBleGNlcHRpb24gaXMgcmFpc2VkLCB3aGljaCBvY2N1cnMgYXMgYQotICogc2lkZSBlZmZlY3Qgb2YgZXhjZXB0aW9uYWwgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyB0byBwcm92aWRlIGF1eGlsaWFyeQotICogaW5mb3JtYXRpb24uCi0gKgotICogQSBmbG9hdGluZy1wb2ludCBjb250cm9sIG1vZGUgaXMgYSBzeXN0ZW0gdmFyaWFibGUgd2hvc2UgdmFsdWUgbWF5IGJlIHNldCBieQotICogdGhlIHVzZXIgdG8gYWZmZWN0IHRoZSBzdWJzZXF1ZW50IGJlaGF2aW9yIG9mIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMuCi0gKi8KLXR5cGVkZWYJdW5zaWduZWQgaW50CQlmZXhjZXB0X3Q7Ci0KLS8qIEM5OSBmbG9hdGluZy1wb2ludCBleGNlcHRpb24gZnVuY3Rpb25zICovCi1pbnQgZmVjbGVhcmV4Y2VwdChpbnQgZXhjZXB0cyk7Ci1pbnQgZmVnZXRleGNlcHRmbGFnKGZleGNlcHRfdCAqZmxhZ3AsIGludCBleGNlcHRzKTsKLWludCBmZXNldGV4Y2VwdGZsYWcoY29uc3QgZmV4Y2VwdF90ICpmbGFncCwgaW50IGV4Y2VwdHMpOwotLyogZmVyYWlzZWV4Y2VwdCBkb2VzIG5vdCBzZXQgdGhlIGluZXhhY3QgZmxhZyBvbiBvdmVyZmxvdy91bmRlcmZsb3cgKi8KLWludCBmZXJhaXNlZXhjZXB0KGludCBleGNlcHRzKTsKLWludCBmZXRlc3RleGNlcHQoaW50IGV4Y2VwdHMpOwotCi0vKiBDOTkgcm91bmRpbmcgY29udHJvbCBmdW5jdGlvbnMgKi8KLWludCBmZWdldHJvdW5kKHZvaWQpOwotaW50IGZlc2V0cm91bmQoaW50IHJvdW5kKTsKLQotLyogQzk5IGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50IGZ1bmN0aW9ucyAqLwotaW50IGZlZ2V0ZW52KGZlbnZfdCAqX19lbnZwKTsKLWludCBmZWhvbGRleGNlcHQoZmVudl90ICpfX2VudnApOwotaW50IGZlc2V0ZW52KGNvbnN0IGZlbnZfdCAqZW52cCk7Ci1pbnQgZmV1cGRhdGVlbnYoY29uc3QgZmVudl90ICpfX2VudnApOwotCi0jaWYgX19CU0RfVklTSUJMRQotLyogQWRkaXRpb25hbCBzdXBwb3J0IGZ1bmN0aW9ucyB0byBzZXQvcXVlcnkgZmxvYXRpbmcgcG9pbnQgdHJhcHMgKi8KLWludCBmZWVuYWJsZWV4Y2VwdChpbnQgX19tYXNrKTsKLWludCBmZWRpc2FibGVleGNlcHQoaW50IF9fbWFzayk7Ci1pbnQgZmVnZXRleGNlcHQodm9pZCk7Ci0jZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwotCi1fX0VORF9ERUNMUwotCi0jZW5kaWYJLyogIV9BTUQ2NF9GRU5WX0hfICovCmRpZmYgLS1naXQgYS9saWJtL2luY2x1ZGUvYW1kNjQvbWFjaGluZS9mZW52LmggYi9saWJtL2luY2x1ZGUvYW1kNjQvbWFjaGluZS9mZW52LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiMjVlZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vaW5jbHVkZS9hbWQ2NC9tYWNoaW5lL2ZlbnYuaApAQCAtMCwwICsxLDk1IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IERhdmlkIFNjaHVsdHogPGRhcyAoYXQpIEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9BTUQ2NF9GRU5WX0hfCisjZGVmaW5lIF9BTUQ2NF9GRU5WX0hfCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworX19CRUdJTl9ERUNMUworCisvKgorICogRWFjaCBzeW1ib2wgcmVwcmVzZW50aW5nIGEgZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uIGV4cGFuZHMgdG8gYW4gaW50ZWdlcgorICogY29uc3RhbnQgZXhwcmVzc2lvbiB3aXRoIHZhbHVlcywgc3VjaCB0aGF0IGJpdHdpc2UtaW5jbHVzaXZlIE9ScyBvZiBfYWxsCisgKiBjb21iaW5hdGlvbnNfIG9mIHRoZSBjb25zdGFudHMgcmVzdWx0IGluIGRpc3RpbmN0IHZhbHVlcy4KKyAqCisgKiBXZSB1c2Ugc3VjaCB2YWx1ZXMgdGhhdCBhbGxvdyBkaXJlY3QgYml0d2lzZSBvcGVyYXRpb25zIG9uIEZQVS9TU0UgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIEZFX0lOVkFMSUQgICAgMHgwMQorI2RlZmluZSBGRV9ERU5PUk1BTCAgIDB4MDIKKyNkZWZpbmUgRkVfRElWQllaRVJPICAweDA0CisjZGVmaW5lIEZFX09WRVJGTE9XICAgMHgwOAorI2RlZmluZSBGRV9VTkRFUkZMT1cgIDB4MTAKKyNkZWZpbmUgRkVfSU5FWEFDVCAgICAweDIwCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHN5bWJvbCBpcyBzaW1wbHkgdGhlIGJpdHdpc2UtaW5jbHVzaXZlIE9SIG9mIGFsbCBmbG9hdGluZy1wb2ludAorICogZXhjZXB0aW9uIGNvbnN0YW50cyBkZWZpbmVkIGFib3ZlLgorICovCisjZGVmaW5lIEZFX0FMTF9FWENFUFQgICAoRkVfSU5WQUxJRCB8IEZFX0RFTk9STUFMIHwgRkVfRElWQllaRVJPIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XIHwgRkVfSU5FWEFDVCkKKworLyoKKyAqIEVhY2ggc3ltYm9sIHJlcHJlc2VudGluZyB0aGUgcm91bmRpbmcgZGlyZWN0aW9uLCBleHBhbmRzIHRvIGFuIGludGVnZXIKKyAqIGNvbnN0YW50IGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgZGlzdGluY3Qgbm9uLW5lZ2F0aXZlIHZhbHVlLgorICoKKyAqIFdlIHVzZSBzdWNoIHZhbHVlcyB0aGF0IGFsbG93IGRpcmVjdCBiaXR3aXNlIG9wZXJhdGlvbnMgb24gRlBVL1NTRSByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgRkVfVE9ORUFSRVNUICAweDAwMAorI2RlZmluZSBGRV9ET1dOV0FSRCAgIDB4NDAwCisjZGVmaW5lIEZFX1VQV0FSRCAgICAgMHg4MDAKKyNkZWZpbmUgRkVfVE9XQVJEWkVSTyAweGMwMAorCisvKgorICogZmVudl90IHJlcHJlc2VudHMgdGhlIGVudGlyZSBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QgeworICAgIF9fdWludDMyX3QgX19jb250cm9sOyAgIC8qIENvbnRyb2wgd29yZCByZWdpc3RlciAqLworICAgIF9fdWludDMyX3QgX19zdGF0dXM7ICAgIC8qIFN0YXR1cyB3b3JkIHJlZ2lzdGVyICovCisgICAgX191aW50MzJfdCBfX3RhZzsgICAgICAgLyogVGFnIHdvcmQgcmVnaXN0ZXIgKi8KKyAgICBfX3VpbnQzMl90IF9fb3RoZXJzWzRdOyAvKiBFSVAsIFBvaW50ZXIgU2VsZWN0b3IsIGV0YyAqLworICB9IF9feDg3OworICBfX3VpbnQzMl90IF9fbXhjc3I7ICAgICAgIC8qIENvbnRyb2wsIHN0YXR1cyByZWdpc3RlciAqLworfSBmZW52X3Q7CisKKy8qCisgKiBmZXhjZXB0X3QgcmVwcmVzZW50cyB0aGUgZmxvYXRpbmctcG9pbnQgc3RhdHVzIGZsYWdzIGNvbGxlY3RpdmVseSwgaW5jbHVkaW5nCisgKiBhbnkgc3RhdHVzIHRoZSBpbXBsZW1lbnRhdGlvbiBhc3NvY2lhdGVzIHdpdGggdGhlIGZsYWdzLgorICoKKyAqIEEgZmxvYXRpbmctcG9pbnQgc3RhdHVzIGZsYWcgaXMgYSBzeXN0ZW0gdmFyaWFibGUgd2hvc2UgdmFsdWUgaXMgc2V0IChidXQKKyAqIG5ldmVyIGNsZWFyZWQpIHdoZW4gYSBmbG9hdGluZy1wb2ludCBleGNlcHRpb24gaXMgcmFpc2VkLCB3aGljaCBvY2N1cnMgYXMgYQorICogc2lkZSBlZmZlY3Qgb2YgZXhjZXB0aW9uYWwgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyB0byBwcm92aWRlIGF1eGlsaWFyeQorICogaW5mb3JtYXRpb24uCisgKgorICogQSBmbG9hdGluZy1wb2ludCBjb250cm9sIG1vZGUgaXMgYSBzeXN0ZW0gdmFyaWFibGUgd2hvc2UgdmFsdWUgbWF5IGJlIHNldCBieQorICogdGhlIHVzZXIgdG8gYWZmZWN0IHRoZSBzdWJzZXF1ZW50IGJlaGF2aW9yIG9mIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMuCisgKi8KK3R5cGVkZWYgX191aW50MzJfdCBmZXhjZXB0X3Q7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiAhX0FNRDY0X0ZFTlZfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYm0vaW5jbHVkZS9hcm0vZmVudi5oIGIvbGlibS9pbmNsdWRlL2FybS9mZW52LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NmY5OWUuLjAwMDAwMDAKLS0tIGEvbGlibS9pbmNsdWRlL2FybS9mZW52LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vYXJtL2ZlbnYuaCx2IDEuNSAyMDA1LzAzLzE2IDE5OjAzOjQ1IGRhcyBFeHAgJAotICovCi0KLS8qCi0gKiBSZXdyaXR0ZW4gZm9yIEFuZHJvaWQuCi0gKgotICogVGhlIEFSTSBGUFNDUiBpcyBkZXNjcmliZWQgaGVyZToKLSAqIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC9pbmRleC5qc3A/dG9waWM9L2NvbS5hcm0uZG9jLmRkaTAzNDRiL0NoZGZhZmlhLmh0bWwKLSAqLwotCi0jaWZuZGVmIF9GRU5WX0hfCi0jZGVmaW5lIF9GRU5WX0hfCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotX19CRUdJTl9ERUNMUwotCi10eXBlZGVmIF9fdWludDMyX3QgZmVudl90OwotdHlwZWRlZiBfX3VpbnQzMl90IGZleGNlcHRfdDsKLQotLyogRXhjZXB0aW9uIGZsYWdzLiAqLwotI2RlZmluZSBGRV9JTlZBTElEICAgIDB4MDEKLSNkZWZpbmUgRkVfRElWQllaRVJPICAweDAyCi0jZGVmaW5lIEZFX09WRVJGTE9XICAgMHgwNAotI2RlZmluZSBGRV9VTkRFUkZMT1cgIDB4MDgKLSNkZWZpbmUgRkVfSU5FWEFDVCAgICAweDEwCi0jZGVmaW5lIEZFX0FMTF9FWENFUFQgKEZFX0RJVkJZWkVSTyB8IEZFX0lORVhBQ1QgfCBGRV9JTlZBTElEIHwgRkVfT1ZFUkZMT1cgfCBGRV9VTkRFUkZMT1cpCi0jZGVmaW5lIF9GUFNDUl9FTkFCTEVfU0hJRlQgOAotI2RlZmluZSBfRlBTQ1JfRU5BQkxFX01BU0sgKEZFX0FMTF9FWENFUFQgPDwgX0ZQU0NSX0VOQUJMRV9TSElGVCkKLQotLyogUm91bmRpbmcgbW9kZXMuICovCi0jZGVmaW5lIEZFX1RPTkVBUkVTVCAgMHgwCi0jZGVmaW5lIEZFX1VQV0FSRCAgICAgMHgxCi0jZGVmaW5lIEZFX0RPV05XQVJEICAgMHgyCi0jZGVmaW5lIEZFX1RPV0FSRFpFUk8gMHgzCi0jZGVmaW5lIF9GUFNDUl9STU9ERV9TSElGVCAyMgotCi0vKiBEZWZhdWx0IGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50LiAqLwotZXh0ZXJuIGNvbnN0IGZlbnZfdCBfX2ZlX2RmbF9lbnY7Ci0jZGVmaW5lIEZFX0RGTF9FTlYgKCZfX2ZlX2RmbF9lbnYpCi0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmVnZXRlbnYoZmVudl90KiBfX2VudnApIHsKLSAgZmVudl90IF9mcHNjcjsKLSAgX19hc21fXyBfX3ZvbGF0aWxlX18oInZtcnMgJTAsZnBzY3IiIDogIj1yIiAoX2Zwc2NyKSk7Ci0gICpfX2VudnAgPSBfZnBzY3I7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlc2V0ZW52KGNvbnN0IGZlbnZfdCogX19lbnZwKSB7Ci0gIGZlbnZfdCBfZnBzY3IgPSAqX19lbnZwOwotICBfX2FzbV9fIF9fdm9sYXRpbGVfXygidm1zciBmcHNjciwlMCIgOiA6InJpIiAoX2Zwc2NyKSk7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlY2xlYXJleGNlcHQoaW50IF9fZXhjZXB0cykgewotICBmZXhjZXB0X3QgX19mcHNjcjsKLSAgZmVnZXRlbnYoJl9fZnBzY3IpOwotICBfX2Zwc2NyICY9IH5fX2V4Y2VwdHM7Ci0gIGZlc2V0ZW52KCZfX2Zwc2NyKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmVnZXRleGNlcHRmbGFnKGZleGNlcHRfdCogX19mbGFncCwgaW50IF9fZXhjZXB0cykgewotICBmZXhjZXB0X3QgX19mcHNjcjsKLSAgZmVnZXRlbnYoJl9fZnBzY3IpOwotICAqX19mbGFncCA9IF9fZnBzY3IgJiBfX2V4Y2VwdHM7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlc2V0ZXhjZXB0ZmxhZyhjb25zdCBmZXhjZXB0X3QqIF9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpIHsKLSAgZmV4Y2VwdF90IF9fZnBzY3I7Ci0gIGZlZ2V0ZW52KCZfX2Zwc2NyKTsKLSAgX19mcHNjciAmPSB+X19leGNlcHRzOwotICBfX2Zwc2NyIHw9ICpfX2ZsYWdwICYgX19leGNlcHRzOwotICBmZXNldGVudigmX19mcHNjcik7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlcmFpc2VleGNlcHQoaW50IF9fZXhjZXB0cykgewotICBmZXhjZXB0X3QgX19leCA9IF9fZXhjZXB0czsKLSAgZmVzZXRleGNlcHRmbGFnKCZfX2V4LCBfX2V4Y2VwdHMpOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZXRlc3RleGNlcHQoaW50IF9fZXhjZXB0cykgewotICBmZXhjZXB0X3QgX19mcHNjcjsKLSAgZmVnZXRlbnYoJl9fZnBzY3IpOwotICByZXR1cm4gKF9fZnBzY3IgJiBfX2V4Y2VwdHMpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlZ2V0cm91bmQodm9pZCkgewotICBmZW52X3QgX2Zwc2NyOwotICBmZWdldGVudigmX2Zwc2NyKTsKLSAgcmV0dXJuICgoX2Zwc2NyID4+IF9GUFNDUl9STU9ERV9TSElGVCkgJiAweDMpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlc2V0cm91bmQoaW50IF9fcm91bmQpIHsKLSAgZmVudl90IF9mcHNjcjsKLSAgZmVnZXRlbnYoJl9mcHNjcik7Ci0gIF9mcHNjciAmPSB+KDB4MyA8PCBfRlBTQ1JfUk1PREVfU0hJRlQpOwotICBfZnBzY3IgfD0gKF9fcm91bmQgPDwgX0ZQU0NSX1JNT0RFX1NISUZUKTsKLSAgZmVzZXRlbnYoJl9mcHNjcik7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlaG9sZGV4Y2VwdChmZW52X3QqIF9fZW52cCkgewotICBmZW52X3QgX19lbnY7Ci0gIGZlZ2V0ZW52KCZfX2Vudik7Ci0gICpfX2VudnAgPSBfX2VudjsKLSAgX19lbnYgJj0gfihGRV9BTExfRVhDRVBUIHwgX0ZQU0NSX0VOQUJMRV9NQVNLKTsKLSAgZmVzZXRlbnYoJl9fZW52KTsKLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmV1cGRhdGVlbnYoY29uc3QgZmVudl90KiBfX2VudnApIHsKLSAgZmV4Y2VwdF90IF9fZnBzY3I7Ci0gIGZlZ2V0ZW52KCZfX2Zwc2NyKTsKLSAgZmVzZXRlbnYoX19lbnZwKTsKLSAgZmVyYWlzZWV4Y2VwdChfX2Zwc2NyICYgRkVfQUxMX0VYQ0VQVCk7Ci0gIHJldHVybiAwOwotfQotCi0jaWYgX19CU0RfVklTSUJMRQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlZW5hYmxlZXhjZXB0KGludCBfX21hc2spIHsKLSAgZmVudl90IF9fb2xkX2Zwc2NyLCBfX25ld19mcHNjcjsKLSAgZmVnZXRlbnYoJl9fb2xkX2Zwc2NyKTsKLSAgX19uZXdfZnBzY3IgPSBfX29sZF9mcHNjciB8IChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBfRlBTQ1JfRU5BQkxFX1NISUZUOwotICBmZXNldGVudigmX19uZXdfZnBzY3IpOwotICByZXR1cm4gKChfX29sZF9mcHNjciA+PiBfRlBTQ1JfRU5BQkxFX1NISUZUKSAmIEZFX0FMTF9FWENFUFQpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlZGlzYWJsZWV4Y2VwdChpbnQgX19tYXNrKSB7Ci0gIGZlbnZfdCBfX29sZF9mcHNjciwgX19uZXdfZnBzY3I7Ci0gIGZlZ2V0ZW52KCZfX29sZF9mcHNjcik7Ci0gIF9fbmV3X2Zwc2NyID0gX19vbGRfZnBzY3IgJiB+KChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBfRlBTQ1JfRU5BQkxFX1NISUZUKTsKLSAgZmVzZXRlbnYoJl9fbmV3X2Zwc2NyKTsKLSAgcmV0dXJuICgoX19vbGRfZnBzY3IgPj4gX0ZQU0NSX0VOQUJMRV9TSElGVCkgJiBGRV9BTExfRVhDRVBUKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZWdldGV4Y2VwdCh2b2lkKSB7Ci0gIGZlbnZfdCBfX2Zwc2NyOwotICBmZWdldGVudigmX19mcHNjcik7Ci0gIHJldHVybiAoKF9fZnBzY3IgJiBfRlBTQ1JfRU5BQkxFX01BU0spID4+IF9GUFNDUl9FTkFCTEVfU0hJRlQpOwotfQotCi0jZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwotCi1fX0VORF9ERUNMUwotCi0jZW5kaWYgLyogIV9GRU5WX0hfICovCmRpZmYgLS1naXQgYS9saWJtL2luY2x1ZGUvYXJtL21hY2hpbmUvZmVudi5oIGIvbGlibS9pbmNsdWRlL2FybS9tYWNoaW5lL2ZlbnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTQ4M2UzCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS9pbmNsdWRlL2FybS9tYWNoaW5lL2ZlbnYuaApAQCAtMCwwICsxLDYzIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9hcm0vZmVudi5oLHYgMS41IDIwMDUvMDMvMTYgMTk6MDM6NDUgZGFzIEV4cCAkCisgKi8KKworLyoKKyAqIFJld3JpdHRlbiBmb3IgQW5kcm9pZC4KKyAqCisgKiBUaGUgQVJNIEZQU0NSIGlzIGRlc2NyaWJlZCBoZXJlOgorICogaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL2luZGV4LmpzcD90b3BpYz0vY29tLmFybS5kb2MuZGRpMDM0NGIvQ2hkZmFmaWEuaHRtbAorICovCisKKyNpZm5kZWYgX0FSTV9GRU5WX0hfCisjZGVmaW5lIF9BUk1fRkVOVl9IXworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19fQkVHSU5fREVDTFMKKwordHlwZWRlZiBfX3VpbnQzMl90IGZlbnZfdDsKK3R5cGVkZWYgX191aW50MzJfdCBmZXhjZXB0X3Q7CisKKy8qIEV4Y2VwdGlvbiBmbGFncy4gKi8KKyNkZWZpbmUgRkVfSU5WQUxJRCAgICAweDAxCisjZGVmaW5lIEZFX0RJVkJZWkVSTyAgMHgwMgorI2RlZmluZSBGRV9PVkVSRkxPVyAgIDB4MDQKKyNkZWZpbmUgRkVfVU5ERVJGTE9XICAweDA4CisjZGVmaW5lIEZFX0lORVhBQ1QgICAgMHgxMAorI2RlZmluZSBGRV9BTExfRVhDRVBUIChGRV9ESVZCWVpFUk8gfCBGRV9JTkVYQUNUIHwgRkVfSU5WQUxJRCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgRkVfT1ZFUkZMT1cgfCBGRV9VTkRFUkZMT1cpCisKKy8qIFJvdW5kaW5nIG1vZGVzLiAqLworI2RlZmluZSBGRV9UT05FQVJFU1QgIDB4MAorI2RlZmluZSBGRV9VUFdBUkQgICAgIDB4MQorI2RlZmluZSBGRV9ET1dOV0FSRCAgIDB4MgorI2RlZmluZSBGRV9UT1dBUkRaRVJPIDB4MworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogIV9BUk1fRkVOVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGlibS9pbmNsdWRlL2FybTY0L2ZlbnYuaCBiL2xpYm0vaW5jbHVkZS9hcm02NC9mZW52LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYzNiMWQuLjAwMDAwMDAKLS0tIGEvbGlibS9pbmNsdWRlL2FybTY0L2ZlbnYuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzMiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9hcm0vZmVudi5oLHYgMS41IDIwMDUvMDMvMTYgMTk6MDM6NDUgZGFzIEV4cCAkCi0gKi8KLQotLyoKLSAqIFJld3JpdHRlbiBmb3IgQW5kcm9pZC4KLSAqCi0gKiBUaGUgQVJNIEZQU0NSIChGbG9hdGluZy1wb2ludCBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXIpIGRlc2NyaWJlZCBoZXJlOgotICogaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL2luZGV4LmpzcD90b3BpYz0vY29tLmFybS5kb2MuZGRpMDM0NGIvQ2hkZmFmaWEuaHRtbAotICogaGFzIGJlZW4gc3BsaXQgaW50byB0aGUgRlBDUiAoRmxvYXRpbmctcG9pbnQgQ29udHJvbCBSZWdpc3RlcikgYW5kIEZQU1IKLSAqIChGbG9hdGluZy1wb2ludCBTdGF0dXMgUmVnaXN0ZXIpIG9uIHRoZSBBUk12OC4gVGhlc2UgYXJlIGRlc2NyaWJlZCBicmllZmx5IGluCi0gKiAiUHJvY2VkdXJlIENhbGwgU3RhbmRhcmQgZm9yIHRoZSBBUk0gNjQtYml0IEFyY2hpdGVjdHVyZSIKLSAqIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5paGkwMDU1YS9JSEkwMDU1QV9hYXBjczY0LnBkZgotICogc2VjdGlvbiA1LjEuMiBTSU1EIGFuZCBGbG9hdGluZy1Qb2ludCBSZWdpc3RlcnMKLSAqLwotCi0jaWZuZGVmIF9GRU5WX0hfCi0jZGVmaW5lIF9GRU5WX0hfCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotX19CRUdJTl9ERUNMUwotCi10eXBlZGVmIF9fdWludDMyX3QgZmVudl90OwotdHlwZWRlZiBfX3VpbnQzMl90IGZleGNlcHRfdDsKLQotLyogRXhjZXB0aW9uIGZsYWdzLiAqLwotI2RlZmluZSBGRV9JTlZBTElEICAgIDB4MDEKLSNkZWZpbmUgRkVfRElWQllaRVJPICAweDAyCi0jZGVmaW5lIEZFX09WRVJGTE9XICAgMHgwNAotI2RlZmluZSBGRV9VTkRFUkZMT1cgIDB4MDgKLSNkZWZpbmUgRkVfSU5FWEFDVCAgICAweDEwCi0jZGVmaW5lIEZFX0FMTF9FWENFUFQgKEZFX0RJVkJZWkVSTyB8IEZFX0lORVhBQ1QgfCBGRV9JTlZBTElEIHwgRkVfT1ZFUkZMT1cgfCBGRV9VTkRFUkZMT1cpCi0jZGVmaW5lIF9GUFNDUl9FTkFCTEVfU0hJRlQgOAotI2RlZmluZSBfRlBTQ1JfRU5BQkxFX01BU0sgKEZFX0FMTF9FWENFUFQgPDwgX0ZQU0NSX0VOQUJMRV9TSElGVCkKLQotLyogUm91bmRpbmcgbW9kZXMuICovCi0jZGVmaW5lIEZFX1RPTkVBUkVTVCAgMHgwCi0jZGVmaW5lIEZFX1VQV0FSRCAgICAgMHgxCi0jZGVmaW5lIEZFX0RPV05XQVJEICAgMHgyCi0jZGVmaW5lIEZFX1RPV0FSRFpFUk8gMHgzCi0jZGVmaW5lIF9GUFNDUl9STU9ERV9TSElGVCAyMgotCi0jZGVmaW5lIEZQQ1JfSU9FICAgICgxIDw8IDgpCi0jZGVmaW5lIEZQQ1JfRFpFICAgICgxIDw8IDkpCi0jZGVmaW5lIEZQQ1JfT0ZFICAgICgxIDw8IDEwKQotI2RlZmluZSBGUENSX1VGRSAgICAoMSA8PCAxMSkKLSNkZWZpbmUgRlBDUl9JWEUgICAgKDEgPDwgMTIpCi0jZGVmaW5lIEZQQ1JfSURFICAgICgxIDw8IDE1KQotI2RlZmluZSBGUENSX0xFTiAgICAoNyA8PCAxNikKLSNkZWZpbmUgRlBDUl9TVFJJREUgKDMgPDwgMjApCi0jZGVmaW5lIEZQQ1JfUk1PREUgICgzIDw8IDIyKQotI2RlZmluZSBGUENSX0ZaICAgICAoMSA8PCAyNCkKLSNkZWZpbmUgRlBDUl9ETiAgICAgKDEgPDwgMjUpCi0jZGVmaW5lIEZQQ1JfQUhQICAgICgxIDw8IDI2KQotI2RlZmluZSBGUENSX01BU0sgICAoRlBDUl9JT0UgfCBcCi0gICAgICAgICAgICAgICAgICAgICBGUENSX0RaRSB8IFwKLSAgICAgICAgICAgICAgICAgICAgIEZQQ1JfT0ZFIHwgXAotICAgICAgICAgICAgICAgICAgICAgRlBDUl9VRkUgfCBcCi0gICAgICAgICAgICAgICAgICAgICBGUENSX0lYRSB8IFwKLSAgICAgICAgICAgICAgICAgICAgIEZQQ1JfSURFIHwgXAotICAgICAgICAgICAgICAgICAgICAgRlBDUl9MRU4gfCBcCi0gICAgICAgICAgICAgICAgICAgICBGUENSX1NUUklERSB8IFwKLSAgICAgICAgICAgICAgICAgICAgIEZQQ1JfUk1PREUgfCBcCi0gICAgICAgICAgICAgICAgICAgICBGUENSX0ZaIHwgXAotICAgICAgICAgICAgICAgICAgICAgRlBDUl9ETiB8IFwKLSAgICAgICAgICAgICAgICAgICAgIEZQQ1JfQUhQICkKLQotI2RlZmluZSBGUFNSX0lPQyAgICAoMSA8PCAwKQotI2RlZmluZSBGUFNSX0RaQyAgICAoMSA8PCAxKQotI2RlZmluZSBGUFNSX09GQyAgICAoMSA8PCAyKQotI2RlZmluZSBGUFNSX1VGQyAgICAoMSA8PCAzKQotI2RlZmluZSBGUFNSX0lYQyAgICAoMSA8PCA0KQotI2RlZmluZSBGUFNSX0lEQyAgICAoMSA8PCA3KQotI2RlZmluZSBGUFNSX1FDICAgICAoMSA8PCAyNykKLSNkZWZpbmUgRlBTUl9WICAgICAgKDEgPDwgMjgpCi0jZGVmaW5lIEZQU1JfQyAgICAgICgxIDw8IDI5KQotI2RlZmluZSBGUFNSX1ogICAgICAoMSA8PCAzMCkKLSNkZWZpbmUgRlBTUl9OICAgICAgKDEgPDwgMzEpCi0jZGVmaW5lIEZQU1JfTUFTSyAgIChGUFNSX0lPQyB8IFwKLSAgICAgICAgICAgICAgICAgICAgIEZQU1JfRFpDIHwgXAotICAgICAgICAgICAgICAgICAgICAgRlBTUl9PRkMgfCBcCi0gICAgICAgICAgICAgICAgICAgICBGUFNSX1VGQyB8IFwKLSAgICAgICAgICAgICAgICAgICAgIEZQU1JfSVhDIHwgXAotICAgICAgICAgICAgICAgICAgICAgRlBTUl9JREMgfCBcCi0gICAgICAgICAgICAgICAgICAgICBGUFNSX1FDIHwgXAotICAgICAgICAgICAgICAgICAgICAgRlBTUl9WIHwgXAotICAgICAgICAgICAgICAgICAgICAgRlBTUl9DIHwgXAotICAgICAgICAgICAgICAgICAgICAgRlBTUl9aIHwgXAotICAgICAgICAgICAgICAgICAgICAgRlBTUl9OICkKLQotLyogRGVmYXVsdCBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudC4gKi8KLWV4dGVybiBjb25zdCBmZW52X3QgX19mZV9kZmxfZW52OwotI2RlZmluZSBGRV9ERkxfRU5WICgmX19mZV9kZmxfZW52KQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlZ2V0ZW52KGZlbnZfdCogX19lbnZwKSB7Ci0gICAgZmVudl90IF9mcGNyLCBfZnBzcjsKLSAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJzICUwLGZwY3IiIDogIj1yIiAoX2ZwY3IpKTsKLSAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJzICUwLGZwc3IiIDogIj1yIiAoX2Zwc3IpKTsKLSAgKl9fZW52cCA9IChfZnBjciB8IF9mcHNyKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmVzZXRlbnYoY29uc3QgZmVudl90KiBfX2VudnApIHsKLSAgICBmZW52X3QgX2ZwY3IgPSAoKl9fZW52cCAmIEZQQ1JfTUFTSyk7Ci0gICAgZmVudl90IF9mcHNyID0gKCpfX2VudnAgJiBGUFNSX01BU0spOwotICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJtc3IgZnBjciwlMCIgOiA6InJpIiAoX2ZwY3IpKTsKLSAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibXNyIGZwc3IsJTAiIDogOiJyaSIgKF9mcHNyKSk7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlY2xlYXJleGNlcHQoaW50IF9fZXhjZXB0cykgewotICBmZXhjZXB0X3QgX19mcHNjcjsKLSAgZmVnZXRlbnYoJl9fZnBzY3IpOwotICBfX2Zwc2NyICY9IH5fX2V4Y2VwdHM7Ci0gIGZlc2V0ZW52KCZfX2Zwc2NyKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmVnZXRleGNlcHRmbGFnKGZleGNlcHRfdCogX19mbGFncCwgaW50IF9fZXhjZXB0cykgewotICBmZXhjZXB0X3QgX19mcHNjcjsKLSAgZmVnZXRlbnYoJl9fZnBzY3IpOwotICAqX19mbGFncCA9IF9fZnBzY3IgJiBfX2V4Y2VwdHM7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlc2V0ZXhjZXB0ZmxhZyhjb25zdCBmZXhjZXB0X3QqIF9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpIHsKLSAgZmV4Y2VwdF90IF9fZnBzY3I7Ci0gIGZlZ2V0ZW52KCZfX2Zwc2NyKTsKLSAgX19mcHNjciAmPSB+X19leGNlcHRzOwotICBfX2Zwc2NyIHw9ICpfX2ZsYWdwICYgX19leGNlcHRzOwotICBmZXNldGVudigmX19mcHNjcik7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlcmFpc2VleGNlcHQoaW50IF9fZXhjZXB0cykgewotICBmZXhjZXB0X3QgX19leCA9IF9fZXhjZXB0czsKLSAgZmVzZXRleGNlcHRmbGFnKCZfX2V4LCBfX2V4Y2VwdHMpOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZXRlc3RleGNlcHQoaW50IF9fZXhjZXB0cykgewotICBmZXhjZXB0X3QgX19mcHNjcjsKLSAgZmVnZXRlbnYoJl9fZnBzY3IpOwotICByZXR1cm4gKF9fZnBzY3IgJiBfX2V4Y2VwdHMpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlZ2V0cm91bmQodm9pZCkgewotICBmZW52X3QgX2Zwc2NyOwotICBmZWdldGVudigmX2Zwc2NyKTsKLSAgcmV0dXJuICgoX2Zwc2NyID4+IF9GUFNDUl9STU9ERV9TSElGVCkgJiAweDMpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlc2V0cm91bmQoaW50IF9fcm91bmQpIHsKLSAgZmVudl90IF9mcHNjcjsKLSAgZmVnZXRlbnYoJl9mcHNjcik7Ci0gIF9mcHNjciAmPSB+KDB4MyA8PCBfRlBTQ1JfUk1PREVfU0hJRlQpOwotICBfZnBzY3IgfD0gKF9fcm91bmQgPDwgX0ZQU0NSX1JNT0RFX1NISUZUKTsKLSAgZmVzZXRlbnYoJl9mcHNjcik7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlaG9sZGV4Y2VwdChmZW52X3QqIF9fZW52cCkgewotICBmZW52X3QgX19lbnY7Ci0gIGZlZ2V0ZW52KCZfX2Vudik7Ci0gICpfX2VudnAgPSBfX2VudjsKLSAgX19lbnYgJj0gfihGRV9BTExfRVhDRVBUIHwgX0ZQU0NSX0VOQUJMRV9NQVNLKTsKLSAgZmVzZXRlbnYoJl9fZW52KTsKLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmV1cGRhdGVlbnYoY29uc3QgZmVudl90KiBfX2VudnApIHsKLSAgZmV4Y2VwdF90IF9fZnBzY3I7Ci0gIGZlZ2V0ZW52KCZfX2Zwc2NyKTsKLSAgZmVzZXRlbnYoX19lbnZwKTsKLSAgZmVyYWlzZWV4Y2VwdChfX2Zwc2NyICYgRkVfQUxMX0VYQ0VQVCk7Ci0gIHJldHVybiAwOwotfQotCi0jaWYgX19CU0RfVklTSUJMRQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlZW5hYmxlZXhjZXB0KGludCBfX21hc2spIHsKLSAgZmVudl90IF9fb2xkX2Zwc2NyLCBfX25ld19mcHNjcjsKLSAgZmVnZXRlbnYoJl9fb2xkX2Zwc2NyKTsKLSAgX19uZXdfZnBzY3IgPSBfX29sZF9mcHNjciB8IChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBfRlBTQ1JfRU5BQkxFX1NISUZUOwotICBmZXNldGVudigmX19uZXdfZnBzY3IpOwotICByZXR1cm4gKChfX29sZF9mcHNjciA+PiBfRlBTQ1JfRU5BQkxFX1NISUZUKSAmIEZFX0FMTF9FWENFUFQpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlZGlzYWJsZWV4Y2VwdChpbnQgX19tYXNrKSB7Ci0gIGZlbnZfdCBfX29sZF9mcHNjciwgX19uZXdfZnBzY3I7Ci0gIGZlZ2V0ZW52KCZfX29sZF9mcHNjcik7Ci0gIF9fbmV3X2Zwc2NyID0gX19vbGRfZnBzY3IgJiB+KChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBfRlBTQ1JfRU5BQkxFX1NISUZUKTsKLSAgZmVzZXRlbnYoJl9fbmV3X2Zwc2NyKTsKLSAgcmV0dXJuICgoX19vbGRfZnBzY3IgPj4gX0ZQU0NSX0VOQUJMRV9TSElGVCkgJiBGRV9BTExfRVhDRVBUKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZWdldGV4Y2VwdCh2b2lkKSB7Ci0gIGZlbnZfdCBfX2Zwc2NyOwotICBmZWdldGVudigmX19mcHNjcik7Ci0gIHJldHVybiAoKF9fZnBzY3IgJiBfRlBTQ1JfRU5BQkxFX01BU0spID4+IF9GUFNDUl9FTkFCTEVfU0hJRlQpOwotfQotCi0jZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwotCi1fX0VORF9ERUNMUwotCi0jZW5kaWYgLyogIV9GRU5WX0hfICovCmRpZmYgLS1naXQgYS9saWJtL2luY2x1ZGUvYXJtNjQvbWFjaGluZS9mZW52LmggYi9saWJtL2luY2x1ZGUvYXJtNjQvbWFjaGluZS9mZW52LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg1NjhiOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vaW5jbHVkZS9hcm02NC9tYWNoaW5lL2ZlbnYuaApAQCAtMCwwICsxLDEwMiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vYXJtL2ZlbnYuaCx2IDEuNSAyMDA1LzAzLzE2IDE5OjAzOjQ1IGRhcyBFeHAgJAorICovCisKKy8qCisgKiBJbiBBUk12OCwgQUFyY2g2NCBzdGF0ZSwgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uIGlzIGNvbnRyb2xsZWQgYnk6CisgKgorICogICogRlBDUiAtIDMyQml0IEZsb2F0aW5nLVBvaW50IENvbnRyb2wgUmVnaXN0ZXI6CisgKiAgICAgICogWzMxOjI3XSAtIFJlc2VydmVkLCBSZXMwOworICogICAgICAqIFsyNl0gICAgLSBBSFAsIEFsdGVybmF0aXZlIGhhbGYtcHJlY2lzaW9uIGNvbnRyb2wgYml0OworICogICAgICAqIFsyNV0gICAgLSBETiwgRGVmYXVsdCBOYU4gbW9kZSBjb250cm9sIGJpdDsKKyAqICAgICAgKiBbMjRdICAgIC0gRlosIEZsdXNoLXRvLXplcm8gbW9kZSBjb250cm9sIGJpdDsKKyAqICAgICAgKiBbMjM6MjJdIC0gUk1vZGUsIFJvdW5kaW5nIE1vZGUgY29udHJvbCBmaWVsZDoKKyAqICAgICAgICAgICAgKiAwMCAgLSBSb3VuZCB0byBOZWFyZXN0IChSTikgbW9kZTsKKyAqICAgICAgICAgICAgKiAwMSAgLSBSb3VuZCB0b3dhcmRzIFBsdXMgSW5maW5pdHkgKFJQKSBtb2RlOworICogICAgICAgICAgICAqIDEwICAtIFJvdW5kIHRvd2FyZHMgTWludXMgSW5maW5pdHkgKFJNKSBtb2RlOworICogICAgICAgICAgICAqIDExICAtIFJvdW5kIHRvd2FyZHMgWmVybyAoUlopIG1vZGUuCisgKiAgICAgICogWzIxOjIwXSAtIFN0cmlkZSwgaWdub3JlZCBkdXJpbmcgQUFyY2g2NCBleGVjdXRpb247CisgKiAgICAgICogWzE5XSAgICAtIFJlc2VydmVkLCBSZXMwOworICogICAgICAqIFsxODoxNl0gLSBMZW4sIGlnbm9yZWQgZHVyaW5nIEFBcmNoNjQgZXhlY3V0aW9uOworICogICAgICAqIFsxNV0gICAgLSBJREUsIElucHV0IERlbm9ybWFsIGV4Y2VwdGlvbiB0cmFwOworICogICAgICAqIFsxNDoxM10gLSBSZXNlcnZlZCwgUmVzMDsKKyAqICAgICAgKiBbMTJdICAgIC0gSVhFLCBJbmV4YWN0IGV4Y2VwdGlvbiB0cmFwOworICogICAgICAqIFsxMV0gICAgLSBVRkUsIFVuZGVyZmxvdyBleGNlcHRpb24gdHJhcDsKKyAqICAgICAgKiBbMTBdICAgIC0gT0ZFLCBPdmVyZmxvdyBleGNlcHRpb24gdHJhcDsKKyAqICAgICAgKiBbOV0gICAgIC0gRFpFLCBEaXZpc2lvbiBieSBaZXJvIGV4Y2VwdGlvbjsKKyAqICAgICAgKiBbOF0gICAgIC0gSU9FLCBJbnZhbGlkIE9wZXJhdGlvbiBleGNlcHRpb247CisgKiAgICAgICogWzc6MF0gICAtIFJlc2VydmVkLCBSZXMwLgorICoKKyAqICAqIEZQU1IgLSAzMkJpdCBGbG9hdGluZy1Qb2ludCBTdGF0dXMgUmVnaXN0ZXI6CisgKiAgICAgICogWzMxXSAgICAtIE4sIE5lZ2F0aXZlIGNvbmRpdGlvbiBmbGFnIGZvciBBQXJjaDMyIChBQXJjaDY0IHNldHMgUFNUQVRFLk4pOworICogICAgICAqIFszMF0gICAgLSBaLCBaZXJvIGNvbmRpdGlvbiBmbGFnIGZvciBBQXJjaDMyIChBQXJjaDY0IHNldHMgUFNUQVRFLlopOworICogICAgICAqIFsyOV0gICAgLSBDLCBDYXJyeSBjb25kaXRvbiBmbGFnIGZvciBBQXJjaDMyIChBQXJjaDY0IHNldHMgUFNUQVRFLkMpOworICogICAgICAqIFsyOF0gICAgLSBWLCBPdmVyZmxvdyBjb25kaXRvbiBmbGFnIGZvciBBQXJjaDMyIChBQXJjaDY0IHNldHMgUFNUQVRFLlYpOworICogICAgICAqIFsyN10gICAgLSBRQywgQ3VtdWxhdGl2ZSBzYXR1cmF0aW9uIGJpdCwgQWR2YW5jZWQgU0lNRCBvbmx5OworICogICAgICAqIFsyNjo4XSAgLSBSZXNlcnZlZCwgUmVzMDsKKyAqICAgICAgKiBbN10gICAgIC0gSURDLCBJbnB1dCBEZW5vcm1hbCBjdW11bGF0aXZlIGV4Y2VwdGlvbjsKKyAqICAgICAgKiBbNjo1XSAgIC0gUmVzZXJ2ZWQsIFJlczA7CisgKiAgICAgICogWzRdICAgICAtIElYQywgSW5leGFjdCBjdW11bGF0aXZlIGV4Y2VwdGlvbjsKKyAqICAgICAgKiBbM10gICAgIC0gVUZDLCBVbmRlcmZsb3cgY3VtdWxhdGl2ZSBleGNlcHRpb247CisgKiAgICAgICogWzJdICAgICAtIE9GQywgT3ZlcmZsb3cgY3VtdWxhdGl2ZSBleGNlcHRpb247CisgKiAgICAgICogWzFdICAgICAtIERaQywgRGl2aXNpb24gYnkgWmVybyBjdW11bGF0aXZlIGV4Y2VwdGlvbjsKKyAqICAgICAgKiBbMF0gICAgIC0gSU9DLCBJbnZhbGlkIE9wZXJhdGlvbiBjdW11bGF0aXZlIGV4Y2VwdGlvbi4KKyAqLworCisjaWZuZGVmIF9BUk02NF9GRU5WX0hfCisjZGVmaW5lIF9BUk02NF9GRU5WX0hfCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworX19CRUdJTl9ERUNMUworCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fdWludDMyX3QgX19jb250cm9sOyAgICAgLyogRlBDUiwgRmxvYXRpbmctcG9pbnQgQ29udHJvbCBSZWdpc3RlciAqLworICBfX3VpbnQzMl90IF9fc3RhdHVzOyAgICAgIC8qIEZQU1IsIEZsb2F0aW5nLXBvaW50IFN0YXR1cyBSZWdpc3RlciAqLworfSBmZW52X3Q7CisKK3R5cGVkZWYgX191aW50MzJfdCBmZXhjZXB0X3Q7CisKKy8qIEV4Y2VwdGlvbiBmbGFncy4gKi8KKyNkZWZpbmUgRkVfSU5WQUxJRCAgICAweDAxCisjZGVmaW5lIEZFX0RJVkJZWkVSTyAgMHgwMgorI2RlZmluZSBGRV9PVkVSRkxPVyAgIDB4MDQKKyNkZWZpbmUgRkVfVU5ERVJGTE9XICAweDA4CisjZGVmaW5lIEZFX0lORVhBQ1QgICAgMHgxMAorI2RlZmluZSBGRV9ERU5PUk1BTCAgIDB4ODAKKyNkZWZpbmUgRkVfQUxMX0VYQ0VQVCAoRkVfRElWQllaRVJPIHwgRkVfSU5FWEFDVCB8IEZFX0lOVkFMSUQgfCBcCisgICAgICAgICAgICAgICAgICAgICAgIEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XIHwgRkVfREVOT1JNQUwpCisKKy8qIFJvdW5kaW5nIG1vZGVzLiAqLworI2RlZmluZSBGRV9UT05FQVJFU1QgIDB4MAorI2RlZmluZSBGRV9VUFdBUkQgICAgIDB4MQorI2RlZmluZSBGRV9ET1dOV0FSRCAgIDB4MgorI2RlZmluZSBGRV9UT1dBUkRaRVJPIDB4MworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogIV9BUk02NF9GRU5WX0hfICovCmRpZmYgLS1naXQgYS9saWJtL2luY2x1ZGUvZmVudi5oIGIvbGlibS9pbmNsdWRlL2ZlbnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2VjYzgwCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS9pbmNsdWRlL2ZlbnYuaApAQCAtMCwwICsxLDcxIEBACisvKiAgJE9wZW5CU0Q6IGZlbnYuaCx2IDEuMiAyMDExLzA1LzI1IDIxOjQ2OjQ5IG1hcnR5bmFzIEV4cCAkICovCisvKiAgJE5ldEJTRDogZmVudi5oLHYgMS4yLjQuMSAyMDExLzAyLzA4IDE2OjE4OjU1IGJvdXllciBFeHAgJCAgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfRkVOVl9IXworI2RlZmluZSBfRkVOVl9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9mZW52Lmg+CisKK19fQkVHSU5fREVDTFMKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcHVzaChkZWZhdWx0KQorCitpbnQgZmVjbGVhcmV4Y2VwdChpbnQpOworaW50IGZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QgKiwgaW50KTsKK2ludCBmZXJhaXNlZXhjZXB0KGludCk7CitpbnQgZmVzZXRleGNlcHRmbGFnKGNvbnN0IGZleGNlcHRfdCAqLCBpbnQpOworaW50IGZldGVzdGV4Y2VwdChpbnQpOworCitpbnQgZmVnZXRyb3VuZCh2b2lkKTsKK2ludCBmZXNldHJvdW5kKGludCk7CisKK2ludCBmZWdldGVudihmZW52X3QgKik7CitpbnQgZmVob2xkZXhjZXB0KGZlbnZfdCAqKTsKK2ludCBmZXNldGVudihjb25zdCBmZW52X3QgKik7CitpbnQgZmV1cGRhdGVlbnYoY29uc3QgZmVudl90ICopOworCitpbnQgZmVlbmFibGVleGNlcHQoaW50KTsKK2ludCBmZWRpc2FibGVleGNlcHQoaW50KTsKK2ludCBmZWdldGV4Y2VwdCh2b2lkKTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29uc3RhbnQgcmVwcmVzZW50cyB0aGUgZGVmYXVsdCBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudAorICogKHRoYXQgaXMsIHRoZSBvbmUgaW5zdGFsbGVkIGF0IHByb2dyYW0gc3RhcnR1cCkgYW5kIGhhcyB0eXBlIHBvaW50ZXIgdG8KKyAqIGNvbnN0LXF1YWxpZmllZCBmZW52X3QuCisgKgorICogSXQgY2FuIGJlIHVzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9ucyB0aGF0IG1hbmFnZSB0aGUgZmxvYXRpbmctcG9pbnQKKyAqIGVudmlyb25tZW50LCBuYW1lbHkgZmVzZXRlbnYoKSBhbmQgZmV1cGRhdGVlbnYoKS4KKyAqLworZXh0ZXJuIGNvbnN0IGZlbnZfdCBfX2ZlX2RmbF9lbnY7CisjZGVmaW5lIEZFX0RGTF9FTlYgICgmX19mZV9kZmxfZW52KQorCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAorX19FTkRfREVDTFMKKworI2VuZGlmICAvKiAhIF9GRU5WX0hfICovCmRpZmYgLS1naXQgYS9saWJtL2luY2x1ZGUvaTM4Ny9mZW52LmggYi9saWJtL2luY2x1ZGUvaTM4Ny9mZW52LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNDIxYzAuLjAwMDAwMDAKLS0tIGEvbGlibS9pbmNsdWRlL2kzODcvZmVudi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvZmVudi5oLHYgMS40IDIwMDUvMDMvMTcgMjI6MjE6NDYgZGFzIEV4cCAkCi0gKi8KLQotI2lmbmRlZglfRkVOVl9IXwotI2RlZmluZQlfRkVOVl9IXwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLV9fQkVHSU5fREVDTFMKLQotLyogICAgICAgICAgICAgICAgICAgCi0gKiBUbyBwcmVzZXJ2ZSBiaW5hcnkgY29tcGF0aWJpbGl0eSB3aXRoIEZyZWVCU0QgNS4zLCB3ZSBwYWNrIHRoZQotICogbXhjc3IgaW50byBzb21lIHJlc2VydmVkIGZpZWxkcywgcmF0aGVyIHRoYW4gY2hhbmdpbmcgc2l6ZW9mKGZlbnZfdCkuCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQlfX3VpbnQxNl90CV9fY29udHJvbDsKLQlfX3VpbnQxNl90ICAgICAgX19teGNzcl9oaTsKLQlfX3VpbnQxNl90CV9fc3RhdHVzOwotCV9fdWludDE2X3QgICAgICBfX214Y3NyX2xvOwotCV9fdWludDMyX3QJX190YWc7Ci0JY2hhcgkJX19vdGhlclsxNl07Ci19IGZlbnZfdDsKLQotdHlwZWRlZglfX3VpbnQxNl90CWZleGNlcHRfdDsKLQotLyogRXhjZXB0aW9uIGZsYWdzICovCi0jZGVmaW5lCUZFX0lOVkFMSUQJMHgwMQotI2RlZmluZQlGRV9ERU5PUk1BTAkweDAyCi0jZGVmaW5lCUZFX0RJVkJZWkVSTwkweDA0Ci0jZGVmaW5lCUZFX09WRVJGTE9XCTB4MDgKLSNkZWZpbmUJRkVfVU5ERVJGTE9XCTB4MTAKLSNkZWZpbmUJRkVfSU5FWEFDVAkweDIwCi0jZGVmaW5lCUZFX0FMTF9FWENFUFQJKEZFX0RJVkJZWkVSTyB8IEZFX0RFTk9STUFMIHwgRkVfSU5FWEFDVCB8IFwKLQkJCSBGRV9JTlZBTElEIHwgRkVfT1ZFUkZMT1cgfCBGRV9VTkRFUkZMT1cpCi0KLS8qIFJvdW5kaW5nIG1vZGVzICovCi0jZGVmaW5lCUZFX1RPTkVBUkVTVAkweDAwMDAKLSNkZWZpbmUJRkVfRE9XTldBUkQJMHgwNDAwCi0jZGVmaW5lCUZFX1VQV0FSRAkweDA4MDAKLSNkZWZpbmUJRkVfVE9XQVJEWkVSTwkweDBjMDAKLSNkZWZpbmUJX1JPVU5EX01BU0sJKEZFX1RPTkVBUkVTVCB8IEZFX0RPV05XQVJEIHwgXAotCQkJIEZFX1VQV0FSRCB8IEZFX1RPV0FSRFpFUk8pCi0KLS8qIERlZmF1bHQgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQgKi8KLWV4dGVybiBjb25zdCBmZW52X3QJX19mZV9kZmxfZW52OwotI2RlZmluZQlGRV9ERkxfRU5WCSgmX19mZV9kZmxfZW52KQotCi0vKiBDOTkgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uIGZ1bmN0aW9ucyAqLwotaW50IGZlY2xlYXJleGNlcHQoaW50IGV4Y2VwdHMpOwotaW50IGZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QgKmZsYWdwLCBpbnQgZXhjZXB0cyk7Ci1pbnQgZmVzZXRleGNlcHRmbGFnKGNvbnN0IGZleGNlcHRfdCAqZmxhZ3AsIGludCBleGNlcHRzKTsKLS8qIGZlcmFpc2VleGNlcHQgZG9lcyBub3Qgc2V0IHRoZSBpbmV4YWN0IGZsYWcgb24gb3ZlcmZsb3cvdW5kZXJmbG93ICovCi1pbnQgZmVyYWlzZWV4Y2VwdChpbnQgZXhjZXB0cyk7Ci1pbnQgZmV0ZXN0ZXhjZXB0KGludCBleGNlcHRzKTsKLQotLyogQzk5IHJvdW5kaW5nIGNvbnRyb2wgZnVuY3Rpb25zICovCi1pbnQgZmVnZXRyb3VuZCh2b2lkKTsKLWludCBmZXNldHJvdW5kKGludCByb3VuZCk7Ci0KLS8qIEM5OSBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCBmdW5jdGlvbnMgKi8KLWludCBmZWdldGVudihmZW52X3QgKl9fZW52cCk7Ci1pbnQgZmVob2xkZXhjZXB0KGZlbnZfdCAqX19lbnZwKTsKLWludCBmZXNldGVudihjb25zdCBmZW52X3QgKmVudnApOwotaW50IGZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCAqX19lbnZwKTsKLQotI2lmIF9fQlNEX1ZJU0lCTEUKLS8qIEFkZGl0aW9uYWwgc3VwcG9ydCBmdW5jdGlvbnMgdG8gc2V0L3F1ZXJ5IGZsb2F0aW5nIHBvaW50IHRyYXBzICovCi1pbnQgZmVlbmFibGVleGNlcHQoaW50IF9fbWFzayk7Ci1pbnQgZmVkaXNhYmxlZXhjZXB0KGludCBfX21hc2spOwotaW50IGZlZ2V0ZXhjZXB0KHZvaWQpOwotCi0jZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwotCi1fX0VORF9ERUNMUwotCi0jZW5kaWYJLyogIV9GRU5WX0hfICovCmRpZmYgLS1naXQgYS9saWJtL2luY2x1ZGUvaTM4Ny9tYWNoaW5lL2ZlbnYuaCBiL2xpYm0vaW5jbHVkZS9pMzg3L21hY2hpbmUvZmVudi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNDVhZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL2luY2x1ZGUvaTM4Ny9tYWNoaW5lL2ZlbnYuaApAQCAtMCwwICsxLDY5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L2ZlbnYuaCx2IDEuNCAyMDA1LzAzLzE3IDIyOjIxOjQ2IGRhcyBFeHAgJAorICovCisKKyNpZm5kZWYgX0kzODdfRkVOVl9IXworI2RlZmluZSBfSTM4N19GRU5WX0hfCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworX19CRUdJTl9ERUNMUworCisvKgorICogVG8gcHJlc2VydmUgYmluYXJ5IGNvbXBhdGliaWxpdHkgd2l0aCBGcmVlQlNEIDUuMywgd2UgcGFjayB0aGUKKyAqIG14Y3NyIGludG8gc29tZSByZXNlcnZlZCBmaWVsZHMsIHJhdGhlciB0aGFuIGNoYW5naW5nIHNpemVvZihmZW52X3QpLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIF9fdWludDE2X3QgX19jb250cm9sOworICBfX3VpbnQxNl90IF9fbXhjc3JfaGk7CisgIF9fdWludDE2X3QgX19zdGF0dXM7CisgIF9fdWludDE2X3QgX19teGNzcl9sbzsKKyAgX191aW50MzJfdCBfX3RhZzsKKyAgY2hhciAgICAgICBfX290aGVyWzE2XTsKK30gZmVudl90OworCit0eXBlZGVmIF9fdWludDE2X3QgZmV4Y2VwdF90OworCisvKiBFeGNlcHRpb24gZmxhZ3MgKi8KKyNkZWZpbmUgRkVfSU5WQUxJRCAgICAweDAxCisjZGVmaW5lIEZFX0RFTk9STUFMICAgMHgwMgorI2RlZmluZSBGRV9ESVZCWVpFUk8gIDB4MDQKKyNkZWZpbmUgRkVfT1ZFUkZMT1cgICAweDA4CisjZGVmaW5lIEZFX1VOREVSRkxPVyAgMHgxMAorI2RlZmluZSBGRV9JTkVYQUNUICAgIDB4MjAKKyNkZWZpbmUgRkVfQUxMX0VYQ0VQVCAoRkVfRElWQllaRVJPIHwgRkVfREVOT1JNQUwgfCBGRV9JTkVYQUNUIHwgXAorICAgICAgICAgICAgICAgICAgICAgICBGRV9JTlZBTElEIHwgRkVfT1ZFUkZMT1cgfCBGRV9VTkRFUkZMT1cpCisKKy8qIFJvdW5kaW5nIG1vZGVzICovCisjZGVmaW5lIEZFX1RPTkVBUkVTVCAgMHgwMDAwCisjZGVmaW5lIEZFX0RPV05XQVJEICAgMHgwNDAwCisjZGVmaW5lIEZFX1VQV0FSRCAgICAgMHgwODAwCisjZGVmaW5lIEZFX1RPV0FSRFpFUk8gMHgwYzAwCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiAhSTM4N19GRU5WX0hfICovCmRpZmYgLS1naXQgYS9saWJtL2luY2x1ZGUvbWF0aC5oIGIvbGlibS9pbmNsdWRlL21hdGguaAppbmRleCBiMTNlY2E5Li4zZWNhMTQwIDEwMDY0NAotLS0gYS9saWJtL2luY2x1ZGUvbWF0aC5oCisrKyBiL2xpYm0vaW5jbHVkZS9tYXRoLmgKQEAgLTE4LDkgKzE4LDExIEBACiAjZGVmaW5lCV9NQVRIX0hfCiAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpbmNsdWRlIDxzeXMvX3R5cGVzLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKK19fQkVHSU5fREVDTFMKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcHVzaChkZWZhdWx0KQorCiAvKgogICogQU5TSS9QT1NJWAogICovCkBAIC0zNCwxMSArMzYsMTEgQEAKIAlmbG9hdAkJX191ZjsKIH0gX19uYW47CiAKLSNpZiBfX0dOVUNfUFJFUkVRX18oMywgMykgfHwgKGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgJiYgX19JTlRFTF9DT01QSUxFUiA+PSA4MDApCisjaWYgX19HTlVDX1BSRVJFUSgzLCAzKSB8fCAoZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSAmJiBfX0lOVEVMX0NPTVBJTEVSID49IDgwMCkKICNkZWZpbmUJX19NQVRIX0JVSUxUSU5fQ09OU1RBTlRTCiAjZW5kaWYKIAotI2lmIF9fR05VQ19QUkVSRVFfXygzLCAwKSAmJiAhZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQorI2lmIF9fR05VQ19QUkVSRVEoMywgMCkgJiYgIWRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKICNkZWZpbmUJX19NQVRIX0JVSUxUSU5fUkVMT1BTCiAjZW5kaWYKIApAQCAtMTI0LDggKzEyNiwxMCBAQAogICAgIDogKHNpemVvZiAoeCkgPT0gc2l6ZW9mIChkb3VibGUpKSA/IF9fc2lnbmJpdCh4KQlcCiAgICAgOiBfX3NpZ25iaXRsKHgpKQogCi10eXBlZGVmCV9fZG91YmxlX3QJZG91YmxlX3Q7Ci10eXBlZGVmCV9fZmxvYXRfdAlmbG9hdF90OwordHlwZWRlZiBkb3VibGUgX19kb3VibGVfdDsKK3R5cGVkZWYgX19kb3VibGVfdCBkb3VibGVfdDsKK3R5cGVkZWYgZmxvYXQgX19mbG9hdF90OwordHlwZWRlZiBfX2Zsb2F0X3QgZmxvYXRfdDsKICNlbmRpZiAvKiBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OSAqLwogCiAvKgpAQCAtMTY0LDcgKzE2OCw3IEBACiAgKiBlZmZlY3Qgb2YgcmFpc2luZyBmbG9hdGluZy1wb2ludCBleGNlcHRpb25zLCBzbyB0aGV5IGFyZSBub3QgZGVjbGFyZWQKICAqIGFzIF9fcHVyZTIuICBJbiBDOTksIEZFTlZfQUNDRVNTIGFmZmVjdHMgdGhlIHB1cml0eSBvZiB0aGVzZSBmdW5jdGlvbnMuCiAgKi8KLV9fQkVHSU5fREVDTFMKKwogLyoKICAqIEFOU0kvUE9TSVgKICAqLwpAQCAtMjgxLDYgKzI4NSw3IEBACiBkb3VibGUJZHJlbShkb3VibGUsIGRvdWJsZSk7CiBpbnQJZmluaXRlKGRvdWJsZSkgX19wdXJlMjsKIGludAlpc25hbmYoZmxvYXQpIF9fcHVyZTI7Citsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwobG9uZyBkb3VibGUpOwogCiAvKgogICogUmVlbnRyYW50IHZlcnNpb24gb2YgZ2FtbWEgJiBsZ2FtbWE7IHBhc3NlcyBzaWduZ2FtIGJhY2sgYnkgcmVmZXJlbmNlCkBAIC0zOTUsMTYgKzQwMCwyMyBAQAogICogbG9uZyBkb3VibGUgdmVyc2lvbnMgb2YgSVNPL1BPU0lYIG1hdGggZnVuY3Rpb25zCiAgKi8KICNpZiBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OQorbG9uZyBkb3VibGUJYWNvc2hsKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCWFjb3NsKGxvbmcgZG91YmxlKTsKK2xvbmcgZG91YmxlCWFzaW5obChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQlhc2lubChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQlhdGFuMmwobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKTsKK2xvbmcgZG91YmxlCWF0YW5obChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQlhdGFubChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQljYnJ0bChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQljZWlsbChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQljb3B5c2lnbmwobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKSBfX3B1cmUyOworbG9uZyBkb3VibGUJY29zaGwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJY29zbChsb25nIGRvdWJsZSk7Citsb25nIGRvdWJsZQllcmZjbChsb25nIGRvdWJsZSk7Citsb25nIGRvdWJsZQllcmZsKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCWV4cDJsKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCWV4cGwobG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJZXhwbTFsKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCWZhYnNsKGxvbmcgZG91YmxlKSBfX3B1cmUyOwogbG9uZyBkb3VibGUJZmRpbWwobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCWZsb29ybChsb25nIGRvdWJsZSk7CkBAIC00MTYsOSArNDI4LDE0IEBACiBsb25nIGRvdWJsZQloeXBvdGwobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKTsKIGludAkJaWxvZ2JsKGxvbmcgZG91YmxlKSBfX3B1cmUyOwogbG9uZyBkb3VibGUJbGRleHBsKGxvbmcgZG91YmxlLCBpbnQpOworbG9uZyBkb3VibGUJbGdhbW1hbChsb25nIGRvdWJsZSk7CiBsb25nIGxvbmcJbGxyaW50bChsb25nIGRvdWJsZSk7CiBsb25nIGxvbmcJbGxyb3VuZGwobG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJbG9nMTBsKGxvbmcgZG91YmxlKTsKK2xvbmcgZG91YmxlCWxvZzFwbChsb25nIGRvdWJsZSk7Citsb25nIGRvdWJsZQlsb2cybChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQlsb2dibChsb25nIGRvdWJsZSk7Citsb25nIGRvdWJsZQlsb2dsKGxvbmcgZG91YmxlKTsKIGxvbmcJCWxyaW50bChsb25nIGRvdWJsZSk7CiBsb25nCQlscm91bmRsKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCW1vZGZsKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSAqKTsgLyogZnVuZGFtZW50YWxseSAhX19wdXJlMiAqLwpAQCAtNDI4LDUzICs0NDUsMzAgQEAKIGRvdWJsZQkJbmV4dHRvd2FyZChkb3VibGUsIGxvbmcgZG91YmxlKTsKIGZsb2F0CQluZXh0dG93YXJkZihmbG9hdCwgbG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJbmV4dHRvd2FyZGwobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKTsKK2xvbmcgZG91YmxlCXBvd2wobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCXJlbWFpbmRlcmwobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCXJlbXF1b2wobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlLCBpbnQgKik7CiBsb25nIGRvdWJsZQlyaW50bChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQlyb3VuZGwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJc2NhbGJsbmwobG9uZyBkb3VibGUsIGxvbmcpOwogbG9uZyBkb3VibGUJc2NhbGJubChsb25nIGRvdWJsZSwgaW50KTsKK2xvbmcgZG91YmxlCXNpbmhsKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCXNpbmwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJc3FydGwobG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJdGFuaGwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJdGFubChsb25nIGRvdWJsZSk7Citsb25nIGRvdWJsZQl0Z2FtbWFsKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCXRydW5jbChsb25nIGRvdWJsZSk7CiAKICNlbmRpZiAvKiBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OSAqLworCisjaWYgZGVmaW5lZChfR05VX1NPVVJDRSkKK3ZvaWQgc2luY29zKGRvdWJsZSwgZG91YmxlKiwgZG91YmxlKik7Cit2b2lkIHNpbmNvc2YoZmxvYXQsIGZsb2F0KiwgZmxvYXQqKTsKK3ZvaWQgc2luY29zbChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUqLCBsb25nIGRvdWJsZSopOworI2VuZGlmIC8qIF9HTlVfU09VUkNFICovCisKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCiBfX0VORF9ERUNMUwogCiAjZW5kaWYgLyogIV9NQVRIX0hfICovCi0KLS8qIHNlcGFyYXRlIGhlYWRlciBmb3IgY21hdGggKi8KLSNpZm5kZWYgX01BVEhfRVhUUkFfSF8KLSNpZiBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OQotI2lmIF9ERUNMQVJFX0M5OV9MREJMX01BVEgKLQotI2RlZmluZSBfTUFUSF9FWFRSQV9IXwotCi0vKgotICogZXh0cmEgbG9uZyBkb3VibGUgdmVyc2lvbnMgb2YgbWF0aCBmdW5jdGlvbnMgZm9yIEM5OSBhbmQgY21hdGgKLSAqLwotX19CRUdJTl9ERUNMUwotCi1sb25nIGRvdWJsZQlhY29zaGwobG9uZyBkb3VibGUpOwotbG9uZyBkb3VibGUJYXNpbmhsKGxvbmcgZG91YmxlKTsKLWxvbmcgZG91YmxlCWF0YW5obChsb25nIGRvdWJsZSk7Ci1sb25nIGRvdWJsZQljb3NobChsb25nIGRvdWJsZSk7Ci1sb25nIGRvdWJsZQllcmZjbChsb25nIGRvdWJsZSk7Ci1sb25nIGRvdWJsZQllcmZsKGxvbmcgZG91YmxlKTsKLWxvbmcgZG91YmxlCWV4cG0xbChsb25nIGRvdWJsZSk7Ci1sb25nIGRvdWJsZQlsZ2FtbWFsKGxvbmcgZG91YmxlKTsKLWxvbmcgZG91YmxlCWxvZzEwbChsb25nIGRvdWJsZSk7Ci1sb25nIGRvdWJsZQlsb2cxcGwobG9uZyBkb3VibGUpOwotbG9uZyBkb3VibGUJbG9nMmwobG9uZyBkb3VibGUpOwotbG9uZyBkb3VibGUJbG9nbChsb25nIGRvdWJsZSk7Ci1sb25nIGRvdWJsZQlwb3dsKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSk7Ci1sb25nIGRvdWJsZQlzaW5obChsb25nIGRvdWJsZSk7Ci1sb25nIGRvdWJsZQl0YW5obChsb25nIGRvdWJsZSk7Ci1sb25nIGRvdWJsZQl0Z2FtbWFsKGxvbmcgZG91YmxlKTsKLQotX19FTkRfREVDTFMKLQotI2VuZGlmIC8qICFfREVDTEFSRV9DOTlfTERCTF9NQVRIICovCi0jZW5kaWYgLyogX19JU09fQ19WSVNJQkxFID49IDE5OTkgKi8KLSNlbmRpZiAvKiAhX01BVEhfRVhUUkFfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYm0vaW5jbHVkZS9taXBzL2ZlbnYuaCBiL2xpYm0vaW5jbHVkZS9taXBzL2ZlbnYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ2OWNmOC4uMDAwMDAwMAotLS0gYS9saWJtL2luY2x1ZGUvbWlwcy9mZW52LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vYXJtL2ZlbnYuaCx2IDEuNSAyMDA1LzAzLzE2IDE5OjAzOjQ1IGRhcyBFeHAgJAotICovCi0KLS8qCi0gICBSZXdyaXR0ZW4gZm9yIEFuZHJvaWQuCi0qLwotCi0vKiBNSVBTIEZQVSBmbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyIGJpdHMuCi0gKgotICogMzEtMjUgIC0+IGZsb2F0aW5nIHBvaW50IGNvbmRpdGlvbnMgY29kZSBiaXRzIHNldCBieSBGUCBjb21wYXJlCi0gKiAgICAgICAgICAgaW5zdHJ1Y3Rpb25zCi0gKiAyNCAgICAgLT4gZmx1c2ggZGVub3JtYWxpemVkIHJlc3VsdHMgdG8gemVybyBpbnN0ZWFkIG9mCi0gKiAgICAgICAgICAgY2F1c2luZyB1bmltcGxlbWVudGVkIG9wZXJhdGlvbiBleGNlcHRpb24uCi0gKiAyMyAgICAgLT4gQ29uZGl0aW9uIGJpdAotICogMjIgICAgIC0+IEluIGNvbmp1bmN0aW9uIHdpdGggRlMgZGV0ZWN0cyBkZW5vcm1hbGl6ZWQKLSAqICAgICAgICAgICBvcGVyYW5kcyBhbmQgcmVwbGFjZXMgdGhlbSBpbnRlcm5hbGx5IHdpdGggMC4KLSAqIDIxICAgICAtPiBJbiBjb25qdW5jdGlvbiB3aXRoIEZTIGZvcmNlcyBkZW5vcm1hbGl6ZWQgb3BlcmFuZHMKLSAqICAgICAgICAgICB0byB0aGUgY2xvc2VzdCBub3JtYWxpemVkIHZhbHVlLgotICogMjAtMTggIC0+IHJlc2VydmVkIChyZWFkIGFzIDAsIHdyaXRlIHdpdGggMCkKLSAqIDE3ICAgICAtPiBjYXVzZSBiaXQgZm9yIHVuaW1wbGVtZW50ZWQgb3BlcmF0aW9uCi0gKiAxNiAgICAgLT4gY2F1c2UgYml0IGZvciBpbnZhbGlkIGV4Y2VwdGlvbgotICogMTUgICAgIC0+IGNhdXNlIGJpdCBmb3IgZGl2aXNpb24gYnkgemVybyBleGNlcHRpb24KLSAqIDE0ICAgICAtPiBjYXVzZSBiaXQgZm9yIG92ZXJmbG93IGV4Y2VwdGlvbgotICogMTMgICAgIC0+IGNhdXNlIGJpdCBmb3IgdW5kZXJmbG93IGV4Y2VwdGlvbgotICogMTIgICAgIC0+IGNhdXNlIGJpdCBmb3IgaW5leGFjdCBleGNlcHRpb24KLSAqIDExICAgICAtPiBlbmFibGUgZXhjZXB0aW9uIGZvciBpbnZhbGlkIGV4Y2VwdGlvbgotICogMTAgICAgIC0+IGVuYWJsZSBleGNlcHRpb24gZm9yIGRpdmlzaW9uIGJ5IHplcm8gZXhjZXB0aW9uCi0gKiAgOSAgICAgLT4gZW5hYmxlIGV4Y2VwdGlvbiBmb3Igb3ZlcmZsb3cgZXhjZXB0aW9uCi0gKiAgOCAgICAgLT4gZW5hYmxlIGV4Y2VwdGlvbiBmb3IgdW5kZXJmbG93IGV4Y2VwdGlvbgotICogIDcgICAgIC0+IGVuYWJsZSBleGNlcHRpb24gZm9yIGluZXhhY3QgZXhjZXB0aW9uCi0gKiAgNiAgICAgLT4gZmxhZyBpbnZhbGlkIGV4Y2VwdGlvbgotICogIDUgICAgIC0+IGZsYWcgZGl2aXNpb24gYnkgemVybyBleGNlcHRpb24KLSAqICA0ICAgICAtPiBmbGFnIG92ZXJmbG93IGV4Y2VwdGlvbgotICogIDMgICAgIC0+IGZsYWcgdW5kZXJmbG93IGV4Y2VwdGlvbgotICogIDIgICAgIC0+IGZsYWcgaW5leGFjdCBleGNlcHRpb24KLSAqICAxLTAgICAtPiByb3VuZGluZyBjb250cm9sCi0gKgotICoKLSAqIFJvdW5kaW5nIENvbnRyb2w6Ci0gKiAwMCAtIHJvdW5kaW5nIHRvIG5lYXJlc3QgKFJOKQotICogMDEgLSByb3VuZGluZyB0b3dhcmQgemVybyAoUlopCi0gKiAxMCAtIHJvdW5kaW5nICh1cCkgdG93YXJkIHBsdXMgaW5maW5pdHkgKFJQKQotICogMTEgLSByb3VuZGluZyAoZG93bil0b3dhcmQgbWludXMgaW5maW5pdHkgKFJNKQotICovCi0KLSNpZm5kZWYgX0ZFTlZfSF8KLSNkZWZpbmUgX0ZFTlZfSF8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi1fX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgX191aW50MzJfdCAgICBmZW52X3Q7Ci10eXBlZGVmIF9fdWludDMyX3QgICAgZmV4Y2VwdF90OwotCi0vKiBFeGNlcHRpb24gZmxhZ3MgKi8KLSNkZWZpbmUgRkVfSU5WQUxJRCAgICAgIDB4NDAKLSNkZWZpbmUgRkVfRElWQllaRVJPICAgIDB4MjAKLSNkZWZpbmUgRkVfT1ZFUkZMT1cgICAgIDB4MTAKLSNkZWZpbmUgRkVfVU5ERVJGTE9XICAgIDB4MDgKLSNkZWZpbmUgRkVfSU5FWEFDVCAgICAgIDB4MDQKLSNkZWZpbmUgRkVfQUxMX0VYQ0VQVCAgIChGRV9ESVZCWVpFUk8gfCBGRV9JTkVYQUNUIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIEZFX0lOVkFMSUQgfCBGRV9PVkVSRkxPVyB8IEZFX1VOREVSRkxPVykKLSNkZWZpbmUgX0ZDU1JfQ0FVU0VfU0hJRlQgIDEwCi0jZGVmaW5lIF9FTkFCTEVfU0hJRlQgNQotI2RlZmluZSBfRkNTUl9FTkFCTEVfTUFTSyAoRkVfQUxMX0VYQ0VQVCA8PCBfRU5BQkxFX1NISUZUKQotCi0vKiBSb3VuZGluZyBtb2RlcyAqLwotI2RlZmluZSBGRV9UT05FQVJFU1QgICAgMHgwMDAwCi0jZGVmaW5lIEZFX1RPV0FSRFpFUk8gICAweDAwMDEKLSNkZWZpbmUgRkVfVVBXQVJEICAgICAgIDB4MDAwMgotI2RlZmluZSBGRV9ET1dOV0FSRCAgICAgMHgwMDAzCi0jZGVmaW5lIF9GQ1NSX1JNT0RFX1NISUZUIDAKLSNkZWZpbmUgX0ZDU1JfUk1BU0sgICAgICAgMHgzCi0vKiBEZWZhdWx0IGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50ICovCi1leHRlcm4gY29uc3QgZmVudl90ICAgIF9fZmVfZGZsX2VudjsKLSNkZWZpbmUgRkVfREZMX0VOViAgICAoJl9fZmVfZGZsX2VudikKLQotc3RhdGljIF9faW5saW5lIGludCBmZWdldGVudihmZW52X3QqIF9fZW52cCkgewotICAgZmVudl90IF9mY3NyID0gMDsKLSNpZmRlZiAgX19taXBzX2hhcmRfZmxvYXQKLSAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJjZmMxICUwLCQzMSIgOiAiPXIiIChfZmNzcikpOwotI2VuZGlmCi0gICAqX19lbnZwID0gX2Zjc3I7Ci0gICByZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZXNldGVudihjb25zdCBmZW52X3QqIF9fZW52cCkgewotICBmZW52X3QgX2Zjc3IgPSAqX19lbnZwOwotI2lmZGVmICBfX21pcHNfaGFyZF9mbG9hdAotICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY3RjMSAlMCwkMzEiIDogOiAiciIgKF9mY3NyKSk7Ci0jZW5kaWYKLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmVjbGVhcmV4Y2VwdChpbnQgX19leGNlcHRzKSB7Ci0gIGZleGNlcHRfdCBfX2Zjc3I7Ci0gIGZlZ2V0ZW52KCZfX2Zjc3IpOwotICBfX2V4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKLSAgX19mY3NyICY9IH4oX19leGNlcHRzIHwgKF9fZXhjZXB0cyA8PCBfRkNTUl9DQVVTRV9TSElGVCkpOwotICBmZXNldGVudigmX19mY3NyKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmVnZXRleGNlcHRmbGFnKGZleGNlcHRfdCogX19mbGFncCwgaW50IF9fZXhjZXB0cykgewotICBmZXhjZXB0X3QgX19mY3NyOwotICBmZWdldGVudigmX19mY3NyKTsKLSAgKl9fZmxhZ3AgPSBfX2Zjc3IgJiBfX2V4Y2VwdHMgJiBGRV9BTExfRVhDRVBUOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZXNldGV4Y2VwdGZsYWcoY29uc3QgZmV4Y2VwdF90KiBfX2ZsYWdwLCBpbnQgX19leGNlcHRzKSB7Ci0gIGZleGNlcHRfdCBfX2Zjc3I7Ci0gIGZlZ2V0ZW52KCZfX2Zjc3IpOwotICAvKiBFbnN1cmUgdGhhdCBmbGFncyBhcmUgYWxsIGxlZ2FsICovCi0gIF9fZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOwotICBfX2Zjc3IgJj0gfl9fZXhjZXB0czsKLSAgX19mY3NyIHw9ICpfX2ZsYWdwICYgX19leGNlcHRzOwotICBmZXNldGVudigmX19mY3NyKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmVyYWlzZWV4Y2VwdChpbnQgX19leGNlcHRzKSB7Ci0gIGZleGNlcHRfdCBfX2Zjc3I7Ci0gIGZlZ2V0ZW52KCZfX2Zjc3IpOwotICAvKiBFbnN1cmUgdGhhdCBmbGFncyBhcmUgYWxsIGxlZ2FsICovCi0gIF9fZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOwotICAvKiBDYXVzZSBiaXQgbmVlZHMgdG8gYmUgc2V0IGFzIHdlbGwgZm9yIGdlbmVyYXRpbmcgdGhlIGV4Y2VwdGlvbiovCi0gIF9fZmNzciB8PSBfX2V4Y2VwdHMgfCAoX19leGNlcHRzIDw8IF9GQ1NSX0NBVVNFX1NISUZUKTsKLSAgZmVzZXRlbnYoJl9fZmNzcik7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZldGVzdGV4Y2VwdChpbnQgX19leGNlcHRzKSB7Ci0gIGZleGNlcHRfdCBfX0ZDU1I7Ci0gIGZlZ2V0ZW52KCZfX0ZDU1IpOwotICByZXR1cm4gKF9fRkNTUiAmIF9fZXhjZXB0cyAmIEZFX0FMTF9FWENFUFQpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlZ2V0cm91bmQodm9pZCkgewotICBmZW52X3QgX2Zjc3I7Ci0gIGZlZ2V0ZW52KCZfZmNzcik7Ci0gIHJldHVybiAoX2Zjc3IgJiBfRkNTUl9STUFTSyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmVzZXRyb3VuZChpbnQgX19yb3VuZCkgewotICBmZW52X3QgX2Zjc3I7Ci0gIGZlZ2V0ZW52KCZfZmNzcik7Ci0gIF9mY3NyICY9IH5fRkNTUl9STUFTSzsKLSAgX2Zjc3IgfD0gKF9fcm91bmQgJiBfRkNTUl9STUFTSyApIDsKLSAgZmVzZXRlbnYoJl9mY3NyKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmVob2xkZXhjZXB0KGZlbnZfdCogX19lbnZwKSB7Ci0gIGZlbnZfdCBfX2VudjsKLSAgZmVnZXRlbnYoJl9fZW52KTsKLSAgKl9fZW52cCA9IF9fZW52OwotICBfX2VudiAmPSB+KEZFX0FMTF9FWENFUFQgfCBfRkNTUl9FTkFCTEVfTUFTSyk7Ci0gIGZlc2V0ZW52KCZfX2Vudik7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCogX19lbnZwKSB7Ci0gIGZleGNlcHRfdCBfX2Zjc3I7Ci0gIGZlZ2V0ZW52KCZfX2Zjc3IpOwotICBmZXNldGVudihfX2VudnApOwotICBmZXJhaXNlZXhjZXB0KF9fZmNzciAmIEZFX0FMTF9FWENFUFQpOwotICByZXR1cm4gMDsKLX0KLQotI2lmIF9fQlNEX1ZJU0lCTEUKLQotc3RhdGljIF9faW5saW5lIGludCBmZWVuYWJsZWV4Y2VwdChpbnQgX19tYXNrKSB7Ci0gIGZlbnZfdCBfX29sZF9mY3NyLCBfX25ld19mY3NyOwotICBmZWdldGVudigmX19vbGRfZmNzcik7Ci0gIF9fbmV3X2Zjc3IgPSBfX29sZF9mY3NyIHwgKF9fbWFzayAmIEZFX0FMTF9FWENFUFQpIDw8IF9FTkFCTEVfU0hJRlQ7Ci0gIGZlc2V0ZW52KCZfX25ld19mY3NyKTsKLSAgcmV0dXJuICgoX19vbGRfZmNzciA+PiBfRU5BQkxFX1NISUZUKSAmIEZFX0FMTF9FWENFUFQpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlZGlzYWJsZWV4Y2VwdChpbnQgX19tYXNrKSB7Ci0gIGZlbnZfdCBfX29sZF9mY3NyLCBfX25ld19mY3NyOwotICBmZWdldGVudigmX19vbGRfZmNzcik7Ci0gIF9fbmV3X2Zjc3IgPSBfX29sZF9mY3NyICYgfigoX19tYXNrICYgRkVfQUxMX0VYQ0VQVCkgPDwgX0VOQUJMRV9TSElGVCk7Ci0gIGZlc2V0ZW52KCZfX25ld19mY3NyKTsKLSAgcmV0dXJuICgoX19vbGRfZmNzciA+PiBfRU5BQkxFX1NISUZUKSAmIEZFX0FMTF9FWENFUFQpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlZ2V0ZXhjZXB0KHZvaWQpIHsKLSAgZmVudl90IF9fZmNzcjsKLSAgZmVnZXRlbnYoJl9fZmNzcik7Ci0gIHJldHVybiAoKF9fZmNzciAmIF9GQ1NSX0VOQUJMRV9NQVNLKSA+PiBfRU5BQkxFX1NISUZUKTsKLX0KLQotI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KLQotX19FTkRfREVDTFMKLQotI2VuZGlmIC8qICFfRkVOVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGlibS9pbmNsdWRlL21pcHMvbWFjaGluZS9mZW52LmggYi9saWJtL2luY2x1ZGUvbWlwcy9tYWNoaW5lL2ZlbnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODllMWNiCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS9pbmNsdWRlL21pcHMvbWFjaGluZS9mZW52LmgKQEAgLTAsMCArMSw5OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vYXJtL2ZlbnYuaCx2IDEuNSAyMDA1LzAzLzE2IDE5OjAzOjQ1IGRhcyBFeHAgJAorICovCisKKy8qCisgICBSZXdyaXR0ZW4gZm9yIEFuZHJvaWQuCisqLworCisvKiBNSVBTIEZQVSBmbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyIGJpdHMuCisgKgorICogMzEtMjUgIC0+IGZsb2F0aW5nIHBvaW50IGNvbmRpdGlvbnMgY29kZSBiaXRzIHNldCBieSBGUCBjb21wYXJlCisgKiAgICAgICAgICAgaW5zdHJ1Y3Rpb25zCisgKiAyNCAgICAgLT4gZmx1c2ggZGVub3JtYWxpemVkIHJlc3VsdHMgdG8gemVybyBpbnN0ZWFkIG9mCisgKiAgICAgICAgICAgY2F1c2luZyB1bmltcGxlbWVudGVkIG9wZXJhdGlvbiBleGNlcHRpb24uCisgKiAyMyAgICAgLT4gQ29uZGl0aW9uIGJpdAorICogMjIgICAgIC0+IEluIGNvbmp1bmN0aW9uIHdpdGggRlMgZGV0ZWN0cyBkZW5vcm1hbGl6ZWQKKyAqICAgICAgICAgICBvcGVyYW5kcyBhbmQgcmVwbGFjZXMgdGhlbSBpbnRlcm5hbGx5IHdpdGggMC4KKyAqIDIxICAgICAtPiBJbiBjb25qdW5jdGlvbiB3aXRoIEZTIGZvcmNlcyBkZW5vcm1hbGl6ZWQgb3BlcmFuZHMKKyAqICAgICAgICAgICB0byB0aGUgY2xvc2VzdCBub3JtYWxpemVkIHZhbHVlLgorICogMjAtMTggIC0+IHJlc2VydmVkIChyZWFkIGFzIDAsIHdyaXRlIHdpdGggMCkKKyAqIDE3ICAgICAtPiBjYXVzZSBiaXQgZm9yIHVuaW1wbGVtZW50ZWQgb3BlcmF0aW9uCisgKiAxNiAgICAgLT4gY2F1c2UgYml0IGZvciBpbnZhbGlkIGV4Y2VwdGlvbgorICogMTUgICAgIC0+IGNhdXNlIGJpdCBmb3IgZGl2aXNpb24gYnkgemVybyBleGNlcHRpb24KKyAqIDE0ICAgICAtPiBjYXVzZSBiaXQgZm9yIG92ZXJmbG93IGV4Y2VwdGlvbgorICogMTMgICAgIC0+IGNhdXNlIGJpdCBmb3IgdW5kZXJmbG93IGV4Y2VwdGlvbgorICogMTIgICAgIC0+IGNhdXNlIGJpdCBmb3IgaW5leGFjdCBleGNlcHRpb24KKyAqIDExICAgICAtPiBlbmFibGUgZXhjZXB0aW9uIGZvciBpbnZhbGlkIGV4Y2VwdGlvbgorICogMTAgICAgIC0+IGVuYWJsZSBleGNlcHRpb24gZm9yIGRpdmlzaW9uIGJ5IHplcm8gZXhjZXB0aW9uCisgKiAgOSAgICAgLT4gZW5hYmxlIGV4Y2VwdGlvbiBmb3Igb3ZlcmZsb3cgZXhjZXB0aW9uCisgKiAgOCAgICAgLT4gZW5hYmxlIGV4Y2VwdGlvbiBmb3IgdW5kZXJmbG93IGV4Y2VwdGlvbgorICogIDcgICAgIC0+IGVuYWJsZSBleGNlcHRpb24gZm9yIGluZXhhY3QgZXhjZXB0aW9uCisgKiAgNiAgICAgLT4gZmxhZyBpbnZhbGlkIGV4Y2VwdGlvbgorICogIDUgICAgIC0+IGZsYWcgZGl2aXNpb24gYnkgemVybyBleGNlcHRpb24KKyAqICA0ICAgICAtPiBmbGFnIG92ZXJmbG93IGV4Y2VwdGlvbgorICogIDMgICAgIC0+IGZsYWcgdW5kZXJmbG93IGV4Y2VwdGlvbgorICogIDIgICAgIC0+IGZsYWcgaW5leGFjdCBleGNlcHRpb24KKyAqICAxLTAgICAtPiByb3VuZGluZyBjb250cm9sCisgKgorICoKKyAqIFJvdW5kaW5nIENvbnRyb2w6CisgKiAwMCAtIHJvdW5kaW5nIHRvIG5lYXJlc3QgKFJOKQorICogMDEgLSByb3VuZGluZyB0b3dhcmQgemVybyAoUlopCisgKiAxMCAtIHJvdW5kaW5nICh1cCkgdG93YXJkIHBsdXMgaW5maW5pdHkgKFJQKQorICogMTEgLSByb3VuZGluZyAoZG93bil0b3dhcmQgbWludXMgaW5maW5pdHkgKFJNKQorICovCisKKyNpZm5kZWYgX01JUFNfRkVOVl9IXworI2RlZmluZSBfTUlQU19GRU5WX0hfCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworX19CRUdJTl9ERUNMUworCit0eXBlZGVmIF9fdWludDMyX3QgZmVudl90OwordHlwZWRlZiBfX3VpbnQzMl90IGZleGNlcHRfdDsKKworLyogRXhjZXB0aW9uIGZsYWdzICovCisjZGVmaW5lIEZFX0lOVkFMSUQgICAgMHg0MAorI2RlZmluZSBGRV9ESVZCWVpFUk8gIDB4MjAKKyNkZWZpbmUgRkVfT1ZFUkZMT1cgICAweDEwCisjZGVmaW5lIEZFX1VOREVSRkxPVyAgMHgwOAorI2RlZmluZSBGRV9JTkVYQUNUICAgIDB4MDQKKyNkZWZpbmUgRkVfQUxMX0VYQ0VQVCAoRkVfRElWQllaRVJPIHwgRkVfSU5FWEFDVCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgRkVfSU5WQUxJRCB8IEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XKQorCisvKiBSb3VuZGluZyBtb2RlcyAqLworI2RlZmluZSBGRV9UT05FQVJFU1QgIDB4MDAwMAorI2RlZmluZSBGRV9UT1dBUkRaRVJPIDB4MDAwMQorI2RlZmluZSBGRV9VUFdBUkQgICAgIDB4MDAwMgorI2RlZmluZSBGRV9ET1dOV0FSRCAgIDB4MDAwMworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogIV9NSVBTX0ZFTlZfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYm0vaXNpbmYuYyBiL2xpYm0vaXNpbmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkxN2YxNi4uMDAwMDAwMAotLS0gYS9saWJtL2lzaW5mLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEJAotICovCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSAiZnBtYXRoLmgiCi0KLS8qCi0gKiBYWFggVGhlc2Ugcm91dGluZXMgYmVsb25nIGluIGxpYm0sIGJ1dCB0aGV5IG11c3QgcmVtYWluIGluIGxpYmMgZm9yCi0gKiAgICAgYmluYXJ5IGNvbXBhdCB1bnRpbCB3ZSBjYW4gYnVtcCBsaWJtJ3MgbWFqb3IgdmVyc2lvbiBudW1iZXIuCi0gKi8KLQotaW50Ci1fX2lzaW5mKGRvdWJsZSBkKQotewotCXVuaW9uIElFRUVkMmJpdHMgdTsKLQotCXUuZCA9IGQ7Ci0JcmV0dXJuICh1LmJpdHMuZXhwID09IDIwNDcgJiYgdS5iaXRzLm1hbmwgPT0gMCAmJiB1LmJpdHMubWFuaCA9PSAwKTsKLX0KLQotaW50Ci1fX2lzaW5mZihmbG9hdCBmKQotewotCXVuaW9uIElFRUVmMmJpdHMgdTsKLQotCXUuZiA9IGY7Ci0JcmV0dXJuICh1LmJpdHMuZXhwID09IDI1NSAmJiB1LmJpdHMubWFuID09IDApOwotfQotCi1pbnQKLV9faXNpbmZsKGxvbmcgZG91YmxlIGUpCi17Ci0JdW5pb24gSUVFRWwyYml0cyB1OwotCi0JdS5lID0gZTsKLQltYXNrX25iaXRfbCh1KTsKLSNpZm5kZWYgX19hbHBoYV9fCi0JcmV0dXJuICh1LmJpdHMuZXhwID09IDMyNzY3ICYmIHUuYml0cy5tYW5sID09IDAgJiYgdS5iaXRzLm1hbmggPT0gMCk7Ci0jZWxzZQotCXJldHVybiAodS5iaXRzLmV4cCA9PSAyMDQ3ICYmIHUuYml0cy5tYW5sID09IDAgJiYgdS5iaXRzLm1hbmggPT0gMCk7Ci0jZW5kaWYKLX0KZGlmZiAtLWdpdCBhL2xpYm0vbWlwcy9fZnBtYXRoLmggYi9saWJtL21pcHMvX2ZwbWF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDA2YTU4Li4wMDAwMDAwCi0tLSBhL2xpYm0vbWlwcy9fZnBtYXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMyBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEJAotICovCi0KLXVuaW9uIElFRUVsMmJpdHMgewotCWxvbmcgZG91YmxlCWU7Ci0Jc3RydWN0IHsKLSNpZm5kZWYgX19NSVBTRUJfXwotCQl1bnNpZ25lZCBpbnQJbWFubAk6MzI7Ci0JCXVuc2lnbmVkIGludAltYW5oCToyMDsKLQkJdW5zaWduZWQgaW50CWV4cAk6MTE7Ci0JCXVuc2lnbmVkIGludAlzaWduCToxOwotI2Vsc2UKLQkJdW5zaWduZWQgaW50CQlzaWduCToxOwotCQl1bnNpZ25lZCBpbnQJCWV4cAk6MTE7Ci0JCXVuc2lnbmVkIGludAkJbWFuaAk6MjA7Ci0JCXVuc2lnbmVkIGludAkJbWFubAk6MzI7Ci0jZW5kaWYKLQl9IGJpdHM7Ci19OwotCi0jZGVmaW5lCUxEQkxfTkJJVAkwCi0jZGVmaW5lCW1hc2tfbmJpdF9sKHUpCSgodm9pZCkwKQotI2RlZmluZQlMREJMX0lNUExJQ0lUX05CSVQKLQotI2RlZmluZQlMREJMX01BTkhfU0laRQkyMAotI2RlZmluZQlMREJMX01BTkxfU0laRQkzMgotCi0jZGVmaW5lCUxEQkxfVE9fQVJSQVkzMih1LCBhKSBkbyB7CQkJXAotCShhKVswXSA9ICh1aW50MzJfdCkodSkuYml0cy5tYW5sOwkJXAotCShhKVsxXSA9ICh1aW50MzJfdCkodSkuYml0cy5tYW5oOwkJXAotfSB3aGlsZSgwKQpkaWZmIC0tZ2l0IGEvbGlibS9taXBzL2ZlbnYuYyBiL2xpYm0vbWlwcy9mZW52LmMKaW5kZXggYjVmNTJkYS4uYWFjZDUyNiAxMDA2NDQKLS0tIGEvbGlibS9taXBzL2ZlbnYuYworKysgYi9saWJtL21pcHMvZmVudi5jCkBAIC0yOCw4ICsyOCwxMjkgQEAKIAogI2luY2x1ZGUgPGZlbnYuaD4KIAorI2RlZmluZSBGQ1NSX0NBVVNFX1NISUZUIDEwCisjZGVmaW5lIEZDU1JfRU5BQkxFX1NISUZUIDUKKyNkZWZpbmUgRkNTUl9FTkFCTEVfTUFTSyAoRkVfQUxMX0VYQ0VQVCA8PCBGQ1NSX0VOQUJMRV9TSElGVCkKKworI2RlZmluZSBGQ1NSX1JNQVNLICAgICAgIDB4MworCiAvKgogICogSG9wZWZ1bGx5IHRoZSBzeXN0ZW0gSUQgYnl0ZSBpcyBpbW11dGFibGUsIHNvIGl0J3MgdmFsaWQgdG8gdXNlCiAgKiB0aGlzIGFzIGEgZGVmYXVsdCBlbnZpcm9ubWVudC4KICAqLwogY29uc3QgZmVudl90IF9fZmVfZGZsX2VudiA9IDA7CisKK2ludCBmZWdldGVudihmZW52X3QqIF9fZW52cCkgeworICBmZW52X3QgX2Zjc3IgPSAwOworI2lmZGVmICBfX21pcHNfaGFyZF9mbG9hdAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2ZjMSAlMCwkMzEiIDogIj1yIiAoX2Zjc3IpKTsKKyNlbmRpZgorICAqX19lbnZwID0gX2Zjc3I7CisgIHJldHVybiAwOworfQorCitpbnQgZmVzZXRlbnYoY29uc3QgZmVudl90KiBfX2VudnApIHsKKyAgZmVudl90IF9mY3NyID0gKl9fZW52cDsKKyNpZmRlZiAgX19taXBzX2hhcmRfZmxvYXQKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18oImN0YzEgJTAsJDMxIiA6IDogInIiIChfZmNzcikpOworI2VuZGlmCisgIHJldHVybiAwOworfQorCitpbnQgZmVjbGVhcmV4Y2VwdChpbnQgX19leGNlcHRzKSB7CisgIGZleGNlcHRfdCBfX2Zjc3I7CisgIGZlZ2V0ZW52KCZfX2Zjc3IpOworICBfX2V4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKKyAgX19mY3NyICY9IH4oX19leGNlcHRzIHwgKF9fZXhjZXB0cyA8PCBGQ1NSX0NBVVNFX1NISUZUKSk7CisgIGZlc2V0ZW52KCZfX2Zjc3IpOworICByZXR1cm4gMDsKK30KKworaW50IGZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QqIF9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpIHsKKyAgZmV4Y2VwdF90IF9fZmNzcjsKKyAgZmVnZXRlbnYoJl9fZmNzcik7CisgICpfX2ZsYWdwID0gX19mY3NyICYgX19leGNlcHRzICYgRkVfQUxMX0VYQ0VQVDsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZXNldGV4Y2VwdGZsYWcoY29uc3QgZmV4Y2VwdF90KiBfX2ZsYWdwLCBpbnQgX19leGNlcHRzKSB7CisgIGZleGNlcHRfdCBfX2Zjc3I7CisgIGZlZ2V0ZW52KCZfX2Zjc3IpOworICAvKiBFbnN1cmUgdGhhdCBmbGFncyBhcmUgYWxsIGxlZ2FsICovCisgIF9fZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOworICBfX2Zjc3IgJj0gfl9fZXhjZXB0czsKKyAgX19mY3NyIHw9ICpfX2ZsYWdwICYgX19leGNlcHRzOworICBmZXNldGVudigmX19mY3NyKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZXJhaXNlZXhjZXB0KGludCBfX2V4Y2VwdHMpIHsKKyAgZmV4Y2VwdF90IF9fZmNzcjsKKyAgZmVnZXRlbnYoJl9fZmNzcik7CisgIC8qIEVuc3VyZSB0aGF0IGZsYWdzIGFyZSBhbGwgbGVnYWwgKi8KKyAgX19leGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7CisgIC8qIENhdXNlIGJpdCBuZWVkcyB0byBiZSBzZXQgYXMgd2VsbCBmb3IgZ2VuZXJhdGluZyB0aGUgZXhjZXB0aW9uKi8KKyAgX19mY3NyIHw9IF9fZXhjZXB0cyB8IChfX2V4Y2VwdHMgPDwgRkNTUl9DQVVTRV9TSElGVCk7CisgIGZlc2V0ZW52KCZfX2Zjc3IpOworICByZXR1cm4gMDsKK30KKworaW50IGZldGVzdGV4Y2VwdChpbnQgX19leGNlcHRzKSB7CisgIGZleGNlcHRfdCBfX0ZDU1I7CisgIGZlZ2V0ZW52KCZfX0ZDU1IpOworICByZXR1cm4gKF9fRkNTUiAmIF9fZXhjZXB0cyAmIEZFX0FMTF9FWENFUFQpOworfQorCitpbnQgZmVnZXRyb3VuZCh2b2lkKSB7CisgIGZlbnZfdCBfZmNzcjsKKyAgZmVnZXRlbnYoJl9mY3NyKTsKKyAgcmV0dXJuIChfZmNzciAmIEZDU1JfUk1BU0spOworfQorCitpbnQgZmVzZXRyb3VuZChpbnQgX19yb3VuZCkgeworICBmZW52X3QgX2Zjc3I7CisgIGZlZ2V0ZW52KCZfZmNzcik7CisgIF9mY3NyICY9IH5GQ1NSX1JNQVNLOworICBfZmNzciB8PSAoX19yb3VuZCAmIEZDU1JfUk1BU0spOworICBmZXNldGVudigmX2Zjc3IpOworICByZXR1cm4gMDsKK30KKworaW50IGZlaG9sZGV4Y2VwdChmZW52X3QqIF9fZW52cCkgeworICBmZW52X3QgX19lbnY7CisgIGZlZ2V0ZW52KCZfX2Vudik7CisgICpfX2VudnAgPSBfX2VudjsKKyAgX19lbnYgJj0gfihGRV9BTExfRVhDRVBUIHwgRkNTUl9FTkFCTEVfTUFTSyk7CisgIGZlc2V0ZW52KCZfX2Vudik7CisgIHJldHVybiAwOworfQorCitpbnQgZmV1cGRhdGVlbnYoY29uc3QgZmVudl90KiBfX2VudnApIHsKKyAgZmV4Y2VwdF90IF9fZmNzcjsKKyAgZmVnZXRlbnYoJl9fZmNzcik7CisgIGZlc2V0ZW52KF9fZW52cCk7CisgIGZlcmFpc2VleGNlcHQoX19mY3NyICYgRkVfQUxMX0VYQ0VQVCk7CisgIHJldHVybiAwOworfQorCitpbnQgZmVlbmFibGVleGNlcHQoaW50IF9fbWFzaykgeworICBmZW52X3QgX19vbGRfZmNzciwgX19uZXdfZmNzcjsKKyAgZmVnZXRlbnYoJl9fb2xkX2Zjc3IpOworICBfX25ld19mY3NyID0gX19vbGRfZmNzciB8IChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBGQ1NSX0VOQUJMRV9TSElGVDsKKyAgZmVzZXRlbnYoJl9fbmV3X2Zjc3IpOworICByZXR1cm4gKChfX29sZF9mY3NyID4+IEZDU1JfRU5BQkxFX1NISUZUKSAmIEZFX0FMTF9FWENFUFQpOworfQorCitpbnQgZmVkaXNhYmxlZXhjZXB0KGludCBfX21hc2spIHsKKyAgZmVudl90IF9fb2xkX2Zjc3IsIF9fbmV3X2Zjc3I7CisgIGZlZ2V0ZW52KCZfX29sZF9mY3NyKTsKKyAgX19uZXdfZmNzciA9IF9fb2xkX2Zjc3IgJiB+KChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBGQ1NSX0VOQUJMRV9TSElGVCk7CisgIGZlc2V0ZW52KCZfX25ld19mY3NyKTsKKyAgcmV0dXJuICgoX19vbGRfZmNzciA+PiBGQ1NSX0VOQUJMRV9TSElGVCkgJiBGRV9BTExfRVhDRVBUKTsKK30KKworaW50IGZlZ2V0ZXhjZXB0KHZvaWQpIHsKKyAgZmVudl90IF9fZmNzcjsKKyAgZmVnZXRlbnYoJl9fZmNzcik7CisgIHJldHVybiAoKF9fZmNzciAmIEZDU1JfRU5BQkxFX01BU0spID4+IEZDU1JfRU5BQkxFX1NISUZUKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vc2lnbmJpdC5jIGIvbGlibS9zaWduYml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4YmY0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vc2lnbmJpdC5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAzIE1pa2UgQmFyY3JvZnQgPG1pa2VARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJmcG1hdGguaCIKKworaW50IF9fc2lnbmJpdChkb3VibGUgZCkKK3sKKyAgdW5pb24gSUVFRWQyYml0cyB1OworCisgIHUuZCA9IGQ7CisgIHJldHVybiAodS5iaXRzLnNpZ24pOworfQorCitpbnQgX19zaWduYml0ZihmbG9hdCBmKQoreworICB1bmlvbiBJRUVFZjJiaXRzIHU7CisKKyAgdS5mID0gZjsKKyAgcmV0dXJuICh1LmJpdHMuc2lnbik7Cit9CisKKyNpZmRlZiBfX0xQNjRfXworaW50IF9fc2lnbmJpdGwobG9uZyBkb3VibGUgZSkKK3sKKyAgdW5pb24gSUVFRWwyYml0cyB1OworCisgIHUuZSA9IGU7CisgIHJldHVybiAodS5iaXRzLnNpZ24pOworfQorI2Vsc2UgLy8gX19MUDMyX18KK19fd2Vha19yZWZlcmVuY2UoX19zaWduYml0LCBfX3NpZ25iaXRsKTsKKyNlbmRpZiAvLyBfX0xQNjRfXwpkaWZmIC0tZ2l0IGEvbGlibS9zaWduaWZpY2FuZGwuYyBiL2xpYm0vc2lnbmlmaWNhbmRsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVkN2RkNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vc2lnbmlmaWNhbmRsLmMKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorCitsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwobG9uZyBkb3VibGUgeCkgeworICByZXR1cm4gc2NhbGJubCh4LCAtaWxvZ2JsKHgpKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9lX3JlbV9waW8ybC5oIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2VfcmVtX3BpbzJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc4ZDBjMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9lX3JlbV9waW8ybC5oCkBAIC0wLDAgKzEsMTQwIEBACisvKiBGcm9tOiBAKCMpZV9yZW1fcGlvMi5jIDEuNCA5NS8wMS8xOCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RldmVuIEcuIEthcmdsLCBEYXZpZCBTY2h1bHR6LCBCcnVjZSBELiBFdmFucy4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBPcHRpbWl6ZWQgYnkgQnJ1Y2UgRC4gRXZhbnMuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKiBsZDEyOCB2ZXJzaW9uIG9mIF9faWVlZTc1NF9yZW1fcGlvMmwoeCx5KQorICoKKyAqIHJldHVybiB0aGUgcmVtYWluZGVyIG9mIHggcmVtIHBpLzIgaW4geVswXSt5WzFdCisgKiB1c2UgX19rZXJuZWxfcmVtX3BpbzIoKQorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImZwbWF0aC5oIgorCisjZGVmaW5lCUJJQVMJKExEQkxfTUFYX0VYUCAtIDEpCisKKy8qCisgKiBYWFggbmVlZCB0byB2ZXJpZnkgdGhhdCBub256ZXJvIGludGVnZXIgbXVsdGlwbGVzIG9mIHBpLzIgd2l0aGluIHRoZQorICogcmFuZ2UgZ2V0IG5vIGNsb3NlciB0byBhIGxvbmcgZG91YmxlIHRoYW4gMioqLTE0MCwgb3IgdGhhdAorICogaWxvZ2IoeCkgKyBpbG9nYihtaW5fZGVsdGEpIDwgNDUgLSAtMTQwLgorICovCisvKgorICogaW52cGlvMjogIDExMyBiaXRzIG9mIDIvcGkKKyAqIHBpbzJfMTogICBmaXJzdCAgNjggYml0cyBvZiBwaS8yCisgKiBwaW8yXzF0OiAgcGkvMiAtIHBpbzJfMQorICogcGlvMl8yOiAgIHNlY29uZCA2OCBiaXRzIG9mIHBpLzIKKyAqIHBpbzJfMnQ6ICBwaS8yIC0gKHBpbzJfMStwaW8yXzIpCisgKiBwaW8yXzM6ICAgdGhpcmQgIDY4IGJpdHMgb2YgcGkvMgorICogcGlvMl8zdDogIHBpLzIgLSAocGlvMl8xK3BpbzJfMitwaW8yXzMpCisgKi8KKworc3RhdGljIGNvbnN0IGRvdWJsZQoremVybyA9ICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMCwgLyogMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCAqLwordHdvMjQgPSAgMS42Nzc3MjE2MDAwMDAwMDAwMDAwMGUrMDc7IC8qIDB4NDE3MDAwMDAsIDB4MDAwMDAwMDAgKi8KKworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCitpbnZwaW8yID0gIDYuMzY2MTk3NzIzNjc1ODEzNDMwNzU1MzUwNTM0OTAwNTc0N2UtMDFMLAkvKiAgMHgxNDVmMzA2ZGM5Yzg4MmE1M2Y4NGVhZmEzZWE2YS4wcC0xMTMgKi8KK3BpbzJfMSAgPSAgMS41NzA3OTYzMjY3OTQ4OTY2MTkyMjkyOTk0MjUzOTA5NTU1ZSswMEwsCS8qICAweDE5MjFmYjU0NDQyZDE4NDY5ODAwMDAwMDAwMDAwLjBwLTExMiAqLworcGlvMl8xdCA9ICAyLjAyMjI2NjI0ODc5NTk1MDczMjM5OTY4NDYyMDA5NDc1NzdlLTIxTCwJLyogIDB4MTMxOThhMmUwMzcwNzM0NGE0MDkzODIyMjk5ZjMuMHAtMTgxICovCitwaW8yXzIgID0gIDIuMDIyMjY2MjQ4Nzk1OTUwNzMyMzk5NDc3OTE2ODgzNzc1MWUtMjFMLAkvKiAgMHgxMzE5OGEyZTAzNzA3MzQ0YTQwMDAwMDAwMDAwMC4wcC0xODEgKi8KK3BpbzJfMnQgPSAgMi4wNjcwMzIxMDk4MjYzOTg4MjM2NDk2OTAzMDUxNjA0ODQ0ZS00M0wsCS8qICAweDEyNzA0NDUzM2U2M2EwMTA1ZGY1MzFkODljZDkxLjBwLTI1NCAqLworcGlvMl8zICA9ICAyLjA2NzAzMjEwOTgyNjM5ODgyMzY0OTk0NjgxMTAzMjk1OTFlLTQzTCwJLyogIDB4MTI3MDQ0NTMzZTYzYTAxMDVlMDAwMDAwMDAwMDAuMHAtMjU0ICovCitwaW8yXzN0ID0gLTIuNTY1MDU4NzI0NzQ1OTIzODM2MTYyNTQzMzQ5Mjk1OTI4NWUtNjVMOwkvKiAtMHgxNTljNGVjNjRkZGFlYjVmNzg2NzFjYmZiMjIxMC4wcC0zMjcgKi8KKworc3RhdGljIGlubGluZSBfX2Fsd2F5c19pbmxpbmUgaW50CitfX2llZWU3NTRfcmVtX3BpbzJsKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlICp5KQoreworCXVuaW9uIElFRUVsMmJpdHMgdSx1MTsKKwlsb25nIGRvdWJsZSB6LHcsdCxyLGZuOworCWRvdWJsZSB0eFs1XSx0eVszXTsKKwlpbnQ2NF90IG47CisJaW50IGUwLGV4LGksaixueDsKKwlpbnQxNl90IGV4cHNpZ247CisKKwl1LmUgPSB4OworCWV4cHNpZ24gPSB1LnhiaXRzLmV4cHNpZ247CisJZXggPSBleHBzaWduICYgMHg3ZmZmOworCWlmIChleCA8IEJJQVMgKyA0NSB8fCBleCA9PSBCSUFTICsgNDUgJiYKKwkgICAgdS5iaXRzLm1hbmggPCAweDkyMWZiNTQ0NDJkMUxMKSB7CisJICAgIC8qIHx4fCB+PCAyXjQ1KihwaS8yKSwgbWVkaXVtIHNpemUgKi8KKwkgICAgLyogVXNlIGEgc3BlY2lhbGl6ZWQgcmludCgpIHRvIGdldCBmbi4gIEFzc3VtZSByb3VuZC10by1uZWFyZXN0LiAqLworCSAgICBmbiA9IHgqaW52cGlvMisweDEuOHAxMTI7CisJICAgIGZuID0gZm4tMHgxLjhwMTEyOworI2lmZGVmIEhBVkVfRUZGSUNJRU5UX0k2NFJJTlQKKwkgICAgbiAgPSBpNjRyaW50KGZuKTsKKyNlbHNlCisJICAgIG4gID0gZm47CisjZW5kaWYKKwkgICAgciAgPSB4LWZuKnBpbzJfMTsKKwkgICAgdyAgPSBmbipwaW8yXzF0OwkvKiAxc3Qgcm91bmQgZ29vZCB0byAxODAgYml0ICovCisJICAgIHsKKwkJdW5pb24gSUVFRWwyYml0cyB1MjsKKwkgICAgICAgIGludCBleDE7CisJICAgICAgICBqICA9IGV4OworCSAgICAgICAgeVswXSA9IHItdzsKKwkJdTIuZSA9IHlbMF07CisJCWV4MSA9IHUyLnhiaXRzLmV4cHNpZ24gJiAweDdmZmY7CisJICAgICAgICBpID0gai1leDE7CisJICAgICAgICBpZihpPjUxKSB7ICAvKiAybmQgaXRlcmF0aW9uIG5lZWRlZCwgZ29vZCB0byAyNDggKi8KKwkJICAgIHQgID0gcjsKKwkJICAgIHcgID0gZm4qcGlvMl8yOworCQkgICAgciAgPSB0LXc7CisJCSAgICB3ICA9IGZuKnBpbzJfMnQtKCh0LXIpLXcpOworCQkgICAgeVswXSA9IHItdzsKKwkJICAgIHUyLmUgPSB5WzBdOworCQkgICAgZXgxID0gdTIueGJpdHMuZXhwc2lnbiAmIDB4N2ZmZjsKKwkJICAgIGkgPSBqLWV4MTsKKwkJICAgIGlmKGk+MTE5KSB7CS8qIDNyZCBpdGVyYXRpb24gbmVlZCwgMzE2IGJpdHMgYWNjICovCisJCSAgICAJdCAgPSByOwkvKiB3aWxsIGNvdmVyIGFsbCBwb3NzaWJsZSBjYXNlcyAqLworCQkgICAgCXcgID0gZm4qcGlvMl8zOworCQkgICAgCXIgID0gdC13OworCQkgICAgCXcgID0gZm4qcGlvMl8zdC0oKHQtciktdyk7CisJCSAgICAJeVswXSA9IHItdzsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIHlbMV0gPSAoci15WzBdKS13OworCSAgICByZXR1cm4gbjsKKwl9CisgICAgLyoKKyAgICAgKiBhbGwgb3RoZXIgKGxhcmdlKSBhcmd1bWVudHMKKyAgICAgKi8KKwlpZihleD09MHg3ZmZmKSB7CQkvKiB4IGlzIGluZiBvciBOYU4gKi8KKwkgICAgeVswXT15WzFdPXgteDsgcmV0dXJuIDA7CisJfQorICAgIC8qIHNldCB6ID0gc2NhbGJuKHx4fCxpbG9nYih4KS0yMykgKi8KKwl1MS5lID0geDsKKwllMCA9IGV4IC0gQklBUyAtIDIzOwkJLyogZTAgPSBpbG9nYih8eHwpLTIzOyAqLworCXUxLnhiaXRzLmV4cHNpZ24gPSBleCAtIGUwOworCXogPSB1MS5lOworCWZvcihpPTA7aTw0O2krKykgeworCQl0eFtpXSA9IChkb3VibGUpKChpbnQzMl90KSh6KSk7CisJCXogICAgID0gKHotdHhbaV0pKnR3bzI0OworCX0KKwl0eFs0XSA9IHo7CisJbnggPSA1OworCXdoaWxlKHR4W254LTFdPT16ZXJvKSBueC0tOwkvKiBza2lwIHplcm8gdGVybSAqLworCW4gID0gIF9fa2VybmVsX3JlbV9waW8yKHR4LHR5LGUwLG54LDMpOworCXQgPSAobG9uZyBkb3VibGUpdHlbMl0gKyB0eVsxXTsKKwlyID0gdCArIHR5WzBdOworCXcgPSB0eVswXSAtIChyIC0gdCk7CisJaWYoZXhwc2lnbjwwKSB7eVswXSA9IC1yOyB5WzFdID0gLXc7IHJldHVybiAtbjt9CisJeVswXSA9IHI7IHlbMV0gPSB3OyByZXR1cm4gbjsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9pbnZ0cmlnLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvaW52dHJpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNjdkMTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvaW52dHJpZy5jCkBAIC0wLDAgKzEsMTAwIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwOCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgImludnRyaWcuaCIKKworLyoKKyAqIGFzaW5sKCkgYW5kIGFjb3NsKCkKKyAqLworY29uc3QgbG9uZyBkb3VibGUKK3BTMCA9ICAxLjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NzAwMzE0ZS0wMUwsCitwUzEgPSAtNy4zMjgxNjk0NjQxNDU2NjI1MjU3NDUyNzQ3NTQyODYyMjcwOGUtMDFMLAorcFMyID0gIDEuMzQyMTU3MDg3MTQ5OTIzMzQ2MDkwMzAwMzY1NjIxNDM1ODllKzAwTCwKK3BTMyA9IC0xLjMyNDgzMTUxNjc3MTE2NDA5ODA1MDcwMjYxNzkwNzUyMDQwZSswMEwsCitwUzQgPSAgNy42MTIwNjE4MzYxMzYzMjU1ODgyNDQ4NTM0MTE2MjEyMTk4OWUtMDFMLAorcFM1ID0gLTIuNTYxNjU3ODMzMjkwMjM0ODY3NzczODY4MzM5MjgxNDczNzVlLTAxTCwKK3BTNiA9ICA0LjgwNzE4NTg2Mzc0NDQ4NzkzNDExMDE5NDM0NTg1NDEzODU1ZS0wMkwsCitwUzcgPSAtNC40MjUyMzI2NzE2NzAyNDI3OTQxMDIzMDg4NjIzOTc3NDcxOGUtMDNMLAorcFM4ID0gIDEuNDQ1NTE1MzUxODM5MTE0NTgyNTMyMDU2MzgyODA0MTAwNjRlLTA0TCwKK3BTOSA9IC0yLjEwNTU4OTU3OTE2NjAwMjU0MDYxNTkxMDQwNDgyNzA2MTc5ZS0wN0wsCitxUzEgPSAtNC44NDY5MDE2Nzg0ODczOTc1MTU0NDcxNjQ4NTI0NTY5NzQyOGUrMDBMLAorcVMyID0gIDkuOTY2MTkxMTM1MzYxNzI2MTAxMzUwMTY5MjExNDAyMDY5ODBlKzAwTCwKK3FTMyA9IC0xLjEzMTc3ODk1NDI4OTczMDM2NjYwODM2Nzk4NDYxNjQxNDU4ZSswMUwsCitxUzQgPSAgNy43NDAwNDM3NDM4OTQ4ODI2NjE2OTMwNDExNzcxNDY1ODc2MWUrMDBMLAorcVM1ID0gLTMuMjU4NzE5ODYwNTM1MzQwODQ3MDkwMjM1Mzk5MDAzMzk5MDVlKzAwTCwKK3FTNiA9ICA4LjI3ODMwMzE4ODgxMjMyMjA5NzUyNDY5MDIyMzUyOTI4ODY0ZS0wMUwsCitxUzcgPSAtMS4xODc2ODA1MjcwMjk0MjgwNTQyMzMzMDcxNTIwNjM0ODAwNGUtMDFMLAorcVM4ID0gIDguMzI2MDA3NjQ2NjA1MjIzMTMyNjkxMDE1Mzc5MjY1Mzk0NzBlLTAzTCwKK3FTOSA9IC0xLjk5NDA3Mzg0ODgyNjA1NTg2NzA1OTc5NTA0NTY3OTQ3MDA3ZS0wNEw7CisKKy8qCisgKiBhdGFubCgpCisgKi8KK2NvbnN0IGxvbmcgZG91YmxlIGF0YW5oaVtdID0geworCSA0LjYzNjQ3NjA5MDAwODA2MTE2MjE0MjU2MjMxNDYxMjE0Mzk3ZS0wMUwsCisJIDcuODUzOTgxNjMzOTc0NDgzMDk2MTU2NjA4NDU4MTk4NzU2OTllLTAxTCwKKwkgOS44Mjc5MzcyMzI0NzMyOTA2Nzk4NTcxMDYxMTAxNDY2NjAzOGUtMDFMLAorCSAxLjU3MDc5NjMyNjc5NDg5NjYxOTIzMTMyMTY5MTYzOTc1MTQwZSswMEwsCit9OworCitjb25zdCBsb25nIGRvdWJsZSBhdGFubG9bXSA9IHsKKwkgNC44OTUwOTY0MjI1NzMzMzQ5MjY2ODYxODQzNTIyMDI5NzcwNmUtMzZMLAorCSAyLjE2Nzk1MjUzMjUzMDk0NTI1NjE5OTI2MTAwNjUxMDgzODA2ZS0zNUwsCisJLTIuMzEyODg0MzQ1MzgxODM1NjU5MDkzMTk5NTIwOTgwNjYyNzJlLTM1TCwKKwkgNC4zMzU5MDUwNjUwNjE4OTA1MTIzOTg1MjIwMTMwMjE2NzYxM2UtMzVMLAorfTsKKworY29uc3QgbG9uZyBkb3VibGUgYVRbXSA9IHsKKwkgMy4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzEyNWUtMDFMLAorCS0xLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MTgwNDMwZS0wMUwsCisJIDEuNDI4NTcxNDI4NTcxNDI4NTcxNDI4NTcxNDIxMjUyNjk4MjdlLTAxTCwKKwktMS4xMTExMTExMTExMTExMTExMTExMTExMDgzNDQ5MDgxMDE2OWUtMDFMLAorCSA5LjA5MDkwOTA5MDkwOTA5MDkwOTA4NTIyMzU1NzA4NjIzNjgxZS0wMkwsCisJLTcuNjkyMzA3NjkyMzA3NjkyMzA2OTY1NTM4NDQ5MzUzNTcwMjFlLTAyTCwKKwkgNi42NjY2NjY2NjY2NjY2NjY2MDM5MDA5Njc3MzA0NjI1NjA5NmUtMDJMLAorCS01Ljg4MjM1Mjk0MTE3NjQ2NjcxNzA2NTgyOTg1MjA5NjQzNjk0ZS0wMkwsCisJIDUuMjYzMTU3ODk0NzM2NjY0Nzg1MTU4NDcwOTIwMjAzMjc1MDZlLTAyTCwKKwktNC43NjE5MDQ3NjE4OTg1NTUxNzAyMTAyNDQyNDk5MTQzNjE0NGUtMDJMLAorCSA0LjM0NzgyNjA4Njc4Njk1MDg1OTQ4NTMxOTkzNDU4MDk3MDI2ZS0wMkwsCisJLTMuOTk5OTk5OTk2MzI2NjM0NjkzMzA2MzQyMTU5OTExNDIzNjhlLTAyTCwKKwkgMy43MDM3MDM2Mzk4NzQyMzcwMjg5MTI1MDgyOTkxODY1OTcyM2UtMDJMLAorCS0zLjQ0ODI3NDk2NTE1MDQ4MDkwNzI2NjY5OTA3NjEyMzM1OTU0ZS0wMkwsCisJIDMuMjI1Nzk2MjA2ODE0MjAxNDk4NzE5NzM3MTA4NTIyNjg1MjhlLTAyTCwKKwktMy4wMzAyMDc2NzY1NDI2OTI2MTA0MTY0NzU3MDYyNjc3ODA2N2UtMDJMLAorCSAyLjg1NjQxOTc5ODgyNTM0NzgzMjIzNDAzNzE1OTMwOTQ2MTM4ZS0wMkwsCisJLTIuNjk4MjQ4Nzk3MjY3Mzg1NjgxODk5Mjk0NjEzODM3NDEzMjNlLTAyTCwKKwkgMi41NDE5NDY5ODQ5ODgwODU0Mjk1NDE4NzExMDg3MzY3NTc2OWUtMDJMLAorCS0yLjM1MDgzODc5NzA4MTg5MDU5OTI2MTgzMTM4MTMwMTgzMjE1ZS0wMkwsCisJIDIuMDQ4MzIzNTg5OTgxNjUzNjQzNDk5NTczMjUwNjcxMzE0MjhlLTAyTCwKKwktMS41NDQ4OTU1NTQ4ODU0NDM5Nzg1ODUwNzI0ODYxMjM2Mjk1N2UtMDJMLAorCSA4LjY0NDkyMzYwOTg5Mjc4NzYxNDkzMDM3ODYxNTc1MjQ4MDM4ZS0wM0wsCisJLTIuNTg1MjExMjE1OTc2MDk4NzI3Mjc5MTkxNTQ1Njk3NjU0NjllLTAzTCwKK307CisKK2NvbnN0IGxvbmcgZG91YmxlIHBpX2xvID0gOC42NzE4MTAxMzAxMjM3ODEwMjQ3OTcwNDQwMjYwNDMzNTIyNWUtMzVMOwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2ludnRyaWcuaCBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9pbnZ0cmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJmNTk4YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9pbnZ0cmlnLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA4IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJmcG1hdGguaCIKKworI2RlZmluZQlCSUFTCQkoTERCTF9NQVhfRVhQIC0gMSkKKyNkZWZpbmUJTUFOSF9TSVpFCShMREJMX01BTkhfU0laRSArIDEpCisKKy8qIEFwcHJveGltYXRpb24gdGhyZXNob2xkcy4gKi8KKyNkZWZpbmUJQVNJTl9MSU5FQVIJKEJJQVMgLSA1NikJLyogMioqLTU2ICovCisjZGVmaW5lCUFDT1NfQ09OU1QJKEJJQVMgLSAxMTMpCS8qIDIqKi0xMTMgKi8KKyNkZWZpbmUJQVRBTl9DT05TVAkoQklBUyArIDExMykJLyogMioqMTEzICovCisjZGVmaW5lCUFUQU5fTElORUFSCShCSUFTIC0gNTYpCS8qIDIqKi01NiAqLworCisvKiAwLjk1ICovCisjZGVmaW5lCVRIUkVTSAkoKDB4ZTY2NjY2NjY2NjY2NjY2NlVMTD4+KDY0LShNQU5IX1NJWkUtMSkpKXxMREJMX05CSVQpCisKKy8qIENvbnN0YW50cyBzaGFyZWQgYnkgdGhlIGxvbmcgZG91YmxlIGludmVyc2UgdHJpZyBmdW5jdGlvbnMuICovCisjZGVmaW5lCXBTMAlfSXRMX3BTMAorI2RlZmluZQlwUzEJX0l0TF9wUzEKKyNkZWZpbmUJcFMyCV9JdExfcFMyCisjZGVmaW5lCXBTMwlfSXRMX3BTMworI2RlZmluZQlwUzQJX0l0TF9wUzQKKyNkZWZpbmUJcFM1CV9JdExfcFM1CisjZGVmaW5lCXBTNglfSXRMX3BTNgorI2RlZmluZQlwUzcJX0l0TF9wUzcKKyNkZWZpbmUJcFM4CV9JdExfcFM4CisjZGVmaW5lCXBTOQlfSXRMX3BTOQorI2RlZmluZQlxUzEJX0l0TF9xUzEKKyNkZWZpbmUJcVMyCV9JdExfcVMyCisjZGVmaW5lCXFTMwlfSXRMX3FTMworI2RlZmluZQlxUzQJX0l0TF9xUzQKKyNkZWZpbmUJcVM1CV9JdExfcVM1CisjZGVmaW5lCXFTNglfSXRMX3FTNgorI2RlZmluZQlxUzcJX0l0TF9xUzcKKyNkZWZpbmUJcVM4CV9JdExfcVM4CisjZGVmaW5lCXFTOQlfSXRMX3FTOQorI2RlZmluZQlhdGFuaGkJX0l0TF9hdGFuaGkKKyNkZWZpbmUJYXRhbmxvCV9JdExfYXRhbmxvCisjZGVmaW5lCWFUCV9JdExfYVQKKyNkZWZpbmUJcGlfbG8JX0l0TF9waV9sbworCisjZGVmaW5lCXBpbzJfaGkJYXRhbmhpWzNdCisjZGVmaW5lCXBpbzJfbG8JYXRhbmxvWzNdCisjZGVmaW5lCXBpbzRfaGkJYXRhbmhpWzFdCisKKy8qIENvbnN0YW50cyBzaGFyZWQgYnkgdGhlIGxvbmcgZG91YmxlIGludmVyc2UgdHJpZyBmdW5jdGlvbnMuICovCitleHRlcm4gY29uc3QgbG9uZyBkb3VibGUgcFMwLCBwUzEsIHBTMiwgcFMzLCBwUzQsIHBTNSwgcFM2LCBwUzcsIHBTOCwgcFM5OworZXh0ZXJuIGNvbnN0IGxvbmcgZG91YmxlIHFTMSwgcVMyLCBxUzMsIHFTNCwgcVM1LCBxUzYsIHFTNywgcVM4LCBxUzk7CitleHRlcm4gY29uc3QgbG9uZyBkb3VibGUgYXRhbmhpW10sIGF0YW5sb1tdLCBhVFtdOworZXh0ZXJuIGNvbnN0IGxvbmcgZG91YmxlIHBpX2xvOworCitzdGF0aWMgaW5saW5lIGxvbmcgZG91YmxlCitQKGxvbmcgZG91YmxlIHgpCit7CisKKwlyZXR1cm4gKHggKiAocFMwICsgeCAqIChwUzEgKyB4ICogKHBTMiArIHggKiAocFMzICsgeCAqIFwKKwkJKHBTNCArIHggKiAocFM1ICsgeCAqIChwUzYgKyB4ICogKHBTNyArIHggKiAocFM4ICsgeCAqIFwKKwkJcFM5KSkpKSkpKSkpKTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGRvdWJsZQorUShsb25nIGRvdWJsZSB4KQoreworCisJcmV0dXJuICgxLjAgKyB4ICogKHFTMSArIHggKiAocVMyICsgeCAqIChxUzMgKyB4ICogKHFTNCArIHggKiBcCisJCShxUzUgKyB4ICogKHFTNiArIHggKiAocVM3ICsgeCAqIChxUzggKyB4ICogcVM5KSkpKSkpKSkpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgZG91YmxlCitUX2V2ZW4obG9uZyBkb3VibGUgeCkKK3sKKworCXJldHVybiAoYVRbMF0gKyB4ICogKGFUWzJdICsgeCAqIChhVFs0XSArIHggKiAoYVRbNl0gKyB4ICogXAorCQkoYVRbOF0gKyB4ICogKGFUWzEwXSArIHggKiAoYVRbMTJdICsgeCAqIChhVFsxNF0gKyB4ICogXAorCQkoYVRbMTZdICsgeCAqIChhVFsxOF0gKyB4ICogKGFUWzIwXSArIHggKiBhVFsyMl0pKSkpKSkpKSkpKTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGRvdWJsZQorVF9vZGQobG9uZyBkb3VibGUgeCkKK3sKKworCXJldHVybiAoYVRbMV0gKyB4ICogKGFUWzNdICsgeCAqIChhVFs1XSArIHggKiAoYVRbN10gKyB4ICogXAorCQkoYVRbOV0gKyB4ICogKGFUWzExXSArIHggKiAoYVRbMTNdICsgeCAqIChhVFsxNV0gKyB4ICogXAorCQkoYVRbMTddICsgeCAqIChhVFsxOV0gKyB4ICogKGFUWzIxXSArIHggKiBhVFsyM10pKSkpKSkpKSkpKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9rX2Nvc2wuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9rX2Nvc2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjRhYTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2tfY29zbC5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qIEZyb206IEAoIylrX2Nvcy5jIDEuMyA5NS8wMS8xOCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RldmVuIEcuIEthcmdsLCBEYXZpZCBTY2h1bHR6LCBCcnVjZSBELiBFdmFucy4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qCisgKiBsZDEyOCB2ZXJzaW9uIG9mIGtfY29zLmMuICBTZWUgLi4vc3JjL2tfY29zLmMgZm9yIG1vc3QgY29tbWVudHMuCisgKi8KKworI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisvKgorICogRG9tYWluIFstMC43ODU0LCAwLjc4NTRdLCByYW5nZSB+Wy0xLjgwZS0zNywgMS43OWUtMzddOgorICogfGNvcyh4KSAtIGMoeCkpfCA8IDIqKi0xMjIuMAorICoKKyAqIDExMy1iaXQgcHJlY2lzaW9uIHJlcXVpcmVzIG1vcmUgY2FyZSB0aGFuIDY0LWJpdCBwcmVjaXNpb24sIHNpbmNlCisgKiBzaW1wbGUgbWV0aG9kcyBnaXZlIGEgbWluaW1heCBwb2x5bm9taWFsIHdpdGggY29lZmZpY2llbnQgZm9yIHheMgorICogdGhhdCBpcyAxIHVscCBiZWxvdyAwLjUsIGJ1dCB3ZSB3YW50IGl0IHRvIGJlIHByZWNpc2VseSAwLjUuICBTZWUKKyAqIC4uL2xkODAva19jb3NsLmMgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworc3RhdGljIGNvbnN0IGRvdWJsZQorb25lID0gMS4wOworCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK0MxID0gIDAuMDQxNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTg0MjQ2NzFMLAorQzIgPSAtMC4wMDEzODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4NjM0OTA4OTM3MzJMLAorQzMgPSAgMC4wMDAwMjQ4MDE1ODczMDE1ODczMDE1ODczMDE1ODYwMDc5NTMwNDkxNDIxMEwsCitDNCA9IC0wLjI3NTU3MzE5MjIzOTg1ODkwNjUyNTU0NzQ5NDcwNzg5MzQyODQzMjRlLTZMLAorQzUgPSAgMC4yMDg3Njc1Njk4Nzg2ODA5ODk3NjU5MjI1MzEzMTM2NDAwNzkzOTQ4ZS04TCwKK0M2ID0gLTAuMTE0NzA3NDU1OTc3Mjk3MjMxNTgxNzE0OTk4NjgxMjAzMTIwNDc3NWUtMTBMLAorQzcgPSAgMC40Nzc5NDc3MzMyMzg2ODA4OTc2ODc1NDU3OTM3MjUyMTIwMjkzNDAwZS0xM0w7CisKK3N0YXRpYyBjb25zdCBkb3VibGUKK0M4ID0gLTAuMTU2MTkyMDY5NjcyMTUwNzkyOTUxNjcxODMwNzgyMDk1ODExOTg2OGUtMTUsCitDOSA9ICAwLjQxMTAzMTc0MTM3NDQ1OTQ5NzE0NzU5NDE1NTc2MDc4MDQ1MDgwMzllLTE4LAorQzEwID0gLTAuODg5NjU5MjQ2NzE5MTkzODgwMzI4ODUyMTk1ODMxMzkyMDE1NjQwOWUtMjEsCitDMTEgPSAgMC4xNjAxMDYxNDM1Nzk0NTM1MTM4MjQ0MzQ2MjU2MDY1MTkyNzgyNTgxZS0yMzsKKworbG9uZyBkb3VibGUKK19fa2VybmVsX2Nvc2wobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkKK3sKKwlsb25nIGRvdWJsZSBoeix6LHIsdzsKKworCXogID0geCp4OworCXIgID0geiooQzEreiooQzIreiooQzMreiooQzQreiooQzUreiooQzYreiooQzcrCisJICAgIHoqKEM4K3oqKEM5K3oqKEMxMCt6KkMxMSkpKSkpKSkpKSk7CisJaHogPSAwLjUqejsKKwl3ICA9IG9uZS1oejsKKwlyZXR1cm4gdyArICgoKG9uZS13KS1oeikgKyAoeipyLXgqeSkpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2tfc2lubC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2tfc2lubC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNDE1YzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgva19zaW5sLmMKQEAgLTAsMCArMSw1OSBAQAorLyogRnJvbTogQCgjKWtfc2luLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBTdGV2ZW4gRy4gS2FyZ2wsIERhdmlkIFNjaHVsdHosIEJydWNlIEQuIEV2YW5zLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIGxkMTI4IHZlcnNpb24gb2Yga19zaW4uYy4gIFNlZSAuLi9zcmMva19zaW4uYyBmb3IgbW9zdCBjb21tZW50cy4KKyAqLworCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBkb3VibGUKK2hhbGYgPSAgMC41OworCisvKgorICogRG9tYWluIFstMC43ODU0LCAwLjc4NTRdLCByYW5nZSB+Wy0xLjUzZS0zNywgMS42NTllLTM3XQorICogfHNpbih4KS94IC0gcyh4KXwgPCAyKiotMTIyLjEKKyAqCisgKiBTZWUgLi4vbGQ4MC9rX2Nvc2wuYyBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBwb2x5bm9taWFsLgorICovCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK1MxID0gLTAuMTY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MDY3MzI0MTYxMTY1NThMLAorUzIgPSAgMC4wMDgzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxMTM1NDA0ODUxMjg4MjcwMDQ3TCwKK1MzID0gLTAuMDAwMTk4NDEyNjk4NDEyNjk4NDEyNjk4NDEyNjk4Mzk5MzU3ODUzMjU2MzgzMTA0Mjg3MTdMLAorUzQgPSAgMC4yNzU1NzMxOTIyMzk4NTg5MDY1MjU1NzMxNjA1MzAzOTk0NjI2ODMzMzIzMTIwNTY4NmUtNUwsCitTNSA9IC0wLjI1MDUyMTA4Mzg1NDQxNzE4Nzc1MDQ4MjE0ODI2Mzg0MzEyMjUzODYyOTMwMDY0NzQ1ZS03TCwKK1M2ID0gIDAuMTYwNTkwNDM4MzY4MjE2MTQ1OTY1NzE4MzIxOTQ1MjQzOTI1ODEwODI0NDQ4MDU3MjllLTlMLAorUzcgPSAtMC43NjQ3MTYzNzMxODE5ODE1MTgwNzA2MzM4Nzk1NDkzOTIxMzI4NzQ4ODIxNjMwMzc2OGUtMTJMLAorUzggPSAgMC4yODExNDU3MjU0MzQ1MTI5MjYyNTAyNDk2NzE3NDYzODQ3NzI4MzE4NzM5NzYyMTMwM2UtMTRMOworCitzdGF0aWMgY29uc3QgZG91YmxlCitTOSAgPSAtMC44MjIwNjM1MjQ1ODM0ODk0NzgxMjUxMjEyMjE2MzQ0NjIwMjQ5ODAwNTE1NDI5Njg2M2UtMTcsCitTMTAgPSAgMC4xOTU3Mjk0MDAxMTkwNjEwOTQxODA4MDYwOTkyODMzNDM4MDU2MDEzNTM1ODM4NTI1NmUtMTksCitTMTEgPSAtMC4zODY4MDgxMzM3OTcwMTk2Njk3MDY3MzcyNDI5OTIwNzQ4MDk2NTQ1MjYxNjkxMTQyMGUtMjIsCitTMTIgPSAgMC42NDAzODE1MDA3ODY3MTg3Mjc5NjY3ODU2OTU4NjMxNTg4MTAyMDY1OTkxMjEzOTQxMmUtMjU7CisKK2xvbmcgZG91YmxlCitfX2tlcm5lbF9zaW5sKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHksIGludCBpeSkKK3sKKwlsb25nIGRvdWJsZSB6LHIsdjsKKworCXoJPSAgeCp4OworCXYJPSAgeip4OworCXIJPSAgUzIreiooUzMreiooUzQreiooUzUreiooUzYreiooUzcreiooUzgrCisJICAgIHoqKFM5K3oqKFMxMCt6KihTMTEreipTMTIpKSkpKSkpKSk7CisJaWYoaXk9PTApIHJldHVybiB4K3YqKFMxK3oqcik7CisJZWxzZSAgICAgIHJldHVybiB4LSgoeiooaGFsZip5LXYqcikteSktdipTMSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgva190YW5sLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgva190YW5sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlYzBiOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9rX3RhbmwuYwpAQCAtMCwwICsxLDExOSBAQAorLyogRnJvbTogQCgjKWtfdGFuLmMgMS41IDA0LzA0LzIyIFNNSSAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IDIwMDQgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBTdGV2ZW4gRy4gS2FyZ2wsIERhdmlkIFNjaHVsdHosIEJydWNlIEQuIEV2YW5zLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogbGQxMjggdmVyc2lvbiBvZiBrX3Rhbi5jLiAgU2VlIC4uL3NyYy9rX3Rhbi5jIGZvciBtb3N0IGNvbW1lbnRzLgorICovCisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKKy8qCisgKiBEb21haW4gWy0wLjY3NDM0LCAwLjY3NDM0XSwgcmFuZ2UgflstMy4zN2UtMzYsIDEuOTgyZS0zN10KKyAqIHx0YW4oeCkveCAtIHQoeCl8IDwgMioqLTExNy44IChYWFggc2hvdWxkIGJlIH4xZS0zNykKKyAqCisgKiBTZWUgLi4vbGQ4MC9rX2Nvc2wuYyBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBwb2x5bm9taWFsLgorICovCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK1QzID0gMHgxLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTNwLTJMLAorVDUgPSAweDEuMTExMTExMTExMTExMTExMTExMTExMTExMWViNXAtM0wsCitUNyA9IDB4MS5iYTFiYTFiYTFiYTFiYTFiYTFiYTFiNjk0Y2Q2cC01TCwKK1Q5ID0gMHgxLjY2NGY0ODgyYzEwZjlmMzJkNmJiZTA5ZDhiY2RwLTZMLAorVDExID0gMHgxLjIyNmUzNTVlNmMyM2M4ZjViNGY1NzYyMzIyZWVwLTdMLAorVDEzID0gMHgxLmQ2ZDNkMGUxNTdkZGZiNWZlZDhlODRlMjdiMzdwLTlMLAorVDE1ID0gMHgxLjdkYTM2NDUyYjc1ZTJiNWZjZTllZTdjMmM5MmVwLTEwTCwKK1QxNyA9IDB4MS4zNTU4MjQ4MDM2NzQ0NzdkZmNmNzI2NjQ5ZWZlcC0xMUwsCitUMTkgPSAweDEuZjU3ZDc3MzRkMTY1NmUwYWNlYjcxNmY2MTRjMnAtMTNMLAorVDIxID0gMHgxLjk2N2UxOGFmY2IxODBlZDk0MmRmZGM1MThkNmNwLTE0TCwKK1QyMyA9IDB4MS40OTdkOGVlYTIxZTk1YmM3ZTJhYTc5YjlmMmNkcC0xNUwsCitUMjUgPSAweDEuMGIxMzJkMzlmMDU1YzgxYmU0OWVmZjdhZmQ1MHAtMTZMLAorVDI3ID0gMHgxLmIwZjcyZDMzZWZmN2JmYTJmYmMxMDU5ZDkwYjZwLTE4TCwKK1QyOSA9IDB4MS41ZWYyZGFmMjFkMTExM2RmMzhkMGZiYzAwMjY3cC0xOUwsCitUMzEgPSAweDEuMWM3N2Q2ZWFjMDIzNDk4OGNkYWEwNGM5NjYyNnAtMjBMLAorVDMzID0gMHgxLmNkMmE1YTI5MmIxODBlMGJkZDcwMTA1N2RmZTNwLTIyTCwKK1QzNSA9IDB4MS43NWM3MzU3ZDAyOThjMDFhMzFkMGE2ZjdkNTE4cC0yM0wsCitUMzcgPSAweDEuMmYzMTkwZjQ3MThhOWE1MjBmOThmNTAwODFmY3AtMjRMLAorcGlvNCA9IDB4MS45MjFmYjU0NDQyZDE4NDY5ODk4Y2M1MTcwMWI4cC0xTCwKK3BpbzRsbyA9IDB4MS5jZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYwcC0xMTZMOworCitzdGF0aWMgY29uc3QgZG91YmxlCitUMzkgPSAgMC4wMDAwMDAwMjg0NDMzODkxMjEzMTgzNTIsCS8qICAweDFlOGE3NTkyOTc3OTM4LjBwLTc4ICovCitUNDEgPSAgMC4wMDAwMDAwMTE5ODEwMTMxMDIwMDE5NzMsCS8qICAweDE5YmFhMWIxMjIzMjE5LjBwLTc5ICovCitUNDMgPSAgMC4wMDAwMDAwMDM4MzAzNTc4MDQ0OTU4MDcwLAkvKiAgMHgxMDczODVkZmIyNDUyOS4wcC04MCAqLworVDQ1ID0gIDAuMDAwMDAwMDAzNDY2NDM3ODIxNjkwOTg5MywJLyogIDB4MWRjNmM3MDJhMDUyNjIuMHAtODEgKi8KK1Q0NyA9IC0wLjAwMDAwMDAwMTUwOTA2NDE3MDE5OTc3ODUsCS8qIC0weDE5ZWNlZjM1NjllYmI2LjBwLTgyICovCitUNDkgPSAgMC4wMDAwMDAwMDI5NDQ5NTUyMzAwNDgzOTUyLAkvKiAgMHgxOTRjMDY2OGRhNzg2YS4wcC04MSAqLworVDUxID0gLTAuMDAwMDAwMDAyMjAwNjk5NTcwNjA5NzcxMSwJLyogLTB4MTJlNzYzYjg4NDUyNjguMHAtODEgKi8KK1Q1MyA9ICAwLjAwMDAwMDAwMTU0NjgyMDA5MTMxOTY2MTIsCS8qICAweDFhOTJmYzk4YzI5NTU0LjBwLTgyICovCitUNTUgPSAtMC4wMDAwMDAwMDA2MTMxMTYxMzM4Njg0OTY3NCwJLyogLTB4MTUxMTA2Y2JjNzc5YTkuMHAtODMgKi8KK1Q1NyA9ICAxLjQ5MTI0Njk2ODE1MDgwMTJlLTEwOwkJLyogIDB4MTQ3ZWRiZGJhNmY0M2EuMHAtODUgKi8KKworbG9uZyBkb3VibGUKK19fa2VybmVsX3RhbmwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSwgaW50IGl5KSB7CisJbG9uZyBkb3VibGUgeiwgciwgdiwgdywgczsKKwlsb25nIGRvdWJsZSBvc2lnbjsKKwlpbnQgaTsKKworCWl5ID0gKGl5ID09IDEgPyAtMSA6IDEpOwkvKiBYWFggcmVjb3ZlciBvcmlnaW5hbCBpbnRlcmZhY2UgKi8KKwlvc2lnbiA9ICh4ID49IDAgPyAxLjAgOiAtMS4wKTsJLyogWFhYIHNsb3csIHByb2JhYmx5IHdyb25nIGZvciAtMCAqLworCWlmIChmYWJzbCh4KSA+PSAwLjY3NDM0KSB7CisJCWlmICh4IDwgMCkgeworCQkJeCA9IC14OworCQkJeSA9IC15OworCQl9CisJCXogPSBwaW80IC0geDsKKwkJdyA9IHBpbzRsbyAtIHk7CisJCXggPSB6ICsgdzsKKwkJeSA9IDAuMDsKKwkJaSA9IDE7CisJfSBlbHNlCisJCWkgPSAwOworCXogPSB4ICogeDsKKwl3ID0geiAqIHo7CisJciA9IFQ1ICsgdyAqIChUOSArIHcgKiAoVDEzICsgdyAqIChUMTcgKyB3ICogKFQyMSArCisJICAgIHcgKiAoVDI1ICsgdyAqIChUMjkgKyB3ICogKFQzMyArCisJICAgIHcgKiAoVDM3ICsgdyAqIChUNDEgKyB3ICogKFQ0NSArIHcgKiAoVDQ5ICsgdyAqIChUNTMgKworCSAgICB3ICogVDU3KSkpKSkpKSkpKSkpOworCXYgPSB6ICogKFQ3ICsgdyAqIChUMTEgKyB3ICogKFQxNSArIHcgKiAoVDE5ICsgdyAqIChUMjMgKworCSAgICB3ICogKFQyNyArIHcgKiAoVDMxICsgdyAqIChUMzUgKworCSAgICB3ICogKFQzOSArIHcgKiAoVDQzICsgdyAqIChUNDcgKyB3ICogKFQ1MSArIHcgKiBUNTUpKSkpKSkpKSkpKSk7CisJcyA9IHogKiB4OworCXIgPSB5ICsgeiAqIChzICogKHIgKyB2KSArIHkpOworCXIgKz0gVDMgKiBzOworCXcgPSB4ICsgcjsKKwlpZiAoaSA9PSAxKSB7CisJCXYgPSAobG9uZyBkb3VibGUpIGl5OworCQlyZXR1cm4gb3NpZ24gKgorCQkJKHYgLSAyLjAgKiAoeCAtICh3ICogdyAvICh3ICsgdikgLSByKSkpOworCX0KKwlpZiAoaXkgPT0gMSkKKwkJcmV0dXJuIHc7CisJZWxzZSB7CisJCS8qCisJCSAqIGlmIGFsbG93IGVycm9yIHVwIHRvIDIgdWxwLCBzaW1wbHkgcmV0dXJuCisJCSAqIC0xLjAgLyAoeCtyKSBoZXJlCisJCSAqLworCQkvKiBjb21wdXRlIC0xLjAgLyAoeCtyKSBhY2N1cmF0ZWx5ICovCisJCWxvbmcgZG91YmxlIGEsIHQ7CisJCXogPSB3OworCQl6ID0geiArIDB4MXAzMiAtIDB4MXAzMjsKKwkJdiA9IHIgLSAoeiAtIHgpOwkvKiB6K3YgPSByK3ggKi8KKwkJdCA9IGEgPSAtMS4wIC8gdzsJLyogYSA9IC0xLjAvdyAqLworCQl0ID0gdCArIDB4MXAzMiAtIDB4MXAzMjsKKwkJcyA9IDEuMCArIHQgKiB6OworCQlyZXR1cm4gdCArIGEgKiAocyArIHQgKiB2KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19leHAybC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L3NfZXhwMmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWQ1MTRjCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L3NfZXhwMmwuYwpAQCAtMCwwICsxLDQyNyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlICJmcG1hdGguaCIKKyNpbmNsdWRlICJtYXRoLmgiCisKKyNkZWZpbmUJVEJMQklUUwk3CisjZGVmaW5lCVRCTFNJWkUJKDEgPDwgVEJMQklUUykKKworI2RlZmluZQlCSUFTCShMREJMX01BWF9FWFAgLSAxKQorI2RlZmluZQlFWFBNQVNLCShCSUFTICsgTERCTF9NQVhfRVhQKQorCitzdGF0aWMgdm9sYXRpbGUgbG9uZyBkb3VibGUKKyAgICBodWdlICAgICAgPSAweDFwMTAwMDBMLAorICAgIHR3b20xMDAwMCA9IDB4MXAtMTAwMDBMOworCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKKyAgICBQMSAgICAgICAgPSAweDEuNjJlNDJmZWZhMzllZjM1NzkzYzc2NzMwMDdlNnAtMUwsCisgICAgUDIJICAgICAgPSAweDEuZWJmYmRmZjgyYzU4ZWE4NmYxNmIwNmVjOTczNnAtM0wsCisgICAgUDMgICAgICAgID0gMHgxLmM2YjA4ZDcwNGEwYmY4YjMzYTc2MmJhZDM0NTlwLTVMLAorICAgIFA0ICAgICAgICA9IDB4MS4zYjJhYjZmYmE0ZTc3MjljY2JiZTBiNGYzZmMycC03TCwKKyAgICBQNSAgICAgICAgPSAweDEuNWQ4N2ZlNzhhNjczMTEwNzFkZWUxM2ZkMTFkOXAtMTBMLAorICAgIFA2ICAgICAgICA9IDB4MS40MzA5MTJmODZjNzg3NmY0YjY2M2IyM2M1ZmU1cC0xM0w7CisKK3N0YXRpYyBjb25zdCBkb3VibGUKKyAgICBQNyAgICAgICAgPSAweDEuZmZjYmZjNTg4YjA0MXAtMTcsCisgICAgUDggICAgICAgID0gMHgxLjYyYzAyMjNhNWM3YzdwLTIwLAorICAgIFA5ICAgICAgICA9IDB4MS5iNTI1NDFmZjU5NzEzcC0yNCwKKyAgICBQMTAgICAgICAgPSAweDEuZTRjZjU2YTM5MWUyMnAtMjgsCisgICAgcmVkdXggICAgID0gMHgxLjhwMTEyIC8gVEJMU0laRTsKKworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlIHRibFtUQkxTSVpFXSA9IHsKKwkweDEuNmEwOWU2NjdmM2JjYzkwOGIyZmIxMzY2ZGZlYXAtMUwsCisJMHgxLjZjMDEyNzUwYmRhYmVlZDc2YTk5ODAwZjRlZGVwLTFMLAorCTB4MS42ZGZiMjNjNjUxYTJlZjIyMGUyY2JlMWJjMGQ0cC0xTCwKKwkweDEuNmZmN2RmOTUxOTQ4M2NmODdlMWI0ZjNlMWU5OHAtMUwsCisJMHgxLjcxZjc1ZThlYzVmNzNkZDIzNzBmMmVmMGIxNDhwLTFMLAorCTB4MS43M2Y5YTQ4YTU4MTczYmQ1YzlhNGU2OGFiMDc0cC0xTCwKKwkweDEuNzVmZWI1NjQyNjdjOGJmNmU5YWEzM2E0ODlhOHAtMUwsCisJMHgxLjc4MDY5NGZkZTVkM2Y2MTlhZTAyODA4NTkyYTRwLTFMLAorCTB4MS43YTExNDczZWIwMTg2ZDdkNTEwMjNmNmNjYjFhcC0xTCwKKwkweDEuN2MxZWQwMTMwYzEzMjdjNDkzMzQ0NTkzNzhkZXAtMUwsCisJMHgxLjdlMmYzMzZjZjRlNjIxMDVkMDJiYTE1Nzk3NTZwLTFMLAorCTB4MS44MDQyNzU0M2UxYTExYjYwZGU2NzY0OWEzODQycC0xTCwKKwkweDEuODI1ODk5OTRjY2UxMjhhY2Y4OGFmYWIzNDkyOHAtMUwsCisJMHgxLjg0NzFhNDYyM2M3YWNjZTUyZjZiOTdjNjQ0NGNwLTFMLAorCTB4MS44NjhkOTliNDQ5MmVjODBlNDFkOTBhYzI1NTZhcC0xTCwKKwkweDEuODhhYzdkOThhNjY5OTY2NTMwYmNkZjJkNGNjMHAtMUwsCisJMHgxLjhhY2U1NDIyYWEwZGI1YmE3YzU1YTE5MmM2NDhwLTFMLAorCTB4MS44Y2YzMjE2YjU0NDhiZWYyYWExY2QxNjFjNTdhcC0xTCwKKwkweDEuOGYxYWU5OTE1NzczNjJiOTgyNzQ1YzcyZWRkYXAtMUwsCisJMHgxLjkxNDViMGI5MWZmYzU4OGE2MWI0NjlmNmI2YTBwLTFMLAorCTB4MS45MzczN2IwY2RjNWU0ZjQ1MDFjM2YyNTQwYWU4cC0xTCwKKwkweDEuOTVhNDRjYmM4NTIwZWU5YjQ4MzY5NWEwZTdmZXAtMUwsCisJMHgxLjk3ZDgyOWZkZTRlNGY4YjllOTIwZjkxZThlYjZwLTFMLAorCTB4MS45YTBmMTcwY2EwN2I5YmEzMTA5YjhjNDY3ODQ0cC0xTCwKKwkweDEuOWM0OTE4MmEzZjA5MDFjN2M0NmIwNzFmMjhkZXAtMUwsCisJMHgxLjllODYzMTllMzIzMjMxODI0Y2E3OGU2NGM0NjJwLTFMLAorCTB4MS5hMGM2NjdiNWRlNTY0YjI5YWRhOGI4Y2FiYmFjcC0xTCwKKwkweDEuYTMwOWJlYzRhMmQzMzU4YzE3MWY3NzBkYjFmNHAtMUwsCisJMHgxLmE1NTAzYjIzZTI1NWM4YjQyNDQ5MWNhZjg4Y2NwLTFMLAorCTB4MS5hNzk5ZTEzMzBiMzU4NmYyZGZiMmIxNThmMzFlcC0xTCwKKwkweDEuYTllNmI1NTc5ZmRiZjQzZWIyNDNiZGZmNTNhMnAtMUwsCisJMHgxLmFjMzZiYmZkM2YzNzljMGRiOTY2YTMxMjY5ODhwLTFMLAorCTB4MS5hZTg5Zjk5NWFkM2FkNWU4NzM0ZDE3NzMxYzgwcC0xTCwKKwkweDEuYjBlMDcyOThkYjY2NTkwODQyYWNkZmM2ZmI0ZXAtMUwsCisJMHgxLmIzM2EyYjg0ZjE1ZmFmNmJmZDBlN2JkOTQxYjBwLTFMLAorCTB4MS5iNTk3MjhkZTU1OTM5OGUzODgxMTExNjQ4NzM4cC0xTCwKKwkweDEuYjdmNzZmMmZiNWU0NmVhYTdiMDgxYWI1M2ZmNnAtMUwsCisJMHgxLmJhNWIwMzBhMTA2NDk4NDBjYjNjNmFmNWI3NGNwLTFMLAorCTB4MS5iY2MxZTkwNGJjMWQyMjQ3YmEwZjQ1YjNkMDZjcC0xTCwKKwkweDEuYmYyYzI1YmQ3MWUwODg0MDhkNzAyNTE5MGNkMHAtMUwsCisJMHgxLmMxOTliZGQ4NTUyOWMyMjIwY2IxMmEwOTE2YmFwLTFMLAorCTB4MS5jNDBhYjVmZmZkMDdhNmQxNGRmODIwZjE3ZGVhcC0xTCwKKwkweDEuYzY3ZjEyZTU3ZDE0YjRhMjEzN2ZkMjBmMmEyNnAtMUwsCisJMHgxLmM4ZjZkOTQwNmU3YjUxMWFjYmM0ODgwNWMzZjZwLTFMLAorCTB4MS5jYjcyMGRjZWY5MDY5MTUwM2NiZDFlOTQ5ZDBhcC0xTCwKKwkweDEuY2RmMGI1NTVkYzNmOWM0NGY4OTU4ZmFjNGYxMnAtMUwsCisJMHgxLmQwNzJkNGEwNzg5N2I4ZDBmMjJmMjFhMTM3OTJwLTFMLAorCTB4MS5kMmY4NzA4MGQ4OWYxOGFkZTEyMzk4OWVhNTBlcC0xTCwKKwkweDEuZDU4MThkY2ZiYTQ4NzI1ZGEwNWFlYjY2ZGZmOHAtMUwsCisJMHgxLmQ4MGUzMTZjOTgzOTdiYjg0ZjlkMDQ4ODA3YTBwLTFMLAorCTB4MS5kYTllNjAzZGIzMjg1NzA4YzAxYTViNmQ0ODBjcC0xTCwKKwkweDEuZGQzMjFmMzAxYjQ2MDRiNjk1ZGUzYzA2MzBjMHAtMUwsCisJMHgxLmRmYzk3MzM3YjliNWViOTY4Y2FjMzllZDI4NGNwLTFMLAorCTB4MS5lMjY0NjE0ZjVhMTI4YTEyNzYxZmExN2FkYzc0cC0xTCwKKwkweDEuZTUwMmVlNzhiM2ZmNjI3M2QxMzAxNTM5OTJkMHAtMUwsCisJMHgxLmU3YTUxZmJjNzRjODM0YjU0OGIyODMyMzc4YTRwLTFMLAorCTB4MS5lYTRhZmEyYTQ5MGQ5ODU4ZjczYTE4ZjVkYWI0cC0xTCwKKwkweDEuZWNmNDgyZDhlNjdmMDhkYjAzMTJmYjk0OWQ1MHAtMUwsCisJMHgxLmVmYTFiZWU2MTVhMjc3NzFmZDIxYTkyZGFiYjZwLTFMLAorCTB4MS5mMjUyYjM3NmJiYTk3NGU4Njk2ZmMzNjM4ZjI0cC0xTCwKKwkweDEuZjUwNzY1YjZlNDU0MDY3NGY4NGI3NjI4NjFhNnAtMUwsCisJMHgxLmY3YmZkYWQ5Y2JlMTM4OTEzYjRiZmU3MmJkNzhwLTFMLAorCTB4MS5mYTdjMTgxOWU5MGQ4MmU5MGE3ZTc0YjI2MzYwcC0xTCwKKwkweDEuZmQzYzIyYjhmNzFmMTA5NzViYTRiMzJiZDAwNnAtMUwsCisJMHgxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBwKzBMLAorCTB4MS4wMTYzZGE5ZmIzMzM1NmQ4NGE2NmFlMzM2ZTk4cCswTCwKKwkweDEuMDJjOWEzZTc3ODA2MGVlNmY3Y2FjYTRmN2ExOHArMEwsCisJMHgxLjA0MzE1ZTg2ZTdmODRiZDczOGY5YTIwZGE0NDJwKzBMLAorCTB4MS4wNTliMGQzMTU4NTc0M2FlN2M1NDhlYjY4YzZhcCswTCwKKwkweDEuMDcwNmIyOWRkZjZkZGM2ZGM0MDNhOWQ4N2IxZXArMEwsCisJMHgxLjA4NzQ1MTg3NTliYzgwOGMzNWYyNWQ5NDI4NTZwKzBMLAorCTB4MS4wOWUzZWNhYzZmMzgzNDUyMWUwNjBjNTg0ZDVjcCswTCwKKwkweDEuMGI1NTg2Y2Y5ODkwZjYyOThiOTJiNzE4NDIwMHArMEwsCisJMHgxLjBjYzkyMmI3MjQ3Zjc0MDdiNzA1Yjg5M2RiZGVwKzBMLAorCTB4MS4wZTNlYzMyZDNkMWEyMDIwNzQyZTRmOGFmNzk0cCswTCwKKwkweDEuMGZiNjZhZmZlZDMxYWYyMzIwOTFkZDhhMTY5ZXArMEwsCisJMHgxLjExMzAxZDAxMjViNTBhNGViYmYxYWVkOTMyMWNwKzBMLAorCTB4MS4xMmFiZGMwNmMzMWNiZmI5MmJhZDMyNGQ2Zjg0cCswTCwKKwkweDEuMTQyOWFhZWE5MmRkZmIzNDEwMTk0M2IyNTg4ZXArMEwsCisJMHgxLjE1YTk4YzhhNThlNTEyNDgwZDU3M2RkNTYyYWVwKzBMLAorCTB4MS4xNzJiODNjN2Q1MTdhZGNkZjdjOGM1MGViMTYycCswTCwKKwkweDEuMThhZjkzODhjOGRlOWJiYmY3MGI5YTNjMjY5Y3ArMEwsCisJMHgxLjFhMzViZWI2ZmNiNzUzY2I2OThmNjkyZDIwMzhwKzBMLAorCTB4MS4xYmJlMDg0MDQ1Y2QzOWFiMWU3MmI0NDI4MTBlcCswTCwKKwkweDEuMWQ0ODczMTY4YjlhYTc4MDViODAyODk5MGJlOHArMEwsCisJMHgxLjFlZDUwMjJmY2Q5MWNiODgxOWZmNjExMjFmYmVwKzBMLAorCTB4MS4yMDYzYjg4NjI4Y2Q2M2I4ZWViMDI5NTA5M2Y2cCswTCwKKwkweDEuMjFmNDk5MTdkZGM5NjI1NTJmZDI5Mjk0YmMyMHArMEwsCisJMHgxLjIzODdhNmU3NTYyMzg2NmMxZmFkYjFjMTU5YzBwKzBMLAorCTB4MS4yNTFjZTRmYjJhNjNmMzU4MmFiN2RlOWU5NTYycCswTCwKKwkweDEuMjZiNDU2NWUyN2NkZDI1N2E2NzMyODFkMzA2OHArMEwsCisJMHgxLjI4NGRmZTFmNTYzODA5NmNmMTVjZjAzYzlmYTBwKzBMLAorCTB4MS4yOWU5ZGY1MWZkZWUxMmMyNWQxNWY1YTI1MDIycCswTCwKKwkweDEuMmI4N2ZkMGRhZDk4ZmZkZGVhNDY1MzhmY2EyNHArMEwsCisJMHgxLjJkMjg1YTZlNDAzMGI0MDA5MWQ1MzZkMDczM2VwKzBMLAorCTB4MS4yZWNhZmE5M2UyZjU2MTFjYTBmNDVkNTIzOWE0cCswTCwKKwkweDEuMzA2ZmUwYTMxYjcxNTJkZThkNWE0NjMwNjNiZXArMEwsCisJMHgxLjMyMTcwZmM0Y2Q4MzEzNTM5Y2YxYzMwMDkzMzBwKzBMLAorCTB4MS4zM2MwOGIyNjQxNmZmNGM5Yzg2MTBkOTY2ODBlcCswTCwKKwkweDEuMzU2YzU1ZjkyOWZmMGM5NDYyMzQ3NjM3M2JlNHArMEwsCisJMHgxLjM3MWE3MzczYWE5Y2FhNzE0NTUwMmY0NTQ1MmFwKzBMLAorCTB4MS4zOGNhZTZkMDVkODY1ODVhOWNiMGQ5YmVkNTMwcCswTCwKKwkweDEuM2E3ZGIzNGU1OWZmNmVhMWJjOTI5OWUwYTFmZXArMEwsCisJMHgxLjNjMzJkYzMxM2E4ZTQ4NDAwMWYyMjhiNThjZjBwKzBMLAorCTB4MS4zZGVhNjRjMTIzNDIyMzViNDEyMjNlMTNkN2VlcCswTCwKKwkweDEuM2ZhNDUwNGFjODAxYmEwYmY3MDFhYTQxN2I5Y3ArMEwsCisJMHgxLjQxNjBhMjFmNzJlMjlmODQzMjViOGYzZGJhY2FwKzBMLAorCTB4MS40MzFmNWQ5NTBhODk2ZGM3MDQ0Mzk0MTBiNjI4cCswTCwKKwkweDEuNDRlMDg2MDYxODkyZDAzMTM2ZjQwOWRmMDcyNHArMEwsCisJMHgxLjQ2YTQxZWQxZDAwNTc3MjUxMmY0NTkyMjlmMGFwKzBMLAorCTB4MS40ODZhMmI1YzEzY2QwMTNjMWEzYjY5MDYyZjI2cCswTCwKKwkweDEuNGEzMmFmMGQ3ZDNkZTY3MmQ4YmNmNDZmOTliNHArMEwsCisJMHgxLjRiZmRhZDUzNjJhMjcxZDQzOTdhZmVjNDJlMzZwKzBMLAorCTB4MS40ZGNiMjk5ZmRkZDBkNjNiMzZlZjFhOWUxOWRlcCswTCwKKwkweDEuNGY5YjI3NjlkMmNhNmFkMzNkOGI2OWFhMGI4Y3ArMEwsCisJMHgxLjUxNmRhYTJjZjY2NDFjMTEyZjUyYzg0ZDYwNjZwKzBMLAorCTB4MS41MzQyYjU2OWQ0ZjgxZGYwYTgzYzQ5ZDg2YmY0cCswTCwKKwkweDEuNTUxYTRjYTVkOTIwZWM1MmVjNjIwMjQzNTQwY3ArMEwsCisJMHgxLjU2ZjQ3MzZiNTI3ZGE2NmVjYjAwNDc2NGU2MWVwKzBMLAorCTB4MS41OGQxMmQ0OTdjN2ZkMjUyYmMyYjczNDNkNTU0cCswTCwKKwkweDEuNWFiMDdkZDQ4NTQyOTU4YzkzMDE1MTkxZTlhOHArMEwsCisJMHgxLjVjOTI2OGE1OTQ2YjcwMWM0YjFiODE2OTdlZDRwKzBMLAorCTB4MS41ZTc2ZjE1YWQyMTQ4NmU5YmU0YzIwMzk5ZDEycCswTCwKKwkweDEuNjA1ZTFiOTc2ZGMwOGIwNzZmNTkyYTQ4NzA2NnArMEwsCisJMHgxLjYyNDdlYjAzYTU1ODRiMWYwZmEwNmZkMmQ5ZWFwKzBMLAorCTB4MS42NDM0NjM0Y2NjMzFmYzc2Zjg3MTRjNGVlMTIycCswTCwKKwkweDEuNjYyMzg4MjU1MjIyNDkxMjdkOWUyOWI5MmVhMnArMEwsCisJMHgxLjY4MTU1ZDQ0Y2E5NzMwODFjNTcyMjdiOWY2OWVwKzBMLAorfTsKKworc3RhdGljIGNvbnN0IGZsb2F0IGVwc1tUQkxTSVpFXSA9IHsKKwktMHgxLjVjNTBwLTEwMSwKKwktMHgxLjVkMDBwLTEwNiwKKwkgMHgxLjhlOTBwLTEwMiwKKwktMHgxLjUzNDBwLTEwMywKKwkgMHgxLjFiZDBwLTEwMiwKKwktMHgxLjQ2MDBwLTEwNSwKKwktMHgxLjdhNDBwLTEwNCwKKwkgMHgxLmQ1OTBwLTEwMiwKKwktMHgxLmQ1OTBwLTEwMSwKKwkgMHgxLmIxMDBwLTEwMywKKwktMHgxLjBkODBwLTEwNSwKKwkgMHgxLjZiMDBwLTEwMywKKwktMHgxLjlmMDBwLTEwNSwKKwkgMHgxLmM0MDBwLTEwMywKKwkgMHgxLmUxMjBwLTEwMywKKwktMHgxLmMxMDBwLTEwNCwKKwktMHgxLjlkMjBwLTEwMywKKwkgMHgxLmE4MDBwLTEwOCwKKwkgMHgxLjRjMDBwLTEwNiwKKwktMHgxLjk1MDBwLTEwNiwKKwkgMHgxLjY5MDBwLTEwNSwKKwktMHgxLjI5ZDBwLTEwMCwKKwkgMHgxLjRjNjBwLTEwMywKKwkgMHgxLjEzYTBwLTEwMiwKKwktMHgxLjViNjBwLTEwMywKKwktMHgxLjFjNDBwLTEwMywKKwkgMHgxLmRiODBwLTEwMiwKKwkgMHgxLjkxYTBwLTEwMiwKKwkgMHgxLmRjMDBwLTEwNSwKKwkgMHgxLjQ0YzBwLTEwNCwKKwkgMHgxLjk3MTBwLTEwMiwKKwkgMHgxLjg3NjBwLTEwMywKKwktMHgxLmE3MjBwLTEwMywKKwkgMHgxLmVkMjBwLTEwMywKKwktMHgxLjQ5YzBwLTEwMiwKKwktMHgxLmUwMDBwLTExMSwKKwkgMHgxLjg2YTBwLTEwMywKKwkgMHgxLjJiNDBwLTEwMywKKwktMHgxLmI0MDBwLTEwOCwKKwkgMHgxLjEyODBwLTk5LAorCS0weDEuMDJkOHAtMTAyLAorCS0weDEuZTNkMHAtMTAzLAorCS0weDEuYjA4MHAtMTA1LAorCS0weDEuZjEwMHAtMTA3LAorCS0weDEuMTZjMHAtMTA1LAorCS0weDEuMTE5MHAtMTAzLAorCS0weDEuYTdkMnAtMTAwLAorCSAweDEuMzQ1MHAtMTAzLAorCS0weDEuNjdjMHAtMTA1LAorCSAweDEuNGI4MHAtMTA0LAorCS0weDEuYzRlMHAtMTAzLAorCSAweDEuNjAwMHAtMTA4LAorCS0weDEuM2Y2MHAtMTA1LAorCSAweDEuOTNmMHAtMTA0LAorCSAweDEuNWZlMHAtMTA1LAorCSAweDEuNmY4MHAtMTA3LAorCS0weDEuNzYwMHAtMTA2LAorCSAweDEuMjFlMHAtMTA2LAorCS0weDEuM2E0MHAtMTA2LAorCS0weDEuNDBjMHAtMTA0LAorCS0weDEuOTg2MHAtMTA1LAorCS0weDEuNWQ0MHAtMTA4LAorCS0weDEuMWQ3MHAtMTA2LAorCSAweDEuMjc2MHAtMTA1LAorCSAweDAuMDAwMHArMCwKKwkgMHgxLjIxZTJwLTEwNCwKKwktMHgxLjk1MjBwLTEwOCwKKwktMHgxLjU3MjBwLTEwNiwKKwktMHgxLjQ4MTBwLTEwNiwKKwktMHgxLmJlMDBwLTEwOSwKKwkgMHgxLjAwODBwLTEwNSwKKwktMHgxLjU3ODBwLTEwOCwKKwktMHgxLmQ0NjBwLTEwNSwKKwktMHgxLjYxNDBwLTEwNSwKKwkgMHgxLjQ2MzBwLTEwNCwKKwkgMHgxLmFkNTBwLTEwMywKKwkgMHgxLjgyZTBwLTEwNSwKKwkgMHgxLjFkM2NwLTEwMSwKKwkgMHgxLjYxMDBwLTEwNywKKwkgMHgxLmVjMzBwLTEwNCwKKwkgMHgxLmYyMDBwLTEwOCwKKwkgMHgxLjBiNDBwLTEwMywKKwkgMHgxLjM2NjBwLTEwMiwKKwkgMHgxLmQ5ZDBwLTEwMywKKwktMHgxLjAyZDBwLTEwMiwKKwkgMHgxLmIwNzBwLTEwMywKKwkgMHgxLmI5YzBwLTEwNCwKKwktMHgxLjAxYzBwLTEwMywKKwktMHgxLmRmZTBwLTEwMywKKwkgMHgxLjFiNjBwLTEwNCwKKwktMHgxLmFlOTRwLTEwMSwKKwktMHgxLjMzNDBwLTEwNCwKKwkgMHgxLmIzZDhwLTEwMiwKKwktMHgxLjZlNDBwLTEwNSwKKwktMHgxLjM2NzBwLTEwMywKKwkgMHgxLmMxNDBwLTEwNCwKKwkgMHgxLjE4NDBwLTEwMSwKKwkgMHgxLjFhYjBwLTEwMiwKKwktMHgxLmE0MDBwLTEwNCwKKwkgMHgxLjFmMDBwLTEwNCwKKwktMHgxLjcxODBwLTEwMywKKwkgMHgxLjRjZTBwLTEwMiwKKwkgMHgxLjkyMDBwLTEwNywKKwktMHgxLjU0YzBwLTEwMywKKwkgMHgxLjFiODBwLTEwNSwKKwktMHgxLjE4MjhwLTEwMSwKKwkgMHgxLjU3MjBwLTEwMiwKKwktMHgxLmEwNjBwLTEwMCwKKwkgMHgxLjkxNjBwLTEwMiwKKwkgMHgxLmEyODBwLTEwNCwKKwkgMHgxLjM0MDBwLTEwNywKKwkgMHgxLjJiMjBwLTEwMiwKKwkgMHgxLjc4MDBwLTEwOCwKKwkgMHgxLmNmZDBwLTEwMSwKKwkgMHgxLjJlZjBwLTEwMiwKKwktMHgxLjI3NjBwLTk5LAorCSAweDEuYjM4MHAtMTA0LAorCSAweDEuMDA0OHAtMTAxLAorCS0weDEuNjBiMHAtMTAyLAorCSAweDEuYTFjY3AtMTAwLAorCS0weDEuYTY0MHAtMTA0LAorCS0weDEuMDhhMHAtMTAxLAorCSAweDEuN2U2MHAtMTAyLAorCSAweDEuMjJjMHAtMTAzLAorCS0weDEuNzIwMHAtMTA2LAorCSAweDEuZjBmMHAtMTAyLAorCSAweDEuZWI0ZXAtOTksCisJIDB4MS5jNmUwcC0xMDMsCit9OworCisvKgorICogZXhwMmwoeCk6IGNvbXB1dGUgdGhlIGJhc2UgMiBleHBvbmVudGlhbCBvZiB4CisgKgorICogQWNjdXJhY3k6IFBlYWsgZXJyb3IgPCAwLjUwMiB1bHAuCisgKgorICogTWV0aG9kOiAoYWNjdXJhdGUgdGFibGVzKQorICoKKyAqICAgUmVkdWNlIHg6CisgKiAgICAgeCA9IDIqKmsgKyB5LCBmb3IgaW50ZWdlciBrIGFuZCB8eXwgPD0gMS8yLgorICogICAgIFRodXMgd2UgaGF2ZSBleHAyKHgpID0gMioqayAqIGV4cDIoeSkuCisgKgorICogICBSZWR1Y2UgeToKKyAqICAgICB5ID0gaS9UQkxTSVpFICsgeiAtIGVwc1tpXSBmb3IgaW50ZWdlciBpIG5lYXIgeSAqIFRCTFNJWkUuCisgKiAgICAgVGh1cyB3ZSBoYXZlIGV4cDIoeSkgPSBleHAyKGkvVEJMU0laRSkgKiBleHAyKHogLSBlcHNbaV0pLAorICogICAgIHdpdGggfHogLSBlcHNbaV18IDw9IDIqKi04ICsgMioqLTk4IGZvciB0aGUgdGFibGUgdXNlZC4KKyAqCisgKiAgIFdlIGNvbXB1dGUgZXhwMihpL1RCTFNJWkUpIHZpYSB0YWJsZSBsb29rdXAgYW5kIGV4cDIoeiAtIGVwc1tpXSkgdmlhCisgKiAgIGEgZGVncmVlLTEwIG1pbmltYXggcG9seW5vbWlhbCB3aXRoIG1heGltdW0gZXJyb3IgdW5kZXIgMioqLTEyMC4KKyAqICAgVGhlIHZhbHVlcyBpbiBleHAydFtdIGFuZCBlcHNbXSBhcmUgY2hvc2VuIHN1Y2ggdGhhdAorICogICBleHAydFtpXSA9IGV4cDIoaS9UQkxTSVpFICsgZXBzW2ldKSwgYW5kIGVwc1tpXSBpcyBhIHNtYWxsIG9mZnNldCBzdWNoCisgKiAgIHRoYXQgZXhwMnRbaV0gaXMgYWNjdXJhdGUgdG8gMioqLTEyMi4KKyAqCisgKiAgIE5vdGUgdGhhdCB0aGUgcmFuZ2Ugb2YgaSBpcyArLVRCTFNJWkUvMiwgc28gd2UgYWN0dWFsbHkgaW5kZXggdGhlIHRhYmxlcworICogICBieSBpMCA9IGkgKyBUQkxTSVpFLzIuCisgKgorICogICBUaGlzIG1ldGhvZCBpcyBkdWUgdG8gR2FsLCB3aXRoIG1hbnkgZGV0YWlscyBkdWUgdG8gR2FsIGFuZCBCYWNoZWxpczoKKyAqCisgKglHYWwsIFMuIGFuZCBCYWNoZWxpcywgQi4gIEFuIEFjY3VyYXRlIEVsZW1lbnRhcnkgTWF0aGVtYXRpY2FsIExpYnJhcnkKKyAqCWZvciB0aGUgSUVFRSBGbG9hdGluZyBQb2ludCBTdGFuZGFyZC4gIFRPTVMgMTcoMSksIDI2LTQ2ICgxOTkxKS4KKyAqLworbG9uZyBkb3VibGUKK2V4cDJsKGxvbmcgZG91YmxlIHgpCit7CisJdW5pb24gSUVFRWwyYml0cyB1LCB2OworCWxvbmcgZG91YmxlIHIsIHQsIHR3b3BrLCB0d29wa3AxMDAwMCwgejsKKwl1aW50MzJfdCBoeCwgaXgsIGkwOworCWludCBrOworCisJdS5lID0geDsKKworCS8qIEZpbHRlciBvdXQgZXhjZXB0aW9uYWwgY2FzZXMuICovCisJaHggPSB1LnhiaXRzLmV4cHNpZ247CisJaXggPSBoeCAmIEVYUE1BU0s7CisJaWYgKGl4ID49IEJJQVMgKyAxNCkgewkJLyogfHh8ID49IDE2Mzg0ICovCisJCWlmIChpeCA9PSBCSUFTICsgTERCTF9NQVhfRVhQKSB7CisJCQlpZiAodS54Yml0cy5tYW5oICE9IDAKKwkJCSAgICB8fCB1LnhiaXRzLm1hbmwgIT0gMAorCQkJICAgIHx8IChoeCAmIDB4ODAwMCkgPT0gMCkKKwkJCQlyZXR1cm4gKHggKyB4KTsJLyogeCBpcyBOYU4gb3IgK0luZiAqLworCQkJZWxzZQorCQkJCXJldHVybiAoMC4wKTsJLyogeCBpcyAtSW5mICovCisJCX0KKwkJaWYgKHggPj0gMTYzODQpCisJCQlyZXR1cm4gKGh1Z2UgKiBodWdlKTsgLyogb3ZlcmZsb3cgKi8KKwkJaWYgKHggPD0gLTE2NDk1KQorCQkJcmV0dXJuICh0d29tMTAwMDAgKiB0d29tMTAwMDApOyAvKiB1bmRlcmZsb3cgKi8KKwl9IGVsc2UgaWYgKGl4IDw9IEJJQVMgLSAxMTUpIHsJCS8qIHx4fCA8IDB4MXAtMTE1ICovCisJCXJldHVybiAoMS4wICsgeCk7CisJfQorCisJLyoKKwkgKiBSZWR1Y2UgeCwgY29tcHV0aW5nIHosIGkwLCBhbmQgay4gVGhlIGxvdyBiaXRzIG9mIHggKyByZWR1eAorCSAqIGNvbnRhaW4gdGhlIDE2LWJpdCBpbnRlZ2VyIHBhcnQgb2YgdGhlIGV4cG9uZW50IChrKSBmb2xsb3dlZCBieQorCSAqIFRCTEJJVFMgZnJhY3Rpb25hbCBiaXRzIChpMCkuIFdlIHVzZSBiaXQgdHJpY2tzIHRvIGV4dHJhY3QgdGhlc2UKKwkgKiBhcyBpbnRlZ2VycywgdGhlbiBzZXQgeiB0byB0aGUgcmVtYWluZGVyLgorCSAqCisJICogRXhhbXBsZTogU3VwcG9zZSB4IGlzIDB4YWJjLjEyMzQ1NnAwIGFuZCBUQkxCSVRTIGlzIDguCisJICogVGhlbiB0aGUgbG93LW9yZGVyIHdvcmQgb2YgeCArIHJlZHV4IGlzIDB4MDAwYWJjMTIsCisJICogV2Ugc3BsaXQgdGhpcyBpbnRvIGsgPSAweGFiYyBhbmQgaTAgPSAweDEyIChhZGp1c3RlZCB0bworCSAqIGluZGV4IGludG8gdGhlIHRhYmxlKSwgdGhlbiB3ZSBjb21wdXRlIHogPSAweDAuMDAzNDU2cDAuCisJICoKKwkgKiBYWFggSWYgdGhlIGV4cG9uZW50IGlzIG5lZ2F0aXZlLCB0aGUgY29tcHV0YXRpb24gb2YgayBkZXBlbmRzIG9uCisJICogICAgICc+PicgZG9pbmcgc2lnbiBleHRlbnNpb24uCisJICovCisJdS5lID0geCArIHJlZHV4OworCWkwID0gKHUuYml0cy5tYW5sICYgMHhmZmZmZmZmZikgKyBUQkxTSVpFIC8gMjsKKwlrID0gKGludClpMCA+PiBUQkxCSVRTOworCWkwID0gaTAgJiAoVEJMU0laRSAtIDEpOworCXUuZSAtPSByZWR1eDsKKwl6ID0geCAtIHUuZTsKKwl2LnhiaXRzLm1hbmggPSAwOworCXYueGJpdHMubWFubCA9IDA7CisJaWYgKGsgPj0gTERCTF9NSU5fRVhQKSB7CisJCXYueGJpdHMuZXhwc2lnbiA9IExEQkxfTUFYX0VYUCAtIDEgKyBrOworCQl0d29wayA9IHYuZTsKKwl9IGVsc2UgeworCQl2LnhiaXRzLmV4cHNpZ24gPSBMREJMX01BWF9FWFAgLSAxICsgayArIDEwMDAwOworCQl0d29wa3AxMDAwMCA9IHYuZTsKKwl9CisKKwkvKiBDb21wdXRlIHIgPSBleHAyKHkpID0gZXhwMnRbaTBdICogcCh6IC0gZXBzW2ldKS4gKi8KKwl0ID0gdGJsW2kwXTsJCS8qIGV4cDJ0W2kwXSAqLworCXogLT0gZXBzW2kwXTsJCS8qIGVwc1tpMF0gICAqLworCXIgPSB0ICsgdCAqIHogKiAoUDEgKyB6ICogKFAyICsgeiAqIChQMyArIHogKiAoUDQgKyB6ICogKFA1ICsgeiAqIChQNgorCSAgICArIHogKiAoUDcgKyB6ICogKFA4ICsgeiAqIChQOSArIHogKiBQMTApKSkpKSkpKSk7CisKKwkvKiBTY2FsZSBieSAyKiprLiAqLworCWlmKGsgPj0gTERCTF9NSU5fRVhQKSB7CisJCWlmIChrID09IExEQkxfTUFYX0VYUCkKKwkJCXJldHVybiAociAqIDIuMCAqIDB4MXAxNjM4M0wpOworCQlyZXR1cm4gKHIgKiB0d29wayk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIChyICogdHdvcGtwMTAwMDAgKiB0d29tMTAwMDApOworCX0KK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX2V4cGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX2V4cGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzZjOTMyCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L3NfZXhwbC5jCkBAIC0wLDAgKzEsNDk0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEzIFN0ZXZlbiBHLiBLYXJnbAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIE9wdGltaXplZCBieSBCcnVjZSBELiBFdmFucy4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qCisgKiBsZDEyOCB2ZXJzaW9uIG9mIHNfZXhwbC5jLiAgU2VlIC4uL2xkODAvc19leHBsLmMgZm9yIG1vc3QgY29tbWVudHMuCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJmcG1hdGguaCIKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKKyNkZWZpbmUJSU5URVJWQUxTCTEyOAorI2RlZmluZQlMT0cyX0lOVEVSVkFMUwk3CisjZGVmaW5lCUJJQVMJKExEQkxfTUFYX0VYUCAtIDEpCisKK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZQoraHVnZSA9IDB4MXAxMDAwMEwsCit0d29tMTAwMDAgPSAweDFwLTEwMDAwTDsKKy8qIFhYWCBQcmV2ZW50IGdjYyBmcm9tIGVycm9uZW91c2x5IGNvbnN0YW50IGZvbGRpbmcgdGhpczogKi8KK3N0YXRpYyB2b2xhdGlsZSBjb25zdCBsb25nIGRvdWJsZSB0aW55ID0gMHgxcC0xMDAwMEw7CisKK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZQorLyogbG9nKDIqKjE2Mzg0IC0gMC41KSByb3VuZGVkIHRvd2FyZHMgemVybzogKi8KKy8qIGxvZygyKioxNjM4NCAtIDAuNSArIDEpIHJvdW5kZWQgdG93YXJkcyB6ZXJvIGZvciBleHBtMWwoKSBpcyB0aGUgc2FtZTogKi8KK29fdGhyZXNob2xkID0gIDExMzU2LjUyMzQwNjI5NDE0Mzk0OTQ5MTkzMTA3Nzk3MDc2MzQyOEwsCisvKiBsb2coMioqKC0xNjM4MS02NC0xKSkgcm91bmRlZCB0b3dhcmRzIHplcm86ICovCit1X3RocmVzaG9sZCA9IC0xMTQzMy40NjI3NDMzMzYyOTc4Nzg4MzcyNDM4NDM0NTI2MjE1MDNMOworCitzdGF0aWMgY29uc3QgZG91YmxlCisvKgorICogbG4yL0lOVEVSVkFMUyA9IEwxK0wyIChoaStsbyBkZWNvbXBvc2l0aW9uIGZvciBtdWx0aXBsaWNhdGlvbikuICBMMSBtdXN0CisgKiBoYXZlIGF0IGxlYXN0IDIyICg9IGxvZzIofExEQkxfTUlOX0VYUC1leHRyYXN8KSArIGxvZzIoSU5URVJWQUxTKSkgbG93ZXN0CisgKiBiaXRzIHplcm8gc28gdGhhdCBtdWx0aXBsaWNhdGlvbiBvZiBpdCBieSBuIGlzIGV4YWN0LgorICovCitJTlZfTCA9IDEuODQ2NjQ5NjUyMzM3ODczMWUrMiwJCS8qICAweDE3MTU0NzY1MmI4MmZlLjBwLTQ1ICovCitMMiA9IC0xLjAyNTM2NzA2Mzg4OTQ3MzFlLTI5OwkJLyogLTB4MS45ZmYwMzQyNTQyZmMzcC05NyAqLworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCisvKiAweDEuNjJlNDJmZWZhMzllZjM1NzkzYzc2ODAwMDAwMHAtOCAqLworTDEgPSAgNS40MTUyMTIzNDgxMjQ1NzI3Mjk4MjIxMjU5NTkxNDU2NzUwOGUtM0w7CisKK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZQorLyoKKyAqIERvbWFpbiBbLTAuMDAyNzA4LCAwLjAwMjcwOF0sIHJhbmdlIH5bLTIuNDAyMWUtMzgsIDIuNDIzNGUtMzhdOgorICogfGV4cCh4KSAtIHAoeCl8IDwgMioqLTEyNC45CisgKiAoMC4wMDI3MDggaXMgbG4yLygyKklOVEVSVkFMUykgcm91bmRlZCB1cCBhIGxpdHRsZSkuCisgKi8KK0EyICA9ICAwLjUsCitBMyAgPSAgMS42NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1MTA4NTUwMGUtMUwsCitBNCAgPSAgNC4xNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjQyNTg4NTMyMGUtMkwsCitBNSAgPSAgOC4zMzMzMzMzMzMzMzMzMzMzMzMzNDUyMjg3NzE2MDE3NTg0MmUtM0wsCitBNiAgPSAgMS4zODg4ODg4ODg4ODg4ODg4ODg4OTk3MTEzOTc1MTU5NjgzNmUtM0w7CisKK3N0YXRpYyBjb25zdCBkb3VibGUKK0E3ICA9ICAxLjk4NDEyNjk4NDEyNjk0NzFlLTQsCitBOCAgPSAgMi40ODAxNTg3MzAxNTg1Mjg0ZS01LAorQTkgID0gIDIuNzU1NzMyNDI3NzQxMTIzNGUtNiwKK0ExMCA9ICAyLjc1NTczMzM3MjIzNzUwNzJlLTc7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCS8qCisJICogaGkgbXVzdCBiZSByb3VuZGVkIHRvIGF0IG1vc3QgMTA2IGJpdHMgc28gdGhhdCBtdWx0aXBsaWNhdGlvbgorCSAqIGJ5IHIxIGluIGV4cG0xbCgpIGlzIGV4YWN0LCBidXQgaXQgaXMgcm91bmRlZCB0byA4OCBiaXRzIGR1ZSB0bworCSAqIGhpc3RvcmljYWwgYWNjaWRlbnRzLgorCSAqLworCWxvbmcgZG91YmxlCWhpOworCWxvbmcgZG91YmxlCWxvOworfSB0YmxbSU5URVJWQUxTXSA9IHsKKwkweDFwMEwsIDB4MHAwTCwKKwkweDEuMDE2M2RhOWZiMzMzNTZkODRhNjZhZXAwTCwgMHgzLjM2ZGNkZmE0MDAzZWMwNGMzNjBiZTI0MDQwNzhwLTkyTCwKKwkweDEuMDJjOWEzZTc3ODA2MGVlNmY3Y2FjYXAwTCwgMHg0LmY3YTI5YmRlOTNkNzBhMmNhYmM1Y2I4OWJhMTBwLTkyTCwKKwkweDEuMDQzMTVlODZlN2Y4NGJkNzM4ZjlhMnAwTCwgMHhkLmE0N2U2ZWQwNDBiYjRiZmMwNWFmNjQ1NWU5YjhwLTk2TCwKKwkweDEuMDU5YjBkMzE1ODU3NDNhZTdjNTQ4ZXAwTCwgMHhiLjY4Y2E0MTdmZTUzZTM0OTVmN2RmNGJhZjg0YTBwLTkyTCwKKwkweDEuMDcwNmIyOWRkZjZkZGM2ZGM0MDNhOHAwTCwgMHgxLmQ4N2IyN2VkMDdjYjhiMDkyYWM3NWUzMTE3NTNwLTg4TCwKKwkweDEuMDg3NDUxODc1OWJjODA4YzM1ZjI1Y3AwTCwgMHgxLjk0MjdmYTJiMDQxYjJkNjgyOWQ4OTkzYTBkMDFwLTg4TCwKKwkweDEuMDllM2VjYWM2ZjM4MzQ1MjFlMDYwY3AwTCwgMHg1Ljg0ZDZiNzRiYTJlMDIzZGE3MzBlN2ZjY2I3NThwLTkyTCwKKwkweDEuMGI1NTg2Y2Y5ODkwZjYyOThiOTJiNnAwTCwgMHgxLjE4NDJhOTgzNjQyOTE0MDhiM2NlYjBhMmEyYmJwLTg4TCwKKwkweDEuMGNjOTIyYjcyNDdmNzQwN2I3MDViOHAwTCwgMHg5LjNkYzVlOGFhYzU2NGU2ZmUyZWYxZDQzMWZkOThwLTkyTCwKKwkweDEuMGUzZWMzMmQzZDFhMjAyMDc0MmU0ZXAwTCwgMHgxLjhhZjZhNTUyYWM0YjM1OGIxMTI5ZTlmOTY2YTRwLTg4TCwKKwkweDEuMGZiNjZhZmZlZDMxYWYyMzIwOTFkY3AwTCwgMHgxLjhhMTQyNjUxNGUwYjYyN2JkYTY5NGE0MDBhMjdwLTg4TCwKKwkweDEuMTEzMDFkMDEyNWI1MGE0ZWJiZjFhZXAwTCwgMHhkLjkzMThjZWFjNWNjNDdhYjE2NmVlNTc0MjcxNzhwLTkyTCwKKwkweDEuMTJhYmRjMDZjMzFjYmZiOTJiYWQzMnAwTCwgMHg0LmQ2OGUyZjcyNzBiZGY3Y2VkZjk0ZWIxY2I4MThwLTkyTCwKKwkweDEuMTQyOWFhZWE5MmRkZmIzNDEwMTk0MnAwTCwgMHgxLmIyNTg2ZDAxODQ0YjM4OWJlYTdhZWRkMjIxZDRwLTg4TCwKKwkweDEuMTVhOThjOGE1OGU1MTI0ODBkNTczY3AwTCwgMHgxLmQ1NjEzYmY5MmEyYjYxOGVlMzFiMzc2YzI2ODlwLTg4TCwKKwkweDEuMTcyYjgzYzdkNTE3YWRjZGY3YzhjNHAwTCwgMHgxLjBlYjE0YTc5MjAzNTUwOWZmN2Q3NTg2OTNmMjRwLTg4TCwKKwkweDEuMThhZjkzODhjOGRlOWJiYmY3MGI5YXAwTCwgMHgzLmMyNTA1Yzk3YzAxMDJlNWYxMjExOTQxZDI4NDBwLTkyTCwKKwkweDEuMWEzNWJlYjZmY2I3NTNjYjY5OGY2OHAwTCwgMHgxLjJkMWM4MzVhNmMzMDcyNGQ1Y2ZhZTMxYjg0ZTVwLTg4TCwKKwkweDEuMWJiZTA4NDA0NWNkMzlhYjFlNzJiNHAwTCwgMHg0LjI3ZTM1ZjlhY2I1N2U0NzM5MTU1MTlhMWI0NDhwLTkyTCwKKwkweDEuMWQ0ODczMTY4YjlhYTc4MDViODAyOHAwTCwgMHg5LjkwZjA3YTk4YjQyMjA2ZTQ2MTY2Y2YwNTFkNzBwLTkyTCwKKwkweDEuMWVkNTAyMmZjZDkxY2I4ODE5ZmY2MHAwTCwgMHgxLjEyMWQxZTUwNGQzNmM0NzQ3NGM5YjdkZTYwNjdwLTg4TCwKKwkweDEuMjA2M2I4ODYyOGNkNjNiOGVlYjAyOHAwTCwgMHgxLjUwOTI5ZDBmYzQ4N2QyMWMyYjg0MDA0MjY0ZGVwLTg4TCwKKwkweDEuMjFmNDk5MTdkZGM5NjI1NTJmZDI5MnAwTCwgMHg5LjRiZGI0YjYxZWE2MjQ3N2NhYTFkY2U4MjNiYTBwLTkyTCwKKwkweDEuMjM4N2E2ZTc1NjIzODY2YzFmYWRiMHAwTCwgMHgxLmMxNWNiNTkzYjAzMjg1NjY5MDJkZjY5ZTRkZTJwLTg4TCwKKwkweDEuMjUxY2U0ZmIyYTYzZjM1ODJhYjdkZXAwTCwgMHg5LmU5NDgxMWE5YzhhZmRjZjc5NjkzNGJjNjUyZDBwLTkyTCwKKwkweDEuMjZiNDU2NWUyN2NkZDI1N2E2NzMyOHAwTCwgMHgxLmQzYjI0OWRjZTRlOTE4NmRkZDVmZjQ0ZTZiMDhwLTkyTCwKKwkweDEuMjg0ZGZlMWY1NjM4MDk2Y2YxNWNmMHAwTCwgMHgzLmNhMDk2N2ZkYWEyZTUyZDdjODEwNmYyZTI2MmNwLTkyTCwKKwkweDEuMjllOWRmNTFmZGVlMTJjMjVkMTVmNHAwTCwgMHgxLmEyNGFhM2JjYTg5MGFjMDhkMjAzZmVkODBhMDdwLTg4TCwKKwkweDEuMmI4N2ZkMGRhZDk4ZmZkZGVhNDY1MnAwTCwgMHgxLjhmY2FiODg0NDJmZGMzY2I2ZGU0NTE5MTY1ZWRwLTg4TCwKKwkweDEuMmQyODVhNmU0MDMwYjQwMDkxZDUzNnAwTCwgMHhkLjA3NTM4NDU4OWMxY2QxYjNlNDAxOGE2YjEzNDhwLTkyTCwKKwkweDEuMmVjYWZhOTNlMmY1NjExY2EwZjQ1Y3AwTCwgMHgxLjUyMzgzM2FmNjExYmRjZGEyNTNjNTU0Y2YyNzhwLTg4TCwKKwkweDEuMzA2ZmUwYTMxYjcxNTJkZThkNWE0NnAwTCwgMHgzLjA1Yzg1ZWRlY2JjMjczNDM2MjlmNTAyZjFhZjJwLTkyTCwKKwkweDEuMzIxNzBmYzRjZDgzMTM1MzljZjFjMnAwTCwgMHgxLjAwOGY4NmRkZTMyMjBhZTE3YTAwNWI2NDEyYmVwLTg4TCwKKwkweDEuMzNjMDhiMjY0MTZmZjRjOWM4NjEwY3AwTCwgMHgxLjk2Njk2YmY5NWQxNTkzMDM5NTM5ZDk0ZDY2MmJwLTg4TCwKKwkweDEuMzU2YzU1ZjkyOWZmMGM5NDYyMzQ3NnAwTCwgMHgzLjczYWYzOGQ2ZDhkNmY5NTA2YzliYmM5M2NiYzBwLTkyTCwKKwkweDEuMzcxYTczNzNhYTljYWE3MTQ1NTAyZXAwTCwgMHgxLjQ1NDc5ODdlM2UxMjUxNmJmOWM2OTliZTQzMmZwLTg4TCwKKwkweDEuMzhjYWU2ZDA1ZDg2NTg1YTljYjBkOHAwTCwgMHgxLmJlZDBjODUzYmQzMGEwMjc5MDkzMWViMmU4ZjBwLTg4TCwKKwkweDEuM2E3ZGIzNGU1OWZmNmVhMWJjOTI5OHAwTCwgMHgxLmUwYTFkMzM2MTYzZmUyZjg1MmNlZWIxMzQwNjdwLTg4TCwKKwkweDEuM2MzMmRjMzEzYThlNDg0MDAxZjIyOHAwTCwgMHhiLjU4ZjM3NzVlMDZhYjY2MzUzMDAxZmFlOWZjYTBwLTkyTCwKKwkweDEuM2RlYTY0YzEyMzQyMjM1YjQxMjIzZXAwTCwgMHgxLjNkNzczZmJhMmNiODJiODI0NDI2N2M1NDQ0M2ZwLTkyTCwKKwkweDEuM2ZhNDUwNGFjODAxYmEwYmY3MDFhYXAwTCwgMHg0LjE4MzJmYjhjMWM4ZGJkZmYyYzQ5OTA5ZTZjNjBwLTkyTCwKKwkweDEuNDE2MGEyMWY3MmUyOWY4NDMyNWI4ZXAwTCwgMHgxLjNkYjYxZmIzNTJmMDU0MGU2YmEwNTYzNDQxM2VwLTg4TCwKKwkweDEuNDMxZjVkOTUwYTg5NmRjNzA0NDM5NHAwTCwgMHgxLjBjY2VjODFlMjRiMGNhZmY3NTgxZWY0MTI3ZjdwLTkyTCwKKwkweDEuNDRlMDg2MDYxODkyZDAzMTM2ZjQwOHAwTCwgMHgxLmRmMDE5ZmJkNGYzYjQ4NzA5Yjc4NTkxZDVjYjVwLTg4TCwKKwkweDEuNDZhNDFlZDFkMDA1NzcyNTEyZjQ1OHAwTCwgMHgxLjIyOWQ5N2RmNDA0ZmYyMWYzOWMxYjU5NGQzYThwLTg4TCwKKwkweDEuNDg2YTJiNWMxM2NkMDEzYzFhM2I2OHAwTCwgMHgxLjA2MmYwM2MzZGQ3NWNlODc1N2Y3ODBlNmVjOTlwLTg4TCwKKwkweDEuNGEzMmFmMGQ3ZDNkZTY3MmQ4YmNmNHAwTCwgMHg2LmY5NTg2NDYxZGIxZDg3OGIxZDE0OGJkM2NjYjhwLTkyTCwKKwkweDEuNGJmZGFkNTM2MmEyNzFkNDM5N2FmZXAwTCwgMHhjLjQyZTIwZTAzNjNiYTJlMTU5YzU3OWY4MmU0YjBwLTkyTCwKKwkweDEuNGRjYjI5OWZkZGQwZDYzYjM2ZWYxYXAwTCwgMHg5LmUwY2M0ODRiMjVhNTU2NmQwYmQ1ZjU4YWQyMzhwLTkyTCwKKwkweDEuNGY5YjI3NjlkMmNhNmFkMzNkOGI2OHAwTCwgMHgxLmFhMDczZWU1NWUwMjg0OTdhMzI5YTczMzNkYmFwLTg4TCwKKwkweDEuNTE2ZGFhMmNmNjY0MWMxMTJmNTJjOHAwTCwgMHg0LmQ4MjIxOTBlNzE4MjI2MTc3ZDc2MDhkMjAwMzhwLTkyTCwKKwkweDEuNTM0MmI1NjlkNGY4MWRmMGE4M2M0OHAwTCwgMHgxLmQ4NmE2M2Y0ZTY3MmEzZTQyOTgwNWIwNDk0NjVwLTg4TCwKKwkweDEuNTUxYTRjYTVkOTIwZWM1MmVjNjIwMnAwTCwgMHg0LjM0Y2E2NzI2NDVkYzZjMTI0ZDY2MTlhODc1NzRwLTkyTCwKKwkweDEuNTZmNDczNmI1MjdkYTY2ZWNiMDA0NnAwTCwgMHgxLjY0ZWIzYzAwZjJmNWFiM2Q4MDFkN2NjNzI3MmRwLTg4TCwKKwkweDEuNThkMTJkNDk3YzdmZDI1MmJjMmI3MnAwTCwgMHgxLjQzYmNmMmVjOTM2YTk3MGQ5Y2MyNjZmMDA3MmZwLTg4TCwKKwkweDEuNWFiMDdkZDQ4NTQyOTU4YzkzMDE1MHAwTCwgMHgxLjkxZWIzNDVkODhkN2M4MTI4MGUwNjlmYmRiNjNwLTg4TCwKKwkweDEuNWM5MjY4YTU5NDZiNzAxYzRiMWI4MHAwTCwgMHgxLjY5ODZhMjAzZDg0ZTZhNGE5MmYxNzllNzE4ODlwLTg4TCwKKwkweDEuNWU3NmYxNWFkMjE0ODZlOWJlNGMyMHAwTCwgMHgzLjk5NzY2YTA2NTQ4YTA1ODI5ZTg1M2JkYjJiNTJwLTkyTCwKKwkweDEuNjA1ZTFiOTc2ZGMwOGIwNzZmNTkyYXAwTCwgMHg0Ljg2ZTNiMzRlYWQxYjQ3NjlkZjg2N2I5Yzg5Y2NwLTkyTCwKKwkweDEuNjI0N2ViMDNhNTU4NGIxZjBmYTA2ZXAwTCwgMHgxLmQyZGE0MmJiMWNlYWY5ZjczMjI3NWI4YWVmMzBwLTg4TCwKKwkweDEuNjQzNDYzNGNjYzMxZmM3NmY4NzE0Y3AwTCwgMHg0LmVkOWE0ZTQxMDAwMzA3MTAzYTE4Y2Y3YTZlMDhwLTkyTCwKKwkweDEuNjYyMzg4MjU1MjIyNDkxMjdkOWUyOHAwTCwgMHgxLmI4ZjMxNGEzMzdmNGRjMGEzYWRmMTc4N2ZmNzRwLTg4TCwKKwkweDEuNjgxNTVkNDRjYTk3MzA4MWM1NzIyNnAwTCwgMHgxLmI5ZjMyNzA2YmZlNGU2MjdkODA5YTg1ZGNjNjZwLTg4TCwKKwkweDEuNmEwOWU2NjdmM2JjYzkwOGIyZmIxMnAwTCwgMHgxLjY2ZWE5NTdkM2UzYWRlYzE3NTEyNzc1MDk5ZGFwLTg4TCwKKwkweDEuNmMwMTI3NTBiZGFiZWVkNzZhOTk4MHAwTCwgMHhmLjRmMzNmZGViOGIwZWNkODMxMTA2ZjU3YjNkMDBwLTk2TCwKKwkweDEuNmRmYjIzYzY1MWEyZWYyMjBlMmNiZXAwTCwgMHgxLmJiYWE4MzRiM2YxMTU3N2NlZWZiZTZjMWM0MTFwLTkyTCwKKwkweDEuNmZmN2RmOTUxOTQ4M2NmODdlMWI0ZXAwTCwgMHgxLjNlMjEzYmZmOWI3MDJkNWFhNDc3YzEyNTIzY2VwLTg4TCwKKwkweDEuNzFmNzVlOGVjNWY3M2RkMjM3MGYyZXAwTCwgMHhmLjBhY2Q2Y2I0MzRiNTYyZDllOGEyMGFkZGE2NDhwLTkyTCwKKwkweDEuNzNmOWE0OGE1ODE3M2JkNWM5YTRlNnAwTCwgMHg4LmFiMTE4MmFlMjE3ZjNhNzY4MTc1OTU1M2U4NDBwLTkyTCwKKwkweDEuNzVmZWI1NjQyNjdjOGJmNmU5YWEzMnAwTCwgMHgxLmE0OGIyNzA3MTgwNWU2MWExN2I5NTRhMmRhZDhwLTg4TCwKKwkweDEuNzgwNjk0ZmRlNWQzZjYxOWFlMDI4MHAwTCwgMHg4LjU4YjJiYjJiZGNmODZjZDA4ZTM1ZmIwNGMwZjBwLTkyTCwKKwkweDEuN2ExMTQ3M2ViMDE4NmQ3ZDUxMDIzZXAwTCwgMHgxLjZjZGExZjVlZjQyYjY2OTc3OTYwNTMxZTgyMWJwLTg4TCwKKwkweDEuN2MxZWQwMTMwYzEzMjdjNDkzMzQ0NHAwTCwgMHgxLjkzNzU2MmIyZGM5MzNkNDRmYzgyOGVmZDRjOWNwLTg4TCwKKwkweDEuN2UyZjMzNmNmNGU2MjEwNWQwMmJhMHAwTCwgMHgxLjU3OTdlMTcwYTE0MjdmOGZjZGY1ZjM5MDYxMDhwLTg4TCwKKwkweDEuODA0Mjc1NDNlMWExMWI2MGRlNjc2NHAwTCwgMHg5LmEzNTRlYTcwNmI4ZTRkOGI3MThhNjcyYmY3YzhwLTkyTCwKKwkweDEuODI1ODk5OTRjY2UxMjhhY2Y4OGFmYXAwTCwgMHhiLjM0YTAxMGY2YWQ2NWNiYmFjMGY1MzJkMzliZTBwLTkyTCwKKwkweDEuODQ3MWE0NjIzYzdhY2NlNTJmNmI5NnAwTCwgMHgxLmM2NDA5NTM3MGY1MWY0ODgxNzkxNGRkNzg2NjVwLTg4TCwKKwkweDEuODY4ZDk5YjQ0OTJlYzgwZTQxZDkwYXAwTCwgMHhjLjI1MTcwNzQ4NGQ3M2YxMzZmYjU3Nzk2NTZiNzBwLTkyTCwKKwkweDEuODhhYzdkOThhNjY5OTY2NTMwYmNkZXAwTCwgMHgxLjJkNGU5ZDYxMjgzZWYzODVkZTE3MGFiMjBmOTZwLTg4TCwKKwkweDEuOGFjZTU0MjJhYTBkYjViYTdjNTVhMHAwTCwgMHgxLjkyYzliYjNlNmVkNjFmMjczMzMwNGEzNDZkOGZwLTg4TCwKKwkweDEuOGNmMzIxNmI1NDQ4YmVmMmFhMWNkMHAwTCwgMHgxLjYxYzU1ZDg0YTk4NDhmOGM0NTNiM2NhOGM5NDZwLTg4TCwKKwkweDEuOGYxYWU5OTE1NzczNjJiOTgyNzQ1Y3AwTCwgMHg3LjJlZDgwNGVmYzliNGFlMTQ1OGFlOTQ2MDk5ZDRwLTkyTCwKKwkweDEuOTE0NWIwYjkxZmZjNTg4YTYxYjQ2OHAwTCwgMHgxLmY2YjcwZTAxYzJhOTAyMjlhNGM0MzA5ZWE3MTlwLTg4TCwKKwkweDEuOTM3MzdiMGNkYzVlNGY0NTAxYzNmMnAwTCwgMHg1LjQwYTIyZDJmYzRhZjU4MWI2M2U4MzI2ZWZlOWNwLTkyTCwKKwkweDEuOTVhNDRjYmM4NTIwZWU5YjQ4MzY5NHAwTCwgMHgxLmEwZmM2ZjdjN2Q2MWIyYjNhMjJhMGVhYjJjYWRwLTg4TCwKKwkweDEuOTdkODI5ZmRlNGU0ZjhiOWU5MjBmOHAwTCwgMHgxLjFlOGJkN2VkYjlkNzE0NGI2ZjY4MTgwODRjYzdwLTg4TCwKKwkweDEuOWEwZjE3MGNhMDdiOWJhMzEwOWI4Y3AwTCwgMHg0LjY3MzdiZWIxOWUxZWFkYTY4MjVkM2M1NTc0MjhwLTkyTCwKKwkweDEuOWM0OTE4MmEzZjA5MDFjN2M0NmIwNnAwTCwgMHgxLjFmMmJlNThkZGFkZTUwYzIxNzE4NmM5MGI0NTdwLTg4TCwKKwkweDEuOWU4NjMxOWUzMjMyMzE4MjRjYTc4ZXAwTCwgMHg2LjRjNmUwMTBmOTJjMDgyYmJhZGZhZjYwNWNmZDRwLTkyTCwKKwkweDEuYTBjNjY3YjVkZTU2NGIyOWFkYThiOHAwTCwgMHhjLmFiMzQ5YWEwNDIyYThkYTdkNDUxMmVkYWM1NDhwLTkyTCwKKwkweDEuYTMwOWJlYzRhMmQzMzU4YzE3MWY3NnAwTCwgMHgxLjBkYWFkNTQ3ZmEyMmMyNmQxNjhlYTc2MmQ4NTRwLTg4TCwKKwkweDEuYTU1MDNiMjNlMjU1YzhiNDI0NDkxY3AwTCwgMHhhLmY4N2JjODA1MGE0MDUzODE3MDNlZjdjYWZmNTBwLTkyTCwKKwkweDEuYTc5OWUxMzMwYjM1ODZmMmRmYjJiMHAwTCwgMHgxLjU4ZjFhOTg3OTZjZTg5MDhhZTg1MjIzNmNhOTRwLTg4TCwKKwkweDEuYTllNmI1NTc5ZmRiZjQzZWIyNDNiY3AwTCwgMHgxLmZmNGM0YzU4YjU3MWNmNDY1Y2FmMDdiNGI5ZjVwLTg4TCwKKwkweDEuYWMzNmJiZmQzZjM3OWMwZGI5NjZhMnAwTCwgMHgxLjEyNjVmYzczZTQ4MDcxMmQyMGY4NTk3YThlN2JwLTg4TCwKKwkweDEuYWU4OWY5OTVhZDNhZDVlODczNGQxNnAwTCwgMHgxLjczMjA1YTdmYmMzYWU2NzVlYTQ0MGIxNjJkNmNwLTg4TCwKKwkweDEuYjBlMDcyOThkYjY2NTkwODQyYWNkZXAwTCwgMHgxLmM2ZjZjYTBlNWRjYWUyYWFmZmZhN2EwNTU0Y2JwLTg4TCwKKwkweDEuYjMzYTJiODRmMTVmYWY2YmZkMGU3YXAwTCwgMHgxLmQ5NDdjMjU3NTc4MWRiYjQ5YjEyMzdjODdiNmVwLTg4TCwKKwkweDEuYjU5NzI4ZGU1NTkzOThlMzg4MTExMHAwTCwgMHgxLjY0ODczYzcxNzFmZWZjNDEwNDE2YmUwYTY1MjVwLTg4TCwKKwkweDEuYjdmNzZmMmZiNWU0NmVhYTdiMDgxYXAwTCwgMHhiLjUzYzUzNTRjODkwM2MzNTZlNGI2MjVhYWNjMjhwLTkyTCwKKwkweDEuYmE1YjAzMGExMDY0OTg0MGNiM2M2YXAwTCwgMHhmLjViNDdmMjk3MjAzNzU3ZTFjYzZlYWRjOGJhZDBwLTkyTCwKKwkweDEuYmNjMWU5MDRiYzFkMjI0N2JhMGY0NHAwTCwgMHgxLmIzZDA4Y2QwYjIwMjg3MDkyYmQ1OWJlNGFkOThwLTg4TCwKKwkweDEuYmYyYzI1YmQ3MWUwODg0MDhkNzAyNHAwTCwgMHgxLjE4ZTM0NDlmYTA3M2IzNTY3NjZkZmI1NjhmZjRwLTg4TCwKKwkweDEuYzE5OWJkZDg1NTI5YzIyMjBjYjEyYXAwTCwgMHg5LjFiYTY2Nzk0NDQ5NjRhMzY2NjEyNDAwNDM5NzBwLTk2TCwKKwkweDEuYzQwYWI1ZmZmZDA3YTZkMTRkZjgyMHAwTCwgMHhmLjE4MjhhNTM2NmZkMzg3YTdiZGQ1NGNkZjczMDBwLTkyTCwKKwkweDEuYzY3ZjEyZTU3ZDE0YjRhMjEzN2ZkMnAwTCwgMHhmLjJiMzAxZGQ5ZTZiMTUxYTZkMWY5ZDVkNWY1MjBwLTk2TCwKKwkweDEuYzhmNmQ5NDA2ZTdiNTExYWNiYzQ4OHAwTCwgMHg1LmM0NDJkZGI1NTgyMDE3MWYzMTlkOWU1MDc2YThwLTk2TCwKKwkweDEuY2I3MjBkY2VmOTA2OTE1MDNjYmQxZXAwTCwgMHg5LjQ5ZGI3NjFkOTU1OWFjMGNiNmRkM2VkNTk5ZTBwLTkyTCwKKwkweDEuY2RmMGI1NTVkYzNmOWM0NGY4OTU4ZXAwTCwgMHgxLmFjNTFiZTUxNWY4YzU4YmRmYjZmNTc0MGEzYTRwLTg4TCwKKwkweDEuZDA3MmQ0YTA3ODk3YjhkMGYyMmYyMHAwTCwgMHgxLmExNThlMThmYmJmYzYyNWYwOWY0Y2NhNDA4NzRwLTg4TCwKKwkweDEuZDJmODcwODBkODlmMThhZGUxMjM5OHAwTCwgMHg5LmVhMjAyNWI0YzU2NTUzZjVjZGVlNGM5MjQ3MjhwLTkyTCwKKwkweDEuZDU4MThkY2ZiYTQ4NzI1ZGEwNWFlYXAwTCwgMHgxLjY2ZTBkY2E5ZjU4OWY1NTljMDg3NmZmMjM4MzBwLTg4TCwKKwkweDEuZDgwZTMxNmM5ODM5N2JiODRmOWQwNHAwTCwgMHg4LjgwNWY4NGJlYzYxNGRlMjY5OTAwZGRmOThkMjhwLTkyTCwKKwkweDEuZGE5ZTYwM2RiMzI4NTcwOGMwMWE1YXAwTCwgMHgxLjZkNGM5N2Y2MjQ2ZjBlYzYxNGVjOTVjOTkzOTJwLTg4TCwKKwkweDEuZGQzMjFmMzAxYjQ2MDRiNjk1ZGUzY3AwTCwgMHg2LjMwYTM5MzIxNTI5OWUzMGQ0ZmI3MzUwM2MzNDhwLTk2TCwKKwkweDEuZGZjOTczMzdiOWI1ZWI5NjhjYWMzOHAwTCwgMHgxLmVkMjkxYjcyMjVhOTQ0ZWZkNWJiNTUyNGI5MjdwLTg4TCwKKwkweDEuZTI2NDYxNGY1YTEyOGExMjc2MWZhMHAwTCwgMHgxLjdhZGE2NDY3ZTc3ZjczYmY2NWUwNGM5NWUyOWRwLTg4TCwKKwkweDEuZTUwMmVlNzhiM2ZmNjI3M2QxMzAxNHAwTCwgMHgxLjM5OTFlOGY0OTY1OWUxNjkzYmUxN2FlMWQyZjlwLTg4TCwKKwkweDEuZTdhNTFmYmM3NGM4MzRiNTQ4YjI4MnAwTCwgMHgxLjIzNzg2NzU4YTg0ZjQ5NTYzNTQ2MzRhNDE2Y2VwLTg4TCwKKwkweDEuZWE0YWZhMmE0OTBkOTg1OGY3M2ExOHAwTCwgMHhmLjVkYjMwMWY4NmRlYTIwNjEwY2VlZTEzZWI3YjhwLTkyTCwKKwkweDEuZWNmNDgyZDhlNjdmMDhkYjAzMTJmYXAwTCwgMHgxLjk0OWNlZjQ2MjAxMGJiNGJjNGNlNzJhOTAwZGZwLTg4TCwKKwkweDEuZWZhMWJlZTYxNWEyNzc3MWZkMjFhOHAwTCwgMHgxLjJkYWMxZjZkZDVkMjI5ZmY2OGU0NmYyN2UzZGZwLTg4TCwKKwkweDEuZjI1MmIzNzZiYmE5NzRlODY5NmZjMnAwTCwgMHgxLjYzOTBkNGM2YWQ1NDc2YjUxNjJmNDBlMWQ5YTlwLTg4TCwKKwkweDEuZjUwNzY1YjZlNDU0MDY3NGY4NGI3NnAwTCwgMHgyLjg2MmJhZmY5OTAwMGRmYzQzNTJiYTI5Yjg5MDhwLTkyTCwKKwkweDEuZjdiZmRhZDljYmUxMzg5MTNiNGJmZXAwTCwgMHg3LjJiZDk1YzVjZTcyODBmYTRkMjM0NGEzZjU2MThwLTkyTCwKKwkweDEuZmE3YzE4MTllOTBkODJlOTBhN2U3NHAwTCwgMHhiLjI2M2MxZGMwNjBjMzZmNzY1MGI0YzBmMjMzYThwLTkyTCwKKwkweDEuZmQzYzIyYjhmNzFmMTA5NzViYTRiMnAwTCwgMHgxLjJiY2YzYTVlMTJkMjY5ZDhhZDdjMWE0YTg4NzVwLTg4TAorfTsKKworbG9uZyBkb3VibGUKK2V4cGwobG9uZyBkb3VibGUgeCkKK3sKKwl1bmlvbiBJRUVFbDJiaXRzIHUsIHY7CisJbG9uZyBkb3VibGUgcSwgciwgcjEsIHQsIHR3b3BrLCB0d29wa3AxMDAwMDsKKwlkb3VibGUgZHIsIGZuLCByMjsKKwlpbnQgaywgbiwgbjI7CisJdWludDE2X3QgaHgsIGl4OworCisJLyogRmlsdGVyIG91dCBleGNlcHRpb25hbCBjYXNlcy4gKi8KKwl1LmUgPSB4OworCWh4ID0gdS54Yml0cy5leHBzaWduOworCWl4ID0gaHggJiAweDdmZmY7CisJaWYgKGl4ID49IEJJQVMgKyAxMykgewkJLyogfHh8ID49IDgxOTIgb3IgeCBpcyBOYU4gKi8KKwkJaWYgKGl4ID09IEJJQVMgKyBMREJMX01BWF9FWFApIHsKKwkJCWlmIChoeCAmIDB4ODAwMCkgIC8qIHggaXMgLUluZiBvciAtTmFOICovCisJCQkJcmV0dXJuICgtMSAvIHgpOworCQkJcmV0dXJuICh4ICsgeCk7CS8qIHggaXMgK0luZiBvciArTmFOICovCisJCX0KKwkJaWYgKHggPiBvX3RocmVzaG9sZCkKKwkJCXJldHVybiAoaHVnZSAqIGh1Z2UpOworCQlpZiAoeCA8IHVfdGhyZXNob2xkKQorCQkJcmV0dXJuICh0aW55ICogdGlueSk7CisJfSBlbHNlIGlmIChpeCA8IEJJQVMgLSAxMTQpIHsJLyogfHh8IDwgMHgxcC0xMTQgKi8KKwkJcmV0dXJuICgxICsgeCk7CQkvKiAxIHdpdGggaW5leGFjdCBpZmYgeCAhPSAwICovCisJfQorCisJRU5URVJJKCk7CisKKwkvKiBSZWR1Y2UgeCB0byAoaypsbjIgKyBlbmRwb2ludFtuMl0gKyByMSArIHIyKS4gKi8KKwkvKiBVc2UgYSBzcGVjaWFsaXplZCByaW50KCkgdG8gZ2V0IGZuLiAgQXNzdW1lIHJvdW5kLXRvLW5lYXJlc3QuICovCisJLyogWFhYIGFzc3VtZSBubyBleHRyYSBwcmVjaXNpb24gZm9yIHRoZSBhZGRpdGlvbnMsIGFzIGZvciB0cmlnIGZucy4gKi8KKwkvKiBYWFggdGhpcyBzZXQgb2YgY29tbWVudHMgaXMgbm93IHF1YWRydXBsaWNhdGVkLiAqLworCWZuID0gKGRvdWJsZSl4ICogSU5WX0wgKyAweDEuOHA1MiAtIDB4MS44cDUyOworI2lmIGRlZmluZWQoSEFWRV9FRkZJQ0lFTlRfSVJJTlQpCisJbiA9IGlyaW50KGZuKTsKKyNlbHNlCisJbiA9IChpbnQpZm47CisjZW5kaWYKKwluMiA9ICh1bnNpZ25lZCluICUgSU5URVJWQUxTOworCWsgPSBuID4+IExPRzJfSU5URVJWQUxTOworCXIxID0geCAtIGZuICogTDE7CisJcjIgPSBmbiAqIC1MMjsKKwlyID0gcjEgKyByMjsKKworCS8qIFByZXBhcmUgc2NhbGUgZmFjdG9ycy4gKi8KKwkvKiBYWFggc3BhcmM2NCBtdWx0aXBsaWNhdGlvbiBpcyBzbyBzbG93IHRoYXQgc2NhbGJubCgpIGlzIGZhc3Rlci4gKi8KKwl2LmUgPSAxOworCWlmIChrID49IExEQkxfTUlOX0VYUCkgeworCQl2LnhiaXRzLmV4cHNpZ24gPSBCSUFTICsgazsKKwkJdHdvcGsgPSB2LmU7CisJfSBlbHNlIHsKKwkJdi54Yml0cy5leHBzaWduID0gQklBUyArIGsgKyAxMDAwMDsKKwkJdHdvcGtwMTAwMDAgPSB2LmU7CisJfQorCisJLyogRXZhbHVhdGUgZXhwbChlbmRwb2ludFtuMl0gKyByMSArIHIyKSA9IHRibFtuMl0gKiBleHBsKHIxICsgcjIpLiAqLworCWRyID0gcjsKKwlxID0gcjIgKyByICogciAqIChBMiArIHIgKiAoQTMgKyByICogKEE0ICsgciAqIChBNSArIHIgKiAoQTYgKworCSAgICBkciAqIChBNyArIGRyICogKEE4ICsgZHIgKiAoQTkgKyBkciAqIEExMCkpKSkpKSkpOworCXQgPSB0YmxbbjJdLmxvICsgdGJsW24yXS5oaTsKKwl0ID0gdGJsW24yXS5sbyArIHQgKiAocSArIHIxKSArIHRibFtuMl0uaGk7CisKKwkvKiBTY2FsZSBieSAyKiprLiAqLworCWlmIChrID49IExEQkxfTUlOX0VYUCkgeworCQlpZiAoayA9PSBMREJMX01BWF9FWFApCisJCQlSRVRVUk5JKHQgKiAyICogMHgxcDE2MzgzTCk7CisJCVJFVFVSTkkodCAqIHR3b3BrKTsKKwl9IGVsc2UgeworCQlSRVRVUk5JKHQgKiB0d29wa3AxMDAwMCAqIHR3b20xMDAwMCk7CisJfQorfQorCisvKgorICogT3VyIFQxIGFuZCBUMiBhcmUgY2hvc2VuIHRvIGJlIGFwcHJveGltYXRlbHkgdGhlIHBvaW50cyB3aGVyZSBtZXRob2QKKyAqIEEgYW5kIG1ldGhvZCBCIGhhdmUgdGhlIHNhbWUgYWNjdXJhY3kuICBUYW5nJ3MgVDEgYW5kIFQyIGFyZSB0aGUKKyAqIHBvaW50cyB3aGVyZSBtZXRob2QgQSdzIGFjY3VyYWN5IGNoYW5nZXMgYnkgYSBmdWxsIGJpdC4gIEZvciBUYW5nLAorICogdGhpcyBkcm9wIGluIGFjY3VyYWN5IG1ha2VzIG1ldGhvZCBBIGltbWVkaWF0ZWx5IGxlc3MgYWNjdXJhdGUgdGhhbgorICogbWV0aG9kIEIsIGJ1dCBvdXIgbGFyZ2VyIElOVEVSVkFMUyBtYWtlcyBtZXRob2QgQSAyIGJpdHMgbW9yZQorICogYWNjdXJhdGUgc28gaXQgcmVtYWlucyB0aGUgbW9zdCBhY2N1cmF0ZSBtZXRob2Qgc2lnbmlmaWNhbnRseQorICogY2xvc2VyIHRvIHRoZSBvcmlnaW4gZGVzcGl0ZSBsb3NpbmcgdGhlIGZ1bGwgYml0IGluIG91ciBleHRlbmRlZAorICogcmFuZ2UgZm9yIGl0LgorICoKKyAqIFNwbGl0IHRoZSBpbnRlcnZhbCBbVDEsIFQyXSBpbnRvIHR3byBpbnRlcnZhbHMgW1QxLCBUM10gYW5kIFtUMywgVDJdLgorICogU2V0dGluZyBUMyB0byAwIHdvdWxkIHJlcXVpcmUgdGhlIHx4fCA8IDB4MXAtMTEzIGNvbmRpdGlvbiB0byBhcHBlYXIKKyAqIGluIGJvdGggc3ViaW50ZXJ2YWxzLCBzbyBzZXQgVDMgPSAyKiotNSwgd2hpY2ggcGxhY2VzIHRoZSBjb25kaXRpb24KKyAqIGludG8gdGhlIFtUMSwgVDNdIGludGVydmFsLgorICovCitzdGF0aWMgY29uc3QgZG91YmxlCitUMSA9IC0wLjE2NTksCQkJCS8qIH4tMzAuNjI1LzEyOCAqIGxvZygyKSAqLworVDIgPSAgMC4xNjU5LAkJCQkvKiB+MzAuNjI1LzEyOCAqIGxvZygyKSAqLworVDMgPSAgMC4wMzEyNTsKKworLyoKKyAqIERvbWFpbiBbLTAuMTY1OSwgMC4wMzEyNV0sIHJhbmdlIH5bMi45MTM0ZS00NCwgMS44NDA0ZS0zN106CisgKiB8KGV4cCh4KS0xLXgteCoqMi8yKS94IC0gcCh4KXwgPCAyKiotMTIyLjAzCisgKi8KK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZQorQzMgID0gIDEuNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjdlLTFMLAorQzQgID0gIDQuMTY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NDVlLTJMLAorQzUgID0gIDguMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzNzE2MzhlLTNMLAorQzYgID0gIDEuMzg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OTExODg2NThlLTNMLAorQzcgID0gIDEuOTg0MTI2OTg0MTI2OTg0MTI2OTg0MTI2OTcyMzU5NTAzOTRlLTRMLAorQzggID0gIDIuNDgwMTU4NzMwMTU4NzMwMTU4NzMwMTUxMTI0ODc4NDkwNDBlLTVMLAorQzkgID0gIDIuNzU1NzMxOTIyMzk4NTg5MDY1MjU2MDY2ODU0ODQ0MTIwMDVlLTZMLAorQzEwID0gIDIuNzU1NzMxOTIyMzk4NTg5MDY2MTI5NjYwOTMwNTcwMjAzNjJlLTdMLAorQzExID0gIDIuNTA1MjEwODM4NTQ0MTcyMDM2MTkwMzE5NjAxNTEyNTM5NDRlLThMLAorQzEyID0gIDIuMDg3Njc1Njk4Nzg2Nzk1NzY0NTcyNzIyODI1NjY1MjA2NDllLTlMLAorQzEzID0gIDEuNjA1OTA0MzgzNjcyNTI0NzE3ODM1NDg3NDg4MjQyNTU3MDdlLTEwTDsKKworc3RhdGljIGNvbnN0IGRvdWJsZQorQzE0ID0gIDEuMTQ3MDc0NTU4MDQ5MTkzMmUtMTEsCQkvKiAgMHgxLjkzOTc0YTgxZGFlMzBwLTM3ICovCitDMTUgPSAgNy42NDcxNjIwMTgxMDkwNDY4ZS0xMywJCS8qICAweDEuYWU3ZjM4MjBhZGFiMXAtNDEgKi8KK0MxNiA9ICA0Ljc3OTM3MjE0NjAyNjA0NTBlLTE0LAkJLyogIDB4MS5hZTdjZDE4YTE4ZWFjcC00NSAqLworQzE3ID0gIDIuODA3NDc1NzM1NjY1ODg3N2UtMTUsCQkvKiAgMHgxLjk0OTk5MmExOTM3ZDlwLTQ5ICovCitDMTggPSAgMS40NzYwNjEwMzIzNjk5NDc2ZS0xNjsJCS8qICAweDEuNTQ1YjQzYWFiZmJjZHAtNTMgKi8KKworLyoKKyAqIERvbWFpbiBbMC4wMzEyNSwgMC4xNjU5XSwgcmFuZ2UgflstMi43Njc2ZS0zNywgLTEuMDM2N2UtMzhdOgorICogfChleHAoeCktMS14LXgqKjIvMikveCAtIHAoeCl8IDwgMioqLTEyMS40NAorICovCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK0QzICA9ICAxLjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjgyMjQ1ZS0xTCwKK0Q0ICA9ICA0LjE2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjM0MjI4MzI0ZS0yTCwKK0Q1ICA9ICA4LjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzY0MDIyMjQ0NDgxZS0zTCwKK0Q2ICA9ICAxLjM4ODg4ODg4ODg4ODg4ODg4ODg4ODg3MTM4NzIyNzYyMDcyZS0zTCwKK0Q3ICA9ICAxLjk4NDEyNjk4NDEyNjk4NDEyNjk5MDg1ODA1NDI0NjYxNDcxZS00TCwKK0Q4ICA9ICAyLjQ4MDE1ODczMDE1ODczMDE1Njg3OTkzNzEyMTAxNDc5NjEyZS01TCwKK0Q5ICA9ICAyLjc1NTczMTkyMjM5ODU4OTQ0MTAxMDM2Mjg4MzM4MjA4MDQyZS02TCwKK0QxMCA9ICAyLjc1NTczMTkyMjM5ODUzMTYxMTQ4MDY0Njc2NTMzNzU0MDQ4ZS03TCwKK0QxMSA9ICAyLjUwNTIxMDgzODU1MDg0NTcwMDQ2NDgwNDUwOTM1MjY3NDMzZS04TCwKK0QxMiA9ICAyLjA4NzY3NTY5ODE5NzM4NTI0NDg4Njg2MzE4MDI0ODU0OTQyZS05TCwKK0QxMyA9ICAxLjYwNTkwNDQyMjk3MDA4NDk1MzAxOTI3NDQ4MTIyNDk5MzEzZS0xMEw7CisKK3N0YXRpYyBjb25zdCBkb3VibGUKK0QxNCA9ICAxLjE0NzA3MjYxNzYyMDQzMzZlLTExLAkJLyogIDB4MS45Mzk3MWRjMzk1ZDllcC0zNyAqLworRDE1ID0gIDcuNjQ3ODUzMjI0OTU4MTY4NmUtMTMsCQkvKiAgMHgxLmFlODkyZTNEMTZmY2VwLTQxICovCitEMTYgPSAgNC43NjI4ODkyODMyNjA3NzQxZS0xNCwJCS8qICAweDEuYWQwMERmZTQxZmVjY3AtNDUgKi8KK0QxNyA9ICAzLjA1MjQ4NTcyMjAzNTg2NTBlLTE1OwkJLyogIDB4MS5EN2U4ZDg4NkRmOTIxcC00OSAqLworCitsb25nIGRvdWJsZQorZXhwbTFsKGxvbmcgZG91YmxlIHgpCit7CisJdW5pb24gSUVFRWwyYml0cyB1LCB2OworCWxvbmcgZG91YmxlIGh4Ml9oaSwgaHgyX2xvLCBxLCByLCByMSwgdCwgdHdvbWssIHR3b3BrLCB4X2hpOworCWxvbmcgZG91YmxlIHhfbG8sIHgyOworCWRvdWJsZSBkciwgZHgsIGZuLCByMjsKKwlpbnQgaywgbiwgbjI7CisJdWludDE2X3QgaHgsIGl4OworCisJLyogRmlsdGVyIG91dCBleGNlcHRpb25hbCBjYXNlcy4gKi8KKwl1LmUgPSB4OworCWh4ID0gdS54Yml0cy5leHBzaWduOworCWl4ID0gaHggJiAweDdmZmY7CisJaWYgKGl4ID49IEJJQVMgKyA3KSB7CQkvKiB8eHwgPj0gMTI4IG9yIHggaXMgTmFOICovCisJCWlmIChpeCA9PSBCSUFTICsgTERCTF9NQVhfRVhQKSB7CisJCQlpZiAoaHggJiAweDgwMDApICAvKiB4IGlzIC1JbmYgb3IgLU5hTiAqLworCQkJCXJldHVybiAoLTEgLyB4IC0gMSk7CisJCQlyZXR1cm4gKHggKyB4KTsJLyogeCBpcyArSW5mIG9yICtOYU4gKi8KKwkJfQorCQlpZiAoeCA+IG9fdGhyZXNob2xkKQorCQkJcmV0dXJuIChodWdlICogaHVnZSk7CisJCS8qCisJCSAqIGV4cG0xbCgpIG5ldmVyIHVuZGVyZmxvd3MsIGJ1dCBpdCBtdXN0IGF2b2lkCisJCSAqIHVucmVwcmVzZW50YWJsZSBsYXJnZSBuZWdhdGl2ZSBleHBvbmVudHMuICBXZSB1c2VkIGEKKwkJICogbXVjaCBzbWFsbGVyIHRocmVzaG9sZCBmb3IgbGFyZ2UgfHh8IGFib3ZlIHRoYW4gaW4KKwkJICogZXhwbCgpIHNvIGFzIHRvIGhhbmRsZSBub3Qgc28gbGFyZ2UgbmVnYXRpdmUgZXhwb25lbnRzCisJCSAqIGluIHRoZSBzYW1lIHdheSBhcyBsYXJnZSBvbmVzIGhlcmUuCisJCSAqLworCQlpZiAoaHggJiAweDgwMDApCS8qIHggPD0gLTEyOCAqLworCQkJcmV0dXJuICh0aW55IC0gMSk7CS8qIGdvb2QgZm9yIHggPCAtMTE0bG4yIC0gZXBzICovCisJfQorCisJRU5URVJJKCk7CisKKwlpZiAoVDEgPCB4ICYmIHggPCBUMikgeworCQl4MiA9IHggKiB4OworCQlkeCA9IHg7CisKKwkJaWYgKHggPCBUMykgeworCQkJaWYgKGl4IDwgQklBUyAtIDExMykgewkvKiB8eHwgPCAweDFwLTExMyAqLworCQkJCS8qIHggKHJvdW5kZWQpIHdpdGggaW5leGFjdCBpZiB4ICE9IDA6ICovCisJCQkJUkVUVVJOSSh4ID09IDAgPyB4IDoKKwkJCQkgICAgKDB4MXAyMDAgKiB4ICsgZmFic2woeCkpICogMHgxcC0yMDApOworCQkJfQorCQkJcSA9IHggKiB4MiAqIEMzICsgeDIgKiB4MiAqIChDNCArIHggKiAoQzUgKyB4ICogKEM2ICsKKwkJCSAgICB4ICogKEM3ICsgeCAqIChDOCArIHggKiAoQzkgKyB4ICogKEMxMCArCisJCQkgICAgeCAqIChDMTEgKyB4ICogKEMxMiArIHggKiAoQzEzICsKKwkJCSAgICBkeCAqIChDMTQgKyBkeCAqIChDMTUgKyBkeCAqIChDMTYgKworCQkJICAgIGR4ICogKEMxNyArIGR4ICogQzE4KSkpKSkpKSkpKSkpKSk7CisJCX0gZWxzZSB7CisJCQlxID0geCAqIHgyICogRDMgKyB4MiAqIHgyICogKEQ0ICsgeCAqIChENSArIHggKiAoRDYgKworCQkJICAgIHggKiAoRDcgKyB4ICogKEQ4ICsgeCAqIChEOSArIHggKiAoRDEwICsKKwkJCSAgICB4ICogKEQxMSArIHggKiAoRDEyICsgeCAqIChEMTMgKworCQkJICAgIGR4ICogKEQxNCArIGR4ICogKEQxNSArIGR4ICogKEQxNiArCisJCQkgICAgZHggKiBEMTcpKSkpKSkpKSkpKSkpOworCQl9CisKKwkJeF9oaSA9IChmbG9hdCl4OworCQl4X2xvID0geCAtIHhfaGk7CisJCWh4Ml9oaSA9IHhfaGkgKiB4X2hpIC8gMjsKKwkJaHgyX2xvID0geF9sbyAqICh4ICsgeF9oaSkgLyAyOworCQlpZiAoaXggPj0gQklBUyAtIDcpCisJCQlSRVRVUk5JKGh4Ml9sbyArIHhfbG8gKyBxICsgKGh4Ml9oaSArIHhfaGkpKTsKKwkJZWxzZQorCQkJUkVUVVJOSShoeDJfbG8gKyBxICsgaHgyX2hpICsgeCk7CisJfQorCisJLyogUmVkdWNlIHggdG8gKGsqbG4yICsgZW5kcG9pbnRbbjJdICsgcjEgKyByMikuICovCisJLyogVXNlIGEgc3BlY2lhbGl6ZWQgcmludCgpIHRvIGdldCBmbi4gIEFzc3VtZSByb3VuZC10by1uZWFyZXN0LiAqLworCWZuID0gKGRvdWJsZSl4ICogSU5WX0wgKyAweDEuOHA1MiAtIDB4MS44cDUyOworI2lmIGRlZmluZWQoSEFWRV9FRkZJQ0lFTlRfSVJJTlQpCisJbiA9IGlyaW50KGZuKTsKKyNlbHNlCisJbiA9IChpbnQpZm47CisjZW5kaWYKKwluMiA9ICh1bnNpZ25lZCluICUgSU5URVJWQUxTOworCWsgPSBuID4+IExPRzJfSU5URVJWQUxTOworCXIxID0geCAtIGZuICogTDE7CisJcjIgPSBmbiAqIC1MMjsKKwlyID0gcjEgKyByMjsKKworCS8qIFByZXBhcmUgc2NhbGUgZmFjdG9yLiAqLworCXYuZSA9IDE7CisJdi54Yml0cy5leHBzaWduID0gQklBUyArIGs7CisJdHdvcGsgPSB2LmU7CisKKwkvKgorCSAqIEV2YWx1YXRlIGxvd2VyIHRlcm1zIG9mCisJICogZXhwbChlbmRwb2ludFtuMl0gKyByMSArIHIyKSA9IHRibFtuMl0gKiBleHBsKHIxICsgcjIpLgorCSAqLworCWRyID0gcjsKKwlxID0gcjIgKyByICogciAqIChBMiArIHIgKiAoQTMgKyByICogKEE0ICsgciAqIChBNSArIHIgKiAoQTYgKworCSAgICBkciAqIChBNyArIGRyICogKEE4ICsgZHIgKiAoQTkgKyBkciAqIEExMCkpKSkpKSkpOworCisJdCA9IHRibFtuMl0ubG8gKyB0YmxbbjJdLmhpOworCisJaWYgKGsgPT0gMCkgeworCQl0ID0gdGJsW24yXS5sbyAqIChyMSArIDEpICsgdCAqIHEgKyB0YmxbbjJdLmhpICogcjEgKworCQkgICAgKHRibFtuMl0uaGkgLSAxKTsKKwkJUkVUVVJOSSh0KTsKKwl9CisJaWYgKGsgPT0gLTEpIHsKKwkJdCA9IHRibFtuMl0ubG8gKiAocjEgKyAxKSArIHQgKiBxICsgdGJsW24yXS5oaSAqIHIxICsgCisJCSAgICAodGJsW24yXS5oaSAtIDIpOworCQlSRVRVUk5JKHQgLyAyKTsKKwl9CisJaWYgKGsgPCAtNykgeworCQl0ID0gdGJsW24yXS5sbyArIHQgKiAocSArIHIxKSArIHRibFtuMl0uaGk7CisJCVJFVFVSTkkodCAqIHR3b3BrIC0gMSk7CisJfQorCWlmIChrID4gMiAqIExEQkxfTUFOVF9ESUcgLSAxKSB7CisJCXQgPSB0YmxbbjJdLmxvICsgdCAqIChxICsgcjEpICsgdGJsW24yXS5oaTsKKwkJaWYgKGsgPT0gTERCTF9NQVhfRVhQKQorCQkJUkVUVVJOSSh0ICogMiAqIDB4MXAxNjM4M0wgLSAxKTsKKwkJUkVUVVJOSSh0ICogdHdvcGsgLSAxKTsKKwl9CisKKwl2LnhiaXRzLmV4cHNpZ24gPSBCSUFTIC0gazsKKwl0d29tayA9IHYuZTsKKworCWlmIChrID4gTERCTF9NQU5UX0RJRyAtIDEpCisJCXQgPSB0YmxbbjJdLmxvIC0gdHdvbWsgKyB0ICogKHEgKyByMSkgKyB0YmxbbjJdLmhpOworCWVsc2UKKwkJdCA9IHRibFtuMl0ubG8gKyB0ICogKHEgKyByMSkgKyAodGJsW24yXS5oaSAtIHR3b21rKTsKKwlSRVRVUk5JKHQgKiB0d29wayk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19sb2dsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19sb2dsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkxZDYyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX2xvZ2wuYwpAQCAtMCwwICsxLDczNyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMyBCcnVjZSBELiBFdmFucworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoqCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgeCBmb3IgMTI4LWJpdCBmb3JtYXQuCisgKgorICogRmlyc3QgZGVjb21wb3NlIHggaW50byBpdHMgYmFzZSAyIHJlcHJlc2VudGF0aW9uOgorICoKKyAqICAgIGxvZyh4KSA9IGxvZyhYICogMioqayksIHdoZXJlIFggaXMgaW4gWzEsIDIpCisgKiAgICAgICAgICAgPSBsb2coWCkgKyBrICogbG9nKDIpLgorICoKKyAqIExldCBYID0gWF9pICsgZSwgd2hlcmUgWF9pIGlzIHRoZSBjZW50ZXIgb2Ygb25lIG9mIHRoZSBpbnRlcnZhbHMKKyAqIFstMS4wLzI1NiwgMS4wLzI1NiksIFsxLjAvMjU2LCAzLjAvMjU2KSwgLi4uLiBbMi4wLTEuMC8yNTYsIDIuMCsxLjAvMjU2KQorICogYW5kIFggaXMgaW4gdGhpcyBpbnRlcnZhbC4gIFRoZW4KKyAqCisgKiAgICBsb2coWCkgPSBsb2coWF9pICsgZSkKKyAqICAgICAgICAgICA9IGxvZyhYX2kgKiAoMSArIGUgLyBYX2kpKQorICogICAgICAgICAgID0gbG9nKFhfaSkgKyBsb2coMSArIGUgLyBYX2kpLgorICoKKyAqIFRoZSB2YWx1ZXMgbG9nKFhfaSkgYXJlIHRhYnVsYXRlZCBiZWxvdy4gIExldCBkID0gZSAvIFhfaSBhbmQgdXNlCisgKgorICogICAgbG9nKDEgKyBkKSA9IHAoZCkKKyAqCisgKiB3aGVyZSBwKGQpID0gZCAtIDAuNSpkKmQgKyAuLi4gaXMgYSBzcGVjaWFsIG1pbmltYXggcG9seW5vbWlhbCBvZgorICogc3VpdGFibHkgaGlnaCBkZWdyZWUuCisgKgorICogVG8gZ2V0IHN1ZmZpY2llbnRseSBzbWFsbCByb3VuZG9mZiBlcnJvcnMsIGsgKiBsb2coMiksIGxvZyhYX2kpLCBhbmQKKyAqIHNvbWV0aW1lcyAoaWYgfGt8IGlzIG5vdCBsYXJnZSkgdGhlIGZpcnN0IHRlcm0gaW4gcChkKSBtdXN0IGJlIGV2YWx1YXRlZAorICogYW5kIGFkZGVkIHVwIGluIGV4dHJhIHByZWNpc2lvbi4gIEV4dHJhIHByZWNpc2lvbiBpcyBub3QgbmVlZGVkIGZvciB0aGUKKyAqIHJlc3Qgb2YgcChkKS4gIEluIHRoZSB3b3JzdCBjYXNlIHdoZW4gayA9IDAgYW5kIGxvZyhYX2kpIGlzIDAsIHRoZSBmaW5hbAorICogZXJyb3IgaXMgY29udHJvbGxlZCBtYWlubHkgYnkgdGhlIGVycm9yIGluIHRoZSBzZWNvbmQgdGVybSBpbiBwKGQpLiAgVGhlCisgKiBlcnJvciBpbiB0aGlzIHRlcm0gaXRzZWxmIGlzIGF0IG1vc3QgMC41IHVscHMgZnJvbSB0aGUgZCpkIG9wZXJhdGlvbiBpbgorICogaXQuICBUaGUgZXJyb3IgaW4gdGhpcyB0ZXJtIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCB0ZXJtIGlzIHRodXMgYXQgbW9zdAorICogMC41ICogfC0wLjV8ICogfGR8IDwgMS4wLzEwMjQgdWxwcy4gIFdlIGFpbSBmb3IgYW4gYWNjdW11bGF0ZWQgZXJyb3Igb2YKKyAqIGF0IG1vc3QgdHdpY2UgdGhpcyBhdCB0aGUgcG9pbnQgb2YgdGhlIGZpbmFsIHJvdW5kaW5nIHN0ZXAuICBUaHVzIHRoZQorICogZmluYWwgZXJyb3Igc2hvdWxkIGJlIGF0IG1vc3QgMC41ICsgMS4wLzUxMiA9IDAuNTAyMCB1bHBzLiAgRXhoYXVzdGl2ZQorICogdGVzdGluZyBvZiBhIGZsb2F0IHZhcmlhbnQgb2YgdGhpcyBmdW5jdGlvbiBzaG93ZWQgYSBtYXhpbXVtIGZpbmFsIGVycm9yCisgKiBvZiAwLjUwMDggdWxwcy4gIE5vbi1leGhhdXN0aXZlIHRlc3Rpbmcgb2YgYSBkb3VibGUgdmFyaWFudCBvZiB0aGlzCisgKiBmdW5jdGlvbiBzaG93ZWQgYSBtYXhpbXVtIGZpbmFsIGVycm9yIG9mIDAuNTA3OCB1bHBzIChuZWFyIDErMS4wLzI1NikuCisgKgorICogV2UgbWFkZSB0aGUgbWF4aW11bSBvZiB8ZHwgKGFuZCB0aHVzIHRoZSB0b3RhbCByZWxhdGl2ZSBlcnJvciBhbmQgdGhlCisgKiBkZWdyZWUgb2YgcChkKSkgc21hbGwgYnkgdXNpbmcgYSBsYXJnZSBudW1iZXIgb2YgaW50ZXJ2YWxzLiAgVXNpbmcKKyAqIGNlbnRlcnMgb2YgaW50ZXJ2YWxzIGluc3RlYWQgb2YgZW5kcG9pbnRzIHJlZHVjZXMgdGhpcyBtYXhpbXVtIGJ5IGEKKyAqIGZhY3RvciBvZiAyIGZvciBhIGdpdmVuIG51bWJlciBvZiBpbnRlcnZhbHMuICBwKGQpIGlzIHNwZWNpYWwgb25seQorICogaW4gYmVnaW5uaW5nIHdpdGggdGhlIFRheWxvciBjb2VmZmljaWVudHMgMCArIDEqZCwgd2hpY2ggdGVuZHMgdG8gaGFwcGVuCisgKiBuYXR1cmFsbHkuICBUaGUgbW9zdCBhY2N1cmF0ZSBtaW5pbWF4IHBvbHlub21pYWwgb2YgYSBnaXZlbiBkZWdyZWUgbWlnaHQKKyAqIGJlIGRpZmZlcmVudCwgYnV0IHRoZW4gd2Ugd291bGRuJ3Qgd2FudCBpdCBzaW5jZSB3ZSB3b3VsZCBoYXZlIHRvIGRvCisgKiBleHRyYSB3b3JrIHRvIGF2b2lkIHJvdW5kb2ZmIGVycm9yIChlc3BlY2lhbGx5IGZvciBQMCpkIGluc3RlYWQgb2YgZCkuCisgKi8KKworI2lmZGVmIERFQlVHCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZmVudi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJmcG1hdGguaCIKKyNpbmNsdWRlICJtYXRoLmgiCisjaWZuZGVmIE5PX1NUUlVDVF9SRVRVUk4KKyNkZWZpbmUJU1RSVUNUX1JFVFVSTgorI2VuZGlmCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKKyNpZiAhZGVmaW5lZChOT19VVEFCKSAmJiAhZGVmaW5lZChOT19VVEFCTCkKKyNkZWZpbmUJVVNFX1VUQUIKKyNlbmRpZgorCisvKgorICogRG9tYWluIFstMC4wMDUyODAsIDAuMDA0ODM4XSwgcmFuZ2UgflstMS4xNTc3ZS0zNywgMS4xNTgyZS0zN106CisgKiB8bG9nKDEgKyBkKS9kIC0gcChkKXwgPCAyKiotMTIyLjcKKyAqLworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCitQMiA9IC0wLjVMLAorUDMgPSAgMy4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzIzMzc5NWUtMUwsCS8qICAweDE1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0ZDQyLjBwLTExNEwgKi8KK1A0ID0gLTIuNDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NDExMzkyOTZlLTFMLAkvKiAtMHgxZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmRhYjE0ZS4wcC0xMTVMICovCitQNSA9ICAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1NDY4MDM5OTQzZS0xTCwJLyogIDB4MTk5OTk5OTk5OTk5OTk5OTk5OTlhNmQzNTY3ZjQuMHAtMTE1TCAqLworUDYgPSAtMS42NjY2NjY2NjY2NjY2NjY2NjY2NjY5NjE0MjM3MjY5ODQwOGUtMUwsCS8qIC0weDE1NTU1NTU1NTU1NTU1NTU1NTY3MjY3YTU4ZTEzLjBwLTExNUwgKi8KK1A3ID0gIDEuNDI4NTcxNDI4NTcxNDI4NTcxMTk1MjI5NDM0NzcxNjYxMjBlLTFMLAkvKiAgMHgxMjQ5MjQ5MjQ5MjQ5MjQ4ZWQ3OWEwYWU0MzRkZS4wcC0xMTVMICovCitQOCA9IC0xLjI0OTk5OTk5OTk5OTk5OTk0ODYzMjg5MDE1MDMzNTgxMzAxZS0xTDsJLyogLTB4MWZmZmZmZmZmZmZmZmZhMTNlOTE3NjVlNDYxNDAuMHAtMTE2TCAqLworLyogRG91YmxlIHByZWNpc2lvbiBnaXZlcyB+IDUzICsgbG9nMihQOSAqIG1heCh8ZHwpKio4KSB+PSAxMjAgYml0cy4gKi8KK3N0YXRpYyBjb25zdCBkb3VibGUKK1A5ID0gIDEuMTExMTExMTExMTExMTQwMWUtMSwJCS8qICAweDFjNzFjNzFjNzFjN2VkLjBwLTU2ICovCitQMTAgPSAtMS4wMDAwMDAwMDAwMDQwMTM1ZS0xLAkJLyogLTB4MTk5OTk5OTk5YTBhOTIuMHAtNTYgKi8KK1AxMSA9ICA5LjA5MDkwOTA3MjgxMzYyNThlLTIsCQkvKiAgMHgxNzQ1ZDE3Mzk2MjExMS4wcC01NiAqLworUDEyID0gLTguMzMzMzMxODg1MTg1NTI4NGUtMiwJCS8qIC0weDE1NTU1NTE3MjJjN2EzLjBwLTU2ICovCitQMTMgPSAgNy42OTI4NjM0NjY2NDA0MTc4ZS0yLAkJLyogIDB4MTNiMTk4NTIwNGE0YWUuMHAtNTYgKi8KK1AxNCA9IC03LjE2MjY4MTAwNzg0NjI0OTllLTI7CQkvKiAtMHgxMjU2MjI3NmNkYzVkMC4wcC01NiAqLworCitzdGF0aWMgdm9sYXRpbGUgY29uc3QgZG91YmxlIHplcm8gPSAwOworCisjZGVmaW5lCUlOVEVSVkFMUwkxMjgKKyNkZWZpbmUJTE9HMl9JTlRFUlZBTFMJNworI2RlZmluZQlUU0laRQkJKElOVEVSVkFMUyArIDEpCisjZGVmaW5lCUcoaSkJCShUWyhpKV0uRykKKyNkZWZpbmUJRl9oaShpKQkJKFRbKGkpXS5GX2hpKQorI2RlZmluZQlGX2xvKGkpCQkoVFsoaSldLkZfbG8pCisjZGVmaW5lCWxuMl9oaQkJRl9oaShUU0laRSAtIDEpCisjZGVmaW5lCWxuMl9sbwkJRl9sbyhUU0laRSAtIDEpCisjZGVmaW5lCUUoaSkJCShVWyhpKV0uRSkKKyNkZWZpbmUJSChpKQkJKFVbKGkpXS5IKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlmbG9hdAlHOwkJCS8qIDEvKDEgKyBpLzEyOCkgcm91bmRlZCB0byA4LzkgYml0cyAqLworCWZsb2F0CUZfaGk7CQkJLyogbG9nKDEgLyBHX2kpIHJvdW5kZWQgKHNlZSBiZWxvdykgKi8KKwkvKiBUaGUgY29tcGlsZXIgd2lsbCBpbnNlcnQgOCBieXRlcyBvZiBwYWRkaW5nIGhlcmUuICovCisJbG9uZyBkb3VibGUgRl9sbzsJCS8qIG5leHQgMTEzIGJpdHMgZm9yIGxvZygxIC8gR19pKSAqLworfSBUW1RTSVpFXSA9IHsKKwkvKgorCSAqIGxuMl9oaSBhbmQgZWFjaCBGX2hpKGkpIGFyZSByb3VuZGVkIHRvIGEgbnVtYmVyIG9mIGJpdHMgdGhhdAorCSAqIG1ha2VzIEZfaGkoaSkgKyBkaypsbjJfaGkgZXhhY3QgZm9yIGFsbCBpIGFuZCBhbGwgZGsuCisJICoKKwkgKiBUaGUgbGFzdCBlbnRyeSAoZm9yIFgganVzdCBiZWxvdyAyKSBpcyB1c2VkIHRvIGRlZmluZSBsbjJfaGkKKwkgKiBhbmQgbG4yX2xvLCB0byBlbnN1cmUgdGhhdCBGX2hpKGkpIGFuZCBGX2xvKGkpIGNhbmNlbCBleGFjdGx5CisJICogd2l0aCBkaypsbjJfaGkgYW5kIGRrKmxuMl9sbywgcmVzcGVjdGl2ZWx5LCB3aGVuIGRrID0gLTEuCisJICogVGhpcyBpcyBuZWVkZWQgZm9yIGFjY3VyYWN5IHdoZW4geCBpcyBqdXN0IGJlbG93IDEuICAoVG8gYXZvaWQKKwkgKiBzcGVjaWFsIGNhc2VzLCBzdWNoIHggYXJlICJyZWR1Y2VkIiBzdHJhbmdlbHkgdG8gWCBqdXN0IGJlbG93CisJICogMiBhbmQgZGsgPSAtMSwgYW5kIHRoZW4gdGhlIGV4YWN0IGNhbmNlbGxhdGlvbiBpcyBuZWVkZWQKKwkgKiBiZWNhdXNlIGFueSB0aGUgZXJyb3IgZnJvbSBhbnkgbm9uLWV4YWN0bmVzcyB3b3VsZCBiZSB0b28KKwkgKiBsYXJnZSkuCisJICoKKwkgKiBUaGUgcmVsZXZhbnQgcmFuZ2Ugb2YgZGsgaXMgWy0xNjQ0NSwgMTYzODNdLiAgVGhlIG1heGltdW0gbnVtYmVyCisJICogb2YgYml0cyBpbiBGX2hpKGkpIHRoYXQgd29ya3MgaXMgdmVyeSBkZXBlbmRlbnQgb24gaSBidXQgaGFzCisJICogYSBtaW5pbXVtIG9mIDkzLiAgV2Ugb25seSBuZWVkIGFib3V0IDEyIGJpdHMgaW4gRl9oaShpKSBmb3IKKwkgKiBpdCB0byBwcm92aWRlIGVub3VnaCBleHRyYSBwcmVjaXNpb24uCisJICoKKwkgKiBXZSByb3VuZCBGX2hpKGkpIHRvIDI0IGJpdHMgc28gdGhhdCBpdCBjYW4gaGF2ZSB0eXBlIGZsb2F0LAorCSAqIG1haW5seSB0byBtaW5pbWl6ZSB0aGUgc2l6ZSBvZiB0aGUgdGFibGUuICBVc2luZyBhbGwgMjQgYml0cworCSAqIGluIGEgZmxvYXQgZm9yIGl0IGF1dG9tYXRpY2FsbHkgc2F0aXNmaWVzIHRoZSBhYm92ZSBjb25zdHJhaW50cy4KKwkgKi8KKyAgICAgMHg4MDAwMDAuMHAtMjMsICAwLCAgICAgICAgICAgICAgIDAsCisgICAgIDB4ZmUwMDAwLjBwLTI0LCAgMHg4MDgwYWMuMHAtMzAsIC0weDE0ZWU0MzFkYWU2Njc0YWZhMGM0YmZlMTZlOGZkLjBwLTE0NEwsCisgICAgIDB4ZmMwMDAwLjBwLTI0LCAgMHg4MTAyYjMuMHAtMjksIC0weDFkYjI5ZWUyZDgzNzE3YmU5MThlMTExOTY0MmFiLjBwLTE0NEwsCisgICAgIDB4ZmEwMDAwLjBwLTI0LCAgMHhjMjQ5MjkuMHAtMjksICAweDExOTE5NTdkMTczNjk3Y2YzMDJjYzk0NzZmNTYxLjBwLTE0M0wsCisgICAgIDB4ZjgwMDAwLjBwLTI0LCAgMHg4MjBhZWMuMHAtMjgsICAweDEzY2U4ODg4ZTAyZTc4ZWJhOWIxMTEzYmMxYzE4LjBwLTE0MkwsCisgICAgIDB4ZjYwMDAwLjBwLTI0LCAgMHhhMzM1NzcuMHAtMjgsIC0weDE3YTQzODJjZTZlYjdiZmE1MDliZWM4ZGE1ZjIyLjBwLTE0MkwsCisgICAgIDB4ZjQ4MDAwLjBwLTI0LCAgMHhiYzQyY2IuMHAtMjgsIC0weDE3MmEyMTE2MWExMDc2NzQ5ODZkY2RjYTY3MDljLjBwLTE0M0wsCisgICAgIDB4ZjMwMDAwLjBwLTI0LCAgMHhkNTc3OTcuMHAtMjgsIC0weDFlMDlkZTA3Y2I5NTg4OTdhM2VhNDZlODRhYmIzLjBwLTE0MkwsCisgICAgIDB4ZjEwMDAwLjBwLTI0LCAgMHhmNzUxOGUuMHAtMjgsICAweDFhZTFlZWMxYjAzNmM0ODQ5OTNjNTQ5YzRiZjQwLjBwLTE1MUwsCisgICAgIDB4ZWYwMDAwLjBwLTI0LCAgMHg4Y2I5ZGYuMHAtMjcsIC0weDFkNzM1NTMyNWQ1NjBkOWU5YWIzZDZlYmFiNTgwLjBwLTE0MUwsCisgICAgIDB4ZWQ4MDAwLjBwLTI0LCAgMHg5OTllYzAuMHAtMjcsIC0weDFmOWYwMmQyNTZkNTAzNzEwOGY0ZWMyMWU0OGNkLjBwLTE0MkwsCisgICAgIDB4ZWMwMDAwLjBwLTI0LCAgMHhhNjk4OGIuMHAtMjcsIC0weDE2ZmMwYTlkMTJjMTdhNzBmN2E2ODRjNTk2YjEyLjBwLTE0M0wsCisgICAgIDB4ZWEwMDAwLjBwLTI0LCAgMHhiODA2OTguMHAtMjcsICAweDE1ZDU4MWMxZThkYTk5ZGVkMzIyZmIwOGI4NDYyLjBwLTE0MUwsCisgICAgIDB4ZTgwMDAwLjBwLTI0LCAgMHhjOTlhZjMuMHAtMjcsIC0weDE1MzViM2JhOGYxNTBhZTA5OTk2ZDdiYjQ2NTNlLjBwLTE0M0wsCisgICAgIDB4ZTcwMDAwLjBwLTI0LCAgMHhkMjczYjIuMHAtMjcsICAweDE2Mzc4NmY1MjUxYWVmZTBkZWQzNGM4MzE4ZjUyLjBwLTE0NUwsCisgICAgIDB4ZTUwMDAwLjBwLTI0LCAgMHhlNDQyYzAuMHAtMjcsICAweDFiYzRiMjM2OGUzMmQ1NjY5OWMxNzk5YTI0NGQ0LjBwLTE0NEwsCisgICAgIDB4ZTM4MDAwLjBwLTI0LCAgMHhmMWI4M2YuMHAtMjcsICAweDFjNjA5MGY2ODRlNjc2NmFiY2VjY2FiMWQ3MTc0LjBwLTE0MUwsCisgICAgIDB4ZTIwMDAwLjBwLTI0LCAgMHhmZjQ0OGEuMHAtMjcsIC0weDE4OTBhYTY5YWM5ZjQyMTVmOTM5MzZiNzA5ZWZiLjBwLTE0MkwsCisgICAgIDB4ZTA4MDAwLjBwLTI0LCAgMHg4NjczZjYuMHAtMjYsICAweDFiOTk4NTE5NGI2YWZmZDUxMWI1MzRiNzJhMjhlLjBwLTE0MEwsCisgICAgIDB4ZGYwMDAwLjBwLTI0LCAgMHg4ZDUxNWMuMHAtMjYsIC0weDFkYzA4ZDYxYzZlZjFkOWIyZWY3ZTY4NjgwNTk4LjBwLTE0M0wsCisgICAgIDB4ZGQ4MDAwLjBwLTI0LCAgMHg5NDNhOWUuMHAtMjYsIC0weDFmNzJhMmRhYzcyOWIzZjQ2NjYyMjM4YTk0MjVhLjBwLTE0MkwsCisgICAgIDB4ZGMwMDAwLjBwLTI0LCAgMHg5YjJmZTYuMHAtMjYsIC0weDFmZDRkZmQzYTBhZmI5NjkxYWVkNGQ1ZTNkZjk0LjBwLTE0MEwsCisgICAgIDB4ZGE4MDAwLjBwLTI0LCAgMHhhMjMxNWQuMHAtMjYsIC0weDExYjI2MTIxNjI5YzQ2YzE4NjM4NDk5M2UxYzkzLjBwLTE0MkwsCisgICAgIDB4ZDkwMDAwLjBwLTI0LCAgMHhhOTNmMmYuMHAtMjYsICAweDEyODZkNjMzZThlNTY5N2RjNmE0MDJhNTZmY2UxLjBwLTE0MUwsCisgICAgIDB4ZDc4MDAwLjBwLTI0LCAgMHhiMDU5ODguMHAtMjYsICAweDE2MTI4ZWJhOTM2NzcwN2ViZmE1NDBlNDUzNTBjLjBwLTE0NEwsCisgICAgIDB4ZDYwMDAwLjBwLTI0LCAgMHhiNzgwOTQuMHAtMjYsICAweDE2ZWFkNTc3MzkwZDMxZWYwZjRjOWQ0M2Y3OWIyLjBwLTE0MEwsCisgICAgIDB4ZDUwMDAwLjBwLTI0LCAgMHhiYzRjNmMuMHAtMjYsICAweDE1MTEzMWNjZjdjN2I3NWU3ZDkwMGI1MjFjNDhkLjBwLTE0MUwsCisgICAgIDB4ZDM4MDAwLjBwLTI0LCAgMHhjMzg5MGEuMHAtMjYsIC0weDExNWUyY2Q3MTRiZDA2NTA4YWViMDBkMmFlM2U5LjBwLTE0MEwsCisgICAgIDB4ZDIwMDAwLjBwLTI0LCAgMHhjYWQyZDcuMHAtMjYsIC0weDE4NDdmNDA2ZWJkM2FmODA0ODVjMmY0MDk2MzNjLjBwLTE0MkwsCisgICAgIDB4ZDEwMDAwLjBwLTI0LCAgMHhjZmI2MjAuMHAtMjYsICAweDFjMjI1OTkwNGQ2ODY1ODE3OTlmYmNlMGI1ZjE5LjBwLTE0MUwsCisgICAgIDB4Y2Y4MDAwLjBwLTI0LCAgMHhkNzE2NTMuMHAtMjYsICAweDFlY2U1N2E4ZDVhZTU0ZjU1MDQ0NGVjZjhiOTk1LjBwLTE0MEwsCisgICAgIDB4Y2UwMDAwLjBwLTI0LCAgMHhkZTg0M2EuMHAtMjYsIC0weDFmMTA5ZDRiYzQ1OTU0MTJiNWQyNTE3YWFhYzEzLjBwLTE0MUwsCisgICAgIDB4Y2QwMDAwLjBwLTI0LCAgMHhlMzdmZGUuMHAtMjYsICAweDFiYzAzZGMyNzFhNzRkM2E4NWI1YjQzYzBlNzI3LjBwLTE0MUwsCisgICAgIDB4Y2I4MDAwLjBwLTI0LCAgMHhlYjA1MGMuMHAtMjYsIC0weDFiZjJiYWRjMGRmODQxYTcxYjc5ZGQ1NjQ1YjQ2LjBwLTE0NUwsCisgICAgIDB4Y2EwMDAwLjBwLTI0LCAgMHhmMjk4NzguMHAtMjYsIC0weDE4ZWZlZGVkZDg5ZmJlMGJjZmJlNmQ2ZGI5ZjY2LjBwLTE0N0wsCisgICAgIDB4YzkwMDAwLjBwLTI0LCAgMHhmN2FkNmYuMHAtMjYsICAweDEzNzNmZjk3N2JhYTY5MTFjN2JhZmNiNGQ4NGZiLjBwLTE0MUwsCisgICAgIDB4YzgwMDAwLjBwLTI0LCAgMHhmY2M4ZTMuMHAtMjYsICAweDE5Njc2NmYyZmIzMjgzMzdjYzA1MGM2ZDgzYjIyLjBwLTE0MEwsCisgICAgIDB4YzY4MDAwLjBwLTI0LCAgMHg4MjNmMzAuMHAtMjUsICAweDE5YmQwNzZmN2M0MzRlNWZjZjFhMjEyZTJhOTFlLjBwLTEzOUwsCisgICAgIDB4YzU4MDAwLjBwLTI0LCAgMHg4NGQ1MmMuMHAtMjUsIC0weDFhMzI3MjU3YWYwZjQ2NWU1ZWNhYjVmMmE2ZjgxLjBwLTEzOUwsCisgICAgIDB4YzQwMDAwLjBwLTI0LCAgMHg4OGJjNzQuMHAtMjUsICAweDExM2YyM2RlZjE5YzVhMGZlMzk2ZjQwZjFkZGE5LjBwLTE0MUwsCisgICAgIDB4YzMwMDAwLjBwLTI0LCAgMHg4YjVhZTYuMHAtMjUsICAweDE3NTlmNmU2YjM3ZGU5NDVhMDQ5YTk2MmU2NmM2LjBwLTEzOUwsCisgICAgIDB4YzIwMDAwLjBwLTI0LCAgMHg4ZGZjY2IuMHAtMjUsICAweDFhZDM1Y2E2ZWQ1MTQ3YmRiNmRkY2FmNTljNDI1LjBwLTE0MUwsCisgICAgIDB4YzEwMDAwLjBwLTI0LCAgMHg5MGEyMmIuMHAtMjUsICAweDFhMWQ3MWE4N2RlYmE0NmJhZTk4MjcyMjFkYzk4LjBwLTEzOUwsCisgICAgIDB4YmY4MDAwLjBwLTI0LCAgMHg5NGEwZDguMHAtMjUsIC0weDEzOWU1MjEwYzJiNzMwZTI4YWJhMDAxYTliNWUwLjBwLTE0MEwsCisgICAgIDB4YmU4MDAwLjBwLTI0LCAgMHg5NzRmMTYuMHAtMjUsIC0weDE4ZjZlYmNmZjNlZDcyZTIzZTEzNDMxYWRjNGE1LjBwLTE0MUwsCisgICAgIDB4YmQ4MDAwLjBwLTI0LCAgMHg5YTAwZjEuMHAtMjUsIC0weDFhYTI2OGJlMzlhYWI3MTQ4ZThkODBjYWExMGI3LjBwLTEzOUwsCisgICAgIDB4YmM4MDAwLjBwLTI0LCAgMHg5Y2I2NzIuMHAtMjUsIC0weDE0Yzg4MTU4MzljNTY2MzY2M2QxNWZhZWQ3NzcxLjBwLTEzOUwsCisgICAgIDB4YmIwMDAwLjBwLTI0LCAgMHhhMGNkYTEuMHAtMjUsICAweDFlYWY0NjM5MGRiYjI0MzgyNzM5MThkYjdkZjVjLjBwLTE0MUwsCisgICAgIDB4YmEwMDAwLjBwLTI0LCAgMHhhMzhjNmUuMHAtMjUsICAweDEzOGUyMGQ4MzFmNjk4Mjk4YWRkZGQ3ZjMyNjg2LjBwLTE0MUwsCisgICAgIDB4YjkwMDAwLjBwLTI0LCAgMHhhNjRmMDUuMHAtMjUsIC0weDFlOGQzYzQxMTIzNjE1YjE0N2E1ZDQ3YmMyMDhmLjBwLTE0MkwsCisgICAgIDB4YjgwMDAwLjBwLTI0LCAgMHhhOTE1NzAuMHAtMjUsICAweDFjZTI4ZjVmMzg0MGIyNjNhY2I0MzUxMTA0NjMxLjBwLTE0MEwsCisgICAgIDB4YjcwMDAwLjBwLTI0LCAgMHhhYmRmYmIuMHAtMjUsIC0weDE4NmU1YzBhNDI0MjM0NTdlMjJkOGM2NTBiMzU1LjBwLTEzOUwsCisgICAgIDB4YjYwMDAwLjBwLTI0LCAgMHhhZWFkZWYuMHAtMjUsIC0weDE0ZDQxYTBiMmEwOGE0NjVkYzUxM2IxM2Y1NjdkLjBwLTE0M0wsCisgICAgIDB4YjUwMDAwLjBwLTI0LCAgMHhiMTgwMTguMHAtMjUsICAweDE2NzU1ODkyNzcwNjMzOTQ3ZmZlNjUxZTczNTJmLjBwLTEzOUwsCisgICAgIDB4YjQwMDAwLjBwLTI0LCAgMHhiNDU2NDIuMHAtMjUsIC0weDE2Mzk1ZWJlNTliMTUyMjhiZmU4Nzk4ZDEwZmYwLjBwLTE0MkwsCisgICAgIDB4YjMwMDAwLjBwLTI0LCAgMHhiNzMwNzcuMHAtMjUsICAweDFhYmM2NWM4NTk1ZjA4OGI2MWEzMzVmNWI2ODhjLjBwLTE0MEwsCisgICAgIDB4YjIwMDAwLjBwLTI0LCAgMHhiYTBlYzQuMHAtMjUsIC0weDEyNzMwODlkM2RhZDg4ZTdkMzUzZTk5NjdkNTQ4LjBwLTEzOUwsCisgICAgIDB4YjEwMDAwLjBwLTI0LCAgMHhiY2YxMzMuMHAtMjUsICAweDEwZjlmNjdiMWY0YmJmNDVkZTA2ZWNlYmZhZjZkLjBwLTEzOUwsCisgICAgIDB4YjAwMDAwLjBwLTI0LCAgMHhiZmQ3ZDIuMHAtMjUsIC0weDEwOWZhYjkwNDg2NDA5MmIzNGVkZGExOWE4MzFlLjBwLTE0MEwsCisgICAgIDB4YWYwMDAwLjBwLTI0LCAgMHhjMmMyYWMuMHAtMjUsIC0weDExMjQ2ODBhYTQzMzMzMjIxZDhhOWI0NzVhNmJhLjBwLTEzOUwsCisgICAgIDB4YWU4MDAwLjBwLTI0LCAgMHhjNDM5YjMuMHAtMjUsIC0weDFmMzYwY2M0NzEwZmJmZTI0YjYzM2Y0ZThkODRkLjBwLTE0MEwsCisgICAgIDB4YWQ4MDAwLjBwLTI0LCAgMHhjNzJhZmQuMHAtMjUsIC0weDEzMmQ5MWYyMWQ4OWM4OWM0NTAwM2ZjNWQ3ODA3LjBwLTE0MEwsCisgICAgIDB4YWM4MDAwLjBwLTI0LCAgMHhjYTIwYTIuMHAtMjUsIC0weDE2YmY5YjRkMWY4ZGE4MDAyZjI0NDllMTc0NTA0LjBwLTEzOUwsCisgICAgIDB4YWI4MDAwLjBwLTI0LCAgMHhjZDFhYWUuMHAtMjUsICAweDE5ZGViNWNlNmE2YTg3MTdkNTYyNmUxNmFjYzdkLjBwLTE0MUwsCisgICAgIDB4YWE4MDAwLjBwLTI0LCAgMHhkMDE5MmYuMHAtMjUsICAweDFhMjlmYjQ4ZjdkM2NhODdkYWJmMzUxYWE0MWY0LjBwLTEzOUwsCisgICAgIDB4YWEwMDAwLjBwLTI0LCAgMHhkMTlhMjAuMHAtMjUsICAweDExMjdkM2M2NDU3ZjlkNzlmNTFkY2M3MzAxNGM5LjBwLTE0MUwsCisgICAgIDB4YTkwMDAwLjBwLTI0LCAgMHhkNDlmNmEuMHAtMjUsIC0weDFiYTkzMGU0ODZhMGFjNDJkMWJmOTE5OTE4OGU3LjBwLTE0MUwsCisgICAgIDB4YTgwMDAwLjBwLTI0LCAgMHhkN2E5NGIuMHAtMjUsIC0weDFiNmU2NDVmMzE1NDlkZDExNjBiY2M0NWM3ZTJjLjBwLTEzOUwsCisgICAgIDB4YTcwMDAwLjBwLTI0LCAgMHhkYWI3ZDAuMHAtMjUsICAweDExMThhNDI1NDk0YjYxMDY2NTM3N2YxNTYyNWI2LjBwLTE0MEwsCisgICAgIDB4YTY4MDAwLjBwLTI0LCAgMHhkYzQwZDUuMHAtMjUsICAweDE5NjZmMjRkMjlkM2EyZDFiMjE3NjAxMDQ3OGJlLjBwLTE0MEwsCisgICAgIDB4YTU4MDAwLjBwLTI0LCAgMHhkZjU2NmQuMHAtMjUsIC0weDFkOGU1MmViMjI0OGYwYzk1ZGQ4MzYyNmQ3MzMzLjBwLTE0MkwsCisgICAgIDB4YTQ4MDAwLjBwLTI0LCAgMHhlMjcwY2UuMHAtMjUsIC0weDFlZTM3MGY5NmU2YjY3Y2NiMDA2YTViOTg5MGVhLjBwLTE0MEwsCisgICAgIDB4YTQwMDAwLjBwLTI0LCAgMHhlM2ZmY2UuMHAtMjUsICAweDFkMTU1MzI0OTExZjU2ZGIyOGRhNGQ2MjlkMDBhLjBwLTE0MEwsCisgICAgIDB4YTMwMDAwLjBwLTI0LCAgMHhlNzIxNzkuMHAtMjUsIC0weDFmZTZlMmYyZjg2N2Q4ZjRkNjBjNzEzMzQ2NjQxLjBwLTE0MEwsCisgICAgIDB4YTIwMDAwLjBwLTI0LCAgMHhlYTQ4MTIuMHAtMjUsICAweDFiN2JlOWFkZDdmNGQzYjNkNDA2YjZjYmYzY2U1LjBwLTE0MEwsCisgICAgIDB4YTE4MDAwLjBwLTI0LCAgMHhlYmRkM2QuMHAtMjUsICAweDFiM2NmYjNmNzUxMWRkNzM2OTI2MDkwNDBjY2MyLjBwLTEzOUwsCisgICAgIDB4YTA4MDAwLjBwLTI0LCAgMHhlZjBiNWIuMHAtMjUsIC0weDEyMjBkZTFmNzMwMTkwMWI4YWQ4NWMyNWFmZDA5LjBwLTEzOUwsCisgICAgIDB4YTAwMDAwLjBwLTI0LCAgMHhmMGE0NTEuMHAtMjUsIC0weDE3NjM2NGM5YWM4MWNjOGE0ZGZiODA0ZGU2ODY3LjBwLTE0MEwsCisgICAgIDB4OWYwMDAwLjBwLTI0LCAgMHhmM2RhMTYuMHAtMjUsICAweDFlZWQ2YjlhYWZhYzhkNDJmNzhkM2U2NWQzNzI3LjBwLTE0MUwsCisgICAgIDB4OWU4MDAwLjBwLTI0LCAgMHhmNTc2ZTkuMHAtMjUsICAweDFkNTkzMjE4Njc1YWYyNjk2NDdiNzgzZDg4OTk5LjBwLTEzOUwsCisgICAgIDB4OWQ4MDAwLjBwLTI0LCAgMHhmOGI0N2MuMHAtMjUsIC0weDEzZThlYjdkYTA1M2UwNjM3MTQ2MTVmN2NjOTFkLjBwLTE0NEwsCisgICAgIDB4OWQwMDAwLjBwLTI0LCAgMHhmYTU1M2YuMHAtMjUsICAweDFjMDYzMjU5YmNhZGUwMjk1MTY4NmQ1MzczYWVjLjBwLTEzOUwsCisgICAgIDB4OWMwMDAwLjBwLTI0LCAgMHhmZDlhYzUuMHAtMjUsICAweDFlZjQ5MTA4NWZhM2MxNjQ5MzQ5NjMwNTMxNTAyLjBwLTEzOUwsCisgICAgIDB4OWI4MDAwLjBwLTI0LCAgMHhmZjNmOGMuMHAtMjUsICAweDFkNjA3YTdjMmI4YzUzMjA2MTlmYjk0MzNkODQxLjBwLTEzOUwsCisgICAgIDB4OWE4MDAwLjBwLTI0LCAgMHg4MTQ2OTcuMHAtMjQsIC0weDEyYWQzODE3MDA0ZjNmMGJkZmY5OWY5MzJiMjczLjBwLTEzOEwsCisgICAgIDB4OWEwMDAwLjBwLTI0LCAgMHg4MjFiMDYuMHAtMjQsIC0weDE4OWZjNTMxMTdmOWU1NGU3ODEwM2EyYmMxNzY3LjBwLTE0MUwsCisgICAgIDB4OTkwMDAwLjBwLTI0LCAgMHg4M2M1ZjguMHAtMjQsICAweDE0Y2YxNWEwNDg5MDdiN2Q3ZjQ3ZGRiNDVjNWEzLjBwLTEzOUwsCisgICAgIDB4OTg4MDAwLjBwLTI0LCAgMHg4NDljN2QuMHAtMjQsICAweDFjYmIxZDM1ZmI4Mjg3M2IwNGE5YWYxZGQ2OTJjLjBwLTEzOEwsCisgICAgIDB4OTc4MDAwLjBwLTI0LCAgMHg4NjRiYTYuMHAtMjQsICAweDExMjg2MzliODE0ZjliOTc3MGQ4Y2I2NTczNTQwLjBwLTEzOEwsCisgICAgIDB4OTcwMDAwLjBwLTI0LCAgMHg4NzI0NGMuMHAtMjQsICAweDE4NDczMzg1MzMwMGYwMDJlODM2ZGZkNDdiZDQxLjBwLTEzOUwsCisgICAgIDB4OTY4MDAwLjBwLTI0LCAgMHg4N2ZkYWEuMHAtMjQsICAweDEwOWQyM2FlZjc3ZGQ1Y2Q3Y2M5NDMwNmZiM2ZmLjBwLTE0MEwsCisgICAgIDB4OTU4MDAwLjBwLTI0LCAgMHg4OWIyOTMuMHAtMjQsIC0weDFhODFlZjM2N2E1OWRlMmI0MWVlZWJkNTUwNzAyLjBwLTEzOEwsCisgICAgIDB4OTUwMDAwLjBwLTI0LCAgMHg4YThlMjAuMHAtMjQsIC0weDEyMWFkM2RiYjJmNDUyNzVjOTE3YTMwZGY0YWM5LjBwLTEzOEwsCisgICAgIDB4OTQ4MDAwLjBwLTI0LCAgMHg4YjZhNmEuMHAtMjQsIC0weDFjZmI5ODE2MjhhZjcxYTg5ZGY0ZTZkZjJlOTNiLjBwLTEzOUwsCisgICAgIDB4OTM4MDAwLjBwLTI0LCAgMHg4ZDI1M2EuMHAtMjQsIC0weDFkMjE3MzBlYTc2Y2ZkZWMzNjc4Mjg3MzRjYWU1LjBwLTEzOUwsCisgICAgIDB4OTMwMDAwLjBwLTI0LCAgMHg4ZTAzYzIuMHAtMjQsICAweDEzNWNjMDBlNTY2Zjc2Yjg3MzMzODkxZTBkZWM0LjBwLTEzOEwsCisgICAgIDB4OTI4MDAwLjBwLTI0LCAgMHg4ZWUzMGQuMHAtMjQsIC0weDEwZmNiNWRmMjU3YTI2M2UzYmY0NDZjNmUzZjY5LjBwLTE0MEwsCisgICAgIDB4OTE4MDAwLjBwLTI0LCAgMHg5MGEzZWUuMHAtMjQsIC0weDE2ZTE3MWIxNTQzM2Q3MjNhNGM3MzgwYTQ0OGQ4LjBwLTEzOUwsCisgICAgIDB4OTEwMDAwLjBwLTI0LCAgMHg5MTg1ODcuMHAtMjQsIC0weDFkMDUwZGEwN2YzMjM2ZjMzMDk3MmRhMmE3YTg3LjBwLTEzOUwsCisgICAgIDB4OTA4MDAwLjBwLTI0LCAgMHg5MjY3ZTcuMHAtMjQsICAweDFiZTAzNjY5YTUyNjhkMjExNDhjNjAwMmJlY2QzLjBwLTEzOUwsCisgICAgIDB4OGY4MDAwLjBwLTI0LCAgMHg5NDJmMDQuMHAtMjQsICAweDEwYjI4ZTBlMjZjMzM2YWY5MGUwMDUzMzMyM2JhLjBwLTEzOUwsCisgICAgIDB4OGYwMDAwLjBwLTI0LCAgMHg5NTEzYzMuMHAtMjQsICAweDFhMWQ4MjBkYTU3Y2YyZjEwNWE4OTA2MDA0NmFhLjBwLTEzOEwsCisgICAgIDB4OGU4MDAwLjBwLTI0LCAgMHg5NWY5NTAuMHAtMjQsIC0weDE5ZWY4ZjEzYWUzY2YxNjI0MDlkOGVhOTlkNGMwLjBwLTEzOUwsCisgICAgIDB4OGUwMDAwLjBwLTI0LCAgMHg5NmRmYWIuMHAtMjQsIC0weDEwOWU0MTdhNmU1MDdiOWRjMTBkYWM3NDNhZDdhLjBwLTEzOEwsCisgICAgIDB4OGQwMDAwLjBwLTI0LCAgMHg5OGFlZDIuMHAtMjQsICAweDEwZDAxYTJjNWIwZTk3YzQ5OTBiMjNkOWFjMWY1LjBwLTEzOUwsCisgICAgIDB4OGM4MDAwLjBwLTI0LCAgMHg5OTk3YTIuMHAtMjQsIC0weDFkNmE1MGQ0YjYxZWE3NDU0MGJkZDJhYTk5YTQyLjBwLTEzOEwsCisgICAgIDB4OGMwMDAwLjBwLTI0LCAgMHg5YTgxNDUuMHAtMjQsICAweDFiM2IxOTBiODNmOTUyN2U2YWJhOGYyZDc4M2MxLjBwLTEzOEwsCisgICAgIDB4OGI4MDAwLjBwLTI0LCAgMHg5YjZiYmYuMHAtMjQsICAweDEzYTY5ZmFkN2U3YWJlN2JhODFjNjY0YzEwN2UwLjBwLTEzOEwsCisgICAgIDB4OGIwMDAwLjBwLTI0LCAgMHg5YzU3MTEuMHAtMjQsIC0weDExY2QxMjMxNmY1NzZhYWQzNDhhZTc5ODY3MjIzLjBwLTEzOEwsCisgICAgIDB4OGE4MDAwLjBwLTI0LCAgMHg5ZDQzM2IuMHAtMjQsICAweDFjOTVjNDQ0YjgwN2EyNDY3MjZiMzA0Y2NhZTU2LjBwLTEzOUwsCisgICAgIDB4ODk4MDAwLjBwLTI0LCAgMHg5ZjFlMjIuMHAtMjQsIC0weDFiOWMyMjRlYTY5OGMyZjliNDc0NjZkNjEyM2ZlLjBwLTEzOUwsCisgICAgIDB4ODkwMDAwLjBwLTI0LCAgMHhhMDBjZTEuMHAtMjQsICAweDEyNWNhOTMxODZjZjBmMzhiNDYxOWEyNDgzMzk5LjBwLTE0MUwsCisgICAgIDB4ODg4MDAwLjBwLTI0LCAgMHhhMGZjODAuMHAtMjQsIC0weDFlZTM4YTdiYzIyOGIzNTk3MDQzYmU3OGVhZjQ5LjBwLTEzOUwsCisgICAgIDB4ODgwMDAwLjBwLTI0LCAgMHhhMWVkMDAuMHAtMjQsIC0weDFhMGRiODc2NjEzZDIwNDE0N2RjNjlhMDdhNjQ5LjBwLTEzOEwsCisgICAgIDB4ODc4MDAwLjBwLTI0LCAgMHhhMmRlNjIuMHAtMjQsICAweDE5MzIyNGU4NTE2YzAwOGQzNjAyYTdiNDFjNmU4LjBwLTEzOUwsCisgICAgIDB4ODcwMDAwLjBwLTI0LCAgMHhhM2QwYTkuMHAtMjQsICAweDFmYTI4YjRkMjU0MWFjYTdkNTg0NDYwNmIyNDIxLjBwLTEzOUwsCisgICAgIDB4ODY4MDAwLjBwLTI0LCAgMHhhNGMzZDYuMHAtMjQsICAweDFjMWI1NzYwZmI0NTcxYWNiY2ZiMDNmMTZkYWY0LjBwLTEzOEwsCisgICAgIDB4ODU4MDAwLjBwLTI0LCAgMHhhNmFjZWEuMHAtMjQsICAweDFmZWQ1ZDBmNjU5NDljMGEzNDVhZDc0M2FlMWFlLjBwLTE0MEwsCisgICAgIDB4ODUwMDAwLjBwLTI0LCAgMHhhN2EyZDQuMHAtMjQsICAweDFhZDI3MGM5ZDc0OTM2MjM4MmE3Njg4NDc5ZTI0LjBwLTE0MEwsCisgICAgIDB4ODQ4MDAwLjBwLTI0LCAgMHhhODk5YWIuMHAtMjQsICAweDE5OWZmMTVjZTUzMjY2MWVhOTY0M2EzYTJkMzc4LjBwLTEzOUwsCisgICAgIDB4ODQwMDAwLjBwLTI0LCAgMHhhOTkxNzEuMHAtMjQsICAweDFhMTllMTVjY2M0NWQyNTc1MzBhNjgyYjgwNDkwLjBwLTEzOUwsCisgICAgIDB4ODM4MDAwLjBwLTI0LCAgMHhhYThhMjguMHAtMjQsIC0weDEyMWExNGVjNTMyYjM1YmEzZTFmODY4ZmQwYjVlLjBwLTE0MEwsCisgICAgIDB4ODMwMDAwLjBwLTI0LCAgMHhhYjgzZDEuMHAtMjQsICAweDFhZWUzMTk5ODBiZmYzMzAzZGQ0ODE3NzlkZjY5LjBwLTEzOUwsCisgICAgIDB4ODI4MDAwLjBwLTI0LCAgMHhhYzdlNmYuMHAtMjQsIC0weDE4ZmZkOWUzOTAwMzQ1YTg1ZDJkODYxNjE3NDJlLjBwLTE0MEwsCisgICAgIDB4ODIwMDAwLjBwLTI0LCAgMHhhZDdhMDMuMHAtMjQsIC0weDFlNGRiMTAyY2UyOWY3OWIwMjZiNjRiNDJjYWExLjBwLTE0MEwsCisgICAgIDB4ODE4MDAwLjBwLTI0LCAgMHhhZTc2OGYuMHAtMjQsICAweDE3YzM1YzU1YTA0YTgyYWIxOWY3NzY1MmQ5NzdhLjBwLTE0MUwsCisgICAgIDB4ODEwMDAwLjBwLTI0LCAgMHhhZjc0MTUuMHAtMjQsICAweDE0NDgzMjQwNDcwMTliNDhkN2I5OGMxY2Y3MjM0LjBwLTEzOEwsCisgICAgIDB4ODA4MDAwLjBwLTI0LCAgMHhiMDcyOTguMHAtMjQsIC0weDE3NTBlZTM5MTVhMTk3ZTljNzM1OWRkOTQxNTJmLjBwLTEzOEwsCisgICAgIDB4ODAwMDAwLjBwLTI0LCAgMHhiMTcyMTguMHAtMjQsIC0weDEwNWM2MTBjYTg2YzM4OThjZmY4MWExMmExN2UyLjBwLTE0MUwsCit9OworCisjaWZkZWYgVVNFX1VUQUIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWZsb2F0CUg7CQkJLyogMSArIGkvSU5URVJWQUxTIChleGFjdCkgKi8KKwlmbG9hdAlFOwkJCS8qIEgoaSkgKiBHKGkpIC0gMSAoZXhhY3QpICovCit9IFVbVFNJWkVdID0geworCSAweDgwMDAwMC4wcC0yMywgIDAsCisJIDB4ODEwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzcsCisJIDB4ODIwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzUsCisJIDB4ODMwMDAwLjBwLTIzLCAtMHg5MDAwMDAuMHAtMzQsCisJIDB4ODQwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzMsCisJIDB4ODUwMDAwLjBwLTIzLCAtMHhjODAwMDAuMHAtMzMsCisJIDB4ODYwMDAwLjBwLTIzLCAtMHhhMDAwMDAuMHAtMzYsCisJIDB4ODcwMDAwLjBwLTIzLCAgMHg5NDAwMDAuMHAtMzMsCisJIDB4ODgwMDAwLjBwLTIzLCAgMHg4MDAwMDAuMHAtMzUsCisJIDB4ODkwMDAwLjBwLTIzLCAtMHhjODAwMDAuMHAtMzQsCisJIDB4OGEwMDAwLjBwLTIzLCAgMHhlMDAwMDAuMHAtMzYsCisJIDB4OGIwMDAwLjBwLTIzLCAgMHg5MDAwMDAuMHAtMzMsCisJIDB4OGMwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzUsCisJIDB4OGQwMDAwLjBwLTIzLCAtMHhlMDAwMDAuMHAtMzMsCisJIDB4OGUwMDAwLjBwLTIzLCAgMHg4ODAwMDAuMHAtMzMsCisJIDB4OGYwMDAwLjBwLTIzLCAtMHhhODAwMDAuMHAtMzQsCisJIDB4OTAwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzUsCisJIDB4OTEwMDAwLjBwLTIzLCAgMHg4MDAwMDAuMHAtMzcsCisJIDB4OTIwMDAwLjBwLTIzLCAgMHg5MDAwMDAuMHAtMzUsCisJIDB4OTMwMDAwLjBwLTIzLCAgMHhkMDAwMDAuMHAtMzUsCisJIDB4OTQwMDAwLjBwLTIzLCAgMHhlMDAwMDAuMHAtMzUsCisJIDB4OTUwMDAwLjBwLTIzLCAgMHhjMDAwMDAuMHAtMzUsCisJIDB4OTYwMDAwLjBwLTIzLCAgMHhlMDAwMDAuMHAtMzYsCisJIDB4OTcwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzgsCisJIDB4OTgwMDAwLjBwLTIzLCAtMHhjMDAwMDAuMHAtMzUsCisJIDB4OTkwMDAwLjBwLTIzLCAtMHhkMDAwMDAuMHAtMzQsCisJIDB4OWEwMDAwLjBwLTIzLCAgMHg4ODAwMDAuMHAtMzMsCisJIDB4OWIwMDAwLjBwLTIzLCAgMHhlODAwMDAuMHAtMzUsCisJIDB4OWMwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzUsCisJIDB4OWQwMDAwLjBwLTIzLCAgMHhiNDAwMDAuMHAtMzMsCisJIDB4OWUwMDAwLjBwLTIzLCAgMHg4ODAwMDAuMHAtMzQsCisJIDB4OWYwMDAwLjBwLTIzLCAtMHhlMDAwMDAuMHAtMzUsCisJIDB4YTAwMDAwLjBwLTIzLCAgMHg4MDAwMDAuMHAtMzMsCisJIDB4YTEwMDAwLjBwLTIzLCAtMHg5MDAwMDAuMHAtMzYsCisJIDB4YTIwMDAwLjBwLTIzLCAtMHhiMDAwMDAuMHAtMzMsCisJIDB4YTMwMDAwLjBwLTIzLCAtMHhhMDAwMDAuMHAtMzYsCisJIDB4YTQwMDAwLjBwLTIzLCAgMHg4MDAwMDAuMHAtMzMsCisJIDB4YTUwMDAwLjBwLTIzLCAtMHhmODAwMDAuMHAtMzUsCisJIDB4YTYwMDAwLjBwLTIzLCAgMHg4ODAwMDAuMHAtMzQsCisJIDB4YTcwMDAwLjBwLTIzLCAtMHg5MDAwMDAuMHAtMzMsCisJIDB4YTgwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzUsCisJIDB4YTkwMDAwLjBwLTIzLCAgMHg5MDAwMDAuMHAtMzQsCisJIDB4YWEwMDAwLjBwLTIzLCAgMHhhODAwMDAuMHAtMzMsCisJIDB4YWIwMDAwLjBwLTIzLCAtMHhhYzAwMDAuMHAtMzQsCisJIDB4YWMwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzcsCisJIDB4YWQwMDAwLjBwLTIzLCAgMHhmODAwMDAuMHAtMzUsCisJIDB4YWUwMDAwLjBwLTIzLCAgMHhmODAwMDAuMHAtMzQsCisJIDB4YWYwMDAwLjBwLTIzLCAtMHhhYzAwMDAuMHAtMzMsCisJIDB4YjAwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzMsCisJIDB4YjEwMDAwLjBwLTIzLCAtMHhiODAwMDAuMHAtMzQsCisJIDB4YjIwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzQsCisJIDB4YjMwMDAwLjBwLTIzLCAtMHhiMDAwMDAuMHAtMzUsCisJIDB4YjQwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzUsCisJIDB4YjUwMDAwLjBwLTIzLCAtMHhlMDAwMDAuMHAtMzYsCisJIDB4YjYwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzUsCisJIDB4YjcwMDAwLjBwLTIzLCAtMHhiMDAwMDAuMHAtMzUsCisJIDB4YjgwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzQsCisJIDB4YjkwMDAwLjBwLTIzLCAtMHhiODAwMDAuMHAtMzQsCisJIDB4YmEwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzMsCisJIDB4YmIwMDAwLjBwLTIzLCAtMHhhYzAwMDAuMHAtMzMsCisJIDB4YmMwMDAwLjBwLTIzLCAgMHg5ODAwMDAuMHAtMzMsCisJIDB4YmQwMDAwLjBwLTIzLCAgMHhiYzAwMDAuMHAtMzQsCisJIDB4YmUwMDAwLjBwLTIzLCAgMHhlMDAwMDAuMHAtMzYsCisJIDB4YmYwMDAwLjBwLTIzLCAtMHhiODAwMDAuMHAtMzUsCisJIDB4YzAwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzMsCisJIDB4YzEwMDAwLjBwLTIzLCAgMHhhODAwMDAuMHAtMzMsCisJIDB4YzIwMDAwLjBwLTIzLCAgMHg5MDAwMDAuMHAtMzQsCisJIDB4YzMwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzUsCisJIDB4YzQwMDAwLjBwLTIzLCAtMHg5MDAwMDAuMHAtMzMsCisJIDB4YzUwMDAwLjBwLTIzLCAgMHg4MjAwMDAuMHAtMzMsCisJIDB4YzYwMDAwLjBwLTIzLCAgMHg4MDAwMDAuMHAtMzgsCisJIDB4YzcwMDAwLjBwLTIzLCAtMHg4MjAwMDAuMHAtMzMsCisJIDB4YzgwMDAwLjBwLTIzLCAgMHg4MDAwMDAuMHAtMzMsCisJIDB4YzkwMDAwLjBwLTIzLCAtMHhhMDAwMDAuMHAtMzYsCisJIDB4Y2EwMDAwLjBwLTIzLCAtMHhiMDAwMDAuMHAtMzMsCisJIDB4Y2IwMDAwLjBwLTIzLCAgMHg4NDAwMDAuMHAtMzQsCisJIDB4Y2MwMDAwLjBwLTIzLCAtMHhkMDAwMDAuMHAtMzQsCisJIDB4Y2QwMDAwLjBwLTIzLCAgMHg4MDAwMDAuMHAtMzMsCisJIDB4Y2UwMDAwLjBwLTIzLCAtMHhlMDAwMDAuMHAtMzUsCisJIDB4Y2YwMDAwLjBwLTIzLCAgMHhhNjAwMDAuMHAtMzMsCisJIDB4ZDAwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzUsCisJIDB4ZDEwMDAwLjBwLTIzLCAgMHhiNDAwMDAuMHAtMzMsCisJIDB4ZDIwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzUsCisJIDB4ZDMwMDAwLjBwLTIzLCAgMHhhYTAwMDAuMHAtMzMsCisJIDB4ZDQwMDAwLjBwLTIzLCAtMHhlMDAwMDAuMHAtMzUsCisJIDB4ZDUwMDAwLjBwLTIzLCAgMHg4ODAwMDAuMHAtMzMsCisJIDB4ZDYwMDAwLjBwLTIzLCAtMHhkMDAwMDAuMHAtMzQsCisJIDB4ZDcwMDAwLjBwLTIzLCAgMHg5YzAwMDAuMHAtMzQsCisJIDB4ZDgwMDAwLjBwLTIzLCAtMHhiMDAwMDAuMHAtMzMsCisJIDB4ZDkwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzgsCisJIDB4ZGEwMDAwLjBwLTIzLCAgMHhhNDAwMDAuMHAtMzMsCisJIDB4ZGIwMDAwLjBwLTIzLCAtMHhkYzAwMDAuMHAtMzQsCisJIDB4ZGMwMDAwLjBwLTIzLCAgMHhjMDAwMDAuMHAtMzUsCisJIDB4ZGQwMDAwLjBwLTIzLCAgMHhjYTAwMDAuMHAtMzMsCisJIDB4ZGUwMDAwLjBwLTIzLCAtMHhiODAwMDAuMHAtMzQsCisJIDB4ZGYwMDAwLjBwLTIzLCAgMHhkMDAwMDAuMHAtMzUsCisJIDB4ZTAwMDAwLjBwLTIzLCAgMHhjMDAwMDAuMHAtMzMsCisJIDB4ZTEwMDAwLjBwLTIzLCAtMHhmNDAwMDAuMHAtMzQsCisJIDB4ZTIwMDAwLjBwLTIzLCAgMHg4MDAwMDAuMHAtMzcsCisJIDB4ZTMwMDAwLjBwLTIzLCAgMHg4NjAwMDAuMHAtMzMsCisJIDB4ZTQwMDAwLjBwLTIzLCAtMHhjODAwMDAuMHAtMzMsCisJIDB4ZTUwMDAwLjBwLTIzLCAtMHhhODAwMDAuMHAtMzQsCisJIDB4ZTYwMDAwLjBwLTIzLCAgMHhlMDAwMDAuMHAtMzYsCisJIDB4ZTcwMDAwLjBwLTIzLCAgMHg4ODAwMDAuMHAtMzMsCisJIDB4ZTgwMDAwLjBwLTIzLCAtMHhlMDAwMDAuMHAtMzMsCisJIDB4ZTkwMDAwLjBwLTIzLCAtMHhmYzAwMDAuMHAtMzQsCisJIDB4ZWEwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzUsCisJIDB4ZWIwMDAwLjBwLTIzLCAgMHhlODAwMDAuMHAtMzUsCisJIDB4ZWMwMDAwLjBwLTIzLCAgMHg5MDAwMDAuMHAtMzMsCisJIDB4ZWQwMDAwLjBwLTIzLCAgMHhlMjAwMDAuMHAtMzMsCisJIDB4ZWUwMDAwLjBwLTIzLCAtMHhhYzAwMDAuMHAtMzMsCisJIDB4ZWYwMDAwLjBwLTIzLCAtMHhjODAwMDAuMHAtMzQsCisJIDB4ZjAwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzUsCisJIDB4ZjEwMDAwLjBwLTIzLCAgMHg4MDAwMDAuMHAtMzUsCisJIDB4ZjIwMDAwLjBwLTIzLCAgMHhiODAwMDAuMHAtMzQsCisJIDB4ZjMwMDAwLjBwLTIzLCAgMHg5NDAwMDAuMHAtMzMsCisJIDB4ZjQwMDAwLjBwLTIzLCAgMHhjODAwMDAuMHAtMzMsCisJIDB4ZjUwMDAwLjBwLTIzLCAtMHhmMjAwMDAuMHAtMzMsCisJIDB4ZjYwMDAwLjBwLTIzLCAtMHhjODAwMDAuMHAtMzMsCisJIDB4ZjcwMDAwLjBwLTIzLCAtMHhhMjAwMDAuMHAtMzMsCisJIDB4ZjgwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzMsCisJIDB4ZjkwMDAwLjBwLTIzLCAtMHhjNDAwMDAuMHAtMzQsCisJIDB4ZmEwMDAwLjBwLTIzLCAtMHg5MDAwMDAuMHAtMzQsCisJIDB4ZmIwMDAwLjBwLTIzLCAtMHhjODAwMDAuMHAtMzUsCisJIDB4ZmMwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzUsCisJIDB4ZmQwMDAwLjBwLTIzLCAtMHg5MDAwMDAuMHAtMzYsCisJIDB4ZmUwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzcsCisJIDB4ZmYwMDAwLjBwLTIzLCAtMHg4MDAwMDAuMHAtMzksCisJIDB4ODAwMDAwLjBwLTIyLCAgMCwKK307CisjZW5kaWYgLyogVVNFX1VUQUIgKi8KKworI2lmZGVmIFNUUlVDVF9SRVRVUk4KKyNkZWZpbmUJUkVUVVJOMShycCwgdikgZG8gewlcCisJKHJwKS0+aGkgPSAodik7CQlcCisJKHJwKS0+bG9fc2V0ID0gMDsJXAorCXJldHVybjsJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVJFVFVSTjIocnAsIGgsIGwpIGRvIHsJXAorCShycCktPmhpID0gKGgpOwkJXAorCShycCktPmxvID0gKGwpOwkJXAorCShycCktPmxvX3NldCA9IDE7CVwKKwlyZXR1cm47CQkJXAorfSB3aGlsZSAoMCkKKworc3RydWN0IGxkIHsKKwlsb25nIGRvdWJsZSBoaTsKKwlsb25nIGRvdWJsZSBsbzsKKwlpbnQJbG9fc2V0OworfTsKKyNlbHNlCisjZGVmaW5lCVJFVFVSTjEocnAsIHYpCVJFVFVSTkYodikKKyNkZWZpbmUJUkVUVVJOMihycCwgaCwgbCkJUkVUVVJOSSgoaCkgKyAobCkpCisjZW5kaWYKKworI2lmZGVmIFNUUlVDVF9SRVRVUk4KK3N0YXRpYyBpbmxpbmUgX19hbHdheXNfaW5saW5lIHZvaWQKK2tfbG9nbChsb25nIGRvdWJsZSB4LCBzdHJ1Y3QgbGQgKnJwKQorI2Vsc2UKK2xvbmcgZG91YmxlCitsb2dsKGxvbmcgZG91YmxlIHgpCisjZW5kaWYKK3sKKwlsb25nIGRvdWJsZSBkLCB2YWxfaGksIHZhbF9sbzsKKwlkb3VibGUgZGQsIGRrOworCXVpbnQ2NF90IGx4LCBsbHg7CisJaW50IGksIGs7CisJdWludDE2X3QgaHg7CisKKwlFWFRSQUNUX0xEQkwxMjhfV09SRFMoaHgsIGx4LCBsbHgsIHgpOworCWsgPSAtMTYzODM7CisjaWYgMCAvKiBIYXJkIHRvIGRvIGVmZmljaWVudGx5LiAgRG9uJ3QgZG8gaXQgdW50aWwgd2Ugc3VwcG9ydCBhbGwgbW9kZXMuICovCisJaWYgKHggPT0gMSkKKwkJUkVUVVJOMShycCwgMCk7CQkvKiBsb2coMSkgPSArMCBpbiBhbGwgcm91bmRpbmcgbW9kZXMgKi8KKyNlbmRpZgorCWlmIChoeCA9PSAwIHx8IGh4ID49IDB4ODAwMCkgewkvKiB6ZXJvLCBuZWdhdGl2ZSBvciBzdWJub3JtYWw/ICovCisJCWlmICgoKGh4ICYgMHg3ZmZmKSB8IGx4IHwgbGx4KSA9PSAwKQorCQkJUkVUVVJOMShycCwgLTEgLyB6ZXJvKTsJLyogbG9nKCstMCkgPSAtSW5mICovCisJCWlmIChoeCAhPSAwKQorCQkJLyogbG9nKG5lZyBvciBOYU4pID0gcU5hTjogKi8KKwkJCVJFVFVSTjEocnAsICh4IC0geCkgLyB6ZXJvKTsKKwkJeCAqPSAweDEuMHAxMTM7CQkvKiBzdWJub3JtYWw7IHNjYWxlIHVwIHggKi8KKwkJRVhUUkFDVF9MREJMMTI4X1dPUkRTKGh4LCBseCwgbGx4LCB4KTsKKwkJayA9IC0xNjM4MyAtIDExMzsKKwl9IGVsc2UgaWYgKGh4ID49IDB4N2ZmZikKKwkJUkVUVVJOMShycCwgeCArIHgpOwkvKiBsb2coSW5mIG9yIE5hTikgPSBJbmYgb3IgcU5hTiAqLworI2lmbmRlZiBTVFJVQ1RfUkVUVVJOCisJRU5URVJJKCk7CisjZW5kaWYKKwlrICs9IGh4OworCWRrID0gazsKKworCS8qIFNjYWxlIHggdG8gYmUgaW4gWzEsIDIpLiAqLworCVNFVF9MREJMX0VYUFNJR04oeCwgMHgzZmZmKTsKKworCS8qIDAgPD0gaSA8PSBJTlRFUlZBTFM6ICovCisjZGVmaW5lCUwySQkoNDkgLSBMT0cyX0lOVEVSVkFMUykKKwlpID0gKGx4ICsgKDFMTCA8PCAoTDJJIC0gMikpKSA+PiAoTDJJIC0gMSk7CisKKwkvKgorCSAqIC0wLjAwNTI4MCA8IGQgPCAwLjAwNDgzOC4gIEluIHBhcnRpY3VsYXIsIHRoZSBpbmZpbml0ZS0KKwkgKiBwcmVjaXNpb24gfGR8IGlzIDw9IDIqKi03LiAgUm91bmRpbmcgb2YgRyhpKSB0byA4IGJpdHMKKwkgKiBlbnN1cmVzIHRoYXQgZCBpcyByZXByZXNlbnRhYmxlIHdpdGhvdXQgZXh0cmEgcHJlY2lzaW9uIGZvcgorCSAqIHRoaXMgYm91bmQgb24gfGR8IChzaW5jZSB3aGVuIHRoaXMgY2FsY3VsYXRpb24gaXMgZXhwcmVzc2VkCisJICogYXMgeCpHKGkpLTEsIHRoZSBtdWx0aXBsaWNhdGlvbiBuZWVkcyBhcyBtYW55IGV4dHJhIGJpdHMgYXMKKwkgKiBHKGkpIGhhcyBhbmQgdGhlIHN1YnRyYWN0aW9uIGNhbmNlbHMgOCBiaXRzKS4gIEJ1dCBmb3IKKwkgKiBtb3N0IGkgKDEwNyBjYXNlcyBvdXQgb2YgMTI5KSwgdGhlIGluZmluaXRlLXByZWNpc2lvbiB8ZHwKKwkgKiBpcyA8PSAyKiotOC4gIEcoaSkgaXMgcm91bmRlZCB0byA5IGJpdHMgZm9yIHN1Y2ggaSB0byBnaXZlCisJICogYmV0dGVyIGFjY3VyYWN5ICh0aGlzIHdvcmtzIGJ5IGltcHJvdmluZyB0aGUgYm91bmQgb24gfGR8LAorCSAqIHdoaWNoIGluIHR1cm4gYWxsb3dzIHJvdW5kaW5nIHRvIDkgYml0cyBpbiBtb3JlIGNhc2VzKS4KKwkgKiBUaGlzIGlzIG9ubHkgaW1wb3J0YW50IHdoZW4gdGhlIG9yaWdpbmFsIHggaXMgbmVhciAxIC0tIGl0CisJICogbGV0cyB1cyBhdm9pZCB1c2luZyBhIHNwZWNpYWwgbWV0aG9kIHRvIGdpdmUgdGhlIGRlc2lyZWQKKwkgKiBhY2N1cmFjeSBmb3Igc3VjaCB4LgorCSAqLworCWlmICgwKQorCQlkID0geCAqIEcoaSkgLSAxOworCWVsc2UgeworI2lmZGVmIFVTRV9VVEFCCisJCWQgPSAoeCAtIEgoaSkpICogRyhpKSArIEUoaSk7CisjZWxzZQorCQlsb25nIGRvdWJsZSB4X2hpOworCQlkb3VibGUgeF9sbzsKKworCQkvKgorCQkgKiBTcGxpdCB4IGludG8geF9oaSArIHhfbG8gdG8gY2FsY3VsYXRlIHgqRyhpKS0xIGV4YWN0bHkuCisJCSAqIEcoaSkgaGFzIGF0IG1vc3QgOSBiaXRzLCBzbyB0aGUgc3BsaXR0aW5nIHBvaW50IGlzIG5vdAorCQkgKiBjcml0aWNhbC4KKwkJICovCisJCUlOU0VSVF9MREJMMTI4X1dPUkRTKHhfaGksIDB4M2ZmZiwgbHgsCisJCSAgICBsbHggJiAweGZmZmZmZmZmZmYwMDAwMDBVTEwpOworCQl4X2xvID0geCAtIHhfaGk7CisJCWQgPSB4X2hpICogRyhpKSAtIDEgKyB4X2xvICogRyhpKTsKKyNlbmRpZgorCX0KKworCS8qCisJICogT3VyIGFsZ29yaXRobSBkZXBlbmRzIG9uIGV4YWN0IGNhbmNlbGxhdGlvbiBvZiBGX2xvKGkpIGFuZAorCSAqIEZfaGkoaSkgd2l0aCBkaypsbl8yX2xvIGFuZCBkaypsbjJfaGkgd2hlbiBrIGlzIC0xIGFuZCBpIGlzCisJICogYXQgdGhlIGVuZCBvZiB0aGUgdGFibGUuICBUaGlzIGFuZCBvdGhlciB0ZWNobmljYWwgY29tcGxpY2F0aW9ucworCSAqIG1ha2UgaXQgZGlmZmljdWx0IHRvIGF2b2lkIHRoZSBkb3VibGUgc2NhbGluZyBpbiAoZGsqbG4yKSAqCisJICogbG9nKGJhc2UpIGZvciBiYXNlICE9IGUgd2l0aG91dCBsb3NpbmcgbW9yZSBhY2N1cmFjeSBhbmQvb3IKKwkgKiBlZmZpY2llbmN5IHRoYW4gaXMgZ2FpbmVkLgorCSAqLworCS8qCisJICogVXNlIGRvdWJsZSBwcmVjaXNpb24gb3BlcmF0aW9ucyB3aGVyZXZlciBwb3NzaWJsZSwgc2luY2UgbG9uZworCSAqIGRvdWJsZSBvcGVyYXRpb25zIGFyZSBlbXVsYXRlZCBhbmQgYXJlIHZlcnkgc2xvdyBvbiB0aGUgb25seQorCSAqIGtub3duIG1hY2hpbmVzIHRoYXQgc3VwcG9ydCBsZDEyOCAoc3BhcmM2NCkuICBBbHNvLCBkb24ndCB0cnkKKwkgKiB0byBpbXByb3ZlIHBhcmFsbGVsaXNtIGJ5IGluY3JlYXNpbmcgdGhlIG51bWJlciBvZiBvcGVyYXRpb25zLAorCSAqIHNpbmNlIGFueSBwYXJhbGxlbGlzbSBvbiBzdWNoIG1hY2hpbmVzIGlzIG5lZWRlZCBmb3IgdGhlCisJICogZW11bGF0aW9uLiAgSG9ybmVyJ3MgbWV0aG9kIGlzIGdvb2QgZm9yIHRoaXMsIGFuZCBpcyBhbHNvIGdvb2QKKwkgKiBmb3IgYWNjdXJhY3kuICBIb3JuZXIncyBtZXRob2QgZG9lc24ndCBoYW5kbGUgdGhlIGBsbycgdGVybQorCSAqIHdlbGwsIGVpdGhlciBmb3IgZWZmaWNpZW5jeSBvciBhY2N1cmFjeS4gIEhvd2V2ZXIsIGZvciBhY2N1cmFjeQorCSAqIHdlIGV2YWx1YXRlIGQgKiBkICogUDIgc2VwYXJhdGVseSB0byB0YWtlIGFkdmFudGFnZSBvZgorCSAqIGJ5IFAyIGJlaW5nIGV4YWN0LCBhbmQgdGhpcyBnaXZlcyBhIGdvb2QgcGxhY2UgdG8gc3VtIHRoZSAnbG8nCisJICogdGVybSB0b28uCisJICovCisJZGQgPSAoZG91YmxlKWQ7CisJdmFsX2xvID0gZCAqIGQgKiBkICogKFAzICsKKwkgICAgZCAqIChQNCArIGQgKiAoUDUgKyBkICogKFA2ICsgZCAqIChQNyArIGQgKiAoUDggKworCSAgICBkZCAqIChQOSArIGRkICogKFAxMCArIGRkICogKFAxMSArIGRkICogKFAxMiArIGRkICogKFAxMyArCisJICAgIGRkICogUDE0KSkpKSkpKSkpKSkgKyAoRl9sbyhpKSArIGRrICogbG4yX2xvKSArIGQgKiBkICogUDI7CisJdmFsX2hpID0gZDsKKyNpZmRlZiBERUJVRworCWlmIChmZXRlc3RleGNlcHQoRkVfVU5ERVJGTE9XKSkKKwkJYnJlYWtwb2ludCgpOworI2VuZGlmCisKKwlfM3N1bUYodmFsX2hpLCB2YWxfbG8sIEZfaGkoaSkgKyBkayAqIGxuMl9oaSk7CisJUkVUVVJOMihycCwgdmFsX2hpLCB2YWxfbG8pOworfQorCitsb25nIGRvdWJsZQorbG9nMXBsKGxvbmcgZG91YmxlIHgpCit7CisJbG9uZyBkb3VibGUgZCwgZF9oaSwgZl9sbywgdmFsX2hpLCB2YWxfbG87CisJbG9uZyBkb3VibGUgZl9oaSwgdHdvcG1pbnVzazsKKwlkb3VibGUgZF9sbywgZGQsIGRrOworCXVpbnQ2NF90IGx4LCBsbHg7CisJaW50IGksIGs7CisJaW50MTZfdCBheCwgaHg7CisKKwlET1BSSU5UX1NUQVJUKCZ4KTsKKwlFWFRSQUNUX0xEQkwxMjhfV09SRFMoaHgsIGx4LCBsbHgsIHgpOworCWlmIChoeCA8IDB4M2ZmZikgewkJLyogeCA8IDEsIG9yIHggbmVnIE5hTiAqLworCQlheCA9IGh4ICYgMHg3ZmZmOworCQlpZiAoYXggPj0gMHgzZmZmKSB7CS8qIHggPD0gLTEsIG9yIHggbmVnIE5hTiAqLworCQkJaWYgKGF4ID09IDB4M2ZmZiAmJiAobHggfCBsbHgpID09IDApCisJCQkJUkVUVVJOUCgtMSAvIHplcm8pOwkvKiBsb2cxcCgtMSkgPSAtSW5mICovCisJCQkvKiBsb2cxcCh4IDwgMSwgb3IgeCBOYU4pID0gcU5hTjogKi8KKwkJCVJFVFVSTlAoKHggLSB4KSAvICh4IC0geCkpOworCQl9CisJCWlmIChheCA8PSAweDNmOGQpIHsJLyogfHh8IDwgMioqLTExMyAqLworCQkJaWYgKChpbnQpeCA9PSAwKQorCQkJCVJFVFVSTlAoeCk7CS8qIHggd2l0aCBpbmV4YWN0IGlmIHggIT0gMCAqLworCQl9CisJCWZfaGkgPSAxOworCQlmX2xvID0geDsKKwl9IGVsc2UgaWYgKGh4ID49IDB4N2ZmZikgewkvKiB4ICtJbmYgb3Igbm9uLW5lZyBOYU4gKi8KKwkJUkVUVVJOUCh4ICsgeCk7CQkvKiBsb2cxcChJbmYgb3IgTmFOKSA9IEluZiBvciBxTmFOICovCisJfSBlbHNlIGlmIChoeCA8IDB4NDBlMSkgewkvKiAxIDw9IHggPCAyKioyMjYgKi8KKwkJZl9oaSA9IHg7CisJCWZfbG8gPSAxOworCX0gZWxzZSB7CQkJLyogMioqMjI2IDw9IHggPCArSW5mICovCisJCWZfaGkgPSB4OworCQlmX2xvID0gMDsJCS8qIGF2b2lkIHVuZGVyZmxvdyBvZiB0aGUgUDMgdGVybSAqLworCX0KKwlFTlRFUkkoKTsKKwl4ID0gZl9oaSArIGZfbG87CisJZl9sbyA9IChmX2hpIC0geCkgKyBmX2xvOworCisJRVhUUkFDVF9MREJMMTI4X1dPUkRTKGh4LCBseCwgbGx4LCB4KTsKKwlrID0gLTE2MzgzOworCisJayArPSBoeDsKKwlkayA9IGs7CisKKwlTRVRfTERCTF9FWFBTSUdOKHgsIDB4M2ZmZik7CisJdHdvcG1pbnVzayA9IDE7CisJU0VUX0xEQkxfRVhQU0lHTih0d29wbWludXNrLCAweDdmZmUgLSAoaHggJiAweDdmZmYpKTsKKwlmX2xvICo9IHR3b3BtaW51c2s7CisKKwlpID0gKGx4ICsgKDFMTCA8PCAoTDJJIC0gMikpKSA+PiAoTDJJIC0gMSk7CisKKwkvKgorCSAqIHgqRyhpKS0xICh3aXRoIGEgcmVkdWNlZCB4KSBjYW4gYmUgcmVwcmVzZW50ZWQgZXhhY3RseSwgYXMKKwkgKiBhYm92ZSwgYnV0IG5vdyB3ZSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBwb2x5bm9taWFsIG9uIGQgPQorCSAqICh4K2ZfbG8pKkcoaSktMSBhbmQgZXh0cmEgcHJlY2lzaW9uIGlzIG5lZWRlZCBmb3IgdGhhdC4KKwkgKiBTaW5jZSB4K3hfbG8gaXMgYSBoaStsbyBkZWNvbXBvc2l0aW9uIGFuZCBzdWJ0cmFjdGluZyAxCisJICogZG9lc24ndCBsb3NlIHRvbyBtYW55IGJpdHMsIGFuIGluZXhhY3QgY2FsY3VsYXRpb24gZm9yCisJICogZl9sbypHKGkpIGlzIGdvb2QgZW5vdWdoLgorCSAqLworCWlmICgwKQorCQlkX2hpID0geCAqIEcoaSkgLSAxOworCWVsc2UgeworI2lmZGVmIFVTRV9VVEFCCisJCWRfaGkgPSAoeCAtIEgoaSkpICogRyhpKSArIEUoaSk7CisjZWxzZQorCQlsb25nIGRvdWJsZSB4X2hpOworCQlkb3VibGUgeF9sbzsKKworCQlJTlNFUlRfTERCTDEyOF9XT1JEUyh4X2hpLCAweDNmZmYsIGx4LAorCQkgICAgbGx4ICYgMHhmZmZmZmZmZmZmMDAwMDAwVUxMKTsKKwkJeF9sbyA9IHggLSB4X2hpOworCQlkX2hpID0geF9oaSAqIEcoaSkgLSAxICsgeF9sbyAqIEcoaSk7CisjZW5kaWYKKwl9CisJZF9sbyA9IGZfbG8gKiBHKGkpOworCisJLyoKKwkgKiBUaGlzIGlzIF8yc3VtRihkX2hpLCBkX2xvKSBpbmxpbmVkLiAgVGhlIGNvbmRpdGlvbgorCSAqIChkX2hpID09IDAgfHwgfGRfaGl8ID49IHxkX2xvfCkgZm9yIHVzaW5nIF8yc3VtRigpIGlzIG5vdAorCSAqIGFsd2F5cyBzYXRpc2lmZWQsIHNvIGl0IGlzIG5vdCBjbGVhciB0aGF0IHRoaXMgd29ya3MsIGJ1dAorCSAqIGl0IHdvcmtzIGluIHByYWN0aWNlLiAgSXQgd29ya3MgZXZlbiBpZiBpdCBnaXZlcyBhIHdyb25nCisJICogbm9ybWFsaXplZCBkX2xvLCBzaW5jZSB8ZF9sb3wgPiB8ZF9oaXwgaW1wbGllcyB0aGF0IGkgaXMKKwkgKiBub256ZXJvIGFuZCBkIGlzIHRpbnksIHNvIHRoZSBGKGkpIHRlcm0gZG9taW5hdGVzIGRfbG8uCisJICogSW4gZmxvYXQgcHJlY2lzaW9uOgorCSAqIChCeSBleGhhdXN0aXZlIHRlc3RpbmcsIHRoZSB3b3JzdCBjYXNlIGlzIGRfaGkgPSAweDEuYnAtMjUuCisJICogQW5kIGlmIGQgaXMgb25seSBhIGxpdHRsZSB0aW5pZXIgdGhhbiB0aGF0LCB3ZSB3b3VsZCBoYXZlCisJICogYW5vdGhlciB1bmRlcmZsb3cgcHJvYmxlbSBmb3IgdGhlIFAzIHRlcm07IHRoaXMgaXMgYWxzbyBydWxlZAorCSAqIG91dCBieSBleGhhdXN0aXZlIHRlc3RpbmcuKQorCSAqLworCWQgPSBkX2hpICsgZF9sbzsKKwlkX2xvID0gZF9oaSAtIGQgKyBkX2xvOworCWRfaGkgPSBkOworCisJZGQgPSAoZG91YmxlKWQ7CisJdmFsX2xvID0gZCAqIGQgKiBkICogKFAzICsKKwkgICAgZCAqIChQNCArIGQgKiAoUDUgKyBkICogKFA2ICsgZCAqIChQNyArIGQgKiAoUDggKworCSAgICBkZCAqIChQOSArIGRkICogKFAxMCArIGRkICogKFAxMSArIGRkICogKFAxMiArIGRkICogKFAxMyArCisJICAgIGRkICogUDE0KSkpKSkpKSkpKSkgKyAoRl9sbyhpKSArIGRrICogbG4yX2xvICsgZF9sbykgKyBkICogZCAqIFAyOworCXZhbF9oaSA9IGRfaGk7CisjaWZkZWYgREVCVUcKKwlpZiAoZmV0ZXN0ZXhjZXB0KEZFX1VOREVSRkxPVykpCisJCWJyZWFrcG9pbnQoKTsKKyNlbmRpZgorCisJXzNzdW1GKHZhbF9oaSwgdmFsX2xvLCBGX2hpKGkpICsgZGsgKiBsbjJfaGkpOworCVJFVFVSTjJQSSh2YWxfaGksIHZhbF9sbyk7Cit9CisKKyNpZmRlZiBTVFJVQ1RfUkVUVVJOCisKK2xvbmcgZG91YmxlCitsb2dsKGxvbmcgZG91YmxlIHgpCit7CisJc3RydWN0IGxkIHI7CisKKwlFTlRFUkkoKTsKKwlET1BSSU5UX1NUQVJUKCZ4KTsKKwlrX2xvZ2woeCwgJnIpOworCVJFVFVSTlNQSSgmcik7Cit9CisKKy8qCisgKiAyOSsxMTMgYml0IGRlY29tcG9zaXRpb25zLiAgVGhlIGJpdHMgYXJlIGRpc3RyaWJ1dGVkIHNvIHRoYXQgdGhlIHByb2R1Y3RzCisgKiBvZiB0aGUgaGkgdGVybXMgYXJlIGV4YWN0IGluIGRvdWJsZSBwcmVjaXNpb24uICBUaGUgdHlwZXMgYXJlIGNob3NlbiBzbworICogdGhhdCB0aGUgcHJvZHVjdHMgb2YgdGhlIGhpIHRlcm1zIGFyZSBkb25lIGluIGF0IGxlYXN0IGRvdWJsZSBwcmVjaXNpb24sCisgKiB3aXRob3V0IGFueSBleHBsaWNpdCBjb252ZXJzaW9ucy4gIE1vcmUgbmF0dXJhbCBjaG9pY2VzIHdvdWxkIHJlcXVpcmUgYQorICogc2xvdyBsb25nIGRvdWJsZSBwcmVjaXNpb24gbXVsdGlwbGljYXRpb24uCisgKi8KK3N0YXRpYyBjb25zdCBkb3VibGUKK2ludmxuMTBfaGkgPSAgNC4zNDI5NDQ4MTc2MTc1MzU2ZS0xLAkJLyogIDB4MWJjYjdiMTUwMDAwMDAuMHAtNTQgKi8KK2ludmxuMl9oaSA9ICAxLjQ0MjY5NTA0MDI1NTc4NTBlMDsJCS8qICAweDE3MTU0NzY1MDAwMDAwLjBwLTUyICovCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK2ludmxuMTBfbG8gPSAgMS40MTQ5ODI2ODUzODU4MDA5MDc5MTYwNTA4MjI5NDM5NzAwMGUtMTBMLAkvKiAgMHgxMzcyODcxOTUzNTViYWFhZmFkMzNkYzMyM2VlMy4wcC0xNDVMICovCitpbnZsbjJfbG8gPSAgNi4zMzE3ODQxODk1NjYwNDM2ODUwMTg5MjEzNzQyNjY0NTkxMWUtMTBMOwkvKiAgMHgxNWMxN2YwYmJiZTg3ZmVkMDY5MWQzZTg4ZWI1Ny4wcC0xNDNMICovCisKK2xvbmcgZG91YmxlCitsb2cxMGwobG9uZyBkb3VibGUgeCkKK3sKKwlzdHJ1Y3QgbGQgcjsKKwlsb25nIGRvdWJsZSBsbzsKKwlmbG9hdCBoaTsKKworCUVOVEVSSSgpOworCURPUFJJTlRfU1RBUlQoJngpOworCWtfbG9nbCh4LCAmcik7CisJaWYgKCFyLmxvX3NldCkKKwkJUkVUVVJOUEkoci5oaSk7CisJXzJzdW1GKHIuaGksIHIubG8pOworCWhpID0gci5oaTsKKwlsbyA9IHIubG8gKyAoci5oaSAtIGhpKTsKKwlSRVRVUk4yUEkoaW52bG4xMF9oaSAqIGhpLAorCSAgICAoaW52bG4xMF9sbyArIGludmxuMTBfaGkpICogbG8gKyBpbnZsbjEwX2xvICogaGkpOworfQorCitsb25nIGRvdWJsZQorbG9nMmwobG9uZyBkb3VibGUgeCkKK3sKKwlzdHJ1Y3QgbGQgcjsKKwlsb25nIGRvdWJsZSBsbzsKKwlmbG9hdCBoaTsKKworCUVOVEVSSSgpOworCURPUFJJTlRfU1RBUlQoJngpOworCWtfbG9nbCh4LCAmcik7CisJaWYgKCFyLmxvX3NldCkKKwkJUkVUVVJOUEkoci5oaSk7CisJXzJzdW1GKHIuaGksIHIubG8pOworCWhpID0gci5oaTsKKwlsbyA9IHIubG8gKyAoci5oaSAtIGhpKTsKKwlSRVRVUk4yUEkoaW52bG4yX2hpICogaGksCisJICAgIChpbnZsbjJfbG8gKyBpbnZsbjJfaGkpICogbG8gKyBpbnZsbjJfbG8gKiBoaSk7Cit9CisKKyNlbmRpZiAvKiBTVFJVQ1RfUkVUVVJOICovCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19uYW5sLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19uYW5sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY3NGExMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX25hbmwuYwpAQCAtMCwwICsxLDQ2IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNyBEYXZpZCBTY2h1bHR6CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisjaW5jbHVkZSAiLi4vc3JjL21hdGhfcHJpdmF0ZS5oIgorCitsb25nIGRvdWJsZQorbmFubChjb25zdCBjaGFyICpzKQoreworCXVuaW9uIHsKKwkJdW5pb24gSUVFRWwyYml0cyBpZWVlOworCQl1aW50MzJfdCBiaXRzWzRdOworCX0gdTsKKworCV9zY2FuX25hbih1LmJpdHMsIDQsIHMpOworCXUuaWVlZS5iaXRzLmV4cCA9IDB4N2ZmZjsKKwl1LmllZWUuYml0cy5tYW5oIHw9IDFVTEwgPDwgNDc7CS8qIG1ha2UgaXQgYSBxdWlldCBOYU4gKi8KKwlyZXR1cm4gKHUuaWVlZS5lKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hY29zaGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hY29zaGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWZhZWIwCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Fjb3NobC5jCkBAIC0wLDAgKzEsODkgQEAKKy8qIGZyb206IEZyZWVCU0Q6IGhlYWQvbGliL21zdW4vc3JjL2VfYWNvc2guYyAxNzY0NTEgMjAwOC0wMi0yMiAwMjozMDozNlogZGFzICovCisKKy8qIEAoIyllX2Fjb3NoLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogU2VlIGVfYWNvc2guYyBmb3IgY29tcGxldGUgY29tbWVudHMuCisgKgorICogQ29udmVydGVkIHRvIGxvbmcgZG91YmxlIGJ5IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4gYW5kCisgKiBCcnVjZSBELiBFdmFucy4KKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpZmRlZiBfX2kzODZfXworI2luY2x1ZGUgPGllZWVmcC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJmcG1hdGguaCIKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKKy8qIEVYUF9MQVJHRSBpcyB0aGUgdGhyZXNob2xkIGFib3ZlIHdoaWNoIHdlIHVzZSBhY29zaCh4KSB+PSBsb2coMngpLiAqLworI2lmIExEQkxfTUFOVF9ESUcgPT0gNjQKKyNkZWZpbmUJRVhQX0xBUkdFCTM0CisjZWxpZiBMREJMX01BTlRfRElHID09IDExMworI2RlZmluZQlFWFBfTEFSR0UJNTgKKyNlbHNlCisjZXJyb3IgIlVuc3VwcG9ydGVkIGxvbmcgZG91YmxlIGZvcm1hdCIKKyNlbmRpZgorCisjaWYgTERCTF9NQVhfRVhQICE9IDB4NDAwMAorLyogV2UgYWxzbyByZXF1aXJlIHRoZSB1c3VhbCBleHBzaWduIGVuY29kaW5nLiAqLworI2Vycm9yICJVbnN1cHBvcnRlZCBsb25nIGRvdWJsZSBmb3JtYXQiCisjZW5kaWYKKworI2RlZmluZQlCSUFTCShMREJMX01BWF9FWFAgLSAxKQorCitzdGF0aWMgY29uc3QgZG91YmxlCitvbmUJPSAxLjA7CisKKyNpZiBMREJMX01BTlRfRElHID09IDY0CitzdGF0aWMgY29uc3QgdW5pb24gSUVFRWwyYml0cwordV9sbjIgPSAgTEQ4MEMoMHhiMTcyMTdmN2QxY2Y3OWFjLCAtMSwgNi45MzE0NzE4MDU1OTk0NTMwOTQxN2UtMUwpOworI2RlZmluZQlsbjIJdV9sbjIuZQorI2VsaWYgTERCTF9NQU5UX0RJRyA9PSAxMTMKK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZQorbG4yID0gIDYuOTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjhlLTFMOwkvKiAweDE2MmU0MmZlZmEzOWVmMzU3OTNjNzY3MzAwN2U2LjBwLTExMyAqLworI2Vsc2UKKyNlcnJvciAiVW5zdXBwb3J0ZWQgbG9uZyBkb3VibGUgZm9ybWF0IgorI2VuZGlmCisKK2xvbmcgZG91YmxlCithY29zaGwobG9uZyBkb3VibGUgeCkKK3sKKwlsb25nIGRvdWJsZSB0OworCWludDE2X3QgaHg7CisKKwlFTlRFUkkoKTsKKwlHRVRfTERCTF9FWFBTSUdOKGh4LCB4KTsKKwlpZiAoaHggPCAweDNmZmYpIHsJCS8qIHggPCAxLCBvciBtaXNub3JtYWwgKi8KKwkgICAgUkVUVVJOSSgoeC14KS8oeC14KSk7CisJfSBlbHNlIGlmIChoeCA+PSBCSUFTICsgRVhQX0xBUkdFKSB7IC8qIHggPj0gTEFSR0UgKi8KKwkgICAgaWYgKGh4ID49IDB4N2ZmZikgewkJLyogeCBpcyBpbmYsIE5hTiBvciBtaXNub3JtYWwgKi8KKwkgICAgICAgIFJFVFVSTkkoeCt4KTsKKwkgICAgfSBlbHNlCisJCVJFVFVSTkkobG9nbCh4KStsbjIpOwkvKiBhY29zaChodWdlKT1sb2coMngpLCBvciBtaXNub3JtYWwgKi8KKwl9IGVsc2UgaWYgKGh4ID09IDB4M2ZmZiAmJiB4ID09IDEpIHsKKwkgICAgUkVUVVJOSSgwLjApOwkJLyogYWNvc2goMSkgPSAwICovCisJfSBlbHNlIGlmIChoeCA+PSAweDQwMDApIHsJLyogTEFSR0UgPiB4ID49IDIsIG9yIG1pc25vcm1hbCAqLworCSAgICB0PXgqeDsKKwkgICAgUkVUVVJOSShsb2dsKDIuMCp4LW9uZS8oeCtzcXJ0bCh0LW9uZSkpKSk7CisJfSBlbHNlIHsJCQkvKiAxPHg8MiAqLworCSAgICB0ID0geC1vbmU7CisJICAgIFJFVFVSTkkobG9nMXBsKHQrc3FydGwoMi4wKnQrdCp0KSkpOworCX0KK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hdGFuaGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hdGFuaGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODg4NDI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2F0YW5obC5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qIGZyb206IEZyZWVCU0Q6IGhlYWQvbGliL21zdW4vc3JjL2VfYXRhbmguYyAxNzY0NTEgMjAwOC0wMi0yMiAwMjozMDozNlogZGFzICovCisKKy8qIEAoIyllX2F0YW5oLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogU2VlIGVfYXRhbmguYyBmb3IgY29tcGxldGUgY29tbWVudHMuCisgKgorICogQ29udmVydGVkIHRvIGxvbmcgZG91YmxlIGJ5IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4gYW5kCisgKiBCcnVjZSBELiBFdmFucy4KKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpZmRlZiBfX2kzODZfXworI2luY2x1ZGUgPGllZWVmcC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJmcG1hdGguaCIKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKKy8qIEVYUF9USU5ZIGlzIHRoZSB0aHJlc2hvbGQgYmVsb3cgd2hpY2ggd2UgdXNlIGF0YW5oKHgpIH49IHguICovCisjaWYgTERCTF9NQU5UX0RJRyA9PSA2NAorI2RlZmluZQlFWFBfVElOWQktMzQKKyNlbGlmIExEQkxfTUFOVF9ESUcgPT0gMTEzCisjZGVmaW5lCUVYUF9USU5ZCS01OAorI2Vsc2UKKyNlcnJvciAiVW5zdXBwb3J0ZWQgbG9uZyBkb3VibGUgZm9ybWF0IgorI2VuZGlmCisKKyNpZiBMREJMX01BWF9FWFAgIT0gMHg0MDAwCisvKiBXZSBhbHNvIHJlcXVpcmUgdGhlIHVzdWFsIGV4cHNpZ24gZW5jb2RpbmcuICovCisjZXJyb3IgIlVuc3VwcG9ydGVkIGxvbmcgZG91YmxlIGZvcm1hdCIKKyNlbmRpZgorCisjZGVmaW5lCUJJQVMJKExEQkxfTUFYX0VYUCAtIDEpCisKK3N0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wLCBodWdlID0gMWUzMDA7CitzdGF0aWMgY29uc3QgZG91YmxlIHplcm8gPSAwLjA7CisKK2xvbmcgZG91YmxlCithdGFuaGwobG9uZyBkb3VibGUgeCkKK3sKKwlsb25nIGRvdWJsZSB0OworCXVpbnQxNl90IGh4LCBpeDsKKworCUVOVEVSSSgpOworCUdFVF9MREJMX0VYUFNJR04oaHgsIHgpOworCWl4ID0gaHggJiAweDdmZmY7CisJaWYgKGl4ID49IDB4M2ZmZikJCS8qIHx4fCA+PSAxLCBvciBOYU4gb3IgbWlzbm9ybWFsICovCisJICAgIFJFVFVSTkkoZmFic2woeCkgPT0gMSA/IHggLyB6ZXJvIDogKHggLSB4KSAvICh4IC0geCkpOworCWlmIChpeCA8IEJJQVMgKyBFWFBfVElOWSAmJiAoaHVnZSArIHgpID4gemVybykKKwkgICAgUkVUVVJOSSh4KTsJCQkvKiB4IGlzIHRpbnkgKi8KKwlTRVRfTERCTF9FWFBTSUdOKHgsIGl4KTsKKwlpZiAoaXggPCAweDNmZmUpIHsJCS8qIHx4fCA8IDAuNSwgb3IgbWlzbm9ybWFsICovCisJICAgIHQgPSB4K3g7CisJICAgIHQgPSAwLjUqbG9nMXBsKHQrdCp4LyhvbmUteCkpOworCX0gZWxzZQorCSAgICB0ID0gMC41KmxvZzFwbCgoeCt4KS8ob25lLXgpKTsKKwlSRVRVUk5JKChoeCAmIDB4ODAwMCkgPT0gMCA/IHQgOiAtdCk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2ltcHJlY2lzZS5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9pbXByZWNpc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzUwM2JmCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9pbXByZWNpc2UuYwpAQCAtMCwwICsxLDY5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMyBEYXZpZCBDaGlzbmFsbAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKy8qCisgKiBJZiBsb25nIGRvdWJsZSBpcyBub3QgdGhlIHNhbWUgc2l6ZSBhcyBkb3VibGUsIHRoZW4gdGhlc2Ugd2lsbCBsb3NlCisgKiBwcmVjaXNpb24gYW5kIHdlIHNob3VsZCBlbWl0IGEgd2FybmluZyB3aGVuZXZlciBzb21ldGhpbmcgbGlua3MgYWdhaW5zdAorICogdGhlbS4KKyAqLworI2lmIChMREJMX01BTlRfRElHID4gNTMpCisjZGVmaW5lIFdBUk5fSU1QUkVDSVNFKHgpIFwKKwlfX3dhcm5fcmVmZXJlbmNlcyh4LCAjIHggIiBoYXMgbG93ZXIgdGhhbiBhZHZlcnRpc2VkIHByZWNpc2lvbiIpOworI2Vsc2UKKyNkZWZpbmUgV0FSTl9JTVBSRUNJU0UoeCkKKyNlbmRpZgorLyoKKyAqIERlY2xhcmUgdGhlIGZ1bmN0aW9ucyBhcyB3ZWFrIHZhcmlhbnRzIHNvIHRoYXQgb3RoZXIgbGlicmFyaWVzIHByb3ZpZGluZworICogcmVhbCB2ZXJzaW9ucyBjYW4gb3ZlcnJpZGUgdGhlbS4KKyAqLworI2RlZmluZQlERUNMQVJFX1dFQUsoeClcCisJX193ZWFrX3JlZmVyZW5jZShpbXByZWNpc2VfIyMgeCwgeCk7XAorCVdBUk5fSU1QUkVDSVNFKHgpCisKK2xvbmcgZG91YmxlCitpbXByZWNpc2VfcG93bChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KQoreworCisJcmV0dXJuIHBvdyh4LCB5KTsKK30KK0RFQ0xBUkVfV0VBSyhwb3dsKTsKKworI2RlZmluZSBERUNMQVJFX0lNUFJFQ0lTRShmKSBcCisJbG9uZyBkb3VibGUgaW1wcmVjaXNlXyAjIyBmICMjIGwobG9uZyBkb3VibGUgdikgeyByZXR1cm4gZih2KTsgfVwKKwlERUNMQVJFX1dFQUsoZiAjIyBsKQorCitERUNMQVJFX0lNUFJFQ0lTRShjb3NoKTsKK0RFQ0xBUkVfSU1QUkVDSVNFKGVyZmMpOworREVDTEFSRV9JTVBSRUNJU0UoZXJmKTsKK0RFQ0xBUkVfSU1QUkVDSVNFKGxnYW1tYSk7CitERUNMQVJFX0lNUFJFQ0lTRShzaW5oKTsKK0RFQ0xBUkVfSU1QUkVDSVNFKHRhbmgpOworREVDTEFSRV9JTVBSRUNJU0UodGdhbW1hKTsKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvbWF0aF9wcml2YXRlLmggYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL21hdGhfcHJpdmF0ZS5oCmluZGV4IDhlYmM3ZmIuLjhhZjJjNjUgMTAwNjQ0Ci0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvbWF0aF9wcml2YXRlLmgKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9tYXRoX3ByaXZhdGUuaApAQCAtMzksNyArMzksNyBAQAogICovCiAKICNpZmRlZiBfX2FybV9fCi0jaWYgZGVmaW5lZChfX1ZGUF9GUF9fKQorI2lmIGRlZmluZWQoX19WRlBfRlBfXykgfHwgZGVmaW5lZChfX0FSTV9FQUJJX18pCiAjZGVmaW5lCUlFRUVfV09SRF9PUkRFUglCWVRFX09SREVSCiAjZWxzZQogI2RlZmluZQlJRUVFX1dPUkRfT1JERVIJQklHX0VORElBTgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2FzaW5obC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2FzaW5obC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMjhmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfYXNpbmhsLmMKQEAgLTAsMCArMSw5MSBAQAorLyogZnJvbTogRnJlZUJTRDogaGVhZC9saWIvbXN1bi9zcmMvZV9hY29zaC5jIDE3NjQ1MSAyMDA4LTAyLTIyIDAyOjMwOjM2WiBkYXMgKi8KKworLyogQCgjKXNfYXNpbmguYyA1LjEgOTMvMDkvMjQgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogU2VlIHNfYXNpbmguYyBmb3IgY29tcGxldGUgY29tbWVudHMuCisgKgorICogQ29udmVydGVkIHRvIGxvbmcgZG91YmxlIGJ5IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4gYW5kCisgKiBCcnVjZSBELiBFdmFucy4KKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpZmRlZiBfX2kzODZfXworI2luY2x1ZGUgPGllZWVmcC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJmcG1hdGguaCIKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKKy8qIEVYUF9MQVJHRSBpcyB0aGUgdGhyZXNob2xkIGFib3ZlIHdoaWNoIHdlIHVzZSBhc2luaCh4KSB+PSBsb2coMngpLiAqLworLyogRVhQX1RJTlkgaXMgdGhlIHRocmVzaG9sZCBiZWxvdyB3aGljaCB3ZSB1c2UgYXNpbmgoeCkgfj0geC4gKi8KKyNpZiBMREJMX01BTlRfRElHID09IDY0CisjZGVmaW5lCUVYUF9MQVJHRQkzNAorI2RlZmluZQlFWFBfVElOWQktMzQKKyNlbGlmIExEQkxfTUFOVF9ESUcgPT0gMTEzCisjZGVmaW5lCUVYUF9MQVJHRQk1OAorI2RlZmluZQlFWFBfVElOWQktNTgKKyNlbHNlCisjZXJyb3IgIlVuc3VwcG9ydGVkIGxvbmcgZG91YmxlIGZvcm1hdCIKKyNlbmRpZgorCisjaWYgTERCTF9NQVhfRVhQICE9IDB4NDAwMAorLyogV2UgYWxzbyByZXF1aXJlIHRoZSB1c3VhbCBleHBzaWduIGVuY29kaW5nLiAqLworI2Vycm9yICJVbnN1cHBvcnRlZCBsb25nIGRvdWJsZSBmb3JtYXQiCisjZW5kaWYKKworI2RlZmluZQlCSUFTCShMREJMX01BWF9FWFAgLSAxKQorCitzdGF0aWMgY29uc3QgZG91YmxlCitvbmUgPSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDAsIC8qIDB4M0ZGMDAwMDAsIDB4MDAwMDAwMDAgKi8KK2h1Z2U9ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSszMDA7CisKKyNpZiBMREJMX01BTlRfRElHID09IDY0CitzdGF0aWMgY29uc3QgdW5pb24gSUVFRWwyYml0cwordV9sbjIgPSAgTEQ4MEMoMHhiMTcyMTdmN2QxY2Y3OWFjLCAtMSwgNi45MzE0NzE4MDU1OTk0NTMwOTQxN2UtMUwpOworI2RlZmluZQlsbjIJdV9sbjIuZQorI2VsaWYgTERCTF9NQU5UX0RJRyA9PSAxMTMKK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZQorbG4yID0gIDYuOTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjhlLTFMOwkvKiAweDE2MmU0MmZlZmEzOWVmMzU3OTNjNzY3MzAwN2U2LjBwLTExMyAqLworI2Vsc2UKKyNlcnJvciAiVW5zdXBwb3J0ZWQgbG9uZyBkb3VibGUgZm9ybWF0IgorI2VuZGlmCisKK2xvbmcgZG91YmxlCithc2luaGwobG9uZyBkb3VibGUgeCkKK3sKKwlsb25nIGRvdWJsZSB0LCB3OworCXVpbnQxNl90IGh4LCBpeDsKKworCUVOVEVSSSgpOworCUdFVF9MREJMX0VYUFNJR04oaHgsIHgpOworCWl4ID0gaHggJiAweDdmZmY7CisJaWYgKGl4ID49IDB4N2ZmZikgUkVUVVJOSSh4K3gpOwkvKiB4IGlzIGluZiwgTmFOIG9yIG1pc25vcm1hbCAqLworCWlmIChpeCA8IEJJQVMgKyBFWFBfVElOWSkgewkvKiB8eHwgPCBUSU5ZLCBvciBtaXNub3JtYWwgKi8KKwkgICAgaWYgKGh1Z2UgKyB4ID4gb25lKSBSRVRVUk5JKHgpOwkvKiByZXR1cm4geCBpbmV4YWN0IGV4Y2VwdCAwICovCisJfQorCWlmIChpeCA+PSBCSUFTICsgRVhQX0xBUkdFKSB7CS8qIHx4fCA+PSBMQVJHRSwgb3IgbWlzbm9ybWFsICovCisJICAgIHcgPSBsb2dsKGZhYnNsKHgpKStsbjI7CisJfSBlbHNlIGlmIChpeCA+PSAweDQwMDApIHsJLyogTEFSR0UgPiB8eHwgPj0gMi4wLCBvciBtaXNub3JtYWwgKi8KKwkgICAgdCA9IGZhYnNsKHgpOworCSAgICB3ID0gbG9nbCgyLjAqdCtvbmUvKHNxcnRsKHgqeCtvbmUpK3QpKTsKKwl9IGVsc2UgewkJLyogMi4wID4gfHh8ID49IFRJTlksIG9yIG1pc25vcm1hbCAqLworCSAgICB0ID0geCp4OworCSAgICB3ID1sb2cxcGwoZmFic2woeCkrdC8ob25lK3NxcnRsKG9uZSt0KSkpOworCX0KKwlSRVRVUk5JKChoeCAmIDB4ODAwMCkgPT0gMCA/IHcgOiAtdyk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZXJmZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2VyZmYuYwppbmRleCBhNDRlMTM1Li5hMzU3OWYxIDEwMDY0NAotLS0gYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZXJmZi5jCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19lcmZmLmMKQEAgLTI0LDc1ICsyNCw1OSBAQAogaGFsZj0gIDUuMDAwMDAwMDAwMGUtMDEsIC8qIDB4M0YwMDAwMDAgKi8KIG9uZSA9ICAxLjAwMDAwMDAwMDBlKzAwLCAvKiAweDNGODAwMDAwICovCiB0d28gPSAgMi4wMDAwMDAwMDAwZSswMCwgLyogMHg0MDAwMDAwMCAqLwotCS8qIGMgPSAoc3ViZmxvYXQpMC44NDUwNjI5MTE1MSAqLwotZXJ4ID0gIDguNDUwNjI5MTE1MWUtMDEsIC8qIDB4M2Y1ODU2MGIgKi8KIC8qCiAgKiBDb2VmZmljaWVudHMgZm9yIGFwcHJveGltYXRpb24gdG8gIGVyZiBvbiBbMCwwLjg0Mzc1XQogICovCiBlZnggPSAgMS4yODM3OTE2NjEzZS0wMSwgLyogMHgzZTAzNzVkNCAqLwogZWZ4OD0gIDEuMDI3MDMzMzI5MGUrMDAsIC8qIDB4M2Y4Mzc1ZDQgKi8KLXBwMCAgPSAgMS4yODM3OTE2NjEzZS0wMSwgLyogMHgzZTAzNzVkNCAqLwotcHAxICA9IC0zLjI1MDQyMDk4NzZlLTAxLCAvKiAweGJlYTY2YmViICovCi1wcDIgID0gLTIuODQ4MTc0OTgxOGUtMDIsIC8qIDB4YmNlOTUyOGYgKi8KLXBwMyAgPSAtNS43NzAyNzAyNDcwZS0wMywgLyogMHhiYmJkMTQ4OSAqLwotcHA0ICA9IC0yLjM3NjMwMTc0NTJlLTA1LCAvKiAweGI3Yzc1NmIxICovCi1xcTEgID0gIDMuOTc5MTcyMTEwNmUtMDEsIC8qIDB4M2VjYmJiY2UgKi8KLXFxMiAgPSAgNi41MDIyMjUyNTAwZS0wMiwgLyogMHgzZDg1MmE2MyAqLwotcXEzICA9ICA1LjA4MTMwNjIxMTdlLTAzLCAvKiAweDNiYTY4MTE2ICovCi1xcTQgID0gIDEuMzI0OTQ3MzcwNGUtMDQsIC8qIDB4MzkwYWVlNDkgKi8KLXFxNSAgPSAtMy45NjAyMjgyNDEzZS0wNiwgLyogMHhiNjg0ZTIxYSAqLwogLyoKLSAqIENvZWZmaWNpZW50cyBmb3IgYXBwcm94aW1hdGlvbiB0byAgZXJmICBpbiBbMC44NDM3NSwxLjI1XQorICogIERvbWFpbiBbMCwgMC44NDM3NV0sIHJhbmdlIH5bLTUuNDQ0NmUtMTAsNS41MTk3ZS0xMF06CisgKiAgfChlcmYoeCkgLSB4KS94IC0gcCh4KS9xKHgpfCA8IDIqKi0zMS4KICAqLwotcGEwICA9IC0yLjM2MjExODU2ODNlLTAzLCAvKiAweGJiMWFjZGM2ICovCi1wYTEgID0gIDQuMTQ4NTYxMDYwNGUtMDEsIC8qIDB4M2VkNDY4MDUgKi8KLXBhMiAgPSAtMy43MjIwNzg4MDAyZS0wMSwgLyogMHhiZWJlOTIwOCAqLwotcGEzICA9ICAzLjE4MzQ2NjE5NjFlLTAxLCAvKiAweDNlYTJmZTU0ICovCi1wYTQgID0gLTEuMTA4OTQ2OTQ5MmUtMDEsIC8qIDB4YmRlMzFjYzIgKi8KLXBhNSAgPSAgMy41NDc4MzA1MDcyZS0wMiwgLyogMHgzZDExNTFiMyAqLwotcGE2ICA9IC0yLjE2NjM3NTUxNzhlLTAzLCAvKiAweGJiMGRmOWMwICovCi1xYTEgID0gIDEuMDY0MjA4ODIwNWUtMDEsIC8qIDB4M2RkOWYzMzEgKi8KLXFhMiAgPSAgNS40MDM5Nzk0MjA3ZS0wMSwgLyogMHgzZjBhNTc4NSAqLwotcWEzICA9ICA3LjE4Mjg2NTU4OTllLTAyLCAvKiAweDNkOTMxYWU3ICovCi1xYTQgID0gIDEuMjYxNzEyMTYzN2UtMDEsIC8qIDB4M2UwMTMzMDcgKi8KLXFhNSAgPSAgMS4zNjM3MDgzNTgzZS0wMiwgLyogMHgzYzVmNmUxMyAqLwotcWE2ICA9ICAxLjE5ODQ1MDAxMDNlLTAyLCAvKiAweDNjNDQ1YWEzICovCitwcDAgID0gIDEuMjgzNzkxNjZlLTAxRiwgLyogIDB4MS4wNmViYThwLTMgKi8KK3BwMSAgPSAtMy4zNjAzMDM5NGUtMDFGLCAvKiAtMHgxLjU4MTg1YXAtMiAqLworcHAyICA9IC0xLjg2MjYwMjE5ZS0wM0YsIC8qIC0weDEuZTg0NTFlcC0xMCAqLworcXExICA9ICAzLjEyMzI0Mjg2ZS0wMUYsIC8qICAweDEuM2ZkMWYwcC0yICovCitxcTIgID0gIDIuMTYwNzAzMDJlLTAyRiwgLyogIDB4MS42MjAyNzRwLTYgKi8KK3FxMyAgPSAtMS45ODg1OTQxOWUtMDNGLCAvKiAtMHgxLjA0YTYyNnAtOSAqLwogLyoKLSAqIENvZWZmaWNpZW50cyBmb3IgYXBwcm94aW1hdGlvbiB0byAgZXJmYyBpbiBbMS4yNSwxLzAuMzVdCisgKiBEb21haW4gWzAuODQzNzUsIDEuMjVdLCByYW5nZSB+Wy0xLjk1M2UtMTEsMS45NDBlLTExXToKKyAqIHwoZXJmKHgpIC0gZXJ4KSAtIHAoeCkvcSh4KXwgPCAyKiotMzYuCiAgKi8KLXJhMCAgPSAtOS44NjQ5NDQwMzMzZS0wMywgLyogMHhiYzIxYTA5MyAqLwotcmExICA9IC02LjkzODU4NTYzOTBlLTAxLCAvKiAweGJmMzFhMGI3ICovCi1yYTIgID0gLTEuMDU1ODYyNjE3NWUrMDEsIC8qIDB4YzEyOGYwMjIgKi8KLXJhMyAgPSAtNi4yMzc1MzMxODc5ZSswMSwgLyogMHhjMjc5ODA1NyAqLwotcmE0ICA9IC0xLjYyMzk2NjY3NDhlKzAyLCAvKiAweGMzMjI2NThjICovCi1yYTUgID0gLTEuODQ2MDUwODcyOGUrMDIsIC8qIDB4YzMzODlhZTcgKi8KLXJhNiAgPSAtOC4xMjg3NDM3NDM5ZSswMSwgLyogMHhjMmEyOTMyYiAqLwotcmE3ICA9IC05LjgxNDMyOTE0NzNlKzAwLCAvKiAweGMxMWQwNzdlICovCi1zYTEgID0gIDEuOTY1MTI3MTgyMGUrMDEsIC8qIDB4NDE5ZDM1Y2UgKi8KLXNhMiAgPSAgMS4zNzY1Nzc2MDYyZSswMiwgLyogMHg0MzA5YTg2MyAqLwotc2EzICA9ICA0LjM0NTY1ODg3NDVlKzAyLCAvKiAweDQzZDk0ODZmICovCi1zYTQgID0gIDYuNDUzODcyNjgwN2UrMDIsIC8qIDB4NDQyMTU4YzkgKi8KLXNhNSAgPSAgNC4yOTAwODE0ODE5ZSswMiwgLyogMHg0M2Q2ODEwYiAqLwotc2E2ICA9ICAxLjA4NjM1MDAyMTRlKzAyLCAvKiAweDQyZDk0NTFmICovCi1zYTcgID0gIDYuNTcwMjQ5NTU3NWUrMDAsIC8qIDB4NDBkMjNmN2MgKi8KLXNhOCAgPSAtNi4wNDI0NDEzNTMyZS0wMiwgLyogMHhiZDc3N2Y5NyAqLworZXJ4ICA9ICA4LjQyNjk3MTQ0ZS0wMUYsIC8qICAweDEuYWY3NjAwcC0xLiAgZXJmKDEpIHJvdW5kZWQgdG8gMTYgYml0cy4gKi8KK3BhMCAgPSAgMy42NDkzOTEzN2UtMDZGLCAvKiAgMHgxLmU5ZDAyMnAtMTkgKi8KK3BhMSAgPSAgNC4xNTEwOTY5NGUtMDFGLCAvKiAgMHgxLmE5MTI4NHAtMiAqLworcGEyICA9IC0xLjY1MTc5OTM4ZS0wMUYsIC8qIC0weDEuNTI0OWRjcC0zICovCitwYTMgID0gIDEuMTA5MTQ0OTFlLTAxRiwgLyogIDB4MS5jNjRlNDZwLTQgKi8KK3FhMSAgPSAgNi4wMjA3NDM4NWUtMDFGLCAvKiAgMHgxLjM0NDMxOHAtMSAqLworcWEyICA9ICA1LjM1OTM0Njg3ZS0wMUYsIC8qICAweDEuMTI2NjA4cC0xICovCitxYTMgID0gIDEuNjg1NzYxMDZlLTAxRiwgLyogIDB4MS41OTNlNmVwLTMgKi8KK3FhNCAgPSAgNS42MjE4MTIxMmUtMDJGLCAvKiAgMHgxLmNjODlmMnAtNSAqLwogLyoKLSAqIENvZWZmaWNpZW50cyBmb3IgYXBwcm94aW1hdGlvbiB0byAgZXJmYyBpbiBbMS8uMzUsMjhdCisgKiBEb21haW4gWzEuMjUsMS8wLjM1XSwgcmFuZ2UgflstNy4wNDNlLTEwLDcuNDU3ZS0xMF06CisgKiB8bG9nKHgqZXJmYyh4KSkgKyB4KioyICsgMC41NjI1IC0gcih4KS9zKHgpfCA8IDIqKi0zMAogICovCi1yYjAgID0gLTkuODY0OTQzMTAyMGUtMDMsIC8qIDB4YmMyMWEwOTIgKi8KLXJiMSAgPSAtNy45OTI4MzI2NjA3ZS0wMSwgLyogMHhiZjRjOWRkNCAqLwotcmIyICA9IC0xLjc3NTc5NTU1NTFlKzAxLCAvKiAweGMxOGUxMDRiICovCi1yYjMgID0gLTEuNjA2MzYzODMwNmUrMDIsIC8qIDB4YzMyMGEyZWEgKi8KLXJiNCAgPSAtNi4zNzU2NjQ2NzI5ZSswMiwgLyogMHhjNDFmNjQ0MSAqLwotcmI1ICA9IC0xLjAyNTA5NTA5MjhlKzAzLCAvKiAweGM0ODAyMzBiICovCi1yYjYgID0gLTQuODM1MTkxOTU1NmUrMDIsIC8qIDB4YzNmMWMyNzUgKi8KLXNiMSAgPSAgMy4wMzM4MDYwMzc5ZSswMSwgLyogMHg0MWYyYjQ1OSAqLwotc2IyICA9ICAzLjI1NzkyNTEwOTllKzAyLCAvKiAweDQzYTJlNTcxICovCi1zYjMgID0gIDEuNTM2NzI5NjE0M2UrMDMsIC8qIDB4NDRjMDE3NTkgKi8KLXNiNCAgPSAgMy4xOTk4NTgxNTQzZSswMywgLyogMHg0NTQ3ZmRiYiAqLwotc2I1ICA9ICAyLjU1MzA1MDI5MzBlKzAzLCAvKiAweDQ1MWY5MGNlICovCi1zYjYgID0gIDQuNzQ1Mjg1MzM5NGUrMDIsIC8qIDB4NDNlZDQzYTcgKi8KLXNiNyAgPSAtMi4yNDQwOTUyMzAxZSswMTsgLyogMHhjMWIzODcxMiAqLworcmEwICA9IC05Ljg3MTMyNzMyZS0wM0YsIC8qIC0weDEuNDM3NmIycC03ICovCityYTEgID0gLTUuNTM2MDU5MTRlLTAxRiwgLyogLTB4MS4xYjcyM2NwLTEgKi8KK3JhMiAgPSAtMi4xNzU4OTE4OGUrMDBGLCAvKiAtMHgxLjE2ODNhMHArMSAqLworcmEzICA9IC0xLjQzMjY4MDg1ZSswMEYsIC8qIC0weDEuNmVjNDJjcCswICovCitzYTEgID0gIDUuNDU5OTU0MjZlKzAwRiwgLyogIDB4MS41ZDZmZTRwKzIgKi8KK3NhMiAgPSAgNi42OTc5ODA4OGUrMDBGLCAvKiAgMHgxLmFjYWJiOHArMiAqLworc2EzICA9ICAxLjQzMTEzMDg5ZSswMEYsIC8qICAweDEuNmU1ZTk4cCswICovCitzYTQgID0gLTUuNzczOTc0OTZlLTAyRiwgLyogLTB4MS5kOTAxMDhwLTUgKi8KKy8qCisgKiBEb21haW4gWzEvMC4zNSwgMTFdLCByYW5nZSB+Wy0yLjI2NGUtMTMsMi4zMzZlLTEzXToKKyAqIHxsb2coeCplcmZjKHgpKSArIHgqKjIgKyAwLjU2MjUgLSByKHgpL3MoeCl8IDwgMioqLTQyCisgKi8KK3JiMCAgPSAtOS44NjQ5NDMxMGUtMDNGLCAvKiAtMHgxLjQzNDEyNHAtNyAqLworcmIxICA9IC02LjI1MTcxMjQ0ZS0wMUYsIC8qIC0weDEuNDAxNjcycC0xICovCityYjIgID0gLTYuMTY0OTgzMjdlKzAwRiwgLyogLTB4MS44YThmMTZwKzIgKi8KK3JiMyAgPSAtMS42NjY5Njg3M2UrMDFGLCAvKiAtMHgxLjBhYjcwYXArNCAqLworcmI0ICA9IC05LjUzNzY0MzQzZSswMEYsIC8qIC0weDEuMzEzNDYwcCszICovCitzYjEgID0gIDEuMjY4ODQ4OTllKzAxRiwgLyogIDB4MS45NjA4MWNwKzMgKi8KK3NiMiAgPSAgNC41MTgzOTUyM2UrMDFGLCAvKiAgMHgxLjY5NzhiY3ArNSAqLworc2IzICA9ICA0LjcyODEwMjExZSswMUYsIC8qICAweDEuN2EzZjg4cCs1ICovCitzYjQgID0gIDguOTMwMzMzMTRlKzAwRjsgLyogIDB4MS4xZGM1NGFwKzMgKi8KIAogZmxvYXQKIGVyZmYoZmxvYXQgeCkKQEAgLTEwNyw0MyArOTEsMzcgQEAKIAl9CiAKIAlpZihpeCA8IDB4M2Y1ODAwMDApIHsJCS8qIHx4fDwwLjg0Mzc1ICovCi0JICAgIGlmKGl4IDwgMHgzMTgwMDAwMCkgeyAJLyogfHh8PDIqKi0yOCAqLwotCSAgICAgICAgaWYgKGl4IDwgMHgwNDAwMDAwMCkKLQkJICAgIC8qYXZvaWQgdW5kZXJmbG93ICovCi0JCSAgICByZXR1cm4gKGZsb2F0KTAuMTI1KigoZmxvYXQpOC4wKngrZWZ4OCp4KTsKKwkgICAgaWYoaXggPCAweDM4ODAwMDAwKSB7IAkvKiB8eHw8MioqLTE0ICovCisJICAgICAgICBpZiAoaXggPCAweDA0MDAwMDAwKQkvKiB8eHw8MHgxcC0xMTkgKi8KKwkJICAgIHJldHVybiAoOCp4K2VmeDgqeCkvODsJLyogYXZvaWQgc3B1cmlvdXMgdW5kZXJmbG93ICovCiAJCXJldHVybiB4ICsgZWZ4Kng7CiAJICAgIH0KIAkgICAgeiA9IHgqeDsKLQkgICAgciA9IHBwMCt6KihwcDEreioocHAyK3oqKHBwMyt6KnBwNCkpKTsKLQkgICAgcyA9IG9uZSt6KihxcTEreioocXEyK3oqKHFxMyt6KihxcTQreipxcTUpKSkpOworCSAgICByID0gcHAwK3oqKHBwMSt6KnBwMik7CisJICAgIHMgPSBvbmUreioocXExK3oqKHFxMit6KnFxMykpOwogCSAgICB5ID0gci9zOwogCSAgICByZXR1cm4geCArIHgqeTsKIAl9CiAJaWYoaXggPCAweDNmYTAwMDAwKSB7CQkvKiAwLjg0Mzc1IDw9IHx4fCA8IDEuMjUgKi8KIAkgICAgcyA9IGZhYnNmKHgpLW9uZTsKLQkgICAgUCA9IHBhMCtzKihwYTErcyoocGEyK3MqKHBhMytzKihwYTQrcyoocGE1K3MqcGE2KSkpKSk7Ci0JICAgIFEgPSBvbmUrcyoocWExK3MqKHFhMitzKihxYTMrcyoocWE0K3MqKHFhNStzKnFhNikpKSkpOworCSAgICBQID0gcGEwK3MqKHBhMStzKihwYTIrcypwYTMpKTsKKwkgICAgUSA9IG9uZStzKihxYTErcyoocWEyK3MqKHFhMytzKnFhNCkpKTsKIAkgICAgaWYoaHg+PTApIHJldHVybiBlcnggKyBQL1E7IGVsc2UgcmV0dXJuIC1lcnggLSBQL1E7CiAJfQotCWlmIChpeCA+PSAweDQwYzAwMDAwKSB7CQkvKiBpbmY+fHh8Pj02ICovCisJaWYgKGl4ID49IDB4NDA4MDAwMDApIHsJCS8qIGluZj58eHw+PTQgKi8KIAkgICAgaWYoaHg+PTApIHJldHVybiBvbmUtdGlueTsgZWxzZSByZXR1cm4gdGlueS1vbmU7CiAJfQogCXggPSBmYWJzZih4KTsKICAJcyA9IG9uZS8oeCp4KTsKIAlpZihpeDwgMHg0MDM2REI2RSkgewkvKiB8eHwgPCAxLzAuMzUgKi8KLQkgICAgUj1yYTArcyoocmExK3MqKHJhMitzKihyYTMrcyoocmE0K3MqKAotCQkJCXJhNStzKihyYTYrcypyYTcpKSkpKSk7Ci0JICAgIFM9b25lK3MqKHNhMStzKihzYTIrcyooc2EzK3MqKHNhNCtzKigKLQkJCQlzYTUrcyooc2E2K3MqKHNhNytzKnNhOCkpKSkpKSk7CisJICAgIFI9cmEwK3MqKHJhMStzKihyYTIrcypyYTMpKTsKKwkgICAgUz1vbmUrcyooc2ExK3MqKHNhMitzKihzYTMrcypzYTQpKSk7CiAJfSBlbHNlIHsJLyogfHh8ID49IDEvMC4zNSAqLwotCSAgICBSPXJiMCtzKihyYjErcyoocmIyK3MqKHJiMytzKihyYjQrcyooCi0JCQkJcmI1K3MqcmI2KSkpKSk7Ci0JICAgIFM9b25lK3MqKHNiMStzKihzYjIrcyooc2IzK3MqKHNiNCtzKigKLQkJCQlzYjUrcyooc2I2K3Mqc2I3KSkpKSkpOworCSAgICBSPXJiMCtzKihyYjErcyoocmIyK3MqKHJiMytzKnJiNCkpKTsKKwkgICAgUz1vbmUrcyooc2IxK3MqKHNiMitzKihzYjMrcypzYjQpKSk7CiAJfQotCUdFVF9GTE9BVF9XT1JEKGl4LHgpOwotCVNFVF9GTE9BVF9XT1JEKHosaXgmMHhmZmZmZjAwMCk7Ci0JciAgPSAgX19pZWVlNzU0X2V4cGYoLXoqei0oZmxvYXQpMC41NjI1KSpfX2llZWU3NTRfZXhwZigoei14KSooeit4KStSL1MpOworCVNFVF9GTE9BVF9XT1JEKHosaHgmMHhmZmZmZTAwMCk7CisJciAgPSBleHBmKC16KnotMC41NjI1RikqZXhwZigoei14KSooeit4KStSL1MpOwogCWlmKGh4Pj0wKSByZXR1cm4gb25lLXIveDsgZWxzZSByZXR1cm4gIHIveC1vbmU7CiB9CiAKQEAgLTE2MCwxMSArMTM4LDExIEBACiAJfQogCiAJaWYoaXggPCAweDNmNTgwMDAwKSB7CQkvKiB8eHw8MC44NDM3NSAqLwotCSAgICBpZihpeCA8IDB4MjM4MDAwMDApICAJLyogfHh8PDIqKi01NiAqLworCSAgICBpZihpeCA8IDB4MzM4MDAwMDApICAJLyogfHh8PDIqKi0yNCAqLwogCQlyZXR1cm4gb25lLXg7CiAJICAgIHogPSB4Kng7Ci0JICAgIHIgPSBwcDAreioocHAxK3oqKHBwMit6KihwcDMreipwcDQpKSk7Ci0JICAgIHMgPSBvbmUreioocXExK3oqKHFxMit6KihxcTMreioocXE0K3oqcXE1KSkpKTsKKwkgICAgciA9IHBwMCt6KihwcDEreipwcDIpOworCSAgICBzID0gb25lK3oqKHFxMSt6KihxcTIreipxcTMpKTsKIAkgICAgeSA9IHIvczsKIAkgICAgaWYoaHggPCAweDNlODAwMDAwKSB7ICAJLyogeDwxLzQgKi8KIAkJcmV0dXJuIG9uZS0oeCt4KnkpOwpAQCAtMTc2LDMzICsxNTQsMjcgQEAKIAl9CiAJaWYoaXggPCAweDNmYTAwMDAwKSB7CQkvKiAwLjg0Mzc1IDw9IHx4fCA8IDEuMjUgKi8KIAkgICAgcyA9IGZhYnNmKHgpLW9uZTsKLQkgICAgUCA9IHBhMCtzKihwYTErcyoocGEyK3MqKHBhMytzKihwYTQrcyoocGE1K3MqcGE2KSkpKSk7Ci0JICAgIFEgPSBvbmUrcyoocWExK3MqKHFhMitzKihxYTMrcyoocWE0K3MqKHFhNStzKnFhNikpKSkpOworCSAgICBQID0gcGEwK3MqKHBhMStzKihwYTIrcypwYTMpKTsKKwkgICAgUSA9IG9uZStzKihxYTErcyoocWEyK3MqKHFhMytzKnFhNCkpKTsKIAkgICAgaWYoaHg+PTApIHsKIAkgICAgICAgIHogID0gb25lLWVyeDsgcmV0dXJuIHogLSBQL1E7CiAJICAgIH0gZWxzZSB7CiAJCXogPSBlcngrUC9ROyByZXR1cm4gb25lK3o7CiAJICAgIH0KIAl9Ci0JaWYgKGl4IDwgMHg0MWUwMDAwMCkgewkJLyogfHh8PDI4ICovCisJaWYgKGl4IDwgMHg0MTMwMDAwMCkgewkJLyogfHh8PDExICovCiAJICAgIHggPSBmYWJzZih4KTsKICAJICAgIHMgPSBvbmUvKHgqeCk7CiAJICAgIGlmKGl4PCAweDQwMzZEQjZEKSB7CS8qIHx4fCA8IDEvLjM1IH4gMi44NTcxNDMqLwotCSAgICAgICAgUj1yYTArcyoocmExK3MqKHJhMitzKihyYTMrcyoocmE0K3MqKAotCQkJCXJhNStzKihyYTYrcypyYTcpKSkpKSk7Ci0JICAgICAgICBTPW9uZStzKihzYTErcyooc2EyK3MqKHNhMytzKihzYTQrcyooCi0JCQkJc2E1K3MqKHNhNitzKihzYTcrcypzYTgpKSkpKSkpOworCSAgICAgICAgUj1yYTArcyoocmExK3MqKHJhMitzKnJhMykpOworCSAgICAgICAgUz1vbmUrcyooc2ExK3MqKHNhMitzKihzYTMrcypzYTQpKSk7CiAJICAgIH0gZWxzZSB7CQkJLyogfHh8ID49IDEvLjM1IH4gMi44NTcxNDMgKi8KLQkJaWYoaHg8MCYmaXg+PTB4NDBjMDAwMDApIHJldHVybiB0d28tdGlueTsvKiB4IDwgLTYgKi8KLQkgICAgICAgIFI9cmIwK3MqKHJiMStzKihyYjIrcyoocmIzK3MqKHJiNCtzKigKLQkJCQlyYjUrcypyYjYpKSkpKTsKLQkgICAgICAgIFM9b25lK3MqKHNiMStzKihzYjIrcyooc2IzK3MqKHNiNCtzKigKLQkJCQlzYjUrcyooc2I2K3Mqc2I3KSkpKSkpOworCQlpZihoeDwwJiZpeD49MHg0MGEwMDAwMCkgcmV0dXJuIHR3by10aW55Oy8qIHggPCAtNSAqLworCSAgICAgICAgUj1yYjArcyoocmIxK3MqKHJiMitzKihyYjMrcypyYjQpKSk7CisJCVM9b25lK3MqKHNiMStzKihzYjIrcyooc2IzK3Mqc2I0KSkpOwogCSAgICB9Ci0JICAgIEdFVF9GTE9BVF9XT1JEKGl4LHgpOwotCSAgICBTRVRfRkxPQVRfV09SRCh6LGl4JjB4ZmZmZmYwMDApOwotCSAgICByICA9ICBfX2llZWU3NTRfZXhwZigteip6LShmbG9hdCkwLjU2MjUpKgotCQkJX19pZWVlNzU0X2V4cGYoKHoteCkqKHoreCkrUi9TKTsKKwkgICAgU0VUX0ZMT0FUX1dPUkQoeixoeCYweGZmZmZlMDAwKTsKKwkgICAgciAgPSBleHBmKC16KnotMC41NjI1RikqZXhwZigoei14KSooeit4KStSL1MpOwogCSAgICBpZihoeD4wKSByZXR1cm4gci94OyBlbHNlIHJldHVybiB0d28tci94OwogCX0gZWxzZSB7CiAJICAgIGlmKGh4PjApIHJldHVybiB0aW55KnRpbnk7IGVsc2UgcmV0dXJuIHR3by10aW55OwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtYS5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtYS5jCmluZGV4IDQ1MmJlY2UuLmIxMDY2YzIgMTAwNjQ0Ci0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWEuYworKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1hLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCWlmIChzdW0ubG8gIT0gMCkgewogCQlFWFRSQUNUX1dPUkQ2NChoaWJpdHMsIHN1bS5oaSk7CiAJCWJpdHNfbG9zdCA9IC0oKGludCkoaGliaXRzID4+IDUyKSAmIDB4N2ZmKSAtIHNjYWxlICsgMTsKLQkJaWYgKGJpdHNfbG9zdCAhPSAxIF4gKGludCkoaGliaXRzICYgMSkpIHsKKwkJaWYgKChiaXRzX2xvc3QgIT0gMSkgXiAoaW50KShoaWJpdHMgJiAxKSkgewogCQkJLyogaGliaXRzICs9IChpbnQpY29weXNpZ24oMS4wLCBzdW0uaGkgKiBzdW0ubG8pICovCiAJCQlFWFRSQUNUX1dPUkQ2NChsb2JpdHMsIHN1bS5sbyk7CiAJCQloaWJpdHMgKz0gMSAtICgoKGhpYml0cyBeIGxvYml0cykgPj4gNjIpICYgMik7CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1hbC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtYWwuYwppbmRleCA5MjcxOTAxLi5kNDM1ZjRmIDEwMDY0NAotLS0gYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1hbC5jCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWFsLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCWlmIChzdW0ubG8gIT0gMCkgewogCQl1LmUgPSBzdW0uaGk7CiAJCWJpdHNfbG9zdCA9IC11LmJpdHMuZXhwIC0gc2NhbGUgKyAxOwotCQlpZiAoYml0c19sb3N0ICE9IDEgXiAoaW50KSh1LmJpdHMubWFubCAmIDEpKQorCQlpZiAoKGJpdHNfbG9zdCAhPSAxKSBeIChpbnQpKHUuYml0cy5tYW5sICYgMSkpCiAJCQlzdW0uaGkgPSBuZXh0YWZ0ZXJsKHN1bS5oaSwgSU5GSU5JVFkgKiBzdW0ubG8pOwogCX0KIAlyZXR1cm4gKGxkZXhwKHN1bS5oaSwgc2NhbGUpKTsKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pc2Zpbml0ZS5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lzZmluaXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZDFiZDcuLjAwMDAwMDAKLS0tIGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lzZmluaXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEJAotICovCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlICJmcG1hdGguaCIKLQotaW50Ci1fX2lzZmluaXRlKGRvdWJsZSBkKQotewotCXVuaW9uIElFRUVkMmJpdHMgdTsKLQotCXUuZCA9IGQ7Ci0JcmV0dXJuICh1LmJpdHMuZXhwICE9IDIwNDcpOwotfQotCi1pbnQKLV9faXNmaW5pdGVmKGZsb2F0IGYpCi17Ci0JdW5pb24gSUVFRWYyYml0cyB1OwotCi0JdS5mID0gZjsKLQlyZXR1cm4gKHUuYml0cy5leHAgIT0gMjU1KTsKLX0KLQotaW50Ci1fX2lzZmluaXRlbChsb25nIGRvdWJsZSBlKQotewotCXVuaW9uIElFRUVsMmJpdHMgdTsKLQotCXUuZSA9IGU7Ci0JcmV0dXJuICh1LmJpdHMuZXhwICE9IDMyNzY3KTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pc25hbi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lzbmFuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NGRlZDMuLjAwMDAwMDAKLS0tIGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lzbmFuLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEJAotICovCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlICJmcG1hdGguaCIKLQotLyogUHJvdmlkZWQgYnkgbGliYy5zbyAqLwotI2lmbmRlZiBQSUMKLSN1bmRlZiBpc25hbgotaW50Ci1pc25hbihkb3VibGUgZCkKLXsKLQl1bmlvbiBJRUVFZDJiaXRzIHU7Ci0KLQl1LmQgPSBkOwotCXJldHVybiAodS5iaXRzLmV4cCA9PSAyMDQ3ICYmICh1LmJpdHMubWFubCAhPSAwIHx8IHUuYml0cy5tYW5oICE9IDApKTsKLX0KLSNlbmRpZiAvKiAhUElDICovCi0KLWludAotX19pc25hbmYoZmxvYXQgZikKLXsKLQl1bmlvbiBJRUVFZjJiaXRzIHU7Ci0KLQl1LmYgPSBmOwotCXJldHVybiAodS5iaXRzLmV4cCA9PSAyNTUgJiYgdS5iaXRzLm1hbiAhPSAwKTsKLX0KLQotaW50Ci1fX2lzbmFubChsb25nIGRvdWJsZSBlKQotewotCXVuaW9uIElFRUVsMmJpdHMgdTsKLQotCXUuZSA9IGU7Ci0JbWFza19uYml0X2wodSk7Ci0JcmV0dXJuICh1LmJpdHMuZXhwID09IDMyNzY3ICYmICh1LmJpdHMubWFubCAhPSAwIHx8IHUuYml0cy5tYW5oICE9IDApKTsKLX0KLQotX193ZWFrX3JlZmVyZW5jZShfX2lzbmFuZiwgaXNuYW5mKTsKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pc25vcm1hbC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lzbm9ybWFsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZjJhNzQuLjAwMDAwMDAKLS0tIGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lzbm9ybWFsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEJAotICovCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlICJmcG1hdGguaCIKLQotaW50Ci1fX2lzbm9ybWFsKGRvdWJsZSBkKQotewotCXVuaW9uIElFRUVkMmJpdHMgdTsKLQotCXUuZCA9IGQ7Ci0JcmV0dXJuICh1LmJpdHMuZXhwICE9IDAgJiYgdS5iaXRzLmV4cCAhPSAyMDQ3KTsKLX0KLQotaW50Ci1fX2lzbm9ybWFsZihmbG9hdCBmKQotewotCXVuaW9uIElFRUVmMmJpdHMgdTsKLQotCXUuZiA9IGY7Ci0JcmV0dXJuICh1LmJpdHMuZXhwICE9IDAgJiYgdS5iaXRzLmV4cCAhPSAyNTUpOwotfQotCi1pbnQKLV9faXNub3JtYWxsKGxvbmcgZG91YmxlIGUpCi17Ci0JdW5pb24gSUVFRWwyYml0cyB1OwotCi0JdS5lID0gZTsKLQlyZXR1cm4gKHUuYml0cy5leHAgIT0gMCAmJiB1LmJpdHMuZXhwICE9IDMyNzY3KTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yZW1xdW9sLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmVtcXVvbC5jCmluZGV4IDcxMjY1MWMuLjg4OTkyOTMgMTAwNjQ0Ci0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yZW1xdW9sLmMKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JlbXF1b2wuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQogICogaXMgcHJlc2VydmVkLgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICovCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmludGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yaW50bC5jCmluZGV4IGI0M2RmODkuLmU1NWI0MGUgMTAwNjQ0Ci0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yaW50bC5jCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yaW50bC5jCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlIDxmbG9hdC5oPgogI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KIAogI2luY2x1ZGUgImZwbWF0aC5oIgogCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2lnbmJpdC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpZ25iaXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFlYjNhYi4uMDAwMDAwMAotLS0gYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2lnbmJpdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMgTWlrZSBCYXJjcm9mdCA8bWlrZUBGcmVlQlNELm9yZz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0QkCi0gKi8KLQotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgImZwbWF0aC5oIgotCi1pbnQKLV9fc2lnbmJpdChkb3VibGUgZCkKLXsKLQl1bmlvbiBJRUVFZDJiaXRzIHU7Ci0KLQl1LmQgPSBkOwotCXJldHVybiAodS5iaXRzLnNpZ24pOwotfQotCi1pbnQKLV9fc2lnbmJpdGYoZmxvYXQgZikKLXsKLQl1bmlvbiBJRUVFZjJiaXRzIHU7Ci0KLQl1LmYgPSBmOwotCXJldHVybiAodS5iaXRzLnNpZ24pOwotfQotCi1pbnQKLV9fc2lnbmJpdGwobG9uZyBkb3VibGUgZSkKLXsKLQl1bmlvbiBJRUVFbDJiaXRzIHU7Ci0KLQl1LmUgPSBlOwotCXJldHVybiAodS5iaXRzLnNpZ24pOwotfQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrL0FuZHJvaWQubWsgYi9saWJzdGRjKysvQW5kcm9pZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFlNmM0ZC4uMDAwMDAwMAotLS0gYS9saWJzdGRjKysvQW5kcm9pZC5taworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLUxPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQotCi0jIENvbW1vbiBDKysgZmxhZ3MgdG8gYnVpbGQgdGhpcyBsaWJyYXJ5LgotIyBOb3RlIHRoYXQgd2UgbmVlZCB0byBhY2Nlc3MgcHJpdmF0ZSBCaW9uaWMgaGVhZGVycwotIyBhbmQgZGVmaW5lIEFORFJPSURfU01QIGFjY29yZGluZ2x5LgotbGlic3RkYysrX2NmbGFncyA6PSAtSWJpb25pYy9saWJjLwotaWZlcSAoJChUQVJHRVRfQ1BVX1NNUCksdHJ1ZSkKLSAgICBsaWJzdGRjKytfY2ZsYWdzICs9IC1EQU5EUk9JRF9TTVA9MQotZWxzZQotICAgIGxpYnN0ZGMrK19jZmxhZ3MgKz0gLURBTkRST0lEX1NNUD0wCi1lbmRpZgotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfU1JDX0ZJTEVTOj0gXAotCXNyYy9vbmVfdGltZV9jb25zdHJ1Y3Rpb24uY3BwIFwKLQlzcmMvbmV3LmNwcCBcCi0Jc3JjL3B1cmVfdmlydHVhbC5jcHAgXAotCXNyYy90eXBlaW5mby5jcHAKLQotTE9DQUxfTU9EVUxFOj0gbGlic3RkYysrCi1MT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKLQotTE9DQUxfQ0ZMQUdTIDo9ICQobGlic3RkYysrX2NmbGFncykKLQotTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliYwotCi1pbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9TUkNfRklMRVM6PSBcCi0Jc3JjL29uZV90aW1lX2NvbnN0cnVjdGlvbi5jcHAgXAotCXNyYy9uZXcuY3BwIFwKLQlzcmMvcHVyZV92aXJ0dWFsLmNwcCBcCi0Jc3JjL3R5cGVpbmZvLmNwcAotCi1MT0NBTF9DRkxBR1MgOj0gJChsaWJzdGRjKytfY2ZsYWdzKQotCi1MT0NBTF9NT0RVTEU6PSBsaWJzdGRjKysKLUxPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawotCi1MT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJjCi0KLWluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy9OT1RJQ0UgYi9saWJzdGRjKysvTk9USUNFCmluZGV4IDZjMjYzZDEuLjQ5Mjc3MGQgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy9OT1RJQ0UKKysrIGIvbGlic3RkYysrL05PVElDRQpAQCAtNCw5ICs0LDkgQEAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiBhcmUgbWV0OgotUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi1SZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgZGlzdHJpYnV0aW9uLgpAQCAtMzIsOSArMzIsOSBAQAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKIGFyZSBtZXQ6Ci1SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLVJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAgICBkaXN0cmlidXRpb24uCkBAIC03OSw3ICs3OSwzIEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy9pbmNsdWRlL2NzdGRpbyBiL2xpYnN0ZGMrKy9pbmNsdWRlL2NzdGRpbwppbmRleCAzYzhiNWM2Li4yOTQ4ZDg1IDEwMDY0NAotLS0gYS9saWJzdGRjKysvaW5jbHVkZS9jc3RkaW8KKysrIGIvbGlic3RkYysrL2luY2x1ZGUvY3N0ZGlvCkBAIC02Myw3ICs2Myw5IEBACiB1c2luZyA6OmZ3cml0ZTsKIHVzaW5nIDo6Z2V0YzsKIHVzaW5nIDo6Z2V0Y2hhcjsKKyNpZiAhZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSB8fCBfX1NURENfVkVSU0lPTl9fIDwgMjAxMTEyTAogdXNpbmcgOjpnZXRzOworI2VuZGlmCiB1c2luZyA6OnBlcnJvcjsKIHVzaW5nIDo6cHJpbnRmOwogdXNpbmcgOjpwdXRjOwpkaWZmIC0tZ2l0IGEvbGlic3RkYysrL2luY2x1ZGUvY3N0ZGxpYiBiL2xpYnN0ZGMrKy9pbmNsdWRlL2NzdGRsaWIKaW5kZXggYmI2ZjVhNS4uYmQxZGVhZSAxMDA2NDQKLS0tIGEvbGlic3RkYysrL2luY2x1ZGUvY3N0ZGxpYgorKysgYi9saWJzdGRjKysvaW5jbHVkZS9jc3RkbGliCkBAIC00Miw5ICs0Miw2IEBACiB1c2luZyA6OmV4aXQ7CiB1c2luZyA6OmFib3J0OwogdXNpbmcgOjphdGV4aXQ7Ci0jaWYgMCAvKiBNSVNTSU5HIEZST00gQklPTklDICovCi11c2luZyA6Om9uX2V4aXQ7Ci0jZW5kaWYKIAogdXNpbmcgOjpnZXRlbnY7CiB1c2luZyA6OnB1dGVudjsKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy9zcmMvbmV3LmNwcCBiL2xpYnN0ZGMrKy9zcmMvbmV3LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRkM2RiYS4uMDAwMDAwMAotLS0gYS9saWJzdGRjKysvc3JjL25ldy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jaW5jbHVkZSAibmV3IgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1jb25zdCBzdGQ6Om5vdGhyb3dfdCBzdGQ6Om5vdGhyb3cgPSB7fTsKLQotdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCogcCA9IG1hbGxvYyhzaXplKTsKLSAgICBpZiAocCA9PSBOVUxMKSB7Ci0gICAgICAgIGFib3J0KCk7Ci0gICAgfQotICAgIHJldHVybiBwOwotfQotCi12b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHAgPSBtYWxsb2Moc2l6ZSk7Ci0gICAgaWYgKHAgPT0gTlVMTCkgewotICAgICAgICBhYm9ydCgpOwotICAgIH0KLSAgICByZXR1cm4gcDsKLX0KLQotdm9pZCAgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHB0cikKLXsKLSAgICBmcmVlKHB0cik7Ci19Ci0KLXZvaWQgIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqIHB0cikKLXsKLSAgICBmcmVlKHB0cik7Ci19Ci0KLXZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCBzaXplLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpCi17Ci0gICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKLX0KLQotdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qgc2l6ZSwgY29uc3Qgc3RkOjpub3Rocm93X3QmKQotewotICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7Ci19Ci0KLXZvaWQgIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwdHIsIGNvbnN0IHN0ZDo6bm90aHJvd190JikKLXsKLSAgICBmcmVlKHB0cik7Ci19Ci0KLXZvaWQgIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqIHB0ciwgY29uc3Qgc3RkOjpub3Rocm93X3QmKQotewotICAgIGZyZWUocHRyKTsKLX0KLQotCi0KLQotCmRpZmYgLS1naXQgYS9saWJzdGRjKysvc3JjL29uZV90aW1lX2NvbnN0cnVjdGlvbi5jcHAgYi9saWJzdGRjKysvc3JjL29uZV90aW1lX2NvbnN0cnVjdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NzQzMTEuLjAwMDAwMDAKLS0tIGEvbGlic3RkYysrL3NyYy9vbmVfdGltZV9jb25zdHJ1Y3Rpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKi8KLQotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN5cy9hdG9taWNzLmg+Ci0jaW5jbHVkZSA8ZW5kaWFuLmg+Ci0KLSNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19hdG9taWNfaW5saW5lLmgiCi0jaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfZnV0ZXguaCIKLQotLy8gVGhpcyBmaWxlIGNvbnRhaW5zIEMrKyBBQkkgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIG9uZSB0aW1lCi0vLyBjb25zdHJ1Y3RvcnMgYXMgZGVmaW5lZCBpbiB0aGUgIlJ1bi10aW1lIEFCSSBmb3IgdGhlIEFSTSBBcmNoaXRlY3R1cmUiCi0vLyBzZWN0aW9uIDQuNC4yCi0vLwotLy8gQVJNIEMrKyBBQkkgYW5kIEl0YW5pdW0veDg2IEMrKyBBQkkgaGFzIGRpZmZlcmVudCBkZWZpbml0aW9uIGZvcgotLy8gb25lIHRpbWUgY29uc3RydWN0aW9uOgotLy8KLS8vICAgIEFSTSBDKysgQUJJIGRlZmluZXMgdGhlIExTQiBvZiBndWFyZCB2YXJpYWJsZSBzaG91bGQgYmUgdGVzdGVkCi0vLyAgICBieSBjb21waWxlci1nZW5lcmF0ZWQgY29kZSBiZWZvcmUgY2FsbGluZyBfX2N4YV9ndWFyZF9hY3F1aXJlIGV0IGFsLgotLy8KLS8vICAgIFRoZSBJdGFuaXVtL3g4NiBDKysgQUJJIGRlZmluZXMgdGhlIGxvdy1vcmRlciBfYnl0ZV8gc2hvdWxkIGJlCi0vLyAgICB0ZXN0ZWQgaW5zdGVhZC4KLS8vCi0vLyAgICBNZWFud2hpbGUsIGd1YXJkIHZhcmlhYmxlIGFyZSAzMmJpdCBhbGlnbmVkIGZvciBBUk0sIGFuZCA2NGJpdAotLy8gICAgYWxpZ25lZCBmb3IgeDg2LgotLy8KLS8vIFJlZmVyZW5jZSBkb2N1bWVudGF0aW9uOgotLy8KLS8vICAgIHNlY3Rpb24gMy4yLjMgb2YgQVJNIElISSAwMDQxQyAoZm9yIEFSTSkKLS8vICAgIHNlY3Rpb24gMy4zLjIgb2YgdGhlIEl0YW5pdW0gQysrIEFCSSBzcGVjaWZpY2F0aW9uIHYxLjgzIChmb3IgeDg2KS4KLS8vCi0vLyBUaGVyZSBpcyBubyBDKysgQUJJIGF2YWlsYWJsZSBmb3Igb3RoZXIgQVJDSC4gQnV0IHRoZSBnY2Mgc291cmNlCi0vLyBzaG93cyBhbGwgb3RoZXIgQVJDSCBmb2xsb3cgdGhlIGRlZmluaXRpb24gb2YgSXRhbml1bS94ODYgQysrIEFCSS4KLQotCi0jaWYgZGVmaW5lZChfX2FybV9fKQotLy8gVGhlIEFSTSBDKysgQUJJIG1hbmRhdGVzIHRoYXQgZ3VhcmQgdmFyaWFibGUgYXJlCi0vLyAzMi1iaXQgYWxpZ25lZCwgMzItYml0IHZhbHVlcy4gQW5kIG9ubHkgaXRzIExTQiBpcyB0ZXN0ZWQgYnkKLS8vIHRoZSBjb21waWxlci1nZW5lcmF0ZWQgY29kZSBiZWZvcmUgY2FsbGluZwotLy8gX19jeGFfZ3VhcmRfYWNxdWlyZS4KLS8vCi10eXBlZGVmIHVuaW9uIHsKLSAgICBpbnQgdm9sYXRpbGUgc3RhdGU7Ci0gICAgaW50MzJfdCBhbGlnbmVyOwotfSBfZ3VhcmRfdDsKLQotY29uc3Qgc3RhdGljIGludCByZWFkeSA9IDB4MTsKLWNvbnN0IHN0YXRpYyBpbnQgcGVuZGluZyA9IDB4MjsKLWNvbnN0IHN0YXRpYyBpbnQgd2FpdGluZyA9IDB4NjsKLQotI2Vsc2UgICAvLyBHQ0Mgc291cmNlcyBpbmRpY2F0ZXMgYWxsIG5vbmUtYXJtIGZvbGxvdyB0aGUgc2FtZSBBQkkKLS8vIFRoZSBJdGFuaXVtL3g4NiBDKysgQUJJIG1hbmRhdGVzIHRoYXQgZ3VhcmQgdmFyaWFibGVzCi0vLyBhcmUgNjQtYml0IGFsaWduZWQsIDY0LWJpdCB2YWx1ZXMuIEFsc28sIHRoZSBsZWFzdC1zaWduaWZpY2FudAotLy8gYnl0ZSBpcyB0ZXN0ZWQgYnkgdGhlIGNvbXBpbGVyLWdlbmVyYXRlZCBjb2RlIGJlZm9yZSwgd2UgY2FsbGluZwotLy8gX19jeGFfZ3VhcmRfYWNxdWlyZS4gV2UgY2FuIGFjY2VzcyBpdCB0aHJvdWdoIHRoZSBmaXJzdAotLy8gMzItYml0IHdvcmQgaW4gdGhlIHVuaW9uIGJlbG93LgotLy8KLXR5cGVkZWYgdW5pb24gewotICAgIGludCB2b2xhdGlsZSBzdGF0ZTsKLSAgICBpbnQ2NF90IGFsaWduZXI7Ci19IF9ndWFyZF90OwotCi1jb25zdCBzdGF0aWMgaW50IHJlYWR5ICAgICA9IGxldG9oMzIoMHgxKTsKLWNvbnN0IHN0YXRpYyBpbnQgcGVuZGluZyAgID0gbGV0b2gzMigweDEwMCk7Ci1jb25zdCBzdGF0aWMgaW50IHdhaXRpbmcgICA9IGxldG9oMzIoMHgxMDAwMCk7Ci0jZW5kaWYKLQotZXh0ZXJuICJDIiBpbnQgX19jeGFfZ3VhcmRfYWNxdWlyZShfZ3VhcmRfdCogZ3YpCi17Ci0gICAgLy8gMCAtPiBwZW5kaW5nLCByZXR1cm4gMQotICAgIC8vIHBlbmRpbmcgLT4gd2FpdGluZywgd2FpdCBhbmQgcmV0dXJuIDAKLSAgICAvLyB3YWl0aW5nOiB1bnRvdWNoZWQsIHdhaXQgYW5kIHJldHVybiAwCi0gICAgLy8gcmVhZHk6IHVudG91Y2hlZCwgcmV0dXJuIDAKLQotcmV0cnk6Ci0gICAgaWYgKF9fYmlvbmljX2NtcHhjaGcoMCwgcGVuZGluZywgJmd2LT5zdGF0ZSkgPT0gMCkgewotICAgICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBfX2Jpb25pY19jbXB4Y2hnKHBlbmRpbmcsIHdhaXRpbmcsICZndi0+c3RhdGUpOyAvLyBJbmRpY2F0ZSB0aGVyZSBpcyBhIHdhaXRlcgotICAgIF9fZnV0ZXhfd2FpdCgmZ3YtPnN0YXRlLCB3YWl0aW5nLCBOVUxMKTsKLQotICAgIGlmIChndi0+c3RhdGUgIT0gcmVhZHkpIC8vIF9fY3hhX2d1YXJkX2Fib3J0IHdhcyBjYWxsZWQsIGxldCBldmVyeSB0aHJlYWQgdHJ5IHNpbmNlIHRoZXJlIGlzIG5vIHJldHVybiBjb2RlIGZvciB0aGlzIGNvbmRpdGlvbgotICAgICAgICBnb3RvIHJldHJ5OwotCi0gICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgIHJldHVybiAwOwotfQotCi1leHRlcm4gIkMiIHZvaWQgX19jeGFfZ3VhcmRfcmVsZWFzZShfZ3VhcmRfdCogZ3YpCi17Ci0gICAgLy8gcGVuZGluZyAtPiByZWFkeQotICAgIC8vIHdhaXRpbmcgLT4gcmVhZHksIGFuZCB3YWtlCi0KLSAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7Ci0gICAgaWYgKF9fYmlvbmljX2NtcHhjaGcocGVuZGluZywgcmVhZHksICZndi0+c3RhdGUpID09IDApIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGd2LT5zdGF0ZSA9IHJlYWR5OwotICAgIF9fZnV0ZXhfd2FrZSgmZ3YtPnN0YXRlLCAweDdmZmZmZmZmKTsKLX0KLQotZXh0ZXJuICJDIiB2b2lkIF9fY3hhX2d1YXJkX2Fib3J0KF9ndWFyZF90KiBndikKLXsKLSAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7Ci0gICAgZ3YtPnN0YXRlPSAwOwotICAgIF9fZnV0ZXhfd2FrZSgmZ3YtPnN0YXRlLCAweDdmZmZmZmZmKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy9zcmMvcHVyZV92aXJ0dWFsLmNwcCBiL2xpYnN0ZGMrKy9zcmMvcHVyZV92aXJ0dWFsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI1ZTMyOC4uMDAwMDAwMAotLS0gYS9saWJzdGRjKysvc3JjL3B1cmVfdmlydHVhbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSN1bmRlZiBOREVCVUcKLSNpbmNsdWRlIDxhc3NlcnQuaD4KLQotZXh0ZXJuICJDIiB2b2lkIF9fY3hhX3B1cmVfdmlydHVhbCgpIHsKLSAgLy8gV2UgY2FuJ3QgY2FsbCBfX2xpYmNfZm9ybWF0X2xvZyBmcm9tIGxpYnN0ZGMrKyBiZWNhdXNlIGl0J3MgaGlkZGVuIGFuZCBpbiBsaWJjLCBzbyBjaGVhdC4KLSAgYXNzZXJ0KCEiUHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxlZC4gQXJlIHlvdSBjYWxsaW5nIHZpcnR1YWwgbWV0aG9kcyBmcm9tIGEgZGVzdHJ1Y3Rvcj8iKTsKLSAgLyogTk9UUkVBQ0hFRCAqLwotfQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrL3NyYy90eXBlaW5mby5jcHAgYi9saWJzdGRjKysvc3JjL3R5cGVpbmZvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQyNmYxYS4uMDAwMDAwMAotLS0gYS9saWJzdGRjKysvc3JjL3R5cGVpbmZvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSNpbmNsdWRlICJ0eXBlaW5mbyIKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotdHlwZV9pbmZvOjp0eXBlX2luZm8oKSB7Ci19Ci0KLXR5cGVfaW5mbzo6fnR5cGVfaW5mbygpIHsKLX0KLQotY2hhciBjb25zdCAqCi10eXBlX2luZm86Om5hbWUoKSBjb25zdCB7Ci0gICAgcmV0dXJuICJOL0EiOwotfQotCi1ib29sIAotdHlwZV9pbmZvOjpvcGVyYXRvcj09KHR5cGVfaW5mbyBjb25zdCAmIHJpZ2h0KSBjb25zdCB7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIAotdHlwZV9pbmZvOjpvcGVyYXRvciE9KHR5cGVfaW5mbyBjb25zdCAmIHJpZ2h0KSBjb25zdCB7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sCi10eXBlX2luZm86OmJlZm9yZSh0eXBlX2luZm8gY29uc3QgJiByaWdodCkgY29uc3QgewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdHlwZV9pbmZvOjp0eXBlX2luZm8odHlwZV9pbmZvIGNvbnN0ICYgcmlnaHQpIHsKLX0KLQpkaWZmIC0tZ2l0IGEvbGlua2VyL0FuZHJvaWQubWsgYi9saW5rZXIvQW5kcm9pZC5tawppbmRleCBiZGM1NGRlLi41ODUzYzkwIDEwMDY0NAotLS0gYS9saW5rZXIvQW5kcm9pZC5taworKysgYi9saW5rZXIvQW5kcm9pZC5tawpAQCAtMSwyMSArMSwyMyBAQAotTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCitMT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCisKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCi1pZmVxICgkKFRBUkdFVF9BUkNIKSx4ODYpCi0gICAgbGlua2VyX2JlZ2luX2V4dGVuc2lvbiA6PSBjCi1lbHNlCi0gICAgbGlua2VyX2JlZ2luX2V4dGVuc2lvbiA6PSBTCi1lbmRpZgotCiBMT0NBTF9TUkNfRklMRVM6PSBcCi0gICAgYXJjaC8kKFRBUkdFVF9BUkNIKS9iZWdpbi4kKGxpbmtlcl9iZWdpbl9leHRlbnNpb24pIFwKICAgICBkZWJ1Z2dlci5jcHAgXAogICAgIGRsZmNuLmNwcCBcCiAgICAgbGlua2VyLmNwcCBcCisgICAgbGlua2VyX2FsbG9jYXRvci5jcHAgXAogICAgIGxpbmtlcl9lbnZpcm9uLmNwcCBcCiAgICAgbGlua2VyX3BoZHIuY3BwIFwKICAgICBydC5jcHAgXAogCitMT0NBTF9TUkNfRklMRVNfYXJtICAgICA6PSBhcmNoL2FybS9iZWdpbi5TCitMT0NBTF9TUkNfRklMRVNfYXJtNjQgICA6PSBhcmNoL2FybTY0L2JlZ2luLlMKK0xPQ0FMX1NSQ19GSUxFU194ODYgICAgIDo9IGFyY2gveDg2L2JlZ2luLmMKK0xPQ0FMX1NSQ19GSUxFU194ODZfNjQgIDo9IGFyY2gveDg2XzY0L2JlZ2luLlMKK0xPQ0FMX1NSQ19GSUxFU19taXBzICAgIDo9IGFyY2gvbWlwcy9iZWdpbi5TCitMT0NBTF9TUkNfRklMRVNfbWlwczY0ICA6PSBhcmNoL21pcHM2NC9iZWdpbi5TCisKIExPQ0FMX0xERkxBR1MgOj0gXAogICAgIC1zaGFyZWQgXAogICAgIC1XbCwtQnN5bWJvbGljIFwKQEAgLTI1LDcgKzI3LDcgQEAKICAgICAtZm5vLXN0YWNrLXByb3RlY3RvciBcCiAgICAgLVdzdHJpY3Qtb3ZlcmZsb3c9NSBcCiAgICAgLWZ2aXNpYmlsaXR5PWhpZGRlbiBcCi0gICAgLVdhbGwgLVdleHRyYSAtV2Vycm9yIFwKKyAgICAtV2FsbCAtV2V4dHJhIC1XdW51c2VkIC1XZXJyb3IgXAogCiBMT0NBTF9DT05MWUZMQUdTICs9IFwKICAgICAtc3RkPWdudTk5IFwKQEAgLTM2LDUxICszOCw0MCBAQAogIyBXZSBuZWVkIHRvIGFjY2VzcyBCaW9uaWMgcHJpdmF0ZSBoZWFkZXJzIGluIHRoZSBsaW5rZXIuCiBMT0NBTF9DRkxBR1MgKz0gLUkkKExPQ0FMX1BBVEgpLy4uL2xpYmMvCiAKLWlmZXEgKCQoVEFSR0VUX0lTXzY0X0JJVCksdHJ1ZSkKLSAgICBMT0NBTF9NT0RVTEUgOj0gbGlua2VyNjQKLWVsc2UKLSAgICBMT0NBTF9NT0RVTEUgOj0gbGlua2VyCi1lbmRpZgotCi1MT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKLQotTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBsaWJjX25vbWFsbG9jCi0KLSNMT0NBTF9GT1JDRV9TVEFUSUNfRVhFQ1VUQUJMRSA6PSB0cnVlICMgbm90IG5lY2Vzc2FyeSB3aGVuIG5vdCBpbmNsdWRpbmcgQlVJTERfRVhFQ1VUQUJMRQotCi0jCi0jIGluY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQotIwotIyBJbnN0ZWFkIG9mIGluY2x1ZGluZyAkKEJVSUxEX0VYRUNVVEFCTEUpLCB3ZSBleGVjdXRlIHRoZSBzdGVwcyB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSBieQotIyBoYW5kLCBhcyB3ZSB3YW50IHRvIGluc2VydCBhbiBleHRyYSBzdGVwIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYnVpbGQgc3lzdGVtLCBhbmQKLSMgaXMgcHJvYmFibHkgc3BlY2lmaWMgdGhlIGxpbmtlciBvbmx5LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gbW9kaWZ5IHRoZSBidWlsZCBzeXN0ZW0gZm9yCi0jIHRoZSBwdXJwb3NlLgotCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVhFQ1VUQUJMRVMKLUxPQ0FMX01PRFVMRV9TVUZGSVggOj0gJChUQVJHRVRfRVhFQ1VUQUJMRV9TVUZGSVgpCi0KICMgd2UgZG9uJ3Qgd2FudCBjcnRiZWdpbi5vIChiZWNhdXNlIHdlIGhhdmUgYmVnaW4ubyksIHNvIHVuc2V0IGl0CiAjIGp1c3QgZm9yIHRoaXMgbW9kdWxlCiBMT0NBTF9OT19DUlQgOj0gdHJ1ZQotCiAjIFRPRE86IHNwbGl0IG91dCB0aGUgYXNmbGFncy4KIExPQ0FMX0FTRkxBR1MgOj0gJChMT0NBTF9DRkxBR1MpCiAKLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2R5bmFtaWNfYmluYXJ5Lm1rCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsgJChMT0NBTF9QQVRIKS9saW5rZXJfZXhlY3V0YWJsZS5tawogCi0jIFNlZSBidWlsZC9jb3JlL2V4ZWN1dGFibGUubWsKLSQobGlua2VkX21vZHVsZSk6IFBSSVZBVEVfVEFSR0VUX0dMT0JBTF9MRF9ESVJTIDo9ICQoVEFSR0VUX0dMT0JBTF9MRF9ESVJTKQotJChsaW5rZWRfbW9kdWxlKTogUFJJVkFURV9UQVJHRVRfR0xPQkFMX0xERkxBR1MgOj0gJChUQVJHRVRfR0xPQkFMX0xERkxBR1MpCi0kKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9GRE9fTElCIDo9ICQoVEFSR0VUX0ZET19MSUIpCi0kKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9MSUJHQ0MgOj0gJChUQVJHRVRfTElCR0NDKQotJChsaW5rZWRfbW9kdWxlKTogUFJJVkFURV9UQVJHRVRfQ1JUQkVHSU5fRFlOQU1JQ19PIDo9ICQoVEFSR0VUX0NSVEJFR0lOX0RZTkFNSUNfTykKLSQobGlua2VkX21vZHVsZSk6IFBSSVZBVEVfVEFSR0VUX0NSVEJFR0lOX1NUQVRJQ19PIDo9ICQoVEFSR0VUX0NSVEJFR0lOX1NUQVRJQ19PKQotJChsaW5rZWRfbW9kdWxlKTogUFJJVkFURV9UQVJHRVRfQ1JURU5EX08gOj0gJChUQVJHRVRfQ1JURU5EX08pCi0kKGxpbmtlZF9tb2R1bGUpOiAkKFRBUkdFVF9DUlRCRUdJTl9TVEFUSUNfTykgJChhbGxfb2JqZWN0cykgJChhbGxfbGlicmFyaWVzKSAkKFRBUkdFVF9DUlRFTkRfTykKLQkkKHRyYW5zZm9ybS1vLXRvLXN0YXRpYy1leGVjdXRhYmxlKQotCUBlY2hvICJ0YXJnZXQgUHJlZml4U3ltYm9sczogJChQUklWQVRFX01PRFVMRSkgKCRAKSIKLQkkKGhpZGUpICQoVEFSR0VUX09CSkNPUFkpIC0tcHJlZml4LXN5bWJvbHM9X19kbF8gJEAKK0xPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliY19ub21hbGxvYwogCi0jCi0jIGVuZCBvZiBCVUlMRF9FWEVDVVRBQkxFIGhhY2sKLSMKK0xPQ0FMX0ZPUkNFX1NUQVRJQ19FWEVDVVRBQkxFIDo9IHRydWUgIyBub3QgbmVjZXNzYXJ5IHdoZW4gbm90IGluY2x1ZGluZyBCVUlMRF9FWEVDVVRBQkxFCisKK0xPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVggOj0gJChsaW5rZXJfMm5kX2FyY2hfdmFyX3ByZWZpeCkKKworTE9DQUxfTU9EVUxFIDo9IGxpbmtlcgorTE9DQUxfTU9EVUxFX1NURU1fMzIgOj0gbGlua2VyCitMT0NBTF9NT0RVTEVfU1RFTV82NCA6PSBsaW5rZXI2NAorTE9DQUxfTVVMVElMSUIgOj0gYm90aAorCisjIExlYXZlIHRoZSBzeW1ib2xzIGluIHRoZSBzaGFyZWQgbGlicmFyeSBzbyB0aGF0IHN0YWNrIHVud2luZGVycyBjYW4gcHJvZHVjZQorIyBtZWFuaW5nZnVsIG5hbWUgcmVzb2x1dGlvbi4KK0xPQ0FMX1NUUklQX01PRFVMRSA6PSBrZWVwX3N5bWJvbHMKKworaW5jbHVkZSAkKExPQ0FMX1BBVEgpL2xpbmtlcl9leGVjdXRhYmxlLm1rCitpZmRlZiBUQVJHRVRfMk5EX0FSQ0gKK0xPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVggOj0gJChUQVJHRVRfMk5EX0FSQ0hfVkFSX1BSRUZJWCkKK09WRVJSSURFX0JVSUxUX01PRFVMRV9QQVRIIDo9CitMT0NBTF9CVUlMVF9NT0RVTEUgOj0KK0xPQ0FMX0lOU1RBTExFRF9NT0RVTEUgOj0KK0xPQ0FMX01PRFVMRV9TVEVNIDo9CitMT0NBTF9CVUlMVF9NT0RVTEVfU1RFTSA6PQorTE9DQUxfSU5TVEFMTEVEX01PRFVMRV9TVEVNIDo9CitMT0NBTF9JTlRFUk1FRElBVEVfVEFSR0VUUyA6PQoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL2xpbmtlcl9leGVjdXRhYmxlLm1rCitlbmRpZgorCitpbmNsdWRlICQoY2FsbCBmaXJzdC1tYWtlZmlsZXMtdW5kZXIsJChMT0NBTF9QQVRIKSkKZGlmZiAtLWdpdCBhL2xpbmtlci9OT1RJQ0UgYi9saW5rZXIvTk9USUNFCmluZGV4IGMzZDZjZjYuLmNiM2ExZGQgMTAwNjQ0Ci0tLSBhL2xpbmtlci9OT1RJQ0UKKysrIGIvbGlua2VyL05PVElDRQpAQCAtMjAsOSArMjAsOSBAQAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKIGFyZSBtZXQ6Ci1SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLVJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAgICBkaXN0cmlidXRpb24uCkBAIC00OCw5ICs0OCw5IEBACiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKLVJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICAgIGRpc3RyaWJ1dGlvbi4KQEAgLTc2LDkgKzc2LDkgQEAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiBhcmUgbWV0OgotUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi1SZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgZGlzdHJpYnV0aW9uLgpAQCAtMTA0LDkgKzEwNCw5IEBACiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKLVJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICAgIGRpc3RyaWJ1dGlvbi4KQEAgLTEzMiw5ICsxMzIsOSBAQAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKIGFyZSBtZXQ6Ci1SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLVJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAgICBkaXN0cmlidXRpb24uCkBAIC0xNTUsMTQgKzE1NSwzMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCitMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKK3lvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KK1lvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKIGFyZSBtZXQ6Ci1SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLVJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAgICBkaXN0cmlidXRpb24uCkBAIC0xODIsMyArMTk4LDE5IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cit5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCitZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwpkaWZmIC0tZ2l0IGEvbGlua2VyL2FyY2gvYXJtL2JlZ2luLlMgYi9saW5rZXIvYXJjaC9hcm0vYmVnaW4uUwppbmRleCBlMjU5OTAyLi44Y2I1OTliIDEwMDY0NAotLS0gYS9saW5rZXIvYXJjaC9hcm0vYmVnaW4uUworKysgYi9saW5rZXIvYXJjaC9hcm0vYmVnaW4uUwpAQCAtMjYsMjAgKzI2LDEyIEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0JLnRleHQKLQkuYWxpZ24gNAotCS50eXBlIF9zdGFydCwjZnVuY3Rpb24KLQkuZ2xvYmwgX3N0YXJ0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLV9zdGFydDoKLQltb3YJcjAsIHNwCi0JbW92CXIxLCAjMAotCWJsCV9fbGlua2VyX2luaXQKK0VOVFJZKF9zdGFydCkKKyAgbW92IHIwLCBzcAorICBibCBfX2xpbmtlcl9pbml0CiAKLQkvKiBsaW5rZXIgaW5pdCByZXR1cm5zIHRoZSBfZW50cnkgYWRkcmVzcyBpbiB0aGUgbWFpbiBpbWFnZSAqLwotCW1vdglwYywgcjAKLQotCS5zZWN0aW9uIC5jdG9ycywgIndhIgotCS5nbG9ibCBfX0NUT1JfTElTVF9fCi1fX0NUT1JfTElTVF9fOgotCS5sb25nIC0xCisgIC8qIGxpbmtlciBpbml0IHJldHVybnMgdGhlIF9lbnRyeSBhZGRyZXNzIGluIHRoZSBtYWluIGltYWdlICovCisgIG1vdiBwYywgcjAKK0VORChfc3RhcnQpCmRpZmYgLS1naXQgYS9saW5rZXIvYXJjaC9hcm02NC9iZWdpbi5TIGIvbGlua2VyL2FyY2gvYXJtNjQvYmVnaW4uUwppbmRleCA1NTYxOGI3Li5hNmVhNTgzIDEwMDY0NAotLS0gYS9saW5rZXIvYXJjaC9hcm02NC9iZWdpbi5TCisrKyBiL2xpbmtlci9hcmNoL2FybTY0L2JlZ2luLlMKQEAgLTI2LDEyICsyNiwxMSBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9zdGFydCkKICAgbW92IHgwLCBzcAotICBtb3YgeDEsIHh6cgotICBibCAgX19saW5rZXJfaW5pdAorICBibCBfX2xpbmtlcl9pbml0CiAKICAgLyogbGlua2VyIGluaXQgcmV0dXJucyB0aGUgX2VudHJ5IGFkZHJlc3MgaW4gdGhlIG1haW4gaW1hZ2UgKi8KICAgYnIgeDAKZGlmZiAtLWdpdCBhL2xpbmtlci9hcmNoL21pcHMvYmVnaW4uUyBiL2xpbmtlci9hcmNoL21pcHMvYmVnaW4uUwppbmRleCBiNzgyOTQ3Li5jYmUxZTM3IDEwMDY0NAotLS0gYS9saW5rZXIvYXJjaC9taXBzL2JlZ2luLlMKKysrIGIvbGlua2VyL2FyY2gvbWlwcy9iZWdpbi5TCkBAIC0zMiw3ICszMiw5IEBACiAKICAgICAuZW50ICAgIF9fc3RhcnQKICAgICAuZ2xvYmwgICAgX19zdGFydAorICAgIC5nbG9ibCAgICBfc3RhcnQKIF9fc3RhcnQ6Citfc3RhcnQ6CiAgICAgLnNldCAgICBub3Jlb3JkZXIKICAgICBiYWwgICAgMWYKICAgICBub3AKQEAgLTEwMCw4ICsxMDIsMyBAQAogICAgIGFkZHUgICAgJHNwLCA0KjQgICAgICAgIC8qIHJlc3RvcmUgc3AgKi8KICAgICBqICAgICR0OQogICAgIC5lbmQgICAgX19zdGFydAotCi0gICAgLnNlY3Rpb24gLmN0b3JzLCAid2EiCi0gICAgLmdsb2JsIF9fQ1RPUl9MSVNUX18KLV9fQ1RPUl9MSVNUX186Ci0gICAgLmxvbmcgLTEKZGlmZiAtLWdpdCBhL2xpbmtlci9hcmNoL21pcHM2NC9iZWdpbi5TIGIvbGlua2VyL2FyY2gvbWlwczY0L2JlZ2luLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY2Yjk0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpbmtlci9hcmNoL21pcHM2NC9iZWdpbi5TCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworI2lmIChfTUlQU19TSU0gPT0gX0FCSU8zMikgfHwgKF9NSVBTX1NJTSA9PSBfQUJJMzIpCisjZGVmaW5lIEVMRl9EWU5TWiAgICAgICA4CisjZGVmaW5lIEVMRl9EWU5fVEFHICAgICAwCisjZGVmaW5lIEVMRl9EWU5fVkFMICAgICA0CisjZGVmaW5lIEdPVEVOVF9TWiAgICAgICA0CisjZWxzZQorI2RlZmluZSBFTEZfRFlOU1ogICAgICAgMTYKKyNkZWZpbmUgRUxGX0RZTl9UQUcgICAgIDAKKyNkZWZpbmUgRUxGX0RZTl9WQUwgICAgIDgKKyNkZWZpbmUgR09URU5UX1NaICAgICAgIDgKKyNlbmRpZgorCisgICAgLnRleHQKKyAgICAuYWxpZ24JNAorICAgIC50eXBlCV9fc3RhcnQsQGZ1bmN0aW9uCisKKyAgICAuZW50CV9fc3RhcnQKKyAgICAuZ2xvYmwJX19zdGFydAorICAgIC5nbG9ibAlfc3RhcnQKK19fc3RhcnQ6Citfc3RhcnQ6CisgICAgLnNldAlub3Jlb3JkZXIKKyAgICBiYWwJCTFmCisgICAgIG5vcAorMToKKyNpZiAoX01JUFNfU0lNID09IF9BQklPMzIpIHx8IChfTUlQU19TSU0gPT0gX0FCSTMyKQorICAgIC5jcGxvYWQJcmEKKyNlbHNlCisgICAgLmNwc2V0dXAJcmEsICQwLCAxYgorI2VuZGlmCisgICAgLnNldAlyZW9yZGVyCisKKyAgICAvKiBEaXNjb3ZlciB0aGUgbG9hZCBhZGRyZXNzICovCisgICAgTEEJCXQwLCAxYgorICAgIFBUUl9TVUJVCXQwLCByYSwgdDAKKworI2RlZmluZSBEVF9QTFRHT1QgMworI2RlZmluZSBEVF9NSVBTX0xPQ0FMX0dPVE5PIDB4NzAwMDAwMGEKKworICAgIC8qIFNlYXJjaCBkeW5hbWljIHRhYmxlIGZvciBEVF9NSVBTX0xPQ0FMX0dPVE5PIGFuZCBEVF9QTFRHT1QgdmFsdWVzICovCisgICAgTEEJCXQxLCBfRFlOQU1JQworICAgIFBUUl9BRERVCXQxLCB0MAorICAgIExJCQl0MywgRFRfUExUR09UCisgICAgTEkJCXRhMCwgRFRfTUlQU19MT0NBTF9HT1ROTworMDoKKyAgICBSRUdfTAl0MiwgRUxGX0RZTl9UQUcodDEpCisgICAgYmVxegl0MiwgLkxyZWxvY2F0ZV9sb2NhbF9nb3QKKworICAgIGJuZQkJdDIsIHQzLCAxZgkvKiBEVF9QTFRHT1Q/ICovCisgICAgUkVHX0wJczAsIEVMRl9EWU5fVkFMKHQxKQorICAgIFBUUl9BRERVCXMwLCB0MAorICAgIGIJCTJmCisKKzE6CisgICAgYm5lCQl0MiwgdGEwLCAyZiAgICAvKiBEVF9NSVBTX0xPQ0FMX0dPVE5PPyAqLworICAgIFJFR19MCXMxLCBFTEZfRFlOX1ZBTCh0MSkKKworMjogIFBUUl9BRERVICAgIHQxLCBFTEZfRFlOU1oKKyAgICBiCQkwYgorCisuTHJlbG9jYXRlX2xvY2FsX2dvdDoKKyAgICAvKgorICAgICAqIFJlbG9jYXRlIHRoZSBsb2NhbCBHT1QgZW50cmllcworICAgICAqIGdvdFswXSBpcyBhZGRyZXNzIG9mIGxhenkgcmVzb2x2ZXIgZnVuY3Rpb24KKyAgICAgKiBnb3RbMV0gbWF5IGJlIHVzZWQgZm9yIGEgR05VIGV4dGVuc2lvbgorICAgICAqLworCisgICAgUFRSX0FERFUJczAsIEdPVEVOVF9TWgorICAgIFNVQlUJczEsIDEKKyAgICBQVFJfTAl0MSwgKHMwKQorICAgIGJnZXoJdDEsIDlmCisgICAgUFRSX0FERFUJczAsIEdPVEVOVF9TWgorICAgIFNVQlUJczEsIDEKKyAgICBiCQk5ZgorCisxOiAgUFRSX0wJdDEsIChzMCkKKyAgICBQVFJfQUREVQl0MSwgdDAKKyAgICBQVFJfUwl0MSwgKHMwKQorICAgIFBUUl9BRERVCXMwLCBHT1RFTlRfU1oKKzk6ICBTVUJVCXMxLCAxCisgICAgYmdleglzMSwgMWIKKworICAgIC8qIGNhbGwgbGlua2VyX2luaXQgKi8KKyAgICBtb3ZlCWEwLCBzcAorI2lmIChfTUlQU19TSU0gPT0gX0FCSU8zMikgfHwgKF9NSVBTX1NJTSA9PSBfQUJJMzIpCisgICAgUFRSX1NVQlUJc3AsIDQqUkVHU1ogICAgICAgLyogc3BhY2UgZm9yIGFyZyBzYXZlcyBpbiBsaW5rZXJfaW5pdCAqLworI2VuZGlmCisgICAgamFsCQlfX2xpbmtlcl9pbml0CisjaWYgKF9NSVBTX1NJTSA9PSBfQUJJTzMyKSB8fCAoX01JUFNfU0lNID09IF9BQkkzMikKKyAgICBQVFJfQUREVQlzcCwgNCpSRUdTWiAgICAgICAgLyogcmVzdG9yZSBzcCAqLworI2VuZGlmCisgICAgbW92ZQl0OSwgdjAKKyAgICBqCQl0OQorICAgIC5lbmQgICAgX19zdGFydApkaWZmIC0tZ2l0IGEvbGlua2VyL2FyY2gveDg2XzY0L2JlZ2luLlMgYi9saW5rZXIvYXJjaC94ODZfNjQvYmVnaW4uUwppbmRleCA5ZWNhZDFhLi43OTQ1YTMxIDEwMDY0NAotLS0gYS9saW5rZXIvYXJjaC94ODZfNjQvYmVnaW4uUworKysgYi9saW5rZXIvYXJjaC94ODZfNjQvYmVnaW4uUwpAQCAtMjYsMTAgKzI2LDkgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShfc3RhcnQpCi0gIC8qIFBhc3MgZWxmZGF0YSB0byBfX2xpbmtlcl9pbml0LiAqLwogICBtb3YgJXJzcCwgJXJkaQogICBjYWxsIF9fbGlua2VyX2luaXQKIApkaWZmIC0tZ2l0IGEvbGlua2VyL2RlYnVnZ2VyLmNwcCBiL2xpbmtlci9kZWJ1Z2dlci5jcHAKaW5kZXggOTJlOWRhYy4uYzMxNjE1MSAxMDA2NDQKLS0tIGEvbGlua2VyL2RlYnVnZ2VyLmNwcAorKysgYi9saW5rZXIvZGVidWdnZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAibGlua2VyLmgiCiAKICNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTQwLDE1ICs0MSwxOSBAQAogCiBleHRlcm4gIkMiIGludCB0Z2tpbGwoaW50IHRnaWQsIGludCB0aWQsIGludCBzaWcpOwogCisjaWYgX19MUDY0X18KKyNkZWZpbmUgREVCVUdHRVJfU09DS0VUX05BTUUgImFuZHJvaWQ6ZGVidWdnZXJkNjQiCisjZWxzZQogI2RlZmluZSBERUJVR0dFUl9TT0NLRVRfTkFNRSAiYW5kcm9pZDpkZWJ1Z2dlcmQiCisjZW5kaWYKIAogZW51bSBkZWJ1Z2dlcl9hY3Rpb25fdCB7Ci0gICAgLy8gZHVtcCBhIGNyYXNoCi0gICAgREVCVUdHRVJfQUNUSU9OX0NSQVNILAotICAgIC8vIGR1bXAgYSB0b21ic3RvbmUgZmlsZQotICAgIERFQlVHR0VSX0FDVElPTl9EVU1QX1RPTUJTVE9ORSwKLSAgICAvLyBkdW1wIGEgYmFja3RyYWNlIG9ubHkgYmFjayB0byB0aGUgc29ja2V0Ci0gICAgREVCVUdHRVJfQUNUSU9OX0RVTVBfQkFDS1RSQUNFLAorICAvLyBkdW1wIGEgY3Jhc2gKKyAgREVCVUdHRVJfQUNUSU9OX0NSQVNILAorICAvLyBkdW1wIGEgdG9tYnN0b25lIGZpbGUKKyAgREVCVUdHRVJfQUNUSU9OX0RVTVBfVE9NQlNUT05FLAorICAvLyBkdW1wIGEgYmFja3RyYWNlIG9ubHkgYmFjayB0byB0aGUgc29ja2V0CisgIERFQlVHR0VSX0FDVElPTl9EVU1QX0JBQ0tUUkFDRSwKIH07CiAKIC8qIG1lc3NhZ2Ugc2VudCBvdmVyIHRoZSBzb2NrZXQgKi8KQEAgLTU5LDQ2ICs2NCw0OCBAQAogCiAgIC8vIHZlcnNpb24gMiBhZGRlZDoKICAgdWludHB0cl90IGFib3J0X21zZ19hZGRyZXNzOworCisgIC8vIHZlcnNpb24gMyBhZGRlZDoKKyAgaW50MzJfdCBvcmlnaW5hbF9zaV9jb2RlOwogfTsKIAogLy8gc2VlIG1hbigyKSBwcmN0bCwgc3BlY2lmaWNhbGx5IHRoZSBzZWN0aW9uIGFib3V0IFBSX0dFVF9OQU1FCiAjZGVmaW5lIE1BWF9UQVNLX05BTUVfTEVOICgxNikKIAogc3RhdGljIGludCBzb2NrZXRfYWJzdHJhY3RfY2xpZW50KGNvbnN0IGNoYXIqIG5hbWUsIGludCB0eXBlKSB7Ci0gICAgc29ja2FkZHJfdW4gYWRkcjsKKyAgc29ja2FkZHJfdW4gYWRkcjsKIAotICAgIC8vIFRlc3Qgd2l0aCBsZW5ndGggKzEgZm9yIHRoZSAqaW5pdGlhbCogJ1wwJy4KLSAgICBzaXplX3QgbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKLSAgICBpZiAoKG5hbWVsZW4gKyAxKSA+IHNpemVvZihhZGRyLnN1bl9wYXRoKSkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKyAgLy8gVGVzdCB3aXRoIGxlbmd0aCArMSBmb3IgdGhlICppbml0aWFsKiAnXDAnLgorICBzaXplX3QgbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKyAgaWYgKChuYW1lbGVuICsgMSkgPiBzaXplb2YoYWRkci5zdW5fcGF0aCkpIHsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gLTE7CisgIH0KIAotICAgIC8qIFRoaXMgaXMgdXNlZCBmb3IgYWJzdHJhY3Qgc29ja2V0IG5hbWVzcGFjZSwgd2UgbmVlZAotICAgICAqIGFuIGluaXRpYWwgJ1wwJyBhdCB0aGUgc3RhcnQgb2YgdGhlIFVuaXggc29ja2V0IHBhdGguCi0gICAgICoKLSAgICAgKiBOb3RlOiBUaGUgcGF0aCBpbiB0aGlzIGNhc2UgaXMgKm5vdCogc3VwcG9zZWQgdG8gYmUKLSAgICAgKiAnXDAnLXRlcm1pbmF0ZWQuICgibWFuIDcgdW5peCIgZm9yIHRoZSBnb3J5IGRldGFpbHMuKQotICAgICAqLwotICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKLSAgICBhZGRyLnN1bl9mYW1pbHkgPSBBRl9MT0NBTDsKLSAgICBhZGRyLnN1bl9wYXRoWzBdID0gMDsKLSAgICBtZW1jcHkoYWRkci5zdW5fcGF0aCArIDEsIG5hbWUsIG5hbWVsZW4pOworICAvLyBUaGlzIGlzIHVzZWQgZm9yIGFic3RyYWN0IHNvY2tldCBuYW1lc3BhY2UsIHdlIG5lZWQKKyAgLy8gYW4gaW5pdGlhbCAnXDAnIGF0IHRoZSBzdGFydCBvZiB0aGUgVW5peCBzb2NrZXQgcGF0aC4KKyAgLy8KKyAgLy8gTm90ZTogVGhlIHBhdGggaW4gdGhpcyBjYXNlIGlzICpub3QqIHN1cHBvc2VkIHRvIGJlCisgIC8vICdcMCctdGVybWluYXRlZC4gKCJtYW4gNyB1bml4IiBmb3IgdGhlIGdvcnkgZGV0YWlscy4pCisgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgYWRkci5zdW5fZmFtaWx5ID0gQUZfTE9DQUw7CisgIGFkZHIuc3VuX3BhdGhbMF0gPSAwOworICBtZW1jcHkoYWRkci5zdW5fcGF0aCArIDEsIG5hbWUsIG5hbWVsZW4pOwogCi0gICAgc29ja2xlbl90IGFsZW4gPSBuYW1lbGVuICsgb2Zmc2V0b2Yoc29ja2FkZHJfdW4sIHN1bl9wYXRoKSArIDE7CisgIHNvY2tsZW5fdCBhbGVuID0gbmFtZWxlbiArIG9mZnNldG9mKHNvY2thZGRyX3VuLCBzdW5fcGF0aCkgKyAxOwogCi0gICAgaW50IHMgPSBzb2NrZXQoQUZfTE9DQUwsIHR5cGUsIDApOwotICAgIGlmIChzID09IC0xKSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisgIGludCBzID0gc29ja2V0KEFGX0xPQ0FMLCB0eXBlLCAwKTsKKyAgaWYgKHMgPT0gLTEpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KIAotICAgIGludCBlcnIgPSBURU1QX0ZBSUxVUkVfUkVUUlkoY29ubmVjdChzLCByZWludGVycHJldF9jYXN0PHNvY2thZGRyKj4oJmFkZHIpLCBhbGVuKSk7Ci0gICAgaWYgKGVyciA9PSAtMSkgewotICAgICAgICBjbG9zZShzKTsKLSAgICAgICAgcyA9IC0xOwotICAgIH0KKyAgaW50IHJjID0gVEVNUF9GQUlMVVJFX1JFVFJZKGNvbm5lY3QocywgcmVpbnRlcnByZXRfY2FzdDxzb2NrYWRkcio+KCZhZGRyKSwgYWxlbikpOworICBpZiAocmMgPT0gLTEpIHsKKyAgICBjbG9zZShzKTsKKyAgICByZXR1cm4gLTE7CisgIH0KIAotICAgIHJldHVybiBzOworICByZXR1cm4gczsKIH0KIAogLyoKQEAgLTExMSwxNTggKzExOCwxOTIgQEAKICAqIGNvdWxkIGFsbG9jYXRlIG1lbW9yeSBvciBob2xkIGEgbG9jay4KICAqLwogc3RhdGljIHZvaWQgbG9nX3NpZ25hbF9zdW1tYXJ5KGludCBzaWdudW0sIGNvbnN0IHNpZ2luZm9fdCogaW5mbykgewotICAgIGNvbnN0IGNoYXIqIHNpZ25hbF9uYW1lOwotICAgIHN3aXRjaCAoc2lnbnVtKSB7Ci0gICAgICAgIGNhc2UgU0lHSUxMOiAgICBzaWduYWxfbmFtZSA9ICJTSUdJTEwiOyAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU0lHQUJSVDogICBzaWduYWxfbmFtZSA9ICJTSUdBQlJUIjsgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU0lHQlVTOiAgICBzaWduYWxfbmFtZSA9ICJTSUdCVVMiOyAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU0lHRlBFOiAgICBzaWduYWxfbmFtZSA9ICJTSUdGUEUiOyAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU0lHU0VHVjogICBzaWduYWxfbmFtZSA9ICJTSUdTRUdWIjsgICAgYnJlYWs7CisgIGNvbnN0IGNoYXIqIHNpZ25hbF9uYW1lID0gIj8/PyI7CisgIGJvb2wgaGFzX2FkZHJlc3MgPSBmYWxzZTsKKyAgc3dpdGNoIChzaWdudW0pIHsKKyAgICBjYXNlIFNJR0FCUlQ6CisgICAgICBzaWduYWxfbmFtZSA9ICJTSUdBQlJUIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0lHQlVTOgorICAgICAgc2lnbmFsX25hbWUgPSAiU0lHQlVTIjsKKyAgICAgIGhhc19hZGRyZXNzID0gdHJ1ZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0lHRlBFOgorICAgICAgc2lnbmFsX25hbWUgPSAiU0lHRlBFIjsKKyAgICAgIGhhc19hZGRyZXNzID0gdHJ1ZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0lHSUxMOgorICAgICAgc2lnbmFsX25hbWUgPSAiU0lHSUxMIjsKKyAgICAgIGhhc19hZGRyZXNzID0gdHJ1ZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0lHUElQRToKKyAgICAgIHNpZ25hbF9uYW1lID0gIlNJR1BJUEUiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTSUdTRUdWOgorICAgICAgc2lnbmFsX25hbWUgPSAiU0lHU0VHViI7CisgICAgICBoYXNfYWRkcmVzcyA9IHRydWU7CisgICAgICBicmVhazsKICNpZiBkZWZpbmVkKFNJR1NUS0ZMVCkKLSAgICAgICAgY2FzZSBTSUdTVEtGTFQ6IHNpZ25hbF9uYW1lID0gIlNJR1NUS0ZMVCI7ICBicmVhazsKKyAgICBjYXNlIFNJR1NUS0ZMVDoKKyAgICAgIHNpZ25hbF9uYW1lID0gIlNJR1NUS0ZMVCI7CisgICAgICBicmVhazsKICNlbmRpZgotICAgICAgICBjYXNlIFNJR1BJUEU6ICAgc2lnbmFsX25hbWUgPSAiU0lHUElQRSI7ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAgICAgc2lnbmFsX25hbWUgPSAiPz8/IjsgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBjYXNlIFNJR1RSQVA6CisgICAgICBzaWduYWxfbmFtZSA9ICJTSUdUUkFQIjsKKyAgICAgIGJyZWFrOworICB9CiAKLSAgICBjaGFyIHRocmVhZF9uYW1lW01BWF9UQVNLX05BTUVfTEVOICsgMV07IC8vIG9uZSBtb3JlIGZvciB0ZXJtaW5hdGlvbgotICAgIGlmIChwcmN0bChQUl9HRVRfTkFNRSwgKHVuc2lnbmVkIGxvbmcpdGhyZWFkX25hbWUsIDAsIDAsIDApICE9IDApIHsKLSAgICAgICAgc3RyY3B5KHRocmVhZF9uYW1lLCAiPG5hbWUgdW5rbm93bj4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBzaG9ydCBuYW1lcyBhcmUgbnVsbCB0ZXJtaW5hdGVkIGJ5IHByY3RsLCBidXQgdGhlIG1hbiBwYWdlCi0gICAgICAgIC8vIGltcGxpZXMgdGhhdCAxNiBieXRlIG5hbWVzIGFyZSBub3QuCi0gICAgICAgIHRocmVhZF9uYW1lW01BWF9UQVNLX05BTUVfTEVOXSA9IDA7Ci0gICAgfQorICBjaGFyIHRocmVhZF9uYW1lW01BWF9UQVNLX05BTUVfTEVOICsgMV07IC8vIG9uZSBtb3JlIGZvciB0ZXJtaW5hdGlvbgorICBpZiAocHJjdGwoUFJfR0VUX05BTUUsICh1bnNpZ25lZCBsb25nKXRocmVhZF9uYW1lLCAwLCAwLCAwKSAhPSAwKSB7CisgICAgc3RyY3B5KHRocmVhZF9uYW1lLCAiPG5hbWUgdW5rbm93bj4iKTsKKyAgfSBlbHNlIHsKKyAgICAvLyBzaG9ydCBuYW1lcyBhcmUgbnVsbCB0ZXJtaW5hdGVkIGJ5IHByY3RsLCBidXQgdGhlIG1hbiBwYWdlCisgICAgLy8gaW1wbGllcyB0aGF0IDE2IGJ5dGUgbmFtZXMgYXJlIG5vdC4KKyAgICB0aHJlYWRfbmFtZVtNQVhfVEFTS19OQU1FX0xFTl0gPSAwOworICB9CiAKLSAgICAvLyAiaW5mbyIgd2lsbCBiZSBOVUxMIGlmIHRoZSBzaWdpbmZvX3QgaW5mb3JtYXRpb24gd2FzIG5vdCBhdmFpbGFibGUuCi0gICAgaWYgKGluZm8gIT0gTlVMTCkgewotICAgICAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19GQVRBTCwgImxpYmMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiRmF0YWwgc2lnbmFsICVkICglcykgYXQgJXAgKGNvZGU9JWQpLCB0aHJlYWQgJWQgKCVzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ251bSwgc2lnbmFsX25hbWUsIGluZm8tPnNpX2FkZHIsIGluZm8tPnNpX2NvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRpZCgpLCB0aHJlYWRfbmFtZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfRkFUQUwsICJsaWJjIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhdGFsIHNpZ25hbCAlZCAoJXMpLCB0aHJlYWQgJWQgKCVzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ251bSwgc2lnbmFsX25hbWUsIGdldHRpZCgpLCB0aHJlYWRfbmFtZSk7CisgIC8vICJpbmZvIiB3aWxsIGJlIE5VTEwgaWYgdGhlIHNpZ2luZm9fdCBpbmZvcm1hdGlvbiB3YXMgbm90IGF2YWlsYWJsZS4KKyAgLy8gTWFueSBzaWduYWxzIGRvbid0IGhhdmUgYW4gYWRkcmVzcyBvciBhIGNvZGUuCisgIGNoYXIgY29kZV9kZXNjWzMyXTsgLy8gIiwgY29kZSAtNiIKKyAgY2hhciBhZGRyX2Rlc2NbMzJdOyAvLyAiLCBmYXVsdCBhZGRyIDB4MTIzNCIKKyAgYWRkcl9kZXNjWzBdID0gY29kZV9kZXNjWzBdID0gMDsKKyAgaWYgKGluZm8gIT0gTlVMTCkgeworICAgIC8vIEZvciBhIHJldGhyb3duIHNpZ25hbCwgdGhpcyBzaV9jb2RlIHdpbGwgYmUgcmlnaHQgYW5kIHRoZSBvbmUgZGVidWdnZXJkIHNob3dzIHdpbGwKKyAgICAvLyBhbHdheXMgYmUgU0lfVEtJTEwuCisgICAgX19saWJjX2Zvcm1hdF9idWZmZXIoY29kZV9kZXNjLCBzaXplb2YoY29kZV9kZXNjKSwgIiwgY29kZSAlZCIsIGluZm8tPnNpX2NvZGUpOworICAgIGlmIChoYXNfYWRkcmVzcykgeworICAgICAgX19saWJjX2Zvcm1hdF9idWZmZXIoYWRkcl9kZXNjLCBzaXplb2YoYWRkcl9kZXNjKSwgIiwgZmF1bHQgYWRkciAlcCIsIGluZm8tPnNpX2FkZHIpOwogICAgIH0KKyAgfQorICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19GQVRBTCwgImxpYmMiLAorICAgICAgICAgICAgICAgICAgICAiRmF0YWwgc2lnbmFsICVkICglcyklcyVzIGluIHRpZCAlZCAoJXMpIiwKKyAgICAgICAgICAgICAgICAgICAgc2lnbnVtLCBzaWduYWxfbmFtZSwgY29kZV9kZXNjLCBhZGRyX2Rlc2MsIGdldHRpZCgpLCB0aHJlYWRfbmFtZSk7CiB9CiAKIC8qCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGhhbmRsZXIgZm9yIHNpZ25hbCAic2lnbnVtIiBoYXMgU0FfU0lHSU5GTyBzZXQuCiAgKi8KIHN0YXRpYyBib29sIGhhdmVfc2lnaW5mbyhpbnQgc2lnbnVtKSB7Ci0gICAgc3RydWN0IHNpZ2FjdGlvbiBvbGRfYWN0aW9uLCBuZXdfYWN0aW9uOworICBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZF9hY3Rpb24sIG5ld19hY3Rpb247CiAKLSAgICBtZW1zZXQoJm5ld19hY3Rpb24sIDAsIHNpemVvZihuZXdfYWN0aW9uKSk7Ci0gICAgbmV3X2FjdGlvbi5zYV9oYW5kbGVyID0gU0lHX0RGTDsKLSAgICBuZXdfYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVTVEFSVDsKLSAgICBzaWdlbXB0eXNldCgmbmV3X2FjdGlvbi5zYV9tYXNrKTsKKyAgbWVtc2V0KCZuZXdfYWN0aW9uLCAwLCBzaXplb2YobmV3X2FjdGlvbikpOworICBuZXdfYWN0aW9uLnNhX2hhbmRsZXIgPSBTSUdfREZMOworICBuZXdfYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVTVEFSVDsKKyAgc2lnZW1wdHlzZXQoJm5ld19hY3Rpb24uc2FfbWFzayk7CiAKLSAgICBpZiAoc2lnYWN0aW9uKHNpZ251bSwgJm5ld19hY3Rpb24sICZvbGRfYWN0aW9uKSA8IDApIHsKLSAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX1dBUk4sICJsaWJjIiwgIkZhaWxlZCB0ZXN0aW5nIGZvciBTQV9TSUdJTkZPOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBib29sIHJlc3VsdCA9IChvbGRfYWN0aW9uLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykgIT0gMDsKKyAgaWYgKHNpZ2FjdGlvbihzaWdudW0sICZuZXdfYWN0aW9uLCAmb2xkX2FjdGlvbikgPCAwKSB7CisgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfV0FSTiwgImxpYmMiLCAiRmFpbGVkIHRlc3RpbmcgZm9yIFNBX1NJR0lORk86ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBib29sIHJlc3VsdCA9IChvbGRfYWN0aW9uLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykgIT0gMDsKIAotICAgIGlmIChzaWdhY3Rpb24oc2lnbnVtLCAmb2xkX2FjdGlvbiwgTlVMTCkgPT0gLTEpIHsKLSAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX1dBUk4sICJsaWJjIiwgIlJlc3RvcmUgZmFpbGVkIGluIHRlc3QgZm9yIFNBX1NJR0lORk86ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgIGlmIChzaWdhY3Rpb24oc2lnbnVtLCAmb2xkX2FjdGlvbiwgTlVMTCkgPT0gLTEpIHsKKyAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19XQVJOLCAibGliYyIsICJSZXN0b3JlIGZhaWxlZCBpbiB0ZXN0IGZvciBTQV9TSUdJTkZPOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBzZW5kX2RlYnVnZ2VyZF9wYWNrZXQoc2lnaW5mb190KiBpbmZvKSB7CisgIGlmIChwcmN0bChQUl9HRVRfRFVNUEFCTEUsIDAsIDAsIDAsIDApID09IDApIHsKKyAgICAvLyBwcm9jZXNzIGhhcyBkaXNhYmxlZCBjb3JlIGR1bXBzIGFuZCBQVFJBQ0VfQVRUQUNILCBhbmQgZG9lcyBub3Qgd2FudCB0byBiZSBkdW1wZWQuCisgICAgLy8gSG9ub3IgdGhhdCBpbnRlbnRpb24gYnkgbm90IGNvbm5lY3RpbmcgdG8gZGVidWdnZXJkIGFuZCBhc2tpbmcgaXQKKyAgICAvLyB0byBkdW1wIG91ciBpbnRlcm5hbCBzdGF0ZS4KKyAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19JTkZPLCAibGliYyIsCisgICAgICAgICAgICAgICAgICAgICAgIlN1cHByZXNzaW5nIGRlYnVnZ2VyZCBvdXRwdXQgYmVjYXVzZSBwcmN0bChQUl9HRVRfRFVNUEFCTEUpPT0wIik7CisgICAgcmV0dXJuOworICB9CisKKyAgaW50IHMgPSBzb2NrZXRfYWJzdHJhY3RfY2xpZW50KERFQlVHR0VSX1NPQ0tFVF9OQU1FLCBTT0NLX1NUUkVBTSk7CisgIGlmIChzID09IC0xKSB7CisgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfRkFUQUwsICJsaWJjIiwgIlVuYWJsZSB0byBvcGVuIGNvbm5lY3Rpb24gdG8gZGVidWdnZXJkOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgICByZXR1cm47CisgIH0KKworICAvLyBkZWJ1Z2dlcmQga25vd3Mgb3VyIHBpZCBmcm9tIHRoZSBjcmVkZW50aWFscyBvbiB0aGUKKyAgLy8gbG9jYWwgc29ja2V0IGJ1dCB3ZSBuZWVkIHRvIHRlbGwgaXQgdGhlIHRpZCBvZiB0aGUgY3Jhc2hpbmcgdGhyZWFkLgorICAvLyBkZWJ1Z2dlcmQgd2lsbCBiZSBwYXJhbm9pZCBhbmQgdmVyaWZ5IHRoYXQgd2Ugc2VudCBhIHRpZAorICAvLyB0aGF0J3MgYWN0dWFsbHkgaW4gb3VyIHByb2Nlc3MuCisgIGRlYnVnZ2VyX21zZ190IG1zZzsKKyAgbXNnLmFjdGlvbiA9IERFQlVHR0VSX0FDVElPTl9DUkFTSDsKKyAgbXNnLnRpZCA9IGdldHRpZCgpOworICBtc2cuYWJvcnRfbXNnX2FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZ19hYm9ydF9tZXNzYWdlKTsKKyAgbXNnLm9yaWdpbmFsX3NpX2NvZGUgPSAoaW5mbyAhPSBOVUxMKSA/IGluZm8tPnNpX2NvZGUgOiAwOworICBpbnQgcmV0ID0gVEVNUF9GQUlMVVJFX1JFVFJZKHdyaXRlKHMsICZtc2csIHNpemVvZihtc2cpKSk7CisgIGlmIChyZXQgPT0gc2l6ZW9mKG1zZykpIHsKKyAgICBjaGFyIGRlYnVnZ2VyZF9hY2s7CisgICAgcmV0ID0gVEVNUF9GQUlMVVJFX1JFVFJZKHJlYWQocywgJmRlYnVnZ2VyZF9hY2ssIDEpKTsKKyAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICBub3RpZnlfZ2RiX29mX2xpYnJhcmllcygpOworICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgIH0gZWxzZSB7CisgICAgLy8gcmVhZCBvciB3cml0ZSBmYWlsZWQgLS0gYnJva2VuIGNvbm5lY3Rpb24/CisgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfRkFUQUwsICJsaWJjIiwgIkZhaWxlZCB3aGlsZSB0YWxraW5nIHRvIGRlYnVnZ2VyZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgIH0KKworICBjbG9zZShzKTsKIH0KIAogLyoKICAqIENhdGNoZXMgZmF0YWwgc2lnbmFscyBzbyB3ZSBjYW4gYXNrIGRlYnVnZ2VyZCB0byBwdHJhY2UgdXMgYmVmb3JlCiAgKiB3ZSBjcmFzaC4KICAqLwotdm9pZCBkZWJ1Z2dlcmRfc2lnbmFsX2hhbmRsZXIoaW50IG4sIHNpZ2luZm9fdCogaW5mbywgdm9pZCopIHsKLSAgICAvKgotICAgICAqIEl0J3MgcG9zc2libGUgc29tZWJvZHkgY2xlYXJlZCB0aGUgU0FfU0lHSU5GTyBmbGFnLCB3aGljaCB3b3VsZCBtZWFuCi0gICAgICogb3VyICJpbmZvIiBhcmcgaG9sZHMgYW4gdW5kZWZpbmVkIHZhbHVlLgotICAgICAqLwotICAgIGlmICghaGF2ZV9zaWdpbmZvKG4pKSB7Ci0gICAgICAgIGluZm8gPSBOVUxMOwotICAgIH0KK3N0YXRpYyB2b2lkIGRlYnVnZ2VyZF9zaWduYWxfaGFuZGxlcihpbnQgc2lnbmFsX251bWJlciwgc2lnaW5mb190KiBpbmZvLCB2b2lkKikgeworICAvLyBJdCdzIHBvc3NpYmxlIHNvbWVib2R5IGNsZWFyZWQgdGhlIFNBX1NJR0lORk8gZmxhZywgd2hpY2ggd291bGQgbWVhbgorICAvLyBvdXIgImluZm8iIGFyZyBob2xkcyBhbiB1bmRlZmluZWQgdmFsdWUuCisgIGlmICghaGF2ZV9zaWdpbmZvKHNpZ25hbF9udW1iZXIpKSB7CisgICAgaW5mbyA9IE5VTEw7CisgIH0KIAotICAgIGxvZ19zaWduYWxfc3VtbWFyeShuLCBpbmZvKTsKKyAgbG9nX3NpZ25hbF9zdW1tYXJ5KHNpZ25hbF9udW1iZXIsIGluZm8pOwogCi0gICAgcGlkX3QgdGlkID0gZ2V0dGlkKCk7Ci0gICAgaW50IHMgPSBzb2NrZXRfYWJzdHJhY3RfY2xpZW50KERFQlVHR0VSX1NPQ0tFVF9OQU1FLCBTT0NLX1NUUkVBTSk7CisgIHNlbmRfZGVidWdnZXJkX3BhY2tldChpbmZvKTsKIAotICAgIGlmIChzID49IDApIHsKLSAgICAgICAgLy8gZGVidWdnZXJkIGtub3dzIG91ciBwaWQgZnJvbSB0aGUgY3JlZGVudGlhbHMgb24gdGhlCi0gICAgICAgIC8vIGxvY2FsIHNvY2tldCBidXQgd2UgbmVlZCB0byB0ZWxsIGl0IHRoZSB0aWQgb2YgdGhlIGNyYXNoaW5nIHRocmVhZC4KLSAgICAgICAgLy8gZGVidWdnZXJkIHdpbGwgYmUgcGFyYW5vaWQgYW5kIHZlcmlmeSB0aGF0IHdlIHNlbnQgYSB0aWQKLSAgICAgICAgLy8gdGhhdCdzIGFjdHVhbGx5IGluIG91ciBwcm9jZXNzLgotICAgICAgICBkZWJ1Z2dlcl9tc2dfdCBtc2c7Ci0gICAgICAgIG1zZy5hY3Rpb24gPSBERUJVR0dFUl9BQ1RJT05fQ1JBU0g7Ci0gICAgICAgIG1zZy50aWQgPSB0aWQ7Ci0gICAgICAgIG1zZy5hYm9ydF9tc2dfYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihnQWJvcnRNZXNzYWdlKTsKLSAgICAgICAgaW50IHJldCA9IFRFTVBfRkFJTFVSRV9SRVRSWSh3cml0ZShzLCAmbXNnLCBzaXplb2YobXNnKSkpOwotICAgICAgICBpZiAocmV0ID09IHNpemVvZihtc2cpKSB7Ci0gICAgICAgICAgICAvLyBpZiB0aGUgd3JpdGUgZmFpbGVkLCB0aGVyZSBpcyBubyBwb2ludCB0cnlpbmcgdG8gcmVhZCBhIHJlc3BvbnNlLgotICAgICAgICAgICAgcmV0ID0gVEVNUF9GQUlMVVJFX1JFVFJZKHJlYWQocywgJnRpZCwgMSkpOwotICAgICAgICAgICAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87Ci0gICAgICAgICAgICBub3RpZnlfZ2RiX29mX2xpYnJhcmllcygpOwotICAgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKLSAgICAgICAgfQorICAvLyBSZW1vdmUgb3VyIG5ldCBzbyB3ZSBmYXVsdCBmb3IgcmVhbCB3aGVuIHdlIHJldHVybi4KKyAgc2lnbmFsKHNpZ25hbF9udW1iZXIsIFNJR19ERkwpOwogCi0gICAgICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgICAgICAvKiByZWFkIG9yIHdyaXRlIGZhaWxlZCAtLSBicm9rZW4gY29ubmVjdGlvbj8gKi8KLSAgICAgICAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0ZBVEFMLCAibGliYyIsICJGYWlsZWQgd2hpbGUgdGFsa2luZyB0byBkZWJ1Z2dlcmQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjbG9zZShzKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvKiBzb2NrZXQgZmFpbGVkOyBtYXliZSBwcm9jZXNzIHJhbiBvdXQgb2YgZmRzICovCi0gICAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0ZBVEFMLCAibGliYyIsICJVbmFibGUgdG8gb3BlbiBjb25uZWN0aW9uIHRvIGRlYnVnZ2VyZDogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOwotICAgIH0KLQotICAgIC8qIHJlbW92ZSBvdXIgbmV0IHNvIHdlIGZhdWx0IGZvciByZWFsIHdoZW4gd2UgcmV0dXJuICovCi0gICAgc2lnbmFsKG4sIFNJR19ERkwpOwotCi0gICAgLyoKLSAgICAgKiBUaGVzZSBzaWduYWxzIGFyZSBub3QgcmUtdGhyb3duIHdoZW4gd2UgcmVzdW1lLiAgVGhpcyBtZWFucyB0aGF0Ci0gICAgICogY3Jhc2hpbmcgZHVlIHRvIChzYXkpIFNJR1BJUEUgZG9lc24ndCB3b3JrIHRoZSB3YXkgeW91J2QgZXhwZWN0IGl0Ci0gICAgICogdG8uICBXZSB3b3JrIGFyb3VuZCB0aGlzIGJ5IHRocm93aW5nIHRoZW0gbWFudWFsbHkuICBXZSBkb24ndCB3YW50Ci0gICAgICogdG8gZG8gdGhpcyBmb3IgKmFsbCogc2lnbmFscyBiZWNhdXNlIGl0J2xsIHNjcmV3IHVwIHRoZSBhZGRyZXNzIGZvcgotICAgICAqIGZhdWx0cyBsaWtlIFNJR1NFR1YuCi0gICAgICovCi0gICAgc3dpdGNoIChuKSB7Ci0gICAgICAgIGNhc2UgU0lHQUJSVDoKLSAgICAgICAgY2FzZSBTSUdGUEU6Ci0gICAgICAgIGNhc2UgU0lHUElQRToKKyAgLy8gVGhlc2Ugc2lnbmFscyBhcmUgbm90IHJlLXRocm93biB3aGVuIHdlIHJlc3VtZS4gIFRoaXMgbWVhbnMgdGhhdAorICAvLyBjcmFzaGluZyBkdWUgdG8gKHNheSkgU0lHUElQRSBkb2Vzbid0IHdvcmsgdGhlIHdheSB5b3UnZCBleHBlY3QgaXQKKyAgLy8gdG8uICBXZSB3b3JrIGFyb3VuZCB0aGlzIGJ5IHRocm93aW5nIHRoZW0gbWFudWFsbHkuICBXZSBkb24ndCB3YW50CisgIC8vIHRvIGRvIHRoaXMgZm9yICphbGwqIHNpZ25hbHMgYmVjYXVzZSBpdCdsbCBzY3JldyB1cCB0aGUgc2lfYWRkciBmb3IKKyAgLy8gZmF1bHRzIGxpa2UgU0lHU0VHVi4gSXQgZG9lcyBzY3JldyB1cCB0aGUgc2lfY29kZSwgd2hpY2ggaXMgd2h5IHdlCisgIC8vIHBhc3NlZCB0aGF0IHRvIGRlYnVnZ2VyZCBhYm92ZS4KKyAgc3dpdGNoIChzaWduYWxfbnVtYmVyKSB7CisgICAgY2FzZSBTSUdBQlJUOgorICAgIGNhc2UgU0lHRlBFOgorICAgIGNhc2UgU0lHUElQRToKICNpZiBkZWZpbmVkKFNJR1NUS0ZMVCkKLSAgICAgICAgY2FzZSBTSUdTVEtGTFQ6CisgICAgY2FzZSBTSUdTVEtGTFQ6CiAjZW5kaWYKLSAgICAgICAgICAgICh2b2lkKSB0Z2tpbGwoZ2V0cGlkKCksIGdldHRpZCgpLCBuKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAvLyBTSUdJTEwsIFNJR0JVUywgU0lHU0VHVgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGNhc2UgU0lHVFJBUDoKKyAgICAgIHRna2lsbChnZXRwaWQoKSwgZ2V0dGlkKCksIHNpZ25hbF9udW1iZXIpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogICAgLy8gU0lHSUxMLCBTSUdCVVMsIFNJR1NFR1YKKyAgICAgIGJyZWFrOworICB9CiB9CiAKLXZvaWQgZGVidWdnZXJkX2luaXQoKSB7Ci0gICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Ci0gICAgbWVtc2V0KCZhY3Rpb24sIDAsIHNpemVvZihhY3Rpb24pKTsKLSAgICBzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBkZWJ1Z2dlcmRfc2lnbmFsX2hhbmRsZXI7Ci0gICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lORk87CitfX0xJQkNfSElEREVOX18gdm9pZCBkZWJ1Z2dlcmRfaW5pdCgpIHsKKyAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247CisgIG1lbXNldCgmYWN0aW9uLCAwLCBzaXplb2YoYWN0aW9uKSk7CisgIHNpZ2VtcHR5c2V0KCZhY3Rpb24uc2FfbWFzayk7CisgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBkZWJ1Z2dlcmRfc2lnbmFsX2hhbmRsZXI7CisgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1JFU1RBUlQgfCBTQV9TSUdJTkZPOwogCi0gICAgLy8gVXNlIHRoZSBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrIGlmIGF2YWlsYWJsZSBzbyB3ZSBjYW4gY2F0Y2ggc3RhY2sgb3ZlcmZsb3dzLgotICAgIGFjdGlvbi5zYV9mbGFncyB8PSBTQV9PTlNUQUNLOworICAvLyBVc2UgdGhlIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgaWYgYXZhaWxhYmxlIHNvIHdlIGNhbiBjYXRjaCBzdGFjayBvdmVyZmxvd3MuCisgIGFjdGlvbi5zYV9mbGFncyB8PSBTQV9PTlNUQUNLOwogCi0gICAgc2lnYWN0aW9uKFNJR0FCUlQsICZhY3Rpb24sIE5VTEwpOwotICAgIHNpZ2FjdGlvbihTSUdCVVMsICZhY3Rpb24sIE5VTEwpOwotICAgIHNpZ2FjdGlvbihTSUdGUEUsICZhY3Rpb24sIE5VTEwpOwotICAgIHNpZ2FjdGlvbihTSUdJTEwsICZhY3Rpb24sIE5VTEwpOwotICAgIHNpZ2FjdGlvbihTSUdQSVBFLCAmYWN0aW9uLCBOVUxMKTsKLSAgICBzaWdhY3Rpb24oU0lHU0VHViwgJmFjdGlvbiwgTlVMTCk7CisgIHNpZ2FjdGlvbihTSUdBQlJULCAmYWN0aW9uLCBOVUxMKTsKKyAgc2lnYWN0aW9uKFNJR0JVUywgJmFjdGlvbiwgTlVMTCk7CisgIHNpZ2FjdGlvbihTSUdGUEUsICZhY3Rpb24sIE5VTEwpOworICBzaWdhY3Rpb24oU0lHSUxMLCAmYWN0aW9uLCBOVUxMKTsKKyAgc2lnYWN0aW9uKFNJR1BJUEUsICZhY3Rpb24sIE5VTEwpOworICBzaWdhY3Rpb24oU0lHU0VHViwgJmFjdGlvbiwgTlVMTCk7CiAjaWYgZGVmaW5lZChTSUdTVEtGTFQpCi0gICAgc2lnYWN0aW9uKFNJR1NUS0ZMVCwgJmFjdGlvbiwgTlVMTCk7CisgIHNpZ2FjdGlvbihTSUdTVEtGTFQsICZhY3Rpb24sIE5VTEwpOwogI2VuZGlmCi0gICAgc2lnYWN0aW9uKFNJR1RSQVAsICZhY3Rpb24sIE5VTEwpOworICBzaWdhY3Rpb24oU0lHVFJBUCwgJmFjdGlvbiwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9saW5rZXIvZGxmY24uY3BwIGIvbGlua2VyL2RsZmNuLmNwcAppbmRleCAxZTlkOWJjLi41ZDZkYjhlIDEwMDY0NAotLS0gYS9saW5rZXIvZGxmY24uY3BwCisrKyBiL2xpbmtlci9kbGZjbi5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2RsZXh0Lmg+CiAKICNpbmNsdWRlIDxiaW9uaWMvcHRocmVhZF9pbnRlcm5hbC5oPgogI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX3Rscy5oIgpAQCAtMjgsNyArMjksNyBAQAogCiAvKiBUaGlzIGZpbGUgaGlqYWNrcyB0aGUgc3ltYm9scyBzdHViYmVkIG91dCBpbiBsaWJkbC5zby4gKi8KIAotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnRGxNdXRleCA9IFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnX2RsX211dGV4ID0gUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVI7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBfX2Jpb25pY19zZXRfZGxlcnJvcihjaGFyKiBuZXdfdmFsdWUpIHsKICAgY2hhcioqIGRsZXJyb3Jfc2xvdCA9ICZyZWludGVycHJldF9jYXN0PGNoYXIqKj4oX19nZXRfdGxzKCkpW1RMU19TTE9UX0RMRVJST1JdOwpAQCAtNTUsMTggKzU2LDE4IEBACiB9CiAKIHZvaWQgYW5kcm9pZF9nZXRfTERfTElCUkFSWV9QQVRIKGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplKSB7Ci0gIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdEbE11dGV4KTsKKyAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ19kbF9tdXRleCk7CiAgIGRvX2FuZHJvaWRfZ2V0X0xEX0xJQlJBUllfUEFUSChidWZmZXIsIGJ1ZmZlcl9zaXplKTsKIH0KIAogdm9pZCBhbmRyb2lkX3VwZGF0ZV9MRF9MSUJSQVJZX1BBVEgoY29uc3QgY2hhciogbGRfbGlicmFyeV9wYXRoKSB7Ci0gIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdEbE11dGV4KTsKKyAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ19kbF9tdXRleCk7CiAgIGRvX2FuZHJvaWRfdXBkYXRlX0xEX0xJQlJBUllfUEFUSChsZF9saWJyYXJ5X3BhdGgpOwogfQogCi12b2lkKiBkbG9wZW4oY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBmbGFncykgewotICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnRGxNdXRleCk7Ci0gIHNvaW5mbyogcmVzdWx0ID0gZG9fZGxvcGVuKGZpbGVuYW1lLCBmbGFncyk7CitzdGF0aWMgdm9pZCogZGxvcGVuX2V4dChjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGZsYWdzLCBjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbykgeworICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnX2RsX211dGV4KTsKKyAgc29pbmZvKiByZXN1bHQgPSBkb19kbG9wZW4oZmlsZW5hbWUsIGZsYWdzLCBleHRpbmZvKTsKICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CiAgICAgX19iaW9uaWNfZm9ybWF0X2RsZXJyb3IoImRsb3BlbiBmYWlsZWQiLCBsaW5rZXJfZ2V0X2Vycm9yX2J1ZmZlcigpKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTc0LDM5ICs3NSw0OSBAQAogICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkKiBkbHN5bSh2b2lkKiBoYW5kbGUsIGNvbnN0IGNoYXIqIHN5bWJvbCkgewotICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnRGxNdXRleCk7Cit2b2lkKiBhbmRyb2lkX2Rsb3Blbl9leHQoY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBmbGFncywgY29uc3QgYW5kcm9pZF9kbGV4dGluZm8qIGV4dGluZm8pIHsKKyAgcmV0dXJuIGRsb3Blbl9leHQoZmlsZW5hbWUsIGZsYWdzLCBleHRpbmZvKTsKK30KIAordm9pZCogZGxvcGVuKGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgZmxhZ3MpIHsKKyAgcmV0dXJuIGRsb3Blbl9leHQoZmlsZW5hbWUsIGZsYWdzLCBOVUxMKTsKK30KKwordm9pZCogZGxzeW0odm9pZCogaGFuZGxlLCBjb25zdCBjaGFyKiBzeW1ib2wpIHsKKyAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ19kbF9tdXRleCk7CisKKyNpZiAhZGVmaW5lZChfX0xQNjRfXykKICAgaWYgKGhhbmRsZSA9PSBOVUxMKSB7CiAgICAgX19iaW9uaWNfZm9ybWF0X2RsZXJyb3IoImRsc3ltIGxpYnJhcnkgaGFuZGxlIGlzIG51bGwiLCBOVUxMKTsKICAgICByZXR1cm4gTlVMTDsKICAgfQorI2VuZGlmCisKICAgaWYgKHN5bWJvbCA9PSBOVUxMKSB7CiAgICAgX19iaW9uaWNfZm9ybWF0X2RsZXJyb3IoImRsc3ltIHN5bWJvbCBuYW1lIGlzIG51bGwiLCBOVUxMKTsKICAgICByZXR1cm4gTlVMTDsKICAgfQogCiAgIHNvaW5mbyogZm91bmQgPSBOVUxMOwotICBFbGZfU3ltKiBzeW0gPSBOVUxMOworICBFbGZXKFN5bSkqIHN5bSA9IE5VTEw7CiAgIGlmIChoYW5kbGUgPT0gUlRMRF9ERUZBVUxUKSB7CiAgICAgc3ltID0gZGxzeW1fbGluZWFyX2xvb2t1cChzeW1ib2wsICZmb3VuZCwgTlVMTCk7CiAgIH0gZWxzZSBpZiAoaGFuZGxlID09IFJUTERfTkVYVCkgewotICAgIHZvaWQqIHJldF9hZGRyID0gX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOwotICAgIHNvaW5mbyogc2kgPSBmaW5kX2NvbnRhaW5pbmdfbGlicmFyeShyZXRfYWRkcik7CisgICAgdm9pZCogY2FsbGVyX2FkZHIgPSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisgICAgc29pbmZvKiBzaSA9IGZpbmRfY29udGFpbmluZ19saWJyYXJ5KGNhbGxlcl9hZGRyKTsKIAogICAgIHN5bSA9IE5VTEw7CiAgICAgaWYgKHNpICYmIHNpLT5uZXh0KSB7CiAgICAgICBzeW0gPSBkbHN5bV9saW5lYXJfbG9va3VwKHN5bWJvbCwgJmZvdW5kLCBzaS0+bmV4dCk7CiAgICAgfQogICB9IGVsc2UgewotICAgIGZvdW5kID0gcmVpbnRlcnByZXRfY2FzdDxzb2luZm8qPihoYW5kbGUpOwotICAgIHN5bSA9IGRsc3ltX2hhbmRsZV9sb29rdXAoZm91bmQsIHN5bWJvbCk7CisgICAgc3ltID0gZGxzeW1faGFuZGxlX2xvb2t1cChyZWludGVycHJldF9jYXN0PHNvaW5mbyo+KGhhbmRsZSksICZmb3VuZCwgc3ltYm9sKTsKICAgfQogCiAgIGlmIChzeW0gIT0gTlVMTCkgewogICAgIHVuc2lnbmVkIGJpbmQgPSBFTEZfU1RfQklORChzeW0tPnN0X2luZm8pOwogCi0gICAgaWYgKGJpbmQgPT0gU1RCX0dMT0JBTCAmJiBzeW0tPnN0X3NobmR4ICE9IDApIHsKKyAgICBpZiAoKGJpbmQgPT0gU1RCX0dMT0JBTCB8fCBiaW5kID09IFNUQl9XRUFLKSAmJiBzeW0tPnN0X3NobmR4ICE9IDApIHsKICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihzeW0tPnN0X3ZhbHVlICsgZm91bmQtPmxvYWRfYmlhcyk7CiAgICAgfQogCkBAIC0xMTksNyArMTMwLDcgQEAKIH0KIAogaW50IGRsYWRkcihjb25zdCB2b2lkKiBhZGRyLCBEbF9pbmZvKiBpbmZvKSB7Ci0gIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdEbE11dGV4KTsKKyAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ19kbF9tdXRleCk7CiAKICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgYWRkcmVzcyBjYW4gYmUgZm91bmQgaW4gYW55IGxpYnJhcnkgY3VycmVudGx5IG1hcHBlZC4KICAgc29pbmZvKiBzaSA9IGZpbmRfY29udGFpbmluZ19saWJyYXJ5KGFkZHIpOwpAQCAtMTMxLDIxICsxNDIsMjMgQEAKIAogICBpbmZvLT5kbGlfZm5hbWUgPSBzaS0+bmFtZTsKICAgLy8gQWRkcmVzcyBhdCB3aGljaCB0aGUgc2hhcmVkIG9iamVjdCBpcyBsb2FkZWQuCi0gIGluZm8tPmRsaV9mYmFzZSA9ICh2b2lkKikgc2ktPmJhc2U7CisgIGluZm8tPmRsaV9mYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNpLT5iYXNlKTsKIAogICAvLyBEZXRlcm1pbmUgaWYgYW55IHN5bWJvbCBpbiB0aGUgbGlicmFyeSBjb250YWlucyB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuCi0gIEVsZl9TeW0gKnN5bSA9IGRsYWRkcl9maW5kX3N5bWJvbChzaSwgYWRkcik7CisgIEVsZlcoU3ltKSogc3ltID0gZGxhZGRyX2ZpbmRfc3ltYm9sKHNpLCBhZGRyKTsKICAgaWYgKHN5bSAhPSBOVUxMKSB7CiAgICAgaW5mby0+ZGxpX3NuYW1lID0gc2ktPnN0cnRhYiArIHN5bS0+c3RfbmFtZTsKLSAgICBpbmZvLT5kbGlfc2FkZHIgPSAodm9pZCopKHNpLT5sb2FkX2JpYXMgKyBzeW0tPnN0X3ZhbHVlKTsKKyAgICBpbmZvLT5kbGlfc2FkZHIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzaS0+bG9hZF9iaWFzICsgc3ltLT5zdF92YWx1ZSk7CiAgIH0KIAogICByZXR1cm4gMTsKIH0KIAogaW50IGRsY2xvc2Uodm9pZCogaGFuZGxlKSB7Ci0gIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdEbE11dGV4KTsKLSAgcmV0dXJuIGRvX2RsY2xvc2UocmVpbnRlcnByZXRfY2FzdDxzb2luZm8qPihoYW5kbGUpKTsKKyAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ19kbF9tdXRleCk7CisgIGRvX2RsY2xvc2UocmVpbnRlcnByZXRfY2FzdDxzb2luZm8qPihoYW5kbGUpKTsKKyAgLy8gZGxjbG9zZSBoYXMgbm8gZGVmaW5lZCBlcnJvcnMuCisgIHJldHVybiAwOwogfQogCiAvLyBuYW1lX29mZnNldDogc3RhcnRpbmcgaW5kZXggb2YgdGhlIG5hbWUgaW4gbGliZGxfaW5mby5zdHJ0YWIKQEAgLTE2NywxMzUgKzE4MCw3NyBAQAogICAgICAgLyogc3Rfc2l6ZSAqLyAwLCBcCiAgICAgfQogCi0jaWYgZGVmaW5lZChfX0xQNjRfXykKLSMgIGRlZmluZSBFTEZfU1lNX0lOSVRJQUxJWkVSIEVMRjY0X1NZTV9JTklUSUFMSVpFUgotI2Vsc2UKLSMgIGRlZmluZSBFTEZfU1lNX0lOSVRJQUxJWkVSIEVMRjMyX1NZTV9JTklUSUFMSVpFUgotI2VuZGlmCi0KICNpZiBkZWZpbmVkKF9fYXJtX18pCi0gIC8vIDAwMDAwMDAgMDAwMTExMTEgMTExMTEyIDIyMjIyMjIyIDIzMzMzMzMgMzMzMzQ0NDQ0NDQ0NDQ1NTU1NTU1NTU1NjY2NjY2NiA2NjY3Nzc3Nzc3Nzc3ODg4ODg4ODg4ODk5OTk5IDk5OTk5MDAwMDAwMDAwMDEgMQotICAvLyAwMTIzNDU2IDc4OTAxMjM0IDU2Nzg5MCAxMjM0NTY3OCA5MDEyMzQ1IDY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYgNzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCA1Njc4OTAxMjM0NTY3ODkwIDEKKyAgLy8gMDAwMDAwMCAwMDAxMTExMSAxMTExMTIgMjIyMjIyMjIgMjMzMzMzMyAzMzMzNDQ0NDQ0NDQ0NDU1NTU1NTU1NTU2NjY2NjY2IDY2Njc3Nzc3Nzc3Nzc4ODg4ODg4ODg4OTk5OTkgOTk5OTkwMDAwMDAwMDAwMSAxMTExMTExMTEyMjIyMjIyMjIyIDMzMzMzMzMzMzM0NDQ0NDQ0NDQ0NQorICAvLyAwMTIzNDU2IDc4OTAxMjM0IDU2Nzg5MCAxMjM0NTY3OCA5MDEyMzQ1IDY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYgNzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCA1Njc4OTAxMjM0NTY3ODkwIDEyMzQ1Njc4OTAxMjM0NTY3ODkgMDEyMzQ1Njc4OTAxMjM0NTY3ODkwCiAjICBkZWZpbmUgQU5EUk9JRF9MSUJETF9TVFJUQUIgXAotICAgICJkbG9wZW5cMGRsY2xvc2VcMGRsc3ltXDBkbGVycm9yXDBkbGFkZHJcMGFuZHJvaWRfdXBkYXRlX0xEX0xJQlJBUllfUEFUSFwwYW5kcm9pZF9nZXRfTERfTElCUkFSWV9QQVRIXDBkbF9pdGVyYXRlX3BoZHJcMGRsX3Vud2luZF9maW5kX2V4aWR4XDAiCisgICAgImRsb3BlblwwZGxjbG9zZVwwZGxzeW1cMGRsZXJyb3JcMGRsYWRkclwwYW5kcm9pZF91cGRhdGVfTERfTElCUkFSWV9QQVRIXDBhbmRyb2lkX2dldF9MRF9MSUJSQVJZX1BBVEhcMGRsX2l0ZXJhdGVfcGhkclwwYW5kcm9pZF9kbG9wZW5fZXh0XDBkbF91bndpbmRfZmluZF9leGlkeFwwIgogI2VsaWYgZGVmaW5lZChfX2FhcmNoNjRfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQotICAvLyAwMDAwMDAwIDAwMDExMTExIDExMTExMiAyMjIyMjIyMiAyMzMzMzMzIDMzMzM0NDQ0NDQ0NDQ0NTU1NTU1NTU1NTY2NjY2NjYgNjY2Nzc3Nzc3Nzc3Nzg4ODg4ODg4ODg5OTk5OSA5OTk5OTAwMDAwMDAwMDAxIDEKLSAgLy8gMDEyMzQ1NiA3ODkwMTIzNCA1Njc4OTAgMTIzNDU2NzggOTAxMjM0NSA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2IDc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgNTY3ODkwMTIzNDU2Nzg5MCAxCisgIC8vIDAwMDAwMDAgMDAwMTExMTEgMTExMTEyIDIyMjIyMjIyIDIzMzMzMzMgMzMzMzQ0NDQ0NDQ0NDQ1NTU1NTU1NTU1NjY2NjY2NiA2NjY3Nzc3Nzc3Nzc3ODg4ODg4ODg4ODk5OTk5IDk5OTk5MDAwMDAwMDAwMDEgMTExMTExMTExMjIyMjIyMjIyMgorICAvLyAwMTIzNDU2IDc4OTAxMjM0IDU2Nzg5MCAxMjM0NTY3OCA5MDEyMzQ1IDY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYgNzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCA1Njc4OTAxMjM0NTY3ODkwIDEyMzQ1Njc4OTAxMjM0NTY3ODkKICMgIGRlZmluZSBBTkRST0lEX0xJQkRMX1NUUlRBQiBcCi0gICAgImRsb3BlblwwZGxjbG9zZVwwZGxzeW1cMGRsZXJyb3JcMGRsYWRkclwwYW5kcm9pZF91cGRhdGVfTERfTElCUkFSWV9QQVRIXDBhbmRyb2lkX2dldF9MRF9MSUJSQVJZX1BBVEhcMGRsX2l0ZXJhdGVfcGhkclwwIgorICAgICJkbG9wZW5cMGRsY2xvc2VcMGRsc3ltXDBkbGVycm9yXDBkbGFkZHJcMGFuZHJvaWRfdXBkYXRlX0xEX0xJQlJBUllfUEFUSFwwYW5kcm9pZF9nZXRfTERfTElCUkFSWV9QQVRIXDBkbF9pdGVyYXRlX3BoZHJcMGFuZHJvaWRfZGxvcGVuX2V4dFwwIgogI2Vsc2UKLSMgIGVycm9yIFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZS4gT25seSBhcm0sIGFybTY0LCBtaXBzLCB4ODYsIGFuZCB4ODZfNjQgYXJlIHByZXNlbnRseSBzdXBwb3J0ZWQuCisjICBlcnJvciBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUuIE9ubHkgYXJtLCBhcm02NCwgbWlwcywgbWlwczY0LCB4ODYgYW5kIHg4Nl82NCBhcmUgcHJlc2VudGx5IHN1cHBvcnRlZC4KICNlbmRpZgogCi1zdGF0aWMgRWxmX1N5bSBnTGliRGxTeW10YWJbXSA9IHsKK3N0YXRpYyBFbGZXKFN5bSkgZ19saWJkbF9zeW10YWJbXSA9IHsKICAgLy8gVG90YWwgbGVuZ3RoIG9mIGxpYmRsX2luZm8uc3RydGFiLCBpbmNsdWRpbmcgdHJhaWxpbmcgMC4KICAgLy8gVGhpcyBpcyBhY3R1YWxseSB0aGUgU1RIX1VOREVGIGVudHJ5LiBUZWNobmljYWxseSwgaXQncwogICAvLyBzdXBwb3NlZCB0byBoYXZlIHN0X25hbWUgPT0gMCwgYnV0IGluc3RlYWQsIGl0IHBvaW50cyB0byBhbiBpbmRleAogICAvLyBpbiB0aGUgc3RydGFiIHdpdGggYSBcMCB0byBtYWtlIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBzeW10YWIgZWFzaWVyLgotICBFTEZfU1lNX0lOSVRJQUxJWkVSKHNpemVvZihBTkRST0lEX0xJQkRMX1NUUlRBQikgLSAxLCBOVUxMLCAwKSwKLSAgRUxGX1NZTV9JTklUSUFMSVpFUiggIDAsICZkbG9wZW4sIDEpLAotICBFTEZfU1lNX0lOSVRJQUxJWkVSKCAgNywgJmRsY2xvc2UsIDEpLAotICBFTEZfU1lNX0lOSVRJQUxJWkVSKCAxNSwgJmRsc3ltLCAxKSwKLSAgRUxGX1NZTV9JTklUSUFMSVpFUiggMjEsICZkbGVycm9yLCAxKSwKLSAgRUxGX1NZTV9JTklUSUFMSVpFUiggMjksICZkbGFkZHIsIDEpLAotICBFTEZfU1lNX0lOSVRJQUxJWkVSKCAzNiwgJmFuZHJvaWRfdXBkYXRlX0xEX0xJQlJBUllfUEFUSCwgMSksCi0gIEVMRl9TWU1fSU5JVElBTElaRVIoIDY3LCAmYW5kcm9pZF9nZXRfTERfTElCUkFSWV9QQVRILCAxKSwKLSAgRUxGX1NZTV9JTklUSUFMSVpFUiggOTUsICZkbF9pdGVyYXRlX3BoZHIsIDEpLAorICBFTEZXKFNZTV9JTklUSUFMSVpFUikoc2l6ZW9mKEFORFJPSURfTElCRExfU1RSVEFCKSAtIDEsIE5VTEwsIDApLAorICBFTEZXKFNZTV9JTklUSUFMSVpFUikoICAwLCAmZGxvcGVuLCAxKSwKKyAgRUxGVyhTWU1fSU5JVElBTElaRVIpKCAgNywgJmRsY2xvc2UsIDEpLAorICBFTEZXKFNZTV9JTklUSUFMSVpFUikoIDE1LCAmZGxzeW0sIDEpLAorICBFTEZXKFNZTV9JTklUSUFMSVpFUikoIDIxLCAmZGxlcnJvciwgMSksCisgIEVMRlcoU1lNX0lOSVRJQUxJWkVSKSggMjksICZkbGFkZHIsIDEpLAorICBFTEZXKFNZTV9JTklUSUFMSVpFUikoIDM2LCAmYW5kcm9pZF91cGRhdGVfTERfTElCUkFSWV9QQVRILCAxKSwKKyAgRUxGVyhTWU1fSU5JVElBTElaRVIpKCA2NywgJmFuZHJvaWRfZ2V0X0xEX0xJQlJBUllfUEFUSCwgMSksCisgIEVMRlcoU1lNX0lOSVRJQUxJWkVSKSggOTUsICZkbF9pdGVyYXRlX3BoZHIsIDEpLAorICBFTEZXKFNZTV9JTklUSUFMSVpFUikoMTExLCAmYW5kcm9pZF9kbG9wZW5fZXh0LCAxKSwKICNpZiBkZWZpbmVkKF9fYXJtX18pCi0gIEVMRl9TWU1fSU5JVElBTElaRVIoMTExLCAmZGxfdW53aW5kX2ZpbmRfZXhpZHgsIDEpLAorICBFTEZXKFNZTV9JTklUSUFMSVpFUikoMTMwLCAmZGxfdW53aW5kX2ZpbmRfZXhpZHgsIDEpLAogI2VuZGlmCiB9OwogCiAvLyBGYWtlIG91dCBhIGhhc2ggdGFibGUgd2l0aCBhIHNpbmdsZSBidWNrZXQuCiAvLwotLy8gQSBzZWFyY2ggb2YgdGhlIGhhc2ggdGFibGUgd2lsbCBsb29rIHRocm91Z2ggZ0xpYkRsU3ltdGFiIHN0YXJ0aW5nIHdpdGggaW5kZXggMSwgdGhlbgotLy8gdXNlIGdMaWJEbENoYWlucyB0byBmaW5kIHRoZSBuZXh0IGluZGV4IHRvIGxvb2sgYXQuIGdMaWJEbENoYWlucyBzaG91bGQgYmUgc2V0IHVwIHRvCi0vLyB3YWxrIHRocm91Z2ggZXZlcnkgZWxlbWVudCBpbiBnTGliRGxTeW10YWIsIGFuZCB0aGVuIGVuZCB3aXRoIDAgKHNlbnRpbmVsIHZhbHVlKS4KKy8vIEEgc2VhcmNoIG9mIHRoZSBoYXNoIHRhYmxlIHdpbGwgbG9vayB0aHJvdWdoIGdfbGliZGxfc3ltdGFiIHN0YXJ0aW5nIHdpdGggaW5kZXggMSwgdGhlbgorLy8gdXNlIGdfbGliZGxfY2hhaW5zIHRvIGZpbmQgdGhlIG5leHQgaW5kZXggdG8gbG9vayBhdC4gZ19saWJkbF9jaGFpbnMgc2hvdWxkIGJlIHNldCB1cCB0bworLy8gd2FsayB0aHJvdWdoIGV2ZXJ5IGVsZW1lbnQgaW4gZ19saWJkbF9zeW10YWIsIGFuZCB0aGVuIGVuZCB3aXRoIDAgKHNlbnRpbmVsIHZhbHVlKS4KIC8vCi0vLyBUaGF0IGlzLCBnTGliRGxDaGFpbnMgc2hvdWxkIGxvb2sgbGlrZSB7IDAsIDIsIDMsIC4uLiBOLCAwIH0gd2hlcmUgTiBpcyB0aGUgbnVtYmVyCi0vLyBvZiBhY3R1YWwgc3ltYm9scywgb3IgbmVsZW1zKGdMaWJEbFN5bXRhYiktMSAoc2luY2UgdGhlIGZpcnN0IGVsZW1lbnQgb2YgZ0xpYkRsU3ltdGFiIGlzIG5vdAorLy8gVGhhdCBpcywgZ19saWJkbF9jaGFpbnMgc2hvdWxkIGxvb2sgbGlrZSB7IDAsIDIsIDMsIC4uLiBOLCAwIH0gd2hlcmUgTiBpcyB0aGUgbnVtYmVyCisvLyBvZiBhY3R1YWwgc3ltYm9scywgb3IgbmVsZW1zKGdfbGliZGxfc3ltdGFiKS0xIChzaW5jZSB0aGUgZmlyc3QgZWxlbWVudCBvZiBnX2xpYmRsX3N5bXRhYiBpcyBub3QKIC8vIGEgcmVhbCBzeW1ib2wpLiAoU2VlIHNvaW5mb19lbGZfbG9va3VwKCkuKQogLy8KIC8vIE5vdGUgdGhhdCBhZGRpbmcgYW55IG5ldyBzeW1ib2xzIGhlcmUgcmVxdWlyZXMgc3R1YmJpbmcgdGhlbSBvdXQgaW4gbGliZGwuCi1zdGF0aWMgdW5zaWduZWQgZ0xpYkRsQnVja2V0c1sxXSA9IHsgMSB9Oworc3RhdGljIHVuc2lnbmVkIGdfbGliZGxfYnVja2V0c1sxXSA9IHsgMSB9OwogI2lmIGRlZmluZWQoX19hcm1fXykKLXN0YXRpYyB1bnNpZ25lZCBnTGliRGxDaGFpbnNbXSA9IHsgMCwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMCB9Oworc3RhdGljIHVuc2lnbmVkIGdfbGliZGxfY2hhaW5zW10gPSB7IDAsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAwIH07CiAjZWxzZQotc3RhdGljIHVuc2lnbmVkIGdMaWJEbENoYWluc1tdID0geyAwLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCAwIH07CitzdGF0aWMgdW5zaWduZWQgZ19saWJkbF9jaGFpbnNbXSA9IHsgMCwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMCB9OwogI2VuZGlmCiAKKy8vIERlZmluZWQgYXMgZ2xvYmFsIGJlY2F1c2Ugd2UgZG8gbm90IHlldCBoYXZlIGFjY2VzcworLy8gdG8gc3luY2hyb25pemF0aW9uIGZ1bmN0aW9ucyBfX2N4YV9ndWFyZF8qIG5lZWRlZAorLy8gdG8gZGVmaW5lIHN0YXRpY3MgaW5zaWRlIGZ1bmN0aW9ucy4KK3N0YXRpYyBzb2luZm8gX19saWJkbF9pbmZvOworCiAvLyBUaGlzIGlzIHVzZWQgYnkgdGhlIGR5bmFtaWMgbGlua2VyLiBFdmVyeSBwcm9jZXNzIGdldHMgdGhlc2Ugc3ltYm9scyBmb3IgZnJlZS4KLXNvaW5mbyBsaWJkbF9pbmZvID0gewotICAgICJsaWJkbC5zbyIsCitzb2luZm8qIGdldF9saWJkbF9pbmZvKCkgeworICBpZiAoX19saWJkbF9pbmZvLm5hbWVbMF0gPT0gJ1wwJykgeworICAgIC8vIGluaXRpYWxpemUKKyAgICBzdHJuY3B5KF9fbGliZGxfaW5mby5uYW1lLCAibGliZGwuc28iLCBzaXplb2YoX19saWJkbF9pbmZvLm5hbWUpKTsKKyAgICBfX2xpYmRsX2luZm8uZmxhZ3MgPSBGTEFHX0xJTktFRCB8IEZMQUdfTkVXX1NPSU5GTzsKKyAgICBfX2xpYmRsX2luZm8uc3RydGFiID0gQU5EUk9JRF9MSUJETF9TVFJUQUI7CisgICAgX19saWJkbF9pbmZvLnN5bXRhYiA9IGdfbGliZGxfc3ltdGFiOworICAgIF9fbGliZGxfaW5mby5uYnVja2V0ID0gc2l6ZW9mKGdfbGliZGxfYnVja2V0cykvc2l6ZW9mKHVuc2lnbmVkKTsKKyAgICBfX2xpYmRsX2luZm8ubmNoYWluID0gc2l6ZW9mKGdfbGliZGxfY2hhaW5zKS9zaXplb2YodW5zaWduZWQpOworICAgIF9fbGliZGxfaW5mby5idWNrZXQgPSBnX2xpYmRsX2J1Y2tldHM7CisgICAgX19saWJkbF9pbmZvLmNoYWluID0gZ19saWJkbF9jaGFpbnM7CisgICAgX19saWJkbF9pbmZvLmhhc19EVF9TWU1CT0xJQyA9IHRydWU7CisgIH0KIAotICAgIC5waGRyID0gMCwKLSAgICAucGhudW0gPSAwLAotICAgIC5lbnRyeSA9IDAsCi0gICAgLmJhc2UgPSAwLAotICAgIC5zaXplID0gMCwKLQotI2lmICFkZWZpbmVkKF9fTFA2NF9fKQotICAgIC51bnVzZWQxID0gMCwKLSNlbmRpZgotCi0gICAgLmR5bmFtaWMgPSAwLAotCi0jaWYgIWRlZmluZWQoX19MUDY0X18pCi0gICAgLnVudXNlZDIgPSAwLCAudW51c2VkMyA9IDAsCi0jZW5kaWYKLQotICAgIC5uZXh0ID0gMCwKLQotICAgIC5mbGFncyA9IEZMQUdfTElOS0VELAotCi0gICAgLnN0cnRhYiA9IEFORFJPSURfTElCRExfU1RSVEFCLAotICAgIC5zeW10YWIgPSBnTGliRGxTeW10YWIsCi0KLSAgICAubmJ1Y2tldCA9IHNpemVvZihnTGliRGxCdWNrZXRzKS9zaXplb2YodW5zaWduZWQpLAotICAgIC5uY2hhaW4gPSBzaXplb2YoZ0xpYkRsQ2hhaW5zKS9zaXplb2YodW5zaWduZWQpLAotICAgIC5idWNrZXQgPSBnTGliRGxCdWNrZXRzLAotICAgIC5jaGFpbiA9IGdMaWJEbENoYWlucywKLQotI2lmIGRlZmluZWQoVVNFX1JFTEEpCi0gICAgLnBsdF9yZWxhID0gMCwKLSAgICAucGx0X3JlbGFfY291bnQgPSAwLAotICAgIC5yZWxhID0gMCwKLSAgICAucmVsYV9jb3VudCA9IDAsCi0jZWxzZQotICAgIC5wbHRfZ290ID0gMCwKLSAgICAucGx0X3JlbCA9IDAsCi0gICAgLnBsdF9yZWxfY291bnQgPSAwLAotICAgIC5yZWwgPSAwLAotICAgIC5yZWxfY291bnQgPSAwLAotI2VuZGlmCi0KLSAgICAucHJlaW5pdF9hcnJheSA9IDAsCi0gICAgLnByZWluaXRfYXJyYXlfY291bnQgPSAwLAotCi0gICAgLmluaXRfYXJyYXkgPSAwLAotICAgIC5pbml0X2FycmF5X2NvdW50ID0gMCwKLQotICAgIC5maW5pX2FycmF5ID0gMCwKLSAgICAuZmluaV9hcnJheV9jb3VudCA9IDAsCi0KLSAgICAuaW5pdF9mdW5jID0gMCwKLSAgICAuZmluaV9mdW5jID0gMCwKLQotI2lmIGRlZmluZWQoX19hcm1fXykKLSAgICAuQVJNX2V4aWR4ID0gMCwKLSAgICAuQVJNX2V4aWR4X2NvdW50ID0gMCwKLSNlbGlmIGRlZmluZWQoX19taXBzX18pCi0gICAgLm1pcHNfc3ltdGFibm8gPSAwLAotICAgIC5taXBzX2xvY2FsX2dvdG5vID0gMCwKLSAgICAubWlwc19nb3RzeW0gPSAwLAotI2VuZGlmCi0KLSAgICAucmVmX2NvdW50ID0gMCwKLSAgICB7IC5sX2FkZHIgPSAwLCAubF9uYW1lID0gMCwgLmxfbGQgPSAwLCAubF9uZXh0ID0gMCwgLmxfcHJldiA9IDAsIH0sCi0gICAgLmNvbnN0cnVjdG9yc19jYWxsZWQgPSBmYWxzZSwKLSAgICAubG9hZF9iaWFzID0gMCwKLSNpZiAhZGVmaW5lZChfX0xQNjRfXykKLSAgICAuaGFzX3RleHRfcmVsb2NhdGlvbnMgPSBmYWxzZSwKLSNlbmRpZgotICAgIC5oYXNfRFRfU1lNQk9MSUMgPSB0cnVlLAotfTsKKyAgcmV0dXJuICZfX2xpYmRsX2luZm87Cit9CmRpZmYgLS1naXQgYS9saW5rZXIvbGlua2VkX2xpc3QuaCBiL2xpbmtlci9saW5rZWRfbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOTZlNjIKLS0tIC9kZXYvbnVsbAorKysgYi9saW5rZXIvbGlua2VkX2xpc3QuaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX19MSU5LRURfTElTVF9ICisjZGVmaW5lIF9fTElOS0VEX0xJU1RfSAorCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfbWFjcm9zLmgiCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgTGlua2VkTGlzdEVudHJ5IHsKKyAgTGlua2VkTGlzdEVudHJ5PFQ+KiBuZXh0OworICBUKiBlbGVtZW50OworfTsKKworLyoKKyAqIFJlcHJlc2VudHMgbGlua2VkIGxpc3Qgb2Ygb2JqZWN0cyBvZiB0eXBlIFQKKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxsb2NhdG9yPgorY2xhc3MgTGlua2VkTGlzdCB7CisgcHVibGljOgorICBMaW5rZWRMaXN0KCkgOiBoZWFkXyhudWxscHRyKSwgdGFpbF8obnVsbHB0cikge30KKworICB2b2lkIHB1c2hfZnJvbnQoVCogY29uc3QgZWxlbWVudCkgeworICAgIExpbmtlZExpc3RFbnRyeTxUPiogbmV3X2VudHJ5ID0gQWxsb2NhdG9yOjphbGxvYygpOworICAgIG5ld19lbnRyeS0+bmV4dCA9IGhlYWRfOworICAgIG5ld19lbnRyeS0+ZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgaGVhZF8gPSBuZXdfZW50cnk7CisgICAgaWYgKHRhaWxfID09IG51bGxwdHIpIHsKKyAgICAgIHRhaWxfID0gbmV3X2VudHJ5OworICAgIH0KKyAgfQorCisgIHZvaWQgcHVzaF9iYWNrKFQqIGNvbnN0IGVsZW1lbnQpIHsKKyAgICBMaW5rZWRMaXN0RW50cnk8VD4qIG5ld19lbnRyeSA9IEFsbG9jYXRvcjo6YWxsb2MoKTsKKyAgICBuZXdfZW50cnktPm5leHQgPSBudWxscHRyOworICAgIG5ld19lbnRyeS0+ZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgaWYgKHRhaWxfID09IG51bGxwdHIpIHsKKyAgICAgIHRhaWxfID0gaGVhZF8gPSBuZXdfZW50cnk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRhaWxfLT5uZXh0ID0gbmV3X2VudHJ5OworICAgICAgdGFpbF8gPSBuZXdfZW50cnk7CisgICAgfQorICB9CisKKyAgVCogcG9wX2Zyb250KCkgeworICAgIGlmIChoZWFkXyA9PSBudWxscHRyKSB7CisgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBMaW5rZWRMaXN0RW50cnk8VD4qIGVudHJ5ID0gaGVhZF87CisgICAgVCogZWxlbWVudCA9IGVudHJ5LT5lbGVtZW50OworICAgIGhlYWRfID0gZW50cnktPm5leHQ7CisgICAgQWxsb2NhdG9yOjpmcmVlKGVudHJ5KTsKKworICAgIGlmIChoZWFkXyA9PSBudWxscHRyKSB7CisgICAgICB0YWlsXyA9IG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGVsZW1lbnQ7CisgIH0KKworICB2b2lkIGNsZWFyKCkgeworICAgIHdoaWxlIChoZWFkXyAhPSBudWxscHRyKSB7CisgICAgICBMaW5rZWRMaXN0RW50cnk8VD4qIHAgPSBoZWFkXzsKKyAgICAgIGhlYWRfID0gaGVhZF8tPm5leHQ7CisgICAgICBBbGxvY2F0b3I6OmZyZWUocCk7CisgICAgfQorCisgICAgdGFpbF8gPSBudWxscHRyOworICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgRj4KKyAgdm9pZCBmb3JfZWFjaChGJiYgYWN0aW9uKSB7CisgICAgZm9yIChMaW5rZWRMaXN0RW50cnk8VD4qIGUgPSBoZWFkXzsgZSAhPSBudWxscHRyOyBlID0gZS0+bmV4dCkgeworICAgICAgaWYgKGUtPmVsZW1lbnQgIT0gbnVsbHB0cikgeworICAgICAgICBhY3Rpb24oZS0+ZWxlbWVudCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgRj4KKyAgdm9pZCByZW1vdmVfaWYoRiYmIHByZWRpY2F0ZSkgeworICAgIGZvciAoTGlua2VkTGlzdEVudHJ5PFQ+KiBlID0gaGVhZF87IGUgIT0gbnVsbHB0cjsgZSA9IGUtPm5leHQpIHsKKyAgICAgIGlmIChlLT5lbGVtZW50ICE9IG51bGxwdHIgJiYgcHJlZGljYXRlKGUtPmVsZW1lbnQpKSB7CisgICAgICAgIGUtPmVsZW1lbnQgPSBudWxscHRyOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGJvb2wgY29udGFpbnMoY29uc3QgVCogZWwpIHsKKyAgICBmb3IgKExpbmtlZExpc3RFbnRyeTxUPiogZSA9IGhlYWRfOyBlICE9IG51bGxwdHI7IGUgPSBlLT5uZXh0KSB7CisgICAgICBpZiAoZS0+ZWxlbWVudCAhPSBudWxscHRyICYmIGUtPmVsZW1lbnQgPT0gZWwpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgcHJpdmF0ZToKKyAgTGlua2VkTGlzdEVudHJ5PFQ+KiBoZWFkXzsKKyAgTGlua2VkTGlzdEVudHJ5PFQ+KiB0YWlsXzsKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKExpbmtlZExpc3QpOworfTsKKworI2VuZGlmIC8vIF9fTElOS0VEX0xJU1RfSApkaWZmIC0tZ2l0IGEvbGlua2VyL2xpbmtlci5jcHAgYi9saW5rZXIvbGlua2VyLmNwcApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDliYzlhZmUuLmNmNjU3MDUKLS0tIGEvbGlua2VyL2xpbmtlci5jcHAKKysrIGIvbGlua2VyL2xpbmtlci5jcHAKQEAgLTI5LDEzICsyOSwxMSBAQAogI2luY2x1ZGUgPGRsZmNuLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGxpbnV4L2F1eHZlYy5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL2F0b21pY3MuaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC00NCwxMSArNDIsMTMgQEAKICNpbmNsdWRlICJwcml2YXRlL2Jpb25pY190bHMuaCIKICNpbmNsdWRlICJwcml2YXRlL0tlcm5lbEFyZ3VtZW50QmxvY2suaCIKICNpbmNsdWRlICJwcml2YXRlL1Njb3BlZFB0aHJlYWRNdXRleExvY2tlci5oIgorI2luY2x1ZGUgInByaXZhdGUvU2NvcGVkRmQuaCIKIAogI2luY2x1ZGUgImxpbmtlci5oIgogI2luY2x1ZGUgImxpbmtlcl9kZWJ1Zy5oIgogI2luY2x1ZGUgImxpbmtlcl9lbnZpcm9uLmgiCiAjaW5jbHVkZSAibGlua2VyX3BoZHIuaCIKKyNpbmNsdWRlICJsaW5rZXJfYWxsb2NhdG9yLmgiCiAKIC8qID4+PiBJTVBPUlRBTlQgTk9URSAtIFJFQUQgTUUgQkVGT1JFIE1PRElGWUlORyA8PDwKICAqCkBAIC02MCwzMSArNjAsMzUgQEAKICAqCiAgKiBvcGVuIGlzc3VlcyAvIHRvZG86CiAgKgotICogLSBhcmUgd2UgZG9pbmcgZXZlcnl0aGluZyB3ZSBzaG91bGQgZm9yIEFSTV9DT1BZIHJlbG9jYXRpb25zPwogICogLSBjbGVhbmVyIGVycm9yIHJlcG9ydGluZwogICogLSBhZnRlciBsaW5raW5nLCBzZXQgYXMgbXVjaCBzdHVmZiBhcyBwb3NzaWJsZSB0byBSRUFET05MWQogICogICBhbmQgTk9FWEVDCiAgKi8KIAotc3RhdGljIGJvb2wgc29pbmZvX2xpbmtfaW1hZ2Uoc29pbmZvKiBzaSk7Ci1zdGF0aWMgRWxmX0FkZHIgZ2V0X2VsZl9leGVjX2xvYWRfYmlhcyhjb25zdCBFbGZfRWhkciogZWxmKTsKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorI2RlZmluZSBTRUFSQ0hfTkFNRSh4KSB4CisjZWxzZQorLy8gTnZpZGlhIGRyaXZlcnMgYXJlIHJlbHlpbmcgb24gdGhlIGJ1ZzoKKy8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9NjY3MAorLy8gc28gd2UgY29udGludWUgdG8gdXNlIGJhc2UtbmFtZSBsb29rdXAgZm9yIGxwMzIKK3N0YXRpYyBjb25zdCBjaGFyKiBnZXRfYmFzZV9uYW1lKGNvbnN0IGNoYXIqIG5hbWUpIHsKKyAgY29uc3QgY2hhciogYm5hbWUgPSBzdHJyY2hyKG5hbWUsICcvJyk7CisgIHJldHVybiBibmFtZSA/IGJuYW1lICsgMSA6IG5hbWU7Cit9CisjZGVmaW5lIFNFQVJDSF9OQU1FKHgpIGdldF9iYXNlX25hbWUoeCkKKyNlbmRpZgogCi0vLyBXZSBjYW4ndCB1c2UgbWFsbG9jKDMpIGluIHRoZSBkeW5hbWljIGxpbmtlci4gV2UgdXNlIGEgbGlua2VkIGxpc3Qgb2YgYW5vbnltb3VzCi0vLyBtYXBzLCBlYWNoIGEgc2luZ2xlIHBhZ2UgaW4gc2l6ZS4gVGhlIHBhZ2VzIGFyZSBicm9rZW4gdXAgaW50byBhcyBtYW55IHN0cnVjdCBzb2luZm8KLS8vIG9iamVjdHMgYXMgd2lsbCBmaXQsIGFuZCB0aGV5J3JlIGFsbCB0aHJlYWRlZCB0b2dldGhlciBvbiBhIGZyZWUgbGlzdC4KLSNkZWZpbmUgU09JTkZPX1BFUl9QT09MICgoUEFHRV9TSVpFIC0gc2l6ZW9mKHNvaW5mb19wb29sX3QqKSkgLyBzaXplb2Yoc29pbmZvKSkKLXN0cnVjdCBzb2luZm9fcG9vbF90IHsKLSAgc29pbmZvX3Bvb2xfdCogbmV4dDsKLSAgc29pbmZvIGluZm9bU09JTkZPX1BFUl9QT09MXTsKLX07Ci1zdGF0aWMgc3RydWN0IHNvaW5mb19wb29sX3QqIGdTb0luZm9Qb29scyA9IE5VTEw7Ci1zdGF0aWMgc29pbmZvKiBnU29JbmZvRnJlZUxpc3QgPSBOVUxMOworc3RhdGljIGJvb2wgc29pbmZvX2xpbmtfaW1hZ2Uoc29pbmZvKiBzaSwgY29uc3QgYW5kcm9pZF9kbGV4dGluZm8qIGV4dGluZm8pOworc3RhdGljIEVsZlcoQWRkcikgZ2V0X2VsZl9leGVjX2xvYWRfYmlhcyhjb25zdCBFbGZXKEVoZHIpKiBlbGYpOwogCi1zdGF0aWMgc29pbmZvKiBzb2xpc3QgPSAmbGliZGxfaW5mbzsKLXN0YXRpYyBzb2luZm8qIHNvbmV4dCA9ICZsaWJkbF9pbmZvOworc3RhdGljIExpbmtlckFsbG9jYXRvcjxzb2luZm8+IGdfc29pbmZvX2FsbG9jYXRvcjsKK3N0YXRpYyBMaW5rZXJBbGxvY2F0b3I8TGlua2VkTGlzdEVudHJ5PHNvaW5mbz4+IGdfc29pbmZvX2xpbmtzX2FsbG9jYXRvcjsKKworc3RhdGljIHNvaW5mbyogc29saXN0Oworc3RhdGljIHNvaW5mbyogc29uZXh0Owogc3RhdGljIHNvaW5mbyogc29tYWluOyAvKiBtYWluIHByb2Nlc3MsIGFsd2F5cyB0aGUgb25lIGFmdGVyIGxpYmRsX2luZm8gKi8KIAotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGdEZWZhdWx0TGRQYXRoc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGtEZWZhdWx0TGRQYXRoc1tdID0gewogI2lmIGRlZmluZWQoX19MUDY0X18pCiAgICIvdmVuZG9yL2xpYjY0IiwKICAgIi9zeXN0ZW0vbGliNjQiLApAQCAtMTAxLDE3ICsxMDUsMTcgQEAKICNkZWZpbmUgTERQUkVMT0FEX0JVRlNJWkUgKExEUFJFTE9BRF9NQVgqNjQpCiAjZGVmaW5lIExEUFJFTE9BRF9NQVggOAogCi1zdGF0aWMgY2hhciBnTGRQYXRoc0J1ZmZlcltMRFBBVEhfQlVGU0laRV07Ci1zdGF0aWMgY29uc3QgY2hhciogZ0xkUGF0aHNbTERQQVRIX01BWCArIDFdOworc3RhdGljIGNoYXIgZ19sZF9saWJyYXJ5X3BhdGhzX2J1ZmZlcltMRFBBVEhfQlVGU0laRV07CitzdGF0aWMgY29uc3QgY2hhciogZ19sZF9saWJyYXJ5X3BhdGhzW0xEUEFUSF9NQVggKyAxXTsKIAotc3RhdGljIGNoYXIgZ0xkUHJlbG9hZHNCdWZmZXJbTERQUkVMT0FEX0JVRlNJWkVdOwotc3RhdGljIGNvbnN0IGNoYXIqIGdMZFByZWxvYWROYW1lc1tMRFBSRUxPQURfTUFYICsgMV07CitzdGF0aWMgY2hhciBnX2xkX3ByZWxvYWRzX2J1ZmZlcltMRFBSRUxPQURfQlVGU0laRV07CitzdGF0aWMgY29uc3QgY2hhciogZ19sZF9wcmVsb2FkX25hbWVzW0xEUFJFTE9BRF9NQVggKyAxXTsKIAotc3RhdGljIHNvaW5mbyogZ0xkUHJlbG9hZHNbTERQUkVMT0FEX01BWCArIDFdOworc3RhdGljIHNvaW5mbyogZ19sZF9wcmVsb2Fkc1tMRFBSRUxPQURfTUFYICsgMV07CiAKLV9fTElCQ19ISURERU5fXyBpbnQgZ0xkRGVidWdWZXJib3NpdHk7CitfX0xJQkNfSElEREVOX18gaW50IGdfbGRfZGVidWdfdmVyYm9zaXR5OwogCi1fX0xJQkNfSElEREVOX18gYWJvcnRfbXNnX3QqIGdBYm9ydE1lc3NhZ2UgPSBOVUxMOyAvLyBGb3IgZGVidWdnZXJkLgorX19MSUJDX0hJRERFTl9fIGFib3J0X21zZ190KiBnX2Fib3J0X21lc3NhZ2UgPSBOVUxMOyAvLyBGb3IgZGVidWdnZXJkLgogCiBlbnVtIFJlbG9jYXRpb25LaW5kIHsKICAgICBrUmVsb2NBYnNvbHV0ZSA9IDAsCkBAIC0xNDMsMTIgKzE0NywxMiBAQAogICAgIGRvIHsgXAogICAgICAgICBpZiAoKCgob2Zmc2V0KSA+PiAxMikgPj4gNSkgPCA0MDk2KSBcCiAgICAgICAgICAgICBiaXRtYXNrWygob2Zmc2V0KSA+PiAxMikgPj4gNV0gfD0gKDEgPDwgKCgob2Zmc2V0KSA+PiAxMikgJiAzMSkpOyBcCi0gICAgfSB3aGlsZSgwKQorICAgIH0gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBNQVJLKG9mZnNldCkgXAogICAgIGRvIHsgXAogICAgICAgICBiaXRtYXNrWygob2Zmc2V0KSA+PiAxMikgPj4gM10gfD0gKDEgPDwgKCgob2Zmc2V0KSA+PiAxMikgJiA3KSk7IFwKLSAgICB9IHdoaWxlKDApCisgICAgfSB3aGlsZSAoMCkKICNlbmRpZgogI2Vsc2UKICNkZWZpbmUgTUFSSyh4KSBkbyB7fSB3aGlsZSAoMCkKQEAgLTE1OSwxNiArMTYzLDEyIEBACiAjZGVmaW5lIERJU0FMTE9XX0FMTE9DQVRJT04ocmV0dXJuX3R5cGUsIG5hbWUsIC4uLikgXAogICAgIHJldHVybl90eXBlIG5hbWUgX19WQV9BUkdTX18gXAogICAgIHsgXAotICAgICAgICBjb25zdCBjaGFyKiBtc2cgPSAiRVJST1I6ICIgI25hbWUgIiBjYWxsZWQgZnJvbSB0aGUgZHluYW1pYyBsaW5rZXIhXG4iOyBcCi0gICAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0ZBVEFMLCAibGlua2VyIiwgIiVzIiwgbXNnKTsgXAotICAgICAgICB3cml0ZSgyLCBtc2csIHN0cmxlbihtc2cpKTsgXAotICAgICAgICBhYm9ydCgpOyBcCisgICAgICAgIF9fbGliY19mYXRhbCgiRVJST1I6ICIgI25hbWUgIiBjYWxsZWQgZnJvbSB0aGUgZHluYW1pYyBsaW5rZXIhXG4iKTsgXAogICAgIH0KLSNkZWZpbmUgVU5VU0VEIF9fYXR0cmlidXRlX18oKHVudXNlZCkpCi1ESVNBTExPV19BTExPQ0FUSU9OKHZvaWQqLCBtYWxsb2MsIChzaXplX3QgdSBVTlVTRUQpKTsKLURJU0FMTE9XX0FMTE9DQVRJT04odm9pZCwgZnJlZSwgKHZvaWQqIHUgVU5VU0VEKSk7Ci1ESVNBTExPV19BTExPQ0FUSU9OKHZvaWQqLCByZWFsbG9jLCAodm9pZCogdTEgVU5VU0VELCBzaXplX3QgdTIgVU5VU0VEKSk7Ci1ESVNBTExPV19BTExPQ0FUSU9OKHZvaWQqLCBjYWxsb2MsIChzaXplX3QgdTEgVU5VU0VELCBzaXplX3QgdTIgVU5VU0VEKSk7CitESVNBTExPV19BTExPQ0FUSU9OKHZvaWQqLCBtYWxsb2MsIChzaXplX3QgdSBfX3VudXNlZCkpOworRElTQUxMT1dfQUxMT0NBVElPTih2b2lkLCBmcmVlLCAodm9pZCogdSBfX3VudXNlZCkpOworRElTQUxMT1dfQUxMT0NBVElPTih2b2lkKiwgcmVhbGxvYywgKHZvaWQqIHUxIF9fdW51c2VkLCBzaXplX3QgdTIgX191bnVzZWQpKTsKK0RJU0FMTE9XX0FMTE9DQVRJT04odm9pZCosIGNhbGxvYywgKHNpemVfdCB1MSBfX3VudXNlZCwgc2l6ZV90IHUyIF9fdW51c2VkKSk7CiAKIHN0YXRpYyBjaGFyIHRtcF9lcnJfYnVmWzc2OF07CiBzdGF0aWMgY2hhciBfX2xpbmtlcl9kbF9lcnJfYnVmWzc2OF07CkBAIC0xODcsMTcgKzE4NywxNiBAQAogICovCiBleHRlcm4gIkMiIHZvaWQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBydGxkX2RiX2RsYWN0aXZpdHkoKTsKIAotc3RhdGljIHJfZGVidWcgX3JfZGVidWcgPSB7MSwgTlVMTCwgJnJ0bGRfZGJfZGxhY3Rpdml0eSwgUlRfQ09OU0lTVEVOVCwgMH07Ci1zdGF0aWMgbGlua19tYXBfdCogcl9kZWJ1Z190YWlsID0gMDsKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgZ19fcl9kZWJ1Z19tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CitzdGF0aWMgcl9kZWJ1ZyBfcl9kZWJ1ZyA9IHsxLCBOVUxMLCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oJnJ0bGRfZGJfZGxhY3Rpdml0eSksIHJfZGVidWc6OlJUX0NPTlNJU1RFTlQsIDB9Oworc3RhdGljIGxpbmtfbWFwKiByX2RlYnVnX3RhaWwgPSAwOwogCi1zdGF0aWMgcHRocmVhZF9tdXRleF90IGdEZWJ1Z011dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKLQotc3RhdGljIHZvaWQgaW5zZXJ0X3NvaW5mb19pbnRvX2RlYnVnX21hcChzb2luZm8gKiBpbmZvKSB7CitzdGF0aWMgdm9pZCBpbnNlcnRfc29pbmZvX2ludG9fZGVidWdfbWFwKHNvaW5mbyogaW5mbykgewogICAgIC8vIENvcHkgdGhlIG5lY2Vzc2FyeSBmaWVsZHMgaW50byB0aGUgZGVidWcgc3RydWN0dXJlLgotICAgIGxpbmtfbWFwX3QqIG1hcCA9ICYoaW5mby0+bGlua19tYXApOworICAgIGxpbmtfbWFwKiBtYXAgPSAmKGluZm8tPmxpbmtfbWFwX2hlYWQpOwogICAgIG1hcC0+bF9hZGRyID0gaW5mby0+bG9hZF9iaWFzOwotICAgIG1hcC0+bF9uYW1lID0gKGNoYXIqKSBpbmZvLT5uYW1lOwotICAgIG1hcC0+bF9sZCA9ICh1aW50cHRyX3QpaW5mby0+ZHluYW1pYzsKKyAgICBtYXAtPmxfbmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGluZm8tPm5hbWUpOworICAgIG1hcC0+bF9sZCA9IGluZm8tPmR5bmFtaWM7CiAKICAgICAvKiBTdGljayB0aGUgbmV3IGxpYnJhcnkgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdC4KICAgICAgKiBnZGIgdGVuZHMgdG8gY2FyZSBtb3JlIGFib3V0IGxpYmMgdGhhbiBpdCBkb2VzCkBAIC0yMTcsNyArMjE2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgcmVtb3ZlX3NvaW5mb19mcm9tX2RlYnVnX21hcChzb2luZm8qIGluZm8pIHsKLSAgICBsaW5rX21hcF90KiBtYXAgPSAmKGluZm8tPmxpbmtfbWFwKTsKKyAgICBsaW5rX21hcCogbWFwID0gJihpbmZvLT5saW5rX21hcF9oZWFkKTsKIAogICAgIGlmIChyX2RlYnVnX3RhaWwgPT0gbWFwKSB7CiAgICAgICAgIHJfZGVidWdfdGFpbCA9IG1hcC0+bF9wcmV2OwpAQCAtMjM3LDE0ICsyMzYsMTQgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdEZWJ1Z011dGV4KTsKKyAgICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnX19yX2RlYnVnX211dGV4KTsKIAotICAgIF9yX2RlYnVnLnJfc3RhdGUgPSBSVF9BREQ7CisgICAgX3JfZGVidWcucl9zdGF0ZSA9IHJfZGVidWc6OlJUX0FERDsKICAgICBydGxkX2RiX2RsYWN0aXZpdHkoKTsKIAogICAgIGluc2VydF9zb2luZm9faW50b19kZWJ1Z19tYXAoaW5mbyk7CiAKLSAgICBfcl9kZWJ1Zy5yX3N0YXRlID0gUlRfQ09OU0lTVEVOVDsKKyAgICBfcl9kZWJ1Zy5yX3N0YXRlID0gcl9kZWJ1Zzo6UlRfQ09OU0lTVEVOVDsKICAgICBydGxkX2RiX2RsYWN0aXZpdHkoKTsKIH0KIApAQCAtMjU0LDc4ICsyNTMsNTUgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdEZWJ1Z011dGV4KTsKKyAgICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnX19yX2RlYnVnX211dGV4KTsKIAotICAgIF9yX2RlYnVnLnJfc3RhdGUgPSBSVF9ERUxFVEU7CisgICAgX3JfZGVidWcucl9zdGF0ZSA9IHJfZGVidWc6OlJUX0RFTEVURTsKICAgICBydGxkX2RiX2RsYWN0aXZpdHkoKTsKIAogICAgIHJlbW92ZV9zb2luZm9fZnJvbV9kZWJ1Z19tYXAoaW5mbyk7CiAKLSAgICBfcl9kZWJ1Zy5yX3N0YXRlID0gUlRfQ09OU0lTVEVOVDsKKyAgICBfcl9kZWJ1Zy5yX3N0YXRlID0gcl9kZWJ1Zzo6UlRfQ09OU0lTVEVOVDsKICAgICBydGxkX2RiX2RsYWN0aXZpdHkoKTsKIH0KIAogdm9pZCBub3RpZnlfZ2RiX29mX2xpYnJhcmllcygpIHsKLSAgICBfcl9kZWJ1Zy5yX3N0YXRlID0gUlRfQUREOwotICAgIHJ0bGRfZGJfZGxhY3Rpdml0eSgpOwotICAgIF9yX2RlYnVnLnJfc3RhdGUgPSBSVF9DT05TSVNURU5UOwotICAgIHJ0bGRfZGJfZGxhY3Rpdml0eSgpOworICBfcl9kZWJ1Zy5yX3N0YXRlID0gcl9kZWJ1Zzo6UlRfQUREOworICBydGxkX2RiX2RsYWN0aXZpdHkoKTsKKyAgX3JfZGVidWcucl9zdGF0ZSA9IHJfZGVidWc6OlJUX0NPTlNJU1RFTlQ7CisgIHJ0bGRfZGJfZGxhY3Rpdml0eSgpOwogfQogCi1zdGF0aWMgYm9vbCBlbnN1cmVfZnJlZV9saXN0X25vbl9lbXB0eSgpIHsKLSAgaWYgKGdTb0luZm9GcmVlTGlzdCAhPSBOVUxMKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBBbGxvY2F0ZSBhIG5ldyBwb29sLgotICBzb2luZm9fcG9vbF90KiBwb29sID0gcmVpbnRlcnByZXRfY2FzdDxzb2luZm9fcG9vbF90Kj4obW1hcChOVUxMLCBzaXplb2YoKnBvb2wpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUR8UFJPVF9XUklURSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywgMCwgMCkpOwotICBpZiAocG9vbCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gQWRkIHRoZSBwb29sIHRvIG91ciBsaXN0IG9mIHBvb2xzLgotICBwb29sLT5uZXh0ID0gZ1NvSW5mb1Bvb2xzOwotICBnU29JbmZvUG9vbHMgPSBwb29sOwotCi0gIC8vIENoYWluIHRoZSBlbnRyaWVzIGluIHRoZSBuZXcgcG9vbCBvbnRvIHRoZSBmcmVlIGxpc3QuCi0gIGdTb0luZm9GcmVlTGlzdCA9ICZwb29sLT5pbmZvWzBdOwotICBzb2luZm8qIG5leHQgPSBOVUxMOwotICBmb3IgKGludCBpID0gU09JTkZPX1BFUl9QT09MIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICBwb29sLT5pbmZvW2ldLm5leHQgPSBuZXh0OwotICAgIG5leHQgPSAmcG9vbC0+aW5mb1tpXTsKLSAgfQotCi0gIHJldHVybiB0cnVlOworTGlua2VkTGlzdEVudHJ5PHNvaW5mbz4qIFNvaW5mb0xpc3RBbGxvY2F0b3I6OmFsbG9jKCkgeworICByZXR1cm4gZ19zb2luZm9fbGlua3NfYWxsb2NhdG9yLmFsbG9jKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9zb2luZm9fcG9vbF9wcm90ZWN0aW9uKGludCBwcm90ZWN0aW9uKSB7Ci0gIGZvciAoc29pbmZvX3Bvb2xfdCogcCA9IGdTb0luZm9Qb29sczsgcCAhPSBOVUxMOyBwID0gcC0+bmV4dCkgewotICAgIGlmIChtcHJvdGVjdChwLCBzaXplb2YoKnApLCBwcm90ZWN0aW9uKSA9PSAtMSkgewotICAgICAgYWJvcnQoKTsgLy8gQ2FuJ3QgaGFwcGVuLgotICAgIH0KLSAgfQordm9pZCBTb2luZm9MaXN0QWxsb2NhdG9yOjpmcmVlKExpbmtlZExpc3RFbnRyeTxzb2luZm8+KiBlbnRyeSkgeworICBnX3NvaW5mb19saW5rc19hbGxvY2F0b3IuZnJlZShlbnRyeSk7CiB9CiAKLXN0YXRpYyBzb2luZm8qIHNvaW5mb19hbGxvYyhjb25zdCBjaGFyKiBuYW1lKSB7CitzdGF0aWMgdm9pZCBwcm90ZWN0X2RhdGEoaW50IHByb3RlY3Rpb24pIHsKKyAgZ19zb2luZm9fYWxsb2NhdG9yLnByb3RlY3RfYWxsKHByb3RlY3Rpb24pOworICBnX3NvaW5mb19saW5rc19hbGxvY2F0b3IucHJvdGVjdF9hbGwocHJvdGVjdGlvbik7Cit9CisKK3N0YXRpYyBzb2luZm8qIHNvaW5mb19hbGxvYyhjb25zdCBjaGFyKiBuYW1lLCBzdHJ1Y3Qgc3RhdCogZmlsZV9zdGF0KSB7CiAgIGlmIChzdHJsZW4obmFtZSkgPj0gU09JTkZPX05BTUVfTEVOKSB7CiAgICAgRExfRVJSKCJsaWJyYXJ5IG5hbWUgXCIlc1wiIHRvbyBsb25nIiwgbmFtZSk7CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KIAotICBpZiAoIWVuc3VyZV9mcmVlX2xpc3Rfbm9uX2VtcHR5KCkpIHsKLSAgICBETF9FUlIoIm91dCBvZiBtZW1vcnkgd2hlbiBsb2FkaW5nIFwiJXNcIiIsIG5hbWUpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgLy8gVGFrZSB0aGUgaGVhZCBlbGVtZW50IG9mZiB0aGUgZnJlZSBsaXN0LgotICBzb2luZm8qIHNpID0gZ1NvSW5mb0ZyZWVMaXN0OwotICBnU29JbmZvRnJlZUxpc3QgPSBnU29JbmZvRnJlZUxpc3QtPm5leHQ7CisgIHNvaW5mbyogc2kgPSBnX3NvaW5mb19hbGxvY2F0b3IuYWxsb2MoKTsKIAogICAvLyBJbml0aWFsaXplIHRoZSBuZXcgZWxlbWVudC4KICAgbWVtc2V0KHNpLCAwLCBzaXplb2Yoc29pbmZvKSk7CiAgIHN0cmxjcHkoc2ktPm5hbWUsIG5hbWUsIHNpemVvZihzaS0+bmFtZSkpOworICBzaS0+ZmxhZ3MgPSBGTEFHX05FV19TT0lORk87CisKKyAgaWYgKGZpbGVfc3RhdCAhPSBOVUxMKSB7CisgICAgc2ktPnNldF9zdF9kZXYoZmlsZV9zdGF0LT5zdF9kZXYpOworICAgIHNpLT5zZXRfc3RfaW5vKGZpbGVfc3RhdC0+c3RfaW5vKTsKKyAgfQorCiAgIHNvbmV4dC0+bmV4dCA9IHNpOwogICBzb25leHQgPSBzaTsKIApAQCAtMzMzLDEyICszMDksMTUgQEAKICAgcmV0dXJuIHNpOwogfQogCi1zdGF0aWMgdm9pZCBzb2luZm9fZnJlZShzb2luZm8qIHNpKQoteworc3RhdGljIHZvaWQgc29pbmZvX2ZyZWUoc29pbmZvKiBzaSkgewogICAgIGlmIChzaSA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoc2ktPmJhc2UgIT0gMCAmJiBzaS0+c2l6ZSAhPSAwKSB7CisgICAgICBtdW5tYXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc2ktPmJhc2UpLCBzaS0+c2l6ZSk7CisgICAgfQorCiAgICAgc29pbmZvICpwcmV2ID0gTlVMTCwgKnRyYXY7CiAKICAgICBUUkFDRSgibmFtZSAlczogZnJlZWluZyBzb2luZm8gQCAlcCIsIHNpLT5uYW1lLCBzaSk7CkBAIC0zNTQsNiArMzMzLDkgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8vIGNsZWFyIGxpbmtzIHRvL2Zyb20gc2kKKyAgICBzaS0+cmVtb3ZlX2FsbF9saW5rcygpOworCiAgICAgLyogcHJldiB3aWxsIG5ldmVyIGJlIE5VTEwsIGJlY2F1c2UgdGhlIGZpcnN0IGVudHJ5IGluIHNvbGlzdCBpcwogICAgICAgIGFsd2F5cyB0aGUgc3RhdGljIGxpYmRsX2luZm8uCiAgICAgKi8KQEAgLTM2MSw4ICszNDMsOCBAQAogICAgIGlmIChzaSA9PSBzb25leHQpIHsKICAgICAgICAgc29uZXh0ID0gcHJldjsKICAgICB9Ci0gICAgc2ktPm5leHQgPSBnU29JbmZvRnJlZUxpc3Q7Ci0gICAgZ1NvSW5mb0ZyZWVMaXN0ID0gc2k7CisKKyAgICBnX3NvaW5mb19hbGxvY2F0b3IuZnJlZShzaSk7CiB9CiAKIApAQCAtMzkyLDE0ICszNzQsMTQgQEAKIH0KIAogc3RhdGljIHZvaWQgcGFyc2VfTERfTElCUkFSWV9QQVRIKGNvbnN0IGNoYXIqIHBhdGgpIHsKLSAgcGFyc2VfcGF0aChwYXRoLCAiOiIsIGdMZFBhdGhzLAotICAgICAgICAgICAgIGdMZFBhdGhzQnVmZmVyLCBzaXplb2YoZ0xkUGF0aHNCdWZmZXIpLCBMRFBBVEhfTUFYKTsKKyAgcGFyc2VfcGF0aChwYXRoLCAiOiIsIGdfbGRfbGlicmFyeV9wYXRocywKKyAgICAgICAgICAgICBnX2xkX2xpYnJhcnlfcGF0aHNfYnVmZmVyLCBzaXplb2YoZ19sZF9saWJyYXJ5X3BhdGhzX2J1ZmZlciksIExEUEFUSF9NQVgpOwogfQogCiBzdGF0aWMgdm9pZCBwYXJzZV9MRF9QUkVMT0FEKGNvbnN0IGNoYXIqIHBhdGgpIHsKICAgLy8gV2UgaGF2ZSBoaXN0b3JpY2FsbHkgc3VwcG9ydGVkICc6JyBhcyB3ZWxsIGFzICcgJyBpbiBMRF9QUkVMT0FELgotICBwYXJzZV9wYXRoKHBhdGgsICIgOiIsIGdMZFByZWxvYWROYW1lcywKLSAgICAgICAgICAgICBnTGRQcmVsb2Fkc0J1ZmZlciwgc2l6ZW9mKGdMZFByZWxvYWRzQnVmZmVyKSwgTERQUkVMT0FEX01BWCk7CisgIHBhcnNlX3BhdGgocGF0aCwgIiA6IiwgZ19sZF9wcmVsb2FkX25hbWVzLAorICAgICAgICAgICAgIGdfbGRfcHJlbG9hZHNfYnVmZmVyLCBzaXplb2YoZ19sZF9wcmVsb2Fkc19idWZmZXIpLCBMRFBSRUxPQURfTUFYKTsKIH0KIAogI2lmIGRlZmluZWQoX19hcm1fXykKQEAgLTQxMywxOCArMzk1LDE2IEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyBleHBvc2VkIHZpYSBkbGZjbi5jcHAgYW5kIGxpYmRsLnNvLgogICovCi1fVW53aW5kX1B0ciBkbF91bndpbmRfZmluZF9leGlkeChfVW53aW5kX1B0ciBwYywgaW50ICpwY291bnQpCi17Ci0gICAgc29pbmZvICpzaTsKK19VbndpbmRfUHRyIGRsX3Vud2luZF9maW5kX2V4aWR4KF9VbndpbmRfUHRyIHBjLCBpbnQqIHBjb3VudCkgewogICAgIHVuc2lnbmVkIGFkZHIgPSAodW5zaWduZWQpcGM7CiAKLSAgICBmb3IgKHNpID0gc29saXN0OyBzaSAhPSAwOyBzaSA9IHNpLT5uZXh0KSB7CisgICAgZm9yIChzb2luZm8qIHNpID0gc29saXN0OyBzaSAhPSAwOyBzaSA9IHNpLT5uZXh0KSB7CiAgICAgICAgIGlmICgoYWRkciA+PSBzaS0+YmFzZSkgJiYgKGFkZHIgPCAoc2ktPmJhc2UgKyBzaS0+c2l6ZSkpKSB7CiAgICAgICAgICAgICAqcGNvdW50ID0gc2ktPkFSTV9leGlkeF9jb3VudDsKICAgICAgICAgICAgIHJldHVybiAoX1Vud2luZF9QdHIpc2ktPkFSTV9leGlkeDsKICAgICAgICAgfQogICAgIH0KLSAgICpwY291bnQgPSAwOworICAgICpwY291bnQgPSAwOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC00MzIsMTUgKzQxMiwxMiBAQAogCiAvKiBIZXJlLCB3ZSBvbmx5IGhhdmUgdG8gcHJvdmlkZSBhIGNhbGxiYWNrIHRvIGl0ZXJhdGUgYWNyb3NzIGFsbCB0aGUKICAqIGxvYWRlZCBsaWJyYXJpZXMuIGdjY19laCBkb2VzIHRoZSByZXN0LiAqLwotaW50Ci1kbF9pdGVyYXRlX3BoZHIoaW50ICgqY2IpKGRsX3BoZHJfaW5mbyAqaW5mbywgc2l6ZV90IHNpemUsIHZvaWQgKmRhdGEpLAotICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpCi17CitpbnQgZGxfaXRlcmF0ZV9waGRyKGludCAoKmNiKShkbF9waGRyX2luZm8qIGluZm8sIHNpemVfdCBzaXplLCB2b2lkKiBkYXRhKSwgdm9pZCogZGF0YSkgewogICAgIGludCBydiA9IDA7CiAgICAgZm9yIChzb2luZm8qIHNpID0gc29saXN0OyBzaSAhPSBOVUxMOyBzaSA9IHNpLT5uZXh0KSB7CiAgICAgICAgIGRsX3BoZHJfaW5mbyBkbF9pbmZvOwotICAgICAgICBkbF9pbmZvLmRscGlfYWRkciA9IHNpLT5saW5rX21hcC5sX2FkZHI7Ci0gICAgICAgIGRsX2luZm8uZGxwaV9uYW1lID0gc2ktPmxpbmtfbWFwLmxfbmFtZTsKKyAgICAgICAgZGxfaW5mby5kbHBpX2FkZHIgPSBzaS0+bGlua19tYXBfaGVhZC5sX2FkZHI7CisgICAgICAgIGRsX2luZm8uZGxwaV9uYW1lID0gc2ktPmxpbmtfbWFwX2hlYWQubF9uYW1lOwogICAgICAgICBkbF9pbmZvLmRscGlfcGhkciA9IHNpLT5waGRyOwogICAgICAgICBkbF9pbmZvLmRscGlfcGhudW0gPSBzaS0+cGhudW07CiAgICAgICAgIHJ2ID0gY2IoJmRsX2luZm8sIHNpemVvZihkbF9waGRyX2luZm8pLCBkYXRhKTsKQEAgLTQ1MSw0MCArNDI4LDQ5IEBACiAgICAgcmV0dXJuIHJ2OwogfQogCi1zdGF0aWMgRWxmX1N5bSogc29pbmZvX2VsZl9sb29rdXAoc29pbmZvKiBzaSwgdW5zaWduZWQgaGFzaCwgY29uc3QgY2hhciogbmFtZSkgewotICAgIEVsZl9TeW0qIHN5bXRhYiA9IHNpLT5zeW10YWI7Ci0gICAgY29uc3QgY2hhciogc3RydGFiID0gc2ktPnN0cnRhYjsKK3N0YXRpYyBFbGZXKFN5bSkqIHNvaW5mb19lbGZfbG9va3VwKHNvaW5mbyogc2ksIHVuc2lnbmVkIGhhc2gsIGNvbnN0IGNoYXIqIG5hbWUpIHsKKyAgRWxmVyhTeW0pKiBzeW10YWIgPSBzaS0+c3ltdGFiOworICBjb25zdCBjaGFyKiBzdHJ0YWIgPSBzaS0+c3RydGFiOwogCi0gICAgVFJBQ0VfVFlQRShMT09LVVAsICJTRUFSQ0ggJXMgaW4gJXNAJXAgJXggJXpkIiwKLSAgICAgICAgICAgICAgIG5hbWUsIHNpLT5uYW1lLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzaS0+YmFzZSksIGhhc2gsIGhhc2ggJSBzaS0+bmJ1Y2tldCk7CisgIFRSQUNFX1RZUEUoTE9PS1VQLCAiU0VBUkNIICVzIGluICVzQCVwICV4ICV6ZCIsCisgICAgICAgICAgICAgbmFtZSwgc2ktPm5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNpLT5iYXNlKSwgaGFzaCwgaGFzaCAlIHNpLT5uYnVja2V0KTsKIAotICAgIGZvciAodW5zaWduZWQgbiA9IHNpLT5idWNrZXRbaGFzaCAlIHNpLT5uYnVja2V0XTsgbiAhPSAwOyBuID0gc2ktPmNoYWluW25dKSB7Ci0gICAgICAgIEVsZl9TeW0qIHMgPSBzeW10YWIgKyBuOwotICAgICAgICBpZiAoc3RyY21wKHN0cnRhYiArIHMtPnN0X25hbWUsIG5hbWUpKSBjb250aW51ZTsKKyAgZm9yICh1bnNpZ25lZCBuID0gc2ktPmJ1Y2tldFtoYXNoICUgc2ktPm5idWNrZXRdOyBuICE9IDA7IG4gPSBzaS0+Y2hhaW5bbl0pIHsKKyAgICBFbGZXKFN5bSkqIHMgPSBzeW10YWIgKyBuOworICAgIGlmIChzdHJjbXAoc3RydGFiICsgcy0+c3RfbmFtZSwgbmFtZSkpIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAvKiBvbmx5IGNvbmNlcm4gb3Vyc2VsdmVzIHdpdGggZ2xvYmFsIGFuZCB3ZWFrIHN5bWJvbCBkZWZpbml0aW9ucyAqLwotICAgICAgICBzd2l0Y2ggKEVMRl9TVF9CSU5EKHMtPnN0X2luZm8pKSB7Ci0gICAgICAgIGNhc2UgU1RCX0dMT0JBTDoKLSAgICAgICAgY2FzZSBTVEJfV0VBSzoKLSAgICAgICAgICAgIGlmIChzLT5zdF9zaG5keCA9PSBTSE5fVU5ERUYpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgVFJBQ0VfVFlQRShMT09LVVAsICJGT1VORCAlcyBpbiAlcyAoJXApICV6ZCIsCi0gICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHNpLT5uYW1lLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzLT5zdF92YWx1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4ocy0+c3Rfc2l6ZSkpOwotICAgICAgICAgICAgcmV0dXJuIHM7CisgICAgLyogb25seSBjb25jZXJuIG91cnNlbHZlcyB3aXRoIGdsb2JhbCBhbmQgd2VhayBzeW1ib2wgZGVmaW5pdGlvbnMgKi8KKyAgICBzd2l0Y2ggKEVMRl9TVF9CSU5EKHMtPnN0X2luZm8pKSB7CisgICAgICBjYXNlIFNUQl9HTE9CQUw6CisgICAgICBjYXNlIFNUQl9XRUFLOgorICAgICAgICBpZiAocy0+c3Rfc2huZHggPT0gU0hOX1VOREVGKSB7CisgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgVFJBQ0VfVFlQRShMT09LVVAsICJGT1VORCAlcyBpbiAlcyAoJXApICV6ZCIsCisgICAgICAgICAgICAgICAgIG5hbWUsIHNpLT5uYW1lLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzLT5zdF92YWx1ZSksCisgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4ocy0+c3Rfc2l6ZSkpOworICAgICAgICByZXR1cm4gczsKKyAgICAgIGNhc2UgU1RCX0xPQ0FMOgorICAgICAgICBjb250aW51ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIF9fbGliY19mYXRhbCgiRVJST1I6IFVuZXhwZWN0ZWQgU1RfQklORCB2YWx1ZTogJWQgZm9yICclcycgaW4gJyVzJyIsCisgICAgICAgICAgICBFTEZfU1RfQklORChzLT5zdF9pbmZvKSwgbmFtZSwgc2ktPm5hbWUpOworICAgIH0KKyAgfQorCisgIFRSQUNFX1RZUEUoTE9PS1VQLCAiTk9UIEZPVU5EICVzIGluICVzQCVwICV4ICV6ZCIsCisgICAgICAgICAgICAgbmFtZSwgc2ktPm5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNpLT5iYXNlKSwgaGFzaCwgaGFzaCAlIHNpLT5uYnVja2V0KTsKKworCisgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdW5zaWduZWQgZWxmaGFzaChjb25zdCBjaGFyKiBfbmFtZSkgewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG5hbWUgPSAoY29uc3QgdW5zaWduZWQgY2hhciopIF9uYW1lOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG5hbWUgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihfbmFtZSk7CiAgICAgdW5zaWduZWQgaCA9IDAsIGc7CiAKLSAgICB3aGlsZSgqbmFtZSkgeworICAgIHdoaWxlICgqbmFtZSkgewogICAgICAgICBoID0gKGggPDwgNCkgKyAqbmFtZSsrOwogICAgICAgICBnID0gaCAmIDB4ZjAwMDAwMDA7CiAgICAgICAgIGggXj0gZzsKQEAgLTQ5MywxMiArNDc5LDExIEBACiAgICAgcmV0dXJuIGg7CiB9CiAKLXN0YXRpYyBFbGZfU3ltKiBzb2luZm9fZG9fbG9va3VwKHNvaW5mbyogc2ksIGNvbnN0IGNoYXIqIG5hbWUsIHNvaW5mbyoqIGxzaSwgc29pbmZvKiBuZWVkZWRbXSkgeworc3RhdGljIEVsZlcoU3ltKSogc29pbmZvX2RvX2xvb2t1cChzb2luZm8qIHNpLCBjb25zdCBjaGFyKiBuYW1lLCBzb2luZm8qKiBsc2ksIHNvaW5mbyogbmVlZGVkW10pIHsKICAgICB1bnNpZ25lZCBlbGZfaGFzaCA9IGVsZmhhc2gobmFtZSk7Ci0gICAgRWxmX1N5bSogcyA9IE5VTEw7CisgICAgRWxmVyhTeW0pKiBzID0gTlVMTDsKIAogICAgIGlmIChzaSAhPSBOVUxMICYmIHNvbWFpbiAhPSBOVUxMKSB7Ci0KICAgICAgICAgLyoKICAgICAgICAgICogTG9jYWwgc2NvcGUgaXMgZXhlY3V0YWJsZSBzY29wZS4gSnVzdCBzdGFydCBsb29raW5nIGludG8gaXQgcmlnaHQgYXdheQogICAgICAgICAgKiBmb3IgdGhlIHNob3J0Y3V0LgpAQCAtNTEwLDYgKzQ5NSwxNSBAQAogICAgICAgICAgICAgICAgICpsc2kgPSBzaTsKICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIE5leHQsIGxvb2sgZm9yIGl0IGluIHRoZSBwcmVsb2FkcyBsaXN0ICovCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgZ19sZF9wcmVsb2Fkc1tpXSAhPSBOVUxMOyBpKyspIHsKKyAgICAgICAgICAgICAgICBzID0gc29pbmZvX2VsZl9sb29rdXAoZ19sZF9wcmVsb2Fkc1tpXSwgZWxmX2hhc2gsIG5hbWUpOworICAgICAgICAgICAgICAgIGlmIChzICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgKmxzaSA9IGdfbGRfcHJlbG9hZHNbaV07CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBPcmRlciBvZiBzeW1ib2wgbG9va3VwIGlzIGNvbnRyb2xsZWQgYnkgRFRfU1lNQk9MSUMgZmxhZyAqLwogCkBAIC01MjcsNiArNTIxLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICpsc2kgPSBzb21haW47CiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBOZXh0LCBsb29rIGZvciBpdCBpbiB0aGUgcHJlbG9hZHMgbGlzdCAqLworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBnX2xkX3ByZWxvYWRzW2ldICE9IE5VTEw7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBzID0gc29pbmZvX2VsZl9sb29rdXAoZ19sZF9wcmVsb2Fkc1tpXSwgZWxmX2hhc2gsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAocyAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqbHNpID0gZ19sZF9wcmVsb2Fkc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLyogTG9vayBmb3Igc3ltYm9scyBpbiB0aGUgbG9jYWwgc2NvcGUgKHRoZSBvYmplY3Qgd2hvIGlzCkBAIC01NTgsMTYgKzU2MSwxNiBAQAogICAgICAgICAgICAgICAgICAgICAqbHNpID0gc29tYWluOwogICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQogCi0gICAgLyogTmV4dCwgbG9vayBmb3IgaXQgaW4gdGhlIHByZWxvYWRzIGxpc3QgKi8KLSAgICBmb3IgKGludCBpID0gMDsgZ0xkUHJlbG9hZHNbaV0gIT0gTlVMTDsgaSsrKSB7Ci0gICAgICAgIHMgPSBzb2luZm9fZWxmX2xvb2t1cChnTGRQcmVsb2Fkc1tpXSwgZWxmX2hhc2gsIG5hbWUpOwotICAgICAgICBpZiAocyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAqbHNpID0gZ0xkUHJlbG9hZHNbaV07Ci0gICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgLyogTmV4dCwgbG9vayBmb3IgaXQgaW4gdGhlIHByZWxvYWRzIGxpc3QgKi8KKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgZ19sZF9wcmVsb2Fkc1tpXSAhPSBOVUxMOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcyA9IHNvaW5mb19lbGZfbG9va3VwKGdfbGRfcHJlbG9hZHNbaV0sIGVsZl9oYXNoLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHMgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgKmxzaSA9IGdfbGRfcHJlbG9hZHNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU5NCwxNyArNTk3LDUwIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLS8qIFRoaXMgaXMgdXNlZCBieSBkbHN5bSgzKS4gIEl0IHBlcmZvcm1zIHN5bWJvbCBsb29rdXAgb25seSB3aXRoaW4gdGhlCi0gICBzcGVjaWZpZWQgc29pbmZvIG9iamVjdCBhbmQgbm90IGluIGFueSBvZiBpdHMgZGVwZW5kZW5jaWVzLgorLy8gQW5vdGhlciBzb2luZm8gbGlzdCBhbGxvY2F0b3IgdG8gdXNlIGluIGRsc3ltLiBXZSBkb24ndCByZXVzZQorLy8gU29pbmZvTGlzdEFsbG9jYXRvciBiZWNhdXNlIGl0IGlzIHdyaXRlLXByb3RlY3RlZCBtb3N0IG9mIHRoZSB0aW1lLgorc3RhdGljIExpbmtlckFsbG9jYXRvcjxMaW5rZWRMaXN0RW50cnk8c29pbmZvPj4gZ19zb2luZm9fbGlzdF9hbGxvY2F0b3Jfcnc7CitjbGFzcyBTb2luZm9MaXN0QWxsb2NhdG9yUlcgeworIHB1YmxpYzoKKyAgc3RhdGljIExpbmtlZExpc3RFbnRyeTxzb2luZm8+KiBhbGxvYygpIHsKKyAgICByZXR1cm4gZ19zb2luZm9fbGlzdF9hbGxvY2F0b3JfcncuYWxsb2MoKTsKKyAgfQogCi0gICBUT0RPOiBPbmx5IGxvb2tpbmcgaW4gdGhlIHNwZWNpZmllZCBzb2luZm8gc2VlbXMgd3JvbmcuIGRsc3ltKDMpIHNheXMKLSAgIHRoYXQgaXQgc2hvdWxkIGRvIGEgYnJlYWR0aCBmaXJzdCBzZWFyY2ggdGhyb3VnaCB0aGUgZGVwZW5kZW5jeQotICAgdHJlZS4gVGhpcyBhZ3JlZXMgd2l0aCB0aGUgRUxGIHNwZWMgKGFrYSBTeXN0ZW0gViBBcHBsaWNhdGlvbgotICAgQmluYXJ5IEludGVyZmFjZSkgd2hlcmUgaW4gQ2hhcHRlciA1IGl0IGRpc2N1c3MgcmVzb2x2aW5nICJTaGFyZWQKLSAgIE9iamVjdCBEZXBlbmRlbmNpZXMiIGluIGJyZWFkdGggZmlyc3Qgc2VhcmNoIG9yZGVyLgotICovCi1FbGZfU3ltKiBkbHN5bV9oYW5kbGVfbG9va3VwKHNvaW5mbyogc2ksIGNvbnN0IGNoYXIqIG5hbWUpIHsKLSAgICByZXR1cm4gc29pbmZvX2VsZl9sb29rdXAoc2ksIGVsZmhhc2gobmFtZSksIG5hbWUpOworICBzdGF0aWMgdm9pZCBmcmVlKExpbmtlZExpc3RFbnRyeTxzb2luZm8+KiBwdHIpIHsKKyAgICBnX3NvaW5mb19saXN0X2FsbG9jYXRvcl9ydy5mcmVlKHB0cik7CisgIH0KK307CisKKy8vIFRoaXMgaXMgdXNlZCBieSBkbHN5bSgzKS4gIEl0IHBlcmZvcm1zIHN5bWJvbCBsb29rdXAgb25seSB3aXRoaW4gdGhlCisvLyBzcGVjaWZpZWQgc29pbmZvIG9iamVjdCBhbmQgaXRzIGRlcGVuZGVuY2llcyBpbiBicmVhZHRoIGZpcnN0IG9yZGVyLgorRWxmVyhTeW0pKiBkbHN5bV9oYW5kbGVfbG9va3VwKHNvaW5mbyogc2ksIHNvaW5mbyoqIGZvdW5kLCBjb25zdCBjaGFyKiBuYW1lKSB7CisgIExpbmtlZExpc3Q8c29pbmZvLCBTb2luZm9MaXN0QWxsb2NhdG9yUlc+IHZpc2l0X2xpc3Q7CisgIExpbmtlZExpc3Q8c29pbmZvLCBTb2luZm9MaXN0QWxsb2NhdG9yUlc+IHZpc2l0ZWQ7CisgIHZpc2l0X2xpc3QucHVzaF9iYWNrKHNpKTsKKyAgc29pbmZvKiBjdXJyZW50X3NvaW5mbzsKKyAgd2hpbGUgKChjdXJyZW50X3NvaW5mbyA9IHZpc2l0X2xpc3QucG9wX2Zyb250KCkpICE9IG51bGxwdHIpIHsKKyAgICBpZiAodmlzaXRlZC5jb250YWlucyhjdXJyZW50X3NvaW5mbykpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIEVsZlcoU3ltKSogcmVzdWx0ID0gc29pbmZvX2VsZl9sb29rdXAoY3VycmVudF9zb2luZm8sIGVsZmhhc2gobmFtZSksIG5hbWUpOworCisgICAgaWYgKHJlc3VsdCAhPSBudWxscHRyKSB7CisgICAgICAqZm91bmQgPSBjdXJyZW50X3NvaW5mbzsKKyAgICAgIHZpc2l0X2xpc3QuY2xlYXIoKTsKKyAgICAgIHZpc2l0ZWQuY2xlYXIoKTsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHZpc2l0ZWQucHVzaF9iYWNrKGN1cnJlbnRfc29pbmZvKTsKKworICAgIGN1cnJlbnRfc29pbmZvLT5nZXRfY2hpbGRyZW4oKS5mb3JfZWFjaChbJl0oc29pbmZvKiBjaGlsZCkgeworICAgICAgdmlzaXRfbGlzdC5wdXNoX2JhY2soY2hpbGQpOworICAgIH0pOworICB9CisKKyAgdmlzaXRfbGlzdC5jbGVhcigpOworICB2aXNpdGVkLmNsZWFyKCk7CisgIHJldHVybiBudWxscHRyOwogfQogCiAvKiBUaGlzIGlzIHVzZWQgYnkgZGxzeW0oMykgdG8gcGVyZm9ybXMgYSBnbG9iYWwgc3ltYm9sIGxvb2t1cC4gSWYgdGhlCkBAIC02MTIsMTQgKzY0OCwxNCBAQAogICAgYmVnaW5uaW5nIG9mIHRoZSBnbG9iYWwgc29saXN0LiBPdGhlcndpc2UgdGhlIHNlYXJjaCBzdGFydHMgYXQgdGhlCiAgICBzcGVjaWZpZWQgc29pbmZvIChmb3IgUlRMRF9ORVhUKS4KICAqLwotRWxmX1N5bSogZGxzeW1fbGluZWFyX2xvb2t1cChjb25zdCBjaGFyKiBuYW1lLCBzb2luZm8qKiBmb3VuZCwgc29pbmZvKiBzdGFydCkgeworRWxmVyhTeW0pKiBkbHN5bV9saW5lYXJfbG9va3VwKGNvbnN0IGNoYXIqIG5hbWUsIHNvaW5mbyoqIGZvdW5kLCBzb2luZm8qIHN0YXJ0KSB7CiAgIHVuc2lnbmVkIGVsZl9oYXNoID0gZWxmaGFzaChuYW1lKTsKIAogICBpZiAoc3RhcnQgPT0gTlVMTCkgewogICAgIHN0YXJ0ID0gc29saXN0OwogICB9CiAKLSAgRWxmX1N5bSogcyA9IE5VTEw7CisgIEVsZlcoU3ltKSogcyA9IE5VTEw7CiAgIGZvciAoc29pbmZvKiBzaSA9IHN0YXJ0OyAocyA9PSBOVUxMKSAmJiAoc2kgIT0gTlVMTCk7IHNpID0gc2ktPm5leHQpIHsKICAgICBzID0gc29pbmZvX2VsZl9sb29rdXAoc2ksIGVsZl9oYXNoLCBuYW1lKTsKICAgICBpZiAocyAhPSBOVUxMKSB7CkBAIC02MzcsNyArNjczLDcgQEAKIH0KIAogc29pbmZvKiBmaW5kX2NvbnRhaW5pbmdfbGlicmFyeShjb25zdCB2b2lkKiBwKSB7Ci0gIEVsZl9BZGRyIGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PEVsZl9BZGRyPihwKTsKKyAgRWxmVyhBZGRyKSBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpPihwKTsKICAgZm9yIChzb2luZm8qIHNpID0gc29saXN0OyBzaSAhPSBOVUxMOyBzaSA9IHNpLT5uZXh0KSB7CiAgICAgaWYgKGFkZHJlc3MgPj0gc2ktPmJhc2UgJiYgYWRkcmVzcyAtIHNpLT5iYXNlIDwgc2ktPnNpemUpIHsKICAgICAgIHJldHVybiBzaTsKQEAgLTY0NiwxMyArNjgyLDEzIEBACiAgIHJldHVybiBOVUxMOwogfQogCi1FbGZfU3ltKiBkbGFkZHJfZmluZF9zeW1ib2woc29pbmZvKiBzaSwgY29uc3Qgdm9pZCogYWRkcikgewotICBFbGZfQWRkciBzb2FkZHIgPSByZWludGVycHJldF9jYXN0PEVsZl9BZGRyPihhZGRyKSAtIHNpLT5iYXNlOworRWxmVyhTeW0pKiBkbGFkZHJfZmluZF9zeW1ib2woc29pbmZvKiBzaSwgY29uc3Qgdm9pZCogYWRkcikgeworICBFbGZXKEFkZHIpIHNvYWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKT4oYWRkcikgLSBzaS0+YmFzZTsKIAogICAvLyBTZWFyY2ggdGhlIGxpYnJhcnkncyBzeW1ib2wgdGFibGUgZm9yIGFueSBkZWZpbmVkIHN5bWJvbCB3aGljaAogICAvLyBjb250YWlucyB0aGlzIGFkZHJlc3MuCiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2ktPm5jaGFpbjsgKytpKSB7Ci0gICAgRWxmX1N5bSogc3ltID0gJnNpLT5zeW10YWJbaV07CisgICAgRWxmVyhTeW0pKiBzeW0gPSAmc2ktPnN5bXRhYltpXTsKICAgICBpZiAoc3ltLT5zdF9zaG5keCAhPSBTSE5fVU5ERUYgJiYKICAgICAgICAgc29hZGRyID49IHN5bS0+c3RfdmFsdWUgJiYKICAgICAgICAgc29hZGRyIDwgc3ltLT5zdF92YWx1ZSArIHN5bS0+c3Rfc2l6ZSkgewpAQCAtNjYzLDE5ICs2OTksNiBAQAogICByZXR1cm4gTlVMTDsKIH0KIAotI2lmIDAKLXN0YXRpYyB2b2lkIGR1bXAoc29pbmZvKiBzaSkKLXsKLSAgICBFbGZfU3ltKiBzID0gc2ktPnN5bXRhYjsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc2ktPm5jaGFpbjsgbisrKSB7Ci0gICAgICAgIFRSQUNFKCIlMDRkPiAlMDh4OiAlMDJ4ICUwNHggJTA4eCAlMDh4ICVzIiwgbiwgcywKLSAgICAgICAgICAgICAgIHMtPnN0X2luZm8sIHMtPnN0X3NobmR4LCBzLT5zdF92YWx1ZSwgcy0+c3Rfc2l6ZSwKLSAgICAgICAgICAgICAgIHNpLT5zdHJ0YWIgKyBzLT5zdF9uYW1lKTsKLSAgICAgICAgcysrOwotICAgIH0KLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IG9wZW5fbGlicmFyeV9vbl9wYXRoKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGNvbnN0IHBhdGhzW10pIHsKICAgY2hhciBidWZbNTEyXTsKICAgZm9yIChzaXplX3QgaSA9IDA7IHBhdGhzW2ldICE9IE5VTEw7ICsraSkgewpAQCAtNzAyLDEzMyArNzI1LDE4MCBAQAogICAgICAgcmV0dXJuIGZkOwogICAgIH0KICAgICAvLyAuLi5idXQgbnZpZGlhIGJpbmFyeSBibG9icyAoYXQgbGVhc3QpIHJlbHkgb24gdGhpcyBiZWhhdmlvciwgc28gZmFsbCB0aHJvdWdoIGZvciBub3cuCisjaWYgZGVmaW5lZChfX0xQNjRfXykKKyAgICByZXR1cm4gLTE7CisjZW5kaWYKICAgfQogCiAgIC8vIE90aGVyd2lzZSB3ZSB0cnkgTERfTElCUkFSWV9QQVRIIGZpcnN0LCBhbmQgZmFsbCBiYWNrIHRvIHRoZSBidWlsdC1pbiB3ZWxsIGtub3duIHBhdGhzLgotICBpbnQgZmQgPSBvcGVuX2xpYnJhcnlfb25fcGF0aChuYW1lLCBnTGRQYXRocyk7CisgIGludCBmZCA9IG9wZW5fbGlicmFyeV9vbl9wYXRoKG5hbWUsIGdfbGRfbGlicmFyeV9wYXRocyk7CiAgIGlmIChmZCA9PSAtMSkgewotICAgIGZkID0gb3Blbl9saWJyYXJ5X29uX3BhdGgobmFtZSwgZ0RlZmF1bHRMZFBhdGhzKTsKKyAgICBmZCA9IG9wZW5fbGlicmFyeV9vbl9wYXRoKG5hbWUsIGtEZWZhdWx0TGRQYXRocyk7CiAgIH0KICAgcmV0dXJuIGZkOwogfQogCi1zdGF0aWMgc29pbmZvKiBsb2FkX2xpYnJhcnkoY29uc3QgY2hhciogbmFtZSkgewotICAgIC8vIE9wZW4gdGhlIGZpbGUuCi0gICAgaW50IGZkID0gb3Blbl9saWJyYXJ5KG5hbWUpOwotICAgIGlmIChmZCA9PSAtMSkgeworc3RhdGljIHNvaW5mbyogbG9hZF9saWJyYXJ5KGNvbnN0IGNoYXIqIG5hbWUsIGludCBkbGZsYWdzLCBjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbykgeworICAgIGludCBmZCA9IC0xOworICAgIFNjb3BlZEZkIGZpbGVfZ3VhcmQoLTEpOworCisgICAgaWYgKGV4dGluZm8gIT0gTlVMTCAmJiAoZXh0aW5mby0+ZmxhZ3MgJiBBTkRST0lEX0RMRVhUX1VTRV9MSUJSQVJZX0ZEKSAhPSAwKSB7CisgICAgICBmZCA9IGV4dGluZm8tPmxpYnJhcnlfZmQ7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIE9wZW4gdGhlIGZpbGUuCisgICAgICBmZCA9IG9wZW5fbGlicmFyeShuYW1lKTsKKyAgICAgIGlmIChmZCA9PSAtMSkgewogICAgICAgICBETF9FUlIoImxpYnJhcnkgXCIlc1wiIG5vdCBmb3VuZCIsIG5hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKworICAgICAgZmlsZV9ndWFyZC5yZXNldChmZCk7CisgICAgfQorCisgICAgRWxmUmVhZGVyIGVsZl9yZWFkZXIobmFtZSwgZmQpOworCisgICAgc3RydWN0IHN0YXQgZmlsZV9zdGF0OworICAgIGlmIChURU1QX0ZBSUxVUkVfUkVUUlkoZnN0YXQoZmQsICZmaWxlX3N0YXQpKSAhPSAwKSB7CisgICAgICBETF9FUlIoInVuYWJsZSB0byBzdGF0IGZpbGUgZm9yIHRoZSBsaWJyYXJ5ICVzOiAlcyIsIG5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvLyBDaGVjayBmb3Igc3ltbGluayBhbmQgb3RoZXIgc2l0dWF0aW9ucyB3aGVyZQorICAgIC8vIGZpbGUgY2FuIGhhdmUgZGlmZmVyZW50IG5hbWVzLgorICAgIGZvciAoc29pbmZvKiBzaSA9IHNvbGlzdDsgc2kgIT0gTlVMTDsgc2kgPSBzaS0+bmV4dCkgeworICAgICAgaWYgKHNpLT5nZXRfc3RfZGV2KCkgIT0gMCAmJgorICAgICAgICAgIHNpLT5nZXRfc3RfaW5vKCkgIT0gMCAmJgorICAgICAgICAgIHNpLT5nZXRfc3RfZGV2KCkgPT0gZmlsZV9zdGF0LnN0X2RldiAmJgorICAgICAgICAgIHNpLT5nZXRfc3RfaW5vKCkgPT0gZmlsZV9zdGF0LnN0X2lubykgeworICAgICAgICBUUkFDRSgibGlicmFyeSBcIiVzXCIgaXMgYWxyZWFkeSBsb2FkZWQgdW5kZXIgZGlmZmVyZW50IG5hbWUvcGF0aCBcIiVzXCIgLSB3aWxsIHJldHVybiBleGlzdGluZyBzb2luZm8iLCBuYW1lLCBzaS0+bmFtZSk7CisgICAgICAgIHJldHVybiBzaTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKGRsZmxhZ3MgJiBSVExEX05PTE9BRCkgIT0gMCkgeworICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgLy8gUmVhZCB0aGUgRUxGIGhlYWRlciBhbmQgbG9hZCB0aGUgc2VnbWVudHMuCi0gICAgRWxmUmVhZGVyIGVsZl9yZWFkZXIobmFtZSwgZmQpOwotICAgIGlmICghZWxmX3JlYWRlci5Mb2FkKCkpIHsKKyAgICBpZiAoIWVsZl9yZWFkZXIuTG9hZChleHRpbmZvKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBjb25zdCBjaGFyKiBibmFtZSA9IHN0cnJjaHIobmFtZSwgJy8nKTsKLSAgICBzb2luZm8qIHNpID0gc29pbmZvX2FsbG9jKGJuYW1lID8gYm5hbWUgKyAxIDogbmFtZSk7CisgICAgc29pbmZvKiBzaSA9IHNvaW5mb19hbGxvYyhTRUFSQ0hfTkFNRShuYW1lKSwgJmZpbGVfc3RhdCk7CiAgICAgaWYgKHNpID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHNpLT5iYXNlID0gZWxmX3JlYWRlci5sb2FkX3N0YXJ0KCk7CiAgICAgc2ktPnNpemUgPSBlbGZfcmVhZGVyLmxvYWRfc2l6ZSgpOwogICAgIHNpLT5sb2FkX2JpYXMgPSBlbGZfcmVhZGVyLmxvYWRfYmlhcygpOwotICAgIHNpLT5mbGFncyA9IDA7Ci0gICAgc2ktPmVudHJ5ID0gMDsKLSAgICBzaS0+ZHluYW1pYyA9IE5VTEw7CiAgICAgc2ktPnBobnVtID0gZWxmX3JlYWRlci5waGRyX2NvdW50KCk7CiAgICAgc2ktPnBoZHIgPSBlbGZfcmVhZGVyLmxvYWRlZF9waGRyKCk7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgdGhhdCB3aGF0ZXZlciBpcyBsb2FkZWQgQCBiYXNlIGlzIGEgdmFsaWQgRUxGCisgICAgLy8gc2hhcmVkIGxpYnJhcnkgd2hvc2Ugc2VnbWVudHMgYXJlIHByb3Blcmx5IG1hcHBlZCBpbi4KKyAgICBUUkFDRSgiWyBsb2FkX2xpYnJhcnkgYmFzZT0lcCBzaXplPSV6dSBuYW1lPSclcycgXSIsCisgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc2ktPmJhc2UpLCBzaS0+c2l6ZSwgc2ktPm5hbWUpOworCisgICAgaWYgKCFzb2luZm9fbGlua19pbWFnZShzaSwgZXh0aW5mbykpIHsKKyAgICAgIHNvaW5mb19mcmVlKHNpKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIHJldHVybiBzaTsKIH0KIAotc3RhdGljIHNvaW5mbyAqZmluZF9sb2FkZWRfbGlicmFyeShjb25zdCBjaGFyICpuYW1lKQotewotICAgIHNvaW5mbyAqc2k7Ci0gICAgY29uc3QgY2hhciAqYm5hbWU7Ci0KLSAgICAvLyBUT0RPOiBkb24ndCB1c2UgYmFzZW5hbWUgb25seSBmb3IgZGV0ZXJtaW5pbmcgbGlicmFyaWVzCi0gICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2RldGFpbD9pZD02NjcwCi0KLSAgICBibmFtZSA9IHN0cnJjaHIobmFtZSwgJy8nKTsKLSAgICBibmFtZSA9IGJuYW1lID8gYm5hbWUgKyAxIDogbmFtZTsKLQotICAgIGZvciAoc2kgPSBzb2xpc3Q7IHNpICE9IE5VTEw7IHNpID0gc2ktPm5leHQpIHsKLSAgICAgICAgaWYgKCFzdHJjbXAoYm5hbWUsIHNpLT5uYW1lKSkgewotICAgICAgICAgICAgcmV0dXJuIHNpOwotICAgICAgICB9CitzdGF0aWMgc29pbmZvICpmaW5kX2xvYWRlZF9saWJyYXJ5X2J5X25hbWUoY29uc3QgY2hhciogbmFtZSkgeworICBjb25zdCBjaGFyKiBzZWFyY2hfbmFtZSA9IFNFQVJDSF9OQU1FKG5hbWUpOworICBmb3IgKHNvaW5mbyogc2kgPSBzb2xpc3Q7IHNpICE9IE5VTEw7IHNpID0gc2ktPm5leHQpIHsKKyAgICBpZiAoIXN0cmNtcChzZWFyY2hfbmFtZSwgc2ktPm5hbWUpKSB7CisgICAgICByZXR1cm4gc2k7CiAgICAgfQotICAgIHJldHVybiBOVUxMOworICB9CisgIHJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgc29pbmZvKiBmaW5kX2xpYnJhcnlfaW50ZXJuYWwoY29uc3QgY2hhciogbmFtZSkgeworc3RhdGljIHNvaW5mbyogZmluZF9saWJyYXJ5X2ludGVybmFsKGNvbnN0IGNoYXIqIG5hbWUsIGludCBkbGZsYWdzLCBjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbykgewogICBpZiAobmFtZSA9PSBOVUxMKSB7CiAgICAgcmV0dXJuIHNvbWFpbjsKICAgfQogCi0gIHNvaW5mbyogc2kgPSBmaW5kX2xvYWRlZF9saWJyYXJ5KG5hbWUpOwotICBpZiAoc2kgIT0gTlVMTCkgewotICAgIGlmIChzaS0+ZmxhZ3MgJiBGTEFHX0xJTktFRCkgewotICAgICAgcmV0dXJuIHNpOwotICAgIH0KLSAgICBETF9FUlIoIk9PUFM6IHJlY3Vyc2l2ZSBsaW5rIHRvIFwiJXNcIiIsIHNpLT5uYW1lKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQorICBzb2luZm8qIHNpID0gZmluZF9sb2FkZWRfbGlicmFyeV9ieV9uYW1lKG5hbWUpOwogCi0gIFRSQUNFKCJbICclcycgaGFzIG5vdCBiZWVuIGxvYWRlZCB5ZXQuICBMb2NhdGluZy4uLl0iLCBuYW1lKTsKLSAgc2kgPSBsb2FkX2xpYnJhcnkobmFtZSk7CisgIC8vIExpYnJhcnkgbWlnaHQgc3RpbGwgYmUgbG9hZGVkLCB0aGUgYWNjdXJhdGUgZGV0ZWN0aW9uCisgIC8vIG9mIHRoaXMgZmFjdCBpcyBkb25lIGJ5IGxvYWRfbGlicmFyeQogICBpZiAoc2kgPT0gTlVMTCkgewotICAgIHJldHVybiBOVUxMOworICAgIFRSQUNFKCJbICclcycgaGFzIG5vdCBiZWVuIGZvdW5kIGJ5IG5hbWUuICBUcnlpbmcgaGFyZGVyLi4uXSIsIG5hbWUpOworICAgIHNpID0gbG9hZF9saWJyYXJ5KG5hbWUsIGRsZmxhZ3MsIGV4dGluZm8pOwogICB9CiAKLSAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgd2hhdGV2ZXIgaXMgbG9hZGVkIEAgYmFzZSBpcyBhIHZhbGlkIEVMRgotICAvLyBzaGFyZWQgbGlicmFyeSB3aG9zZSBzZWdtZW50cyBhcmUgcHJvcGVybHkgbWFwcGVkIGluLgotICBUUkFDRSgiWyBmaW5kX2xpYnJhcnlfaW50ZXJuYWwgYmFzZT0lcCBzaXplPSV6dSBuYW1lPSclcycgXSIsCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNpLT5iYXNlKSwgc2ktPnNpemUsIHNpLT5uYW1lKTsKLQotICBpZiAoIXNvaW5mb19saW5rX2ltYWdlKHNpKSkgewotICAgIG11bm1hcChyZWludGVycHJldF9jYXN0PHZvaWQqPihzaS0+YmFzZSksIHNpLT5zaXplKTsKLSAgICBzb2luZm9fZnJlZShzaSk7CisgIGlmIChzaSAhPSBOVUxMICYmIChzaS0+ZmxhZ3MgJiBGTEFHX0xJTktFRCkgPT0gMCkgeworICAgIERMX0VSUigicmVjdXJzaXZlIGxpbmsgdG8gXCIlc1wiIiwgc2ktPm5hbWUpOwogICAgIHJldHVybiBOVUxMOwogICB9CiAKICAgcmV0dXJuIHNpOwogfQogCi1zdGF0aWMgc29pbmZvKiBmaW5kX2xpYnJhcnkoY29uc3QgY2hhciogbmFtZSkgewotICBzb2luZm8qIHNpID0gZmluZF9saWJyYXJ5X2ludGVybmFsKG5hbWUpOworc3RhdGljIHNvaW5mbyogZmluZF9saWJyYXJ5KGNvbnN0IGNoYXIqIG5hbWUsIGludCBkbGZsYWdzLCBjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbykgeworICBzb2luZm8qIHNpID0gZmluZF9saWJyYXJ5X2ludGVybmFsKG5hbWUsIGRsZmxhZ3MsIGV4dGluZm8pOwogICBpZiAoc2kgIT0gTlVMTCkgewogICAgIHNpLT5yZWZfY291bnQrKzsKICAgfQogICByZXR1cm4gc2k7CiB9CiAKLXN0YXRpYyBpbnQgc29pbmZvX3VubG9hZChzb2luZm8qIHNpKSB7CitzdGF0aWMgdm9pZCBzb2luZm9fdW5sb2FkKHNvaW5mbyogc2kpIHsKICAgaWYgKHNpLT5yZWZfY291bnQgPT0gMSkgewogICAgIFRSQUNFKCJ1bmxvYWRpbmcgJyVzJyIsIHNpLT5uYW1lKTsKICAgICBzaS0+Q2FsbERlc3RydWN0b3JzKCk7CiAKLSAgICBmb3IgKEVsZl9EeW4qIGQgPSBzaS0+ZHluYW1pYzsgZC0+ZF90YWcgIT0gRFRfTlVMTDsgKytkKSB7Ci0gICAgICBpZiAoZC0+ZF90YWcgPT0gRFRfTkVFREVEKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGxpYnJhcnlfbmFtZSA9IHNpLT5zdHJ0YWIgKyBkLT5kX3VuLmRfdmFsOwotICAgICAgICBUUkFDRSgiJXMgbmVlZHMgdG8gdW5sb2FkICVzIiwgc2ktPm5hbWUsIGxpYnJhcnlfbmFtZSk7Ci0gICAgICAgIHNvaW5mb191bmxvYWQoZmluZF9sb2FkZWRfbGlicmFyeShsaWJyYXJ5X25hbWUpKTsKKyAgICBpZiAoKHNpLT5mbGFncyB8IEZMQUdfTkVXX1NPSU5GTykgIT0gMCkgeworICAgICAgc2ktPmdldF9jaGlsZHJlbigpLmZvcl9lYWNoKFsmXSAoc29pbmZvKiBjaGlsZCkgeworICAgICAgICBUUkFDRSgiJXMgbmVlZHMgdG8gdW5sb2FkICVzIiwgc2ktPm5hbWUsIGNoaWxkLT5uYW1lKTsKKyAgICAgICAgc29pbmZvX3VubG9hZChjaGlsZCk7CisgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgZm9yIChFbGZXKER5bikqIGQgPSBzaS0+ZHluYW1pYzsgZC0+ZF90YWcgIT0gRFRfTlVMTDsgKytkKSB7CisgICAgICAgIGlmIChkLT5kX3RhZyA9PSBEVF9ORUVERUQpIHsKKyAgICAgICAgICBjb25zdCBjaGFyKiBsaWJyYXJ5X25hbWUgPSBzaS0+c3RydGFiICsgZC0+ZF91bi5kX3ZhbDsKKyAgICAgICAgICBUUkFDRSgiJXMgbmVlZHMgdG8gdW5sb2FkICVzIiwgc2ktPm5hbWUsIGxpYnJhcnlfbmFtZSk7CisgICAgICAgICAgc29pbmZvKiBuZWVkZWQgPSBmaW5kX2xpYnJhcnkobGlicmFyeV9uYW1lLCBSVExEX05PTE9BRCwgTlVMTCk7CisgICAgICAgICAgaWYgKG5lZWRlZCAhPSBOVUxMKSB7CisgICAgICAgICAgICBzb2luZm9fdW5sb2FkKG5lZWRlZCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vdCBmb3VuZDogZm9yIGV4YW1wbGUgaWYgc3ltbGluayB3YXMgZGVsZXRlZCBiZXR3ZWVuIGRsb3BlbiBhbmQgZGxjbG9zZQorICAgICAgICAgICAgLy8gU2luY2Ugd2UgY2Fubm90IHJlYWxseSBoYW5kbGUgZXJyb3JzIGF0IHRoaXMgcG9pbnQgLSBwcmludCBhbmQgY29udGludWUuCisgICAgICAgICAgICBQUklOVCgid2FybmluZzogY291bGRuJ3QgZmluZCAlcyBuZWVkZWQgYnkgJXMgb24gdW5sb2FkLiIsIGxpYnJhcnlfbmFtZSwgc2ktPm5hbWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgfQogICAgIH0KIAotICAgIG11bm1hcChyZWludGVycHJldF9jYXN0PHZvaWQqPihzaS0+YmFzZSksIHNpLT5zaXplKTsKICAgICBub3RpZnlfZ2RiX29mX3VubG9hZChzaSk7Ci0gICAgc29pbmZvX2ZyZWUoc2kpOwogICAgIHNpLT5yZWZfY291bnQgPSAwOworICAgIHNvaW5mb19mcmVlKHNpKTsKICAgfSBlbHNlIHsKICAgICBzaS0+cmVmX2NvdW50LS07CiAgICAgVFJBQ0UoIm5vdCB1bmxvYWRpbmcgJyVzJywgZGVjcmVtZW50aW5nIHJlZl9jb3VudCB0byAlemQiLCBzaS0+bmFtZSwgc2ktPnJlZl9jb3VudCk7CiAgIH0KLSAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgZG9fYW5kcm9pZF9nZXRfTERfTElCUkFSWV9QQVRIKGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplKSB7Ci0gIHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVyX3NpemUsICIlczolcyIsIGdEZWZhdWx0TGRQYXRoc1swXSwgZ0RlZmF1bHRMZFBhdGhzWzFdKTsKKyAgLy8gVXNlIGJhc2ljIHN0cmluZyBtYW5pcHVsYXRpb24gY2FsbHMgdG8gYXZvaWQgc25wcmludGYuCisgIC8vIHNucHJpbnRmIGluZGlyZWN0bHkgY2FsbHMgcHRocmVhZF9nZXRzcGVjaWZpYyB0byBnZXQgdGhlIHNpemUgb2YgYSBidWZmZXIuCisgIC8vIFdoZW4gZGVidWcgbWFsbG9jIGlzIGVuYWJsZWQsIHRoaXMgY2FsbCByZXR1cm5zIDAuIFRoaXMgaW4gdHVybiBjYXVzZXMKKyAgLy8gc25wcmludGYgdG8gZG8gbm90aGluZywgd2hpY2ggY2F1c2VzIGxpYnJhcmllcyB0byBmYWlsIHRvIGxvYWQuCisgIC8vIFNlZSBiLzE3MzAyNDkzIGZvciBmdXJ0aGVyIGRldGFpbHMuCisgIC8vIE9uY2UgdGhlIGFib3ZlIGJ1ZyBpcyBmaXhlZCwgdGhpcyBjb2RlIGNhbiBiZSBtb2RpZmllZCB0byB1c2UKKyAgLy8gc25wcmludGYgYWdhaW4uCisgIHNpemVfdCByZXF1aXJlZF9sZW4gPSBzdHJsZW4oa0RlZmF1bHRMZFBhdGhzWzBdKSArIHN0cmxlbihrRGVmYXVsdExkUGF0aHNbMV0pICsgMjsKKyAgaWYgKGJ1ZmZlcl9zaXplIDwgcmVxdWlyZWRfbGVuKSB7CisgICAgX19saWJjX2ZhdGFsKCJhbmRyb2lkX2dldF9MRF9MSUJSQVJZX1BBVEggZmFpbGVkLCBidWZmZXIgdG9vIHNtYWxsOiBidWZmZXIgbGVuICV6dSwgcmVxdWlyZWQgbGVuICV6dSIsCisgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplLCByZXF1aXJlZF9sZW4pOworICB9CisgIGNoYXIqIGVuZCA9IHN0cGNweShidWZmZXIsIGtEZWZhdWx0TGRQYXRoc1swXSk7CisgICplbmQgPSAnOic7CisgIHN0cmNweShlbmQgKyAxLCBrRGVmYXVsdExkUGF0aHNbMV0pOwogfQogCiB2b2lkIGRvX2FuZHJvaWRfdXBkYXRlX0xEX0xJQlJBUllfUEFUSChjb25zdCBjaGFyKiBsZF9saWJyYXJ5X3BhdGgpIHsKQEAgLTgzNyw1MiArOTA3LDUyIEBACiAgIH0KIH0KIAotc29pbmZvKiBkb19kbG9wZW4oY29uc3QgY2hhciogbmFtZSwgaW50IGZsYWdzKSB7Ci0gIGlmICgoZmxhZ3MgJiB+KFJUTERfTk9XfFJUTERfTEFaWXxSVExEX0xPQ0FMfFJUTERfR0xPQkFMKSkgIT0gMCkgeworc29pbmZvKiBkb19kbG9wZW4oY29uc3QgY2hhciogbmFtZSwgaW50IGZsYWdzLCBjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbykgeworICBpZiAoKGZsYWdzICYgfihSVExEX05PV3xSVExEX0xBWll8UlRMRF9MT0NBTHxSVExEX0dMT0JBTHxSVExEX05PTE9BRCkpICE9IDApIHsKICAgICBETF9FUlIoImludmFsaWQgZmxhZ3MgdG8gZGxvcGVuOiAleCIsIGZsYWdzKTsKICAgICByZXR1cm4gTlVMTDsKICAgfQotICBzZXRfc29pbmZvX3Bvb2xfcHJvdGVjdGlvbihQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKLSAgc29pbmZvKiBzaSA9IGZpbmRfbGlicmFyeShuYW1lKTsKKyAgaWYgKGV4dGluZm8gIT0gTlVMTCAmJiAoKGV4dGluZm8tPmZsYWdzICYgfihBTkRST0lEX0RMRVhUX1ZBTElEX0ZMQUdfQklUUykpICE9IDApKSB7CisgICAgRExfRVJSKCJpbnZhbGlkIGV4dGVuZGVkIGZsYWdzIHRvIGFuZHJvaWRfZGxvcGVuX2V4dDogJSIgUFJJeDY0LCBleHRpbmZvLT5mbGFncyk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgcHJvdGVjdF9kYXRhKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworICBzb2luZm8qIHNpID0gZmluZF9saWJyYXJ5KG5hbWUsIGZsYWdzLCBleHRpbmZvKTsKICAgaWYgKHNpICE9IE5VTEwpIHsKICAgICBzaS0+Q2FsbENvbnN0cnVjdG9ycygpOwogICB9Ci0gIHNldF9zb2luZm9fcG9vbF9wcm90ZWN0aW9uKFBST1RfUkVBRCk7CisgIHByb3RlY3RfZGF0YShQUk9UX1JFQUQpOwogICByZXR1cm4gc2k7CiB9CiAKLWludCBkb19kbGNsb3NlKHNvaW5mbyogc2kpIHsKLSAgc2V0X3NvaW5mb19wb29sX3Byb3RlY3Rpb24oUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Ci0gIGludCByZXN1bHQgPSBzb2luZm9fdW5sb2FkKHNpKTsKLSAgc2V0X3NvaW5mb19wb29sX3Byb3RlY3Rpb24oUFJPVF9SRUFEKTsKLSAgcmV0dXJuIHJlc3VsdDsKK3ZvaWQgZG9fZGxjbG9zZShzb2luZm8qIHNpKSB7CisgIHByb3RlY3RfZGF0YShQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKyAgc29pbmZvX3VubG9hZChzaSk7CisgIHByb3RlY3RfZGF0YShQUk9UX1JFQUQpOwogfQogCiAjaWYgZGVmaW5lZChVU0VfUkVMQSkKLXN0YXRpYyBpbnQgc29pbmZvX3JlbG9jYXRlX2Eoc29pbmZvKiBzaSwgRWxmX1JlbGEqIHJlbGEsIHVuc2lnbmVkIGNvdW50LCBzb2luZm8qIG5lZWRlZFtdKSB7Ci0gIEVsZl9TeW0qIHN5bXRhYiA9IHNpLT5zeW10YWI7Ci0gIGNvbnN0IGNoYXIqIHN0cnRhYiA9IHNpLT5zdHJ0YWI7Ci0gIEVsZl9TeW0qIHM7Ci0gIEVsZl9SZWxhKiBzdGFydCA9IHJlbGE7CitzdGF0aWMgaW50IHNvaW5mb19yZWxvY2F0ZShzb2luZm8qIHNpLCBFbGZXKFJlbGEpKiByZWxhLCB1bnNpZ25lZCBjb3VudCwgc29pbmZvKiBuZWVkZWRbXSkgeworICBFbGZXKFN5bSkqIHM7CiAgIHNvaW5mbyogbHNpOwogCiAgIGZvciAoc2l6ZV90IGlkeCA9IDA7IGlkeCA8IGNvdW50OyArK2lkeCwgKytyZWxhKSB7Ci0gICAgdW5zaWduZWQgdHlwZSA9IEVMRl9SX1RZUEUocmVsYS0+cl9pbmZvKTsKLSAgICB1bnNpZ25lZCBzeW0gPSBFTEZfUl9TWU0ocmVsYS0+cl9pbmZvKTsKLSAgICBFbGZfQWRkciByZWxvYyA9IHN0YXRpY19jYXN0PEVsZl9BZGRyPihyZWxhLT5yX29mZnNldCArIHNpLT5sb2FkX2JpYXMpOwotICAgIEVsZl9BZGRyIHN5bV9hZGRyID0gMDsKLSAgICBjaGFyKiBzeW1fbmFtZSA9IE5VTEw7CisgICAgdW5zaWduZWQgdHlwZSA9IEVMRlcoUl9UWVBFKShyZWxhLT5yX2luZm8pOworICAgIHVuc2lnbmVkIHN5bSA9IEVMRlcoUl9TWU0pKHJlbGEtPnJfaW5mbyk7CisgICAgRWxmVyhBZGRyKSByZWxvYyA9IHN0YXRpY19jYXN0PEVsZlcoQWRkcik+KHJlbGEtPnJfb2Zmc2V0ICsgc2ktPmxvYWRfYmlhcyk7CisgICAgRWxmVyhBZGRyKSBzeW1fYWRkciA9IDA7CisgICAgY29uc3QgY2hhciogc3ltX25hbWUgPSBOVUxMOwogCiAgICAgREVCVUcoIlByb2Nlc3NpbmcgJyVzJyByZWxvY2F0aW9uIGF0IGluZGV4ICV6ZCIsIHNpLT5uYW1lLCBpZHgpOwogICAgIGlmICh0eXBlID09IDApIHsgLy8gUl8qX05PTkUKICAgICAgIGNvbnRpbnVlOwogICAgIH0KICAgICBpZiAoc3ltICE9IDApIHsKLSAgICAgIHN5bV9uYW1lID0gKGNoYXIgKikoc3RydGFiICsgc3ltdGFiW3N5bV0uc3RfbmFtZSk7CisgICAgICBzeW1fbmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHNpLT5zdHJ0YWIgKyBzaS0+c3ltdGFiW3N5bV0uc3RfbmFtZSk7CiAgICAgICBzID0gc29pbmZvX2RvX2xvb2t1cChzaSwgc3ltX25hbWUsICZsc2ksIG5lZWRlZCk7CiAgICAgICBpZiAocyA9PSBOVUxMKSB7CiAgICAgICAgIC8vIFdlIG9ubHkgYWxsb3cgYW4gdW5kZWZpbmVkIHN5bWJvbCBpZiB0aGlzIGlzIGEgd2VhayByZWZlcmVuY2UuLi4KLSAgICAgICAgcyA9ICZzeW10YWJbc3ltXTsKKyAgICAgICAgcyA9ICZzaS0+c3ltdGFiW3N5bV07CiAgICAgICAgIGlmIChFTEZfU1RfQklORChzLT5zdF9pbmZvKSAhPSBTVEJfV0VBSykgewogICAgICAgICAgIERMX0VSUigiY2Fubm90IGxvY2F0ZSBzeW1ib2wgXCIlc1wiIHJlZmVyZW5jZWQgYnkgXCIlc1wiLi4uIiwgc3ltX25hbWUsIHNpLT5uYW1lKTsKICAgICAgICAgICByZXR1cm4gLTE7CkBAIC05MTgsNiArOTg4LDcgQEAKICAgICAgICAgY2FzZSBSX1g4Nl82NF9KVU1QX1NMT1Q6CiAgICAgICAgIGNhc2UgUl9YODZfNjRfR0xPQl9EQVQ6CiAgICAgICAgIGNhc2UgUl9YODZfNjRfMzI6CisgICAgICAgIGNhc2UgUl9YODZfNjRfNjQ6CiAgICAgICAgIGNhc2UgUl9YODZfNjRfUkVMQVRJVkU6CiAgICAgICAgICAgLy8gTm8gbmVlZCB0byBkbyBhbnl0aGluZy4KICAgICAgICAgICBicmVhazsKQEAgLTkyNiwxMiArOTk3LDEyIEBACiAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBETF9FUlIoInVua25vd24gd2VhayByZWxvYyB0eXBlICVkIEAgJXAgKCVkKSIsIHR5cGUsIHJlbGEsIChpbnQpIChyZWxhIC0gc3RhcnQpKTsKKyAgICAgICAgICBETF9FUlIoInVua25vd24gd2VhayByZWxvYyB0eXBlICVkIEAgJXAgKCV6dSkiLCB0eXBlLCByZWxhLCBpZHgpOwogICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gV2UgZ290IGEgZGVmaW5pdGlvbi4KLSAgICAgICAgc3ltX2FkZHIgPSBzdGF0aWNfY2FzdDxFbGZfQWRkcj4ocy0+c3RfdmFsdWUgKyBsc2ktPmxvYWRfYmlhcyk7CisgICAgICAgIHN5bV9hZGRyID0gc3RhdGljX2Nhc3Q8RWxmVyhBZGRyKT4ocy0+c3RfdmFsdWUgKyBsc2ktPmxvYWRfYmlhcyk7CiAgICAgICB9CiAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY1N5bWJvbCk7CiAgICAgfSBlbHNlIHsKQEAgLTk0MywxMTcgKzEwMTQsOTIgQEAKICAgICBjYXNlIFJfQUFSQ0g2NF9KVU1QX1NMT1Q6CiAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jQWJzb2x1dGUpOwogICAgICAgICBNQVJLKHJlbGEtPnJfb2Zmc2V0KTsKLSAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBKTVBfU0xPVCAlMTZseCA8LSAlMTZseCAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgcmVsb2MsCi0gICAgICAgICAgICAgICAgICAgIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSwKLSAgICAgICAgICAgICAgICAgICAgc3ltX25hbWUpOwotICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSA9IChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKTsKKyAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBKTVBfU0xPVCAlMTZsbHggPC0gJTE2bGx4ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIHJlbG9jLCAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksIHN5bV9uYW1lKTsKKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSA9IChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSX0FBUkNINjRfR0xPQl9EQVQ6CiAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jQWJzb2x1dGUpOwogICAgICAgICBNQVJLKHJlbGEtPnJfb2Zmc2V0KTsKLSAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBHTE9CX0RBVCAlMTZseCA8LSAlMTZseCAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgcmVsb2MsCi0gICAgICAgICAgICAgICAgICAgIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSwKLSAgICAgICAgICAgICAgICAgICAgc3ltX25hbWUpOwotICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSA9IChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKTsKKyAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBHTE9CX0RBVCAlMTZsbHggPC0gJTE2bGx4ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIHJlbG9jLCAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksIHN5bV9uYW1lKTsKKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSA9IChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSX0FBUkNINjRfQUJTNjQ6CiAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jQWJzb2x1dGUpOwogICAgICAgICBNQVJLKHJlbGEtPnJfb2Zmc2V0KTsKLSAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBBQlM2NCAlMTZseCA8LSAlMTZseCAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgcmVsb2MsCi0gICAgICAgICAgICAgICAgICAgIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSwKLSAgICAgICAgICAgICAgICAgICAgc3ltX25hbWUpOwotICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArPSAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCk7CisgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gQUJTNjQgJTE2bGx4IDwtICUxNmxseCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICByZWxvYywgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpLCBzeW1fbmFtZSk7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKz0gKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJfQUFSQ0g2NF9BQlMzMjoKICAgICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NBYnNvbHV0ZSk7CiAgICAgICAgIE1BUksocmVsYS0+cl9vZmZzZXQpOwotICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIEFCUzMyICUxNmx4IDwtICUxNmx4ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICByZWxvYywKLSAgICAgICAgICAgICAgICAgICAgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpLAotICAgICAgICAgICAgICAgICAgICBzeW1fbmFtZSk7Ci0gICAgICAgIGlmICgoc3RhdGljX2Nhc3Q8RWxmX0FkZHI+KElOVDMyX01JTikgPD0KLSAgICAgICAgICAoKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgKyAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkpKSAmJgotICAgICAgICAgICgoKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgKyAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkpIDw9Ci0gICAgICAgICAgc3RhdGljX2Nhc3Q8RWxmX0FkZHI+KFVJTlQzMl9NQVgpKSkgewotICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgKz0gKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpOworICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIEFCUzMyICUxNmxseCA8LSAlMTZsbHggJXNcbiIsCisgICAgICAgICAgICAgICAgICAgcmVsb2MsIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSwgc3ltX25hbWUpOworICAgICAgICBpZiAoKHN0YXRpY19jYXN0PEVsZlcoQWRkcik+KElOVDMyX01JTikgPD0gKCpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKyAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkpKSAmJgorICAgICAgICAgICAgKCgqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICsgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpKSA8PSBzdGF0aWNfY2FzdDxFbGZXKEFkZHIpPihVSU5UMzJfTUFYKSkpIHsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKz0gKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgRExfRVJSKCIweCUwMTZseCBvdXQgb2YgcmFuZ2UgMHglMDE2bHggdG8gMHglMDE2bHgiLAotICAgICAgICAgICAgICAgICAgICAoKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgKyAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkpLAotICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFbGZfQWRkcj4oSU5UMzJfTUlOKSwKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxmX0FkZHI+KFVJTlQzMl9NQVgpKTsKKyAgICAgICAgICAgIERMX0VSUigiMHglMDE2bGx4IG91dCBvZiByYW5nZSAweCUwMTZsbHggdG8gMHglMDE2bGx4IiwKKyAgICAgICAgICAgICAgICAgICAoKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSArIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSksCisgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxmVyhBZGRyKT4oSU5UMzJfTUlOKSwKKyAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFbGZXKEFkZHIpPihVSU5UMzJfTUFYKSk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSX0FBUkNINjRfQUJTMTY6CiAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jQWJzb2x1dGUpOwogICAgICAgICBNQVJLKHJlbGEtPnJfb2Zmc2V0KTsKLSAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBBQlMxNiAlMTZseCA8LSAlMTZseCAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgcmVsb2MsCi0gICAgICAgICAgICAgICAgICAgIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSwKLSAgICAgICAgICAgICAgICAgICAgc3ltX25hbWUpOwotICAgICAgICBpZiAoKHN0YXRpY19jYXN0PEVsZl9BZGRyPihJTlQxNl9NSU4pIDw9Ci0gICAgICAgICAgKCpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICsgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpKSkgJiYKLSAgICAgICAgICAoKCpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICsgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpKSA8PQotICAgICAgICAgIHN0YXRpY19jYXN0PEVsZl9BZGRyPihVSU5UMTZfTUFYKSkpIHsKLSAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICs9IChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKTsKKyAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBBQlMxNiAlMTZsbHggPC0gJTE2bGx4ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIHJlbG9jLCAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksIHN5bV9uYW1lKTsKKyAgICAgICAgaWYgKChzdGF0aWNfY2FzdDxFbGZXKEFkZHIpPihJTlQxNl9NSU4pIDw9ICgqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICsgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpKSkgJiYKKyAgICAgICAgICAgICgoKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSArIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSkgPD0gc3RhdGljX2Nhc3Q8RWxmVyhBZGRyKT4oVUlOVDE2X01BWCkpKSB7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICs9IChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIERMX0VSUigiMHglMDE2bHggb3V0IG9mIHJhbmdlIDB4JTAxNmx4IHRvIDB4JTAxNmx4IiwKLSAgICAgICAgICAgICAgICAgICAgKCpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICsgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpKSwKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxmX0FkZHI+KElOVDE2X01JTiksCi0gICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZl9BZGRyPihVSU5UMTZfTUFYKSk7CisgICAgICAgICAgICBETF9FUlIoIjB4JTAxNmxseCBvdXQgb2YgcmFuZ2UgMHglMDE2bGx4IHRvIDB4JTAxNmxseCIsCisgICAgICAgICAgICAgICAgICAgKCpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKyAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkpLAorICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZlcoQWRkcik+KElOVDE2X01JTiksCisgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxmVyhBZGRyKT4oVUlOVDE2X01BWCkpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUl9BQVJDSDY0X1BSRUw2NDoKICAgICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NSZWxhdGl2ZSk7CiAgICAgICAgIE1BUksocmVsYS0+cl9vZmZzZXQpOwotICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIFJFTDY0ICUxNmx4IDwtICUxNmx4IC0gJTE2bHggJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIHJlbG9jLAotICAgICAgICAgICAgICAgICAgICAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksCi0gICAgICAgICAgICAgICAgICAgIHJlbGEtPnJfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICBzeW1fbmFtZSk7Ci0gICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICs9IChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSAtIHJlbGEtPnJfb2Zmc2V0OworICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIFJFTDY0ICUxNmxseCA8LSAlMTZsbHggLSAlMTZsbHggJXNcbiIsCisgICAgICAgICAgICAgICAgICAgcmVsb2MsIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSwgcmVsYS0+cl9vZmZzZXQsIHN5bV9uYW1lKTsKKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSArPSAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkgLSByZWxhLT5yX29mZnNldDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSX0FBUkNINjRfUFJFTDMyOgogICAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY1JlbGF0aXZlKTsKICAgICAgICAgTUFSSyhyZWxhLT5yX29mZnNldCk7Ci0gICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gUkVMMzIgJTE2bHggPC0gJTE2bHggLSAlMTZseCAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgcmVsb2MsCi0gICAgICAgICAgICAgICAgICAgIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSwKLSAgICAgICAgICAgICAgICAgICAgcmVsYS0+cl9vZmZzZXQsIHN5bV9uYW1lKTsKLSAgICAgICAgaWYgKChzdGF0aWNfY2FzdDxFbGZfQWRkcj4oSU5UMzJfTUlOKSA8PQotICAgICAgICAgICgqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArICgoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkgLSByZWxhLT5yX29mZnNldCkpKSAmJgotICAgICAgICAgICgoKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgKyAoKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpIC0gcmVsYS0+cl9vZmZzZXQpKSA8PQotICAgICAgICAgIHN0YXRpY19jYXN0PEVsZl9BZGRyPihVSU5UMzJfTUFYKSkpIHsKLSAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICs9ICgoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkgLSByZWxhLT5yX29mZnNldCk7CisgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gUkVMMzIgJTE2bGx4IDwtICUxNmxseCAtICUxNmxseCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICByZWxvYywgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpLCByZWxhLT5yX29mZnNldCwgc3ltX25hbWUpOworICAgICAgICBpZiAoKHN0YXRpY19jYXN0PEVsZlcoQWRkcik+KElOVDMyX01JTikgPD0gKCpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKyAoKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpIC0gcmVsYS0+cl9vZmZzZXQpKSkgJiYKKyAgICAgICAgICAgICgoKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSArICgoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkgLSByZWxhLT5yX29mZnNldCkpIDw9IHN0YXRpY19jYXN0PEVsZlcoQWRkcik+KFVJTlQzMl9NQVgpKSkgeworICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSArPSAoKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpIC0gcmVsYS0+cl9vZmZzZXQpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgRExfRVJSKCIweCUwMTZseCBvdXQgb2YgcmFuZ2UgMHglMDE2bHggdG8gMHglMDE2bHgiLAotICAgICAgICAgICAgICAgICAgICAoKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgKyAoKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpIC0gcmVsYS0+cl9vZmZzZXQpKSwKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxmX0FkZHI+KElOVDMyX01JTiksCi0gICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZl9BZGRyPihVSU5UMzJfTUFYKSk7CisgICAgICAgICAgICBETF9FUlIoIjB4JTAxNmxseCBvdXQgb2YgcmFuZ2UgMHglMDE2bGx4IHRvIDB4JTAxNmxseCIsCisgICAgICAgICAgICAgICAgICAgKCpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKyAoKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpIC0gcmVsYS0+cl9vZmZzZXQpKSwKKyAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFbGZXKEFkZHIpPihJTlQzMl9NSU4pLAorICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZlcoQWRkcik+KFVJTlQzMl9NQVgpKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIFJfQUFSQ0g2NF9QUkVMMTY6CiAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jUmVsYXRpdmUpOwogICAgICAgICBNQVJLKHJlbGEtPnJfb2Zmc2V0KTsKLSAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBSRUwxNiAlMTZseCA8LSAlMTZseCAtICUxNmx4ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICByZWxvYywKLSAgICAgICAgICAgICAgICAgICAgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpLAotICAgICAgICAgICAgICAgICAgICByZWxhLT5yX29mZnNldCwgc3ltX25hbWUpOwotICAgICAgICBpZiAoKHN0YXRpY19jYXN0PEVsZl9BZGRyPihJTlQxNl9NSU4pIDw9Ci0gICAgICAgICAgKCpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICsgKChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSAtIHJlbGEtPnJfb2Zmc2V0KSkpICYmCi0gICAgICAgICAgKCgqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArICgoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkgLSByZWxhLT5yX29mZnNldCkpIDw9Ci0gICAgICAgICAgc3RhdGljX2Nhc3Q8RWxmX0FkZHI+KFVJTlQxNl9NQVgpKSkgewotICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgKz0gKChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSAtIHJlbGEtPnJfb2Zmc2V0KTsKKyAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBSRUwxNiAlMTZsbHggPC0gJTE2bGx4IC0gJTE2bGx4ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIHJlbG9jLCAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksIHJlbGEtPnJfb2Zmc2V0LCBzeW1fbmFtZSk7CisgICAgICAgIGlmICgoc3RhdGljX2Nhc3Q8RWxmVyhBZGRyKT4oSU5UMTZfTUlOKSA8PSAoKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSArICgoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkgLSByZWxhLT5yX29mZnNldCkpKSAmJgorICAgICAgICAgICAgKCgqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICsgKChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSAtIHJlbGEtPnJfb2Zmc2V0KSkgPD0gc3RhdGljX2Nhc3Q8RWxmVyhBZGRyKT4oVUlOVDE2X01BWCkpKSB7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICs9ICgoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkgLSByZWxhLT5yX29mZnNldCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBETF9FUlIoIjB4JTAxNmx4IG91dCBvZiByYW5nZSAweCUwMTZseCB0byAweCUwMTZseCIsCi0gICAgICAgICAgICAgICAgICAgICgqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArICgoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkgLSByZWxhLT5yX29mZnNldCkpLAotICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFbGZfQWRkcj4oSU5UMTZfTUlOKSwKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxmX0FkZHI+KFVJTlQxNl9NQVgpKTsKKyAgICAgICAgICAgIERMX0VSUigiMHglMDE2bGx4IG91dCBvZiByYW5nZSAweCUwMTZsbHggdG8gMHglMDE2bGx4IiwKKyAgICAgICAgICAgICAgICAgICAoKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSArICgoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkgLSByZWxhLT5yX29mZnNldCkpLAorICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZlcoQWRkcik+KElOVDE2X01JTiksCisgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxmVyhBZGRyKT4oVUlOVDE2X01BWCkpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTA2NSw2OSArMTExMSwzMCBAQAogICAgICAgICAgICAgRExfRVJSKCJvZGQgUkVMQVRJVkUgZm9ybS4uLiIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gUkVMQVRJVkUgJTE2bHggPC0gJTE2bHhcbiIsCi0gICAgICAgICAgICAgICAgICAgIHJlbG9jLAotICAgICAgICAgICAgICAgICAgICAoc2ktPmJhc2UgKyByZWxhLT5yX2FkZGVuZCkpOwotICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSA9IChzaS0+YmFzZSArIHJlbGEtPnJfYWRkZW5kKTsKKyAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBSRUxBVElWRSAlMTZsbHggPC0gJTE2bGx4XG4iLAorICAgICAgICAgICAgICAgICAgIHJlbG9jLCAoc2ktPmJhc2UgKyByZWxhLT5yX2FkZGVuZCkpOworICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpID0gKHNpLT5iYXNlICsgcmVsYS0+cl9hZGRlbmQpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUl9BQVJDSDY0X0NPUFk6Ci0gICAgICAgIGlmICgoc2ktPmZsYWdzICYgRkxBR19FWEUpID09IDApIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICogaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL3RvcGljL2NvbS5hcm0uZG9jLmloaTAwNDRkL0lISTAwNDREX2FhZWxmLnBkZgotICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICogU2VjdGlvbiA0LjcuMS4xMCAiRHluYW1pYyByZWxvY2F0aW9ucyIKLSAgICAgICAgICAgICAgKiBSX0FBUkNINjRfQ09QWSBtYXkgb25seSBhcHBlYXIgaW4gZXhlY3V0YWJsZSBvYmplY3RzIHdoZXJlIGVfdHlwZSBpcwotICAgICAgICAgICAgICAqIHNldCB0byBFVF9FWEVDLgotICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICogRkxBR19FWEUgaXMgc2V0IGZvciBib3RoIEVUX0RZTiBhbmQgRVRfRVhFQyBleGVjdXRhYmxlcy4KLSAgICAgICAgICAgICAgKiBXZSBzaG91bGQgZXhwbGljaXRseSBkaXNhbGxvdyBFVF9EWU4gZXhlY3V0YWJsZXMgZnJvbSBoYXZpbmcKLSAgICAgICAgICAgICAgKiBSX0FBUkNINjRfQ09QWSByZWxvY2F0aW9ucy4KLSAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIERMX0VSUigiJXMgUl9BQVJDSDY0X0NPUFkgcmVsb2NhdGlvbnMgb25seSBzdXBwb3J0ZWQgZm9yIEVUX0VYRUMiLCBzaS0+bmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NDb3B5KTsKLSAgICAgICAgTUFSSyhyZWxhLT5yX29mZnNldCk7Ci0gICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gQ09QWSAlMTZseCA8LSAlbGQgQCAlMTZseCAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgcmVsb2MsCi0gICAgICAgICAgICAgICAgICAgIHMtPnN0X3NpemUsCi0gICAgICAgICAgICAgICAgICAgIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSwKLSAgICAgICAgICAgICAgICAgICAgc3ltX25hbWUpOwotICAgICAgICBpZiAocmVsb2MgPT0gKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpKSB7Ci0gICAgICAgICAgICBFbGZfU3ltICpzcmMgPSBzb2luZm9fZG9fbG9va3VwKE5VTEwsIHN5bV9uYW1lLCAmbHNpLCBuZWVkZWQpOwotCi0gICAgICAgICAgICBpZiAoc3JjID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBETF9FUlIoIiVzIFJfQUFSQ0g2NF9DT1BZIHJlbG9jYXRpb24gc291cmNlIGNhbm5vdCBiZSByZXNvbHZlZCIsIHNpLT5uYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobHNpLT5oYXNfRFRfU1lNQk9MSUMpIHsKLSAgICAgICAgICAgICAgICBETF9FUlIoIiVzIGludmFsaWQgUl9BQVJDSDY0X0NPUFkgcmVsb2NhdGlvbiBhZ2FpbnN0IERUX1NZTUJPTElDIHNoYXJlZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAibGlicmFyeSAlcyAoYnVpbHQgd2l0aCAtQnN5bWJvbGljPykiLCBzaS0+bmFtZSwgbHNpLT5uYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocy0+c3Rfc2l6ZSA8IHNyYy0+c3Rfc2l6ZSkgewotICAgICAgICAgICAgICAgIERMX0VSUigiJXMgUl9BQVJDSDY0X0NPUFkgcmVsb2NhdGlvbiBzaXplIG1pc21hdGNoICglbGQgPCAlbGQpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpLT5uYW1lLCBzLT5zdF9zaXplLCBzcmMtPnN0X3NpemUpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1lbWNweSgodm9pZCopcmVsb2MsICh2b2lkKikoc3JjLT5zdF92YWx1ZSArIGxzaS0+bG9hZF9iaWFzKSwgc3JjLT5zdF9zaXplKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIERMX0VSUigiJXMgUl9BQVJDSDY0X0NPUFkgcmVsb2NhdGlvbiB0YXJnZXQgY2Fubm90IGJlIHJlc29sdmVkIiwgc2ktPm5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICAvKgorICAgICAgICAgKiBFVF9FWEVDIGlzIG5vdCBzdXBwb3J0ZWQgc28gdGhpcyBzaG91bGQgbm90IGhhcHBlbi4KKyAgICAgICAgICoKKyAgICAgICAgICogaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL3RvcGljL2NvbS5hcm0uZG9jLmloaTAwNDRkL0lISTAwNDREX2FhZWxmLnBkZgorICAgICAgICAgKgorICAgICAgICAgKiBTZWN0aW9uIDQuNy4xLjEwICJEeW5hbWljIHJlbG9jYXRpb25zIgorICAgICAgICAgKiBSX0FBUkNINjRfQ09QWSBtYXkgb25seSBhcHBlYXIgaW4gZXhlY3V0YWJsZSBvYmplY3RzIHdoZXJlIGVfdHlwZSBpcworICAgICAgICAgKiBzZXQgdG8gRVRfRVhFQy4KKyAgICAgICAgICovCisgICAgICAgIERMX0VSUigiJXMgUl9BQVJDSDY0X0NPUFkgcmVsb2NhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiLCBzaS0+bmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKICAgICBjYXNlIFJfQUFSQ0g2NF9UTFNfVFBSRUw2NDoKLSAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBUTFNfVFBSRUw2NCAqKiogJTE2bHggPC0gJTE2bHggLSAlMTZseFxuIiwKLSAgICAgICAgICAgICAgICAgICAgcmVsb2MsCi0gICAgICAgICAgICAgICAgICAgIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSwKLSAgICAgICAgICAgICAgICAgICAgcmVsYS0+cl9vZmZzZXQpOworICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIFRMU19UUFJFTDY0ICoqKiAlMTZsbHggPC0gJTE2bGx4IC0gJTE2bGx4XG4iLAorICAgICAgICAgICAgICAgICAgIHJlbG9jLCAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksIHJlbGEtPnJfb2Zmc2V0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSX0FBUkNINjRfVExTX0RUUFJFTDMyOgotICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIFRMU19EVFBSRUwzMiAqKiogJTE2bHggPC0gJTE2bHggLSAlMTZseFxuIiwKLSAgICAgICAgICAgICAgICAgICAgcmVsb2MsCi0gICAgICAgICAgICAgICAgICAgIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSwKLSAgICAgICAgICAgICAgICAgICAgcmVsYS0+cl9vZmZzZXQpOworICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIFRMU19EVFBSRUwzMiAqKiogJTE2bGx4IDwtICUxNmxseCAtICUxNmxseFxuIiwKKyAgICAgICAgICAgICAgICAgICByZWxvYywgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpLCByZWxhLT5yX29mZnNldCk7CiAgICAgICAgIGJyZWFrOwogI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKQogICAgIGNhc2UgUl9YODZfNjRfSlVNUF9TTE9UOgpAQCAtMTEzNSwxNCArMTE0MiwxNCBAQAogICAgICAgTUFSSyhyZWxhLT5yX29mZnNldCk7CiAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIEpNUF9TTE9UICUwOHp4IDwtICUwOHp4ICVzIiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWxvYyksCiAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4oc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksIHN5bV9uYW1lKTsKLSAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpID0gc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZDsKKyAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgPSBzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBSX1g4Nl82NF9HTE9CX0RBVDoKICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jQWJzb2x1dGUpOwogICAgICAgTUFSSyhyZWxhLT5yX29mZnNldCk7CiAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIEdMT0JfREFUICUwOHp4IDwtICUwOHp4ICVzIiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWxvYyksCiAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4oc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksIHN5bV9uYW1lKTsKLSAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpID0gc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZDsKKyAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgPSBzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBSX1g4Nl82NF9SRUxBVElWRToKICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jUmVsYXRpdmUpOwpAQCAtMTE1MywyMSArMTE2MCwyMSBAQAogICAgICAgfQogICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBSRUxBVElWRSAlMDh6eCA8LSArJTA4engiLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlbG9jKSwKICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihzaS0+YmFzZSkpOwotICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgPSBzaS0+YmFzZSArIHJlbGEtPnJfYWRkZW5kOworICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSA9IHNpLT5iYXNlICsgcmVsYS0+cl9hZGRlbmQ7CiAgICAgICBicmVhazsKICAgICBjYXNlIFJfWDg2XzY0XzMyOgogICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NSZWxhdGl2ZSk7CiAgICAgICBNQVJLKHJlbGEtPnJfb2Zmc2V0KTsKICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gUl9YODZfNjRfMzIgJTA4enggPC0gKyUwOHp4ICVzIiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWxvYyksCiAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4oc3ltX2FkZHIpLCBzeW1fbmFtZSk7Ci0gICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSA9IHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQ7CisgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpID0gc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZDsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgUl9YODZfNjRfNjQ6CiAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY1JlbGF0aXZlKTsKICAgICAgIE1BUksocmVsYS0+cl9vZmZzZXQpOwogICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBSX1g4Nl82NF82NCAlMDh6eCA8LSArJTA4enggJXMiLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlbG9jKSwKICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihzeW1fYWRkciksIHN5bV9uYW1lKTsKLSAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpID0gc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZDsKKyAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgPSBzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBSX1g4Nl82NF9QQzMyOgogICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NSZWxhdGl2ZSk7CkBAIC0xMTc1LDQ1ICsxMTgyLDQyIEBACiAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIFJfWDg2XzY0X1BDMzIgJTA4enggPC0gKyUwOHp4ICglMDh6eCAtICUwOHp4KSAlcyIsCiAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4ocmVsb2MpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHN5bV9hZGRyIC0gcmVsb2MpLAogICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHN5bV9hZGRyKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWxvYyksIHN5bV9uYW1lKTsKLSAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpID0gc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCAtIHJlbG9jOworICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSA9IHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQgLSByZWxvYzsKICAgICAgIGJyZWFrOwogI2VuZGlmCiAKICAgICBkZWZhdWx0OgotICAgICAgRExfRVJSKCJ1bmtub3duIHJlbG9jIHR5cGUgJWQgQCAlcCAoJWQpIiwgdHlwZSwgcmVsYSwgKGludCkgKHJlbGEgLSBzdGFydCkpOworICAgICAgRExfRVJSKCJ1bmtub3duIHJlbG9jIHR5cGUgJWQgQCAlcCAoJXp1KSIsIHR5cGUsIHJlbGEsIGlkeCk7CiAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICB9CiAgIHJldHVybiAwOwogfQotI2Vsc2UKLXN0YXRpYyBpbnQgc29pbmZvX3JlbG9jYXRlKHNvaW5mbyogc2ksIEVsZl9SZWwqIHJlbCwgdW5zaWduZWQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzb2luZm8qIG5lZWRlZFtdKQotewotICAgIEVsZl9TeW0qIHN5bXRhYiA9IHNpLT5zeW10YWI7Ci0gICAgY29uc3QgY2hhciogc3RydGFiID0gc2ktPnN0cnRhYjsKLSAgICBFbGZfU3ltKiBzOwotICAgIEVsZl9SZWwqIHN0YXJ0ID0gcmVsOworCisjZWxzZSAvLyBSRUwsIG5vdCBSRUxBLgorCitzdGF0aWMgaW50IHNvaW5mb19yZWxvY2F0ZShzb2luZm8qIHNpLCBFbGZXKFJlbCkqIHJlbCwgdW5zaWduZWQgY291bnQsIHNvaW5mbyogbmVlZGVkW10pIHsKKyAgICBFbGZXKFN5bSkqIHM7CiAgICAgc29pbmZvKiBsc2k7CiAKICAgICBmb3IgKHNpemVfdCBpZHggPSAwOyBpZHggPCBjb3VudDsgKytpZHgsICsrcmVsKSB7Ci0gICAgICAgIHVuc2lnbmVkIHR5cGUgPSBFTEZfUl9UWVBFKHJlbC0+cl9pbmZvKTsKLSAgICAgICAgLy8gVE9ETzogZG9uJ3QgdXNlIHVuc2lnbmVkIGZvciAnc3ltJy4gVXNlIHVpbnQzMl90IG9yIEVsZl9BZGRyIGluc3RlYWQuCi0gICAgICAgIHVuc2lnbmVkIHN5bSA9IEVMRl9SX1NZTShyZWwtPnJfaW5mbyk7Ci0gICAgICAgIEVsZl9BZGRyIHJlbG9jID0gc3RhdGljX2Nhc3Q8RWxmX0FkZHI+KHJlbC0+cl9vZmZzZXQgKyBzaS0+bG9hZF9iaWFzKTsKLSAgICAgICAgRWxmX0FkZHIgc3ltX2FkZHIgPSAwOwotICAgICAgICBjaGFyKiBzeW1fbmFtZSA9IE5VTEw7CisgICAgICAgIHVuc2lnbmVkIHR5cGUgPSBFTEZXKFJfVFlQRSkocmVsLT5yX2luZm8pOworICAgICAgICAvLyBUT0RPOiBkb24ndCB1c2UgdW5zaWduZWQgZm9yICdzeW0nLiBVc2UgdWludDMyX3Qgb3IgRWxmVyhBZGRyKSBpbnN0ZWFkLgorICAgICAgICB1bnNpZ25lZCBzeW0gPSBFTEZXKFJfU1lNKShyZWwtPnJfaW5mbyk7CisgICAgICAgIEVsZlcoQWRkcikgcmVsb2MgPSBzdGF0aWNfY2FzdDxFbGZXKEFkZHIpPihyZWwtPnJfb2Zmc2V0ICsgc2ktPmxvYWRfYmlhcyk7CisgICAgICAgIEVsZlcoQWRkcikgc3ltX2FkZHIgPSAwOworICAgICAgICBjb25zdCBjaGFyKiBzeW1fbmFtZSA9IE5VTEw7CiAKICAgICAgICAgREVCVUcoIlByb2Nlc3NpbmcgJyVzJyByZWxvY2F0aW9uIGF0IGluZGV4ICV6ZCIsIHNpLT5uYW1lLCBpZHgpOwogICAgICAgICBpZiAodHlwZSA9PSAwKSB7IC8vIFJfKl9OT05FCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoc3ltICE9IDApIHsKLSAgICAgICAgICAgIHN5bV9uYW1lID0gKGNoYXIgKikoc3RydGFiICsgc3ltdGFiW3N5bV0uc3RfbmFtZSk7CisgICAgICAgICAgICBzeW1fbmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHNpLT5zdHJ0YWIgKyBzaS0+c3ltdGFiW3N5bV0uc3RfbmFtZSk7CiAgICAgICAgICAgICBzID0gc29pbmZvX2RvX2xvb2t1cChzaSwgc3ltX25hbWUsICZsc2ksIG5lZWRlZCk7CiAgICAgICAgICAgICBpZiAocyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBhbGxvdyBhbiB1bmRlZmluZWQgc3ltYm9sIGlmIHRoaXMgaXMgYSB3ZWFrIHJlZmVyZW5jZS4uLgotICAgICAgICAgICAgICAgIHMgPSAmc3ltdGFiW3N5bV07CisgICAgICAgICAgICAgICAgcyA9ICZzaS0+c3ltdGFiW3N5bV07CiAgICAgICAgICAgICAgICAgaWYgKEVMRl9TVF9CSU5EKHMtPnN0X2luZm8pICE9IFNUQl9XRUFLKSB7CiAgICAgICAgICAgICAgICAgICAgIERMX0VSUigiY2Fubm90IGxvY2F0ZSBzeW1ib2wgXCIlc1wiIHJlZmVyZW5jZWQgYnkgXCIlc1wiLi4uIiwgc3ltX25hbWUsIHNpLT5uYW1lKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTI2MSwxMiArMTI2NSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2guIENhbid0IHJlYWxseSBjb3B5IGlmIHdlYWsgc3ltYm9sIGlzIG5vdCBmb3VuZCBhdCBydW4tdGltZS4KICNlbmRpZgogICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIERMX0VSUigidW5rbm93biB3ZWFrIHJlbG9jIHR5cGUgJWQgQCAlcCAoJWQpIiwgdHlwZSwgcmVsLCAoaW50KSAocmVsIC0gc3RhcnQpKTsKKyAgICAgICAgICAgICAgICAgICAgRExfRVJSKCJ1bmtub3duIHdlYWsgcmVsb2MgdHlwZSAlZCBAICVwICglenUpIiwgdHlwZSwgcmVsLCBpZHgpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBXZSBnb3QgYSBkZWZpbml0aW9uLgotICAgICAgICAgICAgICAgIHN5bV9hZGRyID0gc3RhdGljX2Nhc3Q8RWxmX0FkZHI+KHMtPnN0X3ZhbHVlICsgbHNpLT5sb2FkX2JpYXMpOworICAgICAgICAgICAgICAgIHN5bV9hZGRyID0gc3RhdGljX2Nhc3Q8RWxmVyhBZGRyKT4ocy0+c3RfdmFsdWUgKyBsc2ktPmxvYWRfYmlhcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY1N5bWJvbCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMjc5LDEwNSArMTI4Myw4NiBAQAogICAgICAgICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NBYnNvbHV0ZSk7CiAgICAgICAgICAgICBNQVJLKHJlbC0+cl9vZmZzZXQpOwogICAgICAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBKTVBfU0xPVCAlMDh4IDwtICUwOHggJXMiLCByZWxvYywgc3ltX2FkZHIsIHN5bV9uYW1lKTsKLSAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpID0gc3ltX2FkZHI7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpID0gc3ltX2FkZHI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSX0FSTV9HTE9CX0RBVDoKICAgICAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jQWJzb2x1dGUpOwogICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKICAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gR0xPQl9EQVQgJTA4eCA8LSAlMDh4ICVzIiwgcmVsb2MsIHN5bV9hZGRyLCBzeW1fbmFtZSk7Ci0gICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSA9IHN5bV9hZGRyOworICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSA9IHN5bV9hZGRyOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUl9BUk1fQUJTMzI6CiAgICAgICAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY0Fic29sdXRlKTsKICAgICAgICAgICAgIE1BUksocmVsLT5yX29mZnNldCk7CiAgICAgICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIEFCUyAlMDh4IDwtICUwOHggJXMiLCByZWxvYywgc3ltX2FkZHIsIHN5bV9uYW1lKTsKLSAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICs9IHN5bV9hZGRyOworICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSArPSBzeW1fYWRkcjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJfQVJNX1JFTDMyOgogICAgICAgICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NSZWxhdGl2ZSk7CiAgICAgICAgICAgICBNQVJLKHJlbC0+cl9vZmZzZXQpOwogICAgICAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBSRUwzMiAlMDh4IDwtICUwOHggLSAlMDh4ICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVsb2MsIHN5bV9hZGRyLCByZWwtPnJfb2Zmc2V0LCBzeW1fbmFtZSk7Ci0gICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArPSBzeW1fYWRkciAtIHJlbC0+cl9vZmZzZXQ7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICs9IHN5bV9hZGRyIC0gcmVsLT5yX29mZnNldDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJfQVJNX0NPUFk6Ci0gICAgICAgICAgICBpZiAoKHNpLT5mbGFncyAmIEZMQUdfRVhFKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBodHRwOi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvdG9waWMvY29tLmFybS5kb2MuaWhpMDA0NGQvSUhJMDA0NERfYWFlbGYucGRmCi0gICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgKiBTZWN0aW9uIDQuNy4xLjEwICJEeW5hbWljIHJlbG9jYXRpb25zIgotICAgICAgICAgICAgICAgICAqIFJfQVJNX0NPUFkgbWF5IG9ubHkgYXBwZWFyIGluIGV4ZWN1dGFibGUgb2JqZWN0cyB3aGVyZSBlX3R5cGUgaXMKLSAgICAgICAgICAgICAgICAgKiBzZXQgdG8gRVRfRVhFQy4KLSAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAqIFRPRE86IEZMQUdfRVhFIGlzIHNldCBmb3IgYm90aCBFVF9EWU4gYW5kIEVUX0VYRUMgZXhlY3V0YWJsZXMuCi0gICAgICAgICAgICAgICAgICogV2Ugc2hvdWxkIGV4cGxpY2l0bHkgZGlzYWxsb3cgRVRfRFlOIGV4ZWN1dGFibGVzIGZyb20gaGF2aW5nCi0gICAgICAgICAgICAgICAgICogUl9BUk1fQ09QWSByZWxvY2F0aW9ucy4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBETF9FUlIoIiVzIFJfQVJNX0NPUFkgcmVsb2NhdGlvbnMgb25seSBzdXBwb3J0ZWQgZm9yIEVUX0VYRUMiLCBzaS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NDb3B5KTsKLSAgICAgICAgICAgIE1BUksocmVsLT5yX29mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPICUwOHggPC0gJWQgQCAlMDh4ICVzIiwgcmVsb2MsIHMtPnN0X3NpemUsIHN5bV9hZGRyLCBzeW1fbmFtZSk7Ci0gICAgICAgICAgICBpZiAocmVsb2MgPT0gc3ltX2FkZHIpIHsKLSAgICAgICAgICAgICAgICBFbGZfU3ltICpzcmMgPSBzb2luZm9fZG9fbG9va3VwKE5VTEwsIHN5bV9uYW1lLCAmbHNpLCBuZWVkZWQpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNyYyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIERMX0VSUigiJXMgUl9BUk1fQ09QWSByZWxvY2F0aW9uIHNvdXJjZSBjYW5ub3QgYmUgcmVzb2x2ZWQiLCBzaS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGxzaS0+aGFzX0RUX1NZTUJPTElDKSB7Ci0gICAgICAgICAgICAgICAgICAgIERMX0VSUigiJXMgaW52YWxpZCBSX0FSTV9DT1BZIHJlbG9jYXRpb24gYWdhaW5zdCBEVF9TWU1CT0xJQyBzaGFyZWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnkgJXMgKGJ1aWx0IHdpdGggLUJzeW1ib2xpYz8pIiwgc2ktPm5hbWUsIGxzaS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHMtPnN0X3NpemUgPCBzcmMtPnN0X3NpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgRExfRVJSKCIlcyBSX0FSTV9DT1BZIHJlbG9jYXRpb24gc2l6ZSBtaXNtYXRjaCAoJWQgPCAlZCkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ktPm5hbWUsIHMtPnN0X3NpemUsIHNyYy0+c3Rfc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtY3B5KCh2b2lkKilyZWxvYywgKHZvaWQqKShzcmMtPnN0X3ZhbHVlICsgbHNpLT5sb2FkX2JpYXMpLCBzcmMtPnN0X3NpemUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBETF9FUlIoIiVzIFJfQVJNX0NPUFkgcmVsb2NhdGlvbiB0YXJnZXQgY2Fubm90IGJlIHJlc29sdmVkIiwgc2ktPm5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEVUX0VYRUMgaXMgbm90IHN1cHBvcnRlZCBzbyB0aGlzIHNob3VsZCBub3QgaGFwcGVuLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5paGkwMDQ0ZC9JSEkwMDQ0RF9hYWVsZi5wZGYKKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBTZWN0aW9uIDQuNy4xLjEwICJEeW5hbWljIHJlbG9jYXRpb25zIgorICAgICAgICAgICAgICogUl9BUk1fQ09QWSBtYXkgb25seSBhcHBlYXIgaW4gZXhlY3V0YWJsZSBvYmplY3RzIHdoZXJlIGVfdHlwZSBpcworICAgICAgICAgICAgICogc2V0IHRvIEVUX0VYRUMuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIERMX0VSUigiJXMgUl9BUk1fQ09QWSByZWxvY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCIsIHNpLT5uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICNlbGlmIGRlZmluZWQoX19pMzg2X18pCiAgICAgICAgIGNhc2UgUl8zODZfSk1QX1NMT1Q6CiAgICAgICAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY0Fic29sdXRlKTsKICAgICAgICAgICAgIE1BUksocmVsLT5yX29mZnNldCk7CiAgICAgICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIEpNUF9TTE9UICUwOHggPC0gJTA4eCAlcyIsIHJlbG9jLCBzeW1fYWRkciwgc3ltX25hbWUpOwotICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgPSBzeW1fYWRkcjsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgPSBzeW1fYWRkcjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJfMzg2X0dMT0JfREFUOgogICAgICAgICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NBYnNvbHV0ZSk7CiAgICAgICAgICAgICBNQVJLKHJlbC0+cl9vZmZzZXQpOwogICAgICAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBHTE9CX0RBVCAlMDh4IDwtICUwOHggJXMiLCByZWxvYywgc3ltX2FkZHIsIHN5bV9uYW1lKTsKLSAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpID0gc3ltX2FkZHI7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpID0gc3ltX2FkZHI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSXzM4Nl8zMjoKICAgICAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jUmVsYXRpdmUpOwogICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKICAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gUl8zODZfMzIgJTA4eCA8LSArJTA4eCAlcyIsIHJlbG9jLCBzeW1fYWRkciwgc3ltX25hbWUpOwotICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgKz0gc3ltX2FkZHI7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICs9IHN5bV9hZGRyOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUl8zODZfUEMzMjoKICAgICAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jUmVsYXRpdmUpOwogICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKICAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gUl8zODZfUEMzMiAlMDh4IDwtICslMDh4ICglMDh4IC0gJTA4eCkgJXMiLAogICAgICAgICAgICAgICAgICAgICAgICByZWxvYywgKHN5bV9hZGRyIC0gcmVsb2MpLCBzeW1fYWRkciwgcmVsb2MsIHN5bV9uYW1lKTsKLSAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICs9IChzeW1fYWRkciAtIHJlbG9jKTsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKz0gKHN5bV9hZGRyIC0gcmVsb2MpOwogICAgICAgICAgICAgYnJlYWs7CiAjZWxpZiBkZWZpbmVkKF9fbWlwc19fKQogICAgICAgICBjYXNlIFJfTUlQU19SRUwzMjoKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorICAgICAgICAgICAgLy8gTUlQUyBFbGY2NF9SZWwgZW50cmllcyBjb250YWluIGNvbXBvdW5kIHJlbG9jYXRpb25zCisgICAgICAgICAgICAvLyBXZSBvbmx5IGhhbmRsZSB0aGUgUl9NSVBTX05PTkV8Ul9NSVBTXzY0fFJfTUlQU19SRUwzMiBjYXNlCisgICAgICAgICAgICBpZiAoRUxGNjRfUl9UWVBFMihyZWwtPnJfaW5mbykgIT0gUl9NSVBTXzY0IHx8CisgICAgICAgICAgICAgICAgRUxGNjRfUl9UWVBFMyhyZWwtPnJfaW5mbykgIT0gUl9NSVBTX05PTkUpIHsKKyAgICAgICAgICAgICAgICBETF9FUlIoIlVuZXhwZWN0ZWQgY29tcG91bmQgcmVsb2NhdGlvbiB0eXBlOiVkIHR5cGUyOiVkIHR5cGUzOiVkIEAgJXAgKCV6dSkiLAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCAodW5zaWduZWQpRUxGNjRfUl9UWVBFMihyZWwtPnJfaW5mbyksCisgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZClFTEY2NF9SX1RZUEUzKHJlbC0+cl9pbmZvKSwgcmVsLCBpZHgpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NBYnNvbHV0ZSk7CiAgICAgICAgICAgICBNQVJLKHJlbC0+cl9vZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBSRUwzMiAlMDh4IDwtICUwOHggJXMiLAotICAgICAgICAgICAgICAgICAgICAgICByZWxvYywgc3ltX2FkZHIsIChzeW1fbmFtZSkgPyBzeW1fbmFtZSA6ICIqU0VDVElPTkhEUioiKTsKKyAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gUkVMMzIgJTA4enggPC0gJTA4enggJXMiLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlbG9jKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihzeW1fYWRkciksIHN5bV9uYW1lID8gc3ltX25hbWUgOiAiKlNFQ1RJT05IRFIqIik7CiAgICAgICAgICAgICBpZiAocykgewotICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICs9IHN5bV9hZGRyOworICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKz0gc3ltX2FkZHI7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICs9IHNpLT5iYXNlOworICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKz0gc2ktPmJhc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICNlbmRpZgpAQCAtMTM5NSwxMSArMTM4MCwxMSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBSRUxBVElWRSAlcCA8LSArJXAiLAogICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWxvYyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNpLT5iYXNlKSk7Ci0gICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArPSBzaS0+YmFzZTsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKz0gc2ktPmJhc2U7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgRExfRVJSKCJ1bmtub3duIHJlbG9jIHR5cGUgJWQgQCAlcCAoJWQpIiwgdHlwZSwgcmVsLCAoaW50KSAocmVsIC0gc3RhcnQpKTsKKyAgICAgICAgICAgIERMX0VSUigidW5rbm93biByZWxvYyB0eXBlICVkIEAgJXAgKCV6dSkiLCB0eXBlLCByZWwsIGlkeCk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDA5LDcxICsxMzk0LDU5IEBACiAKICNpZiBkZWZpbmVkKF9fbWlwc19fKQogc3RhdGljIGJvb2wgbWlwc19yZWxvY2F0ZV9nb3Qoc29pbmZvKiBzaSwgc29pbmZvKiBuZWVkZWRbXSkgewotICAgIHVuc2lnbmVkKiBnb3QgPSBzaS0+cGx0X2dvdDsKKyAgICBFbGZXKEFkZHIpKiogZ290ID0gc2ktPnBsdF9nb3Q7CiAgICAgaWYgKGdvdCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICB1bnNpZ25lZCBsb2NhbF9nb3RubyA9IHNpLT5taXBzX2xvY2FsX2dvdG5vOwogICAgIHVuc2lnbmVkIGdvdHN5bSA9IHNpLT5taXBzX2dvdHN5bTsKICAgICB1bnNpZ25lZCBzeW10YWJubyA9IHNpLT5taXBzX3N5bXRhYm5vOwotICAgIEVsZl9TeW0qIHN5bXRhYiA9IHNpLT5zeW10YWI7CisgICAgRWxmVyhTeW0pKiBzeW10YWIgPSBzaS0+c3ltdGFiOwogCi0gICAgLyoKLSAgICAgKiBnb3RbMF0gaXMgYWRkcmVzcyBvZiBsYXp5IHJlc29sdmVyIGZ1bmN0aW9uCi0gICAgICogZ290WzFdIG1heSBiZSB1c2VkIGZvciBhIEdOVSBleHRlbnNpb24KLSAgICAgKiBzZXQgaXQgdG8gYSByZWNvZ25pemFibGUgYWRkcmVzcyBpbiBjYXNlIHNvbWVvbmUgY2FsbHMgaXQKLSAgICAgKiAoc2hvdWxkIGJlIF9ydGxkX2JpbmRfc3RhcnQpCi0gICAgICogRklYTUU6IG1heWJlIHRoaXMgc2hvdWxkIGJlIGluIGEgc2VwYXJhdGUgcm91dGluZQotICAgICAqLwotCisgICAgLy8gZ290WzBdIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBsYXp5IHJlc29sdmVyIGZ1bmN0aW9uLgorICAgIC8vIGdvdFsxXSBtYXkgYmUgdXNlZCBmb3IgYSBHTlUgZXh0ZW5zaW9uLgorICAgIC8vIFNldCBpdCB0byBhIHJlY29nbml6YWJsZSBhZGRyZXNzIGluIGNhc2Ugc29tZW9uZSBjYWxscyBpdCAoc2hvdWxkIGJlIF9ydGxkX2JpbmRfc3RhcnQpLgorICAgIC8vIEZJWE1FOiBtYXliZSB0aGlzIHNob3VsZCBiZSBpbiBhIHNlcGFyYXRlIHJvdXRpbmU/CiAgICAgaWYgKChzaS0+ZmxhZ3MgJiBGTEFHX0xJTktFUikgPT0gMCkgewogICAgICAgICBzaXplX3QgZyA9IDA7Ci0gICAgICAgIGdvdFtnKytdID0gMHhkZWFkYmVlZjsKLSAgICAgICAgaWYgKGdvdFtnXSAmIDB4ODAwMDAwMDApIHsKLSAgICAgICAgICAgIGdvdFtnKytdID0gMHhkZWFkZmVlZDsKKyAgICAgICAgZ290W2crK10gPSByZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPigweGRlYWRiZWVmKTsKKyAgICAgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGdvdFtnXSkgPCAwKSB7CisgICAgICAgICAgICBnb3RbZysrXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KDB4ZGVhZGZlZWQpOwogICAgICAgICB9Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFJlbG9jYXRlIHRoZSBsb2NhbCBHT1QgZW50cmllcyBuZWVkIHRvIGJlIHJlbG9jYXRlZAotICAgICAgICAgKi8KKyAgICAgICAgLy8gUmVsb2NhdGUgdGhlIGxvY2FsIEdPVCBlbnRyaWVzLgogICAgICAgICBmb3IgKDsgZyA8IGxvY2FsX2dvdG5vOyBnKyspIHsKLSAgICAgICAgICAgIGdvdFtnXSArPSBzaS0+bG9hZF9iaWFzOworICAgICAgICAgICAgZ290W2ddID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGdvdFtnXSkgKyBzaS0+bG9hZF9iaWFzKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qIE5vdyBmb3IgdGhlIGdsb2JhbCBHT1QgZW50cmllcyAqLwotICAgIEVsZl9TeW0qIHN5bSA9IHN5bXRhYiArIGdvdHN5bTsKKyAgICAvLyBOb3cgZm9yIHRoZSBnbG9iYWwgR09UIGVudHJpZXMuLi4KKyAgICBFbGZXKFN5bSkqIHN5bSA9IHN5bXRhYiArIGdvdHN5bTsKICAgICBnb3QgPSBzaS0+cGx0X2dvdCArIGxvY2FsX2dvdG5vOwogICAgIGZvciAoc2l6ZV90IGcgPSBnb3RzeW07IGcgPCBzeW10YWJubzsgZysrLCBzeW0rKywgZ290KyspIHsKLSAgICAgICAgY29uc3QgY2hhciogc3ltX25hbWU7Ci0gICAgICAgIEVsZl9TeW0qIHM7CisgICAgICAgIC8vIFRoaXMgaXMgYW4gdW5kZWZpbmVkIHJlZmVyZW5jZS4uLiB0cnkgdG8gbG9jYXRlIGl0LgorICAgICAgICBjb25zdCBjaGFyKiBzeW1fbmFtZSA9IHNpLT5zdHJ0YWIgKyBzeW0tPnN0X25hbWU7CiAgICAgICAgIHNvaW5mbyogbHNpOwotCi0gICAgICAgIC8qIFRoaXMgaXMgYW4gdW5kZWZpbmVkIHJlZmVyZW5jZS4uLiB0cnkgdG8gbG9jYXRlIGl0ICovCi0gICAgICAgIHN5bV9uYW1lID0gc2ktPnN0cnRhYiArIHN5bS0+c3RfbmFtZTsKLSAgICAgICAgcyA9IHNvaW5mb19kb19sb29rdXAoc2ksIHN5bV9uYW1lLCAmbHNpLCBuZWVkZWQpOworICAgICAgICBFbGZXKFN5bSkqIHMgPSBzb2luZm9fZG9fbG9va3VwKHNpLCBzeW1fbmFtZSwgJmxzaSwgbmVlZGVkKTsKICAgICAgICAgaWYgKHMgPT0gTlVMTCkgewotICAgICAgICAgICAgLyogV2Ugb25seSBhbGxvdyBhbiB1bmRlZmluZWQgc3ltYm9sIGlmIHRoaXMgaXMgYSB3ZWFrCi0gICAgICAgICAgICAgICByZWZlcmVuY2UuLiAgICovCisgICAgICAgICAgICAvLyBXZSBvbmx5IGFsbG93IGFuIHVuZGVmaW5lZCBzeW1ib2wgaWYgdGhpcyBpcyBhIHdlYWsgcmVmZXJlbmNlLgogICAgICAgICAgICAgcyA9ICZzeW10YWJbZ107CiAgICAgICAgICAgICBpZiAoRUxGX1NUX0JJTkQocy0+c3RfaW5mbykgIT0gU1RCX1dFQUspIHsKICAgICAgICAgICAgICAgICBETF9FUlIoImNhbm5vdCBsb2NhdGUgXCIlc1wiLi4uIiwgc3ltX25hbWUpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICpnb3QgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogRklYTUU6IGlzIHRoaXMgc3VmZmljaWVudD8KLSAgICAgICAgICAgICAqIEZvciByZWZlcmVuY2Ugc2VlIE5ldEJTRCBsaW5rIGxvYWRlcgotICAgICAgICAgICAgICogaHR0cDovL2N2c3dlYi5uZXRic2Qub3JnL2JzZHdlYi5jZ2kvc3JjL2xpYmV4ZWMvbGQuZWxmX3NvL2FyY2gvbWlwcy9taXBzX3JlbG9jLmM/cmV2PTEuNTMmY29udGVudC10eXBlPXRleHQveC1jdnN3ZWItbWFya3VwCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAqZ290ID0gbHNpLT5sb2FkX2JpYXMgKyBzLT5zdF92YWx1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBpcyB0aGlzIHN1ZmZpY2llbnQ/CisgICAgICAgICAgICAvLyBGb3IgcmVmZXJlbmNlIHNlZSBOZXRCU0QgbGluayBsb2FkZXIKKyAgICAgICAgICAgIC8vIGh0dHA6Ly9jdnN3ZWIubmV0YnNkLm9yZy9ic2R3ZWIuY2dpL3NyYy9saWJleGVjL2xkLmVsZl9zby9hcmNoL21pcHMvbWlwc19yZWxvYy5jP3Jldj0xLjUzJmNvbnRlbnQtdHlwZT10ZXh0L3gtY3Zzd2ViLW1hcmt1cAorICAgICAgICAgICAgKmdvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KGxzaS0+bG9hZF9iaWFzICsgcy0+c3RfdmFsdWUpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCiAKLXZvaWQgc29pbmZvOjpDYWxsQXJyYXkoY29uc3QgY2hhciogYXJyYXlfbmFtZSBVTlVTRUQsIGxpbmtlcl9mdW5jdGlvbl90KiBmdW5jdGlvbnMsIHNpemVfdCBjb3VudCwgYm9vbCByZXZlcnNlKSB7Cit2b2lkIHNvaW5mbzo6Q2FsbEFycmF5KGNvbnN0IGNoYXIqIGFycmF5X25hbWUgX191bnVzZWQsIGxpbmtlcl9mdW5jdGlvbl90KiBmdW5jdGlvbnMsIHNpemVfdCBjb3VudCwgYm9vbCByZXZlcnNlKSB7CiAgIGlmIChmdW5jdGlvbnMgPT0gTlVMTCkgewogICAgIHJldHVybjsKICAgfQpAQCAtMTQ5Miw3ICsxNDY1LDcgQEAKICAgVFJBQ0UoIlsgRG9uZSBjYWxsaW5nICVzIGZvciAnJXMnIF0iLCBhcnJheV9uYW1lLCBuYW1lKTsKIH0KIAotdm9pZCBzb2luZm86OkNhbGxGdW5jdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbl9uYW1lIFVOVVNFRCwgbGlua2VyX2Z1bmN0aW9uX3QgZnVuY3Rpb24pIHsKK3ZvaWQgc29pbmZvOjpDYWxsRnVuY3Rpb24oY29uc3QgY2hhciogZnVuY3Rpb25fbmFtZSBfX3VudXNlZCwgbGlua2VyX2Z1bmN0aW9uX3QgZnVuY3Rpb24pIHsKICAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGZ1bmN0aW9uKSA9PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KC0xKSkgewogICAgIHJldHVybjsKICAgfQpAQCAtMTUwMyw3ICsxNDc2LDcgQEAKIAogICAvLyBUaGUgZnVuY3Rpb24gbWF5IGhhdmUgY2FsbGVkIGRsb3BlbigzKSBvciBkbGNsb3NlKDMpLCBzbyB3ZSBuZWVkIHRvIGVuc3VyZSBvdXIgZGF0YSBzdHJ1Y3R1cmVzCiAgIC8vIGFyZSBzdGlsbCB3cml0YWJsZS4gVGhpcyBoYXBwZW5zIHdpdGggb3VyIGRlYnVnIG1hbGxvYyAoc2VlIGh0dHA6Ly9iLzc5NDE3MTYpLgotICBzZXRfc29pbmZvX3Bvb2xfcHJvdGVjdGlvbihQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKyAgcHJvdGVjdF9kYXRhKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwogfQogCiB2b2lkIHNvaW5mbzo6Q2FsbFByZUluaXRDb25zdHJ1Y3RvcnMoKSB7CkBAIC0xNTM1LDE1ICsxNTA4LDkgQEAKICAgICAgICAgICBuYW1lLCBwcmVpbml0X2FycmF5X2NvdW50KTsKICAgfQogCi0gIGlmIChkeW5hbWljICE9IE5VTEwpIHsKLSAgICBmb3IgKEVsZl9EeW4qIGQgPSBkeW5hbWljOyBkLT5kX3RhZyAhPSBEVF9OVUxMOyArK2QpIHsKLSAgICAgIGlmIChkLT5kX3RhZyA9PSBEVF9ORUVERUQpIHsKLSAgICAgICAgY29uc3QgY2hhciogbGlicmFyeV9uYW1lID0gc3RydGFiICsgZC0+ZF91bi5kX3ZhbDsKLSAgICAgICAgVFJBQ0UoIlwiJXNcIjogY2FsbGluZyBjb25zdHJ1Y3RvcnMgaW4gRFRfTkVFREVEIFwiJXNcIiIsIG5hbWUsIGxpYnJhcnlfbmFtZSk7Ci0gICAgICAgIGZpbmRfbG9hZGVkX2xpYnJhcnkobGlicmFyeV9uYW1lKS0+Q2FsbENvbnN0cnVjdG9ycygpOwotICAgICAgfQotICAgIH0KLSAgfQorICBnZXRfY2hpbGRyZW4oKS5mb3JfZWFjaChbXSAoc29pbmZvKiBzaSkgeworICAgIHNpLT5DYWxsQ29uc3RydWN0b3JzKCk7CisgIH0pOwogCiAgIFRSQUNFKCJcIiVzXCI6IGNhbGxpbmcgY29uc3RydWN0b3JzIiwgbmFtZSk7CiAKQEAgLTE1NjAsNiArMTUyNyw4NiBAQAogCiAgIC8vIERUX0ZJTkkgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBEVF9GSU5JX0FSUkFZIGlmIGJvdGggYXJlIHByZXNlbnQuCiAgIENhbGxGdW5jdGlvbigiRFRfRklOSSIsIGZpbmlfZnVuYyk7CisKKyAgLy8gVGhpcyBpcyBuZWVkZWQgb24gc2Vjb25kIGNhbGwgdG8gZGxvcGVuCisgIC8vIGFmdGVyIGxpYnJhcnkgaGFzIGJlZW4gdW5sb2FkZWQgd2l0aCBSVExEX05PREVMRVRFCisgIGNvbnN0cnVjdG9yc19jYWxsZWQgPSBmYWxzZTsKK30KKwordm9pZCBzb2luZm86OmFkZF9jaGlsZChzb2luZm8qIGNoaWxkKSB7CisgIGlmICgodGhpcy0+ZmxhZ3MgJiBGTEFHX05FV19TT0lORk8pID09IDApIHsKKyAgICByZXR1cm47CisgIH0KKworICB0aGlzLT5jaGlsZHJlbi5wdXNoX2Zyb250KGNoaWxkKTsKKyAgY2hpbGQtPnBhcmVudHMucHVzaF9mcm9udCh0aGlzKTsKK30KKwordm9pZCBzb2luZm86OnJlbW92ZV9hbGxfbGlua3MoKSB7CisgIGlmICgodGhpcy0+ZmxhZ3MgJiBGTEFHX05FV19TT0lORk8pID09IDApIHsKKyAgICByZXR1cm47CisgIH0KKworICAvLyAxLiBVbnRpZSBjb25uZWN0ZWQgc29pbmZvcyBmcm9tICd0aGlzJy4KKyAgY2hpbGRyZW4uZm9yX2VhY2goWyZdIChzb2luZm8qIGNoaWxkKSB7CisgICAgY2hpbGQtPnBhcmVudHMucmVtb3ZlX2lmKFsmXSAoY29uc3Qgc29pbmZvKiBwYXJlbnQpIHsKKyAgICAgIHJldHVybiBwYXJlbnQgPT0gdGhpczsKKyAgICB9KTsKKyAgfSk7CisKKyAgcGFyZW50cy5mb3JfZWFjaChbJl0gKHNvaW5mbyogcGFyZW50KSB7CisgICAgcGFyZW50LT5jaGlsZHJlbi5mb3JfZWFjaChbJl0gKGNvbnN0IHNvaW5mbyogY2hpbGQpIHsKKyAgICAgIHJldHVybiBjaGlsZCA9PSB0aGlzOworICAgIH0pOworICB9KTsKKworICAvLyAyLiBPbmNlIGV2ZXJ5dGhpbmcgdW50aWVkIC0gY2xlYXIgbG9jYWwgbGlzdHMuCisgIHBhcmVudHMuY2xlYXIoKTsKKyAgY2hpbGRyZW4uY2xlYXIoKTsKK30KKwordm9pZCBzb2luZm86OnNldF9zdF9kZXYoZGV2X3QgZGV2KSB7CisgIGlmICgodGhpcy0+ZmxhZ3MgJiBGTEFHX05FV19TT0lORk8pID09IDApIHsKKyAgICByZXR1cm47CisgIH0KKworICBzdF9kZXYgPSBkZXY7Cit9CisKK3ZvaWQgc29pbmZvOjpzZXRfc3RfaW5vKGlub190IGlubykgeworICBpZiAoKHRoaXMtPmZsYWdzICYgRkxBR19ORVdfU09JTkZPKSA9PSAwKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgc3RfaW5vID0gaW5vOworfQorCitkZXZfdCBzb2luZm86OmdldF9zdF9kZXYoKSB7CisgIGlmICgodGhpcy0+ZmxhZ3MgJiBGTEFHX05FV19TT0lORk8pID09IDApIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiBzdF9kZXY7Cit9OworCitpbm9fdCBzb2luZm86OmdldF9zdF9pbm8oKSB7CisgIGlmICgodGhpcy0+ZmxhZ3MgJiBGTEFHX05FV19TT0lORk8pID09IDApIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiBzdF9pbm87Cit9CisKKy8vIFRoaXMgaXMgYSByZXR1cm4gb24gZ2V0X2NoaWxkcmVuKCkgaW4gY2FzZQorLy8gJ3RoaXMtPmZsYWdzJyBkb2VzIG5vdCBoYXZlIEZMQUdfTkVXX1NPSU5GTyBzZXQuCitzdGF0aWMgc29pbmZvOjpzb2luZm9fbGlzdF90IGdfZW1wdHlfbGlzdDsKKworc29pbmZvOjpzb2luZm9fbGlzdF90JiBzb2luZm86OmdldF9jaGlsZHJlbigpIHsKKyAgaWYgKCh0aGlzLT5mbGFncyAmIEZMQUdfTkVXX1NPSU5GTykgPT0gMCkgeworICAgIHJldHVybiBnX2VtcHR5X2xpc3Q7CisgIH0KKworICByZXR1cm4gdGhpcy0+Y2hpbGRyZW47CiB9CiAKIC8qIEZvcmNlIGFueSBvZiB0aGUgY2xvc2VkIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyciB0byBiZSBhc3NvY2lhdGVkIHdpdGgKQEAgLTE2MjMsMTAgKzE2NzAsMTAgQEAKICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwogfQogCi1zdGF0aWMgYm9vbCBzb2luZm9fbGlua19pbWFnZShzb2luZm8qIHNpKSB7CitzdGF0aWMgYm9vbCBzb2luZm9fbGlua19pbWFnZShzb2luZm8qIHNpLCBjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbykgewogICAgIC8qICJiYXNlIiBtaWdodCB3cmFwIGFyb3VuZCBVSU5UMzJfTUFYLiAqLwotICAgIEVsZl9BZGRyIGJhc2UgPSBzaS0+bG9hZF9iaWFzOwotICAgIGNvbnN0IEVsZl9QaGRyICpwaGRyID0gc2ktPnBoZHI7CisgICAgRWxmVyhBZGRyKSBiYXNlID0gc2ktPmxvYWRfYmlhczsKKyAgICBjb25zdCBFbGZXKFBoZHIpKiBwaGRyID0gc2ktPnBoZHI7CiAgICAgaW50IHBobnVtID0gc2ktPnBobnVtOwogICAgIGJvb2wgcmVsb2NhdGluZ19saW5rZXIgPSAoc2ktPmZsYWdzICYgRkxBR19MSU5LRVIpICE9IDA7CiAKQEAgLTE2MzgsNyArMTY4NSw3IEBACiAKICAgICAvKiBFeHRyYWN0IGR5bmFtaWMgc2VjdGlvbiAqLwogICAgIHNpemVfdCBkeW5hbWljX2NvdW50OwotICAgIEVsZl9Xb3JkIGR5bmFtaWNfZmxhZ3M7CisgICAgRWxmVyhXb3JkKSBkeW5hbWljX2ZsYWdzOwogICAgIHBoZHJfdGFibGVfZ2V0X2R5bmFtaWNfc2VjdGlvbihwaGRyLCBwaG51bSwgYmFzZSwgJnNpLT5keW5hbWljLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHluYW1pY19jb3VudCwgJmR5bmFtaWNfZmxhZ3MpOwogICAgIGlmIChzaS0+ZHluYW1pYyA9PSBOVUxMKSB7CkBAIC0xNjU5LDIxICsxNzA2LDIxIEBACiAKICAgICAvLyBFeHRyYWN0IHVzZWZ1bCBpbmZvcm1hdGlvbiBmcm9tIGR5bmFtaWMgc2VjdGlvbi4KICAgICB1aW50MzJfdCBuZWVkZWRfY291bnQgPSAwOwotICAgIGZvciAoRWxmX0R5biogZCA9IHNpLT5keW5hbWljOyBkLT5kX3RhZyAhPSBEVF9OVUxMOyArK2QpIHsKKyAgICBmb3IgKEVsZlcoRHluKSogZCA9IHNpLT5keW5hbWljOyBkLT5kX3RhZyAhPSBEVF9OVUxMOyArK2QpIHsKICAgICAgICAgREVCVUcoImQgPSAlcCwgZFswXSh0YWcpID0gJXAgZFsxXSh2YWwpID0gJXAiLAogICAgICAgICAgICAgICBkLCByZWludGVycHJldF9jYXN0PHZvaWQqPihkLT5kX3RhZyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGQtPmRfdW4uZF92YWwpKTsKICAgICAgICAgc3dpdGNoIChkLT5kX3RhZykgewogICAgICAgICBjYXNlIERUX0hBU0g6Ci0gICAgICAgICAgICBzaS0+bmJ1Y2tldCA9ICgodW5zaWduZWQgKikgKGJhc2UgKyBkLT5kX3VuLmRfcHRyKSlbMF07Ci0gICAgICAgICAgICBzaS0+bmNoYWluID0gKCh1bnNpZ25lZCAqKSAoYmFzZSArIGQtPmRfdW4uZF9wdHIpKVsxXTsKLSAgICAgICAgICAgIHNpLT5idWNrZXQgPSAodW5zaWduZWQgKikgKGJhc2UgKyBkLT5kX3VuLmRfcHRyICsgOCk7Ci0gICAgICAgICAgICBzaS0+Y2hhaW4gPSAodW5zaWduZWQgKikgKGJhc2UgKyBkLT5kX3VuLmRfcHRyICsgOCArIHNpLT5uYnVja2V0ICogNCk7CisgICAgICAgICAgICBzaS0+bmJ1Y2tldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihiYXNlICsgZC0+ZF91bi5kX3B0cilbMF07CisgICAgICAgICAgICBzaS0+bmNoYWluID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGJhc2UgKyBkLT5kX3VuLmRfcHRyKVsxXTsKKyAgICAgICAgICAgIHNpLT5idWNrZXQgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oYmFzZSArIGQtPmRfdW4uZF9wdHIgKyA4KTsKKyAgICAgICAgICAgIHNpLT5jaGFpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihiYXNlICsgZC0+ZF91bi5kX3B0ciArIDggKyBzaS0+bmJ1Y2tldCAqIDQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRFRfU1RSVEFCOgotICAgICAgICAgICAgc2ktPnN0cnRhYiA9IChjb25zdCBjaGFyICopIChiYXNlICsgZC0+ZF91bi5kX3B0cik7CisgICAgICAgICAgICBzaS0+c3RydGFiID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYmFzZSArIGQtPmRfdW4uZF9wdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRFRfU1lNVEFCOgotICAgICAgICAgICAgc2ktPnN5bXRhYiA9IChFbGZfU3ltICopIChiYXNlICsgZC0+ZF91bi5kX3B0cik7CisgICAgICAgICAgICBzaS0+c3ltdGFiID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFN5bSkqPihiYXNlICsgZC0+ZF91bi5kX3B0cik7CiAgICAgICAgICAgICBicmVhazsKICNpZiAhZGVmaW5lZChfX0xQNjRfXykKICAgICAgICAgY2FzZSBEVF9QTFRSRUw6CkBAIC0xNjg1LDM3ICsxNzMyLDQzIEBACiAjZW5kaWYKICAgICAgICAgY2FzZSBEVF9KTVBSRUw6CiAjaWYgZGVmaW5lZChVU0VfUkVMQSkKLSAgICAgICAgICAgIHNpLT5wbHRfcmVsYSA9IChFbGZfUmVsYSopIChiYXNlICsgZC0+ZF91bi5kX3B0cik7CisgICAgICAgICAgICBzaS0+cGx0X3JlbGEgPSByZWludGVycHJldF9jYXN0PEVsZlcoUmVsYSkqPihiYXNlICsgZC0+ZF91bi5kX3B0cik7CiAjZWxzZQotICAgICAgICAgICAgc2ktPnBsdF9yZWwgPSAoRWxmX1JlbCopIChiYXNlICsgZC0+ZF91bi5kX3B0cik7CisgICAgICAgICAgICBzaS0+cGx0X3JlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhSZWwpKj4oYmFzZSArIGQtPmRfdW4uZF9wdHIpOwogI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEVF9QTFRSRUxTWjoKICNpZiBkZWZpbmVkKFVTRV9SRUxBKQotICAgICAgICAgICAgc2ktPnBsdF9yZWxhX2NvdW50ID0gZC0+ZF91bi5kX3ZhbCAvIHNpemVvZihFbGZfUmVsYSk7CisgICAgICAgICAgICBzaS0+cGx0X3JlbGFfY291bnQgPSBkLT5kX3VuLmRfdmFsIC8gc2l6ZW9mKEVsZlcoUmVsYSkpOwogI2Vsc2UKLSAgICAgICAgICAgIHNpLT5wbHRfcmVsX2NvdW50ID0gZC0+ZF91bi5kX3ZhbCAvIHNpemVvZihFbGZfUmVsKTsKKyAgICAgICAgICAgIHNpLT5wbHRfcmVsX2NvdW50ID0gZC0+ZF91bi5kX3ZhbCAvIHNpemVvZihFbGZXKFJlbCkpOwogI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKLSNpZiAhZGVmaW5lZChfX0xQNjRfXykKKyNpZiBkZWZpbmVkKF9fbWlwc19fKQogICAgICAgICBjYXNlIERUX1BMVEdPVDoKLSAgICAgICAgICAgIC8vIFVzZWQgYnkgMzItYml0IE1JUFMuCi0gICAgICAgICAgICBzaS0+cGx0X2dvdCA9ICh1bnNpZ25lZCAqKShiYXNlICsgZC0+ZF91bi5kX3B0cik7CisgICAgICAgICAgICAvLyBVc2VkIGJ5IG1pcHMgYW5kIG1pcHM2NC4KKyAgICAgICAgICAgIHNpLT5wbHRfZ290ID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKio+KGJhc2UgKyBkLT5kX3VuLmRfcHRyKTsKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgICAgIGNhc2UgRFRfREVCVUc6CiAgICAgICAgICAgICAvLyBTZXQgdGhlIERUX0RFQlVHIGVudHJ5IHRvIHRoZSBhZGRyZXNzIG9mIF9yX2RlYnVnIGZvciBHREIKICAgICAgICAgICAgIC8vIGlmIHRoZSBkeW5hbWljIHRhYmxlIGlzIHdyaXRhYmxlCisvLyBGSVhNRTogbm90IHdvcmtpbmcgY3VycmVudGx5IGZvciBONjQKKy8vIFRoZSBmbGFncyBmb3IgdGhlIExPQUQgYW5kIERZTkFNSUMgcHJvZ3JhbSBoZWFkZXJzIGRvIG5vdCBhZ3JlZS4KKy8vIFRoZSBMT0FEIHNlY3Rpb24gY29udGFpbm5nIHRoZSBkeW5hbWljIHRhYmxlIGhhcyBiZWVuIG1hcHBlZCBhcworLy8gcmVhZC1vbmx5LCBidXQgdGhlIERZTkFNSUMgaGVhZGVyIGNsYWltcyBpdCBpcyB3cml0YWJsZS4KKyNpZiAhKGRlZmluZWQoX19taXBzX18pICYmIGRlZmluZWQoX19MUDY0X18pKQogICAgICAgICAgICAgaWYgKChkeW5hbWljX2ZsYWdzICYgUEZfVykgIT0gMCkgewogICAgICAgICAgICAgICAgIGQtPmRfdW4uZF92YWwgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oJl9yX2RlYnVnKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAjaWYgZGVmaW5lZChVU0VfUkVMQSkKICAgICAgICAgIGNhc2UgRFRfUkVMQToKLSAgICAgICAgICAgIHNpLT5yZWxhID0gKEVsZl9SZWxhKikgKGJhc2UgKyBkLT5kX3VuLmRfcHRyKTsKKyAgICAgICAgICAgIHNpLT5yZWxhID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFJlbGEpKj4oYmFzZSArIGQtPmRfdW4uZF9wdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIERUX1JFTEFTWjoKLSAgICAgICAgICAgIHNpLT5yZWxhX2NvdW50ID0gZC0+ZF91bi5kX3ZhbCAvIHNpemVvZihFbGZfUmVsYSk7CisgICAgICAgICAgICBzaS0+cmVsYV9jb3VudCA9IGQtPmRfdW4uZF92YWwgLyBzaXplb2YoRWxmVyhSZWxhKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEVF9SRUw6CiAgICAgICAgICAgICBETF9FUlIoInVuc3VwcG9ydGVkIERUX1JFTCBpbiBcIiVzXCIiLCBzaS0+bmFtZSk7CkBAIC0xNzI1LDEwICsxNzc4LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAjZWxzZQogICAgICAgICBjYXNlIERUX1JFTDoKLSAgICAgICAgICAgIHNpLT5yZWwgPSAoRWxmX1JlbCopIChiYXNlICsgZC0+ZF91bi5kX3B0cik7CisgICAgICAgICAgICBzaS0+cmVsID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFJlbCkqPihiYXNlICsgZC0+ZF91bi5kX3B0cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEVF9SRUxTWjoKLSAgICAgICAgICAgIHNpLT5yZWxfY291bnQgPSBkLT5kX3VuLmRfdmFsIC8gc2l6ZW9mKEVsZl9SZWwpOworICAgICAgICAgICAgc2ktPnJlbF9jb3VudCA9IGQtPmRfdW4uZF92YWwgLyBzaXplb2YoRWxmVyhSZWwpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBEVF9SRUxBOgogICAgICAgICAgICAgRExfRVJSKCJ1bnN1cHBvcnRlZCBEVF9SRUxBIGluIFwiJXNcIiIsIHNpLT5uYW1lKTsKQEAgLTE3NDcsMjEgKzE4MDAsMjEgQEAKICAgICAgICAgICAgIERFQlVHKCIlcyBjb25zdHJ1Y3RvcnMgKERUX0lOSVRfQVJSQVkpIGZvdW5kIGF0ICVwIiwgc2ktPm5hbWUsIHNpLT5pbml0X2FycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERUX0lOSVRfQVJSQVlTWjoKLSAgICAgICAgICAgIHNpLT5pbml0X2FycmF5X2NvdW50ID0gKCh1bnNpZ25lZClkLT5kX3VuLmRfdmFsKSAvIHNpemVvZihFbGZfQWRkcik7CisgICAgICAgICAgICBzaS0+aW5pdF9hcnJheV9jb3VudCA9ICgodW5zaWduZWQpZC0+ZF91bi5kX3ZhbCkgLyBzaXplb2YoRWxmVyhBZGRyKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEVF9GSU5JX0FSUkFZOgogICAgICAgICAgICAgc2ktPmZpbmlfYXJyYXkgPSByZWludGVycHJldF9jYXN0PGxpbmtlcl9mdW5jdGlvbl90Kj4oYmFzZSArIGQtPmRfdW4uZF9wdHIpOwogICAgICAgICAgICAgREVCVUcoIiVzIGRlc3RydWN0b3JzIChEVF9GSU5JX0FSUkFZKSBmb3VuZCBhdCAlcCIsIHNpLT5uYW1lLCBzaS0+ZmluaV9hcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEVF9GSU5JX0FSUkFZU1o6Ci0gICAgICAgICAgICBzaS0+ZmluaV9hcnJheV9jb3VudCA9ICgodW5zaWduZWQpZC0+ZF91bi5kX3ZhbCkgLyBzaXplb2YoRWxmX0FkZHIpOworICAgICAgICAgICAgc2ktPmZpbmlfYXJyYXlfY291bnQgPSAoKHVuc2lnbmVkKWQtPmRfdW4uZF92YWwpIC8gc2l6ZW9mKEVsZlcoQWRkcikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRFRfUFJFSU5JVF9BUlJBWToKICAgICAgICAgICAgIHNpLT5wcmVpbml0X2FycmF5ID0gcmVpbnRlcnByZXRfY2FzdDxsaW5rZXJfZnVuY3Rpb25fdCo+KGJhc2UgKyBkLT5kX3VuLmRfcHRyKTsKICAgICAgICAgICAgIERFQlVHKCIlcyBjb25zdHJ1Y3RvcnMgKERUX1BSRUlOSVRfQVJSQVkpIGZvdW5kIGF0ICVwIiwgc2ktPm5hbWUsIHNpLT5wcmVpbml0X2FycmF5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERUX1BSRUlOSVRfQVJSQVlTWjoKLSAgICAgICAgICAgIHNpLT5wcmVpbml0X2FycmF5X2NvdW50ID0gKCh1bnNpZ25lZClkLT5kX3VuLmRfdmFsKSAvIHNpemVvZihFbGZfQWRkcik7CisgICAgICAgICAgICBzaS0+cHJlaW5pdF9hcnJheV9jb3VudCA9ICgodW5zaWduZWQpZC0+ZF91bi5kX3ZhbCkgLyBzaXplb2YoRWxmVyhBZGRyKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEVF9URVhUUkVMOgogI2lmIGRlZmluZWQoX19MUDY0X18pCkBAIC0xNzk4LDcgKzE4NTEsNyBAQAogICAgICAgICBjYXNlIERUX01JUFNfUkxEX01BUDoKICAgICAgICAgICAgIC8vIFNldCB0aGUgRFRfTUlQU19STERfTUFQIGVudHJ5IHRvIHRoZSBhZGRyZXNzIG9mIF9yX2RlYnVnIGZvciBHREIuCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHJfZGVidWcqKiBkcCA9IChyX2RlYnVnKiopIGQtPmRfdW4uZF9wdHI7CisgICAgICAgICAgICAgIHJfZGVidWcqKiBkcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8cl9kZWJ1ZyoqPihiYXNlICsgZC0+ZF91bi5kX3B0cik7CiAgICAgICAgICAgICAgICpkcCA9ICZfcl9kZWJ1ZzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTg1MSwzNCArMTkwNCwzNiBAQAogCiAgICAgLy8gSWYgdGhpcyBpcyB0aGUgbWFpbiBleGVjdXRhYmxlLCB0aGVuIGxvYWQgYWxsIG9mIHRoZSBsaWJyYXJpZXMgZnJvbSBMRF9QUkVMT0FEIG5vdy4KICAgICBpZiAoc2ktPmZsYWdzICYgRkxBR19FWEUpIHsKLSAgICAgICAgbWVtc2V0KGdMZFByZWxvYWRzLCAwLCBzaXplb2YoZ0xkUHJlbG9hZHMpKTsKKyAgICAgICAgbWVtc2V0KGdfbGRfcHJlbG9hZHMsIDAsIHNpemVvZihnX2xkX3ByZWxvYWRzKSk7CiAgICAgICAgIHNpemVfdCBwcmVsb2FkX2NvdW50ID0gMDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGdMZFByZWxvYWROYW1lc1tpXSAhPSBOVUxMOyBpKyspIHsKLSAgICAgICAgICAgIHNvaW5mbyogbHNpID0gZmluZF9saWJyYXJ5KGdMZFByZWxvYWROYW1lc1tpXSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBnX2xkX3ByZWxvYWRfbmFtZXNbaV0gIT0gTlVMTDsgaSsrKSB7CisgICAgICAgICAgICBzb2luZm8qIGxzaSA9IGZpbmRfbGlicmFyeShnX2xkX3ByZWxvYWRfbmFtZXNbaV0sIDAsIE5VTEwpOwogICAgICAgICAgICAgaWYgKGxzaSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZ0xkUHJlbG9hZHNbcHJlbG9hZF9jb3VudCsrXSA9IGxzaTsKKyAgICAgICAgICAgICAgICBnX2xkX3ByZWxvYWRzW3ByZWxvYWRfY291bnQrK10gPSBsc2k7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIEFzIHdpdGggZ2xpYmMsIGZhaWx1cmUgdG8gbG9hZCBhbiBMRF9QUkVMT0FEIGxpYnJhcnkgaXMganVzdCBhIHdhcm5pbmcuCiAgICAgICAgICAgICAgICAgRExfV0FSTigiY291bGQgbm90IGxvYWQgbGlicmFyeSBcIiVzXCIgZnJvbSBMRF9QUkVMT0FEIGZvciBcIiVzXCI7IGNhdXNlZCBieSAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBnTGRQcmVsb2FkTmFtZXNbaV0sIHNpLT5uYW1lLCBsaW5rZXJfZ2V0X2Vycm9yX2J1ZmZlcigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdfbGRfcHJlbG9hZF9uYW1lc1tpXSwgc2ktPm5hbWUsIGxpbmtlcl9nZXRfZXJyb3JfYnVmZmVyKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgc29pbmZvKiogbmVlZGVkID0gKHNvaW5mbyoqKSBhbGxvY2EoKDEgKyBuZWVkZWRfY291bnQpICogc2l6ZW9mKHNvaW5mbyopKTsKKyAgICBzb2luZm8qKiBuZWVkZWQgPSByZWludGVycHJldF9jYXN0PHNvaW5mbyoqPihhbGxvY2EoKDEgKyBuZWVkZWRfY291bnQpICogc2l6ZW9mKHNvaW5mbyopKSk7CiAgICAgc29pbmZvKiogcG5lZWRlZCA9IG5lZWRlZDsKIAotICAgIGZvciAoRWxmX0R5biogZCA9IHNpLT5keW5hbWljOyBkLT5kX3RhZyAhPSBEVF9OVUxMOyArK2QpIHsKKyAgICBmb3IgKEVsZlcoRHluKSogZCA9IHNpLT5keW5hbWljOyBkLT5kX3RhZyAhPSBEVF9OVUxMOyArK2QpIHsKICAgICAgICAgaWYgKGQtPmRfdGFnID09IERUX05FRURFRCkgewogICAgICAgICAgICAgY29uc3QgY2hhciogbGlicmFyeV9uYW1lID0gc2ktPnN0cnRhYiArIGQtPmRfdW4uZF92YWw7CiAgICAgICAgICAgICBERUJVRygiJXMgbmVlZHMgJXMiLCBzaS0+bmFtZSwgbGlicmFyeV9uYW1lKTsKLSAgICAgICAgICAgIHNvaW5mbyogbHNpID0gZmluZF9saWJyYXJ5KGxpYnJhcnlfbmFtZSk7CisgICAgICAgICAgICBzb2luZm8qIGxzaSA9IGZpbmRfbGlicmFyeShsaWJyYXJ5X25hbWUsIDAsIE5VTEwpOwogICAgICAgICAgICAgaWYgKGxzaSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgc3RybGNweSh0bXBfZXJyX2J1ZiwgbGlua2VyX2dldF9lcnJvcl9idWZmZXIoKSwgc2l6ZW9mKHRtcF9lcnJfYnVmKSk7CiAgICAgICAgICAgICAgICAgRExfRVJSKCJjb3VsZCBub3QgbG9hZCBsaWJyYXJ5IFwiJXNcIiBuZWVkZWQgYnkgXCIlc1wiOyBjYXVzZWQgYnkgJXMiLAogICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X25hbWUsIHNpLT5uYW1lLCB0bXBfZXJyX2J1Zik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzaS0+YWRkX2NoaWxkKGxzaSk7CiAgICAgICAgICAgICAqcG5lZWRlZCsrID0gbHNpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTkwMCwyNiArMTk1NSwyNiBAQAogCiAjaWYgZGVmaW5lZChVU0VfUkVMQSkKICAgICBpZiAoc2ktPnBsdF9yZWxhICE9IE5VTEwpIHsKLSAgICAgICAgREVCVUcoIlsgcmVsb2NhdGluZyAlcyBwbHQgXVxuIiwgc2ktPm5hbWUgKTsKLSAgICAgICAgaWYgKHNvaW5mb19yZWxvY2F0ZV9hKHNpLCBzaS0+cGx0X3JlbGEsIHNpLT5wbHRfcmVsYV9jb3VudCwgbmVlZGVkKSkgeworICAgICAgICBERUJVRygiWyByZWxvY2F0aW5nICVzIHBsdCBdXG4iLCBzaS0+bmFtZSk7CisgICAgICAgIGlmIChzb2luZm9fcmVsb2NhdGUoc2ksIHNpLT5wbHRfcmVsYSwgc2ktPnBsdF9yZWxhX2NvdW50LCBuZWVkZWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHNpLT5yZWxhICE9IE5VTEwpIHsKLSAgICAgICAgREVCVUcoIlsgcmVsb2NhdGluZyAlcyBdXG4iLCBzaS0+bmFtZSApOwotICAgICAgICBpZiAoc29pbmZvX3JlbG9jYXRlX2Eoc2ksIHNpLT5yZWxhLCBzaS0+cmVsYV9jb3VudCwgbmVlZGVkKSkgeworICAgICAgICBERUJVRygiWyByZWxvY2F0aW5nICVzIF1cbiIsIHNpLT5uYW1lKTsKKyAgICAgICAgaWYgKHNvaW5mb19yZWxvY2F0ZShzaSwgc2ktPnJlbGEsIHNpLT5yZWxhX2NvdW50LCBuZWVkZWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAjZWxzZQogICAgIGlmIChzaS0+cGx0X3JlbCAhPSBOVUxMKSB7Ci0gICAgICAgIERFQlVHKCJbIHJlbG9jYXRpbmcgJXMgcGx0IF0iLCBzaS0+bmFtZSApOworICAgICAgICBERUJVRygiWyByZWxvY2F0aW5nICVzIHBsdCBdIiwgc2ktPm5hbWUpOwogICAgICAgICBpZiAoc29pbmZvX3JlbG9jYXRlKHNpLCBzaS0+cGx0X3JlbCwgc2ktPnBsdF9yZWxfY291bnQsIG5lZWRlZCkpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoc2ktPnJlbCAhPSBOVUxMKSB7Ci0gICAgICAgIERFQlVHKCJbIHJlbG9jYXRpbmcgJXMgXSIsIHNpLT5uYW1lICk7CisgICAgICAgIERFQlVHKCJbIHJlbG9jYXRpbmcgJXMgXSIsIHNpLT5uYW1lKTsKICAgICAgICAgaWYgKHNvaW5mb19yZWxvY2F0ZShzaSwgc2ktPnJlbCwgc2ktPnJlbF9jb3VudCwgbmVlZGVkKSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xOTUzLDYgKzIwMDgsMjMgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIC8qIEhhbmRsZSBzZXJpYWxpemluZy9zaGFyaW5nIHRoZSBSRUxSTyBzZWdtZW50ICovCisgICAgaWYgKGV4dGluZm8gJiYgKGV4dGluZm8tPmZsYWdzICYgQU5EUk9JRF9ETEVYVF9XUklURV9SRUxSTykpIHsKKyAgICAgIGlmIChwaGRyX3RhYmxlX3NlcmlhbGl6ZV9nbnVfcmVscm8oc2ktPnBoZHIsIHNpLT5waG51bSwgc2ktPmxvYWRfYmlhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0aW5mby0+cmVscm9fZmQpIDwgMCkgeworICAgICAgICBETF9FUlIoImZhaWxlZCBzZXJpYWxpemluZyBHTlUgUkVMUk8gc2VjdGlvbiBmb3IgXCIlc1wiOiAlcyIsCisgICAgICAgICAgICAgICBzaS0+bmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXh0aW5mbyAmJiAoZXh0aW5mby0+ZmxhZ3MgJiBBTkRST0lEX0RMRVhUX1VTRV9SRUxSTykpIHsKKyAgICAgIGlmIChwaGRyX3RhYmxlX21hcF9nbnVfcmVscm8oc2ktPnBoZHIsIHNpLT5waG51bSwgc2ktPmxvYWRfYmlhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0aW5mby0+cmVscm9fZmQpIDwgMCkgeworICAgICAgICBETF9FUlIoImZhaWxlZCBtYXBwaW5nIEdOVSBSRUxSTyBzZWN0aW9uIGZvciBcIiVzXCI6ICVzIiwKKyAgICAgICAgICAgICAgIHNpLT5uYW1lLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorCiAgICAgbm90aWZ5X2dkYl9vZl9sb2FkKHNpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE5NjIsMzIgKzIwMzQsNjUgQEAKICAqIEl0IGhlbHBzIHRvIHN0YWNrIHVud2luZGluZyB0aHJvdWdoIHNpZ25hbCBoYW5kbGVycy4KICAqIEFsc28sIGl0IG1ha2VzIGJpb25pYyBtb3JlIGxpa2UgZ2xpYmMuCiAgKi8KLXN0YXRpYyB2b2lkIGFkZF92ZHNvKEtlcm5lbEFyZ3VtZW50QmxvY2smIGFyZ3MgVU5VU0VEKSB7CitzdGF0aWMgdm9pZCBhZGRfdmRzbyhLZXJuZWxBcmd1bWVudEJsb2NrJiBhcmdzIF9fdW51c2VkKSB7CiAjaWYgZGVmaW5lZChBVF9TWVNJTkZPX0VIRFIpCi0gICAgRWxmX0VoZHIqIGVoZHJfdmRzbyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0VoZHIqPihhcmdzLmdldGF1eHZhbChBVF9TWVNJTkZPX0VIRFIpKTsKLSAgICBpZiAoZWhkcl92ZHNvID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgRWxmVyhFaGRyKSogZWhkcl92ZHNvID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEVoZHIpKj4oYXJncy5nZXRhdXh2YWwoQVRfU1lTSU5GT19FSERSKSk7CisgIGlmIChlaGRyX3Zkc28gPT0gTlVMTCkgeworICAgIHJldHVybjsKKyAgfQogCi0gICAgc29pbmZvKiBzaSA9IHNvaW5mb19hbGxvYygiW3Zkc29dIik7CisgIHNvaW5mbyogc2kgPSBzb2luZm9fYWxsb2MoIlt2ZHNvXSIsIE5VTEwpOwogCi0gICAgc2ktPnBoZHIgPSByZWludGVycHJldF9jYXN0PEVsZl9QaGRyKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZWhkcl92ZHNvKSArIGVoZHJfdmRzby0+ZV9waG9mZik7Ci0gICAgc2ktPnBobnVtID0gZWhkcl92ZHNvLT5lX3BobnVtOwotICAgIHNpLT5iYXNlID0gcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcj4oZWhkcl92ZHNvKTsKLSAgICBzaS0+c2l6ZSA9IHBoZHJfdGFibGVfZ2V0X2xvYWRfc2l6ZShzaS0+cGhkciwgc2ktPnBobnVtKTsKLSAgICBzaS0+ZmxhZ3MgPSAwOwotICAgIHNpLT5sb2FkX2JpYXMgPSBnZXRfZWxmX2V4ZWNfbG9hZF9iaWFzKGVoZHJfdmRzbyk7CisgIHNpLT5waGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFBoZHIpKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZWhkcl92ZHNvKSArIGVoZHJfdmRzby0+ZV9waG9mZik7CisgIHNpLT5waG51bSA9IGVoZHJfdmRzby0+ZV9waG51bTsKKyAgc2ktPmJhc2UgPSByZWludGVycHJldF9jYXN0PEVsZlcoQWRkcik+KGVoZHJfdmRzbyk7CisgIHNpLT5zaXplID0gcGhkcl90YWJsZV9nZXRfbG9hZF9zaXplKHNpLT5waGRyLCBzaS0+cGhudW0pOworICBzaS0+bG9hZF9iaWFzID0gZ2V0X2VsZl9leGVjX2xvYWRfYmlhcyhlaGRyX3Zkc28pOwogCi0gICAgc29pbmZvX2xpbmtfaW1hZ2Uoc2kpOworICBzb2luZm9fbGlua19pbWFnZShzaSwgTlVMTCk7CiAjZW5kaWYKIH0KIAogLyoKKyAqIFRoaXMgaXMgbGlua2VyIHNvaW5mbyBmb3IgR0RCLiBTZWUgZGV0YWlscyBiZWxvdy4KKyAqLworc3RhdGljIHNvaW5mbyBsaW5rZXJfc29pbmZvX2Zvcl9nZGI7CisKKy8qIGdkYiBleHBlY3RzIHRoZSBsaW5rZXIgdG8gYmUgaW4gdGhlIGRlYnVnIHNoYXJlZCBvYmplY3QgbGlzdC4KKyAqIFdpdGhvdXQgdGhpcywgZ2RiIGhhcyB0cm91YmxlIGxvY2F0aW5nIHRoZSBsaW5rZXIncyAiLnRleHQiCisgKiBhbmQgIi5wbHQiIHNlY3Rpb25zLiBHZGIgY291bGQgYWxzbyBwb3RlbnRpYWxseSB1c2UgdGhpcyB0bworICogcmVsb2NhdGUgdGhlIG9mZnNldCBvZiBvdXIgZXhwb3J0ZWQgJ3J0bGRfZGJfZGxhY3Rpdml0eScgc3ltYm9sLgorICogRG9uJ3QgdXNlIHNvaW5mb19hbGxvYygpLCBiZWNhdXNlIHRoZSBsaW5rZXIgc2hvdWxkbid0CisgKiBiZSBvbiB0aGUgc29pbmZvIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkIGluaXRfbGlua2VyX2luZm9fZm9yX2dkYihFbGZXKEFkZHIpIGxpbmtlcl9iYXNlKSB7CisjaWYgZGVmaW5lZChfX0xQNjRfXykKKyAgc3RybGNweShsaW5rZXJfc29pbmZvX2Zvcl9nZGIubmFtZSwgIi9zeXN0ZW0vYmluL2xpbmtlcjY0Iiwgc2l6ZW9mKGxpbmtlcl9zb2luZm9fZm9yX2dkYi5uYW1lKSk7CisjZWxzZQorICBzdHJsY3B5KGxpbmtlcl9zb2luZm9fZm9yX2dkYi5uYW1lLCAiL3N5c3RlbS9iaW4vbGlua2VyIiwgc2l6ZW9mKGxpbmtlcl9zb2luZm9fZm9yX2dkYi5uYW1lKSk7CisjZW5kaWYKKyAgbGlua2VyX3NvaW5mb19mb3JfZ2RiLmZsYWdzID0gRkxBR19ORVdfU09JTkZPOworICBsaW5rZXJfc29pbmZvX2Zvcl9nZGIuYmFzZSA9IGxpbmtlcl9iYXNlOworCisgIC8qCisgICAqIFNldCB0aGUgZHluYW1pYyBmaWVsZCBpbiB0aGUgbGluayBtYXAgb3RoZXJ3aXNlIGdkYiB3aWxsIGNvbXBsYWluIHdpdGgKKyAgICogdGhlIGZvbGxvd2luZzoKKyAgICogICB3YXJuaW5nOiAuZHluYW1pYyBzZWN0aW9uIGZvciAiL3N5c3RlbS9iaW4vbGlua2VyIiBpcyBub3QgYXQgdGhlCisgICAqICAgZXhwZWN0ZWQgYWRkcmVzcyAod3JvbmcgbGlicmFyeSBvciB2ZXJzaW9uIG1pc21hdGNoPykKKyAgICovCisgIEVsZlcoRWhkcikqIGVsZl9oZHIgPSByZWludGVycHJldF9jYXN0PEVsZlcoRWhkcikqPihsaW5rZXJfYmFzZSk7CisgIEVsZlcoUGhkcikqIHBoZHIgPSByZWludGVycHJldF9jYXN0PEVsZlcoUGhkcikqPihsaW5rZXJfYmFzZSArIGVsZl9oZHItPmVfcGhvZmYpOworICBwaGRyX3RhYmxlX2dldF9keW5hbWljX3NlY3Rpb24ocGhkciwgZWxmX2hkci0+ZV9waG51bSwgbGlua2VyX2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGlua2VyX3NvaW5mb19mb3JfZ2RiLmR5bmFtaWMsIE5VTEwsIE5VTEwpOworICBpbnNlcnRfc29pbmZvX2ludG9fZGVidWdfbWFwKCZsaW5rZXJfc29pbmZvX2Zvcl9nZGIpOworfQorCisvKgogICogVGhpcyBjb2RlIGlzIGNhbGxlZCBhZnRlciB0aGUgbGlua2VyIGhhcyBsaW5rZWQgaXRzZWxmIGFuZAogICogZml4ZWQgaXQncyBvd24gR09ULiBJdCBpcyBzYWZlIHRvIG1ha2UgcmVmZXJlbmNlcyB0byBleHRlcm5zCiAgKiBhbmQgb3RoZXIgbm9uLWxvY2FsIGRhdGEgYXQgdGhpcyBwb2ludC4KICAqLwotc3RhdGljIEVsZl9BZGRyIF9fbGlua2VyX2luaXRfcG9zdF9yZWxvY2F0aW9uKEtlcm5lbEFyZ3VtZW50QmxvY2smIGFyZ3MsIEVsZl9BZGRyIGxpbmtlcl9iYXNlKSB7CitzdGF0aWMgRWxmVyhBZGRyKSBfX2xpbmtlcl9pbml0X3Bvc3RfcmVsb2NhdGlvbihLZXJuZWxBcmd1bWVudEJsb2NrJiBhcmdzLCBFbGZXKEFkZHIpIGxpbmtlcl9iYXNlKSB7CiAgICAgLyogTk9URTogd2Ugc3RvcmUgdGhlIGFyZ3MgcG9pbnRlciBvbiBhIHNwZWNpYWwgbG9jYXRpb24KICAgICAgKiAgICAgICBvZiB0aGUgdGVtcG9yYXJ5IFRMUyBhcmVhIGluIG9yZGVyIHRvIHBhc3MgaXQgdG8KICAgICAgKiAgICAgICB0aGUgQyBMaWJyYXJ5J3MgcnVudGltZSBpbml0aWFsaXplci4KQEAgLTIwMTcsNyArMjEyMiw3IEBACiAgICAgLy8gR2V0IGEgZmV3IGVudmlyb25tZW50IHZhcmlhYmxlcy4KICAgICBjb25zdCBjaGFyKiBMRF9ERUJVRyA9IGxpbmtlcl9lbnZfZ2V0KCJMRF9ERUJVRyIpOwogICAgIGlmIChMRF9ERUJVRyAhPSBOVUxMKSB7Ci0gICAgICBnTGREZWJ1Z1ZlcmJvc2l0eSA9IGF0b2koTERfREVCVUcpOworICAgICAgZ19sZF9kZWJ1Z192ZXJib3NpdHkgPSBhdG9pKExEX0RFQlVHKTsKICAgICB9CiAKICAgICAvLyBOb3JtYWxseSwgdGhlc2UgYXJlIGNsZWFuZWQgYnkgbGlua2VyX2Vudl9pbml0LCBidXQgdGhlIHRlc3QKQEAgLTIwMzEsMTQgKzIxMzYsMTQgQEAKIAogICAgIElORk8oIlsgYW5kcm9pZCBsaW5rZXIgJiBkZWJ1Z2dlciBdIik7CiAKLSAgICBzb2luZm8qIHNpID0gc29pbmZvX2FsbG9jKGFyZ3MuYXJndlswXSk7CisgICAgc29pbmZvKiBzaSA9IHNvaW5mb19hbGxvYyhhcmdzLmFyZ3ZbMF0sIE5VTEwpOwogICAgIGlmIChzaSA9PSBOVUxMKSB7CiAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgICB9CiAKICAgICAvKiBib290c3RyYXAgdGhlIGxpbmsgbWFwLCB0aGUgbWFpbiBleGUgYWx3YXlzIG5lZWRzIHRvIGJlIGZpcnN0ICovCiAgICAgc2ktPmZsYWdzIHw9IEZMQUdfRVhFOwotICAgIGxpbmtfbWFwX3QqIG1hcCA9ICYoc2ktPmxpbmtfbWFwKTsKKyAgICBsaW5rX21hcCogbWFwID0gJihzaS0+bGlua19tYXBfaGVhZCk7CiAKICAgICBtYXAtPmxfYWRkciA9IDA7CiAgICAgbWFwLT5sX25hbWUgPSBhcmdzLmFyZ3ZbMF07CkBAIC0yMDQ4LDM4ICsyMTUzLDEwIEBACiAgICAgX3JfZGVidWcucl9tYXAgPSBtYXA7CiAgICAgcl9kZWJ1Z190YWlsID0gbWFwOwogCi0gICAgLyogZ2RiIGV4cGVjdHMgdGhlIGxpbmtlciB0byBiZSBpbiB0aGUgZGVidWcgc2hhcmVkIG9iamVjdCBsaXN0LgotICAgICAqIFdpdGhvdXQgdGhpcywgZ2RiIGhhcyB0cm91YmxlIGxvY2F0aW5nIHRoZSBsaW5rZXIncyAiLnRleHQiCi0gICAgICogYW5kICIucGx0IiBzZWN0aW9ucy4gR2RiIGNvdWxkIGFsc28gcG90ZW50aWFsbHkgdXNlIHRoaXMgdG8KLSAgICAgKiByZWxvY2F0ZSB0aGUgb2Zmc2V0IG9mIG91ciBleHBvcnRlZCAncnRsZF9kYl9kbGFjdGl2aXR5JyBzeW1ib2wuCi0gICAgICogRG9uJ3QgdXNlIHNvaW5mb19hbGxvYygpLCBiZWNhdXNlIHRoZSBsaW5rZXIgc2hvdWxkbid0Ci0gICAgICogYmUgb24gdGhlIHNvaW5mbyBsaXN0LgotICAgICAqLwotICAgIHsKLSAgICAgICAgc3RhdGljIHNvaW5mbyBsaW5rZXJfc29pbmZvOwotI2lmIGRlZmluZWQoX19MUDY0X18pCi0gICAgICAgIHN0cmxjcHkobGlua2VyX3NvaW5mby5uYW1lLCAiL3N5c3RlbS9iaW4vbGlua2VyNjQiLCBzaXplb2YobGlua2VyX3NvaW5mby5uYW1lKSk7Ci0jZWxzZQotICAgICAgICBzdHJsY3B5KGxpbmtlcl9zb2luZm8ubmFtZSwgIi9zeXN0ZW0vYmluL2xpbmtlciIsIHNpemVvZihsaW5rZXJfc29pbmZvLm5hbWUpKTsKLSNlbmRpZgotICAgICAgICBsaW5rZXJfc29pbmZvLmZsYWdzID0gMDsKLSAgICAgICAgbGlua2VyX3NvaW5mby5iYXNlID0gbGlua2VyX2Jhc2U7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogU2V0IHRoZSBkeW5hbWljIGZpZWxkIGluIHRoZSBsaW5rIG1hcCBvdGhlcndpc2UgZ2RiIHdpbGwgY29tcGxhaW4gd2l0aAotICAgICAgICAgKiB0aGUgZm9sbG93aW5nOgotICAgICAgICAgKiAgIHdhcm5pbmc6IC5keW5hbWljIHNlY3Rpb24gZm9yICIvc3lzdGVtL2Jpbi9saW5rZXIiIGlzIG5vdCBhdCB0aGUKLSAgICAgICAgICogICBleHBlY3RlZCBhZGRyZXNzICh3cm9uZyBsaWJyYXJ5IG9yIHZlcnNpb24gbWlzbWF0Y2g/KQotICAgICAgICAgKi8KLSAgICAgICAgRWxmX0VoZHIgKmVsZl9oZHIgPSAoRWxmX0VoZHIgKikgbGlua2VyX2Jhc2U7Ci0gICAgICAgIEVsZl9QaGRyICpwaGRyID0gKEVsZl9QaGRyKikoKHVuc2lnbmVkIGNoYXIqKSBsaW5rZXJfYmFzZSArIGVsZl9oZHItPmVfcGhvZmYpOwotICAgICAgICBwaGRyX3RhYmxlX2dldF9keW5hbWljX3NlY3Rpb24ocGhkciwgZWxmX2hkci0+ZV9waG51bSwgbGlua2VyX2Jhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGlua2VyX3NvaW5mby5keW5hbWljLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgaW5zZXJ0X3NvaW5mb19pbnRvX2RlYnVnX21hcCgmbGlua2VyX3NvaW5mbyk7Ci0gICAgfQorICAgIGluaXRfbGlua2VyX2luZm9fZm9yX2dkYihsaW5rZXJfYmFzZSk7CiAKICAgICAvLyBFeHRyYWN0IGluZm9ybWF0aW9uIHBhc3NlZCBmcm9tIHRoZSBrZXJuZWwuCi0gICAgc2ktPnBoZHIgPSByZWludGVycHJldF9jYXN0PEVsZl9QaGRyKj4oYXJncy5nZXRhdXh2YWwoQVRfUEhEUikpOworICAgIHNpLT5waGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFBoZHIpKj4oYXJncy5nZXRhdXh2YWwoQVRfUEhEUikpOwogICAgIHNpLT5waG51bSA9IGFyZ3MuZ2V0YXV4dmFsKEFUX1BITlVNKTsKICAgICBzaS0+ZW50cnkgPSBhcmdzLmdldGF1eHZhbChBVF9FTlRSWSk7CiAKQEAgLTIwOTIsMjEgKzIxNjksMjcgQEAKICAgICBzaS0+bG9hZF9iaWFzID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpLT5waG51bTsgKytpKSB7CiAgICAgICBpZiAoc2ktPnBoZHJbaV0ucF90eXBlID09IFBUX1BIRFIpIHsKLSAgICAgICAgc2ktPmxvYWRfYmlhcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHI+KHNpLT5waGRyKSAtIHNpLT5waGRyW2ldLnBfdmFkZHI7Ci0gICAgICAgIHNpLT5iYXNlID0gcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcj4oc2ktPnBoZHIpIC0gc2ktPnBoZHJbaV0ucF9vZmZzZXQ7CisgICAgICAgIHNpLT5sb2FkX2JpYXMgPSByZWludGVycHJldF9jYXN0PEVsZlcoQWRkcik+KHNpLT5waGRyKSAtIHNpLT5waGRyW2ldLnBfdmFkZHI7CisgICAgICAgIHNpLT5iYXNlID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpPihzaS0+cGhkcikgLSBzaS0+cGhkcltpXS5wX29mZnNldDsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgfQogICAgIHNpLT5keW5hbWljID0gTlVMTDsKICAgICBzaS0+cmVmX2NvdW50ID0gMTsKIAorICAgIEVsZlcoRWhkcikqIGVsZl9oZHIgPSByZWludGVycHJldF9jYXN0PEVsZlcoRWhkcikqPihzaS0+YmFzZSk7CisgICAgaWYgKGVsZl9oZHItPmVfdHlwZSAhPSBFVF9EWU4pIHsKKyAgICAgICAgX19saWJjX2Zvcm1hdF9mZCgyLCAiZXJyb3I6IG9ubHkgcG9zaXRpb24gaW5kZXBlbmRlbnQgZXhlY3V0YWJsZXMgKFBJRSkgYXJlIHN1cHBvcnRlZC5cbiIpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCiAgICAgLy8gVXNlIExEX0xJQlJBUllfUEFUSCBhbmQgTERfUFJFTE9BRCAoYnV0IG9ubHkgaWYgd2UgYXJlbid0IHNldHVpZC9zZXRnaWQpLgogICAgIHBhcnNlX0xEX0xJQlJBUllfUEFUSChsZHBhdGhfZW52KTsKICAgICBwYXJzZV9MRF9QUkVMT0FEKGxkcHJlbG9hZF9lbnYpOwogCiAgICAgc29tYWluID0gc2k7CiAKLSAgICBpZiAoIXNvaW5mb19saW5rX2ltYWdlKHNpKSkgeworICAgIGlmICghc29pbmZvX2xpbmtfaW1hZ2Uoc2ksIE5VTEwpKSB7CiAgICAgICAgIF9fbGliY19mb3JtYXRfZmQoMiwgIkNBTk5PVCBMSU5LIEVYRUNVVEFCTEU6ICVzXG4iLCBsaW5rZXJfZ2V0X2Vycm9yX2J1ZmZlcigpKTsKICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogICAgIH0KQEAgLTIxMTUsOCArMjE5OCw4IEBACiAKICAgICBzaS0+Q2FsbFByZUluaXRDb25zdHJ1Y3RvcnMoKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBnTGRQcmVsb2Fkc1tpXSAhPSBOVUxMOyArK2kpIHsKLSAgICAgICAgZ0xkUHJlbG9hZHNbaV0tPkNhbGxDb25zdHJ1Y3RvcnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgZ19sZF9wcmVsb2Fkc1tpXSAhPSBOVUxMOyArK2kpIHsKKyAgICAgICAgZ19sZF9wcmVsb2Fkc1tpXS0+Q2FsbENvbnN0cnVjdG9ycygpOwogICAgIH0KIAogICAgIC8qIEFmdGVyIHRoZSBsaW5rX2ltYWdlLCB0aGUgc2ktPmxvYWRfYmlhcyBpcyBpbml0aWFsaXplZC4KQEAgLTIxMjgsMTEgKzIyMTEsMTAgQEAKICAgICBzaS0+Q2FsbENvbnN0cnVjdG9ycygpOwogCiAjaWYgVElNSU5HCi0gICAgZ2V0dGltZW9mZGF5KCZ0MSxOVUxMKTsKKyAgICBnZXR0aW1lb2ZkYXkoJnQxLCBOVUxMKTsKICAgICBQUklOVCgiTElOS0VSIFRJTUU6ICVzOiAlZCBtaWNyb3NlY29uZHMiLCBhcmdzLmFyZ3ZbMF0sIChpbnQpICgKICAgICAgICAgICAgICAgICgoKGxvbmcgbG9uZyl0MS50dl9zZWMgKiAxMDAwMDAwTEwpICsgKGxvbmcgbG9uZyl0MS50dl91c2VjKSAtCi0gICAgICAgICAgICAgICAoKChsb25nIGxvbmcpdDAudHZfc2VjICogMTAwMDAwMExMKSArIChsb25nIGxvbmcpdDAudHZfdXNlYykKLSAgICAgICAgICAgICAgICkpOworICAgICAgICAgICAgICAgKCgobG9uZyBsb25nKXQwLnR2X3NlYyAqIDEwMDAwMDBMTCkgKyAobG9uZyBsb25nKXQwLnR2X3VzZWMpKSk7CiAjZW5kaWYKICNpZiBTVEFUUwogICAgIFBSSU5UKCJSRUxPIFNUQVRTOiAlczogJWQgYWJzLCAlZCByZWwsICVkIGNvcHksICVkIHN5bWJvbCIsIGFyZ3MuYXJndlswXSwKQEAgLTIxODMsMTkgKzIyNjUsMjEgQEAKICAqICAgIGxvYWQgYmlhcywgaS5lLiBhZGQgdGhlIHZhbHVlIG9mIGFueSBwX3ZhZGRyIGluIHRoZSBmaWxlIHRvIGdldAogICogICAgdGhlIGNvcnJlc3BvbmRpbmcgYWRkcmVzcyBpbiBtZW1vcnkuCiAgKi8KLXN0YXRpYyBFbGZfQWRkciBnZXRfZWxmX2V4ZWNfbG9hZF9iaWFzKGNvbnN0IEVsZl9FaGRyKiBlbGYpIHsKLSAgRWxmX0FkZHIgb2Zmc2V0ID0gZWxmLT5lX3Bob2ZmOwotICBjb25zdCBFbGZfUGhkciogcGhkcl90YWJsZSA9IChjb25zdCBFbGZfUGhkciopKChjaGFyKillbGYgKyBvZmZzZXQpOwotICBjb25zdCBFbGZfUGhkciogcGhkcl9lbmQgPSBwaGRyX3RhYmxlICsgZWxmLT5lX3BobnVtOworc3RhdGljIEVsZlcoQWRkcikgZ2V0X2VsZl9leGVjX2xvYWRfYmlhcyhjb25zdCBFbGZXKEVoZHIpKiBlbGYpIHsKKyAgRWxmVyhBZGRyKSBvZmZzZXQgPSBlbGYtPmVfcGhvZmY7CisgIGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfdGFibGUgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEVsZlcoUGhkcikqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZWxmKSArIG9mZnNldCk7CisgIGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfZW5kID0gcGhkcl90YWJsZSArIGVsZi0+ZV9waG51bTsKIAotICBmb3IgKGNvbnN0IEVsZl9QaGRyKiBwaGRyID0gcGhkcl90YWJsZTsgcGhkciA8IHBoZHJfZW5kOyBwaGRyKyspIHsKKyAgZm9yIChjb25zdCBFbGZXKFBoZHIpKiBwaGRyID0gcGhkcl90YWJsZTsgcGhkciA8IHBoZHJfZW5kOyBwaGRyKyspIHsKICAgICBpZiAocGhkci0+cF90eXBlID09IFBUX0xPQUQpIHsKLSAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEVsZl9BZGRyPihlbGYpICsgcGhkci0+cF9vZmZzZXQgLSBwaGRyLT5wX3ZhZGRyOworICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKT4oZWxmKSArIHBoZHItPnBfb2Zmc2V0IC0gcGhkci0+cF92YWRkcjsKICAgICB9CiAgIH0KICAgcmV0dXJuIDA7CiB9CiAKK2V4dGVybiAiQyIgdm9pZCBfc3RhcnQoKTsKKwogLyoKICAqIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgbGlua2VyLCBjYWxsZWQgZnJvbSBiZWdpbi5TLiBUaGlzCiAgKiBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIGZpeGluZyB0aGUgbGlua2VyJ3Mgb3duIHJlbG9jYXRpb25zLCBhbmQKQEAgLTIyMDUsMTYgKzIyODksMzEgQEAKICAqIHJlbG9jYXRpb25zLCBhbnkgYXR0ZW1wdCB0byByZWZlcmVuY2UgYW4gZXh0ZXJuIHZhcmlhYmxlLCBleHRlcm4KICAqIGZ1bmN0aW9uLCBvciBvdGhlciBHT1QgcmVmZXJlbmNlIHdpbGwgZ2VuZXJhdGUgYSBzZWdmYXVsdC4KICAqLwotZXh0ZXJuICJDIiBFbGZfQWRkciBfX2xpbmtlcl9pbml0KHZvaWQqIHJhd19hcmdzKSB7CitleHRlcm4gIkMiIEVsZlcoQWRkcikgX19saW5rZXJfaW5pdCh2b2lkKiByYXdfYXJncykgeworICAvLyBJbml0aWFsaXplIHN0YXRpYyB2YXJpYWJsZXMuCisgIHNvbGlzdCA9IGdldF9saWJkbF9pbmZvKCk7CisgIHNvbmV4dCA9IGdldF9saWJkbF9pbmZvKCk7CisKICAgS2VybmVsQXJndW1lbnRCbG9jayBhcmdzKHJhd19hcmdzKTsKIAotICBFbGZfQWRkciBsaW5rZXJfYWRkciA9IGFyZ3MuZ2V0YXV4dmFsKEFUX0JBU0UpOwotICBFbGZfRWhkciogZWxmX2hkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0VoZHIqPihsaW5rZXJfYWRkcik7Ci0gIEVsZl9QaGRyKiBwaGRyID0gKEVsZl9QaGRyKikoKHVuc2lnbmVkIGNoYXIqKSBsaW5rZXJfYWRkciArIGVsZl9oZHItPmVfcGhvZmYpOworICBFbGZXKEFkZHIpIGxpbmtlcl9hZGRyID0gYXJncy5nZXRhdXh2YWwoQVRfQkFTRSk7CisgIEVsZlcoQWRkcikgZW50cnlfcG9pbnQgPSBhcmdzLmdldGF1eHZhbChBVF9FTlRSWSk7CisgIEVsZlcoRWhkcikqIGVsZl9oZHIgPSByZWludGVycHJldF9jYXN0PEVsZlcoRWhkcikqPihsaW5rZXJfYWRkcik7CisgIEVsZlcoUGhkcikqIHBoZHIgPSByZWludGVycHJldF9jYXN0PEVsZlcoUGhkcikqPihsaW5rZXJfYWRkciArIGVsZl9oZHItPmVfcGhvZmYpOwogCiAgIHNvaW5mbyBsaW5rZXJfc287CiAgIG1lbXNldCgmbGlua2VyX3NvLCAwLCBzaXplb2Yoc29pbmZvKSk7CiAKKyAgLy8gSWYgdGhlIGxpbmtlciBpcyBub3QgYWN0aW5nIGFzIFBUX0lOVEVSUCBlbnRyeV9wb2ludCBpcyBlcXVhbCB0bworICAvLyBfc3RhcnQuIFdoaWNoIG1lYW5zIHRoYXQgdGhlIGxpbmtlciBpcyBydW5uaW5nIGFzIGFuIGV4ZWN1dGFibGUgYW5kCisgIC8vIGFscmVhZHkgbGlua2VkIGJ5IFBUX0lOVEVSUC4KKyAgLy8KKyAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gdXNlciB0cmllcyB0byBydW4gJ2FkYiBzaGVsbCAvc3lzdGVtL2Jpbi9saW5rZXInCisgIC8vIHNlZSBhbHNvIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lkPTYzMTc0CisgIGlmIChyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcik+KCZfc3RhcnQpID09IGVudHJ5X3BvaW50KSB7CisgICAgX19saWJjX2ZhdGFsKCJUaGlzIGlzICVzLCB0aGUgaGVscGVyIHByb2dyYW0gZm9yIHNoYXJlZCBsaWJyYXJ5IGV4ZWN1dGFibGVzLlxuIiwgYXJncy5hcmd2WzBdKTsKKyAgfQorCiAgIHN0cmNweShsaW5rZXJfc28ubmFtZSwgIltkeW5hbWljIGxpbmtlcl0iKTsKICAgbGlua2VyX3NvLmJhc2UgPSBsaW5rZXJfYWRkcjsKICAgbGlua2VyX3NvLnNpemUgPSBwaGRyX3RhYmxlX2dldF9sb2FkX3NpemUocGhkciwgZWxmX2hkci0+ZV9waG51bSk7CkBAIC0yMjI0LDcgKzIzMjMsNyBAQAogICBsaW5rZXJfc28ucGhudW0gPSBlbGZfaGRyLT5lX3BobnVtOwogICBsaW5rZXJfc28uZmxhZ3MgfD0gRkxBR19MSU5LRVI7CiAKLSAgaWYgKCFzb2luZm9fbGlua19pbWFnZSgmbGlua2VyX3NvKSkgeworICBpZiAoIXNvaW5mb19saW5rX2ltYWdlKCZsaW5rZXJfc28sIE5VTEwpKSB7CiAgICAgLy8gSXQgd291bGQgYmUgbmljZSB0byBwcmludCBhbiBlcnJvciBtZXNzYWdlLCBidXQgaWYgdGhlIGxpbmtlcgogICAgIC8vIGNhbid0IGxpbmsgaXRzZWxmLCB0aGVyZSdzIG5vIGd1YXJhbnRlZSB0aGF0IHdlJ2xsIGJlIGFibGUgdG8KICAgICAvLyBjYWxsIHdyaXRlKCkgKGJlY2F1c2UgaXQgaW52b2x2ZXMgYSBHT1QgcmVmZXJlbmNlKS4gV2UgbWF5IGFzCkBAIC0yMjM2LDEyICsyMzM1LDE1IEBACiAgICAgX2V4aXQoRVhJVF9GQUlMVVJFKTsKICAgfQogCisgIC8vIEluaXRpYWxpemUgdGhlIGxpbmtlcidzIG93biBnbG9iYWwgdmFyaWFibGVzCisgIGxpbmtlcl9zby5DYWxsQ29uc3RydWN0b3JzKCk7CisKICAgLy8gV2UgaGF2ZSBzdWNjZXNzZnVsbHkgZml4ZWQgb3VyIG93biByZWxvY2F0aW9ucy4gSXQncyBzYWZlIHRvIHJ1bgogICAvLyB0aGUgbWFpbiBwYXJ0IG9mIHRoZSBsaW5rZXIgbm93LgotICBhcmdzLmFib3J0X21lc3NhZ2VfcHRyID0gJmdBYm9ydE1lc3NhZ2U7Ci0gIEVsZl9BZGRyIHN0YXJ0X2FkZHJlc3MgPSBfX2xpbmtlcl9pbml0X3Bvc3RfcmVsb2NhdGlvbihhcmdzLCBsaW5rZXJfYWRkcik7CisgIGFyZ3MuYWJvcnRfbWVzc2FnZV9wdHIgPSAmZ19hYm9ydF9tZXNzYWdlOworICBFbGZXKEFkZHIpIHN0YXJ0X2FkZHJlc3MgPSBfX2xpbmtlcl9pbml0X3Bvc3RfcmVsb2NhdGlvbihhcmdzLCBsaW5rZXJfYWRkcik7CiAKLSAgc2V0X3NvaW5mb19wb29sX3Byb3RlY3Rpb24oUFJPVF9SRUFEKTsKKyAgcHJvdGVjdF9kYXRhKFBST1RfUkVBRCk7CiAKICAgLy8gUmV0dXJuIHRoZSBhZGRyZXNzIHRoYXQgdGhlIGNhbGxpbmcgYXNzZW1ibHkgc3R1YiBzaG91bGQganVtcCB0by4KICAgcmV0dXJuIHN0YXJ0X2FkZHJlc3M7CmRpZmYgLS1naXQgYS9saW5rZXIvbGlua2VyLmggYi9saW5rZXIvbGlua2VyLmgKaW5kZXggOTcyMDUwZi4uMzc0NjUyZSAxMDA2NDQKLS0tIGEvbGlua2VyL2xpbmtlci5oCisrKyBiL2xpbmtlci9saW5rZXIuaApAQCAtMzIsOCArMzIsMTEgQEAKICNpbmNsdWRlIDxlbGYuaD4KICNpbmNsdWRlIDxsaW5rLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9kbGV4dC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAKICNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgorI2luY2x1ZGUgImxpbmtlZF9saXN0LmgiCiAKICNkZWZpbmUgRExfRVJSKGZtdCwgeC4uLikgXAogICAgIGRvIHsgXApAQCAtNTAsNiArNTMsMjUgQEAKICAgICAgIF9fbGliY19mb3JtYXRfZmQoMiwgIlxuIik7IFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAorI2lmIGRlZmluZWQoX19MUDY0X18pCisjZGVmaW5lIEVMRlcod2hhdCkgRUxGNjRfICMjIHdoYXQKKyNlbHNlCisjZGVmaW5lIEVMRlcod2hhdCkgRUxGMzJfICMjIHdoYXQKKyNlbmRpZgorCisvLyBtaXBzNjQgaW50ZXJwcmV0cyBFbGY2NF9SZWwgc3RydWN0dXJlcycgcl9pbmZvIGZpZWxkIGRpZmZlcmVudGx5LgorLy8gYmlvbmljIChsaWtlIG90aGVyIEMgbGlicmFyaWVzKSBoYXMgbWFjcm9zIHRoYXQgYXNzdW1lIHJlZ3VsYXIgRUxGIGZpbGVzLAorLy8gYnV0IHRoZSBkeW5hbWljIGxpbmtlciBuZWVkcyB0byBiZSBhYmxlIHRvIGxvYWQgbWlwczY0IEVMRiBmaWxlcy4KKyNpZiBkZWZpbmVkKF9fbWlwc19fKSAmJiBkZWZpbmVkKF9fTFA2NF9fKQorI3VuZGVmIEVMRjY0X1JfU1lNCisjdW5kZWYgRUxGNjRfUl9UWVBFCisjdW5kZWYgRUxGNjRfUl9JTkZPCisjZGVmaW5lIEVMRjY0X1JfU1lNKGluZm8pICAgKCgoaW5mbykgPj4gMCkgJiAweGZmZmZmZmZmKQorI2RlZmluZSBFTEY2NF9SX1NTWU0oaW5mbykgICgoKGluZm8pID4+IDMyKSAmIDB4ZmYpCisjZGVmaW5lIEVMRjY0X1JfVFlQRTMoaW5mbykgKCgoaW5mbykgPj4gNDApICYgMHhmZikKKyNkZWZpbmUgRUxGNjRfUl9UWVBFMihpbmZvKSAoKChpbmZvKSA+PiA0OCkgJiAweGZmKQorI2RlZmluZSBFTEY2NF9SX1RZUEUoaW5mbykgICgoKGluZm8pID4+IDU2KSAmIDB4ZmYpCisjZW5kaWYKIAogLy8gUmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgcGFnZSBjb250YWluaW5nIGFkZHJlc3MgJ3gnLgogI2RlZmluZSBQQUdFX1NUQVJUKHgpICAoKHgpICYgUEFHRV9NQVNLKQpAQCAtNjEsNTggKzgzLDQ3IEBACiAvLyBpdHNlbGYgYXQgdGhlIHN0YXJ0IG9mIGEgcGFnZS4KICNkZWZpbmUgUEFHRV9FTkQoeCkgICAgUEFHRV9TVEFSVCgoeCkgKyAoUEFHRV9TSVpFLTEpKQogCi0vLyBNYWdpYyBzaGFyZWQgc3RydWN0dXJlcyB0aGF0IEdEQiBrbm93cyBhYm91dC4KLQotc3RydWN0IGxpbmtfbWFwX3QgewotICB1aW50cHRyX3QgbF9hZGRyOwotICBjaGFyKiAgbF9uYW1lOwotICB1aW50cHRyX3QgbF9sZDsKLSAgbGlua19tYXBfdCogbF9uZXh0OwotICBsaW5rX21hcF90KiBsX3ByZXY7Ci19OwotCi0vLyBWYWx1ZXMgZm9yIHJfZGVidWctPnN0YXRlCi1lbnVtIHsKLSAgUlRfQ09OU0lTVEVOVCwKLSAgUlRfQURELAotICBSVF9ERUxFVEUKLX07Ci0KLXN0cnVjdCByX2RlYnVnIHsKLSAgaW50MzJfdCByX3ZlcnNpb247Ci0gIGxpbmtfbWFwX3QqIHJfbWFwOwotICB2b2lkICgqcl9icmspKHZvaWQpOwotICBpbnQzMl90IHJfc3RhdGU7Ci0gIHVpbnRwdHJfdCByX2xkYmFzZTsKLX07Ci0KICNkZWZpbmUgRkxBR19MSU5LRUQgICAgIDB4MDAwMDAwMDEKICNkZWZpbmUgRkxBR19FWEUgICAgICAgIDB4MDAwMDAwMDQgLy8gVGhlIG1haW4gZXhlY3V0YWJsZQogI2RlZmluZSBGTEFHX0xJTktFUiAgICAgMHgwMDAwMDAxMCAvLyBUaGUgbGlua2VyIGl0c2VsZgorI2RlZmluZSBGTEFHX05FV19TT0lORk8gMHg0MDAwMDAwMCAvLyBuZXcgc29pbmZvIGZvcm1hdAogCiAjZGVmaW5lIFNPSU5GT19OQU1FX0xFTiAxMjgKIAogdHlwZWRlZiB2b2lkICgqbGlua2VyX2Z1bmN0aW9uX3QpKCk7CiAKLS8vIEFuZHJvaWQgdXNlcyBSRUwgZm9yIDMyLWJpdCBidXQgb25seSB1c2VzIFJFTEEgZm9yIDY0LWJpdC4KLSNpZiBkZWZpbmVkKF9fTFA2NF9fKQorLy8gQW5kcm9pZCB1c2VzIFJFTEEgZm9yIGFhcmNoNjQgYW5kIHg4Nl82NC4gbWlwczY0IHN0aWxsIHVzZXMgUkVMLgorI2lmIGRlZmluZWQoX19hYXJjaDY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKICNkZWZpbmUgVVNFX1JFTEEgMQogI2VuZGlmCiAKK3N0cnVjdCBzb2luZm87CisKK2NsYXNzIFNvaW5mb0xpc3RBbGxvY2F0b3IgeworcHVibGljOgorICBzdGF0aWMgTGlua2VkTGlzdEVudHJ5PHNvaW5mbz4qIGFsbG9jKCk7CisgIHN0YXRpYyB2b2lkIGZyZWUoTGlua2VkTGlzdEVudHJ5PHNvaW5mbz4qIGVudHJ5KTsKK3ByaXZhdGU6CisgIC8vIHVuY29uc3RydWN0YWJsZQorICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoU29pbmZvTGlzdEFsbG9jYXRvcik7Cit9OworCiBzdHJ1Y3Qgc29pbmZvIHsKICBwdWJsaWM6CisgIHR5cGVkZWYgTGlua2VkTGlzdDxzb2luZm8sIFNvaW5mb0xpc3RBbGxvY2F0b3I+IHNvaW5mb19saXN0X3Q7CisgcHVibGljOgogICBjaGFyIG5hbWVbU09JTkZPX05BTUVfTEVOXTsKLSAgY29uc3QgRWxmX1BoZHIqIHBoZHI7CisgIGNvbnN0IEVsZlcoUGhkcikqIHBoZHI7CiAgIHNpemVfdCBwaG51bTsKLSAgRWxmX0FkZHIgZW50cnk7Ci0gIEVsZl9BZGRyIGJhc2U7CisgIEVsZlcoQWRkcikgZW50cnk7CisgIEVsZlcoQWRkcikgYmFzZTsKICAgc2l6ZV90IHNpemU7CiAKICNpZm5kZWYgX19MUDY0X18KICAgdWludDMyX3QgdW51c2VkMTsgIC8vIERPIE5PVCBVU0UsIG1haW50YWluZWQgZm9yIGNvbXBhdGliaWxpdHkuCiAjZW5kaWYKIAotICBFbGZfRHluKiBkeW5hbWljOworICBFbGZXKER5bikqIGR5bmFtaWM7CiAKICNpZm5kZWYgX19MUDY0X18KICAgdWludDMyX3QgdW51c2VkMjsgLy8gRE8gTk9UIFVTRSwgbWFpbnRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eQpAQCAtMTIzLDMwICsxMzQsMzAgQEAKICAgdW5zaWduZWQgZmxhZ3M7CiAKICAgY29uc3QgY2hhciogc3RydGFiOwotICBFbGZfU3ltKiBzeW10YWI7CisgIEVsZlcoU3ltKSogc3ltdGFiOwogCiAgIHNpemVfdCBuYnVja2V0OwogICBzaXplX3QgbmNoYWluOwogICB1bnNpZ25lZCogYnVja2V0OwogICB1bnNpZ25lZCogY2hhaW47CiAKLSNpZiAhZGVmaW5lZChfX0xQNjRfXykKLSAgLy8gVGhpcyBpcyBvbmx5IHVzZWQgYnkgMzItYml0IE1JUFMsIGJ1dCBuZWVkcyB0byBiZSBoZXJlIGZvcgorI2lmIGRlZmluZWQoX19taXBzX18pIHx8ICFkZWZpbmVkKF9fTFA2NF9fKQorICAvLyBUaGlzIGlzIG9ubHkgdXNlZCBieSBtaXBzIGFuZCBtaXBzNjQsIGJ1dCBuZWVkcyB0byBiZSBoZXJlIGZvcgogICAvLyBhbGwgMzItYml0IGFyY2hpdGVjdHVyZXMgdG8gcHJlc2VydmUgYmluYXJ5IGNvbXBhdGliaWxpdHkuCi0gIHVuc2lnbmVkKiBwbHRfZ290OworICBFbGZXKEFkZHIpKiogcGx0X2dvdDsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChVU0VfUkVMQSkKLSAgRWxmX1JlbGEqIHBsdF9yZWxhOworICBFbGZXKFJlbGEpKiBwbHRfcmVsYTsKICAgc2l6ZV90IHBsdF9yZWxhX2NvdW50OwogCi0gIEVsZl9SZWxhKiByZWxhOworICBFbGZXKFJlbGEpKiByZWxhOwogICBzaXplX3QgcmVsYV9jb3VudDsKICNlbHNlCi0gIEVsZl9SZWwqIHBsdF9yZWw7CisgIEVsZlcoUmVsKSogcGx0X3JlbDsKICAgc2l6ZV90IHBsdF9yZWxfY291bnQ7CiAKLSAgRWxmX1JlbCogcmVsOworICBFbGZXKFJlbCkqIHJlbDsKICAgc2l6ZV90IHJlbF9jb3VudDsKICNlbmRpZgogCkBAIC0xNzIsNDMgKzE4Myw2NSBAQAogI2VuZGlmCiAKICAgc2l6ZV90IHJlZl9jb3VudDsKLSAgbGlua19tYXBfdCBsaW5rX21hcDsKKyAgbGlua19tYXAgbGlua19tYXBfaGVhZDsKIAogICBib29sIGNvbnN0cnVjdG9yc19jYWxsZWQ7CiAKICAgLy8gV2hlbiB5b3UgcmVhZCBhIHZpcnR1YWwgYWRkcmVzcyBmcm9tIHRoZSBFTEYgZmlsZSwgYWRkIHRoaXMKICAgLy8gdmFsdWUgdG8gZ2V0IHRoZSBjb3JyZXNwb25kaW5nIGFkZHJlc3MgaW4gdGhlIHByb2Nlc3MnIGFkZHJlc3Mgc3BhY2UuCi0gIEVsZl9BZGRyIGxvYWRfYmlhczsKKyAgRWxmVyhBZGRyKSBsb2FkX2JpYXM7CiAKICNpZiAhZGVmaW5lZChfX0xQNjRfXykKICAgYm9vbCBoYXNfdGV4dF9yZWxvY2F0aW9uczsKICNlbmRpZgogICBib29sIGhhc19EVF9TWU1CT0xJQzsKLQogICB2b2lkIENhbGxDb25zdHJ1Y3RvcnMoKTsKICAgdm9pZCBDYWxsRGVzdHJ1Y3RvcnMoKTsKICAgdm9pZCBDYWxsUHJlSW5pdENvbnN0cnVjdG9ycygpOwogCisgIHZvaWQgYWRkX2NoaWxkKHNvaW5mbyogY2hpbGQpOworICB2b2lkIHJlbW92ZV9hbGxfbGlua3MoKTsKKworICB2b2lkIHNldF9zdF9kZXYoZGV2X3Qgc3RfZGV2KTsKKyAgdm9pZCBzZXRfc3RfaW5vKGlub190IHN0X2lubyk7CisgIGlub190IGdldF9zdF9pbm8oKTsKKyAgZGV2X3QgZ2V0X3N0X2RldigpOworCisgIHNvaW5mb19saXN0X3QmIGdldF9jaGlsZHJlbigpOworCiAgcHJpdmF0ZToKICAgdm9pZCBDYWxsQXJyYXkoY29uc3QgY2hhciogYXJyYXlfbmFtZSwgbGlua2VyX2Z1bmN0aW9uX3QqIGZ1bmN0aW9ucywgc2l6ZV90IGNvdW50LCBib29sIHJldmVyc2UpOwogICB2b2lkIENhbGxGdW5jdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbl9uYW1lLCBsaW5rZXJfZnVuY3Rpb25fdCBmdW5jdGlvbik7CisKKyBwcml2YXRlOgorICAvLyBUaGlzIHBhcnQgb2YgdGhlIHN0cnVjdHVyZSBpcyBvbmx5IGF2YWlsYWJsZQorICAvLyB3aGVuIEZMQUdfTkVXX1NPSU5GTyBpcyBzZXQgaW4gdGhpcy0+ZmxhZ3MuCisgIHVuc2lnbmVkIGludCB2ZXJzaW9uOworCisgIGRldl90IHN0X2RldjsKKyAgaW5vX3Qgc3RfaW5vOworCisgIC8vIGRlcGVuZGVuY3kgZ3JhcGgKKyAgc29pbmZvX2xpc3RfdCBjaGlsZHJlbjsKKyAgc29pbmZvX2xpc3RfdCBwYXJlbnRzOworCiB9OwogCi1leHRlcm4gc29pbmZvIGxpYmRsX2luZm87CitleHRlcm4gc29pbmZvKiBnZXRfbGliZGxfaW5mbygpOwogCiB2b2lkIGRvX2FuZHJvaWRfZ2V0X0xEX0xJQlJBUllfUEFUSChjaGFyKiwgc2l6ZV90KTsKIHZvaWQgZG9fYW5kcm9pZF91cGRhdGVfTERfTElCUkFSWV9QQVRIKGNvbnN0IGNoYXIqIGxkX2xpYnJhcnlfcGF0aCk7Ci1zb2luZm8qIGRvX2Rsb3Blbihjb25zdCBjaGFyKiBuYW1lLCBpbnQgZmxhZ3MpOwotaW50IGRvX2RsY2xvc2Uoc29pbmZvKiBzaSk7Citzb2luZm8qIGRvX2Rsb3Blbihjb25zdCBjaGFyKiBuYW1lLCBpbnQgZmxhZ3MsIGNvbnN0IGFuZHJvaWRfZGxleHRpbmZvKiBleHRpbmZvKTsKK3ZvaWQgZG9fZGxjbG9zZShzb2luZm8qIHNpKTsKIAotRWxmX1N5bSogZGxzeW1fbGluZWFyX2xvb2t1cChjb25zdCBjaGFyKiBuYW1lLCBzb2luZm8qKiBmb3VuZCwgc29pbmZvKiBzdGFydCk7CitFbGZXKFN5bSkqIGRsc3ltX2xpbmVhcl9sb29rdXAoY29uc3QgY2hhciogbmFtZSwgc29pbmZvKiogZm91bmQsIHNvaW5mbyogc3RhcnQpOwogc29pbmZvKiBmaW5kX2NvbnRhaW5pbmdfbGlicmFyeShjb25zdCB2b2lkKiBhZGRyKTsKIAotRWxmX1N5bSogZGxhZGRyX2ZpbmRfc3ltYm9sKHNvaW5mbyogc2ksIGNvbnN0IHZvaWQqIGFkZHIpOwotRWxmX1N5bSogZGxzeW1faGFuZGxlX2xvb2t1cChzb2luZm8qIHNpLCBjb25zdCBjaGFyKiBuYW1lKTsKK0VsZlcoU3ltKSogZGxhZGRyX2ZpbmRfc3ltYm9sKHNvaW5mbyogc2ksIGNvbnN0IHZvaWQqIGFkZHIpOworRWxmVyhTeW0pKiBkbHN5bV9oYW5kbGVfbG9va3VwKHNvaW5mbyogc2ksIHNvaW5mbyoqIGZvdW5kLCBjb25zdCBjaGFyKiBuYW1lKTsKIAogdm9pZCBkZWJ1Z2dlcmRfaW5pdCgpOwotZXh0ZXJuICJDIiBhYm9ydF9tc2dfdCogZ0Fib3J0TWVzc2FnZTsKK2V4dGVybiAiQyIgYWJvcnRfbXNnX3QqIGdfYWJvcnRfbWVzc2FnZTsKIGV4dGVybiAiQyIgdm9pZCBub3RpZnlfZ2RiX29mX2xpYnJhcmllcygpOwogCiBjaGFyKiBsaW5rZXJfZ2V0X2Vycm9yX2J1ZmZlcigpOwpkaWZmIC0tZ2l0IGEvbGlua2VyL2xpbmtlcl9hbGxvY2F0b3IuY3BwIGIvbGlua2VyL2xpbmtlcl9hbGxvY2F0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMjIwZTgKLS0tIC9kZXYvbnVsbAorKysgYi9saW5rZXIvbGlua2VyX2FsbG9jYXRvci5jcHAKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgImxpbmtlcl9hbGxvY2F0b3IuaCIKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19wcmN0bC5oIgorCitzdHJ1Y3QgTGlua2VyQWxsb2NhdG9yUGFnZSB7CisgIExpbmtlckFsbG9jYXRvclBhZ2UqIG5leHQ7CisgIHVpbnQ4X3QgYnl0ZXNbUEFHRV9TSVpFLXNpemVvZihMaW5rZXJBbGxvY2F0b3JQYWdlKildOworfTsKKworc3RydWN0IEZyZWVCbG9ja0luZm8geworICB2b2lkKiBuZXh0X2Jsb2NrOworICBzaXplX3QgbnVtX2ZyZWVfYmxvY2tzOworfTsKKworTGlua2VyQmxvY2tBbGxvY2F0b3I6OkxpbmtlckJsb2NrQWxsb2NhdG9yKHNpemVfdCBibG9ja19zaXplKQorICA6IGJsb2NrX3NpemVfKGJsb2NrX3NpemUgPCBzaXplb2YoRnJlZUJsb2NrSW5mbykgPyBzaXplb2YoRnJlZUJsb2NrSW5mbykgOiBibG9ja19zaXplKSwKKyAgICBwYWdlX2xpc3RfKG51bGxwdHIpLAorICAgIGZyZWVfYmxvY2tfbGlzdF8obnVsbHB0cikKK3t9CisKK3ZvaWQqIExpbmtlckJsb2NrQWxsb2NhdG9yOjphbGxvYygpIHsKKyAgaWYgKGZyZWVfYmxvY2tfbGlzdF8gPT0gbnVsbHB0cikgeworICAgIGNyZWF0ZV9uZXdfcGFnZSgpOworICB9CisKKyAgRnJlZUJsb2NrSW5mbyogYmxvY2tfaW5mbyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnJlZUJsb2NrSW5mbyo+KGZyZWVfYmxvY2tfbGlzdF8pOworICBpZiAoYmxvY2tfaW5mby0+bnVtX2ZyZWVfYmxvY2tzID4gMSkgeworICAgIEZyZWVCbG9ja0luZm8qIG5leHRfYmxvY2tfaW5mbyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnJlZUJsb2NrSW5mbyo+KAorICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZnJlZV9ibG9ja19saXN0XykgKyBibG9ja19zaXplXyk7CisgICAgbmV4dF9ibG9ja19pbmZvLT5uZXh0X2Jsb2NrID0gYmxvY2tfaW5mby0+bmV4dF9ibG9jazsKKyAgICBuZXh0X2Jsb2NrX2luZm8tPm51bV9mcmVlX2Jsb2NrcyA9IGJsb2NrX2luZm8tPm51bV9mcmVlX2Jsb2NrcyAtIDE7CisgICAgZnJlZV9ibG9ja19saXN0XyA9IG5leHRfYmxvY2tfaW5mbzsKKyAgfSBlbHNlIHsKKyAgICBmcmVlX2Jsb2NrX2xpc3RfID0gYmxvY2tfaW5mby0+bmV4dF9ibG9jazsKKyAgfQorCisgIG1lbXNldChibG9ja19pbmZvLCAwLCBibG9ja19zaXplXyk7CisKKyAgcmV0dXJuIGJsb2NrX2luZm87Cit9CisKK3ZvaWQgTGlua2VyQmxvY2tBbGxvY2F0b3I6OmZyZWUodm9pZCogYmxvY2spIHsKKyAgaWYgKGJsb2NrID09IG51bGxwdHIpIHsKKyAgICByZXR1cm47CisgIH0KKworICBMaW5rZXJBbGxvY2F0b3JQYWdlKiBwYWdlID0gZmluZF9wYWdlKGJsb2NrKTsKKworICBpZiAocGFnZSA9PSBudWxscHRyKSB7CisgICAgYWJvcnQoKTsKKyAgfQorCisgIHNzaXplX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYmxvY2spIC0gcGFnZS0+Ynl0ZXM7CisKKyAgaWYgKG9mZnNldCAlIGJsb2NrX3NpemVfICE9IDApIHsKKyAgICBhYm9ydCgpOworICB9CisKKyAgbWVtc2V0KGJsb2NrLCAwLCBibG9ja19zaXplXyk7CisKKyAgRnJlZUJsb2NrSW5mbyogYmxvY2tfaW5mbyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnJlZUJsb2NrSW5mbyo+KGJsb2NrKTsKKworICBibG9ja19pbmZvLT5uZXh0X2Jsb2NrID0gZnJlZV9ibG9ja19saXN0XzsKKyAgYmxvY2tfaW5mby0+bnVtX2ZyZWVfYmxvY2tzID0gMTsKKworICBmcmVlX2Jsb2NrX2xpc3RfID0gYmxvY2tfaW5mbzsKK30KKwordm9pZCBMaW5rZXJCbG9ja0FsbG9jYXRvcjo6cHJvdGVjdF9hbGwoaW50IHByb3QpIHsKKyAgZm9yIChMaW5rZXJBbGxvY2F0b3JQYWdlKiBwYWdlID0gcGFnZV9saXN0XzsgcGFnZSAhPSBudWxscHRyOyBwYWdlID0gcGFnZS0+bmV4dCkgeworICAgIGlmIChtcHJvdGVjdChwYWdlLCBQQUdFX1NJWkUsIHByb3QpID09IC0xKSB7CisgICAgICBhYm9ydCgpOworICAgIH0KKyAgfQorfQorCit2b2lkIExpbmtlckJsb2NrQWxsb2NhdG9yOjpjcmVhdGVfbmV3X3BhZ2UoKSB7CisgIExpbmtlckFsbG9jYXRvclBhZ2UqIHBhZ2UgPSByZWludGVycHJldF9jYXN0PExpbmtlckFsbG9jYXRvclBhZ2UqPihtbWFwKG51bGxwdHIsIFBBR0VfU0laRSwKKyAgICAgIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAwLCAwKSk7CisgIGlmIChwYWdlID09IE1BUF9GQUlMRUQpIHsKKyAgICBhYm9ydCgpOyAvLyBvb20KKyAgfQorCisgIHByY3RsKFBSX1NFVF9WTUEsIFBSX1NFVF9WTUFfQU5PTl9OQU1FLCBwYWdlLCBQQUdFX1NJWkUsICJsaW5rZXJfYWxsb2MiKTsKKworICBtZW1zZXQocGFnZSwgMCwgUEFHRV9TSVpFKTsKKworICBGcmVlQmxvY2tJbmZvKiBmaXJzdF9ibG9jayA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnJlZUJsb2NrSW5mbyo+KHBhZ2UtPmJ5dGVzKTsKKyAgZmlyc3RfYmxvY2stPm5leHRfYmxvY2sgPSBmcmVlX2Jsb2NrX2xpc3RfOworICBmaXJzdF9ibG9jay0+bnVtX2ZyZWVfYmxvY2tzID0gKFBBR0VfU0laRSAtIHNpemVvZihMaW5rZXJBbGxvY2F0b3JQYWdlKikpL2Jsb2NrX3NpemVfOworCisgIGZyZWVfYmxvY2tfbGlzdF8gPSBmaXJzdF9ibG9jazsKKworICBwYWdlLT5uZXh0ID0gcGFnZV9saXN0XzsKKyAgcGFnZV9saXN0XyA9IHBhZ2U7Cit9CisKK0xpbmtlckFsbG9jYXRvclBhZ2UqIExpbmtlckJsb2NrQWxsb2NhdG9yOjpmaW5kX3BhZ2Uodm9pZCogYmxvY2spIHsKKyAgaWYgKGJsb2NrID09IG51bGxwdHIpIHsKKyAgICBhYm9ydCgpOworICB9CisKKyAgTGlua2VyQWxsb2NhdG9yUGFnZSogcGFnZSA9IHBhZ2VfbGlzdF87CisgIHdoaWxlIChwYWdlICE9IG51bGxwdHIpIHsKKyAgICBjb25zdCB1aW50OF90KiBwYWdlX3B0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBhZ2UpOworICAgIGlmIChibG9jayA+PSAocGFnZV9wdHIgKyBzaXplb2YocGFnZS0+bmV4dCkpICYmIGJsb2NrIDwgKHBhZ2VfcHRyICsgUEFHRV9TSVpFKSkgeworICAgICAgcmV0dXJuIHBhZ2U7CisgICAgfQorCisgICAgcGFnZSA9IHBhZ2UtPm5leHQ7CisgIH0KKworICBhYm9ydCgpOworfQpkaWZmIC0tZ2l0IGEvbGlua2VyL2xpbmtlcl9hbGxvY2F0b3IuaCBiL2xpbmtlci9saW5rZXJfYWxsb2NhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQzNTYzZgotLS0gL2Rldi9udWxsCisrKyBiL2xpbmtlci9saW5rZXJfYWxsb2NhdG9yLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX19MSU5LRVJfQUxMT0NBVE9SX0gKKyNkZWZpbmUgX19MSU5LRVJfQUxMT0NBVE9SX0gKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX21hY3Jvcy5oIgorCitzdHJ1Y3QgTGlua2VyQWxsb2NhdG9yUGFnZTsKKworLyoKKyAqIFRoaXMgY2xhc3MgaXMgYSBub24tdGVtcGxhdGUgdmVyc2lvbiBvZiB0aGUgTGlua2VyQWxsb2NhdG9yCisgKiBJdCBrZWVwcyBjb2RlIGluc2lkZSAuY3BwIGZpbGUgYnkga2VlcGluZyB0aGUgaW50ZXJmYWNlCisgKiB0ZW1wbGF0ZS1mcmVlLgorICoKKyAqIFBsZWFzZSB1c2UgTGlua2VyQWxsb2NhdG9yPHR5cGU+IHdoZXJlIHBvc3NpYmxlIChldmVyeXdoZXJlKS4KKyAqLworY2xhc3MgTGlua2VyQmxvY2tBbGxvY2F0b3IgeworIHB1YmxpYzoKKyAgZXhwbGljaXQgTGlua2VyQmxvY2tBbGxvY2F0b3Ioc2l6ZV90IGJsb2NrX3NpemUpOworCisgIHZvaWQqIGFsbG9jKCk7CisgIHZvaWQgZnJlZSh2b2lkKiBibG9jayk7CisgIHZvaWQgcHJvdGVjdF9hbGwoaW50IHByb3QpOworCisgcHJpdmF0ZToKKyAgdm9pZCBjcmVhdGVfbmV3X3BhZ2UoKTsKKyAgTGlua2VyQWxsb2NhdG9yUGFnZSogZmluZF9wYWdlKHZvaWQqIGJsb2NrKTsKKworICBzaXplX3QgYmxvY2tfc2l6ZV87CisgIExpbmtlckFsbG9jYXRvclBhZ2UqIHBhZ2VfbGlzdF87CisgIHZvaWQqIGZyZWVfYmxvY2tfbGlzdF87CisKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKExpbmtlckJsb2NrQWxsb2NhdG9yKTsKK307CisKKy8qCisgKiBXZSBjYW4ndCB1c2UgbWFsbG9jKDMpIGluIHRoZSBkeW5hbWljIGxpbmtlci4KKyAqCisgKiBBIHNpbXBsZSBhbGxvY2F0b3IgZm9yIHRoZSBkeW5hbWljIGxpbmtlci4gQW4gYWxsb2NhdG9yIGFsbG9jYXRlcyBpbnN0YW5jZXMKKyAqIG9mIGEgc2luZ2xlIGZpeGVkLXNpemUgdHlwZS4gQWxsb2NhdGlvbnMgYXJlIGJhY2tlZCBieSBwYWdlLXNpemVkIHByaXZhdGUKKyAqIGFub255bW91cyBtbWFwcy4KKyAqLwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIExpbmtlckFsbG9jYXRvciB7CisgcHVibGljOgorICBMaW5rZXJBbGxvY2F0b3IoKSA6IGJsb2NrX2FsbG9jYXRvcl8oc2l6ZW9mKFQpKSB7fQorICBUKiBhbGxvYygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KGJsb2NrX2FsbG9jYXRvcl8uYWxsb2MoKSk7IH0KKyAgdm9pZCBmcmVlKFQqIHQpIHsgYmxvY2tfYWxsb2NhdG9yXy5mcmVlKHQpOyB9CisgIHZvaWQgcHJvdGVjdF9hbGwoaW50IHByb3QpIHsgYmxvY2tfYWxsb2NhdG9yXy5wcm90ZWN0X2FsbChwcm90KTsgfQorIHByaXZhdGU6CisgIExpbmtlckJsb2NrQWxsb2NhdG9yIGJsb2NrX2FsbG9jYXRvcl87CisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihMaW5rZXJBbGxvY2F0b3IpOworfTsKKyNlbmRpZiAvLyBfX0xJTktFUl9BTExPQ0FUT1JfSApkaWZmIC0tZ2l0IGEvbGlua2VyL2xpbmtlcl9kZWJ1Zy5oIGIvbGlua2VyL2xpbmtlcl9kZWJ1Zy5oCmluZGV4IDJiZjZjZWMuLjNmYWEzOGUgMTAwNjQ0Ci0tLSBhL2xpbmtlci9saW5rZXJfZGVidWcuaAorKysgYi9saW5rZXIvbGlua2VyX2RlYnVnLmgKQEAgLTU1LDE3ICs1NSwxNyBAQAogCiAjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKIAotX19MSUJDX0hJRERFTl9fIGV4dGVybiBpbnQgZ0xkRGVidWdWZXJib3NpdHk7CitfX0xJQkNfSElEREVOX18gZXh0ZXJuIGludCBnX2xkX2RlYnVnX3ZlcmJvc2l0eTsKIAogI2lmIExJTktFUl9ERUJVR19UT19MT0cKLSNkZWZpbmUgX1BSSU5UVkYodix4Li4uKSBcCisjZGVmaW5lIF9QUklOVFZGKHYsIHguLi4pIFwKICAgICBkbyB7IFwKLSAgICAgIGlmIChnTGREZWJ1Z1ZlcmJvc2l0eSA+ICh2KSkgX19saWJjX2Zvcm1hdF9sb2coNS0odiksImxpbmtlciIseCk7IFwKKyAgICAgIGlmIChnX2xkX2RlYnVnX3ZlcmJvc2l0eSA+ICh2KSkgX19saWJjX2Zvcm1hdF9sb2coNS0odiksICJsaW5rZXIiLCB4KTsgXAogICAgIH0gd2hpbGUgKDApCiAjZWxzZSAvKiAhTElOS0VSX0RFQlVHX1RPX0xPRyAqLwotI2RlZmluZSBfUFJJTlRWRih2LHguLi4pIFwKKyNkZWZpbmUgX1BSSU5UVkYodiwgeC4uLikgXAogICAgIGRvIHsgXAotICAgICAgaWYgKGdMZERlYnVnVmVyYm9zaXR5ID4gKHYpKSB7IF9fbGliY19mb3JtYXRfZmQoMSwgeCk7IHdyaXRlKDEsICJcbiIsIDEpOyB9IFwKKyAgICAgIGlmIChnX2xkX2RlYnVnX3ZlcmJvc2l0eSA+ICh2KSkgeyBfX2xpYmNfZm9ybWF0X2ZkKDEsIHgpOyB3cml0ZSgxLCAiXG4iLCAxKTsgfSBcCiAgICAgfSB3aGlsZSAoMCkKICNlbmRpZiAvKiAhTElOS0VSX0RFQlVHX1RPX0xPRyAqLwogCkBAIC03OSw2ICs3OSw2IEBACiAjZGVmaW5lIERFQlVHKHguLi4pICAgICAgICAgIGRvIHt9IHdoaWxlICgwKQogI2VuZGlmIC8qIFRSQUNFX0RFQlVHICovCiAKLSNkZWZpbmUgVFJBQ0VfVFlQRSh0LHguLi4pICAgZG8geyBpZiAoRE9fVFJBQ0VfIyN0KSB7IFRSQUNFKHgpOyB9IH0gd2hpbGUgKDApCisjZGVmaW5lIFRSQUNFX1RZUEUodCwgeC4uLikgICBkbyB7IGlmIChET19UUkFDRV8jI3QpIHsgVFJBQ0UoeCk7IH0gfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qIF9MSU5LRVJfREVCVUdfSF8gKi8KZGlmZiAtLWdpdCBhL2xpbmtlci9saW5rZXJfZXhlY3V0YWJsZS5tayBiL2xpbmtlci9saW5rZXJfZXhlY3V0YWJsZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTAyYTBjCi0tLSAvZGV2L251bGwKKysrIGIvbGlua2VyL2xpbmtlcl9leGVjdXRhYmxlLm1rCkBAIC0wLDAgKzEsMjYgQEAKKworIworIyBJbnN0ZWFkIG9mIGluY2x1ZGluZyAkKEJVSUxEX0VYRUNVVEFCTEUpLCB3ZSBleGVjdXRlIHRoZSBzdGVwcyB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSBieQorIyBoYW5kLCBhcyB3ZSB3YW50IHRvIGluc2VydCBhbiBleHRyYSBvYmpjb3B5IHN0ZXAgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBidWlsZAorIyBzeXN0ZW0sIGFuZCBpcyBwcm9iYWJseSBzcGVjaWZpYyB0aGUgbGlua2VyIG9ubHksIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBtb2RpZnkgdGhlIGJ1aWxkCisjIHN5c3RlbSBmb3IgdGhlIHB1cnBvc2UuCisjCisKK0xPQ0FMX01PRFVMRV9DTEFTUyA6PSBFWEVDVVRBQkxFUworTE9DQUxfTU9EVUxFX1NVRkZJWCA6PSAkKFRBUkdFVF9FWEVDVVRBQkxFX1NVRkZJWCkKKworaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvZHluYW1pY19iaW5hcnkubWsKKworIyBTZWUgYnVpbGQvY29yZS9leGVjdXRhYmxlX2ludGVybmFsLm1rCiskKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9HTE9CQUxfTERfRElSUyA6PSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfR0xPQkFMX0xEX0RJUlMpCiskKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9HTE9CQUxfTERGTEFHUyA6PSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfR0xPQkFMX0xERkxBR1MpCiskKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9GRE9fTElCIDo9ICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9GRE9fTElCKQorJChsaW5rZWRfbW9kdWxlKTogUFJJVkFURV9UQVJHRVRfTElCR0NDIDo9ICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9MSUJHQ0MpCiskKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9DUlRCRUdJTl9EWU5BTUlDX08gOj0gJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpVEFSR0VUX0NSVEJFR0lOX0RZTkFNSUNfTykKKyQobGlua2VkX21vZHVsZSk6IFBSSVZBVEVfVEFSR0VUX0NSVEJFR0lOX1NUQVRJQ19PIDo9ICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9DUlRCRUdJTl9TVEFUSUNfTykKKyQobGlua2VkX21vZHVsZSk6IFBSSVZBVEVfVEFSR0VUX0NSVEVORF9PIDo9ICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9DUlRFTkRfTykKKyQobGlua2VkX21vZHVsZSk6IFBSSVZBVEVfVEFSR0VUX09CSkNPUFkgOj0gJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpVEFSR0VUX09CSkNPUFkpCiskKGxpbmtlZF9tb2R1bGUpOiAkKFRBUkdFVF9DUlRCRUdJTl9TVEFUSUNfTykgJChhbGxfb2JqZWN0cykgJChhbGxfbGlicmFyaWVzKSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfQ1JURU5EX08pCisJJCh0cmFuc2Zvcm0tby10by1zdGF0aWMtZXhlY3V0YWJsZSkKKwlAZWNobyAidGFyZ2V0IFByZWZpeFN5bWJvbHM6ICQoUFJJVkFURV9NT0RVTEUpICgkQCkiCisJJChoaWRlKSAkKFBSSVZBVEVfVEFSR0VUX09CSkNPUFkpIC0tcHJlZml4LXN5bWJvbHM9X19kbF8gJEAKZGlmZiAtLWdpdCBhL2xpbmtlci9saW5rZXJfcGhkci5jcHAgYi9saW5rZXIvbGlua2VyX3BoZHIuY3BwCmluZGV4IDMxMDE1MTEuLjBiOTlkMjAgMTAwNjQ0Ci0tLSBhL2xpbmtlci9saW5rZXJfcGhkci5jcHAKKysrIGIvbGlua2VyL2xpbmtlcl9waGRyLmNwcApAQCAtMzEsNiArMzEsOSBAQAogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9leGVjLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjaW5jbHVkZSAibGlua2VyLmgiCiAjaW5jbHVkZSAibGlua2VyX2RlYnVnLmgiCkBAIC01MCw3ICs1Myw3IEBACiAgICAgcF92YWRkciAgIC0+IHNlZ21lbnQncyB2aXJ0dWFsIGFkZHJlc3MKICAgICBwX2ZsYWdzICAgLT4gc2VnbWVudCBmbGFncyAoZS5nLiByZWFkYWJsZSwgd3JpdGFibGUsIGV4ZWN1dGFibGUpCiAKLSAgV2Ugd2lsbCBpZ25vcmUgdGhlIHBfcGFkZHIgYW5kIHBfYWxpZ24gZmllbGRzIG9mIEVsZl9QaGRyIGZvciBub3cuCisgIFdlIHdpbGwgaWdub3JlIHRoZSBwX3BhZGRyIGFuZCBwX2FsaWduIGZpZWxkcyBvZiBFbGZXKFBoZHIpIGZvciBub3cuCiAKICAgVGhlIGxvYWRhYmxlIHNlZ21lbnRzIGNhbiBiZSBzZWVuIGFzIGEgbGlzdCBvZiBbcF92YWRkciAuLi4gcF92YWRkcitwX21lbXN6KQogICByYW5nZXMgb2YgdmlydHVhbCBhZGRyZXNzZXMuIEEgZmV3IHJ1bGVzIGFwcGx5OgpAQCAtMTExLDcgKzExNCw3IEBACiAKICAqKi8KIAotI2RlZmluZSBNQVlCRV9NQVBfRkxBRyh4LGZyb20sdG8pICAgICgoKHgpICYgKGZyb20pKSA/ICh0bykgOiAwKQorI2RlZmluZSBNQVlCRV9NQVBfRkxBRyh4LCBmcm9tLCB0bykgICgoKHgpICYgKGZyb20pKSA/ICh0bykgOiAwKQogI2RlZmluZSBQRkxBR1NfVE9fUFJPVCh4KSAgICAgICAgICAgIChNQVlCRV9NQVBfRkxBRygoeCksIFBGX1gsIFBST1RfRVhFQykgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWUJFX01BUF9GTEFHKCh4KSwgUEZfUiwgUFJPVF9SRUFEKSB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFZQkVfTUFQX0ZMQUcoKHgpLCBQRl9XLCBQUk9UX1dSSVRFKSkKQEAgLTEyNCwxOSArMTI3LDE2IEBACiB9CiAKIEVsZlJlYWRlcjo6fkVsZlJlYWRlcigpIHsKLSAgaWYgKGZkXyAhPSAtMSkgewotICAgIGNsb3NlKGZkXyk7Ci0gIH0KICAgaWYgKHBoZHJfbW1hcF8gIT0gTlVMTCkgewogICAgIG11bm1hcChwaGRyX21tYXBfLCBwaGRyX3NpemVfKTsKICAgfQogfQogCi1ib29sIEVsZlJlYWRlcjo6TG9hZCgpIHsKK2Jvb2wgRWxmUmVhZGVyOjpMb2FkKGNvbnN0IGFuZHJvaWRfZGxleHRpbmZvKiBleHRpbmZvKSB7CiAgIHJldHVybiBSZWFkRWxmSGVhZGVyKCkgJiYKICAgICAgICAgIFZlcmlmeUVsZkhlYWRlcigpICYmCiAgICAgICAgICBSZWFkUHJvZ3JhbUhlYWRlcigpICYmCi0gICAgICAgICBSZXNlcnZlQWRkcmVzc1NwYWNlKCkgJiYKKyAgICAgICAgIFJlc2VydmVBZGRyZXNzU3BhY2UoZXh0aW5mbykgJiYKICAgICAgICAgIExvYWRTZWdtZW50cygpICYmCiAgICAgICAgICBGaW5kUGhkcigpOwogfQpAQCAtMTU2LDEwICsxNTYsNyBAQAogfQogCiBib29sIEVsZlJlYWRlcjo6VmVyaWZ5RWxmSGVhZGVyKCkgewotICBpZiAoaGVhZGVyXy5lX2lkZW50W0VJX01BRzBdICE9IEVMRk1BRzAgfHwKLSAgICAgIGhlYWRlcl8uZV9pZGVudFtFSV9NQUcxXSAhPSBFTEZNQUcxIHx8Ci0gICAgICBoZWFkZXJfLmVfaWRlbnRbRUlfTUFHMl0gIT0gRUxGTUFHMiB8fAotICAgICAgaGVhZGVyXy5lX2lkZW50W0VJX01BRzNdICE9IEVMRk1BRzMpIHsKKyAgaWYgKG1lbWNtcChoZWFkZXJfLmVfaWRlbnQsIEVMRk1BRywgU0VMRk1BRykgIT0gMCkgewogICAgIERMX0VSUigiXCIlc1wiIGhhcyBiYWQgRUxGIG1hZ2ljIiwgbmFtZV8pOwogICAgIHJldHVybiBmYWxzZTsKICAgfQpAQCAtMjE3LDE0ICsyMTQsMTQgQEAKIAogICAvLyBMaWtlIHRoZSBrZXJuZWwsIHdlIG9ubHkgYWNjZXB0IHByb2dyYW0gaGVhZGVyIHRhYmxlcyB0aGF0CiAgIC8vIGFyZSBzbWFsbGVyIHRoYW4gNjRLaUIuCi0gIGlmIChwaGRyX251bV8gPCAxIHx8IHBoZHJfbnVtXyA+IDY1NTM2L3NpemVvZihFbGZfUGhkcikpIHsKKyAgaWYgKHBoZHJfbnVtXyA8IDEgfHwgcGhkcl9udW1fID4gNjU1MzYvc2l6ZW9mKEVsZlcoUGhkcikpKSB7CiAgICAgRExfRVJSKCJcIiVzXCIgaGFzIGludmFsaWQgZV9waG51bTogJXpkIiwgbmFtZV8sIHBoZHJfbnVtXyk7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgRWxmX0FkZHIgcGFnZV9taW4gPSBQQUdFX1NUQVJUKGhlYWRlcl8uZV9waG9mZik7Ci0gIEVsZl9BZGRyIHBhZ2VfbWF4ID0gUEFHRV9FTkQoaGVhZGVyXy5lX3Bob2ZmICsgKHBoZHJfbnVtXyAqIHNpemVvZihFbGZfUGhkcikpKTsKLSAgRWxmX0FkZHIgcGFnZV9vZmZzZXQgPSBQQUdFX09GRlNFVChoZWFkZXJfLmVfcGhvZmYpOworICBFbGZXKEFkZHIpIHBhZ2VfbWluID0gUEFHRV9TVEFSVChoZWFkZXJfLmVfcGhvZmYpOworICBFbGZXKEFkZHIpIHBhZ2VfbWF4ID0gUEFHRV9FTkQoaGVhZGVyXy5lX3Bob2ZmICsgKHBoZHJfbnVtXyAqIHNpemVvZihFbGZXKFBoZHIpKSkpOworICBFbGZXKEFkZHIpIHBhZ2Vfb2Zmc2V0ID0gUEFHRV9PRkZTRVQoaGVhZGVyXy5lX3Bob2ZmKTsKIAogICBwaGRyX3NpemVfID0gcGFnZV9tYXggLSBwYWdlX21pbjsKIApAQCAtMjM1LDcgKzIzMiw3IEBACiAgIH0KIAogICBwaGRyX21tYXBfID0gbW1hcF9yZXN1bHQ7Ci0gIHBoZHJfdGFibGVfID0gcmVpbnRlcnByZXRfY2FzdDxFbGZfUGhkcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1tYXBfcmVzdWx0KSArIHBhZ2Vfb2Zmc2V0KTsKKyAgcGhkcl90YWJsZV8gPSByZWludGVycHJldF9jYXN0PEVsZlcoUGhkcikqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihtbWFwX3Jlc3VsdCkgKyBwYWdlX29mZnNldCk7CiAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNDksNTAgKzI0Niw1MCBAQAogICogc2V0IHRvIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFkZHJlc3NlcyBvZiBwYWdlcyB0byBiZSByZXNlcnZlZCwKICAqIG9yIDAgaWYgdGhlcmUgaXMgbm90aGluZyB0byBsb2FkLgogICovCi1zaXplX3QgcGhkcl90YWJsZV9nZXRfbG9hZF9zaXplKGNvbnN0IEVsZl9QaGRyKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmX0FkZHIqIG91dF9taW5fdmFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZl9BZGRyKiBvdXRfbWF4X3ZhZGRyKSB7Ci0gICAgRWxmX0FkZHIgbWluX3ZhZGRyID0gVUlOVFBUUl9NQVg7Ci0gICAgRWxmX0FkZHIgbWF4X3ZhZGRyID0gMDsKK3NpemVfdCBwaGRyX3RhYmxlX2dldF9sb2FkX3NpemUoY29uc3QgRWxmVyhQaGRyKSogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZlcoQWRkcikqIG91dF9taW5fdmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZlcoQWRkcikqIG91dF9tYXhfdmFkZHIpIHsKKyAgRWxmVyhBZGRyKSBtaW5fdmFkZHIgPSBVSU5UUFRSX01BWDsKKyAgRWxmVyhBZGRyKSBtYXhfdmFkZHIgPSAwOwogCi0gICAgYm9vbCBmb3VuZF9wdF9sb2FkID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaGRyX2NvdW50OyArK2kpIHsKLSAgICAgICAgY29uc3QgRWxmX1BoZHIqIHBoZHIgPSAmcGhkcl90YWJsZVtpXTsKKyAgYm9vbCBmb3VuZF9wdF9sb2FkID0gZmFsc2U7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhkcl9jb3VudDsgKytpKSB7CisgICAgY29uc3QgRWxmVyhQaGRyKSogcGhkciA9ICZwaGRyX3RhYmxlW2ldOwogCi0gICAgICAgIGlmIChwaGRyLT5wX3R5cGUgIT0gUFRfTE9BRCkgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgZm91bmRfcHRfbG9hZCA9IHRydWU7Ci0KLSAgICAgICAgaWYgKHBoZHItPnBfdmFkZHIgPCBtaW5fdmFkZHIpIHsKLSAgICAgICAgICAgIG1pbl92YWRkciA9IHBoZHItPnBfdmFkZHI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocGhkci0+cF92YWRkciArIHBoZHItPnBfbWVtc3ogPiBtYXhfdmFkZHIpIHsKLSAgICAgICAgICAgIG1heF92YWRkciA9IHBoZHItPnBfdmFkZHIgKyBwaGRyLT5wX21lbXN6OwotICAgICAgICB9CisgICAgaWYgKHBoZHItPnBfdHlwZSAhPSBQVF9MT0FEKSB7CisgICAgICBjb250aW51ZTsKICAgICB9Ci0gICAgaWYgKCFmb3VuZF9wdF9sb2FkKSB7Ci0gICAgICAgIG1pbl92YWRkciA9IDA7CisgICAgZm91bmRfcHRfbG9hZCA9IHRydWU7CisKKyAgICBpZiAocGhkci0+cF92YWRkciA8IG1pbl92YWRkcikgeworICAgICAgbWluX3ZhZGRyID0gcGhkci0+cF92YWRkcjsKICAgICB9CiAKLSAgICBtaW5fdmFkZHIgPSBQQUdFX1NUQVJUKG1pbl92YWRkcik7Ci0gICAgbWF4X3ZhZGRyID0gUEFHRV9FTkQobWF4X3ZhZGRyKTsKKyAgICBpZiAocGhkci0+cF92YWRkciArIHBoZHItPnBfbWVtc3ogPiBtYXhfdmFkZHIpIHsKKyAgICAgIG1heF92YWRkciA9IHBoZHItPnBfdmFkZHIgKyBwaGRyLT5wX21lbXN6OworICAgIH0KKyAgfQorICBpZiAoIWZvdW5kX3B0X2xvYWQpIHsKKyAgICBtaW5fdmFkZHIgPSAwOworICB9CiAKLSAgICBpZiAob3V0X21pbl92YWRkciAhPSBOVUxMKSB7Ci0gICAgICAgICpvdXRfbWluX3ZhZGRyID0gbWluX3ZhZGRyOwotICAgIH0KLSAgICBpZiAob3V0X21heF92YWRkciAhPSBOVUxMKSB7Ci0gICAgICAgICpvdXRfbWF4X3ZhZGRyID0gbWF4X3ZhZGRyOwotICAgIH0KLSAgICByZXR1cm4gbWF4X3ZhZGRyIC0gbWluX3ZhZGRyOworICBtaW5fdmFkZHIgPSBQQUdFX1NUQVJUKG1pbl92YWRkcik7CisgIG1heF92YWRkciA9IFBBR0VfRU5EKG1heF92YWRkcik7CisKKyAgaWYgKG91dF9taW5fdmFkZHIgIT0gTlVMTCkgeworICAgICpvdXRfbWluX3ZhZGRyID0gbWluX3ZhZGRyOworICB9CisgIGlmIChvdXRfbWF4X3ZhZGRyICE9IE5VTEwpIHsKKyAgICAqb3V0X21heF92YWRkciA9IG1heF92YWRkcjsKKyAgfQorICByZXR1cm4gbWF4X3ZhZGRyIC0gbWluX3ZhZGRyOwogfQogCiAvLyBSZXNlcnZlIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlIGJpZyBlbm91Z2ggdG8gaG9sZCBhbGwgbG9hZGFibGUKIC8vIHNlZ21lbnRzIG9mIGEgcHJvZ3JhbSBoZWFkZXIgdGFibGUuIFRoaXMgaXMgZG9uZSBieSBjcmVhdGluZyBhCiAvLyBwcml2YXRlIGFub255bW91cyBtbWFwKCkgd2l0aCBQUk9UX05PTkUuCi1ib29sIEVsZlJlYWRlcjo6UmVzZXJ2ZUFkZHJlc3NTcGFjZSgpIHsKLSAgRWxmX0FkZHIgbWluX3ZhZGRyOworYm9vbCBFbGZSZWFkZXI6OlJlc2VydmVBZGRyZXNzU3BhY2UoY29uc3QgYW5kcm9pZF9kbGV4dGluZm8qIGV4dGluZm8pIHsKKyAgRWxmVyhBZGRyKSBtaW5fdmFkZHI7CiAgIGxvYWRfc2l6ZV8gPSBwaGRyX3RhYmxlX2dldF9sb2FkX3NpemUocGhkcl90YWJsZV8sIHBoZHJfbnVtXywgJm1pbl92YWRkcik7CiAgIGlmIChsb2FkX3NpemVfID09IDApIHsKICAgICBETF9FUlIoIlwiJXNcIiBoYXMgbm8gbG9hZGFibGUgc2VnbWVudHMiLCBuYW1lXyk7CkBAIC0zMDAsMTEgKzI5NywzMyBAQAogICB9CiAKICAgdWludDhfdCogYWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1pbl92YWRkcik7Ci0gIGludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTOwotICB2b2lkKiBzdGFydCA9IG1tYXAoYWRkciwgbG9hZF9zaXplXywgUFJPVF9OT05FLCBtbWFwX2ZsYWdzLCAtMSwgMCk7Ci0gIGlmIChzdGFydCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgRExfRVJSKCJjb3VsZG4ndCByZXNlcnZlICV6ZCBieXRlcyBvZiBhZGRyZXNzIHNwYWNlIGZvciBcIiVzXCIiLCBsb2FkX3NpemVfLCBuYW1lXyk7Ci0gICAgcmV0dXJuIGZhbHNlOworICB2b2lkKiBzdGFydDsKKyAgc2l6ZV90IHJlc2VydmVkX3NpemUgPSAwOworICBib29sIHJlc2VydmVkX2hpbnQgPSB0cnVlOworCisgIGlmIChleHRpbmZvICE9IE5VTEwpIHsKKyAgICBpZiAoZXh0aW5mby0+ZmxhZ3MgJiBBTkRST0lEX0RMRVhUX1JFU0VSVkVEX0FERFJFU1MpIHsKKyAgICAgIHJlc2VydmVkX3NpemUgPSBleHRpbmZvLT5yZXNlcnZlZF9zaXplOworICAgICAgcmVzZXJ2ZWRfaGludCA9IGZhbHNlOworICAgIH0gZWxzZSBpZiAoZXh0aW5mby0+ZmxhZ3MgJiBBTkRST0lEX0RMRVhUX1JFU0VSVkVEX0FERFJFU1NfSElOVCkgeworICAgICAgcmVzZXJ2ZWRfc2l6ZSA9IGV4dGluZm8tPnJlc2VydmVkX3NpemU7CisgICAgfQorICB9CisKKyAgaWYgKGxvYWRfc2l6ZV8gPiByZXNlcnZlZF9zaXplKSB7CisgICAgaWYgKCFyZXNlcnZlZF9oaW50KSB7CisgICAgICBETF9FUlIoInJlc2VydmVkIGFkZHJlc3Mgc3BhY2UgJXpkIHNtYWxsZXIgdGhhbiAlemQgYnl0ZXMgbmVlZGVkIGZvciBcIiVzXCIiLAorICAgICAgICAgICAgIHJlc2VydmVkX3NpemUgLSBsb2FkX3NpemVfLCBsb2FkX3NpemVfLCBuYW1lXyk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTOworICAgIHN0YXJ0ID0gbW1hcChhZGRyLCBsb2FkX3NpemVfLCBQUk9UX05PTkUsIG1tYXBfZmxhZ3MsIC0xLCAwKTsKKyAgICBpZiAoc3RhcnQgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgRExfRVJSKCJjb3VsZG4ndCByZXNlcnZlICV6ZCBieXRlcyBvZiBhZGRyZXNzIHNwYWNlIGZvciBcIiVzXCIiLCBsb2FkX3NpemVfLCBuYW1lXyk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9IGVsc2UgeworICAgIHN0YXJ0ID0gZXh0aW5mby0+cmVzZXJ2ZWRfYWRkcjsKICAgfQogCiAgIGxvYWRfc3RhcnRfID0gc3RhcnQ7CkBAIC0zMTQsMzAgKzMzMywzMCBAQAogCiBib29sIEVsZlJlYWRlcjo6TG9hZFNlZ21lbnRzKCkgewogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBoZHJfbnVtXzsgKytpKSB7Ci0gICAgY29uc3QgRWxmX1BoZHIqIHBoZHIgPSAmcGhkcl90YWJsZV9baV07CisgICAgY29uc3QgRWxmVyhQaGRyKSogcGhkciA9ICZwaGRyX3RhYmxlX1tpXTsKIAogICAgIGlmIChwaGRyLT5wX3R5cGUgIT0gUFRfTE9BRCkgewogICAgICAgY29udGludWU7CiAgICAgfQogCiAgICAgLy8gU2VnbWVudCBhZGRyZXNzZXMgaW4gbWVtb3J5LgotICAgIEVsZl9BZGRyIHNlZ19zdGFydCA9IHBoZHItPnBfdmFkZHIgKyBsb2FkX2JpYXNfOwotICAgIEVsZl9BZGRyIHNlZ19lbmQgICA9IHNlZ19zdGFydCArIHBoZHItPnBfbWVtc3o7CisgICAgRWxmVyhBZGRyKSBzZWdfc3RhcnQgPSBwaGRyLT5wX3ZhZGRyICsgbG9hZF9iaWFzXzsKKyAgICBFbGZXKEFkZHIpIHNlZ19lbmQgICA9IHNlZ19zdGFydCArIHBoZHItPnBfbWVtc3o7CiAKLSAgICBFbGZfQWRkciBzZWdfcGFnZV9zdGFydCA9IFBBR0VfU1RBUlQoc2VnX3N0YXJ0KTsKLSAgICBFbGZfQWRkciBzZWdfcGFnZV9lbmQgICA9IFBBR0VfRU5EKHNlZ19lbmQpOworICAgIEVsZlcoQWRkcikgc2VnX3BhZ2Vfc3RhcnQgPSBQQUdFX1NUQVJUKHNlZ19zdGFydCk7CisgICAgRWxmVyhBZGRyKSBzZWdfcGFnZV9lbmQgICA9IFBBR0VfRU5EKHNlZ19lbmQpOwogCi0gICAgRWxmX0FkZHIgc2VnX2ZpbGVfZW5kICAgPSBzZWdfc3RhcnQgKyBwaGRyLT5wX2ZpbGVzejsKKyAgICBFbGZXKEFkZHIpIHNlZ19maWxlX2VuZCAgID0gc2VnX3N0YXJ0ICsgcGhkci0+cF9maWxlc3o7CiAKICAgICAvLyBGaWxlIG9mZnNldHMuCi0gICAgRWxmX0FkZHIgZmlsZV9zdGFydCA9IHBoZHItPnBfb2Zmc2V0OwotICAgIEVsZl9BZGRyIGZpbGVfZW5kICAgPSBmaWxlX3N0YXJ0ICsgcGhkci0+cF9maWxlc3o7CisgICAgRWxmVyhBZGRyKSBmaWxlX3N0YXJ0ID0gcGhkci0+cF9vZmZzZXQ7CisgICAgRWxmVyhBZGRyKSBmaWxlX2VuZCAgID0gZmlsZV9zdGFydCArIHBoZHItPnBfZmlsZXN6OwogCi0gICAgRWxmX0FkZHIgZmlsZV9wYWdlX3N0YXJ0ID0gUEFHRV9TVEFSVChmaWxlX3N0YXJ0KTsKLSAgICBFbGZfQWRkciBmaWxlX2xlbmd0aCA9IGZpbGVfZW5kIC0gZmlsZV9wYWdlX3N0YXJ0OworICAgIEVsZlcoQWRkcikgZmlsZV9wYWdlX3N0YXJ0ID0gUEFHRV9TVEFSVChmaWxlX3N0YXJ0KTsKKyAgICBFbGZXKEFkZHIpIGZpbGVfbGVuZ3RoID0gZmlsZV9lbmQgLSBmaWxlX3BhZ2Vfc3RhcnQ7CiAKICAgICBpZiAoZmlsZV9sZW5ndGggIT0gMCkgewotICAgICAgdm9pZCogc2VnX2FkZHIgPSBtbWFwKCh2b2lkKilzZWdfcGFnZV9zdGFydCwKKyAgICAgIHZvaWQqIHNlZ19hZGRyID0gbW1hcChyZWludGVycHJldF9jYXN0PHZvaWQqPihzZWdfcGFnZV9zdGFydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEZMQUdTX1RPX1BST1QocGhkci0+cF9mbGFncyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX0ZJWEVEfE1BUF9QUklWQVRFLApAQCAtMzUyLDcgKzM3MSw3IEBACiAgICAgLy8gaWYgdGhlIHNlZ21lbnQgaXMgd3JpdGFibGUsIGFuZCBkb2VzIG5vdCBlbmQgb24gYSBwYWdlIGJvdW5kYXJ5LAogICAgIC8vIHplcm8tZmlsbCBpdCB1bnRpbCB0aGUgcGFnZSBsaW1pdC4KICAgICBpZiAoKHBoZHItPnBfZmxhZ3MgJiBQRl9XKSAhPSAwICYmIFBBR0VfT0ZGU0VUKHNlZ19maWxlX2VuZCkgPiAwKSB7Ci0gICAgICBtZW1zZXQoKHZvaWQqKXNlZ19maWxlX2VuZCwgMCwgUEFHRV9TSVpFIC0gUEFHRV9PRkZTRVQoc2VnX2ZpbGVfZW5kKSk7CisgICAgICBtZW1zZXQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc2VnX2ZpbGVfZW5kKSwgMCwgUEFHRV9TSVpFIC0gUEFHRV9PRkZTRVQoc2VnX2ZpbGVfZW5kKSk7CiAgICAgfQogCiAgICAgc2VnX2ZpbGVfZW5kID0gUEFHRV9FTkQoc2VnX2ZpbGVfZW5kKTsKQEAgLTM2Miw3ICszODEsNyBAQAogICAgIC8vIGJldHdlZW4gdGhlbS4gVGhpcyBpcyBkb25lIGJ5IHVzaW5nIGEgcHJpdmF0ZSBhbm9ueW1vdXMKICAgICAvLyBtYXAgZm9yIGFsbCBleHRyYSBwYWdlcy4KICAgICBpZiAoc2VnX3BhZ2VfZW5kID4gc2VnX2ZpbGVfZW5kKSB7Ci0gICAgICB2b2lkKiB6ZXJvbWFwID0gbW1hcCgodm9pZCopc2VnX2ZpbGVfZW5kLAorICAgICAgdm9pZCogemVyb21hcCA9IG1tYXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc2VnX2ZpbGVfZW5kKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ19wYWdlX2VuZCAtIHNlZ19maWxlX2VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBGTEFHU19UT19QUk9UKHBoZHItPnBfZmxhZ3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX0ZJWEVEfE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsCkBAIC0zODEsMjYgKzQwMCwyNyBAQAogICogd2l0aCBvcHRpb25hbCBleHRyYSBmbGFncyAoaS5lLiByZWFsbHkgUFJPVF9XUklURSkuIFVzZWQgYnkKICAqIHBoZHJfdGFibGVfcHJvdGVjdF9zZWdtZW50cyBhbmQgcGhkcl90YWJsZV91bnByb3RlY3Rfc2VnbWVudHMuCiAgKi8KLXN0YXRpYyBpbnQgX3BoZHJfdGFibGVfc2V0X2xvYWRfcHJvdChjb25zdCBFbGZfUGhkciogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmX0FkZHIgbG9hZF9iaWFzLCBpbnQgZXh0cmFfcHJvdF9mbGFncykgewotICAgIGNvbnN0IEVsZl9QaGRyKiBwaGRyID0gcGhkcl90YWJsZTsKLSAgICBjb25zdCBFbGZfUGhkciogcGhkcl9saW1pdCA9IHBoZHIgKyBwaGRyX2NvdW50Oworc3RhdGljIGludCBfcGhkcl90YWJsZV9zZXRfbG9hZF9wcm90KGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZlcoQWRkcikgbG9hZF9iaWFzLCBpbnQgZXh0cmFfcHJvdF9mbGFncykgeworICBjb25zdCBFbGZXKFBoZHIpKiBwaGRyID0gcGhkcl90YWJsZTsKKyAgY29uc3QgRWxmVyhQaGRyKSogcGhkcl9saW1pdCA9IHBoZHIgKyBwaGRyX2NvdW50OwogCi0gICAgZm9yICg7IHBoZHIgPCBwaGRyX2xpbWl0OyBwaGRyKyspIHsKLSAgICAgICAgaWYgKHBoZHItPnBfdHlwZSAhPSBQVF9MT0FEIHx8IChwaGRyLT5wX2ZsYWdzICYgUEZfVykgIT0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEVsZl9BZGRyIHNlZ19wYWdlX3N0YXJ0ID0gUEFHRV9TVEFSVChwaGRyLT5wX3ZhZGRyKSArIGxvYWRfYmlhczsKLSAgICAgICAgRWxmX0FkZHIgc2VnX3BhZ2VfZW5kICAgPSBQQUdFX0VORChwaGRyLT5wX3ZhZGRyICsgcGhkci0+cF9tZW1zeikgKyBsb2FkX2JpYXM7Ci0KLSAgICAgICAgaW50IHJldCA9IG1wcm90ZWN0KCh2b2lkKilzZWdfcGFnZV9zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ19wYWdlX2VuZCAtIHNlZ19wYWdlX3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUEZMQUdTX1RPX1BST1QocGhkci0+cF9mbGFncykgfCBleHRyYV9wcm90X2ZsYWdzKTsKLSAgICAgICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQorICBmb3IgKDsgcGhkciA8IHBoZHJfbGltaXQ7IHBoZHIrKykgeworICAgIGlmIChwaGRyLT5wX3R5cGUgIT0gUFRfTE9BRCB8fCAocGhkci0+cF9mbGFncyAmIFBGX1cpICE9IDApIHsKKyAgICAgIGNvbnRpbnVlOwogICAgIH0KLSAgICByZXR1cm4gMDsKKworICAgIEVsZlcoQWRkcikgc2VnX3BhZ2Vfc3RhcnQgPSBQQUdFX1NUQVJUKHBoZHItPnBfdmFkZHIpICsgbG9hZF9iaWFzOworICAgIEVsZlcoQWRkcikgc2VnX3BhZ2VfZW5kICAgPSBQQUdFX0VORChwaGRyLT5wX3ZhZGRyICsgcGhkci0+cF9tZW1zeikgKyBsb2FkX2JpYXM7CisKKyAgICBpbnQgcmV0ID0gbXByb3RlY3QocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc2VnX3BhZ2Vfc3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICBzZWdfcGFnZV9lbmQgLSBzZWdfcGFnZV9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgUEZMQUdTX1RPX1BST1QocGhkci0+cF9mbGFncykgfCBleHRyYV9wcm90X2ZsYWdzKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKIH0KIAogLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgcHJvdGVjdGlvbiBtb2RlcyBmb3IgYWxsIGxvYWRhYmxlIHNlZ21lbnRzLgpAQCAtNDE0LDggKzQzNCw4IEBACiAgKiBSZXR1cm46CiAgKiAgIDAgb24gZXJyb3IsIC0xIG9uIGZhaWx1cmUgKGVycm9yIGNvZGUgaW4gZXJybm8pLgogICovCi1pbnQgcGhkcl90YWJsZV9wcm90ZWN0X3NlZ21lbnRzKGNvbnN0IEVsZl9QaGRyKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwgRWxmX0FkZHIgbG9hZF9iaWFzKSB7Ci0gICAgcmV0dXJuIF9waGRyX3RhYmxlX3NldF9sb2FkX3Byb3QocGhkcl90YWJsZSwgcGhkcl9jb3VudCwgbG9hZF9iaWFzLCAwKTsKK2ludCBwaGRyX3RhYmxlX3Byb3RlY3Rfc2VnbWVudHMoY29uc3QgRWxmVyhQaGRyKSogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsIEVsZlcoQWRkcikgbG9hZF9iaWFzKSB7CisgIHJldHVybiBfcGhkcl90YWJsZV9zZXRfbG9hZF9wcm90KHBoZHJfdGFibGUsIHBoZHJfY291bnQsIGxvYWRfYmlhcywgMCk7CiB9CiAKIC8qIENoYW5nZSB0aGUgcHJvdGVjdGlvbiBvZiBhbGwgbG9hZGVkIHNlZ21lbnRzIGluIG1lbW9yeSB0byB3cml0YWJsZS4KQEAgLTQzNCw1MCArNDU0LDUwIEBACiAgKiBSZXR1cm46CiAgKiAgIDAgb24gZXJyb3IsIC0xIG9uIGZhaWx1cmUgKGVycm9yIGNvZGUgaW4gZXJybm8pLgogICovCi1pbnQgcGhkcl90YWJsZV91bnByb3RlY3Rfc2VnbWVudHMoY29uc3QgRWxmX1BoZHIqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LCBFbGZfQWRkciBsb2FkX2JpYXMpIHsKLSAgICByZXR1cm4gX3BoZHJfdGFibGVfc2V0X2xvYWRfcHJvdChwaGRyX3RhYmxlLCBwaGRyX2NvdW50LCBsb2FkX2JpYXMsIFBST1RfV1JJVEUpOworaW50IHBoZHJfdGFibGVfdW5wcm90ZWN0X3NlZ21lbnRzKGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LCBFbGZXKEFkZHIpIGxvYWRfYmlhcykgeworICByZXR1cm4gX3BoZHJfdGFibGVfc2V0X2xvYWRfcHJvdChwaGRyX3RhYmxlLCBwaGRyX2NvdW50LCBsb2FkX2JpYXMsIFBST1RfV1JJVEUpOwogfQogCiAvKiBVc2VkIGludGVybmFsbHkgYnkgcGhkcl90YWJsZV9wcm90ZWN0X2dudV9yZWxybyBhbmQKICAqIHBoZHJfdGFibGVfdW5wcm90ZWN0X2dudV9yZWxyby4KICAqLwotc3RhdGljIGludCBfcGhkcl90YWJsZV9zZXRfZ251X3JlbHJvX3Byb3QoY29uc3QgRWxmX1BoZHIqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmX0FkZHIgbG9hZF9iaWFzLCBpbnQgcHJvdF9mbGFncykgewotICAgIGNvbnN0IEVsZl9QaGRyKiBwaGRyID0gcGhkcl90YWJsZTsKLSAgICBjb25zdCBFbGZfUGhkciogcGhkcl9saW1pdCA9IHBoZHIgKyBwaGRyX2NvdW50Oworc3RhdGljIGludCBfcGhkcl90YWJsZV9zZXRfZ251X3JlbHJvX3Byb3QoY29uc3QgRWxmVyhQaGRyKSogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZXKEFkZHIpIGxvYWRfYmlhcywgaW50IHByb3RfZmxhZ3MpIHsKKyAgY29uc3QgRWxmVyhQaGRyKSogcGhkciA9IHBoZHJfdGFibGU7CisgIGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfbGltaXQgPSBwaGRyICsgcGhkcl9jb3VudDsKIAotICAgIGZvciAocGhkciA9IHBoZHJfdGFibGU7IHBoZHIgPCBwaGRyX2xpbWl0OyBwaGRyKyspIHsKLSAgICAgICAgaWYgKHBoZHItPnBfdHlwZSAhPSBQVF9HTlVfUkVMUk8pCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvKiBUcmlja3k6IHdoYXQgaGFwcGVucyB3aGVuIHRoZSByZWxybyBzZWdtZW50IGRvZXMgbm90IHN0YXJ0Ci0gICAgICAgICAqIG9yIGVuZCBhdCBwYWdlIGJvdW5kYXJpZXM/LiBXZSdyZSBnb2luZyB0byBiZSBvdmVyLXByb3RlY3RpdmUKLSAgICAgICAgICogaGVyZSBhbmQgcHV0IGV2ZXJ5IHBhZ2UgdG91Y2hlZCBieSB0aGUgc2VnbWVudCBhcyByZWFkLW9ubHkuCi0gICAgICAgICAqCi0gICAgICAgICAqIFRoaXMgc2VlbXMgdG8gbWF0Y2ggSWFuIExhbmNlIFRheWxvcidzIGRlc2NyaXB0aW9uIG9mIHRoZQotICAgICAgICAgKiBmZWF0dXJlIGF0IGh0dHA6Ly93d3cuYWlycy5jb20vYmxvZy9hcmNoaXZlcy8xODkuCi0gICAgICAgICAqCi0gICAgICAgICAqIEV4dHJhY3Q6Ci0gICAgICAgICAqICAgIE5vdGUgdGhhdCB0aGUgY3VycmVudCBkeW5hbWljIGxpbmtlciBjb2RlIHdpbGwgb25seSB3b3JrCi0gICAgICAgICAqICAgIGNvcnJlY3RseSBpZiB0aGUgUFRfR05VX1JFTFJPIHNlZ21lbnQgc3RhcnRzIG9uIGEgcGFnZQotICAgICAgICAgKiAgICBib3VuZGFyeS4gVGhpcyBpcyBiZWNhdXNlIHRoZSBkeW5hbWljIGxpbmtlciByb3VuZHMgdGhlCi0gICAgICAgICAqICAgIHBfdmFkZHIgZmllbGQgZG93biB0byB0aGUgcHJldmlvdXMgcGFnZSBib3VuZGFyeS4gSWYKLSAgICAgICAgICogICAgdGhlcmUgaXMgYW55dGhpbmcgb24gdGhlIHBhZ2Ugd2hpY2ggc2hvdWxkIG5vdCBiZSByZWFkLW9ubHksCi0gICAgICAgICAqICAgIHRoZSBwcm9ncmFtIGlzIGxpa2VseSB0byBmYWlsIGF0IHJ1bnRpbWUuIFNvIGluIGVmZmVjdCB0aGUKLSAgICAgICAgICogICAgbGlua2VyIG11c3Qgb25seSBlbWl0IGEgUFRfR05VX1JFTFJPIHNlZ21lbnQgaWYgaXQgZW5zdXJlcwotICAgICAgICAgKiAgICB0aGF0IGl0IHN0YXJ0cyBvbiBhIHBhZ2UgYm91bmRhcnkuCi0gICAgICAgICAqLwotICAgICAgICBFbGZfQWRkciBzZWdfcGFnZV9zdGFydCA9IFBBR0VfU1RBUlQocGhkci0+cF92YWRkcikgKyBsb2FkX2JpYXM7Ci0gICAgICAgIEVsZl9BZGRyIHNlZ19wYWdlX2VuZCAgID0gUEFHRV9FTkQocGhkci0+cF92YWRkciArIHBoZHItPnBfbWVtc3opICsgbG9hZF9iaWFzOwotCi0gICAgICAgIGludCByZXQgPSBtcHJvdGVjdCgodm9pZCopc2VnX3BhZ2Vfc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdfcGFnZV9lbmQgLSBzZWdfcGFnZV9zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RfZmxhZ3MpOwotICAgICAgICBpZiAocmV0IDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CisgIGZvciAocGhkciA9IHBoZHJfdGFibGU7IHBoZHIgPCBwaGRyX2xpbWl0OyBwaGRyKyspIHsKKyAgICBpZiAocGhkci0+cF90eXBlICE9IFBUX0dOVV9SRUxSTykgeworICAgICAgY29udGludWU7CiAgICAgfQotICAgIHJldHVybiAwOworCisgICAgLy8gVHJpY2t5OiB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgcmVscm8gc2VnbWVudCBkb2VzIG5vdCBzdGFydAorICAgIC8vIG9yIGVuZCBhdCBwYWdlIGJvdW5kYXJpZXM/IFdlJ3JlIGdvaW5nIHRvIGJlIG92ZXItcHJvdGVjdGl2ZQorICAgIC8vIGhlcmUgYW5kIHB1dCBldmVyeSBwYWdlIHRvdWNoZWQgYnkgdGhlIHNlZ21lbnQgYXMgcmVhZC1vbmx5LgorCisgICAgLy8gVGhpcyBzZWVtcyB0byBtYXRjaCBJYW4gTGFuY2UgVGF5bG9yJ3MgZGVzY3JpcHRpb24gb2YgdGhlCisgICAgLy8gZmVhdHVyZSBhdCBodHRwOi8vd3d3LmFpcnMuY29tL2Jsb2cvYXJjaGl2ZXMvMTg5LgorCisgICAgLy8gICAgRXh0cmFjdDoKKyAgICAvLyAgICAgICBOb3RlIHRoYXQgdGhlIGN1cnJlbnQgZHluYW1pYyBsaW5rZXIgY29kZSB3aWxsIG9ubHkgd29yaworICAgIC8vICAgICAgIGNvcnJlY3RseSBpZiB0aGUgUFRfR05VX1JFTFJPIHNlZ21lbnQgc3RhcnRzIG9uIGEgcGFnZQorICAgIC8vICAgICAgIGJvdW5kYXJ5LiBUaGlzIGlzIGJlY2F1c2UgdGhlIGR5bmFtaWMgbGlua2VyIHJvdW5kcyB0aGUKKyAgICAvLyAgICAgICBwX3ZhZGRyIGZpZWxkIGRvd24gdG8gdGhlIHByZXZpb3VzIHBhZ2UgYm91bmRhcnkuIElmCisgICAgLy8gICAgICAgdGhlcmUgaXMgYW55dGhpbmcgb24gdGhlIHBhZ2Ugd2hpY2ggc2hvdWxkIG5vdCBiZSByZWFkLW9ubHksCisgICAgLy8gICAgICAgdGhlIHByb2dyYW0gaXMgbGlrZWx5IHRvIGZhaWwgYXQgcnVudGltZS4gU28gaW4gZWZmZWN0IHRoZQorICAgIC8vICAgICAgIGxpbmtlciBtdXN0IG9ubHkgZW1pdCBhIFBUX0dOVV9SRUxSTyBzZWdtZW50IGlmIGl0IGVuc3VyZXMKKyAgICAvLyAgICAgICB0aGF0IGl0IHN0YXJ0cyBvbiBhIHBhZ2UgYm91bmRhcnkuCisgICAgRWxmVyhBZGRyKSBzZWdfcGFnZV9zdGFydCA9IFBBR0VfU1RBUlQocGhkci0+cF92YWRkcikgKyBsb2FkX2JpYXM7CisgICAgRWxmVyhBZGRyKSBzZWdfcGFnZV9lbmQgICA9IFBBR0VfRU5EKHBoZHItPnBfdmFkZHIgKyBwaGRyLT5wX21lbXN6KSArIGxvYWRfYmlhczsKKworICAgIGludCByZXQgPSBtcHJvdGVjdChyZWludGVycHJldF9jYXN0PHZvaWQqPihzZWdfcGFnZV9zdGFydCksCisgICAgICAgICAgICAgICAgICAgICAgIHNlZ19wYWdlX2VuZCAtIHNlZ19wYWdlX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICBwcm90X2ZsYWdzKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKIH0KIAogLyogQXBwbHkgR05VIHJlbHJvIHByb3RlY3Rpb24gaWYgc3BlY2lmaWVkIGJ5IHRoZSBwcm9ncmFtIGhlYWRlci4gVGhpcyB3aWxsCkBAIC00OTYsMTAgKzUxNiwxNDMgQEAKICAqIFJldHVybjoKICAqICAgMCBvbiBlcnJvciwgLTEgb24gZmFpbHVyZSAoZXJyb3IgY29kZSBpbiBlcnJubykuCiAgKi8KLWludCBwaGRyX3RhYmxlX3Byb3RlY3RfZ251X3JlbHJvKGNvbnN0IEVsZl9QaGRyKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwgRWxmX0FkZHIgbG9hZF9iaWFzKSB7Ci0gICAgcmV0dXJuIF9waGRyX3RhYmxlX3NldF9nbnVfcmVscm9fcHJvdChwaGRyX3RhYmxlLCBwaGRyX2NvdW50LCBsb2FkX2JpYXMsIFBST1RfUkVBRCk7CitpbnQgcGhkcl90YWJsZV9wcm90ZWN0X2dudV9yZWxybyhjb25zdCBFbGZXKFBoZHIpKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwgRWxmVyhBZGRyKSBsb2FkX2JpYXMpIHsKKyAgcmV0dXJuIF9waGRyX3RhYmxlX3NldF9nbnVfcmVscm9fcHJvdChwaGRyX3RhYmxlLCBwaGRyX2NvdW50LCBsb2FkX2JpYXMsIFBST1RfUkVBRCk7CiB9CiAKKy8qIFNlcmlhbGl6ZSB0aGUgR05VIHJlbHJvIHNlZ21lbnRzIHRvIHRoZSBnaXZlbiBmaWxlIGRlc2NyaXB0b3IuIFRoaXMgY2FuIGJlCisgKiBwZXJmb3JtZWQgYWZ0ZXIgcmVsb2NhdGlvbnMgdG8gYWxsb3cgYW5vdGhlciBwcm9jZXNzIHRvIGxhdGVyIHNoYXJlIHRoZQorICogcmVsb2NhdGVkIHNlZ21lbnQsIGlmIGl0IHdhcyBsb2FkZWQgYXQgdGhlIHNhbWUgYWRkcmVzcy4KKyAqCisgKiBJbnB1dDoKKyAqICAgcGhkcl90YWJsZSAgLT4gcHJvZ3JhbSBoZWFkZXIgdGFibGUKKyAqICAgcGhkcl9jb3VudCAgLT4gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGFibGVzCisgKiAgIGxvYWRfYmlhcyAgIC0+IGxvYWQgYmlhcworICogICBmZCAgICAgICAgICAtPiB3cml0YWJsZSBmaWxlIGRlc2NyaXB0b3IgdG8gdXNlCisgKiBSZXR1cm46CisgKiAgIDAgb24gZXJyb3IsIC0xIG9uIGZhaWx1cmUgKGVycm9yIGNvZGUgaW4gZXJybm8pLgorICovCitpbnQgcGhkcl90YWJsZV9zZXJpYWxpemVfZ251X3JlbHJvKGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LCBFbGZXKEFkZHIpIGxvYWRfYmlhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZkKSB7CisgIGNvbnN0IEVsZlcoUGhkcikqIHBoZHIgPSBwaGRyX3RhYmxlOworICBjb25zdCBFbGZXKFBoZHIpKiBwaGRyX2xpbWl0ID0gcGhkciArIHBoZHJfY291bnQ7CisgIHNzaXplX3QgZmlsZV9vZmZzZXQgPSAwOworCisgIGZvciAocGhkciA9IHBoZHJfdGFibGU7IHBoZHIgPCBwaGRyX2xpbWl0OyBwaGRyKyspIHsKKyAgICBpZiAocGhkci0+cF90eXBlICE9IFBUX0dOVV9SRUxSTykgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgRWxmVyhBZGRyKSBzZWdfcGFnZV9zdGFydCA9IFBBR0VfU1RBUlQocGhkci0+cF92YWRkcikgKyBsb2FkX2JpYXM7CisgICAgRWxmVyhBZGRyKSBzZWdfcGFnZV9lbmQgICA9IFBBR0VfRU5EKHBoZHItPnBfdmFkZHIgKyBwaGRyLT5wX21lbXN6KSArIGxvYWRfYmlhczsKKyAgICBzc2l6ZV90IHNpemUgPSBzZWdfcGFnZV9lbmQgLSBzZWdfcGFnZV9zdGFydDsKKworICAgIHNzaXplX3Qgd3JpdHRlbiA9IFRFTVBfRkFJTFVSRV9SRVRSWSh3cml0ZShmZCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc2VnX3BhZ2Vfc3RhcnQpLCBzaXplKSk7CisgICAgaWYgKHdyaXR0ZW4gIT0gc2l6ZSkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICB2b2lkKiBtYXAgPSBtbWFwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNlZ19wYWdlX3N0YXJ0KSwgc2l6ZSwgUFJPVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgTUFQX1BSSVZBVEV8TUFQX0ZJWEVELCBmZCwgZmlsZV9vZmZzZXQpOworICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBmaWxlX29mZnNldCArPSBzaXplOworICB9CisgIHJldHVybiAwOworfQorCisvKiBXaGVyZSBwb3NzaWJsZSwgcmVwbGFjZSB0aGUgR05VIHJlbHJvIHNlZ21lbnRzIHdpdGggbWFwcGluZ3Mgb2YgdGhlIGdpdmVuCisgKiBmaWxlIGRlc2NyaXB0b3IuIFRoaXMgY2FuIGJlIHBlcmZvcm1lZCBhZnRlciByZWxvY2F0aW9ucyB0byBhbGxvdyBhIGZpbGUKKyAqIHByZXZpb3VzbHkgY3JlYXRlZCBieSBwaGRyX3RhYmxlX3NlcmlhbGl6ZV9nbnVfcmVscm8gaW4gYW5vdGhlciBwcm9jZXNzIHRvCisgKiByZXBsYWNlIHRoZSBkaXJ0eSByZWxvY2F0ZWQgcGFnZXMsIHNhdmluZyBtZW1vcnksIGlmIGl0IHdhcyBsb2FkZWQgYXQgdGhlCisgKiBzYW1lIGFkZHJlc3MuIFdlIGhhdmUgdG8gY29tcGFyZSB0aGUgZGF0YSBiZWZvcmUgd2UgbWFwIG92ZXIgaXQsIHNpbmNlIHNvbWUKKyAqIHBhcnRzIG9mIHRoZSByZWxybyBzZWdtZW50IG1heSBub3QgYmUgaWRlbnRpY2FsIGR1ZSB0byBvdGhlciBsaWJyYXJpZXMgaW4KKyAqIHRoZSBwcm9jZXNzIGJlaW5nIGxvYWRlZCBhdCBkaWZmZXJlbnQgYWRkcmVzc2VzLgorICoKKyAqIElucHV0OgorICogICBwaGRyX3RhYmxlICAtPiBwcm9ncmFtIGhlYWRlciB0YWJsZQorICogICBwaGRyX2NvdW50ICAtPiBudW1iZXIgb2YgZW50cmllcyBpbiB0YWJsZXMKKyAqICAgbG9hZF9iaWFzICAgLT4gbG9hZCBiaWFzCisgKiAgIGZkICAgICAgICAgIC0+IHJlYWRhYmxlIGZpbGUgZGVzY3JpcHRvciB0byB1c2UKKyAqIFJldHVybjoKKyAqICAgMCBvbiBlcnJvciwgLTEgb24gZmFpbHVyZSAoZXJyb3IgY29kZSBpbiBlcnJubykuCisgKi8KK2ludCBwaGRyX3RhYmxlX21hcF9nbnVfcmVscm8oY29uc3QgRWxmVyhQaGRyKSogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsIEVsZlcoQWRkcikgbG9hZF9iaWFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmQpIHsKKyAgLy8gTWFwIHRoZSBmaWxlIGF0IGEgdGVtcG9yYXJ5IGxvY2F0aW9uIHNvIHdlIGNhbiBjb21wYXJlIGl0cyBjb250ZW50cy4KKyAgc3RydWN0IHN0YXQgZmlsZV9zdGF0OworICBpZiAoVEVNUF9GQUlMVVJFX1JFVFJZKGZzdGF0KGZkLCAmZmlsZV9zdGF0KSkgIT0gMCkgeworICAgIHJldHVybiAtMTsKKyAgfQorICBvZmZfdCBmaWxlX3NpemUgPSBmaWxlX3N0YXQuc3Rfc2l6ZTsKKyAgdm9pZCogdGVtcF9tYXBwaW5nID0gTlVMTDsKKyAgaWYgKGZpbGVfc2l6ZSA+IDApIHsKKyAgICB0ZW1wX21hcHBpbmcgPSBtbWFwKE5VTEwsIGZpbGVfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworICAgIGlmICh0ZW1wX21hcHBpbmcgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorICBzaXplX3QgZmlsZV9vZmZzZXQgPSAwOworCisgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgcmVscm8gc2VnbWVudHMgYW5kIGNvbXBhcmUvcmVtYXAgdGhlIHBhZ2VzLgorICBjb25zdCBFbGZXKFBoZHIpKiBwaGRyID0gcGhkcl90YWJsZTsKKyAgY29uc3QgRWxmVyhQaGRyKSogcGhkcl9saW1pdCA9IHBoZHIgKyBwaGRyX2NvdW50OworCisgIGZvciAocGhkciA9IHBoZHJfdGFibGU7IHBoZHIgPCBwaGRyX2xpbWl0OyBwaGRyKyspIHsKKyAgICBpZiAocGhkci0+cF90eXBlICE9IFBUX0dOVV9SRUxSTykgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgRWxmVyhBZGRyKSBzZWdfcGFnZV9zdGFydCA9IFBBR0VfU1RBUlQocGhkci0+cF92YWRkcikgKyBsb2FkX2JpYXM7CisgICAgRWxmVyhBZGRyKSBzZWdfcGFnZV9lbmQgICA9IFBBR0VfRU5EKHBoZHItPnBfdmFkZHIgKyBwaGRyLT5wX21lbXN6KSArIGxvYWRfYmlhczsKKworICAgIGNoYXIqIGZpbGVfYmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPih0ZW1wX21hcHBpbmcpICsgZmlsZV9vZmZzZXQ7CisgICAgY2hhciogbWVtX2Jhc2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzZWdfcGFnZV9zdGFydCk7CisgICAgc2l6ZV90IG1hdGNoX29mZnNldCA9IDA7CisgICAgc2l6ZV90IHNpemUgPSBzZWdfcGFnZV9lbmQgLSBzZWdfcGFnZV9zdGFydDsKKworICAgIGlmIChmaWxlX3NpemUgLSBmaWxlX29mZnNldCA8IHNpemUpIHsKKyAgICAgIC8vIEZpbGUgaXMgdG9vIHNob3J0IHRvIGNvbXBhcmUgdG8gdGhpcyBzZWdtZW50LiBUaGUgY29udGVudHMgYXJlIGxpa2VseQorICAgICAgLy8gZGlmZmVyZW50IGFzIHdlbGwgKGl0J3MgcHJvYmFibHkgZm9yIGEgZGlmZmVyZW50IGxpYnJhcnkgdmVyc2lvbikgc28KKyAgICAgIC8vIGp1c3QgZG9uJ3QgYm90aGVyIGNoZWNraW5nLgorICAgICAgYnJlYWs7CisgICAgfQorCisgICAgd2hpbGUgKG1hdGNoX29mZnNldCA8IHNpemUpIHsKKyAgICAgIC8vIFNraXAgb3ZlciBkaXNzaW1pbGFyIHBhZ2VzLgorICAgICAgd2hpbGUgKG1hdGNoX29mZnNldCA8IHNpemUgJiYKKyAgICAgICAgICAgICBtZW1jbXAobWVtX2Jhc2UgKyBtYXRjaF9vZmZzZXQsIGZpbGVfYmFzZSArIG1hdGNoX29mZnNldCwgUEFHRV9TSVpFKSAhPSAwKSB7CisgICAgICAgIG1hdGNoX29mZnNldCArPSBQQUdFX1NJWkU7CisgICAgICB9CisKKyAgICAgIC8vIENvdW50IHNpbWlsYXIgcGFnZXMuCisgICAgICBzaXplX3QgbWlzbWF0Y2hfb2Zmc2V0ID0gbWF0Y2hfb2Zmc2V0OworICAgICAgd2hpbGUgKG1pc21hdGNoX29mZnNldCA8IHNpemUgJiYKKyAgICAgICAgICAgICBtZW1jbXAobWVtX2Jhc2UgKyBtaXNtYXRjaF9vZmZzZXQsIGZpbGVfYmFzZSArIG1pc21hdGNoX29mZnNldCwgUEFHRV9TSVpFKSA9PSAwKSB7CisgICAgICAgIG1pc21hdGNoX29mZnNldCArPSBQQUdFX1NJWkU7CisgICAgICB9CisKKyAgICAgIC8vIE1hcCBvdmVyIHNpbWlsYXIgcGFnZXMuCisgICAgICBpZiAobWlzbWF0Y2hfb2Zmc2V0ID4gbWF0Y2hfb2Zmc2V0KSB7CisgICAgICAgIHZvaWQqIG1hcCA9IG1tYXAobWVtX2Jhc2UgKyBtYXRjaF9vZmZzZXQsIG1pc21hdGNoX29mZnNldCAtIG1hdGNoX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQsIE1BUF9QUklWQVRFfE1BUF9GSVhFRCwgZmQsIG1hdGNoX29mZnNldCk7CisgICAgICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICAgIG11bm1hcCh0ZW1wX21hcHBpbmcsIGZpbGVfc2l6ZSk7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIG1hdGNoX29mZnNldCA9IG1pc21hdGNoX29mZnNldDsKKyAgICB9CisKKyAgICAvLyBBZGQgdG8gdGhlIGJhc2UgZmlsZSBvZmZzZXQgaW4gY2FzZSB0aGVyZSBhcmUgbXVsdGlwbGUgcmVscm8gc2VnbWVudHMuCisgICAgZmlsZV9vZmZzZXQgKz0gc2l6ZTsKKyAgfQorICBtdW5tYXAodGVtcF9tYXBwaW5nLCBmaWxlX3NpemUpOworICByZXR1cm4gMDsKK30KKworCiAjaWYgZGVmaW5lZChfX2FybV9fKQogCiAjICBpZm5kZWYgUFRfQVJNX0VYSURYCkBAIC01MTksMjMgKzY3MiwyNCBAQAogICogUmV0dXJuOgogICogICAwIG9uIGVycm9yLCAtMSBvbiBmYWlsdXJlIChfbm9fIGVycm9yIGNvZGUgaW4gZXJybm8pCiAgKi8KLWludCBwaGRyX3RhYmxlX2dldF9hcm1fZXhpZHgoY29uc3QgRWxmX1BoZHIqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZfQWRkciBsb2FkX2JpYXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZl9BZGRyKiogYXJtX2V4aWR4LCB1bnNpZ25lZCogYXJtX2V4aWR4X2NvdW50KSB7Ci0gICAgY29uc3QgRWxmX1BoZHIqIHBoZHIgPSBwaGRyX3RhYmxlOwotICAgIGNvbnN0IEVsZl9QaGRyKiBwaGRyX2xpbWl0ID0gcGhkciArIHBoZHJfY291bnQ7CitpbnQgcGhkcl90YWJsZV9nZXRfYXJtX2V4aWR4KGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZXKEFkZHIpIGxvYWRfYmlhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmVyhBZGRyKSoqIGFybV9leGlkeCwgdW5zaWduZWQqIGFybV9leGlkeF9jb3VudCkgeworICBjb25zdCBFbGZXKFBoZHIpKiBwaGRyID0gcGhkcl90YWJsZTsKKyAgY29uc3QgRWxmVyhQaGRyKSogcGhkcl9saW1pdCA9IHBoZHIgKyBwaGRyX2NvdW50OwogCi0gICAgZm9yIChwaGRyID0gcGhkcl90YWJsZTsgcGhkciA8IHBoZHJfbGltaXQ7IHBoZHIrKykgewotICAgICAgICBpZiAocGhkci0+cF90eXBlICE9IFBUX0FSTV9FWElEWCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICphcm1fZXhpZHggPSAoRWxmX0FkZHIqKShsb2FkX2JpYXMgKyBwaGRyLT5wX3ZhZGRyKTsKLSAgICAgICAgKmFybV9leGlkeF9jb3VudCA9ICh1bnNpZ25lZCkocGhkci0+cF9tZW1zeiAvIDgpOwotICAgICAgICByZXR1cm4gMDsKKyAgZm9yIChwaGRyID0gcGhkcl90YWJsZTsgcGhkciA8IHBoZHJfbGltaXQ7IHBoZHIrKykgeworICAgIGlmIChwaGRyLT5wX3R5cGUgIT0gUFRfQVJNX0VYSURYKSB7CisgICAgICBjb250aW51ZTsKICAgICB9Ci0gICAgKmFybV9leGlkeCA9IE5VTEw7Ci0gICAgKmFybV9leGlkeF9jb3VudCA9IDA7Ci0gICAgcmV0dXJuIC0xOworCisgICAgKmFybV9leGlkeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KGxvYWRfYmlhcyArIHBoZHItPnBfdmFkZHIpOworICAgICphcm1fZXhpZHhfY291bnQgPSAodW5zaWduZWQpKHBoZHItPnBfbWVtc3ogLyA4KTsKKyAgICByZXR1cm4gMDsKKyAgfQorICAqYXJtX2V4aWR4ID0gTlVMTDsKKyAgKmFybV9leGlkeF9jb3VudCA9IDA7CisgIHJldHVybiAtMTsKIH0KICNlbmRpZgogCkBAIC01NTMsNDAgKzcwNyw0MCBAQAogICogUmV0dXJuOgogICogICB2b2lkCiAgKi8KLXZvaWQgcGhkcl90YWJsZV9nZXRfZHluYW1pY19zZWN0aW9uKGNvbnN0IEVsZl9QaGRyKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZl9BZGRyIGxvYWRfYmlhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZl9EeW4qKiBkeW5hbWljLCBzaXplX3QqIGR5bmFtaWNfY291bnQsIEVsZl9Xb3JkKiBkeW5hbWljX2ZsYWdzKSB7Ci0gICAgY29uc3QgRWxmX1BoZHIqIHBoZHIgPSBwaGRyX3RhYmxlOwotICAgIGNvbnN0IEVsZl9QaGRyKiBwaGRyX2xpbWl0ID0gcGhkciArIHBoZHJfY291bnQ7Cit2b2lkIHBoZHJfdGFibGVfZ2V0X2R5bmFtaWNfc2VjdGlvbihjb25zdCBFbGZXKFBoZHIpKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZlcoQWRkcikgbG9hZF9iaWFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmVyhEeW4pKiogZHluYW1pYywgc2l6ZV90KiBkeW5hbWljX2NvdW50LCBFbGZXKFdvcmQpKiBkeW5hbWljX2ZsYWdzKSB7CisgIGNvbnN0IEVsZlcoUGhkcikqIHBoZHIgPSBwaGRyX3RhYmxlOworICBjb25zdCBFbGZXKFBoZHIpKiBwaGRyX2xpbWl0ID0gcGhkciArIHBoZHJfY291bnQ7CiAKLSAgICBmb3IgKHBoZHIgPSBwaGRyX3RhYmxlOyBwaGRyIDwgcGhkcl9saW1pdDsgcGhkcisrKSB7Ci0gICAgICAgIGlmIChwaGRyLT5wX3R5cGUgIT0gUFRfRFlOQU1JQykgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAqZHluYW1pYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0R5bio+KGxvYWRfYmlhcyArIHBoZHItPnBfdmFkZHIpOwotICAgICAgICBpZiAoZHluYW1pY19jb3VudCkgewotICAgICAgICAgICAgKmR5bmFtaWNfY291bnQgPSAodW5zaWduZWQpKHBoZHItPnBfbWVtc3ogLyA4KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZHluYW1pY19mbGFncykgewotICAgICAgICAgICAgKmR5bmFtaWNfZmxhZ3MgPSBwaGRyLT5wX2ZsYWdzOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKKyAgZm9yIChwaGRyID0gcGhkcl90YWJsZTsgcGhkciA8IHBoZHJfbGltaXQ7IHBoZHIrKykgeworICAgIGlmIChwaGRyLT5wX3R5cGUgIT0gUFRfRFlOQU1JQykgeworICAgICAgY29udGludWU7CiAgICAgfQotICAgICpkeW5hbWljID0gTlVMTDsKKworICAgICpkeW5hbWljID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKER5bikqPihsb2FkX2JpYXMgKyBwaGRyLT5wX3ZhZGRyKTsKICAgICBpZiAoZHluYW1pY19jb3VudCkgewotICAgICAgICAqZHluYW1pY19jb3VudCA9IDA7CisgICAgICAqZHluYW1pY19jb3VudCA9ICh1bnNpZ25lZCkocGhkci0+cF9tZW1zeiAvIDgpOwogICAgIH0KKyAgICBpZiAoZHluYW1pY19mbGFncykgeworICAgICAgKmR5bmFtaWNfZmxhZ3MgPSBwaGRyLT5wX2ZsYWdzOworICAgIH0KKyAgICByZXR1cm47CisgIH0KKyAgKmR5bmFtaWMgPSBOVUxMOworICBpZiAoZHluYW1pY19jb3VudCkgeworICAgICpkeW5hbWljX2NvdW50ID0gMDsKKyAgfQogfQogCiAvLyBSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwcm9ncmFtIGhlYWRlciB0YWJsZSBhcyBpdCBhcHBlYXJzIGluIHRoZSBsb2FkZWQKIC8vIHNlZ21lbnRzIGluIG1lbW9yeS4gVGhpcyBpcyBpbiBjb250cmFzdCB3aXRoICdwaGRyX3RhYmxlXycgd2hpY2gKIC8vIGlzIHRlbXBvcmFyeSBhbmQgd2lsbCBiZSByZWxlYXNlZCBiZWZvcmUgdGhlIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgogYm9vbCBFbGZSZWFkZXI6OkZpbmRQaGRyKCkgewotICBjb25zdCBFbGZfUGhkciogcGhkcl9saW1pdCA9IHBoZHJfdGFibGVfICsgcGhkcl9udW1fOworICBjb25zdCBFbGZXKFBoZHIpKiBwaGRyX2xpbWl0ID0gcGhkcl90YWJsZV8gKyBwaGRyX251bV87CiAKICAgLy8gSWYgdGhlcmUgaXMgYSBQVF9QSERSLCB1c2UgaXQgZGlyZWN0bHkuCi0gIGZvciAoY29uc3QgRWxmX1BoZHIqIHBoZHIgPSBwaGRyX3RhYmxlXzsgcGhkciA8IHBoZHJfbGltaXQ7ICsrcGhkcikgeworICBmb3IgKGNvbnN0IEVsZlcoUGhkcikqIHBoZHIgPSBwaGRyX3RhYmxlXzsgcGhkciA8IHBoZHJfbGltaXQ7ICsrcGhkcikgewogICAgIGlmIChwaGRyLT5wX3R5cGUgPT0gUFRfUEhEUikgewogICAgICAgcmV0dXJuIENoZWNrUGhkcihsb2FkX2JpYXNfICsgcGhkci0+cF92YWRkcik7CiAgICAgfQpAQCAtNTk1LDEzICs3NDksMTMgQEAKICAgLy8gT3RoZXJ3aXNlLCBjaGVjayB0aGUgZmlyc3QgbG9hZGFibGUgc2VnbWVudC4gSWYgaXRzIGZpbGUgb2Zmc2V0CiAgIC8vIGlzIDAsIGl0IHN0YXJ0cyB3aXRoIHRoZSBFTEYgaGVhZGVyLCBhbmQgd2UgY2FuIHRyaXZpYWxseSBmaW5kIHRoZQogICAvLyBsb2FkZWQgcHJvZ3JhbSBoZWFkZXIgZnJvbSBpdC4KLSAgZm9yIChjb25zdCBFbGZfUGhkciogcGhkciA9IHBoZHJfdGFibGVfOyBwaGRyIDwgcGhkcl9saW1pdDsgKytwaGRyKSB7CisgIGZvciAoY29uc3QgRWxmVyhQaGRyKSogcGhkciA9IHBoZHJfdGFibGVfOyBwaGRyIDwgcGhkcl9saW1pdDsgKytwaGRyKSB7CiAgICAgaWYgKHBoZHItPnBfdHlwZSA9PSBQVF9MT0FEKSB7CiAgICAgICBpZiAocGhkci0+cF9vZmZzZXQgPT0gMCkgewotICAgICAgICBFbGZfQWRkciAgZWxmX2FkZHIgPSBsb2FkX2JpYXNfICsgcGhkci0+cF92YWRkcjsKLSAgICAgICAgY29uc3QgRWxmX0VoZHIqIGVoZHIgPSAoY29uc3QgRWxmX0VoZHIqKSh2b2lkKillbGZfYWRkcjsKLSAgICAgICAgRWxmX0FkZHIgIG9mZnNldCA9IGVoZHItPmVfcGhvZmY7Ci0gICAgICAgIHJldHVybiBDaGVja1BoZHIoKEVsZl9BZGRyKWVoZHIgKyBvZmZzZXQpOworICAgICAgICBFbGZXKEFkZHIpICBlbGZfYWRkciA9IGxvYWRfYmlhc18gKyBwaGRyLT5wX3ZhZGRyOworICAgICAgICBjb25zdCBFbGZXKEVoZHIpKiBlaGRyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBFbGZXKEVoZHIpKj4oZWxmX2FkZHIpOworICAgICAgICBFbGZXKEFkZHIpICBvZmZzZXQgPSBlaGRyLT5lX3Bob2ZmOworICAgICAgICByZXR1cm4gQ2hlY2tQaGRyKChFbGZXKEFkZHIpKWVoZHIgKyBvZmZzZXQpOwogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNjE0LDE3ICs3NjgsMTcgQEAKIC8vIEVuc3VyZXMgdGhhdCBvdXIgcHJvZ3JhbSBoZWFkZXIgaXMgYWN0dWFsbHkgd2l0aGluIGEgbG9hZGFibGUKIC8vIHNlZ21lbnQuIFRoaXMgc2hvdWxkIGhlbHAgY2F0Y2ggYmFkbHktZm9ybWVkIEVMRiBmaWxlcyB0aGF0CiAvLyB3b3VsZCBjYXVzZSB0aGUgbGlua2VyIHRvIGNyYXNoIGxhdGVyIHdoZW4gdHJ5aW5nIHRvIGFjY2VzcyBpdC4KLWJvb2wgRWxmUmVhZGVyOjpDaGVja1BoZHIoRWxmX0FkZHIgbG9hZGVkKSB7Ci0gIGNvbnN0IEVsZl9QaGRyKiBwaGRyX2xpbWl0ID0gcGhkcl90YWJsZV8gKyBwaGRyX251bV87Ci0gIEVsZl9BZGRyIGxvYWRlZF9lbmQgPSBsb2FkZWQgKyAocGhkcl9udW1fICogc2l6ZW9mKEVsZl9QaGRyKSk7Ci0gIGZvciAoRWxmX1BoZHIqIHBoZHIgPSBwaGRyX3RhYmxlXzsgcGhkciA8IHBoZHJfbGltaXQ7ICsrcGhkcikgeworYm9vbCBFbGZSZWFkZXI6OkNoZWNrUGhkcihFbGZXKEFkZHIpIGxvYWRlZCkgeworICBjb25zdCBFbGZXKFBoZHIpKiBwaGRyX2xpbWl0ID0gcGhkcl90YWJsZV8gKyBwaGRyX251bV87CisgIEVsZlcoQWRkcikgbG9hZGVkX2VuZCA9IGxvYWRlZCArIChwaGRyX251bV8gKiBzaXplb2YoRWxmVyhQaGRyKSkpOworICBmb3IgKEVsZlcoUGhkcikqIHBoZHIgPSBwaGRyX3RhYmxlXzsgcGhkciA8IHBoZHJfbGltaXQ7ICsrcGhkcikgewogICAgIGlmIChwaGRyLT5wX3R5cGUgIT0gUFRfTE9BRCkgewogICAgICAgY29udGludWU7CiAgICAgfQotICAgIEVsZl9BZGRyIHNlZ19zdGFydCA9IHBoZHItPnBfdmFkZHIgKyBsb2FkX2JpYXNfOwotICAgIEVsZl9BZGRyIHNlZ19lbmQgPSBwaGRyLT5wX2ZpbGVzeiArIHNlZ19zdGFydDsKKyAgICBFbGZXKEFkZHIpIHNlZ19zdGFydCA9IHBoZHItPnBfdmFkZHIgKyBsb2FkX2JpYXNfOworICAgIEVsZlcoQWRkcikgc2VnX2VuZCA9IHBoZHItPnBfZmlsZXN6ICsgc2VnX3N0YXJ0OwogICAgIGlmIChzZWdfc3RhcnQgPD0gbG9hZGVkICYmIGxvYWRlZF9lbmQgPD0gc2VnX2VuZCkgewotICAgICAgbG9hZGVkX3BoZHJfID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBFbGZfUGhkcio+KGxvYWRlZCk7CisgICAgICBsb2FkZWRfcGhkcl8gPSByZWludGVycHJldF9jYXN0PGNvbnN0IEVsZlcoUGhkcikqPihsb2FkZWQpOwogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9saW5rZXIvbGlua2VyX3BoZHIuaCBiL2xpbmtlci9saW5rZXJfcGhkci5oCmluZGV4IGRiMTVhYzkuLjYxMWYxYTcgMTAwNjQ0Ci0tLSBhL2xpbmtlci9saW5rZXJfcGhkci5oCisrKyBiL2xpbmtlci9saW5rZXJfcGhkci5oCkBAIC00Miw2MSArNDIsNjYgQEAKICAgRWxmUmVhZGVyKGNvbnN0IGNoYXIqIG5hbWUsIGludCBmZCk7CiAgIH5FbGZSZWFkZXIoKTsKIAotICBib29sIExvYWQoKTsKKyAgYm9vbCBMb2FkKGNvbnN0IGFuZHJvaWRfZGxleHRpbmZvKiBleHRpbmZvKTsKIAogICBzaXplX3QgcGhkcl9jb3VudCgpIHsgcmV0dXJuIHBoZHJfbnVtXzsgfQotICBFbGZfQWRkciBsb2FkX3N0YXJ0KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcj4obG9hZF9zdGFydF8pOyB9CisgIEVsZlcoQWRkcikgbG9hZF9zdGFydCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKT4obG9hZF9zdGFydF8pOyB9CiAgIHNpemVfdCBsb2FkX3NpemUoKSB7IHJldHVybiBsb2FkX3NpemVfOyB9Ci0gIEVsZl9BZGRyIGxvYWRfYmlhcygpIHsgcmV0dXJuIGxvYWRfYmlhc187IH0KLSAgY29uc3QgRWxmX1BoZHIqIGxvYWRlZF9waGRyKCkgeyByZXR1cm4gbG9hZGVkX3BoZHJfOyB9CisgIEVsZlcoQWRkcikgbG9hZF9iaWFzKCkgeyByZXR1cm4gbG9hZF9iaWFzXzsgfQorICBjb25zdCBFbGZXKFBoZHIpKiBsb2FkZWRfcGhkcigpIHsgcmV0dXJuIGxvYWRlZF9waGRyXzsgfQogCiAgcHJpdmF0ZToKICAgYm9vbCBSZWFkRWxmSGVhZGVyKCk7CiAgIGJvb2wgVmVyaWZ5RWxmSGVhZGVyKCk7CiAgIGJvb2wgUmVhZFByb2dyYW1IZWFkZXIoKTsKLSAgYm9vbCBSZXNlcnZlQWRkcmVzc1NwYWNlKCk7CisgIGJvb2wgUmVzZXJ2ZUFkZHJlc3NTcGFjZShjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbyk7CiAgIGJvb2wgTG9hZFNlZ21lbnRzKCk7CiAgIGJvb2wgRmluZFBoZHIoKTsKLSAgYm9vbCBDaGVja1BoZHIoRWxmX0FkZHIpOworICBib29sIENoZWNrUGhkcihFbGZXKEFkZHIpKTsKIAogICBjb25zdCBjaGFyKiBuYW1lXzsKICAgaW50IGZkXzsKIAotICBFbGZfRWhkciBoZWFkZXJfOworICBFbGZXKEVoZHIpIGhlYWRlcl87CiAgIHNpemVfdCBwaGRyX251bV87CiAKICAgdm9pZCogcGhkcl9tbWFwXzsKLSAgRWxmX1BoZHIqIHBoZHJfdGFibGVfOwotICBFbGZfQWRkciBwaGRyX3NpemVfOworICBFbGZXKFBoZHIpKiBwaGRyX3RhYmxlXzsKKyAgRWxmVyhBZGRyKSBwaGRyX3NpemVfOwogCiAgIC8vIEZpcnN0IHBhZ2Ugb2YgcmVzZXJ2ZWQgYWRkcmVzcyBzcGFjZS4KICAgdm9pZCogbG9hZF9zdGFydF87CiAgIC8vIFNpemUgaW4gYnl0ZXMgb2YgcmVzZXJ2ZWQgYWRkcmVzcyBzcGFjZS4KICAgc2l6ZV90IGxvYWRfc2l6ZV87CiAgIC8vIExvYWQgYmlhcy4KLSAgRWxmX0FkZHIgbG9hZF9iaWFzXzsKKyAgRWxmVyhBZGRyKSBsb2FkX2JpYXNfOwogCiAgIC8vIExvYWRlZCBwaGRyLgotICBjb25zdCBFbGZfUGhkciogbG9hZGVkX3BoZHJfOworICBjb25zdCBFbGZXKFBoZHIpKiBsb2FkZWRfcGhkcl87CiB9OwogCi1zaXplX3QgcGhkcl90YWJsZV9nZXRfbG9hZF9zaXplKGNvbnN0IEVsZl9QaGRyKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmX0FkZHIqIG1pbl92YWRkciA9IE5VTEwsIEVsZl9BZGRyKiBtYXhfdmFkZHIgPSBOVUxMKTsKK3NpemVfdCBwaGRyX3RhYmxlX2dldF9sb2FkX3NpemUoY29uc3QgRWxmVyhQaGRyKSogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZlcoQWRkcikqIG1pbl92YWRkciA9IE5VTEwsIEVsZlcoQWRkcikqIG1heF92YWRkciA9IE5VTEwpOwogCi1pbnQgcGhkcl90YWJsZV9wcm90ZWN0X3NlZ21lbnRzKGNvbnN0IEVsZl9QaGRyKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwgRWxmX0FkZHIgbG9hZF9iaWFzKTsKK2ludCBwaGRyX3RhYmxlX3Byb3RlY3Rfc2VnbWVudHMoY29uc3QgRWxmVyhQaGRyKSogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsIEVsZlcoQWRkcikgbG9hZF9iaWFzKTsKIAotaW50IHBoZHJfdGFibGVfdW5wcm90ZWN0X3NlZ21lbnRzKGNvbnN0IEVsZl9QaGRyKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwgRWxmX0FkZHIgbG9hZF9iaWFzKTsKK2ludCBwaGRyX3RhYmxlX3VucHJvdGVjdF9zZWdtZW50cyhjb25zdCBFbGZXKFBoZHIpKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwgRWxmVyhBZGRyKSBsb2FkX2JpYXMpOwogCi1pbnQgcGhkcl90YWJsZV9wcm90ZWN0X2dudV9yZWxybyhjb25zdCBFbGZfUGhkciogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsIEVsZl9BZGRyIGxvYWRfYmlhcyk7CitpbnQgcGhkcl90YWJsZV9wcm90ZWN0X2dudV9yZWxybyhjb25zdCBFbGZXKFBoZHIpKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwgRWxmVyhBZGRyKSBsb2FkX2JpYXMpOwogCitpbnQgcGhkcl90YWJsZV9zZXJpYWxpemVfZ251X3JlbHJvKGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LCBFbGZXKEFkZHIpIGxvYWRfYmlhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZkKTsKKworaW50IHBoZHJfdGFibGVfbWFwX2dudV9yZWxybyhjb25zdCBFbGZXKFBoZHIpKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwgRWxmVyhBZGRyKSBsb2FkX2JpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmZCk7CiAKICNpZiBkZWZpbmVkKF9fYXJtX18pCi1pbnQgcGhkcl90YWJsZV9nZXRfYXJtX2V4aWR4KGNvbnN0IEVsZl9QaGRyKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwgRWxmX0FkZHIgbG9hZF9iaWFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZfQWRkcioqIGFybV9leGlkeCwgdW5zaWduZWQqIGFybV9leGlkaXhfY291bnQpOworaW50IHBoZHJfdGFibGVfZ2V0X2FybV9leGlkeChjb25zdCBFbGZXKFBoZHIpKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwgRWxmVyhBZGRyKSBsb2FkX2JpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZlcoQWRkcikqKiBhcm1fZXhpZHgsIHVuc2lnbmVkKiBhcm1fZXhpZGl4X2NvdW50KTsKICNlbmRpZgogCi12b2lkIHBoZHJfdGFibGVfZ2V0X2R5bmFtaWNfc2VjdGlvbihjb25zdCBFbGZfUGhkciogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZfQWRkciBsb2FkX2JpYXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZfRHluKiogZHluYW1pYywgc2l6ZV90KiBkeW5hbWljX2NvdW50LCBFbGZfV29yZCogZHluYW1pY19mbGFncyk7Cit2b2lkIHBoZHJfdGFibGVfZ2V0X2R5bmFtaWNfc2VjdGlvbihjb25zdCBFbGZXKFBoZHIpKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZlcoQWRkcikgbG9hZF9iaWFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmVyhEeW4pKiogZHluYW1pYywgc2l6ZV90KiBkeW5hbWljX2NvdW50LCBFbGZXKFdvcmQpKiBkeW5hbWljX2ZsYWdzKTsKIAogI2VuZGlmIC8qIExJTktFUl9QSERSX0ggKi8KZGlmZiAtLWdpdCBhL2xpbmtlci90ZXN0cy9BbmRyb2lkLm1rIGIvbGlua2VyL3Rlc3RzL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2NGU3NwotLS0gL2Rldi9udWxsCisrKyBiL2xpbmtlci90ZXN0cy9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMzggQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKK2lmbmVxICgkKEJVSUxEX1RJTllfQU5EUk9JRCksdHJ1ZSkKKworTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfTU9EVUxFIDo9IGxpbmtlci11bml0LXRlc3RzCitMT0NBTF9NT0RVTEVfU1RFTV8zMiA6PSAkKExPQ0FMX01PRFVMRSkzMgorTE9DQUxfTU9EVUxFX1NURU1fNjQgOj0gJChMT0NBTF9NT0RVTEUpNjQKKworTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCisKK0xPQ0FMX0NGTEFHUyArPSAtZyAtV2FsbCAtV2V4dHJhIC1XdW51c2VkIC1XZXJyb3IgLXN0ZD1nbnUrKzExCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQoTE9DQUxfUEFUSCkvLi4vLi4vbGliYy8KKworTE9DQUxfU1JDX0ZJTEVTIDo9IFwKKyAgbGlua2VkX2xpc3RfdGVzdC5jcHAgXAorICBsaW5rZXJfYWxsb2NhdG9yX3Rlc3QuY3BwIFwKKyAgLi4vbGlua2VyX2FsbG9jYXRvci5jcHAKKworaW5jbHVkZSAkKEJVSUxEX05BVElWRV9URVNUKQorCitlbmRpZiAjICFCVUlMRF9USU5ZX0FORFJPSUQKZGlmZiAtLWdpdCBhL2xpbmtlci90ZXN0cy9saW5rZWRfbGlzdF90ZXN0LmNwcCBiL2xpbmtlci90ZXN0cy9saW5rZWRfbGlzdF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTgxNmZhCi0tLSAvZGV2L251bGwKKysrIGIvbGlua2VyL3Rlc3RzL2xpbmtlZF9saXN0X3Rlc3QuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgIi4uL2xpbmtlZF9saXN0LmgiCisKK25hbWVzcGFjZSB7CisKK2Jvb2wgYWxsb2NfY2FsbGVkID0gZmFsc2U7Citib29sIGZyZWVfY2FsbGVkID0gZmFsc2U7CisKK2NsYXNzIExpbmtlZExpc3RUZXN0QWxsb2NhdG9yIHsKKyBwdWJsaWM6CisgIHR5cGVkZWYgTGlua2VkTGlzdEVudHJ5PGNvbnN0IGNoYXI+IGVudHJ5X3Q7CisKKyAgc3RhdGljIGVudHJ5X3QqIGFsbG9jKCkgeworICAgIGFsbG9jX2NhbGxlZCA9IHRydWU7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8ZW50cnlfdCo+KDo6bWFsbG9jKHNpemVvZihlbnRyeV90KSkpOworICB9CisKKyAgc3RhdGljIHZvaWQgZnJlZShlbnRyeV90KiBwKSB7CisgICAgZnJlZV9jYWxsZWQgPSB0cnVlOworICAgIDo6ZnJlZShwKTsKKyAgfQorIHByaXZhdGU6CisgIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhMaW5rZWRMaXN0VGVzdEFsbG9jYXRvcik7Cit9OworCit0eXBlZGVmIExpbmtlZExpc3Q8Y29uc3QgY2hhciwgTGlua2VkTGlzdFRlc3RBbGxvY2F0b3I+IHRlc3RfbGlzdF90OworCitzdGQ6OnN0cmluZyB0ZXN0X2xpc3RfdG9fc3RyaW5nKHRlc3RfbGlzdF90JiBsaXN0KSB7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBsaXN0LmZvcl9lYWNoKFsmXSAoY29uc3QgY2hhciogYykgeworICAgIHNzIDw8IGM7CisgIH0pOworCisgIHJldHVybiBzcy5zdHIoKTsKK30KKworfTsKKworVEVTVChsaW5rZWRfbGlzdCwgc2ltcGxlKSB7CisgIGFsbG9jX2NhbGxlZCA9IGZyZWVfY2FsbGVkID0gZmFsc2U7CisgIHRlc3RfbGlzdF90IGxpc3Q7CisgIEFTU0VSVF9FUSgiIiwgdGVzdF9saXN0X3RvX3N0cmluZyhsaXN0KSk7CisgIEFTU0VSVF9UUlVFKCFhbGxvY19jYWxsZWQpOworICBBU1NFUlRfVFJVRSghZnJlZV9jYWxsZWQpOworICBsaXN0LnB1c2hfZnJvbnQoImEiKTsKKyAgQVNTRVJUX1RSVUUoYWxsb2NfY2FsbGVkKTsKKyAgQVNTRVJUX1RSVUUoIWZyZWVfY2FsbGVkKTsKKyAgQVNTRVJUX0VRKCJhIiwgdGVzdF9saXN0X3RvX3N0cmluZyhsaXN0KSk7CisgIGxpc3QucHVzaF9mcm9udCgiYiIpOworICBBU1NFUlRfRVEoImJhIiwgdGVzdF9saXN0X3RvX3N0cmluZyhsaXN0KSk7CisgIGxpc3QucHVzaF9mcm9udCgiYyIpOworICBsaXN0LnB1c2hfZnJvbnQoImQiKTsKKyAgQVNTRVJUX0VRKCJkY2JhIiwgdGVzdF9saXN0X3RvX3N0cmluZyhsaXN0KSk7CisgIEFTU0VSVF9UUlVFKGFsbG9jX2NhbGxlZCk7CisgIEFTU0VSVF9UUlVFKCFmcmVlX2NhbGxlZCk7CisgIGFsbG9jX2NhbGxlZCA9IGZyZWVfY2FsbGVkID0gZmFsc2U7CisgIGxpc3QucmVtb3ZlX2lmKFtdIChjb25zdCBjaGFyKiBjKSB7CisgICAgcmV0dXJuICpjID09ICdjJzsKKyAgfSk7CisKKyAgQVNTRVJUX1RSVUUoIWFsbG9jX2NhbGxlZCk7CisgIEFTU0VSVF9UUlVFKCFmcmVlX2NhbGxlZCk7CisKKyAgQVNTRVJUX0VRKCJkYmEiLCB0ZXN0X2xpc3RfdG9fc3RyaW5nKGxpc3QpKTsKKyAgYWxsb2NfY2FsbGVkID0gZnJlZV9jYWxsZWQgPSBmYWxzZTsKKyAgbGlzdC5yZW1vdmVfaWYoW10gKGNvbnN0IGNoYXIqIGMpIHsKKyAgICByZXR1cm4gKmMgPT0gJzInOworICB9KTsKKyAgQVNTRVJUX1RSVUUoIWFsbG9jX2NhbGxlZCk7CisgIEFTU0VSVF9UUlVFKCFmcmVlX2NhbGxlZCk7CisgIEFTU0VSVF9FUSgiZGJhIiwgdGVzdF9saXN0X3RvX3N0cmluZyhsaXN0KSk7CisgIGxpc3QuY2xlYXIoKTsKKyAgQVNTRVJUX1RSVUUoIWFsbG9jX2NhbGxlZCk7CisgIEFTU0VSVF9UUlVFKGZyZWVfY2FsbGVkKTsKKyAgQVNTRVJUX0VRKCIiLCB0ZXN0X2xpc3RfdG9fc3RyaW5nKGxpc3QpKTsKK30KKworVEVTVChsaW5rZWRfbGlzdCwgcHVzaF9wb3ApIHsKKyAgdGVzdF9saXN0X3QgbGlzdDsKKyAgbGlzdC5wdXNoX2Zyb250KCJiIik7CisgIGxpc3QucHVzaF9mcm9udCgiYSIpOworICBBU1NFUlRfRVEoImFiIiwgdGVzdF9saXN0X3RvX3N0cmluZyhsaXN0KSk7CisgIGxpc3QucHVzaF9iYWNrKCJjIik7CisgIEFTU0VSVF9FUSgiYWJjIiwgdGVzdF9saXN0X3RvX3N0cmluZyhsaXN0KSk7CisgIEFTU0VSVF9FUSgiYSIsIGxpc3QucG9wX2Zyb250KCkpOworICBBU1NFUlRfRVEoImJjIiwgdGVzdF9saXN0X3RvX3N0cmluZyhsaXN0KSk7CisgIEFTU0VSVF9FUSgiYiIsIGxpc3QucG9wX2Zyb250KCkpOworICBBU1NFUlRfRVEoImMiLCB0ZXN0X2xpc3RfdG9fc3RyaW5nKGxpc3QpKTsKKyAgQVNTRVJUX0VRKCJjIiwgbGlzdC5wb3BfZnJvbnQoKSk7CisgIEFTU0VSVF9FUSgiIiwgdGVzdF9saXN0X3RvX3N0cmluZyhsaXN0KSk7CisgIEFTU0VSVF9UUlVFKGxpc3QucG9wX2Zyb250KCkgPT0gbnVsbHB0cik7CisgIGxpc3QucHVzaF9iYWNrKCJyIik7CisgIEFTU0VSVF9FUSgiciIsIHRlc3RfbGlzdF90b19zdHJpbmcobGlzdCkpOworICBBU1NFUlRfRVEoInIiLCBsaXN0LnBvcF9mcm9udCgpKTsKKyAgQVNTRVJUX1RSVUUobGlzdC5wb3BfZnJvbnQoKSA9PSBudWxscHRyKTsKK30KZGlmZiAtLWdpdCBhL2xpbmtlci90ZXN0cy9saW5rZXJfYWxsb2NhdG9yX3Rlc3QuY3BwIGIvbGlua2VyL3Rlc3RzL2xpbmtlcl9hbGxvY2F0b3JfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI5MmEwNQotLS0gL2Rldi9udWxsCisrKyBiL2xpbmtlci90ZXN0cy9saW5rZXJfYWxsb2NhdG9yX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSAiLi4vbGlua2VyX2FsbG9jYXRvci5oIgorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK25hbWVzcGFjZSB7CisKK3N0cnVjdCB0ZXN0X3N0cnVjdF9ub21pbmFsIHsKKyAgdm9pZCogcG9pbnRlcjsKKyAgc3NpemVfdCB2YWx1ZTsKK307CisKKy8qCisgKiB0aGlzIG9uZSBoYXMgc2l6ZSBiZWxvdyBhbGxvY2F0b3IgY2FwIHdoaWNoIGlzIDIqc2l6ZW9mKHZvaWQqKQorICovCitzdHJ1Y3QgdGVzdF9zdHJ1Y3Rfc21hbGwgeworICBjaGFyIGR1bW15X3N0cls1XTsKK307CisKKy8qCisgKiAxMDA5IGJ5dGUgc3RydWN0ICgxMDA5IGlzIHByaW1lKQorICovCitzdHJ1Y3QgdGVzdF9zdHJ1Y3RfbGFyZ2VyIHsKKyAgY2hhciBkdW1teV9zdHJbMTAwOV07Cit9OworCitzdGF0aWMgc2l6ZV90IGtQYWdlU2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSk7Cit9OworCitURVNUKGxpbmtlcl9hbGxvY2F0b3IsIHRlc3Rfbm9taW5hbCkgeworICBMaW5rZXJBbGxvY2F0b3I8dGVzdF9zdHJ1Y3Rfbm9taW5hbD4gYWxsb2NhdG9yOworCisgIHRlc3Rfc3RydWN0X25vbWluYWwqIHB0cjEgPSBhbGxvY2F0b3IuYWxsb2MoKTsKKyAgQVNTRVJUX1RSVUUocHRyMSAhPSBudWxscHRyKTsKKyAgdGVzdF9zdHJ1Y3Rfbm9taW5hbCogcHRyMiA9IGFsbG9jYXRvci5hbGxvYygpOworICBBU1NFUlRfVFJVRShwdHIyICE9IG51bGxwdHIpOworICAvLyB0aGV5IHNob3VsZCBiZSBuZXh0IHRvIGVhY2ggb3RoZXIuCisgIEFTU0VSVF9FUShwdHIxKzEsIHB0cjIpOworCisgIHB0cjEtPnZhbHVlID0gNDI7CisKKyAgYWxsb2NhdG9yLmZyZWUocHRyMSk7CisgIGFsbG9jYXRvci5mcmVlKHB0cjIpOworfQorCitURVNUKGxpbmtlcl9hbGxvY2F0b3IsIHRlc3Rfc21hbGwpIHsKKyAgTGlua2VyQWxsb2NhdG9yPHRlc3Rfc3RydWN0X3NtYWxsPiBhbGxvY2F0b3I7CisKKyAgY2hhciogcHRyMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFsbG9jYXRvci5hbGxvYygpKTsKKyAgY2hhciogcHRyMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFsbG9jYXRvci5hbGxvYygpKTsKKworICBBU1NFUlRfVFJVRShwdHIxICE9IG51bGxwdHIpOworICBBU1NFUlRfVFJVRShwdHIyICE9IG51bGxwdHIpOworICBBU1NFUlRfRVEocHRyMSsyKnNpemVvZih2b2lkKiksIHB0cjIpOworfQorCitURVNUKGxpbmtlcl9hbGxvY2F0b3IsIHRlc3RfbGFyZ2VyKSB7CisgIExpbmtlckFsbG9jYXRvcjx0ZXN0X3N0cnVjdF9sYXJnZXI+IGFsbG9jYXRvcjsKKworICB0ZXN0X3N0cnVjdF9sYXJnZXIqIHB0cjEgPSBhbGxvY2F0b3IuYWxsb2MoKTsKKyAgdGVzdF9zdHJ1Y3RfbGFyZ2VyKiBwdHIyID0gYWxsb2NhdG9yLmFsbG9jKCk7CisKKyAgQVNTRVJUX1RSVUUocHRyMSAhPSBudWxscHRyKTsKKyAgQVNTRVJUX1RSVUUocHRyMiAhPSBudWxscHRyKTsKKworICBBU1NFUlRfRVEocHRyMSsxLCBwdHIyKTsKKworICAvLyBsZXRzIGFsbG9jYXRlIHVudGlsIHdlIHJlYWNoIG5leHQgcGFnZS4KKyAgc2l6ZV90IG4gPSBrUGFnZVNpemUvc2l6ZW9mKHRlc3Rfc3RydWN0X2xhcmdlcikgKyAxIC0gMjsKKworICBmb3IgKHNpemVfdCBpPTA7IGk8bjsgKytpKSB7CisgICAgQVNTRVJUX1RSVUUoYWxsb2NhdG9yLmFsbG9jKCkgIT0gbnVsbHB0cik7CisgIH0KKworICB0ZXN0X3N0cnVjdF9sYXJnZXIqIHB0cl90b19mcmVlID0gYWxsb2NhdG9yLmFsbG9jKCk7CisgIEFTU0VSVF9UUlVFKHB0cl90b19mcmVlICE9IG51bGxwdHIpOworICBhbGxvY2F0b3IuZnJlZShwdHIxKTsKK30KKworc3RhdGljIHZvaWQgcHJvdGVjdF9hbGwoKSB7CisgIExpbmtlckFsbG9jYXRvcjx0ZXN0X3N0cnVjdF9sYXJnZXI+IGFsbG9jYXRvcjsKKworICAvLyBudW1iZXIgb2YgYWxsb2NzIHRvIHJlYWNoIHRoZSBlbmQgb2YgZmlyc3QgcGFnZQorICBzaXplX3QgbiA9IGtQYWdlU2l6ZS9zaXplb2YodGVzdF9zdHJ1Y3RfbGFyZ2VyKSAtIDE7CisgIHRlc3Rfc3RydWN0X2xhcmdlciogcGFnZTFfcHRyID0gYWxsb2NhdG9yLmFsbG9jKCk7CisKKyAgZm9yIChzaXplX3QgaT0wOyBpPG47ICsraSkgeworICAgIGFsbG9jYXRvci5hbGxvYygpOworICB9CisKKyAgdGVzdF9zdHJ1Y3RfbGFyZ2VyKiBwYWdlMl9wdHIgPSBhbGxvY2F0b3IuYWxsb2MoKTsKKyAgYWxsb2NhdG9yLnByb3RlY3RfYWxsKFBST1RfUkVBRCk7CisgIGFsbG9jYXRvci5wcm90ZWN0X2FsbChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKyAgLy8gY2hlY2sgYWNjZXNzCisgIHBhZ2UyX3B0ci0+ZHVtbXlfc3RyWzIzXSA9IDI3OworICBwYWdlMV9wdHItPmR1bW15X3N0clsxM10gPSAxMTsKKworICBhbGxvY2F0b3IucHJvdGVjdF9hbGwoUFJPVF9SRUFEKTsKKyAgZnByaW50ZihzdGRlcnIsICJ0cnlpbmcgdG8gYWNjZXNzIHByb3RlY3RlZCBwYWdlIik7CisKKyAgLy8gdGhpcyBzaG91bGQgcmVzdWx0IGluIHNlZ21lbnRhdGlvbiBmYXVsdAorICBwYWdlMV9wdHItPmR1bW15X3N0clsxMV0gPSA3OworfQorCitURVNUKGxpbmtlcl9hbGxvY2F0b3IsIHRlc3RfcHJvdGVjdCkgeworICB0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBBU1NFUlRfRVhJVChwcm90ZWN0X2FsbCgpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdTRUdWKSwgInRyeWluZyB0byBhY2Nlc3MgcHJvdGVjdGVkIHBhZ2UiKTsKK30KKwpkaWZmIC0tZ2l0IGEvdGVzdHMvQW5kcm9pZC5idWlsZC5tayBiL3Rlc3RzL0FuZHJvaWQuYnVpbGQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRiMDM5NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL0FuZHJvaWQuYnVpbGQubWsKQEAgLTAsMCArMSw5NSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX01PRFVMRSA6PSAkKG1vZHVsZSkKK0xPQ0FMX01PRFVMRV9UQUdTIDo9ICQobW9kdWxlX3RhZykKK2lmZXEgKCQoYnVpbGRfdHlwZSksaG9zdCkKKyMgQWx3YXlzIG1ha2UgaG9zdCBtdWx0aWxpYgorTE9DQUxfTVVMVElMSUIgOj0gYm90aAorZW5kaWYKKworaWZuZXEgKCQoZmluZHN0cmluZyBMSUJSQVJZLCAkKGJ1aWxkX3RhcmdldCkpLExJQlJBUlkpCisgICAgTE9DQUxfTU9EVUxFX1NURU1fMzIgOj0gJChtb2R1bGUpMzIKKyAgICBMT0NBTF9NT0RVTEVfU1RFTV82NCA6PSAkKG1vZHVsZSk2NAorZWxzZQoraWZlcSAoJCgkKG1vZHVsZSlfaW5zdGFsbF90b19vdXRfZGF0YSksdHJ1ZSkKKyAgICBMT0NBTF9NT0RVTEVfUEFUSF8zMiA6PSAkKCQoVEFSR0VUXzJORF9BUkNIX1ZBUl9QUkVGSVgpVEFSR0VUX09VVF9EQVRBX05BVElWRV9URVNUUykvJChtb2R1bGUpCisgICAgTE9DQUxfTU9EVUxFX1BBVEhfNjQgOj0gJChUQVJHRVRfT1VUX0RBVEFfTkFUSVZFX1RFU1RTKS8kKG1vZHVsZSkKK2VuZGlmCitlbmRpZgorCitMT0NBTF9DTEFORyA6PSAkKCQobW9kdWxlKV9jbGFuZ18kKGJ1aWxkX3R5cGUpKQorCitMT0NBTF9GT1JDRV9TVEFUSUNfRVhFQ1VUQUJMRSA6PSAkKCQobW9kdWxlKV9mb3JjZV9zdGF0aWNfZXhlY3V0YWJsZSkKKworTE9DQUxfQ0ZMQUdTIDo9IFwKKyAgICAkKGNvbW1vbl9jZmxhZ3MpIFwKKyAgICAkKCQobW9kdWxlKV9jZmxhZ3MpIFwKKyAgICAkKCQobW9kdWxlKV9jZmxhZ3NfJChidWlsZF90eXBlKSkgXAorCitMT0NBTF9DT05MWUZMQUdTICs9IFwKKyAgICAkKGNvbW1vbl9jb25seWZsYWdzKSBcCisgICAgJCgkKG1vZHVsZSlfY29ubHlmbGFncykgXAorICAgICQoJChtb2R1bGUpX2Nvbmx5ZmxhZ3NfJChidWlsZF90eXBlKSkgXAorCitMT0NBTF9DUFBGTEFHUyArPSBcCisgICAgJChjb21tb25fY3BwZmxhZ3MpIFwKKyAgICAkKCQobW9kdWxlKV9jcHBmbGFncykgXAorICAgICQoJChtb2R1bGUpX2NwcGZsYWdzXyQoYnVpbGRfdHlwZSkpIFwKKworTE9DQUxfQ19JTkNMVURFUyA6PSBcCisgICAgJChjb21tb25fY19pbmNsdWRlcykgXAorICAgICQoJChtb2R1bGUpX2NfaW5jbHVkZXMpIFwKKyAgICAkKCQobW9kdWxlKV9jX2luY2x1ZGVzXyQoYnVpbGRfdHlwZSkpIFwKKworTE9DQUxfU1JDX0ZJTEVTIDo9IFwKKyAgICAkKCQobW9kdWxlKV9zcmNfZmlsZXMpIFwKKyAgICAkKCQobW9kdWxlKV9zcmNfZmlsZXNfJChidWlsZF90eXBlKSkgXAorCitMT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IFwKKyAgICAkKCQobW9kdWxlKV9zdGF0aWNfbGlicmFyaWVzKSBcCisgICAgJCgkKG1vZHVsZSlfc3RhdGljX2xpYnJhcmllc18kKGJ1aWxkX3R5cGUpKSBcCisKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAorICAgICQoJChtb2R1bGUpX3NoYXJlZF9saWJyYXJpZXMpIFwKKyAgICAkKCQobW9kdWxlKV9zaGFyZWRfbGlicmFyaWVzXyQoYnVpbGRfdHlwZSkpIFwKKworTE9DQUxfV0hPTEVfU1RBVElDX0xJQlJBUklFUyA6PSBcCisgICAgJCgkKG1vZHVsZSlfd2hvbGVfc3RhdGljX2xpYnJhcmllcykgXAorICAgICQoJChtb2R1bGUpX3dob2xlX3N0YXRpY19saWJyYXJpZXNfJChidWlsZF90eXBlKSkgXAorCitMT0NBTF9MREZMQUdTIDo9IFwKKyAgICAkKCQobW9kdWxlKV9sZGZsYWdzKSBcCisgICAgJCgkKG1vZHVsZSlfbGRmbGFnc18kKGJ1aWxkX3R5cGUpKSBcCisKK0xPQ0FMX0xETElCUyA6PSBcCisgICAgJCgkKG1vZHVsZSlfbGRsaWJzKSBcCisgICAgJCgkKG1vZHVsZSlfbGRsaWJzXyQoYnVpbGRfdHlwZSkpIFwKKworaWZlcSAoJChidWlsZF90eXBlKSx0YXJnZXQpCisgIGluY2x1ZGUgZXh0ZXJuYWwvc3RscG9ydC9saWJzdGxwb3J0Lm1rCisKKyAgaW5jbHVkZSAkKEJVSUxEXyQoYnVpbGRfdGFyZ2V0KSkKK2VuZGlmCisKK2lmZXEgKCQoYnVpbGRfdHlwZSksaG9zdCkKKyAgIyBPbmx5IGJ1aWxkIGlmIGhvc3QgYnVpbGRzIGFyZSBzdXBwb3J0ZWQuCisgIGlmZXEgKCQoYnVpbGRfaG9zdCksdHJ1ZSkKKyAgICBpbmNsdWRlICQoQlVJTERfSE9TVF8kKGJ1aWxkX3RhcmdldCkpCisgIGVuZGlmCitlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvQW5kcm9pZC5tayBiL3Rlc3RzL0FuZHJvaWQubWsKaW5kZXggZWUyMmMzNS4uODE4NGJmNyAxMDA2NDQKLS0tIGEvdGVzdHMvQW5kcm9pZC5taworKysgYi90ZXN0cy9BbmRyb2lkLm1rCkBAIC0yMiwxODIgKzIyLDMyNiBAQAogIyBVbml0IHRlc3RzLgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10ZXN0X2NfZmxhZ3MgPSBcCitpZmVxICgkKEhPU1RfT1MpLSQoSE9TVF9BUkNIKSwkKGZpbHRlciAkKEhPU1RfT1MpLSQoSE9TVF9BUkNIKSxsaW51eC14ODYgbGludXgteDg2XzY0KSkKK2J1aWxkX2hvc3QgOj0gdHJ1ZQorZWxzZQorYnVpbGRfaG9zdCA6PSBmYWxzZQorZW5kaWYKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBbGwgc3RhbmRhcmQgdGVzdHMuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0ZXN0X2NmbGFncyA9IFwKICAgICAtZnN0YWNrLXByb3RlY3Rvci1hbGwgXAogICAgIC1nIFwKLSAgICAtV2FsbCAtV2V4dHJhIFwKKyAgICAtV2FsbCAtV2V4dHJhIC1XdW51c2VkIFwKICAgICAtV2Vycm9yIFwKICAgICAtZm5vLWJ1aWx0aW4gXAogCi1pZmVxICgkKFRBUkdFVF9BUkNIKSxhcm02NCkKLSAgJChpbmZvIFRPRE86ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tayAtZnN0YWNrLXByb3RlY3RvciBub3QgeWV0IGF2YWlsYWJsZSBmb3IgdGhlIEFBcmNoNjQgdG9vbGNoYWluKQotICB0ZXN0X2NfZmxhZ3MgKz0gLWZuby1zdGFjay1wcm90ZWN0b3IKLWVuZGlmICMgYXJtNjQKK3Rlc3RfY2ZsYWdzICs9IC1EX19TVERDX0xJTUlUX01BQ1JPUyAgIyBGb3IgZ2xpYmMuCiAKLXRlc3Rfc3JjX2ZpbGVzID0gXAoraWZlcSAoJChNQUxMT0NfSU1QTCksZGxtYWxsb2MpCit0ZXN0X2NmbGFncyArPSAtRFVTRV9ETE1BTExPQworZWxzZQordGVzdF9jZmxhZ3MgKz0gLURVU0VfSkVNQUxMT0MKK2VuZGlmCisKK3Rlc3RfY3BwZmxhZ3MgPSBcCisgICAgLXN0ZD1nbnUrKzExIFwKKworbGliQmlvbmljU3RhbmRhcmRUZXN0c19zcmNfZmlsZXMgOj0gXAorICAgIGFycGFfaW5ldF90ZXN0LmNwcCBcCiAgICAgYnVmZmVyX3Rlc3RzLmNwcCBcCisgICAgY3R5cGVfdGVzdC5jcHAgXAogICAgIGRpcmVudF90ZXN0LmNwcCBcCiAgICAgZXZlbnRmZF90ZXN0LmNwcCBcCiAgICAgZmNudGxfdGVzdC5jcHAgXAogICAgIGZlbnZfdGVzdC5jcHAgXAorICAgIGZ0d190ZXN0LmNwcCBcCiAgICAgZ2V0YXV4dmFsX3Rlc3QuY3BwIFwKICAgICBnZXRjd2RfdGVzdC5jcHAgXAogICAgIGludHR5cGVzX3Rlc3QuY3BwIFwKICAgICBsaWJjX2xvZ2dpbmdfdGVzdC5jcHAgXAogICAgIGxpYmdlbl90ZXN0LmNwcCBcCisgICAgbG9jYWxlX3Rlc3QuY3BwIFwKICAgICBtYWxsb2NfdGVzdC5jcHAgXAorICAgIG1hdGhfY29zX3Rlc3QuY3BwIFwKKyAgICBtYXRoX2Nvc2ZfdGVzdC5jcHAgXAorICAgIG1hdGhfZXhwX3Rlc3QuY3BwIFwKKyAgICBtYXRoX2V4cGZfdGVzdC5jcHAgXAorICAgIG1hdGhfbG9nX3Rlc3QuY3BwIFwKKyAgICBtYXRoX2xvZ2ZfdGVzdC5jcHAgXAorICAgIG1hdGhfcG93X3Rlc3QuY3BwIFwKKyAgICBtYXRoX3Bvd2ZfdGVzdC5jcHAgXAorICAgIG1hdGhfc2luX3Rlc3QuY3BwIFwKKyAgICBtYXRoX3NpbmZfdGVzdC5jcHAgXAorICAgIG1hdGhfc2luY29zX3Rlc3QuY3BwIFwKKyAgICBtYXRoX3NpbmNvc2ZfdGVzdC5jcHAgXAorICAgIG1hdGhfdGFuX3Rlc3QuY3BwIFwKKyAgICBtYXRoX3RhbmZfdGVzdC5jcHAgXAogICAgIG1hdGhfdGVzdC5jcHAgXAorICAgIG1udGVudF90ZXN0LmNwcCBcCiAgICAgbmV0ZGJfdGVzdC5jcHAgXAogICAgIHB0aHJlYWRfdGVzdC5jcHAgXAogICAgIHJlZ2V4X3Rlc3QuY3BwIFwKICAgICBzY2hlZF90ZXN0LmNwcCBcCisgICAgc2VhcmNoX3Rlc3QuY3BwIFwKICAgICBzaWduYWxfdGVzdC5jcHAgXAogICAgIHN0YWNrX3Byb3RlY3Rvcl90ZXN0LmNwcCBcCiAgICAgc3RhY2tfdW53aW5kaW5nX3Rlc3QuY3BwIFwKLSAgICBzdGF0dmZzX3Rlc3QuY3BwIFwKKyAgICBzdGRhdG9taWNfdGVzdC5jcHAgXAorICAgIHN0ZGludF90ZXN0LmNwcCBcCiAgICAgc3RkaW9fdGVzdC5jcHAgXAogICAgIHN0ZGxpYl90ZXN0LmNwcCBcCiAgICAgc3RyaW5nX3Rlc3QuY3BwIFwKICAgICBzdHJpbmdzX3Rlc3QuY3BwIFwKICAgICBzdHVic190ZXN0LmNwcCBcCisgICAgc3N0cmVhbV90ZXN0LmNwcCBcCiAgICAgc3lzX2Vwb2xsX3Rlc3QuY3BwIFwKICAgICBzeXNfbW1hbl90ZXN0LmNwcCBcCiAgICAgc3lzX3Jlc291cmNlX3Rlc3QuY3BwIFwKICAgICBzeXNfc2VsZWN0X3Rlc3QuY3BwIFwKICAgICBzeXNfc2VuZGZpbGVfdGVzdC5jcHAgXAorICAgIHN5c19zb2NrZXRfdGVzdC5jcHAgXAogICAgIHN5c19zdGF0X3Rlc3QuY3BwIFwKKyAgICBzeXNfc3RhdHZmc190ZXN0LmNwcCBcCiAgICAgc3lzX3N5c2NhbGxfdGVzdC5jcHAgXAogICAgIHN5c190aW1lX3Rlc3QuY3BwIFwKICAgICBzeXNfdHlwZXNfdGVzdC5jcHAgXAorICAgIHN5c192ZnNfdGVzdC5jcHAgXAogICAgIHN5c3RlbV9wcm9wZXJ0aWVzX3Rlc3QuY3BwIFwKICAgICB0aW1lX3Rlc3QuY3BwIFwKKyAgICB1Y2hhcl90ZXN0LmNwcCBcCiAgICAgdW5pc3RkX3Rlc3QuY3BwIFwKKyAgICB3Y2hhcl90ZXN0LmNwcCBcCiAKLXRlc3RfZHluYW1pY19sZGZsYWdzID0gLVdsLC0tZXhwb3J0LWR5bmFtaWMgLVdsLC11LERsU3ltVGVzdEZ1bmN0aW9uCi10ZXN0X2R5bmFtaWNfc3JjX2ZpbGVzID0gXAotICAgIGRsZmNuX3Rlc3QuY3BwIFwKK2xpYkJpb25pY1N0YW5kYXJkVGVzdHNfY2ZsYWdzIDo9IFwKKyAgICAkKHRlc3RfY2ZsYWdzKSBcCiAKLXRlc3RfZm9ydGlmeV9zdGF0aWNfbGlicmFyaWVzID0gXAotICAgIGZvcnRpZnkxLXRlc3RzLWdjYyBmb3J0aWZ5Mi10ZXN0cy1nY2MgZm9ydGlmeTEtdGVzdHMtY2xhbmcgZm9ydGlmeTItdGVzdHMtY2xhbmcKLQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi1MT0NBTF9NT0RVTEUgOj0gYmlvbmljLXVuaXQtdGVzdHMtdW53aW5kLXRlc3QtaW1wbAotTE9DQUxfQ0ZMQUdTICs9ICQodGVzdF9jX2ZsYWdzKSAtZmV4Y2VwdGlvbnMgLWZub24tY2FsbC1leGNlcHRpb25zCi1MT0NBTF9TUkNfRklMRVMgOj0gc3RhY2tfdW53aW5kaW5nX3Rlc3RfaW1wbC5jCi1pbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFIDo9IGJpb25pYy11bml0LXRlc3RzLXVud2luZC10ZXN0LWltcGwtaG9zdAotTE9DQUxfQ0ZMQUdTICs9ICQodGVzdF9jX2ZsYWdzKSAtZmV4Y2VwdGlvbnMgLWZub24tY2FsbC1leGNlcHRpb25zCi1MT0NBTF9TUkNfRklMRVMgOj0gc3RhY2tfdW53aW5kaW5nX3Rlc3RfaW1wbC5jCi1pbmNsdWRlICQoQlVJTERfSE9TVF9TVEFUSUNfTElCUkFSWSkKLQotIyBCdWlsZCB0ZXN0cyBmb3IgdGhlIGRldmljZSAod2l0aCBiaW9uaWMncyAuc28pLiBSdW4gd2l0aDoKLSMgICBhZGIgc2hlbGwgL2RhdGEvbmF0aXZldGVzdC9iaW9uaWMtdW5pdC10ZXN0cy9iaW9uaWMtdW5pdC10ZXN0cwotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi1MT0NBTF9NT0RVTEUgOj0gYmlvbmljLXVuaXQtdGVzdHMKLUxPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawotTE9DQUxfQ0ZMQUdTICs9ICQodGVzdF9jX2ZsYWdzKQotTE9DQUxfTERGTEFHUyArPSAkKHRlc3RfZHluYW1pY19sZGZsYWdzKQotTE9DQUxfU0hBUkVEX0xJQlJBUklFUyArPSBsaWJkbAotTE9DQUxfU1JDX0ZJTEVTIDo9ICQodGVzdF9zcmNfZmlsZXMpICQodGVzdF9keW5hbWljX3NyY19maWxlcykKLUxPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVMgOj0gJCh0ZXN0X2ZvcnRpZnlfc3RhdGljX2xpYnJhcmllcykKLUxPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgKz0gYmlvbmljLXVuaXQtdGVzdHMtdW53aW5kLXRlc3QtaW1wbAotaW5jbHVkZSAkKEJVSUxEX05BVElWRV9URVNUKQotCi0jIEJ1aWxkIHRlc3RzIGZvciB0aGUgZGV2aWNlICh3aXRoIGJpb25pYydzIC5hKS4gUnVuIHdpdGg6Ci0jICAgYWRiIHNoZWxsIC9kYXRhL25hdGl2ZXRlc3QvYmlvbmljLXVuaXQtdGVzdHMtc3RhdGljL2Jpb25pYy11bml0LXRlc3RzLXN0YXRpYwotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi1MT0NBTF9NT0RVTEUgOj0gYmlvbmljLXVuaXQtdGVzdHMtc3RhdGljCi1MT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKLUxPQ0FMX0ZPUkNFX1NUQVRJQ19FWEVDVVRBQkxFIDo9IHRydWUKLUxPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVMgKz0gbGliQmlvbmljVGVzdHMKLUxPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgKz0gbGlic3RscG9ydF9zdGF0aWMgbGlic3RkYysrIGxpYm0gbGliYwotaW5jbHVkZSAkKEJVSUxEX05BVElWRV9URVNUKQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFdlIGJ1aWxkIHRoZSBzdGF0aWMgdW5pdCB0ZXN0cyBhcyBhIGxpYnJhcnkgc28gdGhleSBjYW4gYmUgdXNlZCBib3RoIGZvcgotIyBiaW9uaWMtdW5pdC10ZXN0cy1zdGF0aWMgYW5kIGFsc28gYXMgcGFydCBvZiBDVFMuCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFIDo9IGxpYkJpb25pY1Rlc3RzCi1MT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKLUxPQ0FMX0NGTEFHUyArPSAkKHRlc3RfY19mbGFncykKLUxPQ0FMX1NSQ19GSUxFUyA6PSAkKHRlc3Rfc3JjX2ZpbGVzKQotTE9DQUxfQ0ZMQUdTICs9IFwKLSAgICAtREdURVNUX09TX0xJTlVYX0FORFJPSUQgXAotICAgIC1ER1RFU1RfSEFTX1NURF9TVFJJTkcgXAotCi1MT0NBTF9DX0lOQ0xVREVTICs9IFwKLSAgICBiaW9uaWMgYmlvbmljL2xpYnN0ZGMrKy9pbmNsdWRlIFwKLSAgICBleHRlcm5hbC9ndGVzdC9pbmNsdWRlIFwKLSAgICBleHRlcm5hbC9zdGxwb3J0L3N0bHBvcnQgXAotCi1MT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTIDo9IFwKLSAgICAkKHRlc3RfZm9ydGlmeV9zdGF0aWNfbGlicmFyaWVzKSBcCi0gICAgYmlvbmljLXVuaXQtdGVzdHMtdW53aW5kLXRlc3QtaW1wbCBcCi0KLWluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKLQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUZXN0IGxpYnJhcnkgZm9yIHRoZSB1bml0IHRlc3RzLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jIEJ1aWxkIG5vLWVsZi1oYXNoLXRhYmxlLWxpYnJhcnkuc28gdG8gdGVzdCBkbG9wZW4oMykgb24gYSBsaWJyYXJ5IHRoYXQKLSMgb25seSBoYXMgYSBHTlUtc3R5bGUgaGFzaCB0YWJsZS4gTUlQUyBkb2Vzbid0IHN1cHBvcnQgR05VIGhhc2ggc3R5bGUuCi1pZm5lcSAoJChUQVJHRVRfQVJDSCksbWlwcykKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFIDo9IG5vLWVsZi1oYXNoLXRhYmxlLWxpYnJhcnkKLUxPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawotTE9DQUxfU1JDX0ZJTEVTIDo9IGVtcHR5LmNwcAotTE9DQUxfTERGTEFHUyA6PSAtV2wsLS1oYXNoLXN0eWxlPWdudQotaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQoraWZlcSAoJChNQUxMT0NfSU1QTCksZGxtYWxsb2MpCisgIGxpYkJpb25pY1N0YW5kYXJkVGVzdHNfY2ZsYWdzICs9IC1EVVNFX0RMTUFMTE9DCitlbHNlCisgIGxpYkJpb25pY1N0YW5kYXJkVGVzdHNfY2ZsYWdzICs9IC1EVVNFX0pFTUFMTE9DCiBlbmRpZgogCitsaWJCaW9uaWNTdGFuZGFyZFRlc3RzX2NwcGZsYWdzIDo9IFwKKyAgICAkKHRlc3RfY3BwZmxhZ3MpIFwKKworbGliQmlvbmljU3RhbmRhcmRUZXN0c19jX2luY2x1ZGVzIDo9IFwKKyAgICBiaW9uaWMvbGliYyBcCisKK2xpYkJpb25pY1N0YW5kYXJkVGVzdHNfbGRsaWJzX2hvc3QgOj0gXAorICAgIC1scnQgXAorCitsaWJCaW9uaWNTdGFuZGFyZFRlc3RzX3dob2xlX3N0YXRpY19saWJyYXJpZXMgOj0gXAorICAgIGxpYkJpb25pY1Vud2luZFRlc3QgXAorCittb2R1bGUgOj0gbGliQmlvbmljU3RhbmRhcmRUZXN0cworbW9kdWxlX3RhZyA6PSBvcHRpb25hbAorYnVpbGRfdHlwZSA6PSB0YXJnZXQKK2J1aWxkX3RhcmdldCA6PSBTVEFUSUNfVEVTVF9MSUJSQVJZCitpbmNsdWRlICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC5taworYnVpbGRfdHlwZSA6PSBob3N0CitpbmNsdWRlICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC5taworCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFVuaXQgdGVzdHMgYnVpbHQgYWdhaW5zdCBnbGliYy4KKyMgU3BlY2lhbCBzdGFjayB1bndpbmRpbmcgdGVzdCBsaWJyYXJ5IGNvbXBpbGVkIHdpdGggc3BlY2lhbCBmbGFncy4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xpYkJpb25pY1Vud2luZFRlc3RfY2ZsYWdzIDo9IFwKKyAgICAkKHRlc3RfY2ZsYWdzKSBcCisgICAgLWZleGNlcHRpb25zIFwKKyAgICAtZm5vbi1jYWxsLWV4Y2VwdGlvbnMgXAorCitsaWJCaW9uaWNVbndpbmRUZXN0X3NyY19maWxlcyA6PSBcCisgICAgc3RhY2tfdW53aW5kaW5nX3Rlc3RfaW1wbC5jIFwKKworbW9kdWxlIDo9IGxpYkJpb25pY1Vud2luZFRlc3QKK21vZHVsZV90YWcgOj0gb3B0aW9uYWwKK2J1aWxkX3R5cGUgOj0gdGFyZ2V0CitidWlsZF90YXJnZXQgOj0gU1RBVElDX1RFU1RfTElCUkFSWQoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKK2J1aWxkX3R5cGUgOj0gaG9zdAoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGb3J0aWZ5IHRlc3RzLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJChmb3JlYWNoIGNvbXBpbGVyLGdjYyBjbGFuZywgXAorICAkKGZvcmVhY2ggdGVzdCwxIDIsIFwKKyAgICAkKGV2YWwgZm9ydGlmeSQodGVzdCktdGVzdHMtJChjb21waWxlcilfY2ZsYWdzIDo9IFwKKyAgICAgICQodGVzdF9jZmxhZ3MpIFwKKyAgICAgIC1VX0ZPUlRJRllfU09VUkNFIFwKKyAgICAgIC1EX0ZPUlRJRllfU09VUkNFPSQodGVzdCkgXAorICAgICAgLURURVNUX05BTUU9Rm9ydGlmeSQodGVzdClfJChjb21waWxlcikpOyBcCisgICAgJChldmFsIGZvcnRpZnkkKHRlc3QpLXRlc3RzLSQoY29tcGlsZXIpX2NmbGFnc19ob3N0IDo9IFwKKyAgICAgIC1Xbm8tZXJyb3IpOyBcCisgICAgJChldmFsIGZvcnRpZnkkKHRlc3QpLXRlc3RzLSQoY29tcGlsZXIpX3NyY19maWxlcyA6PSBcCisgICAgICBmb3J0aWZ5X3Rlc3QuY3BwKTsgXAorICAgICQoZXZhbCBmb3J0aWZ5X2xpYnMgKz0gZm9ydGlmeSQodGVzdCktdGVzdHMtJChjb21waWxlcikpOyBcCisgICkgXAorKQorCittb2R1bGUgOj0gZm9ydGlmeTEtdGVzdHMtZ2NjCittb2R1bGVfdGFnIDo9IG9wdGlvbmFsCitidWlsZF90eXBlIDo9IHRhcmdldAorYnVpbGRfdGFyZ2V0IDo9IFNUQVRJQ19URVNUX0xJQlJBUlkKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCitidWlsZF90eXBlIDo9IGhvc3QKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCisKK21vZHVsZSA6PSBmb3J0aWZ5Mi10ZXN0cy1nY2MKK21vZHVsZV90YWcgOj0gb3B0aW9uYWwKK2J1aWxkX3R5cGUgOj0gdGFyZ2V0CitidWlsZF90YXJnZXQgOj0gU1RBVElDX1RFU1RfTElCUkFSWQoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKK2J1aWxkX3R5cGUgOj0gaG9zdAoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKKworZm9ydGlmeTEtdGVzdHMtY2xhbmdfY2xhbmdfdGFyZ2V0IDo9IHRydWUKK2ZvcnRpZnkxLXRlc3RzLWNsYW5nX2NmbGFnc19ob3N0IDo9IC1EX19jbGFuZ19fCisKK21vZHVsZSA6PSBmb3J0aWZ5MS10ZXN0cy1jbGFuZworbW9kdWxlX3RhZyA6PSBvcHRpb25hbAorYnVpbGRfdHlwZSA6PSB0YXJnZXQKK2J1aWxkX3RhcmdldCA6PSBTVEFUSUNfVEVTVF9MSUJSQVJZCitpbmNsdWRlICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC5taworYnVpbGRfdHlwZSA6PSBob3N0CitpbmNsdWRlICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC5taworCitmb3J0aWZ5Mi10ZXN0cy1jbGFuZ19jbGFuZ190YXJnZXQgOj0gdHJ1ZQorCitmb3J0aWZ5Mi10ZXN0cy1jbGFuZ19jZmxhZ3NfaG9zdCA6PSAtRF9fY2xhbmdfXworCittb2R1bGUgOj0gZm9ydGlmeTItdGVzdHMtY2xhbmcKK21vZHVsZV90YWcgOj0gb3B0aW9uYWwKK2J1aWxkX3R5cGUgOj0gdGFyZ2V0CitidWlsZF90YXJnZXQgOj0gU1RBVElDX1RFU1RfTElCUkFSWQoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKK2J1aWxkX3R5cGUgOj0gaG9zdAoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJyYXJ5IG9mIGFsbCB0ZXN0cyAoZXhjbHVkaW5nIHRoZSBkeW5hbWljIGxpbmtlciB0ZXN0cykuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsaWJCaW9uaWNUZXN0c193aG9sZV9zdGF0aWNfbGlicmFyaWVzIDo9IFwKKyAgICBsaWJCaW9uaWNTdGFuZGFyZFRlc3RzIFwKKyAgICAkKGZvcnRpZnlfbGlicykgXAorCittb2R1bGUgOj0gbGliQmlvbmljVGVzdHMKK21vZHVsZV90YWcgOj0gb3B0aW9uYWwKK2J1aWxkX3R5cGUgOj0gdGFyZ2V0CitidWlsZF90YXJnZXQgOj0gU1RBVElDX1RFU1RfTElCUkFSWQoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKK2J1aWxkX3R5cGUgOj0gaG9zdAoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyBmb3IgdGhlIGRldmljZSB1c2luZyBiaW9uaWMncyAuc28uIFJ1biB3aXRoOgorIyAgIGFkYiBzaGVsbCAvZGF0YS9uYXRpdmV0ZXN0L2Jpb25pYy11bml0LXRlc3RzL2Jpb25pYy11bml0LXRlc3RzMzIKKyMgICBhZGIgc2hlbGwgL2RhdGEvbmF0aXZldGVzdC9iaW9uaWMtdW5pdC10ZXN0cy9iaW9uaWMtdW5pdC10ZXN0czY0CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitiaW9uaWMtdW5pdC10ZXN0c193aG9sZV9zdGF0aWNfbGlicmFyaWVzIDo9IFwKKyAgICBsaWJCaW9uaWNUZXN0cyBcCisKK2Jpb25pYy11bml0LXRlc3RzX3NyY19maWxlcyA6PSBcCisgICAgYXRleGl0X3Rlc3QuY3BwIFwKKyAgICBkbGV4dF90ZXN0LmNwcCBcCisgICAgZGxmY25fdGVzdC5jcHAgXAorCitiaW9uaWMtdW5pdC10ZXN0c19jZmxhZ3MgOj0gJCh0ZXN0X2NmbGFncykKK2Jpb25pYy11bml0LXRlc3RzX2NwcGZsYWdzIDo9ICQodGVzdF9jcHBmbGFncykKKworYmlvbmljLXVuaXQtdGVzdHNfbGRmbGFncyA6PSBcCisgICAgLVdsLC0tZXhwb3J0LWR5bmFtaWMgXAorICAgIC1XbCwtdSxEbFN5bVRlc3RGdW5jdGlvbiBcCisKK2Jpb25pYy11bml0LXRlc3RzX2NfaW5jbHVkZXMgOj0gXAorICAgICQoY2FsbCBpbmNsdWRlLXBhdGgtZm9yLCBsaWJwYWdlbWFwKSBcCisKK2Jpb25pYy11bml0LXRlc3RzX3NoYXJlZF9saWJyYXJpZXNfdGFyZ2V0IDo9IFwKKyAgICBsaWJkbCBcCisgICAgbGlicGFnZW1hcCBcCisKK21vZHVsZSA6PSBiaW9uaWMtdW5pdC10ZXN0cworbW9kdWxlX3RhZyA6PSBvcHRpb25hbAorYnVpbGRfdHlwZSA6PSB0YXJnZXQKK2J1aWxkX3RhcmdldCA6PSBOQVRJVkVfVEVTVAoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyBmb3IgdGhlIGRldmljZSBsaW5rZWQgYWdhaW5zdCBiaW9uaWMncyBzdGF0aWMgbGlicmFyeS4gUnVuIHdpdGg6CisjICAgYWRiIHNoZWxsIC9kYXRhL25hdGl2ZXRlc3QvYmlvbmljLXVuaXQtdGVzdHMtc3RhdGljL2Jpb25pYy11bml0LXRlc3RzLXN0YXRpYzMyCisjICAgYWRiIHNoZWxsIC9kYXRhL25hdGl2ZXRlc3QvYmlvbmljLXVuaXQtdGVzdHMtc3RhdGljL2Jpb25pYy11bml0LXRlc3RzLXN0YXRpYzY0CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitiaW9uaWMtdW5pdC10ZXN0cy1zdGF0aWNfd2hvbGVfc3RhdGljX2xpYnJhcmllcyA6PSBcCisgICAgbGliQmlvbmljVGVzdHMgXAorCitiaW9uaWMtdW5pdC10ZXN0cy1zdGF0aWNfc3RhdGljX2xpYnJhcmllcyA6PSBcCisgICAgbGlic3RscG9ydF9zdGF0aWMgXAorICAgIGxpYm0gXAorICAgIGxpYmMgXAorICAgIGxpYnN0ZGMrKyBcCisKK2Jpb25pYy11bml0LXRlc3RzLXN0YXRpY19mb3JjZV9zdGF0aWNfZXhlY3V0YWJsZSA6PSB0cnVlCisKK21vZHVsZSA6PSBiaW9uaWMtdW5pdC10ZXN0cy1zdGF0aWMKK21vZHVsZV90YWcgOj0gb3B0aW9uYWwKK2J1aWxkX3R5cGUgOj0gdGFyZ2V0CitidWlsZF90YXJnZXQgOj0gTkFUSVZFX1RFU1QKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgdG8gcnVuIG9uIHRoZSBob3N0IGFuZCBsaW5rZWQgYWdhaW5zdCBnbGliYy4gUnVuIHdpdGg6CisjICAgY2QgYmlvbmljL3Rlc3RzOyBtbSBiaW9uaWMtdW5pdC10ZXN0cy1nbGliYy1ydW4KICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotIyBCdWlsZCB0ZXN0cyBmb3IgdGhlIGhvc3QgKHdpdGggZ2xpYmMpLgotIyBOb3RlIHRoYXQgdGhpcyB3aWxsIGJ1aWxkIGFnYWluc3QgZ2xpYmMsIHNvIGl0J3Mgbm90IHVzZWZ1bCBmb3IgdGVzdGluZwotIyBiaW9uaWMncyBpbXBsZW1lbnRhdGlvbiwgYnV0IGl0IGRvZXMgbGV0IHlvdSB1c2UgZ2xpYmMgYXMgYSByZWZlcmVuY2UKLSMgaW1wbGVtZW50YXRpb24gZm9yIHRlc3RpbmcgdGhlIHRlc3RzIHRoZW1zZWx2ZXMuCi1pZmVxICgkKEhPU1RfT1MpLSQoSE9TVF9BUkNIKSxsaW51eC14ODYpCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRSA6PSBiaW9uaWMtdW5pdC10ZXN0cy1nbGliYwotTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCi1MT0NBTF9DRkxBR1MgKz0gJCh0ZXN0X2NfZmxhZ3MpCi1MT0NBTF9MREZMQUdTICs9IC1scHRocmVhZCAtbGRsIC1scnQKLUxPQ0FMX0xERkxBR1MgKz0gJCh0ZXN0X2R5bmFtaWNfbGRmbGFncykKLUxPQ0FMX1NSQ19GSUxFUyA6PSAkKHRlc3Rfc3JjX2ZpbGVzKSAkKHRlc3RfZHluYW1pY19zcmNfZmlsZXMpCi1MT0NBTF9TVEFUSUNfTElCUkFSSUVTICs9IGJpb25pYy11bml0LXRlc3RzLXVud2luZC10ZXN0LWltcGwtaG9zdAotaW5jbHVkZSAkKEJVSUxEX0hPU1RfTkFUSVZFX1RFU1QpCitpZmVxICgkKEhPU1RfT1MpLSQoSE9TVF9BUkNIKSwkKGZpbHRlciAkKEhPU1RfT1MpLSQoSE9TVF9BUkNIKSxsaW51eC14ODYgbGludXgteDg2XzY0KSkKKworYmlvbmljLXVuaXQtdGVzdHMtZ2xpYmNfc3JjX2ZpbGVzIDo9IFwKKyAgICBhdGV4aXRfdGVzdC5jcHAgXAorCitiaW9uaWMtdW5pdC10ZXN0cy1nbGliY193aG9sZV9zdGF0aWNfbGlicmFyaWVzIDo9IFwKKyAgICBsaWJCaW9uaWNTdGFuZGFyZFRlc3RzIFwKKworYmlvbmljLXVuaXQtdGVzdHMtZ2xpYmNfbGRsaWJzIDo9IFwKKyAgICAtbHJ0IC1sZGwgXAorCitiaW9uaWMtdW5pdC10ZXN0cy1nbGliY19jZmxhZ3MgOj0gJCh0ZXN0X2NmbGFncykKK2Jpb25pYy11bml0LXRlc3RzLWdsaWJjX2NwcGZsYWdzIDo9ICQodGVzdF9jcHBmbGFncykKKworbW9kdWxlIDo9IGJpb25pYy11bml0LXRlc3RzLWdsaWJjCittb2R1bGVfdGFnIDo9IG9wdGlvbmFsCitidWlsZF90eXBlIDo9IGhvc3QKK2J1aWxkX3RhcmdldCA6PSBOQVRJVkVfVEVTVAoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKKworaWZuZXEgKCQoVEFSR0VUX0FSQ0gpLCQoZmlsdGVyICQoVEFSR0VUX0FSQ0gpLGFybSBtaXBzIHg4NikpCitMSU5LRVIgPSBsaW5rZXI2NAorTkFUSVZFX1RFU1RfU1VGRklYPTY0CitlbHNlCitMSU5LRVIgPSBsaW5rZXIKK05BVElWRV9URVNUX1NVRkZJWD0zMgorZW5kaWYKIAogIyBndGVzdCBuZWVkcyBBTkRST0lEX0RBVEEvbG9jYWwvdG1wIGZvciBkZWF0aCB0ZXN0IG91dHB1dC4KICMgTWFrZSBzdXJlIHRvIGNyZWF0ZSBBTkRST0lEX0RBVEEvbG9jYWwvdG1wIGlmIGRvZXNuJ3QgZXhpc3QuCiAjIFVzZSB0aGUgY3VycmVudCB0YXJnZXQgb3V0IGRpcmVjdG9yeSBhcyBBTkRST0lEX0RBVEEuCisjIEJJT05JQ19URVNUX0ZMQUdTIGlzIGVpdGhlciBlbXB0eSBvciBpdCBjb21lcyBmcm9tIHRoZSB1c2VyLgogYmlvbmljLXVuaXQtdGVzdHMtZ2xpYmMtcnVuOiBiaW9uaWMtdW5pdC10ZXN0cy1nbGliYwogCW1rZGlyIC1wICQoVEFSR0VUX09VVF9EQVRBKS9sb2NhbC90bXAKIAlBTkRST0lEX0RBVEE9JChUQVJHRVRfT1VUX0RBVEEpIFwKIAlBTkRST0lEX1JPT1Q9JChUQVJHRVRfT1VUKSBcCi0JCSQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2Jpb25pYy11bml0LXRlc3RzLWdsaWJjCi1lbmRpZgorCQkkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9iaW9uaWMtdW5pdC10ZXN0cy1nbGliYyQoTkFUSVZFX1RFU1RfU1VGRklYKSAkKEJJT05JQ19URVNUX0ZMQUdTKQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFJ1biB0aGUgdW5pdCB0ZXN0cyBidWlsdCBhZ2FpbnN0IHg4NiBiaW9uaWMgb24gYW4geDg2IGhvc3QuCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlmZXEgKCQoSE9TVF9PUyktJChIT1NUX0FSQ0gpLGxpbnV4LXg4NikKIGlmZXEgKCQoVEFSR0VUX0FSQ0gpLCQoZmlsdGVyICQoVEFSR0VUX0FSQ0gpLHg4NiB4ODZfNjQpKQotaWZlcSAoJChUQVJHRVRfQVJDSCkseDg2KQotTElOS0VSID0gbGlua2VyCi1lbHNlCi1MSU5LRVIgPSBsaW5rZXI2NAotZW5kaWYKICMgZ3Rlc3QgbmVlZHMgQU5EUk9JRF9EQVRBL2xvY2FsL3RtcCBmb3IgZGVhdGggdGVzdCBvdXRwdXQuCiAjIE1ha2Ugc3VyZSB0byBjcmVhdGUgQU5EUk9JRF9EQVRBL2xvY2FsL3RtcCBpZiBkb2Vzbid0IGV4aXN0LgogIyBiaW9uaWMgaXRzZWxmIHNob3VsZCBhbHdheXMgd29yayByZWxhdGl2ZSB0byBBTkRST0lEX0RBVEEgb3IgQU5EUk9JRF9ST09ULgorIyBCSU9OSUNfVEVTVF9GTEFHUyBpcyBlaXRoZXIgZW1wdHkgb3IgaXQgY29tZXMgZnJvbSB0aGUgdXNlci4KIGJpb25pYy11bml0LXRlc3RzLXJ1bi1vbi1ob3N0OiBiaW9uaWMtdW5pdC10ZXN0cyAkKFRBUkdFVF9PVVRfRVhFQ1VUQUJMRVMpLyQoTElOS0VSKSAkKFRBUkdFVF9PVVRfRVhFQ1VUQUJMRVMpL3NoCiAJaWYgWyAhIC1kIC9zeXN0ZW0gLW8gISAtZCAvc3lzdGVtL2JpbiBdOyB0aGVuIFwKIAkgIGVjaG8gIkF0dGVtcHRpbmcgdG8gY3JlYXRlIC9zeXN0ZW0vYmluIjsgXApAQCAtMjA5LDU5ICszNTMsMTAgQEAKIAlBTkRST0lEX0RBVEE9JChUQVJHRVRfT1VUX0RBVEEpIFwKIAlBTkRST0lEX1JPT1Q9JChUQVJHRVRfT1VUKSBcCiAJTERfTElCUkFSWV9QQVRIPSQoVEFSR0VUX09VVF9TSEFSRURfTElCUkFSSUVTKSBcCi0JCSQoVEFSR0VUX09VVF9EQVRBX05BVElWRV9URVNUUykvYmlvbmljLXVuaXQtdGVzdHMvYmlvbmljLXVuaXQtdGVzdHMKLWVuZGlmCisJCSQoVEFSR0VUX09VVF9EQVRBX05BVElWRV9URVNUUykvYmlvbmljLXVuaXQtdGVzdHMvYmlvbmljLXVuaXQtdGVzdHMkKE5BVElWRV9URVNUX1NVRkZJWCkgJChCSU9OSUNfVEVTVF9GTEFHUykKIGVuZGlmCiAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRk9SVElGWV9TT1VSQ0UgdGVzdHMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VuZGlmICMgbGludXgteDg2CiAKLWZvcnRpZnlfY19pbmNsdWRlcyA9IFwKLSAgICBiaW9uaWMgXAotICAgIGJpb25pYy9saWJzdGRjKysvaW5jbHVkZSBcCi0gICAgZXh0ZXJuYWwvc3RscG9ydC9zdGxwb3J0IFwKLSAgICBleHRlcm5hbC9ndGVzdC9pbmNsdWRlCi1mb3J0aWZ5X3Rlc3RfZmlsZXMgPSBmb3J0aWZ5X3Rlc3QuY3BwCi0KLSMgLVduby1lcnJvcj11bnVzZWQtcGFyYW1ldGVyIG5lZWRlZCBhcwotIyBleHRlcm5hbC9zdGxwb3J0L3N0bHBvcnQvc3RsL190aHJlYWRzLmMgKGluY2x1ZGVkIGZyb20KLSMgZXh0ZXJuYWwvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oKSBkb2VzIG5vdCBjb21waWxlIGNsZWFubHkgdW5kZXIKLSMgY2xhbmcuIFRPRE86IGZpeCB0aGlzLgotZm9ydGlmeV9jX2ZsYWdzID0gJCh0ZXN0X2NfZmxhZ3MpIC1Xbm8tZXJyb3I9dW51c2VkLXBhcmFtZXRlcgotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX1NSQ19GSUxFUyA6PSAkKGZvcnRpZnlfdGVzdF9maWxlcykKLUxPQ0FMX01PRFVMRSA6PSBmb3J0aWZ5MS10ZXN0cy1nY2MKLUxPQ0FMX0NGTEFHUyArPSAkKGZvcnRpZnlfY19mbGFncykgLVVfRk9SVElGWV9TT1VSQ0UgLURfRk9SVElGWV9TT1VSQ0U9MSAtRFRFU1RfTkFNRT1Gb3J0aWZ5MV9HY2MKLUxPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawotTE9DQUxfQ19JTkNMVURFUyArPSAkKGZvcnRpZnlfY19pbmNsdWRlcykKLWluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKLQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi1MT0NBTF9TUkNfRklMRVMgOj0gJChmb3J0aWZ5X3Rlc3RfZmlsZXMpCi1MT0NBTF9NT0RVTEUgOj0gZm9ydGlmeTItdGVzdHMtZ2NjCi1MT0NBTF9DRkxBR1MgKz0gJChmb3J0aWZ5X2NfZmxhZ3MpIC1VX0ZPUlRJRllfU09VUkNFIC1EX0ZPUlRJRllfU09VUkNFPTIgLURURVNUX05BTUU9Rm9ydGlmeTJfR2NjCi1MT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKLUxPQ0FMX0NfSU5DTFVERVMgKz0gJChmb3J0aWZ5X2NfaW5jbHVkZXMpCi1pbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfU1JDX0ZJTEVTIDo9ICQoZm9ydGlmeV90ZXN0X2ZpbGVzKQotTE9DQUxfTU9EVUxFIDo9IGZvcnRpZnkxLXRlc3RzLWNsYW5nCi1MT0NBTF9DTEFORyA6PSB0cnVlCi1MT0NBTF9DRkxBR1MgKz0gJChmb3J0aWZ5X2NfZmxhZ3MpIC1VX0ZPUlRJRllfU09VUkNFIC1EX0ZPUlRJRllfU09VUkNFPTEgLURURVNUX05BTUU9Rm9ydGlmeTFfQ2xhbmcKLUxPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawotTE9DQUxfQ19JTkNMVURFUyArPSAkKGZvcnRpZnlfY19pbmNsdWRlcykKLWluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKLQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi1MT0NBTF9TUkNfRklMRVMgOj0gJChmb3J0aWZ5X3Rlc3RfZmlsZXMpCi1MT0NBTF9NT0RVTEUgOj0gZm9ydGlmeTItdGVzdHMtY2xhbmcKLUxPQ0FMX0NMQU5HIDo9IHRydWUKLUxPQ0FMX0NGTEFHUyArPSAkKGZvcnRpZnlfY19mbGFncykgLVVfRk9SVElGWV9TT1VSQ0UgLURfRk9SVElGWV9TT1VSQ0U9MiAtRFRFU1RfTkFNRT1Gb3J0aWZ5Ml9DbGFuZwotTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCi1MT0NBTF9DX0lOQ0xVREVTICs9ICQoZm9ydGlmeV9jX2luY2x1ZGVzKQotaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQotCitpbmNsdWRlICQoY2FsbCBmaXJzdC1tYWtlZmlsZXMtdW5kZXIsJChMT0NBTF9QQVRIKSkKIGVuZGlmICMgIUJVSUxEX1RJTllfQU5EUk9JRApkaWZmIC0tZ2l0IGEvdGVzdHMvVGVtcG9yYXJ5RmlsZS5oIGIvdGVzdHMvVGVtcG9yYXJ5RmlsZS5oCmluZGV4IGIzZjA4NWYuLmM0ZWUyZDUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL1RlbXBvcmFyeUZpbGUuaAorKysgYi90ZXN0cy9UZW1wb3JhcnlGaWxlLmgKQEAgLTE0LDMyICsxNCw2NyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAorI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLWNsYXNzIFRlbXBvcmFyeUZpbGUgewordGVtcGxhdGU8aW50ICgqbWtfZm4pKGNoYXIqKT4KK2NsYXNzIEdlbmVyaWNUZW1wb3JhcnlGaWxlIHsKICBwdWJsaWM6Ci0gIFRlbXBvcmFyeUZpbGUoKSB7Ci0gICAgLy8gU2luY2Ugd2UgbWlnaHQgYmUgcnVubmluZyBvbiB0aGUgaG9zdCBvciB0aGUgdGFyZ2V0LCBhbmQgaWYgd2UncmUKLSAgICAvLyBydW5uaW5nIG9uIHRoZSBob3N0IHdlIG1pZ2h0IGJlIHJ1bm5pbmcgdW5kZXIgYmlvbmljIG9yIGdsaWJjLAotICAgIC8vIGxldCdzIGp1c3QgdHJ5IGJvdGggcG9zc2libGUgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIGFuZCB0YWtlIHRoZQotICAgIC8vIGZpcnN0IG9uZSB0aGF0IHdvcmtzLgotICAgIGluaXQoIi9kYXRhL2xvY2FsL3RtcCIpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgaW5pdCgiL3RtcCIpOworICBHZW5lcmljVGVtcG9yYXJ5RmlsZShjb25zdCBjaGFyKiBkaXJwYXRoID0gTlVMTCkgeworICAgIGlmIChkaXJwYXRoICE9IE5VTEwpIHsKKyAgICAgIGluaXQoZGlycGF0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFNpbmNlIHdlIG1pZ2h0IGJlIHJ1bm5pbmcgb24gdGhlIGhvc3Qgb3IgdGhlIHRhcmdldCwgYW5kIGlmIHdlJ3JlCisgICAgICAvLyBydW5uaW5nIG9uIHRoZSBob3N0IHdlIG1pZ2h0IGJlIHJ1bm5pbmcgdW5kZXIgYmlvbmljIG9yIGdsaWJjLAorICAgICAgLy8gbGV0J3MganVzdCB0cnkgYm90aCBwb3NzaWJsZSB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgYW5kIHRha2UgdGhlCisgICAgICAvLyBmaXJzdCBvbmUgdGhhdCB3b3Jrcy4KKyAgICAgIGluaXQoIi9kYXRhL2xvY2FsL3RtcCIpOworICAgICAgaWYgKGZkID09IC0xKSB7CisgICAgICAgIGluaXQoIi90bXAiKTsKKyAgICAgIH0KICAgICB9CiAgIH0KIAotICB+VGVtcG9yYXJ5RmlsZSgpIHsKKyAgfkdlbmVyaWNUZW1wb3JhcnlGaWxlKCkgewogICAgIGNsb3NlKGZkKTsKICAgICB1bmxpbmsoZmlsZW5hbWUpOwogICB9CiAKKyAgdm9pZCByZW9wZW4oKSB7CisgICAgY2xvc2UoZmQpOworICAgIGZkID0gb3BlbihmaWxlbmFtZSwgT19SRFdSKTsKKyAgfQorCiAgIGludCBmZDsKICAgY2hhciBmaWxlbmFtZVsxMDI0XTsKIAogIHByaXZhdGU6CiAgIHZvaWQgaW5pdChjb25zdCBjaGFyKiB0bXBfZGlyKSB7CiAgICAgc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIlcy9UZW1wb3JhcnlGaWxlLVhYWFhYWCIsIHRtcF9kaXIpOwotICAgIGZkID0gbWtzdGVtcChmaWxlbmFtZSk7CisgICAgZmQgPSBta19mbihmaWxlbmFtZSk7CiAgIH0KIH07CisKK3R5cGVkZWYgR2VuZXJpY1RlbXBvcmFyeUZpbGU8bWtzdGVtcD4gVGVtcG9yYXJ5RmlsZTsKKworY2xhc3MgVGVtcG9yYXJ5RGlyIHsKKyBwdWJsaWM6CisgIFRlbXBvcmFyeURpcigpIHsKKyAgICBpZiAoIWluaXQoIi9kYXRhL2xvY2FsL3RtcCIpKSB7CisgICAgICBpbml0KCIvdG1wIik7CisgICAgfQorICB9CisKKyAgflRlbXBvcmFyeURpcigpIHsKKyAgICBybWRpcihkaXJuYW1lKTsKKyAgfQorCisgIGNoYXIgZGlybmFtZVsxMDI0XTsKKworIHByaXZhdGU6CisgIGJvb2wgaW5pdChjb25zdCBjaGFyKiB0bXBfZGlyKSB7CisgICAgc25wcmludGYoZGlybmFtZSwgc2l6ZW9mKGRpcm5hbWUpLCAiJXMvVGVtcG9yYXJ5RGlyLVhYWFhYWCIsIHRtcF9kaXIpOworICAgIHJldHVybiAobWtkdGVtcChkaXJuYW1lKSAhPSBOVUxMKTsKKyAgfQorCit9OwpkaWZmIC0tZ2l0IGEvdGVzdHMvYXJwYV9pbmV0X3Rlc3QuY3BwIGIvdGVzdHMvYXJwYV9pbmV0X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNTMzMzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9hcnBhX2luZXRfdGVzdC5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKK1RFU1QoYXJwYV9pbmV0LCBpbmV0X2FkZHIpIHsKKyAgQVNTRVJUX0VRKChodG9ubCkoMHg3ZjAwMDAwMSksIGluZXRfYWRkcigiMTI3LjAuMC4xIikpOworfQorCitURVNUKGFycGFfaW5ldCwgaW5ldF9hdG9uKSB7CisgIGluX2FkZHIgYTsKKyAgQVNTRVJUX0VRKDEsIGluZXRfYXRvbigiMTI3LjAuMC4xIiwgJmEpKTsKKyAgQVNTRVJUX0VRKChodG9ubCkoMHg3ZjAwMDAwMSksIGEuc19hZGRyKTsKK30KKworVEVTVChhcnBhX2luZXQsIGluZXRfbG5hb2YpIHsKKyAgaW5fYWRkciBhID0geyBodG9ubCgweDEyMzQ1Njc4KSB9OworICBBU1NFUlRfRVEoMHgwMDM0NTY3OFUsIGluZXRfbG5hb2YoYSkpOworfQorCitURVNUKGFycGFfaW5ldCwgaW5ldF9tYWtlYWRkcikgeworICBpbl9hZGRyIGEgPSBpbmV0X21ha2VhZGRyKDB4MTJVLCAweDM0NTY3OCk7CisgIEFTU0VSVF9FUSgoaHRvbmwpKDB4MTIzNDU2NzgpLCBhLnNfYWRkcik7Cit9CisKK1RFU1QoYXJwYV9pbmV0LCBpbmV0X25ldG9mKSB7CisgIGluX2FkZHIgYSA9IHsgaHRvbmwoMHgxMjM0NTY3OCkgfTsKKyAgQVNTRVJUX0VRKDB4MTJVLCBpbmV0X25ldG9mKGEpKTsKK30KKworVEVTVChhcnBhX2luZXQsIGluZXRfbmV0d29yaykgeworICBBU1NFUlRfRVEoMHg3ZjAwMDAwMVUsIGluZXRfbmV0d29yaygiMTI3LjAuMC4xIikpOworfQorCitURVNUKGFycGFfaW5ldCwgaW5ldF9udG9hKSB7CisgIGluX2FkZHIgYSA9IHsgKGh0b25sKSgweDdmMDAwMDAxKSB9OworICBBU1NFUlRfU1RSRVEoIjEyNy4wLjAuMSIsIGluZXRfbnRvYShhKSk7Cit9CisKK1RFU1QoYXJwYV9pbmV0LCBpbmV0X3B0b25fX2luZXRfbnRvcCkgeworICBzb2NrYWRkcl9zdG9yYWdlIHNzOworICBBU1NFUlRfRVEoMSwgaW5ldF9wdG9uKEFGX0lORVQsICIxMjcuMC4wLjEiLCAmc3MpKTsKKworICBjaGFyIHNbSU5FVF9BRERSU1RSTEVOXTsKKyAgQVNTRVJUX1NUUkVRKCIxMjcuMC4wLjEiLCBpbmV0X250b3AoQUZfSU5FVCwgJnNzLCBzLCBJTkVUX0FERFJTVFJMRU4pKTsKK30KKworVEVTVChhcnBhX2luZXQsIGluZXRfbnRvcF9vdmVyZmxvdykgeworICAvLyBPcGVuQlNEJ3MgaW5ldF9udG9wIGhhZCBhIGJ1ZyB3aGVyZSBwYXNzaW5nIGEgJ3NpemUnIGxhcmdlciB0aGFuIElORVRfQUREUlNUUkxFTgorICAvLyBmb3IgQUZfSU5FVCBvciBJTkVUNl9BRERSU1RSTEVOIGZvciBBRl9JTkVUNiB3b3VsZCBjYXVzZSBpbmV0X250b3AgdG8gb3ZlcmZsb3cgYW4KKyAgLy8gaW50ZXJuYWwgYnVmZmVyLgorCisgIHNvY2thZGRyX3N0b3JhZ2Ugc3M0OworICBBU1NFUlRfRVEoMSwgaW5ldF9wdG9uKEFGX0lORVQsICIxMjcuMC4wLjEiLCAmc3M0KSk7CisKKyAgc29ja2FkZHJfc3RvcmFnZSBzczY7CisgIEFTU0VSVF9FUSgxLCBpbmV0X3B0b24oQUZfSU5FVDYsICI6OjEiLCAmc3M2KSk7CisKKyAgY2hhciBzNFtJTkVUX0FERFJTVFJMRU5dOworICBjaGFyIHM2W0lORVQ2X0FERFJTVFJMRU5dOworICBBU1NFUlRfU1RSRVEoIjEyNy4wLjAuMSIsIGluZXRfbnRvcChBRl9JTkVULCAmc3M0LCBzNCwgSU5FVF9BRERSU1RSTEVOKSk7CisgIEFTU0VSVF9TVFJFUSgiMTI3LjAuMC4xIiwgaW5ldF9udG9wKEFGX0lORVQsICZzczQsIHM0LCAyKklORVRfQUREUlNUUkxFTikpOworICBBU1NFUlRfU1RSRVEoIjo6MSIsIGluZXRfbnRvcChBRl9JTkVUNiwgJnNzNiwgczYsIElORVRfQUREUlNUUkxFTikpOworICBBU1NFUlRfU1RSRVEoIjo6MSIsIGluZXRfbnRvcChBRl9JTkVUNiwgJnNzNiwgczYsIElORVQ2X0FERFJTVFJMRU4pKTsKKyAgQVNTRVJUX1NUUkVRKCI6OjEiLCBpbmV0X250b3AoQUZfSU5FVDYsICZzczYsIHM2LCAyKklORVQ2X0FERFJTVFJMRU4pKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2F0ZXhpdF90ZXN0LmNwcCBiL3Rlc3RzL2F0ZXhpdF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDEyMjBlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYXRleGl0X3Rlc3QuY3BwCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8bGliZ2VuLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPHN0cmluZz4KKworVEVTVChhdGV4aXQsIGRsY2xvc2UpIHsKKyAgc3RkOjpzdHJpbmcgYXRleGl0X2NhbGxfc2VxdWVuY2U7CisgIGJvb2wgdmFsaWRfdGhpc19pbl9zdGF0aWNfZHRvciA9IGZhbHNlOworICB2b2lkKiBoYW5kbGUgPSBkbG9wZW4oImxpYnRlc3RfYXRleGl0LnNvIiwgUlRMRF9OT1cpOworICBBU1NFUlRfVFJVRShoYW5kbGUgIT0gTlVMTCk7CisKKyAgdm9pZCogc3ltID0gZGxzeW0oaGFuZGxlLCAicmVnaXN0ZXJfYXRleGl0Iik7CisgIEFTU0VSVF9UUlVFKHN5bSAhPSBOVUxMKTsKKyAgcmVpbnRlcnByZXRfY2FzdDx2b2lkICgqKShzdGQ6OnN0cmluZyosIGJvb2wqKT4oc3ltKSgmYXRleGl0X2NhbGxfc2VxdWVuY2UsICZ2YWxpZF90aGlzX2luX3N0YXRpY19kdG9yKTsKKworICBBU1NFUlRfRVEoMCwgZGxjbG9zZShoYW5kbGUpKTsKKyAgLy8gdGhpcyB0ZXN0IHZlcmlmaWVzIGF0ZXhpdCBjYWxsIGZyb20gYXRleGl0IGhhbmRsZXIuIGFzIHdlbGwgYXMgdGhlIG9yZGVyIG9mIGNhbGxzCisgIEFTU0VSVF9FUSgiSHVtcHR5IER1bXB0eSBzYXQgb24gYSB3YWxsIiwgYXRleGl0X2NhbGxfc2VxdWVuY2UpOworICBBU1NFUlRfVFJVRSh2YWxpZF90aGlzX2luX3N0YXRpY19kdG9yKTsKK30KKworY2xhc3MgVGVzdE1haW5TdGF0aWNEdG9yQ2xhc3MgeworIHB1YmxpYzoKKyAgVGVzdE1haW5TdGF0aWNEdG9yQ2xhc3MoKSB7CisgICAgZXhwZWN0ZWRfdGhpcyA9IHRoaXM7CisgIH0KKworICB+VGVzdE1haW5TdGF0aWNEdG9yQ2xhc3MoKSB7CisgICAgaWYgKHRoaXMgIT0gZXhwZWN0ZWRfdGhpcykgeworICAgICAgZnByaW50ZihzdGRlcnIsICJcbmVycm9yOiBzdGF0aWMgZC10b3IgY2FsbGVkIHdpdGggaW5jb3JyZWN0IHRoaXMgcG9pbnRlcjogJXAsIGV4cGVjdGVkOiAlcFxuIiwgdGhpcywgZXhwZWN0ZWRfdGhpcyk7CisgICAgfSBlbHNlIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiNiIpOworICAgIH0KKyAgfQorIHByaXZhdGU6CisgIHN0YXRpYyBjb25zdCBUZXN0TWFpblN0YXRpY0R0b3JDbGFzcyogZXhwZWN0ZWRfdGhpczsKK307CisKK2NvbnN0IFRlc3RNYWluU3RhdGljRHRvckNsYXNzKiBUZXN0TWFpblN0YXRpY0R0b3JDbGFzczo6ZXhwZWN0ZWRfdGhpcyA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIGF0ZXhpdF9mdW5jNSgpIHsKKyAgZnByaW50ZihzdGRlcnIsICI1Iik7Cit9CisKK3N0YXRpYyB2b2lkIGF0ZXhpdF9mdW5jNCgpIHsKKyAgZnByaW50ZihzdGRlcnIsICI0Iik7Cit9CisKK3N0YXRpYyB2b2lkIGF0ZXhpdF9mdW5jMygpIHsKKyAgZnByaW50ZihzdGRlcnIsICIzIik7CisgIGF0ZXhpdChhdGV4aXRfZnVuYzQpOworfQorCitzdGF0aWMgdm9pZCBhdGV4aXRfZnVuYzIoKSB7CisgIGZwcmludGYoc3RkZXJyLCAiMiIpOworfQorCitzdGF0aWMgdm9pZCBhdGV4aXRfZnVuYzEoKSB7CisgIGZwcmludGYoc3RkZXJyLCAiMSIpOworfQorCitzdGF0aWMgdm9pZCBhdGV4aXRfbWFpbigpIHsKKyAgLy8gVGhpcyBzaG91bGQgcmVzdWx0IGluICIxMjM0NTYiIG91dHB1dCB0byBzdGRlcnIKKyAgc3RhdGljIFRlc3RNYWluU3RhdGljRHRvckNsYXNzIHN0YXRpY19vYmo7CisgIGF0ZXhpdChhdGV4aXRfZnVuYzUpOworICBhdGV4aXQoYXRleGl0X2Z1bmMzKTsKKyAgYXRleGl0KGF0ZXhpdF9mdW5jMik7CisgIGF0ZXhpdChhdGV4aXRfZnVuYzEpOworICBleGl0KDApOworfQorCitURVNUKGF0ZXhpdCwgZXhpdCkgeworICBBU1NFUlRfRVhJVChhdGV4aXRfbWFpbigpLCB0ZXN0aW5nOjpFeGl0ZWRXaXRoQ29kZSgwKSwgIjEyMzQ1NiIpOworfQorCmRpZmYgLS1naXQgYS90ZXN0cy9jdHlwZV90ZXN0LmNwcCBiL3Rlc3RzL2N0eXBlX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMjdkNjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jdHlwZV90ZXN0LmNwcApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworVEVTVChjdHlwZSwgaXNhbG51bSkgeworICBFWFBFQ1RfVFJVRShpc2FsbnVtKCcxJykpOworICBFWFBFQ1RfVFJVRShpc2FsbnVtKCdhJykpOworICBFWFBFQ1RfVFJVRShpc2FsbnVtKCdBJykpOworICBFWFBFQ1RfRkFMU0UoaXNhbG51bSgnIScpKTsKKyAgRVhQRUNUX0ZBTFNFKGlzYWxudW0oJyAnKSk7Cit9CisKK1RFU1QoY3R5cGUsIGlzYWxwaGEpIHsKKyAgRVhQRUNUX0ZBTFNFKGlzYWxwaGEoJzEnKSk7CisgIEVYUEVDVF9UUlVFKGlzYWxwaGEoJ2EnKSk7CisgIEVYUEVDVF9UUlVFKGlzYWxwaGEoJ0EnKSk7CisgIEVYUEVDVF9GQUxTRShpc2FscGhhKCchJykpOworICBFWFBFQ1RfRkFMU0UoaXNhbHBoYSgnICcpKTsKK30KKworVEVTVChjdHlwZSwgaXNhc2NpaSkgeworICBFWFBFQ1RfVFJVRShpc2FzY2lpKCdceDdmJykpOworICBFWFBFQ1RfRkFMU0UoaXNhc2NpaSgnXHg4MCcpKTsKK30KKworVEVTVChjdHlwZSwgaXNibGFuaykgeworICBFWFBFQ1RfRkFMU0UoaXNibGFuaygnMScpKTsKKyAgRVhQRUNUX1RSVUUoaXNibGFuaygnICcpKTsKKyAgRVhQRUNUX1RSVUUoaXNibGFuaygnXHQnKSk7Cit9CisKK1RFU1QoY3R5cGUsIGlzY250cmwpIHsKKyAgRVhQRUNUX0ZBTFNFKGlzY250cmwoJzEnKSk7CisgIEVYUEVDVF9UUlVFKGlzY250cmwoJ1xiJykpOworfQorCitURVNUKGN0eXBlLCBpc2RpZ2l0KSB7CisgIEVYUEVDVF9UUlVFKGlzZGlnaXQoJzEnKSk7CisgIEVYUEVDVF9GQUxTRShpc2RpZ2l0KCdhJykpOworICBFWFBFQ1RfRkFMU0UoaXNkaWdpdCgneCcpKTsKK30KKworVEVTVChjdHlwZSwgaXNncmFwaCkgeworICBFWFBFQ1RfVFJVRShpc2dyYXBoKCdhJykpOworICBFWFBFQ1RfVFJVRShpc2dyYXBoKCdBJykpOworICBFWFBFQ1RfVFJVRShpc2dyYXBoKCcxJykpOworICBFWFBFQ1RfVFJVRShpc2dyYXBoKCchJykpOworICBFWFBFQ1RfRkFMU0UoaXNncmFwaCgnICcpKTsKK30KKworVEVTVChjdHlwZSwgaXNsb3dlcikgeworICBFWFBFQ1RfVFJVRShpc2xvd2VyKCdhJykpOworICBFWFBFQ1RfRkFMU0UoaXNsb3dlcignQScpKTsKKyAgRVhQRUNUX0ZBTFNFKGlzbG93ZXIoJyEnKSk7Cit9CisKK1RFU1QoY3R5cGUsIGlzcHJpbnQpIHsKKyAgRVhQRUNUX1RSVUUoaXNwcmludCgnYScpKTsKKyAgRVhQRUNUX1RSVUUoaXNwcmludCgnICcpKTsKKyAgRVhQRUNUX0ZBTFNFKGlzcHJpbnQoJ1xiJykpOworfQorCitURVNUKGN0eXBlLCBpc3B1bmN0KSB7CisgIEVYUEVDVF9UUlVFKGlzcHVuY3QoJyEnKSk7CisgIEVYUEVDVF9GQUxTRShpc3B1bmN0KCdhJykpOworICBFWFBFQ1RfRkFMU0UoaXNwdW5jdCgnICcpKTsKKyAgRVhQRUNUX0ZBTFNFKGlzcHVuY3QoJ1xiJykpOworfQorCitURVNUKGN0eXBlLCBpc3NwYWNlKSB7CisgIEVYUEVDVF9UUlVFKGlzc3BhY2UoJyAnKSk7CisgIEVYUEVDVF9UUlVFKGlzc3BhY2UoJ1xmJykpOworICBFWFBFQ1RfVFJVRShpc3NwYWNlKCdcbicpKTsKKyAgRVhQRUNUX1RSVUUoaXNzcGFjZSgnXHInKSk7CisgIEVYUEVDVF9UUlVFKGlzc3BhY2UoJ1x0JykpOworICBFWFBFQ1RfVFJVRShpc3NwYWNlKCdcdicpKTsKKyAgRVhQRUNUX0ZBTFNFKGlzc3BhY2UoJ2EnKSk7CisgIEVYUEVDVF9GQUxTRShpc3NwYWNlKCchJykpOworfQorCitURVNUKGN0eXBlLCBpc3VwcGVyKSB7CisgIEVYUEVDVF9UUlVFKGlzdXBwZXIoJ0EnKSk7CisgIEVYUEVDVF9GQUxTRShpc3VwcGVyKCdhJykpOworICBFWFBFQ1RfRkFMU0UoaXN1cHBlcignIScpKTsKK30KKworVEVTVChjdHlwZSwgaXN4ZGlnaXQpIHsKKyAgRVhQRUNUX1RSVUUoaXN4ZGlnaXQoJzAnKSk7CisgIEVYUEVDVF9GQUxTRShpc3hkaWdpdCgneCcpKTsKKyAgRVhQRUNUX1RSVUUoaXN4ZGlnaXQoJzEnKSk7CisgIEVYUEVDVF9UUlVFKGlzeGRpZ2l0KCdhJykpOworICBFWFBFQ1RfVFJVRShpc3hkaWdpdCgnQScpKTsKKyAgRVhQRUNUX0ZBTFNFKGlzeGRpZ2l0KCdnJykpOworICBFWFBFQ1RfRkFMU0UoaXN4ZGlnaXQoJyAnKSk7Cit9CisKK1RFU1QoY3R5cGUsIHRvYXNjaWkpIHsKKyAgRVhQRUNUX0VRKCdhJywgdG9hc2NpaSgnYScpKTsKKyAgRVhQRUNUX0VRKCdhJywgdG9hc2NpaSgweDgwIHwgJ2EnKSk7Cit9CisKK1RFU1QoY3R5cGUsIHRvbG93ZXIpIHsKKyAgRVhQRUNUX0VRKCchJywgdG9sb3dlcignIScpKTsKKyAgRVhQRUNUX0VRKCdhJywgdG9sb3dlcignYScpKTsKKyAgRVhQRUNUX0VRKCdhJywgdG9sb3dlcignQScpKTsKK30KKworVEVTVChjdHlwZSwgX3RvbG93ZXIpIHsKKyAgLy8gX3RvbG93ZXIgbWF5IG1hbmdsZSBjaGFyYWN0ZXJzIGZvciB3aGljaCBpc3VwcGVyIGlzIGZhbHNlLgorICBFWFBFQ1RfRVEoJ2EnLCBfdG9sb3dlcignQScpKTsKK30KKworVEVTVChjdHlwZSwgdG91cHBlcikgeworICBFWFBFQ1RfRVEoJyEnLCB0b3VwcGVyKCchJykpOworICBFWFBFQ1RfRVEoJ0EnLCB0b3VwcGVyKCdhJykpOworICBFWFBFQ1RfRVEoJ0EnLCB0b3VwcGVyKCdBJykpOworfQorCitURVNUKGN0eXBlLCBfdG91cHBlcikgeworICAvLyBfdG91cHBlciBtYXkgbWFuZ2xlIGNoYXJhY3RlcnMgZm9yIHdoaWNoIGlzbG93ZXIgaXMgZmFsc2UuCisgIEVYUEVDVF9FUSgnQScsIF90b3VwcGVyKCdhJykpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGlyZW50X3Rlc3QuY3BwIGIvdGVzdHMvZGlyZW50X3Rlc3QuY3BwCmluZGV4IDQ4Y2E4MTkuLjZhYWRiMzcgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RpcmVudF90ZXN0LmNwcAorKysgYi90ZXN0cy9kaXJlbnRfdGVzdC5jcHAKQEAgLTM3LDIxICszNywzMSBAQAogICBBU1NFUlRfVFJVRShuYW1lcy5maW5kKCJzdGF0IikgIT0gbmFtZXMuZW5kKCkpOwogfQogCi1URVNUKGRpcmVudCwgc2NhbmRpcikgewordGVtcGxhdGUgPHR5cGVuYW1lIERpckVudFQ+Cit2b2lkIFNjYW5FbnRyaWVzKERpckVudFQqKiBlbnRyaWVzLCBpbnQgZW50cnlfY291bnQsCisgICAgICAgICAgICAgICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiYgbmFtZV9zZXQsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgbmFtZV9saXN0KSB7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnRyeV9jb3VudCk7ICsraSkgeworICAgIG5hbWVfc2V0Lmluc2VydChlbnRyaWVzW2ldLT5kX25hbWUpOworICAgIG5hbWVfbGlzdC5wdXNoX2JhY2soZW50cmllc1tpXS0+ZF9uYW1lKTsKKyAgICBmcmVlKGVudHJpZXNbaV0pOworICB9CisgIGZyZWUoZW50cmllcyk7Cit9CisKK1RFU1QoZGlyZW50LCBzY2FuZGlyX3NjYW5kaXI2NCkgewogICAvLyBHZXQgZXZlcnl0aGluZyBmcm9tIC9wcm9jL3NlbGYuLi4KICAgZGlyZW50KiogZW50cmllczsKICAgaW50IGVudHJ5X2NvdW50ID0gc2NhbmRpcigiL3Byb2Mvc2VsZiIsICZlbnRyaWVzLCBOVUxMLCBhbHBoYXNvcnQpOwogICBBU1NFUlRfR0UoZW50cnlfY291bnQsIDApOwogCisgIGRpcmVudDY0KiogZW50cmllczY0OworICBpbnQgZW50cnlfY291bnQ2NCA9IHNjYW5kaXI2NCgiL3Byb2Mvc2VsZiIsICZlbnRyaWVzNjQsIE5VTEwsIGFscGhhc29ydDY0KTsKKyAgQVNTRVJUX0VRKGVudHJ5X2NvdW50LCBlbnRyeV9jb3VudDY0KTsKKwogICAvLyBUdXJuIHRoZSBkaXJlY3RvcnkgZW50cmllcyBpbnRvIGEgc2V0IGFuZCB2ZWN0b3Igb2YgdGhlIG5hbWVzLgogICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbmFtZV9zZXQ7CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB1bnNvcnRlZF9uYW1lX2xpc3Q7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnRyeV9jb3VudCk7ICsraSkgewotICAgIG5hbWVfc2V0Lmluc2VydChlbnRyaWVzW2ldLT5kX25hbWUpOwotICAgIHVuc29ydGVkX25hbWVfbGlzdC5wdXNoX2JhY2soZW50cmllc1tpXS0+ZF9uYW1lKTsKLSAgICBmcmVlKGVudHJpZXNbaV0pOwotICB9Ci0gIGZyZWUoZW50cmllcyk7CisgIFNjYW5FbnRyaWVzKGVudHJpZXMsIGVudHJ5X2NvdW50LCBuYW1lX3NldCwgdW5zb3J0ZWRfbmFtZV9saXN0KTsKIAogICAvLyBObyBkdXBsaWNhdGVzLgogICBBU1NFUlRfRVEobmFtZV9zZXQuc2l6ZSgpLCB1bnNvcnRlZF9uYW1lX2xpc3Quc2l6ZSgpKTsKQEAgLTYxLDYgKzcxLDEzIEBACiAgIHN0ZDo6c29ydChzb3J0ZWRfbmFtZV9saXN0LmJlZ2luKCksIHNvcnRlZF9uYW1lX2xpc3QuZW5kKCkpOwogICBBU1NFUlRfRVEoc29ydGVkX25hbWVfbGlzdCwgdW5zb3J0ZWRfbmFtZV9saXN0KTsKIAorICAvLyBzY2FuZGlyNjQgcmV0dXJuZWQgdGhlIHNhbWUgcmVzdWx0cyBhcyBzY2FuZGlyLgorICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbmFtZV9zZXQ2NDsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHVuc29ydGVkX25hbWVfbGlzdDY0OworICBTY2FuRW50cmllcyhlbnRyaWVzNjQsIGVudHJ5X2NvdW50NjQsIG5hbWVfc2V0NjQsIHVuc29ydGVkX25hbWVfbGlzdDY0KTsKKyAgQVNTRVJUX0VRKG5hbWVfc2V0LCBuYW1lX3NldDY0KTsKKyAgQVNTRVJUX0VRKHVuc29ydGVkX25hbWVfbGlzdCwgdW5zb3J0ZWRfbmFtZV9saXN0NjQpOworCiAgIENoZWNrUHJvY1NlbGYobmFtZV9zZXQpOwogfQogCkBAIC0xMzMsNiArMTUwLDIzIEBACiAgIENoZWNrUHJvY1NlbGYobmFtZV9zZXQpOwogfQogCitURVNUKGRpcmVudCwgcmVhZGRpcjY0KSB7CisgIERJUiogZCA9IG9wZW5kaXIoIi9wcm9jL3NlbGYiKTsKKyAgQVNTRVJUX1RSVUUoZCAhPSBOVUxMKTsKKyAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG5hbWVfc2V0OworICBlcnJubyA9IDA7CisgIGRpcmVudDY0KiBlOworICB3aGlsZSAoKGUgPSByZWFkZGlyNjQoZCkpICE9IE5VTEwpIHsKKyAgICBuYW1lX3NldC5pbnNlcnQoZS0+ZF9uYW1lKTsKKyAgfQorICAvLyBSZWFkaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeSBpcyBub3QgYW4gZXJyb3IuCisgIC8vIHJlYWRkaXI2NCgzKSByZXR1cm5zIE5VTEwsIGJ1dCBsZWF2ZXMgZXJybm8gYXMgMC4KKyAgQVNTRVJUX0VRKDAsIGVycm5vKTsKKyAgQVNTRVJUX0VRKGNsb3NlZGlyKGQpLCAwKTsKKworICBDaGVja1Byb2NTZWxmKG5hbWVfc2V0KTsKK30KKwogVEVTVChkaXJlbnQsIHJlYWRkaXJfcikgewogICBESVIqIGQgPSBvcGVuZGlyKCIvcHJvYy9zZWxmIik7CiAgIEFTU0VSVF9UUlVFKGQgIT0gTlVMTCk7CkBAIC0xNTEsNiArMTg1LDI0IEBACiAgIENoZWNrUHJvY1NlbGYobmFtZV9zZXQpOwogfQogCitURVNUKGRpcmVudCwgcmVhZGRpcjY0X3IpIHsKKyAgRElSKiBkID0gb3BlbmRpcigiL3Byb2Mvc2VsZiIpOworICBBU1NFUlRfVFJVRShkICE9IE5VTEwpOworICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbmFtZV9zZXQ7CisgIGVycm5vID0gMDsKKyAgZGlyZW50NjQgc3RvcmFnZTsKKyAgZGlyZW50NjQqIGUgPSBOVUxMOworICB3aGlsZSAocmVhZGRpcjY0X3IoZCwgJnN0b3JhZ2UsICZlKSA9PSAwICYmIGUgIT0gTlVMTCkgeworICAgIG5hbWVfc2V0Lmluc2VydChlLT5kX25hbWUpOworICB9CisgIC8vIFJlYWRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgZGlyZWN0b3J5IGlzIG5vdCBhbiBlcnJvci4KKyAgLy8gcmVhZGRpcjY0X3IoMykgcmV0dXJucyBOVUxMLCBidXQgbGVhdmVzIGVycm5vIGFzIDAuCisgIEFTU0VSVF9FUSgwLCBlcnJubyk7CisgIEFTU0VSVF9FUShjbG9zZWRpcihkKSwgMCk7CisKKyAgQ2hlY2tQcm9jU2VsZihuYW1lX3NldCk7Cit9CisKIFRFU1QoZGlyZW50LCByZXdpbmRkaXIpIHsKICAgRElSKiBkID0gb3BlbmRpcigiL3Byb2Mvc2VsZiIpOwogICBBU1NFUlRfVFJVRShkICE9IE5VTEwpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGxleHRfdGVzdC5jcHAgYi90ZXN0cy9kbGV4dF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTYzMDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGxleHRfdGVzdC5jcHAKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9kbGV4dC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKworI2luY2x1ZGUgPHBhZ2VtYXAvcGFnZW1hcC5oPgorCisKKyNkZWZpbmUgQVNTRVJUX0RMX05PVE5VTEwocHRyKSBcCisgICAgQVNTRVJUX1RSVUUocHRyICE9IE5VTEwpIDw8ICJkbGVycm9yOiAiIDw8IGRsZXJyb3IoKQorCisjZGVmaW5lIEFTU0VSVF9ETF9aRVJPKGkpIFwKKyAgICBBU1NFUlRfRVEoMCwgaSkgPDwgImRsZXJyb3I6ICIgPDwgZGxlcnJvcigpCisKKyNkZWZpbmUgQVNTRVJUX05PRVJST1IoaSkgXAorICAgIEFTU0VSVF9ORSgtMSwgaSkgPDwgImVycm5vOiAiIDw8IHN0cmVycm9yKGVycm5vKQorCisKK3R5cGVkZWYgaW50ICgqZm4pKHZvaWQpOworI2RlZmluZSBMSUJOQU1FICJsaWJkbGV4dF90ZXN0LnNvIgorI2RlZmluZSBMSUJOQU1FX05PUkVMUk8gImxpYmRsZXh0X3Rlc3Rfbm9yZWxyby5zbyIKKyNkZWZpbmUgTElCU0laRSAxMDI0KjEwMjQgLy8gaG93IG11Y2ggYWRkcmVzcyBzcGFjZSB0byByZXNlcnZlIGZvciBpdAorCisjaWYgZGVmaW5lZChfX0xQNjRfXykKKyNkZWZpbmUgTElCUEFUSCAiJXMvbmF0aXZldGVzdDY0L2xpYmRsZXh0X3Rlc3RfZmQvbGliZGxleHRfdGVzdF9mZC5zbyIKKyNlbHNlCisjZGVmaW5lIExJQlBBVEggIiVzL25hdGl2ZXRlc3QvbGliZGxleHRfdGVzdF9mZC9saWJkbGV4dF90ZXN0X2ZkLnNvIgorI2VuZGlmCisKK2NsYXNzIERsRXh0VGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworcHJvdGVjdGVkOgorICB2aXJ0dWFsIHZvaWQgU2V0VXAoKSB7CisgICAgaGFuZGxlXyA9IE5VTEw7CisgICAgLy8gdmVyaWZ5IHRoYXQgd2UgZG9uJ3QgaGF2ZSB0aGUgbGlicmFyeSBsb2FkZWQgYWxyZWFkeQorICAgIEFTU0VSVF9FUShOVUxMLCBkbHN5bShSVExEX0RFRkFVTFQsICJnZXRSYW5kb21OdW1iZXIiKSk7CisgICAgLy8gY2FsbCBkbGVycm9yKCkgdG8gc3dhbGxvdyB0aGUgZXJyb3IsIGFuZCBjaGVjayBpdCB3YXMgdGhlIG9uZSB3ZSB3YW50ZWQKKyAgICBBU1NFUlRfU1RSRVEoInVuZGVmaW5lZCBzeW1ib2w6IGdldFJhbmRvbU51bWJlciIsIGRsZXJyb3IoKSk7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKSB7CisgICAgaWYgKGhhbmRsZV8gIT0gTlVMTCkgeworICAgICAgQVNTRVJUX0RMX1pFUk8oZGxjbG9zZShoYW5kbGVfKSk7CisgICAgfQorICB9CisKKyAgdm9pZCogaGFuZGxlXzsKK307CisKK1RFU1RfRihEbEV4dFRlc3QsIEV4dEluZm9OdWxsKSB7CisgIGhhbmRsZV8gPSBhbmRyb2lkX2Rsb3Blbl9leHQoTElCTkFNRSwgUlRMRF9OT1csIE5VTEwpOworICBBU1NFUlRfRExfTk9UTlVMTChoYW5kbGVfKTsKKyAgZm4gZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Zm4+KGRsc3ltKGhhbmRsZV8sICJnZXRSYW5kb21OdW1iZXIiKSk7CisgIEFTU0VSVF9ETF9OT1ROVUxMKGYpOworICBFWFBFQ1RfRVEoNCwgZigpKTsKK30KKworVEVTVF9GKERsRXh0VGVzdCwgRXh0SW5mb05vRmxhZ3MpIHsKKyAgYW5kcm9pZF9kbGV4dGluZm8gZXh0aW5mbzsKKyAgZXh0aW5mby5mbGFncyA9IDA7CisgIGhhbmRsZV8gPSBhbmRyb2lkX2Rsb3Blbl9leHQoTElCTkFNRSwgUlRMRF9OT1csICZleHRpbmZvKTsKKyAgQVNTRVJUX0RMX05PVE5VTEwoaGFuZGxlXyk7CisgIGZuIGYgPSByZWludGVycHJldF9jYXN0PGZuPihkbHN5bShoYW5kbGVfLCAiZ2V0UmFuZG9tTnVtYmVyIikpOworICBBU1NFUlRfRExfTk9UTlVMTChmKTsKKyAgRVhQRUNUX0VRKDQsIGYoKSk7Cit9CisKK1RFU1RfRihEbEV4dFRlc3QsIEV4dEluZm9Vc2VGZCkgeworICBjb25zdCBjaGFyKiBhbmRyb2lkX2RhdGEgPSBnZXRlbnYoIkFORFJPSURfREFUQSIpOworICBBU1NFUlRfVFJVRShhbmRyb2lkX2RhdGEgIT0gTlVMTCk7CisgIGNoYXIgbGliX3BhdGhbUEFUSF9NQVhdOworICBzbnByaW50ZihsaWJfcGF0aCwgc2l6ZW9mKGxpYl9wYXRoKSwgTElCUEFUSCwgYW5kcm9pZF9kYXRhKTsKKworICBhbmRyb2lkX2RsZXh0aW5mbyBleHRpbmZvOworICBleHRpbmZvLmZsYWdzID0gQU5EUk9JRF9ETEVYVF9VU0VfTElCUkFSWV9GRDsKKyAgZXh0aW5mby5saWJyYXJ5X2ZkID0gVEVNUF9GQUlMVVJFX1JFVFJZKG9wZW4obGliX3BhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKSk7CisgIEFTU0VSVF9UUlVFKGV4dGluZm8ubGlicmFyeV9mZCAhPSAtMSk7CisgIGhhbmRsZV8gPSBhbmRyb2lkX2Rsb3Blbl9leHQobGliX3BhdGgsIFJUTERfTk9XLCAmZXh0aW5mbyk7CisgIEFTU0VSVF9ETF9OT1ROVUxMKGhhbmRsZV8pOworICBmbiBmID0gcmVpbnRlcnByZXRfY2FzdDxmbj4oZGxzeW0oaGFuZGxlXywgImdldFJhbmRvbU51bWJlciIpKTsKKyAgQVNTRVJUX0RMX05PVE5VTEwoZik7CisgIEVYUEVDVF9FUSg0LCBmKCkpOworfQorCitURVNUX0YoRGxFeHRUZXN0LCBSZXNlcnZlZCkgeworICB2b2lkKiBzdGFydCA9IG1tYXAoTlVMTCwgTElCU0laRSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsCisgICAgICAgICAgICAgICAgICAgICAtMSwgMCk7CisgIEFTU0VSVF9UUlVFKHN0YXJ0ICE9IE1BUF9GQUlMRUQpOworICBhbmRyb2lkX2RsZXh0aW5mbyBleHRpbmZvOworICBleHRpbmZvLmZsYWdzID0gQU5EUk9JRF9ETEVYVF9SRVNFUlZFRF9BRERSRVNTOworICBleHRpbmZvLnJlc2VydmVkX2FkZHIgPSBzdGFydDsKKyAgZXh0aW5mby5yZXNlcnZlZF9zaXplID0gTElCU0laRTsKKyAgaGFuZGxlXyA9IGFuZHJvaWRfZGxvcGVuX2V4dChMSUJOQU1FLCBSVExEX05PVywgJmV4dGluZm8pOworICBBU1NFUlRfRExfTk9UTlVMTChoYW5kbGVfKTsKKyAgZm4gZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Zm4+KGRsc3ltKGhhbmRsZV8sICJnZXRSYW5kb21OdW1iZXIiKSk7CisgIEFTU0VSVF9ETF9OT1ROVUxMKGYpOworICBFWFBFQ1RfR0UoZiwgc3RhcnQpOworICBFWFBFQ1RfTFQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZiksCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPihzdGFydCkgKyBMSUJTSVpFKTsKKyAgRVhQRUNUX0VRKDQsIGYoKSk7Cit9CisKK1RFU1RfRihEbEV4dFRlc3QsIFJlc2VydmVkVG9vU21hbGwpIHsKKyAgdm9pZCogc3RhcnQgPSBtbWFwKE5VTEwsIFBBR0VfU0laRSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsCisgICAgICAgICAgICAgICAgICAgICAtMSwgMCk7CisgIEFTU0VSVF9UUlVFKHN0YXJ0ICE9IE1BUF9GQUlMRUQpOworICBhbmRyb2lkX2RsZXh0aW5mbyBleHRpbmZvOworICBleHRpbmZvLmZsYWdzID0gQU5EUk9JRF9ETEVYVF9SRVNFUlZFRF9BRERSRVNTOworICBleHRpbmZvLnJlc2VydmVkX2FkZHIgPSBzdGFydDsKKyAgZXh0aW5mby5yZXNlcnZlZF9zaXplID0gUEFHRV9TSVpFOworICBoYW5kbGVfID0gYW5kcm9pZF9kbG9wZW5fZXh0KExJQk5BTUUsIFJUTERfTk9XLCAmZXh0aW5mbyk7CisgIEVYUEVDVF9FUShOVUxMLCBoYW5kbGVfKTsKK30KKworVEVTVF9GKERsRXh0VGVzdCwgUmVzZXJ2ZWRIaW50KSB7CisgIHZvaWQqIHN0YXJ0ID0gbW1hcChOVUxMLCBMSUJTSVpFLCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywKKyAgICAgICAgICAgICAgICAgICAgIC0xLCAwKTsKKyAgQVNTRVJUX1RSVUUoc3RhcnQgIT0gTUFQX0ZBSUxFRCk7CisgIGFuZHJvaWRfZGxleHRpbmZvIGV4dGluZm87CisgIGV4dGluZm8uZmxhZ3MgPSBBTkRST0lEX0RMRVhUX1JFU0VSVkVEX0FERFJFU1NfSElOVDsKKyAgZXh0aW5mby5yZXNlcnZlZF9hZGRyID0gc3RhcnQ7CisgIGV4dGluZm8ucmVzZXJ2ZWRfc2l6ZSA9IExJQlNJWkU7CisgIGhhbmRsZV8gPSBhbmRyb2lkX2Rsb3Blbl9leHQoTElCTkFNRSwgUlRMRF9OT1csICZleHRpbmZvKTsKKyAgQVNTRVJUX0RMX05PVE5VTEwoaGFuZGxlXyk7CisgIGZuIGYgPSByZWludGVycHJldF9jYXN0PGZuPihkbHN5bShoYW5kbGVfLCAiZ2V0UmFuZG9tTnVtYmVyIikpOworICBBU1NFUlRfRExfTk9UTlVMTChmKTsKKyAgRVhQRUNUX0dFKGYsIHN0YXJ0KTsKKyAgRVhQRUNUX0xUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGYpLAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RhcnQpICsgTElCU0laRSk7CisgIEVYUEVDVF9FUSg0LCBmKCkpOworfQorCitURVNUX0YoRGxFeHRUZXN0LCBSZXNlcnZlZEhpbnRUb29TbWFsbCkgeworICB2b2lkKiBzdGFydCA9IG1tYXAoTlVMTCwgUEFHRV9TSVpFLCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywKKyAgICAgICAgICAgICAgICAgICAgIC0xLCAwKTsKKyAgQVNTRVJUX1RSVUUoc3RhcnQgIT0gTUFQX0ZBSUxFRCk7CisgIGFuZHJvaWRfZGxleHRpbmZvIGV4dGluZm87CisgIGV4dGluZm8uZmxhZ3MgPSBBTkRST0lEX0RMRVhUX1JFU0VSVkVEX0FERFJFU1NfSElOVDsKKyAgZXh0aW5mby5yZXNlcnZlZF9hZGRyID0gc3RhcnQ7CisgIGV4dGluZm8ucmVzZXJ2ZWRfc2l6ZSA9IFBBR0VfU0laRTsKKyAgaGFuZGxlXyA9IGFuZHJvaWRfZGxvcGVuX2V4dChMSUJOQU1FLCBSVExEX05PVywgJmV4dGluZm8pOworICBBU1NFUlRfRExfTk9UTlVMTChoYW5kbGVfKTsKKyAgZm4gZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Zm4+KGRsc3ltKGhhbmRsZV8sICJnZXRSYW5kb21OdW1iZXIiKSk7CisgIEFTU0VSVF9ETF9OT1ROVUxMKGYpOworICBFWFBFQ1RfVFJVRShmIDwgc3RhcnQgfHwgKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGYpID49CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RhcnQpICsgUEFHRV9TSVpFKSk7CisgIEVYUEVDVF9FUSg0LCBmKCkpOworfQorCitjbGFzcyBEbEV4dFJlbHJvU2hhcmluZ1Rlc3QgOiBwdWJsaWMgRGxFeHRUZXN0IHsKK3Byb3RlY3RlZDoKKyAgdmlydHVhbCB2b2lkIFNldFVwKCkgeworICAgIERsRXh0VGVzdDo6U2V0VXAoKTsKKyAgICB2b2lkKiBzdGFydCA9IG1tYXAoTlVMTCwgTElCU0laRSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsCisgICAgICAgICAgICAgICAgICAgICAgIC0xLCAwKTsKKyAgICBBU1NFUlRfVFJVRShzdGFydCAhPSBNQVBfRkFJTEVEKTsKKyAgICBleHRpbmZvXy5mbGFncyA9IEFORFJPSURfRExFWFRfUkVTRVJWRURfQUREUkVTUzsKKyAgICBleHRpbmZvXy5yZXNlcnZlZF9hZGRyID0gc3RhcnQ7CisgICAgZXh0aW5mb18ucmVzZXJ2ZWRfc2l6ZSA9IExJQlNJWkU7CisgICAgZXh0aW5mb18ucmVscm9fZmQgPSAtMTsKKworICAgIGNvbnN0IGNoYXIqIGFuZHJvaWRfZGF0YSA9IGdldGVudigiQU5EUk9JRF9EQVRBIik7CisgICAgQVNTRVJUX1RSVUUoYW5kcm9pZF9kYXRhICE9IE5VTEwpOworICAgIHNucHJpbnRmKHJlbHJvX2ZpbGVfLCBzaXplb2YocmVscm9fZmlsZV8pLCAiJXMvbG9jYWwvdG1wL2xpYmRsZXh0X3Rlc3QucmVscm8iLCBhbmRyb2lkX2RhdGEpOworICB9CisKKyAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkgeworICAgIERsRXh0VGVzdDo6VGVhckRvd24oKTsKKyAgICBpZiAoZXh0aW5mb18ucmVscm9fZmQgIT0gLTEpIHsKKyAgICAgIEFTU0VSVF9OT0VSUk9SKGNsb3NlKGV4dGluZm9fLnJlbHJvX2ZkKSk7CisgICAgfQorICB9CisKKyAgdm9pZCBDcmVhdGVSZWxyb0ZpbGUoY29uc3QgY2hhciogbGliKSB7CisgICAgaW50IHJlbHJvX2ZkID0gb3BlbihyZWxyb19maWxlXywgT19DUkVBVCB8IE9fUkRXUiB8IE9fVFJVTkMsIDA2NDQpOworICAgIEFTU0VSVF9OT0VSUk9SKHJlbHJvX2ZkKTsKKworICAgIHBpZF90IHBpZCA9IGZvcmsoKTsKKyAgICBpZiAocGlkID09IDApIHsKKyAgICAgIC8vIGNoaWxkIHByb2Nlc3MKKyAgICAgIGV4dGluZm9fLmZsYWdzIHw9IEFORFJPSURfRExFWFRfV1JJVEVfUkVMUk87CisgICAgICBleHRpbmZvXy5yZWxyb19mZCA9IHJlbHJvX2ZkOworICAgICAgdm9pZCogaGFuZGxlID0gYW5kcm9pZF9kbG9wZW5fZXh0KGxpYiwgUlRMRF9OT1csICZleHRpbmZvXyk7CisgICAgICBpZiAoaGFuZGxlID09IE5VTEwpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJpbiBjaGlsZDogJXNcbiIsIGRsZXJyb3IoKSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgICB9CisgICAgICBleGl0KDApOworICAgIH0KKworICAgIC8vIGNvbnRpbnVpbmcgaW4gcGFyZW50CisgICAgQVNTRVJUX05PRVJST1IoY2xvc2UocmVscm9fZmQpKTsKKyAgICBBU1NFUlRfTk9FUlJPUihwaWQpOworICAgIGludCBzdGF0dXM7CisgICAgQVNTRVJUX0VRKHBpZCwgd2FpdHBpZChwaWQsICZzdGF0dXMsIDApKTsKKyAgICBBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7CisgICAgQVNTRVJUX0VRKDAsIFdFWElUU1RBVFVTKHN0YXR1cykpOworCisgICAgLy8gcmVvcGVuIGZpbGUgZm9yIHJlYWRpbmcgc28gaXQgY2FuIGJlIHVzZWQKKyAgICByZWxyb19mZCA9IG9wZW4ocmVscm9fZmlsZV8sIE9fUkRPTkxZKTsKKyAgICBBU1NFUlRfTk9FUlJPUihyZWxyb19mZCk7CisgICAgZXh0aW5mb18uZmxhZ3MgfD0gQU5EUk9JRF9ETEVYVF9VU0VfUkVMUk87CisgICAgZXh0aW5mb18ucmVscm9fZmQgPSByZWxyb19mZDsKKyAgfQorCisgIHZvaWQgVHJ5VXNpbmdSZWxybyhjb25zdCBjaGFyKiBsaWIpIHsKKyAgICBoYW5kbGVfID0gYW5kcm9pZF9kbG9wZW5fZXh0KGxpYiwgUlRMRF9OT1csICZleHRpbmZvXyk7CisgICAgQVNTRVJUX0RMX05PVE5VTEwoaGFuZGxlXyk7CisgICAgZm4gZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Zm4+KGRsc3ltKGhhbmRsZV8sICJnZXRSYW5kb21OdW1iZXIiKSk7CisgICAgQVNTRVJUX0RMX05PVE5VTEwoZik7CisgICAgRVhQRUNUX0VRKDQsIGYoKSk7CisgIH0KKworICB2b2lkIFNwYXduQ2hpbGRyZW5BbmRNZWFzdXJlUHNzKGNvbnN0IGNoYXIqIGxpYiwgYm9vbCBzaGFyZV9yZWxybywgc2l6ZV90KiBwc3Nfb3V0KTsKKworICBhbmRyb2lkX2RsZXh0aW5mbyBleHRpbmZvXzsKKyAgY2hhciByZWxyb19maWxlX1tQQVRIX01BWF07Cit9OworCitURVNUX0YoRGxFeHRSZWxyb1NoYXJpbmdUZXN0LCBDaGlsZFdyaXRlc0dvb2REYXRhKSB7CisgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKENyZWF0ZVJlbHJvRmlsZShMSUJOQU1FKSk7CisgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKFRyeVVzaW5nUmVscm8oTElCTkFNRSkpOworfQorCitURVNUX0YoRGxFeHRSZWxyb1NoYXJpbmdUZXN0LCBDaGlsZFdyaXRlc05vUmVscm8pIHsKKyAgQVNTRVJUX05PX0ZBVEFMX0ZBSUxVUkUoQ3JlYXRlUmVscm9GaWxlKExJQk5BTUVfTk9SRUxSTykpOworICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRShUcnlVc2luZ1JlbHJvKExJQk5BTUVfTk9SRUxSTykpOworfQorCitURVNUX0YoRGxFeHRSZWxyb1NoYXJpbmdUZXN0LCBSZWxyb0ZpbGVFbXB0eSkgeworICBpbnQgcmVscm9fZmQgPSBvcGVuKHJlbHJvX2ZpbGVfLCBPX0NSRUFUIHwgT19SRFdSIHwgT19UUlVOQywgMDY0NCk7CisgIEFTU0VSVF9OT0VSUk9SKHJlbHJvX2ZkKTsKKyAgQVNTRVJUX05PRVJST1IoY2xvc2UocmVscm9fZmQpKTsKKworICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRShUcnlVc2luZ1JlbHJvKExJQk5BTUUpKTsKK30KKworVEVTVF9GKERsRXh0UmVscm9TaGFyaW5nVGVzdCwgVmVyaWZ5TWVtb3J5U2F2aW5nKSB7CisgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKENyZWF0ZVJlbHJvRmlsZShMSUJOQU1FKSk7CisgIGludCByZWxyb19mZCA9IG9wZW4ocmVscm9fZmlsZV8sIE9fUkRPTkxZKTsKKyAgQVNTRVJUX05PRVJST1IocmVscm9fZmQpOworICBleHRpbmZvXy5mbGFncyB8PSBBTkRST0lEX0RMRVhUX1VTRV9SRUxSTzsKKyAgZXh0aW5mb18ucmVscm9fZmQgPSByZWxyb19mZDsKKyAgaW50IHBpcGVmZFsyXTsKKyAgQVNTRVJUX05PRVJST1IocGlwZShwaXBlZmQpKTsKKworICBzaXplX3Qgd2l0aG91dF9zaGFyaW5nLCB3aXRoX3NoYXJpbmc7CisgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKFNwYXduQ2hpbGRyZW5BbmRNZWFzdXJlUHNzKExJQk5BTUUsIGZhbHNlLCAmd2l0aG91dF9zaGFyaW5nKSk7CisgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKFNwYXduQ2hpbGRyZW5BbmRNZWFzdXJlUHNzKExJQk5BTUUsIHRydWUsICZ3aXRoX3NoYXJpbmcpKTsKKworICAvLyBXZSBleHBlY3QgdGhlIHNoYXJpbmcgdG8gc2F2ZSBhdCBsZWFzdCAxMCUgb2YgdGhlIHRvdGFsIFBTUy4gSW4gcHJhY3RpY2UKKyAgLy8gaXQgc2F2ZXMgNDAlKyBmb3IgdGhpcyB0ZXN0LgorICBzaXplX3QgZXhwZWN0ZWRfc2l6ZSA9IHdpdGhvdXRfc2hhcmluZyAtICh3aXRob3V0X3NoYXJpbmcvMTApOworICBFWFBFQ1RfTFQod2l0aF9zaGFyaW5nLCBleHBlY3RlZF9zaXplKTsKK30KKwordm9pZCBnZXRQc3MocGlkX3QgcGlkLCBzaXplX3QqIHBzc19vdXQpIHsKKyAgcG1fa2VybmVsX3QqIGtlcm5lbDsKKyAgQVNTRVJUX0VRKDAsIHBtX2tlcm5lbF9jcmVhdGUoJmtlcm5lbCkpOworCisgIHBtX3Byb2Nlc3NfdCogcHJvY2VzczsKKyAgQVNTRVJUX0VRKDAsIHBtX3Byb2Nlc3NfY3JlYXRlKGtlcm5lbCwgcGlkLCAmcHJvY2VzcykpOworCisgIHBtX21hcF90KiogbWFwczsKKyAgc2l6ZV90IG51bV9tYXBzOworICBBU1NFUlRfRVEoMCwgcG1fcHJvY2Vzc19tYXBzKHByb2Nlc3MsICZtYXBzLCAmbnVtX21hcHMpKTsKKworICBzaXplX3QgdG90YWxfcHNzID0gMDsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1fbWFwczsgaSsrKSB7CisgICAgcG1fbWVtdXNhZ2VfdCB1c2FnZTsKKyAgICBBU1NFUlRfRVEoMCwgcG1fbWFwX3VzYWdlKG1hcHNbaV0sICZ1c2FnZSkpOworICAgIHRvdGFsX3BzcyArPSB1c2FnZS5wc3M7CisgIH0KKyAgKnBzc19vdXQgPSB0b3RhbF9wc3M7CisKKyAgZnJlZShtYXBzKTsKKyAgcG1fcHJvY2Vzc19kZXN0cm95KHByb2Nlc3MpOworICBwbV9rZXJuZWxfZGVzdHJveShrZXJuZWwpOworfQorCit2b2lkIERsRXh0UmVscm9TaGFyaW5nVGVzdDo6U3Bhd25DaGlsZHJlbkFuZE1lYXN1cmVQc3MoY29uc3QgY2hhciogbGliLCBib29sIHNoYXJlX3JlbHJvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogcHNzX291dCkgeworICBjb25zdCBpbnQgQ0hJTERSRU4gPSAyMDsKKworICAvLyBDcmVhdGUgY2hpbGRyZW4KKyAgcGlkX3QgY2hpbGRwaWRbQ0hJTERSRU5dOworICBpbnQgY2hpbGRwaXBlW0NISUxEUkVOXTsKKyAgZm9yIChpbnQgaT0wOyBpPENISUxEUkVOOyArK2kpIHsKKyAgICBjaGFyIHJlYWRfYnVmOworICAgIGludCBjaGlsZF9kb25lX3BpcGVbMl0sIHBhcmVudF9kb25lX3BpcGVbMl07CisgICAgQVNTRVJUX05PRVJST1IocGlwZShjaGlsZF9kb25lX3BpcGUpKTsKKyAgICBBU1NFUlRfTk9FUlJPUihwaXBlKHBhcmVudF9kb25lX3BpcGUpKTsKKworICAgIHBpZF90IGNoaWxkID0gZm9yaygpOworICAgIGlmIChjaGlsZCA9PSAwKSB7CisgICAgICAvLyBjbG9zZSB0aGUgJ3dyb25nJyBlbmRzIG9mIHRoZSBwaXBlcyBpbiB0aGUgY2hpbGQKKyAgICAgIGNsb3NlKGNoaWxkX2RvbmVfcGlwZVswXSk7CisgICAgICBjbG9zZShwYXJlbnRfZG9uZV9waXBlWzFdKTsKKworICAgICAgLy8gb3BlbiB0aGUgbGlicmFyeQorICAgICAgdm9pZCogaGFuZGxlOworICAgICAgaWYgKHNoYXJlX3JlbHJvKSB7CisgICAgICAgIGhhbmRsZSA9IGFuZHJvaWRfZGxvcGVuX2V4dChsaWIsIFJUTERfTk9XLCAmZXh0aW5mb18pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaGFuZGxlID0gZGxvcGVuKGxpYiwgUlRMRF9OT1cpOworICAgICAgfQorICAgICAgaWYgKGhhbmRsZSA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiaW4gY2hpbGQ6ICVzXG4iLCBkbGVycm9yKCkpOworICAgICAgICBleGl0KDEpOworICAgICAgfQorCisgICAgICAvLyBjbG9zZSB3cml0ZSBlbmQgb2YgY2hpbGRfZG9uZV9waXBlIHRvIHNpZ25hbCB0aGUgcGFyZW50IHRoYXQgd2UncmUgZG9uZS4KKyAgICAgIGNsb3NlKGNoaWxkX2RvbmVfcGlwZVsxXSk7CisKKyAgICAgIC8vIHdhaXQgZm9yIHRoZSBwYXJlbnQgdG8gY2xvc2UgcGFyZW50X2RvbmVfcGlwZSwgdGhlbiBleGl0CisgICAgICByZWFkKHBhcmVudF9kb25lX3BpcGVbMF0sICZyZWFkX2J1ZiwgMSk7CisgICAgICBleGl0KDApOworICAgIH0KKworICAgIEFTU0VSVF9OT0VSUk9SKGNoaWxkKTsKKworICAgIC8vIGNsb3NlIHRoZSAnd3JvbmcnIGVuZHMgb2YgdGhlIHBpcGVzIGluIHRoZSBwYXJlbnQKKyAgICBjbG9zZShjaGlsZF9kb25lX3BpcGVbMV0pOworICAgIGNsb3NlKHBhcmVudF9kb25lX3BpcGVbMF0pOworCisgICAgLy8gd2FpdCBmb3IgdGhlIGNoaWxkIHRvIGJlIGRvbmUKKyAgICByZWFkKGNoaWxkX2RvbmVfcGlwZVswXSwgJnJlYWRfYnVmLCAxKTsKKyAgICBjbG9zZShjaGlsZF9kb25lX3BpcGVbMF0pOworCisgICAgLy8gc2F2ZSB0aGUgY2hpbGQncyBwaWQgYW5kIHRoZSBwYXJlbnRfZG9uZV9waXBlCisgICAgY2hpbGRwaWRbaV0gPSBjaGlsZDsKKyAgICBjaGlsZHBpcGVbaV0gPSBwYXJlbnRfZG9uZV9waXBlWzFdOworICB9CisKKyAgLy8gU3VtIHRoZSBQU1Mgb2YgYWxsIHRoZSBjaGlsZHJlbgorICBzaXplX3QgdG90YWxfcHNzID0gMDsKKyAgZm9yIChpbnQgaT0wOyBpPENISUxEUkVOOyArK2kpIHsKKyAgICBzaXplX3QgY2hpbGRfcHNzOworICAgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKGdldFBzcyhjaGlsZHBpZFtpXSwgJmNoaWxkX3BzcykpOworICAgIHRvdGFsX3BzcyArPSBjaGlsZF9wc3M7CisgIH0KKyAgKnBzc19vdXQgPSB0b3RhbF9wc3M7CisKKyAgLy8gQ2xvc2UgcGlwZXMgYW5kIHdhaXQgZm9yIGNoaWxkcmVuIHRvIGV4aXQKKyAgZm9yIChpbnQgaT0wOyBpPENISUxEUkVOOyArK2kpIHsKKyAgICBBU1NFUlRfTk9FUlJPUihjbG9zZShjaGlsZHBpcGVbaV0pKTsKKyAgfQorICBmb3IgKGludCBpPTA7IGk8Q0hJTERSRU47ICsraSkgeworICAgIGludCBzdGF0dXM7CisgICAgQVNTRVJUX0VRKGNoaWxkcGlkW2ldLCB3YWl0cGlkKGNoaWxkcGlkW2ldLCAmc3RhdHVzLCAwKSk7CisgICAgQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cykpOworICAgIEFTU0VSVF9FUSgwLCBXRVhJVFNUQVRVUyhzdGF0dXMpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGxmY25fdGVzdC5jcHAgYi90ZXN0cy9kbGZjbl90ZXN0LmNwcAppbmRleCBmYzkwZGQ5Li40NTdmY2Q1IDEwMDY0NAotLS0gYS90ZXN0cy9kbGZjbl90ZXN0LmNwcAorKysgYi90ZXN0cy9kbGZjbl90ZXN0LmNwcApAQCAtMjcsOSArMjcsMjEgQEAKICNkZWZpbmUgQVNTRVJUX1NVQlNUUihuZWVkbGUsIGhheXN0YWNrKSBcCiAgICAgQVNTRVJUX1BSRURfRk9STUFUMig6OnRlc3Rpbmc6OklzU3Vic3RyaW5nLCBuZWVkbGUsIGhheXN0YWNrKQogCi1zdGF0aWMgYm9vbCBnQ2FsbGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBnX2NhbGxlZCA9IGZhbHNlOwogZXh0ZXJuICJDIiB2b2lkIERsU3ltVGVzdEZ1bmN0aW9uKCkgewotICBnQ2FsbGVkID0gdHJ1ZTsKKyAgZ19jYWxsZWQgPSB0cnVlOworfQorCitzdGF0aWMgaW50IGdfY3Rvcl9mdW5jdGlvbl9jYWxsZWQgPSAwOworCitleHRlcm4gIkMiIHZvaWQgY3Rvcl9mdW5jdGlvbigpIF9fYXR0cmlidXRlX18gKChjb25zdHJ1Y3RvcikpOworCitleHRlcm4gIkMiIHZvaWQgY3Rvcl9mdW5jdGlvbigpIHsKKyAgZ19jdG9yX2Z1bmN0aW9uX2NhbGxlZCA9IDE3OworfQorCitURVNUKGRsZmNuLCBjdG9yX2Z1bmN0aW9uX2NhbGwpIHsKKyAgQVNTRVJUX0VRKDE3LCBnX2N0b3JfZnVuY3Rpb25fY2FsbGVkKTsKIH0KIAogVEVTVChkbGZjbiwgZGxzeW1faW5fc2VsZikgewpAQCAtNDMsMTcgKzU1LDQyIEBACiAKICAgdm9pZCAoKmZ1bmN0aW9uKSgpID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKCopKCk+KHN5bSk7CiAKLSAgZ0NhbGxlZCA9IGZhbHNlOworICBnX2NhbGxlZCA9IGZhbHNlOwogICBmdW5jdGlvbigpOwotICBBU1NFUlRfVFJVRShnQ2FsbGVkKTsKKyAgQVNTRVJUX1RSVUUoZ19jYWxsZWQpOwogCiAgIEFTU0VSVF9FUSgwLCBkbGNsb3NlKHNlbGYpKTsKIH0KIAorVEVTVChkbGZjbiwgZGxzeW1fd2l0aF9kZXBlbmRlbmNpZXMpIHsKKyAgdm9pZCogaGFuZGxlID0gZGxvcGVuKCJsaWJ0ZXN0X3dpdGhfZGVwZW5kZW5jeS5zbyIsIFJUTERfTk9XKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlICE9IE5VTEwpOworICBkbGVycm9yKCk7CisgIC8vIFRoaXMgc3ltYm9sIGlzIGluIERUX05FRURFRCBsaWJyYXJ5LgorICB2b2lkKiBzeW0gPSBkbHN5bShoYW5kbGUsICJnZXRSYW5kb21OdW1iZXIiKTsKKyAgQVNTRVJUX1RSVUUoc3ltICE9IE5VTEwpOworICBpbnQgKCpmbikodm9pZCk7CisgIGZuID0gcmVpbnRlcnByZXRfY2FzdDxpbnQgKCopKHZvaWQpPihzeW0pOworICBFWFBFQ1RfRVEoNCwgZm4oKSk7CisgIGRsY2xvc2UoaGFuZGxlKTsKK30KKworVEVTVChkbGZjbiwgZGxvcGVuX25vbG9hZCkgeworICB2b2lkKiBoYW5kbGUgPSBkbG9wZW4oImxpYnRlc3Rfc2ltcGxlLnNvIiwgUlRMRF9OT1cgfCBSVExEX05PTE9BRCk7CisgIEFTU0VSVF9UUlVFKGhhbmRsZSA9PSBOVUxMKTsKKyAgaGFuZGxlID0gZGxvcGVuKCJsaWJ0ZXN0X3NpbXBsZS5zbyIsIFJUTERfTk9XKTsKKyAgdm9pZCogaGFuZGxlMiA9IGRsb3BlbigibGlidGVzdF9zaW1wbGUuc28iLCBSVExEX05PVyB8IFJUTERfTk9MT0FEKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlICE9IE5VTEwpOworICBBU1NFUlRfVFJVRShoYW5kbGUyICE9IE5VTEwpOworICBBU1NFUlRfVFJVRShoYW5kbGUgPT0gaGFuZGxlMik7CisgIEFTU0VSVF9FUSgwLCBkbGNsb3NlKGhhbmRsZSkpOworICBBU1NFUlRfRVEoMCwgZGxjbG9zZShoYW5kbGUyKSk7Cit9CisKIFRFU1QoZGxmY24sIGRsb3Blbl9mYWlsdXJlKSB7CiAgIHZvaWQqIHNlbGYgPSBkbG9wZW4oIi9kb2VzL25vdC9leGlzdCIsIFJUTERfTk9XKTsKICAgQVNTRVJUX1RSVUUoc2VsZiA9PSBOVUxMKTsKLSNpZiBfX0JJT05JQ19fCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBBU1NFUlRfU1RSRVEoImRsb3BlbiBmYWlsZWQ6IGxpYnJhcnkgXCIvZG9lcy9ub3QvZXhpc3RcIiBub3QgZm91bmQiLCBkbGVycm9yKCkpOwogI2Vsc2UKICAgQVNTRVJUX1NUUkVRKCIvZG9lcy9ub3QvZXhpc3Q6IGNhbm5vdCBvcGVuIHNoYXJlZCBvYmplY3QgZmlsZTogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIsIGRsZXJyb3IoKSk7CkBAIC04OSwxNyArMTI2LDE2IEBACiAKICAgdm9pZCogc3ltOwogCi0gIC8vIE5VTEwgaGFuZGxlLgorI2lmIGRlZmluZWQoX19CSU9OSUNfXykgJiYgIWRlZmluZWQoX19MUDY0X18pCisgIC8vIFJUTERfREVGQVVMVCBpbiBscDMyIGJpb25pYyBpcyBub3QgKHZvaWQqKTAKKyAgLy8gc28gaXQgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSB0aGUgTlVMTCBoYW5kbGUuCiAgIHN5bSA9IGRsc3ltKE5VTEwsICJ0ZXN0Iik7CiAgIEFTU0VSVF9UUlVFKHN5bSA9PSBOVUxMKTsKLSNpZiBfX0JJT05JQ19fCiAgIEFTU0VSVF9TVUJTVFIoImRsc3ltIGxpYnJhcnkgaGFuZGxlIGlzIG51bGwiLCBkbGVycm9yKCkpOwotI2Vsc2UKLSAgQVNTRVJUX1NVQlNUUigidW5kZWZpbmVkIHN5bWJvbDogdGVzdCIsIGRsZXJyb3IoKSk7IC8vIGdsaWJjIGlzbid0IHNwZWNpZmljIGFib3V0IHRoZSBmYWlsdXJlLgogI2VuZGlmCiAKICAgLy8gTlVMTCBzeW1ib2wgbmFtZS4KLSNpZiBfX0JJT05JQ19fCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICAvLyBnbGliYyBtYXJrcyB0aGlzIHBhcmFtZXRlciBub24tbnVsbCBhbmQgU0VHVnMgaWYgeW91IGNoZWF0LgogICBzeW0gPSBkbHN5bShzZWxmLCBOVUxMKTsKICAgQVNTRVJUX1RSVUUoc3ltID09IE5VTEwpOwpAQCAtMTUyLDEwICsxODgsOCBAQAogICAvLyBMb29rIGluIC9wcm9jL3BpZC9tYXBzIHRvIGZpbmQgb3V0IHdoYXQgYWRkcmVzcyB3ZSB3ZXJlIGxvYWRlZCBhdC4KICAgLy8gVE9ETzogZmFjdG9yIC9wcm9jL3BpZC9tYXBzIHBhcnNpbmcgb3V0IGludG8gYSBjbGFzcyBhbmQgcmV1c2UgYWxsIG92ZXIgYmlvbmljLgogICB2b2lkKiBiYXNlX2FkZHJlc3MgPSBOVUxMOwotICBjaGFyIHBhdGhbUEFUSF9NQVhdOwotICBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIvcHJvYy8lZC9tYXBzIiwgZ2V0cGlkKCkpOwogICBjaGFyIGxpbmVbQlVGU0laXTsKLSAgRklMRSogZnAgPSBmb3BlbihwYXRoLCAiciIpOworICBGSUxFKiBmcCA9IGZvcGVuKCIvcHJvYy9zZWxmL21hcHMiLCAiciIpOwogICBBU1NFUlRfVFJVRShmcCAhPSBOVUxMKTsKICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApICE9IE5VTEwpIHsKICAgICB1aW50cHRyX3Qgc3RhcnQgPSBzdHJ0b3VsKGxpbmUsIDAsIDE2KTsKQEAgLTIwNiw3ICsyNDAsNyBAQAogICBkbGVycm9yKCk7IC8vIENsZWFyIGFueSBwZW5kaW5nIGVycm9ycy4KICAgdm9pZCogaGFuZGxlOwogCi0jaWZkZWYgX19HTElCQ19fCisjaWYgZGVmaW5lZChfX0dMSUJDX18pCiAgIC8vIGdsaWJjIHdhcyBzbWFydCBlbm91Z2ggbm90IHRvIGRlZmluZSBSVExEX05PVyBhcyAwLCBzbyBpdCBjYW4gZGV0ZWN0IG1pc3NpbmcgZmxhZ3MuCiAgIGhhbmRsZSA9IGRsb3BlbihOVUxMLCAwKTsKICAgQVNTRVJUX1RSVUUoaGFuZGxlID09IE5VTEwpOwpAQCAtMjQyLDMgKzI3NiwyMyBAQAogICB2b2lkKiBhZGRyID0gZGxzeW0oUlRMRF9ORVhULCAiZm9wZW4iKTsKICAgQVNTRVJUX1RSVUUoYWRkciAhPSBOVUxMKTsKIH0KKworVEVTVChkbGZjbiwgZGxzeW1fd2Vha19mdW5jKSB7CisgIGRsZXJyb3IoKTsKKyAgdm9pZCogaGFuZGxlID0gZGxvcGVuKCJsaWJ0ZXN0X2Rsc3ltX3dlYWtfZnVuYy5zbyIsUlRMRF9OT1cpOworICBBU1NFUlRfVFJVRShoYW5kbGUgIT0gTlVMTCk7CisKKyAgaW50ICgqd2Vha19mdW5jKSgpOworICB3ZWFrX2Z1bmMgPSByZWludGVycHJldF9jYXN0PGludCAoKikoKT4oZGxzeW0oaGFuZGxlLCAid2Vha19mdW5jIikpOworICBBU1NFUlRfVFJVRSh3ZWFrX2Z1bmMgIT0gTlVMTCkgPDwgImRsZXJyb3I6ICIgPDwgZGxlcnJvcigpOworICBFWFBFQ1RfRVEoNDIsIHdlYWtfZnVuYygpKTsKKyAgZGxjbG9zZShoYW5kbGUpOworfQorCitURVNUKGRsZmNuLCBkbG9wZW5fc3ltbGluaykgeworICB2b2lkKiBoYW5kbGUxID0gZGxvcGVuKCJsaWJkbGV4dF90ZXN0LnNvIiwgUlRMRF9OT1cpOworICB2b2lkKiBoYW5kbGUyID0gZGxvcGVuKCJsaWJkbGV4dF90ZXN0X3YyLnNvIiwgUlRMRF9OT1cpOworICBBU1NFUlRfVFJVRShoYW5kbGUxICE9IE5VTEwpOworICBBU1NFUlRfVFJVRShoYW5kbGUyICE9IE5VTEwpOworICBBU1NFUlRfRVEoaGFuZGxlMSwgaGFuZGxlMik7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9ldmVudGZkX3Rlc3QuY3BwIGIvdGVzdHMvZXZlbnRmZF90ZXN0LmNwcAppbmRleCAyYzJjNWYwLi5hYTg4YTNiIDEwMDY0NAotLS0gYS90ZXN0cy9ldmVudGZkX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL2V2ZW50ZmRfdGVzdC5jcHAKQEAgLTE0LDExICsxNCwyNSBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKwogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKLSNpZiAhZGVmaW5lZChfX0dMSUJDX18pIC8vIEFuZHJvaWQncyBwcmVidWlsdCBnY2MncyBoZWFkZXIgZmlsZXMgZG9uJ3QgaW5jbHVkZSA8c3lzL2V2ZW50ZmQuaD4uCi0KKyNpZiBkZWZpbmVkKF9fQklPTklDX18pIC8vIEFuZHJvaWQncyBwcmVidWlsdCBnY2MncyBoZWFkZXIgZmlsZXMgZG9uJ3QgaW5jbHVkZSA8c3lzL2V2ZW50ZmQuaD4uCiAjaW5jbHVkZSA8c3lzL2V2ZW50ZmQuaD4KKyNlbHNlCisvLyBJbmNsdWRlIHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cyBvZiBzeXMvZXZlbnRmZC5oIHJpZ2h0IGhlcmUuCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK3R5cGVkZWYgdWludDY0X3QgZXZlbnRmZF90OworCitfX0JFR0lOX0RFQ0xTCitleHRlcm4gaW50IGV2ZW50ZmQoaW50LCBpbnQpOworZXh0ZXJuIGludCBldmVudGZkX3JlYWQoaW50LCBldmVudGZkX3QqKTsKK2V4dGVybiBpbnQgZXZlbnRmZF93cml0ZShpbnQsIGV2ZW50ZmRfdCk7CitfX0VORF9ERUNMUworI2VuZGlmCiAKIFRFU1QoZXZlbnRmZCwgc21va2UpIHsKICAgdW5zaWduZWQgaW50IGluaXRpYWxfdmFsdWUgPSAyOwpAQCAtNDMsNSArNTcsMyBAQAogCiAgIGNsb3NlKGZkKTsKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy9mY250bF90ZXN0LmNwcCBiL3Rlc3RzL2ZjbnRsX3Rlc3QuY3BwCmluZGV4IGEwOTRmYWMuLjNmZDBhOGMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2ZjbnRsX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL2ZjbnRsX3Rlc3QuY3BwCkBAIC0xOSw2ICsxOSw4IEBACiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxmY250bC5oPgogCisjaW5jbHVkZSAiVGVtcG9yYXJ5RmlsZS5oIgorCiBURVNUKGZjbnRsLCBmY250bF9zbW9rZSkgewogICBpbnQgZmQgPSBvcGVuKCIvcHJvYy92ZXJzaW9uIiwgT19SRE9OTFkpOwogICBBU1NFUlRfVFJVRShmZCAhPSAtMSk7CkBAIC0zMyw0ICszNSwyMDUgQEAKICAgZmxhZ3MgPSBmY250bChmZCwgRl9HRVRGRCk7CiAgIEFTU0VSVF9UUlVFKGZsYWdzICE9IC0xKTsKICAgQVNTRVJUX0VRKEZEX0NMT0VYRUMsIGZsYWdzICYgRkRfQ0xPRVhFQyk7CisKKyAgY2xvc2UoZmQpOworfQorCitURVNUKGZjbnRsLCBvcGVuX29wZW42NCkgeworICBpbnQgZmQ7CisKKyAgZmQgPSBvcGVuKCIvcHJvYy92ZXJzaW9uIiwgT19SRE9OTFkpOworICBBU1NFUlRfVFJVRShmZCAhPSAtMSk7CisgIGNsb3NlKGZkKTsKKworICBmZCA9IG9wZW42NCgiL3Byb2MvdmVyc2lvbiIsIE9fUkRPTkxZKTsKKyAgQVNTRVJUX1RSVUUoZmQgIT0gLTEpOworICBjbG9zZShmZCk7Cit9CisKK1RFU1QoZmNudGwsIG9wZW5hdF9vcGVuYXQ2NCkgeworICBpbnQgZmQ7CisKKyAgZmQgPSBvcGVuYXQoQVRfRkRDV0QsICIvcHJvYy92ZXJzaW9uIiwgT19SRE9OTFkpOworICBBU1NFUlRfVFJVRShmZCAhPSAtMSk7CisgIGNsb3NlKGZkKTsKKworICBmZCA9IG9wZW5hdDY0KEFUX0ZEQ1dELCAiL3Byb2MvdmVyc2lvbiIsIE9fUkRPTkxZKTsKKyAgQVNTRVJUX1RSVUUoZmQgIT0gLTEpOworICBjbG9zZShmZCk7Cit9CisKK1RFU1QoZmNudGwsIGNyZWF0X2NyZWF0NjQpIHsKKyAgQVNTRVJUX0VRKC0xLCBjcmVhdCgiIiwgMDY2NikpOworICBBU1NFUlRfRVEoRU5PRU5ULCBlcnJubyk7CisgIEFTU0VSVF9FUSgtMSwgY3JlYXQ2NCgiIiwgMDY2NikpOworICBBU1NFUlRfRVEoRU5PRU5ULCBlcnJubyk7Cit9CisKK1RFU1QoZmNudGwsIHBvc2l4X2ZhZHZpc2UpIHsKKyAgVGVtcG9yYXJ5RmlsZSB0ZjsKKyAgZXJybm8gPSAwOworCisgIEVYUEVDVF9FUShFQkFERiwgcG9zaXhfZmFkdmlzZSgtMSwgMCwgMCwgUE9TSVhfRkFEVl9OT1JNQUwpKTsKKyAgRVhQRUNUX0VRKDAsIGVycm5vKTsKKworICBFWFBFQ1RfRVEoRUJBREYsIHBvc2l4X2ZhZHZpc2U2NCgtMSwgMCwgMCwgUE9TSVhfRkFEVl9OT1JNQUwpKTsKKyAgRVhQRUNUX0VRKDAsIGVycm5vKTsKKworICBFWFBFQ1RfRVEoRUlOVkFMLCBwb3NpeF9mYWR2aXNlKHRmLmZkLCAwLCAwLCAtMSkpOworICBFWFBFQ1RfRVEoMCwgZXJybm8pOworCisgIEVYUEVDVF9FUShFSU5WQUwsIHBvc2l4X2ZhZHZpc2U2NCh0Zi5mZCwgMCwgMCwgLTEpKTsKKyAgRVhQRUNUX0VRKDAsIGVycm5vKTsKKworICBFWFBFQ1RfRVEoMCwgcG9zaXhfZmFkdmlzZSh0Zi5mZCwgMCwgMCwgUE9TSVhfRkFEVl9OT1JNQUwpKTsKKyAgRVhQRUNUX0VRKDAsIHBvc2l4X2ZhZHZpc2U2NCh0Zi5mZCwgMCwgMCwgUE9TSVhfRkFEVl9OT1JNQUwpKTsKK30KKworVEVTVChmY250bCwgZmFsbG9jYXRlX0VJTlZBTCkgeworICBUZW1wb3JhcnlGaWxlIHRmOworCisgIC8vIGZhbGxvY2F0ZS9mYWxsb2NhdGU2NCBzZXQgZXJybm8uCisgIC8vIHBvc2l4X2ZhbGxvY2F0ZS9wb3NpeF9mYWxsb2NhdGU2NCByZXR1cm4gYW4gZXJybm8gdmFsdWUuCisKKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoLTEsIGZhbGxvY2F0ZSh0Zi5mZCwgMCwgMCwgLTEpKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworCisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKC0xLCBmYWxsb2NhdGU2NCh0Zi5mZCwgMCwgMCwgLTEpKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworCisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgcG9zaXhfZmFsbG9jYXRlKHRmLmZkLCAwLCAtMSkpOworICBBU1NFUlRfRVEoMCwgZXJybm8pOworCisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgcG9zaXhfZmFsbG9jYXRlNjQodGYuZmQsIDAsIC0xKSk7CisgIEFTU0VSVF9FUSgwLCBlcnJubyk7Cit9CisKK1RFU1QoZmNudGwsIGZhbGxvY2F0ZSkgeworICBUZW1wb3JhcnlGaWxlIHRmOworICBzdHJ1Y3Qgc3RhdCBzYjsKKyAgQVNTRVJUX0VRKDAsIGZzdGF0KHRmLmZkLCAmc2IpKTsKKyAgQVNTRVJUX0VRKDAsIHNiLnN0X3NpemUpOworCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBBU1NFUlRfRVEoMCwgZmFsbG9jYXRlKHRmLmZkLCAwLCAwLCAxKSk7CisgIEFTU0VSVF9FUSgwLCBmc3RhdCh0Zi5mZCwgJnNiKSk7CisgIEFTU0VSVF9FUSgxLCBzYi5zdF9zaXplKTsKKworICBBU1NFUlRfRVEoMCwgZmFsbG9jYXRlNjQodGYuZmQsIDAsIDAsIDIpKTsKKyAgQVNTRVJUX0VRKDAsIGZzdGF0KHRmLmZkLCAmc2IpKTsKKyAgQVNTRVJUX0VRKDIsIHNiLnN0X3NpemUpOworI2VuZGlmCisKKyAgQVNTRVJUX0VRKDAsIHBvc2l4X2ZhbGxvY2F0ZSh0Zi5mZCwgMCwgMykpOworICBBU1NFUlRfRVEoMCwgZnN0YXQodGYuZmQsICZzYikpOworICBBU1NFUlRfRVEoMywgc2Iuc3Rfc2l6ZSk7CisKKyAgQVNTRVJUX0VRKDAsIHBvc2l4X2ZhbGxvY2F0ZTY0KHRmLmZkLCAwLCA0KSk7CisgIEFTU0VSVF9FUSgwLCBmc3RhdCh0Zi5mZCwgJnNiKSk7CisgIEFTU0VSVF9FUSg0LCBzYi5zdF9zaXplKTsKK30KKworVEVTVChmY250bCwgZl9nZXRsazY0KSB7CisgIGludCBmZCA9IG9wZW42NCgiL3Byb2MvdmVyc2lvbiIsIE9fUkRPTkxZKTsKKyAgQVNTRVJUX1RSVUUoZmQgIT0gLTEpOworCisgIHN0cnVjdCBmbG9jazY0IGNoZWNrX2xvY2s7CisgIGNoZWNrX2xvY2subF90eXBlID0gRl9XUkxDSzsKKyAgY2hlY2tfbG9jay5sX3N0YXJ0ID0gMDsKKyAgY2hlY2tfbG9jay5sX3doZW5jZSA9IFNFRUtfU0VUOworICBjaGVja19sb2NrLmxfbGVuID0gMDsKKworICBpbnQgcmMgPSBmY250bChmZCwgRl9HRVRMSzY0LCAmY2hlY2tfbG9jayk7CisgIEFTU0VSVF9FUSgwLCByYyk7CisKKyAgY2xvc2UoZmQpOworfQorCitURVNUKGZjbnRsLCBzcGxpY2UpIHsKKyAgaW50IHBpcGVfZmRzWzJdOworICBBU1NFUlRfRVEoMCwgcGlwZShwaXBlX2ZkcykpOworCisgIGludCBpbiA9IG9wZW4oIi9wcm9jL2NwdWluZm8iLCBPX1JET05MWSk7CisgIEFTU0VSVF9ORShpbiwgLTEpOworCisgIFRlbXBvcmFyeUZpbGUgdGY7CisKKyAgc3NpemVfdCBieXRlc19yZWFkID0gc3BsaWNlKGluLCAwLCBwaXBlX2Zkc1sxXSwgTlVMTCwgOCoxMDI0LCBTUExJQ0VfRl9NT1JFIHwgU1BMSUNFX0ZfTU9WRSk7CisgIEFTU0VSVF9ORShieXRlc19yZWFkLCAtMSk7CisKKyAgc3NpemVfdCBieXRlc193cml0dGVuID0gc3BsaWNlKHBpcGVfZmRzWzBdLCBOVUxMLCB0Zi5mZCwgMCwgYnl0ZXNfcmVhZCwgU1BMSUNFX0ZfTU9SRSB8IFNQTElDRV9GX01PVkUpOworICBBU1NFUlRfRVEoYnl0ZXNfcmVhZCwgYnl0ZXNfd3JpdHRlbik7CisKKyAgY2xvc2UocGlwZV9mZHNbMF0pOworICBjbG9zZShwaXBlX2Zkc1sxXSk7CisgIGNsb3NlKGluKTsKK30KKworVEVTVChmY250bCwgdm1zcGxpY2UpIHsKKyAgaW50IHBpcGVfZmRzWzJdOworICBBU1NFUlRfRVEoMCwgcGlwZShwaXBlX2ZkcykpOworCisgIGlvdmVjIHZbMl07CisgIHZbMF0uaW92X2Jhc2UgPSBjb25zdF9jYXN0PGNoYXIqPigiaGVsbG8gIik7CisgIHZbMF0uaW92X2xlbiA9IDY7CisgIHZbMV0uaW92X2Jhc2UgPSBjb25zdF9jYXN0PGNoYXIqPigid29ybGRcbiIpOworICB2WzFdLmlvdl9sZW4gPSA2OworICBzc2l6ZV90IGJ5dGVzX3dyaXR0ZW4gPSB2bXNwbGljZShwaXBlX2Zkc1sxXSwgdiwgc2l6ZW9mKHYpL3NpemVvZihpb3ZlYyksIDApOworICBBU1NFUlRfRVEodlswXS5pb3ZfbGVuICsgdlsxXS5pb3ZfbGVuLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGJ5dGVzX3dyaXR0ZW4pKTsKKyAgY2xvc2UocGlwZV9mZHNbMV0pOworCisgIGNoYXIgYnVmW0JVRlNJWl07CisgIEZJTEUqIGZwID0gZmRvcGVuKHBpcGVfZmRzWzBdLCAiciIpOworICBBU1NFUlRfVFJVRShmcCAhPSBOVUxMKTsKKyAgQVNTRVJUX1RSVUUoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApICE9IE5VTEwpOworICBmY2xvc2UoZnApOworICBBU1NFUlRfU1RSRVEoImhlbGxvIHdvcmxkXG4iLCBidWYpOworfQorCitURVNUKGZjbnRsLCB0ZWUpIHsKKyAgY2hhciBleHBlY3RlZFsyNTZdOworICBGSUxFKiBleHBlY3RlZF9mcCA9IGZvcGVuKCIvcHJvYy92ZXJzaW9uIiwgInIiKTsKKyAgQVNTRVJUX1RSVUUoZXhwZWN0ZWRfZnAgIT0gTlVMTCk7CisgIEFTU0VSVF9UUlVFKGZnZXRzKGV4cGVjdGVkLCBzaXplb2YoZXhwZWN0ZWQpLCBleHBlY3RlZF9mcCkgIT0gTlVMTCk7CisgIGZjbG9zZShleHBlY3RlZF9mcCk7CisKKyAgaW50IHBpcGUxWzJdOworICBBU1NFUlRfRVEoMCwgcGlwZShwaXBlMSkpOworCisgIGludCBwaXBlMlsyXTsKKyAgQVNTRVJUX0VRKDAsIHBpcGUocGlwZTIpKTsKKworICBpbnQgaW4gPSBvcGVuKCIvcHJvYy92ZXJzaW9uIiwgT19SRE9OTFkpOworICBBU1NFUlRfTkUoaW4sIC0xKTsKKworICAvLyBXcml0ZSAvcHJvYy92ZXJzaW9uIGludG8gcGlwZTEuCisgIHNzaXplX3QgYnl0ZXNfcmVhZCA9IHNwbGljZShpbiwgMCwgcGlwZTFbMV0sIE5VTEwsIDgqMTAyNCwgU1BMSUNFX0ZfTU9SRSB8IFNQTElDRV9GX01PVkUpOworICBBU1NFUlRfTkUoYnl0ZXNfcmVhZCwgLTEpOworICBjbG9zZShwaXBlMVsxXSk7CisKKyAgLy8gVGVlIC9wcm9jL3ZlcnNpb24gZnJvbSBwaXBlMSBpbnRvIHBpcGUyLgorICBzc2l6ZV90IGJ5dGVzX3RlZWQgPSB0ZWUocGlwZTFbMF0sIHBpcGUyWzFdLCBTSVpFX01BWCwgMCk7CisgIEFTU0VSVF9FUShieXRlc19yZWFkLCBieXRlc190ZWVkKTsKKyAgY2xvc2UocGlwZTJbMV0pOworCisgIC8vIFRoZSBvdXQgZmRzIG9mIGJvdGggcGlwZTEgYW5kIHBpcGUyIHNob3VsZCBub3cgY29udGFpbiAvcHJvYy92ZXJzaW9uLgorICBjaGFyIGJ1ZjFbQlVGU0laXTsKKyAgRklMRSogZnAxID0gZmRvcGVuKHBpcGUxWzBdLCAiciIpOworICBBU1NFUlRfVFJVRShmcDEgIT0gTlVMTCk7CisgIEFTU0VSVF9UUlVFKGZnZXRzKGJ1ZjEsIHNpemVvZihidWYxKSwgZnAxKSAhPSBOVUxMKTsKKyAgZmNsb3NlKGZwMSk7CisKKyAgY2hhciBidWYyW0JVRlNJWl07CisgIEZJTEUqIGZwMiA9IGZkb3BlbihwaXBlMlswXSwgInIiKTsKKyAgQVNTRVJUX1RSVUUoZnAyICE9IE5VTEwpOworICBBU1NFUlRfVFJVRShmZ2V0cyhidWYyLCBzaXplb2YoYnVmMiksIGZwMikgIT0gTlVMTCk7CisgIGZjbG9zZShmcDIpOworCisgIEFTU0VSVF9TVFJFUShleHBlY3RlZCwgYnVmMSk7CisgIEFTU0VSVF9TVFJFUShleHBlY3RlZCwgYnVmMik7CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9mb3J0aWZ5X3Rlc3QuY3BwIGIvdGVzdHMvZm9ydGlmeV90ZXN0LmNwcAppbmRleCA0MDg5OTFlLi4zNTJjYWM2IDEwMDY0NAotLS0gYS90ZXN0cy9mb3J0aWZ5X3Rlc3QuY3BwCisrKyBiL3Rlc3RzL2ZvcnRpZnlfdGVzdC5jcHAKQEAgLTE1LDYgKzE1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTIyLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bWFsbG9jLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KIAogLy8gV2UgaGF2ZSB0byBzYXkgIkRlYXRoVGVzdCIgaGVyZSBzbyBndGVzdCBrbm93cyB0byBydW4gdGhpcyB0ZXN0ICh3aGljaCBleGl0cykKIC8vIGluIGl0cyBvd24gcHJvY2Vzcy4gVW5mb3J0dW5hdGVseSwgdGhlIEMgcHJlcHJvY2Vzc29yIGRvZXNuJ3QgZ2l2ZSB1cyBhbgpAQCAtMzEsNiArMzMsMjEgQEAKICNkZWZpbmUgREVBVEhURVNUX0VWQUxVQVRPUihuYW1lKSBERUFUSFRFU1RfUEFTVEVSKG5hbWUpCiAjZGVmaW5lIERFQVRIVEVTVCBERUFUSFRFU1RfRVZBTFVBVE9SKFRFU1RfTkFNRSkKIAorY2xhc3MgREVBVEhURVNUIDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworIHByb3RlY3RlZDoKKyAgdmlydHVhbCB2b2lkIFNldFVwKCkgeworICAgIG9sZF9kdW1wYWJsZV8gPSBwcmN0bChQUl9HRVRfRFVNUEFCTEUsIDAsIDAsIDAsIDApOworICAgIC8vIFN1cHByZXNzIGRlYnVnZ2VyZCBzdGFjayB0cmFjZXMuIFRvbyBzbG93LgorICAgIHByY3RsKFBSX1NFVF9EVU1QQUJMRSwgMCwgMCwgMCwgMCk7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKSB7CisgICAgcHJjdGwoUFJfU0VUX0RVTVBBQkxFLCBvbGRfZHVtcGFibGVfLCAwLCAwLCAwLCAwKTsKKyAgfQorIHByaXZhdGU6CisgIGludCBvbGRfZHVtcGFibGVfOworfTsKKwogI2lmIGRlZmluZWQoX0ZPUlRJRllfU09VUkNFKSAmJiBfRk9SVElGWV9TT1VSQ0UgPT0gMgogc3RydWN0IGZvbyB7CiAgIGNoYXIgZW1wdHlbMF07CkBAIC00Miw3ICs1OSwzMiBAQAogI2lmbmRlZiBfX2NsYW5nX18KIC8vIFRoaXMgdGVzdCBpcyBkaXNhYmxlZCBpbiBjbGFuZyBiZWNhdXNlIGNsYW5nIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZWN0CiAvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgotVEVTVChERUFUSFRFU1QsIHN0cm5jcHlfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgc3RwbmNweV9mb3J0aWZpZWQyKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgZm9vIG15Zm9vOworICBpbnQgY29weV9hbXQgPSBhdG9pKCIxMSIpOworICBBU1NFUlRfRVhJVChzdHBuY3B5KG15Zm9vLmEsICIwMTIzNDU2Nzg5MCIsIGNvcHlfYW10KSwKKyAgICAgICAgICAgICAgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIF9fY2xhbmdfXworLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKKy8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCitURVNUX0YoREVBVEhURVNULCBzdHBuY3B5Ml9mb3J0aWZpZWQyKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgZm9vIG15Zm9vOworICBtZW1zZXQoJm15Zm9vLCAwLCBzaXplb2YobXlmb28pKTsKKyAgbXlmb28ub25lWzBdID0gJ0EnOyAvLyBub3QgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZworICBBU1NFUlRfRVhJVChzdHBuY3B5KG15Zm9vLmIsIG15Zm9vLm9uZSwgc2l6ZW9mKG15Zm9vLmIpKSwKKyAgICAgICAgICAgICAgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIF9fY2xhbmdfXworLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKKy8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCitURVNUX0YoREVBVEhURVNULCBzdHJuY3B5X2ZvcnRpZmllZDIpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIGludCBjb3B5X2FtdCA9IGF0b2koIjExIik7CkBAIC01NCw3ICs5Niw3IEBACiAjaWZuZGVmIF9fY2xhbmdfXwogLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKIC8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCi1URVNUKERFQVRIVEVTVCwgc3RybmNweTJfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgc3RybmNweTJfZm9ydGlmaWVkMikgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZvbyBteWZvbzsKICAgbWVtc2V0KCZteWZvbywgMCwgc2l6ZW9mKG15Zm9vKSk7CkBAIC02Nyw3ICsxMDksNyBAQAogI2lmbmRlZiBfX2NsYW5nX18KIC8vIFRoaXMgdGVzdCBpcyBkaXNhYmxlZCBpbiBjbGFuZyBiZWNhdXNlIGNsYW5nIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZWN0CiAvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgotVEVTVChERUFUSFRFU1QsIHNwcmludGZfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgc3ByaW50Zl9mb3J0aWZpZWQyKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBjaGFyIHNvdXJjZV9idWZbMTVdOwpAQCAtODAsNyArMTIyLDcgQEAKICNpZm5kZWYgX19jbGFuZ19fCiAvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KLVRFU1QoREVBVEhURVNULCBzcHJpbnRmMl9mb3J0aWZpZWQyKSB7CitURVNUX0YoREVBVEhURVNULCBzcHJpbnRmMl9mb3J0aWZpZWQyKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBBU1NFUlRfRVhJVChzcHJpbnRmKG15Zm9vLmEsICIwMTIzNDU2Nzg5IiksCkBAIC0xMDIsMTIgKzE0NCwxMiBAQAogICByZXR1cm4gcmVzdWx0OwogfQogCi1URVNUKERFQVRIVEVTVCwgdnNwcmludGZfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgdnNwcmludGZfZm9ydGlmaWVkMikgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIEFTU0VSVF9FWElUKHZzcHJpbnRmX2hlbHBlcjIoIiVzIiwgIjAxMjM0NTY3ODkiKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAotVEVTVChERUFUSFRFU1QsIHZzcHJpbnRmMl9mb3J0aWZpZWQyKSB7CitURVNUX0YoREVBVEhURVNULCB2c3ByaW50ZjJfZm9ydGlmaWVkMikgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIEFTU0VSVF9FWElUKHZzcHJpbnRmX2hlbHBlcjIoIjAxMjM0NTY3ODkiKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KQEAgLTEyOCwzMCArMTcwLDUwIEBACiAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVRFU1QoREVBVEhURVNULCB2c25wcmludGZfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgdnNucHJpbnRmX2ZvcnRpZmllZDIpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBBU1NFUlRfRVhJVCh2c25wcmludGZfaGVscGVyMigiJXMiLCAiMDEyMzQ1Njc4OSIpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogCi1URVNUKERFQVRIVEVTVCwgdnNucHJpbnRmMl9mb3J0aWZpZWQyKSB7CitURVNUX0YoREVBVEhURVNULCB2c25wcmludGYyX2ZvcnRpZmllZDIpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBBU1NFUlRfRVhJVCh2c25wcmludGZfaGVscGVyMigiMDEyMzQ1Njc4OSIpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogI2VuZGlmCiAKLSNpZiBfX0JJT05JQ19fCisjaWZuZGVmIF9fY2xhbmdfXworLy8gemVybyBzaXplZCB0YXJnZXQgd2l0aCAiXDAiIHNvdXJjZSAoc2hvdWxkIGZhaWwpCisvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAorLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KK1RFU1RfRihERUFUSFRFU1QsIHN0cGNweV9mb3J0aWZpZWQyKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGZvbyBteWZvbzsKKyAgY2hhciogc3JjID0gc3RyZHVwKCIiKTsKKyAgQVNTRVJUX0VYSVQoc3RwY3B5KG15Zm9vLmVtcHR5LCBzcmMpLAorICAgICAgICAgICAgICB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworICBmcmVlKHNyYyk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KK30KKyNlbmRpZgogCiAjaWZuZGVmIF9fY2xhbmdfXwogLy8gemVybyBzaXplZCB0YXJnZXQgd2l0aCAiXDAiIHNvdXJjZSAoc2hvdWxkIGZhaWwpCiAvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KLVRFU1QoREVBVEhURVNULCBzdHJjcHlfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgc3RyY3B5X2ZvcnRpZmllZDIpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBjaGFyKiBzcmMgPSBzdHJkdXAoIiIpOwogICBBU1NFUlRfRVhJVChzdHJjcHkobXlmb28uZW1wdHksIHNyYyksCiAgICAgICAgICAgICAgIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiAgIGZyZWUoc3JjKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogI2VuZGlmCiAKQEAgLTE1OSwxMyArMjIxLDE3IEBACiAvLyB6ZXJvIHNpemVkIHRhcmdldCB3aXRoIGxvbmdlciBzb3VyY2UgKHNob3VsZCBmYWlsKQogLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKIC8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCi1URVNUKERFQVRIVEVTVCwgc3RyY3B5Ml9mb3J0aWZpZWQyKSB7CitURVNUX0YoREVBVEhURVNULCBzdHJjcHkyX2ZvcnRpZmllZDIpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBjaGFyKiBzcmMgPSBzdHJkdXAoIjEiKTsKICAgQVNTRVJUX0VYSVQoc3RyY3B5KG15Zm9vLmVtcHR5LCBzcmMpLAogICAgICAgICAgICAgICB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogICBmcmVlKHNyYyk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KICNlbmRpZgogCkBAIC0xNzMsNTkgKzIzOSw3NiBAQAogLy8gb25lIGJ5dGUgdGFyZ2V0IHdpdGggbG9uZ2VyIHNvdXJjZSAoc2hvdWxkIGZhaWwpCiAvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KLVRFU1QoREVBVEhURVNULCBzdHJjcHkzX2ZvcnRpZmllZDIpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cmNweTNfZm9ydGlmaWVkMikgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIGNoYXIqIHNyYyA9IHN0cmR1cCgiMTIiKTsKICAgQVNTRVJUX0VYSVQoc3RyY3B5KG15Zm9vLm9uZSwgc3JjKSwKICAgICAgICAgICAgICAgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKICAgZnJlZShzcmMpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAjZW5kaWYKIAogI2lmbmRlZiBfX2NsYW5nX18KIC8vIFRoaXMgdGVzdCBpcyBkaXNhYmxlZCBpbiBjbGFuZyBiZWNhdXNlIGNsYW5nIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZWN0CiAvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgotVEVTVChERUFUSFRFU1QsIHN0cmNocl9mb3J0aWZpZWQyKSB7CitURVNUX0YoREVBVEhURVNULCBzdHJjaHJfZm9ydGlmaWVkMikgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIG1lbWNweShteWZvby5hLCAiMDEyMzQ1Njc4OSIsIHNpemVvZihteWZvby5hKSk7CiAgIG15Zm9vLmJbMF0gPSAnXDAnOwogICBBU1NFUlRfRVhJVChwcmludGYoIiVzIiwgc3RyY2hyKG15Zm9vLmEsICdhJykpLAogICAgICAgICAgICAgICB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAjZW5kaWYKIAogI2lmbmRlZiBfX2NsYW5nX18KIC8vIFRoaXMgdGVzdCBpcyBkaXNhYmxlZCBpbiBjbGFuZyBiZWNhdXNlIGNsYW5nIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZWN0CiAvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgotVEVTVChERUFUSFRFU1QsIHN0cnJjaHJfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgc3RycmNocl9mb3J0aWZpZWQyKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZvbyBteWZvbzsKICAgbWVtY3B5KG15Zm9vLmEsICIwMTIzNDU2Nzg5IiwgMTApOwogICBtZW1jcHkobXlmb28uYiwgIjAxMjM0IiwgNik7CiAgIEFTU0VSVF9FWElUKHByaW50ZigiJXMiLCBzdHJyY2hyKG15Zm9vLmEsICdhJykpLAogICAgICAgICAgICAgICB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAjZW5kaWYKIAogI2lmbmRlZiBfX2NsYW5nX18KIC8vIFRoaXMgdGVzdCBpcyBkaXNhYmxlZCBpbiBjbGFuZyBiZWNhdXNlIGNsYW5nIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZWN0CiAvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgotVEVTVChERUFUSFRFU1QsIHN0cmxjcHlfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgc3RybGNweV9mb3J0aWZpZWQyKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZvbyBteWZvbzsKICAgc3RyY3B5KG15Zm9vLmEsICIwMSIpOwogICBzaXplX3QgbiA9IHN0cmxlbihteWZvby5hKTsKICAgQVNTRVJUX0VYSVQoc3RybGNweShteWZvby5vbmUsIG15Zm9vLmEsIG4pLAogICAgICAgICAgICAgICB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAjZW5kaWYKIAogI2lmbmRlZiBfX2NsYW5nX18KIC8vIFRoaXMgdGVzdCBpcyBkaXNhYmxlZCBpbiBjbGFuZyBiZWNhdXNlIGNsYW5nIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZWN0CiAvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgotVEVTVChERUFUSFRFU1QsIHN0cmxjYXRfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgc3RybGNhdF9mb3J0aWZpZWQyKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZvbyBteWZvbzsKICAgc3RyY3B5KG15Zm9vLmEsICIwMSIpOwpAQCAtMjMzLDE1ICszMTYsMTYgQEAKICAgc2l6ZV90IG4gPSBzdHJsZW4obXlmb28uYSk7CiAgIEFTU0VSVF9FWElUKHN0cmxjYXQobXlmb28ub25lLCBteWZvby5hLCBuKSwKICAgICAgICAgICAgICAgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogI2VuZGlmCiAKLSNlbmRpZiAvKiBfX0JJT05JQ19fICovCi0KICNpZm5kZWYgX19jbGFuZ19fCiAvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KLVRFU1QoREVBVEhURVNULCBzdHJuY2F0X2ZvcnRpZmllZDIpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cm5jYXRfZm9ydGlmaWVkMikgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZvbyBteWZvbzsKICAgc2l6ZV90IG4gPSBhdG9pKCIxMCIpOyAvLyBhdm9pZCBjb21waWxlciBvcHRpbWl6YXRpb25zCkBAIC0yNTMsNyArMzM3LDcgQEAKICNpZm5kZWYgX19jbGFuZ19fCiAvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KLVRFU1QoREVBVEhURVNULCBzdHJuY2F0Ml9mb3J0aWZpZWQyKSB7CitURVNUX0YoREVBVEhURVNULCBzdHJuY2F0Ml9mb3J0aWZpZWQyKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBteWZvby5hWzBdID0gJ1wwJzsKQEAgLTI2Miw3ICszNDYsNyBAQAogfQogI2VuZGlmCiAKLVRFU1QoREVBVEhURVNULCBzdHJuY2F0M19mb3J0aWZpZWQyKSB7CitURVNUX0YoREVBVEhURVNULCBzdHJuY2F0M19mb3J0aWZpZWQyKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBtZW1jcHkobXlmb28uYSwgIjAxMjM0NTY3ODkiLCBzaXplb2YobXlmb28uYSkpOyAvLyB1bnRlcm1pbmF0ZWQgc3RyaW5nCkBAIC0yNzQsNyArMzU4LDcgQEAKICNpZm5kZWYgX19jbGFuZ19fCiAvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KLVRFU1QoREVBVEhURVNULCBzdHJjYXRfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgc3RyY2F0X2ZvcnRpZmllZDIpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBjaGFyIHNyY1sxMV07CiAgIHN0cmNweShzcmMsICIwMTIzNDU2Nzg5Iik7CkBAIC0yODQsNyArMzY4LDcgQEAKIH0KICNlbmRpZgogCi1URVNUKERFQVRIVEVTVCwgc3RyY2F0Ml9mb3J0aWZpZWQyKSB7CitURVNUX0YoREVBVEhURVNULCBzdHJjYXQyX2ZvcnRpZmllZDIpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIG1lbWNweShteWZvby5hLCAiMDEyMzQ1Njc4OSIsIHNpemVvZihteWZvby5hKSk7IC8vIHVudGVybWluYXRlZCBzdHJpbmcKQEAgLTI5Miw3ICszNzYsNyBAQAogICBBU1NFUlRfRVhJVChzdHJjYXQobXlmb28uYiwgbXlmb28uYSksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CiAKLVRFU1QoREVBVEhURVNULCBzbnByaW50Zl9mb3J0aWZpZWQyKSB7CitURVNUX0YoREVBVEhURVNULCBzbnByaW50Zl9mb3J0aWZpZWQyKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBzdHJjcHkobXlmb28uYSwgIjAxMjM0NTY3OCIpOwpAQCAtMzAwLDcgKzM4NCw3IEBACiAgIEFTU0VSVF9FWElUKHNucHJpbnRmKG15Zm9vLmIsIG4sICJhJXMiLCBteWZvby5hKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAotVEVTVChERUFUSFRFU1QsIGJ6ZXJvX2ZvcnRpZmllZDIpIHsKK1RFU1RfRihERUFUSFRFU1QsIGJ6ZXJvX2ZvcnRpZmllZDIpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIG1lbWNweShteWZvby5iLCAiMDEyMzQ1Njc4OSIsIHNpemVvZihteWZvby5iKSk7CkBAIC0zMTAsNzQgKzM5NCwxMDYgQEAKIAogI2VuZGlmIC8qIGRlZmluZWQoX0ZPUlRJRllfU09VUkNFKSAmJiBfRk9SVElGWV9TT1VSQ0U9MiAqLwogCi0jaWYgX19CSU9OSUNfXwogLy8gbXVsdGlieXRlIHRhcmdldCB3aGVyZSB3ZSBvdmVyIGZpbGwgKHNob3VsZCBmYWlsKQotVEVTVChERUFUSFRFU1QsIHN0cmNweV9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cmNweV9mb3J0aWZpZWQpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMTBdOwogICBjaGFyICpvcmlnID0gc3RyZHVwKCIwMTIzNDU2Nzg5Iik7CiAgIEFTU0VSVF9FWElUKHN0cmNweShidWYsIG9yaWcpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogICBmcmVlKG9yaWcpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIC8vIHplcm8gc2l6ZWQgdGFyZ2V0IHdpdGggIlwwIiBzb3VyY2UgKHNob3VsZCBmYWlsKQotVEVTVChERUFUSFRFU1QsIHN0cmNweTJfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCBzdHJjcHkyX2ZvcnRpZmllZCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBjaGFyIGJ1ZlswXTsKICAgY2hhciAqb3JpZyA9IHN0cmR1cCgiIik7CiAgIEFTU0VSVF9FWElUKHN0cmNweShidWYsIG9yaWcpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogICBmcmVlKG9yaWcpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIC8vIHplcm8gc2l6ZWQgdGFyZ2V0IHdpdGggbG9uZ2VyIHNvdXJjZSAoc2hvdWxkIGZhaWwpCi1URVNUKERFQVRIVEVTVCwgc3RyY3B5M19mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cmNweTNfZm9ydGlmaWVkKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzBdOwogICBjaGFyICpvcmlnID0gc3RyZHVwKCIxIik7CiAgIEFTU0VSVF9FWElUKHN0cmNweShidWYsIG9yaWcpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogICBmcmVlKG9yaWcpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIC8vIG9uZSBieXRlIHRhcmdldCB3aXRoIGxvbmdlciBzb3VyY2UgKHNob3VsZCBmYWlsKQotVEVTVChERUFUSFRFU1QsIHN0cmNweTRfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCBzdHJjcHk0X2ZvcnRpZmllZCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBjaGFyIGJ1ZlsxXTsKICAgY2hhciAqb3JpZyA9IHN0cmR1cCgiMTIiKTsKICAgQVNTRVJUX0VYSVQoc3RyY3B5KGJ1Ziwgb3JpZyksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiAgIGZyZWUob3JpZyk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAotVEVTVChERUFUSFRFU1QsIHN0cmxlbl9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cmxlbl9mb3J0aWZpZWQpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMTBdOwogICBtZW1jcHkoYnVmLCAiMDEyMzQ1Njc4OSIsIHNpemVvZihidWYpKTsKICAgQVNTRVJUX0VYSVQocHJpbnRmKCIlemQiLCBzdHJsZW4oYnVmKSksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAotVEVTVChERUFUSFRFU1QsIHN0cmNocl9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cmNocl9mb3J0aWZpZWQpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMTBdOwogICBtZW1jcHkoYnVmLCAiMDEyMzQ1Njc4OSIsIHNpemVvZihidWYpKTsKICAgQVNTRVJUX0VYSVQocHJpbnRmKCIlcyIsIHN0cmNocihidWYsICdhJykpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKLVRFU1QoREVBVEhURVNULCBzdHJyY2hyX2ZvcnRpZmllZCkgeworVEVTVF9GKERFQVRIVEVTVCwgc3RycmNocl9mb3J0aWZpZWQpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMTBdOwogICBtZW1jcHkoYnVmLCAiMDEyMzQ1Njc4OSIsIHNpemVvZihidWYpKTsKICAgQVNTRVJUX0VYSVQocHJpbnRmKCIlcyIsIHN0cnJjaHIoYnVmLCAnYScpKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCi1URVNUKERFQVRIVEVTVCwgc3RybGNweV9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cmxjcHlfZm9ydGlmaWVkKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmYVsxNV07CiAgIGNoYXIgYnVmYlsxMF07CiAgIHN0cmNweShidWZhLCAiMDEyMzQ1Njc4OTAxMjMiKTsKICAgc2l6ZV90IG4gPSBzdHJsZW4oYnVmYSk7CiAgIEFTU0VSVF9FWElUKHN0cmxjcHkoYnVmYiwgYnVmYSwgbiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAotVEVTVChERUFUSFRFU1QsIHN0cmxjYXRfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCBzdHJsY2F0X2ZvcnRpZmllZCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBjaGFyIGJ1ZmFbMTVdOwogICBjaGFyIGJ1ZmJbMTBdOwpAQCAtMzg1LDExICs1MDEsMTIgQEAKICAgc3RyY3B5KGJ1ZmEsICIwMTIzNDU2Nzg5MDEyMyIpOwogICBzaXplX3QgbiA9IHN0cmxlbihidWZhKTsKICAgQVNTRVJUX0VYSVQoc3RybGNhdChidWZiLCBidWZhLCBuKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCi0jZW5kaWYKLQotVEVTVChERUFUSFRFU1QsIHNwcmludGZfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCBzcHJpbnRmX2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzEwXTsKICAgY2hhciBzb3VyY2VfYnVmWzE1XTsKQEAgLTQwMCw3ICs1MTcsNyBAQAogI2lmbmRlZiBfX2NsYW5nX18KIC8vIFRoaXMgdGVzdCBpcyBkaXNhYmxlZCBpbiBjbGFuZyBiZWNhdXNlIGNsYW5nIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZWN0CiAvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgotVEVTVChERUFUSFRFU1QsIHNwcmludGZfbWFsbG9jX2ZvcnRpZmllZCkgeworVEVTVF9GKERFQVRIVEVTVCwgc3ByaW50Zl9tYWxsb2NfZm9ydGlmaWVkKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciogYnVmID0gKGNoYXIgKikgbWFsbG9jKDEwKTsKICAgY2hhciBzb3VyY2VfYnVmWzExXTsKQEAgLTQxMCw3ICs1MjcsNyBAQAogfQogI2VuZGlmCiAKLVRFU1QoREVBVEhURVNULCBzcHJpbnRmMl9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHNwcmludGYyX2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzVdOwogICBBU1NFUlRfRVhJVChzcHJpbnRmKGJ1ZiwgImFhYWFhIiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CkBAIC00MjcsMTIgKzU0NCwxMiBAQAogICByZXR1cm4gcmVzdWx0OwogfQogCi1URVNUKERFQVRIVEVTVCwgdnNwcmludGZfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCB2c3ByaW50Zl9mb3J0aWZpZWQpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBBU1NFUlRfRVhJVCh2c3ByaW50Zl9oZWxwZXIoIiVzIiwgIjAxMjM0NTY3ODkiKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAotVEVTVChERUFUSFRFU1QsIHZzcHJpbnRmMl9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHZzcHJpbnRmMl9mb3J0aWZpZWQpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBBU1NFUlRfRVhJVCh2c3ByaW50Zl9oZWxwZXIoIjAxMjM0NTY3ODkiKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KQEAgLTQ0OSwxNyArNTY2LDE3IEBACiAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVRFU1QoREVBVEhURVNULCB2c25wcmludGZfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCB2c25wcmludGZfZm9ydGlmaWVkKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgQVNTRVJUX0VYSVQodnNucHJpbnRmX2hlbHBlcigiJXMiLCAiMDEyMzQ1Njc4OSIpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogCi1URVNUKERFQVRIVEVTVCwgdnNucHJpbnRmMl9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHZzbnByaW50ZjJfZm9ydGlmaWVkKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgQVNTRVJUX0VYSVQodnNucHJpbnRmX2hlbHBlcigiMDEyMzQ1Njc4OSIpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogCi1URVNUKERFQVRIVEVTVCwgc3RybmNhdF9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cm5jYXRfZm9ydGlmaWVkKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMTBdOwogICBzaXplX3QgbiA9IGF0b2koIjEwIik7IC8vIGF2b2lkIGNvbXBpbGVyIG9wdGltaXphdGlvbnMKQEAgLTQ2Nyw3ICs1ODQsNyBAQAogICBBU1NFUlRfRVhJVChzdHJuY2F0KGJ1ZiwgIjkiLCBuKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAotVEVTVChERUFUSFRFU1QsIHN0cm5jYXQyX2ZvcnRpZmllZCkgeworVEVTVF9GKERFQVRIVEVTVCwgc3RybmNhdDJfZm9ydGlmaWVkKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMTBdOwogICBidWZbMF0gPSAnXDAnOwpAQCAtNDc1LDcgKzU5Miw3IEBACiAgIEFTU0VSVF9FWElUKHN0cm5jYXQoYnVmLCAiMDEyMzQ1Njc4OSIsIG4pLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogCi1URVNUKERFQVRIVEVTVCwgc3RyY2F0X2ZvcnRpZmllZCkgeworVEVTVF9GKERFQVRIVEVTVCwgc3RyY2F0X2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgc3JjWzExXTsKICAgc3RyY3B5KHNyYywgIjAxMjM0NTY3ODkiKTsKQEAgLTQ4NCw3ICs2MDEsNyBAQAogICBBU1NFUlRfRVhJVChzdHJjYXQoYnVmLCBzcmMpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogCi1URVNUKERFQVRIVEVTVCwgbWVtbW92ZV9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIG1lbW1vdmVfZm9ydGlmaWVkKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMjBdOwogICBzdHJjcHkoYnVmLCAiMDEyMzQ1Njc4OSIpOwpAQCAtNDkyLDcgKzYwOSw3IEBACiAgIEFTU0VSVF9FWElUKG1lbW1vdmUoYnVmICsgMTEsIGJ1ZiwgbiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CiAKLVRFU1QoREVBVEhURVNULCBtZW1jcHlfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCBtZW1jcHlfZm9ydGlmaWVkKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZhWzEwXTsKICAgY2hhciBidWZiWzEwXTsKQEAgLTUwMSw3ICs2MTgsMjQgQEAKICAgQVNTRVJUX0VYSVQobWVtY3B5KGJ1ZmIsIGJ1ZmEsIG4pLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogCi1URVNUKERFQVRIVEVTVCwgc3RybmNweV9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cG5jcHlfZm9ydGlmaWVkKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgY2hhciBidWZhWzE1XTsKKyAgY2hhciBidWZiWzEwXTsKKyAgc3RyY3B5KGJ1ZmEsICIwMTIzNDU2Nzg5MDEyMyIpOworICBzaXplX3QgbiA9IHN0cmxlbihidWZhKTsKKyAgQVNTRVJUX0VYSVQoc3RwbmNweShidWZiLCBidWZhLCBuKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKK30KKworVEVTVF9GKERFQVRIVEVTVCwgc3RwbmNweTJfZm9ydGlmaWVkKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgY2hhciBkZXN0WzExXTsKKyAgY2hhciBzcmNbMTBdOworICBtZW1jcHkoc3JjLCAiMDEyMzQ1Njc4OSIsIHNpemVvZihzcmMpKTsgLy8gc3JjIGlzIG5vdCBudWxsIHRlcm1pbmF0ZWQKKyAgQVNTRVJUX0VYSVQoc3RwbmNweShkZXN0LCBzcmMsIHNpemVvZihkZXN0KSksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisKK1RFU1RfRihERUFUSFRFU1QsIHN0cm5jcHlfZm9ydGlmaWVkKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZhWzE1XTsKICAgY2hhciBidWZiWzEwXTsKQEAgLTUxMCw3ICs2NDQsOCBAQAogICBBU1NFUlRfRVhJVChzdHJuY3B5KGJ1ZmIsIGJ1ZmEsIG4pLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogCi1URVNUKERFQVRIVEVTVCwgc3RybmNweTJfZm9ydGlmaWVkKSB7CisKK1RFU1RfRihERUFUSFRFU1QsIHN0cm5jcHkyX2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgZGVzdFsxMV07CiAgIGNoYXIgc3JjWzEwXTsKQEAgLTUxOCw3ICs2NTMsNyBAQAogICBBU1NFUlRfRVhJVChzdHJuY3B5KGRlc3QsIHNyYywgc2l6ZW9mKGRlc3QpKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAotVEVTVChERUFUSFRFU1QsIHNucHJpbnRmX2ZvcnRpZmllZCkgeworVEVTVF9GKERFQVRIVEVTVCwgc25wcmludGZfZm9ydGlmaWVkKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZhWzE1XTsKICAgY2hhciBidWZiWzEwXTsKQEAgLTUyNyw3ICs2NjIsNyBAQAogICBBU1NFUlRfRVhJVChzbnByaW50ZihidWZiLCBuLCAiJXMiLCBidWZhKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAotVEVTVChERUFUSFRFU1QsIGJ6ZXJvX2ZvcnRpZmllZCkgeworVEVTVF9GKERFQVRIVEVTVCwgYnplcm9fZm9ydGlmaWVkKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMTBdOwogICBtZW1jcHkoYnVmLCAiMDEyMzQ1Njc4OSIsIHNpemVvZihidWYpKTsKQEAgLTUzNSw0MSArNjcwLDQ2IEBACiAgIEFTU0VSVF9FWElUKGJ6ZXJvKGJ1ZiwgbiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CiAKLVRFU1QoREVBVEhURVNULCB1bWFza19mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHVtYXNrX2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIG1vZGVfdCBtYXNrID0gYXRvaSgiMTAyMyIpOyAgLy8gMDE3NzcgaW4gb2N0YWwKICAgQVNTRVJUX0VYSVQodW1hc2sobWFzayksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CiAKLVRFU1QoREVBVEhURVNULCByZWN2X2ZvcnRpZmllZCkgeworVEVTVF9GKERFQVRIVEVTVCwgcmVjdl9mb3J0aWZpZWQpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBzaXplX3QgZGF0YV9sZW4gPSBhdG9pKCIxMSIpOyAvLyBzdXBwcmVzcyBjb21waWxlciBvcHRpbWl6YXRpb25zCiAgIGNoYXIgYnVmWzEwXTsKICAgQVNTRVJUX0VYSVQocmVjdigwLCBidWYsIGRhdGFfbGVuLCAwKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAotVEVTVChERUFUSFRFU1QsIEZEX0lTU0VUX2ZvcnRpZmllZCkgeworVEVTVF9GKERFQVRIVEVTVCwgRkRfSVNTRVRfZm9ydGlmaWVkKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKSAvLyBnbGliYyBjYXRjaGVzIHRoaXMgYXQgY29tcGlsZS10aW1lLgogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZkX3NldCBzZXQ7CiAgIG1lbXNldCgmc2V0LCAwLCBzaXplb2Yoc2V0KSk7CiAgIEFTU0VSVF9FWElUKEZEX0lTU0VUKC0xLCAmc2V0KSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKKyNlbmRpZgogfQogCi1URVNUKERFQVRIVEVTVCwgRkRfSVNTRVRfMl9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIEZEX0lTU0VUXzJfZm9ydGlmaWVkKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMV07CiAgIGZkX3NldCogc2V0ID0gKGZkX3NldCopIGJ1ZjsKICAgQVNTRVJUX0VYSVQoRkRfSVNTRVQoMCwgc2V0KSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAotVEVTVChERUFUSFRFU1QsIEZEX1pFUk9fZm9ydGlmaWVkKSB7CisvLyBndGVzdCdzIEFTU0VSVF9FWElUIG5lZWRzIGEgdmFsaWQgZXhwcmVzc2lvbiwgYnV0IGdsaWJjIGhhcyBhIGRvLXdoaWxlIG1hY3JvLgorc3RhdGljIHZvaWQgRkRfWkVST19mdW5jdGlvbihmZF9zZXQqIHMpIHsgRkRfWkVSTyhzKTsgfQorCitURVNUX0YoREVBVEhURVNULCBGRF9aRVJPX2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzFdOwogICBmZF9zZXQqIHNldCA9IChmZF9zZXQqKSBidWY7Ci0gIEFTU0VSVF9FWElUKEZEX1pFUk8oc2V0KSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKKyAgQVNTRVJUX0VYSVQoRkRfWkVST19mdW5jdGlvbihzZXQpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogCi1URVNUKERFQVRIVEVTVCwgcmVhZF9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHJlYWRfZm9ydGlmaWVkKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMV07CiAgIHNpemVfdCBjdCA9IGF0b2koIjIiKTsgLy8gcHJldmVudCBvcHRpbWl6YXRpb25zCkBAIC03MzIsNiArODcyLDQ1IEBACiAgIEFTU0VSVF9FUSgnXDAnLCAgYnVmWzldKTsKIH0KIAorVEVTVChURVNUX05BTUUsIHN0cG5jcHkpIHsKKyAgY2hhciBzcmNbMTBdOworICBjaGFyIGRzdFsxMF07CisgIG1lbWNweShzcmMsICIwMTIzNDU2Nzg5Iiwgc2l6ZW9mKHNyYykpOyAvLyBub24gbnVsbCB0ZXJtaW5hdGVkIHN0cmluZworICBzdHBuY3B5KGRzdCwgc3JjLCBzaXplb2YoZHN0KSk7CisgIEFTU0VSVF9FUSgnMCcsIGRzdFswXSk7CisgIEFTU0VSVF9FUSgnMScsIGRzdFsxXSk7CisgIEFTU0VSVF9FUSgnMicsIGRzdFsyXSk7CisgIEFTU0VSVF9FUSgnMycsIGRzdFszXSk7CisgIEFTU0VSVF9FUSgnNCcsIGRzdFs0XSk7CisgIEFTU0VSVF9FUSgnNScsIGRzdFs1XSk7CisgIEFTU0VSVF9FUSgnNicsIGRzdFs2XSk7CisgIEFTU0VSVF9FUSgnNycsIGRzdFs3XSk7CisgIEFTU0VSVF9FUSgnOCcsIGRzdFs4XSk7CisgIEFTU0VSVF9FUSgnOScsIGRzdFs5XSk7Cit9CisKK1RFU1QoVEVTVF9OQU1FLCBzdHBuY3B5MikgeworICBjaGFyIHNyY1sxMF07CisgIGNoYXIgZHN0WzE1XTsKKyAgbWVtY3B5KHNyYywgIjAxMjM0NTY3OFwwIiwgc2l6ZW9mKHNyYykpOworICBzdHBuY3B5KGRzdCwgc3JjLCBzaXplb2YoZHN0KSk7CisgIEFTU0VSVF9FUSgnMCcsICBkc3RbMF0pOworICBBU1NFUlRfRVEoJzEnLCAgZHN0WzFdKTsKKyAgQVNTRVJUX0VRKCcyJywgIGRzdFsyXSk7CisgIEFTU0VSVF9FUSgnMycsICBkc3RbM10pOworICBBU1NFUlRfRVEoJzQnLCAgZHN0WzRdKTsKKyAgQVNTRVJUX0VRKCc1JywgIGRzdFs1XSk7CisgIEFTU0VSVF9FUSgnNicsICBkc3RbNl0pOworICBBU1NFUlRfRVEoJzcnLCAgZHN0WzddKTsKKyAgQVNTRVJUX0VRKCc4JywgIGRzdFs4XSk7CisgIEFTU0VSVF9FUSgnXDAnLCBkc3RbOV0pOworICBBU1NFUlRfRVEoJ1wwJywgZHN0WzEwXSk7CisgIEFTU0VSVF9FUSgnXDAnLCBkc3RbMTFdKTsKKyAgQVNTRVJUX0VRKCdcMCcsIGRzdFsxMl0pOworICBBU1NFUlRfRVEoJ1wwJywgZHN0WzEzXSk7CisgIEFTU0VSVF9FUSgnXDAnLCBkc3RbMTRdKTsKK30KKwogVEVTVChURVNUX05BTUUsIHN0cm5jcHkpIHsKICAgY2hhciBzcmNbMTBdOwogICBjaGFyIGRzdFsxMF07CkBAIC03OTAsMjIgKzk2OSwyMiBAQAogICBBU1NFUlRfRVEoJ1wwJywgYnVmWzldKTsKIH0KIAorZXh0ZXJuICJDIiBjaGFyKiBfX3N0cGNweV9jaGsoY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QpOworCitURVNUKFRFU1RfTkFNRSwgc3RwY3B5X2Noa19tYXhfaW50X3NpemUpIHsKKyAgY2hhciBidWZbMTBdOworICBjaGFyKiByZXMgPSBfX3N0cGNweV9jaGsoYnVmLCAiMDEyMzQ1Njc4IiwgKHNpemVfdCktMSk7CisgIEFTU0VSVF9FUShidWYgKyBzdHJsZW4oIjAxMjM0NTY3OCIpLCByZXMpOworICBBU1NFUlRfU1RSRVEoIjAxMjM0NTY3OCIsIGJ1Zik7Cit9CisKIGV4dGVybiAiQyIgY2hhciogX19zdHJjcHlfY2hrKGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKIAogVEVTVChURVNUX05BTUUsIHN0cmNweV9jaGtfbWF4X2ludF9zaXplKSB7CiAgIGNoYXIgYnVmWzEwXTsKICAgY2hhciogcmVzID0gX19zdHJjcHlfY2hrKGJ1ZiwgIjAxMjM0NTY3OCIsIChzaXplX3QpLTEpOwogICBBU1NFUlRfRVEoYnVmLCByZXMpOwotICBBU1NFUlRfRVEoJzAnLCAgYnVmWzBdKTsKLSAgQVNTRVJUX0VRKCcxJywgIGJ1ZlsxXSk7Ci0gIEFTU0VSVF9FUSgnMicsICBidWZbMl0pOwotICBBU1NFUlRfRVEoJzMnLCAgYnVmWzNdKTsKLSAgQVNTRVJUX0VRKCc0JywgIGJ1Zls0XSk7Ci0gIEFTU0VSVF9FUSgnNScsICBidWZbNV0pOwotICBBU1NFUlRfRVEoJzYnLCAgYnVmWzZdKTsKLSAgQVNTRVJUX0VRKCc3JywgIGJ1Zls3XSk7Ci0gIEFTU0VSVF9FUSgnOCcsICBidWZbOF0pOwotICBBU1NFUlRfRVEoJ1wwJywgYnVmWzldKTsKKyAgQVNTRVJUX1NUUkVRKCIwMTIzNDU2NzgiLCBidWYpOwogfQogCiBleHRlcm4gIkMiIHZvaWQqIF9fbWVtY3B5X2Noayh2b2lkKiwgY29uc3Qgdm9pZCosIHNpemVfdCwgc2l6ZV90KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2Z0d190ZXN0LmNwcCBiL3Rlc3RzL2Z0d190ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDNhMzA4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZnR3X3Rlc3QuY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlICJUZW1wb3JhcnlGaWxlLmgiCisKKyNpbmNsdWRlIDxmdHcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCit2b2lkIHNhbml0eV9jaGVja19mdHcoY29uc3QgY2hhciogZnBhdGgsIGNvbnN0IHN0cnVjdCBzdGF0KiBzYiwgaW50IHRmbGFnKSB7CisgIEFTU0VSVF9UUlVFKGZwYXRoICE9IE5VTEwpOworICBBU1NFUlRfVFJVRShzYiAhPSBOVUxMKTsKKyAgYm9vbCBpc19kaXIgPSBTX0lTRElSKHNiLT5zdF9tb2RlKTsKKyAgQVNTRVJUX1RSVUUoKGlzX2RpciAmJiB0ZmxhZyA9PSBGVFdfRCkgfHwgKCFpc19kaXIgJiYgdGZsYWcgPT0gRlRXX0YpKTsKK30KKwordm9pZCBzYW5pdHlfY2hlY2tfbmZ0dygKKyAgICBjb25zdCBjaGFyKiBmcGF0aCwgY29uc3Qgc3RydWN0IHN0YXQqIHNiLCBpbnQgdGZsYWcsIHN0cnVjdCBGVFcqIGZ0d2J1ZikgeworICBzYW5pdHlfY2hlY2tfZnR3KGZwYXRoLCBzYiwgdGZsYWcpOworICAvLyBlaXRoZXIgdGhlIHBhcmVudCBkaXIgb3IgdGhlIGZpbGUKKyAgYm9vbCBpc19kaXIgPSBTX0lTRElSKHNiLT5zdF9tb2RlKTsKKyAgQVNTRVJUX1RSVUUoCisgICAgKGlzX2RpciAmJiBmdHdidWYtPmxldmVsID09IDApIHx8ICghaXNfZGlyICYmIGZ0d2J1Zi0+bGV2ZWwgPT0gMSkpOworfQorCitpbnQgY2hlY2tfZnR3KGNvbnN0IGNoYXIqIGZwYXRoLCBjb25zdCBzdHJ1Y3Qgc3RhdCogc2IsIGludCB0ZmxhZykgeworICBzYW5pdHlfY2hlY2tfZnR3KGZwYXRoLCBzYiwgdGZsYWcpOworICByZXR1cm4gMDsKK30KKworaW50IGNoZWNrX2Z0dzY0KGNvbnN0IGNoYXIqIGZwYXRoLCBjb25zdCBzdHJ1Y3Qgc3RhdDY0KiBzYiwgaW50IHRmbGFnKSB7CisgIHNhbml0eV9jaGVja19mdHcoZnBhdGgsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgc3RydWN0IHN0YXQqPihzYiksIHRmbGFnKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBjaGVja19uZnR3KAorICBjb25zdCBjaGFyKiBmcGF0aCwgY29uc3Qgc3RydWN0IHN0YXQqIHNiLCBpbnQgdGZsYWcsIHN0cnVjdCBGVFcqIGZ0d2J1ZikgeworICBzYW5pdHlfY2hlY2tfbmZ0dyhmcGF0aCwgc2IsIHRmbGFnLCBmdHdidWYpOworICByZXR1cm4gMDsKK30KKworaW50IGNoZWNrX25mdHc2NCgKKyAgY29uc3QgY2hhciogZnBhdGgsIGNvbnN0IHN0cnVjdCBzdGF0NjQqIHNiLCBpbnQgdGZsYWcsIHN0cnVjdCBGVFcqIGZ0d2J1ZikgeworICBzYW5pdHlfY2hlY2tfbmZ0dyhmcGF0aCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBzdHJ1Y3Qgc3RhdCo+KHNiKSwKKyAgICB0ZmxhZywgZnR3YnVmKTsKKyAgcmV0dXJuIDA7Cit9CisKK1RFU1QoZnR3LCBmdHcpIHsKKyAgVGVtcG9yYXJ5RGlyIHRkOworICBUZW1wb3JhcnlGaWxlIHRmKHRkLmRpcm5hbWUpOworICBmdHcodGQuZGlybmFtZSwgY2hlY2tfZnR3LCAxKTsKK30KKworVEVTVChmdHcsIGZ0dzY0KSB7CisgIFRlbXBvcmFyeURpciB0ZDsKKyAgR2VuZXJpY1RlbXBvcmFyeUZpbGU8bWtzdGVtcDY0PiB0Zih0ZC5kaXJuYW1lKTsKKyAgZnR3NjQodGQuZGlybmFtZSwgY2hlY2tfZnR3NjQsIDEpOworfQorCitURVNUKGZ0dywgbmZ0dykgeworICBUZW1wb3JhcnlEaXIgdGQ7CisgIFRlbXBvcmFyeUZpbGUgdGYodGQuZGlybmFtZSk7CisgIG5mdHcodGQuZGlybmFtZSwgY2hlY2tfbmZ0dywgMSwgMCk7Cit9CisKK1RFU1QoZnR3LCBuZnR3NjQpIHsKKyAgVGVtcG9yYXJ5RGlyIHRkOworICBHZW5lcmljVGVtcG9yYXJ5RmlsZTxta3N0ZW1wNjQ+IHRmKHRkLmRpcm5hbWUpOworICBuZnR3NjQodGQuZGlybmFtZSwgY2hlY2tfbmZ0dzY0LCAxLCAwKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2dldGF1eHZhbF90ZXN0LmNwcCBiL3Rlc3RzL2dldGF1eHZhbF90ZXN0LmNwcAppbmRleCAwMWMxMWMzLi41MWM5ZGI4IDEwMDY0NAotLS0gYS90ZXN0cy9nZXRhdXh2YWxfdGVzdC5jcHAKKysrIGIvdGVzdHMvZ2V0YXV4dmFsX3Rlc3QuY3BwCkBAIC0zMSwxMCArMzEsMTEgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChHRVRBVVhWQUxfQ0FOX0NPTVBJTEUpCi0KICNpbmNsdWRlIDxzeXMvYXV4di5oPgorI2VuZGlmCiAKIFRFU1QoZ2V0YXV4dmFsLCBleHBlY3RlZF92YWx1ZXMpIHsKKyNpZiBkZWZpbmVkKEdFVEFVWFZBTF9DQU5fQ09NUElMRSkKICAgQVNTRVJUX0VRKCh1bnNpZ25lZCBsb25nIGludCkgMCwgZ2V0YXV4dmFsKEFUX1NFQ1VSRSkpOwogICBBU1NFUlRfRVEoZ2V0dWlkKCksIGdldGF1eHZhbChBVF9VSUQpKTsKICAgQVNTRVJUX0VRKGdldGV1aWQoKSwgZ2V0YXV4dmFsKEFUX0VVSUQpKTsKQEAgLTQ2LDEwICs0NywxNSBAQAogICBBU1NFUlRfTkUoKHVuc2lnbmVkIGxvbmcgaW50KSAwLCBnZXRhdXh2YWwoQVRfUEhOVU0pKTsKICAgQVNTRVJUX05FKCh1bnNpZ25lZCBsb25nIGludCkgMCwgZ2V0YXV4dmFsKEFUX0VOVFJZKSk7CiAgIEFTU0VSVF9ORSgodW5zaWduZWQgbG9uZyBpbnQpIDAsIGdldGF1eHZhbChBVF9QQUdFU1opKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmCiB9CiAKIFRFU1QoZ2V0YXV4dmFsLCB1bmV4cGVjdGVkX3ZhbHVlcykgeworI2lmIGRlZmluZWQoR0VUQVVYVkFMX0NBTl9DT01QSUxFKQogICBBU1NFUlRfRVEoKHVuc2lnbmVkIGxvbmcgaW50KSAwLCBnZXRhdXh2YWwoMHhkZWFkYmVlZikpOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYKIH0KLQotI2VuZGlmIC8qIEdFVEFVWFZBTF9DQU5fQ09NUElMRSAqLwpkaWZmIC0tZ2l0IGEvdGVzdHMvaW50dHlwZXNfdGVzdC5jcHAgYi90ZXN0cy9pbnR0eXBlc190ZXN0LmNwcAppbmRleCBkZjAyZDFmLi5lNTg4NTAzIDEwMDY0NAotLS0gYS90ZXN0cy9pbnR0eXBlc190ZXN0LmNwcAorKysgYi90ZXN0cy9pbnR0eXBlc190ZXN0LmNwcApAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8aW50dHlwZXMuaD4KIAotI2lmIGRlZmluZWQoX19CSU9OSUNfXykgLy8gRG9lc24ndCB3b3JrIG9uIGdsaWJjIGJlY2F1c2Ugd2UgdXNlIC1tMzIuCiBURVNUKGludHR5cGVzLCBtaXNjKSB7CiAgIGNoYXIgYnVmWzUxMl07CiAKQEAgLTM5LDQgKzM4LDExIEBACiAgIHNzY2FuZihidWYsICIlMDgiIFNDTnVQVFIsICZ1KTsKICAgc3NjYW5mKGJ1ZiwgIiUwOCIgU0NOeFBUUiwgJnUpOwogfQotI2VuZGlmCisKK1RFU1QoaW50dHlwZXMsIHdjc3RvaW1heCkgeworICBBU1NFUlRfRVEoMTIzLCB3Y3N0b2ltYXgoTCIxMjMiLCBOVUxMLCAxMCkpOworfQorCitURVNUKGludHR5cGVzLCB3Y3N0b3VtYXgpIHsKKyAgQVNTRVJUX0VRKDEyM1UsIHdjc3RvdW1heChMIjEyMyIsIE5VTEwsIDEwKSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9saWJjX2xvZ2dpbmdfdGVzdC5jcHAgYi90ZXN0cy9saWJjX2xvZ2dpbmdfdGVzdC5jcHAKaW5kZXggYzQ0Yjg1Yi4uOTUwMTYxZSAxMDA2NDQKLS0tIGEvdGVzdHMvbGliY19sb2dnaW5nX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL2xpYmNfbG9nZ2luZ190ZXN0LmNwcApAQCAtMTcsMTIgKzE3LDEyIEBACiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIAogI2lmIGRlZmluZWQoX19CSU9OSUNfXykKLQogI2luY2x1ZGUgIi4uL2xpYmMvYmlvbmljL2xpYmNfbG9nZ2luZy5jcHAiCi0KIGV4dGVybiBpbnQgX19saWJjX2Zvcm1hdF9idWZmZXIoY2hhciogYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKTsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiAKIFRFU1QobGliY19sb2dnaW5nLCBzbW9rZSkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgY2hhciBidWZbQlVGU0laXTsKIAogICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiYSIpOwpAQCAtMTA0LDIxICsxMDQsMzMgQEAKIAogICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiYSVsbGQsJWQsJWQsJWR6IiwgMHgxMDAwMDAwMDAwTEwsIDYsIDcsIDgpOwogICBFWFBFQ1RfU1RSRVEoImE2ODcxOTQ3NjczNiw2LDcsOHoiLCBidWYpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QobGliY19sb2dnaW5nLCBkX0lOVF9NQVgpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIGNoYXIgYnVmW0JVRlNJWl07CiAgIF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIElOVF9NQVgpOwogICBFWFBFQ1RfU1RSRVEoIjIxNDc0ODM2NDciLCBidWYpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QobGliY19sb2dnaW5nLCBkX0lOVF9NSU4pIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIGNoYXIgYnVmW0JVRlNJWl07CiAgIF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIElOVF9NSU4pOwogICBFWFBFQ1RfU1RSRVEoIi0yMTQ3NDgzNjQ4IiwgYnVmKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCiBURVNUKGxpYmNfbG9nZ2luZywgbGRfTE9OR19NQVgpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIGNoYXIgYnVmW0JVRlNJWl07CiAgIF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlbGQiLCBMT05HX01BWCk7CiAjaWYgX19MUDY0X18KQEAgLTEyNiw5ICsxMzgsMTMgQEAKICNlbHNlCiAgIEVYUEVDVF9TVFJFUSgiMjE0NzQ4MzY0NyIsIGJ1Zik7CiAjZW5kaWYKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCiBURVNUKGxpYmNfbG9nZ2luZywgbGRfTE9OR19NSU4pIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIGNoYXIgYnVmW0JVRlNJWl07CiAgIF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlbGQiLCBMT05HX01JTik7CiAjaWYgX19MUDY0X18KQEAgLTEzNiwxOCArMTUyLDI3IEBACiAjZWxzZQogICBFWFBFQ1RfU1RSRVEoIi0yMTQ3NDgzNjQ4IiwgYnVmKTsKICNlbmRpZgorI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QobGliY19sb2dnaW5nLCBsbGRfTExPTkdfTUFYKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBjaGFyIGJ1ZltCVUZTSVpdOwogICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiJWxsZCIsIExMT05HX01BWCk7CiAgIEVYUEVDVF9TVFJFUSgiOTIyMzM3MjAzNjg1NDc3NTgwNyIsIGJ1Zik7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAogVEVTVChsaWJjX2xvZ2dpbmcsIGxsZF9MTE9OR19NSU4pIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIGNoYXIgYnVmW0JVRlNJWl07CiAgIF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlbGxkIiwgTExPTkdfTUlOKTsKICAgRVhQRUNUX1NUUkVRKCItOTIyMzM3MjAzNjg1NDc3NTgwOCIsIGJ1Zik7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy9saWJnZW5fdGVzdC5jcHAgYi90ZXN0cy9saWJnZW5fdGVzdC5jcHAKaW5kZXggYzJjMDFmNi4uMzk1OGY4MSAxMDA2NDQKLS0tIGEvdGVzdHMvbGliZ2VuX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL2xpYmdlbl90ZXN0LmNwcApAQCAtMzgsNyArMzgsOSBAQAogICBmcmVlKHdyaXRhYmxlX2luKTsKIH0KIAotVEVTVChsaWJnZW4sIGJhc2VuYW1lKSB7CisvLyBEbyBub3QgdXNlIGJhc2VuYW1lIGFzIHRoZSB0ZXN0IG5hbWUsIGl0J3MgZGVmaW5lZCB0byBhbm90aGVyIHZhbHVlIGluIGdsaWJjCisvLyBzbyBsZWFkcyB0byBhIGRpZmZlcmVudGx5IG5hbWVkIHRlc3Qgb24gaG9zdCB2ZXJzdXMgdGFyZ2V0IGFyY2hpdGVjdHVyZXMuCitURVNUKGxpYmdlbiwgYmFzZW5hbWVfc21va2UpIHsKICAgVGVzdEJhc2VuYW1lKE5VTEwsICIuIik7CiAgIFRlc3RCYXNlbmFtZSgiIiwgIi4iKTsKICAgVGVzdEJhc2VuYW1lKCIvdXNyL2xpYiIsICJsaWIiKTsKQEAgLTYyLDggKzY0LDcgQEAKICAgVGVzdERpcm5hbWUoIi8iLCAiLyIpOwogfQogCi0jaWYgX19CSU9OSUNfXwotCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKSAmJiAhZGVmaW5lZChfX0xQNjRfXykKIHN0YXRpYyB2b2lkIFRlc3RCYXNlbmFtZShjb25zdCBjaGFyKiBpbiwgY29uc3QgY2hhciogZXhwZWN0ZWRfb3V0LCBpbnQgZXhwZWN0ZWRfcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogYnVmLCBzaXplX3QgYnVmX3NpemUsIGludCBleHBlY3RlZF9lcnJubykgewogICBlcnJubyA9IDA7CkBAIC04NSw4ICs4NiwxMCBAQAogICB9CiAgIEFTU0VSVF9FUShleHBlY3RlZF9lcnJubywgZXJybm8pIDw8IGluOwogfQorI2VuZGlmIC8vIF9fQklPTklDX18KIAogVEVTVChsaWJnZW4sIGJhc2VuYW1lX3IpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pICYmICFkZWZpbmVkKF9fTFA2NF9fKQogICBjaGFyIGJ1ZlsyNTZdOwogICBUZXN0QmFzZW5hbWUoIiIsICIuIiwgIDEsIE5VTEwsIDAsIDApOwogICBUZXN0QmFzZW5hbWUoIiIsICIuIiwgLTEsIGJ1ZiwgMCwgRVJBTkdFKTsKQEAgLTk5LDkgKzEwMiwxMyBAQAogICBUZXN0QmFzZW5hbWUoIi8iLCAiLyIsIDEsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwogICBUZXN0QmFzZW5hbWUoIi4iLCAiLiIsIDEsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwogICBUZXN0QmFzZW5hbWUoIi4uIiwgIi4uIiwgMiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAogVEVTVChsaWJnZW4sIGRpcm5hbWVfcikgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykgJiYgIWRlZmluZWQoX19MUDY0X18pCiAgIGNoYXIgYnVmWzI1Nl07CiAgIFRlc3REaXJuYW1lKCIiLCAiLiIsICAxLCBOVUxMLCAwLCAwKTsKICAgVGVzdERpcm5hbWUoIiIsICIuIiwgLTEsIGJ1ZiwgMCwgRVJBTkdFKTsKQEAgLTExMiw2ICsxMTksNyBAQAogICBUZXN0RGlybmFtZSgidXNyIiwgIi4iLCAxLCBidWYsIHNpemVvZihidWYpLCAwKTsKICAgVGVzdERpcm5hbWUoIi4iLCAiLiIsIDEsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwogICBUZXN0RGlybmFtZSgiLi4iLCAiLiIsIDEsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlicy9BbmRyb2lkLm1rIGIvdGVzdHMvbGlicy9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZGY1MzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWJzL0FuZHJvaWQubWsKQEAgLTAsMCArMSwxNDIgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKK0xPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKK1RFU1RfUEFUSCA6PSAkKExPQ0FMX1BBVEgpLy4uCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlicmFyeSB1c2VkIGJ5IGRsZmNuIHRlc3RzLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraWZuZXEgKCQoVEFSR0VUX0FSQ0gpLCQoZmlsdGVyICQoVEFSR0VUX0FSQ0gpLG1pcHMgbWlwczY0KSkKK25vLWVsZi1oYXNoLXRhYmxlLWxpYnJhcnlfc3JjX2ZpbGVzIDo9IFwKKyAgICBlbXB0eS5jcHAgXAorCituby1lbGYtaGFzaC10YWJsZS1saWJyYXJ5X2xkZmxhZ3MgOj0gXAorICAgIC1XbCwtLWhhc2gtc3R5bGU9Z251IFwKKworbW9kdWxlIDo9IG5vLWVsZi1oYXNoLXRhYmxlLWxpYnJhcnkKK21vZHVsZV90YWcgOj0gb3B0aW9uYWwKK2J1aWxkX3R5cGUgOj0gdGFyZ2V0CitidWlsZF90YXJnZXQgOj0gU0hBUkVEX0xJQlJBUlkKK2luY2x1ZGUgJChURVNUX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKK2VuZGlmCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlicmFyeSB1c2VkIGJ5IGRsZXh0IHRlc3RzIC0gd2l0aCBHTlUgUkVMUk8gcHJvZ3JhbSBoZWFkZXIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xpYmRsZXh0X3Rlc3Rfc3JjX2ZpbGVzIDo9IFwKKyAgICBkbGV4dF90ZXN0X2xpYnJhcnkuY3BwIFwKKworbGliZGxleHRfdGVzdF9sZGZsYWdzIDo9IFwKKyAgICAtV2wsLXoscmVscm8gXAorCittb2R1bGUgOj0gbGliZGxleHRfdGVzdAorbW9kdWxlX3RhZyA6PSBvcHRpb25hbAorYnVpbGRfdHlwZSA6PSB0YXJnZXQKK2J1aWxkX3RhcmdldCA6PSBTSEFSRURfTElCUkFSWQoraW5jbHVkZSAkKFRFU1RfUEFUSCkvQW5kcm9pZC5idWlsZC5taworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNyZWF0ZSBzeW1saW5rIHRvIGxpYmRsZXh0X3Rlc3Quc28gZm9yIHN5bWxpbmsgdGVzdAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBVc2UgPSBpbnN0ZWFkIG9mIDo9IHRvIGRlZmVyIHRoZSBldmFsdWF0aW9uIG9mICRACiskKExPQ0FMX0lOU1RBTExFRF9NT0RVTEUpOiBQUklWQVRFX1BPU1RfSU5TVEFMTF9DTUQgPSBcCisgICAgJChoaWRlKSBjZCAkKGRpciAkQCkgJiYgbG4gLXNmICQobm90ZGlyICRAKSBsaWJkbGV4dF90ZXN0X3YyLnNvCisKK2lmbmVxICgkKFRBUkdFVF8yTkRfQVJDSCksKQorIyBsaW5rIDY0IGJpdCAuc28KKyQoVEFSR0VUX09VVCkvbGliNjQvbGliZGxleHRfdGVzdC5zbzogUFJJVkFURV9QT1NUX0lOU1RBTExfQ01EID0gXAorICAgICQoaGlkZSkgY2QgJChkaXIgJEApICYmIGxuIC1zZiAkKG5vdGRpciAkQCkgbGliZGxleHRfdGVzdF92Mi5zbworZW5kaWYKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJyYXJ5IHVzZWQgYnkgZGxleHQgdGVzdHMgLSB3aXRob3V0IEdOVSBSRUxSTyBwcm9ncmFtIGhlYWRlcgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGliZGxleHRfdGVzdF9ub3JlbHJvX3NyY19maWxlcyA6PSBcCisgICAgZGxleHRfdGVzdF9saWJyYXJ5LmNwcCBcCisKK2xpYmRsZXh0X3Rlc3Rfbm9yZWxyb19sZGZsYWdzIDo9IFwKKyAgICAtV2wsLXosbm9yZWxybyBcCisKK21vZHVsZSA6PSBsaWJkbGV4dF90ZXN0X25vcmVscm8KK21vZHVsZV90YWcgOj0gb3B0aW9uYWwKK2J1aWxkX3R5cGUgOj0gdGFyZ2V0CitidWlsZF90YXJnZXQgOj0gU0hBUkVEX0xJQlJBUlkKK2luY2x1ZGUgJChURVNUX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJyYXJ5IHVzZWQgYnkgZGxleHQgdGVzdHMgLSBkaWZmZXJlbnQgbmFtZSBub24tZGVmYXVsdCBsb2NhdGlvbgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGliZGxleHRfdGVzdF9mZF9zcmNfZmlsZXMgOj0gXAorICAgIGRsZXh0X3Rlc3RfbGlicmFyeS5jcHAgXAorCitsaWJkbGV4dF90ZXN0X2ZkX2luc3RhbGxfdG9fb3V0X2RhdGEgOj0gdHJ1ZQorbW9kdWxlIDo9IGxpYmRsZXh0X3Rlc3RfZmQKK21vZHVsZV90YWcgOj0gb3B0aW9uYWwKK2J1aWxkX3R5cGUgOj0gdGFyZ2V0CitidWlsZF90YXJnZXQgOj0gU0hBUkVEX0xJQlJBUlkKK2luY2x1ZGUgJChURVNUX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJyYXJ5IHVzZWQgYnkgZGxmY24gdGVzdHMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xpYnRlc3Rfc2ltcGxlX3NyY19maWxlcyA6PSBcCisgICAgZGxvcGVuX3Rlc3RsaWJfc2ltcGxlLmNwcAorCittb2R1bGUgOj0gbGlidGVzdF9zaW1wbGUKK2J1aWxkX3R5cGUgOj0gdGFyZ2V0CitidWlsZF90YXJnZXQgOj0gU0hBUkVEX0xJQlJBUlkKK2luY2x1ZGUgJChURVNUX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJyYXJ5IHdpdGggZGVwZW5kZW5jeSB1c2VkIGJ5IGRsZmNuIHRlc3RzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsaWJ0ZXN0X3dpdGhfZGVwZW5kZW5jeV9zcmNfZmlsZXMgOj0gXAorICAgIGRsb3Blbl90ZXN0bGliX3NpbXBsZS5jcHAKKworbGlidGVzdF93aXRoX2RlcGVuZGVuY3lfc2hhcmVkX2xpYnJhcmllcyA6PSBsaWJkbGV4dF90ZXN0CisKK21vZHVsZSA6PSBsaWJ0ZXN0X3dpdGhfZGVwZW5kZW5jeQorYnVpbGRfdHlwZSA6PSB0YXJnZXQKK2J1aWxkX3RhcmdldCA6PSBTSEFSRURfTElCUkFSWQoraW5jbHVkZSAkKFRFU1RfUEFUSCkvQW5kcm9pZC5idWlsZC5taworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpYnJhcnkgdXNlZCBieSBhdGV4aXQgdGVzdHMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbGlidGVzdF9hdGV4aXRfc3JjX2ZpbGVzIDo9IFwKKyAgICBhdGV4aXRfdGVzdGxpYi5jcHAKKworbW9kdWxlIDo9IGxpYnRlc3RfYXRleGl0CitidWlsZF90YXJnZXQgOj0gU0hBUkVEX0xJQlJBUlkKK2J1aWxkX3R5cGUgOj0gdGFyZ2V0CitpbmNsdWRlICQoVEVTVF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCitidWlsZF90eXBlIDo9IGhvc3QKK2luY2x1ZGUgJChURVNUX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJyYXJ5IHdpdGggd2VhayBmdW5jdGlvbgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGlidGVzdF9kbHN5bV93ZWFrX2Z1bmNfc3JjX2ZpbGVzIDo9IFwKKyAgICBkbHN5bV93ZWFrX2Z1bmN0aW9uLmNwcAorCittb2R1bGUgOj0gbGlidGVzdF9kbHN5bV93ZWFrX2Z1bmMKK2J1aWxkX3RhcmdldCA6PSBTSEFSRURfTElCUkFSWQorYnVpbGRfdHlwZSA6PSB0YXJnZXQKK2luY2x1ZGUgJChURVNUX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKK2J1aWxkX3R5cGUgOj0gaG9zdAoraW5jbHVkZSAkKFRFU1RfUEFUSCkvQW5kcm9pZC5idWlsZC5tawpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlicy9hdGV4aXRfdGVzdGxpYi5jcHAgYi90ZXN0cy9saWJzL2F0ZXhpdF90ZXN0bGliLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzVmNTdiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbGlicy9hdGV4aXRfdGVzdGxpYi5jcHAKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPHN0cmluZz4KKworLy8gdXNlIGV4dGVybmFsIGNvbnRyb2wgbnVtYmVyIGZyb20gbWFpbiB0ZXN0CitzdGF0aWMgc3RkOjpzdHJpbmcqIGF0ZXhpdF9zZXF1ZW5jZSA9IE5VTEw7CitzdGF0aWMgYm9vbCogYXRleGl0X3ZhbGlkX3RoaXNfaW5fc3RhdGljX2R0b3IgPSBOVUxMOworCitzdGF0aWMgY2xhc3MgQXRFeGl0U3RhdGljQ2xhc3MgeworIHB1YmxpYzoKKyAgQXRFeGl0U3RhdGljQ2xhc3MoKSB7IGV4cGVjdGVkX3RoaXMgPSB0aGlzOyB9CisgIH5BdEV4aXRTdGF0aWNDbGFzcygpIHsKKyAgICBpZiAoYXRleGl0X3ZhbGlkX3RoaXNfaW5fc3RhdGljX2R0b3IpIHsKKyAgICAgICphdGV4aXRfdmFsaWRfdGhpc19pbl9zdGF0aWNfZHRvciA9IChleHBlY3RlZF90aGlzID09IHRoaXMpOworICAgIH0KKyAgfQorIHByaXZhdGU6CisgIHN0YXRpYyBjb25zdCBBdEV4aXRTdGF0aWNDbGFzcyogZXhwZWN0ZWRfdGhpczsKKworfSBzdGF0aWNfb2JqOworCitjb25zdCBBdEV4aXRTdGF0aWNDbGFzcyogQXRFeGl0U3RhdGljQ2xhc3M6OmV4cGVjdGVkX3RoaXMgPSBOVUxMOworCisvLyA0CitzdGF0aWMgdm9pZCBhdGV4aXRfaGFuZGxlcl9mcm9tX2F0ZXhpdF9mcm9tX2F0ZXhpdDIoKSB7CisgICphdGV4aXRfc2VxdWVuY2UgKz0gIiBvbiI7Cit9CisKKy8vIDMKK3N0YXRpYyB2b2lkIGF0ZXhpdF9oYW5kbGVyX2Zyb21fYXRleGl0X2Zyb21fYXRleGl0MSgpIHsKKyAgKmF0ZXhpdF9zZXF1ZW5jZSArPSAiIHNhdCI7Cit9CisKKy8vIDIKK3N0YXRpYyB2b2lkIGF0ZXhpdF9oYW5kbGVyX2Zyb21fYXRleGl0KCkgeworICAqYXRleGl0X3NlcXVlbmNlICs9ICIgRHVtcHR5IjsKKyAgLy8gcmVnaXN0ZXIgMiBvdGhlcnMKKyAgYXRleGl0KGF0ZXhpdF9oYW5kbGVyX2Zyb21fYXRleGl0X2Zyb21fYXRleGl0Mik7CisgIGF0ZXhpdChhdGV4aXRfaGFuZGxlcl9mcm9tX2F0ZXhpdF9mcm9tX2F0ZXhpdDEpOworfQorCisvLyAxCitzdGF0aWMgdm9pZCBhdGV4aXRfaGFuZGxlcl93aXRoX2F0ZXhpdCgpIHsKKyAgKmF0ZXhpdF9zZXF1ZW5jZSArPSAiSHVtcHR5IjsKKyAgYXRleGl0KGF0ZXhpdF9oYW5kbGVyX2Zyb21fYXRleGl0KTsKK30KKworLy8gbGFzdAorc3RhdGljIHZvaWQgYXRleGl0X2hhbmRsZXJfcmVndWxhcigpIHsKKyAgKmF0ZXhpdF9zZXF1ZW5jZSArPSAiIGEgd2FsbCI7Cit9CisKK2V4dGVybiAiQyIgdm9pZCByZWdpc3Rlcl9hdGV4aXQoc3RkOjpzdHJpbmcqIHNlcXVlbmNlLCBib29sKiB2YWxpZF90aGlzX2luX3N0YXRpY19kdG9yKSB7CisgIGF0ZXhpdF9zZXF1ZW5jZSA9IHNlcXVlbmNlOworICBhdGV4aXRfdmFsaWRfdGhpc19pbl9zdGF0aWNfZHRvciA9IHZhbGlkX3RoaXNfaW5fc3RhdGljX2R0b3I7CisgIGF0ZXhpdChhdGV4aXRfaGFuZGxlcl9yZWd1bGFyKTsKKyAgYXRleGl0KGF0ZXhpdF9oYW5kbGVyX3dpdGhfYXRleGl0KTsKK30KKwpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlicy9kbGV4dF90ZXN0X2xpYnJhcnkuY3BwIGIvdGVzdHMvbGlicy9kbGV4dF90ZXN0X2xpYnJhcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMDQzMjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWJzL2RsZXh0X3Rlc3RfbGlicmFyeS5jcHAKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2NsYXNzIEEgeworcHVibGljOgorICB2aXJ0dWFsIGludCBnZXRSYW5kb21OdW1iZXIoKSB7CisgICAgcmV0dXJuIDQ7ICAvLyBjaG9zZW4gYnkgZmFpciBkaWNlIHJvbGwuCisgICAgICAgICAgICAgICAvLyBndWFyYW50ZWVkIHRvIGJlIHJhbmRvbS4KKyAgfQorCisgIHZpcnR1YWwgfkEoKSB7fQorfTsKKworQSBhOworCisvLyBuZXN0ZWQgbWFjcm9zIHRvIG1ha2UgaXQgZWFzeSB0byBkZWZpbmUgYSBsYXJnZSBhbW91bnQgb2YgcmVhZC1vbmx5IGRhdGEKKy8vIHdoaWNoIHdpbGwgcmVxdWlyZSByZWxvY2F0aW9uLgorI2RlZmluZSBBXzE2ICZhLCAmYSwgJmEsICZhLCAmYSwgJmEsICZhLCAmYSwgJmEsICZhLCAmYSwgJmEsICZhLCAmYSwgJmEsICZhLAorI2RlZmluZSBBXzEyOCBBXzE2IEFfMTYgQV8xNiBBXzE2IEFfMTYgQV8xNiBBXzE2IEFfMTYKKyNkZWZpbmUgQV8xMDI0IEFfMTI4IEFfMTI4IEFfMTI4IEFfMTI4IEFfMTI4IEFfMTI4IEFfMTI4IEFfMTI4CisKK2V4dGVybiAiQyIgQSogY29uc3QgbG90c19vZl9yZWxyb1tdID0geworICBBXzEwMjQgQV8xMDI0IEFfMTAyNCBBXzEwMjQgQV8xMDI0IEFfMTAyNCBBXzEwMjQgQV8xMDI0Cit9OworCitleHRlcm4gIkMiIGludCBnZXRSYW5kb21OdW1iZXIoKSB7CisgIC8vIGFjY2VzcyB0aGUgcmVscm8gc2VjdGlvbiAodHdpY2UsIGluIGZhY3QsIG9uY2UgZm9yIHRoZSBwb2ludGVyLCBhbmQgb25jZQorICAvLyBmb3IgdGhlIHZ0YWJsZSBvZiBBKSB0byBjaGVjayBpdCdzIGFjdHVhbGx5IHRoZXJlLgorICByZXR1cm4gbG90c19vZl9yZWxyb1swXS0+Z2V0UmFuZG9tTnVtYmVyKCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX3NpbXBsZS5jcHAgYi90ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX3NpbXBsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZlNTRiNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xpYnMvZGxvcGVuX3Rlc3RsaWJfc2ltcGxlLmNwcApAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCit1aW50MzJfdCBkbG9wZW5fdGVzdGxpYl90YXhpY2FiX251bWJlciA9IDE3Mjk7CisKK2Jvb2wgZGxvcGVuX3Rlc3RsaWJfc2ltcGxlX2Z1bmMoKSB7CisgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlicy9kbHN5bV93ZWFrX2Z1bmN0aW9uLmNwcCBiL3Rlc3RzL2xpYnMvZGxzeW1fd2Vha19mdW5jdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM4ZjJiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xpYnMvZGxzeW1fd2Vha19mdW5jdGlvbi5jcHAKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2V4dGVybiAiQyIgaW50IF9fYXR0cmlidXRlX18oKHdlYWspKSB3ZWFrX2Z1bmMoKSB7CisgIHJldHVybiA0MjsKK30KKwpkaWZmIC0tZ2l0IGEvdGVzdHMvZW1wdHkuY3BwIGIvdGVzdHMvbGlicy9lbXB0eS5jcHAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzL2VtcHR5LmNwcApyZW5hbWUgdG8gdGVzdHMvbGlicy9lbXB0eS5jcHAKZGlmZiAtLWdpdCBhL3Rlc3RzL2xvY2FsZV90ZXN0LmNwcCBiL3Rlc3RzL2xvY2FsZV90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWM2MDdhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbG9jYWxlX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorCitURVNUKGxvY2FsZSwgbG9jYWxlY29udikgeworICBFWFBFQ1RfU1RSRVEoIi4iLCBsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQpOworICBFWFBFQ1RfU1RSRVEoIiIsIGxvY2FsZWNvbnYoKS0+dGhvdXNhbmRzX3NlcCk7CisgIEVYUEVDVF9TVFJFUSgiIiwgbG9jYWxlY29udigpLT5ncm91cGluZyk7CisgIEVYUEVDVF9TVFJFUSgiIiwgbG9jYWxlY29udigpLT5pbnRfY3Vycl9zeW1ib2wpOworICBFWFBFQ1RfU1RSRVEoIiIsIGxvY2FsZWNvbnYoKS0+Y3VycmVuY3lfc3ltYm9sKTsKKyAgRVhQRUNUX1NUUkVRKCIiLCBsb2NhbGVjb252KCktPm1vbl9kZWNpbWFsX3BvaW50KTsKKyAgRVhQRUNUX1NUUkVRKCIiLCBsb2NhbGVjb252KCktPm1vbl90aG91c2FuZHNfc2VwKTsKKyAgRVhQRUNUX1NUUkVRKCIiLCBsb2NhbGVjb252KCktPm1vbl9ncm91cGluZyk7CisgIEVYUEVDVF9TVFJFUSgiIiwgbG9jYWxlY29udigpLT5wb3NpdGl2ZV9zaWduKTsKKyAgRVhQRUNUX1NUUkVRKCIiLCBsb2NhbGVjb252KCktPm5lZ2F0aXZlX3NpZ24pOworICBFWFBFQ1RfRVEoQ0hBUl9NQVgsIGxvY2FsZWNvbnYoKS0+aW50X2ZyYWNfZGlnaXRzKTsKKyAgRVhQRUNUX0VRKENIQVJfTUFYLCBsb2NhbGVjb252KCktPmZyYWNfZGlnaXRzKTsKKyAgRVhQRUNUX0VRKENIQVJfTUFYLCBsb2NhbGVjb252KCktPnBfY3NfcHJlY2VkZXMpOworICBFWFBFQ1RfRVEoQ0hBUl9NQVgsIGxvY2FsZWNvbnYoKS0+cF9zZXBfYnlfc3BhY2UpOworICBFWFBFQ1RfRVEoQ0hBUl9NQVgsIGxvY2FsZWNvbnYoKS0+bl9jc19wcmVjZWRlcyk7CisgIEVYUEVDVF9FUShDSEFSX01BWCwgbG9jYWxlY29udigpLT5uX3NlcF9ieV9zcGFjZSk7CisgIEVYUEVDVF9FUShDSEFSX01BWCwgbG9jYWxlY29udigpLT5wX3NpZ25fcG9zbik7CisgIEVYUEVDVF9FUShDSEFSX01BWCwgbG9jYWxlY29udigpLT5uX3NpZ25fcG9zbik7CisgIEVYUEVDVF9FUShDSEFSX01BWCwgbG9jYWxlY29udigpLT5pbnRfcF9jc19wcmVjZWRlcyk7CisgIEVYUEVDVF9FUShDSEFSX01BWCwgbG9jYWxlY29udigpLT5pbnRfcF9zZXBfYnlfc3BhY2UpOworICBFWFBFQ1RfRVEoQ0hBUl9NQVgsIGxvY2FsZWNvbnYoKS0+aW50X25fY3NfcHJlY2VkZXMpOworICBFWFBFQ1RfRVEoQ0hBUl9NQVgsIGxvY2FsZWNvbnYoKS0+aW50X25fc2VwX2J5X3NwYWNlKTsKKyAgRVhQRUNUX0VRKENIQVJfTUFYLCBsb2NhbGVjb252KCktPmludF9wX3NpZ25fcG9zbik7CisgIEVYUEVDVF9FUShDSEFSX01BWCwgbG9jYWxlY29udigpLT5pbnRfbl9zaWduX3Bvc24pOworfQorCitURVNUKGxvY2FsZSwgc2V0bG9jYWxlKSB7CisgIEVYUEVDVF9TVFJFUSgiQy5VVEYtOCIsIHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKyAgRVhQRUNUX1NUUkVRKCJDLlVURi04Iiwgc2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKSk7CisKKyAgZXJybm8gPSAwOworICBFWFBFQ1RfRVEoTlVMTCwgc2V0bG9jYWxlKC0xLCBOVUxMKSk7CisgIEVYUEVDVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgZXJybm8gPSAwOworICBFWFBFQ1RfRVEoTlVMTCwgc2V0bG9jYWxlKDEzLCBOVUxMKSk7CisgIEVYUEVDVF9FUShFSU5WQUwsIGVycm5vKTsKKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgLy8gVGhlICIiIGxvY2FsZSBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLiBGb3IgYmlvbmljLCBpdCdzIHRoZSBDIGxvY2FsZS4KKyAgLy8gZ2xpYmMgd2lsbCBnaXZlIHVzIHNvbWV0aGluZyBsaWtlICJlbl9VUy5VVEYtOCIsIGRlcGVuZGluZyBvbiB0aGUgdXNlcidzIGNvbmZpZ3VyYXRpb24uCisgIEVYUEVDVF9TVFJFUSgiQyIsIHNldGxvY2FsZShMQ19BTEwsICIiKSk7CisjZW5kaWYKKyAgRVhQRUNUX1NUUkVRKCJDIiwgc2V0bG9jYWxlKExDX0FMTCwgIkMiKSk7CisgIEVYUEVDVF9TVFJFUSgiQyIsIHNldGxvY2FsZShMQ19BTEwsICJQT1NJWCIpKTsKKworICBlcnJubyA9IDA7CisgIEVYUEVDVF9FUShOVUxMLCBzZXRsb2NhbGUoTENfQUxMLCAidGhpcy1pcy1ub3QtYS1sb2NhbGUiKSk7CisgIEVYUEVDVF9FUShFTk9FTlQsIGVycm5vKTsgLy8gUE9TSVggc3BlY2lmaWVkLCBub3QgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIQorfQorCitURVNUKGxvY2FsZSwgbmV3bG9jYWxlKSB7CisgIGVycm5vID0gMDsKKyAgRVhQRUNUX0VRKDAsIG5ld2xvY2FsZSgxIDw8IDIwLCAiQyIsIDApKTsKKyAgRVhQRUNUX0VRKEVJTlZBTCwgZXJybm8pOworCisgIGxvY2FsZV90IGwgPSBuZXdsb2NhbGUoTENfQUxMLCAiQyIsIDApOworICBBU1NFUlRfVFJVRShsICE9IE5VTEwpOworICBmcmVlbG9jYWxlKGwpOworCisgIGVycm5vID0gMDsKKyAgRVhQRUNUX0VRKDAsIG5ld2xvY2FsZShMQ19BTEwsICJ0aGlzLWlzLW5vdC1hLWxvY2FsZSIsIDApKTsKKyAgRVhQRUNUX0VRKEVOT0VOVCwgZXJybm8pOyAvLyBQT1NJWCBzcGVjaWZpZWQsIG5vdCBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwhCit9CisKK1RFU1QobG9jYWxlLCBkdXBsb2NhbGUpIHsKKyAgbG9jYWxlX3QgY2xvbmVkX2dsb2JhbCA9IGR1cGxvY2FsZShMQ19HTE9CQUxfTE9DQUxFKTsKKyAgQVNTRVJUX1RSVUUoY2xvbmVkX2dsb2JhbCAhPSBOVUxMKTsKKyAgZnJlZWxvY2FsZShjbG9uZWRfZ2xvYmFsKTsKK30KKworVEVTVChsb2NhbGUsIHVzZWxvY2FsZSkgeworICBsb2NhbGVfdCBvcmlnaW5hbCA9IHVzZWxvY2FsZShOVUxMKTsKKyAgRVhQRUNUX0ZBTFNFKG9yaWdpbmFsID09IDApOworICBFWFBFQ1RfRVEoTENfR0xPQkFMX0xPQ0FMRSwgb3JpZ2luYWwpOworCisgIGxvY2FsZV90IG4gPSBuZXdsb2NhbGUoTENfQUxMLCAiQyIsIDApOworICBFWFBFQ1RfRkFMU0UobiA9PSAwKTsKKyAgRVhQRUNUX0ZBTFNFKG4gPT0gb3JpZ2luYWwpOworCisgIGxvY2FsZV90IG9sZCA9IHVzZWxvY2FsZShuKTsKKyAgRVhQRUNUX1RSVUUob2xkID09IG9yaWdpbmFsKTsKKworICBFWFBFQ1RfRVEobiwgdXNlbG9jYWxlKE5VTEwpKTsKK30KKworVEVTVChsb2NhbGUsIG1iX2N1cl9tYXgpIHsKKyAgLy8gV2UgY2FuJ3QgcmVsaWFibHkgdGVzdCB0aGUgYmVoYXZpb3Igd2l0aCBzZXRsb2NhbGUoMykgb3IgdGhlIGJlaGF2aW9yIGZvcgorICAvLyBpbml0aWFsIHByb2dyYW0gY29uZGl0aW9ucyBiZWNhdXNlICh1bmxlc3Mgd2UncmUgdGhlIG9ubHkgdGVzdCB0aGF0IHdhcworICAvLyBydW4pLCBhbm90aGVyIHRlc3QgaGFzIGFsbW9zdCBjZXJ0YWlubHkgY2FsbGVkIHVzZWxvY2FsZSgzKSBpbiB0aGlzIHRocmVhZC4KKyAgLy8gU2VlIGIvMTY2ODU2NTIuCisgIGxvY2FsZV90IGNsb2MgPSBuZXdsb2NhbGUoTENfQUxMLCAiQyIsIDApOworICBsb2NhbGVfdCBjbG9jX3V0ZjggPSBuZXdsb2NhbGUoTENfQUxMLCAiQy5VVEYtOCIsIDApOworCisgIGxvY2FsZV90IG9sZF9sb2NhbGUgPSB1c2Vsb2NhbGUoY2xvYyk7CisgIEFTU0VSVF9FUSgxVSwgTUJfQ1VSX01BWCk7CisgIHVzZWxvY2FsZShjbG9jX3V0ZjgpOworICBBU1NFUlRfRVEoNFUsIE1CX0NVUl9NQVgpOworCisgIHVzZWxvY2FsZShvbGRfbG9jYWxlKTsKKyAgZnJlZWxvY2FsZShjbG9jKTsKKyAgZnJlZWxvY2FsZShjbG9jX3V0ZjgpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWFsbG9jX3Rlc3QuY3BwIGIvdGVzdHMvbWFsbG9jX3Rlc3QuY3BwCmluZGV4IDI1OTg1M2QuLjZiN2EyOGIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21hbGxvY190ZXN0LmNwcAorKysgYi90ZXN0cy9tYWxsb2NfdGVzdC5jcHAKQEAgLTE2LDE4ICsxNiwyOCBAQAogCiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfY29uZmlnLmgiCiAKIFRFU1QobWFsbG9jLCBtYWxsb2Nfc3RkKSB7CiAgIC8vIFNpbXBsZSBtYWxsb2MgdGVzdC4KICAgdm9pZCAqcHRyID0gbWFsbG9jKDEwMCk7CiAgIEFTU0VSVF9UUlVFKHB0ciAhPSBOVUxMKTsKICAgQVNTRVJUX0xFKDEwMFUsIG1hbGxvY191c2FibGVfc2l6ZShwdHIpKTsKLQogICBmcmVlKHB0cik7CiB9CiAKK1RFU1QobWFsbG9jLCBtYWxsb2Nfb3ZlcmZsb3cpIHsKKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoTlVMTCwgbWFsbG9jKFNJWkVfTUFYKSk7CisgIEFTU0VSVF9FUShFTk9NRU0sIGVycm5vKTsKK30KKwogVEVTVChtYWxsb2MsIGNhbGxvY19zdGQpIHsKICAgLy8gU2ltcGxlIGNhbGxvYyB0ZXN0LgogICBzaXplX3QgYWxsb2NfbGVuID0gMTAwOwpAQCAtMzcsMjQgKzQ3LDY3IEBACiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWxsb2NfbGVuOyBpKyspIHsKICAgICBBU1NFUlRfRVEoMCwgcHRyW2ldKTsKICAgfQotCiAgIGZyZWUocHRyKTsKIH0KIAorVEVTVChtYWxsb2MsIGNhbGxvY19pbGxlZ2FsKSB7CisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKE5VTEwsIGNhbGxvYygtMSwgMTAwKSk7CisgIEFTU0VSVF9FUShFTk9NRU0sIGVycm5vKTsKK30KKworVEVTVChtYWxsb2MsIGNhbGxvY19vdmVyZmxvdykgeworICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUShOVUxMLCBjYWxsb2MoMSwgU0laRV9NQVgpKTsKKyAgQVNTRVJUX0VRKEVOT01FTSwgZXJybm8pOworICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUShOVUxMLCBjYWxsb2MoU0laRV9NQVgsIFNJWkVfTUFYKSk7CisgIEFTU0VSVF9FUShFTk9NRU0sIGVycm5vKTsKKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoTlVMTCwgY2FsbG9jKDIsIFNJWkVfTUFYKSk7CisgIEFTU0VSVF9FUShFTk9NRU0sIGVycm5vKTsKKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoTlVMTCwgY2FsbG9jKFNJWkVfTUFYLCAyKSk7CisgIEFTU0VSVF9FUShFTk9NRU0sIGVycm5vKTsKK30KKwogVEVTVChtYWxsb2MsIG1lbWFsaWduX211bHRpcGxlKSB7CiAgIC8vIE1lbWFsaWduIHRlc3Qgd2hlcmUgdGhlIGFsaWdubWVudCBpcyBhbnkgdmFsdWUuCiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDw9IDEyOyBpKyspIHsKICAgICBmb3IgKHNpemVfdCBhbGlnbm1lbnQgPSAxIDw8IGk7IGFsaWdubWVudCA8ICgxVSA8PCAoaSsxKSk7IGFsaWdubWVudCsrKSB7Ci0gICAgICBjaGFyICpwdHIgPSAoY2hhciopbWVtYWxpZ24oYWxpZ25tZW50LCAxMDApOwotICAgICAgQVNTRVJUX1RSVUUocHRyICE9IE5VTEwpOwotICAgICAgQVNTRVJUX0xFKDEwMFUsIG1hbGxvY191c2FibGVfc2l6ZShwdHIpKTsKLSAgICAgIEFTU0VSVF9FUSgwLCAoaW50cHRyX3QpcHRyICUgKDEgPDwgaSkpOwotCisgICAgICBjaGFyICpwdHIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtZW1hbGlnbihhbGlnbm1lbnQsIDEwMCkpOworICAgICAgQVNTRVJUX1RSVUUocHRyICE9IE5VTEwpIDw8ICJGYWlsZWQgYXQgYWxpZ25tZW50ICIgPDwgYWxpZ25tZW50OworICAgICAgQVNTRVJUX0xFKDEwMFUsIG1hbGxvY191c2FibGVfc2l6ZShwdHIpKSA8PCAiRmFpbGVkIGF0IGFsaWdubWVudCAiIDw8IGFsaWdubWVudDsKKyAgICAgIEFTU0VSVF9FUSgwVSwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cikgJSAoKDFVIDw8IGkpKSkKKyAgICAgICAgICA8PCAiRmFpbGVkIGF0IGFsaWdubWVudCAiIDw8IGFsaWdubWVudDsKICAgICAgIGZyZWUocHRyKTsKICAgICB9CiAgIH0KIH0KIAorVEVTVChtYWxsb2MsIG1lbWFsaWduX292ZXJmbG93KSB7CisgIEFTU0VSVF9FUShOVUxMLCBtZW1hbGlnbig0MDk2LCBTSVpFX01BWCkpOworfQorCitURVNUKG1hbGxvYywgbWVtYWxpZ25fbm9uX3Bvd2VyMikgeworICB2b2lkKiBwdHI7CisgIGZvciAoc2l6ZV90IGFsaWduID0gMDsgYWxpZ24gPD0gMjU2OyBhbGlnbisrKSB7CisgICAgcHRyID0gbWVtYWxpZ24oYWxpZ24sIDEwMjQpOworICAgIEFTU0VSVF9UUlVFKHB0ciAhPSBOVUxMKSA8PCAiRmFpbGVkIGF0IGFsaWduICIgPDwgYWxpZ247CisgICAgZnJlZShwdHIpOworICB9Cit9CisKK1RFU1QobWFsbG9jLCBwb3NpeF9tZW1hbGlnbl9ub25fcG93ZXIyKSB7CisgIHZvaWQqIHB0cjsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgcG9zaXhfbWVtYWxpZ24oJnB0ciwgMTcsIDEwMjQpKTsKK30KKworVEVTVChtYWxsb2MsIHBvc2l4X21lbWFsaWduX292ZXJmbG93KSB7CisgIHZvaWQqIHB0cjsKKyAgQVNTRVJUX05FKDAsIHBvc2l4X21lbWFsaWduKCZwdHIsIDE2LCBTSVpFX01BWCkpOworfQorCiBURVNUKG1hbGxvYywgbWVtYWxpZ25fcmVhbGxvYykgewogICAvLyBNZW1hbGlnbiBhbmQgdGhlbiByZWFsbG9jIHRoZSBwb2ludGVyIGEgY291cGxlIG9mIHRpbWVzLgogICBmb3IgKHNpemVfdCBhbGlnbm1lbnQgPSAxOyBhbGlnbm1lbnQgPD0gNDA5NjsgYWxpZ25tZW50IDw8PSAxKSB7CkBAIC04Nyw3ICsxNDAsNiBAQAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjUwOyBpKyspIHsKICAgICAgIEFTU0VSVF9FUSgweDY3LCBwdHJbaV0pOwogICAgIH0KLQogICAgIGZyZWUocHRyKTsKICAgfQogfQpAQCAtMTA1LDcgKzE1Nyw2IEBACiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKICAgICBBU1NFUlRfRVEoNjcsIHB0cltpXSk7CiAgIH0KLQogICBmcmVlKHB0cik7CiB9CiAKQEAgLTEyMiw3ICsxNzMsNiBAQAogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CiAgICAgQVNTRVJUX0VRKDY3LCBwdHJbaV0pOwogICB9Ci0KICAgZnJlZShwdHIpOwogfQogCkBAIC0xNjEsOSArMjExLDkgQEAKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxNTA7IGkrKykgewogICAgIEFTU0VSVF9FUSgweDIzLCBwdHJbaV0pOwogICB9Ci0KICAgZnJlZShwdHIpOwogfQorCiBURVNUKG1hbGxvYywgY2FsbG9jX3JlYWxsb2NfbGFyZ2VyKSB7CiAgIC8vIFJlYWxsb2MgdG8gYSBsYXJnZXIgc2l6ZSwgY2FsbG9jIGlzIHVzZWQgZm9yIHRoZSBvcmlnaW5hbCBhbGxvY2F0aW9uLgogICBjaGFyICpwdHIgPSAoY2hhciAqKWNhbGxvYygxLCAxMDApOwpAQCAtMTc2LDcgKzIyNiw2IEBACiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKICAgICBBU1NFUlRfRVEoMCwgcHRyW2ldKTsKICAgfQotCiAgIGZyZWUocHRyKTsKIH0KIApAQCAtMTkyLDcgKzI0MSw2IEBACiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKICAgICBBU1NFUlRfRVEoMCwgcHRyW2ldKTsKICAgfQotCiAgIGZyZWUocHRyKTsKIH0KIApAQCAtMjMwLDYgKzI3OCw0NyBAQAogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE1MDsgaSsrKSB7CiAgICAgQVNTRVJUX0VRKDAsIHB0cltpXSk7CiAgIH0KLQogICBmcmVlKHB0cik7CiB9CisKK1RFU1QobWFsbG9jLCByZWFsbG9jX292ZXJmbG93KSB7CisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKE5VTEwsIHJlYWxsb2MoTlVMTCwgU0laRV9NQVgpKTsKKyAgQVNTRVJUX0VRKEVOT01FTSwgZXJybm8pOworICB2b2lkKiBwdHIgPSBtYWxsb2MoMTAwKTsKKyAgQVNTRVJUX1RSVUUocHRyICE9IE5VTEwpOworICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUShOVUxMLCByZWFsbG9jKHB0ciwgU0laRV9NQVgpKTsKKyAgQVNTRVJUX0VRKEVOT01FTSwgZXJybm8pOworICBmcmVlKHB0cik7Cit9CisKKyNpZiBkZWZpbmVkKEhBVkVfREVQUkVDQVRFRF9NQUxMT0NfRlVOQ1MpCitleHRlcm4gIkMiIHZvaWQqIHB2YWxsb2Moc2l6ZV90KTsKK2V4dGVybiAiQyIgdm9pZCogdmFsbG9jKHNpemVfdCk7CisKK1RFU1QobWFsbG9jLCBwdmFsbG9jX3N0ZCkgeworICBzaXplX3QgcGFnZXNpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CisgIHZvaWQqIHB0ciA9IHB2YWxsb2MoMTAwKTsKKyAgQVNTRVJUX1RSVUUocHRyICE9IE5VTEwpOworICBBU1NFUlRfVFJVRSgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cikgJiAocGFnZXNpemUtMSkpID09IDApOworICBBU1NFUlRfTEUocGFnZXNpemUsIG1hbGxvY191c2FibGVfc2l6ZShwdHIpKTsKKyAgZnJlZShwdHIpOworfQorCitURVNUKG1hbGxvYywgcHZhbGxvY19vdmVyZmxvdykgeworICBBU1NFUlRfRVEoTlVMTCwgcHZhbGxvYyhTSVpFX01BWCkpOworfQorCitURVNUKG1hbGxvYywgdmFsbG9jX3N0ZCkgeworICBzaXplX3QgcGFnZXNpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CisgIHZvaWQqIHB0ciA9IHB2YWxsb2MoMTAwKTsKKyAgQVNTRVJUX1RSVUUocHRyICE9IE5VTEwpOworICBBU1NFUlRfVFJVRSgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cikgJiAocGFnZXNpemUtMSkpID09IDApOworICBmcmVlKHB0cik7Cit9CisKK1RFU1QobWFsbG9jLCB2YWxsb2Nfb3ZlcmZsb3cpIHsKKyAgQVNTRVJUX0VRKE5VTEwsIHZhbGxvYyhTSVpFX01BWCkpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy9tYXRoX2Nvc190ZXN0LmNwcCBiL3Rlc3RzL21hdGhfY29zX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYTJkODIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tYXRoX2Nvc190ZXN0LmNwcApAQCAtMCwwICsxLDU2NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgZG91YmxlIGV4cGVjdGVkOworICBkb3VibGUgY2FsbF9kYXRhOworfSBjb3NfaW50ZWxfZGF0YV90OworCitzdGF0aWMgY29zX2ludGVsX2RhdGFfdCBnX2Nvc19pbnRlbF9kYXRhW10gPSB7CisgIHsgLy8gRW50cnkgMAorICAgIDB4MS5jMWEyN2FlODM2ZjEyODAwMDAwMDAwMDAwMDUwNGU5YnAtMSwKKyAgICAweDEuZmViMWY3OTIwZTI0OHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEKKyAgICAweDEuYzFhMjdhZTgzNmYxMjgwMDAwMDAwMDAwMDA1MDRlOWJwLTEsCisgICAgLTB4MS5mZWIxZjc5MjBlMjQ4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMgorICAgIDB4MS43OGRhZjAxMDM2ZDBjZmZmZmZmZmZmZmZmZjk4OTBkNnAtMSwKKyAgICAweDEuN2NiNzY0ODUyNmY5OXAtMQorICB9LAorICB7IC8vIEVudHJ5IDMKKyAgICAweDEuNzhkYWYwMTAzNmQwY2ZmZmZmZmZmZmZmZmY5ODkwZDZwLTEsCisgICAgLTB4MS43Y2I3NjQ4NTI2Zjk5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNAorICAgIDB4MS5mZjhlYjZhOTFlY2IwMDAwMDAwMDAwMDAwMDFmOGY1NnAtMSwKKyAgICAweDEuNTQ5ZWMwYzBjNWFmYXAtNQorICB9LAorICB7IC8vIEVudHJ5IDUKKyAgICAweDEuZmY4ZWI2YTkxZWNiMDAwMDAwMDAwMDAwMDAxZjhmNTZwLTEsCisgICAgLTB4MS41NDllYzBjMGM1YWZhcC01CisgIH0sCisgIHsgLy8gRW50cnkgNgorICAgIDB4MS5mZWQwNDc2ZmM3NWM5ODAwMDAwMDAwMDAwMDIwYjEzZXAtMSwKKyAgICAweDEuMTZlNTM0ZWUzNjU4MHAtNAorICB9LAorICB7IC8vIEVudHJ5IDcKKyAgICAweDEuZmVkMDQ3NmZjNzVjOTgwMDAwMDAwMDAwMDAyMGIxM2VwLTEsCisgICAgLTB4MS4xNmU1MzRlZTM2NTgwcC00CisgIH0sCisgIHsgLy8gRW50cnkgOAorICAgIDB4MS5mMTBmYzYxZTJjNzhlZmZmZmZmZmZmZmZmZjg3NjY2YXAtMSwKKyAgICAweDEuZWZlZWY2MWQzOWFjMnAtMworICB9LAorICB7IC8vIEVudHJ5IDkKKyAgICAweDEuZjEwZmM2MWUyYzc4ZWZmZmZmZmZmZmZmZmY4NzY2NmFwLTEsCisgICAgLTB4MS5lZmVlZjYxZDM5YWMycC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTAKKyAgICAweDEuNDM0YTM2NDViZTIwODdmZmZmZmZmZmZmZmY3MmQwYWVwLTEsCisgICAgMHgxLmM2NWExNzA0NzQ1NDlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMQorICAgIDB4MS40MzRhMzY0NWJlMjA4N2ZmZmZmZmZmZmZmZjcyZDBhZXAtMSwKKyAgICAtMHgxLmM2NWExNzA0NzQ1NDlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMgorICAgIDB4MS4zMzdmYzViMDcyYzUyODAwMDAwMDAwMDAwMDE3ZmU3N3AtMywKKyAgICAweDEuNmI4YTYyNzNkN2MyMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTMKKyAgICAweDEuMzM3ZmM1YjA3MmM1MjgwMDAwMDAwMDAwMDAxN2ZlNzdwLTMsCisgICAgLTB4MS42YjhhNjI3M2Q3YzIxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNAorICAgIDB4MS5lZmE3Y2RkYjEyOGZiODAwNDM1Njg3N2I3NGVlOGFiZHAtMSwKKyAgICAtMHgxLjAzNmY0YmE3ZTkwYWFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNQorICAgIDB4MS5lZmE3Y2RkYjEyOGZiODAwNDM1Njg3N2I3NGVlOGFiZHAtMSwKKyAgICAweDEuMDM2ZjRiYTdlOTBhYXAtMgorICB9LAorICB7IC8vIEVudHJ5IDE2CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmI1MTE3ZmVlMmVkYTdmMTNlcC0xLAorICAgIC0weDEuMTUwMDc2NmM5ZGYyMHAtMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZiNTExN2ZlZTJlZGE3ZjEzZXAtMSwKKyAgICAweDEuMTUwMDc2NmM5ZGYyMHAtMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOAorICAgIDB4MS5lYzIzMTgwMjkxN2JkZmZhNjI3YWI2YTU5YWJlM2Y3ZHAtMSwKKyAgICAtMHgxLjFlMmExNTYzZTA2OGVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOQorICAgIDB4MS5lYzIzMTgwMjkxN2JkZmZhNjI3YWI2YTU5YWJlM2Y3ZHAtMSwKKyAgICAweDEuMWUyYTE1NjNlMDY4ZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDIwCisgICAgMHgxLmRjMDQ0YWM5MmI3ZmI5MDA3OTEzYzg3ZGI3NmZhNDlmcC04LAorICAgIC0weDEuMjExNWFhNzNmOGQwNXA1CisgIH0sCisgIHsgLy8gRW50cnkgMjEKKyAgICAweDEuZGMwNDRhYzkyYjdmYjkwMDc5MTNjODdkYjc2ZmE0OWZwLTgsCisgICAgMHgxLjIxMTVhYTczZjhkMDVwNQorICB9LAorICB7IC8vIEVudHJ5IDIyCisgICAgMHgxLmQxZmE2N2M1MGRkNTI3ZjZlOWFiYmIwYmQwNjY0YWI5cC00LAorICAgIC0weDEuMzRlM2JjZGY4ZjY5YXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjMKKyAgICAweDEuZDFmYTY3YzUwZGQ1MjdmNmU5YWJiYjBiZDA2NjRhYjlwLTQsCisgICAgMHgxLjM0ZTNiY2RmOGY2OWFwMgorICB9LAorICB7IC8vIEVudHJ5IDI0CisgICAgMHgxLmUyZjhkMTlmYjhkYjg4MDU2ZGNkZGQ3NmY1YTA1YzIwcC0yLAorICAgIC0weDEuMzgwMDAwMDAwMDAwYnA3CisgIH0sCisgIHsgLy8gRW50cnkgMjUKKyAgICAweDEuZTJmOGQxOWZiOGRiODgwNTZkY2RkZDc2ZjVhMDVjMjBwLTIsCisgICAgMHgxLjM4MDAwMDAwMDAwMGJwNworICB9LAorICB7IC8vIEVudHJ5IDI2CisgICAgMHgxLjhkYTljOTBjM2VkYTE3ZjViZDcwOGNmYzQxNGZmMWI4cC0xLAorICAgIC0weDEuNDQwMDAwMDA0cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNworICAgIDB4MS44ZGE5YzkwYzNlZGExN2Y1YmQ3MDhjZmM0MTRmZjFiOHAtMSwKKyAgICAweDEuNDQwMDAwMDA0cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOAorICAgIDB4MS5iNTliMzIwNjAzZjgzN2ZmMDE1ZTJhOTYxZTc1OTQ2ZXAtMSwKKyAgICAtMHgxLjU1MGM4ZWU2N2E0YzRwMjkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOQorICAgIDB4MS5iNTliMzIwNjAzZjgzN2ZmMDE1ZTJhOTYxZTc1OTQ2ZXAtMSwKKyAgICAweDEuNTUwYzhlZTY3YTRjNHAyOQorICB9LAorICB7IC8vIEVudHJ5IDMwCisgICAgMHgxLmZmZmZmZjdhZjZjODg3ZTVmMzE4NjM3MWExN2RkODFmcC0xLAorICAgIC0weDEuNzExNzg5ZmRiMmU4YXAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMQorICAgIDB4MS5mZmZmZmY3YWY2Yzg4N2U1ZjMxODYzNzFhMTdkZDgxZnAtMSwKKyAgICAweDEuNzExNzg5ZmRiMmU4YXAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMgorICAgIDB4MS5jMWI2OGViYjBiNGZlODJlOGU5OWY5ZDQyNWVlOTAxYXAtMiwKKyAgICAtMHgxLjc3ZTAwMDAwMnA4CisgIH0sCisgIHsgLy8gRW50cnkgMzMKKyAgICAweDEuYzFiNjhlYmIwYjRmZTgyZThlOTlmOWQ0MjVlZTkwMWFwLTIsCisgICAgMHgxLjc3ZTAwMDAwMnA4CisgIH0sCisgIHsgLy8gRW50cnkgMzQKKyAgICAweDEuMTE2MWUxZGFkNzZkYmZkNTVmMDhjNGE0YTkwYmQ1NDdwLTQsCisgICAgLTB4MS44MTA2NTYxOTMxYjQzcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNQorICAgIDB4MS4xMTYxZTFkYWQ3NmRiZmQ1NWYwOGM0YTRhOTBiZDU0N3AtNCwKKyAgICAweDEuODEwNjU2MTkzMWI0M3AwCisgIH0sCisgIHsgLy8gRW50cnkgMzYKKyAgICAweDEuZjgyOGMzMjI2YjNkNzdjMzc0ZTc4OWQ3MjE2YTg1YjNwLTUsCisgICAgLTB4MS44MjViZTI0NjFjYWQ0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNworICAgIDB4MS5mODI4YzMyMjZiM2Q3N2MzNzRlNzg5ZDcyMTZhODViM3AtNSwKKyAgICAweDEuODI1YmUyNDYxY2FkNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzgKKyAgICAweDEuZjI5OTBkNzQyZTlmYTgwZGQxOTQ4M2EyYzBkZTQyOGJwLTUsCisgICAgLTB4MS44Mjg4NzU1ODAzYjA4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOQorICAgIDB4MS5mMjk5MGQ3NDJlOWZhODBkZDE5NDgzYTJjMGRlNDI4YnAtNSwKKyAgICAweDEuODI4ODc1NTgwM2IwOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDAKKyAgICAtMHgxLmZmMTUwZGRhNzUyNGNlNjc4YWI5N2VlNDYwZThlOTYxcC0xLAorICAgIC0weDEuOGE3NTcwMWY0Y2NkM3AxCisgIH0sCisgIHsgLy8gRW50cnkgNDEKKyAgICAtMHgxLmZmMTUwZGRhNzUyNGNlNjc4YWI5N2VlNDYwZThlOTYxcC0xLAorICAgIDB4MS44YTc1NzAxZjRjY2QzcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MgorICAgIDB4MS4wMTVjNDdjMzJiNTc0ODAyZWI4MWRlYjBkYjQ2YzIwN3AtMSwKKyAgICAtMHgxLmIzODkzMTZmMzdmMzdwMworICB9LAorICB7IC8vIEVudHJ5IDQzCisgICAgMHgxLjAxNWM0N2MzMmI1NzQ4MDJlYjgxZGViMGRiNDZjMjA3cC0xLAorICAgIDB4MS5iMzg5MzE2ZjM3ZjM3cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NAorICAgIDB4MS5kNjgxYTM2NmEwNTM0N2ZhNTZiNzVkODQ1YjMzYzdiYnAtMSwKKyAgICAtMHgxLmM2MDJjNDY1ZDdkMjdwNgorICB9LAorICB7IC8vIEVudHJ5IDQ1CisgICAgMHgxLmQ2ODFhMzY2YTA1MzQ3ZmE1NmI3NWQ4NDViMzNjN2JicC0xLAorICAgIDB4MS5jNjAyYzQ2NWQ3ZDI3cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NgorICAgIC0weDEuODRlODk2Yzc1NDNkNTRjMTZkN2JlMzQ2ZTBmNDAwMTdwLTEsCisgICAgLTB4MS5jZmI4MWZlNjk2NjRjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NworICAgIC0weDEuODRlODk2Yzc1NDNkNTRjMTZkN2JlMzQ2ZTBmNDAwMTdwLTEsCisgICAgMHgxLmNmYjgxZmU2OTY2NGNwNAorICB9LAorICB7IC8vIEVudHJ5IDQ4CisgICAgMHgxLmZjNWRjZmRkZDU0YzA3ZjE1NzRjZTExNGMxZTVlZmZlcC0xLAorICAgIC0weDEuZDA4ZjJkODZiMTJjNnAxMworICB9LAorICB7IC8vIEVudHJ5IDQ5CisgICAgMHgxLmZjNWRjZmRkZDU0YzA3ZjE1NzRjZTExNGMxZTVlZmZlcC0xLAorICAgIDB4MS5kMDhmMmQ4NmIxMmM2cDEzCisgIH0sCisgIHsgLy8gRW50cnkgNTAKKyAgICAweDEuZmU4MzIzNWZiZTAxNWQ2YzM2MTU1NmVlNWEwZTIyOTRwLTMsCisgICAgLTB4MS5kZTEzZjA5NDNjNDk0cDk5CisgIH0sCisgIHsgLy8gRW50cnkgNTEKKyAgICAweDEuZmU4MzIzNWZiZTAxNWQ2YzM2MTU1NmVlNWEwZTIyOTRwLTMsCisgICAgMHgxLmRlMTNmMDk0M2M0OTRwOTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MgorICAgIC0weDEuNzIwMzIxMjM5ZWM0ZjM4ZDU1YjQwZDg0NDUwOTljMmFwLTEsCisgICAgLTB4MS5kZTNjMWYxMjg1ZThicDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MworICAgIC0weDEuNzIwMzIxMjM5ZWM0ZjM4ZDU1YjQwZDg0NDUwOTljMmFwLTEsCisgICAgMHgxLmRlM2MxZjEyODVlOGJwMworICB9LAorICB7IC8vIEVudHJ5IDU0CisgICAgMHgxLmY3MTQzYzhiYmE0MDZkNmY4MzRhM2JjYTVlOWM2YTU4cC00LAorICAgIC0weDEuZmZmZmZmZmZmZmY3ZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNTUKKyAgICAweDEuZjcxNDNjOGJiYTQwNmQ2ZjgzNGEzYmNhNWU5YzZhNThwLTQsCisgICAgMHgxLmZmZmZmZmZmZmZmN2ZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDU2CisgICAgLTB4MS5mZmZlNjJlY2ZhYjc1M2MwNzFiMjY4MGUxZTI2YmJjZXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDU3CisgICAgLTB4MS5mZmZlNjJlY2ZhYjc1M2MwNzFiMjY4MGUxZTI2YmJjZXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNTgKKyAgICAweDEuMDU1ZTQ1N2FjMTIyNzY2YTdhMzQzZWE0YWM3MzliMmVwLTUsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OQorICAgIDB4MS4wNTVlNDU3YWMxMjI3NjZhN2EzNDNlYTRhYzczOWIyZXAtNSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwNTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MAorICAgIDB4MS5jMTUyODA2NWI3ZDRlMmQ4NGQ2NDAzMDE4MDBkZGQ4MXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwM3AtMQorICB9LAorICB7IC8vIEVudHJ5IDYxCisgICAgMHgxLmMxNTI4MDY1YjdkNGUyZDg0ZDY0MDMwMTgwMGRkZDgxcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwM3AtMQorICB9LAorICB7IC8vIEVudHJ5IDYyCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmVmZmZmZmZmZmZmZmZhMHAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwM3AtMzIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZlZmZmZmZmZmZmZmZmYTBwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAzcC0zMgorICB9LAorICB7IC8vIEVudHJ5IDY0CisgICAgMHgxLmZmZmVhNDQ0YmMwNWUwYjJlYzY5M2Y3MjI2ZDA1NmI4cC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDIwcDE1MAorICB9LAorICB7IC8vIEVudHJ5IDY1CisgICAgMHgxLmZmZmVhNDQ0YmMwNWUwYjJlYzY5M2Y3MjI2ZDA1NmI4cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAyMHAxNTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NgorICAgIC0weDEuZWJkZGVlODc2ZjQzMzhjYzg4NTM5NGQxMDM5YWNmZTFwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMzhwMzgwCisgIH0sCisgIHsgLy8gRW50cnkgNjcKKyAgICAtMHgxLmViZGRlZTg3NmY0MzM4Y2M4ODUzOTRkMTAzOWFjZmUxcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAzOHAzODAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OAorICAgIC0weDEuZjJmZmM1MWRjNjk2ODFkZWQzMzM2MjY0NWI0ZTg1MTNwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAxMThwMzgwCisgIH0sCisgIHsgLy8gRW50cnkgNjkKKyAgICAtMHgxLmYyZmZjNTFkYzY5NjgxZGVkMzMzNjI2NDViNGU4NTEzcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDExOHAzODAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MAorICAgIC0weDEuZjhmYmI0ZDM1OGIyMDdmNGY4MWMzNmNmMjFjNGFmOTdwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAzZmZwNjQxCisgIH0sCisgIHsgLy8gRW50cnkgNzEKKyAgICAtMHgxLmY4ZmJiNGQzNThiMjA3ZjRmODFjMzZjZjIxYzRhZjk3cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDNmZnA2NDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MgorICAgIC0weDEuYWEyMjY1NzUzZTY2ODdmZGU3NjI2OWVlOTJhNzg0YjBwLTIsCisgICAgMHgxLjAwMDAwMDAwMDEwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MworICAgIC0weDEuYWEyMjY1NzUzZTY2ODdmZGU3NjI2OWVlOTJhNzg0YjBwLTIsCisgICAgLTB4MS4wMDAwMDAwMDAxMHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzQKKyAgICAweDEuZmQxMjQyYzI1OTk0ZDBjYzVkYWY0MDVmYTUxMGU1MzlwLTEsCisgICAgMHgxLjAwMDAwMDAwOHA0NTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NQorICAgIDB4MS5mZDEyNDJjMjU5OTRkMGNjNWRhZjQwNWZhNTEwZTUzOXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwOHA0NTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NgorICAgIDB4MS5mZmZjMDAwMTU1NGRhODAwMDA0ODgyOGRlOTdhY2NjYnAtMSwKKyAgICAweDEuMDAwMDAwMDBlZmZhZnAtNworICB9LAorICB7IC8vIEVudHJ5IDc3CisgICAgMHgxLmZmZmMwMDAxNTU0ZGE4MDAwMDQ4ODI4ZGU5N2FjY2NicC0xLAorICAgIC0weDEuMDAwMDAwMDBlZmZhZnAtNworICB9LAorICB7IC8vIEVudHJ5IDc4CisgICAgMHgxLjE0YTI3ZjI5MjU1MjI4MDAwMGRkMzBmYmY2YjM4NDgxcC0xLAorICAgIDB4MS4wMDAwMDExNGZlZmUycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OQorICAgIDB4MS4xNGEyN2YyOTI1NTIyODAwMDBkZDMwZmJmNmIzODQ4MXAtMSwKKyAgICAtMHgxLjAwMDAwMTE0ZmVmZTJwMAorICB9LAorICB7IC8vIEVudHJ5IDgwCisgICAgMHgxLmJmODFlMDI2OWM1OWM3ZmY3NTNjYTMyMTQ3NjY2YzU2cC0zLAorICAgIDB4MS4wMDAwMDcwcDQwCisgIH0sCisgIHsgLy8gRW50cnkgODEKKyAgICAweDEuYmY4MWUwMjY5YzU5YzdmZjc1M2NhMzIxNDc2NjZjNTZwLTMsCisgICAgLTB4MS4wMDAwMDcwcDQwCisgIH0sCisgIHsgLy8gRW50cnkgODIKKyAgICAweDEuMTRhMjZlZDE5NjBkNjdmZmZmZGY4ZDEzYjQzZmEyYjRwLTEsCisgICAgMHgxLjAwMDAwYWNhZGIzZDNwMAorICB9LAorICB7IC8vIEVudHJ5IDgzCisgICAgMHgxLjE0YTI2ZWQxOTYwZDY3ZmZmZmRmOGQxM2I0M2ZhMmI0cC0xLAorICAgIC0weDEuMDAwMDBhY2FkYjNkM3AwCisgIH0sCisgIHsgLy8gRW50cnkgODQKKyAgICAweDEuZmZmZmZmZmZiZmZmZTdmZmZmMTU1NjU1NTU5YTdkMmRwLTEsCisgICAgMHgxLjAwMDAzcC0xNworICB9LAorICB7IC8vIEVudHJ5IDg1CisgICAgMHgxLmZmZmZmZmZmYmZmZmU3ZmZmZjE1NTY1NTU1OWE3ZDJkcC0xLAorICAgIC0weDEuMDAwMDNwLTE3CisgIH0sCisgIHsgLy8gRW50cnkgODYKKyAgICAweDEuZmZmZmZmZmZlZmZmZjdmZmZmMTVmOTZhZDNiMjlkOTRwLTEsCisgICAgMHgxLjAwMDAzZmZmZmZmYWVwLTE4CisgIH0sCisgIHsgLy8gRW50cnkgODcKKyAgICAweDEuZmZmZmZmZmZlZmZmZjdmZmZmMTVmOTZhZDNiMjlkOTRwLTEsCisgICAgLTB4MS4wMDAwM2ZmZmZmZmFlcC0xOAorICB9LAorICB7IC8vIEVudHJ5IDg4CisgICAgMHgxLmZmZmZmZmZmZWZmZmY3ZmZmZjE1NTc2YWFiMzI5ZjQ1cC0xLAorICAgIDB4MS4wMDAwM2ZmZmZmZmZmcC0xOAorICB9LAorICB7IC8vIEVudHJ5IDg5CisgICAgMHgxLmZmZmZmZmZmZWZmZmY3ZmZmZjE1NTc2YWFiMzI5ZjQ1cC0xLAorICAgIC0weDEuMDAwMDNmZmZmZmZmZnAtMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MAorICAgIC0weDEuZGFiN2VmZWIzNWJhZDdmYmRjYjBlZmVkYjY2MjA5N2NwLTIsCisgICAgMHgxLjAwMDA3ZmZmZmRlYTBwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MQorICAgIC0weDEuZGFiN2VmZWIzNWJhZDdmYmRjYjBlZmVkYjY2MjA5N2NwLTIsCisgICAgLTB4MS4wMDAwN2ZmZmZkZWEwcDQxCisgIH0sCisgIHsgLy8gRW50cnkgOTIKKyAgICAweDEuZmZmZmZmZmZmYmZmZjgwMDAwMDE1OTVhYTlhZmZmY2ZwLTEsCisgICAgMHgxLjAwMDBmZmZmOHAtMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MworICAgIDB4MS5mZmZmZmZmZmZiZmZmODAwMDAwMTU5NWFhOWFmZmZjZnAtMSwKKyAgICAtMHgxLjAwMDBmZmZmOHAtMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NAorICAgIDB4MS5mZmZmZmZmZmZlZmZmODAwMDAwMDRiMzY0MjMwNTBmNnAtMSwKKyAgICAweDEuMDAwM2ZmZjgwMDA1MXAtMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NQorICAgIDB4MS5mZmZmZmZmZmZlZmZmODAwMDAwMDRiMzY0MjMwNTBmNnAtMSwKKyAgICAtMHgxLjAwMDNmZmY4MDAwNTFwLTIwCisgIH0sCisgIHsgLy8gRW50cnkgOTYKKyAgICAweDEuZmZmZmZmZmZmZWZmZjgwMDAwMDA0Mjk2MWZiMDk1ZjdwLTEsCisgICAgMHgxLjAwMDNmZmY4MDAwOTZwLTIwCisgIH0sCisgIHsgLy8gRW50cnkgOTcKKyAgICAweDEuZmZmZmZmZmZmZWZmZjgwMDAwMDA0Mjk2MWZiMDk1ZjdwLTEsCisgICAgLTB4MS4wMDAzZmZmODAwMDk2cC0yMAorICB9LAorICB7IC8vIEVudHJ5IDk4CisgICAgLTB4MS5mYmYyYjcxYTIzYTU3N2ZkZGQwODFkMzBiYzI0OTE3ZnAtMiwKKyAgICAweDEuMDAwZmQyMHAzMzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OQorICAgIC0weDEuZmJmMmI3MWEyM2E1NzdmZGRkMDgxZDMwYmMyNDkxN2ZwLTIsCisgICAgLTB4MS4wMDBmZDIwcDMzNAorICB9LAorICB7IC8vIEVudHJ5IDEwMAorICAgIDB4MS5mY2NjODdlYWU3NzM2ZDhkOGE0Nzc2MzE0ZjZiMGJhN3AtNSwKKyAgICAweDEuMDAzcDUxNAorICB9LAorICB7IC8vIEVudHJ5IDEwMQorICAgIDB4MS5mY2NjODdlYWU3NzM2ZDhkOGE0Nzc2MzE0ZjZiMGJhN3AtNSwKKyAgICAtMHgxLjAwM3A1MTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIKKyAgICAtMHgxLmE0M2Y0MGQ5MmI3ZWQ3ZWVmMGZlNmQxNzk5NDQyY2ZhcC03LAorICAgIDB4MS4wMDYwMDAwMDAxNWY0cDQxCisgIH0sCisgIHsgLy8gRW50cnkgMTAzCisgICAgLTB4MS5hNDNmNDBkOTJiN2VkN2VlZjBmZTZkMTc5OTQ0MmNmYXAtNywKKyAgICAtMHgxLjAwNjAwMDAwMDE1ZjRwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQKKyAgICAweDEuYzExY2MzOGY0MGFiMjgyN2RkMGZmOGM2ZjNkZDFkYWZwLTEsCisgICAgMHgxLjAwN3AtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNQorICAgIDB4MS5jMTFjYzM4ZjQwYWIyODI3ZGQwZmY4YzZmM2RkMWRhZnAtMSwKKyAgICAtMHgxLjAwN3AtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNgorICAgIDB4MS5mZmZmZmZmZmZmYmZjN2YzYzAwMDAxNTdhYzMzMWQwY3AtMSwKKyAgICAweDEuMDA3cC0yMQorICB9LAorICB7IC8vIEVudHJ5IDEwNworICAgIDB4MS5mZmZmZmZmZmZmYmZjN2YzYzAwMDAxNTdhYzMzMWQwY3AtMSwKKyAgICAtMHgxLjAwN3AtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgKKyAgICAweDEuZTliYTk4MjMxZjczNDZlMDU2NjY5NGUxNDg0YTViOThwLTgsCisgICAgMHgxLjAwY3A0MAorICB9LAorICB7IC8vIEVudHJ5IDEwOQorICAgIDB4MS5lOWJhOTgyMzFmNzM0NmUwNTY2Njk0ZTE0ODRhNWI5OHAtOCwKKyAgICAtMHgxLjAwY3A0MAorICB9LAorICB7IC8vIEVudHJ5IDExMAorICAgIDB4MS5mZWZkZjQ4ZWQ2NDljZDA4N2UzZTgwMTIxOWVkZjgwNHAtMSwKKyAgICAweDEuMDExcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTExCisgICAgMHgxLmZlZmRmNDhlZDY0OWNkMDg3ZTNlODAxMjE5ZWRmODA0cC0xLAorICAgIC0weDEuMDExcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTEyCisgICAgLTB4MS5mZmMxNmEwZjEyZmYyNzFjZWQ3MmZjNjU5ZGRjZDM4MnAtMSwKKyAgICAweDEuMDExcDk5NgorICB9LAorICB7IC8vIEVudHJ5IDExMworICAgIC0weDEuZmZjMTZhMGYxMmZmMjcxY2VkNzJmYzY1OWRkY2QzODJwLTEsCisgICAgLTB4MS4wMTFwOTk2CisgIH0sCisgIHsgLy8gRW50cnkgMTE0CisgICAgMHgxLmVmZDViNjFhMzBhMzg3ZmZmMTQwMDUxOTg0NWZjYjFlcC0xLAorICAgIDB4MS4wMjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUKKyAgICAweDEuZWZkNWI2MWEzMGEzODdmZmYxNDAwNTE5ODQ1ZmNiMWVwLTEsCisgICAgLTB4MS4wMjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTYKKyAgICAweDEuYzk3YjgxNjFkYzUwYTA2Y2Q0ODAxZGVlYjhlMDcxNWJwLTIsCisgICAgMHgxLjAyMDQyNjBjMTgzMDdwNTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTcKKyAgICAweDEuYzk3YjgxNjFkYzUwYTA2Y2Q0ODAxZGVlYjhlMDcxNWJwLTIsCisgICAgLTB4MS4wMjA0MjYwYzE4MzA3cDU5CisgIH0sCisgIHsgLy8gRW50cnkgMTE4CisgICAgLTB4MS5iZjI2YTNjOWI5ZmJlODM0ODg0NDkzNDNmMDhiMDhkN3AtMiwKKyAgICAweDEuMDJlNzhhMzIxMTU1ZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTE5CisgICAgLTB4MS5iZjI2YTNjOWI5ZmJlODM0ODg0NDkzNDNmMDhiMDhkN3AtMiwKKyAgICAtMHgxLjAyZTc4YTMyMTE1NWVwMQorICB9LAorICB7IC8vIEVudHJ5IDEyMAorICAgIDB4MS5mZWY4MDZiMWY4NGU0ZGZkNWY3MTMwN2EzYzNlYjYwMnAtMSwKKyAgICAweDEuMDQwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTIxCisgICAgMHgxLmZlZjgwNmIxZjg0ZTRkZmQ1ZjcxMzA3YTNjM2ViNjAycC0xLAorICAgIC0weDEuMDQwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTIyCisgICAgMHgxLmZlODUxZmJmODdkMTc2ZmI0YzY5Mjk1YzdmOTI4NDAycC0xLAorICAgIDB4MS4wNGJkZThiYjgwMjU4cDk4CisgIH0sCisgIHsgLy8gRW50cnkgMTIzCisgICAgMHgxLmZlODUxZmJmODdkMTc2ZmI0YzY5Mjk1YzdmOTI4NDAycC0xLAorICAgIC0weDEuMDRiZGU4YmI4MDI1OHA5OAorICB9LAorICB7IC8vIEVudHJ5IDEyNAorICAgIDB4MS43MGY2YTUxZGE4ZWZlYzM5OGU3NDE2OWU3NzEzODZlYXAtMSwKKyAgICAweDEuMDc3ZTc0OWUzN2NlZXAyMzYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUKKyAgICAweDEuNzBmNmE1MWRhOGVmZWMzOThlNzQxNjllNzcxMzg2ZWFwLTEsCisgICAgLTB4MS4wNzdlNzQ5ZTM3Y2VlcDIzNgorICB9LAorICB7IC8vIEVudHJ5IDEyNgorICAgIDB4MS42YjQwOGM4NTZiZGE1N2ZlNTgyOWE1ODM2MWZlYTExMnAtMywKKyAgICAweDEuMDdmODBwMzAwCisgIH0sCisgIHsgLy8gRW50cnkgMTI3CisgICAgMHgxLjZiNDA4Yzg1NmJkYTU3ZmU1ODI5YTU4MzYxZmVhMTEycC0zLAorICAgIC0weDEuMDdmODBwMzAwCisgIH0sCisgIHsgLy8gRW50cnkgMTI4CisgICAgMHgxLjJiMmY5NjVhZTQwZmM3ZmZmZmJjYTBiN2VhZWM1OTE5cC0xLAorICAgIDB4MS4wN2Y5YmVhMWIzNTQ2cDI3CisgIH0sCisgIHsgLy8gRW50cnkgMTI5CisgICAgMHgxLjJiMmY5NjVhZTQwZmM3ZmZmZmJjYTBiN2VhZWM1OTE5cC0xLAorICAgIC0weDEuMDdmOWJlYTFiMzU0NnAyNworICB9LAorICB7IC8vIEVudHJ5IDEzMAorICAgIC0weDEuNGVlZDJmM2ZjNzZhNzdmODAzZDg5MTFlZWRkY2M1ZThwLTEsCisgICAgMHgxLjA5MGQxODM3MmYyZDVwNAorICB9LAorICB7IC8vIEVudHJ5IDEzMQorICAgIC0weDEuNGVlZDJmM2ZjNzZhNzdmODAzZDg5MTFlZWRkY2M1ZThwLTEsCisgICAgLTB4MS4wOTBkMTgzNzJmMmQ1cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzIKKyAgICAweDEuZmJhNTlhZWNlZTUwMDAzMTVjZWUzMjMwNzllZDE0MjdwLTEsCisgICAgMHgxLjBiNHAtMworICB9LAorICB7IC8vIEVudHJ5IDEzMworICAgIDB4MS5mYmE1OWFlY2VlNTAwMDMxNWNlZTMyMzA3OWVkMTQyN3AtMSwKKyAgICAtMHgxLjBiNHAtMworICB9LAorICB7IC8vIEVudHJ5IDEzNAorICAgIDB4MS5mZmZkMWJjZGE3YTdkNTUxMGFhM2QwZWQ4YWRkYzc4NXAtMSwKKyAgICAweDEuMGMwZDVjMmFmM2MyZXAzNDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUKKyAgICAweDEuZmZmZDFiY2RhN2E3ZDU1MTBhYTNkMGVkOGFkZGM3ODVwLTEsCisgICAgLTB4MS4wYzBkNWMyYWYzYzJlcDM0NgorICB9LAorICB7IC8vIEVudHJ5IDEzNgorICAgIC0weDEuZTRkZmU4MzEyOTI4NjdmZGMxMzMzYzBhNGMzZjNmNzBwLTEsCisgICAgMHgxLjBkMzA1OTZlZTkxZmRwMjE2CisgIH0sCisgIHsgLy8gRW50cnkgMTM3CisgICAgLTB4MS5lNGRmZTgzMTI5Mjg2N2ZkYzEzMzNjMGE0YzNmM2Y3MHAtMSwKKyAgICAtMHgxLjBkMzA1OTZlZTkxZmRwMjE2CisgIH0sCisgIHsgLy8gRW50cnkgMTM4CisgICAgMHgxLmZiODQzMjg4NmEyODNiMTdhY2FhNTI0ZTMxMmFiMWUzcC0yLAorICAgIDB4MS4wZDZwMAorICB9LAorICB7IC8vIEVudHJ5IDEzOQorICAgIDB4MS5mYjg0MzI4ODZhMjgzYjE3YWNhYTUyNGUzMTJhYjFlM3AtMiwKKyAgICAtMHgxLjBkNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQwCisgICAgMHgxLmZmZmZlZTIwMjg1M2ZmYmJjMTY4NDg0NzAxOTcyN2EwcC0xLAorICAgIDB4MS4wZTk0NzRjNjg4MzFjcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDE0MQorICAgIDB4MS5mZmZmZWUyMDI4NTNmZmJiYzE2ODQ4NDcwMTk3MjdhMHAtMSwKKyAgICAtMHgxLjBlOTQ3NGM2ODgzMWNwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMTQyCisgICAgLTB4MS5iNzBkM2Q1NTg0YjFhODNjNjhlMjU0ZTUyM2QzN2RmZHAtMiwKKyAgICAweDEuMTEzYmFlNDA0OTg0OXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTQzCisgICAgLTB4MS5iNzBkM2Q1NTg0YjFhODNjNjhlMjU0ZTUyM2QzN2RmZHAtMiwKKyAgICAtMHgxLjExM2JhZTQwNDk4NDlwMgorICB9LAorICB7IC8vIEVudHJ5IDE0NAorICAgIDB4MS5mZWQ4ZGY1OGY2MjVmZGNiYjFlNDBjZjgzY2FhMmNhMnAtMSwKKyAgICAweDEuMTJlYjg3MDk3NjU0MHAtNAorICB9LAorICB7IC8vIEVudHJ5IDE0NQorICAgIDB4MS5mZWQ4ZGY1OGY2MjVmZGNiYjFlNDBjZjgzY2FhMmNhMnAtMSwKKyAgICAtMHgxLjEyZWI4NzA5NzY1NDBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDYKKyAgICAweDEuZTUzNmFlMzk1ZGZjZTAwMTQ1Nzk3MGM4YWFhYzNiMWZwLTIsCisgICAgMHgxLjEzY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTQ3CisgICAgMHgxLmU1MzZhZTM5NWRmY2UwMDE0NTc5NzBjOGFhYWMzYjFmcC0yLAorICAgIC0weDEuMTNjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDgKKyAgICAweDEuZmVkMDQ3NmZjNzVjOTgwMDAwMDAwMDAwMDAyMGIxM2VwLTEsCisgICAgMHgxLjE2ZTUzNGVlMzY1ODBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDkKKyAgICAweDEuZmVkMDQ3NmZjNzVjOTgwMDAwMDAwMDAwMDAyMGIxM2VwLTEsCisgICAgLTB4MS4xNmU1MzRlZTM2NTgwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTUwCisgICAgMHgxLmZiMzhlODJlMzE5M2E3ZjE5YTE3ZDIzMWEyZTgxOTRlcC0xLAorICAgIDB4MS4xN2ZmZmZmZmZlYTk4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTUxCisgICAgMHgxLmZiMzhlODJlMzE5M2E3ZjE5YTE3ZDIzMWEyZTgxOTRlcC0xLAorICAgIC0weDEuMTdmZmZmZmZmZWE5OHAtMworICB9LAorICB7IC8vIEVudHJ5IDE1MgorICAgIDB4MS5mYjM4ZTgyZTMxODdmYzY1NzQ3YWU0NDM0NjFlYjQzNHAtMSwKKyAgICAweDEuMTgwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTUzCisgICAgMHgxLmZiMzhlODJlMzE4N2ZjNjU3NDdhZTQ0MzQ2MWViNDM0cC0xLAorICAgIC0weDEuMTgwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTU0CisgICAgLTB4MS5lNTk2NDdmMWZlOWM3NTAwNTliOWVhZmI4OGMyYWNlYXAtMSwKKyAgICAweDEuMWExOTFlYmJiNGQ3ZnA3CisgIH0sCisgIHsgLy8gRW50cnkgMTU1CisgICAgLTB4MS5lNTk2NDdmMWZlOWM3NTAwNTliOWVhZmI4OGMyYWNlYXAtMSwKKyAgICAtMHgxLjFhMTkxZWJiYjRkN2ZwNworICB9LAorICB7IC8vIEVudHJ5IDE1NgorICAgIC0weDEuZDBkY2ExZjg3MTViZDdmOWZmMzczYzc2MzUyMmRiMGVwLTQsCisgICAgMHgxLjFkYTg0ZjJiN2IxZDhwNworICB9LAorICB7IC8vIEVudHJ5IDE1NworICAgIC0weDEuZDBkY2ExZjg3MTViZDdmOWZmMzczYzc2MzUyMmRiMGVwLTQsCisgICAgLTB4MS4xZGE4NGYyYjdiMWQ4cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTgKKyAgICAweDEuYjkxN2ViYmMzMGUxZDgzNjRiYzNjMmMxMGVhMTM1MzlwLTIsCisgICAgMHgxLjIwMWU5NzMyNTEzMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDE1OQorICAgIDB4MS5iOTE3ZWJiYzMwZTFkODM2NGJjM2MyYzEwZWExMzUzOXAtMiwKKyAgICAtMHgxLjIwMWU5NzMyNTEzMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDE2MAorICAgIDB4MS5mZmZhZGYxMmZmNDE0N2Y2ZjZmMzViNDRiMGY2Y2I0NnAtMSwKKyAgICAweDEuMjFlMDJwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjEKKyAgICAweDEuZmZmYWRmMTJmZjQxNDdmNmY2ZjM1YjQ0YjBmNmNiNDZwLTEsCisgICAgLTB4MS4yMWUwMnAtNworICB9LAorICB7IC8vIEVudHJ5IDE2MgorICAgIC0weDEuNTk4YTRkYWIzZGU1OTdkNTJmYWE3MzY3NjJhM2Y2NTFwLTEsCisgICAgMHgxLjI3ZTI5YTRiOTg1YmZwMQorICB9LAorICB7IC8vIEVudHJ5IDE2MworICAgIC0weDEuNTk4YTRkYWIzZGU1OTdkNTJmYWE3MzY3NjJhM2Y2NTFwLTEsCisgICAgLTB4MS4yN2UyOWE0Yjk4NWJmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjQKKyAgICAweDEuZmE5NWMxMTU0YWJmNTZjNGRiYjc3YmZlNWU0ZThmNDJwLTEsCisgICAgMHgxLjJhMWYyOGRiZmI2YzBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjUKKyAgICAweDEuZmE5NWMxMTU0YWJmNTZjNGRiYjc3YmZlNWU0ZThmNDJwLTEsCisgICAgLTB4MS4yYTFmMjhkYmZiNmMwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTY2CisgICAgLTB4MS42NDEyMjkzYWRiN2JjYTk3NzMxZTUwYTg2MzEyZGEyZHAtMSwKKyAgICAweDEuMmI4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjcKKyAgICAtMHgxLjY0MTIyOTNhZGI3YmNhOTc3MzFlNTBhODYzMTJkYTJkcC0xLAorICAgIC0weDEuMmI4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjgKKyAgICAweDEuZmZmYTUxOGE3ZDBlNzdmM2I0MzFmY2QwYmEzNTMwOTVwLTEsCisgICAgMHgxLjMxMTk5ZGVmNzJmNGRwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjkKKyAgICAweDEuZmZmYTUxOGE3ZDBlNzdmM2I0MzFmY2QwYmEzNTMwOTVwLTEsCisgICAgLTB4MS4zMTE5OWRlZjcyZjRkcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTcwCisgICAgMHgxLmYzNjg5NWZlMTc3Zjc3ZmU4NDc5ODI2NGFkNGYzM2IxcC0xLAorICAgIDB4MS4zMTI2MGUxNDg1MDE0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzEKKyAgICAweDEuZjM2ODk1ZmUxNzdmNzdmZTg0Nzk4MjY0YWQ0ZjMzYjFwLTEsCisgICAgLTB4MS4zMTI2MGUxNDg1MDE0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzIKKyAgICAweDEuZDM2MjA3YjRmZWUxNjdmNmIzMTg1ZmRkOTI5NGEyMzNwLTQsCisgICAgMHgxLjM0ZTk2NGNkMTAzYmRwMgorICB9LAorICB7IC8vIEVudHJ5IDE3MworICAgIDB4MS5kMzYyMDdiNGZlZTE2N2Y2YjMxODVmZGQ5Mjk0YTIzM3AtNCwKKyAgICAtMHgxLjM0ZTk2NGNkMTAzYmRwMgorICB9LAorICB7IC8vIEVudHJ5IDE3NAorICAgIC0weDEuODRhMzdmNGZhNzYxNmNhYWQ2NmI0ZDcwMWFiNTNlOTRwLTEsCisgICAgMHgxLjM3NjE4YTBiYTc4NTBwMQorICB9LAorICB7IC8vIEVudHJ5IDE3NQorICAgIC0weDEuODRhMzdmNGZhNzYxNmNhYWQ2NmI0ZDcwMWFiNTNlOTRwLTEsCisgICAgLTB4MS4zNzYxOGEwYmE3ODUwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzYKKyAgICAtMHgxLmM4MzBiYmM5OWUyMjkwZjlkOTNhYTYyYjJkZGZlYzk3cC0zOSwKKyAgICAweDEuMzc5NzA0ZjVmMWViM3AyNAorICB9LAorICB7IC8vIEVudHJ5IDE3NworICAgIC0weDEuYzgzMGJiYzk5ZTIyOTBmOWQ5M2FhNjJiMmRkZmVjOTdwLTM5LAorICAgIC0weDEuMzc5NzA0ZjVmMWViM3AyNAorICB9LAorICB7IC8vIEVudHJ5IDE3OAorICAgIDB4MS5iNWRhYWEyMzNiZDRmN2ZjZjM0YjZkNWQwMjgwMTcyZnAtMywKKyAgICAweDEuM2I2MWRkMTY2ZDQ3MHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTc5CisgICAgMHgxLmI1ZGFhYTIzM2JkNGY3ZmNmMzRiNmQ1ZDAyODAxNzJmcC0zLAorICAgIC0weDEuM2I2MWRkMTY2ZDQ3MHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTgwCisgICAgLTB4MS5mZmQwMGRjNGRiNDAwZDk2MmUyZDI1NWE2NjFlM2NjYnAtNCwKKyAgICAweDEuM2MwMTEwMjJhY2JkMHAzNworICB9LAorICB7IC8vIEVudHJ5IDE4MQorICAgIC0weDEuZmZkMDBkYzRkYjQwMGQ5NjJlMmQyNTVhNjYxZTNjY2JwLTQsCisgICAgLTB4MS4zYzAxMTAyMmFjYmQwcDM3CisgIH0sCisgIHsgLy8gRW50cnkgMTgyCisgICAgLTB4MS4xNDA1MmI0MDE2ZmY1N2ZlNTc1MGVkMzQyNmJmZDc1OHAtMSwKKyAgICAweDEuM2U3Nzg4ZTkwMGI3MHA3MjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODMKKyAgICAtMHgxLjE0MDUyYjQwMTZmZjU3ZmU1NzUwZWQzNDI2YmZkNzU4cC0xLAorICAgIC0weDEuM2U3Nzg4ZTkwMGI3MHA3MjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODQKKyAgICAweDEuZmZmZmU2YTVlNDE5N2Y1ZmM1MGFjYjE4OWViODVjOTRwLTEsCisgICAgMHgxLjQyM2VhZmRjYzI3NzlwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMTg1CisgICAgMHgxLmZmZmZlNmE1ZTQxOTdmNWZjNTBhY2IxODllYjg1Yzk0cC0xLAorICAgIC0weDEuNDIzZWFmZGNjMjc3OXAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODYKKyAgICAtMHgxLmZlMDlmYzNkMTZmZWRkNzUwODMwMWRmNjg4NTdiNzU2cC02LAorICAgIDB4MS40MzIxODI4YzFiNTM4cDExOQorICB9LAorICB7IC8vIEVudHJ5IDE4NworICAgIC0weDEuZmUwOWZjM2QxNmZlZGQ3NTA4MzAxZGY2ODg1N2I3NTZwLTYsCisgICAgLTB4MS40MzIxODI4YzFiNTM4cDExOQorICB9LAorICB7IC8vIEVudHJ5IDE4OAorICAgIDB4MS5iNjg1ZDk0OWEyN2EwMTQzYzRhYzliNTUzNTQxZWJlY3AtMTQsCisgICAgMHgxLjQzNTA2Y2IyMjk3NWRwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODkKKyAgICAweDEuYjY4NWQ5NDlhMjdhMDE0M2M0YWM5YjU1MzU0MWViZWNwLTE0LAorICAgIC0weDEuNDM1MDZjYjIyOTc1ZHAyMgorICB9LAorICB7IC8vIEVudHJ5IDE5MAorICAgIDB4MS5mZTM5ODA5MGUyMDNiYzJmNmZlNjgzMGQzODBmYWNjNHAtMSwKKyAgICAweDEuNDM5ZjYzNDk1Nzg2YXA2NworICB9LAorICB7IC8vIEVudHJ5IDE5MQorICAgIDB4MS5mZTM5ODA5MGUyMDNiYzJmNmZlNjgzMGQzODBmYWNjNHAtMSwKKyAgICAtMHgxLjQzOWY2MzQ5NTc4NmFwNjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTIKKyAgICAweDEuZmU2Mjc0ZTAwMDk3M2EyNmMxYTAwNTNlM2ZkZWZmYzdwLTEsCisgICAgMHgxLjQ1NzUzOGE2YmQwNzNwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTMKKyAgICAweDEuZmU2Mjc0ZTAwMDk3M2EyNmMxYTAwNTNlM2ZkZWZmYzdwLTEsCisgICAgLTB4MS40NTc1MzhhNmJkMDczcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTk0CisgICAgMHgxLjA5ZmNiNjkzNTljMDlkNTczOWYxZjAyNTVkNGZjZTgzcC0xLAorICAgIDB4MS40NzhmYzA4cDQzCisgIH0sCisgIHsgLy8gRW50cnkgMTk1CisgICAgMHgxLjA5ZmNiNjkzNTljMDlkNTczOWYxZjAyNTVkNGZjZTgzcC0xLAorICAgIC0weDEuNDc4ZmMwOHA0MworICB9LAorICB7IC8vIEVudHJ5IDE5NgorICAgIC0weDEuMjBjMjE1ODUxMWU3ODk5ZjFlYzM3OWU5MGMyOTY3ODBwLTksCisgICAgMHgxLjQ4YTQ1Nzk3Y2JlNjNwNjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTcKKyAgICAtMHgxLjIwYzIxNTg1MTFlNzg5OWYxZWMzNzllOTBjMjk2NzgwcC05LAorICAgIC0weDEuNDhhNDU3OTdjYmU2M3A2MQorICB9LAorICB7IC8vIEVudHJ5IDE5OAorICAgIDB4MS45OTBkMTdhYWUyNTMwN2ZlYzRhZTZkNGU5OGYzMDA5M3AtMSwKKyAgICAweDEuNGE2MmUwZTEyYzE3M3AtMQorICB9LAorICB7IC8vIEVudHJ5IDE5OQorICAgIDB4MS45OTBkMTdhYWUyNTMwN2ZlYzRhZTZkNGU5OGYzMDA5M3AtMSwKKyAgICAtMHgxLjRhNjJlMGUxMmMxNzNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDAKKyAgICAweDEuZmRkNGYxZTAwYjM4NzAwNDE5Zjk2ZDM0MTkwNWQwNDVwLTMsCisgICAgMHgxLjRjNTk2NjQyYTk0ODhwOQorICB9LAorICB7IC8vIEVudHJ5IDIwMQorICAgIDB4MS5mZGQ0ZjFlMDBiMzg3MDA0MTlmOTZkMzQxOTA1ZDA0NXAtMywKKyAgICAtMHgxLjRjNTk2NjQyYTk0ODhwOQorICB9LAorICB7IC8vIEVudHJ5IDIwMgorICAgIDB4MS5mZTRmMTQxMDMyZjM3N2ZlMTM1YjEzZTA0NDM2YzVmZnAtMSwKKyAgICAweDEuNGQwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjAzCisgICAgMHgxLmZlNGYxNDEwMzJmMzc3ZmUxMzViMTNlMDQ0MzZjNWZmcC0xLAorICAgIC0weDEuNGQwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjA0CisgICAgMHgxLjk0ZTlmNDVkNDNjMTM3YTNmMzQ1NjQ0MjQwYTJjZWYwcC0yLAorICAgIDB4MS40ZjBmMzA4cDQ4OAorICB9LAorICB7IC8vIEVudHJ5IDIwNQorICAgIDB4MS45NGU5ZjQ1ZDQzYzEzN2EzZjM0NTY0NDI0MGEyY2VmMHAtMiwKKyAgICAtMHgxLjRmMGYzMDhwNDg4CisgIH0sCisgIHsgLy8gRW50cnkgMjA2CisgICAgMHgxLjkzNTVmNjlhZDQzMjY0MDQ4MjdjZDVjY2ZmOGEwYzY5cC0yLAorICAgIDB4MS41MmYwMGUwcDc5MworICB9LAorICB7IC8vIEVudHJ5IDIwNworICAgIDB4MS45MzU1ZjY5YWQ0MzI2NDA0ODI3Y2Q1Y2NmZjhhMGM2OXAtMiwKKyAgICAtMHgxLjUyZjAwZTBwNzkzCisgIH0sCisgIHsgLy8gRW50cnkgMjA4CisgICAgMHgxLjFhMTliZThiZWExMGE4MDFkMGIyZDA5ZDk1MDljMmM0cC0xLAorICAgIDB4MS41MmYwNmM3MzBlYzAycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDkKKyAgICAweDEuMWExOWJlOGJlYTEwYTgwMWQwYjJkMDlkOTUwOWMyYzRwLTEsCisgICAgLTB4MS41MmYwNmM3MzBlYzAycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTAKKyAgICAweDEuMzg1ZDkyZWMwYzczMzdmZWEzOTQ5M2Y2ZjI2NzQzMjhwLTEsCisgICAgMHgxLjUzZTdkNTg0NWZlM2RwMjIwCisgIH0sCisgIHsgLy8gRW50cnkgMjExCisgICAgMHgxLjM4NWQ5MmVjMGM3MzM3ZmVhMzk0OTNmNmYyNjc0MzI4cC0xLAorICAgIC0weDEuNTNlN2Q1ODQ1ZmUzZHAyMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTIKKyAgICAweDEuZmZmZmZmZmZmZTJmMGYwMDAwMDA0NjVlMzU5MmJmZmJwLTEsCisgICAgMHgxLjU5MHAtMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTMKKyAgICAweDEuZmZmZmZmZmZmZTJmMGYwMDAwMDA0NjVlMzU5MmJmZmJwLTEsCisgICAgLTB4MS41OTBwLTIwCisgIH0sCisgIHsgLy8gRW50cnkgMjE0CisgICAgLTB4MS5mZmQ3YmMyOGRlZDkxZmZhMjAwZDY3NzEwOTI1MTgwMXAtMSwKKyAgICAweDEuNTkyZjExNzZmMDk4MHA4NgorICB9LAorICB7IC8vIEVudHJ5IDIxNQorICAgIC0weDEuZmZkN2JjMjhkZWQ5MWZmYTIwMGQ2NzcxMDkyNTE4MDFwLTEsCisgICAgLTB4MS41OTJmMTE3NmYwOTgwcDg2CisgIH0sCisgIHsgLy8gRW50cnkgMjE2CisgICAgLTB4MS5jZWUyOGIzZDc5Nzk5MDAwMDA5ZWE4MDgxMjQ0MTE2Y3AtMSwKKyAgICAweDEuNTk5OTk5OWRjMDlkY3AxCisgIH0sCisgIHsgLy8gRW50cnkgMjE3CisgICAgLTB4MS5jZWUyOGIzZDc5Nzk5MDAwMDA5ZWE4MDgxMjQ0MTE2Y3AtMSwKKyAgICAtMHgxLjU5OTk5OTlkYzA5ZGNwMQorICB9LAorICB7IC8vIEVudHJ5IDIxOAorICAgIDB4MS5jMWYxZWIwOGMyNjA0MGEzMjgwMGYwODc5NTJhMzgzY3AtMSwKKyAgICAweDEuNWJlYTAxMHA0NjgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTkKKyAgICAweDEuYzFmMWViMDhjMjYwNDBhMzI4MDBmMDg3OTUyYTM4M2NwLTEsCisgICAgLTB4MS41YmVhMDEwcDQ2OAorICB9LAorICB7IC8vIEVudHJ5IDIyMAorICAgIDB4MS5mZmZlMzVhYjA5YTY1M2UyNjZlYWRhNmY0NDA1NTIxNHAtMSwKKyAgICAweDEuNWNiODBhNjEzNWU1YXAxMDAwCisgIH0sCisgIHsgLy8gRW50cnkgMjIxCisgICAgMHgxLmZmZmUzNWFiMDlhNjUzZTI2NmVhZGE2ZjQ0MDU1MjE0cC0xLAorICAgIC0weDEuNWNiODBhNjEzNWU1YXAxMDAwCisgIH0sCisgIHsgLy8gRW50cnkgMjIyCisgICAgLTB4MS4wN2I4NWY2MDZlNzVkNzY1YjFhYTNiYmNjYmE2ZWFmOHAtMywKKyAgICAweDEuNWQ1YmU0ODczMGQyZHAxMworICB9LAorICB7IC8vIEVudHJ5IDIyMworICAgIC0weDEuMDdiODVmNjA2ZTc1ZDc2NWIxYWEzYmJjY2JhNmVhZjhwLTMsCisgICAgLTB4MS41ZDViZTQ4NzMwZDJkcDEzCisgIH0sCisgIHsgLy8gRW50cnkgMjI0CisgICAgMHgxLmZmZmZmZmZmZmY4NjIzOWMwMDAwMDRkNTgxYjA1NWVicC0xLAorICAgIDB4MS42MTRwLTIxCisgIH0sCisgIHsgLy8gRW50cnkgMjI1CisgICAgMHgxLmZmZmZmZmZmZmY4NjIzOWMwMDAwMDRkNTgxYjA1NWVicC0xLAorICAgIC0weDEuNjE0cC0yMQorICB9LAorICB7IC8vIEVudHJ5IDIyNgorICAgIC0weDEuZGQzYTgwNmU4OWNmMTdmZmZmZjE2ZWNkNTM5N2I0ODZwLTEsCisgICAgMHgxLjYyYWRjOGE2NjAzNjRwMQorICB9LAorICB7IC8vIEVudHJ5IDIyNworICAgIC0weDEuZGQzYTgwNmU4OWNmMTdmZmZmZjE2ZWNkNTM5N2I0ODZwLTEsCisgICAgLTB4MS42MmFkYzhhNjYwMzY0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjgKKyAgICAtMHgxLjQzMDhiMTRmNGI2ZWRjNGMwN2VlNjg5NWYzMTg4YWYzcC0xLAorICAgIDB4MS42NGVmNDM4cDE0MgorICB9LAorICB7IC8vIEVudHJ5IDIyOQorICAgIC0weDEuNDMwOGIxNGY0YjZlZGM0YzA3ZWU2ODk1ZjMxODhhZjNwLTEsCisgICAgLTB4MS42NGVmNDM4cDE0MgorICB9LAorICB7IC8vIEVudHJ5IDIzMAorICAgIDB4MS42NjIzZDJlYjZhZGQxZmZjMzk4YTNjMjA0NDdmOWQwNnAtMywKKyAgICAweDEuNjUycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzEKKyAgICAweDEuNjYyM2QyZWI2YWRkMWZmYzM5OGEzYzIwNDQ3ZjlkMDZwLTMsCisgICAgLTB4MS42NTJwMAorICB9LAorICB7IC8vIEVudHJ5IDIzMgorICAgIDB4MS5mZmY4MzJjNTBmNDcxZmY1NTk5YzIzZGM5NjhlYjhlNHAtMSwKKyAgICAweDEuNjU4NjViMmNiMDhhMnAtNworICB9LAorICB7IC8vIEVudHJ5IDIzMworICAgIDB4MS5mZmY4MzJjNTBmNDcxZmY1NTk5YzIzZGM5NjhlYjhlNHAtMSwKKyAgICAtMHgxLjY1ODY1YjJjYjA4YTJwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzQKKyAgICAweDEuYWNjMjUxYmUzMzAyMjgwMjFiYzMxMzA3YmM4MWRjMTZwLTEsCisgICAgMHgxLjZhOTM3ZGFhYmMyMGVwMzc1CisgIH0sCisgIHsgLy8gRW50cnkgMjM1CisgICAgMHgxLmFjYzI1MWJlMzMwMjI4MDIxYmMzMTMwN2JjODFkYzE2cC0xLAorICAgIC0weDEuNmE5MzdkYWFiYzIwZXAzNzUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzYKKyAgICAtMHgxLjE0YWU3MmU2YmEyMmVmNDYwODg3NWM0MTM3OGViMDUycC02MSwKKyAgICAweDEuNmFjNWIyNjJjYTFmZnA4NDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzcKKyAgICAtMHgxLjE0YWU3MmU2YmEyMmVmNDYwODg3NWM0MTM3OGViMDUycC02MSwKKyAgICAtMHgxLjZhYzViMjYyY2ExZmZwODQ5CisgIH0sCisgIHsgLy8gRW50cnkgMjM4CisgICAgMHgxLmUwNjE5OTYwYTExYzY4MDFlODBhYjBjOWUyNWY4OWQwcC0yLAorICAgIDB4MS42ZjdiZGVmN2JkZWY0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzkKKyAgICAweDEuZTA2MTk5NjBhMTFjNjgwMWU4MGFiMGM5ZTI1Zjg5ZDBwLTIsCisgICAgLTB4MS42ZjdiZGVmN2JkZWY0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDAKKyAgICAweDEuOGQyM2Y5NzkwMWEzMDdmZmZkNmM1MmFkZjgzZjA5OTNwLTEsCisgICAgMHgxLjczOWNlNzU5Y2U3MzhwMjAwCisgIH0sCisgIHsgLy8gRW50cnkgMjQxCisgICAgMHgxLjhkMjNmOTc5MDFhMzA3ZmZmZDZjNTJhZGY4M2YwOTkzcC0xLAorICAgIC0weDEuNzM5Y2U3NTljZTczOHAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDIKKyAgICAweDEuZmZmZmY3OGExNGJhMGYzOGE4NGI0OGRjZGI2M2Q0NGZwLTEsCisgICAgMHgxLjc0NTBjM2Y0OWQwYjJwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMjQzCisgICAgMHgxLmZmZmZmNzhhMTRiYTBmMzhhODRiNDhkY2RiNjNkNDRmcC0xLAorICAgIC0weDEuNzQ1MGMzZjQ5ZDBiMnAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDQKKyAgICAweDEuZDZmMWM3MjdmYjJjYjdmN2U5Y2JlZTJlMTQyNDZjMDhwLTQsCisgICAgMHgxLjc0OWZlNTNmOTYzZmRwMAorICB9LAorICB7IC8vIEVudHJ5IDI0NQorICAgIDB4MS5kNmYxYzcyN2ZiMmNiN2Y3ZTljYmVlMmUxNDI0NmMwOHAtNCwKKyAgICAtMHgxLjc0OWZlNTNmOTYzZmRwMAorICB9LAorICB7IC8vIEVudHJ5IDI0NgorICAgIC0weDEuZjI4NGI1MDI4YzE4NDdmZmZmZmM5NTMyZmU4OTJhYWRwLTEsCisgICAgMHgxLjc0YWY2NzI1YzYyMDZwMQorICB9LAorICB7IC8vIEVudHJ5IDI0NworICAgIC0weDEuZjI4NGI1MDI4YzE4NDdmZmZmZmM5NTMyZmU4OTJhYWRwLTEsCisgICAgLTB4MS43NGFmNjcyNWM2MjA2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDgKKyAgICAtMHgxLmYzMTY1YTBiMzA2YjFmZmNmOGQxMTkwOWZmZmJhMTY3cC0xLAorICAgIDB4MS43NTUwZDI4ZmZjY2M0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDkKKyAgICAtMHgxLmYzMTY1YTBiMzA2YjFmZmNmOGQxMTkwOWZmZmJhMTY3cC0xLAorICAgIC0weDEuNzU1MGQyOGZmY2NjNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMjUwCisgICAgMHgxLmQ2NmQyMDc4ZWJkZWI3ZmZlZGY4YTQ4ZTI1MDg0YzE5cC0xLAorICAgIDB4MS43NzVlMzk3Y2Q2YWEwcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTEKKyAgICAweDEuZDY2ZDIwNzhlYmRlYjdmZmVkZjhhNDhlMjUwODRjMTlwLTEsCisgICAgLTB4MS43NzVlMzk3Y2Q2YWEwcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTIKKyAgICAweDEuN2FmOWExMzA4NWY1MzgyYTg3YTU0MWFlMGIyZTU5NjVwLTEsCisgICAgMHgxLjc5OTMwMmJmN2YyOTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTMKKyAgICAweDEuN2FmOWExMzA4NWY1MzgyYTg3YTU0MWFlMGIyZTU5NjVwLTEsCisgICAgLTB4MS43OTkzMDJiZjdmMjkwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjU0CisgICAgMHgxLmZmZGQyZmRhYzBjMjQ4M2U3YjExNmQ2ZDQ4OGU3YTRicC0xLAorICAgIDB4MS43OTlmZmZmZmZmZmZkcC02CisgIH0sCisgIHsgLy8gRW50cnkgMjU1CisgICAgMHgxLmZmZGQyZmRhYzBjMjQ4M2U3YjExNmQ2ZDQ4OGU3YTRicC0xLAorICAgIC0weDEuNzk5ZmZmZmZmZmZmZHAtNgorICB9LAorICB7IC8vIEVudHJ5IDI1NgorICAgIDB4MS5mZmY3NDRmMTg1YTczN2YyNTY3MzJjZTg3ZGJhZjdhN3AtMSwKKyAgICAweDEuN2EzNjkyY2E5NDQ5MHAtNworICB9LAorICB7IC8vIEVudHJ5IDI1NworICAgIDB4MS5mZmY3NDRmMTg1YTczN2YyNTY3MzJjZTg3ZGJhZjdhN3AtMSwKKyAgICAtMHgxLjdhMzY5MmNhOTQ0OTBwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTgKKyAgICAweDEuN2E2YjMyNmI2OTBmYTgzMWVlNGQwZGQ3Mjc4N2ZiYzNwLTEsCisgICAgMHgxLjdhNjZhNjM4YWM1YjVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTkKKyAgICAweDEuN2E2YjMyNmI2OTBmYTgzMWVlNGQwZGQ3Mjc4N2ZiYzNwLTEsCisgICAgLTB4MS43YTY2YTYzOGFjNWI1cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjYwCisgICAgMHgxLjY3MWZkYjY0ZmZiZWQ3ZTQ5NTJhOWQ5Njc5NDFlN2RhcC00LAorICAgIDB4MS43YmE2NTQ2MmI0OWEwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjEKKyAgICAweDEuNjcxZmRiNjRmZmJlZDdlNDk1MmE5ZDk2Nzk0MWU3ZGFwLTQsCisgICAgLTB4MS43YmE2NTQ2MmI0OWEwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjIKKyAgICAweDEuZmZhNTU0OTBmMjA2ZTNiNDMyM2EwMjQ3N2I0MTQ5ZThwLTEsCisgICAgMHgxLjdjZGYzN2NkZjM3YzlwMjM5CisgIH0sCisgIHsgLy8gRW50cnkgMjYzCisgICAgMHgxLmZmYTU1NDkwZjIwNmUzYjQzMjNhMDI0NzdiNDE0OWU4cC0xLAorICAgIC0weDEuN2NkZjM3Y2RmMzdjOXAyMzkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjQKKyAgICAweDEuNGM1YjU5NzBhM2E0ODgyMzMwMDU3NDJhZjVlNmE5NWVwLTQsCisgICAgMHgxLjdkNTQyNTY1ZjQ3MmVwMAorICB9LAorICB7IC8vIEVudHJ5IDI2NQorICAgIDB4MS40YzViNTk3MGEzYTQ4ODIzMzAwNTc0MmFmNWU2YTk1ZXAtNCwKKyAgICAtMHgxLjdkNTQyNTY1ZjQ3MmVwMAorICB9LAorICB7IC8vIEVudHJ5IDI2NgorICAgIDB4MS40NzlhNTY2N2M2M2Y1N2RhMjZhZGYxODBhN2ViMmZmYnAtNCwKKyAgICAweDEuN2RhMDc1MTY0OTA1OHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjY3CisgICAgMHgxLjQ3OWE1NjY3YzYzZjU3ZGEyNmFkZjE4MGE3ZWIyZmZicC00LAorICAgIC0weDEuN2RhMDc1MTY0OTA1OHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjY4CisgICAgMHgxLmZmZjcxNzUxMWRjYjU3ZjMyZDM4ZjI5YzAxMzc5Yjk4cC0xLAorICAgIDB4MS43ZTBkZGNkYTZjYzBkcC03CisgIH0sCisgIHsgLy8gRW50cnkgMjY5CisgICAgMHgxLmZmZjcxNzUxMWRjYjU3ZjMyZDM4ZjI5YzAxMzc5Yjk4cC0xLAorICAgIC0weDEuN2UwZGRjZGE2Y2MwZHAtNworICB9LAorICB7IC8vIEVudHJ5IDI3MAorICAgIDB4MS5mZmZmZmZmZmZmNzA3N2U3MDAwMDA2YjRjNzA2MGMzM3AtMSwKKyAgICAweDEuN2Y2cC0yMQorICB9LAorICB7IC8vIEVudHJ5IDI3MQorICAgIDB4MS5mZmZmZmZmZmZmNzA3N2U3MDAwMDA2YjRjNzA2MGMzM3AtMSwKKyAgICAtMHgxLjdmNnAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzIKKyAgICAtMHgxLmZmZjllMTU1NDY5ODAxNzIyMDkxN2MzZmIzMTE4OGRkcC0xLAorICAgIDB4MS43ZjkwMTE3ZDQ0Yzc0cDEwMAorICB9LAorICB7IC8vIEVudHJ5IDI3MworICAgIC0weDEuZmZmOWUxNTU0Njk4MDE3MjIwOTE3YzNmYjMxMTg4ZGRwLTEsCisgICAgLTB4MS43ZjkwMTE3ZDQ0Yzc0cDEwMAorICB9LAorICB7IC8vIEVudHJ5IDI3NAorICAgIDB4MS5mZmRjMDA2YmZmN2U5ODRhOGQ1MDMxYTcxNTJkMzZlNXAtMSwKKyAgICAweDEuN2ZmZmZmZmZmZWY3YXAtNgorICB9LAorICB7IC8vIEVudHJ5IDI3NQorICAgIDB4MS5mZmRjMDA2YmZmN2U5ODRhOGQ1MDMxYTcxNTJkMzZlNXAtMSwKKyAgICAtMHgxLjdmZmZmZmZmZmVmN2FwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzYKKyAgICAweDEuZmZkYzAwNmJmZjdlNzg0NzRkNjZkN2YyNWMzYWMyNzdwLTEsCisgICAgMHgxLjdmZmZmZmZmZmZhMjZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzcKKyAgICAweDEuZmZkYzAwNmJmZjdlNzg0NzRkNjZkN2YyNWMzYWMyNzdwLTEsCisgICAgLTB4MS43ZmZmZmZmZmZmYTI2cC02CisgIH0sCisgIHsgLy8gRW50cnkgMjc4CisgICAgMHgxLmZmZGMwMDZiZmY3ZTY4MzlhZGJhMmE5MTEwOGQ1NmFmcC0xLAorICAgIDB4MS43ZmZmZmZmZmZmZjgwcC02CisgIH0sCisgIHsgLy8gRW50cnkgMjc5CisgICAgMHgxLmZmZGMwMDZiZmY3ZTY4MzlhZGJhMmE5MTEwOGQ1NmFmcC0xLAorICAgIC0weDEuN2ZmZmZmZmZmZmY4MHAtNgorICB9LAorICB7IC8vIEVudHJ5IDI4MAorICAgIDB4MS43NjA3MThhYjQ0Mzk3N2ZkZDhmOGYyMjIxY2E0ZGIzY3AtMSwKKyAgICAweDEuODBlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjgxCisgICAgMHgxLjc2MDcxOGFiNDQzOTc3ZmRkOGY4ZjIyMjFjYTRkYjNjcC0xLAorICAgIC0weDEuODBlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjgyCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWIyOWQwYnAtMSwKKyAgICAweDEuODFhZTBkZmZhM2IzM3A5NTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODMKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYjI5ZDBicC0xLAorICAgIC0weDEuODFhZTBkZmZhM2IzM3A5NTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODQKKyAgICAtMHgxLmZiZGM0ODEyNWIzNDU3NGNmMWY5MTQxOWU3ZWRiNzVicC0xLAorICAgIDB4MS44MWQ2MTIyODljNWNmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODUKKyAgICAtMHgxLmZiZGM0ODEyNWIzNDU3NGNmMWY5MTQxOWU3ZWRiNzVicC0xLAorICAgIC0weDEuODFkNjEyMjg5YzVjZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMjg2CisgICAgMHgxLmZmOWUzOTY2NTFjYzk3ZTkzNWIyZTBlZTczNjA3ZDEycC01LAorICAgIDB4MS44MjIwMTkyMjcwYTBlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODcKKyAgICAweDEuZmY5ZTM5NjY1MWNjOTdlOTM1YjJlMGVlNzM2MDdkMTJwLTUsCisgICAgLTB4MS44MjIwMTkyMjcwYTBlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODgKKyAgICAweDEuZmUyYjI2ZGRkYjVjODgyZjMwYTg4NWMxYjI5MWY5NDVwLTUsCisgICAgMHgxLjgyMmJiNzgwZTkxMDRwMAorICB9LAorICB7IC8vIEVudHJ5IDI4OQorICAgIDB4MS5mZTJiMjZkZGRiNWM4ODJmMzBhODg1YzFiMjkxZjk0NXAtNSwKKyAgICAtMHgxLjgyMmJiNzgwZTkxMDRwMAorICB9LAorICB7IC8vIEVudHJ5IDI5MAorICAgIDB4MS5lYjg3Y2ZmN2M5MTE1N2E3NTU4MThjMDEyODRiMGU1MXAtNSwKKyAgICAweDEuODJjMTE5YzRiOGU0OXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjkxCisgICAgMHgxLmViODdjZmY3YzkxMTU3YTc1NTgxOGMwMTI4NGIwZTUxcC01LAorICAgIC0weDEuODJjMTE5YzRiOGU0OXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjkyCisgICAgMHgxLmViODdjZmY3YTYyYjc3YjU3YTY2YWMyNzVhMzEwNGM4cC01LAorICAgIDB4MS44MmMxMTljNGI5ZmM0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTMKKyAgICAweDEuZWI4N2NmZjdhNjJiNzdiNTdhNjZhYzI3NWEzMTA0YzhwLTUsCisgICAgLTB4MS44MmMxMTljNGI5ZmM0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTQKKyAgICAweDEuZWI4N2NmZjc5NWFiMTdhODA3ODY0ZDhmYjBjYTQzY2FwLTUsCisgICAgMHgxLjgyYzExOWM0YmE4MDhwMAorICB9LAorICB7IC8vIEVudHJ5IDI5NQorICAgIDB4MS5lYjg3Y2ZmNzk1YWIxN2E4MDc4NjRkOGZiMGNhNDNjYXAtNSwKKyAgICAtMHgxLjgyYzExOWM0YmE4MDhwMAorICB9LAorICB7IC8vIEVudHJ5IDI5NgorICAgIDB4MS5kZTFkMTdhYjBkNmE0ODM2NzUyMzE5M2Q2ODU2OGMxYnAtNSwKKyAgICAweDEuODMyYzlmYzc2NTI3MHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjk3CisgICAgMHgxLmRlMWQxN2FiMGQ2YTQ4MzY3NTIzMTkzZDY4NTY4YzFicC01LAorICAgIC0weDEuODMyYzlmYzc2NTI3MHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjk4CisgICAgMHgxLmRjODZlN2JlYzBjNDQ4NDhjZmMzOWI3ZjFiODIwNGFjcC01LAorICAgIDB4MS44MzM5NTZjZTdkMWY5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTkKKyAgICAweDEuZGM4NmU3YmVjMGM0NDg0OGNmYzM5YjdmMWI4MjA0YWNwLTUsCisgICAgLTB4MS44MzM5NTZjZTdkMWY5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDAKKyAgICAweDEuZGIwM2NiYjk0MmE3YTg0OTc0ZTkwNGVjYzg5NmE1ZWVwLTUsCisgICAgMHgxLjgzNDU3NGViMWMwOTlwMAorICB9LAorICB7IC8vIEVudHJ5IDMwMQorICAgIDB4MS5kYjAzY2JiOTQyYTdhODQ5NzRlOTA0ZWNjODk2YTVlZXAtNSwKKyAgICAtMHgxLjgzNDU3NGViMWMwOTlwMAorICB9LAorICB7IC8vIEVudHJ5IDMwMgorICAgIDB4MS5jZTQzMTcxMGQxNTA3N2IxZTgxNzBhNTMyYjY4YWJkZXAtNSwKKyAgICAweDEuODNhYmE1Njg4ZTEzZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzAzCisgICAgMHgxLmNlNDMxNzEwZDE1MDc3YjFlODE3MGE1MzJiNjhhYmRlcC01LAorICAgIC0weDEuODNhYmE1Njg4ZTEzZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzA0CisgICAgMHgxLmNkNDZiM2E3N2Y2ZGQ3YWIwZDMxMjU0NmFiYTdjMGFmcC01LAorICAgIDB4MS44M2IzOGJiYWZkNzVicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDUKKyAgICAweDEuY2Q0NmIzYTc3ZjZkZDdhYjBkMzEyNTQ2YWJhN2MwYWZwLTUsCisgICAgLTB4MS44M2IzOGJiYWZkNzVicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDYKKyAgICAtMHgxLmZmMjliYzY2NmJlZTZlYTQ0ZDRkYjAwMGU1ZjE3M2JmcC0xLAorICAgIDB4MS44NmEwMTdjYjFjMzFjcDE2CisgIH0sCisgIHsgLy8gRW50cnkgMzA3CisgICAgLTB4MS5mZjI5YmM2NjZiZWU2ZWE0NGQ0ZGIwMDBlNWYxNzNiZnAtMSwKKyAgICAtMHgxLjg2YTAxN2NiMWMzMWNwMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDgKKyAgICAtMHgxLjc5Njg5MTZlNGM2NDYzMGU4ZTNhZTYwMjc2YmEyZDI3cC0yLAorICAgIDB4MS44NzIwNTg4cDM5MgorICB9LAorICB7IC8vIEVudHJ5IDMwOQorICAgIC0weDEuNzk2ODkxNmU0YzY0NjMwZThlM2FlNjAyNzZiYTJkMjdwLTIsCisgICAgLTB4MS44NzIwNTg4cDM5MgorICB9LAorICB7IC8vIEVudHJ5IDMxMAorICAgIDB4MS5mYjk3YzdlNDUyOTE3ZjU5ODkwZGZiNDdlN2M5YjVlM3AtMSwKKyAgICAweDEuODhhMjI4OGEyMjg4OHA5CisgIH0sCisgIHsgLy8gRW50cnkgMzExCisgICAgMHgxLmZiOTdjN2U0NTI5MTdmNTk4OTBkZmI0N2U3YzliNWUzcC0xLAorICAgIC0weDEuODhhMjI4OGEyMjg4OHA5CisgIH0sCisgIHsgLy8gRW50cnkgMzEyCisgICAgLTB4MS5hZTQ0YTVmMDFiZjYzMzAxNWU1YWFjY2NhYjRhN2YzZHAtMSwKKyAgICAweDEuOGNmMDEzOTkxYzMwOHAxMDAwCisgIH0sCisgIHsgLy8gRW50cnkgMzEzCisgICAgLTB4MS5hZTQ0YTVmMDFiZjYzMzAxNWU1YWFjY2NhYjRhN2YzZHAtMSwKKyAgICAtMHgxLjhjZjAxMzk5MWMzMDhwMTAwMAorICB9LAorICB7IC8vIEVudHJ5IDMxNAorICAgIDB4MS5kOTZlODJmNzFhOWRjN2ZkODZmNTc0ODBlNzU0OTFlM3AtMSwKKyAgICAweDEuOXAtMgorICB9LAorICB7IC8vIEVudHJ5IDMxNQorICAgIDB4MS5kOTZlODJmNzFhOWRjN2ZkODZmNTc0ODBlNzU0OTFlM3AtMSwKKyAgICAtMHgxLjlwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTYKKyAgICAweDEuMGZkOWQ1YzA5M2RmNGY1N2ZjNDk0NjNlMmYzZjMzZTZwLTcsCisgICAgMHgxLjlwMAorICB9LAorICB7IC8vIEVudHJ5IDMxNworICAgIDB4MS4wZmQ5ZDVjMDkzZGY0ZjU3ZmM0OTQ2M2UyZjNmMzNlNnAtNywKKyAgICAtMHgxLjlwMAorICB9LAorICB7IC8vIEVudHJ5IDMxOAorICAgIDB4MS4wZmQ5ZDVjMDVlNWZjODAxYTBmNWNiZmEzMzc3N2FlNHAtNywKKyAgICAweDEuOTAwMDAwMDAwMDZiMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzE5CisgICAgMHgxLjBmZDlkNWMwNWU1ZmM4MDFhMGY1Y2JmYTMzNzc3YWU0cC03LAorICAgIC0weDEuOTAwMDAwMDAwMDZiMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzIwCisgICAgMHgxLmJjOGJlNzI1NDE3ZDg4MDAwMDBjYWRhNDJlZWVhMDRlcC0xLAorICAgIDB4MS45MDBjMjA2ZDQ0MTYycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjEKKyAgICAweDEuYmM4YmU3MjU0MTdkODgwMDAwMGNhZGE0MmVlZWEwNGVwLTEsCisgICAgLTB4MS45MDBjMjA2ZDQ0MTYycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjIKKyAgICAweDEuZmZmZmZmZmZmNjNiNjdlNDk3MmQ4NmEyZjlkODIwOWJwLTEsCisgICAgMHgxLjkwMGMyYWY3YmFlZjNwLTE5CisgIH0sCisgIHsgLy8gRW50cnkgMzIzCisgICAgMHgxLmZmZmZmZmZmZjYzYjY3ZTQ5NzJkODZhMmY5ZDgyMDlicC0xLAorICAgIC0weDEuOTAwYzJhZjdiYWVmM3AtMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjQKKyAgICAweDEuYmQ0NjRjOTM1MmQxMDdmZmZmZmY4ZGI5ZTBkYTcxYzBwLTEsCisgICAgMHgxLjkwMGYxMWJkODk1NWRwNgorICB9LAorICB7IC8vIEVudHJ5IDMyNQorICAgIDB4MS5iZDQ2NGM5MzUyZDEwN2ZmZmZmZjhkYjllMGRhNzFjMHAtMSwKKyAgICAtMHgxLjkwMGYxMWJkODk1NWRwNgorICB9LAorICB7IC8vIEVudHJ5IDMyNgorICAgIDB4MS5mZmZmZmRhODVjZGQwZDQzMWUwNmY5YWE3NGJjOGNlMHAtMSwKKyAgICAweDEuOTEwYjM1YzMyNTNkNHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjcKKyAgICAweDEuZmZmZmZkYTg1Y2RkMGQ0MzFlMDZmOWFhNzRiYzhjZTBwLTEsCisgICAgLTB4MS45MTBiMzVjMzI1M2Q0cDEwMAorICB9LAorICB7IC8vIEVudHJ5IDMyOAorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDQxOWZhOHAtNTQsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDMyOQorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDQxOWZhOHAtNTQsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzAKKyAgICAtMHgxLjJhZWVmNGI5ZWExYWU0ZTY0YzcxZmNjZjFmZDA2ZjQwcC0xOCwKKyAgICAweDEuOTIycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzEKKyAgICAtMHgxLjJhZWVmNGI5ZWExYWU0ZTY0YzcxZmNjZjFmZDA2ZjQwcC0xOCwKKyAgICAtMHgxLjkyMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzMyCisgICAgLTB4MS5mZmZmZmZmZmQ5MDQ4NDc3OThjN2FjZDQ2YWQxODNjYXAtMTgsCisgICAgMHgxLjkyMjAzNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDMzMworICAgIC0weDEuZmZmZmZmZmZkOTA0ODQ3Nzk4YzdhY2Q0NmFkMTgzY2FwLTE4LAorICAgIC0weDEuOTIyMDM1NDQ0MmQxOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzM0CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZjJhYzhjM2RhNzJjYnAtMSwKKyAgICAweDEuOTI1MWY5M2FlYjU5ZHAxMgorICB9LAorICB7IC8vIEVudHJ5IDMzNQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmYyYWM4YzNkYTcyY2JwLTEsCisgICAgLTB4MS45MjUxZjkzYWViNTlkcDEyCisgIH0sCisgIHsgLy8gRW50cnkgMzM2CisgICAgMHgxLmZmYjhjNGQxZjc4YTg3ZmZmZmZiMjNkMTcxYmQ1NGQwcC0xLAorICAgIDB4MS45NDNiZTIyMWQ5MDlhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzcKKyAgICAweDEuZmZiOGM0ZDFmNzhhODdmZmZmZmIyM2QxNzFiZDU0ZDBwLTEsCisgICAgLTB4MS45NDNiZTIyMWQ5MDlhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzgKKyAgICAweDEuZmZmNjAxMWZkZGRhYjdmMjVjODJlNTM4NGQ0NmNjNjlwLTEsCisgICAgMHgxLjk0YWY2OTkzMDI4NzVwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzkKKyAgICAweDEuZmZmNjAxMWZkZGRhYjdmMjVjODJlNTM4NGQ0NmNjNjlwLTEsCisgICAgLTB4MS45NGFmNjk5MzAyODc1cC03CisgIH0sCisgIHsgLy8gRW50cnkgMzQwCisgICAgMHgxLmQ3OTU0ZTdhM2VlOTk4MDAwMDk5NDcwNjA0MzI5YjY4cC0xLAorICAgIDB4MS45OTk5OTlhYjdiMGVkcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzQxCisgICAgMHgxLmQ3OTU0ZTdhM2VlOTk4MDAwMDk5NDcwNjA0MzI5YjY4cC0xLAorICAgIC0weDEuOTk5OTk5YWI3YjBlZHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM0MgorICAgIDB4MS5kNzk1NGU3NmM4ZTMwZmZmZmY1YTliZjQ1NWEwNjQxMHAtMSwKKyAgICAweDEuOTk5OTk5YmQ0MTkwYnAtMgorICB9LAorICB7IC8vIEVudHJ5IDM0MworICAgIDB4MS5kNzk1NGU3NmM4ZTMwZmZmZmY1YTliZjQ1NWEwNjQxMHAtMSwKKyAgICAtMHgxLjk5OTk5OWJkNDE5MGJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDQKKyAgICAweDEuZmEyM2NmYjgyMDIyNDQwZWI5NzJjN2UwODM5MzNkMjBwLTEsCisgICAgMHgxLjliZDBmMTk0NzlhMjRwMgorICB9LAorICB7IC8vIEVudHJ5IDM0NQorICAgIDB4MS5mYTIzY2ZiODIwMjI0NDBlYjk3MmM3ZTA4MzkzM2QyMHAtMSwKKyAgICAtMHgxLjliZDBmMTk0NzlhMjRwMgorICB9LAorICB7IC8vIEVudHJ5IDM0NgorICAgIC0weDEuNmEwOWU2NjdmM2FmMDdmMmY0Njc2YjVmNmYyNjhjODFwLTEsCisgICAgMHgxLjljNTU4MzVlN2U4M2VwOAorICB9LAorICB7IC8vIEVudHJ5IDM0NworICAgIC0weDEuNmEwOWU2NjdmM2FmMDdmMmY0Njc2YjVmNmYyNjhjODFwLTEsCisgICAgLTB4MS45YzU1ODM1ZTdlODNlcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDgKKyAgICAweDEuZmZmNTljMTI1NTgwOTdmMjg1OGY0YTEzMjZmMmRkZjRwLTEsCisgICAgMHgxLjljOTk0MmIxNDQ0OGRwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDkKKyAgICAweDEuZmZmNTljMTI1NTgwOTdmMjg1OGY0YTEzMjZmMmRkZjRwLTEsCisgICAgLTB4MS45Yzk5NDJiMTQ0NDhkcC03CisgIH0sCisgIHsgLy8gRW50cnkgMzUwCisgICAgMHgxLmZmZWNlNWNhYjRjYTU2NTJlYTJmYzdjY2NlODgzMzA0cC0xLAorICAgIDB4MS45ZDNkOTI0ODVlMmI1cDUyMworICB9LAorICB7IC8vIEVudHJ5IDM1MQorICAgIDB4MS5mZmVjZTVjYWI0Y2E1NjUyZWEyZmM3Y2NjZTg4MzMwNHAtMSwKKyAgICAtMHgxLjlkM2Q5MjQ4NWUyYjVwNTIzCisgIH0sCisgIHsgLy8gRW50cnkgMzUyCisgICAgLTB4MS5mZjU1MzAxZDNhNzgwZDE5YzI4YzIyYzgyYzFmNTM4M3AtNSwKKyAgICAweDEuYTBkMDY4MzQxYTA4MHAxMDAwCisgIH0sCisgIHsgLy8gRW50cnkgMzUzCisgICAgLTB4MS5mZjU1MzAxZDNhNzgwZDE5YzI4YzIyYzgyYzFmNTM4M3AtNSwKKyAgICAtMHgxLmEwZDA2ODM0MWEwODBwMTAwMAorICB9LAorICB7IC8vIEVudHJ5IDM1NAorICAgIDB4MS41YTU2MTVhY2QwZGMwOWJmMzJlOTAzMTQ5NjM0Zjk5OXAtMSwKKyAgICAweDEuYTdlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzU1CisgICAgMHgxLjVhNTYxNWFjZDBkYzA5YmYzMmU5MDMxNDk2MzRmOTk5cC0xLAorICAgIC0weDEuYTdlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzU2CisgICAgMHgxLjc2NmFkMjdhMWRlNGZiMWE1YjY2NzIxNmJiZTZiZjY4cC0xNCwKKyAgICAweDEuYTg1ODM0Mzg2Mzk2NXAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTcKKyAgICAweDEuNzY2YWQyN2ExZGU0ZmIxYTViNjY3MjE2YmJlNmJmNjhwLTE0LAorICAgIC0weDEuYTg1ODM0Mzg2Mzk2NXAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTgKKyAgICAweDEuNmJkNGQ1YmU3MjQ5MzI1ZDg2ODA2MDZlNmI5ZWE2MjVwLTEsCisgICAgMHgxLmFiMTkwNjMzZDg4ZWFwMworICB9LAorICB7IC8vIEVudHJ5IDM1OQorICAgIDB4MS42YmQ0ZDViZTcyNDkzMjVkODY4MDYwNmU2YjllYTYyNXAtMSwKKyAgICAtMHgxLmFiMTkwNjMzZDg4ZWFwMworICB9LAorICB7IC8vIEVudHJ5IDM2MAorICAgIDB4MS5mZmZmZmZmZmZmNGE1N2U2NGRhODdhNWFmNDdjZmExOHAtMSwKKyAgICAweDEuYWY0YmQyZjRiZDJmMHAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjEKKyAgICAweDEuZmZmZmZmZmZmZjRhNTdlNjRkYTg3YTVhZjQ3Y2ZhMThwLTEsCisgICAgLTB4MS5hZjRiZDJmNGJkMmYwcC0yMQorICB9LAorICB7IC8vIEVudHJ5IDM2MgorICAgIDB4MS43ZmYyOTM0YWQyOWE3NDI4OGI4ODYxMjRmZWFkNTg0MnAtMSwKKyAgICAweDEuYWZhNzAzMDBhZWU2MHA3MgorICB9LAorICB7IC8vIEVudHJ5IDM2MworICAgIDB4MS43ZmYyOTM0YWQyOWE3NDI4OGI4ODYxMjRmZWFkNTg0MnAtMSwKKyAgICAtMHgxLmFmYTcwMzAwYWVlNjBwNzIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjQKKyAgICAweDEuZmY4NjZhZWJkY2UwYTdmZmZmZmI2MDc0ZDUxOTk4OTZwLTEsCisgICAgMHgxLmI1YWI0MjdjZmZiNGNwOTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjUKKyAgICAweDEuZmY4NjZhZWJkY2UwYTdmZmZmZmI2MDc0ZDUxOTk4OTZwLTEsCisgICAgLTB4MS5iNWFiNDI3Y2ZmYjRjcDk0CisgIH0sCisgIHsgLy8gRW50cnkgMzY2CisgICAgLTB4MS5mNTRmNTIyN2E0ZTgzZmJmOTM5YjJlOTYxNzhmMTIxZHAtNjAsCisgICAgMHgxLmI5NTFmMTU3MmViYTVwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjcKKyAgICAtMHgxLmY1NGY1MjI3YTRlODNmYmY5MzliMmU5NjE3OGYxMjFkcC02MCwKKyAgICAtMHgxLmI5NTFmMTU3MmViYTVwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjgKKyAgICAweDEuZmZmZDA2ZDM1NTc5YzdmZTI5NWRhZDE3ZWZiYmJlOTdwLTEsCisgICAgMHgxLmI5NmU1Yjk2ZTViOTFwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjkKKyAgICAweDEuZmZmZDA2ZDM1NTc5YzdmZTI5NWRhZDE3ZWZiYmJlOTdwLTEsCisgICAgLTB4MS5iOTZlNWI5NmU1YjkxcC04CisgIH0sCisgIHsgLy8gRW50cnkgMzcwCisgICAgLTB4MS43YzQxMjhlMmFmZjRiMmI3OGUxNDc2MDFmYTY1OGFmNXAtMSwKKyAgICAweDEuYmEzYjE4Mzk1ZDE3YnA4CisgIH0sCisgIHsgLy8gRW50cnkgMzcxCisgICAgLTB4MS43YzQxMjhlMmFmZjRiMmI3OGUxNDc2MDFmYTY1OGFmNXAtMSwKKyAgICAtMHgxLmJhM2IxODM5NWQxN2JwOAorICB9LAorICB7IC8vIEVudHJ5IDM3MgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmYWZmOWRwLTEsCisgICAgMHgxLmJhYjYyZWQ2NTUwMTlwOTcwCisgIH0sCisgIHsgLy8gRW50cnkgMzczCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWZhZmY5ZHAtMSwKKyAgICAtMHgxLmJhYjYyZWQ2NTUwMTlwOTcwCisgIH0sCisgIHsgLy8gRW50cnkgMzc0CisgICAgMHgxLmZmZmZmZjNlNTM0NDY3ZmZmZmYzN2U1MDliN2I3OTJlcC0xLAorICAgIDB4MS5iZDU1YWE0MTFhYjQ2cC0xMworICB9LAorICB7IC8vIEVudHJ5IDM3NQorICAgIDB4MS5mZmZmZmYzZTUzNDQ2N2ZmZmZmMzdlNTA5YjdiNzkyZXAtMSwKKyAgICAtMHgxLmJkNTVhYTQxMWFiNDZwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMzc2CisgICAgLTB4MS43ZmRiMDdiOWY3N2UwN2ZmZmY3MjA3YzQ2MjhkM2Y2OHAtMSwKKyAgICAweDEuYmQ2MTZkNGZlOTVjZHAzNgorICB9LAorICB7IC8vIEVudHJ5IDM3NworICAgIC0weDEuN2ZkYjA3YjlmNzdlMDdmZmZmNzIwN2M0NjI4ZDNmNjhwLTEsCisgICAgLTB4MS5iZDYxNmQ0ZmU5NWNkcDM2CisgIH0sCisgIHsgLy8gRW50cnkgMzc4CisgICAgMHgxLmZmY2Y0ZGE3NjIyMmM4ODk3MTgyMzk1MjMzNDFmNGI1cC0xLAorICAgIDB4MS5iZWFwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzkKKyAgICAweDEuZmZjZjRkYTc2MjIyYzg4OTcxODIzOTUyMzM0MWY0YjVwLTEsCisgICAgLTB4MS5iZWFwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODAKKyAgICAtMHgxLmRkZWUxMzM1N2VjNmY3ZmNjOTUwMjM5OWZjY2RjMmYwcC0xLAorICAgIDB4MS5jMTE1MTZhZjU4NWE0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODEKKyAgICAtMHgxLmRkZWUxMzM1N2VjNmY3ZmNjOTUwMjM5OWZjY2RjMmYwcC0xLAorICAgIC0weDEuYzExNTE2YWY1ODVhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzgyCisgICAgMHgxLjU4Y2NjZWMwNTlkYTE3ZDNmNDQ4YThiMmI2ZTdjMGU4cC0xLAorICAgIDB4MS5jNzVlNTRkZTRjMDZlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODMKKyAgICAweDEuNThjY2NlYzA1OWRhMTdkM2Y0NDhhOGIyYjZlN2MwZThwLTEsCisgICAgLTB4MS5jNzVlNTRkZTRjMDZlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODQKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzg2NjNlcC0xLAorICAgIDB4MS5jYjQ0ZTg2YmMxOTJicDY0OAorICB9LAorICB7IC8vIEVudHJ5IDM4NQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjODY2M2VwLTEsCisgICAgLTB4MS5jYjQ0ZTg2YmMxOTJicDY0OAorICB9LAorICB7IC8vIEVudHJ5IDM4NgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjIxOThmOXAtMSwKKyAgICAweDEuY2I0NGU4NmJjMTkyYnA2NDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYyMTk4ZjlwLTEsCisgICAgLTB4MS5jYjQ0ZTg2YmMxOTJicDY0OQorICB9LAorICB7IC8vIEVudHJ5IDM4OAorICAgIC0weDEuY2EyODFkN2ZlNDRiMDdmZmZmZDJiN2Q0NmFiNWQzNjFwLTEsCisgICAgMHgxLmNkNWE2Zjg3NjJhZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDM4OQorICAgIC0weDEuY2EyODFkN2ZlNDRiMDdmZmZmZDJiN2Q0NmFiNWQzNjFwLTEsCisgICAgLTB4MS5jZDVhNmY4NzYyYWZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTAKKyAgICAweDEuZTgwYWQ0ZmU1NGM3MWQ0ZTYwNGVkZTQ3NGNjYTBiMTlwLTUsCisgICAgMHgxLmQwY2I5NWYwMmFkNzdwNDY0CisgIH0sCisgIHsgLy8gRW50cnkgMzkxCisgICAgMHgxLmU4MGFkNGZlNTRjNzFkNGU2MDRlZGU0NzRjY2EwYjE5cC01LAorICAgIC0weDEuZDBjYjk1ZjAyYWQ3N3A0NjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTIKKyAgICAweDEuMGRmOGViNDA5ZWZlMzdmZmZmZjkyNWI1ZGUyYzgwYjZwLTEsCisgICAgMHgxLmQzMWJkNjA0OTAzYTBwMgorICB9LAorICB7IC8vIEVudHJ5IDM5MworICAgIDB4MS4wZGY4ZWI0MDllZmUzN2ZmZmZmOTI1YjVkZTJjODBiNnAtMSwKKyAgICAtMHgxLmQzMWJkNjA0OTAzYTBwMgorICB9LAorICB7IC8vIEVudHJ5IDM5NAorICAgIDB4MS5mZjJhZTk2OGVmZTcwZWE0MTI2ODQ5YzM4MzJjOWNiZHAtMSwKKyAgICAweDEuZDMyZjQ2MTAxODBmNnAtNQorICB9LAorICB7IC8vIEVudHJ5IDM5NQorICAgIDB4MS5mZjJhZTk2OGVmZTcwZWE0MTI2ODQ5YzM4MzJjOWNiZHAtMSwKKyAgICAtMHgxLmQzMmY0NjEwMTgwZjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTYKKyAgICAtMHgxLmNlYzMwN2E2NzRkM2VkMmY4ZGY0N2NmMzk0YWE4OGVhcC0zLAorICAgIDB4MS5kOTZlMDU4cDQ4OAorICB9LAorICB7IC8vIEVudHJ5IDM5NworICAgIC0weDEuY2VjMzA3YTY3NGQzZWQyZjhkZjQ3Y2YzOTRhYTg4ZWFwLTMsCisgICAgLTB4MS5kOTZlMDU4cDQ4OAorICB9LAorICB7IC8vIEVudHJ5IDM5OAorICAgIC0weDEuYWM4ZGJmOWNkYzk1NDgzNTc3NTYwYjE4MTRlYTg4OTVwLTUsCisgICAgMHgxLmRiMDgwM2MzOTJiNGNwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTkKKyAgICAtMHgxLmFjOGRiZjljZGM5NTQ4MzU3NzU2MGIxODE0ZWE4ODk1cC01LAorICAgIC0weDEuZGIwODAzYzM5MmI0Y3AxNQorICB9LAorICB7IC8vIEVudHJ5IDQwMAorICAgIC0weDEuYWM5NDg3MGNhNjMxNjg0YmQxMGI2NThiODBjZmNkNDJwLTUsCisgICAgMHgxLmRiMDgwM2MzZmY1MWRwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDEKKyAgICAtMHgxLmFjOTQ4NzBjYTYzMTY4NGJkMTBiNjU4YjgwY2ZjZDQycC01LAorICAgIC0weDEuZGIwODAzYzNmZjUxZHAxNQorICB9LAorICB7IC8vIEVudHJ5IDQwMgorICAgIDB4MS5mZjIyOTA3M2ZkOGI1ZTkxZDYwZGQwOTVjZmRlNTk2N3AtMSwKKyAgICAweDEuZGM0cC01CisgIH0sCisgIHsgLy8gRW50cnkgNDAzCisgICAgMHgxLmZmMjI5MDczZmQ4YjVlOTFkNjBkZDA5NWNmZGU1OTY3cC0xLAorICAgIC0weDEuZGM0cC01CisgIH0sCisgIHsgLy8gRW50cnkgNDA0CisgICAgMHgxLmZmMjFlNWY5NzVmZmZlODNjMmFlMWM1NWE4ODVmMTJmcC0xLAorICAgIDB4MS5kY2Y3M2RjZjczZGNjcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDA1CisgICAgMHgxLmZmMjFlNWY5NzVmZmZlODNjMmFlMWM1NWE4ODVmMTJmcC0xLAorICAgIC0weDEuZGNmNzNkY2Y3M2RjY3AtNQorICB9LAorICB7IC8vIEVudHJ5IDQwNgorICAgIDB4MS4yZjAxMTMyNjQyMGU1MDAyMTcyZGIyNDVmZDkwNjNlMnAtMSwKKyAgICAweDEuZGZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwNworICAgIDB4MS4yZjAxMTMyNjQyMGU1MDAyMTcyZGIyNDVmZDkwNjNlMnAtMSwKKyAgICAtMHgxLmRmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDgKKyAgICAweDEuZjcyYzhlMTZkYmM3OGIyNmFmYmYzNDYxODVkY2NiNDhwLTEsCisgICAgMHgxLmUxMjM2OTFhN2M0YmVwMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDkKKyAgICAweDEuZjcyYzhlMTZkYmM3OGIyNmFmYmYzNDYxODVkY2NiNDhwLTEsCisgICAgLTB4MS5lMTIzNjkxYTdjNGJlcDI2CisgIH0sCisgIHsgLy8gRW50cnkgNDEwCisgICAgLTB4MS40YjBjNmJiNjIzZjU3ZmZmZmY1ZTQ1ODIwM2RlZWYzM3AtMiwKKyAgICAweDEuZTY2NjY2NmY5Y2Y0OXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDExCisgICAgLTB4MS40YjBjNmJiNjIzZjU3ZmZmZmY1ZTQ1ODIwM2RlZWYzM3AtMiwKKyAgICAtMHgxLmU2NjY2NjZmOWNmNDlwMAorICB9LAorICB7IC8vIEVudHJ5IDQxMgorICAgIDB4MS5mZDc0YjU1ODc1ODg0ODE4ODRhOTJlODM3NDdmNWM0ZXAtMSwKKyAgICAweDEuZTgzYWNjZmM1MGI3MHA5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTMKKyAgICAweDEuZmQ3NGI1NTg3NTg4NDgxODg0YTkyZTgzNzQ3ZjVjNGVwLTEsCisgICAgLTB4MS5lODNhY2NmYzUwYjcwcDk5NQorICB9LAorICB7IC8vIEVudHJ5IDQxNAorICAgIDB4MS5mZmYxNjliNmFiN2QxN2Y0M2Q1OWY2Y2YwODVhY2NiMHAtMSwKKyAgICAweDEuZThlcC03CisgIH0sCisgIHsgLy8gRW50cnkgNDE1CisgICAgMHgxLmZmZjE2OWI2YWI3ZDE3ZjQzZDU5ZjZjZjA4NWFjY2IwcC0xLAorICAgIC0weDEuZThlcC03CisgIH0sCisgIHsgLy8gRW50cnkgNDE2CisgICAgMHgxLjdkMzljOWYxYjBiM2MwMDI3YTVmYzlhNzZmYWVlODNkcC0xLAorICAgIDB4MS5lYWY1ZWE1MzE3NDQycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTcKKyAgICAweDEuN2QzOWM5ZjFiMGIzYzAwMjdhNWZjOWE3NmZhZWU4M2RwLTEsCisgICAgLTB4MS5lYWY1ZWE1MzE3NDQycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTgKKyAgICAweDEuN2YxM2FmNzA4MWE2NzQxNjYwNDY5ZmQ2MDI1NWZlNDlwLTEsCisgICAgMHgxLmViMGMyYjAwYjFiODNwNAorICB9LAorICB7IC8vIEVudHJ5IDQxOQorICAgIDB4MS43ZjEzYWY3MDgxYTY3NDE2NjA0NjlmZDYwMjU1ZmU0OXAtMSwKKyAgICAtMHgxLmViMGMyYjAwYjFiODNwNAorICB9LAorICB7IC8vIEVudHJ5IDQyMAorICAgIC0weDEuN2FkN2I4OGExZmUwZjgyYjZmMjQ5YzdjNTZkZDhiNWFwLTEsCisgICAgMHgxLmViYzZiNTU1MzExYzRwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjEKKyAgICAtMHgxLjdhZDdiODhhMWZlMGY4MmI2ZjI0OWM3YzU2ZGQ4YjVhcC0xLAorICAgIC0weDEuZWJjNmI1NTUzMTFjNHAxNQorICB9LAorICB7IC8vIEVudHJ5IDQyMgorICAgIDB4MS5iMDZiMmI1OGEyYTIzYzk4YjEyODUzNDE1YjVjODNhMXAtNSwKKyAgICAweDEuZWY3YmRlZjdiZGVmMnAyMzkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjMKKyAgICAweDEuYjA2YjJiNThhMmEyM2M5OGIxMjg1MzQxNWI1YzgzYTFwLTUsCisgICAgLTB4MS5lZjdiZGVmN2JkZWYycDIzOQorICB9LAorICB7IC8vIEVudHJ5IDQyNAorICAgIDB4MS5mZTZkZWQ1MzE3MmE2ODc2NzkwZDNhYWI4M2E2NTZmNHAtMSwKKyAgICAweDEuZWZiYmVlZmJiZWVmOHAxNQorICB9LAorICB7IC8vIEVudHJ5IDQyNQorICAgIDB4MS5mZTZkZWQ1MzE3MmE2ODc2NzkwZDNhYWI4M2E2NTZmNHAtMSwKKyAgICAtMHgxLmVmYmJlZWZiYmVlZjhwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjYKKyAgICAtMHgxLmZlMmJjYjg3YTdlMTU4Y2ZmYTJmZThkMzA2Y2M3NTU1cC0xLAorICAgIDB4MS5mMDdjMWYwN2MxZWY3cDIzOQorICB9LAorICB7IC8vIEVudHJ5IDQyNworICAgIC0weDEuZmUyYmNiODdhN2UxNThjZmZhMmZlOGQzMDZjYzc1NTVwLTEsCisgICAgLTB4MS5mMDdjMWYwN2MxZWY3cDIzOQorICB9LAorICB7IC8vIEVudHJ5IDQyOAorICAgIC0weDEuNzlkMDhkNmIzYTg4MjgyZTBhMGRhMjM1MDQ2NGQwYWJwLTEsCisgICAgMHgxLmYwZjJiNWUwNjBiMjlwMQorICB9LAorICB7IC8vIEVudHJ5IDQyOQorICAgIC0weDEuNzlkMDhkNmIzYTg4MjgyZTBhMGRhMjM1MDQ2NGQwYWJwLTEsCisgICAgLTB4MS5mMGYyYjVlMDYwYjI5cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzAKKyAgICAweDEuZjBkMTFkMzIxMTc4ZDdmZjE1ZGE0ODk5MGQ1OTgzYzJwLTEsCisgICAgMHgxLmY0MHAtMworICB9LAorICB7IC8vIEVudHJ5IDQzMQorICAgIDB4MS5mMGQxMWQzMjExNzhkN2ZmMTVkYTQ4OTkwZDU5ODNjMnAtMSwKKyAgICAtMHgxLmY0MHAtMworICB9LAorICB7IC8vIEVudHJ5IDQzMgorICAgIDB4MS5lM2ZmNWIxNWY3MjNkN2Y3ZjdmNWJiMGRiY2U1NGQwMXAtNCwKKyAgICAweDEuZjQzZDQ5Zjk0N2U4N3A5CisgIH0sCisgIHsgLy8gRW50cnkgNDMzCisgICAgMHgxLmUzZmY1YjE1ZjcyM2Q3ZjdmN2Y1YmIwZGJjZTU0ZDAxcC00LAorICAgIC0weDEuZjQzZDQ5Zjk0N2U4N3A5CisgIH0sCisgIHsgLy8gRW50cnkgNDM0CisgICAgLTB4MS42NjM2YzlmNmE4N2E5N2YxY2JkZjcwOGEyZjFhZDliYXAtMSwKKyAgICAweDEuZjdmZmZmZmZmZmZmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgNDM1CisgICAgLTB4MS42NjM2YzlmNmE4N2E5N2YxY2JkZjcwOGEyZjFhZDliYXAtMSwKKyAgICAtMHgxLmY3ZmZmZmZmZmZmZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDQzNgorICAgIDB4MS5mZmMxYmUzMzA5Mjg1N2ZmMjYyMjBmOTk4MTYzNWJjN3AtMSwKKyAgICAweDEuZjhmZmZmZmZmZmZmZnAtNgorICB9LAorICB7IC8vIEVudHJ5IDQzNworICAgIDB4MS5mZmMxYmUzMzA5Mjg1N2ZmMjYyMjBmOTk4MTYzNWJjN3AtMSwKKyAgICAtMHgxLmY4ZmZmZmZmZmZmZmZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzgKKyAgICAweDEuZmZjMWJlMzMwOTI4NTdmYjM0NGFmZmRkOTNkMDQzYTdwLTEsCisgICAgMHgxLmY5MHAtNgorICB9LAorICB7IC8vIEVudHJ5IDQzOQorICAgIDB4MS5mZmMxYmUzMzA5Mjg1N2ZiMzQ0YWZmZGQ5M2QwNDNhN3AtMSwKKyAgICAtMHgxLmY5MHAtNgorICB9LAorICB7IC8vIEVudHJ5IDQ0MAorICAgIC0weDEuZmZmZmZmZmNhYjBkNTgyMjA2NjlkY2ZhNDIxY2NmYTZwLTEsCisgICAgMHgxLmZhMDIzNjUyM2NlNTRwMzQ0CisgIH0sCisgIHsgLy8gRW50cnkgNDQxCisgICAgLTB4MS5mZmZmZmZmY2FiMGQ1ODIyMDY2OWRjZmE0MjFjY2ZhNnAtMSwKKyAgICAtMHgxLmZhMDIzNjUyM2NlNTRwMzQ0CisgIH0sCisgIHsgLy8gRW50cnkgNDQyCisgICAgMHgxLmZjMGQ5OGFjZTIzMDg4MDAwMDAyMTI3ODhhNzk0ZWFjcC0xLAorICAgIDB4MS5mY2VhYjU0ZDM3ZGEwcC00CisgIH0sCisgIHsgLy8gRW50cnkgNDQzCisgICAgMHgxLmZjMGQ5OGFjZTIzMDg4MDAwMDAyMTI3ODhhNzk0ZWFjcC0xLAorICAgIC0weDEuZmNlYWI1NGQzN2RhMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDQ0NAorICAgIC0weDEuOTU4OWJjYTEyOGI5MTdmZTU5NjkyYTczOGMzNzkxYzlwLTQsCisgICAgMHgxLmZkMDA3MmZmZmZmZmZwMgorICB9LAorICB7IC8vIEVudHJ5IDQ0NQorICAgIC0weDEuOTU4OWJjYTEyOGI5MTdmZTU5NjkyYTczOGMzNzkxYzlwLTQsCisgICAgLTB4MS5mZDAwNzJmZmZmZmZmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDYKKyAgICAtMHgxLjRkMzA0YjA3ZmM4OTdjZjFhZGU1NGZlOTdkYjdjOGJkcC0yLAorICAgIDB4MS5mZTBmODI3NjczNDIycDYyCisgIH0sCisgIHsgLy8gRW50cnkgNDQ3CisgICAgLTB4MS40ZDMwNGIwN2ZjODk3Y2YxYWRlNTRmZTk3ZGI3YzhiZHAtMiwKKyAgICAtMHgxLmZlMGY4Mjc2NzM0MjJwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDgKKyAgICAweDEuYzFhMjdhZTgzNmYxMjgwMDAwMDAwMDAwMDA1MDRlOWJwLTEsCisgICAgMHgxLmZlYjFmNzkyMGUyNDhwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDkKKyAgICAweDEuYzFhMjdhZTgzNmYxMjgwMDAwMDAwMDAwMDA1MDRlOWJwLTEsCisgICAgLTB4MS5mZWIxZjc5MjBlMjQ4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDUwCisgICAgLTB4MS45MzZiNjRlOTU1OTc4ZDE1YWFjZmRkZjU4MjFjNjI4MXAtMSwKKyAgICAweDEuZmVlZmZmZmZmZmZjNnA5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTEKKyAgICAtMHgxLjkzNmI2NGU5NTU5NzhkMTVhYWNmZGRmNTgyMWM2MjgxcC0xLAorICAgIC0weDEuZmVlZmZmZmZmZmZjNnA5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTIKKyAgICAweDEuZmZmMDA3MTQ3ZWE1NzdmYjAyMTMwYzY4YjMzNWVmNDVwLTEsCisgICAgMHgxLmZmOGZmZmZmZmZmZmZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTMKKyAgICAweDEuZmZmMDA3MTQ3ZWE1NzdmYjAyMTMwYzY4YjMzNWVmNDVwLTEsCisgICAgLTB4MS5mZjhmZmZmZmZmZmZmcC03CisgIH0sCisgIHsgLy8gRW50cnkgNDU0CisgICAgMHgxLmZmZmZjMDFiZmU0NDJiMDljYmVjMTlmNjhhZjhmYmY4cC0xLAorICAgIDB4MS5mZjhmZmZmZmZmZmZmcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDQ1NQorICAgIDB4MS5mZmZmYzAxYmZlNDQyYjA5Y2JlYzE5ZjY4YWY4ZmJmOHAtMSwKKyAgICAtMHgxLmZmOGZmZmZmZmZmZmZwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNDU2CisgICAgMHgxLjdjYzlmYjc1MzE3YWU5M2JmNWRkZWUwZThiOWM4M2NlcC0xLAorICAgIDB4MS5mZjhmZmZmZmZmZmZmcDg3MAorICB9LAorICB7IC8vIEVudHJ5IDQ1NworICAgIDB4MS43Y2M5ZmI3NTMxN2FlOTNiZjVkZGVlMGU4YjljODNjZXAtMSwKKyAgICAtMHgxLmZmOGZmZmZmZmZmZmZwODcwCisgIH0sCisgIHsgLy8gRW50cnkgNDU4CisgICAgMHgxLmQ2YWVhNDgwMTU1ODhlNzE5ODMxNDI4MDQyMjdmZDg0cC0xLAorICAgIDB4MS5mZmNmZmY4cDE5CisgIH0sCisgIHsgLy8gRW50cnkgNDU5CisgICAgMHgxLmQ2YWVhNDgwMTU1ODhlNzE5ODMxNDI4MDQyMjdmZDg0cC0xLAorICAgIC0weDEuZmZjZmZmOHAxOQorICB9LAorICB7IC8vIEVudHJ5IDQ2MAorICAgIC0weDEuNmE5OTcyZWVlMTliYWRmOWUzNGQzNmIwZDEyMDIwOTFwLTIsCisgICAgMHgxLmZmY2ZmZjhwMzY1CisgIH0sCisgIHsgLy8gRW50cnkgNDYxCisgICAgLTB4MS42YTk5NzJlZWUxOWJhZGY5ZTM0ZDM2YjBkMTIwMjA5MXAtMiwKKyAgICAtMHgxLmZmY2ZmZjhwMzY1CisgIH0sCisgIHsgLy8gRW50cnkgNDYyCisgICAgLTB4MS4zYWFhMTVmNzU0NGI2OTFhNDNlMWZhMWE2MzliZGZjMnAtMSwKKyAgICAweDEuZmZjZmZmZmZmZmY2Y3A3MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjMKKyAgICAtMHgxLjNhYWExNWY3NTQ0YjY5MWE0M2UxZmExYTYzOWJkZmMycC0xLAorICAgIC0weDEuZmZjZmZmZmZmZmY2Y3A3MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjQKKyAgICAweDEuM2YxNjRiY2UwNTVjNGM2MWI3NGE2MWY3M2NhNzNkM2ZwLTEsCisgICAgMHgxLmZmY2ZmZmZmZmZmZjlwMzIwCisgIH0sCisgIHsgLy8gRW50cnkgNDY1CisgICAgMHgxLjNmMTY0YmNlMDU1YzRjNjFiNzRhNjFmNzNjYTczZDNmcC0xLAorICAgIC0weDEuZmZjZmZmZmZmZmZmOXAzMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjYKKyAgICAweDEuZmZmZmYwMDJmZmYxNGQ1NjZhZThlYzlkMWVkYzNlM2ZwLTEsCisgICAgMHgxLmZmY2ZmZmZmZmZmZmZwLTExCisgIH0sCisgIHsgLy8gRW50cnkgNDY3CisgICAgMHgxLmZmZmZmMDAyZmZmMTRkNTY2YWU4ZWM5ZDFlZGMzZTNmcC0xLAorICAgIC0weDEuZmZjZmZmZmZmZmZmZnAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjgKKyAgICAtMHgxLmZmZmZmZjk4N2Y5ODVkNjc5NDRiODY3YmZmNGFiODU3cC0xLAorICAgIDB4MS5mZmNmZmZmZmZmZmZmcDQwNQorICB9LAorICB7IC8vIEVudHJ5IDQ2OQorICAgIC0weDEuZmZmZmZmOTg3Zjk4NWQ2Nzk0NGI4NjdiZmY0YWI4NTdwLTEsCisgICAgLTB4MS5mZmNmZmZmZmZmZmZmcDQwNQorICB9LAorICB7IC8vIEVudHJ5IDQ3MAorICAgIC0weDEuZmZmZjYyMzVhMjVlZGI4Yzk3NWI0ODVjNWM2ZjQxZjdwLTEsCisgICAgMHgxLmZmY2ZmZmZmZmZmZmZwNTY3CisgIH0sCisgIHsgLy8gRW50cnkgNDcxCisgICAgLTB4MS5mZmZmNjIzNWEyNWVkYjhjOTc1YjQ4NWM1YzZmNDFmN3AtMSwKKyAgICAtMHgxLmZmY2ZmZmZmZmZmZmZwNTY3CisgIH0sCisgIHsgLy8gRW50cnkgNDcyCisgICAgMHgxLmZkZjExYWU0NjA4YjA4OTRiYWI4Nzg2OTQ5YWE2MzMzcC0zLAorICAgIDB4MS5mZmVmZmY4ZmZmZmZmcDE2CisgIH0sCisgIHsgLy8gRW50cnkgNDczCisgICAgMHgxLmZkZjExYWU0NjA4YjA4OTRiYWI4Nzg2OTQ5YWE2MzMzcC0zLAorICAgIC0weDEuZmZlZmZmOGZmZmZmZnAxNgorICB9LAorICB7IC8vIEVudHJ5IDQ3NAorICAgIDB4MS44ZjU1MjVhYjQ1ODNjMDY0MzUzYWFhZDEyYzZjY2U2Y3AtMSwKKyAgICAweDEuZmZlZmZmZmZmZmZjY3A5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzUKKyAgICAweDEuOGY1NTI1YWI0NTgzYzA2NDM1M2FhYWQxMmM2Y2NlNmNwLTEsCisgICAgLTB4MS5mZmVmZmZmZmZmZmNjcDk5NQorICB9LAorICB7IC8vIEVudHJ5IDQ3NgorICAgIDB4MS5hMGFmNDRhNDVjMDU2OWI3MjA1OGNjMzRlZmQwZTMyZXAtOCwKKyAgICAweDEuZmZlZmZmZmZmZmZmZnA3NworICB9LAorICB7IC8vIEVudHJ5IDQ3NworICAgIDB4MS5hMGFmNDRhNDVjMDU2OWI3MjA1OGNjMzRlZmQwZTMyZXAtOCwKKyAgICAtMHgxLmZmZWZmZmZmZmZmZmZwNzcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzgKKyAgICAtMHgxLmRmNzU0NmMzMWJmOGNmZmVmNjljNDg1OWRhMDU1ZjMzcC0xLAorICAgIDB4MS5mZmVmZmZmZmZmZmZmcDEyMgorICB9LAorICB7IC8vIEVudHJ5IDQ3OQorICAgIC0weDEuZGY3NTQ2YzMxYmY4Y2ZmZWY2OWM0ODU5ZGEwNTVmMzNwLTEsCisgICAgLTB4MS5mZmVmZmZmZmZmZmZmcDEyMgorICB9LAorICB7IC8vIEVudHJ5IDQ4MAorICAgIC0weDEuODI1YTdiZWEyN2Q1YjFhNTk4YWY2YjY4NGViMTg0NzhwLTEsCisgICAgMHgxLmZmZWZmZmZmZmZmZmZwMTc5CisgIH0sCisgIHsgLy8gRW50cnkgNDgxCisgICAgLTB4MS44MjVhN2JlYTI3ZDViMWE1OThhZjZiNjg0ZWIxODQ3OHAtMSwKKyAgICAtMHgxLmZmZWZmZmZmZmZmZmZwMTc5CisgIH0sCisgIHsgLy8gRW50cnkgNDgyCisgICAgLTB4MS4xYmUyYWIyMDc4ZDU0N2ZmZjA5OTMyMDExZmUxNjQ1NnAtMSwKKyAgICAweDEuZmZlZmZmZmZmZmZmZnAyMzgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODMKKyAgICAtMHgxLjFiZTJhYjIwNzhkNTQ3ZmZmMDk5MzIwMTFmZTE2NDU2cC0xLAorICAgIC0weDEuZmZlZmZmZmZmZmZmZnAyMzgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODQKKyAgICAtMHgxLmE0Y2M1ZjgzOGY1Mjk3ZTBhN2U3NDljYjA4N2MyZjE0cC03LAorICAgIDB4MS5mZmYwMDAwMDAyNTExcDQ5MgorICB9LAorICB7IC8vIEVudHJ5IDQ4NQorICAgIC0weDEuYTRjYzVmODM4ZjUyOTdlMGE3ZTc0OWNiMDg3YzJmMTRwLTcsCisgICAgLTB4MS5mZmYwMDAwMDAyNTExcDQ5MgorICB9LAorICB7IC8vIEVudHJ5IDQ4NgorICAgIDB4MS5mMTY0MzdkNjExOWY4OWJmYTczYTJmMTRmMzc3ZmQzZXAtMTAsCisgICAgMHgxLmZmZjFmZmZmZmZmZmZwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODcKKyAgICAweDEuZjE2NDM3ZDYxMTlmODliZmE3M2EyZjE0ZjM3N2ZkM2VwLTEwLAorICAgIC0weDEuZmZmMWZmZmZmZmZmZnA0MQorICB9LAorICB7IC8vIEVudHJ5IDQ4OAorICAgIDB4MS44OTgzMjRjMmYxY2ZjNTk2ZTU5MGI0YTgwZDI1MDhmYnAtMTEsCisgICAgMHgxLmZmZmZjN2ZmZmZmZmZwNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODkKKyAgICAweDEuODk4MzI0YzJmMWNmYzU5NmU1OTBiNGE4MGQyNTA4ZmJwLTExLAorICAgIC0weDEuZmZmZmM3ZmZmZmZmZnA0NQorICB9LAorICB7IC8vIEVudHJ5IDQ5MAorICAgIDB4MS5mMDE1NGMwMDY4OGY4N2ZjYzk2ZjE0YzhlZmI1OTE0ZnAtMSwKKyAgICAweDEuZmZmZmRmMWZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDQ5MQorICAgIDB4MS5mMDE1NGMwMDY4OGY4N2ZjYzk2ZjE0YzhlZmI1OTE0ZnAtMSwKKyAgICAtMHgxLmZmZmZkZjFmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTIKKyAgICAweDEuZmZjMDAxNTcxMjZhN2Q5ODIxNjQ5MWRmNzNkOTdjZDNwLTEsCisgICAgMHgxLmZmZmZmOGZmZmZmZmZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTMKKyAgICAweDEuZmZjMDAxNTcxMjZhN2Q5ODIxNjQ5MWRmNzNkOTdjZDNwLTEsCisgICAgLTB4MS5mZmZmZjhmZmZmZmZmcC02CisgIH0sCisgIHsgLy8gRW50cnkgNDk0CisgICAgLTB4MS5lMGQ5ZjBmMzhjNzNmMDA2OTczOWU5ZGU2NTE5MTQxNnAtMiwKKyAgICAweDEuZmZmZmZiZmZmZmZmZnA5NjgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTUKKyAgICAtMHgxLmUwZDlmMGYzOGM3M2YwMDY5NzM5ZTlkZTY1MTkxNDE2cC0yLAorICAgIC0weDEuZmZmZmZiZmZmZmZmZnA5NjgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTYKKyAgICAweDEuZmZmNDY5OWRkNTYwYjVkYmI4OGEwMjkzMzdiOWFiODZwLTEsCisgICAgMHgxLmZmZmZmY2ZmZmZmZmZwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTcKKyAgICAweDEuZmZmNDY5OWRkNTYwYjVkYmI4OGEwMjkzMzdiOWFiODZwLTEsCisgICAgLTB4MS5mZmZmZmNmZmZmZmZmcDQwCisgIH0sCisgIHsgLy8gRW50cnkgNDk4CisgICAgMHgxLmZmMDAxNTU1OWYyMjg4MDI0MzM3MzJhZTExOTQyOTQ1cC0xLAorICAgIDB4MS5mZmZmZmYwMDAwMDQwcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDk5CisgICAgMHgxLmZmMDAxNTU1OWYyMjg4MDI0MzM3MzJhZTExOTQyOTQ1cC0xLAorICAgIC0weDEuZmZmZmZmMDAwMDA0MHAtNQorICB9LAorICB7IC8vIEVudHJ5IDUwMAorICAgIC0weDEuOWM2OTUxY2NjZDM5YmY2MGQ0N2RiODBiZTZmY2UzNGZwLTIsCisgICAgMHgxLmZmZmZmZjhwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgNTAxCisgICAgLTB4MS45YzY5NTFjY2NkMzliZjYwZDQ3ZGI4MGJlNmZjZTM0ZnAtMiwKKyAgICAtMHgxLmZmZmZmZjhwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgNTAyCisgICAgLTB4MS5mMmMyMjYzNTkwMDM0ZWM2MjUyMmQ0NWQyZWVjYTI4NXAtMSwKKyAgICAweDEuZmZmZmZmOHAxOTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDMKKyAgICAtMHgxLmYyYzIyNjM1OTAwMzRlYzYyNTIyZDQ1ZDJlZWNhMjg1cC0xLAorICAgIC0weDEuZmZmZmZmOHAxOTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDQKKyAgICAweDEuYzc4ODRkNmNmYjU1MTFhNmI1MTExMDc3ZmQwYjFiNzJwLTEsCisgICAgMHgxLmZmZmZmZjhwNTQzCisgIH0sCisgIHsgLy8gRW50cnkgNTA1CisgICAgMHgxLmM3ODg0ZDZjZmI1NTExYTZiNTExMTA3N2ZkMGIxYjcycC0xLAorICAgIC0weDEuZmZmZmZmOHA1NDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDYKKyAgICAweDEuZTY2Yzc5ZTc3NmExZWZmNmI2OGYyZDAxMjg5ZTA4ZThwLTIsCisgICAgMHgxLmZmZmZmZmMzZmZmZmZwNTAwCisgIH0sCisgIHsgLy8gRW50cnkgNTA3CisgICAgMHgxLmU2NmM3OWU3NzZhMWVmZjZiNjhmMmQwMTI4OWUwOGU4cC0yLAorICAgIC0weDEuZmZmZmZmYzNmZmZmZnA1MDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDgKKyAgICAweDEuYzdjOWE5YzU3YzBiMjAwOWYxOGE2YzJjMDdiNTJlYTJwLTMsCisgICAgMHgxLmZmZmZmZmUxZmZmZmZwNzAwCisgIH0sCisgIHsgLy8gRW50cnkgNTA5CisgICAgMHgxLmM3YzlhOWM1N2MwYjIwMDlmMThhNmMyYzA3YjUyZWEycC0zLAorICAgIC0weDEuZmZmZmZmZTFmZmZmZnA3MDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTAKKyAgICAweDEuN2JiMjhkYWY1ZjlhZDM2MDhkZGE4YTE2ZWEyMzVjYjRwLTEsCisgICAgMHgxLmZmZmZmZmZmMGYwZmZwNDAwCisgIH0sCisgIHsgLy8gRW50cnkgNTExCisgICAgMHgxLjdiYjI4ZGFmNWY5YWQzNjA4ZGRhOGExNmVhMjM1Y2I0cC0xLAorICAgIC0weDEuZmZmZmZmZmYwZjBmZnA0MDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTIKKyAgICAweDEuZmMwMTU1MjdkOGJiMzc4MDZlNDk3NmRjZjdhN2M5OGNwLTEsCisgICAgMHgxLmZmZmZmZmZmM2ZmZmZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTMKKyAgICAweDEuZmMwMTU1MjdkOGJiMzc4MDZlNDk3NmRjZjdhN2M5OGNwLTEsCisgICAgLTB4MS5mZmZmZmZmZjNmZmZmcC00CisgIH0sCisgIHsgLy8gRW50cnkgNTE0CisgICAgLTB4MS5lYTUyNTdlYjY2ZTNiZmZlZTkwMGNkNDQ0NzQwNGMxNnAtMSwKKyAgICAweDEuZmZmZmZmZmY4ZmZmZnAzCisgIH0sCisgIHsgLy8gRW50cnkgNTE1CisgICAgLTB4MS5lYTUyNTdlYjY2ZTNiZmZlZTkwMGNkNDQ0NzQwNGMxNnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmOGZmZmZwMworICB9LAorICB7IC8vIEVudHJ5IDUxNgorICAgIC0weDEuNGVhYTYwNmRiZWY5NjgwMDAyNjdiMDM3NWRlZDY4NzJwLTEsCisgICAgMHgxLmZmZmZmZmZmZmJjZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDUxNworICAgIC0weDEuNGVhYTYwNmRiZWY5NjgwMDAyNjdiMDM3NWRlZDY4NzJwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZiY2ZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTgKKyAgICAtMHgxLmZjOWNkNmI1ZjAwOTQ4MmIwZDU1ODJlMWM2Y2RmNzM4cC0xLAorICAgIDB4MS5mZmZmZmZmZmZlMGI1cDcyMAorICB9LAorICB7IC8vIEVudHJ5IDUxOQorICAgIC0weDEuZmM5Y2Q2YjVmMDA5NDgyYjBkNTU4MmUxYzZjZGY3MzhwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZlMGI1cDcyMAorICB9LAorICB7IC8vIEVudHJ5IDUyMAorICAgIDB4MS5lOTZhYzA0NWRkMTM4ZDI1NzQxY2I4NzliOTJhZmE0OHAtMywKKyAgICAweDEuZmZmZmZmZmZmZTdmZnA0MQorICB9LAorICB7IC8vIEVudHJ5IDUyMQorICAgIDB4MS5lOTZhYzA0NWRkMTM4ZDI1NzQxY2I4NzliOTJhZmE0OHAtMywKKyAgICAtMHgxLmZmZmZmZmZmZmU3ZmZwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjIKKyAgICAtMHgxLmZjYWYzOWNmYjk0ZDQ4MTk1ZDJiMjYwNjBiMzBmODIycC0xLAorICAgIDB4MS5mZmZmZmZmZmZlZTA5cDcyMAorICB9LAorICB7IC8vIEVudHJ5IDUyMworICAgIC0weDEuZmNhZjM5Y2ZiOTRkNDgxOTVkMmIyNjA2MGIzMGY4MjJwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZlZTA5cDcyMAorICB9LAorICB7IC8vIEVudHJ5IDUyNAorICAgIDB4MS44NDMyMjMyYTZkMWRhYTZhYzhhOTRjMDAyMWU2MGQ1MHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmRmZnA0MAorICB9LAorICB7IC8vIEVudHJ5IDUyNQorICAgIDB4MS44NDMyMjMyYTZkMWRhYTZhYzhhOTRjMDAyMWU2MGQ1MHAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZkZmZwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjYKKyAgICAweDEuOWUzNzUxNDMxMzlkOWEzN2IzNTRlYTMzZGQ2MjVjZDZwLTYsCisgICAgMHgxLmZmZmZmZmZmZmZlZmZwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjcKKyAgICAweDEuOWUzNzUxNDMxMzlkOWEzN2IzNTRlYTMzZGQ2MjVjZDZwLTYsCisgICAgLTB4MS5mZmZmZmZmZmZmZWZmcDQxCisgIH0sCisgIHsgLy8gRW50cnkgNTI4CisgICAgMHgxLmZmZmMwMDAxNTU1NTI4MDAwMDQ5YjEwYzI2YTFmNTM5cC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZjRhcC04CisgIH0sCisgIHsgLy8gRW50cnkgNTI5CisgICAgMHgxLmZmZmMwMDAxNTU1NTI4MDAwMDQ5YjEwYzI2YTFmNTM5cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmY0YXAtOAorICB9LAorICB7IC8vIEVudHJ5IDUzMAorICAgIDB4MS40NjNhODk1YzRlYTVjZTRlNTZlOGY1NzgzODhlZWQzYXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmY3OHA5MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzEKKyAgICAweDEuNDYzYTg5NWM0ZWE1Y2U0ZTU2ZThmNTc4Mzg4ZWVkM2FwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZjc4cDkyMAorICB9LAorICB7IC8vIEVudHJ5IDUzMgorICAgIDB4MS4zYzFhNDg2MzVjZjM4MGM4MTU4ZDkzNGM0ZDBkZDg3Y3AtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZkNXA5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzMKKyAgICAweDEuM2MxYTQ4NjM1Y2YzODBjODE1OGQ5MzRjNGQwZGQ4N2NwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmQ1cDk5NQorICB9LAorICB7IC8vIEVudHJ5IDUzNAorICAgIDB4MS45MWM0ZTA3MDhiZDQ4NjIxN2Y1ZmMyMzBmMDQxNjIyMHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZlOHA3MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzUKKyAgICAweDEuOTFjNGUwNzA4YmQ0ODYyMTdmNWZjMjMwZjA0MTYyMjBwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmU4cDcyMAorICB9LAorICB7IC8vIEVudHJ5IDUzNgorICAgIC0weDEuM2UxNWNiODQ5YjVlYTg3YmNjNTgzZjYzNDRjYmNjNDBwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZWJwOTIwCisgIH0sCisgIHsgLy8gRW50cnkgNTM3CisgICAgLTB4MS4zZTE1Y2I4NDliNWVhODdiY2M1ODNmNjM0NGNiY2M0MHAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZWJwOTIwCisgIH0sCisgIHsgLy8gRW50cnkgNTM4CisgICAgLTB4MS44MTY4MDgzNDliODBkZDNjMjJjYmU4MGI0YzE3MWQxZnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmMXAyNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzkKKyAgICAtMHgxLjgxNjgwODM0OWI4MGRkM2MyMmNiZTgwYjRjMTcxZDFmcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmMXAyNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDAKKyAgICAweDEuNDY5OWM4MTRjNWYwNzViYjBlZDk0NzJkZmVjYzUwYTlwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZjRwODQ1CisgIH0sCisgIHsgLy8gRW50cnkgNTQxCisgICAgMHgxLjQ2OTljODE0YzVmMDc1YmIwZWQ5NDcyZGZlY2M1MGE5cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmNHA4NDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDIKKyAgICAtMHgxLjgxNWU5MmI3YTJhMDE5ZTc0NjUwYTg1OTk2OGUwZjI5cC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmY0cDEwMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDMKKyAgICAtMHgxLjgxNWU5MmI3YTJhMDE5ZTc0NjUwYTg1OTk2OGUwZjI5cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmNHAxMDIwCisgIH0sCisgIHsgLy8gRW50cnkgNTQ0CisgICAgLTB4MS4zZThkMDI4MTUzMjAxZWQyNzJmYzk1NDk3MjVmY2IzZnAtMTAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmNwNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDUKKyAgICAtMHgxLjNlOGQwMjgxNTMyMDFlZDI3MmZjOTU0OTcyNWZjYjNmcC0xMCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmNwNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDYKKyAgICAweDEuN2Q2NzY1NzE0Yzc4NTMyZDNlYjBmMmE3M2M1ZDYxMjZwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwMTA1CisgIH0sCisgIHsgLy8gRW50cnkgNTQ3CisgICAgMHgxLjdkNjc2NTcxNGM3ODUzMmQzZWIwZjJhNzNjNWQ2MTI2cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXAxMDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDgKKyAgICAtMHgxLmY4NjlmYjE0ZDI1NjhkNjdjMzdjOTBiMGEwMzhiMjQwcC0zLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcDQ4MAorICB9LAorICB7IC8vIEVudHJ5IDU0OQorICAgIC0weDEuZjg2OWZiMTRkMjU2OGQ2N2MzN2M5MGIwYTAzOGIyNDBwLTMsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcDQ4MAorICB9LAorICB7IC8vIEVudHJ5IDU1MAorICAgIC0weDEuODBhNzViMzY5ZDNjM2ZkMTViNjA2MGM2ZmI5OGYyZDZwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwOTcwCisgIH0sCisgIHsgLy8gRW50cnkgNTUxCisgICAgLTB4MS44MGE3NWIzNjlkM2MzZmQxNWI2MDYwYzZmYjk4ZjJkNnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVwOTcwCisgIH0sCisgIHsgLy8gRW50cnkgNTUyCisgICAgLTB4MS45ZGJhNjllODUzYmQ3N2ZkODgzYmUzYmIxMTcxZGY1NXAtNCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXA0MgorICB9LAorICB7IC8vIEVudHJ5IDU1MworICAgIC0weDEuOWRiYTY5ZTg1M2JkNzdmZDg4M2JlM2JiMTE3MWRmNTVwLTQsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDQyCisgIH0sCisgIHsgLy8gRW50cnkgNTU0CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDU1NQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDU1NgorICAgIDB4MS5wMCwKKyAgICAtMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNTU3CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNTU4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDU1OQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjAKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNTYyCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNTYzCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDU2NAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDU2NQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDU2NgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjgKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNTY5CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNTcwCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDU3MQorICAgIDB4MS5mZmZmZmY1YzI4ZjVjYjRjNTI3MjA2MTI4MTIxMTEyMHAtMSwKKyAgICAweDEuOTk5OTk5OTk5OTk5YXAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzIKKyAgICAweDEuZmZmZmZmNWMyOGY1Y2I0YzUyNzIwNjEyODEyMTExMjBwLTEsCisgICAgLTB4MS45OTk5OTk5OTk5OTlhcC0xMworICB9LAorICB7IC8vIEVudHJ5IDU3MworICAgIDB4MS5mZmZmZmQ3MGEzZDc5NjBjZDU2OTVhMDZmZGI4MGU3NHAtMSwKKyAgICAweDEuOTk5OTk5OTk5OTk5YXAtMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzQKKyAgICAweDEuZmZmZmZkNzBhM2Q3OTYwY2Q1Njk1YTA2ZmRiODBlNzRwLTEsCisgICAgLTB4MS45OTk5OTk5OTk5OTlhcC0xMgorICB9LAorICB7IC8vIEVudHJ5IDU3NQorICAgIDB4MS5mZmZmZmEzZDcwYTY5YWQ0MmIzOWQ4Njk2NjMyZjg1NnAtMSwKKyAgICAweDEuMzMzMzMzMzMzMzMzNHAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzYKKyAgICAweDEuZmZmZmZhM2Q3MGE2OWFkNDJiMzlkODY5NjYzMmY4NTZwLTEsCisgICAgLTB4MS4zMzMzMzMzMzMzMzM0cC0xMQorICB9LAorICB7IC8vIEVudHJ5IDU3NworICAgIDB4MS5mZmZmZjVjMjhmNjRlNWVjMGRhMGE0ZjdmNDM4ODA1MnAtMSwKKyAgICAweDEuOTk5OTk5OTk5OTk5YXAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzgKKyAgICAweDEuZmZmZmY1YzI4ZjY0ZTVlYzBkYTBhNGY3ZjQzODgwNTJwLTEsCisgICAgLTB4MS45OTk5OTk5OTk5OTlhcC0xMQorICB9LAorICB7IC8vIEVudHJ5IDU3OQorICAgIDB4MS5mZmZmZjAwMDAwMTU1NTU1NDlmNDlmNGQzNGQzNGNhMHAtMSwKKyAgICAweDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODAKKyAgICAweDEuZmZmZmYwMDAwMDE1NTU1NTQ5ZjQ5ZjRkMzRkMzRjYTBwLTEsCisgICAgLTB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDU4MQorICAgIDB4MS5mZmZmZThmNWMyYmI5OGM3YzEwM2QyZmY3OWYxNWQ2YXAtMSwKKyAgICAweDEuMzMzMzMzMzMzMzMzM3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODIKKyAgICAweDEuZmZmZmU4ZjVjMmJiOThjN2MxMDNkMmZmNzlmMTVkNmFwLTEsCisgICAgLTB4MS4zMzMzMzMzMzMzMzMzcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDU4MworICAgIDB4MS5mZmZmZTBhM2Q3NWMzMWIyNjQ1MTE2NmQ2ZjM5OGFiZHAtMSwKKyAgICAweDEuNjY2NjY2NjY2NjY2NnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODQKKyAgICAweDEuZmZmZmUwYTNkNzVjMzFiMjY0NTExNjZkNmYzOThhYmRwLTEsCisgICAgLTB4MS42NjY2NjY2NjY2NjY2cC0xMAorICB9LAorICB7IC8vIEVudHJ5IDU4NQorICAgIDB4MS5mZmZmZDcwYTNkZmM3MzNiMzMzMWQ4MzgyYjFlOWRmNXAtMSwKKyAgICAweDEuOTk5OTk5OTk5OTk5OXAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODYKKyAgICAweDEuZmZmZmQ3MGEzZGZjNzMzYjMzMzFkODM4MmIxZTlkZjVwLTEsCisgICAgLTB4MS45OTk5OTk5OTk5OTk5cC0xMAorICB9LAorICB7IC8vIEVudHJ5IDU4NworICAgIDB4MS5mZmZmY2MyOGY2YTI4MjNmMzc2NWI1MDY1OWVjYjBlMnAtMSwKKyAgICAweDEuY2NjY2NjY2NjY2NjY3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODgKKyAgICAweDEuZmZmZmNjMjhmNmEyODIzZjM3NjViNTA2NTllY2IwZTJwLTEsCisgICAgLTB4MS5jY2NjY2NjY2NjY2NjcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDU4OQorICAgIDB4MS5mZmZiY2MyYTZlODZmZWY3ZDJhZjE1ODBiZDhlNjY5OXAtMSwKKyAgICAweDEuMDY2NjY2NjY2NjY2NnAtNworICB9LAorICB7IC8vIEVudHJ5IDU5MAorICAgIDB4MS5mZmZiY2MyYTZlODZmZWY3ZDJhZjE1ODBiZDhlNjY5OXAtMSwKKyAgICAtMHgxLjA2NjY2NjY2NjY2NjZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTEKKyAgICAweDEuZmZmMzBhNGI2ZmNjMTQwNWUxOGZiZjczMzVkMmY3ODlwLTEsCisgICAgMHgxLmNjY2NjY2NjY2NjY2NwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTIKKyAgICAweDEuZmZmMzBhNGI2ZmNjMTQwNWUxOGZiZjczMzVkMmY3ODlwLTEsCisgICAgLTB4MS5jY2NjY2NjY2NjY2NjcC03CisgIH0sCisgIHsgLy8gRW50cnkgNTkzCisgICAgMHgxLmZmZTU3YTc4MGYzOGMwZGIzNzA1MWZhOGM4ZDYwZmJjcC0xLAorICAgIDB4MS40OTk5OTk5OTk5OTk5cC02CisgIH0sCisgIHsgLy8gRW50cnkgNTk0CisgICAgMHgxLmZmZTU3YTc4MGYzOGMwZGIzNzA1MWZhOGM4ZDYwZmJjcC0xLAorICAgIC0weDEuNDk5OTk5OTk5OTk5OXAtNgorICB9LAorICB7IC8vIEVudHJ5IDU5NQorICAgIDB4MS5mZmQzMWNkMGUxZDYyYzA1ZDJjZGVkMjFhZGQ4YmQzM3AtMSwKKyAgICAweDEuYWNjY2NjY2NjY2NjY3AtNgorICB9LAorICB7IC8vIEVudHJ5IDU5NgorICAgIDB4MS5mZmQzMWNkMGUxZDYyYzA1ZDJjZGVkMjFhZGQ4YmQzM3AtMSwKKyAgICAtMHgxLmFjY2NjY2NjY2NjY2NwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTcKKyAgICAweDEuZmZiYmYxODIwNzU0MmVmODEzOTBkNzNjM2JhODljMWFwLTEsCisgICAgMHgxLjA4MHAtNQorICB9LAorICB7IC8vIEVudHJ5IDU5OAorICAgIDB4MS5mZmJiZjE4MjA3NTQyZWY4MTM5MGQ3M2MzYmE4OWMxYXAtMSwKKyAgICAtMHgxLjA4MHAtNQorICB9LAorICB7IC8vIEVudHJ5IDU5OQorICAgIDB4MS5mZjlmZjhjMzI5OWY1NDQ1N2JiYWY4YzEyMTczYjQ2YnAtMSwKKyAgICAweDEuMzk5OTk5OTk5OTk5YXAtNQorICB9LAorICB7IC8vIEVudHJ5IDYwMAorICAgIDB4MS5mZjlmZjhjMzI5OWY1NDQ1N2JiYWY4YzEyMTczYjQ2YnAtMSwKKyAgICAtMHgxLjM5OTk5OTk5OTk5OWFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDEKKyAgICAweDEuZmY3ZjMyZDc3YzViMWM0MmYxNjYwYzliNmYyZWY2NGZwLTEsCisgICAgMHgxLjZiMzMzMzMzMzMzMzRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDIKKyAgICAweDEuZmY3ZjMyZDc3YzViMWM0MmYxNjYwYzliNmYyZWY2NGZwLTEsCisgICAgLTB4MS42YjMzMzMzMzMzMzM0cC01CisgIH0sCisgIHsgLy8gRW50cnkgNjAzCisgICAgMHgxLmZmNTlhMDBkYmM0MDg5NmJiNWU0YWM4YWQyOTNhZmI0cC0xLAorICAgIDB4MS45Y2NjY2NjY2NjY2NlcC01CisgIH0sCisgIHsgLy8gRW50cnkgNjA0CisgICAgMHgxLmZmNTlhMDBkYmM0MDg5NmJiNWU0YWM4YWQyOTNhZmI0cC0xLAorICAgIC0weDEuOWNjY2NjY2NjY2NjZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDYwNQorICAgIDB4MS5mZjJmNDBjMDJlNjBmNjFkNmRjZmMzOWI2YzJiZTA4N3AtMSwKKyAgICAweDEuY2U2NjY2NjY2NjY2NnAtNQorICB9LAorICB7IC8vIEVudHJ5IDYwNgorICAgIDB4MS5mZjJmNDBjMDJlNjBmNjFkNmRjZmMzOWI2YzJiZTA4N3AtMSwKKyAgICAtMHgxLmNlNjY2NjY2NjY2NjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDcKKyAgICAweDEuOGNhNDZjN2Q4OTc1ZTU3YTE0ODRmMDVjMzczOGQ4M2JwLTEsCisgICAgMHgxLjVlN2ZjNDM2OWJkYWRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDgKKyAgICAweDEuOGNhNDZjN2Q4OTc1ZTU3YTE0ODRmMDVjMzczOGQ4M2JwLTEsCisgICAgLTB4MS41ZTdmYzQzNjliZGFkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjA5CisgICAgMHgxLjBiNWQzODAyZmM3OTkxMTQwMTY4ZjI5NGVlZGQ3OTA0cC0yLAorICAgIDB4MS40ZTdmYzQzNjliZGFkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTAKKyAgICAweDEuMGI1ZDM4MDJmYzc5OTExNDAxNjhmMjk0ZWVkZDc5MDRwLTIsCisgICAgLTB4MS40ZTdmYzQzNjliZGFkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTEKKyAgICAtMHgxLjY2Yjk2ZjUzMzIzYWYxZDdlMzFhNzE2MmFiMThhNzVicC0yLAorICAgIDB4MS5lZGJmYTY1MWU5Yzg0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTIKKyAgICAtMHgxLjY2Yjk2ZjUzMzIzYWYxZDdlMzFhNzE2MmFiMThhNzVicC0yLAorICAgIC0weDEuZWRiZmE2NTFlOWM4NHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjEzCisgICAgLTB4MS5hOTM1NTQ4ODhjMzJmYTU3ZjIyYTk1MjlhMzIwYzFjYnAtMSwKKyAgICAweDEuNDY3ZmM0MzY5YmRhZHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjE0CisgICAgLTB4MS5hOTM1NTQ4ODhjMzJmYTU3ZjIyYTk1MjlhMzIwYzFjYnAtMSwKKyAgICAtMHgxLjQ2N2ZjNDM2OWJkYWRwMQorICB9LAorICB7IC8vIEVudHJ5IDYxNQorICAgIC0weDEuZmZjMDAxNTU1MjdkMmI5ZmRhMmFlODkzOTZlMDk3MjdwLTEsCisgICAgMHgxLjk2MWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDYxNgorICAgIC0weDEuZmZjMDAxNTU1MjdkMmI5ZmRhMmFlODkzOTZlMDk3MjdwLTEsCisgICAgLTB4MS45NjFmYjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTcKKyAgICAtMHgxLjk2OTA3YzVjN2MyNWI4OGUzNGFkZGZmMWZiZWY2NmU0cC0xLAorICAgIDB4MS5lNWJmYTY1MWU5YzgzcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTgKKyAgICAtMHgxLjk2OTA3YzVjN2MyNWI4OGUzNGFkZGZmMWZiZWY2NmU0cC0xLAorICAgIC0weDEuZTViZmE2NTFlOWM4M3AxCisgIH0sCisgIHsgLy8gRW50cnkgNjE5CisgICAgLTB4MS4yYTFlNWE1MGY5NDhjZDQ4N2M1MzA5NjgyYjExMGE1M3AtMiwKKyAgICAweDEuMWFhZmNiYWZjODVmN3AyCisgIH0sCisgIHsgLy8gRW50cnkgNjIwCisgICAgLTB4MS4yYTFlNWE1MGY5NDhjZDQ4N2M1MzA5NjgyYjExMGE1M3AtMiwKKyAgICAtMHgxLjFhYWZjYmFmYzg1ZjdwMgorICB9LAorICB7IC8vIEVudHJ5IDYyMQorICAgIDB4MS40ODk0ZjY5NWRjNTZiY2U4YjI3M2U1NTI0ZjE4MTI2NHAtMiwKKyAgICAweDEuNDI3ZmM0MzY5YmRhZHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjIyCisgICAgMHgxLjQ4OTRmNjk1ZGM1NmJjZThiMjczZTU1MjRmMTgxMjY0cC0yLAorICAgIC0weDEuNDI3ZmM0MzY5YmRhZHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjIzCisgICAgMHgxLmEwMTZlYTNhNjkyY2UwYzMyMWI3N2YxNjhkZTM5MTIycC0xLAorICAgIDB4MS42YTRmYmNiZDZmNTYycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjQKKyAgICAweDEuYTAxNmVhM2E2OTJjZTBjMzIxYjc3ZjE2OGRlMzkxMjJwLTEsCisgICAgLTB4MS42YTRmYmNiZDZmNTYycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjUKKyAgICAweDEuYTMwYTY5ZjU1MzdlYmMyMmYwODcwYzJiZDI2ZWYyODRwLTEsCisgICAgMHgxLjZhZjJlZmYwYTI4OTZwMgorICB9LAorICB7IC8vIEVudHJ5IDYyNgorICAgIDB4MS5hMzBhNjlmNTUzN2ViYzIyZjA4NzBjMmJkMjZlZjI4NHAtMSwKKyAgICAtMHgxLjZhZjJlZmYwYTI4OTZwMgorICB9LAorICB7IC8vIEVudHJ5IDYyNworICAgIDB4MS41YmQ2MmU4YjA0YWQ1OTE1ZTY2MjQyMzQ5Yjc1NmUxMXAtMiwKKyAgICAweDEuNDNjNjJhOWQwMjQxNHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjI4CisgICAgMHgxLjViZDYyZThiMDRhZDU5MTVlNjYyNDIzNDliNzU2ZTExcC0yLAorICAgIC0weDEuNDNjNjJhOWQwMjQxNHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjI5CisgICAgLTB4MS4wY2I3MWY2NzFlNjM0MTA5NjZlNzhkMjAwOWMwNjE2ZnAtMiwKKyAgICAweDEuMWM5OTY1NDk2MWY5MnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjMwCisgICAgLTB4MS4wY2I3MWY2NzFlNjM0MTA5NjZlNzhkMjAwOWMwNjE2ZnAtMiwKKyAgICAtMHgxLjFjOTk2NTQ5NjFmOTJwMgorICB9LAorICB7IC8vIEVudHJ5IDYzMQorICAgIC0weDEuODlkODZhYTg1MjFjMTFiNzRmOGIxOTU0YzA4ZjliMzZwLTEsCisgICAgMHgxLmVhZDkzZmViODM2MWZwMQorICB9LAorICB7IC8vIEVudHJ5IDYzMgorICAgIC0weDEuODlkODZhYTg1MjFjMTFiNzRmOGIxOTU0YzA4ZjliMzZwLTEsCisgICAgLTB4MS5lYWQ5M2ZlYjgzNjFmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzMKKyAgICAtMHgxLmZlNTFhYzU1NGExNmFkODE5NGYxODEwODVmOGExN2YycC0xLAorICAgIDB4MS45YzdmYjU0NDQyZDFhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzQKKyAgICAtMHgxLmZlNTFhYzU1NGExNmFkODE5NGYxODEwODVmOGExN2YycC0xLAorICAgIC0weDEuOWM3ZmI1NDQ0MmQxYXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjM1CisgICAgLTB4MS5iOTdjMDRkMDhiYzVkNzY1YjM0MWEyMmIyYzcyMGI2ZnAtMSwKKyAgICAweDEuNGUyNjJhOWQwMjQxNXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjM2CisgICAgLTB4MS5iOTdjMDRkMDhiYzVkNzY1YjM0MWEyMmIyYzcyMGI2ZnAtMSwKKyAgICAtMHgxLjRlMjYyYTlkMDI0MTVwMQorICB9LAorICB7IC8vIEVudHJ5IDYzNworICAgIC0weDEuYThhYzhhM2U1OGY2Y2E5NTIzOTAyOTlkMmU4YjE4N2ZwLTIsCisgICAgMHgxLmZmOTkzZmViODM2MjBwMAorICB9LAorICB7IC8vIEVudHJ5IDYzOAorICAgIC0weDEuYThhYzhhM2U1OGY2Y2E5NTIzOTAyOTlkMmU4YjE4N2ZwLTIsCisgICAgLTB4MS5mZjk5M2ZlYjgzNjIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzkKKyAgICAweDEuNzdhOGI5YjNkMjU0YTllMzlkMDJiM2ViM2UyMzkwZTdwLTMsCisgICAgMHgxLjYyZTYyYTlkMDI0MTZwMAorICB9LAorICB7IC8vIEVudHJ5IDY0MAorICAgIDB4MS43N2E4YjliM2QyNTRhOWUzOWQwMmIzZWIzZTIzOTBlN3AtMywKKyAgICAtMHgxLjYyZTYyYTlkMDI0MTZwMAorICB9LAorICB7IC8vIEVudHJ5IDY0MQorICAgIDB4MS42ZTEwNjEyMDVkZDc5MDUxYzExMmQzMGEwNTA5N2M2MXAtMSwKKyAgICAweDEuOGM2NjJhOWQwMjQxOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDY0MgorICAgIDB4MS42ZTEwNjEyMDVkZDc5MDUxYzExMmQzMGEwNTA5N2M2MXAtMSwKKyAgICAtMHgxLjhjNjYyYTlkMDI0MTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDMKKyAgICAtMHgxLjY4MmYzY2MzYzdhMDhkYTJjZTAyYTQxY2RjN2JlZDg2cC00LAorICAgIC0weDEuYThhYTFkMTFjNDRmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ0CisgICAgLTB4MS42ODJmM2NjM2M3YTA4ZGEyY2UwMmE0MWNkYzdiZWQ4NnAtNCwKKyAgICAweDEuYThhYTFkMTFjNDRmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ1CisgICAgLTB4MS5lNjY2OWEyNzBjMzZkNDg3OWI0MjhkZGJhOTZjZDg3YnAtNywKKyAgICAtMHgxLjk1ZWM4YjllMDNkNTRwMAorICB9LAorICB7IC8vIEVudHJ5IDY0NgorICAgIC0weDEuZTY2NjlhMjcwYzM2ZDQ4NzliNDI4ZGRiYTk2Y2Q4N2JwLTcsCisgICAgMHgxLjk1ZWM4YjllMDNkNTRwMAorICB9LAorICB7IC8vIEVudHJ5IDY0NworICAgIDB4MS5kZGQxZWMyNWUyMDlmMWJiZjdlMTdlZjZjODQ1MGNkN3AtNSwKKyAgICAtMHgxLjgzMmVmYTJhNDM1YTlwMAorICB9LAorICB7IC8vIEVudHJ5IDY0OAorICAgIDB4MS5kZGQxZWMyNWUyMDlmMWJiZjdlMTdlZjZjODQ1MGNkN3AtNSwKKyAgICAweDEuODMyZWZhMmE0MzVhOXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ5CisgICAgMHgxLjBjYWI5MTE1NjQwZDk5MzA4MmE3MzQzYmI1YWZmZWEycC0zLAorICAgIC0weDEuNzA3MTY4YjY4MmRmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjUwCisgICAgMHgxLjBjYWI5MTE1NjQwZDk5MzA4MmE3MzQzYmI1YWZmZWEycC0zLAorICAgIDB4MS43MDcxNjhiNjgyZGZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTEKKyAgICAweDEuYTA3MjNhOTU0OTJlZGVlNWRjOTgzOTRlNDVmOTZkODhwLTMsCisgICAgLTB4MS41ZGIzZDc0MmMyNjUzcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTIKKyAgICAweDEuYTA3MjNhOTU0OTJlZGVlNWRjOTgzOTRlNDVmOTZkODhwLTMsCisgICAgMHgxLjVkYjNkNzQyYzI2NTNwMAorICB9LAorICB7IC8vIEVudHJ5IDY1MworICAgIDB4MS4xOGZlZTk2YTFhNTg1OTI4YTk0Y2RhN2UzZDkxNmZlMXAtMiwKKyAgICAtMHgxLjRhZjY0NWNmMDFlYThwMAorICB9LAorICB7IC8vIEVudHJ5IDY1NAorICAgIDB4MS4xOGZlZTk2YTFhNTg1OTI4YTk0Y2RhN2UzZDkxNmZlMXAtMiwKKyAgICAweDEuNGFmNjQ1Y2YwMWVhOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjU1CisgICAgMHgxLjYwNDM2MjFiMTNiZTJmZjA3MDg1ZjgyNzg1OThlNTY2cC0yLAorICAgIC0weDEuMzgzOGI0NWI0MTZmZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjU2CisgICAgMHgxLjYwNDM2MjFiMTNiZTJmZjA3MDg1ZjgyNzg1OThlNTY2cC0yLAorICAgIDB4MS4zODM4YjQ1YjQxNmZkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTcKKyAgICAweDEuYTVhNGNjZjQwZDlkOWJhOTdmYWE0ZTIzZWNjZTllM2FwLTIsCisgICAgLTB4MS4yNTdiMjJlNzgwZjUycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTgKKyAgICAweDEuYTVhNGNjZjQwZDlkOWJhOTdmYWE0ZTIzZWNjZTllM2FwLTIsCisgICAgMHgxLjI1N2IyMmU3ODBmNTJwMAorICB9LAorICB7IC8vIEVudHJ5IDY1OQorICAgIDB4MS5lOGM0MDVmMzZmODViN2Y1ZDZhMzhkZmQ0YTY5MjM0MXAtMiwKKyAgICAtMHgxLjEyYmQ5MTczYzA3YWJwMAorICB9LAorICB7IC8vIEVudHJ5IDY2MAorICAgIDB4MS5lOGM0MDVmMzZmODViN2Y1ZDZhMzhkZmQ0YTY5MjM0MXAtMiwKKyAgICAweDEuMTJiZDkxNzNjMDdhYnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjYxCisgICAgMHgxLjI2OTc2YTZjNGUwZjg2NjMzMzI3ZjFjZWVjYjUwOGFlcC0xLAorICAgIC0weDEuZWE1YzNlZDViMzg1MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY2MgorICAgIDB4MS4yNjk3NmE2YzRlMGY4NjYzMzMyN2YxY2VlY2I1MDhhZXAtMSwKKyAgICAweDEuZWE1YzNlZDViMzg1MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY2MworICAgIDB4MS4zODA1YTE4ODIwMDlmMjg0M2RhODA4ZTk1OWYxNzg2MXAtMSwKKyAgICAtMHgxLmQ0Yjg3ZGFiNjcwYTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjQKKyAgICAweDEuMzgwNWExODgyMDA5ZjI4NDNkYTgwOGU5NTlmMTc4NjFwLTEsCisgICAgMHgxLmQ0Yjg3ZGFiNjcwYTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjUKKyAgICAweDEuNDhlNTJlMGE2NWJjYjNjZDQ2NDU1YzRkMjMzOGJkZjJwLTEsCisgICAgLTB4MS5iZjE0YmM4MTFhOGYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjY2CisgICAgMHgxLjQ4ZTUyZTBhNjViY2IzY2Q0NjQ1NWM0ZDIzMzhiZGYycC0xLAorICAgIDB4MS5iZjE0YmM4MTFhOGYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjY3CisgICAgMHgxLjU5MmU1OGVhMGE5ZWVjMGIzNTdlYjRlOWE4M2IwZWE1cC0xLAorICAgIC0weDEuYTk3MGZiNTZjZTE0MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY2OAorICAgIDB4MS41OTJlNThlYTBhOWVlYzBiMzU3ZWI0ZTlhODNiMGVhNXAtMSwKKyAgICAweDEuYTk3MGZiNTZjZTE0MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY2OQorICAgIDB4MS42OGQ5YWZlMDUyZDFmMGU5MzI0YWU4NzY5NjFiY2RiMXAtMSwKKyAgICAtMHgxLjkzY2QzYTJjODE5OTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzAKKyAgICAweDEuNjhkOWFmZTA1MmQxZjBlOTMyNGFlODc2OTYxYmNkYjFwLTEsCisgICAgMHgxLjkzY2QzYTJjODE5OTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzEKKyAgICAweDEuNzdlMDA4ZDA3NzVlNzQ0ZWIxNmEyYzRlYzcxODRjNDNwLTEsCisgICAgLTB4MS43ZTI5NzkwMjM1MWUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjcyCisgICAgMHgxLjc3ZTAwOGQwNzc1ZTc0NGViMTZhMmM0ZWM3MTg0YzQzcC0xLAorICAgIDB4MS43ZTI5NzkwMjM1MWUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjczCisgICAgMHgxLjg2M2E4NTBlNDM4ZmUwMjkzMDJhYmEwZjVmMTI3NjE2cC0xLAorICAgIC0weDEuNjg4NWI3ZDdlOGEzMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY3NAorICAgIDB4MS44NjNhODUwZTQzOGZlMDI5MzAyYWJhMGY1ZjEyNzYxNnAtMSwKKyAgICAweDEuNjg4NWI3ZDdlOGEzMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY3NQorICAgIDB4MS45M2UyOTQ4MjMzZmNlODE0NDM5ZWQ1MWZkMjU0ODkyMHAtMSwKKyAgICAtMHgxLjUyZTFmNmFkOWMyODBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzYKKyAgICAweDEuOTNlMjk0ODIzM2ZjZTgxNDQzOWVkNTFmZDI1NDg5MjBwLTEsCisgICAgMHgxLjUyZTFmNmFkOWMyODBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzcKKyAgICAweDEuYTBkMWY4YTlhNzkxZDRiNTY5NGNhNjhhNDJmZTZjOWJwLTEsCisgICAgLTB4MS4zZDNlMzU4MzRmYWQwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjc4CisgICAgMHgxLmEwZDFmOGE5YTc5MWQ0YjU2OTRjYTY4YTQyZmU2YzlicC0xLAorICAgIDB4MS4zZDNlMzU4MzRmYWQwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjc5CisgICAgMHgxLmJjNmJkODYxZTEzZGUzMDk0MjhlMDBmN2JlZjZjM2VjcC0xLAorICAgIC0weDEuMGEwYjAyNTAxYzc5OXAtMQorICB9LAorICB7IC8vIEVudHJ5IDY4MAorICAgIDB4MS5iYzZiZDg2MWUxM2RlMzA5NDI4ZTAwZjdiZWY2YzNlY3AtMSwKKyAgICAweDEuMGEwYjAyNTAxYzc5OXAtMQorICB9LAorICB7IC8vIEVudHJ5IDY4MQorICAgIDB4MS5jYTU5YzZmYTNkOWNlMjM4YTIyNzM5M2I2YjA3NWJjNXAtMSwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODIKKyAgICAweDEuY2E1OWM2ZmEzZDljZTIzOGEyMjczOTNiNmIwNzViYzVwLTEsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODMKKyAgICAweDEuZDZjMGIxMjU3OTFjZmZjZTgzZTMyNTY0NzEyYjc4YzZwLTEsCisgICAgLTB4MS45ZGQ4M2M3YzllMTI2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjg0CisgICAgMHgxLmQ2YzBiMTI1NzkxY2ZmY2U4M2UzMjU2NDcxMmI3OGM2cC0xLAorICAgIDB4MS45ZGQ4M2M3YzllMTI2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjg1CisgICAgMHgxLmUxOTYwMjYxODI5ODU4MzkxNjQ1YmJlMTIwMTllNThhcC0xLAorICAgIC0weDEuNjJiOTU4NmFkMGEyMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDY4NgorICAgIDB4MS5lMTk2MDI2MTgyOTg1ODM5MTY0NWJiZTEyMDE5ZTU4YXAtMSwKKyAgICAweDEuNjJiOTU4NmFkMGEyMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDY4NworICAgIDB4MS5lYWQwN2NjNjM1Njk2NGUyN2ExMDM2ZDJmOGIxNThmN3AtMSwKKyAgICAtMHgxLjI3OWE3NDU5MDMzMWFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODgKKyAgICAweDEuZWFkMDdjYzYzNTY5NjRlMjdhMTAzNmQyZjhiMTU4ZjdwLTEsCisgICAgMHgxLjI3OWE3NDU5MDMzMWFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODkKKyAgICAweDEuZjI2ODQwZTdiMjE4OGY3YTBjYzY2MWEwZWRlMzcyOGJwLTEsCisgICAgLTB4MS5kOGY3MjA4ZTZiODI5cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNjkwCisgICAgMHgxLmYyNjg0MGU3YjIxODhmN2EwY2M2NjFhMGVkZTM3MjhicC0xLAorICAgIDB4MS5kOGY3MjA4ZTZiODI5cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNjkxCisgICAgMHgxLmY4NTZkNDhkYjc5N2RlYzBiNzllMTM1MzQwOWRjM2YycC0xLAorICAgIC0weDEuNjJiOTU4NmFkMGExZXAtMworICB9LAorICB7IC8vIEVudHJ5IDY5MgorICAgIDB4MS5mODU2ZDQ4ZGI3OTdkZWMwYjc5ZTEzNTM0MDlkYzNmMnAtMSwKKyAgICAweDEuNjJiOTU4NmFkMGExZXAtMworICB9LAorICB7IC8vIEVudHJ5IDY5MworICAgIDB4MS5mYzk3MjgzYTQyNDc5NzIxNWY4YThkMTk2NzczNmM5YnAtMSwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MjZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTQKKyAgICAweDEuZmM5NzI4M2E0MjQ3OTcyMTVmOGE4ZDE5Njc3MzZjOWJwLTEsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MjZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTUKKyAgICAweDEuZmYyNTliN2FiOWY0ZjlhOGNiOWYxYzMzMzI3MmU0MDlwLTEsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJkcC01CisgIH0sCisgIHsgLy8gRW50cnkgNjk2CisgICAgMHgxLmZmMjU5YjdhYjlmNGY5YThjYjlmMWMzMzMyNzJlNDA5cC0xLAorICAgIDB4MS5kOGY3MjA4ZTZiODJkcC01CisgIH0sCisgIHsgLy8gRW50cnkgNjk3CisgICAgMHgxLmZmMjU5YjdhYjlmNGY5YThjYjlmMWMzMzMyNzJlNDA5cC0xLAorICAgIDB4MS5kOGY3MjA4ZTZiODJkcC01CisgIH0sCisgIHsgLy8gRW50cnkgNjk4CisgICAgMHgxLmZmMjU5YjdhYjlmNGY5YThjYjlmMWMzMzMyNzJlNDA5cC0xLAorICAgIC0weDEuZDhmNzIwOGU2YjgyZHAtNQorICB9LAorICB7IC8vIEVudHJ5IDY5OQorICAgIDB4MS5mYzk3MjgzYTQyNDc5NTg0NzI5NDY1NGExZDhhMDhlZHAtMSwKKyAgICAweDEuZDhmNzIwOGU2YjgyZHAtNAorICB9LAorICB7IC8vIEVudHJ5IDcwMAorICAgIDB4MS5mYzk3MjgzYTQyNDc5NTg0NzI5NDY1NGExZDhhMDhlZHAtMSwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDEKKyAgICAweDEuZjg1NmQ0OGRiNzk3ZGJmZWNmYThiNGNkM2JlNDQwMjdwLTEsCisgICAgMHgxLjYyYjk1ODZhZDBhMjJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDIKKyAgICAweDEuZjg1NmQ0OGRiNzk3ZGJmZWNmYThiNGNkM2JlNDQwMjdwLTEsCisgICAgLTB4MS42MmI5NTg2YWQwYTIycC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzAzCisgICAgMHgxLmYyNjg0MGU3YjIxODhiZDA4MTRlM2RmYzdmNmYzZjg3cC0xLAorICAgIDB4MS5kOGY3MjA4ZTZiODJkcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzA0CisgICAgMHgxLmYyNjg0MGU3YjIxODhiZDA4MTRlM2RmYzdmNmYzZjg3cC0xLAorICAgIC0weDEuZDhmNzIwOGU2YjgyZHAtMworICB9LAorICB7IC8vIEVudHJ5IDcwNQorICAgIDB4MS5lYWQwN2NjNjM1Njk2MDU0NmFlNjM0ZWY2MjYyMWZiMnAtMSwKKyAgICAweDEuMjc5YTc0NTkwMzMxY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDcwNgorICAgIDB4MS5lYWQwN2NjNjM1Njk2MDU0NmFlNjM0ZWY2MjYyMWZiMnAtMSwKKyAgICAtMHgxLjI3OWE3NDU5MDMzMWNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDcKKyAgICAweDEuZTE5NjAyNjE4Mjk4NTJjYTY2MmNhMjdkNTE4YzJmYTlwLTEsCisgICAgMHgxLjYyYjk1ODZhZDBhMjJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDgKKyAgICAweDEuZTE5NjAyNjE4Mjk4NTJjYTY2MmNhMjdkNTE4YzJmYTlwLTEsCisgICAgLTB4MS42MmI5NTg2YWQwYTIycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzA5CisgICAgMHgxLmQ2YzBiMTI1NzkxY2Y5ODNkNTNlZmFhN2Q0NWUyOTFlcC0xLAorICAgIDB4MS45ZGQ4M2M3YzllMTI4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzEwCisgICAgMHgxLmQ2YzBiMTI1NzkxY2Y5ODNkNTNlZmFhN2Q0NWUyOTFlcC0xLAorICAgIC0weDEuOWRkODNjN2M5ZTEyOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDcxMQorICAgIDB4MS5jYTU5YzZmYTNkOWNkYjE3NTMwOTI3YWZmMWIzM2FiYnAtMSwKKyAgICAweDEuZDhmNzIwOGU2YjgyZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDcxMgorICAgIDB4MS5jYTU5YzZmYTNkOWNkYjE3NTMwOTI3YWZmMWIzM2FiYnAtMSwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTMKKyAgICAweDEuYmM2YmQ4NjFlMTNkZTMwOTQyOGUwMGY3YmVmNmMzZWNwLTEsCisgICAgMHgxLjBhMGIwMjUwMWM3OTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTQKKyAgICAweDEuYmM2YmQ4NjFlMTNkZTMwOTQyOGUwMGY3YmVmNmMzZWNwLTEsCisgICAgLTB4MS4wYTBiMDI1MDFjNzk5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzE1CisgICAgMHgxLmEwZDFmOGE5YTc5MWY5ZGZmNWM5OTNhZjQ5MDgyNjRkcC0xLAorICAgIDB4MS4zZDNlMzU4MzRmYWNjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzE2CisgICAgMHgxLmEwZDFmOGE5YTc5MWY5ZGZmNWM5OTNhZjQ5MDgyNjRkcC0xLAorICAgIC0weDEuM2QzZTM1ODM0ZmFjY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDcxNworICAgIDB4MS45M2UyOTQ4MjMzZmQwZjY5ZTM5MTg5ODIxNDhmODI2NXAtMSwKKyAgICAweDEuNTJlMWY2YWQ5YzI3Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDcxOAorICAgIDB4MS45M2UyOTQ4MjMzZmQwZjY5ZTM5MTg5ODIxNDhmODI2NXAtMSwKKyAgICAtMHgxLjUyZTFmNmFkOWMyN2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTkKKyAgICAweDEuODYzYTg1MGU0MzkwMDk5N2U3NmJlODA0MDU0MzczNzdwLTEsCisgICAgMHgxLjY4ODViN2Q3ZThhMmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjAKKyAgICAweDEuODYzYTg1MGU0MzkwMDk5N2U3NmJlODA0MDU0MzczNzdwLTEsCisgICAgLTB4MS42ODg1YjdkN2U4YTJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzIxCisgICAgMHgxLjc3ZTAwOGQwNzc1ZTlmYzM4ZTNmNDkyZjhlOTNmZjUxcC0xLAorICAgIDB4MS43ZTI5NzkwMjM1MWRjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzIyCisgICAgMHgxLjc3ZTAwOGQwNzc1ZTlmYzM4ZTNmNDkyZjhlOTNmZjUxcC0xLAorICAgIC0weDEuN2UyOTc5MDIzNTFkY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDcyMworICAgIDB4MS42OGQ5YWZlMDUyZDIxZTUwNTYwZjlmZmI2Y2MxYjk0NXAtMSwKKyAgICAweDEuOTNjZDNhMmM4MTk4Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDcyNAorICAgIDB4MS42OGQ5YWZlMDUyZDIxZTUwNTYwZjlmZmI2Y2MxYjk0NXAtMSwKKyAgICAtMHgxLjkzY2QzYTJjODE5OGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjUKKyAgICAweDEuNTkyZTU4ZWEwYTlmMWI0ZmRkYmFhZjg2OGZlNDc5MTFwLTEsCisgICAgMHgxLmE5NzBmYjU2Y2UxM2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjYKKyAgICAweDEuNTkyZTU4ZWEwYTlmMWI0ZmRkYmFhZjg2OGZlNDc5MTFwLTEsCisgICAgLTB4MS5hOTcwZmI1NmNlMTNjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzI3CisgICAgMHgxLjQ4ZTUyZTBhNjViY2U0ZDlkNjJhMzEyOTNmN2Q0MWMxcC0xLAorICAgIDB4MS5iZjE0YmM4MTFhOGVjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzI4CisgICAgMHgxLjQ4ZTUyZTBhNjViY2U0ZDlkNjJhMzEyOTNmN2Q0MWMxcC0xLAorICAgIC0weDEuYmYxNGJjODExYThlY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDcyOQorICAgIDB4MS4zODA1YTE4ODIwMGEyNTQyNDdmMzA0NjJjMzZhY2Y2YXAtMSwKKyAgICAweDEuZDRiODdkYWI2NzA5Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDczMAorICAgIDB4MS4zODA1YTE4ODIwMGEyNTQyNDdmMzA0NjJjMzZhY2Y2YXAtMSwKKyAgICAtMHgxLmQ0Yjg3ZGFiNjcwOWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzEKKyAgICAweDEuMjY5NzZhNmM0ZTBmYmFiYjg0NjMyYmQ5OWZlZWM5YzZwLTEsCisgICAgMHgxLmVhNWMzZWQ1YjM4NGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzIKKyAgICAweDEuMjY5NzZhNmM0ZTBmYmFiYjg0NjMyYmQ5OWZlZWM5YzZwLTEsCisgICAgLTB4MS5lYTVjM2VkNWIzODRjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzMzCisgICAgMHgxLmU4YzQwNWYzNmY4NWI3ZjVkNmEzOGRmZDRhNjkyMzQxcC0yLAorICAgIDB4MS4xMmJkOTE3M2MwN2FicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzQKKyAgICAweDEuZThjNDA1ZjM2Zjg1YjdmNWQ2YTM4ZGZkNGE2OTIzNDFwLTIsCisgICAgLTB4MS4xMmJkOTE3M2MwN2FicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzUKKyAgICAweDEuYTVhNGNjZjQwZDljYjI1ZjE2YWQ5N2U0ODBjNGI0ODNwLTIsCisgICAgMHgxLjI1N2IyMmU3ODBmNTZwMAorICB9LAorICB7IC8vIEVudHJ5IDczNgorICAgIDB4MS5hNWE0Y2NmNDBkOWNiMjVmMTZhZDk3ZTQ4MGM0YjQ4M3AtMiwKKyAgICAtMHgxLjI1N2IyMmU3ODBmNTZwMAorICB9LAorICB7IC8vIEVudHJ5IDczNworICAgIDB4MS42MDQzNjIxYjEzYmQzZjkwNGIzYjg3NmRmNWIyYzZmNHAtMiwKKyAgICAweDEuMzgzOGI0NWI0MTcwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzM4CisgICAgMHgxLjYwNDM2MjFiMTNiZDNmOTA0YjNiODc2ZGY1YjJjNmY0cC0yLAorICAgIC0weDEuMzgzOGI0NWI0MTcwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzM5CisgICAgMHgxLjE4ZmVlOTZhMWE1NzYyZmM2NzcwZmYxNjhlMDZhYjNlcC0yLAorICAgIDB4MS40YWY2NDVjZjAxZWFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDAKKyAgICAweDEuMThmZWU5NmExYTU3NjJmYzY3NzBmZjE2OGUwNmFiM2VwLTIsCisgICAgLTB4MS40YWY2NDVjZjAxZWFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDEKKyAgICAweDEuYTA3MjNhOTU0OTJjZTk5ODQ1N2ZiN2EwZDA5YTYzODVwLTMsCisgICAgMHgxLjVkYjNkNzQyYzI2NTdwMAorICB9LAorICB7IC8vIEVudHJ5IDc0MgorICAgIDB4MS5hMDcyM2E5NTQ5MmNlOTk4NDU3ZmI3YTBkMDlhNjM4NXAtMywKKyAgICAtMHgxLjVkYjNkNzQyYzI2NTdwMAorICB9LAorICB7IC8vIEVudHJ5IDc0MworICAgIDB4MS4wY2FiOTExNTY0MGI5ZDlkNDY2NzIzYmJkNWQ1ODliZXAtMywKKyAgICAweDEuNzA3MTY4YjY4MmUwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzQ0CisgICAgMHgxLjBjYWI5MTE1NjQwYjlkOWQ0NjY3MjNiYmQ1ZDU4OWJlcC0zLAorICAgIC0weDEuNzA3MTY4YjY4MmUwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzQ1CisgICAgMHgxLmRkZDFlYzI1ZTIwMWY1Mzg5MjViZjViY2Y3YzdkZjZlcC01LAorICAgIDB4MS44MzJlZmEyYTQzNWFkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDYKKyAgICAweDEuZGRkMWVjMjVlMjAxZjUzODkyNWJmNWJjZjdjN2RmNmVwLTUsCisgICAgLTB4MS44MzJlZmEyYTQzNWFkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDcKKyAgICAtMHgxLmU2NjY5YTI3MGM1NmQzYTA4ZDkxY2MyNzIxZjkyZmUxcC03LAorICAgIDB4MS45NWVjOGI5ZTAzZDU4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDgKKyAgICAtMHgxLmU2NjY5YTI3MGM1NmQzYTA4ZDkxY2MyNzIxZjkyZmUxcC03LAorICAgIC0weDEuOTVlYzhiOWUwM2Q1OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzQ5CisgICAgLTB4MS42ODJmM2NjM2M3YTA4ZGEyY2UwMmE0MWNkYzdiZWQ4NnAtNCwKKyAgICAweDEuYThhYTFkMTFjNDRmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzUwCisgICAgLTB4MS42ODJmM2NjM2M3YTA4ZGEyY2UwMmE0MWNkYzdiZWQ4NnAtNCwKKyAgICAtMHgxLmE4YWExZDExYzQ0ZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDc1MQorICAgIDB4MS4wY2IzNDY5YTI5ZWE2NmQ0MDMxYmU3Njk3MDJhYWQ1Y3AtMSwKKyAgICAweDEuMDRhZmY2ZDMzMDk0MnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzUyCisgICAgMHgxLjBjYjM0NjlhMjllYTY2ZDQwMzFiZTc2OTcwMmFhZDVjcC0xLAorICAgIC0weDEuMDRhZmY2ZDMzMDk0MnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzUzCisgICAgMHgxLjBjYjIyOGZhN2Y4MTE3YzgyZTYxY2Y1MzkzMzQxYzY0cC0xLAorICAgIDB4MS4wNGIwOWU5OGRjZGI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTQKKyAgICAweDEuMGNiMjI4ZmE3ZjgxMTdjODJlNjFjZjUzOTMzNDFjNjRwLTEsCisgICAgLTB4MS4wNGIwOWU5OGRjZGI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTUKKyAgICAweDEuMGNiMTBiNWE2MWIwNWE3M2U3OGEzZTQ0NDdiYWY1MTRwLTEsCisgICAgMHgxLjA0YjE0NjVlODkyMjZwMAorICB9LAorICB7IC8vIEVudHJ5IDc1NgorICAgIDB4MS4wY2IxMGI1YTYxYjA1YTczZTc4YTNlNDQ0N2JhZjUxNHAtMSwKKyAgICAtMHgxLjA0YjE0NjVlODkyMjZwMAorICB9LAorICB7IC8vIEVudHJ5IDc1NworICAgIDB4MS4wY2FmZWRiOWQwNzhhOTg0MDg2OTI4YWE0MGQyZTRhNXAtMSwKKyAgICAweDEuMDRiMWVlMjQzNTY5OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzU4CisgICAgMHgxLjBjYWZlZGI5ZDA3OGE5ODQwODY5MjhhYTQwZDJlNGE1cC0xLAorICAgIC0weDEuMDRiMWVlMjQzNTY5OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzU5CisgICAgMHgxLjBjYWVkMDE4Y2JkYTdmYTU5YzYzMWNkNTViMzFhYThkcC0xLAorICAgIDB4MS4wNGIyOTVlOWUxYjBhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjAKKyAgICAweDEuMGNhZWQwMThjYmRhN2ZhNTljNjMxY2Q1NWIzMWFhOGRwLTEsCisgICAgLTB4MS4wNGIyOTVlOWUxYjBhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjEKKyAgICAweDEuMGNhZGIyNzc1M2Q2NTc4NWUwNmQwZTQ2NDAwNjE0OWVwLTEsCisgICAgMHgxLjA0YjMzZGFmOGRmN2NwMAorICB9LAorICB7IC8vIEVudHJ5IDc2MgorICAgIDB4MS4wY2FkYjI3NzUzZDY1Nzg1ZTA2ZDBlNDY0MDA2MTQ5ZXAtMSwKKyAgICAtMHgxLjA0YjMzZGFmOGRmN2NwMAorICB9LAorICB7IC8vIEVudHJ5IDc2MworICAgIDB4MS4wY2FjOTRkNTY4NmNhYmQyNDMwYzIwZmRmMjg1NWI0N3AtMSwKKyAgICAweDEuMDRiM2U1NzUzYTNlZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzY0CisgICAgMHgxLjBjYWM5NGQ1Njg2Y2FiZDI0MzBjMjBmZGYyODU1YjQ3cC0xLAorICAgIC0weDEuMDRiM2U1NzUzYTNlZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzY1CisgICAgMHgxLjBjYWI3NzMzMDk5ZGY3Mzg2NDU1NzRjZDQ4MmVmNGIycC0xLAorICAgIDB4MS4wNGI0OGQzYWU2ODYwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjYKKyAgICAweDEuMGNhYjc3MzMwOTlkZjczODY0NTU3NGNkNDgyZWY0YjJwLTEsCisgICAgLTB4MS4wNGI0OGQzYWU2ODYwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjcKKyAgICAweDEuMGNhYTU5OTAzNzZiMDYxZWMxY2YzODkwZjFiOGUxZTNwLTEsCisgICAgMHgxLjA0YjUzNTAwOTJjY2ZwMAorICB9LAorICB7IC8vIEVudHJ5IDc2OAorICAgIDB4MS4wY2FhNTk5MDM3NmIwNjFlYzFjZjM4OTBmMWI4ZTFlM3AtMSwKKyAgICAtMHgxLjA0YjUzNTAwOTJjY2ZwMAorICB9LAorICB7IC8vIEVudHJ5IDc2OQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzAKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzEKKyAgICAweDEucDAsCisgICAgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDc3MgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDc3MworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzQKKyAgICAweDEuYWQwMmM3NzFjMzVlZDVmMDEwODlhMDBjNmEyN2UwY2ZwLTEsCisgICAgMHgxLjI3OWE3NDU5MDMzMWJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzUKKyAgICAweDEuYWQwMmM3NzFjMzVlZDVmMDEwODlhMDBjNmEyN2UwY2ZwLTEsCisgICAgLTB4MS4yNzlhNzQ1OTAzMzFicC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzc2CisgICAgMHgxLmFkMDJjNzcxYzM1ZWNkMzQ3MWRlOTAyMWU2YzNiOTJicC0xLAorICAgIDB4MS4yNzlhNzQ1OTAzMzFjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzc3CisgICAgMHgxLmFkMDJjNzcxYzM1ZWNkMzQ3MWRlOTAyMWU2YzNiOTJicC0xLAorICAgIC0weDEuMjc5YTc0NTkwMzMxY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDc3OAorICAgIDB4MS5hZDAyYzc3MWMzNWVjNDc4ZDMzMzgwMzc2MmY0NTBkNXAtMSwKKyAgICAweDEuMjc5YTc0NTkwMzMxZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc3OQorICAgIDB4MS5hZDAyYzc3MWMzNWVjNDc4ZDMzMzgwMzc2MmY0NTBkNXAtMSwKKyAgICAtMHgxLjI3OWE3NDU5MDMzMWRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODAKKyAgICAtMHgxLjQ4ZDFkZGQyYjJiM2Y4YzIxYjk0MjFlNjViMzgwNzM1cC0zLAorICAgIDB4MS5iYjY3YWU4NTg0Y2E5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODEKKyAgICAtMHgxLjQ4ZDFkZGQyYjJiM2Y4YzIxYjk0MjFlNjViMzgwNzM1cC0zLAorICAgIC0weDEuYmI2N2FlODU4NGNhOXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzgyCisgICAgLTB4MS40OGQxZGRkMmIyYjQ3NzE4ZmYzMDYzYjZiZDk4MTA5OXAtMywKKyAgICAweDEuYmI2N2FlODU4NGNhYXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzgzCisgICAgLTB4MS40OGQxZGRkMmIyYjQ3NzE4ZmYzMDYzYjZiZDk4MTA5OXAtMywKKyAgICAtMHgxLmJiNjdhZTg1ODRjYWFwMAorICB9LAorICB7IC8vIEVudHJ5IDc4NAorICAgIC0weDEuNDhkMWRkZDJiMmI0ZjU2ZmUyY2NhNTg3MWVhZjQ4MjBwLTMsCisgICAgMHgxLmJiNjdhZTg1ODRjYWJwMAorICB9LAorICB7IC8vIEVudHJ5IDc4NQorICAgIC0weDEuNDhkMWRkZDJiMmI0ZjU2ZmUyY2NhNTg3MWVhZjQ4MjBwLTMsCisgICAgLTB4MS5iYjY3YWU4NTg0Y2FicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODYKKyAgICAweDEuY2ZjNmNmYTUyYWQ5Zjk5MTFkYjRjYTBkNDVmZGIwYjNwLTEsCisgICAgMHgxLmJmZmZmZmZmZmZmZmZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODcKKyAgICAweDEuY2ZjNmNmYTUyYWQ5Zjk5MTFkYjRjYTBkNDVmZGIwYjNwLTEsCisgICAgLTB4MS5iZmZmZmZmZmZmZmZmcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzg4CisgICAgMHgxLmNmYzZjZmE1MmFkOWY2MmQ2ZDU0MjNjYTgzMzlhMDBhcC0xLAorICAgIDB4MS5jcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzg5CisgICAgMHgxLmNmYzZjZmE1MmFkOWY2MmQ2ZDU0MjNjYTgzMzlhMDBhcC0xLAorICAgIC0weDEuY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDc5MAorICAgIDB4MS5jZmM2Y2ZhNTJhZDlmMmM5YmNmMzdkODdjMDU4OTJmNXAtMSwKKyAgICAweDEuYzAwMDAwMDAwMDAwMXAtMgorICB9LAorICB7IC8vIEVudHJ5IDc5MQorICAgIDB4MS5jZmM2Y2ZhNTJhZDlmMmM5YmNmMzdkODdjMDU4OTJmNXAtMSwKKyAgICAtMHgxLmMwMDAwMDAwMDAwMDFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTIKKyAgICAweDEuOGJiMTA1YTVkYzkwMTA0MDUxZDA4Y2I5NjU2MzE4MDdwLTEsCisgICAgMHgxLjVmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTMKKyAgICAweDEuOGJiMTA1YTVkYzkwMTA0MDUxZDA4Y2I5NjU2MzE4MDdwLTEsCisgICAgLTB4MS41ZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzk0CisgICAgMHgxLjhiYjEwNWE1ZGM5MDA2MThmODBmYTUxZDMwM2M2OXAtMSwKKyAgICAweDEuNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDc5NQorICAgIDB4MS44YmIxMDVhNWRjOTAwNjE4ZjgwZmE1MWQzMDNjNjlwLTEsCisgICAgLTB4MS42cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzk2CisgICAgMHgxLjhiYjEwNWE1ZGM4ZmZiZjE5ZTRlYmQ4MGZhYjJjZGI4cC0xLAorICAgIDB4MS42MDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzk3CisgICAgMHgxLjhiYjEwNWE1ZGM4ZmZiZjE5ZTRlYmQ4MGZhYjJjZGI4cC0xLAorICAgIC0weDEuNjAwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDc5OAorICAgIDB4MS43ZWY0ODQyZjBiY2QxMTY4NmFhZjZmMjFjOWFhODM1NHAtMiwKKyAgICAweDEuMmZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzk5CisgICAgMHgxLjdlZjQ4NDJmMGJjZDExNjg2YWFmNmYyMWM5YWE4MzU0cC0yLAorICAgIC0weDEuMmZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgODAwCisgICAgMHgxLjdlZjQ4NDJmMGJjY2Q2MGQ0YTUwMWRjOGJjNGI1N2IzcC0yLAorICAgIDB4MS4zcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDEKKyAgICAweDEuN2VmNDg0MmYwYmNjZDYwZDRhNTAxZGM4YmM0YjU3YjNwLTIsCisgICAgLTB4MS4zcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDIKKyAgICAweDEuN2VmNDg0MmYwYmNjOWFiMjI5ZjBjYzZmYWQ2ZDM3OGRwLTIsCisgICAgMHgxLjMwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDgwMworICAgIDB4MS43ZWY0ODQyZjBiY2M5YWIyMjlmMGNjNmZhZDZkMzc4ZHAtMiwKKyAgICAtMHgxLjMwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDgwNAorICAgIC0weDEuODYzZWZhMzYxZGMyMjk0ZTkyOWI5NTE1ZmIzNGY5YmFwLTEsCisgICAgMHgxLjM3ZmZmZmZmZmZmZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDgwNQorICAgIC0weDEuODYzZWZhMzYxZGMyMjk0ZTkyOWI5NTE1ZmIzNGY5YmFwLTEsCisgICAgLTB4MS4zN2ZmZmZmZmZmZmZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDYKKyAgICAtMHgxLjg2M2VmYTM2MWRjMjUyYmNhMWVhZWVkMzk3NDliZWQ3cC0xLAorICAgIDB4MS4zODBwMQorICB9LAorICB7IC8vIEVudHJ5IDgwNworICAgIC0weDEuODYzZWZhMzYxZGMyNTJiY2ExZWFlZWQzOTc0OWJlZDdwLTEsCisgICAgLTB4MS4zODBwMQorICB9LAorICB7IC8vIEVudHJ5IDgwOAorICAgIC0weDEuODYzZWZhMzYxZGMyN2MyYWIxM2E0ODkxMmQ0NTg4MGJwLTEsCisgICAgMHgxLjM4MDAwMDAwMDAwMDFwMQorICB9LAorICB7IC8vIEVudHJ5IDgwOQorICAgIC0weDEuODYzZWZhMzYxZGMyN2MyYWIxM2E0ODkxMmQ0NTg4MGJwLTEsCisgICAgLTB4MS4zODAwMDAwMDAwMDAxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTAKKyAgICAweDEuZmVmMmIyZDIxY2Y2YzEwNmU4NmZmOTM5NWY4MjA0YTBwLTEsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTEKKyAgICAweDEuZmVmMmIyZDIxY2Y2YzEwNmU4NmZmOTM5NWY4MjA0YTBwLTEsCisgICAgLTB4MS4wNjljOGI0NmIzNzkycC00CisgIH0sCisgIHsgLy8gRW50cnkgODEyCisgICAgMHgxLmZiY2JlNjkzYmQ4ZWM4NTcyM2I2Y2I1NWU0ZjVlNzhmcC0xLAorICAgIDB4MS4wNjljOGI0NmIzNzkycC0zCisgIH0sCisgIHsgLy8gRW50cnkgODEzCisgICAgMHgxLmZiY2JlNjkzYmQ4ZWM4NTcyM2I2Y2I1NWU0ZjVlNzhmcC0xLAorICAgIC0weDEuMDY5YzhiNDZiMzc5MnAtMworICB9LAorICB7IC8vIEVudHJ5IDgxNAorICAgIDB4MS5mNjhlZWJmY2JiNWU4NDE5MDBlMjU0MmY3YzI0YmFiMHAtMSwKKyAgICAweDEuODllYWQwZWEwZDM1YnAtMworICB9LAorICB7IC8vIEVudHJ5IDgxNQorICAgIDB4MS5mNjhlZWJmY2JiNWU4NDE5MDBlMjU0MmY3YzI0YmFiMHAtMSwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzNWJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTYKKyAgICAweDEuZWY0MTQ1YjRhZWNmZmJkYWFmZmI3OGZmYjQ5YWM5YmRwLTEsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTcKKyAgICAweDEuZWY0MTQ1YjRhZWNmZmJkYWFmZmI3OGZmYjQ5YWM5YmRwLTEsCisgICAgLTB4MS4wNjljOGI0NmIzNzkycC0yCisgIH0sCisgIHsgLy8gRW50cnkgODE4CisgICAgMHgxLmU1ZWFhMjg2ZmJiYzY3MGRiZjYzOTJkN2M5OGFiMGEwcC0xLAorICAgIDB4MS40ODQzYWUxODYwNTc2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgODE5CisgICAgMHgxLmU1ZWFhMjg2ZmJiYzY3MGRiZjYzOTJkN2M5OGFiMGEwcC0xLAorICAgIC0weDEuNDg0M2FlMTg2MDU3NnAtMgorICB9LAorICB7IC8vIEVudHJ5IDgyMAorICAgIDB4MS5kYTk0ZDU0ZGQ0YzA4NzZlMThlZTk3YzcwZDFhNGE5NHAtMSwKKyAgICAweDEuODllYWQwZWEwZDM1YXAtMgorICB9LAorICB7IC8vIEVudHJ5IDgyMQorICAgIDB4MS5kYTk0ZDU0ZGQ0YzA4NzZlMThlZTk3YzcwZDFhNGE5NHAtMSwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzNWFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjIKKyAgICAweDEuY2Q0YmNhOWNiNWM3MTUzMDIwMDFlNDQ2Y2M5M2E3YmNwLTEsCisgICAgMHgxLmNiOTFmM2JiYmExM2VwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjMKKyAgICAweDEuY2Q0YmNhOWNiNWM3MTUzMDIwMDFlNDQ2Y2M5M2E3YmNwLTEsCisgICAgLTB4MS5jYjkxZjNiYmJhMTNlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgODI0CisgICAgMHgxLmJlMWQ3YzM1MzRjNDAzMzFmZGRmMjQzZDhhMGE1NmIwcC0xLAorICAgIDB4MS4wNjljOGI0NmIzNzkxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODI1CisgICAgMHgxLmJlMWQ3YzM1MzRjNDAzMzFmZGRmMjQzZDhhMGE1NmIwcC0xLAorICAgIC0weDEuMDY5YzhiNDZiMzc5MXAtMQorICB9LAorICB7IC8vIEVudHJ5IDgyNgorICAgIDB4MS5hZDE5ZTI1MzVhYTk2NzhiZDVmZGFmYzY4ODE3NzAwYnAtMSwKKyAgICAweDEuMjc3MDFjYWY4OWU4M3AtMQorICB9LAorICB7IC8vIEVudHJ5IDgyNworICAgIDB4MS5hZDE5ZTI1MzVhYTk2NzhiZDVmZGFmYzY4ODE3NzAwYnAtMSwKKyAgICAtMHgxLjI3NzAxY2FmODllODNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjgKKyAgICAweDEuOWE1MmUyZTBmYmNiM2EzZjRiZGU2ZjZlYzI3NzY3YTlwLTEsCisgICAgMHgxLjQ4NDNhZTE4NjA1NzVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjkKKyAgICAweDEuOWE1MmUyZTBmYmNiM2EzZjRiZGU2ZjZlYzI3NzY3YTlwLTEsCisgICAgLTB4MS40ODQzYWUxODYwNTc1cC0xCisgIH0sCisgIHsgLy8gRW50cnkgODMwCisgICAgMHgxLjg1ZGMzZWExYmJjZTlhODA4NWY2NjU5M2E4N2I3ZTJlcC0xLAorICAgIDB4MS42OTE3M2Y4MTM2YzY3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgODMxCisgICAgMHgxLjg1ZGMzZWExYmJjZTlhODA4NWY2NjU5M2E4N2I3ZTJlcC0xLAorICAgIC0weDEuNjkxNzNmODEzNmM2N3AtMQorICB9LAorICB7IC8vIEVudHJ5IDgzMgorICAgIDB4MS42ZmNiN2M2YjhiOTE5YWYzZGRhNTMwOTRjOWEyN2FhYnAtMSwKKyAgICAweDEuODllYWQwZWEwZDM1OXAtMQorICB9LAorICB7IC8vIEVudHJ5IDgzMworICAgIDB4MS42ZmNiN2M2YjhiOTE5YWYzZGRhNTMwOTRjOWEyN2FhYnAtMSwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzNTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzQKKyAgICAweDEuNTgzN2QyODE3Y2YzMDNlZjZkYWU2OWZhZWIwZjAxNWVwLTEsCisgICAgMHgxLmFhYmU2MjUyZTNhNGJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzUKKyAgICAweDEuNTgzN2QyODE3Y2YzMDNlZjZkYWU2OWZhZWIwZjAxNWVwLTEsCisgICAgLTB4MS5hYWJlNjI1MmUzYTRicC0xCisgIH0sCisgIHsgLy8gRW50cnkgODM2CisgICAgMHgxLjNmM2EwZTI4YmVkZDQwNDQ1ODU4ZjgyM2UxNTAyNjRicC0xLAorICAgIDB4MS5jYjkxZjNiYmJhMTNkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODM3CisgICAgMHgxLjNmM2EwZTI4YmVkZDQwNDQ1ODU4ZjgyM2UxNTAyNjRicC0xLAorICAgIC0weDEuY2I5MWYzYmJiYTEzZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDgzOAorICAgIDB4MS4yNGVjNzk5MTcxNjQyZGJkMjRkMjU5MDA1ODIyYmQyNXAtMSwKKyAgICAweDEuZWM2NTg1MjQ5MDgyZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDgzOQorICAgIDB4MS4yNGVjNzk5MTcxNjQyZGJkMjRkMjU5MDA1ODIyYmQyNXAtMSwKKyAgICAtMHgxLmVjNjU4NTI0OTA4MmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDAKKyAgICAweDEuMDk2YWMwMmVjNDJjODViN2IxMGFmZWQ5MjAyNzg1YjlwLTEsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTFwMAorICB9LAorICB7IC8vIEVudHJ5IDg0MQorICAgIDB4MS4wOTZhYzAyZWM0MmM4NWI3YjEwYWZlZDkyMDI3ODViOXAtMSwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3OTFwMAorICB9LAorICB7IC8vIEVudHJ5IDg0MgorICAgIDB4MS5kOWEzYTMzNmVkYjc2MTNkZjA2MmU4NmEzMmQwOWZlMXAtMiwKKyAgICAweDEuMTcwNjUzZmIxZWIwYXAwCisgIH0sCisgIHsgLy8gRW50cnkgODQzCisgICAgMHgxLmQ5YTNhMzM2ZWRiNzYxM2RmMDYyZTg2YTMyZDA5ZmUxcC0yLAorICAgIC0weDEuMTcwNjUzZmIxZWIwYXAwCisgIH0sCisgIHsgLy8gRW50cnkgODQ0CisgICAgMHgxLjllN2Y4NjUyYjQ3NTgyYWZkMjk3NDQyOTMxNzBjMDdjcC0yLAorICAgIDB4MS4yNzcwMWNhZjg5ZTgzcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDUKKyAgICAweDEuOWU3Zjg2NTJiNDc1ODJhZmQyOTc0NDI5MzE3MGMwN2NwLTIsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTgzcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDYKKyAgICAweDEuNjFhNzYwNzdhZWUwN2JiMzQ5Y2E3NmNmNzAwOTEzZDFwLTIsCisgICAgMHgxLjM3ZDllNTYzZjUxZmNwMAorICB9LAorICB7IC8vIEVudHJ5IDg0NworICAgIDB4MS42MWE3NjA3N2FlZTA3YmIzNDljYTc2Y2Y3MDA5MTNkMXAtMiwKKyAgICAtMHgxLjM3ZDllNTYzZjUxZmNwMAorICB9LAorICB7IC8vIEVudHJ5IDg0OAorICAgIDB4MS4yMzViMzMxZDhmNzQ4ZTIwZmI2ZGRiNmE3MDhkYmExMHAtMiwKKyAgICAweDEuNDg0M2FlMTg2MDU3NXAwCisgIH0sCisgIHsgLy8gRW50cnkgODQ5CisgICAgMHgxLjIzNWIzMzFkOGY3NDhlMjBmYjZkZGI2YTcwOGRiYTEwcC0yLAorICAgIC0weDEuNDg0M2FlMTg2MDU3NXAwCisgIH0sCisgIHsgLy8gRW50cnkgODUwCisgICAgMHgxLmM3YjkwZTMwMjQ1OTNkYTg0NDk5NjNjZmUwOGRkZTg1cC0zLAorICAgIDB4MS41OGFkNzZjY2NiOGVlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTEKKyAgICAweDEuYzdiOTBlMzAyNDU5M2RhODQ0OTk2M2NmZTA4ZGRlODVwLTMsCisgICAgLTB4MS41OGFkNzZjY2NiOGVlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTIKKyAgICAweDEuNDZkYzRmNGNlODNkYTcyN2VhMDQ4Y2M3ZDJmMjc2ZDFwLTMsCisgICAgMHgxLjY5MTczZjgxMzZjNjdwMAorICB9LAorICB7IC8vIEVudHJ5IDg1MworICAgIDB4MS40NmRjNGY0Y2U4M2RhNzI3ZWEwNDhjYzdkMmYyNzZkMXAtMywKKyAgICAtMHgxLjY5MTczZjgxMzZjNjdwMAorICB9LAorICB7IC8vIEVudHJ5IDg1NAorICAgIDB4MS44OTRmNzBiZWZiYjk5YWI3ZGY5ZDE3OTBhMjhmNDhhZHAtNCwKKyAgICAweDEuNzk4MTA4MzVhMWZlMHAwCisgIH0sCisgIHsgLy8gRW50cnkgODU1CisgICAgMHgxLjg5NGY3MGJlZmJiOTlhYjdkZjlkMTc5MGEyOGY0OGFkcC00LAorICAgIC0weDEuNzk4MTA4MzVhMWZlMHAwCisgIH0sCisgIHsgLy8gRW50cnkgODU2CisgICAgMHgxLjA2OTEwN2FlOTMzMmY5NWZhMmM1Y2VlYWRmYjI5Zjc3cC01LAorICAgIDB4MS44OWVhZDBlYTBkMzU5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTcKKyAgICAweDEuMDY5MTA3YWU5MzMyZjk1ZmEyYzVjZWVhZGZiMjlmNzdwLTUsCisgICAgLTB4MS44OWVhZDBlYTBkMzU5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTgKKyAgICAtMHgxLjA2OTEwN2FlOTMyN2UwNzMxYTc0OGMyMWYwM2I1ZWZjcC01LAorICAgIDB4MS45YTU0OTk5ZTc4NmQycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTkKKyAgICAtMHgxLjA2OTEwN2FlOTMyN2UwNzMxYTc0OGMyMWYwM2I1ZWZjcC01LAorICAgIC0weDEuOWE1NDk5OWU3ODZkMnAwCisgIH0sCisgIHsgLy8gRW50cnkgODYwCisgICAgLTB4MS44OTRmNzBiZWZiYjQxNDE3ZGZmODQzZTgxZmFjMzg4YnAtNCwKKyAgICAweDEuYWFiZTYyNTJlM2E0YnAwCisgIH0sCisgIHsgLy8gRW50cnkgODYxCisgICAgLTB4MS44OTRmNzBiZWZiYjQxNDE3ZGZmODQzZTgxZmFjMzg4YnAtNCwKKyAgICAtMHgxLmFhYmU2MjUyZTNhNGJwMAorICB9LAorICB7IC8vIEVudHJ5IDg2MgorICAgIC0weDEuNDZkYzRmNGNlODNhZTlhYjFjYzFiMjM2N2NiNzUzZWJwLTMsCisgICAgMHgxLmJiMjgyYjA3NGVkYzRwMAorICB9LAorICB7IC8vIEVudHJ5IDg2MworICAgIC0weDEuNDZkYzRmNGNlODNhZTlhYjFjYzFiMjM2N2NiNzUzZWJwLTMsCisgICAgLTB4MS5iYjI4MmIwNzRlZGM0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjQKKyAgICAtMHgxLmM3YjkwZTMwMjQ1Njg4ZTA5OTg2MGU4ZDRmZmY2MDFjcC0zLAorICAgIDB4MS5jYjkxZjNiYmJhMTNkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjUKKyAgICAtMHgxLmM3YjkwZTMwMjQ1Njg4ZTA5OTg2MGU4ZDRmZmY2MDFjcC0zLAorICAgIC0weDEuY2I5MWYzYmJiYTEzZHAwCisgIH0sCisgIHsgLy8gRW50cnkgODY2CisgICAgLTB4MS4yMzViMzMxZDhmNzMzOTg0MWE1MTczMTJkMGQzNDdmYnAtMiwKKyAgICAweDEuZGJmYmJjNzAyNTRiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgODY3CisgICAgLTB4MS4yMzViMzMxZDhmNzMzOTg0MWE1MTczMTJkMGQzNDdmYnAtMiwKKyAgICAtMHgxLmRiZmJiYzcwMjU0YjZwMAorICB9LAorICB7IC8vIEVudHJ5IDg2OAorICAgIC0weDEuNjFhNzYwNzdhZWRmMmU0M2FjYTQxOGY3YTJlMTMyNGRwLTIsCisgICAgMHgxLmVjNjU4NTI0OTA4MmZwMAorICB9LAorICB7IC8vIEVudHJ5IDg2OQorICAgIC0weDEuNjFhNzYwNzdhZWRmMmU0M2FjYTQxOGY3YTJlMTMyNGRwLTIsCisgICAgLTB4MS5lYzY1ODUyNDkwODJmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzAKKyAgICAtMHgxLjllN2Y4NjUyYjQ3NDNkY2MzYzM1NjhiYWZmOGJmOWVicC0yLAorICAgIDB4MS5mY2NmNGRkOGZiYmE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzEKKyAgICAtMHgxLjllN2Y4NjUyYjQ3NDNkY2MzYzM1NjhiYWZmOGJmOWVicC0yLAorICAgIC0weDEuZmNjZjRkZDhmYmJhOHAwCisgIH0sCisgIHsgLy8gRW50cnkgODcyCisgICAgLTB4MS5kOWEzYTMzNmVkYjY1ZWZhMzBlMWE2Njc5YWEwNjRjMnAtMiwKKyAgICAweDEuMDY5YzhiNDZiMzc5MXAxCisgIH0sCisgIHsgLy8gRW50cnkgODczCisgICAgLTB4MS5kOWEzYTMzNmVkYjY1ZWZhMzBlMWE2Njc5YWEwNjRjMnAtMiwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3OTFwMQorICB9LAorICB7IC8vIEVudHJ5IDg3NAorICAgIC0weDEuMDk2YWMwMmVjNDJjMjQ4ODBhNTk1MTc4OGNiMzgzYzhwLTEsCisgICAgMHgxLjBlZDE2ZmEwZTkxNGVwMQorICB9LAorICB7IC8vIEVudHJ5IDg3NQorICAgIC0weDEuMDk2YWMwMmVjNDJjMjQ4ODBhNTk1MTc4OGNiMzgzYzhwLTEsCisgICAgLTB4MS4wZWQxNmZhMGU5MTRlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzYKKyAgICAtMHgxLjI0ZWM3OTkxNzE2M2RkYTY1YWZkODEwOWY1OWNiNDY1cC0xLAorICAgIDB4MS4xNzA2NTNmYjFlYjBicDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzcKKyAgICAtMHgxLjI0ZWM3OTkxNzE2M2RkYTY1YWZkODEwOWY1OWNiNDY1cC0xLAorICAgIC0weDEuMTcwNjUzZmIxZWIwYnAxCisgIH0sCisgIHsgLy8gRW50cnkgODc4CisgICAgLTB4MS4zZjNhMGUyOGJlZGQwY2YwYzRiZmJkOGM4MmEzYmFhZnAtMSwKKyAgICAweDEuMWYzYjM4NTU1NDRjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgODc5CisgICAgLTB4MS4zZjNhMGUyOGJlZGQwY2YwYzRiZmJkOGM4MmEzYmFhZnAtMSwKKyAgICAtMHgxLjFmM2IzODU1NTQ0YzhwMQorICB9LAorICB7IC8vIEVudHJ5IDg4MAorICAgIC0weDEuNTgzN2QyODE3Y2YyZWIwNjkwMzU1NTJkYzNhZTgzNGNwLTEsCisgICAgMHgxLjI3NzAxY2FmODllODVwMQorICB9LAorICB7IC8vIEVudHJ5IDg4MQorICAgIC0weDEuNTgzN2QyODE3Y2YyZWIwNjkwMzU1NTJkYzNhZTgzNGNwLTEsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTg1cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODIKKyAgICAtMHgxLjZmY2I3YzZiOGI5MTk5Y2UyZjE3ZGQzZWU4NmIzYjlhcC0xLAorICAgIDB4MS4yZmE1MDEwOWJmODQycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODMKKyAgICAtMHgxLjZmY2I3YzZiOGI5MTk5Y2UyZjE3ZGQzZWU4NmIzYjlhcC0xLAorICAgIC0weDEuMmZhNTAxMDliZjg0MnAxCisgIH0sCisgIHsgLy8gRW50cnkgODg0CisgICAgLTB4MS44NWRjM2VhMWJiY2VhZTJkMjk0NDIxZThjNzM1MGY4Y3AtMSwKKyAgICAweDEuMzdkOWU1NjNmNTFmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgODg1CisgICAgLTB4MS44NWRjM2VhMWJiY2VhZTJkMjk0NDIxZThjNzM1MGY4Y3AtMSwKKyAgICAtMHgxLjM3ZDllNTYzZjUxZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDg4NgorICAgIC0weDEuOWE1MmUyZTBmYmNiNWY4YTNmNTVjMjc0ZjllYzc1NGJwLTEsCisgICAgMHgxLjQwMGVjOWJlMmFiYmNwMQorICB9LAorICB7IC8vIEVudHJ5IDg4NworICAgIC0weDEuOWE1MmUyZTBmYmNiNWY4YTNmNTVjMjc0ZjllYzc1NGJwLTEsCisgICAgLTB4MS40MDBlYzliZTJhYmJjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODgKKyAgICAtMHgxLmFkMTllMjUzNWFhOTliMDQ5YWMwYjU4NThjNWQzODFmcC0xLAorICAgIDB4MS40ODQzYWUxODYwNTc5cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODkKKyAgICAtMHgxLmFkMTllMjUzNWFhOTliMDQ5YWMwYjU4NThjNWQzODFmcC0xLAorICAgIC0weDEuNDg0M2FlMTg2MDU3OXAxCisgIH0sCisgIHsgLy8gRW50cnkgODkwCisgICAgLTB4MS5iZTFkN2MzNTM0YzQ0MTMyYWIxYzQxMzBjYmU5ZGZhMHAtMSwKKyAgICAweDEuNTA3ODkyNzI5NWYzNnAxCisgIH0sCisgIHsgLy8gRW50cnkgODkxCisgICAgLTB4MS5iZTFkN2MzNTM0YzQ0MTMyYWIxYzQxMzBjYmU5ZGZhMHAtMSwKKyAgICAtMHgxLjUwNzg5MjcyOTVmMzZwMQorICB9LAorICB7IC8vIEVudHJ5IDg5MgorICAgIC0weDEuY2Q0YmNhOWNiNWM3NTllNGQ2ZGM4NjAxZWMzZDg0YjZwLTEsCisgICAgMHgxLjU4YWQ3NmNjY2I4ZjNwMQorICB9LAorICB7IC8vIEVudHJ5IDg5MworICAgIC0weDEuY2Q0YmNhOWNiNWM3NTllNGQ2ZGM4NjAxZWMzZDg0YjZwLTEsCisgICAgLTB4MS41OGFkNzZjY2NiOGYzcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTQKKyAgICAtMHgxLmRhOTRkNTRkZDRjMGNlZGNjZDczNjg0OTk0NDIyNzQwcC0xLAorICAgIDB4MS42MGUyNWIyNzAxMmIwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTUKKyAgICAtMHgxLmRhOTRkNTRkZDRjMGNlZGNjZDczNjg0OTk0NDIyNzQwcC0xLAorICAgIC0weDEuNjBlMjViMjcwMTJiMHAxCisgIH0sCisgIHsgLy8gRW50cnkgODk2CisgICAgLTB4MS5lNWVhYTI4NmZiYmNhZDFlNGE2MzczMzkyZTY3OTY2OXAtMSwKKyAgICAweDEuNjkxNzNmODEzNmM2ZHAxCisgIH0sCisgIHsgLy8gRW50cnkgODk3CisgICAgLTB4MS5lNWVhYTI4NmZiYmNhZDFlNGE2MzczMzkyZTY3OTY2OXAtMSwKKyAgICAtMHgxLjY5MTczZjgxMzZjNmRwMQorICB9LAorICB7IC8vIEVudHJ5IDg5OAorICAgIC0weDEuZWY0MTQ1YjRhZWQwM2M1ZjFkMzk3NjNiMWVlZTZlZDhwLTEsCisgICAgMHgxLjcxNGMyM2RiNmM2MmFwMQorICB9LAorICB7IC8vIEVudHJ5IDg5OQorICAgIC0weDEuZWY0MTQ1YjRhZWQwM2M1ZjFkMzk3NjNiMWVlZTZlZDhwLTEsCisgICAgLTB4MS43MTRjMjNkYjZjNjJhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDAKKyAgICAtMHgxLmY2OGVlYmZjYmI1ZWJhMTI0ZDhjYzQ4ZmQxYmViMDRkcC0xLAorICAgIDB4MS43OTgxMDgzNWExZmU3cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDEKKyAgICAtMHgxLmY2OGVlYmZjYmI1ZWJhMTI0ZDhjYzQ4ZmQxYmViMDRkcC0xLAorICAgIC0weDEuNzk4MTA4MzVhMWZlN3AxCisgIH0sCisgIHsgLy8gRW50cnkgOTAyCisgICAgLTB4MS5mYmNiZTY5M2JkOGVmMDA2ZjVmZjAyMjEwZGZlMDYxOXAtMSwKKyAgICAweDEuODFiNWVjOGZkNzlhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTAzCisgICAgLTB4MS5mYmNiZTY5M2JkOGVmMDA2ZjVmZjAyMjEwZGZlMDYxOXAtMSwKKyAgICAtMHgxLjgxYjVlYzhmZDc5YTRwMQorICB9LAorICB7IC8vIEVudHJ5IDkwNAorICAgIC0weDEuZmVmMmIyZDIxY2Y2YmUxYTJjN2VhNjY1ZWYxZjg3NGVwLTEsCisgICAgMHgxLjg5ZWFkMGVhMGQzNWJwMQorICB9LAorICB7IC8vIEVudHJ5IDkwNQorICAgIC0weDEuZmVmMmIyZDIxY2Y2YmUxYTJjN2VhNjY1ZWYxZjg3NGVwLTEsCisgICAgLTB4MS44OWVhZDBlYTBkMzVicDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDYKKyAgICAweDEuZWY0MTQ1YjRhZWNmZjZmNThlZGVjZjI0OTU1NDI4YzFwLTEsCisgICAgLTB4MS44MWI1ZWM4ZmQ3OTlmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDcKKyAgICAweDEuZWY0MTQ1YjRhZWNmZjZmNThlZGVjZjI0OTU1NDI4YzFwLTEsCisgICAgMHgxLjgxYjVlYzhmZDc5OWZwMgorICB9LAorICB7IC8vIEVudHJ5IDkwOAorICAgIDB4MS5iZTFkN2MzNTM0YzNmOWI5YjM1NjE5MjgwMDQ5ZGU4NXAtMSwKKyAgICAtMHgxLjcxNGMyM2RiNmM2MjZwMgorICB9LAorICB7IC8vIEVudHJ5IDkwOQorICAgIDB4MS5iZTFkN2MzNTM0YzNmOWI5YjM1NjE5MjgwMDQ5ZGU4NXAtMSwKKyAgICAweDEuNzE0YzIzZGI2YzYyNnAyCisgIH0sCisgIHsgLy8gRW50cnkgOTEwCisgICAgMHgxLjZmY2I3YzZiOGI5MThkODZmYzgzZDYxMmE2NTg3ZWRkcC0xLAorICAgIC0weDEuNjBlMjViMjcwMTJhZHAyCisgIH0sCisgIHsgLy8gRW50cnkgOTExCisgICAgMHgxLjZmY2I3YzZiOGI5MThkODZmYzgzZDYxMmE2NTg3ZWRkcC0xLAorICAgIDB4MS42MGUyNWIyNzAxMmFkcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTIKKyAgICAweDEuMDk2YWMwMmVjNDJjODJlNWIyMjUxODViZDZjNzU3ZDVwLTEsCisgICAgLTB4MS41MDc4OTI3Mjk1ZjM0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTMKKyAgICAweDEuMDk2YWMwMmVjNDJjODJlNWIyMjUxODViZDZjNzU3ZDVwLTEsCisgICAgMHgxLjUwNzg5MjcyOTVmMzRwMgorICB9LAorICB7IC8vIEVudHJ5IDkxNAorICAgIDB4MS4yMzViMzMxZDhmNzQ4N2NlMmRiOTc4MTlmYWU3Nzc3Y3AtMiwKKyAgICAtMHgxLjQwMGVjOWJlMmFiYmJwMgorICB9LAorICB7IC8vIEVudHJ5IDkxNQorICAgIDB4MS4yMzViMzMxZDhmNzQ4N2NlMmRiOTc4MTlmYWU3Nzc3Y3AtMiwKKyAgICAweDEuNDAwZWM5YmUyYWJiYnAyCisgIH0sCisgIHsgLy8gRW50cnkgOTE2CisgICAgMHgxLjA2OTEwN2FlOTMzMmM0YTFjZDJkYzAzM2I4ZDUwNTk4cC01LAorICAgIC0weDEuMmZhNTAxMDliZjg0MnAyCisgIH0sCisgIHsgLy8gRW50cnkgOTE3CisgICAgMHgxLjA2OTEwN2FlOTMzMmM0YTFjZDJkYzAzM2I4ZDUwNTk4cC01LAorICAgIDB4MS4yZmE1MDEwOWJmODQycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTgKKyAgICAtMHgxLmM3YjkwZTMwMjQ1Njk1YmQxZWMxNzBmNDVmZWViMWZmcC0zLAorICAgIC0weDEuMWYzYjM4NTU1NDRjOXAyCisgIH0sCisgIHsgLy8gRW50cnkgOTE5CisgICAgLTB4MS5jN2I5MGUzMDI0NTY5NWJkMWVjMTcwZjQ1ZmVlYjFmZnAtMywKKyAgICAweDEuMWYzYjM4NTU1NDRjOXAyCisgIH0sCisgIHsgLy8gRW50cnkgOTIwCisgICAgLTB4MS5kOWEzYTMzNmVkYjYyYzE1NDFiODU4NGNkNmMwMGY4N3AtMiwKKyAgICAtMHgxLjBlZDE2ZmEwZTkxNTBwMgorICB9LAorICB7IC8vIEVudHJ5IDkyMQorICAgIC0weDEuZDlhM2EzMzZlZGI2MmMxNTQxYjg1ODRjZDZjMDBmODdwLTIsCisgICAgMHgxLjBlZDE2ZmEwZTkxNTBwMgorICB9LAorICB7IC8vIEVudHJ5IDkyMgorICAgIC0weDEuNTgzN2QyODE3Y2YyNzcwNWNhYzc4ODFmYjU2OWZmYzdwLTEsCisgICAgLTB4MS5mY2NmNGRkOGZiYmFlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjMKKyAgICAtMHgxLjU4MzdkMjgxN2NmMjc3MDVjYWM3ODgxZmI1NjlmZmM3cC0xLAorICAgIDB4MS5mY2NmNGRkOGZiYmFlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjQKKyAgICAtMHgxLmFkMTllMjUzNWFhOGZmYjQwMDY2ZDc4YWVmNzFmYWJkcC0xLAorICAgIC0weDEuZGJmYmJjNzAyNTRiY3AxCisgIH0sCisgIHsgLy8gRW50cnkgOTI1CisgICAgLTB4MS5hZDE5ZTI1MzVhYThmZmI0MDA2NmQ3OGFlZjcxZmFiZHAtMSwKKyAgICAweDEuZGJmYmJjNzAyNTRiY3AxCisgIH0sCisgIHsgLy8gRW50cnkgOTI2CisgICAgLTB4MS5lNWVhYTI4NmZiYmMyYjEyOTIzODE2MGRmMzBjZTcwNHAtMSwKKyAgICAtMHgxLmJiMjgyYjA3NGVkY2FwMQorICB9LAorICB7IC8vIEVudHJ5IDkyNworICAgIC0weDEuZTVlYWEyODZmYmJjMmIxMjkyMzgxNjBkZjMwY2U3MDRwLTEsCisgICAgMHgxLmJiMjgyYjA3NGVkY2FwMQorICB9LAorICB7IC8vIEVudHJ5IDkyOAorICAgIC0weDEuZmVmMmIyZDIxY2Y2YjQwZmYzYjUzMGNlOGRjMGQ4YTdwLTEsCisgICAgLTB4MS45YTU0OTk5ZTc4NmQ4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjkKKyAgICAtMHgxLmZlZjJiMmQyMWNmNmI0MGZmM2I1MzBjZThkYzBkOGE3cC0xLAorICAgIDB4MS45YTU0OTk5ZTc4NmQ4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzAKKyAgICAtMHgxLmY2OGVlYmZjYmI1ZWFkZDY1YzI2MWNkODAzOTkwYWUxcC0xLAorICAgIC0weDEuNzk4MTA4MzVhMWZlNnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTMxCisgICAgLTB4MS5mNjhlZWJmY2JiNWVhZGQ2NWMyNjFjZDgwMzk5MGFlMXAtMSwKKyAgICAweDEuNzk4MTA4MzVhMWZlNnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTMyCisgICAgLTB4MS5jZDRiY2E5Y2I1Yzc3NWE5OTcyOWY3YWQ5NWI3ZGNlM3AtMSwKKyAgICAtMHgxLjU4YWQ3NmNjY2I4ZjRwMQorICB9LAorICB7IC8vIEVudHJ5IDkzMworICAgIC0weDEuY2Q0YmNhOWNiNWM3NzVhOTk3MjlmN2FkOTViN2RjZTNwLTEsCisgICAgMHgxLjU4YWQ3NmNjY2I4ZjRwMQorICB9LAorICB7IC8vIEVudHJ5IDkzNAorICAgIC0weDEuODVkYzNlYTFiYmNmMmFhMmUyMWVjNTg2ZDU0OTdlMzVwLTEsCisgICAgLTB4MS4zN2Q5ZTU2M2Y1MjAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzUKKyAgICAtMHgxLjg1ZGMzZWExYmJjZjJhYTJlMjFlYzU4NmQ1NDk3ZTM1cC0xLAorICAgIDB4MS4zN2Q5ZTU2M2Y1MjAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzYKKyAgICAtMHgxLjI0ZWM3OTkxNzE2NGU0MWFkZGQ0YmFjZDQ0MjBmOWZicC0xLAorICAgIC0weDEuMTcwNjUzZmIxZWIxMHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTM3CisgICAgLTB4MS4yNGVjNzk5MTcxNjRlNDFhZGRkNGJhY2Q0NDIwZjlmYnAtMSwKKyAgICAweDEuMTcwNjUzZmIxZWIxMHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTM4CisgICAgLTB4MS42MWE3NjA3N2FlZTIzYjExZjBjNjczZjYzODAwM2IwYXAtMiwKKyAgICAtMHgxLmVjNjU4NTI0OTA4M2NwMAorICB9LAorICB7IC8vIEVudHJ5IDkzOQorICAgIC0weDEuNjFhNzYwNzdhZWUyM2IxMWYwYzY3M2Y2MzgwMDNiMGFwLTIsCisgICAgMHgxLmVjNjU4NTI0OTA4M2NwMAorICB9LAorICB7IC8vIEVudHJ5IDk0MAorICAgIC0weDEuODk0ZjcwYmVmYmMxMDRiNzA2ZTg1Y2Y0YzFjOTZhNTJwLTQsCisgICAgLTB4MS5hYWJlNjI1MmUzYTU4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDEKKyAgICAtMHgxLjg5NGY3MGJlZmJjMTA0YjcwNmU4NWNmNGMxYzk2YTUycC00LAorICAgIDB4MS5hYWJlNjI1MmUzYTU4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDIKKyAgICAweDEuNDZkYzRmNGNlODM3M2M3YzQ0ZjEzYjU3MzYzZWRkM2JwLTMsCisgICAgLTB4MS42OTE3M2Y4MTM2Yzc0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDMKKyAgICAweDEuNDZkYzRmNGNlODM3M2M3YzQ0ZjEzYjU3MzYzZWRkM2JwLTMsCisgICAgMHgxLjY5MTczZjgxMzZjNzRwMAorICB9LAorICB7IC8vIEVudHJ5IDk0NAorICAgIDB4MS45ZTdmODY1MmI0NzI4OWU1M2ZjY2Q1NDk1NWRiNDU1MnAtMiwKKyAgICAtMHgxLjI3NzAxY2FmODllOTBwMAorICB9LAorICB7IC8vIEVudHJ5IDk0NQorICAgIDB4MS45ZTdmODY1MmI0NzI4OWU1M2ZjY2Q1NDk1NWRiNDU1MnAtMiwKKyAgICAweDEuMjc3MDFjYWY4OWU5MHAwCisgIH0sCisgIHsgLy8gRW50cnkgOTQ2CisgICAgMHgxLjNmM2EwZTI4YmVkYmZiMDY2YjY3YWJkOWMzMzg0MDllcC0xLAorICAgIC0weDEuY2I5MWYzYmJiYTE1N3AtMQorICB9LAorICB7IC8vIEVudHJ5IDk0NworICAgIDB4MS4zZjNhMGUyOGJlZGJmYjA2NmI2N2FiZDljMzM4NDA5ZXAtMSwKKyAgICAweDEuY2I5MWYzYmJiYTE1N3AtMQorICB9LAorICB7IC8vIEVudHJ5IDk0OAorICAgIDB4MS45YTUyZTJlMGZiY2E0YjAwYzcyZGFhM2NkYWNhMjU3Y3AtMSwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1OGVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDkKKyAgICAweDEuOWE1MmUyZTBmYmNhNGIwMGM3MmRhYTNjZGFjYTI1N2NwLTEsCisgICAgMHgxLjQ4NDNhZTE4NjA1OGVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTAKKyAgICAweDEuZGE5NGQ1NGRkNGJmZjc1M2Q5ODhjMTc1NWUyZmZjMDRwLTEsCisgICAgLTB4MS44OWVhZDBlYTBkMzhhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgOTUxCisgICAgMHgxLmRhOTRkNTRkZDRiZmY3NTNkOTg4YzE3NTVlMmZmYzA0cC0xLAorICAgIDB4MS44OWVhZDBlYTBkMzhhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgOTUyCisgICAgMHgxLmZiY2JlNjkzYmQ4ZTk4NDIzMjA3ZTM2NTg3ZDk0MmI3cC0xLAorICAgIC0weDEuMDY5YzhiNDZiMzdmMHAtMworICB9LAorICB7IC8vIEVudHJ5IDk1MworICAgIDB4MS5mYmNiZTY5M2JkOGU5ODQyMzIwN2UzNjU4N2Q5NDJiN3AtMSwKKyAgICAweDEuMDY5YzhiNDZiMzdmMHAtMworICB9LAorICB7IC8vIEVudHJ5IDk1NAorICAgIDB4MS5mYmNiZTY5M2JkOGVmODZjMTU2NWIzNDUzMDM2ZTU1ZXAtMSwKKyAgICAweDEuMDY5YzhiNDZiMzczNHAtMworICB9LAorICB7IC8vIEVudHJ5IDk1NQorICAgIDB4MS5mYmNiZTY5M2JkOGVmODZjMTU2NWIzNDUzMDM2ZTU1ZXAtMSwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3MzRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTYKKyAgICAweDEuZGE5NGQ1NGRkNGMxMTE4NzQwNWFkYTdmMDRlNWIxNzFwLTEsCisgICAgMHgxLjg5ZWFkMGVhMGQzMmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTcKKyAgICAweDEuZGE5NGQ1NGRkNGMxMTE4NzQwNWFkYTdmMDRlNWIxNzFwLTEsCisgICAgLTB4MS44OWVhZDBlYTBkMzJjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgOTU4CisgICAgMHgxLjlhNTJlMmUwZmJjYzBjYzgzYjg0M2JhZTU4YzZjZGY4cC0xLAorICAgIDB4MS40ODQzYWUxODYwNTVmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTU5CisgICAgMHgxLjlhNTJlMmUwZmJjYzBjYzgzYjg0M2JhZTU4YzZjZGY4cC0xLAorICAgIC0weDEuNDg0M2FlMTg2MDU1ZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDk2MAorICAgIDB4MS4zZjNhMGUyOGJlZGU0NmY2NWNhNWI1YzE5YWQ5OWRkN3AtMSwKKyAgICAweDEuY2I5MWYzYmJiYTEyOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDk2MQorICAgIDB4MS4zZjNhMGUyOGJlZGU0NmY2NWNhNWI1YzE5YWQ5OWRkN3AtMSwKKyAgICAtMHgxLmNiOTFmM2JiYmExMjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjIKKyAgICAweDEuOWU3Zjg2NTJiNDc4MDY2ZWVjNTYzZjgzNTA5N2YxNDhwLTIsCisgICAgMHgxLjI3NzAxY2FmODllNzhwMAorICB9LAorICB7IC8vIEVudHJ5IDk2MworICAgIDB4MS45ZTdmODY1MmI0NzgwNjZlZWM1NjNmODM1MDk3ZjE0OHAtMiwKKyAgICAtMHgxLjI3NzAxY2FmODllNzhwMAorICB9LAorICB7IC8vIEVudHJ5IDk2NAorICAgIDB4MS40NmRjNGY0Y2U4NDMxNTFiOWQxNGU1NjE4NzllNWZlM3AtMywKKyAgICAweDEuNjkxNzNmODEzNmM1Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgOTY1CisgICAgMHgxLjQ2ZGM0ZjRjZTg0MzE1MWI5ZDE0ZTU2MTg3OWU1ZmUzcC0zLAorICAgIC0weDEuNjkxNzNmODEzNmM1Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgOTY2CisgICAgLTB4MS44OTRmNzBiZWZiYTkyMTFiMGRjYWE0ZGNhNDUwNjcwZnAtNCwKKyAgICAweDEuYWFiZTYyNTJlM2E0MHAwCisgIH0sCisgIHsgLy8gRW50cnkgOTY3CisgICAgLTB4MS44OTRmNzBiZWZiYTkyMTFiMGRjYWE0ZGNhNDUwNjcwZnAtNCwKKyAgICAtMHgxLmFhYmU2MjUyZTNhNDBwMAorICB9LAorICB7IC8vIEVudHJ5IDk2OAorICAgIC0weDEuNjFhNzYwNzdhZWRjOTk5NTI0Mzg0MjFmODIwYTJiZWZwLTIsCisgICAgMHgxLmVjNjU4NTI0OTA4MjRwMAorICB9LAorICB7IC8vIEVudHJ5IDk2OQorICAgIC0weDEuNjFhNzYwNzdhZWRjOTk5NTI0Mzg0MjFmODIwYTJiZWZwLTIsCisgICAgLTB4MS5lYzY1ODUyNDkwODI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzAKKyAgICAtMHgxLjI0ZWM3OTkxNzE2MjZlMzY3MDljZmNmN2M3NzUyMzMycC0xLAorICAgIDB4MS4xNzA2NTNmYjFlYjA0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzEKKyAgICAtMHgxLjI0ZWM3OTkxNzE2MjZlMzY3MDljZmNmN2M3NzUyMzMycC0xLAorICAgIC0weDEuMTcwNjUzZmIxZWIwNHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTcyCisgICAgLTB4MS44NWRjM2VhMWJiY2QzOGNiZmViNDM3MGQ1NDA1ZWViYXAtMSwKKyAgICAweDEuMzdkOWU1NjNmNTFmNnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTczCisgICAgLTB4MS44NWRjM2VhMWJiY2QzOGNiZmViNDM3MGQ1NDA1ZWViYXAtMSwKKyAgICAtMHgxLjM3ZDllNTYzZjUxZjZwMQorICB9LAorICB7IC8vIEVudHJ5IDk3NAorICAgIC0weDEuY2Q0YmNhOWNiNWM2Mjg3MDkzODhhMzlmYzg0NTkxZDFwLTEsCisgICAgMHgxLjU4YWQ3NmNjY2I4ZThwMQorICB9LAorICB7IC8vIEVudHJ5IDk3NQorICAgIC0weDEuY2Q0YmNhOWNiNWM2Mjg3MDkzODhhMzlmYzg0NTkxZDFwLTEsCisgICAgLTB4MS41OGFkNzZjY2NiOGU4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzYKKyAgICAtMHgxLmY2OGVlYmZjYmI1ZTFiMDcwYjU2NDAzN2Y1NTcxYTM5cC0xLAorICAgIDB4MS43OTgxMDgzNWExZmRhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzcKKyAgICAtMHgxLmY2OGVlYmZjYmI1ZTFiMDcwYjU2NDAzN2Y1NTcxYTM5cC0xLAorICAgIC0weDEuNzk4MTA4MzVhMWZkYXAxCisgIH0sCisgIHsgLy8gRW50cnkgOTc4CisgICAgLTB4MS5mZWYyYjJkMjFjZjZlNTQ0YWI3Nzk1YWVkMTBkOWZhN3AtMSwKKyAgICAweDEuOWE1NDk5OWU3ODZjY3AxCisgIH0sCisgIHsgLy8gRW50cnkgOTc5CisgICAgLTB4MS5mZWYyYjJkMjFjZjZlNTQ0YWI3Nzk1YWVkMTBkOWZhN3AtMSwKKyAgICAtMHgxLjlhNTQ5OTllNzg2Y2NwMQorICB9LAorICB7IC8vIEVudHJ5IDk4MAorICAgIC0weDEuZTVlYWEyODZmYmJkMWQxMzVlMjE2YzQ5YTlmN2U1ZGFwLTEsCisgICAgMHgxLmJiMjgyYjA3NGVkYmVwMQorICB9LAorICB7IC8vIEVudHJ5IDk4MQorICAgIC0weDEuZTVlYWEyODZmYmJkMWQxMzVlMjE2YzQ5YTlmN2U1ZGFwLTEsCisgICAgLTB4MS5iYjI4MmIwNzRlZGJlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODIKKyAgICAtMHgxLmFkMTllMjUzNWFhYWEyYWM4NzA1NmI2ZDc3NzZlOTdhcC0xLAorICAgIDB4MS5kYmZiYmM3MDI1NGIwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODMKKyAgICAtMHgxLmFkMTllMjUzNWFhYWEyYWM4NzA1NmI2ZDc3NzZlOTdhcC0xLAorICAgIC0weDEuZGJmYmJjNzAyNTRiMHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTg0CisgICAgLTB4MS41ODM3ZDI4MTdjZjRhZjhlNWU1OWIxM2I0YWE5YjVlM3AtMSwKKyAgICAweDEuZmNjZjRkZDhmYmJhMnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTg1CisgICAgLTB4MS41ODM3ZDI4MTdjZjRhZjhlNWU1OWIxM2I0YWE5YjVlM3AtMSwKKyAgICAtMHgxLmZjY2Y0ZGQ4ZmJiYTJwMQorICB9LAorICB7IC8vIEVudHJ5IDk4NgorICAgIC0weDEuZDlhM2EzMzZlZGJiN2RlNjRhMjE4M2NiMjdiZTRiNWJwLTIsCisgICAgMHgxLjBlZDE2ZmEwZTkxNGFwMgorICB9LAorICB7IC8vIEVudHJ5IDk4NworICAgIC0weDEuZDlhM2EzMzZlZGJiN2RlNjRhMjE4M2NiMjdiZTRiNWJwLTIsCisgICAgLTB4MS4wZWQxNmZhMGU5MTRhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODgKKyAgICAtMHgxLmM3YjkwZTMwMjQ2MjQ4YjdhMGMyYzg3YTNkZDI1MjI0cC0zLAorICAgIDB4MS4xZjNiMzg1NTU0NGMzcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODkKKyAgICAtMHgxLmM3YjkwZTMwMjQ2MjQ4YjdhMGMyYzg3YTNkZDI1MjI0cC0zLAorICAgIC0weDEuMWYzYjM4NTU1NDRjM3AyCisgIH0sCisgIHsgLy8gRW50cnkgOTkwCisgICAgMHgxLjA2OTEwN2FlOTMwMmNhZjIwNjhiNDg4NDJhZmRmMDUxcC01LAorICAgIDB4MS4yZmE1MDEwOWJmODNjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTEKKyAgICAweDEuMDY5MTA3YWU5MzAyY2FmMjA2OGI0ODg0MmFmZGYwNTFwLTUsCisgICAgLTB4MS4yZmE1MDEwOWJmODNjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTIKKyAgICAweDEuMjM1YjMzMWQ4ZjZlYzc0YWEzZGU1YWVkMTVmYTNmNjhwLTIsCisgICAgMHgxLjQwMGVjOWJlMmFiYjVwMgorICB9LAorICB7IC8vIEVudHJ5IDk5MworICAgIDB4MS4yMzViMzMxZDhmNmVjNzRhYTNkZTVhZWQxNWZhM2Y2OHAtMiwKKyAgICAtMHgxLjQwMGVjOWJlMmFiYjVwMgorICB9LAorICB7IC8vIEVudHJ5IDk5NAorICAgIDB4MS4wOTZhYzAyZWM0MjlmMjI1Yzk5Yjg5YmI0YzllNWQzZXAtMSwKKyAgICAweDEuNTA3ODkyNzI5NWYyZXAyCisgIH0sCisgIHsgLy8gRW50cnkgOTk1CisgICAgMHgxLjA5NmFjMDJlYzQyOWYyMjVjOTliODliYjRjOWU1ZDNlcC0xLAorICAgIC0weDEuNTA3ODkyNzI5NWYyZXAyCisgIH0sCisgIHsgLy8gRW50cnkgOTk2CisgICAgMHgxLjZmY2I3YzZiOGI4Zjc3M2UzYjQyMWRkZWQ2ZmMxZjI2cC0xLAorICAgIDB4MS42MGUyNWIyNzAxMmE3cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTcKKyAgICAweDEuNmZjYjdjNmI4YjhmNzczZTNiNDIxZGRlZDZmYzFmMjZwLTEsCisgICAgLTB4MS42MGUyNWIyNzAxMmE3cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTgKKyAgICAweDEuYmUxZDdjMzUzNGMyODBkYWI0M2RjZWQ2NzAzMzBiNjNwLTEsCisgICAgMHgxLjcxNGMyM2RiNmM2MjBwMgorICB9LAorICB7IC8vIEVudHJ5IDk5OQorICAgIDB4MS5iZTFkN2MzNTM0YzI4MGRhYjQzZGNlZDY3MDMzMGI2M3AtMSwKKyAgICAtMHgxLjcxNGMyM2RiNmM2MjBwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMDAKKyAgICAweDEuZWY0MTQ1YjRhZWNmMzQyNzA5YTNiMTkzMjBkMWIxOTRwLTEsCisgICAgMHgxLjgxYjVlYzhmZDc5OTlwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMDEKKyAgICAweDEuZWY0MTQ1YjRhZWNmMzQyNzA5YTNiMTkzMjBkMWIxOTRwLTEsCisgICAgLTB4MS44MWI1ZWM4ZmQ3OTk5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAyCisgICAgMHgxLmZmMGZkMmM5NmFkZmJhZTU3Njk4MWVlNGIzNDc2OWRlcC0xLAorICAgIDB4MS5lZmZmZmZmZmZmZmZmcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTAwMworICAgIDB4MS5mZjBmZDJjOTZhZGZiYWU1NzY5ODFlZTRiMzQ3NjlkZXAtMSwKKyAgICAtMHgxLmVmZmZmZmZmZmZmZmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA0CisgICAgMHgxLmZmMGZkMmM5NmFkZmJhZDVmOTA0YTcxYjJkMjEwYTJhcC0xLAorICAgIDB4MS5mcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTAwNQorICAgIDB4MS5mZjBmZDJjOTZhZGZiYWQ1ZjkwNGE3MWIyZDIxMGEyYXAtMSwKKyAgICAtMHgxLmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA2CisgICAgMHgxLmZmMGZkMmM5NmFkZmJhYzY3YjcxMmY1MWE2ZmEyYWIzcC0xLAorICAgIDB4MS5mMDAwMDAwMDAwMDAxcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTAwNworICAgIDB4MS5mZjBmZDJjOTZhZGZiYWM2N2I3MTJmNTFhNmZhMmFiM3AtMSwKKyAgICAtMHgxLmYwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA4CisgICAgMHgxLmZjMjEwMDU1NDY3ZmU1YzhmNzZlNzVmZDcwODM4MThjcC0xLAorICAgIDB4MS5mN2ZmZmZmZmZmZmZmcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTAwOQorICAgIDB4MS5mYzIxMDA1NTQ2N2ZlNWM4Zjc2ZTc1ZmQ3MDgzODE4Y3AtMSwKKyAgICAtMHgxLmY3ZmZmZmZmZmZmZmZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEwCisgICAgMHgxLmZjMjEwMDU1NDY3ZmU1OGEyMDE5MzM5OWIzYmMwZGQycC0xLAorICAgIDB4MS5mODBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDExCisgICAgMHgxLmZjMjEwMDU1NDY3ZmU1OGEyMDE5MzM5OWIzYmMwZGQycC0xLAorICAgIC0weDEuZjgwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTAxMgorICAgIDB4MS5mYzIxMDA1NTQ2N2ZlNTRiNDhjM2YxMzVmNmYyOWRmN3AtMSwKKyAgICAweDEuZjgwMDAwMDAwMDAwMXAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwMTMKKyAgICAweDEuZmMyMTAwNTU0NjdmZTU0YjQ4YzNmMTM1ZjZmMjlkZjdwLTEsCisgICAgLTB4MS5mODAwMDAwMDAwMDAxcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTAxNAorICAgIDB4MS5mOTQ5ODRiMjU1MmUxOWU3MzI5NDEzYjhjMmU4ZGM1MXAtMSwKKyAgICAweDEuNGJmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMTUKKyAgICAweDEuZjk0OTg0YjI1NTJlMTllNzMyOTQxM2I4YzJlOGRjNTFwLTEsCisgICAgLTB4MS40YmZmZmZmZmZmZmZmcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTAxNgorICAgIDB4MS5mOTQ5ODRiMjU1MmUxOTQxZWM3NjZjNmE4MmVjZTRhM3AtMSwKKyAgICAweDEuNGMwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTAxNworICAgIDB4MS5mOTQ5ODRiMjU1MmUxOTQxZWM3NjZjNmE4MmVjZTRhM3AtMSwKKyAgICAtMHgxLjRjMHAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMTgKKyAgICAweDEuZjk0OTg0YjI1NTJlMTg5Y2E2NThjNTFjNDJlOTA3Y2VwLTEsCisgICAgMHgxLjRjMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE5CisgICAgMHgxLmY5NDk4NGIyNTUyZTE4OWNhNjU4YzUxYzQyZTkwN2NlcC0xLAorICAgIC0weDEuNGMwMDAwMDAwMDAwMXAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMjAKKyAgICAweDEuZTkyMWRkNDJmMDliYTg2ODYwM2VhMzc2ZjZlMmQwMTJwLTEsCisgICAgMHgxLjMzMzMzMzMzMzMzMzJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIxCisgICAgMHgxLmU5MjFkZDQyZjA5YmE4Njg2MDNlYTM3NmY2ZTJkMDEycC0xLAorICAgIC0weDEuMzMzMzMzMzMzMzMzMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMjIKKyAgICAweDEuZTkyMWRkNDJmMDliYTYwYjI2OGJlYzFmYjA4NzhhNDJwLTEsCisgICAgMHgxLjMzMzMzMzMzMzMzMzNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIzCisgICAgMHgxLmU5MjFkZDQyZjA5YmE2MGIyNjhiZWMxZmIwODc4YTQycC0xLAorICAgIC0weDEuMzMzMzMzMzMzMzMzM3AtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMjQKKyAgICAweDEuZTkyMWRkNDJmMDliYTNhZGVjZDkzNGM4NmEwZGIyNTRwLTEsCisgICAgMHgxLjMzMzMzMzMzMzMzMzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI1CisgICAgMHgxLmU5MjFkZDQyZjA5YmEzYWRlY2Q5MzRjODZhMGRiMjU0cC0xLAorICAgIC0weDEuMzMzMzMzMzMzMzMzNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMjYKKyAgICAweDEuOGZlZWRiODZiZjBlZjMxNThmOGExZGNiZWY0OWQxMjNwLTEsCisgICAgMHgxLjU5NDMxN2FjYzRlZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI3CisgICAgMHgxLjhmZWVkYjg2YmYwZWYzMTU4ZjhhMWRjYmVmNDlkMTIzcC0xLAorICAgIC0weDEuNTk0MzE3YWNjNGVmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMjgKKyAgICAweDEuOGZlZWRiODZiZjBlZTkxODE3YTY0YjI4Yjc5ZTUxMTlwLTEsCisgICAgMHgxLjU5NDMxN2FjYzRlZjlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI5CisgICAgMHgxLjhmZWVkYjg2YmYwZWU5MTgxN2E2NGIyOGI3OWU1MTE5cC0xLAorICAgIC0weDEuNTk0MzE3YWNjNGVmOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMzAKKyAgICAweDEuOGZlZWRiODZiZjBlZGYxYTlmYzI3ODg1N2Y4ZWQ1NTlwLTEsCisgICAgMHgxLjU5NDMxN2FjYzRlZmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMxCisgICAgMHgxLjhmZWVkYjg2YmYwZWRmMWE5ZmMyNzg4NTdmOGVkNTU5cC0xLAorICAgIC0weDEuNTk0MzE3YWNjNGVmYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMzIKKyAgICAweDEuNmI4OThmYTllZmI1ZGQ2ZjllMTdlMzQ0MmQ1OWIyNDFwLTEsCisgICAgMHgxLjhmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMzCisgICAgMHgxLjZiODk4ZmE5ZWZiNWRkNmY5ZTE3ZTM0NDJkNTliMjQxcC0xLAorICAgIC0weDEuOGZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMzQKKyAgICAweDEuNmI4OThmYTllZmI1ZDIyYjU4ZjBkOTllOTYzNDkzMWFwLTEsCisgICAgMHgxLjlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM1CisgICAgMHgxLjZiODk4ZmE5ZWZiNWQyMmI1OGYwZDk5ZTk2MzQ5MzFhcC0xLAorICAgIC0weDEuOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMzYKKyAgICAweDEuNmI4OThmYTllZmI1YzZlNzEzYzljZmY4ZmViNDkxOGZwLTEsCisgICAgMHgxLjkwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM3CisgICAgMHgxLjZiODk4ZmE5ZWZiNWM2ZTcxM2M5Y2ZmOGZlYjQ5MThmcC0xLAorICAgIC0weDEuOTAwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMzgKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgMTAzOQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDEwNDAKKyAgICAweDEucDAsCisgICAgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDEwNDEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQyCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDEwNDMKKyAgICAweDEuZmY2MjFlMzc5NmQ3ZGU0YThhYjdkN2NkODQ4OGY0OTlwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ0CisgICAgMHgxLmZmNjIxZTM3OTZkN2RlNGE4YWI3ZDdjZDg0ODhmNDk5cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AtNQorICB9LAorICB7IC8vIEVudHJ5IDEwNDUKKyAgICAweDEuZmY2MjFlMzc5NmQ3ZGUzZGZiMDRkZjQ2OTg3ZjY0NTBwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ2CisgICAgMHgxLmZmNjIxZTM3OTZkN2RlM2RmYjA0ZGY0Njk4N2Y2NDUwcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwNDcKKyAgICAweDEuZmY2MjFlMzc5NmQ3ZGUzMTZiNTFlNmJmYWM3NTU0MmZwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ4CisgICAgMHgxLmZmNjIxZTM3OTZkN2RlMzE2YjUxZTZiZmFjNzU1NDJmcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwNDkKKyAgICAweDEuZmQ4OGRhM2QxMjUyNWEyMDg4OThjZjU4ZGVkMGVlYjNwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUwCisgICAgMHgxLmZkODhkYTNkMTI1MjVhMjA4ODk4Y2Y1OGRlZDBlZWIzcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AtNAorICB9LAorICB7IC8vIEVudHJ5IDEwNTEKKyAgICAweDEuZmQ4OGRhM2QxMjUyNTllZTU5NGI1NzA1NzY3YWI2NDlwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUyCisgICAgMHgxLmZkODhkYTNkMTI1MjU5ZWU1OTRiNTcwNTc2N2FiNjQ5cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwNTMKKyAgICAweDEuZmQ4OGRhM2QxMjUyNTliYzI5ZmRkZWIyMGUyMjgwNTZwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU0CisgICAgMHgxLmZkODhkYTNkMTI1MjU5YmMyOWZkZGViMjBlMjI4MDU2cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwNTUKKyAgICAweDEuZjYyOTdjZmY3NWNiMDNhYjFmY2VkNjMzN2UzNWEyNDVwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU2CisgICAgMHgxLmY2Mjk3Y2ZmNzVjYjAzYWIxZmNlZDYzMzdlMzVhMjQ1cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AtMworICB9LAorICB7IC8vIEVudHJ5IDEwNTcKKyAgICAweDEuZjYyOTdjZmY3NWNiMDJlMzVhMGNmMmU2NGRlNjA2MjZwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU4CisgICAgMHgxLmY2Mjk3Y2ZmNzVjYjAyZTM1YTBjZjJlNjRkZTYwNjI2cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtMworICB9LAorICB7IC8vIEVudHJ5IDEwNTkKKyAgICAweDEuZjYyOTdjZmY3NWNiMDIxYjk0NGIwZjk5MWQ4ZTkxNjFwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYwCisgICAgMHgxLmY2Mjk3Y2ZmNzVjYjAyMWI5NDRiMGY5OTFkOGU5MTYxcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtMworICB9LAorICB7IC8vIEVudHJ5IDEwNjEKKyAgICAweDEuZDkwNmJjZjMyOGQ0NjY3MmQ5YzFhODY1ODk4ZTU5NjZwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYyCisgICAgMHgxLmQ5MDZiY2YzMjhkNDY2NzJkOWMxYTg2NTg5OGU1OTY2cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AtMgorICB9LAorICB7IC8vIEVudHJ5IDEwNjMKKyAgICAweDEuZDkwNmJjZjMyOGQ0NjM2MzFkNmNkMjkwNWQ0YjEzZjVwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY0CisgICAgMHgxLmQ5MDZiY2YzMjhkNDYzNjMxZDZjZDI5MDVkNGIxM2Y1cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwNjUKKyAgICAweDEuZDkwNmJjZjMyOGQ0NjA1MzYxMTdmY2JiMzBlYTNlMTdwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY2CisgICAgMHgxLmQ5MDZiY2YzMjhkNDYwNTM2MTE3ZmNiYjMwZWEzZTE3cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwNjcKKyAgICAweDEuNmEwOWU2NjdmM2JjZDc3N2I2NDYxMzc2YWI1MjMyNDJwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY4CisgICAgMHgxLjZhMDllNjY3ZjNiY2Q3NzdiNjQ2MTM3NmFiNTIzMjQycC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNjkKKyAgICAweDEuNmEwOWU2NjdmM2JjY2MyNzY3MTJkM2Q4YzU1MDIzODdwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcwCisgICAgMHgxLjZhMDllNjY3ZjNiY2NjMjc2NzEyZDNkOGM1NTAyMzg3cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNzEKKyAgICAweDEuNmEwOWU2NjdmM2JjYzBkNzE3ZGY5NDNhZGVmMzkyNTNwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcyCisgICAgMHgxLjZhMDllNjY3ZjNiY2MwZDcxN2RmOTQzYWRlZjM5MjUzcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNzMKKyAgICAweDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5YzBiOGI1MGJwLTUyLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc0CisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OWMwYjhiNTBicC01MiwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwMAorICB9LAorICB7IC8vIEVudHJ5IDEwNzUKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQ0MTlmYThwLTU0LAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc2CisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzA0NDE5ZmE4cC01NCwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDEwNzcKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzdkYmNmYmEwcC01MywKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA3OAorICAgIC0weDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjZjN2RiY2ZiYTBwLTUzLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA3OQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjk3ZDViZmZwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwMQorICB9LAorICB7IC8vIEVudHJ5IDEwODAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5N2Q1YmZmcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AxCisgIH0sCisgIHsgLy8gRW50cnkgMTA4MQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiMjIwYzVwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDEwODIKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYjIyMGM1cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTA4MworICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmRlNmU1OGNwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwMQorICB9LAorICB7IC8vIEVudHJ5IDEwODQKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkZTZlNThjcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTA4NQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNWY1NmZmZXAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTA4NgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNWY1NmZmZXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwMgorICB9LAorICB7IC8vIEVudHJ5IDEwODcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODgzMTdwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMgorICB9LAorICB7IC8vIEVudHJ5IDEwODgKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODgzMTdwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg5CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY3OWI5NjMxcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkwCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY3OWI5NjMxcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTA5MQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5N2Q1YmZmOHAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTA5MgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5N2Q1YmZmOHAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwMworICB9LAorICB7IC8vIEVudHJ5IDEwOTMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIyMjBjNWVwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMworICB9LAorICB7IC8vIEVudHJ5IDEwOTQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIyMjBjNWVwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDk1CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmRlNmU1OGM0cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDk2CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmRlNmU1OGM0cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA5NworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU1ZjU2ZmZlMXAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTA5OAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU1ZjU2ZmZlMXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwNAorICB9LAorICB7IC8vIEVudHJ5IDEwOTkKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4ODMxN2FwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwNAorICB9LAorICB7IC8vIEVudHJ5IDExMDAKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4ODMxN2FwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAxCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjc5Yjk2MzEzcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAyCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjc5Yjk2MzEzcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEwMworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjk3ZDViZmY4N3AtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3A1CisgIH0sCisgIHsgLy8gRW50cnkgMTEwNAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjk3ZDViZmY4N3AtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwNQorICB9LAorICB7IC8vIEVudHJ5IDExMDUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYjIyMGM1ZTlwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwNQorICB9LAorICB7IC8vIEVudHJ5IDExMDYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYjIyMGM1ZTlwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTA3CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZGU2ZTU4YzRjcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTA4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZGU2ZTU4YzRjcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXA1CisgIH0sCisgIHsgLy8gRW50cnkgMTEwOQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTVmNTZmZmUxZHAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3A2CisgIH0sCisgIHsgLy8gRW50cnkgMTExMAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTVmNTZmZmUxZHAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwNgorICB9LAorICB7IC8vIEVudHJ5IDExMTEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzg4MzE3YTdwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwNgorICB9LAorICB7IC8vIEVudHJ5IDExMTIKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzg4MzE3YTdwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTEzCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNzliOTYzMTMxcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTE0CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNzliOTYzMTMxcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXA2CisgIH0sCisgIHsgLy8gRW50cnkgMTExNQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTdkNWJmZjg3NHAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3A3CisgIH0sCisgIHsgLy8gRW50cnkgMTExNgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTdkNWJmZjg3NHAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwNworICB9LAorICB7IC8vIEVudHJ5IDExMTcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiMjIwYzVlOWRwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwNworICB9LAorICB7IC8vIEVudHJ5IDExMTgKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiMjIwYzVlOWRwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTE5CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkZTZlNThjNGM2cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTIwCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkZTZlNThjNGM2cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXA3CisgIH0sCisgIHsgLy8gRW50cnkgMTEyMQorICAgIC0weDEuNmEwOWU2NjdmM2JjOTI2YjU5ZTZkMzk5YmQxYjkwNmNwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDFwMQorICB9LAorICB7IC8vIEVudHJ5IDExMjIKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzkyNmI1OWU2ZDM5OWJkMWI5MDZjcC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTEyMworICAgIC0weDEuNmEwOWU2NjdmM2JjYmZhYzk2YjNkMjExNWEzYzNlMjFwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDJwMQorICB9LAorICB7IC8vIEVudHJ5IDExMjQKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2JmYWM5NmIzZDIxMTVhM2MzZTIxcC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTEyNQorICAgIC0weDEuNmEwOWU2NjdmM2JjZWNlZGQzODBkMDg4ZjFiNGM0M2NwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDNwMQorICB9LAorICB7IC8vIEVudHJ5IDExMjYKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2VjZWRkMzgwZDA4OGYxYjRjNDNjcC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkM3AxCisgIH0sCisgIHsgLy8gRW50cnkgMTEyNworICAgIC0weDEuNmEwOWU2NjdmM2JkMDVlMzc0M2VkNDE3YzQ0ZmJhNDZwLTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWRwMQorICB9LAorICB7IC8vIEVudHJ5IDExMjgKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDA1ZTM3NDNlZDQxN2M0NGZiYTQ2cC0xLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTEyOQorICAgIC0weDEuNmEwOWU2NjdmM2JjZDhhMjM3NzFkNWEwMmZmNWU4NDNwLTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWVwMQorICB9LAorICB7IC8vIEVudHJ5IDExMzAKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2Q4YTIzNzcxZDVhMDJmZjVlODQzcC0xLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTEzMQorICAgIC0weDEuNmEwOWU2NjdmM2JjYWI2MGZhYTRkNzI4OTVmM2VlYTVwLTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWZwMQorICB9LAorICB7IC8vIEVudHJ5IDExMzIKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2FiNjBmYWE0ZDcyODk1ZjNlZWE1cC0xLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTEzMworICAgIC0weDEuMzRmMjcyOTkzZDE0MTRhMmIzOWJkODM3NGMxZDE2MzFwLTUwLAorICAgIDB4MS4yZDk3YzdmMzMyMWQxcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTM0CisgICAgLTB4MS4zNGYyNzI5OTNkMTQxNGEyYjM5YmQ4Mzc0YzFkMTYzMXAtNTAsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQxcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTM1CisgICAgLTB4MS5hNzkzOTRjOWU4YTBhNTE1OWNkZWMxYmE4NjM3N2M5MnAtNTMsCisgICAgMHgxLjJkOTdjN2YzMzIxZDJwMgorICB9LAorICB7IC8vIEVudHJ5IDExMzYKKyAgICAtMHgxLmE3OTM5NGM5ZThhMGE1MTU5Y2RlYzFiYTg2Mzc3YzkycC01MywKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDJwMgorICB9LAorICB7IC8vIEVudHJ5IDExMzcKKyAgICAweDEuOTYxYjFhY2Q4NWQ3ZDZiYTk4Yzg0ZjkxNWJiY2JjNmNwLTUxLAorICAgIDB4MS4yZDk3YzdmMzMyMWQzcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTM4CisgICAgMHgxLjk2MWIxYWNkODVkN2Q2YmE5OGM4NGY5MTViYmNiYzZjcC01MSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDNwMgorICB9LAorICB7IC8vIEVudHJ5IDExMzkKKyAgICAweDEuNmEwOWU2NjdmM2JjNThhZjRjYmFkMzVhYWJiMjAwZjRwLTEsCisgICAgMHgxLjVmZGJiZTliYmE3NzRwMgorICB9LAorICB7IC8vIEVudHJ5IDExNDAKKyAgICAweDEuNmEwOWU2NjdmM2JjNThhZjRjYmFkMzVhYWJiMjAwZjRwLTEsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQxCisgICAgMHgxLjZhMDllNjY3ZjNiY2IzMzFjNjU0ZDA0OWVlYmEzODBmcC0xLAorICAgIDB4MS41ZmRiYmU5YmJhNzc1cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQyCisgICAgMHgxLjZhMDllNjY3ZjNiY2IzMzFjNjU0ZDA0OWVlYmEzODBmcC0xLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE0MworICAgIDB4MS42YTA5ZTY2N2YzYmQwZGI0M2ZlZWNkMzkxYjIxZDBjNHAtMSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE0NAorICAgIDB4MS42YTA5ZTY2N2YzYmQwZGI0M2ZlZWNkMzkxYjIxZDBjNHAtMSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzZwMgorICB9LAorICB7IC8vIEVudHJ5IDExNDUKKyAgICAweDEuNmEwOWU2NjdmM2JkM2Y5ZjgxNmFkNDU2YmExYTU0YTlwLTEsCisgICAgMHgxLmM0NjNhYmVjY2IyYmFwMgorICB9LAorICB7IC8vIEVudHJ5IDExNDYKKyAgICAweDEuNmEwOWU2NjdmM2JkM2Y5ZjgxNmFkNDU2YmExYTU0YTlwLTEsCisgICAgLTB4MS5jNDYzYWJlY2NiMmJhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQ3CisgICAgMHgxLjZhMDllNjY3ZjNiY2U1MWQwN2QwZDc2NzlhMmQ4YzUzcC0xLAorICAgIDB4MS5jNDYzYWJlY2NiMmJicDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQ4CisgICAgMHgxLjZhMDllNjY3ZjNiY2U1MWQwN2QwZDc2NzlhMmQ4YzUzcC0xLAorICAgIC0weDEuYzQ2M2FiZWNjYjJiYnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE0OQorICAgIDB4MS42YTA5ZTY2N2YzYmM4YTlhOGUzNmRhNzg2M2EwMjU5N3AtMSwKKyAgICAweDEuYzQ2M2FiZWNjYjJiY3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTE1MAorICAgIDB4MS42YTA5ZTY2N2YzYmM4YTlhOGUzNmRhNzg2M2EwMjU5N3AtMSwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmNwMgorICB9LAorICB7IC8vIEVudHJ5IDExNTEKKyAgICAweDEuNTgzZWJlZmY2NWNjMjI2NDgwYWU2ODVjMmFkOWFmZGFwLTUwLAorICAgIDB4MS5mNmE3YTI5NTUzODVkcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUyCisgICAgMHgxLjU4M2ViZWZmNjVjYzIyNjQ4MGFlNjg1YzJhZDlhZmRhcC01MCwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWRwMgorICB9LAorICB7IC8vIEVudHJ5IDExNTMKKyAgICAweDEuNjBmYWZiZmQ5NzMwODk5MjAyYjlhMTcwYzRlNmE4NDlwLTUyLAorICAgIDB4MS5mNmE3YTI5NTUzODVlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTU0CisgICAgMHgxLjYwZmFmYmZkOTczMDg5OTIwMmI5YTE3MGM0ZTZhODQ5cC01MiwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWVwMgorICB9LAorICB7IC8vIEVudHJ5IDExNTUKKyAgICAtMHgxLjRmODI4MjAxMzQ2N2JiMzZmZWEzMmY0NzliZDQ4ZjRhcC01MSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE1NgorICAgIC0weDEuNGY4MjgyMDEzNDY3YmIzNmZlYTMyZjQ3OWJkNDhmNGFwLTUxLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE1NworICAgIC0weDEuNmEwOWU2NjdmM2JiOTcyZjg5MjdkN2I0NmM3Mzc0ODVwLTEsCisgICAgMHgxLjE0NzVjYzllZWRlZmZwMworICB9LAorICB7IC8vIEVudHJ5IDExNTgKKyAgICAtMHgxLjZhMDllNjY3ZjNiYjk3MmY4OTI3ZDdiNDZjNzM3NDg1cC0xLAorICAgIC0weDEuMTQ3NWNjOWVlZGVmZnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE1OQorICAgIC0weDEuNmEwOWU2NjdmM2JjNGMzNDdjNWJkMTkzM2NhMzI2MWZwLTEsCisgICAgMHgxLjE0NzVjYzllZWRmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTYwCisgICAgLTB4MS42YTA5ZTY2N2YzYmM0YzM0N2M1YmQxOTMzY2EzMjYxZnAtMSwKKyAgICAtMHgxLjE0NzVjYzllZWRmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTYxCisgICAgLTB4MS42YTA5ZTY2N2YzYmQwMTM5NmY4ZmNiNzFiMjUwNWUxZnAtMSwKKyAgICAweDEuMTQ3NWNjOWVlZGYwMXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE2MgorICAgIC0weDEuNmEwOWU2NjdmM2JkMDEzOTZmOGZjYjcxYjI1MDVlMWZwLTEsCisgICAgLTB4MS4xNDc1Y2M5ZWVkZjAxcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTYzCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZhMmM5ZWRhOHAtMSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE2NAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYTJjOWVkYThwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQxcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTY1CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZDQzMjZmNXAtMSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE2NgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmQ0MzI2ZjVwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTY3CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkN2JjNjA0MXAtMSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkM3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTE2OAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZDdiYzYwNDFwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQzcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTY5CisgICAgLTB4MS42YTA5ZTY2N2YzYmUwMTFmNDRmZGNmZmMxNjdmNzE0MHAtMSwKKyAgICAweDEuNDZiOWMzNDc3NjRhMnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE3MAorICAgIC0weDEuNmEwOWU2NjdmM2JlMDExZjQ0ZmRjZmZjMTY3ZjcxNDBwLTEsCisgICAgLTB4MS40NmI5YzM0Nzc2NGEycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTcxCisgICAgLTB4MS42YTA5ZTY2N2YzYmQ0YzFhNTFjOWQ2MWUyMGM1MjNmN3AtMSwKKyAgICAweDEuNDZiOWMzNDc3NjRhM3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTE3MgorICAgIC0weDEuNmEwOWU2NjdmM2JkNGMxYTUxYzlkNjFlMjBjNTIzZjdwLTEsCisgICAgLTB4MS40NmI5YzM0Nzc2NGEzcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTczCisgICAgLTB4MS42YTA5ZTY2N2YzYmM5NzE1NWU5NWRjM2ZkMDg4NWQxNHAtMSwKKyAgICAweDEuNDZiOWMzNDc3NjRhNHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE3NAorICAgIC0weDEuNmEwOWU2NjdmM2JjOTcxNTVlOTVkYzNmZDA4ODVkMTRwLTEsCisgICAgLTB4MS40NmI5YzM0Nzc2NGE0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTc1CisgICAgLTB4MS4zZGM1ODViMmM3NDIxODEzMjZlMDdjNDA3NDg4NzNiYnAtNDksCisgICAgMHgxLjVmZGJiZTliYmE3NzRwMworICB9LAorICB7IC8vIEVudHJ5IDExNzYKKyAgICAtMHgxLjNkYzU4NWIyYzc0MjE4MTMyNmUwN2M0MDc0ODg3M2JicC00OSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzRwMworICB9LAorICB7IC8vIEVudHJ5IDExNzcKKyAgICAtMHgxLmVlMmMyZDk2M2ExMGMwOTkzNzAzZTIwNDQ2NDYzMzAxcC01MiwKKyAgICAweDEuNWZkYmJlOWJiYTc3NXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE3OAorICAgIC0weDEuZWUyYzJkOTYzYTEwYzA5OTM3MDNlMjA0NDY0NjMzMDFwLTUyLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE3OQorICAgIDB4MS44NDc0ZjQ5YTcxN2JjZmQ5YjIzZjA3N2VlNGQwOTBjZnAtNTAsCisgICAgMHgxLjVmZGJiZTliYmE3NzZwMworICB9LAorICB7IC8vIEVudHJ5IDExODAKKyAgICAweDEuODQ3NGY0OWE3MTdiY2ZkOWIyM2YwNzdlZTRkMDkwY2ZwLTUwLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE4MQorICAgIDB4MS42YTA5ZTY2N2YzYmI4YWI0YjhjOGQ1ZWNmNmI5MTBkNnAtMSwKKyAgICAweDEuNzhmZGI5ZWZmZWE0NXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE4MgorICAgIDB4MS42YTA5ZTY2N2YzYmI4YWI0YjhjOGQ1ZWNmNmI5MTBkNnAtMSwKKyAgICAtMHgxLjc4ZmRiOWVmZmVhNDVwMworICB9LAorICB7IC8vIEVudHJ5IDExODMKKyAgICAweDEuNmEwOWU2NjdmM2JjM2ZiOWFiZmNjZmNiY2QyNjJhYTBwLTEsCisgICAgMHgxLjc4ZmRiOWVmZmVhNDZwMworICB9LAorICB7IC8vIEVudHJ5IDExODQKKyAgICAweDEuNmEwOWU2NjdmM2JjM2ZiOWFiZmNjZmNiY2QyNjJhYTBwLTEsCisgICAgLTB4MS43OGZkYjllZmZlYTQ2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTg1CisgICAgMHgxLjZhMDllNjY3ZjNiY2Y0YmU5ZjMwYzlhYTQ5MTBjYWNmcC0xLAorICAgIDB4MS43OGZkYjllZmZlYTQ3cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTg2CisgICAgMHgxLjZhMDllNjY3ZjNiY2Y0YmU5ZjMwYzlhYTQ5MTBjYWNmcC0xLAorICAgIC0weDEuNzhmZGI5ZWZmZWE0N3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTE4NworICAgIDB4MS42YTA5ZTY2N2YzYmUwZDlhMTU1Y2QxYzM3NjdlYjdiM3AtMSwKKyAgICAweDEuYWI0MWIwOTg4NmZlOHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE4OAorICAgIDB4MS42YTA5ZTY2N2YzYmUwZDlhMTU1Y2QxYzM3NjdlYjdiM3AtMSwKKyAgICAtMHgxLmFiNDFiMDk4ODZmZThwMworICB9LAorICB7IC8vIEVudHJ5IDExODkKKyAgICAweDEuNmEwOWU2NjdmM2JkNTg5NTIyMjhkN2U1ODcwMWQyOTlwLTEsCisgICAgMHgxLmFiNDFiMDk4ODZmZTlwMworICB9LAorICB7IC8vIEVudHJ5IDExOTAKKyAgICAweDEuNmEwOWU2NjdmM2JkNTg5NTIyMjhkN2U1ODcwMWQyOTlwLTEsCisgICAgLTB4MS5hYjQxYjA5ODg2ZmU5cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTkxCisgICAgMHgxLjZhMDllNjY3ZjNiY2EzOTAyZWY0ZGUwNzNkMDI3M2U2cC0xLAorICAgIDB4MS5hYjQxYjA5ODg2ZmVhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTkyCisgICAgMHgxLjZhMDllNjY3ZjNiY2EzOTAyZWY0ZGUwNzNkMDI3M2U2cC0xLAorICAgIC0weDEuYWI0MWIwOTg4NmZlYXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE5MworICAgIDB4MS40ZjZiYWJlNWRiOWUxZWY0MGQ2OWM0NTJlMTM1NTkxZHAtNDksCisgICAgMHgxLmM0NjNhYmVjY2IyYmFwMworICB9LAorICB7IC8vIEVudHJ5IDExOTQKKyAgICAweDEuNGY2YmFiZTVkYjllMWVmNDBkNjljNDUyZTEzNTU5MWRwLTQ5LAorICAgIC0weDEuYzQ2M2FiZWNjYjJiYXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE5NQorICAgIDB4MS4zZGFlYWY5NzZlNzg3YmQwMzVhNzExNGJlMzg3YjVjM3AtNTEsCisgICAgMHgxLmM0NjNhYmVjY2IyYmJwMworICB9LAorICB7IC8vIEVudHJ5IDExOTYKKyAgICAweDEuM2RhZWFmOTc2ZTc4N2JkMDM1YTcxMTRiZTM4N2I1YzNwLTUxLAorICAgIC0weDEuYzQ2M2FiZWNjYjJiYnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE5NworICAgIC0weDEuNjEyOGE4MzQ0OGMzYzIxN2U1MmM3NzVhMDY5OGQyNmFwLTUwLAorICAgIDB4MS5jNDYzYWJlY2NiMmJjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTk4CisgICAgLTB4MS42MTI4YTgzNDQ4YzNjMjE3ZTUyYzc3NWEwNjk4ZDI2YXAtNTAsCisgICAgLTB4MS5jNDYzYWJlY2NiMmJjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTk5CisgICAgLTB4MS42YTA5ZTY2N2YzYmI3ZTM5ZTg2OWQ0MjU4MDkwOGM3Y3AtMSwKKyAgICAweDEuZGQ4NWE3NDEwZjU4YnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIwMAorICAgIC0weDEuNmEwOWU2NjdmM2JiN2UzOWU4NjlkNDI1ODA5MDhjN2NwLTEsCisgICAgLTB4MS5kZDg1YTc0MTBmNThicDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAxCisgICAgLTB4MS42YTA5ZTY2N2YzYmMzMzNlZGI5ZGNlMDQ1ZDNiMGU3NXAtMSwKKyAgICAweDEuZGQ4NWE3NDEwZjU4Y3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTIwMgorICAgIC0weDEuNmEwOWU2NjdmM2JjMzMzZWRiOWRjZTA0NWQzYjBlNzVwLTEsCisgICAgLTB4MS5kZDg1YTc0MTBmNThjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAzCisgICAgLTB4MS42YTA5ZTY2N2YzYmNlODQzY2VkMWM3ZTJkZjYzMTZkNHAtMSwKKyAgICAweDEuZGQ4NWE3NDEwZjU4ZHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIwNAorICAgIC0weDEuNmEwOWU2NjdmM2JjZTg0M2NlZDFjN2UyZGY2MzE2ZDRwLTEsCisgICAgLTB4MS5kZDg1YTc0MTBmNThkcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjA1CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4YzQ1ZDNkNHAtMSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIwNgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOGM0NWQzZDRwLTEsCisgICAgLTB4MS5mNmE3YTI5NTUzODVkcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjA3CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODY1MzM1M3AtMSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIwOAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjg2NTMzNTNwLTEsCisgICAgLTB4MS5mNmE3YTI5NTUzODVlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjA5CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNDg0OTJkM3AtMSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIxMAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTQ4NDkyZDNwLTEsCisgICAgLTB4MS5mNmE3YTI5NTUzODVmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjExCisgICAgLTB4MS42YTA5ZTY2N2YzYmY4NDFlY2MyM2M3NDU5OTA3NmE4MXAtMSwKKyAgICAweDEuMDdlNGNlZjRjYmQ5NnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIxMgorICAgIC0weDEuNmEwOWU2NjdmM2JmODQxZWNjMjNjNzQ1OTkwNzZhODFwLTEsCisgICAgLTB4MS4wN2U0Y2VmNGNiZDk2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjEzCisgICAgLTB4MS42YTA5ZTY2N2YzYmUxYTE0ZTViYmQzOGFkNjBmZGQ3YnAtMSwKKyAgICAweDEuMDdlNGNlZjRjYmQ5N3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTIxNAorICAgIC0weDEuNmEwOWU2NjdmM2JlMWExNGU1YmJkMzhhZDYwZmRkN2JwLTEsCisgICAgLTB4MS4wN2U0Y2VmNGNiZDk3cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjE1CisgICAgLTB4MS42YTA5ZTY2N2YzYmNiMDBhZmY1M2RmY2VhOTBlNmEwY3AtMSwKKyAgICAweDEuMDdlNGNlZjRjYmQ5OHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIxNgorICAgIC0weDEuNmEwOWU2NjdmM2JjYjAwYWZmNTNkZmNlYTkwZTZhMGNwLTEsCisgICAgLTB4MS4wN2U0Y2VmNGNiZDk4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjE3CisgICAgLTB4MS5iMDg4ZTkwYzc3ZmQxMmVhNzlmOTg2MzFlNmYwYjc0YnAtNDgsCisgICAgMHgxLjE0NzVjYzllZWRlZmZwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMTgKKyAgICAtMHgxLmIwODhlOTBjNzdmZDEyZWE3OWY5ODYzMWU2ZjBiNzRicC00OCwKKyAgICAtMHgxLjE0NzVjYzllZWRlZmZwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMTkKKyAgICAtMHgxLjYxMTFkMjE4ZWZmYTI1ZDRmM2YzMGM2NTRkN2MzNmExcC00OSwKKyAgICAweDEuMTQ3NWNjOWVlZGZwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMjAKKyAgICAtMHgxLjYxMTFkMjE4ZWZmYTI1ZDRmM2YzMGM2NTRkN2MzNmExcC00OSwKKyAgICAtMHgxLjE0NzVjYzllZWRmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjIxCisgICAgMHgxLjNkZGM1YmNlMjAwYmI0NTYxODE5ZTczNTI3ZjVhNmQ3cC01MCwKKyAgICAweDEuMTQ3NWNjOWVlZGYwMXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIyMgorICAgIDB4MS4zZGRjNWJjZTIwMGJiNDU2MTgxOWU3MzUyN2Y1YTZkN3AtNTAsCisgICAgLTB4MS4xNDc1Y2M5ZWVkZjAxcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjIzCisgICAgMHgxLjZhMDllNjY3ZjNiYWJjYmEyNGQ2ZDg3ZWNjOGY4M2I0cC0xLAorICAgIDB4MS4yMTA2Y2E0OTEwMDY4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjI0CisgICAgMHgxLjZhMDllNjY3ZjNiYWJjYmEyNGQ2ZDg3ZWNjOGY4M2I0cC0xLAorICAgIC0weDEuMjEwNmNhNDkxMDA2OHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIyNQorICAgIDB4MS42YTA5ZTY2N2YzYmMyNmM0MGIzZWNjM2NlY2UxZDFhMHAtMSwKKyAgICAweDEuMjEwNmNhNDkxMDA2OXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIyNgorICAgIDB4MS42YTA5ZTY2N2YzYmMyNmM0MGIzZWNjM2NlY2UxZDFhMHAtMSwKKyAgICAtMHgxLjIxMDZjYTQ5MTAwNjlwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMjcKKyAgICAweDEuNmEwOWU2NjdmM2JkOTBjZGYxYTZiZmY5YTMyYTM5MjNwLTEsCisgICAgMHgxLjIxMDZjYTQ5MTAwNmFwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMjgKKyAgICAweDEuNmEwOWU2NjdmM2JkOTBjZGYxYTZiZmY5YTMyYTM5MjNwLTEsCisgICAgLTB4MS4yMTA2Y2E0OTEwMDZhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjI5CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZThiMjdiNmEycC0xLAorICAgIDB4MS4yZDk3YzdmMzMyMWQxcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjMwCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZThiMjdiNmEycC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIzMQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNTBjOWJkNHAtMSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIzMgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNTBjOWJkNHAtMSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDJwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMzMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNWVmMTgxMDdwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDNwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMzQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNWVmMTgxMDdwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQzcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjM1CisgICAgMHgxLjZhMDllNjY3ZjNiZjkwOTk5YzgyYzkwY2ViYWY5ZjNmcC0xLAorICAgIDB4MS4zYTI4YzU5ZDU0MzM5cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjM2CisgICAgMHgxLjZhMDllNjY3ZjNiZjkwOTk5YzgyYzkwY2ViYWY5ZjNmcC0xLAorICAgIC0weDEuM2EyOGM1OWQ1NDMzOXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIzNworICAgIDB4MS42YTA5ZTY2N2YzYmUyNjhmYjYxYWQ1NTIzNTMyZTI5OHAtMSwKKyAgICAweDEuM2EyOGM1OWQ1NDMzYXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIzOAorICAgIDB4MS42YTA5ZTY2N2YzYmUyNjhmYjYxYWQ1NTIzNTMyZTI5OHAtMSwKKyAgICAtMHgxLjNhMjhjNTlkNTQzM2FwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMzkKKyAgICAweDEuNmEwOWU2NjdmM2JjYmM4NWNmYjJlMTk2MTRhYzNmODhwLTEsCisgICAgMHgxLjNhMjhjNTlkNTQzM2JwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNDAKKyAgICAweDEuNmEwOWU2NjdmM2JjYmM4NWNmYjJlMTk2MTRhYzNmODhwLTEsCisgICAgLTB4MS4zYTI4YzU5ZDU0MzNicDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQxCisgICAgMHgxLmI5NWJmYzI2MDIyYjE2NWFlZDNlMmEzYjEyMzgyNDc5cC00OCwKKyAgICAweDEuNDZiOWMzNDc3NjRhMnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI0MgorICAgIDB4MS5iOTViZmMyNjAyMmIxNjVhZWQzZTJhM2IxMjM4MjQ3OXAtNDgsCisgICAgLTB4MS40NmI5YzM0Nzc2NGEycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQzCisgICAgMHgxLjcyYjdmODRjMDQ1NjJjYjVkYTdjNTQ3N2I5NTdhZGVicC00OSwKKyAgICAweDEuNDZiOWMzNDc3NjRhM3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTI0NAorICAgIDB4MS43MmI3Zjg0YzA0NTYyY2I1ZGE3YzU0NzdiOTU3YWRlYnAtNDksCisgICAgLTB4MS40NmI5YzM0Nzc2NGEzcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQ1CisgICAgLTB4MS4xYTkwMGY2N2Y3NTNhNjk0NGIwNzU3MTA0OGYxY2FkMnAtNTAsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTRwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNDYKKyAgICAtMHgxLjFhOTAwZjY3Zjc1M2E2OTQ0YjA3NTcxMDQ4ZjFjYWQycC01MCwKKyAgICAtMHgxLjQ2YjljMzQ3NzY0YTRwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNDcKKyAgICAtMHgxLjZhMDllNjY3ZjNiYWIwM2Y1NDc3ZDZiNzRmNGQ1NWQ1cC0xLAorICAgIDB4MS41MzRhYzBmMTk4NjBicDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQ4CisgICAgLTB4MS42YTA5ZTY2N2YzYmFiMDNmNTQ3N2Q2Yjc0ZjRkNTVkNXAtMSwKKyAgICAtMHgxLjUzNGFjMGYxOTg2MGJwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNDkKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzFhNDkzYWRmY2E3NTdjMWE3NDFmcC0xLAorICAgIDB4MS41MzRhYzBmMTk4NjBjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUwCisgICAgLTB4MS42YTA5ZTY2N2YzYmMxYTQ5M2FkZmNhNzU3YzFhNzQxZnAtMSwKKyAgICAtMHgxLjUzNGFjMGYxOTg2MGNwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNTEKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDg0NTMyMTQ3YmUzMjNlZGRhYzAxcC0xLAorICAgIDB4MS41MzRhYzBmMTk4NjBkcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUyCisgICAgLTB4MS42YTA5ZTY2N2YzYmQ4NDUzMjE0N2JlMzIzZWRkYWMwMXAtMSwKKyAgICAtMHgxLjUzNGFjMGYxOTg2MGRwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNTMKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTc1OGQzYTdjcC0xLAorICAgIDB4MS41ZmRiYmU5YmJhNzc0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjU0CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU3NThkM2E3Y3AtMSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzRwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNTUKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYxMTg0NWUxcC0xLAorICAgIDB4MS41ZmRiYmU5YmJhNzc1cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjU2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMTE4NDVlMXAtMSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzVwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNTcKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjZjYTM1MTQ3cC0xLAorICAgIDB4MS41ZmRiYmU5YmJhNzc2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjU4CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY2Y2EzNTE0N3AtMSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzZwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNTkKKyAgICAtMHgxLjZhMDllNjY3ZjNiZjlkMTQ2Y2UxY2FkNDNkZTliMzUycC0xLAorICAgIDB4MS42YzZjYmM0NWRjOGRjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYwCisgICAgLTB4MS42YTA5ZTY2N2YzYmY5ZDE0NmNlMWNhZDQzZGU5YjM1MnAtMSwKKyAgICAtMHgxLjZjNmNiYzQ1ZGM4ZGNwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNjEKKyAgICAtMHgxLjZhMDllNjY3ZjNiZTMzMGE4Njc5ZDcxOTkzZTdjNzA5cC0xLAorICAgIDB4MS42YzZjYmM0NWRjOGRkcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYyCisgICAgLTB4MS42YTA5ZTY2N2YzYmUzMzBhODY3OWQ3MTk5M2U3YzcwOXAtMSwKKyAgICAtMHgxLjZjNmNiYzQ1ZGM4ZGRwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNjMKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2M5MDBhMDExZTM1ZDdmZGJmNDU5cC0xLAorICAgIDB4MS42YzZjYmM0NWRjOGRlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjY0CisgICAgLTB4MS42YTA5ZTY2N2YzYmNjOTAwYTAxMWUzNWQ3ZmRiZjQ1OXAtMSwKKyAgICAtMHgxLjZjNmNiYzQ1ZGM4ZGVwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNjUKKyAgICAtMHgxLmMyMmYwZjNmOGM1OTE5Y2I2MDgyY2U0NDNjZjk1MDIycC00OCwKKyAgICAweDEuNzhmZGI5ZWZmZWE0NXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI2NgorICAgIC0weDEuYzIyZjBmM2Y4YzU5MTljYjYwODJjZTQ0M2NmOTUwMjJwLTQ4LAorICAgIC0weDEuNzhmZGI5ZWZmZWE0NXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI2NworICAgIC0weDEuODQ1ZTFlN2YxOGIyMzM5NmMxMDU5YzhhMjRjMjYwOWNwLTQ5LAorICAgIDB4MS43OGZkYjllZmZlYTQ2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjY4CisgICAgLTB4MS44NDVlMWU3ZjE4YjIzMzk2YzEwNTljOGEyNGMyNjA5Y3AtNDksCisgICAgLTB4MS43OGZkYjllZmZlYTQ2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjY5CisgICAgMHgxLmVlODc4NjAzOWQzNzMxYTRmYmU5OGRkNmQzMmZmNjJhcC01MSwKKyAgICAweDEuNzhmZGI5ZWZmZWE0N3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTI3MAorICAgIDB4MS5lZTg3ODYwMzlkMzczMWE0ZmJlOThkZDZkMzJmZjYyYXAtNTEsCisgICAgLTB4MS43OGZkYjllZmZlYTQ3cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcxCisgICAgMHgxLjZhMDllNjY3ZjNiYWEzYzQ4NDE4ZDRlZmQxOWQwNzRhcC0xLAorICAgIDB4MS44NThlYjc5YTIwYmFlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcyCisgICAgMHgxLjZhMDllNjY3ZjNiYWEzYzQ4NDE4ZDRlZmQxOWQwNzRhcC0xLAorICAgIC0weDEuODU4ZWI3OWEyMGJhZXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI3MworICAgIDB4MS42YTA5ZTY2N2YzYmMwZGNlNmE4MGM4YWUwYWU0ZjVmM3AtMSwKKyAgICAweDEuODU4ZWI3OWEyMGJhZnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI3NAorICAgIDB4MS42YTA5ZTY2N2YzYmMwZGNlNmE4MGM4YWUwYWU0ZjVmM3AtMSwKKyAgICAtMHgxLjg1OGViNzlhMjBiYWZwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNzUKKyAgICAweDEuNmEwOWU2NjdmM2JkNzdkODUwZThiYzZhZGEyMmZlMzRwLTEsCisgICAgMHgxLjg1OGViNzlhMjBiYjBwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNzYKKyAgICAweDEuNmEwOWU2NjdmM2JkNzdkODUwZThiYzZhZGEyMmZlMzRwLTEsCisgICAgLTB4MS44NThlYjc5YTIwYmIwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjc3CisgICAgLTB4MS4yY2NhZjY0MWQ0MjYxZWEzY2NkOGQyYTEwMmRjMzA2NnAtMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZnA2MgorICB9LAorICB7IC8vIEVudHJ5IDEyNzgKKyAgICAtMHgxLjJjY2FmNjQxZDQyNjFlYTNjY2Q4ZDJhMTAyZGMzMDY2cC0zLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnA2MgorICB9LAorICB7IC8vIEVudHJ5IDEyNzkKKyAgICAweDEuODJhYTM3NWIzYzMzZTcwNjYzNzMxYmFiNGJlYjZlZDNwLTcsCisgICAgMHgxLjBwNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgwCisgICAgMHgxLjgyYWEzNzViM2MzM2U3MDY2MzczMWJhYjRiZWI2ZWQzcC03LAorICAgIC0weDEuMHA2MworICB9LAorICB7IC8vIEVudHJ5IDEyODEKKyAgICAweDEuNGMwNjIyYTZlMzVkZGVmZDVmMmI3NzAwNzE2YTU4MWZwLTIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgyCisgICAgMHgxLjRjMDYyMmE2ZTM1ZGRlZmQ1ZjJiNzcwMDcxNmE1ODFmcC0yLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXA2MworICB9LAorICB7IC8vIEVudHJ5IDEyODMKKyAgICAweDEuNGFiNjUwYjhjNjA3MzQzODUzNzVlMjI2MDNmY2RiMTBwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjg0CisgICAgMHgxLjRhYjY1MGI4YzYwNzM0Mzg1Mzc1ZTIyNjAzZmNkYjEwcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAyNgorICB9LAorICB7IC8vIEVudHJ5IDEyODUKKyAgICAweDEuNGFiNjUxMWE3ZDM5YWQzY2M4OGRlZDFlNzc1Y2ExNDdwLTEsCisgICAgMHgxLjBwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjg2CisgICAgMHgxLjRhYjY1MTFhN2QzOWFkM2NjODhkZWQxZTc3NWNhMTQ3cC0xLAorICAgIC0weDEuMHAyNworICB9LAorICB7IC8vIEVudHJ5IDEyODcKKyAgICAweDEuNGFiNjUxZGRlYjllNjE0MzgzODJmMDIxNjdhZGU0YWZwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjg4CisgICAgMHgxLjRhYjY1MWRkZWI5ZTYxNDM4MzgyZjAyMTY3YWRlNGFmcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAyNworICB9LAorICB7IC8vIEVudHJ5IDEyODkKKyAgICAweDEuNDBhZDY3ZTc3N2IxZGYwMTk1MTg5ZjUwYThjMjYzNDVwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjkwCisgICAgMHgxLjQwYWQ2N2U3NzdiMWRmMDE5NTE4OWY1MGE4YzI2MzQ1cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAyMworICB9LAorICB7IC8vIEVudHJ5IDEyOTEKKyAgICAweDEuNDBhZDY3ZjNmMGM5YTE0Mzk2M2M5Yzk2ZGJjZTNmOGFwLTEsCisgICAgMHgxLjBwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjkyCisgICAgMHgxLjQwYWQ2N2YzZjBjOWExNDM5NjNjOWM5NmRiY2UzZjhhcC0xLAorICAgIC0weDEuMHAyNAorICB9LAorICB7IC8vIEVudHJ5IDEyOTMKKyAgICAweDEuNDBhZDY4MGNlMmY5MjRkNzE2NzY5ZDEwNjRiYzhkZWZwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjk0CisgICAgMHgxLjQwYWQ2ODBjZTJmOTI0ZDcxNjc2OWQxMDY0YmM4ZGVmcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAyNAorICB9LAorICB7IC8vIEVudHJ5IDEyOTUKKyAgICAtMHgxLjRlYWE2MDZkYjI0YzNjYjVlMTVkN2IxOWQ1ZWU3M2ExcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjk2CisgICAgLTB4MS40ZWFhNjA2ZGIyNGMzY2I1ZTE1ZDdiMTlkNWVlNzNhMXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDEyOTcKKyAgICAtMHgxLjRlYWE2MDZkYjI0YzBjNDY2ZGExYzJkYzdiYWEyYjMycC0xLAorICAgIDB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjk4CisgICAgLTB4MS40ZWFhNjA2ZGIyNGMwYzQ2NmRhMWMyZGM3YmFhMmIzMnAtMSwKKyAgICAtMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDEyOTkKKyAgICAtMHgxLjRlYWE2MDZkYjI0YmFiNjc4NjJhNTI2MWI3NzE5ZGNmcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAwCisgICAgLTB4MS40ZWFhNjA2ZGIyNGJhYjY3ODYyYTUyNjFiNzcxOWRjZnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMgorICB9LAorICB7IC8vIEVudHJ5IDEzMDEKKyAgICAtMHgxLmFhMjI2NTc1MzcyMDEwMTE0NTIzMDk1MmU2MWM2ZjJjcC0yLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAyCisgICAgLTB4MS5hYTIyNjU3NTM3MjAxMDExNDUyMzA5NTJlNjFjNmYyY3AtMiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDEzMDMKKyAgICAtMHgxLmFhMjI2NTc1MzcyMDRhNDMzMmY4YWNiYjcyYjBkNzY4cC0yLAorICAgIDB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzA0CisgICAgLTB4MS5hYTIyNjU3NTM3MjA0YTQzMzJmOGFjYmI3MmIwZDc2OHAtMiwKKyAgICAtMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDEzMDUKKyAgICAtMHgxLmFhMjI2NTc1MzcyMGJlYTcwZWEzZjM4Yzg2ZGI0MGFmcC0yLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzA2CisgICAgLTB4MS5hYTIyNjU3NTM3MjBiZWE3MGVhM2YzOGM4NmRiNDBhZnAtMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMQorICB9LAorICB7IC8vIEVudHJ5IDEzMDcKKyAgICAweDEuMTRhMjgwZmI1MDY4YzY5YTJlZDQ1ZmI1NDdjMmYyNzFwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzA4CisgICAgMHgxLjE0YTI4MGZiNTA2OGM2OWEyZWQ0NWZiNTQ3YzJmMjcxcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzMDkKKyAgICAweDEuMTRhMjgwZmI1MDY4YjkyMzg0OGNkYjJlZDBlMzdhNTNwLTEsCisgICAgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDEzMTAKKyAgICAweDEuMTRhMjgwZmI1MDY4YjkyMzg0OGNkYjJlZDBlMzdhNTNwLTEsCisgICAgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzExCisgICAgMHgxLjE0YTI4MGZiNTA2ODllMzYyZmZkZDIyMWUyNTUxMDM1cC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzEyCisgICAgMHgxLjE0YTI4MGZiNTA2ODllMzYyZmZkZDIyMWUyNTUxMDM1cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTMxMworICAgIDB4MS5jMTUyODA2NWI3ZDRmZGIxNThjOWM0YTZiM2U0Yjc0MHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMgorICB9LAorICB7IC8vIEVudHJ5IDEzMTQKKyAgICAweDEuYzE1MjgwNjViN2Q0ZmRiMTU4YzljNGE2YjNlNGI3NDBwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTMxNQorICAgIDB4MS5jMTUyODA2NWI3ZDRmOWRiN2JiYjNiNDVmNWY1YjMwYXAtMSwKKyAgICAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzMTYKKyAgICAweDEuYzE1MjgwNjViN2Q0ZjlkYjdiYmIzYjQ1ZjVmNWIzMGFwLTEsCisgICAgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTMxNworICAgIDB4MS5jMTUyODA2NWI3ZDRmMjJmYzE5ZTI4ODQ3OWMzNmIyN3AtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzMTgKKyAgICAweDEuYzE1MjgwNjViN2Q0ZjIyZmMxOWUyODg0NzljMzZiMjdwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTMxOQorICAgIDB4MS5mMDE1NDlmN2RlZWExODRjNWYxZDIxMGI2YWRiZTU2Y3AtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDEzMjAKKyAgICAweDEuZjAxNTQ5ZjdkZWVhMTg0YzVmMWQyMTBiNmFkYmU1NmNwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTMyMQorICAgIDB4MS5mMDE1NDlmN2RlZWExNzRmMDdhNjc5NzJiZjI5ZjE0OHAtMSwKKyAgICAweDEuMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEzMjIKKyAgICAweDEuZjAxNTQ5ZjdkZWVhMTc0ZjA3YTY3OTcyYmYyOWYxNDhwLTEsCisgICAgLTB4MS4wcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTMyMworICAgIDB4MS5mMDE1NDlmN2RlZWExNTU0NThiOTJhNDE2N2FlYzdmZnAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMgorICB9LAorICB7IC8vIEVudHJ5IDEzMjQKKyAgICAweDEuZjAxNTQ5ZjdkZWVhMTU1NDU4YjkyYTQxNjdhZWM3ZmZwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTMyNQorICAgIDB4MS5mYzAxNTUyN2Q1YmQzNzFhMTIzMjAyNDljYTRkYWZkN3AtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEzMjYKKyAgICAweDEuZmMwMTU1MjdkNWJkMzcxYTEyMzIwMjQ5Y2E0ZGFmZDdwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTMyNworICAgIDB4MS5mYzAxNTUyN2Q1YmQzNmRhM2NkNDI1M2JlZGUzMTljYXAtMSwKKyAgICAweDEuMHAtMworICB9LAorICB7IC8vIEVudHJ5IDEzMjgKKyAgICAweDEuZmMwMTU1MjdkNWJkMzZkYTNjZDQyNTNiZWRlMzE5Y2FwLTEsCisgICAgLTB4MS4wcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTMyOQorICAgIDB4MS5mYzAxNTUyN2Q1YmQzNjVhOTIxODZiMjAzNTA3ZjlhZHAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMworICB9LAorICB7IC8vIEVudHJ5IDEzMzAKKyAgICAweDEuZmMwMTU1MjdkNWJkMzY1YTkyMTg2YjIwMzUwN2Y5YWRwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTMzMQorICAgIDB4MS5mZjAwMTU1NDlmNGQzNGRhMGI3NDVkYzc0MzMxNDVlZnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEzMzIKKyAgICAweDEuZmYwMDE1NTQ5ZjRkMzRkYTBiNzQ1ZGM3NDMzMTQ1ZWZwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTMzMworICAgIDB4MS5mZjAwMTU1NDlmNGQzNGNhMGUxZWU2NTA5YmM0MmI3MXAtMSwKKyAgICAweDEuMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDEzMzQKKyAgICAweDEuZmYwMDE1NTQ5ZjRkMzRjYTBlMWVlNjUwOWJjNDJiNzFwLTEsCisgICAgLTB4MS4wcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTMzNQorICAgIDB4MS5mZjAwMTU1NDlmNGQzNGFhMTM3M2Y3NjM0Y2U4NzczN3AtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNAorICB9LAorICB7IC8vIEVudHJ5IDEzMzYKKyAgICAweDEuZmYwMDE1NTQ5ZjRkMzRhYTEzNzNmNzYzNGNlODc3MzdwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTMzNworICAgIDB4MS5mZmMwMDE1NTUyN2QyYjE2YWViMDlmYjcwNjM2YTEwYXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNgorICB9LAorICB7IC8vIEVudHJ5IDEzMzgKKyAgICAweDEuZmZjMDAxNTU1MjdkMmIxNmFlYjA5ZmI3MDYzNmExMGFwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTMzOQorICAgIDB4MS5mZmMwMDE1NTUyN2QyYjEyYWVkYjQ5ZDkyOTI4ZGY3MnAtMSwKKyAgICAweDEuMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDEzNDAKKyAgICAweDEuZmZjMDAxNTU1MjdkMmIxMmFlZGI0OWQ5MjkyOGRmNzJwLTEsCisgICAgLTB4MS4wcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTM0MQorICAgIDB4MS5mZmMwMDE1NTUyN2QyYjBhYWYzMDllMWQ2ZjBjZmM0ZXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNQorICB9LAorICB7IC8vIEVudHJ5IDEzNDIKKyAgICAweDEuZmZjMDAxNTU1MjdkMmIwYWFmMzA5ZTFkNmYwY2ZjNGVwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTM0MworICAgIDB4MS5mZmYwMDAxNTU1NDlmNGEzOGEyNTYzZWYzNDRjM2ZmNHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNworICB9LAorICB7IC8vIEVudHJ5IDEzNDQKKyAgICAweDEuZmZmMDAwMTU1NTQ5ZjRhMzhhMjU2M2VmMzQ0YzNmZjRwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTM0NQorICAgIDB4MS5mZmYwMDAxNTU1NDlmNGEyOGEyODBlOTdiY2Q1OWM4YXAtMSwKKyAgICAweDEuMHAtNgorICB9LAorICB7IC8vIEVudHJ5IDEzNDYKKyAgICAweDEuZmZmMDAwMTU1NTQ5ZjRhMjhhMjgwZTk3YmNkNTljOGFwLTEsCisgICAgLTB4MS4wcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTM0NworICAgIDB4MS5mZmYwMDAxNTU1NDlmNGEwOGEyZDYzZThjZGU4M2RiNXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNgorICB9LAorICB7IC8vIEVudHJ5IDEzNDgKKyAgICAweDEuZmZmMDAwMTU1NTQ5ZjRhMDhhMmQ2M2U4Y2RlODNkYjVwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTM0OQorICAgIDB4MS5mZmZmZmZmMDAwMDAwMDE1NTU1NjU1NDlmNDljOWY0ZHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUwCisgICAgMHgxLmZmZmZmZmYwMDAwMDAwMTU1NTU2NTU0OWY0OWM5ZjRkcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUxCisgICAgMHgxLmZmZmZmZmYwMDAwMDAwMTU1NTU1NTU0OWY0OWY0OWY3cC0xLAorICAgIDB4MS4wcC0xNAorICB9LAorICB7IC8vIEVudHJ5IDEzNTIKKyAgICAweDEuZmZmZmZmZjAwMDAwMDAxNTU1NTU1NTQ5ZjQ5ZjQ5ZjdwLTEsCisgICAgLTB4MS4wcC0xNAorICB9LAorICB7IC8vIEVudHJ5IDEzNTMKKyAgICAweDEuZmZmZmZmZjAwMDAwMDAxNTU1NTM1NTQ5ZjRhNDlmNGRwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTM1NAorICAgIDB4MS5mZmZmZmZmMDAwMDAwMDE1NTU1MzU1NDlmNGE0OWY0ZHAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTM1NQorICAgIDB4MS5mZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDQxNTU1NXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzU2CisgICAgMHgxLmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwNDE1NTU1cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzU3CisgICAgMHgxLmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDE1NTU1cC0xLAorICAgIDB4MS4wcC0yNworICB9LAorICB7IC8vIEVudHJ5IDEzNTgKKyAgICAweDEuZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMTU1NTVwLTEsCisgICAgLTB4MS4wcC0yNworICB9LAorICB7IC8vIEVudHJ5IDEzNTkKKyAgICAweDEuZmZmZmZmZmZmZmZmZmJmZmZmZmZmZmZmZmY4MTU1NTVwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTM2MAorICAgIDB4MS5mZmZmZmZmZmZmZmZmYmZmZmZmZmZmZmZmZjgxNTU1NXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTM2MQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAxMDAxNXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzYyCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDEwMDE1cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzYzCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDE1cC0xLAorICAgIDB4MS4wcC0zMAorICB9LAorICB7IC8vIEVudHJ5IDEzNjQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMTVwLTEsCisgICAgLTB4MS4wcC0zMAorICB9LAorICB7IC8vIEVudHJ5IDEzNjUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZlZmZmZmZmZmZmZmZmZTAwMTVwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTM2NgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmVmZmZmZmZmZmZmZmZlMDAxNXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTM2NworICAgIC0weDEuZmZmZTYyZWNmYWI3NTNjMDcxYjI2ODBlMWUyNmJiY2VwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzY4CisgICAgLTB4MS5mZmZlNjJlY2ZhYjc1M2MwNzFiMjY4MGUxZTI2YmJjZXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTM2OQorICAgIC0weDEuZmZmZTYyZWNmYWI3NTNjMDcxYjI2ODBlMWUyNmJiY2VwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEzNzAKKyAgICAtMHgxLmZmZmU2MmVjZmFiNzUzYzA3MWIyNjgwZTFlMjZiYmNlcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTM3MQorICAgIC0weDEuZmZmZTYyZWNmYWI3NTNjMDcxYjI2ODBlMWUyNmJiY2VwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEzNzIKKyAgICAtMHgxLmZmZmU2MmVjZmFiNzUzYzA3MWIyNjgwZTFlMjZiYmNlcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTM3MworICAgIDB4MS43ZmZkZmI0YzUzMDhmNzc3Y2Y3NzRjNzMzYjI1NjY5NXAtMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTM3NAorICAgIDB4MS43ZmZkZmI0YzUzMDhmNzc3Y2Y3NzRjNzMzYjI1NjY5NXAtMiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEzNzUKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYjIyMGM1cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzc2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIyMjBjNXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDEzNzcKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQ0MTlmYThwLTU0LAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzc4CisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzA0NDE5ZmE4cC01NCwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDEzNzkKKyAgICAweDEuMTRhMjgwZmI1MDY4OWUzNjJmZmRkMjIxZTI1NTEwMzVwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDEzODAKKyAgICAweDEuMTRhMjgwZmI1MDY4OWUzNjJmZmRkMjIxZTI1NTEwMzVwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzgxCisgICAgMHgxLjE0YTI4MGZiNTA2OGI5MjM4NDhjZGIyZWQwZTM3YTUzcC0xLAorICAgIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzgyCisgICAgMHgxLjE0YTI4MGZiNTA2OGI5MjM4NDhjZGIyZWQwZTM3YTUzcC0xLAorICAgIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTM4MworICAgIDB4MS4xNGEyODBmYjUwNjhjNjlhMmVkNDVmYjU0N2MyZjI3MXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzODQKKyAgICAweDEuMTRhMjgwZmI1MDY4YzY5YTJlZDQ1ZmI1NDdjMmYyNzFwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTM4NQorICAgIDB4MS42YTA5ZTY2N2YzYmNjYzI3NjcxMmQzZDhjNTUwMjM4N3AtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzODYKKyAgICAweDEuNmEwOWU2NjdmM2JjY2MyNzY3MTJkM2Q4YzU1MDIzODdwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTM4NworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDEzODgKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgMTM4OQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDEzOTAKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgMTM5MQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEzOTIKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTM5MworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmY3AtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEzOTQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZjcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTM5NQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMTA3MworICB9LAorICB7IC8vIEVudHJ5IDEzOTYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wcC0xMDczCisgIH0sCisgIHsgLy8gRW50cnkgMTM5NworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDEzOTgKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgMTM5OQorICAgIDB4MS5wMCwKKyAgICAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDAwCisgICAgMHgxLnAwLAorICAgIC0wLjAKKyAgfSwKK307CisjZW5kaWYgLy8gX19CSU9OSUNfXworCitURVNUKG1hdGhfY29zLCBjb3NfaW50ZWwpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGdfY29zX2ludGVsX2RhdGEpL3NpemVvZihjb3NfaW50ZWxfZGF0YV90KTsgaSsrKSB7CisgICAgRVhQRUNUX0RPVUJMRV9FUShnX2Nvc19pbnRlbF9kYXRhW2ldLmV4cGVjdGVkLCBjb3MoZ19jb3NfaW50ZWxfZGF0YVtpXS5jYWxsX2RhdGEpKSA8PCAiRmFpbGVkIG9uIGVsZW1lbnQgIiA8PCBpOworICB9CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCit9CmRpZmYgLS1naXQgYS90ZXN0cy9tYXRoX2Nvc2ZfdGVzdC5jcHAgYi90ZXN0cy9tYXRoX2Nvc2ZfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE5NWZmMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21hdGhfY29zZl90ZXN0LmNwcApAQCAtMCwwICsxLDQzNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgZmxvYXQgZXhwZWN0ZWQ7CisgIGZsb2F0IGNhbGxfZGF0YTsKK30gY29zZl9pbnRlbF9kYXRhX3Q7CisKK3N0YXRpYyBjb3NmX2ludGVsX2RhdGFfdCBnX2Nvc2ZfaW50ZWxfZGF0YVtdID0geworICB7IC8vIEVudHJ5IDAKKyAgICAweDEuYmM3YjY2ZmZiNzY4OWQ2NDZkZDFhZjgzZTk2NjFkMmRwLTEsCisgICAgLTB4MS4wOWViYWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxCisgICAgMHgxLmJjN2I2NmZmYjc2ODlkNjQ2ZGQxYWY4M2U5NjYxZDJkcC0xLAorICAgIDB4MS4wOWViYWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyCisgICAgMHgxLmRlZThkMGZmZmNkOTk3Y2U1Y2ZiYWIwYTVhMzM2YzE0cC01LAorICAgIC0weDEuMTU2NTY0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzCisgICAgMHgxLmRlZThkMGZmZmNkOTk3Y2U1Y2ZiYWIwYTVhMzM2YzE0cC01LAorICAgIDB4MS4xNTY1NjRwNAorICB9LAorICB7IC8vIEVudHJ5IDQKKyAgICAtMHgxLmMxMWJiMmYwNTY1NTJjYTRjZGI2YzVhMGNmNzE1MDlkcC04LAorICAgIC0weDEuNDA2YTQwcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1CisgICAgLTB4MS5jMTFiYjJmMDU2NTUyY2E0Y2RiNmM1YTBjZjcxNTA5ZHAtOCwKKyAgICAweDEuNDA2YTQwcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2CisgICAgMHgxLmZmODM2Y2ZmOTcwNzdiZjQ4OWFhZGM1ZjM0OWE5ZmI5cC0xLAorICAgIC0weDEuNjUzMDc4cC01CisgIH0sCisgIHsgLy8gRW50cnkgNworICAgIDB4MS5mZjgzNmNmZjk3MDc3YmY0ODlhYWRjNWYzNDlhOWZiOXAtMSwKKyAgICAweDEuNjUzMDc4cC01CisgIH0sCisgIHsgLy8gRW50cnkgOAorICAgIDB4MS5iMjljZDRmOWRhMjk2NGU4YzZiYjU2OTMzODdkM2YzYnAtNSwKKyAgICAtMHgxLjZjMDAwOHA1CisgIH0sCisgIHsgLy8gRW50cnkgOQorICAgIDB4MS5iMjljZDRmOWRhMjk2NGU4YzZiYjU2OTMzODdkM2YzYnAtNSwKKyAgICAweDEuNmMwMDA4cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMAorICAgIDB4MS5kZjQwZDNmNjUwZjZjOTQzOTBhM2NhNWQ4ZDliNDhjMXAtMSwKKyAgICAtMHgxLjcwMzgyNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDExCisgICAgMHgxLmRmNDBkM2Y2NTBmNmM5NDM5MGEzY2E1ZDhkOWI0OGMxcC0xLAorICAgIDB4MS43MDM4MjRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMgorICAgIDB4MS5mNzYzMTZmNTQxZTEwZWYxNWQ1N2M1YTIzNzc1MzI5Y3AtMSwKKyAgICAtMHgxLjc4MmUyZXAtMworICB9LAorICB7IC8vIEVudHJ5IDEzCisgICAgMHgxLmY3NjMxNmY1NDFlMTBlZjE1ZDU3YzVhMjM3NzUzMjljcC0xLAorICAgIDB4MS43ODJlMmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNAorICAgIDB4MS5jZmFiMGVjMmZjOTUzODI5ODZmYTUxMTY0OGJkNGU2ZnAtMjQsCisgICAgLTB4MS44ZTMyNjZwOQorICB9LAorICB7IC8vIEVudHJ5IDE1CisgICAgMHgxLmNmYWIwZWMyZmM5NTM4Mjk4NmZhNTExNjQ4YmQ0ZTZmcC0yNCwKKyAgICAweDEuOGUzMjY2cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNgorICAgIDB4MS45MmU2NmI1OTIwYTg1ZDYwODNlOWNjODU1NjhjZWFhM3AtMjEsCisgICAgLTB4MS5jNmFjMDJwMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNworICAgIDB4MS45MmU2NmI1OTIwYTg1ZDYwODNlOWNjODU1NjhjZWFhM3AtMjEsCisgICAgMHgxLmM2YWMwMnAxNAorICB9LAorICB7IC8vIEVudHJ5IDE4CisgICAgMHgxLmQxY2ViNGZmZmY2ZWQwNWI1ZWY1ZmM2MTgyMzEyMTRhcC0yLAorICAgIC0weDEuZTUxM2ZjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOQorICAgIDB4MS5kMWNlYjRmZmZmNmVkMDViNWVmNWZjNjE4MjMxMjE0YXAtMiwKKyAgICAweDEuZTUxM2ZjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMAorICAgIDB4MS5jMjdlMDQ5ZGZlYWIzOGUxYjhlYTZhMDk2MzE4MjlmZXAtMSwKKyAgICAtMHgxLmZiMTkwNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDIxCisgICAgMHgxLmMyN2UwNDlkZmVhYjM4ZTFiOGVhNmEwOTYzMTgyOWZlcC0xLAorICAgIDB4MS5mYjE5MDRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMgorICAgIDB4MS5iNGJmMmM3OWJkZmNkYWE1M2VkNmMwMTNmNjVlMDk2M3AtMSwKKyAgICAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMworICAgIDB4MS5iNGJmMmM3OWJkZmNkYWE1M2VkNmMwMTNmNjVlMDk2M3AtMSwKKyAgICAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDI0CisgICAgMHgxLmZmZmZmZjAwMDAwMDE1NTU1NTU0OWY0OWY0YTI4YTI4cC0xLAorICAgIDB4MS5wLTEyCisgIH0sCisgIHsgLy8gRW50cnkgMjUKKyAgICAweDEuZmZmZmZmMDAwMDAwMTU1NTU1NTQ5ZjQ5ZjRhMjhhMjhwLTEsCisgICAgLTB4MS5wLTEyCisgIH0sCisgIHsgLy8gRW50cnkgMjYKKyAgICAweDEuZmZmZmZmZmZmZmMwMDAwMDAwMDAwMTU1NTU1NTU1NTVwLTEsCisgICAgMHgxLnAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNworICAgIDB4MS5mZmZmZmZmZmZmYzAwMDAwMDAwMDAxNTU1NTU1NTU1NXAtMSwKKyAgICAtMHgxLnAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOAorICAgIDB4MS5mZmZmZmZmZmZmZjAwMDAwMDAwMDAwMTU1NTU1NTU1NXAtMSwKKyAgICAweDEucC0yMgorICB9LAorICB7IC8vIEVudHJ5IDI5CisgICAgMHgxLmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAxNTU1NTU1NTU1cC0xLAorICAgIC0weDEucC0yMgorICB9LAorICB7IC8vIEVudHJ5IDMwCisgICAgMHgxLmZmZmZmZWZmZmZmYzE1NTU1MWZmNDlmNjk2YzRhZWNhcC0xLAorICAgIDB4MS4wMDAwMDJwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgMzEKKyAgICAweDEuZmZmZmZlZmZmZmZjMTU1NTUxZmY0OWY2OTZjNGFlY2FwLTEsCisgICAgLTB4MS4wMDAwMDJwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgMzIKKyAgICAweDEuODgyZDYwNmJhMDc1MDVhN2EwOWFlNzRkNzEzZjk3ODhwLTEsCisgICAgMHgxLjAwMDAwMnA1MQorICB9LAorICB7IC8vIEVudHJ5IDMzCisgICAgMHgxLjg4MmQ2MDZiYTA3NTA1YTdhMDlhZTc0ZDcxM2Y5Nzg4cC0xLAorICAgIC0weDEuMDAwMDAycDUxCisgIH0sCisgIHsgLy8gRW50cnkgMzQKKyAgICAweDEuZmMwMTU0ZjdmNWI2NDIyZjc3OTRiZjE1NmVlOThiN2VwLTEsCisgICAgMHgxLjAwMDAwNnAtMworICB9LAorICB7IC8vIEVudHJ5IDM1CisgICAgMHgxLmZjMDE1NGY3ZjViNjQyMmY3Nzk0YmYxNTZlZTk4YjdlcC0xLAorICAgIC0weDEuMDAwMDA2cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzYKKyAgICAweDEuMzRlOTc2ZWY2N2Q2MGEzZGU4MTRhZDNkMDIwM2JhMjFwLTEwLAorICAgIDB4MS4wMDAwMDZwMTIxCisgIH0sCisgIHsgLy8gRW50cnkgMzcKKyAgICAweDEuMzRlOTc2ZWY2N2Q2MGEzZGU4MTRhZDNkMDIwM2JhMjFwLTEwLAorICAgIC0weDEuMDAwMDA2cDEyMQorICB9LAorICB7IC8vIEVudHJ5IDM4CisgICAgLTB4MS5mZmZmYTJjZjU5Mzk4ZGM2MTgwODAxZTllYTMxMjBjOHAtMSwKKyAgICAweDEuMDAwMDA2cDEyMgorICB9LAorICB7IC8vIEVudHJ5IDM5CisgICAgLTB4MS5mZmZmYTJjZjU5Mzk4ZGM2MTgwODAxZTllYTMxMjBjOHAtMSwKKyAgICAtMHgxLjAwMDAwNnAxMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MAorICAgIDB4MS5mZmMwMDE0NDUzMzE1ZDQ3ZTJhMzE4YmY2M2U0Y2FhN3AtMSwKKyAgICAweDEuMDAwMDIycC01CisgIH0sCisgIHsgLy8gRW50cnkgNDEKKyAgICAweDEuZmZjMDAxNDQ1MzMxNWQ0N2UyYTMxOGJmNjNlNGNhYTdwLTEsCisgICAgLTB4MS4wMDAwMjJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MgorICAgIDB4MS5jMTUyMTUwMTVmM2Q5MTZhMDAxOWEzOWUzYWNjNzM2NHAtMSwKKyAgICAweDEuMDAwMGUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDMKKyAgICAweDEuYzE1MjE1MDE1ZjNkOTE2YTAwMTlhMzllM2FjYzczNjRwLTEsCisgICAgLTB4MS4wMDAwZTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NAorICAgIDB4MS5mZjAwMTM5NGU5MzA4NWM3Y2NlNTM5MTU4OTNhZjc2NXAtMSwKKyAgICAweDEuMDAwMGUwcC00CisgIH0sCisgIHsgLy8gRW50cnkgNDUKKyAgICAweDEuZmYwMDEzOTRlOTMwODVjN2NjZTUzOTE1ODkzYWY3NjVwLTEsCisgICAgLTB4MS4wMDAwZTBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NgorICAgIDB4MS45MGIwYzk3ZGUyMzcwNTg3YTY4YWVhZTJiNjk0Mzk1M3AtMTUsCisgICAgMHgxLjAwMDMyMnAyMworICB9LAorICB7IC8vIEVudHJ5IDQ3CisgICAgMHgxLjkwYjBjOTdkZTIzNzA1ODdhNjhhZWFlMmI2OTQzOTUzcC0xNSwKKyAgICAtMHgxLjAwMDMyMnAyMworICB9LAorICB7IC8vIEVudHJ5IDQ4CisgICAgLTB4MS44YjkwYzY3Njc3NTY1ODc0ZjQ0ZDkzMTRjYTJiYTYzNHAtNiwKKyAgICAweDEuMDAwNDAycDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OQorICAgIC0weDEuOGI5MGM2NzY3NzU2NTg3NGY0NGQ5MzE0Y2EyYmE2MzRwLTYsCisgICAgLTB4MS4wMDA0MDJwOAorICB9LAorICB7IC8vIEVudHJ5IDUwCisgICAgMHgxLjE0NzM1ZmZmZDU1MTIwYTQ0ODBiN2M5MWExZDc4ZDZlcC0xLAorICAgIDB4MS4wMDFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MQorICAgIDB4MS4xNDczNWZmZmQ1NTEyMGE0NDgwYjdjOTFhMWQ3OGQ2ZXAtMSwKKyAgICAtMHgxLjAwMWNwMAorICB9LAorICB7IC8vIEVudHJ5IDUyCisgICAgMHgxLmMwYjZkMTAwMDU0NjhhM2EzZWIwNTZlYjU5YjU4Y2UycC0xLAorICAgIDB4MS4wMTQ0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTMKKyAgICAweDEuYzBiNmQxMDAwNTQ2OGEzYTNlYjA1NmViNTliNThjZTJwLTEsCisgICAgLTB4MS4wMTQ0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTQKKyAgICAtMHgxLmM0MDNkOTAwMDY1MDliMDc2MjY0MmQwYmVhNDBlNGIxcC0yLAorICAgIDB4MS4wMzk0YzhwMQorICB9LAorICB7IC8vIEVudHJ5IDU1CisgICAgLTB4MS5jNDAzZDkwMDA2NTA5YjA3NjI2NDJkMGJlYTQwZTRiMXAtMiwKKyAgICAtMHgxLjAzOTRjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTYKKyAgICAtMHgxLjI3MGRhMThiMTk4ZTZlYmZjODc4MjA4MjkwMmJmMmQ0cC0yNSwKKyAgICAweDEuMDRjY2JjcDE4CisgIH0sCisgIHsgLy8gRW50cnkgNTcKKyAgICAtMHgxLjI3MGRhMThiMTk4ZTZlYmZjODc4MjA4MjkwMmJmMmQ0cC0yNSwKKyAgICAtMHgxLjA0Y2NiY3AxOAorICB9LAorICB7IC8vIEVudHJ5IDU4CisgICAgMHgxLmVlMGY2NzAxNWI5ZmIzOWJhNmViOTFkNDc4MjljOTEzcC0xLAorICAgIDB4MS4wN2I1MThwOTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OQorICAgIDB4MS5lZTBmNjcwMTViOWZiMzliYTZlYjkxZDQ3ODI5YzkxM3AtMSwKKyAgICAtMHgxLjA3YjUxOHA5OQorICB9LAorICB7IC8vIEVudHJ5IDYwCisgICAgMHgxLmZlZjA1ZDAwMDY2NmNiNDdmMTYzMmM0NzhhNjI4MmE4cC0xLAorICAgIDB4MS4wN2JmODBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MQorICAgIDB4MS5mZWYwNWQwMDA2NjZjYjQ3ZjE2MzJjNDc4YTYyODJhOHAtMSwKKyAgICAtMHgxLjA3YmY4MHAtNAorICB9LAorICB7IC8vIEVudHJ5IDYyCisgICAgMHgxLjE2ZjQzMzAwMDBiNDRjODI4ODY3OWY4Yzc5ZDM2YzRmcC02LAorICAgIDB4MS4wN2MxZjBwNQorICB9LAorICB7IC8vIEVudHJ5IDYzCisgICAgMHgxLjE2ZjQzMzAwMDBiNDRjODI4ODY3OWY4Yzc5ZDM2YzRmcC02LAorICAgIC0weDEuMDdjMWYwcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NAorICAgIDB4MS5jZmI0MDQ1NTcyNzdkODViZjE0OTQ5NmQ0NmMyZmE5ZnAtMTgsCisgICAgMHgxLjBiZDIxZXA5CisgIH0sCisgIHsgLy8gRW50cnkgNjUKKyAgICAweDEuY2ZiNDA0NTU3Mjc3ZDg1YmYxNDk0OTZkNDZjMmZhOWZwLTE4LAorICAgIC0weDEuMGJkMjFlcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NgorICAgIDB4MS5iYjU0M2VmZmZkNmNhY2FjMTI2OThiOGE5NGVkMmMzZXAtMSwKKyAgICAweDEuMGMzY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDY3CisgICAgMHgxLmJiNTQzZWZmZmQ2Y2FjYWMxMjY5OGI4YTk0ZWQyYzNlcC0xLAorICAgIC0weDEuMGMzY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDY4CisgICAgMHgxLmJiMGEyMmMxM2I2MTZjZGNhZDMyYzdmY2E1OGU2NjQzcC0xLAorICAgIDB4MS4wY2QwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjkKKyAgICAweDEuYmIwYTIyYzEzYjYxNmNkY2FkMzJjN2ZjYTU4ZTY2NDNwLTEsCisgICAgLTB4MS4wY2QwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzAKKyAgICAweDEuZjk4ZjliMWQwNWU3YzkyMmFjNWU1YzZiNmFjODY4NzZwLTIsCisgICAgMHgxLjBkZjBwMAorICB9LAorICB7IC8vIEVudHJ5IDcxCisgICAgMHgxLmY5OGY5YjFkMDVlN2M5MjJhYzVlNWM2YjZhYzg2ODc2cC0yLAorICAgIC0weDEuMGRmMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzIKKyAgICAweDEuZWUxNTE4MTgzMGMyNWIwYjEwY2U2NzFlOGY3YTMyODlwLTEsCisgICAgMHgxLjBmYjRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MworICAgIDB4MS5lZTE1MTgxODMwYzI1YjBiMTBjZTY3MWU4ZjdhMzI4OXAtMSwKKyAgICAtMHgxLjBmYjRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NAorICAgIDB4MS5lZGY2Y2MxNmRlZmU2MzYxZjM4ZmZhNjBlY2UzOTQ0Y3AtMSwKKyAgICAweDEuMTA5YWIycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzUKKyAgICAweDEuZWRmNmNjMTZkZWZlNjM2MWYzOGZmYTYwZWNlMzk0NGNwLTEsCisgICAgLTB4MS4xMDlhYjJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NgorICAgIDB4MS5kZWU4ZDBmZmZjZDk5N2NlNWNmYmFiMGE1YTMzNmMxNHAtNSwKKyAgICAweDEuMTU2NTY0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NworICAgIDB4MS5kZWU4ZDBmZmZjZDk5N2NlNWNmYmFiMGE1YTMzNmMxNHAtNSwKKyAgICAtMHgxLjE1NjU2NHA0CisgIH0sCisgIHsgLy8gRW50cnkgNzgKKyAgICAweDEuYjY1NmQ2MDAwMDE1NWJhY2I0YWE4NzRiMjhkZTJmZjlwLTEsCisgICAgMHgxLjE2MGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OQorICAgIDB4MS5iNjU2ZDYwMDAwMTU1YmFjYjRhYTg3NGIyOGRlMmZmOXAtMSwKKyAgICAtMHgxLjE2MGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MAorICAgIDB4MS5mZmIyNzU5NjdjMTkxZWU5NWY4NjJlZmI0Zjc5MGNlY3AtMSwKKyAgICAweDEuMTljY3AtNQorICB9LAorICB7IC8vIEVudHJ5IDgxCisgICAgMHgxLmZmYjI3NTk2N2MxOTFlZTk1Zjg2MmVmYjRmNzkwY2VjcC0xLAorICAgIC0weDEuMTljY3AtNQorICB9LAorICB7IC8vIEVudHJ5IDgyCisgICAgMHgxLmM1OWM1MGZmZTU0MjIzM2I3ZWEyMTEwMGRmODdiYjYwcC0yLAorICAgIDB4MS4xY2E0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MworICAgIDB4MS5jNTljNTBmZmU1NDIyMzNiN2VhMjExMDBkZjg3YmI2MHAtMiwKKyAgICAtMHgxLjFjYTRwMAorICB9LAorICB7IC8vIEVudHJ5IDg0CisgICAgMHgxLmFmNjMwZjg2Yjc3NTcxYjlkZTJmMTdmZWUyYjZjNWNlcC01LAorICAgIDB4MS4xZmZmZmVwNzkKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NQorICAgIDB4MS5hZjYzMGY4NmI3NzU3MWI5ZGUyZjE3ZmVlMmI2YzVjZXAtNSwKKyAgICAtMHgxLjFmZmZmZXA3OQorICB9LAorICB7IC8vIEVudHJ5IDg2CisgICAgMHgxLmIxNDkzZWYxZmJjNjI2NzNlYzE0MGMxMmFkYzVhMTM0cC02LAorICAgIDB4MS4yNjIwcDEwCisgIH0sCisgIHsgLy8gRW50cnkgODcKKyAgICAweDEuYjE0OTNlZjFmYmM2MjY3M2VjMTQwYzEyYWRjNWExMzRwLTYsCisgICAgLTB4MS4yNjIwcDEwCisgIH0sCisgIHsgLy8gRW50cnkgODgKKyAgICAtMHgxLmFkMDBiNmYxNWM2YWM1YzNlNzllZjU1ZDJmZWM3MGJkcC01LAorICAgIDB4MS4yYTNkNjJwMgorICB9LAorICB7IC8vIEVudHJ5IDg5CisgICAgLTB4MS5hZDAwYjZmMTVjNmFjNWMzZTc5ZWY1NWQyZmVjNzBiZHAtNSwKKyAgICAtMHgxLjJhM2Q2MnAyCisgIH0sCisgIHsgLy8gRW50cnkgOTAKKyAgICAtMHgxLmFiOTk4NGYyODNmMTE0Y2YxM2NjNmRmMzhjNjc5NTVmcC02LAorICAgIDB4MS4yYmVjMjJwMgorICB9LAorICB7IC8vIEVudHJ5IDkxCisgICAgLTB4MS5hYjk5ODRmMjgzZjExNGNmMTNjYzZkZjM4YzY3OTU1ZnAtNiwKKyAgICAtMHgxLjJiZWMyMnAyCisgIH0sCisgIHsgLy8gRW50cnkgOTIKKyAgICAweDEuOTliYzViOTYxYjFhY2FjYTE4ZDk3MWY2OGFlOTlkYTlwLTI3LAorICAgIDB4MS4yZDk3YzhwMgorICB9LAorICB7IC8vIEVudHJ5IDkzCisgICAgMHgxLjk5YmM1Yjk2MWIxYWNhY2ExOGQ5NzFmNjhhZTk5ZGE5cC0yNywKKyAgICAtMHgxLjJkOTdjOHAyCisgIH0sCisgIHsgLy8gRW50cnkgOTQKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmQ3MDM0OThjM2I4Mjg4NTYzOTE1cC0xLAorICAgIDB4MS4yZDk3YzhwMworICB9LAorICB7IC8vIEVudHJ5IDk1CisgICAgLTB4MS5mZmZmZmZmZmZmZmZkNzAzNDk4YzNiODI4ODU2MzkxNXAtMSwKKyAgICAtMHgxLjJkOTdjOHAzCisgIH0sCisgIHsgLy8gRW50cnkgOTYKKyAgICAweDEuZmZmZmZmZmZmZmZmNWMwZDI2MzBlZTBhMjdlOGQ2ZDFwLTEsCisgICAgMHgxLjJkOTdjOHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTcKKyAgICAweDEuZmZmZmZmZmZmZmZmNWMwZDI2MzBlZTBhMjdlOGQ2ZDFwLTEsCisgICAgLTB4MS4yZDk3YzhwNAorICB9LAorICB7IC8vIEVudHJ5IDk4CisgICAgLTB4MS45OWI2OWNmMGM0YTJjOGRkYWQzZjRjZjI5NDUzZTUwOXAtNiwKKyAgICAweDEuMmZlZmM0cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OQorICAgIC0weDEuOTliNjljZjBjNGEyYzhkZGFkM2Y0Y2YyOTQ1M2U1MDlwLTYsCisgICAgLTB4MS4yZmVmYzRwOQorICB9LAorICB7IC8vIEVudHJ5IDEwMAorICAgIDB4MS5lOTIxNDgzMjhkNjIwZmMxODZkZjlkNmNlMTA4OGZkOXAtMSwKKyAgICAweDEuMzMzNzI0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTAxCisgICAgMHgxLmU5MjE0ODMyOGQ2MjBmYzE4NmRmOWQ2Y2UxMDg4ZmQ5cC0xLAorICAgIC0weDEuMzMzNzI0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTAyCisgICAgMHgxLmExY2FhYjAwMDAyZDMxODllMDY5OWYyYWFmMjBkOWZjcC0xLAorICAgIDB4MS4zYjkwZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMKKyAgICAweDEuYTFjYWFiMDAwMDJkMzE4OWUwNjk5ZjJhYWYyMGQ5ZmNwLTEsCisgICAgLTB4MS4zYjkwZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQKKyAgICAweDEuZmMzM2JhZmZmZmZmYmIwNTVjZTAzNjkwYmQzOTI1MzFwLTEsCisgICAgMHgxLjQxYzQ3MHAxNgorICB9LAorICB7IC8vIEVudHJ5IDEwNQorICAgIDB4MS5mYzMzYmFmZmZmZmZiYjA1NWNlMDM2OTBiZDM5MjUzMXAtMSwKKyAgICAtMHgxLjQxYzQ3MHAxNgorICB9LAorICB7IC8vIEVudHJ5IDEwNgorICAgIDB4MS40Nzk4YjMwNjcyZjIxNjAyYTIxYWFmNDcxZTgyNTlhMHAtMTksCisgICAgMHgxLjQ0MmY3NHAxNQorICB9LAorICB7IC8vIEVudHJ5IDEwNworICAgIDB4MS40Nzk4YjMwNjcyZjIxNjAyYTIxYWFmNDcxZTgyNTlhMHAtMTksCisgICAgLTB4MS40NDJmNzRwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgKKyAgICAweDEuZTJiNWVjZmZmZmE0OWM4YzY4ZDc0M2M0N2Y2MjQ2MzNwLTEsCisgICAgMHgxLjVjMDlkYXAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwOQorICAgIDB4MS5lMmI1ZWNmZmZmYTQ5YzhjNjhkNzQzYzQ3ZjYyNDYzM3AtMSwKKyAgICAtMHgxLjVjMDlkYXAtMgorICB9LAorICB7IC8vIEVudHJ5IDExMAorICAgIDB4MS4xMDU5MTA5NGFjNThhMjcwZDlhZDkxODAyZGY0OWZkMHAtMTEsCisgICAgMHgxLjVmZTBwMworICB9LAorICB7IC8vIEVudHJ5IDExMQorICAgIDB4MS4xMDU5MTA5NGFjNThhMjcwZDlhZDkxODAyZGY0OWZkMHAtMTEsCisgICAgLTB4MS41ZmUwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTIKKyAgICAtMHgxLmZmZmU1ODBlZTE0MWMwMjI1YjQ0MjgxYzFjNmY3ZmYxcC0xLAorICAgIDB4MS42NjU5ODJwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgMTEzCisgICAgLTB4MS5mZmZlNTgwZWUxNDFjMDIyNWI0NDI4MWMxYzZmN2ZmMXAtMSwKKyAgICAtMHgxLjY2NTk4MnAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQKKyAgICAtMHgxLmUyYjhlY2ZmZWQ5MWNlM2E0YjlkYzVhNTkyZmIwYjE0cC0xLAorICAgIDB4MS42NmEwYmFwMQorICB9LAorICB7IC8vIEVudHJ5IDExNQorICAgIC0weDEuZTJiOGVjZmZlZDkxY2UzYTRiOWRjNWE1OTJmYjBiMTRwLTEsCisgICAgLTB4MS42NmEwYmFwMQorICB9LAorICB7IC8vIEVudHJ5IDExNgorICAgIC0weDEuYTA4YzZjZmRiZTA0Yjg1OWMwZTE2ZDQ3OGZmODFmN2JwLTUsCisgICAgMHgxLjZiZWU0MnAxMgorICB9LAorICB7IC8vIEVudHJ5IDExNworICAgIC0weDEuYTA4YzZjZmRiZTA0Yjg1OWMwZTE2ZDQ3OGZmODFmN2JwLTUsCisgICAgLTB4MS42YmVlNDJwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgKKyAgICAweDEuZmY3YzcxOWExODQzOWM0MjY3MDc1ZTJkZjY4ODM0M2FwLTEsCisgICAgMHgxLjZmMTA3MHAtNQorICB9LAorICB7IC8vIEVudHJ5IDExOQorICAgIDB4MS5mZjdjNzE5YTE4NDM5YzQyNjcwNzVlMmRmNjg4MzQzYXAtMSwKKyAgICAtMHgxLjZmMTA3MHAtNQorICB9LAorICB7IC8vIEVudHJ5IDEyMAorICAgIDB4MS5mZjdjM2I5OTdkNmJlYTY2MWVmMGQxZTY5ZTIyMmJmZXAtMSwKKyAgICAweDEuNmY1YmMycC01CisgIH0sCisgIHsgLy8gRW50cnkgMTIxCisgICAgMHgxLmZmN2MzYjk5N2Q2YmVhNjYxZWYwZDFlNjllMjIyYmZlcC0xLAorICAgIC0weDEuNmY1YmMycC01CisgIH0sCisgIHsgLy8gRW50cnkgMTIyCisgICAgLTB4MS42YTBhMGVlNjhkYTEzMTA5MWUyOWUwNTUyMjZhMWJkOXAtMSwKKyAgICAweDEuNzJiNTNjcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjMKKyAgICAtMHgxLjZhMGEwZWU2OGRhMTMxMDkxZTI5ZTA1NTIyNmExYmQ5cC0xLAorICAgIC0weDEuNzJiNTNjcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQKKyAgICAweDEuZmY3NzdiOWEyMTg5ODVjMWExOTFjOTJiMmQxMWZmYmFwLTEsCisgICAgMHgxLjc1ZWMxYXAtNQorICB9LAorICB7IC8vIEVudHJ5IDEyNQorICAgIDB4MS5mZjc3N2I5YTIxODk4NWMxYTE5MWM5MmIyZDExZmZiYXAtMSwKKyAgICAtMHgxLjc1ZWMxYXAtNQorICB9LAorICB7IC8vIEVudHJ5IDEyNgorICAgIDB4MS42ZDQ4N2Y5MjQyNzkyMGU4MWRjNWFlMzRlMGU4ZDdiYXAtMiwKKyAgICAweDEuNzhiM2ZhcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDEyNworICAgIDB4MS42ZDQ4N2Y5MjQyNzkyMGU4MWRjNWFlMzRlMGU4ZDdiYXAtMiwKKyAgICAtMHgxLjc4YjNmYXAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgKKyAgICAweDEuNDk0OWMyZmZmYTBjZDMzNmRmZGE5OTgyMTZkYWUzOTNwLTQsCisgICAgMHgxLjdkODU2OHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTI5CisgICAgMHgxLjQ5NDljMmZmZmEwY2QzMzZkZmRhOTk4MjE2ZGFlMzkzcC00LAorICAgIC0weDEuN2Q4NTY4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAKKyAgICAtMHgxLmI5ZWQ5ZWIzM2VhY2JmYWM4MTUxY2RhMTEzNzM0YzI5cC0xLAorICAgIDB4MS44MzA2ODhwNTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzEKKyAgICAtMHgxLmI5ZWQ5ZWIzM2VhY2JmYWM4MTUxY2RhMTEzNzM0YzI5cC0xLAorICAgIC0weDEuODMwNjg4cDU3CisgIH0sCisgIHsgLy8gRW50cnkgMTMyCisgICAgMHgxLmM3MzQ5YWYwNmQ2MTM5NGNhZTE5MTIyMzNmNjRhMDRlcC01LAorICAgIDB4MS44M2U0MzBwMAorICB9LAorICB7IC8vIEVudHJ5IDEzMworICAgIDB4MS5jNzM0OWFmMDZkNjEzOTRjYWUxOTEyMjMzZjY0YTA0ZXAtNSwKKyAgICAtMHgxLjgzZTQzMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTM0CisgICAgMHgxLmFiNzNmMGYwZmUwNDQwM2U2YTdmZGRlMTQxYTM4YThlcC01LAorICAgIDB4MS44NGMyODhwMAorICB9LAorICB7IC8vIEVudHJ5IDEzNQorICAgIDB4MS5hYjczZjBmMGZlMDQ0MDNlNmE3ZmRkZTE0MWEzOGE4ZXAtNSwKKyAgICAtMHgxLjg0YzI4OHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTM2CisgICAgMHgxLmZmNmMyNzk5ZGNmMGQ2YzhmN2FjYWY1YjBhNDZlNmUycC0xLAorICAgIDB4MS44NTIxNDBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzcKKyAgICAweDEuZmY2YzI3OTlkY2YwZDZjOGY3YWNhZjViMGE0NmU2ZTJwLTEsCisgICAgLTB4MS44NTIxNDBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzgKKyAgICAweDEuZmY2OWVkOTlkZTcwZTUxZjUxOWYzMGJhZDI0N2E0ZDlwLTEsCisgICAgMHgxLjg4MGNiNnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEzOQorICAgIDB4MS5mZjY5ZWQ5OWRlNzBlNTFmNTE5ZjMwYmFkMjQ3YTRkOXAtMSwKKyAgICAtMHgxLjg4MGNiNnAtNQorICB9LAorICB7IC8vIEVudHJ5IDE0MAorICAgIC0weDEuZmQ3NmM1N2Y4NzJmODViYzRiMGUxYmY1OTFiM2I1YjBwLTEsCisgICAgMHgxLjkzNjRlYXAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDEKKyAgICAtMHgxLmZkNzZjNTdmODcyZjg1YmM0YjBlMWJmNTkxYjNiNWIwcC0xLAorICAgIC0weDEuOTM2NGVhcDExOQorICB9LAorICB7IC8vIEVudHJ5IDE0MgorICAgIC0weDEuZjg3YzFjZWVjNWZkNTgxMWM5YzA4OWNkYWVlZmYxM2NwLTgsCisgICAgMHgxLjk3OWUyOHA5CisgIH0sCisgIHsgLy8gRW50cnkgMTQzCisgICAgLTB4MS5mODdjMWNlZWM1ZmQ1ODExYzljMDg5Y2RhZWVmZjEzY3AtOCwKKyAgICAtMHgxLjk3OWUyOHA5CisgIH0sCisgIHsgLy8gRW50cnkgMTQ0CisgICAgLTB4MS4xNmFlMjkxNDRkM2IxZWE4ZDkwN2I4Nzc2ZjcwNDE1N3AtMjYsCisgICAgMHgxLjlhNDhkZXAxNQorICB9LAorICB7IC8vIEVudHJ5IDE0NQorICAgIC0weDEuMTZhZTI5MTQ0ZDNiMWVhOGQ5MDdiODc3NmY3MDQxNTdwLTI2LAorICAgIC0weDEuOWE0OGRlcDE1CisgIH0sCisgIHsgLy8gRW50cnkgMTQ2CisgICAgLTB4MS45Nzc1NTJmOGU2YWIzYzAxY2IyOWVjNzc4MDMwMDdjZnAtMTMsCisgICAgMHgxLjljYmMxYXA1MAorICB9LAorICB7IC8vIEVudHJ5IDE0NworICAgIC0weDEuOTc3NTUyZjhlNmFiM2MwMWNiMjllYzc3ODAzMDA3Y2ZwLTEzLAorICAgIC0weDEuOWNiYzFhcDUwCisgIH0sCisgIHsgLy8gRW50cnkgMTQ4CisgICAgMHgxLmZmNThjNWZmZmZmZmM3MjY2YTlkZjRlOTIxNzI2NzcxcC0xLAorICAgIDB4MS45ZGRiMDZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDkKKyAgICAweDEuZmY1OGM1ZmZmZmZmYzcyNjZhOWRmNGU5MjE3MjY3NzFwLTEsCisgICAgLTB4MS45ZGRiMDZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTAKKyAgICAweDEuZmZmZmZmZmZmZmZmZjU3MDAwMTlmZmZmZjAwOTRjMTVwLTEsCisgICAgMHgxLjlmZmZmZXAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTEKKyAgICAweDEuZmZmZmZmZmZmZmZmZjU3MDAwMTlmZmZmZjAwOTRjMTVwLTEsCisgICAgLTB4MS45ZmZmZmVwLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTUyCisgICAgMHgxLjMxYmQ2MzAwNGIxZmY0ZDcyMmM3NDUwNDQ3MDZkNTE3cC0xLAorICAgIDB4MS5hYzEyOWNwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTMKKyAgICAweDEuMzFiZDYzMDA0YjFmZjRkNzIyYzc0NTA0NDcwNmQ1MTdwLTEsCisgICAgLTB4MS5hYzEyOWNwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTQKKyAgICAtMHgxLmYxYWQwZjAwMDAwOWUwNmNlNDQ5ZjViZGUwM2Q1ZDFhcC0xLAorICAgIDB4MS5iMDc4ZjhwMQorICB9LAorICB7IC8vIEVudHJ5IDE1NQorICAgIC0weDEuZjFhZDBmMDAwMDA5ZTA2Y2U0NDlmNWJkZTAzZDVkMWFwLTEsCisgICAgLTB4MS5iMDc4ZjhwMQorICB9LAorICB7IC8vIEVudHJ5IDE1NgorICAgIDB4MS5mZjQ3NzZmZmUzMjRiYTI5NThhY2E4ZDczY2Y4YjgzOXAtMSwKKyAgICAweDEuYjJjMDNjcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTU3CisgICAgMHgxLmZmNDc3NmZmZTMyNGJhMjk1OGFjYThkNzNjZjhiODM5cC0xLAorICAgIC0weDEuYjJjMDNjcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTU4CisgICAgMHgxLmZmNDM3ZjAwMDA1ZTUwMGQyOWJkODEwM2E4ZTc2OWU5cC0xLAorICAgIDB4MS5iNzY2ZjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTkKKyAgICAweDEuZmY0MzdmMDAwMDVlNTAwZDI5YmQ4MTAzYThlNzY5ZTlwLTEsCisgICAgLTB4MS5iNzY2ZjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjAKKyAgICAtMHgxLjk5NjYzZGE5NGRiNzM0OGJjYmIyNTdlZDE2YjcyMjdjcC0yNCwKKyAgICAweDEuYmVlZWVlcDc5CisgIH0sCisgIHsgLy8gRW50cnkgMTYxCisgICAgLTB4MS45OTY2M2RhOTRkYjczNDhiY2JiMjU3ZWQxNmI3MjI3Y3AtMjQsCisgICAgLTB4MS5iZWVlZWVwNzkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjIKKyAgICAweDEuZjNkNjIwZmZmZmZmODYwZTQ5YmJhYjg5NjNkY2M0MmVwLTEsCisgICAgMHgxLmJmNGUxY3AtMworICB9LAorICB7IC8vIEVudHJ5IDE2MworICAgIDB4MS5mM2Q2MjBmZmZmZmY4NjBlNDliYmFiODk2M2RjYzQyZXAtMSwKKyAgICAtMHgxLmJmNGUxY3AtMworICB9LAorICB7IC8vIEVudHJ5IDE2NAorICAgIDB4MS44MWZmNzllZDkyMDE3NTVmN2FkMThiNTMzYWE5OWQxOHAtMSwKKyAgICAweDEuYzBwMgorICB9LAorICB7IC8vIEVudHJ5IDE2NQorICAgIDB4MS44MWZmNzllZDkyMDE3NTVmN2FkMThiNTMzYWE5OWQxOHAtMSwKKyAgICAtMHgxLmMwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjYKKyAgICAtMHgxLmFmM2M2MTA4ODg3NzMwZmNlY2VkZjYxZDJkODFjZWFicC0xNSwKKyAgICAweDEuYzIwZWM4cDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTY3CisgICAgLTB4MS5hZjNjNjEwODg4NzczMGZjZWNlZGY2MWQyZDgxY2VhYnAtMTUsCisgICAgLTB4MS5jMjBlYzhwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjgKKyAgICAtMHgxLmIxNjU2ZWY5MTQ0N2ZhNmE1NDZjYmQ4MTAzNGNhZmFicC0xNCwKKyAgICAweDEuYzc5ZDIwcDE3CisgIH0sCisgIHsgLy8gRW50cnkgMTY5CisgICAgLTB4MS5iMTY1NmVmOTE0NDdmYTZhNTQ2Y2JkODEwMzRjYWZhYnAtMTQsCisgICAgLTB4MS5jNzlkMjBwMTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzAKKyAgICAweDEuMmRhMWQzMDA3YTU3NDYxZjZmNjdmMmQzZTk4M2Y3OThwLTEsCisgICAgMHgxLmNhN2NlMHAyNAorICB9LAorICB7IC8vIEVudHJ5IDE3MQorICAgIDB4MS4yZGExZDMwMDdhNTc0NjFmNmY2N2YyZDNlOTgzZjc5OHAtMSwKKyAgICAtMHgxLmNhN2NlMHAyNAorICB9LAorICB7IC8vIEVudHJ5IDE3MgorICAgIDB4MS5mZmRkMzc4ODgzODdjZTNjOTgyODE0NDY3NmYyYWIwZHAtMSwKKyAgICAweDEuY2MzMWI4cDE4CisgIH0sCisgIHsgLy8gRW50cnkgMTczCisgICAgMHgxLmZmZGQzNzg4ODM4N2NlM2M5ODI4MTQ0Njc2ZjJhYjBkcC0xLAorICAgIC0weDEuY2MzMWI4cDE4CisgIH0sCisgIHsgLy8gRW50cnkgMTc0CisgICAgMHgxLjM5NWJhNGZmZmZhMDYxMjIzZjczMDQyOTliZTBhYWQ4cC0xLAorICAgIDB4MS5kMzA4OTJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzUKKyAgICAweDEuMzk1YmE0ZmZmZmEwNjEyMjNmNzMwNDI5OWJlMGFhZDhwLTEsCisgICAgLTB4MS5kMzA4OTJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzYKKyAgICAweDEuY2IyN2M2ZmZkOGU5ZDUxYTA2MDViNTdmZDAyZWU0ODNwLTEsCisgICAgMHgxLmQ1NTc0Y3AtMgorICB9LAorICB7IC8vIEVudHJ5IDE3NworICAgIDB4MS5jYjI3YzZmZmQ4ZTlkNTFhMDYwNWI1N2ZkMDJlZTQ4M3AtMSwKKyAgICAtMHgxLmQ1NTc0Y3AtMgorICB9LAorICB7IC8vIEVudHJ5IDE3OAorICAgIDB4MS5hMGEwOWNmZDJiMmIyMzQ3NmYwOWFhM2ViNjMxMzUxY3AtNSwKKyAgICAweDEuZDc1NTdhcDEyCisgIH0sCisgIHsgLy8gRW50cnkgMTc5CisgICAgMHgxLmEwYTA5Y2ZkMmIyYjIzNDc2ZjA5YWEzZWI2MzEzNTFjcC01LAorICAgIC0weDEuZDc1NTdhcDEyCisgIH0sCisgIHsgLy8gRW50cnkgMTgwCisgICAgMHgxLjM4YWU2ZDAwMGM0OWRmNTAwMWJhZjcwMWIxYTJhNTY0cC0xLAorICAgIDB4MS5kYmU3NWNwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODEKKyAgICAweDEuMzhhZTZkMDAwYzQ5ZGY1MDAxYmFmNzAxYjFhMmE1NjRwLTEsCisgICAgLTB4MS5kYmU3NWNwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODIKKyAgICAweDEuZmZmZjFmMDAxMjVhYmYzZDE3NjU3ODFiNjRlNmZlMDdwLTEsCisgICAgMHgxLmRmZmZmZXAtOQorICB9LAorICB7IC8vIEVudHJ5IDE4MworICAgIDB4MS5mZmZmMWYwMDEyNWFiZjNkMTc2NTc4MWI2NGU2ZmUwN3AtMSwKKyAgICAtMHgxLmRmZmZmZXAtOQorICB9LAorICB7IC8vIEVudHJ5IDE4NAorICAgIC0weDEuOWFiYzc2ZjdlYjFkMTVhNzI3ZTBiZTdhYjE2NDAwYTdwLTEsCisgICAgMHgxLmUwMmE0MnAxMDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODUKKyAgICAtMHgxLjlhYmM3NmY3ZWIxZDE1YTcyN2UwYmU3YWIxNjQwMGE3cC0xLAorICAgIC0weDEuZTAyYTQycDEwOAorICB9LAorICB7IC8vIEVudHJ5IDE4NgorICAgIDB4MS41YTE0MjkwNDRlYjA4NzAzMmRiZWU3MTljZGQzMDIyNnAtMSwKKyAgICAweDEuZTcwMWVhcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDE4NworICAgIDB4MS41YTE0MjkwNDRlYjA4NzAzMmRiZWU3MTljZGQzMDIyNnAtMSwKKyAgICAtMHgxLmU3MDFlYXAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODgKKyAgICAtMHgxLjk0ZmZjMGY4ZDg4OGY2ZjQ2YzZkNTVhMmVmYTEwODNmcC0xLAorICAgIDB4MS5lZGYxODhwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODkKKyAgICAtMHgxLjk0ZmZjMGY4ZDg4OGY2ZjQ2YzZkNTVhMmVmYTEwODNmcC0xLAorICAgIC0weDEuZWRmMTg4cDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTkwCisgICAgLTB4MS4yN2M2ZDMwMGQ4NzU2ZTc4ODQ2Yjg0YTFmYTNiMTJhMnAtMSwKKyAgICAweDEuZjRjNjNhcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTkxCisgICAgLTB4MS4yN2M2ZDMwMGQ4NzU2ZTc4ODQ2Yjg0YTFmYTNiMTJhMnAtMSwKKyAgICAtMHgxLmY0YzYzYXAyNAorICB9LAorICB7IC8vIEVudHJ5IDE5MgorICAgIDB4MS5kYTU0ZWNlZmIxY2QzOTUxMDU1NTEyNmE3NmNiMjBkNHAtNywKKyAgICAweDEuZjViYTc2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTMKKyAgICAweDEuZGE1NGVjZWZiMWNkMzk1MTA1NTUxMjZhNzZjYjIwZDRwLTcsCisgICAgLTB4MS5mNWJhNzZwMgorICB9LAorICB7IC8vIEVudHJ5IDE5NAorICAgIDB4MS5mYzI4ZGEwMDAwMDZiYzRmMGIwY2QzYzhhYjEwZmM1N3AtMSwKKyAgICAweDEuZjVmZjRlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTk1CisgICAgMHgxLmZjMjhkYTAwMDAwNmJjNGYwYjBjZDNjOGFiMTBmYzU3cC0xLAorICAgIC0weDEuZjVmZjRlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTk2CisgICAgLTB4MS5mZmZmZmZmZmZmZWEzOTZhYjhhZWU1MDkzOTJjNzU1ZHAtMSwKKyAgICAweDEuZjZhN2EycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTcKKyAgICAtMHgxLmZmZmZmZmZmZmZlYTM5NmFiOGFlZTUwOTM5MmM3NTVkcC0xLAorICAgIC0weDEuZjZhN2EycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTgKKyAgICAweDEuYTRmMWQ0ZmQwZWEyODZmMzJmM2NiMzA5MmI0Y2VkMTRwLTUsCisgICAgMHgxLmY2YmZmMnAxMgorICB9LAorICB7IC8vIEVudHJ5IDE5OQorICAgIDB4MS5hNGYxZDRmZDBlYTI4NmYzMmYzY2IzMDkyYjRjZWQxNHAtNSwKKyAgICAtMHgxLmY2YmZmMnAxMgorICB9LAorICB7IC8vIEVudHJ5IDIwMAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmFmMzNkZTI5MGNhOTllMmZhZjNwLTEsCisgICAgMHgxLmY5Y2JlMnA4CisgIH0sCisgIHsgLy8gRW50cnkgMjAxCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmYWYzM2RlMjkwY2E5OWUyZmFmM3AtMSwKKyAgICAtMHgxLmY5Y2JlMnA4CisgIH0sCisgIHsgLy8gRW50cnkgMjAyCisgICAgMHgxLmZkZDQwZDZkOTEyY2UyNTk0ZjIwMDEwNDU3MGFjMWIzcC0zLAorICAgIDB4MS5mYzc2N2VwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDMKKyAgICAweDEuZmRkNDBkNmQ5MTJjZTI1OTRmMjAwMTA0NTcwYWMxYjNwLTMsCisgICAgLTB4MS5mYzc2N2VwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDQKKyAgICAtMHgxLjc1MmRlMmZmZmZiMWE1ZTIyN2JmMmMxMmY0MDgzMjAzcC0xLAorICAgIDB4MS5mZjUzNTJwOAorICB9LAorICB7IC8vIEVudHJ5IDIwNQorICAgIC0weDEuNzUyZGUyZmZmZmIxYTVlMjI3YmYyYzEyZjQwODMyMDNwLTEsCisgICAgLTB4MS5mZjUzNTJwOAorICB9LAorICB7IC8vIEVudHJ5IDIwNgorICAgIC0weDEuNGVkNGM1ZmZjODAxODc0MTg3MDk0OTc2N2ZmOGRhZmFwLTEsCisgICAgMHgxLmZmZjFmZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMjA3CisgICAgLTB4MS40ZWQ0YzVmZmM4MDE4NzQxODcwOTQ5NzY3ZmY4ZGFmYXAtMSwKKyAgICAtMHgxLmZmZjFmZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMjA4CisgICAgLTB4MS4yODQwNmEwMDI1NTQ1YzlhNTY4ZGFjZDQ1NTE4ZGQ2NXAtMywKKyAgICAweDEuZmZmMWZlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDkKKyAgICAtMHgxLjI4NDA2YTAwMjU1NDVjOWE1NjhkYWNkNDU1MThkZDY1cC0zLAorICAgIC0weDEuZmZmMWZlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTAKKyAgICAweDEuZjAxNWM4YzI0Y2E1ZTk5YzdjNjU1OTljOGQ2MDk3NmVwLTEsCisgICAgMHgxLmZmZjdmZXAtMworICB9LAorICB7IC8vIEVudHJ5IDIxMQorICAgIDB4MS5mMDE1YzhjMjRjYTVlOTljN2M2NTU5OWM4ZDYwOTc2ZXAtMSwKKyAgICAtMHgxLmZmZjdmZXAtMworICB9LAorICB7IC8vIEVudHJ5IDIxMgorICAgIDB4MS5hZmY5YjQ1ZTk0ZDMyZDhlNWJkZTI1ZGVjNmYzNTdkNnAtOSwKKyAgICAweDEuZmZmZTNlcDQxCisgIH0sCisgIHsgLy8gRW50cnkgMjEzCisgICAgMHgxLmFmZjliNDVlOTRkMzJkOGU1YmRlMjVkZWM2ZjM1N2Q2cC05LAorICAgIC0weDEuZmZmZTNlcDQxCisgIH0sCisgIHsgLy8gRW50cnkgMjE0CisgICAgLTB4MS5lYTU0NjRmZmY1NzFmNmZmMzM1MDA0ZWFkZTMwMWI1NnAtMSwKKyAgICAweDEuZmZmZjhlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTUKKyAgICAtMHgxLmVhNTQ2NGZmZjU3MWY2ZmYzMzUwMDRlYWRlMzAxYjU2cC0xLAorICAgIC0weDEuZmZmZjhlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTYKKyAgICAweDEuZmZmZDRlNzM1ZGY2ZGI2YTdjYTdjYjA0MzZlNmVmNDhwLTEsCisgICAgMHgxLmZmZmY4ZXA0MAorICB9LAorICB7IC8vIEVudHJ5IDIxNworICAgIDB4MS5mZmZkNGU3MzVkZjZkYjZhN2NhN2NiMDQzNmU2ZWY0OHAtMSwKKyAgICAtMHgxLmZmZmY4ZXA0MAorICB9LAorICB7IC8vIEVudHJ5IDIxOAorICAgIC0weDEuODhlNTI3ZmZlZGQ4NWQyZTI0MjkxNjZmNzk1ZDk3ODhwLTcsCisgICAgMHgxLmZmZmY5ZXA0NQorICB9LAorICB7IC8vIEVudHJ5IDIxOQorICAgIC0weDEuODhlNTI3ZmZlZGQ4NWQyZTI0MjkxNjZmNzk1ZDk3ODhwLTcsCisgICAgLTB4MS5mZmZmOWVwNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjAKKyAgICAtMHgxLmRiOGZhMGUwNzFmOTgwNjFmMjdlZjY3MTYxNTExNDM3cC0zLAorICAgIDB4MS5mZmZmYmFwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjEKKyAgICAtMHgxLmRiOGZhMGUwNzFmOTgwNjFmMjdlZjY3MTYxNTExNDM3cC0zLAorICAgIC0weDEuZmZmZmJhcDIzCisgIH0sCisgIHsgLy8gRW50cnkgMjIyCisgICAgLTB4MS5mZTViMzM3ZjRjZmUyNWQ0NjhkZWZlNjVkNWM1MjRhZHAtMSwKKyAgICAweDEuZmZmZmRjcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjMKKyAgICAtMHgxLmZlNWIzMzdmNGNmZTI1ZDQ2OGRlZmU2NWQ1YzUyNGFkcC0xLAorICAgIC0weDEuZmZmZmRjcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjQKKyAgICAtMHgxLmY1OTAzOGY0YzJkZDMzZDE1OTE3MWVlODBiYjY0ODg2cC01LAorICAgIDB4MS5mZmZmZjhwMTE4CisgIH0sCisgIHsgLy8gRW50cnkgMjI1CisgICAgLTB4MS5mNTkwMzhmNGMyZGQzM2QxNTkxNzFlZTgwYmI2NDg4NnAtNSwKKyAgICAtMHgxLmZmZmZmOHAxMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjYKKyAgICAweDEuZmZmZmZjMDAwMDExNTU1NTNhN2QyN2Y0YTI4OWYzMTlwLTEsCisgICAgMHgxLmZmZmZmY3AtMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjcKKyAgICAweDEuZmZmZmZjMDAwMDExNTU1NTNhN2QyN2Y0YTI4OWYzMTlwLTEsCisgICAgLTB4MS5mZmZmZmNwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgMjI4CisgICAgLTB4MS5mOWQ2YmRkNjI0NzNjZDJiNzI5ZmUzYTY3YTRlOTE1N3AtNCwKKyAgICAweDEuZmZmZmZjcDIyCisgIH0sCisgIHsgLy8gRW50cnkgMjI5CisgICAgLTB4MS5mOWQ2YmRkNjI0NzNjZDJiNzI5ZmUzYTY3YTRlOTE1N3AtNCwKKyAgICAtMHgxLmZmZmZmY3AyMgorICB9LAorICB7IC8vIEVudHJ5IDIzMAorICAgIDB4MS5lYjQwODMwMDAwNWQ5MWI5ODE0Y2FkYTg4ZjVmYzU5NnAtMSwKKyAgICAweDEuMjQ4MzZjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjMxCisgICAgMHgxLmViNDA4MzAwMDA1ZDkxYjk4MTRjYWRhODhmNWZjNTk2cC0xLAorICAgIC0weDEuMjQ4MzZjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjMyCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgMjM0CisgICAgMHgxLnAwLAorICAgIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDIzNQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDIzNworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjAwMDAwMnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMjM4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wMDAwMDJwLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDIzOQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMjQwCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI0MQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLmZmZmZmY3AtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMjQyCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5mZmZmZmNwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDI0MworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5mZmZmZmNwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDI0NQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI0NworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDgKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wMDAwMDJwLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI0OQorICAgIDB4MS5mZmZmZmY1YzI4ZjU3OTYwY2Q1NmViZmU5NDgyYTYxZnAtMSwKKyAgICAweDEuOTk5OTlhcC0xMworICB9LAorICB7IC8vIEVudHJ5IDI1MAorICAgIDB4MS5mZmZmZmY1YzI4ZjU3OTYwY2Q1NmViZmU5NDgyYTYxZnAtMSwKKyAgICAtMHgxLjk5OTk5YXAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTEKKyAgICAweDEuZmZmZmZkNzBhM2Q2NGU1ZWMxNjVjZDQzMDdhZDEzMjZwLTEsCisgICAgMHgxLjk5OTk5YXAtMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTIKKyAgICAweDEuZmZmZmZkNzBhM2Q2NGU1ZWMxNjVjZDQzMDdhZDEzMjZwLTEsCisgICAgLTB4MS45OTk5OWFwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgMjUzCisgICAgMHgxLmZmZmZmYTNkNzA5ZWVjYmZiNWEzODViMGYzZTBjYjhmcC0xLAorICAgIDB4MS4zMzMzMzRwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMjU0CisgICAgMHgxLmZmZmZmYTNkNzA5ZWVjYmZiNWEzODViMGYzZTBjYjhmcC0xLAorICAgIC0weDEuMzMzMzM0cC0xMQorICB9LAorICB7IC8vIEVudHJ5IDI1NQorICAgIDB4MS5mZmZmZjVjMjhmNWZjNzMzYzQyMDJhYTBiZGE5MmY5N3AtMSwKKyAgICAweDEuOTk5OTlhcC0xMQorICB9LAorICB7IC8vIEVudHJ5IDI1NgorICAgIDB4MS5mZmZmZjVjMjhmNWZjNzMzYzQyMDJhYTBiZGE5MmY5N3AtMSwKKyAgICAtMHgxLjk5OTk5YXAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTcKKyAgICAweDEuZmZmZmYwMDAwMDE1NTU1NTQ5ZjQ5ZjRkMzRkMzRjYTBwLTEsCisgICAgMHgxLnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTgKKyAgICAweDEuZmZmZmYwMDAwMDE1NTU1NTQ5ZjQ5ZjRkMzRkMzRjYTBwLTEsCisgICAgLTB4MS5wLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjU5CisgICAgMHgxLmZmZmZlOGY1YzI5Y2UwNzY0MGJkNWY2ZDhiYjFlYTZicC0xLAorICAgIDB4MS4zMzMzMzRwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjYwCisgICAgMHgxLmZmZmZlOGY1YzI5Y2UwNzY0MGJkNWY2ZDhiYjFlYTZicC0xLAorICAgIC0weDEuMzMzMzM0cC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI2MQorICAgIDB4MS5mZmZmZTBhM2Q3MTQ4MzlmMzYwMTE0N2FkYTczZjhkOXAtMSwKKyAgICAweDEuNjY2NjY4cC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI2MgorICAgIDB4MS5mZmZmZTBhM2Q3MTQ4MzlmMzYwMTE0N2FkYTczZjhkOXAtMSwKKyAgICAtMHgxLjY2NjY2OHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjMKKyAgICAweDEuZmZmZmQ3MGEzZDgxOTFmNjZkZTU0MDhmYjJiOTk1YTBwLTEsCisgICAgMHgxLjk5OTk5Y3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjQKKyAgICAweDEuZmZmZmQ3MGEzZDgxOTFmNjZkZTU0MDhmYjJiOTk1YTBwLTEsCisgICAgLTB4MS45OTk5OWNwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjY1CisgICAgMHgxLmZmZmZjYzI4ZjZkMDk2Yjg3ZDZkMTlhMDZlOTY5OTlicC0xLAorICAgIDB4MS5jY2NjY2NwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjY2CisgICAgMHgxLmZmZmZjYzI4ZjZkMDk2Yjg3ZDZkMTlhMDZlOTY5OTlicC0xLAorICAgIC0weDEuY2NjY2NjcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI2NworICAgIDB4MS5mZmZiY2MyYTcxY2VhYWJmNTU4MmI2ZGExZmMzMDUzMXAtMSwKKyAgICAweDEuMDY2NjY2cC03CisgIH0sCisgIHsgLy8gRW50cnkgMjY4CisgICAgMHgxLmZmZmJjYzJhNzFjZWFhYmY1NTgyYjZkYTFmYzMwNTMxcC0xLAorICAgIC0weDEuMDY2NjY2cC03CisgIH0sCisgIHsgLy8gRW50cnkgMjY5CisgICAgMHgxLmZmZjMwYTRiN2I1MTE5ZDhlMjk5ZjcxN2VjMGVjZTE2cC0xLAorICAgIDB4MS5jY2NjY2NwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzAKKyAgICAweDEuZmZmMzBhNGI3YjUxMTlkOGUyOTlmNzE3ZWMwZWNlMTZwLTEsCisgICAgLTB4MS5jY2NjY2NwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzEKKyAgICAweDEuZmZlNTdhNzg1MTIzMjI2YzFlMmVmYjQxMTM1M2VkYzlwLTEsCisgICAgMHgxLjQ5OTk5OHAtNgorICB9LAorICB7IC8vIEVudHJ5IDI3MgorICAgIDB4MS5mZmU1N2E3ODUxMjMyMjZjMWUyZWZiNDExMzUzZWRjOXAtMSwKKyAgICAtMHgxLjQ5OTk5OHAtNgorICB9LAorICB7IC8vIEVudHJ5IDI3MworICAgIDB4MS5mZmQzMWNkMTBjYjYzMmQ5NzMzYWM1ZjVmMzI3YTVmOXAtMSwKKyAgICAweDEuYWNjY2NjcC02CisgIH0sCisgIHsgLy8gRW50cnkgMjc0CisgICAgMHgxLmZmZDMxY2QxMGNiNjMyZDk3MzNhYzVmNWYzMjdhNWY5cC0xLAorICAgIC0weDEuYWNjY2NjcC02CisgIH0sCisgIHsgLy8gRW50cnkgMjc1CisgICAgMHgxLmZmYmJmMTgyMDc1NDJlZjgxMzkwZDczYzNiYTg5YzFhcC0xLAorICAgIDB4MS4wOHAtNQorICB9LAorICB7IC8vIEVudHJ5IDI3NgorICAgIDB4MS5mZmJiZjE4MjA3NTQyZWY4MTM5MGQ3M2MzYmE4OWMxYXAtMSwKKyAgICAtMHgxLjA4cC01CisgIH0sCisgIHsgLy8gRW50cnkgMjc3CisgICAgMHgxLmZmOWZmOGMyZWFlYWVlMzBmYjIxMTc2NWFmODM1MTcxcC0xLAorICAgIDB4MS4zOTk5OWFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzgKKyAgICAweDEuZmY5ZmY4YzJlYWVhZWUzMGZiMjExNzY1YWY4MzUxNzFwLTEsCisgICAgLTB4MS4zOTk5OWFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzkKKyAgICAweDEuZmY3ZjMyZDZlYjFmOWNmOTAyMjZlYzI5MWM5ZTA5MjJwLTEsCisgICAgMHgxLjZiMzMzNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDI4MAorICAgIDB4MS5mZjdmMzJkNmViMWY5Y2Y5MDIyNmVjMjkxYzllMDkyMnAtMSwKKyAgICAtMHgxLjZiMzMzNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDI4MQorICAgIDB4MS5mZjU5YTAwY2M0YWQ0OTJjYTI1OTc0OTU0MTI5OThlZHAtMSwKKyAgICAweDEuOWNjY2NlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjgyCisgICAgMHgxLmZmNTlhMDBjYzRhZDQ5MmNhMjU5NzQ5NTQxMjk5OGVkcC0xLAorICAgIC0weDEuOWNjY2NlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjgzCisgICAgMHgxLmZmMmY0MGMwOGFjZjQ1ODBhOGQxMzM4MGQ5MDczMzk4cC0xLAorICAgIDB4MS5jZTY2NjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODQKKyAgICAweDEuZmYyZjQwYzA4YWNmNDU4MGE4ZDEzMzgwZDkwNzMzOThwLTEsCisgICAgLTB4MS5jZTY2NjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODUKKyAgICAweDEuOGNhNDZjYTAxMTc3MWJmYWUwZDllZGJmMWRhY2I0MDJwLTEsCisgICAgMHgxLjVlN2ZjNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI4NgorICAgIDB4MS44Y2E0NmNhMDExNzcxYmZhZTBkOWVkYmYxZGFjYjQwMnAtMSwKKyAgICAtMHgxLjVlN2ZjNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI4NworICAgIDB4MS4wYjVkMzhkNWQ4MmU0YTc2MjRkYWM0ZTEwY2UxNTljMnAtMiwKKyAgICAweDEuNGU3ZmM0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODgKKyAgICAweDEuMGI1ZDM4ZDVkODJlNGE3NjI0ZGFjNGUxMGNlMTU5YzJwLTIsCisgICAgLTB4MS40ZTdmYzRwMAorICB9LAorICB7IC8vIEVudHJ5IDI4OQorICAgIC0weDEuNjZiOTZlMjA0ZTY5Y2RhOGU5Y2Y1MDk5NjQzMjUzOWVwLTIsCisgICAgMHgxLmVkYmZhNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjkwCisgICAgLTB4MS42NmI5NmUyMDRlNjljZGE4ZTljZjUwOTk2NDMyNTM5ZXAtMiwKKyAgICAtMHgxLmVkYmZhNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjkxCisgICAgLTB4MS5hOTM1NTQwZWRlY2E0YzIyMGVkOTFkYzU0ODFlNGQ5YnAtMSwKKyAgICAweDEuNDY3ZmM0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTIKKyAgICAtMHgxLmE5MzU1NDBlZGVjYTRjMjIwZWQ5MWRjNTQ4MWU0ZDlicC0xLAorICAgIC0weDEuNDY3ZmM0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTMKKyAgICAtMHgxLmZmYzAwMTdkZDkyMDlkZDg4OTFmMTdmZTRjOWVlZTQ2cC0xLAorICAgIDB4MS45NjFmYjRwMQorICB9LAorICB7IC8vIEVudHJ5IDI5NAorICAgIC0weDEuZmZjMDAxN2RkOTIwOWRkODg5MWYxN2ZlNGM5ZWVlNDZwLTEsCisgICAgLTB4MS45NjFmYjRwMQorICB9LAorICB7IC8vIEVudHJ5IDI5NQorICAgIC0weDEuOTY5MDgyMDA3NzMzZDc4N2Y0YzM2YmEwZjk0MjU2OTRwLTEsCisgICAgMHgxLmU1YmZhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMjk2CisgICAgLTB4MS45NjkwODIwMDc3MzNkNzg3ZjRjMzZiYTBmOTQyNTY5NHAtMSwKKyAgICAtMHgxLmU1YmZhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMjk3CisgICAgLTB4MS4yYTFlNzQyMjNkOWJkZGI3ZGI1OWY3ODFmOTZiNjVlY3AtMiwKKyAgICAweDEuMWFhZmNhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTgKKyAgICAtMHgxLjJhMWU3NDIyM2Q5YmRkYjdkYjU5Zjc4MWY5NmI2NWVjcC0yLAorICAgIC0weDEuMWFhZmNhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTkKKyAgICAweDEuNDg5NGQ1MGI4NGRiYzk4MTEzNGE1OTFhYzQxNjVkOWVwLTIsCisgICAgMHgxLjQyN2ZjMnAyCisgIH0sCisgIHsgLy8gRW50cnkgMzAwCisgICAgMHgxLjQ4OTRkNTBiODRkYmM5ODExMzRhNTkxYWM0MTY1ZDllcC0yLAorICAgIC0weDEuNDI3ZmMycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDEKKyAgICAweDEuYTAxNmRkNzQ4MGExZWVhNGQ0OWVmYjU4NWZhNDljODZwLTEsCisgICAgMHgxLjZhNGZiYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzAyCisgICAgMHgxLmEwMTZkZDc0ODBhMWVlYTRkNDllZmI1ODVmYTQ5Yzg2cC0xLAorICAgIC0weDEuNmE0ZmJhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDMKKyAgICAweDEuYTMwYTZhM2JmNGEzZTJiN2UyNzY2NmQzYTljM2I3NGJwLTEsCisgICAgMHgxLjZhZjJmMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzA0CisgICAgMHgxLmEzMGE2YTNiZjRhM2UyYjdlMjc2NjZkM2E5YzNiNzRicC0xLAorICAgIC0weDEuNmFmMmYwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDUKKyAgICAweDEuNWJkNjI1NTA0MDE1Y2NjMTAxZTRmNDM0MGQ0Yjc2MmJwLTIsCisgICAgMHgxLjQzYzYyYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzA2CisgICAgMHgxLjViZDYyNTUwNDAxNWNjYzEwMWU0ZjQzNDBkNGI3NjJicC0yLAorICAgIC0weDEuNDNjNjJhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDcKKyAgICAtMHgxLjBjYjczMzQ0OGMzMGVlM2RkZmZiNGRhNjlmMGIzODQycC0yLAorICAgIDB4MS4xYzk5NjRwMgorICB9LAorICB7IC8vIEVudHJ5IDMwOAorICAgIC0weDEuMGNiNzMzNDQ4YzMwZWUzZGRmZmI0ZGE2OWYwYjM4NDJwLTIsCisgICAgLTB4MS4xYzk5NjRwMgorICB9LAorICB7IC8vIEVudHJ5IDMwOQorICAgIC0weDEuODlkODc0YWQzMGUzZmI0NjI0NGRhYTI0NDUxNjkwZDdwLTEsCisgICAgMHgxLmVhZDkzY3AxCisgIH0sCisgIHsgLy8gRW50cnkgMzEwCisgICAgLTB4MS44OWQ4NzRhZDMwZTNmYjQ2MjQ0ZGFhMjQ0NTE2OTBkN3AtMSwKKyAgICAtMHgxLmVhZDkzY3AxCisgIH0sCisgIHsgLy8gRW50cnkgMzExCisgICAgLTB4MS5mZTUxYWUwOWYwZDM5ZWQ1NTRlNjhiZWYzZTJmOGEwM3AtMSwKKyAgICAweDEuOWM3ZmIwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTIKKyAgICAtMHgxLmZlNTFhZTA5ZjBkMzllZDU1NGU2OGJlZjNlMmY4YTAzcC0xLAorICAgIC0weDEuOWM3ZmIwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTMKKyAgICAtMHgxLmI5N2JmNzZhZTc2NWViNjljZjU1ZTgwYWFlOTc3MzAzcC0xLAorICAgIDB4MS40ZTI2MjRwMQorICB9LAorICB7IC8vIEVudHJ5IDMxNAorICAgIC0weDEuYjk3YmY3NmFlNzY1ZWI2OWNmNTVlODBhYWU5NzczMDNwLTEsCisgICAgLTB4MS40ZTI2MjRwMQorICB9LAorICB7IC8vIEVudHJ5IDMxNQorICAgIC0weDEuYThhYzU3OTNlMzI2MjliMTMxOTg0ZWNmZmQyZDBmMzFwLTIsCisgICAgMHgxLmZmOTkzMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzE2CisgICAgLTB4MS5hOGFjNTc5M2UzMjYyOWIxMzE5ODRlY2ZmZDJkMGYzMXAtMiwKKyAgICAtMHgxLmZmOTkzMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzE3CisgICAgMHgxLjc3YTkyY2EwMWJjNzljMTk1ZGRhMzM3MzY4MDdmOTg2cC0zLAorICAgIDB4MS42MmU2MWNwMAorICB9LAorICB7IC8vIEVudHJ5IDMxOAorICAgIDB4MS43N2E5MmNhMDFiYzc5YzE5NWRkYTMzNzM2ODA3Zjk4NnAtMywKKyAgICAtMHgxLjYyZTYxY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMzE5CisgICAgMHgxLjZlMTA2MDI4MmMxNDg4ZDlhYmQ4M2RhMWQ2OGNkMGY3cC0xLAorICAgIDB4MS44YzY2MmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjAKKyAgICAweDEuNmUxMDYwMjgyYzE0ODhkOWFiZDgzZGExZDY4Y2QwZjdwLTEsCisgICAgLTB4MS44YzY2MmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjEKKyAgICAtMHgxLjY4MmYyYmI4N2E4ZjUwMTE3MzUwOTQxNzZjOWI2ZGFjcC00LAorICAgIC0weDEuYThhYTFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjIKKyAgICAtMHgxLjY4MmYyYmI4N2E4ZjUwMTE3MzUwOTQxNzZjOWI2ZGFjcC00LAorICAgIDB4MS5hOGFhMWNwMAorICB9LAorICB7IC8vIEVudHJ5IDMyMworICAgIC0weDEuZTY2NWNiMmFmODQyYmU1YmE1ZjY1OTYwNTk5YTk3ZWNwLTcsCisgICAgLTB4MS45NWVjOGFwMAorICB9LAorICB7IC8vIEVudHJ5IDMyNAorICAgIC0weDEuZTY2NWNiMmFmODQyYmU1YmE1ZjY1OTYwNTk5YTk3ZWNwLTcsCisgICAgMHgxLjk1ZWM4YXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzI1CisgICAgMHgxLmRkZDIzMTUwMWIxMmZjZjJiYzIwNjMzYmU0ZDUxZTUxcC01LAorICAgIC0weDEuODMyZWY4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjYKKyAgICAweDEuZGRkMjMxNTAxYjEyZmNmMmJjMjA2MzNiZTRkNTFlNTFwLTUsCisgICAgMHgxLjgzMmVmOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzI3CisgICAgMHgxLjBjYWJhNjk5NzY5MWFiMTk3MGQ0M2M3NDE5ZWQ1MWUxcC0zLAorICAgIC0weDEuNzA3MTY2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjgKKyAgICAweDEuMGNhYmE2OTk3NjkxYWIxOTcwZDQzYzc0MTllZDUxZTFwLTMsCisgICAgMHgxLjcwNzE2NnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzI5CisgICAgMHgxLmEwNzI1NDFmZDZlYWY4YjY1YTg3NGM1OGQ2Y2M1NzM5cC0zLAorICAgIC0weDEuNWRiM2Q0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzAKKyAgICAweDEuYTA3MjU0MWZkNmVhZjhiNjVhODc0YzU4ZDZjYzU3MzlwLTMsCisgICAgMHgxLjVkYjNkNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzMxCisgICAgMHgxLjE4ZmVmODEwNmJlYTYzYjllOTZhN2FkZjUzOGM2MTk0cC0yLAorICAgIC0weDEuNGFmNjQycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzIKKyAgICAweDEuMThmZWY4MTA2YmVhNjNiOWU5NmE3YWRmNTM4YzYxOTRwLTIsCisgICAgMHgxLjRhZjY0MnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzMzCisgICAgMHgxLjYwNDM3Mjc3ZDQ4MDY3ZTg1MjMwYmNlMTg4M2VhYWJhcC0yLAorICAgIC0weDEuMzgzOGIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzQKKyAgICAweDEuNjA0MzcyNzdkNDgwNjdlODUyMzBiY2UxODgzZWFhYmFwLTIsCisgICAgMHgxLjM4MzhiMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzM1CisgICAgMHgxLmE1YTRkZWQ0OTJiZWRmZThjZjVjMzRjYWRkNzhkZjc1cC0yLAorICAgIC0weDEuMjU3YjFlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzYKKyAgICAweDEuYTVhNGRlZDQ5MmJlZGZlOGNmNWMzNGNhZGQ3OGRmNzVwLTIsCisgICAgMHgxLjI1N2IxZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzM3CisgICAgMHgxLmU4YzQwNDA2NzhkMmVmNzM2MzMzYTQ1MzdhMTExM2ExcC0yLAorICAgIC0weDEuMTJiZDkycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzgKKyAgICAweDEuZThjNDA0MDY3OGQyZWY3MzYzMzNhNDUzN2ExMTEzYTFwLTIsCisgICAgMHgxLjEyYmQ5MnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzM5CisgICAgMHgxLjI2OTc2YjFiMTZkMTkwOTFjMDkyNTk3NjVjNGIzODcycC0xLAorICAgIC0weDEuZWE1YzNlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzQwCisgICAgMHgxLjI2OTc2YjFiMTZkMTkwOTFjMDkyNTk3NjVjNGIzODcycC0xLAorICAgIDB4MS5lYTVjM2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDEKKyAgICAweDEuMzgwNWEyZGFmZGE3Zjg1NTRhZWM2NWRhYjM0OGE3MTRwLTEsCisgICAgLTB4MS5kNGI4N2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDIKKyAgICAweDEuMzgwNWEyZGFmZGE3Zjg1NTRhZWM2NWRhYjM0OGE3MTRwLTEsCisgICAgMHgxLmQ0Yjg3Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDM0MworICAgIDB4MS40OGU1MmZmNWJiZTc5NDYxOGI4NTE5MGI4NjQxMTgyNHAtMSwKKyAgICAtMHgxLmJmMTRiYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM0NAorICAgIDB4MS40OGU1MmZmNWJiZTc5NDYxOGI4NTE5MGI4NjQxMTgyNHAtMSwKKyAgICAweDEuYmYxNGJhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzQ1CisgICAgMHgxLjU5MmU1YjYxNWVmNWFlNDYzOTc2ZDMxMTQxZGJhY2YwcC0xLAorICAgIC0weDEuYTk3MGY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzQ2CisgICAgMHgxLjU5MmU1YjYxNWVmNWFlNDYzOTc2ZDMxMTQxZGJhY2YwcC0xLAorICAgIDB4MS5hOTcwZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDcKKyAgICAweDEuNjhkOWIyZDY1N2U0MzA3ZDMzMWViN2JkMzVlZTE4NzlwLTEsCisgICAgLTB4MS45M2NkMzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDgKKyAgICAweDEuNjhkOWIyZDY1N2U0MzA3ZDMzMWViN2JkMzVlZTE4NzlwLTEsCisgICAgMHgxLjkzY2QzNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM0OQorICAgIDB4MS43N2UwMGMzNzE4NTI4YzM2ZjcyMmU2MzA5NmMyNjQ2YnAtMSwKKyAgICAtMHgxLjdlMjk3NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1MAorICAgIDB4MS43N2UwMGMzNzE4NTI4YzM2ZjcyMmU2MzA5NmMyNjQ2YnAtMSwKKyAgICAweDEuN2UyOTc0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzUxCisgICAgMHgxLjg2M2E4OGQ2YjA2NGYzNmYzNDM3MDcyMmQzNjFjZTlmcC0xLAorICAgIC0weDEuNjg4NWIycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzUyCisgICAgMHgxLjg2M2E4OGQ2YjA2NGYzNmYzNDM3MDcyMmQzNjFjZTlmcC0xLAorICAgIDB4MS42ODg1YjJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTMKKyAgICAweDEuOTNlMjk4OWNlZTYwODRlMzRiNTMzYjFlYjkyNzQ2ZGFwLTEsCisgICAgLTB4MS41MmUxZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTQKKyAgICAweDEuOTNlMjk4OWNlZTYwODRlMzRiNTMzYjFlYjkyNzQ2ZGFwLTEsCisgICAgMHgxLjUyZTFmMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1NQorICAgIDB4MS5hMGQxZjg2MTNlYmM2MGM3ZWU2NTAyZWUxODNjODllN3AtMSwKKyAgICAtMHgxLjNkM2UzNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1NgorICAgIDB4MS5hMGQxZjg2MTNlYmM2MGM3ZWU2NTAyZWUxODNjODllN3AtMSwKKyAgICAweDEuM2QzZTM2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzU3CisgICAgMHgxLmJjNmJkODg5YThhNTlkYmI1NmU1NDZhMzdhZTc5OGY1cC0xLAorICAgIC0weDEuMGEwYjAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzU4CisgICAgMHgxLmJjNmJkODg5YThhNTlkYmI1NmU1NDZhMzdhZTc5OGY1cC0xLAorICAgIDB4MS4wYTBiMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTkKKyAgICAweDEuY2E1OWM3MTlmOTYwNzVkZDZiN2EwZmY0NDNhZDU5ZGNwLTEsCisgICAgLTB4MS5kOGY3MjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjAKKyAgICAweDEuY2E1OWM3MTlmOTYwNzVkZDZiN2EwZmY0NDNhZDU5ZGNwLTEsCisgICAgMHgxLmQ4ZjcyMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM2MQorICAgIDB4MS5kNmMwYjEzZGY5OTYxM2E0OTMwNmI0ZGM2YzU3YWEwM3AtMSwKKyAgICAtMHgxLjlkZDgzY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDM2MgorICAgIDB4MS5kNmMwYjEzZGY5OTYxM2E0OTMwNmI0ZGM2YzU3YWEwM3AtMSwKKyAgICAweDEuOWRkODNjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzYzCisgICAgMHgxLmUxOTYwMjczYTRhYWExYmQxOWVmMGNjYWE4ODc0MTgzcC0xLAorICAgIC0weDEuNjJiOTU4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzY0CisgICAgMHgxLmUxOTYwMjczYTRhYWExYmQxOWVmMGNjYWE4ODc0MTgzcC0xLAorICAgIDB4MS42MmI5NThwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjUKKyAgICAweDEuZWFkMDdjZDJlMGY3ZjE5Njc5NjQ2MzYyYmJjMGViODBwLTEsCisgICAgLTB4MS4yNzlhNzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjYKKyAgICAweDEuZWFkMDdjZDJlMGY3ZjE5Njc5NjQ2MzYyYmJjMGViODBwLTEsCisgICAgMHgxLjI3OWE3NHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM2NworICAgIDB4MS5mMjY4NDBlZmQ4NmNlZWEyM2YzODhiNmExMTAyZWE0ZHAtMSwKKyAgICAtMHgxLmQ4ZjcyMHAtMworICB9LAorICB7IC8vIEVudHJ5IDM2OAorICAgIDB4MS5mMjY4NDBlZmQ4NmNlZWEyM2YzODhiNmExMTAyZWE0ZHAtMSwKKyAgICAweDEuZDhmNzIwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzY5CisgICAgMHgxLmY4NTZkNDkyNTFiZDM3YzU0ZjAwOTQyNzBlZWNiZDE4cC0xLAorICAgIC0weDEuNjJiOTU4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzcwCisgICAgMHgxLmY4NTZkNDkyNTFiZDM3YzU0ZjAwOTQyNzBlZWNiZDE4cC0xLAorICAgIDB4MS42MmI5NThwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzEKKyAgICAweDEuZmM5NzI4M2M0ZjViZDFmNzkzMjAxOTcyYjhkYjU1MWZwLTEsCisgICAgLTB4MS5kOGY3MjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzIKKyAgICAweDEuZmM5NzI4M2M0ZjViZDFmNzkzMjAxOTcyYjhkYjU1MWZwLTEsCisgICAgMHgxLmQ4ZjcyMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDM3MworICAgIDB4MS5mZjI1OWI3YjNkNzIxZWRmMDYzYTViZjZlN2ExZjkzY3AtMSwKKyAgICAtMHgxLmQ4ZjcyMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDM3NAorICAgIDB4MS5mZjI1OWI3YjNkNzIxZWRmMDYzYTViZjZlN2ExZjkzY3AtMSwKKyAgICAweDEuZDhmNzIwcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzc1CisgICAgMHgxLmZmMjU5YjdiM2Q3MjFlZGYwNjNhNWJmNmU3YTFmOTNjcC0xLAorICAgIDB4MS5kOGY3MjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzYKKyAgICAweDEuZmYyNTliN2IzZDcyMWVkZjA2M2E1YmY2ZTdhMWY5M2NwLTEsCisgICAgLTB4MS5kOGY3MjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzcKKyAgICAweDEuZmM5NzI4M2M0ZjViZDFmNzkzMjAxOTcyYjhkYjU1MWZwLTEsCisgICAgMHgxLmQ4ZjcyMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDM3OAorICAgIDB4MS5mYzk3MjgzYzRmNWJkMWY3OTMyMDE5NzJiOGRiNTUxZnAtMSwKKyAgICAtMHgxLmQ4ZjcyMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDM3OQorICAgIDB4MS5mODU2ZDQ5MjUxYmQzN2M1NGYwMDk0MjcwZWVjYmQxOHAtMSwKKyAgICAweDEuNjJiOTU4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzgwCisgICAgMHgxLmY4NTZkNDkyNTFiZDM3YzU0ZjAwOTQyNzBlZWNiZDE4cC0xLAorICAgIC0weDEuNjJiOTU4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzgxCisgICAgMHgxLmYyNjg0MGVmZDg2Y2VlYTIzZjM4OGI2YTExMDJlYTRkcC0xLAorICAgIDB4MS5kOGY3MjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODIKKyAgICAweDEuZjI2ODQwZWZkODZjZWVhMjNmMzg4YjZhMTEwMmVhNGRwLTEsCisgICAgLTB4MS5kOGY3MjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODMKKyAgICAweDEuZWFkMDdjZDJlMGY3ZjE5Njc5NjQ2MzYyYmJjMGViODBwLTEsCisgICAgMHgxLjI3OWE3NHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM4NAorICAgIDB4MS5lYWQwN2NkMmUwZjdmMTk2Nzk2NDYzNjJiYmMwZWI4MHAtMSwKKyAgICAtMHgxLjI3OWE3NHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM4NQorICAgIDB4MS5lMTk2MDI3M2E0YWFhMWJkMTllZjBjY2FhODg3NDE4M3AtMSwKKyAgICAweDEuNjJiOTU4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzg2CisgICAgMHgxLmUxOTYwMjczYTRhYWExYmQxOWVmMGNjYWE4ODc0MTgzcC0xLAorICAgIC0weDEuNjJiOTU4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzg3CisgICAgMHgxLmQ2YzBiMTNkZjk5NjEzYTQ5MzA2YjRkYzZjNTdhYTAzcC0xLAorICAgIDB4MS45ZGQ4M2NwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODgKKyAgICAweDEuZDZjMGIxM2RmOTk2MTNhNDkzMDZiNGRjNmM1N2FhMDNwLTEsCisgICAgLTB4MS45ZGQ4M2NwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODkKKyAgICAweDEuY2E1OWM3MTlmOTYwNzVkZDZiN2EwZmY0NDNhZDU5ZGNwLTEsCisgICAgMHgxLmQ4ZjcyMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM5MAorICAgIDB4MS5jYTU5YzcxOWY5NjA3NWRkNmI3YTBmZjQ0M2FkNTlkY3AtMSwKKyAgICAtMHgxLmQ4ZjcyMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM5MQorICAgIDB4MS5iYzZiZDg4OWE4YTU5ZGJiNTZlNTQ2YTM3YWU3OThmNXAtMSwKKyAgICAweDEuMGEwYjAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzkyCisgICAgMHgxLmJjNmJkODg5YThhNTlkYmI1NmU1NDZhMzdhZTc5OGY1cC0xLAorICAgIC0weDEuMGEwYjAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzkzCisgICAgMHgxLmEwZDFmODYxM2ViYzYwYzdlZTY1MDJlZTE4M2M4OWU3cC0xLAorICAgIDB4MS4zZDNlMzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTQKKyAgICAweDEuYTBkMWY4NjEzZWJjNjBjN2VlNjUwMmVlMTgzYzg5ZTdwLTEsCisgICAgLTB4MS4zZDNlMzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTUKKyAgICAweDEuOTNlMjkzYjIzYTZhYTFhZTUzNzMyMTRlYjhmYjllOTZwLTEsCisgICAgMHgxLjUyZTFmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM5NgorICAgIDB4MS45M2UyOTNiMjNhNmFhMWFlNTM3MzIxNGViOGZiOWU5NnAtMSwKKyAgICAtMHgxLjUyZTFmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM5NworICAgIDB4MS44NjNhODNhOGQ5ODI2YzYxMzU1MDk0MDZlYmUwNWMwZnAtMSwKKyAgICAweDEuNjg4NWJhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzk4CisgICAgMHgxLjg2M2E4M2E4ZDk4MjZjNjEzNTUwOTQwNmViZTA1YzBmcC0xLAorICAgIC0weDEuNjg4NWJhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzk5CisgICAgMHgxLjc3ZTAwNmM4N2NiYWRlZDY2ZWM1Yjk2MGM5M2M1NjhhcC0xLAorICAgIDB4MS43ZTI5N2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDAKKyAgICAweDEuNzdlMDA2Yzg3Y2JhZGVkNjZlYzViOTYwYzkzYzU2OGFwLTEsCisgICAgLTB4MS43ZTI5N2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDEKKyAgICAweDEuNjhkOWFkMjk3MzZjMTcwNGNhZWE2YTJkYjZlNzEyMjNwLTEsCisgICAgMHgxLjkzY2QzZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwMgorICAgIDB4MS42OGQ5YWQyOTczNmMxNzA0Y2FlYTZhMmRiNmU3MTIyM3AtMSwKKyAgICAtMHgxLjkzY2QzZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwMworICAgIDB4MS41OTJlNTU3OGM5ZWM2NmFjY2VkZGQ0ZGM2Y2U2NmIyNnAtMSwKKyAgICAweDEuYTk3MXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwNAorICAgIDB4MS41OTJlNTU3OGM5ZWM2NmFjY2VkZGQ0ZGM2Y2U2NmIyNnAtMSwKKyAgICAtMHgxLmE5NzFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDUKKyAgICAweDEuNDhlNTI5ZDQyOWU3MjFlYzhiYjFlMDE0Zjk0ZDQ4ZjFwLTEsCisgICAgMHgxLmJmMTRjMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwNgorICAgIDB4MS40OGU1MjlkNDI5ZTcyMWVjOGJiMWUwMTRmOTRkNDhmMXAtMSwKKyAgICAtMHgxLmJmMTRjMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwNworICAgIDB4MS4zODA1OWM4MzNjNThlYTk3MGY3Yjk2ZDZhZGEzZDljNHAtMSwKKyAgICAweDEuZDRiODg0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDA4CisgICAgMHgxLjM4MDU5YzgzM2M1OGVhOTcwZjdiOTZkNmFkYTNkOWM0cC0xLAorICAgIC0weDEuZDRiODg0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDA5CisgICAgMHgxLjI2OTc2YjFiMTZkMTkwOTFjMDkyNTk3NjVjNGIzODcycC0xLAorICAgIDB4MS5lYTVjM2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTAKKyAgICAweDEuMjY5NzZiMWIxNmQxOTA5MWMwOTI1OTc2NWM0YjM4NzJwLTEsCisgICAgLTB4MS5lYTVjM2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTEKKyAgICAweDEuZThjNDA0MDY3OGQyZWY3MzYzMzNhNDUzN2ExMTEzYTFwLTIsCisgICAgMHgxLjEyYmQ5MnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDEyCisgICAgMHgxLmU4YzQwNDA2NzhkMmVmNzM2MzMzYTQ1MzdhMTExM2ExcC0yLAorICAgIC0weDEuMTJiZDkycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTMKKyAgICAweDEuYTVhNGM4ZjU5OGZhMDA3ODk3MTMxNmViNDkwN2Y5N2JwLTIsCisgICAgMHgxLjI1N2IyNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDE0CisgICAgMHgxLmE1YTRjOGY1OThmYTAwNzg5NzEzMTZlYjQ5MDdmOTdicC0yLAorICAgIC0weDEuMjU3YjI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTUKKyAgICAweDEuNjA0MzViZWVkMTBjYTA1NzY5ZjBhM2Q4NmE1YTIwZjNwLTIsCisgICAgMHgxLjM4MzhiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDE2CisgICAgMHgxLjYwNDM1YmVlZDEwY2EwNTc2OWYwYTNkODZhNWEyMGYzcC0yLAorICAgIC0weDEuMzgzOGI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTcKKyAgICAweDEuMThmZWUwZmM0NWMzMWE3OWIyYjk0NzhiMWY3MmE5ZWJwLTIsCisgICAgMHgxLjRhZjY0OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDE4CisgICAgMHgxLjE4ZmVlMGZjNDVjMzFhNzliMmI5NDc4YjFmNzJhOWVicC0yLAorICAgIC0weDEuNGFmNjQ4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTkKKyAgICAweDEuYTA3MjI1MjA5MGMzMzgyODc2N2FlZTNlMDQwY2NkZGZwLTMsCisgICAgMHgxLjVkYjNkYXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDIwCisgICAgMHgxLmEwNzIyNTIwOTBjMzM4Mjg3NjdhZWUzZTA0MGNjZGRmcC0zLAorICAgIC0weDEuNWRiM2RhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjEKKyAgICAweDEuMGNhYjc3MDNhOGU5ZGFjYzRhZDAxMTg4YjQ0M2NmZWVwLTMsCisgICAgMHgxLjcwNzE2Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDIyCisgICAgMHgxLjBjYWI3NzAzYThlOWRhY2M0YWQwMTE4OGI0NDNjZmVlcC0zLAorICAgIC0weDEuNzA3MTZjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjMKKyAgICAweDEuZGRkMTcxYTNjOTg1MWU3ODE5YjVlNGY2ZjkwZTc2M2RwLTUsCisgICAgMHgxLjgzMmVmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDI0CisgICAgMHgxLmRkZDE3MWEzYzk4NTFlNzgxOWI1ZTRmNmY5MGU3NjNkcC01LAorICAgIC0weDEuODMyZWZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjUKKyAgICAtMHgxLmU2NjhjYjE1NGVlYTY4YmJjN2Y4MTU0ZjQ2YjJlNTM2cC03LAorICAgIDB4MS45NWVjOTBwMAorICB9LAorICB7IC8vIEVudHJ5IDQyNgorICAgIC0weDEuZTY2OGNiMTU0ZWVhNjhiYmM3ZjgxNTRmNDZiMmU1MzZwLTcsCisgICAgLTB4MS45NWVjOTBwMAorICB9LAorICB7IC8vIEVudHJ5IDQyNworICAgIC0weDEuNjgyZjJiYjg3YThmNTAxMTczNTA5NDE3NmM5YjZkYWNwLTQsCisgICAgMHgxLmE4YWExY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDI4CisgICAgLTB4MS42ODJmMmJiODdhOGY1MDExNzM1MDk0MTc2YzliNmRhY3AtNCwKKyAgICAtMHgxLmE4YWExY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDI5CisgICAgMHgxLjBjYjM0NDlhMGQwYTllMDY0M2Q0MWY0YTViMGY3ZGI3cC0xLAorICAgIDB4MS4wNGFmZjhwMAorICB9LAorICB7IC8vIEVudHJ5IDQzMAorICAgIDB4MS4wY2IzNDQ5YTBkMGE5ZTA2NDNkNDFmNGE1YjBmN2RiN3AtMSwKKyAgICAtMHgxLjA0YWZmOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDMxCisgICAgMHgxLjBjYjIyNjk3MTUzYmNmMWY4YTYzYWNkZGQ5NmM1NGNicC0xLAorICAgIDB4MS4wNGIwYTBwMAorICB9LAorICB7IC8vIEVudHJ5IDQzMgorICAgIDB4MS4wY2IyMjY5NzE1M2JjZjFmOGE2M2FjZGRkOTZjNTRjYnAtMSwKKyAgICAtMHgxLjA0YjBhMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDMzCisgICAgMHgxLjBjYjEwODkzYTliNTQ3MWE0NDM1NjA3MmNiMzNiMzk1cC0xLAorICAgIDB4MS4wNGIxNDhwMAorICB9LAorICB7IC8vIEVudHJ5IDQzNAorICAgIDB4MS4wY2IxMDg5M2E5YjU0NzFhNDQzNTYwNzJjYjMzYjM5NXAtMSwKKyAgICAtMHgxLjA0YjE0OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDM1CisgICAgMHgxLjBjYWZlYThmY2E3NzgxMjM2YTU3ZTViMWM4YWVkMzljcC0xLAorICAgIDB4MS4wNGIxZjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQzNgorICAgIDB4MS4wY2FmZWE4ZmNhNzc4MTIzNmE1N2U1YjFjOGFlZDM5Y3AtMSwKKyAgICAtMHgxLjA0YjFmMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDM3CisgICAgMHgxLjBjYWVjYzhiNzc4MmY4NjgyN2FmOTJiMGIyMzc0NTEwcC0xLAorICAgIDB4MS4wNGIyOThwMAorICB9LAorICB7IC8vIEVudHJ5IDQzOAorICAgIDB4MS4wY2FlY2M4Yjc3ODJmODY4MjdhZjkyYjBiMjM3NDUxMHAtMSwKKyAgICAtMHgxLjA0YjI5OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDM5CisgICAgMHgxLjBjYWRhZTg2YjBkODI4MTVkOGY2MzJlNjdjN2UxYTk5cC0xLAorICAgIDB4MS4wNGIzNDBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0MAorICAgIDB4MS4wY2FkYWU4NmIwZDgyODE1ZDhmNjMyZTY3YzdlMWE5OXAtMSwKKyAgICAtMHgxLjA0YjM0MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQxCisgICAgMHgxLjBjYWM5MDgxNzY3NzhiNWEwY2JhZDIxZWU3NWNlNzY1cC0xLAorICAgIDB4MS4wNGIzZThwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0MgorICAgIDB4MS4wY2FjOTA4MTc2Nzc4YjVhMGNiYWQyMWVlNzVjZTc2NXAtMSwKKyAgICAtMHgxLjA0YjNlOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQzCisgICAgMHgxLjBjYWI3MjdiYzg2MTlkNjI4MzYxODc2ZTFmMzBhNjMzcC0xLAorICAgIDB4MS4wNGI0OTBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0NAorICAgIDB4MS4wY2FiNzI3YmM4NjE5ZDYyODM2MTg3NmUxZjMwYTYzM3AtMSwKKyAgICAtMHgxLjA0YjQ5MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQ1CisgICAgMHgxLjBjYWE1YjQ1MGE0MzI0ZjIwNGE1NTZiMDcyZGExMjRhcC0xLAorICAgIDB4MS4wNGI1MzRwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0NgorICAgIDB4MS4wY2FhNWI0NTBhNDMyNGYyMDRhNTU2YjA3MmRhMTI0YXAtMSwKKyAgICAtMHgxLjA0YjUzNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQ3CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDgKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNDQ5CisgICAgMHgxLnAwLAorICAgIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDQ1MAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDQ1MgorICAgIDB4MS5hZDAyYzhiOWNjOTNmNDQ4ZWY0ZWIwNjhhODg5MjJhM3AtMSwKKyAgICAweDEuMjc5YTcycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDUzCisgICAgMHgxLmFkMDJjOGI5Y2M5M2Y0NDhlZjRlYjA2OGE4ODkyMmEzcC0xLAorICAgIC0weDEuMjc5YTcycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDU0CisgICAgMHgxLmFkMDJjN2EyNThiZmIzNjJhYmJlODZmYjQ4ZjRlOThicC0xLAorICAgIDB4MS4yNzlhNzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTUKKyAgICAweDEuYWQwMmM3YTI1OGJmYjM2MmFiYmU4NmZiNDhmNGU5OGJwLTEsCisgICAgLTB4MS4yNzlhNzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTYKKyAgICAweDEuYWQwMmM2OGFlNGU5YzU3OWEwOGMwNGNlNTliZTQwMDJwLTEsCisgICAgMHgxLjI3OWE3NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ1NworICAgIDB4MS5hZDAyYzY4YWU0ZTljNTc5YTA4YzA0Y2U1OWJlNDAwMnAtMSwKKyAgICAtMHgxLjI3OWE3NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ1OAorICAgIC0weDEuNDhkMWM5ZTk4YjZjMDg3ODRmMTAwNDBmNDdhMTIxOTFwLTMsCisgICAgMHgxLmJiNjdhY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDU5CisgICAgLTB4MS40OGQxYzllOThiNmMwODc4NGYxMDA0MGY0N2ExMjE5MXAtMywKKyAgICAtMHgxLmJiNjdhY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDYwCisgICAgLTB4MS40OGQxZDliNDY3ZTM3OTU1MzM3MzExZGVjZDA5ZmM3NHAtMywKKyAgICAweDEuYmI2N2FlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjEKKyAgICAtMHgxLjQ4ZDFkOWI0NjdlMzc5NTUzMzczMTFkZWNkMDlmYzc0cC0zLAorICAgIC0weDEuYmI2N2FlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjIKKyAgICAtMHgxLjQ4ZDFlOTdmNDQ1NWM2ZWFiMTA0ODAyMjIzOGIyYmQwcC0zLAorICAgIDB4MS5iYjY3YjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ2MworICAgIC0weDEuNDhkMWU5N2Y0NDU1YzZlYWIxMDQ4MDIyMjM4YjJiZDBwLTMsCisgICAgLTB4MS5iYjY3YjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ2NAorICAgIDB4MS5jZmM2ZDAxMWEwZTVkMGZjZWJiNTRiNWZlZDY3Mjk0MHAtMSwKKyAgICAweDEuYmZmZmZlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDY1CisgICAgMHgxLmNmYzZkMDExYTBlNWQwZmNlYmI1NGI1ZmVkNjcyOTQwcC0xLAorICAgIC0weDEuYmZmZmZlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDY2CisgICAgMHgxLmNmYzZjZmE1MmFkOWY2MmQ2ZDU0MjNjYTgzMzlhMDBhcC0xLAorICAgIDB4MS5jMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDQ2NworICAgIDB4MS5jZmM2Y2ZhNTJhZDlmNjJkNmQ1NDIzY2E4MzM5YTAwYXAtMSwKKyAgICAtMHgxLmMwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDY4CisgICAgMHgxLmNmYzZjZjM4YjRjZGE3NmMzYjA5YjE3ZTlkZWIxOWVhcC0xLAorICAgIDB4MS5jMDAwMDJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjkKKyAgICAweDEuY2ZjNmNmMzhiNGNkYTc2YzNiMDliMTdlOWRlYjE5ZWFwLTEsCisgICAgLTB4MS5jMDAwMDJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzAKKyAgICAweDEuOGJiMTA2ZWFjN2M3NWQzM2ZiYjE5NDQ2MzEzZWNjMmZwLTEsCisgICAgMHgxLjVmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ3MQorICAgIDB4MS44YmIxMDZlYWM3Yzc1ZDMzZmJiMTk0NDYzMTNlY2MyZnAtMSwKKyAgICAtMHgxLjVmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ3MgorICAgIDB4MS44YmIxMDVhNWRjOTAwNjE4ZjgwZmE1MWQzMDNjNjlwLTEsCisgICAgMHgxLjYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDczCisgICAgMHgxLjhiYjEwNWE1ZGM5MDA2MThmODBmYTUxZDMwM2M2OXAtMSwKKyAgICAtMHgxLjYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDc0CisgICAgMHgxLjhiYjEwNDYwZjE1NzIzNGNlZWM3ZDk2NDRhMWE3OGU1cC0xLAorICAgIDB4MS42MDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzUKKyAgICAweDEuOGJiMTA0NjBmMTU3MjM0Y2VlYzdkOTY0NGExYTc4ZTVwLTEsCisgICAgLTB4MS42MDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzYKKyAgICAweDEuN2VmNDhiOWE2ZmQ1YzI0ZjVlYzM5ODM5ZTE3MjliNzhwLTIsCisgICAgMHgxLjJmZmZmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDc3CisgICAgMHgxLjdlZjQ4YjlhNmZkNWMyNGY1ZWMzOTgzOWUxNzI5Yjc4cC0yLAorICAgIC0weDEuMmZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzgKKyAgICAweDEuN2VmNDg0MmYwYmNjZDYwZDRhNTAxZGM4YmM0YjU3YjNwLTIsCisgICAgMHgxLjMwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzkKKyAgICAweDEuN2VmNDg0MmYwYmNjZDYwZDRhNTAxZGM4YmM0YjU3YjNwLTIsCisgICAgLTB4MS4zMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDgwCisgICAgMHgxLjdlZjQ3Y2MzYTdiZGVkZjkyNTIwNzQyNjNkOGE0NTk2cC0yLAorICAgIDB4MS4zMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDQ4MQorICAgIDB4MS43ZWY0N2NjM2E3YmRlZGY5MjUyMDc0MjYzZDhhNDU5NnAtMiwKKyAgICAtMHgxLjMwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDgyCisgICAgLTB4MS44NjNlZjUwODViY2MzNThkMmFlODUyNWJmMzlmMGM0MHAtMSwKKyAgICAweDEuMzdmZmZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODMKKyAgICAtMHgxLjg2M2VmNTA4NWJjYzM1OGQyYWU4NTI1YmYzOWYwYzQwcC0xLAorICAgIC0weDEuMzdmZmZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODQKKyAgICAtMHgxLjg2M2VmYTM2MWRjMjUyYmNhMWVhZWVkMzk3NDliZWQ3cC0xLAorICAgIDB4MS4zOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNDg1CisgICAgLTB4MS44NjNlZmEzNjFkYzI1MmJjYTFlYWVlZDM5NzQ5YmVkN3AtMSwKKyAgICAtMHgxLjM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODYKKyAgICAtMHgxLjg2M2VmZjYzZGZhMDBiZmM3NThiYWY0Njk0NjlkNzQxcC0xLAorICAgIDB4MS4zODAwMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDQ4NworICAgIC0weDEuODYzZWZmNjNkZmEwMGJmYzc1OGJhZjQ2OTQ2OWQ3NDFwLTEsCisgICAgLTB4MS4zODAwMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDQ4OAorICAgIDB4MS5mZWYyYjJkMGExMGUyNzM5YzU2NjkzNjQ4MGExNDc5YnAtMSwKKyAgICAweDEuMDY5YzhjcC00CisgIH0sCisgIHsgLy8gRW50cnkgNDg5CisgICAgMHgxLmZlZjJiMmQwYTEwZTI3MzljNTY2OTM2NDgwYTE0NzlicC0xLAorICAgIC0weDEuMDY5YzhjcC00CisgIH0sCisgIHsgLy8gRW50cnkgNDkwCisgICAgMHgxLmZiY2JlNjhkZDEwYmFkMGEyMjljY2JiNTgwY2M1NDM2cC0xLAorICAgIDB4MS4wNjljOGNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTEKKyAgICAweDEuZmJjYmU2OGRkMTBiYWQwYTIyOWNjYmI1ODBjYzU0MzZwLTEsCisgICAgLTB4MS4wNjljOGNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTIKKyAgICAweDEuZjY4ZWViZWY3MmU3ZjYxMjZiM2YzZGRlNjQ2YTc1NWNwLTEsCisgICAgMHgxLjg5ZWFkMnAtMworICB9LAorICB7IC8vIEVudHJ5IDQ5MworICAgIDB4MS5mNjhlZWJlZjcyZTdmNjEyNmIzZjNkZGU2NDZhNzU1Y3AtMSwKKyAgICAtMHgxLjg5ZWFkMnAtMworICB9LAorICB7IC8vIEVudHJ5IDQ5NAorICAgIDB4MS5lZjQxNDU5ZDJlOTBlYTFiN2ZhYWQ3ZmFiZDFmZDQ0NHAtMSwKKyAgICAweDEuMDY5YzhjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDk1CisgICAgMHgxLmVmNDE0NTlkMmU5MGVhMWI3ZmFhZDdmYWJkMWZkNDQ0cC0xLAorICAgIC0weDEuMDY5YzhjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDk2CisgICAgMHgxLmU1ZWFhMjNhMjdmZThkNjg5MGEzZWRhY2UxYzYxOTk4cC0xLAorICAgIDB4MS40ODQzYjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTcKKyAgICAweDEuZTVlYWEyM2EyN2ZlOGQ2ODkwYTNlZGFjZTFjNjE5OThwLTEsCisgICAgLTB4MS40ODQzYjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTgKKyAgICAweDEuZGE5NGQ0Yjk5YzNhOWE1ZTBkMWZjODZkNTMzNjlhODRwLTEsCisgICAgMHgxLjg5ZWFkNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDQ5OQorICAgIDB4MS5kYTk0ZDRiOTljM2E5YTVlMGQxZmM4NmQ1MzM2OWE4NHAtMSwKKyAgICAtMHgxLjg5ZWFkNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDUwMAorICAgIDB4MS5jZDRiYzlhZmMwMTIzMGIyZjk4MmY2OTY4ZGFiN2YwNXAtMSwKKyAgICAweDEuY2I5MWY4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTAxCisgICAgMHgxLmNkNGJjOWFmYzAxMjMwYjJmOTgyZjY5NjhkYWI3ZjA1cC0xLAorICAgIC0weDEuY2I5MWY4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTAyCisgICAgMHgxLmJlMWQ3YWRmMDc3ZGVmMmEzNjBmZWMyM2RiYmNlZjA5cC0xLAorICAgIDB4MS4wNjljOGVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDMKKyAgICAweDEuYmUxZDdhZGYwNzdkZWYyYTM2MGZlYzIzZGJiY2VmMDlwLTEsCisgICAgLTB4MS4wNjljOGVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDQKKyAgICAweDEuYWQxOWUwODQ3ZDI1ZjNhYTE0MjI4OWRhYjU1N2JmOTZwLTEsCisgICAgMHgxLjI3NzAyMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDUwNQorICAgIDB4MS5hZDE5ZTA4NDdkMjVmM2FhMTQyMjg5ZGFiNTU3YmY5NnAtMSwKKyAgICAtMHgxLjI3NzAyMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDUwNgorICAgIDB4MS45YTUyZTA4YjE5MWJkNTU1MTJjODM2NTA3NGYxOTg3ZnAtMSwKKyAgICAweDEuNDg0M2IycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTA3CisgICAgMHgxLjlhNTJlMDhiMTkxYmQ1NTUxMmM4MzY1MDc0ZjE5ODdmcC0xLAorICAgIC0weDEuNDg0M2IycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTA4CisgICAgMHgxLjg1ZGMzYmI3YzJlOWFiYjVjY2NiNmQ5NmQxMmQzOWM0cC0xLAorICAgIDB4MS42OTE3NDRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDkKKyAgICAweDEuODVkYzNiYjdjMmU5YWJiNWNjY2I2ZDk2ZDEyZDM5YzRwLTEsCisgICAgLTB4MS42OTE3NDRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTAKKyAgICAweDEuNmZjYjc4ZTFjZDY1ZDJlNGZkZTcxMThjYWFjNzlkNmRwLTEsCisgICAgMHgxLjg5ZWFkNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDUxMQorICAgIDB4MS42ZmNiNzhlMWNkNjVkMmU0ZmRlNzExOGNhYWM3OWQ2ZHAtMSwKKyAgICAtMHgxLjg5ZWFkNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDUxMgorICAgIDB4MS41ODM3Y2U0ZGM4MzVkNGE1NDU0ZWMwYTFiYjM5NDA4MXAtMSwKKyAgICAweDEuYWFiZTY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTEzCisgICAgMHgxLjU4MzdjZTRkYzgzNWQ0YTU0NTRlYzBhMWJiMzk0MDgxcC0xLAorICAgIC0weDEuYWFiZTY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTE0CisgICAgMHgxLjNmM2EwOTQyNzk2NmU5NTE4ODAyZGVlM2JmNDQzYTk1cC0xLAorICAgIDB4MS5jYjkxZmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTUKKyAgICAweDEuM2YzYTA5NDI3OTY2ZTk1MTg4MDJkZWUzYmY0NDNhOTVwLTEsCisgICAgLTB4MS5jYjkxZmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTYKKyAgICAweDEuMjRlYzczZjFhZWVmNDk0MGJiOGRhMTlhODJiYmM0OWZwLTEsCisgICAgMHgxLmVjNjU4Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDUxNworICAgIDB4MS4yNGVjNzNmMWFlZWY0OTQwYmI4ZGExOWE4MmJiYzQ5ZnAtMSwKKyAgICAtMHgxLmVjNjU4Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDUxOAorICAgIDB4MS4wOTZhYmI4NjJmOWJkNTUxNTk4MmMyODE4YzMzMmZmOXAtMSwKKyAgICAweDEuMDY5YzhlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTkKKyAgICAweDEuMDk2YWJiODYyZjliZDU1MTU5ODJjMjgxOGMzMzJmZjlwLTEsCisgICAgLTB4MS4wNjljOGVwMAorICB9LAorICB7IC8vIEVudHJ5IDUyMAorICAgIDB4MS5kOWEzOWMwZGRkYzY1NGM3MTdlMzAzNmRhNWRkNjg1Y3AtMiwKKyAgICAweDEuMTcwNjU2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjEKKyAgICAweDEuZDlhMzljMGRkZGM2NTRjNzE3ZTMwMzZkYTVkZDY4NWNwLTIsCisgICAgLTB4MS4xNzA2NTZwMAorICB9LAorICB7IC8vIEVudHJ5IDUyMgorICAgIDB4MS45ZTdmODE4NDBjMGJiZDBmMWIxMzczMzA2MTA2MmQzNHAtMiwKKyAgICAweDEuMjc3MDFlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjMKKyAgICAweDEuOWU3ZjgxODQwYzBiYmQwZjFiMTM3MzMwNjEwNjJkMzRwLTIsCisgICAgLTB4MS4yNzcwMWVwMAorICB9LAorICB7IC8vIEVudHJ5IDUyNAorICAgIDB4MS42MWE3NWUyZGViNTk2NzMxYzhjZDQ1ZTNkOTc5NDUyNnAtMiwKKyAgICAweDEuMzdkOWU2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjUKKyAgICAweDEuNjFhNzVlMmRlYjU5NjczMWM4Y2Q0NWUzZDk3OTQ1MjZwLTIsCisgICAgLTB4MS4zN2Q5ZTZwMAorICB9LAorICB7IC8vIEVudHJ5IDUyNgorICAgIDB4MS4yMzViMzM3YjA5MWNkZDhhYzA2MzkwYWJjNjgxNmI4MnAtMiwKKyAgICAweDEuNDg0M2FlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjcKKyAgICAweDEuMjM1YjMzN2IwOTFjZGQ4YWMwNjM5MGFiYzY4MTZiODJwLTIsCisgICAgLTB4MS40ODQzYWVwMAorICB9LAorICB7IC8vIEVudHJ5IDUyOAorICAgIDB4MS5jN2I5MTQ2ZDZkMTA4MjRmZjY1MmRjMzkwYmEyZDdmOXAtMywKKyAgICAweDEuNThhZDc2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjkKKyAgICAweDEuYzdiOTE0NmQ2ZDEwODI0ZmY2NTJkYzM5MGJhMmQ3ZjlwLTMsCisgICAgLTB4MS41OGFkNzZwMAorICB9LAorICB7IC8vIEVudHJ5IDUzMAorICAgIDB4MS40NmRjNWIyZjFkZTk3N2VmZmY3YzI3OGI1YWRiMmE3NXAtMywKKyAgICAweDEuNjkxNzNlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzEKKyAgICAweDEuNDZkYzViMmYxZGU5NzdlZmZmN2MyNzhiNWFkYjJhNzVwLTMsCisgICAgLTB4MS42OTE3M2VwMAorICB9LAorICB7IC8vIEVudHJ5IDUzMgorICAgIDB4MS44OTRmOTNlZjQ5YzQ1NzU4MDBiYmQ2NDZhM2EzMWQyYXAtNCwKKyAgICAweDEuNzk4MTA2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzMKKyAgICAweDEuODk0ZjkzZWY0OWM0NTc1ODAwYmJkNjQ2YTNhMzFkMmFwLTQsCisgICAgLTB4MS43OTgxMDZwMAorICB9LAorICB7IC8vIEVudHJ5IDUzNAorICAgIDB4MS4wNjkxNjRlM2Y1Y2VlOTRkODY1ZmI1MmUzMTZkZmY2YnAtNSwKKyAgICAweDEuODllYWNlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzUKKyAgICAweDEuMDY5MTY0ZTNmNWNlZTk0ZDg2NWZiNTJlMzE2ZGZmNmJwLTUsCisgICAgLTB4MS44OWVhY2VwMAorICB9LAorICB7IC8vIEVudHJ5IDUzNgorICAgIC0weDEuMDY5MDkzZWVjMGVkMDY2ZWM4M2RkMDM0NDk4ZWY4YmZwLTUsCisgICAgMHgxLjlhNTQ5NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTM3CisgICAgLTB4MS4wNjkwOTNlZWMwZWQwNjZlYzgzZGQwMzQ0OThlZjhiZnAtNSwKKyAgICAtMHgxLjlhNTQ5NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTM4CisgICAgLTB4MS44OTRmMmJlMjk3OWRkOWNlZDgzY2NjNjBjZjQ5Y2Q0NHAtNCwKKyAgICAweDEuYWFiZTVlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzkKKyAgICAtMHgxLjg5NGYyYmUyOTc5ZGQ5Y2VkODNjY2M2MGNmNDljZDQ0cC00LAorICAgIC0weDEuYWFiZTVlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDAKKyAgICAtMHgxLjQ2ZGMyNzk2NzM1MTk1YTE1YzgwZTViNzE5ZTJmYzQycC0zLAorICAgIDB4MS5iYjI4MjZwMAorICB9LAorICB7IC8vIEVudHJ5IDU0MQorICAgIC0weDEuNDZkYzI3OTY3MzUxOTVhMTVjODBlNWI3MTllMmZjNDJwLTMsCisgICAgLTB4MS5iYjI4MjZwMAorICB9LAorICB7IC8vIEVudHJ5IDU0MgorICAgIC0weDEuYzdiOGUxNzhiN2U4YzAxZDlmMzIwNDY2Y2M3YTY4ZDRwLTMsCisgICAgMHgxLmNiOTFlZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQzCisgICAgLTB4MS5jN2I4ZTE3OGI3ZThjMDFkOWYzMjA0NjZjYzdhNjhkNHAtMywKKyAgICAtMHgxLmNiOTFlZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQ0CisgICAgLTB4MS4yMzViMWE2ZDc2N2U0YjM2MmM2NDU3MWFjOTdiNGExY3AtMiwKKyAgICAweDEuZGJmYmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDUKKyAgICAtMHgxLjIzNWIxYTZkNzY3ZTRiMzYyYzY0NTcxYWM5N2I0YTFjcC0yLAorICAgIC0weDEuZGJmYmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDYKKyAgICAtMHgxLjYxYTc0NWE3N2I3ZTgzYzJmOGEyZjliMDkxZTg5YWFhcC0yLAorICAgIDB4MS5lYzY1N2VwMAorICB9LAorICB7IC8vIEVudHJ5IDU0NworICAgIC0weDEuNjFhNzQ1YTc3YjdlODNjMmY4YTJmOWIwOTFlODlhYWFwLTIsCisgICAgLTB4MS5lYzY1N2VwMAorICB9LAorICB7IC8vIEVudHJ5IDU0OAorICAgIC0weDEuOWU3ZjY5OWU4YjlhYWY4ZWQ1MWM3MWM4ZjczYjBiNzRwLTIsCisgICAgMHgxLmZjY2Y0NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQ5CisgICAgLTB4MS45ZTdmNjk5ZThiOWFhZjhlZDUxYzcxYzhmNzNiMGI3NHAtMiwKKyAgICAtMHgxLmZjY2Y0NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTUwCisgICAgLTB4MS5kOWEzOGJmYTMxOTViYTFjYWE3ZmI2OWJjMWQwNGU0MnAtMiwKKyAgICAweDEuMDY5Yzg4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTEKKyAgICAtMHgxLmQ5YTM4YmZhMzE5NWJhMWNhYTdmYjY5YmMxZDA0ZTQycC0yLAorICAgIC0weDEuMDY5Yzg4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTIKKyAgICAtMHgxLjA5NmFiM2M1NWM5MWYzNmUyMzU5ZWQxYzVhODM0MmRmcC0xLAorICAgIDB4MS4wZWQxNmNwMQorICB9LAorICB7IC8vIEVudHJ5IDU1MworICAgIC0weDEuMDk2YWIzYzU1YzkxZjM2ZTIzNTllZDFjNWE4MzQyZGZwLTEsCisgICAgLTB4MS4wZWQxNmNwMQorICB9LAorICB7IC8vIEVudHJ5IDU1NAorICAgIC0weDEuMjRlYzZjODIwNmU3NDQzMjJkOTlmNDdlOWU0MWJlY2VwLTEsCisgICAgMHgxLjE3MDY1MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTU1CisgICAgLTB4MS4yNGVjNmM4MjA2ZTc0NDMyMmQ5OWY0N2U5ZTQxYmVjZXAtMSwKKyAgICAtMHgxLjE3MDY1MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTU2CisgICAgLTB4MS4zZjNhMDA5YjgyYjViODIzNGUxMjk2ZGQ3M2NmZjQ5ZHAtMSwKKyAgICAweDEuMWYzYjM0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTcKKyAgICAtMHgxLjNmM2EwMDliODJiNWI4MjM0ZTEyOTZkZDczY2ZmNDlkcC0xLAorICAgIC0weDEuMWYzYjM0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTgKKyAgICAtMHgxLjU4MzdjNGExODRjY2Y3ZWQ1N2MxODlmMmFkZGYzMmM1cC0xLAorICAgIDB4MS4yNzcwMThwMQorICB9LAorICB7IC8vIEVudHJ5IDU1OQorICAgIC0weDEuNTgzN2M0YTE4NGNjZjdlZDU3YzE4OWYyYWRkZjMyYzVwLTEsCisgICAgLTB4MS4yNzcwMThwMQorICB9LAorICB7IC8vIEVudHJ5IDU2MAorICAgIC0weDEuNmZjYjZlNjY4NWU3MmZiNDA3NGU3MGNkMzE2MmQzYmFwLTEsCisgICAgMHgxLjJmYTRmY3AxCisgIH0sCisgIHsgLy8gRW50cnkgNTYxCisgICAgLTB4MS42ZmNiNmU2Njg1ZTcyZmI0MDc0ZTcwY2QzMTYyZDNiYXAtMSwKKyAgICAtMHgxLjJmYTRmY3AxCisgIH0sCisgIHsgLy8gRW50cnkgNTYyCisgICAgLTB4MS44NWRjMzBhNzlmMjY3NTRhYjEzNzAzMzhlZTdiZmQxMXAtMSwKKyAgICAweDEuMzdkOWUwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjMKKyAgICAtMHgxLjg1ZGMzMGE3OWYyNjc1NGFiMTM3MDMzOGVlN2JmZDExcC0xLAorICAgIC0weDEuMzdkOWUwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjQKKyAgICAtMHgxLjlhNTJkNTIzYjE1MzJlNGVkNDc3ZTI3ZGM2MDUxYzEycC0xLAorICAgIDB4MS40MDBlYzRwMQorICB9LAorICB7IC8vIEVudHJ5IDU2NQorICAgIC0weDEuOWE1MmQ1MjNiMTUzMmU0ZWQ0NzdlMjdkYzYwNTFjMTJwLTEsCisgICAgLTB4MS40MDBlYzRwMQorICB9LAorICB7IC8vIEVudHJ5IDU2NgorICAgIC0weDEuYWQxOWQ1MDY2NGFiZjBjMDE0MTEzN2QyY2E1MDlmMjFwLTEsCisgICAgMHgxLjQ4NDNhOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTY3CisgICAgLTB4MS5hZDE5ZDUwNjY0YWJmMGMwMTQxMTM3ZDJjYTUwOWYyMXAtMSwKKyAgICAtMHgxLjQ4NDNhOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTY4CisgICAgLTB4MS5iZTFkNmY4ZDUxN2RiNWMyY2Y3ZGUwZmFmMDgwOGQzMHAtMSwKKyAgICAweDEuNTA3ODhjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjkKKyAgICAtMHgxLmJlMWQ2ZjhkNTE3ZGI1YzJjZjdkZTBmYWYwODA4ZDMwcC0xLAorICAgIC0weDEuNTA3ODhjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzAKKyAgICAtMHgxLmNkNGJiZWNmN2YyNzA1ZDRmZDAwZGQ0NjM3ODBmNDVlcC0xLAorICAgIDB4MS41OGFkNzBwMQorICB9LAorICB7IC8vIEVudHJ5IDU3MQorICAgIC0weDEuY2Q0YmJlY2Y3ZjI3MDVkNGZkMDBkZDQ2Mzc4MGY0NWVwLTEsCisgICAgLTB4MS41OGFkNzBwMQorICB9LAorICB7IC8vIEVudHJ5IDU3MgorICAgIC0weDEuZGE5NGNhOTE1ZGEzY2RkMWZmZjgzOWQ4NWVlYzM5ZTJwLTEsCisgICAgMHgxLjYwZTI1NHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTczCisgICAgLTB4MS5kYTk0Y2E5MTVkYTNjZGQxZmZmODM5ZDg1ZWVjMzllMnAtMSwKKyAgICAtMHgxLjYwZTI1NHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTc0CisgICAgLTB4MS5lNWVhOTkxMTZiMzkzNjFhYzkyNmRkOWZkYzIwODlkMXAtMSwKKyAgICAweDEuNjkxNzM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzUKKyAgICAtMHgxLmU1ZWE5OTExNmIzOTM2MWFjOTI2ZGQ5ZmRjMjA4OWQxcC0xLAorICAgIC0weDEuNjkxNzM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzYKKyAgICAtMHgxLmVmNDEzZGJiZGEyODU5ZmZiMGQxYWI4NDM0MmZkMjM1cC0xLAorICAgIDB4MS43MTRjMWNwMQorICB9LAorICB7IC8vIEVudHJ5IDU3NworICAgIC0weDEuZWY0MTNkYmJkYTI4NTlmZmIwZDFhYjg0MzQyZmQyMzVwLTEsCisgICAgLTB4MS43MTRjMWNwMQorICB9LAorICB7IC8vIEVudHJ5IDU3OAorICAgIC0weDEuZjY4ZWU1YjViZjM1NmIxMDIzMDk0NGExOGU3MDkyNWNwLTEsCisgICAgMHgxLjc5ODFwMQorICB9LAorICB7IC8vIEVudHJ5IDU3OQorICAgIC0weDEuZjY4ZWU1YjViZjM1NmIxMDIzMDk0NGExOGU3MDkyNWNwLTEsCisgICAgLTB4MS43OTgxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODAKKyAgICAtMHgxLmZiY2JlMjMyOTZmYzYxYjk2ZjM4MmYzNWVhMTVjNzY4cC0xLAorICAgIDB4MS44MWI1ZTRwMQorICB9LAorICB7IC8vIEVudHJ5IDU4MQorICAgIC0weDEuZmJjYmUyMzI5NmZjNjFiOTZmMzgyZjM1ZWExNWM3NjhwLTEsCisgICAgLTB4MS44MWI1ZTRwMQorICB9LAorICB7IC8vIEVudHJ5IDU4MgorICAgIC0weDEuZmVmMmIwODk0MzE5N2NkM2E4YmE4NjEwOTUyMjdjNDhwLTEsCisgICAgMHgxLjg5ZWFjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTgzCisgICAgLTB4MS5mZWYyYjA4OTQzMTk3Y2QzYThiYTg2MTA5NTIyN2M0OHAtMSwKKyAgICAtMHgxLjg5ZWFjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTg0CisgICAgMHgxLmVmNDE0ODlmYzJmZTgwMWE2ZmM4YWU3OTE0MzhlYjc4cC0xLAorICAgIC0weDEuODFiNWVlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODUKKyAgICAweDEuZWY0MTQ4OWZjMmZlODAxYTZmYzhhZTc5MTQzOGViNzhwLTEsCisgICAgMHgxLjgxYjVlZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNTg2CisgICAgMHgxLmJlMWQ4NDllYzY0OWI3OTczMjBlOTg1ZDBiODJhZTg1cC0xLAorICAgIC0weDEuNzE0YzI2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODcKKyAgICAweDEuYmUxZDg0OWVjNjQ5Yjc5NzMyMGU5ODVkMGI4MmFlODVwLTEsCisgICAgMHgxLjcxNGMyNnAyCisgIH0sCisgIHsgLy8gRW50cnkgNTg4CisgICAgMHgxLjZmY2I4YzQ0YmQzMGRkNjY4MTQ4NjA1OTY5YjFjMTYxcC0xLAorICAgIC0weDEuNjBlMjVlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODkKKyAgICAweDEuNmZjYjhjNDRiZDMwZGQ2NjgxNDg2MDU5NjliMWMxNjFwLTEsCisgICAgMHgxLjYwZTI1ZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNTkwCisgICAgMHgxLjA5NmFkODdjMzI2NjIyYzQyZGUzNGY5MjgxNGNmYTg0cC0xLAorICAgIC0weDEuNTA3ODk2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTEKKyAgICAweDEuMDk2YWQ4N2MzMjY2MjJjNDJkZTM0ZjkyODE0Y2ZhODRwLTEsCisgICAgMHgxLjUwNzg5NnAyCisgIH0sCisgIHsgLy8gRW50cnkgNTkyCisgICAgMHgxLjIzNWI3NDZhMmEyZWZmMmJmNjQwZGQ4YzA0ZDM1YTVicC0yLAorICAgIC0weDEuNDAwZWNlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTMKKyAgICAweDEuMjM1Yjc0NmEyYTJlZmYyYmY2NDBkZDhjMDRkMzVhNWJwLTIsCisgICAgMHgxLjQwMGVjZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNTk0CisgICAgMHgxLjA2OTM4MjdiNDZjZWUzYjY2MWFjMTcxMTRiNWZlMGZicC01LAorICAgIC0weDEuMmZhNTA2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTUKKyAgICAweDEuMDY5MzgyN2I0NmNlZTNiNjYxYWMxNzExNGI1ZmUwZmJwLTUsCisgICAgMHgxLjJmYTUwNnAyCisgIH0sCisgIHsgLy8gRW50cnkgNTk2CisgICAgLTB4MS5jN2I4NWQ2NjhlMmFiY2M0NjU0MmNhODUyN2YwYjgwMXAtMywKKyAgICAtMHgxLjFmM2IzZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNTk3CisgICAgLTB4MS5jN2I4NWQ2NjhlMmFiY2M0NjU0MmNhODUyN2YwYjgwMXAtMywKKyAgICAweDEuMWYzYjNlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTgKKyAgICAtMHgxLmQ5YTM0OGQ0ZjQzNjNiYTQ1NjIxMTBkYjAxZWU4NGU4cC0yLAorICAgIC0weDEuMGVkMTc2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTkKKyAgICAtMHgxLmQ5YTM0OGQ0ZjQzNjNiYTQ1NjIxMTBkYjAxZWU4NGU4cC0yLAorICAgIDB4MS4wZWQxNzZwMgorICB9LAorICB7IC8vIEVudHJ5IDYwMAorICAgIC0weDEuNTgzN2FlODU2OWM5NTg0NmU2MTY0ZDk2MzY1NDYxMjBwLTEsCisgICAgLTB4MS5mY2NmNWFwMQorICB9LAorICB7IC8vIEVudHJ5IDYwMQorICAgIC0weDEuNTgzN2FlODU2OWM5NTg0NmU2MTY0ZDk2MzY1NDYxMjBwLTEsCisgICAgMHgxLmZjY2Y1YXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjAyCisgICAgLTB4MS5hZDE5YzkxODg4MzAwMGIwYjcwMmVjMDgwY2YwMTIyZXAtMSwKKyAgICAtMHgxLmRiZmJjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjAzCisgICAgLTB4MS5hZDE5YzkxODg4MzAwMGIwYjcwMmVjMDgwY2YwMTIyZXAtMSwKKyAgICAweDEuZGJmYmM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDQKKyAgICAtMHgxLmU1ZWE5NGIyY2YwN2FkZDNkMGQ5NWFiM2EzMGFkNGFicC0xLAorICAgIC0weDEuYmIyODM2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDUKKyAgICAtMHgxLmU1ZWE5NGIyY2YwN2FkZDNkMGQ5NWFiM2EzMGFkNGFicC0xLAorICAgIDB4MS5iYjI4MzZwMQorICB9LAorICB7IC8vIEVudHJ5IDYwNgorICAgIC0weDEuZmVmMmIwMjkwODU1OWY5MmRlODkyZDI0MGEyYjBiNDlwLTEsCisgICAgLTB4MS45YTU0YTRwMQorICB9LAorICB7IC8vIEVudHJ5IDYwNworICAgIC0weDEuZmVmMmIwMjkwODU1OWY5MmRlODkyZDI0MGEyYjBiNDlwLTEsCisgICAgMHgxLjlhNTRhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjA4CisgICAgLTB4MS5mNjhlZjM3OTJlNTkyYzNjZWZiY2UxZDVkZWQ2NGE5MnAtMSwKKyAgICAtMHgxLjc5ODExMnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjA5CisgICAgLTB4MS5mNjhlZjM3OTJlNTkyYzNjZWZiY2UxZDVkZWQ2NGE5MnAtMSwKKyAgICAweDEuNzk4MTEycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTAKKyAgICAtMHgxLmNkNGJkYTk0M2VlYTEzNjMwZjhlNTA4Zjg3NDRmMmYycC0xLAorICAgIC0weDEuNThhZDgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTEKKyAgICAtMHgxLmNkNGJkYTk0M2VlYTEzNjMwZjhlNTA4Zjg3NDRmMmYycC0xLAorICAgIDB4MS41OGFkODBwMQorICB9LAorICB7IC8vIEVudHJ5IDYxMgorICAgIC0weDEuODVkYzU0ZjQ5ZjMyNGJkZmM3MWQ1NzQ5NDgzYjMzMThwLTEsCisgICAgLTB4MS4zN2Q5ZWVwMQorICB9LAorICB7IC8vIEVudHJ5IDYxMworICAgIC0weDEuODVkYzU0ZjQ5ZjMyNGJkZmM3MWQ1NzQ5NDgzYjMzMThwLTEsCisgICAgMHgxLjM3ZDllZXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjE0CisgICAgLTB4MS4yNGVjOTNlMDRkNGJkYjU0ZTIwYmVhZjM4MzUxOWFmOHAtMSwKKyAgICAtMHgxLjE3MDY1Y3AxCisgIH0sCisgIHsgLy8gRW50cnkgNjE1CisgICAgLTB4MS4yNGVjOTNlMDRkNGJkYjU0ZTIwYmVhZjM4MzUxOWFmOHAtMSwKKyAgICAweDEuMTcwNjVjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTYKKyAgICAtMHgxLjYxYTc5ODNkNGMxNmM0NTFiNjhiZjJmNWI3MGYzYjZhcC0yLAorICAgIC0weDEuZWM2NTk0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTcKKyAgICAtMHgxLjYxYTc5ODNkNGMxNmM0NTFiNjhiZjJmNWI3MGYzYjZhcC0yLAorICAgIDB4MS5lYzY1OTRwMAorICB9LAorICB7IC8vIEVudHJ5IDYxOAorICAgIC0weDEuODk1MDRhOGRlNmM5ZWNhYzY2M2U2NzU4M2NhYjQ3ZThwLTQsCisgICAgLTB4MS5hYWJlNzBwMAorICB9LAorICB7IC8vIEVudHJ5IDYxOQorICAgIC0weDEuODk1MDRhOGRlNmM5ZWNhYzY2M2U2NzU4M2NhYjQ3ZThwLTQsCisgICAgMHgxLmFhYmU3MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjIwCisgICAgMHgxLjQ2ZGJlYzllYTNhNWYwOGJhNzNhYTY5ZTdlMjJkZTFjcC0zLAorICAgIC0weDEuNjkxNzRjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjEKKyAgICAweDEuNDZkYmVjOWVhM2E1ZjA4YmE3M2FhNjllN2UyMmRlMWNwLTMsCisgICAgMHgxLjY5MTc0Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjIyCisgICAgMHgxLjllN2Y1Y2YwNzVkMWVjNGVmNjljOWM2N2I2MmMyN2NicC0yLAorICAgIC0weDEuMjc3MDI4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjMKKyAgICAweDEuOWU3ZjVjZjA3NWQxZWM0ZWY2OWM5YzY3YjYyYzI3Y2JwLTIsCisgICAgMHgxLjI3NzAyOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjI0CisgICAgMHgxLjNmMzlmY2MwMTc2NTNkMjYzNjgzN2E1NWZkZjZkMmQ0cC0xLAorICAgIC0weDEuY2I5MjBhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjI1CisgICAgMHgxLjNmMzlmY2MwMTc2NTNkMjYzNjgzN2E1NWZkZjZkMmQ0cC0xLAorICAgIDB4MS5jYjkyMGFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjYKKyAgICAweDEuOWE1MmQ1YzcwMGRhYTNkYzhjZjhmNWE3MWYyZGYyODlwLTEsCisgICAgLTB4MS40ODQzYzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjcKKyAgICAweDEuOWE1MmQ1YzcwMGRhYTNkYzhjZjhmNWE3MWYyZGYyODlwLTEsCisgICAgMHgxLjQ4NDNjNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDYyOAorICAgIDB4MS5kYTk0Y2QzODNkZDdhM2I5MWEyZmM4OGZmOTA1YTZhMHAtMSwKKyAgICAtMHgxLjg5ZWFmY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDYyOQorICAgIDB4MS5kYTk0Y2QzODNkZDdhM2I5MWEyZmM4OGZmOTA1YTZhMHAtMSwKKyAgICAweDEuODllYWZjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjMwCisgICAgMHgxLmZiY2JlM2RlNThlNjZjMzI4M2JjODEwZDE2YzQ1ODMzcC0xLAorICAgIC0weDEuMDY5Y2UwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNjMxCisgICAgMHgxLmZiY2JlM2RlNThlNjZjMzI4M2JjODEwZDE2YzQ1ODMzcC0xLAorICAgIDB4MS4wNjljZTBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzIKKyAgICAweDEuZmJjYmU5M2Q0ODU2M2Q1MWI2ZTlkNmVmZGI2MjQ5NWNwLTEsCisgICAgMHgxLjA2OWMzOHAtMworICB9LAorICB7IC8vIEVudHJ5IDYzMworICAgIDB4MS5mYmNiZTkzZDQ4NTYzZDUxYjZlOWQ2ZWZkYjYyNDk1Y3AtMSwKKyAgICAtMHgxLjA2OWMzOHAtMworICB9LAorICB7IC8vIEVudHJ5IDYzNAorICAgIDB4MS5kYTk0ZGNmYjFjZDE1ODUzY2U4NDhmZmIwMjY0YWQwOHAtMSwKKyAgICAweDEuODllYWE4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjM1CisgICAgMHgxLmRhOTRkY2ZiMWNkMTU4NTNjZTg0OGZmYjAyNjRhZDA4cC0xLAorICAgIC0weDEuODllYWE4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjM2CisgICAgMHgxLjlhNTJlZWU1ZTM1Mzc3ZDU1NGFjZTg4MWJkYzQ3MjVicC0xLAorICAgIDB4MS40ODQzOWFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzcKKyAgICAweDEuOWE1MmVlZTVlMzUzNzdkNTU0YWNlODgxYmRjNDcyNWJwLTEsCisgICAgLTB4MS40ODQzOWFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzgKKyAgICAweDEuM2YzYTFkOTY1N2ZmNmFhNDk4YzQ2ZjZmYWFmMDNiOTBwLTEsCisgICAgMHgxLmNiOTFlMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDYzOQorICAgIDB4MS4zZjNhMWQ5NjU3ZmY2YWE0OThjNDZmNmZhYWYwM2I5MHAtMSwKKyAgICAtMHgxLmNiOTFlMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY0MAorICAgIDB4MS45ZTdmYTYxN2ExYTNhNDAwYTdmNTlhYTg3OTA4OGUzMXAtMiwKKyAgICAweDEuMjc3MDE0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDEKKyAgICAweDEuOWU3ZmE2MTdhMWEzYTQwMGE3ZjU5YWE4NzkwODhlMzFwLTIsCisgICAgLTB4MS4yNzcwMTRwMAorICB9LAorICB7IC8vIEVudHJ5IDY0MgorICAgIDB4MS40NmRjOGE5MTliMjc4NDBjZGE2ZTE4YTA3OWRhNDU5Y3AtMywKKyAgICAweDEuNjkxNzM4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDMKKyAgICAweDEuNDZkYzhhOTE5YjI3ODQwY2RhNmUxOGEwNzlkYTQ1OWNwLTMsCisgICAgLTB4MS42OTE3MzhwMAorICB9LAorICB7IC8vIEVudHJ5IDY0NAorICAgIC0weDEuODk0ZjBjMDg3MjQxNTY2M2I3ZjllNGU0ODAxZGVhZjBwLTQsCisgICAgMHgxLmFhYmU1Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ1CisgICAgLTB4MS44OTRmMGMwODcyNDE1NjYzYjdmOWU0ZTQ4MDFkZWFmMHAtNCwKKyAgICAtMHgxLmFhYmU1Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ2CisgICAgLTB4MS42MWE3NGQyOTc3NGFlNGUzYmM1NTMzYTJlYTA4YTE0YXAtMiwKKyAgICAweDEuZWM2NTgwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDcKKyAgICAtMHgxLjYxYTc0ZDI5Nzc0YWU0ZTNiYzU1MzNhMmVhMDhhMTRhcC0yLAorICAgIC0weDEuZWM2NTgwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDgKKyAgICAtMHgxLjI0ZWM3MzExYmQ3YjIyNTVmOWI4OTBiM2ZmNTg5OWY0cC0xLAorICAgIDB4MS4xNzA2NTJwMQorICB9LAorICB7IC8vIEVudHJ5IDY0OQorICAgIC0weDEuMjRlYzczMTFiZDdiMjI1NWY5Yjg5MGIzZmY1ODk5ZjRwLTEsCisgICAgLTB4MS4xNzA2NTJwMQorICB9LAorICB7IC8vIEVudHJ5IDY1MAorICAgIC0weDEuODVkYzNiMDZjNDM1ZjUyNGM4NzNkOWI1ZWJhM2RlZjhwLTEsCisgICAgMHgxLjM3ZDllNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjUxCisgICAgLTB4MS44NWRjM2IwNmM0MzVmNTI0Yzg3M2Q5YjVlYmEzZGVmOHAtMSwKKyAgICAtMHgxLjM3ZDllNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjUyCisgICAgLTB4MS5jZDRiYzkzOTQ3ZTg2NjcxYWM3ZjBlYWNkOTUyMTM3N3AtMSwKKyAgICAweDEuNThhZDc2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTMKKyAgICAtMHgxLmNkNGJjOTM5NDdlODY2NzFhYzdmMGVhY2Q5NTIxMzc3cC0xLAorICAgIC0weDEuNThhZDc2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTQKKyAgICAtMHgxLmY2OGVlYmQzYjhmMTJmOTQzM2U2ZDcyMjQ5ODljMTBlcC0xLAorICAgIDB4MS43OTgxMDhwMQorICB9LAorICB7IC8vIEVudHJ5IDY1NQorICAgIC0weDEuZjY4ZWViZDNiOGYxMmY5NDMzZTZkNzIyNDk4OWMxMGVwLTEsCisgICAgLTB4MS43OTgxMDhwMQorICB9LAorICB7IC8vIEVudHJ5IDY1NgorICAgIC0weDEuZmVmMmIyYjkxZTQwMDIxYTJmZWU3NGZjNjE4MTIxNTdwLTEsCisgICAgMHgxLjlhNTQ5YXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjU3CisgICAgLTB4MS5mZWYyYjJiOTFlNDAwMjFhMmZlZTc0ZmM2MTgxMjE1N3AtMSwKKyAgICAtMHgxLjlhNTQ5YXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjU4CisgICAgLTB4MS5lNWVhYTE0ZDg2MTY4YjY5OTE4YzIyZjM3MTZhNjdlYXAtMSwKKyAgICAweDEuYmIyODJjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTkKKyAgICAtMHgxLmU1ZWFhMTRkODYxNjhiNjk5MThjMjJmMzcxNmE2N2VhcC0xLAorICAgIC0weDEuYmIyODJjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjAKKyAgICAtMHgxLmFkMTlkZWVhZDBlYWUyZjcyZDA0MTY1ZTA5ZTRhNDNkcC0xLAorICAgIDB4MS5kYmZiYmVwMQorICB9LAorICB7IC8vIEVudHJ5IDY2MQorICAgIC0weDEuYWQxOWRlZWFkMGVhZTJmNzJkMDQxNjVlMDllNGE0M2RwLTEsCisgICAgLTB4MS5kYmZiYmVwMQorICB9LAorICB7IC8vIEVudHJ5IDY2MgorICAgIC0weDEuNTgzN2NjMjFkZGE0NGYzYWI3ZmQ5NmY1N2MwMTRlMTlwLTEsCisgICAgMHgxLmZjY2Y1MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjYzCisgICAgLTB4MS41ODM3Y2MyMWRkYTQ0ZjNhYjdmZDk2ZjU3YzAxNGUxOXAtMSwKKyAgICAtMHgxLmZjY2Y1MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjY0CisgICAgLTB4MS5kOWEzOWRmMjA3MTM5Zjk5ZWJlOWI1NmRhZmIyMzRiN3AtMiwKKyAgICAweDEuMGVkMTcwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjUKKyAgICAtMHgxLmQ5YTM5ZGYyMDcxMzlmOTllYmU5YjU2ZGFmYjIzNGI3cC0yLAorICAgIC0weDEuMGVkMTcwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjYKKyAgICAtMHgxLmM3YjkxODk2MzgxMjhiYzBhZTMzZmRmMjcyOWNjOTg3cC0zLAorICAgIDB4MS4xZjNiMzhwMgorICB9LAorICB7IC8vIEVudHJ5IDY2NworICAgIC0weDEuYzdiOTE4OTYzODEyOGJjMGFlMzNmZGYyNzI5Y2M5ODdwLTMsCisgICAgLTB4MS4xZjNiMzhwMgorICB9LAorICB7IC8vIEVudHJ5IDY2OAorICAgIDB4MS4wNjkwODJlMDRiMjVlOWQyZWE5ZTI2M2I1MGQwOGIzNHAtNSwKKyAgICAweDEuMmZhNXAyCisgIH0sCisgIHsgLy8gRW50cnkgNjY5CisgICAgMHgxLjA2OTA4MmUwNGIyNWU5ZDJlYTllMjYzYjUwZDA4YjM0cC01LAorICAgIC0weDEuMmZhNXAyCisgIH0sCisgIHsgLy8gRW50cnkgNjcwCisgICAgMHgxLjIzNWIxODYxZjIxYWE4NmRjZTI1OWU0ZTViNGVmMzk1cC0yLAorICAgIDB4MS40MDBlYzhwMgorICB9LAorICB7IC8vIEVudHJ5IDY3MQorICAgIDB4MS4yMzViMTg2MWYyMWFhODZkY2UyNTllNGU1YjRlZjM5NXAtMiwKKyAgICAtMHgxLjQwMGVjOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjcyCisgICAgMHgxLjA5NmFhZjcwMzQxNDg1MDYyZjQ0M2M4MGE5MGEzYmUzcC0xLAorICAgIDB4MS41MDc4OTBwMgorICB9LAorICB7IC8vIEVudHJ5IDY3MworICAgIDB4MS4wOTZhYWY3MDM0MTQ4NTA2MmY0NDNjODBhOTBhM2JlM3AtMSwKKyAgICAtMHgxLjUwNzg5MHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjc0CisgICAgMHgxLjZmY2I2YWUwMzEwN2JlNDU4ZDA3MzYxMzcxZWZhYmI0cC0xLAorICAgIDB4MS42MGUyNThwMgorICB9LAorICB7IC8vIEVudHJ5IDY3NQorICAgIDB4MS42ZmNiNmFlMDMxMDdiZTQ1OGQwNzM2MTM3MWVmYWJiNHAtMSwKKyAgICAtMHgxLjYwZTI1OHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjc2CisgICAgMHgxLmJlMWQ2ZDEwZDVjOGNlZWI4YmY5YWViN2E5ZjY5MGI5cC0xLAorICAgIDB4MS43MTRjMjBwMgorICB9LAorICB7IC8vIEVudHJ5IDY3NworICAgIDB4MS5iZTFkNmQxMGQ1YzhjZWViOGJmOWFlYjdhOWY2OTBiOXAtMSwKKyAgICAtMHgxLjcxNGMyMHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjc4CisgICAgMHgxLmVmNDEzYzcyZDk4OGJiNTM5Mzc5NzVlNGZkNGZjYzdhcC0xLAorICAgIDB4MS44MWI1ZThwMgorICB9LAorICB7IC8vIEVudHJ5IDY3OQorICAgIDB4MS5lZjQxM2M3MmQ5ODhiYjUzOTM3OTc1ZTRmZDRmY2M3YXAtMSwKKyAgICAtMHgxLjgxYjVlOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjgwCisgICAgMHgxLmZmMGZkMmNiNWE5MjI4Y2ZhMWUwMTYwNWQwNjI2Yzg0cC0xLAorICAgIDB4MS5lZmZmZmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODEKKyAgICAweDEuZmYwZmQyY2I1YTkyMjhjZmExZTAxNjA1ZDA2MjZjODRwLTEsCisgICAgLTB4MS5lZmZmZmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODIKKyAgICAweDEuZmYwZmQyYzk2YWRmYmFkNWY5MDRhNzFiMmQyMTBhMmFwLTEsCisgICAgMHgxLmYwcC01CisgIH0sCisgIHsgLy8gRW50cnkgNjgzCisgICAgMHgxLmZmMGZkMmM5NmFkZmJhZDVmOTA0YTcxYjJkMjEwYTJhcC0xLAorICAgIC0weDEuZjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODQKKyAgICAweDEuZmYwZmQyYzc3YjJkNGFkZDQwNTY2ZWM1YWEyNGZjNmVwLTEsCisgICAgMHgxLmYwMDAwMnAtNQorICB9LAorICB7IC8vIEVudHJ5IDY4NQorICAgIDB4MS5mZjBmZDJjNzdiMmQ0YWRkNDA1NjZlYzVhYTI0ZmM2ZXAtMSwKKyAgICAtMHgxLmYwMDAwMnAtNQorICB9LAorICB7IC8vIEVudHJ5IDY4NgorICAgIDB4MS5mYzIxMDA1ZDIxNmE4OWRlNTViMTkyMDk2ZmM2YjdiYXAtMSwKKyAgICAweDEuZjdmZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgNjg3CisgICAgMHgxLmZjMjEwMDVkMjE2YTg5ZGU1NWIxOTIwOTZmYzZiN2JhcC0xLAorICAgIC0weDEuZjdmZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgNjg4CisgICAgMHgxLmZjMjEwMDU1NDY3ZmU1OGEyMDE5MzM5OWIzYmMwZGQycC0xLAorICAgIDB4MS5mOHAtNAorICB9LAorICB7IC8vIEVudHJ5IDY4OQorICAgIDB4MS5mYzIxMDA1NTQ2N2ZlNThhMjAxOTMzOTliM2JjMGRkMnAtMSwKKyAgICAtMHgxLmY4cC00CisgIH0sCisgIHsgLy8gRW50cnkgNjkwCisgICAgMHgxLmZjMjEwMDRkNmI5NTM5NDU2NjdmODAwZmY4MWRlMGVicC0xLAorICAgIDB4MS5mODAwMDJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTEKKyAgICAweDEuZmMyMTAwNGQ2Yjk1Mzk0NTY2N2Y4MDBmZjgxZGUwZWJwLTEsCisgICAgLTB4MS5mODAwMDJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTIKKyAgICAweDEuZjk0OTg0YzZmZGYxYmU2MTY4NTA5ZmYxZTM1ZjYyZGVwLTEsCisgICAgMHgxLjRiZmZmZXAtMworICB9LAorICB7IC8vIEVudHJ5IDY5MworICAgIDB4MS5mOTQ5ODRjNmZkZjFiZTYxNjg1MDlmZjFlMzVmNjJkZXAtMSwKKyAgICAtMHgxLjRiZmZmZXAtMworICB9LAorICB7IC8vIEVudHJ5IDY5NAorICAgIDB4MS5mOTQ5ODRiMjU1MmUxOTQxZWM3NjZjNmE4MmVjZTRhM3AtMSwKKyAgICAweDEuNGNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTUKKyAgICAweDEuZjk0OTg0YjI1NTJlMTk0MWVjNzY2YzZhODJlY2U0YTNwLTEsCisgICAgLTB4MS40Y3AtMworICB9LAorICB7IC8vIEVudHJ5IDY5NgorICAgIDB4MS5mOTQ5ODQ5ZGFjNmE1NDhkZDg1MTEzOTA0MTEwNjMxNnAtMSwKKyAgICAweDEuNGMwMDAycC0zCisgIH0sCisgIHsgLy8gRW50cnkgNjk3CisgICAgMHgxLmY5NDk4NDlkYWM2YTU0OGRkODUxMTM5MDQxMTA2MzE2cC0xLAorICAgIC0weDEuNGMwMDAycC0zCisgIH0sCisgIHsgLy8gRW50cnkgNjk4CisgICAgMHgxLmU5MjFkZDcwNTRlZjVkNGY3MjdkOTM4Y2UxMGEwNTNjcC0xLAorICAgIDB4MS4zMzMzMzJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTkKKyAgICAweDEuZTkyMWRkNzA1NGVmNWQ0ZjcyN2Q5MzhjZTEwYTA1M2NwLTEsCisgICAgLTB4MS4zMzMzMzJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDAKKyAgICAweDEuZTkyMWRkMjRhZGI5MTI5ZWZjMDUzZjlhY2Q0ZDI0NDRwLTEsCisgICAgMHgxLjMzMzMzNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDcwMQorICAgIDB4MS5lOTIxZGQyNGFkYjkxMjllZmMwNTNmOWFjZDRkMjQ0NHAtMSwKKyAgICAtMHgxLjMzMzMzNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDcwMgorICAgIDB4MS5lOTIxZGNkOTA2ODI0ZGE2MGU0M2MwM2E3Nzc0YjE3MXAtMSwKKyAgICAweDEuMzMzMzM2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzAzCisgICAgMHgxLmU5MjFkY2Q5MDY4MjRkYTYwZTQzYzAzYTc3NzRiMTcxcC0xLAorICAgIC0weDEuMzMzMzM2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzA0CisgICAgMHgxLjhmZWVkYzkyNzY0YmZiZGNiNDEzODllODIwNjNlZDZlcC0xLAorICAgIDB4MS41OTQzMTZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDUKKyAgICAweDEuOGZlZWRjOTI3NjRiZmJkY2I0MTM4OWU4MjA2M2VkNmVwLTEsCisgICAgLTB4MS41OTQzMTZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDYKKyAgICAweDEuOGZlZWRiNTJjNzUwMDg3YzVmODcyN2UwMjc5ZTVmNjZwLTEsCisgICAgMHgxLjU5NDMxOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcwNworICAgIDB4MS44ZmVlZGI1MmM3NTAwODdjNWY4NzI3ZTAyNzllNWY2NnAtMSwKKyAgICAtMHgxLjU5NDMxOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcwOAorICAgIDB4MS44ZmVlZGExMzE4NTI4NTJkMmZhN2ZlODg0N2IwNTk3M3AtMSwKKyAgICAweDEuNTk0MzFhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzA5CisgICAgMHgxLjhmZWVkYTEzMTg1Mjg1MmQyZmE3ZmU4ODQ3YjA1OTczcC0xLAorICAgIC0weDEuNTk0MzFhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzEwCisgICAgMHgxLjZiODk5MTEyNzg1OWZkOWI0M2NhMWQwOGI5MmFhNDAxcC0xLAorICAgIDB4MS44ZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTEKKyAgICAweDEuNmI4OTkxMTI3ODU5ZmQ5YjQzY2ExZDA4YjkyYWE0MDFwLTEsCisgICAgLTB4MS44ZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTIKKyAgICAweDEuNmI4OThmYTllZmI1ZDIyYjU4ZjBkOTllOTYzNDkzMWFwLTEsCisgICAgMHgxLjkwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzEzCisgICAgMHgxLjZiODk4ZmE5ZWZiNWQyMmI1OGYwZDk5ZTk2MzQ5MzFhcC0xLAorICAgIC0weDEuOTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTQKKyAgICAweDEuNmI4OThlNDE2NzEwM2IzMWRlNmRhNjdlYmY1ZTlmZTZwLTEsCisgICAgMHgxLjkwMDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxNQorICAgIDB4MS42Yjg5OGU0MTY3MTAzYjMxZGU2ZGE2N2ViZjVlOWZlNnAtMSwKKyAgICAtMHgxLjkwMDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxNgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNzE3CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDcxOAorICAgIDB4MS5wMCwKKyAgICAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTkKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNzIwCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjEKKyAgICAweDEuZmY2MjFlMzg5NTZhM2IzYmU5MjAyNTZkZGI2MDM0Y2RwLTEsCisgICAgMHgxLjkyMWZiNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDcyMgorICAgIDB4MS5mZjYyMWUzODk1NmEzYjNiZTkyMDI1NmRkYjYwMzRjZHAtMSwKKyAgICAtMHgxLjkyMWZiNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDcyMworICAgIDB4MS5mZjYyMWUzNzAzNzNkYzZmMzk2M2Q0Mjg5NmVkZTA3OHAtMSwKKyAgICAweDEuOTIxZmI2cC01CisgIH0sCisgIHsgLy8gRW50cnkgNzI0CisgICAgMHgxLmZmNjIxZTM3MDM3M2RjNmYzOTYzZDQyODk2ZWRlMDc4cC0xLAorICAgIC0weDEuOTIxZmI2cC01CisgIH0sCisgIHsgLy8gRW50cnkgNzI1CisgICAgMHgxLmZmNjIxZTM1NzE3ZDdiYTMyNzg5NGJkZmRlOWY0Nzg3cC0xLAorICAgIDB4MS45MjFmYjhwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjYKKyAgICAweDEuZmY2MjFlMzU3MTdkN2JhMzI3ODk0YmRmZGU5ZjQ3ODdwLTEsCisgICAgLTB4MS45MjFmYjhwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjcKKyAgICAweDEuZmQ4OGRhNDEwYjYxY2Q1NTIyMWQ5YmViOTk2ZDRkOTlwLTEsCisgICAgMHgxLjkyMWZiNHAtNAorICB9LAorICB7IC8vIEVudHJ5IDcyOAorICAgIDB4MS5mZDg4ZGE0MTBiNjFjZDU1MjIxZDliZWI5OTZkNGQ5OXAtMSwKKyAgICAtMHgxLjkyMWZiNHAtNAorICB9LAorICB7IC8vIEVudHJ5IDcyOQorICAgIDB4MS5mZDg4ZGEzYWM1NzgxZjVhNmZjMzJlNDBlZDUxMjJiMHAtMSwKKyAgICAweDEuOTIxZmI2cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzMwCisgICAgMHgxLmZkODhkYTNhYzU3ODFmNWE2ZmMzMmU0MGVkNTEyMmIwcC0xLAorICAgIC0weDEuOTIxZmI2cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzMxCisgICAgMHgxLmZkODhkYTM0N2Y4ZTY5Njk5OWZmZDU4MDYwYmEzNTY5cC0xLAorICAgIDB4MS45MjFmYjhwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzIKKyAgICAweDEuZmQ4OGRhMzQ3ZjhlNjk2OTk5ZmZkNTgwNjBiYTM1NjlwLTEsCisgICAgLTB4MS45MjFmYjhwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzMKKyAgICAweDEuZjYyOTdkMGY0NjcxZGE1ODBkZmVjZGQ0ZGIyOWY0NzNwLTEsCisgICAgMHgxLjkyMWZiNHAtMworICB9LAorICB7IC8vIEVudHJ5IDczNAorICAgIDB4MS5mNjI5N2QwZjQ2NzFkYTU4MGRmZWNkZDRkYjI5ZjQ3M3AtMSwKKyAgICAtMHgxLjkyMWZiNHAtMworICB9LAorICB7IC8vIEVudHJ5IDczNQorICAgIDB4MS5mNjI5N2NmNjRkYjlhMjFkOThhYjM5NDBmYzhhODZmMHAtMSwKKyAgICAweDEuOTIxZmI2cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzM2CisgICAgMHgxLmY2Mjk3Y2Y2NGRiOWEyMWQ5OGFiMzk0MGZjOGE4NmYwcC0xLAorICAgIC0weDEuOTIxZmI2cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzM3CisgICAgMHgxLmY2Mjk3Y2RkNTUwMTRhODA4Yjg4M2ZkMTgzZjMxOGFjcC0xLAorICAgIDB4MS45MjFmYjhwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzgKKyAgICAweDEuZjYyOTdjZGQ1NTAxNGE4MDhiODgzZmQxODNmMzE4YWNwLTEsCisgICAgLTB4MS45MjFmYjhwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzkKKyAgICAweDEuZDkwNmJkMzEzNDQzMDA3ZGNiMGJkNGUzZDYzMjg0YzBwLTEsCisgICAgMHgxLjkyMWZiNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDc0MAorICAgIDB4MS5kOTA2YmQzMTM0NDMwMDdkY2IwYmQ0ZTNkNjMyODRjMHAtMSwKKyAgICAtMHgxLjkyMWZiNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDc0MQorICAgIDB4MS5kOTA2YmNjZjNjYjg3NTg3NGRhM2RhNGMwMTEwNGJhZnAtMSwKKyAgICAweDEuOTIxZmI2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzQyCisgICAgMHgxLmQ5MDZiY2NmM2NiODc1ODc0ZGEzZGE0YzAxMTA0YmFmcC0xLAorICAgIC0weDEuOTIxZmI2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzQzCisgICAgMHgxLmQ5MDZiYzZkNDUyZDc0NGYyMTA4MTA4NjExMDJmMmRhcC0xLAorICAgIDB4MS45MjFmYjhwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDQKKyAgICAweDEuZDkwNmJjNmQ0NTJkNzQ0ZjIxMDgxMDg2MTEwMmYyZGFwLTEsCisgICAgLTB4MS45MjFmYjhwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDUKKyAgICAweDEuNmEwOWU3NGQzZDNmYmI5NGQ5NDI3NGYzNzc2OWY2ZWFwLTEsCisgICAgMHgxLjkyMWZiNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc0NgorICAgIDB4MS42YTA5ZTc0ZDNkM2ZiYjk0ZDk0Mjc0ZjM3NzY5ZjZlYXAtMSwKKyAgICAtMHgxLjkyMWZiNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc0NworICAgIDB4MS42YTA5ZTVlMzMzNTk4M2U1YWM5MmU3MzNlM2YyNGI0MnAtMSwKKyAgICAweDEuOTIxZmI2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzQ4CisgICAgMHgxLjZhMDllNWUzMzM1OTgzZTVhYzkyZTczM2UzZjI0YjQycC0xLAorICAgIC0weDEuOTIxZmI2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzQ5CisgICAgMHgxLjZhMDllNDc5Mjk3MWUyMmM5YTAwMjYxYWVhYzA3MGRhcC0xLAorICAgIDB4MS45MjFmYjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTAKKyAgICAweDEuNmEwOWU0NzkyOTcxZTIyYzlhMDAyNjFhZWFjMDcwZGFwLTEsCisgICAgLTB4MS45MjFmYjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTEKKyAgICAweDEuNDQ0MmQxODQ2OTg5MzYxMDI4MWEwZjliMGU4ZDBlZWZwLTI0LAorICAgIDB4MS45MjFmYjRwMAorICB9LAorICB7IC8vIEVudHJ5IDc1MgorICAgIDB4MS40NDQyZDE4NDY5ODkzNjEwMjgxYTBmOWIwZThkMGVlZnAtMjQsCisgICAgLTB4MS45MjFmYjRwMAorICB9LAorICB7IC8vIEVudHJ5IDc1MworICAgIC0weDEuNzc3YTVjZjcyY2VjYzRjZGUzYTMxZTdkNWEwMjYxNDJwLTI1LAorICAgIDB4MS45MjFmYjZwMAorICB9LAorICB7IC8vIEVudHJ5IDc1NAorICAgIC0weDEuNzc3YTVjZjcyY2VjYzRjZGUzYTMxZTdkNWEwMjYxNDJwLTI1LAorICAgIC0weDEuOTIxZmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTUKKyAgICAtMHgxLjVkZGU5NzNkY2IzOTg1ZjRhOGU3NmExZmVjYTI5ZTFkcC0yMywKKyAgICAweDEuOTIxZmI4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTYKKyAgICAtMHgxLjVkZGU5NzNkY2IzOTg1ZjRhOGU3NmExZmVjYTI5ZTFkcC0yMywKKyAgICAtMHgxLjkyMWZiOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzU3CisgICAgLTB4MS5mZmZmZmZmZmZmZjk5NTFiMzBlMDg0NzMyZTYwYmI4NXAtMSwKKyAgICAweDEuOTIxZmI0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTgKKyAgICAtMHgxLmZmZmZmZmZmZmZmOTk1MWIzMGUwODQ3MzJlNjBiYjg1cC0xLAorICAgIC0weDEuOTIxZmI0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTkKKyAgICAtMHgxLmZmZmZmZmZmZmZmZGQ5NDg0OTI3MWQwOGVlY2Y1NGExcC0xLAorICAgIDB4MS45MjFmYjZwMQorICB9LAorICB7IC8vIEVudHJ5IDc2MAorICAgIC0weDEuZmZmZmZmZmZmZmZkZDk0ODQ5MjcxZDA4ZWVjZjU0YTFwLTEsCisgICAgLTB4MS45MjFmYjZwMQorICB9LAorICB7IC8vIEVudHJ5IDc2MQorICAgIC0weDEuZmZmZmZmZmZmZmUyMWQ3NTYxNmRiNWViYzU2NDA1ZjVwLTEsCisgICAgMHgxLjkyMWZiOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzYyCisgICAgLTB4MS5mZmZmZmZmZmZmZTIxZDc1NjE2ZGI1ZWJjNTY0MDVmNXAtMSwKKyAgICAtMHgxLjkyMWZiOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzYzCisgICAgMHgxLmZmZmZmZmZmZmZlNjU0NmNjMzgyMTFmNWU4ZGVlYjk3cC0xLAorICAgIDB4MS45MjFmYjRwMgorICB9LAorICB7IC8vIEVudHJ5IDc2NAorICAgIDB4MS5mZmZmZmZmZmZmZTY1NDZjYzM4MjExZjVlOGRlZWI5N3AtMSwKKyAgICAtMHgxLjkyMWZiNHAyCisgIH0sCisgIHsgLy8gRW50cnkgNzY1CisgICAgMHgxLmZmZmZmZmZmZmZmNzY1MjEyNDljNzQyODViZjczYzA3cC0xLAorICAgIDB4MS45MjFmYjZwMgorICB9LAorICB7IC8vIEVudHJ5IDc2NgorICAgIDB4MS5mZmZmZmZmZmZmZjc2NTIxMjQ5Yzc0Mjg1YmY3M2MwN3AtMSwKKyAgICAtMHgxLjkyMWZiNnAyCisgIH0sCisgIHsgLy8gRW50cnkgNzY3CisgICAgMHgxLmZmZmZmZmZmZmY4ODc1ZDU4NWI2ZGIyYzMxNzExMDA0cC0xLAorICAgIDB4MS45MjFmYjhwMgorICB9LAorICB7IC8vIEVudHJ5IDc2OAorICAgIDB4MS5mZmZmZmZmZmZmODg3NWQ1ODViNmRiMmMzMTcxMTAwNHAtMSwKKyAgICAtMHgxLjkyMWZiOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNzY5CisgICAgMHgxLmZmZmZmZmZmZmY5OTUxYjMwZTA4NGE2YTk5M2I4Njc1cC0xLAorICAgIDB4MS45MjFmYjRwMworICB9LAorICB7IC8vIEVudHJ5IDc3MAorICAgIDB4MS5mZmZmZmZmZmZmOTk1MWIzMGUwODRhNmE5OTNiODY3NXAtMSwKKyAgICAtMHgxLjkyMWZiNHAzCisgIH0sCisgIHsgLy8gRW50cnkgNzcxCisgICAgMHgxLmZmZmZmZmZmZmZkZDk0ODQ5MjcxZDBlYjdiN2I4ODRicC0xLAorICAgIDB4MS45MjFmYjZwMworICB9LAorICB7IC8vIEVudHJ5IDc3MgorICAgIDB4MS5mZmZmZmZmZmZmZGQ5NDg0OTI3MWQwZWI3YjdiODg0YnAtMSwKKyAgICAtMHgxLjkyMWZiNnAzCisgIH0sCisgIHsgLy8gRW50cnkgNzczCisgICAgMHgxLmZmZmZmZmZmZmUyMWQ3NTYxNmRiYTQ4MjgzZDNjMmY3cC0xLAorICAgIDB4MS45MjFmYjhwMworICB9LAorICB7IC8vIEVudHJ5IDc3NAorICAgIDB4MS5mZmZmZmZmZmZlMjFkNzU2MTZkYmE0ODI4M2QzYzJmN3AtMSwKKyAgICAtMHgxLjkyMWZiOHAzCisgIH0sCisgIHsgLy8gRW50cnkgNzc1CisgICAgMHgxLmZmZmZmZmZmZmU2NTQ2Y2MzODIxNTJkOWMwZWI5YjQ3cC0xLAorICAgIDB4MS45MjFmYjRwNAorICB9LAorICB7IC8vIEVudHJ5IDc3NgorICAgIDB4MS5mZmZmZmZmZmZlNjU0NmNjMzgyMTUyZDljMGViOWI0N3AtMSwKKyAgICAtMHgxLjkyMWZiNHA0CisgIH0sCisgIHsgLy8gRW50cnkgNzc3CisgICAgMHgxLmZmZmZmZmZmZmY3NjUyMTI0OWM3NDg0ZWE3ZDdhNDA5cC0xLAorICAgIDB4MS45MjFmYjZwNAorICB9LAorICB7IC8vIEVudHJ5IDc3OAorICAgIDB4MS5mZmZmZmZmZmZmNzY1MjEyNDljNzQ4NGVhN2Q3YTQwOXAtMSwKKyAgICAtMHgxLjkyMWZiNnA0CisgIH0sCisgIHsgLy8gRW50cnkgNzc5CisgICAgMHgxLmZmZmZmZmZmZjg4NzVkNTg1YjcyMGYyNWYwNDczOTQzcC0xLAorICAgIDB4MS45MjFmYjhwNAorICB9LAorICB7IC8vIEVudHJ5IDc4MAorICAgIDB4MS5mZmZmZmZmZmY4ODc1ZDU4NWI3MjBmMjVmMDQ3Mzk0M3AtMSwKKyAgICAtMHgxLjkyMWZiOHA0CisgIH0sCisgIHsgLy8gRW50cnkgNzgxCisgICAgMHgxLmZmZmZmZmZmZjk5NTFiMzBlMDg3ZGU1Y2MzODY4M2I4cC0xLAorICAgIDB4MS45MjFmYjRwNQorICB9LAorICB7IC8vIEVudHJ5IDc4MgorICAgIDB4MS5mZmZmZmZmZmY5OTUxYjMwZTA4N2RlNWNjMzg2ODNiOHAtMSwKKyAgICAtMHgxLjkyMWZiNHA1CisgIH0sCisgIHsgLy8gRW50cnkgNzgzCisgICAgMHgxLmZmZmZmZmZmZmRkOTQ4NDkyNzFkNmI0NjNkZjZiZGRmcC0xLAorICAgIDB4MS45MjFmYjZwNQorICB9LAorICB7IC8vIEVudHJ5IDc4NAorICAgIDB4MS5mZmZmZmZmZmZkZDk0ODQ5MjcxZDZiNDYzZGY2YmRkZnAtMSwKKyAgICAtMHgxLjkyMWZiNnA1CisgIH0sCisgIHsgLy8gRW50cnkgNzg1CisgICAgMHgxLmZmZmZmZmZmZTIxZDc1NjE2ZTAwMGU1NWQwOWY4NzU3cC0xLAorICAgIDB4MS45MjFmYjhwNQorICB9LAorICB7IC8vIEVudHJ5IDc4NgorICAgIDB4MS5mZmZmZmZmZmUyMWQ3NTYxNmUwMDBlNTVkMDlmODc1N3AtMSwKKyAgICAtMHgxLjkyMWZiOHA1CisgIH0sCisgIHsgLy8gRW50cnkgNzg3CisgICAgMHgxLmZmZmZmZmZmZTY1NDZjYzM4MjQ4YThjZjBiOWI1Nzk1cC0xLAorICAgIDB4MS45MjFmYjRwNgorICB9LAorICB7IC8vIEVudHJ5IDc4OAorICAgIDB4MS5mZmZmZmZmZmU2NTQ2Y2MzODI0OGE4Y2YwYjliNTc5NXAtMSwKKyAgICAtMHgxLjkyMWZiNHA2CisgIH0sCisgIHsgLy8gRW50cnkgNzg5CisgICAgMHgxLmZmZmZmZmZmZjc2NTIxMjQ5YzdhNGRkMmUxNWRkMWM0cC0xLAorICAgIDB4MS45MjFmYjZwNgorICB9LAorICB7IC8vIEVudHJ5IDc5MAorICAgIDB4MS5mZmZmZmZmZmY3NjUyMTI0OWM3YTRkZDJlMTVkZDFjNHAtMSwKKyAgICAtMHgxLjkyMWZiNnA2CisgIH0sCisgIHsgLy8gRW50cnkgNzkxCisgICAgMHgxLmZmZmZmZmZmODg3NWQ1ODViYjdkNTUzODNhOWIzOWE0cC0xLAorICAgIDB4MS45MjFmYjhwNgorICB9LAorICB7IC8vIEVudHJ5IDc5MgorICAgIDB4MS5mZmZmZmZmZjg4NzVkNTg1YmI3ZDU1MzgzYTliMzlhNHAtMSwKKyAgICAtMHgxLjkyMWZiOHA2CisgIH0sCisgIHsgLy8gRW50cnkgNzkzCisgICAgMHgxLmZmZmZmZmZmOTk1MWIzMGUwYmI1OThmYzA2NzlhNmY3cC0xLAorICAgIDB4MS45MjFmYjRwNworICB9LAorICB7IC8vIEVudHJ5IDc5NAorICAgIDB4MS5mZmZmZmZmZjk5NTFiMzBlMGJiNTk4ZmMwNjc5YTZmN3AtMSwKKyAgICAtMHgxLjkyMWZiNHA3CisgIH0sCisgIHsgLy8gRW50cnkgNzk1CisgICAgMHgxLmZmZmZmZmZmZGQ5NDg0OTI3MjMzNDJlYTFkYTQ5YmFjcC0xLAorICAgIDB4MS45MjFmYjZwNworICB9LAorICB7IC8vIEVudHJ5IDc5NgorICAgIDB4MS5mZmZmZmZmZmRkOTQ4NDkyNzIzMzQyZWExZGE0OWJhY3AtMSwKKyAgICAtMHgxLjkyMWZiNnA3CisgIH0sCisgIHsgLy8gRW50cnkgNzk3CisgICAgMHgxLmZmZmZmZmZlMjFkNzU2MTcyNWM3MTJmMDY4ZmM5NzE4cC0xLAorICAgIDB4MS45MjFmYjhwNworICB9LAorICB7IC8vIEVudHJ5IDc5OAorICAgIDB4MS5mZmZmZmZmZTIxZDc1NjE3MjVjNzEyZjA2OGZjOTcxOHAtMSwKKyAgICAtMHgxLjkyMWZiOHA3CisgIH0sCisgIHsgLy8gRW50cnkgNzk5CisgICAgLTB4MS42YTA5ZGIzYmRiYTA4NjhhMzFlNzY2MzU5YTg0MDZjYXAtMSwKKyAgICAweDEuMmQ5N2M0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDAKKyAgICAtMHgxLjZhMDlkYjNiZGJhMDg2OGEzMWU3NjYzNTlhODQwNmNhcC0xLAorICAgIC0weDEuMmQ5N2M0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDEKKyAgICAtMHgxLjZhMDllMGU0MDM1Yjg2Njk0YzE2NTM0ZTQyZmJlMTExcC0xLAorICAgIDB4MS4yZDk3YzZwMQorICB9LAorICB7IC8vIEVudHJ5IDgwMgorICAgIC0weDEuNmEwOWUwZTQwMzViODY2OTRjMTY1MzRlNDJmYmUxMTFwLTEsCisgICAgLTB4MS4yZDk3YzZwMQorICB9LAorICB7IC8vIEVudHJ5IDgwMworICAgIC0weDEuNmEwOWU2OGMyYWZmZTVhYTU4MDUwYWNjYjA1YzYyNDhwLTEsCisgICAgMHgxLjJkOTdjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgODA0CisgICAgLTB4MS42YTA5ZTY4YzJhZmZlNWFhNTgwNTBhY2NiMDVjNjI0OHAtMSwKKyAgICAtMHgxLjJkOTdjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgODA1CisgICAgLTB4MS42YTA5ZWRiNjc3MDZlMDk5NzEyMWQxMmEwYzg3YmFlOHAtMSwKKyAgICAweDEuZjZhN2EwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDYKKyAgICAtMHgxLjZhMDllZGI2NzcwNmUwOTk3MTIxZDEyYTBjODdiYWU4cC0xLAorICAgIC0weDEuZjZhN2EwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDcKKyAgICAtMHgxLjZhMDllODBlNGY3ZjJhODhkZWJlZDM3ZmFhOTNlOGM4cC0xLAorICAgIDB4MS5mNmE3YTJwMQorICB9LAorICB7IC8vIEVudHJ5IDgwOAorICAgIC0weDEuNmEwOWU4MGU0ZjdmMmE4OGRlYmVkMzdmYWE5M2U4YzhwLTEsCisgICAgLTB4MS5mNmE3YTJwMQorICB9LAorICB7IC8vIEVudHJ5IDgwOQorICAgIC0weDEuNmEwOWUyNjYyN2UwZDNkOWNiNzZkZTAwY2I5MDJiZWNwLTEsCisgICAgMHgxLmY2YTdhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgODEwCisgICAgLTB4MS42YTA5ZTI2NjI3ZTBkM2Q5Y2I3NmRlMDBjYjkwMmJlY3AtMSwKKyAgICAtMHgxLmY2YTdhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgODExCisgICAgLTB4MS5mOTk5MGU5MWE3NDE2OGI5MGJkNjhkZmFiNzc1YzljYXAtMjEsCisgICAgMHgxLjJkOTdjNHAyCisgIH0sCisgIHsgLy8gRW50cnkgODEyCisgICAgLTB4MS5mOTk5MGU5MWE3NDE2OGI5MGJkNjhkZmFiNzc1YzljYXAtMjEsCisgICAgLTB4MS4yZDk3YzRwMgorICB9LAorICB7IC8vIEVudHJ5IDgxMworICAgIC0weDEuZjMzMjFkMjM0ZjEzNjNkMTg3ZGQwOTUyOGI2N2IyMTVwLTIyLAorICAgIDB4MS4yZDk3YzZwMgorICB9LAorICB7IC8vIEVudHJ5IDgxNAorICAgIC0weDEuZjMzMjFkMjM0ZjEzNjNkMTg3ZGQwOTUyOGI2N2IyMTVwLTIyLAorICAgIC0weDEuMmQ5N2M2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTUKKyAgICAweDEuOTliYzViOTYxYjFhY2FjYTE4ZDk3MWY2OGFlOTlkYTlwLTI3LAorICAgIDB4MS4yZDk3YzhwMgorICB9LAorICB7IC8vIEVudHJ5IDgxNgorICAgIDB4MS45OWJjNWI5NjFiMWFjYWNhMThkOTcxZjY4YWU5OWRhOXAtMjcsCisgICAgLTB4MS4yZDk3YzhwMgorICB9LAorICB7IC8vIEVudHJ5IDgxNworICAgIDB4MS42YTA5ZDdhNmI1NzJjMmM4MjRkMTM3ZDA0MDVkODE4OHAtMSwKKyAgICAweDEuNWZkYmJjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTgKKyAgICAweDEuNmEwOWQ3YTZiNTcyYzJjODI0ZDEzN2QwNDA1ZDgxODhwLTEsCisgICAgLTB4MS41ZmRiYmNwMgorICB9LAorICB7IC8vIEVudHJ5IDgxOQorICAgIDB4MS42YTA5ZTJmNzA0ZWVjYjE4MWUzZjVlY2U5YmUwY2EwZnAtMSwKKyAgICAweDEuNWZkYmJlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjAKKyAgICAweDEuNmEwOWUyZjcwNGVlY2IxODFlM2Y1ZWNlOWJlMGNhMGZwLTEsCisgICAgLTB4MS41ZmRiYmVwMgorICB9LAorICB7IC8vIEVudHJ5IDgyMQorICAgIDB4MS42YTA5ZWU0NzU0MTA1MGVmNTllYzRiZmNlOTM1Y2MxYXAtMSwKKyAgICAweDEuNWZkYmMwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjIKKyAgICAweDEuNmEwOWVlNDc1NDEwNTBlZjU5ZWM0YmZjZTkzNWNjMWFwLTEsCisgICAgLTB4MS41ZmRiYzBwMgorICB9LAorICB7IC8vIEVudHJ5IDgyMworICAgIDB4MS42YTA5ZmM5YmViYWJhMjA4YzgxZWMwYjFjZDMwNzU4OXAtMSwKKyAgICAweDEuYzQ2M2E4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjQKKyAgICAweDEuNmEwOWZjOWJlYmFiYTIwOGM4MWVjMGIxY2QzMDc1ODlwLTEsCisgICAgLTB4MS5jNDYzYThwMgorICB9LAorICB7IC8vIEVudHJ5IDgyNQorICAgIDB4MS42YTA5ZjE0YjljZmNjMGY2MjI3ZDM4NmNjMzcwNGEwNXAtMSwKKyAgICAweDEuYzQ2M2FhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjYKKyAgICAweDEuNmEwOWYxNGI5Y2ZjYzBmNjIyN2QzODZjYzM3MDRhMDVwLTEsCisgICAgLTB4MS5jNDYzYWFwMgorICB9LAorICB7IC8vIEVudHJ5IDgyNworICAgIDB4MS42YTA5ZTVmYjRkZjM1ZDY3MjlmNDcyZGEzNDEzZTQwNHAtMSwKKyAgICAweDEuYzQ2M2FjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjgKKyAgICAweDEuNmEwOWU1ZmI0ZGYzNWQ2NzI5ZjQ3MmRhMzQxM2U0MDRwLTEsCisgICAgLTB4MS5jNDYzYWNwMgorICB9LAorICB7IC8vIEVudHJ5IDgyOQorICAgIDB4MS40YWE5YzJmMmMxZGVmYjg3MjhmMGQyZGExMjE3YWFlMXAtMjEsCisgICAgMHgxLmY2YTdhMHAyCisgIH0sCisgIHsgLy8gRW50cnkgODMwCisgICAgMHgxLjRhYTljMmYyYzFkZWZiODcyOGYwZDJkYTEyMTdhYWUxcC0yMSwKKyAgICAtMHgxLmY2YTdhMHAyCisgIH0sCisgIHsgLy8gRW50cnkgODMxCisgICAgMHgxLjJhYTcwYmNiMDdkNmQwZjM2Yjc3N2NiMzgwYTg0NWQ5cC0yMywKKyAgICAweDEuZjZhN2EycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzIKKyAgICAweDEuMmFhNzBiY2IwN2Q2ZDBmMzZiNzc3Y2IzODBhODQ1ZDlwLTIzLAorICAgIC0weDEuZjZhN2EycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzMKKyAgICAtMHgxLjZhYWM3YTFhN2MwYzdhZmM1ZmNiMjMxM2E3ZWNhMjI5cC0yMiwKKyAgICAweDEuZjZhN2E0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzQKKyAgICAtMHgxLjZhYWM3YTFhN2MwYzdhZmM1ZmNiMjMxM2E3ZWNhMjI5cC0yMiwKKyAgICAtMHgxLmY2YTdhNHAyCisgIH0sCisgIHsgLy8gRW50cnkgODM1CisgICAgLTB4MS42YTA5YzhjMTNmNDhiN2FhZDg1MWY5ZDY0NzRiY2IzMXAtMSwKKyAgICAweDEuMTQ3NWNhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzYKKyAgICAtMHgxLjZhMDljOGMxM2Y0OGI3YWFkODUxZjlkNjQ3NGJjYjMxcC0xLAorICAgIC0weDEuMTQ3NWNhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzcKKyAgICAtMHgxLjZhMDlkZjYxZGVkNDlkMWVlNGZjYTRiYTYxNDBkMTc5cC0xLAorICAgIDB4MS4xNDc1Y2NwMworICB9LAorICB7IC8vIEVudHJ5IDgzOAorICAgIC0weDEuNmEwOWRmNjFkZWQ0OWQxZWU0ZmNhNGJhNjE0MGQxNzlwLTEsCisgICAgLTB4MS4xNDc1Y2NwMworICB9LAorICB7IC8vIEVudHJ5IDgzOQorICAgIC0weDEuNmEwOWY2MDI3Y2Y2NzhiMzhmYzg5OTJjZDk5OTAzMDJwLTEsCisgICAgMHgxLjE0NzVjZXAzCisgIH0sCisgIHsgLy8gRW50cnkgODQwCisgICAgLTB4MS42YTA5ZjYwMjdjZjY3OGIzOGZjODk5MmNkOTk5MDMwMnAtMSwKKyAgICAtMHgxLjE0NzVjZXAzCisgIH0sCisgIHsgLy8gRW50cnkgODQxCisgICAgLTB4MS5mZmZmZmZmZmZjMTk3MmM5MDJlZjMxYzM3Y2I1NDgxN3AtMSwKKyAgICAweDEuMmQ5N2M0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDIKKyAgICAtMHgxLmZmZmZmZmZmZmMxOTcyYzkwMmVmMzFjMzdjYjU0ODE3cC0xLAorICAgIC0weDEuMmQ5N2M0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDMKKyAgICAtMHgxLmZmZmZmZmZmZmYwY2E0ZTYyNjNkMjdhMDIwNDM4OWRmcC0xLAorICAgIDB4MS4yZDk3YzZwMworICB9LAorICB7IC8vIEVudHJ5IDg0NAorICAgIC0weDEuZmZmZmZmZmZmZjBjYTRlNjI2M2QyN2EwMjA0Mzg5ZGZwLTEsCisgICAgLTB4MS4yZDk3YzZwMworICB9LAorICB7IC8vIEVudHJ5IDg0NQorICAgIC0weDEuZmZmZmZmZmZmZmZmZDcwMzQ5OGMzYjgyODg1NjM5MTVwLTEsCisgICAgMHgxLjJkOTdjOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODQ2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZkNzAzNDk4YzNiODI4ODU2MzkxNXAtMSwKKyAgICAtMHgxLjJkOTdjOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODQ3CisgICAgLTB4MS42YTBhMGI4MTVmYjM3YjJkMDE1NTFlMDdjYjMwMDlkMXAtMSwKKyAgICAweDEuNDZiOWMwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDgKKyAgICAtMHgxLjZhMGEwYjgxNWZiMzdiMmQwMTU1MWUwN2NiMzAwOWQxcC0xLAorICAgIC0weDEuNDZiOWMwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDkKKyAgICAtMHgxLjZhMDlmNGUwYzJlOThkZWI3ODY0MmI2MDMyYTczZDQ2cC0xLAorICAgIDB4MS40NmI5YzJwMworICB9LAorICB7IC8vIEVudHJ5IDg1MAorICAgIC0weDEuNmEwOWY0ZTBjMmU5OGRlYjc4NjQyYjYwMzJhNzNkNDZwLTEsCisgICAgLTB4MS40NmI5YzJwMworICB9LAorICB7IC8vIEVudHJ5IDg1MQorICAgIC0weDEuNmEwOWRlNDAyNGI1OTZiNTBlYjA2ZDU2MmRiOGM3NzdwLTEsCisgICAgMHgxLjQ2YjljNHAzCisgIH0sCisgIHsgLy8gRW50cnkgODUyCisgICAgLTB4MS42YTA5ZGU0MDI0YjU5NmI1MGViMDZkNTYyZGI4Yzc3N3AtMSwKKyAgICAtMHgxLjQ2YjljNHAzCisgIH0sCisgIHsgLy8gRW50cnkgODUzCisgICAgLTB4MS40ZGRkM2JhOWVkY2Q4OThiOTk0NmZkZDIwYWYyMmE2OHAtMjAsCisgICAgMHgxLjVmZGJiY3AzCisgIH0sCisgIHsgLy8gRW50cnkgODU0CisgICAgLTB4MS40ZGRkM2JhOWVkY2Q4OThiOTk0NmZkZDIwYWYyMmE2OHAtMjAsCisgICAgLTB4MS41ZmRiYmNwMworICB9LAorICB7IC8vIEVudHJ5IDg1NQorICAgIC0weDEuMzc3NGVlYTdiOGFiZThmYThjMzgwMTQyYjk3YWY0YjZwLTIyLAorICAgIDB4MS41ZmRiYmVwMworICB9LAorICB7IC8vIEVudHJ5IDg1NgorICAgIC0weDEuMzc3NGVlYTdiOGFiZThmYThjMzgwMTQyYjk3YWY0YjZwLTIyLAorICAgIC0weDEuNWZkYmJlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTcKKyAgICAweDEuNjQ0NTg4YWMyMzhhZTQ5M2ZhMzI0MzViYTUxMzI5YmZwLTIxLAorICAgIDB4MS41ZmRiYzBwMworICB9LAorICB7IC8vIEVudHJ5IDg1OAorICAgIDB4MS42NDQ1ODhhYzIzOGFlNDkzZmEzMjQzNWJhNTEzMjliZnAtMjEsCisgICAgLTB4MS41ZmRiYzBwMworICB9LAorICB7IC8vIEVudHJ5IDg1OQorICAgIDB4MS42YTA5YjlkYmM4ODFjNDU4ZTc0NzkwOGNhZjJhYTVlMXAtMSwKKyAgICAweDEuNzhmZGI2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjAKKyAgICAweDEuNmEwOWI5ZGJjODgxYzQ1OGU3NDc5MDhjYWYyYWE1ZTFwLTEsCisgICAgLTB4MS43OGZkYjZwMworICB9LAorICB7IC8vIEVudHJ5IDg2MQorICAgIDB4MS42YTA5ZDA3YzY4ZmMwMTBmZmNmZDNiMTlmMWVlNGY0NHAtMSwKKyAgICAweDEuNzhmZGI4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjIKKyAgICAweDEuNmEwOWQwN2M2OGZjMDEwZmZjZmQzYjE5ZjFlZTRmNDRwLTEsCisgICAgLTB4MS43OGZkYjhwMworICB9LAorICB7IC8vIEVudHJ5IDg2MworICAgIDB4MS42YTA5ZTcxZDA4MGMzM2Y2OTY0YTA3ZDFhMGJmNTk4MHAtMSwKKyAgICAweDEuNzhmZGJhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjQKKyAgICAweDEuNmEwOWU3MWQwODBjMzNmNjk2NGEwN2QxYTBiZjU5ODBwLTEsCisgICAgLTB4MS43OGZkYmFwMworICB9LAorICB7IC8vIEVudHJ5IDg2NQorICAgIDB4MS42YTBhMDNjNjM3NDJkNjI4MDJkMTYzZDVjZmIzYjdkNXAtMSwKKyAgICAweDEuYWI0MWFlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjYKKyAgICAweDEuNmEwYTAzYzYzNzQyZDYyODAyZDE2M2Q1Y2ZiM2I3ZDVwLTEsCisgICAgLTB4MS5hYjQxYWVwMworICB9LAorICB7IC8vIEVudHJ5IDg2NworICAgIDB4MS42YTA5ZWQyNTk5ZmQzNjRjOTc2NjBjY2E2NjUyYzBhM3AtMSwKKyAgICAweDEuYWI0MWIwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjgKKyAgICAweDEuNmEwOWVkMjU5OWZkMzY0Yzk3NjYwY2NhNjY1MmMwYTNwLTEsCisgICAgLTB4MS5hYjQxYjBwMworICB9LAorICB7IC8vIEVudHJ5IDg2OQorICAgIDB4MS42YTA5ZDY4NGZiNGQ4Yzg0MDY2MGQ2YjQyZWM4MzAzOXAtMSwKKyAgICAweDEuYWI0MWIycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzAKKyAgICAweDEuNmEwOWQ2ODRmYjRkOGM4NDA2NjBkNmI0MmVjODMwMzlwLTEsCisgICAgLTB4MS5hYjQxYjJwMworICB9LAorICB7IC8vIEVudHJ5IDg3MQorICAgIDB4MS5mNjY1OTVkYTdhMWFlMzA4ZDI2YTE4ZGU0YzJlZDNhM3AtMjAsCisgICAgMHgxLmM0NjNhOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODcyCisgICAgMHgxLmY2NjU5NWRhN2ExYWUzMDhkMjZhMThkZTRjMmVkM2EzcC0yMCwKKyAgICAtMHgxLmM0NjNhOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODczCisgICAgMHgxLmVjY2IyYmI0ZjY2ZWE4NjEyNDFmYTA5Y2E5ZDhhMDM0cC0yMSwKKyAgICAweDEuYzQ2M2FhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzQKKyAgICAweDEuZWNjYjJiYjRmNjZlYTg2MTI0MWZhMDljYTlkOGEwMzRwLTIxLAorICAgIC0weDEuYzQ2M2FhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzUKKyAgICAtMHgxLjMzNGQ0NGIwOTQ1NDA3YjExOGIzNjFhYjc4MTcxZjY3cC0yNSwKKyAgICAweDEuYzQ2M2FjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzYKKyAgICAtMHgxLjMzNGQ0NGIwOTQ1NDA3YjExOGIzNjFhYjc4MTcxZjY3cC0yNSwKKyAgICAtMHgxLmM0NjNhY3AzCisgIH0sCisgIHsgLy8gRW50cnkgODc3CisgICAgLTB4MS42YTA5YzE5NmYyODY3Y2M5MTZhZTJiN2U2YzlkOTljMXAtMSwKKyAgICAweDEuZGQ4NWE0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzgKKyAgICAtMHgxLjZhMDljMTk2ZjI4NjdjYzkxNmFlMmI3ZTZjOWQ5OWMxcC0xLAorICAgIC0weDEuZGQ4NWE0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzkKKyAgICAtMHgxLjZhMDlkODM3OTI4NTA2ZjdjZmY3NmYwOTRiNGUwMzc3cC0xLAorICAgIDB4MS5kZDg1YTZwMworICB9LAorICB7IC8vIEVudHJ5IDg4MAorICAgIC0weDEuNmEwOWQ4Mzc5Mjg1MDZmN2NmZjc2ZjA5NGI0ZTAzNzdwLTEsCisgICAgLTB4MS5kZDg1YTZwMworICB9LAorICB7IC8vIEVudHJ5IDg4MQorICAgIC0weDEuNmEwOWVlZDgzMTE5ODc0ZTUxYWU0YmI4YWVkZGMxZjJwLTEsCisgICAgMHgxLmRkODVhOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODgyCisgICAgLTB4MS42YTA5ZWVkODMxMTk4NzRlNTFhZTRiYjhhZWRkYzFmMnAtMSwKKyAgICAtMHgxLmRkODVhOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODgzCisgICAgLTB4MS5mZmZmZmZmZmZlNTRlNWU0ZDMyYjM0NTMxNjYwNjBiM3AtMSwKKyAgICAweDEuZjZhN2EwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODQKKyAgICAtMHgxLmZmZmZmZmZmZmU1NGU1ZTRkMzJiMzQ1MzE2NjA2MGIzcC0xLAorICAgIC0weDEuZjZhN2EwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODUKKyAgICAtMHgxLmZmZmZmZmZmZmZlYTM5NmFiOGFlZTUwOTM5MmM3NTVkcC0xLAorICAgIDB4MS5mNmE3YTJwMworICB9LAorICB7IC8vIEVudHJ5IDg4NgorICAgIC0weDEuZmZmZmZmZmZmZmVhMzk2YWI4YWVlNTA5MzkyYzc1NWRwLTEsCisgICAgLTB4MS5mNmE3YTJwMworICB9LAorICB7IC8vIEVudHJ5IDg4NworICAgIC0weDEuZmZmZmZmZmZmZjdmOGNmMDllMzJkNjMwOWJlYTg1Y2FwLTEsCisgICAgMHgxLmY2YTdhNHAzCisgIH0sCisgIHsgLy8gRW50cnkgODg4CisgICAgLTB4MS5mZmZmZmZmZmZmN2Y4Y2YwOWUzMmQ2MzA5YmVhODVjYXAtMSwKKyAgICAtMHgxLmY2YTdhNHAzCisgIH0sCisgIHsgLy8gRW50cnkgODg5CisgICAgLTB4MS42YTBhMjk0YzQ1ZWM3NDdhNDc3MTFhNDk5NGQyYzVlNHAtMSwKKyAgICAweDEuMDdlNGNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTAKKyAgICAtMHgxLjZhMGEyOTRjNDVlYzc0N2E0NzcxMWE0OTk0ZDJjNWU0cC0xLAorICAgIC0weDEuMDdlNGNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTEKKyAgICAtMHgxLjZhMDlmYzBiMGVhN2VkOWZiNWRkNTBhMGM4YWYxOWNicC0xLAorICAgIDB4MS4wN2U0Y2VwNAorICB9LAorICB7IC8vIEVudHJ5IDg5MgorICAgIC0weDEuNmEwOWZjMGIwZWE3ZWQ5ZmI1ZGQ1MGEwYzhhZjE5Y2JwLTEsCisgICAgLTB4MS4wN2U0Y2VwNAorICB9LAorICB7IC8vIEVudHJ5IDg5MworICAgIC0weDEuNmEwOWNlYzlkMWJiM2VkNGY4MTBjOWY5Nzg2ZDYxMGVwLTEsCisgICAgMHgxLjA3ZTRkMHA0CisgIH0sCisgIHsgLy8gRW50cnkgODk0CisgICAgLTB4MS42YTA5Y2VjOWQxYmIzZWQ0ZjgxMGM5Zjk3ODZkNjEwZXAtMSwKKyAgICAtMHgxLjA3ZTRkMHA0CisgIH0sCisgIHsgLy8gRW50cnkgODk1CisgICAgLTB4MS40Zjc2ZjgwNTgyYzczZmMwY2MwOTAzZWQ4Y2E3ZDZiM3AtMTksCisgICAgMHgxLjE0NzVjYXA0CisgIH0sCisgIHsgLy8gRW50cnkgODk2CisgICAgLTB4MS40Zjc2ZjgwNTgyYzczZmMwY2MwOTAzZWQ4Y2E3ZDZiM3AtMTksCisgICAgLTB4MS4xNDc1Y2FwNAorICB9LAorICB7IC8vIEVudHJ5IDg5NworICAgIC0weDEuM2RkYmUwMTYxMTA4YjY5MGVlZDcwYTdmNTlkZTc1MWNwLTIxLAorICAgIDB4MS4xNDc1Y2NwNAorICB9LAorICB7IC8vIEVudHJ5IDg5OAorICAgIC0weDEuM2RkYmUwMTYxMTA4YjY5MGVlZDcwYTdmNTlkZTc1MWNwLTIxLAorICAgIC0weDEuMTQ3NWNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTkKKyAgICAweDEuNjExMjBmZjRmNzAxODBiMGQ1NWMzYWUwZjY5NTg1Y2FwLTIwLAorICAgIDB4MS4xNDc1Y2VwNAorICB9LAorICB7IC8vIEVudHJ5IDkwMAorICAgIDB4MS42MTEyMGZmNGY3MDE4MGIwZDU1YzNhZTBmNjk1ODVjYXAtMjAsCisgICAgLTB4MS4xNDc1Y2VwNAorICB9LAorICB7IC8vIEVudHJ5IDkwMQorICAgIDB4MS42YTA5YjJiMTdiNzQxMDUwYTZjZmQ2NGI4MWM3NjQ4NXAtMSwKKyAgICAweDEuMjEwNmM4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDIKKyAgICAweDEuNmEwOWIyYjE3Yjc0MTA1MGE2Y2ZkNjRiODFjNzY0ODVwLTEsCisgICAgLTB4MS4yMTA2YzhwNAorICB9LAorICB7IC8vIEVudHJ5IDkwMworICAgIDB4MS42YTA5ZGZmMmJiZTNjOTYxNmEzNTc2YzU1ZTc3MzIwN3AtMSwKKyAgICAweDEuMjEwNmNhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDQKKyAgICAweDEuNmEwOWRmZjJiYmUzYzk2MTZhMzU3NmM1NWU3NzMyMDdwLTEsCisgICAgLTB4MS4yMTA2Y2FwNAorICB9LAorICB7IC8vIEVudHJ5IDkwNQorICAgIDB4MS42YTBhMGQzM2Y2YWI1YWYyNjJhZDZhZDE4YWMxY2U5ZnAtMSwKKyAgICAweDEuMjEwNmNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDYKKyAgICAweDEuNmEwYTBkMzNmNmFiNWFmMjYyYWQ2YWQxOGFjMWNlOWZwLTEsCisgICAgLTB4MS4yMTA2Y2NwNAorICB9LAorICB7IC8vIEVudHJ5IDkwNworICAgIDB4MS5mZmZmZmZmZmYwNjVjYjI0MGJjYmZkZmY0OTc3ZGRmOHAtMSwKKyAgICAweDEuMmQ5N2M0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDgKKyAgICAweDEuZmZmZmZmZmZmMDY1Y2IyNDBiY2JmZGZmNDk3N2RkZjhwLTEsCisgICAgLTB4MS4yZDk3YzRwNAorICB9LAorICB7IC8vIEVudHJ5IDkwOQorICAgIDB4MS5mZmZmZmZmZmZjMzI5Mzk4OThmNTg1ZDY5NDhjZjJkMXAtMSwKKyAgICAweDEuMmQ5N2M2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTAKKyAgICAweDEuZmZmZmZmZmZmYzMyOTM5ODk4ZjU4NWQ2OTQ4Y2YyZDFwLTEsCisgICAgLTB4MS4yZDk3YzZwNAorICB9LAorICB7IC8vIEVudHJ5IDkxMQorICAgIDB4MS5mZmZmZmZmZmZmZmY1YzBkMjYzMGVlMGEyN2U4ZDZkMXAtMSwKKyAgICAweDEuMmQ5N2M4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTIKKyAgICAweDEuZmZmZmZmZmZmZmZmNWMwZDI2MzBlZTBhMjdlOGQ2ZDFwLTEsCisgICAgLTB4MS4yZDk3YzhwNAorICB9LAorICB7IC8vIEVudHJ5IDkxMworICAgIDB4MS42YTBhMzgzMWI4MWQ5NDk2NmFkOGRmNGQzNzg4MjRmOXAtMSwKKyAgICAweDEuM2EyOGMycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTQKKyAgICAweDEuNmEwYTM4MzFiODFkOTQ5NjZhZDhkZjRkMzc4ODI0ZjlwLTEsCisgICAgLTB4MS4zYTI4YzJwNAorICB9LAorICB7IC8vIEVudHJ5IDkxNQorICAgIDB4MS42YTBhMGFmMDgyYjViY2E3ZjU1NjlmNGRhNjg4M2Y2NHAtMSwKKyAgICAweDEuM2EyOGM0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTYKKyAgICAweDEuNmEwYTBhZjA4MmI1YmNhN2Y1NTY5ZjRkYTY4ODNmNjRwLTEsCisgICAgLTB4MS4zYTI4YzRwNAorICB9LAorICB7IC8vIEVudHJ5IDkxNworICAgIDB4MS42YTA5ZGRhZjQ3YTViYzhkYmRjYjZiMTM4NDQ5MDJhZXAtMSwKKyAgICAweDEuM2EyOGM2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTgKKyAgICAweDEuNmEwOWRkYWY0N2E1YmM4ZGJkY2I2YjEzODQ0OTAyYWVwLTEsCisgICAgLTB4MS4zYTI4YzZwNAorICB9LAorICB7IC8vIEVudHJ5IDkxOQorICAgIDB4MS5hM2JiMjUxZGM3ZWZhYTFlMjEzN2JiMzdlZDY2NTRkYnAtMTksCisgICAgMHgxLjQ2YjljMHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTIwCisgICAgMHgxLmEzYmIyNTFkYzdlZmFhMWUyMTM3YmIzN2VkNjY1NGRicC0xOSwKKyAgICAtMHgxLjQ2YjljMHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTIxCisgICAgMHgxLjQ3NzY0YTNiOTU2Njc1OGU1YmFhMmUzMDI5ZjFhYmJhcC0yMCwKKyAgICAweDEuNDZiOWMycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjIKKyAgICAweDEuNDc3NjRhM2I5NTY2NzU4ZTViYWEyZTMwMjlmMWFiYmFwLTIwLAorICAgIC0weDEuNDZiOWMycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjMKKyAgICAtMHgxLjcxMTM2Yjg4ZDQ2MDg0OTBmMmRkZmU5MDEwMTExMmFlcC0yMSwKKyAgICAweDEuNDZiOWM0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjQKKyAgICAtMHgxLjcxMTM2Yjg4ZDQ2MDg0OTBmMmRkZmU5MDEwMTExMmFlcC0yMSwKKyAgICAtMHgxLjQ2YjljNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTI1CisgICAgLTB4MS42YTA5YTNjYzAzYzRiYmFkMjIyMmRmZTViZTMxNzU2NXAtMSwKKyAgICAweDEuNTM0YWJlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjYKKyAgICAtMHgxLjZhMDlhM2NjMDNjNGJiYWQyMjIyZGZlNWJlMzE3NTY1cC0xLAorICAgIC0weDEuNTM0YWJlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjcKKyAgICAtMHgxLjZhMDlkMTBkNDYxMTIzMzVkMGU0M2Q3MzgzODdkZThjcC0xLAorICAgIDB4MS41MzRhYzBwNAorICB9LAorICB7IC8vIEVudHJ5IDkyOAorICAgIC0weDEuNmEwOWQxMGQ0NjExMjMzNWQwZTQzZDczODM4N2RlOGNwLTEsCisgICAgLTB4MS41MzRhYzBwNAorICB9LAorICB7IC8vIEVudHJ5IDkyOQorICAgIC0weDEuNmEwOWZlNGU4MmI1NjM3YTRhOGYzOTJjMzMwMWJlOTRwLTEsCisgICAgMHgxLjUzNGFjMnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTMwCisgICAgLTB4MS42YTA5ZmU0ZTgyYjU2MzdhNGE4ZjM5MmMzMzAxYmU5NHAtMSwKKyAgICAtMHgxLjUzNGFjMnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTMxCisgICAgLTB4MS5mZmZmZmZmZmY5MzI1YWNlNWY2ODJiYmI4YjEyMmEwOXAtMSwKKyAgICAweDEuNWZkYmJjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzIKKyAgICAtMHgxLmZmZmZmZmZmZjkzMjVhY2U1ZjY4MmJiYjhiMTIyYTA5cC0xLAorICAgIC0weDEuNWZkYmJjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzMKKyAgICAtMHgxLmZmZmZmZmZmZmZhMTQ0YWJhZWQ1YjRhYWI4ODA2MzVkcC0xLAorICAgIDB4MS41ZmRiYmVwNAorICB9LAorICB7IC8vIEVudHJ5IDkzNAorICAgIC0weDEuZmZmZmZmZmZmZmExNDRhYmFlZDViNGFhYjg4MDYzNWRwLTEsCisgICAgLTB4MS41ZmRiYmVwNAorICB9LAorICB7IC8vIEVudHJ5IDkzNQorICAgIC0weDEuZmZmZmZmZmZmZTEwMmU4OGZlNDc2MzMxZTFkZGVmYWZwLTEsCisgICAgMHgxLjVmZGJjMHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTM2CisgICAgLTB4MS5mZmZmZmZmZmZlMTAyZTg4ZmU0NzYzMzFlMWRkZWZhZnAtMSwKKyAgICAtMHgxLjVmZGJjMHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTM3CisgICAgLTB4MS42YTBhMTlkNWY2MjZhMzVlZTExMmEzNDYzOGUwNzgwOHAtMSwKKyAgICAweDEuNmM2Y2JhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzgKKyAgICAtMHgxLjZhMGExOWQ1ZjYyNmEzNWVlMTEyYTM0NjM4ZTA3ODA4cC0xLAorICAgIC0weDEuNmM2Y2JhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzkKKyAgICAtMHgxLjZhMDllYzk0YmNmMzUyMDhjY2QwMzA2ODRkNWRkZDljcC0xLAorICAgIDB4MS42YzZjYmNwNAorICB9LAorICB7IC8vIEVudHJ5IDk0MAorICAgIC0weDEuNmEwOWVjOTRiY2YzNTIwOGNjZDAzMDY4NGQ1ZGRkOWNwLTEsCisgICAgLTB4MS42YzZjYmNwNAorICB9LAorICB7IC8vIEVudHJ5IDk0MQorICAgIC0weDEuNmEwOWJmNTM3ZTE3ZDkwMDY1OWJkMmZhMjRjM2E4YzhwLTEsCisgICAgMHgxLjZjNmNiZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQyCisgICAgLTB4MS42YTA5YmY1MzdlMTdkOTAwNjU5YmQyZmEyNGMzYThjOHAtMSwKKyAgICAtMHgxLjZjNmNiZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQzCisgICAgLTB4MS5mN2ZmNTIzNjBjNjIyYjNmOTRkOWM3MjUwYmZhZDhkNHAtMTksCisgICAgMHgxLjc4ZmRiNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQ0CisgICAgLTB4MS5mN2ZmNTIzNjBjNjIyYjNmOTRkOWM3MjUwYmZhZDhkNHAtMTksCisgICAgLTB4MS43OGZkYjZwNAorICB9LAorICB7IC8vIEVudHJ5IDk0NQorICAgIC0weDEuZWZmZWE0NmMyMWJhYTNkYTdjMjY2Yzk1M2EwMTM1OThwLTIwLAorICAgIDB4MS43OGZkYjhwNAorICB9LAorICB7IC8vIEVudHJ5IDk0NgorICAgIC0weDEuZWZmZWE0NmMyMWJhYTNkYTdjMjY2Yzk1M2EwMTM1OThwLTIwLAorICAgIC0weDEuNzhmZGI4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDcKKyAgICAweDEuMDAxNWI5M2RkMGYwOTViZTFlYjBhNWI4N2ZlNWUzM2VwLTI0LAorICAgIDB4MS43OGZkYmFwNAorICB9LAorICB7IC8vIEVudHJ5IDk0OAorICAgIDB4MS4wMDE1YjkzZGQwZjA5NWJlMWViMGE1Yjg3ZmU1ZTMzZXAtMjQsCisgICAgLTB4MS43OGZkYmFwNAorICB9LAorICB7IC8vIEVudHJ5IDk0OQorICAgIDB4MS42YTA5OTRlNjhiNzg3ZWU0ZmQ2ODMwYjI4ODIyNTc0NXAtMSwKKyAgICAweDEuODU4ZWI0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTAKKyAgICAweDEuNmEwOTk0ZTY4Yjc4N2VlNGZkNjgzMGIyODgyMjU3NDVwLTEsCisgICAgLTB4MS44NThlYjRwNAorICB9LAorICB7IC8vIEVudHJ5IDk1MQorICAgIDB4MS42YTA5YzIyN2NmYTE5NGQxZmE3YWI5OTA5ZGU1MDgzY3AtMSwKKyAgICAweDEuODU4ZWI2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTIKKyAgICAweDEuNmEwOWMyMjdjZmExOTRkMWZhN2FiOTkwOWRlNTA4M2NwLTEsCisgICAgLTB4MS44NThlYjZwNAorICB9LAorICB7IC8vIEVudHJ5IDk1MworICAgIDB4MS42YTA5ZWY2OTBlMjI4M2I2NTg1MDllZDMxOTQ4MzgzOXAtMSwKKyAgICAweDEuODU4ZWI4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTQKKyAgICAweDEuNmEwOWVmNjkwZTIyODNiNjU4NTA5ZWQzMTk0ODM4MzlwLTEsCisgICAgLTB4MS44NThlYjhwNAorICB9LAorICB7IC8vIEVudHJ5IDk1NQorICAgIC0weDEuZjM5NTdiYWQ3MGUwNzQxZjFkM2Q2NzUxMjQ2Y2UyMWFwLTEsCisgICAgMHgxLmZmZmZmZXA2MgorICB9LAorICB7IC8vIEVudHJ5IDk1NgorICAgIC0weDEuZjM5NTdiYWQ3MGUwNzQxZjFkM2Q2NzUxMjQ2Y2UyMWFwLTEsCisgICAgLTB4MS5mZmZmZmVwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTcKKyAgICAweDEuODJhYTM3NWIzYzMzZTcwNjYzNzMxYmFiNGJlYjZlZDNwLTcsCisgICAgMHgxLnA2MworICB9LAorICB7IC8vIEVudHJ5IDk1OAorICAgIDB4MS44MmFhMzc1YjNjMzNlNzA2NjM3MzFiYWI0YmViNmVkM3AtNywKKyAgICAtMHgxLnA2MworICB9LAorICB7IC8vIEVudHJ5IDk1OQorICAgIDB4MS45NDVlNmM2OWE1ODBmYjdiYjI3ZDAyYzBmZTBmOGE3MXAtMiwKKyAgICAweDEuMDAwMDAycDYzCisgIH0sCisgIHsgLy8gRW50cnkgOTYwCisgICAgMHgxLjk0NWU2YzY5YTU4MGZiN2JiMjdkMDJjMGZlMGY4YTcxcC0yLAorICAgIC0weDEuMDAwMDAycDYzCisgIH0sCisgIHsgLy8gRW50cnkgOTYxCisgICAgLTB4MS5iMmQyNTVmMmJkMDQyM2UyOWUyYTU0ODcyOGYwMzRhYnAtMSwKKyAgICAweDEuZmZmZmZlcDI2CisgIH0sCisgIHsgLy8gRW50cnkgOTYyCisgICAgLTB4MS5iMmQyNTVmMmJkMDQyM2UyOWUyYTU0ODcyOGYwMzRhYnAtMSwKKyAgICAtMHgxLmZmZmZmZXAyNgorICB9LAorICB7IC8vIEVudHJ5IDk2MworICAgIDB4MS40YWI2NTExYTdkMzlhZDNjYzg4ZGVkMWU3NzVjYTE0N3AtMSwKKyAgICAweDEucDI3CisgIH0sCisgIHsgLy8gRW50cnkgOTY0CisgICAgMHgxLjRhYjY1MTFhN2QzOWFkM2NjODhkZWQxZTc3NWNhMTQ3cC0xLAorICAgIC0weDEucDI3CisgIH0sCisgIHsgLy8gRW50cnkgOTY1CisgICAgLTB4MS5hZDNkODBjODJmNDQ1MmIwNzY1ODFkZTI0NjQ4NDM1YnAtMSwKKyAgICAweDEuMDAwMDAycDI3CisgIH0sCisgIHsgLy8gRW50cnkgOTY2CisgICAgLTB4MS5hZDNkODBjODJmNDQ1MmIwNzY1ODFkZTI0NjQ4NDM1YnAtMSwKKyAgICAtMHgxLjAwMDAwMnAyNworICB9LAorICB7IC8vIEVudHJ5IDk2NworICAgIC0weDEuNDUzMmMzNzIxZWQ0MzQzYWQ4OGVlYTg5MDhhOTg4Y2JwLTIsCisgICAgMHgxLmZmZmZmZXAyMworICB9LAorICB7IC8vIEVudHJ5IDk2OAorICAgIC0weDEuNDUzMmMzNzIxZWQ0MzQzYWQ4OGVlYTg5MDhhOTg4Y2JwLTIsCisgICAgLTB4MS5mZmZmZmVwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjkKKyAgICAweDEuNDBhZDY3ZjNmMGM5YTE0Mzk2M2M5Yzk2ZGJjZTNmOGFwLTEsCisgICAgMHgxLnAyNAorICB9LAorICB7IC8vIEVudHJ5IDk3MAorICAgIDB4MS40MGFkNjdmM2YwYzlhMTQzOTYzYzljOTZkYmNlM2Y4YXAtMSwKKyAgICAtMHgxLnAyNAorICB9LAorICB7IC8vIEVudHJ5IDk3MQorICAgIDB4MS5jYWY4NTM3YzNlNDQyY2E4YWNhODZjMTU2NzczODUzYXAtMiwKKyAgICAweDEuMDAwMDAycDI0CisgIH0sCisgIHsgLy8gRW50cnkgOTcyCisgICAgMHgxLmNhZjg1MzdjM2U0NDJjYThhY2E4NmMxNTY3NzM4NTNhcC0yLAorICAgIC0weDEuMDAwMDAycDI0CisgIH0sCisgIHsgLy8gRW50cnkgOTczCisgICAgLTB4MS40ZWFhNjY3YmEwYjkwZGZiMDVhYjNkOWMyNDdjZGVlN3AtMSwKKyAgICAweDEuZmZmZmZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzQKKyAgICAtMHgxLjRlYWE2NjdiYTBiOTBkZmIwNWFiM2Q5YzI0N2NkZWU3cC0xLAorICAgIC0weDEuZmZmZmZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzUKKyAgICAtMHgxLjRlYWE2MDZkYjI0YzBjNDY2ZGExYzJkYzdiYWEyYjMycC0xLAorICAgIDB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDk3NgorICAgIC0weDEuNGVhYTYwNmRiMjRjMGM0NjZkYTFjMmRjN2JhYTJiMzJwLTEsCisgICAgLTB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDk3NworICAgIC0weDEuNGVhYTU0NTFkNTMzNDhlYjg5ZGM0NzhkNGQxMWJlMDJwLTEsCisgICAgMHgxLjAwMDAwMnAyCisgIH0sCisgIHsgLy8gRW50cnkgOTc4CisgICAgLTB4MS40ZWFhNTQ1MWQ1MzM0OGViODlkYzQ3OGQ0ZDExYmUwMnAtMSwKKyAgICAtMHgxLjAwMDAwMnAyCisgIH0sCisgIHsgLy8gRW50cnkgOTc5CisgICAgLTB4MS5hYTIyNWUyZWY5NjI0MTkxNWI2ZmQyMTc1MjI4MTRmNXAtMiwKKyAgICAweDEuZmZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODAKKyAgICAtMHgxLmFhMjI1ZTJlZjk2MjQxOTE1YjZmZDIxNzUyMjgxNGY1cC0yLAorICAgIC0weDEuZmZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODEKKyAgICAtMHgxLmFhMjI2NTc1MzcyMDRhNDMzMmY4YWNiYjcyYjBkNzY4cC0yLAorICAgIDB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDk4MgorICAgIC0weDEuYWEyMjY1NzUzNzIwNGE0MzMyZjhhY2JiNzJiMGQ3NjhwLTIsCisgICAgLTB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDk4MworICAgIC0weDEuYWEyMjc0MDFiMjg4NjIwYTAzNzJkNWE5NjA4NDkxNWRwLTIsCisgICAgMHgxLjAwMDAwMnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTg0CisgICAgLTB4MS5hYTIyNzQwMWIyODg2MjBhMDM3MmQ1YTk2MDg0OTE1ZHAtMiwKKyAgICAtMHgxLjAwMDAwMnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTg1CisgICAgMHgxLjE0YTI4MmFhMjViMTFmNjMxMmE3YTY1MTgwZTdjM2Q0cC0xLAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODYKKyAgICAweDEuMTRhMjgyYWEyNWIxMWY2MzEyYTdhNjUxODBlN2MzZDRwLTEsCisgICAgLTB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODcKKyAgICAweDEuMTRhMjgwZmI1MDY4YjkyMzg0OGNkYjJlZDBlMzdhNTNwLTEsCisgICAgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgOTg4CisgICAgMHgxLjE0YTI4MGZiNTA2OGI5MjM4NDhjZGIyZWQwZTM3YTUzcC0xLAorICAgIC0weDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODkKKyAgICAweDEuMTRhMjdkOWRhNWQ0YWViY2U3MTQyOGY5MDU3YjA4ZGFwLTEsCisgICAgMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgOTkwCisgICAgMHgxLjE0YTI3ZDlkYTVkNGFlYmNlNzE0MjhmOTA1N2IwOGRhcC0xLAorICAgIC0weDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTEKKyAgICAweDEuYzE1MjgwZTA3Mzc2OTJkZDQzNjkwOGZkYzhlNmUyZTFwLTEsCisgICAgMHgxLmZmZmZmZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDk5MgorICAgIDB4MS5jMTUyODBlMDczNzY5MmRkNDM2OTA4ZmRjOGU2ZTJlMXAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDk5MworICAgIDB4MS5jMTUyODA2NWI3ZDRmOWRiN2JiYjNiNDVmNWY1YjMwYXAtMSwKKyAgICAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTk0CisgICAgMHgxLmMxNTI4MDY1YjdkNGY5ZGI3YmJiM2I0NWY1ZjViMzBhcC0xLAorICAgIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTk1CisgICAgMHgxLmMxNTI3ZjcwNDA5MDc2ZGEwYzMyMDRkZjFlMDk5YTgzcC0xLAorICAgIDB4MS4wMDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTYKKyAgICAweDEuYzE1MjdmNzA0MDkwNzZkYTBjMzIwNGRmMWUwOTlhODNwLTEsCisgICAgLTB4MS4wMDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTcKKyAgICAweDEuZjAxNTRhMTc4OWQ4ZGNjMTcyY2QyMDkyZDA1ZjYzOTRwLTEsCisgICAgMHgxLmZmZmZmZXAtMworICB9LAorICB7IC8vIEVudHJ5IDk5OAorICAgIDB4MS5mMDE1NGExNzg5ZDhkY2MxNzJjZDIwOTJkMDVmNjM5NHAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMworICB9LAorICB7IC8vIEVudHJ5IDk5OQorICAgIDB4MS5mMDE1NDlmN2RlZWExNzRmMDdhNjc5NzJiZjI5ZjE0OHAtMSwKKyAgICAweDEucC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTAwMAorICAgIDB4MS5mMDE1NDlmN2RlZWExNzRmMDdhNjc5NzJiZjI5ZjE0OHAtMSwKKyAgICAtMHgxLnAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMDEKKyAgICAweDEuZjAxNTQ5Yjg4OTBjMmY2NjMzN2NhYzE1YTcyMzdjOGVwLTEsCisgICAgMHgxLjAwMDAwMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMDIKKyAgICAweDEuZjAxNTQ5Yjg4OTBjMmY2NjMzN2NhYzE1YTcyMzdjOGVwLTEsCisgICAgLTB4MS4wMDAwMDJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAzCisgICAgMHgxLmZjMDE1NTJmZDA2OGVlODNmNWI3NDJjMDUyNDVlOGIycC0xLAorICAgIDB4MS5mZmZmZmVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA0CisgICAgMHgxLmZjMDE1NTJmZDA2OGVlODNmNWI3NDJjMDUyNDVlOGIycC0xLAorICAgIC0weDEuZmZmZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTAwNQorICAgIDB4MS5mYzAxNTUyN2Q1YmQzNmRhM2NkNDI1M2JlZGUzMTljYXAtMSwKKyAgICAweDEucC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTAwNgorICAgIDB4MS5mYzAxNTUyN2Q1YmQzNmRhM2NkNDI1M2JlZGUzMTljYXAtMSwKKyAgICAtMHgxLnAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMDcKKyAgICAweDEuZmMwMTU1MTdlMDY1YWZiNmJiMTAyYzE4ZjU5MTk4MjBwLTEsCisgICAgMHgxLjAwMDAwMnAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMDgKKyAgICAweDEuZmMwMTU1MTdlMDY1YWZiNmJiMTAyYzE4ZjU5MTk4MjBwLTEsCisgICAgLTB4MS4wMDAwMDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA5CisgICAgMHgxLmZmMDAxNTU2OWVmN2UyYjk2MzAxZTZmNzUyYzAxOWQ0cC0xLAorICAgIDB4MS5mZmZmZmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEwCisgICAgMHgxLmZmMDAxNTU2OWVmN2UyYjk2MzAxZTZmNzUyYzAxOWQ0cC0xLAorICAgIC0weDEuZmZmZmZlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTAxMQorICAgIDB4MS5mZjAwMTU1NDlmNGQzNGNhMGUxZWU2NTA5YmM0MmI3MXAtMSwKKyAgICAweDEucC00CisgIH0sCisgIHsgLy8gRW50cnkgMTAxMgorICAgIDB4MS5mZjAwMTU1NDlmNGQzNGNhMGUxZWU2NTA5YmM0MmI3MXAtMSwKKyAgICAtMHgxLnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwMTMKKyAgICAweDEuZmYwMDE1NTA5ZmY3ZDJlZTY0MThlOTI0ZjBkZTVlOTdwLTEsCisgICAgMHgxLjAwMDAwMnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwMTQKKyAgICAweDEuZmYwMDE1NTA5ZmY3ZDJlZTY0MThlOTI0ZjBkZTVlOTdwLTEsCisgICAgLTB4MS4wMDAwMDJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE1CisgICAgMHgxLmZmYzAwMTU1ZDI3N2Q1OGU3MjdjZDk1YzQzZjc1OWNmcC0xLAorICAgIDB4MS5mZmZmZmVwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE2CisgICAgMHgxLmZmYzAwMTU1ZDI3N2Q1OGU3MjdjZDk1YzQzZjc1OWNmcC0xLAorICAgIC0weDEuZmZmZmZlcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTAxNworICAgIDB4MS5mZmMwMDE1NTUyN2QyYjEyYWVkYjQ5ZDkyOTI4ZGY3MnAtMSwKKyAgICAweDEucC01CisgIH0sCisgIHsgLy8gRW50cnkgMTAxOAorICAgIDB4MS5mZmMwMDE1NTUyN2QyYjEyYWVkYjQ5ZDkyOTI4ZGY3MnAtMSwKKyAgICAtMHgxLnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwMTkKKyAgICAweDEuZmZjMDAxNTQ1Mjg3ZDQ5YjU3OTcyYWY1MTQ1NjYzYTBwLTEsCisgICAgMHgxLjAwMDAwMnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwMjAKKyAgICAweDEuZmZjMDAxNTQ1Mjg3ZDQ5YjU3OTcyYWY1MTQ1NjYzYTBwLTEsCisgICAgLTB4MS4wMDAwMDJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIxCisgICAgMHgxLmZmZjAwMDE1NzU0OTlmM2Q3OTk2ZTJkYTExY2RlYjI0cC0xLAorICAgIDB4MS5mZmZmZmVwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIyCisgICAgMHgxLmZmZjAwMDE1NzU0OTlmM2Q3OTk2ZTJkYTExY2RlYjI0cC0xLAorICAgIC0weDEuZmZmZmZlcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTAyMworICAgIDB4MS5mZmYwMDAxNTU1NDlmNGEyOGEyODBlOTdiY2Q1OWM4YXAtMSwKKyAgICAweDEucC02CisgIH0sCisgIHsgLy8gRW50cnkgMTAyNAorICAgIDB4MS5mZmYwMDAxNTU1NDlmNGEyOGEyODBlOTdiY2Q1OWM4YXAtMSwKKyAgICAtMHgxLnAtNgorICB9LAorICB7IC8vIEVudHJ5IDEwMjUKKyAgICAweDEuZmZmMDAwMTUxNTRhOWYwY2FlNGE2MjE1MTUwMWNkMGFwLTEsCisgICAgMHgxLjAwMDAwMnAtNgorICB9LAorICB7IC8vIEVudHJ5IDEwMjYKKyAgICAweDEuZmZmMDAwMTUxNTRhOWYwY2FlNGE2MjE1MTUwMWNkMGFwLTEsCisgICAgLTB4MS4wMDAwMDJwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI3CisgICAgMHgxLmZmZmZmZmYwMDAwMDIwMTU1NTQ0ZmZmNDlmY2EzOGU2cC0xLAorICAgIDB4MS5mZmZmZmVwLTE1CisgIH0sCisgIHsgLy8gRW50cnkgMTAyOAorICAgIDB4MS5mZmZmZmZmMDAwMDAyMDE1NTU0NGZmZjQ5ZmNhMzhlNnAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI5CisgICAgMHgxLmZmZmZmZmYwMDAwMDAwMTU1NTU1NTU0OWY0OWY0OWY3cC0xLAorICAgIDB4MS5wLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTAzMAorICAgIDB4MS5mZmZmZmZmMDAwMDAwMDE1NTU1NTU1NDlmNDlmNDlmN3AtMSwKKyAgICAtMHgxLnAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMxCisgICAgMHgxLmZmZmZmZmVmZmZmZmMwMTU1NTE1ZmZmNGExNDk2YzFjcC0xLAorICAgIDB4MS4wMDAwMDJwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTAzMgorICAgIDB4MS5mZmZmZmZlZmZmZmZjMDE1NTUxNWZmZjRhMTQ5NmMxY3AtMSwKKyAgICAtMHgxLjAwMDAwMnAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMzCisgICAgMHgxLmZmZmZmZmZmZmZmZmZjMDAwMDA3ZmZmZmZjMDE1NTU1cC0xLAorICAgIDB4MS5mZmZmZmVwLTI4CisgIH0sCisgIHsgLy8gRW50cnkgMTAzNAorICAgIDB4MS5mZmZmZmZmZmZmZmZmYzAwMDAwN2ZmZmZmYzAxNTU1NXAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM1CisgICAgMHgxLmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDE1NTU1cC0xLAorICAgIDB4MS5wLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTAzNgorICAgIDB4MS5mZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDAxNTU1NXAtMSwKKyAgICAtMHgxLnAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM3CisgICAgMHgxLmZmZmZmZmZmZmZmZmZiZmZmZmVmZmZmZmYwMDE1NTU1cC0xLAorICAgIDB4MS4wMDAwMDJwLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTAzOAorICAgIDB4MS5mZmZmZmZmZmZmZmZmYmZmZmZlZmZmZmZmMDAxNTU1NXAtMSwKKyAgICAtMHgxLjAwMDAwMnAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM5CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZjAwMDAwMWZmZmZmZjAwMDE1cC0xLAorICAgIDB4MS5mZmZmZmVwLTMxCisgIH0sCisgIHsgLy8gRW50cnkgMTA0MAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmYwMDAwMDFmZmZmZmYwMDAxNXAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQxCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDE1cC0xLAorICAgIDB4MS5wLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTA0MgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAxNXAtMSwKKyAgICAtMHgxLnAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQzCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZWZmZmZmYmZmZmZmYzAwMDE1cC0xLAorICAgIDB4MS4wMDAwMDJwLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTA0NAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmVmZmZmZmJmZmZmZmMwMDAxNXAtMSwKKyAgICAtMHgxLjAwMDAwMnAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ1CisgICAgMHgxLmI0YmYyYzc5YmRmY2RhYTUzZWQ2YzAxM2Y2NWUwOTYzcC0xLAorICAgIC0weDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNDYKKyAgICAweDEuYjRiZjJjNzliZGZjZGFhNTNlZDZjMDEzZjY1ZTA5NjNwLTEsCisgICAgMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ3CisgICAgMHgxLmI0YmYyYzc5YmRmY2RhYTUzZWQ2YzAxM2Y2NWUwOTYzcC0xLAorICAgIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA0OAorICAgIDB4MS5iNGJmMmM3OWJkZmNkYWE1M2VkNmMwMTNmNjVlMDk2M3AtMSwKKyAgICAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ5CisgICAgMHgxLmI0YmYyYzc5YmRmY2RhYTUzZWQ2YzAxM2Y2NWUwOTYzcC0xLAorICAgIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA1MAorICAgIDB4MS5iNGJmMmM3OWJkZmNkYWE1M2VkNmMwMTNmNjVlMDk2M3AtMSwKKyAgICAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUxCisgICAgLTB4MS44ODc3YTI5ZTNkN2I2ZGVmY2I1MjhlODZmNGMzZTA5YXAtMSwKKyAgICAweDEuZmZmZmZjcDEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNTIKKyAgICAtMHgxLjg4NzdhMjllM2Q3YjZkZWZjYjUyOGU4NmY0YzNlMDlhcC0xLAorICAgIC0weDEuZmZmZmZjcDEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNTMKKyAgICAtMHgxLmZmZmZmZmZmZmZmZGQ5NDg0OTI3MWQwOGVlY2Y1NGExcC0xLAorICAgIDB4MS45MjFmYjZwMQorICB9LAorICB7IC8vIEVudHJ5IDEwNTQKKyAgICAtMHgxLmZmZmZmZmZmZmZmZGQ5NDg0OTI3MWQwOGVlY2Y1NGExcC0xLAorICAgIC0weDEuOTIxZmI2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU1CisgICAgLTB4MS43NzdhNWNmNzJjZWNjNGNkZTNhMzFlN2Q1YTAyNjE0MnAtMjUsCisgICAgMHgxLjkyMWZiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA1NgorICAgIC0weDEuNzc3YTVjZjcyY2VjYzRjZGUzYTMxZTdkNWEwMjYxNDJwLTI1LAorICAgIC0weDEuOTIxZmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU3CisgICAgMHgxLjE0YTI3ZDlkYTVkNGFlYmNlNzE0MjhmOTA1N2IwOGRhcC0xLAorICAgIDB4MS4wMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDEwNTgKKyAgICAweDEuMTRhMjdkOWRhNWQ0YWViY2U3MTQyOGY5MDU3YjA4ZGFwLTEsCisgICAgLTB4MS4wMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDEwNTkKKyAgICAweDEuMTRhMjgwZmI1MDY4YjkyMzg0OGNkYjJlZDBlMzdhNTNwLTEsCisgICAgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA2MAorICAgIDB4MS4xNGEyODBmYjUwNjhiOTIzODQ4Y2RiMmVkMGUzN2E1M3AtMSwKKyAgICAtMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA2MQorICAgIDB4MS4xNGEyODJhYTI1YjExZjYzMTJhN2E2NTE4MGU3YzNkNHAtMSwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA2MgorICAgIDB4MS4xNGEyODJhYTI1YjExZjYzMTJhN2E2NTE4MGU3YzNkNHAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNjMKKyAgICAweDEuNmEwOWU1ZTMzMzU5ODNlNWFjOTJlNzMzZTNmMjRiNDJwLTEsCisgICAgMHgxLjkyMWZiNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNjQKKyAgICAweDEuNmEwOWU1ZTMzMzU5ODNlNWFjOTJlNzMzZTNmMjRiNDJwLTEsCisgICAgLTB4MS45MjFmYjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY1CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wMDAwMDJwLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDEwNjYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wMDAwMDJwLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDEwNjcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMTA2OAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMTA2OQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcwCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcxCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5mZmZmZjhwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNzIKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5mZmZmZjhwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNzMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTQ4CisgIH0sCisgIHsgLy8gRW50cnkgMTA3NAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLnAtMTQ4CisgIH0sCisgIHsgLy8gRW50cnkgMTA3NQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc2CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc3CisgICAgMHgxLnAwLAorICAgIDAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc4CisgICAgMHgxLnAwLAorICAgIC0wLjBmCisgIH0sCit9OworI2VuZGlmIC8vIF9fQklPTklDX18KKworVEVTVChtYXRoX2Nvc2YsIGNvc2ZfaW50ZWwpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGdfY29zZl9pbnRlbF9kYXRhKS9zaXplb2YoY29zZl9pbnRlbF9kYXRhX3QpOyBpKyspIHsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoZ19jb3NmX2ludGVsX2RhdGFbaV0uZXhwZWN0ZWQsIGNvc2YoZ19jb3NmX2ludGVsX2RhdGFbaV0uY2FsbF9kYXRhKSkgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKKyAgfQorI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWF0aF9leHBfdGVzdC5jcHAgYi90ZXN0cy9tYXRoX2V4cF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWIyNTg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbWF0aF9leHBfdGVzdC5jcHAKQEAgLTAsMCArMSwxOTc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCit0eXBlZGVmIHN0cnVjdCB7CisgIGRvdWJsZSBleHBlY3RlZDsKKyAgZG91YmxlIGNhbGxfZGF0YTsKK30gZXhwX2ludGVsX2RhdGFfdDsKKworc3RhdGljIGV4cF9pbnRlbF9kYXRhX3QgZ19leHBfaW50ZWxfZGF0YVtdID0geworICB7IC8vIEVudHJ5IDAKKyAgICAweDEuMDAwMDAwMDAwMDAwMWZmZmZmZmZmZmZmZmZmZmZmZmZwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtNTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxCisgICAgMHgxLjAwMDAwMDAwMDAxMWZmZmZmZmZmZmZmZmZmZmZmZmZmcDAsCisgICAgMHgxLjFmZmZmZmZmZmZmNWVwLTQ0CisgIH0sCisgIHsgLy8gRW50cnkgMgorICAgIDB4MS4wMDAwMDAwMDAyMDdmZmZmZmZmZmZmZmZmZmZmZmQzNHAwLAorICAgIDB4MS4wM2ZmZmZmZmZlZjdmcC0zOQorICB9LAorICB7IC8vIEVudHJ5IDMKKyAgICAweDEuMDAwMDAwMDBjMWI1OTgwMDAwMDAwMDAwMDAyN2E3ZDVwMCwKKyAgICAweDEuODM2YjJmZmY2ZDZjYnAtMzMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0CisgICAgMHgxLjAwMDAwMDAzM2QzOTc4MDAwMDAwMDAwMDAwMDJhNTFkcDAsCisgICAgMHgxLjllOWNiYmZkNjA4MGJwLTMxCisgIH0sCisgIHsgLy8gRW50cnkgNQorICAgIDB4MS4wMDNhZjZjMzdjMWQzMDAwMDAwMDAwMDAwMDA5NDQ2ZXAwLAorICAgIDB4MS5kNzdmZDEzZDI3ZmZmcC0xMQorICB9LAorICB7IC8vIEVudHJ5IDYKKyAgICAweDEuMDE2YjRkZjMyOTlkNzdmZmZmZmZmZmZmZmZlODNlMTBwMCwKKyAgICAweDEuNmE0ZDFhZjljYzk4OXAtOAorICB9LAorICB7IC8vIEVudHJ5IDcKKyAgICAweDEuMGNhNGE0MTY2M2ZlMDdmZmZmZmZmZmZmZmZkYWIyMzVwMCwKKyAgICAweDEuOGFlODIzODUwMjMwYnAtNQorICB9LAorICB7IC8vIEVudHJ5IDgKKyAgICAweDEuMTUzOGVhMThhNDU4NTAwMDAwMDAwMDAwMDAzOWUwNTRwMCwKKyAgICAweDEuNDYzNzBkOTE1OTkxYnAtNAorICB9LAorICB7IC8vIEVudHJ5IDkKKyAgICAweDEuNDc0MDhjYjk1ODNjZTAwMDAwMDAwMDAwMDAyYzg5NmZwMCwKKyAgICAweDEuZjZlNGMzY2VkN2M3MnAtMworICB9LAorICB7IC8vIEVudHJ5IDEwCisgICAgMHgxLjI3YzJlNGJjMWVlNzA3ZmZmZmZmZmZmZmZmZWIwYzJkcDEsCisgICAgMHgxLmFjY2ZiZTQ2YjRlZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMQorICAgIDB4MS41NTdkNGFjZDdlNTU2ODAwMDAwMDAwMDAwMDIwMmM4NnAyLAorICAgIDB4MS5hY2E3YWU4ZGE1YTdicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMgorICAgIDB4MS45MWE4ZGZmNTQwZmY3MDAwMDAwMDAwMDAwMDJmMWUzM3AyLAorICAgIDB4MS5kNjMzNmE4ODA3N2FhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMworICAgIDB4MS44ZWRlNDkyZDk2MDcxZmZmZmZmZmZmZmZmZjBhZWNkMnAzLAorICAgIDB4MS40MmVlM2M3ZGM0OTQ2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNAorICAgIDB4MS5hYzUwYjQwOWM4YWVlMDAwMDAwMDAwMDAwMDAyMmNlM3A4LAorICAgIDB4MS44M2Q0YmNkZWJiM2Y0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNQorICAgIDB4MS5mM2U1NThjZjRkZTU0MDAwMDAwMDAwMDAwMDFmNTgwOHAtMjMsCisgICAgLTB4MS5lOGJkYmZjZDkxNDRlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNgorICAgIDB4MS45NTFjNmRjNWQyNGUyN2ZmZmZmZmZmZmZmZmI2ZTBjM3AtOSwKKyAgICAtMHgxLjcxZTBiODY5YjVlNzlwMgorICB9LAorICB7IC8vIEVudHJ5IDE3CisgICAgMHgxLjEwNjRiMmMxMDNkZGE4MDAwMDAwMDAwMDAwM2ViNWQ3cC0zLAorICAgIC0weDEuMDIzOTNkNTk3Njc2OXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTgKKyAgICAweDEuM2VmMWU5YjNhODFjN2ZmZmZmZmZmZmZmZmZjMzE1cC0yLAorICAgIC0weDEuMmE5Y2FkOTk5ODI2MnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTkKKyAgICAweDEuNTM0ZDRkZTg3MDcxMzAwMDAwMDAwMDAwMDAzYzZmYjdwLTMsCisgICAgLTB4MS5jYzM3ZWY3ZGU3NTAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMAorICAgIDB4MS4yMjE3MTQ3Yjg1ZWE5ODAwMDAwMDAwMDAwMDc3NDVhM3AtMSwKKyAgICAtMHgxLjIyZTI0ZmEzZDVjZjlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMQorICAgIDB4MS45NDAzZmQwZWU1MWM4MDAwMDAwMDAwMDAwMDc3MjBmMXAtMiwKKyAgICAtMHgxLmRjMmI1ZGYxZjdkM2RwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMgorICAgIDB4MS5iYWRlZDMwY2JmMWMzZmZmZmZmZmZmZmZmZmZiZDkwNHAtMSwKKyAgICAtMHgxLjI5MGVhMDllMzY0NzlwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMworICAgIDB4MS5mZmU1ZDBiYjdlYWJmMDAwMDAwMDAwMDAwMDAzMDMyMHAtMSwKKyAgICAtMHgxLmEyZmVmZWZkNTgwZGZwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMjQKKyAgICAweDEuZmZmZmZmODRiMzljNGZmZmZmZmZmZmZmZmZmZjE3ZjRwLTEsCisgICAgLTB4MS5lZDMxOGVmYjYyN2VhcC0yNworICB9LAorICB7IC8vIEVudHJ5IDI1CisgICAgMHgxLmZmZmZmZmZhZDBhZTY4MDAwMDAwMDAwMDAwMDlmMWE4cC0xLAorICAgIC0weDEuNGJkNDY2MDFhZTFlZnAtMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNgorICAgIDB4MS5mZmZmZmZmZmZmNzAwMDAwMDAwMDAwMDAwMDAwMDAwM3AtMSwKKyAgICAtMHgxLjIwMDAwMDAwMDAyODhwLTQyCisgIH0sCisgIHsgLy8gRW50cnkgMjcKKyAgICAweDEuZmZmZmZmZmZmZmZkcC0xLAorICAgIC0weDEuODAwMDAwMDAwMDAxMnAtNDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOAorICAgIDB4MS5mZmZmZmZmZmZmZmZjMHAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTUxCisgIH0sCisgIHsgLy8gRW50cnkgMjkKKyAgICAweDEuMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMAorICAgIDB4MS4wMDAwMDAwMDAwMDFmZmZmZmZmZmZmZmZmZmZmZmZmZnAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmUwcC00OAorICB9LAorICB7IC8vIEVudHJ5IDMxCisgICAgMHgxLjAwMDAwMDAxN2ZmZTgwMDAwMDAwMDAwMDAwMDM1ZmZkcDAsCisgICAgMHgxLjdmZmU3ZmZlZTAwMjRwLTMyCisgIH0sCisgIHsgLy8gRW50cnkgMzIKKyAgICAweDEuMDAwMDAwMDE4MDAxN2ZmZmZmZmZmZmZmZmZmYzlmZmRwMCwKKyAgICAweDEuODAwMTdmZmVkZmZkY3AtMzIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMworICAgIDB4MS4wMDAwMDA3NWU5ZjY0MDAwMDAwMDAwMDAwMDBiMWU4MHAwLAorICAgIDB4MS5kN2E3ZDg5MzYwOWU1cC0yNgorICB9LAorICB7IC8vIEVudHJ5IDM0CisgICAgMHgxLjAwMDZlODM3MzZmOGM4MDAwMDAwMDAwMDAwMGFhMGFmcDAsCisgICAgMHgxLmJhMDdkNzMyNTBkZTdwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMzUKKyAgICAweDEuZGU3Y2Q2NzUxMDI5YTAwMDAwMDAwMDAwMDBlOGJiMmZwMTYsCisgICAgMHgxLjc2ZTdlNWQ3YjZlYWNwMworICB9LAorICB7IC8vIEVudHJ5IDM2CisgICAgMHgxLjFkNzE5NjVmNTE2YWQ4MDAwMDAwMDAwMDAwOWY3ZTk3cDE5LAorICAgIDB4MS5hOGVhZDA1OGJjNmI4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNworICAgIDB4MS5hOGMwMmU5NzRjMzE0ZmZmZmZmZmZmZmZmZmUyMWYwM3AyNSwKKyAgICAweDEuMWQ1YzJkYWViZTM2N3A0CisgIH0sCisgIHsgLy8gRW50cnkgMzgKKyAgICAweDEuYjg5MGNhODYzN2FlMWZmZmZmZmZmZmZmZmZlNDIxNjFwNDAsCisgICAgMHgxLmM0NGNlMGQ3MTZhMWFwNAorICB9LAorICB7IC8vIEVudHJ5IDM5CisgICAgMHgxLmYwM2Y1NmE4OGI1ZDc4MWM5MDVmNmI1MWM3NmFlOTgxcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtNQorICB9LAorICB7IC8vIEVudHJ5IDQwCisgICAgMHgxLmZmMDAzZmY1NTZhYTg3ZWJiMDZlMGViNTcyODc1NjdmcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwYXAtOQorICB9LAorICB7IC8vIEVudHJ5IDQxCisgICAgMHgxLjhlYmVmOWVhYzgxZmM4MDAxYTNkYmQ4ODI0OGVmZTEzcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAyNXAtMgorICB9LAorICB7IC8vIEVudHJ5IDQyCisgICAgMHgxLmZjMDNmZDU2YTQ2OWI4MDAwMDhiY2RmZTAxOGRiYzc0cC0xLAorICAgIC0weDEuMDAwMDAwMDE3MTA1MXAtNworICB9LAorICB7IC8vIEVudHJ5IDQzCisgICAgMHgxLjc4YjU2MTJkYmVlMDEwMDA4ZDNiYzA3MzVjODBmN2E4cC0yLAorICAgIC0weDEuMDAwMDAxOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQKKyAgICAweDEuOTY5Yzg3MGVhOWY1YTgwMWRkYzFmZjA4YTAwOGRiMDlwLTkzLAorICAgIC0weDEuMDAwMDAxZTNlcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NQorICAgIDB4MS43OGFmODY3YmM1MTFkMzIxY2Q0NTRkYmRkYWY4MDZiY3AtMiwKKyAgICAtMHgxLjAwMDNmYzBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ2CisgICAgMHgxLmZmZmZmZmZmZmVmZmY4MDAwMDAwMDAwNDAwMTAwMDE1cC0xLAorICAgIC0weDEuMDAwODAwMDAwMDRwLTQxCisgIH0sCisgIHsgLy8gRW50cnkgNDcKKyAgICAweDEuNzg5MjE0MDkzYzgxZDNiNjVmYWM2NTlmYjNmYzgyNDlwLTIsCisgICAgLTB4MS4wMDE4MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDgKKyAgICAweDEuOGUyOThlNTJmY2NlODgwMTRhZDk1YzRmM2JkODg3NjVwLTEsCisgICAgLTB4MS4wMThwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OQorICAgIDB4MS5hYTZmZmIwYmE1MTlmODAxZjljM2UxNDZhMTVkYzAyY3AtMjQsCisgICAgLTB4MS4wMjAxMHA0CisgIH0sCisgIHsgLy8gRW50cnkgNTAKKyAgICAweDEuZGQ3YTQ2YjhkODVkNjdkNjczNTkzMzcxMDljMjUxNjhwLTM3NiwKKyAgICAtMHgxLjA0MHA4CisgIH0sCisgIHsgLy8gRW50cnkgNTEKKyAgICAweDEuMzNlOTZjYTNiY2YzZTgwMWY5YjNmNjEyNmZjNjA2OTlwLTEsCisgICAgLTB4MS4wNDViOTQ4NzI0MTMwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTIKKyAgICAweDEuZWYyZjY1MmRjMjYwNTdmZmZjOThhYTU0ZDRjMzNjMTZwLTEsCisgICAgLTB4MS4xMThlMDVjZmEzZTgwcC01CisgIH0sCisgIHsgLy8gRW50cnkgNTMKKyAgICAweDEuYTVkMmNlOTc3YmJlMjgwNDhiMzE2OTI3Zjk3MGMyMDFwLTcsCisgICAgLTB4MS4xNjkxNTZlMTdiOWI5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NAorICAgIDB4MS5hMDIwN2NmNDE5MGY3MDA0NTIyODJiMDRmYTM5MDQwN3AtNywKKyAgICAtMHgxLjE3NzAxYjNiZjA1MDJwMgorICB9LAorICB7IC8vIEVudHJ5IDU1CisgICAgMHgxLmZiOTdlMWZmOGNiYmE3YWRmMTZmM2ZiZDY4NzhmNTYwcC0xLAorICAgIC0weDEuMWI0cC03CisgIH0sCisgIHsgLy8gRW50cnkgNTYKKyAgICAweDEuYmNmZjA5YWUzMGM0NjgwNGE2ZmFmZDU1MDc2NmVlZDJwLTEsCisgICAgLTB4MS4xZjRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NworICAgIDB4MS5mZWU3MGNmNWU4NmVmNGU1NGQwYjFmYTI3MDFhMzQ2ZnAtODMzLAorICAgIC0weDEuMjA1OWFkNDJjM2NmN3A5CisgIH0sCisgIHsgLy8gRW50cnkgNTgKKyAgICAweDEuN2NjZDNmMzM0MDc0NTgwMTE0NzBiM2Y2NzE5N2E5YzhwLTEsCisgICAgLTB4MS4yZjI2OWQyY2EzOGQycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTkKKyAgICAweDEuMDljZGIzNmU5NzdiYzdmZmZmZTZkNGRkYmIxOGQ1NTNwLTE0LAorICAgIC0weDEuMzU1M2NmMTgyOGIwYnAzCisgIH0sCisgIHsgLy8gRW50cnkgNjAKKyAgICAweDEuZjlkYzVjZDU0NmQ5YjgwMGRjM2Q5NTUxOWRjNjdlZThwLTQ0OSwKKyAgICAtMHgxLjM2OGFjMDgzMTI4ZmNwOAorICB9LAorICB7IC8vIEVudHJ5IDYxCisgICAgMHgxLmYxYzUzYzkwN2Y2ZjU3NmU2MmU0MDEzMTViYWZjNjllcC0xNSwKKyAgICAtMHgxLjM3NmU4ZjY3OWFlMTZwMworICB9LAorICB7IC8vIEVudHJ5IDYyCisgICAgMHgxLmYyNDU5NTk1NGU2NjE4MDI4OTY1YTlkNjdlZGVhZjdicC04LAorICAgIC0weDEuMzg0NGY2NzQ5NWY3ZHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjMKKyAgICAweDEuZmI1NjUyMTI5MGEyMjI1MjdkMWQzYzM2MzgyNjVmNDZwLTkwNSwKKyAgICAtMHgxLjM5NGU5ZTFiMDg5ZDdwOQorICB9LAorICB7IC8vIEVudHJ5IDY0CisgICAgMHgxLmRjMTY1OGZmNmUwNzA3ZmFmZDJmZDgzMDZjNGIxODk3cC0xMTQsCisgICAgLTB4MS4zOTk3ZWE1MWU1MjcxcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NQorICAgIDB4MS5lYzhiM2MwOTBmOGI5NzcxNmEzZDM4ZGU0NmQ2OGExZXAtMSwKKyAgICAtMHgxLjNkNWRlNTYwZTE5MDZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NgorICAgIDB4MS5hZjQxMWJmOTg1MjIwYjU2MjkwOWM2NTJjMDg3ZmVmNHAtOTUxLAorICAgIC0weDEuNDk1NGFhNTUyYTk2MHA5CisgIH0sCisgIHsgLy8gRW50cnkgNjcKKyAgICAweDEuZTFiNzFkMjM4ZDUwNzdmZTNiZWEyMjJmY2JhMTU2MDhwLTk1NywKKyAgICAtMHgxLjRiNWFkNmE5YWQ2YWRwOQorICB9LAorICB7IC8vIEVudHJ5IDY4CisgICAgMHgxLmNjNjY2YTM1MTljYTA4MGYxZGFlZjU3ZjkyYjQxZDI5cC05NzMsCisgICAgLTB4MS41MGVjMzI2ODZhODM0cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OQorICAgIDB4MS4yMjQ2MmJkNWY3MmIwZmZmYTYwODViMDQ0MjdmZGY1ZHAtOTc2LAorICAgIC0weDEuNTIzMTY4NzJiMDIyMnA5CisgIH0sCisgIHsgLy8gRW50cnkgNzAKKyAgICAweDEuYzFlYmMxODYxMDMwMWZmZjI0MjRiYzM5MzYyNjBkZDJwLTk4MSwKKyAgICAtMHgxLjUzYjRlZDNiNGVjNzdwOQorICB9LAorICB7IC8vIEVudHJ5IDcxCisgICAgMHgxLjhkMDE1YmNhZjllMThiNTdmZGYwNTcyMzlkOTRmNTg2cC05ODEsCisgICAgLTB4MS41M2M0ZjEzYzRmMDc5cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MgorICAgIDB4MS5mZDU4MzU0NjBlZDQ4YzRlMTQyMDczMDlhMTIzN2Y5MHAtOTg5LAorICAgIC0weDEuNTY2YWQ0YTQxYmVjMHA5CisgIH0sCisgIHsgLy8gRW50cnkgNzMKKyAgICAweDEuNTg3MzNmYmMwODhlZjdmZjM4ZTE1Zjk0MTY2YzAyMmNwLTk5NCwKKyAgICAtMHgxLjU4NTg4M2U3YjNiMzhwOQorICB9LAorICB7IC8vIEVudHJ5IDc0CisgICAgMHgxLmIwNTIwOTA2OTA0ODE4MDJhY2YwMTY5ZjYyYmYzMmM5cC0zMiwKKyAgICAtMHgxLjVhODFlY2Y2OGJlY2NwNAorICB9LAorICB7IC8vIEVudHJ5IDc1CisgICAgMHgxLmRmNjE1NGJjNjQ0ZGFjMGY5ZTNhNTY2NDY5NDhiN2M1cC0xMDE1LAorICAgIC0weDEuNWY3NTYyOWFmNGViN3A5CisgIH0sCisgIHsgLy8gRW50cnkgNzYKKyAgICAweDEuZmY0YjBkYTM3MDgzNTAyYzExNGE3YWM1NmFjMDQ5OGZwLTEwMjMsCisgICAgLTB4MS42MjMyZWIxYzQzMmYycDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NworICAgIDB4MS42MjVlZGQ0Yzc1MTNlODQyZjI3YTkzMWMyYmJlMDA3Y3AtMTAyMywKKyAgICAtMHgxLjYyNjFkN2RiZjQ4Y2NwOQorICB9LAorICB7IC8vIEVudHJ5IDc4CisgICAgMHgxLmQ1NzJkMjQ5NzNiZTIwMDA2YmFkOTJlMjliY2JhOTg0cC0xLAorICAgIC0weDEuNjM2NGI4Zjc0N2UzMnAtNAorICB9LAorICB7IC8vIEVudHJ5IDc5CisgICAgMHgxLmVlNGRkNzkyMjQ1Nzc4MDIwMjUwZjg5ODFkMWEwYWQxcC05LAorICAgIC0weDEuNjUyNDc5NmI0MDg5NXAyCisgIH0sCisgIHsgLy8gRW50cnkgODAKKyAgICAweDEuZjY2MGM1OWIyOTQ1MDVkODk4OWY4NWY4ZWQyYTE4NzhwLTUsCisgICAgLTB4MS42NTUxZGFhZTM2OWNlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MQorICAgIDB4MS5hYTA3MDQ0OWVmZmZlOWI5MTA2NTc4OThjZGMwY2NkZHAtMTAzNywKKyAgICAtMHgxLjY3MjQ2M2YxNDE2MDdwOQorICB9LAorICB7IC8vIEVudHJ5IDgyCisgICAgMHgxLmQ0ZTdmYzMzMWI3MzI3ZmZjY2Y0ZWUwYzU5YWE3YjIycC0xLAorICAgIC0weDEuNjgyMGM5OWMxZGMxNnAtNAorICB9LAorICB7IC8vIEVudHJ5IDgzCisgICAgMHgxLmZjYzQ0OGFjZjQ3NjU3NWM2NmVlMzk2OTEyZGJhYWNkcC01MjgsCisgICAgLTB4MS42ZDRiN2U4MmMzZjAycDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NAorICAgIDB4MS43ZmZmNWExYmZmY2IyMDYyYzlhYWE1YjA3ZDA5NzI1NXAtNTI5LAorICAgIC0weDEuNmU0NGY3NjVmZGE3NnA4CisgIH0sCisgIHsgLy8gRW50cnkgODUKKyAgICAweDEuZmE0ZWNkOGFlNTcxODdmZmZmZmZmOTkxMGM0NzZjNjRwLTEsCisgICAgLTB4MS42ZTU2ZTcyNWI4MzA0cC03CisgIH0sCisgIHsgLy8gRW50cnkgODYKKyAgICAweDEuZThkMmRhZmQwMTdjZTgwMzJiY2I4OTQ1OTQ2NGZlN2RwLTMsCisgICAgLTB4MS42ZWNwMAorICB9LAorICB7IC8vIEVudHJ5IDg3CisgICAgMHgxLjIxNGUzNGNhYWM5ZTY3MTM5Njg4YWQxNjMyZGQyMDU1cC0xMDYyLAorICAgIC0weDEuN3A5CisgIH0sCisgIHsgLy8gRW50cnkgODgKKyAgICAweDEuYzg3ZjIxNzc1YTQ4MmEwOWE0NGFmNTljM2MzYWU0NGJwLTEwNzEsCisgICAgLTB4MS43MmU0MnA5CisgIH0sCisgIHsgLy8gRW50cnkgODkKKyAgICAweDEuYTM0OWIyMzI5YzY3NzdmZmNlNjU5MzRiM2I2MjAzYTdwLTI3MywKKyAgICAtMHgxLjc5NzhiYWM3MTEyMWNwNworICB9LAorICB7IC8vIEVudHJ5IDkwCisgICAgMHgxLmQyYTZkNWVhOTk1YzE3YWI0NDgxMzJlMWUwNDUzODA1cC0xLAorICAgIC0weDEuN2JkZTc5ZTBmOTcwY3AtNAorICB9LAorICB7IC8vIEVudHJ5IDkxCisgICAgMHgxLmI3NzZkYzY0Yzc2ZDE5N2U4YzY0NGRjOGNiNTA5YzRhcC0zLAorICAgIC0weDEuOGEwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MgorICAgIDB4MS40NDQ2ZmNmN2RhNjg5ODAyZDhjNzI1ZGI4YzExNDVhZnAtNzIsCisgICAgLTB4MS44ZDVjODRmMGJhYzhjcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MworICAgIDB4MS5lNzJhMGI2OGJiODJiNzhjZTA1MjRkMWFiYjZmN2FiZXAtNzMsCisgICAgLTB4MS44ZmE2OGI0NDQ3MjMwcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NAorICAgIDB4MS5mYzMzZDVlMWNhNmRmN2Q1MDY5YjAzZGM1YTY4M2U0ZnAtNzUsCisgICAgLTB4MS45YTY3MTY5M2I5NDZicDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NQorICAgIDB4MS5lNjk4MWZkNmVmNzljN2ZmZmZmY2M3MjAxZjgyZmQ0OXAtMSwKKyAgICAtMHgxLmEwZWM4OWY4OTdhNzVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NgorICAgIDB4MS5mMmI5ZDNiNmNmMjI3N2ExMjgzZjhlMDA3NDNhMDY2OXAtMSwKKyAgICAtMHgxLmFlNnAtNgorICB9LAorICB7IC8vIEVudHJ5IDk3CisgICAgMHgxLmU1MDM0YzhkMTkxYmJmZmY3MTlmMjA5OGUzM2MwNTc3cC0xLAorICAgIC0weDEuYmI5NzA2ZTJmMWJiNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDk4CisgICAgMHgxLmYyNGRjOTBmOWZiZWI4MDI4ZmJjYWVlYmFiYzdlOWZjcC0xLAorICAgIC0weDEuYmMzZWRhZDJlMWVmYnAtNgorICB9LAorICB7IC8vIEVudHJ5IDk5CisgICAgMHgxLjcxZjIzN2Q2NGE2ZWI0NmFhMTU0NDc2ZmQwZmMzODg2cC0xMSwKKyAgICAtMHgxLmQwNjk3ZWRiZTAwNTJwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMAorICAgIDB4MS5mMTJjMGQzYWRkYWE0ODAwNGIyMzUxNmQyYTExMzgwNHAtMSwKKyAgICAtMHgxLmUxOHAtNgorICB9LAorICB7IC8vIEVudHJ5IDEwMQorICAgIDB4MS5mMTEwZGQ5MDczZDcxODAwYmI0MDU2ODMwYjUxN2IwOHAtMSwKKyAgICAtMHgxLmU1MHAtNgorICB9LAorICB7IC8vIEVudHJ5IDEwMgorICAgIDB4MS5mM2FhN2E4NjA1NzRjMmIwNzgzMDYxZmUxZmQxZGYyZXAtNzA1LAorICAgIC0weDEuZTdmZmZmZmZmZmZmZnA4CisgIH0sCisgIHsgLy8gRW50cnkgMTAzCisgICAgMHgxLmYwZjg5OGQ1NTExNzA4MWZjM2I4NzkyMjA1ZTRlMTMwcC0xLAorICAgIC0weDEuZTgycC02CisgIH0sCisgIHsgLy8gRW50cnkgMTA0CisgICAgMHgxLmZmODE0ZmZmMThkYWM4NTQxODVkMDE5YjBmOGVhZDM2cC0xLAorICAgIC0weDEuZmFmZWJmYWZlYmZiMHAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUKKyAgICAweDEuZmZmZmZmZmYwMWMwNzAxYzQ2MjA4YzU0MTZkOTQzYWRwLTEsCisgICAgLTB4MS5mYzdmMWZjN2YyMHAtMzQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYKKyAgICAweDEuNzkwN2Q0MTQ4YmQ5MTY4N2ExYjUwZjI2ZTg4MzA3NzVwLTIsCisgICAgLTB4MS5mZjhmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA3CisgICAgMHgxLmZmZmZmZmZmZmZmZjgwMWMwMDAwMDAwMDEzZjkwMGMzcC0xLAorICAgIC0weDEuZmY4ZmZmZmZmZmZmZnAtNTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgKKyAgICAweDEuZTBmYmIwM2EwYzI3ZDdlODQ4MDRjYWRlYzM3N2JkZjlwLTEsCisgICAgLTB4MS5mZmVmZmZmZmZmZmZmcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTA5CisgICAgMHgxLmZmZmZmZmZmZmYwMDA4MDAwMDAwNDAwNDAwMGZmZmY1cC0xLAorICAgIC0weDEuZmZlZmZmZmZmZmZmZnAtNDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAKKyAgICAweDEuZmZmZmZmZmZmZjAwMDdmZmZmZmZmZmZjMDAxMDAwMTVwLTEsCisgICAgLTB4MS5mZmYwMDAwMDAwOHAtNDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTAwMDcxOWVwLTEsCisgICAgLTB4MS5mZmY4ZTYxZWFkZDQ4cC0xMDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTIKKyAgICAweDEuZmZmZmZmZmZmYzAwMDgwMDAwMDQwMDEwMDAwZmZkNTVwLTEsCisgICAgLTB4MS5mZmZiZmZmZmZmZmZmcC00MAorICB9LAorICB7IC8vIEVudHJ5IDExMworICAgIDB4MS5mZmZmZmZmZmZjMDAwMDFjMDAwNDAwMWZjN2ZmZmUxOXAtMSwKKyAgICAtMHgxLmZmZmZmMWZmZmZmZmZwLTQwCisgIH0sCisgIHsgLy8gRW50cnkgMTE0CisgICAgMHgxLmZmODAwZmZlYWFjMDA4NTg5ZjlhOTZhZjczZWFmZjY3cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmRhNXAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUKKyAgICAweDEuZTM1NWJiYWVlOGQ4NTgxNWU0YjQ3NmI3MDRkMGY0ZjFwLTI0LAorICAgIC0weDEuZmZmZmZmZmZmZmY3ZHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE2CisgICAgMHgxLjc4YjU2MzYyY2VmM2RhOTg0NDUzZDFjNzJjMzQ0YTMxcC0yLAorICAgIC0weDEuZmZmZmZmZmZmZmZmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDExNworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmNwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgKKyAgICAweDEuNDJlYjlmMzlhZmJhYzdlNWU3M2MzMmEyMWU4NTNmMjZwLTE4NSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVwNgorICB9LAorICB7IC8vIEVudHJ5IDExOQorICAgIDB4MS4wMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDIwcDAsCisgICAgMHgxLjBwLTUzCisgIH0sCisgIHsgLy8gRW50cnkgMTIwCisgICAgMHgxLjk1ZTU0YzVkZDQyMTc3ZjUzZjRkNTIxOWRmMTFjYTNicDE4NCwKKyAgICAweDEuMHA3CisgIH0sCisgIHsgLy8gRW50cnkgMTIxCisgICAgMHgxLjk0NzY1MDRiYTg4NTc1OGFhNWZhNzU0NWUxMGU4ZTQ2cDczOCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXA5CisgIH0sCisgIHsgLy8gRW50cnkgMTIyCisgICAgMHgxLjAxMDA4MDJhYjU1Nzc4MDJiYTQyNGFkNDZiMTA2YTY2cDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDNwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjMKKyAgICAweDEuMDAwMDAwNDAwMDAwMDgwMDAwMWNhYWFhYjFiNTU1NTZwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwN3AtMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQKKyAgICAweDEuZDhlNjRiOGYyNmMxMjg1MTc0ODlhNDkwZTY4NGQ4YThwMiwKKyAgICAweDEuMDAwMDAwMDA4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUKKyAgICAweDEuNzQ5ZWE3ZTAxNWJjMWRkZGZhMTlmYmIzY2Y4YmRlZDRwMTEsCisgICAgMHgxLjAwMDAwMDAxMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTI2CisgICAgMHgxLjBmMmViZDJjNjVkOWE4MDA4MWFjMmU2NWU4MDI1YWIxcDIzLAorICAgIDB4MS4wMDAwMDAwMjBwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNworICAgIDB4MS4wZjJlYzE0NzNhZmVhODA4MWZhNDU2NjkyN2E0Y2ZkM3AyMywKKyAgICAweDEuMDAwMDAwNHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI4CisgICAgMHgxLjAwMDAwMDAwMDEwMDA4MDAwMDAwODAwODAwMjAwMDJhcDAsCisgICAgMHgxLjAwMDgwcC00MAorICB9LAorICB7IC8vIEVudHJ5IDEyOQorICAgIDB4MS4wMDAwMDAwMDAwODAwODAwMDAwMDIwMDQwMDIwMDAwNXAwLAorICAgIDB4MS4wMDFwLTQxCisgIH0sCisgIHsgLy8gRW50cnkgMTMwCisgICAgMHgxLjAwMDAwMDAwMDAwMDA4MDA4MDAwMDAwMDAwMjAwNHAwLAorICAgIDB4MS4wMDFwLTUzCisgIH0sCisgIHsgLy8gRW50cnkgMTMxCisgICAgMHgxLmE4YmY4MWE1OTdlZGQyMjNmMmRiNmViZmUyZWIxY2MxcDE4NCwKKyAgICAweDEuMDAxNzNlYWIzNjIzYXA3CisgIH0sCisgIHsgLy8gRW50cnkgMTMyCisgICAgMHgxLjc1ZTU0MTc1YWFiYjM3ZmZmNWU1YjQ0YmEwZjEwMWI3cDExLAorICAgIDB4MS4wMDFjMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTMzCisgICAgMHgxLjYwMDA4ZmJlZDZjNTI4MDIwNmU3OTkwOTMyMWQwOWM4cDEsCisgICAgMHgxLjAyZjhhZjhhZjhhZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDEzNAorICAgIDB4MS4wNDE4NGJiODBmZjQzZmZmYzg5YzUzZjFlZTA0Y2UwNHAwLAorICAgIDB4MS4wNDBwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUKKyAgICAweDEuMDAwMDA4NDAwMDIyMDgwMDVkOTYwMGMxMDU2MTNlN2NwMCwKKyAgICAweDEuMDgwcC0yMQorICB9LAorICB7IC8vIEVudHJ5IDEzNgorICAgIDB4MS4yMzM4YWI5Yjc0MzIwODAwMDAwMDA5NzM5MzhiYWNiMHAwLAorICAgIDB4MS4wODAwMDAwMWQwZmM4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTM3CisgICAgMHgxLmFjYzkxYmZhN2M1NGM4MDM2NTQ4Yzk2OGIzNmU1NzUwcDAsCisgICAgMHgxLjA4MTQ0MTlkNmE2NWFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzgKKyAgICAweDEuYTRlNDY5MzQxM2I5OTcwNzU1YzE1NjMzYWYyNWY5NmJwNDAwLAorICAgIDB4MS4xNWMxOGRlODc3NTYzcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzkKKyAgICAweDEuMDAwMDAwMDAwMDAwNDgwMDAwMDAwMDAwMDYxZmZmZmZwMCwKKyAgICAweDEuMWZmZmZmZmZmZmZmZnAtNTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDAKKyAgICAweDEuZWFhNTIxZWRmMWJjMjgwMTQ2MDIxOTFjZTYxOGMwNWZwODQ2LAorICAgIDB4MS4yNTg2Y2E5Y2Y0MTFicDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDEKKyAgICAweDEuZmNhOWM0NzAxNmNiMTc2MTdiMjc1YjI5OGNmOWY4OTRwMjYsCisgICAgMHgxLjJiNTVjMDM3ZWJiOWRwNAorICB9LAorICB7IC8vIEVudHJ5IDE0MgorICAgIDB4MS5mY2JiMWU1YzhkNTM1NzVhYmM3ODcyNmY1Y2VhNmY1MXAyNiwKKyAgICAweDEuMmI1NjRiZWUwYTZjYXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTQzCisgICAgMHgxLmNjMGY5ZDkxMWYxZDEwMDJjZjBhZjM4MmZkZjYyZjAycDAsCisgICAgMHgxLjJjMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0NAorICAgIDB4MS5iNjhhMjhiMDlmZTk0N2ZkZjAwMTA0ZjZkOGMyNDgwMXA2LAorICAgIDB4MS4yYzllMzNmNzk0NzY5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDUKKyAgICAweDEuZDJlMDM1YjE4OTJkNjgwMmE5YzllMjg4ZDhlOTdjOThwMCwKKyAgICAweDEuMzNhNzRmZjA2ZmI2NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0NgorICAgIDB4MS42YWNkZTg0NDM1NmM5MjFmYTk5MzEzYWExODY3MDU5M3AzLAorICAgIDB4MS4zNmNjZTNjMzkyNXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTQ3CisgICAgMHgxLjA2ZGFkZWUyOGMxMWM4MDBmYjkwOTQ0MzVjMWRlNzI3cDcsCisgICAgMHgxLjM4Mzg5YzQ4YjBmY2VwMgorICB9LAorICB7IC8vIEVudHJ5IDE0OAorICAgIDB4MS5jNzhmMzdmMDdjZWE2NDI2ZWQ1NTQ4YjRhMzFkNGFjMnA5MDQsCisgICAgMHgxLjM5OTczODFkN2Q5NGZwOQorICB9LAorICB7IC8vIEVudHJ5IDE0OQorICAgIDB4MS5iZmUwYzUxOTE2NmM0N2ZlM2E0YjM0ZTZjMzRiNWFlNHAxLAorICAgIDB4MS40MGEzMzljODFjZWNicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTAKKyAgICAweDEuZmJjOWMzMDYwMzA4NzQ4OGEzZDkyMjY1YjUzYzJhNjVwOTI3LAorICAgIDB4MS40MTlkYmNjNDg2NzcwcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTEKKyAgICAweDEuZjFlZjljOGE0ZmRhZTgwMWIxOWY4ZTQyZWZmMmM0YThwOTMwLAorICAgIDB4MS40MmE1NjVlNDU2ZTA0cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTIKKyAgICAweDEuZGExMzRkNWE0ZDFlMTgwMGM0MzY1NDQ5OTQwNThjZTZwOTM0LAorICAgIDB4MS40NDAyMDEwMDgwNHA5CisgIH0sCisgIHsgLy8gRW50cnkgMTUzCisgICAgMHgxLmY0ZWM0NDE5NGI2NDI4MDFhNGFmZDRjNTA2MzNlOGFhcDkzOCwKKyAgICAweDEuNDU2YmYyM2UwMjQyOHA5CisgIH0sCisgIHsgLy8gRW50cnkgMTU0CisgICAgMHgxLmVhOTFkOTUzM2IzOTQ4MDFiZjNkM2VjOGY4OGRlNTY4cDkzOSwKKyAgICAweDEuNDVjMWZlZWY4MDg2Y3A5CisgIH0sCisgIHsgLy8gRW50cnkgMTU1CisgICAgMHgxLmNiNDE5YjkyNzliMzU3NjNkMTEzZTZjNWRiNzlkYzU0cDk0MywKKyAgICAweDEuNDcxYzcxYzcxYzcxY3A5CisgIH0sCisgIHsgLy8gRW50cnkgMTU2CisgICAgMHgxLjZkMTQzMDg4MjgzMjFkZTZmZTY3YTQxMzZmMTdkMWY4cDI5LAorICAgIDB4MS40NzRjOWNjNDRjYzI1cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTcKKyAgICAweDEuYzAxOTRiNDE4NmUyNzgwMTIwYjg3M2Q3MjQ1NmVjZGRwOTU2LAorICAgIDB4MS40YjlhYjE3ODEyMDMwcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTgKKyAgICAweDEuMTVjNjA1ODUzNDc2YjgwMDA4Y2FiYzRiMjA3ZmZkMWZwMCwKKyAgICAweDEuNGU1OWRjN2UyYjA1M3AtNAorICB9LAorICB7IC8vIEVudHJ5IDE1OQorICAgIDB4MS42ZGVlMzg3MzVhNmQzODAwZDhlYzExNzY4MzI3NWYzYXA5NzIsCisgICAgMHgxLjUxMGM1NDY1ZDk4NGJwOQorICB9LAorICB7IC8vIEVudHJ5IDE2MAorICAgIDB4MS5mMWU5NmJlMmE1MmNkNzc3ZThjZjU0MTg0ZWQ3YWU0OHAwLAorICAgIDB4MS41NDliMGY1NzQyMzgycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTYxCisgICAgMHgxLmYyNTNjNTk5MGFhZDI4MDAwMDRkYjYxNWIxMTQ4NDc2cDAsCisgICAgMHgxLjU1MDg1ZmI4NjUwMWFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjIKKyAgICAweDEuMjc5YjFjNDNhMjY2MTdmZjRjNzUwOGMzNWU1NjJiMjJwOTkzLAorICAgIDB4MS41ODM4MzEyNmU5NGJmcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjMKKyAgICAweDEuNmZkNWFiNTkxNTNmMzJhNGEzODM3MTBhMzQxOWY1N2RwOTk2LAorICAgIDB4MS41OTVlNTc5NWU1OTJicDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjQKKyAgICAweDEuNWVjZjE4NzY1Mzk1NDdmZmQ2MTJlNWM0YjcxNWM4YWRwMTAwNCwKKyAgICAweDEuNWMxZTBmMDc4M2MxMHA5CisgIH0sCisgIHsgLy8gRW50cnkgMTY1CisgICAgMHgxLmYyYTNjMjlmYzZkNzIzYTYzZTM0OWJiY2Q3ODk0YThhcDEwMDgsCisgICAgMHgxLjVkYWRmNWQxZTQ1MmNwOQorICB9LAorICB7IC8vIEVudHJ5IDE2NgorICAgIDB4MS5lZGNiMTQ4Nzk2MTNlODAxNzYwODdjMWE3NmRlYzk3Y3AxMDA5LAorICAgIDB4MS41ZTA1NmVkNDBlNTZlcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjcKKyAgICAweDEuZmNjN2U1Y2E4MGIxZjc1YzE0ZDc2MmY4NDZiYzE2NjlwMCwKKyAgICAweDEuNWZhOTdiYjRlOTA2MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE2OAorICAgIDB4MS5mOGI1Yzk4N2EzZDg3N2UxOGJmY2FkYTUwZjFjNTRiMHAzLAorICAgIDB4MS42MTBlNDdlMTMyNWRjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjkKKyAgICAweDEuZjFlOWQ4Y2YyNGZjZDgwMjUxMjc4NzdhNzM4ZWIyZDFwNywKKyAgICAweDEuNjExYjE5ZGNjNTNlNHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTcwCisgICAgMHgxLmZmYzA0NTY5MmU4YTAzOWM1NjIyYjgyMTlmMTljNjE5cDEwMjMsCisgICAgMHgxLjYyZTQxZmZmZmZmZmFwOQorICB9LAorICB7IC8vIEVudHJ5IDE3MQorICAgIDB4MS5mZmMwNDU2OTMwMDlkM2QwNjUwNjJmOTI2N2RmZjU1ZXAxMDIzLAorICAgIDB4MS42MmU0MnA5CisgIH0sCisgIHsgLy8gRW50cnkgMTcyCisgICAgMHgxLmZmYzA0NTY5YTJmYjgzNjc5MjM5MDkxZGYwNjg5OTdlcDEwMjMsCisgICAgMHgxLjYyZTQyMDAwMDAxY2NwOQorICB9LAorICB7IC8vIEVudHJ5IDE3MworICAgIDB4MS5mZmZmZmZmZmZlYjJhMWIwZTI2M2FjNjgwNzZlZDRlMHAxMDIzLAorICAgIDB4MS42MmU0MmZlZmEzOWVhcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzQKKyAgICAweDEuMDAwMDBiNDAwMDNmNDgwMGVkNGUwMjliNmI2NWRkYjFwMCwKKyAgICAweDEuNjgwcC0yMQorICB9LAorICB7IC8vIEVudHJ5IDE3NQorICAgIDB4MS4xN2U2MmY3MGJlYzk5ODAxYTI5MzZlODliNTRjNTI1NnA4LAorICAgIDB4MS42ODlhN2RjNTkyMWI4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzYKKyAgICAweDEuNmRhYWExMzM2YTMxNTAwMTc0Y2EwYmU1Njk4MDZmZGVwMjY0LAorICAgIDB4MS42ZWIxZGU2OWFjZTMycDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzcKKyAgICAweDEuNzJhOWRhZGVhNzQ5OGM5NWE1MTRjMDFkNTQwM2U1ZDBwMCwKKyAgICAweDEuN2IwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTc4CisgICAgMHgxLjFlZDNmZTY0ZmM1Mzk4MDBmOWNkMzRlYzRjODNkOWQxcDIsCisgICAgMHgxLjdmZmZmZmZmZmZmZjlwMAorICB9LAorICB7IC8vIEVudHJ5IDE3OQorICAgIDB4MS4wMDAwMDAwMDAwMDAxODAwMDAwMDAwMDAwMDFmZmZmZnAwLAorICAgIDB4MS43ZmZmZmZmZmZmZmZmcC01MgorICB9LAorICB7IC8vIEVudHJ5IDE4MAorICAgIDB4MS5mZTMxMTUyYjdlZjZiMWUwYThiOWZlYzdlY2RkODVhNHA1NTMsCisgICAgMHgxLjhwOAorICB9LAorICB7IC8vIEVudHJ5IDE4MQorICAgIDB4MS43NGQ3N2I3NmQ5NTE2MzIyNmNhZjg0NzYwYTM0NmFiYnAwLAorICAgIDB4MS44MTBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODIKKyAgICAweDEuZjBlM2U1YjZjMTdjMDJhNzk5YzMwNmRiYzFiMWE4ZWNwNTU2LAorICAgIDB4MS44MjBkOTJmYzRiNDJhcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODMKKyAgICAweDEuMDAwMDAwMDBjMWI1OTgwMDAwMDAwMDAwMDAyN2E3ZDVwMCwKKyAgICAweDEuODM2YjJmZmY2ZDZjYnAtMzMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODQKKyAgICAweDEuNzhiNjlkNjkwZGI3OTJiNTc0ZjkwNGQyYmIxZTllYmVwNTcwLAorICAgIDB4MS44YjdhZWU2MzFmNDg5cDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODUKKyAgICAweDEuNGRhZDk1ODc3YWUwNzgwMDAwMTI4MjdmYWM4OTE1MzVwMTQ0LAorICAgIDB4MS45MDUwMTFlMGRmNjI5cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODYKKyAgICAweDEuZmNiYjg3NzhmNjEyMTc2NjVhNmU2ZjIxMTk4ODBiMjlwMTQ0LAorICAgIDB4MS45MWZmZnA2CisgIH0sCisgIHsgLy8gRW50cnkgMTg3CisgICAgMHgxLjdhNWIyNzcxZTBhMTZjZTZlY2Q2ZGU4NTczYzExMTkycDQsCisgICAgMHgxLjk0ZTU0NzM4ZmI0YjdwMQorICB9LAorICB7IC8vIEVudHJ5IDE4OAorICAgIDB4MS43ZDY3NmEyNmZlNWNhY2NlYTU5YjAyMzU0MGJlYzgwZnAwLAorICAgIDB4MS45ODRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODkKKyAgICAweDEuNjk4NzY0MTI4YTQ0NDgwMTBlMjUxYjU1ZjM3YTdiNmVwMTQ3LAorICAgIDB4MS45OGYzODFkN2RiNDRmcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTAKKyAgICAweDEuNDRlNWE3NTJmOWUxZWZmZmIzMTQ4MTQ4NGFhNzY5MmFwOSwKKyAgICAweDEuOWU4MTg2YjI2N2EyOHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTkxCisgICAgMHgxLjgwMjNkMjk4ZTM3MmY4MDIwZWM4Y2Y0YTcwYWZmYTg3cDAsCisgICAgMHgxLjlmOTFjMTQ0OWM0MjFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTIKKyAgICAweDEuZGY5YmQwNmRhZjhjZTdiMTIzZGY0M2JiNTAxMDk5MzhwMjk5LAorICAgIDB4MS45ZmMxZjIxMmQ3MGY2cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTMKKyAgICAweDEuODFhNGZiY2E5ZGNkYjgwMDAwMGFlMDY4YmMyMWM0ZjVwMCwKKyAgICAweDEuYTM5Mjc4OWVhZmNlOXAtMgorICB9LAorICB7IC8vIEVudHJ5IDE5NAorICAgIDB4MS44MjVmMzU0Y2NmNmYyZmZmYWI3ZTllYjgyOGZiYzY3ZHAwLAorICAgIDB4MS5hNTgwN2NhMTM5MmIycC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTk1CisgICAgMHgxLjNjMWUyODc2ODM0YWE3ZmE0NjAxMWU5OGFiZWFkZjc2cDAsCisgICAgMHgxLmJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTYKKyAgICAweDEuMWM3ZTFhY2E1Mzc5NWZmZjU0YTVmZGY1NTI5MjYxY2FwMCwKKyAgICAweDEuYjA0cC00CisgIH0sCisgIHsgLy8gRW50cnkgMTk3CisgICAgMHgxLmEyZDUwYjhiMjg4MGU4MDFhMjdhMzRkMTk1NGRhYjUwcDMzMSwKKyAgICAweDEuY2JkOTE3Y2NhZDA5NnA3CisgIH0sCisgIHsgLy8gRW50cnkgMTk4CisgICAgMHgxLjQxOWM4YThkYTFiNzk4MDJlMjAyOTZlNWY5Mjc5NjI2cDEsCisgICAgMHgxLmQ3YjY3N2UzMzNkMzhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTkKKyAgICAweDEuNDFkMWI4YjQ2NDllYjgwMDAwMjNmOTc3NmRhOWQ2NDVwMSwKKyAgICAweDEuZDgwYjFhNjMzMGJlYnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIwMAorICAgIDB4MS5iZjM0NDc5MjFmZDM5N2ZkNmRiNDYyY2QyZmJiMzlmZXAxMCwKKyAgICAweDEuZGY1MGQ5YWY5ZTQxMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMjAxCisgICAgMHgxLjk5MTk3OTRiYzg2Mjk4MDIwYTE5NTg4NTUyY2VhZTVjcDAsCisgICAgMHgxLmUwMDgxZWJjMzI2NGVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDIKKyAgICAweDEuNzZhNjJiYWQ3MTViNDgwMGRhYWRiNmZjMmI2ZTYxNjZwNSwKKyAgICAweDEuZWM1YmIyMDllNTcwN3AxCisgIH0sCisgIHsgLy8gRW50cnkgMjAzCisgICAgMHgxLmM3MDE1NTRjNzYxYWE4MGVlZGYyYTQ5ZWY2MGU1NjJjcDIsCisgICAgMHgxLmY2MnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjA0CisgICAgMHgxLmMzZGRhM2M5NTJiOTE4MDEyZmQ3OWZiYjhlYTM4ZjY5cDcyNywKKyAgICAweDEuZjg3Yzc4MjBkODQ0NnA4CisgIH0sCisgIHsgLy8gRW50cnkgMjA1CisgICAgMHgxLmQyOGM2MDk3YjlkNTU3ODgzNWU2Y2ZmMWIxOTQ2NGNkcDIsCisgICAgMHgxLmZjODlkYzFhYTkwOWNwMAorICB9LAorICB7IC8vIEVudHJ5IDIwNgorICAgIDB4MS40MjMxMTc4YzIzNDhmNWY3N2VlZGIyN2RjNDA0ZjYxNnA3MzQsCisgICAgMHgxLmZjZmZmZmZmZmZmZmZwOAorICB9LAorICB7IC8vIEVudHJ5IDIwNworICAgIDB4MS4wNDAzNDU5MTkxMWU3N2ZmMTgzNGZkNzBkMGJiYjRiMHAwLAorICAgIDB4MS5mZGE2ZGZlMjdmZmZmcC03CisgIH0sCisgIHsgLy8gRW50cnkgMjA4CisgICAgMHgxLmE1YjU2OTFjNGIwZWY4MDNjYWIyYmFkNGEyMDEzZjE0cDAsCisgICAgMHgxLmZmMWRkMWZmZmZmZmZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDkKKyAgICAweDEuMDAwMDAwMDAwMDAwM2ZmMjAwMDAwMDAwMDVmYzgwNjJwMCwKKyAgICAweDEuZmY4ZmZmZmZmZmZmZnAtNTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTAKKyAgICAweDEuNmQ0ZmQ5YWI0N2M5MjAwMDczYWE4MTI3YTI0MTlhYzhwNzM4LAorICAgIDB4MS5mZmU1ZWZmZmZmZmZmcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTEKKyAgICAweDEuMDAwMDAwMDAwMGZmZjgwMDAwMDAwMDAwMDAxZmZmYWFwMCwKKyAgICAweDEuZmZlZmZmZmZmZjAwMXAtNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTIKKyAgICAweDEuNzQ0MThiY2U3ODhlYjQ2NzQ2YjM4YjU3ODc1OWVjYzBwMTEsCisgICAgMHgxLmZmZWZmZmZmZmZmZmZwMgorICB9LAorICB7IC8vIEVudHJ5IDIxMworICAgIDB4MS4wMDAwMDAwMDAwZmZmODAwMDAwMDdmZjgwMDIwMDAyYXAwLAorICAgIDB4MS5mZmZwLTQxCisgIH0sCisgIHsgLy8gRW50cnkgMjE0CisgICAgMHgxLjAwMDAwMDAwMDBmZmZmZjIwMDAwN2ZmN2YyMDAwMDhjcDAsCisgICAgMHgxLmZmZmZlM2ZmZmZmZmZwLTQxCisgIH0sCisgIHsgLy8gRW50cnkgMjE1CisgICAgMHgxLmQ4ZTY0YjhkMjE4NTI4MWY5ODRhNGU1MTE0OGRhZGVjcDIsCisgICAgMHgxLmZmZmZmZmZmZTdmZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDIxNgorICAgIDB4MS5wMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmY3AtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDIxNworICAgIDB4MS4wMDAwMDAwMDAwMDAwN2ZmZmZmZmZmZmZmZjlmZmZmZnAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcC01NAorICB9LAorICB7IC8vIEVudHJ5IDIxOAorICAgIDB4MS4wMDAwMDAwMDAwMDAwN2ZmZmZmZmZmZmZmZmRmZmZmZnAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC01NAorICB9LAorICB7IC8vIEVudHJ5IDIxOQorICAgIDB4MS4zMDRkNmFlY2EyNTI1MzE0NzVlYzkxODIzNjliYTQxNXA2OSwKKyAgICAweDEuN2ZmZmZmZmZmZmZmZnA1CisgIH0sCisgIHsgLy8gRW50cnkgMjIwCisgICAgMHgxLjMwNGQ2YWVjYTI1NGIzYWY0YmM1ZDYyOTNkNWY2NWM3cDY5LAorICAgIDB4MS44cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjEKKyAgICAweDEuMzA0ZDZhZWNhMjU3MTQ0YTIxOWYxYWQ1MDU1OGQzMmNwNjksCisgICAgMHgxLjgwMDAwMDAwMDAwMDFwNQorICB9LAorICB7IC8vIEVudHJ5IDIyMgorICAgIDB4MS5mOGU2YzI0YjU1OGVmMTc0OTk1YmNmYWQ0OTUxNDlmNXAtNzYsCisgICAgLTB4MS5hMDAwMDAwMDAwMDAxcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjMKKyAgICAweDEuZjhlNmMyNGI1NTkyZTM0MjFkZjI3YWNmMWUwODAxNDRwLTc2LAorICAgIC0weDEuYXA1CisgIH0sCisgIHsgLy8gRW50cnkgMjI0CisgICAgMHgxLmY4ZTZjMjRiNTU5NmQ1MGZhMjg5MjVmOGQ2NTljMWJmcC03NiwKKyAgICAtMHgxLjlmZmZmZmZmZmZmZmZwNQorICB9LAorICB7IC8vIEVudHJ5IDIyNQorICAgIDB4MS41NTc3OWI5ODRmMzk1ZGVhMzZhMjc3YjhiZWUyZTY0Y3AxMTUsCisgICAgMHgxLjNmZmZmZmZmZmZmZmZwNgorICB9LAorICB7IC8vIEVudHJ5IDIyNgorICAgIDB4MS41NTc3OWI5ODRmM2ViM2M4YTUwM2I0YThlMjQ4OWQ5OHAxMTUsCisgICAgMHgxLjRwNgorICB9LAorICB7IC8vIEVudHJ5IDIyNworICAgIDB4MS41NTc3OWI5ODRmNDQwOWE3MTM2NGYxYWU1ZDI4MGU2OXAxMTUsCisgICAgMHgxLjQwMDAwMDAwMDAwMDFwNgorICB9LAorICB7IC8vIEVudHJ5IDIyOAorICAgIDB4MS4wN2I3MTEyYmMxZmJjMmMwZjljMTM2NTMzMDkzMDMxMHAtMTI3LAorICAgIC0weDEuNjAwMDAwMDAwMDAwMXA2CisgIH0sCisgIHsgLy8gRW50cnkgMjI5CisgICAgMHgxLjA3YjcxMTJiYzFmZmUxOWQzZTcwM2U0YTc5NGY3MzcycC0xMjcsCisgICAgLTB4MS42cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzAKKyAgICAweDEuMDdiNzExMmJjMjA0MDA3OTgzMWY0NjUyM2Q3Y2Y2OTJwLTEyNywKKyAgICAtMHgxLjVmZmZmZmZmZmZmZmZwNgorICB9LAorICB7IC8vIEVudHJ5IDIzMQorICAgIDB4MS40MGE0YjljMjcxNTA4NjYxNzZkMjJmMjEzOWQxZDQwZnA5MjMsCisgICAgMHgxLjNmZmZmZmZmZmZmZmZwOQorICB9LAorICB7IC8vIEVudHJ5IDIzMgorICAgIDB4MS40MGE0YjljMjcxNzg5YWY4YWYyMDViYjM0Zjc0MzMzN3A5MjMsCisgICAgMHgxLjRwOQorICB9LAorICB7IC8vIEVudHJ5IDIzMworICAgIDB4MS40MGE0YjljMjcxYTBhZjhmZTc2ZThkNDdmN2ZkOWMyNnA5MjMsCisgICAgMHgxLjQwMDAwMDAwMDAwMDFwOQorICB9LAorICB7IC8vIEVudHJ5IDIzNAorICAgIDB4MS40NGEzODI0ZTUyNWQ1NmZjM2YwMmY4ODYzNzVlYzg3NnAtMTAxNiwKKyAgICAtMHgxLjYwMDAwMDAwMDAwMDFwOQorICB9LAorICB7IC8vIEVudHJ5IDIzNQorICAgIDB4MS40NGEzODI0ZTUyODVlYjZjODhjZDQ2YmE1ZGViNDU3YXAtMTAxNiwKKyAgICAtMHgxLjZwOQorICB9LAorICB7IC8vIEVudHJ5IDIzNgorICAgIDB4MS40NGEzODI0ZTUyYWU3ZmRjZDI5NzlhMDExMjgwZmJjOHAtMTAxNiwKKyAgICAtMHgxLjVmZmZmZmZmZmZmZmZwOQorICB9LAorICB7IC8vIEVudHJ5IDIzNworICAgIDB4MS4wMzk5NjUyOGUwNzJiNzhhMzMyNDgwODg0Yzc5YmFmN3A3NSwKKyAgICAweDEuOWZmZmZmZmZmZmZmZnA1CisgIH0sCisgIHsgLy8gRW50cnkgMjM4CisgICAgMHgxLjAzOTk2NTI4ZTA3NGJlYmNmZDc2NDE2ZmMyYzBlYjkycDc1LAorICAgIDB4MS5hcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzkKKyAgICAweDEuMDM5OTY1MjhlMDc2YzVlZmM3YzgwMjViNDc2ZGIwZDBwNzUsCisgICAgMHgxLmEwMDAwMDAwMDAwMDFwNQorICB9LAorICB7IC8vIEVudHJ5IDI0MAorICAgIDB4MS5hZWJhYmFlM2E0MTdlZTZlN2ZhZjllY2ZjOTUxMDQwY3AtNzAsCisgICAgLTB4MS44MDAwMDAwMDAwMDAxcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDEKKyAgICAweDEuYWViYWJhZTNhNDFiNGJlM2Y1NzZlNzAzMDNhMzc5MzJwLTcwLAorICAgIC0weDEuOHA1CisgIH0sCisgIHsgLy8gRW50cnkgMjQyCisgICAgMHgxLmFlYmFiYWUzYTQxZWE5NTk2YjNlMmYzY2Y4ZTBkOWU3cC03MCwKKyAgICAtMHgxLjdmZmZmZmZmZmZmZmZwNQorICB9LAorICB7IC8vIEVudHJ5IDI0MworICAgIDB4MS5mMTA1NmRjN2JmMWIwZmM4NTdiNjc5OTlmNTAzNTI3M3AxMjYsCisgICAgMHgxLjVmZmZmZmZmZmZmZmZwNgorICB9LAorICB7IC8vIEVudHJ5IDI0NAorICAgIDB4MS5mMTA1NmRjN2JmMjJkM2RlMGVkNTc2MTViYzUwMWY4YnAxMjYsCisgICAgMHgxLjZwNgorICB9LAorICB7IC8vIEVudHJ5IDI0NQorICAgIDB4MS5mMTA1NmRjN2JmMmE5N2YzYzVmNDcyYjA5M2YzYzkxZnAxMjYsCisgICAgMHgxLjYwMDAwMDAwMDAwMDFwNgorICB9LAorICB7IC8vIEVudHJ5IDI0NgorICAgIDB4MS43ZmQ5NzRkMzcyZGU0OTA5OWVlN2JmNDhhZTM0NmVhYXAtMTE2LAorICAgIC0weDEuNDAwMDAwMDAwMDAwMXA2CisgIH0sCisgIHsgLy8gRW50cnkgMjQ3CisgICAgMHgxLjdmZDk3NGQzNzJlNDQ4NmY3MjM1OGFjZGQxMjY5MGU1cC0xMTYsCisgICAgLTB4MS40cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDgKKyAgICAweDEuN2ZkOTc0ZDM3MmVhNDdkNTQ1ODM1NjZhZjFiMDAwNTZwLTExNiwKKyAgICAtMHgxLjNmZmZmZmZmZmZmZmZwNgorICB9LAorICB7IC8vIEVudHJ5IDI0OQorICAgIDB4MS45M2JmNGVjMjgyYmQzYjM2Y2QyZjQwMTE0ODhhODM2NHAxMDE1LAorICAgIDB4MS41ZmZmZmZmZmZmZmZmcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTAKKyAgICAweDEuOTNiZjRlYzI4MmVmYjMyMGE1N2Y5YWUwMmUwMWFlNTFwMTAxNSwKKyAgICAweDEuNnA5CisgIH0sCisgIHsgLy8gRW50cnkgMjUxCisgICAgMHgxLjkzYmY0ZWMyODMyMjJiMGE3ZGNmZmJmZTEwYjNlMzRhcDEwMTUsCisgICAgMHgxLjYwMDAwMDAwMDAwMDFwOQorICB9LAorICB7IC8vIEVudHJ5IDI1MgorICAgIDB4MS45OGM3MmNhMGNhYjE0ZWRhNWFjYTk3YmVlMGZkZDQ4ZnAtOTI0LAorICAgIC0weDEuNDAwMDAwMDAwMDAwMXA5CisgIH0sCisgIHsgLy8gRW50cnkgMjUzCisgICAgMHgxLjk4YzcyY2EwY2FlNDY3YmZlZWUzZjExYTRhYTI2Zjc3cC05MjQsCisgICAgLTB4MS40cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTQKKyAgICAweDEuOThjNzJjYTBjYjE3ODBhNTgyZmQ1MGQ4ZDBmOThkOGJwLTkyNCwKKyAgICAtMHgxLjNmZmZmZmZmZmZmZmZwOQorICB9LAorICB7IC8vIEVudHJ5IDI1NQorICAgIDB4MS42MTAxM2E0NGE5ODFjOTEwZjIwZjgwNzU2MDA3MTIwYXAtODIyLAorICAgIC0weDEuMWNiOTBiZmJlOGU3Y3A5CisgIH0sCisgIHsgLy8gRW50cnkgMjU2CisgICAgMHgxLjgwODc3MTdhN2YwOGE3MjUxMjEwZTcxZDQ3YWNjNWUzcC05MDUsCisgICAgLTB4MS4zOTcyMTdmN2QxY2Y4cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTcKKyAgICAweDEuYTJkZTU5ZDg1NDUyMTA5ZjM0MTY1ZmE1NWY5ZTRlN2JwLTk4OCwKKyAgICAtMHgxLjU2MmIyM2YzYmFiNzNwOQorICB9LAorICB7IC8vIEVudHJ5IDI1OAorICAgIDB4MS5mZmZmZmZmZmZmZmZmMzU3OTNjNzY3MzAwODBkZmI5YnAtMiwKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTkKKyAgICAweDEuMDAwMDAwMDAwMDAwMDFhYmM5ZTNiMzk4MDNmNDVjMWNwLTEsCisgICAgLTB4MS42MmU0MmZlZmEzOWVmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjYwCisgICAgMHgxLjAwMDAwMDAwMDAwMDA5YWJjOWUzYjM5ODA0MjFiYTZicC0xLAorICAgIC0weDEuNjJlNDJmZWZhMzllZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI2MQorICAgIDB4MS42YTA5ZTY2N2YzYmNjNDhmMDk2NTAwOWYyNzc4ZGY5MXAtMSwKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjIKKyAgICAweDEuNmEwOWU2NjdmM2JjY2EzNzMwZmVhMDZlMWE5NjZjMDZwLTEsCisgICAgLTB4MS42MmU0MmZlZmEzOWVmcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjYzCisgICAgMHgxLjZhMDllNjY3ZjNiY2NmZGY1ODk4NDAzZDBkY2E5OTE5cC0xLAorICAgIC0weDEuNjJlNDJmZWZhMzllZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDI2NAorICAgIDB4MS5hZTg5Zjk5NWFkM2FkMzNmM2M0NTExMThlNGFkNzRjNXAtMSwKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjUKKyAgICAweDEuYWU4OWY5OTVhZDNhZDY5YzUwMzgzYzczNWE1NzUwNTJwLTEsCisgICAgLTB4MS42MmU0MmZlZmEzOWVmcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMjY2CisgICAgMHgxLmFlODlmOTk1YWQzYWQ5Zjk2NDJiNjdjZGQwMDdlNjA2cC0xLAorICAgIC0weDEuNjJlNDJmZWZhMzllZXAtMworICB9LAorICB7IC8vIEVudHJ5IDI2NworICAgIDB4MS5kNTgxOGRjZmJhNDg3MGVhMzBmODk3NGYzNjllYWI4Y3AtMSwKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjgKKyAgICAweDEuZDU4MThkY2ZiYTQ4NzJiZmIyODY2NzA5N2YxMDgwN2VwLTEsCisgICAgLTB4MS42MmU0MmZlZmEzOWVmcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjY5CisgICAgMHgxLmQ1ODE4ZGNmYmE0ODc0OTUzNDE0MzZjM2M3ODQyYWYxcC0xLAorICAgIC0weDEuNjJlNDJmZWZhMzllZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDI3MAorICAgIDB4MS5lYTRhZmEyYTQ5MGQ5Nzk3MDY5ODg3ODc5YjdjOTc0ZXAtMSwKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzEKKyAgICAweDEuZWE0YWZhMmE0OTBkOTg4YzJjMTU5Y2FjMjI0OGEwMWJwLTEsCisgICAgLTB4MS42MmU0MmZlZmEzOWVmcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjcyCisgICAgMHgxLmVhNGFmYTJhNDkwZDk5ODE1MTkyYjFkMGE5MTUyMzdicC0xLAorICAgIC0weDEuNjJlNDJmZWZhMzllZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDI3MworICAgIDB4MS5mNTA3NjViNmU0NTQwNjExZTA2NWMxNGYxMDUwMjRjZXAtMSwKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZjBwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzQKKyAgICAweDEuZjUwNzY1YjZlNDU0MDY4ZjIyM2YyZjA4MjU1MWI4ZWZwLTEsCisgICAgLTB4MS42MmU0MmZlZmEzOWVmcC02CisgIH0sCisgIHsgLy8gRW50cnkgMjc1CisgICAgMHgxLmY1MDc2NWI2ZTQ1NDA3MGM2NDE4OWNjMTNhNTM2YzVmcC0xLAorICAgIC0weDEuNjJlNDJmZWZhMzllZXAtNgorICB9LAorICB7IC8vIEVudHJ5IDI3NgorICAgIDB4MS4wNTliMGQzMTU4NTc0MzVmNmM1MWNlZWIwYTZiNDZlNnAwLAorICAgIDB4MS42MmU0MmZlZmEzOWVlcC02CisgIH0sCisgIHsgLy8gRW50cnkgMjc3CisgICAgMHgxLjA1OWIwZDMxNTg1NzQzYTBkMzE1MWI0MTIwM2MyNmVlcDAsCisgICAgMHgxLjYyZTQyZmVmYTM5ZWZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzgKKyAgICAweDEuMDU5YjBkMzE1ODU3NDNlMjM5ZDg2Nzk3MzYwZDE3NGZwMCwKKyAgICAweDEuNjJlNDJmZWZhMzlmMHAtNgorICB9LAorICB7IC8vIEVudHJ5IDI3OQorICAgIDB4MS4wYjU1ODZjZjk4OTBmNTg3ZjUyNzkyOTQxMTQxNjVhMnAwLAorICAgIDB4MS42MmU0MmZlZmEzOWVlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjgwCisgICAgMHgxLjBiNTU4NmNmOTg5MGY2MGQ5ZmVhZmE2MDU5YmM0YjA4cDAsCisgICAgMHgxLjYyZTQyZmVmYTM5ZWZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODEKKyAgICAweDEuMGI1NTg2Y2Y5ODkwZjY5MzRhYWU2MjJjYTIzNzczNDJwMCwKKyAgICAweDEuNjJlNDJmZWZhMzlmMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDI4MgorICAgIDB4MS4xNzJiODNjN2Q1MTdhYzdjN2MwZDM0MzJhZDU0M2FmYXAwLAorICAgIDB4MS42MmU0MmZlZmEzOWVlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjgzCisgICAgMHgxLjE3MmI4M2M3ZDUxN2FkOTNhNzkwZmMwN2M1MDE0MzBjcDAsCisgICAgMHgxLjYyZTQyZmVmYTM5ZWZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODQKKyAgICAweDEuMTcyYjgzYzdkNTE3YWVhYWQzMTRjM2RjZGNhZjYyNDlwMCwKKyAgICAweDEuNjJlNDJmZWZhMzlmMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDI4NQorICAgIDB4MS4zMDZmZTBhMzFiNzE0ZmZlN2VlYzZiZWJmN2NhOWQ3ZHAwLAorICAgIDB4MS42MmU0MmZlZmEzOWVlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMjg2CisgICAgMHgxLjMwNmZlMGEzMWI3MTUyNWY1ZWFkYjIyMmRhNmNmYjVhcDAsCisgICAgMHgxLjYyZTQyZmVmYTM5ZWZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODcKKyAgICAweDEuMzA2ZmUwYTMxYjcxNTRjMDNlNmVmODU5YmQxNDFhZjdwMCwKKyAgICAweDEuNjJlNDJmZWZhMzlmMHAtMworICB9LAorICB7IC8vIEVudHJ5IDI4OAorICAgIDB4MS42YTA5ZTY2N2YzYmNjMjMyMGQ1ZGU2OTBjNzgxNzJhZXAwLAorICAgIDB4MS42MmU0MmZlZmEzOWVlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjg5CisgICAgMHgxLjZhMDllNjY3ZjNiY2M3ZGEzNGY3ODY1ZmJhOTU4YjMzcDAsCisgICAgMHgxLjYyZTQyZmVmYTM5ZWZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTAKKyAgICAweDEuNmEwOWU2NjdmM2JjY2Q4MjVjOTEyNjJlYWRjMDQ0NTZwMCwKKyAgICAweDEuNjJlNDJmZWZhMzlmMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDI5MQorICAgIDB4MS5mZmZmZmZmZmZmZmZlY2E4NmMzODk4Y2ZmODc3OWExYXAwLAorICAgIDB4MS42MmU0MmZlZmEzOWVlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjkyCisgICAgMHgxLmZmZmZmZmZmZmZmZmZjYTg2YzM4OThjZmY4MWNkZDdjcDAsCisgICAgMHgxLjYyZTQyZmVmYTM5ZWZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTMKKyAgICAweDEuMDAwMDAwMDAwMDAwMDY1NDM2MWM0YzY3ZmMyMTEwNmZwMSwKKyAgICAweDEuNjJlNDJmZWZhMzlmMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI5NAorICAgIDB4MS5mZmZmZmZmZmZmZmZkOTUwZDg3MTMxOWZmMWFhNDMyOHAxLAorICAgIDB4MS42MmU0MmZlZmEzOWVlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTUKKyAgICAweDEuZmZmZmZmZmZmZmZmZjk1MGQ4NzEzMTlmZjAzZjUwYWZwMSwKKyAgICAweDEuNjJlNDJmZWZhMzllZnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjk2CisgICAgMHgxLjAwMDAwMDAwMDAwMDBjYTg2YzM4OThjZmY4NmEyZjFicDIsCisgICAgMHgxLjYyZTQyZmVmYTM5ZjBwMAorICB9LAorICB7IC8vIEVudHJ5IDI5NworICAgIDB4MS5mZmZmZmZmZmZmZmZiMmExYjBlMjYzM2ZlNjQwYzIxYnAzLAorICAgIDB4MS42MmU0MmZlZmEzOWVlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTgKKyAgICAweDEuZmZmZmZmZmZmZmZmZjJhMWIwZTI2MzNmZTA5NGY4MzdwMywKKyAgICAweDEuNjJlNDJmZWZhMzllZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMjk5CisgICAgMHgxLjAwMDAwMDAwMDAwMDE5NTBkODcxMzE5ZmYxNzQ5NzJhcDQsCisgICAgMHgxLjYyZTQyZmVmYTM5ZjBwMQorICB9LAorICB7IC8vIEVudHJ5IDMwMAorICAgIDB4MS5mZmZmZmZmZmZmZmY2NTQzNjFjNGM2N2ZkODMyNzM2MXA3LAorICAgIDB4MS42MmU0MmZlZmEzOWVlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDEKKyAgICAweDEuZmZmZmZmZmZmZmZmZTU0MzYxYzRjNjdmYzE4MzRiZDNwNywKKyAgICAweDEuNjJlNDJmZWZhMzllZnAyCisgIH0sCisgIHsgLy8gRW50cnkgMzAyCisgICAgMHgxLjAwMDAwMDAwMDAwMDMyYTFiMGUyNjMzZmU1NmExMjIycDgsCisgICAgMHgxLjYyZTQyZmVmYTM5ZjBwMgorICB9LAorICB7IC8vIEVudHJ5IDMwMworICAgIDB4MS5mZmZmZmZmZmZmZmVjYTg2YzM4OThjZmZkZjI4YTM2ZnAxNSwKKyAgICAweDEuNjJlNDJmZWZhMzllZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMzA0CisgICAgMHgxLmZmZmZmZmZmZmZmZmNhODZjMzg5OGNmZjg0NmMwNTM0cDE1LAorICAgIDB4MS42MmU0MmZlZmEzOWVmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDUKKyAgICAweDEuMDAwMDAwMDAwMDAwNjU0MzYxYzRjNjdmZDRkN2IzN2NwMTYsCisgICAgMHgxLjYyZTQyZmVmYTM5ZjBwMworICB9LAorICB7IC8vIEVudHJ5IDMwNgorICAgIDB4MS5mZmZmZmZmZmZmZmQ5NTBkODcxMzFhMDA3OTYwMzk4ZnAzMSwKKyAgICAweDEuNjJlNDJmZWZhMzllZXA0CisgIH0sCisgIHsgLy8gRW50cnkgMzA3CisgICAgMHgxLmZmZmZmZmZmZmZmZjk1MGQ4NzEzMTlmZjBlNmRjMGEzcDMxLAorICAgIDB4MS42MmU0MmZlZmEzOWVmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDgKKyAgICAweDEuMDAwMDAwMDAwMDAwY2E4NmMzODk4Y2ZmZDFiZGEzZGJwMzIsCisgICAgMHgxLjYyZTQyZmVmYTM5ZjBwNAorICB9LAorICB7IC8vIEVudHJ5IDMwOQorICAgIDB4MS5mZmZmZmZmZmZmYjJhMWIwZTI2MzQ1YjhkZmUwMDY5N3AxMDIzLAorICAgIDB4MS42MmU0MmZlZmEzOWVlcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTAKKyAgICAweDEuZmZmZmZmZmZmZmYyYTFiMGUyNjM0MDBkMTVmYzUyZmZwMTAyMywKKyAgICAweDEuNjJlNDJmZWZhMzllZnA5CisgIH0sCisgIHsgLy8gRW50cnkgMzExCisgICAgSFVHRV9WQUwsCisgICAgMHgxLjYyZTQyZmVmYTM5ZjBwOQorICB9LAorICB7IC8vIEVudHJ5IDMxMgorICAgIDB4MS5jODQ2NGY3NjE2MTk2MmVkMTkzMDc5NmMwNzk0MjU0YXAtMTA3MSwKKyAgICAtMHgxLjcyZTQyZmVmYTM5ZjBwOQorICB9LAorICB7IC8vIEVudHJ5IDMxMworICAgIDB4MS5jODQ2NGY3NjE2NTI2YmI3MDdmMzQwMjhmMWQ2Mzc4NnAtMTA3MSwKKyAgICAtMHgxLjcyZTQyZmVmYTM5ZWZwOQorICB9LAorICB7IC8vIEVudHJ5IDMxNAorICAgIDB4MS5jODQ2NGY3NjE2OGI3NDgwZjZiNjBlMDZmNTU2MjIxYnAtMTA3MSwKKyAgICAtMHgxLjcyZTQyZmVmYTM5ZWVwOQorICB9LAorICB7IC8vIEVudHJ5IDMxNQorICAgIDB4MS44ZWJlZjllYWM4MjBhODRiODZkMWNlMWE0NDI0NDM1ZnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTYKKyAgICAweDEuOGViZWY5ZWFjODIwYWU4NjgyYjk3OTNhYzZkMWU3NzJwLTEsCisgICAgLTB4MS4wcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzE3CisgICAgMHgxLjhlYmVmOWVhYzgyMGIxYTQwMGFkNGVjYjA4MzIxMWY2cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDMxOAorICAgIDB4MS5jM2Q2YTI0ZWQ4MjIxNGYwZDAxZGFmOGUxYThkMmNhN3AtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTkKKyAgICAweDEuYzNkNmEyNGVkODIyMTg3ODdkNjI0ZDNlNWViYTk1ZjVwLTEsCisgICAgLTB4MS4wcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzIwCisgICAgMHgxLmMzZDZhMjRlZDgyMjFhM2M1NDA0OWMxNjgwZDNmMDVlcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDMyMQorICAgIDB4MS5lMGZhYmZiYzcwMmEzYjA0ZTg2MDIzZjA2OTFjYzU5N3AtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjIKKyAgICAweDEuZTBmYWJmYmM3MDJhM2NlNWUzMWZlMDYwOTM1OGJhZmRwLTEsCisgICAgLTB4MS4wcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzIzCisgICAgMHgxLmUwZmFiZmJjNzAyYTNkZDY2MDdmYmU5OGE4Nzc2YTBlcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDMyNAorICAgIDB4MS5mMDNmNTZhODhiNWQ3ODFjOTA1ZjZiNTFjNzZhZTk4MXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjUKKyAgICAweDEuZjAzZjU2YTg4YjVkNzkxNGIwMGFiZjk3NzYyNzM1ZDFwLTEsCisgICAgLTB4MS4wcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzI2CisgICAgMHgxLmYwM2Y1NmE4OGI1ZDc5OTBiZmUwNjliYTRkODU4YTdmcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtNgorICB9LAorICB7IC8vIEVudHJ5IDMyNworICAgIDB4MS5mODBmZWFiZmVlZmE0OGE5Y2QxMTJkNTkyYzQzNzAxMnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjgKKyAgICAweDEuZjgwZmVhYmZlZWZhNDkyN2QxMGJkZDU0ZWFkNWFhNDZwLTEsCisgICAgLTB4MS4wcC02CisgIH0sCisgIHsgLy8gRW50cnkgMzI5CisgICAgMHgxLmY4MGZlYWJmZWVmYTQ5NjZkMzA5MzU1MmNhMWVkMzMwcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtNworICB9LAorICB7IC8vIEVudHJ5IDMzMAorICAgIDB4MS5mYzAzZmQ1NmFhMjI0ZjU4N2MzZjY4NWQ1NDNlNTNkN3AtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzEKKyAgICAweDEuZmMwM2ZkNTZhYTIyNGY5N2ZjYmYxMzMyOTg4ODQyZGVwLTEsCisgICAgLTB4MS4wcC03CisgIH0sCisgIHsgLy8gRW50cnkgMzMyCisgICAgMHgxLmZjMDNmZDU2YWEyMjRmYjdiY2ZlZTg5ZDNhYWQzZDVjcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtOAorICB9LAorICB7IC8vIEVudHJ5IDMzMworICAgIDB4MS5mZTAwZmZhYWJmZmJiYzUxY2QwZTE2ZDhiMDA1ZDY2MnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzQKKyAgICAweDEuZmUwMGZmYWFiZmZiYmM3MWFkMWUxMTg0YWZjMTljN2VwLTEsCisgICAgLTB4MS4wcC04CisgIH0sCisgIHsgLy8gRW50cnkgMzM1CisgICAgMHgxLmZlMDBmZmFhYmZmYmJjODE5ZDI2MGVkYWFmOWY4MDRicC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtOQorICB9LAorICB7IC8vIEVudHJ5IDMzNgorICAgIDB4MS5mZjAwM2ZmNTU2YWE4ODdiNjg4MDBiYjVkMjdkYTRmZnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzcKKyAgICAweDEuZmYwMDNmZjU1NmFhODg4YjYwODIwYjYwODdkMWU5MWFwLTEsCisgICAgLTB4MS4wcC05CisgIH0sCisgIHsgLy8gRW50cnkgMzM4CisgICAgMHgxLmZmMDAzZmY1NTZhYTg4OTM1YzgzMGIzNWUyN2MwYjU3cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzkKKyAgICAweDEuZmY4MDBmZmVhYWJmZmVlNmZjNGVmY2ZjNjQ1OWRlMTNwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDM0MAorICAgIDB4MS5mZjgwMGZmZWFhYmZmZWVlZmE0ZjNjZjcwZjU5ZDliZnAtMSwKKyAgICAtMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzQxCisgICAgMHgxLmZmODAwZmZlYWFiZmZlZjJmOTRmNWNmNDY0ZDlkN2ExcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDIKKyAgICAweDEuZmZmMDAwM2ZmZjU1NTZhOWE4OTA4YjQwYjMyMDg0OWRwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0xMworICB9LAorICB7IC8vIEVudHJ5IDM0MworICAgIDB4MS5mZmYwMDAzZmZmNTU1NmFhYTg4ODhiNjBiMmNiMmZmMnAtMSwKKyAgICAtMHgxLjBwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMzQ0CisgICAgMHgxLmZmZjAwMDNmZmY1NTU2YWIyODg0OGI3MGIyYTA4NTlkcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDUKKyAgICAweDEuNDhiNWUzYzNlODE4NjNlNTBmZmMyZWNiNzlmM2Y3YzNwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDM0NgorICAgIDB4MS40OGI1ZTNjM2U4MTg2Njc2N2JjM2I2OWJhYWJlNTM0ZXAwLAorICAgIDB4MS4wcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzQ3CisgICAgMHgxLjQ4YjVlM2MzZTgxODZiOTk1MzUyYzYzYzBjNjI3MmVjcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDgKKyAgICAweDEuMjIxNjA0NWI2ZjVjY2U3YWQ3NjQyODE1ODM5YzgxNjBwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDM0OQorICAgIDB4MS4yMjE2MDQ1YjZmNWNjZjljZWQ2ODgzODRlMDZiOGQ0MnAwLAorICAgIDB4MS4wcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzUwCisgICAgMHgxLjIyMTYwNDViNmY1Y2QxZTExOTcxM2E2MzlhMGQwYjQ5cDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTEKKyAgICAweDEuMTA4MmI1NzdkMzRlZDc0ZDcwNDU1ZGY4N2U1ZGUwODlwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDM1MgorICAgIDB4MS4xMDgyYjU3N2QzNGVkN2Q1YjFhMDE5ZTIyNWM5YTk1MXAwLAorICAgIDB4MS4wcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzUzCisgICAgMHgxLjEwODJiNTc3ZDM0ZWQ4ZTYzNDU1OTFiNTc0YTIwNzQ0cDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTQKKyAgICAweDEuMDgyMDU2MDExMjdlYzk0YzAzYmIwMzY3MDg1YTNjNjRwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNgorICB9LAorICB7IC8vIEVudHJ5IDM1NQorICAgIDB4MS4wODIwNTYwMTEyN2VjOThlMGJkMDgzYWJhODBjOTdhNnAwLAorICAgIDB4MS4wcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzU2CisgICAgMHgxLjA4MjA1NjAxMTI3ZWNhMTIxYmZiODQzNGU3NzE3ZmIwcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTcKKyAgICAweDEuMDQwODBhYjU1ZGUzOTE1YTM3NjM1ZDNkNDdkYzNkZjZwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNworICB9LAorICB7IC8vIEVudHJ5IDM1OAorICAgIDB4MS4wNDA4MGFiNTVkZTM5MTdhYjg2NGIzZTkwNDRlNmI0NXAwLAorICAgIDB4MS4wcC02CisgIH0sCisgIHsgLy8gRW50cnkgMzU5CisgICAgMHgxLjA0MDgwYWI1NWRlMzkxYmJiYTY3NjE0MDdkMzJkMjEzcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjAKKyAgICAweDEuMDIwMjAxNTYwMDQ0NWFmYzEyNDM2ZDVjNmYyMmVjZjBwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtOAorICB9LAorICB7IC8vIEVudHJ5IDM2MQorICAgIDB4MS4wMjAyMDE1NjAwNDQ1YjBjMzI2MzgyYmM3MzY4OWQzMnAwLAorICAgIDB4MS4wcC03CisgIH0sCisgIHsgLy8gRW50cnkgMzYyCisgICAgMHgxLjAyMDIwMTU2MDA0NDViMmM3MmEzYWQ3YzdiZjQwMGJjcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjMKKyAgICAweDEuMDEwMDgwMmFiNTU3NzdjYTgyMjY0MTdjYmZlZTJmZjNwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtOQorICB9LAorICB7IC8vIEVudHJ5IDM2NAorICAgIDB4MS4wMTAwODAyYWI1NTc3N2QyOGEyYTQyZDI2YWE5ZWU2N3AwLAorICAgIDB4MS4wcC04CisgIH0sCisgIHsgLy8gRW50cnkgMzY1CisgICAgMHgxLjAxMDA4MDJhYjU1Nzc3ZTI5YTMyNDU3ZGMwMjE2YzEwcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjYKKyAgICAweDEuMDA4MDIwMDU1NjAwMTEwZTdiNDE1NWE4MWFmNDg0YjFwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjcKKyAgICAweDEuMDA4MDIwMDU1NjAwMTExMjdkNDFkNWJkNzJmNGM4ZjNwMCwKKyAgICAweDEuMHAtOQorICB9LAorICB7IC8vIEVudHJ5IDM2OAorICAgIDB4MS4wMDgwMjAwNTU2MDAxMTFhODE0MmQ1ZTgyMmY1NTFhN3AwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC05CisgIH0sCisgIHsgLy8gRW50cnkgMzY5CisgICAgMHgxLjAwNDAwODAwYWFiNTU1ZGJlMzBlNWNlNzE5MjdjYmYwcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMzcwCisgICAgMHgxLjAwNDAwODAwYWFiNTU1ZGRlMzhlNmNlODZlOTI3N2FhcDAsCisgICAgMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzcxCisgICAgMHgxLjAwNDAwODAwYWFiNTU1ZTFlNDhlOGNlYjE5NjdjZjI5cDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzcyCisgICAgMHgxLjAwMDgwMDIwMDA1NTU1ZmZjMTBmMTI3NTI5NWQ0MzQ5cDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMzczCisgICAgMHgxLjAwMDgwMDIwMDA1NTU2MDAwMTExMTI3ZDI5NzI5OGM5cDAsCisgICAgMHgxLjBwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMzc0CisgICAgMHgxLjAwMDgwMDIwMDA1NTU2MDA4MTE1MTI4ZDI5OWQ0M2M5cDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMzc1CisgICAgMHgxLjQ0MTA5ZWRiMjA2YTkzOGZhZDY3MGI2OGFiOTliNzY4cC03MzksCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzYKKyAgICAweDEuNDQxMDllZGIyMDkzMTVhMzg4Y2IxYjQzM2VjZDFhOGFwLTczOSwKKyAgICAtMHgxLjBwOQorICB9LAorICB7IC8vIEVudHJ5IDM3NworICAgIDB4MS40NDEwOWVkYjIwYTc1NmFkNzY3ZDI1MTZhMTU1MTRjY3AtNzM5LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnA4CisgIH0sCisgIHsgLy8gRW50cnkgMzc4CisgICAgMHgxLjk3NTU5NTZhZDRkMDRhNjA2YThjZDlkZGZiMzY4ZWZmcC0zNzAsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzkKKyAgICAweDEuOTc1NTk1NmFkNGU5YmZiOWMxM2EyN2FlNGMwN2VkMzdwLTM3MCwKKyAgICAtMHgxLjBwOAorICB9LAorICB7IC8vIEVudHJ5IDM4MAorICAgIDB4MS45NzU1OTU2YWQ0ZjY3YTY2NmM5MGNmMmYzNDg4YTQ2M3AtMzcwLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzgxCisgICAgMHgxLjQyZWI5ZjM5YWZhNjk5MmJmM2ExMzc5NzE1ZjY2ODNicC0xODUsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODIKKyAgICAweDEuNDJlYjlmMzlhZmIwYjA4OGVkNmViNGY0M2NjOWVjN2JwLTE4NSwKKyAgICAtMHgxLjBwNworICB9LAorICB7IC8vIEVudHJ5IDM4MworICAgIDB4MS40MmViOWYzOWFmYjViYzM3NmE1NTczYzExNjRhOWMwM3AtMTg1LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnA2CisgIH0sCisgIHsgLy8gRW50cnkgMzg0CisgICAgMHgxLjk2OWQ0NzMyMWU0NjYwNGExMDVmOGRlMzJkOWRjNjg1cC05MywKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwNgorICB9LAorICB7IC8vIEVudHJ5IDM4NQorICAgIDB4MS45NjlkNDczMjFlNGNiYWJmMmQyODA3MDk2M2IwNDE5NHAtOTMsCisgICAgLTB4MS4wcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODYKKyAgICAweDEuOTY5ZDQ3MzIxZTRmZTdmOWJiOGM0M2E2MDY2OTJhNDhwLTkzLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnA1CisgIH0sCisgIHsgLy8gRW50cnkgMzg3CisgICAgMHgxLmM4NDY0Zjc2MTY0MmYxNTVmYWIzZTViYjE0NGZiOTEwcC00NywKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwNQorICB9LAorICB7IC8vIEVudHJ5IDM4OAorICAgIDB4MS5jODQ2NGY3NjE2NDY4MWUyOTlhMDEyNDQ4Nzg4NGQ2NHAtNDcsCisgICAgLTB4MS4wcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODkKKyAgICAweDEuYzg0NjRmNzYxNjQ4NGEyOGU5MTYyODhiZWQ4ZTBlYmZwLTQ3LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnA0CisgIH0sCisgIHsgLy8gRW50cnkgMzkwCisgICAgMHgxLmUzNTViYmFlZTg1YWNhNTBhM2M1MGFkMmNjZmZiYjI5cC0yNCwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwNAorICB9LAorICB7IC8vIEVudHJ5IDM5MQorICAgIDB4MS5lMzU1YmJhZWU4NWNhZGE2NWY3M2YzMmU4OGZiM2NjNnAtMjQsCisgICAgLTB4MS4wcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTIKKyAgICAweDEuZTM1NWJiYWVlODVkOWY1MTNkNGI2NzVkMWMzOTIzZjZwLTI0LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAzCisgIH0sCisgIHsgLy8gRW50cnkgMzkzCisgICAgMHgxLjVmYzIxMDQxMDI3YTFiZGVjNTI1ZjZkMmI0OGE0NjM3cC0xMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMworICB9LAorICB7IC8vIEVudHJ5IDM5NAorICAgIDB4MS41ZmMyMTA0MTAyN2FjYmJmY2Q0Njc4MGZlZTcxZWFkMnAtMTIsCisgICAgLTB4MS4wcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTUKKyAgICAweDEuNWZjMjEwNDEwMjdiMjNiMDUxNTZiOGFlYWM1ZmVlYTVwLTEyLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAyCisgIH0sCisgIHsgLy8gRW50cnkgMzk2CisgICAgMHgxLjJjMTU1YjgyMTNjZWZjNzkzNDBmOGUzODYyNjM0NTZhcC02LAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzk3CisgICAgMHgxLjJjMTU1YjgyMTNjZjQ3N2U4YWYwMTMyYzJhZTIzZDRhcC02LAorICAgIC0weDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzk4CisgICAgMHgxLjJjMTU1YjgyMTNjZjZkMDEzNjYwNTVhNjE2MmEzOTVmcC02LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMzk5CisgICAgMHgxLjE1MmFhYTNiZjgxYzk3NTg2MjI3MmYwZjNiMTNmNTg2cC0zLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAxCisgIH0sCisgIHsgLy8gRW50cnkgNDAwCisgICAgMHgxLjE1MmFhYTNiZjgxY2I5ZmRiNzZlYWUxMmQwMjk1NzFmcC0zLAorICAgIC0weDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgNDAxCisgICAgMHgxLjE1MmFhYTNiZjgxY2NiNTA2MjEyNmQ5NDljNTNjN2VicC0zLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDAyCisgICAgMHgxLjc4YjU2MzYyY2VmMzY0ZGY5NTQ0ZjExYjBhNDk5MDMxcC0yLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDAzCisgICAgMHgxLjc4YjU2MzYyY2VmMzdjNmFlYjdiMWUwYTQxNTNlNDM3cC0yLAorICAgIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDA0CisgICAgMHgxLjc4YjU2MzYyY2VmMzg4MzA5Njk2MzQ4MWRkNjY1MjNmcC0yLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwNQorICAgIDB4MS45NDc2NTA0YmE4Mzk5ZjViOTdjYWUzNWJlYjc4YzNjNXA3MzgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwOAorICB9LAorICB7IC8vIEVudHJ5IDQwNgorICAgIDB4MS45NDc2NTA0YmE4NTJlNmMwOWM4NTY3YzAxYzVhNjY0OHA3MzgsCisgICAgMHgxLjBwOQorICB9LAorICB7IC8vIEVudHJ5IDQwNworICAgIDB4MS45NDc2NTA0YmE4ODU3NThhYTVmYTc1NDVlMTBlOGU0NnA3MzgsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwOQorICB9LAorICB7IC8vIEVudHJ5IDQwOAorICAgIDB4MS40MWM3YTg4MTRiZTE5MmE1ZGYyNWIwNDJhZjgyNGVmZHAzNjksCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwNworICB9LAorICB7IC8vIEVudHJ5IDQwOQorICAgIDB4MS40MWM3YTg4MTRiZWJhMGUzMjMzMDBmNzc3ZGE2NTg1NHAzNjksCisgICAgMHgxLjBwOAorICB9LAorICB7IC8vIEVudHJ5IDQxMAorICAgIDB4MS40MWM3YTg4MTRiZmZiZDVkYWI0NGNlZDI2ZmFjY2JmYnAzNjksCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwOAorICB9LAorICB7IC8vIEVudHJ5IDQxMQorICAgIDB4MS45NWU1NGM1ZGQ0MWIyMDYwMGRkNjAxYTBhZTY3MmZmNHAxODQsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwNgorICB9LAorICB7IC8vIEVudHJ5IDQxMgorICAgIDB4MS45NWU1NGM1ZGQ0MjE3N2Y1M2Y0ZDUyMTlkZjExY2EzYnAxODQsCisgICAgMHgxLjBwNworICB9LAorICB7IC8vIEVudHJ5IDQxMworICAgIDB4MS45NWU1NGM1ZGQ0MmUyNzFmYTIzYmYzNTg1YjY1NTA2MHAxODQsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNworICB9LAorICB7IC8vIEVudHJ5IDQxNAorICAgIDB4MS40MjU5ODJjZjU5N2E0ZDUyYzg5ZWE4NTdiYmFhODA3YXA5MiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnA1CisgIH0sCisgIHsgLy8gRW50cnkgNDE1CisgICAgMHgxLjQyNTk4MmNmNTk3Y2QyMDVjZTNkNWI0ZWRiMDMxNzU2cDkyLAorICAgIDB4MS4wcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTYKKyAgICAweDEuNDI1OTgyY2Y1OTgxZGI2YmQ5N2FjMTRjMzVlNjY2YzZwOTIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNgorICB9LAorICB7IC8vIEVudHJ5IDQxNworICAgIDB4MS4xZjQzZmNjNGI2NjFhODk0NGFjMzg5YjYwOWUwZjc0ZXA0NiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnA0CisgIH0sCisgIHsgLy8gRW50cnkgNDE4CisgICAgMHgxLjFmNDNmY2M0YjY2MmM3ZDg0Nzg4NDAxODQyMTc0MDc0cDQ2LAorICAgIDB4MS4wcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTkKKyAgICAweDEuMWY0M2ZjYzRiNjY1MDY2MDQxMTFhY2UwMTA0ZmM5MGVwNDYsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNQorICB9LAorICB7IC8vIEVudHJ5IDQyMAorICAgIDB4MS4wZjJlYmQwYTgwMDE3Y2ZhYzU2YzMwODc0YWZiYWI5OHAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAzCisgIH0sCisgIHsgLy8gRW50cnkgNDIxCisgICAgMHgxLjBmMmViZDBhODAwMjA0OTIyM2YxNzA4ODJiNWVlNWVmcDIzLAorICAgIDB4MS4wcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjIKKyAgICAweDEuMGYyZWJkMGE4MDAzMTNjMGUwZmJmMDhhYjc4ODY4NjZwMjMsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNAorICB9LAorICB7IC8vIEVudHJ5IDQyMworICAgIDB4MS43NDllYTdkNDcwYzY4MWU0MzYxOGVjMThkNTNmMWIyMXAxMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAyCisgIH0sCisgIHsgLy8gRW50cnkgNDI0CisgICAgMHgxLjc0OWVhN2Q0NzBjNmRmMGJlMDBlMDg0YTgxNWQxZGU2cDExLAorICAgIDB4MS4wcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjUKKyAgICAweDEuNzQ5ZWE3ZDQ3MGM3OTk1YjMzZjg0MGFlMWY3NmUyZTdwMTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMworICB9LAorICB7IC8vIEVudHJ5IDQyNgorICAgIDB4MS5iNGM5MDJlMjczYTU0ZmRmYjY3NzcxNjZlNjc2MGRmYnA1LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjcKKyAgICAweDEuYjRjOTAyZTI3M2E1ODY3OGQ2ZDNiZmRiOTNkYjk2ZDBwNSwKKyAgICAweDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgNDI4CisgICAgMHgxLmI0YzkwMmUyNzNhNWYzYWIxNzhjNWNjNTAzMjAxNDljcDUsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMgorICB9LAorICB7IC8vIEVudHJ5IDQyOQorICAgIDB4MS5kOGU2NGI4ZDRkZGFiZjM0ZDU4MmNkMjkwOWFhZmIyYXAyLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzAKKyAgICAweDEuZDhlNjRiOGQ0ZGRhZGNjMzNhM2JhMjA2YjY4YWJiYThwMiwKKyAgICAweDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgNDMxCisgICAgMHgxLmQ4ZTY0YjhkNGRkYjE3ZTAwM2FkNGJjMjE1ZDRlZjg2cDIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMQorICB9LAorICB7IC8vIEVudHJ5IDQzMgorICAgIDB4MS41YmYwYThiMTQ1NzY4YTU1ZGE3MzIyMTQ5OWZjNGNmYnAxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDMzCisgICAgMHgxLjViZjBhOGIxNDU3Njk1MzU1ZmI4YWM0MDRlN2E3OWUzcDEsCisgICAgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQzNAorICAgIDB4MS41YmYwYThiMTQ1NzZhYWY0NmE0M2MwOTdiODdiYzgzM3AxLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzUKKyAgICAweDEuZmZjMDQ1NjkyZmM5ZGJjN2I3ZTAzMjU3NmU1ZTI2ZjhwMTAyMywKKyAgICAweDEuNjJlNDFmZmZmZmZmZnA5CisgIH0sCisgIHsgLy8gRW50cnkgNDM2CisgICAgMHgxLmZmYzA0NTY5MzAwOWQzZDA2NTA2MmY5MjY3ZGZmNTVlcDEwMjMsCisgICAgMHgxLjYyZTQycDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzcKKyAgICAweDEuZmZjMDQ1NjkzMDQ5Y2JkOTEyMmMzNGNjNjI3NzY4ODRwMTAyMywKKyAgICAweDEuNjJlNDIwMDAwMDAwMXA5CisgIH0sCisgIHsgLy8gRW50cnkgNDM4CisgICAgMHgxLmM4N2YyMTc3NWEwZjFhMjU3NTVmYjAyN2Y5NDk0OWExcC0xMDcxLAorICAgIC0weDEuNzJlNDIwMDAwMDAwMXA5CisgIH0sCisgIHsgLy8gRW50cnkgNDM5CisgICAgMHgxLmM4N2YyMTc3NWE0ODJhMDlhNDRhZjU5YzNjM2FlNDRicC0xMDcxLAorICAgIC0weDEuNzJlNDJwOQorICB9LAorICB7IC8vIEVudHJ5IDQ0MAorICAgIDB4MS5jODdmMjE3NzVhODEzOWVkZDMzNjQyMzI3YmIyNWM1ZnAtMTA3MSwKKyAgICAtMHgxLjcyZTQxZmZmZmZmZmZwOQorICB9LAorICB7IC8vIEVudHJ5IDQ0MQorICAgIEhVR0VfVkFMLAorICAgIDB4MS4wcDEwMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDIKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuOTk5OTk5OTk5OTk5YXAxMDIwCisgIH0sCisgIHsgLy8gRW50cnkgNDQzCisgICAgSFVHRV9WQUwsCisgICAgMHgxLjE5OTk5OTk5OTk5OWFwMTAyMQorICB9LAorICB7IC8vIEVudHJ5IDQ0NAorICAgIEhVR0VfVkFMLAorICAgIDB4MS42NjY2NjY2NjY2NjY3cDEwMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDUKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuYjMzMzMzMzMzMzMzNHAxMDIxCisgIH0sCisgIHsgLy8gRW50cnkgNDQ2CisgICAgSFVHRV9WQUwsCisgICAgMHgxLjBwMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDQ0NworICAgIEhVR0VfVkFMLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDgKKyAgICBIVUdFX1ZBTCwKKyAgICBIVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDQ0OQorICAgIEhVR0VfVkFMLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTAKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNDUxCisgICAgMHgxLjcyNDA0NmViMDkzMzhkMjk5MWEzMDg5M2U3ZjQxMDhkcDQsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDQ1MgorICAgIDB4MS4zM2RlZGM4NTU5MzVlZmFhYWY1NzhjZWQzZjgyMWY5NnAyLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTMKKyAgICAweDEuNWJmMGE4YjE0NTc2YWFmNDZhNDNjMDk3Yjg3YmM4MzNwMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDU0CisgICAgMHgxLjViZjBhOGIxNDU3Njk1MzU1ZmI4YWM0MDRlN2E3OWUzcDEsCisgICAgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1NQorICAgIDB4MS41YmYwYThiMTQ1NzY4YTU1ZGE3MzIyMTQ5OWZjNGNmYnAxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDU2CisgICAgMHgxLjE4YmQ2Njk0NzFjYWE1NTg1YzcxY2MzMmE3OTJhYzg1cDEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTcKKyAgICAweDEucDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTgKKyAgICAweDEucDAsCisgICAgMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTkKKyAgICAweDEucDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjAKKyAgICAweDEucDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmNwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjEKKyAgICAweDEucDAsCisgICAgMHgxLjBwLTEwNzMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjIKKyAgICAweDEucDAsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjMKKyAgICAweDEucDAsCisgICAgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNDY0CisgICAgMHgxLnAwLAorICAgIC0wLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNDY2CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTA3MworICB9LAorICB7IC8vIEVudHJ5IDQ2NworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmNwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjgKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNDY5CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDQ3MAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzEKKyAgICAweDEuZDJlMTcxY2YwNDg3OTNlMTZhN2Y5NDA2ZTAwYzJkZDlwLTIsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDcyCisgICAgMHgxLjc4YjU2MzYyY2VmMzg4MzA5Njk2MzQ4MWRkNjY1MjNmcC0yLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ3MworICAgIDB4MS43OGI1NjM2MmNlZjM3YzZhZWI3YjFlMGE0MTUzZTQzN3AtMiwKKyAgICAtMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ3NAorICAgIDB4MS43OGI1NjM2MmNlZjM2NGRmOTU0NGYxMWIwYTQ5OTAzMXAtMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDQ3NQorICAgIDB4MS5hOWJjYzQ2Zjc2N2RmYjBkNGVlYzJiMTMzN2EwNGI5YXAtMywKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDQ3NgorICAgIDB4MS42MjAyMjdiNTk4ZWY5OTQ5ZTYwZTQ0ZGM0NWQxNGQwY3AtNSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDQ3NworICAgIDAuMCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDQ3OAorICAgIDAuMCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDQ3OQorICAgIDAuMCwKKyAgICAtSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODAKKyAgICAweDEuZmZmZmZmZmZmZmYyYTFiMGUyNjM0MDBkMTVmYzUyZmZwMTAyMywKKyAgICAweDEuNjJlNDJmZWZhMzllZnA5CisgIH0sCisgIHsgLy8gRW50cnkgNDgxCisgICAgSFVHRV9WQUwsCisgICAgMHgxLjYyZTQyZmVmYTM5ZjBwOQorICB9LAorICB7IC8vIEVudHJ5IDQ4MgorICAgIDB4MS4wMDAwMDAwMDAwMDdiYmNmZmIwNmY4ZmRhYjg5NmRiMHAtMTAyMiwKKyAgICAtMHgxLjYyMzJiZGQ3YWJjZDJwOQorICB9LAorICB7IC8vIEVudHJ5IDQ4MworICAgIDB4MS5mZmZmZmZmZmZmY2Y3NzlmZjYwZGY0MGM2MzE0MTlhMnAtMTAyMywKKyAgICAtMHgxLjYyMzJiZGQ3YWJjZDNwOQorICB9LAorfTsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCisKK1RFU1QobWF0aF9leHAsIGV4cF9pbnRlbCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoZ19leHBfaW50ZWxfZGF0YSkvc2l6ZW9mKGV4cF9pbnRlbF9kYXRhX3QpOyBpKyspIHsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKGdfZXhwX2ludGVsX2RhdGFbaV0uZXhwZWN0ZWQsIGV4cChnX2V4cF9pbnRlbF9kYXRhW2ldLmNhbGxfZGF0YSkpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7CisgIH0KKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOworI2VuZGlmIC8vIF9fQklPTklDX18KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfZXhwZl90ZXN0LmNwcCBiL3Rlc3RzL21hdGhfZXhwZl90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTdhYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbWF0aF9leHBmX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMTQzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQordHlwZWRlZiBzdHJ1Y3QgeworICBmbG9hdCBleHBlY3RlZDsKKyAgZmxvYXQgY2FsbF9kYXRhOworfSBleHBmX2ludGVsX2RhdGFfdDsKKworc3RhdGljIGV4cGZfaW50ZWxfZGF0YV90IGdfZXhwZl9pbnRlbF9kYXRhW10gPSB7CisgIHsgLy8gRW50cnkgMAorICAgIDB4MS5lMGZhYmYwODEyMjI3ODBkNzRjMDBmZGEzMGFhMzk0M3AtMSwKKyAgICAtMHgxLjAwMDAwNnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEKKyAgICAweDEuZTBmYWJlY2JmMmNhOWFjZDI1ZWVmNjNhZjg1OGVkNjBwLTEsCisgICAgLTB4MS4wMDAwMDhwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyCisgICAgMHgxLmZjMDNmY2NmYjkxMzE2N2VjZmE4NGY0OGY1YjcyMDVicC0xLAorICAgIC0weDEuMDAwMDIycC03CisgIH0sCisgIHsgLy8gRW50cnkgMworICAgIDB4MS5jM2Q2NDJmZjliZjJkMjk0YzBjZTA4OGU4YmFkMjdiM3AtMSwKKyAgICAtMHgxLjAwMDFiMHAtMworICB9LAorICB7IC8vIEVudHJ5IDQKKyAgICAweDEuZmY4MDBlZmFlYmI4MjE4ZmM1ZDQ5MWI5ODY4Njg5YWFwLTEsCisgICAgLTB4MS4wMDAyMDhwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNQorICAgIDB4MS44ZWJkOWQwNDQ2MTgyZTkwNTZmNjA0ODlmY2QwMDJjZHAtMSwKKyAgICAtMHgxLjAwMDM4MHAtMgorICB9LAorICB7IC8vIEVudHJ5IDYKKyAgICAweDEuZTBmOTk1MDEwZmQ5NmQzZjI5NGMzZmZlMGU1MTI0MjZwLTEsCisgICAgLTB4MS4wMDA5ZjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3CisgICAgMHgxLjc4YTNiYjRjMTdhZGY1YjJkNDBlNmVlM2RiZDQ4NjZmcC0yLAorICAgIC0weDEuMDAwY3AwCisgIH0sCisgIHsgLy8gRW50cnkgOAorICAgIDB4MS5mZmRmZmQwMDNhYWNiZmNhNjU5MWU3YTM4MzY4Yjk0Y3AtMSwKKyAgICAtMHgxLjAwMjBwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgOQorICAgIDB4MS5mZGZmNDE2YWEzODI3ZDYzMzVhMWZmYTQzZDQ0MDU2MnAtMSwKKyAgICAtMHgxLjAwZTBwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMAorICAgIDB4MS45OTAwN2ZmYmRmZmFjMzFkZmY5MGRhNWVlNDZhMTZmYXAtNDcsCisgICAgLTB4MS4wMGUwcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMQorICAgIDB4MS4zNWMwZGNmZmZiNDQxOWRjMjk1NTVjMjMyZjNjZGNhN3AtMSwKKyAgICAtMHgxLjAxNGVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMgorICAgIDB4MS5mYmVkOWFjN2VkMDMyYWJmYzc2MzA2YTNlMWRjODE2YnAtMSwKKyAgICAtMHgxLjA1YTRwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMworICAgIDB4MS5lZmRkYjljY2NkNzNmNzFhNGIyYjhjMDFhNTdhZTc1ZnAtMSwKKyAgICAtMHgxLjA2NGNwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNAorICAgIDB4MS5mZmZkZjEwMTBmMzdlMmYxZjVmY2E4YjljMTNhZmY3MHAtMSwKKyAgICAtMHgxLjA3ODBwLTE2CisgIH0sCisgIHsgLy8gRW50cnkgMTUKKyAgICAweDEuZWZjMzU2NTM5MTJmYWRlNmExN2E4ZjhlZjQxMDk2NzlwLTEsCisgICAgLTB4MS4wOHAtNQorICB9LAorICB7IC8vIEVudHJ5IDE2CisgICAgMHgxLjhiMzA5NmZmZmNiZTczNzk2MWY4YzYxY2RmOWQ3MTM3cC0xLAorICAgIC0weDEuMDkyYzY4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTcKKyAgICAweDEuZmJkZDFjZTU2MWY5ZDBhNjg5ODEyZTViZWEwODlmOWNwLTEsCisgICAgLTB4MS4wOWNjcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTgKKyAgICAweDEuZWZhMWVmOGExOWQ0MGJiMjJjNWQzYzMxNTk5MWUxNWZwLTEsCisgICAgLTB4MS4wYTI4cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTkKKyAgICAweDEuZmZmZmVmMDljZTQ3ZWNjMDNkMWQxMWY5NDkxZTY1MTlwLTEsCisgICAgLTB4MS4wZjYzMjBwLTIxCisgIH0sCisgIHsgLy8gRW50cnkgMjAKKyAgICAweDEuZmZmZmVmMDljMDQ3ZWQzNmY4YWExYTdlNjdlMjY1MjhwLTEsCisgICAgLTB4MS4wZjY0cC0yMQorICB9LAorICB7IC8vIEVudHJ5IDIxCisgICAgMHgxLjg4OTA2MzZlMzFmNTQzYjM4NTNiMWIzMDVkYWViOTMzcC0xLAorICAgIC0weDEuMTBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMgorICAgIDB4MS5mZmZmZWYwMDAwNDgzZmZmMzM0YWFjNWRhYmZkMWM3ZHAtMSwKKyAgICAtMHgxLjEwcC0yMQorICB9LAorICB7IC8vIEVudHJ5IDIzCisgICAgMHgxLmVmMWMyZDAwMmY3NjM5ZDRkODJlZGMwMWVhYWQxZGVkcC0xLAorICAgIC0weDEuMTJjY3AtNQorICB9LAorICB7IC8vIEVudHJ5IDI0CisgICAgMHgxLmRlN2YwMTBkMWM2NDk0MTM5YjA1MzFiZDViOGYxMDhicC0xLAorICAgIC0weDEuMTUzNHAtNAorICB9LAorICB7IC8vIEVudHJ5IDI1CisgICAgMHgxLjAyMDU3ZDEyNDVjZWFmNjJhMjEwOTlkNDQ0MWEzNmRicC0xMDEsCisgICAgLTB4MS4xOHA2CisgIH0sCisgIHsgLy8gRW50cnkgMjYKKyAgICAweDEuZTkwNDA3MzRhMTYzMzM1NjdjZjZmMzFiYzkwZDQzNTVwLTI3LAorICAgIC0weDEuMjExNTg4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNworICAgIDB4MS44ZDAzZjhmZmZmYjFhMjYyMmJiYTgxZDZhYjRhOTJmZnAtMTQsCisgICAgLTB4MS4yODdkMDhwMworICB9LAorICB7IC8vIEVudHJ5IDI4CisgICAgMHgxLmU5N2U0MzAyNTdlNzVmNDk3ZjZhM2VmZTUxZmY1MDU0cC0xMTIsCisgICAgLTB4MS4zM2VmZWFwNgorICB9LAorICB7IC8vIEVudHJ5IDI5CisgICAgMHgxLmM2OWM1MThlYTdjNTg4NDJjMTc4ZmJkOWU4Y2Y1MzZlcC0xMTcsCisgICAgLTB4MS40MjE4ODhwNgorICB9LAorICB7IC8vIEVudHJ5IDMwCisgICAgMHgxLmRmMmEwZjkyYzE3ZTlmZjBiZmI3N2I3YWJiZTYzN2E2cC0xMjYsCisgICAgLTB4MS41YWQ2YjZwNgorICB9LAorICB7IC8vIEVudHJ5IDMxCisgICAgMHgxLjc4MmYyMzA2OGMxMGIxYzU1MTNkYzNiMDE5MmQzMGQ0cC0xMjcsCisgICAgLTB4MS41ZTk0NDRwNgorICB9LAorICB7IC8vIEVudHJ5IDMyCisgICAgMHgxLjcxMDYwMmY5ZjQyODgzNDhjYzgzNDg0NzJhMjRmOTNkcC0xMjcsCisgICAgLTB4MS41ZWE3ZjJwNgorICB9LAorICB7IC8vIEVudHJ5IDMzCisgICAgMHgxLjY1YWI3OTk0ZmYzNDQwZGNkM2VlN2Y5YjlhMDI0MjNhcC0xMjcsCisgICAgLTB4MS41ZWM3ZjJwNgorICB9LAorICB7IC8vIEVudHJ5IDM0CisgICAgMHgxLjYwMzFjYzQ1NGYxYzNlMDEyNmI3MWJmMjFlOTAzZDIwcC0xMjcsCisgICAgLTB4MS41ZWQ3YmVwNgorICB9LAorICB7IC8vIEVudHJ5IDM1CisgICAgMHgxLmI3OGY2ODAwMDMwZmI3ZWM3OTg0YTNlNzQxOWQ2ZmMycC0xMjksCisgICAgLTB4MS42MzgwNjZwNgorICB9LAorICB7IC8vIEVudHJ5IDM2CisgICAgMHgxLmY5MzYzZjM1ODMyNzlhYzI0ZTc1N2VlYjc2NTQ5MTBjcC0zLAorICAgIC0weDEuNjY0ZWUwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNworICAgIDB4MS5kNjE3ZjEwZTYzYWRmY2Q2NzQxNGMwOGRjNmY5ZDAxMHAtOSwKKyAgICAtMHgxLjY4NWI0NHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzgKKyAgICAweDEuY2Y4YzQ1MDNiZjE3ZDhjNzY0N2U5M2ExNTNhZjM3YjZwLTksCisgICAgLTB4MS42OTQxcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOQorICAgIDB4MS5kNDcwYjcwZTkwZDUwOTdlODdiOTI1YzVmNjNmZWU3ZHAtMSwKKyAgICAtMHgxLjZjMzMyOHAtNAorICB9LAorICB7IC8vIEVudHJ5IDQwCisgICAgMHgxLmE5YzBhNTAxMGRlODVmOWE2MGM4MTA0ZjM3ZmM1OTdmcC0xLAorICAgIC0weDEuNzljOTg0cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDEKKyAgICAweDEuZGZmMTI2ZmZmY2RkZTM0MzYzMjJiYTA5ZGI0NTU2ZTFwLTIsCisgICAgLTB4MS44M2ZmMzhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MgorICAgIDB4MS5kYTFiODMwMWFmODEzODRiOGU0OTVjOWE0Zjk3NDk3ZnAtNzIsCisgICAgLTB4MS44YTUyOWVwNQorICB9LAorICB7IC8vIEVudHJ5IDQzCisgICAgMHgxLmJhYmFmNGZmZmZlMjkwMjVjZTc1MTA5NGFlY2Y5YjAzcC0xOSwKKyAgICAtMHgxLjkzZTc4OHAzCisgIH0sCisgIHsgLy8gRW50cnkgNDQKKyAgICAweDEuNmU5NTNhZmZmZWM3ZmMzYjVkZGExN2M4MjA2Nzg4MjFwLTQzLAorICAgIC0weDEuZDcyM2Y4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NQorICAgIDB4MS5mZjBmZjZmM2Q5ZjQ5M2VkNjEwMzY0ODYxYTk5NTY2NHAtMSwKKyAgICAtMHgxLmUwODJjNHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NgorICAgIDB4MS5mZjM4YTQwYTNiYzMzZjY1ZjRiZWQ1ZGUwYmRmYzM5N3AtNDUsCisgICAgLTB4MS5lN2ZmZmVwNAorICB9LAorICB7IC8vIEVudHJ5IDQ3CisgICAgMHgxLjgwMjg5OTAwMzRmY2M4ZjMzNDQzMzIxZGIwOGM2ZGU4cC0yLAorICAgIC0weDEuZjVmOTIycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDgKKyAgICAweDEuZmYwMjQ4ZjFhMTc0MThlNjNkNDcxMWYzZTY2YjdjMjVwLTEsCisgICAgLTB4MS5mYmVjcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDQ5CisgICAgMHgxLmZmMDI0NmYyOWYyYzI2YzVlZDUxZDE2NDk4ZDFkNjhlcC0xLAorICAgIC0weDEuZmJmMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MAorICAgIDB4MS5mYTg3ZjY2ZjgxMjg0OTI5MjI5MGE5ZjYyNjhlZjJmOXAtMjQsCisgICAgLTB4MS5mZTdmZmVwMworICB9LAorICB7IC8vIEVudHJ5IDUxCisgICAgMHgxLmZmMDA0NmYyZDcxNmMwOTU3NzBkODQ5ZTE4MmEzYmIycC0xLAorICAgIC0weDEuZmZmMWZlcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDUyCisgICAgMHgxLmUwZmIyOTExNjU1MDA2NDIyYTE1YzNjMDNmOGNlODQ3cC0xLAorICAgIC0weDEuZmZmOGZlcC01CisgIH0sCisgIHsgLy8gRW50cnkgNTMKKyAgICAweDEuZmYwMDQwZjRkNmNhYzMxNmJkY2ZhMTNjYzVhZjdlN2NwLTEsCisgICAgLTB4MS5mZmZlcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDU0CisgICAgMHgxLmZmZTAwMTA4MWEyOGM0MjAyNjBhMTYxYjEyZmJiOTdkcC0xLAorICAgIC0weDEuZmZmZjdlcC0xMworICB9LAorICB7IC8vIEVudHJ5IDU1CisgICAgMHgxLjAwMDAwMTAwMDAwMDgwMDAwMDJhYWFhYWI1NTU1NTU3cDAsCisgICAgMHgxLnAtMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NgorICAgIDB4MS40MjY0MzZmNWFlYzFjMzEzYTZkMmJiY2Q1OGEzODhkZXA5MiwKKyAgICAweDEuMDAwMDIycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NworICAgIDB4MS5hNjE1ZTUwYTVlNTRlMWYyZjdlNTdjM2YwZmY5MGM2MXAwLAorICAgIDB4MS4wMDA0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTgKKyAgICAweDEuZDk1ZDYzMDE0Y2U1Y2RjZDExM2ZlZTBhNGJlNjc5MDJwMiwKKyAgICAweDEuMDAyMDM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OQorICAgIDB4MS43NjJiNjMwNGUxOWYzNTE4ZTkwMzQ4YjVkOWRjNTQ0ZXAxMSwKKyAgICAweDEuMDAyMnAzCisgIH0sCisgIHsgLy8gRW50cnkgNjAKKyAgICAweDEuYTYzNmUwMGEwY2Q1Yjg1MjYyNzU2ZDUwYjk1Y2NjODhwMCwKKyAgICAweDEuMDAyY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDYxCisgICAgMHgxLjhjYTZkMzA1ODdhZjUwNGE2ZjY5ZDNhNTdiZjNlNmE4cDExLAorICAgIDB4MS4wMnAzCisgIH0sCisgIHsgLy8gRW50cnkgNjIKKyAgICAweDEuZGZhMmQ3MDFkYTk4YTE0ODA2M2MzY2E2ZDEzZjFiY2VwOTMsCisgICAgMHgxLjA0NWNiNnA2CisgIH0sCisgIHsgLy8gRW50cnkgNjMKKyAgICAweDEuNjM0MGU3MDAwMGUyOTZlNzkwNzM2NzBlZjljMDkxNWRwMSwKKyAgICAweDEuMDU1MzNlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NAorICAgIDB4MS5lZjU5NWIwMTg1NDk0NDJlYzczZTNkNTE2MTc2OGQxNnA1LAorICAgIDB4MS4wODBkNzRwMgorICB9LAorICB7IC8vIEVudHJ5IDY1CisgICAgMHgxLjg5YWNkZjI2Zjk5MDEyZWM1MjdjNWU5ZTdjNDcxMTdmcDQ3LAorICAgIDB4MS4wODEwZWVwNQorICB9LAorICB7IC8vIEVudHJ5IDY2CisgICAgMHgxLmYzM2JlZjAwMDAzYWI5M2E0NjdjOTRmYzk1ZGVlZDMwcDUsCisgICAgMHgxLjA4OGQ3NHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjcKKyAgICAweDEuYjBmMzRhZmZmZjlkYzI0MzBiMzFjMmVhMDRmOWRmOTBwOTUsCisgICAgMHgxLjA5N2Y2YXA2CisgIH0sCisgIHsgLy8gRW50cnkgNjgKKyAgICAweDEuNmI0YWU1NTIyNjA0ZTEwMjczMjgzZWZiZjlmNjI2YzlwMSwKKyAgICAweDEuMGIwZGJhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OQorICAgIDB4MS4wMDAwMTEwMDAwOTA4MDAzMzJkNTYyZWQ2MDJlMzgyNHAwLAorICAgIDB4MS4xMHAtMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MAorICAgIDB4MS5iMzgwYjBmNmExMmZhMTlkZjM5MWY1MDM0YjhhZTMxYnAwLAorICAgIDB4MS4xMDA5YTRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MQorICAgIDB4MS5iNWQyOTNmNWJmYTIwNDE2NzIxOTk5YzZiZTAzYTE5NXAwLAorICAgIDB4MS4xMmMxZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MgorICAgIDB4MS5iNjYwOWZmNzg1YTA0NjMwNTMxMzU0ZDE5MjRmOGQxMXAwLAorICAgIDB4MS4xMzY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzMKKyAgICAweDEuNzgyNDFhZmZmZmQxY2Y5NjdhOWVlYzY2M2Y0NTY3N2VwMSwKKyAgICAweDEuMTNmMzdhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NAorICAgIDB4MS5iNzc2NjBmNThiY2IxZWUyZDc1N2E5N2Y4MmM4MjIzZHAwLAorICAgIDB4MS4xNGFjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzUKKyAgICAweDEuN2I0ZDZmMDZjZjBmYmQxZmJjMDVkNTA5MDgzNTIwNzVwMSwKKyAgICAweDEuMTYxOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzYKKyAgICAweDEuMjc2NTgxMDAwMmMyZWI0MjY1MzA4YWM4YjEyYWZhM2JwMCwKKyAgICAweDEuMjUyNzI2cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzcKKyAgICAweDEuOTJiMGFjZmZmZjFjODY0NmQ0MDc1OTc2ZjYyZGZiYzJwMSwKKyAgICAweDEuMjU2OTNlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OAorICAgIDB4MS5mYmQyMjRjN2UxOTcwYmVkODY4ZmFkYzgwMTJjODVhZXAxMywKKyAgICAweDEuMzY0NDg2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OQorICAgIDB4MS4wNjAwN2QwMDA4NDM0OWY5NDkxMTA0ZjIwYzg5ZjJmOXAyOCwKKyAgICAweDEuMzZlNjk2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MAorICAgIDB4MS41ZWMxODQwMDAwMzQxOWFkMzgxNWI0MWM0NTM4NGRjY3AwLAorICAgIDB4MS40Mjc4OThwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MQorICAgIDB4MS5iMjNmZGFjZmEzZTBkOWQyMWIzNDI5ODNlMTU5ZmVkY3AxMTgsCisgICAgMHgxLjQ5NDc3Y3A2CisgIH0sCisgIHsgLy8gRW50cnkgODIKKyAgICAweDEuZmVhMDAwZTI0MzgyMTRjYTkxNTVkNGM5MWJkMjllOWFwMTE5LAorICAgIDB4MS40Y2IzMmNwNgorICB9LAorICB7IC8vIEVudHJ5IDgzCisgICAgMHgxLmY2NzE3NmMxOWZlZTBjOWE4ZDFjOWNiYjJkNzNiNjE3cDEyMCwKKyAgICAweDEuNGY2ODZhcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NAorICAgIDB4MS5kMWMyNDEwMjRkODQxYmQ1Mjk3MmJlNjE4MjYzMzczM3AxMjEsCisgICAgMHgxLjUxZTA5MHA2CisgIH0sCisgIHsgLy8gRW50cnkgODUKKyAgICAweDEuY2RlMmRkMDcwYzdkZTljYjU4YzBjYWVkOTI3MTQ1ZDhwMywKKyAgICAweDEuNTViNGUycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NgorICAgIDB4MS5mNzEwOTAwOWNkMzQ5NGFmNTI2YzE4YWYwMTkwNTVlZXAwLAorICAgIDB4MS41OWUwOGVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NworICAgIDB4MS5mYTdjMjZjMTJhZmI4N2I1YjJiMTUxZTY1NGY2ZWI5MHAwLAorICAgIDB4MS41ZDU4YWVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OAorICAgIDB4MS5jZjNkNDZjYjk4YTU3MTg3MWY2ZGVlMWE4MDU4MWE1MnAxMjYsCisgICAgMHgxLjVmYjdlY3A2CisgIH0sCisgIHsgLy8gRW50cnkgODkKKyAgICAweDEuZmQ4NzE4ZjNkM2VkOGY0YTVkOGRlYzZhZTczMjcxNTlwNywKKyAgICAweDEuNjI5NGUycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MAorICAgIDB4MS5mZWFmZmVmM2U3MzZiNzE1NjlhNDc0MDQyMDU0ZThiN3A3LAorICAgIDB4MS42MmJhMjJwMgorICB9LAorICB7IC8vIEVudHJ5IDkxCisgICAgMHgxLmY3NmJhNDY3MzNmNDE0NmEwZjk0YjNkMTMxMTQ5NGJjcDEyNywKKyAgICAweDEuNjJkMmUycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MgorICAgIDB4MS5mZDdiOWYwMWI0ZGYwODg1NWZlYjI5MDIzMjMyZmQ5OXAxMjcsCisgICAgMHgxLjYyZGYyNHA2CisgIH0sCisgIHsgLy8gRW50cnkgOTMKKyAgICAweDEuZmY2OTFlNmRkNzFiYzhjYjFmMWZjZmZjYzMyY2I5ODJwMTI3LAorICAgIDB4MS42MmUzMDJwNgorICB9LAorICB7IC8vIEVudHJ5IDk0CisgICAgMHgxLmZmY2UwYTllNGZjNjc2MmM5MWYxYTBjZTM1OGE4NDg3cDEyNywKKyAgICAweDEuNjJlM2NjcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NQorICAgIDB4MS5mZmZjMDEwOWM0MDJkOGIyM2JmZWEzYTE0ODM1ODMxYnAxNSwKKyAgICAweDEuNjJlM2YwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NgorICAgIDB4MS5mZmYxMDg2NjMyYjBlOWI5M2JjNWJlNDRkOWMxZGVhN3AxMjcsCisgICAgMHgxLjYyZTQxMnA2CisgIH0sCisgIHsgLy8gRW50cnkgOTcKKyAgICAweDEuZmZmNjA4NDcwNzg2ZDdlNDdlZjExNjYyZjE3OTBjMmFwMTI3LAorICAgIDB4MS42MmU0MWNwNgorICB9LAorICB7IC8vIEVudHJ5IDk4CisgICAgMHgxLjIzMmI5NmZmZWMxNDdiYjMxNjk1NTk1ODc4YmE0ZjlkcDQsCisgICAgMHgxLjczNWU3MHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTkKKyAgICAweDEuOGQyYzk5MDMxNzY2MGUyMWE2NGJhNzcyM2Y1ZTBlZDNwOCwKKyAgICAweDEuN2ZwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMAorICAgIDB4MS5lZDM3OWYwMjU3ODFkZGNhMjQwYzgzMzc1ZWU0OTZhYnA3MCwKKyAgICAweDEuODk2ODlhcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEKKyAgICAweDEuMzY4NzQxMDAwMGUyYzlmODczMjIwOGM5NzkxOWZiMGVwMCwKKyAgICAweDEuOGI3NmQwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTAyCisgICAgMHgxLjMxMmU3OWZmNTIyYWY3MWI5ZTJlODM3YmY4ODcyOTcycDIsCisgICAgMHgxLjhmZTBjYXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTAzCisgICAgMHgxLjcwMDhmMTAwMjAyMjZlNGY1OWI1YWZkOGMxMTdjMDk2cDQsCisgICAgMHgxLjkxNWFmY3AxCisgIH0sCisgIHsgLy8gRW50cnkgMTA0CisgICAgMHgxLmRlNzVlOTAyMjVlYzZkYTJjZmIzOWRjYTY0NDBiNjg4cDc1LAorICAgIDB4MS5hNGU0MzhwNQorICB9LAorICB7IC8vIEVudHJ5IDEwNQorICAgIDB4MS43OWYwNjUwMDk1ZmQ0MjZkY2U4YWE4MDNlOWE0ZmM5OHA5LAorICAgIDB4MS5hODJmMzBwMgorICB9LAorICB7IC8vIEVudHJ5IDEwNgorICAgIDB4MS4yZTAyZDZmZmZmZmVkOTdmMjdkY2MzNzQyNDcyZmZhNHAxLAorICAgIDB4MS5iNzg0OThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcKKyAgICAweDEuZmEyYjYwZmZmZmZlZWExYzdiZDFjNzhiYjVjNDZiMTdwOSwKKyAgICAweDEuYmFlMTk2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgKKyAgICAweDEuMDAwNzM0ZmZmZmZmYmFiYTQ4MjBhMmI3OWQyOTZkNjNwMCwKKyAgICAweDEuY2QzOTgycC0xNAorICB9LAorICB7IC8vIEVudHJ5IDEwOQorICAgIDB4MS5kNTQxNThmNTQzNGVkYjJhMjM0MzU5YmVmYjIyMDliY3AxMCwKKyAgICAweDEuZTI2NTcwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAKKyAgICAweDEuOTlmYjI5MDE3NmVjMDEwZDA2OGM1Zjg4OGExOGQ4NDdwODcsCisgICAgMHgxLmU2MzJhYXA1CisgIH0sCisgIHsgLy8gRW50cnkgMTExCisgICAgMHgxLmJjOGU1MzAwMDAzZTEyZWFmMGVhMDRiOGM1MDc2NDc0cDIsCisgICAgMHgxLmYwMmQ2OHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTEyCisgICAgMHgxLjU2NTY3MmZmZmZlNzgxNjhjZWE5ZWQxZGVlZDJjNDcycDEsCisgICAgMHgxLmY3YjA1Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDExMworICAgIDB4MS5hNjY0ZGNlZDdjYzMzZWRlOTY1MzkyNzIyYjBkODdiZnAyMiwKKyAgICAweDEuZjdmZmZlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQKKyAgICAweDEuZmU4YmZkMzg3NjI0OTBjN2Y2OGU4MGE0YmRmM2ExN2RwOTAsCisgICAgMHgxLmY4OTZhMnA1CisgIH0sCisgIHsgLy8gRW50cnkgMTE1CisgICAgMHgxLmNjMjRkNTBjMTY1MDAwODQ3NTRmYmRkYzYwZTcyNzZjcDIsCisgICAgMHgxLmY4ZmZmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTE2CisgICAgMHgxLjcyMTUxYzY5ZmYwZTk4NTBiODhjYmQ5YTYwMGZlYTUwcDExLAorICAgIDB4MS5mZjkwMGVwMgorICB9LAorICB7IC8vIEVudHJ5IDExNworICAgIDB4MS4zZDU5ZDJkOGIyMmI0MWMyYmI2MzM0YzliZTdiZTkwMnA5MiwKKyAgICAweDEuZmZkZmZlcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgKKyAgICAweDEuNzQ4NzUzMDAwNDJiOTQzYmEzNjg5OTRlZWM4ZGNiMGVwMTEsCisgICAgMHgxLmZmZmJmZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE5CisgICAgMHgxLmQ4ZTYwOTBjZWZlODA0ODc5NDhjMDFlZmUzY2Y0YzVhcDIsCisgICAgMHgxLmZmZmZkY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTIwCisgICAgMHgxLjAwMDAwMGZmZmZmZTdmZmZmZTJhYWFhYmI1NTU1NzAycDAsCisgICAgMHgxLmZmZmZmY3AtMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjEKKyAgICAweDEuMzA0ZDFlZDk1MTFiZjVhNmE1YjIwZTRjZGJmNmQ4ZmZwNjksCisgICAgMHgxLjdmZmZmZXA1CisgIH0sCisgIHsgLy8gRW50cnkgMTIyCisgICAgMHgxLjMwNGQ2YWVjYTI1NGIzYWY0YmM1ZDYyOTNkNWY2NWM3cDY5LAorICAgIDB4MS44MHA1CisgIH0sCisgIHsgLy8gRW50cnkgMTIzCisgICAgMHgxLjMwNGRiNzAwMDY5MjQ4NjZiYzE4NDUwOTdjOTFlNDg4cDY5LAorICAgIDB4MS44MDAwMDJwNQorICB9LAorICB7IC8vIEVudHJ5IDEyNAorICAgIDB4MS5mOGU2NDQxMWI0Yzc0MjlmMjYwY2I3MjUzOTg4MDkxOXAtNzYsCisgICAgLTB4MS5hMDAwMDJwNQorICB9LAorICB7IC8vIEVudHJ5IDEyNQorICAgIDB4MS5mOGU2YzI0YjU1OTJlMzQyMWRmMjdhY2YxZTA4MDE0NHAtNzYsCisgICAgLTB4MS5hMHA1CisgIH0sCisgIHsgLy8gRW50cnkgMTI2CisgICAgMHgxLmY4ZTc0MDg1MTVlY2YwMDljYjViN2ZlODAwMDNhZTc0cC03NiwKKyAgICAtMHgxLjlmZmZmZXA1CisgIH0sCisgIHsgLy8gRW50cnkgMTI3CisgICAgMHgxLjU1NzZmMGRjYWMyMTc4N2YyZDU3YjE0YTcwMDIyNGUzcDExNSwKKyAgICAweDEuM2ZmZmZlcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgKKyAgICAweDEuNTU3NzliOTg0ZjNlYjNjOGE1MDNiNGE4ZTI0ODlkOThwMTE1LAorICAgIDB4MS40MHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTI5CisgICAgMHgxLjU1Nzg0NjU0NDdiOWQ1ZjgzMjQ2YWYxZTQ4ZTgyMjVicDExNSwKKyAgICAweDEuNDAwMDAycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAKKyAgICAweDEuMDdiNjhkNTA1YTYwZGQ0NDRiOGIyYmRmZTA2MDM4Y2ZwLTEyNywKKyAgICAtMHgxLjYwMDAwMnA2CisgIH0sCisgIHsgLy8gRW50cnkgMTMxCisgICAgMHgxLjA3YjcxMTJiYzFmZmUxOWQzZTcwM2U0YTc5NGY3MzcycC0xMjcsCisgICAgLTB4MS42MHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTMyCisgICAgMHgxLjA3Yjc5NTA3NmI4Y2FhNDEyMzM0ZTdkZGYxOGIwMGY1cC0xMjcsCisgICAgLTB4MS41ZmZmZmVwNgorICB9LAorICB7IC8vIEVudHJ5IDEzMworICAgIDB4MS4wMzk5MjQ0MjhmNDc1MTFjMDNlNzVkZDYyM2JjNDdlMXA3NSwKKyAgICAweDEuOWZmZmZlcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQKKyAgICAweDEuMDM5OTY1MjhlMDc0YmViY2ZkNzY0MTZmYzJjMGViOTJwNzUsCisgICAgMHgxLmEwcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUKKyAgICAweDEuMDM5OWE2MGY0MWRiYzJiMDg1MjIxMzEyZjUwNTA4OWRwNzUsCisgICAgMHgxLmEwMDAwMnA1CisgIH0sCisgIHsgLy8gRW50cnkgMTM2CisgICAgMHgxLmFlYmE0ZjM1MDJkODM3OTUxODg5NzQwODkwNzQ3NjA5cC03MCwKKyAgICAtMHgxLjgwMDAwMnA1CisgIH0sCisgIHsgLy8gRW50cnkgMTM3CisgICAgMHgxLmFlYmFiYWUzYTQxYjRiZTNmNTc2ZTcwMzAzYTM3OTMycC03MCwKKyAgICAtMHgxLjgwcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzgKKyAgICAweDEuYWViYjI2OTI2MDRhMGJlMTBjYzlmM2EwOWU3N2FhZTFwLTcwLAorICAgIC0weDEuN2ZmZmZlcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzkKKyAgICAweDEuZjEwNDc1NDU0NjVmOTdhYWQ2Nzc0ZGZlMTZiOTYwZTJwMTI2LAorICAgIDB4MS41ZmZmZmVwNgorICB9LAorICB7IC8vIEVudHJ5IDE0MAorICAgIDB4MS5mMTA1NmRjN2JmMjJkM2RlMGVkNTc2MTViYzUwMWY4YnAxMjYsCisgICAgMHgxLjYwcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDEKKyAgICAweDEuZjEwNjY2NGFiNDI3NmI4MzM5OTMwNTBjOWFhMDlhOTVwMTI2LAorICAgIDB4MS42MDAwMDJwNgorICB9LAorICB7IC8vIEVudHJ5IDE0MgorICAgIDB4MS43ZmQ4YjRlNmU4NzViNTk4OGFlYjJlOTA4M2NhZjc5MXAtMTE2LAorICAgIC0weDEuNDAwMDAycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDMKKyAgICAweDEuN2ZkOTc0ZDM3MmU0NDg2ZjcyMzU4YWNkZDEyNjkwZTVwLTExNiwKKyAgICAtMHgxLjQwcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDQKKyAgICAweDEuN2ZkYTM0YzA1ZDQ5Mzg3YjM4MzhjNWMyYmZhZDAxMjNwLTExNiwKKyAgICAtMHgxLjNmZmZmZXA2CisgIH0sCisgIHsgLy8gRW50cnkgMTQ1CisgICAgMHgxLjZhMzJlMTYwNjQ1ZGM1MzY0ZGE5M2MxMjMyMTVjNTkxcC0xMDcsCisgICAgLTB4MS4yNzQ3NjhwNgorICB9LAorICB7IC8vIEVudHJ5IDE0NgorICAgIDB4MS40MmEyODBiNDdmMWU1MGU3MzA3Yzk1OTllOTQ5NzVkYXAtMTIxLAorICAgIC0weDEuNGU4ZWQwcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDcKKyAgICAweDEuMWY2NDc5ZDZlNzlkOTI0NzU5YzdmNDQxNjBhZDMwZTNwLTEzNSwKKyAgICAtMHgxLjc1ZDYzOHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTQ4CisgICAgMHgxLmZmZmZmZmVmYTM5ZWYzOWE3ZjI1NDUzNWQ5MzUxNDJicC0yLAorICAgIC0weDEuNjJlNDMwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQ5CisgICAgMHgxLjAwMDAwMGY3ZDFjZmYxOWYwZjMzMDM2Y2YwMWMxMjBjcC0xLAorICAgIC0weDEuNjJlNDJlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTUwCisgICAgMHgxLjAwMDAwMWY3ZDFkMTY5NzBkZmNiMzYwZWZhOTFmZWEwcC0xLAorICAgIC0weDEuNjJlNDJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTUxCisgICAgMHgxLjZhMDllNjYyMmFlYmZiZDdhNGEwMzc3NzIyM2M2MDRmcC0xLAorICAgIC0weDEuNjJlNDMwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTUyCisgICAgMHgxLjZhMDllNzE3MmZkZjVhMmU1NzcxZjM4NjZhMjU1MTRlcC0xLAorICAgIC0weDEuNjJlNDJlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTUzCisgICAgMHgxLjZhMDllN2NjMzRkMzEzMDc4NDA5N2I4ZDhhN2M5MDA4cC0xLAorICAgIC0weDEuNjJlNDJjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTU0CisgICAgMHgxLmFlODlmOTkyM2NiYjQ5MTgzYWFiYjMzYjlkZTFiYzgycC0xLAorICAgIC0weDEuNjJlNDMwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTU1CisgICAgMHgxLmFlODlmOWZkZGYzOWJiMWJiOTRiYWEzNmM5OGFiYjdicC0xLAorICAgIC0weDEuNjJlNDJlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTU2CisgICAgMHgxLmFlODlmYTY5ODFiODQ4MDdkNzhiN2YyNTkxMDk1NmRlcC0xLAorICAgIC0weDEuNjJlNDJjcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTU3CisgICAgMHgxLmQ1ODE4ZGNkZGEzMDFiY2E5NWZiY2M1MzBhYjliOTM4cC0xLAorICAgIC0weDEuNjJlNDMwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTU4CisgICAgMHgxLmQ1ODE4ZTA4OGE2MWQ5MzBkZjFiMDg3YTRiOTI4ZWEwcC0xLAorICAgIC0weDEuNjJlNDJlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTU5CisgICAgMHgxLmQ1ODE4ZTQzM2E5MzlkZWQyZTcyNjZjYjEzZDI5OTg2cC0xLAorICAgIC0weDEuNjJlNDJjcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTYwCisgICAgMHgxLmVhNGFmYTI5NGU2MGI0YmZhMjQ0OTQ2MTBlNzUyNjFjcC0xLAorICAgIC0weDEuNjJlNDMwcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTYxCisgICAgMHgxLmVhNGFmYTQ3ZjMxMDU4NDlhZGNjZmExZGQ1YjNmOTNkcC0xLAorICAgIC0weDEuNjJlNDJlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTYyCisgICAgMHgxLmVhNGFmYTY2OTdiZmZkYmUwNDRmYTdjZGFkNGIzZWU3cC0xLAorICAgIC0weDEuNjJlNDJjcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTYzCisgICAgMHgxLmY1MDc2NWI2NjQzZWZhYTJjYTllNjY5MDkzM2U1YzM3cC0xLAorICAgIC0weDEuNjJlNDMwcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTY0CisgICAgMHgxLmY1MDc2NWM2MGM3YTI4OTQ4ZDgyZjMxYTcyODgyMzJmcC0xLAorICAgIC0weDEuNjJlNDJlcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTY1CisgICAgMHgxLmY1MDc2NWQ1YjRiNTU3MDM5MjQwZjEyNzcwNWMxMWU3cC0xLAorICAgIC0weDEuNjJlNDJjcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTY2CisgICAgMHgxLjA1OWIwZDIxNDE4NmNmZjlhOTc0YmNiODgzY2Y2OGRlcDAsCisgICAgMHgxLjYyZTQyY3AtNgorICB9LAorICB7IC8vIEVudHJ5IDE2NworICAgIDB4MS4wNTliMGQyOTZlNWYzOTI0NjkwY2UxMDUzM2ZlNTk5YnAwLAorICAgIDB4MS42MmU0MmVwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjgKKyAgICAweDEuMDU5YjBkMzE5YjM3YTI5MDhmNjg0ZmFkN2JmYjk0ZDBwMCwKKyAgICAweDEuNjJlNDMwcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTY5CisgICAgMHgxLjBiNTU4NmFlYjY4ZWEyNGM5MjgxZjI1Yjc5ZDg0ZjgzcDAsCisgICAgMHgxLjYyZTQyY3AtNQorICB9LAorICB7IC8vIEVudHJ5IDE3MAorICAgIDB4MS4wYjU1ODZiZjZiZTcwZGJkYTYyZjcxNDhjZDVhNzg4ZnAwLAorICAgIDB4MS42MmU0MmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzEKKyAgICAweDEuMGI1NTg2ZDAyMTNmN2EzYTBmNjNhZmEyMDdlYTc1ODdwMCwKKyAgICAweDEuNjJlNDMwcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTcyCisgICAgMHgxLjE3MmI4MzgzMjdhZTFmOWQ3ZTcwNDE4YTQ3NmRhNDgwcDAsCisgICAgMHgxLjYyZTQyY3AtNAorICB9LAorICB7IC8vIEVudHJ5IDE3MworICAgIDB4MS4xNzJiODNhNjBkMWU5MjMwY2IzYjUyY2QxMjAwYjhkY3AwLAorICAgIDB4MS42MmU0MmVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzQKKyAgICAweDEuMTcyYjgzYzhmMjhmMDkyMGM2MTRmYzQ0NTZkZTA0OWZwMCwKKyAgICAweDEuNjJlNDMwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTc1CisgICAgMHgxLjMwNmZlMDBkNTIxYzViMzViZjM3MzczOGIwYTEyZTFhcDAsCisgICAgMHgxLjYyZTQyY3AtMworICB9LAorICB7IC8vIEVudHJ5IDE3NgorICAgIDB4MS4zMDZmZTA1OTZlMTQ2ODBkYzU0ZjNhMmVhMTVlM2FmY3AwLAorICAgIDB4MS42MmU0MmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzcKKyAgICAweDEuMzA2ZmUwYTU4YTBjODdlY2M5NmNkNDA1ZDhiNTgyZGJwMCwKKyAgICAweDEuNjJlNDMwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTc4CisgICAgMHgxLjZhMDllNTAzYjJhN2RkOTljZjk0NzRiMTE1YTczZWNlcDAsCisgICAgMHgxLjYyZTQyY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDE3OQorICAgIDB4MS42YTA5ZTViOGI3OWE4Y2I0NjAyYjQyY2Q0Yzk5ZTYwZXAwLAorICAgIDB4MS42MmU0MmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODAKKyAgICAweDEuNmEwOWU2NmRiYzhkOTY1MTZhMzAzZWQwMjg5YzVkMzZwMCwKKyAgICAweDEuNjJlNDMwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTgxCisgICAgMHgxLmZmZmZmYzEwNWM2NGVjMzI5MmYyYWZhYzNmMWE0MzBkcDAsCisgICAgMHgxLjYyZTQyY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDE4MgorICAgIDB4MS5mZmZmZmUxMDVjNjFmYzhlZjYzYzY1YzY2YTlkNDk3MXAwLAorICAgIDB4MS42MmU0MmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODMKKyAgICAweDEuMDAwMDAwMDgyZTMwODY3NWFiY2IzYzIxNWVhY2Y4NGFwMSwKKyAgICAweDEuNjJlNDMwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTg0CisgICAgMHgxLmZmZmZmODIwYjhkMTk3Nzk2OTJmYjBmY2MwMjgxMjQ2cDEsCisgICAgMHgxLjYyZTQyY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTg1CisgICAgMHgxLmZmZmZmYzIwYjhjNWQ4ZWFmZjRhYzAxM2NmNzM0NjM5cDEsCisgICAgMHgxLjYyZTQyZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTg2CisgICAgMHgxLjAwMDAwMDEwNWM2MTBkMmU0MmY0NTkyMjc2OGE4ZTZjcDIsCisgICAgMHgxLjYyZTQzMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTg3CisgICAgMHgxLmZmZmZmMDQxNzFjMjJiNDNhMjhkODA4OGMzNDdiZjFmcDMsCisgICAgMHgxLjYyZTQyY3AxCisgIH0sCisgIHsgLy8gRW50cnkgMTg4CisgICAgMHgxLmZmZmZmODQxNzE5MzMxMGE0MjliNzFlNzBkNzkyMTg2cDMsCisgICAgMHgxLjYyZTQyZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTg5CisgICAgMHgxLjAwMDAwMDIwYjhjMjFiNjgzMzYwM2U1MTg5N2M1OThjcDQsCisgICAgMHgxLjYyZTQzMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTkwCisgICAgMHgxLmZmZmZlMDgyZTQwMDQ3Yzg5ZGZhNDFkMDljMWUxZWY4cDcsCisgICAgMHgxLjYyZTQyY3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTkxCisgICAgMHgxLmZmZmZmMDgyZTM0NDVlZTU1YjNmYTg0YTVkZDg0OWM5cDcsCisgICAgMHgxLjYyZTQyZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTkyCisgICAgMHgxLjAwMDAwMDQxNzE4NDNhZmYxYzllZjE0MzQxYmZhNDJlcDgsCisgICAgMHgxLjYyZTQzMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTkzCisgICAgMHgxLmZmZmZjMTA1YzlmMDU0ODc2MGE4MjNiMGRmZGFlYjY2cDE1LAorICAgIDB4MS42MmU0MmNwMworICB9LAorICB7IC8vIEVudHJ5IDE5NAorICAgIDB4MS5mZmZmZTEwNWM3MDBiMTBjM2UyYTU0OWZiZGViYjBkYXAxNSwKKyAgICAweDEuNjJlNDJlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTUKKyAgICAweDEuMDAwMDAwODJlMzA4ODZiOTEwYjlkODc1MjgyODM4OWRwMTYsCisgICAgMHgxLjYyZTQzMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTk2CisgICAgMHgxLmZmZmY4MjBiOWI5ZmJjNmQ1ZGRhNDA2YWQ5ZjkzMzU0cDMxLAorICAgIDB4MS42MmU0MmNwNAorICB9LAorICB7IC8vIEVudHJ5IDE5NworICAgIDB4MS5mZmZmYzIwYjhmZTEyZjEwMTc0MGFjOTY1M2Y3OGZlM3AzMSwKKyAgICAweDEuNjJlNDJlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTgKKyAgICAweDEuMDAwMDAxMDVjNjExNTA1ZDdmNzRhNDE0MzMzMTJkcDMyLAorICAgIDB4MS42MmU0MzBwNAorICB9LAorICB7IC8vIEVudHJ5IDE5OQorICAgIDB4MS5mZmZlMDgyZjI4Njg4ZDM4NzJhYjhhYTY5ZjNkYzM1OHAxMjcsCisgICAgMHgxLjYyZTQyY3A2CisgIH0sCisgIHsgLy8gRW50cnkgMjAwCisgICAgMHgxLmZmZmYwODJlNmM3ZmVkMWQzZmQ1Y2ZmN2UxZjYwNTkxcDEyNywKKyAgICAweDEuNjJlNDJlcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDEKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLjYyZTQzMHA2CisgIH0sCisgIHsgLy8gRW50cnkgMjAyCisgICAgMC4wZiwKKyAgICAtMHgxLjlkMWRhMnA2CisgIH0sCisgIHsgLy8gRW50cnkgMjAzCisgICAgMC4wZiwKKyAgICAtMHgxLjlkMWRhMHA2CisgIH0sCisgIHsgLy8gRW50cnkgMjA0CisgICAgMHgxLjAwMDA3MzNkMzdiMWQwOGE4MGQ3ZjViNDVhNTdiODg4cC0xNDksCisgICAgLTB4MS45ZDFkOWVwNgorICB9LAorICB7IC8vIEVudHJ5IDIwNQorICAgIDB4MS44ZWJlZjkyMzY4YTNlYWZhNTE5NzQwNTg0YzBiYzNiNHAtMSwKKyAgICAtMHgxLjAwMDAwMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDIwNgorICAgIDB4MS44ZWJlZjllYWM4MjBhZTg2ODJiOTc5M2FjNmQxZTc3MnAtMSwKKyAgICAtMHgxLnAtMgorICB9LAorICB7IC8vIEVudHJ5IDIwNworICAgIDB4MS44ZWJlZmE0ZTc3ZGYzNWFlODJiNTdhZjEyMTUxOGNlZnAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMworICB9LAorICB7IC8vIEVudHJ5IDIwOAorICAgIDB4MS5jM2Q2YTFkZGUyNzk5MmUxMjllZDc4YTY1NTczZjg3OHAtMSwKKyAgICAtMHgxLjAwMDAwMnAtMworICB9LAorICB7IC8vIEVudHJ5IDIwOQorICAgIDB4MS5jM2Q2YTI0ZWQ4MjIxODc4N2Q2MjRkM2U1ZWJhOTVmNXAtMSwKKyAgICAtMHgxLnAtMworICB9LAorICB7IC8vIEVudHJ5IDIxMAorICAgIDB4MS5jM2Q2YTI4NzUyZjY2NWRiMmVlYTFmYTU4NzY3OThhM3AtMSwKKyAgICAtMHgxLmZmZmZmZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDIxMQorICAgIDB4MS5lMGZhYmY4MDUwZDI0OTE5ZDM1Nzk0NmY5ZTg4MDc1NHAtMSwKKyAgICAtMHgxLjAwMDAwMnAtNAorICB9LAorICB7IC8vIEVudHJ5IDIxMgorICAgIDB4MS5lMGZhYmZiYzcwMmEzY2U1ZTMxZmUwNjA5MzU4YmFmZHAtMSwKKyAgICAtMHgxLnAtNAorICB9LAorICB7IC8vIEVudHJ5IDIxMworICAgIDB4MS5lMGZhYmZkYTdmZDYzOTlkNjMyMzkxZjk3NzFmM2U4MnAtMSwKKyAgICAtMHgxLmZmZmZmZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDIxNAorICAgIDB4MS5mMDNmNTY4OTg3NjgwZjg0MTlkZTdkNjZkMGE2MTllY3AtMSwKKyAgICAtMHgxLjAwMDAwMnAtNQorICB9LAorICB7IC8vIEVudHJ5IDIxNQorICAgIDB4MS5mMDNmNTZhODhiNWQ3OTE0YjAwYWJmOTc3NjI3MzVkMXAtMSwKKyAgICAtMHgxLnAtNQorICB9LAorICB7IC8vIEVudHJ5IDIxNgorICAgIDB4MS5mMDNmNTZiODBkNTgyZTk3MTJlMTVkZjNjYzllOGU5Y3AtMSwKKyAgICAtMHgxLmZmZmZmZXAtNgorICB9LAorICB7IC8vIEVudHJ5IDIxNworICAgIDB4MS5mODBmZWFiMDJlN2FmMzY3NWIzNmViNmMzYzcxYTVlZXAtMSwKKyAgICAtMHgxLjAwMDAwMnAtNgorICB9LAorICB7IC8vIEVudHJ5IDIxOAorICAgIDB4MS5mODBmZWFiZmVlZmE0OTI3ZDEwYmRkNTRlYWQ1YWE0NnAtMSwKKyAgICAtMHgxLnAtNgorICB9LAorICB7IC8vIEVudHJ5IDIxOQorICAgIDB4MS5mODBmZWFjN2NmMzlmNDM3NGQ3NDU4MDhhNzgxMzBlY3AtMSwKKyAgICAtMHgxLmZmZmZmZXAtNworICB9LAorICB7IC8vIEVudHJ5IDIyMAorICAgIDB4MS5mYzAzZmQ0ZWJhMTI1YTRkMzQ1NWJmNzJjYmM5MzlmN3AtMSwKKyAgICAtMHgxLjAwMDAwMnAtNworICB9LAorICB7IC8vIEVudHJ5IDIyMQorICAgIDB4MS5mYzAzZmQ1NmFhMjI0Zjk3ZmNiZjEzMzI5ODg4NDJkZXAtMSwKKyAgICAtMHgxLnAtNworICB9LAorICB7IC8vIEVudHJ5IDIyMgorICAgIDB4MS5mYzAzZmQ1YWEyMmE0YTQ5NDkwYmFkMTI4YmE1YWY5M3AtMSwKKyAgICAtMHgxLmZmZmZmZXAtOAorICB9LAorICB7IC8vIEVudHJ5IDIyMworICAgIDB4MS5mZTAwZmZhNmMzZjliZDIwMjkyODk3ZjQyZDdiOWQ3NnAtMSwKKyAgICAtMHgxLjAwMDAwMnAtOAorICB9LAorICB7IC8vIEVudHJ5IDIyNAorICAgIDB4MS5mZTAwZmZhYWJmZmJiYzcxYWQxZTExODRhZmMxOWM3ZXAtMSwKKyAgICAtMHgxLnAtOAorICB9LAorICB7IC8vIEVudHJ5IDIyNQorICAgIDB4MS5mZTAwZmZhY2JkZmNiYzFkNmMxYTRkY2MxMWRkYjZkOHAtMSwKKyAgICAtMHgxLmZmZmZmZXAtOQorICB9LAorICB7IC8vIEVudHJ5IDIyNgorICAgIDB4MS5mZjAwM2ZmMzU3YWE0ODk3MDk1N2EyY2Y3ZDdhNmNhY3AtMSwKKyAgICAtMHgxLjAwMDAwMnAtOQorICB9LAorICB7IC8vIEVudHJ5IDIyNworICAgIDB4MS5mZjAwM2ZmNTU2YWE4ODhiNjA4MjBiNjA4N2QxZTkxYXAtMSwKKyAgICAtMHgxLnAtOQorICB9LAorICB7IC8vIEVudHJ5IDIyOAorICAgIDB4MS5mZjAwM2ZmNjU2MmFhODg2NGJiNzU3YTRlZDhkOTY4NnAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjkKKyAgICAweDEuZmY4MDBmZmRhYWZmZjZlZmU0ZGYzZjdmNWNlMjNhY2NwLTEsCisgICAgLTB4MS4wMDAwMDJwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjMwCisgICAgMHgxLmZmODAwZmZlYWFiZmZlZWVmYTRmM2NmNzBmNTlkOWJmcC0xLAorICAgIC0weDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDIzMQorICAgIDB4MS5mZjgwMGZmZjJhYTAwMmVlYjRmYjNkMzJjNDk4YThmZnAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzIKKyAgICAweDEuZmZmMDAwM2ZkZjU2NTZhNmE5OTMyZGY2MjgzY2ZjYmRwLTEsCisgICAgLTB4MS4wMDAwMDJwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMjMzCisgICAgMHgxLmZmZjAwMDNmZmY1NTU2YWFhODg4OGI2MGIyY2IyZmYycC0xLAorICAgIC0weDEucC0xMworICB9LAorICB7IC8vIEVudHJ5IDIzNAorICAgIDB4MS5mZmYwMDA0MDBmNTRkNmFjYThjMzM0MTYxMDEwMDk5ZXAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzUKKyAgICAweDEuNDhiNWUzNzFiYTlmN2ZjMjI0Yzc1ZDE5OGZlNGNkMWJwMCwKKyAgICAweDEuZmZmZmZlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMjM2CisgICAgMHgxLjQ4YjVlM2MzZTgxODY2NzY3YmMzYjY5YmFhYmU1MzRlcDAsCisgICAgMHgxLnAtMgorICB9LAorICB7IC8vIEVudHJ5IDIzNworICAgIDB4MS40OGI1ZTQ2ODQzMGE3MTgxNDQ3NjQ3ZmMwM2FkYmZiNnAwLAorICAgIDB4MS4wMDAwMDJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzgKKyAgICAweDEuMjIxNjA0MzcyYzljNDY3MzJkZDcyZTk5NmM5ZTIzZjJwMCwKKyAgICAweDEuZmZmZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjM5CisgICAgMHgxLjIyMTYwNDViNmY1Y2NmOWNlZDY4ODM4NGUwNmI4ZDQycDAsCisgICAgMHgxLnAtMworICB9LAorICB7IC8vIEVudHJ5IDI0MAorICAgIDB4MS4yMjE2MDRhM2Y0ZGRlZjg5NzRjMDA3OWYyM2ZkMGJiOXAwLAorICAgIDB4MS4wMDAwMDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDEKKyAgICAweDEuMTA4MmI1NjZjYjIzODBlMGJlMGQ1NTlhMDE1MDE3MmZwMCwKKyAgICAweDEuZmZmZmZlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjQyCisgICAgMHgxLjEwODJiNTc3ZDM0ZWQ3ZDViMWEwMTllMjI1YzlhOTUxcDAsCisgICAgMHgxLnAtNAorICB9LAorICB7IC8vIEVudHJ5IDI0MworICAgIDB4MS4xMDgyYjU5OWUzYTU4OGYxMjBlNjFhZjQ4NjljOTg0MnAwLAorICAgIDB4MS4wMDAwMDJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDQKKyAgICAweDEuMDgyMDU1ZjhkMTdjMTlhNjdiZTRmNzA1OGU5YTU3MGFwMCwKKyAgICAweDEuZmZmZmZlcC02CisgIH0sCisgIHsgLy8gRW50cnkgMjQ1CisgICAgMHgxLjA4MjA1NjAxMTI3ZWM5OGUwYmQwODNhYmE4MGM5N2E2cDAsCisgICAgMHgxLnAtNQorICB9LAorICB7IC8vIEVudHJ5IDI0NgorICAgIDB4MS4wODIwNTYxMTk0ODQyYTIzNDNlODFmZDVmYWI0NTFlZnAwLAorICAgIDB4MS4wMDAwMDJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDcKKyAgICAweDEuMDQwODBhYjE0ZGMzNjZhZDYxMTZjMzllM2MyZDBhOWVwMCwKKyAgICAweDEuZmZmZmZlcC03CisgIH0sCisgIHsgLy8gRW50cnkgMjQ4CisgICAgMHgxLjA0MDgwYWI1NWRlMzkxN2FiODY0YjNlOTA0NGU2YjQ1cDAsCisgICAgMHgxLnAtNgorICB9LAorICB7IC8vIEVudHJ5IDI0OQorICAgIDB4MS4wNDA4MGFiZDdlMjNlNzQ2Mjg4Mjk2YzEzMTNmMjFiMXAwLAorICAgIDB4MS4wMDAwMDJwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTAKKyAgICAweDEuMDIwMjAxNTNmYzQwNTg2MjM1ZGVjZjRlYjcyN2ExNWZwMCwKKyAgICAweDEuZmZmZmZlcC04CisgIH0sCisgIHsgLy8gRW50cnkgMjUxCisgICAgMHgxLjAyMDIwMTU2MDA0NDViMGMzMjYzODJiYzczNjg5ZDMycDAsCisgICAgMHgxLnAtNworICB9LAorICB7IC8vIEVudHJ5IDI1MgorICAgIDB4MS4wMjAyMDE1YTA4NGM2MDZjNDM4NGY5YTdmZjJlZTQyNXAwLAorICAgIDB4MS4wMDAwMDJwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTMKKyAgICAweDEuMDEwMDgwMjliNDU2ZjdhODU1NTMwYjE1MTA1NWZjY2NwMCwKKyAgICAweDEuZmZmZmZlcC05CisgIH0sCisgIHsgLy8gRW50cnkgMjU0CisgICAgMHgxLjAxMDA4MDJhYjU1Nzc3ZDI4YTJhNDJkMjZhYTllZTY3cDAsCisgICAgMHgxLnAtOAorICB9LAorICB7IC8vIEVudHJ5IDI1NQorICAgIDB4MS4wMTAwODAyY2I3NTg3ODI5ZjZkYTMyY2U0MDU4Yjk0MHAwLAorICAgIDB4MS4wMDAwMDJwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTYKKyAgICAweDEuMDA4MDIwMDRkNWMwMDEwZmYyNTFkMTM0ZDliYmRmOGNwMCwKKyAgICAweDEuZmZmZmZlcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI1NworICAgIDB4MS4wMDgwMjAwNTU2MDAxMTEyN2Q0MWQ1YmQ3MmY0YzhmM3AwLAorICAgIDB4MS5wLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTgKKyAgICAweDEuMDA4MDIwMDY1NjgwMzExODUzODFmNmQyYzVmNmFjOTBwMCwKKyAgICAweDEuMDAwMDAycC05CisgIH0sCisgIHsgLy8gRW50cnkgMjU5CisgICAgMHgxLjAwNDAwODAwNmFhNTUzZGRjMGUzMTdiMGZhNTliMWM0cDAsCisgICAgMHgxLmZmZmZmZXAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjAKKyAgICAweDEuMDA0MDA4MDBhYWI1NTVkZGUzOGU2Y2U4NmU5Mjc3YWFwMCwKKyAgICAweDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI2MQorICAgIDB4MS4wMDQwMDgwMTJhZDU1OWRlNThmMTE4ZDc3YjA3MDNhZnAwLAorICAgIDB4MS4wMDAwMDJwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjYyCisgICAgMHgxLjAwMDgwMDFmZjg1NTE1ZmYwMTJlNjhjZDJkNjljNTg4cDAsCisgICAgMHgxLmZmZmZmZXAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjMKKyAgICAweDEuMDAwODAwMjAwMDU1NTYwMDAxMTExMjdkMjk3Mjk4YzlwMCwKKyAgICAweDEucC0xMworICB9LAorICB7IC8vIEVudHJ5IDI2NAorICAgIDB4MS4wMDA4MDAyMDEwNTVkNjAyMDE5NjZiZGQzOTg2N2Y1Y3AwLAorICAgIDB4MS4wMDAwMDJwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMjY1CisgICAgMHgxLjk2OWM3YmUzYWQ4NzRjMDY3ODdhYmE5NTVkMjA2ZDgzcC05MywKKyAgICAtMHgxLjAwMDAwMnA2CisgIH0sCisgIHsgLy8gRW50cnkgMjY2CisgICAgMHgxLjk2OWQ0NzMyMWU0Y2JhYmYyZDI4MDcwOTYzYjA0MTk0cC05MywKKyAgICAtMHgxLnA2CisgIH0sCisgIHsgLy8gRW50cnkgMjY3CisgICAgMHgxLjk2OWRhY2Q5N2NjZTJkOWIwMDVmZjU3NmI3YTBiYjRmcC05MywKKyAgICAtMHgxLmZmZmZmZXA1CisgIH0sCisgIHsgLy8gRW50cnkgMjY4CisgICAgMHgxLmM4NDVkZDY0OTBhYjJkOWM3YjBjZmVjOWM1MDA4NDgzcC00NywKKyAgICAtMHgxLjAwMDAwMnA1CisgIH0sCisgIHsgLy8gRW50cnkgMjY5CisgICAgMHgxLmM4NDY0Zjc2MTY0NjgxZTI5OWEwMTI0NDg3ODg0ZDY0cC00NywKKyAgICAtMHgxLnA1CisgIH0sCisgIHsgLy8gRW50cnkgMjcwCisgICAgMHgxLmM4NDY4ODdlZTNjNWQxNzA1YmU2MTcyZDExNzg3MGEwcC00NywKKyAgICAtMHgxLmZmZmZmZXA0CisgIH0sCisgIHsgLy8gRW50cnkgMjcxCisgICAgMHgxLmUzNTU3ZjQ0MzRhZDdiZTllMDZjMjk5NjZmNTZlNjJicC0yNCwKKyAgICAtMHgxLjAwMDAwMnA0CisgIH0sCisgIHsgLy8gRW50cnkgMjcyCisgICAgMHgxLmUzNTViYmFlZTg1Y2FkYTY1ZjczZjMyZTg4ZmIzY2M2cC0yNCwKKyAgICAtMHgxLnA0CisgIH0sCisgIHsgLy8gRW50cnkgMjczCisgICAgMHgxLmUzNTVkOWU0NDUwOTQ3MGYwYWE3M2FjN2VmMTIxNDhmcC0yNCwKKyAgICAtMHgxLmZmZmZmZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMjc0CisgICAgMHgxLjVmYzFmYTQ0ZTIyNjljOWM5NzA2NDY5YzIwYjkzZTk1cC0xMiwKKyAgICAtMHgxLjAwMDAwMnAzCisgIH0sCisgIHsgLy8gRW50cnkgMjc1CisgICAgMHgxLjVmYzIxMDQxMDI3YWNiYmZjZDQ2NzgwZmVlNzFlYWQycC0xMiwKKyAgICAtMHgxLnAzCisgIH0sCisgIHsgLy8gRW50cnkgMjc2CisgICAgMHgxLjVmYzIxYjNmMTMyOGNjMTYyMTA1NzZkM2M3MGJmOThicC0xMiwKKyAgICAtMHgxLmZmZmZmZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjc3CisgICAgMHgxLjJjMTU1MjIxNjkxOGI5OGIxY2VmN2IwNGY3MTBlMzZjcC02LAorICAgIC0weDEuMDAwMDAycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzgKKyAgICAweDEuMmMxNTViODIxM2NmNDc3ZThhZjAxMzJjMmFlMjNkNGFwLTYsCisgICAgLTB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDI3OQorICAgIDB4MS4yYzE1NjAzMjY5NDZiMDc4YjA5ZjhmYWViZTJmYzI4N3AtNiwKKyAgICAtMHgxLmZmZmZmZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMjgwCisgICAgMHgxLjE1MmFhNWU3NGQ3YzczNzI4YWRhMDY2M2YyMjRhMzgxcC0zLAorICAgIC0weDEuMDAwMDAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODEKKyAgICAweDEuMTUyYWFhM2JmODFjYjlmZGI3NmVhZTEyZDAyOTU3MWZwLTMsCisgICAgLTB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDI4MgorICAgIDB4MS4xNTJhYWM2NjRkNzM1YzQzNDZjYzI3ZjQyYTNkODNiMXAtMywKKyAgICAtMHgxLmZmZmZmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjgzCisgICAgMHgxLjc4YjU2MDcxNjQyZmE4MzdjOTUxOWVlYzEwYTdmOTM3cC0yLAorICAgIC0weDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODQKKyAgICAweDEuNzhiNTYzNjJjZWYzN2M2YWViN2IxZTBhNDE1M2U0MzdwLTIsCisgICAgLTB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDI4NQorICAgIDB4MS43OGI1NjRkYjg0NTc5Yjk0OTBlN2I5NTU3MDI2YzY0N3AtMiwKKyAgICAtMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI4NgorICAgIDB4MS40MjU5MzIzOTAyZGJjNmU2MmUzZTA3Y2UyNmNkOTA0Y3A5MiwKKyAgICAweDEuZmZmZmZlcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODcKKyAgICAweDEuNDI1OTgyY2Y1OTdjZDIwNWNlM2Q1YjRlZGIwMzE3NTZwOTIsCisgICAgMHgxLnA2CisgIH0sCisgIHsgLy8gRW50cnkgMjg4CisgICAgMHgxLjQyNWEyM2ZjNDMyZmI1ZDU1NjAwNmE0ZDhlN2VlMTFicDkyLAorICAgIDB4MS4wMDAwMDJwNgorICB9LAorICB7IC8vIEVudHJ5IDI4OQorICAgIDB4MS4xZjQzZDhkYzM5MDhiOGVkODdhNWFiZDUwNjIxNzA2YXA0NiwKKyAgICAweDEuZmZmZmZlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTAKKyAgICAweDEuMWY0M2ZjYzRiNjYyYzdkODQ3ODg0MDE4NDIxNzQwNzRwNDYsCisgICAgMHgxLnA1CisgIH0sCisgIHsgLy8gRW50cnkgMjkxCisgICAgMHgxLjFmNDQ0NDk1YmU4ZTE2MTZhMWU1ZTM4ODc3OWJjMTQ2cDQ2LAorICAgIDB4MS4wMDAwMDJwNQorICB9LAorICB7IC8vIEVudHJ5IDI5MgorICAgIDB4MS4wZjJlYWMxNzk0YjhmM2VkYjVjMTBkMjZhNTFmNDIwZnAyMywKKyAgICAweDEuZmZmZmZlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTMKKyAgICAweDEuMGYyZWJkMGE4MDAyMDQ5MjIzZjE3MDg4MmI1ZWU1ZWZwMjMsCisgICAgMHgxLnA0CisgIH0sCisgIHsgLy8gRW50cnkgMjk0CisgICAgMHgxLjBmMmVkZWYwNTljMWIyMjMxMmJlZDk2NDAwNmVlNjMzcDIzLAorICAgIDB4MS4wMDAwMDJwNAorICB9LAorICB7IC8vIEVudHJ5IDI5NQorICAgIDB4MS43NDllOWMyZjdiYjZjZjVhMjc2ZWUwODIzNmMyZDZjM3AxMSwKKyAgICAweDEuZmZmZmZlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTYKKyAgICAweDEuNzQ5ZWE3ZDQ3MGM2ZGYwYmUwMGUwODRhODE1ZDFkZTZwMTEsCisgICAgMHgxLnAzCisgIH0sCisgIHsgLy8gRW50cnkgMjk3CisgICAgMHgxLjc0OWViZjFlNWJmZTc1NzAxOWRlNGUyMmIxMTNmZGU5cDExLAorICAgIDB4MS4wMDAwMDJwMworICB9LAorICB7IC8vIEVudHJ5IDI5OAorICAgIDB4MS5iNGM4ZmMwZjRmYTdhMmYyNDU5YTZlZjUzYzMxNWYwZnA1LAorICAgIDB4MS5mZmZmZmVwMQorICB9LAorICB7IC8vIEVudHJ5IDI5OQorICAgIDB4MS5iNGM5MDJlMjczYTU4Njc4ZDZkM2JmZGI5M2RiOTZkMHA1LAorICAgIDB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDMwMAorICAgIDB4MS5iNGM5MTA4OGJiZjMzMzM2ZjBlZTUyYjFhZDg1OGU0M3A1LAorICAgIDB4MS4wMDAwMDJwMgorICB9LAorICB7IC8vIEVudHJ5IDMwMQorICAgIDB4MS5kOGU2NDdkYjgxNDc3M2Y0MTkyNjJlZTQ3N2E5ODYxNnAyLAorICAgIDB4MS5mZmZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDMwMgorICAgIDB4MS5kOGU2NGI4ZDRkZGFkY2MzM2EzYmEyMDZiNjhhYmJhOHAyLAorICAgIDB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDMwMworICAgIDB4MS5kOGU2NTJmMGU3MTdkOTJkMTVjZDYxMDAyMmFlNTFlM3AyLAorICAgIDB4MS4wMDAwMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDMwNAorICAgIDB4MS41YmYwYTc1NTU0Y2U5MWU4M2Q0MjFjMmE3YzA3NWNiMnAxLAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDUKKyAgICAweDEuNWJmMGE4YjE0NTc2OTUzNTVmYjhhYzQwNGU3YTc5ZTNwMSwKKyAgICAweDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDYKKyAgICAweDEuNWJmMGFiNjkyNmNhYWZhMWEwMTU4ZDc5NjkzYWM4ZTFwMSwKKyAgICAweDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDcKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLnAxMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDgKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLjk5OTk5YXAxMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDkKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLjE5OTk5YXAxMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTAKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLjY2NjY2OHAxMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTEKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLmIzMzMzNHAxMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTIKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLnAxMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTMKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTQKKyAgICBIVUdFX1ZBTEYsCisgICAgSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgMzE1CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMzE2CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5mZmZmZmNwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMzE3CisgICAgMHgxLjcyNDA0OTBhMTY1NjIwZDliOTIyYWFhMjJhOGU0YzA5cDQsCisgICAgMHgxLjkyMWZiNnAxCisgIH0sCisgIHsgLy8gRW50cnkgMzE4CisgICAgMHgxLjMzZGVkZDY3MjA4NGNjYTYxMmFhYjJiOWEzZTgxN2JicDIsCisgICAgMHgxLjkyMWZiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzE5CisgICAgMHgxLjViZjBhYjY5MjZjYWFmYTFhMDE1OGQ3OTY5M2FjOGUxcDEsCisgICAgMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzIwCisgICAgMHgxLjViZjBhOGIxNDU3Njk1MzU1ZmI4YWM0MDRlN2E3OWUzcDEsCisgICAgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzIxCisgICAgMHgxLjViZjBhNzU1NTRjZTkxZTgzZDQyMWMyYTdjMDc1Y2IycDEsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDMyMgorICAgIDB4MS4xOGJkNjZmYjYyYjMxOTAwY2MwNzYzNGRlYmE0MzQ1NnAxLAorICAgIDB4MS45MjFmYjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjMKKyAgICAweDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRwMCwKKyAgICAweDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjQKKyAgICAweDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRwMCwKKyAgICAweDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjUKKyAgICAweDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNwMCwKKyAgICAweDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjYKKyAgICAweDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNwMCwKKyAgICAweDEuZmZmZmY4cC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjcKKyAgICAweDEucDAsCisgICAgMHgxLnAtMTQ4CisgIH0sCisgIHsgLy8gRW50cnkgMzI4CisgICAgMHgxLnAwLAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDMyOQorICAgIDB4MS5wMCwKKyAgICAwLjBmCisgIH0sCisgIHsgLy8gRW50cnkgMzMwCisgICAgMHgxLnAwLAorICAgIC0wLjBmCisgIH0sCisgIHsgLy8gRW50cnkgMzMxCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzIKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5wLTE0OAorICB9LAorICB7IC8vIEVudHJ5IDMzMworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOHAtMSwKKyAgICAtMHgxLmZmZmZmOHAtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMzM0CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4cC0xLAorICAgIC0weDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjhwLTEsCisgICAgLTB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDMzNgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmN3AtMSwKKyAgICAtMHgxLjAwMDAwMnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMzM3CisgICAgMHgxLmQyZTE3MTIzZDJhZTAyYWJiY2Y4OTZmMjAyNWUzNDYzcC0yLAorICAgIC0weDEuOTIxZmI2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzM4CisgICAgMHgxLjc4YjU2NGRiODQ1NzliOTQ5MGU3Yjk1NTcwMjZjNjQ3cC0yLAorICAgIC0weDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzM5CisgICAgMHgxLjc4YjU2MzYyY2VmMzdjNmFlYjdiMWUwYTQxNTNlNDM3cC0yLAorICAgIC0weDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDAKKyAgICAweDEuNzhiNTYwNzE2NDJmYTgzN2M5NTE5ZWVjMTBhN2Y5MzdwLTIsCisgICAgLTB4MS4wMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDM0MQorICAgIDB4MS5hOWJjYzMzNzNlZmQzZTRkNmE5NmJlN2E3NTYyZjQyOHAtMywKKyAgICAtMHgxLjkyMWZiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzQyCisgICAgMHgxLjYyMDIyNWFlNWU5MzQ5NTkzZDZiYjYxOGMyMzE1NDVlcC01LAorICAgIC0weDEuOTIxZmI2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDMKKyAgICAwLjBmLAorICAgIC0weDEuZmZmZmZjcDEyNworICB9LAorICB7IC8vIEVudHJ5IDM0NAorICAgIDAuMGYsCisgICAgLTB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMzQ1CisgICAgMC4wLAorICAgIC1IVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDYKKyAgICAweDEuZmZmZjA4MmU2YzdmZWQxZDNmZDVjZmY3ZTFmNjA1OTFwMTI3LAorICAgIDB4MS42MmU0MmVwNgorICB9LAorICB7IC8vIEVudHJ5IDM0NworICAgIEhVR0VfVkFMRiwKKyAgICAweDEuNjJlNDMwcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDgKKyAgICAweDEuMDAwMDRiZjk0ZjYzZTNmYTY4NjIyMjE0OGYxMjkzYzRwLTEyNiwKKyAgICAtMHgxLjVkNTg5ZXA2CisgIH0sCisgIHsgLy8gRW50cnkgMzQ5CisgICAgMHgxLmZmZmY5N2YyOTJjZTgwZTQ5NDIzMWM2NDk2ZTljYmY1cC0xMjcsCisgICAgLTB4MS41ZDU4YTBwNgorICB9LAorfTsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCisKK1RFU1QobWF0aF9leHBmLCBleHBmX2ludGVsKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihnX2V4cGZfaW50ZWxfZGF0YSkvc2l6ZW9mKGV4cGZfaW50ZWxfZGF0YV90KTsgaSsrKSB7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGdfZXhwZl9pbnRlbF9kYXRhW2ldLmV4cGVjdGVkLCBleHBmKGdfZXhwZl9pbnRlbF9kYXRhW2ldLmNhbGxfZGF0YSkpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7CisgIH0KKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOworI2VuZGlmIC8vIF9fQklPTklDX18KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfbG9nX3Rlc3QuY3BwIGIvdGVzdHMvbWF0aF9sb2dfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEyYTg0OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21hdGhfbG9nX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMTY3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQordHlwZWRlZiBzdHJ1Y3QgeworICBkb3VibGUgZXhwZWN0ZWQ7CisgIGRvdWJsZSBjYWxsX2RhdGE7Cit9IGxvZ19pbnRlbF9kYXRhX3Q7CisKK3N0YXRpYyBsb2dfaW50ZWxfZGF0YV90IGdfbG9nX2ludGVsX2RhdGFbXSA9IHsKKyAgeyAvLyBFbnRyeSAwCisgICAgMHgxLmQ3N2ZkMTNkMjdmZmVmZmZmZmZmZmZmZmI1ZWQ5ODQzcC0xMSwKKyAgICAweDEuMDAzYWY2YzM3YzFkM3AwCisgIH0sCisgIHsgLy8gRW50cnkgMQorICAgIDB4MS40MTFlZmQyOTdjNzgwODAwMDAwMDAwMDAxNmQ2MTViMnAtNiwKKyAgICAweDEuMDUxMTI3OTI5MzRiM3AwCisgIH0sCisgIHsgLy8gRW50cnkgMgorICAgIDB4MS5kNDg0MDY2NDQ0NmZiODAwMDAwMDAwMDAxZjU3NGZmY3AtNiwKKyAgICAweDEuMDc2ZDFkOGM3NWVhNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMworICAgIDB4MS5mNmU0YzNjZWQ3YzcxZmZmZmZmZmZmZmZmZWU5NDdkYXAtMywKKyAgICAweDEuNDc0MDhjYjk1ODNjZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNAorICAgIDB4MS4xYTA0MDg3MTJlMDA5ZmZmZmZmZmZmZmZmZWU0NjAxMnAtMiwKKyAgICAweDEuNTEyYjMxMjY0NTRmM3AwCisgIH0sCisgIHsgLy8gRW50cnkgNQorICAgIDB4MS44YjUyYzE1ZWE5YzIzN2ZmZmZmZmZmZmZmZTYxMzk1Y3AtMiwKKyAgICAweDEuNzg5ZTk1YjExNTc4Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNgorICAgIDB4MS5kNzA3MDI5YmI1OWQ4ZmZmZmZmZmZmZmZmZWNmNmVmNnAtMiwKKyAgICAweDEuOTU4NDk3ZjdiMzUzZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNworICAgIDB4MS4wNzI3YWY1ZmVlOGY1ZmZmZmZmZmZmZmZmZWM3MDIxZnAtMSwKKyAgICAweDEuYWMwMzJhOGQyZWMyM3AwCisgIH0sCisgIHsgLy8gRW50cnkgOAorICAgIDB4MS4xMmZjY2UwMmVmYjMyMDAwMDAwMDAwMDAwMTQzNWI5MHAtMSwKKyAgICAweDEuYjYwNGUxOTQyMDk4ZHAwCisgIH0sCisgIHsgLy8gRW50cnkgOQorICAgIDB4MS4xNzhlNmQzZWNhY2U5ODAwMDAwMDAwMDAwMTMwMGFjY3AtMSwKKyAgICAweDEuYjlmMWZhNDU4Nzk2N3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTAKKyAgICAweDEuNjJmNzFjNDY1NmI2MGZmZmZmZmZmZmZmZmY3ZjE2OGVwLTEsCisgICAgMHgxLjAwMDk3NjU4MWNlNGVwMQorICB9LAorICB7IC8vIEVudHJ5IDExCisgICAgMHgxLmQ2MzM2YTg4MDc3YTlmZmZmZmZmZmZmZmZmZTFmODE3cDAsCisgICAgMHgxLjkxYThkZmY1NDBmZjdwMgorICB9LAorICB7IC8vIEVudHJ5IDEyCisgICAgMHgxLjAxNmU4MmNlZGEzNThmZmZmZmZmZmZmZmZmYWNiZjYycDEsCisgICAgMHgxLmRlMzdmYjMxZmQ1ZmNwMgorICB9LAorICB7IC8vIEVudHJ5IDEzCisgICAgMHgxLjFlMTI2ZjVkOTVmMzg4MDAwMDAwMDAwMDAwNWQzNzYxcDEsCisgICAgMHgxLjJiMTE5OWU0OTc3MzlwMworICB9LAorICB7IC8vIEVudHJ5IDE0CisgICAgMHgxLjJmMzgzMmNhZDNkNWYwMDAwMDAwMDAwMDAwNzg4MDFjcDEsCisgICAgMHgxLjU1ZjBlYWExYjJmYzhwMworICB9LAorICB7IC8vIEVudHJ5IDE1CisgICAgMHgxLjQyZWUzYzdkYzQ5NDYwMDAwMDAwMDAwMDAwNGVhNTdmcDEsCisgICAgMHgxLjhlZGU0OTJkOTYwNzJwMworICB9LAorICB7IC8vIEVudHJ5IDE2CisgICAgMHgxLjZiNWRmN2UzY2Q0MjE4MDAwMDAwMDAwMDAwNDQ2MTNicDEsCisgICAgMHgxLjExODY3NjM3Y2JkMDNwNAorICB9LAorICB7IC8vIEVudHJ5IDE3CisgICAgMHgxLjdlN2YwOTU3MDNlZWU3ZmZmZmZmZmZmZmZmYWNkYzA2cDEsCisgICAgMHgxLjNkOWQ3ZDU5N2E5ZGRwNAorICB9LAorICB7IC8vIEVudHJ5IDE4CisgICAgMHgxLjk2ODdjODNmYWYwMDY3ZmZmZmZmZmZmZmZmYjljZjNmcDEsCisgICAgMHgxLjdmMzgyNTc3OGFhYWZwNAorICB9LAorICB7IC8vIEVudHJ5IDE5CisgICAgMHgxLjgzZDRiY2RlYmIzZjNmZmZmZmZmZmZmZmZmZmZhY2M5cDIsCisgICAgMHgxLmFjNTBiNDA5YzhhZWVwOAorICB9LAorICB7IC8vIEVudHJ5IDIwCisgICAgMHgxLmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwYWFhYWFhcC01MywKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjEKKyAgICAweDEuNzZlN2U1ZDdiNmVhYmZmZmZmZmZmZmZmZmZmMDZmODBwMywKKyAgICAweDEuZGU3Y2Q2NzUxMDI5YXAxNgorICB9LAorICB7IC8vIEVudHJ5IDIyCisgICAgMHgxLmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwYWFhYWFhcC01MywKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjMKKyAgICAtMHgxLjkxNTUwYzM1N2Y4ODNmZmY4OTlkZmYzMGQwZjMwM2VlcDgsCisgICAgMHgxLjAwMDAwMDAwMDAwMDNwLTU3OQorICB9LAorICB7IC8vIEVudHJ5IDI0CisgICAgMHgxLjdmZmZmZmZmZmZmZmI4MDAwMDAwMDAwMDExZmZmZmZmcC01MCwKKyAgICAweDEuMDAwMDAwMDAwMDAwNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjUKKyAgICAweDEuYmZmZmZmZmZmZmZlNzgwMDAwMDAwMDAxYzk1NTU1NTVwLTQ4LAorICAgIDB4MS4wMDAwMDAwMDAwMDFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNgorICAgIDB4MS43ZmRmZmZmZmZmNzAxN2ZmMDAwMDQ3ZWUwMTdmZjUyY3AtNDEsCisgICAgMHgxLjAwMDAwMDAwMDBiZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDI3CisgICAgMHgxLjBmZmZmZmZmZWRmMDAwMDAwMTk5NmFhYWFhODFlMjhhcC0zNSwKKyAgICAweDEuMDAwMDAwMDAyMjBwMAorICB9LAorICB7IC8vIEVudHJ5IDI4CisgICAgMHgxLmZmZmZmZmZmMDAwMDAwMDBhYWFhYWFhYTJhYWFhYWFicC0zMywKKyAgICAweDEuMDAwMDAwMDEwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOQorICAgIDB4MS43ZmZmZmY3MDAwMDA0N2ZmZmZkNzgwMDAxODRjY2NiZHAtMjUsCisgICAgMHgxLjAwMDAwMGNwMAorICB9LAorICB7IC8vIEVudHJ5IDMwCisgICAgMHgxLjBhMmVhM2U3N2FmMDYwMDA0MDEwYzRmNmI0MzdmYjQ1cDEsCisgICAgMHgxLjAwMDcwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMQorICAgIDB4MS45MDQxMjA5NGQzNjdmOTlmM2M2MTUyMzFhZDk4YmYzZHAtMTMsCisgICAgMHgxLjAwMGM4MjU3M2Y1ZjlwMAorICB9LAorICB7IC8vIEVudHJ5IDMyCisgICAgMHgxLmZmZTAwMmFhNmFiMTEwNjY3OGFkOGIzMThjYjM4NTQ1cC0xMiwKKyAgICAweDEuMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMworICAgIDB4MS5iZmNmMDcyNDI5NjlkMTVkYjRkMmIzZWZlMWMwMzdlMHAtMTEsCisgICAgMHgxLjAwMzgwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNAorICAgIDB4MS5kNzdmZDEzZDI3ZmZlZmZmZmZmZmZmZmZiNWVkOTg0M3AtMTEsCisgICAgMHgxLjAwM2FmNmMzN2MxZDNwMAorICB9LAorICB7IC8vIEVudHJ5IDM1CisgICAgMHgxLmVhMDU0Y2U4NTA4ZTQ4NzQ0NDJlOTVlNDE3MThiMGRlcC0xMCwKKyAgICAweDEuMDA3YTllYTdhOWU4MHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzYKKyAgICAweDEuZmYwMDRhN2FiOTA4M2Y5ZTE3MTdkM2E0YWFlYzg2NTdwLTEwLAorICAgIDB4MS4wMDdmZGZmN2ZkZmUwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNworICAgIDB4MS5mZmRhNjVkNDRkY2NjODg5MTE1YTRhNGZmNzVjNWE3N3AtMTAsCisgICAgMHgxLjAwODAxNjlhMTZjZDVwMAorICB9LAorICB7IC8vIEVudHJ5IDM4CisgICAgMHgxLmI5NTY5ODlkMjU4OWQ3ZmQ2ODM4ZTU3YTcwMmYzOGFjcC05LAorICAgIDB4MS4wMGRkMGE4MzE3MTc2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOQorICAgIDB4MS5mZDA4MTZkOTcxNTJjN2ZlYWQ3Yjg0OWY3NjE0ZmI0OHAtOSwKKyAgICAweDEuMDBmZjAyYmE4YTU0M3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDAKKyAgICAtMHgxLjM3OTE1NTU1Nzg1YjA3ZmMxOWRkMjYzMjA4OGExZTdmcDksCisgICAgMHgxLjAwZmZmZmZmZmZmZmZwLTg5OQorICB9LAorICB7IC8vIEVudHJ5IDQxCisgICAgMHgxLjY0YTJhOWI2YTQwNTg4MDEwMTAyODA3MTM4ZGZmNTBjcDAsCisgICAgMHgxLjAxYzAwMDAwMDAwZGNwMgorICB9LAorICB7IC8vIEVudHJ5IDQyCisgICAgMHgxLmQ0NjU5NTcxMDZiZDI4NmJhZTY3YzA4Mjk3MTYzZWEzcC04LAorICAgIDB4MS4wMWQ2MTMxZDA5ZGM1cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MworICAgIDB4MS5mZGY2MzliZWE1YWQzNzYyZGYyNGEyMDhlMmExY2JlOHAtOCwKKyAgICAweDEuMDFmZmYzN2EzNDA4NHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQKKyAgICAweDEuZmRmNmU0ZmNmNDU2OTc3MjA1MjI4NTMwYWNkNTcxNTVwLTgsCisgICAgMHgxLjAxZmZmNDI2YzhjYjZwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1CisgICAgMHgxLmZkZjZlNGZkMDQyNmY3NmQ2ZDdiODM5YjVmNmM4YmFmcC04LAorICAgIDB4MS4wMWZmZjQyNmM4ZGI1cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NgorICAgIDB4MS5mZGZlOWM1N2RlYmUxNzYwZmU0ZmYwODk5YmY5ZTZkY3AtOCwKKyAgICAweDEuMDFmZmZiZWQ5MjJlM3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDcKKyAgICAtMHgxLmQxN2JlMjQ1MTIyOWZmZmYxMWU4NTE4MDRlOTdjZGQ3cDMsCisgICAgMHgxLjAyOHAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OAorICAgIDB4MS42ZGNiMmZlZDdmMjVkM2YyODY3MDcyMzBiZTE5MDc2MHAtNywKKyAgICAweDEuMDJkZmFmYTA3ZGY2ZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDkKKyAgICAweDEuZmYwOTJhODVlZTAyZjdmZTdmYzVkYzFkNDE3MTg0YzBwLTcsCisgICAgMHgxLjA0MDYxNTQ2MWY2Y2FwMAorICB9LAorICB7IC8vIEVudHJ5IDUwCisgICAgMHgxLjBhYTUzY2VhM2YxYWJmZmYxZGRmYjVhZjRhYzQ5YWFlcC02LAorICAgIDB4MS4wNDMzNGVlYzVhNjVkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MQorICAgIDB4MS42ZWEwNzAyMWMxMzM0ODAxNzQ4MzVkMTQyYTRiODMxZXAtNiwKKyAgICAweDEuMDVjYjA5YmI5ZmVkN3AwCisgIH0sCisgIHsgLy8gRW50cnkgNTIKKyAgICAweDEuNzE5OWY5ODRmNTYwODAwMTM1ZmYzYWVjM2EwNzk2YThwLTYsCisgICAgMHgxLjA1ZDczNTE4NDI2MWNwMAorICB9LAorICB7IC8vIEVudHJ5IDUzCisgICAgMHgxLjc3ODhiYzljMDgzMTg4MDE1NDZjMDM1Y2JkOWEyNjlhcC02LAorICAgIDB4MS4wNWVmN2JkZWU3YmUwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NAorICAgIDB4MS5jMjY4OGU5NTJhNzIzN2ZkZDg1NjMyOTdkZTYyNWFjZnAtNiwKKyAgICAweDEuMDcyMmEwNTcxMTc3OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNTUKKyAgICAweDEuZTAyMTUxMzUyNTEyZjdjMjMwY2M0Yjg5NWRjNjhkZDFwLTYsCisgICAgMHgxLjA3OWNmMDBmZTI0ZjlwMAorICB9LAorICB7IC8vIEVudHJ5IDU2CisgICAgLTB4MS4zZTFmZWU2OTljNmJjN2ZjMDAxYTM1OWUwZWZlMmRiN3A4LAorICAgIDB4MS4wN2NwLTQ1OQorICB9LAorICB7IC8vIEVudHJ5IDU3CisgICAgMHgxLmYzMWI1NmI4YjZmMWEyODYyNTgyZjUyOGIzM2M0ZGUycC02LAorICAgIDB4MS4wN2ViMjU5ZWUwMWI1cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OAorICAgIC0weDEuZDA4MTkwOTVmY2Q2YzgwMDkyNGVjZDAzMDhlYmUyMThwMywKKyAgICAweDEuMGE4NTUxZjhmYzdmOHAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OQorICAgIC0weDEuMDI2OGQ0MDAwMGM3MTgwMDVkYTAyNDllYmIwYTMwMjRwMSwKKyAgICAweDEuMGZmZjhwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MAorICAgIDB4MS42YjVkZjdlM2NkNDIxODAwMDAwMDAwMDAwMDQ0NjEzYnAxLAorICAgIDB4MS4xMTg2NzYzN2NiZDAzcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MQorICAgIDB4MS42Yjk2Y2I2NmY1NWMyODAwMTcyZDgxYzFjZWYzNTdiMXAxLAorICAgIDB4MS4xMWZmZmZmZmZmZmY4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MgorICAgIC0weDEuZjdhMjEzYTdjZDM4MGZmZmRlNDk4YzQ1M2YxMjU1M2RwMCwKKyAgICAweDEuMWU2cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNjMKKyAgICAtMHgxLmEwNzY1ODUzZGVjMDZmZmVkZjQ5MDAyYjVkMzAwOGJlcDgsCisgICAgMHgxLjIwNjY1OGQ5YjBmMDVwLTYwMQorICB9LAorICB7IC8vIEVudHJ5IDY0CisgICAgMHgxLjBkN2I2ZmY2ZTNhMjQ3ZmZmZmZlZmI5NDQ5ZmFmOGU2cDYsCisgICAgMHgxLjI1MTQ3MzhlNmRjYWRwOTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NQorICAgIDB4MS4xZWUzODk5ZjY4MThlN2ZmZmZkMDllNmViNDg3OTcyNXAxLAorICAgIDB4MS4yY2ZiYjllNGExNTk5cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NgorICAgIC0weDEuMzMxNTMzMzY3OTI4OTdmZDM4ZjRhZjdhYjVjMDA3NjlwNiwKKyAgICAweDEuMmYwNjE3MDM3ZTU5MHAtMTExCisgIH0sCisgIHsgLy8gRW50cnkgNjcKKyAgICAtMHgxLjA0YzFlNmNlYzk2Mzc3ZmViZTExODNlM2JkMzczYzNlcDMsCisgICAgMHgxLjJmMjlmZDRiNDI1MTVwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgNjgKKyAgICAtMHgxLjA1NzhiYzRhMTQzZDY5OTgwNmY5NDVkMTM1NmQwNmEycC0xLAorICAgIDB4MS4zMzNlMWYwM2FmNTVlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjkKKyAgICAtMHgxLmZkMmExZDRkY2YyM2Q3ZmU3NWY3ZWVmOTQ5OGZkYWEycC0yLAorICAgIDB4MS4zNzY3YTBhYWYxNDUycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzAKKyAgICAtMHgxLmZiMGNlMGVjNzliYzk3ZmU5NTE0MWNlMjI3ZWQ0N2QycC0yLAorICAgIDB4MS4zODBjNjQwZTYyNDZjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzEKKyAgICAtMHgxLmVlNjkzY2FhNTAxYTkzZjMwMDYyZTJhM2M0NDVhYzljcC0yLAorICAgIDB4MS4zYmVjODM3ZDYwMWMxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzIKKyAgICAtMHgxLmVkNjdiOWIwZjJmOGQ0MjBhZGNkZjUxZjQzMjgxN2ZhcC0yLAorICAgIDB4MS4zYzNjMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDczCisgICAgMHgxLjI1Mzk3ZGM5Zjg1YmQ4MDAwMDBhM2Q1NWJkNmQ4ZTUwcDEsCisgICAgMHgxLjNjNDE5YjlkYjY2MmFwMworICB9LAorICB7IC8vIEVudHJ5IDc0CisgICAgMHgxLjljMDQxZjdlZDhkMzI5ZTMxMmFhZDg0OTNhM2E3OWEycDAsCisgICAgMHgxLjNmZmZmZmZmZmZmZmZwMgorICB9LAorICB7IC8vIEVudHJ5IDc1CisgICAgMHgxLmM4ZmY3Yzc5YTlhMjFhYzI1ZDgxZWYyZmZiOWEyNGFlcC0zLAorICAgIDB4MS40cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NgorICAgIDB4MS5kNDJhZGZlYzM1ZDE0N2ZlMDRmZjdiMWIwMjdjNWZkYXAtMywKKyAgICAweDEuNDFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NworICAgIDB4MS5kNzU3NzQ3N2I5ZWFkN2ZlOWIyYmM2OTYwYTc2NjMwM3AtMywKKyAgICAweDEuNDIzZmMyNGQwNGZjNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzgKKyAgICAtMHgxLmQzNjBlOTBjMzg1MGIzNmQ2MTEwM2Y1NzViOTkxODgwcC0yLAorICAgIDB4MS40NDZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OQorICAgIC0weDEuY2RlYWJlMDFhODZiMmQ1MGM4ZWEzYmIwMzBjNjZiYmNwLTIsCisgICAgMHgxLjQ2MWMxNTlhNzZkNGJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MAorICAgIDB4MS5mYjkxODZkNWUzZTI0NGVlNGUyODUzMTU2M2I2OWEyY3AtMywKKyAgICAweDEuNDdmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgODEKKyAgICAweDEuZmI5MTg2ZDVlM2UyYThkNTU0NjZjMzc5NGQyY2EwOTJwLTMsCisgICAgMHgxLjQ4MHAwCisgIH0sCisgIHsgLy8gRW50cnkgODIKKyAgICAweDEuZmI5MjA0NjRmNWZjNzc3ZjNjYjBkODQ0OGMzMGU3MDFwLTMsCisgICAgMHgxLjQ4MDAxNDFiZWE4M2ZwMAorICB9LAorICB7IC8vIEVudHJ5IDgzCisgICAgMHgxLmZiOWMyNzkyMDQ1ZTllODJlZmY0M2VmMWNlMGJlZTAycC0zLAorICAgIDB4MS40ODAxYjNiZjQyYTRhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NAorICAgIDB4MS5mYzQ2NzE4YTJkYzIyZGRiZmFiYjI1OThhMTM3YmFhN3AtMywKKyAgICAweDEuNDgxY2ZhZGU4YTY0ZHAwCisgIH0sCisgIHsgLy8gRW50cnkgODUKKyAgICAweDEuZmY5YmQ3ODU1YWFlYWI4MTVmZDg1ZDJjYjA2OTQyMzFwLTMsCisgICAgMHgxLjQ4YTVkMGM3YWM1YjVwMAorICB9LAorICB7IC8vIEVudHJ5IDg2CisgICAgMHgxLmZmZDY1ZjI5YmZkNGVkZjk4ZWM4NDljOTAwMzJmMzAycC0zLAorICAgIDB4MS40OGFmMzU2MDgxY2ExcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NworICAgIDB4MS5lNzM3Y2IyMzg2NWM2YjkyMTU1MmFkODFkNTcyYjcyOXAtMSwKKyAgICAweDEuNGI4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OAorICAgIDB4MS45MGVkNTJkMWEyM2M0ZmZlZDhlZTc3MjVjNTMwMzVkNnA4LAorICAgIDB4MS41NTZlZTYxMWZhMzA5cDU3OAorICB9LAorICB7IC8vIEVudHJ5IDg5CisgICAgLTB4MS5iMjViOGQ4NjNiM2I0ODAwZmNlYzRlYjVjMTRhN2MyZXAzLAorICAgIDB4MS41NWVwLTIwCisgIH0sCisgIHsgLy8gRW50cnkgOTAKKyAgICAweDEuMTY3NThhOTNkMjlhZjdmZjEwMGEwYzEwN2ZiMGM5ZTdwNiwKKyAgICAweDEuNTk5NjY1OTk2NjU5OHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MQorICAgIC0weDEuN2UzYTkzYmYzNTQwZDgxZTNkYmJiNTc1ODVlYzE2NzRwLTIsCisgICAgMHgxLjYwODA1NGRlNzQ1ODJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MgorICAgIDB4MS41ODNhNDE3YmUyMjE2Y2I5MzY2MTBjYTk4NDM1MTFkYnAtMiwKKyAgICAweDEuNjY0OWJiNTE1MzU0ZnAwCisgIH0sCisgIHsgLy8gRW50cnkgOTMKKyAgICAtMHgxLjRmN2RhYzNmMWQ3ZjNmZmZmZmRmNTIxY2NmYzlkYmNkcDUsCisgICAgMHgxLjY5YjEwOTM3N2Y3cC02MQorICB9LAorICB7IC8vIEVudHJ5IDk0CisgICAgMHgxLjYyZTQyZmVmYTM4MzczNGE3NjliYjQxMjU4MzE5YzFhcC0yLAorICAgIDB4MS42YTA5ZTY2N2YzYjMxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NQorICAgIC0weDEuZTdhMmRkMDE2ZGFhODdmZmE3OTUyOGU4OWI2MTBjMGFwMSwKKyAgICAweDEuNmIwcC02CisgIH0sCisgIHsgLy8gRW50cnkgOTYKKyAgICAweDEuNzM5ZDdmNmJiZDAwNjljZTI0YzUzZmFkM2VmNzk2YWJwLTIsCisgICAgMHgxLjdwMAorICB9LAorICB7IC8vIEVudHJ5IDk3CisgICAgLTB4MS40YzNhZjQ3OTcyMDYyODAwMTNjNGQ0NWFmNjk2ZDdjYnAtMiwKKyAgICAweDEuNzIyM2NlZjc4ZTI1ZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDk4CisgICAgLTB4MS40OGU2NWZlMmMyMzA1N2ZkZWIyNWM3ZjdjNDg1OWU5Y3AtMiwKKyAgICAweDEuNzM1ODdjZTc1MzY4MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDk5CisgICAgLTB4MS40MDU3YjAyYmZkZDA5N2ZlNTczNzk4ODg3NDBkODEwM3AtMiwKKyAgICAweDEuNzY3NjQwODczOTVmY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMAorICAgIDB4MS40YTVmMTJlZDQwN2E0MDAwODM2NDVlZmNjNjU4ZWRhNnA4LAorICAgIDB4MS44YWQ5MzRiODM4YmRhcDQ3NgorICB9LAorICB7IC8vIEVudHJ5IDEwMQorICAgIC0weDEuODNkMGY5MDY5MGQwZjdmZjIwN2IxZjAwN2Y3YTM5MTdwMSwKKyAgICAweDEuOGJlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTAyCisgICAgLTB4MS5lMzg3NTQ1NzM1OTMxNDAwZWRiNDdlZTQyNjVkNzI4ZXAtMSwKKyAgICAweDEuOGU0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTAzCisgICAgLTB4MS5mY2M1OWUwMTM2OTc2ODI0M2VjYTU5OWU1OWU2YTkwOXAtMywKKyAgICAweDEuOGY2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA0CisgICAgLTB4MS5lZGQ2MTQ5YjMzMTU2ODI4NzUwYmIzYTYwOGM0ZGRjMXAtMywKKyAgICAweDEuOTI0YzU3ZDYyOTA4MnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNQorICAgIDB4MS5jZmJlNjE2NGE3M2YxMzYxNjA0OTI2YTBhOTBmNTE5ZnAtMiwKKyAgICAweDEuOTJhNGNiNzk4NjY0YnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA2CisgICAgLTB4MS5iNDI4MjE2YTVjMTU4N2ZkYmYyZjk3ZDRjMjcxNDhjY3A0LAorICAgIDB4MS45ODBwLTQwCisgIH0sCisgIHsgLy8gRW50cnkgMTA3CisgICAgLTB4MS5kMDgxZjBmMjVkNjYzODAwMjdkNTliNmViZGI5YmFjOXAtMywKKyAgICAweDEuOTgxOWQwMjU1YmU2MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwOAorICAgIC0weDEuY2MwZDZhOTJiNzkxNTdmZTgyYmZhZDBhZGRkMDg1YTVwLTEsCisgICAgMHgxLmEwZWY4ODNiZTIxNzdwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkKKyAgICAtMHgxLjhmNjJlMmNiNjU4NjM4MDAwMDMwZWIxYTI4OWY3OGUzcC0zLAorICAgIDB4MS5hNTQ5MzM2MzEwZTZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTEwCisgICAgLTB4MS4zNjUxZDBkZTIzNjhkN2ZlZTNkMWQ2ZWUyYjIyNzc0NHAtMywKKyAgICAweDEuYjgwMzAwYzAzMDExOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDExMQorICAgIDB4MS4yMGYyNWU2ODZlN2Y5N2ZlY2VmZjlhNzI5OWZjZDFlZHAtMSwKKyAgICAweDEuYzIyMDI0ZGM4Mjg5Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTEyCisgICAgLTB4MS45ZTMyN2ViNmFjMmMzN2Y3YTM5YWYyYzk4OGFiZTJiNnAtMSwKKyAgICAweDEuYzgwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTEzCisgICAgLTB4MS5iNzZmM2QwYWFmMGM5N2ZhZGVmYjRmNTMzMmQzNjVhOXAtNCwKKyAgICAweDEuY2JlYTIyYzhhOWExNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDExNAorICAgIC0weDEuOTMzNWU1ZDU5NDk5MTgxZmEwZjMxMmE5ODU0ZDMwNDJwLTQsCisgICAgMHgxLmNmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUKKyAgICAweDEuYjZjYzJiMDVjOTBhNzdmZTlhMGJiMzAxOWQ4YTlhZWRwMiwKKyAgICAweDEuZGFlMTg5NGEyZGJlZHA5CisgIH0sCisgIHsgLy8gRW50cnkgMTE2CisgICAgLTB4MS5mYzcwMmI4ZDk2ZDBkN2Q0Nzk0ZmQ1NmM5YmVjMmNlMnAtNSwKKyAgICAweDEuZTEzMDRjMTMwNGMxM3AtMQorICB9LAorICB7IC8vIEVudHJ5IDExNworICAgIC0weDEuZjZjN2Y3ZDBiMDM1NTdkMWMyNjkwZmMyMTRiM2VmNDNwLTUsCisgICAgMHgxLmUxODU2NDZiYzc4NTZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgKKyAgICAtMHgxLmViOGRjYjc2NGUwN2U3ZDRmMGVmMzZjNmVlODhlYWNhcC01LAorICAgIDB4MS5lMjJlNzM0OWY2ZTk3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTE5CisgICAgLTB4MS5kOTRhOWMzMjNlNzdjN2ZkNDNlMmUxM2Y1NDExNDFjYnAtNSwKKyAgICAweDEuZTM0MWYwNTkyYzJhYnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEyMAorICAgIC0weDEuY2NiMTA2MDg1Mzk0ZjdhMDVlMDNkZjhhYzIzZWFlNWRwLTUsCisgICAgMHgxLmU0MDA1ZGZkNjZjMzJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjEKKyAgICAtMHgxLmE5YmQ4YWZjNmQ4NGI3ZWM3YmJjODBjYzZmMjk4M2Y4cC01LAorICAgIDB4MS5lNjEyMjIyNDFjYTdmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTIyCisgICAgLTB4MS43ODczOTJhNDU4ODhkODAwNmJiNTM4YzcyNGM0NWY3ZXAtNSwKKyAgICAweDEuZTkwMTEzM2UxNjFlNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEyMworICAgIC0weDEuNzlhNjM0Y2RmYjI1NTgwMDAwODYwN2IwYzJjMDE1NzBwNCwKKyAgICAweDEuZWRkYzA4MjFjNzZjMXAtMzUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQKKyAgICAweDEuNTE3MjE1M2Q1ZmU5YjdmZjBmMjZhODdjMDg1Yjg3ZDdwLTEsCisgICAgMHgxLmVlZDkyMDhhNmEzNDlwMAorICB9LAorICB7IC8vIEVudHJ5IDEyNQorICAgIC0weDEuMTJiMjI3MjQ0ZmY5NzdkODc4ZTExNjZjMjlmNzZhYTVwLTUsCisgICAgMHgxLmVmMWRiY2VhMTk1Y2RwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYKKyAgICAtMHgxLmY4YTM0ZDI1MDVmODE3ZDg0OGY0ZTg5NTk3MTNmYjc2cC02LAorICAgIDB4MS5mMDc4NmZhNDhiZDljcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTI3CisgICAgMHgxLjA2ODg1ZDAzYzE5YzM4MDAwMDAyZjk5MjA1YTYwYjU0cDEsCisgICAgMHgxLmYxYTk0NWE0NTdkOTZwMgorICB9LAorICB7IC8vIEVudHJ5IDEyOAorICAgIDB4MS5hMjhjY2NiOWM2ZjBkN2ZlZGQ4OWU5YzRkNGI5ZjY4YnA2LAorICAgIDB4MS5mMWZmZmZmZmZmZmZmcDE1MAorICB9LAorICB7IC8vIEVudHJ5IDEyOQorICAgIC0weDEuYjAzMmRhMDk1NjcxZTdjOGQ0MjdlYjQyMjkyNzY0ZDJwLTYsCisgICAgMHgxLmYyYWI5ZGVlODQxYjVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAKKyAgICAtMHgxLjlkNjZhZGE2OTA1NjQ4NTMyNjE5NGUzZjFjN2IxNzBjcC02LAorICAgIDB4MS5mMzNlMmE5NDRhYzk2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTMxCisgICAgLTB4MS44OGU3YTZiZjFiNWI5N2ZkYmY0ZGQ1ZTA1NDY3YzI1ZHAtNiwKKyAgICAweDEuZjNkZTI2ODM5NGU4ZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzMgorICAgIC0weDEuODRlMzYyYWQyMTcwMTdmZTdlZTZjNWU5NTgwYWExZGRwLTYsCisgICAgMHgxLmYzZmQ4NmIzOTI4ODRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzMKKyAgICAtMHgxLjc0NGVmZjZkNzdkZGU3ZDJhMTc5NjY5ZTIyNTY5OWUzcC02LAorICAgIDB4MS5mNDdmMWUxZjUzZjI0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTM0CisgICAgLTB4MS42OGI0Zjg2NDk3YTBhN2ZlMjRjNWZiYTc4YmYxN2E4OHAwLAorICAgIDB4MS5mNDhwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUKKyAgICAtMHgxLjZmNTFlNjhmY2Q3Y2Q3ZmExZTZhY2Q5ZjRiOTc5MzQxcC02LAorICAgIDB4MS5mNGE2MjJkZjc2MGM5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTM2CisgICAgLTB4MS42YmFiNGY5M2EzNzIwN2QyMzc2NTkzZTEyZTg5MGQ4MHAtNiwKKyAgICAweDEuZjRjMmIyYTVhNWMxZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzNworICAgIC0weDEuNjVhZTRkZWVkYTdiNzdmZTljNWRhYzJjMGMwZGVkZjRwLTYsCisgICAgMHgxLmY0ZjE4ZmFiNWMzYjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzgKKyAgICAtMHgxLjRjMmE2NGNiMjI0NDFmZTc0ZTJmODY4OTM0ZTllNDkxcC02LAorICAgIDB4MS5mNWI5NmU1Yjk2ZWI3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTM5CisgICAgLTB4MS40M2FlNmM0NGI5Zjc2N2YzNGViZjhhMmNjMzc0NGM5NHAtNiwKKyAgICAweDEuZjVmYmY1Y2VkYzQ4MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0MAorICAgIC0weDEuNDFmNzgxMjMxMGM5YjAwMTVjYTM5NzhjYWVhMmFmNDlwLTYsCisgICAgMHgxLmY2MDk2OGE1OTUyZDlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDEKKyAgICAtMHgxLjNiMGNiMGIxNDY5ZGI4MDBiMjBhYTExNjk4OGNiNmYycC02LAorICAgIDB4MS5mNjNmYWU2YmFlMzIxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQyCisgICAgLTB4MS4zMTFlNjc1NzViNGY1MDA2OTk0ZGYzMTU4YzczMTZjY3AtNiwKKyAgICAweDEuZjY4ZGEzNjhkYTM2OHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0MworICAgIC0weDEuMDIwZGE3MDNmMmY5ZDdkODhjMjM2MWY5MzEyYzgzODJwLTYsCisgICAgMHgxLmY3ZmZiZWZjNWQ5ZDhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDQKKyAgICAtMHgxLjAyMDU2NTg5MzViOTQ3ZWM1ODc0NTMwNDY4MTQ1YWU3cC02LAorICAgIDB4MS5mN2ZmZmZmZmZmZmU2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQ1CisgICAgLTB4MS5hZTgyNWZlMmViNjcwN2Y5NmE2ZTRjMWRkNTM1ZjljY3AtNywKKyAgICAweDEuZjk1MTM5YzU2MTEzOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0NgorICAgIC0weDEuMjM4NTFjODBkZGRmMjdmYjg0N2NkZDIzN2RiMzJlODZwLTcsCisgICAgMHgxLmZiNzcxNzdmYjVkMzVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDcKKyAgICAtMHgxLjdjNDk4ZWI4N2VkNjg3ZjVhYjZkMDBlMzk5NDZkM2JmcC04LAorICAgIDB4MS5mZDA5YTBiNWIxN2YwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQ4CisgICAgLTB4MS41MGRkNDFhZWI0ODY1NzAwYzY4ZjVkZjRhODQzOGUwZHAtOCwKKyAgICAweDEuZmQ2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQ5CisgICAgLTB4MS4wOGI4YmJhNWRiM2E4NWI0ZTI1MmVkMTAwM2UzNDgxZnAtOCwKKyAgICAweDEuZmRlZjlmZTdmOWZlM3AtMQorICB9LAorICB7IC8vIEVudHJ5IDE1MAorICAgIC0weDEuMDdjOTg5YWRkOWY1ODVlNjVjNzhmZTkxMmMxYThjcC04LAorICAgIDB4MS5mZGYxN2M1ZjE3Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDE1MQorICAgIC0weDEuMDA4MDU1OTU4ZTEwYjU0MmY2NDBhOTRlZDQ1ZjliYzBwLTgsCisgICAgMHgxLmZkZmZmZmZmZmZmNTVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTIKKyAgICAtMHgxLjFmM2U0NzE3OGY5N2M3NTMzNGE2MmEyZjdhYTY2YmM1cC05LAorICAgIDB4MS5mZWUxMTIzZDA1YzFicC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTUzCisgICAgLTB4MS5mZjdmYWE5YWIxMzY3NzhhNzQzYmFhNGY1MjgwM2M0ZXAtMTAsCisgICAgMHgxLmZmMDA3ZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTQKKyAgICAtMHgxLmZmMzllY2JlMjY3NTk3NzhmOGJiZjY3ZjFlNGE3ZTBhcC0xMCwKKyAgICAweDEuZmYwMGEyY2Q4OGI1NXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE1NQorICAgIC0weDEuNjM2MzQ3NzY5OGQyNTdmYzE3NTIyYjUwZmY1NTU1M2NwMCwKKyAgICAweDEuZmYwMjBmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDE1NgorICAgIC0weDEuZjdhMjQ4YmYyMmZhOTdmYWNhZGI5NDY2MzBlMzk2N2NwLTEwLAorICAgIDB4MS5mZjA0NmNiZTZjYmRkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTU3CisgICAgLTB4MS5kYWU2MGZlZTlmYTlmN2UzNDFmZTkwNTljY2Y2MDk3NHAtMTAsCisgICAgMHgxLmZmMTJjM2ZmMTJjMzBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTgKKyAgICAtMHgxLmQyMDhiYzg1ODc3NzY3OTFjMzhhNzZhNjc1YzFlYTQ1cC0xMCwKKyAgICAweDEuZmYxNzMwOWZlZmNkMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE1OQorICAgIC0weDEuYmFiZmYyNjNlYWJmODdhYzIxNmVhZDY1NTc0YWNmMDFwLTEyLAorICAgIDB4MS5mZmM4YWFmZjUzNGQ0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTYwCisgICAgLTB4MS5jMDBjNDA3MjViMDYxN2RlMTdkN2I3NGU0OTA5MWQ3NHAtMTMsCisgICAgMHgxLmZmZTNmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjEKKyAgICAtMHgxLjc4YmZhNTAwNDE1MzE3M2YyZjUyMjZjZDIzOTQ4NTE4cC0xMywKKyAgICAweDEuZmZlODc0OTA0YWJkMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE2MgorICAgIC0weDEuMTE0OGRmZjk1N2U3Yzc0NTY0MjI5ZTljYjljNGI4M2NwLTEzLAorICAgIDB4MS5mZmVlZWJiYWVlYmI4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTYzCisgICAgLTB4MS40YWExOTZhYWUxZWY5N2ZmMTczMDg5Nzc5OWVlNGYwMnA4LAorICAgIDB4MS5mZmZmZmJiZmZmZmZmcC00NzgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjQKKyAgICAweDEuOGU4ZjQzZDM4MDQwZmZmZWRhNzMyYzhkMTY0YzFlYjVwOCwKKyAgICAweDEuZmZmZmZiYmZmZmZmZnA1NzQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjUKKyAgICAtMHgxLjAwMDAwNDAxMDAwMDA4MDE1NTY1NjU1NzU1OTU3NTU4cC0zMSwKKyAgICAweDEuZmZmZmZmZmJmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE2NgorICAgIC0weDEuZmY4MDQwMDA3ZmMwMjdmODJjOGFjMmEyMTJlZjhlMGVwLTM0LAorICAgIDB4MS5mZmZmZmZmZjAwM2ZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTY3CisgICAgMHgxLjg2ZWY1Y2NkZmExYjE3ZmU3OGM4ODZhOWQ4YjJmYWFlcDcsCisgICAgMHgxLmZmZmZmZmZmZGRmZmZwMjgxCisgIH0sCisgIHsgLy8gRW50cnkgMTY4CisgICAgLTB4MS4wMDA4MDAwMDAwODAwODAwMjAwMDU1NWQ1NTk1NTY0MHAtNDAsCisgICAgMHgxLmZmZmZmZmZmZmRmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjkKKyAgICAtMHgxLjAwMjAwMDAwMDAyMDA4MDA4MDAwMDU1NzU1OTU1ODAxcC00MiwKKyAgICAweDEuZmZmZmZmZmZmZjdmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE3MAorICAgIC0weDEuMDA0MDAwMDAwMDEwMDgwMTAwMDAwMTU2NTU5NTVhYWFwLTQzLAorICAgIDB4MS5mZmZmZmZmZmZmYmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTcxCisgICAgMHgxLjMwZmMxOTMxZjA5Yzk3ZmY0MmZmNWNhZDQ2Nzg5N2ZkcDcsCisgICAgMHgxLmZmZmZmZmZmZmZmZWVwMjE5CisgIH0sCisgIHsgLy8gRW50cnkgMTcyCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMTU1NTU1NXAtNTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzMKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwNTU1NTU1cC01MiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE3NAorICAgIC0weDEuMDNmZTU1YTA2MWM3NTdmZWQ2YTFkYTMxN2RhNTBiMWFwLTEsCisgICAgMHgxLjM0MjE4NTc5OGY2ZDZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzUKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZjBjZTRlMGQ1MDc4NTc4ODkyNzIxcC0yLAorICAgIDB4MS42YTA5ZTY2N2YzYmNjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTc2CisgICAgLTB4MS5kYTM5MWM5MDQzYTBmMTZhYmUwNTZlMzg0YmYwN2YyOXAtMywKKyAgICAweDEuOTYyYjVmOTQzOGQyNXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE3NworICAgIC0weDEuMDZmYmVjNTIwODJiZDI1M2UyMDIxMGI1ODg2OGU1MjFwLTMsCisgICAgMHgxLmMyNGNkOGMwN2RlN2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzgKKyAgICAtMHgxLjFlMGE4ZjY3MGM1MGFkMTcyYjI2MDhlNGE3OGI1ZTYwcC01LAorICAgIDB4MS5lZTZlNTFlY2MyZmQ3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTc5CisgICAgMHgxLjllNTQ4ZTdlM2RkZTdiMGYzNDM4NWYwNzVlODUwMTA2cC01LAorICAgIDB4MS4wZDQ3ZTU4Yzg0MDk4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODAKKyAgICAweDEuMDhlMGJhZTczYWMyMzhkNWQwZDFmZDlhMDQ1Nzk2MzBwLTMsCisgICAgMHgxLjIzNThhMjIyYTY5NDRwMAorICB9LAorICB7IC8vIEVudHJ5IDE4MQorICAgIDB4MS45ZTY0NjIxODdjMzZhOGRkZWVkODk5YzRlMzU5Njg5NnAtMywKKyAgICAweDEuMzk2OTVlYjhjOTFmMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTgyCisgICAgMHgxLjE0ZGQ2YjBhZjkzOWFjOWZkMWNmOGQ4YTNhNjMwYTA3cC0yLAorICAgIDB4MS40ZjdhMWI0ZWViYTljcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODMKKyAgICAweDEuNTYxODFmMTlkNzE5ODAzNWNmN2M1ZGYwMmQxNjYwMjZwLTIsCisgICAgMHgxLjY1OGFkN2U1MGUzNDhwMAorICB9LAorICB7IC8vIEVudHJ5IDE4NAorICAgIDB4MS45MzZhODJmYWRjZDg1YTc2OGExNjU1YTgwN2E1YzVmZHAtMiwKKyAgICAweDEuN2I5Yjk0N2IzMGJmNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTg1CisgICAgMHgxLmNkNDViMGE5ZjI1MDIxZTRjNmFiODc2ZTU0MWRlZmM5cC0yLAorICAgIDB4MS45MWFjNTExMTUzNGEwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODYKKyAgICAweDEuMDIwNDRjOWI3MDYyNzM1MGY1YzYxM2JhM2VmZjdmMTRwLTEsCisgICAgMHgxLmE3YmQwZGE3NzVkNGNwMAorICB9LAorICB7IC8vIEVudHJ5IDE4NworICAgIDB4MS4xYzAxZGFkNTllNzJmYTA0N2I2MWFjMjZjNTFmNGMxN3AtMSwKKyAgICAweDEuYmRjZGNhM2Q5ODVmOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTg4CisgICAgMHgxLjM0YmRlOWI4MjFmZTMxMTM2ZTY3NDUzZGZlY2Y5ZTM0cC0xLAorICAgIDB4MS5kM2RlODZkM2JhZWE0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODkKKyAgICAweDEuNGM1NjFkYmJiMjFkOWE4ZmFhYjQ0ZjY3NzdmOTI5ZjdwLTEsCisgICAgMHgxLmU5ZWY0MzY5ZGQ3NTBwMAorICB9LAorICB7IC8vIEVudHJ5IDE5MAorICAgIDB4MS42MmU0MmZlZmEzOWViMzU3OTNjNzY3MzAwM2U1ZWQ1ZXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTkxCisgICAgLTB4MS42MmU0MmZlZmEzOWYwY2U0ZTBkNTA3ODU3ODg5MjcyMXAtMiwKKyAgICAweDEuNmEwOWU2NjdmM2JjY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDE5MgorICAgIC0weDEuMjRjZmNlNmY4MGQ5YjU3YmY3MTFlOGM3YmEyMWRlZjlwLTIsCisgICAgMHgxLjgwYWE4NGNlNzJmODlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTMKKyAgICAtMHgxLmQ0OTAyNDZkZWZhNmMyNDA3MDQyMTE1N2M4YmRiYWM0cC0zLAorICAgIDB4MS45NzRiMjMzNGYyMzQ2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTk0CisgICAgLTB4MS42NWQ1NThkNGNlMDBhNDE4ODc5M2Y3NDUyYTQxYzlkM3AtMywKKyAgICAweDEuYWRlYmMxOWI3MTcwM3AtMQorICB9LAorICB7IC8vIEVudHJ5IDE5NQorICAgIC0weDEuZjk5MWM2Y2IzYjM3NmQzZTA1YzA0NDlkOTk3OGI5YmJwLTQsCisgICAgMHgxLmM0OGM2MDAxZjBhYzBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTYKKyAgICAtMHgxLjMxYjk5NGQzYTRmODA2NDYxNDZhMzU2MWUxNjY4MjEzcC00LAorICAgIDB4MS5kYjJjZmU2ODZmZTdkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTk3CisgICAgLTB4MS5jY2I3M2NkZGRiMmIzYjViODQxZWIxNTBhM2Q1ZTM0ZHAtNiwKKyAgICAweDEuZjFjZDljY2VlZjIzYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE5OAorICAgIDB4MS4wYjk0ZjdjMTk2MTc0ODViY2I0Mzc1YjBiODJlZDdhYXAtNiwKKyAgICAweDEuMDQzNzFkOWFiNzJmYnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTk5CisgICAgMHgxLmUyNzA3NmUyYWYyZDkyMzQ0MDEyZmI3NDY0Yzc4N2M2cC01LAorICAgIDB4MS4wZjg3NmNjZGY2Y2Q5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDAKKyAgICAweDEuOTg2ZDMyMjgxODBiZTA5MjRhYzNhMTliNzI4NzBlNzlwLTQsCisgICAgMHgxLjFhZDdiYzAxMzY2YjdwMAorICB9LAorICB7IC8vIEVudHJ5IDIwMQorICAgIDB4MS4xYzg5OGMxNjk5OWYyOTE1YWQ1MWEwMDViNjhkZGNjNHAtMywKKyAgICAweDEuMjYyODBiMzQ3NjA5NXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjAyCisgICAgMHgxLjY5ZDQ1OTJhMDM2MjFiMmU2Y2NjYzIwMzZmMzkzMWZmcC0zLAorICAgIDB4MS4zMTc4NWE2N2I1YTczcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDMKKyAgICAweDEuYjQ0Zjc3YmNjOGY1NWE4ODg0NDliYzUzZTlkOWJmM2VwLTMsCisgICAgMHgxLjNjYzhhOTlhZjU0NTFwMAorICB9LAorICB7IC8vIEVudHJ5IDIwNAorICAgIDB4MS5mYzJkNmNmNDdjZjBiMmUwYjg4ZjQ4ODMyNDAyNDA4Y3AtMywKKyAgICAweDEuNDgxOGY4Y2UzNGUyZnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjA1CisgICAgMHgxLjIwY2RjZDE5MmFiNjUzMGIyNGQ3NWFiNDQ1OWUzYmMzcC0yLAorICAgIDB4MS41MzY5NDgwMTc0ODBkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDYKKyAgICAweDEuNDI2MTc0ZGJkNTE1ZDY0OWQ2OTk4NDgxNmU2ODk0MGRwLTIsCisgICAgMHgxLjVlYjk5NzM0YjQxZWJwMAorICB9LAorICB7IC8vIEVudHJ5IDIwNworICAgIDB4MS42MmU0MmZlZmEzOWU1MjA2OTA1MmNiNzNiZjdjMmQ1ZnAtMiwKKyAgICAweDEuNmEwOWU2NjdmM2JjOXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjA4CisgICAgLTB4MS4yNjk2MjExMzRkYjkyNzgzYmViNzY3NmMwYWE5YzJhM3AtMiwKKyAgICAweDEuOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDIwOQorICAgIC0weDEuODlmYTQ2NWNiOTNjMzkzMDJkN2E0M2JmOGE4MzQ1YzhwLTMsCisgICAgMHgxLmE2NjY2NjY2NjY2NjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTAKKyAgICAtMHgxLmFmOGU4MjEwYTQxNjQ4YWQyZWY1YTc1YzgwYWU5YjAycC00LAorICAgIDB4MS5jY2NjY2NjY2NjY2NjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjExCisgICAgLTB4MS45ZWNlOTU1MzIxYjkxMTE5YjY0YjA0ODYxM2RiYzA3ZHAtNiwKKyAgICAweDEuZjMzMzMzMzMzMzMzMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIxMgorICAgIDB4MS44ZmIwNjNlZjJjN2QxMGFjOGM1Y2UzNjFmM2E1OWE3M3AtNSwKKyAgICAweDEuMGNjY2NjY2NjY2NjY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMjEzCisgICAgMHgxLmUyNzA3NmUyYWYyZDdiMTA2ZjljNmZlNzAwMDBmMGI4cC00LAorICAgIDB4MS4xZmZmZmZmZmZmZmZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTQKKyAgICAweDEuNzU2NTAxMWU0OTY2ZTM5NDc0MmNkZWI4MGFhYTBiODVwLTMsCisgICAgMHgxLjMzMzMzMzMzMzMzMzJwMAorICB9LAorICB7IC8vIEVudHJ5IDIxNQorICAgIDB4MS5mMThkYzQxZThlZjE3MDhkZGFjNjE3ZTcyYTE2YTM1MXAtMywKKyAgICAweDEuNDY2NjY2NjY2NjY2NXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjE2CisgICAgMHgxLjMzNGU5ZTQ3ZDA3ZWZkOTdkMTNmZWEyNjVkY2VjMmQxcC0yLAorICAgIDB4MS41OTk5OTk5OTk5OTk4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTcKKyAgICAweDEuNmFhYzA0MTQ2MTUxZmYzNjQ0ZjBkYTg3OTNmZTkxMWZwLTIsCisgICAgMHgxLjZjY2NjY2NjY2NjY2JwMAorICB9LAorICB7IC8vIEVudHJ5IDIxOAorICAgIDB4MS45ZjMyM2VjYmY5ODQ2OWQ2MTM4MjExOWVhYzNlODllMXAtMiwKKyAgICAweDEuN2ZmZmZmZmZmZmZmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjE5CisgICAgMC4wLAorICAgIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjAKKyAgICAweDEuODY2M2Y3OTNjNDZjYzZkNTY5OWI4MmNjM2JkM2JlMzhwLTQsCisgICAgMHgxLjE5OTk5OTk5OTk5OWFwMAorICB9LAorICB7IC8vIEVudHJ5IDIyMQorICAgIDB4MS43NTY1MDExZTQ5NjdiOGU5Yzk4MjM0MGQ2MjM4NDQ2OXAtMywKKyAgICAweDEuMzMzMzMzMzMzMzMzNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjIyCisgICAgMHgxLjBjYTkzN2JlMWI5ZGY4ZTg0YWI1MmQ0YjBhZWZkMDEycC0yLAorICAgIDB4MS40Y2NjY2NjY2NjY2NlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjMKKyAgICAweDEuNTg4YzJkOTEzMzQ5NDM4MGVlYmNlYjc2YzE5MjhmN2NwLTIsCisgICAgMHgxLjY2NjY2NjY2NjY2NjhwMAorICB9LAorICB7IC8vIEVudHJ5IDIyNAorICAgIDB4MS45ZjMyM2VjYmY5ODUxNDgwYmUyY2JjNDk1NmU5MzQ4YnAtMiwKKyAgICAweDEuODAwMDAwMDAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjI1CisgICAgMHgxLmUxNDhhMWEyNzI2ZDM5NGRmOGNkZDZjODBkN2VjODY1cC0yLAorICAgIDB4MS45OTk5OTk5OTk5OTljcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjYKKyAgICAweDEuMGZhZTgxOTE0YTk5NDdiZDJkZTUxMTg3YTYzMDhmZGJwLTEsCisgICAgMHgxLmIzMzMzMzMzMzMzMzZwMAorICB9LAorICB7IC8vIEVudHJ5IDIyNworICAgIDB4MS4yY2YyNWZhZDhmMWM3MTVlNWZhZmNlYjYzYmY2MDcwN3AtMSwKKyAgICAweDEuY2NjY2NjY2NjY2NkMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjI4CisgICAgMHgxLjQ4YTExMjkzZDc4NWY4NmE3YjE3N2Y0YWE0ZTljYWRicC0xLAorICAgIDB4MS5lNjY2NjY2NjY2NjZhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjkKKyAgICAweDEuNjJlNDJmZWZhMzllZjM1NzkzYzc2NzMwMDdlNWVkNWVwLTEsCisgICAgMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDIzMAorICAgIDB4MS4xNTQyNDU3MzM3ZDQyZTFjNmI3M2M4OWQ4NjJiYTE3MXA2LAorICAgIDB4MS4wcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDIzMQorICAgIDB4MS4xNWEzZGU3MTFjYzU0OTRlMjBjZTJmN2UzOTNhOTY2MXA2LAorICAgIDB4MS4xOTk5OTk5OTk5OTlhcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDIzMgorICAgIDB4MS4xNWZjZjdmM2M2ZjhlMWY4ZTA1ODg5Yjc4Y2RjYmQ5NHA2LAorICAgIDB4MS4zMzMzMzMzMzMzMzM0cDEwMAorICB9LAorICB7IC8vIEVudHJ5IDIzMworICAgIDB4MS4xNjRlZWVhYWY1ZWZjYzE1NTNiZTdkY2FkMTM2OTE0MXA2LAorICAgIDB4MS40Y2NjY2NjY2NjY2NlcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDIzNAorICAgIDB4MS4xNjlhZDFhMGM5MDc3NzVmZWM2Mjg1ODhmY2VkMzQwMXA2LAorICAgIDB4MS42NjY2NjY2NjY2NjY4cDEwMAorICB9LAorICB7IC8vIEVudHJ5IDIzNQorICAgIDB4MS4xNmUxNzdiMjAzY2RiMzMwZWMzMWY1NTljZjgyOGFhNnA2LAorICAgIDB4MS44MDAwMDAwMDAwMDAycDEwMAorICB9LAorICB7IC8vIEVudHJ5IDIzNgorICAgIDB4MS4xNzIzOGUxNGRhNDY5YjU1Yjk2Yzk2NzQ0ZTM5MjAzYXA2LAorICAgIDB4MS45OTk5OTk5OTk5OTljcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDIzNworICAgIDB4MS4xNzYxYTI3NjVhNjk2MGFiZTVjZjkyYzA5NTc4MDI5MXA2LAorICAgIDB4MS5iMzMzMzMzMzMzMzM2cDEwMAorICB9LAorICB7IC8vIEVudHJ5IDIzOAorICAgIDB4MS4xNzljMmEzMjkyZjI2NmZmMjgzMzI4M2FmMmEzOGQ3ZnA2LAorICAgIDB4MS5jY2NjY2NjY2NjY2QwcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDIzOQorICAgIDB4MS4xN2QzODc5ODVmODMzYTBkNDA2OWY3OWMxYjc1NzUwN3A2LAorICAgIDB4MS5lNjY2NjY2NjY2NjZhcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDI0MAorICAgIDB4MS4xODA4MGRkMzE3MWI2YzAzMWE5YjU3NmJlNjNiNmQ0Y3A2LAorICAgIDB4MS4wcDEwMQorICB9LAorICB7IC8vIEVudHJ5IDI0MQorICAgIDB4MS4xNTQyNDU3MzM3ZDQyZTFjNmI3M2M4OWQ4NjJiYTE3MXA3LAorICAgIDB4MS4wcDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI0MgorICAgIDB4MS4xNTczMTFmMjJhNGNiYmI1NDYyMGZjMGRkZmIzMWJlOXA3LAorICAgIDB4MS4xOTk5OTk5OTk5OTlhcDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI0MworICAgIDB4MS4xNTlmOWViMzdmNjY4ODBhYTVlNjI5MmE4OTg0MmY4MnA3LAorICAgIDB4MS4zMzMzMzMzMzMzMzM0cDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI0NAorICAgIDB4MS4xNWM4OWEwZjE2ZTFmZDE4ZGY5OTIzMzQyYmIxMTk1OXA3LAorICAgIDB4MS40Y2NjY2NjY2NjY2NlcDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI0NQorICAgIDB4MS4xNWVlOGI4YTAwNmRkMmJlMmJlYjI3MTM0MThjNmFiOXA3LAorICAgIDB4MS42NjY2NjY2NjY2NjY4cDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI0NgorICAgIDB4MS4xNjExZGU5MjlkZDBmMGE2YWJkMmRlZmJhYWQ3MTYwY3A3LAorICAgIDB4MS44MDAwMDAwMDAwMDAycDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI0NworICAgIDB4MS4xNjMyZTljNDA5MGQ2NGI5MTI3MDJmODhlYTMyNjBkNnA3LAorICAgIDB4MS45OTk5OTk5OTk5OTljcDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI0OAorICAgIDB4MS4xNjUxZjNmNGM5MWVjNzY0MjhhMWFkYWYwZGQxZDIwMXA3LAorICAgIDB4MS5iMzMzMzMzMzMzMzM2cDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI0OQorICAgIDB4MS4xNjZmMzdkMmU1NjM0YThkYzlkMzc4NmMzYzY3OTc3OHA3LAorICAgIDB4MS5jY2NjY2NjY2NjY2QwcDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI1MAorICAgIDB4MS4xNjhhZTY4NWNiYWJiNDE0ZDVlZWUwMWNkMGQwOGIzY3A3LAorICAgIDB4MS5lNjY2NjY2NjY2NjZhcDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI1MQorICAgIDB4MS4xNmE1MjlhMzI3NzdjZDBmYzMwNzkwMDRiNjMzODc1ZnA3LAorICAgIDB4MS4wcDIwMQorICB9LAorICB7IC8vIEVudHJ5IDI1MgorICAgIDB4MS41YTkyZDZkMDA1YzkzOWEzODY1MGJhYzRlN2I2ODljZXA5LAorICAgIDB4MS4wcDEwMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTMKKyAgICAtMHgxLjAwMDAwODAwMDA1NTU1NTk1NTU1ODg4ODhiMzMzMzU3cC0yMCwKKyAgICAweDEuZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTQKKyAgICAtMHgxLjAwMDAwNDAwMDAxNTU1NTVkNTU1NTg4ODg4OWRkZGRlcC0yMSwKKyAgICAweDEuZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTUKKyAgICAwLjAsCisgICAgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDI1NgorICAgIDB4MS5mZmZmZjgwMDAwMmFhYWE5YWFhYWIxMTExMGU2NjY2N3AtMjIsCisgICAgMHgxLjAwMDAwODBwMAorICB9LAorICB7IC8vIEVudHJ5IDI1NworICAgIDB4MS5mZmZmZjAwMDAwYWFhYWEyYWFhYjExMTEwYmJiYmMwNHAtMjEsCisgICAgMHgxLjAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTgKKyAgICAtMHgxLjAwMDAwMDAyMDAwMDAwMDU1NTU1NTU2NTU1NTU1NTg4cC0zMCwKKyAgICAweDEuZmZmZmZmZjgwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjU5CisgICAgLTB4MS4wMDAwMDAwMTAwMDAwMDAxNTU1NTU1NTc1NTU1NTU1OHAtMzEsCisgICAgMHgxLmZmZmZmZmZjMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI2MAorICAgIDAuMCwKKyAgICAweDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjYxCisgICAgMHgxLmZmZmZmZmZlMDAwMDAwMDJhYWFhYWFhNmFhYWFhYWIxcC0zMiwKKyAgICAweDEuMDAwMDAwMDIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjIKKyAgICAweDEuZmZmZmZmZmMwMDAwMDAwYWFhYWFhYThhYWFhYWFiMTFwLTMxLAorICAgIDB4MS4wMDAwMDAwNDBwMAorICB9LAorICB7IC8vIEVudHJ5IDI2MworICAgIC0weDEuMDAwMDAwMDAwMDgwMDAwMDAwMDA1NTU1NTU1NTU1OTVwLTQwLAorICAgIDB4MS5mZmZmZmZmZmZlMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI2NAorICAgIC0weDEuMDAwMDAwMDAwMDQwMDAwMDAwMDAxNTU1NTU1NTU1NWRwLTQxLAorICAgIDB4MS5mZmZmZmZmZmZmMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI2NQorICAgIDAuMCwKKyAgICAweDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjY2CisgICAgMHgxLmZmZmZmZmZmZmY4MDAwMDAwMDAwMmFhYWFhYWFhYTlhcC00MiwKKyAgICAweDEuMDAwMDAwMDAwMDhwMAorICB9LAorICB7IC8vIEVudHJ5IDI2NworICAgIDB4MS5mZmZmZmZmZmZmMDAwMDAwMDAwMGFhYWFhYWFhYWEyYXAtNDEsCisgICAgMHgxLjAwMDAwMDAwMDEwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjgKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDA1NTU1NTU1cC01MCwKKyAgICAweDEuZmZmZmZmZmZmZmZmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI2OQorICAgIC0weDEuMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDE1NTU1NTVwLTUxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjcwCisgICAgMC4wLAorICAgIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzEKKyAgICAweDEuZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDJhYWFhYWFwLTUyLAorICAgIDB4MS4wMDAwMDAwMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzIKKyAgICAweDEuZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMGFhYWFhYWFwLTUxLAorICAgIDB4MS4wMDAwMDAwMDAwMDA0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzMKKyAgICAweDEuNjJlNDJmZWZhMzllZjM1MzkzYzc2NzMwMDdlNWRkNWVwOSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMjc0CisgICAgLTB4MS43NDM4NTQ0NmQ3MWMzNjM5NWE3ZWEzYjllMDQ4YTc3NXA5LAorICAgIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgMjc1CisgICAgLTB4MS42MmU0MmZlZmEzOWYzYTI2MWRhMjA1ZmQxM2NiNTNkZnAtMiwKKyAgICAweDEuNmEwOWU2NjdmM2JjYnAtMQorICB9LAorICB7IC8vIEVudHJ5IDI3NgorICAgIC0weDEuNjJlNDJmZWZhMzlmMGNlNGUwZDUwNzg1Nzg4OTI3MjFwLTIsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzcKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWRmYTNhNDA4MDkwZGRmNDZmYTYycC0yLAorICAgIDB4MS42YTA5ZTY2N2YzYmNkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjc4CisgICAgMHgxLjYyZTQyZmVmYTM5ZWFjODkwOWVjYzg2MmZjMDA4NmRkcC0yLAorICAgIDB4MS42YTA5ZTY2N2YzYmNicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzkKKyAgICAweDEuNjJlNDJmZWZhMzllZDljYTQ2YjljNmRhOTc0MmIzOWJwLTIsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NwMAorICB9LAorICB7IC8vIEVudHJ5IDI4MAorICAgIDB4MS42MmU0MmZlZmEzOWYwNzBiODM4NmM1NTIzMDg0ZTA1YXAtMiwKKyAgICAweDEuNmEwOWU2NjdmM2JjZHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjgxCisgICAgLTB4MS42MmU0MmZlZmEzOWYwMzU3OTNjNzY3MzAwODI1ZWQ1ZXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMgorICB9LAorICB7IC8vIEVudHJ5IDI4MgorICAgIC0weDEuNjJlNDJmZWZhMzllZjM1NzkzYzc2NzMwMDdlNWVkNWVwLTEsCisgICAgMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODMKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWQzNTc5M2M3NjczMDA4ZTVlZDVlcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjg0CisgICAgLTB4MS4yNjk2MjExMzRkYjk1MjJlNjk2MjEyMTZiNjM3ZmI4NnAtMiwKKyAgICAweDEuN2ZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDI4NQorICAgIC0weDEuMjY5NjIxMTM0ZGI5Mjc4M2JlYjc2NzZjMGFhOWMyYTNwLTIsCisgICAgMHgxLjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODYKKyAgICAtMHgxLjI2OTYyMTEzNGRiOGZjZDkxNDBjYmNjMTYwZTJhNjMxcC0yLAorICAgIDB4MS44MDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjg3CisgICAgMHgxLjlmMzIzZWNiZjk4NDk0ODBiZTJjYmM0OTU5OTNkZjM2cC0yLAorICAgIDB4MS43ZmZmZmZmZmZmZmZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODgKKyAgICAweDEuOWYzMjNlY2JmOTg0YmYyYjY4ZDc2NmY0MDUyMjE4MTlwLTIsCisgICAgMHgxLjhwMAorICB9LAorICB7IC8vIEVudHJ5IDI4OQorICAgIDB4MS45ZjMyM2VjYmY5ODRlOWQ2MTM4MjExOWVhZWU5MzQ4YnAtMiwKKyAgICAweDEuODAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjkwCisgICAgMHgxLjU0ZTNjMGIxMGEzNjQzNGFiYWMyNzcxNjAzMTFjY2I0cC05LAorICAgIDB4MS4wMGFhYWFhYWFhYWFhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTEKKyAgICAweDEuNTRlM2MwYjEwYTU2MmUwMzk0ZGJiYjkzNTlmNDc3ZGRwLTksCisgICAgMHgxLjAwYWFhYWFhYWFhYWJwMAorICB9LAorICB7IC8vIEVudHJ5IDI5MgorICAgIDB4MS41NGUzYzBiMTBhNzYxOGJjNmVmNTAwMGViMzdmMjU2M3AtOSwKKyAgICAweDEuMDBhYWFhYWFhYWFhY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMjkzCisgICAgMHgxLjYyZTQyZmVmYTM5ZWViNTc5M2M3NjczMDA3YzVlZDVlcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDI5NAorICAgIDB4MS42MmU0MmZlZmEzOWVmMzU3OTNjNzY3MzAwN2U1ZWQ1ZXAwLAorICAgIDB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTUKKyAgICAweDEuNjJlNDJmZWZhMzlmMDM1NzkzYzc2NzMwMDc2NWVkNWVwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjk2CisgICAgMHgxLjYyZTQyZmVmYTM5ZWUzNTc5M2M3NjczMDA3YTVlZDVlcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTcKKyAgICAweDEuNjJlNDJmZWZhMzllZjM1NzkzYzc2NzMwMDdlNWVkNWVwLTEsCisgICAgMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDI5OAorICAgIDB4MS42MmU0MmZlZmEzOWYxMzU3OTNjNzY3MzAwNmU1ZWQ1ZXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxCisgIH0sCisgIHsgLy8gRW50cnkgMjk5CisgICAgLTB4MS4wMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDE1NTU1NXAtNTMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDAKKyAgICAwLjAsCisgICAgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDMwMQorICAgIDB4MS5mZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMGFhYWFhYXAtNTMsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDMwMgorICAgIC0weDEuNjJlNDJmZWZhMzlmMDM1NzkzYzc2NzMwMDgyNWVkNWVwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDMKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTVlZDVlcC0xLAorICAgIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzA0CisgICAgLTB4MS42MmU0MmZlZmEzOWVkMzU3OTNjNzY3MzAwOGU1ZWQ1ZXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDMwNQorICAgIC0weDEuNjJlNDJmZWZhMzllZmI1NzkzYzc2NzMwMDgwNWVkNWVwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDMwNgorICAgIC0weDEuNjJlNDJmZWZhMzllZjM1NzkzYzc2NzMwMDdlNWVkNWVwMCwKKyAgICAweDEuMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDMwNworICAgIC0weDEuNjJlNDJmZWZhMzllZTM1NzkzYzc2NzMwMDg2NWVkNWVwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMgorICB9LAorICB7IC8vIEVudHJ5IDMwOAorICAgIC0weDEuMGEyYjIzZjNiYWI3M2E4MWFlZDU4ZDY0MDVmYzcyMDZwMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDMwOQorICAgIC0weDEuMGEyYjIzZjNiYWI3MzY4MWFlZDU4ZDY0MDVlYzcyMDZwMSwKKyAgICAweDEuMHAtMworICB9LAorICB7IC8vIEVudHJ5IDMxMAorICAgIC0weDEuMGEyYjIzZjNiYWI3MmU4MWFlZDU4ZDY0MDYyYzcyMDZwMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMworICB9LAorICB7IC8vIEVudHJ5IDMxMQorICAgIC0weDEuNjJlNDJmZWZhMzllZjc1NzkzYzc2NzMwMDdmNWVkNWVwMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDMxMgorICAgIC0weDEuNjJlNDJmZWZhMzllZjM1NzkzYzc2NzMwMDdlNWVkNWVwMSwKKyAgICAweDEuMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDMxMworICAgIC0weDEuNjJlNDJmZWZhMzllZWI1NzkzYzc2NzMwMDgyNWVkNWVwMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNAorICB9LAorICB7IC8vIEVudHJ5IDMxNAorICAgIC0weDEuYmI5ZDNiZWI4Yzg2YjQyZDc4Yjk0MGZjMDllZjY4YjZwMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNgorICB9LAorICB7IC8vIEVudHJ5IDMxNQorICAgIC0weDEuYmI5ZDNiZWI4Yzg2YjAyZDc4Yjk0MGZjMDlkZjY4YjZwMSwKKyAgICAweDEuMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDMxNgorICAgIC0weDEuYmI5ZDNiZWI4Yzg2YTgyZDc4Yjk0MGZjMGExZjY4YjZwMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNQorICB9LAorICB7IC8vIEVudHJ5IDMxNworICAgIC0weDEuMGEyYjIzZjNiYWI3Mzg4MWFlZDU4ZDY0MDVmNDcyMDZwMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNworICB9LAorICB7IC8vIEVudHJ5IDMxOAorICAgIC0weDEuMGEyYjIzZjNiYWI3MzY4MWFlZDU4ZDY0MDVlYzcyMDZwMiwKKyAgICAweDEuMHAtNgorICB9LAorICB7IC8vIEVudHJ5IDMxOQorICAgIC0weDEuMGEyYjIzZjNiYWI3MzI4MWFlZDU4ZDY0MDYwYzcyMDZwMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNgorICB9LAorICB7IC8vIEVudHJ5IDMyMAorICAgIC0weDEuMzY4N2E5ZjFhZjJiMTZlY2ExNGU3YTRhMDZmMTJmYjJwMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtOAorICB9LAorICB7IC8vIEVudHJ5IDMyMQorICAgIC0weDEuMzY4N2E5ZjFhZjJiMTRlY2ExNGU3YTRhMDZlOTJmYjJwMiwKKyAgICAweDEuMHAtNworICB9LAorICB7IC8vIEVudHJ5IDMyMgorICAgIC0weDEuMzY4N2E5ZjFhZjJiMTBlY2ExNGU3YTRhMDcwOTJmYjJwMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNworICB9LAorICB7IC8vIEVudHJ5IDMyMworICAgIC0weDEuNjJlNDJmZWZhMzllZjU1NzkzYzc2NzMwMDdlZGVkNWVwMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtOQorICB9LAorICB7IC8vIEVudHJ5IDMyNAorICAgIC0weDEuNjJlNDJmZWZhMzllZjM1NzkzYzc2NzMwMDdlNWVkNWVwMiwKKyAgICAweDEuMHAtOAorICB9LAorICB7IC8vIEVudHJ5IDMyNQorICAgIC0weDEuNjJlNDJmZWZhMzllZWY1NzkzYzc2NzMwMDgwNWVkNWVwMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtOAorICB9LAorICB7IC8vIEVudHJ5IDMyNgorICAgIC0weDEuOGY0MGI1ZWQ5ODEyZDNjMjg2NDA1NDE2MDhlYWFiMGFwMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjcKKyAgICAtMHgxLjhmNDBiNWVkOTgxMmQxYzI4NjQwNTQxNjA4ZTJhYjBhcDIsCisgICAgMHgxLjBwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjgKKyAgICAtMHgxLjhmNDBiNWVkOTgxMmNkYzI4NjQwNTQxNjA5MDJhYjBhcDIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjkKKyAgICAtMHgxLmJiOWQzYmViOGM4NmIyMmQ3OGI5NDBmYzA5ZTc2OGI2cDIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMzMwCisgICAgLTB4MS5iYjlkM2JlYjhjODZiMDJkNzhiOTQwZmMwOWRmNjhiNnAyLAorICAgIDB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDMzMQorICAgIC0weDEuYmI5ZDNiZWI4Yzg2YWMyZDc4Yjk0MGZjMDlmZjY4YjZwMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzIKKyAgICAtMHgxLjIwNTk2NmYyYjRmMTI2YjcyODEyMDNkNzA2NmVkMGRjcDMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMzMzCisgICAgLTB4MS4yMDU5NjZmMmI0ZjEyNWI3MjgxMjAzZDcwNjZhZDBkY3AzLAorICAgIDB4MS4wcC0xMworICB9LAorICB7IC8vIEVudHJ5IDMzNAorICAgIC0weDEuMjA1OTY2ZjJiNGYxMjNiNzI4MTIwM2Q3MDY3YWQwZGNwMywKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzUKKyAgICAtMHgxLjIwNTk2NmYyYjRmMTI2YjcyODEyMDNkNzA2NmVkMGRjcDMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMzM2CisgICAgLTB4MS4yMDU5NjZmMmI0ZjEyNWI3MjgxMjAzZDcwNjZhZDBkY3AzLAorICAgIDB4MS4wcC0xMworICB9LAorICB7IC8vIEVudHJ5IDMzNworICAgIC0weDEuMjA1OTY2ZjJiNGYxMjNiNzI4MTIwM2Q3MDY3YWQwZGNwMywKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzgKKyAgICAtMHgxLjBhMmIyM2YzYmFiNzNhODFhZWQ1OGQ2NDA1ZmM3MjA2cDEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzkKKyAgICAtMHgxLjBhMmIyM2YzYmFiNzM2ODFhZWQ1OGQ2NDA1ZWM3MjA2cDEsCisgICAgMHgxLjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDAKKyAgICAtMHgxLjBhMmIyM2YzYmFiNzJlODFhZWQ1OGQ2NDA2MmM3MjA2cDEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDEKKyAgICAtMHgxLjExNzhlODIyN2U0ODA3MDdjYWZkNDQ1OTc4NWIwZThmcC0zLAorICAgIDB4MS5iZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzQyCisgICAgLTB4MS4xMTc4ZTgyMjdlNDdiZGUzMzhiNDFmYzcyZGU4MWUzYnAtMywKKyAgICAweDEuY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDM0MworICAgIC0weDEuMTE3OGU4MjI3ZTQ3NzRiZWE2NmFmYjM0ZTYxMWU5ZmRwLTMsCisgICAgMHgxLmMwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDQKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWY3NTc5M2M3NjczMDA3ZjVlZDVlcDEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDUKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTVlZDVlcDEsCisgICAgMHgxLjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDYKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWViNTc5M2M3NjczMDA4MjVlZDVlcDEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDcKKyAgICAtMHgxLjA4NTk4YjU5ZTNhMGYxMTJjODYyNDdkOGJlNDFkNDg3cC00LAorICAgIDB4MS5kZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzQ4CisgICAgLTB4MS4wODU5OGI1OWUzYTA2ODhhM2ZkOWJmNTAzMzcyYzEyZnAtNCwKKyAgICAweDEuZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM0OQorICAgIC0weDEuMDg1OThiNTllMzlmZTAwMWI3NTEzNmM3YWQzMGMzNzZwLTQsCisgICAgMHgxLmUwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTAKKyAgICAtMHgxLmJiOWQzYmViOGM4NmI0MmQ3OGI5NDBmYzA5ZWY2OGI2cDEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTEKKyAgICAtMHgxLmJiOWQzYmViOGM4NmIwMmQ3OGI5NDBmYzA5ZGY2OGI2cDEsCisgICAgMHgxLjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTIKKyAgICAtMHgxLmJiOWQzYmViOGM4NmE4MmQ3OGI5NDBmYzBhMWY2OGI2cDEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTMKKyAgICAtMHgxLjA0MTVkODllNzQ0NTRmNDM4NDRiN2U1NWNlZGQ4MzdicC01LAorICAgIDB4MS5lZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzU0CisgICAgLTB4MS4wNDE1ZDg5ZTc0NDQ0NzAxNzNjNzVkNGQ4ODg5ZGUwZXAtNSwKKyAgICAweDEuZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1NQorICAgIC0weDEuMDQxNWQ4OWU3NDQzM2ViZjYzNDMzYzQ1NGFiYzdiMzlwLTUsCisgICAgMHgxLmYwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTYKKyAgICAtMHgxLjBhMmIyM2YzYmFiNzM4ODFhZWQ1OGQ2NDA1ZjQ3MjA2cDIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTcKKyAgICAtMHgxLjBhMmIyM2YzYmFiNzM2ODFhZWQ1OGQ2NDA1ZWM3MjA2cDIsCisgICAgMHgxLjBwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTgKKyAgICAtMHgxLjBhMmIyM2YzYmFiNzMyODFhZWQ1OGQ2NDA2MGM3MjA2cDIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTkKKyAgICAtMHgxLjAyMDU2NTg5MzU4NjdjYmZhNWE5MjYzYmQ4MWRhNGEwcC02LAorICAgIDB4MS5mN2ZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzYwCisgICAgLTB4MS4wMjA1NjU4OTM1ODQ3NDlmMjNhMTA1YjljN2JiOWE2ZnAtNiwKKyAgICAweDEuZjgwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzYxCisgICAgLTB4MS4wMjA1NjU4OTM1ODI2YzdlYTE5OGU1MzdjN2RjYTA4ZnAtNiwKKyAgICAweDEuZjgwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM2MgorICAgIC0weDEuMzY4N2E5ZjFhZjJiMTZlY2ExNGU3YTRhMDZmMTJmYjJwMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtOAorICB9LAorICB7IC8vIEVudHJ5IDM2MworICAgIC0weDEuMzY4N2E5ZjFhZjJiMTRlY2ExNGU3YTRhMDZlOTJmYjJwMiwKKyAgICAweDEuMHAtNworICB9LAorICB7IC8vIEVudHJ5IDM2NAorICAgIC0weDEuMzY4N2E5ZjFhZjJiMTBlY2ExNGU3YTRhMDcwOTJmYjJwMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNworICB9LAorICB7IC8vIEVudHJ5IDM2NQorICAgIC0weDEuMDEwMTU3NTg4ZGViMWE5Y2VjOWIwM2ZiZWU0OWM2YjBwLTcsCisgICAgMHgxLmZiZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjYKKyAgICAtMHgxLjAxMDE1NzU4OGRlNzEyOGNjYzVhODJmOWRhMDBmNDhicC03LAorICAgIDB4MS5mYzBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjcKKyAgICAtMHgxLjAxMDE1NzU4OGRlMzBhN2NhYzFhMDFmN2U2MzlhNjcwcC03LAorICAgIDB4MS5mYzAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzY4CisgICAgLTB4MS42MmU0MmZlZmEzOWVmNTU3OTNjNzY3MzAwN2VkZWQ1ZXAyLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC05CisgIH0sCisgIHsgLy8gRW50cnkgMzY5CisgICAgLTB4MS42MmU0MmZlZmEzOWVmMzU3OTNjNzY3MzAwN2U1ZWQ1ZXAyLAorICAgIDB4MS4wcC04CisgIH0sCisgIHsgLy8gRW50cnkgMzcwCisgICAgLTB4MS42MmU0MmZlZmEzOWVlZjU3OTNjNzY3MzAwODA1ZWQ1ZXAyLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC04CisgIH0sCisgIHsgLy8gRW50cnkgMzcxCisgICAgLTB4MS4wMDgwNTU5NTg4YmI1ZmVkYTBlYjQ1OTVjNWZiZTJiMXAtOCwKKyAgICAweDEuZmRmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM3MgorICAgIC0weDEuMDA4MDU1OTU4OGIzNTdlNTk4ZTMzZDhkOWRiMzdhMjlwLTgsCisgICAgMHgxLmZlMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM3MworICAgIC0weDEuMDA4MDU1OTU4OGFiNGZkZDkwZGIzNTg1YjVlYmQyYTFwLTgsCisgICAgMHgxLmZlMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzQKKyAgICAtMHgxLjhmNDBiNWVkOTgxMmQzYzI4NjQwNTQxNjA4ZWFhYjBhcDIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzc1CisgICAgLTB4MS44ZjQwYjVlZDk4MTJkMWMyODY0MDU0MTYwOGUyYWIwYXAyLAorICAgIDB4MS4wcC05CisgIH0sCisgIHsgLy8gRW50cnkgMzc2CisgICAgLTB4MS44ZjQwYjVlZDk4MTJjZGMyODY0MDU0MTYwOTAyYWIwYXAyLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC05CisgIH0sCisgIHsgLy8gRW50cnkgMzc3CisgICAgLTB4MS4wMDQwMTU1ZDU4OTllNjc0NjkxZmVmNDE0MDJmM2U3YnAtOSwKKyAgICAweDEuZmVmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM3OAorICAgIC0weDEuMDA0MDE1NWQ1ODg5ZGU3MDY3MWVlZWMwYmZjZWZlNTNwLTksCisgICAgMHgxLmZmMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM3OQorICAgIC0weDEuMDA0MDE1NWQ1ODc5ZDY2YzY1MWRlZTQwYmZlZjFlNmJwLTksCisgICAgMHgxLmZmMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODAKKyAgICAtMHgxLmJiOWQzYmViOGM4NmIyMmQ3OGI5NDBmYzA5ZTc2OGI2cDIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMzgxCisgICAgLTB4MS5iYjlkM2JlYjhjODZiMDJkNzhiOTQwZmMwOWRmNjhiNnAyLAorICAgIDB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDM4MgorICAgIC0weDEuYmI5ZDNiZWI4Yzg2YWMyZDc4Yjk0MGZjMDlmZjY4YjZwMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODMKKyAgICAtMHgxLjAwMjAwNTU2NTVhODliMzc3ZDU4MDFmZDA4ZmQ5ZjJkcC0xMCwKKyAgICAweDEuZmY3ZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM4NAorICAgIC0weDEuMDAyMDA1NTY1NTg4OTMzNTdjZDdlMWY0ODZiZDA3MDVwLTEwLAorICAgIDB4MS5mZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODUKKyAgICAtMHgxLjAwMjAwNTU2NTU2ODhiMzM3YzU3YzFlZDA0ZmM5ZWVkcC0xMCwKKyAgICAweDEuZmY4MDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM4NgorICAgIC0weDEuMjA1OTY2ZjJiNGYxMjZiNzI4MTIwM2Q3MDY2ZWQwZGNwMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODcKKyAgICAtMHgxLjIwNTk2NmYyYjRmMTI1YjcyODEyMDNkNzA2NmFkMGRjcDMsCisgICAgMHgxLjBwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMzg4CisgICAgLTB4MS4yMDU5NjZmMmI0ZjEyM2I3MjgxMjAzZDcwNjdhZDBkY3AzLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xMworICB9LAorICB7IC8vIEVudHJ5IDM4OQorICAgIC0weDEuMDAwNDAwMTU1NmQ1NjA4OGRkZTA3MDNmMDM0Y2EwOTZwLTEzLAorICAgIDB4MS5mZmVmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzkwCisgICAgLTB4MS4wMDA0MDAxNTU1ZDU1ODg4OWRkZTcwMmIwMjhjOTk5NnAtMTMsCisgICAgMHgxLmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM5MQorICAgIC0weDEuMDAwNDAwMTU1NGQ1NTA4ODVkZGM3MDFmMDI0Yzk4OTZwLTEzLAorICAgIDB4MS5mZmYwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzkyCisgICAgSFVHRV9WQUwsCisgICAgSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTMKKyAgICAweDEuNjJlNDJmZWZhMzllZjM1MzkzYzc2NzMwMDdlNWRkNWVwOSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMzk0CisgICAgMHgxLjYyZTQyZmVmYTM5ZWYzNGY5M2M3NjczMDA3ZTVhZDVlcDksCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDM5NQorICAgIDB4MS4yNTBkMDQ4ZTdhMWJjZGVlNDk5ZmE1YjBjYTFkZDI0M3AwLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTYKKyAgICAweDEuY2U2YmIyNWFhMTMxNTEwOWZlZWZjODYzMThhYjZlNTJwLTIsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDM5NworICAgIDB4MS5mZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMGFhYWFhYXAtNTMsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDM5OAorICAgIDAuMCwKKyAgICAweDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzk5CisgICAgLTB4MS4wMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDE1NTU1NXAtNTMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDAKKyAgICAtMHgxLmVlYjk1YjA5NGMxOTJiNGE1MTNlMGJmOWVlNDBkOGQ0cC0zLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDAxCisgICAgLTB4MS42MjMyYmRkN2FiY2QyM2Q1ZTdmZDgzN2M2ZmUyM2E2N3A5LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNDAyCisgICAgLTB4MS42MjMyYmRkN2FiY2QyM2RkZTdmZDgzN2M2ZmUxZmE2N3A5LAorICAgIDB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNDAzCisgICAgLTB4MS42MjMyYmRkN2FiY2QyM2U1ZTdmZDgzN2M2ZmUyM2E2N3A5LAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNDA0CisgICAgLTB4MS42MjMyYmRkN2FiY2QyM2VkZTdmZDgzN2M2ZmUyZmE2N3A5LAorICAgIDB4MS5mZmZmZmZmZmZmZmZjcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNDA1CisgICAgLTB4MS43M2RmOWIzYWRiMzM0ZTdjODQ5OWIxZTAxNDQ2YWRmYXA5LAorICAgIDB4MS4wcC0xMDczCisgIH0sCisgIHsgLy8gRW50cnkgNDA2CisgICAgLTB4MS43NDM4NTQ0NmQ3MWMzNjM5NWE3ZWEzYjllMDQ4YTc3NXA5LAorICAgIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNDA3CisgICAgLUhVR0VfVkFMLAorICAgIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDQwOAorICAgIC1IVUdFX1ZBTCwKKyAgICAtMC4wCisgIH0sCit9OworI2VuZGlmIC8vIF9fQklPTklDX18KKworVEVTVChtYXRoX2xvZywgbG9nX2ludGVsKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihnX2xvZ19pbnRlbF9kYXRhKS9zaXplb2YobG9nX2ludGVsX2RhdGFfdCk7IGkrKykgeworICAgIEVYUEVDVF9ET1VCTEVfRVEoZ19sb2dfaW50ZWxfZGF0YVtpXS5leHBlY3RlZCwgbG9nKGdfbG9nX2ludGVsX2RhdGFbaV0uY2FsbF9kYXRhKSkgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKKyAgfQorI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWF0aF9sb2dmX3Rlc3QuY3BwIGIvdGVzdHMvbWF0aF9sb2dmX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZDA5MjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tYXRoX2xvZ2ZfdGVzdC5jcHAKQEAgLTAsMCArMSwxMzI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCit0eXBlZGVmIHN0cnVjdCB7CisgIGZsb2F0IGV4cGVjdGVkOworICBmbG9hdCBjYWxsX2RhdGE7Cit9IGxvZ2ZfaW50ZWxfZGF0YV90OworCitzdGF0aWMgbG9nZl9pbnRlbF9kYXRhX3QgZ19sb2dmX2ludGVsX2RhdGFbXSA9IHsKKyAgeyAvLyBFbnRyeSAwCisgICAgLTB4MS5iYjlkM2FlYjhjODdiMDJkNzc2M2ViYThiNDhhMTAyZHAxLAorICAgIDB4MS4wMDAwMDJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxCisgICAgMHgxLmZmZmZmZTAwMDAwMmFhYWFhNmFhYWFiMTExMTEwNjY2cC0yNCwKKyAgICAweDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyCisgICAgLTB4MS5jNmI0NWNlYjA5YTVhN2M4MmFhY2QxY2FkZjcyNTNkY3A0LAorICAgIDB4MS4wMDAwMDhwLTQxCisgIH0sCisgIHsgLy8gRW50cnkgMworICAgIC0weDEuZDFjYjdjZWE4NmQwOWY2MjQ3NGIxNGM0NWY0Y2I2ODBwMywKKyAgICAweDEuMDAwMDEwcC0yMQorICB9LAorICB7IC8vIEVudHJ5IDQKKyAgICAtMHgxLmZlMjgwMGU4N2MzNDdkNzg4ZjM5NGVmMmU5M2RiODY4cDUsCisgICAgMHgxLjAwMDA4MHAtOTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1CisgICAgMHgxLjFmZmZhZjAwMWU1ZmYzMmY4NWM0MzZlNTlmZTczYjFlcC0xNywKKyAgICAweDEuMDAwMDkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2CisgICAgLTB4MS4wYTI3YTNmZmZhN2UwZDAzMWQ5YTU1ZDE1N2EwZThjOHAxLAorICAgIDB4MS4wMDA3cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNworICAgIDB4MS41NGRlNmVlNzg5ODlhOWFjZmM4NzVjMWQ0NWUxNjQ5MHAtOSwKKyAgICAweDEuMDBhYWE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4CisgICAgMHgxLjhmNDgyNmZmZjc4N2M1OGZhYjUyMGU1MDU5NTJiYjU1cC05LAorICAgIDB4MS4wMGM3ZjJwMAorICB9LAorICB7IC8vIEVudHJ5IDkKKyAgICAtMHgxLjYxNTBjZWZmZmM4M2JhMmRhNDNkOGQ3NDU1ZWYyZmRlcC0xLAorICAgIDB4MS4wMGNhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAKKyAgICAweDEuY2YyZTNlYjA5MjhiZGY1Y2JmMDY0YTI3YzY0MjJjODVwLTksCisgICAgMHgxLjAwZThwMAorICB9LAorICB7IC8vIEVudHJ5IDExCisgICAgMHgxLmYwZWU4YTlhNjdhYjM2NTk3ZmZkM2M5MzMwNGQwY2M1cC05LAorICAgIDB4MS4wMGY4ZjBwMAorICB9LAorICB7IC8vIEVudHJ5IDEyCisgICAgMHgxLmZiZGZjODk3ZDIzOWZiNDlkYzFjMzFhZmVhZWExZWE1cC05LAorICAgIDB4MS4wMGZlNmVwMAorICB9LAorICB7IC8vIEVudHJ5IDEzCisgICAgMHgxLmZkYzVlNDhmODkzZThmNDg5NjdlZTRmZjFlODk1ZGQ1cC05LAorICAgIDB4MS4wMGZmNjJwMAorICB9LAorICB7IC8vIEVudHJ5IDE0CisgICAgMHgxLmJlNzljNzAwNThlYzhmOWE2YzA0MDQzZjUyNzYzYzMwcC04LAorICAgIDB4MS4wMWMwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNQorICAgIDB4MS5lM2FmZWYwMzZjNDQyYmVhNDZkMTA1ZjY4NjRlYTZmM3AtOCwKKyAgICAweDEuMDFlNTdhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNgorICAgIDB4MS5lYjkyZGIwM2Q4OWYyNTcxOWFmOTA4ZWJiNmU3ZTUxMHAtOCwKKyAgICAweDEuMDFlZDZjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNworICAgIDB4MS5mODczYjUwMmY5NDI3Y2IxYTE0ODcyMjY3ZmZhZTJmOHAtOCwKKyAgICAweDEuMDFmYTY2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOAorICAgIDB4MS5mYzEwODkwM2ZjZDRjZDQ0NTgwMGNiMDZjMTY0ZDBiMHAtOCwKKyAgICAweDEuMDFmZTBhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOQorICAgIDB4MS5mZWExNjhmYWQ2Mjc0MjMyYWQzOTk4YzNlMzllNDNkOXAtOCwKKyAgICAweDEuMDIwMGEwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMAorICAgIDB4MS4wY2U0YzlmZTNlZGQ3ZjQ1ZGMzOGQzMGY3NjMwNTkzMXAtNywKKyAgICAweDEuMDIxY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMjEKKyAgICAweDEuMGVlMDk2ZTI3NjRmOWYxZTY0ODQwNjA3NDM2Y2MwOTNwLTcsCisgICAgMHgxLjAyMjBwMAorICB9LAorICB7IC8vIEVudHJ5IDIyCisgICAgMHgxLmZjMDk4ZWZmZmU0OWZlMzJjMzU3NmRlZjZmMzAzMzM1cC03LAorICAgIDB4MS4wM2ZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDIzCisgICAgLTB4MS41OGZlZDQwMDAxNWZmZjk0YWMzYmI5ZWJiYzgxYzhhZXAtMSwKKyAgICAweDEuMDRmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDI0CisgICAgLTB4MS41OGIxZjFmZmZmYTU2YjU1YjZhNzIyZTBhYjJjNWFlNnAtMSwKKyAgICAweDEuMDUyNjM0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjUKKyAgICAweDEuZTcyMGEzMDAzZDA5OTczMWM4NWNlNmQ2ODk1NDZhNzZwLTYsCisgICAgMHgxLjA3YjljNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjYKKyAgICAweDEuZjVhNGNiMDAzNTM5MzdhZDhiMWUwN2E2YTQ2OTE4OWZwLTYsCisgICAgMHgxLjA3ZjU5Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgMjcKKyAgICAtMHgxLmIwMDgwZmZmZDU4OGVjOTE4ODM3MTU3MzZhYWUwZjUwcDQsCisgICAgMHgxLjA4cC0zOQorICB9LAorICB7IC8vIEVudHJ5IDI4CisgICAgMHgxLjdmNjRhNzAwMDAyYjU0ZDZmYjVkNjliYzM1YzVlMmNhcC0xLAorICAgIDB4MS4wZWE3YjBwMQorICB9LAorICB7IC8vIEVudHJ5IDI5CisgICAgMHgxLmNmMjgyNTA3OGQ4YmQyMWY1YjU1NDMzNDJlNjZiNTRkcC01LAorICAgIDB4MS4wZWU0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMAorICAgIDB4MS44NDU2NTcwMDAzOTFmMzQwZGE3NDVkOWU1ZDI4MzE2NXAtMSwKKyAgICAweDEuMTE0OHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzEKKyAgICAtMHgxLmI5NTk0MjAwMDRiNTFmYjgwZDgzMjkxNzJkODkyMmY2cDMsCisgICAgMHgxLjEyYzhwLTIwCisgIH0sCisgIHsgLy8gRW50cnkgMzIKKyAgICAtMHgxLjNjYjIyNmNlZjlhNjEwY2Y3N2RjMDA2NzkwMmI0MDk5cC0xLAorICAgIDB4MS4xM2Q0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzMKKyAgICAweDEuNWUxYTIyZmNjZDg3ZDQwYjZlN2ViYzAyMjYzNzRkNjFwLTQsCisgICAgMHgxLjE2ZDhwMAorICB9LAorICB7IC8vIEVudHJ5IDM0CisgICAgLTB4MS4zNWZiNzZkZDhjN2EyMTFmMzM4NDJhZjQyYzU5OTExNHAtMSwKKyAgICAweDEuMTc3OHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1CisgICAgLTB4MS4zNTAyOGFkOWQ4Yzg1YzFmY2E5M2YzNTVkNDc5NmJjMXAtMSwKKyAgICAweDEuMThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNgorICAgIDB4MS5hM2Y3MWNmZjE0YjgxMTFhZGVkOTc2YzI2ZDE4OTYwZXAtNCwKKyAgICAweDEuMWJhNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzcKKyAgICAtMHgxLjU1YTA2MWZmZjkwZmE2ZGY3NTVmN2FlZjVhYjlmOTc4cDEsCisgICAgMHgxLjFiZjRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOAorICAgIC0weDEuY2U1ZmZkZTY2YTlhZjc4M2I4NjQ0MzIwOWVjZWMxNjRwMywKKyAgICAweDEuMWNlMHAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOQorICAgIC0weDEuY2UzYTU1ZWE1ZDQ3MzIyYmRiYmUwZmZmNTQ3OWNhMWVwMywKKyAgICAweDEuMWUzMHAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MAorICAgIDB4MS5lMjM3OTJlZjUyOTcxZmQ2YzcyYTk5ZjU5OGEwZmJhY3AtNCwKKyAgICAweDEuMWZmY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDEKKyAgICAweDEuOGZlMGM4NTMxNGJhNWUwOWUxMTU1MjhjMDJlZjZlMzFwMCwKKyAgICAweDEuMzEyZTc4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MgorICAgIC0weDEuZmRlZGZhZGU0NjVkNTczMzZhOWI4YTM1NjJkM2IxNzZwLTIsCisgICAgMHgxLjM3MmMxNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQzCisgICAgLTB4MS5mZDljOThkZTdkODliOWUyOTU0NmE5Yjc2OTJjYWNkZHAtMiwKKyAgICAweDEuMzc0NGQycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDQKKyAgICAtMHgxLmZkNTY1NmRlMGM2NmQ0N2I3YjljZjRmYTY4YjM1NmU0cC0yLAorICAgIDB4MS4zNzVhMmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NQorICAgIC0weDEuZmNhOThjZGUwY2ViMThkNmQ3YmFiNzcwNWQxNGRlMTdwLTIsCisgICAgMHgxLjM3OGViY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDQ2CisgICAgLTB4MS5mYzBhNThkZTRlYTdjOTQzMmFjMDBmZjBhZGI2ZGI3ZXAtMiwKKyAgICAweDEuMzdiZjMwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDcKKyAgICAtMHgxLmViZGVkZTUxZGU3ZDdiMzU5YWNjMjNlYzMxMmFmMmQ0cC0yLAorICAgIDB4MS4zY2I1NmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OAorICAgIC0weDEuZGFlMGRlZGZkZGEyNTY5Mzc5NjMwYWJmZmNhZmZmZjJwLTIsCisgICAgMHgxLjQyMDIwOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ5CisgICAgLTB4MS5kOTMwY2E1M2FlOGUwNjk1ZDE0ZTQ4Mzc2YjU4NDY2OHAtMiwKKyAgICAweDEuNDI4YTA0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTAKKyAgICAweDEuZWMzNjQ5YzcyYzA1YTA2OWMyZDAwMDA5MDg1MWM2MzlwLTMsCisgICAgMHgxLjQ1OGNiZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTEKKyAgICAweDEuZjNlNjMyNTdlY2QxMmIwZDljY2M5ZmYzNGMzZjNkNmVwLTMsCisgICAgMHgxLjQ2YzYyNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTIKKyAgICAtMHgxLjY5M2NmYTMwYjYzM2IxZDAzZjRlY2Q4OGE3NTBhYzc5cC0yLAorICAgIDB4MS42N2NkM2FwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MworICAgIC0weDEuNjkyYjVlNDIxMDhiNzNkNzU5OTUxODA3NGNlODY3MGFwLTIsCisgICAgMHgxLjY3ZDM2YXAtMQorICB9LAorICB7IC8vIEVudHJ5IDU0CisgICAgLTB4MS42M2JiYmExNzcxYjgyMDhkODUxYWIzNmNkNmQ5M2YzOHAtMiwKKyAgICAweDEuNjliZGJhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTUKKyAgICAweDEuNjJlMjVlZWM4NTc4MWU2MGNiNDliNGYyMWJlY2FiZGZwLTIsCisgICAgMHgxLjZhMDk0MnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTYKKyAgICAweDEuNjJlM2NlOWVmODZmNjUyNDM1MWVkZDg3MzEwZTg3NDNwLTIsCisgICAgMHgxLjZhMDljNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNTcKKyAgICAtMHgxLjNjNjA3YWRlZGIxNjhkOWQ4OWM2YjIyNjViNGRkMGE0cC0yLAorICAgIDB4MS43N2VhMzhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OAorICAgIC0weDEuMTk0NDMyZmZmY2IwOTJkODkxNjcwYjdmOGY2MjhmYzRwNiwKKyAgICAweDEuNzdmZmZlcC0xMDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OQorICAgIDB4MS4xOTNlYTUwMDI1ODI3MDkzMGY4ZTdkN2FmMjQ0ZGNmZnAwLAorICAgIDB4MS43ZmZmZmNwMQorICB9LAorICB7IC8vIEVudHJ5IDYwCisgICAgLTB4MS5kYWMwOGRlMWQyNmIwZjY5ZTFlZDU4YmQzZDlmZDgyYnAzLAorICAgIDB4MS44MmZlOTJwLTIyCisgIH0sCisgIHsgLy8gRW50cnkgNjEKKyAgICAweDEuYzhkNzBkZTExN2NiMmZlNDU5ZWQ2NGNjNjdlNWFiYzlwMywKKyAgICAweDEuODMwNjA4cDIwCisgIH0sCisgIHsgLy8gRW50cnkgNjIKKyAgICAweDEuZjIyNzJhZTMyNWE1NzU0NmY2OTQ5NmNmMjYxYmUwNDZwMSwKKyAgICAweDEuODhwNQorICB9LAorICB7IC8vIEVudHJ5IDYzCisgICAgMHgxLmM5YzVhZGUzNDc2M2MwYjlhMTgwZDg2M2JmYzdmMTA2cDMsCisgICAgMHgxLjhlNzY4NnAyMAorICB9LAorICB7IC8vIEVudHJ5IDY0CisgICAgLTB4MS5mOTkxZDEwOGFiZTFmYzljOTFlOTFhZTdmNzA3YmQ0ZnAtMywKKyAgICAweDEuOGZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjUKKyAgICAtMHgxLjgyN2Q0ZDAwMmU1ZDEzMjE1Y2U1ZjhkZTg3NTY2OTMzcDEsCisgICAgMHgxLjhmZmZmZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDY2CisgICAgLTB4MS5mMzA1YmQwNThiM2M5ZTY0MTAxNDc2ZTVkZTkxMWQ4M3AtMywKKyAgICAweDEuOTE0N2UwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjcKKyAgICAtMHgxLmVlN2VlNTA2NTA4NzhhODRlOTdmNGNlYzk2NzM2YmM1cC0zLAorICAgIDB4MS45MjJiMzBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OAorICAgIDB4MS5kYzAzOTEwMDViZjBmY2NiOTJjMjYyZWViNmEzMDBlNHAwLAorICAgIDB4MS45YWUyNzhwMgorICB9LAorICB7IC8vIEVudHJ5IDY5CisgICAgLTB4MS4yNjUwYjYwMDAwMGJlMGM1OTAyYzdhMTU0OTUxNjFjNXAxLAorICAgIDB4MS45YWVlYTBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MAorICAgIC0weDEuN2JhOWI3ZmZmZjNkMTg5ZjVhMTcxNDk2OTdjMTJjZTJwMSwKKyAgICAweDEuYTVlOTcwcC01CisgIH0sCisgIHsgLy8gRW50cnkgNzEKKyAgICAtMHgxLjIwNjE3MGZmZmM5ZThhOTNjMTk4NmUyMTc4N2JlZDVhcDEsCisgICAgMHgxLmFlNmVmMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDcyCisgICAgLTB4MS5kNzNkN2ZmYzFlN2FiYzQyMjVlMzk4Nzg4MjhmODY2NnAzLAorICAgIDB4MS5hZmUyNmNwLTIyCisgIH0sCisgIHsgLy8gRW50cnkgNzMKKyAgICAtMHgxLjI1MTc0NzAwMDAwMDA4ZGRiZTc1NTczOWQ2MjYzNjRmcDMsCisgICAgMHgxLmI5N2M3MHAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NAorICAgIC0weDEuMWNhNWI1MDAwMzVmYzA3YzM4OWE5ZTVjYmZkNzhlZGJwMSwKKyAgICAweDEuYmIyYzJjcC00CisgIH0sCisgIHsgLy8gRW50cnkgNzUKKyAgICAtMHgxLjI0YjBlYmZmZmNjMzJlZTFiOWI3MzllMmE0YzdkMDU5cDMsCisgICAgMHgxLmJmMDk3MHAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NgorICAgIC0weDEuNjY5OTE1MDAwMjMwZDc0ZmEyZGEyZjQwYmJkZjQ0NjlwMywKKyAgICAweDEuYzdmZmZlcC0xNworICB9LAorICB7IC8vIEVudHJ5IDc3CisgICAgLTB4MS45NTRhZWVkZjRkNWY1ZmI3YzQ3NGEzNTcyM2I0ZTcwN3AtMSwKKyAgICAweDEuY2ZmZmZlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzgKKyAgICAtMHgxLjkyZTc2YWZmZmNkNDQ5YjNhYzVkNDEyYjYyMmY3OGE4cC00LAorICAgIDB4MS5kMDA4ZTRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OQorICAgIC0weDEuZmZhMjRmMWMxMjMzYTlmOGU4YWU2ODRlZGY4OTMxM2ZwLTUsCisgICAgMHgxLmUxMDA0MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDgwCisgICAgLTB4MS4xMTc4ODlmZmZmZmJkZjhhNWNkN2MzNGY3MjQ2ZjNjZnAxLAorICAgIDB4MS5lMzliYjRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MQorICAgIC0weDEuODk0YWMyZGNkZGU1NDlkMGQwOTIyYjViNGY1NGUwMjhwLTUsCisgICAgMHgxLmU3ZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDgyCisgICAgLTB4MS4zODFkMzZmZmU2MGViMWRmYjA2ODY1NzQwNzQyMjNlN3AtNSwKKyAgICAweDEuZWNkYzFjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODMKKyAgICAweDEuZDE0OTczZWRiMzY1NmM3NzFlMThlY2E4NGJjOTRjNzZwNCwKKyAgICAweDEuZWZmZmZlcDQxCisgIH0sCisgIHsgLy8gRW50cnkgODQKKyAgICAtMHgxLmVmZWExOGZmZjExMTVlODE2MzZmNTNiNjU2NjVlMTZlcC02LAorICAgIDB4MS5mMGJjMjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NQorICAgIC0weDEuYTViNTg0ZmZkYWQzMTE0N2QxMTQwYjE2OTQ3NDBhZDdwLTYsCisgICAgMHgxLmYyZmQ2MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDg2CisgICAgLTB4MS42MmIzNWFmZmRmMGEyNDI5Mjg0YjAwNmI2ODBiZDFiZXAtNiwKKyAgICAweDEuZjUwOGU0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgODcKKyAgICAtMHgxLjBjYjE0MGZmZmY5ZjhmMWUwNmU3ZjlhZjBhNTMxYTVicDEsCisgICAgMHgxLmY2MDBkY3AtNAorICB9LAorICB7IC8vIEVudHJ5IDg4CisgICAgLTB4MS4wYmZlNzBlYjQ1MWFkMDlhN2NiNzVjMWVlZGZhNjE1MHAxLAorICAgIDB4MS5mOGMwMTBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OQorICAgIC0weDEuNzBjOGM1MGRjZTI0NmRkNmJjYjA0NjFlN2RjNDkzN2VwLTcsCisgICAgMHgxLmZhNDUyMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDkwCisgICAgLTB4MS40MTZhNzFiNzczYTJjM2UzOTgwYjExZWZkMWExOTdiNXAtOCwKKyAgICAweDEuZmQ3ZWJlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTEKKyAgICAtMHgxLmMwYzY3NDYyMWM1YjQ3NGE0MzBlMTM1NzBjNTgwMzg4cC05LAorICAgIDB4MS5mZTNmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MgorICAgIC0weDEuMDQ4NjNjZmZmYmJmN2VkYjE2N2NiNjBkZjNmM2Q1OTlwLTksCisgICAgMHgxLmZlZmJiY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDkzCisgICAgLTB4MS4wYTVkZGYwMDAwNGViZjJhNmZlZWU5OWQ1YmRkZGUzNHAxLAorICAgIDB4MS5mZjM1M2NwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NAorICAgIC0weDEuZDgwMzY2NDg1Yjc0NzI0N2E0NWJiOWE0NzAxNzlkZjFwLTE1LAorICAgIDB4MS5mZmY4YTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NQorICAgIC0weDEuZDFjYjdmZWE4NmM0OWY2MzA3NGIwZDQ0NWZiNjUwMTRwMywKKyAgICAweDEuZmZmZmYwcC0yMgorICB9LAorICB7IC8vIEVudHJ5IDk2CisgICAgMHgxLmQxY2I3ZGVhODZiYzlmNjJkY2EwNjE5OWI1MDUzZjAzcDMsCisgICAgMHgxLmZmZmZmMHAyMAorICB9LAorICB7IC8vIEVudHJ5IDk3CisgICAgLTB4MS4wMDAwMDIwMDAwMDU1NTU1NjU1NTU1ODg4ODg5MzMzM3AtMjIsCisgICAgMHgxLmZmZmZmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDk4CisgICAgLTB4MS4wMDAwMDEwMDAwMDE1NTU1NTc1NTU1NTg4ODg4OGRkZHAtMjMsCisgICAgMHgxLmZmZmZmY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDk5CisgICAgLTB4MS4wMDAwMDA4MDAwMDA1NTU1NTU5NTU1NTU4ODg4ODhiM3AtMjQsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMAorICAgIC0weDEuNjJlNDMxMTVhOGZiNDdjM2E3YzJlNzZhODBjY2E5YTVwLTIsCisgICAgMHgxLjZhMDllNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMQorICAgIC0weDEuZGEzOTFhNzBkMjhhMjQ2NDE2MjZmNWU5MTU1MzI0YjVwLTMsCisgICAgMHgxLjk2MmI2MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMgorICAgIC0weDEuMDZmYmU2YTRlMjUyOTVmODBmYjIyNzRhZmU2ZDNiYWNwLTMsCisgICAgMHgxLmMyNGNkYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMworICAgIC0weDEuMWUwYTZkMDUzNDI1ZDNkNjUyOGFhNzE3ZWNjOWE1NzhwLTUsCisgICAgMHgxLmVlNmU1NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNAorICAgIDB4MS45ZTU0OWMzNzc5ZjA5MzQ1MTg5MmExZmU0ZTY3YjUwZXAtNSwKKyAgICAweDEuMGQ0N2U2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUKKyAgICAweDEuMDhlMGI5ZjNhNzk0NGJhYjNlY2I1NmQ2YTdmZjAzYjVwLTMsCisgICAgMHgxLjIzNThhMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA2CisgICAgMHgxLjllNjQ1ZDYwZmYxOTg5ODY0NzkzNDZkMTY0ZWNhZDdlcC0zLAorICAgIDB4MS4zOTY5NWVwMAorICB9LAorICB7IC8vIEVudHJ5IDEwNworICAgIDB4MS4xNGRkNjcwY2FjMDIxMjUwNmJmNzJmYjc2MmQ4YTdkYnAtMiwKKyAgICAweDEuNGY3YTFhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgKKyAgICAweDEuNTYxODE5YWNhNDlkZTZiMWQxY2NkYTEwOTVjNzQ1MDJwLTIsCisgICAgMHgxLjY1OGFkNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA5CisgICAgMHgxLjkzNmE3YzQ5NmMzZTIxNDA2YWY5ZjRhYzliZWFjNmE1cC0yLAorICAgIDB4MS43YjliOTJwMAorICB9LAorICB7IC8vIEVudHJ5IDExMAorICAgIDB4MS5jZDQ1YThkN2UzNDAzZjUyNzhkNWUzZDU2NjM0OWY3NXAtMiwKKyAgICAweDEuOTFhYzRlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTEKKyAgICAweDEuMDIwNDQ4MzEyMTFlZDAwNjhlZmE0YzJhOGI5ODcwYmZwLTEsCisgICAgMHgxLmE3YmQwYXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTEyCisgICAgMHgxLjFjMDFkNWY2ZDNhNTBkMzFjNDVjYmZkZGQwMjcyNzY1cC0xLAorICAgIDB4MS5iZGNkYzZwMAorICB9LAorICB7IC8vIEVudHJ5IDExMworICAgIDB4MS4zNGJkZTQ2ZmQ4NGZjYTQzYmEzZjQ3OTlhY2FiMTBmZnAtMSwKKyAgICAweDEuZDNkZTgycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQKKyAgICAweDEuNGM1NjE4MTM2YTMyMjFkODQ0NzZiNzgzNTNmYWJjODBwLTEsCisgICAgMHgxLmU5ZWYzZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTE1CisgICAgMHgxLjYyZTQyOWVmYTM5NWYzNTc4MWM3NjcwNzg3ZTU4YzJicC0xLAorICAgIDB4MS5mZmZmZmFwMAorICB9LAorICB7IC8vIEVudHJ5IDExNgorICAgIC0weDEuNjJlNDMxMTVhOGZiNDdjM2E3YzJlNzZhODBjY2E5YTVwLTIsCisgICAgMHgxLjZhMDllNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDExNworICAgIC0weDEuMjRjZmQwOTUxNGJhZTllMjE1MDFkMWEyOGMzN2Q1MWVwLTIsCisgICAgMHgxLjgwYWE4NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDExOAorICAgIC0weDEuZDQ5MDJhN2Y2YTFkMThkYTI0MWRmZmI0MmEwODE4ZWRwLTMsCisgICAgMHgxLjk3NGIyMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDExOQorICAgIC0weDEuNjVkNTYwN2NjODViYWJhMjZlMmZhZjc4ODY1ZGM5OTFwLTMsCisgICAgMHgxLmFkZWJjMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEyMAorICAgIC0weDEuZjk5MWQ4ZjZlMmYwMTE5NDNkNWE2YTYwY2Q2NDYwMDJwLTQsCisgICAgMHgxLmM0OGM1ZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEyMQorICAgIC0weDEuMzFiOWE5OTU1MDJkNTkyNDE1MDBjZDFjZTk1NWY1YzRwLTQsCisgICAgMHgxLmRiMmNmY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDEyMgorICAgIC0weDEuY2NiNzk5NGJkYTgxOGMyNmNjMTVmY2E2NjBmMzY0ZWNwLTYsCisgICAgMHgxLmYxY2Q5YXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEyMworICAgIDB4MS4wYjk0OTJiZDk5NTcwZThhMmEyZjVhN2Y1OTY0NGI0MnAtNiwKKyAgICAweDEuMDQzNzFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQKKyAgICAweDEuZTI3MDVlOWNjNTU0ZDhiNTY1NDMzYzhmYWQyZGIxNjRwLTUsCisgICAgMHgxLjBmODc2Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTI1CisgICAgMHgxLjk4NmQzMjE2ODhiMDc0YTIxZWIyNmI0MTY3OWVlMzA5cC00LAorICAgIDB4MS4xYWQ3YmNwMAorICB9LAorICB7IC8vIEVudHJ5IDEyNgorICAgIDB4MS4xYzg5OTE5ZmIyMDhlYmRhMjc1ZDZmZWU3NTU3N2E0M3AtMywKKyAgICAweDEuMjYyODBjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcKKyAgICAweDEuNjlkNDYzZGI1ZDBkOGNiYzVkYThiZDJjMWY1ZDI5NTNwLTMsCisgICAgMHgxLjMxNzg1Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTI4CisgICAgMHgxLmI0NGY4NzM4MTYxMWFiMjgwNmQ2ZjAwZDIxM2RlMmNmcC0zLAorICAgIDB4MS4zY2M4YWNwMAorICB9LAorICB7IC8vIEVudHJ5IDEyOQorICAgIDB4MS5mYzJkODBlNTMxMWIzZjdlMDVmMjZiOTYzMDQ0ZWEwOHAtMywKKyAgICAweDEuNDgxOGZjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAKKyAgICAweDEuMjBjZGQ5MjYyYzU5YTc3MjY2ODlmNGZlNWZmYTU4ZmVwLTIsCisgICAgMHgxLjUzNjk0Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTMxCisgICAgMHgxLjQyNjE4MmRiMjBlMjNkMGI0NzNhZTFjMmQxOTc1YzNmcC0yLAorICAgIDB4MS41ZWI5OWNwMAorICB9LAorICB7IC8vIEVudHJ5IDEzMgorICAgIDB4MS42MmU0MmVjOTllNDI5ZWViN2ZjYmU2ZjU4ZWZmMzExN3AtMiwKKyAgICAweDEuNmEwOWU2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzMKKyAgICAtMHgxLjI2OTYyMTEzNGRiOTI3ODNiZWI3Njc2YzBhYTljMmEzcC0yLAorICAgIDB4MS44MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzNAorICAgIC0weDEuODlmYTQ4NGQzNTViNWUxODZmNTY2MmIzZGEzZTc0NWJwLTMsCisgICAgMHgxLmE2NjY2NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzNQorICAgIC0weDEuYWY4ZTg5MmQxNWRlODdlMmU5ZTU5ZGZmNWMwNjMzYmVwLTQsCisgICAgMHgxLmNjY2NjY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDEzNgorICAgIC0weDEuOWVjZWJjYjU5N2VhMWJiNDNkODk2ZjU4NDc1OTc0NGFwLTYsCisgICAgMHgxLmYzMzMzMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzNworICAgIDB4MS44ZmIwNGI4ZGE2NWNlYjg1YTJlZGI3ZDBmZjBhZDJkM3AtNSwKKyAgICAweDEuMGNjY2NjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzgKKyAgICAweDEuZTI3MDc2ZTJhZjJlNWU5ZWE4N2ZmZTFmZTllMTU1ZGJwLTQsCisgICAgMHgxLjIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzkKKyAgICAweDEuNzU2NTA2NzM5ZWJhZjFjZDU4ODU1ZDIzMWU3NzdhNTlwLTMsCisgICAgMHgxLjMzMzMzNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQwCisgICAgMHgxLmYxOGRjZTI4OThmNWJhOTE5ZDgyNWQ5Njk2YzZjNzc0cC0zLAorICAgIDB4MS40NjY2NjhwMAorICB9LAorICB7IC8vIEVudHJ5IDE0MQorICAgIDB4MS4zMzRlYTU2NDQyNDAxM2I3NzM5YWZiYzk0Nzg3NDFiNXAtMiwKKyAgICAweDEuNTk5OTljcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDIKKyAgICAweDEuNmFhYzBkMGZlMzg3MWFiNjBkNzBkNDFlOTU0YzJiZDNwLTIsCisgICAgMHgxLjZjY2NkMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQzCisgICAgMHgxLjlmMzIzZWNiZjk4NGJmMmI2OGQ3NjZmNDA1MjIxODE5cC0yLAorICAgIDB4MS44MHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQ0CisgICAgMC4wLAorICAgIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDE0NQorICAgIDB4MS44NjYzZmQ2NTM4Yzg3MjM0OWVjMWE4NWUwNWVjNWZiNXAtNCwKKyAgICAweDEuMTk5OTlhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDYKKyAgICAweDEuNzU2NTA2NzM5ZWJhZjFjZDU4ODU1ZDIzMWU3NzdhNTlwLTMsCisgICAgMHgxLjMzMzMzNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQ3CisgICAgMHgxLjBjYTkzYjZmNTZhZmJhY2QwNzk3M2IwYTNjNjdmYzQ3cC0yLAorICAgIDB4MS40Y2NjY2VwMAorICB9LAorICB7IC8vIEVudHJ5IDE0OAorICAgIDB4MS41ODhjMzIyMzdjNmFlZmU5NmUxZGIyN2M0NjcxMGQzOXAtMiwKKyAgICAweDEuNjY2NjY4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDkKKyAgICAweDEuOWYzMjQ0MjE0ZWQ2ODY0N2RkYzc5OTgyM2UwNWE5YjFwLTIsCisgICAgMHgxLjgwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTUwCisgICAgMHgxLmUxNDhhN2EyNzI2ODU5NGRmZDRkZDZjMzAxZmVjZTc5cC0yLAorICAgIDB4MS45OTk5OWNwMAorICB9LAorICB7IC8vIEVudHJ5IDE1MQorICAgIDB4MS4wZmFlODRkYzk1ZTFhN2Q5ODk3NDcyZDU1YTc1NjNlOHAtMSwKKyAgICAweDEuYjMzMzM2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTIKKyAgICAweDEuMmNmMjYzM2JjN2ZjOWQ5ZDk5MjkzMTlhYTkxODgyMmNwLTEsCisgICAgMHgxLmNjY2NkMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTUzCisgICAgMHgxLjQ4YTExNjVkZjI3NGFiNzk2M2Y4NTUwZGNiZmI2YWVicC0xLAorICAgIDB4MS5lNjY2NmFwMAorICB9LAorICB7IC8vIEVudHJ5IDE1NAorICAgIDB4MS42MmU0MmZlZmEzOWVmMzU3OTNjNzY3MzAwN2U1ZWQ1ZXAtMSwKKyAgICAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTUKKyAgICAweDEuMTU0MjQ1NzMzN2Q0MmUxYzZiNzNjODlkODYyYmExNzFwNiwKKyAgICAweDEucDEwMAorICB9LAorICB7IC8vIEVudHJ5IDE1NgorICAgIDB4MS4xNWEzZGU3MjkxMjI2MDM4Zjg5Yjc5MDc5ZGFkMWM4OXA2LAorICAgIDB4MS4xOTk5OWFwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMTU3CisgICAgMHgxLjE1ZmNmN2Y2NzFhMzhiOTU1MjIwMGI0YzE3YmFkZDJmcDYsCisgICAgMHgxLjMzMzMzNHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTgKKyAgICAweDEuMTY0ZWVlYWVhNzJhZGRkNzM4N2I1ZmQ4OTA2ODA5NmVwNiwKKyAgICAweDEuNGNjY2NlcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDE1OQorICAgIDB4MS4xNjlhZDFhNTViNTA5OTBjNTRlMWU2NTAwMjcyMTI3ZnA2LAorICAgIDB4MS42NjY2NjhwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMTYwCisgICAgMHgxLjE2ZTE3N2I3NTkyMzA0YTJiMzUxOTAzNzA4NjlhNzFicDYsCisgICAgMHgxLjgwMDAwMnAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjEKKyAgICAweDEuMTcyMzhlMWFkYTQ2OTY3NWI5NzExNjc0NDkyZGEwNDBwNiwKKyAgICAweDEuOTk5OTljcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDE2MgorICAgIDB4MS4xNzYxYTI3Y2YwZmZmMTZjMWU4NmIxODMzMGUwOGMzOXA2LAorICAgIDB4MS5iMzMzMzZwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMTYzCisgICAgMHgxLjE3OWMyYTM5YWY2NDI3NTdhNmE2MWIwMGJiN2RkMjc2cDYsCisgICAgMHgxLmNjY2NkMHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjQKKyAgICAweDEuMTdkMzg3OWZmM2I5MTc3MzVlM2JiOTQ3YTFjMzk4NDdwNiwKKyAgICAweDEuZTY2NjZhcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDE2NQorICAgIDB4MS4xODA4MGRkMzE3MWI2YzAzMWE5YjU3NmJlNjNiNmQ0Y3A2LAorICAgIDB4MS5wMTAxCisgIH0sCisgIHsgLy8gRW50cnkgMTY2CisgICAgLTB4MS4wMDAwMDgwMDAwNTU1NTU5NTU1NTg4ODg4YjMzMzM1N3AtMjAsCisgICAgMHgxLmZmZmZlMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE2NworICAgIC0weDEuMDAwMDA0MDAwMDE1NTU1NWQ1NTU1ODg4ODg5ZGRkZGVwLTIxLAorICAgIDB4MS5mZmZmZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjgKKyAgICAwLjAsCisgICAgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTY5CisgICAgMHgxLmZmZmZmODAwMDAyYWFhYTlhYWFhYjExMTEwZTY2NjY3cC0yMiwKKyAgICAweDEuMDAwMDA4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzAKKyAgICAweDEuZmZmZmYwMDAwMGFhYWFhMmFhYWIxMTExMGJiYmJjMDRwLTIxLAorICAgIDB4MS4wMDAwMTBwMAorICB9LAorICB7IC8vIEVudHJ5IDE3MQorICAgIC0weDEuMDAwMDAwODAwMDAwNTU1NTU1OTU1NTU1ODg4ODg4YjNwLTI0LAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzIKKyAgICAtMHgxLjAwMDAwMDgwMDAwMDU1NTU1NTk1NTU1NTg4ODg4OGIzcC0yNCwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTczCisgICAgLTB4MS4wMDAwMDA4MDAwMDA1NTU1NTU5NTU1NTU4ODg4ODhiM3AtMjQsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE3NAorICAgIC0weDEuMDAwMDAwODAwMDAwNTU1NTU1OTU1NTU1ODg4ODg4YjNwLTI0LAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzUKKyAgICAtMHgxLjAwMDAwMDgwMDAwMDU1NTU1NTk1NTU1NTg4ODg4OGIzcC0yNCwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTc2CisgICAgLTB4MS4wMDAwMDA4MDAwMDA1NTU1NTU5NTU1NTU4ODg4ODhiM3AtMjQsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE3NworICAgIC0weDEuMDAwMDAwODAwMDAwNTU1NTU1OTU1NTU1ODg4ODg4YjNwLTI0LAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzgKKyAgICAtMHgxLjAwMDAwMDgwMDAwMDU1NTU1NTk1NTU1NTg4ODg4OGIzcC0yNCwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTc5CisgICAgLTB4MS4wMDAwMDA4MDAwMDA1NTU1NTU5NTU1NTU4ODg4ODhiM3AtMjQsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE4MAorICAgIC0weDEuMDAwMDAwODAwMDAwNTU1NTU1OTU1NTU1ODg4ODg4YjNwLTI0LAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODEKKyAgICAtMHgxLjAwMDAwMDgwMDAwMDU1NTU1NTk1NTU1NTg4ODg4OGIzcC0yNCwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTgyCisgICAgLTB4MS4wMDAwMDA4MDAwMDA1NTU1NTU5NTU1NTU4ODg4ODhiM3AtMjQsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE4MworICAgIC0weDEuMDAwMDAwODAwMDAwNTU1NTU1OTU1NTU1ODg4ODg4YjNwLTI0LAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODQKKyAgICAtMHgxLjAwMDAwMDgwMDAwMDU1NTU1NTk1NTU1NTg4ODg4OGIzcC0yNCwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTg1CisgICAgLTB4MS4wMDAwMDA4MDAwMDA1NTU1NTU5NTU1NTU4ODg4ODhiM3AtMjQsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE4NgorICAgIDB4MS42MmU0MmZlYmEzOWVmMTU3OTNjNjExZGFiMTkwOTgwOHA2LAorICAgIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTg3CisgICAgLTB4MS45ZDFkOWZjY2Y0NzcwNzQzZjIwNjFlMWRlOTMxYTY1MHA2LAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDE4OAorICAgIC0weDEuNjJlNDM2YmRkMDlhODc2MTk0OTQwYjk2Y2IyOGZkN2ZwLTIsCisgICAgMHgxLjZhMDllNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE4OQorICAgIC0weDEuNjJlNDMxMTVhOGZiNDdjM2E3YzJlNzZhODBjY2E5YTVwLTIsCisgICAgMHgxLjZhMDllNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE5MAorICAgIC0weDEuNjJlNDJiNmQ4MTY0MDgyNWJmODlkOGI4ZDlkMGZmNThwLTIsCisgICAgMHgxLjZhMDllOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE5MQorICAgIDB4MS42MmU0MjkyMTc2YTM1ZjRkOTJmYWMyYzk0NGEyZGQzZHAtMiwKKyAgICAweDEuNmEwOWU0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTIKKyAgICAweDEuNjJlNDJlYzk5ZTQyOWVlYjdmY2JlNmY1OGVmZjMxMTdwLTIsCisgICAgMHgxLjZhMDllNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTkzCisgICAgMHgxLjYyZTQzNDcxYzVkOWRlODk2ODA0ZjVhNzM1ZmFkYjY1cC0yLAorICAgIDB4MS42YTA5ZThwMAorICB9LAorICB7IC8vIEVudHJ5IDE5NAorICAgIC0weDEuNjJlNDMxZWZhMzlmZjM1Nzk0NzIxMWRiMzI5MDk4NmZwLTEsCisgICAgMHgxLmZmZmZmZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDE5NQorICAgIC0weDEuNjJlNDJmZWZhMzllZjM1NzkzYzc2NzMwMDdlNWVkNWVwLTEsCisgICAgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE5NgorICAgIC0weDEuNjJlNDJiZWZhM2EyZjM1NzhlNzIxMWUyYjI5MDhiM2NwLTEsCisgICAgMHgxLjAwMDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE5NworICAgIC0weDEuMjY5NjI2NjhhMzEyMGIxMWZhYzQwYmM3YjIyYjVhOGRwLTIsCisgICAgMHgxLjdmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE5OAorICAgIC0weDEuMjY5NjIxMTM0ZGI5Mjc4M2JlYjc2NzZjMGFhOWMyYTNwLTIsCisgICAgMHgxLjgwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTk5CisgICAgLTB4MS4yNjk2MWJiZGY4Njc2MDY3NDljNzM0ZGRkMWM2MzEwYnAtMiwKKyAgICAweDEuODAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjAwCisgICAgMHgxLjlmMzIzOTc2YTQyYmRiOWQyY2NhYzI5ODVkYTA4MDJmcC0yLAorICAgIDB4MS43ZmZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDIwMQorICAgIDB4MS45ZjMyM2VjYmY5ODRiZjJiNjhkNzY2ZjQwNTIyMTgxOXAtMiwKKyAgICAweDEuODBwMAorICB9LAorICB7IC8vIEVudHJ5IDIwMgorICAgIDB4MS45ZjMyNDQyMTRlZDY4NjQ3ZGRjNzk5ODIzZTA1YTliMXAtMiwKKyAgICAweDEuODAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDMKKyAgICAweDEuNTRkZTZlZTc4OTg5YTlhY2ZjODc1YzFkNDVlMTY0OTBwLTksCisgICAgMHgxLjAwYWFhOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjA0CisgICAgMHgxLjU0ZTI2YzNlYWI2ZWEyNDExNWE0ZWNiYzZjMjFjM2RlcC05LAorICAgIDB4MS4wMGFhYWFwMAorICB9LAorICB7IC8vIEVudHJ5IDIwNQorICAgIDB4MS41NGU2Njk5NWM1NWUzYWQ0MGNiMmIwMWQ3N2I4YjYzZnAtOSwKKyAgICAweDEuMDBhYWFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDYKKyAgICAweDEuNjJlNDJlZWZhMzllNzM1NzkzNzIxMWRhNzI5MDk3ZDVwMCwKKyAgICAweDEuZmZmZmZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDcKKyAgICAweDEuNjJlNDJmZWZhMzllZjM1NzkzYzc2NzMwMDdlNWVkNWVwMCwKKyAgICAweDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDgKKyAgICAweDEuNjJlNDMxZWZhMzljZjM1Nzk2NzIxMWQ2YjI5MDllNmZwMCwKKyAgICAweDEuMDAwMDAycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDkKKyAgICAweDEuNjJlNDJkZWZhMzlkZjM1NzkzMWNiYzg0ZGQzYjQyNGRwLTEsCisgICAgMHgxLmZmZmZmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjEwCisgICAgMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTVlZDVlcC0xLAorICAgIDB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDIxMQorICAgIDB4MS42MmU0MzNlZmEzOWFmMzU3OTkxY2JjN2Q1ZDNiNGY4MHAtMSwKKyAgICAweDEuMDAwMDAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTIKKyAgICAtMHgxLjAwMDAwMDgwMDAwMDU1NTU1NTk1NTU1NTg4ODg4OGIzcC0yNCwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjEzCisgICAgMC4wLAorICAgIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDIxNAorICAgIDB4MS5mZmZmZmUwMDAwMDJhYWFhYTZhYWFhYjExMTExMDY2NnAtMjQsCisgICAgMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjE1CisgICAgLTB4MS42MmU0MzFlZmEzOWZmMzU3OTQ3MjExZGIzMjkwOTg2ZnAtMSwKKyAgICAweDEuZmZmZmZlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjE2CisgICAgLTB4MS42MmU0MmZlZmEzOWVmMzU3OTNjNzY3MzAwN2U1ZWQ1ZXAtMSwKKyAgICAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjE3CisgICAgLTB4MS42MmU0MmJlZmEzYTJmMzU3OGU3MjExZTJiMjkwOGIzY3AtMSwKKyAgICAweDEuMDAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjE4CisgICAgLTB4MS42MmU0MzBlZmEzOWY3MzU3OTQxY2JjODU5ZDNiNDJlN3AwLAorICAgIDB4MS5mZmZmZmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTkKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTVlZDVlcDAsCisgICAgMHgxLnAtMgorICB9LAorICB7IC8vIEVudHJ5IDIyMAorICAgIC0weDEuNjJlNDJkZWZhM2EwZjM1NzkxMWNiYzg5NWQzYjNjNGRwMCwKKyAgICAweDEuMDAwMDAycC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjIxCisgICAgLTB4MS4wYTJiMjQ3M2JhYjc3NjgxYWYwMDM4MGVkMDk3MWNjYnAxLAorICAgIDB4MS5mZmZmZmVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjIKKyAgICAtMHgxLjBhMmIyM2YzYmFiNzM2ODFhZWQ1OGQ2NDA1ZWM3MjA2cDEsCisgICAgMHgxLnAtMworICB9LAorICB7IC8vIEVudHJ5IDIyMworICAgIC0weDEuMGEyYjIyZjNiYWI4MzY4MWFkODAzODEwYjA5NzE5N2VwMSwKKyAgICAweDEuMDAwMDAycC0zCisgIH0sCisgIHsgLy8gRW50cnkgMjI0CisgICAgLTB4MS42MmU0MzA2ZmEzOWYzMzU3OTNmMjExZGFkMjkwOTgyMnAxLAorICAgIDB4MS5mZmZmZmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjUKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTVlZDVlcDEsCisgICAgMHgxLnAtNAorICB9LAorICB7IC8vIEVudHJ5IDIyNgorICAgIC0weDEuNjJlNDJlZWZhMzlmZjM1NzkyNzIxMWRjYjI5MDk0ZDVwMSwKKyAgICAweDEuMDAwMDAycC00CisgIH0sCisgIHsgLy8gRW50cnkgMjI3CisgICAgLTB4MS5iYjlkM2M2YjhjODZmMDJkNzhlM2ViYTZkNDhhMTM3YXAxLAorICAgIDB4MS5mZmZmZmVwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjgKKyAgICAtMHgxLmJiOWQzYmViOGM4NmIwMmQ3OGI5NDBmYzA5ZGY2OGI2cDEsCisgICAgMHgxLnAtNQorICB9LAorICB7IC8vIEVudHJ5IDIyOQorICAgIC0weDEuYmI5ZDNhZWI4Yzg3YjAyZDc3NjNlYmE4YjQ4YTEwMmRwMSwKKyAgICAweDEuMDAwMDAycC01CisgIH0sCisgIHsgLy8gRW50cnkgMjMwCisgICAgLTB4MS4wYTJiMjQzM2JhYjc1NjgxYWVlYWUyYjk2YjQxYzc2OXAyLAorICAgIDB4MS5mZmZmZmVwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzEKKyAgICAtMHgxLjBhMmIyM2YzYmFiNzM2ODFhZWQ1OGQ2NDA1ZWM3MjA2cDIsCisgICAgMHgxLnAtNgorICB9LAorICB7IC8vIEVudHJ5IDIzMgorICAgIC0weDEuMGEyYjIzNzNiYWI3YjY4MWFlMmFlMmJhNWI0MWM1YzJwMiwKKyAgICAweDEuMDAwMDAycC02CisgIH0sCisgIHsgLy8gRW50cnkgMjMzCisgICAgLTB4MS4zNjg3YWEzMWFmMmIzNGVjYTE2M2NmOWY2YzNlODUxNHAyLAorICAgIDB4MS5mZmZmZmVwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzQKKyAgICAtMHgxLjM2ODdhOWYxYWYyYjE0ZWNhMTRlN2E0YTA2ZTkyZmIycDIsCisgICAgMHgxLnAtNworICB9LAorICB7IC8vIEVudHJ5IDIzNQorICAgIC0weDEuMzY4N2E5NzFhZjJiOTRlY2EwYTNjZmEwNWMzZTgzNmVwMiwKKyAgICAweDEuMDAwMDAycC03CisgIH0sCisgIHsgLy8gRW50cnkgMjM2CisgICAgLTB4MS42MmU0MzAyZmEzOWYxMzU3OTNkY2JjODU2ZDNiNDJjMHAyLAorICAgIDB4MS5mZmZmZmVwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzcKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTVlZDVlcDIsCisgICAgMHgxLnAtOAorICB9LAorICB7IC8vIEVudHJ5IDIzOAorICAgIC0weDEuNjJlNDJmNmZhMzlmNzM1NzkzMWNiYzg2NWQzYjQxMWFwMiwKKyAgICAweDEuMDAwMDAycC04CisgIH0sCisgIHsgLy8gRW50cnkgMjM5CisgICAgLTB4MS44ZjQwYjYyZDk4MTJmMWMyODY1NWE5NmI2ZTM4MDA2Y3AyLAorICAgIDB4MS5mZmZmZmVwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjQwCisgICAgLTB4MS44ZjQwYjVlZDk4MTJkMWMyODY0MDU0MTYwOGUyYWIwYXAyLAorICAgIDB4MS5wLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDEKKyAgICAtMHgxLjhmNDBiNTZkOTgxMzUxYzI4NTk1YTk2YzVlMzdmZWM2cDIsCisgICAgMHgxLjAwMDAwMnAtOQorICB9LAorICB7IC8vIEVudHJ5IDI0MgorICAgIC0weDEuYmI5ZDNjMmI4Yzg2ZDAyZDc4Y2U5NjUxNmYzNGJlMThwMiwKKyAgICAweDEuZmZmZmZlcC0xMQorICB9LAorICB7IC8vIEVudHJ5IDI0MworICAgIC0weDEuYmI5ZDNiZWI4Yzg2YjAyZDc4Yjk0MGZjMDlkZjY4YjZwMiwKKyAgICAweDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI0NAorICAgIC0weDEuYmI5ZDNiNmI4Yzg3MzAyZDc4MGU5NjUyNWYzNGJjNzFwMiwKKyAgICAweDEuMDAwMDAycC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI0NQorICAgIC0weDEuMjA1OTY3MTJiNGYxMzViNzI4MWNhZTgxYjkxNTdiOGRwMywKKyAgICAweDEuZmZmZmZlcC0xNAorICB9LAorICB7IC8vIEVudHJ5IDI0NgorICAgIC0weDEuMjA1OTY2ZjJiNGYxMjViNzI4MTIwM2Q3MDY2YWQwZGNwMywKKyAgICAweDEucC0xMworICB9LAorICB7IC8vIEVudHJ5IDI0NworICAgIC0weDEuMjA1OTY2YjJiNGYxNjViNzI3YmNhZTgyMzExNTdhYmFwMywKKyAgICAweDEuMDAwMDAycC0xMworICB9LAorICB7IC8vIEVudHJ5IDI0OAorICAgIC0weDEuMjA1OTY3MTJiNGYxMzViNzI4MWNhZTgxYjkxNTdiOGRwMywKKyAgICAweDEuZmZmZmZlcC0xNAorICB9LAorICB7IC8vIEVudHJ5IDI0OQorICAgIC0weDEuMjA1OTY2ZjJiNGYxMjViNzI4MTIwM2Q3MDY2YWQwZGNwMywKKyAgICAweDEucC0xMworICB9LAorICB7IC8vIEVudHJ5IDI1MAorICAgIC0weDEuMjA1OTY2YjJiNGYxNjViNzI3YmNhZTgyMzExNTdhYmFwMywKKyAgICAweDEuMDAwMDAycC0xMworICB9LAorICB7IC8vIEVudHJ5IDI1MQorICAgIC0weDEuMGEyYjI0NzNiYWI3NzY4MWFmMDAzODBlZDA5NzFjY2JwMSwKKyAgICAweDEuZmZmZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjUyCisgICAgLTB4MS4wYTJiMjNmM2JhYjczNjgxYWVkNThkNjQwNWVjNzIwNnAxLAorICAgIDB4MS5wLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTMKKyAgICAtMHgxLjBhMmIyMmYzYmFiODM2ODFhZDgwMzgxMGIwOTcxOTdlcDEsCisgICAgMHgxLjAwMDAwMnAtMworICB9LAorICB7IC8vIEVudHJ5IDI1NAorICAgIC0weDEuMTE3OGYxNDcxMDk2MWJlZGFmOWY3OTlhNTNhZmMzM2RwLTMsCisgICAgMHgxLmJmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI1NQorICAgIC0weDEuMTE3OGU4MjI3ZTQ3YmRlMzM4YjQxZmM3MmRlODFlM2JwLTMsCisgICAgMHgxLmMwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjU2CisgICAgLTB4MS4xMTc4ZGVmZGVjMDNkMmM5MTU2MDQ4OTc5NzFiNzY1OHAtMywKKyAgICAweDEuYzAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjU3CisgICAgLTB4MS42MmU0MzA2ZmEzOWYzMzU3OTNmMjExZGFkMjkwOTgyMnAxLAorICAgIDB4MS5mZmZmZmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTgKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTVlZDVlcDEsCisgICAgMHgxLnAtNAorICB9LAorICB7IC8vIEVudHJ5IDI1OQorICAgIC0weDEuNjJlNDJlZWZhMzlmZjM1NzkyNzIxMWRjYjI5MDk0ZDVwMSwKKyAgICAweDEuMDAwMDAycC00CisgIH0sCisgIHsgLy8gRW50cnkgMjYwCisgICAgLTB4MS4wODU5OWM2YWY0YmE5M2M2OTNiMTMxMjJmNjgyNGE4YnAtNCwKKyAgICAweDEuZGZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjYxCisgICAgLTB4MS4wODU5OGI1OWUzYTA2ODhhM2ZkOWJmNTAzMzcyYzEyZnAtNCwKKyAgICAweDEuZTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjIKKyAgICAtMHgxLjA4NTk3YTQ4ZDI5ODcxYTQ2NDlkMGE2NmNjYmQ1ZWRicC00LAorICAgIDB4MS5lMDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjMKKyAgICAtMHgxLmJiOWQzYzZiOGM4NmYwMmQ3OGUzZWJhNmQ0OGExMzdhcDEsCisgICAgMHgxLmZmZmZmZXAtNgorICB9LAorICB7IC8vIEVudHJ5IDI2NAorICAgIC0weDEuYmI5ZDNiZWI4Yzg2YjAyZDc4Yjk0MGZjMDlkZjY4YjZwMSwKKyAgICAweDEucC01CisgIH0sCisgIHsgLy8gRW50cnkgMjY1CisgICAgLTB4MS5iYjlkM2FlYjhjODdiMDJkNzc2M2ViYThiNDhhMTAyZHAxLAorICAgIDB4MS4wMDAwMDJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjYKKyAgICAtMHgxLjA0MTVmOWE2YjY2NWQ3YTdiOTk1OGQ3ZDI4ZjYyYTc0cC01LAorICAgIDB4MS5lZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjcKKyAgICAtMHgxLjA0MTVkODllNzQ0NDQ3MDE3M2M3NWQ0ZDg4ODlkZTBlcC01LAorICAgIDB4MS5mMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI2OAorICAgIC0weDEuMDQxNWI3OTYzMjQ0Y2Y2NTkxOWE1NzhiMmRhYTI5ZDVwLTUsCisgICAgMHgxLmYwMDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDI2OQorICAgIC0weDEuMGEyYjI0MzNiYWI3NTY4MWFlZWFlMmI5NmI0MWM3NjlwMiwKKyAgICAweDEuZmZmZmZlcC03CisgIH0sCisgIHsgLy8gRW50cnkgMjcwCisgICAgLTB4MS4wYTJiMjNmM2JhYjczNjgxYWVkNThkNjQwNWVjNzIwNnAyLAorICAgIDB4MS5wLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzEKKyAgICAtMHgxLjBhMmIyMzczYmFiN2I2ODFhZTJhZTJiYTViNDFjNWMycDIsCisgICAgMHgxLjAwMDAwMnAtNgorICB9LAorICB7IC8vIEVudHJ5IDI3MgorICAgIC0weDEuMDIwNWE2OGQ0NWU2N2VkMDFlMTBlMzIyYmQ0M2ExNzBwLTYsCisgICAgMHgxLmY3ZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI3MworICAgIC0weDEuMDIwNTY1ODkzNTg0NzQ5ZjIzYTEwNWI5YzdiYjlhNmZwLTYsCisgICAgMHgxLmY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjc0CisgICAgLTB4MS4wMjA1MjQ4NTI1NjQ3NmFmNmY0ZGFhYmQxMzliNWU1N3AtNiwKKyAgICAweDEuZjgwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjc1CisgICAgLTB4MS4zNjg3YWEzMWFmMmIzNGVjYTE2M2NmOWY2YzNlODUxNHAyLAorICAgIDB4MS5mZmZmZmVwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzYKKyAgICAtMHgxLjM2ODdhOWYxYWYyYjE0ZWNhMTRlN2E0YTA2ZTkyZmIycDIsCisgICAgMHgxLnAtNworICB9LAorICB7IC8vIEVudHJ5IDI3NworICAgIC0weDEuMzY4N2E5NzFhZjJiOTRlY2EwYTNjZmEwNWMzZTgzNmVwMiwKKyAgICAweDEuMDAwMDAycC03CisgIH0sCisgIHsgLy8gRW50cnkgMjc4CisgICAgLTB4MS4wMTAxZDg1YTkyMzAyNWI1NGNiYWFlNDk5ZDVlNDBiZnAtNywKKyAgICAweDEuZmJmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjc5CisgICAgLTB4MS4wMTAxNTc1ODhkZTcxMjhjY2M1YTgyZjlkYTAwZjQ4YnAtNywKKyAgICAweDEuZmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODAKKyAgICAtMHgxLjAxMDBkNjU2OGEyMDA1NzQ3NDViMzlmMGFhZTI2Njg1cC03LAorICAgIDB4MS5mYzAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODEKKyAgICAtMHgxLjYyZTQzMDJmYTM5ZjEzNTc5M2RjYmM4NTZkM2I0MmMwcDIsCisgICAgMHgxLmZmZmZmZXAtOQorICB9LAorICB7IC8vIEVudHJ5IDI4MgorICAgIC0weDEuNjJlNDJmZWZhMzllZjM1NzkzYzc2NzMwMDdlNWVkNWVwMiwKKyAgICAweDEucC04CisgIH0sCisgIHsgLy8gRW50cnkgMjgzCisgICAgLTB4MS42MmU0MmY2ZmEzOWY3MzU3OTMxY2JjODY1ZDNiNDExYXAyLAorICAgIDB4MS4wMDAwMDJwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODQKKyAgICAtMHgxLjAwODE1Njk2OGEzNTVhNjhmMmJlOWIwMzU3NzJjOWMzcC04LAorICAgIDB4MS5mZGZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODUKKyAgICAtMHgxLjAwODA1NTk1ODhiMzU3ZTU5OGUzM2Q4ZDlkYjM3YTI5cC04LAorICAgIDB4MS5mZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI4NgorICAgIC0weDEuMDA3ZjU0OTQ4ODMzNTg2NjQ0MGRlN2ExZjIwODQ3MzZwLTgsCisgICAgMHgxLmZlMDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDI4NworICAgIC0weDEuOGY0MGI2MmQ5ODEyZjFjMjg2NTVhOTZiNmUzODAwNmNwMiwKKyAgICAweDEuZmZmZmZlcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI4OAorICAgIC0weDEuOGY0MGI1ZWQ5ODEyZDFjMjg2NDA1NDE2MDhlMmFiMGFwMiwKKyAgICAweDEucC05CisgIH0sCisgIHsgLy8gRW50cnkgMjg5CisgICAgLTB4MS44ZjQwYjU2ZDk4MTM1MWMyODU5NWE5NmM1ZTM3ZmVjNnAyLAorICAgIDB4MS4wMDAwMDJwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTAKKyAgICAtMHgxLjAwNDIxNjVkZDljYWZmNDE5YjFlY2NkZjcyMGEzNmQycC05LAorICAgIDB4MS5mZWZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTEKKyAgICAtMHgxLjAwNDAxNTVkNTg4OWRlNzA2NzFlZWVjMGJmY2VmZTUzcC05LAorICAgIDB4MS5mZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDI5MgorICAgIC0weDEuMDAzZTE0NWNkOTRhYmYyMDMzYmY3MWRjMzAyODUyMGNwLTksCisgICAgMHgxLmZmMDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDI5MworICAgIC0weDEuYmI5ZDNjMmI4Yzg2ZDAyZDc4Y2U5NjUxNmYzNGJlMThwMiwKKyAgICAweDEuZmZmZmZlcC0xMQorICB9LAorICB7IC8vIEVudHJ5IDI5NAorICAgIC0weDEuYmI5ZDNiZWI4Yzg2YjAyZDc4Yjk0MGZjMDlkZjY4YjZwMiwKKyAgICAweDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI5NQorICAgIC0weDEuYmI5ZDNiNmI4Yzg3MzAyZDc4MGU5NjUyNWYzNGJjNzFwMiwKKyAgICAweDEuMDAwMDAycC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI5NgorICAgIC0weDEuMDAyNDA2NTY5Nzk5OTc5N2YzNzdjYjg1Mjc1MDI0MGJwLTEwLAorICAgIDB4MS5mZjdmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTcKKyAgICAtMHgxLjAwMjAwNTU2NTU4ODkzMzU3Y2Q3ZTFmNDg2YmQwNzA1cC0xMCwKKyAgICAweDEuZmY4MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI5OAorICAgIC0weDEuMDAxYzA0NTYxNzc5OGY5MzQ2NGMwMDY3YTdlYWFlNGZwLTEwLAorICAgIDB4MS5mZjgwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTkKKyAgICAtMHgxLjIwNTk2NzEyYjRmMTM1YjcyODFjYWU4MWI5MTU3YjhkcDMsCisgICAgMHgxLmZmZmZmZXAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDAKKyAgICAtMHgxLjIwNTk2NmYyYjRmMTI1YjcyODEyMDNkNzA2NmFkMGRjcDMsCisgICAgMHgxLnAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDEKKyAgICAtMHgxLjIwNTk2NmIyYjRmMTY1YjcyN2JjYWU4MjMxMTU3YWJhcDMsCisgICAgMHgxLjAwMDAwMnAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDIKKyAgICAtMHgxLjAwMjQwMTE1NmRkNjk4YTE0YTE5Mzg1N2I2YjJlMmJkcC0xMywKKyAgICAweDEuZmZlZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzAzCisgICAgLTB4MS4wMDA0MDAxNTU1ZDU1ODg4OWRkZTcwMmIwMjhjOTk5NnAtMTMsCisgICAgMHgxLmZmZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDQKKyAgICAtMHgxLmZmYzdmZTJhYmJhYzMxMGZlNTQ3ODQwMTVkMjNhNjFkcC0xNCwKKyAgICAweDEuZmZmMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzA1CisgICAgSFVHRV9WQUxGLAorICAgIEhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDMwNgorICAgIDB4MS42MmU0MmZlYmEzOWVmMTU3OTNjNjExZGFiMTkwOTgwOHA2LAorICAgIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMzA3CisgICAgMHgxLjYyZTQyZmU3YTM5ZWViNTc5M2JjYmM4NTRkM2I0MjlhcDYsCisgICAgMHgxLmZmZmZmY3AxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDgKKyAgICAweDEuMjUwZDA1MDVmZWNlODNmNWYzMzI4Y2MzMjJmNjUxNTNwMCwKKyAgICAweDEuOTIxZmI2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDkKKyAgICAweDEuY2U2YmI0MzhiM2ZjMjkyOGE1M2I2NGFjN2MwZDZhOTFwLTIsCisgICAgMHgxLjkyMWZiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzEwCisgICAgMHgxLmZmZmZmZTAwMDAwMmFhYWFhNmFhYWFiMTExMTEwNjY2cC0yNCwKKyAgICAweDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTEKKyAgICAwLjAsCisgICAgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzEyCisgICAgLTB4MS4wMDAwMDA4MDAwMDA1NTU1NTU5NTU1NTU4ODg4ODhiM3AtMjQsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDMxMworICAgIC0weDEuZWViOTU3NGQyNjgzN2IwZDA0YTZkMzY3Mjc3Y2UwNTZwLTMsCisgICAgMHgxLjkyMWZiNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDMxNAorICAgIC0weDEuNWQ1ODlmMjdlNTEwN2Y4YTM1NmQ5ZWU4YWQxYmFhZTRwNiwKKyAgICAweDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTUKKyAgICAtMHgxLjVkNTg5ZjJmZTUxMDc3OGEzNTc4NDk5MzQ3YzY1NWE5cDYsCisgICAgMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMzE2CisgICAgLTB4MS41ZDU4OWYzN2U1MTA3ZjhhMzU4MmY0M2UwMjcxMDA2ZHA2LAorICAgIDB4MS5mZmZmZmNwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDMxNworICAgIC0weDEuNWQ1ODlmM2ZlNTEwOTc4YTM1Y2Q5ZWU5OWQxYmFlMzFwNiwKKyAgICAweDEuZmZmZmY4cC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTgKKyAgICAtMHgxLjlhNTdkNzZkMTUyZmM5NWQ0MmRlOGY0Zjg5MjFkYTc1cDYsCisgICAgMHgxLnAtMTQ4CisgIH0sCisgIHsgLy8gRW50cnkgMzE5CisgICAgLTB4MS45ZDFkOWZjY2Y0NzcwNzQzZjIwNjFlMWRlOTMxYTY1MHA2LAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDMyMAorICAgIC1IVUdFX1ZBTEYsCisgICAgMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDMyMQorICAgIC1IVUdFX1ZBTEYsCisgICAgLTAuMGYKKyAgfSwKK307CisjZW5kaWYgLy8gX19CSU9OSUNfXworCitURVNUKG1hdGhfbG9nZiwgbG9nZl9pbnRlbCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoZ19sb2dmX2ludGVsX2RhdGEpL3NpemVvZihsb2dmX2ludGVsX2RhdGFfdCk7IGkrKykgeworICAgIEVYUEVDVF9GTE9BVF9FUShnX2xvZ2ZfaW50ZWxfZGF0YVtpXS5leHBlY3RlZCwgbG9nZihnX2xvZ2ZfaW50ZWxfZGF0YVtpXS5jYWxsX2RhdGEpKSA8PCAiRmFpbGVkIG9uIGVsZW1lbnQgIiA8PCBpOworICB9CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCit9CmRpZmYgLS1naXQgYS90ZXN0cy9tYXRoX3Bvd190ZXN0LmNwcCBiL3Rlc3RzL21hdGhfcG93X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxODU0MjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tYXRoX3Bvd190ZXN0LmNwcApAQCAtMCwwICsxLDMzMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgZG91YmxlIGV4cGVjdGVkOworICBkb3VibGUgeF9jYWxsX2RhdGE7CisgIGRvdWJsZSB5X2NhbGxfZGF0YTsKK30gcG93X2ludGVsX2RhdGFfdDsKKworc3RhdGljIHBvd19pbnRlbF9kYXRhX3QgZ19wb3dfaW50ZWxfZGF0YVtdID0geworICB7IC8vIEVudHJ5IDAKKyAgICAweDEucDAsCisgICAgLTB4MS4wcC0xMCwgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgMQorICAgIDB4MS5wMCwKKyAgICAtMHgxLjBwLTIwLCAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyCisgICAgLUhVR0VfVkFMLAorICAgIC1IVUdFX1ZBTCwgMHgxLjAwMDAwMDAwMDAwMDFwNTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlMDAwMDAwMDAwMDAwMWZmZmZmZnAyMCwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTIxLCAtMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQKKyAgICAweDEucDAsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC00MSwgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNQorICAgIDB4MS4wMDAwMDAwMDAwMDBhMDAwMDAwMDAwMDAyZHAtNDEwLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtNDEsIDB4MS40cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2CisgICAgMHgxLjkyNDFiNzA3ZjZkYWRmZjk1NWZkODkxOTNiNjdkMzMxcC03NiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDlwMCwgLTB4MS43MzY0ZDkzNjRkOTNlcDU0CisgIH0sCisgIHsgLy8gRW50cnkgNworICAgIDB4MS5mZmZmZTAwMDAwZmZmZmZhYmFhYWJlZmZmZmMzYjExMXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMTBwMCwgLTB4MS4wcDI4CisgIH0sCisgIHsgLy8gRW50cnkgOAorICAgIC0weDEuZmZmZmZlZmZhYzAwNDAzYjBjNmQ0MjRhY2Q5MDA5NTNwOTY0LAorICAgIC0weDEuMDAwMDAwMDAyMjBwLTEsIC0weDEuZTI4cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA5CisgICAgMHgxLmZmZTg4Zjg5OGZhZDY4MDVlZjU0MjVjYTM1NzJmMWU4cDcwNSwKKyAgICAtMHgxLjAwMDAwNDRwLTEsIC0weDEuNjEwcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMAorICAgIC0weDEuZmZmMDAwN2ZmYzAwMWZmZjAwMDdmZmMwMDFmZmYwcDQwLAorICAgIC0weDEuMDAwODBwLTQxLCAtMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDExCisgICAgMHgxLmZmNjAxYjdjOTA1OTU4MmU5YzVjZDRiZGUwMjFmNDYycDQwOSwKKyAgICAtMHgxLjAwMDgwcC00MSwgLTB4MS40cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMgorICAgIC0weDEuMDAyODAyODAxNDAwNTAwMDgwcDIwMCwKKyAgICAtMHgxLjAwMDgwcDQwLCAweDEuNHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTMKKyAgICAweDEuZmZhMDBhN2YxNGMzMzdmY2VjZmZjMTA3MjQ0Zjk2ZGZwMjQ1LAorICAgIC0weDEuMDAwODAwMDAwMGYxNHAtNDEsIC0weDEuOHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTQKKyAgICAweDEuZmY4MDExZmQzYmU1NzdmZWM4NWZmYzVkNjBiMDMzNGVwLTMyMSwKKyAgICAtMHgxLjAwMDgwMDAwMGU0ODRwNDAsIC0weDEuMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTUKKyAgICAweDEuNmIzYzQ2NDE1NDMwYzAwNGU5ZmQwYjM1ZjhlYzZmZDVwLTEsCisgICAgLTB4MS4wNDZlOGJmZmZmZmMycDAsIC0weDEuNHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTYKKyAgICAwLjAsCisgICAgLTB4MS41MThwLTEwNjUsIDB4MS4wcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNworICAgIDB4MS4yMDAwMDA2MDAwMDAwOHAtODEsCisgICAgLTB4MS44MDAwMDA0cC00MSwgMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDE4CisgICAgMHgxLmMzZDZhMjE1N2I2MjM0MDdlOGM4MjEyODllYmFjMmI2cC0xLAorICAgIC0weDEuZmZmZmZiZmZmZmZmZnAtMSwgMHgxLjBwMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOQorICAgIC0weDEuMDAwMDAwNjAwMDAwMzAwMDAwMTEwMDAwMDYzMDAwMDJwMCwKKyAgICAtMHgxLmZmZmZmZmJmZmZmZmZwLTEsIC0weDEuOHAxCisgIH0sCisgIHsgLy8gRW50cnkgMjAKKyAgICAtMHgxLjAwMDAwMGUwMDAwMGE4MDAwMDYyMDAwMDMzYTAwMDE4cDM1LAorICAgIC0weDEuZmZmZmZmYmZmZmZmZnAtNiwgLTB4MS5jcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMQorICAgIC0weDEuMDAwMDAwZTAwMDAwYTgwMDAwNjIwMDAwMzNhMDAwMThwMjgwLAorICAgIC0weDEuZmZmZmZmYmZmZmZmZnAtNDEsIC0weDEuY3AyCisgIH0sCisgIHsgLy8gRW50cnkgMjIKKyAgICAtMHgxLjAwMDAwMGUwMDAwMGE4MDAwMDYyMDAwMDMzYTAwMDE4cC0yODcsCisgICAgLTB4MS5mZmZmZmZiZmZmZmZmcDQwLCAtMHgxLmNwMgorICB9LAorICB7IC8vIEVudHJ5IDIzCisgICAgLTB4MS5mZmZmZmU0MDAwMDAzODAwMDAzMGZmZmZmNDlmZmZmZHAyODYsCisgICAgLTB4MS5mZmZmZmZiZmZmZmZmcDQwLCAweDEuY3AyCisgIH0sCisgIHsgLy8gRW50cnkgMjQKKyAgICAweDEuZmZmZmZmODAwMDAwMDhwLTIxLAorICAgIC0weDEuZmZmZmZmY3AtMTEsIDB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNQorICAgIC0weDEuMDAwMDAwMDAwMTAwMDgwMDAwMDEwMDEwMDA0MDAxcDQwLAorICAgIC0weDEuZmZmZmZmZmZmZGZmZnAtNDEsIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjYKKyAgICAtMHgxLjAwMDAwMDAwMDAwYzk4MDAwMDAwMDA5ZTlhNDBwNDAsCisgICAgLTB4MS5mZmZmZmZmZmZmZTZkcC00MSwgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNworICAgIC0weDEuZmZmZmZmZmRmZmZmZTAwMTAwMDAwZmZmYWFhYWFhYWFwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcC0xLCAweDEuMDAwMDFwMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOAorICAgIC0weDEuMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDA0MHAwLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMSwgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOQorICAgIC1IVUdFX1ZBTCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMywgMHgxLjAwMDAwMDAwMDAwMDFwNTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMAorICAgIDB4MS5mZGE2YTFiZTNlOWQ0N2ZjODQyOTMyODFlNzdhYTIxYXAtMSwKKyAgICAweDEuMHAtMiwgMHgxLmIyY2IyY2IyY2IyZDBwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMQorICAgIDAuMCwKKyAgICAweDEuMHAtNTEyLCAweDEuMGNjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMgorICAgIDB4MS5mOWIzYTM4MjA5ODA5Mzg2ODdlOGJmN2ZmMDZiYzQyY3AtOTE0LAorICAgIDB4MS4wcC0xMDM1LCAweDEuYzNhODNhODNhODNhNXAtMQorICB9LAorICB7IC8vIEVudHJ5IDMzCisgICAgMC4wLAorICAgIDB4MS4wcC0xMDc0LCAweDEuMHAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMzQKKyAgICAwLjAsCisgICAgMHgxLjBwLTEwNzQsIDB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNQorICAgIDB4MS41MWNiNDUzYjk1NGY1MzA1ZmQ4ZDYxZTY1MGU4ZDBkNXAtOTY3LAorICAgIDB4MS4wcC0xMDc0LCAweDEuY2NjY2NjY2NjY2NjY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDM2CisgICAgMHgxLmZmZmZmZmZkM2EzN2EwMjJhNGJkZjk0ODIxNzFkNTZmcDEwMjMsCisgICAgMHgxLjBwMSwgMHgxLmZmZmZmZmZmZmYwcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNworICAgIDB4MS4wMDAwMDAwMDAwMDAwN2ZmZmZmZmZmZmZmZmUwcC01LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xMCwgMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOAorICAgIDB4MS5hZTg5Zjk5NWFkNTg4N2ZmNDZkZDIzNjJiZTZhOGYyM3AtMjA0LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0yNzEsIDB4MS43ZmZmZmZmZmZmZmZkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzkKKyAgICAweDEuMjYxMTE4NmJhZTZhMzgwMDAyZTYyMDJjMzFiMDRkMTNwLTM4LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC00NjIsIDB4MS40ZjIwOTRmMjA5NGYwcC00CisgIH0sCisgIHsgLy8gRW50cnkgNDAKKyAgICAweDEuNmEwOWU2NjdmM2VjZDJhZGI2NzIyM2Y5NTY0YjM0MjJwLTM5MiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNTIyLCAweDEuN2ZmZmZmZmZmZmZmZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQxCisgICAgMHgxLjlmZGY4YmNjZTU0MzU0N2Q2MTFlZjEzOTA0MDIyYjhicC00OTMsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTU0NywgMHgxLmNjY2NjY2NjY2NjY2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MgorICAgIDB4MS45MWI1MDFjMmRiNWM4ZmZlODFjYzNlZmZmZmUyODJlOHAtMjkwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC02NDMsIDB4MS5jY2NjY2NjY2NjY2NhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDMKKyAgICAweDEuYTgzMGZkMDU0NzIwMjQ3OWM3MGM4MGI3MmEzMjVkMmZwLTQwOCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNzMxLCAweDEuMWQ0MWQ0MWQ0MWQ0NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ0CisgICAgMHgxLmE5MzM1ZGYzOGU2ZTY0Y2JkYWE1Nzc1MGEwY2ZkNWVlcC0yOTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTczMywgMHgxLjk1ODEwNjI0ZGQyZjdwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NQorICAgIDB4MS42YTA5ZTY2N2YzZDE5MmEyN2I3MzU3NzQ4NGE4NmRjZHAtNzYxLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC04NDUsIDB4MS5jY2NjY2NjY2NjY2NjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDYKKyAgICAweDEuYmRiOGNkYWRiZTYwYTU2ZGQ2MWM0ZTA0MzUwY2ZhOWFwLTU2OSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtOTQ3LCAweDEuMzMzMzMzMzMzMzMzMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ3CisgICAgMHgxLjZhMDllNjZkNzJjOWM4MDE4NDA1MzI1NzdlNjA1ZTA3cDkwNCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTAwNSwgLTB4MS5jY2NjY2NjY2NmYTgxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDgKKyAgICAweDEuZmZmZmZmZmZmZmZhZWE2ZTA2MjJhNDViMzU4OWQ3NzFwMTAyMywKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxLCAweDEuZmZmZmZmZmZmZmZmZHA5CisgIH0sCisgIHsgLy8gRW50cnkgNDkKKyAgICAweDEuZTYxMDJiYTQ2NTA0NDgxNGIyOGEwYTQ5MjE2ZWY2NjdwLTM0OSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXA2NjMsIC0weDEuMGNjY2NjY2NjY2NjZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDUwCisgICAgMHgxLmZmZmZmZmZmZmZkNzViNmQ4NWRlOGZiM2E3ZTJlODI2cC03MDMsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwOTM2LCAtMHgxLjgwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MQorICAgIDB4MS5mZmZmZmZmZmZmZmZlMDAwMDAwMDAwMDAwMWZmZmZmZnAtMTAyNCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxMDIzLCAtMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDUyCisgICAgMHgxLmZmZmZmZmZmZmZmYWVhNmUwNjIyYTQ1NzM1ODlkNzcxcDEwMjMsCisgICAgMHgxLjAwMDAwMDAwMDAwMDJwMiwgMHgxLmZmZmZmZmZmZmZmZmRwOAorICB9LAorICB7IC8vIEVudHJ5IDUzCisgICAgMHgxLjAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAyOWZmZmZmcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDRwMCwgMHgxLjAwMDAwMDAwMDAwMDdwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NAorICAgIDB4MS4wMDAwMDAwMDAwMDAwN2ZmZmZmZmZmZmYzOTIwcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDRwMCwgMHgxLmZmZmZmZmZmZmZjZThwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NQorICAgIDB4MS5mZmZmZmZmZmZmZmFlYTZlMDYyMmE0NGYzNTg5ZDc3MXAxMDIzLAorICAgIDB4MS4wMDAwMDAwMDAwMDA0cDQsIDB4MS5mZmZmZmZmZmZmZmZkcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NgorICAgIDB4MS5mYjk1NDBkOTkyNThhODBmODZiNzE5MjVhYWY0NDIxZXA4MCwKKyAgICAweDEuMDAwMDAwMDAwMDAwN3AxMDIzLCAweDEuNDQ0NDQ0NDQ0NDQzMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDU3CisgICAgMHgxLmRmOTA1ZWY4ZTI1MDdmZDg1MjcxMmVkNmNlYTk4OTYzcDgzMywKKyAgICAweDEuMDAwMDAwMDAwMDAxMXAxLCAweDEuYTBmM2VhMDY5N2EwYnA5CisgIH0sCisgIHsgLy8gRW50cnkgNTgKKyAgICAweDEuMDAwMDAwMDAwMDAwOTdmZmZmZmZmZmZmZDJlMHAzLAorICAgIDB4MS4wMDAwMDAwMDAwMDEzcDYsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTkKKyAgICAweDEuMDAwMDAwMDAwMDAwZDdmZmZmZmZmZmZmNzdlMHAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDIxcDAsIDB4MS5hMmU4YmEyZThiYTJlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjAKKyAgICAweDEuOTQ3NjUwNGI5YmFmMzQzZTNmNzVhMmJkMmU0Y2FkZGJwNzM4LAorICAgIDB4MS4wMDAwMDAwMDAwMDgwcDAsIDB4MS4wcDU0CisgIH0sCisgIHsgLy8gRW50cnkgNjEKKyAgICAweDEuZmZmZmY0ZTk1ZTFmM2ZkY2RkNWUzZDkyOGYzYTQ3ZjVwMTAyMywKKyAgICAweDEuMDAwMDAwMDAwMDBmZnAxLCAweDEuZmZmZmZmZmMwcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MgorICAgIDB4MS5mZmZmZmZmZjhlNGRlODA4M2FjNjNmOTViY2I1MjVmY3AxMDIzLAorICAgIDB4MS4wMDAwMDAwMDAwMGZmcDIsIDB4MS5mZmZmZmZmZmZmY3A4CisgIH0sCisgIHsgLy8gRW50cnkgNjMKKyAgICAweDEuOTQ3NjUwNGI0MzM1NTJhZGJmMjUzYWQ1YTllNjFlNjhwNzM4LAorICAgIDB4MS4wMDAwMDAwMDAwNHAwLCAweDEuMHA1MQorICB9LAorICB7IC8vIEVudHJ5IDY0CisgICAgMHgxLjYyNDdlYjAzNTc4NjM3ZmYyY2I5M2M5M2ZlMmYyNDczcC0xMjksCisgICAgMHgxLjAwMDAwMDAwMDA3cDEsIC0weDEuMDExcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NQorICAgIDB4MS44N2NlYTJlNTA2ZDJlYTliMjE4MjNkNzU1NzY2M2ZiYXA0MjcsCisgICAgMHgxLjAwMDAwMDAwMDIwcDEwMjMsIDB4MS5hYzA4MzEyNmU5NzhjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjYKKyAgICAweDEuZmZmZmZmMmIwMzM4MDgwYjI1N2RmMzFiYjAyZmY3MGFwNzY3LAorICAgIDB4MS4wMDAwMDAwMDBmZmZmcC0xLCAtMHgxLjdmZmZmZmZmZDVjZTJwOQorICB9LAorICB7IC8vIEVudHJ5IDY3CisgICAgMHgxLmZmZDkzMTAzNWIzOTQwODcxNjQ1MDE0NzNkZjIzMDk1cDEwMjMsCisgICAgMHgxLjAwMDAwMDAwMXAxLCAweDEuZmZmZmYxZmZmZmZmZnA5CisgIH0sCisgIHsgLy8gRW50cnkgNjgKKyAgICAweDEuOTEyYjZkZDY2NTJkZjdmYTBmYmFmZmJjN2IzMmQ2MmFwOTUzLAorICAgIDB4MS4wMDAwMDAwMDFiMWVmcC0xLCAtMHgxLmRjZDJmM2VhMDY5OTVwOQorICB9LAorICB7IC8vIEVudHJ5IDY5CisgICAgMHgxLmZmZmZmZmY4MDAwMDAwMjBjMDAwM2Y3YjdmZmU4MjE2cC0xLAorICAgIDB4MS4wMDAwMDAwNDBwMCwgLTB4MS5mZmZmZmZmZmNmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzAKKyAgICAweDEuZmZmZmZmYzAwMDAwMjdmZmZmZjcwMDAwMDM5ZmZmZmVwLTEwMjQsCisgICAgMHgxLjAwMDAwMDFmZmZmZmZwMTAyMywgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MQorICAgIDB4MS43MDVkZjM0Zjg0ZTMxMzg3MTQ4MTUzYzdjZjc4M2E1M3AtMSwKKyAgICAweDEuMDAwMDAwNHAxLCAtMHgxLmU2NjY2NjY2NjY2NmJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MgorICAgIDB4MS4xYTE2NzQ0YzJlYzBkODA0MjQxMGJmM2UzYTkwMTRhY3AxLAorICAgIDB4MS4wMDAwMDA0cDIsIDB4MS4yM2Q3MGEzZDcwYTNicC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzMKKyAgICAweDEuZmZmODAwMTAwMmI0MTdlZjU4OGUyMWM1MDkyZTIwYzdwMTAyMywKKyAgICAweDEuMDAwMDAxMHAtMSwgLTB4MS5mZmZmZmZmZmZmZmY5cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NAorICAgIDB4MS5hMTJmODA2YzM5MTA1ODAwZDVhYzM4ZjZjYjg4ZDM3NHAtMiwKKyAgICAweDEuMDAwMDAxY3AzLCAtMHgxLmJhMmU4YmEyZThiYTJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NQorICAgIDB4MS5kNzJmN2YzNTRkODZkMDIwNmFkN2M5YmU5YjQ3OGM3Y3AtODg1LAorICAgIDB4MS4wMDAwMDQ0cC0xLCAweDEuYmEwZjYxYzkxMDdjOXA5CisgIH0sCisgIHsgLy8gRW50cnkgNzYKKyAgICAweDEuOTE1ZDE5NTViMTVmYzA4MTkxZTAwMGJjOGE5YzgyNjJwNzM4LAorICAgIDB4MS4wMDAyMHAwLCAweDEuMDAwMDA0MHAyNAorICB9LAorICB7IC8vIEVudHJ5IDc3CisgICAgMHgxLmZmYzAwNDNjYmM1ZGI3ZmVkOTA1ZWEyNjc3MjRjZDg2cDQ3LAorICAgIDB4MS4wMDAyMDAwMDBjMGU0cC0zLCAtMHgxLmZmZmZmZmZmZjNmZmZwMworICB9LAorICB7IC8vIEVudHJ5IDc4CisgICAgMHgxLjAzODYxYzBmMjVmMGI3ZmRkN2RiOTg4ZmM1MGU4YWM1cDg5NiwKKyAgICAweDEuMDAwNzBwNywgMHgxLjAwMDAwMDAwODgwcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OQorICAgIDB4MS43MzVmNGNhZTZmZDVlN2VjOWVjOTM5MjNmMzM5ZTk1MXAtMjQyLAorICAgIDB4MS4wMDA3ZmRlcDAsIC0weDEuNGYxYjc3YzI3OGRjMHAyMAorICB9LAorICB7IC8vIEVudHJ5IDgwCisgICAgMHgxLmI2YmRjZGFmZDU1ODI4MjNiNGQzNjFjYjdiZjAyZjBicDAsCisgICAgMHgxLjAwMDdmZmZmZmYxOGNwLTMsIC0weDEuMDk0ZjIwOTRmMjA5NHAtMgorICB9LAorICB7IC8vIEVudHJ5IDgxCisgICAgMHgxLmVlOWRlMzgxNTU4OWY4MDIwNDI5Yzg1MDUwMmE3M2NlcDAsCisgICAgMHgxLjAwMDgwcDEsIDB4MS5lNjY2NjY2NjY2NjY2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgODIKKyAgICAweDEuZmM0ZTk1N2FkM2NmZjgwZGYxNGQ1MzgzYmQwOWE4M2FwMTAyMywKKyAgICAweDEuMDAxZmViZWJjY2Q0MnAwLCAweDEuNjNkOGFhOTg2YTllYXAyMAorICB9LAorICB7IC8vIEVudHJ5IDgzCisgICAgMHgxLmZiZGRmNDZkNmI2Mjg4MmI0YzRlNjU5YmYwMjEyZGY0cDEwMjMsCisgICAgMHgxLjAwMWZlZjFjYzQxOTNwMCwgMHgxLjYzYjUwMGM4MzY4OWRwMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NAorICAgIDB4MS5mYmE3ZjkzMThjNWRjODFiMWUxNzg4NjUxNDcyMDJmM3AxMDIzLAorICAgIDB4MS4wMDFmZjA2OWQyYTZicDAsIDB4MS42M2E2NzZjODQ5M2U4cDIwCisgIH0sCisgIHsgLy8gRW50cnkgODUKKyAgICAweDEuZjYxNjYxYjcwMDBkMzJkMWY2OThlMGZhMmY4ODlkMzVwNjksCisgICAgMHgxLjAwODA0MDI1MjEzZGVwLTcsIC0weDEuNHAzCisgIH0sCisgIHsgLy8gRW50cnkgODYKKyAgICAweDEuZTEwOWJkY2NhMDFmYjdmZmJiZTRmNTBjODJkMGVjNjJwMTUsCisgICAgMHgxLjAxMHAtMSwgLTB4MS5mZmZmZmZmZjlmZmZmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NworICAgIDB4MS4xZTQ5YzUxNDczZmYzN2RjMWFkMjcyNjQzMTJjMzdiNXAtMTAxMSwKKyAgICAweDEuMDIxZWVhYTZkMjcwZHAxLCAtMHgxLmYzNzk3MTc1OGUyNTdwOQorICB9LAorICB7IC8vIEVudHJ5IDg4CisgICAgMHgxLmViNDEzMjFlMTM2YjM3ZmZmYmI5OTAyN2ZmYzg1MTRicC0yMSwKKyAgICAweDEuMDJmMTc4YmM1ZTJjMXAzLCAtMHgxLmE5OTk5OTk5OTk5OWFwMgorICB9LAorICB7IC8vIEVudHJ5IDg5CisgICAgMHgxLjA4MGZmZmZmZjc5Y2I4MDBkNGZhNDM1MWQ4ZTYzMTcxcC0yLAorICAgIDB4MS4wNDBwLTEsIDB4MS4wMDAwMDAwMDA2MHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTAKKyAgICAweDEuY2YyYjE5YWNmZDUzODgyMGNkNjJiOTc2MmZiZDA3ZDhwLTEwMTgsCisgICAgMHgxLjA0OTNjZGE3YmU0NTJwMSwgLTB4MS5lZmU0YjI0MjA3MWFicDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MQorICAgIDB4MS42NjkyYzA1YjA5YmFiYTJlYTQ4ZDc4NWFkNGE0NTc1ZHAxMzUsCisgICAgMHgxLjA1ZWJmODI0OGE3MzRwOTksIDB4MS41ZTNiMzJhMmE5ZmIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MgorICAgIDB4MS44MTBmMmY1Mzk4MDU3N2Y2NjYzYWJmYTFmNzc0MjkxYnA3MCwKKyAgICAweDEuMGFhYWFhYWFhYWFhYnA3LCAweDEuNHAzCisgIH0sCisgIHsgLy8gRW50cnkgOTMKKyAgICAweDEuZmZmZWUzMzUzNjhlYTAwMDhhYTZiM2IwMDYzNTQ2MjVwLTEsCisgICAgMHgxLjBlNGY5MzhjMGUwYmJwLTQ4MiwgMHgxLmI0ODM4YWE3MGQwMjVwLTI2CisgIH0sCisgIHsgLy8gRW50cnkgOTQKKyAgICAweDEuY2ZjNDcwY2M5MzkyMjdmYTk3MGI1OGI5MTU3MmY3MjRwLTQwLAorICAgIDB4MS4xM2JkMTFiY2ZhYTUwcC01LCAweDEuMHAzCisgIH0sCisgIHsgLy8gRW50cnkgOTUKKyAgICAweDEuZWMzM2VhNTVhZmQzM2FkMjE5YWEyYWVjMDgzMzk3ZGZwLTEsCisgICAgMHgxLjE1MDFmNDQ2NTllNTRwMCwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTYKKyAgICAweDEuZjY0OGEwZWFkODJmNjAwMWRhZjBkNDZhYmQwMThiNzdwLTEsCisgICAgMHgxLjE1NTU1NTU1NTU1NTVwLTEsIDB4MS4wMDAwMDAwMDAwMDA3cC01CisgIH0sCisgIHsgLy8gRW50cnkgOTcKKyAgICAweDEuZmU3ZWI2ODczNGI1ZTgyNWU5NGQ2ZGU0NTRjZGUxOGVwNiwKKyAgICAweDEuMTc0NWQxNzQ1ZGE3MXAtMSwgLTB4MS4wMDAwMDAwMDAwMDA3cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OAorICAgIDB4MS5hNWEwMGM3N2M2NWJmNWIwNTkyYTYxNDA3YjJiYzc5ZnAtMzksCisgICAgMHgxLjE5NzNiMTAyZmZkZGJwLTYsIDB4MS5hMWQ4NGY2YTNiOTM0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OQorICAgIDB4MS5lN2UyNjc0NWY1MGZlODAwZDE0MTQ1ZmY4MDEzMzc2MXAtMiwKKyAgICAweDEuMTllZWRlYjEwMmQ4NHAyLCAtMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAKKyAgICAweDEuYTczZjlhY2JmNDEyNWE4OTAyMDExMGEyOWMzOWJiZDJwMTAzLAorICAgIDB4MS4yNDc2NWEwY2RkNDU0cDcsIDB4MS5jZDgxZWRmZDZkNWI4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEKKyAgICAweDEuNDQ1YWUzOTBmNGI1MzY5YzE0MjZmOWZlOGI4YTE3NTFwNjE1LAorICAgIDB4MS4yNDkyNDkyNDkyNDkycC01LCAtMHgxLmZmZmZmZmZmZmZmZjhwNgorICB9LAorICB7IC8vIEVudHJ5IDEwMgorICAgIDB4MS5lNGUwNDUyMDU1MjdmMzNmMGM5NzY4ZGNiN2YxM2ZhYnAtNjE2LAorICAgIDB4MS4yNDkyNDkyNDkyNDkycC01LCAweDEuZmZjN2ZmZmZmZmZmZnA2CisgIH0sCisgIHsgLy8gRW50cnkgMTAzCisgICAgMHgxLjJkZDE3ZGM3MjkzZGM4MDAxZTE5ODZhMTQ4NzViZTk1cDEyMiwKKyAgICAweDEuMzE1MGExMmYyNWM4ZHAtNDEsIC0weDEuOHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTA0CisgICAgMHgxLjUyYzU4Y2RiYWM0Y2I3ZmViNzYxZTI0YmJkZTk5Yjg1cC01MzQsCisgICAgMHgxLjMzMzMzMzMzMzMzMzNwLTIsIDB4MS4zMzMzMzMzMzNjZTk3cDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUKKyAgICAweDEuYmM3ZjA1NmVjNzFmZjAwMDAxMDQ4MDhjOTk5MGFlOWZwLTIsCisgICAgMHgxLjMzMzMzMzQ2Y2Y4YmFwLTIsIDB4MS42MmU0MmZlZmEzOWVmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA2CisgICAgMHgxLmEyYzlkYzdiYjJlNzI0YWU3NDZjN2EwYTA3NmIxMjlicC0yOTEsCisgICAgMHgxLjM4YWJmODJlZTY5ODZwLTEsIDB4MS45ODBwOAorICB9LAorICB7IC8vIEVudHJ5IDEwNworICAgIDB4MS5iNGY2MGU1Nzk1YjVlODA4OGMxODY1YWI5ZTBlMjY5NHAwLAorICAgIDB4MS4zZWM5ODRjYjM2NzAxcDAsIDB4MS4zODAxODg3OWIyYmE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgKKyAgICAweDEuOGZjZjMwMWMyYjQ2NTMyZmZmYjZhMDZjYzQzZGVjOTFwLTY2NywKKyAgICAweDEuNHAtMTA3MCwgMHgxLjNlZjM2OGViMDQzMjdwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkKKyAgICAweDEuMDAwMDNmNjVjY2U4MDgwMDAwZmZlZjZlMDJiZmU1MDlwMCwKKyAgICAweDEuNHA0LCAweDEuNTI5YTE1NzRjMGM3MnAtMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAKKyAgICAweDEuOTAwMDAwMDAwMDAwMjgwMDAwMDAwMDAwMDFwNCwKKyAgICAweDEuNDAwMDAwMDAwMDAwMXAyLCAweDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTExCisgICAgMHgxLjQzMDE1Y2Y3NGQ2ZTA3ZmYzNjY2MzA1ZGRmZmI1ZjRlcDEsCisgICAgMHgxLjQzZTc0M2JhNzljNDFwLTEsIC0weDEuMDJjMzBiODBlYjUxNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTEyCisgICAgMHgxLmEzNmUxYzNjNzAwYjdhNDE2ZmFkNjQxYmZjMDMxYWRicC0xMCwKKyAgICAweDEuNDdhZTE0N2FlMTQ3YnAtNSwgMHgxLjAwMDAwMWNwMQorICB9LAorICB7IC8vIEVudHJ5IDExMworICAgIDB4MS5lNWVjY2YxYjNhMDVkY2Y3YWRjYThkNDdmOTM3ZGFjN3AtOTg1LAorICAgIDB4MS40ZTkxYjBlOTFiMGYxcC0xLCAweDEuOTBjOTcxNGZiY2Q5YnAxMAorICB9LAorICB7IC8vIEVudHJ5IDExNAorICAgIDB4MS45NTMzNWJmYjc2YzZjN2ZlMzg1MjZjZGUxYzE2ZWRiZHAtMywKKyAgICAweDEuNTE1MmI3YzM3MzM2OHAtMjIsIDB4MS5iYjM4Mjg4YTBhNnAtNAorICB9LAorICB7IC8vIEVudHJ5IDExNQorICAgIDB4MS5mZmZmZmZmZmZmZmZiMDFlMjFhNDA0NDI5ZTg4Y2ZkNnAtMSwKKyAgICAweDEuNTE3NTg3OTBiNDE4MXAtNCwgMHgxLjBwLTUyCisgIH0sCisgIHsgLy8gRW50cnkgMTE2CisgICAgMHgxLjcwMmViZmExZmYyMDEzZjI0MzhjZmQxOTM1YjczMDk5cDEwMSwKKyAgICAweDEuNTU1NTU1NTU1NTU1NXAtMiwgLTB4MS4wMDM4MHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTE3CisgICAgMHgxLmJhMzBhMTI3ZjZkZDVmZDljNjBhN2YwMTBkOWNhMTI1cDIwMiwKKyAgICAweDEuNTU1NTU1NTU1NTU1NXAtMiwgLTB4MS5mZmM3ZmZmZmZmZmZmcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgKKyAgICAweDEuN2ZmZmZlOGVkZGM0OWEwYmI3NGM5YjM5NDJlNWViMGJwMSwKKyAgICAweDEuNTU1NTU1NTU1NTU1NXAtMiwgLTB4MS5mZmZmZmUzZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTE5CisgICAgMHgxLjhhYTg4MDg2NDdkMDdiODgxOWI2ODZhNDQ4MTc0MDc2cDU4NiwKKyAgICAweDEuNTU1NTU1NTU1NTU1NXAtNSwgLTB4MS5mZmM3ZmZmZmZmZmZmcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAKKyAgICAweDEuN2EwYTkxMDhlMWQxODg0YzU4NGE5YWI4MWZjM2YzZDFwLTI5NCwKKyAgICAweDEuNTU1NTU1NTU1NTU1NXAtNSwgMHgxLjAwMDAwMDAwMGUwcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjEKKyAgICAweDEuYWQzZDUwMzMyMTdhMDQ3YzI2MDJlZDliM2MwYTk2NDRwLTQ2MSwKKyAgICAweDEuNThhMjYxMjFmNDZmNnAtMiwgMHgxLjI0ZjQ1ZjVmZDRmNzlwOAorICB9LAorICB7IC8vIEVudHJ5IDEyMgorICAgIDB4MS4xMTA0ZmI4Y2Y3ODZjODAwZmZjNzM1ODg5YTUzMWZhM3AwLAorICAgIDB4MS42MTMwOTg0YzAyMDE3cDAsIDB4MS45OTk5OTk5OTk5OTlhcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTIzCisgICAgMHgxLjFlOTUyYjE5Y2MzMzY3MmYxY2RkM2VjNTBlMGIzZGYycC0xMDIzLAorICAgIDB4MS42MjJlOGJhMmU4YjlkcC0xLCAweDEuZTBmODNlMGY4M2UwY3AxMAorICB9LAorICB7IC8vIEVudHJ5IDEyNAorICAgIDB4MS5jZWFmZDhjMDM4NWJkOGFiYmQ1NzQ0NzA0YmYxM2Q0ZXAtMTAyMywKKyAgICAweDEuNjcxMTExMTExMTEwY3AtMSwgMHgxLmYzMzMzMzMzMzMzMjRwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUKKyAgICAweDEuNmEwOWU2NjdmM2JhMTJmOTMyNDdhNzZkNzQzNzQ0MThwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiOWVwLTEsIDB4MS5mZmZmZmZmZmZmZmYzcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTI2CisgICAgMHgxLmE4ODcyOTNmZDZmMzBhMTFlOWYzYWFiMTYxYjBkNDFmcDAsCisgICAgMHgxLjc0NWQxNzQ1ZDE3NDZwLTIsIC0weDEuZmZmZmZmZmZmZmZmOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEyNworICAgIDB4MS45MTc0OTk5MDBmZGEwN2ZlZDQ5Nzk2ZDgyNTZjYmVhZHAtNDAsCisgICAgMHgxLjc0NWQxNzQ1ZDE3NDZwLTMsIDB4MS5mZmZmZmUzZmZmZmZmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgKKyAgICAweDEuZjQ2ZTk2Nzk4MGUwNDhjNTlmZDBmYmVhMWU1Nzc4MWNwOTY3LAorICAgIDB4MS43YTBwNywgMHgxLmZmZmZmZmZlZmZmZmZwNgorICB9LAorICB7IC8vIEVudHJ5IDEyOQorICAgIDB4MS45OWNlNDViN2UyOGZjN2ZmMmQzY2ZiNDYxNzc0MmQ3YXAtMSwKKyAgICAweDEuN2JmMGIyMzQ4YjBhOHAyLCAtMHgxLjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAKKyAgICAweDEuZmU5ZDNmYWNlY2RiNDgyZTUyYTIwMjZmMGQwZmNiYWJwMCwKKyAgICAweDEuOHAtMSwgLTB4MS4zMzMzMzMzMzMzM2MwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzEKKyAgICAweDEuOTZjM2E4NjRkOTJjYzgyNDJmYTZhMDU2YmIwOGIzY2ZwLTEsCisgICAgMHgxLjg1ZTg1ZTg1ZTg1ZWFwLTEsIDB4MS5iMDczZWNhZGUzMDUzcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTMyCisgICAgMHgxLmYyZDgwY2Y4Y2MwOGI3ZmZmZmVlYTc5Zjk1YzNhOWJhcC0xLAorICAgIDB4MS44N2Q4NzI0NDFlYWJicDksIC0weDEuZmZmZmZmZmZmZmZlZXAtOQorICB9LAorICB7IC8vIEVudHJ5IDEzMworICAgIDB4MS5mZmZmZmZmZmZmZmY3MDFmOGFmYjlhYTA2YmFkMzNjMXAtMSwKKyAgICAweDEuODllMzZlZjg0ZjE5ZHAxLCAtMHgxLjAwMDAwMDAwMDAwMTFwLTUwCisgIH0sCisgIHsgLy8gRW50cnkgMTM0CisgICAgMHgxLjAwMDAwMDAwMDAwMDBmZmZiNzUwZjA3NTkzYWMwZmVmcDAsCisgICAgMHgxLjhkNjAwYjc2OTY4NjJwLTk2LCAtMHgxLmVmYWU2MWY2MGY2ZThwLTU5CisgIH0sCisgIHsgLy8gRW50cnkgMTM1CisgICAgMHgxLmU4ZjE1NTY1ZWQ0M2E4MmUwNTIyMzZhYzNmOGExZjA5cDc3LAorICAgIDB4MS45OGQyZmU1YzUzZjM0cC0zOSwgLTB4MS4wNDRhMDAyZDUwYWQ4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzYKKyAgICAweDEuMGY0YjExOGExMGU0OWZmZmZmMDBhZTczNTdkODdjOTRwLTEsCisgICAgMHgxLjk5OTk5OWE2MzdmMTBwLTIsIDB4MS42MmU0MmZlZmEzOWVmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTM3CisgICAgMHgxLmQyNTE1YzQ5ZDY0MTU3ZmVmNjJlZmUzN2FhN2Q0ZTU3cC00NCwKKyAgICAweDEuOWMwMTMzY2RiMDg1NnAtNSwgMHgxLjRwMworICB9LAorICB7IC8vIEVudHJ5IDEzOAorICAgIDB4MS5mYjg1ZTlmMTNmMDc2NzUzNDUwZTMxNTY5NWQyMzllOXAtMTAyMywKKyAgICAweDEuOWYwZWQ0ZjkzMDUyMnAtMSwgMHgxLmE1ZGI4YTE3NTVlOWNwMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzkKKyAgICAweDEuMDFhYjhmMjY3MWI2ZTgwMDAwOTYzNDlhYjg5NzRlYzVwMCwKKyAgICAweDEuOWZjZmU3ZjNmYTE4MXAtMSwgLTB4MS4wcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTQwCisgICAgMHgxLjY5YzczODI0ZmJhYmY4MDY2YzBmMzg0ODdjNjAwYzcycDksCisgICAgMHgxLmEwNDMyNzRiNzA1Y2VwMywgMHgxLjQ4N2UzMWNjZTY0NjhwMQorICB9LAorICB7IC8vIEVudHJ5IDE0MQorICAgIDB4MS5kMjAwODhmNGVlYjhhNTJmZjAyOWZmN2U0NzZlM2I2N3AtNTgyLAorICAgIDB4MS5hNWQxNzQ1ZDE3NDZlcC0xLCAweDEuMDNlMGY4M2UwZjgzY3AxMQorICB9LAorICB7IC8vIEVudHJ5IDE0MgorICAgIDB4MS5jNGJlZWRmMzE1MWUyODAzZTA0OWJiNTE2MWQxMjcyZHAtMjcyLAorICAgIDB4MS5hYTRjZThlZDUyNmIxcC0xLCAweDEuMDA4ODBwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDMKKyAgICAweDEuNzE3MzA2MmI3NGMyMTdmZWE2YjQxZTZhN2ZiNDhkZDZwLTcxMSwKKyAgICAweDEuYWI5OWQzNjA5MWJjMHA5NywgLTB4MS5kMTM2ZWU4ZTU5NTczcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDQKKyAgICAweDEuODZjMWI0OWE1NTEwOTdmZTc4Mzk5YzAwZDAxNTdkOTJwLTIsCisgICAgMHgxLmI3ODIyMThjM2ZkYjRwMiwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQ1CisgICAgMHgxLjViNmE3NDQ5OWQ2Mzc4MDRiOWFhMjhmOWI3NjZjM2NjcC0xLAorICAgIDB4MS5iY2ViNzcxYTAyYmRlcDIsIC0weDEuOTk5OTk5OTk5OTk5YXAtMworICB9LAorICB7IC8vIEVudHJ5IDE0NgorICAgIDB4MS5mZGRlNmQ3ZDk5MmQ0ZmZjZDBhMjQ0NmE5NTcyYjc5MXAtMSwKKyAgICAweDEuYmZmZmZmZmZmZmZmZHAtMSwgMHgxLmZmYzdmZmZmZmZmZmZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDcKKyAgICAweDEuMjQ5MjQ5MjQ5MjQ5MmYwNTM5NzgyOWNiYzFhZGU2OWZwLTEwMjMsCisgICAgMHgxLmJmZmZmZmZmZmZmZmZwMTAyMiwgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDgKKyAgICAweDEuY2NhMzRkOGQ2MDk1NDIzNTJkZmVhYWNlNTI4Y2I3YTFwLTgxOCwKKyAgICAweDEuY3AtMTAzMywgMHgxLjk1NTU1NTU1NTU1NTJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDkKKyAgICAweDEuNTVjYjgwNWQzYjZhYjVjNzY3NWNlMjg4ZGIxNzlmMmJwLTk4MSwKKyAgICAweDEuY3AtMTAzMywgMHgxLmU2NjY2NjY2NjY2NjJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTAKKyAgICAweDEuOTdhM2ZjYmFjZWJlNWQ4NmQ0Zjk2NzVkM2I4MjA4ZjhwODYxLAorICAgIDB4MS5jcC0xMDU5LCAtMHgxLmEwZWEwZWEwZWEwZWFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTEKKyAgICAweDEuZTkyNmYzMzQyNzI5ZDEwMGJlYWIyMmI1MDI5ZmE2OTJwLTk1NiwKKyAgICAweDEuY3AtMTA3MSwgMHgxLmM4ZWJkNDhlYmQ0OThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTIKKyAgICAweDEuZjE2NjhhODc3YzMwMjBjODUwNWM0NWFlOTk0YmQzNThwLTEwMDIsCisgICAgMHgxLmNwLTEwNzEsIDB4MS5kZWVhYmI3ODg0NTQ5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTUzCisgICAgMHgxLjI0OTI0OTI0OTI0NTk3ODI5Y2JjMTRmMGU5M2M3NDZlcC0xMDIzLAorICAgIDB4MS5jMDAwMDAwMDAwMDU3cDEwMjIsIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTU0CisgICAgMHgxLmM2NWMyY2YzOTYyZGE4MDEzZDQwZWU4YzNiNDZiZjFkcDk2LAorICAgIDB4MS5jMjVjMjY4NDkxNjEwcC00NCwgLTB4MS4xZWZlZmY1YTI3M2VjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTUKKyAgICAweDEuOTcwYzEwZDZiMGE1OWE3ZmFkZjFlMjFlNWFiNjc3YmVwNzcsCisgICAgMHgxLmMyNWMyNjg0OTc2ODJwLTQ0LCAtMHgxLmNjNmI5M2FiYmIwNzRwMAorICB9LAorICB7IC8vIEVudHJ5IDE1NgorICAgIDB4MS44NTgzYzI0ODlhNTAzODAwMDZjOWM3MjA1YjVhNTRmZXAtMSwKKyAgICAweDEuYzJlMTcwYjg1Yzk5NHAtMiwgMHgxLjU1NTU1NTU1NTU1NTVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTcKKyAgICAweDEuN2U0NTczMDE1YmM2M2JkMjY3Njc5YWFiMmNkODlmNjZwLTEsCisgICAgMHgxLmNiM2M5NDg0ZTJhZDBwMCwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTU4CisgICAgMHgxLjdlM2U3MTljZTViNzk3ZmU4ODU4MTViYzNiMjQ1N2YycC0xLAorICAgIDB4MS5jYjRkNjllYjRmNGI5cDAsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE1OQorICAgIDB4MS5mZDQyNTBhODcxYzdmZTAwZDVmNTEwMzljNTdkZGU2ZnAtNjI0LAorICAgIDB4MS5jY2M0YzBmZDYzY2I2cC0xLCAweDEuMHAxMgorICB9LAorICB7IC8vIEVudHJ5IDE2MAorICAgIDB4MS41ZGMyODVkNWI1ZjE2ODAwZjZkN2RjNWZmZGNmOGQxNnAtMSwKKyAgICAweDEuZDE3NDVkMTc0OTg4M3AtMSwgMHgxLmZmYzdmZmZmZmZmZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDE2MQorICAgIDB4MS5mZWE1OTVkNWMwNGY4ODE0MzhmN2Y1ZjEwZGJiMDI5N3AtMiwKKyAgICAweDEuZDU1NTU1NTU1NTU1MnAtMSwgMHgxLmZmYzdmZmZmZmZmZmZwMgorICB9LAorICB7IC8vIEVudHJ5IDE2MgorICAgIDB4MS4wMDAwMDAwMDAwMDA3ZmYwNGEyNjY3OGI2MzNhMTMzZXAwLAorICAgIDB4MS5kODcyNDQxZWMzOTA1cDIsIDB4MS4wMDAwMDAwMDAwMDExcC01MAorICB9LAorICB7IC8vIEVudHJ5IDE2MworICAgIDB4MS5hNjNmNGJkNzk3ZjgyODA1OTE5YjA5ZDJiNjJkYTFlMXAtMSwKKyAgICAweDEuZGE2MGExZjJlYzYwOHAtMiwgMHgxLjAwN2NkOTUyNGQzZjRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjQKKyAgICAweDEuYTgyZTE0NjkwMjVjODUwYzE0NDhhMTljMmFmNjdmZTRwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3MnAtMiwgMHgxLmMzMGMzMGMzMGMzcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjUKKyAgICAweDEuNzc5YTA2YmMzODgwZTJjMzlkZmM2Nzk3NDllNDcwYTVwLTIsCisgICAgMHgxLmRiYjBlMGFhMmRkMGVwMiwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTY2CisgICAgMHgxLmY1NWI0MWFiNGE2NzU0MDViNTQyNzAzZDliMDM3YWU3cC00MDgsCisgICAgMHgxLmRkYTk1YTk1YTk1YjFwLTEsIDB4MS5mYzBwMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjcKKyAgICAweDEuNzY3ZmJhZDIxOWEyMDgwMThkNmI4MWY3ZjNhMjA1MWJwMiwKKyAgICAweDEuZGU3ZjE1NDgzODUzN3AtNiwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTY4CisgICAgMHgxLjcxMWQ2MDJmZmIyN2Y4MDIwOTA0M2Q2ZDhmMjgzY2Y4cC0xMCwKKyAgICAweDEuZTY2NjY2NjY2NjY2YnAtMSwgMHgxLmZmZmZmZmZmZmZmZjhwNgorICB9LAorICB7IC8vIEVudHJ5IDE2OQorICAgIDB4MS5mZjU2OTczOTZhZjE1N2ZmZWFkNzQ4ODU5YWUzYzljYnAxLAorICAgIDB4MS5lZWVlZWVlZWVlZWVlcDIsIDB4MS41YWFhYWFhYWFhYWFicC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTcwCisgICAgMHgxLmZlOTYxYTNjY2QzYzI4MWFkMDMzM2Q2ODA2OTI3YjJicC0xLAorICAgIDB4MS5mMDdjMWYwN2MxZjA3cC0xNCwgMHgxLjQwYTU3ZWI1MDI5NmRwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgMTcxCisgICAgMHgxLmRhYzBjN2NmYmVmMDViZDY1YTBlNmVhMjQ3N2Y0N2ZhcDc3OCwKKyAgICAweDEuZjFhMTdkMDc5ZTI0ZnAtMywgLTB4MS43ZDljMGI1ZjNhOTYwcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzIKKyAgICAweDEuNmVhNjliZDg1YjY3Y2M4NWJlODNmYTk3N2RjMTIzY2FwLTEsCisgICAgMHgxLmYzMzMzMzMzMzMzMjRwMCwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTczCisgICAgMHgxLjcxNWJmOTJmNDNmMDBiNDAzMDQ5ZTBjM2U1MTE1M2Y4cC0xNiwKKyAgICAweDEuZjY2NDk4NGI4YTE1MnAtMjEsIDB4MS44Yjg1MmNlMjIxOWYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTc0CisgICAgMHgxLjc0MzY4MDk0ZWZiZmIzODBiYjJkZjJlMjBlMmE3YTE3cC04NSwKKyAgICAweDEuZjZkZWQ4YmMzZmE0M3AtNywgMHgxLmMwODM1OTVjMmIxYmNwMworICB9LAorICB7IC8vIEVudHJ5IDE3NQorICAgIDB4MS5iMGVmNTU2MDA2MjA3NzE4ZDNkYTA4YTkwMTM2NzI2ZHA3MjEsCisgICAgMHgxLmY4M2UwZjgzZTBiOGFwLTEsIC0weDEuMDAwMDAwMDJiNjU4ZXAxNQorICB9LAorICB7IC8vIEVudHJ5IDE3NgorICAgIDB4MS5iMGVmNGNkOTRmOGY4YThlNjAzZmY2NThmNjFmZWZiMXA3MjEsCisgICAgMHgxLmY4M2UwZjgzZTBiYTVwLTEsIC0weDEuMDAwMDAwMDAyMjFlZnAxNQorICB9LAorICB7IC8vIEVudHJ5IDE3NworICAgIDB4MS5iMGVmNGNkODJmMTM4N2Q3NjU4MGE5ZWVhYmE2NTZmNnA3MjEsCisgICAgMHgxLmY4M2UwZjgzZTBiY2ZwLTEsIC0weDEuMDAwMDAwMDAyMjFlZnAxNQorICB9LAorICB7IC8vIEVudHJ5IDE3OAorICAgIDB4MS5iMGVmNGNmYjFjZWMzN2Q2NGYzN2VhMzc1NTk3Yjc0MHA3MjEsCisgICAgMHgxLmY4M2UwZjgzZTBiY2ZwLTEsIC0weDEuMDAwMDAwMDAyY2IwOXAxNQorICB9LAorICB7IC8vIEVudHJ5IDE3OQorICAgIDB4MS5iMGVmNTU1ZTI2OWM2Nzc0YTE4YjU2YWYzNjk0N2Q4MnA3MjEsCisgICAgMHgxLmY4M2UwZjgzZTBiY2ZwLTEsIC0weDEuMDAwMDAwMDJiNjU3M3AxNQorICB9LAorICB7IC8vIEVudHJ5IDE4MAorICAgIDB4MS5iMWMzMDQyZmU3NmVjNzRlYjYzMTc3NmVhOTBjM2NjNnA3MjEsCisgICAgMHgxLmY4M2UwZjgzZTBiY2ZwLTEsIC0weDEuMDAwMDQwMDAyMjFlZnAxNQorICB9LAorICB7IC8vIEVudHJ5IDE4MQorICAgIDB4MS5mMmU5MjQ3N2Q2NGM4NmZhNTRmNjIxNWVjOGRlNTg5NnA4MjcsCisgICAgMHgxLmY4M2UwZjgzZTBiY2ZwLTEsIC0weDEuMjVhYjZmN2JjZWQ5M3AxNQorICB9LAorICB7IC8vIEVudHJ5IDE4MgorICAgIDB4MS5iMGVmNGMwNGFiNmY5N2E1MjkzNTA5MTU1MDRjMDA3NHA3MjEsCisgICAgMHgxLmY4M2UwZjgzZTBiY2ZwLTEsIC0weDEuZmZmZmZmZmZjNDNkZXAxNAorICB9LAorICB7IC8vIEVudHJ5IDE4MworICAgIDB4MS5iMGVmNTU1YjFkYmU5N2QyNzZkMTk2MzA2YmEwMDA1MXA3MjEsCisgICAgMHgxLmY4M2UwZjgzZTBjMjZwLTEsIC0weDEuMDAwMDAwMDJiNjIwZnAxNQorICB9LAorICB7IC8vIEVudHJ5IDE4NAorICAgIDB4MS5iMGVmNGNiZTZkZWU2OGY2OTdmYzU4ODVlNDNhMzU0NXA3MjEsCisgICAgMHgxLmY4M2UwZjgzZTBmODBwLTEsIC0weDEuMDAwMDAwMDAyMjBwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODUKKyAgICAweDEuNjYxZGIyNDJlMTNmNzg3NjBmMzM4NWM0OGRlNmUxNGRwLTcxNiwKKyAgICAweDEuZjg0ZjFiNzdhYTYxZXAtMSwgMHgxLjAwMDAwNDRwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODYKKyAgICAweDEuNmNjMDU2NTkzYjE4OTdmZTcyOTQ1NTZlODVhN2ZjY2FwLTEsCisgICAgMHgxLmY4NjliMTBlMTY0NmVwMCwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTg3CisgICAgMHgxLjk2ZWMxOTljODI4MzI4MGRjZGUxYmYwYTZiZGYxOGRkcC0zMywKKyAgICAweDEuZjg2ZDZmNjNhYTA0OXAtMSwgMHgxLjc4MHAxMAorICB9LAorICB7IC8vIEVudHJ5IDE4OAorICAgIDB4MS44ZDM1NzVjNWEwODIxN2U5NmQyYmFjY2Q5MjEwMjEwMXA2MTIsCisgICAgMHgxLmY5Njg2MGFmY2I0NTJwLTEsIC0weDEuMDAwMDA0M2ZmZmVlZHAxNQorICB9LAorICB7IC8vIEVudHJ5IDE4OQorICAgIDB4MS44ZDM1NzVjNTJlYTMxZmVhM2QwNzk5ZjhjZjg1MjNlM3A2MTIsCisgICAgMHgxLmY5Njg2MGFmY2I0NjhwLTEsIC0weDEuMDAwMDA0M2ZmZmY4NXAxNQorICB9LAorICB7IC8vIEVudHJ5IDE5MAorICAgIDB4MS44ZDM1NzVjNDcyZjBjODYzYzA2YTk3NmUyMmEyNWM2ZHA2MTIsCisgICAgMHgxLmY5Njg2MGFmY2I0ODlwLTEsIC0weDEuMDAwMDA0NHAxNQorICB9LAorICB7IC8vIEVudHJ5IDE5MQorICAgIDB4MS44ZDM1NzVjMzVhYWNlZmVhOTVjODg1NDM5ZDQ5YmQ5OXA2MTIsCisgICAgMHgxLmY5Njg2MGFmY2I0YmJwLTEsIC0weDEuMDAwMDA0NDAwMDBkNHAxNQorICB9LAorICB7IC8vIEVudHJ5IDE5MgorICAgIDB4MS44ZDM1NzVjMGNmYzQ2MWJiZTVlZTM2NDRjYzZkNzdjMnA2MTIsCisgICAgMHgxLmY5Njg2MGFmY2I1MDZwLTEsIC0weDEuMDAwMDA0M2ZmZmM3OXAxNQorICB9LAorICB7IC8vIEVudHJ5IDE5MworICAgIDB4MS44ZDM1NzVjMTY2N2RmMTE2Mzk3OTgyNGQ4NjNjYzU3MXA2MTIsCisgICAgMHgxLmY5Njg2MGFmY2I1MDZwLTEsIC0weDEuMDAwMDA0NDAwMDAyMnAxNQorICB9LAorICB7IC8vIEVudHJ5IDE5NAorICAgIDB4MS44ZDM1NzViNGZlYzU4OGU1NmYxYmE0YmIyY2RlM2QzN3A2MTIsCisgICAgMHgxLmY5Njg2MGFmY2I3MTRwLTEsIC0weDEuMDAwMDA0NDAwMDM1M3AxNQorICB9LAorICB7IC8vIEVudHJ5IDE5NQorICAgIDB4MS44ZDM1NzVhYzNmZjQ5ZWUwMDQ0MDQxOTUxZDIwNzA2YnA2MTIsCisgICAgMHgxLmY5Njg2MGFmY2I4NThwLTEsIC0weDEuMDAwMDA0M2ZmZmU2ZHAxNQorICB9LAorICB7IC8vIEVudHJ5IDE5NgorICAgIDB4MS42NzE5ODZkYmU1M2Y1NmFjZDM2ZGRhZWVjOTcyNzdhYXAtNDYsCisgICAgMHgxLmY5ODVmN2NiZjAwNTlwLTcsIDB4MS5lM2ZhMzAxOGJkZTA4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTcKKyAgICAweDEuZWVjNzNlYjNlZDkyNDc5NDBlODc3NTBlN2ZjNDk0NzlwMTAxOSwKKyAgICAweDEuZmE4MWE1ZTdkNDEyY3AtMSwgLTB4MS4wMDAwMDdmZmVmMHAxNgorICB9LAorICB7IC8vIEVudHJ5IDE5OAorICAgIDB4MS42YWZjMmIzNjY5Y2FmZDhiMDRiZTA3NjM3Y2I4Y2U1ZXAtMSwKKyAgICAweDEuZmQ1NTcwMTlmMWNkMHAwLCAtMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTkKKyAgICAweDEuYzRmOTFkMjRlNWMzZTg2ZjczZWE2ODEzMmJkYTRiOGFwMTAwMiwKKyAgICAweDEuZmRmZmZmZmZmZmZmZnAtMywgLTB4MS5mM2ZmZmZmZmZmZmZmcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDAKKyAgICAweDEuNmE5M2I3ZjA0Njk0YWQ2NmI5YWE2NGY3NmJhMWZhMzhwLTIsCisgICAgMHgxLmZlN2IwZWU2YWZhM2NwMiwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjAxCisgICAgMHgxLmUxNzc2YmRlMTY2NDM4MDhhMzhjYWYwNTBmNWNiNjMwcC05NjYsCisgICAgMHgxLmZmM2U5YWUzMDMzYWVwLTEsIDB4MS5iYTZjMTNiZjAwNWVjcDE4CisgIH0sCisgIHsgLy8gRW50cnkgMjAyCisgICAgMHgxLmQ0ZWY1ZWNkNzU0Y2Q3ZjZlNzAxNjQ1Mzk5NGMyMWQ1cC05NDMsCisgICAgMHgxLmZmNDMzYTAyZWM5NjRwLTEsIDB4MS5iYTdhMzQ3Y2RmZmVicDE4CisgIH0sCisgIHsgLy8gRW50cnkgMjAzCisgICAgMHgxLmZlOWJiZGMxNjFhYmQ3ZmQ5YjMyZGJiYzJkNzQ4NDM4cC05MTUsCisgICAgMHgxLmZmNDhlMmI0YTVkN2VwLTEsIDB4MS5iYThiODEwZjU1MDdmcDE4CisgIH0sCisgIHsgLy8gRW50cnkgMjA0CisgICAgMHgxLmRlNTJhYTZhNWVjYWY4MDY3Nzk3YzllMmEyODFiMjNlcC05MDUsCisgICAgMHgxLmZmNGFlMGU0NDBmYjZwLTEsIDB4MS5iYTkxOThhYjAzY2Q0cDE4CisgIH0sCisgIHsgLy8gRW50cnkgMjA1CisgICAgMHgxLjc2YmM1MmRjNzQzMWY4MDAwMDA1MzZhOTRiYzNkMzA1cDEzMywKKyAgICAweDEuZmY3N2ZmZmZmZmZmZnAxNSwgMHgxLjBiMWZkY2Q3NTkwYWJwMworICB9LAorICB7IC8vIEVudHJ5IDIwNgorICAgIDB4MS41YzFjMmRlZDcyMTNkOTkxODM2ZmQyYWE4ZGZmNGRmN3AtMTAyMywKKyAgICAweDEuZmY3ZmZmZmZmZmZmZnAwLCAtMHgxLjAwMDAwMDAwY3AxMAorICB9LAorICB7IC8vIEVudHJ5IDIwNworICAgIDB4MS43YTJiNGQ3MmNjZmFiN2ZlYmI2OGFiM2FjNDIyY2RhN3AtNjEzLAorICAgIDB4MS5mZjg1Nzk2ZTRmMDYzcC0xLCAweDEuYmI0NGI4NmNhMDkyOHAxOAorICB9LAorICB7IC8vIEVudHJ5IDIwOAorICAgIDB4MS4xOGEyZmFmOGI1ZjZlODAzMjgzN2U3ZDg3YWJjZmE1OHAtNDEwLAorICAgIDB4MS5mZmFlMTNlYmYxODcycC0xLCAweDEuYmJjMGQ3YzNhODgyY3AxOAorICB9LAorICB7IC8vIEVudHJ5IDIwOQorICAgIDB4MS4zOWU3ZDg0YTg5NTgyODIwNTM2NjZkOGM0MTkzODQ2NnAtNzM5LAorICAgIDB4MS5mZmYwMDAwMDA2MDcxcC0xLCAweDEuMDAwMDE0MHAyMgorICB9LAorICB7IC8vIEVudHJ5IDIxMAorICAgIDB4MS5lNmNlNmY0OWVhNjAyODAxNjA1MGY1ZjM4YWVmYzIwNHA3OTUsCisgICAgMHgxLmZmZjgwMDAwMGU0ODNwMTAyMywgMHgxLjhkZjZiMGRmNmIwZTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTEKKyAgICAweDEuOWFhYTNjZGQxMmRjMDVlMjQ2YjIzNDY1NGI4ZGM3NmZwLTQ0MiwKKyAgICAweDEuZmZmZmZlN2ZmZmZmZXAtMTAyMywgMHgxLmJhMmU4YmEyZThiYTRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTIKKyAgICAweDEuZjY2MzI3OGY3MzA0NDgzMmEyYzFjNTgyMGM1MWNkZTdwLTEsCisgICAgMHgxLmZmZmZmZjNmZmZmZmZwLTgsIDB4MS4wMDAwMDBlcC04CisgIH0sCisgIHsgLy8gRW50cnkgMjEzCisgICAgMHgxLmZmZmZmZmNkNTU1NTQ4MDFjNzIyYmY3ZjM3MTU2NGQ3cC0xLAorICAgIDB4MS5mZmZmZmZiZmZmZmZmcC0xLCAweDEuOTU1NTU1NTU1NTU1MnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIxNAorICAgIDB4MS42MWM1MGFjOGUwMjU3MDAwY2EwZDhiOTM4ZGZlNzlhYnA1NjcsCisgICAgMHgxLmZmZmZmZmJmZmZmZmZwMTAyMywgMHgxLjFiYmJiYmJiYmJiYjlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTUKKyAgICAweDEuZmZmZmZmODAwMDAwMDhwLTE5OSwKKyAgICAweDEuZmZmZmZmY3AtMTAwLCAweDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMjE2CisgICAgMHgxLmZmZmZmZjg1MjkxYzY4MDNiODU0NzMzMmQwMWY2M2IxcDEwMjMsCisgICAgMHgxLmZmZmZmZmZmOGZmZmZwNywgMHgxLmZmZmZmZmZmZTdlNDlwNgorICB9LAorICB7IC8vIEVudHJ5IDIxNworICAgIDB4MS5mZmZmZmZjN2ZmZjQ1Zjk1MWYzYTc4ZGNiNTlhN2ZhNXAtODk3LAorICAgIDB4MS5mZmZmZmZmZmVmZmZmcC0yLCAweDEuYmZmZmZmZmZmZmZmZnA5CisgIH0sCisgIHsgLy8gRW50cnkgMjE4CisgICAgMHgxLjdiMjkzNThkNDVmNDFhMmYyM2VlMjJmODBiYjZmZDA4cDUwOCwKKyAgICAweDEuZmZmZmZmZmZmM2ZmZXAtMTAyMywgLTB4MS5mZDhmZDhmZDhmZDhlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjE5CisgICAgMHgxLmUzNDM3ZTcwZmVjMjQ1NThjMTA3OWNhZGU1NjFlMjc2cC04MTAsCisgICAgMHgxLmZmZmZmZmZmZmJmZmVwLTEwMjMsIDB4MS45NTU1NTU1NTU1NTUycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjIwCisgICAgMHgxLmZmZmZmZmZmZmRmZmY3ZmZmZmZlZmY5N2ZlNmZmZWZmcC0xLAorICAgIDB4MS5mZmZmZmZmZmZiZmZmcC0xLCAweDEuMDAwMDAwMDAwMDAwM3AtMQorICB9LAorICB7IC8vIEVudHJ5IDIyMQorICAgIDB4MS5mNjY5N2M3YWZhMGFjODI3ZDQ1YjQyOGI5YzEzZWE0NnA3NywKKyAgICAweDEuZmZmZmZmZmZmZjBkNnA5NTIsIDB4MS40ZjIwOTRmMjA5NGYwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjIyCisgICAgMHgxLmZmZmZmZmZmZmZiYzM3ZmZmZmZmZmY4MjQzNmZmZmZmcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmYjRicC0xLCAweDEuY2NjY2NjY2NjY2NjY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDIyMworICAgIDB4MS5mZmZmZmZmZmZmY2ZlN2ZmZmZmZmZmZTIzMmNmZmZmZnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmNkNnAtMSwgMHgxLmU2NjY2NjY2NjY2NjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjQKKyAgICAweDEuZmZmZmZmZmZmZmYzNzdmZmZmZmZmZmRiZGZlZmZmZmZwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZlNmZwLTEsIDB4MS5mZmZmZmZmZmZmZmY4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjI1CisgICAgMHgxLjAwMDAwMDAwMDAwM2M3ZmZmZmZmZmZlYjQzMWZmZmZmcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmMGVwLTEsIC0weDEuZmZmZmZmZmZmZmU5YnAtMgorICB9LAorICB7IC8vIEVudHJ5IDIyNgorICAgIDB4MS4wMDAwMDAwMDAwMTJkODAwMDAwMDAwZWNiOTgwcC0zLAorICAgIDB4MS5mZmZmZmZmZmZmZjM3cDAsIC0weDEuOHAxCisgIH0sCisgIHsgLy8gRW50cnkgMjI3CisgICAgMHgxLmFlODlmOTk1YWFhOTNiOGFiZWEyYzdiN2NiY2RjNWUycDM3OCwKKyAgICAweDEuZmZmZmZmZmZmZmY5ZnAyLCAweDEuZjhmZmZmZmZmZmZmZnA2CisgIH0sCisgIHsgLy8gRW50cnkgMjI4CisgICAgMHgxLjAwMDAwMDAwMDE5MzQ4MDAwMDAxM2ZkNmIyNDAwMGFhcC0xMDE1LAorICAgIDB4MS5mZmZmZmZmZmZmZmE3cDYsIC0weDEuMjIwcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjkKKyAgICAweDEuZmZmZmZmZmZmZmZkMDdmZmZmZmZmZmZmZWM0ZmZmZmZwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmY2VwLTEsIDB4MS5lNjY2NjY2NjY2NjY2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjMwCisgICAgMHgxLmZmZmZmZmZmZmYxY2U0ODVmZGY0YTVmZDNlNjcxZWE5cC0xMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmVmcC01LCAweDEuZmVmZmZmZmZmZmZmZnA3CisgIH0sCisgIHsgLy8gRW50cnkgMjMxCisgICAgMHgxLjAwMDAwMDAwMDAwMDQ3ZmZmZmZmZmZmZmZmZmZmZmZmcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZjdwLTEsIC0weDEuZmZmZmZmZmZmZmZmN3AtMQorICB9LAorICB7IC8vIEVudHJ5IDIzMgorICAgIDB4MS4wMDAwMDAwMDAwMDAyODAwMDAwMDAwMDAwNjQwcC0xMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZicDEwMjIsIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjMzCisgICAgMHgxLmZmZmZmZmZmZmZmZmY4MDAwMDA2ZmZmZmZmZDBwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmNwLTEsIDB4MS5mZmZmZmUzZmZmZmZmcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjM0CisgICAgMHgxLmZmZmZmZmZmZmZmMTcyMTdmN2QxY2Y4ZGEwY2M3N2NicDEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmRwMCwgMHgxLjAwMDAwMDAwMDAwMDJwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzUKKyAgICAweDEuZmZmZmZmZmZmZmY4YjkwYmZiZThlN2JmOTMyNTk2ZGZwMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZHAxLCAweDEuMDAwMDAwMDAwMDAwMXA5CisgIH0sCisgIHsgLy8gRW50cnkgMjM2CisgICAgMHgxLjAwMDAwMDAwMDAwMDA3ZmZmZmZmZmZmZmZmZGZmZmZmcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwLTEsIC0weDEuZmZmZmZmZmZmZmZmZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDIzNworICAgIDB4MS45ZmRmOGJjY2U1MzQ2MDA0YzVmOGZlMWZlNTJiMTExNXA1NiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtNjQsIC0weDEuY2NjY2NjY2NjY2NjZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDIzOAorICAgIDB4MS4zMzU0MDUzNjEzOTc1ODAxZTFmMThjNjA3ZDlmN2M5NnAtNTUsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwLTIyNCwgMHgxLmY2YjBkZjZiMGRmNmFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzkKKyAgICAweDEuNDMzN2NkNmIxMWJkNzdmZjFkZmIxNmU3NzQ0N2VmOGVwMTU3LAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcC02NDIsIC0weDEuZjZiMGRmNmIwZGY2Y3AtMworICB9LAorICB7IC8vIEVudHJ5IDI0MAorICAgIDB4MS45ZmRmOGJjY2U1NzFmYjNjOTU2MWYzMzdjOWM0MjdkNHAyNzgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwLTkzMCwgLTB4MS4zMzMzMzMzMzMzMzM3cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjQxCisgICAgMHgxLmRkYjY4MDExN2FiOTY4MDU3Nzk2ZTgxOTE0ZTc4NTk1cDkwOSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtMTAxMiwgLTB4MS5jY2NjY2NjY2NjY2NkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjQyCisgICAgMHgxLjIzODdhNmU3NTYyMzMwMDBiNDljM2IwYmY5YzU0OTgycDEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwNCwgMHgxLmU2NjY2NjY2NjY2NWNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDMKKyAgICAweDEuYTVhZGI4YzhlMzJjMTgwN2E3ZGE5MmI0M2Y3Y2M5MGNwNTQsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwNzUsIDB4MS43MGEzZDcwYTNkNzBmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjQ0CisgICAgMHgxLmVjMWRlYWJiZTNhOWVhZTI5YmRlNTZmODhlOGVmNGVlcDYyNywKKyAgICAweDEuZmZmZmZmZmZmZmZmZXA4MTMsIDB4MS44YWY4YWY4YWY4YWY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjQ1CisgICAgMHgxLmZmZmZmZmZmZmY4ZjlkY2NkNTJkNDcwYTg4MjY2OWMzcDY0NywKKyAgICAweDEuZmZmZmZmZmZmZmZmZXA4NjMsIDB4MS43ZmZmZmZmZmZmZmZkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjQ2CisgICAgMHgxLjAwMDAwMDA0ZGEyMGE3ZDI4MjFjZGZkNGY2MzQ3ZGQwcDEyOCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMywgLTB4MS4wMDAwMDAwMDBlMHA2CisgIH0sCisgIHsgLy8gRW50cnkgMjQ3CisgICAgMHgxLjQ0Y2U1NDFiNjAzNDZjOTgwOTQ0NDNiOWZhYTg0YWJkcDEwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMsIDB4MS40YWZkNmEwNTJjMGUycC03CisgIH0sCisgIHsgLy8gRW50cnkgMjQ4CisgICAgMHgxLmNiNzIwZGNlZjkwNjkxNTAzY2JkMWU5NDlkYjc2MWQ5cC0xLAorICAgIDB4MS4wcC01LCAweDEuMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDI0OQorICAgIDB4MS5wLTUsCisgICAgMHgxLjBwLTUsIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTAKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgMHgxLjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTEKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDI1MgorICAgIDB4MS5wLTQwLAorICAgIDB4MS4wcC01LCAweDEuMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMjUzCisgICAgMHgxLnAtMTYwLAorICAgIDB4MS4wcC01LCAweDEuMHA1CisgIH0sCisgIHsgLy8gRW50cnkgMjU0CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIDB4MS4wcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTUKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgMHgxLjBwNQorICB9LAorICB7IC8vIEVudHJ5IDI1NgorICAgIDAuMCwKKyAgICAweDEuMHAtNSwgMHgxLjBwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTcKKyAgICAwLjAsCisgICAgMHgxLjBwLTUsIDB4MS4wcDEyCisgIH0sCisgIHsgLy8gRW50cnkgMjU4CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIDB4MS4wcDEwCisgIH0sCisgIHsgLy8gRW50cnkgMjU5CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIDB4MS4wcDEyCisgIH0sCisgIHsgLy8gRW50cnkgMjYwCisgICAgMHgxLjExMzAxZDAxMjViNTBhNGViYmYxYWVkOTMxOGNlYWM1cDAsCisgICAgMHgxLjBwMywgMHgxLjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjEKKyAgICAweDEucDMsCisgICAgMHgxLjBwMywgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDI2MgorICAgIDB4MS4xZDQ4NzMxNjhiOWFhNzgwNWI4MDI4OTkwZjA3YTk4YnAwLAorICAgIDB4MS4wcDUsIDB4MS4wcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjYzCisgICAgMHgxLnA1LAorICAgIDB4MS4wcDUsIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjQKKyAgICAweDEucDI0LAorICAgIDB4MS4wcDMsIDB4MS4wcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjUKKyAgICAweDEucDk2LAorICAgIDB4MS4wcDMsIDB4MS4wcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjYKKyAgICAweDEucDQwLAorICAgIDB4MS4wcDUsIDB4MS4wcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjcKKyAgICAweDEucDE2MCwKKyAgICAweDEuMHA1LCAweDEuMHA1CisgIH0sCisgIHsgLy8gRW50cnkgMjY4CisgICAgSFVHRV9WQUwsCisgICAgMHgxLjBwMywgMHgxLjBwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjkKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMHAzLCAweDEuMHAxMgorICB9LAorICB7IC8vIEVudHJ5IDI3MAorICAgIEhVR0VfVkFMLAorICAgIDB4MS4wcDUsIDB4MS4wcDEwCisgIH0sCisgIHsgLy8gRW50cnkgMjcxCisgICAgSFVHRV9WQUwsCisgICAgMHgxLjBwNSwgMHgxLjBwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzIKKyAgICAweDEuM2RlYTY0YzEyMzQyMjM1YjQxMjIzZTEzZDc3M2ZiYTJwMCwKKyAgICAweDEuMHAxMCwgMHgxLjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzMKKyAgICAweDEucDEwLAorICAgIDB4MS4wcDEwLCAweDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjc0CisgICAgMHgxLjRiZmRhZDUzNjJhMjcxZDQzOTdhZmVjNDJlMjBlMDM2cDAsCisgICAgMHgxLjBwMTIsIDB4MS4wcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjc1CisgICAgMHgxLnAxMiwKKyAgICAweDEuMHAxMiwgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDI3NgorICAgIDB4MS5wODAsCisgICAgMHgxLjBwMTAsIDB4MS4wcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzcKKyAgICAweDEucDMyMCwKKyAgICAweDEuMHAxMCwgMHgxLjBwNQorICB9LAorICB7IC8vIEVudHJ5IDI3OAorICAgIDB4MS5wOTYsCisgICAgMHgxLjBwMTIsIDB4MS4wcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzkKKyAgICAweDEucDM4NCwKKyAgICAweDEuMHAxMiwgMHgxLjBwNQorICB9LAorICB7IC8vIEVudHJ5IDI4MAorICAgIDB4MS4wMDAwMDAwMDAwMDAxOThkNGQwZGEwNTU3MWU5YWQ0N3AyLAorICAgIDB4MS42YTA5ZTY2N2YzYmNjcC0xLCAtMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDI4MQorICAgIDB4MS5mZmZmZmZmZmZmZmZjY2U1NjVlNGJmNTUyMTQ2NzM4NXAtMywKKyAgICAweDEuNmEwOWU2NjdmM2JjY3AtMSwgMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDI4MgorICAgIDB4MS4wMDAwMDAwMDAwMDAxOThkNGQwZGEwNTU3MWU5YWQ0N3AtMiwKKyAgICAweDEuNmEwOWU2NjdmM2JjY3AwLCAtMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDI4MworICAgIDB4MS5mZmZmZmZmZmZmZmZjY2U1NjVlNGJmNTUyMTQ2NzM4NXAxLAorICAgIDB4MS42YTA5ZTY2N2YzYmNjcDAsIDB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODQKKyAgICAweDEuMDAwMDAwMDAwMDAwMTk4ZDRkMGRhMDU1NzFlOWFkNDdwMiwKKyAgICAweDEuNmEwOWU2NjdmM2JjY3AtMSwgLTB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODUKKyAgICAweDEuZmZmZmZmZmZmZmZmY2NlNTY1ZTRiZjU1MjE0NjczODVwLTMsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NwLTEsIDB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODYKKyAgICAweDEuMDAwMDAwMDAwMDAwMTk4ZDRkMGRhMDU1NzFlOWFkNDdwLTIsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NwMCwgLTB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODcKKyAgICAweDEuZmZmZmZmZmZmZmZmY2NlNTY1ZTRiZjU1MjE0NjczODVwMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjY3AwLCAweDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMjg4CisgICAgMHgxLjAwMTYyZjM5MDQwNTFmYTJjMWI0ZTg1Mzc0NmI2ZjA0cDAsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NwLTEsIC0weDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODkKKyAgICAweDEuZmZkM2E1NjVlZmI2NGVhODhhODBkOGE1MjU1NGEzYTBwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NwLTEsIDB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI5MAorICAgIDB4MS5mZmQzYTU2NWVmYjY0ZWFlZWQ0NjcxODNiOGQ0NmE5NnAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjY3AwLCAtMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjkxCisgICAgMHgxLjAwMTYyZjM5MDQwNTFmOWY4ZmM0NmIzNzQzZjg1Y2JlcDAsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NwMCwgMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjkyCisgICAgMHgxLjk0OGIwZmNkNmU5ZTA2NTIyYzNmMzViYTc4MTk0OGIwcDEsCisgICAgMHgxLjhwLTEsIC0weDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMjkzCisgICAgMHgxLjQ0cC0yLAorICAgIDB4MS44cC0xLCAweDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMjk0CisgICAgMHgxLjk0OGIwZmNkNmU5ZTA2NTIyYzNmMzViYTc4MTk0OGIwcC0zLAorICAgIDB4MS44cDAsIC0weDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMjk1CisgICAgMHgxLjQ0cDIsCisgICAgMHgxLjhwMCwgMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDI5NgorICAgIDB4MS4yNzlhNzQ1OTAzMzFjNGQyMThmODFlNGFmYjI1N2QwNnAwLAorICAgIDB4MS44cC0xLCAtMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTcKKyAgICAweDEuYmI2N2FlODU4NGNhYTczYjI1NzQyZDcwNzhiODNiODlwLTEsCisgICAgMHgxLjhwLTEsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjk4CisgICAgMHgxLmEyMGJkNzAwYzJjM2RmYzA0MmNjMWFlZDc4NzFkYjQ1cC0xLAorICAgIDB4MS44cDAsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI5OQorICAgIDB4MS4zOTg4ZTE0MDkyMTJlN2QwMzIxOTE0MzIxYTU1NjQ3M3AwLAorICAgIDB4MS44cDAsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzAwCisgICAgMHgxLjAwMTI2YTBiOTNkYjI5NGNhYmUzM2RhNzM1NDM3ZjUxcDAsCisgICAgMHgxLjhwLTEsIC0weDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDEKKyAgICAweDEuZmZkYjJlOGVkMmExZmU3MWJkNTlmZGQ2MTAzMTMwNDZwLTEsCisgICAgMHgxLjhwLTEsIDB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDMwMgorICAgIDB4MS5mZmNjMWM1OTczYjIxMjlhNWIxNDI0ZTBjODg3ODZiOHAtMSwKKyAgICAweDEuOHAwLCAtMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzAzCisgICAgMHgxLjAwMTlmNDc0YWExOTAwMzhjNmFmNzc1ZDkyZjFkNzI1cDAsCisgICAgMHgxLjhwMCwgMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzA0CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIC0weDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzA1CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIDB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDYKKyAgICAweDEucC00LAorICAgIDB4MS4wcDEsIC0weDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzA3CisgICAgMHgxLnA0LAorICAgIDB4MS4wcDEsIDB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDgKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzA5CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzEwCisgICAgMHgxLjZhMDllNjY3ZjNiY2M5MDhiMmZiMTM2NmVhOTU3ZDNlcC0xLAorICAgIDB4MS4wcDEsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMxMQorICAgIDB4MS42YTA5ZTY2N2YzYmNjOTA4YjJmYjEzNjZlYTk1N2QzZXAwLAorICAgIDB4MS4wcDEsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzEyCisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIC0weDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTMKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzE0CisgICAgMHgxLmZmYTc0ZWEzODFlZmMyMTdhNzczZjE1YzAyNWY3YzBkcC0xLAorICAgIDB4MS4wcDEsIC0weDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTUKKyAgICAweDEuMDAyYzYwNWUyZThjZWM1MDZkMjFiZmM4OWEyM2EwMTBwMCwKKyAgICAweDEuMHAxLCAweDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTYKKyAgICAweDEucDQwLAorICAgIDB4MS4wcC0xMCwgLTB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTcKKyAgICAweDEucC00MCwKKyAgICAweDEuMHAtMTAsIDB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTgKKyAgICAweDEuZmUwMTNmNjA0NWU0MGE3YzQxNDk5MjIzYjRhMzhjZThwLTEsCisgICAgMHgxLjAwNHAwLCAtMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDMxOQorICAgIDB4MS4wMTAwNjAxMDAxcDAsCisgICAgMHgxLjAwNHAwLCAweDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzIwCisgICAgMHgxLnA1LAorICAgIDB4MS4wcC0xMCwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzIxCisgICAgMHgxLnAtNSwKKyAgICAweDEuMHAtMTAsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzIyCisgICAgMHgxLmZmYzAwYmZkODA4YmUwODczNjUzNjQ3NDQ4MjIwZmRmcC0xLAorICAgIDB4MS4wMDRwMCwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzIzCisgICAgMHgxLjAwMWZmZTAwM2ZmNjAxYmZhYzEwN2NhNmIyOWEwYzMxcDAsCisgICAgMHgxLjAwNHAwLCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMyNAorICAgIDB4MS4wMWJkMWU3NzE3MGI0MTVlNzYyNjYyMWViNWFhZmY2MXAwLAorICAgIDB4MS4wcC0xMCwgLTB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDMyNQorICAgIDB4MS5mYzhiYzQ4NjZlOGFkMmI5NjNlMTgyOGIwNzYxY2JjNnAtMSwKKyAgICAweDEuMHAtMTAsIDB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDMyNgorICAgIDB4MS5mZmZmZTAwNDAwNTUzNTU4NDQ0NDNkZjg2ODBhOGUwNXAtMSwKKyAgICAweDEuMDA0cDAsIC0weDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjcKKyAgICAweDEuMDAwMDBmZmUwMGQ1MjU2Mjg1MzQwZTRmM2FkMzYyODdwMCwKKyAgICAweDEuMDA0cDAsIDB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDMyOAorICAgIDB4MS4wMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDQwcC0xMDI0LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMsIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzI5CisgICAgMHgxLmZmZmZmZmZmZmZmZmYwcDEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMywgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDMzMAorICAgIDB4MS4zYjJjNDdiZmY4MjcxOTQ0MjU2MDVhOTIzMTFhY2NlZXAxMDIwLAorICAgIDB4MS4wcC0xMDc0LCAtMHgxLmU2NjY2NjY2NjY2NjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzEKKyAgICAweDEuOWZkZjhiY2NlNTQyZjUwODE0MDU3ODM3Njc3YmFmODJwLTEwMjEsCisgICAgMHgxLjBwLTEwNzQsIDB4MS5lNjY2NjY2NjY2NjY2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzMyCisgICAgMHgxLjAwMDAwMDAwMDAwNjUxNTkxZjlkZDVjZGIxMTBmNmUzcC0zODQsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTcsIDB4MS5mZmZmZmZmZmZmZmZmcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzMKKyAgICAweDEuZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAzZWZmZmZmZmZwLTM4NSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNywgMHgxLjBwNgorICB9LAorICB7IC8vIEVudHJ5IDMzNAorICAgIDB4MS5mZmZmZmZmZmZmZGFiYTliODE4OGFhNzQyODQxMWRkNXAtMzg1LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC03LCAweDEuMDAwMDAwMDAwMDAwMXA2CisgIH0sCisgIHsgLy8gRW50cnkgMzM1CisgICAgMHgxLjAwMDAwMDAwMDAwODUxNTkxZjlkZDVkYzRiYzMzNjFmcC0zODQsCisgICAgMHgxLjBwLTYsIDB4MS5mZmZmZmZmZmZmZmZmcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzYKKyAgICAweDEucC0zODQsCisgICAgMHgxLjBwLTYsIDB4MS4wcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzcKKyAgICAweDEuZmZmZmZmZmZmZmRlYmE5YjgxODhhYTJkZWQ3ODIwZTdwLTM4NSwKKyAgICAweDEuMHAtNiwgMHgxLjAwMDAwMDAwMDAwMDFwNgorICB9LAorICB7IC8vIEVudHJ5IDMzOAorICAgIDB4MS4wMDAwMDAwMDAwMGM1MTU5MWY5ZGQ2MDU1MTI3YjQ5NnAtMzg0LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC02LCAweDEuZmZmZmZmZmZmZmZmZnA1CisgIH0sCisgIHsgLy8gRW50cnkgMzM5CisgICAgMHgxLjAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwN2UwcC0zODQsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTYsIDB4MS4wcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDAKKyAgICAweDEuZmZmZmZmZmZmZmU2YmE5YjgxODhhOWI5MTdlNjI3MDlwLTM4NSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNiwgMHgxLjAwMDAwMDAwMDAwMDFwNgorICB9LAorICB7IC8vIEVudHJ5IDM0MQorICAgIDB4MS4wMDAwMDAwMDAwMDI3NzNhNzdkNzE5MTA2ZTkzOTU4MnAtMTYwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC02LCAweDEuZmZmZmZmZmZmZmZmZnA0CisgIH0sCisgIHsgLy8gRW50cnkgMzQyCisgICAgMHgxLmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMGY3ZmZmZmZmcC0xNjEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTYsIDB4MS4wcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDMKKyAgICAweDEuZmZmZmZmZmZmZmYwMjMxNjIwYTM5YzA5M2YxNmY4Y2VwLTE2MSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNiwgMHgxLjAwMDAwMDAwMDAwMDFwNQorICB9LAorICB7IC8vIEVudHJ5IDM0NAorICAgIDB4MS4wMDAwMDAwMDAwMDM3NzNhNzdkNzE5MTM2MWNlMGQ1YXAtMTYwLAorICAgIDB4MS4wcC01LCAweDEuZmZmZmZmZmZmZmZmZnA0CisgIH0sCisgIHsgLy8gRW50cnkgMzQ1CisgICAgMHgxLnAtMTYwLAorICAgIDB4MS4wcC01LCAweDEuMHA1CisgIH0sCisgIHsgLy8gRW50cnkgMzQ2CisgICAgMHgxLmZmZmZmZmZmZmZmMjIzMTYyMGEzOWJmYThhMmQxOTcycC0xNjEsCisgICAgMHgxLjBwLTUsIDB4MS4wMDAwMDAwMDAwMDAxcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDcKKyAgICAweDEuMDAwMDAwMDAwMDA1NzczYTc3ZDcxOTFjMzA0MmZkMDhwLTE2MCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNSwgMHgxLmZmZmZmZmZmZmZmZmZwNAorICB9LAorICB7IC8vIEVudHJ5IDM0OAorICAgIDB4MS4wMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDFmMHAtMTYwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC01LCAweDEuMHA1CisgIH0sCisgIHsgLy8gRW50cnkgMzQ5CisgICAgMHgxLmZmZmZmZmZmZmZmNjIzMTYyMGEzOWJlMmYwNTk1YWI5cC0xNjEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTUsIDB4MS4wMDAwMDAwMDAwMDAxcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTAKKyAgICAweDEuMDAwMDAwMDAwMDAwZTJlNDJmZWZhMzlmNTllMzZiY2JwLTY0LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC01LCAweDEuZmZmZmZmZmZmZmZmZnAzCisgIH0sCisgIHsgLy8gRW50cnkgMzUxCisgICAgMHgxLmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDNiZmZmZmZmcC02NSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNSwgMHgxLjBwNAorICB9LAorICB7IC8vIEVudHJ5IDM1MgorICAgIDB4MS5mZmZmZmZmZmZmZjk3NDZmNDA0MTcxOGVkNDU5OTBhMnAtNjUsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTUsIDB4MS4wMDAwMDAwMDAwMDAxcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTMKKyAgICAweDEuMDAwMDAwMDAwMDAxNjJlNDJmZWZhMzlmZTk1NTgzYzNwLTY0LAorICAgIDB4MS4wcC00LCAweDEuZmZmZmZmZmZmZmZmZnAzCisgIH0sCisgIHsgLy8gRW50cnkgMzU0CisgICAgMHgxLnAtNjQsCisgICAgMHgxLjBwLTQsIDB4MS4wcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTUKKyAgICAweDEuZmZmZmZmZmZmZmZhNzQ2ZjQwNDE3MThiZTI5MTMwYzNwLTY1LAorICAgIDB4MS4wcC00LCAweDEuMDAwMDAwMDAwMDAwMXA0CisgIH0sCisgIHsgLy8gRW50cnkgMzU2CisgICAgMHgxLjAwMDAwMDAwMDAwMjYyZTQyZmVmYTNhMWJjMzliM2IzcC02NCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNCwgMHgxLmZmZmZmZmZmZmZmZmZwMworICB9LAorICB7IC8vIEVudHJ5IDM1NworICAgIDB4MS4wMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDA3OHAtNjQsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTQsIDB4MS4wcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTgKKyAgICAweDEuZmZmZmZmZmZmZmZjNzQ2ZjQwNDE3MTg3NjcwMDcxMDRwLTY1LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC00LCAweDEuMDAwMDAwMDAwMDAwMXA0CisgIH0sCisgIHsgLy8gRW50cnkgMzU5CisgICAgMHgxLjAwMDAwMDAwMDAwMDQ1MTU5MWY5ZGQ1YmE1OTMyOGFicC0yNCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNCwgMHgxLmZmZmZmZmZmZmZmZmZwMgorICB9LAorICB7IC8vIEVudHJ5IDM2MAorICAgIDB4MS5mZmZmZmZmZmZmZmY4MDAwMDAwMDAwMDAwZGZmZmZmZnAtMjUsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTQsIDB4MS4wcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjEKKyAgICAweDEuZmZmZmZmZmZmZmZkNmJhOWI4MTg4YTkzMzJjZmUyNGFwLTI1LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC00LCAweDEuMDAwMDAwMDAwMDAwMXAzCisgIH0sCisgIHsgLy8gRW50cnkgMzYyCisgICAgMHgxLjAwMDAwMDAwMDAwMDg1MTU5MWY5ZGQ1YmJkZDg4ZDJhcC0yNCwKKyAgICAweDEuMHAtMywgMHgxLmZmZmZmZmZmZmZmZmZwMgorICB9LAorICB7IC8vIEVudHJ5IDM2MworICAgIDB4MS5wLTI0LAorICAgIDB4MS4wcC0zLCAweDEuMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMzY0CisgICAgMHgxLmZmZmZmZmZmZmZmZGViYTliODE4OGE5MmE3YmE1MDUwcC0yNSwKKyAgICAweDEuMHAtMywgMHgxLjAwMDAwMDAwMDAwMDFwMworICB9LAorICB7IC8vIEVudHJ5IDM2NQorICAgIDB4MS4wMDAwMDAwMDAwMDEwNTE1OTFmOWRkNWMxODYzNTYyN3AtMjQsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTMsIDB4MS5mZmZmZmZmZmZmZmZmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjYKKyAgICAweDEuMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMWNwLTI0LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0zLCAweDEuMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMzY3CisgICAgMHgxLmZmZmZmZmZmZmZmZWViYTliODE4OGE5MWU1OGYyYzVjcC0yNSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMywgMHgxLjAwMDAwMDAwMDAwMDFwMworICB9LAorICB7IC8vIEVudHJ5IDM2OAorICAgIDB4MS4wMDAwMDAwMDAwMDAwYzVjODVmZGY0NzNkZjM3NTk3OXAtOCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMywgMHgxLmZmZmZmZmZmZmZmZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDM2OQorICAgIDB4MS5mZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMmZmZmZmZnAtOSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMywgMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDM3MAorICAgIDB4MS5mZmZmZmZmZmZmZmYwZThkZTgwODJlMzBiYTQyMzcxYXAtOSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMywgMHgxLjAwMDAwMDAwMDAwMDFwMgorICB9LAorICB7IC8vIEVudHJ5IDM3MQorICAgIDB4MS4wMDAwMDAwMDAwMDAyYzVjODVmZGY0NzNlMjQyZWEzOHAtOCwKKyAgICAweDEuMHAtMiwgMHgxLmZmZmZmZmZmZmZmZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDM3MgorICAgIDB4MS5wLTgsCisgICAgMHgxLjBwLTIsIDB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzMKKyAgICAweDEuZmZmZmZmZmZmZmZmNGU4ZGU4MDgyZTMwYTUxM2Y0MWJwLTksCisgICAgMHgxLjBwLTIsIDB4MS4wMDAwMDAwMDAwMDAxcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzQKKyAgICAweDEuMDAwMDAwMDAwMDAwNmM1Yzg1ZmRmNDczZjE1YTBiYjhwLTgsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTIsIDB4MS5mZmZmZmZmZmZmZmZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzUKKyAgICAweDEuMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDZwLTgsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTIsIDB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzYKKyAgICAweDEuZmZmZmZmZmZmZmZmY2U4ZGU4MDgyZTMwOGNiNzZlMWRwLTksCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTIsIDB4MS4wMDAwMDAwMDAwMDAxcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzcKKyAgICAweDEuZmZmZmZmZmZmZmZmZjYyZTQyZmVmYTM5ZWZjZDk0MDRwLTMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTIsIDB4MS5mZmZmZmZmZmZmZmZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzgKKyAgICAweDEuZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDA4MHAtMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMiwgMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDM3OQorICAgIDB4MS5mZmZmZmZmZmZmZmZiM2EzN2EwMjBiOGMyNGM2ZDFjNnAtMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMiwgMHgxLjAwMDAwMDAwMDAwMDFwMQorICB9LAorICB7IC8vIEVudHJ5IDM4MAorICAgIDB4MS4wMDAwMDAwMDAwMDAwYjE3MjE3ZjdkMWNmN2Q4M2MxYXAtMiwKKyAgICAweDEuMHAtMSwgMHgxLmZmZmZmZmZmZmZmZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDM4MQorICAgIDB4MS5wLTIsCisgICAgMHgxLjBwLTEsIDB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODIKKyAgICAweDEuZmZmZmZmZmZmZmZmZDNhMzdhMDIwYjhjMjM4MTA5NjdwLTMsCisgICAgMHgxLjBwLTEsIDB4MS4wMDAwMDAwMDAwMDAxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODMKKyAgICAweDEuMDAwMDAwMDAwMDAwMmIxNzIxN2Y3ZDFjZjkzYjIwNGFwLTIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEsIDB4MS5mZmZmZmZmZmZmZmZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODQKKyAgICAweDEuMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDFwLTIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEsIDB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODUKKyAgICAweDEuMDAwMDAwMDAwMDAwMDlkMWJkMDEwNWM2MTFmYWJjNTNwLTIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEsIDB4MS4wMDAwMDAwMDAwMDAxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODYKKyAgICAweDEuZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDA3ZmZmZmZwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEsIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzg3CisgICAgMHgxLmZmZmZmZmZmZmZmZmYwcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xLCAweDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzg4CisgICAgMHgxLmZmZmZmZmZmZmZmZmVmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xLCAweDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzg5CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzkwCisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTEKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDM5MgorICAgIDB4MS4wMDAwMDAwMDAwMDAwZmZmZmZmZmZmZmZmZjdmZmZmZnAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAsIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzkzCisgICAgMHgxLjAwMDAwMDAwMDAwMDEwcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMCwgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDM5NAorICAgIDB4MS4wMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMXAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAsIDB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTUKKyAgICAweDEuNmEwOWU2NjdmM2JjYmY3NGMyOTcwNDQwZDZkMmE4MzFwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAwLCAweDEuZmZmZmZmZmZmZmZmZnAtMgorICB9LAorICB7IC8vIEVudHJ5IDM5NgorICAgIDB4MS42YTA5ZTY2N2YzYmNjMzYwOGI2MTczOTdmNzY2MGEyM3AwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDAsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzk3CisgICAgMHgxLjZhMDllNjY3ZjNiY2NiMzgxY2Y2NTI0NjM4YWQ2YjQzcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMCwgMHgxLjAwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTgKKyAgICAweDEuNmEwOWU2NjdmM2JjYzUxY2VhMzBhNDBmYzljNTJhZWNwMCwKKyAgICAweDEuMHAxLCAweDEuZmZmZmZmZmZmZmZmZnAtMgorICB9LAorICB7IC8vIEVudHJ5IDM5OQorICAgIDB4MS42YTA5ZTY2N2YzYmNjOTA4YjJmYjEzNjZlYTk1N2QzZXAwLAorICAgIDB4MS4wcDEsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDAwCisgICAgMHgxLjZhMDllNjY3ZjNiY2QwZTA0NDhmZjIxNTJjNTZiZjFmcDAsCisgICAgMHgxLjBwMSwgMHgxLjAwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDEKKyAgICAweDEuNmEwOWU2NjdmM2JjZDA2ZDM5NjNlM2FkYWY2NjRlODhwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxLCAweDEuZmZmZmZmZmZmZmZmZnAtMgorICB9LAorICB7IC8vIEVudHJ5IDQwMgorICAgIDB4MS42YTA5ZTY2N2YzYmNkNDU5MDIyZTUzMDRkMGIwODE5OXAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDEsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDAzCisgICAgMHgxLjZhMDllNjY3ZjNiY2RjMzA5M2MzMzFiMzEzNjU4NGY5cDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMSwgMHgxLjAwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDQKKyAgICAweDEuNmEwOWU2NjdmM2JjYzI0OGQ2NjNkNDI4NTA0OTE1N2JwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxLCAweDEuZmZmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDQwNQorICAgIDB4MS42YTA5ZTY2N2YzYmNjNjM0OWYyZTQzN2Y3MGZhZWY5Y3AwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEsIDB4MS4wcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDA2CisgICAgMHgxLjZhMDllNjY3ZjNiY2NlMGMzMGMzMjIyZGIyN2Y0MTFkcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMSwgMHgxLjAwMDAwMDAwMDAwMDFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDcKKyAgICAweDEuNmEwOWU2NjdmM2JjYzUxY2VhMzBhNDBmYzljNTJhZWNwMCwKKyAgICAweDEuMHAyLCAweDEuZmZmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDQwOAorICAgIDB4MS42YTA5ZTY2N2YzYmNjOTA4YjJmYjEzNjZlYTk1N2QzZXAwLAorICAgIDB4MS4wcDIsIDB4MS4wcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDA5CisgICAgMHgxLjZhMDllNjY3ZjNiY2QwZTA0NDhmZjIxNTJjNTZiZjFmcDAsCisgICAgMHgxLjBwMiwgMHgxLjAwMDAwMDAwMDAwMDFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTAKKyAgICAweDEuNmEwOWU2NjdmM2JjY2FjNTExY2E0M2RlYmM4YTZjNmJwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAyLCAweDEuZmZmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDQxMQorICAgIDB4MS42YTA5ZTY2N2YzYmNjZWIwZGE5NGIzMzVkZDk3YWYxY3AwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDIsIDB4MS4wcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDEyCisgICAgMHgxLjZhMDllNjY3ZjNiY2Q2ODg2YzI5OTFlNDFmZDJkMWJkcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMiwgMHgxLjAwMDAwMDAwMDAwMDFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTMKKyAgICAweDEuNGJmZGFkNTM2MmEyNmRkNWUwYmQwMjU5NGI1ODEyY2JwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAyLCAweDEuZmZmZmZmZmZmZmZmZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDQxNAorICAgIDB4MS40YmZkYWQ1MzYyYTI3MDg4M2JjZGFiNjE4YmFhODIwNHAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDIsIDB4MS4wcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDE1CisgICAgMHgxLjRiZmRhZDUzNjJhMjc1ZWNmMWVlZmQ3MjBjNjAzMzIxcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMiwgMHgxLjAwMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTYKKyAgICAweDEuNGJmZGFkNTM2MmEyNmYyMWRlNmE1NWJiZWRjMTVlYjRwMCwKKyAgICAweDEuMHAzLCAweDEuZmZmZmZmZmZmZmZmZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDQxNworICAgIDB4MS40YmZkYWQ1MzYyYTI3MWQ0Mzk3YWZlYzQyZTIwZTAzNnAwLAorICAgIDB4MS4wcDMsIDB4MS4wcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDE4CisgICAgMHgxLjRiZmRhZDUzNjJhMjc3MzhlZjljNTBkNGFlZjBiNWU0cDAsCisgICAgMHgxLjBwMywgMHgxLjAwMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTkKKyAgICAweDEuNGJmZGFkNTM2MmEyNzFiOWQ5YzRmYzgxMzI3OGJhYjZwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAzLCAweDEuZmZmZmZmZmZmZmZmZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDQyMAorICAgIDB4MS40YmZkYWQ1MzYyYTI3NDZjMzRkNWE1ODk3MmYyNjBjOXAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDMsIDB4MS4wcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDIxCisgICAgMHgxLjRiZmRhZDUzNjJhMjc5ZDBlYWY2Zjc5OWYzZjY3Zjk5cDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMywgMHgxLjAwMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjIKKyAgICAweDEuMzA2ZmUwYTMxYjcxNTBhMDRiNThhZDgwMjdjZWIwNTBwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAzLCAweDEuZmZmZmZmZmZmZmZmZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDQyMworICAgIDB4MS4zMDZmZTBhMzFiNzE1MjQ2NTU2OWY0YTJhM2RhNDNkNHAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDMsIDB4MS4wcC00CisgIH0sCisgIHsgLy8gRW50cnkgNDI0CisgICAgMHgxLjMwNmZlMGEzMWI3MTU1OTI2OThjODJlNzliZjg0NjEzcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMywgMHgxLjAwMDAwMDAwMDAwMDFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjUKKyAgICAweDEuMzA2ZmUwYTMxYjcxNTEzODgzNDhmZjBkZTA3NGM1YTNwMCwKKyAgICAweDEuMHA0LCAweDEuZmZmZmZmZmZmZmZmZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDQyNgorICAgIDB4MS4zMDZmZTBhMzFiNzE1MmRlOGQ1YTQ2MzA1Yzg1ZWRlY3AwLAorICAgIDB4MS4wcDQsIDB4MS4wcC00CisgIH0sCisgIHsgLy8gRW50cnkgNDI3CisgICAgMHgxLjMwNmZlMGEzMWI3MTU2MmFhMTdjZDQ3NTU0YWYxOWI0cDAsCisgICAgMHgxLjBwNCwgMHgxLjAwMDAwMDAwMDAwMDFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjgKKyAgICAweDEuMzA2ZmUwYTMxYjcxNTI2OGYzMjlhMjI5NTFiMzhmNjFwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXA0LCAweDEuZmZmZmZmZmZmZmZmZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDQyOQorICAgIDB4MS4zMDZmZTBhMzFiNzE1NDBlZmQzYWU5NGJjZGNmZTEzM3AwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDQsIDB4MS4wcC00CisgIH0sCisgIHsgLy8gRW50cnkgNDMwCisgICAgMHgxLjMwNmZlMGEzMWI3MTU3NWIxMTVkNzc5MGM2MGY2MDBkcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNCwgMHgxLjAwMDAwMDAwMDAwMDFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzEKKyAgICAweDEuMWQ0ODczMTY4YjlhYTY0MWRiOTdiNDkxYTM3OTM2YWVwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnA0LCAweDEuZmZmZmZmZmZmZmZmZnAtNgorICB9LAorICB7IC8vIEVudHJ5IDQzMgorICAgIDB4MS4xZDQ4NzMxNjhiOWFhNzM5MDk2MzYyZjYyODVjYjUxNnAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDQsIDB4MS4wcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDMzCisgICAgMHgxLjFkNDg3MzE2OGI5YWE5Mjc2NGZhYmZiZjMyMjYzNDYycDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwNCwgMHgxLjAwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzQKKyAgICAweDEuMWQ0ODczMTY4YjlhYTY4OTJkYjQ3YTM0OGEyMWIyYzdwMCwKKyAgICAweDEuMHA1LCAweDEuZmZmZmZmZmZmZmZmZnAtNgorICB9LAorICB7IC8vIEVudHJ5IDQzNQorICAgIDB4MS4xZDQ4NzMxNjhiOWFhNzgwNWI4MDI4OTkwZjA3YTk4YnAwLAorICAgIDB4MS4wcDUsIDB4MS4wcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDM2CisgICAgMHgxLjFkNDg3MzE2OGI5YWE5NmViNzE3ODU2MjE4ZDYxOTkwcDAsCisgICAgMHgxLjBwNSwgMHgxLjAwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzcKKyAgICAweDEuMWQ0ODczMTY4YjlhYTcxN2QxZWUwNTdhNTc2YzMwYzRwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXA1LCAweDEuZmZmZmZmZmZmZmZmZnAtNgorICB9LAorICB7IC8vIEVudHJ5IDQzOAorICAgIDB4MS4xZDQ4NzMxNjhiOWFhODBlZmZiOWIzZGVkYzU3MTg0MHAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDUsIDB4MS4wcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDM5CisgICAgMHgxLjFkNDg3MzE2OGI5YWE5ZmQ1YjUxMTBhN2U2MmY2OWI2cDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNSwgMHgxLjAwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDAKKyAgICAweDEuMTEzMDFkMDEyNWI1MDk5ZTkwZWE0M2Q2NTk5ZWUyYmJwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnA1LCAweDEuZmZmZmZmZmZmZmZmZnAtNworICB9LAorICB7IC8vIEVudHJ5IDQ0MQorICAgIDB4MS4xMTMwMWQwMTI1YjUwYTJjOTVlZTBlYjQ3YWViMWE3OHAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDUsIDB4MS4wcC02CisgIH0sCisgIHsgLy8gRW50cnkgNDQyCisgICAgMHgxLjExMzAxZDAxMjViNTBiNDg5ZmY1YTQ3MGJkODQ2NzcxcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwNSwgMHgxLjAwMDAwMDAwMDAwMDFwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDMKKyAgICAweDEuMTEzMDFkMDEyNWI1MDljMGI2ZWRlM2ZiMTAzZjkwMTdwMCwKKyAgICAweDEuMHA2LCAweDEuZmZmZmZmZmZmZmZmZnAtNworICB9LAorICB7IC8vIEVudHJ5IDQ0NAorICAgIDB4MS4xMTMwMWQwMTI1YjUwYTRlYmJmMWFlZDkzMThjZWFjNXAwLAorICAgIDB4MS4wcDYsIDB4MS4wcC02CisgIH0sCisgIHsgLy8gRW50cnkgNDQ1CisgICAgMHgxLjExMzAxZDAxMjViNTBiNmFjNWY5NDQ5NTc0Mjg3ZDlmcDAsCisgICAgMHgxLjBwNiwgMHgxLjAwMDAwMDAwMDAwMDFwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDYKKyAgICAweDEuMTEzMDFkMDEyNWI1MGEwNTAyZjUyNDQ0N2Q3ZGM0MGVwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXA2LCAweDEuZmZmZmZmZmZmZmZmZnAtNworICB9LAorICB7IC8vIEVudHJ5IDQ0NworICAgIDB4MS4xMTMwMWQwMTI1YjUwYTkzMDdmOGVmMjI5ZWNkNjQ5ZXAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDYsIDB4MS4wcC02CisgIH0sCisgIHsgLy8gRW50cnkgNDQ4CisgICAgMHgxLjExMzAxZDAxMjViNTBiYWYxMjAwODRkZWUxNmQ4MzNicDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNiwgMHgxLjAwMDAwMDAwMDAwMDFwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDkKKyAgICAweDEuZmZmZmZmZmZmZjI3NDZmNDA0MTc0NjI1NWM5OWU5MGJwMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAwLCAweDEuZmZmZmZmZmZmZmZmZXA5CisgIH0sCisgIHsgLy8gRW50cnkgNDUwCisgICAgMHgxLmZmZmZmZmZmZmY1M2EzN2EwMjBiYTkyNGIyNmNmYzU5cDEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwMCwgMHgxLmZmZmZmZmZmZmZmZmZwOQorICB9LAorICB7IC8vIEVudHJ5IDQ1MQorICAgIDB4MS5mZmZmZmZmZmZmODAwMDAwMDAwMDBmZmJmZmZmZmZmZXAxMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcDAsIDB4MS4wcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDUyCisgICAgMHgxLmZmZmZmZmZmZmZkOGI5MGJmYmU4ZTkzMjgyNjVkODUxcDEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwMCwgMHgxLjAwMDAwMDAwMDAwMDFwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTMKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAwLCAweDEuMDAwMDAwMDAwMDAwMnAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ1NAorICAgIDB4MS5mZmZmZmZmZmZmNjc0NmY0MDQxNzJmMGQzYjFhNmJmMnAxMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDAsIDB4MS5mZmZmZmZmZmZmZmZlcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTUKKyAgICAweDEuZmZmZmZmZmZmZjkzYTM3YTAyMGI5NzlhMjFhZDNkY2RwMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAwLCAweDEuZmZmZmZmZmZmZmZmZnA5CisgIH0sCisgIHsgLy8gRW50cnkgNDU2CisgICAgMHgxLmZmZmZmZmZmZmZjMDAwMDAwMDAwMDNmZWZmZmZmZmZmcDEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMCwgMHgxLjBwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTcKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAwLCAweDEuMDAwMDAwMDAwMDAwMXAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ1OAorICAgIEhVR0VfVkFMLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDAsIDB4MS4wMDAwMDAwMDAwMDAycDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDU5CisgICAgMHgxLmZmZmZmZmZmZmZhNzQ2ZjQwNDE3MWZmMzE5OWFlZWQ3cDEwMjMsCisgICAgMHgxLjBwMSwgMHgxLmZmZmZmZmZmZmZmZmVwOQorICB9LAorICB7IC8vIEVudHJ5IDQ2MAorICAgIDB4MS5mZmZmZmZmZmZmZDNhMzdhMDIwYjhlMGQ5MGVkN2YzZnAxMDIzLAorICAgIDB4MS4wcDEsIDB4MS5mZmZmZmZmZmZmZmZmcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjEKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMHAxLCAweDEuMHAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ2MgorICAgIEhVR0VfVkFMLAorICAgIDB4MS4wcDEsIDB4MS4wMDAwMDAwMDAwMDAxcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDYzCisgICAgSFVHRV9WQUwsCisgICAgMHgxLjBwMSwgMHgxLjAwMDAwMDAwMDAwMDJwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjQKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxLCAweDEuZmZmZmZmZmZmZmZmZXA5CisgIH0sCisgIHsgLy8gRW50cnkgNDY1CisgICAgSFVHRV9WQUwsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMSwgMHgxLmZmZmZmZmZmZmZmZmZwOQorICB9LAorICB7IC8vIEVudHJ5IDQ2NgorICAgIEhVR0VfVkFMLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDEsIDB4MS4wcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDY3CisgICAgSFVHRV9WQUwsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMSwgMHgxLjAwMDAwMDAwMDAwMDFwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjgKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxLCAweDEuMDAwMDAwMDAwMDAwMnAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ2OQorICAgIEhVR0VfVkFMLAorICAgIDB4MS4wMDAwMDAwMDAwMDAycDEsIDB4MS5mZmZmZmZmZmZmZmZlcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzAKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMnAxLCAweDEuZmZmZmZmZmZmZmZmZnA5CisgIH0sCisgIHsgLy8gRW50cnkgNDcxCisgICAgSFVHRV9WQUwsCisgICAgMHgxLjAwMDAwMDAwMDAwMDJwMSwgMHgxLjBwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzIKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMnAxLCAweDEuMDAwMDAwMDAwMDAwMXAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ3MworICAgIEhVR0VfVkFMLAorICAgIDB4MS4wMDAwMDAwMDAwMDAycDEsIDB4MS4wMDAwMDAwMDAwMDAycDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDc0CisgICAgMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcDAsIC0weDEuMGNjMDAwMDAwMDAwMnAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ3NQorICAgIDAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAwLCAtMHgxLjBjYzAwMDAwMDAwMDFwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzYKKyAgICAwLjAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwMCwgLTB4MS4wY2NwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzcKKyAgICAwLjAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwMCwgLTB4MS4wY2JmZmZmZmZmZmZmcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDc4CisgICAgMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcDAsIC0weDEuMGNiZmZmZmZmZmZmZXAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ3OQorICAgIDAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAwLCAtMHgxLjBjYzAwMDAwMDAwMDJwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODAKKyAgICAwLjAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMCwgLTB4MS4wY2MwMDAwMDAwMDAxcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDgxCisgICAgMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDAsIC0weDEuMGNjcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDgyCisgICAgMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDAsIC0weDEuMGNiZmZmZmZmZmZmZnAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ4MworICAgIDAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAwLCAtMHgxLjBjYmZmZmZmZmZmZmVwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODQKKyAgICAwLjAsCisgICAgMHgxLjBwMSwgLTB4MS4wY2MwMDAwMDAwMDAycDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDg1CisgICAgMC4wLAorICAgIDB4MS4wcDEsIC0weDEuMGNjMDAwMDAwMDAwMXAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ4NgorICAgIDAuMCwKKyAgICAweDEuMHAxLCAtMHgxLjBjY3AxMAorICB9LAorICB7IC8vIEVudHJ5IDQ4NworICAgIDAuMCwKKyAgICAweDEuMHAxLCAtMHgxLjBjYmZmZmZmZmZmZmZwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODgKKyAgICAwLjAsCisgICAgMHgxLjBwMSwgLTB4MS4wY2JmZmZmZmZmZmZlcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDg5CisgICAgMC4wLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDEsIC0weDEuMGNjMDAwMDAwMDAwMnAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ5MAorICAgIDAuMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxLCAtMHgxLjBjYzAwMDAwMDAwMDFwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTEKKyAgICAwLjAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMSwgLTB4MS4wY2NwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTIKKyAgICAwLjAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMSwgLTB4MS4wY2JmZmZmZmZmZmZmcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDkzCisgICAgMC4wLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDEsIC0weDEuMGNiZmZmZmZmZmZmZXAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ5NAorICAgIDAuMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMnAxLCAtMHgxLjBjYzAwMDAwMDAwMDJwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTUKKyAgICAwLjAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDJwMSwgLTB4MS4wY2MwMDAwMDAwMDAxcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDk2CisgICAgMC4wLAorICAgIDB4MS4wMDAwMDAwMDAwMDAycDEsIC0weDEuMGNjcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDk3CisgICAgMC4wLAorICAgIDB4MS4wMDAwMDAwMDAwMDAycDEsIC0weDEuMGNiZmZmZmZmZmZmZnAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ5OAorICAgIDAuMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMnAxLCAtMHgxLjBjYmZmZmZmZmZmZmVwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTkKKyAgICAweDEuYTgyZTE0NjkwMjUyZTVlYTJjZmEzMGIyNWU5NDdjZWRwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3MHAtMiwgMHgxLmMzMGMzMGMzMGMyZmVwOAorICB9LAorICB7IC8vIEVudHJ5IDUwMAorICAgIDB4MS5hODJlMTQ2OTAyM2U4ZWE1Njc4ODNmY2QyNzQyZTRiN3AtNTAwLAorICAgIDB4MS5kYjZkYjZkYjZkYjcwcC0yLCAweDEuYzMwYzMwYzMwYzJmZnA4CisgIH0sCisgIHsgLy8gRW50cnkgNTAxCisgICAgMHgxLmE4MmUxNDY5MDIyYTM3NjBhMjE2NGZlMWE0Y2QzYWEycC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzBwLTIsIDB4MS5jMzBjMzBjMzBjM3A4CisgIH0sCisgIHsgLy8gRW50cnkgNTAyCisgICAgMHgxLmE4MmUxNDY5MDIxNWUwMWJkY2E0NjBlZmQ3MzM3ZWFlcC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzBwLTIsIDB4MS5jMzBjMzBjMzBjMzAxcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDMKKyAgICAweDEuYTgyZTE0NjkwMjAxODhkNzE3MzI3MmY3YmU3NWIwZGNwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3MHAtMiwgMHgxLmMzMGMzMGMzMGMzMDJwOAorICB9LAorICB7IC8vIEVudHJ5IDUwNAorICAgIDB4MS5hODJlMTQ2OTAyNmMwY2JmZTYxMzViMzhlNzZkM2E0N3AtNTAwLAorICAgIDB4MS5kYjZkYjZkYjZkYjcxcC0yLCAweDEuYzMwYzMwYzMwYzJmZXA4CisgIH0sCisgIHsgLy8gRW50cnkgNTA1CisgICAgMHgxLmE4MmUxNDY5MDI1N2I1N2IyMGExNjkxZmQwZDg1M2Q2cC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzFwLTIsIDB4MS5jMzBjMzBjMzBjMmZmcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDYKKyAgICAweDEuYTgyZTE0NjkwMjQzNWUzNjViMmY3ODAwNmYxZjViODdwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3MXAtMiwgMHgxLmMzMGMzMGMzMGMzcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDcKKyAgICAweDEuYTgyZTE0NjkwMjJmMDZmMTk1YmQ4N2RhYzI0MjUxNTlwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3MXAtMiwgMHgxLmMzMGMzMGMzMGMzMDFwOAorICB9LAorICB7IC8vIEVudHJ5IDUwOAorICAgIDB4MS5hODJlMTQ2OTAyMWFhZmFjZDA0Yjk4YWVjYTQxMzU0ZHAtNTAwLAorICAgIDB4MS5kYjZkYjZkYjZkYjcxcC0yLCAweDEuYzMwYzMwYzMwYzMwMnA4CisgIH0sCisgIHsgLy8gRW50cnkgNTA5CisgICAgMHgxLmE4MmUxNDY5MDI4NTMzOTU5ZjJjODczYzYxY2FmYjE4cC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzJwLTIsIDB4MS5jMzBjMzBjMzBjMmZlcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTAKKyAgICAweDEuYTgyZTE0NjkwMjcwZGM1MGQ5YmE5M2VmNmJmMmM2NmRwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3MnAtMiwgMHgxLmMzMGMzMGMzMGMyZmZwOAorICB9LAorICB7IC8vIEVudHJ5IDUxMQorICAgIDB4MS5hODJlMTQ2OTAyNWM4NTBjMTQ0OGExOWMyYWY2N2ZlNHAtNTAwLAorICAgIDB4MS5kYjZkYjZkYjZkYjcycC0yLCAweDEuYzMwYzMwYzMwYzNwOAorICB9LAorICB7IC8vIEVudHJ5IDUxMgorICAgIDB4MS5hODJlMTQ2OTAyNDgyZGM3NGVkNmIwNDI5ZWQ2Mjc3Y3AtNTAwLAorICAgIDB4MS5kYjZkYjZkYjZkYjcycC0yLCAweDEuYzMwYzMwYzMwYzMwMXA4CisgIH0sCisgIHsgLy8gRW50cnkgNTEzCisgICAgMHgxLmE4MmUxNDY5MDIzM2Q2ODI4OTY0YmZlMmM3OTFiZDM1cC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzJwLTIsIDB4MS5jMzBjMzBjMzBjMzAycDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTQKKyAgICAweDEuYTgyZTE0NjkwMjllNWE2YjU4NDViNGJjY2RhZGJmNjJwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3M3AtMiwgMHgxLmMzMGMzMGMzMGMyZmVwOAorICB9LAorICB7IC8vIEVudHJ5IDUxNQorICAgIDB4MS5hODJlMTQ2OTAyOGEwMzI2OTJkM2MwM2JmODkyM2M3Y3AtNTAwLAorICAgIDB4MS5kYjZkYjZkYjZkYjczcC0yLCAweDEuYzMwYzMwYzMwYzJmZnA4CisgIH0sCisgIHsgLy8gRW50cnkgNTE2CisgICAgMHgxLmE4MmUxNDY5MDI3NWFiZTFjZDYxY2NiNGQ4NTJhN2I5cC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzNwLTIsIDB4MS5jMzBjMzBjMzBjM3A4CisgIH0sCisgIHsgLy8gRW50cnkgNTE3CisgICAgMHgxLmE4MmUxNDY5MDI2MTU0OWQwN2VmZGEyNzZjZWYwMTE2cC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzNwLTIsIDB4MS5jMzBjMzBjMzBjMzAxcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTgKKyAgICAweDEuYTgyZTE0NjkwMjRjZmQ1ODQyN2RlODkzYjY2NzQ4OTVwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3M3AtMiwgMHgxLmMzMGMzMGMzMGMzMDJwOAorICB9LAorICB7IC8vIEVudHJ5IDUxOQorICAgIDB4MS5hODJlMTQ2OTAyYjc4MTQxMTE1ZWUzYmEyYjE1ODcyM3AtNTAwLAorICAgIDB4MS5kYjZkYjZkYjZkYjc0cC0yLCAweDEuYzMwYzMwYzMwYzJmZXA4CisgIH0sCisgIHsgLy8gRW50cnkgNTIwCisgICAgMHgxLmE4MmUxNDY5MDJhMzI5ZmM0YmVjZWUwNTc2YjZiNjAzcC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzRwLTIsIDB4MS5jMzBjMzBjMzBjMmZmcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjEKKyAgICAweDEuYTgyZTE0NjkwMjhlZDJiNzg2N2FmOTRhNzczM2QzMDVwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3NHAtMiwgMHgxLmMzMGMzMGMzMGMzcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjIKKyAgICAweDEuYTgyZTE0NjkwMjdhN2I3MmMxMDkwNTg5MmM4Y2RlMjlwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3NHAtMiwgMHgxLmMzMGMzMGMzMGMzMDFwOAorICB9LAorICB7IC8vIEVudHJ5IDUyMworICAgIDB4MS5hODJlMTQ2OTAyNjYyNDJkZmI5NzEyYzE5NmMxZDc2ZHAtNTAwLAorICAgIDB4MS5kYjZkYjZkYjZkYjc0cC0yLCAweDEuYzMwYzMwYzMwYzMwMnA4CisgIH0sCisgIHsgLy8gRW50cnkgNTI0CisgICAgLTB4MS5mZmZmZmZmZmZmZmZlMDAwMDAwMDAwMDAwMWZmZmZmZnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMCwgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjUKKyAgICAtMHgxLnAwLAorICAgIC0weDEuMHAwLCAtMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDUyNgorICAgIC0weDEuMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDA0MHAwLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMSwgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjcKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMHAxLCAweDEuMHAxMAorICB9LAorICB7IC8vIEVudHJ5IDUyOAorICAgIEhVR0VfVkFMLAorICAgIDB4MS4wcDIsIDB4MS4wcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjkKKyAgICAweDEuZmZmZmZmZmZmZmVjNWM4NWZkZjQ3NDNmZDYxMmIyOGFwLTEwMjUsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTIsIDB4MS5mZmZmZmZmZmZmZmZmcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzAKKyAgICAweDEuZmZmZmZmZmZmZmMwMDAwMDAwMDAwM2ZlZmZmZmZmZmZwLTEwMjUsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTIsIDB4MS4wcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNTMxCisgICAgMHgxLmZmZmZmZmZmZmY2NzQ2ZjQwNDE3MmYwNTNiMWE2YmYycC0xMDI1LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0yLCAweDEuMDAwMDAwMDAwMDAwMXAxMAorICB9LAorICB7IC8vIEVudHJ5IDUzMgorICAgIDB4MS4wMDAwMDAwMDAwMTYyZTQyZmVmYTNhZTUzMzY5Mzg4Y3AtMTAyNCwKKyAgICAweDEuMHAtMSwgMHgxLmZmZmZmZmZmZmZmZmZwOQorICB9LAorICB7IC8vIEVudHJ5IDUzMworICAgIDB4MS5wLTEwMjQsCisgICAgMHgxLjBwLTEsIDB4MS4wcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNTM0CisgICAgMHgxLmZmZmZmZmZmZmZhNzQ2ZjQwNDE3MWZmMzE5OWFlZWQ3cC0xMDI1LAorICAgIDB4MS4wcC0xLCAweDEuMDAwMDAwMDAwMDAwMXAxMAorICB9LAorICB7IC8vIEVudHJ5IDUzNQorICAgIDB4MS4wMDAwMDAwMDAwNTYyZTQyZmVmYTQ4NmNjNDI4ZjcxY3AtMTAyNCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMSwgMHgxLmZmZmZmZmZmZmZmZmZwOQorICB9LAorICB7IC8vIEVudHJ5IDUzNgorICAgIDB4MS4wMDAwMDAwMDAwNDAwMDAwMDAwMDA3ZmVwLTEwMjQsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEsIDB4MS4wcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNTM3CisgICAgMHgxLjAwMDAwMDAwMDAxM2EzN2EwMjBiOGNlNDZiNGRmYTRlcC0xMDI0LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xLCAweDEuMDAwMDAwMDAwMDAwMXAxMAorICB9LAorICB7IC8vIEVudHJ5IDUzOAorICAgIDB4MS4wMDAwMDAwMDAwNzQ1MTlhNTYyMzUzM2RmOGRjZDM1M3AtMTA3NCwKKyAgICAweDEuMHAtMTA3NCwgMHgxLmZmZmZmZmZmZmZmZmJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzkKKyAgICAweDEuMDAwMDAwMDAwMDVkMGUxNTExYjVkN2Y3MmM2MTM2OGFwLTEwNzQsCisgICAgMHgxLjBwLTEwNzQsIDB4MS5mZmZmZmZmZmZmZmZjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTQwCisgICAgMHgxLjAwMDAwMDAwMDA0NWNhOGZjZDQ4NWVjZDkzYTZlYzlkcC0xMDc0LAorICAgIDB4MS4wcC0xMDc0LCAweDEuZmZmZmZmZmZmZmZmZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU0MQorICAgIDB4MS4wMDAwMDAwMDAwMmU4NzBhODhkYWU3YzEyZWFkZjU4Y3AtMTA3NCwKKyAgICAweDEuMHAtMTA3NCwgMHgxLmZmZmZmZmZmZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDIKKyAgICAweDEuMDAwMDAwMDAwMDE3NDM4NTQ0NmQ3MmQxZmQ3NjUxNThwLTEwNzQsCisgICAgMHgxLjBwLTEwNzQsIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTQzCisgICAgMHgxLnAtMTA3NCwKKyAgICAweDEuMHAtMTA3NCwgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDU0NAorICAgIDAuMCwKKyAgICAweDEuMHAtMTA3NCwgMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDU0NQorICAgIDAuMCwKKyAgICAweDEuMHAtMTA3NCwgMHgxLjAwMDAwMDAwMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDU0NgorICAgIDAuMCwKKyAgICAweDEuMHAtMTA3NCwgMHgxLjAwMDAwMDAwMDAwMDNwMAorICB9LAorICB7IC8vIEVudHJ5IDU0NworICAgIDAuMCwKKyAgICAweDEuMHAtMTA3NCwgMHgxLjAwMDAwMDAwMDAwMDRwMAorICB9LAorICB7IC8vIEVudHJ5IDU0OAorICAgIDAuMCwKKyAgICAweDEuMHAtMTA3NCwgMHgxLjAwMDAwMDAwMDAwMDVwMAorICB9LAorICB7IC8vIEVudHJ5IDU0OQorICAgIDB4MS4wMDAwMDAwMDAwNzQzNWUwODI2NDlhNjhmNjRmZTMwNnAtMTA3MywKKyAgICAweDEuMHAtMTA3MywgMHgxLmZmZmZmZmZmZmZmZmJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTAKKyAgICAweDEuMDAwMDAwMDAwMDVjZjdlNmNlYjZkZGI1MmUxYjA5OWVwLTEwNzMsCisgICAgMHgxLjBwLTEwNzMsIDB4MS5mZmZmZmZmZmZmZmZjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTUxCisgICAgMHgxLjAwMDAwMDAwMDA0NWI5ZWQxYjA5MjMxZDk3YzU2YzlkcC0xMDczLAorICAgIDB4MS4wcC0xMDczLCAweDEuZmZmZmZmZmZmZmZmZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU1MgorICAgIDB4MS4wMDAwMDAwMDAwMmU3YmYzNjc1YjZhYTIzMzRmMGMwMnAtMTA3MywKKyAgICAweDEuMHAtMTA3MywgMHgxLmZmZmZmZmZmZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTMKKyAgICAweDEuMDAwMDAwMDAwMDE3M2RmOWIzYWRiNDQzMDBiN2U3Y2VwLTEwNzMsCisgICAgMHgxLjBwLTEwNzMsIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTU0CisgICAgMHgxLnAtMTA3MywKKyAgICAweDEuMHAtMTA3MywgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDU1NQorICAgIDB4MS5mZmZmZmZmZmZmYTMwODE5MzE0OTNiOWQyODViY2IyYnAtMTA3NCwKKyAgICAweDEuMHAtMTA3MywgMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDU1NgorICAgIDB4MS5mZmZmZmZmZmZmNDYxMDMyNjI5Mjg4MWJkZmIxNzk4M3AtMTA3NCwKKyAgICAweDEuMHAtMTA3MywgMHgxLjAwMDAwMDAwMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDU1NworICAgIDB4MS5mZmZmZmZmZmZlZTkxODRiOTNkYmU1N2MyNjAxMGIwNHAtMTA3NCwKKyAgICAweDEuMHAtMTA3MywgMHgxLjAwMDAwMDAwMDAwMDNwMAorICB9LAorICB7IC8vIEVudHJ5IDU1OAorICAgIDB4MS5mZmZmZmZmZmZlOGMyMDY0YzUyNTUzYmRmYjRhN2ZhZHAtMTA3NCwKKyAgICAweDEuMHAtMTA3MywgMHgxLjAwMDAwMDAwMDAwMDRwMAorICB9LAorICB7IC8vIEVudHJ5IDU1OQorICAgIDB4MS5mZmZmZmZmZmZlMmYyODdkZjY2ZWQyZTE1ZjhkZDc3YXAtMTA3NCwKKyAgICAweDEuMHAtMTA3MywgMHgxLjAwMDAwMDAwMDAwMDVwMAorICB9LAorICB7IC8vIEVudHJ5IDU2MAorICAgIDB4MS44MDAwMDAwMDAwYWUzODdjZDFlOGYzZjM5ZmUxNTdmOXAtMTA3MywKKyAgICAweDEuOHAtMTA3MywgMHgxLmZmZmZmZmZmZmZmZmJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjEKKyAgICAweDEuODAwMDAwMDAwMDhiNjA2M2RiMjBiY2Q2N2I0ZjViYTVwLTEwNzMsCisgICAgMHgxLjhwLTEwNzMsIDB4MS5mZmZmZmZmZmZmZmZjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTYyCisgICAgMHgxLjgwMDAwMDAwMDA2ODg4NGFlNDU4ODhlMmJmNmZkNGFmcC0xMDczLAorICAgIDB4MS44cC0xMDczLCAweDEuZmZmZmZmZmZmZmZmZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU2MworICAgIDB4MS44MDAwMDAwMDAwNDViMDMxZWQ5MDU4MTg2YzQyYzMxN3AtMTA3MywKKyAgICAweDEuOHAtMTA3MywgMHgxLmZmZmZmZmZmZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjQKKyAgICAweDEuODAwMDAwMDAwMDIyZDgxOGY2YzgyYTc3ODFjODI2ZGNwLTEwNzMsCisgICAgMHgxLjhwLTEwNzMsIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTY1CisgICAgMHgxLjgwcC0xMDczLAorICAgIDB4MS44cC0xMDczLCAweDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNTY2CisgICAgMHgxLjdmZmZmZmZmZmZiYTRmY2UxMjZmYjQ4ZDM2ODcxMjVkcC0xMDczLAorICAgIDB4MS44cC0xMDczLCAweDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTY3CisgICAgMHgxLjdmZmZmZmZmZmY3NDlmOWMyNGRmNzVjMDBmZDdmYTJlcC0xMDczLAorICAgIDB4MS44cC0xMDczLCAweDEuMDAwMDAwMDAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTY4CisgICAgMHgxLjdmZmZmZmZmZmYyZWVmNmEzNzRmNDM5ODhiZjJiNzZlcC0xMDczLAorICAgIDB4MS44cC0xMDczLCAweDEuMDAwMDAwMDAwMDAwM3AwCisgIH0sCisgIHsgLy8gRW50cnkgNTY5CisgICAgMHgxLjdmZmZmZmZmZmVlOTNmMzg0OWJmMWUxNmFhZDc0YTFkcC0xMDczLAorICAgIDB4MS44cC0xMDczLCAweDEuMDAwMDAwMDAwMDAwNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNTcwCisgICAgMHgxLjdmZmZmZmZmZmVhMzhmMDY1YzJmMDUzYTZjODViMjM3cC0xMDczLAorICAgIDB4MS44cC0xMDczLCAweDEuMDAwMDAwMDAwMDAwNXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTcxCisgICAgMHgxLjAwMDAwMGEwY2Y2NWViMTgxN2E3MDk1ZDlhMDQ0M2E3cDAsCisgICAgMHgxLjBwLTI5LCAtMHgxLjBwLTI5CisgIH0sCisgIHsgLy8gRW50cnkgNTcyCisgICAgMHgxLmZmZmZmZjVmMzA5YTYwYWFkNWMyMzA5ZjgxZjkwZGVmcC0xLAorICAgIDB4MS4wcC0yOSwgMHgxLjBwLTMwCisgIH0sCisgIHsgLy8gRW50cnkgNTczCisgICAgMHgxLmZmZmZmZDllMDdjZjA3NzY3YTU1YWZiZTlhY2FlOTNlcC0xLAorICAgIDB4MS4wcDU1LCAtMHgxLjBwLTI5CisgIH0sCisgIHsgLy8gRW50cnkgNTc0CisgICAgMHgxLjAwMDAwMDk4N2UwY2M2NjM0NGQ4OWI0OTRlMWY0M2IzcDAsCisgICAgMHgxLjBwNTUsIDB4MS4wcC0zMAorICB9LAorICB7IC8vIEVudHJ5IDU3NQorICAgIDB4MS5mZmZmZmQ2Njk0MjdjZjE1OTUxNTg3Mzg4N2MxN2NmMnAtMSwKKyAgICAweDEuMHA2MCwgLTB4MS4wcC0yOQorICB9LAorICB7IC8vIEVudHJ5IDU3NgorICAgIDB4MS4wMDAwMDBhNjVhZjZhZTYxYmU4OGVhMjU1ODc5MGNkN3AwLAorICAgIDB4MS4wcDYwLCAweDEuMHAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzcKKyAgICAweDEuZmZmZmZmZmZmZTAwMDAwMDAwMDBmZmY3ZmZmZmZmYWFwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEsIDB4MS4wcDEzCisgIH0sCisgIHsgLy8gRW50cnkgNTc4CisgICAgMHgxLmZmZmZmZmZmZjAwMDAwMDAwMDNmZmZiZmZmZmY1NTU3cC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xLCAweDEuMHAxNgorICB9LAorICB7IC8vIEVudHJ5IDU3OQorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAweDEuMHAxMworICB9LAorICB7IC8vIEVudHJ5IDU4MAorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAweDEuMHAxNgorICB9LAorICB7IC8vIEVudHJ5IDU4MQorICAgIDB4MS4wMDAwMDAwMDAyMDAwMDAwMDAwMWZmZjAwMDAwMDE1NXAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAsIDB4MS4wcDEzCisgIH0sCisgIHsgLy8gRW50cnkgNTgyCisgICAgMHgxLjAwMDAwMDAwMTAwMDAwMDAwMDdmZmY4MDAwMDJhYWEycDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMCwgMHgxLjBwMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODMKKyAgICAweDEuZmZmZmZmYzAwMDAwMDQwMDAwMDFkNTU1NTUxNmFhYWFwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDAsIC0weDEuMHAyNQorICB9LAorICB7IC8vIEVudHJ5IDU4NAorICAgIDB4MS5mZmZmZmUwMDAwMDBmZmZmZmZiYWFhYWFiMDAwMDAwM3AtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMCwgLTB4MS4wcDI4CisgIH0sCisgIHsgLy8gRW50cnkgNTg1CisgICAgMHgxLnAwLAorICAgIC0weDEuMHAwLCAtMHgxLjBwMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODYKKyAgICAweDEucDAsCisgICAgLTB4MS4wcDAsIC0weDEuMHAyOAorICB9LAorICB7IC8vIEVudHJ5IDU4NworICAgIDB4MS4wMDAwMDAxMDAwMDAwMDgwMDAwMDQyYWFhYWFlYjU1NXAwLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMSwgLTB4MS4wcDI1CisgIH0sCisgIHsgLy8gRW50cnkgNTg4CisgICAgMHgxLjAwMDAwMDgwMDAwMDIwMDAwMDA3NTU1NTU3cDAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0xLCAtMHgxLjBwMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODkKKyAgICAweDEuMzY4YjJmYzZmOTYwYTRjMWQ5YWE2MjhmZTNmMTNmZmZwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDAsIC0weDEuMHA1MQorICB9LAorICB7IC8vIEVudHJ5IDU5MAorICAgIDB4MS41ZmMyMTA0MTAyN2IyM2IwNTE1NmI4YWVhOGI1ZTkyNXAtMTIsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDAsIC0weDEuMHA1NQorICB9LAorICB7IC8vIEVudHJ5IDU5MQorICAgIDB4MS5wMCwKKyAgICAtMHgxLjBwMCwgLTB4MS4wcDUxCisgIH0sCisgIHsgLy8gRW50cnkgNTkyCisgICAgMHgxLnAwLAorICAgIC0weDEuMHAwLCAtMHgxLjBwNTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTMKKyAgICAweDEuNDhiNWUzYzNlODE4NjdiZjMxYTc3YTgzYzMyYzQ3NDRwMCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTEsIC0weDEuMHA1MQorICB9LAorICB7IC8vIEVudHJ5IDU5NAorICAgIDB4MS5iNGM5MDJlMjczYTVhMWM1NjcwMWU3MTVlZGFmMjExNXA1LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMSwgLTB4MS4wcDU1CisgIH0sCisgIHsgLy8gRW50cnkgNTk1CisgICAgMHgxLjVmYzIxMDQxMDI3YjIzYjA1MTU2YjhhZWE4YjVlOTI1cC0xMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMCwgLTB4MS4wcDU1CisgIH0sCisgIHsgLy8gRW50cnkgNTk2CisgICAgMHgxLjk2OWQ0NzMyMWU0ZmU3ZjliYjhjNDNhNWU0ODZiOWFlcC05MywKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMCwgLTB4MS4wcDU4CisgIH0sCisgIHsgLy8gRW50cnkgNTk3CisgICAgMHgxLnAwLAorICAgIC0weDEuMHAwLCAtMHgxLjBwNTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTgKKyAgICAweDEucDAsCisgICAgLTB4MS4wcDAsIC0weDEuMHA1OAorICB9LAorICB7IC8vIEVudHJ5IDU5OQorICAgIDB4MS5iNGM5MDJlMjczYTVhMWM1NjcwMWU3MTVlZGFmMjExNXA1LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMSwgLTB4MS4wcDU1CisgIH0sCisgIHsgLy8gRW50cnkgNjAwCisgICAgMHgxLjFmNDNmY2M0YjY2MzU3N2E0NWVhOWI0OWNjZTllZTczcDQ2LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMSwgLTB4MS4wcDU4CisgIH0sCisgIHsgLy8gRW50cnkgNjAxCisgICAgMHgxLjQ0MTA5ZWRiMjBhNzU2YWQ3NjdkMjUxNWM5NGEwMDNhcC03MzksCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDAsIC0weDEuMHA2MQorICB9LAorICB7IC8vIEVudHJ5IDYwMgorICAgIDAuMCwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMCwgLTB4MS4wcDY0CisgIH0sCisgIHsgLy8gRW50cnkgNjAzCisgICAgMHgxLnAwLAorICAgIC0weDEuMHAwLCAtMHgxLjBwNjEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDQKKyAgICAweDEucDAsCisgICAgLTB4MS4wcDAsIC0weDEuMHA2NAorICB9LAorICB7IC8vIEVudHJ5IDYwNQorICAgIDB4MS40MWM3YTg4MTRiZjBhODAxYzUzNTNmMzAyYTQwY2M3ZnAzNjksCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0xLCAtMHgxLjBwNjEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDYKKyAgICBIVUdFX1ZBTCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTEsIC0weDEuMHA2NAorICB9LAorICB7IC8vIEVudHJ5IDYwNworICAgIDB4MS4wMDAwMDAxMDAwMDAwMDgwMDAwMDQyYWFhYWFlYjU1NXAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xLCAtMHgxLjBwMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDgKKyAgICAweDEuMDAwMDAwODAwMDAwMjAwMDAwMDc1NTU1NTdwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMSwgLTB4MS4wcDI4CisgIH0sCisgIHsgLy8gRW50cnkgNjA5CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIC0weDEuMHAyNQorICB9LAorICB7IC8vIEVudHJ5IDYxMAorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAtMHgxLjBwMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTEKKyAgICAweDEuZmZmZmZmYzAwMDAwMDQwMDAwMDFkNTU1NTUxNmFhYWFwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMCwgLTB4MS4wcDI1CisgIH0sCisgIHsgLy8gRW50cnkgNjEyCisgICAgMHgxLmZmZmZmZTAwMDAwMGZmZmZmZmJhYWFhYWIwMDAwMDAzcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAsIC0weDEuMHAyOAorICB9LAorICB7IC8vIEVudHJ5IDYxMworICAgIDB4MS40OGI1ZTNjM2U4MTg2N2JmMzFhNzdhODNjMzJjNDc0NHAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xLCAtMHgxLjBwNTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTQKKyAgICAweDEuYjRjOTAyZTI3M2E1YTFjNTY3MDFlNzE1ZWRhZjIxMTVwNSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMSwgLTB4MS4wcDU1CisgIH0sCisgIHsgLy8gRW50cnkgNjE1CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIC0weDEuMHA1MQorICB9LAorICB7IC8vIEVudHJ5IDYxNgorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAtMHgxLjBwNTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTcKKyAgICAweDEuMzY4YjJmYzZmOTYwYTRjMWQ5YWE2MjhmZTNmMTNmZmZwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMCwgLTB4MS4wcDUxCisgIH0sCisgIHsgLy8gRW50cnkgNjE4CisgICAgMHgxLjVmYzIxMDQxMDI3YjIzYjA1MTU2YjhhZWE4YjVlOTI1cC0xMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAwLCAtMHgxLjBwNTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTkKKyAgICAweDEuYjRjOTAyZTI3M2E1YTFjNTY3MDFlNzE1ZWRhZjIxMTVwNSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMSwgLTB4MS4wcDU1CisgIH0sCisgIHsgLy8gRW50cnkgNjIwCisgICAgMHgxLjFmNDNmY2M0YjY2MzU3N2E0NWVhOWI0OWNjZTllZTczcDQ2LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xLCAtMHgxLjBwNTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjEKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgLTB4MS4wcDU1CisgIH0sCisgIHsgLy8gRW50cnkgNjIyCisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIC0weDEuMHA1OAorICB9LAorICB7IC8vIEVudHJ5IDYyMworICAgIDB4MS41ZmMyMTA0MTAyN2IyM2IwNTE1NmI4YWVhOGI1ZTkyNXAtMTIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMCwgLTB4MS4wcDU1CisgIH0sCisgIHsgLy8gRW50cnkgNjI0CisgICAgMHgxLjk2OWQ0NzMyMWU0ZmU3ZjliYjhjNDNhNWU0ODZiOWFlcC05MywKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAwLCAtMHgxLjBwNTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjUKKyAgICAweDEuNDFjN2E4ODE0YmYwYTgwMWM1MzUzZjMwMmE0MGNjN2ZwMzY5LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xLCAtMHgxLjBwNjEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjYKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMSwgLTB4MS4wcDY0CisgIH0sCisgIHsgLy8gRW50cnkgNjI3CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIC0weDEuMHA2MQorICB9LAorICB7IC8vIEVudHJ5IDYyOAorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAtMHgxLjBwNjQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjkKKyAgICAweDEuNDQxMDllZGIyMGE3NTZhZDc2N2QyNTE1Yzk0YTAwM2FwLTczOSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAwLCAtMHgxLjBwNjEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzAKKyAgICAwLjAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMCwgLTB4MS4wcDY0CisgIH0sCisgIHsgLy8gRW50cnkgNjMxCisgICAgSFVHRV9WQUwsCisgICAgLTB4MS4wcDE1LCAweDEuMHA2MworICB9LAorICB7IC8vIEVudHJ5IDYzMgorICAgIEhVR0VfVkFMLAorICAgIDAuMCwgLTB4MS44cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzMKKyAgICAtSFVHRV9WQUwsCisgICAgLTAuMCwgLTB4MS44cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzQKKyAgICBIVUdFX1ZBTCwKKyAgICAwLjAsIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjM1CisgICAgLUhVR0VfVkFMLAorICAgIC0wLjAsIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjM2CisgICAgSFVHRV9WQUwsCisgICAgMC4wLCAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDYzNworICAgIEhVR0VfVkFMLAorICAgIDAuMCwgLTB4MS44cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzgKKyAgICBIVUdFX1ZBTCwKKyAgICAwLjAsIC0weDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjM5CisgICAgSFVHRV9WQUwsCisgICAgMC4wLCAtMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDY0MAorICAgIEhVR0VfVkFMLAorICAgIDAuMCwgLTB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjQxCisgICAgSFVHRV9WQUwsCisgICAgMC4wLCAtMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDIKKyAgICBIVUdFX1ZBTCwKKyAgICAwLjAsIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDY0MworICAgIEhVR0VfVkFMLAorICAgIC0wLjAsIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNjQ0CisgICAgSFVHRV9WQUwsCisgICAgLTAuMCwgLTB4MS44cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDUKKyAgICBIVUdFX1ZBTCwKKyAgICAtMC4wLCAtMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDY0NgorICAgIEhVR0VfVkFMLAorICAgIC0wLjAsIC0weDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ3CisgICAgSFVHRV9WQUwsCisgICAgLTAuMCwgLTB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjQ4CisgICAgSFVHRV9WQUwsCisgICAgLTAuMCwgLTB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNjQ5CisgICAgSFVHRV9WQUwsCisgICAgLTAuMCwgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNjUwCisgICAgSFVHRV9WQUwsCisgICAgMC4wLCAtSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTEKKyAgICBIVUdFX1ZBTCwKKyAgICAtMC4wLCAtSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTIKKyAgICAwLjAsCisgICAgMC4wLCAweDEuOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjUzCisgICAgLTAuMCwKKyAgICAtMC4wLCAweDEuOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjU0CisgICAgMC4wLAorICAgIDAuMCwgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDY1NQorICAgIC0wLjAsCisgICAgLTAuMCwgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDY1NgorICAgIDAuMCwKKyAgICAwLjAsIEhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNjU3CisgICAgMC4wLAorICAgIDAuMCwgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDY1OAorICAgIDAuMCwKKyAgICAwLjAsIDB4MS44cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTkKKyAgICAwLjAsCisgICAgMC4wLCAweDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjYwCisgICAgMC4wLAorICAgIDAuMCwgMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDY2MQorICAgIDAuMCwKKyAgICAwLjAsIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjYyCisgICAgMC4wLAorICAgIDAuMCwgMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjMKKyAgICAwLjAsCisgICAgMC4wLCAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDY2NAorICAgIDAuMCwKKyAgICAtMC4wLCBIVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDY2NQorICAgIDAuMCwKKyAgICAtMC4wLCAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNjY2CisgICAgMC4wLAorICAgIC0wLjAsIDB4MS44cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjcKKyAgICAwLjAsCisgICAgLTAuMCwgMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDY2OAorICAgIDAuMCwKKyAgICAtMC4wLCAweDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjY5CisgICAgMC4wLAorICAgIC0wLjAsIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjcwCisgICAgMC4wLAorICAgIC0wLjAsIDB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNjcxCisgICAgMC4wLAorICAgIC0wLjAsIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNjcyCisgICAgMHgxLnAwLAorICAgIC0weDEuMHAwLCBIVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDY3MworICAgIDB4MS5wMCwKKyAgICAtMHgxLjBwMCwgLUhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNjc0CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIEhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNjc1CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIC1IVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDY3NgorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNjc3CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNjc4CisgICAgMHgxLnAwLAorICAgIC0weDEuMHAwLCAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNjc5CisgICAgMHgxLnAwLAorICAgIC0weDEuMHAwLCAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDY4MAorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY4MQorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAtMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODIKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODMKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgLTB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNjg0CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIDB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNjg1CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIC0weDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDY4NgorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDY4NworICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODgKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNjg5CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIC0wLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTAKKyAgICAweDEucDAsCisgICAgSFVHRV9WQUwsIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDY5MQorICAgIDB4MS5wMCwKKyAgICBIVUdFX1ZBTCwgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDY5MgorICAgIDB4MS5wMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzLCAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTMKKyAgICAweDEucDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMywgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDY5NAorICAgIDB4MS5wMCwKKyAgICAweDEuMHAtMTAyMiwgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNjk1CisgICAgMHgxLnAwLAorICAgIDB4MS4wcC0xMDIyLCAtMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNjk2CisgICAgMHgxLnAwLAorICAgIDB4MS4wcC0xMDc0LCAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTcKKyAgICAweDEucDAsCisgICAgMHgxLjBwLTEwNzQsIC0wLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTgKKyAgICAweDEucDAsCisgICAgMC4wLCAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTkKKyAgICAweDEucDAsCisgICAgMC4wLCAtMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNzAwCisgICAgMHgxLnAwLAorICAgIC0wLjAsIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDcwMQorICAgIDB4MS5wMCwKKyAgICAtMC4wLCAtMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNzAyCisgICAgMHgxLnAwLAorICAgIC0weDEuMHAtMTA3NCwgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNzAzCisgICAgMHgxLnAwLAorICAgIC0weDEuMHAtMTA3NCwgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDcwNAorICAgIDB4MS5wMCwKKyAgICAtMHgxLjBwLTEwMjIsIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDcwNQorICAgIDB4MS5wMCwKKyAgICAtMHgxLjBwLTEwMjIsIC0wLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDYKKyAgICAweDEucDAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMsIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDcwNworICAgIDB4MS5wMCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMywgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDcwOAorICAgIDB4MS5wMCwKKyAgICAtSFVHRV9WQUwsIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDcwOQorICAgIDB4MS5wMCwKKyAgICAtSFVHRV9WQUwsIC0wLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTAKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMHAtMTAyMiwgLUhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzExCisgICAgSFVHRV9WQUwsCisgICAgMHgxLjBwLTEwNzQsIC1IVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDcxMgorICAgIEhVR0VfVkFMLAorICAgIC0weDEuMHAtMTA3NCwgLUhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzEzCisgICAgSFVHRV9WQUwsCisgICAgLTB4MS4wcC0xMDIyLCAtSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTQKKyAgICAwLjAsCisgICAgSFVHRV9WQUwsIC1IVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDcxNQorICAgIDAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzLCAtSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTYKKyAgICAwLjAsCisgICAgMHgxLjhwMCwgLUhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzE3CisgICAgMC4wLAorICAgIC0weDEuOHAwLCAtSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTgKKyAgICAwLjAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMsIC1IVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDcxOQorICAgIDAuMCwKKyAgICAtSFVHRV9WQUwsIC1IVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDcyMAorICAgIDAuMCwKKyAgICAweDEuMHAtMTAyMiwgSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjEKKyAgICAwLjAsCisgICAgMHgxLjBwLTEwNzQsIEhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzIyCisgICAgMC4wLAorICAgIDAuMCwgSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjMKKyAgICAwLjAsCisgICAgLTAuMCwgSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjQKKyAgICAwLjAsCisgICAgLTB4MS4wcC0xMDc0LCBIVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDcyNQorICAgIDAuMCwKKyAgICAtMHgxLjBwLTEwMjIsIEhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzI2CisgICAgSFVHRV9WQUwsCisgICAgSFVHRV9WQUwsIEhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzI3CisgICAgSFVHRV9WQUwsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMywgSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjgKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuOHAwLCBIVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDcyOQorICAgIEhVR0VfVkFMLAorICAgIC0weDEuOHAwLCBIVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDczMAorICAgIEhVR0VfVkFMLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzLCBIVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDczMQorICAgIEhVR0VfVkFMLAorICAgIC1IVUdFX1ZBTCwgSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzIKKyAgICAtMC4wLAorICAgIC1IVUdFX1ZBTCwgLTB4MS44cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzMKKyAgICAtMC4wLAorICAgIC1IVUdFX1ZBTCwgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzQKKyAgICAwLjAsCisgICAgLUhVR0VfVkFMLCAtSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzUKKyAgICAwLjAsCisgICAgLUhVR0VfVkFMLCAtMHgxLjkyMWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDczNgorICAgIDAuMCwKKyAgICAtSFVHRV9WQUwsIC0weDEuOTIxZmI1NDQ0MmQxOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzM3CisgICAgMC4wLAorICAgIC1IVUdFX1ZBTCwgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzgKKyAgICAwLjAsCisgICAgLUhVR0VfVkFMLCAtMHgxLjhwMgorICB9LAorICB7IC8vIEVudHJ5IDczOQorICAgIDAuMCwKKyAgICAtSFVHRV9WQUwsIC0weDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzQwCisgICAgMC4wLAorICAgIC1IVUdFX1ZBTCwgLTB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNzQxCisgICAgMC4wLAorICAgIC1IVUdFX1ZBTCwgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNzQyCisgICAgLUhVR0VfVkFMLAorICAgIC1IVUdFX1ZBTCwgMHgxLjhwMQorICB9LAorICB7IC8vIEVudHJ5IDc0MworICAgIC1IVUdFX1ZBTCwKKyAgICAtSFVHRV9WQUwsIDB4MS40cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDQKKyAgICBIVUdFX1ZBTCwKKyAgICAtSFVHRV9WQUwsIEhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzQ1CisgICAgSFVHRV9WQUwsCisgICAgLUhVR0VfVkFMLCAweDEuOTIxZmI1NDQ0MmQxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzQ2CisgICAgSFVHRV9WQUwsCisgICAgLUhVR0VfVkFMLCAweDEuOTIxZmI1NDQ0MmQxOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzQ3CisgICAgSFVHRV9WQUwsCisgICAgLUhVR0VfVkFMLCAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNzQ4CisgICAgSFVHRV9WQUwsCisgICAgLUhVR0VfVkFMLCAweDEuOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNzQ5CisgICAgSFVHRV9WQUwsCisgICAgLUhVR0VfVkFMLCAweDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzUwCisgICAgSFVHRV9WQUwsCisgICAgLUhVR0VfVkFMLCAweDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDc1MQorICAgIEhVR0VfVkFMLAorICAgIC1IVUdFX1ZBTCwgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTIKKyAgICAwLjAsCisgICAgSFVHRV9WQUwsIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDc1MworICAgIDAuMCwKKyAgICBIVUdFX1ZBTCwgLTB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNzU0CisgICAgMC4wLAorICAgIEhVR0VfVkFMLCAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDc1NQorICAgIDAuMCwKKyAgICBIVUdFX1ZBTCwgLUhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzU2CisgICAgSFVHRV9WQUwsCisgICAgSFVHRV9WQUwsIEhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzU3CisgICAgSFVHRV9WQUwsCisgICAgSFVHRV9WQUwsIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTgKKyAgICBIVUdFX1ZBTCwKKyAgICBIVUdFX1ZBTCwgMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTkKKyAgICBIVUdFX1ZBTCwKKyAgICBIVUdFX1ZBTCwgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjAKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzLCAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNzYxCisgICAgMC4wLAorICAgIDB4MS4wcC0xMDIyLCAweDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzYyCisgICAgMC4wLAorICAgIC0weDEuMHAtMTAyMiwgMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDc2MworICAgIDAuMCwKKyAgICAweDEuMHAtMTA3NCwgMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDc2NAorICAgIDAuMCwKKyAgICAtMHgxLjBwLTEwNzQsIDB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjUKKyAgICBIVUdFX1ZBTCwKKyAgICBIVUdFX1ZBTCwgMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjYKKyAgICAweDEuZmZmZmZmZmZmZmZmZjdmZmZmZmZmZmZmZmZlZmZmZmZwNTExLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzY3CisgICAgMHgxLjZhMDllNjY3ZjNiY2M5MDhiMmZiMTM2NmVhOTU3ZDNlcC0xLAorICAgIDB4MS4wcC0xLCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc2OAorICAgIDB4MS5wLTUxMSwKKyAgICAweDEuMHAtMTAyMiwgMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjkKKyAgICAweDEucC01MzcsCisgICAgMHgxLjBwLTEwNzQsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzcwCisgICAgMC4wLAorICAgIDAuMCwgMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzEKKyAgICAwLjAsCisgICAgLTAuMCwgMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzIKKyAgICBIVUdFX1ZBTCwKKyAgICAtSFVHRV9WQUwsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzczCisgICAgMC4wLAorICAgIEhVR0VfVkFMLCAtMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzQKKyAgICAweDEuMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAxOHAtNTEyLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc3NQorICAgIDB4MS42YTA5ZTY2N2YzYmNjOTA4YjJmYjEzNjZlYTk1N2QzZXAwLAorICAgIDB4MS4wcC0xLCAtMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzYKKyAgICAweDEucDUxMSwKKyAgICAweDEuMHAtMTAyMiwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzc3CisgICAgMHgxLnA1MzcsCisgICAgMHgxLjBwLTEwNzQsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc3OAorICAgIEhVR0VfVkFMLAorICAgIDAuMCwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzc5CisgICAgSFVHRV9WQUwsCisgICAgLTAuMCwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzgwCisgICAgMC4wLAorICAgIC1IVUdFX1ZBTCwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzgxCisgICAgMC4wLAorICAgIDB4MS4wcC0xLCBIVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDc4MgorICAgIDAuMCwKKyAgICAweDEuMHAtMSwgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDc4MworICAgIDB4MS42YTA5ZTY2N2YzYmNjOTA4YjJmYjEzNjZlYTk1N2QzZXAtMSwKKyAgICAweDEuMHAtMSwgMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjBwLTEsIDB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNzg1CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wcC0xLCAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDc4NgorICAgIDB4MS5wMCwKKyAgICAweDEuMHAtMSwgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNzg3CisgICAgMHgxLnAwLAorICAgIDB4MS4wcC0xLCAtMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNzg4CisgICAgMHgxLnAwLAorICAgIDB4MS4wcC0xLCAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODkKKyAgICAweDEucDAsCisgICAgMHgxLjBwLTEsIC0weDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDc5MAorICAgIDB4MS42YTA5ZTY2N2YzYmNjOTA4YjJmYjEzNjZlYTk1N2QzZXAwLAorICAgIDB4MS4wcC0xLCAtMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTEKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMHAtMSwgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTIKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMHAtMSwgLUhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzkzCisgICAgMC4wLAorICAgIC0weDEuMHAtMSwgSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTQKKyAgICAwLjAsCisgICAgLTB4MS4wcC0xLCAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNzk1CisgICAgMHgxLnAwLAorICAgIC0weDEuMHAtMSwgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNzk2CisgICAgMHgxLnAwLAorICAgIC0weDEuMHAtMSwgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDc5NworICAgIEhVR0VfVkFMLAorICAgIC0weDEuMHAtMSwgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTgKKyAgICBIVUdFX1ZBTCwKKyAgICAtMHgxLjBwLTEsIC1IVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDc5OQorICAgIDB4MS5wMSwKKyAgICAweDEuMHAyLCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDgwMAorICAgIDB4MS44MHAxLAorICAgIDB4MS4ycDMsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODAxCisgICAgMHgxLnAyLAorICAgIDB4MS4wcDQsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODAyCisgICAgMHgxLnAtMSwKKyAgICAweDEuMHAyLCAtMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDMKKyAgICAweDEucC0yLAorICAgIDB4MS4wcDQsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDgwNAorICAgIDB4MS5wLTMsCisgICAgMHgxLjBwNiwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODA1CisgICAgSFVHRV9WQUwsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEsIC0weDEuNzQ5MTBkNTJkMzA1MnA2MgorICB9LAorICB7IC8vIEVudHJ5IDgwNgorICAgIDAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMSwgMHgxLjc0OTEwZDUyZDMwNTJwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDcKKyAgICAweDEucDIsCisgICAgMHgxLjBwMSwgMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDgwOAorICAgIDB4MS5wLTIsCisgICAgMHgxLjBwMSwgLTB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDkKKyAgICAweDEucDIsCisgICAgLTB4MS4wcDEsIDB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTAKKyAgICAweDEucC0yLAorICAgIC0weDEuMHAxLCAtMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDgxMQorICAgIDB4MS5iMHA0LAorICAgIDB4MS44cDEsIDB4MS44cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTIKKyAgICAweDEuODZhMHAxMSwKKyAgICAweDEuNHAyLCAweDEuNHAyCisgIH0sCisgIHsgLy8gRW50cnkgODEzCisgICAgMHgxLjkyMWVlMHAxOSwKKyAgICAweDEuY3AyLCAweDEuY3AyCisgIH0sCisgIHsgLy8gRW50cnkgODE0CisgICAgMHgxLjJhMDVmMnAzMywKKyAgICAweDEuNHAzLCAweDEuNHAzCisgIH0sCit9OworI2VuZGlmIC8vIF9fQklPTklDX18KKworVEVTVChtYXRoX3BvdywgcG93X2ludGVsKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihnX3Bvd19pbnRlbF9kYXRhKS9zaXplb2YocG93X2ludGVsX2RhdGFfdCk7IGkrKykgeworICAgIEVYUEVDVF9ET1VCTEVfRVEoZ19wb3dfaW50ZWxfZGF0YVtpXS5leHBlY3RlZCwgcG93KGdfcG93X2ludGVsX2RhdGFbaV0ueF9jYWxsX2RhdGEsIGdfcG93X2ludGVsX2RhdGFbaV0ueV9jYWxsX2RhdGEpKSA8PCAiRmFpbGVkIG9uIGVsZW1lbnQgIiA8PCBpOworICB9CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCit9CmRpZmYgLS1naXQgYS90ZXN0cy9tYXRoX3Bvd2ZfdGVzdC5jcHAgYi90ZXN0cy9tYXRoX3Bvd2ZfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc3YjIzYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21hdGhfcG93Zl90ZXN0LmNwcApAQCAtMCwwICsxLDI3ODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgZmxvYXQgZXhwZWN0ZWQ7CisgIGZsb2F0IHhfY2FsbF9kYXRhOworICBmbG9hdCB5X2NhbGxfZGF0YTsKK30gcG93Zl9pbnRlbF9kYXRhX3Q7CisKK3N0YXRpYyBwb3dmX2ludGVsX2RhdGFfdCBnX3Bvd2ZfaW50ZWxfZGF0YVtdID0geworICB7IC8vIEVudHJ5IDAKKyAgICBIVUdFX1ZBTEYsCisgICAgLTAuMCwgLTB4MS4wMDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxCisgICAgMC4wZiwKKyAgICAtMHgxLnAtNSwgMHgxLmUwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyCisgICAgLTAuMGYsCisgICAgLTB4MS5wLTMwLCAweDEuNDBwMgorICB9LAorICB7IC8vIEVudHJ5IDMKKyAgICAweDEucDAsCisgICAgLTB4MS5wMCwgMHgxLjAwMDAwMnAzMgorICB9LAorICB7IC8vIEVudHJ5IDQKKyAgICAweDEucDAsCisgICAgLTB4MS4wMDAwMDJwLTQxLCAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1CisgICAgMHgxLmQxYTAyOTEyODc3OGZjYTNmOWEyNjFiZTFjYjg2YmU3cC0xMjEsCisgICAgLTB4MS4wMDAwMDZwMCwgLTB4MS5iYzFlZTJwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2CisgICAgMHgxLmRhNmUzZmYyMDJkYTc1MmRlNTIzZjk4NDYzMDNjMGI1cC0xMjQsCisgICAgLTB4MS4wMDAwMGFwMCwgLTB4MS4xMTExMTJwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA3CisgICAgMHgxLmViNzBhMmZiYjhiMjQ4OWI4ZDgzOGViNjVlZDY3NmFjcC05MSwKKyAgICAtMHgxLjAwMDAwYXAwLCAtMHgxLjhmODNlNHAyNgorICB9LAorICB7IC8vIEVudHJ5IDgKKyAgICBIVUdFX1ZBTEYsCisgICAgLTB4MS4wMDAwMjhwMCwgMHgxLjIwcDQ0CisgIH0sCisgIHsgLy8gRW50cnkgOQorICAgIDB4MS4wMDIwMDFwLTQsCisgICAgLTB4MS4wMDEwcC0yLCAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMAorICAgIDB4MS4wMDIwMDFwLTgyLAorICAgIC0weDEuMDAxMHAtNDEsIDB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDExCisgICAgMHgxLjAwNDAwNHAtODIsCisgICAgLTB4MS4wMDIwcC00MSwgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTIKKyAgICAweDEuMDA2MDA5cC0xMiwKKyAgICAtMHgxLjAwMzBwLTYsIDB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDEzCisgICAgLTB4MS5mYjg1OWFkYmRiN2RmNjk3NGM1YzlhNTQ4OWU2OTcyYXA1MywKKyAgICAtMHgxLjAwNDBwLTYsIC0weDEuMjBwMworICB9LAorICB7IC8vIEVudHJ5IDE0CisgICAgMHgxLjAwODAxMHAtODIsCisgICAgLTB4MS4wMDQwcC00MSwgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTUKKyAgICAweDEuMDBlMDMxcC00MCwKKyAgICAtMHgxLjAwNzBwLTIwLCAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNgorICAgIDB4MS4zMWU0NTJmZmZmZWM5NmEzZDVhODgyZmUyNDRmOGM2M3AtMSwKKyAgICAtMHgxLjA0NmVmNHAwLCAtMHgxLmUwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNworICAgIDB4MS4zM2U4ZjMwNHAtMzYsCisgICAgLTB4MS4wOHAtNiwgMHgxLjgwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOAorICAgIDB4MS5kODIwMDFmZTlkNmJkYmJhOTg2MzhkZWY4ZDM3ZTUwYnAtMTI0LAorICAgIC0weDEuMWVjMzhjcDAsIC0weDEuNzhwOQorICB9LAorICB7IC8vIEVudHJ5IDE5CisgICAgLTB4MS40NWYzYmRlYWE1ZjYwZDEyMWMzZmE3NTFkYmQ3NThhZHAzNiwKKyAgICAtMHgxLmJmZmZmZXAtNiwgLTB4MS5jMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMjAKKyAgICAweDEuZGY0MWFlN2VmNGUxNWU4YWQ0NWM3MjkzZGRjM2ZlN2RwNjEsCisgICAgLTB4MS5mZmZmZmFwLTEsIC0weDEuYzliMjQ0cDI3CisgIH0sCisgIHsgLy8gRW50cnkgMjEKKyAgICAweDEuZGY0NmYyNmYxZjEyOWE1NDkyMjAyMmY5YjY1M2E5OWZwNjEsCisgICAgLTB4MS5mZmZmZmFwLTEsIC0weDEuYzliMjYycDI3CisgIH0sCisgIHsgLy8gRW50cnkgMjIKKyAgICAtMHgxLjAwMDAwMzAwMDAwOTAwMDAxYjAwMDA1MTAwMDBmM3AyMSwKKyAgICAtMHgxLmZmZmZmYXAtMjIsIC0weDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMworICAgIC0weDEuMDAwMDAzMDAwMDA5MDAwMDFiMDAwMDUxMDAwMGYzcC05OSwKKyAgICAtMHgxLmZmZmZmYXA5OCwgLTB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDI0CisgICAgLTB4MS43OGI1NWVmOGFlY2IwYjdjNWI4ODY1ZTI3MTU3ZDgyNHAtMiwKKyAgICAtMHgxLmZmZmZmY3AtMSwgMHgxLjAwMDAwMnAyMworICB9LAorICB7IC8vIEVudHJ5IDI1CisgICAgLTB4MS5mZmZmZmVwLTQxLAorICAgIC0weDEuZmZmZmZlcC00MSwgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjYKKyAgICAweDEucDcxLAorICAgIDB4MS5wLTIsIC0weDEuMWNwNQorICB9LAorICB7IC8vIEVudHJ5IDI3CisgICAgMHgxLmQ1ODA3MTBlMzg0NjNjM2RkNjJmY2U5OGYyMDNiNDcxcC0xLAorICAgIDB4MS5wLTIsIDB4MS4wMDA3cC00CisgIH0sCisgIHsgLy8gRW50cnkgMjgKKyAgICAweDEucC0xNSwKKyAgICAweDEucC0yLCAweDEuZTBwMgorICB9LAorICB7IC8vIEVudHJ5IDI5CisgICAgMC4wZiwKKyAgICAweDEucC0zLCAweDEuOGZmZmZlcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMAorICAgIDB4MS5wLTQwLAorICAgIDB4MS5wLTUsIDB4MS5wMworICB9LAorICB7IC8vIEVudHJ5IDMxCisgICAgMHgxLnA0MCwKKyAgICAweDEucC0xMCwgLTB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDMyCisgICAgMHgxLmVjZmZmMGI0NDlkN2M5YTVkNDk0Yzg4NGM3MTdmOWNkcC04OCwKKyAgICAweDEucC0xNDQsIDB4MS4zNTg2ZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMworICAgIDB4MS5lY2ZmZjBiNDQ5ZDdjOWE1ZDQ5NGM4ODRjNzE3ZjljZHAtMTA2LAorICAgIDB4MS5wLTE0NCwgMHgxLjc1ODZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM0CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wLTE0OSwgLTB4MS5jY2FjY2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNQorICAgIEhVR0VfVkFMRiwKKyAgICAweDEucC0xNDksIC0weDEuZTZlNjY2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzYKKyAgICAweDEuZThlMTAxMzU1YmQ5NzViZmVjM2ZiNWVkMzc1Nzc3N2RwLTEsCisgICAgMHgxLjAwMDAwMnAtMiwgMHgxLjExMTFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNworICAgIDB4MS5kZGI2NDM0N2E1NWU0NTJlZDA0ZDZhMTczY2E1YjU2Y3A5OSwKKyAgICAweDEuMDAwMDAycC0xMTEsIC0weDEuY2NjY2NjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzgKKyAgICAweDEuNTU4ZTk5MDAwNGE4ZWJiM2U4MTc2Mjc1YmE5ZjEwNTJwNTIsCisgICAgMHgxLjAwMDAwMnAtMTEyLCAtMHgxLmRmM2I1YXAtMgorICB9LAorICB7IC8vIEVudHJ5IDM5CisgICAgMHgxLmZmZmZmZDAwMDAwNTNmZmZmNjYwMDAxMjBiZmZkZGI2cDkyLAorICAgIDB4MS4wMDAwMDJwLTEyNCwgLTB4MS44MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwCisgICAgMHgxLmZmZmZmZmZmZmZmODAwMDAwODAwMDAwNTU1NTU0NTU1cC0xLAorICAgIDB4MS4wMDAwMDJwMCwgLTB4MS5wLTIzCisgIH0sCisgIHsgLy8gRW50cnkgNDEKKyAgICAweDEuZmZmZmZmZmZmZmY5MDAwMDA3MDAwMDAyZWFhYWEwMmFwLTEsCisgICAgMHgxLjAwMDAwMnAwLCAtMHgxLmMwcC0yNAorICB9LAorICB7IC8vIEVudHJ5IDQyCisgICAgMHgxLmRkYjY1MzBkNDg1YjdiYWRiNDQxYTQ0NjBjYTU0YzYycDksCisgICAgMHgxLjAwMDAwMnAxMSwgMHgxLmNjY2NjNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQzCisgICAgMHgxLmQ5MDE3OTBjZDlkMWI5ZDhjZGY2MTYyOTY0NzkwMjJmcC0xNCwKKyAgICAweDEuMDAwMDAycDE3LCAtMHgxLjhhZjhiMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ0CisgICAgMHgxLmU2ZDNmOTBkNDE0NDQ3YjJmMjQ2N2Q0YzIxNDQ5NmJkcDMwLAorICAgIDB4MS4wMDAwMDJwNDIsIDB4MS43OTA0YTRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NQorICAgIDB4MS4wMDAwMTJmZmZmZDY4MDA0ZmE3ZmIxNTkxMDhlYzk3ZHAwLAorICAgIDB4MS4wMDAwMWNwMCwgMHgxLjViNmRiYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ2CisgICAgMHgxLmQxNzQ4MTBlMWU0NTI3ZjAxMTU0N2RmYzRkYzZiNDhjcC0zLAorICAgIDB4MS4wMDAwMWNwMywgLTB4MS42Y2NjY2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NworICAgIDB4MS5kNTgxOTcwZThiNGNjYzlkYmMyODg5OWJkMTg0OGUyNHAtMSwKKyAgICAweDEuMDAwMDJlcC0yLCAweDEuZmZmZmNlcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDgKKyAgICAweDEuMDAwNDU1MDAwMzEyY2M2ZTc5Y2VkNjUzYzM4ZDdlMmFwMCwKKyAgICAweDEuMDAwMDM4cC01MCwgLTB4MS5mZmY3N2VwLTIwCisgIH0sCisgIHsgLy8gRW50cnkgNDkKKyAgICAweDEuMDA0ODA5MDBhODA3ZTAzZjAxNTAwNDgwMDkwMDA4cC04MSwKKyAgICAweDEuMDAwOHAtOSwgMHgxLjIwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MAorICAgIDB4MS5mZmMwMDRmZmIwMDQ1ZmM4MDI5ZmUyMDE0OWYyNDA4ZXAzOSwKKyAgICAweDEuMDAwOHAtMTAsIC0weDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MQorICAgIDB4MS5mZWMxYmIzNWI1YTgyNjUyNjEwMWFkYWIwNjk1ZDFkM3AtMSwKKyAgICAweDEuMDBlMHAwLCAtMHgxLjZjY2NjZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDUyCisgICAgMHgxLmZhZGJkZTE4N2FjYmE1YjNhNmM0Y2RlNzhlMWJiYjRhcDQ1LAorICAgIDB4MS4wMWZmZmNwMCwgMHgxLnAxMgorICB9LAorICB7IC8vIEVudHJ5IDUzCisgICAgMHgxLmZmMWZiNmZmNzlhNWUwMzkxYjFkN2RmYjE0ZGU3ZGU2cDIyLAorICAgIDB4MS4wMWZmZmVwMCwgMHgxLjAwMGNiNnAxMQorICB9LAorICB7IC8vIEVudHJ5IDU0CisgICAgMHgxLjZjYmJjMmZmZjY0YzczYWFiMDAzM2RmNzU3ZjM4MDhkcDExLAorICAgIDB4MS4wMjIwcDAsIDB4MS5lMjk1ZjJwOQorICB9LAorICB7IC8vIEVudHJ5IDU1CisgICAgMHgxLmY4MWY1MzEyYmE0NDk0MjFiZDkzOTNhZDhkZjUzYWFlcC0xLAorICAgIDB4MS4wNHAwLCAtMHgxLjAwMDZwMAorICB9LAorICB7IC8vIEVudHJ5IDU2CisgICAgMHgxLmZmZTg4YWZmZmZmZjMzZTkzM2NmYWFkNWYwZWUyNjc4cC0xLAorICAgIDB4MS4wOGM3ZWVwLTE2LCAweDEuMGY5NGIycC0xNgorICB9LAorICB7IC8vIEVudHJ5IDU3CisgICAgMHgxLjAwMDBkY2ZmZmZjNmZlZTdlNGFhYzA5YTNkOWZiOWExcDAsCisgICAgMHgxLjBlcC0yMCwgLTB4MS4wMDBjZGNwLTIwCisgIH0sCisgIHsgLy8gRW50cnkgNTgKKyAgICAweDEuNzBjZTA1ZTYyOTgwM2MwY2E0NzQ4MjM5MmE4ODJkZWJwLTMsCisgICAgMHgxLjBlcDMsIC0weDEuOWI5MWJhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTkKKyAgICAweDEuNWE4OTI2ZTQ3M2Y2MTQ4YTVhMzgzYmZhMWVkMGIzMzVwLTkwLAorICAgIDB4MS4wZmZmZmVwMCwgLTB4MS4wMDAwZmVwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MAorICAgIDB4MS44ZWM1YjJlMTYwNjcyOGYyMWNmMmM5MGMyZTRkMmE5YnAtOTMsCisgICAgMHgxLjBmZmZmZXAwLCAtMHgxLjA3ZmZmZXAxMAorICB9LAorICB7IC8vIEVudHJ5IDYxCisgICAgMHgxLmE0N2RkNGZmZmZlMjU0ODYzMTQzNTE0MTM4MzdiMmZkcDQsCisgICAgMHgxLjE2MjRwLTQsIC0weDEuMzcyMGMwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MgorICAgIDB4MS40NDI0MDFwMCwKKyAgICAweDEuMjAxMHAwLCAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MworICAgIDB4MS5lN2FhZjJmZmZmYmNlODZhNGZkMmNmOWNiNTNkN2U1NXAtMSwKKyAgICAweDEuMjUzMjY0cDAsIC0weDEuNmY4MjZlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjQKKyAgICAweDEuNGQ2MzI5MDA1MmQ0ZDJkODk0YjQ2MzVjYjliOTgxMzBwLTM5LAorICAgIDB4MS4yNzExYzhwLTYsIDB4MS5hYTgwNGVwMgorICB9LAorICB7IC8vIEVudHJ5IDY1CisgICAgMHgxLmIyMDE2OGRhMGZjMWZjYTZkM2MxYjhjMjNmZGNhZjM5cDQ5LAorICAgIDB4MS4yYWFhYWFwLTEsIC0weDEuZmZmMWZlcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NgorICAgIDB4MS5lZTI2YzEyZWJmNWI2NDliZWY5NTQ4NGVjZTExMzAwN3AyLAorICAgIDB4MS4yZjdkYzBwLTIzLCAtMHgxLjA5NjdjMHAtMworICB9LAorICB7IC8vIEVudHJ5IDY3CisgICAgMHgxLmJjOTA1OTAwMDAwMDJlZTExNzYzYzZmZTI0MTg3MzBjcC0yLAorICAgIDB4MS4zMzQ0NzhwLTIsIDB4MS42MmU0MmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OAorICAgIDB4MS44YzhjODMwMDMwOGNlZTdjMWE0MWIwOTI5NDMyM2NmYnAtODIsCisgICAgMHgxLjNmZmZmZXAtMSwgMHgxLmUwcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OQorICAgIDB4MS42NDNkNGVmZmZlNjA2ZTA1NmU0MDM1YjBiZWNjMjBmZHAtNSwKKyAgICAweDEuM2ZmZmZlcC00MCwgMHgxLmQyZjE5MHAtNAorICB9LAorICB7IC8vIEVudHJ5IDcwCisgICAgMHgxLmY4MTQ4OTE0ZDRlYTNhZjk0ZWU3MjQ1NzJmMmVlOGZmcC0xLAorICAgIDB4MS40MWQ0MjBwMjAsIC0weDEuMjJwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNzEKKyAgICAweDEuY2Q2ZTkxMDAwMzhjOTNhN2RjZTcyYTExM2NhNTZjNzBwLTIsCisgICAgMHgxLjQ0M2E0MnAtMiwgMHgxLjYyZTQyZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDcyCisgICAgMHgxLmY4OTU5MTBmMzkyZjNiOGZjYzY0MWFlODcxNjRkNjg0cC0xLAorICAgIDB4MS40NWEyYThwMSwgLTB4MS5wLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MworICAgIDB4MS5lM2RmZjhmZmY2ZTllZmQ0ZjE2N2E3YjkxZWI4ODJhZnAtMSwKKyAgICAweDEuNDVkMTc0cC0xLCAweDEuMDAwMDFjcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzQKKyAgICAweDEuZDMzMmYwZmZmYzgzMTI4YTdmYzdiZDU2YmUyN2U3NTVwLTIsCisgICAgMHgxLjRhMTcwNHAtMiwgMHgxLjYyZTQyZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDc1CisgICAgMHgxLmQ1YWU3OTAwMDNjYjE3Y2Y4M2RlYjVlMmNjMGVhMDFjcC0yLAorICAgIDB4MS40YzlmOTRwLTIsIDB4MS42MmU0MmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NgorICAgIDB4MS5jYThlYzZlZDVkZjM5Zjk5MWY4MDhkOTRkZDVjODgzNHA4OCwKKyAgICAweDEuNGU5Y2MycC0zMCwgLTB4MS44MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzcKKyAgICAweDEuZDliNjQ4ZmZmYzE2N2VkOGI5MTdiNjRmNzQ3ZTYyNzBwLTIsCisgICAgMHgxLjUwYmZjOHAtMiwgMHgxLjYyZTQyZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDc4CisgICAgMHgxLmRhOTUwNzAwMDFhMzc5OWZlZTAyZWEwMzQzNTdhOGMycC0yLAorICAgIDB4MS41MWE0NTBwLTIsIDB4MS42MmU0MmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OQorICAgIDB4MS5mZTk1N2IzOGM1YjY5NTliYjBlYTgwZTQzYzcwOWVjYXAtMSwKKyAgICAweDEuNjc5Mjg2cC0xMSwgMHgxLjhlYTgyNHAtMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MAorICAgIDB4MS5hY2E5MWI1ZjM4ODJmMzZkY2RhYjJhOGQ2NDFjMGFiNXAtNTYsCisgICAgMHgxLjc0NWQxOHAtNCwgMHgxLmZmMWZmZXAzCisgIH0sCisgIHsgLy8gRW50cnkgODEKKyAgICAweDEuZjgyZWI3MTFmZjAwNjZlZTU5MTY1ODI1OGI2OTIzMzFwLTEsCisgICAgMHgxLjc3ZmZmZXAtMTIwLCAweDEuODViYzdhcC0xMworICB9LAorICB7IC8vIEVudHJ5IDgyCisgICAgMHgxLmQ5OGM4MzAwMDAzZTgzZmQyNWI5NTM4MWY3MDIxNjFjcC0xLAorICAgIDB4MS43YTNkMGVwMCwgLTB4MS45OTk5OWFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MworICAgIDB4MS5mODJjZWYxM2ExMWE1ZjVhMDU2MmZlNTJjODgyMDdiZHAtMSwKKyAgICAweDEuN2M5YTE2cC0yLCAweDEuZmRkZmZlcC03CisgIH0sCisgIHsgLy8gRW50cnkgODQKKyAgICAweDEuZDBkMDE0ZmZmZTcxNWUyNzMyYjZkMWNlZDk2YWRiNzZwMTksCisgICAgMHgxLjdlOWJiMHAtOCwgLTB4MS41Njk4MjhwMQorICB9LAorICB7IC8vIEVudHJ5IDg1CisgICAgMHgxLjg1MThlMmZmZmRlYTMwMTA2MmFjNmEyOWM2ZTUzZGY2cC0xLAorICAgIDB4MS44NTFlYmFwLTEsIDB4MS4wMDBlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NgorICAgIDB4MS4yZGExZThmZmZlMTM1MGU0ZGFmNTU1M2U3NWRjYTAyMHAtNCwKKyAgICAweDEuODYxODYycC00LCAweDEuMWNwMAorICB9LAorICB7IC8vIEVudHJ5IDg3CisgICAgMHgxLmRkMDM3YTJjNTYxYmZlMTgyNHAtMTEsCisgICAgMHgxLjhjZTYzMnAtNCwgMHgxLjgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OAorICAgIDB4MS5mODFmYTcxM2QyYjIzZWFjNTJhMzZmNGIzYTMzMDIzZXAtMSwKKyAgICAweDEuOGY4NmFhcC0xLCAweDEuMDAwMGUwcC00CisgIH0sCisgIHsgLy8gRW50cnkgODkKKyAgICAweDEuMDNmMTRiMDk1YWU2ODc1MjVhN2UzNzdlMzUwNWU1ODdwMCwKKyAgICAweDEuOTBwNSwgMHgxLjAwMDhwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MAorICAgIDB4MS4zNjM5NTEwMDAwNWNjNDExM2IyMjBkNmNlNjcyZTE2NXAwLAorICAgIDB4MS45NTU3OGVwMSwgMHgxLjU1NTU1NnAtMworICB9LAorICB7IC8vIEVudHJ5IDkxCisgICAgMHgxLmY4MzI0OTEzNGU3N2EyMWJmODExMzUwYzZhOTMxYmVlcC0xLAorICAgIDB4MS45OHA1LCAtMHgxLjAwMDAwMnAtOAorICB9LAorICB7IC8vIEVudHJ5IDkyCisgICAgMHgxLjlmNjI4YjNjZmQwNmY0MTdmODZlMWNhOGVkYzE0NjllcDExNywKKyAgICAweDEuOTk5OTljcDMsIDB4MS5wNQorICB9LAorICB7IC8vIEVudHJ5IDkzCisgICAgMHgxLmQ0ODUxY2NlZGFmZGQxY2JjNzlhNmE2YjNkYmIxY2JlcDExOSwKKyAgICAweDEuOWE2NmQwcC0xNCwgLTB4MS4yMHAzCisgIH0sCisgIHsgLy8gRW50cnkgOTQKKyAgICAweDEuMjUzNjI3MDAwMWZhYjcwYTI5ZDY4ZTYwZmViMTEyMTFwLTExLAorICAgIDB4MS45ZmZmZmVwNDEsIC0weDEuMDk0ZjFjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgOTUKKyAgICAweDEuZDA4YWU4ZmZmZGM3MDI5ZTBiZDAyYzg3MTYwNmEwMWNwMCwKKyAgICAweDEuYTU3YmVjcDEsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NgorICAgIDB4MS5iODM2MzhmZmIyMTU2MWEyM2VjOWI4YTdiMGJhN2I1MnAxNSwKKyAgICAweDEuYWFhYWFlcC0xLCAtMHgxLmUwcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NworICAgIDB4MS5jMTk4ODYwMDAwMDAxYzFjZWUxNDZlNDUxMzY1ZWFlMXAtMTAsCisgICAgMHgxLmFkMWQxY3AtMTQsIDB4MS42MmU0MmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OAorICAgIDB4MS5jZDBjNmVlZmMzM2RmYzJlZjNkMmJlYjgxYWQ1NjhjYXAzMCwKKyAgICAweDEuYjEzYjFjcC0xLCAtMHgxLmZmZmYxZXA2CisgIH0sCisgIHsgLy8gRW50cnkgOTkKKyAgICAweDEuNjIyOGU0ZmVmODgyNzY5YmEwNDAxNjRmYzRiY2EwY2JwLTgxLAorICAgIDB4MS5iN2ZmZDhwLTEsIDB4MS43MDUzOTRwOAorICB9LAorICB7IC8vIEVudHJ5IDEwMAorICAgIDB4MS5hZTlkNzU2Yzg0YjQwNjNmMjM4ZGQxNTFiZWMzMGUwYnAtOTksCisgICAgMHgxLmJlMGQ3Y3AtMSwgMHgxLmVkZTQ0OHA4CisgIH0sCisgIHsgLy8gRW50cnkgMTAxCisgICAgMHgxLjkxM2Y2OGYxMDFlYmU0OTBkMjlkODczZDFlMGZkODI4cC04NSwKKyAgICAweDEuYmUwZjcwcC0xLCAweDEuYTgxNDdhcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIKKyAgICAweDEuYjFlNzIxNWMxMjgwODJhYWI0OWVkYWIxNjQxOTE5YThwLTk5LAorICAgIDB4MS5iZTBmNzBwLTEsIDB4MS5lZGU1ZDhwOAorICB9LAorICB7IC8vIEVudHJ5IDEwMworICAgIDB4MS5kYzU3NDE4M2YwM2Q3YTMzM2MxOGZjNjkxNmRhYTg1OXAtOTYsCisgICAgMHgxLmJmZjBkMHAtMSwgMHgxLmVkMmZiNHA4CisgIH0sCisgIHsgLy8gRW50cnkgMTA0CisgICAgMHgxLmRhNmZjZDAwMDIwZGE2NTllNGE1MGJhOTkzYTcxZDkycDYsCisgICAgMHgxLmJmZmZmZXAxLCAweDEuZTdmNzgycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLmMyNWMyNnAtNDQsIC0weDEuNDBwMworICB9LAorICB7IC8vIEVudHJ5IDEwNgorICAgIDB4MS45NTFkZmFmMGQwMzQxMDk3ZTUwZjhkNTFmYjViMGIyYXAtNzIsCisgICAgMHgxLmM0ZWM3NHAtMSwgMHgxLjkzNTIzNHA4CisgIH0sCisgIHsgLy8gRW50cnkgMTA3CisgICAgMHgxLmZiMWM2Y2ZmZmVmMTk5ODg0ZTc4YzI2ZmVmMDU3ZmMzcDQsCisgICAgMHgxLmM3NjM4MHAwLCAweDEuODAwODdjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgKKyAgICAweDEuZDgyZDdkZmZmZmVmYzI2ZTFmMDllNmQ3M2EyNzZkODFwLTEwLAorICAgIDB4MS5jYzhkMDZwLTE0LCAweDEuNjJlNDJlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA5CisgICAgMHgxLjk5N2UwZWVmN2JiM2Q0ZWRhNDBkYzQzYzcyYTUzMTY3cC03MCwKKyAgICAweDEuZDFjZGNjcC0xLCAweDEuZmMyNjQwcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAKKyAgICAweDEuZmU4MmRkMzgxYThkMzA1NmE0YzU1NGYxZTE3NjRmOWRwLTEsCisgICAgMHgxLmQ0MGE2NnAtMywgMHgxLjAyOTY0Y3AtOQorICB9LAorICB7IC8vIEVudHJ5IDExMQorICAgIDB4MS5mM2FiMTkzNzE2OWM5YWI3YWFjNjdiOTQ4OTRlZGUxMHAtMSwKKyAgICAweDEuZDU1NTUycC0yLCAweDEuMDAwMDM4cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTEyCisgICAgMHgxLmZlODA1ZjM3Yjg5YmMwYzhiMDE2M2RiN2MxMWY0OGYycC0xLAorICAgIDB4MS5kYTEyZjBwLTEsIDB4MS4zOHAtNQorICB9LAorICB7IC8vIEVudHJ5IDExMworICAgIDB4MS5jMjc5MzcwMDBmNmMxNWE4NmY4ZWIwNDJhMDg5NTU2NnAtNzMsCisgICAgMHgxLmRmMGE4MnAtMSwgMHgxLjc3ZmJjMHA5CisgIH0sCisgIHsgLy8gRW50cnkgMTE0CisgICAgMHgxLmM2NGIwZDAwMDAyN2RiZWZhMWUzMjMzZWY1MzYxOWI3cDEwNSwKKyAgICAweDEuZGZmZmZlcDUyLCAweDEuMDAwODdjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUKKyAgICAweDEuMDg0N2IwODBlMTBhM2YzM2JhNTk5YTIxOGI2MzBmZmJwMCwKKyAgICAweDEuZTA2YjhjcC0xLCAtMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDExNgorICAgIDB4MS5lZmY1NzE2ZmEwNTdjMGRiMDI5NzJlNWI1MWE5NTg5OXAtMSwKKyAgICAweDEuZTA2YjhjcC0xLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTE3CisgICAgMHgxLjA4M2Y3ZjU4N2NkYjZjYzAwNWVlNzBhYmIxMjgwNjdjcDAsCisgICAgMHgxLmUwODk1NnAtMSwgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgKKyAgICAweDEuZjAwNGQxODY2NTNkZjc0NmY0NmFjMWRhNTFlNjg4MTdwLTEsCisgICAgMHgxLmUwODk1NnAtMSwgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDExOQorICAgIDB4MS4yZTc4OTg2Y2U3MTY5MDY4OWExN2IwOWUyZmQwMTI1NnAwLAorICAgIDB4MS5lMGVlOGFwLTEsIC0weDEuNTUxNXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTIwCisgICAgMHgxLjM0ZTMwNmViZGFjYjNmYjI0OWVmYjkyYzVkZjUwYTMwcDAsCisgICAgMHgxLmUwZWU4YXAtMSwgLTB4MS44MHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTIxCisgICAgMHgxLjFhMjJhMmIyODQ4NDNjZWY3MjlhYTc5MjMyMDA2MTZicDAsCisgICAgMHgxLmUwZWU4YXAtMSwgLTB4MS44ZDg5ZDhwMAorICB9LAorICB7IC8vIEVudHJ5IDEyMgorICAgIDB4MS4xZDhiZWZlZDAzZjllZDhkNjI4ZTcyYWNmZDU4NDZmMnAwLAorICAgIDB4MS5lMGVlOGFwLTEsIC0weDEuYmViMDUwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjMKKyAgICAweDEuZTllNTE4ZmIxNjE3ZWNlYjk3NmI0MjA5MzBhM2NlNTFwLTEsCisgICAgMHgxLmUwZWU4YXAtMSwgMHgxLjY4Zjg4MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEyNAorICAgIDB4MS5hMGJkYmFlN2QxYjk1ZDFhZGIwNTkzOWFlZmNkMzVmMnAtOTMsCisgICAgMHgxLmUxM2QwZXAtMSwgMHgxLjAyMjBwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUKKyAgICAweDEuODc4OTI2OWMzZDczNjFmNjQ2NGYzNjliYWVjZDM1OGZwLTkwLAorICAgIDB4MS5lMWYwN2VwLTEsIDB4MS5wMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYKKyAgICAweDEuZjY3ZGNiMGQwMzRlYzI4YTQzMDljNDQxNTU2NWY5ZWNwMSwKKyAgICAweDEuZTQwMDBlcDUsIDB4MS41NTU1NWFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcKKyAgICAweDEuZTY1Nzg1OTg2ZmI3YWYxMjE5MjM0OTgwZGNhNGVmMzRwLTkzLAorICAgIDB4MS5lNmYzMTRwLTEsIDB4MS4zZTBmODBwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgKKyAgICAweDEuZTlhNTc2OTFmMDZhY2JkMzg5MzkwMWUzNzY4MzA1MzdwLTEyNSwKKyAgICAweDEuZTk3NDcwcC0xLCAweDEuZGQ2N2MwcDEwCisgIH0sCisgIHsgLy8gRW50cnkgMTI5CisgICAgMHgxLjg2NmVjOTAwMDE3ZDY4OWNhNWRlYjE4YzQ3NjllZmZicC0yLAorICAgIDB4MS5mMDQwYzhwLTEsIDB4MS5lZGRiYWNwNAorICB9LAorICB7IC8vIEVudHJ5IDEzMAorICAgIDB4MS5mODM5ZDUxMDFiY2YzMDVlMDRjMTg3YWZiNTNhNmM1M3AtMSwKKyAgICAweDEuZjA5MWUycC0xLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTMxCisgICAgMHgxLmEzNzRjMmIwMGI2MjE3MmNkNDY3OGRmNWU1MDNiNmYxcC0xMywKKyAgICAweDEuZjYwYzA0cC0xNCwgMHgxLmUyZTQyZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzMgorICAgIDB4MS5mODQ3OWIxMTU1NjFmMTcwMjhiMjM2ZmI4ZjJjMTczZnAtMSwKKyAgICAweDEuZmYxNzRhcC0xLCAweDEuMTE5OTk2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzMKKyAgICAweDEuZjk0N2NmMGRlYmIzZjUxNDlkZjY2ZTA4Mzk2ZjY1YzVwMywKKyAgICAweDEuZmYxZmZlcDMsIDB4MS5mZGRmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQKKyAgICAweDEuZjNhZTZiMzZjMzE2M2NkMmQ0MmYxZWRkZjRlOTU4ODZwLTEsCisgICAgMHgxLmZmN2ZmZXAwLCAtMHgxLjIwM2M4OHAtNQorICB9LAorICB7IC8vIEVudHJ5IDEzNQorICAgIDB4MS5mODQyYjUxMjdlNTYyYmY0Y2MyZmIyYWEzMDMxMjM5M3AtMSwKKyAgICAweDEuZmZiZmZlcC0xMCwgMHgxLjNmZmZmZXAtOQorICB9LAorICB7IC8vIEVudHJ5IDEzNgorICAgIDB4MS5mYzA0MmNmY2FiZDNkMDBjM2ZkN2U5ZDE2OGEyMDE4MnAtMSwKKyAgICAweDEuZmZjMHAtMSwgMHgxLmZmYzdmZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTM3CisgICAgMHgxLmY4MzZjZDEyOTI3ZmUzZWEyZWI5ODEwNDYyYzIwOGRjcC0xLAorICAgIDB4MS5mZmY3N2VwMTAwLCAtMHgxLmNiMDk2OHAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzgKKyAgICAweDEuZmZmM2ZkMGMwNjA4YzYwZDhjM2M5ZjA3NjQ4NjA3ZDVwMTQsCisgICAgMHgxLmZmZjdmZXA5LCAweDEuODBwMAorICB9LAorICB7IC8vIEVudHJ5IDEzOQorICAgIDB4MS5mODExZDMxNDBkMTcyOTZkYzYzM2NkMDBiZmQ5NjM4N3AtMSwKKyAgICAweDEuZmZmOHAtMSwgMHgxLmZmODBwNworICB9LAorICB7IC8vIEVudHJ5IDE0MAorICAgIDB4MS5mZTlkOTczOGQwY2E5ZjExZjk3YTcxYjFhMzY2MTQ1YXAtMSwKKyAgICAweDEuZmZmZWZlcDEsIC0weDEuZmZmZmY4cC0xMAorICB9LAorICB7IC8vIEVudHJ5IDE0MQorICAgIDB4MS5mMjAyYjMwMDAwMzA2OWE3YTg4NmU0NGZiZjYwNzNjMnA3MiwKKyAgICAweDEuZmZmZjNlcDEyNywgMHgxLjIzZDcxNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0MgorICAgIDB4MS5iODM0YTE5Mjg3NWQ3MmFjODFiNzkxNWNmODk3OTY5MHAtOTYsCisgICAgMHgxLmZmZmZiZXAtMSwgMHgxLnAyNQorICB9LAorICB7IC8vIEVudHJ5IDE0MworICAgIDB4MS5mZmZmZWQwMDAwMjliZmZkZGVmNTQ5NWU1NjAzY2UzYnAtMSwKKyAgICAweDEuZmZmZmUycC0xLCAweDEuNDQ0NDNlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQ0CisgICAgMHgxLmQ2YWI1ZDBlN2FlMDM0MzNhZDgyNDYxNmQwZGI4YjAzcDE1LAorICAgIDB4MS5mZmZmZWVwLTQwLCAtMHgxLmEwZWEwY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDE0NQorICAgIDB4MS4wMDAwMDJmZmZmZmZmZmZmZjI3ZmZmZTRmZmZmZWJjMHAwLAorICAgIDB4MS5mZmZmZmFwLTEsIC0weDEuZmZmZmZhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQ2CisgICAgMHgxLjAwMDAwMDAwMDAwNDAwMDAwNDAwMDAwZDU1NTU2ZDU1cDAsCisgICAgMHgxLmZmZmZmY3AtMSwgLTB4MS5wLTIzCisgIH0sCisgIHsgLy8gRW50cnkgMTQ3CisgICAgMHgxLjAwMDAwMDAwMDAwMzgwMDAwMzgwMDAwYWNhYWFiZGVhcDAsCisgICAgMHgxLmZmZmZmY3AtMSwgLTB4MS5jMHAtMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDgKKyAgICAweDEuZWU4ZmM5MzA5NTRkMjliM2UyOGM1YzFlYWZiOWY3ZmRwNCwKKyAgICAweDEuZmZmZmZjcC02NywgLTB4MS4zMzMzNGVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDkKKyAgICAweDEuNmEwYTBjZmZmM2ZmYTAwZTc1M2FmODRjMDEwMGZiZjBwMTMsCisgICAgMHgxLmZmZmZmY3AtMTA2LCAtMHgxLjA3NTA3OHAtMworICB9LAorICB7IC8vIEVudHJ5IDE1MAorICAgIDB4MS45YWFhYmNmZmYyYWUzZTdjODRlODcwODU2NDAzNTVlNHA0OCwKKyAgICAweDEuZmZmZmZjcC0xMjAsIC0weDEuYTJlOGJlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTUxCisgICAgMHgxLmY1Nzc3YWZmZmUyYjQ2YTRkYTk4NzU5MDQzZGU0ODYycC01MiwKKyAgICAweDEuZmZmZmZjcDgwLCAtMHgxLjQyOGY1OHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE1MgorICAgIDB4MS43M2QzMzIxZTdmMjQ3ZGVmMWVkNGM4MTZjODI0Yzc3ZHAtNjcsCisgICAgMHgxLmZmZmZmY3AxMTksIC0weDEuMWI5MWI0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTUzCisgICAgMHgxLjAwMDAwMTAwMDAwMTAwMDAwMTAwMDAwMTAwMDAwMXAxMCwKKyAgICAweDEuZmZmZmZlcC0xMSwgLTB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDE1NAorICAgIDB4MS5mZmZmZmVmZmZmZmZiZmZmZmZkZmZmZmZlYmZmZmZmMXAwLAorICAgIDB4MS5mZmZmZmVwMSwgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE1NQorICAgIDB4MS5jYjVhMGQwMDAyZjUxNjlhMTNkZTM5ODYzYmI1ZjkxZHAtMiwKKyAgICAweDEuNDIxZWZhcC0yLCAweDEuNjJlNDJlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTU2CisgICAgMHgxLmNiNzIwZGNlZjkwNjkxNTAzY2JkMWU5NDlkYjc2MWQ5cC0xLAorICAgIDB4MS5wLTUsIDB4MS5wLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTcKKyAgICAweDEucC01LAorICAgIDB4MS5wLTUsIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDE1OAorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIDB4MS5wLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTkKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAweDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjAKKyAgICAweDEucC00MCwKKyAgICAweDEucC01LCAweDEucDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjEKKyAgICAwLjBmLAorICAgIDB4MS5wLTUsIDB4MS5wNQorICB9LAorICB7IC8vIEVudHJ5IDE2MgorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIDB4MS5wMworICB9LAorICB7IC8vIEVudHJ5IDE2MworICAgIDB4MS5wMCwKKyAgICAweDEucDAsIDB4MS5wNQorICB9LAorICB7IC8vIEVudHJ5IDE2NAorICAgIDAuMGYsCisgICAgMHgxLnAtNSwgMHgxLnAxMAorICB9LAorICB7IC8vIEVudHJ5IDE2NQorICAgIDAuMGYsCisgICAgMHgxLnAtNSwgMHgxLnAxMgorICB9LAorICB7IC8vIEVudHJ5IDE2NgorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIDB4MS5wMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjcKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAweDEucDEyCisgIH0sCisgIHsgLy8gRW50cnkgMTY4CisgICAgMHgxLjExMzAxZDAxMjViNTBhNGViYmYxYWVkOTMxOGNlYWM1cDAsCisgICAgMHgxLnAzLCAweDEucC01CisgIH0sCisgIHsgLy8gRW50cnkgMTY5CisgICAgMHgxLnAzLAorICAgIDB4MS5wMywgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTcwCisgICAgMHgxLjFkNDg3MzE2OGI5YWE3ODA1YjgwMjg5OTBmMDdhOThicDAsCisgICAgMHgxLnA1LCAweDEucC01CisgIH0sCisgIHsgLy8gRW50cnkgMTcxCisgICAgMHgxLnA1LAorICAgIDB4MS5wNSwgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTcyCisgICAgMHgxLnAyNCwKKyAgICAweDEucDMsIDB4MS5wMworICB9LAorICB7IC8vIEVudHJ5IDE3MworICAgIDB4MS5wOTYsCisgICAgMHgxLnAzLCAweDEucDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzQKKyAgICAweDEucDQwLAorICAgIDB4MS5wNSwgMHgxLnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTc1CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wNSwgMHgxLnA1CisgIH0sCisgIHsgLy8gRW50cnkgMTc2CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wMywgMHgxLnAxMAorICB9LAorICB7IC8vIEVudHJ5IDE3NworICAgIEhVR0VfVkFMRiwKKyAgICAweDEucDMsIDB4MS5wMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzgKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLnA1LCAweDEucDEwCisgIH0sCisgIHsgLy8gRW50cnkgMTc5CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wNSwgMHgxLnAxMgorICB9LAorICB7IC8vIEVudHJ5IDE4MAorICAgIDB4MS4zZGVhNjRjMTIzNDIyMzViNDEyMjNlMTNkNzczZmJhMnAwLAorICAgIDB4MS5wMTAsIDB4MS5wLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODEKKyAgICAweDEucDEwLAorICAgIDB4MS5wMTAsIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDE4MgorICAgIDB4MS40YmZkYWQ1MzYyYTI3MWQ0Mzk3YWZlYzQyZTIwZTAzNnAwLAorICAgIDB4MS5wMTIsIDB4MS5wLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODMKKyAgICAweDEucDEyLAorICAgIDB4MS5wMTIsIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDE4NAorICAgIDB4MS5wODAsCisgICAgMHgxLnAxMCwgMHgxLnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTg1CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wMTAsIDB4MS5wNQorICB9LAorICB7IC8vIEVudHJ5IDE4NgorICAgIDB4MS5wOTYsCisgICAgMHgxLnAxMiwgMHgxLnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTg3CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wMTIsIDB4MS5wNQorICB9LAorICB7IC8vIEVudHJ5IDE4OAorICAgIDB4MS4wMDAwMDEyNjA1NWNmZDQ0M2M1Mzc2OTMwZDE2OWYzMnAyLAorICAgIDB4MS42YTA5ZTZwLTEsIC0weDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODkKKyAgICAweDEuZmZmZmZkYjNmNTQ4YThkODI3YjY1Yzg4cC0zLAorICAgIDB4MS42YTA5ZTZwLTEsIDB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDE5MAorICAgIDB4MS4wMDAwMDEyNjA1NWNmZDQ0M2M1Mzc2OTMwZDE2OWYzMnAtMiwKKyAgICAweDEuNmEwOWU2cDAsIC0weDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTEKKyAgICAweDEuZmZmZmZkYjNmNTQ4YThkODI3YjY1Yzg4cDEsCisgICAgMHgxLjZhMDllNnAwLCAweDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTIKKyAgICAweDEuMDAwMDAxMjYwNTVjZmQ0NDNjNTM3NjkzMGQxNjlmMzJwMiwKKyAgICAweDEuNmEwOWU2cC0xLCAtMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTkzCisgICAgMHgxLmZmZmZmZGIzZjU0OGE4ZDgyN2I2NWM4OHAtMywKKyAgICAweDEuNmEwOWU2cC0xLCAweDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTQKKyAgICAweDEuMDAwMDAxMjYwNTVjZmQ0NDNjNTM3NjkzMGQxNjlmMzJwLTIsCisgICAgMHgxLjZhMDllNnAwLCAtMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTk1CisgICAgMHgxLmZmZmZmZGIzZjU0OGE4ZDgyN2I2NWM4OHAxLAorICAgIDB4MS42YTA5ZTZwMCwgMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTk2CisgICAgMHgxLjAwMTYyZjM5MTY2NzBkMTE5Njk3MTU0YWUzNTEyYzJkcDAsCisgICAgMHgxLjZhMDllNnAtMSwgLTB4MS5wLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMTk3CisgICAgMHgxLmZmZDNhNTY1Y2FmOGQyMzBkYWUxMjUwNjkzYTU1ZjIzcC0xLAorICAgIDB4MS42YTA5ZTZwLTEsIDB4MS5wLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMTk4CisgICAgMHgxLmZmZDNhNTY2MTQ3M2NiMjY5Zjg5NGI0MGQ2Y2Y5YmFjcC0xLAorICAgIDB4MS42YTA5ZTZwMCwgLTB4MS5wLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMTk5CisgICAgMHgxLjAwMTYyZjM4ZjFhMzMyMzBiYzM0MGJkMzc1MmZjMDk0cDAsCisgICAgMHgxLjZhMDllNnAwLCAweDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDIwMAorICAgIDB4MS45NDhiMGZjZDZlOWUwNjUyMmMzZjM1YmE3ODE5NDhiMHAxLAorICAgIDB4MS44MHAtMSwgLTB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDIwMQorICAgIDB4MS40NHAtMiwKKyAgICAweDEuODBwLTEsIDB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDIwMgorICAgIDB4MS45NDhiMGZjZDZlOWUwNjUyMmMzZjM1YmE3ODE5NDhiMHAtMywKKyAgICAweDEuODBwMCwgLTB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDIwMworICAgIDB4MS40NHAyLAorICAgIDB4MS44MHAwLCAweDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDQKKyAgICAweDEuMjc5YTc0NTkwMzMxYzRkMjE4ZjgxZTRhZmIyNTdkMDZwMCwKKyAgICAweDEuODBwLTEsIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjA1CisgICAgMHgxLmJiNjdhZTg1ODRjYWE3M2IyNTc0MmQ3MDc4YjgzYjg5cC0xLAorICAgIDB4MS44MHAtMSwgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIwNgorICAgIDB4MS5hMjBiZDcwMGMyYzNkZmMwNDJjYzFhZWQ3ODcxZGI0NXAtMSwKKyAgICAweDEuODBwMCwgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDcKKyAgICAweDEuMzk4OGUxNDA5MjEyZTdkMDMyMTkxNDMyMWE1NTY0NzNwMCwKKyAgICAweDEuODBwMCwgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIwOAorICAgIDB4MS4wMDEyNmEwYjkzZGIyOTRjYWJlMzNkYTczNTQzN2Y1MXAwLAorICAgIDB4MS44MHAtMSwgLTB4MS5wLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjA5CisgICAgMHgxLmZmZGIyZThlZDJhMWZlNzFiZDU5ZmRkNjEwMzEzMDQ2cC0xLAorICAgIDB4MS44MHAtMSwgMHgxLnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTAKKyAgICAweDEuZmZjYzFjNTk3M2IyMTI5YTViMTQyNGUwYzg4Nzg2YjhwLTEsCisgICAgMHgxLjgwcDAsIC0weDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDIxMQorICAgIDB4MS4wMDE5ZjQ3NGFhMTkwMDM4YzZhZjc3NWQ5MmYxZDcyNXAwLAorICAgIDB4MS44MHAwLCAweDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDIxMgorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIC0weDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTMKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAweDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTQKKyAgICAweDEucC00LAorICAgIDB4MS5wMSwgLTB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDIxNQorICAgIDB4MS5wNCwKKyAgICAweDEucDEsIDB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDIxNgorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjE3CisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIxOAorICAgIDB4MS42YTA5ZTY2N2YzYmNjOTA4YjJmYjEzNjZlYTk1N2QzZXAtMSwKKyAgICAweDEucDEsIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjE5CisgICAgMHgxLjZhMDllNjY3ZjNiY2M5MDhiMmZiMTM2NmVhOTU3ZDNlcDAsCisgICAgMHgxLnAxLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjIwCisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgLTB4MS5wLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjIxCisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgMHgxLnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjIKKyAgICAweDEuZmZhNzRlYTM4MWVmYzIxN2E3NzNmMTVjMDI1ZjdjMGRwLTEsCisgICAgMHgxLnAxLCAtMHgxLnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjMKKyAgICAweDEuMDAyYzYwNWUyZThjZWM1MDZkMjFiZmM4OWEyM2EwMTBwMCwKKyAgICAweDEucDEsIDB4MS5wLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjI0CisgICAgMHgxLnA0MCwKKyAgICAweDEucC0xMCwgLTB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDIyNQorICAgIDB4MS5wLTQwLAorICAgIDB4MS5wLTEwLCAweDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjYKKyAgICAweDEuZmUwMTNmNjA0NWU0MGE3YzQxNDk5MjIzYjRhMzhjZThwLTEsCisgICAgMHgxLjAwNDBwMCwgLTB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDIyNworICAgIDB4MS4wMTAwNjAxMDAxcDAsCisgICAgMHgxLjAwNDBwMCwgMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjI4CisgICAgMHgxLnA1LAorICAgIDB4MS5wLTEwLCAtMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIyOQorICAgIDB4MS5wLTUsCisgICAgMHgxLnAtMTAsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzAKKyAgICAweDEuZmZjMDBiZmQ4MDhiZTA4NzM2NTM2NDc0NDgyMjBmZGZwLTEsCisgICAgMHgxLjAwNDBwMCwgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzEKKyAgICAweDEuMDAxZmZlMDAzZmY2MDFiZmFjMTA3Y2E2YjI5YTBjMzFwMCwKKyAgICAweDEuMDA0MHAwLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjMyCisgICAgMHgxLjAxYmQxZTc3MTcwYjQxNWU3NjI2NjIxZWI1YWFmZjYxcDAsCisgICAgMHgxLnAtMTAsIC0weDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDIzMworICAgIDB4MS5mYzhiYzQ4NjZlOGFkMmI5NjNlMTgyOGIwNzYxY2JjNnAtMSwKKyAgICAweDEucC0xMCwgMHgxLnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzQKKyAgICAweDEuZmZmZmUwMDQwMDU1MzU1ODQ0NDQzZGY4NjgwYThlMDVwLTEsCisgICAgMHgxLjAwNDBwMCwgLTB4MS5wLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjM1CisgICAgMHgxLjAwMDAwZmZlMDBkNTI1NjI4NTM0MGU0ZjNhZDM2Mjg3cDAsCisgICAgMHgxLjAwNDBwMCwgMHgxLnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzYKKyAgICAweDEuMDAwMDAxMDAwMDAxMDAwMDAxMDAwMDAxMDAwMDAxcC0xMjgsCisgICAgMHgxLmZmZmZmZXAxMjcsIC0weDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzcKKyAgICAweDEuZmZmZmZlcDEyNywKKyAgICAweDEuZmZmZmZlcDEyNywgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjM4CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wLTE0OSwgLTB4MS5lNjY2NjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzkKKyAgICAweDEuNWRiNGVjYWIzZTFjYjk0MmZjOTBhMDAzZTc3ZGEyODJwLTE0MiwKKyAgICAweDEucC0xNDksIDB4MS5lNjY2NjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDAKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmVwLTcsIDB4MS5mZmZmZmVwNQorICB9LAorICB7IC8vIEVudHJ5IDI0MQorICAgIDAuMGYsCisgICAgMHgxLmZmZmZmZXAtNywgMHgxLnA2CisgIH0sCisgIHsgLy8gRW50cnkgMjQyCisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZlcC03LCAweDEuMDAwMDAycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDMKKyAgICAwLjBmLAorICAgIDB4MS5wLTYsIDB4MS5mZmZmZmVwNQorICB9LAorICB7IC8vIEVudHJ5IDI0NAorICAgIDAuMGYsCisgICAgMHgxLnAtNiwgMHgxLnA2CisgIH0sCisgIHsgLy8gRW50cnkgMjQ1CisgICAgMC4wZiwKKyAgICAweDEucC02LCAweDEuMDAwMDAycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDYKKyAgICAwLjBmLAorICAgIDB4MS4wMDAwMDJwLTYsIDB4MS5mZmZmZmVwNQorICB9LAorICB7IC8vIEVudHJ5IDI0NworICAgIDAuMGYsCisgICAgMHgxLjAwMDAwMnAtNiwgMHgxLnA2CisgIH0sCisgIHsgLy8gRW50cnkgMjQ4CisgICAgMC4wZiwKKyAgICAweDEuMDAwMDAycC02LCAweDEuMDAwMDAycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDkKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmVwLTYsIDB4MS5mZmZmZmVwNAorICB9LAorICB7IC8vIEVudHJ5IDI1MAorICAgIDAuMGYsCisgICAgMHgxLmZmZmZmZXAtNiwgMHgxLnA1CisgIH0sCisgIHsgLy8gRW50cnkgMjUxCisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZlcC02LCAweDEuMDAwMDAycDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTIKKyAgICAwLjBmLAorICAgIDB4MS5wLTUsIDB4MS5mZmZmZmVwNAorICB9LAorICB7IC8vIEVudHJ5IDI1MworICAgIDAuMGYsCisgICAgMHgxLnAtNSwgMHgxLnA1CisgIH0sCisgIHsgLy8gRW50cnkgMjU0CisgICAgMC4wZiwKKyAgICAweDEucC01LCAweDEuMDAwMDAycDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTUKKyAgICAwLjBmLAorICAgIDB4MS4wMDAwMDJwLTUsIDB4MS5mZmZmZmVwNAorICB9LAorICB7IC8vIEVudHJ5IDI1NgorICAgIDAuMGYsCisgICAgMHgxLjAwMDAwMnAtNSwgMHgxLnA1CisgIH0sCisgIHsgLy8gRW50cnkgMjU3CisgICAgMC4wZiwKKyAgICAweDEuMDAwMDAycC01LCAweDEuMDAwMDAycDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTgKKyAgICAweDEuMDAwMDFjNWM4Nzk4MjNlM2FmMzliYWEyMjFkZjg0YjBwLTY0LAorICAgIDB4MS5mZmZmZmVwLTUsIDB4MS5mZmZmZmVwMworICB9LAorICB7IC8vIEVudHJ5IDI1OQorICAgIDB4MS5mZmZmZTAwMDAwZWZmZmZiYTAwMDBlMzdmZmRkZTBwLTY1LAorICAgIDB4MS5mZmZmZmVwLTUsIDB4MS5wNAorICB9LAorICB7IC8vIEVudHJ5IDI2MAorICAgIDB4MS5mZmZmMmU4ZTEyOGYwN2Y4YWE5NWZiOGIzNWQ3MmVhNHAtNjUsCisgICAgMHgxLmZmZmZmZXAtNSwgMHgxLjAwMDAwMnA0CisgIH0sCisgIHsgLy8gRW50cnkgMjYxCisgICAgMHgxLjAwMDAyYzVjODlkNWVjNmNhNGQ3YzhhY2MwMTdiN2M5cC02NCwKKyAgICAweDEucC00LCAweDEuZmZmZmZlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjIKKyAgICAweDEucC02NCwKKyAgICAweDEucC00LCAweDEucDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjMKKyAgICAweDEuZmZmZjRlOGUwNmM3ZThhMmE4NGRhZWQ4ZWM1NmQ2YzNwLTY1LAorICAgIDB4MS5wLTQsIDB4MS4wMDAwMDJwNAorICB9LAorICB7IC8vIEVudHJ5IDI2NAorICAgIDB4MS4wMDAwNGM1YzkxMjE3ZTAyYTQ1OTJiYTdhZDVkZjMyZXAtNjQsCisgICAgMHgxLjAwMDAwMnAtNCwgMHgxLmZmZmZmZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMjY1CisgICAgMHgxLjAwMDAyMDAwMDFlMDAwMTE4MDAwNzFjMDAyMjIwMDA3cC02NCwKKyAgICAweDEuMDAwMDAycC00LCAweDEucDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjYKKyAgICAweDEuZmZmZjhlOGRmNGQ5YTgzNTEzMjBjMDVkM2Q4MTRmOWZwLTY1LAorICAgIDB4MS4wMDAwMDJwLTQsIDB4MS4wMDAwMDJwNAorICB9LAorICB7IC8vIEVudHJ5IDI2NworICAgIDB4MS4wMDAwMDhhMmIyNjg4NGYxMDY4YjgxODg5NDY3ZDY3ZnAtMjQsCisgICAgMHgxLmZmZmZmZXAtNCwgMHgxLmZmZmZmZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjY4CisgICAgMHgxLmZmZmZmMDAwMDAzN2ZmZmY5MDAwMDA4YmZmZmY5MHAtMjUsCisgICAgMHgxLmZmZmZmZXAtNCwgMHgxLnAzCisgIH0sCisgIHsgLy8gRW50cnkgMjY5CisgICAgMHgxLmZmZmZhZDc1M2Q4MjVkZmNkZDY1ZTRlYTU0Y2NjZWI1cC0yNSwKKyAgICAweDEuZmZmZmZlcC00LCAweDEuMDAwMDAycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzAKKyAgICAweDEuMDAwMDEwYTJiMmM5OWE4NTcwN2U4ZjEzZGM2NDg3MTBwLTI0LAorICAgIDB4MS5wLTMsIDB4MS5mZmZmZmVwMgorICB9LAorICB7IC8vIEVudHJ5IDI3MQorICAgIDB4MS5wLTI0LAorICAgIDB4MS5wLTMsIDB4MS5wMworICB9LAorICB7IC8vIEVudHJ5IDI3MgorICAgIDB4MS5mZmZmYmQ3NTNiNTYwN2RhMmMyNjAwNjQ4MjNiMzBhN3AtMjUsCisgICAgMHgxLnAtMywgMHgxLjAwMDAwMnAzCisgIH0sCisgIHsgLy8gRW50cnkgMjczCisgICAgMHgxLjAwMDAyMGEyYjQzM2M1YjkxNzI5ZmUwNDkzMzIxZDNmcC0yNCwKKyAgICAweDEuMDAwMDAycC0zLCAweDEuZmZmZmZlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzQKKyAgICAweDEuMDAwMDEwMDAwMDcwMDAwMWMwMDAwNDYwMDAwN3AtMjQsCisgICAgMHgxLjAwMDAwMnAtMywgMHgxLnAzCisgIH0sCisgIHsgLy8gRW50cnkgMjc1CisgICAgMHgxLmZmZmZkZDc1Mzg0ZDViNzE1ZTk0Mzc2OTk1MzQ4ODNicC0yNSwKKyAgICAweDEuMDAwMDAycC0zLCAweDEuMDAwMDAycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzYKKyAgICAweDEuMDAwMDAxOGI5MGMyZjAyYTgwZjNiYjgyYWExMmU5NWRwLTgsCisgICAgMHgxLmZmZmZmZXAtMywgMHgxLmZmZmZmZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMjc3CisgICAgMHgxLmZmZmZmODAwMDAwYmZmZmZmODAwMDAwMnAtOSwKKyAgICAweDEuZmZmZmZlcC0zLCAweDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzgKKyAgICAweDEuZmZmZmUxZDFiZGQwYmRjNmI0NmVhNjRhNDJiMWJhZDJwLTksCisgICAgMHgxLmZmZmZmZXAtMywgMHgxLjAwMDAwMnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjc5CisgICAgMHgxLjAwMDAwNThiOTBjZjFlNmQ5N2Y5Y2ExNGRiY2MxNjI4cC04LAorICAgIDB4MS5wLTIsIDB4MS5mZmZmZmVwMQorICB9LAorICB7IC8vIEVudHJ5IDI4MAorICAgIDB4MS5wLTgsCisgICAgMHgxLnAtMiwgMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjgxCisgICAgMHgxLmZmZmZlOWQxYmQ3YzA0YmM0ODI1MTQ3YThjMGU2M2UzcC05LAorICAgIDB4MS5wLTIsIDB4MS4wMDAwMDJwMgorICB9LAorICB7IC8vIEVudHJ5IDI4MgorICAgIDB4MS4wMDAwMGQ4YjkxMGI3YWY0NTFhNjQyZTZkMGI2NmIwNnAtOCwKKyAgICAweDEuMDAwMDAycC0yLCAweDEuZmZmZmZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODMKKyAgICAweDEuMDAwMDA4MDAwMDE4MDAwMDIwMDAwMDEwcC04LAorICAgIDB4MS4wMDAwMDJwLTIsIDB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDI4NAorICAgIDB4MS5mZmZmZjlkMWJkMWE5MmE1ZDExMDg4ZWQxNzQxN2Y0MXAtOSwKKyAgICAweDEuMDAwMDAycC0yLCAweDEuMDAwMDAycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODUKKyAgICAweDEuZmZmZmZlYzVjODYyM2ZiMjVkN2QwNmFjNjFhMzA2M2ZwLTMsCisgICAgMHgxLmZmZmZmZXAtMiwgMHgxLmZmZmZmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjg2CisgICAgMHgxLmZmZmZmYzAwMDAwMnAtMywKKyAgICAweDEuZmZmZmZlcC0yLCAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODcKKyAgICAweDEuZmZmZmY2NzQ2ZjRkMDg4Mjg5Yjg4MGZlMDJhZGJmZGVwLTMsCisgICAgMHgxLmZmZmZmZXAtMiwgMHgxLjAwMDAwMnAxCisgIH0sCisgIHsgLy8gRW50cnkgMjg4CisgICAgMHgxLjAwMDAwMTYyZTQzMGU1YTE4ZjYxMTllM2MwMjI4MmE1cC0yLAorICAgIDB4MS5wLTEsIDB4MS5mZmZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDI4OQorICAgIDB4MS5wLTIsCisgICAgMHgxLnAtMSwgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgMjkwCisgICAgMHgxLmZmZmZmYTc0NmY0N2YxNjBmY2Y4OTBlM2I4MDFhZWRkcC0zLAorICAgIDB4MS5wLTEsIDB4MS4wMDAwMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDI5MQorICAgIDB4MS4wMDAwMDU2MmU0MzY3MTMyNDZmN2EwMTM0YzgyODdlYXAtMiwKKyAgICAweDEuMDAwMDAycC0xLCAweDEuZmZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTIKKyAgICAweDEuMDAwMDA0MDAwMDA0cC0yLAorICAgIDB4MS4wMDAwMDJwLTEsIDB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDI5MworICAgIDB4MS4wMDAwMDEzYTM3YTRlMThmMDUxOWE2MDM5NTRhNWIwYnAtMiwKKyAgICAweDEuMDAwMDAycC0xLCAweDEuMDAwMDAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTQKKyAgICAweDEuZmZmZmZlMDAwMDAxZmZmZmZmMDAwMDAwYWFhYWFhODBwLTEsCisgICAgMHgxLmZmZmZmZXAtMSwgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI5NQorICAgIDB4MS5mZmZmZmVwLTEsCisgICAgMHgxLmZmZmZmZXAtMSwgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjk2CisgICAgMHgxLmZmZmZmZGZmZmZmYzAwMDAwMjAwMDAwNGFhYWFhYWZmcC0xLAorICAgIDB4MS5mZmZmZmVwLTEsIDB4MS4wMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDI5NworICAgIDB4MS5wMCwKKyAgICAweDEucDAsIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTgKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAweDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTkKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAweDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDAKKyAgICAweDEuMDAwMDAxZmZmZmZkZmZmZmZlMDAwMDAzNTU1NTUzZmZwMCwKKyAgICAweDEuMDAwMDAycDAsIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDEKKyAgICAweDEuMDAwMDAycDAsCisgICAgMHgxLjAwMDAwMnAwLCAweDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDIKKyAgICAweDEuMDAwMDAyMDAwMDA0MDAwMDA0MDAwMDA1NTU1NTU4cDAsCisgICAgMHgxLjAwMDAwMnAwLCAweDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDMKKyAgICAweDEuNmEwOWU1MzU3NWIxMjM2MjVjYzE5NjhhNjY1NTgxYTRwMCwKKyAgICAweDEuZmZmZmZlcDAsIDB4MS5mZmZmZmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDQKKyAgICAweDEuNmEwOWU1YjJlZWM5NjdjZDk3YjJlZmY3NWY0NzE0OTNwMCwKKyAgICAweDEuZmZmZmZlcDAsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDUKKyAgICAweDEuNmEwOWU2YWRlMGZhNzMxOTA1MmM0OTQ4ZGVhNDhhNzZwMCwKKyAgICAweDEuZmZmZmZlcDAsIDB4MS4wMDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDYKKyAgICAweDEuNmEwOWU1ZWE3YWEzOTBkYmY4NjhiNzI3OGI3NDQ4MjlwMCwKKyAgICAweDEucDEsIDB4MS5mZmZmZmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDcKKyAgICAweDEuNmEwOWU2NjdmM2JjYzkwOGIyZmIxMzY2ZWE5NTdkM2VwMCwKKyAgICAweDEucDEsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDgKKyAgICAweDEuNmEwOWU3NjJlNWVmYmJkNzIxNzAxODI1MGEzYWIxOTRwMCwKKyAgICAweDEucDEsIDB4MS4wMDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDkKKyAgICAweDEuNmEwOWU3NTQ4NDg3NWM0N2MzY2VlMDFkOWYzNDhiZDhwMCwKKyAgICAweDEuMDAwMDAycDEsIDB4MS5mZmZmZmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTAKKyAgICAweDEuNmEwOWU3ZDFmZGEyN2JmNzdkNDUyNzJkZDJkODNhNGJwMCwKKyAgICAweDEuMDAwMDAycDEsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTEKKyAgICAweDEuNmEwOWU4Y2NlZmQ5M2RjYmVjZjU0ZDIzM2VhODI2NWJwMCwKKyAgICAweDEuMDAwMDAycDEsIDB4MS4wMDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTIKKyAgICAweDEuNmEwOWU1OGZmODJhNGVjZWRiNzNmNzY2ZDNkMDc1OGRwMCwKKyAgICAweDEuZmZmZmZlcDEsIDB4MS5mZmZmZmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTMKKyAgICAweDEuNmEwOWU2MGQ3MTQzMGQxYWQ2MWI0NWQ1ZDFhYmRmMTVwMCwKKyAgICAweDEuZmZmZmZlcDEsIDB4MS5wLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTQKKyAgICAweDEuNmEwOWU3MDg2Mzc1MGMyN2MzZGQ1YzBlY2RjZTUyNzFwMCwKKyAgICAweDEuZmZmZmZlcDEsIDB4MS4wMDAwMDJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTUKKyAgICAweDEuNmEwOWU1ZWE3YWEzOTBkYmY4NjhiNzI3OGI3NDQ4MjlwMCwKKyAgICAweDEucDIsIDB4MS5mZmZmZmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTYKKyAgICAweDEuNmEwOWU2NjdmM2JjYzkwOGIyZmIxMzY2ZWE5NTdkM2VwMCwKKyAgICAweDEucDIsIDB4MS5wLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTcKKyAgICAweDEuNmEwOWU3NjJlNWVmYmJkNzIxNzAxODI1MGEzYWIxOTRwMCwKKyAgICAweDEucDIsIDB4MS4wMDAwMDJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTgKKyAgICAweDEuNmEwOWU2OWY3Zjk1NDk1MGExZmNlMGExYjJjMzYyZDBwMCwKKyAgICAweDEuMDAwMDAycDIsIDB4MS5mZmZmZmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTkKKyAgICAweDEuNmEwOWU3MWNmOGFmNzUzZWRiOTcwMGFkOTA2YzljZDlwMCwKKyAgICAweDEuMDAwMDAycDIsIDB4MS5wLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjAKKyAgICAweDEuNmEwOWU4MTdlYWU0NGY5MDQ5ZDUzMmNkYTJhOTBjYjZwMCwKKyAgICAweDEuMDAwMDAycDIsIDB4MS4wMDAwMDJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjEKKyAgICAweDEuNGJmZGFjZDM5NzhhZGY5ZjNiNjRmZTAxZjQwNTkzYWVwMCwKKyAgICAweDEuZmZmZmZlcDIsIDB4MS5mZmZmZmVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjIKKyAgICAweDEuNGJmZGFkMjllMmVjYjU0MDA1YTZkYmVjNjdjNWU0MTNwMCwKKyAgICAweDEuZmZmZmZlcDIsIDB4MS5wLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjMKKyAgICAweDEuNGJmZGFkZDY3OWIwYTNjYzQwZWNiNjBhZmRjNGE1NTJwMCwKKyAgICAweDEuZmZmZmZlcDIsIDB4MS4wMDAwMDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjQKKyAgICAweDEuNGJmZGFjZmQxNzQwNjdlYTRkNDNmOGIwOWY5NzRkODZwMCwKKyAgICAweDEucDMsIDB4MS5mZmZmZmVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjUKKyAgICAweDEuNGJmZGFkNTM2MmEyNzFkNDM5N2FmZWM0MmUyMGUwMzZwMCwKKyAgICAweDEucDMsIDB4MS5wLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjYKKyAgICAweDEuNGJmZGFkZmZmOTY2YzhmMmI4ZjQ0YjEzN2ZiZmFhOTZwMCwKKyAgICAweDEucDMsIDB4MS4wMDAwMDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjcKKyAgICAweDEuNGJmZGFkNTAxNmFiMGI5MTM0ZTA1NzRhYmNhNzhiN2FwMCwKKyAgICAweDEuMDAwMDAycDMsIDB4MS5mZmZmZmVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjgKKyAgICAweDEuNGJmZGFkYTY2MjBkN2UwZDY0ODdmZDliZTY0ODg3YTNwMCwKKyAgICAweDEuMDAwMDAycDMsIDB4MS5wLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjkKKyAgICAweDEuNGJmZGFlNTJmOGQyYTY1MDZiNzRjZTIzMmZkY2QyOTFwMCwKKyAgICAweDEuMDAwMDAycDMsIDB4MS4wMDAwMDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzAKKyAgICAweDEuMzA2ZmUwNWI1MzMxMzFjMjc2MTJjZmZmN2EwZmZkYjBwMCwKKyAgICAweDEuZmZmZmZlcDMsIDB4MS5mZmZmZmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzEKKyAgICAweDEuMzA2ZmUwOTAxNDczM2ZjMThmMmE4ZTViYzhhMzBjZGNwMCwKKyAgICAweDEuZmZmZmZlcDMsIDB4MS5wLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzIKKyAgICAweDEuMzA2ZmUwZjk5NmY3NzcyYzlhOTRjMTYwODM0NDYyNjJwMCwKKyAgICAweDEuZmZmZmZlcDMsIDB4MS4wMDAwMDJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzMKKyAgICAweDEuMzA2ZmUwNmU1YTJmMmU4YzYyMGY3ZTU1Y2M4MDNkYmFwMCwKKyAgICAweDEucDQsIDB4MS5mZmZmZmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzQKKyAgICAweDEuMzA2ZmUwYTMxYjcxNTJkZThkNWE0NjMwNWM4NWVkZWNwMCwKKyAgICAweDEucDQsIDB4MS5wLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzUKKyAgICAweDEuMzA2ZmUxMGM5ZGY1YjZlZmJkNDAwYjc4MDYwMDVmYTlwMCwKKyAgICAweDEucDQsIDB4MS4wMDAwMDJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzYKKyAgICAweDEuMzA2ZmUwOTQ2ODJhZjI5YzhmZTlmNzM1ZmIxYzQwODFwMCwKKyAgICAweDEuMDAwMDAycDQsIDB4MS5mZmZmZmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzcKKyAgICAweDEuMzA2ZmUwYzkyOTZkNDM5NGRmNWY5OWI5YmQxYTQ3ZDJwMCwKKyAgICAweDEuMDAwMDAycDQsIDB4MS5wLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzgKKyAgICAweDEuMzA2ZmUxMzJhYmYyMDBmMjU3YzYxMmUwN2YxNDlhYTNwMCwKKyAgICAweDEuMDAwMDAycDQsIDB4MS4wMDAwMDJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzkKKyAgICAweDEuMWQ0ODcyZWViYjlkYTAzYmJhYzVhZjc5YjBjZjk0MDlwMCwKKyAgICAweDEuZmZmZmZlcDQsIDB4MS5mZmZmZmVwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDAKKyAgICAweDEuMWQ0ODczMGRhMTU3MGE3YTg1ZWExZmMxZmNmODhmZGRwMCwKKyAgICAweDEuZmZmZmZlcDQsIDB4MS5wLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDEKKyAgICAweDEuMWQ0ODczNGI2Y2M5ZTkwMjE0OGZhZmNlZmE5ZWFhMDZwMCwKKyAgICAweDEuZmZmZmZlcDQsIDB4MS4wMDAwMDJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDIKKyAgICAweDEuMWQ0ODcyZjdhNWUxMzM2MDFlZjNiNDk1ZjNmODlhMTJwMCwKKyAgICAweDEucDUsIDB4MS5mZmZmZmVwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDMKKyAgICAweDEuMWQ0ODczMTY4YjlhYTc4MDViODAyODk5MGYwN2E5OGJwMCwKKyAgICAweDEucDUsIDB4MS5wLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDQKKyAgICAweDEuMWQ0ODczNTQ1NzBkOTljYWNjZmJkYjdlMzVmZjBkZjFwMCwKKyAgICAweDEucDUsIDB4MS4wMDAwMDJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDUKKyAgICAweDEuMWQ0ODczMDk3YTY4M2ZjMDEzMDhkNGE3MTYxNWI4MjBwMCwKKyAgICAweDEuMDAwMDAycDUsIDB4MS5mZmZmZmVwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDYKKyAgICAweDEuMWQ0ODczMjg2MDIxYzdhMzMyNDk2ZWU0YWQ5MWFkZTlwMCwKKyAgICAweDEuMDAwMDAycDUsIDB4MS5wLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDcKKyAgICAweDEuMWQ0ODczNjYyYjk0ZTE3MzY5MzlhNTAzZDgzYzVlNDJwMCwKKyAgICAweDEuMDAwMDAycDUsIDB4MS4wMDAwMDJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDgKKyAgICAweDEuMTEzMDFjZWIyMDU0MWZmM2Y2NTVlM2JkMTIyNzFiM2VwMCwKKyAgICAweDEuZmZmZmZlcDUsIDB4MS5mZmZmZmVwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDkKKyAgICAweDEuMTEzMDFjZmNlMGY0OTQzMDRlNjMwNzk5ZmM4YjE4MWZwMCwKKyAgICAweDEuZmZmZmZlcDUsIDB4MS5wLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTAKKyAgICAweDEuMTEzMDFkMjA2MjM1ODAxZWY1NTgwODk0MzU0ZjkwMGNwMCwKKyAgICAweDEuZmZmZmZlcDUsIDB4MS4wMDAwMDJwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTEKKyAgICAweDEuMTEzMDFjZWY2NTE0OTE4NmEwZWNiNjA3MTM1NjViNDVwMCwKKyAgICAweDEucDYsIDB4MS5mZmZmZmVwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTIKKyAgICAweDEuMTEzMDFkMDEyNWI1MGE0ZWJiZjFhZWQ5MzE4Y2VhYzVwMCwKKyAgICAweDEucDYsIDB4MS5wLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTMKKyAgICAweDEuMTEzMDFkMjRhNmY1ZmY1NGU4ZDgxMWE0Yjk3OGI1NGZwMCwKKyAgICAweDEucDYsIDB4MS4wMDAwMDJwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTQKKyAgICAweDEuMTEzMDFjZjdlZTk1NjgxMGVkZDk0ZDFjNzY5N2YzNGJwMCwKKyAgICAweDEuMDAwMDAycDYsIDB4MS5mZmZmZmVwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTUKKyAgICAweDEuMTEzMDFkMDlhZjM1ZTlmMDhlYzBiNjU2NGNmZDRkM2FwMCwKKyAgICAweDEuMDAwMDAycDYsIDB4MS5wLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTYKKyAgICAweDEuMTEzMDFkMmQzMDc2ZjEyNWM3NmY2OWJmMTA3ZjQwNTJwMCwKKyAgICAweDEuMDAwMDAycDYsIDB4MS4wMDAwMDJwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTcKKyAgICAweDEuZmZmYzlkMWVhZmYxZTJiYzcwOGZiYjlmYzE0MWQxODZwMTI3LAorICAgIDB4MS5mZmZmZmNwMCwgMHgxLmZmZmZmY3A2CisgIH0sCisgIHsgLy8gRW50cnkgMzU4CisgICAgMHgxLmZmZmQ0ZThmYjgzOTMzY2JmNWY4MjdlMjU4MWYyMGRjcDEyNywKKyAgICAweDEuZmZmZmZjcDAsIDB4MS5mZmZmZmVwNgorICB9LAorICB7IC8vIEVudHJ5IDM1OQorICAgIDB4MS5mZmZlMDAwMGZkZmZhY2E4MTQ1OGY4MGVjMzAxYTJjOHAxMjcsCisgICAgMHgxLmZmZmZmY3AwLCAweDEucDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjAKKyAgICAweDEuZmZmZjYyZTQ0MjBhNmIwNmQ3MDJmNGUyYWFmZmE0ZTVwMTI3LAorICAgIDB4MS5mZmZmZmNwMCwgMHgxLjAwMDAwMnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzYxCisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5mZmZmZmNwMCwgMHgxLjAwMDAwNHA3CisgIH0sCisgIHsgLy8gRW50cnkgMzYyCisgICAgMHgxLmZmZmQ5ZDFkM2UwMGQ5OWJkZmUzNjE5ZjA1ZjJlY2MxcDEyNywKKyAgICAweDEuZmZmZmZlcDAsIDB4MS5mZmZmZmNwNgorICB9LAorICB7IC8vIEVudHJ5IDM2MworICAgIDB4MS5mZmZlNGU4ZWEwMDBjM2Y5OWQ4NGQ4ODZjMDM4MTFmYXAxMjcsCisgICAgMHgxLmZmZmZmZXAwLCAweDEuZmZmZmZlcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjQKKyAgICAweDEuZmZmZjAwMDAzZjdmZjU5NTAxNDU4ZmEwNzYxNTg2OGJwMTI3LAorICAgIDB4MS5mZmZmZmVwMCwgMHgxLnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzY1CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5mZmZmZmVwMCwgMHgxLjAwMDAwMnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzY2CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5mZmZmZmVwMCwgMHgxLjAwMDAwNHA3CisgIH0sCisgIHsgLy8gRW50cnkgMzY3CisgICAgMHgxLmZmZmU5ZDFjNGIwZjM3ZjQxM2Q0NGM2NmMwNDgxODM0cDEyNywKKyAgICAweDEucDEsIDB4MS5mZmZmZmNwNgorICB9LAorICB7IC8vIEVudHJ5IDM2OAorICAgIDB4MS5mZmZmNGU4ZTA2YzdlOGEyYTg0ZGFlZDhlYzU2ZDZjM3AxMjcsCisgICAgMHgxLnAxLCAweDEuZmZmZmZlcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjkKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLnAxLCAweDEucDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzAKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLnAxLCAweDEuMDAwMDAycDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzEKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLnAxLCAweDEuMDAwMDA0cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzIKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLjAwMDAwMnAxLCAweDEuZmZmZmZjcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzMKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLjAwMDAwMnAxLCAweDEuZmZmZmZlcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzQKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLjAwMDAwMnAxLCAweDEucDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzUKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLjAwMDAwMnAxLCAweDEuMDAwMDAycDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzYKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLjAwMDAwMnAxLCAweDEuMDAwMDA0cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzcKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLjAwMDAwNHAxLCAweDEuZmZmZmZjcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzgKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLjAwMDAwNHAxLCAweDEuZmZmZmZlcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzkKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLjAwMDAwNHAxLCAweDEucDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODAKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLjAwMDAwNHAxLCAweDEuMDAwMDAycDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODEKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLjAwMDAwNHAxLCAweDEuMDAwMDA0cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODIKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmNwMCwgLTB4MS4yYzAwMDRwNworICB9LAorICB7IC8vIEVudHJ5IDM4MworICAgIDAuMGYsCisgICAgMHgxLmZmZmZmY3AwLCAtMHgxLjJjMDAwMnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzg0CisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZjcDAsIC0weDEuMmNwNworICB9LAorICB7IC8vIEVudHJ5IDM4NQorICAgIDAuMGYsCisgICAgMHgxLmZmZmZmY3AwLCAtMHgxLjJiZmZmZXA3CisgIH0sCisgIHsgLy8gRW50cnkgMzg2CisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZjcDAsIC0weDEuMmJmZmZjcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODcKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmVwMCwgLTB4MS4yYzAwMDRwNworICB9LAorICB7IC8vIEVudHJ5IDM4OAorICAgIDAuMGYsCisgICAgMHgxLmZmZmZmZXAwLCAtMHgxLjJjMDAwMnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzg5CisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZlcDAsIC0weDEuMmNwNworICB9LAorICB7IC8vIEVudHJ5IDM5MAorICAgIDAuMGYsCisgICAgMHgxLmZmZmZmZXAwLCAtMHgxLjJiZmZmZXA3CisgIH0sCisgIHsgLy8gRW50cnkgMzkxCisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZlcDAsIC0weDEuMmJmZmZjcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTIKKyAgICAwLjBmLAorICAgIDB4MS5wMSwgLTB4MS4yYzAwMDRwNworICB9LAorICB7IC8vIEVudHJ5IDM5MworICAgIDAuMGYsCisgICAgMHgxLnAxLCAtMHgxLjJjMDAwMnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzk0CisgICAgMC4wZiwKKyAgICAweDEucDEsIC0weDEuMmNwNworICB9LAorICB7IC8vIEVudHJ5IDM5NQorICAgIDAuMGYsCisgICAgMHgxLnAxLCAtMHgxLjJiZmZmZXA3CisgIH0sCisgIHsgLy8gRW50cnkgMzk2CisgICAgMC4wZiwKKyAgICAweDEucDEsIC0weDEuMmJmZmZjcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTcKKyAgICAwLjBmLAorICAgIDB4MS4wMDAwMDJwMSwgLTB4MS4yYzAwMDRwNworICB9LAorICB7IC8vIEVudHJ5IDM5OAorICAgIDAuMGYsCisgICAgMHgxLjAwMDAwMnAxLCAtMHgxLjJjMDAwMnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzk5CisgICAgMC4wZiwKKyAgICAweDEuMDAwMDAycDEsIC0weDEuMmNwNworICB9LAorICB7IC8vIEVudHJ5IDQwMAorICAgIDAuMGYsCisgICAgMHgxLjAwMDAwMnAxLCAtMHgxLjJiZmZmZXA3CisgIH0sCisgIHsgLy8gRW50cnkgNDAxCisgICAgMC4wZiwKKyAgICAweDEuMDAwMDAycDEsIC0weDEuMmJmZmZjcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDIKKyAgICAwLjBmLAorICAgIDB4MS4wMDAwMDRwMSwgLTB4MS4yYzAwMDRwNworICB9LAorICB7IC8vIEVudHJ5IDQwMworICAgIDAuMGYsCisgICAgMHgxLjAwMDAwNHAxLCAtMHgxLjJjMDAwMnA3CisgIH0sCisgIHsgLy8gRW50cnkgNDA0CisgICAgMC4wZiwKKyAgICAweDEuMDAwMDA0cDEsIC0weDEuMmNwNworICB9LAorICB7IC8vIEVudHJ5IDQwNQorICAgIDAuMGYsCisgICAgMHgxLjAwMDAwNHAxLCAtMHgxLjJiZmZmZXA3CisgIH0sCisgIHsgLy8gRW50cnkgNDA2CisgICAgMC4wZiwKKyAgICAweDEuMDAwMDA0cDEsIC0weDEuMmJmZmZjcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDcKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYjJwLTIsIDB4MS5jMzBjMmNwOAorICB9LAorICB7IC8vIEVudHJ5IDQwOAorICAgIDAuMGYsCisgICAgMHgxLmRiNmRiMnAtMiwgMHgxLmMzMGMyZXA4CisgIH0sCisgIHsgLy8gRW50cnkgNDA5CisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGIycC0yLCAweDEuYzMwYzMwcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTAKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYjJwLTIsIDB4MS5jMzBjMzJwOAorICB9LAorICB7IC8vIEVudHJ5IDQxMQorICAgIDAuMGYsCisgICAgMHgxLmRiNmRiMnAtMiwgMHgxLmMzMGMzNHA4CisgIH0sCisgIHsgLy8gRW50cnkgNDEyCisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGI0cC0yLCAweDEuYzMwYzJjcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTMKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYjRwLTIsIDB4MS5jMzBjMmVwOAorICB9LAorICB7IC8vIEVudHJ5IDQxNAorICAgIDAuMGYsCisgICAgMHgxLmRiNmRiNHAtMiwgMHgxLmMzMGMzMHA4CisgIH0sCisgIHsgLy8gRW50cnkgNDE1CisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGI0cC0yLCAweDEuYzMwYzMycDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTYKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYjRwLTIsIDB4MS5jMzBjMzRwOAorICB9LAorICB7IC8vIEVudHJ5IDQxNworICAgIDAuMGYsCisgICAgMHgxLmRiNmRiNnAtMiwgMHgxLmMzMGMyY3A4CisgIH0sCisgIHsgLy8gRW50cnkgNDE4CisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGI2cC0yLCAweDEuYzMwYzJlcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTkKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYjZwLTIsIDB4MS5jMzBjMzBwOAorICB9LAorICB7IC8vIEVudHJ5IDQyMAorICAgIDAuMGYsCisgICAgMHgxLmRiNmRiNnAtMiwgMHgxLmMzMGMzMnA4CisgIH0sCisgIHsgLy8gRW50cnkgNDIxCisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGI2cC0yLCAweDEuYzMwYzM0cDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjIKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYjhwLTIsIDB4MS5jMzBjMmNwOAorICB9LAorICB7IC8vIEVudHJ5IDQyMworICAgIDAuMGYsCisgICAgMHgxLmRiNmRiOHAtMiwgMHgxLmMzMGMyZXA4CisgIH0sCisgIHsgLy8gRW50cnkgNDI0CisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGI4cC0yLCAweDEuYzMwYzMwcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjUKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYjhwLTIsIDB4MS5jMzBjMzJwOAorICB9LAorICB7IC8vIEVudHJ5IDQyNgorICAgIDAuMGYsCisgICAgMHgxLmRiNmRiOHAtMiwgMHgxLmMzMGMzNHA4CisgIH0sCisgIHsgLy8gRW50cnkgNDI3CisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGJhcC0yLCAweDEuYzMwYzJjcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjgKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYmFwLTIsIDB4MS5jMzBjMmVwOAorICB9LAorICB7IC8vIEVudHJ5IDQyOQorICAgIDAuMGYsCisgICAgMHgxLmRiNmRiYXAtMiwgMHgxLmMzMGMzMHA4CisgIH0sCisgIHsgLy8gRW50cnkgNDMwCisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGJhcC0yLCAweDEuYzMwYzMycDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzEKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYmFwLTIsIDB4MS5jMzBjMzRwOAorICB9LAorICB7IC8vIEVudHJ5IDQzMgorICAgIC0weDEuZmZmZmZjMDAwMDA3ZmZmZmYwMDAwMDFmZmZmZmMwcC0xLAorICAgIC0weDEuMDAwMDAycDAsIC0weDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzMKKyAgICAtMHgxLnAwLAorICAgIC0weDEucDAsIC0weDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzQKKyAgICAtMHgxLjAwMDAwMTAwMDAwMTAwMDAwMTAwMDAwMTAwMDAwMXAwLAorICAgIC0weDEuZmZmZmZlcC0xLCAtMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDM1CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wMSwgMHgxLnAxMAorICB9LAorICB7IC8vIEVudHJ5IDQzNgorICAgIEhVR0VfVkFMRiwKKyAgICAweDEucDIsIDB4MS5wOQorICB9LAorICB7IC8vIEVudHJ5IDQzNworICAgIDAuMGYsCisgICAgMHgxLmZmZmZmZXAtMiwgMHgxLmZmZmZmZXA5CisgIH0sCisgIHsgLy8gRW50cnkgNDM4CisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZlcC0yLCAweDEucDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDM5CisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZlcC0yLCAweDEuMDAwMDAycDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDQwCisgICAgMC4wZiwKKyAgICAweDEucC0xLCAweDEuZmZmZmZlcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDEKKyAgICAwLjBmLAorICAgIDB4MS5wLTEsIDB4MS5wMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDIKKyAgICAwLjBmLAorICAgIDB4MS5wLTEsIDB4MS4wMDAwMDJwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDMKKyAgICAwLjBmLAorICAgIDB4MS4wMDAwMDJwLTEsIDB4MS5mZmZmZmVwOQorICB9LAorICB7IC8vIEVudHJ5IDQ0NAorICAgIDAuMGYsCisgICAgMHgxLjAwMDAwMnAtMSwgMHgxLnAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ0NQorICAgIDAuMGYsCisgICAgMHgxLjAwMDAwMnAtMSwgMHgxLjAwMDAwMnAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ0NgorICAgIDB4MS4wMDAyMDQ2NzEwOTU0NzU3MmZhOGYzZjY1M2VkYTU0OHAtMTQ5LAorICAgIDB4MS5wLTE0OSwgMHgxLmZmZmZmNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ0NworICAgIDB4MS4wMDAxOWQxZWVkMjFmNDQ4ZjJjNjIxN2VhYjNkOWM1NXAtMTQ5LAorICAgIDB4MS5wLTE0OSwgMHgxLmZmZmZmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ0OAorICAgIDB4MS4wMDAxMzVkNmYzNTk2ZTA4NmQ0NjMzNzZhOWRiZDFlMnAtMTQ5LAorICAgIDB4MS5wLTE0OSwgMHgxLmZmZmZmYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ0OQorICAgIDB4MS4wMDAwY2U4ZjIzM2JhM2M2NGFkYzU2NjdhN2IwYjI0NXAtMTQ5LAorICAgIDB4MS5wLTE0OSwgMHgxLmZmZmZmY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDQ1MAorICAgIDB4MS4wMDAwNjc0NzdjYzg4NGIzM2UwM2QwYmI3NzU3MTE1MHAtMTQ5LAorICAgIDB4MS5wLTE0OSwgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ1MQorICAgIDB4MS5wLTE0OSwKKyAgICAweDEucC0xNDksIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDQ1MgorICAgIDAuMGYsCisgICAgMHgxLnAtMTQ5LCAweDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTMKKyAgICAwLjBmLAorICAgIDB4MS5wLTE0OSwgMHgxLjAwMDAwNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDU0CisgICAgMC4wZiwKKyAgICAweDEucC0xNDksIDB4MS4wMDAwMDZwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1NQorICAgIDAuMGYsCisgICAgMHgxLnAtMTQ5LCAweDEuMDAwMDA4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTYKKyAgICAwLjBmLAorICAgIDB4MS5wLTE0OSwgMHgxLjAwMDAwYXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDU3CisgICAgMHgxLjAwMDIwMGVmY2YyNWJhYjFjN2NkMjI4MjczNDFhYjYzcC0xNDgsCisgICAgMHgxLnAtMTQ4LCAweDEuZmZmZmY2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDU4CisgICAgMHgxLjAwMDE5YTU5MjA0YzgyZmUwNjBjZjZkMzIwZjE1NDMzcC0xNDgsCisgICAgMHgxLnAtMTQ4LCAweDEuZmZmZmY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDU5CisgICAgMHgxLjAwMDEzM2MyOWE4ZjY0ZjIwNGRhMTNiNzJlYmM1NmVkcC0xNDgsCisgICAgMHgxLnAtMTQ4LCAweDEuZmZmZmZhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDYwCisgICAgMHgxLjAwMDBjZDJjM2RlZTUwMTQ4MDcyOTUwNjU5M2ZkNjhicC0xNDgsCisgICAgMHgxLnAtMTQ4LCAweDEuZmZmZmZjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDYxCisgICAgMHgxLjAwMDA2Njk2MGE2OTMzZWMzYmFlOGNhYjljY2ZkNTQzcC0xNDgsCisgICAgMHgxLnAtMTQ4LCAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDYyCisgICAgMHgxLnAtMTQ4LAorICAgIDB4MS5wLTE0OCwgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDYzCisgICAgMHgxLmZmZmU2NWE4Y2QwMjFkZWRkNTVhNDBjMjcyZGM4YWNhcC0xNDksCisgICAgMHgxLnAtMTQ4LCAweDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjQKKyAgICAweDEuZmZmY2NiNTJlMmUxZjI2MDIwMjE4MjBhYjQ3MDM2ZmVwLTE0OSwKKyAgICAweDEucC0xNDgsIDB4MS4wMDAwMDRwMAorICB9LAorICB7IC8vIEVudHJ5IDQ2NQorICAgIDB4MS5mZmZiMzBmZTQxOWU3NWM1NTJjMDc0Yjc1ZTllMTMyZHAtMTQ5LAorICAgIDB4MS5wLTE0OCwgMHgxLjAwMDAwNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDY2CisgICAgMHgxLmZmZjk5NmFhZTkzNmEwOGNiMmRlM2I4MzEzMjY4MzZjcC0xNDksCisgICAgMHgxLnAtMTQ4LCAweDEuMDAwMDA4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjcKKyAgICAweDEuZmZmN2ZjNThkOWE5NmIyNjU5NWRjMWI5MWFhYjEwNjVwLTE0OSwKKyAgICAweDEucC0xNDgsIDB4MS4wMDAwMGFwMAorICB9LAorICB7IC8vIEVudHJ5IDQ2OAorICAgIDB4MS44MDAyZmU1ZDMyNmUxOTEwZGNmNWFkYWRjNGZiODBiYXAtMTQ4LAorICAgIDB4MS44MHAtMTQ4LCAweDEuZmZmZmY2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDY5CisgICAgMHgxLjgwMDI2NTE2ZTEzMDQxMGNiYzM0ZDZiZTFmMzE0YWYzcC0xNDgsCisgICAgMHgxLjgwcC0xNDgsIDB4MS5mZmZmZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzAKKyAgICAweDEuODAwMWNiZDBjZDIwMDQ4ZGMwMDQxYWFlNjg1M2Y0MTRwLTE0OCwKKyAgICAweDEuODBwLTE0OCwgMHgxLmZmZmZmYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ3MQorICAgIDB4MS44MDAxMzI4YWY2M2Q0YjI4YjkzYmFjMTY4ZDMyMzc3NnAtMTQ4LAorICAgIDB4MS44MHAtMTQ4LCAweDEuZmZmZmZjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDcyCisgICAgMHgxLjgwMDA5OTQ1NWM4N2ZjNzI4MjcyZDc5OTNjM2MwZWQycC0xNDgsCisgICAgMHgxLjgwcC0xNDgsIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzMKKyAgICAweDEuODBwLTE0OCwKKyAgICAweDEuODBwLTE0OCwgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDc0CisgICAgMHgxLjdmZmVjZDc1ZmU3NzljMzlkYTMxMmEwYWU2NTc1YWFlcC0xNDgsCisgICAgMHgxLjgwcC0xNDgsIDB4MS4wMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDQ3NQorICAgIDB4MS43ZmZkOWFlY2YxYTM1YzdlMmQ2ZjY3YjkxNzdiOGJjOHAtMTQ4LAorICAgIDB4MS44MHAtMTQ4LCAweDEuMDAwMDA0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzYKKyAgICAweDEuN2ZmYzY4NjRkOTgyN2Q3NTdiNGI2MDAxZDBjODBhOWJwLTE0OCwKKyAgICAweDEuODBwLTE0OCwgMHgxLjAwMDAwNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDc3CisgICAgMHgxLjdmZmIzNWRkYjYxNDNiYzhlMTQ1YTZkNjE2YTFiNTUxcC0xNDgsCisgICAgMHgxLjgwcC0xNDgsIDB4MS4wMDAwMDhwMAorICB9LAorICB7IC8vIEVudHJ5IDQ3OAorICAgIDB4MS43ZmZhMDM1Nzg3NTdkNDIyMThjZTQwYTU3OGM3NDQ3NnAtMTQ4LAorICAgIDB4MS44MHAtMTQ4LCAweDEuMDAwMDBhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzkKKyAgICAweDEuMDAwMDAwYTBjZjY1ZWIxODE3YTcwOTVkOWEwNDQzYTdwMCwKKyAgICAweDEucC0yOSwgLTB4MS5wLTI5CisgIH0sCisgIHsgLy8gRW50cnkgNDgwCisgICAgMHgxLmZmZmZmZjVmMzA5YTYwYWFkNWMyMzA5ZjgxZjkwZGVmcC0xLAorICAgIDB4MS5wLTI5LCAweDEucC0zMAorICB9LAorICB7IC8vIEVudHJ5IDQ4MQorICAgIDB4MS5mZmZmZmQ5ZTA3Y2YwNzc2N2E1NWFmYmU5YWNhZTkzZXAtMSwKKyAgICAweDEucDU1LCAtMHgxLnAtMjkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODIKKyAgICAweDEuMDAwMDAwOTg3ZTBjYzY2MzQ0ZDg5YjQ5NGUxZjQzYjNwMCwKKyAgICAweDEucDU1LCAweDEucC0zMAorICB9LAorICB7IC8vIEVudHJ5IDQ4MworICAgIDB4MS5mZmZmZmQ2Njk0MjdjZjE1OTUxNTg3Mzg4N2MxN2NmMnAtMSwKKyAgICAweDEucDYwLCAtMHgxLnAtMjkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODQKKyAgICAweDEuMDAwMDAwYTY1YWY2YWU2MWJlODhlYTI1NTg3OTBjZDdwMCwKKyAgICAweDEucDYwLCAweDEucC0zMAorICB9LAorICB7IC8vIEVudHJ5IDQ4NQorICAgIDB4MS5mZmMwMDNmZmI1NWFhYTRjZDM0ZjM0MzFlYTViNzdmMXAtMSwKKyAgICAweDEuZmZmZmZlcC0xLCAweDEucDEzCisgIH0sCisgIHsgLy8gRW50cnkgNDg2CisgICAgMHgxLmZlMDBmZmE5YzBmYjNiZjI4YzhhOWIyYjNkMmQ3ZGFhcC0xLAorICAgIDB4MS5mZmZmZmVwLTEsIDB4MS5wMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODcKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAweDEucDEzCisgIH0sCisgIHsgLy8gRW50cnkgNDg4CisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgMHgxLnAxNgorICB9LAorICB7IC8vIEVudHJ5IDQ4OQorICAgIDB4MS4wMDQwMDgwMDZhYTU1NDMzMmI4ZmVkMDlkOGVkMjlmM3AwLAorICAgIDB4MS4wMDAwMDJwMCwgMHgxLnAxMworICB9LAorICB7IC8vIEVudHJ5IDQ5MAorICAgIDB4MS4wMjAyMDE1M2ZjNDA1YjEyM2IzM2E3M2NiOTNhMzY0OHAwLAorICAgIDB4MS4wMDAwMDJwMCwgMHgxLnAxNgorICB9LAorICB7IC8vIEVudHJ5IDQ5MQorICAgIDB4MS4yYzE1NjAzMjY5NDA3MDA2YjhmMzVlOGU0ZjE0OTdiYXAtNiwKKyAgICAtMHgxLjAwMDAwMnAwLCAtMHgxLnAyNQorICB9LAorICB7IC8vIEVudHJ5IDQ5MgorICAgIDB4MS5jODQ2ODg3ZWUzNzljNWFmNjM3YzczNDlhZmM5ZjY5OXAtNDcsCisgICAgLTB4MS4wMDAwMDJwMCwgLTB4MS5wMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTMKKyAgICAweDEucDAsCisgICAgLTB4MS5wMCwgLTB4MS5wMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTQKKyAgICAweDEucDAsCisgICAgLTB4MS5wMCwgLTB4MS5wMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTUKKyAgICAweDEuZDhlNjRkNjYzNDI4OTFjODZmYjNjODdkMWVkNmQ1YzVwMiwKKyAgICAtMHgxLmZmZmZmZXAtMSwgLTB4MS5wMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTYKKyAgICAweDEuMGYyZWM1ODNmNjExZTRiOGZjMWNjN2I1MGVmYmI3MzhwMjMsCisgICAgLTB4MS5mZmZmZmVwLTEsIC0weDEucDI4CisgIH0sCisgIHsgLy8gRW50cnkgNDk3CisgICAgMHgxLmQ4ZTY0ZDY2MzQyODkxYzg2ZmIzYzg3ZDFlZDZkNWM1cDIsCisgICAgMHgxLmZmZmZmZXAtMSwgLTB4MS5wMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTgKKyAgICAweDEuMGYyZWM1ODNmNjExZTRiOGZjMWNjN2I1MGVmYmI3MzhwMjMsCisgICAgMHgxLmZmZmZmZXAtMSwgLTB4MS5wMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTkKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAtMHgxLnAyNQorICB9LAorICB7IC8vIEVudHJ5IDUwMAorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIC0weDEucDI4CisgIH0sCisgIHsgLy8gRW50cnkgNTAxCisgICAgMHgxLjJjMTU2MDMyNjk0MDcwMDZiOGYzNWU4ZTRmMTQ5N2JhcC02LAorICAgIDB4MS4wMDAwMDJwMCwgLTB4MS5wMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDIKKyAgICAweDEuYzg0Njg4N2VlMzc5YzVhZjYzN2M3MzQ5YWZjOWY2OTlwLTQ3LAorICAgIDB4MS4wMDAwMDJwMCwgLTB4MS5wMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDMKKyAgICBIVUdFX1ZBTEYsCisgICAgLTB4MS5wMTUsIDB4MS5wNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDQKKyAgICBIVUdFX1ZBTEYsCisgICAgMC4wZiwgLTB4MS44MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTA1CisgICAgLUhVR0VfVkFMRiwKKyAgICAtMC4wZiwgLTB4MS44MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTA2CisgICAgSFVHRV9WQUxGLAorICAgIDAuMGYsIC0weDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDcKKyAgICAtSFVHRV9WQUxGLAorICAgIC0wLjBmLCAtMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTA4CisgICAgSFVHRV9WQUxGLAorICAgIDAuMGYsIC0weDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDUwOQorICAgIEhVR0VfVkFMRiwKKyAgICAwLjBmLCAtMHgxLjgwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTAKKyAgICBIVUdFX1ZBTEYsCisgICAgMC4wZiwgLTB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDUxMQorICAgIEhVR0VfVkFMRiwKKyAgICAwLjBmLCAtMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTEyCisgICAgSFVHRV9WQUxGLAorICAgIDAuMGYsIC0weDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTEzCisgICAgSFVHRV9WQUxGLAorICAgIDAuMGYsIC0weDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTQKKyAgICBIVUdFX1ZBTEYsCisgICAgMC4wZiwgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDUxNQorICAgIEhVR0VfVkFMRiwKKyAgICAtMC4wZiwgLTB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgNTE2CisgICAgSFVHRV9WQUxGLAorICAgIC0wLjBmLCAtMHgxLjgwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTcKKyAgICBIVUdFX1ZBTEYsCisgICAgLTAuMGYsIC0weDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTgKKyAgICBIVUdFX1ZBTEYsCisgICAgLTAuMGYsIC0weDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTkKKyAgICBIVUdFX1ZBTEYsCisgICAgLTAuMGYsIC0weDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTIwCisgICAgSFVHRV9WQUxGLAorICAgIC0wLjBmLCAtMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgNTIxCisgICAgSFVHRV9WQUxGLAorICAgIC0wLjBmLCAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNTIyCisgICAgSFVHRV9WQUxGLAorICAgIDAuMGYsIC1IVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjMKKyAgICBIVUdFX1ZBTEYsCisgICAgLTAuMGYsIC1IVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjQKKyAgICAwLjAsCisgICAgMC4wZiwgMHgxLjgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjUKKyAgICAtMC4wLAorICAgIC0wLjBmLCAweDEuODBwMQorICB9LAorICB7IC8vIEVudHJ5IDUyNgorICAgIDAuMCwKKyAgICAwLjBmLCAweDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjcKKyAgICAtMC4wLAorICAgIC0wLjBmLCAweDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjgKKyAgICAwLjAsCisgICAgMC4wZiwgSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTI5CisgICAgMC4wLAorICAgIDAuMGYsIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgNTMwCisgICAgMC4wLAorICAgIDAuMGYsIDB4MS44MHAyCisgIH0sCisgIHsgLy8gRW50cnkgNTMxCisgICAgMC4wLAorICAgIDAuMGYsIDB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDUzMgorICAgIDAuMCwKKyAgICAwLjBmLCAweDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzMKKyAgICAwLjAsCisgICAgMC4wZiwgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDUzNAorICAgIDAuMCwKKyAgICAwLjBmLCAweDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzUKKyAgICAwLjAsCisgICAgMC4wZiwgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNTM2CisgICAgMC4wLAorICAgIC0wLjBmLCBIVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzcKKyAgICAwLjAsCisgICAgLTAuMGYsIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgNTM4CisgICAgMC4wLAorICAgIC0wLjBmLCAweDEuODBwMgorICB9LAorICB7IC8vIEVudHJ5IDUzOQorICAgIDAuMCwKKyAgICAtMC4wZiwgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgNTQwCisgICAgMC4wLAorICAgIC0wLjBmLCAweDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDEKKyAgICAwLjAsCisgICAgLTAuMGYsIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDIKKyAgICAwLjAsCisgICAgLTAuMGYsIDB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDU0MworICAgIDAuMCwKKyAgICAtMC4wZiwgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNTQ0CisgICAgMHgxLnAwLAorICAgIC0weDEucDAsIEhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU0NQorICAgIDB4MS5wMCwKKyAgICAtMHgxLnAwLCAtSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTQ2CisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTQ3CisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgLUhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU0OAorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgNTQ5CisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgLTB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgNTUwCisgICAgMHgxLnAwLAorICAgIC0weDEucDAsIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgNTUxCisgICAgMHgxLnAwLAorICAgIC0weDEucDAsIC0weDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDU1MgorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTMKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAtMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDU1NAorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIDB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDU1NQorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIC0weDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTYKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAweDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTcKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAtMHgxLmZmZmZmY3AtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgNTU4CisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNTU5CisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDU2MAorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIDAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjEKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAtMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDU2MgorICAgIDB4MS5wMCwKKyAgICBIVUdFX1ZBTEYsIDAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjMKKyAgICAweDEucDAsCisgICAgSFVHRV9WQUxGLCAtMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDU2NAorICAgIDB4MS5wMCwKKyAgICAweDEuZmZmZmZlcDEyNywgMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDU2NQorICAgIDB4MS5wMCwKKyAgICAweDEuZmZmZmZlcDEyNywgLTAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjYKKyAgICAweDEucDAsCisgICAgMHgxLnAtMTI2LCAwLjBmCisgIH0sCisgIHsgLy8gRW50cnkgNTY3CisgICAgMHgxLnAwLAorICAgIDB4MS5wLTEyNiwgLTAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjgKKyAgICAweDEucDAsCisgICAgMHgxLnAtMTQ5LCAwLjBmCisgIH0sCisgIHsgLy8gRW50cnkgNTY5CisgICAgMHgxLnAwLAorICAgIDB4MS5wLTE0OSwgLTAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzAKKyAgICAweDEucDAsCisgICAgMC4wZiwgMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDU3MQorICAgIDB4MS5wMCwKKyAgICAwLjBmLCAtMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDU3MgorICAgIDB4MS5wMCwKKyAgICAtMC4wZiwgMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDU3MworICAgIDB4MS5wMCwKKyAgICAtMC4wZiwgLTAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzQKKyAgICAweDEucDAsCisgICAgLTB4MS5wLTE0OSwgMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDU3NQorICAgIDB4MS5wMCwKKyAgICAtMHgxLnAtMTQ5LCAtMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDU3NgorICAgIDB4MS5wMCwKKyAgICAtMHgxLnAtMTI2LCAwLjBmCisgIH0sCisgIHsgLy8gRW50cnkgNTc3CisgICAgMHgxLnAwLAorICAgIC0weDEucC0xMjYsIC0wLjBmCisgIH0sCisgIHsgLy8gRW50cnkgNTc4CisgICAgMHgxLnAwLAorICAgIC0weDEuZmZmZmZlcDEyNywgMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDU3OQorICAgIDB4MS5wMCwKKyAgICAtMHgxLmZmZmZmZXAxMjcsIC0wLjBmCisgIH0sCisgIHsgLy8gRW50cnkgNTgwCisgICAgMHgxLnAwLAorICAgIC1IVUdFX1ZBTEYsIDAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODEKKyAgICAweDEucDAsCisgICAgLUhVR0VfVkFMRiwgLTAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODIKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLnAtMTI2LCAtSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTgzCisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wLTE0OSwgLUhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU4NAorICAgIEhVR0VfVkFMRiwKKyAgICAtMHgxLnAtMTQ5LCAtSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTg1CisgICAgSFVHRV9WQUxGLAorICAgIC0weDEucC0xMjYsIC1IVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODYKKyAgICAwLjAsCisgICAgSFVHRV9WQUxGLCAtSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTg3CisgICAgMC4wLAorICAgIDB4MS5mZmZmZmVwMTI3LCAtSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTg4CisgICAgMC4wLAorICAgIDB4MS44MHAwLCAtSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTg5CisgICAgMC4wLAorICAgIC0weDEuODBwMCwgLUhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU5MAorICAgIDAuMCwKKyAgICAtMHgxLmZmZmZmZXAxMjcsIC1IVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTEKKyAgICAwLjAsCisgICAgLUhVR0VfVkFMRiwgLUhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU5MgorICAgIDAuMCwKKyAgICAweDEucC0xMjYsIEhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU5MworICAgIDAuMCwKKyAgICAweDEucC0xNDksIEhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU5NAorICAgIDAuMCwKKyAgICAwLjBmLCBIVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTUKKyAgICAwLjAsCisgICAgLTAuMGYsIEhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU5NgorICAgIDAuMCwKKyAgICAtMHgxLnAtMTQ5LCBIVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTcKKyAgICAwLjAsCisgICAgLTB4MS5wLTEyNiwgSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTk4CisgICAgSFVHRV9WQUxGLAorICAgIEhVR0VfVkFMRiwgSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTk5CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5mZmZmZmVwMTI3LCBIVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDAKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLjgwcDAsIEhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDYwMQorICAgIEhVR0VfVkFMRiwKKyAgICAtMHgxLjgwcDAsIEhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDYwMgorICAgIEhVR0VfVkFMRiwKKyAgICAtMHgxLmZmZmZmZXAxMjcsIEhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDYwMworICAgIEhVR0VfVkFMRiwKKyAgICAtSFVHRV9WQUxGLCBIVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDQKKyAgICAtMC4wLAorICAgIC1IVUdFX1ZBTEYsIC0weDEuODBwMQorICB9LAorICB7IC8vIEVudHJ5IDYwNQorICAgIC0wLjAsCisgICAgLUhVR0VfVkFMRiwgLTB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDYwNgorICAgIDAuMCwKKyAgICAtSFVHRV9WQUxGLCAtSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNjA3CisgICAgMC4wLAorICAgIC1IVUdFX1ZBTEYsIC0weDEuOTIxZmI2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDgKKyAgICAwLjAsCisgICAgLUhVR0VfVkFMRiwgLTB4MS45MjFmYjZwMAorICB9LAorICB7IC8vIEVudHJ5IDYwOQorICAgIDAuMCwKKyAgICAtSFVHRV9WQUxGLCAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTAKKyAgICAwLjAsCisgICAgLUhVR0VfVkFMRiwgLTB4MS44MHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjExCisgICAgMC4wLAorICAgIC1IVUdFX1ZBTEYsIC0weDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTIKKyAgICAwLjAsCisgICAgLUhVR0VfVkFMRiwgLTB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDYxMworICAgIDAuMCwKKyAgICAtSFVHRV9WQUxGLCAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNjE0CisgICAgLUhVR0VfVkFMRiwKKyAgICAtSFVHRV9WQUxGLCAweDEuODBwMQorICB9LAorICB7IC8vIEVudHJ5IDYxNQorICAgIC1IVUdFX1ZBTEYsCisgICAgLUhVR0VfVkFMRiwgMHgxLjQwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTYKKyAgICBIVUdFX1ZBTEYsCisgICAgLUhVR0VfVkFMRiwgSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNjE3CisgICAgSFVHRV9WQUxGLAorICAgIC1IVUdFX1ZBTEYsIDB4MS45MjFmYjZwMQorICB9LAorICB7IC8vIEVudHJ5IDYxOAorICAgIEhVR0VfVkFMRiwKKyAgICAtSFVHRV9WQUxGLCAweDEuOTIxZmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTkKKyAgICBIVUdFX1ZBTEYsCisgICAgLUhVR0VfVkFMRiwgMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjAKKyAgICBIVUdFX1ZBTEYsCisgICAgLUhVR0VfVkFMRiwgMHgxLjgwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjEKKyAgICBIVUdFX1ZBTEYsCisgICAgLUhVR0VfVkFMRiwgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjIyCisgICAgSFVHRV9WQUxGLAorICAgIC1IVUdFX1ZBTEYsIDB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDYyMworICAgIEhVR0VfVkFMRiwKKyAgICAtSFVHRV9WQUxGLCAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjQKKyAgICAwLjAsCisgICAgSFVHRV9WQUxGLCAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNjI1CisgICAgMC4wLAorICAgIEhVR0VfVkFMRiwgLTB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDYyNgorICAgIDAuMCwKKyAgICBIVUdFX1ZBTEYsIC0weDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDYyNworICAgIDAuMCwKKyAgICBIVUdFX1ZBTEYsIC1IVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjgKKyAgICBIVUdFX1ZBTEYsCisgICAgSFVHRV9WQUxGLCBIVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjkKKyAgICBIVUdFX1ZBTEYsCisgICAgSFVHRV9WQUxGLCAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDYzMAorICAgIEhVR0VfVkFMRiwKKyAgICBIVUdFX1ZBTEYsIDB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDYzMQorICAgIEhVR0VfVkFMRiwKKyAgICBIVUdFX1ZBTEYsIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDYzMgorICAgIEhVR0VfVkFMRiwKKyAgICAweDEuZmZmZmZlcDEyNywgMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzMKKyAgICAwLjBmLAorICAgIDB4MS5wLTEyNiwgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjM0CisgICAgMC4wZiwKKyAgICAtMHgxLnAtMTI2LCAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzUKKyAgICAwLjBmLAorICAgIDB4MS5wLTE0OSwgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjM2CisgICAgMC4wZiwKKyAgICAtMHgxLnAtMTQ5LCAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzcKKyAgICBIVUdFX1ZBTEYsCisgICAgSFVHRV9WQUxGLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjM4CisgICAgMHgxLmZmZmZmZWZmZmZmZmJmZmZmZmRmZmZmZmViZmZmZmYxcDYzLAorICAgIDB4MS5mZmZmZmVwMTI3LCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjM5CisgICAgMHgxLjZhMDllNjY3ZjNiY2M5MDhiMmZiMTM2NmVhOTU3ZDNlcC0xLAorICAgIDB4MS5wLTEsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDAKKyAgICAweDEucC02MywKKyAgICAweDEucC0xMjYsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDEKKyAgICAweDEuNmEwOWU2NjdmM2JjYzkwOGIyZmIxMzY2ZWE5NTdkM2VwLTc1LAorICAgIDB4MS5wLTE0OSwgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY0MgorICAgIDAuMCwKKyAgICAwLjBmLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjQzCisgICAgMC4wLAorICAgIC0wLjBmLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjQ0CisgICAgSFVHRV9WQUxGLAorICAgIC1IVUdFX1ZBTEYsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDUKKyAgICAwLjAsCisgICAgSFVHRV9WQUxGLCAtMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY0NgorICAgIDB4MS4wMDAwMDA4MDAwMDA2MDAwMDA1MDAwMDA0NjAwMDAzZnAtNjQsCisgICAgMHgxLmZmZmZmZXAxMjcsIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjQ3CisgICAgMHgxLjZhMDllNjY3ZjNiY2M5MDhiMmZiMTM2NmVhOTU3ZDNlcDAsCisgICAgMHgxLnAtMSwgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDgKKyAgICAweDEucDYzLAorICAgIDB4MS5wLTEyNiwgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDkKKyAgICAweDEuNmEwOWU2NjdmM2JjYzkwOGIyZmIxMzY2ZWE5NTdkM2VwNzQsCisgICAgMHgxLnAtMTQ5LCAtMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY1MAorICAgIEhVR0VfVkFMRiwKKyAgICAwLjBmLCAtMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY1MQorICAgIEhVR0VfVkFMRiwKKyAgICAtMC4wZiwgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTIKKyAgICAwLjAsCisgICAgLUhVR0VfVkFMRiwgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTMKKyAgICAwLjAsCisgICAgMHgxLnAtMSwgSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNjU0CisgICAgMC4wZiwKKyAgICAweDEucC0xLCAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDY1NQorICAgIDB4MS42YTA5ZTY2N2YzYmNjOTA4YjJmYjEzNjZlYTk1N2QzZXAtMSwKKyAgICAweDEucC0xLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjU2CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZhcC0xLAorICAgIDB4MS5wLTEsIDB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDY1NworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEucC0xLCAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTgKKyAgICAweDEucDAsCisgICAgMHgxLnAtMSwgMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDY1OQorICAgIDB4MS5wMCwKKyAgICAweDEucC0xLCAtMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDY2MAorICAgIDB4MS5wMCwKKyAgICAweDEucC0xLCAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNjYxCisgICAgMHgxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAycDAsCisgICAgMHgxLnAtMSwgLTB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDY2MgorICAgIDB4MS42YTA5ZTY2N2YzYmNjOTA4YjJmYjEzNjZlYTk1N2QzZXAwLAorICAgIDB4MS5wLTEsIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjYzCisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wLTEsIC0weDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDY2NAorICAgIEhVR0VfVkFMRiwKKyAgICAweDEucC0xLCAtSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNjY1CisgICAgMC4wLAorICAgIC0weDEucC0xLCBIVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjYKKyAgICAwLjBmLAorICAgIC0weDEucC0xLCAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDY2NworICAgIDB4MS5wMCwKKyAgICAtMHgxLnAtMSwgMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDY2OAorICAgIDB4MS5wMCwKKyAgICAtMHgxLnAtMSwgLTAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjkKKyAgICBIVUdFX1ZBTEYsCisgICAgLTB4MS5wLTEsIC0weDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDY3MAorICAgIEhVR0VfVkFMRiwKKyAgICAtMHgxLnAtMSwgLUhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDY3MQorICAgIDB4MS5wMSwKKyAgICAweDEucDIsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzIKKyAgICAweDEuODBwMSwKKyAgICAweDEuMjBwMywgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY3MworICAgIDB4MS5wMiwKKyAgICAweDEucDQsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzQKKyAgICAweDEucC0xLAorICAgIDB4MS5wMiwgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzUKKyAgICAweDEucC0yLAorICAgIDB4MS5wNCwgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzYKKyAgICAweDEucC0zLAorICAgIDB4MS5wNiwgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzcKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLmZmZmZmZXAtMSwgLTB4MS43NDkxMGNwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzgKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmVwLTEsIDB4MS43NDkxMGNwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzkKKyAgICAweDEucDIsCisgICAgMHgxLnAxLCAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODAKKyAgICAweDEucC0yLAorICAgIDB4MS5wMSwgLTB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDY4MQorICAgIDB4MS5wMiwKKyAgICAtMHgxLnAxLCAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODIKKyAgICAweDEucC0yLAorICAgIC0weDEucDEsIC0weDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODMKKyAgICAweDEuYjBwNCwKKyAgICAweDEuODBwMSwgMHgxLjgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODQKKyAgICAweDEuODZhMHAxMSwKKyAgICAweDEuNDBwMiwgMHgxLjQwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODUKKyAgICAweDEuOTIxZWUwcDE5LAorICAgIDB4MS5jMHAyLCAweDEuYzBwMgorICB9LAorICB7IC8vIEVudHJ5IDY4NgorICAgIDB4MS4yYTA1ZjJwMzMsCisgICAgMHgxLjQwcDMsIDB4MS40MHAzCisgIH0sCit9OworI2VuZGlmIC8vIF9fQklPTklDX18KKworVEVTVChtYXRoX3Bvd2YsIHBvd2ZfaW50ZWwpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGdfcG93Zl9pbnRlbF9kYXRhKS9zaXplb2YocG93Zl9pbnRlbF9kYXRhX3QpOyBpKyspIHsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoZ19wb3dmX2ludGVsX2RhdGFbaV0uZXhwZWN0ZWQsIHBvd2YoZ19wb3dmX2ludGVsX2RhdGFbaV0ueF9jYWxsX2RhdGEsIGdfcG93Zl9pbnRlbF9kYXRhW2ldLnlfY2FsbF9kYXRhKSkgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKKyAgfQorI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWF0aF9zaW5fdGVzdC5jcHAgYi90ZXN0cy9tYXRoX3Npbl90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmE0MzQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbWF0aF9zaW5fdGVzdC5jcHAKQEAgLTAsMCArMSw1Nzk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCit0eXBlZGVmIHN0cnVjdCB7CisgIGRvdWJsZSBleHBlY3RlZDsKKyAgZG91YmxlIGNhbGxfZGF0YTsKK30gc2luX2ludGVsX2RhdGFfdDsKKworc3RhdGljIHNpbl9pbnRlbF9kYXRhX3QgZ19zaW5faW50ZWxfZGF0YVtdID0geworICB7IC8vIEVudHJ5IDAKKyAgICAweDEuOTI1OWUzNzA4YmQzOWZmZmZmZmZmZmZmZmZmMWJkYmVwLTUsCisgICAgMHgxLjkyODM1ODY1MDNmZTBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxCisgICAgLTB4MS45MjU5ZTM3MDhiZDM5ZmZmZmZmZmZmZmZmZmYxYmRiZXAtNSwKKyAgICAtMHgxLjkyODM1ODY1MDNmZTBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyCisgICAgMHgxLmQ3N2IxMTdmMjMwZDVmZmZmZmZmZmZmZmZmZjJhZGM3cC01LAorICAgIDB4MS5kN2JkY2Q3NzgwNDlmcC01CisgIH0sCisgIHsgLy8gRW50cnkgMworICAgIC0weDEuZDc3YjExN2YyMzBkNWZmZmZmZmZmZmZmZmZmMmFkYzdwLTUsCisgICAgLTB4MS5kN2JkY2Q3NzgwNDlmcC01CisgIH0sCisgIHsgLy8gRW50cnkgNAorICAgIDB4MS5hMTQ5MGM4YzA2YmE2ZmZmZmZmZmZmZmZmZmE5ODYxMXAtNCwKKyAgICAweDEuYTIwMmIzZmI4NDc4OHAtNAorICB9LAorICB7IC8vIEVudHJ5IDUKKyAgICAtMHgxLmExNDkwYzhjMDZiYTZmZmZmZmZmZmZmZmZmYTk4NjExcC00LAorICAgIC0weDEuYTIwMmIzZmI4NDc4OHAtNAorICB9LAorICB7IC8vIEVudHJ5IDYKKyAgICAweDEuY2M0MGMzODA1MjI5YTdmZmZmZmZmZmZmZmY4M2U3NmJwLTMsCisgICAgMHgxLmQwMzdjYjI3ZWU2ZGZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3CisgICAgLTB4MS5jYzQwYzM4MDUyMjlhN2ZmZmZmZmZmZmZmZjgzZTc2YnAtMywKKyAgICAtMHgxLmQwMzdjYjI3ZWU2ZGZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4CisgICAgMHgxLmQwZWY3OTkwMDFiYTkwMDAwMDAwMDAwMDAwNWVhNGU5cC0zLAorICAgIDB4MS5kNTA2NGU2ZmU4MmM1cC0zCisgIH0sCisgIHsgLy8gRW50cnkgOQorICAgIC0weDEuZDBlZjc5OTAwMWJhOTAwMDAwMDAwMDAwMDA1ZWE0ZTlwLTMsCisgICAgLTB4MS5kNTA2NGU2ZmU4MmM1cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTAKKyAgICAweDEuZTk5NTA3MzBjNDY5NWZmZmZmZmZmZmZmZmZmZmZjMmVwLTIsCisgICAgMHgxLmZlNzY3NzM5ZDBmNmRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMQorICAgIC0weDEuZTk5NTA3MzBjNDY5NWZmZmZmZmZmZmZmZmZmZmZjMmVwLTIsCisgICAgLTB4MS5mZTc2NzczOWQwZjZkcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTIKKyAgICAweDEuOThkY2QwOTMzNzc5MjgwMDAwMDAwMDAwMDAxNjdkYzdwLTEsCisgICAgMHgxLmQ5OGM0YzYxMjcxOGRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMworICAgIC0weDEuOThkY2QwOTMzNzc5MjgwMDAwMDAwMDAwMDAxNjdkYzdwLTEsCisgICAgLTB4MS5kOThjNGM2MTI3MThkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzg4MzFwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDE1CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODgzMXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDE2CisgICAgMHgxLjcwYTlkODI1YjUwNjQwMDQyMjE1NWFlY2Q1MTlkNTRjcC0xLAorICAgIC0weDEuMDAwMDAwMWY4cDUwMAorICB9LAorICB7IC8vIEVudHJ5IDE3CisgICAgLTB4MS43MGE5ZDgyNWI1MDY0MDA0MjIxNTVhZWNkNTE5ZDU0Y3AtMSwKKyAgICAweDEuMDAwMDAwMWY4cDUwMAorICB9LAorICB7IC8vIEVudHJ5IDE4CisgICAgMHgxLmJmMzk4MGM2YzFlOWY0NDk2Nzk1ZjRjZTUzNTAxNmI2cC0xLAorICAgIC0weDEuMDBjMGJmOHA3MDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOQorICAgIC0weDEuYmYzOTgwYzZjMWU5ZjQ0OTY3OTVmNGNlNTM1MDE2YjZwLTEsCisgICAgMHgxLjAwYzBiZjhwNzAwCisgIH0sCisgIHsgLy8gRW50cnkgMjAKKyAgICAweDEuZDYyODk5ZDQ4YjQzOTdmYjI3NWJhNDQwOTU5NzEzNjRwLTQsCisgICAgLTB4MS4xM2ZmZmZmZmZmZjgwcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMQorICAgIC0weDEuZDYyODk5ZDQ4YjQzOTdmYjI3NWJhNDQwOTU5NzEzNjRwLTQsCisgICAgMHgxLjEzZmZmZmZmZmZmODBwNgorICB9LAorICB7IC8vIEVudHJ5IDIyCisgICAgLTB4MS4xN2I3YTYwY2UxZjE0ODU4MjQ3MTE1MjNhYjBmZDZkMXAtNSwKKyAgICAtMHgxLjE3YzU5MjA3NjdkZmNwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMworICAgIDB4MS4xN2I3YTYwY2UxZjE0ODU4MjQ3MTE1MjNhYjBmZDZkMXAtNSwKKyAgICAweDEuMTdjNTkyMDc2N2RmY3AtNQorICB9LAorICB7IC8vIEVudHJ5IDI0CisgICAgMHgxLmYwMTkyYjc5NGZiYmUwMzBmZTI1ZWRmNjVhNWRiOWJmcC0xLAorICAgIC0weDEuMWQ5OWJlMDg3MTNjY3AyCisgIH0sCisgIHsgLy8gRW50cnkgMjUKKyAgICAtMHgxLmYwMTkyYjc5NGZiYmUwMzBmZTI1ZWRmNjVhNWRiOWJmcC0xLAorICAgIDB4MS4xZDk5YmUwODcxM2NjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNgorICAgIC0weDEuNWU2MTMyOGMwMDM0ZWMzYTA1ZDA1M2I3MmUyZDU5NDVwLTMsCisgICAgLTB4MS4xZGRiZmQ2NGZjMGQzcDgxCisgIH0sCisgIHsgLy8gRW50cnkgMjcKKyAgICAweDEuNWU2MTMyOGMwMDM0ZWMzYTA1ZDA1M2I3MmUyZDU5NDVwLTMsCisgICAgMHgxLjFkZGJmZDY0ZmMwZDNwODEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOAorICAgIDB4MS5mYjAyOGM1ZGYxZGIzZWIzMmIwMDYyYzZjZDRkZWEwYnAtMSwKKyAgICAtMHgxLjFlMmExNTYzZTA2OGVwNworICB9LAorICB7IC8vIEVudHJ5IDI5CisgICAgLTB4MS5mYjAyOGM1ZGYxZGIzZWIzMmIwMDYyYzZjZDRkZWEwYnAtMSwKKyAgICAweDEuMWUyYTE1NjNlMDY4ZXA3CisgIH0sCisgIHsgLy8gRW50cnkgMzAKKyAgICAtMHgxLjJjZWZiMTk2YmEyMDc3ZmZmZmZkNGJkNjUwNzIyYmZicC0zLAorICAgIC0weDEuMmUwN2E5MTMxNGRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMQorICAgIDB4MS4yY2VmYjE5NmJhMjA3N2ZmZmZmZDRiZDY1MDcyMmJmYnAtMywKKyAgICAweDEuMmUwN2E5MTMxNGRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMgorICAgIDB4MS5iODBmNDg5ZDNlZGY0ODM1ZGU3ZGVlZWI1YmIzOGFkOXAtMiwKKyAgICAtMHgxLjNiY2VjMjcwNDQ0ZTJwMworICB9LAorICB7IC8vIEVudHJ5IDMzCisgICAgLTB4MS5iODBmNDg5ZDNlZGY0ODM1ZGU3ZGVlZWI1YmIzOGFkOXAtMiwKKyAgICAweDEuM2JjZWMyNzA0NDRlMnAzCisgIH0sCisgIHsgLy8gRW50cnkgMzQKKyAgICAtMHgxLjRmZmZmZmZmZmZhMzg4MDAwMDAwMDRkZDIyY2NjY2NjcC0yMCwKKyAgICAtMHgxLjUwMDAwMDAwMDAwNDBwLTIwCisgIH0sCisgIHsgLy8gRW50cnkgMzUKKyAgICAweDEuNGZmZmZmZmZmZmEzODgwMDAwMDAwNGRkMjJjY2NjY2NwLTIwLAorICAgIDB4MS41MDAwMDAwMDAwMDQwcC0yMAorICB9LAorICB7IC8vIEVudHJ5IDM2CisgICAgLTB4MS5kMjlkYTViNDRmNTFiN2ZjMDE5ZjE4M2UxZDNiZDUxMXAtMiwKKyAgICAtMHgxLjU1OTAwMWE0MmQ5MGNwMQorICB9LAorICB7IC8vIEVudHJ5IDM3CisgICAgMHgxLmQyOWRhNWI0NGY1MWI3ZmMwMTlmMTgzZTFkM2JkNTExcC0yLAorICAgIDB4MS41NTkwMDFhNDJkOTBjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOAorICAgIC0weDEuZjg1ZjUyNjE0N2Y3ODdmZmZmZjE1MjQxZTcxOTczNGJwLTEsCisgICAgLTB4MS41OTdiZjNlOTc3NmI3cDk5CisgIH0sCisgIHsgLy8gRW50cnkgMzkKKyAgICAweDEuZjg1ZjUyNjE0N2Y3ODdmZmZmZjE1MjQxZTcxOTczNGJwLTEsCisgICAgMHgxLjU5N2JmM2U5Nzc2YjdwOTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MAorICAgIC0weDEuNmQ2MWI1OGM5OWM0MmYxMzk2YWY0YTQyMTQ4ZjczYzZwLTU5LAorICAgIC0weDEuNmM2Y2JjNDVkYzhkZXA3CisgIH0sCisgIHsgLy8gRW50cnkgNDEKKyAgICAweDEuNmQ2MWI1OGM5OWM0MmYxMzk2YWY0YTQyMTQ4ZjczYzZwLTU5LAorICAgIDB4MS42YzZjYmM0NWRjOGRlcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MgorICAgIDB4MS5lNWMzYzA4YTI1OGE3N2YxZDEyZWZhOGMzMDE2NjcwOXAtMSwKKyAgICAtMHgxLjczZDhkMTczZjkwZDBwNAorICB9LAorICB7IC8vIEVudHJ5IDQzCisgICAgLTB4MS5lNWMzYzA4YTI1OGE3N2YxZDEyZWZhOGMzMDE2NjcwOXAtMSwKKyAgICAweDEuNzNkOGQxNzNmOTBkMHA0CisgIH0sCisgIHsgLy8gRW50cnkgNDQKKyAgICAweDEuZmViMzY4MDZjYTVmYjdlYTQ0MjExOWFmNDFiZTBmNGZwLTEsCisgICAgLTB4MS44YzIwMmQzYTMxODAycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NQorICAgIC0weDEuZmViMzY4MDZjYTVmYjdlYTQ0MjExOWFmNDFiZTBmNGZwLTEsCisgICAgMHgxLjhjMjAyZDNhMzE4MDJwNgorICB9LAorICB7IC8vIEVudHJ5IDQ2CisgICAgLTB4MS43YzZjN2IwMWI5OGQ5NDdjZDhhZGQ1ZTVkMWFlMTFjYXAtMSwKKyAgICAtMHgxLmFjZDUzOGIxYTZkNWRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NworICAgIDB4MS43YzZjN2IwMWI5OGQ5NDdjZDhhZGQ1ZTVkMWFlMTFjYXAtMSwKKyAgICAweDEuYWNkNTM4YjFhNmQ1ZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ4CisgICAgLTB4MS4xOTFiZTIwNTlkY2I1N2ZlZDg2ZGQyY2M2MmViMWE5ZnAtMSwKKyAgICAtMHgxLmI3NTI1YWM5N2UwZDJwMgorICB9LAorICB7IC8vIEVudHJ5IDQ5CisgICAgMHgxLjE5MWJlMjA1OWRjYjU3ZmVkODZkZDJjYzYyZWIxYTlmcC0xLAorICAgIDB4MS5iNzUyNWFjOTdlMGQycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MAorICAgIC0weDEuZjgzMDU5OTNhMjEyYzdmZmZmZmMxNWMyYWZhNWU1N2VwLTEsCisgICAgLTB4MS5iZWU1ZmE4YTg0YjAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MQorICAgIDB4MS5mODMwNTk5M2EyMTJjN2ZmZmZmYzE1YzJhZmE1ZTU3ZXAtMSwKKyAgICAweDEuYmVlNWZhOGE4NGIwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTIKKyAgICAweDEuZmYzYjEzNTMwZmQ3MGU3MmI3N2Y3YzY3MjFkYTExMzFwLTEsCisgICAgLTB4MS5jMzkzOTc5ZmU1OTIxcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MworICAgIC0weDEuZmYzYjEzNTMwZmQ3MGU3MmI3N2Y3YzY3MjFkYTExMzFwLTEsCisgICAgMHgxLmMzOTM5NzlmZTU5MjFwOQorICB9LAorICB7IC8vIEVudHJ5IDU0CisgICAgLTB4MS5mMTE5ZGE4MWE0ZGE1N2ZmZDhiY2M1YTEyNDdmNTU5MHAtMSwKKyAgICAtMHgxLmM0OGZmYzcyNTYzYzhwMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NQorICAgIDB4MS5mMTE5ZGE4MWE0ZGE1N2ZmZDhiY2M1YTEyNDdmNTU5MHAtMSwKKyAgICAweDEuYzQ4ZmZjNzI1NjNjOHAxOAorICB9LAorICB7IC8vIEVudHJ5IDU2CisgICAgLTB4MS5mZDczYjgxZTA0Y2NjN2U5ZDc2NGVjYThiYjA4NTEwOXAtMSwKKyAgICAtMHgxLmM3OTU0OGJjMzE4NTZwMworICB9LAorICB7IC8vIEVudHJ5IDU3CisgICAgMHgxLmZkNzNiODFlMDRjY2M3ZTlkNzY0ZWNhOGJiMDg1MTA5cC0xLAorICAgIDB4MS5jNzk1NDhiYzMxODU2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OAorICAgIC0weDEuYzc4ODVhZWYzM2E5NGZmYzVhZTA2YmU5NDQ0ZWZhZDVwLTMsCisgICAgLTB4MS5jYjZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OQorICAgIDB4MS5jNzg4NWFlZjMzYTk0ZmZjNWFlMDZiZTk0NDRlZmFkNXAtMywKKyAgICAweDEuY2I2cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNjAKKyAgICAtMHgxLmU2NDk0OTExZWVkZDA4ZDE2NTBhNGI1MTM2YzNlNmQ2cC03LAorICAgIC0weDEuZTY0ZGRhZjdiZDcyZnAtNworICB9LAorICB7IC8vIEVudHJ5IDYxCisgICAgMHgxLmU2NDk0OTExZWVkZDA4ZDE2NTBhNGI1MTM2YzNlNmQ2cC03LAorICAgIDB4MS5lNjRkZGFmN2JkNzJmcC03CisgIH0sCisgIHsgLy8gRW50cnkgNjIKKyAgICAweDEuZTE4MGVlZjViMWM4ODdmZmY1ODU1OTQ5NDliNDZlNmNwLTEsCisgICAgLTB4MS5lY2RkMGZiZjA3OTQycDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MworICAgIC0weDEuZTE4MGVlZjViMWM4ODdmZmY1ODU1OTQ5NDliNDZlNmNwLTEsCisgICAgMHgxLmVjZGQwZmJmMDc5NDJwNQorICB9LAorICB7IC8vIEVudHJ5IDY0CisgICAgLTB4MS5mZDk4ZDIwYzFiZTQzODAwMDAwMDFlZTUxNTYyZDdhOHAtMSwKKyAgICAtMHgxLmYwNzNhMjMyOTIzMzdwMgorICB9LAorICB7IC8vIEVudHJ5IDY1CisgICAgMHgxLmZkOThkMjBjMWJlNDM4MDAwMDAwMWVlNTE1NjJkN2E4cC0xLAorICAgIDB4MS5mMDczYTIzMjkyMzM3cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NgorICAgIC0weDEuNzI2OGMxMTIyOTdjODdkMTc2MzNiYWI3MjJmMzFhM2ZwLTUsCisgICAgLTB4MS5mNWU0YzQxMGY0ZWY4cDE1CisgIH0sCisgIHsgLy8gRW50cnkgNjcKKyAgICAweDEuNzI2OGMxMTIyOTdjODdkMTc2MzNiYWI3MjJmMzFhM2ZwLTUsCisgICAgMHgxLmY1ZTRjNDEwZjRlZjhwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OAorICAgIDB4MS40MjA3OTYxNDYwNzBlNjI4YzE5ZDM4ZDFlOTBkZjIyOHAtMTgsCisgICAgLTB4MS5mODAwMDAwMDAwMnA5NQorICB9LAorICB7IC8vIEVudHJ5IDY5CisgICAgLTB4MS40MjA3OTYxNDYwNzBlNjI4YzE5ZDM4ZDFlOTBkZjIyOHAtMTgsCisgICAgMHgxLmY4MDAwMDAwMDAycDk1CisgIH0sCisgIHsgLy8gRW50cnkgNzAKKyAgICAtMHgxLmU0ZjZkYzQ5OWQ5Y2M4MDM1NjA3ZmEzZDc2ZjlmNGM1cC0yLAorICAgIC0weDEuZjkzNjVkNzk1NDZlMXAtMgorICB9LAorICB7IC8vIEVudHJ5IDcxCisgICAgMHgxLmU0ZjZkYzQ5OWQ5Y2M4MDM1NjA3ZmEzZDc2ZjlmNGM1cC0yLAorICAgIDB4MS5mOTM2NWQ3OTU0NmUxcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzIKKyAgICAweDEuYjJlZjk5YjE0MGQ2NTA0NjhhZWQ4MmZlMGQ0NDJhZGFwLTE0LAorICAgIC0weDEuZmZmZmZmZmZmZmU3ZXAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNzMKKyAgICAtMHgxLmIyZWY5OWIxNDBkNjUwNDY4YWVkODJmZTBkNDQyYWRhcC0xNCwKKyAgICAweDEuZmZmZmZmZmZmZmU3ZXAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNzQKKyAgICAweDEuZGIwZmZjM2VjYzZlM2I4ZTM3MzU3Y2EwMDJkNTYyNWJwLTEsCisgICAgMHgxLjBwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NQorICAgIC0weDEuZGIwZmZjM2VjYzZlM2I4ZTM3MzU3Y2EwMDJkNTYyNWJwLTEsCisgICAgLTB4MS4wcDE1CisgIH0sCisgIHsgLy8gRW50cnkgNzYKKyAgICAtMHgxLmU5OGY4NzA5OGI2MjY5OWFkMTZlMDI1OWIwZTg1YjI0cC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDEzCisgIH0sCisgIHsgLy8gRW50cnkgNzcKKyAgICAweDEuZTk4Zjg3MDk4YjYyNjk5YWQxNmUwMjU5YjBlODViMjRwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDEzCisgIH0sCisgIHsgLy8gRW50cnkgNzgKKyAgICAweDEuMDUzYzM1MDY4ZTEwZDQ1ZWU1MGYyZDFkZGNhYmNmM2RwLTQsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OQorICAgIC0weDEuMDUzYzM1MDY4ZTEwZDQ1ZWU1MGYyZDFkZGNhYmNmM2RwLTQsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDUyCisgIH0sCisgIHsgLy8gRW50cnkgODAKKyAgICAweDEuNzJkNDIxYjY4ODRlNTAwYmJkM2E5ZWZjMGYwY2VkOTJwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMjI4CisgIH0sCisgIHsgLy8gRW50cnkgODEKKyAgICAtMHgxLjcyZDQyMWI2ODg0ZTUwMGJiZDNhOWVmYzBmMGNlZDkycC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAyMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MgorICAgIDB4MS43N2ZiYTk4N2M1NjUzM2E2NjVlODhlNWE1OTJjYTEwY3AtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXA0OTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MworICAgIC0weDEuNzdmYmE5ODdjNTY1MzNhNjY1ZTg4ZTVhNTkyY2ExMGNwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDQ5MQorICB9LAorICB7IC8vIEVudHJ5IDg0CisgICAgLTB4MS43MjNiMjYyNTMzMWFmMmU3OWE5ZjA3MTQ1YTFlNTczMXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwM3AyMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NQorICAgIDB4MS43MjNiMjYyNTMzMWFmMmU3OWE5ZjA3MTQ1YTFlNTczMXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDNwMjE1CisgIH0sCisgIHsgLy8gRW50cnkgODYKKyAgICAweDEuYWVkNTQ4ZjA5MGNmNDdmZTdlMzIxMDNhYjE0MGNhZjhwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDZwMAorICB9LAorICB7IC8vIEVudHJ5IDg3CisgICAgLTB4MS5hZWQ1NDhmMDkwY2Y0N2ZlN2UzMjEwM2FiMTQwY2FmOHAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDZwMAorICB9LAorICB7IC8vIEVudHJ5IDg4CisgICAgLTB4MS5mZjk4MzIwOGM3ZGM5NzgwNzkxNzRiNDYxYjM4MDlmMHAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwN3A4CisgIH0sCisgIHsgLy8gRW50cnkgODkKKyAgICAweDEuZmY5ODMyMDhjN2RjOTc4MDc5MTc0YjQ2MWIzODA5ZjBwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDA3cDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MAorICAgIDB4MS5mZmVmMjlkYzM4NDUyZmZlZjRhNzc5YTFmODY3MDdkYXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwN3AyNzUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MQorICAgIC0weDEuZmZlZjI5ZGMzODQ1MmZmZWY0YTc3OWExZjg2NzA3ZGFwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDA3cDI3NQorICB9LAorICB7IC8vIEVudHJ5IDkyCisgICAgLTB4MS5mYTg4YzM3NTcyM2MwZDdlYTFmMmQwOGViYjJmOTQwN3AtOCwKKyAgICAweDEuMDAwMDAwMDAwMDAwN3A0NDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MworICAgIDB4MS5mYTg4YzM3NTcyM2MwZDdlYTFmMmQwOGViYjJmOTQwN3AtOCwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDdwNDQ5CisgIH0sCisgIHsgLy8gRW50cnkgOTQKKyAgICAweDEuZmZmNTMyMmM5NGVhZTFiMGI1MTA4NmMwOGZhYTU4NWNwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMTFwNjQ0CisgIH0sCisgIHsgLy8gRW50cnkgOTUKKyAgICAtMHgxLmZmZjUzMjJjOTRlYWUxYjBiNTEwODZjMDhmYWE1ODVjcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAxMXA2NDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NgorICAgIC0weDEuYTczNjMwYWY4ZjE1YjgwMDAwNTRkZGQ5NTBiYmExMDdwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMWZwMTY0CisgIH0sCisgIHsgLy8gRW50cnkgOTcKKyAgICAweDEuYTczNjMwYWY4ZjE1YjgwMDAwNTRkZGQ5NTBiYmExMDdwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDFmcDE2NAorICB9LAorICB7IC8vIEVudHJ5IDk4CisgICAgMHgxLjFjNTQ4ZjkyNDllNDQ3NDk4ODY0NmI4Njg5NGU5NTgxcC0yLAorICAgIDB4MS4wMDAwMDAwMDAwMDM4cDM4MAorICB9LAorICB7IC8vIEVudHJ5IDk5CisgICAgLTB4MS4xYzU0OGY5MjQ5ZTQ0NzQ5ODg2NDZiODY4OTRlOTU4MXAtMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMzhwMzgwCisgIH0sCisgIHsgLy8gRW50cnkgMTAwCisgICAgMHgxLmNhOTY1YmQyYzRkZmVlNDc3OWNhOGM3OTc4MDYyOTJkcC0zLAorICAgIDB4MS4wMDAwMDAwMDAwMTE4cDM4MAorICB9LAorICB7IC8vIEVudHJ5IDEwMQorICAgIC0weDEuY2E5NjViZDJjNGRmZWU0Nzc5Y2E4Yzc5NzgwNjI5MmRwLTMsCisgICAgLTB4MS4wMDAwMDAwMDAwMTE4cDM4MAorICB9LAorICB7IC8vIEVudHJ5IDEwMgorICAgIC0weDEuODM3YjlkZGRjMjRjZjJmNzI5YTM4MTQ3Nzk1YjE4ZDJwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAxMmNwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMworICAgIDB4MS44MzdiOWRkZGMyNGNmMmY3MjlhMzgxNDc3OTViMThkMnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAxMmNwMgorICB9LAorICB7IC8vIEVudHJ5IDEwNAorICAgIDB4MS5kODJjMTc4NGMzZWNiZmVmYjAyZDdkNmI1ODVmNzNjNHAtMiwKKyAgICAweDEuMDAwMDAwMDAwMDFmOHA3MDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUKKyAgICAtMHgxLmQ4MmMxNzg0YzNlY2JmZWZiMDJkN2Q2YjU4NWY3M2M0cC0yLAorICAgIC0weDEuMDAwMDAwMDAwMDFmOHA3MDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYKKyAgICAweDEuZmZmZWFhYWFlZjJlZTdlZTg3NmY5MGI3MGI1MTI0NzVwLTgsCisgICAgMHgxLjAwMDAwMDAwMDAycC03CisgIH0sCisgIHsgLy8gRW50cnkgMTA3CisgICAgLTB4MS5mZmZlYWFhYWVmMmVlN2VlODc2ZjkwYjcwYjUxMjQ3NXAtOCwKKyAgICAtMHgxLjAwMDAwMDAwMDAycC03CisgIH0sCisgIHsgLy8gRW50cnkgMTA4CisgICAgLTB4MS4wODcxYmRkZDkwZmM1ODM0MDM0ZWUzZjZmODZiNDNhM3AtMSwKKyAgICAweDEuMDAwMDAwMDAwMDJwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkKKyAgICAweDEuMDg3MWJkZGQ5MGZjNTgzNDAzNGVlM2Y2Zjg2YjQzYTNwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMnA0MAorICB9LAorICB7IC8vIEVudHJ5IDExMAorICAgIDB4MS5mZmZlYWFhYWVmMmYwN2VlNDc2ZmE2MGM1ZGJlNDg4NnAtOCwKKyAgICAweDEuMDAwMDAwMDAwMDIwMXAtNworICB9LAorICB7IC8vIEVudHJ5IDExMQorICAgIC0weDEuZmZmZWFhYWFlZjJmMDdlZTQ3NmZhNjBjNWRiZTQ4ODZwLTgsCisgICAgLTB4MS4wMDAwMDAwMDAwMjAxcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTEyCisgICAgMHgxLmZmZmVhYWFhZWYzMzA3ZTY0NzcyNTBiNmFiNTI0YWI3cC04LAorICAgIDB4MS4wMDAwMDAwMDAwMjIxcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTEzCisgICAgLTB4MS5mZmZlYWFhYWVmMzMwN2U2NDc3MjUwYjZhYjUyNGFiN3AtOCwKKyAgICAtMHgxLjAwMDAwMDAwMDAyMjFwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQKKyAgICAweDEuZmZmZWFhYWFlZjM2MjdlMDA3NzQ2NjBiYjdkN2E4N2NwLTgsCisgICAgMHgxLjAwMDAwMDAwMDAyM2FwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUKKyAgICAtMHgxLmZmZmVhYWFhZWYzNjI3ZTAwNzc0NjYwYmI3ZDdhODdjcC04LAorICAgIC0weDEuMDAwMDAwMDAwMDIzYXAtNworICB9LAorICB7IC8vIEVudHJ5IDExNgorICAgIDB4MS5lMGM2ZWRmYTkzNjAxNTk1MzRkZWY3MTM5MjVmMTI2ZnAtOSwKKyAgICAweDEuMDAwMDAwMDAwNDBwNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTcKKyAgICAtMHgxLmUwYzZlZGZhOTM2MDE1OTUzNGRlZjcxMzkyNWYxMjZmcC05LAorICAgIC0weDEuMDAwMDAwMDAwNDBwNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgKKyAgICAweDEuZWExZjYxODM1NmRiMGQzYWI2NmQwZWY2NDkzYmM5M2RwLTUsCisgICAgMHgxLjAwMDAwMDBjMHA0MAorICB9LAorICB7IC8vIEVudHJ5IDExOQorICAgIC0weDEuZWExZjYxODM1NmRiMGQzYWI2NmQwZWY2NDkzYmM5M2RwLTUsCisgICAgLTB4MS4wMDAwMDAwYzBwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAKKyAgICAweDEuZmFhZWVkNzU4NzU0MWZmZmZmOTkyMmJhNjY5MGI4YmFwLTMsCisgICAgMHgxLjAwMDAwMDEzYzg2ZjRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjEKKyAgICAtMHgxLmZhYWVlZDc1ODc1NDFmZmZmZjk5MjJiYTY2OTBiOGJhcC0zLAorICAgIC0weDEuMDAwMDAwMTNjODZmNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEyMgorICAgIDB4MS41NDBiYzc3ODU2ODBhYzJjYTE2OWZmOWUzY2M0YjE1MnAtMSwKKyAgICAweDEuMDAxcDEzCisgIH0sCisgIHsgLy8gRW50cnkgMTIzCisgICAgLTB4MS41NDBiYzc3ODU2ODBhYzJjYTE2OWZmOWUzY2M0YjE1MnAtMSwKKyAgICAtMHgxLjAwMXAxMworICB9LAorICB7IC8vIEVudHJ5IDEyNAorICAgIC0weDEuMzdhN2NiOTA3YTJlNTAwMTA2YjA0ZDllM2YwYjFiOGNwLTEsCisgICAgMHgxLjAwM3A2OTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUKKyAgICAweDEuMzdhN2NiOTA3YTJlNTAwMTA2YjA0ZDllM2YwYjFiOGNwLTEsCisgICAgLTB4MS4wMDNwNjk5CisgIH0sCisgIHsgLy8gRW50cnkgMTI2CisgICAgLTB4MS4yOWU1ODQ1ZmM1NGI1ODAxNDUyNzNmMmNhZmU3M2FiNXAtMSwKKyAgICAweDEuMDAzODBwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcKKyAgICAweDEuMjllNTg0NWZjNTRiNTgwMTQ1MjczZjJjYWZlNzNhYjVwLTEsCisgICAgLTB4MS4wMDM4MHA0MAorICB9LAorICB7IC8vIEVudHJ5IDEyOAorICAgIDB4MS5mZmU1Y2E0NjU2NDkxN2ExZTgxMmFlZGQ0OGZlMTA3Y3AtMSwKKyAgICAweDEuMDA3cDEwCisgIH0sCisgIHsgLy8gRW50cnkgMTI5CisgICAgLTB4MS5mZmU1Y2E0NjU2NDkxN2ExZTgxMmFlZGQ0OGZlMTA3Y3AtMSwKKyAgICAtMHgxLjAwN3AxMAorICB9LAorICB7IC8vIEVudHJ5IDEzMAorICAgIDB4MS5lYTRkZjgyZGIwMTRhYzBjOTEzNDY1ZGE1N2I2YTY0M3AtMSwKKyAgICAweDEuMDA3cDI1CisgIH0sCisgIHsgLy8gRW50cnkgMTMxCisgICAgLTB4MS5lYTRkZjgyZGIwMTRhYzBjOTEzNDY1ZGE1N2I2YTY0M3AtMSwKKyAgICAtMHgxLjAwN3AyNQorICB9LAorICB7IC8vIEVudHJ5IDEzMgorICAgIDB4MS5mZTc1N2FlZjFjODBjN2VjMTYwMDNkM2FlNWYwY2UxNXAtMSwKKyAgICAweDEuMDA3cDQxCisgIH0sCisgIHsgLy8gRW50cnkgMTMzCisgICAgLTB4MS5mZTc1N2FlZjFjODBjN2VjMTYwMDNkM2FlNWYwY2UxNXAtMSwKKyAgICAtMHgxLjAwN3A0MQorICB9LAorICB7IC8vIEVudHJ5IDEzNAorICAgIDB4MS5lOWI3MTgwNWVjMDY4NWQ0ODRmNjI3MGY2NDExZGMzNnAtNywKKyAgICAweDEuMDBjcDQxCisgIH0sCisgIHsgLy8gRW50cnkgMTM1CisgICAgLTB4MS5lOWI3MTgwNWVjMDY4NWQ0ODRmNjI3MGY2NDExZGMzNnAtNywKKyAgICAtMHgxLjAwY3A0MQorICB9LAorICB7IC8vIEVudHJ5IDEzNgorICAgIDB4MS5iMGI2ZDBhNTQwNTgyODAwMDhlODA0ODhmOGFiMWJiN3AtMSwKKyAgICAweDEuMDFjMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDEzNworICAgIC0weDEuYjBiNmQwYTU0MDU4MjgwMDA4ZTgwNDg4ZjhhYjFiYjdwLTEsCisgICAgLTB4MS4wMWMwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTM4CisgICAgMHgxLmZlZjAwOTI2MjcwMTI4MGI5MmFhZjkyNWRkYTYzYmJhcC0zLAorICAgIDB4MS4wMjMyMmU0NmRhOTE5cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTM5CisgICAgLTB4MS5mZWYwMDkyNjI3MDEyODBiOTJhYWY5MjVkZGE2M2JiYXAtMywKKyAgICAtMHgxLjAyMzIyZTQ2ZGE5MTlwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDAKKyAgICAweDEuZmZjOTAwNTk4MDRhMDgyZDliM2Y0NmI3N2VlODE5MzJwLTMsCisgICAgMHgxLjAyYTIzNjQ3OHAtMgorICB9LAorICB7IC8vIEVudHJ5IDE0MQorICAgIC0weDEuZmZjOTAwNTk4MDRhMDgyZDliM2Y0NmI3N2VlODE5MzJwLTMsCisgICAgLTB4MS4wMmEyMzY0NzhwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDIKKyAgICAweDEuZmZkMTBhNmI1NDI5ZTgyOGJlZjRkOTQxM2ViOWY2YzBwLTMsCisgICAgMHgxLjAyYTY1ZDA4Y2E1ZTVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDMKKyAgICAtMHgxLmZmZDEwYTZiNTQyOWU4MjhiZWY0ZDk0MTNlYjlmNmMwcC0zLAorICAgIC0weDEuMDJhNjVkMDhjYTVlNXAtMgorICB9LAorICB7IC8vIEVudHJ5IDE0NAorICAgIDB4MS5mZmQxMGFiMzAyYTNmN2UwYTA0OGRiNTg2MWU3YjIwYnAtMywKKyAgICAweDEuMDJhNjVkMmRjZTQ5YXAtMgorICB9LAorICB7IC8vIEVudHJ5IDE0NQorICAgIC0weDEuZmZkMTBhYjMwMmEzZjdlMGEwNDhkYjU4NjFlN2IyMGJwLTMsCisgICAgLTB4MS4wMmE2NWQyZGNlNDlhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTQ2CisgICAgMHgxLmZmZTBiMTc2NGNhNGM3ZDIzMjk0MzM4MjhjZGM5MDFjcC0zLAorICAgIDB4MS4wMmFlNzIzOGFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDcKKyAgICAtMHgxLmZmZTBiMTc2NGNhNGM3ZDIzMjk0MzM4MjhjZGM5MDFjcC0zLAorICAgIC0weDEuMDJhZTcyMzhhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTQ4CisgICAgLTB4MS5mNjhmMGUyNmMwZjZhZDQ0ZjcxODRkNTZiZTk1ZTFhZXAtMywKKyAgICAweDEuMDUwMWQyMjIyMWRhY3A2MjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDkKKyAgICAweDEuZjY4ZjBlMjZjMGY2YWQ0NGY3MTg0ZDU2YmU5NWUxYWVwLTMsCisgICAgLTB4MS4wNTAxZDIyMjIxZGFjcDYyMQorICB9LAorICB7IC8vIEVudHJ5IDE1MAorICAgIDB4MS5iNjNjNDFmMDllYjc0N2YzMGMxYWY1ZjI1NDM0MGE0Y3AtMSwKKyAgICAweDEuMDZmZmZmZmZmZmZmOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTUxCisgICAgLTB4MS5iNjNjNDFmMDllYjc0N2YzMGMxYWY1ZjI1NDM0MGE0Y3AtMSwKKyAgICAtMHgxLjA2ZmZmZmZmZmZmZjhwMAorICB9LAorICB7IC8vIEVudHJ5IDE1MgorICAgIC0weDEuZmZkYzE3M2FkYWJiMWFmZDU4ZmNiNTY0M2NkODY1NjJwLTEsCisgICAgMHgxLjA3MDIzZDNkNDQyMTVwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTMKKyAgICAweDEuZmZkYzE3M2FkYWJiMWFmZDU4ZmNiNTY0M2NkODY1NjJwLTEsCisgICAgLTB4MS4wNzAyM2QzZDQ0MjE1cDEyCisgIH0sCisgIHsgLy8gRW50cnkgMTU0CisgICAgMHgxLjA4ODllMTFiZWYxMzU3YTg4NzQyYWIzYTdmMTgwNzg2cC01LAorICAgIDB4MS4wODk1YTdhM2U4YWU2cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTU1CisgICAgLTB4MS4wODg5ZTExYmVmMTM1N2E4ODc0MmFiM2E3ZjE4MDc4NnAtNSwKKyAgICAtMHgxLjA4OTVhN2EzZThhZTZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTYKKyAgICAweDEuMDhjYTA3N2M3NjQ0NTdhYTZkOTY4YWZjMWQxYjE3YjNwLTUsCisgICAgMHgxLjA4ZDVkNjk4NDA2MDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTcKKyAgICAtMHgxLjA4Y2EwNzdjNzY0NDU3YWE2ZDk2OGFmYzFkMWIxN2IzcC01LAorICAgIC0weDEuMDhkNWQ2OTg0MDYwMXAtNQorICB9LAorICB7IC8vIEVudHJ5IDE1OAorICAgIC0weDEuZmY3ZmJlNTE4MDIzZTkwYjNmMjhmODFhYjkzZTg3MmZwLTEsCisgICAgMHgxLjBlMHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTU5CisgICAgMHgxLmZmN2ZiZTUxODAyM2U5MGIzZjI4ZjgxYWI5M2U4NzJmcC0xLAorICAgIC0weDEuMGUwcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjAKKyAgICAtMHgxLmZkNmM2OGI4NzdhZmU4MDNhYWFiMmJkMzAxMjRlY2RmcC0xLAorICAgIDB4MS4xMDdiYTQ5YzM0NmU0cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjEKKyAgICAweDEuZmQ2YzY4Yjg3N2FmZTgwM2FhYWIyYmQzMDEyNGVjZGZwLTEsCisgICAgLTB4MS4xMDdiYTQ5YzM0NmU0cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjIKKyAgICAtMHgxLmEyYmE2YmM3MGJjZTQ4MDFlYTRkMWM4NWYxMTYxOTNkcC0xLAorICAgIDB4MS4xNDkxNTQ0Nzc0NDQwcDc0NQorICB9LAorICB7IC8vIEVudHJ5IDE2MworICAgIDB4MS5hMmJhNmJjNzBiY2U0ODAxZWE0ZDFjODVmMTE2MTkzZHAtMSwKKyAgICAtMHgxLjE0OTE1NDQ3NzQ0NDBwNzQ1CisgIH0sCisgIHsgLy8gRW50cnkgMTY0CisgICAgMHgxLjE2NTYwOTc5MGYyMzQ4NGE0NzAxYjQ0MzlkNGZlNTFmcC01LAorICAgIDB4MS4xNjYzYzBlNTE4MTgwcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTY1CisgICAgLTB4MS4xNjU2MDk3OTBmMjM0ODRhNDcwMWI0NDM5ZDRmZTUxZnAtNSwKKyAgICAtMHgxLjE2NjNjMGU1MTgxODBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjYKKyAgICAtMHgxLmZjMDUyM2ZmOTRlNDRjMDE3MzFlNDU5NjMwMzRjYmE4cC0xLAorICAgIDB4MS4xNzQ1ZDE3NDVkMTc2cDIzOAorICB9LAorICB7IC8vIEVudHJ5IDE2NworICAgIDB4MS5mYzA1MjNmZjk0ZTQ0YzAxNzMxZTQ1OTYzMDM0Y2JhOHAtMSwKKyAgICAtMHgxLjE3NDVkMTc0NWQxNzZwMjM4CisgIH0sCisgIHsgLy8gRW50cnkgMTY4CisgICAgMHgxLmYzNGE3MjljNTg0YmNjOTY2NjQwMmNmZGI0ODgzOWZmcC0xLAorICAgIDB4MS4xNzQ3MmE0MDhhM2UwcDk3CisgIH0sCisgIHsgLy8gRW50cnkgMTY5CisgICAgLTB4MS5mMzRhNzI5YzU4NGJjYzk2NjY0MDJjZmRiNDg4MzlmZnAtMSwKKyAgICAtMHgxLjE3NDcyYTQwOGEzZTBwOTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzAKKyAgICAweDEuMTc3ZmFlMTY5ZmRmMDg1OGIxZDRlN2JhZDY5OTgxZGNwLTUsCisgICAgMHgxLjE3OGQ5MWI2Yjk5MmRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzEKKyAgICAtMHgxLjE3N2ZhZTE2OWZkZjA4NThiMWQ0ZTdiYWQ2OTk4MWRjcC01LAorICAgIC0weDEuMTc4ZDkxYjZiOTkyZHAtNQorICB9LAorICB7IC8vIEVudHJ5IDE3MgorICAgIDB4MS4xNzdmYWUxNmExMjBlODU4NDNkMWRmZWYzNjcyNmNlY3AtNSwKKyAgICAweDEuMTc4ZDkxYjZiYWQ0ZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDE3MworICAgIC0weDEuMTc3ZmFlMTZhMTIwZTg1ODQzZDFkZmVmMzY3MjZjZWNwLTUsCisgICAgLTB4MS4xNzhkOTFiNmJhZDRlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTc0CisgICAgMHgxLjE3N2ZhZTE2YTFmNzg4NTY2MzdjYzlkYThhYWY2NDM5cC01LAorICAgIDB4MS4xNzhkOTFiNmJiYWJhcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTc1CisgICAgLTB4MS4xNzdmYWUxNmExZjc4ODU2NjM3Y2M5ZGE4YWFmNjQzOXAtNSwKKyAgICAtMHgxLjE3OGQ5MWI2YmJhYmFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzYKKyAgICAweDEuMTc3ZmFlMTZhNDBmZTg1OGRhMWRkY2I1ODNiYjlmM2JwLTUsCisgICAgMHgxLjE3OGQ5MWI2YmRjNDVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzcKKyAgICAtMHgxLjE3N2ZhZTE2YTQwZmU4NThkYTFkZGNiNTgzYmI5ZjNicC01LAorICAgIC0weDEuMTc4ZDkxYjZiZGM0NXAtNQorICB9LAorICB7IC8vIEVudHJ5IDE3OAorICAgIDB4MS4yOTdjNzY4ZjI0MTMwODAwMDJlZGNiOWE5MDU5NDZhZnAtMSwKKyAgICAweDEuMTk3NTJkYmVlNWY2YXA5MzMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzkKKyAgICAtMHgxLjI5N2M3NjhmMjQxMzA4MDAwMmVkY2I5YTkwNTk0NmFmcC0xLAorICAgIC0weDEuMTk3NTJkYmVlNWY2YXA5MzMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODAKKyAgICAweDEuYjgyNmRmNWNhZmFmYTgyNDc3OWJiODA4ZDY0ZGU2ZmJwLTIsCisgICAgMHgxLjFiMzAwOWNmZTRkYmNwOAorICB9LAorICB7IC8vIEVudHJ5IDE4MQorICAgIC0weDEuYjgyNmRmNWNhZmFmYTgyNDc3OWJiODA4ZDY0ZGU2ZmJwLTIsCisgICAgLTB4MS4xYjMwMDljZmU0ZGJjcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODIKKyAgICAweDEuYjdhNTk1NjI1MGI2YTgzODgyMTMzYmJlMTRjODQ3Y2NwLTIsCisgICAgMHgxLjFmNjQ3NWQ5NWJmMThwMworICB9LAorICB7IC8vIEVudHJ5IDE4MworICAgIC0weDEuYjdhNTk1NjI1MGI2YTgzODgyMTMzYmJlMTRjODQ3Y2NwLTIsCisgICAgLTB4MS4xZjY0NzVkOTViZjE4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODQKKyAgICAweDEuNGRiNjU2NmI2NDU0NzdmZmVhOWZhYWY4YmY0NjNhMWVwLTEsCisgICAgMHgxLjIyOTE0OGE0NTIyOTFwMTE4CisgIH0sCisgIHsgLy8gRW50cnkgMTg1CisgICAgLTB4MS40ZGI2NTY2YjY0NTQ3N2ZmZWE5ZmFhZjhiZjQ2M2ExZXAtMSwKKyAgICAtMHgxLjIyOTE0OGE0NTIyOTFwMTE4CisgIH0sCisgIHsgLy8gRW50cnkgMTg2CisgICAgMHgxLjE2ODZmZWUyYzQ5YTdmZmZiNjhkZjY4MWIyZGE3ZTQ5cC0xLAorICAgIDB4MS4yNjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODcKKyAgICAtMHgxLjE2ODZmZWUyYzQ5YTdmZmZiNjhkZjY4MWIyZGE3ZTQ5cC0xLAorICAgIC0weDEuMjY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTg4CisgICAgMHgxLjIyZWIyMWE0NGQ2Mjc4MDAwMDAzMWFlNDNjNDQ4NTExcC0yLAorICAgIDB4MS4yNmZiMzg0NGRkMTkwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTg5CisgICAgLTB4MS4yMmViMjFhNDRkNjI3ODAwMDAwMzFhZTQzYzQ0ODUxMXAtMiwKKyAgICAtMHgxLjI2ZmIzODQ0ZGQxOTBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTAKKyAgICAweDEuZDRhMjE2ZDg5YjJiMzdmNDBmZjA4NzUzZWQ2MDBlNzRwLTEsCisgICAgMHgxLjI3ZmZmZmZmZmU2YjBwMAorICB9LAorICB7IC8vIEVudHJ5IDE5MQorICAgIC0weDEuZDRhMjE2ZDg5YjJiMzdmNDBmZjA4NzUzZWQ2MDBlNzRwLTEsCisgICAgLTB4MS4yN2ZmZmZmZmZlNmIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTIKKyAgICAtMHgxLjc2YzliMGYzYTIyZjczY2ZkNDQ1M2ZjZjdiMjFlMzU4cC0xLAorICAgIDB4MS4yODRiODQwNDhkNDgxcDIwNAorICB9LAorICB7IC8vIEVudHJ5IDE5MworICAgIDB4MS43NmM5YjBmM2EyMmY3M2NmZDQ0NTNmY2Y3YjIxZTM1OHAtMSwKKyAgICAtMHgxLjI4NGI4NDA0OGQ0ODFwMjA0CisgIH0sCisgIHsgLy8gRW50cnkgMTk0CisgICAgLTB4MS5mZjAxMjI2Zjk3ZDMyZDZiNWMwZDVlNGEzYTJmNTNjM3AtMSwKKyAgICAweDEuMjk5OWUzMTA5Y2FkNHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTk1CisgICAgMHgxLmZmMDEyMjZmOTdkMzJkNmI1YzBkNWU0YTNhMmY1M2MzcC0xLAorICAgIC0weDEuMjk5OWUzMTA5Y2FkNHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTk2CisgICAgMHgxLjJhOGYxMWU3YWU4MmMwYTM3NDg1NWI1M2IzNjA1ZDNicC01LAorICAgIDB4MS4yYWFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTcKKyAgICAtMHgxLjJhOGYxMWU3YWU4MmMwYTM3NDg1NWI1M2IzNjA1ZDNicC01LAorICAgIC0weDEuMmFhcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTk4CisgICAgMHgxLjJiMDNkMWJmNzczZGY3YjY5N2Q4YTk3ZWNjZWZlYzUwcC01LAorICAgIDB4MS4yYjE0ZDNiZTBjMjMwcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTk5CisgICAgLTB4MS4yYjAzZDFiZjc3M2RmN2I2OTdkOGE5N2VjY2VmZWM1MHAtNSwKKyAgICAtMHgxLjJiMTRkM2JlMGMyMzBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDAKKyAgICAtMHgxLmZmYjkwZWU2NDE3OTFlNjk5YWE3ZmM3MTM5YmY1OGI0cC0xLAorICAgIDB4MS4yYjdjYjQ0ODQ5OTgxcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDEKKyAgICAweDEuZmZiOTBlZTY0MTc5MWU2OTlhYTdmYzcxMzliZjU4YjRwLTEsCisgICAgLTB4MS4yYjdjYjQ0ODQ5OTgxcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDIKKyAgICAtMHgxLmZmZmZmZjc5ZTcxYTNkYjIyMTA5YzZiYjg3ZjljMjM3cC0xLAorICAgIDB4MS4yYmVjYzg2ODUyNTgwcDIwMAorICB9LAorICB7IC8vIEVudHJ5IDIwMworICAgIDB4MS5mZmZmZmY3OWU3MWEzZGIyMjEwOWM2YmI4N2Y5YzIzN3AtMSwKKyAgICAtMHgxLjJiZWNjODY4NTI1ODBwMjAwCisgIH0sCisgIHsgLy8gRW50cnkgMjA0CisgICAgLTB4MS5mZmY5ZWRhZjg1Yjc2ZjZjYmIyZjViN2UzODRjYmJjOXAtMSwKKyAgICAweDEuMmNmYTE0Y2UyN2NkNXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjA1CisgICAgMHgxLmZmZjllZGFmODViNzZmNmNiYjJmNWI3ZTM4NGNiYmM5cC0xLAorICAgIC0weDEuMmNmYTE0Y2UyN2NkNXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjA2CisgICAgMHgxLjJjYmFhYTRjZWJiNTE3ZmU3YmQxNGYwNjJhZmVjMzkwcC00LAorICAgIDB4MS4yZDBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDcKKyAgICAtMHgxLjJjYmFhYTRjZWJiNTE3ZmU3YmQxNGYwNjJhZmVjMzkwcC00LAorICAgIC0weDEuMmQwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjA4CisgICAgLTB4MS5mZmZmYmMxNzdlMDBmZjg5Y2JiNGY0OWEwNjQzZGE3OHAtMSwKKyAgICAweDEuMmQ3NmQxODcyMWJlOHAyCisgIH0sCisgIHsgLy8gRW50cnkgMjA5CisgICAgMHgxLmZmZmZiYzE3N2UwMGZmODljYmI0ZjQ5YTA2NDNkYTc4cC0xLAorICAgIC0weDEuMmQ3NmQxODcyMWJlOHAyCisgIH0sCisgIHsgLy8gRW50cnkgMjEwCisgICAgMHgxLjc0NTg0M2RmYWZlZmQxYmY5NjU2ODk2YThmYjViMGUzcC0xOCwKKyAgICAweDEuMzAyYTQ5NGUwOTA5MHA5NworICB9LAorICB7IC8vIEVudHJ5IDIxMQorICAgIC0weDEuNzQ1ODQzZGZhZmVmZDFiZjk2NTY4OTZhOGZiNWIwZTNwLTE4LAorICAgIC0weDEuMzAyYTQ5NGUwOTA5MHA5NworICB9LAorICB7IC8vIEVudHJ5IDIxMgorICAgIDB4MS5mZmNjNTY4ZDQyMzc2NmM5MmU5YzE3NWY5MjEwZjFmNHAtMSwKKyAgICAweDEuMzFjYzczMWNjNzMxY3AxMDAwCisgIH0sCisgIHsgLy8gRW50cnkgMjEzCisgICAgLTB4MS5mZmNjNTY4ZDQyMzc2NmM5MmU5YzE3NWY5MjEwZjFmNHAtMSwKKyAgICAtMHgxLjMxY2M3MzFjYzczMWNwMTAwMAorICB9LAorICB7IC8vIEVudHJ5IDIxNAorICAgIDB4MS5iNjc2MDc3ZDRmYWY3OTI3ZGExZjg1ODUzOWZhZDFmZnAtMSwKKyAgICAweDEuMzI4NDYzZDRmOGNhNnA0NDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTUKKyAgICAtMHgxLmI2NzYwNzdkNGZhZjc5MjdkYTFmODU4NTM5ZmFkMWZmcC0xLAorICAgIC0weDEuMzI4NDYzZDRmOGNhNnA0NDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTYKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmMzQ3MWQ4ZGMwNzBkNWU2cC0xLAorICAgIDB4MS4zMmNlOTBiMzIxNzFlcDE4CisgIH0sCisgIHsgLy8gRW50cnkgMjE3CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmMzQ3MWQ4ZGMwNzBkNWU2cC0xLAorICAgIC0weDEuMzJjZTkwYjMyMTcxZXAxOAorICB9LAorICB7IC8vIEVudHJ5IDIxOAorICAgIDB4MS4zNWNiZDMyNDBkMTQ4ODQ1ZDM5ZWJkNTRiMTU1Njc3OXAtNSwKKyAgICAweDEuMzVkZWJkN2YwMjBlY3AtNQorICB9LAorICB7IC8vIEVudHJ5IDIxOQorICAgIC0weDEuMzVjYmQzMjQwZDE0ODg0NWQzOWViZDU0YjE1NTY3NzlwLTUsCisgICAgLTB4MS4zNWRlYmQ3ZjAyMGVjcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjIwCisgICAgMHgxLjNiYjIwODY1NTlmYTk4MmU1YzZkYTEwZDhkOWFjOTMxcC03LAorICAgIDB4MS4zYmIzNDg3ODkzNDA1cC03CisgIH0sCisgIHsgLy8gRW50cnkgMjIxCisgICAgLTB4MS4zYmIyMDg2NTU5ZmE5ODJlNWM2ZGExMGQ4ZDlhYzkzMXAtNywKKyAgICAtMHgxLjNiYjM0ODc4OTM0MDVwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjIKKyAgICAweDEuM2JiMjA4NjU1OWZhYjgyZGZiMTkyNWVhYzJhYjhiYzFwLTcsCisgICAgMHgxLjNiYjM0ODc4OTM0MDdwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjMKKyAgICAtMHgxLjNiYjIwODY1NTlmYWI4MmRmYjE5MjVlYWMyYWI4YmMxcC03LAorICAgIC0weDEuM2JiMzQ4Nzg5MzQwN3AtNworICB9LAorICB7IC8vIEVudHJ5IDIyNAorICAgIDB4MS5kZmYxOTdlZGM1MWQyMzVlNGE0Y2M2ZTM0YmQxZmQxMHAtMTYsCisgICAgMHgxLjNiYjY4MWQ2NWFhNjBwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMjI1CisgICAgLTB4MS5kZmYxOTdlZGM1MWQyMzVlNGE0Y2M2ZTM0YmQxZmQxMHAtMTYsCisgICAgLTB4MS4zYmI2ODFkNjVhYTYwcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDIyNgorICAgIC0weDEuNWQwOGQzZGJiNDFhZjgwMDAwMDUzYmEzMGU5NWU3MDlwLTMsCisgICAgMHgxLjNmOWFhODYyNjA0MmZwODMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjcKKyAgICAweDEuNWQwOGQzZGJiNDFhZjgwMDAwMDUzYmEzMGU5NWU3MDlwLTMsCisgICAgLTB4MS4zZjlhYTg2MjYwNDJmcDgzCisgIH0sCisgIHsgLy8gRW50cnkgMjI4CisgICAgMHgxLmZiNTAzOTgzZjk0YmI3NDlmY2U5Y2NjYTU2YTM1ZWM2cC0zLAorICAgIDB4MS4zZmVwMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjkKKyAgICAtMHgxLmZiNTAzOTgzZjk0YmI3NDlmY2U5Y2NjYTU2YTM1ZWM2cC0zLAorICAgIC0weDEuM2ZlcDE5CisgIH0sCisgIHsgLy8gRW50cnkgMjMwCisgICAgLTB4MS5kMzg3NmVhY2M5ZWU2ZWM1YTkzZWExNGUwMzJmOWIwMnAtMSwKKyAgICAweDEuNDI4NTQ3OGYxZTNjOHA1OAorICB9LAorICB7IC8vIEVudHJ5IDIzMQorICAgIDB4MS5kMzg3NmVhY2M5ZWU2ZWM1YTkzZWExNGUwMzJmOWIwMnAtMSwKKyAgICAtMHgxLjQyODU0NzhmMWUzYzhwNTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzIKKyAgICAweDEuNDJiNjZkNTRmNjljMGZhYmUzNzFkNzAzYTFkN2Q3YzlwLTUsCisgICAgMHgxLjQyY2JjZjQ1YTE2OWVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzMKKyAgICAtMHgxLjQyYjY2ZDU0ZjY5YzBmYWJlMzcxZDcwM2ExZDdkN2M5cC01LAorICAgIC0weDEuNDJjYmNmNDVhMTY5ZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDIzNAorICAgIDB4MS5iNDVlOWU5NDI3NTUzODAwMDAwMTVlMWRiMGNlMTg4ZHAtMSwKKyAgICAweDEuNDNmZmZmZmZmZmY2YXA1NTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzUKKyAgICAtMHgxLmI0NWU5ZTk0Mjc1NTM4MDAwMDAxNWUxZGIwY2UxODhkcC0xLAorICAgIC0weDEuNDNmZmZmZmZmZmY2YXA1NTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzYKKyAgICAweDEuNDNmZmZmZmZlYTYwMjgwMDAwNmVkNzg2MmIzMjI0YTZwLTE3LAorICAgIDB4MS40NDBwLTE3CisgIH0sCisgIHsgLy8gRW50cnkgMjM3CisgICAgLTB4MS40M2ZmZmZmZmVhNjAyODAwMDA2ZWQ3ODYyYjMyMjRhNnAtMTcsCisgICAgLTB4MS40NDBwLTE3CisgIH0sCisgIHsgLy8gRW50cnkgMjM4CisgICAgLTB4MS42YTRlOThkMmQ4YjFiN2ZiNDNmZWYxYmM0ZTMyNDViYnAtMSwKKyAgICAweDEuNDc0OGMwOGRjMDk3NnAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzkKKyAgICAweDEuNmE0ZTk4ZDJkOGIxYjdmYjQzZmVmMWJjNGUzMjQ1YmJwLTEsCisgICAgLTB4MS40NzQ4YzA4ZGMwOTc2cDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI0MAorICAgIC0weDEuYjU3Y2E4YWFjZjJhOTM3YTI2OWNjZGZhOGIzOGM4YzFwLTEsCisgICAgMHgxLjQ3OGZjMDhwNDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDEKKyAgICAweDEuYjU3Y2E4YWFjZjJhOTM3YTI2OWNjZGZhOGIzOGM4YzFwLTEsCisgICAgLTB4MS40NzhmYzA4cDQzCisgIH0sCisgIHsgLy8gRW50cnkgMjQyCisgICAgMHgxLmZmZTM4MDA4ZWY2YjQ5NTZiMjkwMjAyZDQxNGQ1OWMzcC0xLAorICAgIDB4MS40Y2YzNmQxN2M1OTZlcDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI0MworICAgIC0weDEuZmZlMzgwMDhlZjZiNDk1NmIyOTAyMDJkNDE0ZDU5YzNwLTEsCisgICAgLTB4MS40Y2YzNmQxN2M1OTZlcDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI0NAorICAgIDB4MS5kNjQ1N2EzZjEyZTZjNTI3YTg1MzQ3MDQwMWQzNWQyZHAtMSwKKyAgICAweDEuNGYwZjMwOHA0ODgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDUKKyAgICAtMHgxLmQ2NDU3YTNmMTJlNmM1MjdhODUzNDcwNDAxZDM1ZDJkcC0xLAorICAgIC0weDEuNGYwZjMwOHA0ODgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDYKKyAgICAweDEuNGZmZmZmZmZmZjlmODgwMDAwMDAwODRmMjJjY2NjY2NwLTIwLAorICAgIDB4MS41cC0yMAorICB9LAorICB7IC8vIEVudHJ5IDI0NworICAgIC0weDEuNGZmZmZmZmZmZjlmODgwMDAwMDAwODRmMjJjY2NjY2NwLTIwLAorICAgIC0weDEuNXAtMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDgKKyAgICAtMHgxLmNiYWQwOTVmNTAzYTE4MDE5YTdiMjcxNzBmNmE0YWNmcC0xLAorICAgIDB4MS41MTQzZTI1YTQ4OGYxcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDkKKyAgICAweDEuY2JhZDA5NWY1MDNhMTgwMTlhN2IyNzE3MGY2YTRhY2ZwLTEsCisgICAgLTB4MS41MTQzZTI1YTQ4OGYxcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTAKKyAgICAtMHgxLmY5NDJkNjI2MmU4MmRkNjgzNGRlZDhjOTBkMGY4MjEycC01LAorICAgIDB4MS41MWYwZjQ0ZGE0ZGY0cDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI1MQorICAgIDB4MS5mOTQyZDYyNjJlODJkZDY4MzRkZWQ4YzkwZDBmODIxMnAtNSwKKyAgICAtMHgxLjUxZjBmNDRkYTRkZjRwMjAwCisgIH0sCisgIHsgLy8gRW50cnkgMjUyCisgICAgLTB4MS5mYzQ2NmNjYWVjZTgwNGFhYzE0ZTc5YWFiYTRiNWMxZXAtMywKKyAgICAweDEuNTJhZDZjNWEzNjAyZnAxNgorICB9LAorICB7IC8vIEVudHJ5IDI1MworICAgIDB4MS5mYzQ2NmNjYWVjZTgwNGFhYzE0ZTc5YWFiYTRiNWMxZXAtMywKKyAgICAtMHgxLjUyYWQ2YzVhMzYwMmZwMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTQKKyAgICAweDEuZDY5YzNjZjRlZWNkZDliNDM3MjZhMmE3ZmE0MDVjMzFwLTEsCisgICAgMHgxLjUyZjAwZTBwNzkzCisgIH0sCisgIHsgLy8gRW50cnkgMjU1CisgICAgLTB4MS5kNjljM2NmNGVlY2RkOWI0MzcyNmEyYTdmYTQwNWMzMXAtMSwKKyAgICAtMHgxLjUyZjAwZTBwNzkzCisgIH0sCisgIHsgLy8gRW50cnkgMjU2CisgICAgMHgxLmUxMjAyOTJmM2Q0OTU2NTc5ZjljMzE2NGNkOTRiYWQ2cC0xLAorICAgIDB4MS41NTU1NTU1NTU1NTU2cDIzOQorICB9LAorICB7IC8vIEVudHJ5IDI1NworICAgIC0weDEuZTEyMDI5MmYzZDQ5NTY1NzlmOWMzMTY0Y2Q5NGJhZDZwLTEsCisgICAgLTB4MS41NTU1NTU1NTU1NTU2cDIzOQorICB9LAorICB7IC8vIEVudHJ5IDI1OAorICAgIC0weDEuZmQxZDg1YjdlZjAwMzdmYzRiMWQxNzYzODgyMDg1ZjFwLTEsCisgICAgMHgxLjVhMDAwMDAwOHA2CisgIH0sCisgIHsgLy8gRW50cnkgMjU5CisgICAgMHgxLmZkMWQ4NWI3ZWYwMDM3ZmM0YjFkMTc2Mzg4MjA4NWYxcC0xLAorICAgIC0weDEuNWEwMDAwMDA4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjAKKyAgICAweDEuNWFmZjk2NjRiMDdlMWEyZTBmMjRiMjU3MmRkYmZmNjRwLTYsCisgICAgMHgxLjViMDYzYWQyZGQwOGZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjEKKyAgICAtMHgxLjVhZmY5NjY0YjA3ZTFhMmUwZjI0YjI1NzJkZGJmZjY0cC02LAorICAgIC0weDEuNWIwNjNhZDJkZDA4ZnAtNgorICB9LAorICB7IC8vIEVudHJ5IDI2MgorICAgIC0weDEuODNmOGJiYjU5ZjJmOGNkOGViYmQ0NGM0NTllNGM0OTNwLTEsCisgICAgMHgxLjViMTc5ZDc1ZmEyODVwMgorICB9LAorICB7IC8vIEVudHJ5IDI2MworICAgIDB4MS44M2Y4YmJiNTlmMmY4Y2Q4ZWJiZDQ0YzQ1OWU0YzQ5M3AtMSwKKyAgICAtMHgxLjViMTc5ZDc1ZmEyODVwMgorICB9LAorICB7IC8vIEVudHJ5IDI2NAorICAgIDB4MS5mYTg2NWIwZDk5NDk2ODM5MGY5NDgwYzljYWY0OWNiMXAtMSwKKyAgICAweDEuNWJiNTk2NzQwMmY5Y3A3OQorICB9LAorICB7IC8vIEVudHJ5IDI2NQorICAgIC0weDEuZmE4NjViMGQ5OTQ5NjgzOTBmOTQ4MGM5Y2FmNDljYjFwLTEsCisgICAgLTB4MS41YmI1OTY3NDAyZjljcDc5CisgIH0sCisgIHsgLy8gRW50cnkgMjY2CisgICAgMHgxLmU4YTUyM2ZjZTg4NGQxODliZGI4N2MyMGVkNjE1OTQ0cC0yLAorICAgIDB4MS41YmVhMDEwcDQ2OAorICB9LAorICB7IC8vIEVudHJ5IDI2NworICAgIC0weDEuZThhNTIzZmNlODg0ZDE4OWJkYjg3YzIwZWQ2MTU5NDRwLTIsCisgICAgLTB4MS41YmVhMDEwcDQ2OAorICB9LAorICB7IC8vIEVudHJ5IDI2OAorICAgIC0weDEuZmYyYWQ5NDFmMGE0MGVhM2JjMjllNmRkOWMzMzliNjNwLTEsCisgICAgMHgxLjVmMTlmYmM1MDdhZjZwOQorICB9LAorICB7IC8vIEVudHJ5IDI2OQorICAgIDB4MS5mZjJhZDk0MWYwYTQwZWEzYmMyOWU2ZGQ5YzMzOWI2M3AtMSwKKyAgICAtMHgxLjVmMTlmYmM1MDdhZjZwOQorICB9LAorICB7IC8vIEVudHJ5IDI3MAorICAgIC0weDEuNzVjZTRhMGQwYmQwMzdmZDUzMDQyY2FiODI0MDQ5NTNwLTEsCisgICAgMHgxLjYwYTYxMGE2NThkYTlwODg5CisgIH0sCisgIHsgLy8gRW50cnkgMjcxCisgICAgMHgxLjc1Y2U0YTBkMGJkMDM3ZmQ1MzA0MmNhYjgyNDA0OTUzcC0xLAorICAgIC0weDEuNjBhNjEwYTY1OGRhOXA4ODkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzIKKyAgICAtMHgxLjcyMTU4NjU5NGFiNDgxOGFjZDRjYjQxZmFmYzk5NDg0cC0xLAorICAgIDB4MS42MmFkN2NlMTcxNDNkcDYyCisgIH0sCisgIHsgLy8gRW50cnkgMjczCisgICAgMHgxLjcyMTU4NjU5NGFiNDgxOGFjZDRjYjQxZmFmYzk5NDg0cC0xLAorICAgIC0weDEuNjJhZDdjZTE3MTQzZHA2MgorICB9LAorICB7IC8vIEVudHJ5IDI3NAorICAgIDB4MS5iOGQyNzAxOWQxYjllODM2Yjk1MzYxM2M4N2FjZjNhOXAtMiwKKyAgICAweDEuNjQ1OTI2Y2MxMTMyY3A5CisgIH0sCisgIHsgLy8gRW50cnkgMjc1CisgICAgLTB4MS5iOGQyNzAxOWQxYjllODM2Yjk1MzYxM2M4N2FjZjNhOXAtMiwKKyAgICAtMHgxLjY0NTkyNmNjMTEzMmNwOQorICB9LAorICB7IC8vIEVudHJ5IDI3NgorICAgIDB4MS42NDdlMDkwNTljMWU5ODAwMDAxMzcxNGNkMGM2YTQzZHAtOSwKKyAgICAweDEuNjQ3ZTI1ZDM5MWYxN3AtOQorICB9LAorICB7IC8vIEVudHJ5IDI3NworICAgIC0weDEuNjQ3ZTA5MDU5YzFlOTgwMDAwMTM3MTRjZDBjNmE0M2RwLTksCisgICAgLTB4MS42NDdlMjVkMzkxZjE3cC05CisgIH0sCisgIHsgLy8gRW50cnkgMjc4CisgICAgLTB4MS44ZDNiNTNmZjg1YTgyM2QwNjUzNzQxMzkwMTIyOWU0NXAtMSwKKyAgICAweDEuNjRlZjQzOHAxNDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzkKKyAgICAweDEuOGQzYjUzZmY4NWE4MjNkMDY1Mzc0MTM5MDEyMjllNDVwLTEsCisgICAgLTB4MS42NGVmNDM4cDE0MgorICB9LAorICB7IC8vIEVudHJ5IDI4MAorICAgIC0weDEuZjdjODYzMGU2MmEwMWZmZDRlMDI1Nzc5NTZlNTUyM2VwLTEsCisgICAgMHgxLjY1OTk2NjU5OTY2NThwMworICB9LAorICB7IC8vIEVudHJ5IDI4MQorICAgIDB4MS5mN2M4NjMwZTYyYTAxZmZkNGUwMjU3Nzk1NmU1NTIzZXAtMSwKKyAgICAtMHgxLjY1OTk2NjU5OTY2NThwMworICB9LAorICB7IC8vIEVudHJ5IDI4MgorICAgIDB4MS42NzAyOGUzNjAyMDM0ODAwZjQ1YTkxNThkMjBhMzQwY3AtNSwKKyAgICAweDEuNjcycC01CisgIH0sCisgIHsgLy8gRW50cnkgMjgzCisgICAgLTB4MS42NzAyOGUzNjAyMDM0ODAwZjQ1YTkxNThkMjBhMzQwY3AtNSwKKyAgICAtMHgxLjY3MnAtNQorICB9LAorICB7IC8vIEVudHJ5IDI4NAorICAgIDB4MS5iYzYwYzhjMzNjYjVlYmY2OTNkNzE2NTBjYmYxNjZmOXAtMiwKKyAgICAweDEuNjg4YWU2YzEzOGVhOHAyOTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODUKKyAgICAtMHgxLmJjNjBjOGMzM2NiNWViZjY5M2Q3MTY1MGNiZjE2NmY5cC0yLAorICAgIC0weDEuNjg4YWU2YzEzOGVhOHAyOTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODYKKyAgICAtMHgxLmZjM2I0YmI4YjAxMmU4MDQyZDNlYmNlZDEyZGVmMGM5cC0xLAorICAgIDB4MS42YWE3OHAxNworICB9LAorICB7IC8vIEVudHJ5IDI4NworICAgIDB4MS5mYzNiNGJiOGIwMTJlODA0MmQzZWJjZWQxMmRlZjBjOXAtMSwKKyAgICAtMHgxLjZhYTc4cDE3CisgIH0sCisgIHsgLy8gRW50cnkgMjg4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmI1cC0xLAorICAgIDB4MS42YWM1YjI2MmNhMWZmcDg0OQorICB9LAorICB7IC8vIEVudHJ5IDI4OQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYjVwLTEsCisgICAgLTB4MS42YWM1YjI2MmNhMWZmcDg0OQorICB9LAorICB7IC8vIEVudHJ5IDI5MAorICAgIC0weDEuODIzMTc4MzZhOTdjOGNlYTFjZDJlM2E0ZDBkNDhmMjlwLTEsCisgICAgMHgxLjZkODgwODM3NDk0MTJwNAorICB9LAorICB7IC8vIEVudHJ5IDI5MQorICAgIDB4MS44MjMxNzgzNmE5N2M4Y2VhMWNkMmUzYTRkMGQ0OGYyOXAtMSwKKyAgICAtMHgxLjZkODgwODM3NDk0MTJwNAorICB9LAorICB7IC8vIEVudHJ5IDI5MgorICAgIDB4MS42Zjc4MWM3OGNjODJhN2ZmY2QyMGJhODAxZTY2OTFiMXAtNiwKKyAgICAweDEuNmY4cC02CisgIH0sCisgIHsgLy8gRW50cnkgMjkzCisgICAgLTB4MS42Zjc4MWM3OGNjODJhN2ZmY2QyMGJhODAxZTY2OTFiMXAtNiwKKyAgICAtMHgxLjZmOHAtNgorICB9LAorICB7IC8vIEVudHJ5IDI5NAorICAgIC0weDEuZmRiZTUwODU0OTRhZTdmZTQ3ZmEwNjdhYWVhN2ZkZjlwLTEsCisgICAgMHgxLjcyOWFhNjg1OWQxZjRwMzk2CisgIH0sCisgIHsgLy8gRW50cnkgMjk1CisgICAgMHgxLmZkYmU1MDg1NDk0YWU3ZmU0N2ZhMDY3YWFlYTdmZGY5cC0xLAorICAgIC0weDEuNzI5YWE2ODU5ZDFmNHAzOTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTYKKyAgICAtMHgxLmZmZmZmYWU4NjJiNGZlYzFjMmYxNzEyYWExNjU4MDdjcC0xLAorICAgIDB4MS43M2UyZGJlOWEyZjgwcDEwCisgIH0sCisgIHsgLy8gRW50cnkgMjk3CisgICAgMHgxLmZmZmZmYWU4NjJiNGZlYzFjMmYxNzEyYWExNjU4MDdjcC0xLAorICAgIC0weDEuNzNlMmRiZTlhMmY4MHAxMAorICB9LAorICB7IC8vIEVudHJ5IDI5OAorICAgIDB4MS43NjlhYzc0NDU5YjA1ODQ1NmIzMzMyMzg4MzNmMWQxYXAtNywKKyAgICAweDEuNzY5Y2RlMGI5MGI4MHAtNworICB9LAorICB7IC8vIEVudHJ5IDI5OQorICAgIC0weDEuNzY5YWM3NDQ1OWIwNTg0NTZiMzMzMjM4ODMzZjFkMWFwLTcsCisgICAgLTB4MS43NjljZGUwYjkwYjgwcC03CisgIH0sCisgIHsgLy8gRW50cnkgMzAwCisgICAgMHgxLjc2OWU4YWZiNmE0ZWJmOTlhZGU0NjVkMTliZTg2YWMwcC01LAorICAgIDB4MS43NmNwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDEKKyAgICAtMHgxLjc2OWU4YWZiNmE0ZWJmOTlhZGU0NjVkMTliZTg2YWMwcC01LAorICAgIC0weDEuNzZjcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzAyCisgICAgMHgxLmZkNTYyNjExZjViZDQ4MDBkZTUwM2U0MjEwY2M3ZGY0cC0xLAorICAgIDB4MS43ODAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzAzCisgICAgLTB4MS5mZDU2MjYxMWY1YmQ0ODAwZGU1MDNlNDIxMGNjN2RmNHAtMSwKKyAgICAtMHgxLjc4MDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDQKKyAgICAweDEuZmRiYTc4NGNhMDBmMTdlYmNjMmI1YjEwOThlODNiZmZwLTEsCisgICAgMHgxLjdhMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzA1CisgICAgLTB4MS5mZGJhNzg0Y2EwMGYxN2ViY2MyYjViMTA5OGU4M2JmZnAtMSwKKyAgICAtMHgxLjdhMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzA2CisgICAgMHgxLmY5MzBjMjIyYTg2ODJkN2QxOTIwYTEyYjY4ODcwYzM2cC01LAorICAgIDB4MS43YWJkODcwMzgxYzJkcDM4CisgIH0sCisgIHsgLy8gRW50cnkgMzA3CisgICAgLTB4MS5mOTMwYzIyMmE4NjgyZDdkMTkyMGExMmI2ODg3MGMzNnAtNSwKKyAgICAtMHgxLjdhYmQ4NzAzODFjMmRwMzgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDgKKyAgICAweDEuZmZlYjJmZjJiNjkyMzY3YmM1NjYwZGFiNjk2MGI1N2RwLTEsCisgICAgMHgxLjdkYzk0NWMyMTI0ODBwOTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDkKKyAgICAtMHgxLmZmZWIyZmYyYjY5MjM2N2JjNTY2MGRhYjY5NjBiNTdkcC0xLAorICAgIC0weDEuN2RjOTQ1YzIxMjQ4MHA5NQorICB9LAorICB7IC8vIEVudHJ5IDMxMAorICAgIDB4MS5iMjc5MTUzYzIzZmIxODAwMDBjZTNhMGQ0N2Q4YzQ3NnAtMiwKKyAgICAweDEuN2Y3M2UxNTk0YjcwY3A5OAorICB9LAorICB7IC8vIEVudHJ5IDMxMQorICAgIC0weDEuYjI3OTE1M2MyM2ZiMTgwMDAwY2UzYTBkNDdkOGM0NzZwLTIsCisgICAgLTB4MS43ZjczZTE1OTRiNzBjcDk4CisgIH0sCisgIHsgLy8gRW50cnkgMzEyCisgICAgLTB4MS41OTlmYWQzNWNmNjBhZDQzNzYwY2YzYTlkYTNkOWMzMHAtNDEsCisgICAgMHgxLjdmN2VmNzdlODNmMWFwMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTMKKyAgICAweDEuNTk5ZmFkMzVjZjYwYWQ0Mzc2MGNmM2E5ZGEzZDljMzBwLTQxLAorICAgIC0weDEuN2Y3ZWY3N2U4M2YxYXAyMQorICB9LAorICB7IC8vIEVudHJ5IDMxNAorICAgIDB4MS5mZWI3YTliMmM2ZDhhZGU2ZTE3ZmRhY2FlZjRmZDk2Y3AtMSwKKyAgICAweDEuOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzE1CisgICAgLTB4MS5mZWI3YTliMmM2ZDhhZGU2ZTE3ZmRhY2FlZjRmZDk2Y3AtMSwKKyAgICAtMHgxLjhwMAorICB9LAorICB7IC8vIEVudHJ5IDMxNgorICAgIDB4MS5mNzk4ZDAxZWM2MTViOGVkZWRhNDc0ZTNjNmNkMGM5MnAtMSwKKyAgICAweDEuOHA2CisgIH0sCisgIHsgLy8gRW50cnkgMzE3CisgICAgLTB4MS5mNzk4ZDAxZWM2MTViOGVkZWRhNDc0ZTNjNmNkMGM5MnAtMSwKKyAgICAtMHgxLjhwNgorICB9LAorICB7IC8vIEVudHJ5IDMxOAorICAgIDB4MS5mZWUxYTJhOTc3YmNlZDE3OWY4YWI4NDU1YWRhNTI1ZnAtMSwKKyAgICAweDEuODEzMmNlYjFjNGYzOXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzE5CisgICAgLTB4MS5mZWUxYTJhOTc3YmNlZDE3OWY4YWI4NDU1YWRhNTI1ZnAtMSwKKyAgICAtMHgxLjgxMzJjZWIxYzRmMzlwMAorICB9LAorICB7IC8vIEVudHJ5IDMyMAorICAgIC0weDEuMjQyNDVhZjRjZDk5NGU5YjNiYmE5OTJkMGY1N2ZjM2ZwLTUyLAorICAgIDB4MS44MWFlMGRmZmEzYjMzcDk1OQorICB9LAorICB7IC8vIEVudHJ5IDMyMQorICAgIDB4MS4yNDI0NWFmNGNkOTk0ZTliM2JiYTk5MmQwZjU3ZmMzZnAtNTIsCisgICAgLTB4MS44MWFlMGRmZmEzYjMzcDk1OQorICB9LAorICB7IC8vIEVudHJ5IDMyMgorICAgIDB4MS44NWQ0MWIwYmYzMDkwN2ZmZmZmMTkxM2E1Y2VkNzY0NXAtNCwKKyAgICAweDEuODVlYzVhMzk5YTJlNnAxCisgIH0sCisgIHsgLy8gRW50cnkgMzIzCisgICAgLTB4MS44NWQ0MWIwYmYzMDkwN2ZmZmZmMTkxM2E1Y2VkNzY0NXAtNCwKKyAgICAtMHgxLjg1ZWM1YTM5OWEyZTZwMQorICB9LAorICB7IC8vIEVudHJ5IDMyNAorICAgIDB4MS4xZTQyYWUzY2ZiZGM2MDk3Njg4NDA4N2Y5N2EwZmRhOXAtMjQsCisgICAgMHgxLjg2YTAwOTI3NTQwMjJwMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjUKKyAgICAtMHgxLjFlNDJhZTNjZmJkYzYwOTc2ODg0MDg3Zjk3YTBmZGE5cC0yNCwKKyAgICAtMHgxLjg2YTAwOTI3NTQwMjJwMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjYKKyAgICAtMHgxLmRiZjRlNTk0Y2VmZTE1NDhlZmMyNDA5OGQ2MzFlOTUwcC0xLAorICAgIDB4MS44NzIwNTg4cDM5MgorICB9LAorICB7IC8vIEVudHJ5IDMyNworICAgIDB4MS5kYmY0ZTU5NGNlZmUxNTQ4ZWZjMjQwOThkNjMxZTk1MHAtMSwKKyAgICAtMHgxLjg3MjA1ODhwMzkyCisgIH0sCisgIHsgLy8gRW50cnkgMzI4CisgICAgMHgxLjQ0MzAyZDZhODJkNDAzYmFkZjFmOWI3MTQyMGNjZGNhcC05LAorICAgIDB4MS44OTI5MzU0ZWJjNmFhcDQzCisgIH0sCisgIHsgLy8gRW50cnkgMzI5CisgICAgLTB4MS40NDMwMmQ2YTgyZDQwM2JhZGYxZjliNzE0MjBjY2RjYXAtOSwKKyAgICAtMHgxLjg5MjkzNTRlYmM2YWFwNDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzAKKyAgICAweDEuOGE1MjE4OWVjMzQ4NzdiYjU5NDQ0MTNlMDBhZDUyZWRwLTUsCisgICAgMHgxLjhhNzkxZTQ3OTFlNzVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzEKKyAgICAtMHgxLjhhNTIxODllYzM0ODc3YmI1OTQ0NDEzZTAwYWQ1MmVkcC01LAorICAgIC0weDEuOGE3OTFlNDc5MWU3NXAtNQorICB9LAorICB7IC8vIEVudHJ5IDMzMgorICAgIC0weDEuZmU4NTY2ZTUzODEyMmRiMzNjMTdmMTNiODM0NzRhMDRwLTEsCisgICAgMHgxLjhiYTc2MTQzOGY1ZWRwMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzMKKyAgICAweDEuZmU4NTY2ZTUzODEyMmRiMzNjMTdmMTNiODM0NzRhMDRwLTEsCisgICAgLTB4MS44YmE3NjE0MzhmNWVkcDExCisgIH0sCisgIHsgLy8gRW50cnkgMzM0CisgICAgMHgxLmZmZjQyYWNhNGNiNWE4MDAwMDA1N2YxYTQ4YWY2NWRlcC0xLAorICAgIDB4MS44ZWFmMTZkZTYzOTIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzUKKyAgICAtMHgxLmZmZjQyYWNhNGNiNWE4MDAwMDA1N2YxYTQ4YWY2NWRlcC0xLAorICAgIC0weDEuOGVhZjE2ZGU2MzkyMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzM2CisgICAgMHgxLmZmZmI3ZDNmM2EyNTJkYTU2ZDk2MzI3YzE4NjI3ZjU3cC0xLAorICAgIDB4MS45cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzcKKyAgICAtMHgxLmZmZmI3ZDNmM2EyNTJkYTU2ZDk2MzI3YzE4NjI3ZjU3cC0xLAorICAgIC0weDEuOXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzM4CisgICAgLTB4MS5lODE1NzcwNjY3ZmQ4N2Y5NTI1MTU0ZWRjODY3NjA1ZnAtNCwKKyAgICAweDEuOTFhNTY1N2ZiNmE5YXA2CisgIH0sCisgIHsgLy8gRW50cnkgMzM5CisgICAgMHgxLmU4MTU3NzA2NjdmZDg3Zjk1MjUxNTRlZGM4Njc2MDVmcC00LAorICAgIC0weDEuOTFhNTY1N2ZiNmE5YXA2CisgIH0sCisgIHsgLy8gRW50cnkgMzQwCisgICAgLTB4MS5mZmZmZmZmZDMxMWRjN2VjNWQwYWU1NzI4YTc5NjBmZHAtMSwKKyAgICAweDEuOTIxZmI1NDQ2ODg0N3AzNworICB9LAorICB7IC8vIEVudHJ5IDM0MQorICAgIDB4MS5mZmZmZmZmZDMxMWRjN2VjNWQwYWU1NzI4YTc5NjBmZHAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0Njg4NDdwMzcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDIKKyAgICAweDEuZmZmZmZmZmY4NzVlNWU0NDk3ZGQwNzYwMzM2ZTYzZjNwLTE3LAorICAgIDB4MS45MjFmZjU0NDQyZDE4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDMKKyAgICAtMHgxLmZmZmZmZmZmODc1ZTVlNDQ5N2RkMDc2MDMzNmU2M2YzcC0xNywKKyAgICAtMHgxLjkyMWZmNTQ0NDJkMThwMgorICB9LAorICB7IC8vIEVudHJ5IDM0NAorICAgIDB4MS44MTJhNWRhMzc3N2NkN2Y2ZTE3Mjg4NjM4YjQwYWEwOXAtOCwKKyAgICAweDEuOTI4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDUKKyAgICAtMHgxLjgxMmE1ZGEzNzc3Y2Q3ZjZlMTcyODg2MzhiNDBhYTA5cC04LAorICAgIC0weDEuOTI4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDYKKyAgICAweDEuZmZmOWJlOGQ4MjU3MmM3NDZmOTQ0OTM0YmJmMWI2OTdwLTEsCisgICAgMHgxLjk0YXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzQ3CisgICAgLTB4MS5mZmY5YmU4ZDgyNTcyYzc0NmY5NDQ5MzRiYmYxYjY5N3AtMSwKKyAgICAtMHgxLjk0YXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzQ4CisgICAgMHgxLjk0N2IwYWNlMjM1ZjI4NTBiMjdiMTY0YzQ5MTAyYTQ5cC01LAorICAgIDB4MS45NGE1Mjk0YTUxYmRlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzQ5CisgICAgLTB4MS45NDdiMGFjZTIzNWYyODUwYjI3YjE2NGM0OTEwMmE0OXAtNSwKKyAgICAtMHgxLjk0YTUyOTRhNTFiZGVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTAKKyAgICAweDEuYzM0ZjcwZTU1YTcwN2JiZDA1M2E3MGU3NDkxMDUxNzRwLTIsCisgICAgMHgxLjk0YTUyOTRhNTI5NDhwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMzUxCisgICAgLTB4MS5jMzRmNzBlNTVhNzA3YmJkMDUzYTcwZTc0OTEwNTE3NHAtMiwKKyAgICAtMHgxLjk0YTUyOTRhNTI5NDhwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMzUyCisgICAgMHgxLjk1MGJjZmMwZjNkNTA4NTA5NDFhNDFkNjZjZmEzNzIxcC01LAorICAgIDB4MS45NTM2MWI4Zjc2OTdkcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzUzCisgICAgLTB4MS45NTBiY2ZjMGYzZDUwODUwOTQxYTQxZDY2Y2ZhMzcyMXAtNSwKKyAgICAtMHgxLjk1MzYxYjhmNzY5N2RwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTQKKyAgICAweDEuNmM1NDhiZmNjZTY5NTNmMTlhOGQyZGQ0ODBkOTMyMGNwLTEsCisgICAgMHgxLjk1NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1NQorICAgIC0weDEuNmM1NDhiZmNjZTY5NTNmMTlhOGQyZGQ0ODBkOTMyMGNwLTEsCisgICAgLTB4MS45NTZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTYKKyAgICAweDEuZmZlZmZkYmY2N2NhNjcxMWE1N2I3ZDgyMTQwMDkzYzZwLTEsCisgICAgMHgxLjk2MnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzU3CisgICAgLTB4MS5mZmVmZmRiZjY3Y2E2NzExYTU3YjdkODIxNDAwOTNjNnAtMSwKKyAgICAtMHgxLjk2MnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzU4CisgICAgMHgxLjk3MDgyMTNiZjY3ZjQ4NTcxMzUwNzdkNTA4MjZmNTg4cC01LAorICAgIDB4MS45NzMzMGQyZWExNmQ5cC01CisgIH0sCisgIHsgLy8gRW50cnkgMzU5CisgICAgLTB4MS45NzA4MjEzYmY2N2Y0ODU3MTM1MDc3ZDUwODI2ZjU4OHAtNSwKKyAgICAtMHgxLjk3MzMwZDJlYTE2ZDlwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjAKKyAgICAweDEuOTcyYmY5MjcxM2Q1MDg1OGU2NGMxYjliMjZhZWVjZDBwLTUsCisgICAgMHgxLjk3NTZmMDczYjZiNjFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjEKKyAgICAtMHgxLjk3MmJmOTI3MTNkNTA4NThlNjRjMWI5YjI2YWVlY2QwcC01LAorICAgIC0weDEuOTc1NmYwNzNiNmI2MXAtNQorICB9LAorICB7IC8vIEVudHJ5IDM2MgorICAgIDB4MS45NzY4NDVlYmU3MTE4ODU4MGU0NjhiYWQwMGNlMjNlY3AtNSwKKyAgICAweDEuOTc5MzUwNTVjZWMxYnAtNQorICB9LAorICB7IC8vIEVudHJ5IDM2MworICAgIC0weDEuOTc2ODQ1ZWJlNzExODg1ODBlNDY4YmFkMDBjZTIzZWNwLTUsCisgICAgLTB4MS45NzkzNTA1NWNlYzFicC01CisgIH0sCisgIHsgLy8gRW50cnkgMzY0CisgICAgMHgxLjk3NTM1Y2VlNTFhNDI4MDZlMTVmNmY4Nzg1MjRlNWI3cC00LAorICAgIDB4MS45ODBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjUKKyAgICAtMHgxLjk3NTM1Y2VlNTFhNDI4MDZlMTVmNmY4Nzg1MjRlNWI3cC00LAorICAgIC0weDEuOTgwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzY2CisgICAgMHgxLjZmNDk0YzMzNTYxNzcwMDAwMDY1MDJjZGZmOTc1YjA4cC0xLAorICAgIDB4MS45OTk5OTlhNDIxNjBjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzY3CisgICAgLTB4MS42ZjQ5NGMzMzU2MTc3MDAwMDA2NTAyY2RmZjk3NWIwOHAtMSwKKyAgICAtMHgxLjk5OTk5OWE0MjE2MGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjgKKyAgICAweDEuNmY0OTRjMzdlZGQ2ZDgwMDAwNmRjNzZhZWU0Y2M4ZTRwLTEsCisgICAgMHgxLjk5OTk5OWFhYjhmNTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjkKKyAgICAtMHgxLjZmNDk0YzM3ZWRkNmQ4MDAwMDZkYzc2YWVlNGNjOGU0cC0xLAorICAgIC0weDEuOTk5OTk5YWFiOGY1MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM3MAorICAgIDB4MS42ZmE5MTJiZGVhYWIyODAwMDAxNjRmMTZkZDY0OTM1NnAtMSwKKyAgICAweDEuOWEyMzI0YjljNjMyNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM3MQorICAgIC0weDEuNmZhOTEyYmRlYWFiMjgwMDAwMTY0ZjE2ZGQ2NDkzNTZwLTEsCisgICAgLTB4MS45YTIzMjRiOWM2MzI2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzcyCisgICAgMHgxLjcwYzdlZjRlZjliMzQ3ZWQyMzRjYTYxMzFiZTFiNzg2cC0xLAorICAgIDB4MS45YmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzMKKyAgICAtMHgxLjcwYzdlZjRlZjliMzQ3ZWQyMzRjYTYxMzFiZTFiNzg2cC0xLAorICAgIC0weDEuOWJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzc0CisgICAgMHgxLmZmMjgxNzZhZDMxNjNlYTE2OGM5OTkxZjE1NWY4NzVicC0xLAorICAgIDB4MS5hMGQxZDgxN2Q2YzRhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzUKKyAgICAtMHgxLmZmMjgxNzZhZDMxNjNlYTE2OGM5OTkxZjE1NWY4NzVicC0xLAorICAgIC0weDEuYTBkMWQ4MTdkNmM0YXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzc2CisgICAgMHgxLjc0OTQ2OGE3MjQ4ZGQyNjE2MWU5M2Q3ODkyOGM2NmRlcC0xLAorICAgIDB4MS5hMTQxYzlkZTEyZmRmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzc3CisgICAgLTB4MS43NDk0NjhhNzI0OGRkMjYxNjFlOTNkNzg5MjhjNjZkZXAtMSwKKyAgICAtMHgxLmExNDFjOWRlMTJmZGZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzgKKyAgICAweDEuNzU0ZWJiN2U3M2Y0NTJhYjQ5YzYxNWYwZTgzMDBkNWNwLTEsCisgICAgMHgxLmEyNTFiYzY3NjZmMjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzkKKyAgICAtMHgxLjc1NGViYjdlNzNmNDUyYWI0OWM2MTVmMGU4MzAwZDVjcC0xLAorICAgIC0weDEuYTI1MWJjNjc2NmYyMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM4MAorICAgIC0weDEuN2MzYmZlZmE3NGJkMDdmZTIxMzM2Y2FhYzM3MmE3M2VwLTEsCisgICAgMHgxLmEyNjg5YWUxYjg2ZGRwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODEKKyAgICAweDEuN2MzYmZlZmE3NGJkMDdmZTIxMzM2Y2FhYzM3MmE3M2VwLTEsCisgICAgLTB4MS5hMjY4OWFlMWI4NmRkcDYyCisgIH0sCisgIHsgLy8gRW50cnkgMzgyCisgICAgLTB4MS5mZmZmNGYzNjQ4ZTAyZjlmNDk0ZjQyZWI4MjJmMjYyYnAtMSwKKyAgICAweDEuYTNmNjYxODBjNDU1MHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODMKKyAgICAweDEuZmZmZjRmMzY0OGUwMmY5ZjQ5NGY0MmViODIyZjI2MmJwLTEsCisgICAgLTB4MS5hM2Y2NjE4MGM0NTUwcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDM4NAorICAgIC0weDEuMWNmNDYzOTgzYzBlMjgwMjMxNjFiN2QwZDI5MzhlMzdwLTMsCisgICAgMHgxLmEzZmRkMmE1Mjg2YzNwMQorICB9LAorICB7IC8vIEVudHJ5IDM4NQorICAgIDB4MS4xY2Y0NjM5ODNjMGUyODAyMzE2MWI3ZDBkMjkzOGUzN3AtMywKKyAgICAtMHgxLmEzZmRkMmE1Mjg2YzNwMQorICB9LAorICB7IC8vIEVudHJ5IDM4NgorICAgIDB4MS5mZWI3OTQ4ZDIyNGQ3ZTc1OWE3YzlkZDc2OGRlZDcyN3AtMSwKKyAgICAweDEuYTQ0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODcKKyAgICAtMHgxLmZlYjc5NDhkMjI0ZDdlNzU5YTdjOWRkNzY4ZGVkNzI3cC0xLAorICAgIC0weDEuYTQ0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODgKKyAgICAweDEuNzg4MDFlM2UxMTY2NDgyZGNlNjIwOGU5OGQzY2MxNDJwLTEsCisgICAgMHgxLmE3MDFlZjNjN2Q1NGJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODkKKyAgICAtMHgxLjc4ODAxZTNlMTE2NjQ4MmRjZTYyMDhlOThkM2NjMTQycC0xLAorICAgIC0weDEuYTcwMWVmM2M3ZDU0YnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM5MAorICAgIC0weDEuZmZmMTFlODcxZDU5YzNlMTMzM2RiNTQ3NWJiNTdlMjdwLTEsCisgICAgMHgxLmE4YzAxZmQ0M2MwcDUzNworICB9LAorICB7IC8vIEVudHJ5IDM5MQorICAgIDB4MS5mZmYxMWU4NzFkNTljM2UxMzMzZGI1NDc1YmI1N2UyN3AtMSwKKyAgICAtMHgxLmE4YzAxZmQ0M2MwcDUzNworICB9LAorICB7IC8vIEVudHJ5IDM5MgorICAgIDB4MS5mZGZhNDM2NmViNzMzN2U2ZDk3M2M0Y2I4ZjFhMjQ0YXAtMSwKKyAgICAweDEuYThlMjliNzYwMmYzYnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzkzCisgICAgLTB4MS5mZGZhNDM2NmViNzMzN2U2ZDk3M2M0Y2I4ZjFhMjQ0YXAtMSwKKyAgICAtMHgxLmE4ZTI5Yjc2MDJmM2JwMAorICB9LAorICB7IC8vIEVudHJ5IDM5NAorICAgIDB4MS5mZGU5OGI5NGU3OTQ3YTA0MjI5ZDI2ZWViMmJiNDI4MHAtMSwKKyAgICAweDEuYTk0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTUKKyAgICAtMHgxLmZkZTk4Yjk0ZTc5NDdhMDQyMjlkMjZlZWIyYmI0MjgwcC0xLAorICAgIC0weDEuYTk0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTYKKyAgICAweDEuNzkzMWNiYTEwMDAwODgwMDAwMDY4Zjk0MDk4MDE4YTdwLTIsCisgICAgMHgxLmFhNDQ1ZmNlOTNiODJwMgorICB9LAorICB7IC8vIEVudHJ5IDM5NworICAgIC0weDEuNzkzMWNiYTEwMDAwODgwMDAwMDY4Zjk0MDk4MDE4YTdwLTIsCisgICAgLTB4MS5hYTQ0NWZjZTkzYjgycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTgKKyAgICAweDEuN2FmM2Y3NmM3YTcwODgzNGI0MDcyZjU5YWM3MWEwYmFwLTEsCisgICAgMHgxLmFhYTNmYmMzNTlmYmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTkKKyAgICAtMHgxLjdhZjNmNzZjN2E3MDg4MzRiNDA3MmY1OWFjNzFhMGJhcC0xLAorICAgIC0weDEuYWFhM2ZiYzM1OWZiZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwMAorICAgIDB4MS5mZDc0ZTUzYWUzMmZjZDg0NjdiY2Y1MGRhMWQwZjU2M3AtNiwKKyAgICAweDEuYWJkZDNkYmQ0ZDg2MHAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDEKKyAgICAtMHgxLmZkNzRlNTNhZTMyZmNkODQ2N2JjZjUwZGExZDBmNTYzcC02LAorICAgIC0weDEuYWJkZDNkYmQ0ZDg2MHAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDIKKyAgICAweDEuN2Q0YTdiZjE4M2EzMzI5ZWQ0MzRjMGM0ZGQ3OGIxZDlwLTEsCisgICAgMHgxLmFlMjE2NWEwYzlmOGVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDMKKyAgICAtMHgxLjdkNGE3YmYxODNhMzMyOWVkNDM0YzBjNGRkNzhiMWQ5cC0xLAorICAgIC0weDEuYWUyMTY1YTBjOWY4ZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwNAorICAgIDB4MS5iODE0MTBlZGM3OWUwODM3NTA3YTNlZWY4ZDU1M2JkNnAtMiwKKyAgICAweDEuYWU4ZGZlZmNmZTEzYnAyCisgIH0sCisgIHsgLy8gRW50cnkgNDA1CisgICAgLTB4MS5iODE0MTBlZGM3OWUwODM3NTA3YTNlZWY4ZDU1M2JkNnAtMiwKKyAgICAtMHgxLmFlOGRmZWZjZmUxM2JwMgorICB9LAorICB7IC8vIEVudHJ5IDQwNgorICAgIC0weDEuZmY3NTE1NjFkYzUwOTdmZWZlNDk5MzAxZDAzNGEwZWRwLTIsCisgICAgMHgxLmI1NTk3Zjk1MGVlOGNwMjkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDcKKyAgICAweDEuZmY3NTE1NjFkYzUwOTdmZWZlNDk5MzAxZDAzNGEwZWRwLTIsCisgICAgLTB4MS5iNTU5N2Y5NTBlZThjcDI5CisgIH0sCisgIHsgLy8gRW50cnkgNDA4CisgICAgMHgxLjAyN2QxODRhZmIxOTg0Y2ExZDIxYjFhYzkyOGQ1MzkxcC01MiwKKyAgICAweDEuYmFiNjJlZDY1NTAxOXA5NzAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDkKKyAgICAtMHgxLjAyN2QxODRhZmIxOTg0Y2ExZDIxYjFhYzkyOGQ1MzkxcC01MiwKKyAgICAtMHgxLmJhYjYyZWQ2NTUwMTlwOTcwCisgIH0sCisgIHsgLy8gRW50cnkgNDEwCisgICAgMHgxLmJjNTcyZTVlNDEzZTE3ZmNiMjI0NmQ0MDI0OWEwMDVmcC0xMCwKKyAgICAweDEuYmM1NzNjNGZmZmZmZnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTEKKyAgICAtMHgxLmJjNTcyZTVlNDEzZTE3ZmNiMjI0NmQ0MDI0OWEwMDVmcC0xMCwKKyAgICAtMHgxLmJjNTczYzRmZmZmZmZwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNDEyCisgICAgMHgxLmZiMzAwZjFlMzlhZmU4MDQ3MWY5OTNhYmI4Y2ZhNDI4cC0xLAorICAgIDB4MS5iZWY1Y2QyNWFiMWFkcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTMKKyAgICAtMHgxLmZiMzAwZjFlMzlhZmU4MDQ3MWY5OTNhYmI4Y2ZhNDI4cC0xLAorICAgIC0weDEuYmVmNWNkMjVhYjFhZHA5CisgIH0sCisgIHsgLy8gRW50cnkgNDE0CisgICAgMHgxLmIxYmFhZjYyMmQzYTI3ZmQyN2QwNzE2ZjdkMDhkOTkycC0yLAorICAgIDB4MS5iZmRmNmRmMmEyNGMxcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDE1CisgICAgLTB4MS5iMWJhYWY2MjJkM2EyN2ZkMjdkMDcxNmY3ZDA4ZDk5MnAtMiwKKyAgICAtMHgxLmJmZGY2ZGYyYTI0YzFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTYKKyAgICAweDEuODhmYjc2MmMzNWNlMzdmZWNiYjQ3NDhkMDFmZWZmY2VwLTEsCisgICAgMHgxLmJmZmZmZmRmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTcKKyAgICAtMHgxLjg4ZmI3NjJjMzVjZTM3ZmVjYmI0NzQ4ZDAxZmVmZmNlcC0xLAorICAgIC0weDEuYmZmZmZmZGZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQxOAorICAgIDB4MS5mZTBlYmZmOTlhYjhjODBjZTU5MzlmMWYwNzJjMmU5MXAtMSwKKyAgICAweDEuYzJiNDg5NTIwZTM3NnA5MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTkKKyAgICAtMHgxLmZlMGViZmY5OWFiOGM4MGNlNTkzOWYxZjA3MmMyZTkxcC0xLAorICAgIC0weDEuYzJiNDg5NTIwZTM3NnA5MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjAKKyAgICAweDEuY2Y3Zjc0OWYyYTgzNTdmN2ZlYWI2ODVmZjZmOGI2MjRwLTQsCisgICAgMHgxLmM1NGJlYjAwODU0NzBwNQorICB9LAorICB7IC8vIEVudHJ5IDQyMQorICAgIC0weDEuY2Y3Zjc0OWYyYTgzNTdmN2ZlYWI2ODVmZjZmOGI2MjRwLTQsCisgICAgLTB4MS5jNTRiZWIwMDg1NDcwcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjIKKyAgICAweDEuYjZmYWNmNjY1ODkxNDgyZWE4YzYxZjVjYTMyZjI4MGRwLTIsCisgICAgMHgxLmM1YWQzNGY1ZjQ3MmFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjMKKyAgICAtMHgxLmI2ZmFjZjY2NTg5MTQ4MmVhOGM2MWY1Y2EzMmYyODBkcC0yLAorICAgIC0weDEuYzVhZDM0ZjVmNDcyYXAtMgorICB9LAorICB7IC8vIEVudHJ5IDQyNAorICAgIDB4MS5iODUxY2Q5Yjg0ZWU2ODNkYzZiZDM4OTllYTgxZGJmOXAtMiwKKyAgICAweDEuYzcyOGZjMmYzNGJkNnAtMgorICB9LAorICB7IC8vIEVudHJ5IDQyNQorICAgIC0weDEuYjg1MWNkOWI4NGVlNjgzZGM2YmQzODk5ZWE4MWRiZjlwLTIsCisgICAgLTB4MS5jNzI4ZmMyZjM0YmQ2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDI2CisgICAgMHgxLmJhMjFiNTNjZjJmZjI4MzI2MDZmNjVlZWViNGUzYWFmcC0yLAorICAgIDB4MS5jOTJiMGY2MTA1MDg5cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDI3CisgICAgLTB4MS5iYTIxYjUzY2YyZmYyODMyNjA2ZjY1ZWVlYjRlM2FhZnAtMiwKKyAgICAtMHgxLmM5MmIwZjYxMDUwODlwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjgKKyAgICAweDEuYzlhMmI2OGUzMGVjNzdjNGU3NmM4ODk3MDQzOTRhNTBwLTUsCisgICAgMHgxLmM5ZGZiYmU5ZWM3MDRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjkKKyAgICAtMHgxLmM5YTJiNjhlMzBlYzc3YzRlNzZjODg5NzA0Mzk0YTUwcC01LAorICAgIC0weDEuYzlkZmJiZTllYzcwNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDQzMAorICAgIDB4MS5mMzcwMTE1YzlhYjM1NzQzZTEyMjE3YzYxMjJlMWEyOHAtMSwKKyAgICAweDEuY2FmMzFiZDdlZTIxN3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDMxCisgICAgLTB4MS5mMzcwMTE1YzlhYjM1NzQzZTEyMjE3YzYxMjJlMWEyOHAtMSwKKyAgICAtMHgxLmNhZjMxYmQ3ZWUyMTdwMAorICB9LAorICB7IC8vIEVudHJ5IDQzMgorICAgIC0weDEuZGQzOGExZjFkMjg5YjYxNzMxMTU3MjFiYzU4ZTI5OGRwLTU0LAorICAgIDB4MS5jYjQ0ZTg2YmMxOTJicDY0OAorICB9LAorICB7IC8vIEVudHJ5IDQzMworICAgIDB4MS5kZDM4YTFmMWQyODliNjE3MzExNTcyMWJjNThlMjk4ZHAtNTQsCisgICAgLTB4MS5jYjQ0ZTg2YmMxOTJicDY0OAorICB9LAorICB7IC8vIEVudHJ5IDQzNAorICAgIDB4MS5kZDM4YTFmMWQyODliNjE3MzExNTcyMWJjNTVhNTZhOHAtNTMsCisgICAgMHgxLmNiNDRlODZiYzE5MmJwNjQ5CisgIH0sCisgIHsgLy8gRW50cnkgNDM1CisgICAgLTB4MS5kZDM4YTFmMWQyODliNjE3MzExNTcyMWJjNTVhNTZhOHAtNTMsCisgICAgLTB4MS5jYjQ0ZTg2YmMxOTJicDY0OQorICB9LAorICB7IC8vIEVudHJ5IDQzNgorICAgIDB4MS5jNzg4NWFlZjMzYTk0ZmZjNWFlMDZiZTk0NDRlZmFkNXAtMywKKyAgICAweDEuY2I2cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDM3CisgICAgLTB4MS5jNzg4NWFlZjMzYTk0ZmZjNWFlMDZiZTk0NDRlZmFkNXAtMywKKyAgICAtMHgxLmNiNnAtMworICB9LAorICB7IC8vIEVudHJ5IDQzOAorICAgIDB4MS5jZDI3OWFhNjE5NmI1N2Y5YmU3MWNkZmZkZDlmMTkxOXAtNCwKKyAgICAweDEuY2UyMjcxZDJmNjYyZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDQzOQorICAgIC0weDEuY2QyNzlhYTYxOTZiNTdmOWJlNzFjZGZmZGQ5ZjE5MTlwLTQsCisgICAgLTB4MS5jZTIyNzFkMmY2NjJmcC00CisgIH0sCisgIHsgLy8gRW50cnkgNDQwCisgICAgMHgxLjkzMGI3MDVmOWZhZDE3ZmI1NjgxM2E0NTk3M2E4ZDcycC0xLAorICAgIDB4MS5kMDAwMDAwMDAwNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ0MQorICAgIC0weDEuOTMwYjcwNWY5ZmFkMTdmYjU2ODEzYTQ1OTczYThkNzJwLTEsCisgICAgLTB4MS5kMDAwMDAwMDAwNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ0MgorICAgIDB4MS43ZWYyNGM4ZTY3ZDlhODAxN2EwMzFmMzhlMjRjY2UwNnAtMSwKKyAgICAweDEuZDAxcDE5OQorICB9LAorICB7IC8vIEVudHJ5IDQ0MworICAgIC0weDEuN2VmMjRjOGU2N2Q5YTgwMTdhMDMxZjM4ZTI0Y2NlMDZwLTEsCisgICAgLTB4MS5kMDFwMTk5CisgIH0sCisgIHsgLy8gRW50cnkgNDQ0CisgICAgMHgxLmZmZmYxMjRjMDAxYWFmYjFmMTc1Y2NiNTMxYzA1M2IwcC0xLAorICAgIDB4MS5kMDI0YmE2Zjk1M2NmcDEwMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDUKKyAgICAtMHgxLmZmZmYxMjRjMDAxYWFmYjFmMTc1Y2NiNTMxYzA1M2IwcC0xLAorICAgIC0weDEuZDAyNGJhNmY5NTNjZnAxMDAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQ2CisgICAgLTB4MS5mODNhMDk4M2RkMTVkMDAzMDFlMmRmMjFlM2JlZTYzNXAtMiwKKyAgICAweDEuZDQwNjdjNjBmNDcxZXAxCisgIH0sCisgIHsgLy8gRW50cnkgNDQ3CisgICAgMHgxLmY4M2EwOTgzZGQxNWQwMDMwMWUyZGYyMWUzYmVlNjM1cC0yLAorICAgIC0weDEuZDQwNjdjNjBmNDcxZXAxCisgIH0sCisgIHsgLy8gRW50cnkgNDQ4CisgICAgMHgxLmQ3OWI5ODk2ZmY1NTQ4NGQyNTkxYjY3N2Q1NGVhNDZmcC01LAorICAgIDB4MS5kN2RlNjI2M2JjYWFicC01CisgIH0sCisgIHsgLy8gRW50cnkgNDQ5CisgICAgLTB4MS5kNzliOTg5NmZmNTU0ODRkMjU5MWI2NzdkNTRlYTQ2ZnAtNSwKKyAgICAtMHgxLmQ3ZGU2MjYzYmNhYWJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTAKKyAgICAweDEuZWQwYjkwOGEyOTgyZjdmZDljODBiYzEwNTFkZDQwODBwLTEsCisgICAgMHgxLmQ4MDAwMDAwMDIyNzRwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1MQorICAgIC0weDEuZWQwYjkwOGEyOTgyZjdmZDljODBiYzEwNTFkZDQwODBwLTEsCisgICAgLTB4MS5kODAwMDAwMDAyMjc0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTIKKyAgICAtMHgxLmYyYzIxN2NiYzdkY2M5MTkyNDNhN2M0MzRhMjA5ZjlhcC0xLAorICAgIDB4MS5kOTZlMDU4cDQ4OAorICB9LAorICB7IC8vIEVudHJ5IDQ1MworICAgIDB4MS5mMmMyMTdjYmM3ZGNjOTE5MjQzYTdjNDM0YTIwOWY5YXAtMSwKKyAgICAtMHgxLmQ5NmUwNThwNDg4CisgIH0sCisgIHsgLy8gRW50cnkgNDU0CisgICAgMHgxLjk4ZGNkMDkzMzc3OTI4MDAwMDAwMDAwMDAwMTY3ZGM3cC0xLAorICAgIDB4MS5kOThjNGM2MTI3MThkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDU1CisgICAgLTB4MS45OGRjZDA5MzM3NzkyODAwMDAwMDAwMDAwMDE2N2RjN3AtMSwKKyAgICAtMHgxLmQ5OGM0YzYxMjcxOGRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTYKKyAgICAweDEuZGIzYmE4Nzc1Y2EyNTdkYTNiZDU0NDlkMzk2YTY2ZTJwLTUsCisgICAgMHgxLmRiOHAtNQorICB9LAorICB7IC8vIEVudHJ5IDQ1NworICAgIC0weDEuZGIzYmE4Nzc1Y2EyNTdkYTNiZDU0NDlkMzk2YTY2ZTJwLTUsCisgICAgLTB4MS5kYjhwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTgKKyAgICAtMHgxLjlmZWUzNzY5N2Q1ODI4MDMxYTZhMjY3OWMxNDMzNDU3cC0yLAorICAgIDB4MS5kZTM4NmQ2MDkwMzAzcDIwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1OQorICAgIDB4MS45ZmVlMzc2OTdkNTgyODAzMWE2YTI2NzljMTQzMzQ1N3AtMiwKKyAgICAtMHgxLmRlMzg2ZDYwOTAzMDNwMjAwCisgIH0sCisgIHsgLy8gRW50cnkgNDYwCisgICAgLTB4MS41MzYxZWU2NTUzMTg4MDM2ZTlkZmNhYjQyOGRlYjRlMXAtNTMsCisgICAgMHgxLmRlNWU1MDU0ZTkyMWJwMzUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjEKKyAgICAweDEuNTM2MWVlNjU1MzE4ODAzNmU5ZGZjYWI0MjhkZWI0ZTFwLTUzLAorICAgIC0weDEuZGU1ZTUwNTRlOTIxYnAzNQorICB9LAorICB7IC8vIEVudHJ5IDQ2MgorICAgIDB4MS5mZWM0OGQ1ZTc2OWViZTM3NDQ4YzEwZTBhN2EwZWNiMXAtMSwKKyAgICAweDEuZGY3N2RkZjc3ZGRmNHAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ2MworICAgIC0weDEuZmVjNDhkNWU3NjllYmUzNzQ0OGMxMGUwYTdhMGVjYjFwLTEsCisgICAgLTB4MS5kZjc3ZGRmNzdkZGY0cDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDY0CisgICAgLTB4MS4yOTAyYTgzZDcyNjMyODAwMDAzZDExNDliN2U2YzBmYnAtMSwKKyAgICAweDEuZTE1NjJiMDQ0OGE4NnAxCisgIH0sCisgIHsgLy8gRW50cnkgNDY1CisgICAgMHgxLjI5MDJhODNkNzI2MzI4MDAwMDNkMTE0OWI3ZTZjMGZicC0xLAorICAgIC0weDEuZTE1NjJiMDQ0OGE4NnAxCisgIH0sCisgIHsgLy8gRW50cnkgNDY2CisgICAgMHgxLjllMjZjN2JjOTZiNjg4MDAwMDBkNDczNmZmMTMyMDM1cC0xLAorICAgIDB4MS5lMjcwMGNkYzg2NjM1cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDY3CisgICAgLTB4MS45ZTI2YzdiYzk2YjY4ODAwMDAwZDQ3MzZmZjEzMjAzNXAtMSwKKyAgICAtMHgxLmUyNzAwY2RjODY2MzVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjgKKyAgICAweDEuZTY0OTQ5MTFlZWRkMThkMGYxOTE1ZmQ0ZjY0OTU0NjlwLTcsCisgICAgMHgxLmU2NGRkYWY3YmQ3MzBwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjkKKyAgICAtMHgxLmU2NDk0OTExZWVkZDE4ZDBmMTkxNWZkNGY2NDk1NDY5cC03LAorICAgIC0weDEuZTY0ZGRhZjdiZDczMHAtNworICB9LAorICB7IC8vIEVudHJ5IDQ3MAorICAgIDB4MS5lYjI2YzY5MGJkYTI0ODRhNmMwMjBhOWMwNTJlYTg0NnAtNSwKKyAgICAweDEuZWI3MjM5YmNhOGFmYXAtNQorICB9LAorICB7IC8vIEVudHJ5IDQ3MQorICAgIC0weDEuZWIyNmM2OTBiZGEyNDg0YTZjMDIwYTljMDUyZWE4NDZwLTUsCisgICAgLTB4MS5lYjcyMzliY2E4YWZhcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDcyCisgICAgMHgxLmM3MzIzODc5MGE0Y2U4MDFlMDQxMDdiMjU0NmI0YWUzcC0zLAorICAgIDB4MS5lZjdiODNmN2JkZWY0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzMKKyAgICAtMHgxLmM3MzIzODc5MGE0Y2U4MDFlMDQxMDdiMjU0NmI0YWUzcC0zLAorICAgIC0weDEuZWY3YjgzZjdiZGVmNHAzCisgIH0sCisgIHsgLy8gRW50cnkgNDc0CisgICAgMHgxLmVkMWI1NzVhY2I4Yzg4MTA4MmNlMzE1MDc0YThhNDJhcC0zLAorICAgIDB4MS5mMjAwMDAwMDAxMDlicC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDc1CisgICAgLTB4MS5lZDFiNTc1YWNiOGM4ODEwODJjZTMxNTA3NGE4YTQyYXAtMywKKyAgICAtMHgxLmYyMDAwMDAwMDEwOWJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzYKKyAgICAweDEuYzFiNTBhNTZjODgwOTgwMDAwMDI4MmE1MTZjMTNlMjVwLTEsCisgICAgMHgxLmY0MGNhNjdhOWU4ZDdwOQorICB9LAorICB7IC8vIEVudHJ5IDQ3NworICAgIC0weDEuYzFiNTBhNTZjODgwOTgwMDAwMDI4MmE1MTZjMTNlMjVwLTEsCisgICAgLTB4MS5mNDBjYTY3YTllOGQ3cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzgKKyAgICAweDEuZTMyMWZlYTY0M2E5NjgwODMyMDg3NjhlOWUyY2QyOGVwLTIsCisgICAgMHgxLmY3MjI0ZDJjNzc1NDBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzkKKyAgICAtMHgxLmUzMjFmZWE2NDNhOTY4MDgzMjA4NzY4ZTllMmNkMjhlcC0yLAorICAgIC0weDEuZjcyMjRkMmM3NzU0MHAtMgorICB9LAorICB7IC8vIEVudHJ5IDQ4MAorICAgIDB4MS5jMTI2OWIwMjBhMTA3ZmZjMDA2MTJhNTYzYTkxOTY4NnAtMywKKyAgICAweDEuZjc4YTBkMDVlNjBlMnA2CisgIH0sCisgIHsgLy8gRW50cnkgNDgxCisgICAgLTB4MS5jMTI2OWIwMjBhMTA3ZmZjMDA2MTJhNTYzYTkxOTY4NnAtMywKKyAgICAtMHgxLmY3OGEwZDA1ZTYwZTJwNgorICB9LAorICB7IC8vIEVudHJ5IDQ4MgorICAgIDB4MS5mNzZjYWUyOGEwNzc0N2ZmZmNkNDUzYTAxNDJjMmVjMXAtNSwKKyAgICAweDEuZjdiZGVmN2JkZjA3M3AtNQorICB9LAorICB7IC8vIEVudHJ5IDQ4MworICAgIC0weDEuZjc2Y2FlMjhhMDc3NDdmZmZjZDQ1M2EwMTQyYzJlYzFwLTUsCisgICAgLTB4MS5mN2JkZWY3YmRmMDczcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDg0CisgICAgMHgxLmU0MmMxMzlkYzIwNTM4MDdiOTQ0MGYxYTI4ZjdjOWI5cC0yLAorICAgIDB4MS5mODUwMmQ1OTU1NDQzcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDg1CisgICAgLTB4MS5lNDJjMTM5ZGMyMDUzODA3Yjk0NDBmMWEyOGY3YzliOXAtMiwKKyAgICAtMHgxLmY4NTAyZDU5NTU0NDNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODYKKyAgICAweDEuMGZhNzQ5ZTA3ZjYzZmM5ZDAxYzgzNGRlNDc2NTRhY2JwLTksCisgICAgMHgxLmY4ZmM4MjRkMjY5M2JwNjEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODcKKyAgICAtMHgxLjBmYTc0OWUwN2Y2M2ZjOWQwMWM4MzRkZTQ3NjU0YWNicC05LAorICAgIC0weDEuZjhmYzgyNGQyNjkzYnA2MQorICB9LAorICB7IC8vIEVudHJ5IDQ4OAorICAgIDB4MS5mZmE4MDMyNGUyZDhlYmMwMmYzMjNlZDQ5ZWI5N2E2Y3AtMSwKKyAgICAweDEuZjhmZmZmZmZmZmZmZnAyCisgIH0sCisgIHsgLy8gRW50cnkgNDg5CisgICAgLTB4MS5mZmE4MDMyNGUyZDhlYmMwMmYzMjNlZDQ5ZWI5N2E2Y3AtMSwKKyAgICAtMHgxLmY4ZmZmZmZmZmZmZmZwMgorICB9LAorICB7IC8vIEVudHJ5IDQ5MAorICAgIC0weDEuN2NkZjc5ZDVlMzdiOGIyMTJlZmY4NmQyZmZlMjA0NGJwLTEsCisgICAgMHgxLmZkOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNDkxCisgICAgMHgxLjdjZGY3OWQ1ZTM3YjhiMjEyZWZmODZkMmZmZTIwNDRicC0xLAorICAgIC0weDEuZmQ4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTIKKyAgICAweDEuZmQzZjQ4ODQ3YTFkMTBhOGU1ZmYxZDRkYjg0ZWQyNmRwLTUsCisgICAgMHgxLmZkOTM2NGQ5MzY1OTZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTMKKyAgICAtMHgxLmZkM2Y0ODg0N2ExZDEwYThlNWZmMWQ0ZGI4NGVkMjZkcC01LAorICAgIC0weDEuZmQ5MzY0ZDkzNjU5NnAtNQorICB9LAorICB7IC8vIEVudHJ5IDQ5NAorICAgIDB4MS5mOTNhZDQ3MWQyNjJmODAzMmU5MmQ1OTY3OTdmOWQ0MXAtMywKKyAgICAweDEuZmU4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDk1CisgICAgLTB4MS5mOTNhZDQ3MWQyNjJmODAzMmU5MmQ1OTY3OTdmOWQ0MXAtMywKKyAgICAtMHgxLmZlOHAtMworICB9LAorICB7IC8vIEVudHJ5IDQ5NgorICAgIDB4MS44M2IzMDYyNDE0OTczZDkyYzQyNzg1MDdmMDQ3NGQ2N3AtMSwKKyAgICAweDEuZmViYjY0NmUyZWU1N3AxMworICB9LAorICB7IC8vIEVudHJ5IDQ5NworICAgIC0weDEuODNiMzA2MjQxNDk3M2Q5MmM0Mjc4NTA3ZjA0NzRkNjdwLTEsCisgICAgLTB4MS5mZWJiNjQ2ZTJlZTU3cDEzCisgIH0sCisgIHsgLy8gRW50cnkgNDk4CisgICAgMHgxLjNiNDViZDc0NDk3NzU0N2ZhNDY3M2U0MmRmYzk5NDAycC0xLAorICAgIDB4MS5mZWVmZmZmZmZmZmM2cDk5NQorICB9LAorICB7IC8vIEVudHJ5IDQ5OQorICAgIC0weDEuM2I0NWJkNzQ0OTc3NTQ3ZmE0NjczZTQyZGZjOTk0MDJwLTEsCisgICAgLTB4MS5mZWVmZmZmZmZmZmM2cDk5NQorICB9LAorICB7IC8vIEVudHJ5IDUwMAorICAgIC0weDEuZWVmYjU5ZDE0MzY0NWE0MDA0MWJmNzI2ZGM2ZjJmYTBwLTEsCisgICAgMHgxLmZmOGZmZmZmZmZmZmZwNworICB9LAorICB7IC8vIEVudHJ5IDUwMQorICAgIDB4MS5lZWZiNTlkMTQzNjQ1YTQwMDQxYmY3MjZkYzZmMmZhMHAtMSwKKyAgICAtMHgxLmZmOGZmZmZmZmZmZmZwNworICB9LAorICB7IC8vIEVudHJ5IDUwMgorICAgIC0weDEuNTY0MzNmMGM2YmNlZTk4NDg3NTE2MTFjNmY1YWRlMWZwLTEsCisgICAgMHgxLmZmOGZmZmZmZmZmZmZwODcwCisgIH0sCisgIHsgLy8gRW50cnkgNTAzCisgICAgMHgxLjU2NDMzZjBjNmJjZWU5ODQ4NzUxNjExYzZmNWFkZTFmcC0xLAorICAgIC0weDEuZmY4ZmZmZmZmZmZmZnA4NzAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDQKKyAgICAtMHgxLjkzMDAwNjI0NmE2YzA1ZGFiNzJlYTY5N2RhYWJhNjlkcC0yLAorICAgIDB4MS5mZmNmZmY4cDE5CisgIH0sCisgIHsgLy8gRW50cnkgNTA1CisgICAgMHgxLjkzMDAwNjI0NmE2YzA1ZGFiNzJlYTY5N2RhYWJhNjlkcC0yLAorICAgIC0weDEuZmZjZmZmOHAxOQorICB9LAorICB7IC8vIEVudHJ5IDUwNgorICAgIDB4MS5kZWQzN2ExZjBhYTZkMDVkNzgyZDZhYWI0MGNiODY3MHAtMSwKKyAgICAweDEuZmZjZmZmOHAzNjUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDcKKyAgICAtMHgxLmRlZDM3YTFmMGFhNmQwNWQ3ODJkNmFhYjQwY2I4NjcwcC0xLAorICAgIC0weDEuZmZjZmZmOHAzNjUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDgKKyAgICAtMHgxLjkzZTRkOTZiNjIxZTA3YmNhODY2YzFhMmU3NzE4ODFjcC0xLAorICAgIDB4MS5mZmNmZmZmZmZmZjZjcDcyMAorICB9LAorICB7IC8vIEVudHJ5IDUwOQorICAgIDB4MS45M2U0ZDk2YjYyMWUwN2JjYTg2NmMxYTJlNzcxODgxY3AtMSwKKyAgICAtMHgxLmZmY2ZmZmZmZmZmNmNwNzIwCisgIH0sCisgIHsgLy8gRW50cnkgNTEwCisgICAgMHgxLjkwNjhiOTBlNDI2MDVlMDUwMTBlMTQ3MTEwNjg4ZTUycC0xLAorICAgIDB4MS5mZmNmZmZmZmZmZmY5cDMyMAorICB9LAorICB7IC8vIEVudHJ5IDUxMQorICAgIC0weDEuOTA2OGI5MGU0MjYwNWUwNTAxMGUxNDcxMTA2ODhlNTJwLTEsCisgICAgLTB4MS5mZmNmZmZmZmZmZmY5cDMyMAorICB9LAorICB7IC8vIEVudHJ5IDUxMgorICAgIDB4MS5jZjgxNjQyZTc0MjFjNTY1MDdlYjgxODc2MTFjODRkYnAtMSwKKyAgICAweDEuZmZjZmZmZmZmZmZmZnAxMgorICB9LAorICB7IC8vIEVudHJ5IDUxMworICAgIC0weDEuY2Y4MTY0MmU3NDIxYzU2NTA3ZWI4MTg3NjExYzg0ZGJwLTEsCisgICAgLTB4MS5mZmNmZmZmZmZmZmZmcDEyCisgIH0sCisgIHsgLy8gRW50cnkgNTE0CisgICAgMHgxLmZmZmZmZmU2MWZlNjE2YjI4MmMzYTY5Y2EyMjVjMmQycC0xLAorICAgIDB4MS5mZmNmZmZmZmZmZmZmcDQwNAorICB9LAorICB7IC8vIEVudHJ5IDUxNQorICAgIC0weDEuZmZmZmZmZTYxZmU2MTZiMjgyYzNhNjljYTIyNWMyZDJwLTEsCisgICAgLTB4MS5mZmNmZmZmZmZmZmZmcDQwNAorICB9LAorICB7IC8vIEVudHJ5IDUxNgorICAgIC0weDEuNDA2ZWU5YWU5MWUxNmYxZDU4Yzk2ZWI3MTY1ZjU5NWJwLTEsCisgICAgMHgxLmZmZWZmZmZmZmZmY2NwOTk1CisgIH0sCisgIHsgLy8gRW50cnkgNTE3CisgICAgMHgxLjQwNmVlOWFlOTFlMTZmMWQ1OGM5NmViNzE2NWY1OTVicC0xLAorICAgIC0weDEuZmZlZmZmZmZmZmZjY3A5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTgKKyAgICAweDEuZmE5ZjZjYTBlYzQ0ZTAwMTAwMjZmMzg1YzBhYjg2OTBwLTMsCisgICAgMHgxLmZmZWZmZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTkKKyAgICAtMHgxLmZhOWY2Y2EwZWM0NGUwMDEwMDI2ZjM4NWMwYWI4NjkwcC0zLAorICAgIC0weDEuZmZlZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDUyMAorICAgIDB4MS42YjQ5MWRiOGI2NmQ4ODAxMjFmODMwZDhjNzU1YWU1NHAtNCwKKyAgICAweDEuZmZlZmZmZmZmZmZmZnA1NQorICB9LAorICB7IC8vIEVudHJ5IDUyMQorICAgIC0weDEuNmI0OTFkYjhiNjZkODgwMTIxZjgzMGQ4Yzc1NWFlNTRwLTQsCisgICAgLTB4MS5mZmVmZmZmZmZmZmZmcDU1CisgIH0sCisgIHsgLy8gRW50cnkgNTIyCisgICAgMHgxLmZiMGFiMTAyY2IxMmZlZjlhNGU0YTg2OWEyOTllZDQ2cC0xLAorICAgIDB4MS5mZmVmZmZmZmZmZmZmcDE4MAorICB9LAorICB7IC8vIEVudHJ5IDUyMworICAgIC0weDEuZmIwYWIxMDJjYjEyZmVmOWE0ZTRhODY5YTI5OWVkNDZwLTEsCisgICAgLTB4MS5mZmVmZmZmZmZmZmZmcDE4MAorICB9LAorICB7IC8vIEVudHJ5IDUyNAorICAgIDB4MS5lNDMxNWVjMDQ2MzVjZDM0YjNlZjYwMzcwNTExMjgxZnAtMywKKyAgICAweDEuZmZlZmZmZmZmZmZmZnA3MDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjUKKyAgICAtMHgxLmU0MzE1ZWMwNDYzNWNkMzRiM2VmNjAzNzA1MTEyODFmcC0zLAorICAgIC0weDEuZmZlZmZmZmZmZmZmZnA3MDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjYKKyAgICAweDEuZmZmZmMzOTk5N2VmNjdkMmI5YzdlNGVmYThiNzdlNTBwLTEsCisgICAgMHgxLmZmZjFmZmZmZmZmZmZwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjcKKyAgICAtMHgxLmZmZmZjMzk5OTdlZjY3ZDJiOWM3ZTRlZmE4Yjc3ZTUwcC0xLAorICAgIC0weDEuZmZmMWZmZmZmZmZmZnA0MQorICB9LAorICB7IC8vIEVudHJ5IDUyOAorICAgIDB4MS5mZmYxNjM5OTI4MzFlOGM2OGIwMjM0YjQyZWZhMWQwYXAtNywKKyAgICAweDEuZmZmNmI4OWZmZmZmZnAtNworICB9LAorICB7IC8vIEVudHJ5IDUyOQorICAgIC0weDEuZmZmMTYzOTkyODMxZThjNjhiMDIzNGI0MmVmYTFkMGFwLTcsCisgICAgLTB4MS5mZmY2Yjg5ZmZmZmZmcC03CisgIH0sCisgIHsgLy8gRW50cnkgNTMwCisgICAgLTB4MS5kOTc1N2EwNWZjYzQyYzY2NGYzYTY2YjU1NzZhOThlNHAtMSwKKyAgICAweDEuZmZmZGZmZmYwMDAxZnAxMDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzEKKyAgICAweDEuZDk3NTdhMDVmY2M0MmM2NjRmM2E2NmI1NTc2YTk4ZTRwLTEsCisgICAgLTB4MS5mZmZkZmZmZjAwMDFmcDEwNQorICB9LAorICB7IC8vIEVudHJ5IDUzMgorICAgIC0weDEuODM3OTFmZTYzYTE3YTgwMjU4ZjJjNDc5YzdlMWQzMzlwLTEsCisgICAgMHgxLmZmZmYwYzAwMDAwMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDUzMworICAgIDB4MS44Mzc5MWZlNjNhMTdhODAyNThmMmM0NzljN2UxZDMzOXAtMSwKKyAgICAtMHgxLmZmZmYwYzAwMDAwMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDUzNAorICAgIC0weDEuZDlkM2E4NWFjYzUwYzgwMDAwMDVkMTNkZDgyZjYxYjVwLTEsCisgICAgMHgxLmZmZmZjMDAwMDAwNTVwMTUwCisgIH0sCisgIHsgLy8gRW50cnkgNTM1CisgICAgMHgxLmQ5ZDNhODVhY2M1MGM4MDAwMDA1ZDEzZGQ4MmY2MWI1cC0xLAorICAgIC0weDEuZmZmZmMwMDAwMDA1NXAxNTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzYKKyAgICAtMHgxLmYyNWQ4NThkY2RlZTc0MTJjZjA3NjBlOTU1Y2I4MzkwcC0zLAorICAgIDB4MS5mZmZmZTNmZmZmZmZmcDQwCisgIH0sCisgIHsgLy8gRW50cnkgNTM3CisgICAgMHgxLmYyNWQ4NThkY2RlZTc0MTJjZjA3NjBlOTU1Y2I4MzkwcC0zLAorICAgIC0weDEuZmZmZmUzZmZmZmZmZnA0MAorICB9LAorICB7IC8vIEVudHJ5IDUzOAorICAgIDB4MS5kMThmN2JmZTU1N2ViODAwMDE1NTcxNDJiZGExOGJhZXAtMSwKKyAgICAweDEuZmZmZmVmZmZjZmZhZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTM5CisgICAgLTB4MS5kMThmN2JmZTU1N2ViODAwMDE1NTcxNDJiZGExOGJhZXAtMSwKKyAgICAtMHgxLmZmZmZlZmZmY2ZmYWVwMAorICB9LAorICB7IC8vIEVudHJ5IDU0MAorICAgIC0weDEuYmMxNGViZjZiZmI1MWZmYTVlNmY1YjBiMGJmOWU4OTlwLTQsCisgICAgMHgxLmZmZmZmYmZmZmZmZmZwMjI4CisgIH0sCisgIHsgLy8gRW50cnkgNTQxCisgICAgMHgxLmJjMTRlYmY2YmZiNTFmZmE1ZTZmNWIwYjBiZjllODk5cC00LAorICAgIC0weDEuZmZmZmZiZmZmZmZmZnAyMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDIKKyAgICAweDEuYmI4ODdhMDZmNmM1MGZlZjA2NTRkMzAzYzgyZjFhNzhwLTMsCisgICAgMHgxLmZmZmZmYmZmZmZmZmZwNzM1CisgIH0sCisgIHsgLy8gRW50cnkgNTQzCisgICAgLTB4MS5iYjg4N2EwNmY2YzUwZmVmMDY1NGQzMDNjODJmMWE3OHAtMywKKyAgICAtMHgxLmZmZmZmYmZmZmZmZmZwNzM1CisgIH0sCisgIHsgLy8gRW50cnkgNTQ0CisgICAgMHgxLmZmYWFhZGVmNTRlMmYwYzQwODE4ODBiN2I5ZTc5NGRmcC01LAorICAgIDB4MS5mZmZmZmVmZmZmZmZmcC01CisgIH0sCisgIHsgLy8gRW50cnkgNTQ1CisgICAgLTB4MS5mZmFhYWRlZjU0ZTJmMGM0MDgxODgwYjdiOWU3OTRkZnAtNSwKKyAgICAtMHgxLmZmZmZmZWZmZmZmZmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDYKKyAgICAweDEuZDRhM2M2MmM1YmUwOGIxMjM4NjhlOGE0NjdlZmYwY2VwLTEsCisgICAgMHgxLmZmZmZmZjhwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgNTQ3CisgICAgLTB4MS5kNGEzYzYyYzViZTA4YjEyMzg2OGU4YTQ2N2VmZjBjZXAtMSwKKyAgICAtMHgxLmZmZmZmZjhwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgNTQ4CisgICAgMHgxLmNlYzIwZjE5NzcwM2Y0ZmQ0MjA0OGRkZjg4OWZlODRhcC0zLAorICAgIDB4MS5mZmZmZmY4cDE5MgorICB9LAorICB7IC8vIEVudHJ5IDU0OQorICAgIC0weDEuY2VjMjBmMTk3NzAzZjRmZDQyMDQ4ZGRmODg5ZmU4NGFwLTMsCisgICAgLTB4MS5mZmZmZmY4cDE5MgorICB9LAorICB7IC8vIEVudHJ5IDU1MAorICAgIDB4MS5kMzdhYWRjN2M4NjYyNTAxNzUxZGJmNGU5ZTU3MDFhYnAtMiwKKyAgICAweDEuZmZmZmZmOHA1NDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTEKKyAgICAtMHgxLmQzN2FhZGM3Yzg2NjI1MDE3NTFkYmY0ZTllNTcwMWFicC0yLAorICAgIC0weDEuZmZmZmZmOHA1NDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTIKKyAgICAweDEuZmE4ZDJhNGQwYTIwMjdmMGY3NGRmMzEzNmNiNzhmNzJwLTEsCisgICAgMHgxLmZmZmZmZmMwMDE4ZmZwMgorICB9LAorICB7IC8vIEVudHJ5IDU1MworICAgIC0weDEuZmE4ZDJhNGQwYTIwMjdmMGY3NGRmMzEzNmNiNzhmNzJwLTEsCisgICAgLTB4MS5mZmZmZmZjMDAxOGZmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTQKKyAgICAweDEuZmE4ZDJhMDI5Zjk3N2ZmZTc0Y2IxNGNiMDlkZjE3NmRwLTEsCisgICAgMHgxLmZmZmZmZmZmZWZmZmZwMgorICB9LAorICB7IC8vIEVudHJ5IDU1NQorICAgIC0weDEuZmE4ZDJhMDI5Zjk3N2ZmZTc0Y2IxNGNiMDlkZjE3NmRwLTEsCisgICAgLTB4MS5mZmZmZmZmZmVmZmZmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTYKKyAgICAtMHgxLjI3NjNmMDJhMmQxZTk4MDAwMDAxNWRiZjk1ZDg5YWIycC00LAorICAgIDB4MS5mZmZmZmZmZmY4MjUwcDk0MworICB9LAorICB7IC8vIEVudHJ5IDU1NworICAgIDB4MS4yNzYzZjAyYTJkMWU5ODAwMDAwMTVkYmY5NWQ4OWFiMnAtNCwKKyAgICAtMHgxLmZmZmZmZmZmZjgyNTBwOTQzCisgIH0sCisgIHsgLy8gRW50cnkgNTU4CisgICAgMHgxLmZjZmYxMjhmNzdkZGE4MWMyYTBlYzAzZTRlZDgwNDIycC0xLAorICAgIDB4MS5mZmZmZmZmZmZlMDlkcDMyMAorICB9LAorICB7IC8vIEVudHJ5IDU1OQorICAgIC0weDEuZmNmZjEyOGY3N2RkYTgxYzJhMGVjMDNlNGVkODA0MjJwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZlMDlkcDMyMAorICB9LAorICB7IC8vIEVudHJ5IDU2MAorICAgIC0weDEuZmNjMGJmZWRkODRhNTgxNmQ5NTk2YjhmOWZiYjliNDFwLTEsCisgICAgMHgxLmZmZmZmZmZmZmU2ZTNwNzIwCisgIH0sCisgIHsgLy8gRW50cnkgNTYxCisgICAgMHgxLmZjYzBiZmVkZDg0YTU4MTZkOTU5NmI4ZjlmYmI5YjQxcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZTZlM3A3MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjIKKyAgICAweDEuYWVkNTQ4ZjA5MGMxZGZmZTZlMDQzMjJkYzhlOGNiZmFwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZlN2ZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjMKKyAgICAtMHgxLmFlZDU0OGYwOTBjMWRmZmU2ZTA0MzIyZGM4ZThjYmZhcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmU3ZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDU2NAorICAgIC0weDEuZjVlMTFkZWY5OWQyYjIyMDk4MjQyYWM5ZmI3NTZhZGJwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZlZmZwMjUwCisgIH0sCisgIHsgLy8gRW50cnkgNTY1CisgICAgMHgxLmY1ZTExZGVmOTlkMmIyMjA5ODI0MmFjOWZiNzU2YWRicC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmVmZnAyNTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjYKKyAgICAweDEuOGE5Y2JmNDhmZWM5ZjJhMGZkZTk1MWYzMTNiOTE4Y2NwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmNzhwOTIwCisgIH0sCisgIHsgLy8gRW50cnkgNTY3CisgICAgLTB4MS44YTljYmY0OGZlYzlmMmEwZmRlOTUxZjMxM2I5MThjY3AtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmNzhwOTIwCisgIH0sCisgIHsgLy8gRW50cnkgNTY4CisgICAgLTB4MS43ZWJhNTg5NDg0NGNjMDBjODhmMzliZDNkNDE5N2QxNHAtMywKKyAgICAweDEuZmZmZmZmZmZmZmY4M3AxNTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjkKKyAgICAweDEuN2ViYTU4OTQ4NDRjYzAwYzg4ZjM5YmQzZDQxOTdkMTRwLTMsCisgICAgLTB4MS5mZmZmZmZmZmZmZjgzcDE1MAorICB9LAorICB7IC8vIEVudHJ5IDU3MAorICAgIDB4MS45MmM0ZjA2ZDJjZGQxNWQzMDI2MDljYWE4Nzg4MmFmYXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZkNXA5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzEKKyAgICAtMHgxLjkyYzRmMDZkMmNkZDE1ZDMwMjYwOWNhYTg3ODgyYWZhcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZkNXA5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzIKKyAgICAtMHgxLjNkNWY3ZGViMWQzYmFkNjNlYjE3M2I3M2U4NDExMGEwcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmU4cDcyMAorICB9LAorICB7IC8vIEVudHJ5IDU3MworICAgIDB4MS4zZDVmN2RlYjFkM2JhZDYzZWIxNzNiNzNlODQxMTBhMHAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZThwNzIwCisgIH0sCisgIHsgLy8gRW50cnkgNTc0CisgICAgLTB4MS45MTM0OWIwYWU5MGU1MzE2NTM5YzA3ZWVhOWI0ZTZiMHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZlYnA5MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzUKKyAgICAweDEuOTEzNDliMGFlOTBlNTMxNjUzOWMwN2VlYTliNGU2YjBwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmVicDkyMAorICB9LAorICB7IC8vIEVudHJ5IDU3NgorICAgIC0weDEuODM3YjlkZGRjMWU4NzM4ZDc0YjJhNzRmYTQyZDgwMmRwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZjFwMQorICB9LAorICB7IC8vIEVudHJ5IDU3NworICAgIDB4MS44MzdiOWRkZGMxZTg3MzhkNzRiMmE3NGZhNDJkODAyZHAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZjFwMQorICB9LAorICB7IC8vIEVudHJ5IDU3OAorICAgIDB4MS41MTBlMDYyZTdmYTIwMzdkMzg0MmRlOTkzYzljNTA5MHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmMXAyNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzkKKyAgICAtMHgxLjUxMGUwNjJlN2ZhMjAzN2QzODQyZGU5OTNjOWM1MDkwcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmMXAyNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODAKKyAgICAweDEuZWFlZTg3NDRiMDVlNDdmZGUwOTJlM2ExNDg5NWQwNjdwLTIsCisgICAgMHgxLmZmZmZmZmZmZmZmZjNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODEKKyAgICAtMHgxLmVhZWU4NzQ0YjA1ZTQ3ZmRlMDkyZTNhMTQ4OTVkMDY3cC0yLAorICAgIC0weDEuZmZmZmZmZmZmZmZmM3AtMgorICB9LAorICB7IC8vIEVudHJ5IDU4MgorICAgIDB4MS44YTRkZWU4ZjQwNjI3OTEwNzg3NjZiMGEwMWRlMzYwZHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmNHA4NDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODMKKyAgICAtMHgxLjhhNGRlZThmNDA2Mjc5MTA3ODc2NmIwYTAxZGUzNjBkcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmNHA4NDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODQKKyAgICAweDEuNTExOGQ2YmJkZTA3ZTRlZWJmMmExMWRmNGRjNzRkNTRwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZjRwMTAyMAorICB9LAorICB7IC8vIEVudHJ5IDU4NQorICAgIC0weDEuNTExOGQ2YmJkZTA3ZTRlZWJmMmExMWRmNGRjNzRkNTRwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmY0cDEwMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODYKKyAgICAtMHgxLjVjZDVjNTNjZjMwYTk3ZmYwZTQ3MWQxNDljNDA5NTVkcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmY4cDYxNgorICB9LAorICB7IC8vIEVudHJ5IDU4NworICAgIDB4MS41Y2Q1YzUzY2YzMGE5N2ZmMGU0NzFkMTQ5YzQwOTU1ZHAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZjhwNjE2CisgIH0sCisgIHsgLy8gRW50cnkgNTg4CisgICAgMHgxLmZmZmZhMWYwZDdkYWY2OTNhODBhMmI4MTdiMTZmMjc3cC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZjcDQ3NQorICB9LAorICB7IC8vIEVudHJ5IDU4OQorICAgIC0weDEuZmZmZmExZjBkN2RhZjY5M2E4MGEyYjgxN2IxNmYyNzdwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZjcDQ3NQorICB9LAorICB7IC8vIEVudHJ5IDU5MAorICAgIDB4MS41MWU5ZDg0MDEwNmQ3MzQ4NGQ0NGE4NmY3NGMzZDQxZHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXA5NzAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTEKKyAgICAtMHgxLjUxZTlkODQwMTA2ZDczNDg0ZDQ0YTg2Zjc0YzNkNDFkcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXA5NzAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTIKKyAgICAtMC4wLAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDU5MworICAgIDAuMCwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDU5NAorICAgIC0wLjAsCisgICAgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDU5NQorICAgIDAuMCwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDU5NgorICAgIC0wLjAsCisgICAgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNTk3CisgICAgLTB4MS4wMDAwMDAwMDAwMDAwZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTgKKyAgICAweDEuMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTkKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIC0weDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDYwMAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMywKKyAgICAweDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDYwMQorICAgIC0weDEuZmZmZmZmZmZmZmZmZGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNjAyCisgICAgMHgxLmZmZmZmZmZmZmZmZmRmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNjAzCisgICAgMHgxLmZmZmZmZmZmZmZmZmRmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNjA0CisgICAgLTB4MS5mZmZmZmZmZmZmZmZkZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMywKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDYKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIC0weDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDYwNworICAgIDB4MS4wMDAwMDAwMDAwMDAwZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDYwOAorICAgIC0weDEuMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjIsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNjA5CisgICAgMHgxLjk5OTk5OTZkZThjYTE5OGMyNGFiOTQ0OWJlZWUxNmQ1cC0xMywKKyAgICAweDEuOTk5OTk5OTk5OTk5YXAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTAKKyAgICAtMHgxLjk5OTk5OTZkZThjYTE5OGMyNGFiOTQ0OWJlZWUxNmQ1cC0xMywKKyAgICAtMHgxLjk5OTk5OTk5OTk5OWFwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgNjExCisgICAgMHgxLjk5OTk5OGVhZDY1Yjk2Zjc4YTRkYmZkODM5YzdlZjJlcC0xMiwKKyAgICAweDEuOTk5OTk5OTk5OTk5YXAtMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTIKKyAgICAtMHgxLjk5OTk5OGVhZDY1Yjk2Zjc4YTRkYmZkODM5YzdlZjJlcC0xMiwKKyAgICAtMHgxLjk5OTk5OTk5OTk5OWFwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgNjEzCisgICAgMHgxLjMzMzMzMjBjNDliYWJmZjE1MWI2ZDA0MjkwZTJjM2EycC0xMSwKKyAgICAweDEuMzMzMzMzMzMzMzMzNHAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTQKKyAgICAtMHgxLjMzMzMzMjBjNDliYWJmZjE1MWI2ZDA0MjkwZTJjM2EycC0xMSwKKyAgICAtMHgxLjMzMzMzMzMzMzMzMzRwLTExCisgIH0sCisgIHsgLy8gRW50cnkgNjE1CisgICAgMHgxLjk5OTk5NmRlOGNhMjg4NGRhMmYwOGYyNWJiMDI0ZDA4cC0xMSwKKyAgICAweDEuOTk5OTk5OTk5OTk5YXAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTYKKyAgICAtMHgxLjk5OTk5NmRlOGNhMjg4NGRhMmYwOGYyNWJiMDI0ZDA4cC0xMSwKKyAgICAtMHgxLjk5OTk5OTk5OTk5OWFwLTExCisgIH0sCisgIHsgLy8gRW50cnkgNjE3CisgICAgMHgxLmZmZmZmYWFhYWFhZWVlZWVlZDRlZDRlZGFiNGM3YmQ2cC0xMSwKKyAgICAweDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTgKKyAgICAtMHgxLmZmZmZmYWFhYWFhZWVlZWVlZDRlZDRlZGFiNGM3YmQ2cC0xMSwKKyAgICAtMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNjE5CisgICAgMHgxLjMzMzMyZTk3OGQ1NTJhZmM4ODNiZGIwNDc1MWUzODM1cC0xMCwKKyAgICAweDEuMzMzMzMzMzMzMzMzM3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjAKKyAgICAtMHgxLjMzMzMyZTk3OGQ1NTJhZmM4ODNiZGIwNDc1MWUzODM1cC0xMCwKKyAgICAtMHgxLjMzMzMzMzMzMzMzMzNwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNjIxCisgICAgMHgxLjY2NjY1ZjE1MjlhZmY4YTM4MDkyNDY2NzBhNDM2YzNjcC0xMCwKKyAgICAweDEuNjY2NjY2NjY2NjY2NnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjIKKyAgICAtMHgxLjY2NjY1ZjE1MjlhZmY4YTM4MDkyNDY2NzBhNDM2YzNjcC0xMCwKKyAgICAtMHgxLjY2NjY2NjY2NjY2NjZwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNjIzCisgICAgMHgxLjk5OTk4ZWFkNjVjZGY4MmUxOTRjMTMzOTk3ZjJmYjY4cC0xMCwKKyAgICAweDEuOTk5OTk5OTk5OTk5OXAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjQKKyAgICAtMHgxLjk5OTk4ZWFkNjVjZGY4MmUxOTRjMTMzOTk3ZjJmYjY4cC0xMCwKKyAgICAtMHgxLjk5OTk5OTk5OTk5OTlwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNjI1CisgICAgMHgxLmNjY2NiZDNmN2QxNWQ0MmFmZmI5ZjAyYmYxZGMyNTdicC0xMCwKKyAgICAweDEuY2NjY2NjY2NjY2NjY3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjYKKyAgICAtMHgxLmNjY2NiZDNmN2QxNWQ0MmFmZmI5ZjAyYmYxZGMyNTdicC0xMCwKKyAgICAtMHgxLmNjY2NjY2NjY2NjY2NwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNjI3CisgICAgMHgxLjA2NjVhZTljN2I0NGVkMjgwMjE2YmUyMTA0ZjI4ZjAycC03LAorICAgIDB4MS4wNjY2NjY2NjY2NjY2cC03CisgIH0sCisgIHsgLy8gRW50cnkgNjI4CisgICAgLTB4MS4wNjY1YWU5YzdiNDRlZDI4MDIxNmJlMjEwNGYyOGYwMnAtNywKKyAgICAtMHgxLjA2NjY2NjY2NjY2NjZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjkKKyAgICAweDEuY2NjOGU5N2I1OWY2MTg4OThjNGFjM2EwYWVkZGY3MDlwLTcsCisgICAgMHgxLmNjY2NjY2NjY2NjY2NwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzAKKyAgICAtMHgxLmNjYzhlOTdiNTlmNjE4ODk4YzRhYzNhMGFlZGRmNzA5cC03LAorICAgIC0weDEuY2NjY2NjY2NjY2NjY3AtNworICB9LAorICB7IC8vIEVudHJ5IDYzMQorICAgIDB4MS40OTkzZThhOGZmNzliMTMyMDQ2ZWZhNzg1NmE5NzUzOHAtNiwKKyAgICAweDEuNDk5OTk5OTk5OTk5OXAtNgorICB9LAorICB7IC8vIEVudHJ5IDYzMgorICAgIC0weDEuNDk5M2U4YThmZjc5YjEzMjA0NmVmYTc4NTZhOTc1MzhwLTYsCisgICAgLTB4MS40OTk5OTk5OTk5OTk5cC02CisgIH0sCisgIHsgLy8gRW50cnkgNjMzCisgICAgMHgxLmFjYzA0NGM1NmRiMGUxOWY4MmM5YzNjZmYyNDZlMjAxcC02LAorICAgIDB4MS5hY2NjY2NjY2NjY2NjcC02CisgIH0sCisgIHsgLy8gRW50cnkgNjM0CisgICAgLTB4MS5hY2MwNDRjNTZkYjBlMTlmODJjOWMzY2ZmMjQ2ZTIwMXAtNiwKKyAgICAtMHgxLmFjY2NjY2NjY2NjY2NwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzUKKyAgICAweDEuMDdmNDRkNjdjZjQxYWZiYzBjOTUxMDhiOTlmOTFiMDFwLTUsCisgICAgMHgxLjA4MHAtNQorICB9LAorICB7IC8vIEVudHJ5IDYzNgorICAgIC0weDEuMDdmNDRkNjdjZjQxYWZiYzBjOTUxMDhiOTlmOTFiMDFwLTUsCisgICAgLTB4MS4wODBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzcKKyAgICAweDEuMzk4NWZlNDZmMWM4NzE0ZWFhMTQxODU2MTk2M2U4OWJwLTUsCisgICAgMHgxLjM5OTk5OTk5OTk5OWFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzgKKyAgICAtMHgxLjM5ODVmZTQ2ZjFjODcxNGVhYTE0MTg1NjE5NjNlODlicC01LAorICAgIC0weDEuMzk5OTk5OTk5OTk5YXAtNQorICB9LAorICB7IC8vIEVudHJ5IDYzOQorICAgIDB4MS42YjE0YmRlOTNhYzVmN2QyNDU0NGQwZWNmOGJlN2FlZXAtNSwKKyAgICAweDEuNmIzMzMzMzMzMzMzNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDY0MAorICAgIC0weDEuNmIxNGJkZTkzYWM1ZjdkMjQ1NDRkMGVjZjhiZTdhZWVwLTUsCisgICAgLTB4MS42YjMzMzMzMzMzMzM0cC01CisgIH0sCisgIHsgLy8gRW50cnkgNjQxCisgICAgMHgxLjljYTAxNTNlZDgzOTZiMDJmODYwNTIxOWE1ZmU1OTE3cC01LAorICAgIDB4MS45Y2NjY2NjY2NjY2NlcC01CisgIH0sCisgIHsgLy8gRW50cnkgNjQyCisgICAgLTB4MS45Y2EwMTUzZWQ4Mzk2YjAyZjg2MDUyMTlhNWZlNTkxN3AtNSwKKyAgICAtMHgxLjljY2NjY2NjY2NjY2VwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDMKKyAgICAweDEuY2UyNzhkNDAyN2QzNDM4N2YxODRkNGFiMmFhZjU0NWZwLTUsCisgICAgMHgxLmNlNjY2NjY2NjY2NjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDQKKyAgICAtMHgxLmNlMjc4ZDQwMjdkMzQzODdmMTg0ZDRhYjJhYWY1NDVmcC01LAorICAgIC0weDEuY2U2NjY2NjY2NjY2NnAtNQorICB9LAorICB7IC8vIEVudHJ5IDY0NQorICAgIDB4MS40M2MxZTljMTcxYTY2N2EwYjkyNTE5YTA0ZmE1YTkxY3AtMSwKKyAgICAweDEuNWU3ZmM0MzY5YmRhZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY0NgorICAgIC0weDEuNDNjMWU5YzE3MWE2NjdhMGI5MjUxOWEwNGZhNWE5MWNwLTEsCisgICAgLTB4MS41ZTdmYzQzNjliZGFkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjQ3CisgICAgMHgxLmVlM2Q2YmNlYTA5Y2ExOGIxZDFjZTdlZTA0ZmQ4ODZmcC0xLAorICAgIDB4MS40ZTdmYzQzNjliZGFkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDgKKyAgICAtMHgxLmVlM2Q2YmNlYTA5Y2ExOGIxZDFjZTdlZTA0ZmQ4ODZmcC0xLAorICAgIC0weDEuNGU3ZmM0MzY5YmRhZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ5CisgICAgMHgxLmRmOGUyMmVhODA5ZDY1YzZhNjliOTZhY2E2MGJlNDMycC0xLAorICAgIDB4MS5lZGJmYTY1MWU5Yzg0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTAKKyAgICAtMHgxLmRmOGUyMmVhODA5ZDY1YzZhNjliOTZhY2E2MGJlNDMycC0xLAorICAgIC0weDEuZWRiZmE2NTFlOWM4NHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjUxCisgICAgMHgxLjFkMzQ3OWVhYzdhZTM1ZTJmYmVhMGFlNjk2NDM0NjkycC0xLAorICAgIDB4MS40NjdmYzQzNjliZGFkcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTIKKyAgICAtMHgxLjFkMzQ3OWVhYzdhZTM1ZTJmYmVhMGFlNjk2NDM0NjkycC0xLAorICAgIC0weDEuNDY3ZmM0MzY5YmRhZHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjUzCisgICAgLTB4MS5mZmVhYWFlZWVlODRiNDRjY2VmZWY4MzIyNTRkMjhjMHAtNiwKKyAgICAweDEuOTYxZmI1NDQ0MmQxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjU0CisgICAgMHgxLmZmZWFhYWVlZWU4NGI0NGNjZWZlZjgzMjI1NGQyOGMwcC02LAorICAgIC0weDEuOTYxZmI1NDQ0MmQxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjU1CisgICAgLTB4MS4zNzM0ZDMyZDQ5YmQwYjk0Mjc3MmE3NTY3ZDUxNDE0MHAtMSwKKyAgICAweDEuZTViZmE2NTFlOWM4M3AxCisgIH0sCisgIHsgLy8gRW50cnkgNjU2CisgICAgMHgxLjM3MzRkMzJkNDliZDBiOTQyNzcyYTc1NjdkNTE0MTQwcC0xLAorICAgIC0weDEuZTViZmE2NTFlOWM4M3AxCisgIH0sCisgIHsgLy8gRW50cnkgNjU3CisgICAgLTB4MS5lOWQyNWQxOTkxMWUyMDViNjUzNTIxZjQyYjliODY0ZnAtMSwKKyAgICAweDEuMWFhZmNiYWZjODVmN3AyCisgIH0sCisgIHsgLy8gRW50cnkgNjU4CisgICAgMHgxLmU5ZDI1ZDE5OTExZTIwNWI2NTM1MjFmNDJiOWI4NjRmcC0xLAorICAgIC0weDEuMWFhZmNiYWZjODVmN3AyCisgIH0sCisgIHsgLy8gRW50cnkgNjU5CisgICAgLTB4MS5lNGVjZGM1YTRlNDY1ODk5OTI4ZWI5ZmM5NTgyOWQ0OHAtMSwKKyAgICAweDEuNDI3ZmM0MzY5YmRhZHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjYwCisgICAgMHgxLmU0ZWNkYzVhNGU0NjU4OTk5MjhlYjlmYzk1ODI5ZDQ4cC0xLAorICAgIC0weDEuNDI3ZmM0MzY5YmRhZHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjYxCisgICAgLTB4MS4yYTU5ZjEwMzQ0MjYxOTdmYTZlZWUyMjc2Mjk2N2YyNXAtMSwKKyAgICAweDEuNmE0ZmJjYmQ2ZjU2MnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjYyCisgICAgMHgxLjJhNTlmMTAzNDQyNjE5N2ZhNmVlZTIyNzYyOTY3ZjI1cC0xLAorICAgIC0weDEuNmE0ZmJjYmQ2ZjU2MnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjYzCisgICAgLTB4MS4yNjMxMjQ0M2JkMzVmMTkzMTJlYWMwYTFhNmI1NjU5ZXAtMSwKKyAgICAweDEuNmFmMmVmZjBhMjg5NnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjY0CisgICAgMHgxLjI2MzEyNDQzYmQzNWYxOTMxMmVhYzBhMWE2YjU2NTllcC0xLAorICAgIC0weDEuNmFmMmVmZjBhMjg5NnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjY1CisgICAgLTB4MS5lMThlNjYwYTVlMmZiMzE2ZWNiYjllZDcwMTIyZWZmNXAtMSwKKyAgICAweDEuNDNjNjJhOWQwMjQxNHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjY2CisgICAgMHgxLmUxOGU2NjBhNWUyZmIzMTZlY2JiOWVkNzAxMjJlZmY1cC0xLAorICAgIC0weDEuNDNjNjJhOWQwMjQxNHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjY3CisgICAgLTB4MS5lZTBlODNhMDE5OGI2ZTJlZjdjNDhlNjYyNTI5MWEwYXAtMSwKKyAgICAweDEuMWM5OTY1NDk2MWY5MnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjY4CisgICAgMHgxLmVlMGU4M2EwMTk4YjZlMmVmN2M0OGU2NjI1MjkxYTBhcC0xLAorICAgIC0weDEuMWM5OTY1NDk2MWY5MnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjY5CisgICAgLTB4MS40NzI3NzQ3MzM4ZTQ2NTM2MTZlYWRiZDdlYzNkMDJkM3AtMSwKKyAgICAweDEuZWFkOTNmZWI4MzYxZnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjcwCisgICAgMHgxLjQ3Mjc3NDczMzhlNDY1MzYxNmVhZGJkN2VjM2QwMmQzcC0xLAorICAgIC0weDEuZWFkOTNmZWI4MzYxZnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjcxCisgICAgLTB4MS40YmEyZjc1ZGRhNWZlNDM0MzIwOTA1YTcxODRmZjFhZnAtNCwKKyAgICAweDEuOWM3ZmI1NDQ0MmQxYXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjcyCisgICAgMHgxLjRiYTJmNzVkZGE1ZmU0MzQzMjA5MDVhNzE4NGZmMWFmcC00LAorICAgIC0weDEuOWM3ZmI1NDQ0MmQxYXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjczCisgICAgMHgxLjAzNGM0ZDYzM2I0ZWYwYTkwODliNDM4OTJhNDYyYTI2cC0xLAorICAgIDB4MS40ZTI2MmE5ZDAyNDE1cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzQKKyAgICAtMHgxLjAzNGM0ZDYzM2I0ZWYwYTkwODliNDM4OTJhNDYyYTI2cC0xLAorICAgIC0weDEuNGUyNjJhOWQwMjQxNXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjc1CisgICAgMHgxLmQxZTRjZGUyZjM5NDRmNGMxMzRjMDVjYzRlNTMzOWEzcC0xLAorICAgIDB4MS5mZjk5M2ZlYjgzNjIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzYKKyAgICAtMHgxLmQxZTRjZGUyZjM5NDRmNGMxMzRjMDVjYzRlNTMzOWEzcC0xLAorICAgIC0weDEuZmY5OTNmZWI4MzYyMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjc3CisgICAgMHgxLmY3NTAyMzVjOTQ5OTI2YzQ4YzkwZTQxYTkxNDc0YzA2cC0xLAorICAgIDB4MS42MmU2MmE5ZDAyNDE2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzgKKyAgICAtMHgxLmY3NTAyMzVjOTQ5OTI2YzQ4YzkwZTQxYTkxNDc0YzA2cC0xLAorICAgIC0weDEuNjJlNjJhOWQwMjQxNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjc5CisgICAgMHgxLjY1ZjdkNTcxMjc5YjBiODAwNTU1MmZkNDdhMmU3N2FlcC0xLAorICAgIDB4MS44YzY2MmE5ZDAyNDE5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjgwCisgICAgLTB4MS42NWY3ZDU3MTI3OWIwYjgwMDU1NTJmZDQ3YTJlNzdhZXAtMSwKKyAgICAtMHgxLjhjNjYyYTlkMDI0MTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODEKKyAgICAtMHgxLmZlMDQzZjU3MzY5ZDZhNTJmYTMzZjAxMTllYzRkYTE5cC0xLAorICAgIC0weDEuYThhYTFkMTFjNDRmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjgyCisgICAgMHgxLmZlMDQzZjU3MzY5ZDZhNTJmYTMzZjAxMTllYzRkYTE5cC0xLAorICAgIDB4MS5hOGFhMWQxMWM0NGZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODMKKyAgICAtMHgxLmZmZjE4ZjI0ZjNlNGI4N2JmOGMzNzYyY2I0NGY0NmQ2cC0xLAorICAgIC0weDEuOTVlYzhiOWUwM2Q1NHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjg0CisgICAgMHgxLmZmZjE4ZjI0ZjNlNGI4N2JmOGMzNzYyY2I0NGY0NmQ2cC0xLAorICAgIDB4MS45NWVjOGI5ZTAzZDU0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODUKKyAgICAtMHgxLmZmMjBkOTYxNjI0ZTcwNjNhNzgyMDNiODExZjU3OWNhcC0xLAorICAgIC0weDEuODMyZWZhMmE0MzVhOXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjg2CisgICAgMHgxLmZmMjBkOTYxNjI0ZTcwNjNhNzgyMDNiODExZjU3OWNhcC0xLAorICAgIDB4MS44MzJlZmEyYTQzNWE5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODcKKyAgICAtMHgxLmZiOTMzYzQwMTA3ZmQ3NzUxODVhYzE0OTE4YzhmYmFmcC0xLAorICAgIC0weDEuNzA3MTY4YjY4MmRmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjg4CisgICAgMHgxLmZiOTMzYzQwMTA3ZmQ3NzUxODVhYzE0OTE4YzhmYmFmcC0xLAorICAgIDB4MS43MDcxNjhiNjgyZGZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODkKKyAgICAtMHgxLmY1NGQ5NzE4ODFhZDY4NWI3ODJlZjg4ZTYzNTBmN2NkcC0xLAorICAgIC0weDEuNWRiM2Q3NDJjMjY1M3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjkwCisgICAgMHgxLmY1NGQ5NzE4ODFhZDY4NWI3ODJlZjg4ZTYzNTBmN2NkcC0xLAorICAgIDB4MS41ZGIzZDc0MmMyNjUzcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTEKKyAgICAtMHgxLmVjNTg4M2I3YjZjZjRkODU5YWIwNGUxNWQ1MzY5OGM5cC0xLAorICAgIC0weDEuNGFmNjQ1Y2YwMWVhOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjkyCisgICAgMHgxLmVjNTg4M2I3YjZjZjRkODU5YWIwNGUxNWQ1MzY5OGM5cC0xLAorICAgIDB4MS40YWY2NDVjZjAxZWE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTMKKyAgICAtMHgxLmUwYzA0YTk0ZTE3MzA5YzgwNmMxYzc4YmRkYzFkNjA3cC0xLAorICAgIC0weDEuMzgzOGI0NWI0MTZmZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjk0CisgICAgMHgxLmUwYzA0YTk0ZTE3MzA5YzgwNmMxYzc4YmRkYzFkNjA3cC0xLAorICAgIDB4MS4zODM4YjQ1YjQxNmZkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTUKKyAgICAtMHgxLmQyOTRkMWY5NmM3ZWJkYjk4NjlkZDk3Y2Y1NzRkZGI5cC0xLAorICAgIC0weDEuMjU3YjIyZTc4MGY1MnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjk2CisgICAgMHgxLmQyOTRkMWY5NmM3ZWJkYjk4NjlkZDk3Y2Y1NzRkZGI5cC0xLAorICAgIDB4MS4yNTdiMjJlNzgwZjUycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTcKKyAgICAtMHgxLmMxZTk4ODMzNzNkN2VjYzQ4YzkyZGM4ODc1NTA1ZjdlcC0xLAorICAgIC0weDEuMTJiZDkxNzNjMDdhYnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjk4CisgICAgMHgxLmMxZTk4ODMzNzNkN2VjYzQ4YzkyZGM4ODc1NTA1ZjdlcC0xLAorICAgIDB4MS4xMmJkOTE3M2MwN2FicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTkKKyAgICAtMHgxLmEyYzI4OWQ5ZDA1NWFjMzc3ZjY3ZDdhNTRhMGIzMDA1cC0xLAorICAgIC0weDEuZWE1YzNlZDViMzg1MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcwMAorICAgIDB4MS5hMmMyODlkOWQwNTVhYzM3N2Y2N2Q3YTU0YTBiMzAwNXAtMSwKKyAgICAweDEuZWE1YzNlZDViMzg1MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcwMQorICAgIC0weDEuOTVmMDUyNTdkYmNiNWY0YjEyNjM2YzU4NzhlYTQwNWFwLTEsCisgICAgLTB4MS5kNGI4N2RhYjY3MGEwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzAyCisgICAgMHgxLjk1ZjA1MjU3ZGJjYjVmNGIxMjYzNmM1ODc4ZWE0MDVhcC0xLAorICAgIDB4MS5kNGI4N2RhYjY3MGEwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzAzCisgICAgLTB4MS44ODY0N2YyNmE2ZTBmNmIyNzE1YTZjMzc5N2VjMTFmNXAtMSwKKyAgICAtMHgxLmJmMTRiYzgxMWE4ZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDQKKyAgICAweDEuODg2NDdmMjZhNmUwZjZiMjcxNWE2YzM3OTdlYzExZjVwLTEsCisgICAgMHgxLmJmMTRiYzgxMWE4ZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDUKKyAgICAtMHgxLjdhMjU0MWRmZDRlNzUyZGUzOGYwNGFiYTIxZmM5ZDlmcC0xLAorICAgIC0weDEuYTk3MGZiNTZjZTE0MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcwNgorICAgIDB4MS43YTI1NDFkZmQ0ZTc1MmRlMzhmMDRhYmEyMWZjOWQ5ZnAtMSwKKyAgICAweDEuYTk3MGZiNTZjZTE0MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcwNworICAgIC0weDEuNmIzOTFlMjViYzI2Y2JiY2Y3YTAxODQwNzBhZjljMzlwLTEsCisgICAgLTB4MS45M2NkM2EyYzgxOTkwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzA4CisgICAgMHgxLjZiMzkxZTI1YmMyNmNiYmNmN2EwMTg0MDcwYWY5YzM5cC0xLAorICAgIDB4MS45M2NkM2EyYzgxOTkwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzA5CisgICAgLTB4MS41YmE2ZTZhOGU3MDY1MzViOThmYzk5ZGZhZWY4MjRmMXAtMSwKKyAgICAtMHgxLjdlMjk3OTAyMzUxZTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTAKKyAgICAweDEuNWJhNmU2YThlNzA2NTM1Yjk4ZmM5OWRmYWVmODI0ZjFwLTEsCisgICAgMHgxLjdlMjk3OTAyMzUxZTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTEKKyAgICAtMHgxLjRiNzViYTA5NmZhNTQ5ZWI5MzU5NWQ4MTk0YWI5MTdmcC0xLAorICAgIC0weDEuNjg4NWI3ZDdlOGEzMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxMgorICAgIDB4MS40Yjc1YmEwOTZmYTU0OWViOTM1OTVkODE5NGFiOTE3ZnAtMSwKKyAgICAweDEuNjg4NWI3ZDdlOGEzMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxMworICAgIC0weDEuM2FhY2ZmOTVhMzEyMmIxNWYzNzJiZmQyZmRmOWE3NWZwLTEsCisgICAgLTB4MS41MmUxZjZhZDljMjgwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzE0CisgICAgMHgxLjNhYWNmZjk1YTMxMjJiMTVmMzcyYmZkMmZkZjlhNzVmcC0xLAorICAgIDB4MS41MmUxZjZhZDljMjgwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzE1CisgICAgLTB4MS4yOTU0NjNlNzY5Mjg0YTVhZWQxN2E0NDMzOTJmMzhmM3AtMSwKKyAgICAtMHgxLjNkM2UzNTgzNGZhZDBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTYKKyAgICAweDEuMjk1NDYzZTc2OTI4NGE1YWVkMTdhNDQzMzkyZjM4ZjNwLTEsCisgICAgMHgxLjNkM2UzNTgzNGZhZDBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTcKKyAgICAtMHgxLmZjNzY5Yjc3ZTU4ODQ5NWE2ZjY0MmNhMjRlNGVkM2ZjcC0yLAorICAgIC0weDEuMGEwYjAyNTAxYzc5OXAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxOAorICAgIDB4MS5mYzc2OWI3N2U1ODg0OTVhNmY2NDJjYTI0ZTRlZDNmY3AtMiwKKyAgICAweDEuMGEwYjAyNTAxYzc5OXAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxOQorICAgIC0weDEuYzg1M2M3ODQ2MmRlNDZiNTc0MzMxNTYxMmY4YjVhN2NwLTIsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzIwCisgICAgMHgxLmM4NTNjNzg0NjJkZTQ2YjU3NDMzMTU2MTJmOGI1YTdjcC0yLAorICAgIDB4MS5kOGY3MjA4ZTZiODJjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzIxCisgICAgLTB4MS45MmFiYTkwYWFmMjcyNDlkZTQ5Yzc4ZmM2NDNjOGI3MnAtMiwKKyAgICAtMHgxLjlkZDgzYzdjOWUxMjZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjIKKyAgICAweDEuOTJhYmE5MGFhZjI3MjQ5ZGU0OWM3OGZjNjQzYzhiNzJwLTIsCisgICAgMHgxLjlkZDgzYzdjOWUxMjZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjMKKyAgICAtMHgxLjViYWMwNjQ2NThmMzk0NjBjODMxMTNjMGEwMDk3YTBjcC0yLAorICAgIC0weDEuNjJiOTU4NmFkMGEyMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDcyNAorICAgIDB4MS41YmFjMDY0NjU4ZjM5NDYwYzgzMTEzYzBhMDA5N2EwY3AtMiwKKyAgICAweDEuNjJiOTU4NmFkMGEyMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDcyNQorICAgIC0weDEuMjM4M2NhODA3OGU1ODQ3N2NkNWZiMWQ5ZGUwMzFkY2VwLTIsCisgICAgLTB4MS4yNzlhNzQ1OTAzMzFhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzI2CisgICAgMHgxLjIzODNjYTgwNzhlNTg0NzdjZDVmYjFkOWRlMDMxZGNlcC0yLAorICAgIDB4MS4yNzlhNzQ1OTAzMzFhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzI3CisgICAgLTB4MS5kNGM1YmMxMWQyMzcxYWYyZmUyNWVmNWVkZTI3NjZhM3AtMywKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MjlwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjgKKyAgICAweDEuZDRjNWJjMTFkMjM3MWFmMmZlMjVlZjVlZGUyNzY2YTNwLTMsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MjlwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjkKKyAgICAtMHgxLjYwZjNmYWFmNDMwMjNkM2M3ODYzYWUwNmQ0ZDU5Nzc0cC0zLAorICAgIC0weDEuNjJiOTU4NmFkMGExZXAtMworICB9LAorICB7IC8vIEVudHJ5IDczMAorICAgIDB4MS42MGYzZmFhZjQzMDIzZDNjNzg2M2FlMDZkNGQ1OTc3NHAtMywKKyAgICAweDEuNjJiOTU4NmFkMGExZXAtMworICB9LAorICB7IC8vIEVudHJ5IDczMQorICAgIC0weDEuZDdlYTNkZTQ1YTlkNjU2M2FjMDA1YzBjNWJhZDhjNTBwLTQsCisgICAgLTB4MS5kOGY3MjA4ZTZiODI2cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzMyCisgICAgMHgxLmQ3ZWEzZGU0NWE5ZDY1NjNhYzAwNWMwYzViYWQ4YzUwcC00LAorICAgIDB4MS5kOGY3MjA4ZTZiODI2cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzMzCisgICAgLTB4MS5kOGIzZGY0ODk5ODdhNmZlMGVlYWQwMDhlNzIwYWEyMnAtNSwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzQKKyAgICAweDEuZDhiM2RmNDg5OTg3YTZmZTBlZWFkMDA4ZTcyMGFhMjJwLTUsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzUKKyAgICAweDEuZDhiM2RmNDg5OTg3YTZmZTBlZWFkMDA4ZTcyMGFhMjJwLTUsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzYKKyAgICAtMHgxLmQ4YjNkZjQ4OTk4N2E2ZmUwZWVhZDAwOGU3MjBhYTIycC01LAorICAgIC0weDEuZDhmNzIwOGU2YjgyZHAtNQorICB9LAorICB7IC8vIEVudHJ5IDczNworICAgIDB4MS5kN2VhM2RlNDVhOWRkNGE0YmNjZDFhOGMwNDhmYWY0Y3AtNCwKKyAgICAweDEuZDhmNzIwOGU2YjgyZHAtNAorICB9LAorICB7IC8vIEVudHJ5IDczOAorICAgIC0weDEuZDdlYTNkZTQ1YTlkZDRhNGJjY2QxYThjMDQ4ZmFmNGNwLTQsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJkcC00CisgIH0sCisgIHsgLy8gRW50cnkgNzM5CisgICAgMHgxLjYwZjNmYWFmNDMwMjdjNDc1MmY1NjRmOWQwODE4ZmU4cC0zLAorICAgIDB4MS42MmI5NTg2YWQwYTIycC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzQwCisgICAgLTB4MS42MGYzZmFhZjQzMDI3YzQ3NTJmNTY0ZjlkMDgxOGZlOHAtMywKKyAgICAtMHgxLjYyYjk1ODZhZDBhMjJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDEKKyAgICAweDEuZDRjNWJjMTFkMjM3NTk0MDA2NDJlNWExZWZkYzBmODVwLTMsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDIKKyAgICAtMHgxLmQ0YzViYzExZDIzNzU5NDAwNjQyZTVhMWVmZGMwZjg1cC0zLAorICAgIC0weDEuZDhmNzIwOGU2YjgyZHAtMworICB9LAorICB7IC8vIEVudHJ5IDc0MworICAgIDB4MS4yMzgzY2E4MDc4ZTVhMzI0ZDUyYzE1MzA3NDJjZDRmNXAtMiwKKyAgICAweDEuMjc5YTc0NTkwMzMxY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDc0NAorICAgIC0weDEuMjM4M2NhODA3OGU1YTMyNGQ1MmMxNTMwNzQyY2Q0ZjVwLTIsCisgICAgLTB4MS4yNzlhNzQ1OTAzMzFjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzQ1CisgICAgMHgxLjViYWMwNjQ2NThmM2IyN2EyODU3MmJlYTI1NjE5NWVmcC0yLAorICAgIDB4MS42MmI5NTg2YWQwYTIycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzQ2CisgICAgLTB4MS41YmFjMDY0NjU4ZjNiMjdhMjg1NzJiZWEyNTYxOTVlZnAtMiwKKyAgICAtMHgxLjYyYjk1ODZhZDBhMjJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDcKKyAgICAweDEuOTJhYmE5MGFhZjI3NDIwOWVmYWVkMDhlMzQwNzFlM2JwLTIsCisgICAgMHgxLjlkZDgzYzdjOWUxMjhwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDgKKyAgICAtMHgxLjkyYWJhOTBhYWYyNzQyMDllZmFlZDA4ZTM0MDcxZTNicC0yLAorICAgIC0weDEuOWRkODNjN2M5ZTEyOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDc0OQorICAgIDB4MS5jODUzYzc4NDYyZGU2MzViMTBhMmI5M2FmZDc1ZGEyNnAtMiwKKyAgICAweDEuZDhmNzIwOGU2YjgyZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDc1MAorICAgIC0weDEuYzg1M2M3ODQ2MmRlNjM1YjEwYTJiOTNhZmQ3NWRhMjZwLTIsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzUxCisgICAgMHgxLmZjNzY5Yjc3ZTU4ODQ5NWE2ZjY0MmNhMjRlNGVkM2ZjcC0yLAorICAgIDB4MS4wYTBiMDI1MDFjNzk5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzUyCisgICAgLTB4MS5mYzc2OWI3N2U1ODg0OTVhNmY2NDJjYTI0ZTRlZDNmY3AtMiwKKyAgICAtMHgxLjBhMGIwMjUwMWM3OTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTMKKyAgICAweDEuMjk1NDYzZTc2OTI4MTY0MGFlMDI2ZjUwZmM0NWUzMDFwLTEsCisgICAgMHgxLjNkM2UzNTgzNGZhY2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTQKKyAgICAtMHgxLjI5NTQ2M2U3NjkyODE2NDBhZTAyNmY1MGZjNDVlMzAxcC0xLAorICAgIC0weDEuM2QzZTM1ODM0ZmFjY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDc1NQorICAgIDB4MS4zYWFjZmY5NWEzMTFmODk5YTBlMjc5NTM1ZTgxYzRlY3AtMSwKKyAgICAweDEuNTJlMWY2YWQ5YzI3Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDc1NgorICAgIC0weDEuM2FhY2ZmOTVhMzExZjg5OWEwZTI3OTUzNWU4MWM0ZWNwLTEsCisgICAgLTB4MS41MmUxZjZhZDljMjdjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzU3CisgICAgMHgxLjRiNzViYTA5NmZhNTE5MjQ0MmI3OTUwZjk2MGY4MDA2cC0xLAorICAgIDB4MS42ODg1YjdkN2U4YTJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzU4CisgICAgLTB4MS40Yjc1YmEwOTZmYTUxOTI0NDJiNzk1MGY5NjBmODAwNnAtMSwKKyAgICAtMHgxLjY4ODViN2Q3ZThhMmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTkKKyAgICAweDEuNWJhNmU2YThlNzA2MjQ1Zjk3ZTI4YWYzZGRiNzAwZjZwLTEsCisgICAgMHgxLjdlMjk3OTAyMzUxZGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjAKKyAgICAtMHgxLjViYTZlNmE4ZTcwNjI0NWY5N2UyOGFmM2RkYjcwMGY2cC0xLAorICAgIC0weDEuN2UyOTc5MDIzNTFkY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDc2MQorICAgIDB4MS42YjM5MWUyNWJjMjY5ZWExYzFhNDBkZTYyZmJjMDNiNHAtMSwKKyAgICAweDEuOTNjZDNhMmM4MTk4Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDc2MgorICAgIC0weDEuNmIzOTFlMjViYzI2OWVhMWMxYTQwZGU2MmZiYzAzYjRwLTEsCisgICAgLTB4MS45M2NkM2EyYzgxOThjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzYzCisgICAgMHgxLjdhMjU0MWRmZDRlNzI3Yjg2ZGQzMDk2NjQxODZlYzZicC0xLAorICAgIDB4MS5hOTcwZmI1NmNlMTNjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzY0CisgICAgLTB4MS43YTI1NDFkZmQ0ZTcyN2I4NmRkMzA5NjY0MTg2ZWM2YnAtMSwKKyAgICAtMHgxLmE5NzBmYjU2Y2UxM2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjUKKyAgICAweDEuODg2NDdmMjZhNmUwY2Q5NWNiOTkxZjdmZmU2MWEwMmVwLTEsCisgICAgMHgxLmJmMTRiYzgxMWE4ZWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjYKKyAgICAtMHgxLjg4NjQ3ZjI2YTZlMGNkOTVjYjk5MWY3ZmZlNjFhMDJlcC0xLAorICAgIC0weDEuYmYxNGJjODExYThlY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDc2NworICAgIDB4MS45NWYwNTI1N2RiY2IzODRhNWUzMjY4NTczNzZkZDgwMXAtMSwKKyAgICAweDEuZDRiODdkYWI2NzA5Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDc2OAorICAgIC0weDEuOTVmMDUyNTdkYmNiMzg0YTVlMzI2ODU3Mzc2ZGQ4MDFwLTEsCisgICAgLTB4MS5kNGI4N2RhYjY3MDljcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzY5CisgICAgMHgxLmEyYzI4OWQ5ZDA1NTg3NjQ5MjFhNGRlMzU1Zjk0NDhjcC0xLAorICAgIDB4MS5lYTVjM2VkNWIzODRjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzcwCisgICAgLTB4MS5hMmMyODlkOWQwNTU4NzY0OTIxYTRkZTM1NWY5NDQ4Y3AtMSwKKyAgICAtMHgxLmVhNWMzZWQ1YjM4NGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzEKKyAgICAweDEuYzFlOTg4MzM3M2Q3ZWNjNDhjOTJkYzg4NzU1MDVmN2VwLTEsCisgICAgMHgxLjEyYmQ5MTczYzA3YWJwMAorICB9LAorICB7IC8vIEVudHJ5IDc3MgorICAgIC0weDEuYzFlOTg4MzM3M2Q3ZWNjNDhjOTJkYzg4NzU1MDVmN2VwLTEsCisgICAgLTB4MS4xMmJkOTE3M2MwN2FicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzMKKyAgICAweDEuZDI5NGQxZjk2YzdlZjI2ZTIwM2M1YjMwOWE1NTY3MWZwLTEsCisgICAgMHgxLjI1N2IyMmU3ODBmNTZwMAorICB9LAorICB7IC8vIEVudHJ5IDc3NAorICAgIC0weDEuZDI5NGQxZjk2YzdlZjI2ZTIwM2M1YjMwOWE1NTY3MWZwLTEsCisgICAgLTB4MS4yNTdiMjJlNzgwZjU2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzUKKyAgICAweDEuZTBjMDRhOTRlMTczMzVkMDczMDUyYTAzOTRiOWUxYzNwLTEsCisgICAgMHgxLjM4MzhiNDViNDE3MDFwMAorICB9LAorICB7IC8vIEVudHJ5IDc3NgorICAgIC0weDEuZTBjMDRhOTRlMTczMzVkMDczMDUyYTAzOTRiOWUxYzNwLTEsCisgICAgLTB4MS4zODM4YjQ1YjQxNzAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzcKKyAgICAweDEuZWM1ODgzYjdiNmNmNzBhNTc3ZGQ5MTYwZDBmOGU5ZDVwLTEsCisgICAgMHgxLjRhZjY0NWNmMDFlYWNwMAorICB9LAorICB7IC8vIEVudHJ5IDc3OAorICAgIC0weDEuZWM1ODgzYjdiNmNmNzBhNTc3ZGQ5MTYwZDBmOGU5ZDVwLTEsCisgICAgLTB4MS40YWY2NDVjZjAxZWFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzkKKyAgICAweDEuZjU0ZDk3MTg4MWFkODI2MjliZDg0ZDIxNDE5NGU4ZGRwLTEsCisgICAgMHgxLjVkYjNkNzQyYzI2NTdwMAorICB9LAorICB7IC8vIEVudHJ5IDc4MAorICAgIC0weDEuZjU0ZDk3MTg4MWFkODI2MjliZDg0ZDIxNDE5NGU4ZGRwLTEsCisgICAgLTB4MS41ZGIzZDc0MmMyNjU3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODEKKyAgICAweDEuZmI5MzNjNDAxMDdmZTgzZmQxNmMxNzg5ZTI3ZjY5ZjdwLTEsCisgICAgMHgxLjcwNzE2OGI2ODJlMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDc4MgorICAgIC0weDEuZmI5MzNjNDAxMDdmZTgzZmQxNmMxNzg5ZTI3ZjY5ZjdwLTEsCisgICAgLTB4MS43MDcxNjhiNjgyZTAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODMKKyAgICAweDEuZmYyMGQ5NjE2MjRlNzdkYWVmMzI5YjQwMjljMzYyZGVwLTEsCisgICAgMHgxLjgzMmVmYTJhNDM1YWRwMAorICB9LAorICB7IC8vIEVudHJ5IDc4NAorICAgIC0weDEuZmYyMGQ5NjE2MjRlNzdkYWVmMzI5YjQwMjljMzYyZGVwLTEsCisgICAgLTB4MS44MzJlZmEyYTQzNWFkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODUKKyAgICAweDEuZmZmMThmMjRmM2U0YjY5NTkyMjk0ZjIwNmQ3YjMyYzJwLTEsCisgICAgMHgxLjk1ZWM4YjllMDNkNThwMAorICB9LAorICB7IC8vIEVudHJ5IDc4NgorICAgIC0weDEuZmZmMThmMjRmM2U0YjY5NTkyMjk0ZjIwNmQ3YjMyYzJwLTEsCisgICAgLTB4MS45NWVjOGI5ZTAzZDU4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODcKKyAgICAweDEuZmUwNDNmNTczNjlkNmE1MmZhMzNmMDExOWVjNGRhMTlwLTEsCisgICAgMHgxLmE4YWExZDExYzQ0ZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDc4OAorICAgIC0weDEuZmUwNDNmNTczNjlkNmE1MmZhMzNmMDExOWVjNGRhMTlwLTEsCisgICAgLTB4MS5hOGFhMWQxMWM0NGZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODkKKyAgICAweDEuYjNkMzY5NWFjYzQxMzZiMmQ0NDcxNGY5YjM4NDE5YjRwLTEsCisgICAgMHgxLjA0YWZmNmQzMzA5NDJwMAorICB9LAorICB7IC8vIEVudHJ5IDc5MAorICAgIC0weDEuYjNkMzY5NWFjYzQxMzZiMmQ0NDcxNGY5YjM4NDE5YjRwLTEsCisgICAgLTB4MS4wNGFmZjZkMzMwOTQycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTEKKyAgICAweDEuYjNkNDE5NzJkYzgwNjM5OTRmNjM0MTNkNWU0ZDhlNGJwLTEsCisgICAgMHgxLjA0YjA5ZTk4ZGNkYjRwMAorICB9LAorICB7IC8vIEVudHJ5IDc5MgorICAgIC0weDEuYjNkNDE5NzJkYzgwNjM5OTRmNjM0MTNkNWU0ZDhlNGJwLTEsCisgICAgLTB4MS4wNGIwOWU5OGRjZGI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTMKKyAgICAweDEuYjNkNGM5OGEzMThmYjY2ZjgyMWQ3Mjg2YWU3ZGNlN2JwLTEsCisgICAgMHgxLjA0YjE0NjVlODkyMjZwMAorICB9LAorICB7IC8vIEVudHJ5IDc5NAorICAgIC0weDEuYjNkNGM5OGEzMThmYjY2ZjgyMWQ3Mjg2YWU3ZGNlN2JwLTEsCisgICAgLTB4MS4wNGIxNDY1ZTg5MjI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTUKKyAgICAweDEuYjNkNTc5YTBjYjZlZTM5M2ZmNzViNThmZmUxNmQxM2ZwLTEsCisgICAgMHgxLjA0YjFlZTI0MzU2OThwMAorICB9LAorICB7IC8vIEVudHJ5IDc5NgorICAgIC0weDEuYjNkNTc5YTBjYjZlZTM5M2ZmNzViNThmZmUxNmQxM2ZwLTEsCisgICAgLTB4MS4wNGIxZWUyNDM1Njk4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTcKKyAgICAweDEuYjNkNjI5YjZhYTFkOWY2NWFhZDFhMmZjOTMyYzhiY2JwLTEsCisgICAgMHgxLjA0YjI5NWU5ZTFiMGFwMAorICB9LAorICB7IC8vIEVudHJ5IDc5OAorICAgIC0weDEuYjNkNjI5YjZhYTFkOWY2NWFhZDFhMmZjOTMyYzhiY2JwLTEsCisgICAgLTB4MS4wNGIyOTVlOWUxYjBhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTkKKyAgICAweDEuYjNkNmQ5Y2JjZDliOWU0M2I3ZmM3ZmQ0MjhhNDRkZDhwLTEsCisgICAgMHgxLjA0YjMzZGFmOGRmN2NwMAorICB9LAorICB7IC8vIEVudHJ5IDgwMAorICAgIC0weDEuYjNkNmQ5Y2JjZDliOWU0M2I3ZmM3ZmQ0MjhhNDRkZDhwLTEsCisgICAgLTB4MS4wNGIzM2RhZjhkZjdjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDEKKyAgICAweDEuYjNkNzg5ZTAzNWU4OTQ4ZGFiMjc1ZGZlNTQ2YzViMDhwLTEsCisgICAgMHgxLjA0YjNlNTc1M2EzZWVwMAorICB9LAorICB7IC8vIEVudHJ5IDgwMgorICAgIC0weDEuYjNkNzg5ZTAzNWU4OTQ4ZGFiMjc1ZGZlNTQ2YzViMDhwLTEsCisgICAgLTB4MS4wNGIzZTU3NTNhM2VlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDMKKyAgICAweDEuYjNkODM5ZjNlMzA0MzZhMzU4ZTkzY2JkY2IyYmIzNjdwLTEsCisgICAgMHgxLjA0YjQ4ZDNhZTY4NjBwMAorICB9LAorICB7IC8vIEVudHJ5IDgwNAorICAgIC0weDEuYjNkODM5ZjNlMzA0MzZhMzU4ZTkzY2JkY2IyYmIzNjdwLTEsCisgICAgLTB4MS4wNGI0OGQzYWU2ODYwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDUKKyAgICAweDEuYjNkOGVhMDZkNGVlMDY4NGY1NzQxZWM3NzdlZDg4ZTBwLTEsCisgICAgMHgxLjA0YjUzNTAwOTJjY2ZwMAorICB9LAorICB7IC8vIEVudHJ5IDgwNgorICAgIC0weDEuYjNkOGVhMDZkNGVlMDY4NGY1NzQxZWM3NzdlZDg4ZTBwLTEsCisgICAgLTB4MS4wNGI1MzUwMDkyY2NmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDcKKyAgICAtMC4wLAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDgwOAorICAgIDAuMCwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDgwOQorICAgIC0wLjAsCisgICAgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDgxMAorICAgIDAuMCwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDgxMQorICAgIC0wLjAsCisgICAgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgODEyCisgICAgMHgxLjE3NzNkNTYxZmQ1MDY1ZDBlOTYwN2E3MjhhMzllZWQycC0xLAorICAgIDB4MS4yNzlhNzQ1OTAzMzFicC0xCisgIH0sCisgIHsgLy8gRW50cnkgODEzCisgICAgLTB4MS4xNzczZDU2MWZkNTA2NWQwZTk2MDdhNzI4YTM5ZWVkMnAtMSwKKyAgICAtMHgxLjI3OWE3NDU5MDMzMWJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTQKKyAgICAweDEuMTc3M2Q1NjFmZDUwNzMzOGZmOWMwODhkODBjNjgwZGJwLTEsCisgICAgMHgxLjI3OWE3NDU5MDMzMWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTUKKyAgICAtMHgxLjE3NzNkNTYxZmQ1MDczMzhmZjljMDg4ZDgwYzY4MGRicC0xLAorICAgIC0weDEuMjc5YTc0NTkwMzMxY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDgxNgorICAgIDB4MS4xNzczZDU2MWZkNTA4MGExMTVkNzk2YTg3NzBkMzVlZnAtMSwKKyAgICAweDEuMjc5YTc0NTkwMzMxZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDgxNworICAgIC0weDEuMTc3M2Q1NjFmZDUwODBhMTE1ZDc5NmE4NzcwZDM1ZWZwLTEsCisgICAgLTB4MS4yNzlhNzQ1OTAzMzFkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODE4CisgICAgMHgxLmY5NWI4ZTcxMDc0MThjMTFjOTRkNGE1NGE5ZGE5YjdhcC0xLAorICAgIDB4MS5iYjY3YWU4NTg0Y2E5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTkKKyAgICAtMHgxLmY5NWI4ZTcxMDc0MThjMTFjOTRkNGE1NGE5ZGE5YjdhcC0xLAorICAgIC0weDEuYmI2N2FlODU4NGNhOXAwCisgIH0sCisgIHsgLy8gRW50cnkgODIwCisgICAgMHgxLmY5NWI4ZTcxMDc0MTg2ZWU4MWQ1ZmY4OWQ4ZmFlNTQ1cC0xLAorICAgIDB4MS5iYjY3YWU4NTg0Y2FhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjEKKyAgICAtMHgxLmY5NWI4ZTcxMDc0MTg2ZWU4MWQ1ZmY4OWQ4ZmFlNTQ1cC0xLAorICAgIC0weDEuYmI2N2FlODU4NGNhYXAwCisgIH0sCisgIHsgLy8gRW50cnkgODIyCisgICAgMHgxLmY5NWI4ZTcxMDc0MTgxY2IzYTVlYjRiZjA2MjFkMzgxcC0xLAorICAgIDB4MS5iYjY3YWU4NTg0Y2FicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjMKKyAgICAtMHgxLmY5NWI4ZTcxMDc0MTgxY2IzYTVlYjRiZjA2MjFkMzgxcC0xLAorICAgIC0weDEuYmI2N2FlODU4NGNhYnAwCisgIH0sCisgIHsgLy8gRW50cnkgODI0CisgICAgMHgxLmIxZDgzMDUzMjE2MTVhYzkzOGNmZjAyYmU5ZjI1MDg1cC0yLAorICAgIDB4MS5iZmZmZmZmZmZmZmZmcC0yCisgIH0sCisgIHsgLy8gRW50cnkgODI1CisgICAgLTB4MS5iMWQ4MzA1MzIxNjE1YWM5MzhjZmYwMmJlOWYyNTA4NXAtMiwKKyAgICAtMHgxLmJmZmZmZmZmZmZmZmZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjYKKyAgICAweDEuYjFkODMwNTMyMTYxNjk0NzZmNGQxOTgyYjliMTRhYjFwLTIsCisgICAgMHgxLmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjcKKyAgICAtMHgxLmIxZDgzMDUzMjE2MTY5NDc2ZjRkMTk4MmI5YjE0YWIxcC0yLAorICAgIC0weDEuY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDgyOAorICAgIDB4MS5iMWQ4MzA1MzIxNjE3N2M1YTVjYTQyZDk4OTU1Mjc1YXAtMiwKKyAgICAweDEuYzAwMDAwMDAwMDAwMXAtMgorICB9LAorICB7IC8vIEVudHJ5IDgyOQorICAgIC0weDEuYjFkODMwNTMyMTYxNzdjNWE1Y2E0MmQ5ODk1NTI3NWFwLTIsCisgICAgLTB4MS5jMDAwMDAwMDAwMDAxcC0yCisgIH0sCisgIHsgLy8gRW50cnkgODMwCisgICAgMHgxLjQ0ZWIzODFjZjM4NjllYTcxY2NiMzY4NjNlNGVhNjVicC0xLAorICAgIDB4MS41ZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODMxCisgICAgLTB4MS40NGViMzgxY2YzODY5ZWE3MWNjYjM2ODYzZTRlYTY1YnAtMSwKKyAgICAtMHgxLjVmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzIKKyAgICAweDEuNDRlYjM4MWNmMzg2YWIwNGE0Zjg2NTZhYmVhODBiODNwLTEsCisgICAgMHgxLjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzMKKyAgICAtMHgxLjQ0ZWIzODFjZjM4NmFiMDRhNGY4NjU2YWJlYTgwYjgzcC0xLAorICAgIC0weDEuNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDgzNAorICAgIDB4MS40NGViMzgxY2YzODZiNzYyMmQyNTk0NGYzZWIwMzVkY3AtMSwKKyAgICAweDEuNjAwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDgzNQorICAgIC0weDEuNDRlYjM4MWNmMzg2Yjc2MjJkMjU5NDRmM2ViMDM1ZGNwLTEsCisgICAgLTB4MS42MDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODM2CisgICAgMHgxLmRhZDkwMmZhOGFjODY0ZmQ4YWZhMGJkYzYwOWRlZDE5cC0xLAorICAgIDB4MS4yZmZmZmZmZmZmZmZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzcKKyAgICAtMHgxLmRhZDkwMmZhOGFjODY0ZmQ4YWZhMGJkYzYwOWRlZDE5cC0xLAorICAgIC0weDEuMmZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgODM4CisgICAgMHgxLmRhZDkwMmZhOGFjODcwZjUyZjFiODQzYWM4M2JjM2VkcC0xLAorICAgIDB4MS4zcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzkKKyAgICAtMHgxLmRhZDkwMmZhOGFjODcwZjUyZjFiODQzYWM4M2JjM2VkcC0xLAorICAgIC0weDEuM3AwCisgIH0sCisgIHsgLy8gRW50cnkgODQwCisgICAgMHgxLmRhZDkwMmZhOGFjODdjZWNkMzNjZmM5OTJkZmVjMWJlcC0xLAorICAgIDB4MS4zMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDEKKyAgICAtMHgxLmRhZDkwMmZhOGFjODdjZWNkMzNjZmM5OTJkZmVjMWJlcC0xLAorICAgIC0weDEuMzAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgODQyCisgICAgMHgxLjRiNzA3YTdhY2RlY2Y5MGExODhkMDIzMGZhZDNhZDU4cC0xLAorICAgIDB4MS4zN2ZmZmZmZmZmZmZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDMKKyAgICAtMHgxLjRiNzA3YTdhY2RlY2Y5MGExODhkMDIzMGZhZDNhZDU4cC0xLAorICAgIC0weDEuMzdmZmZmZmZmZmZmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgODQ0CisgICAgMHgxLjRiNzA3YTdhY2RlY2M4NDIzOTQ2M2U3OGIzMTJmYTEwcC0xLAorICAgIDB4MS4zODBwMQorICB9LAorICB7IC8vIEVudHJ5IDg0NQorICAgIC0weDEuNGI3MDdhN2FjZGVjYzg0MjM5NDYzZTc4YjMxMmZhMTBwLTEsCisgICAgLTB4MS4zODBwMQorICB9LAorICB7IC8vIEVudHJ5IDg0NgorICAgIDB4MS40YjcwN2E3YWNkZWM5NzdhNTlmZjdhYzA2NjI0ODRkZHAtMSwKKyAgICAweDEuMzgwMDAwMDAwMDAwMXAxCisgIH0sCisgIHsgLy8gRW50cnkgODQ3CisgICAgLTB4MS40YjcwN2E3YWNkZWM5NzdhNTlmZjdhYzA2NjI0ODRkZHAtMSwKKyAgICAtMHgxLjM4MDAwMDAwMDAwMDFwMQorICB9LAorICB7IC8vIEVudHJ5IDg0OAorICAgIDB4MS4wNjZlN2ViNzZmNWM2Njc4ZmQ4MzI1YTgxZjE5MjVjNnAtNCwKKyAgICAweDEuMDY5YzhiNDZiMzc5MnAtNAorICB9LAorICB7IC8vIEVudHJ5IDg0OQorICAgIC0weDEuMDY2ZTdlYjc2ZjVjNjY3OGZkODMyNWE4MWYxOTI1YzZwLTQsCisgICAgLTB4MS4wNjljOGI0NmIzNzkycC00CisgIH0sCisgIHsgLy8gRW50cnkgODUwCisgICAgMHgxLjA1ZTQ3NjFhYjhkOGYwYTdkYmE4MzQwMDBmMjM2NjUwcC0zLAorICAgIDB4MS4wNjljOGI0NmIzNzkycC0zCisgIH0sCisgIHsgLy8gRW50cnkgODUxCisgICAgLTB4MS4wNWU0NzYxYWI4ZDhmMGE3ZGJhODM0MDAwZjIzNjY1MHAtMywKKyAgICAtMHgxLjA2OWM4YjQ2YjM3OTJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTIKKyAgICAweDEuODc3ZTJjZDRmNmZkOWJhNDk4ZTMyNzA1MzAzMjczNGZwLTMsCisgICAgMHgxLjg5ZWFkMGVhMGQzNWJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTMKKyAgICAtMHgxLjg3N2UyY2Q0ZjZmZDliYTQ5OGUzMjcwNTMwMzI3MzRmcC0zLAorICAgIC0weDEuODllYWQwZWEwZDM1YnAtMworICB9LAorICB7IC8vIEVudHJ5IDg1NAorICAgIDB4MS4wM2JlMDZmOTdjYmVlNDc2OTg1MzlmOTc3Y2FkYmU3ZXAtMiwKKyAgICAweDEuMDY5YzhiNDZiMzc5MnAtMgorICB9LAorICB7IC8vIEVudHJ5IDg1NQorICAgIC0weDEuMDNiZTA2Zjk3Y2JlZTQ3Njk4NTM5Zjk3N2NhZGJlN2VwLTIsCisgICAgLTB4MS4wNjljOGI0NmIzNzkycC0yCisgIH0sCisgIHsgLy8gRW50cnkgODU2CisgICAgMHgxLjQyYWJiYThjNzJmYmI4Y2E5NmY3OWFhNGJiMDM1ODRlcC0yLAorICAgIDB4MS40ODQzYWUxODYwNTc2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgODU3CisgICAgLTB4MS40MmFiYmE4YzcyZmJiOGNhOTZmNzlhYTRiYjAzNTg0ZXAtMiwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1NzZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTgKKyAgICAweDEuODA0NWZlNjRlNjJkYzNkNjg2ZDk3NmQ3ZDVhN2M2ODlwLTIsCisgICAgMHgxLjg5ZWFkMGVhMGQzNWFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTkKKyAgICAtMHgxLjgwNDVmZTY0ZTYyZGMzZDY4NmQ5NzZkN2Q1YTdjNjg5cC0yLAorICAgIC0weDEuODllYWQwZWEwZDM1YXAtMgorICB9LAorICB7IC8vIEVudHJ5IDg2MAorICAgIDB4MS5iYzRjMDRkNzFhYmJlZWE1YWIwNjRlY2ZiZjU0YzYxM3AtMiwKKyAgICAweDEuY2I5MWYzYmJiYTEzZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDg2MQorICAgIC0weDEuYmM0YzA0ZDcxYWJiZWVhNWFiMDY0ZWNmYmY1NGM2MTNwLTIsCisgICAgLTB4MS5jYjkxZjNiYmJhMTNlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgODYyCisgICAgMHgxLmY2N2VhOTc1Yjg2YTAxNTEwZTZiZGUzNzc4MTM4OTM0cC0yLAorICAgIDB4MS4wNjljOGI0NmIzNzkxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODYzCisgICAgLTB4MS5mNjdlYTk3NWI4NmEwMTUxMGU2YmRlMzc3ODEzODkzNHAtMiwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3OTFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjQKKyAgICAweDEuMTc1MDU5YmYwZDQyNTI0ZWNiMGJmNDI0M2I1NTk3M2RwLTEsCisgICAgMHgxLjI3NzAxY2FmODllODNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjUKKyAgICAtMHgxLjE3NTA1OWJmMGQ0MjUyNGVjYjBiZjQyNDNiNTU5NzNkcC0xLAorICAgIC0weDEuMjc3MDFjYWY4OWU4M3AtMQorICB9LAorICB7IC8vIEVudHJ5IDg2NgorICAgIDB4MS4zMjNiOGIxZmI0YmEyMWRkMTJjY2U4MjBlMTU2YTRmY3AtMSwKKyAgICAweDEuNDg0M2FlMTg2MDU3NXAtMQorICB9LAorICB7IC8vIEVudHJ5IDg2NworICAgIC0weDEuMzIzYjhiMWZiNGJhMjFkZDEyY2NlODIwZTE1NmE0ZmNwLTEsCisgICAgLTB4MS40ODQzYWUxODYwNTc1cC0xCisgIH0sCisgIHsgLy8gRW50cnkgODY4CisgICAgMHgxLjRiZTQ5NzljNWVmYjMwNmMxYTc3MDI0MDMyODQ5YjUycC0xLAorICAgIDB4MS42OTE3M2Y4MTM2YzY3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgODY5CisgICAgLTB4MS40YmU0OTc5YzVlZmIzMDZjMWE3NzAyNDAzMjg0OWI1MnAtMSwKKyAgICAtMHgxLjY5MTczZjgxMzZjNjdwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzAKKyAgICAweDEuNjQzMDgwZDY3YWNjMTMzMmM2NGE4NTYxMmNhY2FmYjlwLTEsCisgICAgMHgxLjg5ZWFkMGVhMGQzNTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzEKKyAgICAtMHgxLjY0MzA4MGQ2N2FjYzEzMzJjNjRhODU2MTJjYWNhZmI5cC0xLAorICAgIC0weDEuODllYWQwZWEwZDM1OXAtMQorICB9LAorICB7IC8vIEVudHJ5IDg3MgorICAgIDB4MS43YjA1YjdiNmM2MTJlNWIwOGQ1ZWZlNDlhNDZlMjFhMXAtMSwKKyAgICAweDEuYWFiZTYyNTJlM2E0YnAtMQorICB9LAorICB7IC8vIEVudHJ5IDg3MworICAgIC0weDEuN2IwNWI3YjZjNjEyZTViMDhkNWVmZTQ5YTQ2ZTIxYTFwLTEsCisgICAgLTB4MS5hYWJlNjI1MmUzYTRicC0xCisgIH0sCisgIHsgLy8gRW50cnkgODc0CisgICAgMHgxLjkwNGMzNzUwNWRlNDhmYThlNzYyODc5NjBmZDQ0NTk0cC0xLAorICAgIDB4MS5jYjkxZjNiYmJhMTNkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODc1CisgICAgLTB4MS45MDRjMzc1MDVkZTQ4ZmE4ZTc2Mjg3OTYwZmQ0NDU5NHAtMSwKKyAgICAtMHgxLmNiOTFmM2JiYmExM2RwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzYKKyAgICAweDEuYTNlZDllMjUyOTM4YTE0Yzc5YzU3NTYzOWMxNWE5MWRwLTEsCisgICAgMHgxLmVjNjU4NTI0OTA4MmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzcKKyAgICAtMHgxLmEzZWQ5ZTI1MjkzOGExNGM3OWM1NzU2MzljMTVhOTFkcC0xLAorICAgIC0weDEuZWM2NTg1MjQ5MDgyZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDg3OAorICAgIDB4MS5iNWQ1NDViMTA5YmY5MzU1OTQwMzY3OThjZjQwYzliMHAtMSwKKyAgICAweDEuMDY5YzhiNDZiMzc5MXAwCisgIH0sCisgIHsgLy8gRW50cnkgODc5CisgICAgLTB4MS5iNWQ1NDViMTA5YmY5MzU1OTQwMzY3OThjZjQwYzliMHAtMSwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3OTFwMAorICB9LAorICB7IC8vIEVudHJ5IDg4MAorICAgIDB4MS5jNWYwNTgyMzBlN2ZkMTRkM2U1ZTMxNTM0OWY2OTllZnAtMSwKKyAgICAweDEuMTcwNjUzZmIxZWIwYXAwCisgIH0sCisgIHsgLy8gRW50cnkgODgxCisgICAgLTB4MS5jNWYwNTgyMzBlN2ZkMTRkM2U1ZTMxNTM0OWY2OTllZnAtMSwKKyAgICAtMHgxLjE3MDY1M2ZiMWViMGFwMAorICB9LAorICB7IC8vIEVudHJ5IDg4MgorICAgIDB4MS5kNDJkZTQyZGNlMTM0NmEwM2QxZjZhYmYwZWJhOTAyMnAtMSwKKyAgICAweDEuMjc3MDFjYWY4OWU4M3AwCisgIH0sCisgIHsgLy8gRW50cnkgODgzCisgICAgLTB4MS5kNDJkZTQyZGNlMTM0NmEwM2QxZjZhYmYwZWJhOTAyMnAtMSwKKyAgICAtMHgxLjI3NzAxY2FmODllODNwMAorICB9LAorICB7IC8vIEVudHJ5IDg4NAorICAgIDB4MS5lMDdlZWVkYTEwOWNiNTA0YWZjY2E4NjBkNGI1ZGQzMnAtMSwKKyAgICAweDEuMzdkOWU1NjNmNTFmY3AwCisgIH0sCisgIHsgLy8gRW50cnkgODg1CisgICAgLTB4MS5lMDdlZWVkYTEwOWNiNTA0YWZjY2E4NjBkNGI1ZGQzMnAtMSwKKyAgICAtMHgxLjM3ZDllNTYzZjUxZmNwMAorICB9LAorICB7IC8vIEVudHJ5IDg4NgorICAgIDB4MS5lYWQ2ODM0OTA5YjkzMzcxZmFmM2JlYWRkYmQ2MGVkZHAtMSwKKyAgICAweDEuNDg0M2FlMTg2MDU3NXAwCisgIH0sCisgIHsgLy8gRW50cnkgODg3CisgICAgLTB4MS5lYWQ2ODM0OTA5YjkzMzcxZmFmM2JlYWRkYmQ2MGVkZHAtMSwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1NzVwMAorICB9LAorICB7IC8vIEVudHJ5IDg4OAorICAgIDB4MS5mMzI5YzA1NThlOTY3ZTRjYWI1OGQwZmE1NzJkNjJkMnAtMSwKKyAgICAweDEuNThhZDc2Y2NjYjhlZXAwCisgIH0sCisgIHsgLy8gRW50cnkgODg5CisgICAgLTB4MS5mMzI5YzA1NThlOTY3ZTRjYWI1OGQwZmE1NzJkNjJkMnAtMSwKKyAgICAtMHgxLjU4YWQ3NmNjY2I4ZWVwMAorICB9LAorICB7IC8vIEVudHJ5IDg5MAorICAgIDB4MS5mOTZmZTQwNWYxYWM1ZGM5Y2YzNDM1MDgwNjdiZmNhZXAtMSwKKyAgICAweDEuNjkxNzNmODEzNmM2N3AwCisgIH0sCisgIHsgLy8gRW50cnkgODkxCisgICAgLTB4MS5mOTZmZTQwNWYxYWM1ZGM5Y2YzNDM1MDgwNjdiZmNhZXAtMSwKKyAgICAtMHgxLjY5MTczZjgxMzZjNjdwMAorICB9LAorICB7IC8vIEVudHJ5IDg5MgorICAgIDB4MS5mZGEyNTRjMjdhMDFmNDc4NmMxNDlkNmE3Nzc5Y2MzYXAtMSwKKyAgICAweDEuNzk4MTA4MzVhMWZlMHAwCisgIH0sCisgIHsgLy8gRW50cnkgODkzCisgICAgLTB4MS5mZGEyNTRjMjdhMDFmNDc4NmMxNDlkNmE3Nzc5Y2MzYXAtMSwKKyAgICAtMHgxLjc5ODEwODM1YTFmZTBwMAorICB9LAorICB7IC8vIEVudHJ5IDg5NAorICAgIDB4MS5mZmJjYTg0NmM0ZmM5OTdmMWEzODE0MjAyMDg4ODRlMHAtMSwKKyAgICAweDEuODllYWQwZWEwZDM1OXAwCisgIH0sCisgIHsgLy8gRW50cnkgODk1CisgICAgLTB4MS5mZmJjYTg0NmM0ZmM5OTdmMWEzODE0MjAyMDg4ODRlMHAtMSwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzNTlwMAorICB9LAorICB7IC8vIEVudHJ5IDg5NgorICAgIDB4MS5mZmJjYTg0NmM0ZmM5ZjMwYmZiNDU4ZWYyMDkxYzhlZXAtMSwKKyAgICAweDEuOWE1NDk5OWU3ODZkMnAwCisgIH0sCisgIHsgLy8gRW50cnkgODk3CisgICAgLTB4MS5mZmJjYTg0NmM0ZmM5ZjMwYmZiNDU4ZWYyMDkxYzhlZXAtMSwKKyAgICAtMHgxLjlhNTQ5OTllNzg2ZDJwMAorICB9LAorICB7IC8vIEVudHJ5IDg5OAorICAgIDB4MS5mZGEyNTRjMjdhMDIwNTg3NWYyNzE0MzVmODI3MTYwY3AtMSwKKyAgICAweDEuYWFiZTYyNTJlM2E0YnAwCisgIH0sCisgIHsgLy8gRW50cnkgODk5CisgICAgLTB4MS5mZGEyNTRjMjdhMDIwNTg3NWYyNzE0MzVmODI3MTYwY3AtMSwKKyAgICAtMHgxLmFhYmU2MjUyZTNhNGJwMAorICB9LAorICB7IC8vIEVudHJ5IDkwMAorICAgIDB4MS5mOTZmZTQwNWYxYWM3YTI0MWUwMmU1OGIwY2JmM2FlN3AtMSwKKyAgICAweDEuYmIyODJiMDc0ZWRjNHAwCisgIH0sCisgIHsgLy8gRW50cnkgOTAxCisgICAgLTB4MS5mOTZmZTQwNWYxYWM3YTI0MWUwMmU1OGIwY2JmM2FlN3AtMSwKKyAgICAtMHgxLmJiMjgyYjA3NGVkYzRwMAorICB9LAorICB7IC8vIEVudHJ5IDkwMgorICAgIDB4MS5mMzI5YzA1NThlOTZhNWQ0ODI3MmFkNGM0OWVjNTNiOHAtMSwKKyAgICAweDEuY2I5MWYzYmJiYTEzZHAwCisgIH0sCisgIHsgLy8gRW50cnkgOTAzCisgICAgLTB4MS5mMzI5YzA1NThlOTZhNWQ0ODI3MmFkNGM0OWVjNTNiOHAtMSwKKyAgICAtMHgxLmNiOTFmM2JiYmExM2RwMAorICB9LAorICB7IC8vIEVudHJ5IDkwNAorICAgIDB4MS5lYWQ2ODM0OTA5Yjk2NWZkYzRiMGNlZmZjMGYyODVjNnAtMSwKKyAgICAweDEuZGJmYmJjNzAyNTRiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgOTA1CisgICAgLTB4MS5lYWQ2ODM0OTA5Yjk2NWZkYzRiMGNlZmZjMGYyODVjNnAtMSwKKyAgICAtMHgxLmRiZmJiYzcwMjU0YjZwMAorICB9LAorICB7IC8vIEVudHJ5IDkwNgorICAgIDB4MS5lMDdlZWVkYTEwOWNmMjVmNDAwY2Q1ZjQ2YWNlYzg4N3AtMSwKKyAgICAweDEuZWM2NTg1MjQ5MDgyZnAwCisgIH0sCisgIHsgLy8gRW50cnkgOTA3CisgICAgLTB4MS5lMDdlZWVkYTEwOWNmMjVmNDAwY2Q1ZjQ2YWNlYzg4N3AtMSwKKyAgICAtMHgxLmVjNjU4NTI0OTA4MmZwMAorICB9LAorICB7IC8vIEVudHJ5IDkwOAorICAgIDB4MS5kNDJkZTQyZGNlMTM4ZTg5MDkzOWU1NmM0MzlkZWQ5MHAtMSwKKyAgICAweDEuZmNjZjRkZDhmYmJhOHAwCisgIH0sCisgIHsgLy8gRW50cnkgOTA5CisgICAgLTB4MS5kNDJkZTQyZGNlMTM4ZTg5MDkzOWU1NmM0MzlkZWQ5MHAtMSwKKyAgICAtMHgxLmZjY2Y0ZGQ4ZmJiYThwMAorICB9LAorICB7IC8vIEVudHJ5IDkxMAorICAgIDB4MS5jNWYwNTgyMzBlODAxNGFiODNlY2UwYzNhNjM4YzA3OXAtMSwKKyAgICAweDEuMDY5YzhiNDZiMzc5MXAxCisgIH0sCisgIHsgLy8gRW50cnkgOTExCisgICAgLTB4MS5jNWYwNTgyMzBlODAxNGFiODNlY2UwYzNhNjM4YzA3OXAtMSwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3OTFwMQorICB9LAorICB7IC8vIEVudHJ5IDkxMgorICAgIDB4MS5iNWQ1NDViMTA5YmZjZTNmYzRkNzcwMDFhZmUyZjJiNnAtMSwKKyAgICAweDEuMGVkMTZmYTBlOTE0ZXAxCisgIH0sCisgIHsgLy8gRW50cnkgOTEzCisgICAgLTB4MS5iNWQ1NDViMTA5YmZjZTNmYzRkNzcwMDFhZmUyZjJiNnAtMSwKKyAgICAtMHgxLjBlZDE2ZmEwZTkxNGVwMQorICB9LAorICB7IC8vIEVudHJ5IDkxNAorICAgIDB4MS5hM2VkOWUyNTI5MzhkOTJhNTU1M2IzYzA5ZDJiZGRkM3AtMSwKKyAgICAweDEuMTcwNjUzZmIxZWIwYnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTE1CisgICAgLTB4MS5hM2VkOWUyNTI5MzhkOTJhNTU1M2IzYzA5ZDJiZGRkM3AtMSwKKyAgICAtMHgxLjE3MDY1M2ZiMWViMGJwMQorICB9LAorICB7IC8vIEVudHJ5IDkxNgorICAgIDB4MS45MDRjMzc1MDVkZTRiODk3NWRkMjczMGUxOTZkZGZjM3AtMSwKKyAgICAweDEuMWYzYjM4NTU1NDRjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTE3CisgICAgLTB4MS45MDRjMzc1MDVkZTRiODk3NWRkMjczMGUxOTZkZGZjM3AtMSwKKyAgICAtMHgxLjFmM2IzODU1NTQ0YzhwMQorICB9LAorICB7IC8vIEVudHJ5IDkxOAorICAgIDB4MS43YjA1YjdiNmM2MTJmYzRmZGEzODEyYjFmMTM0ODM4OXAtMSwKKyAgICAweDEuMjc3MDFjYWY4OWU4NXAxCisgIH0sCisgIHsgLy8gRW50cnkgOTE5CisgICAgLTB4MS43YjA1YjdiNmM2MTJmYzRmZGEzODEyYjFmMTM0ODM4OXAtMSwKKyAgICAtMHgxLjI3NzAxY2FmODllODVwMQorICB9LAorICB7IC8vIEVudHJ5IDkyMAorICAgIDB4MS42NDMwODBkNjdhY2MxNDYyMDY3MmRkYTYyNDFlYTMwNXAtMSwKKyAgICAweDEuMmZhNTAxMDliZjg0MnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTIxCisgICAgLTB4MS42NDMwODBkNjdhY2MxNDYyMDY3MmRkYTYyNDFlYTMwNXAtMSwKKyAgICAtMHgxLjJmYTUwMTA5YmY4NDJwMQorICB9LAorICB7IC8vIEVudHJ5IDkyMgorICAgIDB4MS40YmU0OTc5YzVlZmIxOTRmYzgyYWMzNjdmZWRmOTNiY3AtMSwKKyAgICAweDEuMzdkOWU1NjNmNTFmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTIzCisgICAgLTB4MS40YmU0OTc5YzVlZmIxOTRmYzgyYWMzNjdmZWRmOTNiY3AtMSwKKyAgICAtMHgxLjM3ZDllNTYzZjUxZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDkyNAorICAgIDB4MS4zMjNiOGIxZmI0YjllZmU1MDc1ZWRlODA0OWE4NWMzZHAtMSwKKyAgICAweDEuNDAwZWM5YmUyYWJiY3AxCisgIH0sCisgIHsgLy8gRW50cnkgOTI1CisgICAgLTB4MS4zMjNiOGIxZmI0YjllZmU1MDc1ZWRlODA0OWE4NWMzZHAtMSwKKyAgICAtMHgxLjQwMGVjOWJlMmFiYmNwMQorICB9LAorICB7IC8vIEVudHJ5IDkyNgorICAgIDB4MS4xNzUwNTliZjBkNDIwMzNiYmNmNTk4Yzg4YjE3NmU2MXAtMSwKKyAgICAweDEuNDg0M2FlMTg2MDU3OXAxCisgIH0sCisgIHsgLy8gRW50cnkgOTI3CisgICAgLTB4MS4xNzUwNTliZjBkNDIwMzNiYmNmNTk4Yzg4YjE3NmU2MXAtMSwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1NzlwMQorICB9LAorICB7IC8vIEVudHJ5IDkyOAorICAgIDB4MS5mNjdlYTk3NWI4NjkyNTIxZjc3ZDY3NTRiMzAyYzVjNHAtMiwKKyAgICAweDEuNTA3ODkyNzI5NWYzNnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTI5CisgICAgLTB4MS5mNjdlYTk3NWI4NjkyNTIxZjc3ZDY3NTRiMzAyYzVjNHAtMiwKKyAgICAtMHgxLjUwNzg5MjcyOTVmMzZwMQorICB9LAorICB7IC8vIEVudHJ5IDkzMAorICAgIDB4MS5iYzRjMDRkNzFhYmFkMTRlZmMyOWE2NjM0MmFkYTcyM3AtMiwKKyAgICAweDEuNThhZDc2Y2NjYjhmM3AxCisgIH0sCisgIHsgLy8gRW50cnkgOTMxCisgICAgLTB4MS5iYzRjMDRkNzFhYmFkMTRlZmMyOWE2NjM0MmFkYTcyM3AtMiwKKyAgICAtMHgxLjU4YWQ3NmNjY2I4ZjNwMQorICB9LAorICB7IC8vIEVudHJ5IDkzMgorICAgIDB4MS44MDQ1ZmU2NGU2MmM2MmY1N2YwNzdlYTI1MWUyZjJkY3AtMiwKKyAgICAweDEuNjBlMjViMjcwMTJiMHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTMzCisgICAgLTB4MS44MDQ1ZmU2NGU2MmM2MmY1N2YwNzdlYTI1MWUyZjJkY3AtMiwKKyAgICAtMHgxLjYwZTI1YjI3MDEyYjBwMQorICB9LAorICB7IC8vIEVudHJ5IDkzNAorICAgIDB4MS40MmFiYmE4YzcyZmExMmJlOTIwYjMxNjYyNzUxMmU0MXAtMiwKKyAgICAweDEuNjkxNzNmODEzNmM2ZHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTM1CisgICAgLTB4MS40MmFiYmE4YzcyZmExMmJlOTIwYjMxNjYyNzUxMmU0MXAtMiwKKyAgICAtMHgxLjY5MTczZjgxMzZjNmRwMQorICB9LAorICB7IC8vIEVudHJ5IDkzNgorICAgIDB4MS4wM2JlMDZmOTdjYmNmODY2MDIxZTVhNWM2MmM2YjA3ZXAtMiwKKyAgICAweDEuNzE0YzIzZGI2YzYyYXAxCisgIH0sCisgIHsgLy8gRW50cnkgOTM3CisgICAgLTB4MS4wM2JlMDZmOTdjYmNmODY2MDIxZTVhNWM2MmM2YjA3ZXAtMiwKKyAgICAtMHgxLjcxNGMyM2RiNmM2MmFwMQorICB9LAorICB7IC8vIEVudHJ5IDkzOAorICAgIDB4MS44NzdlMmNkNGY2Zjk0NzEwZjI3NzY3NzViMDFjNzNkYnAtMywKKyAgICAweDEuNzk4MTA4MzVhMWZlN3AxCisgIH0sCisgIHsgLy8gRW50cnkgOTM5CisgICAgLTB4MS44NzdlMmNkNGY2Zjk0NzEwZjI3NzY3NzViMDFjNzNkYnAtMywKKyAgICAtMHgxLjc5ODEwODM1YTFmZTdwMQorICB9LAorICB7IC8vIEVudHJ5IDk0MAorICAgIDB4MS4wNWU0NzYxYWI4ZDQyMTcxOTU2NzcxN2Y3NjcxMjg2N3AtMywKKyAgICAweDEuODFiNWVjOGZkNzlhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTQxCisgICAgLTB4MS4wNWU0NzYxYWI4ZDQyMTcxOTU2NzcxN2Y3NjcxMjg2N3AtMywKKyAgICAtMHgxLjgxYjVlYzhmZDc5YTRwMQorICB9LAorICB7IC8vIEVudHJ5IDk0MgorICAgIDB4MS4wNjZlN2ViNzZmNWRkMmVhMTliNjk5MWU4YTFhMzYzNHAtNCwKKyAgICAweDEuODllYWQwZWEwZDM1YnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTQzCisgICAgLTB4MS4wNjZlN2ViNzZmNWRkMmVhMTliNjk5MWU4YTFhMzYzNHAtNCwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzNWJwMQorICB9LAorICB7IC8vIEVudHJ5IDk0NAorICAgIDB4MS4wM2JlMDZmOTdjYmYwOWNjMGJhZGJkYWU4MDNkN2I0ZXAtMiwKKyAgICAtMHgxLjgxYjVlYzhmZDc5OWZwMgorICB9LAorICB7IC8vIEVudHJ5IDk0NQorICAgIC0weDEuMDNiZTA2Zjk3Y2JmMDljYzBiYWRiZGFlODAzZDdiNGVwLTIsCisgICAgMHgxLjgxYjVlYzhmZDc5OWZwMgorICB9LAorICB7IC8vIEVudHJ5IDk0NgorICAgIDB4MS5mNjdlYTk3NWI4NmEyMmYyMzQ4Nzc4ODI0Zjk1ZDg0YXAtMiwKKyAgICAtMHgxLjcxNGMyM2RiNmM2MjZwMgorICB9LAorICB7IC8vIEVudHJ5IDk0NworICAgIC0weDEuZjY3ZWE5NzViODZhMjJmMjM0ODc3ODgyNGY5NWQ4NGFwLTIsCisgICAgMHgxLjcxNGMyM2RiNmM2MjZwMgorICB9LAorICB7IC8vIEVudHJ5IDk0OAorICAgIDB4MS42NDMwODBkNjdhY2MyMTBmYTI3ZTkyNDdhODI4NjIyMHAtMSwKKyAgICAtMHgxLjYwZTI1YjI3MDEyYWRwMgorICB9LAorICB7IC8vIEVudHJ5IDk0OQorICAgIC0weDEuNjQzMDgwZDY3YWNjMjEwZmEyN2U5MjQ3YTgyODYyMjBwLTEsCisgICAgMHgxLjYwZTI1YjI3MDEyYWRwMgorICB9LAorICB7IC8vIEVudHJ5IDk1MAorICAgIDB4MS5iNWQ1NDViMTA5YmY5NTBiNDE5NzAyOTcyYjk0ZjhmYXAtMSwKKyAgICAtMHgxLjUwNzg5MjcyOTVmMzRwMgorICB9LAorICB7IC8vIEVudHJ5IDk1MQorICAgIC0weDEuYjVkNTQ1YjEwOWJmOTUwYjQxOTcwMjk3MmI5NGY4ZmFwLTEsCisgICAgMHgxLjUwNzg5MjcyOTVmMzRwMgorICB9LAorICB7IC8vIEVudHJ5IDk1MgorICAgIDB4MS5lYWQ2ODM0OTA5YjkzNDYyMzRkYmI2MDFkMDQ4NmNmMnAtMSwKKyAgICAtMHgxLjQwMGVjOWJlMmFiYmJwMgorICB9LAorICB7IC8vIEVudHJ5IDk1MworICAgIC0weDEuZWFkNjgzNDkwOWI5MzQ2MjM0ZGJiNjAxZDA0ODZjZjJwLTEsCisgICAgMHgxLjQwMGVjOWJlMmFiYmJwMgorICB9LAorICB7IC8vIEVudHJ5IDk1NAorICAgIDB4MS5mZmJjYTg0NmM0ZmM5OTlhMjlkYzFkNmIyZDdjYjQxM3AtMSwKKyAgICAtMHgxLjJmYTUwMTA5YmY4NDJwMgorICB9LAorICB7IC8vIEVudHJ5IDk1NQorICAgIC0weDEuZmZiY2E4NDZjNGZjOTk5YTI5ZGMxZDZiMmQ3Y2I0MTNwLTEsCisgICAgMHgxLjJmYTUwMTA5YmY4NDJwMgorICB9LAorICB7IC8vIEVudHJ5IDk1NgorICAgIDB4MS5mMzI5YzA1NThlOTZhNTE4YTJhZjNhZTc4MDBhNWI2NXAtMSwKKyAgICAtMHgxLjFmM2IzODU1NTQ0YzlwMgorICB9LAorICB7IC8vIEVudHJ5IDk1NworICAgIC0weDEuZjMyOWMwNTU4ZTk2YTUxOGEyYWYzYWU3ODAwYTViNjVwLTEsCisgICAgMHgxLjFmM2IzODU1NTQ0YzlwMgorICB9LAorICB7IC8vIEVudHJ5IDk1OAorICAgIDB4MS5jNWYwNTgyMzBlODAyMWYyMWJkMGFjMmMwZjY4MDlhOXAtMSwKKyAgICAtMHgxLjBlZDE2ZmEwZTkxNTBwMgorICB9LAorICB7IC8vIEVudHJ5IDk1OQorICAgIC0weDEuYzVmMDU4MjMwZTgwMjFmMjFiZDBhYzJjMGY2ODA5YTlwLTEsCisgICAgMHgxLjBlZDE2ZmEwZTkxNTBwMgorICB9LAorICB7IC8vIEVudHJ5IDk2MAorICAgIDB4MS43YjA1YjdiNmM2MTM2NWE5YWM5ZTkwOGI4ZTVkM2NlNHAtMSwKKyAgICAtMHgxLmZjY2Y0ZGQ4ZmJiYWVwMQorICB9LAorICB7IC8vIEVudHJ5IDk2MQorICAgIC0weDEuN2IwNWI3YjZjNjEzNjVhOWFjOWU5MDhiOGU1ZDNjZTRwLTEsCisgICAgMHgxLmZjY2Y0ZGQ4ZmJiYWVwMQorICB9LAorICB7IC8vIEVudHJ5IDk2MgorICAgIDB4MS4xNzUwNTliZjBkNDJmMWQ2YjM5MWYwN2Y5NmYyMzUzZHAtMSwKKyAgICAtMHgxLmRiZmJiYzcwMjU0YmNwMQorICB9LAorICB7IC8vIEVudHJ5IDk2MworICAgIC0weDEuMTc1MDU5YmYwZDQyZjFkNmIzOTFmMDdmOTZmMjM1M2RwLTEsCisgICAgMHgxLmRiZmJiYzcwMjU0YmNwMQorICB9LAorICB7IC8vIEVudHJ5IDk2NAorICAgIDB4MS40MmFiYmE4YzcyZmQyMjE5NDc5MzI0NmI4ZDE5OTYwYXAtMiwKKyAgICAtMHgxLmJiMjgyYjA3NGVkY2FwMQorICB9LAorICB7IC8vIEVudHJ5IDk2NQorICAgIC0weDEuNDJhYmJhOGM3MmZkMjIxOTQ3OTMyNDZiOGQxOTk2MGFwLTIsCisgICAgMHgxLmJiMjgyYjA3NGVkY2FwMQorICB9LAorICB7IC8vIEVudHJ5IDk2NgorICAgIDB4MS4wNjZlN2ViNzZmNjJiNWY0NTYzZGUyNmRjYTg5MDAxN3AtNCwKKyAgICAtMHgxLjlhNTQ5OTllNzg2ZDhwMQorICB9LAorICB7IC8vIEVudHJ5IDk2NworICAgIC0weDEuMDY2ZTdlYjc2ZjYyYjVmNDU2M2RlMjZkY2E4OTAwMTdwLTQsCisgICAgMHgxLjlhNTQ5OTllNzg2ZDhwMQorICB9LAorICB7IC8vIEVudHJ5IDk2OAorICAgIC0weDEuODc3ZTJjZDRmNmZhNDI1ODY4NzVjNTI1MGExNjllNDhwLTMsCisgICAgLTB4MS43OTgxMDgzNWExZmU2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjkKKyAgICAweDEuODc3ZTJjZDRmNmZhNDI1ODY4NzVjNTI1MGExNjllNDhwLTMsCisgICAgMHgxLjc5ODEwODM1YTFmZTZwMQorICB9LAorICB7IC8vIEVudHJ5IDk3MAorICAgIC0weDEuYmM0YzA0ZDcxYWJhNWRmYzA5ODI3OGYxNjhiYmQ5NjJwLTIsCisgICAgLTB4MS41OGFkNzZjY2NiOGY0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzEKKyAgICAweDEuYmM0YzA0ZDcxYWJhNWRmYzA5ODI3OGYxNjhiYmQ5NjJwLTIsCisgICAgMHgxLjU4YWQ3NmNjY2I4ZjRwMQorICB9LAorICB7IC8vIEVudHJ5IDk3MgorICAgIC0weDEuNGJlNDk3OWM1ZWZhODcxZDMwYWUxY2ZhNjYzODkxOTlwLTEsCisgICAgLTB4MS4zN2Q5ZTU2M2Y1MjAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzMKKyAgICAweDEuNGJlNDk3OWM1ZWZhODcxZDMwYWUxY2ZhNjYzODkxOTlwLTEsCisgICAgMHgxLjM3ZDllNTYzZjUyMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDk3NAorICAgIC0weDEuYTNlZDllMjUyOTM4MjIxNjg5NThjY2UxZTA5ZjdjMTFwLTEsCisgICAgLTB4MS4xNzA2NTNmYjFlYjEwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzUKKyAgICAweDEuYTNlZDllMjUyOTM4MjIxNjg5NThjY2UxZTA5ZjdjMTFwLTEsCisgICAgMHgxLjE3MDY1M2ZiMWViMTBwMQorICB9LAorICB7IC8vIEVudHJ5IDk3NgorICAgIC0weDEuZTA3ZWVlZGExMDljNjJiMzQwZGMzNmU5MjE2OTY0OGRwLTEsCisgICAgLTB4MS5lYzY1ODUyNDkwODNjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzcKKyAgICAweDEuZTA3ZWVlZGExMDljNjJiMzQwZGMzNmU5MjE2OTY0OGRwLTEsCisgICAgMHgxLmVjNjU4NTI0OTA4M2NwMAorICB9LAorICB7IC8vIEVudHJ5IDk3OAorICAgIC0weDEuZmRhMjU0YzI3YTAxZGQ5NTRkYjNhZWE1MDVlNDk0NTNwLTEsCisgICAgLTB4MS5hYWJlNjI1MmUzYTU4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzkKKyAgICAweDEuZmRhMjU0YzI3YTAxZGQ5NTRkYjNhZWE1MDVlNDk0NTNwLTEsCisgICAgMHgxLmFhYmU2MjUyZTNhNThwMAorICB9LAorICB7IC8vIEVudHJ5IDk4MAorICAgIC0weDEuZjk2ZmU0MDVmMWFjYTAyZThmNGZkNDMzZTU5YWE5NzNwLTEsCisgICAgLTB4MS42OTE3M2Y4MTM2Yzc0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODEKKyAgICAweDEuZjk2ZmU0MDVmMWFjYTAyZThmNGZkNDMzZTU5YWE5NzNwLTEsCisgICAgMHgxLjY5MTczZjgxMzZjNzRwMAorICB9LAorICB7IC8vIEVudHJ5IDk4MgorICAgIC0weDEuZDQyZGU0MmRjZTEzZWYwNDBiYjEwNDBlMzE0OGQ3ZGVwLTEsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODMKKyAgICAweDEuZDQyZGU0MmRjZTEzZWYwNDBiYjEwNDBlMzE0OGQ3ZGVwLTEsCisgICAgMHgxLjI3NzAxY2FmODllOTBwMAorICB9LAorICB7IC8vIEVudHJ5IDk4NAorICAgIC0weDEuOTA0YzM3NTA1ZGU1OTMwODEyZTNhMmE5NGZlYWE1MWJwLTEsCisgICAgLTB4MS5jYjkxZjNiYmJhMTU3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTg1CisgICAgMHgxLjkwNGMzNzUwNWRlNTkzMDgxMmUzYTJhOTRmZWFhNTFicC0xLAorICAgIDB4MS5jYjkxZjNiYmJhMTU3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTg2CisgICAgLTB4MS4zMjNiOGIxZmI0YmI2MjZkZDQwY2FjZDc0OTYzYWM2Y3AtMSwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1OGVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODcKKyAgICAweDEuMzIzYjhiMWZiNGJiNjI2ZGQ0MGNhY2Q3NDk2M2FjNmNwLTEsCisgICAgMHgxLjQ4NDNhZTE4NjA1OGVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODgKKyAgICAtMHgxLjgwNDVmZTY0ZTYzMDhiYjVjNmNlMzVmODM0YjkzYzYzcC0yLAorICAgIC0weDEuODllYWQwZWEwZDM4YXAtMgorICB9LAorICB7IC8vIEVudHJ5IDk4OQorICAgIDB4MS44MDQ1ZmU2NGU2MzA4YmI1YzZjZTM1ZjgzNGI5M2M2M3AtMiwKKyAgICAweDEuODllYWQwZWEwZDM4YXAtMgorICB9LAorICB7IC8vIEVudHJ5IDk5MAorICAgIC0weDEuMDVlNDc2MWFiOGRlYzQ0ZWQwZmEzMGQzMzUwNDljNDBwLTMsCisgICAgLTB4MS4wNjljOGI0NmIzN2YwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgOTkxCisgICAgMHgxLjA1ZTQ3NjFhYjhkZWM0NGVkMGZhMzBkMzM1MDQ5YzQwcC0zLAorICAgIDB4MS4wNjljOGI0NmIzN2YwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgOTkyCisgICAgMHgxLjA1ZTQ3NjFhYjhkMzFkMDBlNjU2MzcyYzVjMDRhYTZlcC0zLAorICAgIDB4MS4wNjljOGI0NmIzNzM0cC0zCisgIH0sCisgIHsgLy8gRW50cnkgOTkzCisgICAgLTB4MS4wNWU0NzYxYWI4ZDMxZDAwZTY1NjM3MmM1YzA0YWE2ZXAtMywKKyAgICAtMHgxLjA2OWM4YjQ2YjM3MzRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTQKKyAgICAweDEuODA0NWZlNjRlNjJiMTlhMDk0Mzk5NTAyYWZiNzZlNWNwLTIsCisgICAgMHgxLjg5ZWFkMGVhMGQzMmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTUKKyAgICAtMHgxLjgwNDVmZTY0ZTYyYjE5YTA5NDM5OTUwMmFmYjc2ZTVjcC0yLAorICAgIC0weDEuODllYWQwZWEwZDMyY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDk5NgorICAgIDB4MS4zMjNiOGIxZmI0YjkwN2M0MTZkMjNiMDRlMGVjMGU3MnAtMSwKKyAgICAweDEuNDg0M2FlMTg2MDU1ZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDk5NworICAgIC0weDEuMzIzYjhiMWZiNGI5MDdjNDE2ZDIzYjA0ZTBlYzBlNzJwLTEsCisgICAgLTB4MS40ODQzYWUxODYwNTVmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTk4CisgICAgMHgxLjkwNGMzNzUwNWRlM2JlMmFjZTE3Y2E1NDg3NzUwMjMxcC0xLAorICAgIDB4MS5jYjkxZjNiYmJhMTI4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTk5CisgICAgLTB4MS45MDRjMzc1MDVkZTNiZTJhY2UxN2NhNTQ4Nzc1MDIzMXAtMSwKKyAgICAtMHgxLmNiOTFmM2JiYmExMjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAwCisgICAgMHgxLmQ0MmRlNDJkY2UxMmI4MjQ2NmYyZmNiNjNiMjk0NzUxcC0xLAorICAgIDB4MS4yNzcwMWNhZjg5ZTc4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAxCisgICAgLTB4MS5kNDJkZTQyZGNlMTJiODI0NjZmMmZjYjYzYjI5NDc1MXAtMSwKKyAgICAtMHgxLjI3NzAxY2FmODllNzhwMAorICB9LAorICB7IC8vIEVudHJ5IDEwMDIKKyAgICAweDEuZjk2ZmU0MDVmMWFjMjU5YmYxOTJmZDFjZjY0ZTJmMTJwLTEsCisgICAgMHgxLjY5MTczZjgxMzZjNWNwMAorICB9LAorICB7IC8vIEVudHJ5IDEwMDMKKyAgICAtMHgxLmY5NmZlNDA1ZjFhYzI1OWJmMTkyZmQxY2Y2NGUyZjEycC0xLAorICAgIC0weDEuNjkxNzNmODEzNmM1Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTAwNAorICAgIDB4MS5mZGEyNTRjMjdhMDIyNzU0MzJkNzdkZDZmOTcwNDY0NHAtMSwKKyAgICAweDEuYWFiZTYyNTJlM2E0MHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTAwNQorICAgIC0weDEuZmRhMjU0YzI3YTAyMjc1NDMyZDc3ZGQ2Zjk3MDQ2NDRwLTEsCisgICAgLTB4MS5hYWJlNjI1MmUzYTQwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA2CisgICAgMHgxLmUwN2VlZWRhMTA5ZDZiZjBjOTM1ZmExMGIxMjgwYzZkcC0xLAorICAgIDB4MS5lYzY1ODUyNDkwODI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA3CisgICAgLTB4MS5lMDdlZWVkYTEwOWQ2YmYwYzkzNWZhMTBiMTI4MGM2ZHAtMSwKKyAgICAtMHgxLmVjNjU4NTI0OTA4MjRwMAorICB9LAorICB7IC8vIEVudHJ5IDEwMDgKKyAgICAweDEuYTNlZDllMjUyOTM5ZDk3OTNmYjJmNmY3NWU1Yzc2ZTdwLTEsCisgICAgMHgxLjE3MDY1M2ZiMWViMDRwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMDkKKyAgICAtMHgxLmEzZWQ5ZTI1MjkzOWQ5NzkzZmIyZjZmNzVlNWM3NmU3cC0xLAorICAgIC0weDEuMTcwNjUzZmIxZWIwNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAxMAorICAgIDB4MS40YmU0OTc5YzVlZmNjZmU3OGVhMGI2YWZiMGNiYmEzN3AtMSwKKyAgICAweDEuMzdkOWU1NjNmNTFmNnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAxMQorICAgIC0weDEuNGJlNDk3OWM1ZWZjY2ZlNzhlYTBiNmFmYjBjYmJhMzdwLTEsCisgICAgLTB4MS4zN2Q5ZTU2M2Y1MWY2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEyCisgICAgMHgxLmJjNGMwNGQ3MWFiZmM1ZGY2OTU4OWE0NWQ1ZTMxOTZlcC0yLAorICAgIDB4MS41OGFkNzZjY2NiOGU4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEzCisgICAgLTB4MS5iYzRjMDRkNzFhYmZjNWRmNjk1ODlhNDVkNWUzMTk2ZXAtMiwKKyAgICAtMHgxLjU4YWQ3NmNjY2I4ZThwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMTQKKyAgICAweDEuODc3ZTJjZDRmNzA2MDliMWYwNjIyOTViNjRhZWQ0YmRwLTMsCisgICAgMHgxLjc5ODEwODM1YTFmZGFwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMTUKKyAgICAtMHgxLjg3N2UyY2Q0ZjcwNjA5YjFmMDYyMjk1YjY0YWVkNGJkcC0zLAorICAgIC0weDEuNzk4MTA4MzVhMWZkYXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAxNgorICAgIC0weDEuMDY2ZTdlYjc2ZjRhYzI5M2Y0NjQ4NmRjMzI4ZDQ1MGJwLTQsCisgICAgMHgxLjlhNTQ5OTllNzg2Y2NwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMTcKKyAgICAweDEuMDY2ZTdlYjc2ZjRhYzI5M2Y0NjQ4NmRjMzI4ZDQ1MGJwLTQsCisgICAgLTB4MS45YTU0OTk5ZTc4NmNjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE4CisgICAgLTB4MS40MmFiYmE4YzcyZjc3MDU5NWZmZTMxMzVhMGUwYWQ4M3AtMiwKKyAgICAweDEuYmIyODJiMDc0ZWRiZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAxOQorICAgIDB4MS40MmFiYmE4YzcyZjc3MDU5NWZmZTMxMzVhMGUwYWQ4M3AtMiwKKyAgICAtMHgxLmJiMjgyYjA3NGVkYmVwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMjAKKyAgICAtMHgxLjE3NTA1OWJmMGQ0MDZlMmZlMDE0ZTg4MGRkMjljZmFjcC0xLAorICAgIDB4MS5kYmZiYmM3MDI1NGIwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIxCisgICAgMHgxLjE3NTA1OWJmMGQ0MDZlMmZlMDE0ZTg4MGRkMjljZmFjcC0xLAorICAgIC0weDEuZGJmYmJjNzAyNTRiMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAyMgorICAgIC0weDEuN2IwNWI3YjZjNjExNjE1NWYwZGM1NTFlMzE2ZTFlMGJwLTEsCisgICAgMHgxLmZjY2Y0ZGQ4ZmJiYTJwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMjMKKyAgICAweDEuN2IwNWI3YjZjNjExNjE1NWYwZGM1NTFlMzE2ZTFlMGJwLTEsCisgICAgLTB4MS5mY2NmNGRkOGZiYmEycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI0CisgICAgLTB4MS5jNWYwNTgyMzBlN2ViZWI3NjE2Nzc5ZTE2ZmE5YjUzN3AtMSwKKyAgICAweDEuMGVkMTZmYTBlOTE0YXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAyNQorICAgIDB4MS5jNWYwNTgyMzBlN2ViZWI3NjE2Nzc5ZTE2ZmE5YjUzN3AtMSwKKyAgICAtMHgxLjBlZDE2ZmEwZTkxNGFwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMjYKKyAgICAtMHgxLmYzMjljMDU1OGU5NWZhMzMzZDVkMmQ0NGQ2NTQ3NzdjcC0xLAorICAgIDB4MS4xZjNiMzg1NTU0NGMzcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI3CisgICAgMHgxLmYzMjljMDU1OGU5NWZhMzMzZDVkMmQ0NGQ2NTQ3NzdjcC0xLAorICAgIC0weDEuMWYzYjM4NTU1NDRjM3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTAyOAorICAgIC0weDEuZmZiY2E4NDZjNGZjYjIzN2MyOTQ3YjM1YjAzN2EycC0xLAorICAgIDB4MS4yZmE1MDEwOWJmODNjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI5CisgICAgMHgxLmZmYmNhODQ2YzRmY2IyMzdjMjk0N2IzNWIwMzdhMnAtMSwKKyAgICAtMHgxLjJmYTUwMTA5YmY4M2NwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMzAKKyAgICAtMHgxLmVhZDY4MzQ5MDliYTBlZTY5YjMxZTE5NzBkZjFiYjhicC0xLAorICAgIDB4MS40MDBlYzliZTJhYmI1cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMxCisgICAgMHgxLmVhZDY4MzQ5MDliYTBlZTY5YjMxZTE5NzBkZjFiYjhicC0xLAorICAgIC0weDEuNDAwZWM5YmUyYWJiNXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAzMgorICAgIC0weDEuYjVkNTQ1YjEwOWMxMjMyYjYxZGQyOGQ4MDM1ZDk1Y2JwLTEsCisgICAgMHgxLjUwNzg5MjcyOTVmMmVwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMzMKKyAgICAweDEuYjVkNTQ1YjEwOWMxMjMyYjYxZGQyOGQ4MDM1ZDk1Y2JwLTEsCisgICAgLTB4MS41MDc4OTI3Mjk1ZjJlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM0CisgICAgLTB4MS42NDMwODBkNjdhY2U0OGMwZGQxZmUzYTA2YmJjNGJmNXAtMSwKKyAgICAweDEuNjBlMjViMjcwMTJhN3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTAzNQorICAgIDB4MS42NDMwODBkNjdhY2U0OGMwZGQxZmUzYTA2YmJjNGJmNXAtMSwKKyAgICAtMHgxLjYwZTI1YjI3MDEyYTdwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMzYKKyAgICAtMHgxLmY2N2VhOTc1Yjg2ZjVkNGFhOTI3MTZjYzA3NzQ3M2E3cC0yLAorICAgIDB4MS43MTRjMjNkYjZjNjIwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM3CisgICAgMHgxLmY2N2VhOTc1Yjg2ZjVkNGFhOTI3MTZjYzA3NzQ3M2E3cC0yLAorICAgIC0weDEuNzE0YzIzZGI2YzYyMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAzOAorICAgIC0weDEuMDNiZTA2Zjk3Y2M0ZDc4ZmRjY2JjYTFkNDBlODYwMTFwLTIsCisgICAgMHgxLjgxYjVlYzhmZDc5OTlwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMzkKKyAgICAweDEuMDNiZTA2Zjk3Y2M0ZDc4ZmRjY2JjYTFkNDBlODYwMTFwLTIsCisgICAgLTB4MS44MWI1ZWM4ZmQ3OTk5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQwCisgICAgMHgxLmVmYjI2ZWY5MzBjNGMzZmEzMjQ1OTYzYzFkY2VjMGE2cC01LAorICAgIDB4MS5lZmZmZmZmZmZmZmZmcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTA0MQorICAgIC0weDEuZWZiMjZlZjkzMGM0YzNmYTMyNDU5NjNjMWRjZWMwYTZwLTUsCisgICAgLTB4MS5lZmZmZmZmZmZmZmZmcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTA0MgorICAgIDB4MS5lZmIyNmVmOTMwYzRkM2YyYjBkYmUxOTMxYmE1YWU2NHAtNSwKKyAgICAweDEuZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwNDMKKyAgICAtMHgxLmVmYjI2ZWY5MzBjNGQzZjJiMGRiZTE5MzFiYTVhZTY0cC01LAorICAgIC0weDEuZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwNDQKKyAgICAweDEuZWZiMjZlZjkzMGM0ZTNlYjJmNzIyY2VhMTk3YzIwMzZwLTUsCisgICAgMHgxLmYwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ1CisgICAgLTB4MS5lZmIyNmVmOTMwYzRlM2ViMmY3MjJjZWExOTdjMjAzNnAtNSwKKyAgICAtMHgxLmYwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ2CisgICAgMHgxLmY2YmFhYTEzMWRlNjMzYWQ0ZTBlN2Q2NDY1ZDEyYTA1cC00LAorICAgIDB4MS5mN2ZmZmZmZmZmZmZmcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTA0NworICAgIC0weDEuZjZiYWFhMTMxZGU2MzNhZDRlMGU3ZDY0NjVkMTJhMDVwLTQsCisgICAgLTB4MS5mN2ZmZmZmZmZmZmZmcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTA0OAorICAgIDB4MS5mNmJhYWExMzFkZTY0MzhlNTYxMTI3OTg2NGZlNzY2M3AtNCwKKyAgICAweDEuZjgwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTA0OQorICAgIC0weDEuZjZiYWFhMTMxZGU2NDM4ZTU2MTEyNzk4NjRmZTc2NjNwLTQsCisgICAgLTB4MS5mODBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUwCisgICAgMHgxLmY2YmFhYTEzMWRlNjUzNmY1ZTEzZDFjYzY0MjljYzA3cC00LAorICAgIDB4MS5mODAwMDAwMDAwMDAxcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTA1MQorICAgIC0weDEuZjZiYWFhMTMxZGU2NTM2ZjVlMTNkMWNjNjQyOWNjMDdwLTQsCisgICAgLTB4MS5mODAwMDAwMDAwMDAxcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTA1MgorICAgIDB4MS40YThjM2I0ZTljN2ZmMDBhMzZlMDYxYTBkMjI5NTA5M3AtMywKKyAgICAweDEuNGJmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDEwNTMKKyAgICAtMHgxLjRhOGMzYjRlOWM3ZmYwMGEzNmUwNjFhMGQyMjk1MDkzcC0zLAorICAgIC0weDEuNGJmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDEwNTQKKyAgICAweDEuNGE4YzNiNGU5YzdmZmZkNDgzMDVmNDRhNDJmNWY1MGZwLTMsCisgICAgMHgxLjRjMHAtMworICB9LAorICB7IC8vIEVudHJ5IDEwNTUKKyAgICAtMHgxLjRhOGMzYjRlOWM3ZmZmZDQ4MzA1ZjQ0YTQyZjVmNTBmcC0zLAorICAgIC0weDEuNGMwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTA1NgorICAgIDB4MS40YThjM2I0ZTljODAwZjllY2YyYjg2ZjNiM2JkNmY1YXAtMywKKyAgICAweDEuNGMwMDAwMDAwMDAwMXAtMworICB9LAorICB7IC8vIEVudHJ5IDEwNTcKKyAgICAtMHgxLjRhOGMzYjRlOWM4MDBmOWVjZjJiODZmM2IzYmQ2ZjVhcC0zLAorICAgIC0weDEuNGMwMDAwMDAwMDAwMXAtMworICB9LAorICB7IC8vIEVudHJ5IDEwNTgKKyAgICAweDEuMmU5Y2Q5NWJhYmEzMjVmZTYwNjcyMzNkNDQ5NmFhYWNwLTIsCisgICAgMHgxLjMzMzMzMzMzMzMzMzJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU5CisgICAgLTB4MS4yZTljZDk1YmFiYTMyNWZlNjA2NzIzM2Q0NDk2YWFhY3AtMiwKKyAgICAtMHgxLjMzMzMzMzMzMzMzMzJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYwCisgICAgMHgxLjJlOWNkOTViYWJhMzM1NDc2ZjUxM2FjMjIxZDA3OGM3cC0yLAorICAgIDB4MS4zMzMzMzMzMzMzMzMzcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTA2MQorICAgIC0weDEuMmU5Y2Q5NWJhYmEzMzU0NzZmNTEzYWMyMjFkMDc4YzdwLTIsCisgICAgLTB4MS4zMzMzMzMzMzMzMzMzcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTA2MgorICAgIDB4MS4yZTljZDk1YmFiYTM0NDkwN2UzYjUyNDZmZWY3NWQxNXAtMiwKKyAgICAweDEuMzMzMzMzMzMzMzMzNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwNjMKKyAgICAtMHgxLjJlOWNkOTViYWJhMzQ0OTA3ZTNiNTI0NmZlZjc1ZDE1cC0yLAorICAgIC0weDEuMzMzMzMzMzMzMzMzNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwNjQKKyAgICAweDEuM2ZhZWZjN2E1NDY2ZWYzMDQ1YzNmMWJlNzE2YWQ1NjhwLTEsCisgICAgMHgxLjU5NDMxN2FjYzRlZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY1CisgICAgLTB4MS4zZmFlZmM3YTU0NjZlZjMwNDVjM2YxYmU3MTZhZDU2OHAtMSwKKyAgICAtMHgxLjU5NDMxN2FjYzRlZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY2CisgICAgMHgxLjNmYWVmYzdhNTQ2NmZiYWZiY2EwMjdiNmU4ZGI4YzA0cC0xLAorICAgIDB4MS41OTQzMTdhY2M0ZWY5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA2NworICAgIC0weDEuM2ZhZWZjN2E1NDY2ZmJhZmJjYTAyN2I2ZThkYjhjMDRwLTEsCisgICAgLTB4MS41OTQzMTdhY2M0ZWY5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA2OAorICAgIDB4MS4zZmFlZmM3YTU0NjcwODJmMzM3YzVkYWY1ZmZjNTZlMnAtMSwKKyAgICAweDEuNTk0MzE3YWNjNGVmYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNjkKKyAgICAtMHgxLjNmYWVmYzdhNTQ2NzA4MmYzMzdjNWRhZjVmZmM1NmUycC0xLAorICAgIC0weDEuNTk0MzE3YWNjNGVmYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNzAKKyAgICAweDEuNjg4OGE0ZTEzNGIyZGVmNWJlYTUxZjRjZDdkNjQ3YzZwLTEsCisgICAgMHgxLjhmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcxCisgICAgLTB4MS42ODg4YTRlMTM0YjJkZWY1YmVhNTFmNGNkN2Q2NDdjNnAtMSwKKyAgICAtMHgxLjhmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcyCisgICAgMHgxLjY4ODhhNGUxMzRiMmVhNTIwYjIyNmVjYTg2OTRiM2EycC0xLAorICAgIDB4MS45cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA3MworICAgIC0weDEuNjg4OGE0ZTEzNGIyZWE1MjBiMjI2ZWNhODY5NGIzYTJwLTEsCisgICAgLTB4MS45cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA3NAorICAgIDB4MS42ODg4YTRlMTM0YjJmNWFlNTc5ZmJlNDgzNGY4ZmQ1NXAtMSwKKyAgICAweDEuOTAwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNzUKKyAgICAtMHgxLjY4ODhhNGUxMzRiMmY1YWU1NzlmYmU0ODM0ZjhmZDU1cC0xLAorICAgIC0weDEuOTAwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNzYKKyAgICAtMC4wLAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDEwNzcKKyAgICAwLjAsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc4CisgICAgLTAuMCwKKyAgICAtMC4wCisgIH0sCisgIHsgLy8gRW50cnkgMTA3OQorICAgIDAuMCwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDEwODAKKyAgICAtMC4wLAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDEwODEKKyAgICAweDEuOTFmNjVmMTBkZDgxMmEwYjk1ZmY3MTg3MWFiNDgyMDdwLTUsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgyCisgICAgLTB4MS45MWY2NWYxMGRkODEyYTBiOTVmZjcxODcxYWI0ODIwN3AtNSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgzCisgICAgMHgxLjkxZjY1ZjEwZGQ4MTNhMDZhNmYxMmUzZGQ5YTZhNDFlcC01LAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTA4NAorICAgIC0weDEuOTFmNjVmMTBkZDgxM2EwNmE2ZjEyZTNkZDlhNmE0MWVwLTUsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTA4NQorICAgIDB4MS45MWY2NWYxMGRkODE0YTAxYjdlMmVhZjQ5ODk4NjFiN3AtNSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwODYKKyAgICAtMHgxLjkxZjY1ZjEwZGQ4MTRhMDFiN2UyZWFmNDk4OTg2MWI3cC01LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwODcKKyAgICAweDEuOTE3YTZiYzI5YjQyYTljZDJlNzg3ZWUwMGNhOGY4ZTNwLTQsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg4CisgICAgLTB4MS45MTdhNmJjMjliNDJhOWNkMmU3ODdlZTAwY2E4ZjhlM3AtNCwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg5CisgICAgMHgxLjkxN2E2YmMyOWI0MmI5Yjk3NTRhNjc3MjlmNzkzNDZicC00LAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC00CisgIH0sCisgIHsgLy8gRW50cnkgMTA5MAorICAgIC0weDEuOTE3YTZiYzI5YjQyYjliOTc1NGE2NzcyOWY3OTM0NmJwLTQsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cC00CisgIH0sCisgIHsgLy8gRW50cnkgMTA5MQorICAgIDB4MS45MTdhNmJjMjliNDJjOWE1YmMxYzUwMDUzMjQ3ZGU3OHAtNCwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwOTIKKyAgICAtMHgxLjkxN2E2YmMyOWI0MmM5YTViYzFjNTAwNTMyNDdkZTc4cC00LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwOTMKKyAgICAweDEuOGY4YjgzYzY5YTYwOTc1Zjk4NDUzODg2Zjk1M2EwZTVwLTMsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDk0CisgICAgLTB4MS44ZjhiODNjNjlhNjA5NzVmOTg0NTM4ODZmOTUzYTBlNXAtMywKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDk1CisgICAgMHgxLjhmOGI4M2M2OWE2MGE3MTBlNDJkMzQzNTUxNmRkYWNjcC0zLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTA5NgorICAgIC0weDEuOGY4YjgzYzY5YTYwYTcxMGU0MmQzNDM1NTE2ZGRhY2NwLTMsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTA5NworICAgIDB4MS44ZjhiODNjNjlhNjBiNmMyMzAxNTJmZTNhOTgxZDY4NnAtMywKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAtMworICB9LAorICB7IC8vIEVudHJ5IDEwOTgKKyAgICAtMHgxLjhmOGI4M2M2OWE2MGI2YzIzMDE1MmZlM2E5ODFkNjg2cC0zLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtMworICB9LAorICB7IC8vIEVudHJ5IDEwOTkKKyAgICAweDEuODdkZTJhNmFlYTk2MWEzZTlkZWRlYTU3ZmU3ZTY1MTRwLTIsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAwCisgICAgLTB4MS44N2RlMmE2YWVhOTYxYTNlOWRlZGVhNTdmZTdlNjUxNHAtMiwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAxCisgICAgMHgxLjg3ZGUyYTZhZWE5NjI5MDZkM2Q1ODM5ZWExYTViY2YwcC0yLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTEwMgorICAgIC0weDEuODdkZTJhNmFlYTk2MjkwNmQzZDU4MzllYTFhNWJjZjBwLTIsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTEwMworICAgIDB4MS44N2RlMmE2YWVhOTYzN2NmMDliZDFjZTU0NGI0OTZlYXAtMiwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAtMgorICB9LAorICB7IC8vIEVudHJ5IDExMDQKKyAgICAtMHgxLjg3ZGUyYTZhZWE5NjM3Y2YwOWJkMWNlNTQ0YjQ5NmVhcC0yLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtMgorICB9LAorICB7IC8vIEVudHJ5IDExMDUKKyAgICAweDEuNmEwOWU2NjdmM2JjYmE5OWFmYjAxMzU3Mjk0NTc4NzRwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTA2CisgICAgLTB4MS42YTA5ZTY2N2YzYmNiYTk5YWZiMDEzNTcyOTQ1Nzg3NHAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTA3CisgICAgMHgxLjZhMDllNjY3ZjNiY2M1ZTlmZWUzNTJmNTBmZDNmNGU5cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTEwOAorICAgIC0weDEuNmEwOWU2NjdmM2JjYzVlOWZlZTM1MmY1MGZkM2Y0ZTlwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTEwOQorICAgIDB4MS42YTA5ZTY2N2YzYmNkMTNhNGUxNjkyOTJmNjA3ZWVlNXAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDExMTAKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2QxM2E0ZTE2OTI5MmY2MDdlZWU1cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDExMTEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU1ZjU2ZmZwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwMAorICB9LAorICB7IC8vIEVudHJ5IDExMTIKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNWY1NmZmcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTExMworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODgzMXAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTExNAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzg4MzFwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTE1CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNzliOTYzcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTE2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjc5Yjk2M3AtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwMAorICB9LAorICB7IC8vIEVudHJ5IDExMTcKKyAgICAweDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5YmZhZWVkNDJwLTUxLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTE4CisgICAgLTB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDliZmFlZWQ0MnAtNTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTE5CisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzA0MzZlMmVkcC01MywKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTEyMAorICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQzNmUyZWRwLTUzLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTEyMQorICAgIC0weDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjZjN2Q1YmJjNWNwLTUyLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTIyCisgICAgMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzdkNWJiYzVjcC01MiwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwMQorICB9LAorICB7IC8vIEVudHJ5IDExMjMKKyAgICAtMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OWJiODdjZTFicC01MCwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTEyNAorICAgIDB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDliYjg3Y2UxYnAtNTAsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTI1CisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDBiZjAwM3AtNTIsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMgorICB9LAorICB7IC8vIEVudHJ5IDExMjYKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQwYmYwMDNwLTUyLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTEyNworICAgIDB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM3YmQ2YmY0ZHAtNTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwMgorICB9LAorICB7IC8vIEVudHJ5IDExMjgKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzdiZDZiZjRkcC01MSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwMgorICB9LAorICB7IC8vIEVudHJ5IDExMjkKKyAgICAtMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OWFhZWI1MTgycC00OSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTEzMAorICAgIDB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDlhYWViNTE4MnAtNDksCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTMxCisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwMzYwMjQ1Y3AtNTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMworICB9LAorICB7IC8vIEVudHJ5IDExMzIKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDM2MDI0NWNwLTUxLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTEzMworICAgIDB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM3NWMyY2IwZXAtNTAsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwMworICB9LAorICB7IC8vIEVudHJ5IDExMzQKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2Yzc1YzJjYjBlcC01MCwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwMworICB9LAorICB7IC8vIEVudHJ5IDExMzUKKyAgICAtMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OTY4Nzk1ZjFjcC00OCwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTEzNgorICAgIDB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDk2ODc5NWYxY3AtNDgsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTM3CisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwMGIwZjViZnAtNTAsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwNAorICB9LAorICB7IC8vIEVudHJ5IDExMzgKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDBiMGY1YmZwLTUwLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEzOQorICAgIDB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM1ZDcyZmExMXAtNDksCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwNAorICB9LAorICB7IC8vIEVudHJ5IDExNDAKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzVkNzJmYTExcC00OSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwNAorICB9LAorICB7IC8vIEVudHJ5IDExNDEKKyAgICAtMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0ODVlYjE5NTg0cC00NywKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3A1CisgIH0sCisgIHsgLy8gRW50cnkgMTE0MgorICAgIDB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDg1ZWIxOTU4NHAtNDcsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQzCisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjZmNWY0M2I0Y3AtNDksCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwNQorICB9LAorICB7IC8vIEVudHJ5IDExNDQKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI2ZjVmNDNiNGNwLTQ5LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHA1CisgIH0sCisgIHsgLy8gRW50cnkgMTE0NQorICAgIDB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmJmYzMzYjYxZnAtNDgsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwNQorICB9LAorICB7IC8vIEVudHJ5IDExNDYKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YmZjMzNiNjFmcC00OCwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwNQorICB9LAorICB7IC8vIEVudHJ5IDExNDcKKyAgICAtMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0NDM3OTI2ZjI1cC00NiwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3A2CisgIH0sCisgIHsgLy8gRW50cnkgMTE0OAorICAgIDB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDQzNzkyNmYyNXAtNDYsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQ5CisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjZjYjAxNTE3ZHAtNDgsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwNgorICB9LAorICB7IC8vIEVudHJ5IDExNTAKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI2Y2IwMTUxN2RwLTQ4LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTE1MQorICAgIDB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmE3NzM2YTY1OHAtNDcsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwNgorICB9LAorICB7IC8vIEVudHJ5IDExNTIKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YTc3MzZhNjU4cC00NywKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwNgorICB9LAorICB7IC8vIEVudHJ5IDExNTMKKyAgICAtMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjAzMzliMTVkNWFhcC00NSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3A3CisgIH0sCisgIHsgLy8gRW50cnkgMTE1NAorICAgIDB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwMzM5YjE1ZDVhYXAtNDUsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTU1CisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjYxZjM1YWE0M3AtNDcsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwNworICB9LAorICB7IC8vIEVudHJ5IDExNTYKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI2MWYzNWFhNDNwLTQ3LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHA3CisgIH0sCisgIHsgLy8gRW50cnkgMTE1NworICAgIDB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNjQ2MzQyNjczYXAtNDYsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwNworICB9LAorICB7IC8vIEVudHJ5IDExNTgKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2NDYzNDI2NzNhcC00NiwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwNworICB9LAorICB7IC8vIEVudHJ5IDExNTkKKyAgICAweDEuNmEwOWU2NjdmM2JjZmZhNjBjMGY1MzM0MGZkMjQ5MDRwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDFwMQorICB9LAorICB7IC8vIEVudHJ5IDExNjAKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2ZmYTYwYzBmNTMzNDBmZDI0OTA0cC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTE2MQorICAgIDB4MS42YTA5ZTY2N2YzYmNkMjY0Y2Y0MjU0YmM3YWIwYzlmYXAtMSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTE2MgorICAgIC0weDEuNmEwOWU2NjdmM2JjZDI2NGNmNDI1NGJjN2FiMGM5ZmFwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTYzCisgICAgMHgxLjZhMDllNjY3ZjNiY2E1MjM5Mjc1NTY0NGRmZTcyMzU3cC0xLAorICAgIDB4MS4yZDk3YzdmMzMyMWQzcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTY0CisgICAgLTB4MS42YTA5ZTY2N2YzYmNhNTIzOTI3NTU2NDRkZmU3MjM1N3AtMSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDNwMQorICB9LAorICB7IC8vIEVudHJ5IDExNjUKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzhjMmRmMWI3NTJiNjA2YTBhNDcycC0xLAorICAgIDB4MS5mNmE3YTI5NTUzODVkcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTY2CisgICAgMHgxLjZhMDllNjY3ZjNiYzhjMmRmMWI3NTJiNjA2YTBhNDcycC0xLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTE2NworICAgIC0weDEuNmEwOWU2NjdmM2JjYjk2ZjJlODQ1MTJkYTQ4OGZmMmRwLTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWVwMQorICB9LAorICB7IC8vIEVudHJ5IDExNjgKKyAgICAweDEuNmEwOWU2NjdmM2JjYjk2ZjJlODQ1MTJkYTQ4OGZmMmRwLTEsCisgICAgLTB4MS5mNmE3YTI5NTUzODVlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTY5CisgICAgLTB4MS42YTA5ZTY2N2YzYmNlNmIwNmI1MTRmYTUzY2M5MzI0ZnAtMSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTE3MAorICAgIDB4MS42YTA5ZTY2N2YzYmNlNmIwNmI1MTRmYTUzY2M5MzI0ZnAtMSwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWZwMQorICB9LAorICB7IC8vIEVudHJ5IDExNzEKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU4YjI3YjZhcC0xLAorICAgIDB4MS4yZDk3YzdmMzMyMWQxcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTcyCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU4YjI3YjZhcC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE3MworICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY1MGM5YmRwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDJwMgorICB9LAorICB7IC8vIEVudHJ5IDExNzQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY1MGM5YmRwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTc1CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNWVmMTgxMHAtMSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkM3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTE3NgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNWVmMTgxMHAtMSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDNwMgorICB9LAorICB7IC8vIEVudHJ5IDExNzcKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDM5NjIxOTNiNTM3MzA2OWJhMGMycC0xLAorICAgIDB4MS41ZmRiYmU5YmJhNzc0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTc4CisgICAgMHgxLjZhMDllNjY3ZjNiZDM5NjIxOTNiNTM3MzA2OWJhMGMycC0xLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE3OQorICAgIC0weDEuNmEwOWU2NjdmM2JjZGVkZjlmYTE1NjgzZTUxZjdlNjBwLTEsCisgICAgMHgxLjVmZGJiZTliYmE3NzVwMgorICB9LAorICB7IC8vIEVudHJ5IDExODAKKyAgICAweDEuNmEwOWU2NjdmM2JjZGVkZjlmYTE1NjgzZTUxZjdlNjBwLTEsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc1cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgxCisgICAgLTB4MS42YTA5ZTY2N2YzYmM4NDVkMjYwNzU5OTRhZDAyYmQ5OHAtMSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE4MgorICAgIDB4MS42YTA5ZTY2N2YzYmM4NDVkMjYwNzU5OTRhZDAyYmQ5OHAtMSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzZwMgorICB9LAorICB7IC8vIEVudHJ5IDExODMKKyAgICAweDEuNmEwOWU2NjdmM2JjNTI3MWU0OGI1Mjc2ZjQzODU3OWZwLTEsCisgICAgMHgxLmM0NjNhYmVjY2IyYmFwMgorICB9LAorICB7IC8vIEVudHJ5IDExODQKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzUyNzFlNDhiNTI3NmY0Mzg1NzlmcC0xLAorICAgIC0weDEuYzQ2M2FiZWNjYjJiYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE4NQorICAgIDB4MS42YTA5ZTY2N2YzYmNhY2Y0NWUyNTRmNjYzOGNmZThjNnAtMSwKKyAgICAweDEuYzQ2M2FiZWNjYjJiYnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE4NgorICAgIC0weDEuNmEwOWU2NjdmM2JjYWNmNDVlMjU0ZjY2MzhjZmU4YzZwLTEsCisgICAgLTB4MS5jNDYzYWJlY2NiMmJicDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTg3CisgICAgMHgxLjZhMDllNjY3ZjNiZDA3NzZkN2JmNGM1NTY2YzZkYjg3cC0xLAorICAgIDB4MS5jNDYzYWJlY2NiMmJjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTg4CisgICAgLTB4MS42YTA5ZTY2N2YzYmQwNzc2ZDdiZjRjNTU2NmM2ZGI4N3AtMSwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmNwMgorICB9LAorICB7IC8vIEVudHJ5IDExODkKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTMxMTc0ZjVwLTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWRwMgorICB9LAorICB7IC8vIEVudHJ5IDExOTAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUzMTE3NGY1cC0xLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE5MQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTE5NGNkNHAtMSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE5MgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUxOTRjZDRwLTEsCisgICAgLTB4MS5mNmE3YTI5NTUzODVlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTkzCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5MjEyNGI0cC0xLAorICAgIDB4MS5mNmE3YTI5NTUzODVmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTk0CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTIxMjRiNHAtMSwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWZwMgorICB9LAorICB7IC8vIEVudHJ5IDExOTUKKyAgICAweDEuNmEwOWU2NjdmM2JkZmFlMWRjY2U0ZjE4NjY1NjgxYzZwLTEsCisgICAgMHgxLjE0NzVjYzllZWRlZmZwMworICB9LAorICB7IC8vIEVudHJ5IDExOTYKKyAgICAtMHgxLjZhMDllNjY3ZjNiZGZhZTFkY2NlNGYxODY2NTY4MWM2cC0xLAorICAgIC0weDEuMTQ3NWNjOWVlZGVmZnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE5NworICAgIDB4MS42YTA5ZTY2N2YzYmQ0NWRjZTk5YTU1M2E2ZDdkODA2NXAtMSwKKyAgICAweDEuMTQ3NWNjOWVlZGZwMworICB9LAorICB7IC8vIEVudHJ5IDExOTgKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDQ1ZGNlOTlhNTUzYTZkN2Q4MDY1cC0xLAorICAgIC0weDEuMTQ3NWNjOWVlZGZwMworICB9LAorICB7IC8vIEVudHJ5IDExOTkKKyAgICAweDEuNmEwOWU2NjdmM2JjOTBkN2Y2NjY1YjVjMWEyMjA1NmFwLTEsCisgICAgMHgxLjE0NzVjYzllZWRmMDFwMworICB9LAorICB7IC8vIEVudHJ5IDEyMDAKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzkwZDdmNjY2NWI1YzFhMjIwNTZhcC0xLAorICAgIC0weDEuMTQ3NWNjOWVlZGYwMXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIwMQorICAgIDB4MS4zNGYyNzI5OTNkMTQxNGEyYjM5YmQ4MzczZTBkNmI5NHAtNDksCisgICAgMHgxLjJkOTdjN2YzMzIxZDFwMworICB9LAorICB7IC8vIEVudHJ5IDEyMDIKKyAgICAtMHgxLjM0ZjI3Mjk5M2QxNDE0YTJiMzliZDgzNzNlMGQ2Yjk0cC00OSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDFwMworICB9LAorICB7IC8vIEVudHJ5IDEyMDMKKyAgICAweDEuYTc5Mzk0YzllOGEwYTUxNTljZGVjMWJhODVhNjg4YmRwLTUyLAorICAgIDB4MS4yZDk3YzdmMzMyMWQycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjA0CisgICAgLTB4MS5hNzkzOTRjOWU4YTBhNTE1OWNkZWMxYmE4NWE2ODhiZHAtNTIsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjA1CisgICAgLTB4MS45NjFiMWFjZDg1ZDdkNmJhOThjODRmOTE1M2MwY2MxNnAtNTAsCisgICAgMHgxLjJkOTdjN2YzMzIxZDNwMworICB9LAorICB7IC8vIEVudHJ5IDEyMDYKKyAgICAweDEuOTYxYjFhY2Q4NWQ3ZDZiYTk4Yzg0ZjkxNTNjMGNjMTZwLTUwLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkM3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTIwNworICAgIC0weDEuNmEwOWU2NjdmM2JiOTBmMjIwZjg1NmQwYjFhNDA2YzNwLTEsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTJwMworICB9LAorICB7IC8vIEVudHJ5IDEyMDgKKyAgICAweDEuNmEwOWU2NjdmM2JiOTBmMjIwZjg1NmQwYjFhNDA2YzNwLTEsCisgICAgLTB4MS40NmI5YzM0Nzc2NGEycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjA5CisgICAgLTB4MS42YTA5ZTY2N2YzYmM0NWY3MTQyYzUwYWY4NGYyNmM3NXAtMSwKKyAgICAweDEuNDZiOWMzNDc3NjRhM3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTIxMAorICAgIDB4MS42YTA5ZTY2N2YzYmM0NWY3MTQyYzUwYWY4NGYyNmM3NXAtMSwKKyAgICAtMHgxLjQ2YjljMzQ3NzY0YTNwMworICB9LAorICB7IC8vIEVudHJ5IDEyMTEKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2ZhZmMwNzYwNGE4ZGZkYmU1ODhkcC0xLAorICAgIDB4MS40NmI5YzM0Nzc2NGE0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjEyCisgICAgMHgxLjZhMDllNjY3ZjNiY2ZhZmMwNzYwNGE4ZGZkYmU1ODhkcC0xLAorICAgIC0weDEuNDZiOWMzNDc3NjRhNHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIxMworICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOWQ2MzRlOWZwLTEsCisgICAgMHgxLjVmZGJiZTliYmE3NzRwMworICB9LAorICB7IC8vIEVudHJ5IDEyMTQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOWQ2MzRlOWZwLTEsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjE1CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzQ2MTE3OHAtMSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIxNgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzQ2MTE3OHAtMSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzVwMworICB9LAorICB7IC8vIEVudHJ5IDEyMTcKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmRiMjhkNDUxcC0xLAorICAgIDB4MS41ZmRiYmU5YmJhNzc2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjE4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmRiMjhkNDUxcC0xLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIxOQorICAgIC0weDEuNmEwOWU2NjdmM2JlMDc1Y2FkMmQ1MGRmYzY4Y2Q4OGZwLTEsCisgICAgMHgxLjc4ZmRiOWVmZmVhNDVwMworICB9LAorICB7IC8vIEVudHJ5IDEyMjAKKyAgICAweDEuNmEwOWU2NjdmM2JlMDc1Y2FkMmQ1MGRmYzY4Y2Q4OGZwLTEsCisgICAgLTB4MS43OGZkYjllZmZlYTQ1cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjIxCisgICAgLTB4MS42YTA5ZTY2N2YzYmQ1MjU3YjlmOTU3MDFkM2YxM2Y1ZHAtMSwKKyAgICAweDEuNzhmZGI5ZWZmZWE0NnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIyMgorICAgIDB4MS42YTA5ZTY2N2YzYmQ1MjU3YjlmOTU3MDFkM2YxM2Y1ZHAtMSwKKyAgICAtMHgxLjc4ZmRiOWVmZmVhNDZwMworICB9LAorICB7IC8vIEVudHJ5IDEyMjMKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzlkNTJjNmM1NWQyMzg2ZDMyYzkycC0xLAorICAgIDB4MS43OGZkYjllZmZlYTQ3cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjI0CisgICAgMHgxLjZhMDllNjY3ZjNiYzlkNTJjNmM1NWQyMzg2ZDMyYzkycC0xLAorICAgIC0weDEuNzhmZGI5ZWZmZWE0N3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTIyNQorICAgIDB4MS42YTA5ZTY2N2YzYmI4NDc3NTA5OTU1MDkzYmIyOTJiZXAtMSwKKyAgICAweDEuYWI0MWIwOTg4NmZlOHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIyNgorICAgIC0weDEuNmEwOWU2NjdmM2JiODQ3NzUwOTk1NTA5M2JiMjkyYmVwLTEsCisgICAgLTB4MS5hYjQxYjA5ODg2ZmU4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjI3CisgICAgMHgxLjZhMDllNjY3ZjNiYzM5N2M0M2NkNGVlODE1M2U2MGEwcC0xLAorICAgIDB4MS5hYjQxYjA5ODg2ZmU5cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjI4CisgICAgLTB4MS42YTA5ZTY2N2YzYmMzOTdjNDNjZDRlZTgxNTNlNjBhMHAtMSwKKyAgICAtMHgxLmFiNDFiMDk4ODZmZTlwMworICB9LAorICB7IC8vIEVudHJ5IDEyMjkKKyAgICAweDEuNmEwOWU2NjdmM2JjZWU4MTM3MDE0OGM2OTQ0N2I0ZTdwLTEsCisgICAgMHgxLmFiNDFiMDk4ODZmZWFwMworICB9LAorICB7IC8vIEVudHJ5IDEyMzAKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2VlODEzNzAxNDhjNjk0NDdiNGU3cC0xLAorICAgIC0weDEuYWI0MWIwOTg4NmZlYXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIzMQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5MjIxNDFiNHAtMSwKKyAgICAweDEuYzQ2M2FiZWNjYjJiYXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIzMgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTIyMTQxYjRwLTEsCisgICAgLTB4MS5jNDYzYWJlY2NiMmJhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjMzCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5ZDcxN2E3cC0xLAorICAgIDB4MS5jNDYzYWJlY2NiMmJicDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjM0CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOWQ3MTdhN3AtMSwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmJwMworICB9LAorICB7IC8vIEVudHJ5IDEyMzUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTE4Y2VkOWFwLTEsCisgICAgMHgxLmM0NjNhYmVjY2IyYmNwMworICB9LAorICB7IC8vIEVudHJ5IDEyMzYKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUxOGNlZDlhcC0xLAorICAgIC0weDEuYzQ2M2FiZWNjYjJiY3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTIzNworICAgIDB4MS42YTA5ZTY2N2YzYmUxM2Q3N2Q4YzUyYTcyNjU1MGVhY3AtMSwKKyAgICAweDEuZGQ4NWE3NDEwZjU4YnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIzOAorICAgIC0weDEuNmEwOWU2NjdmM2JlMTNkNzdkOGM1MmE3MjY1NTBlYWNwLTEsCisgICAgLTB4MS5kZDg1YTc0MTBmNThicDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjM5CisgICAgMHgxLjZhMDllNjY3ZjNiZDVlZDI4YTU4NThjOTM5ZjZkZGFhcC0xLAorICAgIDB4MS5kZDg1YTc0MTBmNThjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQwCisgICAgLTB4MS42YTA5ZTY2N2YzYmQ1ZWQyOGE1ODU4YzkzOWY2ZGRhYXAtMSwKKyAgICAtMHgxLmRkODVhNzQxMGY1OGNwMworICB9LAorICB7IC8vIEVudHJ5IDEyNDEKKyAgICAweDEuNmEwOWU2NjdmM2JjYTljZDk3MjQ1ZWVhZjMxNjMzMGVwLTEsCisgICAgMHgxLmRkODVhNzQxMGY1OGRwMworICB9LAorICB7IC8vIEVudHJ5IDEyNDIKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2E5Y2Q5NzI0NWVlYWYzMTYzMzBlcC0xLAorICAgIC0weDEuZGQ4NWE3NDEwZjU4ZHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTI0MworICAgIDB4MS41ODNlYmVmZjY1Y2MyMjY0ODBhZTY4NWMxNzY1ZGVjMXAtNDksCisgICAgMHgxLmY2YTdhMjk1NTM4NWRwMworICB9LAorICB7IC8vIEVudHJ5IDEyNDQKKyAgICAtMHgxLjU4M2ViZWZmNjVjYzIyNjQ4MGFlNjg1YzE3NjVkZWMxcC00OSwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWRwMworICB9LAorICB7IC8vIEVudHJ5IDEyNDUKKyAgICAweDEuNjBmYWZiZmQ5NzMwODk5MjAyYjlhMTcwYzM5NzFlODZwLTUxLAorICAgIDB4MS5mNmE3YTI5NTUzODVlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQ2CisgICAgLTB4MS42MGZhZmJmZDk3MzA4OTkyMDJiOWExNzBjMzk3MWU4NnAtNTEsCisgICAgLTB4MS5mNmE3YTI5NTUzODVlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQ3CisgICAgLTB4MS40ZjgyODIwMTM0NjdiYjM2ZmVhMzJmNDc5NzUzZmU3YXAtNTAsCisgICAgMHgxLmY2YTdhMjk1NTM4NWZwMworICB9LAorICB7IC8vIEVudHJ5IDEyNDgKKyAgICAweDEuNGY4MjgyMDEzNDY3YmIzNmZlYTMyZjQ3OTc1M2ZlN2FwLTUwLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTI0OQorICAgIC0weDEuNmEwOWU2NjdmM2JhMGRmMjk5ZDI1ZjgyZjYzOTI1MWZwLTEsCisgICAgMHgxLjA3ZTRjZWY0Y2JkOTZwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNTAKKyAgICAweDEuNmEwOWU2NjdmM2JhMGRmMjk5ZDI1ZjgyZjYzOTI1MWZwLTEsCisgICAgLTB4MS4wN2U0Y2VmNGNiZDk2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUxCisgICAgLTB4MS42YTA5ZTY2N2YzYmI3N2ZjODAzYTUzNDFjNTUyZmUwZnAtMSwKKyAgICAweDEuMDdlNGNlZjRjYmQ5N3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTI1MgorICAgIDB4MS42YTA5ZTY2N2YzYmI3N2ZjODAzYTUzNDFjNTUyZmUwZnAtMSwKKyAgICAtMHgxLjA3ZTRjZWY0Y2JkOTdwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNTMKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2UyMDY2NmEyNDZmZjJhNjJmMDk3cC0xLAorICAgIDB4MS4wN2U0Y2VmNGNiZDk4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjU0CisgICAgMHgxLjZhMDllNjY3ZjNiY2UyMDY2NmEyNDZmZjJhNjJmMDk3cC0xLAorICAgIC0weDEuMDdlNGNlZjRjYmQ5OHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI1NQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkMjUzMWE0M2RwLTEsCisgICAgMHgxLjE0NzVjYzllZWRlZmZwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNTYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkMjUzMWE0M2RwLTEsCisgICAgLTB4MS4xNDc1Y2M5ZWVkZWZmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjU3CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4NjQzNzY1NnAtMSwKKyAgICAweDEuMTQ3NWNjOWVlZGZwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNTgKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODY0Mzc2NTZwLTEsCisgICAgLTB4MS4xNDc1Y2M5ZWVkZnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI1OQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTc1NTQ4NmZwLTEsCisgICAgMHgxLjE0NzVjYzllZWRmMDFwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNjAKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTc1NTQ4NmZwLTEsCisgICAgLTB4MS4xNDc1Y2M5ZWVkZjAxcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYxCisgICAgLTB4MS42YTA5ZTY2N2YzYmVkNTU3NDExZjRlNGMxMTRkNzM1N3AtMSwKKyAgICAweDEuMjEwNmNhNDkxMDA2OHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI2MgorICAgIDB4MS42YTA5ZTY2N2YzYmVkNTU3NDExZjRlNGMxMTRkNzM1N3AtMSwKKyAgICAtMHgxLjIxMDZjYTQ5MTAwNjhwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNjMKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDZiNGQ1YWI3NWE5MDlmOGU1YjRjcC0xLAorICAgIDB4MS4yMTA2Y2E0OTEwMDY5cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjY0CisgICAgMHgxLjZhMDllNjY3ZjNiZDZiNGQ1YWI3NWE5MDlmOGU1YjRjcC0xLAorICAgIC0weDEuMjEwNmNhNDkxMDA2OXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI2NQorICAgIC0weDEuNmEwOWU2NjdmM2JjMDE0Mzc0NGY2NmQzYzNjNTVjZDlwLTEsCisgICAgMHgxLjIxMDZjYTQ5MTAwNmFwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNjYKKyAgICAweDEuNmEwOWU2NjdmM2JjMDE0Mzc0NGY2NmQzYzNjNTVjZDlwLTEsCisgICAgLTB4MS4yMTA2Y2E0OTEwMDZhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjY3CisgICAgLTB4MS4zNGYyNzI5OTNkMTQxNGEyYjM5YmQ4MzcwNWNlYzEyMHAtNDgsCisgICAgMHgxLjJkOTdjN2YzMzIxZDFwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNjgKKyAgICAweDEuMzRmMjcyOTkzZDE0MTRhMmIzOWJkODM3MDVjZWMxMjBwLTQ4LAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI2OQorICAgIC0weDEuYTc5Mzk0YzllOGEwYTUxNTljZGVjMWJhODM2MmI5NjhwLTUxLAorICAgIDB4MS4yZDk3YzdmMzMyMWQycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcwCisgICAgMHgxLmE3OTM5NGM5ZThhMGE1MTU5Y2RlYzFiYTgzNjJiOTY4cC01MSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDJwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNzEKKyAgICAweDEuOTYxYjFhY2Q4NWQ3ZDZiYTk4Yzg0ZjkxMzNkMTBhYmVwLTQ5LAorICAgIDB4MS4yZDk3YzdmMzMyMWQzcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcyCisgICAgLTB4MS45NjFiMWFjZDg1ZDdkNmJhOThjODRmOTEzM2QxMGFiZXAtNDksCisgICAgLTB4MS4yZDk3YzdmMzMyMWQzcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjczCisgICAgMHgxLjZhMDllNjY3ZjNiYTAxNzdjOTczNWRiYjcyZjA5ZjY1cC0xLAorICAgIDB4MS4zYTI4YzU5ZDU0MzM5cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjc0CisgICAgLTB4MS42YTA5ZTY2N2YzYmEwMTc3Yzk3MzVkYmI3MmYwOWY2NXAtMSwKKyAgICAtMHgxLjNhMjhjNTlkNTQzMzlwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNzUKKyAgICAweDEuNmEwOWU2NjdmM2JiNmI4MWFmZGI1MTdhNGU4NTQ4YjRwLTEsCisgICAgMHgxLjNhMjhjNTlkNTQzM2FwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNzYKKyAgICAtMHgxLjZhMDllNjY3ZjNiYjZiODFhZmRiNTE3YTRlODU0OGI0cC0xLAorICAgIC0weDEuM2EyOGM1OWQ1NDMzYXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI3NworICAgIDB4MS42YTA5ZTY2N2YzYmNkNThiOTY0MzQ1MzdjMDEwMGI5YnAtMSwKKyAgICAweDEuM2EyOGM1OWQ1NDMzYnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI3OAorICAgIC0weDEuNmEwOWU2NjdmM2JjZDU4Yjk2NDM0NTM3YzAxMDBiOWJwLTEsCisgICAgLTB4MS4zYTI4YzU5ZDU0MzNicDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjc5CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZDA3MTFmNDM3cC0xLAorICAgIDB4MS40NmI5YzM0Nzc2NGEycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgwCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmQwNzExZjQzN3AtMSwKKyAgICAtMHgxLjQ2YjljMzQ3NzY0YTJwNAorICB9LAorICB7IC8vIEVudHJ5IDEyODEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNzljOWVjODNwLTEsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTNwNAorICB9LAorICB7IC8vIEVudHJ5IDEyODIKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjc5YzllYzgzcC0xLAorICAgIC0weDEuNDZiOWMzNDc3NjRhM3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTI4MworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzgxZTRjZnAtMSwKKyAgICAweDEuNDZiOWMzNDc3NjRhNHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI4NAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4MWU0Y2ZwLTEsCisgICAgLTB4MS40NmI5YzM0Nzc2NGE0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjg1CisgICAgMHgxLjZhMDllNjY3ZjNiZWUxZDIxMTdlNTAxMzY5ZmJmZmVmcC0xLAorICAgIDB4MS41MzRhYzBmMTk4NjBicDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjg2CisgICAgLTB4MS42YTA5ZTY2N2YzYmVlMWQyMTE3ZTUwMTM2OWZiZmZlZnAtMSwKKyAgICAtMHgxLjUzNGFjMGYxOTg2MGJwNAorICB9LAorICB7IC8vIEVudHJ5IDEyODcKKyAgICAweDEuNmEwOWU2NjdmM2JkNzdjODJiMTY1YzU4MDRiN2I4NDNwLTEsCisgICAgMHgxLjUzNGFjMGYxOTg2MGNwNAorICB9LAorICB7IC8vIEVudHJ5IDEyODgKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDc3YzgyYjE2NWM1ODA0YjdiODQzcC0xLAorICAgIC0weDEuNTM0YWMwZjE5ODYwY3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTI4OQorICAgIDB4MS42YTA5ZTY2N2YzYmMwZGJlNDRhZTY4OWIzNTY5OGEyZnAtMSwKKyAgICAweDEuNTM0YWMwZjE5ODYwZHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI5MAorICAgIC0weDEuNmEwOWU2NjdmM2JjMGRiZTQ0YWU2ODliMzU2OThhMmZwLTEsCisgICAgLTB4MS41MzRhYzBmMTk4NjBkcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjkxCisgICAgMHgxLjNkYzU4NWIyYzc0MjE4MTMyNmUwN2M0MDM3NTQ2NGRlcC00OCwKKyAgICAweDEuNWZkYmJlOWJiYTc3NHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI5MgorICAgIC0weDEuM2RjNTg1YjJjNzQyMTgxMzI2ZTA3YzQwMzc1NDY0ZGVwLTQ4LAorICAgIC0weDEuNWZkYmJlOWJiYTc3NHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI5MworICAgIDB4MS5lZTJjMmQ5NjNhMTBjMDk5MzcwM2UyMDQ0MmFkN2I4ZHAtNTEsCisgICAgMHgxLjVmZGJiZTliYmE3NzVwNAorICB9LAorICB7IC8vIEVudHJ5IDEyOTQKKyAgICAtMHgxLmVlMmMyZDk2M2ExMGMwOTkzNzAzZTIwNDQyYWQ3YjhkcC01MSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzVwNAorICB9LAorICB7IC8vIEVudHJ5IDEyOTUKKyAgICAtMHgxLjg0NzRmNDlhNzE3YmNmZDliMjNmMDc3ZWM4ZGQxNzVicC00OSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI5NgorICAgIDB4MS44NDc0ZjQ5YTcxN2JjZmQ5YjIzZjA3N2VjOGRkMTc1YnAtNDksCisgICAgLTB4MS41ZmRiYmU5YmJhNzc2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjk3CisgICAgLTB4MS42YTA5ZTY2N2YzYjlmNGZjZjkxNDViZjNlZjM5ZjkwMXAtMSwKKyAgICAweDEuNmM2Y2JjNDVkYzhkY3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTI5OAorICAgIDB4MS42YTA5ZTY2N2YzYjlmNGZjZjkxNDViZjNlZjM5ZjkwMXAtMSwKKyAgICAtMHgxLjZjNmNiYzQ1ZGM4ZGNwNAorICB9LAorICB7IC8vIEVudHJ5IDEyOTkKKyAgICAtMHgxLjZhMDllNjY3ZjNiYjVmMDZkZjdjNGZiMmQ3NDk3MmFlcC0xLAorICAgIDB4MS42YzZjYmM0NWRjOGRkcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAwCisgICAgMHgxLjZhMDllNjY3ZjNiYjVmMDZkZjdjNGZiMmQ3NDk3MmFlcC0xLAorICAgIC0weDEuNmM2Y2JjNDVkYzhkZHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTMwMQorICAgIC0weDEuNmEwOWU2NjdmM2JjYzkxMGM1ZTQ0MzcwNTU0ZjA1ZjRwLTEsCisgICAgMHgxLjZjNmNiYzQ1ZGM4ZGVwNAorICB9LAorICB7IC8vIEVudHJ5IDEzMDIKKyAgICAweDEuNmEwOWU2NjdmM2JjYzkxMGM1ZTQ0MzcwNTU0ZjA1ZjRwLTEsCisgICAgLTB4MS42YzZjYmM0NWRjOGRlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAzCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNlODU2ODViZHAtMSwKKyAgICAweDEuNzhmZGI5ZWZmZWE0NXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTMwNAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNlODU2ODViZHAtMSwKKyAgICAtMHgxLjc4ZmRiOWVmZmVhNDVwNAorICB9LAorICB7IC8vIEVudHJ5IDEzMDUKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjZjYjRhNDNkcC0xLAorICAgIDB4MS43OGZkYjllZmZlYTQ2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzA2CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjZjYjRhNDNkcC0xLAorICAgIC0weDEuNzhmZGI5ZWZmZWE0NnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTMwNworICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjExMmMyYmNwLTEsCisgICAgMHgxLjc4ZmRiOWVmZmVhNDdwNAorICB9LAorICB7IC8vIEVudHJ5IDEzMDgKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjExMmMyYmNwLTEsCisgICAgLTB4MS43OGZkYjllZmZlYTQ3cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzA5CisgICAgLTB4MS42YTA5ZTY2N2YzYmVlZTRjZTFkZDUxZGFjMjNjNmJkY3AtMSwKKyAgICAweDEuODU4ZWI3OWEyMGJhZXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTMxMAorICAgIDB4MS42YTA5ZTY2N2YzYmVlZTRjZTFkZDUxZGFjMjNjNmJkY3AtMSwKKyAgICAtMHgxLjg1OGViNzlhMjBiYWVwNAorICB9LAorICB7IC8vIEVudHJ5IDEzMTEKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDg0NDJmYjc1NWUxZjY5NzJmNDhmcC0xLAorICAgIDB4MS44NThlYjc5YTIwYmFmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzEyCisgICAgMHgxLjZhMDllNjY3ZjNiZDg0NDJmYjc1NWUxZjY5NzJmNDhmcC0xLAorICAgIC0weDEuODU4ZWI3OWEyMGJhZnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTMxMworICAgIC0weDEuNmEwOWU2NjdmM2JjMWEzOTE1MGQ2YTYyYTY5Zjk2ZGFwLTEsCisgICAgMHgxLjg1OGViNzlhMjBiYjBwNAorICB9LAorICB7IC8vIEVudHJ5IDEzMTQKKyAgICAweDEuNmEwOWU2NjdmM2JjMWEzOTE1MGQ2YTYyYTY5Zjk2ZGFwLTEsCisgICAgLTB4MS44NThlYjc5YTIwYmIwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzE1CisgICAgMHgxLmZhNzI5OWIxNzU3M2QzNzNjNjE1MDk2NTcyYTBkZTA0cC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDYyCisgIH0sCisgIHsgLy8gRW50cnkgMTMxNgorICAgIC0weDEuZmE3Mjk5YjE3NTczZDM3M2M2MTUwOTY1NzJhMGRlMDRwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDYyCisgIH0sCisgIHsgLy8gRW50cnkgMTMxNworICAgIDB4MS5mZmY2ZGZkNDJkYzU0NDMwYmMwNTc2YjAwYTg4YmQ5NHAtMSwKKyAgICAweDEuMHA2MworICB9LAorICB7IC8vIEVudHJ5IDEzMTgKKyAgICAtMHgxLmZmZjZkZmQ0MmRjNTQ0MzBiYzA1NzZiMDBhODhiZDk0cC0xLAorICAgIC0weDEuMHA2MworICB9LAorICB7IC8vIEVudHJ5IDEzMTkKKyAgICAweDEuZTQ1NmI4MThlNzM5NmI0NTk4OTk3OGQ0YjdlYmY3YjNwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzIwCisgICAgLTB4MS5lNDU2YjgxOGU3Mzk2YjQ1OTg5OTc4ZDRiN2ViZjdiM3AtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzIxCisgICAgLTB4MS44NmRjY2EwZDY4OWU3YjU2ZWY3OTQ4MWJlNGE2NDVjNnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAyNgorICB9LAorICB7IC8vIEVudHJ5IDEzMjIKKyAgICAweDEuODZkY2NhMGQ2ODllN2I1NmVmNzk0ODFiZTRhNjQ1YzZwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDI2CisgIH0sCisgIHsgLy8gRW50cnkgMTMyMworICAgIC0weDEuODZkY2M5YmFiYjBhNDBlZTg3NWNhYjNiOWU4OTI3NTdwLTEsCisgICAgMHgxLjBwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzI0CisgICAgMHgxLjg2ZGNjOWJhYmIwYTQwZWU4NzVjYWIzYjllODkyNzU3cC0xLAorICAgIC0weDEuMHAyNworICB9LAorICB7IC8vIEVudHJ5IDEzMjUKKyAgICAtMHgxLjg2ZGNjOTE1NWZlMTgyZDQ1MTU1OTk0MjZiYjE0Yjk0cC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDI3CisgIH0sCisgIHsgLy8gRW50cnkgMTMyNgorICAgIDB4MS44NmRjYzkxNTVmZTE4MmQ0NTE1NTk5NDI2YmIxNGI5NHAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzI3CisgICAgLTB4MS44ZjIyZjg0ZDQyZGExZjU3NDY5ZGZhYWM0NGE4YjczYXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAyMworICB9LAorICB7IC8vIEVudHJ5IDEzMjgKKyAgICAweDEuOGYyMmY4NGQ0MmRhMWY1NzQ2OWRmYWFjNDRhOGI3M2FwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTMyOQorICAgIC0weDEuOGYyMmY4NDMzZDZlZGZlOWE0YWZmOTYyMjUxN2NhYTlwLTEsCisgICAgMHgxLjBwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzMwCisgICAgMHgxLjhmMjJmODQzM2Q2ZWRmZTlhNGFmZjk2MjI1MTdjYWE5cC0xLAorICAgIC0weDEuMHAyNAorICB9LAorICB7IC8vIEVudHJ5IDEzMzEKKyAgICAtMHgxLjhmMjJmODJmMzI5ODVmZTMwNjk5YzZlMTJkOWRmY2UycC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTMzMgorICAgIDB4MS44ZjIyZjgyZjMyOTg1ZmUzMDY5OWM2ZTEyZDlkZmNlMnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzMzCisgICAgLTB4MS44MzdiOWRkZGMxZWFiZDM3OWQ3MjlmNTc1ZmMxMTQ0Y3AtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTMzNAorICAgIDB4MS44MzdiOWRkZGMxZWFiZDM3OWQ3MjlmNTc1ZmMxMTQ0Y3AtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDEzMzUKKyAgICAtMHgxLjgzN2I5ZGRkYzFlYWU3MGNlOTgwNTVhMGU0NTBkOTNjcC0xLAorICAgIDB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzM2CisgICAgMHgxLjgzN2I5ZGRkYzFlYWU3MGNlOTgwNTVhMGU0NTBkOTNjcC0xLAorICAgIC0weDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTMzNworICAgIC0weDEuODM3YjlkZGRjMWViM2FiNzgxOWJjMjMzZGI0Njk3YjVwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMgorICB9LAorICB7IC8vIEVudHJ5IDEzMzgKKyAgICAweDEuODM3YjlkZGRjMWViM2FiNzgxOWJjMjMzZGI0Njk3YjVwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzM5CisgICAgMHgxLmQxOGY2ZWFkMWI0NDZiNGJjYjczYzIzOTBiMzMwZDc1cC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQwCisgICAgLTB4MS5kMThmNmVhZDFiNDQ2YjRiY2I3M2MyMzkwYjMzMGQ3NXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDEzNDEKKyAgICAweDEuZDE4ZjZlYWQxYjQ0NWRmYWI4NDgxODgwMDljOWJiOTVwLTEsCisgICAgMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDEzNDIKKyAgICAtMHgxLmQxOGY2ZWFkMWI0NDVkZmFiODQ4MTg4MDA5YzliYjk1cC0xLAorICAgIC0weDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTM0MworICAgIDB4MS5kMThmNmVhZDFiNDQ0MzU4OTFmMGM1MGUwMTgyNjk4OHAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTM0NAorICAgIC0weDEuZDE4ZjZlYWQxYjQ0NDM1ODkxZjBjNTBlMDE4MjY5ODhwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQ1CisgICAgMHgxLmFlZDU0OGYwOTBjZWQ3OWM3OWNiZjc5MDQ0MWY4MTk3cC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTM0NgorICAgIC0weDEuYWVkNTQ4ZjA5MGNlZDc5Yzc5Y2JmNzkwNDQxZjgxOTdwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTM0NworICAgIDB4MS5hZWQ1NDhmMDkwY2VlMDQxOGRkM2QyMTM4YTFlNzg2NXAtMSwKKyAgICAweDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTM0OAorICAgIC0weDEuYWVkNTQ4ZjA5MGNlZTA0MThkZDNkMjEzOGExZTc4NjVwLTEsCisgICAgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQ5CisgICAgMHgxLmFlZDU0OGYwOTBjZWYxOGJiNWUzODcxYTE0ZDk0NjA5cC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUwCisgICAgLTB4MS5hZWQ1NDhmMDkwY2VmMThiYjVlMzg3MWExNGQ5NDYwOXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDEzNTEKKyAgICAweDEuZWFlZTg3NDRiMDVlZjA3Y2QwYjkwODkxMzA1OTgzMTRwLTIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUyCisgICAgLTB4MS5lYWVlODc0NGIwNWVmMDdjZDBiOTA4OTEzMDU5ODMxNHAtMiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUzCisgICAgMHgxLmVhZWU4NzQ0YjA1ZWZlODc2NGJjMzY0ZmQ4MzdiNjY2cC0yLAorICAgIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTM1NAorICAgIC0weDEuZWFlZTg3NDRiMDVlZmU4NzY0YmMzNjRmZDgzN2I2NjZwLTIsCisgICAgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTM1NQorICAgIDB4MS5lYWVlODc0NGIwNWYxYTljOGNjMjkxY2QyNzk4MTA1MXAtMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzNTYKKyAgICAtMHgxLmVhZWU4NzQ0YjA1ZjFhOWM4Y2MyOTFjZDI3OTgxMDUxcC0yLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzNTcKKyAgICAweDEuZmFhZWVkNGYzMTU3NWMyN2YzOWMxZDdjMDEyYTQ0MTNwLTMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzU4CisgICAgLTB4MS5mYWFlZWQ0ZjMxNTc1YzI3ZjM5YzFkN2MwMTJhNDQxM3AtMywKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzU5CisgICAgMHgxLmZhYWVlZDRmMzE1NzZiYTg5ZGViZGM3MzUxZThiMWFlcC0zLAorICAgIDB4MS4wcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTM2MAorICAgIC0weDEuZmFhZWVkNGYzMTU3NmJhODlkZWJkYzczNTFlOGIxYWVwLTMsCisgICAgLTB4MS4wcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTM2MQorICAgIDB4MS5mYWFlZWQ0ZjMxNTc4YWE5ZjI4YjVhNjFmMzRkY2NiMXAtMywKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMgorICB9LAorICB7IC8vIEVudHJ5IDEzNjIKKyAgICAtMHgxLmZhYWVlZDRmMzE1NzhhYTlmMjhiNWE2MWYzNGRjY2IxcC0zLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMgorICB9LAorICB7IC8vIEVudHJ5IDEzNjMKKyAgICAweDEuZmVhYWVlZTg2ZWUzNGNjMDVlZmYyODc0MGVlN2I0NjlwLTQsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzY0CisgICAgLTB4MS5mZWFhZWVlODZlZTM0Y2MwNWVmZjI4NzQwZWU3YjQ2OXAtNCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzY1CisgICAgMHgxLmZlYWFlZWU4NmVlMzVjYTA2OWE4NjcyMWY4OWY4NWE1cC00LAorICAgIDB4MS4wcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTM2NgorICAgIC0weDEuZmVhYWVlZTg2ZWUzNWNhMDY5YTg2NzIxZjg5Zjg1YTVwLTQsCisgICAgLTB4MS4wcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTM2NworICAgIDB4MS5mZWFhZWVlODZlZTM3YzYwN2VmYWU0N2RjYzA5MmMxY3AtNCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMworICB9LAorICB7IC8vIEVudHJ5IDEzNjgKKyAgICAtMHgxLmZlYWFlZWU4NmVlMzdjNjA3ZWZhZTQ3ZGNjMDkyYzFjcC00LAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMworICB9LAorICB7IC8vIEVudHJ5IDEzNjkKKyAgICAweDEuZmZhYWFlZWVkNGVkOWI1M2E0MDhjMGYyYmMwMmM4ZjlwLTUsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzcwCisgICAgLTB4MS5mZmFhYWVlZWQ0ZWQ5YjUzYTQwOGMwZjJiYzAyYzhmOXAtNSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzcxCisgICAgMHgxLmZmYWFhZWVlZDRlZGFiNGJhNGIzNjVlZDI1YTk1OTVmcC01LAorICAgIDB4MS4wcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTM3MgorICAgIC0weDEuZmZhYWFlZWVkNGVkYWI0YmE0YjM2NWVkMjVhOTU5NWZwLTUsCisgICAgLTB4MS4wcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTM3MworICAgIDB4MS5mZmFhYWVlZWQ0ZWRjYjNiYTYwOGFmZTFmOGY0ZmE2YnAtNSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNAorICB9LAorICB7IC8vIEVudHJ5IDEzNzQKKyAgICAtMHgxLmZmYWFhZWVlZDRlZGNiM2JhNjA4YWZlMWY4ZjRmYTZicC01LAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtNAorICB9LAorICB7IC8vIEVudHJ5IDEzNzUKKyAgICAweDEuZmZlYWFhZWVlZTg2ZDhjY2ZlMzY4Y2Q5NWUzOGYwMDNwLTYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzc2CisgICAgLTB4MS5mZmVhYWFlZWVlODZkOGNjZmUzNjhjZDk1ZTM4ZjAwM3AtNiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzc3CisgICAgMHgxLmZmZWFhYWVlZWU4NmU4Y2FmZTQxMzc2ZDQ3OTE5NTc5cC02LAorICAgIDB4MS4wcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTM3OAorICAgIC0weDEuZmZlYWFhZWVlZTg2ZThjYWZlNDEzNzZkNDc5MTk1NzlwLTYsCisgICAgLTB4MS4wcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTM3OQorICAgIDB4MS5mZmVhYWFlZWVlODcwOGM2ZmU1NjhjOTUxYTQyODA2OXAtNiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNQorICB9LAorICB7IC8vIEVudHJ5IDEzODAKKyAgICAtMHgxLmZmZWFhYWVlZWU4NzA4YzZmZTU2OGM5NTFhNDI4MDY5cC02LAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtNQorICB9LAorICB7IC8vIEVudHJ5IDEzODEKKyAgICAweDEuZmZmYWFhYWVlZWVkM2VkNWM5YzVhYjY1MzhmOWNjZTBwLTcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzgyCisgICAgLTB4MS5mZmZhYWFhZWVlZWQzZWQ1YzljNWFiNjUzOGY5Y2NlMHAtNywKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzgzCisgICAgMHgxLmZmZmFhYWFlZWVlZDRlZDU0OWM2NTYwZjg4OWVlNTMxcC03LAorICAgIDB4MS4wcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTM4NAorICAgIC0weDEuZmZmYWFhYWVlZWVkNGVkNTQ5YzY1NjBmODg5ZWU1MzFwLTcsCisgICAgLTB4MS4wcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTM4NQorICAgIDB4MS5mZmZhYWFhZWVlZWQ2ZWQ0NDljN2FiNjQyN2U4ZmRkNHAtNywKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNgorICB9LAorICB7IC8vIEVudHJ5IDEzODYKKyAgICAtMHgxLmZmZmFhYWFlZWVlZDZlZDQ0OWM3YWI2NDI3ZThmZGQ0cC03LAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtNgorICB9LAorICB7IC8vIEVudHJ5IDEzODcKKyAgICAweDEuZmZmZmZmZmFhYWFhOWFhZWVlZWY2ZWVkNGVkNDQyYTRwLTE1LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xNQorICB9LAorICB7IC8vIEVudHJ5IDEzODgKKyAgICAtMHgxLmZmZmZmZmZhYWFhYTlhYWVlZWVmNmVlZDRlZDQ0MmE0cC0xNSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTE1CisgIH0sCisgIHsgLy8gRW50cnkgMTM4OQorICAgIDB4MS5mZmZmZmZmYWFhYWFhYWFlZWVlZWVlZWQ0ZWQ0ZWQ0ZnAtMTUsCisgICAgMHgxLjBwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTM5MAorICAgIC0weDEuZmZmZmZmZmFhYWFhYWFhZWVlZWVlZWVkNGVkNGVkNGZwLTE1LAorICAgIC0weDEuMHAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzkxCisgICAgMHgxLmZmZmZmZmZhYWFhYWNhYWVlZWVkZWVlZDRlZDY0MmE0cC0xNSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzkyCisgICAgLTB4MS5mZmZmZmZmYWFhYWFjYWFlZWVlZGVlZWQ0ZWQ2NDJhNHAtMTUsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0xNAorICB9LAorICB7IC8vIEVudHJ5IDEzOTMKKyAgICAweDEuZmZmZmZmZmZmZmZmZWVhYWFhYWFhYWFhYWFjYWVlZWVwLTI4LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0yOAorICB9LAorICB7IC8vIEVudHJ5IDEzOTQKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVlYWFhYWFhYWFhYWFhY2FlZWVlcC0yOCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTI4CisgIH0sCisgIHsgLy8gRW50cnkgMTM5NQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZWFhYWFhYWFhYWFhYWFhZWVlZXAtMjgsCisgICAgMHgxLjBwLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTM5NgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmVhYWFhYWFhYWFhYWFhYWVlZWVwLTI4LAorICAgIC0weDEuMHAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzk3CisgICAgMHgxLjAwMDAwMDAwMDAwMDBmNTU1NTU1NTU1NTU1MzU3Nzc3cC0yNywKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzk4CisgICAgLTB4MS4wMDAwMDAwMDAwMDAwZjU1NTU1NTU1NTU1NTM1Nzc3N3AtMjcsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0yNworICB9LAorICB7IC8vIEVudHJ5IDEzOTkKKyAgICAweDEuZmZmZmZmZmZmZmZmZWZmYWFhYWFhYWFhYWFhYjJhYWVwLTMxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0zMQorICB9LAorICB7IC8vIEVudHJ5IDE0MDAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVmZmFhYWFhYWFhYWFhYWIyYWFlcC0zMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTMxCisgIH0sCisgIHsgLy8gRW50cnkgMTQwMQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZhYWFhYWFhYWFhYWFhYWFhZXAtMzEsCisgICAgMHgxLjBwLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTQwMgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmYWFhYWFhYWFhYWFhYWFhYWVwLTMxLAorICAgIC0weDEuMHAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDAzCisgICAgMHgxLjAwMDAwMDAwMDAwMDBmZmQ1NTU1NTU1NTU1NTRkNTU3cC0zMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDA0CisgICAgLTB4MS4wMDAwMDAwMDAwMDAwZmZkNTU1NTU1NTU1NTU0ZDU1N3AtMzAsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0zMAorICB9LAorICB7IC8vIEVudHJ5IDE0MDUKKyAgICAtMHgxLjQ1MmZjOThiMzRlOTZiNjExMzliMDlhN2M4NGE0NGJkcC04LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTQwNgorICAgIDB4MS40NTJmYzk4YjM0ZTk2YjYxMTM5YjA5YTdjODRhNDRiZHAtOCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTQwNworICAgIDB4MS40NTJmYzk4YjM0ZTk2YjYxMTM5YjA5YTdjODRhNDRiZHAtOCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTQwOAorICAgIC0weDEuNDUyZmM5OGIzNGU5NmI2MTEzOWIwOWE3Yzg0YTQ0YmRwLTgsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDA5CisgICAgMHgxLjQ1MmZjOThiMzRlOTZiNjExMzliMDlhN2M4NGE0NGJkcC04LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDEwCisgICAgLTB4MS40NTJmYzk4YjM0ZTk2YjYxMTM5YjA5YTdjODRhNDRiZHAtOCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDE0MTEKKyAgICAweDEuZGFhMzY3N2M2ZWU4YTIyZWI2YzRiMTJjYTEwY2UwMjFwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDE0MTIKKyAgICAtMHgxLmRhYTM2NzdjNmVlOGEyMmViNmM0YjEyY2ExMGNlMDIxcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTQxMworICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDM2ZTJlZHAtNTMsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDE0MTQKKyAgICAtMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzA0MzZlMmVkcC01MywKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDE0MTUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzg4MzFwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDE0MTYKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4ODMxcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQxNworICAgIDB4MS5hZWQ1NDhmMDkwY2VmMThiYjVlMzg3MWExNGQ5NDYwOXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQxOAorICAgIC0weDEuYWVkNTQ4ZjA5MGNlZjE4YmI1ZTM4NzFhMTRkOTQ2MDlwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDE5CisgICAgMHgxLmFlZDU0OGYwOTBjZWUwNDE4ZGQzZDIxMzhhMWU3ODY1cC0xLAorICAgIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDIwCisgICAgLTB4MS5hZWQ1NDhmMDkwY2VlMDQxOGRkM2QyMTM4YTFlNzg2NXAtMSwKKyAgICAtMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDE0MjEKKyAgICAweDEuYWVkNTQ4ZjA5MGNlZDc5Yzc5Y2JmNzkwNDQxZjgxOTdwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDIyCisgICAgLTB4MS5hZWQ1NDhmMDkwY2VkNzljNzljYmY3OTA0NDFmODE5N3AtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDIzCisgICAgMHgxLjZhMDllNjY3ZjNiY2M1ZTlmZWUzNTJmNTBmZDNmNGU5cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQyNAorICAgIC0weDEuNmEwOWU2NjdmM2JjYzVlOWZlZTM1MmY1MGZkM2Y0ZTlwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQyNQorICAgIDB4MS4wMDAwMDAwMDAwMDAwZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDE0MjYKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDBmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIyLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDE0MjcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDI4CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMywKKyAgICAtMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDI5CisgICAgMHgxLmZmZmZmZmZmZmZmZmRmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTQzMAorICAgIC0weDEuZmZmZmZmZmZmZmZmZGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTQzMQorICAgIDB4MS5mZmZmZmZmZmZmZmZiZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmY3AtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDE0MzIKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmJmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIC0weDEuZmZmZmZmZmZmZmZmY3AtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDE0MzMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwNzQsCisgICAgMHgxLjBwLTEwNzMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDM0CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTA3NCwKKyAgICAtMHgxLjBwLTEwNzMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDM1CisgICAgMC4wLAorICAgIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgMTQzNgorICAgIC0wLjAsCisgICAgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgMTQzNworICAgIDAuMCwKKyAgICAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDM4CisgICAgLTAuMCwKKyAgICAtMC4wCisgIH0sCit9OworI2VuZGlmIC8vIF9fQklPTklDX18KKworVEVTVChtYXRoX3Npbiwgc2luX2ludGVsKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihnX3Npbl9pbnRlbF9kYXRhKS9zaXplb2Yoc2luX2ludGVsX2RhdGFfdCk7IGkrKykgeworICAgIEVYUEVDVF9ET1VCTEVfRVEoZ19zaW5faW50ZWxfZGF0YVtpXS5leHBlY3RlZCwgc2luKGdfc2luX2ludGVsX2RhdGFbaV0uY2FsbF9kYXRhKSkgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKKyAgfQorI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWF0aF9zaW5jb3NfdGVzdC5jcHAgYi90ZXN0cy9tYXRoX3NpbmNvc190ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmFiMmMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbWF0aF9zaW5jb3NfdGVzdC5jcHAKQEAgLTAsMCArMSw0Nzg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCit0eXBlZGVmIHN0cnVjdCB7CisgIGRvdWJsZSBzaW5fZXhwZWN0ZWQ7CisgIGRvdWJsZSBjb3NfZXhwZWN0ZWQ7CisgIGRvdWJsZSBjYWxsX2RhdGE7Cit9IHNpbmNvc19pbnRlbF9kYXRhX3Q7CisKK3N0YXRpYyBzaW5jb3NfaW50ZWxfZGF0YV90IGdfc2luY29zX2ludGVsX2RhdGFbXSA9IHsKKyAgeyAvLyBFbnRyeSAwCisgICAgLTB4MS5jZTlhOTRlYTljMmFkOTU1OTdiMTE5M2IyMzAwZDE5YXAtMSwKKyAgICAtMHgxLmI2ZDMwNTc3NzZkYzM4MzM1YjE2NzQ1ZjJkNzU2YWI2cC0yLAorICAgIC0weDEuMDFjMDAwMDAzcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMQorICAgIDB4MS5jZTlhOTRlYTljMmFkOTU1OTdiMTE5M2IyMzAwZDE5YXAtMSwKKyAgICAtMHgxLmI2ZDMwNTc3NzZkYzM4MzM1YjE2NzQ1ZjJkNzU2YWI2cC0yLAorICAgIDB4MS4wMWMwMDAwMDNwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyCisgICAgLTB4MS5jZTJjYWQyZjkyMTU3MTUzYjRhOWUwMTJlMzQ2MWQwYXAtMSwKKyAgICAtMHgxLmI4YTE0Yzc0NWJkNGM4MzJiYWU5Nzg1NjU1YzkxYjYwcC0yLAorICAgIC0weDEuMDFmZmZjMDgwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMworICAgIDB4MS5jZTJjYWQyZjkyMTU3MTUzYjRhOWUwMTJlMzQ2MWQwYXAtMSwKKyAgICAtMHgxLmI4YTE0Yzc0NWJkNGM4MzJiYWU5Nzg1NjU1YzkxYjYwcC0yLAorICAgIDB4MS4wMWZmZmMwODBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0CisgICAgLTB4MS4xYTc0NDQ3MjZmNWU5ZGMyZWUwNjlkYzNlNTAwYWI0ZnAtMiwKKyAgICAweDEuZWMyMzE4MDI5MTdiZGZmYTYyN2FiNmE1OWFiZTNmN2RwLTEsCisgICAgLTB4MS4xZTJhMTU2M2UwNjhlcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDUKKyAgICAweDEuMWE3NDQ0NzI2ZjVlOWRjMmVlMDY5ZGMzZTUwMGFiNGZwLTIsCisgICAgMHgxLmVjMjMxODAyOTE3YmRmZmE2MjdhYjZhNTlhYmUzZjdkcC0xLAorICAgIDB4MS4xZTJhMTU2M2UwNjhlcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDYKKyAgICAtMHgxLmVmZGFiNWU2NWM4ZmQ1NTBkNDY4OGI2Mjc5MWZlNjk0cC0xLAorICAgIDB4MS5mZTQxMjNkMjY2Y2EzN2ZhZWVlODIyMTM4ZWIzMzFkM3AtMywKKyAgICAtMHgxLjgzZWYyMTk2ZjkyZjBwODcsCisgIH0sCisgIHsgLy8gRW50cnkgNworICAgIDB4MS5lZmRhYjVlNjVjOGZkNTUwZDQ2ODhiNjI3OTFmZTY5NHAtMSwKKyAgICAweDEuZmU0MTIzZDI2NmNhMzdmYWVlZTgyMjEzOGViMzMxZDNwLTMsCisgICAgMHgxLjgzZWYyMTk2ZjkyZjBwODcsCisgIH0sCisgIHsgLy8gRW50cnkgOAorICAgIC0weDEuZWZmNWVkYjFhZDQxNmNiNmNhMzEwOWYxYzBkZmMzNGFwLTEsCisgICAgMHgxLmZjOTkzNWE3NDgxNzE3ZmE4YWVjYTdhOWM1ODMzMDg0cC0zLAorICAgIC0weDEuYTQ4NmQ3OTc2NGZiOHA4NiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5CisgICAgMHgxLmVmZjVlZGIxYWQ0MTZjYjZjYTMxMDlmMWMwZGZjMzRhcC0xLAorICAgIDB4MS5mYzk5MzVhNzQ4MTcxN2ZhOGFlY2E3YTljNTgzMzA4NHAtMywKKyAgICAweDEuYTQ4NmQ3OTc2NGZiOHA4NiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMAorICAgIC0weDEuYjc4ZjJjOTdjODgwMjgzOTZlYzk0YmE5ZWE1OGRkNjhwLTIsCisgICAgMHgxLmNlNmRlYTY3ODhmZGU0MjVmNjhmZTMzYjBmZmNjMjQ0cC0xLAorICAgIC0weDEuYzY1MTczNTU2Y2NmYnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMQorICAgIDB4MS5iNzhmMmM5N2M4ODAyODM5NmVjOTRiYTllYTU4ZGQ2OHAtMiwKKyAgICAweDEuY2U2ZGVhNjc4OGZkZTQyNWY2OGZlMzNiMGZmY2MyNDRwLTEsCisgICAgMHgxLmM2NTE3MzU1NmNjZmJwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMTIKKyAgICAtMHgxLmM3ODg1YWVmMzNhOTRmZmM1YWUwNmJlOTQ0NGVmYWQ1cC0zLAorICAgIDB4MS5mMzJjODc5MjAwNjM0OWIzM2IwOWZlNTdmODBkOWVkMXAtMSwKKyAgICAtMHgxLmNiNnAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMworICAgIDB4MS5jNzg4NWFlZjMzYTk0ZmZjNWFlMDZiZTk0NDRlZmFkNXAtMywKKyAgICAweDEuZjMyYzg3OTIwMDYzNDliMzNiMDlmZTU3ZjgwZDllZDFwLTEsCisgICAgMHgxLmNiNnAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNAorICAgIC0weDEuZjc0YTk3YWJiNDdiYzgyM2U5MmViOWQ2NmYxZDhiNTRwLTMsCisgICAgMHgxLmYwNGM4NTllMDYyYjkyMDJhYTJiOWJmMDQ4NmI1YWZkcC0xLAorICAgIC0weDEuZmM3ZmZmZmZmZmZmZXAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNQorICAgIDB4MS5mNzRhOTdhYmI0N2JjODIzZTkyZWI5ZDY2ZjFkOGI1NHAtMywKKyAgICAweDEuZjA0Yzg1OWUwNjJiOTIwMmFhMmI5YmYwNDg2YjVhZmRwLTEsCisgICAgMHgxLmZjN2ZmZmZmZmZmZmVwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMTYKKyAgICAweDEuMDAwMDAwMDAwMDAwMmZmZmQ1NTU1NTU1NTU1NTNkNTVwLTMyLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZlZmZmZmZmZmZmZmZmYTBwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDNwLTMyLAorICB9LAorICB7IC8vIEVudHJ5IDE3CisgICAgLTB4MS4wMDAwMDAwMDAwMDAyZmZmZDU1NTU1NTU1NTU1M2Q1NXAtMzIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmVmZmZmZmZmZmZmZmZhMHAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDNwLTMyLAorICB9LAorICB7IC8vIEVudHJ5IDE4CisgICAgMHgxLmQxOGY2ZWFkMTk5YTNiOTU0MzBkNTUxNmU5M2M4ZDdicC0xLAorICAgIC0weDEuYWEyMjY1NzUzZTY2ODdmZGU3NjI2OWVlOTJhNzg0YjBwLTIsCisgICAgMHgxLjAwMDAwMDAwMDEwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTkKKyAgICAtMHgxLmQxOGY2ZWFkMTk5YTNiOTU0MzBkNTUxNmU5M2M4ZDdicC0xLAorICAgIC0weDEuYWEyMjY1NzUzZTY2ODdmZGU3NjI2OWVlOTJhNzg0YjBwLTIsCisgICAgLTB4MS4wMDAwMDAwMDAxMHAxLAorICB9LAorICB7IC8vIEVudHJ5IDIwCisgICAgMHgxLmI2NGQ1OWRkOGE1MjQ5ZTAxMTEzZjRjYjM3ZDEzYzQwcC0xLAorICAgIC0weDEuMDhhNDQ1YWQ0NzM3ZTgwMDYwY2YzYTVmZjk0ZDMwNjdwLTEsCisgICAgMHgxLjAwMXA1NTcsCisgIH0sCisgIHsgLy8gRW50cnkgMjEKKyAgICAtMHgxLmI2NGQ1OWRkOGE1MjQ5ZTAxMTEzZjRjYjM3ZDEzYzQwcC0xLAorICAgIC0weDEuMDhhNDQ1YWQ0NzM3ZTgwMDYwY2YzYTVmZjk0ZDMwNjdwLTEsCisgICAgLTB4MS4wMDFwNTU3LAorICB9LAorICB7IC8vIEVudHJ5IDIyCisgICAgMHgxLmNlNzdmMjRmZDRkOWE3OTAxMjVmZjUyOTBhNjJiN2YxcC0xLAorICAgIC0weDEuYjc2NGY0MGM5NzE2YjgzNGJiNzI1ODkzNDhjZmE0YjhwLTIsCisgICAgMHgxLjAxZDQzMTM3NTc0ODJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMworICAgIC0weDEuY2U3N2YyNGZkNGQ5YTc5MDEyNWZmNTI5MGE2MmI3ZjFwLTEsCisgICAgLTB4MS5iNzY0ZjQwYzk3MTZiODM0YmI3MjU4OTM0OGNmYTRiOHAtMiwKKyAgICAtMHgxLjAxZDQzMTM3NTc0ODJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNAorICAgIDB4MS5jZTM5YjdkZjdmNGFjYjgxZTM3YzUzMjYzOGY5YmY0OXAtMSwKKyAgICAtMHgxLmI4NmE5MDhmMDVjMGE4MzllMTlkNGFhNjMxNTZkMzJicC0yLAorICAgIDB4MS4wMWY4NjdkNDRiYzgycDEsCisgIH0sCisgIHsgLy8gRW50cnkgMjUKKyAgICAtMHgxLmNlMzliN2RmN2Y0YWNiODFlMzdjNTMyNjM4ZjliZjQ5cC0xLAorICAgIC0weDEuYjg2YTkwOGYwNWMwYTgzOWUxOWQ0YWE2MzE1NmQzMmJwLTIsCisgICAgLTB4MS4wMWY4NjdkNDRiYzgycDEsCisgIH0sCisgIHsgLy8gRW50cnkgMjYKKyAgICAweDEuY2U3MDA0NmFjYjgwZGU3NWU5MDM0NjhjZWE4YWI0MjdwLTEsCisgICAgLTB4MS5iNzg2NTQ3NjZjNzY0ODNjZTkwYTBiYzJhYzk1N2I1OXAtMiwKKyAgICAweDEuMDk4NjBlOGVkMWU5MHAzLAorICB9LAorICB7IC8vIEVudHJ5IDI3CisgICAgLTB4MS5jZTcwMDQ2YWNiODBkZTc1ZTkwMzQ2OGNlYThhYjQyN3AtMSwKKyAgICAtMHgxLmI3ODY1NDc2NmM3NjQ4M2NlOTBhMGJjMmFjOTU3YjU5cC0yLAorICAgIC0weDEuMDk4NjBlOGVkMWU5MHAzLAorICB9LAorICB7IC8vIEVudHJ5IDI4CisgICAgMHgxLmNlNjg1NjRlMjUxZjE2Mjg1ZDYwNGUwNDY1N2YzMGU2cC0xLAorICAgIC0weDEuYjdhNmE1NmY1Nzk2NjgzYzU4ZTAxYjViNzA2MWMxNmNwLTIsCisgICAgMHgxLjA5ODcyY2NlNTFmYmRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOQorICAgIC0weDEuY2U2ODU2NGUyNTFmMTYyODVkNjA0ZTA0NjU3ZjMwZTZwLTEsCisgICAgLTB4MS5iN2E2YTU2ZjU3OTY2ODNjNThlMDFiNWI3MDYxYzE2Y3AtMiwKKyAgICAtMHgxLjA5ODcyY2NlNTFmYmRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMAorICAgIC0weDEuY2U4YWIzMmYzYjAwMjA2NWYyZDk5ZTU3YTEwNzI3MDVwLTEsCisgICAgLTB4MS5iNzE1Zjc2OWNmMWU1ODJlMjNhMTVlOGI4MGE3MDQ4NnAtMiwKKyAgICAweDEuMTEzYjEzYjEzYjIyNHAyLAorICB9LAorICB7IC8vIEVudHJ5IDMxCisgICAgMHgxLmNlOGFiMzJmM2IwMDIwNjVmMmQ5OWU1N2ExMDcyNzA1cC0xLAorICAgIC0weDEuYjcxNWY3NjljZjFlNTgyZTIzYTE1ZThiODBhNzA0ODZwLTIsCisgICAgLTB4MS4xMTNiMTNiMTNiMjI0cDIsCisgIH0sCisgIHsgLy8gRW50cnkgMzIKKyAgICAweDEuYzJkZjU3MTg4ZDMwOTllMWJhZjdmNzIxZDczMThiZDlwLTEsCisgICAgMHgxLmU1MzZhZTM5NWRmY2UwMDE0NTc5NzBjOGFhYWMzYjFmcC0yLAorICAgIDB4MS4xM2NwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMworICAgIC0weDEuYzJkZjU3MTg4ZDMwOTllMWJhZjdmNzIxZDczMThiZDlwLTEsCisgICAgMHgxLmU1MzZhZTM5NWRmY2UwMDE0NTc5NzBjOGFhYWMzYjFmcC0yLAorICAgIC0weDEuMTNjcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzQKKyAgICAweDEuYjdkY2Q3Yzg1YzgyMDgzOGVlY2ZhNTNlNTIwNzhiMmJwLTIsCisgICAgLTB4MS5jZTViNzM3MjA0NmVhYTQ2N2Y0OWUxZGViZTM2NjJkZnAtMSwKKyAgICAweDEuMWY2MjhjNTYxMDcxN3AzLAorICB9LAorICB7IC8vIEVudHJ5IDM1CisgICAgLTB4MS5iN2RjZDdjODVjODIwODM4ZWVjZmE1M2U1MjA3OGIyYnAtMiwKKyAgICAtMHgxLmNlNWI3MzcyMDQ2ZWFhNDY3ZjQ5ZTFkZWJlMzY2MmRmcC0xLAorICAgIC0weDEuMWY2MjhjNTYxMDcxN3AzLAorICB9LAorICB7IC8vIEVudHJ5IDM2CisgICAgMHgxLmZmMzQ2NmIxZWM4YmVkOTc4ZjdjMjcwMThiYzA5Njc4cC0xLAorICAgIDB4MS5jODZjYWEwNDkyOTg1N2MyODE2ZDMwNjkzZmNlYWIzNnAtNSwKKyAgICAweDEuMWY2OTlkNzA4ZDQ5N3AxNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNworICAgIC0weDEuZmYzNDY2YjFlYzhiZWQ5NzhmN2MyNzAxOGJjMDk2NzhwLTEsCisgICAgMHgxLmM4NmNhYTA0OTI5ODU3YzI4MTZkMzA2OTNmY2VhYjM2cC01LAorICAgIC0weDEuMWY2OTlkNzA4ZDQ5N3AxNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOAorICAgIDB4MS5iNjFkNmFmZjc1NGMyODM1Njk3YjVhYTUzMzliNjM1Y3AtMiwKKyAgICAtMHgxLmNlYzU5YjJkMjMwYTgzYTg2ODA0NzMwYWZkZjFiZWNmcC0xLAorICAgIDB4MS4xZjcyMDY0NjIwZWY0cDMsCisgIH0sCisgIHsgLy8gRW50cnkgMzkKKyAgICAtMHgxLmI2MWQ2YWZmNzU0YzI4MzU2OTdiNWFhNTMzOWI2MzVjcC0yLAorICAgIC0weDEuY2VjNTliMmQyMzBhODNhODY4MDQ3MzBhZmRmMWJlY2ZwLTEsCisgICAgLTB4MS4xZjcyMDY0NjIwZWY0cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNDAKKyAgICAweDEuY2RmNjA0ODM4ZTQ5OWJkNWQ5ZDI3MTIzOTdiMjNjMDdwLTEsCisgICAgMHgxLmI5ODY1NmI4NWJjMjY4MzIxNmE5NDczMzVlYTY4OWZicC0yLAorICAgIDB4MS4xZmZmZmZkY2VmZTQwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDEKKyAgICAtMHgxLmNkZjYwNDgzOGU0OTliZDVkOWQyNzEyMzk3YjIzYzA3cC0xLAorICAgIDB4MS5iOTg2NTZiODViYzI2ODMyMTZhOTQ3MzM1ZWE2ODlmYnAtMiwKKyAgICAtMHgxLjFmZmZmZmRjZWZlNDBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MgorICAgIDB4MS5jZTkxMzMyOTY5NmNkM2ZhNDcxYzdiMDA4OTEwNzVkNHAtMSwKKyAgICAweDEuYjZmYTkyZTVmNTc2YzgzNGZjMTVkODk5OGZjY2M3MjhwLTIsCisgICAgMHgxLjIwYjQ3OGM0YWE5ZWRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MworICAgIC0weDEuY2U5MTMzMjk2OTZjZDNmYTQ3MWM3YjAwODkxMDc1ZDRwLTEsCisgICAgMHgxLmI2ZmE5MmU1ZjU3NmM4MzRmYzE1ZDg5OThmY2NjNzI4cC0yLAorICAgIC0weDEuMjBiNDc4YzRhYTllZHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQ0CisgICAgMHgxLmNlYWJjMDI1ZWQzZDU3MzIzZmNhNTE2MjZkMmJmMjhjcC0xLAorICAgIDB4MS5iNjhhOTg4NjA0YTdlODNjZDM4MmZkZjMyOWQwZDc2ZXAtMiwKKyAgICAweDEuMjBkMzc0NTZlNzQ1M3AwLAorICB9LAorICB7IC8vIEVudHJ5IDQ1CisgICAgLTB4MS5jZWFiYzAyNWVkM2Q1NzMyM2ZjYTUxNjI2ZDJiZjI4Y3AtMSwKKyAgICAweDEuYjY4YTk4ODYwNGE3ZTgzY2QzODJmZGYzMjlkMGQ3NmVwLTIsCisgICAgLTB4MS4yMGQzNzQ1NmU3NDUzcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDYKKyAgICAweDEuY2ViMDIyYjZiNWFlMDdhMjY3ZjBlN2RjNmExNGEyMTRwLTEsCisgICAgMHgxLmI2NzgxNmI4MGVkMGE4MmQxMWFlZTdhYWE4MDA4ZmVkcC0yLAorICAgIDB4MS4yMGQ4OTMwY2RmNjAycDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDcKKyAgICAtMHgxLmNlYjAyMmI2YjVhZTA3YTI2N2YwZTdkYzZhMTRhMjE0cC0xLAorICAgIDB4MS5iNjc4MTZiODBlZDBhODJkMTFhZWU3YWFhODAwOGZlZHAtMiwKKyAgICAtMHgxLjIwZDg5MzBjZGY2MDJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OAorICAgIC0weDEuOWU2MmFjYTUzYzY2MDgwMWI2MjYwNDAxOGE5ZDE5ZGRwLTQsCisgICAgLTB4MS5mZDVmODMwZjg2MGYzMzNkZTQ5MGE0MmMyZjA0NTAxMnAtMSwKKyAgICAweDEuMzBkNWY4ZTU0YjZkOHAzLAorICB9LAorICB7IC8vIEVudHJ5IDQ5CisgICAgMHgxLjllNjJhY2E1M2M2NjA4MDFiNjI2MDQwMThhOWQxOWRkcC00LAorICAgIC0weDEuZmQ1ZjgzMGY4NjBmMzMzZGU0OTBhNDJjMmYwNDUwMTJwLTEsCisgICAgLTB4MS4zMGQ1ZjhlNTRiNmQ4cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNTAKKyAgICAweDEuM2VkMmFlZWZlYWZjOTdmMGVlMGZiM2ZhNGZiNDYwNTJwLTMsCisgICAgMHgxLmY5YzIwMWU0ZWI2NWZkNWU1ZGJkOTc2NjI1MDVmZjZmcC0xLAorICAgIDB4MS40MDJwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTEKKyAgICAtMHgxLjNlZDJhZWVmZWFmYzk3ZjBlZTBmYjNmYTRmYjQ2MDUycC0zLAorICAgIDB4MS5mOWMyMDFlNGViNjVmZDVlNWRiZDk3NjYyNTA1ZmY2ZnAtMSwKKyAgICAtMHgxLjQwMnAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MgorICAgIC0weDEuZmY2NWQyZmY0YThjYzQxY2I4YmI2ZGYzMDZlMDdiZTdwLTEsCisgICAgLTB4MS44ZDM4MjJlZjI2MGE1N2IzODU2MTFmMDg1NzdiNzVkOXAtNSwKKyAgICAweDEuNGE0MGVjMTQ5YTY2ZnAxNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MworICAgIDB4MS5mZjY1ZDJmZjRhOGNjNDFjYjhiYjZkZjMwNmUwN2JlN3AtMSwKKyAgICAtMHgxLjhkMzgyMmVmMjYwYTU3YjM4NTYxMWYwODU3N2I3NWQ5cC01LAorICAgIC0weDEuNGE0MGVjMTQ5YTY2ZnAxNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NAorICAgIDB4MS40ZmZmZmZmZmZmOWY4ODAwMDAwMDA4NGYyMmNjY2NjY3AtMjAsCisgICAgMHgxLmZmZmZmZmZmZmU0NzAwMDAwMDAwM2Y0ZWJmZmZmZmZjcC0xLAorICAgIDB4MS41cC0yMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NQorICAgIC0weDEuNGZmZmZmZmZmZjlmODgwMDAwMDAwODRmMjJjY2NjY2NwLTIwLAorICAgIDB4MS5mZmZmZmZmZmZlNDcwMDAwMDAwMDNmNGViZmZmZmZmY3AtMSwKKyAgICAtMHgxLjVwLTIwLAorICB9LAorICB7IC8vIEVudHJ5IDU2CisgICAgMHgxLjc5YzU5OWUxZTkxYWY4MDlmOWU2OTc3MTc5NmNkNTA3cC0xLAorICAgIC0weDEuNTk5NzA2NWNiOTY1MzcwMmQ0YzlkOWI2YmM1OGY3NjhwLTEsCisgICAgMHgxLjUyOTRhNTI5NGE1MjhwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NworICAgIC0weDEuNzljNTk5ZTFlOTFhZjgwOWY5ZTY5NzcxNzk2Y2Q1MDdwLTEsCisgICAgLTB4MS41OTk3MDY1Y2I5NjUzNzAyZDRjOWQ5YjZiYzU4Zjc2OHAtMSwKKyAgICAtMHgxLjUyOTRhNTI5NGE1MjhwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OAorICAgIC0weDEuZmY3OTk2MDczYmJhNmM2ZWRlNDZmNTJkNDQ1NjIzYzlwLTEsCisgICAgMHgxLjcyZTc0Mzc5MTBjYzA4M2ZhYzRmNmY2MmEyZWIzOGFmcC01LAorICAgIDB4MS41NzQzMWFhY2Y1YzU4cDE2LAorICB9LAorICB7IC8vIEVudHJ5IDU5CisgICAgMHgxLmZmNzk5NjA3M2JiYTZjNmVkZTQ2ZjUyZDQ0NTYyM2M5cC0xLAorICAgIDB4MS43MmU3NDM3OTEwY2MwODNmYWM0ZjZmNjJhMmViMzhhZnAtNSwKKyAgICAtMHgxLjU3NDMxYWFjZjVjNThwMTYsCisgIH0sCisgIHsgLy8gRW50cnkgNjAKKyAgICAweDEuZjgxYzRmOWE1MTgxNDYyYWU3MzVlMjEyMjJkNDk4YzRwLTEsCisgICAgMHgxLjY2MjNkMmViNmFkZDFmZmMzOThhM2MyMDQ0N2Y5ZDA2cC0zLAorICAgIDB4MS42NTJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MQorICAgIC0weDEuZjgxYzRmOWE1MTgxNDYyYWU3MzVlMjEyMjJkNDk4YzRwLTEsCisgICAgMHgxLjY2MjNkMmViNmFkZDFmZmMzOThhM2MyMDQ0N2Y5ZDA2cC0zLAorICAgIC0weDEuNjUycDAsCisgIH0sCisgIHsgLy8gRW50cnkgNjIKKyAgICAtMHgxLmM0MmEwOTEwMjZmNDUyODZkMDYxMDg1YzVjOWZkZGI3cC0xLAorICAgIDB4MS5lMDYxOTk2MGExMWM2ODAxZTgwYWIwYzllMjVmODlkMHAtMiwKKyAgICAweDEuNmY3YmRlZjdiZGVmNHAzLAorICB9LAorICB7IC8vIEVudHJ5IDYzCisgICAgMHgxLmM0MmEwOTEwMjZmNDUyODZkMDYxMDg1YzVjOWZkZGI3cC0xLAorICAgIDB4MS5lMDYxOTk2MGExMWM2ODAxZTgwYWIwYzllMjVmODlkMHAtMiwKKyAgICAtMHgxLjZmN2JkZWY3YmRlZjRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NAorICAgIC0weDEuZjljNDM2NGJhMTk4ZjdlMzJiNjcyMzY2YzM0YjhiN2RwLTIsCisgICAgMHgxLmJkMzA5ZjNkZmNkNDg5MTI4ZTVlY2JjMzE2ODBjNGE1cC0xLAorICAgIDB4MS43MTFwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NQorICAgIDB4MS5mOWM0MzY0YmExOThmN2UzMmI2NzIzNjZjMzRiOGI3ZHAtMiwKKyAgICAweDEuYmQzMDlmM2RmY2Q0ODkxMjhlNWVjYmMzMTY4MGM0YTVwLTEsCisgICAgLTB4MS43MTFwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NgorICAgIC0weDEuYmU2ZTViZWExYTRkODgzMzFmZDhlNDYwY2Q2NzcyNDVwLTIsCisgICAgMHgxLmNjYzdkOTliNTdhYjU0ZjA0ZWQ5MThlYzE0YTI1MDdkcC0xLAorICAgIDB4MS43NTQwYWE1ODgyZGMycDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjcKKyAgICAweDEuYmU2ZTViZWExYTRkODgzMzFmZDhlNDYwY2Q2NzcyNDVwLTIsCisgICAgMHgxLmNjYzdkOTliNTdhYjU0ZjA0ZWQ5MThlYzE0YTI1MDdkcC0xLAorICAgIC0weDEuNzU0MGFhNTg4MmRjMnAyLAorICB9LAorICB7IC8vIEVudHJ5IDY4CisgICAgMHgxLmM5MGM4NDFkMTQ5NGMwNzU3ZThlYmIxNjcyNWQ4NzE4cC0zLAorICAgIC0weDEuZjMxNjVhMGIzMDZiMWZmY2Y4ZDExOTA5ZmZmYmExNjdwLTEsCisgICAgMHgxLjc1NTBkMjhmZmNjYzRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OQorICAgIC0weDEuYzkwYzg0MWQxNDk0YzA3NTdlOGViYjE2NzI1ZDg3MThwLTMsCisgICAgLTB4MS5mMzE2NWEwYjMwNmIxZmZjZjhkMTE5MDlmZmZiYTE2N3AtMSwKKyAgICAtMHgxLjc1NTBkMjhmZmNjYzRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MAorICAgIC0weDEuYjY0OWQ1NzdlMWIyYTgzOWQyNWQxOTgwN2ViMmM1NjRwLTIsCisgICAgMHgxLmNlYmIxNzVkMzZiOTM0YmMwOTk1YTBiZTM1Y2RlMWVlcC0xLAorICAgIDB4MS43NWQxMWZhMGQ2MjQycDIsCisgIH0sCisgIHsgLy8gRW50cnkgNzEKKyAgICAweDEuYjY0OWQ1NzdlMWIyYTgzOWQyNWQxOTgwN2ViMmM1NjRwLTIsCisgICAgMHgxLmNlYmIxNzVkMzZiOTM0YmMwOTk1YTBiZTM1Y2RlMWVlcC0xLAorICAgIC0weDEuNzVkMTFmYTBkNjI0MnAyLAorICB9LAorICB7IC8vIEVudHJ5IDcyCisgICAgMHgxLmI3ODczMGQxMWQ4NDA4MzIwZDIxY2E2YWQyYmUzMzY4cC0yLAorICAgIC0weDEuY2U2ZmQwMGVkMTY1MDFjYjEzYjkwODQ3N2UxMDI4MTFwLTEsCisgICAgMHgxLmJjNTA0NDRlZTYyODZwOSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MworICAgIC0weDEuYjc4NzMwZDExZDg0MDgzMjBkMjFjYTZhZDJiZTMzNjhwLTIsCisgICAgLTB4MS5jZTZmZDAwZWQxNjUwMWNiMTNiOTA4NDc3ZTEwMjgxMXAtMSwKKyAgICAtMHgxLmJjNTA0NDRlZTYyODZwOSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NAorICAgIDB4MS5iNmIwYjA5OTZlN2U2ODM1YWNkYjM2ZTU1YTA4YmYxNXAtMiwKKyAgICAweDEuY2VhMmI4Y2M1NTIxODFkMGIwYWVhZDI3ZTk0YTkxNjhwLTEsCisgICAgMHgxLmM1NWIyYmYxOWNlNTRwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNzUKKyAgICAtMHgxLmI2YjBiMDk5NmU3ZTY4MzVhY2RiMzZlNTVhMDhiZjE1cC0yLAorICAgIDB4MS5jZWEyYjhjYzU1MjE4MWQwYjBhZWFkMjdlOTRhOTE2OHAtMSwKKyAgICAtMHgxLmM1NWIyYmYxOWNlNTRwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNzYKKyAgICAweDEuYjZmYWNmNjY1ODkxNDgyZWE4YzYxZjVjYTMyZjI4MGRwLTIsCisgICAgMHgxLmNlOTEyNGNlYzQxNTA1NTlkOTQ3YTUyNmFkOThmMmY0cC0xLAorICAgIDB4MS5jNWFkMzRmNWY0NzJhcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDc3CisgICAgLTB4MS5iNmZhY2Y2NjU4OTE0ODJlYThjNjFmNWNhMzJmMjgwZHAtMiwKKyAgICAweDEuY2U5MTI0Y2VjNDE1MDU1OWQ5NDdhNTI2YWQ5OGYyZjRwLTEsCisgICAgLTB4MS5jNWFkMzRmNWY0NzJhcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDc4CisgICAgLTB4MS5mODNhMDk4M2RkMTVkMDAzMDFlMmRmMjFlM2JlZTYzNXAtMiwKKyAgICAtMHgxLmJkYTA1OTZkZjA2MDAwNGQ1Nzk1NjNhZDhjNjdkMTUxcC0xLAorICAgIDB4MS5kNDA2N2M2MGY0NzFlcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNzkKKyAgICAweDEuZjgzYTA5ODNkZDE1ZDAwMzAxZTJkZjIxZTNiZWU2MzVwLTIsCisgICAgLTB4MS5iZGEwNTk2ZGYwNjAwMDRkNTc5NTYzYWQ4YzY3ZDE1MXAtMSwKKyAgICAtMHgxLmQ0MDY3YzYwZjQ3MWVwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MAorICAgIDB4MS45Y2I2YTliYmNlNjRhM2U5N2E3MjY3ZmRlYzI1YzgzYnAtMSwKKyAgICAweDEuMmYwMTEzMjY0MjBlNTAwMjE3MmRiMjQ1ZmQ5MDYzZTJwLTEsCisgICAgMHgxLmRmZmZmZmZmZmZmZmZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgODEKKyAgICAtMHgxLjljYjZhOWJiY2U2NGEzZTk3YTcyNjdmZGVjMjVjODNicC0xLAorICAgIDB4MS4yZjAxMTMyNjQyMGU1MDAyMTcyZGIyNDVmZDkwNjNlMnAtMSwKKyAgICAtMHgxLmRmZmZmZmZmZmZmZmZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgODIKKyAgICAweDEuZjVmMGJlMjg1NjVjNWFkNzYzYzEwM2Q5ODFmYzVjNGVwLTUsCisgICAgMHgxLmZmMDliYWJiMDc2ZTQ4MDNlNTdlNjgyMDQ1NzBmZDVicC0xLAorICAgIDB4MS5mNjQxNDdkOGFkZDg0cC01LAorICB9LAorICB7IC8vIEVudHJ5IDgzCisgICAgLTB4MS5mNWYwYmUyODU2NWM1YWQ3NjNjMTAzZDk4MWZjNWM0ZXAtNSwKKyAgICAweDEuZmYwOWJhYmIwNzZlNDgwM2U1N2U2ODIwNDU3MGZkNWJwLTEsCisgICAgLTB4MS5mNjQxNDdkOGFkZDg0cC01LAorICB9LAorICB7IC8vIEVudHJ5IDg0CisgICAgLTB4MS5kNGRhNWY1Njg4OGUyMDBmZGE0ZWJhYzdkYjFjZGJlZnAtMSwKKyAgICAweDEuOWI3MGNkMzI4NGUxNTdmYjg0NDkxZDU4MWNiODZiZDNwLTIsCisgICAgMHgxLmZlNjE4M2VmYTM5N2NwODMsCisgIH0sCisgIHsgLy8gRW50cnkgODUKKyAgICAweDEuZDRkYTVmNTY4ODhlMjAwZmRhNGViYWM3ZGIxY2RiZWZwLTEsCisgICAgMHgxLjliNzBjZDMyODRlMTU3ZmI4NDQ5MWQ1ODFjYjg2YmQzcC0yLAorICAgIC0weDEuZmU2MTgzZWZhMzk3Y3A4MywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NgorICAgIDB4MS5mYTlmNmNhMGVjNDRlMDAxMDAyNmYzODVjMGFiODY5MHAtMywKKyAgICAweDEuZjAxNjQ3NGI3NTY2NzQyNGEwNTBkNzkwMTRmZDIzODVwLTEsCisgICAgMHgxLmZmZWZmZmZmZmZmZmZwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgODcKKyAgICAtMHgxLmZhOWY2Y2EwZWM0NGUwMDEwMDI2ZjM4NWMwYWI4NjkwcC0zLAorICAgIDB4MS5mMDE2NDc0Yjc1NjY3NDI0YTA1MGQ3OTAxNGZkMjM4NXAtMSwKKyAgICAtMHgxLmZmZWZmZmZmZmZmZmZwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgODgKKyAgICAtMHgxLmZmNDg2OGRkYWJhNmJhMzJjNmI3MTRhZWY5OWZmMmY3cC0xLAorICAgIC0weDEuYjE2ZjBlYjI1YWU0NjdjMmExODVlNTE2ZjExODhiMjBwLTUsCisgICAgMHgxLmZmZjdmZjgwMDAwMWZwMTUsCisgIH0sCisgIHsgLy8gRW50cnkgODkKKyAgICAweDEuZmY0ODY4ZGRhYmE2YmEzMmM2YjcxNGFlZjk5ZmYyZjdwLTEsCisgICAgLTB4MS5iMTZmMGViMjVhZTQ2N2MyYTE4NWU1MTZmMTE4OGIyMHAtNSwKKyAgICAtMHgxLmZmZjdmZjgwMDAwMWZwMTUsCisgIH0sCisgIHsgLy8gRW50cnkgOTAKKyAgICAtMHgxLmZmNGYxZTljMjQ4OTEyNjQ4NzAxODE4ZDA3NWIzOTUzcC0xLAorICAgIC0weDEuYTk3MWUzYjY0ZDA4ZDdjM2YzN2QyOTliNDM2MTZlYjRwLTUsCisgICAgMHgxLmZmZjdmZmZmZmZjcDE1LAorICB9LAorICB7IC8vIEVudHJ5IDkxCisgICAgMHgxLmZmNGYxZTljMjQ4OTEyNjQ4NzAxODE4ZDA3NWIzOTUzcC0xLAorICAgIC0weDEuYTk3MWUzYjY0ZDA4ZDdjM2YzN2QyOTliNDM2MTZlYjRwLTUsCisgICAgLTB4MS5mZmY3ZmZmZmZmY3AxNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MgorICAgIDB4MS5kMTk2MTZmYzdlZTQ2MDUzNDVjMjU2MDZjZmM5MzIzNXAtMSwKKyAgICAtMHgxLmFhMDU0YzQ5MDkzODQ4MTFhMDYzMjczMTEyNjA0YzMxcC0yLAorICAgIDB4MS5mZmY4MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDkzCisgICAgLTB4MS5kMTk2MTZmYzdlZTQ2MDUzNDVjMjU2MDZjZmM5MzIzNXAtMSwKKyAgICAtMHgxLmFhMDU0YzQ5MDkzODQ4MTFhMDYzMjczMTEyNjA0YzMxcC0yLAorICAgIC0weDEuZmZmODBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NAorICAgIDB4MS5jZTM1MDk3NTFjNDYxNDgzN2ZhNGIzNDk2M2M2ZjVkOHAtMSwKKyAgICAweDEuYjg3ZTM3MTAxNjU0NDgyMTQ0ZDcxZDA0OTcyMjY3ZDhwLTIsCisgICAgMHgxLmZmZmZiZmZlM2ZmZmZwMTQsCisgIH0sCisgIHsgLy8gRW50cnkgOTUKKyAgICAtMHgxLmNlMzUwOTc1MWM0NjE0ODM3ZmE0YjM0OTYzYzZmNWQ4cC0xLAorICAgIDB4MS5iODdlMzcxMDE2NTQ0ODIxNDRkNzFkMDQ5NzIyNjdkOHAtMiwKKyAgICAtMHgxLmZmZmZiZmZlM2ZmZmZwMTQsCisgIH0sCisgIHsgLy8gRW50cnkgOTYKKyAgICAweDEuZDE4Zjc2ZmZjNmU0YmEwYTMxMzRlNWJlMjFiNWJjOGZwLTEsCisgICAgLTB4MS5hYTIyNDExNjAyMjc4OTZjNjhlZjE3ODM5ZjE3ZGNlNXAtMiwKKyAgICAweDEuZmZmZmY2MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDk3CisgICAgLTB4MS5kMThmNzZmZmM2ZTRiYTBhMzEzNGU1YmUyMWI1YmM4ZnAtMSwKKyAgICAtMHgxLmFhMjI0MTE2MDIyNzg5NmM2OGVmMTc4MzlmMTdkY2U1cC0yLAorICAgIC0weDEuZmZmZmY2MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDk4CisgICAgLTB4MS44MzdiOTk0YTZkOGZmN2YyNzUwNzU1ZGY1ODQzZTg0ZHAtMSwKKyAgICAtMHgxLjRlYWE2NWI5ZTJlY2MzMDhmZDgyZjY1ZTA5ZDA2YmU0cC0xLAorICAgIDB4MS5mZmZmZmUzZmZmZmZmcDEsCisgIH0sCisgIHsgLy8gRW50cnkgOTkKKyAgICAweDEuODM3Yjk5NGE2ZDhmZjdmMjc1MDc1NWRmNTg0M2U4NGRwLTEsCisgICAgLTB4MS40ZWFhNjViOWUyZWNjMzA4ZmQ4MmY2NWUwOWQwNmJlNHAtMSwKKyAgICAtMHgxLmZmZmZmZTNmZmZmZmZwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAKKyAgICAweDEuYWVkNTQ4ZjA5MGMxZGZmZTZlMDQzMjJkYzhlOGNiZmFwLTEsCisgICAgMHgxLjE0YTI4MGZiNTA3Y2Y4OTk5YTFiMjkxOTk1NjQ2MTUycC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZTdmcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDEwMQorICAgIC0weDEuYWVkNTQ4ZjA5MGMxZGZmZTZlMDQzMjJkYzhlOGNiZmFwLTEsCisgICAgMHgxLjE0YTI4MGZiNTA3Y2Y4OTk5YTFiMjkxOTk1NjQ2MTUycC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmU3ZnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIKKyAgICAtMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjBwLTEwNzQsCisgIH0sCisgIHsgLy8gRW50cnkgMTAzCisgICAgMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMTA3NCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQKKyAgICAtMC4wLAorICAgIDB4MS5wMCwKKyAgICAtMC4wLAorICB9LAorICB7IC8vIEVudHJ5IDEwNQorICAgIDAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjBwLTEwNzQsCisgIH0sCisgIHsgLy8gRW50cnkgMTA2CisgICAgLTAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wcC0xMDc0LAorICB9LAorICB7IC8vIEVudHJ5IDEwNworICAgIC0weDEuMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMTAyMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgKKyAgICAweDEuMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyLAorICB9LAorICB7IC8vIEVudHJ5IDEwOQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTAyMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wcC0xMDIyLAorICB9LAorICB7IC8vIEVudHJ5IDExMQorICAgIC0weDEuZmZmZmZmZmZmZmZmZGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXAtMTAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTIKKyAgICAweDEuZmZmZmZmZmZmZmZmZGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzLAorICB9LAorICB7IC8vIEVudHJ5IDExMworICAgIDB4MS5mZmZmZmZmZmZmZmZkZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwLTEwMjMsCisgIH0sCisgIHsgLy8gRW50cnkgMTE0CisgICAgLTB4MS5mZmZmZmZmZmZmZmZkZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzLAorICB9LAorICB7IC8vIEVudHJ5IDExNQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjBwLTEwMjIsCisgIH0sCisgIHsgLy8gRW50cnkgMTE2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wcC0xMDIyLAorICB9LAorICB7IC8vIEVudHJ5IDExNworICAgIDB4MS4wMDAwMDAwMDAwMDAwZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIsCisgIH0sCisgIHsgLy8gRW50cnkgMTE4CisgICAgLTB4MS4wMDAwMDAwMDAwMDAwZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyLAorICB9LAorICB7IC8vIEVudHJ5IDExOQorICAgIDB4MS45OTk5OTk2ZGU4Y2ExOThjMjRhYjk0NDliZWVlMTZkNXAtMTMsCisgICAgMHgxLmZmZmZmZjVjMjhmNWNiNGM1MjcyMDYxMjgxMjExMTIwcC0xLAorICAgIDB4MS45OTk5OTk5OTk5OTlhcC0xMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAKKyAgICAtMHgxLjk5OTk5OTZkZThjYTE5OGMyNGFiOTQ0OWJlZWUxNmQ1cC0xMywKKyAgICAweDEuZmZmZmZmNWMyOGY1Y2I0YzUyNzIwNjEyODEyMTExMjBwLTEsCisgICAgLTB4MS45OTk5OTk5OTk5OTlhcC0xMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjEKKyAgICAweDEuOTk5OTk4ZWFkNjViOTZmNzhhNGRiZmQ4MzljN2VmMmVwLTEyLAorICAgIDB4MS5mZmZmZmQ3MGEzZDc5NjBjZDU2OTVhMDZmZGI4MGU3NHAtMSwKKyAgICAweDEuOTk5OTk5OTk5OTk5YXAtMTIsCisgIH0sCisgIHsgLy8gRW50cnkgMTIyCisgICAgLTB4MS45OTk5OThlYWQ2NWI5NmY3OGE0ZGJmZDgzOWM3ZWYyZXAtMTIsCisgICAgMHgxLmZmZmZmZDcwYTNkNzk2MGNkNTY5NWEwNmZkYjgwZTc0cC0xLAorICAgIC0weDEuOTk5OTk5OTk5OTk5YXAtMTIsCisgIH0sCisgIHsgLy8gRW50cnkgMTIzCisgICAgMHgxLjMzMzMzMjBjNDliYWJmZjE1MWI2ZDA0MjkwZTJjM2EycC0xMSwKKyAgICAweDEuZmZmZmZhM2Q3MGE2OWFkNDJiMzlkODY5NjYzMmY4NTZwLTEsCisgICAgMHgxLjMzMzMzMzMzMzMzMzRwLTExLAorICB9LAorICB7IC8vIEVudHJ5IDEyNAorICAgIC0weDEuMzMzMzMyMGM0OWJhYmZmMTUxYjZkMDQyOTBlMmMzYTJwLTExLAorICAgIDB4MS5mZmZmZmEzZDcwYTY5YWQ0MmIzOWQ4Njk2NjMyZjg1NnAtMSwKKyAgICAtMHgxLjMzMzMzMzMzMzMzMzRwLTExLAorICB9LAorICB7IC8vIEVudHJ5IDEyNQorICAgIDB4MS45OTk5OTZkZThjYTI4ODRkYTJmMDhmMjViYjAyNGQwOHAtMTEsCisgICAgMHgxLmZmZmZmNWMyOGY2NGU1ZWMwZGEwYTRmN2Y0Mzg4MDUycC0xLAorICAgIDB4MS45OTk5OTk5OTk5OTlhcC0xMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYKKyAgICAtMHgxLjk5OTk5NmRlOGNhMjg4NGRhMmYwOGYyNWJiMDI0ZDA4cC0xMSwKKyAgICAweDEuZmZmZmY1YzI4ZjY0ZTVlYzBkYTBhNGY3ZjQzODgwNTJwLTEsCisgICAgLTB4MS45OTk5OTk5OTk5OTlhcC0xMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcKKyAgICAweDEuZmZmZmZhYWFhYWFlZWVlZWVkNGVkNGVkYWI0YzdiZDZwLTExLAorICAgIDB4MS5mZmZmZjAwMDAwMTU1NTU1NDlmNDlmNGQzNGQzNGNhMHAtMSwKKyAgICAweDEuMHAtMTAsCisgIH0sCisgIHsgLy8gRW50cnkgMTI4CisgICAgLTB4MS5mZmZmZmFhYWFhYWVlZWVlZWQ0ZWQ0ZWRhYjRjN2JkNnAtMTEsCisgICAgMHgxLmZmZmZmMDAwMDAxNTU1NTU0OWY0OWY0ZDM0ZDM0Y2EwcC0xLAorICAgIC0weDEuMHAtMTAsCisgIH0sCisgIHsgLy8gRW50cnkgMTI5CisgICAgMHgxLjMzMzMyZTk3OGQ1NTJhZmM4ODNiZGIwNDc1MWUzODM1cC0xMCwKKyAgICAweDEuZmZmZmU4ZjVjMmJiOThjN2MxMDNkMmZmNzlmMTVkNmFwLTEsCisgICAgMHgxLjMzMzMzMzMzMzMzMzNwLTEwLAorICB9LAorICB7IC8vIEVudHJ5IDEzMAorICAgIC0weDEuMzMzMzJlOTc4ZDU1MmFmYzg4M2JkYjA0NzUxZTM4MzVwLTEwLAorICAgIDB4MS5mZmZmZThmNWMyYmI5OGM3YzEwM2QyZmY3OWYxNWQ2YXAtMSwKKyAgICAtMHgxLjMzMzMzMzMzMzMzMzNwLTEwLAorICB9LAorICB7IC8vIEVudHJ5IDEzMQorICAgIDB4MS42NjY2NWYxNTI5YWZmOGEzODA5MjQ2NjcwYTQzNmMzY3AtMTAsCisgICAgMHgxLmZmZmZlMGEzZDc1YzMxYjI2NDUxMTY2ZDZmMzk4YWJkcC0xLAorICAgIDB4MS42NjY2NjY2NjY2NjY2cC0xMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzIKKyAgICAtMHgxLjY2NjY1ZjE1MjlhZmY4YTM4MDkyNDY2NzBhNDM2YzNjcC0xMCwKKyAgICAweDEuZmZmZmUwYTNkNzVjMzFiMjY0NTExNjZkNmYzOThhYmRwLTEsCisgICAgLTB4MS42NjY2NjY2NjY2NjY2cC0xMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzMKKyAgICAweDEuOTk5OThlYWQ2NWNkZjgyZTE5NGMxMzM5OTdmMmZiNjhwLTEwLAorICAgIDB4MS5mZmZmZDcwYTNkZmM3MzNiMzMzMWQ4MzgyYjFlOWRmNXAtMSwKKyAgICAweDEuOTk5OTk5OTk5OTk5OXAtMTAsCisgIH0sCisgIHsgLy8gRW50cnkgMTM0CisgICAgLTB4MS45OTk5OGVhZDY1Y2RmODJlMTk0YzEzMzk5N2YyZmI2OHAtMTAsCisgICAgMHgxLmZmZmZkNzBhM2RmYzczM2IzMzMxZDgzODJiMWU5ZGY1cC0xLAorICAgIC0weDEuOTk5OTk5OTk5OTk5OXAtMTAsCisgIH0sCisgIHsgLy8gRW50cnkgMTM1CisgICAgMHgxLmNjY2NiZDNmN2QxNWQ0MmFmZmI5ZjAyYmYxZGMyNTdicC0xMCwKKyAgICAweDEuZmZmZmNjMjhmNmEyODIzZjM3NjViNTA2NTllY2IwZTJwLTEsCisgICAgMHgxLmNjY2NjY2NjY2NjY2NwLTEwLAorICB9LAorICB7IC8vIEVudHJ5IDEzNgorICAgIC0weDEuY2NjY2JkM2Y3ZDE1ZDQyYWZmYjlmMDJiZjFkYzI1N2JwLTEwLAorICAgIDB4MS5mZmZmY2MyOGY2YTI4MjNmMzc2NWI1MDY1OWVjYjBlMnAtMSwKKyAgICAtMHgxLmNjY2NjY2NjY2NjY2NwLTEwLAorICB9LAorICB7IC8vIEVudHJ5IDEzNworICAgIDB4MS4wNjY1YWU5YzdiNDRlZDI4MDIxNmJlMjEwNGYyOGYwMnAtNywKKyAgICAweDEuZmZmYmNjMmE2ZTg2ZmVmN2QyYWYxNTgwYmQ4ZTY2OTlwLTEsCisgICAgMHgxLjA2NjY2NjY2NjY2NjZwLTcsCisgIH0sCisgIHsgLy8gRW50cnkgMTM4CisgICAgLTB4MS4wNjY1YWU5YzdiNDRlZDI4MDIxNmJlMjEwNGYyOGYwMnAtNywKKyAgICAweDEuZmZmYmNjMmE2ZTg2ZmVmN2QyYWYxNTgwYmQ4ZTY2OTlwLTEsCisgICAgLTB4MS4wNjY2NjY2NjY2NjY2cC03LAorICB9LAorICB7IC8vIEVudHJ5IDEzOQorICAgIDB4MS5jY2M4ZTk3YjU5ZjYxODg5OGM0YWMzYTBhZWRkZjcwOXAtNywKKyAgICAweDEuZmZmMzBhNGI2ZmNjMTQwNWUxOGZiZjczMzVkMmY3ODlwLTEsCisgICAgMHgxLmNjY2NjY2NjY2NjY2NwLTcsCisgIH0sCisgIHsgLy8gRW50cnkgMTQwCisgICAgLTB4MS5jY2M4ZTk3YjU5ZjYxODg5OGM0YWMzYTBhZWRkZjcwOXAtNywKKyAgICAweDEuZmZmMzBhNGI2ZmNjMTQwNWUxOGZiZjczMzVkMmY3ODlwLTEsCisgICAgLTB4MS5jY2NjY2NjY2NjY2NjcC03LAorICB9LAorICB7IC8vIEVudHJ5IDE0MQorICAgIDB4MS40OTkzZThhOGZmNzliMTMyMDQ2ZWZhNzg1NmE5NzUzOHAtNiwKKyAgICAweDEuZmZlNTdhNzgwZjM4YzBkYjM3MDUxZmE4YzhkNjBmYmNwLTEsCisgICAgMHgxLjQ5OTk5OTk5OTk5OTlwLTYsCisgIH0sCisgIHsgLy8gRW50cnkgMTQyCisgICAgLTB4MS40OTkzZThhOGZmNzliMTMyMDQ2ZWZhNzg1NmE5NzUzOHAtNiwKKyAgICAweDEuZmZlNTdhNzgwZjM4YzBkYjM3MDUxZmE4YzhkNjBmYmNwLTEsCisgICAgLTB4MS40OTk5OTk5OTk5OTk5cC02LAorICB9LAorICB7IC8vIEVudHJ5IDE0MworICAgIDB4MS5hY2MwNDRjNTZkYjBlMTlmODJjOWMzY2ZmMjQ2ZTIwMXAtNiwKKyAgICAweDEuZmZkMzFjZDBlMWQ2MmMwNWQyY2RlZDIxYWRkOGJkMzNwLTEsCisgICAgMHgxLmFjY2NjY2NjY2NjY2NwLTYsCisgIH0sCisgIHsgLy8gRW50cnkgMTQ0CisgICAgLTB4MS5hY2MwNDRjNTZkYjBlMTlmODJjOWMzY2ZmMjQ2ZTIwMXAtNiwKKyAgICAweDEuZmZkMzFjZDBlMWQ2MmMwNWQyY2RlZDIxYWRkOGJkMzNwLTEsCisgICAgLTB4MS5hY2NjY2NjY2NjY2NjcC02LAorICB9LAorICB7IC8vIEVudHJ5IDE0NQorICAgIDB4MS4wN2Y0NGQ2N2NmNDFhZmJjMGM5NTEwOGI5OWY5MWIwMXAtNSwKKyAgICAweDEuZmZiYmYxODIwNzU0MmVmODEzOTBkNzNjM2JhODljMWFwLTEsCisgICAgMHgxLjA4MHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDYKKyAgICAtMHgxLjA3ZjQ0ZDY3Y2Y0MWFmYmMwYzk1MTA4Yjk5ZjkxYjAxcC01LAorICAgIDB4MS5mZmJiZjE4MjA3NTQyZWY4MTM5MGQ3M2MzYmE4OWMxYXAtMSwKKyAgICAtMHgxLjA4MHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDcKKyAgICAweDEuMzk4NWZlNDZmMWM4NzE0ZWFhMTQxODU2MTk2M2U4OWJwLTUsCisgICAgMHgxLmZmOWZmOGMzMjk5ZjU0NDU3YmJhZjhjMTIxNzNiNDZicC0xLAorICAgIDB4MS4zOTk5OTk5OTk5OTlhcC01LAorICB9LAorICB7IC8vIEVudHJ5IDE0OAorICAgIC0weDEuMzk4NWZlNDZmMWM4NzE0ZWFhMTQxODU2MTk2M2U4OWJwLTUsCisgICAgMHgxLmZmOWZmOGMzMjk5ZjU0NDU3YmJhZjhjMTIxNzNiNDZicC0xLAorICAgIC0weDEuMzk5OTk5OTk5OTk5YXAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDkKKyAgICAweDEuNmIxNGJkZTkzYWM1ZjdkMjQ1NDRkMGVjZjhiZTdhZWVwLTUsCisgICAgMHgxLmZmN2YzMmQ3N2M1YjFjNDJmMTY2MGM5YjZmMmVmNjRmcC0xLAorICAgIDB4MS42YjMzMzMzMzMzMzM0cC01LAorICB9LAorICB7IC8vIEVudHJ5IDE1MAorICAgIC0weDEuNmIxNGJkZTkzYWM1ZjdkMjQ1NDRkMGVjZjhiZTdhZWVwLTUsCisgICAgMHgxLmZmN2YzMmQ3N2M1YjFjNDJmMTY2MGM5YjZmMmVmNjRmcC0xLAorICAgIC0weDEuNmIzMzMzMzMzMzMzNHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTEKKyAgICAweDEuOWNhMDE1M2VkODM5NmIwMmY4NjA1MjE5YTVmZTU5MTdwLTUsCisgICAgMHgxLmZmNTlhMDBkYmM0MDg5NmJiNWU0YWM4YWQyOTNhZmI0cC0xLAorICAgIDB4MS45Y2NjY2NjY2NjY2NlcC01LAorICB9LAorICB7IC8vIEVudHJ5IDE1MgorICAgIC0weDEuOWNhMDE1M2VkODM5NmIwMmY4NjA1MjE5YTVmZTU5MTdwLTUsCisgICAgMHgxLmZmNTlhMDBkYmM0MDg5NmJiNWU0YWM4YWQyOTNhZmI0cC0xLAorICAgIC0weDEuOWNjY2NjY2NjY2NjZXAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTMKKyAgICAweDEuY2UyNzhkNDAyN2QzNDM4N2YxODRkNGFiMmFhZjU0NWZwLTUsCisgICAgMHgxLmZmMmY0MGMwMmU2MGY2MWQ2ZGNmYzM5YjZjMmJlMDg3cC0xLAorICAgIDB4MS5jZTY2NjY2NjY2NjY2cC01LAorICB9LAorICB7IC8vIEVudHJ5IDE1NAorICAgIC0weDEuY2UyNzhkNDAyN2QzNDM4N2YxODRkNGFiMmFhZjU0NWZwLTUsCisgICAgMHgxLmZmMmY0MGMwMmU2MGY2MWQ2ZGNmYzM5YjZjMmJlMDg3cC0xLAorICAgIC0weDEuY2U2NjY2NjY2NjY2NnAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTUKKyAgICAweDEuNDNjMWU5YzE3MWE2NjdhMGI5MjUxOWEwNGZhNWE5MWNwLTEsCisgICAgMHgxLjhjYTQ2YzdkODk3NWU1N2ExNDg0ZjA1YzM3MzhkODNicC0xLAorICAgIDB4MS41ZTdmYzQzNjliZGFkcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDE1NgorICAgIC0weDEuNDNjMWU5YzE3MWE2NjdhMGI5MjUxOWEwNGZhNWE5MWNwLTEsCisgICAgMHgxLjhjYTQ2YzdkODk3NWU1N2ExNDg0ZjA1YzM3MzhkODNicC0xLAorICAgIC0weDEuNWU3ZmM0MzY5YmRhZHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTcKKyAgICAweDEuZWUzZDZiY2VhMDljYTE4YjFkMWNlN2VlMDRmZDg4NmZwLTEsCisgICAgMHgxLjBiNWQzODAyZmM3OTkxMTQwMTY4ZjI5NGVlZGQ3OTA0cC0yLAorICAgIDB4MS40ZTdmYzQzNjliZGFkcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTU4CisgICAgLTB4MS5lZTNkNmJjZWEwOWNhMThiMWQxY2U3ZWUwNGZkODg2ZnAtMSwKKyAgICAweDEuMGI1ZDM4MDJmYzc5OTExNDAxNjhmMjk0ZWVkZDc5MDRwLTIsCisgICAgLTB4MS40ZTdmYzQzNjliZGFkcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTU5CisgICAgMHgxLmRmOGUyMmVhODA5ZDY1YzZhNjliOTZhY2E2MGJlNDMycC0xLAorICAgIC0weDEuNjZiOTZmNTMzMjNhZjFkN2UzMWE3MTYyYWIxOGE3NWJwLTIsCisgICAgMHgxLmVkYmZhNjUxZTljODRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjAKKyAgICAtMHgxLmRmOGUyMmVhODA5ZDY1YzZhNjliOTZhY2E2MGJlNDMycC0xLAorICAgIC0weDEuNjZiOTZmNTMzMjNhZjFkN2UzMWE3MTYyYWIxOGE3NWJwLTIsCisgICAgLTB4MS5lZGJmYTY1MWU5Yzg0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTYxCisgICAgMHgxLjFkMzQ3OWVhYzdhZTM1ZTJmYmVhMGFlNjk2NDM0NjkycC0xLAorICAgIC0weDEuYTkzNTU0ODg4YzMyZmE1N2YyMmE5NTI5YTMyMGMxY2JwLTEsCisgICAgMHgxLjQ2N2ZjNDM2OWJkYWRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjIKKyAgICAtMHgxLjFkMzQ3OWVhYzdhZTM1ZTJmYmVhMGFlNjk2NDM0NjkycC0xLAorICAgIC0weDEuYTkzNTU0ODg4YzMyZmE1N2YyMmE5NTI5YTMyMGMxY2JwLTEsCisgICAgLTB4MS40NjdmYzQzNjliZGFkcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTYzCisgICAgLTB4MS5mZmVhYWFlZWVlODRiNDRjY2VmZWY4MzIyNTRkMjhjMHAtNiwKKyAgICAtMHgxLmZmYzAwMTU1NTI3ZDJiOWZkYTJhZTg5Mzk2ZTA5NzI3cC0xLAorICAgIDB4MS45NjFmYjU0NDQyZDE4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTY0CisgICAgMHgxLmZmZWFhYWVlZWU4NGI0NGNjZWZlZjgzMjI1NGQyOGMwcC02LAorICAgIC0weDEuZmZjMDAxNTU1MjdkMmI5ZmRhMmFlODkzOTZlMDk3MjdwLTEsCisgICAgLTB4MS45NjFmYjU0NDQyZDE4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTY1CisgICAgLTB4MS4zNzM0ZDMyZDQ5YmQwYjk0Mjc3MmE3NTY3ZDUxNDE0MHAtMSwKKyAgICAtMHgxLjk2OTA3YzVjN2MyNWI4OGUzNGFkZGZmMWZiZWY2NmU0cC0xLAorICAgIDB4MS5lNWJmYTY1MWU5YzgzcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTY2CisgICAgMHgxLjM3MzRkMzJkNDliZDBiOTQyNzcyYTc1NjdkNTE0MTQwcC0xLAorICAgIC0weDEuOTY5MDdjNWM3YzI1Yjg4ZTM0YWRkZmYxZmJlZjY2ZTRwLTEsCisgICAgLTB4MS5lNWJmYTY1MWU5YzgzcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTY3CisgICAgLTB4MS5lOWQyNWQxOTkxMWUyMDViNjUzNTIxZjQyYjliODY0ZnAtMSwKKyAgICAtMHgxLjJhMWU1YTUwZjk0OGNkNDg3YzUzMDk2ODJiMTEwYTUzcC0yLAorICAgIDB4MS4xYWFmY2JhZmM4NWY3cDIsCisgIH0sCisgIHsgLy8gRW50cnkgMTY4CisgICAgMHgxLmU5ZDI1ZDE5OTExZTIwNWI2NTM1MjFmNDJiOWI4NjRmcC0xLAorICAgIC0weDEuMmExZTVhNTBmOTQ4Y2Q0ODdjNTMwOTY4MmIxMTBhNTNwLTIsCisgICAgLTB4MS4xYWFmY2JhZmM4NWY3cDIsCisgIH0sCisgIHsgLy8gRW50cnkgMTY5CisgICAgLTB4MS5lNGVjZGM1YTRlNDY1ODk5OTI4ZWI5ZmM5NTgyOWQ0OHAtMSwKKyAgICAweDEuNDg5NGY2OTVkYzU2YmNlOGIyNzNlNTUyNGYxODEyNjRwLTIsCisgICAgMHgxLjQyN2ZjNDM2OWJkYWRwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzAKKyAgICAweDEuZTRlY2RjNWE0ZTQ2NTg5OTkyOGViOWZjOTU4MjlkNDhwLTEsCisgICAgMHgxLjQ4OTRmNjk1ZGM1NmJjZThiMjczZTU1MjRmMTgxMjY0cC0yLAorICAgIC0weDEuNDI3ZmM0MzY5YmRhZHAyLAorICB9LAorICB7IC8vIEVudHJ5IDE3MQorICAgIC0weDEuMmE1OWYxMDM0NDI2MTk3ZmE2ZWVlMjI3NjI5NjdmMjVwLTEsCisgICAgMHgxLmEwMTZlYTNhNjkyY2UwYzMyMWI3N2YxNjhkZTM5MTIycC0xLAorICAgIDB4MS42YTRmYmNiZDZmNTYycDIsCisgIH0sCisgIHsgLy8gRW50cnkgMTcyCisgICAgMHgxLjJhNTlmMTAzNDQyNjE5N2ZhNmVlZTIyNzYyOTY3ZjI1cC0xLAorICAgIDB4MS5hMDE2ZWEzYTY5MmNlMGMzMjFiNzdmMTY4ZGUzOTEyMnAtMSwKKyAgICAtMHgxLjZhNGZiY2JkNmY1NjJwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzMKKyAgICAtMHgxLjI2MzEyNDQzYmQzNWYxOTMxMmVhYzBhMWE2YjU2NTllcC0xLAorICAgIDB4MS5hMzBhNjlmNTUzN2ViYzIyZjA4NzBjMmJkMjZlZjI4NHAtMSwKKyAgICAweDEuNmFmMmVmZjBhMjg5NnAyLAorICB9LAorICB7IC8vIEVudHJ5IDE3NAorICAgIDB4MS4yNjMxMjQ0M2JkMzVmMTkzMTJlYWMwYTFhNmI1NjU5ZXAtMSwKKyAgICAweDEuYTMwYTY5ZjU1MzdlYmMyMmYwODcwYzJiZDI2ZWYyODRwLTEsCisgICAgLTB4MS42YWYyZWZmMGEyODk2cDIsCisgIH0sCisgIHsgLy8gRW50cnkgMTc1CisgICAgLTB4MS5lMThlNjYwYTVlMmZiMzE2ZWNiYjllZDcwMTIyZWZmNXAtMSwKKyAgICAweDEuNWJkNjJlOGIwNGFkNTkxNWU2NjI0MjM0OWI3NTZlMTFwLTIsCisgICAgMHgxLjQzYzYyYTlkMDI0MTRwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzYKKyAgICAweDEuZTE4ZTY2MGE1ZTJmYjMxNmVjYmI5ZWQ3MDEyMmVmZjVwLTEsCisgICAgMHgxLjViZDYyZThiMDRhZDU5MTVlNjYyNDIzNDliNzU2ZTExcC0yLAorICAgIC0weDEuNDNjNjJhOWQwMjQxNHAyLAorICB9LAorICB7IC8vIEVudHJ5IDE3NworICAgIC0weDEuZWUwZTgzYTAxOThiNmUyZWY3YzQ4ZTY2MjUyOTFhMGFwLTEsCisgICAgLTB4MS4wY2I3MWY2NzFlNjM0MTA5NjZlNzhkMjAwOWMwNjE2ZnAtMiwKKyAgICAweDEuMWM5OTY1NDk2MWY5MnAyLAorICB9LAorICB7IC8vIEVudHJ5IDE3OAorICAgIDB4MS5lZTBlODNhMDE5OGI2ZTJlZjdjNDhlNjYyNTI5MWEwYXAtMSwKKyAgICAtMHgxLjBjYjcxZjY3MWU2MzQxMDk2NmU3OGQyMDA5YzA2MTZmcC0yLAorICAgIC0weDEuMWM5OTY1NDk2MWY5MnAyLAorICB9LAorICB7IC8vIEVudHJ5IDE3OQorICAgIC0weDEuNDcyNzc0NzMzOGU0NjUzNjE2ZWFkYmQ3ZWMzZDAyZDNwLTEsCisgICAgLTB4MS44OWQ4NmFhODUyMWMxMWI3NGY4YjE5NTRjMDhmOWIzNnAtMSwKKyAgICAweDEuZWFkOTNmZWI4MzYxZnAxLAorICB9LAorICB7IC8vIEVudHJ5IDE4MAorICAgIDB4MS40NzI3NzQ3MzM4ZTQ2NTM2MTZlYWRiZDdlYzNkMDJkM3AtMSwKKyAgICAtMHgxLjg5ZDg2YWE4NTIxYzExYjc0ZjhiMTk1NGMwOGY5YjM2cC0xLAorICAgIC0weDEuZWFkOTNmZWI4MzYxZnAxLAorICB9LAorICB7IC8vIEVudHJ5IDE4MQorICAgIC0weDEuNGJhMmY3NWRkYTVmZTQzNDMyMDkwNWE3MTg0ZmYxYWZwLTQsCisgICAgLTB4MS5mZTUxYWM1NTRhMTZhZDgxOTRmMTgxMDg1ZjhhMTdmMnAtMSwKKyAgICAweDEuOWM3ZmI1NDQ0MmQxYXAxLAorICB9LAorICB7IC8vIEVudHJ5IDE4MgorICAgIDB4MS40YmEyZjc1ZGRhNWZlNDM0MzIwOTA1YTcxODRmZjFhZnAtNCwKKyAgICAtMHgxLmZlNTFhYzU1NGExNmFkODE5NGYxODEwODVmOGExN2YycC0xLAorICAgIC0weDEuOWM3ZmI1NDQ0MmQxYXAxLAorICB9LAorICB7IC8vIEVudHJ5IDE4MworICAgIDB4MS4wMzRjNGQ2MzNiNGVmMGE5MDg5YjQzODkyYTQ2MmEyNnAtMSwKKyAgICAtMHgxLmI5N2MwNGQwOGJjNWQ3NjViMzQxYTIyYjJjNzIwYjZmcC0xLAorICAgIDB4MS40ZTI2MmE5ZDAyNDE1cDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTg0CisgICAgLTB4MS4wMzRjNGQ2MzNiNGVmMGE5MDg5YjQzODkyYTQ2MmEyNnAtMSwKKyAgICAtMHgxLmI5N2MwNGQwOGJjNWQ3NjViMzQxYTIyYjJjNzIwYjZmcC0xLAorICAgIC0weDEuNGUyNjJhOWQwMjQxNXAxLAorICB9LAorICB7IC8vIEVudHJ5IDE4NQorICAgIDB4MS5kMWU0Y2RlMmYzOTQ0ZjRjMTM0YzA1Y2M0ZTUzMzlhM3AtMSwKKyAgICAtMHgxLmE4YWM4YTNlNThmNmNhOTUyMzkwMjk5ZDJlOGIxODdmcC0yLAorICAgIDB4MS5mZjk5M2ZlYjgzNjIwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTg2CisgICAgLTB4MS5kMWU0Y2RlMmYzOTQ0ZjRjMTM0YzA1Y2M0ZTUzMzlhM3AtMSwKKyAgICAtMHgxLmE4YWM4YTNlNThmNmNhOTUyMzkwMjk5ZDJlOGIxODdmcC0yLAorICAgIC0weDEuZmY5OTNmZWI4MzYyMHAwLAorICB9LAorICB7IC8vIEVudHJ5IDE4NworICAgIDB4MS5mNzUwMjM1Yzk0OTkyNmM0OGM5MGU0MWE5MTQ3NGMwNnAtMSwKKyAgICAweDEuNzdhOGI5YjNkMjU0YTllMzlkMDJiM2ViM2UyMzkwZTdwLTMsCisgICAgMHgxLjYyZTYyYTlkMDI0MTZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODgKKyAgICAtMHgxLmY3NTAyMzVjOTQ5OTI2YzQ4YzkwZTQxYTkxNDc0YzA2cC0xLAorICAgIDB4MS43N2E4YjliM2QyNTRhOWUzOWQwMmIzZWIzZTIzOTBlN3AtMywKKyAgICAtMHgxLjYyZTYyYTlkMDI0MTZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODkKKyAgICAweDEuNjVmN2Q1NzEyNzliMGI4MDA1NTUyZmQ0N2EyZTc3YWVwLTEsCisgICAgMHgxLjZlMTA2MTIwNWRkNzkwNTFjMTEyZDMwYTA1MDk3YzYxcC0xLAorICAgIDB4MS44YzY2MmE5ZDAyNDE5cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDE5MAorICAgIC0weDEuNjVmN2Q1NzEyNzliMGI4MDA1NTUyZmQ0N2EyZTc3YWVwLTEsCisgICAgMHgxLjZlMTA2MTIwNWRkNzkwNTFjMTEyZDMwYTA1MDk3YzYxcC0xLAorICAgIC0weDEuOGM2NjJhOWQwMjQxOXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTEKKyAgICAtMHgxLmZlMDQzZjU3MzY5ZDZhNTJmYTMzZjAxMTllYzRkYTE5cC0xLAorICAgIC0weDEuNjgyZjNjYzNjN2EwOGRhMmNlMDJhNDFjZGM3YmVkODZwLTQsCisgICAgLTB4MS5hOGFhMWQxMWM0NGZmcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTkyCisgICAgMHgxLmZlMDQzZjU3MzY5ZDZhNTJmYTMzZjAxMTllYzRkYTE5cC0xLAorICAgIC0weDEuNjgyZjNjYzNjN2EwOGRhMmNlMDJhNDFjZGM3YmVkODZwLTQsCisgICAgMHgxLmE4YWExZDExYzQ0ZmZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTMKKyAgICAtMHgxLmZmZjE4ZjI0ZjNlNGI4N2JmOGMzNzYyY2I0NGY0NmQ2cC0xLAorICAgIC0weDEuZTY2NjlhMjcwYzM2ZDQ4NzliNDI4ZGRiYTk2Y2Q4N2JwLTcsCisgICAgLTB4MS45NWVjOGI5ZTAzZDU0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTk0CisgICAgMHgxLmZmZjE4ZjI0ZjNlNGI4N2JmOGMzNzYyY2I0NGY0NmQ2cC0xLAorICAgIC0weDEuZTY2NjlhMjcwYzM2ZDQ4NzliNDI4ZGRiYTk2Y2Q4N2JwLTcsCisgICAgMHgxLjk1ZWM4YjllMDNkNTRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTUKKyAgICAtMHgxLmZmMjBkOTYxNjI0ZTcwNjNhNzgyMDNiODExZjU3OWNhcC0xLAorICAgIDB4MS5kZGQxZWMyNWUyMDlmMWJiZjdlMTdlZjZjODQ1MGNkN3AtNSwKKyAgICAtMHgxLjgzMmVmYTJhNDM1YTlwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTYKKyAgICAweDEuZmYyMGQ5NjE2MjRlNzA2M2E3ODIwM2I4MTFmNTc5Y2FwLTEsCisgICAgMHgxLmRkZDFlYzI1ZTIwOWYxYmJmN2UxN2VmNmM4NDUwY2Q3cC01LAorICAgIDB4MS44MzJlZmEyYTQzNWE5cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTk3CisgICAgLTB4MS5mYjkzM2M0MDEwN2ZkNzc1MTg1YWMxNDkxOGM4ZmJhZnAtMSwKKyAgICAweDEuMGNhYjkxMTU2NDBkOTkzMDgyYTczNDNiYjVhZmZlYTJwLTMsCisgICAgLTB4MS43MDcxNjhiNjgyZGZlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTk4CisgICAgMHgxLmZiOTMzYzQwMTA3ZmQ3NzUxODVhYzE0OTE4YzhmYmFmcC0xLAorICAgIDB4MS4wY2FiOTExNTY0MGQ5OTMwODJhNzM0M2JiNWFmZmVhMnAtMywKKyAgICAweDEuNzA3MTY4YjY4MmRmZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDE5OQorICAgIC0weDEuZjU0ZDk3MTg4MWFkNjg1Yjc4MmVmODhlNjM1MGY3Y2RwLTEsCisgICAgMHgxLmEwNzIzYTk1NDkyZWRlZTVkYzk4Mzk0ZTQ1Zjk2ZDg4cC0zLAorICAgIC0weDEuNWRiM2Q3NDJjMjY1M3AwLAorICB9LAorICB7IC8vIEVudHJ5IDIwMAorICAgIDB4MS5mNTRkOTcxODgxYWQ2ODViNzgyZWY4OGU2MzUwZjdjZHAtMSwKKyAgICAweDEuYTA3MjNhOTU0OTJlZGVlNWRjOTgzOTRlNDVmOTZkODhwLTMsCisgICAgMHgxLjVkYjNkNzQyYzI2NTNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDEKKyAgICAtMHgxLmVjNTg4M2I3YjZjZjRkODU5YWIwNGUxNWQ1MzY5OGM5cC0xLAorICAgIDB4MS4xOGZlZTk2YTFhNTg1OTI4YTk0Y2RhN2UzZDkxNmZlMXAtMiwKKyAgICAtMHgxLjRhZjY0NWNmMDFlYThwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDIKKyAgICAweDEuZWM1ODgzYjdiNmNmNGQ4NTlhYjA0ZTE1ZDUzNjk4YzlwLTEsCisgICAgMHgxLjE4ZmVlOTZhMWE1ODU5MjhhOTRjZGE3ZTNkOTE2ZmUxcC0yLAorICAgIDB4MS40YWY2NDVjZjAxZWE4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjAzCisgICAgLTB4MS5lMGMwNGE5NGUxNzMwOWM4MDZjMWM3OGJkZGMxZDYwN3AtMSwKKyAgICAweDEuNjA0MzYyMWIxM2JlMmZmMDcwODVmODI3ODU5OGU1NjZwLTIsCisgICAgLTB4MS4zODM4YjQ1YjQxNmZkcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjA0CisgICAgMHgxLmUwYzA0YTk0ZTE3MzA5YzgwNmMxYzc4YmRkYzFkNjA3cC0xLAorICAgIDB4MS42MDQzNjIxYjEzYmUyZmYwNzA4NWY4Mjc4NTk4ZTU2NnAtMiwKKyAgICAweDEuMzgzOGI0NWI0MTZmZHAwLAorICB9LAorICB7IC8vIEVudHJ5IDIwNQorICAgIC0weDEuZDI5NGQxZjk2YzdlYmRiOTg2OWRkOTdjZjU3NGRkYjlwLTEsCisgICAgMHgxLmE1YTRjY2Y0MGQ5ZDliYTk3ZmFhNGUyM2VjY2U5ZTNhcC0yLAorICAgIC0weDEuMjU3YjIyZTc4MGY1MnAwLAorICB9LAorICB7IC8vIEVudHJ5IDIwNgorICAgIDB4MS5kMjk0ZDFmOTZjN2ViZGI5ODY5ZGQ5N2NmNTc0ZGRiOXAtMSwKKyAgICAweDEuYTVhNGNjZjQwZDlkOWJhOTdmYWE0ZTIzZWNjZTllM2FwLTIsCisgICAgMHgxLjI1N2IyMmU3ODBmNTJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDcKKyAgICAtMHgxLmMxZTk4ODMzNzNkN2VjYzQ4YzkyZGM4ODc1NTA1ZjdlcC0xLAorICAgIDB4MS5lOGM0MDVmMzZmODViN2Y1ZDZhMzhkZmQ0YTY5MjM0MXAtMiwKKyAgICAtMHgxLjEyYmQ5MTczYzA3YWJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDgKKyAgICAweDEuYzFlOTg4MzM3M2Q3ZWNjNDhjOTJkYzg4NzU1MDVmN2VwLTEsCisgICAgMHgxLmU4YzQwNWYzNmY4NWI3ZjVkNmEzOGRmZDRhNjkyMzQxcC0yLAorICAgIDB4MS4xMmJkOTE3M2MwN2FicDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjA5CisgICAgLTB4MS5hMmMyODlkOWQwNTVhYzM3N2Y2N2Q3YTU0YTBiMzAwNXAtMSwKKyAgICAweDEuMjY5NzZhNmM0ZTBmODY2MzMzMjdmMWNlZWNiNTA4YWVwLTEsCisgICAgLTB4MS5lYTVjM2VkNWIzODUwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIxMAorICAgIDB4MS5hMmMyODlkOWQwNTVhYzM3N2Y2N2Q3YTU0YTBiMzAwNXAtMSwKKyAgICAweDEuMjY5NzZhNmM0ZTBmODY2MzMzMjdmMWNlZWNiNTA4YWVwLTEsCisgICAgMHgxLmVhNWMzZWQ1YjM4NTBwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjExCisgICAgLTB4MS45NWYwNTI1N2RiY2I1ZjRiMTI2MzZjNTg3OGVhNDA1YXAtMSwKKyAgICAweDEuMzgwNWExODgyMDA5ZjI4NDNkYTgwOGU5NTlmMTc4NjFwLTEsCisgICAgLTB4MS5kNGI4N2RhYjY3MGEwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIxMgorICAgIDB4MS45NWYwNTI1N2RiY2I1ZjRiMTI2MzZjNTg3OGVhNDA1YXAtMSwKKyAgICAweDEuMzgwNWExODgyMDA5ZjI4NDNkYTgwOGU5NTlmMTc4NjFwLTEsCisgICAgMHgxLmQ0Yjg3ZGFiNjcwYTBwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjEzCisgICAgLTB4MS44ODY0N2YyNmE2ZTBmNmIyNzE1YTZjMzc5N2VjMTFmNXAtMSwKKyAgICAweDEuNDhlNTJlMGE2NWJjYjNjZDQ2NDU1YzRkMjMzOGJkZjJwLTEsCisgICAgLTB4MS5iZjE0YmM4MTFhOGYwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIxNAorICAgIDB4MS44ODY0N2YyNmE2ZTBmNmIyNzE1YTZjMzc5N2VjMTFmNXAtMSwKKyAgICAweDEuNDhlNTJlMGE2NWJjYjNjZDQ2NDU1YzRkMjMzOGJkZjJwLTEsCisgICAgMHgxLmJmMTRiYzgxMWE4ZjBwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjE1CisgICAgLTB4MS43YTI1NDFkZmQ0ZTc1MmRlMzhmMDRhYmEyMWZjOWQ5ZnAtMSwKKyAgICAweDEuNTkyZTU4ZWEwYTllZWMwYjM1N2ViNGU5YTgzYjBlYTVwLTEsCisgICAgLTB4MS5hOTcwZmI1NmNlMTQwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIxNgorICAgIDB4MS43YTI1NDFkZmQ0ZTc1MmRlMzhmMDRhYmEyMWZjOWQ5ZnAtMSwKKyAgICAweDEuNTkyZTU4ZWEwYTllZWMwYjM1N2ViNGU5YTgzYjBlYTVwLTEsCisgICAgMHgxLmE5NzBmYjU2Y2UxNDBwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjE3CisgICAgLTB4MS42YjM5MWUyNWJjMjZjYmJjZjdhMDE4NDA3MGFmOWMzOXAtMSwKKyAgICAweDEuNjhkOWFmZTA1MmQxZjBlOTMyNGFlODc2OTYxYmNkYjFwLTEsCisgICAgLTB4MS45M2NkM2EyYzgxOTkwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIxOAorICAgIDB4MS42YjM5MWUyNWJjMjZjYmJjZjdhMDE4NDA3MGFmOWMzOXAtMSwKKyAgICAweDEuNjhkOWFmZTA1MmQxZjBlOTMyNGFlODc2OTYxYmNkYjFwLTEsCisgICAgMHgxLjkzY2QzYTJjODE5OTBwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjE5CisgICAgLTB4MS41YmE2ZTZhOGU3MDY1MzViOThmYzk5ZGZhZWY4MjRmMXAtMSwKKyAgICAweDEuNzdlMDA4ZDA3NzVlNzQ0ZWIxNmEyYzRlYzcxODRjNDNwLTEsCisgICAgLTB4MS43ZTI5NzkwMjM1MWUwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIyMAorICAgIDB4MS41YmE2ZTZhOGU3MDY1MzViOThmYzk5ZGZhZWY4MjRmMXAtMSwKKyAgICAweDEuNzdlMDA4ZDA3NzVlNzQ0ZWIxNmEyYzRlYzcxODRjNDNwLTEsCisgICAgMHgxLjdlMjk3OTAyMzUxZTBwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjIxCisgICAgLTB4MS40Yjc1YmEwOTZmYTU0OWViOTM1OTVkODE5NGFiOTE3ZnAtMSwKKyAgICAweDEuODYzYTg1MGU0MzhmZTAyOTMwMmFiYTBmNWYxMjc2MTZwLTEsCisgICAgLTB4MS42ODg1YjdkN2U4YTMwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIyMgorICAgIDB4MS40Yjc1YmEwOTZmYTU0OWViOTM1OTVkODE5NGFiOTE3ZnAtMSwKKyAgICAweDEuODYzYTg1MGU0MzhmZTAyOTMwMmFiYTBmNWYxMjc2MTZwLTEsCisgICAgMHgxLjY4ODViN2Q3ZThhMzBwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjIzCisgICAgLTB4MS4zYWFjZmY5NWEzMTIyYjE1ZjM3MmJmZDJmZGY5YTc1ZnAtMSwKKyAgICAweDEuOTNlMjk0ODIzM2ZjZTgxNDQzOWVkNTFmZDI1NDg5MjBwLTEsCisgICAgLTB4MS41MmUxZjZhZDljMjgwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIyNAorICAgIDB4MS4zYWFjZmY5NWEzMTIyYjE1ZjM3MmJmZDJmZGY5YTc1ZnAtMSwKKyAgICAweDEuOTNlMjk0ODIzM2ZjZTgxNDQzOWVkNTFmZDI1NDg5MjBwLTEsCisgICAgMHgxLjUyZTFmNmFkOWMyODBwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjI1CisgICAgLTB4MS4yOTU0NjNlNzY5Mjg0YTVhZWQxN2E0NDMzOTJmMzhmM3AtMSwKKyAgICAweDEuYTBkMWY4YTlhNzkxZDRiNTY5NGNhNjhhNDJmZTZjOWJwLTEsCisgICAgLTB4MS4zZDNlMzU4MzRmYWQwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIyNgorICAgIDB4MS4yOTU0NjNlNzY5Mjg0YTVhZWQxN2E0NDMzOTJmMzhmM3AtMSwKKyAgICAweDEuYTBkMWY4YTlhNzkxZDRiNTY5NGNhNjhhNDJmZTZjOWJwLTEsCisgICAgMHgxLjNkM2UzNTgzNGZhZDBwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjI3CisgICAgLTB4MS5mYzc2OWI3N2U1ODg0OTVhNmY2NDJjYTI0ZTRlZDNmY3AtMiwKKyAgICAweDEuYmM2YmQ4NjFlMTNkZTMwOTQyOGUwMGY3YmVmNmMzZWNwLTEsCisgICAgLTB4MS4wYTBiMDI1MDFjNzk5cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIyOAorICAgIDB4MS5mYzc2OWI3N2U1ODg0OTVhNmY2NDJjYTI0ZTRlZDNmY3AtMiwKKyAgICAweDEuYmM2YmQ4NjFlMTNkZTMwOTQyOGUwMGY3YmVmNmMzZWNwLTEsCisgICAgMHgxLjBhMGIwMjUwMWM3OTlwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjI5CisgICAgLTB4MS5jODUzYzc4NDYyZGU0NmI1NzQzMzE1NjEyZjhiNWE3Y3AtMiwKKyAgICAweDEuY2E1OWM2ZmEzZDljZTIzOGEyMjczOTNiNmIwNzViYzVwLTEsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJjcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIzMAorICAgIDB4MS5jODUzYzc4NDYyZGU0NmI1NzQzMzE1NjEyZjhiNWE3Y3AtMiwKKyAgICAweDEuY2E1OWM2ZmEzZDljZTIzOGEyMjczOTNiNmIwNzViYzVwLTEsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmNwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjMxCisgICAgLTB4MS45MmFiYTkwYWFmMjcyNDlkZTQ5Yzc4ZmM2NDNjOGI3MnAtMiwKKyAgICAweDEuZDZjMGIxMjU3OTFjZmZjZTgzZTMyNTY0NzEyYjc4YzZwLTEsCisgICAgLTB4MS45ZGQ4M2M3YzllMTI2cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIzMgorICAgIDB4MS45MmFiYTkwYWFmMjcyNDlkZTQ5Yzc4ZmM2NDNjOGI3MnAtMiwKKyAgICAweDEuZDZjMGIxMjU3OTFjZmZjZTgzZTMyNTY0NzEyYjc4YzZwLTEsCisgICAgMHgxLjlkZDgzYzdjOWUxMjZwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjMzCisgICAgLTB4MS41YmFjMDY0NjU4ZjM5NDYwYzgzMTEzYzBhMDA5N2EwY3AtMiwKKyAgICAweDEuZTE5NjAyNjE4Mjk4NTgzOTE2NDViYmUxMjAxOWU1OGFwLTEsCisgICAgLTB4MS42MmI5NTg2YWQwYTIwcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIzNAorICAgIDB4MS41YmFjMDY0NjU4ZjM5NDYwYzgzMTEzYzBhMDA5N2EwY3AtMiwKKyAgICAweDEuZTE5NjAyNjE4Mjk4NTgzOTE2NDViYmUxMjAxOWU1OGFwLTEsCisgICAgMHgxLjYyYjk1ODZhZDBhMjBwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjM1CisgICAgLTB4MS4yMzgzY2E4MDc4ZTU4NDc3Y2Q1ZmIxZDlkZTAzMWRjZXAtMiwKKyAgICAweDEuZWFkMDdjYzYzNTY5NjRlMjdhMTAzNmQyZjhiMTU4ZjdwLTEsCisgICAgLTB4MS4yNzlhNzQ1OTAzMzFhcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIzNgorICAgIDB4MS4yMzgzY2E4MDc4ZTU4NDc3Y2Q1ZmIxZDlkZTAzMWRjZXAtMiwKKyAgICAweDEuZWFkMDdjYzYzNTY5NjRlMjdhMTAzNmQyZjhiMTU4ZjdwLTEsCisgICAgMHgxLjI3OWE3NDU5MDMzMWFwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjM3CisgICAgLTB4MS5kNGM1YmMxMWQyMzcxYWYyZmUyNWVmNWVkZTI3NjZhM3AtMywKKyAgICAweDEuZjI2ODQwZTdiMjE4OGY3YTBjYzY2MWEwZWRlMzcyOGJwLTEsCisgICAgLTB4MS5kOGY3MjA4ZTZiODI5cC0zLAorICB9LAorICB7IC8vIEVudHJ5IDIzOAorICAgIDB4MS5kNGM1YmMxMWQyMzcxYWYyZmUyNWVmNWVkZTI3NjZhM3AtMywKKyAgICAweDEuZjI2ODQwZTdiMjE4OGY3YTBjYzY2MWEwZWRlMzcyOGJwLTEsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MjlwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMjM5CisgICAgLTB4MS42MGYzZmFhZjQzMDIzZDNjNzg2M2FlMDZkNGQ1OTc3NHAtMywKKyAgICAweDEuZjg1NmQ0OGRiNzk3ZGVjMGI3OWUxMzUzNDA5ZGMzZjJwLTEsCisgICAgLTB4MS42MmI5NTg2YWQwYTFlcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDI0MAorICAgIDB4MS42MGYzZmFhZjQzMDIzZDNjNzg2M2FlMDZkNGQ1OTc3NHAtMywKKyAgICAweDEuZjg1NmQ0OGRiNzk3ZGVjMGI3OWUxMzUzNDA5ZGMzZjJwLTEsCisgICAgMHgxLjYyYjk1ODZhZDBhMWVwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMjQxCisgICAgLTB4MS5kN2VhM2RlNDVhOWQ2NTYzYWMwMDVjMGM1YmFkOGM1MHAtNCwKKyAgICAweDEuZmM5NzI4M2E0MjQ3OTcyMTVmOGE4ZDE5Njc3MzZjOWJwLTEsCisgICAgLTB4MS5kOGY3MjA4ZTZiODI2cC00LAorICB9LAorICB7IC8vIEVudHJ5IDI0MgorICAgIDB4MS5kN2VhM2RlNDVhOWQ2NTYzYWMwMDVjMGM1YmFkOGM1MHAtNCwKKyAgICAweDEuZmM5NzI4M2E0MjQ3OTcyMTVmOGE4ZDE5Njc3MzZjOWJwLTEsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MjZwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgMjQzCisgICAgLTB4MS5kOGIzZGY0ODk5ODdhNmZlMGVlYWQwMDhlNzIwYWEyMnAtNSwKKyAgICAweDEuZmYyNTliN2FiOWY0ZjlhOGNiOWYxYzMzMzI3MmU0MDlwLTEsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJkcC01LAorICB9LAorICB7IC8vIEVudHJ5IDI0NAorICAgIDB4MS5kOGIzZGY0ODk5ODdhNmZlMGVlYWQwMDhlNzIwYWEyMnAtNSwKKyAgICAweDEuZmYyNTliN2FiOWY0ZjlhOGNiOWYxYzMzMzI3MmU0MDlwLTEsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmRwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMjQ1CisgICAgMHgxLmQ4YjNkZjQ4OTk4N2E2ZmUwZWVhZDAwOGU3MjBhYTIycC01LAorICAgIDB4MS5mZjI1OWI3YWI5ZjRmOWE4Y2I5ZjFjMzMzMjcyZTQwOXAtMSwKKyAgICAweDEuZDhmNzIwOGU2YjgyZHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDYKKyAgICAtMHgxLmQ4YjNkZjQ4OTk4N2E2ZmUwZWVhZDAwOGU3MjBhYTIycC01LAorICAgIDB4MS5mZjI1OWI3YWI5ZjRmOWE4Y2I5ZjFjMzMzMjcyZTQwOXAtMSwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmRwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMjQ3CisgICAgMHgxLmQ3ZWEzZGU0NWE5ZGQ0YTRiY2NkMWE4YzA0OGZhZjRjcC00LAorICAgIDB4MS5mYzk3MjgzYTQyNDc5NTg0NzI5NDY1NGExZDhhMDhlZHAtMSwKKyAgICAweDEuZDhmNzIwOGU2YjgyZHAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDgKKyAgICAtMHgxLmQ3ZWEzZGU0NWE5ZGQ0YTRiY2NkMWE4YzA0OGZhZjRjcC00LAorICAgIDB4MS5mYzk3MjgzYTQyNDc5NTg0NzI5NDY1NGExZDhhMDhlZHAtMSwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmRwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgMjQ5CisgICAgMHgxLjYwZjNmYWFmNDMwMjdjNDc1MmY1NjRmOWQwODE4ZmU4cC0zLAorICAgIDB4MS5mODU2ZDQ4ZGI3OTdkYmZlY2ZhOGI0Y2QzYmU0NDAyN3AtMSwKKyAgICAweDEuNjJiOTU4NmFkMGEyMnAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTAKKyAgICAtMHgxLjYwZjNmYWFmNDMwMjdjNDc1MmY1NjRmOWQwODE4ZmU4cC0zLAorICAgIDB4MS5mODU2ZDQ4ZGI3OTdkYmZlY2ZhOGI0Y2QzYmU0NDAyN3AtMSwKKyAgICAtMHgxLjYyYjk1ODZhZDBhMjJwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMjUxCisgICAgMHgxLmQ0YzViYzExZDIzNzU5NDAwNjQyZTVhMWVmZGMwZjg1cC0zLAorICAgIDB4MS5mMjY4NDBlN2IyMTg4YmQwODE0ZTNkZmM3ZjZmM2Y4N3AtMSwKKyAgICAweDEuZDhmNzIwOGU2YjgyZHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTIKKyAgICAtMHgxLmQ0YzViYzExZDIzNzU5NDAwNjQyZTVhMWVmZGMwZjg1cC0zLAorICAgIDB4MS5mMjY4NDBlN2IyMTg4YmQwODE0ZTNkZmM3ZjZmM2Y4N3AtMSwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmRwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMjUzCisgICAgMHgxLjIzODNjYTgwNzhlNWEzMjRkNTJjMTUzMDc0MmNkNGY1cC0yLAorICAgIDB4MS5lYWQwN2NjNjM1Njk2MDU0NmFlNjM0ZWY2MjYyMWZiMnAtMSwKKyAgICAweDEuMjc5YTc0NTkwMzMxY3AtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTQKKyAgICAtMHgxLjIzODNjYTgwNzhlNWEzMjRkNTJjMTUzMDc0MmNkNGY1cC0yLAorICAgIDB4MS5lYWQwN2NjNjM1Njk2MDU0NmFlNjM0ZWY2MjYyMWZiMnAtMSwKKyAgICAtMHgxLjI3OWE3NDU5MDMzMWNwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjU1CisgICAgMHgxLjViYWMwNjQ2NThmM2IyN2EyODU3MmJlYTI1NjE5NWVmcC0yLAorICAgIDB4MS5lMTk2MDI2MTgyOTg1MmNhNjYyY2EyN2Q1MThjMmZhOXAtMSwKKyAgICAweDEuNjJiOTU4NmFkMGEyMnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTYKKyAgICAtMHgxLjViYWMwNjQ2NThmM2IyN2EyODU3MmJlYTI1NjE5NWVmcC0yLAorICAgIDB4MS5lMTk2MDI2MTgyOTg1MmNhNjYyY2EyN2Q1MThjMmZhOXAtMSwKKyAgICAtMHgxLjYyYjk1ODZhZDBhMjJwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjU3CisgICAgMHgxLjkyYWJhOTBhYWYyNzQyMDllZmFlZDA4ZTM0MDcxZTNicC0yLAorICAgIDB4MS5kNmMwYjEyNTc5MWNmOTgzZDUzZWZhYTdkNDVlMjkxZXAtMSwKKyAgICAweDEuOWRkODNjN2M5ZTEyOHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTgKKyAgICAtMHgxLjkyYWJhOTBhYWYyNzQyMDllZmFlZDA4ZTM0MDcxZTNicC0yLAorICAgIDB4MS5kNmMwYjEyNTc5MWNmOTgzZDUzZWZhYTdkNDVlMjkxZXAtMSwKKyAgICAtMHgxLjlkZDgzYzdjOWUxMjhwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjU5CisgICAgMHgxLmM4NTNjNzg0NjJkZTYzNWIxMGEyYjkzYWZkNzVkYTI2cC0yLAorICAgIDB4MS5jYTU5YzZmYTNkOWNkYjE3NTMwOTI3YWZmMWIzM2FiYnAtMSwKKyAgICAweDEuZDhmNzIwOGU2YjgyZXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjAKKyAgICAtMHgxLmM4NTNjNzg0NjJkZTYzNWIxMGEyYjkzYWZkNzVkYTI2cC0yLAorICAgIDB4MS5jYTU5YzZmYTNkOWNkYjE3NTMwOTI3YWZmMWIzM2FiYnAtMSwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmVwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjYxCisgICAgMHgxLmZjNzY5Yjc3ZTU4ODQ5NWE2ZjY0MmNhMjRlNGVkM2ZjcC0yLAorICAgIDB4MS5iYzZiZDg2MWUxM2RlMzA5NDI4ZTAwZjdiZWY2YzNlY3AtMSwKKyAgICAweDEuMGEwYjAyNTAxYzc5OXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjIKKyAgICAtMHgxLmZjNzY5Yjc3ZTU4ODQ5NWE2ZjY0MmNhMjRlNGVkM2ZjcC0yLAorICAgIDB4MS5iYzZiZDg2MWUxM2RlMzA5NDI4ZTAwZjdiZWY2YzNlY3AtMSwKKyAgICAtMHgxLjBhMGIwMjUwMWM3OTlwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjYzCisgICAgMHgxLjI5NTQ2M2U3NjkyODE2NDBhZTAyNmY1MGZjNDVlMzAxcC0xLAorICAgIDB4MS5hMGQxZjhhOWE3OTFmOWRmZjVjOTkzYWY0OTA4MjY0ZHAtMSwKKyAgICAweDEuM2QzZTM1ODM0ZmFjY3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjQKKyAgICAtMHgxLjI5NTQ2M2U3NjkyODE2NDBhZTAyNmY1MGZjNDVlMzAxcC0xLAorICAgIDB4MS5hMGQxZjhhOWE3OTFmOWRmZjVjOTkzYWY0OTA4MjY0ZHAtMSwKKyAgICAtMHgxLjNkM2UzNTgzNGZhY2NwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjY1CisgICAgMHgxLjNhYWNmZjk1YTMxMWY4OTlhMGUyNzk1MzVlODFjNGVjcC0xLAorICAgIDB4MS45M2UyOTQ4MjMzZmQwZjY5ZTM5MTg5ODIxNDhmODI2NXAtMSwKKyAgICAweDEuNTJlMWY2YWQ5YzI3Y3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjYKKyAgICAtMHgxLjNhYWNmZjk1YTMxMWY4OTlhMGUyNzk1MzVlODFjNGVjcC0xLAorICAgIDB4MS45M2UyOTQ4MjMzZmQwZjY5ZTM5MTg5ODIxNDhmODI2NXAtMSwKKyAgICAtMHgxLjUyZTFmNmFkOWMyN2NwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjY3CisgICAgMHgxLjRiNzViYTA5NmZhNTE5MjQ0MmI3OTUwZjk2MGY4MDA2cC0xLAorICAgIDB4MS44NjNhODUwZTQzOTAwOTk3ZTc2YmU4MDQwNTQzNzM3N3AtMSwKKyAgICAweDEuNjg4NWI3ZDdlOGEyY3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjgKKyAgICAtMHgxLjRiNzViYTA5NmZhNTE5MjQ0MmI3OTUwZjk2MGY4MDA2cC0xLAorICAgIDB4MS44NjNhODUwZTQzOTAwOTk3ZTc2YmU4MDQwNTQzNzM3N3AtMSwKKyAgICAtMHgxLjY4ODViN2Q3ZThhMmNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjY5CisgICAgMHgxLjViYTZlNmE4ZTcwNjI0NWY5N2UyOGFmM2RkYjcwMGY2cC0xLAorICAgIDB4MS43N2UwMDhkMDc3NWU5ZmMzOGUzZjQ5MmY4ZTkzZmY1MXAtMSwKKyAgICAweDEuN2UyOTc5MDIzNTFkY3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzAKKyAgICAtMHgxLjViYTZlNmE4ZTcwNjI0NWY5N2UyOGFmM2RkYjcwMGY2cC0xLAorICAgIDB4MS43N2UwMDhkMDc3NWU5ZmMzOGUzZjQ5MmY4ZTkzZmY1MXAtMSwKKyAgICAtMHgxLjdlMjk3OTAyMzUxZGNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjcxCisgICAgMHgxLjZiMzkxZTI1YmMyNjllYTFjMWE0MGRlNjJmYmMwM2I0cC0xLAorICAgIDB4MS42OGQ5YWZlMDUyZDIxZTUwNTYwZjlmZmI2Y2MxYjk0NXAtMSwKKyAgICAweDEuOTNjZDNhMmM4MTk4Y3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzIKKyAgICAtMHgxLjZiMzkxZTI1YmMyNjllYTFjMWE0MGRlNjJmYmMwM2I0cC0xLAorICAgIDB4MS42OGQ5YWZlMDUyZDIxZTUwNTYwZjlmZmI2Y2MxYjk0NXAtMSwKKyAgICAtMHgxLjkzY2QzYTJjODE5OGNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjczCisgICAgMHgxLjdhMjU0MWRmZDRlNzI3Yjg2ZGQzMDk2NjQxODZlYzZicC0xLAorICAgIDB4MS41OTJlNThlYTBhOWYxYjRmZGRiYWFmODY4ZmU0NzkxMXAtMSwKKyAgICAweDEuYTk3MGZiNTZjZTEzY3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzQKKyAgICAtMHgxLjdhMjU0MWRmZDRlNzI3Yjg2ZGQzMDk2NjQxODZlYzZicC0xLAorICAgIDB4MS41OTJlNThlYTBhOWYxYjRmZGRiYWFmODY4ZmU0NzkxMXAtMSwKKyAgICAtMHgxLmE5NzBmYjU2Y2UxM2NwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjc1CisgICAgMHgxLjg4NjQ3ZjI2YTZlMGNkOTVjYjk5MWY3ZmZlNjFhMDJlcC0xLAorICAgIDB4MS40OGU1MmUwYTY1YmNlNGQ5ZDYyYTMxMjkzZjdkNDFjMXAtMSwKKyAgICAweDEuYmYxNGJjODExYThlY3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzYKKyAgICAtMHgxLjg4NjQ3ZjI2YTZlMGNkOTVjYjk5MWY3ZmZlNjFhMDJlcC0xLAorICAgIDB4MS40OGU1MmUwYTY1YmNlNGQ5ZDYyYTMxMjkzZjdkNDFjMXAtMSwKKyAgICAtMHgxLmJmMTRiYzgxMWE4ZWNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjc3CisgICAgMHgxLjk1ZjA1MjU3ZGJjYjM4NGE1ZTMyNjg1NzM3NmRkODAxcC0xLAorICAgIDB4MS4zODA1YTE4ODIwMGEyNTQyNDdmMzA0NjJjMzZhY2Y2YXAtMSwKKyAgICAweDEuZDRiODdkYWI2NzA5Y3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzgKKyAgICAtMHgxLjk1ZjA1MjU3ZGJjYjM4NGE1ZTMyNjg1NzM3NmRkODAxcC0xLAorICAgIDB4MS4zODA1YTE4ODIwMGEyNTQyNDdmMzA0NjJjMzZhY2Y2YXAtMSwKKyAgICAtMHgxLmQ0Yjg3ZGFiNjcwOWNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjc5CisgICAgMHgxLmEyYzI4OWQ5ZDA1NTg3NjQ5MjFhNGRlMzU1Zjk0NDhjcC0xLAorICAgIDB4MS4yNjk3NmE2YzRlMGZiYWJiODQ2MzJiZDk5ZmVlYzljNnAtMSwKKyAgICAweDEuZWE1YzNlZDViMzg0Y3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODAKKyAgICAtMHgxLmEyYzI4OWQ5ZDA1NTg3NjQ5MjFhNGRlMzU1Zjk0NDhjcC0xLAorICAgIDB4MS4yNjk3NmE2YzRlMGZiYWJiODQ2MzJiZDk5ZmVlYzljNnAtMSwKKyAgICAtMHgxLmVhNWMzZWQ1YjM4NGNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjgxCisgICAgMHgxLmMxZTk4ODMzNzNkN2VjYzQ4YzkyZGM4ODc1NTA1ZjdlcC0xLAorICAgIDB4MS5lOGM0MDVmMzZmODViN2Y1ZDZhMzhkZmQ0YTY5MjM0MXAtMiwKKyAgICAweDEuMTJiZDkxNzNjMDdhYnAwLAorICB9LAorICB7IC8vIEVudHJ5IDI4MgorICAgIC0weDEuYzFlOTg4MzM3M2Q3ZWNjNDhjOTJkYzg4NzU1MDVmN2VwLTEsCisgICAgMHgxLmU4YzQwNWYzNmY4NWI3ZjVkNmEzOGRmZDRhNjkyMzQxcC0yLAorICAgIC0weDEuMTJiZDkxNzNjMDdhYnAwLAorICB9LAorICB7IC8vIEVudHJ5IDI4MworICAgIDB4MS5kMjk0ZDFmOTZjN2VmMjZlMjAzYzViMzA5YTU1NjcxZnAtMSwKKyAgICAweDEuYTVhNGNjZjQwZDljYjI1ZjE2YWQ5N2U0ODBjNGI0ODNwLTIsCisgICAgMHgxLjI1N2IyMmU3ODBmNTZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODQKKyAgICAtMHgxLmQyOTRkMWY5NmM3ZWYyNmUyMDNjNWIzMDlhNTU2NzFmcC0xLAorICAgIDB4MS5hNWE0Y2NmNDBkOWNiMjVmMTZhZDk3ZTQ4MGM0YjQ4M3AtMiwKKyAgICAtMHgxLjI1N2IyMmU3ODBmNTZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODUKKyAgICAweDEuZTBjMDRhOTRlMTczMzVkMDczMDUyYTAzOTRiOWUxYzNwLTEsCisgICAgMHgxLjYwNDM2MjFiMTNiZDNmOTA0YjNiODc2ZGY1YjJjNmY0cC0yLAorICAgIDB4MS4zODM4YjQ1YjQxNzAxcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjg2CisgICAgLTB4MS5lMGMwNGE5NGUxNzMzNWQwNzMwNTJhMDM5NGI5ZTFjM3AtMSwKKyAgICAweDEuNjA0MzYyMWIxM2JkM2Y5MDRiM2I4NzZkZjViMmM2ZjRwLTIsCisgICAgLTB4MS4zODM4YjQ1YjQxNzAxcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjg3CisgICAgMHgxLmVjNTg4M2I3YjZjZjcwYTU3N2RkOTE2MGQwZjhlOWQ1cC0xLAorICAgIDB4MS4xOGZlZTk2YTFhNTc2MmZjNjc3MGZmMTY4ZTA2YWIzZXAtMiwKKyAgICAweDEuNGFmNjQ1Y2YwMWVhY3AwLAorICB9LAorICB7IC8vIEVudHJ5IDI4OAorICAgIC0weDEuZWM1ODgzYjdiNmNmNzBhNTc3ZGQ5MTYwZDBmOGU5ZDVwLTEsCisgICAgMHgxLjE4ZmVlOTZhMWE1NzYyZmM2NzcwZmYxNjhlMDZhYjNlcC0yLAorICAgIC0weDEuNGFmNjQ1Y2YwMWVhY3AwLAorICB9LAorICB7IC8vIEVudHJ5IDI4OQorICAgIDB4MS5mNTRkOTcxODgxYWQ4MjYyOWJkODRkMjE0MTk0ZThkZHAtMSwKKyAgICAweDEuYTA3MjNhOTU0OTJjZTk5ODQ1N2ZiN2EwZDA5YTYzODVwLTMsCisgICAgMHgxLjVkYjNkNzQyYzI2NTdwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTAKKyAgICAtMHgxLmY1NGQ5NzE4ODFhZDgyNjI5YmQ4NGQyMTQxOTRlOGRkcC0xLAorICAgIDB4MS5hMDcyM2E5NTQ5MmNlOTk4NDU3ZmI3YTBkMDlhNjM4NXAtMywKKyAgICAtMHgxLjVkYjNkNzQyYzI2NTdwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTEKKyAgICAweDEuZmI5MzNjNDAxMDdmZTgzZmQxNmMxNzg5ZTI3ZjY5ZjdwLTEsCisgICAgMHgxLjBjYWI5MTE1NjQwYjlkOWQ0NjY3MjNiYmQ1ZDU4OWJlcC0zLAorICAgIDB4MS43MDcxNjhiNjgyZTAycDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjkyCisgICAgLTB4MS5mYjkzM2M0MDEwN2ZlODNmZDE2YzE3ODllMjdmNjlmN3AtMSwKKyAgICAweDEuMGNhYjkxMTU2NDBiOWQ5ZDQ2NjcyM2JiZDVkNTg5YmVwLTMsCisgICAgLTB4MS43MDcxNjhiNjgyZTAycDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjkzCisgICAgMHgxLmZmMjBkOTYxNjI0ZTc3ZGFlZjMyOWI0MDI5YzM2MmRlcC0xLAorICAgIDB4MS5kZGQxZWMyNWUyMDFmNTM4OTI1YmY1YmNmN2M3ZGY2ZXAtNSwKKyAgICAweDEuODMyZWZhMmE0MzVhZHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI5NAorICAgIC0weDEuZmYyMGQ5NjE2MjRlNzdkYWVmMzI5YjQwMjljMzYyZGVwLTEsCisgICAgMHgxLmRkZDFlYzI1ZTIwMWY1Mzg5MjViZjViY2Y3YzdkZjZlcC01LAorICAgIC0weDEuODMyZWZhMmE0MzVhZHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI5NQorICAgIDB4MS5mZmYxOGYyNGYzZTRiNjk1OTIyOTRmMjA2ZDdiMzJjMnAtMSwKKyAgICAtMHgxLmU2NjY5YTI3MGM1NmQzYTA4ZDkxY2MyNzIxZjkyZmUxcC03LAorICAgIDB4MS45NWVjOGI5ZTAzZDU4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjk2CisgICAgLTB4MS5mZmYxOGYyNGYzZTRiNjk1OTIyOTRmMjA2ZDdiMzJjMnAtMSwKKyAgICAtMHgxLmU2NjY5YTI3MGM1NmQzYTA4ZDkxY2MyNzIxZjkyZmUxcC03LAorICAgIC0weDEuOTVlYzhiOWUwM2Q1OHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI5NworICAgIDB4MS5mZTA0M2Y1NzM2OWQ2YTUyZmEzM2YwMTE5ZWM0ZGExOXAtMSwKKyAgICAtMHgxLjY4MmYzY2MzYzdhMDhkYTJjZTAyYTQxY2RjN2JlZDg2cC00LAorICAgIDB4MS5hOGFhMWQxMWM0NGZmcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjk4CisgICAgLTB4MS5mZTA0M2Y1NzM2OWQ2YTUyZmEzM2YwMTE5ZWM0ZGExOXAtMSwKKyAgICAtMHgxLjY4MmYzY2MzYzdhMDhkYTJjZTAyYTQxY2RjN2JlZDg2cC00LAorICAgIC0weDEuYThhYTFkMTFjNDRmZnAwLAorICB9LAorICB7IC8vIEVudHJ5IDI5OQorICAgIDB4MS5iM2QzNjk1YWNjNDEzNmIyZDQ0NzE0ZjliMzg0MTliNHAtMSwKKyAgICAweDEuMGNiMzQ2OWEyOWVhNjZkNDAzMWJlNzY5NzAyYWFkNWNwLTEsCisgICAgMHgxLjA0YWZmNmQzMzA5NDJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDAKKyAgICAtMHgxLmIzZDM2OTVhY2M0MTM2YjJkNDQ3MTRmOWIzODQxOWI0cC0xLAorICAgIDB4MS4wY2IzNDY5YTI5ZWE2NmQ0MDMxYmU3Njk3MDJhYWQ1Y3AtMSwKKyAgICAtMHgxLjA0YWZmNmQzMzA5NDJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDEKKyAgICAweDEuYjNkNDE5NzJkYzgwNjM5OTRmNjM0MTNkNWU0ZDhlNGJwLTEsCisgICAgMHgxLjBjYjIyOGZhN2Y4MTE3YzgyZTYxY2Y1MzkzMzQxYzY0cC0xLAorICAgIDB4MS4wNGIwOWU5OGRjZGI0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzAyCisgICAgLTB4MS5iM2Q0MTk3MmRjODA2Mzk5NGY2MzQxM2Q1ZTRkOGU0YnAtMSwKKyAgICAweDEuMGNiMjI4ZmE3ZjgxMTdjODJlNjFjZjUzOTMzNDFjNjRwLTEsCisgICAgLTB4MS4wNGIwOWU5OGRjZGI0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzAzCisgICAgMHgxLmIzZDRjOThhMzE4ZmI2NmY4MjFkNzI4NmFlN2RjZTdicC0xLAorICAgIDB4MS4wY2IxMGI1YTYxYjA1YTczZTc4YTNlNDQ0N2JhZjUxNHAtMSwKKyAgICAweDEuMDRiMTQ2NWU4OTIyNnAwLAorICB9LAorICB7IC8vIEVudHJ5IDMwNAorICAgIC0weDEuYjNkNGM5OGEzMThmYjY2ZjgyMWQ3Mjg2YWU3ZGNlN2JwLTEsCisgICAgMHgxLjBjYjEwYjVhNjFiMDVhNzNlNzhhM2U0NDQ3YmFmNTE0cC0xLAorICAgIC0weDEuMDRiMTQ2NWU4OTIyNnAwLAorICB9LAorICB7IC8vIEVudHJ5IDMwNQorICAgIDB4MS5iM2Q1NzlhMGNiNmVlMzkzZmY3NWI1OGZmZTE2ZDEzZnAtMSwKKyAgICAweDEuMGNhZmVkYjlkMDc4YTk4NDA4NjkyOGFhNDBkMmU0YTVwLTEsCisgICAgMHgxLjA0YjFlZTI0MzU2OThwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDYKKyAgICAtMHgxLmIzZDU3OWEwY2I2ZWUzOTNmZjc1YjU4ZmZlMTZkMTNmcC0xLAorICAgIDB4MS4wY2FmZWRiOWQwNzhhOTg0MDg2OTI4YWE0MGQyZTRhNXAtMSwKKyAgICAtMHgxLjA0YjFlZTI0MzU2OThwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDcKKyAgICAweDEuYjNkNjI5YjZhYTFkOWY2NWFhZDFhMmZjOTMyYzhiY2JwLTEsCisgICAgMHgxLjBjYWVkMDE4Y2JkYTdmYTU5YzYzMWNkNTViMzFhYThkcC0xLAorICAgIDB4MS4wNGIyOTVlOWUxYjBhcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzA4CisgICAgLTB4MS5iM2Q2MjliNmFhMWQ5ZjY1YWFkMWEyZmM5MzJjOGJjYnAtMSwKKyAgICAweDEuMGNhZWQwMThjYmRhN2ZhNTljNjMxY2Q1NWIzMWFhOGRwLTEsCisgICAgLTB4MS4wNGIyOTVlOWUxYjBhcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzA5CisgICAgMHgxLmIzZDZkOWNiY2Q5YjllNDNiN2ZjN2ZkNDI4YTQ0ZGQ4cC0xLAorICAgIDB4MS4wY2FkYjI3NzUzZDY1Nzg1ZTA2ZDBlNDY0MDA2MTQ5ZXAtMSwKKyAgICAweDEuMDRiMzNkYWY4ZGY3Y3AwLAorICB9LAorICB7IC8vIEVudHJ5IDMxMAorICAgIC0weDEuYjNkNmQ5Y2JjZDliOWU0M2I3ZmM3ZmQ0MjhhNDRkZDhwLTEsCisgICAgMHgxLjBjYWRiMjc3NTNkNjU3ODVlMDZkMGU0NjQwMDYxNDllcC0xLAorICAgIC0weDEuMDRiMzNkYWY4ZGY3Y3AwLAorICB9LAorICB7IC8vIEVudHJ5IDMxMQorICAgIDB4MS5iM2Q3ODllMDM1ZTg5NDhkYWIyNzVkZmU1NDZjNWIwOHAtMSwKKyAgICAweDEuMGNhYzk0ZDU2ODZjYWJkMjQzMGMyMGZkZjI4NTViNDdwLTEsCisgICAgMHgxLjA0YjNlNTc1M2EzZWVwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTIKKyAgICAtMHgxLmIzZDc4OWUwMzVlODk0OGRhYjI3NWRmZTU0NmM1YjA4cC0xLAorICAgIDB4MS4wY2FjOTRkNTY4NmNhYmQyNDMwYzIwZmRmMjg1NWI0N3AtMSwKKyAgICAtMHgxLjA0YjNlNTc1M2EzZWVwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTMKKyAgICAweDEuYjNkODM5ZjNlMzA0MzZhMzU4ZTkzY2JkY2IyYmIzNjdwLTEsCisgICAgMHgxLjBjYWI3NzMzMDk5ZGY3Mzg2NDU1NzRjZDQ4MmVmNGIycC0xLAorICAgIDB4MS4wNGI0OGQzYWU2ODYwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzE0CisgICAgLTB4MS5iM2Q4MzlmM2UzMDQzNmEzNThlOTNjYmRjYjJiYjM2N3AtMSwKKyAgICAweDEuMGNhYjc3MzMwOTlkZjczODY0NTU3NGNkNDgyZWY0YjJwLTEsCisgICAgLTB4MS4wNGI0OGQzYWU2ODYwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzE1CisgICAgMHgxLmIzZDhlYTA2ZDRlZTA2ODRmNTc0MWVjNzc3ZWQ4OGUwcC0xLAorICAgIDB4MS4wY2FhNTk5MDM3NmIwNjFlYzFjZjM4OTBmMWI4ZTFlM3AtMSwKKyAgICAweDEuMDRiNTM1MDA5MmNjZnAwLAorICB9LAorICB7IC8vIEVudHJ5IDMxNgorICAgIC0weDEuYjNkOGVhMDZkNGVlMDY4NGY1NzQxZWM3NzdlZDg4ZTBwLTEsCisgICAgMHgxLjBjYWE1OTkwMzc2YjA2MWVjMWNmMzg5MGYxYjhlMWUzcC0xLAorICAgIC0weDEuMDRiNTM1MDA5MmNjZnAwLAorICB9LAorICB7IC8vIEVudHJ5IDMxNworICAgIC0wLjAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTA3NCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTgKKyAgICAwLjAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wcC0xMDc0LAorICB9LAorICB7IC8vIEVudHJ5IDMxOQorICAgIC0wLjAsCisgICAgMHgxLnAwLAorICAgIC0wLjAsCisgIH0sCisgIHsgLy8gRW50cnkgMzIwCisgICAgMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMTA3NCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjEKKyAgICAtMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjBwLTEwNzQsCisgIH0sCisgIHsgLy8gRW50cnkgMzIyCisgICAgMHgxLjE3NzNkNTYxZmQ1MDY1ZDBlOTYwN2E3MjhhMzllZWQycC0xLAorICAgIDB4MS5hZDAyYzc3MWMzNWVkNWYwMTA4OWEwMGM2YTI3ZTBjZnAtMSwKKyAgICAweDEuMjc5YTc0NTkwMzMxYnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjMKKyAgICAtMHgxLjE3NzNkNTYxZmQ1MDY1ZDBlOTYwN2E3MjhhMzllZWQycC0xLAorICAgIDB4MS5hZDAyYzc3MWMzNWVkNWYwMTA4OWEwMGM2YTI3ZTBjZnAtMSwKKyAgICAtMHgxLjI3OWE3NDU5MDMzMWJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzI0CisgICAgMHgxLjE3NzNkNTYxZmQ1MDczMzhmZjljMDg4ZDgwYzY4MGRicC0xLAorICAgIDB4MS5hZDAyYzc3MWMzNWVjZDM0NzFkZTkwMjFlNmMzYjkyYnAtMSwKKyAgICAweDEuMjc5YTc0NTkwMzMxY3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjUKKyAgICAtMHgxLjE3NzNkNTYxZmQ1MDczMzhmZjljMDg4ZDgwYzY4MGRicC0xLAorICAgIDB4MS5hZDAyYzc3MWMzNWVjZDM0NzFkZTkwMjFlNmMzYjkyYnAtMSwKKyAgICAtMHgxLjI3OWE3NDU5MDMzMWNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzI2CisgICAgMHgxLjE3NzNkNTYxZmQ1MDgwYTExNWQ3OTZhODc3MGQzNWVmcC0xLAorICAgIDB4MS5hZDAyYzc3MWMzNWVjNDc4ZDMzMzgwMzc2MmY0NTBkNXAtMSwKKyAgICAweDEuMjc5YTc0NTkwMzMxZHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjcKKyAgICAtMHgxLjE3NzNkNTYxZmQ1MDgwYTExNWQ3OTZhODc3MGQzNWVmcC0xLAorICAgIDB4MS5hZDAyYzc3MWMzNWVjNDc4ZDMzMzgwMzc2MmY0NTBkNXAtMSwKKyAgICAtMHgxLjI3OWE3NDU5MDMzMWRwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzI4CisgICAgMHgxLmY5NWI4ZTcxMDc0MThjMTFjOTRkNGE1NGE5ZGE5YjdhcC0xLAorICAgIC0weDEuNDhkMWRkZDJiMmIzZjhjMjFiOTQyMWU2NWIzODA3MzVwLTMsCisgICAgMHgxLmJiNjdhZTg1ODRjYTlwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjkKKyAgICAtMHgxLmY5NWI4ZTcxMDc0MThjMTFjOTRkNGE1NGE5ZGE5YjdhcC0xLAorICAgIC0weDEuNDhkMWRkZDJiMmIzZjhjMjFiOTQyMWU2NWIzODA3MzVwLTMsCisgICAgLTB4MS5iYjY3YWU4NTg0Y2E5cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzMwCisgICAgMHgxLmY5NWI4ZTcxMDc0MTg2ZWU4MWQ1ZmY4OWQ4ZmFlNTQ1cC0xLAorICAgIC0weDEuNDhkMWRkZDJiMmI0NzcxOGZmMzA2M2I2YmQ5ODEwOTlwLTMsCisgICAgMHgxLmJiNjdhZTg1ODRjYWFwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzEKKyAgICAtMHgxLmY5NWI4ZTcxMDc0MTg2ZWU4MWQ1ZmY4OWQ4ZmFlNTQ1cC0xLAorICAgIC0weDEuNDhkMWRkZDJiMmI0NzcxOGZmMzA2M2I2YmQ5ODEwOTlwLTMsCisgICAgLTB4MS5iYjY3YWU4NTg0Y2FhcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzMyCisgICAgMHgxLmY5NWI4ZTcxMDc0MTgxY2IzYTVlYjRiZjA2MjFkMzgxcC0xLAorICAgIC0weDEuNDhkMWRkZDJiMmI0ZjU2ZmUyY2NhNTg3MWVhZjQ4MjBwLTMsCisgICAgMHgxLmJiNjdhZTg1ODRjYWJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzMKKyAgICAtMHgxLmY5NWI4ZTcxMDc0MTgxY2IzYTVlYjRiZjA2MjFkMzgxcC0xLAorICAgIC0weDEuNDhkMWRkZDJiMmI0ZjU2ZmUyY2NhNTg3MWVhZjQ4MjBwLTMsCisgICAgLTB4MS5iYjY3YWU4NTg0Y2FicDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzM0CisgICAgMHgxLmIxZDgzMDUzMjE2MTVhYzkzOGNmZjAyYmU5ZjI1MDg1cC0yLAorICAgIDB4MS5jZmM2Y2ZhNTJhZDlmOTkxMWRiNGNhMGQ0NWZkYjBiM3AtMSwKKyAgICAweDEuYmZmZmZmZmZmZmZmZnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzUKKyAgICAtMHgxLmIxZDgzMDUzMjE2MTVhYzkzOGNmZjAyYmU5ZjI1MDg1cC0yLAorICAgIDB4MS5jZmM2Y2ZhNTJhZDlmOTkxMWRiNGNhMGQ0NWZkYjBiM3AtMSwKKyAgICAtMHgxLmJmZmZmZmZmZmZmZmZwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzM2CisgICAgMHgxLmIxZDgzMDUzMjE2MTY5NDc2ZjRkMTk4MmI5YjE0YWIxcC0yLAorICAgIDB4MS5jZmM2Y2ZhNTJhZDlmNjJkNmQ1NDIzY2E4MzM5YTAwYXAtMSwKKyAgICAweDEuY3AtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzcKKyAgICAtMHgxLmIxZDgzMDUzMjE2MTY5NDc2ZjRkMTk4MmI5YjE0YWIxcC0yLAorICAgIDB4MS5jZmM2Y2ZhNTJhZDlmNjJkNmQ1NDIzY2E4MzM5YTAwYXAtMSwKKyAgICAtMHgxLmNwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzM4CisgICAgMHgxLmIxZDgzMDUzMjE2MTc3YzVhNWNhNDJkOTg5NTUyNzVhcC0yLAorICAgIDB4MS5jZmM2Y2ZhNTJhZDlmMmM5YmNmMzdkODdjMDU4OTJmNXAtMSwKKyAgICAweDEuYzAwMDAwMDAwMDAwMXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzkKKyAgICAtMHgxLmIxZDgzMDUzMjE2MTc3YzVhNWNhNDJkOTg5NTUyNzVhcC0yLAorICAgIDB4MS5jZmM2Y2ZhNTJhZDlmMmM5YmNmMzdkODdjMDU4OTJmNXAtMSwKKyAgICAtMHgxLmMwMDAwMDAwMDAwMDFwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzQwCisgICAgMHgxLjQ0ZWIzODFjZjM4NjllYTcxY2NiMzY4NjNlNGVhNjVicC0xLAorICAgIDB4MS44YmIxMDVhNWRjOTAxMDQwNTFkMDhjYjk2NTYzMTgwN3AtMSwKKyAgICAweDEuNWZmZmZmZmZmZmZmZnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDEKKyAgICAtMHgxLjQ0ZWIzODFjZjM4NjllYTcxY2NiMzY4NjNlNGVhNjVicC0xLAorICAgIDB4MS44YmIxMDVhNWRjOTAxMDQwNTFkMDhjYjk2NTYzMTgwN3AtMSwKKyAgICAtMHgxLjVmZmZmZmZmZmZmZmZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzQyCisgICAgMHgxLjQ0ZWIzODFjZjM4NmFiMDRhNGY4NjU2YWJlYTgwYjgzcC0xLAorICAgIDB4MS44YmIxMDVhNWRjOTAwNjE4ZjgwZmE1MWQzMDNjNjlwLTEsCisgICAgMHgxLjZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzQzCisgICAgLTB4MS40NGViMzgxY2YzODZhYjA0YTRmODY1NmFiZWE4MGI4M3AtMSwKKyAgICAweDEuOGJiMTA1YTVkYzkwMDYxOGY4MGZhNTFkMzAzYzY5cC0xLAorICAgIC0weDEuNnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDQKKyAgICAweDEuNDRlYjM4MWNmMzg2Yjc2MjJkMjU5NDRmM2ViMDM1ZGNwLTEsCisgICAgMHgxLjhiYjEwNWE1ZGM4ZmZiZjE5ZTRlYmQ4MGZhYjJjZGI4cC0xLAorICAgIDB4MS42MDAwMDAwMDAwMDAxcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM0NQorICAgIC0weDEuNDRlYjM4MWNmMzg2Yjc2MjJkMjU5NDRmM2ViMDM1ZGNwLTEsCisgICAgMHgxLjhiYjEwNWE1ZGM4ZmZiZjE5ZTRlYmQ4MGZhYjJjZGI4cC0xLAorICAgIC0weDEuNjAwMDAwMDAwMDAwMXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDYKKyAgICAweDEuZGFkOTAyZmE4YWM4NjRmZDhhZmEwYmRjNjA5ZGVkMTlwLTEsCisgICAgMHgxLjdlZjQ4NDJmMGJjZDExNjg2YWFmNmYyMWM5YWE4MzU0cC0yLAorICAgIDB4MS4yZmZmZmZmZmZmZmZmcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzQ3CisgICAgLTB4MS5kYWQ5MDJmYThhYzg2NGZkOGFmYTBiZGM2MDlkZWQxOXAtMSwKKyAgICAweDEuN2VmNDg0MmYwYmNkMTE2ODZhYWY2ZjIxYzlhYTgzNTRwLTIsCisgICAgLTB4MS4yZmZmZmZmZmZmZmZmcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzQ4CisgICAgMHgxLmRhZDkwMmZhOGFjODcwZjUyZjFiODQzYWM4M2JjM2VkcC0xLAorICAgIDB4MS43ZWY0ODQyZjBiY2NkNjBkNGE1MDFkYzhiYzRiNTdiM3AtMiwKKyAgICAweDEuM3AwLAorICB9LAorICB7IC8vIEVudHJ5IDM0OQorICAgIC0weDEuZGFkOTAyZmE4YWM4NzBmNTJmMWI4NDNhYzgzYmMzZWRwLTEsCisgICAgMHgxLjdlZjQ4NDJmMGJjY2Q2MGQ0YTUwMWRjOGJjNGI1N2IzcC0yLAorICAgIC0weDEuM3AwLAorICB9LAorICB7IC8vIEVudHJ5IDM1MAorICAgIDB4MS5kYWQ5MDJmYThhYzg3Y2VjZDMzY2ZjOTkyZGZlYzFiZXAtMSwKKyAgICAweDEuN2VmNDg0MmYwYmNjOWFiMjI5ZjBjYzZmYWQ2ZDM3OGRwLTIsCisgICAgMHgxLjMwMDAwMDAwMDAwMDFwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTEKKyAgICAtMHgxLmRhZDkwMmZhOGFjODdjZWNkMzNjZmM5OTJkZmVjMWJlcC0xLAorICAgIDB4MS43ZWY0ODQyZjBiY2M5YWIyMjlmMGNjNmZhZDZkMzc4ZHAtMiwKKyAgICAtMHgxLjMwMDAwMDAwMDAwMDFwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTIKKyAgICAweDEuNGI3MDdhN2FjZGVjZjkwYTE4OGQwMjMwZmFkM2FkNThwLTEsCisgICAgLTB4MS44NjNlZmEzNjFkYzIyOTRlOTI5Yjk1MTVmYjM0ZjliYXAtMSwKKyAgICAweDEuMzdmZmZmZmZmZmZmZnAxLAorICB9LAorICB7IC8vIEVudHJ5IDM1MworICAgIC0weDEuNGI3MDdhN2FjZGVjZjkwYTE4OGQwMjMwZmFkM2FkNThwLTEsCisgICAgLTB4MS44NjNlZmEzNjFkYzIyOTRlOTI5Yjk1MTVmYjM0ZjliYXAtMSwKKyAgICAtMHgxLjM3ZmZmZmZmZmZmZmZwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTQKKyAgICAweDEuNGI3MDdhN2FjZGVjYzg0MjM5NDYzZTc4YjMxMmZhMTBwLTEsCisgICAgLTB4MS44NjNlZmEzNjFkYzI1MmJjYTFlYWVlZDM5NzQ5YmVkN3AtMSwKKyAgICAweDEuMzgwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMzU1CisgICAgLTB4MS40YjcwN2E3YWNkZWNjODQyMzk0NjNlNzhiMzEyZmExMHAtMSwKKyAgICAtMHgxLjg2M2VmYTM2MWRjMjUyYmNhMWVhZWVkMzk3NDliZWQ3cC0xLAorICAgIC0weDEuMzgwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMzU2CisgICAgMHgxLjRiNzA3YTdhY2RlYzk3N2E1OWZmN2FjMDY2MjQ4NGRkcC0xLAorICAgIC0weDEuODYzZWZhMzYxZGMyN2MyYWIxM2E0ODkxMmQ0NTg4MGJwLTEsCisgICAgMHgxLjM4MDAwMDAwMDAwMDFwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTcKKyAgICAtMHgxLjRiNzA3YTdhY2RlYzk3N2E1OWZmN2FjMDY2MjQ4NGRkcC0xLAorICAgIC0weDEuODYzZWZhMzYxZGMyN2MyYWIxM2E0ODkxMmQ0NTg4MGJwLTEsCisgICAgLTB4MS4zODAwMDAwMDAwMDAxcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMzU4CisgICAgMHgxLjA2NmU3ZWI3NmY1YzY2NzhmZDgzMjVhODFmMTkyNWM2cC00LAorICAgIDB4MS5mZWYyYjJkMjFjZjZjMTA2ZTg2ZmY5Mzk1ZjgyMDRhMHAtMSwKKyAgICAweDEuMDY5YzhiNDZiMzc5MnAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTkKKyAgICAtMHgxLjA2NmU3ZWI3NmY1YzY2NzhmZDgzMjVhODFmMTkyNWM2cC00LAorICAgIDB4MS5mZWYyYjJkMjFjZjZjMTA2ZTg2ZmY5Mzk1ZjgyMDRhMHAtMSwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3OTJwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgMzYwCisgICAgMHgxLjA1ZTQ3NjFhYjhkOGYwYTdkYmE4MzQwMDBmMjM2NjUwcC0zLAorICAgIDB4MS5mYmNiZTY5M2JkOGVjODU3MjNiNmNiNTVlNGY1ZTc4ZnAtMSwKKyAgICAweDEuMDY5YzhiNDZiMzc5MnAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjEKKyAgICAtMHgxLjA1ZTQ3NjFhYjhkOGYwYTdkYmE4MzQwMDBmMjM2NjUwcC0zLAorICAgIDB4MS5mYmNiZTY5M2JkOGVjODU3MjNiNmNiNTVlNGY1ZTc4ZnAtMSwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3OTJwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMzYyCisgICAgMHgxLjg3N2UyY2Q0ZjZmZDliYTQ5OGUzMjcwNTMwMzI3MzRmcC0zLAorICAgIDB4MS5mNjhlZWJmY2JiNWU4NDE5MDBlMjU0MmY3YzI0YmFiMHAtMSwKKyAgICAweDEuODllYWQwZWEwZDM1YnAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjMKKyAgICAtMHgxLjg3N2UyY2Q0ZjZmZDliYTQ5OGUzMjcwNTMwMzI3MzRmcC0zLAorICAgIDB4MS5mNjhlZWJmY2JiNWU4NDE5MDBlMjU0MmY3YzI0YmFiMHAtMSwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzNWJwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMzY0CisgICAgMHgxLjAzYmUwNmY5N2NiZWU0NzY5ODUzOWY5NzdjYWRiZTdlcC0yLAorICAgIDB4MS5lZjQxNDViNGFlY2ZmYmRhYWZmYjc4ZmZiNDlhYzliZHAtMSwKKyAgICAweDEuMDY5YzhiNDZiMzc5MnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjUKKyAgICAtMHgxLjAzYmUwNmY5N2NiZWU0NzY5ODUzOWY5NzdjYWRiZTdlcC0yLAorICAgIDB4MS5lZjQxNDViNGFlY2ZmYmRhYWZmYjc4ZmZiNDlhYzliZHAtMSwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3OTJwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzY2CisgICAgMHgxLjQyYWJiYThjNzJmYmI4Y2E5NmY3OWFhNGJiMDM1ODRlcC0yLAorICAgIDB4MS5lNWVhYTI4NmZiYmM2NzBkYmY2MzkyZDdjOThhYjBhMHAtMSwKKyAgICAweDEuNDg0M2FlMTg2MDU3NnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjcKKyAgICAtMHgxLjQyYWJiYThjNzJmYmI4Y2E5NmY3OWFhNGJiMDM1ODRlcC0yLAorICAgIDB4MS5lNWVhYTI4NmZiYmM2NzBkYmY2MzkyZDdjOThhYjBhMHAtMSwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1NzZwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzY4CisgICAgMHgxLjgwNDVmZTY0ZTYyZGMzZDY4NmQ5NzZkN2Q1YTdjNjg5cC0yLAorICAgIDB4MS5kYTk0ZDU0ZGQ0YzA4NzZlMThlZTk3YzcwZDFhNGE5NHAtMSwKKyAgICAweDEuODllYWQwZWEwZDM1YXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjkKKyAgICAtMHgxLjgwNDVmZTY0ZTYyZGMzZDY4NmQ5NzZkN2Q1YTdjNjg5cC0yLAorICAgIDB4MS5kYTk0ZDU0ZGQ0YzA4NzZlMThlZTk3YzcwZDFhNGE5NHAtMSwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzNWFwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzcwCisgICAgMHgxLmJjNGMwNGQ3MWFiYmVlYTVhYjA2NGVjZmJmNTRjNjEzcC0yLAorICAgIDB4MS5jZDRiY2E5Y2I1YzcxNTMwMjAwMWU0NDZjYzkzYTdiY3AtMSwKKyAgICAweDEuY2I5MWYzYmJiYTEzZXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzEKKyAgICAtMHgxLmJjNGMwNGQ3MWFiYmVlYTVhYjA2NGVjZmJmNTRjNjEzcC0yLAorICAgIDB4MS5jZDRiY2E5Y2I1YzcxNTMwMjAwMWU0NDZjYzkzYTdiY3AtMSwKKyAgICAtMHgxLmNiOTFmM2JiYmExM2VwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzcyCisgICAgMHgxLmY2N2VhOTc1Yjg2YTAxNTEwZTZiZGUzNzc4MTM4OTM0cC0yLAorICAgIDB4MS5iZTFkN2MzNTM0YzQwMzMxZmRkZjI0M2Q4YTBhNTZiMHAtMSwKKyAgICAweDEuMDY5YzhiNDZiMzc5MXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzMKKyAgICAtMHgxLmY2N2VhOTc1Yjg2YTAxNTEwZTZiZGUzNzc4MTM4OTM0cC0yLAorICAgIDB4MS5iZTFkN2MzNTM0YzQwMzMxZmRkZjI0M2Q4YTBhNTZiMHAtMSwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3OTFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzc0CisgICAgMHgxLjE3NTA1OWJmMGQ0MjUyNGVjYjBiZjQyNDNiNTU5NzNkcC0xLAorICAgIDB4MS5hZDE5ZTI1MzVhYTk2NzhiZDVmZGFmYzY4ODE3NzAwYnAtMSwKKyAgICAweDEuMjc3MDFjYWY4OWU4M3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzUKKyAgICAtMHgxLjE3NTA1OWJmMGQ0MjUyNGVjYjBiZjQyNDNiNTU5NzNkcC0xLAorICAgIDB4MS5hZDE5ZTI1MzVhYTk2NzhiZDVmZGFmYzY4ODE3NzAwYnAtMSwKKyAgICAtMHgxLjI3NzAxY2FmODllODNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzc2CisgICAgMHgxLjMyM2I4YjFmYjRiYTIxZGQxMmNjZTgyMGUxNTZhNGZjcC0xLAorICAgIDB4MS45YTUyZTJlMGZiY2IzYTNmNGJkZTZmNmVjMjc3NjdhOXAtMSwKKyAgICAweDEuNDg0M2FlMTg2MDU3NXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzcKKyAgICAtMHgxLjMyM2I4YjFmYjRiYTIxZGQxMmNjZTgyMGUxNTZhNGZjcC0xLAorICAgIDB4MS45YTUyZTJlMGZiY2IzYTNmNGJkZTZmNmVjMjc3NjdhOXAtMSwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1NzVwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzc4CisgICAgMHgxLjRiZTQ5NzljNWVmYjMwNmMxYTc3MDI0MDMyODQ5YjUycC0xLAorICAgIDB4MS44NWRjM2VhMWJiY2U5YTgwODVmNjY1OTNhODdiN2UyZXAtMSwKKyAgICAweDEuNjkxNzNmODEzNmM2N3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzkKKyAgICAtMHgxLjRiZTQ5NzljNWVmYjMwNmMxYTc3MDI0MDMyODQ5YjUycC0xLAorICAgIDB4MS44NWRjM2VhMWJiY2U5YTgwODVmNjY1OTNhODdiN2UyZXAtMSwKKyAgICAtMHgxLjY5MTczZjgxMzZjNjdwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzgwCisgICAgMHgxLjY0MzA4MGQ2N2FjYzEzMzJjNjRhODU2MTJjYWNhZmI5cC0xLAorICAgIDB4MS42ZmNiN2M2YjhiOTE5YWYzZGRhNTMwOTRjOWEyN2FhYnAtMSwKKyAgICAweDEuODllYWQwZWEwZDM1OXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODEKKyAgICAtMHgxLjY0MzA4MGQ2N2FjYzEzMzJjNjRhODU2MTJjYWNhZmI5cC0xLAorICAgIDB4MS42ZmNiN2M2YjhiOTE5YWYzZGRhNTMwOTRjOWEyN2FhYnAtMSwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzNTlwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzgyCisgICAgMHgxLjdiMDViN2I2YzYxMmU1YjA4ZDVlZmU0OWE0NmUyMWExcC0xLAorICAgIDB4MS41ODM3ZDI4MTdjZjMwM2VmNmRhZTY5ZmFlYjBmMDE1ZXAtMSwKKyAgICAweDEuYWFiZTYyNTJlM2E0YnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODMKKyAgICAtMHgxLjdiMDViN2I2YzYxMmU1YjA4ZDVlZmU0OWE0NmUyMWExcC0xLAorICAgIDB4MS41ODM3ZDI4MTdjZjMwM2VmNmRhZTY5ZmFlYjBmMDE1ZXAtMSwKKyAgICAtMHgxLmFhYmU2MjUyZTNhNGJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzg0CisgICAgMHgxLjkwNGMzNzUwNWRlNDhmYThlNzYyODc5NjBmZDQ0NTk0cC0xLAorICAgIDB4MS4zZjNhMGUyOGJlZGQ0MDQ0NTg1OGY4MjNlMTUwMjY0YnAtMSwKKyAgICAweDEuY2I5MWYzYmJiYTEzZHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODUKKyAgICAtMHgxLjkwNGMzNzUwNWRlNDhmYThlNzYyODc5NjBmZDQ0NTk0cC0xLAorICAgIDB4MS4zZjNhMGUyOGJlZGQ0MDQ0NTg1OGY4MjNlMTUwMjY0YnAtMSwKKyAgICAtMHgxLmNiOTFmM2JiYmExM2RwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzg2CisgICAgMHgxLmEzZWQ5ZTI1MjkzOGExNGM3OWM1NzU2MzljMTVhOTFkcC0xLAorICAgIDB4MS4yNGVjNzk5MTcxNjQyZGJkMjRkMjU5MDA1ODIyYmQyNXAtMSwKKyAgICAweDEuZWM2NTg1MjQ5MDgyZnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODcKKyAgICAtMHgxLmEzZWQ5ZTI1MjkzOGExNGM3OWM1NzU2MzljMTVhOTFkcC0xLAorICAgIDB4MS4yNGVjNzk5MTcxNjQyZGJkMjRkMjU5MDA1ODIyYmQyNXAtMSwKKyAgICAtMHgxLmVjNjU4NTI0OTA4MmZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzg4CisgICAgMHgxLmI1ZDU0NWIxMDliZjkzNTU5NDAzNjc5OGNmNDBjOWIwcC0xLAorICAgIDB4MS4wOTZhYzAyZWM0MmM4NWI3YjEwYWZlZDkyMDI3ODViOXAtMSwKKyAgICAweDEuMDY5YzhiNDZiMzc5MXAwLAorICB9LAorICB7IC8vIEVudHJ5IDM4OQorICAgIC0weDEuYjVkNTQ1YjEwOWJmOTM1NTk0MDM2Nzk4Y2Y0MGM5YjBwLTEsCisgICAgMHgxLjA5NmFjMDJlYzQyYzg1YjdiMTBhZmVkOTIwMjc4NWI5cC0xLAorICAgIC0weDEuMDY5YzhiNDZiMzc5MXAwLAorICB9LAorICB7IC8vIEVudHJ5IDM5MAorICAgIDB4MS5jNWYwNTgyMzBlN2ZkMTRkM2U1ZTMxNTM0OWY2OTllZnAtMSwKKyAgICAweDEuZDlhM2EzMzZlZGI3NjEzZGYwNjJlODZhMzJkMDlmZTFwLTIsCisgICAgMHgxLjE3MDY1M2ZiMWViMGFwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTEKKyAgICAtMHgxLmM1ZjA1ODIzMGU3ZmQxNGQzZTVlMzE1MzQ5ZjY5OWVmcC0xLAorICAgIDB4MS5kOWEzYTMzNmVkYjc2MTNkZjA2MmU4NmEzMmQwOWZlMXAtMiwKKyAgICAtMHgxLjE3MDY1M2ZiMWViMGFwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTIKKyAgICAweDEuZDQyZGU0MmRjZTEzNDZhMDNkMWY2YWJmMGViYTkwMjJwLTEsCisgICAgMHgxLjllN2Y4NjUyYjQ3NTgyYWZkMjk3NDQyOTMxNzBjMDdjcC0yLAorICAgIDB4MS4yNzcwMWNhZjg5ZTgzcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzkzCisgICAgLTB4MS5kNDJkZTQyZGNlMTM0NmEwM2QxZjZhYmYwZWJhOTAyMnAtMSwKKyAgICAweDEuOWU3Zjg2NTJiNDc1ODJhZmQyOTc0NDI5MzE3MGMwN2NwLTIsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTgzcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzk0CisgICAgMHgxLmUwN2VlZWRhMTA5Y2I1MDRhZmNjYTg2MGQ0YjVkZDMycC0xLAorICAgIDB4MS42MWE3NjA3N2FlZTA3YmIzNDljYTc2Y2Y3MDA5MTNkMXAtMiwKKyAgICAweDEuMzdkOWU1NjNmNTFmY3AwLAorICB9LAorICB7IC8vIEVudHJ5IDM5NQorICAgIC0weDEuZTA3ZWVlZGExMDljYjUwNGFmY2NhODYwZDRiNWRkMzJwLTEsCisgICAgMHgxLjYxYTc2MDc3YWVlMDdiYjM0OWNhNzZjZjcwMDkxM2QxcC0yLAorICAgIC0weDEuMzdkOWU1NjNmNTFmY3AwLAorICB9LAorICB7IC8vIEVudHJ5IDM5NgorICAgIDB4MS5lYWQ2ODM0OTA5YjkzMzcxZmFmM2JlYWRkYmQ2MGVkZHAtMSwKKyAgICAweDEuMjM1YjMzMWQ4Zjc0OGUyMGZiNmRkYjZhNzA4ZGJhMTBwLTIsCisgICAgMHgxLjQ4NDNhZTE4NjA1NzVwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTcKKyAgICAtMHgxLmVhZDY4MzQ5MDliOTMzNzFmYWYzYmVhZGRiZDYwZWRkcC0xLAorICAgIDB4MS4yMzViMzMxZDhmNzQ4ZTIwZmI2ZGRiNmE3MDhkYmExMHAtMiwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1NzVwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTgKKyAgICAweDEuZjMyOWMwNTU4ZTk2N2U0Y2FiNThkMGZhNTcyZDYyZDJwLTEsCisgICAgMHgxLmM3YjkwZTMwMjQ1OTNkYTg0NDk5NjNjZmUwOGRkZTg1cC0zLAorICAgIDB4MS41OGFkNzZjY2NiOGVlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzk5CisgICAgLTB4MS5mMzI5YzA1NThlOTY3ZTRjYWI1OGQwZmE1NzJkNjJkMnAtMSwKKyAgICAweDEuYzdiOTBlMzAyNDU5M2RhODQ0OTk2M2NmZTA4ZGRlODVwLTMsCisgICAgLTB4MS41OGFkNzZjY2NiOGVlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDAwCisgICAgMHgxLmY5NmZlNDA1ZjFhYzVkYzljZjM0MzUwODA2N2JmY2FlcC0xLAorICAgIDB4MS40NmRjNGY0Y2U4M2RhNzI3ZWEwNDhjYzdkMmYyNzZkMXAtMywKKyAgICAweDEuNjkxNzNmODEzNmM2N3AwLAorICB9LAorICB7IC8vIEVudHJ5IDQwMQorICAgIC0weDEuZjk2ZmU0MDVmMWFjNWRjOWNmMzQzNTA4MDY3YmZjYWVwLTEsCisgICAgMHgxLjQ2ZGM0ZjRjZTgzZGE3MjdlYTA0OGNjN2QyZjI3NmQxcC0zLAorICAgIC0weDEuNjkxNzNmODEzNmM2N3AwLAorICB9LAorICB7IC8vIEVudHJ5IDQwMgorICAgIDB4MS5mZGEyNTRjMjdhMDFmNDc4NmMxNDlkNmE3Nzc5Y2MzYXAtMSwKKyAgICAweDEuODk0ZjcwYmVmYmI5OWFiN2RmOWQxNzkwYTI4ZjQ4YWRwLTQsCisgICAgMHgxLjc5ODEwODM1YTFmZTBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDMKKyAgICAtMHgxLmZkYTI1NGMyN2EwMWY0Nzg2YzE0OWQ2YTc3NzljYzNhcC0xLAorICAgIDB4MS44OTRmNzBiZWZiYjk5YWI3ZGY5ZDE3OTBhMjhmNDhhZHAtNCwKKyAgICAtMHgxLjc5ODEwODM1YTFmZTBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDQKKyAgICAweDEuZmZiY2E4NDZjNGZjOTk3ZjFhMzgxNDIwMjA4ODg0ZTBwLTEsCisgICAgMHgxLjA2OTEwN2FlOTMzMmY5NWZhMmM1Y2VlYWRmYjI5Zjc3cC01LAorICAgIDB4MS44OWVhZDBlYTBkMzU5cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDA1CisgICAgLTB4MS5mZmJjYTg0NmM0ZmM5OTdmMWEzODE0MjAyMDg4ODRlMHAtMSwKKyAgICAweDEuMDY5MTA3YWU5MzMyZjk1ZmEyYzVjZWVhZGZiMjlmNzdwLTUsCisgICAgLTB4MS44OWVhZDBlYTBkMzU5cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDA2CisgICAgMHgxLmZmYmNhODQ2YzRmYzlmMzBiZmI0NThlZjIwOTFjOGVlcC0xLAorICAgIC0weDEuMDY5MTA3YWU5MzI3ZTA3MzFhNzQ4YzIxZjAzYjVlZmNwLTUsCisgICAgMHgxLjlhNTQ5OTllNzg2ZDJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDcKKyAgICAtMHgxLmZmYmNhODQ2YzRmYzlmMzBiZmI0NThlZjIwOTFjOGVlcC0xLAorICAgIC0weDEuMDY5MTA3YWU5MzI3ZTA3MzFhNzQ4YzIxZjAzYjVlZmNwLTUsCisgICAgLTB4MS45YTU0OTk5ZTc4NmQycDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDA4CisgICAgMHgxLmZkYTI1NGMyN2EwMjA1ODc1ZjI3MTQzNWY4MjcxNjBjcC0xLAorICAgIC0weDEuODk0ZjcwYmVmYmI0MTQxN2RmZjg0M2U4MWZhYzM4OGJwLTQsCisgICAgMHgxLmFhYmU2MjUyZTNhNGJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDkKKyAgICAtMHgxLmZkYTI1NGMyN2EwMjA1ODc1ZjI3MTQzNWY4MjcxNjBjcC0xLAorICAgIC0weDEuODk0ZjcwYmVmYmI0MTQxN2RmZjg0M2U4MWZhYzM4OGJwLTQsCisgICAgLTB4MS5hYWJlNjI1MmUzYTRicDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDEwCisgICAgMHgxLmY5NmZlNDA1ZjFhYzdhMjQxZTAyZTU4YjBjYmYzYWU3cC0xLAorICAgIC0weDEuNDZkYzRmNGNlODNhZTlhYjFjYzFiMjM2N2NiNzUzZWJwLTMsCisgICAgMHgxLmJiMjgyYjA3NGVkYzRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTEKKyAgICAtMHgxLmY5NmZlNDA1ZjFhYzdhMjQxZTAyZTU4YjBjYmYzYWU3cC0xLAorICAgIC0weDEuNDZkYzRmNGNlODNhZTlhYjFjYzFiMjM2N2NiNzUzZWJwLTMsCisgICAgLTB4MS5iYjI4MmIwNzRlZGM0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDEyCisgICAgMHgxLmYzMjljMDU1OGU5NmE1ZDQ4MjcyYWQ0YzQ5ZWM1M2I4cC0xLAorICAgIC0weDEuYzdiOTBlMzAyNDU2ODhlMDk5ODYwZThkNGZmZjYwMWNwLTMsCisgICAgMHgxLmNiOTFmM2JiYmExM2RwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTMKKyAgICAtMHgxLmYzMjljMDU1OGU5NmE1ZDQ4MjcyYWQ0YzQ5ZWM1M2I4cC0xLAorICAgIC0weDEuYzdiOTBlMzAyNDU2ODhlMDk5ODYwZThkNGZmZjYwMWNwLTMsCisgICAgLTB4MS5jYjkxZjNiYmJhMTNkcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDE0CisgICAgMHgxLmVhZDY4MzQ5MDliOTY1ZmRjNGIwY2VmZmMwZjI4NWM2cC0xLAorICAgIC0weDEuMjM1YjMzMWQ4ZjczMzk4NDFhNTE3MzEyZDBkMzQ3ZmJwLTIsCisgICAgMHgxLmRiZmJiYzcwMjU0YjZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTUKKyAgICAtMHgxLmVhZDY4MzQ5MDliOTY1ZmRjNGIwY2VmZmMwZjI4NWM2cC0xLAorICAgIC0weDEuMjM1YjMzMWQ4ZjczMzk4NDFhNTE3MzEyZDBkMzQ3ZmJwLTIsCisgICAgLTB4MS5kYmZiYmM3MDI1NGI2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDE2CisgICAgMHgxLmUwN2VlZWRhMTA5Y2YyNWY0MDBjZDVmNDZhY2VjODg3cC0xLAorICAgIC0weDEuNjFhNzYwNzdhZWRmMmU0M2FjYTQxOGY3YTJlMTMyNGRwLTIsCisgICAgMHgxLmVjNjU4NTI0OTA4MmZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTcKKyAgICAtMHgxLmUwN2VlZWRhMTA5Y2YyNWY0MDBjZDVmNDZhY2VjODg3cC0xLAorICAgIC0weDEuNjFhNzYwNzdhZWRmMmU0M2FjYTQxOGY3YTJlMTMyNGRwLTIsCisgICAgLTB4MS5lYzY1ODUyNDkwODJmcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDE4CisgICAgMHgxLmQ0MmRlNDJkY2UxMzhlODkwOTM5ZTU2YzQzOWRlZDkwcC0xLAorICAgIC0weDEuOWU3Zjg2NTJiNDc0M2RjYzNjMzU2OGJhZmY4YmY5ZWJwLTIsCisgICAgMHgxLmZjY2Y0ZGQ4ZmJiYThwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTkKKyAgICAtMHgxLmQ0MmRlNDJkY2UxMzhlODkwOTM5ZTU2YzQzOWRlZDkwcC0xLAorICAgIC0weDEuOWU3Zjg2NTJiNDc0M2RjYzNjMzU2OGJhZmY4YmY5ZWJwLTIsCisgICAgLTB4MS5mY2NmNGRkOGZiYmE4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDIwCisgICAgMHgxLmM1ZjA1ODIzMGU4MDE0YWI4M2VjZTBjM2E2MzhjMDc5cC0xLAorICAgIC0weDEuZDlhM2EzMzZlZGI2NWVmYTMwZTFhNjY3OWFhMDY0YzJwLTIsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTFwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjEKKyAgICAtMHgxLmM1ZjA1ODIzMGU4MDE0YWI4M2VjZTBjM2E2MzhjMDc5cC0xLAorICAgIC0weDEuZDlhM2EzMzZlZGI2NWVmYTMwZTFhNjY3OWFhMDY0YzJwLTIsCisgICAgLTB4MS4wNjljOGI0NmIzNzkxcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDIyCisgICAgMHgxLmI1ZDU0NWIxMDliZmNlM2ZjNGQ3NzAwMWFmZTJmMmI2cC0xLAorICAgIC0weDEuMDk2YWMwMmVjNDJjMjQ4ODBhNTk1MTc4OGNiMzgzYzhwLTEsCisgICAgMHgxLjBlZDE2ZmEwZTkxNGVwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjMKKyAgICAtMHgxLmI1ZDU0NWIxMDliZmNlM2ZjNGQ3NzAwMWFmZTJmMmI2cC0xLAorICAgIC0weDEuMDk2YWMwMmVjNDJjMjQ4ODBhNTk1MTc4OGNiMzgzYzhwLTEsCisgICAgLTB4MS4wZWQxNmZhMGU5MTRlcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDI0CisgICAgMHgxLmEzZWQ5ZTI1MjkzOGQ5MmE1NTUzYjNjMDlkMmJkZGQzcC0xLAorICAgIC0weDEuMjRlYzc5OTE3MTYzZGRhNjVhZmQ4MTA5ZjU5Y2I0NjVwLTEsCisgICAgMHgxLjE3MDY1M2ZiMWViMGJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjUKKyAgICAtMHgxLmEzZWQ5ZTI1MjkzOGQ5MmE1NTUzYjNjMDlkMmJkZGQzcC0xLAorICAgIC0weDEuMjRlYzc5OTE3MTYzZGRhNjVhZmQ4MTA5ZjU5Y2I0NjVwLTEsCisgICAgLTB4MS4xNzA2NTNmYjFlYjBicDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDI2CisgICAgMHgxLjkwNGMzNzUwNWRlNGI4OTc1ZGQyNzMwZTE5NmRkZmMzcC0xLAorICAgIC0weDEuM2YzYTBlMjhiZWRkMGNmMGM0YmZiZDhjODJhM2JhYWZwLTEsCisgICAgMHgxLjFmM2IzODU1NTQ0YzhwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjcKKyAgICAtMHgxLjkwNGMzNzUwNWRlNGI4OTc1ZGQyNzMwZTE5NmRkZmMzcC0xLAorICAgIC0weDEuM2YzYTBlMjhiZWRkMGNmMGM0YmZiZDhjODJhM2JhYWZwLTEsCisgICAgLTB4MS4xZjNiMzg1NTU0NGM4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDI4CisgICAgMHgxLjdiMDViN2I2YzYxMmZjNGZkYTM4MTJiMWYxMzQ4Mzg5cC0xLAorICAgIC0weDEuNTgzN2QyODE3Y2YyZWIwNjkwMzU1NTJkYzNhZTgzNGNwLTEsCisgICAgMHgxLjI3NzAxY2FmODllODVwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjkKKyAgICAtMHgxLjdiMDViN2I2YzYxMmZjNGZkYTM4MTJiMWYxMzQ4Mzg5cC0xLAorICAgIC0weDEuNTgzN2QyODE3Y2YyZWIwNjkwMzU1NTJkYzNhZTgzNGNwLTEsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTg1cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDMwCisgICAgMHgxLjY0MzA4MGQ2N2FjYzE0NjIwNjcyZGRhNjI0MWVhMzA1cC0xLAorICAgIC0weDEuNmZjYjdjNmI4YjkxOTljZTJmMTdkZDNlZTg2YjNiOWFwLTEsCisgICAgMHgxLjJmYTUwMTA5YmY4NDJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzEKKyAgICAtMHgxLjY0MzA4MGQ2N2FjYzE0NjIwNjcyZGRhNjI0MWVhMzA1cC0xLAorICAgIC0weDEuNmZjYjdjNmI4YjkxOTljZTJmMTdkZDNlZTg2YjNiOWFwLTEsCisgICAgLTB4MS4yZmE1MDEwOWJmODQycDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDMyCisgICAgMHgxLjRiZTQ5NzljNWVmYjE5NGZjODJhYzM2N2ZlZGY5M2JjcC0xLAorICAgIC0weDEuODVkYzNlYTFiYmNlYWUyZDI5NDQyMWU4YzczNTBmOGNwLTEsCisgICAgMHgxLjM3ZDllNTYzZjUxZmZwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzMKKyAgICAtMHgxLjRiZTQ5NzljNWVmYjE5NGZjODJhYzM2N2ZlZGY5M2JjcC0xLAorICAgIC0weDEuODVkYzNlYTFiYmNlYWUyZDI5NDQyMWU4YzczNTBmOGNwLTEsCisgICAgLTB4MS4zN2Q5ZTU2M2Y1MWZmcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDM0CisgICAgMHgxLjMyM2I4YjFmYjRiOWVmZTUwNzVlZGU4MDQ5YTg1YzNkcC0xLAorICAgIC0weDEuOWE1MmUyZTBmYmNiNWY4YTNmNTVjMjc0ZjllYzc1NGJwLTEsCisgICAgMHgxLjQwMGVjOWJlMmFiYmNwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzUKKyAgICAtMHgxLjMyM2I4YjFmYjRiOWVmZTUwNzVlZGU4MDQ5YTg1YzNkcC0xLAorICAgIC0weDEuOWE1MmUyZTBmYmNiNWY4YTNmNTVjMjc0ZjllYzc1NGJwLTEsCisgICAgLTB4MS40MDBlYzliZTJhYmJjcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDM2CisgICAgMHgxLjE3NTA1OWJmMGQ0MjAzM2JiY2Y1OThjODhiMTc2ZTYxcC0xLAorICAgIC0weDEuYWQxOWUyNTM1YWE5OWIwNDlhYzBiNTg1OGM1ZDM4MWZwLTEsCisgICAgMHgxLjQ4NDNhZTE4NjA1NzlwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzcKKyAgICAtMHgxLjE3NTA1OWJmMGQ0MjAzM2JiY2Y1OThjODhiMTc2ZTYxcC0xLAorICAgIC0weDEuYWQxOWUyNTM1YWE5OWIwNDlhYzBiNTg1OGM1ZDM4MWZwLTEsCisgICAgLTB4MS40ODQzYWUxODYwNTc5cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDM4CisgICAgMHgxLmY2N2VhOTc1Yjg2OTI1MjFmNzdkNjc1NGIzMDJjNWM0cC0yLAorICAgIC0weDEuYmUxZDdjMzUzNGM0NDEzMmFiMWM0MTMwY2JlOWRmYTBwLTEsCisgICAgMHgxLjUwNzg5MjcyOTVmMzZwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzkKKyAgICAtMHgxLmY2N2VhOTc1Yjg2OTI1MjFmNzdkNjc1NGIzMDJjNWM0cC0yLAorICAgIC0weDEuYmUxZDdjMzUzNGM0NDEzMmFiMWM0MTMwY2JlOWRmYTBwLTEsCisgICAgLTB4MS41MDc4OTI3Mjk1ZjM2cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDQwCisgICAgMHgxLmJjNGMwNGQ3MWFiYWQxNGVmYzI5YTY2MzQyYWRhNzIzcC0yLAorICAgIC0weDEuY2Q0YmNhOWNiNWM3NTllNGQ2ZGM4NjAxZWMzZDg0YjZwLTEsCisgICAgMHgxLjU4YWQ3NmNjY2I4ZjNwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDEKKyAgICAtMHgxLmJjNGMwNGQ3MWFiYWQxNGVmYzI5YTY2MzQyYWRhNzIzcC0yLAorICAgIC0weDEuY2Q0YmNhOWNiNWM3NTllNGQ2ZGM4NjAxZWMzZDg0YjZwLTEsCisgICAgLTB4MS41OGFkNzZjY2NiOGYzcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDQyCisgICAgMHgxLjgwNDVmZTY0ZTYyYzYyZjU3ZjA3N2VhMjUxZTJmMmRjcC0yLAorICAgIC0weDEuZGE5NGQ1NGRkNGMwY2VkY2NkNzM2ODQ5OTQ0MjI3NDBwLTEsCisgICAgMHgxLjYwZTI1YjI3MDEyYjBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDMKKyAgICAtMHgxLjgwNDVmZTY0ZTYyYzYyZjU3ZjA3N2VhMjUxZTJmMmRjcC0yLAorICAgIC0weDEuZGE5NGQ1NGRkNGMwY2VkY2NkNzM2ODQ5OTQ0MjI3NDBwLTEsCisgICAgLTB4MS42MGUyNWIyNzAxMmIwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDQ0CisgICAgMHgxLjQyYWJiYThjNzJmYTEyYmU5MjBiMzE2NjI3NTEyZTQxcC0yLAorICAgIC0weDEuZTVlYWEyODZmYmJjYWQxZTRhNjM3MzM5MmU2Nzk2NjlwLTEsCisgICAgMHgxLjY5MTczZjgxMzZjNmRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDUKKyAgICAtMHgxLjQyYWJiYThjNzJmYTEyYmU5MjBiMzE2NjI3NTEyZTQxcC0yLAorICAgIC0weDEuZTVlYWEyODZmYmJjYWQxZTRhNjM3MzM5MmU2Nzk2NjlwLTEsCisgICAgLTB4MS42OTE3M2Y4MTM2YzZkcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDQ2CisgICAgMHgxLjAzYmUwNmY5N2NiY2Y4NjYwMjFlNWE1YzYyYzZiMDdlcC0yLAorICAgIC0weDEuZWY0MTQ1YjRhZWQwM2M1ZjFkMzk3NjNiMWVlZTZlZDhwLTEsCisgICAgMHgxLjcxNGMyM2RiNmM2MmFwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDcKKyAgICAtMHgxLjAzYmUwNmY5N2NiY2Y4NjYwMjFlNWE1YzYyYzZiMDdlcC0yLAorICAgIC0weDEuZWY0MTQ1YjRhZWQwM2M1ZjFkMzk3NjNiMWVlZTZlZDhwLTEsCisgICAgLTB4MS43MTRjMjNkYjZjNjJhcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDQ4CisgICAgMHgxLjg3N2UyY2Q0ZjZmOTQ3MTBmMjc3Njc3NWIwMWM3M2RicC0zLAorICAgIC0weDEuZjY4ZWViZmNiYjVlYmExMjRkOGNjNDhmZDFiZWIwNGRwLTEsCisgICAgMHgxLjc5ODEwODM1YTFmZTdwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDkKKyAgICAtMHgxLjg3N2UyY2Q0ZjZmOTQ3MTBmMjc3Njc3NWIwMWM3M2RicC0zLAorICAgIC0weDEuZjY4ZWViZmNiYjVlYmExMjRkOGNjNDhmZDFiZWIwNGRwLTEsCisgICAgLTB4MS43OTgxMDgzNWExZmU3cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDUwCisgICAgMHgxLjA1ZTQ3NjFhYjhkNDIxNzE5NTY3NzE3Zjc2NzEyODY3cC0zLAorICAgIC0weDEuZmJjYmU2OTNiZDhlZjAwNmY1ZmYwMjIxMGRmZTA2MTlwLTEsCisgICAgMHgxLjgxYjVlYzhmZDc5YTRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTEKKyAgICAtMHgxLjA1ZTQ3NjFhYjhkNDIxNzE5NTY3NzE3Zjc2NzEyODY3cC0zLAorICAgIC0weDEuZmJjYmU2OTNiZDhlZjAwNmY1ZmYwMjIxMGRmZTA2MTlwLTEsCisgICAgLTB4MS44MWI1ZWM4ZmQ3OWE0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDUyCisgICAgMHgxLjA2NmU3ZWI3NmY1ZGQyZWExOWI2OTkxZThhMWEzNjM0cC00LAorICAgIC0weDEuZmVmMmIyZDIxY2Y2YmUxYTJjN2VhNjY1ZWYxZjg3NGVwLTEsCisgICAgMHgxLjg5ZWFkMGVhMGQzNWJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTMKKyAgICAtMHgxLjA2NmU3ZWI3NmY1ZGQyZWExOWI2OTkxZThhMWEzNjM0cC00LAorICAgIC0weDEuZmVmMmIyZDIxY2Y2YmUxYTJjN2VhNjY1ZWYxZjg3NGVwLTEsCisgICAgLTB4MS44OWVhZDBlYTBkMzVicDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDU0CisgICAgMHgxLjAzYmUwNmY5N2NiZjA5Y2MwYmFkYmRhZTgwM2Q3YjRlcC0yLAorICAgIDB4MS5lZjQxNDViNGFlY2ZmNmY1OGVkZWNmMjQ5NTU0MjhjMXAtMSwKKyAgICAtMHgxLjgxYjVlYzhmZDc5OWZwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTUKKyAgICAtMHgxLjAzYmUwNmY5N2NiZjA5Y2MwYmFkYmRhZTgwM2Q3YjRlcC0yLAorICAgIDB4MS5lZjQxNDViNGFlY2ZmNmY1OGVkZWNmMjQ5NTU0MjhjMXAtMSwKKyAgICAweDEuODFiNWVjOGZkNzk5ZnAyLAorICB9LAorICB7IC8vIEVudHJ5IDQ1NgorICAgIDB4MS5mNjdlYTk3NWI4NmEyMmYyMzQ4Nzc4ODI0Zjk1ZDg0YXAtMiwKKyAgICAweDEuYmUxZDdjMzUzNGMzZjliOWIzNTYxOTI4MDA0OWRlODVwLTEsCisgICAgLTB4MS43MTRjMjNkYjZjNjI2cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDU3CisgICAgLTB4MS5mNjdlYTk3NWI4NmEyMmYyMzQ4Nzc4ODI0Zjk1ZDg0YXAtMiwKKyAgICAweDEuYmUxZDdjMzUzNGMzZjliOWIzNTYxOTI4MDA0OWRlODVwLTEsCisgICAgMHgxLjcxNGMyM2RiNmM2MjZwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTgKKyAgICAweDEuNjQzMDgwZDY3YWNjMjEwZmEyN2U5MjQ3YTgyODYyMjBwLTEsCisgICAgMHgxLjZmY2I3YzZiOGI5MThkODZmYzgzZDYxMmE2NTg3ZWRkcC0xLAorICAgIC0weDEuNjBlMjViMjcwMTJhZHAyLAorICB9LAorICB7IC8vIEVudHJ5IDQ1OQorICAgIC0weDEuNjQzMDgwZDY3YWNjMjEwZmEyN2U5MjQ3YTgyODYyMjBwLTEsCisgICAgMHgxLjZmY2I3YzZiOGI5MThkODZmYzgzZDYxMmE2NTg3ZWRkcC0xLAorICAgIDB4MS42MGUyNWIyNzAxMmFkcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDYwCisgICAgMHgxLmI1ZDU0NWIxMDliZjk1MGI0MTk3MDI5NzJiOTRmOGZhcC0xLAorICAgIDB4MS4wOTZhYzAyZWM0MmM4MmU1YjIyNTE4NWJkNmM3NTdkNXAtMSwKKyAgICAtMHgxLjUwNzg5MjcyOTVmMzRwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjEKKyAgICAtMHgxLmI1ZDU0NWIxMDliZjk1MGI0MTk3MDI5NzJiOTRmOGZhcC0xLAorICAgIDB4MS4wOTZhYzAyZWM0MmM4MmU1YjIyNTE4NWJkNmM3NTdkNXAtMSwKKyAgICAweDEuNTA3ODkyNzI5NWYzNHAyLAorICB9LAorICB7IC8vIEVudHJ5IDQ2MgorICAgIDB4MS5lYWQ2ODM0OTA5YjkzNDYyMzRkYmI2MDFkMDQ4NmNmMnAtMSwKKyAgICAweDEuMjM1YjMzMWQ4Zjc0ODdjZTJkYjk3ODE5ZmFlNzc3N2NwLTIsCisgICAgLTB4MS40MDBlYzliZTJhYmJicDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDYzCisgICAgLTB4MS5lYWQ2ODM0OTA5YjkzNDYyMzRkYmI2MDFkMDQ4NmNmMnAtMSwKKyAgICAweDEuMjM1YjMzMWQ4Zjc0ODdjZTJkYjk3ODE5ZmFlNzc3N2NwLTIsCisgICAgMHgxLjQwMGVjOWJlMmFiYmJwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjQKKyAgICAweDEuZmZiY2E4NDZjNGZjOTk5YTI5ZGMxZDZiMmQ3Y2I0MTNwLTEsCisgICAgMHgxLjA2OTEwN2FlOTMzMmM0YTFjZDJkYzAzM2I4ZDUwNTk4cC01LAorICAgIC0weDEuMmZhNTAxMDliZjg0MnAyLAorICB9LAorICB7IC8vIEVudHJ5IDQ2NQorICAgIC0weDEuZmZiY2E4NDZjNGZjOTk5YTI5ZGMxZDZiMmQ3Y2I0MTNwLTEsCisgICAgMHgxLjA2OTEwN2FlOTMzMmM0YTFjZDJkYzAzM2I4ZDUwNTk4cC01LAorICAgIDB4MS4yZmE1MDEwOWJmODQycDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDY2CisgICAgMHgxLmYzMjljMDU1OGU5NmE1MThhMmFmM2FlNzgwMGE1YjY1cC0xLAorICAgIC0weDEuYzdiOTBlMzAyNDU2OTViZDFlYzE3MGY0NWZlZWIxZmZwLTMsCisgICAgLTB4MS4xZjNiMzg1NTU0NGM5cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDY3CisgICAgLTB4MS5mMzI5YzA1NThlOTZhNTE4YTJhZjNhZTc4MDBhNWI2NXAtMSwKKyAgICAtMHgxLmM3YjkwZTMwMjQ1Njk1YmQxZWMxNzBmNDVmZWViMWZmcC0zLAorICAgIDB4MS4xZjNiMzg1NTU0NGM5cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDY4CisgICAgMHgxLmM1ZjA1ODIzMGU4MDIxZjIxYmQwYWMyYzBmNjgwOWE5cC0xLAorICAgIC0weDEuZDlhM2EzMzZlZGI2MmMxNTQxYjg1ODRjZDZjMDBmODdwLTIsCisgICAgLTB4MS4wZWQxNmZhMGU5MTUwcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDY5CisgICAgLTB4MS5jNWYwNTgyMzBlODAyMWYyMWJkMGFjMmMwZjY4MDlhOXAtMSwKKyAgICAtMHgxLmQ5YTNhMzM2ZWRiNjJjMTU0MWI4NTg0Y2Q2YzAwZjg3cC0yLAorICAgIDB4MS4wZWQxNmZhMGU5MTUwcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDcwCisgICAgMHgxLjdiMDViN2I2YzYxMzY1YTlhYzllOTA4YjhlNWQzY2U0cC0xLAorICAgIC0weDEuNTgzN2QyODE3Y2YyNzcwNWNhYzc4ODFmYjU2OWZmYzdwLTEsCisgICAgLTB4MS5mY2NmNGRkOGZiYmFlcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDcxCisgICAgLTB4MS43YjA1YjdiNmM2MTM2NWE5YWM5ZTkwOGI4ZTVkM2NlNHAtMSwKKyAgICAtMHgxLjU4MzdkMjgxN2NmMjc3MDVjYWM3ODgxZmI1NjlmZmM3cC0xLAorICAgIDB4MS5mY2NmNGRkOGZiYmFlcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDcyCisgICAgMHgxLjE3NTA1OWJmMGQ0MmYxZDZiMzkxZjA3Zjk2ZjIzNTNkcC0xLAorICAgIC0weDEuYWQxOWUyNTM1YWE4ZmZiNDAwNjZkNzhhZWY3MWZhYmRwLTEsCisgICAgLTB4MS5kYmZiYmM3MDI1NGJjcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDczCisgICAgLTB4MS4xNzUwNTliZjBkNDJmMWQ2YjM5MWYwN2Y5NmYyMzUzZHAtMSwKKyAgICAtMHgxLmFkMTllMjUzNWFhOGZmYjQwMDY2ZDc4YWVmNzFmYWJkcC0xLAorICAgIDB4MS5kYmZiYmM3MDI1NGJjcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDc0CisgICAgMHgxLjQyYWJiYThjNzJmZDIyMTk0NzkzMjQ2YjhkMTk5NjBhcC0yLAorICAgIC0weDEuZTVlYWEyODZmYmJjMmIxMjkyMzgxNjBkZjMwY2U3MDRwLTEsCisgICAgLTB4MS5iYjI4MmIwNzRlZGNhcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDc1CisgICAgLTB4MS40MmFiYmE4YzcyZmQyMjE5NDc5MzI0NmI4ZDE5OTYwYXAtMiwKKyAgICAtMHgxLmU1ZWFhMjg2ZmJiYzJiMTI5MjM4MTYwZGYzMGNlNzA0cC0xLAorICAgIDB4MS5iYjI4MmIwNzRlZGNhcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDc2CisgICAgMHgxLjA2NmU3ZWI3NmY2MmI1ZjQ1NjNkZTI2ZGNhODkwMDE3cC00LAorICAgIC0weDEuZmVmMmIyZDIxY2Y2YjQwZmYzYjUzMGNlOGRjMGQ4YTdwLTEsCisgICAgLTB4MS45YTU0OTk5ZTc4NmQ4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDc3CisgICAgLTB4MS4wNjZlN2ViNzZmNjJiNWY0NTYzZGUyNmRjYTg5MDAxN3AtNCwKKyAgICAtMHgxLmZlZjJiMmQyMWNmNmI0MGZmM2I1MzBjZThkYzBkOGE3cC0xLAorICAgIDB4MS45YTU0OTk5ZTc4NmQ4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDc4CisgICAgLTB4MS44NzdlMmNkNGY2ZmE0MjU4Njg3NWM1MjUwYTE2OWU0OHAtMywKKyAgICAtMHgxLmY2OGVlYmZjYmI1ZWFkZDY1YzI2MWNkODAzOTkwYWUxcC0xLAorICAgIC0weDEuNzk4MTA4MzVhMWZlNnAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ3OQorICAgIDB4MS44NzdlMmNkNGY2ZmE0MjU4Njg3NWM1MjUwYTE2OWU0OHAtMywKKyAgICAtMHgxLmY2OGVlYmZjYmI1ZWFkZDY1YzI2MWNkODAzOTkwYWUxcC0xLAorICAgIDB4MS43OTgxMDgzNWExZmU2cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDgwCisgICAgLTB4MS5iYzRjMDRkNzFhYmE1ZGZjMDk4Mjc4ZjE2OGJiZDk2MnAtMiwKKyAgICAtMHgxLmNkNGJjYTljYjVjNzc1YTk5NzI5ZjdhZDk1YjdkY2UzcC0xLAorICAgIC0weDEuNThhZDc2Y2NjYjhmNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ4MQorICAgIDB4MS5iYzRjMDRkNzFhYmE1ZGZjMDk4Mjc4ZjE2OGJiZDk2MnAtMiwKKyAgICAtMHgxLmNkNGJjYTljYjVjNzc1YTk5NzI5ZjdhZDk1YjdkY2UzcC0xLAorICAgIDB4MS41OGFkNzZjY2NiOGY0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDgyCisgICAgLTB4MS40YmU0OTc5YzVlZmE4NzFkMzBhZTFjZmE2NjM4OTE5OXAtMSwKKyAgICAtMHgxLjg1ZGMzZWExYmJjZjJhYTJlMjFlYzU4NmQ1NDk3ZTM1cC0xLAorICAgIC0weDEuMzdkOWU1NjNmNTIwMnAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ4MworICAgIDB4MS40YmU0OTc5YzVlZmE4NzFkMzBhZTFjZmE2NjM4OTE5OXAtMSwKKyAgICAtMHgxLjg1ZGMzZWExYmJjZjJhYTJlMjFlYzU4NmQ1NDk3ZTM1cC0xLAorICAgIDB4MS4zN2Q5ZTU2M2Y1MjAycDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDg0CisgICAgLTB4MS5hM2VkOWUyNTI5MzgyMjE2ODk1OGNjZTFlMDlmN2MxMXAtMSwKKyAgICAtMHgxLjI0ZWM3OTkxNzE2NGU0MWFkZGQ0YmFjZDQ0MjBmOWZicC0xLAorICAgIC0weDEuMTcwNjUzZmIxZWIxMHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ4NQorICAgIDB4MS5hM2VkOWUyNTI5MzgyMjE2ODk1OGNjZTFlMDlmN2MxMXAtMSwKKyAgICAtMHgxLjI0ZWM3OTkxNzE2NGU0MWFkZGQ0YmFjZDQ0MjBmOWZicC0xLAorICAgIDB4MS4xNzA2NTNmYjFlYjEwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDg2CisgICAgLTB4MS5lMDdlZWVkYTEwOWM2MmIzNDBkYzM2ZTkyMTY5NjQ4ZHAtMSwKKyAgICAtMHgxLjYxYTc2MDc3YWVlMjNiMTFmMGM2NzNmNjM4MDAzYjBhcC0yLAorICAgIC0weDEuZWM2NTg1MjQ5MDgzY3AwLAorICB9LAorICB7IC8vIEVudHJ5IDQ4NworICAgIDB4MS5lMDdlZWVkYTEwOWM2MmIzNDBkYzM2ZTkyMTY5NjQ4ZHAtMSwKKyAgICAtMHgxLjYxYTc2MDc3YWVlMjNiMTFmMGM2NzNmNjM4MDAzYjBhcC0yLAorICAgIDB4MS5lYzY1ODUyNDkwODNjcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDg4CisgICAgLTB4MS5mZGEyNTRjMjdhMDFkZDk1NGRiM2FlYTUwNWU0OTQ1M3AtMSwKKyAgICAtMHgxLjg5NGY3MGJlZmJjMTA0YjcwNmU4NWNmNGMxYzk2YTUycC00LAorICAgIC0weDEuYWFiZTYyNTJlM2E1OHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQ4OQorICAgIDB4MS5mZGEyNTRjMjdhMDFkZDk1NGRiM2FlYTUwNWU0OTQ1M3AtMSwKKyAgICAtMHgxLjg5NGY3MGJlZmJjMTA0YjcwNmU4NWNmNGMxYzk2YTUycC00LAorICAgIDB4MS5hYWJlNjI1MmUzYTU4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDkwCisgICAgLTB4MS5mOTZmZTQwNWYxYWNhMDJlOGY0ZmQ0MzNlNTlhYTk3M3AtMSwKKyAgICAweDEuNDZkYzRmNGNlODM3M2M3YzQ0ZjEzYjU3MzYzZWRkM2JwLTMsCisgICAgLTB4MS42OTE3M2Y4MTM2Yzc0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDkxCisgICAgMHgxLmY5NmZlNDA1ZjFhY2EwMmU4ZjRmZDQzM2U1OWFhOTczcC0xLAorICAgIDB4MS40NmRjNGY0Y2U4MzczYzdjNDRmMTNiNTczNjNlZGQzYnAtMywKKyAgICAweDEuNjkxNzNmODEzNmM3NHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQ5MgorICAgIC0weDEuZDQyZGU0MmRjZTEzZWYwNDBiYjEwNDBlMzE0OGQ3ZGVwLTEsCisgICAgMHgxLjllN2Y4NjUyYjQ3Mjg5ZTUzZmNjZDU0OTU1ZGI0NTUycC0yLAorICAgIC0weDEuMjc3MDFjYWY4OWU5MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQ5MworICAgIDB4MS5kNDJkZTQyZGNlMTNlZjA0MGJiMTA0MGUzMTQ4ZDdkZXAtMSwKKyAgICAweDEuOWU3Zjg2NTJiNDcyODllNTNmY2NkNTQ5NTVkYjQ1NTJwLTIsCisgICAgMHgxLjI3NzAxY2FmODllOTBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTQKKyAgICAtMHgxLjkwNGMzNzUwNWRlNTkzMDgxMmUzYTJhOTRmZWFhNTFicC0xLAorICAgIDB4MS4zZjNhMGUyOGJlZGJmYjA2NmI2N2FiZDljMzM4NDA5ZXAtMSwKKyAgICAtMHgxLmNiOTFmM2JiYmExNTdwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNDk1CisgICAgMHgxLjkwNGMzNzUwNWRlNTkzMDgxMmUzYTJhOTRmZWFhNTFicC0xLAorICAgIDB4MS4zZjNhMGUyOGJlZGJmYjA2NmI2N2FiZDljMzM4NDA5ZXAtMSwKKyAgICAweDEuY2I5MWYzYmJiYTE1N3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTYKKyAgICAtMHgxLjMyM2I4YjFmYjRiYjYyNmRkNDBjYWNkNzQ5NjNhYzZjcC0xLAorICAgIDB4MS45YTUyZTJlMGZiY2E0YjAwYzcyZGFhM2NkYWNhMjU3Y3AtMSwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1OGVwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNDk3CisgICAgMHgxLjMyM2I4YjFmYjRiYjYyNmRkNDBjYWNkNzQ5NjNhYzZjcC0xLAorICAgIDB4MS45YTUyZTJlMGZiY2E0YjAwYzcyZGFhM2NkYWNhMjU3Y3AtMSwKKyAgICAweDEuNDg0M2FlMTg2MDU4ZXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTgKKyAgICAtMHgxLjgwNDVmZTY0ZTYzMDhiYjVjNmNlMzVmODM0YjkzYzYzcC0yLAorICAgIDB4MS5kYTk0ZDU0ZGQ0YmZmNzUzZDk4OGMxNzU1ZTJmZmMwNHAtMSwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzOGFwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNDk5CisgICAgMHgxLjgwNDVmZTY0ZTYzMDhiYjVjNmNlMzVmODM0YjkzYzYzcC0yLAorICAgIDB4MS5kYTk0ZDU0ZGQ0YmZmNzUzZDk4OGMxNzU1ZTJmZmMwNHAtMSwKKyAgICAweDEuODllYWQwZWEwZDM4YXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDAKKyAgICAtMHgxLjA1ZTQ3NjFhYjhkZWM0NGVkMGZhMzBkMzM1MDQ5YzQwcC0zLAorICAgIDB4MS5mYmNiZTY5M2JkOGU5ODQyMzIwN2UzNjU4N2Q5NDJiN3AtMSwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3ZjBwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTAxCisgICAgMHgxLjA1ZTQ3NjFhYjhkZWM0NGVkMGZhMzBkMzM1MDQ5YzQwcC0zLAorICAgIDB4MS5mYmNiZTY5M2JkOGU5ODQyMzIwN2UzNjU4N2Q5NDJiN3AtMSwKKyAgICAweDEuMDY5YzhiNDZiMzdmMHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDIKKyAgICAweDEuMDVlNDc2MWFiOGQzMWQwMGU2NTYzNzJjNWMwNGFhNmVwLTMsCisgICAgMHgxLmZiY2JlNjkzYmQ4ZWY4NmMxNTY1YjM0NTMwMzZlNTVlcC0xLAorICAgIDB4MS4wNjljOGI0NmIzNzM0cC0zLAorICB9LAorICB7IC8vIEVudHJ5IDUwMworICAgIC0weDEuMDVlNDc2MWFiOGQzMWQwMGU2NTYzNzJjNWMwNGFhNmVwLTMsCisgICAgMHgxLmZiY2JlNjkzYmQ4ZWY4NmMxNTY1YjM0NTMwMzZlNTVlcC0xLAorICAgIC0weDEuMDY5YzhiNDZiMzczNHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDQKKyAgICAweDEuODA0NWZlNjRlNjJiMTlhMDk0Mzk5NTAyYWZiNzZlNWNwLTIsCisgICAgMHgxLmRhOTRkNTRkZDRjMTExODc0MDVhZGE3ZjA0ZTViMTcxcC0xLAorICAgIDB4MS44OWVhZDBlYTBkMzJjcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDUwNQorICAgIC0weDEuODA0NWZlNjRlNjJiMTlhMDk0Mzk5NTAyYWZiNzZlNWNwLTIsCisgICAgMHgxLmRhOTRkNTRkZDRjMTExODc0MDVhZGE3ZjA0ZTViMTcxcC0xLAorICAgIC0weDEuODllYWQwZWEwZDMyY3AtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDYKKyAgICAweDEuMzIzYjhiMWZiNGI5MDdjNDE2ZDIzYjA0ZTBlYzBlNzJwLTEsCisgICAgMHgxLjlhNTJlMmUwZmJjYzBjYzgzYjg0M2JhZTU4YzZjZGY4cC0xLAorICAgIDB4MS40ODQzYWUxODYwNTVmcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDUwNworICAgIC0weDEuMzIzYjhiMWZiNGI5MDdjNDE2ZDIzYjA0ZTBlYzBlNzJwLTEsCisgICAgMHgxLjlhNTJlMmUwZmJjYzBjYzgzYjg0M2JhZTU4YzZjZGY4cC0xLAorICAgIC0weDEuNDg0M2FlMTg2MDU1ZnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDgKKyAgICAweDEuOTA0YzM3NTA1ZGUzYmUyYWNlMTdjYTU0ODc3NTAyMzFwLTEsCisgICAgMHgxLjNmM2EwZTI4YmVkZTQ2ZjY1Y2E1YjVjMTlhZDk5ZGQ3cC0xLAorICAgIDB4MS5jYjkxZjNiYmJhMTI4cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDUwOQorICAgIC0weDEuOTA0YzM3NTA1ZGUzYmUyYWNlMTdjYTU0ODc3NTAyMzFwLTEsCisgICAgMHgxLjNmM2EwZTI4YmVkZTQ2ZjY1Y2E1YjVjMTlhZDk5ZGQ3cC0xLAorICAgIC0weDEuY2I5MWYzYmJiYTEyOHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTAKKyAgICAweDEuZDQyZGU0MmRjZTEyYjgyNDY2ZjJmY2I2M2IyOTQ3NTFwLTEsCisgICAgMHgxLjllN2Y4NjUyYjQ3ODA2NmVlYzU2M2Y4MzUwOTdmMTQ4cC0yLAorICAgIDB4MS4yNzcwMWNhZjg5ZTc4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNTExCisgICAgLTB4MS5kNDJkZTQyZGNlMTJiODI0NjZmMmZjYjYzYjI5NDc1MXAtMSwKKyAgICAweDEuOWU3Zjg2NTJiNDc4MDY2ZWVjNTYzZjgzNTA5N2YxNDhwLTIsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTc4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNTEyCisgICAgMHgxLmY5NmZlNDA1ZjFhYzI1OWJmMTkyZmQxY2Y2NGUyZjEycC0xLAorICAgIDB4MS40NmRjNGY0Y2U4NDMxNTFiOWQxNGU1NjE4NzllNWZlM3AtMywKKyAgICAweDEuNjkxNzNmODEzNmM1Y3AwLAorICB9LAorICB7IC8vIEVudHJ5IDUxMworICAgIC0weDEuZjk2ZmU0MDVmMWFjMjU5YmYxOTJmZDFjZjY0ZTJmMTJwLTEsCisgICAgMHgxLjQ2ZGM0ZjRjZTg0MzE1MWI5ZDE0ZTU2MTg3OWU1ZmUzcC0zLAorICAgIC0weDEuNjkxNzNmODEzNmM1Y3AwLAorICB9LAorICB7IC8vIEVudHJ5IDUxNAorICAgIDB4MS5mZGEyNTRjMjdhMDIyNzU0MzJkNzdkZDZmOTcwNDY0NHAtMSwKKyAgICAtMHgxLjg5NGY3MGJlZmJhOTIxMWIwZGNhYTRkY2E0NTA2NzBmcC00LAorICAgIDB4MS5hYWJlNjI1MmUzYTQwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNTE1CisgICAgLTB4MS5mZGEyNTRjMjdhMDIyNzU0MzJkNzdkZDZmOTcwNDY0NHAtMSwKKyAgICAtMHgxLjg5NGY3MGJlZmJhOTIxMWIwZGNhYTRkY2E0NTA2NzBmcC00LAorICAgIC0weDEuYWFiZTYyNTJlM2E0MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDUxNgorICAgIDB4MS5lMDdlZWVkYTEwOWQ2YmYwYzkzNWZhMTBiMTI4MGM2ZHAtMSwKKyAgICAtMHgxLjYxYTc2MDc3YWVkYzk5OTUyNDM4NDIxZjgyMGEyYmVmcC0yLAorICAgIDB4MS5lYzY1ODUyNDkwODI0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNTE3CisgICAgLTB4MS5lMDdlZWVkYTEwOWQ2YmYwYzkzNWZhMTBiMTI4MGM2ZHAtMSwKKyAgICAtMHgxLjYxYTc2MDc3YWVkYzk5OTUyNDM4NDIxZjgyMGEyYmVmcC0yLAorICAgIC0weDEuZWM2NTg1MjQ5MDgyNHAwLAorICB9LAorICB7IC8vIEVudHJ5IDUxOAorICAgIDB4MS5hM2VkOWUyNTI5MzlkOTc5M2ZiMmY2Zjc1ZTVjNzZlN3AtMSwKKyAgICAtMHgxLjI0ZWM3OTkxNzE2MjZlMzY3MDljZmNmN2M3NzUyMzMycC0xLAorICAgIDB4MS4xNzA2NTNmYjFlYjA0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNTE5CisgICAgLTB4MS5hM2VkOWUyNTI5MzlkOTc5M2ZiMmY2Zjc1ZTVjNzZlN3AtMSwKKyAgICAtMHgxLjI0ZWM3OTkxNzE2MjZlMzY3MDljZmNmN2M3NzUyMzMycC0xLAorICAgIC0weDEuMTcwNjUzZmIxZWIwNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDUyMAorICAgIDB4MS40YmU0OTc5YzVlZmNjZmU3OGVhMGI2YWZiMGNiYmEzN3AtMSwKKyAgICAtMHgxLjg1ZGMzZWExYmJjZDM4Y2JmZWI0MzcwZDU0MDVlZWJhcC0xLAorICAgIDB4MS4zN2Q5ZTU2M2Y1MWY2cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNTIxCisgICAgLTB4MS40YmU0OTc5YzVlZmNjZmU3OGVhMGI2YWZiMGNiYmEzN3AtMSwKKyAgICAtMHgxLjg1ZGMzZWExYmJjZDM4Y2JmZWI0MzcwZDU0MDVlZWJhcC0xLAorICAgIC0weDEuMzdkOWU1NjNmNTFmNnAxLAorICB9LAorICB7IC8vIEVudHJ5IDUyMgorICAgIDB4MS5iYzRjMDRkNzFhYmZjNWRmNjk1ODlhNDVkNWUzMTk2ZXAtMiwKKyAgICAtMHgxLmNkNGJjYTljYjVjNjI4NzA5Mzg4YTM5ZmM4NDU5MWQxcC0xLAorICAgIDB4MS41OGFkNzZjY2NiOGU4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNTIzCisgICAgLTB4MS5iYzRjMDRkNzFhYmZjNWRmNjk1ODlhNDVkNWUzMTk2ZXAtMiwKKyAgICAtMHgxLmNkNGJjYTljYjVjNjI4NzA5Mzg4YTM5ZmM4NDU5MWQxcC0xLAorICAgIC0weDEuNThhZDc2Y2NjYjhlOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDUyNAorICAgIDB4MS44NzdlMmNkNGY3MDYwOWIxZjA2MjI5NWI2NGFlZDRiZHAtMywKKyAgICAtMHgxLmY2OGVlYmZjYmI1ZTFiMDcwYjU2NDAzN2Y1NTcxYTM5cC0xLAorICAgIDB4MS43OTgxMDgzNWExZmRhcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNTI1CisgICAgLTB4MS44NzdlMmNkNGY3MDYwOWIxZjA2MjI5NWI2NGFlZDRiZHAtMywKKyAgICAtMHgxLmY2OGVlYmZjYmI1ZTFiMDcwYjU2NDAzN2Y1NTcxYTM5cC0xLAorICAgIC0weDEuNzk4MTA4MzVhMWZkYXAxLAorICB9LAorICB7IC8vIEVudHJ5IDUyNgorICAgIC0weDEuMDY2ZTdlYjc2ZjRhYzI5M2Y0NjQ4NmRjMzI4ZDQ1MGJwLTQsCisgICAgLTB4MS5mZWYyYjJkMjFjZjZlNTQ0YWI3Nzk1YWVkMTBkOWZhN3AtMSwKKyAgICAweDEuOWE1NDk5OWU3ODZjY3AxLAorICB9LAorICB7IC8vIEVudHJ5IDUyNworICAgIDB4MS4wNjZlN2ViNzZmNGFjMjkzZjQ2NDg2ZGMzMjhkNDUwYnAtNCwKKyAgICAtMHgxLmZlZjJiMmQyMWNmNmU1NDRhYjc3OTVhZWQxMGQ5ZmE3cC0xLAorICAgIC0weDEuOWE1NDk5OWU3ODZjY3AxLAorICB9LAorICB7IC8vIEVudHJ5IDUyOAorICAgIC0weDEuNDJhYmJhOGM3MmY3NzA1OTVmZmUzMTM1YTBlMGFkODNwLTIsCisgICAgLTB4MS5lNWVhYTI4NmZiYmQxZDEzNWUyMTZjNDlhOWY3ZTVkYXAtMSwKKyAgICAweDEuYmIyODJiMDc0ZWRiZXAxLAorICB9LAorICB7IC8vIEVudHJ5IDUyOQorICAgIDB4MS40MmFiYmE4YzcyZjc3MDU5NWZmZTMxMzVhMGUwYWQ4M3AtMiwKKyAgICAtMHgxLmU1ZWFhMjg2ZmJiZDFkMTM1ZTIxNmM0OWE5ZjdlNWRhcC0xLAorICAgIC0weDEuYmIyODJiMDc0ZWRiZXAxLAorICB9LAorICB7IC8vIEVudHJ5IDUzMAorICAgIC0weDEuMTc1MDU5YmYwZDQwNmUyZmUwMTRlODgwZGQyOWNmYWNwLTEsCisgICAgLTB4MS5hZDE5ZTI1MzVhYWFhMmFjODcwNTZiNmQ3Nzc2ZTk3YXAtMSwKKyAgICAweDEuZGJmYmJjNzAyNTRiMHAxLAorICB9LAorICB7IC8vIEVudHJ5IDUzMQorICAgIDB4MS4xNzUwNTliZjBkNDA2ZTJmZTAxNGU4ODBkZDI5Y2ZhY3AtMSwKKyAgICAtMHgxLmFkMTllMjUzNWFhYWEyYWM4NzA1NmI2ZDc3NzZlOTdhcC0xLAorICAgIC0weDEuZGJmYmJjNzAyNTRiMHAxLAorICB9LAorICB7IC8vIEVudHJ5IDUzMgorICAgIC0weDEuN2IwNWI3YjZjNjExNjE1NWYwZGM1NTFlMzE2ZTFlMGJwLTEsCisgICAgLTB4MS41ODM3ZDI4MTdjZjRhZjhlNWU1OWIxM2I0YWE5YjVlM3AtMSwKKyAgICAweDEuZmNjZjRkZDhmYmJhMnAxLAorICB9LAorICB7IC8vIEVudHJ5IDUzMworICAgIDB4MS43YjA1YjdiNmM2MTE2MTU1ZjBkYzU1MWUzMTZlMWUwYnAtMSwKKyAgICAtMHgxLjU4MzdkMjgxN2NmNGFmOGU1ZTU5YjEzYjRhYTliNWUzcC0xLAorICAgIC0weDEuZmNjZjRkZDhmYmJhMnAxLAorICB9LAorICB7IC8vIEVudHJ5IDUzNAorICAgIC0weDEuYzVmMDU4MjMwZTdlYmViNzYxNjc3OWUxNmZhOWI1MzdwLTEsCisgICAgLTB4MS5kOWEzYTMzNmVkYmI3ZGU2NGEyMTgzY2IyN2JlNGI1YnAtMiwKKyAgICAweDEuMGVkMTZmYTBlOTE0YXAyLAorICB9LAorICB7IC8vIEVudHJ5IDUzNQorICAgIDB4MS5jNWYwNTgyMzBlN2ViZWI3NjE2Nzc5ZTE2ZmE5YjUzN3AtMSwKKyAgICAtMHgxLmQ5YTNhMzM2ZWRiYjdkZTY0YTIxODNjYjI3YmU0YjVicC0yLAorICAgIC0weDEuMGVkMTZmYTBlOTE0YXAyLAorICB9LAorICB7IC8vIEVudHJ5IDUzNgorICAgIC0weDEuZjMyOWMwNTU4ZTk1ZmEzMzNkNWQyZDQ0ZDY1NDc3N2NwLTEsCisgICAgLTB4MS5jN2I5MGUzMDI0NjI0OGI3YTBjMmM4N2EzZGQyNTIyNHAtMywKKyAgICAweDEuMWYzYjM4NTU1NDRjM3AyLAorICB9LAorICB7IC8vIEVudHJ5IDUzNworICAgIDB4MS5mMzI5YzA1NThlOTVmYTMzM2Q1ZDJkNDRkNjU0Nzc3Y3AtMSwKKyAgICAtMHgxLmM3YjkwZTMwMjQ2MjQ4YjdhMGMyYzg3YTNkZDI1MjI0cC0zLAorICAgIC0weDEuMWYzYjM4NTU1NDRjM3AyLAorICB9LAorICB7IC8vIEVudHJ5IDUzOAorICAgIC0weDEuZmZiY2E4NDZjNGZjYjIzN2MyOTQ3YjM1YjAzN2EycC0xLAorICAgIDB4MS4wNjkxMDdhZTkzMDJjYWYyMDY4YjQ4ODQyYWZkZjA1MXAtNSwKKyAgICAweDEuMmZhNTAxMDliZjgzY3AyLAorICB9LAorICB7IC8vIEVudHJ5IDUzOQorICAgIDB4MS5mZmJjYTg0NmM0ZmNiMjM3YzI5NDdiMzViMDM3YTJwLTEsCisgICAgMHgxLjA2OTEwN2FlOTMwMmNhZjIwNjhiNDg4NDJhZmRmMDUxcC01LAorICAgIC0weDEuMmZhNTAxMDliZjgzY3AyLAorICB9LAorICB7IC8vIEVudHJ5IDU0MAorICAgIC0weDEuZWFkNjgzNDkwOWJhMGVlNjliMzFlMTk3MGRmMWJiOGJwLTEsCisgICAgMHgxLjIzNWIzMzFkOGY2ZWM3NGFhM2RlNWFlZDE1ZmEzZjY4cC0yLAorICAgIDB4MS40MDBlYzliZTJhYmI1cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTQxCisgICAgMHgxLmVhZDY4MzQ5MDliYTBlZTY5YjMxZTE5NzBkZjFiYjhicC0xLAorICAgIDB4MS4yMzViMzMxZDhmNmVjNzRhYTNkZTVhZWQxNWZhM2Y2OHAtMiwKKyAgICAtMHgxLjQwMGVjOWJlMmFiYjVwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDIKKyAgICAtMHgxLmI1ZDU0NWIxMDljMTIzMmI2MWRkMjhkODAzNWQ5NWNicC0xLAorICAgIDB4MS4wOTZhYzAyZWM0MjlmMjI1Yzk5Yjg5YmI0YzllNWQzZXAtMSwKKyAgICAweDEuNTA3ODkyNzI5NWYyZXAyLAorICB9LAorICB7IC8vIEVudHJ5IDU0MworICAgIDB4MS5iNWQ1NDViMTA5YzEyMzJiNjFkZDI4ZDgwMzVkOTVjYnAtMSwKKyAgICAweDEuMDk2YWMwMmVjNDI5ZjIyNWM5OWI4OWJiNGM5ZTVkM2VwLTEsCisgICAgLTB4MS41MDc4OTI3Mjk1ZjJlcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTQ0CisgICAgLTB4MS42NDMwODBkNjdhY2U0OGMwZGQxZmUzYTA2YmJjNGJmNXAtMSwKKyAgICAweDEuNmZjYjdjNmI4YjhmNzczZTNiNDIxZGRlZDZmYzFmMjZwLTEsCisgICAgMHgxLjYwZTI1YjI3MDEyYTdwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDUKKyAgICAweDEuNjQzMDgwZDY3YWNlNDhjMGRkMWZlM2EwNmJiYzRiZjVwLTEsCisgICAgMHgxLjZmY2I3YzZiOGI4Zjc3M2UzYjQyMWRkZWQ2ZmMxZjI2cC0xLAorICAgIC0weDEuNjBlMjViMjcwMTJhN3AyLAorICB9LAorICB7IC8vIEVudHJ5IDU0NgorICAgIC0weDEuZjY3ZWE5NzViODZmNWQ0YWE5MjcxNmNjMDc3NDczYTdwLTIsCisgICAgMHgxLmJlMWQ3YzM1MzRjMjgwZGFiNDNkY2VkNjcwMzMwYjYzcC0xLAorICAgIDB4MS43MTRjMjNkYjZjNjIwcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTQ3CisgICAgMHgxLmY2N2VhOTc1Yjg2ZjVkNGFhOTI3MTZjYzA3NzQ3M2E3cC0yLAorICAgIDB4MS5iZTFkN2MzNTM0YzI4MGRhYjQzZGNlZDY3MDMzMGI2M3AtMSwKKyAgICAtMHgxLjcxNGMyM2RiNmM2MjBwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDgKKyAgICAtMHgxLjAzYmUwNmY5N2NjNGQ3OGZkY2NiY2ExZDQwZTg2MDExcC0yLAorICAgIDB4MS5lZjQxNDViNGFlY2YzNDI3MDlhM2IxOTMyMGQxYjE5NHAtMSwKKyAgICAweDEuODFiNWVjOGZkNzk5OXAyLAorICB9LAorICB7IC8vIEVudHJ5IDU0OQorICAgIDB4MS4wM2JlMDZmOTdjYzRkNzhmZGNjYmNhMWQ0MGU4NjAxMXAtMiwKKyAgICAweDEuZWY0MTQ1YjRhZWNmMzQyNzA5YTNiMTkzMjBkMWIxOTRwLTEsCisgICAgLTB4MS44MWI1ZWM4ZmQ3OTk5cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTUwCisgICAgMHgxLmVmYjI2ZWY5MzBjNGMzZmEzMjQ1OTYzYzFkY2VjMGE2cC01LAorICAgIDB4MS5mZjBmZDJjOTZhZGZiYWU1NzY5ODFlZTRiMzQ3NjlkZXAtMSwKKyAgICAweDEuZWZmZmZmZmZmZmZmZnAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTEKKyAgICAtMHgxLmVmYjI2ZWY5MzBjNGMzZmEzMjQ1OTYzYzFkY2VjMGE2cC01LAorICAgIDB4MS5mZjBmZDJjOTZhZGZiYWU1NzY5ODFlZTRiMzQ3NjlkZXAtMSwKKyAgICAtMHgxLmVmZmZmZmZmZmZmZmZwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgNTUyCisgICAgMHgxLmVmYjI2ZWY5MzBjNGQzZjJiMGRiZTE5MzFiYTVhZTY0cC01LAorICAgIDB4MS5mZjBmZDJjOTZhZGZiYWQ1ZjkwNGE3MWIyZDIxMGEyYXAtMSwKKyAgICAweDEuZnAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTMKKyAgICAtMHgxLmVmYjI2ZWY5MzBjNGQzZjJiMGRiZTE5MzFiYTVhZTY0cC01LAorICAgIDB4MS5mZjBmZDJjOTZhZGZiYWQ1ZjkwNGE3MWIyZDIxMGEyYXAtMSwKKyAgICAtMHgxLmZwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgNTU0CisgICAgMHgxLmVmYjI2ZWY5MzBjNGUzZWIyZjcyMmNlYTE5N2MyMDM2cC01LAorICAgIDB4MS5mZjBmZDJjOTZhZGZiYWM2N2I3MTJmNTFhNmZhMmFiM3AtMSwKKyAgICAweDEuZjAwMDAwMDAwMDAwMXAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTUKKyAgICAtMHgxLmVmYjI2ZWY5MzBjNGUzZWIyZjcyMmNlYTE5N2MyMDM2cC01LAorICAgIDB4MS5mZjBmZDJjOTZhZGZiYWM2N2I3MTJmNTFhNmZhMmFiM3AtMSwKKyAgICAtMHgxLmYwMDAwMDAwMDAwMDFwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgNTU2CisgICAgMHgxLmY2YmFhYTEzMWRlNjMzYWQ0ZTBlN2Q2NDY1ZDEyYTA1cC00LAorICAgIDB4MS5mYzIxMDA1NTQ2N2ZlNWM4Zjc2ZTc1ZmQ3MDgzODE4Y3AtMSwKKyAgICAweDEuZjdmZmZmZmZmZmZmZnAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTcKKyAgICAtMHgxLmY2YmFhYTEzMWRlNjMzYWQ0ZTBlN2Q2NDY1ZDEyYTA1cC00LAorICAgIDB4MS5mYzIxMDA1NTQ2N2ZlNWM4Zjc2ZTc1ZmQ3MDgzODE4Y3AtMSwKKyAgICAtMHgxLmY3ZmZmZmZmZmZmZmZwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgNTU4CisgICAgMHgxLmY2YmFhYTEzMWRlNjQzOGU1NjExMjc5ODY0ZmU3NjYzcC00LAorICAgIDB4MS5mYzIxMDA1NTQ2N2ZlNThhMjAxOTMzOTliM2JjMGRkMnAtMSwKKyAgICAweDEuZjgwcC00LAorICB9LAorICB7IC8vIEVudHJ5IDU1OQorICAgIC0weDEuZjZiYWFhMTMxZGU2NDM4ZTU2MTEyNzk4NjRmZTc2NjNwLTQsCisgICAgMHgxLmZjMjEwMDU1NDY3ZmU1OGEyMDE5MzM5OWIzYmMwZGQycC0xLAorICAgIC0weDEuZjgwcC00LAorICB9LAorICB7IC8vIEVudHJ5IDU2MAorICAgIDB4MS5mNmJhYWExMzFkZTY1MzZmNWUxM2QxY2M2NDI5Y2MwN3AtNCwKKyAgICAweDEuZmMyMTAwNTU0NjdmZTU0YjQ4YzNmMTM1ZjZmMjlkZjdwLTEsCisgICAgMHgxLmY4MDAwMDAwMDAwMDFwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgNTYxCisgICAgLTB4MS5mNmJhYWExMzFkZTY1MzZmNWUxM2QxY2M2NDI5Y2MwN3AtNCwKKyAgICAweDEuZmMyMTAwNTU0NjdmZTU0YjQ4YzNmMTM1ZjZmMjlkZjdwLTEsCisgICAgLTB4MS5mODAwMDAwMDAwMDAxcC00LAorICB9LAorICB7IC8vIEVudHJ5IDU2MgorICAgIDB4MS40YThjM2I0ZTljN2ZmMDBhMzZlMDYxYTBkMjI5NTA5M3AtMywKKyAgICAweDEuZjk0OTg0YjI1NTJlMTllNzMyOTQxM2I4YzJlOGRjNTFwLTEsCisgICAgMHgxLjRiZmZmZmZmZmZmZmZwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTYzCisgICAgLTB4MS40YThjM2I0ZTljN2ZmMDBhMzZlMDYxYTBkMjI5NTA5M3AtMywKKyAgICAweDEuZjk0OTg0YjI1NTJlMTllNzMyOTQxM2I4YzJlOGRjNTFwLTEsCisgICAgLTB4MS40YmZmZmZmZmZmZmZmcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDU2NAorICAgIDB4MS40YThjM2I0ZTljN2ZmZmQ0ODMwNWY0NGE0MmY1ZjUwZnAtMywKKyAgICAweDEuZjk0OTg0YjI1NTJlMTk0MWVjNzY2YzZhODJlY2U0YTNwLTEsCisgICAgMHgxLjRjMHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjUKKyAgICAtMHgxLjRhOGMzYjRlOWM3ZmZmZDQ4MzA1ZjQ0YTQyZjVmNTBmcC0zLAorICAgIDB4MS5mOTQ5ODRiMjU1MmUxOTQxZWM3NjZjNmE4MmVjZTRhM3AtMSwKKyAgICAtMHgxLjRjMHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjYKKyAgICAweDEuNGE4YzNiNGU5YzgwMGY5ZWNmMmI4NmYzYjNiZDZmNWFwLTMsCisgICAgMHgxLmY5NDk4NGIyNTUyZTE4OWNhNjU4YzUxYzQyZTkwN2NlcC0xLAorICAgIDB4MS40YzAwMDAwMDAwMDAxcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDU2NworICAgIC0weDEuNGE4YzNiNGU5YzgwMGY5ZWNmMmI4NmYzYjNiZDZmNWFwLTMsCisgICAgMHgxLmY5NDk4NGIyNTUyZTE4OWNhNjU4YzUxYzQyZTkwN2NlcC0xLAorICAgIC0weDEuNGMwMDAwMDAwMDAwMXAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjgKKyAgICAweDEuMmU5Y2Q5NWJhYmEzMjVmZTYwNjcyMzNkNDQ5NmFhYWNwLTIsCisgICAgMHgxLmU5MjFkZDQyZjA5YmE4Njg2MDNlYTM3NmY2ZTJkMDEycC0xLAorICAgIDB4MS4zMzMzMzMzMzMzMzMycC0yLAorICB9LAorICB7IC8vIEVudHJ5IDU2OQorICAgIC0weDEuMmU5Y2Q5NWJhYmEzMjVmZTYwNjcyMzNkNDQ5NmFhYWNwLTIsCisgICAgMHgxLmU5MjFkZDQyZjA5YmE4Njg2MDNlYTM3NmY2ZTJkMDEycC0xLAorICAgIC0weDEuMzMzMzMzMzMzMzMzMnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzAKKyAgICAweDEuMmU5Y2Q5NWJhYmEzMzU0NzZmNTEzYWMyMjFkMDc4YzdwLTIsCisgICAgMHgxLmU5MjFkZDQyZjA5YmE2MGIyNjhiZWMxZmIwODc4YTQycC0xLAorICAgIDB4MS4zMzMzMzMzMzMzMzMzcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDU3MQorICAgIC0weDEuMmU5Y2Q5NWJhYmEzMzU0NzZmNTEzYWMyMjFkMDc4YzdwLTIsCisgICAgMHgxLmU5MjFkZDQyZjA5YmE2MGIyNjhiZWMxZmIwODc4YTQycC0xLAorICAgIC0weDEuMzMzMzMzMzMzMzMzM3AtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzIKKyAgICAweDEuMmU5Y2Q5NWJhYmEzNDQ5MDdlM2I1MjQ2ZmVmNzVkMTVwLTIsCisgICAgMHgxLmU5MjFkZDQyZjA5YmEzYWRlY2Q5MzRjODZhMGRiMjU0cC0xLAorICAgIDB4MS4zMzMzMzMzMzMzMzM0cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDU3MworICAgIC0weDEuMmU5Y2Q5NWJhYmEzNDQ5MDdlM2I1MjQ2ZmVmNzVkMTVwLTIsCisgICAgMHgxLmU5MjFkZDQyZjA5YmEzYWRlY2Q5MzRjODZhMGRiMjU0cC0xLAorICAgIC0weDEuMzMzMzMzMzMzMzMzNHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzQKKyAgICAweDEuM2ZhZWZjN2E1NDY2ZWYzMDQ1YzNmMWJlNzE2YWQ1NjhwLTEsCisgICAgMHgxLjhmZWVkYjg2YmYwZWYzMTU4ZjhhMWRjYmVmNDlkMTIzcC0xLAorICAgIDB4MS41OTQzMTdhY2M0ZWY4cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU3NQorICAgIC0weDEuM2ZhZWZjN2E1NDY2ZWYzMDQ1YzNmMWJlNzE2YWQ1NjhwLTEsCisgICAgMHgxLjhmZWVkYjg2YmYwZWYzMTU4ZjhhMWRjYmVmNDlkMTIzcC0xLAorICAgIC0weDEuNTk0MzE3YWNjNGVmOHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzYKKyAgICAweDEuM2ZhZWZjN2E1NDY2ZmJhZmJjYTAyN2I2ZThkYjhjMDRwLTEsCisgICAgMHgxLjhmZWVkYjg2YmYwZWU5MTgxN2E2NGIyOGI3OWU1MTE5cC0xLAorICAgIDB4MS41OTQzMTdhY2M0ZWY5cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU3NworICAgIC0weDEuM2ZhZWZjN2E1NDY2ZmJhZmJjYTAyN2I2ZThkYjhjMDRwLTEsCisgICAgMHgxLjhmZWVkYjg2YmYwZWU5MTgxN2E2NGIyOGI3OWU1MTE5cC0xLAorICAgIC0weDEuNTk0MzE3YWNjNGVmOXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzgKKyAgICAweDEuM2ZhZWZjN2E1NDY3MDgyZjMzN2M1ZGFmNWZmYzU2ZTJwLTEsCisgICAgMHgxLjhmZWVkYjg2YmYwZWRmMWE5ZmMyNzg4NTdmOGVkNTU5cC0xLAorICAgIDB4MS41OTQzMTdhY2M0ZWZhcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU3OQorICAgIC0weDEuM2ZhZWZjN2E1NDY3MDgyZjMzN2M1ZGFmNWZmYzU2ZTJwLTEsCisgICAgMHgxLjhmZWVkYjg2YmYwZWRmMWE5ZmMyNzg4NTdmOGVkNTU5cC0xLAorICAgIC0weDEuNTk0MzE3YWNjNGVmYXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODAKKyAgICAweDEuNjg4OGE0ZTEzNGIyZGVmNWJlYTUxZjRjZDdkNjQ3YzZwLTEsCisgICAgMHgxLjZiODk4ZmE5ZWZiNWRkNmY5ZTE3ZTM0NDJkNTliMjQxcC0xLAorICAgIDB4MS44ZmZmZmZmZmZmZmZmcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU4MQorICAgIC0weDEuNjg4OGE0ZTEzNGIyZGVmNWJlYTUxZjRjZDdkNjQ3YzZwLTEsCisgICAgMHgxLjZiODk4ZmE5ZWZiNWRkNmY5ZTE3ZTM0NDJkNTliMjQxcC0xLAorICAgIC0weDEuOGZmZmZmZmZmZmZmZnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODIKKyAgICAweDEuNjg4OGE0ZTEzNGIyZWE1MjBiMjI2ZWNhODY5NGIzYTJwLTEsCisgICAgMHgxLjZiODk4ZmE5ZWZiNWQyMmI1OGYwZDk5ZTk2MzQ5MzFhcC0xLAorICAgIDB4MS45cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU4MworICAgIC0weDEuNjg4OGE0ZTEzNGIyZWE1MjBiMjI2ZWNhODY5NGIzYTJwLTEsCisgICAgMHgxLjZiODk4ZmE5ZWZiNWQyMmI1OGYwZDk5ZTk2MzQ5MzFhcC0xLAorICAgIC0weDEuOXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODQKKyAgICAweDEuNjg4OGE0ZTEzNGIyZjVhZTU3OWZiZTQ4MzRmOGZkNTVwLTEsCisgICAgMHgxLjZiODk4ZmE5ZWZiNWM2ZTcxM2M5Y2ZmOGZlYjQ5MThmcC0xLAorICAgIDB4MS45MDAwMDAwMDAwMDAxcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU4NQorICAgIC0weDEuNjg4OGE0ZTEzNGIyZjVhZTU3OWZiZTQ4MzRmOGZkNTVwLTEsCisgICAgMHgxLjZiODk4ZmE5ZWZiNWM2ZTcxM2M5Y2ZmOGZlYjQ5MThmcC0xLAorICAgIC0weDEuOTAwMDAwMDAwMDAwMXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODYKKyAgICAtMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjBwLTEwNzQsCisgIH0sCisgIHsgLy8gRW50cnkgNTg3CisgICAgMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMTA3NCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODgKKyAgICAtMC4wLAorICAgIDB4MS5wMCwKKyAgICAtMC4wLAorICB9LAorICB7IC8vIEVudHJ5IDU4OQorICAgIDAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjBwLTEwNzQsCisgIH0sCisgIHsgLy8gRW50cnkgNTkwCisgICAgLTAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wcC0xMDc0LAorICB9LAorICB7IC8vIEVudHJ5IDU5MQorICAgIDB4MS45MWY2NWYxMGRkODEyYTBiOTVmZjcxODcxYWI0ODIwN3AtNSwKKyAgICAweDEuZmY2MjFlMzc5NmQ3ZGU0YThhYjdkN2NkODQ4OGY0OTlwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgNTkyCisgICAgLTB4MS45MWY2NWYxMGRkODEyYTBiOTVmZjcxODcxYWI0ODIwN3AtNSwKKyAgICAweDEuZmY2MjFlMzc5NmQ3ZGU0YThhYjdkN2NkODQ4OGY0OTlwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cC01LAorICB9LAorICB7IC8vIEVudHJ5IDU5MworICAgIDB4MS45MWY2NWYxMGRkODEzYTA2YTZmMTJlM2RkOWE2YTQxZXAtNSwKKyAgICAweDEuZmY2MjFlMzc5NmQ3ZGUzZGZiMDRkZjQ2OTg3ZjY0NTBwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgNTk0CisgICAgLTB4MS45MWY2NWYxMGRkODEzYTA2YTZmMTJlM2RkOWE2YTQxZXAtNSwKKyAgICAweDEuZmY2MjFlMzc5NmQ3ZGUzZGZiMDRkZjQ2OTg3ZjY0NTBwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cC01LAorICB9LAorICB7IC8vIEVudHJ5IDU5NQorICAgIDB4MS45MWY2NWYxMGRkODE0YTAxYjdlMmVhZjQ5ODk4NjFiN3AtNSwKKyAgICAweDEuZmY2MjFlMzc5NmQ3ZGUzMTZiNTFlNmJmYWM3NTU0MmZwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgNTk2CisgICAgLTB4MS45MWY2NWYxMGRkODE0YTAxYjdlMmVhZjQ5ODk4NjFiN3AtNSwKKyAgICAweDEuZmY2MjFlMzc5NmQ3ZGUzMTZiNTFlNmJmYWM3NTU0MmZwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cC01LAorICB9LAorICB7IC8vIEVudHJ5IDU5NworICAgIDB4MS45MTdhNmJjMjliNDJhOWNkMmU3ODdlZTAwY2E4ZjhlM3AtNCwKKyAgICAweDEuZmQ4OGRhM2QxMjUyNWEyMDg4OThjZjU4ZGVkMGVlYjNwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgNTk4CisgICAgLTB4MS45MTdhNmJjMjliNDJhOWNkMmU3ODdlZTAwY2E4ZjhlM3AtNCwKKyAgICAweDEuZmQ4OGRhM2QxMjUyNWEyMDg4OThjZjU4ZGVkMGVlYjNwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cC00LAorICB9LAorICB7IC8vIEVudHJ5IDU5OQorICAgIDB4MS45MTdhNmJjMjliNDJiOWI5NzU0YTY3NzI5Zjc5MzQ2YnAtNCwKKyAgICAweDEuZmQ4OGRhM2QxMjUyNTllZTU5NGI1NzA1NzY3YWI2NDlwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgNjAwCisgICAgLTB4MS45MTdhNmJjMjliNDJiOWI5NzU0YTY3NzI5Zjc5MzQ2YnAtNCwKKyAgICAweDEuZmQ4OGRhM2QxMjUyNTllZTU5NGI1NzA1NzY3YWI2NDlwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cC00LAorICB9LAorICB7IC8vIEVudHJ5IDYwMQorICAgIDB4MS45MTdhNmJjMjliNDJjOWE1YmMxYzUwMDUzMjQ3ZGU3OHAtNCwKKyAgICAweDEuZmQ4OGRhM2QxMjUyNTliYzI5ZmRkZWIyMGUyMjgwNTZwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgNjAyCisgICAgLTB4MS45MTdhNmJjMjliNDJjOWE1YmMxYzUwMDUzMjQ3ZGU3OHAtNCwKKyAgICAweDEuZmQ4OGRhM2QxMjUyNTliYzI5ZmRkZWIyMGUyMjgwNTZwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cC00LAorICB9LAorICB7IC8vIEVudHJ5IDYwMworICAgIDB4MS44ZjhiODNjNjlhNjA5NzVmOTg0NTM4ODZmOTUzYTBlNXAtMywKKyAgICAweDEuZjYyOTdjZmY3NWNiMDNhYjFmY2VkNjMzN2UzNWEyNDVwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNjA0CisgICAgLTB4MS44ZjhiODNjNjlhNjA5NzVmOTg0NTM4ODZmOTUzYTBlNXAtMywKKyAgICAweDEuZjYyOTdjZmY3NWNiMDNhYjFmY2VkNjMzN2UzNWEyNDVwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cC0zLAorICB9LAorICB7IC8vIEVudHJ5IDYwNQorICAgIDB4MS44ZjhiODNjNjlhNjBhNzEwZTQyZDM0MzU1MTZkZGFjY3AtMywKKyAgICAweDEuZjYyOTdjZmY3NWNiMDJlMzVhMGNmMmU2NGRlNjA2MjZwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNjA2CisgICAgLTB4MS44ZjhiODNjNjlhNjBhNzEwZTQyZDM0MzU1MTZkZGFjY3AtMywKKyAgICAweDEuZjYyOTdjZmY3NWNiMDJlMzVhMGNmMmU2NGRlNjA2MjZwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cC0zLAorICB9LAorICB7IC8vIEVudHJ5IDYwNworICAgIDB4MS44ZjhiODNjNjlhNjBiNmMyMzAxNTJmZTNhOTgxZDY4NnAtMywKKyAgICAweDEuZjYyOTdjZmY3NWNiMDIxYjk0NGIwZjk5MWQ4ZTkxNjFwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNjA4CisgICAgLTB4MS44ZjhiODNjNjlhNjBiNmMyMzAxNTJmZTNhOTgxZDY4NnAtMywKKyAgICAweDEuZjYyOTdjZmY3NWNiMDIxYjk0NGIwZjk5MWQ4ZTkxNjFwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cC0zLAorICB9LAorICB7IC8vIEVudHJ5IDYwOQorICAgIDB4MS44N2RlMmE2YWVhOTYxYTNlOWRlZGVhNTdmZTdlNjUxNHAtMiwKKyAgICAweDEuZDkwNmJjZjMyOGQ0NjY3MmQ5YzFhODY1ODk4ZTU5NjZwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNjEwCisgICAgLTB4MS44N2RlMmE2YWVhOTYxYTNlOWRlZGVhNTdmZTdlNjUxNHAtMiwKKyAgICAweDEuZDkwNmJjZjMyOGQ0NjY3MmQ5YzFhODY1ODk4ZTU5NjZwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDYxMQorICAgIDB4MS44N2RlMmE2YWVhOTYyOTA2ZDNkNTgzOWVhMWE1YmNmMHAtMiwKKyAgICAweDEuZDkwNmJjZjMyOGQ0NjM2MzFkNmNkMjkwNWQ0YjEzZjVwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNjEyCisgICAgLTB4MS44N2RlMmE2YWVhOTYyOTA2ZDNkNTgzOWVhMWE1YmNmMHAtMiwKKyAgICAweDEuZDkwNmJjZjMyOGQ0NjM2MzFkNmNkMjkwNWQ0YjEzZjVwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDYxMworICAgIDB4MS44N2RlMmE2YWVhOTYzN2NmMDliZDFjZTU0NGI0OTZlYXAtMiwKKyAgICAweDEuZDkwNmJjZjMyOGQ0NjA1MzYxMTdmY2JiMzBlYTNlMTdwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNjE0CisgICAgLTB4MS44N2RlMmE2YWVhOTYzN2NmMDliZDFjZTU0NGI0OTZlYXAtMiwKKyAgICAweDEuZDkwNmJjZjMyOGQ0NjA1MzYxMTdmY2JiMzBlYTNlMTdwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDYxNQorICAgIDB4MS42YTA5ZTY2N2YzYmNiYTk5YWZiMDEzNTcyOTQ1Nzg3NHAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjZDc3N2I2NDYxMzc2YWI1MjMyNDJwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNjE2CisgICAgLTB4MS42YTA5ZTY2N2YzYmNiYTk5YWZiMDEzNTcyOTQ1Nzg3NHAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjZDc3N2I2NDYxMzc2YWI1MjMyNDJwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDYxNworICAgIDB4MS42YTA5ZTY2N2YzYmNjNWU5ZmVlMzUyZjUwZmQzZjRlOXAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjY2MyNzY3MTJkM2Q4YzU1MDIzODdwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNjE4CisgICAgLTB4MS42YTA5ZTY2N2YzYmNjNWU5ZmVlMzUyZjUwZmQzZjRlOXAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjY2MyNzY3MTJkM2Q4YzU1MDIzODdwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDYxOQorICAgIDB4MS42YTA5ZTY2N2YzYmNkMTNhNGUxNjkyOTJmNjA3ZWVlNXAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjYzBkNzE3ZGY5NDNhZGVmMzkyNTNwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNjIwCisgICAgLTB4MS42YTA5ZTY2N2YzYmNkMTNhNGUxNjkyOTJmNjA3ZWVlNXAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjYzBkNzE3ZGY5NDNhZGVmMzkyNTNwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDYyMQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTVmNTZmZnAtMSwKKyAgICAweDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5YzBiOGI1MGJwLTUyLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNjIyCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTVmNTZmZnAtMSwKKyAgICAweDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5YzBiOGI1MGJwLTUyLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AwLAorICB9LAorICB7IC8vIEVudHJ5IDYyMworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODgzMXAtMSwKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQ0MTlmYThwLTU0LAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNjI0CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODgzMXAtMSwKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQ0MTlmYThwLTU0LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAwLAorICB9LAorICB7IC8vIEVudHJ5IDYyNQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjc5Yjk2M3AtMSwKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzdkYmNmYmEwcC01MywKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAwLAorICB9LAorICB7IC8vIEVudHJ5IDYyNgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY3OWI5NjNwLTEsCisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM3ZGJjZmJhMHAtNTMsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNjI3CisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OWJmYWVlZDQycC01MSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5N2Q1YmZmcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjI4CisgICAgLTB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDliZmFlZWQ0MnAtNTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTdkNWJmZnAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjkKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQzNmUyZWRwLTUzLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiMjIwYzVwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzAKKyAgICAtMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzA0MzZlMmVkcC01MywKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYjIyMGM1cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDYzMQorICAgIC0weDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjZjN2Q1YmJjNWNwLTUyLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmRlNmU1OGNwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzIKKyAgICAweDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjZjN2Q1YmJjNWNwLTUyLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmRlNmU1OGNwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjMzCisgICAgLTB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDliYjg3Y2UxYnAtNTAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU1ZjU2ZmZlcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjM0CisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OWJiODdjZTFicC01MCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTVmNTZmZmVwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjM1CisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDBiZjAwM3AtNTIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzg4MzE3cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjM2CisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzA0MGJmMDAzcC01MiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODgzMTdwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjM3CisgICAgMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzdiZDZiZjRkcC01MSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjc5Yjk2MzFwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzgKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzdiZDZiZjRkcC01MSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjc5Yjk2MzFwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjM5CisgICAgLTB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDlhYWViNTE4MnAtNDksCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjk3ZDViZmY4cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjQwCisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OWFhZWI1MTgycC00OSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTdkNWJmZjhwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjQxCisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwMzYwMjQ1Y3AtNTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiMjIwYzVlcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjQyCisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzAzNjAyNDVjcC01MSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIyMjBjNWVwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjQzCisgICAgMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2Yzc1YzJjYjBlcC01MCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZGU2ZTU4YzRwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDQKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2Yzc1YzJjYjBlcC01MCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZGU2ZTU4YzRwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjQ1CisgICAgLTB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDk2ODc5NWYxY3AtNDgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTVmNTZmZmUxcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNjQ2CisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OTY4Nzk1ZjFjcC00OCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNWY1NmZmZTFwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNjQ3CisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwMGIwZjViZnAtNTAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODgzMTdhcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNjQ4CisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzAwYjBmNWJmcC01MCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4ODMxN2FwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNjQ5CisgICAgMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzVkNzJmYTExcC00OSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNzliOTYzMTNwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTAKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzVkNzJmYTExcC00OSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNzliOTYzMTNwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNjUxCisgICAgLTB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDg1ZWIxOTU4NHAtNDcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTdkNWJmZjg3cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDUsCisgIH0sCisgIHsgLy8gRW50cnkgNjUyCisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0ODVlYjE5NTg0cC00NywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5N2Q1YmZmODdwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDUsCisgIH0sCisgIHsgLy8gRW50cnkgNjUzCisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjZmNWY0M2I0Y3AtNDksCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIyMjBjNWU5cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDUsCisgIH0sCisgIHsgLy8gRW50cnkgNjU0CisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNmY1ZjQzYjRjcC00OSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYjIyMGM1ZTlwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDUsCisgIH0sCisgIHsgLy8gRW50cnkgNjU1CisgICAgMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YmZjMzNiNjFmcC00OCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkZTZlNThjNGNwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTYKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YmZjMzNiNjFmcC00OCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkZTZlNThjNGNwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDUsCisgIH0sCisgIHsgLy8gRW50cnkgNjU3CisgICAgLTB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDQzNzkyNmYyNXAtNDYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNWY1NmZmZTFkcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDYsCisgIH0sCisgIHsgLy8gRW50cnkgNjU4CisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0NDM3OTI2ZjI1cC00NiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU1ZjU2ZmZlMWRwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDYsCisgIH0sCisgIHsgLy8gRW50cnkgNjU5CisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjZjYjAxNTE3ZHAtNDgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4ODMxN2E3cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDYsCisgIH0sCisgIHsgLy8gRW50cnkgNjYwCisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNmNiMDE1MTdkcC00OCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzg4MzE3YTdwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDYsCisgIH0sCisgIHsgLy8gRW50cnkgNjYxCisgICAgMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YTc3MzZhNjU4cC00NywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY3OWI5NjMxMzFwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjIKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YTc3MzZhNjU4cC00NywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY3OWI5NjMxMzFwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDYsCisgIH0sCisgIHsgLy8gRW50cnkgNjYzCisgICAgLTB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwMzM5YjE1ZDVhYXAtNDUsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5N2Q1YmZmODc0cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDcsCisgIH0sCisgIHsgLy8gRW50cnkgNjY0CisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjAzMzliMTVkNWFhcC00NSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjk3ZDViZmY4NzRwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDcsCisgIH0sCisgIHsgLy8gRW50cnkgNjY1CisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjYxZjM1YWE0M3AtNDcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYjIyMGM1ZTlkcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDcsCisgIH0sCisgIHsgLy8gRW50cnkgNjY2CisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNjFmMzVhYTQzcC00NywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiMjIwYzVlOWRwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDcsCisgIH0sCisgIHsgLy8gRW50cnkgNjY3CisgICAgMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2NDYzNDI2NzNhcC00NiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmRlNmU1OGM0YzZwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjgKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2NDYzNDI2NzNhcC00NiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmRlNmU1OGM0YzZwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDcsCisgIH0sCisgIHsgLy8gRW50cnkgNjY5CisgICAgMHgxLjZhMDllNjY3ZjNiY2ZmYTYwYzBmNTMzNDBmZDI0OTA0cC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjOTI2YjU5ZTZkMzk5YmQxYjkwNmNwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDFwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzAKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2ZmYTYwYzBmNTMzNDBmZDI0OTA0cC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjOTI2YjU5ZTZkMzk5YmQxYjkwNmNwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQxcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjcxCisgICAgMHgxLjZhMDllNjY3ZjNiY2QyNjRjZjQyNTRiYzdhYjBjOWZhcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjYmZhYzk2YjNkMjExNWEzYzNlMjFwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzIKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2QyNjRjZjQyNTRiYzdhYjBjOWZhcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjYmZhYzk2YjNkMjExNWEzYzNlMjFwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQycDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjczCisgICAgMHgxLjZhMDllNjY3ZjNiY2E1MjM5Mjc1NTY0NGRmZTcyMzU3cC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjZWNlZGQzODBkMDg4ZjFiNGM0M2NwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDNwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzQKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2E1MjM5Mjc1NTY0NGRmZTcyMzU3cC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjZWNlZGQzODBkMDg4ZjFiNGM0M2NwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQzcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjc1CisgICAgLTB4MS42YTA5ZTY2N2YzYmM4YzJkZjFiNzUyYjYwNmEwYTQ3MnAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDA1ZTM3NDNlZDQxN2M0NGZiYTQ2cC0xLAorICAgIDB4MS5mNmE3YTI5NTUzODVkcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjc2CisgICAgMHgxLjZhMDllNjY3ZjNiYzhjMmRmMWI3NTJiNjA2YTBhNDcycC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JkMDVlMzc0M2VkNDE3YzQ0ZmJhNDZwLTEsCisgICAgLTB4MS5mNmE3YTI5NTUzODVkcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjc3CisgICAgLTB4MS42YTA5ZTY2N2YzYmNiOTZmMmU4NDUxMmRhNDg4ZmYyZHAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2Q4YTIzNzcxZDVhMDJmZjVlODQzcC0xLAorICAgIDB4MS5mNmE3YTI5NTUzODVlcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjc4CisgICAgMHgxLjZhMDllNjY3ZjNiY2I5NmYyZTg0NTEyZGE0ODhmZjJkcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjZDhhMjM3NzFkNWEwMmZmNWU4NDNwLTEsCisgICAgLTB4MS5mNmE3YTI5NTUzODVlcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjc5CisgICAgLTB4MS42YTA5ZTY2N2YzYmNlNmIwNmI1MTRmYTUzY2M5MzI0ZnAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2FiNjBmYWE0ZDcyODk1ZjNlZWE1cC0xLAorICAgIDB4MS5mNmE3YTI5NTUzODVmcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjgwCisgICAgMHgxLjZhMDllNjY3ZjNiY2U2YjA2YjUxNGZhNTNjYzkzMjRmcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjYWI2MGZhYTRkNzI4OTVmM2VlYTVwLTEsCisgICAgLTB4MS5mNmE3YTI5NTUzODVmcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjgxCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlOGIyN2I2YXAtMSwKKyAgICAtMHgxLjM0ZjI3Mjk5M2QxNDE0YTJiMzliZDgzNzRjMWQxNjMxcC01MCwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMXAyLAorICB9LAorICB7IC8vIEVudHJ5IDY4MgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlOGIyN2I2YXAtMSwKKyAgICAtMHgxLjM0ZjI3Mjk5M2QxNDE0YTJiMzliZDgzNzRjMWQxNjMxcC01MCwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDFwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODMKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNTBjOWJkcC0xLAorICAgIC0weDEuYTc5Mzk0YzllOGEwYTUxNTljZGVjMWJhODYzNzdjOTJwLTUzLAorICAgIDB4MS4yZDk3YzdmMzMyMWQycDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjg0CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNTBjOWJkcC0xLAorICAgIC0weDEuYTc5Mzk0YzllOGEwYTUxNTljZGVjMWJhODYzNzdjOTJwLTUzLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMnAyLAorICB9LAorICB7IC8vIEVudHJ5IDY4NQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjVlZjE4MTBwLTEsCisgICAgMHgxLjk2MWIxYWNkODVkN2Q2YmE5OGM4NGY5MTViYmNiYzZjcC01MSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkM3AyLAorICB9LAorICB7IC8vIEVudHJ5IDY4NgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNWVmMTgxMHAtMSwKKyAgICAweDEuOTYxYjFhY2Q4NWQ3ZDZiYTk4Yzg0ZjkxNWJiY2JjNmNwLTUxLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkM3AyLAorICB9LAorICB7IC8vIEVudHJ5IDY4NworICAgIC0weDEuNmEwOWU2NjdmM2JkMzk2MjE5M2I1MzczMDY5YmEwYzJwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiYzU4YWY0Y2JhZDM1YWFiYjIwMGY0cC0xLAorICAgIDB4MS41ZmRiYmU5YmJhNzc0cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjg4CisgICAgMHgxLjZhMDllNjY3ZjNiZDM5NjIxOTNiNTM3MzA2OWJhMGMycC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmM1OGFmNGNiYWQzNWFhYmIyMDBmNHAtMSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzRwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODkKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2RlZGY5ZmExNTY4M2U1MWY3ZTYwcC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmNiMzMxYzY1NGQwNDllZWJhMzgwZnAtMSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NXAyLAorICB9LAorICB7IC8vIEVudHJ5IDY5MAorICAgIDB4MS42YTA5ZTY2N2YzYmNkZWRmOWZhMTU2ODNlNTFmN2U2MHAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjYjMzMWM2NTRkMDQ5ZWViYTM4MGZwLTEsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc1cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjkxCisgICAgLTB4MS42YTA5ZTY2N2YzYmM4NDVkMjYwNzU5OTRhZDAyYmQ5OHAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JkMGRiNDNmZWVjZDM5MWIyMWQwYzRwLTEsCisgICAgMHgxLjVmZGJiZTliYmE3NzZwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTIKKyAgICAweDEuNmEwOWU2NjdmM2JjODQ1ZDI2MDc1OTk0YWQwMmJkOThwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiZDBkYjQzZmVlY2QzOTFiMjFkMGM0cC0xLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NnAyLAorICB9LAorICB7IC8vIEVudHJ5IDY5MworICAgIDB4MS42YTA5ZTY2N2YzYmM1MjcxZTQ4YjUyNzZmNDM4NTc5ZnAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JkM2Y5ZjgxNmFkNDU2YmExYTU0YTlwLTEsCisgICAgMHgxLmM0NjNhYmVjY2IyYmFwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTQKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzUyNzFlNDhiNTI3NmY0Mzg1NzlmcC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmQzZjlmODE2YWQ0NTZiYTFhNTRhOXAtMSwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmFwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTUKKyAgICAweDEuNmEwOWU2NjdmM2JjYWNmNDVlMjU0ZjY2MzhjZmU4YzZwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2U1MWQwN2QwZDc2NzlhMmQ4YzUzcC0xLAorICAgIDB4MS5jNDYzYWJlY2NiMmJicDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjk2CisgICAgLTB4MS42YTA5ZTY2N2YzYmNhY2Y0NWUyNTRmNjYzOGNmZThjNnAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjZTUxZDA3ZDBkNzY3OWEyZDhjNTNwLTEsCisgICAgLTB4MS5jNDYzYWJlY2NiMmJicDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjk3CisgICAgMHgxLjZhMDllNjY3ZjNiZDA3NzZkN2JmNGM1NTY2YzZkYjg3cC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmM4YTlhOGUzNmRhNzg2M2EwMjU5N3AtMSwKKyAgICAweDEuYzQ2M2FiZWNjYjJiY3AyLAorICB9LAorICB7IC8vIEVudHJ5IDY5OAorICAgIC0weDEuNmEwOWU2NjdmM2JkMDc3NmQ3YmY0YzU1NjZjNmRiODdwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiYzhhOWE4ZTM2ZGE3ODYzYTAyNTk3cC0xLAorICAgIC0weDEuYzQ2M2FiZWNjYjJiY3AyLAorICB9LAorICB7IC8vIEVudHJ5IDY5OQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMzExNzRmNXAtMSwKKyAgICAweDEuNTgzZWJlZmY2NWNjMjI2NDgwYWU2ODVjMmFkOWFmZGFwLTUwLAorICAgIDB4MS5mNmE3YTI5NTUzODVkcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNzAwCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMzExNzRmNXAtMSwKKyAgICAweDEuNTgzZWJlZmY2NWNjMjI2NDgwYWU2ODVjMmFkOWFmZGFwLTUwLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZHAyLAorICB9LAorICB7IC8vIEVudHJ5IDcwMQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTE5NGNkNHAtMSwKKyAgICAweDEuNjBmYWZiZmQ5NzMwODk5MjAyYjlhMTcwYzRlNmE4NDlwLTUyLAorICAgIDB4MS5mNmE3YTI5NTUzODVlcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNzAyCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTE5NGNkNHAtMSwKKyAgICAweDEuNjBmYWZiZmQ5NzMwODk5MjAyYjlhMTcwYzRlNmE4NDlwLTUyLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZXAyLAorICB9LAorICB7IC8vIEVudHJ5IDcwMworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTIxMjRiNHAtMSwKKyAgICAtMHgxLjRmODI4MjAxMzQ2N2JiMzZmZWEzMmY0NzliZDQ4ZjRhcC01MSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZnAyLAorICB9LAorICB7IC8vIEVudHJ5IDcwNAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjkyMTI0YjRwLTEsCisgICAgLTB4MS40ZjgyODIwMTM0NjdiYjM2ZmVhMzJmNDc5YmQ0OGY0YXAtNTEsCisgICAgLTB4MS5mNmE3YTI5NTUzODVmcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNzA1CisgICAgMHgxLjZhMDllNjY3ZjNiZGZhZTFkY2NlNGYxODY2NTY4MWM2cC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JiOTcyZjg5MjdkN2I0NmM3Mzc0ODVwLTEsCisgICAgMHgxLjE0NzVjYzllZWRlZmZwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDYKKyAgICAtMHgxLjZhMDllNjY3ZjNiZGZhZTFkY2NlNGYxODY2NTY4MWM2cC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JiOTcyZjg5MjdkN2I0NmM3Mzc0ODVwLTEsCisgICAgLTB4MS4xNDc1Y2M5ZWVkZWZmcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzA3CisgICAgMHgxLjZhMDllNjY3ZjNiZDQ1ZGNlOTlhNTUzYTZkN2Q4MDY1cC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjNGMzNDdjNWJkMTkzM2NhMzI2MWZwLTEsCisgICAgMHgxLjE0NzVjYzllZWRmcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzA4CisgICAgLTB4MS42YTA5ZTY2N2YzYmQ0NWRjZTk5YTU1M2E2ZDdkODA2NXAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzRjMzQ3YzViZDE5MzNjYTMyNjFmcC0xLAorICAgIC0weDEuMTQ3NWNjOWVlZGZwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDkKKyAgICAweDEuNmEwOWU2NjdmM2JjOTBkN2Y2NjY1YjVjMWEyMjA1NmFwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmQwMTM5NmY4ZmNiNzFiMjUwNWUxZnAtMSwKKyAgICAweDEuMTQ3NWNjOWVlZGYwMXAzLAorICB9LAorICB7IC8vIEVudHJ5IDcxMAorICAgIC0weDEuNmEwOWU2NjdmM2JjOTBkN2Y2NjY1YjVjMWEyMjA1NmFwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmQwMTM5NmY4ZmNiNzFiMjUwNWUxZnAtMSwKKyAgICAtMHgxLjE0NzVjYzllZWRmMDFwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTEKKyAgICAweDEuMzRmMjcyOTkzZDE0MTRhMmIzOWJkODM3M2UwZDZiOTRwLTQ5LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYTJjOWVkYThwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDFwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTIKKyAgICAtMHgxLjM0ZjI3Mjk5M2QxNDE0YTJiMzliZDgzNzNlMGQ2Yjk0cC00OSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmEyYzllZGE4cC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMXAzLAorICB9LAorICB7IC8vIEVudHJ5IDcxMworICAgIDB4MS5hNzkzOTRjOWU4YTBhNTE1OWNkZWMxYmE4NWE2ODhiZHAtNTIsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZDQzMjZmNXAtMSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMnAzLAorICB9LAorICB7IC8vIEVudHJ5IDcxNAorICAgIC0weDEuYTc5Mzk0YzllOGEwYTUxNTljZGVjMWJhODVhNjg4YmRwLTUyLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmQ0MzI2ZjVwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQycDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzE1CisgICAgLTB4MS45NjFiMWFjZDg1ZDdkNmJhOThjODRmOTE1M2MwY2MxNnAtNTAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkN2JjNjA0MXAtMSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkM3AzLAorICB9LAorICB7IC8vIEVudHJ5IDcxNgorICAgIDB4MS45NjFiMWFjZDg1ZDdkNmJhOThjODRmOTE1M2MwY2MxNnAtNTAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkN2JjNjA0MXAtMSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDNwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTcKKyAgICAtMHgxLjZhMDllNjY3ZjNiYjkwZjIyMGY4NTZkMGIxYTQwNmMzcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JlMDExZjQ0ZmRjZmZjMTY3ZjcxNDBwLTEsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTJwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTgKKyAgICAweDEuNmEwOWU2NjdmM2JiOTBmMjIwZjg1NmQwYjFhNDA2YzNwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmUwMTFmNDRmZGNmZmMxNjdmNzE0MHAtMSwKKyAgICAtMHgxLjQ2YjljMzQ3NzY0YTJwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTkKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzQ1ZjcxNDJjNTBhZjg0ZjI2Yzc1cC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JkNGMxYTUxYzlkNjFlMjBjNTIzZjdwLTEsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTNwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjAKKyAgICAweDEuNmEwOWU2NjdmM2JjNDVmNzE0MmM1MGFmODRmMjZjNzVwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmQ0YzFhNTFjOWQ2MWUyMGM1MjNmN3AtMSwKKyAgICAtMHgxLjQ2YjljMzQ3NzY0YTNwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjEKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2ZhZmMwNzYwNGE4ZGZkYmU1ODhkcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjOTcxNTVlOTVkYzNmZDA4ODVkMTRwLTEsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjIKKyAgICAweDEuNmEwOWU2NjdmM2JjZmFmYzA3NjA0YThkZmRiZTU4OGRwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmM5NzE1NWU5NWRjM2ZkMDg4NWQxNHAtMSwKKyAgICAtMHgxLjQ2YjljMzQ3NzY0YTRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjMKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjlkNjM0ZTlmcC0xLAorICAgIC0weDEuM2RjNTg1YjJjNzQyMTgxMzI2ZTA3YzQwNzQ4ODczYmJwLTQ5LAorICAgIDB4MS41ZmRiYmU5YmJhNzc0cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzI0CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjlkNjM0ZTlmcC0xLAorICAgIC0weDEuM2RjNTg1YjJjNzQyMTgxMzI2ZTA3YzQwNzQ4ODczYmJwLTQ5LAorICAgIC0weDEuNWZkYmJlOWJiYTc3NHAzLAorICB9LAorICB7IC8vIEVudHJ5IDcyNQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmM0NjExNzhwLTEsCisgICAgLTB4MS5lZTJjMmQ5NjNhMTBjMDk5MzcwM2UyMDQ0NjQ2MzMwMXAtNTIsCisgICAgMHgxLjVmZGJiZTliYmE3NzVwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmM0NjExNzhwLTEsCisgICAgLTB4MS5lZTJjMmQ5NjNhMTBjMDk5MzcwM2UyMDQ0NjQ2MzMwMXAtNTIsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc1cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzI3CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkYjI4ZDQ1MXAtMSwKKyAgICAweDEuODQ3NGY0OWE3MTdiY2ZkOWIyM2YwNzdlZTRkMDkwY2ZwLTUwLAorICAgIDB4MS41ZmRiYmU5YmJhNzc2cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzI4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmRiMjhkNDUxcC0xLAorICAgIDB4MS44NDc0ZjQ5YTcxN2JjZmQ5YjIzZjA3N2VlNGQwOTBjZnAtNTAsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc2cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzI5CisgICAgLTB4MS42YTA5ZTY2N2YzYmUwNzVjYWQyZDUwZGZjNjhjZDg4ZnAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JiOGFiNGI4YzhkNWVjZjZiOTEwZDZwLTEsCisgICAgMHgxLjc4ZmRiOWVmZmVhNDVwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzAKKyAgICAweDEuNmEwOWU2NjdmM2JlMDc1Y2FkMmQ1MGRmYzY4Y2Q4OGZwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiYjhhYjRiOGM4ZDVlY2Y2YjkxMGQ2cC0xLAorICAgIC0weDEuNzhmZGI5ZWZmZWE0NXAzLAorICB9LAorICB7IC8vIEVudHJ5IDczMQorICAgIC0weDEuNmEwOWU2NjdmM2JkNTI1N2I5Zjk1NzAxZDNmMTNmNWRwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiYzNmYjlhYmZjY2ZjYmNkMjYyYWEwcC0xLAorICAgIDB4MS43OGZkYjllZmZlYTQ2cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzMyCisgICAgMHgxLjZhMDllNjY3ZjNiZDUyNTdiOWY5NTcwMWQzZjEzZjVkcC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmMzZmI5YWJmY2NmY2JjZDI2MmFhMHAtMSwKKyAgICAtMHgxLjc4ZmRiOWVmZmVhNDZwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzMKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzlkNTJjNmM1NWQyMzg2ZDMyYzkycC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmNmNGJlOWYzMGM5YWE0OTEwY2FjZnAtMSwKKyAgICAweDEuNzhmZGI5ZWZmZWE0N3AzLAorICB9LAorICB7IC8vIEVudHJ5IDczNAorICAgIDB4MS42YTA5ZTY2N2YzYmM5ZDUyYzZjNTVkMjM4NmQzMmM5MnAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjZjRiZTlmMzBjOWFhNDkxMGNhY2ZwLTEsCisgICAgLTB4MS43OGZkYjllZmZlYTQ3cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzM1CisgICAgMHgxLjZhMDllNjY3ZjNiYjg0Nzc1MDk5NTUwOTNiYjI5MmJlcC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmUwZDlhMTU1Y2QxYzM3NjdlYjdiM3AtMSwKKyAgICAweDEuYWI0MWIwOTg4NmZlOHAzLAorICB9LAorICB7IC8vIEVudHJ5IDczNgorICAgIC0weDEuNmEwOWU2NjdmM2JiODQ3NzUwOTk1NTA5M2JiMjkyYmVwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiZTBkOWExNTVjZDFjMzc2N2ViN2IzcC0xLAorICAgIC0weDEuYWI0MWIwOTg4NmZlOHAzLAorICB9LAorICB7IC8vIEVudHJ5IDczNworICAgIDB4MS42YTA5ZTY2N2YzYmMzOTdjNDNjZDRlZTgxNTNlNjBhMHAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JkNTg5NTIyMjhkN2U1ODcwMWQyOTlwLTEsCisgICAgMHgxLmFiNDFiMDk4ODZmZTlwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzgKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzM5N2M0M2NkNGVlODE1M2U2MGEwcC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmQ1ODk1MjIyOGQ3ZTU4NzAxZDI5OXAtMSwKKyAgICAtMHgxLmFiNDFiMDk4ODZmZTlwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzkKKyAgICAweDEuNmEwOWU2NjdmM2JjZWU4MTM3MDE0OGM2OTQ0N2I0ZTdwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2EzOTAyZWY0ZGUwNzNkMDI3M2U2cC0xLAorICAgIDB4MS5hYjQxYjA5ODg2ZmVhcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzQwCisgICAgLTB4MS42YTA5ZTY2N2YzYmNlZTgxMzcwMTQ4YzY5NDQ3YjRlN3AtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjYTM5MDJlZjRkZTA3M2QwMjczZTZwLTEsCisgICAgLTB4MS5hYjQxYjA5ODg2ZmVhcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzQxCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjkyMjE0MWI0cC0xLAorICAgIDB4MS40ZjZiYWJlNWRiOWUxZWY0MGQ2OWM0NTJlMTM1NTkxZHAtNDksCisgICAgMHgxLmM0NjNhYmVjY2IyYmFwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDIKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjkyMjE0MWI0cC0xLAorICAgIDB4MS40ZjZiYWJlNWRiOWUxZWY0MGQ2OWM0NTJlMTM1NTkxZHAtNDksCisgICAgLTB4MS5jNDYzYWJlY2NiMmJhcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzQzCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5ZDcxN2E3cC0xLAorICAgIDB4MS4zZGFlYWY5NzZlNzg3YmQwMzVhNzExNGJlMzg3YjVjM3AtNTEsCisgICAgMHgxLmM0NjNhYmVjY2IyYmJwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDQKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5ZDcxN2E3cC0xLAorICAgIDB4MS4zZGFlYWY5NzZlNzg3YmQwMzVhNzExNGJlMzg3YjVjM3AtNTEsCisgICAgLTB4MS5jNDYzYWJlY2NiMmJicDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzQ1CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUxOGNlZDlhcC0xLAorICAgIC0weDEuNjEyOGE4MzQ0OGMzYzIxN2U1MmM3NzVhMDY5OGQyNmFwLTUwLAorICAgIDB4MS5jNDYzYWJlY2NiMmJjcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzQ2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMThjZWQ5YXAtMSwKKyAgICAtMHgxLjYxMjhhODM0NDhjM2MyMTdlNTJjNzc1YTA2OThkMjZhcC01MCwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmNwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDcKKyAgICAweDEuNmEwOWU2NjdmM2JlMTNkNzdkOGM1MmE3MjY1NTBlYWNwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmI3ZTM5ZTg2OWQ0MjU4MDkwOGM3Y3AtMSwKKyAgICAweDEuZGQ4NWE3NDEwZjU4YnAzLAorICB9LAorICB7IC8vIEVudHJ5IDc0OAorICAgIC0weDEuNmEwOWU2NjdmM2JlMTNkNzdkOGM1MmE3MjY1NTBlYWNwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmI3ZTM5ZTg2OWQ0MjU4MDkwOGM3Y3AtMSwKKyAgICAtMHgxLmRkODVhNzQxMGY1OGJwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDkKKyAgICAweDEuNmEwOWU2NjdmM2JkNWVkMjhhNTg1OGM5MzlmNmRkYWFwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmMzMzNlZGI5ZGNlMDQ1ZDNiMGU3NXAtMSwKKyAgICAweDEuZGQ4NWE3NDEwZjU4Y3AzLAorICB9LAorICB7IC8vIEVudHJ5IDc1MAorICAgIC0weDEuNmEwOWU2NjdmM2JkNWVkMjhhNTg1OGM5MzlmNmRkYWFwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmMzMzNlZGI5ZGNlMDQ1ZDNiMGU3NXAtMSwKKyAgICAtMHgxLmRkODVhNzQxMGY1OGNwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTEKKyAgICAweDEuNmEwOWU2NjdmM2JjYTljZDk3MjQ1ZWVhZjMxNjMzMGVwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmNlODQzY2VkMWM3ZTJkZjYzMTZkNHAtMSwKKyAgICAweDEuZGQ4NWE3NDEwZjU4ZHAzLAorICB9LAorICB7IC8vIEVudHJ5IDc1MgorICAgIC0weDEuNmEwOWU2NjdmM2JjYTljZDk3MjQ1ZWVhZjMxNjMzMGVwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmNlODQzY2VkMWM3ZTJkZjYzMTZkNHAtMSwKKyAgICAtMHgxLmRkODVhNzQxMGY1OGRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTMKKyAgICAweDEuNTgzZWJlZmY2NWNjMjI2NDgwYWU2ODVjMTc2NWRlYzFwLTQ5LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOGM0NWQzZDRwLTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTQKKyAgICAtMHgxLjU4M2ViZWZmNjVjYzIyNjQ4MGFlNjg1YzE3NjVkZWMxcC00OSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjhjNDVkM2Q0cC0xLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZHAzLAorICB9LAorICB7IC8vIEVudHJ5IDc1NQorICAgIDB4MS42MGZhZmJmZDk3MzA4OTkyMDJiOWExNzBjMzk3MWU4NnAtNTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODY1MzM1M3AtMSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZXAzLAorICB9LAorICB7IC8vIEVudHJ5IDc1NgorICAgIC0weDEuNjBmYWZiZmQ5NzMwODk5MjAyYjlhMTcwYzM5NzFlODZwLTUxLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjg2NTMzNTNwLTEsCisgICAgLTB4MS5mNmE3YTI5NTUzODVlcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzU3CisgICAgLTB4MS40ZjgyODIwMTM0NjdiYjM2ZmVhMzJmNDc5NzUzZmU3YXAtNTAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNDg0OTJkM3AtMSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZnAzLAorICB9LAorICB7IC8vIEVudHJ5IDc1OAorICAgIDB4MS40ZjgyODIwMTM0NjdiYjM2ZmVhMzJmNDc5NzUzZmU3YXAtNTAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNDg0OTJkM3AtMSwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWZwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTkKKyAgICAtMHgxLjZhMDllNjY3ZjNiYTBkZjI5OWQyNWY4MmY2MzkyNTFmcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JmODQxZWNjMjNjNzQ1OTkwNzZhODFwLTEsCisgICAgMHgxLjA3ZTRjZWY0Y2JkOTZwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjAKKyAgICAweDEuNmEwOWU2NjdmM2JhMGRmMjk5ZDI1ZjgyZjYzOTI1MWZwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmY4NDFlY2MyM2M3NDU5OTA3NmE4MXAtMSwKKyAgICAtMHgxLjA3ZTRjZWY0Y2JkOTZwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjEKKyAgICAtMHgxLjZhMDllNjY3ZjNiYjc3ZmM4MDNhNTM0MWM1NTJmZTBmcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JlMWExNGU1YmJkMzhhZDYwZmRkN2JwLTEsCisgICAgMHgxLjA3ZTRjZWY0Y2JkOTdwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjIKKyAgICAweDEuNmEwOWU2NjdmM2JiNzdmYzgwM2E1MzQxYzU1MmZlMGZwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmUxYTE0ZTViYmQzOGFkNjBmZGQ3YnAtMSwKKyAgICAtMHgxLjA3ZTRjZWY0Y2JkOTdwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjMKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2UyMDY2NmEyNDZmZjJhNjJmMDk3cC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjYjAwYWZmNTNkZmNlYTkwZTZhMGNwLTEsCisgICAgMHgxLjA3ZTRjZWY0Y2JkOThwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjQKKyAgICAweDEuNmEwOWU2NjdmM2JjZTIwNjY2YTI0NmZmMmE2MmYwOTdwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmNiMDBhZmY1M2RmY2VhOTBlNmEwY3AtMSwKKyAgICAtMHgxLjA3ZTRjZWY0Y2JkOThwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjUKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZDI1MzFhNDNkcC0xLAorICAgIC0weDEuYjA4OGU5MGM3N2ZkMTJlYTc5Zjk4NjMxZTZmMGI3NGJwLTQ4LAorICAgIDB4MS4xNDc1Y2M5ZWVkZWZmcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzY2CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZDI1MzFhNDNkcC0xLAorICAgIC0weDEuYjA4OGU5MGM3N2ZkMTJlYTc5Zjk4NjMxZTZmMGI3NGJwLTQ4LAorICAgIC0weDEuMTQ3NWNjOWVlZGVmZnA0LAorICB9LAorICB7IC8vIEVudHJ5IDc2NworICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODY0Mzc2NTZwLTEsCisgICAgLTB4MS42MTExZDIxOGVmZmEyNWQ0ZjNmMzBjNjU0ZDdjMzZhMXAtNDksCisgICAgMHgxLjE0NzVjYzllZWRmcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzY4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjg2NDM3NjU2cC0xLAorICAgIC0weDEuNjExMWQyMThlZmZhMjVkNGYzZjMwYzY1NGQ3YzM2YTFwLTQ5LAorICAgIC0weDEuMTQ3NWNjOWVlZGZwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjkKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU3NTU0ODZmcC0xLAorICAgIDB4MS4zZGRjNWJjZTIwMGJiNDU2MTgxOWU3MzUyN2Y1YTZkN3AtNTAsCisgICAgMHgxLjE0NzVjYzllZWRmMDFwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzAKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTc1NTQ4NmZwLTEsCisgICAgMHgxLjNkZGM1YmNlMjAwYmI0NTYxODE5ZTczNTI3ZjVhNmQ3cC01MCwKKyAgICAtMHgxLjE0NzVjYzllZWRmMDFwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzEKKyAgICAtMHgxLjZhMDllNjY3ZjNiZWQ1NTc0MTFmNGU0YzExNGQ3MzU3cC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmFiY2JhMjRkNmQ4N2VjYzhmODNiNHAtMSwKKyAgICAweDEuMjEwNmNhNDkxMDA2OHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc3MgorICAgIDB4MS42YTA5ZTY2N2YzYmVkNTU3NDExZjRlNGMxMTRkNzM1N3AtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JhYmNiYTI0ZDZkODdlY2M4ZjgzYjRwLTEsCisgICAgLTB4MS4yMTA2Y2E0OTEwMDY4cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzczCisgICAgLTB4MS42YTA5ZTY2N2YzYmQ2YjRkNWFiNzVhOTA5ZjhlNWI0Y3AtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjMjZjNDBiM2VjYzNjZWNlMWQxYTBwLTEsCisgICAgMHgxLjIxMDZjYTQ5MTAwNjlwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzQKKyAgICAweDEuNmEwOWU2NjdmM2JkNmI0ZDVhYjc1YTkwOWY4ZTViNGNwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiYzI2YzQwYjNlY2MzY2VjZTFkMWEwcC0xLAorICAgIC0weDEuMjEwNmNhNDkxMDA2OXA0LAorICB9LAorICB7IC8vIEVudHJ5IDc3NQorICAgIC0weDEuNmEwOWU2NjdmM2JjMDE0Mzc0NGY2NmQzYzNjNTVjZDlwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiZDkwY2RmMWE2YmZmOWEzMmEzOTIzcC0xLAorICAgIDB4MS4yMTA2Y2E0OTEwMDZhcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzc2CisgICAgMHgxLjZhMDllNjY3ZjNiYzAxNDM3NDRmNjZkM2MzYzU1Y2Q5cC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmQ5MGNkZjFhNmJmZjlhMzJhMzkyM3AtMSwKKyAgICAtMHgxLjIxMDZjYTQ5MTAwNmFwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzcKKyAgICAtMHgxLjM0ZjI3Mjk5M2QxNDE0YTJiMzliZDgzNzA1Y2VjMTIwcC00OCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlOGIyN2I2YTJwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDFwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzgKKyAgICAweDEuMzRmMjcyOTkzZDE0MTRhMmIzOWJkODM3MDVjZWMxMjBwLTQ4LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU4YjI3YjZhMnAtMSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDFwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzkKKyAgICAtMHgxLmE3OTM5NGM5ZThhMGE1MTU5Y2RlYzFiYTgzNjJiOTY4cC01MSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjUwYzliZDRwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDJwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODAKKyAgICAweDEuYTc5Mzk0YzllOGEwYTUxNTljZGVjMWJhODM2MmI5NjhwLTUxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNTBjOWJkNHAtMSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDJwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODEKKyAgICAweDEuOTYxYjFhY2Q4NWQ3ZDZiYTk4Yzg0ZjkxMzNkMTBhYmVwLTQ5LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY1ZWYxODEwN3AtMSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkM3A0LAorICB9LAorICB7IC8vIEVudHJ5IDc4MgorICAgIC0weDEuOTYxYjFhY2Q4NWQ3ZDZiYTk4Yzg0ZjkxMzNkMTBhYmVwLTQ5LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY1ZWYxODEwN3AtMSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDNwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODMKKyAgICAweDEuNmEwOWU2NjdmM2JhMDE3N2M5NzM1ZGJiNzJmMDlmNjVwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiZjkwOTk5YzgyYzkwY2ViYWY5ZjNmcC0xLAorICAgIDB4MS4zYTI4YzU5ZDU0MzM5cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzg0CisgICAgLTB4MS42YTA5ZTY2N2YzYmEwMTc3Yzk3MzVkYmI3MmYwOWY2NXAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JmOTA5OTljODJjOTBjZWJhZjlmM2ZwLTEsCisgICAgLTB4MS4zYTI4YzU5ZDU0MzM5cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzg1CisgICAgMHgxLjZhMDllNjY3ZjNiYjZiODFhZmRiNTE3YTRlODU0OGI0cC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmUyNjhmYjYxYWQ1NTIzNTMyZTI5OHAtMSwKKyAgICAweDEuM2EyOGM1OWQ1NDMzYXA0LAorICB9LAorICB7IC8vIEVudHJ5IDc4NgorICAgIC0weDEuNmEwOWU2NjdmM2JiNmI4MWFmZGI1MTdhNGU4NTQ4YjRwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiZTI2OGZiNjFhZDU1MjM1MzJlMjk4cC0xLAorICAgIC0weDEuM2EyOGM1OWQ1NDMzYXA0LAorICB9LAorICB7IC8vIEVudHJ5IDc4NworICAgIDB4MS42YTA5ZTY2N2YzYmNkNThiOTY0MzQ1MzdjMDEwMGI5YnAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjYmM4NWNmYjJlMTk2MTRhYzNmODhwLTEsCisgICAgMHgxLjNhMjhjNTlkNTQzM2JwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODgKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2Q1OGI5NjQzNDUzN2MwMTAwYjlicC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmNiYzg1Y2ZiMmUxOTYxNGFjM2Y4OHAtMSwKKyAgICAtMHgxLjNhMjhjNTlkNTQzM2JwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODkKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkMDcxMWY0MzdwLTEsCisgICAgMHgxLmI5NWJmYzI2MDIyYjE2NWFlZDNlMmEzYjEyMzgyNDc5cC00OCwKKyAgICAweDEuNDZiOWMzNDc3NjRhMnA0LAorICB9LAorICB7IC8vIEVudHJ5IDc5MAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkMDcxMWY0MzdwLTEsCisgICAgMHgxLmI5NWJmYzI2MDIyYjE2NWFlZDNlMmEzYjEyMzgyNDc5cC00OCwKKyAgICAtMHgxLjQ2YjljMzQ3NzY0YTJwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNzljOWVjODNwLTEsCisgICAgMHgxLjcyYjdmODRjMDQ1NjJjYjVkYTdjNTQ3N2I5NTdhZGVicC00OSwKKyAgICAweDEuNDZiOWMzNDc3NjRhM3A0LAorICB9LAorICB7IC8vIEVudHJ5IDc5MgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNzljOWVjODNwLTEsCisgICAgMHgxLjcyYjdmODRjMDQ1NjJjYjVkYTdjNTQ3N2I5NTdhZGVicC00OSwKKyAgICAtMHgxLjQ2YjljMzQ3NzY0YTNwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4MWU0Y2ZwLTEsCisgICAgLTB4MS4xYTkwMGY2N2Y3NTNhNjk0NGIwNzU3MTA0OGYxY2FkMnAtNTAsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTRwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTQKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODFlNGNmcC0xLAorICAgIC0weDEuMWE5MDBmNjdmNzUzYTY5NDRiMDc1NzEwNDhmMWNhZDJwLTUwLAorICAgIC0weDEuNDZiOWMzNDc3NjRhNHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc5NQorICAgIDB4MS42YTA5ZTY2N2YzYmVlMWQyMTE3ZTUwMTM2OWZiZmZlZnAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiYWIwM2Y1NDc3ZDZiNzRmNGQ1NWQ1cC0xLAorICAgIDB4MS41MzRhYzBmMTk4NjBicDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzk2CisgICAgLTB4MS42YTA5ZTY2N2YzYmVlMWQyMTE3ZTUwMTM2OWZiZmZlZnAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiYWIwM2Y1NDc3ZDZiNzRmNGQ1NWQ1cC0xLAorICAgIC0weDEuNTM0YWMwZjE5ODYwYnA0LAorICB9LAorICB7IC8vIEVudHJ5IDc5NworICAgIDB4MS42YTA5ZTY2N2YzYmQ3N2M4MmIxNjVjNTgwNGI3Yjg0M3AtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzFhNDkzYWRmY2E3NTdjMWE3NDFmcC0xLAorICAgIDB4MS41MzRhYzBmMTk4NjBjcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzk4CisgICAgLTB4MS42YTA5ZTY2N2YzYmQ3N2M4MmIxNjVjNTgwNGI3Yjg0M3AtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzFhNDkzYWRmY2E3NTdjMWE3NDFmcC0xLAorICAgIC0weDEuNTM0YWMwZjE5ODYwY3A0LAorICB9LAorICB7IC8vIEVudHJ5IDc5OQorICAgIDB4MS42YTA5ZTY2N2YzYmMwZGJlNDRhZTY4OWIzNTY5OGEyZnAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDg0NTMyMTQ3YmUzMjNlZGRhYzAxcC0xLAorICAgIDB4MS41MzRhYzBmMTk4NjBkcDQsCisgIH0sCisgIHsgLy8gRW50cnkgODAwCisgICAgLTB4MS42YTA5ZTY2N2YzYmMwZGJlNDRhZTY4OWIzNTY5OGEyZnAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDg0NTMyMTQ3YmUzMjNlZGRhYzAxcC0xLAorICAgIC0weDEuNTM0YWMwZjE5ODYwZHA0LAorICB9LAorICB7IC8vIEVudHJ5IDgwMQorICAgIDB4MS4zZGM1ODViMmM3NDIxODEzMjZlMDdjNDAzNzU0NjRkZXAtNDgsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU3NThkM2E3Y3AtMSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NHA0LAorICB9LAorICB7IC8vIEVudHJ5IDgwMgorICAgIC0weDEuM2RjNTg1YjJjNzQyMTgxMzI2ZTA3YzQwMzc1NDY0ZGVwLTQ4LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNzU4ZDNhN2NwLTEsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc0cDQsCisgIH0sCisgIHsgLy8gRW50cnkgODAzCisgICAgMHgxLmVlMmMyZDk2M2ExMGMwOTkzNzAzZTIwNDQyYWQ3YjhkcC01MSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYxMTg0NWUxcC0xLAorICAgIDB4MS41ZmRiYmU5YmJhNzc1cDQsCisgIH0sCisgIHsgLy8gRW50cnkgODA0CisgICAgLTB4MS5lZTJjMmQ5NjNhMTBjMDk5MzcwM2UyMDQ0MmFkN2I4ZHAtNTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMTE4NDVlMXAtMSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzVwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDUKKyAgICAtMHgxLjg0NzRmNDlhNzE3YmNmZDliMjNmMDc3ZWM4ZGQxNzVicC00OSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjZjYTM1MTQ3cC0xLAorICAgIDB4MS41ZmRiYmU5YmJhNzc2cDQsCisgIH0sCisgIHsgLy8gRW50cnkgODA2CisgICAgMHgxLjg0NzRmNDlhNzE3YmNmZDliMjNmMDc3ZWM4ZGQxNzVicC00OSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjZjYTM1MTQ3cC0xLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NnA0LAorICB9LAorICB7IC8vIEVudHJ5IDgwNworICAgIC0weDEuNmEwOWU2NjdmM2I5ZjRmY2Y5MTQ1YmYzZWYzOWY5MDFwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmY5ZDE0NmNlMWNhZDQzZGU5YjM1MnAtMSwKKyAgICAweDEuNmM2Y2JjNDVkYzhkY3A0LAorICB9LAorICB7IC8vIEVudHJ5IDgwOAorICAgIDB4MS42YTA5ZTY2N2YzYjlmNGZjZjkxNDViZjNlZjM5ZjkwMXAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiZjlkMTQ2Y2UxY2FkNDNkZTliMzUycC0xLAorICAgIC0weDEuNmM2Y2JjNDVkYzhkY3A0LAorICB9LAorICB7IC8vIEVudHJ5IDgwOQorICAgIC0weDEuNmEwOWU2NjdmM2JiNWYwNmRmN2M0ZmIyZDc0OTcyYWVwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmUzMzBhODY3OWQ3MTk5M2U3YzcwOXAtMSwKKyAgICAweDEuNmM2Y2JjNDVkYzhkZHA0LAorICB9LAorICB7IC8vIEVudHJ5IDgxMAorICAgIDB4MS42YTA5ZTY2N2YzYmI1ZjA2ZGY3YzRmYjJkNzQ5NzJhZXAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiZTMzMGE4Njc5ZDcxOTkzZTdjNzA5cC0xLAorICAgIC0weDEuNmM2Y2JjNDVkYzhkZHA0LAorICB9LAorICB7IC8vIEVudHJ5IDgxMQorICAgIC0weDEuNmEwOWU2NjdmM2JjYzkxMGM1ZTQ0MzcwNTU0ZjA1ZjRwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmNjOTAwYTAxMWUzNWQ3ZmRiZjQ1OXAtMSwKKyAgICAweDEuNmM2Y2JjNDVkYzhkZXA0LAorICB9LAorICB7IC8vIEVudHJ5IDgxMgorICAgIDB4MS42YTA5ZTY2N2YzYmNjOTEwYzVlNDQzNzA1NTRmMDVmNHAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2M5MDBhMDExZTM1ZDdmZGJmNDU5cC0xLAorICAgIC0weDEuNmM2Y2JjNDVkYzhkZXA0LAorICB9LAorICB7IC8vIEVudHJ5IDgxMworICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjZTg1Njg1YmRwLTEsCisgICAgLTB4MS5jMjJmMGYzZjhjNTkxOWNiNjA4MmNlNDQzY2Y5NTAyMnAtNDgsCisgICAgMHgxLjc4ZmRiOWVmZmVhNDVwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjZTg1Njg1YmRwLTEsCisgICAgLTB4MS5jMjJmMGYzZjhjNTkxOWNiNjA4MmNlNDQzY2Y5NTAyMnAtNDgsCisgICAgLTB4MS43OGZkYjllZmZlYTQ1cDQsCisgIH0sCisgIHsgLy8gRW50cnkgODE1CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY2Y2I0YTQzZHAtMSwKKyAgICAtMHgxLjg0NWUxZTdmMThiMjMzOTZjMTA1OWM4YTI0YzI2MDljcC00OSwKKyAgICAweDEuNzhmZGI5ZWZmZWE0NnA0LAorICB9LAorICB7IC8vIEVudHJ5IDgxNgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY2Y2I0YTQzZHAtMSwKKyAgICAtMHgxLjg0NWUxZTdmMThiMjMzOTZjMTA1OWM4YTI0YzI2MDljcC00OSwKKyAgICAtMHgxLjc4ZmRiOWVmZmVhNDZwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTcKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYxMTJjMmJjcC0xLAorICAgIDB4MS5lZTg3ODYwMzlkMzczMWE0ZmJlOThkZDZkMzJmZjYyYXAtNTEsCisgICAgMHgxLjc4ZmRiOWVmZmVhNDdwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTgKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjExMmMyYmNwLTEsCisgICAgMHgxLmVlODc4NjAzOWQzNzMxYTRmYmU5OGRkNmQzMmZmNjJhcC01MSwKKyAgICAtMHgxLjc4ZmRiOWVmZmVhNDdwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTkKKyAgICAtMHgxLjZhMDllNjY3ZjNiZWVlNGNlMWRkNTFkYWMyM2M2YmRjcC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmFhM2M0ODQxOGQ0ZWZkMTlkMDc0YXAtMSwKKyAgICAweDEuODU4ZWI3OWEyMGJhZXA0LAorICB9LAorICB7IC8vIEVudHJ5IDgyMAorICAgIDB4MS42YTA5ZTY2N2YzYmVlZTRjZTFkZDUxZGFjMjNjNmJkY3AtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JhYTNjNDg0MThkNGVmZDE5ZDA3NGFwLTEsCisgICAgLTB4MS44NThlYjc5YTIwYmFlcDQsCisgIH0sCisgIHsgLy8gRW50cnkgODIxCisgICAgLTB4MS42YTA5ZTY2N2YzYmQ4NDQyZmI3NTVlMWY2OTcyZjQ4ZnAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjMGRjZTZhODBjOGFlMGFlNGY1ZjNwLTEsCisgICAgMHgxLjg1OGViNzlhMjBiYWZwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjIKKyAgICAweDEuNmEwOWU2NjdmM2JkODQ0MmZiNzU1ZTFmNjk3MmY0OGZwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiYzBkY2U2YTgwYzhhZTBhZTRmNWYzcC0xLAorICAgIC0weDEuODU4ZWI3OWEyMGJhZnA0LAorICB9LAorICB7IC8vIEVudHJ5IDgyMworICAgIC0weDEuNmEwOWU2NjdmM2JjMWEzOTE1MGQ2YTYyYTY5Zjk2ZGFwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiZDc3ZDg1MGU4YmM2YWRhMjJmZTM0cC0xLAorICAgIDB4MS44NThlYjc5YTIwYmIwcDQsCisgIH0sCisgIHsgLy8gRW50cnkgODI0CisgICAgMHgxLjZhMDllNjY3ZjNiYzFhMzkxNTBkNmE2MmE2OWY5NmRhcC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmQ3N2Q4NTBlOGJjNmFkYTIyZmUzNHAtMSwKKyAgICAtMHgxLjg1OGViNzlhMjBiYjBwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjUKKyAgICAweDEuZmE3Mjk5YjE3NTczZDM3M2M2MTUwOTY1NzJhMGRlMDRwLTEsCisgICAgLTB4MS4yY2NhZjY0MWQ0MjYxZWEzY2NkOGQyYTEwMmRjMzA2NnAtMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZnA2MiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjYKKyAgICAtMHgxLmZhNzI5OWIxNzU3M2QzNzNjNjE1MDk2NTcyYTBkZTA0cC0xLAorICAgIC0weDEuMmNjYWY2NDFkNDI2MWVhM2NjZDhkMmExMDJkYzMwNjZwLTMsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDYyLAorICB9LAorICB7IC8vIEVudHJ5IDgyNworICAgIDB4MS5mZmY2ZGZkNDJkYzU0NDMwYmMwNTc2YjAwYTg4YmQ5NHAtMSwKKyAgICAweDEuODJhYTM3NWIzYzMzZTcwNjYzNzMxYmFiNGJlYjZlZDNwLTcsCisgICAgMHgxLjBwNjMsCisgIH0sCisgIHsgLy8gRW50cnkgODI4CisgICAgLTB4MS5mZmY2ZGZkNDJkYzU0NDMwYmMwNTc2YjAwYTg4YmQ5NHAtMSwKKyAgICAweDEuODJhYTM3NWIzYzMzZTcwNjYzNzMxYmFiNGJlYjZlZDNwLTcsCisgICAgLTB4MS4wcDYzLAorICB9LAorICB7IC8vIEVudHJ5IDgyOQorICAgIDB4MS5lNDU2YjgxOGU3Mzk2YjQ1OTg5OTc4ZDRiN2ViZjdiM3AtMSwKKyAgICAweDEuNGMwNjIyYTZlMzVkZGVmZDVmMmI3NzAwNzE2YTU4MWZwLTIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNjMsCisgIH0sCisgIHsgLy8gRW50cnkgODMwCisgICAgLTB4MS5lNDU2YjgxOGU3Mzk2YjQ1OTg5OTc4ZDRiN2ViZjdiM3AtMSwKKyAgICAweDEuNGMwNjIyYTZlMzVkZGVmZDVmMmI3NzAwNzE2YTU4MWZwLTIsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDYzLAorICB9LAorICB7IC8vIEVudHJ5IDgzMQorICAgIC0weDEuODZkY2NhMGQ2ODllN2I1NmVmNzk0ODFiZTRhNjQ1YzZwLTEsCisgICAgMHgxLjRhYjY1MGI4YzYwNzM0Mzg1Mzc1ZTIyNjAzZmNkYjEwcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDI2LAorICB9LAorICB7IC8vIEVudHJ5IDgzMgorICAgIDB4MS44NmRjY2EwZDY4OWU3YjU2ZWY3OTQ4MWJlNGE2NDVjNnAtMSwKKyAgICAweDEuNGFiNjUwYjhjNjA3MzQzODUzNzVlMjI2MDNmY2RiMTBwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDI2LAorICB9LAorICB7IC8vIEVudHJ5IDgzMworICAgIC0weDEuODZkY2M5YmFiYjBhNDBlZTg3NWNhYjNiOWU4OTI3NTdwLTEsCisgICAgMHgxLjRhYjY1MTFhN2QzOWFkM2NjODhkZWQxZTc3NWNhMTQ3cC0xLAorICAgIDB4MS4wcDI3LAorICB9LAorICB7IC8vIEVudHJ5IDgzNAorICAgIDB4MS44NmRjYzliYWJiMGE0MGVlODc1Y2FiM2I5ZTg5Mjc1N3AtMSwKKyAgICAweDEuNGFiNjUxMWE3ZDM5YWQzY2M4OGRlZDFlNzc1Y2ExNDdwLTEsCisgICAgLTB4MS4wcDI3LAorICB9LAorICB7IC8vIEVudHJ5IDgzNQorICAgIC0weDEuODZkY2M5MTU1ZmUxODJkNDUxNTU5OTQyNmJiMTRiOTRwLTEsCisgICAgMHgxLjRhYjY1MWRkZWI5ZTYxNDM4MzgyZjAyMTY3YWRlNGFmcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDI3LAorICB9LAorICB7IC8vIEVudHJ5IDgzNgorICAgIDB4MS44NmRjYzkxNTVmZTE4MmQ0NTE1NTk5NDI2YmIxNGI5NHAtMSwKKyAgICAweDEuNGFiNjUxZGRlYjllNjE0MzgzODJmMDIxNjdhZGU0YWZwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDI3LAorICB9LAorICB7IC8vIEVudHJ5IDgzNworICAgIC0weDEuOGYyMmY4NGQ0MmRhMWY1NzQ2OWRmYWFjNDRhOGI3M2FwLTEsCisgICAgMHgxLjQwYWQ2N2U3NzdiMWRmMDE5NTE4OWY1MGE4YzI2MzQ1cC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDIzLAorICB9LAorICB7IC8vIEVudHJ5IDgzOAorICAgIDB4MS44ZjIyZjg0ZDQyZGExZjU3NDY5ZGZhYWM0NGE4YjczYXAtMSwKKyAgICAweDEuNDBhZDY3ZTc3N2IxZGYwMTk1MTg5ZjUwYThjMjYzNDVwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDIzLAorICB9LAorICB7IC8vIEVudHJ5IDgzOQorICAgIC0weDEuOGYyMmY4NDMzZDZlZGZlOWE0YWZmOTYyMjUxN2NhYTlwLTEsCisgICAgMHgxLjQwYWQ2N2YzZjBjOWExNDM5NjNjOWM5NmRiY2UzZjhhcC0xLAorICAgIDB4MS4wcDI0LAorICB9LAorICB7IC8vIEVudHJ5IDg0MAorICAgIDB4MS44ZjIyZjg0MzNkNmVkZmU5YTRhZmY5NjIyNTE3Y2FhOXAtMSwKKyAgICAweDEuNDBhZDY3ZjNmMGM5YTE0Mzk2M2M5Yzk2ZGJjZTNmOGFwLTEsCisgICAgLTB4MS4wcDI0LAorICB9LAorICB7IC8vIEVudHJ5IDg0MQorICAgIC0weDEuOGYyMmY4MmYzMjk4NWZlMzA2OTljNmUxMmQ5ZGZjZTJwLTEsCisgICAgMHgxLjQwYWQ2ODBjZTJmOTI0ZDcxNjc2OWQxMDY0YmM4ZGVmcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDI0LAorICB9LAorICB7IC8vIEVudHJ5IDg0MgorICAgIDB4MS44ZjIyZjgyZjMyOTg1ZmUzMDY5OWM2ZTEyZDlkZmNlMnAtMSwKKyAgICAweDEuNDBhZDY4MGNlMmY5MjRkNzE2NzY5ZDEwNjRiYzhkZWZwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDI0LAorICB9LAorICB7IC8vIEVudHJ5IDg0MworICAgIC0weDEuODM3YjlkZGRjMWVhYmQzNzlkNzI5ZjU3NWZjMTE0NGNwLTEsCisgICAgLTB4MS40ZWFhNjA2ZGIyNGMzY2I1ZTE1ZDdiMTlkNWVlNzNhMXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxLAorICB9LAorICB7IC8vIEVudHJ5IDg0NAorICAgIDB4MS44MzdiOWRkZGMxZWFiZDM3OWQ3MjlmNTc1ZmMxMTQ0Y3AtMSwKKyAgICAtMHgxLjRlYWE2MDZkYjI0YzNjYjVlMTVkN2IxOWQ1ZWU3M2ExcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxLAorICB9LAorICB7IC8vIEVudHJ5IDg0NQorICAgIC0weDEuODM3YjlkZGRjMWVhZTcwY2U5ODA1NWEwZTQ1MGQ5M2NwLTEsCisgICAgLTB4MS40ZWFhNjA2ZGIyNGMwYzQ2NmRhMWMyZGM3YmFhMmIzMnAtMSwKKyAgICAweDEuMHAyLAorICB9LAorICB7IC8vIEVudHJ5IDg0NgorICAgIDB4MS44MzdiOWRkZGMxZWFlNzBjZTk4MDU1YTBlNDUwZDkzY3AtMSwKKyAgICAtMHgxLjRlYWE2MDZkYjI0YzBjNDY2ZGExYzJkYzdiYWEyYjMycC0xLAorICAgIC0weDEuMHAyLAorICB9LAorICB7IC8vIEVudHJ5IDg0NworICAgIC0weDEuODM3YjlkZGRjMWViM2FiNzgxOWJjMjMzZGI0Njk3YjVwLTEsCisgICAgLTB4MS40ZWFhNjA2ZGIyNGJhYjY3ODYyYTUyNjFiNzcxOWRjZnAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAyLAorICB9LAorICB7IC8vIEVudHJ5IDg0OAorICAgIDB4MS44MzdiOWRkZGMxZWIzYWI3ODE5YmMyMzNkYjQ2OTdiNXAtMSwKKyAgICAtMHgxLjRlYWE2MDZkYjI0YmFiNjc4NjJhNTI2MWI3NzE5ZGNmcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAyLAorICB9LAorICB7IC8vIEVudHJ5IDg0OQorICAgIDB4MS5kMThmNmVhZDFiNDQ2YjRiY2I3M2MyMzkwYjMzMGQ3NXAtMSwKKyAgICAtMHgxLmFhMjI2NTc1MzcyMDEwMTE0NTIzMDk1MmU2MWM2ZjJjcC0yLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDAsCisgIH0sCisgIHsgLy8gRW50cnkgODUwCisgICAgLTB4MS5kMThmNmVhZDFiNDQ2YjRiY2I3M2MyMzkwYjMzMGQ3NXAtMSwKKyAgICAtMHgxLmFhMjI2NTc1MzcyMDEwMTE0NTIzMDk1MmU2MWM2ZjJjcC0yLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAwLAorICB9LAorICB7IC8vIEVudHJ5IDg1MQorICAgIDB4MS5kMThmNmVhZDFiNDQ1ZGZhYjg0ODE4ODAwOWM5YmI5NXAtMSwKKyAgICAtMHgxLmFhMjI2NTc1MzcyMDRhNDMzMmY4YWNiYjcyYjBkNzY4cC0yLAorICAgIDB4MS4wcDEsCisgIH0sCisgIHsgLy8gRW50cnkgODUyCisgICAgLTB4MS5kMThmNmVhZDFiNDQ1ZGZhYjg0ODE4ODAwOWM5YmI5NXAtMSwKKyAgICAtMHgxLmFhMjI2NTc1MzcyMDRhNDMzMmY4YWNiYjcyYjBkNzY4cC0yLAorICAgIC0weDEuMHAxLAorICB9LAorICB7IC8vIEVudHJ5IDg1MworICAgIDB4MS5kMThmNmVhZDFiNDQ0MzU4OTFmMGM1MGUwMTgyNjk4OHAtMSwKKyAgICAtMHgxLmFhMjI2NTc1MzcyMGJlYTcwZWEzZjM4Yzg2ZGI0MGFmcC0yLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDEsCisgIH0sCisgIHsgLy8gRW50cnkgODU0CisgICAgLTB4MS5kMThmNmVhZDFiNDQ0MzU4OTFmMGM1MGUwMTgyNjk4OHAtMSwKKyAgICAtMHgxLmFhMjI2NTc1MzcyMGJlYTcwZWEzZjM4Yzg2ZGI0MGFmcC0yLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAxLAorICB9LAorICB7IC8vIEVudHJ5IDg1NQorICAgIDB4MS5hZWQ1NDhmMDkwY2VkNzljNzljYmY3OTA0NDFmODE5N3AtMSwKKyAgICAweDEuMTRhMjgwZmI1MDY4YzY5YTJlZDQ1ZmI1NDdjMmYyNzFwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgODU2CisgICAgLTB4MS5hZWQ1NDhmMDkwY2VkNzljNzljYmY3OTA0NDFmODE5N3AtMSwKKyAgICAweDEuMTRhMjgwZmI1MDY4YzY5YTJlZDQ1ZmI1NDdjMmYyNzFwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDg1NworICAgIDB4MS5hZWQ1NDhmMDkwY2VlMDQxOGRkM2QyMTM4YTFlNzg2NXAtMSwKKyAgICAweDEuMTRhMjgwZmI1MDY4YjkyMzg0OGNkYjJlZDBlMzdhNTNwLTEsCisgICAgMHgxLjBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTgKKyAgICAtMHgxLmFlZDU0OGYwOTBjZWUwNDE4ZGQzZDIxMzhhMWU3ODY1cC0xLAorICAgIDB4MS4xNGEyODBmYjUwNjhiOTIzODQ4Y2RiMmVkMGUzN2E1M3AtMSwKKyAgICAtMHgxLjBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTkKKyAgICAweDEuYWVkNTQ4ZjA5MGNlZjE4YmI1ZTM4NzFhMTRkOTQ2MDlwLTEsCisgICAgMHgxLjE0YTI4MGZiNTA2ODllMzYyZmZkZDIyMWUyNTUxMDM1cC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAsCisgIH0sCisgIHsgLy8gRW50cnkgODYwCisgICAgLTB4MS5hZWQ1NDhmMDkwY2VmMThiYjVlMzg3MWExNGQ5NDYwOXAtMSwKKyAgICAweDEuMTRhMjgwZmI1MDY4OWUzNjJmZmRkMjIxZTI1NTEwMzVwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDAsCisgIH0sCisgIHsgLy8gRW50cnkgODYxCisgICAgMHgxLmVhZWU4NzQ0YjA1ZWYwN2NkMGI5MDg5MTMwNTk4MzE0cC0yLAorICAgIDB4MS5jMTUyODA2NWI3ZDRmZGIxNThjOWM0YTZiM2U0Yjc0MHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjIKKyAgICAtMHgxLmVhZWU4NzQ0YjA1ZWYwN2NkMGI5MDg5MTMwNTk4MzE0cC0yLAorICAgIDB4MS5jMTUyODA2NWI3ZDRmZGIxNThjOWM0YTZiM2U0Yjc0MHAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgODYzCisgICAgMHgxLmVhZWU4NzQ0YjA1ZWZlODc2NGJjMzY0ZmQ4MzdiNjY2cC0yLAorICAgIDB4MS5jMTUyODA2NWI3ZDRmOWRiN2JiYjNiNDVmNWY1YjMwYXAtMSwKKyAgICAweDEuMHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjQKKyAgICAtMHgxLmVhZWU4NzQ0YjA1ZWZlODc2NGJjMzY0ZmQ4MzdiNjY2cC0yLAorICAgIDB4MS5jMTUyODA2NWI3ZDRmOWRiN2JiYjNiNDVmNWY1YjMwYXAtMSwKKyAgICAtMHgxLjBwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgODY1CisgICAgMHgxLmVhZWU4NzQ0YjA1ZjFhOWM4Y2MyOTFjZDI3OTgxMDUxcC0yLAorICAgIDB4MS5jMTUyODA2NWI3ZDRmMjJmYzE5ZTI4ODQ3OWMzNmIyN3AtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjYKKyAgICAtMHgxLmVhZWU4NzQ0YjA1ZjFhOWM4Y2MyOTFjZDI3OTgxMDUxcC0yLAorICAgIDB4MS5jMTUyODA2NWI3ZDRmMjJmYzE5ZTI4ODQ3OWMzNmIyN3AtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgODY3CisgICAgMHgxLmZhYWVlZDRmMzE1NzVjMjdmMzljMWQ3YzAxMmE0NDEzcC0zLAorICAgIDB4MS5mMDE1NDlmN2RlZWExODRjNWYxZDIxMGI2YWRiZTU2Y3AtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjgKKyAgICAtMHgxLmZhYWVlZDRmMzE1NzVjMjdmMzljMWQ3YzAxMmE0NDEzcC0zLAorICAgIDB4MS5mMDE1NDlmN2RlZWExODRjNWYxZDIxMGI2YWRiZTU2Y3AtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgODY5CisgICAgMHgxLmZhYWVlZDRmMzE1NzZiYTg5ZGViZGM3MzUxZThiMWFlcC0zLAorICAgIDB4MS5mMDE1NDlmN2RlZWExNzRmMDdhNjc5NzJiZjI5ZjE0OHAtMSwKKyAgICAweDEuMHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzAKKyAgICAtMHgxLmZhYWVlZDRmMzE1NzZiYTg5ZGViZGM3MzUxZThiMWFlcC0zLAorICAgIDB4MS5mMDE1NDlmN2RlZWExNzRmMDdhNjc5NzJiZjI5ZjE0OHAtMSwKKyAgICAtMHgxLjBwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgODcxCisgICAgMHgxLmZhYWVlZDRmMzE1NzhhYTlmMjhiNWE2MWYzNGRjY2IxcC0zLAorICAgIDB4MS5mMDE1NDlmN2RlZWExNTU0NThiOTJhNDE2N2FlYzdmZnAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzIKKyAgICAtMHgxLmZhYWVlZDRmMzE1NzhhYTlmMjhiNWE2MWYzNGRjY2IxcC0zLAorICAgIDB4MS5mMDE1NDlmN2RlZWExNTU0NThiOTJhNDE2N2FlYzdmZnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgODczCisgICAgMHgxLmZlYWFlZWU4NmVlMzRjYzA1ZWZmMjg3NDBlZTdiNDY5cC00LAorICAgIDB4MS5mYzAxNTUyN2Q1YmQzNzFhMTIzMjAyNDljYTRkYWZkN3AtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzQKKyAgICAtMHgxLmZlYWFlZWU4NmVlMzRjYzA1ZWZmMjg3NDBlZTdiNDY5cC00LAorICAgIDB4MS5mYzAxNTUyN2Q1YmQzNzFhMTIzMjAyNDljYTRkYWZkN3AtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgODc1CisgICAgMHgxLmZlYWFlZWU4NmVlMzVjYTA2OWE4NjcyMWY4OWY4NWE1cC00LAorICAgIDB4MS5mYzAxNTUyN2Q1YmQzNmRhM2NkNDI1M2JlZGUzMTljYXAtMSwKKyAgICAweDEuMHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzYKKyAgICAtMHgxLmZlYWFlZWU4NmVlMzVjYTA2OWE4NjcyMWY4OWY4NWE1cC00LAorICAgIDB4MS5mYzAxNTUyN2Q1YmQzNmRhM2NkNDI1M2JlZGUzMTljYXAtMSwKKyAgICAtMHgxLjBwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgODc3CisgICAgMHgxLmZlYWFlZWU4NmVlMzdjNjA3ZWZhZTQ3ZGNjMDkyYzFjcC00LAorICAgIDB4MS5mYzAxNTUyN2Q1YmQzNjVhOTIxODZiMjAzNTA3ZjlhZHAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzgKKyAgICAtMHgxLmZlYWFlZWU4NmVlMzdjNjA3ZWZhZTQ3ZGNjMDkyYzFjcC00LAorICAgIDB4MS5mYzAxNTUyN2Q1YmQzNjVhOTIxODZiMjAzNTA3ZjlhZHAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgODc5CisgICAgMHgxLmZmYWFhZWVlZDRlZDliNTNhNDA4YzBmMmJjMDJjOGY5cC01LAorICAgIDB4MS5mZjAwMTU1NDlmNGQzNGRhMGI3NDVkYzc0MzMxNDVlZnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODAKKyAgICAtMHgxLmZmYWFhZWVlZDRlZDliNTNhNDA4YzBmMmJjMDJjOGY5cC01LAorICAgIDB4MS5mZjAwMTU1NDlmNGQzNGRhMGI3NDVkYzc0MzMxNDVlZnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgODgxCisgICAgMHgxLmZmYWFhZWVlZDRlZGFiNGJhNGIzNjVlZDI1YTk1OTVmcC01LAorICAgIDB4MS5mZjAwMTU1NDlmNGQzNGNhMGUxZWU2NTA5YmM0MmI3MXAtMSwKKyAgICAweDEuMHAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODIKKyAgICAtMHgxLmZmYWFhZWVlZDRlZGFiNGJhNGIzNjVlZDI1YTk1OTVmcC01LAorICAgIDB4MS5mZjAwMTU1NDlmNGQzNGNhMGUxZWU2NTA5YmM0MmI3MXAtMSwKKyAgICAtMHgxLjBwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgODgzCisgICAgMHgxLmZmYWFhZWVlZDRlZGNiM2JhNjA4YWZlMWY4ZjRmYTZicC01LAorICAgIDB4MS5mZjAwMTU1NDlmNGQzNGFhMTM3M2Y3NjM0Y2U4NzczN3AtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODQKKyAgICAtMHgxLmZmYWFhZWVlZDRlZGNiM2JhNjA4YWZlMWY4ZjRmYTZicC01LAorICAgIDB4MS5mZjAwMTU1NDlmNGQzNGFhMTM3M2Y3NjM0Y2U4NzczN3AtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgODg1CisgICAgMHgxLmZmZWFhYWVlZWU4NmQ4Y2NmZTM2OGNkOTVlMzhmMDAzcC02LAorICAgIDB4MS5mZmMwMDE1NTUyN2QyYjE2YWViMDlmYjcwNjM2YTEwYXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODYKKyAgICAtMHgxLmZmZWFhYWVlZWU4NmQ4Y2NmZTM2OGNkOTVlMzhmMDAzcC02LAorICAgIDB4MS5mZmMwMDE1NTUyN2QyYjE2YWViMDlmYjcwNjM2YTEwYXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTYsCisgIH0sCisgIHsgLy8gRW50cnkgODg3CisgICAgMHgxLmZmZWFhYWVlZWU4NmU4Y2FmZTQxMzc2ZDQ3OTE5NTc5cC02LAorICAgIDB4MS5mZmMwMDE1NTUyN2QyYjEyYWVkYjQ5ZDkyOTI4ZGY3MnAtMSwKKyAgICAweDEuMHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODgKKyAgICAtMHgxLmZmZWFhYWVlZWU4NmU4Y2FmZTQxMzc2ZDQ3OTE5NTc5cC02LAorICAgIDB4MS5mZmMwMDE1NTUyN2QyYjEyYWVkYjQ5ZDkyOTI4ZGY3MnAtMSwKKyAgICAtMHgxLjBwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgODg5CisgICAgMHgxLmZmZWFhYWVlZWU4NzA4YzZmZTU2OGM5NTFhNDI4MDY5cC02LAorICAgIDB4MS5mZmMwMDE1NTUyN2QyYjBhYWYzMDllMWQ2ZjBjZmM0ZXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTAKKyAgICAtMHgxLmZmZWFhYWVlZWU4NzA4YzZmZTU2OGM5NTFhNDI4MDY5cC02LAorICAgIDB4MS5mZmMwMDE1NTUyN2QyYjBhYWYzMDllMWQ2ZjBjZmM0ZXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgODkxCisgICAgMHgxLmZmZmFhYWFlZWVlZDNlZDVjOWM1YWI2NTM4ZjljY2UwcC03LAorICAgIDB4MS5mZmYwMDAxNTU1NDlmNGEzOGEyNTYzZWYzNDRjM2ZmNHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTIKKyAgICAtMHgxLmZmZmFhYWFlZWVlZDNlZDVjOWM1YWI2NTM4ZjljY2UwcC03LAorICAgIDB4MS5mZmYwMDAxNTU1NDlmNGEzOGEyNTYzZWYzNDRjM2ZmNHAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTcsCisgIH0sCisgIHsgLy8gRW50cnkgODkzCisgICAgMHgxLmZmZmFhYWFlZWVlZDRlZDU0OWM2NTYwZjg4OWVlNTMxcC03LAorICAgIDB4MS5mZmYwMDAxNTU1NDlmNGEyOGEyODBlOTdiY2Q1OWM4YXAtMSwKKyAgICAweDEuMHAtNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTQKKyAgICAtMHgxLmZmZmFhYWFlZWVlZDRlZDU0OWM2NTYwZjg4OWVlNTMxcC03LAorICAgIDB4MS5mZmYwMDAxNTU1NDlmNGEyOGEyODBlOTdiY2Q1OWM4YXAtMSwKKyAgICAtMHgxLjBwLTYsCisgIH0sCisgIHsgLy8gRW50cnkgODk1CisgICAgMHgxLmZmZmFhYWFlZWVlZDZlZDQ0OWM3YWI2NDI3ZThmZGQ0cC03LAorICAgIDB4MS5mZmYwMDAxNTU1NDlmNGEwOGEyZDYzZThjZGU4M2RiNXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTYKKyAgICAtMHgxLmZmZmFhYWFlZWVlZDZlZDQ0OWM3YWI2NDI3ZThmZGQ0cC03LAorICAgIDB4MS5mZmYwMDAxNTU1NDlmNGEwOGEyZDYzZThjZGU4M2RiNXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTYsCisgIH0sCisgIHsgLy8gRW50cnkgODk3CisgICAgMHgxLmZmZmZmZmZhYWFhYTlhYWVlZWVmNmVlZDRlZDQ0MmE0cC0xNSwKKyAgICAweDEuZmZmZmZmZjAwMDAwMDAxNTU1NTY1NTQ5ZjQ5YzlmNGRwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTE1LAorICB9LAorICB7IC8vIEVudHJ5IDg5OAorICAgIC0weDEuZmZmZmZmZmFhYWFhOWFhZWVlZWY2ZWVkNGVkNDQyYTRwLTE1LAorICAgIDB4MS5mZmZmZmZmMDAwMDAwMDE1NTU1NjU1NDlmNDljOWY0ZHAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTE1LAorICB9LAorICB7IC8vIEVudHJ5IDg5OQorICAgIDB4MS5mZmZmZmZmYWFhYWFhYWFlZWVlZWVlZWQ0ZWQ0ZWQ0ZnAtMTUsCisgICAgMHgxLmZmZmZmZmYwMDAwMDAwMTU1NTU1NTU0OWY0OWY0OWY3cC0xLAorICAgIDB4MS4wcC0xNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDAKKyAgICAtMHgxLmZmZmZmZmZhYWFhYWFhYWVlZWVlZWVlZDRlZDRlZDRmcC0xNSwKKyAgICAweDEuZmZmZmZmZjAwMDAwMDAxNTU1NTU1NTQ5ZjQ5ZjQ5ZjdwLTEsCisgICAgLTB4MS4wcC0xNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDEKKyAgICAweDEuZmZmZmZmZmFhYWFhY2FhZWVlZWRlZWVkNGVkNjQyYTRwLTE1LAorICAgIDB4MS5mZmZmZmZmMDAwMDAwMDE1NTU1MzU1NDlmNGE0OWY0ZHAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTQsCisgIH0sCisgIHsgLy8gRW50cnkgOTAyCisgICAgLTB4MS5mZmZmZmZmYWFhYWFjYWFlZWVlZGVlZWQ0ZWQ2NDJhNHAtMTUsCisgICAgMHgxLmZmZmZmZmYwMDAwMDAwMTU1NTUzNTU0OWY0YTQ5ZjRkcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMTQsCisgIH0sCisgIHsgLy8gRW50cnkgOTAzCisgICAgMHgxLmZmZmZmZmZmZmZmZmVlYWFhYWFhYWFhYWFhY2FlZWVlcC0yOCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDA0MTU1NTVwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTI4LAorICB9LAorICB7IC8vIEVudHJ5IDkwNAorICAgIC0weDEuZmZmZmZmZmZmZmZmZWVhYWFhYWFhYWFhYWFjYWVlZWVwLTI4LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDQxNTU1NXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTI4LAorICB9LAorICB7IC8vIEVudHJ5IDkwNQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZWFhYWFhYWFhYWFhYWFhZWVlZXAtMjgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDE1NTU1cC0xLAorICAgIDB4MS4wcC0yNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDYKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZlYWFhYWFhYWFhYWFhYWFlZWVlcC0yOCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMTU1NTVwLTEsCisgICAgLTB4MS4wcC0yNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDcKKyAgICAweDEuMDAwMDAwMDAwMDAwMGY1NTU1NTU1NTU1NTUzNTc3NzdwLTI3LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmYmZmZmZmZmZmZmZmZjgxNTU1NXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMjcsCisgIH0sCisgIHsgLy8gRW50cnkgOTA4CisgICAgLTB4MS4wMDAwMDAwMDAwMDAwZjU1NTU1NTU1NTU1NTM1Nzc3N3AtMjcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZiZmZmZmZmZmZmZmZmODE1NTU1cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMjcsCisgIH0sCisgIHsgLy8gRW50cnkgOTA5CisgICAgMHgxLmZmZmZmZmZmZmZmZmVmZmFhYWFhYWFhYWFhYWIyYWFlcC0zMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMTAwMTVwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTMxLAorICB9LAorICB7IC8vIEVudHJ5IDkxMAorICAgIC0weDEuZmZmZmZmZmZmZmZmZWZmYWFhYWFhYWFhYWFhYjJhYWVwLTMxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAxMDAxNXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTMxLAorICB9LAorICB7IC8vIEVudHJ5IDkxMQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZhYWFhYWFhYWFhYWFhYWFhZXAtMzEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDE1cC0xLAorICAgIDB4MS4wcC0zMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTIKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmFhYWFhYWFhYWFhYWFhYWFlcC0zMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMTVwLTEsCisgICAgLTB4MS4wcC0zMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTMKKyAgICAweDEuMDAwMDAwMDAwMDAwMGZmZDU1NTU1NTU1NTU1NGQ1NTdwLTMwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmVmZmZmZmZmZmZmZmZlMDAxNXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMzAsCisgIH0sCisgIHsgLy8gRW50cnkgOTE0CisgICAgLTB4MS4wMDAwMDAwMDAwMDAwZmZkNTU1NTU1NTU1NTU0ZDU1N3AtMzAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZWZmZmZmZmZmZmZmZmUwMDE1cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMzAsCisgIH0sCisgIHsgLy8gRW50cnkgOTE1CisgICAgLTB4MS40NTJmYzk4YjM0ZTk2YjYxMTM5YjA5YTdjODRhNDRiZHAtOCwKKyAgICAtMHgxLmZmZmU2MmVjZmFiNzUzYzA3MWIyNjgwZTFlMjZiYmNlcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzLAorICB9LAorICB7IC8vIEVudHJ5IDkxNgorICAgIDB4MS40NTJmYzk4YjM0ZTk2YjYxMTM5YjA5YTdjODRhNDRiZHAtOCwKKyAgICAtMHgxLmZmZmU2MmVjZmFiNzUzYzA3MWIyNjgwZTFlMjZiYmNlcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMsCisgIH0sCisgIHsgLy8gRW50cnkgOTE3CisgICAgMHgxLjQ1MmZjOThiMzRlOTZiNjExMzliMDlhN2M4NGE0NGJkcC04LAorICAgIC0weDEuZmZmZTYyZWNmYWI3NTNjMDcxYjI2ODBlMWUyNmJiY2VwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTgKKyAgICAtMHgxLjQ1MmZjOThiMzRlOTZiNjExMzliMDlhN2M4NGE0NGJkcC04LAorICAgIC0weDEuZmZmZTYyZWNmYWI3NTNjMDcxYjI2ODBlMWUyNmJiY2VwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMsCisgIH0sCisgIHsgLy8gRW50cnkgOTE5CisgICAgMHgxLjQ1MmZjOThiMzRlOTZiNjExMzliMDlhN2M4NGE0NGJkcC04LAorICAgIC0weDEuZmZmZTYyZWNmYWI3NTNjMDcxYjI2ODBlMWUyNmJiY2VwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjAKKyAgICAtMHgxLjQ1MmZjOThiMzRlOTZiNjExMzliMDlhN2M4NGE0NGJkcC04LAorICAgIC0weDEuZmZmZTYyZWNmYWI3NTNjMDcxYjI2ODBlMWUyNmJiY2VwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMsCisgIH0sCisgIHsgLy8gRW50cnkgOTIxCisgICAgMHgxLmRhYTM2NzdjNmVlOGEyMmViNmM0YjEyY2ExMGNlMDIxcC0xLAorICAgIDB4MS43ZmZkZmI0YzUzMDhmNzc3Y2Y3NzRjNzMzYjI1NjY5NXAtMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAxMDIzLAorICB9LAorICB7IC8vIEVudHJ5IDkyMgorICAgIC0weDEuZGFhMzY3N2M2ZWU4YTIyZWI2YzRiMTJjYTEwY2UwMjFwLTEsCisgICAgMHgxLjdmZmRmYjRjNTMwOGY3NzdjZjc3NGM3MzNiMjU2Njk1cC0yLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXAxMDIzLAorICB9LAorICB7IC8vIEVudHJ5IDkyMworICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDM2ZTJlZHAtNTMsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIyMjBjNXAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDkyNAorICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQzNmUyZWRwLTUzLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiMjIwYzVwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgOTI1CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4ODMxcC0xLAorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDQxOWZhOHAtNTQsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjYKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4ODMxcC0xLAorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDQxOWZhOHAtNTQsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgOTI3CisgICAgMHgxLmFlZDU0OGYwOTBjZWYxOGJiNWUzODcxYTE0ZDk0NjA5cC0xLAorICAgIDB4MS4xNGEyODBmYjUwNjg5ZTM2MmZmZGQyMjFlMjU1MTAzNXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAwLAorICB9LAorICB7IC8vIEVudHJ5IDkyOAorICAgIC0weDEuYWVkNTQ4ZjA5MGNlZjE4YmI1ZTM4NzFhMTRkOTQ2MDlwLTEsCisgICAgMHgxLjE0YTI4MGZiNTA2ODllMzYyZmZkZDIyMWUyNTUxMDM1cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAwLAorICB9LAorICB7IC8vIEVudHJ5IDkyOQorICAgIDB4MS5hZWQ1NDhmMDkwY2VlMDQxOGRkM2QyMTM4YTFlNzg2NXAtMSwKKyAgICAweDEuMTRhMjgwZmI1MDY4YjkyMzg0OGNkYjJlZDBlMzdhNTNwLTEsCisgICAgMHgxLjBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzAKKyAgICAtMHgxLmFlZDU0OGYwOTBjZWUwNDE4ZGQzZDIxMzhhMWU3ODY1cC0xLAorICAgIDB4MS4xNGEyODBmYjUwNjhiOTIzODQ4Y2RiMmVkMGUzN2E1M3AtMSwKKyAgICAtMHgxLjBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzEKKyAgICAweDEuYWVkNTQ4ZjA5MGNlZDc5Yzc5Y2JmNzkwNDQxZjgxOTdwLTEsCisgICAgMHgxLjE0YTI4MGZiNTA2OGM2OWEyZWQ0NWZiNTQ3YzJmMjcxcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDkzMgorICAgIC0weDEuYWVkNTQ4ZjA5MGNlZDc5Yzc5Y2JmNzkwNDQxZjgxOTdwLTEsCisgICAgMHgxLjE0YTI4MGZiNTA2OGM2OWEyZWQ0NWZiNTQ3YzJmMjcxcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzMKKyAgICAweDEuNmEwOWU2NjdmM2JjYzVlOWZlZTM1MmY1MGZkM2Y0ZTlwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NjMjc2NzEyZDNkOGM1NTAyMzg3cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDkzNAorICAgIC0weDEuNmEwOWU2NjdmM2JjYzVlOWZlZTM1MmY1MGZkM2Y0ZTlwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NjMjc2NzEyZDNkOGM1NTAyMzg3cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzUKKyAgICAweDEuMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyLAorICB9LAorICB7IC8vIEVudHJ5IDkzNgorICAgIC0weDEuMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMTAyMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wcC0xMDIyLAorICB9LAorICB7IC8vIEVudHJ5IDkzOAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTAyMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzkKKyAgICAweDEuZmZmZmZmZmZmZmZmZGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzLAorICB9LAorICB7IC8vIEVudHJ5IDk0MAorICAgIC0weDEuZmZmZmZmZmZmZmZmZGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXAtMTAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDEKKyAgICAweDEuZmZmZmZmZmZmZmZmYmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZjcC0xMDIzLAorICB9LAorICB7IC8vIEVudHJ5IDk0MgorICAgIC0weDEuZmZmZmZmZmZmZmZmYmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmY3AtMTAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwNzQsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wcC0xMDczLAorICB9LAorICB7IC8vIEVudHJ5IDk0NAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwNzQsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTA3MywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDUKKyAgICAwLjAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wcC0xMDc0LAorICB9LAorICB7IC8vIEVudHJ5IDk0NgorICAgIC0wLjAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTA3NCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDcKKyAgICAwLjAsCisgICAgMHgxLnAwLAorICAgIDAuMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDgKKyAgICAtMC4wLAorICAgIDB4MS5wMCwKKyAgICAtMC4wLAorICB9LAorfTsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCisKK1RFU1QobWF0aF9zaW5jb3MsIHNpbmNvc19pbnRlbCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoZ19zaW5jb3NfaW50ZWxfZGF0YSkvc2l6ZW9mKHNpbmNvc19pbnRlbF9kYXRhX3QpOyBpKyspIHsKKyAgIGRvdWJsZSBkc2luLCBkY29zOworICAgc2luY29zKGdfc2luY29zX2ludGVsX2RhdGFbaV0uY2FsbF9kYXRhLCAmZHNpbiwgJmRjb3MpOworICAgRVhQRUNUX0RPVUJMRV9FUShnX3NpbmNvc19pbnRlbF9kYXRhW2ldLnNpbl9leHBlY3RlZCwgZHNpbikgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKKyAgIEVYUEVDVF9ET1VCTEVfRVEoZ19zaW5jb3NfaW50ZWxfZGF0YVtpXS5jb3NfZXhwZWN0ZWQsIGRjb3MpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7CisgIH0KKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOworI2VuZGlmIC8vIF9fQklPTklDX18KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfc2luY29zZl90ZXN0LmNwcCBiL3Rlc3RzL21hdGhfc2luY29zZl90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWEzMmM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbWF0aF9zaW5jb3NmX3Rlc3QuY3BwCkBAIC0wLDAgKzEsNDY1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQordHlwZWRlZiBzdHJ1Y3QgeworICBmbG9hdCBzaW5fZXhwZWN0ZWQ7CisgIGZsb2F0IGNvc19leHBlY3RlZDsKKyAgZmxvYXQgY2FsbF9kYXRhOworfSBzaW5jb3NmX2ludGVsX2RhdGFfdDsKKworc3RhdGljIHNpbmNvc2ZfaW50ZWxfZGF0YV90IGdfc2luY29zZl9pbnRlbF9kYXRhW10gPSB7CisgIHsgLy8gRW50cnkgMAorICAgIC0weDEuYjZhN2FiZmZhZjU5YTVhYzE4MWUzZTFhYmY5NjE2OThwLTEsCisgICAgMHgxLjA4MGU3NGMxMTY4NjNjZmFiODJhMGZkNTljNzFiMzYzcC0xLAorICAgIC0weDEuMDc2OHAwLAorICB9LAorICB7IC8vIEVudHJ5IDEKKyAgICAweDEuYjZhN2FiZmZhZjU5YTVhYzE4MWUzZTFhYmY5NjE2OThwLTEsCisgICAgMHgxLjA4MGU3NGMxMTY4NjNjZmFiODJhMGZkNTljNzFiMzYzcC0xLAorICAgIDB4MS4wNzY4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMgorICAgIDB4MS43NjJkYTY2NDhmZGUwMGUzOTg0NjJlNzE2MzA5NGQ1MnAtMiwKKyAgICAweDEuZGM5ODAyZmZmZmZmZTBjYmZjNTdlZjI4N2QzYzgzYWZwLTEsCisgICAgLTB4MS44ZjIxOWNwNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzCisgICAgLTB4MS43NjJkYTY2NDhmZGUwMGUzOTg0NjJlNzE2MzA5NGQ1MnAtMiwKKyAgICAweDEuZGM5ODAyZmZmZmZmZTBjYmZjNTdlZjI4N2QzYzgzYWZwLTEsCisgICAgMHgxLjhmMjE5Y3A1LAorICB9LAorICB7IC8vIEVudHJ5IDQKKyAgICAtMHgxLjQ5M2I2YTdkM2Y1YjdiZjY2ZmEzMmEwMTUxNWQ2YzQzcC0xLAorICAgIC0weDEuODgxYzI2ZmQyNWQwYmY2ZDZlYTM4NzA4YTA5NzZiMzVwLTEsCisgICAgLTB4MS5kM2E1MWFwODAsCisgIH0sCisgIHsgLy8gRW50cnkgNQorICAgIDB4MS40OTNiNmE3ZDNmNWI3YmY2NmZhMzJhMDE1MTVkNmM0M3AtMSwKKyAgICAtMHgxLjg4MWMyNmZkMjVkMGJmNmQ2ZWEzODcwOGEwOTc2YjM1cC0xLAorICAgIDB4MS5kM2E1MWFwODAsCisgIH0sCisgIHsgLy8gRW50cnkgNgorICAgIC0weDEuZTBkMWRjMDA2ZTg1ODM1YjAzOTRhYmU5N2RlNzdmYmNwLTQsCisgICAgMHgxLmZjNzVjYTYzMTNlZjc2NjAxMmRiM2NhOTlhMWE1MmQxcC0xLAorICAgIC0weDEuZTFlZTUycC00LAorICB9LAorICB7IC8vIEVudHJ5IDcKKyAgICAweDEuZTBkMWRjMDA2ZTg1ODM1YjAzOTRhYmU5N2RlNzdmYmNwLTQsCisgICAgMHgxLmZjNzVjYTYzMTNlZjc2NjAxMmRiM2NhOTlhMWE1MmQxcC0xLAorICAgIDB4MS5lMWVlNTJwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgOAorICAgIC0weDEuMmI2YTljYTNkZjYyMmVmZTJhYTMxNTRhNjM1MmJjNzBwLTEsCisgICAgLTB4MS45ZjUyZGVmNTVkODllOTJlN2RmMjBlYzIxMTYxZGViOHAtMSwKKyAgICAtMHgxLmYzZmZlMnAyNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5CisgICAgMHgxLjJiNmE5Y2EzZGY2MjJlZmUyYWEzMTU0YTYzNTJiYzcwcC0xLAorICAgIC0weDEuOWY1MmRlZjU1ZDg5ZTkyZTdkZjIwZWMyMTE2MWRlYjhwLTEsCisgICAgMHgxLmYzZmZlMnAyNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMAorICAgIDB4MS5hMzQyMmFmMTNiMmNmYjc4ZDBjYzQ1OGQ5YWM2YmRlOXAtMSwKKyAgICAtMHgxLjI1ZTFhYTFkOTM4M2MxZjI3MDI3Y2Y2OWI2OTQ3N2ZkcC0xLAorICAgIC0weDEuZmYyMTFlcDI0LAorICB9LAorICB7IC8vIEVudHJ5IDExCisgICAgLTB4MS5hMzQyMmFmMTNiMmNmYjc4ZDBjYzQ1OGQ5YWM2YmRlOXAtMSwKKyAgICAtMHgxLjI1ZTFhYTFkOTM4M2MxZjI3MDI3Y2Y2OWI2OTQ3N2ZkcC0xLAorICAgIDB4MS5mZjIxMWVwMjQsCisgIH0sCisgIHsgLy8gRW50cnkgMTIKKyAgICAweDEuZmZmZmZmYWFhYWFhYWVlZWVlZWVkNGVkNGVkNTQ5YzZwLTEzLAorICAgIDB4MS5mZmZmZmYwMDAwMDAxNTU1NTU1NDlmNDlmNGEyOGEyOHAtMSwKKyAgICAweDEucC0xMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMworICAgIC0weDEuZmZmZmZmYWFhYWFhYWVlZWVlZWVkNGVkNGVkNTQ5YzZwLTEzLAorICAgIDB4MS5mZmZmZmYwMDAwMDAxNTU1NTU1NDlmNDlmNGEyOGEyOHAtMSwKKyAgICAtMHgxLnAtMTIsCisgIH0sCisgIHsgLy8gRW50cnkgMTQKKyAgICAweDEuMDAwMDAxZDU1NTU0NTc3Nzc1OGNiZmNhZmMwOWVmN2VwLTEyLAorICAgIDB4MS5mZmZmZmVmZmZmZmMxNTU1NTFmZjQ5ZjY5NmM0YWVjYXAtMSwKKyAgICAweDEuMDAwMDAycC0xMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNQorICAgIC0weDEuMDAwMDAxZDU1NTU0NTc3Nzc1OGNiZmNhZmMwOWVmN2VwLTEyLAorICAgIDB4MS5mZmZmZmVmZmZmZmMxNTU1NTFmZjQ5ZjY5NmM0YWVjYXAtMSwKKyAgICAtMHgxLjAwMDAwMnAtMTIsCisgIH0sCisgIHsgLy8gRW50cnkgMTYKKyAgICAweDEuMDAwMDAxZmZmZmZmZmZmZmQ1NTU1NDU1NTU1MzU1NTVwLTMyLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZlZmZmZmZiZmZmZmZjcC0xLAorICAgIDB4MS4wMDAwMDJwLTMyLAorICB9LAorICB7IC8vIEVudHJ5IDE3CisgICAgLTB4MS4wMDAwMDFmZmZmZmZmZmZmZDU1NTU0NTU1NTUzNTU1NXAtMzIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmVmZmZmZmJmZmZmZmNwLTEsCisgICAgLTB4MS4wMDAwMDJwLTMyLAorICB9LAorICB7IC8vIEVudHJ5IDE4CisgICAgMHgxLmVhZjBkNTAwOGYyZGI4OTllMjQ4N2RhOWQzYjljZGU3cC0yLAorICAgIDB4MS5jMTUxZGY0ZjEyYjE5N2E2NjVhMjkwN2U0OTMzYTFlZnAtMSwKKyAgICAweDEuMDAwMTUwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDE5CisgICAgLTB4MS5lYWYwZDUwMDhmMmRiODk5ZTI0ODdkYTlkM2I5Y2RlN3AtMiwKKyAgICAweDEuYzE1MWRmNGYxMmIxOTdhNjY1YTI5MDdlNDkzM2ExZWZwLTEsCisgICAgLTB4MS4wMDAxNTBwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjAKKyAgICAweDEuZWFmNzdlZmZmNjU5MDIxYmM4MjdiYmQ1Njk2YWQxOWVwLTIsCisgICAgMHgxLmMxNTAwZDQ5NGVkMmNjNTAwMmMyN2NjNWNhM2Q5NmY4cC0xLAorICAgIDB4MS4wMDA1MWNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjEKKyAgICAtMHgxLmVhZjc3ZWZmZjY1OTAyMWJjODI3YmJkNTY5NmFkMTllcC0yLAorICAgIDB4MS5jMTUwMGQ0OTRlZDJjYzUwMDJjMjdjYzVjYTNkOTZmOHAtMSwKKyAgICAtMHgxLjAwMDUxY3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMgorICAgIC0weDEuNWFhNTNjMWMxMzE3ZjMwYjRjMTA4NzIyZTJiNjQ2MTJwLTEsCisgICAgMHgxLjc4Y2RiNmZmYTZiZmY4OTllMTcyM2VkMDEzOWM0OGNicC0xLAorICAgIDB4MS4wMDBmZGVwODAsCisgIH0sCisgIHsgLy8gRW50cnkgMjMKKyAgICAweDEuNWFhNTNjMWMxMzE3ZjMwYjRjMTA4NzIyZTJiNjQ2MTJwLTEsCisgICAgMHgxLjc4Y2RiNmZmYTZiZmY4OTllMTcyM2VkMDEzOWM0OGNicC0xLAorICAgIC0weDEuMDAwZmRlcDgwLAorICB9LAorICB7IC8vIEVudHJ5IDI0CisgICAgMHgxLmFlZjM4ODIyZTY0MzExNDQ1NTQ1OTgwZmJjNWI1NmZhcC0xLAorICAgIDB4MS4xNDczNWZmZmQ1NTEyMGE0NDgwYjdjOTFhMWQ3OGQ2ZXAtMSwKKyAgICAweDEuMDAxY3AwLAorICB9LAorICB7IC8vIEVudHJ5IDI1CisgICAgLTB4MS5hZWYzODgyMmU2NDMxMTQ0NTU0NTk4MGZiYzViNTZmYXAtMSwKKyAgICAweDEuMTQ3MzVmZmZkNTUxMjBhNDQ4MGI3YzkxYTFkNzhkNmVwLTEsCisgICAgLTB4MS4wMDFjcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjYKKyAgICAtMHgxLjdlMTJhZWUwYzg2MmIxNzA5YmQ1MDIwNWJiYTMyMTY3cC0xLAorICAgIC0weDEuNTRkNDI5MDAxMGE2ODgyNmE4ODJlN2M4N2Q2Njk0ZDJwLTEsCisgICAgMHgxLjAwMjdiOHA0MCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNworICAgIDB4MS43ZTEyYWVlMGM4NjJiMTcwOWJkNTAyMDViYmEzMjE2N3AtMSwKKyAgICAtMHgxLjU0ZDQyOTAwMTBhNjg4MjZhODgyZTdjODdkNjY5NGQycC0xLAorICAgIC0weDEuMDAyN2I4cDQwLAorICB9LAorICB7IC8vIEVudHJ5IDI4CisgICAgLTB4MS5iZDY5NDRlZjRkZDFiNDM5NjJlMmQzNDgwNDEwZmQ4N3AtMSwKKyAgICAweDEuZjhmYzhlZmZmNjdkODM0ZjY4NzhhYjRlNDRmYTg5YjVwLTIsCisgICAgMHgxLjAwNDg0MHA2OCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOQorICAgIDB4MS5iZDY5NDRlZjRkZDFiNDM5NjJlMmQzNDgwNDEwZmQ4N3AtMSwKKyAgICAweDEuZjhmYzhlZmZmNjdkODM0ZjY4NzhhYjRlNDRmYTg5YjVwLTIsCisgICAgLTB4MS4wMDQ4NDBwNjgsCisgIH0sCisgIHsgLy8gRW50cnkgMzAKKyAgICAweDEuZjRlMjNlMDAxNjVhNDkwN2E2NTZhN2NmNTMyYmJkZTRwLTIsCisgICAgMHgxLmJlOTE2MDFlNDdiZWQ2ZDQ1ZTgzNzI2ODdiMzczYzBjcC0xLAorICAgIDB4MS4wNWIwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDMxCisgICAgLTB4MS5mNGUyM2UwMDE2NWE0OTA3YTY1NmE3Y2Y1MzJiYmRlNHAtMiwKKyAgICAweDEuYmU5MTYwMWU0N2JlZDZkNDVlODM3MjY4N2IzNzNjMGNwLTEsCisgICAgLTB4MS4wNWIwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDMyCisgICAgMHgxLmI2YTdhYmZmYWY1OWE1YWMxODFlM2UxYWJmOTYxNjk4cC0xLAorICAgIDB4MS4wODBlNzRjMTE2ODYzY2ZhYjgyYTBmZDU5YzcxYjM2M3AtMSwKKyAgICAweDEuMDc2OHAwLAorICB9LAorICB7IC8vIEVudHJ5IDMzCisgICAgLTB4MS5iNmE3YWJmZmFmNTlhNWFjMTgxZTNlMWFiZjk2MTY5OHAtMSwKKyAgICAweDEuMDgwZTc0YzExNjg2M2NmYWI4MmEwZmQ1OWM3MWIzNjNwLTEsCisgICAgLTB4MS4wNzY4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzQKKyAgICAweDEuYmNiOGFhZmZmZmZkNjlkMjg2NWFhZjNmNGM1MDc0ZThwLTEsCisgICAgMHgxLmZiNjlhNmRjNTEzYmNiYTU5ZDVkYzY4ZDNkNTlhMDVjcC0yLAorICAgIDB4MS4wZDY3YTRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNQorICAgIC0weDEuYmNiOGFhZmZmZmZkNjlkMjg2NWFhZjNmNGM1MDc0ZThwLTEsCisgICAgMHgxLmZiNjlhNmRjNTEzYmNiYTU5ZDVkYzY4ZDNkNTlhMDVjcC0yLAorICAgIC0weDEuMGQ2N2E0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzYKKyAgICAweDEuYmY2ODNjZmZmZmVjNmU4NjcyYTQ5ZjA4YWFlNDljNDZwLTEsCisgICAgMHgxLmYxZTBmNjUzZDY5NTk3N2NjZDI0MGZmNmI5Mjk3MzkzcC0yLAorICAgIDB4MS4xMDI0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzcKKyAgICAtMHgxLmJmNjgzY2ZmZmZlYzZlODY3MmE0OWYwOGFhZTQ5YzQ2cC0xLAorICAgIDB4MS5mMWUwZjY1M2Q2OTU5NzdjY2QyNDBmZjZiOTI5NzM5M3AtMiwKKyAgICAtMHgxLjEwMjRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOAorICAgIDB4MS44YjFlOGUxYzE2YThkOTcwYTc4YTIzOTFlZWE2NTc1Y3AtMSwKKyAgICAtMHgxLjQ1OWQ0NTAwMDAwMDkyYjRiODMwN2M2NTJlZTYzOWE3cC0xLAorICAgIDB4MS4yMTQ5N2VwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOQorICAgIC0weDEuOGIxZThlMWMxNmE4ZDk3MGE3OGEyMzkxZWVhNjU3NWNwLTEsCisgICAgLTB4MS40NTlkNDUwMDAwMDA5MmI0YjgzMDdjNjUyZWU2MzlhN3AtMSwKKyAgICAtMHgxLjIxNDk3ZXAxLAorICB9LAorICB7IC8vIEVudHJ5IDQwCisgICAgMHgxLjY5OTFlMGZmZTdmOWM5YjNlZjdiMzAxN2QyMzYzOWZhcC0xLAorICAgIC0weDEuNmE4MWM0MTMzZGI3M2UyNzZjODllNzI0YzZmZTk3NWJwLTEsCisgICAgMHgxLjJkYzIzMHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQxCisgICAgLTB4MS42OTkxZTBmZmU3ZjljOWIzZWY3YjMwMTdkMjM2MzlmYXAtMSwKKyAgICAtMHgxLjZhODFjNDEzM2RiNzNlMjc2Yzg5ZTcyNGM2ZmU5NzVicC0xLAorICAgIC0weDEuMmRjMjMwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDIKKyAgICAweDEuNDFmNmJkMDAwMGQxM2JhMmJkN2E2M2JmNmQ5NTA4NjVwLTEsCisgICAgLTB4MS44ZTE5N2ZlNGZhYzk5MDFkYzA3YTI4NzhiYWYxNWM3YXAtMSwKKyAgICAweDEuMzQ0MjQ4cDE4LAorICB9LAorICB7IC8vIEVudHJ5IDQzCisgICAgLTB4MS40MWY2YmQwMDAwZDEzYmEyYmQ3YTYzYmY2ZDk1MDg2NXAtMSwKKyAgICAtMHgxLjhlMTk3ZmU0ZmFjOTkwMWRjMDdhMjg3OGJhZjE1YzdhcC0xLAorICAgIC0weDEuMzQ0MjQ4cDE4LAorICB9LAorICB7IC8vIEVudHJ5IDQ0CisgICAgMHgxLjM3ZjhkZWZmZmZmZjYxY2ExNWMzNjZiM2FkZDhmMzczcC0xLAorICAgIC0weDEuOTVmYTIwZDIzMGZkZjllOGNjY2M1OTIxZTYxZjAzYWRwLTEsCisgICAgMHgxLjNlNDJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NQorICAgIC0weDEuMzdmOGRlZmZmZmZmNjFjYTE1YzM2NmIzYWRkOGYzNzNwLTEsCisgICAgLTB4MS45NWZhMjBkMjMwZmRmOWU4Y2NjYzU5MjFlNjFmMDNhZHAtMSwKKyAgICAtMHgxLjNlNDJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NgorICAgIDB4MS4yZWQ3Y2U1MThmNDY2MGNjZTQ5NTU2ODU2Nzg0OTcwY3AtMSwKKyAgICAweDEuOWNkNGYzMDAwMDAyMjY0YWYyYjMyZWJlNWQ4MjQzYzBwLTEsCisgICAgMHgxLjQ0MGMzYXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NworICAgIC0weDEuMmVkN2NlNTE4ZjQ2NjBjY2U0OTU1Njg1Njc4NDk3MGNwLTEsCisgICAgMHgxLjljZDRmMzAwMDAwMjI2NGFmMmIzMmViZTVkODI0M2MwcC0xLAorICAgIC0weDEuNDQwYzNhcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDQ4CisgICAgMHgxLjQ3NWZjOTM3NzUwYmRmMmY3MDQxNzc2MTJkMzFkYzFmcC0xLAorICAgIDB4MS44OWE5OTkwMDAwMTJjMDQ3ZTRiMjQxODFkNjE1ODY0MHAtMSwKKyAgICAweDEuNjMyZjZhcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDQ5CisgICAgLTB4MS40NzVmYzkzNzc1MGJkZjJmNzA0MTc3NjEyZDMxZGMxZnAtMSwKKyAgICAweDEuODlhOTk5MDAwMDEyYzA0N2U0YjI0MTgxZDYxNTg2NDBwLTEsCisgICAgLTB4MS42MzJmNmFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTAKKyAgICAtMHgxLjhhY2UxY2ZjYzBhNzY2YjM1ZDBlOGY0OGYzMTY5ZThhcC0xLAorICAgIC0weDEuNDVmZWM5NWE0MDYxOTgxOWUzMzA3YWViZTBjYjVlODlwLTEsCisgICAgMHgxLjZlOGYxOHAyNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MQorICAgIDB4MS44YWNlMWNmY2MwYTc2NmIzNWQwZThmNDhmMzE2OWU4YXAtMSwKKyAgICAtMHgxLjQ1ZmVjOTVhNDA2MTk4MTllMzMwN2FlYmUwY2I1ZTg5cC0xLAorICAgIC0weDEuNmU4ZjE4cDI0LAorICB9LAorICB7IC8vIEVudHJ5IDUyCisgICAgMHgxLjdjNmI5MmZmMjRmZjAyOGVhMzVjNDU5ZTVlYmViMmNkcC0xLAorICAgIDB4MS41NmFjMmFlNTRjYzlhNTIxMGFlNjczZWExY2UzMWQ0N3AtMSwKKyAgICAweDEuNzk1ODQwcDIzLAorICB9LAorICB7IC8vIEVudHJ5IDUzCisgICAgLTB4MS43YzZiOTJmZjI0ZmYwMjhlYTM1YzQ1OWU1ZWJlYjJjZHAtMSwKKyAgICAweDEuNTZhYzJhZTU0Y2M5YTUyMTBhZTY3M2VhMWNlMzFkNDdwLTEsCisgICAgLTB4MS43OTU4NDBwMjMsCisgIH0sCisgIHsgLy8gRW50cnkgNTQKKyAgICAweDEuNjk3Y2Y0ZmZlYTkyNDRlODVjZWE2NDBkMTNjNmZiYjVwLTEsCisgICAgLTB4MS42YTk2YTEwNmFjZTIxNjEwYWI1MjljOTA0N2M3ZTZlMnAtMSwKKyAgICAweDEuN2ZlN2ZlcDM1LAorICB9LAorICB7IC8vIEVudHJ5IDU1CisgICAgLTB4MS42OTdjZjRmZmVhOTI0NGU4NWNlYTY0MGQxM2M2ZmJiNXAtMSwKKyAgICAtMHgxLjZhOTZhMTA2YWNlMjE2MTBhYjUyOWM5MDQ3YzdlNmUycC0xLAorICAgIC0weDEuN2ZlN2ZlcDM1LAorICB9LAorICB7IC8vIEVudHJ5IDU2CisgICAgMHgxLjljNmNmMmZmZmZmZTg1ODg1MTJlYTNjODA4YjBmYTlmcC0xLAorICAgIDB4MS4yZjY1NjBlMGYxNGNkNWQ2ODkyMGJlYzBlMGMyNTM1NHAtMSwKKyAgICAweDEuY2UxMDI2cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTcKKyAgICAtMHgxLjljNmNmMmZmZmZmZTg1ODg1MTJlYTNjODA4YjBmYTlmcC0xLAorICAgIDB4MS4yZjY1NjBlMGYxNGNkNWQ2ODkyMGJlYzBlMGMyNTM1NHAtMSwKKyAgICAtMHgxLmNlMTAyNnAyLAorICB9LAorICB7IC8vIEVudHJ5IDU4CisgICAgLTB4MS4wN2ZhYzA0YzZlNzNmNDg1MDk2YmRhYTNlNjUwNDRkOXAtMSwKKyAgICAtMHgxLmI2YjM4N2ZmY2ViNjdhMThjMTVlODY4NTUwYjk2NDYycC0xLAorICAgIDB4MS5kNzc1ZDBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OQorICAgIDB4MS4wN2ZhYzA0YzZlNzNmNDg1MDk2YmRhYTNlNjUwNDRkOXAtMSwKKyAgICAtMHgxLmI2YjM4N2ZmY2ViNjdhMThjMTVlODY4NTUwYjk2NDYycC0xLAorICAgIC0weDEuZDc3NWQwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjAKKyAgICAweDEuOWE4YzYyZjRiMmE5NDliMDY5MjQ2NjJkOTQzNmJmMTdwLTEsCisgICAgMHgxLjMxZWU3MDc0ZTNlYmM1YTMwZjAwOTJlYzZjNWQ4YjgwcC0xLAorICAgIDB4MS5kZmVhYWFwMTA4LAorICB9LAorICB7IC8vIEVudHJ5IDYxCisgICAgLTB4MS45YThjNjJmNGIyYTk0OWIwNjkyNDY2MmQ5NDM2YmYxN3AtMSwKKyAgICAweDEuMzFlZTcwNzRlM2ViYzVhMzBmMDA5MmVjNmM1ZDhiODBwLTEsCisgICAgLTB4MS5kZmVhYWFwMTA4LAorICB9LAorICB7IC8vIEVudHJ5IDYyCisgICAgMHgxLmQ0ZGU4YWZmZmZmZmQ5NmY4M2JhNDQyZmRmMmY3MTAxcC0yLAorICAgIDB4MS5jNzJjZDRlMWQ2Yzc4NTQ3ZDMxNzA3YmU4MGI0YjBhZXAtMSwKKyAgICAweDEuZTcwNjFlcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDYzCisgICAgLTB4MS5kNGRlOGFmZmZmZmZkOTZmODNiYTQ0MmZkZjJmNzEwMXAtMiwKKyAgICAweDEuYzcyY2Q0ZTFkNmM3ODU0N2QzMTcwN2JlODBiNGIwYWVwLTEsCisgICAgLTB4MS5lNzA2MWVwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNjQKKyAgICAtMHgxLjQ4MzQ0NWQ0MTk0ODEzMTY4YTFhYzYzZWVlMTk0M2Y5cC0xLAorICAgIDB4MS44OGY4ODJmY2JjODFmZmRmNzIwYTRiYjFiMmZjYTcxZHAtMSwKKyAgICAweDEuZTg5YjJhcDgwLAorICB9LAorICB7IC8vIEVudHJ5IDY1CisgICAgMHgxLjQ4MzQ0NWQ0MTk0ODEzMTY4YTFhYzYzZWVlMTk0M2Y5cC0xLAorICAgIDB4MS44OGY4ODJmY2JjODFmZmRmNzIwYTRiYjFiMmZjYTcxZHAtMSwKKyAgICAtMHgxLmU4OWIyYXA4MCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NgorICAgIDB4MS41NjVlNDEwMDE0OTE2ZmE2NTUwZTYwNmVkNTg4YzZiOHAtMSwKKyAgICAweDEuN2NiMWIzNGFmODU1ODliZGFmN2MwNzkzYWYzMGI2ODJwLTEsCisgICAgMHgxLmZlODI3MHAxOCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NworICAgIC0weDEuNTY1ZTQxMDAxNDkxNmZhNjU1MGU2MDZlZDU4OGM2YjhwLTEsCisgICAgMHgxLjdjYjFiMzRhZjg1NTg5YmRhZjdjMDc5M2FmMzBiNjgycC0xLAorICAgIC0weDEuZmU4MjcwcDE4LAorICB9LAorICB7IC8vIEVudHJ5IDY4CisgICAgLTB4MS44MzU2ZmJhZWEwNDU0YmNlMzk4M2Q5YTBlMDI1MGM1NXAtMSwKKyAgICAtMHgxLjRlZDRjNWZmYzgwMTg3NDE4NzA5NDk3NjdmZjhkYWZhcC0xLAorICAgIDB4MS5mZmYxZmVwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OQorICAgIDB4MS44MzU2ZmJhZWEwNDU0YmNlMzk4M2Q5YTBlMDI1MGM1NXAtMSwKKyAgICAtMHgxLjRlZDRjNWZmYzgwMTg3NDE4NzA5NDk3NjdmZjhkYWZhcC0xLAorICAgIC0weDEuZmZmMWZlcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNzAKKyAgICAweDEuZmE5ZDZiZmIzM2E3N2IyZTNiMzI4OTE2OGNlZDZkY2FwLTEsCisgICAgLTB4MS4yODQwNmEwMDI1NTQ1YzlhNTY4ZGFjZDQ1NTE4ZGQ2NXAtMywKKyAgICAweDEuZmZmMWZlcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNzEKKyAgICAtMHgxLmZhOWQ2YmZiMzNhNzdiMmUzYjMyODkxNjhjZWQ2ZGNhcC0xLAorICAgIC0weDEuMjg0MDZhMDAyNTU0NWM5YTU2OGRhY2Q0NTUxOGRkNjVwLTMsCisgICAgLTB4MS5mZmYxZmVwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MgorICAgIDB4MS5kMThmNzZmZmM2ZTRiYTBhMzEzNGU1YmUyMWI1YmM4ZnAtMSwKKyAgICAtMHgxLmFhMjI0MTE2MDIyNzg5NmM2OGVmMTc4MzlmMTdkY2U1cC0yLAorICAgIDB4MS5mZmZmZjZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MworICAgIC0weDEuZDE4Zjc2ZmZjNmU0YmEwYTMxMzRlNWJlMjFiNWJjOGZwLTEsCisgICAgLTB4MS5hYTIyNDExNjAyMjc4OTZjNjhlZjE3ODM5ZjE3ZGNlNXAtMiwKKyAgICAtMHgxLmZmZmZmNnAwLAorICB9LAorICB7IC8vIEVudHJ5IDc0CisgICAgMHgxLmZmZmZmYWFhYWFiMmVlZWVkYzNkYzNmMWVlN2I0MWZlcC0xMiwKKyAgICAweDEuZmZmZmZjMDAwMDExNTU1NTNhN2QyN2Y0YTI4OWYzMTlwLTEsCisgICAgMHgxLmZmZmZmY3AtMTIsCisgIH0sCisgIHsgLy8gRW50cnkgNzUKKyAgICAtMHgxLmZmZmZmYWFhYWFiMmVlZWVkYzNkYzNmMWVlN2I0MWZlcC0xMiwKKyAgICAweDEuZmZmZmZjMDAwMDExNTU1NTNhN2QyN2Y0YTI4OWYzMTlwLTEsCisgICAgLTB4MS5mZmZmZmNwLTEyLAorICB9LAorICB7IC8vIEVudHJ5IDc2CisgICAgLTAuMGYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xNDksCisgIH0sCisgIHsgLy8gRW50cnkgNzcKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEucC0xNDksCisgIH0sCisgIHsgLy8gRW50cnkgNzgKKyAgICAwLjAsCisgICAgMHgxLnAwLAorICAgIDAuMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OQorICAgIDAuMGYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5wLTE0OSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MAorICAgIC0wLjBmLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLnAtMTQ5LAorICB9LAorICB7IC8vIEVudHJ5IDgxCisgICAgLTB4MS4wMDAwMDFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI2LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjAwMDAwMnAtMTI2LAorICB9LAorICB7IC8vIEVudHJ5IDgyCisgICAgMHgxLjAwMDAwMWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wMDAwMDJwLTEyNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MworICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5wLTEyNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI3LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEucC0xMjYsCisgIH0sCisgIHsgLy8gRW50cnkgODUKKyAgICAtMHgxLmZmZmZmYmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuZmZmZmZjcC0xMjcsCisgIH0sCisgIHsgLy8gRW50cnkgODYKKyAgICAweDEuZmZmZmZiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLmZmZmZmY3AtMTI3LAorICB9LAorICB7IC8vIEVudHJ5IDg3CisgICAgMHgxLmZmZmZmYmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5mZmZmZmNwLTEyNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OAorICAgIC0weDEuZmZmZmZiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5mZmZmZmNwLTEyNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI3LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEucC0xMjYsCisgIH0sCisgIHsgLy8gRW50cnkgOTAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xMjYsCisgIH0sCisgIHsgLy8gRW50cnkgOTEKKyAgICAweDEuMDAwMDAxZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjAwMDAwMnAtMTI2LAorICB9LAorICB7IC8vIEVudHJ5IDkyCisgICAgLTB4MS4wMDAwMDFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI2LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjAwMDAwMnAtMTI2LAorICB9LAorICB7IC8vIEVudHJ5IDkzCisgICAgMHgxLjk5OTk5OWQ0NGYzMDU4Yzc4OTAxNGI3ZDBlMjJmZWMzcC0xMywKKyAgICAweDEuZmZmZmZmNWMyOGY1Nzk2MGNkNTZlYmZlOTQ4MmE2MWZwLTEsCisgICAgMHgxLjk5OTk5YXAtMTMsCisgIH0sCisgIHsgLy8gRW50cnkgOTQKKyAgICAtMHgxLjk5OTk5OWQ0NGYzMDU4Yzc4OTAxNGI3ZDBlMjJmZWMzcC0xMywKKyAgICAweDEuZmZmZmZmNWMyOGY1Nzk2MGNkNTZlYmZlOTQ4MmE2MWZwLTEsCisgICAgLTB4MS45OTk5OWFwLTEzLAorICB9LAorICB7IC8vIEVudHJ5IDk1CisgICAgMHgxLjk5OTk5OTUxM2NjMTczZTUxYmI5OTU1YjA2NmYxZGI4cC0xMiwKKyAgICAweDEuZmZmZmZkNzBhM2Q2NGU1ZWMxNjVjZDQzMDdhZDEzMjZwLTEsCisgICAgMHgxLjk5OTk5YXAtMTIsCisgIH0sCisgIHsgLy8gRW50cnkgOTYKKyAgICAtMHgxLjk5OTk5OTUxM2NjMTczZTUxYmI5OTU1YjA2NmYxZGI4cC0xMiwKKyAgICAweDEuZmZmZmZkNzBhM2Q2NGU1ZWMxNjVjZDQzMDdhZDEzMjZwLTEsCisgICAgLTB4MS45OTk5OWFwLTEyLAorICB9LAorICB7IC8vIEVudHJ5IDk3CisgICAgMHgxLjMzMzMzMmQ5MTY4NTMyMWU1ZmMzOTdkMjBhNWFmMWU2cC0xMSwKKyAgICAweDEuZmZmZmZhM2Q3MDllZWNiZmI1YTM4NWIwZjNlMGNiOGZwLTEsCisgICAgMHgxLjMzMzMzNHAtMTEsCisgIH0sCisgIHsgLy8gRW50cnkgOTgKKyAgICAtMHgxLjMzMzMzMmQ5MTY4NTMyMWU1ZmMzOTdkMjBhNWFmMWU2cC0xMSwKKyAgICAweDEuZmZmZmZhM2Q3MDllZWNiZmI1YTM4NWIwZjNlMGNiOGZwLTEsCisgICAgLTB4MS4zMzMzMzRwLTExLAorICB9LAorICB7IC8vIEVudHJ5IDk5CisgICAgMHgxLjk5OTk5NzQ0ZjMwNmRjMDNlOWVmNzA4OTdmNzgyOTllcC0xMSwKKyAgICAweDEuZmZmZmY1YzI4ZjVmYzczM2M0MjAyYWEwYmRhOTJmOTdwLTEsCisgICAgMHgxLjk5OTk5YXAtMTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTAwCisgICAgLTB4MS45OTk5OTc0NGYzMDZkYzAzZTllZjcwODk3Zjc4Mjk5ZXAtMTEsCisgICAgMHgxLmZmZmZmNWMyOGY1ZmM3MzNjNDIwMmFhMGJkYTkyZjk3cC0xLAorICAgIC0weDEuOTk5OTlhcC0xMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEKKyAgICAweDEuZmZmZmZhYWFhYWFlZWVlZWVkNGVkNGVkYWI0YzdiZDZwLTExLAorICAgIDB4MS5mZmZmZjAwMDAwMTU1NTU1NDlmNDlmNGQzNGQzNGNhMHAtMSwKKyAgICAweDEucC0xMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIKKyAgICAtMHgxLmZmZmZmYWFhYWFhZWVlZWVlZDRlZDRlZGFiNGM3YmQ2cC0xMSwKKyAgICAweDEuZmZmZmYwMDAwMDE1NTU1NTQ5ZjQ5ZjRkMzRkMzRjYTBwLTEsCisgICAgLTB4MS5wLTEwLAorICB9LAorICB7IC8vIEVudHJ5IDEwMworICAgIDB4MS4zMzMzMmY2NDVhMThjM2IwY2NmYzBhM2NmN2IyZTkxYnAtMTAsCisgICAgMHgxLmZmZmZlOGY1YzI5Y2UwNzY0MGJkNWY2ZDhiYjFlYTZicC0xLAorICAgIDB4MS4zMzMzMzRwLTEwLAorICB9LAorICB7IC8vIEVudHJ5IDEwNAorICAgIC0weDEuMzMzMzJmNjQ1YTE4YzNiMGNjZmMwYTNjZjdiMmU5MWJwLTEwLAorICAgIDB4MS5mZmZmZThmNWMyOWNlMDc2NDBiZDVmNmQ4YmIxZWE2YnAtMSwKKyAgICAtMHgxLjMzMzMzNHAtMTAsCisgIH0sCisgIHsgLy8gRW50cnkgMTA1CisgICAgMHgxLjY2NjY2MGFlYzMzMDgyMWM3YTEwMGNmNDg4YzM4MGVicC0xMCwKKyAgICAweDEuZmZmZmUwYTNkNzE0ODM5ZjM2MDExNDdhZGE3M2Y4ZDlwLTEsCisgICAgMHgxLjY2NjY2OHAtMTAsCisgIH0sCisgIHsgLy8gRW50cnkgMTA2CisgICAgLTB4MS42NjY2NjBhZWMzMzA4MjFjN2ExMDBjZjQ4OGMzODBlYnAtMTAsCisgICAgMHgxLmZmZmZlMGEzZDcxNDgzOWYzNjAxMTQ3YWRhNzNmOGQ5cC0xLAorICAgIC0weDEuNjY2NjY4cC0xMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcKKyAgICAweDEuOTk5OTkxMTNjYzAzNDE0NGZkYmRjOGExZGM3MTMyNTNwLTEwLAorICAgIDB4MS5mZmZmZDcwYTNkODE5MWY2NmRlNTQwOGZiMmI5OTVhMHAtMSwKKyAgICAweDEuOTk5OTljcC0xMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgKKyAgICAtMHgxLjk5OTk5MTEzY2MwMzQxNDRmZGJkYzhhMWRjNzEzMjUzcC0xMCwKKyAgICAweDEuZmZmZmQ3MGEzZDgxOTFmNjZkZTU0MDhmYjJiOTk1YTBwLTEsCisgICAgLTB4MS45OTk5OWNwLTEwLAorICB9LAorICB7IC8vIEVudHJ5IDEwOQorICAgIDB4MS5jY2NjYmM3MmIwNWRkMDk1MWE5YzVlNjU1NjBjNTZlM3AtMTAsCisgICAgMHgxLmZmZmZjYzI4ZjZkMDk2Yjg3ZDZkMTlhMDZlOTY5OTlicC0xLAorICAgIDB4MS5jY2NjY2NwLTEwLAorICB9LAorICB7IC8vIEVudHJ5IDExMAorICAgIC0weDEuY2NjY2JjNzJiMDVkZDA5NTFhOWM1ZTY1NTYwYzU2ZTNwLTEwLAorICAgIDB4MS5mZmZmY2MyOGY2ZDA5NmI4N2Q2ZDE5YTA2ZTk2OTk5YnAtMSwKKyAgICAtMHgxLmNjY2NjY3AtMTAsCisgIH0sCisgIHsgLy8gRW50cnkgMTExCisgICAgMHgxLjA2NjVhZTM2MTViNWI3ZGU1Mjc5ODA2NGRmYzU5YjI5cC03LAorICAgIDB4MS5mZmZiY2MyYTcxY2VhYWJmNTU4MmI2ZGExZmMzMDUzMXAtMSwKKyAgICAweDEuMDY2NjY2cC03LAorICB9LAorICB7IC8vIEVudHJ5IDExMgorICAgIC0weDEuMDY2NWFlMzYxNWI1YjdkZTUyNzk4MDY0ZGZjNTliMjlwLTcsCisgICAgMHgxLmZmZmJjYzJhNzFjZWFhYmY1NTgyYjZkYTFmYzMwNTMxcC0xLAorICAgIC0weDEuMDY2NjY2cC03LAorICB9LAorICB7IC8vIEVudHJ5IDExMworICAgIDB4MS5jY2M4ZThhZTkyNTg2ZDhkNjZiNmFkMGFlZGNiMGQ5NHAtNywKKyAgICAweDEuZmZmMzBhNGI3YjUxMTlkOGUyOTlmNzE3ZWMwZWNlMTZwLTEsCisgICAgMHgxLmNjY2NjY3AtNywKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQKKyAgICAtMHgxLmNjYzhlOGFlOTI1ODZkOGQ2NmI2YWQwYWVkY2IwZDk0cC03LAorICAgIDB4MS5mZmYzMGE0YjdiNTExOWQ4ZTI5OWY3MTdlYzBlY2UxNnAtMSwKKyAgICAtMHgxLmNjY2NjY3AtNywKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUKKyAgICAweDEuNDk5M2U3MGY3YjE3YzEwYWY5Zjk3ZmM3YjMzYjgyMmJwLTYsCisgICAgMHgxLmZmZTU3YTc4NTEyMzIyNmMxZTJlZmI0MTEzNTNlZGM5cC0xLAorICAgIDB4MS40OTk5OThwLTYsCisgIH0sCisgIHsgLy8gRW50cnkgMTE2CisgICAgLTB4MS40OTkzZTcwZjdiMTdjMTBhZjlmOTdmYzdiMzNiODIyYnAtNiwKKyAgICAweDEuZmZlNTdhNzg1MTIzMjI2YzFlMmVmYjQxMTM1M2VkYzlwLTEsCisgICAgLTB4MS40OTk5OThwLTYsCisgIH0sCisgIHsgLy8gRW50cnkgMTE3CisgICAgMHgxLmFjYzA0M2Y4YjJkODlhZDUxNDNjMDMwZTk3NjZmYzExcC02LAorICAgIDB4MS5mZmQzMWNkMTBjYjYzMmQ5NzMzYWM1ZjVmMzI3YTVmOXAtMSwKKyAgICAweDEuYWNjY2NjcC02LAorICB9LAorICB7IC8vIEVudHJ5IDExOAorICAgIC0weDEuYWNjMDQzZjhiMmQ4OWFkNTE0M2MwMzBlOTc2NmZjMTFwLTYsCisgICAgMHgxLmZmZDMxY2QxMGNiNjMyZDk3MzNhYzVmNWYzMjdhNWY5cC0xLAorICAgIC0weDEuYWNjY2NjcC02LAorICB9LAorICB7IC8vIEVudHJ5IDExOQorICAgIDB4MS4wN2Y0NGQ2N2NmNDFhZmJjMGM5NTEwOGI5OWY5MWIwMXAtNSwKKyAgICAweDEuZmZiYmYxODIwNzU0MmVmODEzOTBkNzNjM2JhODljMWFwLTEsCisgICAgMHgxLjA4cC01LAorICB9LAorICB7IC8vIEVudHJ5IDEyMAorICAgIC0weDEuMDdmNDRkNjdjZjQxYWZiYzBjOTUxMDhiOTlmOTFiMDFwLTUsCisgICAgMHgxLmZmYmJmMTgyMDc1NDJlZjgxMzkwZDczYzNiYTg5YzFhcC0xLAorICAgIC0weDEuMDhwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMTIxCisgICAgMHgxLjM5ODVmZWFkNDRmYTJiODUxZTY1MWFjYmEzNjlkNzY5cC01LAorICAgIDB4MS5mZjlmZjhjMmVhZWFlZTMwZmIyMTE3NjVhZjgzNTE3MXAtMSwKKyAgICAweDEuMzk5OTlhcC01LAorICB9LAorICB7IC8vIEVudHJ5IDEyMgorICAgIC0weDEuMzk4NWZlYWQ0NGZhMmI4NTFlNjUxYWNiYTM2OWQ3NjlwLTUsCisgICAgMHgxLmZmOWZmOGMyZWFlYWVlMzBmYjIxMTc2NWFmODM1MTcxcC0xLAorICAgIC0weDEuMzk5OTlhcC01LAorICB9LAorICB7IC8vIEVudHJ5IDEyMworICAgIDB4MS42YjE0YmViNWQ0MGQ3NDUwOTYyNDdlNTliNjIyODI4YnAtNSwKKyAgICAweDEuZmY3ZjMyZDZlYjFmOWNmOTAyMjZlYzI5MWM5ZTA5MjJwLTEsCisgICAgMHgxLjZiMzMzNHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQKKyAgICAtMHgxLjZiMTRiZWI1ZDQwZDc0NTA5NjI0N2U1OWI2MjI4MjhicC01LAorICAgIDB4MS5mZjdmMzJkNmViMWY5Y2Y5MDIyNmVjMjkxYzllMDkyMnAtMSwKKyAgICAtMHgxLjZiMzMzNHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUKKyAgICAweDEuOWNhMDE2NzFhNzk5NWZjOTdjZWJkNjk3MjljYzQzMDlwLTUsCisgICAgMHgxLmZmNTlhMDBjYzRhZDQ5MmNhMjU5NzQ5NTQxMjk5OGVkcC0xLAorICAgIDB4MS45Y2NjY2VwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMTI2CisgICAgLTB4MS45Y2EwMTY3MWE3OTk1ZmM5N2NlYmQ2OTcyOWNjNDMwOXAtNSwKKyAgICAweDEuZmY1OWEwMGNjNGFkNDkyY2EyNTk3NDk1NDEyOTk4ZWRwLTEsCisgICAgLTB4MS45Y2NjY2VwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMTI3CisgICAgMHgxLmNlMjc4Y2Q5ZWIyY2JkMGM2YTRlMTI3OWY2OTBlODU2cC01LAorICAgIDB4MS5mZjJmNDBjMDhhY2Y0NTgwYThkMTMzODBkOTA3MzM5OHAtMSwKKyAgICAweDEuY2U2NjY2cC01LAorICB9LAorICB7IC8vIEVudHJ5IDEyOAorICAgIC0weDEuY2UyNzhjZDllYjJjYmQwYzZhNGUxMjc5ZjY5MGU4NTZwLTUsCisgICAgMHgxLmZmMmY0MGMwOGFjZjQ1ODBhOGQxMzM4MGQ5MDczMzk4cC0xLAorICAgIC0weDEuY2U2NjY2cC01LAorICB9LAorICB7IC8vIEVudHJ5IDEyOQorICAgIDB4MS40M2MxZTk5NzIzOTFhYThlY2Q4YTljY2JhOTA3OTIwYXAtMSwKKyAgICAweDEuOGNhNDZjYTAxMTc3MWJmYWUwZDllZGJmMWRhY2I0MDJwLTEsCisgICAgMHgxLjVlN2ZjNHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAKKyAgICAtMHgxLjQzYzFlOTk3MjM5MWFhOGVjZDhhOWNjYmE5MDc5MjBhcC0xLAorICAgIDB4MS44Y2E0NmNhMDExNzcxYmZhZTBkOWVkYmYxZGFjYjQwMnAtMSwKKyAgICAtMHgxLjVlN2ZjNHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzEKKyAgICAweDEuZWUzZDZiYjIxYzY0YjIzODJlZmNmZjBjZGYzMGNlMGJwLTEsCisgICAgMHgxLjBiNWQzOGQ1ZDgyZTRhNzYyNGRhYzRlMTBjZTE1OWMycC0yLAorICAgIDB4MS40ZTdmYzRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzIKKyAgICAtMHgxLmVlM2Q2YmIyMWM2NGIyMzgyZWZjZmYwY2RmMzBjZTBicC0xLAorICAgIDB4MS4wYjVkMzhkNWQ4MmU0YTc2MjRkYWM0ZTEwY2UxNTljMnAtMiwKKyAgICAtMHgxLjRlN2ZjNHAwLAorICB9LAorICB7IC8vIEVudHJ5IDEzMworICAgIDB4MS5kZjhlMjMyM2U0YmYxYTUzOGExMDBlYzFiZjM0OTRhOXAtMSwKKyAgICAtMHgxLjY2Yjk2ZTIwNGU2OWNkYThlOWNmNTA5OTY0MzI1MzllcC0yLAorICAgIDB4MS5lZGJmYTZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQKKyAgICAtMHgxLmRmOGUyMzIzZTRiZjFhNTM4YTEwMGVjMWJmMzQ5NGE5cC0xLAorICAgIC0weDEuNjZiOTZlMjA0ZTY5Y2RhOGU5Y2Y1MDk5NjQzMjUzOWVwLTIsCisgICAgLTB4MS5lZGJmYTZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUKKyAgICAweDEuMWQzNDdhYTAyZmViM2JiMTc1MGQyNTUwOTQzNWRhODhwLTEsCisgICAgLTB4MS5hOTM1NTQwZWRlY2E0YzIyMGVkOTFkYzU0ODFlNGQ5YnAtMSwKKyAgICAweDEuNDY3ZmM0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTM2CisgICAgLTB4MS4xZDM0N2FhMDJmZWIzYmIxNzUwZDI1NTA5NDM1ZGE4OHAtMSwKKyAgICAtMHgxLmE5MzU1NDBlZGVjYTRjMjIwZWQ5MWRjNTQ4MWU0ZDlicC0xLAorICAgIC0weDEuNDY3ZmM0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTM3CisgICAgLTB4MS5mZmVhMDhlMWM5N2Y0YzRkZTAxOTYxY2MzZTdiMDRkY3AtNiwKKyAgICAtMHgxLmZmYzAwMTdkZDkyMDlkZDg4OTFmMTdmZTRjOWVlZTQ2cC0xLAorICAgIDB4MS45NjFmYjRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzgKKyAgICAweDEuZmZlYTA4ZTFjOTdmNGM0ZGUwMTk2MWNjM2U3YjA0ZGNwLTYsCisgICAgLTB4MS5mZmMwMDE3ZGQ5MjA5ZGQ4ODkxZjE3ZmU0YzllZWU0NnAtMSwKKyAgICAtMHgxLjk2MWZiNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDEzOQorICAgIC0weDEuMzczNGNiY2VkOWMwZjQ4NGU1Zjc2MmUwMDIxNmU2MjBwLTEsCisgICAgLTB4MS45NjkwODIwMDc3MzNkNzg3ZjRjMzZiYTBmOTQyNTY5NHAtMSwKKyAgICAweDEuZTViZmE0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTQwCisgICAgMHgxLjM3MzRjYmNlZDljMGY0ODRlNWY3NjJlMDAyMTZlNjIwcC0xLAorICAgIC0weDEuOTY5MDgyMDA3NzMzZDc4N2Y0YzM2YmEwZjk0MjU2OTRwLTEsCisgICAgLTB4MS5lNWJmYTRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDEKKyAgICAtMHgxLmU5ZDI1OTJiZWMxMGMzYWNiMTVjNTg1MjIzOWEyYWE4cC0xLAorICAgIC0weDEuMmExZTc0MjIzZDliZGRiN2RiNTlmNzgxZjk2YjY1ZWNwLTIsCisgICAgMHgxLjFhYWZjYXAyLAorICB9LAorICB7IC8vIEVudHJ5IDE0MgorICAgIDB4MS5lOWQyNTkyYmVjMTBjM2FjYjE1YzU4NTIyMzlhMmFhOHAtMSwKKyAgICAtMHgxLjJhMWU3NDIyM2Q5YmRkYjdkYjU5Zjc4MWY5NmI2NWVjcC0yLAorICAgIC0weDEuMWFhZmNhcDIsCisgIH0sCisgIHsgLy8gRW50cnkgMTQzCisgICAgLTB4MS5lNGVjZTIwOGQwYzQ5MTNhYjAxOWNhYjBjZTljNzg1ZXAtMSwKKyAgICAweDEuNDg5NGQ1MGI4NGRiYzk4MTEzNGE1OTFhYzQxNjVkOWVwLTIsCisgICAgMHgxLjQyN2ZjMnAyLAorICB9LAorICB7IC8vIEVudHJ5IDE0NAorICAgIDB4MS5lNGVjZTIwOGQwYzQ5MTNhYjAxOWNhYjBjZTljNzg1ZXAtMSwKKyAgICAweDEuNDg5NGQ1MGI4NGRiYzk4MTEzNGE1OTFhYzQxNjVkOWVwLTIsCisgICAgLTB4MS40MjdmYzJwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDUKKyAgICAtMHgxLjJhNWEwMmQzOTJiNTRmNjQxYTBkODhiZDRhYzZjMmUxcC0xLAorICAgIDB4MS5hMDE2ZGQ3NDgwYTFlZWE0ZDQ5ZWZiNTg1ZmE0OWM4NnAtMSwKKyAgICAweDEuNmE0ZmJhcDIsCisgIH0sCisgIHsgLy8gRW50cnkgMTQ2CisgICAgMHgxLjJhNWEwMmQzOTJiNTRmNjQxYTBkODhiZDRhYzZjMmUxcC0xLAorICAgIDB4MS5hMDE2ZGQ3NDgwYTFlZWE0ZDQ5ZWZiNTg1ZmE0OWM4NnAtMSwKKyAgICAtMHgxLjZhNGZiYXAyLAorICB9LAorICB7IC8vIEVudHJ5IDE0NworICAgIC0weDEuMjYzMTIzZGYyMmQxM2VkMzI5YzY2NWM4M2MwZTcxZThwLTEsCisgICAgMHgxLmEzMGE2YTNiZjRhM2UyYjdlMjc2NjZkM2E5YzNiNzRicC0xLAorICAgIDB4MS42YWYyZjBwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDgKKyAgICAweDEuMjYzMTIzZGYyMmQxM2VkMzI5YzY2NWM4M2MwZTcxZThwLTEsCisgICAgMHgxLmEzMGE2YTNiZjRhM2UyYjdlMjc2NjZkM2E5YzNiNzRicC0xLAorICAgIC0weDEuNmFmMmYwcDIsCisgIH0sCisgIHsgLy8gRW50cnkgMTQ5CisgICAgLTB4MS5lMThlNjdiNTA4ZmZjOWU0MmY2YzllNzJmOGU1NDVmM3AtMSwKKyAgICAweDEuNWJkNjI1NTA0MDE1Y2NjMTAxZTRmNDM0MGQ0Yjc2MmJwLTIsCisgICAgMHgxLjQzYzYyYXAyLAorICB9LAorICB7IC8vIEVudHJ5IDE1MAorICAgIDB4MS5lMThlNjdiNTA4ZmZjOWU0MmY2YzllNzJmOGU1NDVmM3AtMSwKKyAgICAweDEuNWJkNjI1NTA0MDE1Y2NjMTAxZTRmNDM0MGQ0Yjc2MmJwLTIsCisgICAgLTB4MS40M2M2MmFwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTEKKyAgICAtMHgxLmVlMGU4MGVjOWQxNTYyYzE3YTZjZjYwOGFmOWIwZWQ0cC0xLAorICAgIC0weDEuMGNiNzMzNDQ4YzMwZWUzZGRmZmI0ZGE2OWYwYjM4NDJwLTIsCisgICAgMHgxLjFjOTk2NHAyLAorICB9LAorICB7IC8vIEVudHJ5IDE1MgorICAgIDB4MS5lZTBlODBlYzlkMTU2MmMxN2E2Y2Y2MDhhZjliMGVkNHAtMSwKKyAgICAtMHgxLjBjYjczMzQ0OGMzMGVlM2RkZmZiNGRhNjlmMGIzODQycC0yLAorICAgIC0weDEuMWM5OTY0cDIsCisgIH0sCisgIHsgLy8gRW50cnkgMTUzCisgICAgLTB4MS40NzI3Njg2MzdlYTg4NjZhNjUyMDk4YTQzYWE2ODhhNnAtMSwKKyAgICAtMHgxLjg5ZDg3NGFkMzBlM2ZiNDYyNDRkYWEyNDQ1MTY5MGQ3cC0xLAorICAgIDB4MS5lYWQ5M2NwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTQKKyAgICAweDEuNDcyNzY4NjM3ZWE4ODY2YTY1MjA5OGE0M2FhNjg4YTZwLTEsCisgICAgLTB4MS44OWQ4NzRhZDMwZTNmYjQ2MjQ0ZGFhMjQ0NTE2OTBkN3AtMSwKKyAgICAtMHgxLmVhZDkzY3AxLAorICB9LAorICB7IC8vIEVudHJ5IDE1NQorICAgIC0weDEuNGJhMjRmNjMyNWYyMTQyMGU3YzQ4ZDRmOTFlMjgwNjRwLTQsCisgICAgLTB4MS5mZTUxYWUwOWYwZDM5ZWQ1NTRlNjhiZWYzZTJmOGEwM3AtMSwKKyAgICAweDEuOWM3ZmIwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTU2CisgICAgMHgxLjRiYTI0ZjYzMjVmMjE0MjBlN2M0OGQ0ZjkxZTI4MDY0cC00LAorICAgIC0weDEuZmU1MWFlMDlmMGQzOWVkNTU0ZTY4YmVmM2UyZjhhMDNwLTEsCisgICAgLTB4MS45YzdmYjBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTcKKyAgICAweDEuMDM0YzY0MzI5NTE1M2FhZmZlNWQ5YTBmMjllOTI4NDRwLTEsCisgICAgLTB4MS5iOTdiZjc2YWU3NjVlYjY5Y2Y1NWU4MGFhZTk3NzMwM3AtMSwKKyAgICAweDEuNGUyNjI0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTU4CisgICAgLTB4MS4wMzRjNjQzMjk1MTUzYWFmZmU1ZDlhMGYyOWU5Mjg0NHAtMSwKKyAgICAtMHgxLmI5N2JmNzZhZTc2NWViNjljZjU1ZTgwYWFlOTc3MzAzcC0xLAorICAgIC0weDEuNGUyNjI0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTU5CisgICAgMHgxLmQxZTRkOTZlYWM5MTc1NzRiOTQ4ZTRlYTllMzdiMzZkcC0xLAorICAgIC0weDEuYThhYzU3OTNlMzI2MjliMTMxOTg0ZWNmZmQyZDBmMzFwLTIsCisgICAgMHgxLmZmOTkzMnAwLAorICB9LAorICB7IC8vIEVudHJ5IDE2MAorICAgIC0weDEuZDFlNGQ5NmVhYzkxNzU3NGI5NDhlNGVhOWUzN2IzNmRwLTEsCisgICAgLTB4MS5hOGFjNTc5M2UzMjYyOWIxMzE5ODRlY2ZmZDJkMGYzMXAtMiwKKyAgICAtMHgxLmZmOTkzMnAwLAorICB9LAorICB7IC8vIEVudHJ5IDE2MQorICAgIDB4MS5mNzUwMWUwMDJiY2FmYjg5N2Y5MzE5MzFkM2E1N2FmZHAtMSwKKyAgICAweDEuNzdhOTJjYTAxYmM3OWMxOTVkZGEzMzczNjgwN2Y5ODZwLTMsCisgICAgMHgxLjYyZTYxY3AwLAorICB9LAorICB7IC8vIEVudHJ5IDE2MgorICAgIC0weDEuZjc1MDFlMDAyYmNhZmI4OTdmOTMxOTMxZDNhNTdhZmRwLTEsCisgICAgMHgxLjc3YTkyY2EwMWJjNzljMTk1ZGRhMzM3MzY4MDdmOTg2cC0zLAorICAgIC0weDEuNjJlNjFjcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTYzCisgICAgMHgxLjY1ZjdkNjZlZjY1OTFjZmM1MWFiMjlkYzIwODZkM2U3cC0xLAorICAgIDB4MS42ZTEwNjAyODJjMTQ4OGQ5YWJkODNkYTFkNjhjZDBmN3AtMSwKKyAgICAweDEuOGM2NjJjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDE2NAorICAgIC0weDEuNjVmN2Q2NmVmNjU5MWNmYzUxYWIyOWRjMjA4NmQzZTdwLTEsCisgICAgMHgxLjZlMTA2MDI4MmMxNDg4ZDlhYmQ4M2RhMWQ2OGNkMGY3cC0xLAorICAgIC0weDEuOGM2NjJjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDE2NQorICAgIC0weDEuZmUwNDNmODc1YzZlZDRhMmMxYjhkNjlhMDlmY2Y1NzhwLTEsCisgICAgLTB4MS42ODJmMmJiODdhOGY1MDExNzM1MDk0MTc2YzliNmRhY3AtNCwKKyAgICAtMHgxLmE4YWExY3AwLAorICB9LAorICB7IC8vIEVudHJ5IDE2NgorICAgIDB4MS5mZTA0M2Y4NzVjNmVkNGEyYzFiOGQ2OWEwOWZjZjU3OHAtMSwKKyAgICAtMHgxLjY4MmYyYmI4N2E4ZjUwMTE3MzUwOTQxNzZjOWI2ZGFjcC00LAorICAgIDB4MS5hOGFhMWNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjcKKyAgICAtMHgxLmZmZjE4ZjMxM2U2NmYxYWUyNWY4OWE1ZjdhMWY4NGM0cC0xLAorICAgIC0weDEuZTY2NWNiMmFmODQyYmU1YmE1ZjY1OTYwNTk5YTk3ZWNwLTcsCisgICAgLTB4MS45NWVjOGFwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjgKKyAgICAweDEuZmZmMThmMzEzZTY2ZjFhZTI1Zjg5YTVmN2ExZjg0YzRwLTEsCisgICAgLTB4MS5lNjY1Y2IyYWY4NDJiZTViYTVmNjU5NjA1OTlhOTdlY3AtNywKKyAgICAweDEuOTVlYzhhcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTY5CisgICAgLTB4MS5mZjIwZDkyMGI5ZTljMjMxNTRmOTdlMmYzNDJhMjg4NHAtMSwKKyAgICAweDEuZGRkMjMxNTAxYjEyZmNmMmJjMjA2MzNiZTRkNTFlNTFwLTUsCisgICAgLTB4MS44MzJlZjhwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzAKKyAgICAweDEuZmYyMGQ5MjBiOWU5YzIzMTU0Zjk3ZTJmMzQyYTI4ODRwLTEsCisgICAgMHgxLmRkZDIzMTUwMWIxMmZjZjJiYzIwNjMzYmU0ZDUxZTUxcC01LAorICAgIDB4MS44MzJlZjhwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzEKKyAgICAtMHgxLmZiOTMzYjg5ZDdkYjMyODZlZWQwY2ZlYWJlZTk4ODc1cC0xLAorICAgIDB4MS4wY2FiYTY5OTc2OTFhYjE5NzBkNDNjNzQxOWVkNTFlMXAtMywKKyAgICAtMHgxLjcwNzE2NnAwLAorICB9LAorICB7IC8vIEVudHJ5IDE3MgorICAgIDB4MS5mYjkzM2I4OWQ3ZGIzMjg2ZWVkMGNmZWFiZWU5ODg3NXAtMSwKKyAgICAweDEuMGNhYmE2OTk3NjkxYWIxOTcwZDQzYzc0MTllZDUxZTFwLTMsCisgICAgMHgxLjcwNzE2NnAwLAorICB9LAorICB7IC8vIEVudHJ5IDE3MworICAgIC0weDEuZjU0ZDk1YzUwNThiN2RjOTk3MmFiNmY5OTI4Y2EwNDNwLTEsCisgICAgMHgxLmEwNzI1NDFmZDZlYWY4YjY1YTg3NGM1OGQ2Y2M1NzM5cC0zLAorICAgIC0weDEuNWRiM2Q0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTc0CisgICAgMHgxLmY1NGQ5NWM1MDU4YjdkYzk5NzJhYjZmOTkyOGNhMDQzcC0xLAorICAgIDB4MS5hMDcyNTQxZmQ2ZWFmOGI2NWE4NzRjNThkNmNjNTczOXAtMywKKyAgICAweDEuNWRiM2Q0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTc1CisgICAgLTB4MS5lYzU4ODFhMDljNDZhYWUwMjBjZDkwMzYwOThhMTk2ZXAtMSwKKyAgICAweDEuMThmZWY4MTA2YmVhNjNiOWU5NmE3YWRmNTM4YzYxOTRwLTIsCisgICAgLTB4MS40YWY2NDJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzYKKyAgICAweDEuZWM1ODgxYTA5YzQ2YWFlMDIwY2Q5MDM2MDk4YTE5NmVwLTEsCisgICAgMHgxLjE4ZmVmODEwNmJlYTYzYjllOTZhN2FkZjUzOGM2MTk0cC0yLAorICAgIDB4MS40YWY2NDJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzcKKyAgICAtMHgxLmUwYzA0Nzk1OTE5ZDk2MWE1ZTgzZTUwNWRmMzFjNjI0cC0xLAorICAgIDB4MS42MDQzNzI3N2Q0ODA2N2U4NTIzMGJjZTE4ODNlYWFiYXAtMiwKKyAgICAtMHgxLjM4MzhiMHAwLAorICB9LAorICB7IC8vIEVudHJ5IDE3OAorICAgIDB4MS5lMGMwNDc5NTkxOWQ5NjFhNWU4M2U1MDVkZjMxYzYyNHAtMSwKKyAgICAweDEuNjA0MzcyNzdkNDgwNjdlODUyMzBiY2UxODgzZWFhYmFwLTIsCisgICAgMHgxLjM4MzhiMHAwLAorICB9LAorICB7IC8vIEVudHJ5IDE3OQorICAgIC0weDEuZDI5NGNkZWY3Y2MxNjE2MzNhMDJkM2U2MjA1OGJlMGVwLTEsCisgICAgMHgxLmE1YTRkZWQ0OTJiZWRmZThjZjVjMzRjYWRkNzhkZjc1cC0yLAorICAgIC0weDEuMjU3YjFlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTgwCisgICAgMHgxLmQyOTRjZGVmN2NjMTYxNjMzYTAyZDNlNjIwNThiZTBlcC0xLAorICAgIDB4MS5hNWE0ZGVkNDkyYmVkZmU4Y2Y1YzM0Y2FkZDc4ZGY3NXAtMiwKKyAgICAweDEuMjU3YjFlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTgxCisgICAgLTB4MS5jMWU5ODhiOTU2MTRhYmQ2NWQzZDgxMWY1Yzg4MDM5YnAtMSwKKyAgICAweDEuZThjNDA0MDY3OGQyZWY3MzYzMzNhNDUzN2ExMTEzYTFwLTIsCisgICAgLTB4MS4xMmJkOTJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODIKKyAgICAweDEuYzFlOTg4Yjk1NjE0YWJkNjVkM2Q4MTFmNWM4ODAzOWJwLTEsCisgICAgMHgxLmU4YzQwNDA2NzhkMmVmNzM2MzMzYTQ1MzdhMTExM2ExcC0yLAorICAgIDB4MS4xMmJkOTJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODMKKyAgICAtMHgxLmEyYzI4OTVlZGIwZDRiYTUxY2RiZDUzOTBjYWM0NjhmcC0xLAorICAgIDB4MS4yNjk3NmIxYjE2ZDE5MDkxYzA5MjU5NzY1YzRiMzg3MnAtMSwKKyAgICAtMHgxLmVhNWMzZXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODQKKyAgICAweDEuYTJjMjg5NWVkYjBkNGJhNTFjZGJkNTM5MGNhYzQ2OGZwLTEsCisgICAgMHgxLjI2OTc2YjFiMTZkMTkwOTFjMDkyNTk3NjVjNGIzODcycC0xLAorICAgIDB4MS5lYTVjM2VwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTg1CisgICAgLTB4MS45NWYwNTE1MzY0NGQ2MGI5NGQyZjJlNzAwZGZkM2EzN3AtMSwKKyAgICAweDEuMzgwNWEyZGFmZGE3Zjg1NTRhZWM2NWRhYjM0OGE3MTRwLTEsCisgICAgLTB4MS5kNGI4N2NwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTg2CisgICAgMHgxLjk1ZjA1MTUzNjQ0ZDYwYjk0ZDJmMmU3MDBkZmQzYTM3cC0xLAorICAgIDB4MS4zODA1YTJkYWZkYTdmODU1NGFlYzY1ZGFiMzQ4YTcxNHAtMSwKKyAgICAweDEuZDRiODdjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDE4NworICAgIC0weDEuODg2NDdkOGFkMmU0MWZiN2MwYWYwZjY0NjE0Yzk5OTNwLTEsCisgICAgMHgxLjQ4ZTUyZmY1YmJlNzk0NjE4Yjg1MTkwYjg2NDExODI0cC0xLAorICAgIC0weDEuYmYxNGJhcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDE4OAorICAgIDB4MS44ODY0N2Q4YWQyZTQxZmI3YzBhZjBmNjQ2MTRjOTk5M3AtMSwKKyAgICAweDEuNDhlNTJmZjViYmU3OTQ2MThiODUxOTBiODY0MTE4MjRwLTEsCisgICAgMHgxLmJmMTRiYXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODkKKyAgICAtMHgxLjdhMjUzZjlmODlhN2QzZTRmOWM1NDYzODQxOGU5N2Y2cC0xLAorICAgIDB4MS41OTJlNWI2MTVlZjVhZTQ2Mzk3NmQzMTE0MWRiYWNmMHAtMSwKKyAgICAtMHgxLmE5NzBmOHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTAKKyAgICAweDEuN2EyNTNmOWY4OWE3ZDNlNGY5YzU0NjM4NDE4ZTk3ZjZwLTEsCisgICAgMHgxLjU5MmU1YjYxNWVmNWFlNDYzOTc2ZDMxMTQxZGJhY2YwcC0xLAorICAgIDB4MS5hOTcwZjhwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTkxCisgICAgLTB4MS42YjM5MWIzNGFhYjgyOGZiZTdjZDdkY2FmOWVmM2JkNnAtMSwKKyAgICAweDEuNjhkOWIyZDY1N2U0MzA3ZDMzMWViN2JkMzVlZTE4NzlwLTEsCisgICAgLTB4MS45M2NkMzZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTkyCisgICAgMHgxLjZiMzkxYjM0YWFiODI4ZmJlN2NkN2RjYWY5ZWYzYmQ2cC0xLAorICAgIDB4MS42OGQ5YjJkNjU3ZTQzMDdkMzMxZWI3YmQzNWVlMTg3OXAtMSwKKyAgICAweDEuOTNjZDM2cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDE5MworICAgIC0weDEuNWJhNmUyZmI5ODBkNDgyY2YwMGVkZTgwZjU1OTdmYjJwLTEsCisgICAgMHgxLjc3ZTAwYzM3MTg1MjhjMzZmNzIyZTYzMDk2YzI2NDZicC0xLAorICAgIC0weDEuN2UyOTc0cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDE5NAorICAgIDB4MS41YmE2ZTJmYjk4MGQ0ODJjZjAwZWRlODBmNTU5N2ZiMnAtMSwKKyAgICAweDEuNzdlMDBjMzcxODUyOGMzNmY3MjJlNjMwOTZjMjY0NmJwLTEsCisgICAgMHgxLjdlMjk3NHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTUKKyAgICAtMHgxLjRiNzViNTk1NGU3MTgwMjA5MDA3MTllMjVhN2VhOTNicC0xLAorICAgIDB4MS44NjNhODhkNmIwNjRmMzZmMzQzNzA3MjJkMzYxY2U5ZnAtMSwKKyAgICAtMHgxLjY4ODViMnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTYKKyAgICAweDEuNGI3NWI1OTU0ZTcxODAyMDkwMDcxOWUyNWE3ZWE5M2JwLTEsCisgICAgMHgxLjg2M2E4OGQ2YjA2NGYzNmYzNDM3MDcyMmQzNjFjZTlmcC0xLAorICAgIDB4MS42ODg1YjJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTk3CisgICAgLTB4MS4zYWFjZmE1MTA4MTAwNTRjNTJhZTBiNjdkMTE2ZWI0MHAtMSwKKyAgICAweDEuOTNlMjk4OWNlZTYwODRlMzRiNTMzYjFlYjkyNzQ2ZGFwLTEsCisgICAgLTB4MS41MmUxZjBwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTk4CisgICAgMHgxLjNhYWNmYTUxMDgxMDA1NGM1MmFlMGI2N2QxMTZlYjQwcC0xLAorICAgIDB4MS45M2UyOTg5Y2VlNjA4NGUzNGI1MzNiMWViOTI3NDZkYXAtMSwKKyAgICAweDEuNTJlMWYwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDE5OQorICAgIC0weDEuMjk1NDY0NGNlYjhlM2EyNDc5YzgzYWU4NGFmNTdkM2VwLTEsCisgICAgMHgxLmEwZDFmODYxM2ViYzYwYzdlZTY1MDJlZTE4M2M4OWU3cC0xLAorICAgIC0weDEuM2QzZTM2cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIwMAorICAgIDB4MS4yOTU0NjQ0Y2ViOGUzYTI0NzljODNhZTg0YWY1N2QzZXAtMSwKKyAgICAweDEuYTBkMWY4NjEzZWJjNjBjN2VlNjUwMmVlMTgzYzg5ZTdwLTEsCisgICAgMHgxLjNkM2UzNnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDEKKyAgICAtMHgxLmZjNzY5YWVjZDI2NWNmZWEwOGUwZmYzMGMyZmJjYWNkcC0yLAorICAgIDB4MS5iYzZiZDg4OWE4YTU5ZGJiNTZlNTQ2YTM3YWU3OThmNXAtMSwKKyAgICAtMHgxLjBhMGIwMnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDIKKyAgICAweDEuZmM3NjlhZWNkMjY1Y2ZlYTA4ZTBmZjMwYzJmYmNhY2RwLTIsCisgICAgMHgxLmJjNmJkODg5YThhNTlkYmI1NmU1NDZhMzdhZTc5OGY1cC0xLAorICAgIDB4MS4wYTBiMDJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjAzCisgICAgLTB4MS5jODUzYzcwNGUzYjk0MzIyMDMxZDZiNDdhZWY4NTNjOXAtMiwKKyAgICAweDEuY2E1OWM3MTlmOTYwNzVkZDZiN2EwZmY0NDNhZDU5ZGNwLTEsCisgICAgLTB4MS5kOGY3MjBwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjA0CisgICAgMHgxLmM4NTNjNzA0ZTNiOTQzMjIwMzFkNmI0N2FlZjg1M2M5cC0yLAorICAgIDB4MS5jYTU5YzcxOWY5NjA3NWRkNmI3YTBmZjQ0M2FkNTlkY3AtMSwKKyAgICAweDEuZDhmNzIwcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIwNQorICAgIC0weDEuOTJhYmE4OTgxYjI1ZGVkYTRjYzE4MTcyNTE3MjNhMWJwLTIsCisgICAgMHgxLmQ2YzBiMTNkZjk5NjEzYTQ5MzA2YjRkYzZjNTdhYTAzcC0xLAorICAgIC0weDEuOWRkODNjcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIwNgorICAgIDB4MS45MmFiYTg5ODFiMjVkZWRhNGNjMTgxNzI1MTcyM2ExYnAtMiwKKyAgICAweDEuZDZjMGIxM2RmOTk2MTNhNDkzMDZiNGRjNmM1N2FhMDNwLTEsCisgICAgMHgxLjlkZDgzY3AtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDcKKyAgICAtMHgxLjViYWMwNWUxZTBhN2MyZGUyODBmY2I5M2JlNjdhNGRhcC0yLAorICAgIDB4MS5lMTk2MDI3M2E0YWFhMWJkMTllZjBjY2FhODg3NDE4M3AtMSwKKyAgICAtMHgxLjYyYjk1OHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDgKKyAgICAweDEuNWJhYzA1ZTFlMGE3YzJkZTI4MGZjYjkzYmU2N2E0ZGFwLTIsCisgICAgMHgxLmUxOTYwMjczYTRhYWExYmQxOWVmMGNjYWE4ODc0MTgzcC0xLAorICAgIDB4MS42MmI5NThwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjA5CisgICAgLTB4MS4yMzgzY2EyYjI0OTgwN2Q5NTAwNWQ5NmNmZGFlY2Q2Y3AtMiwKKyAgICAweDEuZWFkMDdjZDJlMGY3ZjE5Njc5NjQ2MzYyYmJjMGViODBwLTEsCisgICAgLTB4MS4yNzlhNzRwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjEwCisgICAgMHgxLjIzODNjYTJiMjQ5ODA3ZDk1MDA1ZDk2Y2ZkYWVjZDZjcC0yLAorICAgIDB4MS5lYWQwN2NkMmUwZjdmMTk2Nzk2NDYzNjJiYmMwZWI4MHAtMSwKKyAgICAweDEuMjc5YTc0cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIxMQorICAgIC0weDEuZDRjNWJiODcyZWE1Mzc1ODM0Y2EwYmNhMDg4ZDFkNzVwLTMsCisgICAgMHgxLmYyNjg0MGVmZDg2Y2VlYTIzZjM4OGI2YTExMDJlYTRkcC0xLAorICAgIC0weDEuZDhmNzIwcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDIxMgorICAgIDB4MS5kNGM1YmI4NzJlYTUzNzU4MzRjYTBiY2EwODhkMWQ3NXAtMywKKyAgICAweDEuZjI2ODQwZWZkODZjZWVhMjNmMzg4YjZhMTEwMmVhNGRwLTEsCisgICAgMHgxLmQ4ZjcyMHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTMKKyAgICAtMHgxLjYwZjNmYTQ2MGI4NTgxMWQyYWU3MTBjZDY5ZWMzNjkwcC0zLAorICAgIDB4MS5mODU2ZDQ5MjUxYmQzN2M1NGYwMDk0MjcwZWVjYmQxOHAtMSwKKyAgICAtMHgxLjYyYjk1OHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTQKKyAgICAweDEuNjBmM2ZhNDYwYjg1ODExZDJhZTcxMGNkNjllYzM2OTBwLTMsCisgICAgMHgxLmY4NTZkNDkyNTFiZDM3YzU0ZjAwOTQyNzBlZWNiZDE4cC0xLAorICAgIDB4MS42MmI5NThwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMjE1CisgICAgLTB4MS5kN2VhM2Q1NmUxZTYyNDRjODc4NmQ3NGYxODlkOThhY3AtNCwKKyAgICAweDEuZmM5NzI4M2M0ZjViZDFmNzkzMjAxOTcyYjhkYjU1MWZwLTEsCisgICAgLTB4MS5kOGY3MjBwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgMjE2CisgICAgMHgxLmQ3ZWEzZDU2ZTFlNjI0NGM4Nzg2ZDc0ZjE4OWQ5OGFjcC00LAorICAgIDB4MS5mYzk3MjgzYzRmNWJkMWY3OTMyMDE5NzJiOGRiNTUxZnAtMSwKKyAgICAweDEuZDhmNzIwcC00LAorICB9LAorICB7IC8vIEVudHJ5IDIxNworICAgIC0weDEuZDhiM2RlYmE2YWM0OTNiMDRiMjEwM2EwZGJhZWYwMmZwLTUsCisgICAgMHgxLmZmMjU5YjdiM2Q3MjFlZGYwNjNhNWJmNmU3YTFmOTNjcC0xLAorICAgIC0weDEuZDhmNzIwcC01LAorICB9LAorICB7IC8vIEVudHJ5IDIxOAorICAgIDB4MS5kOGIzZGViYTZhYzQ5M2IwNGIyMTAzYTBkYmFlZjAyZnAtNSwKKyAgICAweDEuZmYyNTliN2IzZDcyMWVkZjA2M2E1YmY2ZTdhMWY5M2NwLTEsCisgICAgMHgxLmQ4ZjcyMHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTkKKyAgICAweDEuZDhiM2RlYmE2YWM0OTNiMDRiMjEwM2EwZGJhZWYwMmZwLTUsCisgICAgMHgxLmZmMjU5YjdiM2Q3MjFlZGYwNjNhNWJmNmU3YTFmOTNjcC0xLAorICAgIDB4MS5kOGY3MjBwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMjIwCisgICAgLTB4MS5kOGIzZGViYTZhYzQ5M2IwNGIyMTAzYTBkYmFlZjAyZnAtNSwKKyAgICAweDEuZmYyNTliN2IzZDcyMWVkZjA2M2E1YmY2ZTdhMWY5M2NwLTEsCisgICAgLTB4MS5kOGY3MjBwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMjIxCisgICAgMHgxLmQ3ZWEzZDU2ZTFlNjI0NGM4Nzg2ZDc0ZjE4OWQ5OGFjcC00LAorICAgIDB4MS5mYzk3MjgzYzRmNWJkMWY3OTMyMDE5NzJiOGRiNTUxZnAtMSwKKyAgICAweDEuZDhmNzIwcC00LAorICB9LAorICB7IC8vIEVudHJ5IDIyMgorICAgIC0weDEuZDdlYTNkNTZlMWU2MjQ0Yzg3ODZkNzRmMTg5ZDk4YWNwLTQsCisgICAgMHgxLmZjOTcyODNjNGY1YmQxZjc5MzIwMTk3MmI4ZGI1NTFmcC0xLAorICAgIC0weDEuZDhmNzIwcC00LAorICB9LAorICB7IC8vIEVudHJ5IDIyMworICAgIDB4MS42MGYzZmE0NjBiODU4MTFkMmFlNzEwY2Q2OWVjMzY5MHAtMywKKyAgICAweDEuZjg1NmQ0OTI1MWJkMzdjNTRmMDA5NDI3MGVlY2JkMThwLTEsCisgICAgMHgxLjYyYjk1OHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjQKKyAgICAtMHgxLjYwZjNmYTQ2MGI4NTgxMWQyYWU3MTBjZDY5ZWMzNjkwcC0zLAorICAgIDB4MS5mODU2ZDQ5MjUxYmQzN2M1NGYwMDk0MjcwZWVjYmQxOHAtMSwKKyAgICAtMHgxLjYyYjk1OHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjUKKyAgICAweDEuZDRjNWJiODcyZWE1Mzc1ODM0Y2EwYmNhMDg4ZDFkNzVwLTMsCisgICAgMHgxLmYyNjg0MGVmZDg2Y2VlYTIzZjM4OGI2YTExMDJlYTRkcC0xLAorICAgIDB4MS5kOGY3MjBwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMjI2CisgICAgLTB4MS5kNGM1YmI4NzJlYTUzNzU4MzRjYTBiY2EwODhkMWQ3NXAtMywKKyAgICAweDEuZjI2ODQwZWZkODZjZWVhMjNmMzg4YjZhMTEwMmVhNGRwLTEsCisgICAgLTB4MS5kOGY3MjBwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMjI3CisgICAgMHgxLjIzODNjYTJiMjQ5ODA3ZDk1MDA1ZDk2Y2ZkYWVjZDZjcC0yLAorICAgIDB4MS5lYWQwN2NkMmUwZjdmMTk2Nzk2NDYzNjJiYmMwZWI4MHAtMSwKKyAgICAweDEuMjc5YTc0cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIyOAorICAgIC0weDEuMjM4M2NhMmIyNDk4MDdkOTUwMDVkOTZjZmRhZWNkNmNwLTIsCisgICAgMHgxLmVhZDA3Y2QyZTBmN2YxOTY3OTY0NjM2MmJiYzBlYjgwcC0xLAorICAgIC0weDEuMjc5YTc0cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIyOQorICAgIDB4MS41YmFjMDVlMWUwYTdjMmRlMjgwZmNiOTNiZTY3YTRkYXAtMiwKKyAgICAweDEuZTE5NjAyNzNhNGFhYTFiZDE5ZWYwY2NhYTg4NzQxODNwLTEsCisgICAgMHgxLjYyYjk1OHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzAKKyAgICAtMHgxLjViYWMwNWUxZTBhN2MyZGUyODBmY2I5M2JlNjdhNGRhcC0yLAorICAgIDB4MS5lMTk2MDI3M2E0YWFhMWJkMTllZjBjY2FhODg3NDE4M3AtMSwKKyAgICAtMHgxLjYyYjk1OHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzEKKyAgICAweDEuOTJhYmE4OTgxYjI1ZGVkYTRjYzE4MTcyNTE3MjNhMWJwLTIsCisgICAgMHgxLmQ2YzBiMTNkZjk5NjEzYTQ5MzA2YjRkYzZjNTdhYTAzcC0xLAorICAgIDB4MS45ZGQ4M2NwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjMyCisgICAgLTB4MS45MmFiYTg5ODFiMjVkZWRhNGNjMTgxNzI1MTcyM2ExYnAtMiwKKyAgICAweDEuZDZjMGIxM2RmOTk2MTNhNDkzMDZiNGRjNmM1N2FhMDNwLTEsCisgICAgLTB4MS45ZGQ4M2NwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjMzCisgICAgMHgxLmM4NTNjNzA0ZTNiOTQzMjIwMzFkNmI0N2FlZjg1M2M5cC0yLAorICAgIDB4MS5jYTU5YzcxOWY5NjA3NWRkNmI3YTBmZjQ0M2FkNTlkY3AtMSwKKyAgICAweDEuZDhmNzIwcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIzNAorICAgIC0weDEuYzg1M2M3MDRlM2I5NDMyMjAzMWQ2YjQ3YWVmODUzYzlwLTIsCisgICAgMHgxLmNhNTljNzE5Zjk2MDc1ZGQ2YjdhMGZmNDQzYWQ1OWRjcC0xLAorICAgIC0weDEuZDhmNzIwcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIzNQorICAgIDB4MS5mYzc2OWFlY2QyNjVjZmVhMDhlMGZmMzBjMmZiY2FjZHAtMiwKKyAgICAweDEuYmM2YmQ4ODlhOGE1OWRiYjU2ZTU0NmEzN2FlNzk4ZjVwLTEsCisgICAgMHgxLjBhMGIwMnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzYKKyAgICAtMHgxLmZjNzY5YWVjZDI2NWNmZWEwOGUwZmYzMGMyZmJjYWNkcC0yLAorICAgIDB4MS5iYzZiZDg4OWE4YTU5ZGJiNTZlNTQ2YTM3YWU3OThmNXAtMSwKKyAgICAtMHgxLjBhMGIwMnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzcKKyAgICAweDEuMjk1NDY0NGNlYjhlM2EyNDc5YzgzYWU4NGFmNTdkM2VwLTEsCisgICAgMHgxLmEwZDFmODYxM2ViYzYwYzdlZTY1MDJlZTE4M2M4OWU3cC0xLAorICAgIDB4MS4zZDNlMzZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjM4CisgICAgLTB4MS4yOTU0NjQ0Y2ViOGUzYTI0NzljODNhZTg0YWY1N2QzZXAtMSwKKyAgICAweDEuYTBkMWY4NjEzZWJjNjBjN2VlNjUwMmVlMTgzYzg5ZTdwLTEsCisgICAgLTB4MS4zZDNlMzZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjM5CisgICAgMHgxLjNhYWQwMGEwOTI2OGEzOWRmMTY1M2M3MGRiOTFmMTU3cC0xLAorICAgIDB4MS45M2UyOTNiMjNhNmFhMWFlNTM3MzIxNGViOGZiOWU5NnAtMSwKKyAgICAweDEuNTJlMWY4cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI0MAorICAgIC0weDEuM2FhZDAwYTA5MjY4YTM5ZGYxNjUzYzcwZGI5MWYxNTdwLTEsCisgICAgMHgxLjkzZTI5M2IyM2E2YWExYWU1MzczMjE0ZWI4ZmI5ZTk2cC0xLAorICAgIC0weDEuNTJlMWY4cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI0MQorICAgIDB4MS40Yjc1YmJhZTM4OGE3ZjM0NjZlN2YyZDZiZGNmNzJiYnAtMSwKKyAgICAweDEuODYzYTgzYThkOTgyNmM2MTM1NTA5NDA2ZWJlMDVjMGZwLTEsCisgICAgMHgxLjY4ODViYXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDIKKyAgICAtMHgxLjRiNzViYmFlMzg4YTdmMzQ2NmU3ZjJkNmJkY2Y3MmJicC0xLAorICAgIDB4MS44NjNhODNhOGQ5ODI2YzYxMzU1MDk0MDZlYmUwNWMwZnAtMSwKKyAgICAtMHgxLjY4ODViYXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDMKKyAgICAweDEuNWJhNmU4ZGIxODMzNDc1NzEyYjlhNDJhMWFkMGQyYzJwLTEsCisgICAgMHgxLjc3ZTAwNmM4N2NiYWRlZDY2ZWM1Yjk2MGM5M2M1NjhhcC0xLAorICAgIDB4MS43ZTI5N2NwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjQ0CisgICAgLTB4MS41YmE2ZThkYjE4MzM0NzU3MTJiOWE0MmExYWQwZDJjMnAtMSwKKyAgICAweDEuNzdlMDA2Yzg3Y2JhZGVkNjZlYzViOTYwYzkzYzU2OGFwLTEsCisgICAgLTB4MS43ZTI5N2NwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjQ1CisgICAgMHgxLjZiMzkyMGQ4MTE3ODI4OTI4ZmUxMGFjNzBiYTY5ZTc2cC0xLAorICAgIDB4MS42OGQ5YWQyOTczNmMxNzA0Y2FlYTZhMmRiNmU3MTIyM3AtMSwKKyAgICAweDEuOTNjZDNlcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI0NgorICAgIC0weDEuNmIzOTIwZDgxMTc4Mjg5MjhmZTEwYWM3MGJhNjllNzZwLTEsCisgICAgMHgxLjY4ZDlhZDI5NzM2YzE3MDRjYWVhNmEyZGI2ZTcxMjIzcC0xLAorICAgIC0weDEuOTNjZDNlcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI0NworICAgIDB4MS43YTI1NDUwNDQzMDk4ODM2YzUyMDIzNzVkYjRiODQ2MnAtMSwKKyAgICAweDEuNTkyZTU1NzhjOWVjNjZhY2NlZGRkNGRjNmNlNjZiMjZwLTEsCisgICAgMHgxLmE5NzFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjQ4CisgICAgLTB4MS43YTI1NDUwNDQzMDk4ODM2YzUyMDIzNzVkYjRiODQ2MnAtMSwKKyAgICAweDEuNTkyZTU1NzhjOWVjNjZhY2NlZGRkNGRjNmNlNjZiMjZwLTEsCisgICAgLTB4MS5hOTcxcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI0OQorICAgIDB4MS44ODY0ODJhZTY3OTdiMzgzNjRmNWM3MmNlOWEzYjc2ZnAtMSwKKyAgICAweDEuNDhlNTI5ZDQyOWU3MjFlYzhiYjFlMDE0Zjk0ZDQ4ZjFwLTEsCisgICAgMHgxLmJmMTRjMnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTAKKyAgICAtMHgxLjg4NjQ4MmFlNjc5N2IzODM2NGY1YzcyY2U5YTNiNzZmcC0xLAorICAgIDB4MS40OGU1MjlkNDI5ZTcyMWVjOGJiMWUwMTRmOTRkNDhmMXAtMSwKKyAgICAtMHgxLmJmMTRjMnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTEKKyAgICAweDEuOTVmMDU2MzM3YWNjMWQyZDU1NzUyNTIzMmU5MTU0NjdwLTEsCisgICAgMHgxLjM4MDU5YzgzM2M1OGVhOTcwZjdiOTZkNmFkYTNkOWM0cC0xLAorICAgIDB4MS5kNGI4ODRwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjUyCisgICAgLTB4MS45NWYwNTYzMzdhY2MxZDJkNTU3NTI1MjMyZTkxNTQ2N3AtMSwKKyAgICAweDEuMzgwNTljODMzYzU4ZWE5NzBmN2I5NmQ2YWRhM2Q5YzRwLTEsCisgICAgLTB4MS5kNGI4ODRwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjUzCisgICAgMHgxLmEyYzI4OTVlZGIwZDRiYTUxY2RiZDUzOTBjYWM0NjhmcC0xLAorICAgIDB4MS4yNjk3NmIxYjE2ZDE5MDkxYzA5MjU5NzY1YzRiMzg3MnAtMSwKKyAgICAweDEuZWE1YzNlcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI1NAorICAgIC0weDEuYTJjMjg5NWVkYjBkNGJhNTFjZGJkNTM5MGNhYzQ2OGZwLTEsCisgICAgMHgxLjI2OTc2YjFiMTZkMTkwOTFjMDkyNTk3NjVjNGIzODcycC0xLAorICAgIC0weDEuZWE1YzNlcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI1NQorICAgIDB4MS5jMWU5ODhiOTU2MTRhYmQ2NWQzZDgxMWY1Yzg4MDM5YnAtMSwKKyAgICAweDEuZThjNDA0MDY3OGQyZWY3MzYzMzNhNDUzN2ExMTEzYTFwLTIsCisgICAgMHgxLjEyYmQ5MnAwLAorICB9LAorICB7IC8vIEVudHJ5IDI1NgorICAgIC0weDEuYzFlOTg4Yjk1NjE0YWJkNjVkM2Q4MTFmNWM4ODAzOWJwLTEsCisgICAgMHgxLmU4YzQwNDA2NzhkMmVmNzM2MzMzYTQ1MzdhMTExM2ExcC0yLAorICAgIC0weDEuMTJiZDkycDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjU3CisgICAgMHgxLmQyOTRkMmUwNmIzZDEwYTRkZTI2MzE3MmQ1MGY0NDk3cC0xLAorICAgIDB4MS5hNWE0YzhmNTk4ZmEwMDc4OTcxMzE2ZWI0OTA3Zjk3YnAtMiwKKyAgICAweDEuMjU3YjI0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjU4CisgICAgLTB4MS5kMjk0ZDJlMDZiM2QxMGE0ZGUyNjMxNzJkNTBmNDQ5N3AtMSwKKyAgICAweDEuYTVhNGM4ZjU5OGZhMDA3ODk3MTMxNmViNDkwN2Y5N2JwLTIsCisgICAgLTB4MS4yNTdiMjRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTkKKyAgICAweDEuZTBjMDRiYjY1YmQzMzAxMmJlNzJhMzQwZGYyYzA0NGJwLTEsCisgICAgMHgxLjYwNDM1YmVlZDEwY2EwNTc2OWYwYTNkODZhNWEyMGYzcC0yLAorICAgIDB4MS4zODM4YjZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjAKKyAgICAtMHgxLmUwYzA0YmI2NWJkMzMwMTJiZTcyYTM0MGRmMmMwNDRicC0xLAorICAgIDB4MS42MDQzNWJlZWQxMGNhMDU3NjlmMGEzZDg2YTVhMjBmM3AtMiwKKyAgICAtMHgxLjM4MzhiNnAwLAorICB9LAorICB7IC8vIEVudHJ5IDI2MQorICAgIDB4MS5lYzU4ODRlYjk5MGMzZGVhYWVlYmQzZjBmODRkNjk2MnAtMSwKKyAgICAweDEuMThmZWUwZmM0NWMzMWE3OWIyYjk0NzhiMWY3MmE5ZWJwLTIsCisgICAgMHgxLjRhZjY0OHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI2MgorICAgIC0weDEuZWM1ODg0ZWI5OTBjM2RlYWFlZWJkM2YwZjg0ZDY5NjJwLTEsCisgICAgMHgxLjE4ZmVlMGZjNDVjMzFhNzliMmI5NDc4YjFmNzJhOWVicC0yLAorICAgIC0weDEuNGFmNjQ4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjYzCisgICAgMHgxLmY1NGQ5ODM1YjBlNjZlMTc2MTIxNjAyNzI1MjFmM2IwcC0xLAorICAgIDB4MS5hMDcyMjUyMDkwYzMzODI4NzY3YWVlM2UwNDBjY2RkZnAtMywKKyAgICAweDEuNWRiM2RhcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjY0CisgICAgLTB4MS5mNTRkOTgzNWIwZTY2ZTE3NjEyMTYwMjcyNTIxZjNiMHAtMSwKKyAgICAweDEuYTA3MjI1MjA5MGMzMzgyODc2N2FlZTNlMDQwY2NkZGZwLTMsCisgICAgLTB4MS41ZGIzZGFwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjUKKyAgICAweDEuZmI5MzNkMWNkOTMxNjg1ZTkwMmU0MDNhMWJhYWVjZmRwLTEsCisgICAgMHgxLjBjYWI3NzAzYThlOWRhY2M0YWQwMTE4OGI0NDNjZmVlcC0zLAorICAgIDB4MS43MDcxNmNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjYKKyAgICAtMHgxLmZiOTMzZDFjZDkzMTY4NWU5MDJlNDAzYTFiYWFlY2ZkcC0xLAorICAgIDB4MS4wY2FiNzcwM2E4ZTlkYWNjNGFkMDExODhiNDQzY2ZlZXAtMywKKyAgICAtMHgxLjcwNzE2Y3AwLAorICB9LAorICB7IC8vIEVudHJ5IDI2NworICAgIDB4MS5mZjIwZDlkM2U4OTg0ZmVjMzM5ODJlNDJmNTg4NGYyY3AtMSwKKyAgICAweDEuZGRkMTcxYTNjOTg1MWU3ODE5YjVlNGY2ZjkwZTc2M2RwLTUsCisgICAgMHgxLjgzMmVmZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDI2OAorICAgIC0weDEuZmYyMGQ5ZDNlODk4NGZlYzMzOTgyZTQyZjU4ODRmMmNwLTEsCisgICAgMHgxLmRkZDE3MWEzYzk4NTFlNzgxOWI1ZTRmNmY5MGU3NjNkcC01LAorICAgIC0weDEuODMyZWZlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjY5CisgICAgMHgxLmZmZjE4ZjAzYTRiN2U2YWFjZjUxZjgzOTMxZTg1MDQycC0xLAorICAgIC0weDEuZTY2OGNiMTU0ZWVhNjhiYmM3ZjgxNTRmNDZiMmU1MzZwLTcsCisgICAgMHgxLjk1ZWM5MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI3MAorICAgIC0weDEuZmZmMThmMDNhNGI3ZTZhYWNmNTFmODM5MzFlODUwNDJwLTEsCisgICAgLTB4MS5lNjY4Y2IxNTRlZWE2OGJiYzdmODE1NGY0NmIyZTUzNnAtNywKKyAgICAtMHgxLjk1ZWM5MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI3MQorICAgIDB4MS5mZTA0M2Y4NzVjNmVkNGEyYzFiOGQ2OWEwOWZjZjU3OHAtMSwKKyAgICAtMHgxLjY4MmYyYmI4N2E4ZjUwMTE3MzUwOTQxNzZjOWI2ZGFjcC00LAorICAgIDB4MS5hOGFhMWNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzIKKyAgICAtMHgxLmZlMDQzZjg3NWM2ZWQ0YTJjMWI4ZDY5YTA5ZmNmNTc4cC0xLAorICAgIC0weDEuNjgyZjJiYjg3YThmNTAxMTczNTA5NDE3NmM5YjZkYWNwLTQsCisgICAgLTB4MS5hOGFhMWNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzMKKyAgICAweDEuYjNkMzZhOTY4ODBjZjY5ZDk4ODRhNDlmNTM4MWU5MTdwLTEsCisgICAgMHgxLjBjYjM0NDlhMGQwYTllMDY0M2Q0MWY0YTViMGY3ZGI3cC0xLAorICAgIDB4MS4wNGFmZjhwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzQKKyAgICAtMHgxLmIzZDM2YTk2ODgwY2Y2OWQ5ODg0YTQ5ZjUzODFlOTE3cC0xLAorICAgIDB4MS4wY2IzNDQ5YTBkMGE5ZTA2NDNkNDFmNGE1YjBmN2RiN3AtMSwKKyAgICAtMHgxLjA0YWZmOHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI3NQorICAgIDB4MS5iM2Q0MWFlYmNmMzkxYzMwYzNkMmYxZWU3Yjc5NzEwY3AtMSwKKyAgICAweDEuMGNiMjI2OTcxNTNiY2YxZjhhNjNhY2RkZDk2YzU0Y2JwLTEsCisgICAgMHgxLjA0YjBhMHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI3NgorICAgIC0weDEuYjNkNDFhZWJjZjM5MWMzMGMzZDJmMWVlN2I3OTcxMGNwLTEsCisgICAgMHgxLjBjYjIyNjk3MTUzYmNmMWY4YTYzYWNkZGQ5NmM1NGNicC0xLAorICAgIC0weDEuMDRiMGEwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjc3CisgICAgMHgxLmIzZDRjYjQwNWFiMzI5MmJlN2RmNWIxYjk4MDMyZmJlcC0xLAorICAgIDB4MS4wY2IxMDg5M2E5YjU0NzFhNDQzNTYwNzJjYjMzYjM5NXAtMSwKKyAgICAweDEuMDRiMTQ4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjc4CisgICAgLTB4MS5iM2Q0Y2I0MDVhYjMyOTJiZTdkZjViMWI5ODAzMmZiZXAtMSwKKyAgICAweDEuMGNiMTA4OTNhOWI1NDcxYTQ0MzU2MDcyY2IzM2IzOTVwLTEsCisgICAgLTB4MS4wNGIxNDhwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzkKKyAgICAweDEuYjNkNTdiOTQyYTdhZDE5ZTliOTg5MmM5MzE5ZTFiZTZwLTEsCisgICAgMHgxLjBjYWZlYThmY2E3NzgxMjM2YTU3ZTViMWM4YWVkMzljcC0xLAorICAgIDB4MS4wNGIxZjBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODAKKyAgICAtMHgxLmIzZDU3Yjk0MmE3YWQxOWU5Yjk4OTJjOTMxOWUxYmU2cC0xLAorICAgIDB4MS4wY2FmZWE4ZmNhNzc4MTIzNmE1N2U1YjFjOGFlZDM5Y3AtMSwKKyAgICAtMHgxLjA0YjFmMHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI4MQorICAgIDB4MS5iM2Q2MmJlNzNlOGZjOTk4YzZjMmRmNjU5MDQyNTYxM3AtMSwKKyAgICAweDEuMGNhZWNjOGI3NzgyZjg2ODI3YWY5MmIwYjIzNzQ1MTBwLTEsCisgICAgMHgxLjA0YjI5OHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI4MgorICAgIC0weDEuYjNkNjJiZTczZThmYzk5OGM2YzJkZjY1OTA0MjU2MTNwLTEsCisgICAgMHgxLjBjYWVjYzhiNzc4MmY4NjgyN2FmOTJiMGIyMzc0NTEwcC0xLAorICAgIC0weDEuMDRiMjk4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjgzCisgICAgMHgxLmIzZDZkYzM5OTZmMWM1MmFhMWY4M2JkZWUxZDBlMDIzcC0xLAorICAgIDB4MS4wY2FkYWU4NmIwZDgyODE1ZDhmNjMyZTY3YzdlMWE5OXAtMSwKKyAgICAweDEuMDRiMzQwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjg0CisgICAgLTB4MS5iM2Q2ZGMzOTk2ZjFjNTJhYTFmODNiZGVlMWQwZTAyM3AtMSwKKyAgICAweDEuMGNhZGFlODZiMGQ4MjgxNWQ4ZjYzMmU2N2M3ZTFhOTlwLTEsCisgICAgLTB4MS4wNGIzNDBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODUKKyAgICAweDEuYjNkNzhjOGIzM2EwNzg2NGI2YTg3ODU3M2RiMzRiY2FwLTEsCisgICAgMHgxLjBjYWM5MDgxNzY3NzhiNWEwY2JhZDIxZWU3NWNlNzY1cC0xLAorICAgIDB4MS4wNGIzZThwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODYKKyAgICAtMHgxLmIzZDc4YzhiMzNhMDc4NjRiNmE4Nzg1NzNkYjM0YmNhcC0xLAorICAgIDB4MS4wY2FjOTA4MTc2Nzc4YjVhMGNiYWQyMWVlNzVjZTc2NXAtMSwKKyAgICAtMHgxLjA0YjNlOHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI4NworICAgIDB4MS5iM2Q4M2NkYzE0OWI5NzU3ZGYxOTVhZDg4NWFiNTIwMXAtMSwKKyAgICAweDEuMGNhYjcyN2JjODYxOWQ2MjgzNjE4NzZlMWYzMGE2MzNwLTEsCisgICAgMHgxLjA0YjQ5MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI4OAorICAgIC0weDEuYjNkODNjZGMxNDliOTc1N2RmMTk1YWQ4ODVhYjUyMDFwLTEsCisgICAgMHgxLjBjYWI3MjdiYzg2MTlkNjI4MzYxODc2ZTFmMzBhNjMzcC0xLAorICAgIC0weDEuMDRiNDkwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjg5CisgICAgMHgxLmIzZDhlOGY5OTA4MzYwYjM4Y2QxM2ZjYmY2MjI0ZDkzcC0xLAorICAgIDB4MS4wY2FhNWI0NTBhNDMyNGYyMDRhNTU2YjA3MmRhMTI0YXAtMSwKKyAgICAweDEuMDRiNTM0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjkwCisgICAgLTB4MS5iM2Q4ZThmOTkwODM2MGIzOGNkMTNmY2JmNjIyNGQ5M3AtMSwKKyAgICAweDEuMGNhYTViNDUwYTQzMjRmMjA0YTU1NmIwNzJkYTEyNGFwLTEsCisgICAgLTB4MS4wNGI1MzRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTEKKyAgICAtMC4wZiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5wLTE0OSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTIKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEucC0xNDksCisgIH0sCisgIHsgLy8gRW50cnkgMjkzCisgICAgMC4wLAorICAgIDB4MS5wMCwKKyAgICAwLjAsCisgIH0sCisgIHsgLy8gRW50cnkgMjk0CisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTQ5LAorICB9LAorICB7IC8vIEVudHJ5IDI5NQorICAgIC0wLjBmLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLnAtMTQ5LAorICB9LAorICB7IC8vIEVudHJ5IDI5NgorICAgIDB4MS4xNzczZDM2YTY0ZGY2MWQ2NzE1ZTYwYWYwNjM1NTlmNHAtMSwKKyAgICAweDEuYWQwMmM4YjljYzkzZjQ0OGVmNGViMDY4YTg4OTIyYTNwLTEsCisgICAgMHgxLjI3OWE3MnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTcKKyAgICAtMHgxLjE3NzNkMzZhNjRkZjYxZDY3MTVlNjBhZjA2MzU1OWY0cC0xLAorICAgIDB4MS5hZDAyYzhiOWNjOTNmNDQ4ZWY0ZWIwNjhhODg5MjJhM3AtMSwKKyAgICAtMHgxLjI3OWE3MnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTgKKyAgICAweDEuMTc3M2Q1MTc2N2E3OGZlOTFiNTVmNmI3ZTVmZDQ0YzJwLTEsCisgICAgMHgxLmFkMDJjN2EyNThiZmIzNjJhYmJlODZmYjQ4ZjRlOThicC0xLAorICAgIDB4MS4yNzlhNzRwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjk5CisgICAgLTB4MS4xNzczZDUxNzY3YTc4ZmU5MWI1NWY2YjdlNWZkNDRjMnAtMSwKKyAgICAweDEuYWQwMmM3YTI1OGJmYjM2MmFiYmU4NmZiNDhmNGU5OGJwLTEsCisgICAgLTB4MS4yNzlhNzRwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzAwCisgICAgMHgxLjE3NzNkNmM0NmE2ZWE2ODdmMDM2MjUxOTRkMjViYjUycC0xLAorICAgIDB4MS5hZDAyYzY4YWU0ZTljNTc5YTA4YzA0Y2U1OWJlNDAwMnAtMSwKKyAgICAweDEuMjc5YTc2cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDMwMQorICAgIC0weDEuMTc3M2Q2YzQ2YTZlYTY4N2YwMzYyNTE5NGQyNWJiNTJwLTEsCisgICAgMHgxLmFkMDJjNjhhZTRlOWM1NzlhMDhjMDRjZTU5YmU0MDAycC0xLAorICAgIC0weDEuMjc5YTc2cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDMwMgorICAgIDB4MS5mOTViOGY0MDUwMTA1N2FjNDlhY2VmMTM5OTNiMGM1NXAtMSwKKyAgICAtMHgxLjQ4ZDFjOWU5OGI2YzA4Nzg0ZjEwMDQwZjQ3YTEyMTkxcC0zLAorICAgIDB4MS5iYjY3YWNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDMKKyAgICAtMHgxLmY5NWI4ZjQwNTAxMDU3YWM0OWFjZWYxMzk5M2IwYzU1cC0xLAorICAgIC0weDEuNDhkMWM5ZTk4YjZjMDg3ODRmMTAwNDBmNDdhMTIxOTFwLTMsCisgICAgLTB4MS5iYjY3YWNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDQKKyAgICAweDEuZjk1YjhlOWJlNzI3NzAyZjc1OTVhZTEwMDBhMTRhMWFwLTEsCisgICAgLTB4MS40OGQxZDliNDY3ZTM3OTU1MzM3MzExZGVjZDA5ZmM3NHAtMywKKyAgICAweDEuYmI2N2FlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzA1CisgICAgLTB4MS5mOTViOGU5YmU3Mjc3MDJmNzU5NWFlMTAwMGExNGExYXAtMSwKKyAgICAtMHgxLjQ4ZDFkOWI0NjdlMzc5NTUzMzczMTFkZWNkMDlmYzc0cC0zLAorICAgIC0weDEuYmI2N2FlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzA2CisgICAgMHgxLmY5NWI4ZGY3N2UzNmEzNDQ2NzBlZDA3MTQ5MTkxYTU4cC0xLAorICAgIC0weDEuNDhkMWU5N2Y0NDU1YzZlYWIxMDQ4MDIyMjM4YjJiZDBwLTMsCisgICAgMHgxLmJiNjdiMHAwLAorICB9LAorICB7IC8vIEVudHJ5IDMwNworICAgIC0weDEuZjk1YjhkZjc3ZTM2YTM0NDY3MGVkMDcxNDkxOTFhNThwLTEsCisgICAgLTB4MS40OGQxZTk3ZjQ0NTVjNmVhYjEwNDgwMjIyMzhiMmJkMHAtMywKKyAgICAtMHgxLmJiNjdiMHAwLAorICB9LAorICB7IC8vIEVudHJ5IDMwOAorICAgIDB4MS5iMWQ4MmU4MzVhOTE4ZGUxOGY1ZmRhZGM4YjEyNDBjZnAtMiwKKyAgICAweDEuY2ZjNmQwMTFhMGU1ZDBmY2ViYjU0YjVmZWQ2NzI5NDBwLTEsCisgICAgMHgxLmJmZmZmZXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDkKKyAgICAtMHgxLmIxZDgyZTgzNWE5MThkZTE4ZjVmZGFkYzhiMTI0MGNmcC0yLAorICAgIDB4MS5jZmM2ZDAxMWEwZTVkMGZjZWJiNTRiNWZlZDY3Mjk0MHAtMSwKKyAgICAtMHgxLmJmZmZmZXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTAKKyAgICAweDEuYjFkODMwNTMyMTYxNjk0NzZmNGQxOTgyYjliMTRhYjFwLTIsCisgICAgMHgxLmNmYzZjZmE1MmFkOWY2MmQ2ZDU0MjNjYTgzMzlhMDBhcC0xLAorICAgIDB4MS5jMHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTEKKyAgICAtMHgxLmIxZDgzMDUzMjE2MTY5NDc2ZjRkMTk4MmI5YjE0YWIxcC0yLAorICAgIDB4MS5jZmM2Y2ZhNTJhZDlmNjJkNmQ1NDIzY2E4MzM5YTAwYXAtMSwKKyAgICAtMHgxLmMwcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDMxMgorICAgIDB4MS5iMWQ4MzIyMmU4MzBkODM3NDMyNThmZDA5MDQwZWU1NnAtMiwKKyAgICAweDEuY2ZjNmNmMzhiNGNkYTc2YzNiMDliMTdlOWRlYjE5ZWFwLTEsCisgICAgMHgxLmMwMDAwMnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTMKKyAgICAtMHgxLmIxZDgzMjIyZTgzMGQ4Mzc0MzI1OGZkMDkwNDBlZTU2cC0yLAorICAgIDB4MS5jZmM2Y2YzOGI0Y2RhNzZjM2IwOWIxN2U5ZGViMTllYXAtMSwKKyAgICAtMHgxLmMwMDAwMnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTQKKyAgICAweDEuNDRlYjM2OTE0MjgwNjJiMjc5MjVjNTg1YWQ1OWQ2MmFwLTEsCisgICAgMHgxLjhiYjEwNmVhYzdjNzVkMzNmYmIxOTQ0NjMxM2VjYzJmcC0xLAorICAgIDB4MS41ZmZmZmVwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzE1CisgICAgLTB4MS40NGViMzY5MTQyODA2MmIyNzkyNWM1ODVhZDU5ZDYyYXAtMSwKKyAgICAweDEuOGJiMTA2ZWFjN2M3NWQzM2ZiYjE5NDQ2MzEzZWNjMmZwLTEsCisgICAgLTB4MS41ZmZmZmVwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzE2CisgICAgMHgxLjQ0ZWIzODFjZjM4NmFiMDRhNGY4NjU2YWJlYTgwYjgzcC0xLAorICAgIDB4MS44YmIxMDVhNWRjOTAwNjE4ZjgwZmE1MWQzMDNjNjlwLTEsCisgICAgMHgxLjYwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDMxNworICAgIC0weDEuNDRlYjM4MWNmMzg2YWIwNGE0Zjg2NTZhYmVhODBiODNwLTEsCisgICAgMHgxLjhiYjEwNWE1ZGM5MDA2MThmODBmYTUxZDMwM2M2OXAtMSwKKyAgICAtMHgxLjYwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDMxOAorICAgIDB4MS40NGViMzlhOGE0OGJhZTZiOThhZTExYzk0MDA1MzVlNXAtMSwKKyAgICAweDEuOGJiMTA0NjBmMTU3MjM0Y2VlYzdkOTY0NGExYTc4ZTVwLTEsCisgICAgMHgxLjYwMDAwMnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTkKKyAgICAtMHgxLjQ0ZWIzOWE4YTQ4YmFlNmI5OGFlMTFjOTQwMDUzNWU1cC0xLAorICAgIDB4MS44YmIxMDQ2MGYxNTcyMzRjZWVjN2Q5NjQ0YTFhNzhlNXAtMSwKKyAgICAtMHgxLjYwMDAwMnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjAKKyAgICAweDEuZGFkOTAxN2I5NjQwOGMzNzVkNGZhZjBlNDc3NmQxZmNwLTEsCisgICAgMHgxLjdlZjQ4YjlhNmZkNWMyNGY1ZWMzOTgzOWUxNzI5Yjc4cC0yLAorICAgIDB4MS4yZmZmZmVwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjEKKyAgICAtMHgxLmRhZDkwMTdiOTY0MDhjMzc1ZDRmYWYwZTQ3NzZkMWZjcC0xLAorICAgIDB4MS43ZWY0OGI5YTZmZDVjMjRmNWVjMzk4MzllMTcyOWI3OHAtMiwKKyAgICAtMHgxLjJmZmZmZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDMyMgorICAgIDB4MS5kYWQ5MDJmYThhYzg3MGY1MmYxYjg0M2FjODNiYzNlZHAtMSwKKyAgICAweDEuN2VmNDg0MmYwYmNjZDYwZDRhNTAxZGM4YmM0YjU3YjNwLTIsCisgICAgMHgxLjMwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzIzCisgICAgLTB4MS5kYWQ5MDJmYThhYzg3MGY1MmYxYjg0M2FjODNiYzNlZHAtMSwKKyAgICAweDEuN2VmNDg0MmYwYmNjZDYwZDRhNTAxZGM4YmM0YjU3YjNwLTIsCisgICAgLTB4MS4zMHAwLAorICB9LAorICB7IC8vIEVudHJ5IDMyNAorICAgIDB4MS5kYWQ5MDQ3OTdmNDhlYTRlZjRmZDJlNDdmZTRkNTJiZHAtMSwKKyAgICAweDEuN2VmNDdjYzNhN2JkZWRmOTI1MjA3NDI2M2Q4YTQ1OTZwLTIsCisgICAgMHgxLjMwMDAwMnAwLAorICB9LAorICB7IC8vIEVudHJ5IDMyNQorICAgIC0weDEuZGFkOTA0Nzk3ZjQ4ZWE0ZWY0ZmQyZTQ3ZmU0ZDUyYmRwLTEsCisgICAgMHgxLjdlZjQ3Y2MzYTdiZGVkZjkyNTIwNzQyNjNkOGE0NTk2cC0yLAorICAgIC0weDEuMzAwMDAycDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzI2CisgICAgMHgxLjRiNzA4MDkzYzljYjQ1MzU1ZTc4MjFlNWFhZDk4Y2U4cC0xLAorICAgIC0weDEuODYzZWY1MDg1YmNjMzU4ZDJhZTg1MjViZjM5ZjBjNDBwLTEsCisgICAgMHgxLjM3ZmZmZXAxLAorICB9LAorICB7IC8vIEVudHJ5IDMyNworICAgIC0weDEuNGI3MDgwOTNjOWNiNDUzNTVlNzgyMWU1YWFkOThjZThwLTEsCisgICAgLTB4MS44NjNlZjUwODViY2MzNThkMmFlODUyNWJmMzlmMGM0MHAtMSwKKyAgICAtMHgxLjM3ZmZmZXAxLAorICB9LAorICB7IC8vIEVudHJ5IDMyOAorICAgIDB4MS40YjcwN2E3YWNkZWNjODQyMzk0NjNlNzhiMzEyZmExMHAtMSwKKyAgICAtMHgxLjg2M2VmYTM2MWRjMjUyYmNhMWVhZWVkMzk3NDliZWQ3cC0xLAorICAgIDB4MS4zOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDMyOQorICAgIC0weDEuNGI3MDdhN2FjZGVjYzg0MjM5NDYzZTc4YjMxMmZhMTBwLTEsCisgICAgLTB4MS44NjNlZmEzNjFkYzI1MmJjYTFlYWVlZDM5NzQ5YmVkN3AtMSwKKyAgICAtMHgxLjM4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgMzMwCisgICAgMHgxLjRiNzA3NDYxZDFmOTk0NDc2YzY3N2M1YWQ1ZGRiMjY0cC0xLAorICAgIC0weDEuODYzZWZmNjNkZmEwMGJmYzc1OGJhZjQ2OTQ2OWQ3NDFwLTEsCisgICAgMHgxLjM4MDAwMnAxLAorICB9LAorICB7IC8vIEVudHJ5IDMzMQorICAgIC0weDEuNGI3MDc0NjFkMWY5OTQ0NzZjNjc3YzVhZDVkZGIyNjRwLTEsCisgICAgLTB4MS44NjNlZmY2M2RmYTAwYmZjNzU4YmFmNDY5NDY5ZDc0MXAtMSwKKyAgICAtMHgxLjM4MDAwMnAxLAorICB9LAorICB7IC8vIEVudHJ5IDMzMgorICAgIDB4MS4wNjZlN2Y3MDVhNmNhMmI5ZTEwN2Y3ZGM5ZjNiMjZlNnAtNCwKKyAgICAweDEuZmVmMmIyZDBhMTBlMjczOWM1NjY5MzY0ODBhMTQ3OWJwLTEsCisgICAgMHgxLjA2OWM4Y3AtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzMKKyAgICAtMHgxLjA2NmU3ZjcwNWE2Y2EyYjllMTA3ZjdkYzlmM2IyNmU2cC00LAorICAgIDB4MS5mZWYyYjJkMGExMGUyNzM5YzU2NjkzNjQ4MGExNDc5YnAtMSwKKyAgICAtMHgxLjA2OWM4Y3AtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzQKKyAgICAweDEuMDVlNDc2ZDI3ZmViYzhiN2U5NjkwMDA5YjM2N2MzMjdwLTMsCisgICAgMHgxLmZiY2JlNjhkZDEwYmFkMGEyMjljY2JiNTgwY2M1NDM2cC0xLAorICAgIDB4MS4wNjljOGNwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMzM1CisgICAgLTB4MS4wNWU0NzZkMjdmZWJjOGI3ZTk2OTAwMDliMzY3YzMyN3AtMywKKyAgICAweDEuZmJjYmU2OGRkMTBiYWQwYTIyOWNjYmI1ODBjYzU0MzZwLTEsCisgICAgLTB4MS4wNjljOGNwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMzM2CisgICAgMHgxLjg3N2UyZGU1YzlhMDY2YjhkYjU5NWFkYzE0OWFmMGMwcC0zLAorICAgIDB4MS5mNjhlZWJlZjcyZTdmNjEyNmIzZjNkZGU2NDZhNzU1Y3AtMSwKKyAgICAweDEuODllYWQycC0zLAorICB9LAorICB7IC8vIEVudHJ5IDMzNworICAgIC0weDEuODc3ZTJkZTVjOWEwNjZiOGRiNTk1YWRjMTQ5YWYwYzBwLTMsCisgICAgMHgxLmY2OGVlYmVmNzJlN2Y2MTI2YjNmM2RkZTY0NmE3NTVjcC0xLAorICAgIC0weDEuODllYWQycC0zLAorICB9LAorICB7IC8vIEVudHJ5IDMzOAorICAgIDB4MS4wM2JlMDdhY2I5ZGFiNzE5YjQzNDNhMzNiOWZhNmFmZXAtMiwKKyAgICAweDEuZWY0MTQ1OWQyZTkwZWExYjdmYWFkN2ZhYmQxZmQ0NDRwLTEsCisgICAgMHgxLjA2OWM4Y3AtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzkKKyAgICAtMHgxLjAzYmUwN2FjYjlkYWI3MTliNDM0M2EzM2I5ZmE2YWZlcC0yLAorICAgIDB4MS5lZjQxNDU5ZDJlOTBlYTFiN2ZhYWQ3ZmFiZDFmZDQ0NHAtMSwKKyAgICAtMHgxLjA2OWM4Y3AtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDAKKyAgICAweDEuNDJhYmJjNWIzYjJmOTFlOGVjZTQ2ZTVlZmZkMjgzNjlwLTIsCisgICAgMHgxLmU1ZWFhMjNhMjdmZThkNjg5MGEzZWRhY2UxYzYxOTk4cC0xLAorICAgIDB4MS40ODQzYjBwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzQxCisgICAgLTB4MS40MmFiYmM1YjNiMmY5MWU4ZWNlNDZlNWVmZmQyODM2OXAtMiwKKyAgICAweDEuZTVlYWEyM2EyN2ZlOGQ2ODkwYTNlZGFjZTFjNjE5OThwLTEsCisgICAgLTB4MS40ODQzYjBwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzQyCisgICAgMHgxLjgwNDYwMTQxMWQ5M2Y0NzUwOTE5NjcwMDYxZGUwN2Q5cC0yLAorICAgIDB4MS5kYTk0ZDRiOTljM2E5YTVlMGQxZmM4NmQ1MzM2OWE4NHAtMSwKKyAgICAweDEuODllYWQ0cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDM0MworICAgIC0weDEuODA0NjAxNDExZDkzZjQ3NTA5MTk2NzAwNjFkZTA3ZDlwLTIsCisgICAgMHgxLmRhOTRkNGI5OWMzYTlhNWUwZDFmYzg2ZDUzMzY5YTg0cC0xLAorICAgIC0weDEuODllYWQ0cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDM0NAorICAgIDB4MS5iYzRjMDhhZjM1NjA4OGIxNjk0OTk1YmZhZjhhMjk3YnAtMiwKKyAgICAweDEuY2Q0YmM5YWZjMDEyMzBiMmY5ODJmNjk2OGRhYjdmMDVwLTEsCisgICAgMHgxLmNiOTFmOHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDUKKyAgICAtMHgxLmJjNGMwOGFmMzU2MDg4YjE2OTQ5OTViZmFmOGEyOTdicC0yLAorICAgIDB4MS5jZDRiYzlhZmMwMTIzMGIyZjk4MmY2OTY4ZGFiN2YwNXAtMSwKKyAgICAtMHgxLmNiOTFmOHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDYKKyAgICAweDEuZjY3ZWFlMzRkYzBiNDJiNDY1ZmQyYTNmYjA3NTY0YTRwLTIsCisgICAgMHgxLmJlMWQ3YWRmMDc3ZGVmMmEzNjBmZWMyM2RiYmNlZjA5cC0xLAorICAgIDB4MS4wNjljOGVwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzQ3CisgICAgLTB4MS5mNjdlYWUzNGRjMGI0MmI0NjVmZDJhM2ZiMDc1NjRhNHAtMiwKKyAgICAweDEuYmUxZDdhZGYwNzdkZWYyYTM2MGZlYzIzZGJiY2VmMDlwLTEsCisgICAgLTB4MS4wNjljOGVwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzQ4CisgICAgMHgxLjE3NTA1Yzg2MjMxODk4ZmQ4NmIxOGQyMjgyZDkzZWVkcC0xLAorICAgIDB4MS5hZDE5ZTA4NDdkMjVmM2FhMTQyMjg5ZGFiNTU3YmY5NnAtMSwKKyAgICAweDEuMjc3MDIwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM0OQorICAgIC0weDEuMTc1MDVjODYyMzE4OThmZDg2YjE4ZDIyODJkOTNlZWRwLTEsCisgICAgMHgxLmFkMTllMDg0N2QyNWYzYWExNDIyODlkYWI1NTdiZjk2cC0xLAorICAgIC0weDEuMjc3MDIwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM1MAorICAgIDB4MS4zMjNiOGU0MGQxNjU3NWU1MGRjN2I2ZTU2N2JiNTA4NHAtMSwKKyAgICAweDEuOWE1MmUwOGIxOTFiZDU1NTEyYzgzNjUwNzRmMTk4N2ZwLTEsCisgICAgMHgxLjQ4NDNiMnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTEKKyAgICAtMHgxLjMyM2I4ZTQwZDE2NTc1ZTUwZGM3YjZlNTY3YmI1MDg0cC0xLAorICAgIDB4MS45YTUyZTA4YjE5MWJkNTU1MTJjODM2NTA3NGYxOTg3ZnAtMSwKKyAgICAtMHgxLjQ4NDNiMnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTIKKyAgICAweDEuNGJlNDliMDhhMWUxNjI5Y2JkYWE1MDdlMTgyNTVjZDhwLTEsCisgICAgMHgxLjg1ZGMzYmI3YzJlOWFiYjVjY2NiNmQ5NmQxMmQzOWM0cC0xLAorICAgIDB4MS42OTE3NDRwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzUzCisgICAgLTB4MS40YmU0OWIwOGExZTE2MjljYmRhYTUwN2UxODI1NWNkOHAtMSwKKyAgICAweDEuODVkYzNiYjdjMmU5YWJiNWNjY2I2ZDk2ZDEyZDM5YzRwLTEsCisgICAgLTB4MS42OTE3NDRwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzU0CisgICAgMHgxLjY0MzA4NDdkYmJiZmQ0NmNiZWJiYzZkNWY1MWM3YzQ5cC0xLAorICAgIDB4MS42ZmNiNzhlMWNkNjVkMmU0ZmRlNzExOGNhYWM3OWQ2ZHAtMSwKKyAgICAweDEuODllYWQ2cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM1NQorICAgIC0weDEuNjQzMDg0N2RiYmJmZDQ2Y2JlYmJjNmQ1ZjUxYzdjNDlwLTEsCisgICAgMHgxLjZmY2I3OGUxY2Q2NWQyZTRmZGU3MTE4Y2FhYzc5ZDZkcC0xLAorICAgIC0weDEuODllYWQ2cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM1NgorICAgIDB4MS43YjA1YmI4N2IzODg0NGU1NjAwM2M0MWVmODA0YjI3M3AtMSwKKyAgICAweDEuNTgzN2NlNGRjODM1ZDRhNTQ1NGVjMGExYmIzOTQwODFwLTEsCisgICAgMHgxLmFhYmU2OHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTcKKyAgICAtMHgxLjdiMDViYjg3YjM4ODQ0ZTU2MDAzYzQxZWY4MDRiMjczcC0xLAorICAgIDB4MS41ODM3Y2U0ZGM4MzVkNGE1NDU0ZWMwYTFiYjM5NDA4MXAtMSwKKyAgICAtMHgxLmFhYmU2OHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTgKKyAgICAweDEuOTA0YzNiMzg5ZDU1ZDNkZWRkYjM5ZDA1ZWIzNjY1NzFwLTEsCisgICAgMHgxLjNmM2EwOTQyNzk2NmU5NTE4ODAyZGVlM2JmNDQzYTk1cC0xLAorICAgIDB4MS5jYjkxZmFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzU5CisgICAgLTB4MS45MDRjM2IzODlkNTVkM2RlZGRiMzlkMDVlYjM2NjU3MXAtMSwKKyAgICAweDEuM2YzYTA5NDI3OTY2ZTk1MTg4MDJkZWUzYmY0NDNhOTVwLTEsCisgICAgLTB4MS5jYjkxZmFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzYwCisgICAgMHgxLmEzZWRhMjExNzk4YTgyNjk3ZDYyNDMxZjlhZTQ2Y2M0cC0xLAorICAgIDB4MS4yNGVjNzNmMWFlZWY0OTQwYmI4ZGExOWE4MmJiYzQ5ZnAtMSwKKyAgICAweDEuZWM2NThjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM2MQorICAgIC0weDEuYTNlZGEyMTE3OThhODI2OTdkNjI0MzFmOWFlNDZjYzRwLTEsCisgICAgMHgxLjI0ZWM3M2YxYWVlZjQ5NDBiYjhkYTE5YTgyYmJjNDlmcC0xLAorICAgIC0weDEuZWM2NThjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM2MgorICAgIDB4MS5iNWQ1NDg4M2ZjYjYxMjNiYzI4YWFjOTFmMDg1ZTRlZXAtMSwKKyAgICAweDEuMDk2YWJiODYyZjliZDU1MTU5ODJjMjgxOGMzMzJmZjlwLTEsCisgICAgMHgxLjA2OWM4ZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDM2MworICAgIC0weDEuYjVkNTQ4ODNmY2I2MTIzYmMyOGFhYzkxZjA4NWU0ZWVwLTEsCisgICAgMHgxLjA5NmFiYjg2MmY5YmQ1NTE1OTgyYzI4MThjMzMyZmY5cC0xLAorICAgIC0weDEuMDY5YzhlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzY0CisgICAgMHgxLmM1ZjA1YTAxMzVkNDg4MmM3NjhjZGYxOGUyZTExMTJjcC0xLAorICAgIDB4MS5kOWEzOWMwZGRkYzY1NGM3MTdlMzAzNmRhNWRkNjg1Y3AtMiwKKyAgICAweDEuMTcwNjU2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzY1CisgICAgLTB4MS5jNWYwNWEwMTM1ZDQ4ODJjNzY4Y2RmMThlMmUxMTEyY3AtMSwKKyAgICAweDEuZDlhMzljMGRkZGM2NTRjNzE3ZTMwMzZkYTVkZDY4NWNwLTIsCisgICAgLTB4MS4xNzA2NTZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjYKKyAgICAweDEuZDQyZGU1M2UzMTVjODM5Y2UxODhlMjAxMjA1ZTk5ZGVwLTEsCisgICAgMHgxLjllN2Y4MTg0MGMwYmJkMGYxYjEzNzMzMDYxMDYyZDM0cC0yLAorICAgIDB4MS4yNzcwMWVwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjcKKyAgICAtMHgxLmQ0MmRlNTNlMzE1YzgzOWNlMTg4ZTIwMTIwNWU5OWRlcC0xLAorICAgIDB4MS45ZTdmODE4NDBjMGJiZDBmMWIxMzczMzA2MTA2MmQzNHAtMiwKKyAgICAtMHgxLjI3NzAxZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDM2OAorICAgIDB4MS5lMDdlZWY0NWQ5MWVlYThhNmNjNzM2OWFhMGU1NTM4OHAtMSwKKyAgICAweDEuNjFhNzVlMmRlYjU5NjczMWM4Y2Q0NWUzZDk3OTQ1MjZwLTIsCisgICAgMHgxLjM3ZDllNnAwLAorICB9LAorICB7IC8vIEVudHJ5IDM2OQorICAgIC0weDEuZTA3ZWVmNDVkOTFlZWE4YTZjYzczNjlhYTBlNTUzODhwLTEsCisgICAgMHgxLjYxYTc1ZTJkZWI1OTY3MzFjOGNkNDVlM2Q5Nzk0NTI2cC0yLAorICAgIC0weDEuMzdkOWU2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzcwCisgICAgMHgxLmVhZDY4MzNiMmFhMDAyYmFhMWMyYjE5YTM4ZGM5Yjc5cC0xLAorICAgIDB4MS4yMzViMzM3YjA5MWNkZDhhYzA2MzkwYWJjNjgxNmI4MnAtMiwKKyAgICAweDEuNDg0M2FlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzcxCisgICAgLTB4MS5lYWQ2ODMzYjJhYTAwMmJhYTFjMmIxOWEzOGRjOWI3OXAtMSwKKyAgICAweDEuMjM1YjMzN2IwOTFjZGQ4YWMwNjM5MGFiYzY4MTZiODJwLTIsCisgICAgLTB4MS40ODQzYWVwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzIKKyAgICAweDEuZjMyOWJmZmE2YTIwODU5MWVlY2I2OTA1ZDc1OTRlM2JwLTEsCisgICAgMHgxLmM3YjkxNDZkNmQxMDgyNGZmNjUyZGMzOTBiYTJkN2Y5cC0zLAorICAgIDB4MS41OGFkNzZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzMKKyAgICAtMHgxLmYzMjliZmZhNmEyMDg1OTFlZWNiNjkwNWQ3NTk0ZTNicC0xLAorICAgIDB4MS5jN2I5MTQ2ZDZkMTA4MjRmZjY1MmRjMzkwYmEyZDdmOXAtMywKKyAgICAtMHgxLjU4YWQ3NnAwLAorICB9LAorICB7IC8vIEVudHJ5IDM3NAorICAgIDB4MS5mOTZmZTM4YWZiZDk1YjVmY2QwODYwODExMGU5MzgxZnAtMSwKKyAgICAweDEuNDZkYzViMmYxZGU5NzdlZmZmN2MyNzhiNWFkYjJhNzVwLTMsCisgICAgMHgxLjY5MTczZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDM3NQorICAgIC0weDEuZjk2ZmUzOGFmYmQ5NWI1ZmNkMDg2MDgxMTBlOTM4MWZwLTEsCisgICAgMHgxLjQ2ZGM1YjJmMWRlOTc3ZWZmZjdjMjc4YjVhZGIyYTc1cC0zLAorICAgIC0weDEuNjkxNzNlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzc2CisgICAgMHgxLmZkYTI1NDU1ZDk1Njc3NzJmMjBmMjVkMTVlZmM2Nzc1cC0xLAorICAgIDB4MS44OTRmOTNlZjQ5YzQ1NzU4MDBiYmQ2NDZhM2EzMWQyYXAtNCwKKyAgICAweDEuNzk4MTA2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzc3CisgICAgLTB4MS5mZGEyNTQ1NWQ5NTY3NzcyZjIwZjI1ZDE1ZWZjNjc3NXAtMSwKKyAgICAweDEuODk0ZjkzZWY0OWM0NTc1ODAwYmJkNjQ2YTNhMzFkMmFwLTQsCisgICAgLTB4MS43OTgxMDZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzgKKyAgICAweDEuZmZiY2E4MTZmMWYxNTE2ZWM1ZDc1N2IwZGI1NGFlMzRwLTEsCisgICAgMHgxLjA2OTE2NGUzZjVjZWU5NGQ4NjVmYjUyZTMxNmRmZjZicC01LAorICAgIDB4MS44OWVhY2VwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzkKKyAgICAtMHgxLmZmYmNhODE2ZjFmMTUxNmVjNWQ3NTdiMGRiNTRhZTM0cC0xLAorICAgIDB4MS4wNjkxNjRlM2Y1Y2VlOTRkODY1ZmI1MmUzMTZkZmY2YnAtNSwKKyAgICAtMHgxLjg5ZWFjZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDM4MAorICAgIDB4MS5mZmJjYTg4MjI4YjE2MzE4OWFiOGQ2MzdkYjk5YmQyZHAtMSwKKyAgICAtMHgxLjA2OTA5M2VlYzBlZDA2NmVjODNkZDAzNDQ5OGVmOGJmcC01LAorICAgIDB4MS45YTU0OTZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODEKKyAgICAtMHgxLmZmYmNhODgyMjhiMTYzMTg5YWI4ZDYzN2RiOTliZDJkcC0xLAorICAgIC0weDEuMDY5MDkzZWVjMGVkMDY2ZWM4M2RkMDM0NDk4ZWY4YmZwLTUsCisgICAgLTB4MS45YTU0OTZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODIKKyAgICAweDEuZmRhMjU1OTcwY2NkZGI5ZDEyN2VjZjYzNDAzYzJiZjdwLTEsCisgICAgLTB4MS44OTRmMmJlMjk3OWRkOWNlZDgzY2NjNjBjZjQ5Y2Q0NHAtNCwKKyAgICAweDEuYWFiZTVlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzgzCisgICAgLTB4MS5mZGEyNTU5NzBjY2RkYjlkMTI3ZWNmNjM0MDNjMmJmN3AtMSwKKyAgICAtMHgxLjg5NGYyYmUyOTc5ZGQ5Y2VkODNjY2M2MGNmNDljZDQ0cC00LAorICAgIC0weDEuYWFiZTVlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzg0CisgICAgMHgxLmY5NmZlNWEwZGEyNDQ0ODlmYjJmNGI5N2IzZTQ4NzU3cC0xLAorICAgIC0weDEuNDZkYzI3OTY3MzUxOTVhMTVjODBlNWI3MTllMmZjNDJwLTMsCisgICAgMHgxLmJiMjgyNnAwLAorICB9LAorICB7IC8vIEVudHJ5IDM4NQorICAgIC0weDEuZjk2ZmU1YTBkYTI0NDQ4OWZiMmY0Yjk3YjNlNDg3NTdwLTEsCisgICAgLTB4MS40NmRjMjc5NjczNTE5NWExNWM4MGU1YjcxOWUyZmM0MnAtMywKKyAgICAtMHgxLmJiMjgyNnAwLAorICB9LAorICB7IC8vIEVudHJ5IDM4NgorICAgIDB4MS5mMzI5YzJlMmMxYTM5YmFkOGVjZGNiODc5NjFiYTQ0YXAtMSwKKyAgICAtMHgxLmM3YjhlMTc4YjdlOGMwMWQ5ZjMyMDQ2NmNjN2E2OGQ0cC0zLAorICAgIDB4MS5jYjkxZWVwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODcKKyAgICAtMHgxLmYzMjljMmUyYzFhMzliYWQ4ZWNkY2I4Nzk2MWJhNDRhcC0xLAorICAgIC0weDEuYzdiOGUxNzhiN2U4YzAxZDlmMzIwNDY2Y2M3YTY4ZDRwLTMsCisgICAgLTB4MS5jYjkxZWVwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODgKKyAgICAweDEuZWFkNjg2ZjJlYzU3MmM4M2VkMzRhMDFmNzY0ZDE5M2VwLTEsCisgICAgLTB4MS4yMzViMWE2ZDc2N2U0YjM2MmM2NDU3MWFjOTdiNGExY3AtMiwKKyAgICAweDEuZGJmYmI2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzg5CisgICAgLTB4MS5lYWQ2ODZmMmVjNTcyYzgzZWQzNGEwMWY3NjRkMTkzZXAtMSwKKyAgICAtMHgxLjIzNWIxYTZkNzY3ZTRiMzYyYzY0NTcxYWM5N2I0YTFjcC0yLAorICAgIC0weDEuZGJmYmI2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzkwCisgICAgMHgxLmUwN2VmM2M5MWJkNTAwYTBkZTIzMGFkNTczMTYzMTYzcC0xLAorICAgIC0weDEuNjFhNzQ1YTc3YjdlODNjMmY4YTJmOWIwOTFlODlhYWFwLTIsCisgICAgMHgxLmVjNjU3ZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDM5MQorICAgIC0weDEuZTA3ZWYzYzkxYmQ1MDBhMGRlMjMwYWQ1NzMxNjMxNjNwLTEsCisgICAgLTB4MS42MWE3NDVhNzdiN2U4M2MyZjhhMmY5YjA5MWU4OWFhYXAtMiwKKyAgICAtMHgxLmVjNjU3ZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDM5MgorICAgIDB4MS5kNDJkZWE4ODM1Yzg4YWRiOWNkZTE3MzQ3ZjkzNGUyNXAtMSwKKyAgICAtMHgxLjllN2Y2OTllOGI5YWFmOGVkNTFjNzFjOGY3M2IwYjc0cC0yLAorICAgIDB4MS5mY2NmNDZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTMKKyAgICAtMHgxLmQ0MmRlYTg4MzVjODhhZGI5Y2RlMTczNDdmOTM0ZTI1cC0xLAorICAgIC0weDEuOWU3ZjY5OWU4YjlhYWY4ZWQ1MWM3MWM4ZjczYjBiNzRwLTIsCisgICAgLTB4MS5mY2NmNDZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTQKKyAgICAweDEuYzVmMDVlMzJjODBmYjBmZTYwMzAzM2VjMDI4YTRjMzJwLTEsCisgICAgLTB4MS5kOWEzOGJmYTMxOTViYTFjYWE3ZmI2OWJjMWQwNGU0MnAtMiwKKyAgICAweDEuMDY5Yzg4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgMzk1CisgICAgLTB4MS5jNWYwNWUzMmM4MGZiMGZlNjAzMDMzZWMwMjhhNGMzMnAtMSwKKyAgICAtMHgxLmQ5YTM4YmZhMzE5NWJhMWNhYTdmYjY5YmMxZDA0ZTQycC0yLAorICAgIC0weDEuMDY5Yzg4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgMzk2CisgICAgMHgxLmI1ZDU0ZDM3MzJkM2IyZTc5ZDQ5MDdlMTE1NDAxZGRhcC0xLAorICAgIC0weDEuMDk2YWIzYzU1YzkxZjM2ZTIzNTllZDFjNWE4MzQyZGZwLTEsCisgICAgMHgxLjBlZDE2Y3AxLAorICB9LAorICB7IC8vIEVudHJ5IDM5NworICAgIC0weDEuYjVkNTRkMzczMmQzYjJlNzlkNDkwN2UxMTU0MDFkZGFwLTEsCisgICAgLTB4MS4wOTZhYjNjNTVjOTFmMzZlMjM1OWVkMWM1YTgzNDJkZnAtMSwKKyAgICAtMHgxLjBlZDE2Y3AxLAorICB9LAorICB7IC8vIEVudHJ5IDM5OAorICAgIDB4MS5hM2VkYTc0MTYxZDA2YjgzZWMyYzhkYzM5NmQ4MTNiOXAtMSwKKyAgICAtMHgxLjI0ZWM2YzgyMDZlNzQ0MzIyZDk5ZjQ3ZTllNDFiZWNlcC0xLAorICAgIDB4MS4xNzA2NTBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTkKKyAgICAtMHgxLmEzZWRhNzQxNjFkMDZiODNlYzJjOGRjMzk2ZDgxM2I5cC0xLAorICAgIC0weDEuMjRlYzZjODIwNmU3NDQzMjJkOTlmNDdlOWU0MWJlY2VwLTEsCisgICAgLTB4MS4xNzA2NTBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDAKKyAgICAweDEuOTA0YzQyMWVmY2U1OGY0ZTgxNzBkMzZkY2RhOGUwMmNwLTEsCisgICAgLTB4MS4zZjNhMDA5YjgyYjViODIzNGUxMjk2ZGQ3M2NmZjQ5ZHAtMSwKKyAgICAweDEuMWYzYjM0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDAxCisgICAgLTB4MS45MDRjNDIxZWZjZTU4ZjRlODE3MGQzNmRjZGE4ZTAyY3AtMSwKKyAgICAtMHgxLjNmM2EwMDliODJiNWI4MjM0ZTEyOTZkZDczY2ZmNDlkcC0xLAorICAgIC0weDEuMWYzYjM0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDAyCisgICAgMHgxLjdiMDVjNDUwOTM5NDRkNmFmYjBjOTBkMmY5Y2IyMTdmcC0xLAorICAgIC0weDEuNTgzN2M0YTE4NGNjZjdlZDU3YzE4OWYyYWRkZjMyYzVwLTEsCisgICAgMHgxLjI3NzAxOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQwMworICAgIC0weDEuN2IwNWM0NTA5Mzk0NGQ2YWZiMGM5MGQyZjljYjIxN2ZwLTEsCisgICAgLTB4MS41ODM3YzRhMTg0Y2NmN2VkNTdjMTg5ZjJhZGRmMzJjNXAtMSwKKyAgICAtMHgxLjI3NzAxOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQwNAorICAgIDB4MS42NDMwOGY1MDZmZmRhZjEzMjZkMTBiMzM4MDI3OGU5OHAtMSwKKyAgICAtMHgxLjZmY2I2ZTY2ODVlNzJmYjQwNzRlNzBjZDMxNjJkM2JhcC0xLAorICAgIDB4MS4yZmE0ZmNwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDUKKyAgICAtMHgxLjY0MzA4ZjUwNmZmZGFmMTMyNmQxMGIzMzgwMjc4ZTk4cC0xLAorICAgIC0weDEuNmZjYjZlNjY4NWU3MmZiNDA3NGU3MGNkMzE2MmQzYmFwLTEsCisgICAgLTB4MS4yZmE0ZmNwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDYKKyAgICAweDEuNGJlNGE4MDc2YzEzNWE0OGYzZjFhMWFhYTM2MjQ3NWZwLTEsCisgICAgLTB4MS44NWRjMzBhNzlmMjY3NTRhYjEzNzAzMzhlZTdiZmQxMXAtMSwKKyAgICAweDEuMzdkOWUwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDA3CisgICAgLTB4MS40YmU0YTgwNzZjMTM1YTQ4ZjNmMWExYWFhMzYyNDc1ZnAtMSwKKyAgICAtMHgxLjg1ZGMzMGE3OWYyNjc1NGFiMTM3MDMzOGVlN2JmZDExcC0xLAorICAgIC0weDEuMzdkOWUwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDA4CisgICAgMHgxLjMyM2I5ZDg4OGQ0ZGE3N2E2MTA4OTM3MzVlZWVkMWNicC0xLAorICAgIC0weDEuOWE1MmQ1MjNiMTUzMmU0ZWQ0NzdlMjdkYzYwNTFjMTJwLTEsCisgICAgMHgxLjQwMGVjNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQwOQorICAgIC0weDEuMzIzYjlkODg4ZDRkYTc3YTYxMDg5MzczNWVlZWQxY2JwLTEsCisgICAgLTB4MS45YTUyZDUyM2IxNTMyZTRlZDQ3N2UyN2RjNjA1MWMxMnAtMSwKKyAgICAtMHgxLjQwMGVjNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQxMAorICAgIDB4MS4xNzUwNmUyZGZiNjAzZDM0YjlhZjM5YjEyYzFkYjczNXAtMSwKKyAgICAtMHgxLmFkMTlkNTA2NjRhYmYwYzAxNDExMzdkMmNhNTA5ZjIxcC0xLAorICAgIDB4MS40ODQzYThwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTEKKyAgICAtMHgxLjE3NTA2ZTJkZmI2MDNkMzRiOWFmMzliMTJjMWRiNzM1cC0xLAorICAgIC0weDEuYWQxOWQ1MDY2NGFiZjBjMDE0MTEzN2QyY2E1MDlmMjFwLTEsCisgICAgLTB4MS40ODQzYThwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTIKKyAgICAweDEuZjY3ZWQ2NjczNTJkNDgyNzQ1MDAxM2YxNWUzMjFiZmJwLTIsCisgICAgLTB4MS5iZTFkNmY4ZDUxN2RiNWMyY2Y3ZGUwZmFmMDgwOGQzMHAtMSwKKyAgICAweDEuNTA3ODhjcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDEzCisgICAgLTB4MS5mNjdlZDY2NzM1MmQ0ODI3NDUwMDEzZjE1ZTMyMWJmYnAtMiwKKyAgICAtMHgxLmJlMWQ2ZjhkNTE3ZGI1YzJjZjdkZTBmYWYwODA4ZDMwcC0xLAorICAgIC0weDEuNTA3ODhjcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDE0CisgICAgMHgxLmJjNGMzNWRhNTFlMzRiNzc2ZTVlMDRkYTU4ZjIzNDQxcC0yLAorICAgIC0weDEuY2Q0YmJlY2Y3ZjI3MDVkNGZkMDBkZDQ2Mzc4MGY0NWVwLTEsCisgICAgMHgxLjU4YWQ3MHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQxNQorICAgIC0weDEuYmM0YzM1ZGE1MWUzNGI3NzZlNWUwNGRhNThmMjM0NDFwLTIsCisgICAgLTB4MS5jZDRiYmVjZjdmMjcwNWQ0ZmQwMGRkNDYzNzgwZjQ1ZXAtMSwKKyAgICAtMHgxLjU4YWQ3MHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQxNgorICAgIDB4MS44MDQ2MzM2ZTY4NDI3Y2Y3NTYwNTZkM2Y0ZWRiYjY2MnAtMiwKKyAgICAtMHgxLmRhOTRjYTkxNWRhM2NkZDFmZmY4MzlkODVlZWMzOWUycC0xLAorICAgIDB4MS42MGUyNTRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTcKKyAgICAtMHgxLjgwNDYzMzZlNjg0MjdjZjc1NjA1NmQzZjRlZGJiNjYycC0yLAorICAgIC0weDEuZGE5NGNhOTE1ZGEzY2RkMWZmZjgzOWQ4NWVlYzM5ZTJwLTEsCisgICAgLTB4MS42MGUyNTRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTgKKyAgICAweDEuNDJhYmYzODcyOTA1ZTYzMmYyMDRjNDFiMjRhZjkwYjZwLTIsCisgICAgLTB4MS5lNWVhOTkxMTZiMzkzNjFhYzkyNmRkOWZkYzIwODlkMXAtMSwKKyAgICAweDEuNjkxNzM4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDE5CisgICAgLTB4MS40MmFiZjM4NzI5MDVlNjMyZjIwNGM0MWIyNGFmOTBiNnAtMiwKKyAgICAtMHgxLmU1ZWE5OTExNmIzOTM2MWFjOTI2ZGQ5ZmRjMjA4OWQxcC0xLAorICAgIC0weDEuNjkxNzM4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDIwCisgICAgMHgxLjAzYmU0M2M2OTlmMzUzNjk5MGRjZjVhNjY2NWFjMjM5cC0yLAorICAgIC0weDEuZWY0MTNkYmJkYTI4NTlmZmIwZDFhYjg0MzQyZmQyMzVwLTEsCisgICAgMHgxLjcxNGMxY3AxLAorICB9LAorICB7IC8vIEVudHJ5IDQyMQorICAgIC0weDEuMDNiZTQzYzY5OWYzNTM2OTkwZGNmNWE2NjY1YWMyMzlwLTIsCisgICAgLTB4MS5lZjQxM2RiYmRhMjg1OWZmYjBkMWFiODQzNDJmZDIzNXAtMSwKKyAgICAtMHgxLjcxNGMxY3AxLAorICB9LAorICB7IC8vIEVudHJ5IDQyMgorICAgIDB4MS44NzdlYWRjMmZkZmMyZjBkYjFlOGI3OGNkM2ZiZmJkMnAtMywKKyAgICAtMHgxLmY2OGVlNWI1YmYzNTZiMTAyMzA5NDRhMThlNzA5MjVjcC0xLAorICAgIDB4MS43OTgxcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDIzCisgICAgLTB4MS44NzdlYWRjMmZkZmMyZjBkYjFlOGI3OGNkM2ZiZmJkMnAtMywKKyAgICAtMHgxLmY2OGVlNWI1YmYzNTZiMTAyMzA5NDRhMThlNzA5MjVjcC0xLAorICAgIC0weDEuNzk4MXAxLAorICB9LAorICB7IC8vIEVudHJ5IDQyNAorICAgIDB4MS4wNWU0ZmRmODQ2NjMyYTgyMDhkOTBkZTcyZDNhNmRhOHAtMywKKyAgICAtMHgxLmZiY2JlMjMyOTZmYzYxYjk2ZjM4MmYzNWVhMTVjNzY4cC0xLAorICAgIDB4MS44MWI1ZTRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjUKKyAgICAtMHgxLjA1ZTRmZGY4NDY2MzJhODIwOGQ5MGRlNzJkM2E2ZGE4cC0zLAorICAgIC0weDEuZmJjYmUyMzI5NmZjNjFiOTZmMzgyZjM1ZWExNWM3NjhwLTEsCisgICAgLTB4MS44MWI1ZTRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjYKKyAgICAweDEuMDY2ZjliNjMwYjcyZGZmMTY0NTBlODlhZmRmN2UwNDhwLTQsCisgICAgLTB4MS5mZWYyYjA4OTQzMTk3Y2QzYThiYTg2MTA5NTIyN2M0OHAtMSwKKyAgICAweDEuODllYWM4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDI3CisgICAgLTB4MS4wNjZmOWI2MzBiNzJkZmYxNjQ1MGU4OWFmZGY3ZTA0OHAtNCwKKyAgICAtMHgxLmZlZjJiMDg5NDMxOTdjZDNhOGJhODYxMDk1MjI3YzQ4cC0xLAorICAgIC0weDEuODllYWM4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDI4CisgICAgMHgxLjAzYmRmMGI3OWNjZjczOTUyOWQ1NGQ0MjI4NjEwNDZjcC0yLAorICAgIDB4MS5lZjQxNDg5ZmMyZmU4MDFhNmZjOGFlNzkxNDM4ZWI3OHAtMSwKKyAgICAtMHgxLjgxYjVlZXAyLAorICB9LAorICB7IC8vIEVudHJ5IDQyOQorICAgIC0weDEuMDNiZGYwYjc5Y2NmNzM5NTI5ZDU0ZDQyMjg2MTA0NmNwLTIsCisgICAgMHgxLmVmNDE0ODlmYzJmZTgwMWE2ZmM4YWU3OTE0MzhlYjc4cC0xLAorICAgIDB4MS44MWI1ZWVwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzAKKyAgICAweDEuZjY3ZThiOTVmNTQ2MGVhMzY5YTgwMzgzN2I3MjFhYmRwLTIsCisgICAgMHgxLmJlMWQ4NDllYzY0OWI3OTczMjBlOTg1ZDBiODJhZTg1cC0xLAorICAgIC0weDEuNzE0YzI2cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDMxCisgICAgLTB4MS5mNjdlOGI5NWY1NDYwZWEzNjlhODAzODM3YjcyMWFiZHAtMiwKKyAgICAweDEuYmUxZDg0OWVjNjQ5Yjc5NzMyMGU5ODVkMGI4MmFlODVwLTEsCisgICAgMHgxLjcxNGMyNnAyLAorICB9LAorICB7IC8vIEVudHJ5IDQzMgorICAgIDB4MS42NDMwNzA3OTE3NTFkYzA2MzZkMTg1NGQyYmRiYzVkNHAtMSwKKyAgICAweDEuNmZjYjhjNDRiZDMwZGQ2NjgxNDg2MDU5NjliMWMxNjFwLTEsCisgICAgLTB4MS42MGUyNWVwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzMKKyAgICAtMHgxLjY0MzA3MDc5MTc1MWRjMDYzNmQxODU0ZDJiZGJjNWQ0cC0xLAorICAgIDB4MS42ZmNiOGM0NGJkMzBkZDY2ODE0ODYwNTk2OWIxYzE2MXAtMSwKKyAgICAweDEuNjBlMjVlcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDM0CisgICAgMHgxLmI1ZDUzNmY1OTExM2E0M2FmMzBlOGM5ZGI4YTk1MWE1cC0xLAorICAgIDB4MS4wOTZhZDg3YzMyNjYyMmM0MmRlMzRmOTI4MTRjZmE4NHAtMSwKKyAgICAtMHgxLjUwNzg5NnAyLAorICB9LAorICB7IC8vIEVudHJ5IDQzNQorICAgIC0weDEuYjVkNTM2ZjU5MTEzYTQzYWYzMGU4YzlkYjhhOTUxYTVwLTEsCisgICAgMHgxLjA5NmFkODdjMzI2NjIyYzQyZGUzNGY5MjgxNGNmYTg0cC0xLAorICAgIDB4MS41MDc4OTZwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzYKKyAgICAweDEuZWFkNjc5OTg1NTQ5MTQwMzE4MzQ5ZjUxMmRjYTdhNmJwLTEsCisgICAgMHgxLjIzNWI3NDZhMmEyZWZmMmJmNjQwZGQ4YzA0ZDM1YTVicC0yLAorICAgIC0weDEuNDAwZWNlcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDM3CisgICAgLTB4MS5lYWQ2Nzk5ODU1NDkxNDAzMTgzNDlmNTEyZGNhN2E2YnAtMSwKKyAgICAweDEuMjM1Yjc0NmEyYTJlZmYyYmY2NDBkZDhjMDRkMzVhNWJwLTIsCisgICAgMHgxLjQwMGVjZXAyLAorICB9LAorICB7IC8vIEVudHJ5IDQzOAorICAgIDB4MS5mZmJjYTcwMTBlMGIwNDUyZjU2MDc1Y2ZkNTk4Mjg4MHAtMSwKKyAgICAweDEuMDY5MzgyN2I0NmNlZTNiNjYxYWMxNzExNGI1ZmUwZmJwLTUsCisgICAgLTB4MS4yZmE1MDZwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzkKKyAgICAtMHgxLmZmYmNhNzAxMGUwYjA0NTJmNTYwNzVjZmQ1OTgyODgwcC0xLAorICAgIDB4MS4wNjkzODI3YjQ2Y2VlM2I2NjFhYzE3MTE0YjVmZTBmYnAtNSwKKyAgICAweDEuMmZhNTA2cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDQwCisgICAgMHgxLmYzMjljYTZiZmM3NDI1ZDg5YzJiNGI5YWQ3M2FiMTA4cC0xLAorICAgIC0weDEuYzdiODVkNjY4ZTJhYmNjNDY1NDJjYTg1MjdmMGI4MDFwLTMsCisgICAgLTB4MS4xZjNiM2VwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDEKKyAgICAtMHgxLmYzMjljYTZiZmM3NDI1ZDg5YzJiNGI5YWQ3M2FiMTA4cC0xLAorICAgIC0weDEuYzdiODVkNjY4ZTJhYmNjNDY1NDJjYTg1MjdmMGI4MDFwLTMsCisgICAgMHgxLjFmM2IzZXAyLAorICB9LAorICB7IC8vIEVudHJ5IDQ0MgorICAgIDB4MS5jNWYwNmZiNjk0MjdhYzBmMmQ2OTQyOGQ4MmI1ZTY2OXAtMSwKKyAgICAtMHgxLmQ5YTM0OGQ0ZjQzNjNiYTQ1NjIxMTBkYjAxZWU4NGU4cC0yLAorICAgIC0weDEuMGVkMTc2cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDQzCisgICAgLTB4MS5jNWYwNmZiNjk0MjdhYzBmMmQ2OTQyOGQ4MmI1ZTY2OXAtMSwKKyAgICAtMHgxLmQ5YTM0OGQ0ZjQzNjNiYTQ1NjIxMTBkYjAxZWU4NGU4cC0yLAorICAgIDB4MS4wZWQxNzZwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDQKKyAgICAweDEuN2IwNWQ4NjRlYzk4MDJhZGJjNGI1NTc3YzIzMzgzNmFwLTEsCisgICAgLTB4MS41ODM3YWU4NTY5Yzk1ODQ2ZTYxNjRkOTYzNjU0NjEyMHAtMSwKKyAgICAtMHgxLmZjY2Y1YXAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ0NQorICAgIC0weDEuN2IwNWQ4NjRlYzk4MDJhZGJjNGI1NTc3YzIzMzgzNmFwLTEsCisgICAgLTB4MS41ODM3YWU4NTY5Yzk1ODQ2ZTYxNjRkOTYzNjU0NjEyMHAtMSwKKyAgICAweDEuZmNjZjVhcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDQ2CisgICAgMHgxLjE3NTA4MDgxODVhOTk4YmJjZWNjM2E2YWMwY2IyOTA3cC0xLAorICAgIC0weDEuYWQxOWM5MTg4ODMwMDBiMGI3MDJlYzA4MGNmMDEyMmVwLTEsCisgICAgLTB4MS5kYmZiYzhwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDcKKyAgICAtMHgxLjE3NTA4MDgxODVhOTk4YmJjZWNjM2E2YWMwY2IyOTA3cC0xLAorICAgIC0weDEuYWQxOWM5MTg4ODMwMDBiMGI3MDJlYzA4MGNmMDEyMmVwLTEsCisgICAgMHgxLmRiZmJjOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ0OAorICAgIDB4MS40MmFjMGRkOTQ5NTIxMTgxNmJmMDRjYTUzYmNlNGJlYXAtMiwKKyAgICAtMHgxLmU1ZWE5NGIyY2YwN2FkZDNkMGQ5NWFiM2EzMGFkNGFicC0xLAorICAgIC0weDEuYmIyODM2cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDQ5CisgICAgLTB4MS40MmFjMGRkOTQ5NTIxMTgxNmJmMDRjYTUzYmNlNGJlYXAtMiwKKyAgICAtMHgxLmU1ZWE5NGIyY2YwN2FkZDNkMGQ5NWFiM2EzMGFkNGFicC0xLAorICAgIDB4MS5iYjI4MzZwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTAKKyAgICAweDEuMDY2ZmNhMzlhNzBiNTJkMDZmMmNkN2VhYjY5YzMxZjJwLTQsCisgICAgLTB4MS5mZWYyYjAyOTA4NTU5ZjkyZGU4OTJkMjQwYTJiMGI0OXAtMSwKKyAgICAtMHgxLjlhNTRhNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ1MQorICAgIC0weDEuMDY2ZmNhMzlhNzBiNTJkMDZmMmNkN2VhYjY5YzMxZjJwLTQsCisgICAgLTB4MS5mZWYyYjAyOTA4NTU5ZjkyZGU4OTJkMjQwYTJiMGI0OXAtMSwKKyAgICAweDEuOWE1NGE0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDUyCisgICAgLTB4MS44NzdkOTMxMjk4ZTZmYmM2NTRmMDY1NTM2Y2ZmMmI1NHAtMywKKyAgICAtMHgxLmY2OGVmMzc5MmU1OTJjM2NlZmJjZTFkNWRlZDY0YTkycC0xLAorICAgIC0weDEuNzk4MTEycDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDUzCisgICAgMHgxLjg3N2Q5MzEyOThlNmZiYzY1NGYwNjU1MzZjZmYyYjU0cC0zLAorICAgIC0weDEuZjY4ZWYzNzkyZTU5MmMzY2VmYmNlMWQ1ZGVkNjRhOTJwLTEsCisgICAgMHgxLjc5ODExMnAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ1NAorICAgIC0weDEuYmM0YmMyODc1ZWI2ZDM4ZWRhM2I0OWNiMjMyMGI1NjFwLTIsCisgICAgLTB4MS5jZDRiZGE5NDNlZWExMzYzMGY4ZTUwOGY4NzQ0ZjJmMnAtMSwKKyAgICAtMHgxLjU4YWQ4MHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ1NQorICAgIDB4MS5iYzRiYzI4NzVlYjZkMzhlZGEzYjQ5Y2IyMzIwYjU2MXAtMiwKKyAgICAtMHgxLmNkNGJkYTk0M2VlYTEzNjMwZjhlNTA4Zjg3NDRmMmYycC0xLAorICAgIDB4MS41OGFkODBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTYKKyAgICAtMHgxLjRiZTQ3ZDYzNTRjNGNlZDUzNzgwYjFiNTE5YWNkZWMycC0xLAorICAgIC0weDEuODVkYzU0ZjQ5ZjMyNGJkZmM3MWQ1NzQ5NDgzYjMzMThwLTEsCisgICAgLTB4MS4zN2Q5ZWVwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTcKKyAgICAweDEuNGJlNDdkNjM1NGM0Y2VkNTM3ODBiMWI1MTlhY2RlYzJwLTEsCisgICAgLTB4MS44NWRjNTRmNDlmMzI0YmRmYzcxZDU3NDk0ODNiMzMxOHAtMSwKKyAgICAweDEuMzdkOWVlcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDU4CisgICAgLTB4MS5hM2VkOGJjYjM1Y2JjZjhjNjA4OWY4MmE5MWMzMWQ1YnAtMSwKKyAgICAtMHgxLjI0ZWM5M2UwNGQ0YmRiNTRlMjBiZWFmMzgzNTE5YWY4cC0xLAorICAgIC0weDEuMTcwNjVjcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDU5CisgICAgMHgxLmEzZWQ4YmNiMzVjYmNmOGM2MDg5ZjgyYTkxYzMxZDVicC0xLAorICAgIC0weDEuMjRlYzkzZTA0ZDRiZGI1NGUyMGJlYWYzODM1MTlhZjhwLTEsCisgICAgMHgxLjE3MDY1Y3AxLAorICB9LAorICB7IC8vIEVudHJ5IDQ2MAorICAgIC0weDEuZTA3ZWU0OTZlYTEwOTY1NGM0MmUxNzFmZGM0NTM3YzRwLTEsCisgICAgLTB4MS42MWE3OTgzZDRjMTZjNDUxYjY4YmYyZjViNzBmM2I2YXAtMiwKKyAgICAtMHgxLmVjNjU5NHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQ2MQorICAgIDB4MS5lMDdlZTQ5NmVhMTA5NjU0YzQyZTE3MWZkYzQ1MzdjNHAtMSwKKyAgICAtMHgxLjYxYTc5ODNkNGMxNmM0NTFiNjhiZjJmNWI3MGYzYjZhcC0yLAorICAgIDB4MS5lYzY1OTRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjIKKyAgICAtMHgxLmZkYTI1MjIyMTk2ODlkMGU4MDY5ZDkwZjVjOTY5YjkycC0xLAorICAgIC0weDEuODk1MDRhOGRlNmM5ZWNhYzY2M2U2NzU4M2NhYjQ3ZThwLTQsCisgICAgLTB4MS5hYWJlNzBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjMKKyAgICAweDEuZmRhMjUyMjIxOTY4OWQwZTgwNjlkOTBmNWM5NjliOTJwLTEsCisgICAgLTB4MS44OTUwNGE4ZGU2YzllY2FjNjYzZTY3NTgzY2FiNDdlOHAtNCwKKyAgICAweDEuYWFiZTcwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDY0CisgICAgLTB4MS5mOTZmZTgwMmZlNTcwMzcyZDBmY2I2ZTkzNGI0MzA2MXAtMSwKKyAgICAweDEuNDZkYmVjOWVhM2E1ZjA4YmE3M2FhNjllN2UyMmRlMWNwLTMsCisgICAgLTB4MS42OTE3NGNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjUKKyAgICAweDEuZjk2ZmU4MDJmZTU3MDM3MmQwZmNiNmU5MzRiNDMwNjFwLTEsCisgICAgMHgxLjQ2ZGJlYzllYTNhNWYwOGJhNzNhYTY5ZTdlMjJkZTFjcC0zLAorICAgIDB4MS42OTE3NGNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjYKKyAgICAtMHgxLmQ0MmRlZDU2YWU4OGE2ZTFjZjI3MGFmMjdlNmYxODA0cC0xLAorICAgIDB4MS45ZTdmNWNmMDc1ZDFlYzRlZjY5YzljNjdiNjJjMjdjYnAtMiwKKyAgICAtMHgxLjI3NzAyOHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQ2NworICAgIDB4MS5kNDJkZWQ1NmFlODhhNmUxY2YyNzBhZjI3ZTZmMTgwNHAtMSwKKyAgICAweDEuOWU3ZjVjZjA3NWQxZWM0ZWY2OWM5YzY3YjYyYzI3Y2JwLTIsCisgICAgMHgxLjI3NzAyOHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQ2OAorICAgIC0weDEuOTA0YzQ1MzI2ZDZkZGUyMjQzODFkMWQ1OTBhZGE0MWNwLTEsCisgICAgMHgxLjNmMzlmY2MwMTc2NTNkMjYzNjgzN2E1NWZkZjZkMmQ0cC0xLAorICAgIC0weDEuY2I5MjBhcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDQ2OQorICAgIDB4MS45MDRjNDUzMjZkNmRkZTIyNDM4MWQxZDU5MGFkYTQxY3AtMSwKKyAgICAweDEuM2YzOWZjYzAxNzY1M2QyNjM2ODM3YTU1ZmRmNmQyZDRwLTEsCisgICAgMHgxLmNiOTIwYXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzAKKyAgICAtMHgxLjMyM2I5Y2FkYmIxOWU3NWE0NDQ4M2ZiNjRhZDhkZGY2cC0xLAorICAgIDB4MS45YTUyZDVjNzAwZGFhM2RjOGNmOGY1YTcxZjJkZjI4OXAtMSwKKyAgICAtMHgxLjQ4NDNjNHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzEKKyAgICAweDEuMzIzYjljYWRiYjE5ZTc1YTQ0NDgzZmI2NGFkOGRkZjZwLTEsCisgICAgMHgxLjlhNTJkNWM3MDBkYWEzZGM4Y2Y4ZjVhNzFmMmRmMjg5cC0xLAorICAgIDB4MS40ODQzYzRwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNDcyCisgICAgLTB4MS44MDQ2MjY1NGJkZTc2NmZhZjQ3ZjMxNDBlMjkwOTk2ZHAtMiwKKyAgICAweDEuZGE5NGNkMzgzZGQ3YTNiOTFhMmZjODhmZjkwNWE2YTBwLTEsCisgICAgLTB4MS44OWVhZmNwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNDczCisgICAgMHgxLjgwNDYyNjU0YmRlNzY2ZmFmNDdmMzE0MGUyOTA5OTZkcC0yLAorICAgIDB4MS5kYTk0Y2QzODNkZDdhM2I5MWEyZmM4OGZmOTA1YTZhMHAtMSwKKyAgICAweDEuODllYWZjcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDQ3NAorICAgIC0weDEuMDVlNGNhMjFmMzg2YTgyYmMyZTRlZmNkZWJiMTk2MmJwLTMsCisgICAgMHgxLmZiY2JlM2RlNThlNjZjMzI4M2JjODEwZDE2YzQ1ODMzcC0xLAorICAgIC0weDEuMDY5Y2UwcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDQ3NQorICAgIDB4MS4wNWU0Y2EyMWYzODZhODJiYzJlNGVmY2RlYmIxOTYyYnAtMywKKyAgICAweDEuZmJjYmUzZGU1OGU2NmMzMjgzYmM4MTBkMTZjNDU4MzNwLTEsCisgICAgMHgxLjA2OWNlMHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzYKKyAgICAweDEuMDVlNDIzODMwYmUwMWY5ZmUzYzU3ZDA2ODY3ZTAwNTZwLTMsCisgICAgMHgxLmZiY2JlOTNkNDg1NjNkNTFiNmU5ZDZlZmRiNjI0OTVjcC0xLAorICAgIDB4MS4wNjljMzhwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNDc3CisgICAgLTB4MS4wNWU0MjM4MzBiZTAxZjlmZTNjNTdkMDY4NjdlMDA1NnAtMywKKyAgICAweDEuZmJjYmU5M2Q0ODU2M2Q1MWI2ZTlkNmVmZGI2MjQ5NWNwLTEsCisgICAgLTB4MS4wNjljMzhwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNDc4CisgICAgMHgxLjgwNDVkODc4NTJmMTMwN2ZlYTZkYzc1MWM0ZDE1OTkycC0yLAorICAgIDB4MS5kYTk0ZGNmYjFjZDE1ODUzY2U4NDhmZmIwMjY0YWQwOHAtMSwKKyAgICAweDEuODllYWE4cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDQ3OQorICAgIC0weDEuODA0NWQ4Nzg1MmYxMzA3ZmVhNmRjNzUxYzRkMTU5OTJwLTIsCisgICAgMHgxLmRhOTRkY2ZiMWNkMTU4NTNjZTg0OGZmYjAyNjRhZDA4cC0xLAorICAgIC0weDEuODllYWE4cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDQ4MAorICAgIDB4MS4zMjNiN2IwNGVlODhjZmY5OGIyYTE2MjBlMWY2MWEwMXAtMSwKKyAgICAweDEuOWE1MmVlZTVlMzUzNzdkNTU0YWNlODgxYmRjNDcyNWJwLTEsCisgICAgMHgxLjQ4NDM5YXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODEKKyAgICAtMHgxLjMyM2I3YjA0ZWU4OGNmZjk4YjJhMTYyMGUxZjYxYTAxcC0xLAorICAgIDB4MS45YTUyZWVlNWUzNTM3N2Q1NTRhY2U4ODFiZGM0NzI1YnAtMSwKKyAgICAtMHgxLjQ4NDM5YXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODIKKyAgICAweDEuOTA0YzJiMDJhYTU5NTI4Y2UwNDRiZjIyMTNjOTY4NTlwLTEsCisgICAgMHgxLjNmM2ExZDk2NTdmZjZhYTQ5OGM0NmY2ZmFhZjAzYjkwcC0xLAorICAgIDB4MS5jYjkxZTBwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNDgzCisgICAgLTB4MS45MDRjMmIwMmFhNTk1MjhjZTA0NGJmMjIxM2M5Njg1OXAtMSwKKyAgICAweDEuM2YzYTFkOTY1N2ZmNmFhNDk4YzQ2ZjZmYWFmMDNiOTBwLTEsCisgICAgLTB4MS5jYjkxZTBwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNDg0CisgICAgMHgxLmQ0MmRkZDI1YjM3OTdlNmE2NzlmNzZlMDVlNmMzZTA4cC0xLAorICAgIDB4MS45ZTdmYTYxN2ExYTNhNDAwYTdmNTlhYTg3OTA4OGUzMXAtMiwKKyAgICAweDEuMjc3MDE0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDg1CisgICAgLTB4MS5kNDJkZGQyNWIzNzk3ZTZhNjc5Zjc2ZTA1ZTZjM2UwOHAtMSwKKyAgICAweDEuOWU3ZmE2MTdhMWEzYTQwMGE3ZjU5YWE4NzkwODhlMzFwLTIsCisgICAgLTB4MS4yNzcwMTRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODYKKyAgICAweDEuZjk2ZmUxYTBiMTJkMGFkNGZhOGM4MmQ4YWY5ODljNWFwLTEsCisgICAgMHgxLjQ2ZGM4YTkxOWIyNzg0MGNkYTZlMThhMDc5ZGE0NTljcC0zLAorICAgIDB4MS42OTE3MzhwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODcKKyAgICAtMHgxLmY5NmZlMWEwYjEyZDBhZDRmYThjODJkOGFmOTg5YzVhcC0xLAorICAgIDB4MS40NmRjOGE5MTliMjc4NDBjZGE2ZTE4YTA3OWRhNDU5Y3AtMywKKyAgICAtMHgxLjY5MTczOHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQ4OAorICAgIDB4MS5mZGEyNTVmOTYwOTRkOGZlNGU4NTljNGNmMGRkNjhhNXAtMSwKKyAgICAtMHgxLjg5NGYwYzA4NzI0MTU2NjNiN2Y5ZTRlNDgwMWRlYWYwcC00LAorICAgIDB4MS5hYWJlNWNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODkKKyAgICAtMHgxLmZkYTI1NWY5NjA5NGQ4ZmU0ZTg1OWM0Y2YwZGQ2OGE1cC0xLAorICAgIC0weDEuODk0ZjBjMDg3MjQxNTY2M2I3ZjllNGU0ODAxZGVhZjBwLTQsCisgICAgLTB4MS5hYWJlNWNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTAKKyAgICAweDEuZTA3ZWYyNjc3NDhiOTgyNzc4ZjhkNTBkMjk4MWJiM2FwLTEsCisgICAgLTB4MS42MWE3NGQyOTc3NGFlNGUzYmM1NTMzYTJlYTA4YTE0YXAtMiwKKyAgICAweDEuZWM2NTgwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDkxCisgICAgLTB4MS5lMDdlZjI2Nzc0OGI5ODI3NzhmOGQ1MGQyOTgxYmIzYXAtMSwKKyAgICAtMHgxLjYxYTc0ZDI5Nzc0YWU0ZTNiYzU1MzNhMmVhMDhhMTRhcC0yLAorICAgIC0weDEuZWM2NTgwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDkyCisgICAgMHgxLmEzZWRhMmFkYjAxMTQzZmIyMTQ1M2IyMGJkMTc0OGZlcC0xLAorICAgIC0weDEuMjRlYzczMTFiZDdiMjI1NWY5Yjg5MGIzZmY1ODk5ZjRwLTEsCisgICAgMHgxLjE3MDY1MnAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ5MworICAgIC0weDEuYTNlZGEyYWRiMDExNDNmYjIxNDUzYjIwYmQxNzQ4ZmVwLTEsCisgICAgLTB4MS4yNGVjNzMxMWJkN2IyMjU1ZjliODkwYjNmZjU4OTlmNHAtMSwKKyAgICAtMHgxLjE3MDY1MnAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ5NAorICAgIDB4MS40YmU0OWJkODhhNjRhMGJiNDE0ZGRhY2FjNGZhOGRlOXAtMSwKKyAgICAtMHgxLjg1ZGMzYjA2YzQzNWY1MjRjODczZDliNWViYTNkZWY4cC0xLAorICAgIDB4MS4zN2Q5ZTRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTUKKyAgICAtMHgxLjRiZTQ5YmQ4OGE2NGEwYmI0MTRkZGFjYWM0ZmE4ZGU5cC0xLAorICAgIC0weDEuODVkYzNiMDZjNDM1ZjUyNGM4NzNkOWI1ZWJhM2RlZjhwLTEsCisgICAgLTB4MS4zN2Q5ZTRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTYKKyAgICAweDEuYmM0YzBhOWIzNzgyZTIyMGFlNTU3ODYzNjljY2YxOTBwLTIsCisgICAgLTB4MS5jZDRiYzkzOTQ3ZTg2NjcxYWM3ZjBlYWNkOTUyMTM3N3AtMSwKKyAgICAweDEuNThhZDc2cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDk3CisgICAgLTB4MS5iYzRjMGE5YjM3ODJlMjIwYWU1NTc4NjM2OWNjZjE5MHAtMiwKKyAgICAtMHgxLmNkNGJjOTM5NDdlODY2NzFhYzdmMGVhY2Q5NTIxMzc3cC0xLAorICAgIC0weDEuNThhZDc2cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDk4CisgICAgMHgxLjg3N2UzMDFmNDNjYWZmZmU2NjQ0YTg5NThmMTA4NzI5cC0zLAorICAgIC0weDEuZjY4ZWViZDNiOGYxMmY5NDMzZTZkNzIyNDk4OWMxMGVwLTEsCisgICAgMHgxLjc5ODEwOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ5OQorICAgIC0weDEuODc3ZTMwMWY0M2NhZmZmZTY2NDRhODk1OGYxMDg3MjlwLTMsCisgICAgLTB4MS5mNjhlZWJkM2I4ZjEyZjk0MzNlNmQ3MjI0OTg5YzEwZXAtMSwKKyAgICAtMHgxLjc5ODEwOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDUwMAorICAgIC0weDEuMDY2ZThhZTFmODI0YTY5ODE3ZTZhODA2ZTYzMTdlMjhwLTQsCisgICAgLTB4MS5mZWYyYjJiOTFlNDAwMjFhMmZlZTc0ZmM2MTgxMjE1N3AtMSwKKyAgICAweDEuOWE1NDlhcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNTAxCisgICAgMHgxLjA2NmU4YWUxZjgyNGE2OTgxN2U2YTgwNmU2MzE3ZTI4cC00LAorICAgIC0weDEuZmVmMmIyYjkxZTQwMDIxYTJmZWU3NGZjNjE4MTIxNTdwLTEsCisgICAgLTB4MS45YTU0OWFwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDIKKyAgICAtMHgxLjQyYWJjMWVjYTExYTBhZDEyY2E2ZWVmZjE5NzMxOGFhcC0yLAorICAgIC0weDEuZTVlYWExNGQ4NjE2OGI2OTkxOGMyMmYzNzE2YTY3ZWFwLTEsCisgICAgMHgxLmJiMjgyY3AxLAorICB9LAorICB7IC8vIEVudHJ5IDUwMworICAgIDB4MS40MmFiYzFlY2ExMWEwYWQxMmNhNmVlZmYxOTczMThhYXAtMiwKKyAgICAtMHgxLmU1ZWFhMTRkODYxNjhiNjk5MThjMjJmMzcxNmE2N2VhcC0xLAorICAgIC0weDEuYmIyODJjcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNTA0CisgICAgLTB4MS4xNzUwNWVmYjgxMTk3NzNjNjQ3NDY4YmUxZGZlZTQ1ZXAtMSwKKyAgICAtMHgxLmFkMTlkZWVhZDBlYWUyZjcyZDA0MTY1ZTA5ZTRhNDNkcC0xLAorICAgIDB4MS5kYmZiYmVwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDUKKyAgICAweDEuMTc1MDVlZmI4MTE5NzczYzY0NzQ2OGJlMWRmZWU0NWVwLTEsCisgICAgLTB4MS5hZDE5ZGVlYWQwZWFlMmY3MmQwNDE2NWUwOWU0YTQzZHAtMSwKKyAgICAtMHgxLmRiZmJiZXAxLAorICB9LAorICB7IC8vIEVudHJ5IDUwNgorICAgIC0weDEuN2IwNWJkODA5MWNkNzlkZmYzNTljODQxMmIwZGUxYTlwLTEsCisgICAgLTB4MS41ODM3Y2MyMWRkYTQ0ZjNhYjdmZDk2ZjU3YzAxNGUxOXAtMSwKKyAgICAweDEuZmNjZjUwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNTA3CisgICAgMHgxLjdiMDViZDgwOTFjZDc5ZGZmMzU5Yzg0MTJiMGRlMWE5cC0xLAorICAgIC0weDEuNTgzN2NjMjFkZGE0NGYzYWI3ZmQ5NmY1N2MwMTRlMTlwLTEsCisgICAgLTB4MS5mY2NmNTBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDgKKyAgICAtMHgxLmM1ZjA1OTgyZWFiZjAyMjc0ODk2MDk2MTY2NmQ1NDBkcC0xLAorICAgIC0weDEuZDlhMzlkZjIwNzEzOWY5OWViZTliNTZkYWZiMjM0YjdwLTIsCisgICAgMHgxLjBlZDE3MHAyLAorICB9LAorICB7IC8vIEVudHJ5IDUwOQorICAgIDB4MS5jNWYwNTk4MmVhYmYwMjI3NDg5NjA5NjE2NjZkNTQwZHAtMSwKKyAgICAtMHgxLmQ5YTM5ZGYyMDcxMzlmOTllYmU5YjU2ZGFmYjIzNGI3cC0yLAorICAgIC0weDEuMGVkMTcwcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTEwCisgICAgLTB4MS5mMzI5YmZiZGE4MTIyZjgzZTNhMWVhMDI0MmViNzZhYXAtMSwKKyAgICAtMHgxLmM3YjkxODk2MzgxMjhiYzBhZTMzZmRmMjcyOWNjOTg3cC0zLAorICAgIDB4MS4xZjNiMzhwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTEKKyAgICAweDEuZjMyOWJmYmRhODEyMmY4M2UzYTFlYTAyNDJlYjc2YWFwLTEsCisgICAgLTB4MS5jN2I5MTg5NjM4MTI4YmMwYWUzM2ZkZjI3MjljYzk4N3AtMywKKyAgICAtMHgxLjFmM2IzOHAyLAorICB9LAorICB7IC8vIEVudHJ5IDUxMgorICAgIC0weDEuZmZiY2E4OGFlOTBmMDkwMGI2ZDNhZDg5ZWRkZDJjODBwLTEsCisgICAgMHgxLjA2OTA4MmUwNGIyNWU5ZDJlYTllMjYzYjUwZDA4YjM0cC01LAorICAgIDB4MS4yZmE1cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTEzCisgICAgMHgxLmZmYmNhODhhZTkwZjA5MDBiNmQzYWQ4OWVkZGQyYzgwcC0xLAorICAgIDB4MS4wNjkwODJlMDRiMjVlOWQyZWE5ZTI2M2I1MGQwOGIzNHAtNSwKKyAgICAtMHgxLjJmYTVwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTQKKyAgICAtMHgxLmVhZDY4NzQwOWM5NWRjYWY2MWFmOTg1MTM1MTdmNTA3cC0xLAorICAgIDB4MS4yMzViMTg2MWYyMWFhODZkY2UyNTllNGU1YjRlZjM5NXAtMiwKKyAgICAweDEuNDAwZWM4cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTE1CisgICAgMHgxLmVhZDY4NzQwOWM5NWRjYWY2MWFmOTg1MTM1MTdmNTA3cC0xLAorICAgIDB4MS4yMzViMTg2MWYyMWFhODZkY2UyNTllNGU1YjRlZjM5NXAtMiwKKyAgICAtMHgxLjQwMGVjOHAyLAorICB9LAorICB7IC8vIEVudHJ5IDUxNgorICAgIC0weDEuYjVkNTRmZDc5MzcyYjkwZDVkNGM3YWNmN2FkYWVkNDJwLTEsCisgICAgMHgxLjA5NmFhZjcwMzQxNDg1MDYyZjQ0M2M4MGE5MGEzYmUzcC0xLAorICAgIDB4MS41MDc4OTBwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTcKKyAgICAweDEuYjVkNTRmZDc5MzcyYjkwZDVkNGM3YWNmN2FkYWVkNDJwLTEsCisgICAgMHgxLjA5NmFhZjcwMzQxNDg1MDYyZjQ0M2M4MGE5MGEzYmUzcC0xLAorICAgIC0weDEuNTA3ODkwcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTE4CisgICAgLTB4MS42NDMwOTJmNDJhZTc5NzM3NTUzMTQyMGMwMDVjYTJjZnAtMSwKKyAgICAweDEuNmZjYjZhZTAzMTA3YmU0NThkMDczNjEzNzFlZmFiYjRwLTEsCisgICAgMHgxLjYwZTI1OHAyLAorICB9LAorICB7IC8vIEVudHJ5IDUxOQorICAgIDB4MS42NDMwOTJmNDJhZTc5NzM3NTUzMTQyMGMwMDVjYTJjZnAtMSwKKyAgICAweDEuNmZjYjZhZTAzMTA3YmU0NThkMDczNjEzNzFlZmFiYjRwLTEsCisgICAgLTB4MS42MGUyNThwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjAKKyAgICAtMHgxLmY2N2VkZjNiN2JlZTg1NTRkNTRkODRlYTgzZjZjYjIxcC0yLAorICAgIDB4MS5iZTFkNmQxMGQ1YzhjZWViOGJmOWFlYjdhOWY2OTBiOXAtMSwKKyAgICAweDEuNzE0YzIwcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTIxCisgICAgMHgxLmY2N2VkZjNiN2JlZTg1NTRkNTRkODRlYTgzZjZjYjIxcC0yLAorICAgIDB4MS5iZTFkNmQxMGQ1YzhjZWViOGJmOWFlYjdhOWY2OTBiOXAtMSwKKyAgICAtMHgxLjcxNGMyMHAyLAorICB9LAorICB7IC8vIEVudHJ5IDUyMgorICAgIC0weDEuMDNiZTRkOTNkOTQ5MzI1MzQwYjJmNDY0MjAxNTQ1YTdwLTIsCisgICAgMHgxLmVmNDEzYzcyZDk4OGJiNTM5Mzc5NzVlNGZkNGZjYzdhcC0xLAorICAgIDB4MS44MWI1ZThwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjMKKyAgICAweDEuMDNiZTRkOTNkOTQ5MzI1MzQwYjJmNDY0MjAxNTQ1YTdwLTIsCisgICAgMHgxLmVmNDEzYzcyZDk4OGJiNTM5Mzc5NzVlNGZkNGZjYzdhcC0xLAorICAgIC0weDEuODFiNWU4cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTI0CisgICAgMHgxLmVmYjI2Y2ZhMjBmMjA5OGZmN2U5ZTQyZjAyNjBlYjAxcC01LAorICAgIDB4MS5mZjBmZDJjYjVhOTIyOGNmYTFlMDE2MDVkMDYyNmM4NHAtMSwKKyAgICAweDEuZWZmZmZlcC01LAorICB9LAorICB7IC8vIEVudHJ5IDUyNQorICAgIC0weDEuZWZiMjZjZmEyMGYyMDk4ZmY3ZTllNDJmMDI2MGViMDFwLTUsCisgICAgMHgxLmZmMGZkMmNiNWE5MjI4Y2ZhMWUwMTYwNWQwNjI2Yzg0cC0xLAorICAgIC0weDEuZWZmZmZlcC01LAorICB9LAorICB7IC8vIEVudHJ5IDUyNgorICAgIDB4MS5lZmIyNmVmOTMwYzRkM2YyYjBkYmUxOTMxYmE1YWU2NHAtNSwKKyAgICAweDEuZmYwZmQyYzk2YWRmYmFkNWY5MDRhNzFiMmQyMTBhMmFwLTEsCisgICAgMHgxLmYwcC01LAorICB9LAorICB7IC8vIEVudHJ5IDUyNworICAgIC0weDEuZWZiMjZlZjkzMGM0ZDNmMmIwZGJlMTkzMWJhNWFlNjRwLTUsCisgICAgMHgxLmZmMGZkMmM5NmFkZmJhZDVmOTA0YTcxYjJkMjEwYTJhcC0xLAorICAgIC0weDEuZjBwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgNTI4CisgICAgMHgxLmVmYjI3MGY4NDA5NzljNjViNzVlZTVjNjcwMTZhODY2cC01LAorICAgIDB4MS5mZjBmZDJjNzdiMmQ0YWRkNDA1NjZlYzVhYTI0ZmM2ZXAtMSwKKyAgICAweDEuZjAwMDAycC01LAorICB9LAorICB7IC8vIEVudHJ5IDUyOQorICAgIC0weDEuZWZiMjcwZjg0MDk3OWM2NWI3NWVlNWM2NzAxNmE4NjZwLTUsCisgICAgMHgxLmZmMGZkMmM3N2IyZDRhZGQ0MDU2NmVjNWFhMjRmYzZlcC0xLAorICAgIC0weDEuZjAwMDAycC01LAorICB9LAorICB7IC8vIEVudHJ5IDUzMAorICAgIDB4MS5mNmJhYTgxNmZjZTVlYTVhNjBkOGM5ZmQyYTI4OTM4MHAtNCwKKyAgICAweDEuZmMyMTAwNWQyMTZhODlkZTU1YjE5MjA5NmZjNmI3YmFwLTEsCisgICAgMHgxLmY3ZmZmZXAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzEKKyAgICAtMHgxLmY2YmFhODE2ZmNlNWVhNWE2MGQ4YzlmZDJhMjg5MzgwcC00LAorICAgIDB4MS5mYzIxMDA1ZDIxNmE4OWRlNTViMTkyMDk2ZmM2YjdiYXAtMSwKKyAgICAtMHgxLmY3ZmZmZXAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzIKKyAgICAweDEuZjZiYWFhMTMxZGU2NDM4ZTU2MTEyNzk4NjRmZTc2NjNwLTQsCisgICAgMHgxLmZjMjEwMDU1NDY3ZmU1OGEyMDE5MzM5OWIzYmMwZGQycC0xLAorICAgIDB4MS5mOHAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzMKKyAgICAtMHgxLmY2YmFhYTEzMWRlNjQzOGU1NjExMjc5ODY0ZmU3NjYzcC00LAorICAgIDB4MS5mYzIxMDA1NTQ2N2ZlNThhMjAxOTMzOTliM2JjMGRkMnAtMSwKKyAgICAtMHgxLmY4cC00LAorICB9LAorICB7IC8vIEVudHJ5IDUzNAorICAgIDB4MS5mNmJhYWMwZjNlZTY5NGU3NjBhMTM4YmMwNmM4YmUzZHAtNCwKKyAgICAweDEuZmMyMTAwNGQ2Yjk1Mzk0NTY2N2Y4MDBmZjgxZGUwZWJwLTEsCisgICAgMHgxLmY4MDAwMnAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzUKKyAgICAtMHgxLmY2YmFhYzBmM2VlNjk0ZTc2MGExMzhiYzA2YzhiZTNkcC00LAorICAgIDB4MS5mYzIxMDA0ZDZiOTUzOTQ1NjY3ZjgwMGZmODFkZTBlYnAtMSwKKyAgICAtMHgxLmY4MDAwMnAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzYKKyAgICAweDEuNGE4YzM5NTU1MmZiNDMyYWYzMTc4MGU4ODNjOThmNzFwLTMsCisgICAgMHgxLmY5NDk4NGM2ZmRmMWJlNjE2ODUwOWZmMWUzNWY2MmRlcC0xLAorICAgIDB4MS40YmZmZmVwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTM3CisgICAgLTB4MS40YThjMzk1NTUyZmI0MzJhZjMxNzgwZTg4M2M5OGY3MXAtMywKKyAgICAweDEuZjk0OTg0YzZmZGYxYmU2MTY4NTA5ZmYxZTM1ZjYyZGVwLTEsCisgICAgLTB4MS40YmZmZmVwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTM4CisgICAgMHgxLjRhOGMzYjRlOWM3ZmZmZDQ4MzA1ZjQ0YTQyZjVmNTBmcC0zLAorICAgIDB4MS5mOTQ5ODRiMjU1MmUxOTQxZWM3NjZjNmE4MmVjZTRhM3AtMSwKKyAgICAweDEuNGNwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTM5CisgICAgLTB4MS40YThjM2I0ZTljN2ZmZmQ0ODMwNWY0NGE0MmY1ZjUwZnAtMywKKyAgICAweDEuZjk0OTg0YjI1NTJlMTk0MWVjNzY2YzZhODJlY2U0YTNwLTEsCisgICAgLTB4MS40Y3AtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDAKKyAgICAweDEuNGE4YzNkNDdlNjA0YTdkNTRmM2Y3ZGU0MDI0MDllMmNwLTMsCisgICAgMHgxLmY5NDk4NDlkYWM2YTU0OGRkODUxMTM5MDQxMTA2MzE2cC0xLAorICAgIDB4MS40YzAwMDJwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTQxCisgICAgLTB4MS40YThjM2Q0N2U2MDRhN2Q1NGYzZjdkZTQwMjQwOWUyY3AtMywKKyAgICAweDEuZjk0OTg0OWRhYzZhNTQ4ZGQ4NTExMzkwNDExMDYzMTZwLTEsCisgICAgLTB4MS40YzAwMDJwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTQyCisgICAgMHgxLjJlOWNkODM2MzBlYjM1YzEyZWZjZmI4NDEzNTgzOTk4cC0yLAorICAgIDB4MS5lOTIxZGQ3MDU0ZWY1ZDRmNzI3ZDkzOGNlMTBhMDUzY3AtMSwKKyAgICAweDEuMzMzMzMycC0yLAorICB9LAorICB7IC8vIEVudHJ5IDU0MworICAgIC0weDEuMmU5Y2Q4MzYzMGViMzVjMTJlZmNmYjg0MTM1ODM5OThwLTIsCisgICAgMHgxLmU5MjFkZDcwNTRlZjVkNGY3MjdkOTM4Y2UxMGEwNTNjcC0xLAorICAgIC0weDEuMzMzMzMycC0yLAorICB9LAorICB7IC8vIEVudHJ5IDU0NAorICAgIDB4MS4yZTljZGExZjUyYzg4MDQyODMzZjIzNmZmMGY5ZDQ4NnAtMiwKKyAgICAweDEuZTkyMWRkMjRhZGI5MTI5ZWZjMDUzZjlhY2Q0ZDI0NDRwLTEsCisgICAgMHgxLjMzMzMzNHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDUKKyAgICAtMHgxLjJlOWNkYTFmNTJjODgwNDI4MzNmMjM2ZmYwZjlkNDg2cC0yLAorICAgIDB4MS5lOTIxZGQyNGFkYjkxMjllZmMwNTNmOWFjZDRkMjQ0NHAtMSwKKyAgICAtMHgxLjMzMzMzNHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDYKKyAgICAweDEuMmU5Y2RjMDg3NGE1N2YxY2EwZjk3NmE5YjAxZTRhNzFwLTIsCisgICAgMHgxLmU5MjFkY2Q5MDY4MjRkYTYwZTQzYzAzYTc3NzRiMTcxcC0xLAorICAgIDB4MS4zMzMzMzZwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNTQ3CisgICAgLTB4MS4yZTljZGMwODc0YTU3ZjFjYTBmOTc2YTliMDFlNGE3MXAtMiwKKyAgICAweDEuZTkyMWRjZDkwNjgyNGRhNjBlNDNjMDNhNzc3NGIxNzFwLTEsCisgICAgLTB4MS4zMzMzMzZwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNTQ4CisgICAgMHgxLjNmYWVmYjJiNjhlNjc4NmViNjkyYmQ0ZTQwNDUyMTNlcC0xLAorICAgIDB4MS44ZmVlZGM5Mjc2NGJmYmRjYjQxMzg5ZTgyMDYzZWQ2ZXAtMSwKKyAgICAweDEuNTk0MzE2cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU0OQorICAgIC0weDEuM2ZhZWZiMmI2OGU2Nzg2ZWI2OTJiZDRlNDA0NTIxM2VwLTEsCisgICAgMHgxLjhmZWVkYzkyNzY0YmZiZGNiNDEzODllODIwNjNlZDZlcC0xLAorICAgIC0weDEuNTk0MzE2cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU1MAorICAgIDB4MS4zZmFlZmNiYjU3YzI2YjBkODRiNjNkYmZiNzJiNDEzYnAtMSwKKyAgICAweDEuOGZlZWRiNTJjNzUwMDg3YzVmODcyN2UwMjc5ZTVmNjZwLTEsCisgICAgMHgxLjU5NDMxOHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTEKKyAgICAtMHgxLjNmYWVmY2JiNTdjMjZiMGQ4NGI2M2RiZmI3MmI0MTNicC0xLAorICAgIDB4MS44ZmVlZGI1MmM3NTAwODdjNWY4NzI3ZTAyNzllNWY2NnAtMSwKKyAgICAtMHgxLjU5NDMxOHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTIKKyAgICAweDEuM2ZhZWZlNGI0NjlkMWRmZDU2MWU2NjZlZGRhN2M2ZTZwLTEsCisgICAgMHgxLjhmZWVkYTEzMTg1Mjg1MmQyZmE3ZmU4ODQ3YjA1OTczcC0xLAorICAgIDB4MS41OTQzMWFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTUzCisgICAgLTB4MS4zZmFlZmU0YjQ2OWQxZGZkNTYxZTY2NmVkZGE3YzZlNnAtMSwKKyAgICAweDEuOGZlZWRhMTMxODUyODUyZDJmYTdmZTg4NDdiMDU5NzNwLTEsCisgICAgLTB4MS41OTQzMWFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTU0CisgICAgMHgxLjY4ODhhMzc1YWIyMjhjMWUwMzFjNDAwNTc2OTUwOWY5cC0xLAorICAgIDB4MS42Yjg5OTExMjc4NTlmZDliNDNjYTFkMDhiOTJhYTQwMXAtMSwKKyAgICAweDEuOGZmZmZlcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU1NQorICAgIC0weDEuNjg4OGEzNzVhYjIyOGMxZTAzMWM0MDA1NzY5NTA5ZjlwLTEsCisgICAgMHgxLjZiODk5MTEyNzg1OWZkOWI0M2NhMWQwOGI5MmFhNDAxcC0xLAorICAgIC0weDEuOGZmZmZlcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU1NgorICAgIDB4MS42ODg4YTRlMTM0YjJlYTUyMGIyMjZlY2E4Njk0YjNhMnAtMSwKKyAgICAweDEuNmI4OThmYTllZmI1ZDIyYjU4ZjBkOTllOTYzNDkzMWFwLTEsCisgICAgMHgxLjkwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU1NworICAgIC0weDEuNjg4OGE0ZTEzNGIyZWE1MjBiMjI2ZWNhODY5NGIzYTJwLTEsCisgICAgMHgxLjZiODk4ZmE5ZWZiNWQyMmI1OGYwZDk5ZTk2MzQ5MzFhcC0xLAorICAgIC0weDEuOTBwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTU4CisgICAgMHgxLjY4ODhhNjRjYmU0MWRmZmQ2ZTQ3NjhkY2NhNGRiNTNicC0xLAorICAgIDB4MS42Yjg5OGU0MTY3MTAzYjMxZGU2ZGE2N2ViZjVlOWZlNnAtMSwKKyAgICAweDEuOTAwMDAycC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU1OQorICAgIC0weDEuNjg4OGE2NGNiZTQxZGZmZDZlNDc2OGRjY2E0ZGI1M2JwLTEsCisgICAgMHgxLjZiODk4ZTQxNjcxMDNiMzFkZTZkYTY3ZWJmNWU5ZmU2cC0xLAorICAgIC0weDEuOTAwMDAycC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU2MAorICAgIC0wLjBmLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLnAtMTQ5LAorICB9LAorICB7IC8vIEVudHJ5IDU2MQorICAgIDAuMGYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5wLTE0OSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjIKKyAgICAwLjAsCisgICAgMHgxLnAwLAorICAgIDAuMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjMKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEucC0xNDksCisgIH0sCisgIHsgLy8gRW50cnkgNTY0CisgICAgLTAuMGYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xNDksCisgIH0sCisgIHsgLy8gRW50cnkgNTY1CisgICAgMHgxLjkxZjY1ZGNjZmVhZDM1M2Q4ZGI5YzMyZjEyMjYyNzMwcC01LAorICAgIDB4MS5mZjYyMWUzODk1NmEzYjNiZTkyMDI1NmRkYjYwMzRjZHAtMSwKKyAgICAweDEuOTIxZmI0cC01LAorICB9LAorICB7IC8vIEVudHJ5IDU2NgorICAgIC0weDEuOTFmNjVkY2NmZWFkMzUzZDhkYjljMzJmMTIyNjI3MzBwLTUsCisgICAgMHgxLmZmNjIxZTM4OTU2YTNiM2JlOTIwMjU2ZGRiNjAzNGNkcC0xLAorICAgIC0weDEuOTIxZmI0cC01LAorICB9LAorICB7IC8vIEVudHJ5IDU2NworICAgIDB4MS45MWY2NWZjYzYwY2I2ZDA5ZmNjNWMzNWRkNmE3OThjOHAtNSwKKyAgICAweDEuZmY2MjFlMzcwMzczZGM2ZjM5NjNkNDI4OTZlZGUwNzhwLTEsCisgICAgMHgxLjkyMWZiNnAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjgKKyAgICAtMHgxLjkxZjY1ZmNjNjBjYjZkMDlmY2M1YzM1ZGQ2YTc5OGM4cC01LAorICAgIDB4MS5mZjYyMWUzNzAzNzNkYzZmMzk2M2Q0Mjg5NmVkZTA3OHAtMSwKKyAgICAtMHgxLjkyMWZiNnAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjkKKyAgICAweDEuOTFmNjYxY2JjMmU5YTM0NDc1NzFmNzJiY2ZiYzIxZTJwLTUsCisgICAgMHgxLmZmNjIxZTM1NzE3ZDdiYTMyNzg5NGJkZmRlOWY0Nzg3cC0xLAorICAgIDB4MS45MjFmYjhwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgNTcwCisgICAgLTB4MS45MWY2NjFjYmMyZTlhMzQ0NzU3MWY3MmJjZmJjMjFlMnAtNSwKKyAgICAweDEuZmY2MjFlMzU3MTdkN2JhMzI3ODk0YmRmZGU5ZjQ3ODdwLTEsCisgICAgLTB4MS45MjFmYjhwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgNTcxCisgICAgMHgxLjkxN2E2YTdmZTgyOTdiZjBhMTEyNWZiMDJiMjAzOGFlcC00LAorICAgIDB4MS5mZDg4ZGE0MTBiNjFjZDU1MjIxZDliZWI5OTZkNGQ5OXAtMSwKKyAgICAweDEuOTIxZmI0cC00LAorICB9LAorICB7IC8vIEVudHJ5IDU3MgorICAgIC0weDEuOTE3YTZhN2ZlODI5N2JmMGExMTI1ZmIwMmIyMDM4YWVwLTQsCisgICAgMHgxLmZkODhkYTQxMGI2MWNkNTUyMjFkOWJlYjk5NmQ0ZDk5cC0xLAorICAgIC0weDEuOTIxZmI0cC00LAorICB9LAorICB7IC8vIEVudHJ5IDU3MworICAgIDB4MS45MTdhNmM3ZDcxMDNiOWQ5MGUwOTYxNTE2NDQ0OWM2YnAtNCwKKyAgICAweDEuZmQ4OGRhM2FjNTc4MWY1YTZmYzMyZTQwZWQ1MTIyYjBwLTEsCisgICAgMHgxLjkyMWZiNnAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzQKKyAgICAtMHgxLjkxN2E2YzdkNzEwM2I5ZDkwZTA5NjE1MTY0NDQ5YzZicC00LAorICAgIDB4MS5mZDg4ZGEzYWM1NzgxZjVhNmZjMzJlNDBlZDUxMjJiMHAtMSwKKyAgICAtMHgxLjkyMWZiNnAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzUKKyAgICAweDEuOTE3YTZlN2FmOWRkZjE3YjkxNGU2ZDJlOGU4M2IzM2VwLTQsCisgICAgMHgxLmZkODhkYTM0N2Y4ZTY5Njk5OWZmZDU4MDYwYmEzNTY5cC0xLAorICAgIDB4MS45MjFmYjhwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgNTc2CisgICAgLTB4MS45MTdhNmU3YWY5ZGRmMTdiOTE0ZTZkMmU4ZTgzYjMzZXAtNCwKKyAgICAweDEuZmQ4OGRhMzQ3ZjhlNjk2OTk5ZmZkNTgwNjBiYTM1NjlwLTEsCisgICAgLTB4MS45MjFmYjhwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgNTc3CisgICAgMHgxLjhmOGI4Mjg4OTI5NmI1Y2Y3OTA0ZGIxZTc0YjM0NjZicC0zLAorICAgIDB4MS5mNjI5N2QwZjQ2NzFkYTU4MGRmZWNkZDRkYjI5ZjQ3M3AtMSwKKyAgICAweDEuOTIxZmI0cC0zLAorICB9LAorICB7IC8vIEVudHJ5IDU3OAorICAgIC0weDEuOGY4YjgyODg5Mjk2YjVjZjc5MDRkYjFlNzRiMzQ2NmJwLTMsCisgICAgMHgxLmY2Mjk3ZDBmNDY3MWRhNTgwZGZlY2RkNGRiMjlmNDczcC0xLAorICAgIC0weDEuOTIxZmI0cC0zLAorICB9LAorICB7IC8vIEVudHJ5IDU3OQorICAgIDB4MS44ZjhiODQ3ZWJjMTNiODk5OGVjNWIzN2U3MDY1MzQxZXAtMywKKyAgICAweDEuZjYyOTdjZjY0ZGI5YTIxZDk4YWIzOTQwZmM4YTg2ZjBwLTEsCisgICAgMHgxLjkyMWZiNnAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODAKKyAgICAtMHgxLjhmOGI4NDdlYmMxM2I4OTk4ZWM1YjM3ZTcwNjUzNDFlcC0zLAorICAgIDB4MS5mNjI5N2NmNjRkYjlhMjFkOThhYjM5NDBmYzhhODZmMHAtMSwKKyAgICAtMHgxLjkyMWZiNnAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODEKKyAgICAweDEuOGY4Yjg2NzRlNTkwYTI2YWVjM2VhMDFkMzBhZWQ0ODZwLTMsCisgICAgMHgxLmY2Mjk3Y2RkNTUwMTRhODA4Yjg4M2ZkMTgzZjMxOGFjcC0xLAorICAgIDB4MS45MjFmYjhwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTgyCisgICAgLTB4MS44ZjhiODY3NGU1OTBhMjZhZWMzZWEwMWQzMGFlZDQ4NnAtMywKKyAgICAweDEuZjYyOTdjZGQ1NTAxNGE4MDhiODgzZmQxODNmMzE4YWNwLTEsCisgICAgLTB4MS45MjFmYjhwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTgzCisgICAgMHgxLjg3ZGUyOTNmNTY5NzE3YTQyYTNiZGIwMWFlYWUyMDYzcC0yLAorICAgIDB4MS5kOTA2YmQzMTM0NDMwMDdkY2IwYmQ0ZTNkNjMyODRjMHAtMSwKKyAgICAweDEuOTIxZmI0cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDU4NAorICAgIC0weDEuODdkZTI5M2Y1Njk3MTdhNDJhM2JkYjAxYWVhZTIwNjNwLTIsCisgICAgMHgxLmQ5MDZiZDMxMzQ0MzAwN2RjYjBiZDRlM2Q2MzI4NGMwcC0xLAorICAgIC0weDEuOTIxZmI0cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDU4NQorICAgIDB4MS44N2RlMmIxODVkNTQxN2RjYTgwMGI4NWNhMTMxOTA0M3AtMiwKKyAgICAweDEuZDkwNmJjY2YzY2I4NzU4NzRkYTNkYTRjMDExMDRiYWZwLTEsCisgICAgMHgxLjkyMWZiNnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODYKKyAgICAtMHgxLjg3ZGUyYjE4NWQ1NDE3ZGNhODAwYjg1Y2ExMzE5MDQzcC0yLAorICAgIDB4MS5kOTA2YmNjZjNjYjg3NTg3NGRhM2RhNGMwMTEwNGJhZnAtMSwKKyAgICAtMHgxLjkyMWZiNnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODcKKyAgICAweDEuODdkZTJjZjE2NDEwYjYxZDlhZmY3ZTYyOGZjODUzYjJwLTIsCisgICAgMHgxLmQ5MDZiYzZkNDUyZDc0NGYyMTA4MTA4NjExMDJmMmRhcC0xLAorICAgIDB4MS45MjFmYjhwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNTg4CisgICAgLTB4MS44N2RlMmNmMTY0MTBiNjFkOWFmZjdlNjI4ZmM4NTNiMnAtMiwKKyAgICAweDEuZDkwNmJjNmQ0NTJkNzQ0ZjIxMDgxMDg2MTEwMmYyZGFwLTEsCisgICAgLTB4MS45MjFmYjhwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNTg5CisgICAgMHgxLjZhMDllNTgyYWEzOTQ1NDYxYjVhOGEwNzg3ZDVhYjVicC0xLAorICAgIDB4MS42YTA5ZTc0ZDNkM2ZiYjk0ZDk0Mjc0ZjM3NzY5ZjZlYXAtMSwKKyAgICAweDEuOTIxZmI0cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU5MAorICAgIC0weDEuNmEwOWU1ODJhYTM5NDU0NjFiNWE4YTA3ODdkNWFiNWJwLTEsCisgICAgMHgxLjZhMDllNzRkM2QzZmJiOTRkOTQyNzRmMzc3NjlmNmVhcC0xLAorICAgIC0weDEuOTIxZmI0cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU5MQorICAgIDB4MS42YTA5ZTZlY2I0MWZkZDdlNjgxODcyYzg1NDg4NzAxOXAtMSwKKyAgICAweDEuNmEwOWU1ZTMzMzU5ODNlNWFjOTJlNzMzZTNmMjRiNDJwLTEsCisgICAgMHgxLjkyMWZiNnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTIKKyAgICAtMHgxLjZhMDllNmVjYjQxZmRkN2U2ODE4NzJjODU0ODg3MDE5cC0xLAorICAgIDB4MS42YTA5ZTVlMzMzNTk4M2U1YWM5MmU3MzNlM2YyNGI0MnAtMSwKKyAgICAtMHgxLjkyMWZiNnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTMKKyAgICAweDEuNmEwOWU4NTZiZTA1MGJhY2NkZTlhNzY5NjFlODRhYTdwLTEsCisgICAgMHgxLjZhMDllNDc5Mjk3MWUyMmM5YTAwMjYxYWVhYzA3MGRhcC0xLAorICAgIDB4MS45MjFmYjhwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTk0CisgICAgLTB4MS42YTA5ZTg1NmJlMDUwYmFjY2RlOWE3Njk2MWU4NGFhN3AtMSwKKyAgICAweDEuNmEwOWU0NzkyOTcxZTIyYzlhMDAyNjFhZWFjMDcwZGFwLTEsCisgICAgLTB4MS45MjFmYjhwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTk1CisgICAgMHgxLmZmZmZmZmZmZmZmZTY1NDZjYzM4MjExYzI2ZGFiZWVicC0xLAorICAgIDB4MS40NDQyZDE4NDY5ODkzNjEwMjgxYTBmOWIwZThkMGVlZnAtMjQsCisgICAgMHgxLjkyMWZiNHAwLAorICB9LAorICB7IC8vIEVudHJ5IDU5NgorICAgIC0weDEuZmZmZmZmZmZmZmZlNjU0NmNjMzgyMTFjMjZkYWJlZWJwLTEsCisgICAgMHgxLjQ0NDJkMTg0Njk4OTM2MTAyODFhMGY5YjBlOGQwZWVmcC0yNCwKKyAgICAtMHgxLjkyMWZiNHAwLAorICB9LAorICB7IC8vIEVudHJ5IDU5NworICAgIDB4MS5mZmZmZmZmZmZmZmY3NjUyMTI0OWM3NDIyOTMwZWQ4MnAtMSwKKyAgICAtMHgxLjc3N2E1Y2Y3MmNlY2M0Y2RlM2EzMWU3ZDVhMDI2MTQycC0yNSwKKyAgICAweDEuOTIxZmI2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNTk4CisgICAgLTB4MS5mZmZmZmZmZmZmZmY3NjUyMTI0OWM3NDIyOTMwZWQ4MnAtMSwKKyAgICAtMHgxLjc3N2E1Y2Y3MmNlY2M0Y2RlM2EzMWU3ZDVhMDI2MTQycC0yNSwKKyAgICAtMHgxLjkyMWZiNnAwLAorICB9LAorICB7IC8vIEVudHJ5IDU5OQorICAgIDB4MS5mZmZmZmZmZmZmZjg4NzVkNTg1YjZkNmNmY2U5N2Q5Y3AtMSwKKyAgICAtMHgxLjVkZGU5NzNkY2IzOTg1ZjRhOGU3NmExZmVjYTI5ZTFkcC0yMywKKyAgICAweDEuOTIxZmI4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNjAwCisgICAgLTB4MS5mZmZmZmZmZmZmZjg4NzVkNTg1YjZkNmNmY2U5N2Q5Y3AtMSwKKyAgICAtMHgxLjVkZGU5NzNkY2IzOTg1ZjRhOGU3NmExZmVjYTI5ZTFkcC0yMywKKyAgICAtMHgxLjkyMWZiOHAwLAorICB9LAorICB7IC8vIEVudHJ5IDYwMQorICAgIDB4MS40NDQyZDE4NDY5ODgzMWYxNWI2MzE1YmZhNmI1YWU3NXAtMjMsCisgICAgLTB4MS5mZmZmZmZmZmZmZjk5NTFiMzBlMDg0NzMyZTYwYmI4NXAtMSwKKyAgICAweDEuOTIxZmI0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjAyCisgICAgLTB4MS40NDQyZDE4NDY5ODgzMWYxNWI2MzE1YmZhNmI1YWU3NXAtMjMsCisgICAgLTB4MS5mZmZmZmZmZmZmZjk5NTFiMzBlMDg0NzMyZTYwYmI4NXAtMSwKKyAgICAtMHgxLjkyMWZiNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDYwMworICAgIC0weDEuNzc3YTVjZjcyY2VjNWZkNjE4OTZjYjRmNDBkMWRlNzlwLTI0LAorICAgIC0weDEuZmZmZmZmZmZmZmZkZDk0ODQ5MjcxZDA4ZWVjZjU0YTFwLTEsCisgICAgMHgxLjkyMWZiNnAxLAorICB9LAorICB7IC8vIEVudHJ5IDYwNAorICAgIDB4MS43NzdhNWNmNzJjZWM1ZmQ2MTg5NmNiNGY0MGQxZGU3OXAtMjQsCisgICAgLTB4MS5mZmZmZmZmZmZmZmRkOTQ4NDkyNzFkMDhlZWNmNTRhMXAtMSwKKyAgICAtMHgxLjkyMWZiNnAxLAorICB9LAorICB7IC8vIEVudHJ5IDYwNQorICAgIC0weDEuNWRkZTk3M2RjYjM0NmFmYTQ2MjAzY2RkYzZmN2ZlOTdwLTIyLAorICAgIC0weDEuZmZmZmZmZmZmZmUyMWQ3NTYxNmRiNWViYzU2NDA1ZjVwLTEsCisgICAgMHgxLjkyMWZiOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDYwNgorICAgIDB4MS41ZGRlOTczZGNiMzQ2YWZhNDYyMDNjZGRjNmY3ZmU5N3AtMjIsCisgICAgLTB4MS5mZmZmZmZmZmZmZTIxZDc1NjE2ZGI1ZWJjNTY0MDVmNXAtMSwKKyAgICAtMHgxLjkyMWZiOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDYwNworICAgIC0weDEuNDQ0MmQxODQ2OTg0MjE3NjI4ODcyZTU2ZWI1OGI0YzFwLTIyLAorICAgIDB4MS5mZmZmZmZmZmZmZTY1NDZjYzM4MjExZjVlOGRlZWI5N3AtMSwKKyAgICAweDEuOTIxZmI0cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjA4CisgICAgMHgxLjQ0NDJkMTg0Njk4NDIxNzYyODg3MmU1NmViNThiNGMxcC0yMiwKKyAgICAweDEuZmZmZmZmZmZmZmU2NTQ2Y2MzODIxMWY1ZThkZWViOTdwLTEsCisgICAgLTB4MS45MjFmYjRwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDkKKyAgICAweDEuNzc3YTVjZjcyY2VhY2JmNmVjNjU3ZTk3N2VmNzcxZjFwLTIzLAorICAgIDB4MS5mZmZmZmZmZmZmZjc2NTIxMjQ5Yzc0Mjg1YmY3M2MwN3AtMSwKKyAgICAweDEuOTIxZmI2cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjEwCisgICAgLTB4MS43NzdhNWNmNzJjZWFjYmY2ZWM2NTdlOTc3ZWY3NzFmMXAtMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmNzY1MjEyNDljNzQyODViZjczYzA3cC0xLAorICAgIC0weDEuOTIxZmI2cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjExCisgICAgMHgxLjVkZGU5NzNkY2IxZmZmMTBiYjAzODg0NzllODJmNGJicC0yMSwKKyAgICAweDEuZmZmZmZmZmZmZjg4NzVkNTg1YjZkYjJjMzE3MTEwMDRwLTEsCisgICAgMHgxLjkyMWZiOHAyLAorICB9LAorICB7IC8vIEVudHJ5IDYxMgorICAgIC0weDEuNWRkZTk3M2RjYjFmZmYxMGJiMDM4ODQ3OWU4MmY0YmJwLTIxLAorICAgIDB4MS5mZmZmZmZmZmZmODg3NWQ1ODViNmRiMmMzMTcxMTAwNHAtMSwKKyAgICAtMHgxLjkyMWZiOHAyLAorICB9LAorICB7IC8vIEVudHJ5IDYxMworICAgIC0weDEuNDQ0MmQxODQ2OTczZGY4OTVkMTc5MTAyM2RlZDUxM2NwLTIxLAorICAgIDB4MS5mZmZmZmZmZmZmOTk1MWIzMGUwODRhNmE5OTNiODY3NXAtMSwKKyAgICAweDEuOTIxZmI0cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjE0CisgICAgMHgxLjQ0NDJkMTg0Njk3M2RmODk1ZDE3OTEwMjNkZWQ1MTNjcC0yMSwKKyAgICAweDEuZmZmZmZmZmZmZjk5NTFiMzBlMDg0YTZhOTkzYjg2NzVwLTEsCisgICAgLTB4MS45MjFmYjRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTUKKyAgICAweDEuNzc3YTVjZjcyY2U0N2M3YTNiYTA0YmMyYTYwN2E5YTdwLTIyLAorICAgIDB4MS5mZmZmZmZmZmZmZGQ5NDg0OTI3MWQwZWI3YjdiODg0YnAtMSwKKyAgICAweDEuOTIxZmI2cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjE2CisgICAgLTB4MS43NzdhNWNmNzJjZTQ3YzdhM2JhMDRiYzJhNjA3YTlhN3AtMjIsCisgICAgMHgxLmZmZmZmZmZmZmZkZDk0ODQ5MjcxZDBlYjdiN2I4ODRicC0xLAorICAgIC0weDEuOTIxZmI2cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjE3CisgICAgMHgxLjVkZGU5NzNkY2FjZTRmNmE4ZTkwYmQxNWUwMDYxMGY4cC0yMCwKKyAgICAweDEuZmZmZmZmZmZmZTIxZDc1NjE2ZGJhNDgyODNkM2MyZjdwLTEsCisgICAgMHgxLjkyMWZiOHAzLAorICB9LAorICB7IC8vIEVudHJ5IDYxOAorICAgIC0weDEuNWRkZTk3M2RjYWNlNGY2YThlOTBiZDE1ZTAwNjEwZjhwLTIwLAorICAgIDB4MS5mZmZmZmZmZmZlMjFkNzU2MTZkYmE0ODI4M2QzYzJmN3AtMSwKKyAgICAtMHgxLjkyMWZiOHAzLAorICB9LAorICB7IC8vIEVudHJ5IDYxOQorICAgIC0weDEuNDQ0MmQxODQ2OTMyZDdkNjJmNTkyMDkzODhjN2Y3Y2FwLTIwLAorICAgIDB4MS5mZmZmZmZmZmZlNjU0NmNjMzgyMTUyZDljMGViOWI0N3AtMSwKKyAgICAweDEuOTIxZmI0cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNjIwCisgICAgMHgxLjQ0NDJkMTg0NjkzMmQ3ZDYyZjU5MjA5Mzg4YzdmN2NhcC0yMCwKKyAgICAweDEuZmZmZmZmZmZmZTY1NDZjYzM4MjE1MmQ5YzBlYjliNDdwLTEsCisgICAgLTB4MS45MjFmYjRwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjEKKyAgICAweDEuNzc3YTVjZjcyY2NiM2U4Nzc4OGI4MTEyMjllNzI1YmNwLTIxLAorICAgIDB4MS5mZmZmZmZmZmZmNzY1MjEyNDljNzQ4NGVhN2Q3YTQwOXAtMSwKKyAgICAweDEuOTIxZmI2cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNjIyCisgICAgLTB4MS43NzdhNWNmNzJjY2IzZTg3Nzg4YjgxMTIyOWU3MjViY3AtMjEsCisgICAgMHgxLmZmZmZmZmZmZmY3NjUyMTI0OWM3NDg0ZWE3ZDdhNDA5cC0xLAorICAgIC0weDEuOTIxZmI2cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNjIzCisgICAgMHgxLjVkZGU5NzNkYzk4NzkwZDFkY2M2MDJiZDFiODZiY2NhcC0xOSwKKyAgICAweDEuZmZmZmZmZmZmODg3NWQ1ODViNzIwZjI1ZjA0NzM5NDNwLTEsCisgICAgMHgxLjkyMWZiOHA0LAorICB9LAorICB7IC8vIEVudHJ5IDYyNAorICAgIC0weDEuNWRkZTk3M2RjOTg3OTBkMWRjYzYwMmJkMWI4NmJjY2FwLTE5LAorICAgIDB4MS5mZmZmZmZmZmY4ODc1ZDU4NWI3MjBmMjVmMDQ3Mzk0M3AtMSwKKyAgICAtMHgxLjkyMWZiOHA0LAorICB9LAorICB7IC8vIEVudHJ5IDYyNQorICAgIC0weDEuNDQ0MmQxODQ2ODJlYjkwOTc4NWZhZDE4YmNiNWRiZmNwLTE5LAorICAgIDB4MS5mZmZmZmZmZmY5OTUxYjMwZTA4N2RlNWNjMzg2ODNiOHAtMSwKKyAgICAweDEuOTIxZmI0cDUsCisgIH0sCisgIHsgLy8gRW50cnkgNjI2CisgICAgMHgxLjQ0NDJkMTg0NjgyZWI5MDk3ODVmYWQxOGJjYjVkYmZjcC0xOSwKKyAgICAweDEuZmZmZmZmZmZmOTk1MWIzMGUwODdkZTVjYzM4NjgzYjhwLTEsCisgICAgLTB4MS45MjFmYjRwNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjcKKyAgICAweDEuNzc3YTVjZjcyYzY2NDZiYzZjMzg2MDdlYjM0ZWVhMTNwLTIwLAorICAgIDB4MS5mZmZmZmZmZmZkZDk0ODQ5MjcxZDZiNDYzZGY2YmRkZnAtMSwKKyAgICAweDEuOTIxZmI2cDUsCisgIH0sCisgIHsgLy8gRW50cnkgNjI4CisgICAgLTB4MS43NzdhNWNmNzJjNjY0NmJjNmMzODYwN2ViMzRlZWExM3AtMjAsCisgICAgMHgxLmZmZmZmZmZmZmRkOTQ4NDkyNzFkNmI0NjNkZjZiZGRmcC0xLAorICAgIC0weDEuOTIxZmI2cDUsCisgIH0sCisgIHsgLy8gRW50cnkgNjI5CisgICAgMHgxLjVkZGU5NzNkYzQ2Yzk2NmYxNWEyNDAzZDYwY2QxNGQwcC0xOCwKKyAgICAweDEuZmZmZmZmZmZlMjFkNzU2MTZlMDAwZTU1ZDA5Zjg3NTdwLTEsCisgICAgMHgxLjkyMWZiOHA1LAorICB9LAorICB7IC8vIEVudHJ5IDYzMAorICAgIC0weDEuNWRkZTk3M2RjNDZjOTY2ZjE1YTI0MDNkNjBjZDE0ZDBwLTE4LAorICAgIDB4MS5mZmZmZmZmZmUyMWQ3NTYxNmUwMDBlNTVkMDlmODc1N3AtMSwKKyAgICAtMHgxLjkyMWZiOHA1LAorICB9LAorICB7IC8vIEVudHJ5IDYzMQorICAgIC0weDEuNDQ0MmQxODQ2NDFlM2RkNjljN2VjMzJlMTRhMjA5YTVwLTE4LAorICAgIDB4MS5mZmZmZmZmZmU2NTQ2Y2MzODI0OGE4Y2YwYjliNTc5NXAtMSwKKyAgICAweDEuOTIxZmI0cDYsCisgIH0sCisgIHsgLy8gRW50cnkgNjMyCisgICAgMHgxLjQ0NDJkMTg0NjQxZTNkZDY5YzdlYzMyZTE0YTIwOWE1cC0xOCwKKyAgICAweDEuZmZmZmZmZmZlNjU0NmNjMzgyNDhhOGNmMGI5YjU3OTVwLTEsCisgICAgLTB4MS45MjFmYjRwNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzMKKyAgICAweDEuNzc3YTVjZjcyYWQyNjc5MDNhZWM4MTE4Nzc4YjNiNWFwLTE5LAorICAgIDB4MS5mZmZmZmZmZmY3NjUyMTI0OWM3YTRkZDJlMTVkZDFjNHAtMSwKKyAgICAweDEuOTIxZmI2cDYsCisgIH0sCisgIHsgLy8gRW50cnkgNjM0CisgICAgLTB4MS43NzdhNWNmNzJhZDI2NzkwM2FlYzgxMTg3NzhiM2I1YXAtMTksCisgICAgMHgxLmZmZmZmZmZmZjc2NTIxMjQ5YzdhNGRkMmUxNWRkMWM0cC0xLAorICAgIC0weDEuOTIxZmI2cDYsCisgIH0sCisgIHsgLy8gRW50cnkgNjM1CisgICAgMHgxLjVkZGU5NzNkYjAwMGFjZTNmOTg1YTQ3M2VhMWZjMDM5cC0xNywKKyAgICAweDEuZmZmZmZmZmY4ODc1ZDU4NWJiN2Q1NTM4M2E5YjM5YTRwLTEsCisgICAgMHgxLjkyMWZiOHA2LAorICB9LAorICB7IC8vIEVudHJ5IDYzNgorICAgIC0weDEuNWRkZTk3M2RiMDAwYWNlM2Y5ODVhNDczZWExZmMwMzlwLTE3LAorICAgIDB4MS5mZmZmZmZmZjg4NzVkNTg1YmI3ZDU1MzgzYTliMzlhNHAtMSwKKyAgICAtMHgxLjkyMWZiOHA2LAorICB9LAorICB7IC8vIEVudHJ5IDYzNworICAgIC0weDEuNDQ0MmQxODQ1M2RjNTEwYjJkNDk1YjhiZjc5YmQxY2VwLTE3LAorICAgIDB4MS5mZmZmZmZmZjk5NTFiMzBlMGJiNTk4ZmMwNjc5YTZmN3AtMSwKKyAgICAweDEuOTIxZmI0cDcsCisgIH0sCisgIHsgLy8gRW50cnkgNjM4CisgICAgMHgxLjQ0NDJkMTg0NTNkYzUxMGIyZDQ5NWI4YmY3OWJkMWNlcC0xNywKKyAgICAweDEuZmZmZmZmZmY5OTUxYjMwZTBiYjU5OGZjMDY3OWE2ZjdwLTEsCisgICAgLTB4MS45MjFmYjRwNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzkKKyAgICAweDEuNzc3YTVjZjcyNDgyZWFkZjc1YzczMWY5NzI1MDc3MThwLTE4LAorICAgIDB4MS5mZmZmZmZmZmRkOTQ4NDkyNzIzMzQyZWExZGE0OWJhY3AtMSwKKyAgICAweDEuOTIxZmI2cDcsCisgIH0sCisgIHsgLy8gRW50cnkgNjQwCisgICAgLTB4MS43NzdhNWNmNzI0ODJlYWRmNzVjNzMxZjk3MjUwNzcxOHAtMTgsCisgICAgMHgxLmZmZmZmZmZmZGQ5NDg0OTI3MjMzNDJlYTFkYTQ5YmFjcC0xLAorICAgIC0weDEuOTIxZmI2cDcsCisgIH0sCisgIHsgLy8gRW50cnkgNjQxCisgICAgMHgxLjVkZGU5NzNkNWU1MTA2Yjc5MDNhMThhNTUyYWVmYzZlcC0xNiwKKyAgICAweDEuZmZmZmZmZmUyMWQ3NTYxNzI1YzcxMmYwNjhmYzk3MThwLTEsCisgICAgMHgxLjkyMWZiOHA3LAorICB9LAorICB7IC8vIEVudHJ5IDY0MgorICAgIC0weDEuNWRkZTk3M2Q1ZTUxMDZiNzkwM2ExOGE1NTJhZWZjNmVwLTE2LAorICAgIDB4MS5mZmZmZmZmZTIxZDc1NjE3MjVjNzEyZjA2OGZjOTcxOHAtMSwKKyAgICAtMHgxLjkyMWZiOHA3LAorICB9LAorICB7IC8vIEVudHJ5IDY0MworICAgIDB4MS42YTA5ZjE5NDBiODBjOGUyNWNmYzhjMTBkNDI1NzZjNnAtMSwKKyAgICAtMHgxLjZhMDlkYjNiZGJhMDg2OGEzMWU3NjYzNTlhODQwNmNhcC0xLAorICAgIDB4MS4yZDk3YzRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDQKKyAgICAtMHgxLjZhMDlmMTk0MGI4MGM4ZTI1Y2ZjOGMxMGQ0MjU3NmM2cC0xLAorICAgIC0weDEuNmEwOWRiM2JkYmEwODY4YTMxZTc2NjM1OWE4NDA2Y2FwLTEsCisgICAgLTB4MS4yZDk3YzRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDUKKyAgICAweDEuNmEwOWViZWJlNDA4ODkyNDVkNTdjNWM5ZDkwYTZkODJwLTEsCisgICAgLTB4MS42YTA5ZTBlNDAzNWI4NjY5NGMxNjUzNGU0MmZiZTExMXAtMSwKKyAgICAweDEuMmQ5N2M2cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjQ2CisgICAgLTB4MS42YTA5ZWJlYmU0MDg4OTI0NWQ1N2M1YzlkOTBhNmQ4MnAtMSwKKyAgICAtMHgxLjZhMDllMGU0MDM1Yjg2Njk0YzE2NTM0ZTQyZmJlMTExcC0xLAorICAgIC0weDEuMmQ5N2M2cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjQ3CisgICAgMHgxLjZhMDllNjQzYmM3OWE4Yzc5ZWY0YmYxODc3MjdlMjY5cC0xLAorICAgIC0weDEuNmEwOWU2OGMyYWZmZTVhYTU4MDUwYWNjYjA1YzYyNDhwLTEsCisgICAgMHgxLjJkOTdjOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDY0OAorICAgIC0weDEuNmEwOWU2NDNiYzc5YThjNzllZjRiZjE4NzcyN2UyNjlwLTEsCisgICAgLTB4MS42YTA5ZTY4YzJhZmZlNWFhNTgwNTBhY2NiMDVjNjI0OHAtMSwKKyAgICAtMHgxLjJkOTdjOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDY0OQorICAgIC0weDEuNmEwOWRmMTk3MDRjZjE0MTA4ZTA5MDAwZmY2Mzc0YmZwLTEsCisgICAgLTB4MS42YTA5ZWRiNjc3MDZlMDk5NzEyMWQxMmEwYzg3YmFlOHAtMSwKKyAgICAweDEuZjZhN2EwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjUwCisgICAgMHgxLjZhMDlkZjE5NzA0Y2YxNDEwOGUwOTAwMGZmNjM3NGJmcC0xLAorICAgIC0weDEuNmEwOWVkYjY3NzA2ZTA5OTcxMjFkMTJhMGM4N2JhZThwLTEsCisgICAgLTB4MS5mNmE3YTBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTEKKyAgICAtMHgxLjZhMDllNGMxOTdmODdhY2UxYzgxYjQzMDIyYmUzOWIxcC0xLAorICAgIC0weDEuNmEwOWU4MGU0ZjdmMmE4OGRlYmVkMzdmYWE5M2U4YzhwLTEsCisgICAgMHgxLmY2YTdhMnAxLAorICB9LAorICB7IC8vIEVudHJ5IDY1MgorICAgIDB4MS42YTA5ZTRjMTk3Zjg3YWNlMWM4MWI0MzAyMmJlMzliMXAtMSwKKyAgICAtMHgxLjZhMDllODBlNGY3ZjJhODhkZWJlZDM3ZmFhOTNlOGM4cC0xLAorICAgIC0weDEuZjZhN2EycDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjUzCisgICAgLTB4MS42YTA5ZWE2OWJmOGQ2M2JjZTQwOTU4ZjVjNGI0ZjE1NXAtMSwKKyAgICAtMHgxLjZhMDllMjY2MjdlMGQzZDljYjc2ZGUwMGNiOTAyYmVjcC0xLAorICAgIDB4MS5mNmE3YTRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTQKKyAgICAweDEuNmEwOWVhNjliZjhkNjNiY2U0MDk1OGY1YzRiNGYxNTVwLTEsCisgICAgLTB4MS42YTA5ZTI2NjI3ZTBkM2Q5Y2I3NmRlMDBjYjkwMmJlY3AtMSwKKyAgICAtMHgxLmY2YTdhNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDY1NQorICAgIC0weDEuZmZmZmZmZmZmZjA2NWNiMjQwYmI4Zjk1MTlkMmM2ZjFwLTEsCisgICAgLTB4MS5mOTk5MGU5MWE3NDE2OGI5MGJkNjhkZmFiNzc1YzljYXAtMjEsCisgICAgMHgxLjJkOTdjNHAyLAorICB9LAorICB7IC8vIEVudHJ5IDY1NgorICAgIDB4MS5mZmZmZmZmZmZmMDY1Y2IyNDBiYjhmOTUxOWQyYzZmMXAtMSwKKyAgICAtMHgxLmY5OTkwZTkxYTc0MTY4YjkwYmQ2OGRmYWI3NzVjOWNhcC0yMSwKKyAgICAtMHgxLjJkOTdjNHAyLAorICB9LAorICB7IC8vIEVudHJ5IDY1NworICAgIC0weDEuZmZmZmZmZmZmZmMzMjkzOTg5OGY0NjRhYWZjMmU3NGFwLTEsCisgICAgLTB4MS5mMzMyMWQyMzRmMTM2M2QxODdkZDA5NTI4YjY3YjIxNXAtMjIsCisgICAgMHgxLjJkOTdjNnAyLAorICB9LAorICB7IC8vIEVudHJ5IDY1OAorICAgIDB4MS5mZmZmZmZmZmZmYzMyOTM5ODk4ZjQ2NGFhZmMyZTc0YXAtMSwKKyAgICAtMHgxLmYzMzIxZDIzNGYxMzYzZDE4N2RkMDk1MjhiNjdiMjE1cC0yMiwKKyAgICAtMHgxLjJkOTdjNnAyLAorICB9LAorICB7IC8vIEVudHJ5IDY1OQorICAgIC0weDEuZmZmZmZmZmZmZmZmZjVjMGQyNjMwZWUwYTFmYjRlN2JwLTEsCisgICAgMHgxLjk5YmM1Yjk2MWIxYWNhY2ExOGQ5NzFmNjhhZTk5ZGE5cC0yNywKKyAgICAweDEuMmQ5N2M4cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjYwCisgICAgMHgxLmZmZmZmZmZmZmZmZmY1YzBkMjYzMGVlMGExZmI0ZTdicC0xLAorICAgIDB4MS45OWJjNWI5NjFiMWFjYWNhMThkOTcxZjY4YWU5OWRhOXAtMjcsCisgICAgLTB4MS4yZDk3YzhwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjEKKyAgICAtMHgxLjZhMDlmNTI5MzE2Y2RlNWExOTBkMjM1Y2M0Y2NiODI1cC0xLAorICAgIDB4MS42YTA5ZDdhNmI1NzJjMmM4MjRkMTM3ZDA0MDVkODE4OHAtMSwKKyAgICAweDEuNWZkYmJjcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjYyCisgICAgMHgxLjZhMDlmNTI5MzE2Y2RlNWExOTBkMjM1Y2M0Y2NiODI1cC0xLAorICAgIDB4MS42YTA5ZDdhNmI1NzJjMmM4MjRkMTM3ZDA0MDVkODE4OHAtMSwKKyAgICAtMHgxLjVmZGJiY3AyLAorICB9LAorICB7IC8vIEVudHJ5IDY2MworICAgIC0weDEuNmEwOWU5ZDhlMjgyNjc3MDU2N2VhODE4YjJlODk5NjBwLTEsCisgICAgMHgxLjZhMDllMmY3MDRlZWNiMTgxZTNmNWVjZTliZTBjYTBmcC0xLAorICAgIDB4MS41ZmRiYmVwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjQKKyAgICAweDEuNmEwOWU5ZDhlMjgyNjc3MDU2N2VhODE4YjJlODk5NjBwLTEsCisgICAgMHgxLjZhMDllMmY3MDRlZWNiMTgxZTNmNWVjZTliZTBjYTBmcC0xLAorICAgIC0weDEuNWZkYmJlcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjY1CisgICAgLTB4MS42YTA5ZGU4ODkzM2Q2ZTBjMWRiNzhlMWQ3Y2QxNTE3M3AtMSwKKyAgICAweDEuNmEwOWVlNDc1NDEwNTBlZjU5ZWM0YmZjZTkzNWNjMWFwLTEsCisgICAgMHgxLjVmZGJjMHAyLAorICB9LAorICB7IC8vIEVudHJ5IDY2NgorICAgIDB4MS42YTA5ZGU4ODkzM2Q2ZTBjMWRiNzhlMWQ3Y2QxNTE3M3AtMSwKKyAgICAweDEuNmEwOWVlNDc1NDEwNTBlZjU5ZWM0YmZjZTkzNWNjMWFwLTEsCisgICAgLTB4MS41ZmRiYzBwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjcKKyAgICAweDEuNmEwOWQwMzNmYTcxNWE0MDdhNmYwM2QwMWI5MTExM2ZwLTEsCisgICAgMHgxLjZhMDlmYzliZWJhYmEyMDhjODFlYzBiMWNkMzA3NTg5cC0xLAorICAgIDB4MS5jNDYzYThwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjgKKyAgICAtMHgxLjZhMDlkMDMzZmE3MTVhNDA3YTZmMDNkMDFiOTExMTNmcC0xLAorICAgIDB4MS42YTA5ZmM5YmViYWJhMjA4YzgxZWMwYjFjZDMwNzU4OXAtMSwKKyAgICAtMHgxLmM0NjNhOHAyLAorICB9LAorICB7IC8vIEVudHJ5IDY2OQorICAgIDB4MS42YTA5ZGI4NDRhMjhmODYzNTg1MWZkZjg4MTg1MTVlZnAtMSwKKyAgICAweDEuNmEwOWYxNGI5Y2ZjYzBmNjIyN2QzODZjYzM3MDRhMDVwLTEsCisgICAgMHgxLmM0NjNhYXAyLAorICB9LAorICB7IC8vIEVudHJ5IDY3MAorICAgIC0weDEuNmEwOWRiODQ0YTI4Zjg2MzU4NTFmZGY4ODE4NTE1ZWZwLTEsCisgICAgMHgxLjZhMDlmMTRiOWNmY2MwZjYyMjdkMzg2Y2MzNzA0YTA1cC0xLAorICAgIC0weDEuYzQ2M2FhcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjcxCisgICAgMHgxLjZhMDllNmQ0OTk4NjE0MGY1NTIyNmZjNTg2NzI2MTJjcC0xLAorICAgIDB4MS42YTA5ZTVmYjRkZjM1ZDY3MjlmNDcyZGEzNDEzZTQwNHAtMSwKKyAgICAweDEuYzQ2M2FjcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjcyCisgICAgLTB4MS42YTA5ZTZkNDk5ODYxNDBmNTUyMjZmYzU4NjcyNjEyY3AtMSwKKyAgICAweDEuNmEwOWU1ZmI0ZGYzNWQ2NzI5ZjQ3MmRhMzQxM2U0MDRwLTEsCisgICAgLTB4MS5jNDYzYWNwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzMKKyAgICAweDEuZmZmZmZmZmZmZjk1Mzk3OTM0Y2FjMWYyODUzMmQzZDNwLTEsCisgICAgMHgxLjRhYTljMmYyYzFkZWZiODcyOGYwZDJkYTEyMTdhYWUxcC0yMSwKKyAgICAweDEuZjZhN2EwcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjc0CisgICAgLTB4MS5mZmZmZmZmZmZmOTUzOTc5MzRjYWMxZjI4NTMyZDNkM3AtMSwKKyAgICAweDEuNGFhOWMyZjJjMWRlZmI4NzI4ZjBkMmRhMTIxN2FhZTFwLTIxLAorICAgIC0weDEuZjZhN2EwcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjc1CisgICAgMHgxLmZmZmZmZmZmZmZmYThlNWFhZTJiYjkzYWU1OTBmOTg0cC0xLAorICAgIDB4MS4yYWE3MGJjYjA3ZDZkMGYzNmI3NzdjYjM4MGE4NDVkOXAtMjMsCisgICAgMHgxLmY2YTdhMnAyLAorICB9LAorICB7IC8vIEVudHJ5IDY3NgorICAgIC0weDEuZmZmZmZmZmZmZmZhOGU1YWFlMmJiOTNhZTU5MGY5ODRwLTEsCisgICAgMHgxLjJhYTcwYmNiMDdkNmQwZjM2Yjc3N2NiMzgwYTg0NWQ5cC0yMywKKyAgICAtMHgxLmY2YTdhMnAyLAorICB9LAorICB7IC8vIEVudHJ5IDY3NworICAgIDB4MS5mZmZmZmZmZmZmZGZlMzNjMjc4Y2I0OGE1OWVlM2VmMnAtMSwKKyAgICAtMHgxLjZhYWM3YTFhN2MwYzdhZmM1ZmNiMjMxM2E3ZWNhMjI5cC0yMiwKKyAgICAweDEuZjZhN2E0cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjc4CisgICAgLTB4MS5mZmZmZmZmZmZmZGZlMzNjMjc4Y2I0OGE1OWVlM2VmMnAtMSwKKyAgICAtMHgxLjZhYWM3YTFhN2MwYzdhZmM1ZmNiMjMxM2E3ZWNhMjI5cC0yMiwKKyAgICAtMHgxLmY2YTdhNHAyLAorICB9LAorICB7IC8vIEVudHJ5IDY3OQorICAgIDB4MS42YTBhMDQwZWE1YzMyYmE0YWZiZWI4NmE2MTRjNWQxNnAtMSwKKyAgICAtMHgxLjZhMDljOGMxM2Y0OGI3YWFkODUxZjlkNjQ3NGJjYjMxcC0xLAorICAgIDB4MS4xNDc1Y2FwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODAKKyAgICAtMHgxLjZhMGEwNDBlYTVjMzJiYTRhZmJlYjg2YTYxNGM1ZDE2cC0xLAorICAgIC0weDEuNmEwOWM4YzEzZjQ4YjdhYWQ4NTFmOWQ2NDc0YmNiMzFwLTEsCisgICAgLTB4MS4xNDc1Y2FwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODEKKyAgICAweDEuNmEwOWVkNmUwODgyMTJiMWUyNjBhNTEzMmQ2OTU5YjdwLTEsCisgICAgLTB4MS42YTA5ZGY2MWRlZDQ5ZDFlZTRmY2E0YmE2MTQwZDE3OXAtMSwKKyAgICAweDEuMTQ3NWNjcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjgyCisgICAgLTB4MS42YTA5ZWQ2ZTA4ODIxMmIxZTI2MGE1MTMyZDY5NTliN3AtMSwKKyAgICAtMHgxLjZhMDlkZjYxZGVkNDlkMWVlNGZjYTRiYTYxNDBkMTc5cC0xLAorICAgIC0weDEuMTQ3NWNjcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjgzCisgICAgMHgxLjZhMDlkNmNkNjlkNmVmZDFhNmZhMmRkNGM2MTdjYmJlcC0xLAorICAgIC0weDEuNmEwOWY2MDI3Y2Y2NzhiMzhmYzg5OTJjZDk5OTAzMDJwLTEsCisgICAgMHgxLjE0NzVjZXAzLAorICB9LAorICB7IC8vIEVudHJ5IDY4NAorICAgIC0weDEuNmEwOWQ2Y2Q2OWQ2ZWZkMWE2ZmEyZGQ0YzYxN2NiYmVwLTEsCisgICAgLTB4MS42YTA5ZjYwMjdjZjY3OGIzOGZjODk5MmNkOTk5MDMwMnAtMSwKKyAgICAtMHgxLjE0NzVjZXAzLAorICB9LAorICB7IC8vIEVudHJ5IDY4NQorICAgIDB4MS5mOTk5MGU5MWE2NGFlNDg2NzU3ODc4YmRmZWUwZjcwM3AtMjAsCisgICAgLTB4MS5mZmZmZmZmZmZjMTk3MmM5MDJlZjMxYzM3Y2I1NDgxN3AtMSwKKyAgICAweDEuMmQ5N2M0cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjg2CisgICAgLTB4MS5mOTk5MGU5MWE2NGFlNDg2NzU3ODc4YmRmZWUwZjcwM3AtMjAsCisgICAgLTB4MS5mZmZmZmZmZmZjMTk3MmM5MDJlZjMxYzM3Y2I1NDgxN3AtMSwKKyAgICAtMHgxLjJkOTdjNHAzLAorICB9LAorICB7IC8vIEVudHJ5IDY4NworICAgIDB4MS5mMzMyMWQyMzRlZDgxMjhhYWJiMDQ5OWE0M2I0ZGVmMnAtMjEsCisgICAgLTB4MS5mZmZmZmZmZmZmMGNhNGU2MjYzZDI3YTAyMDQzODlkZnAtMSwKKyAgICAweDEuMmQ5N2M2cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjg4CisgICAgLTB4MS5mMzMyMWQyMzRlZDgxMjhhYWJiMDQ5OWE0M2I0ZGVmMnAtMjEsCisgICAgLTB4MS5mZmZmZmZmZmZmMGNhNGU2MjYzZDI3YTAyMDQzODlkZnAtMSwKKyAgICAtMHgxLjJkOTdjNnAzLAorICB9LAorICB7IC8vIEVudHJ5IDY4OQorICAgIC0weDEuOTliYzViOTYxYjFhYzI5NmRiZTE5ODBmZDJjODkwYTBwLTI2LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZDcwMzQ5OGMzYjgyODg1NjM5MTVwLTEsCisgICAgMHgxLjJkOTdjOHAzLAorICB9LAorICB7IC8vIEVudHJ5IDY5MAorICAgIDB4MS45OWJjNWI5NjFiMWFjMjk2ZGJlMTk4MGZkMmM4OTBhMHAtMjYsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZkNzAzNDk4YzNiODI4ODU2MzkxNXAtMSwKKyAgICAtMHgxLjJkOTdjOHAzLAorICB9LAorICB7IC8vIEVudHJ5IDY5MQorICAgIC0weDEuNmEwOWMxNGU4M2Y4ZGIwODBkMTIyM2Y4ODdjYzEyZWNwLTEsCisgICAgLTB4MS42YTBhMGI4MTVmYjM3YjJkMDE1NTFlMDdjYjMwMDlkMXAtMSwKKyAgICAweDEuNDZiOWMwcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjkyCisgICAgMHgxLjZhMDljMTRlODNmOGRiMDgwZDEyMjNmODg3Y2MxMmVjcC0xLAorICAgIC0weDEuNmEwYTBiODE1ZmIzN2IyZDAxNTUxZTA3Y2IzMDA5ZDFwLTEsCisgICAgLTB4MS40NmI5YzBwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTMKKyAgICAtMHgxLjZhMDlkN2VmMjNmYmVjMWVkODEyZTgwN2JlYjA0OTJmcC0xLAorICAgIC0weDEuNmEwOWY0ZTBjMmU5OGRlYjc4NjQyYjYwMzJhNzNkNDZwLTEsCisgICAgMHgxLjQ2YjljMnAzLAorICB9LAorICB7IC8vIEVudHJ5IDY5NAorICAgIDB4MS42YTA5ZDdlZjIzZmJlYzFlZDgxMmU4MDdiZWIwNDkyZnAtMSwKKyAgICAtMHgxLjZhMDlmNGUwYzJlOThkZWI3ODY0MmI2MDMyYTczZDQ2cC0xLAorICAgIC0weDEuNDZiOWMycDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjk1CisgICAgLTB4MS42YTA5ZWU4ZmMyOTRmMzVkYjNlZmNlNTY1MzY1YWY4OXAtMSwKKyAgICAtMHgxLjZhMDlkZTQwMjRiNTk2YjUwZWIwNmQ1NjJkYjhjNzc3cC0xLAorICAgIDB4MS40NmI5YzRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTYKKyAgICAweDEuNmEwOWVlOGZjMjk0ZjM1ZGIzZWZjZTU2NTM2NWFmODlwLTEsCisgICAgLTB4MS42YTA5ZGU0MDI0YjU5NmI1MGViMDZkNTYyZGI4Yzc3N3AtMSwKKyAgICAtMHgxLjQ2YjljNHAzLAorICB9LAorICB7IC8vIEVudHJ5IDY5NworICAgIC0weDEuZmZmZmZmZmZmZTRjOTZiMzk3ZDk1MWNiMjE4NjFjOTVwLTEsCisgICAgLTB4MS40ZGRkM2JhOWVkY2Q4OThiOTk0NmZkZDIwYWYyMmE2OHAtMjAsCisgICAgMHgxLjVmZGJiY3AzLAorICB9LAorICB7IC8vIEVudHJ5IDY5OAorICAgIDB4MS5mZmZmZmZmZmZlNGM5NmIzOTdkOTUxY2IyMTg2MWM5NXAtMSwKKyAgICAtMHgxLjRkZGQzYmE5ZWRjZDg5OGI5OTQ2ZmRkMjBhZjIyYTY4cC0yMCwKKyAgICAtMHgxLjVmZGJiY3AzLAorICB9LAorICB7IC8vIEVudHJ5IDY5OQorICAgIC0weDEuZmZmZmZmZmZmZmU4NTEyYWViYjU2YzllNzViNDE5NDFwLTEsCisgICAgLTB4MS4zNzc0ZWVhN2I4YWJlOGZhOGMzODAxNDJiOTdhZjRiNnAtMjIsCisgICAgMHgxLjVmZGJiZXAzLAorICB9LAorICB7IC8vIEVudHJ5IDcwMAorICAgIDB4MS5mZmZmZmZmZmZmZTg1MTJhZWJiNTZjOWU3NWI0MTk0MXAtMSwKKyAgICAtMHgxLjM3NzRlZWE3YjhhYmU4ZmE4YzM4MDE0MmI5N2FmNGI2cC0yMiwKKyAgICAtMHgxLjVmZGJiZXAzLAorICB9LAorICB7IC8vIEVudHJ5IDcwMQorICAgIC0weDEuZmZmZmZmZmZmZjg0MGJhMjNmOTFjOWNiNDlhMTBiMjdwLTEsCisgICAgMHgxLjY0NDU4OGFjMjM4YWU0OTNmYTMyNDM1YmE1MTMyOWJmcC0yMSwKKyAgICAweDEuNWZkYmMwcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzAyCisgICAgMHgxLmZmZmZmZmZmZmY4NDBiYTIzZjkxYzljYjQ5YTEwYjI3cC0xLAorICAgIDB4MS42NDQ1ODhhYzIzOGFlNDkzZmEzMjQzNWJhNTEzMjliZnAtMjEsCisgICAgLTB4MS41ZmRiYzBwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDMKKyAgICAtMHgxLjZhMGExMmY0MTk3YzkwYTBlZTRhMDk0YjYzNzdhYTIzcC0xLAorICAgIDB4MS42YTA5YjlkYmM4ODFjNDU4ZTc0NzkwOGNhZjJhYTVlMXAtMSwKKyAgICAweDEuNzhmZGI2cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzA0CisgICAgMHgxLjZhMGExMmY0MTk3YzkwYTBlZTRhMDk0YjYzNzdhYTIzcC0xLAorICAgIDB4MS42YTA5YjlkYmM4ODFjNDU4ZTc0NzkwOGNhZjJhYTVlMXAtMSwKKyAgICAtMHgxLjc4ZmRiNnAzLAorICB9LAorICB7IC8vIEVudHJ5IDcwNQorICAgIC0weDEuNmEwOWZjNTM3ZDI5Y2YxMzFkNjcxMDk5MWJlYmFiZWRwLTEsCisgICAgMHgxLjZhMDlkMDdjNjhmYzAxMGZmY2ZkM2IxOWYxZWU0ZjQ0cC0xLAorICAgIDB4MS43OGZkYjhwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDYKKyAgICAweDEuNmEwOWZjNTM3ZDI5Y2YxMzFkNjcxMDk5MWJlYmFiZWRwLTEsCisgICAgMHgxLjZhMDlkMDdjNjhmYzAxMGZmY2ZkM2IxOWYxZWU0ZjQ0cC0xLAorICAgIC0weDEuNzhmZGI4cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzA3CisgICAgLTB4MS42YTA5ZTViMmRmNmQwMzg4ZjkwNzBjNDM0MGYzZTY2OXAtMSwKKyAgICAweDEuNmEwOWU3MWQwODBjMzNmNjk2NGEwN2QxYTBiZjU5ODBwLTEsCisgICAgMHgxLjc4ZmRiYXAzLAorICB9LAorICB7IC8vIEVudHJ5IDcwOAorICAgIDB4MS42YTA5ZTViMmRmNmQwMzg4ZjkwNzBjNDM0MGYzZTY2OXAtMSwKKyAgICAweDEuNmEwOWU3MWQwODBjMzNmNjk2NGEwN2QxYTBiZjU5ODBwLTEsCisgICAgLTB4MS43OGZkYmFwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDkKKyAgICAweDEuNmEwOWM5MDlhZGQ0ZGJmMzIyNTNhMzlkNWMzMDYzMDhwLTEsCisgICAgMHgxLjZhMGEwM2M2Mzc0MmQ2MjgwMmQxNjNkNWNmYjNiN2Q1cC0xLAorICAgIDB4MS5hYjQxYWVwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTAKKyAgICAtMHgxLjZhMDljOTA5YWRkNGRiZjMyMjUzYTM5ZDVjMzA2MzA4cC0xLAorICAgIDB4MS42YTBhMDNjNjM3NDJkNjI4MDJkMTYzZDVjZmIzYjdkNXAtMSwKKyAgICAtMHgxLmFiNDFhZXAzLAorICB9LAorICB7IC8vIEVudHJ5IDcxMQorICAgIDB4MS42YTA5ZGZhYTRkNWMzYTdmMDU2ZjNlNjFhMzY1YjI5ZXAtMSwKKyAgICAweDEuNmEwOWVkMjU5OWZkMzY0Yzk3NjYwY2NhNjY1MmMwYTNwLTEsCisgICAgMHgxLmFiNDFiMHAzLAorICB9LAorICB7IC8vIEVudHJ5IDcxMgorICAgIC0weDEuNmEwOWRmYWE0ZDVjM2E3ZjA1NmYzZTYxYTM2NWIyOWVwLTEsCisgICAgMHgxLjZhMDllZDI1OTlmZDM2NGM5NzY2MGNjYTY2NTJjMGEzcC0xLAorICAgIC0weDEuYWI0MWIwcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzEzCisgICAgMHgxLjZhMDlmNjRhZWI3OThmMmIzZTNkOWIxNmU4ZTNjNDEycC0xLAorICAgIDB4MS42YTA5ZDY4NGZiNGQ4Yzg0MDY2MGQ2YjQyZWM4MzAzOXAtMSwKKyAgICAweDEuYWI0MWIycDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzE0CisgICAgLTB4MS42YTA5ZjY0YWViNzk4ZjJiM2UzZDliMTZlOGUzYzQxMnAtMSwKKyAgICAweDEuNmEwOWQ2ODRmYjRkOGM4NDA2NjBkNmI0MmVjODMwMzlwLTEsCisgICAgLTB4MS5hYjQxYjJwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTUKKyAgICAweDEuZmZmZmZmZmZmYzI2MGQ2ZmZiOGY0Y2Q4YWIzZmQwMjBwLTEsCisgICAgMHgxLmY2NjU5NWRhN2ExYWUzMDhkMjZhMThkZTRjMmVkM2EzcC0yMCwKKyAgICAweDEuYzQ2M2E4cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzE2CisgICAgLTB4MS5mZmZmZmZmZmZjMjYwZDZmZmI4ZjRjZDhhYjNmZDAyMHAtMSwKKyAgICAweDEuZjY2NTk1ZGE3YTFhZTMwOGQyNmExOGRlNGMyZWQzYTNwLTIwLAorICAgIC0weDEuYzQ2M2E4cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzE3CisgICAgMHgxLmZmZmZmZmZmZmYxMmQ4OWJiMDg0ZGQ3NjI4NDhiM2Q2cC0xLAorICAgIDB4MS5lY2NiMmJiNGY2NmVhODYxMjQxZmEwOWNhOWQ4YTAzNHAtMjEsCisgICAgMHgxLmM0NjNhYXAzLAorICB9LAorICB7IC8vIEVudHJ5IDcxOAorICAgIC0weDEuZmZmZmZmZmZmZjEyZDg5YmIwODRkZDc2Mjg0OGIzZDZwLTEsCisgICAgMHgxLmVjY2IyYmI0ZjY2ZWE4NjEyNDFmYTA5Y2E5ZDhhMDM0cC0yMSwKKyAgICAtMHgxLmM0NjNhYXAzLAorICB9LAorICB7IC8vIEVudHJ5IDcxOQorICAgIDB4MS5mZmZmZmZmZmZmZmZhM2M3NjU3Yjg1ZTViNDRiYmQ0NHAtMSwKKyAgICAtMHgxLjMzNGQ0NGIwOTQ1NDA3YjExOGIzNjFhYjc4MTcxZjY3cC0yNSwKKyAgICAweDEuYzQ2M2FjcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzIwCisgICAgLTB4MS5mZmZmZmZmZmZmZmZhM2M3NjU3Yjg1ZTViNDRiYmQ0NHAtMSwKKyAgICAtMHgxLjMzNGQ0NGIwOTQ1NDA3YjExOGIzNjFhYjc4MTcxZjY3cC0yNSwKKyAgICAtMHgxLmM0NjNhY3AzLAorICB9LAorICB7IC8vIEVudHJ5IDcyMQorICAgIDB4MS42YTBhMGIzOGYxMzRhMzI5NWEwYjM4NmU0MmYxY2E3YXAtMSwKKyAgICAtMHgxLjZhMDljMTk2ZjI4NjdjYzkxNmFlMmI3ZTZjOWQ5OWMxcC0xLAorICAgIDB4MS5kZDg1YTRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjIKKyAgICAtMHgxLjZhMGEwYjM4ZjEzNGEzMjk1YTBiMzg2ZTQyZjFjYTdhcC0xLAorICAgIC0weDEuNmEwOWMxOTZmMjg2N2NjOTE2YWUyYjdlNmM5ZDk5YzFwLTEsCisgICAgLTB4MS5kZDg1YTRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjMKKyAgICAweDEuNmEwOWY0OTg1NDY2MmVmZjFiMzU3NTVhMTI5MDQ0YTdwLTEsCisgICAgLTB4MS42YTA5ZDgzNzkyODUwNmY3Y2ZmNzZmMDk0YjRlMDM3N3AtMSwKKyAgICAweDEuZGQ4NWE2cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzI0CisgICAgLTB4MS42YTA5ZjQ5ODU0NjYyZWZmMWIzNTc1NWExMjkwNDRhN3AtMSwKKyAgICAtMHgxLjZhMDlkODM3OTI4NTA2ZjdjZmY3NmYwOTRiNGUwMzc3cC0xLAorICAgIC0weDEuZGQ4NWE2cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzI1CisgICAgMHgxLjZhMDlkZGY3YjYyZGIwZTA0NDBiNmE0MjYyMjAzYjExcC0xLAorICAgIC0weDEuNmEwOWVlZDgzMTE5ODc0ZTUxYWU0YmI4YWVkZGMxZjJwLTEsCisgICAgMHgxLmRkODVhOHAzLAorICB9LAorICB7IC8vIEVudHJ5IDcyNgorICAgIC0weDEuNmEwOWRkZjdiNjJkYjBlMDQ0MGI2YTQyNjIyMDNiMTFwLTEsCisgICAgLTB4MS42YTA5ZWVkODMxMTk4NzRlNTFhZTRiYjhhZWRkYzFmMnAtMSwKKyAgICAtMHgxLmRkODVhOHAzLAorICB9LAorICB7IC8vIEVudHJ5IDcyNworICAgIDB4MS40YWE5YzJmMmMxOWEwNjJiMThhMDE3YmNkNTQyNGZlYXAtMjAsCisgICAgLTB4MS5mZmZmZmZmZmZlNTRlNWU0ZDMyYjM0NTMxNjYwNjBiM3AtMSwKKyAgICAweDEuZjZhN2EwcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzI4CisgICAgLTB4MS40YWE5YzJmMmMxOWEwNjJiMThhMDE3YmNkNTQyNGZlYXAtMjAsCisgICAgLTB4MS5mZmZmZmZmZmZlNTRlNWU0ZDMyYjM0NTMxNjYwNjBiM3AtMSwKKyAgICAtMHgxLmY2YTdhMHAzLAorICB9LAorICB7IC8vIEVudHJ5IDcyOQorICAgIDB4MS4yYWE3MGJjYjA3ZDNhNDA3ODE1MTBkMjEzNjUyZTQzYXAtMjIsCisgICAgLTB4MS5mZmZmZmZmZmZmZWEzOTZhYjhhZWU1MDkzOTJjNzU1ZHAtMSwKKyAgICAweDEuZjZhN2EycDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzMwCisgICAgLTB4MS4yYWE3MGJjYjA3ZDNhNDA3ODE1MTBkMjEzNjUyZTQzYXAtMjIsCisgICAgLTB4MS5mZmZmZmZmZmZmZWEzOTZhYjhhZWU1MDkzOTJjNzU1ZHAtMSwKKyAgICAtMHgxLmY2YTdhMnAzLAorICB9LAorICB7IC8vIEVudHJ5IDczMQorICAgIC0weDEuNmFhYzdhMWE3YmY1YmJkNDk1NzJmZmI4ZDc3NDk5MjJwLTIxLAorICAgIC0weDEuZmZmZmZmZmZmZjdmOGNmMDllMzJkNjMwOWJlYTg1Y2FwLTEsCisgICAgMHgxLmY2YTdhNHAzLAorICB9LAorICB7IC8vIEVudHJ5IDczMgorICAgIDB4MS42YWFjN2ExYTdiZjViYmQ0OTU3MmZmYjhkNzc0OTkyMnAtMjEsCisgICAgLTB4MS5mZmZmZmZmZmZmN2Y4Y2YwOWUzMmQ2MzA5YmVhODVjYXAtMSwKKyAgICAtMHgxLmY2YTdhNHAzLAorICB9LAorICB7IC8vIEVudHJ5IDczMworICAgIC0weDEuNmEwOWEzODM5NTMxMjQwOTY4OTgzNDBmOTE2OGI5ZDVwLTEsCisgICAgLTB4MS42YTBhMjk0YzQ1ZWM3NDdhNDc3MTFhNDk5NGQyYzVlNHAtMSwKKyAgICAweDEuMDdlNGNjcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzM0CisgICAgMHgxLjZhMDlhMzgzOTUzMTI0MDk2ODk4MzQwZjkxNjhiOWQ1cC0xLAorICAgIC0weDEuNmEwYTI5NGM0NWVjNzQ3YTQ3NzExYTQ5OTRkMmM1ZTRwLTEsCisgICAgLTB4MS4wN2U0Y2NwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzUKKyAgICAtMHgxLjZhMDlkMGM0ZDc4Njk5NjFjNDdhOWIwYjk2OGNjOTEwcC0xLAorICAgIC0weDEuNmEwOWZjMGIwZWE3ZWQ5ZmI1ZGQ1MGEwYzhhZjE5Y2JwLTEsCisgICAgMHgxLjA3ZTRjZXA0LAorICB9LAorICB7IC8vIEVudHJ5IDczNgorICAgIDB4MS42YTA5ZDBjNGQ3ODY5OTYxYzQ3YTliMGI5NjhjYzkxMHAtMSwKKyAgICAtMHgxLjZhMDlmYzBiMGVhN2VkOWZiNWRkNTBhMGM4YWYxOWNicC0xLAorICAgIC0weDEuMDdlNGNlcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzM3CisgICAgLTB4MS42YTA5ZmUwNjE0MzNlNzc3MGQwMGNhNTlkNWE1NjI1MXAtMSwKKyAgICAtMHgxLjZhMDljZWM5ZDFiYjNlZDRmODEwYzlmOTc4NmQ2MTBlcC0xLAorICAgIDB4MS4wN2U0ZDBwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzgKKyAgICAweDEuNmEwOWZlMDYxNDMzZTc3NzBkMDBjYTU5ZDVhNTYyNTFwLTEsCisgICAgLTB4MS42YTA5Y2VjOWQxYmIzZWQ0ZjgxMGM5Zjk3ODZkNjEwZXAtMSwKKyAgICAtMHgxLjA3ZTRkMHA0LAorICB9LAorICB7IC8vIEVudHJ5IDczOQorICAgIC0weDEuZmZmZmZmZmZmOTIxOWRhZTVmZWRhMWI1MzkzMzU4MDNwLTEsCisgICAgLTB4MS40Zjc2ZjgwNTgyYzczZmMwY2MwOTAzZWQ4Y2E3ZDZiM3AtMTksCisgICAgMHgxLjE0NzVjYXA0LAorICB9LAorICB7IC8vIEVudHJ5IDc0MAorICAgIDB4MS5mZmZmZmZmZmY5MjE5ZGFlNWZlZGExYjUzOTMzNTgwM3AtMSwKKyAgICAtMHgxLjRmNzZmODA1ODJjNzNmYzBjYzA5MDNlZDhjYTdkNmIzcC0xOSwKKyAgICAtMHgxLjE0NzVjYXA0LAorICB9LAorICB7IC8vIEVudHJ5IDc0MQorICAgIC0weDEuZmZmZmZmZmZmZjlkNTU2ZThjMGJmMGE4MGQ2MTA4MDhwLTEsCisgICAgLTB4MS4zZGRiZTAxNjExMDhiNjkwZWVkNzBhN2Y1OWRlNzUxY3AtMjEsCisgICAgMHgxLjE0NzVjY3A0LAorICB9LAorICB7IC8vIEVudHJ5IDc0MgorICAgIDB4MS5mZmZmZmZmZmZmOWQ1NTZlOGMwYmYwYTgwZDYxMDgwOHAtMSwKKyAgICAtMHgxLjNkZGJlMDE2MTEwOGI2OTBlZWQ3MGE3ZjU5ZGU3NTFjcC0yMSwKKyAgICAtMHgxLjE0NzVjY3A0LAorICB9LAorICB7IC8vIEVudHJ5IDc0MworICAgIC0weDEuZmZmZmZmZmZmZTE5MGQyZWI4MmU3NGVmZDIwOTMyMTVwLTEsCisgICAgMHgxLjYxMTIwZmY0ZjcwMTgwYjBkNTVjM2FlMGY2OTU4NWNhcC0yMCwKKyAgICAweDEuMTQ3NWNlcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzQ0CisgICAgMHgxLmZmZmZmZmZmZmUxOTBkMmViODJlNzRlZmQyMDkzMjE1cC0xLAorICAgIDB4MS42MTEyMGZmNGY3MDE4MGIwZDU1YzNhZTBmNjk1ODVjYXAtMjAsCisgICAgLTB4MS4xNDc1Y2VwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDUKKyAgICAtMHgxLjZhMGExYTFlNjRhMjhlZWUyMzhkYzg1Mjg0NmFhY2Q1cC0xLAorICAgIDB4MS42YTA5YjJiMTdiNzQxMDUwYTZjZmQ2NGI4MWM3NjQ4NXAtMSwKKyAgICAweDEuMjEwNmM4cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzQ2CisgICAgMHgxLjZhMGExYTFlNjRhMjhlZWUyMzhkYzg1Mjg0NmFhY2Q1cC0xLAorICAgIDB4MS42YTA5YjJiMTdiNzQxMDUwYTZjZmQ2NGI4MWM3NjQ4NXAtMSwKKyAgICAtMHgxLjIxMDZjOHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc0NworICAgIC0weDEuNmEwOWVjZGQyYjc4NGI2OTkwMzRlZTgxMDI2NzBlMjdwLTEsCisgICAgMHgxLjZhMDlkZmYyYmJlM2M5NjE2YTM1NzZjNTVlNzczMjA3cC0xLAorICAgIDB4MS4yMTA2Y2FwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDgKKyAgICAweDEuNmEwOWVjZGQyYjc4NGI2OTkwMzRlZTgxMDI2NzBlMjdwLTEsCisgICAgMHgxLjZhMDlkZmYyYmJlM2M5NjE2YTM1NzZjNTVlNzczMjA3cC0xLAorICAgIC0weDEuMjEwNmNhcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzQ5CisgICAgLTB4MS42YTA5YmY5YmVjYTVlMDMxODgzMDE2MzljMDllZDU3NHAtMSwKKyAgICAweDEuNmEwYTBkMzNmNmFiNWFmMjYyYWQ2YWQxOGFjMWNlOWZwLTEsCisgICAgMHgxLjIxMDZjY3A0LAorICB9LAorICB7IC8vIEVudHJ5IDc1MAorICAgIDB4MS42YTA5YmY5YmVjYTVlMDMxODgzMDE2MzljMDllZDU3NHAtMSwKKyAgICAweDEuNmEwYTBkMzNmNmFiNWFmMjYyYWQ2YWQxOGFjMWNlOWZwLTEsCisgICAgLTB4MS4yMTA2Y2NwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTEKKyAgICAtMHgxLmY5OTkwZTkxYTI3MGQzYmMxYzAyZjRmNjlmNDhlNjc1cC0xOSwKKyAgICAweDEuZmZmZmZmZmZmMDY1Y2IyNDBiY2JmZGZmNDk3N2RkZjhwLTEsCisgICAgMHgxLjJkOTdjNHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc1MgorICAgIDB4MS5mOTk5MGU5MWEyNzBkM2JjMWMwMmY0ZjY5ZjQ4ZTY3NXAtMTksCisgICAgMHgxLmZmZmZmZmZmZjA2NWNiMjQwYmNiZmRmZjQ5NzdkZGY4cC0xLAorICAgIC0weDEuMmQ5N2M0cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzUzCisgICAgLTB4MS5mMzMyMWQyMzRkZWFjZDZmM2FmZDc1MDM5Njg1MDEyZnAtMjAsCisgICAgMHgxLmZmZmZmZmZmZmMzMjkzOTg5OGY1ODVkNjk0OGNmMmQxcC0xLAorICAgIDB4MS4yZDk3YzZwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTQKKyAgICAweDEuZjMzMjFkMjM0ZGVhY2Q2ZjNhZmQ3NTAzOTY4NTAxMmZwLTIwLAorICAgIDB4MS5mZmZmZmZmZmZjMzI5Mzk4OThmNTg1ZDY5NDhjZjJkMXAtMSwKKyAgICAtMHgxLjJkOTdjNnA0LAorICB9LAorICB7IC8vIEVudHJ5IDc1NQorICAgIDB4MS45OWJjNWI5NjFiMWFhMWM5ZTgwMjMwNzRmMzQwNmZkOXAtMjUsCisgICAgMHgxLmZmZmZmZmZmZmZmZjVjMGQyNjMwZWUwYTI3ZThkNmQxcC0xLAorICAgIDB4MS4yZDk3YzhwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTYKKyAgICAtMHgxLjk5YmM1Yjk2MWIxYWExYzllODAyMzA3NGYzNDA2ZmQ5cC0yNSwKKyAgICAweDEuZmZmZmZmZmZmZmZmNWMwZDI2MzBlZTBhMjdlOGQ2ZDFwLTEsCisgICAgLTB4MS4yZDk3YzhwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTcKKyAgICAweDEuNmEwOTk0OWUxY2UxZWM1MDFhZmNiMzVkNzMxYmY2MmNwLTEsCisgICAgMHgxLjZhMGEzODMxYjgxZDk0OTY2YWQ4ZGY0ZDM3ODgyNGY5cC0xLAorICAgIDB4MS4zYTI4YzJwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTgKKyAgICAtMHgxLjZhMDk5NDllMWNlMWVjNTAxYWZjYjM1ZDczMWJmNjJjcC0xLAorICAgIDB4MS42YTBhMzgzMWI4MWQ5NDk2NmFkOGRmNGQzNzg4MjRmOXAtMSwKKyAgICAtMHgxLjNhMjhjMnA0LAorICB9LAorICB7IC8vIEVudHJ5IDc1OQorICAgIDB4MS42YTA5YzFkZjYxMTQxMDBjNjVkMWZmNmM1NTc1NWU3MnAtMSwKKyAgICAweDEuNmEwYTBhZjA4MmI1YmNhN2Y1NTY5ZjRkYTY4ODNmNjRwLTEsCisgICAgMHgxLjNhMjhjNHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc2MAorICAgIC0weDEuNmEwOWMxZGY2MTE0MTAwYzY1ZDFmZjZjNTU3NTVlNzJwLTEsCisgICAgMHgxLjZhMGEwYWYwODJiNWJjYTdmNTU2OWY0ZGE2ODgzZjY0cC0xLAorICAgIC0weDEuM2EyOGM0cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzYxCisgICAgMHgxLjZhMDllZjIwOWY5ZTBjYzEzMzI0ZGRmMmIzNjE1NTNmcC0xLAorICAgIDB4MS42YTA5ZGRhZjQ3YTViYzhkYmRjYjZiMTM4NDQ5MDJhZXAtMSwKKyAgICAweDEuM2EyOGM2cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzYyCisgICAgLTB4MS42YTA5ZWYyMDlmOWUwY2MxMzMyNGRkZjJiMzYxNTUzZnAtMSwKKyAgICAweDEuNmEwOWRkYWY0N2E1YmM4ZGJkY2I2YjEzODQ0OTAyYWVwLTEsCisgICAgLTB4MS4zYTI4YzZwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjMKKyAgICAweDEuZmZmZmZmZmZmNTNmNDc2ZWM0ZjU5ZjI2YzRiY2RmYTBwLTEsCisgICAgMHgxLmEzYmIyNTFkYzdlZmFhMWUyMTM3YmIzN2VkNjY1NGRicC0xOSwKKyAgICAweDEuNDZiOWMwcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzY0CisgICAgLTB4MS5mZmZmZmZmZmY1M2Y0NzZlYzRmNTlmMjZjNGJjZGZhMHAtMSwKKyAgICAweDEuYTNiYjI1MWRjN2VmYWExZTIxMzdiYjM3ZWQ2NjU0ZGJwLTE5LAorICAgIC0weDEuNDZiOWMwcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzY1CisgICAgMHgxLmZmZmZmZmZmZmU1ZDIwOTdiMzQzMzRhZDY3OWRkN2E0cC0xLAorICAgIDB4MS40Nzc2NGEzYjk1NjY3NThlNWJhYTJlMzAyOWYxYWJiYXAtMjAsCisgICAgMHgxLjQ2YjljMnA0LAorICB9LAorICB7IC8vIEVudHJ5IDc2NgorICAgIC0weDEuZmZmZmZmZmZmZTVkMjA5N2IzNDMzNGFkNjc5ZGQ3YTRwLTEsCisgICAgMHgxLjQ3NzY0YTNiOTU2Njc1OGU1YmFhMmUzMDI5ZjFhYmJhcC0yMCwKKyAgICAtMHgxLjQ2YjljMnA0LAorICB9LAorICB7IC8vIEVudHJ5IDc2NworICAgIDB4MS5mZmZmZmZmZmZmN2FmOWMwYTE5YTAwNWM1NjVjNmFmN3AtMSwKKyAgICAtMHgxLjcxMTM2Yjg4ZDQ2MDg0OTBmMmRkZmU5MDEwMTExMmFlcC0yMSwKKyAgICAweDEuNDZiOWM0cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzY4CisgICAgLTB4MS5mZmZmZmZmZmZmN2FmOWMwYTE5YTAwNWM1NjVjNmFmN3AtMSwKKyAgICAtMHgxLjcxMTM2Yjg4ZDQ2MDg0OTBmMmRkZmU5MDEwMTExMmFlcC0yMSwKKyAgICAtMHgxLjQ2YjljNHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc2OQorICAgIDB4MS42YTBhMjkwM2Q3NzM5MjViMDUyZmIwMDZhYzY3MGMyM3AtMSwKKyAgICAtMHgxLjZhMDlhM2NjMDNjNGJiYWQyMjIyZGZlNWJlMzE3NTY1cC0xLAorICAgIDB4MS41MzRhYmVwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzAKKyAgICAtMHgxLjZhMGEyOTAzZDc3MzkyNWIwNTJmYjAwNmFjNjcwYzIzcC0xLAorICAgIC0weDEuNmEwOWEzY2MwM2M0YmJhZDIyMjJkZmU1YmUzMTc1NjVwLTEsCisgICAgLTB4MS41MzRhYmVwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzEKKyAgICAweDEuNmEwOWZiYzJhMDI1ZmRhZTkxODQ2NmZhMDAxNDIxNDNwLTEsCisgICAgLTB4MS42YTA5ZDEwZDQ2MTEyMzM1ZDBlNDNkNzM4Mzg3ZGU4Y3AtMSwKKyAgICAweDEuNTM0YWMwcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzcyCisgICAgLTB4MS42YTA5ZmJjMmEwMjVmZGFlOTE4NDY2ZmEwMDE0MjE0M3AtMSwKKyAgICAtMHgxLjZhMDlkMTBkNDYxMTIzMzVkMGU0M2Q3MzgzODdkZThjcC0xLAorICAgIC0weDEuNTM0YWMwcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzczCisgICAgMHgxLjZhMDljZTgxNjMzMDQxMTMxMzVhNjhhZTkzZDNmYTBlcC0xLAorICAgIC0weDEuNmEwOWZlNGU4MmI1NjM3YTRhOGYzOTJjMzMwMWJlOTRwLTEsCisgICAgMHgxLjUzNGFjMnA0LAorICB9LAorICB7IC8vIEVudHJ5IDc3NAorICAgIC0weDEuNmEwOWNlODE2MzMwNDExMzEzNWE2OGFlOTNkM2ZhMGVwLTEsCisgICAgLTB4MS42YTA5ZmU0ZTgyYjU2MzdhNGE4ZjM5MmMzMzAxYmU5NHAtMSwKKyAgICAtMHgxLjUzNGFjMnA0LAorICB9LAorICB7IC8vIEVudHJ5IDc3NQorICAgIDB4MS40ZGRkM2JhOWVjYjE5ZDZiYjZlYTE2MTEyMGU0NDdiOXAtMTksCisgICAgLTB4MS5mZmZmZmZmZmY5MzI1YWNlNWY2ODJiYmI4YjEyMmEwOXAtMSwKKyAgICAweDEuNWZkYmJjcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzc2CisgICAgLTB4MS40ZGRkM2JhOWVjYjE5ZDZiYjZlYTE2MTEyMGU0NDdiOXAtMTksCisgICAgLTB4MS5mZmZmZmZmZmY5MzI1YWNlNWY2ODJiYmI4YjEyMmEwOXAtMSwKKyAgICAtMHgxLjVmZGJiY3A0LAorICB9LAorICB7IC8vIEVudHJ5IDc3NworICAgIDB4MS4zNzc0ZWVhN2I4OWQ4MGRmNzgxNmZlMjA4ZWM2OWZjMHAtMjEsCisgICAgLTB4MS5mZmZmZmZmZmZmYTE0NGFiYWVkNWI0YWFiODgwNjM1ZHAtMSwKKyAgICAweDEuNWZkYmJlcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzc4CisgICAgLTB4MS4zNzc0ZWVhN2I4OWQ4MGRmNzgxNmZlMjA4ZWM2OWZjMHAtMjEsCisgICAgLTB4MS5mZmZmZmZmZmZmYTE0NGFiYWVkNWI0YWFiODgwNjM1ZHAtMSwKKyAgICAtMHgxLjVmZGJiZXA0LAorICB9LAorICB7IC8vIEVudHJ5IDc3OQorICAgIC0weDEuNjQ0NTg4YWMyMzM0YTNkNTQ1MmQ5OTYwMjgyY2Y4MGRwLTIwLAorICAgIC0weDEuZmZmZmZmZmZmZTEwMmU4OGZlNDc2MzMxZTFkZGVmYWZwLTEsCisgICAgMHgxLjVmZGJjMHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc4MAorICAgIDB4MS42NDQ1ODhhYzIzMzRhM2Q1NDUyZDk5NjAyODJjZjgwZHAtMjAsCisgICAgLTB4MS5mZmZmZmZmZmZlMTAyZTg4ZmU0NzYzMzFlMWRkZWZhZnAtMSwKKyAgICAtMHgxLjVmZGJjMHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc4MQorICAgIC0weDEuNmEwOWIyZjllYTA0OWU4NTVlMzVjYTljZTdlMGQ4OWFwLTEsCisgICAgLTB4MS42YTBhMTlkNWY2MjZhMzVlZTExMmEzNDYzOGUwNzgwOHAtMSwKKyAgICAweDEuNmM2Y2JhcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzgyCisgICAgMHgxLjZhMDliMmY5ZWEwNDllODU1ZTM1Y2E5Y2U3ZTBkODlhcC0xLAorICAgIC0weDEuNmEwYTE5ZDVmNjI2YTM1ZWUxMTJhMzQ2MzhlMDc4MDhwLTEsCisgICAgLTB4MS42YzZjYmFwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODMKKyAgICAtMHgxLjZhMDllMDNiMmE2YjQ5YzYxMzRjNjdiNDJiYWVlNjY4cC0xLAorICAgIC0weDEuNmEwOWVjOTRiY2YzNTIwOGNjZDAzMDY4NGQ1ZGRkOWNwLTEsCisgICAgMHgxLjZjNmNiY3A0LAorICB9LAorICB7IC8vIEVudHJ5IDc4NAorICAgIDB4MS42YTA5ZTAzYjJhNmI0OWM2MTM0YzY3YjQyYmFlZTY2OHAtMSwKKyAgICAtMHgxLjZhMDllYzk0YmNmMzUyMDhjY2QwMzA2ODRkNWRkZDljcC0xLAorICAgIC0weDEuNmM2Y2JjcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzg1CisgICAgLTB4MS42YTBhMGQ3YzY1MjljZDg1ZGJiYjNhNWMyY2QzZmFlNXAtMSwKKyAgICAtMHgxLjZhMDliZjUzN2UxN2Q5MDA2NTliZDJmYTI0YzNhOGM4cC0xLAorICAgIDB4MS42YzZjYmVwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODYKKyAgICAweDEuNmEwYTBkN2M2NTI5Y2Q4NWRiYmIzYTVjMmNkM2ZhZTVwLTEsCisgICAgLTB4MS42YTA5YmY1MzdlMTdkOTAwNjU5YmQyZmEyNGMzYThjOHAtMSwKKyAgICAtMHgxLjZjNmNiZXA0LAorICB9LAorICB7IC8vIEVudHJ5IDc4NworICAgIC0weDEuZmZmZmZmZmZmMDdmMGFiMTJhYThmNDFmMjljMTUzOTJwLTEsCisgICAgLTB4MS5mN2ZmNTIzNjBjNjIyYjNmOTRkOWM3MjUwYmZhZDhkNHAtMTksCisgICAgMHgxLjc4ZmRiNnA0LAorICB9LAorICB7IC8vIEVudHJ5IDc4OAorICAgIDB4MS5mZmZmZmZmZmYwN2YwYWIxMmFhOGY0MWYyOWMxNTM5MnAtMSwKKyAgICAtMHgxLmY3ZmY1MjM2MGM2MjJiM2Y5NGQ5YzcyNTBiZmFkOGQ0cC0xOSwKKyAgICAtMHgxLjc4ZmRiNnA0LAorICB9LAorICB7IC8vIEVudHJ5IDc4OQorICAgIC0weDEuZmZmZmZmZmZmYzNmMDU0MmRiMjFkY2JjYjg0N2RhYzNwLTEsCisgICAgLTB4MS5lZmZlYTQ2YzIxYmFhM2RhN2MyNjZjOTUzYTAxMzU5OHAtMjAsCisgICAgMHgxLjc4ZmRiOHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc5MAorICAgIDB4MS5mZmZmZmZmZmZjM2YwNTQyZGIyMWRjYmNiODQ3ZGFjM3AtMSwKKyAgICAtMHgxLmVmZmVhNDZjMjFiYWEzZGE3YzI2NmM5NTNhMDEzNTk4cC0yMCwKKyAgICAtMHgxLjc4ZmRiOHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc5MQorICAgIC0weDEuZmZmZmZmZmZmZmZlZmZkNDhiYWM3M2VmZTYwYzdmY2ZwLTEsCisgICAgMHgxLjAwMTViOTNkZDBmMDk1YmUxZWIwYTViODdmZTVlMzNlcC0yNCwKKyAgICAweDEuNzhmZGJhcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzkyCisgICAgMHgxLmZmZmZmZmZmZmZmZWZmZDQ4YmFjNzNlZmU2MGM3ZmNmcC0xLAorICAgIDB4MS4wMDE1YjkzZGQwZjA5NWJlMWViMGE1Yjg3ZmU1ZTMzZXAtMjQsCisgICAgLTB4MS43OGZkYmFwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTMKKyAgICAtMHgxLjZhMGEzN2U5NDlhN2FkNjk4YTMyMjM0YzczZTVhZmJhcC0xLAorICAgIDB4MS42YTA5OTRlNjhiNzg3ZWU0ZmQ2ODMwYjI4ODIyNTc0NXAtMSwKKyAgICAweDEuODU4ZWI0cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzk0CisgICAgMHgxLjZhMGEzN2U5NDlhN2FkNjk4YTMyMjM0YzczZTVhZmJhcC0xLAorICAgIDB4MS42YTA5OTRlNjhiNzg3ZWU0ZmQ2ODMwYjI4ODIyNTc0NXAtMSwKKyAgICAtMHgxLjg1OGViNHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc5NQorICAgIC0weDEuNmEwYTBhYTgxNDM2YzdhOGQzM2EzOGQ3MDQwMzBkMTRwLTEsCisgICAgMHgxLjZhMDljMjI3Y2ZhMTk0ZDFmYTdhYjk5MDlkZTUwODNjcC0xLAorICAgIDB4MS44NThlYjZwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTYKKyAgICAweDEuNmEwYTBhYTgxNDM2YzdhOGQzM2EzOGQ3MDQwMzBkMTRwLTEsCisgICAgMHgxLjZhMDljMjI3Y2ZhMTk0ZDFmYTdhYjk5MDlkZTUwODNjcC0xLAorICAgIC0weDEuODU4ZWI2cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzk3CisgICAgLTB4MS42YTA5ZGQ2NmQ5MWRiOWJkN2JmMzU1ZmFmZjA4ZjE5NHAtMSwKKyAgICAweDEuNmEwOWVmNjkwZTIyODNiNjU4NTA5ZWQzMTk0ODM4MzlwLTEsCisgICAgMHgxLjg1OGViOHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc5OAorICAgIDB4MS42YTA5ZGQ2NmQ5MWRiOWJkN2JmMzU1ZmFmZjA4ZjE5NHAtMSwKKyAgICAweDEuNmEwOWVmNjkwZTIyODNiNjU4NTA5ZWQzMTk0ODM4MzlwLTEsCisgICAgLTB4MS44NThlYjhwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTkKKyAgICAweDEuYzA0OGIzOGE4YmJmNTlmNDE0ZmVjNzA3OTIwOTkyNmVwLTMsCisgICAgLTB4MS5mMzk1N2JhZDcwZTA3NDFmMWQzZDY3NTEyNDZjZTIxYXAtMSwKKyAgICAweDEuZmZmZmZlcDYyLAorICB9LAorICB7IC8vIEVudHJ5IDgwMAorICAgIC0weDEuYzA0OGIzOGE4YmJmNTlmNDE0ZmVjNzA3OTIwOTkyNmVwLTMsCisgICAgLTB4MS5mMzk1N2JhZDcwZTA3NDFmMWQzZDY3NTEyNDZjZTIxYXAtMSwKKyAgICAtMHgxLmZmZmZmZXA2MiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDEKKyAgICAweDEuZmZmNmRmZDQyZGM1NDQzMGJjMDU3NmIwMGE4OGJkOTRwLTEsCisgICAgMHgxLjgyYWEzNzViM2MzM2U3MDY2MzczMWJhYjRiZWI2ZWQzcC03LAorICAgIDB4MS5wNjMsCisgIH0sCisgIHsgLy8gRW50cnkgODAyCisgICAgLTB4MS5mZmY2ZGZkNDJkYzU0NDMwYmMwNTc2YjAwYTg4YmQ5NHAtMSwKKyAgICAweDEuODJhYTM3NWIzYzMzZTcwNjYzNzMxYmFiNGJlYjZlZDNwLTcsCisgICAgLTB4MS5wNjMsCisgIH0sCisgIHsgLy8gRW50cnkgODAzCisgICAgLTB4MS5kNjYzN2QwNzAzNDdlZTk0ZTgzMDQ0NWU3NjQ4NjcyN3AtMSwKKyAgICAweDEuOTQ1ZTZjNjlhNTgwZmI3YmIyN2QwMmMwZmUwZjhhNzFwLTIsCisgICAgMHgxLjAwMDAwMnA2MywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDQKKyAgICAweDEuZDY2MzdkMDcwMzQ3ZWU5NGU4MzA0NDVlNzY0ODY3MjdwLTEsCisgICAgMHgxLjk0NWU2YzY5YTU4MGZiN2JiMjdkMDJjMGZlMGY4YTcxcC0yLAorICAgIC0weDEuMDAwMDAycDYzLAorICB9LAorICB7IC8vIEVudHJ5IDgwNQorICAgIC0weDEuMGU1MjgzNjYxZGYwY2EwZjU1YWI2MTY3ZTE0NTE0YTFwLTEsCisgICAgLTB4MS5iMmQyNTVmMmJkMDQyM2UyOWUyYTU0ODcyOGYwMzRhYnAtMSwKKyAgICAweDEuZmZmZmZlcDI2LAorICB9LAorICB7IC8vIEVudHJ5IDgwNgorICAgIDB4MS4wZTUyODM2NjFkZjBjYTBmNTVhYjYxNjdlMTQ1MTRhMXAtMSwKKyAgICAtMHgxLmIyZDI1NWYyYmQwNDIzZTI5ZTJhNTQ4NzI4ZjAzNGFicC0xLAorICAgIC0weDEuZmZmZmZlcDI2LAorICB9LAorICB7IC8vIEVudHJ5IDgwNworICAgIC0weDEuODZkY2M5YmFiYjBhNDBlZTg3NWNhYjNiOWU4OTI3NTdwLTEsCisgICAgMHgxLjRhYjY1MTFhN2QzOWFkM2NjODhkZWQxZTc3NWNhMTQ3cC0xLAorICAgIDB4MS5wMjcsCisgIH0sCisgIHsgLy8gRW50cnkgODA4CisgICAgMHgxLjg2ZGNjOWJhYmIwYTQwZWU4NzVjYWIzYjllODkyNzU3cC0xLAorICAgIDB4MS40YWI2NTExYTdkMzlhZDNjYzg4ZGVkMWU3NzVjYTE0N3AtMSwKKyAgICAtMHgxLnAyNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDkKKyAgICAweDEuMTcxOTk5YjYyOWZkNWI2MzU3YzZkZmY0ZDc4MjdkOTVwLTEsCisgICAgLTB4MS5hZDNkODBjODJmNDQ1MmIwNzY1ODFkZTI0NjQ4NDM1YnAtMSwKKyAgICAweDEuMDAwMDAycDI3LAorICB9LAorICB7IC8vIEVudHJ5IDgxMAorICAgIC0weDEuMTcxOTk5YjYyOWZkNWI2MzU3YzZkZmY0ZDc4MjdkOTVwLTEsCisgICAgLTB4MS5hZDNkODBjODJmNDQ1MmIwNzY1ODFkZTI0NjQ4NDM1YnAtMSwKKyAgICAtMHgxLjAwMDAwMnAyNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTEKKyAgICAtMHgxLmU1N2VjMDkyMjE5NzM1NTBkMWU1Nzk4ZGNmMGNkMjVkcC0xLAorICAgIC0weDEuNDUzMmMzNzIxZWQ0MzQzYWQ4OGVlYTg5MDhhOTg4Y2JwLTIsCisgICAgMHgxLmZmZmZmZXAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTIKKyAgICAweDEuZTU3ZWMwOTIyMTk3MzU1MGQxZTU3OThkY2YwY2QyNWRwLTEsCisgICAgLTB4MS40NTMyYzM3MjFlZDQzNDNhZDg4ZWVhODkwOGE5ODhjYnAtMiwKKyAgICAtMHgxLmZmZmZmZXAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTMKKyAgICAtMHgxLjhmMjJmODQzM2Q2ZWRmZTlhNGFmZjk2MjI1MTdjYWE5cC0xLAorICAgIDB4MS40MGFkNjdmM2YwYzlhMTQzOTYzYzljOTZkYmNlM2Y4YXAtMSwKKyAgICAweDEucDI0LAorICB9LAorICB7IC8vIEVudHJ5IDgxNAorICAgIDB4MS44ZjIyZjg0MzNkNmVkZmU5YTRhZmY5NjIyNTE3Y2FhOXAtMSwKKyAgICAweDEuNDBhZDY3ZjNmMGM5YTE0Mzk2M2M5Yzk2ZGJjZTNmOGFwLTEsCisgICAgLTB4MS5wMjQsCisgIH0sCisgIHsgLy8gRW50cnkgODE1CisgICAgMHgxLmM5YjBjNzI2NWM1NDNmODBmYWYwMTc0MWM2NDU4NTYwcC0xLAorICAgIDB4MS5jYWY4NTM3YzNlNDQyY2E4YWNhODZjMTU2NzczODUzYXAtMiwKKyAgICAweDEuMDAwMDAycDI0LAorICB9LAorICB7IC8vIEVudHJ5IDgxNgorICAgIC0weDEuYzliMGM3MjY1YzU0M2Y4MGZhZjAxNzQxYzY0NTg1NjBwLTEsCisgICAgMHgxLmNhZjg1MzdjM2U0NDJjYThhY2E4NmMxNTY3NzM4NTNhcC0yLAorICAgIC0weDEuMDAwMDAycDI0LAorICB9LAorICB7IC8vIEVudHJ5IDgxNworICAgIC0weDEuODM3Yjk4YTMxODVkMTQ2NmQ4NTJmMGE3ZGMxZDI0OGVwLTEsCisgICAgLTB4MS40ZWFhNjY3YmEwYjkwZGZiMDVhYjNkOWMyNDdjZGVlN3AtMSwKKyAgICAweDEuZmZmZmZlcDEsCisgIH0sCisgIHsgLy8gRW50cnkgODE4CisgICAgMHgxLjgzN2I5OGEzMTg1ZDE0NjZkODUyZjBhN2RjMWQyNDhlcC0xLAorICAgIC0weDEuNGVhYTY2N2JhMGI5MGRmYjA1YWIzZDljMjQ3Y2RlZTdwLTEsCisgICAgLTB4MS5mZmZmZmVwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTkKKyAgICAtMHgxLjgzN2I5ZGRkYzFlYWU3MGNlOTgwNTVhMGU0NTBkOTNjcC0xLAorICAgIC0weDEuNGVhYTYwNmRiMjRjMGM0NjZkYTFjMmRjN2JhYTJiMzJwLTEsCisgICAgMHgxLnAyLAorICB9LAorICB7IC8vIEVudHJ5IDgyMAorICAgIDB4MS44MzdiOWRkZGMxZWFlNzBjZTk4MDU1YTBlNDUwZDkzY3AtMSwKKyAgICAtMHgxLjRlYWE2MDZkYjI0YzBjNDY2ZGExYzJkYzdiYWEyYjMycC0xLAorICAgIC0weDEucDIsCisgIH0sCisgIHsgLy8gRW50cnkgODIxCisgICAgLTB4MS44MzdiYTg1MzE0YmRlNTJiMWU5YzJjOGVkMjcxMmM3MnAtMSwKKyAgICAtMHgxLjRlYWE1NDUxZDUzMzQ4ZWI4OWRjNDc4ZDRkMTFiZTAycC0xLAorICAgIDB4MS4wMDAwMDJwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjIKKyAgICAweDEuODM3YmE4NTMxNGJkZTUyYjFlOWMyYzhlZDI3MTJjNzJwLTEsCisgICAgLTB4MS40ZWFhNTQ1MWQ1MzM0OGViODlkYzQ3OGQ0ZDExYmUwMnAtMSwKKyAgICAtMHgxLjAwMDAwMnAyLAorICB9LAorICB7IC8vIEVudHJ5IDgyMworICAgIDB4MS5kMThmNzA1NzNkYTYzMDEyZmExYzBlM2QyZWJiZTU5Y3AtMSwKKyAgICAtMHgxLmFhMjI1ZTJlZjk2MjQxOTE1YjZmZDIxNzUyMjgxNGY1cC0yLAorICAgIDB4MS5mZmZmZmVwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjQKKyAgICAtMHgxLmQxOGY3MDU3M2RhNjMwMTJmYTFjMGUzZDJlYmJlNTljcC0xLAorICAgIC0weDEuYWEyMjVlMmVmOTYyNDE5MTViNmZkMjE3NTIyODE0ZjVwLTIsCisgICAgLTB4MS5mZmZmZmVwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjUKKyAgICAweDEuZDE4ZjZlYWQxYjQ0NWRmYWI4NDgxODgwMDljOWJiOTVwLTEsCisgICAgLTB4MS5hYTIyNjU3NTM3MjA0YTQzMzJmOGFjYmI3MmIwZDc2OHAtMiwKKyAgICAweDEucDEsCisgIH0sCisgIHsgLy8gRW50cnkgODI2CisgICAgLTB4MS5kMThmNmVhZDFiNDQ1ZGZhYjg0ODE4ODAwOWM5YmI5NXAtMSwKKyAgICAtMHgxLmFhMjI2NTc1MzcyMDRhNDMzMmY4YWNiYjcyYjBkNzY4cC0yLAorICAgIC0weDEucDEsCisgIH0sCisgIHsgLy8gRW50cnkgODI3CisgICAgMHgxLmQxOGY2YjU4ZDY2YWU3MTEwYjJiNmY3Y2ZmYmE2ZWMxcC0xLAorICAgIC0weDEuYWEyMjc0MDFiMjg4NjIwYTAzNzJkNWE5NjA4NDkxNWRwLTIsCisgICAgMHgxLjAwMDAwMnAxLAorICB9LAorICB7IC8vIEVudHJ5IDgyOAorICAgIC0weDEuZDE4ZjZiNThkNjZhZTcxMTBiMmI2ZjdjZmZiYTZlYzFwLTEsCisgICAgLTB4MS5hYTIyNzQwMWIyODg2MjBhMDM3MmQ1YTk2MDg0OTE1ZHAtMiwKKyAgICAtMHgxLjAwMDAwMnAxLAorICB9LAorICB7IC8vIEVudHJ5IDgyOQorICAgIDB4MS5hZWQ1NDdkYmVlNGQwZDg2ODBkMDgxM2QxZTRlMjFkMHAtMSwKKyAgICAweDEuMTRhMjgyYWEyNWIxMWY2MzEyYTdhNjUxODBlN2MzZDRwLTEsCisgICAgMHgxLmZmZmZmZXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzAKKyAgICAtMHgxLmFlZDU0N2RiZWU0ZDBkODY4MGQwODEzZDFlNGUyMWQwcC0xLAorICAgIDB4MS4xNGEyODJhYTI1YjExZjYzMTJhN2E2NTE4MGU3YzNkNHAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzEKKyAgICAweDEuYWVkNTQ4ZjA5MGNlZTA0MThkZDNkMjEzOGExZTc4NjVwLTEsCisgICAgMHgxLjE0YTI4MGZiNTA2OGI5MjM4NDhjZGIyZWQwZTM3YTUzcC0xLAorICAgIDB4MS5wMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzIKKyAgICAtMHgxLmFlZDU0OGYwOTBjZWUwNDE4ZGQzZDIxMzhhMWU3ODY1cC0xLAorICAgIDB4MS4xNGEyODBmYjUwNjhiOTIzODQ4Y2RiMmVkMGUzN2E1M3AtMSwKKyAgICAtMHgxLnAwLAorICB9LAorICB7IC8vIEVudHJ5IDgzMworICAgIDB4MS5hZWQ1NGIxOWQ1Y2Q3OTM3Y2JmNDFlZDQwOGNhMGE1MnAtMSwKKyAgICAweDEuMTRhMjdkOWRhNWQ0YWViY2U3MTQyOGY5MDU3YjA4ZGFwLTEsCisgICAgMHgxLjAwMDAwMnAwLAorICB9LAorICB7IC8vIEVudHJ5IDgzNAorICAgIC0weDEuYWVkNTRiMTlkNWNkNzkzN2NiZjQxZWQ0MDhjYTBhNTJwLTEsCisgICAgMHgxLjE0YTI3ZDlkYTVkNGFlYmNlNzE0MjhmOTA1N2IwOGRhcC0xLAorICAgIC0weDEuMDAwMDAycDAsCisgIH0sCisgIHsgLy8gRW50cnkgODM1CisgICAgMHgxLmVhZWU4NTgzNWRkZTViNzFiZWVjN2Q4ZDk4MDUyMTEycC0yLAorICAgIDB4MS5jMTUyODBlMDczNzY5MmRkNDM2OTA4ZmRjOGU2ZTJlMXAtMSwKKyAgICAweDEuZmZmZmZlcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDgzNgorICAgIC0weDEuZWFlZTg1ODM1ZGRlNWI3MWJlZWM3ZDhkOTgwNTIxMTJwLTIsCisgICAgMHgxLmMxNTI4MGUwNzM3NjkyZGQ0MzY5MDhmZGM4ZTZlMmUxcC0xLAorICAgIC0weDEuZmZmZmZlcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDgzNworICAgIDB4MS5lYWVlODc0NGIwNWVmZTg3NjRiYzM2NGZkODM3YjY2NnAtMiwKKyAgICAweDEuYzE1MjgwNjViN2Q0ZjlkYjdiYmIzYjQ1ZjVmNWIzMGFwLTEsCisgICAgMHgxLnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzgKKyAgICAtMHgxLmVhZWU4NzQ0YjA1ZWZlODc2NGJjMzY0ZmQ4MzdiNjY2cC0yLAorICAgIDB4MS5jMTUyODA2NWI3ZDRmOWRiN2JiYjNiNDVmNWY1YjMwYXAtMSwKKyAgICAtMHgxLnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzkKKyAgICAweDEuZWFlZThhYzc1NTVlZDQ3ZmNhNzdjZWVkMTc0YzhlYTBwLTIsCisgICAgMHgxLmMxNTI3ZjcwNDA5MDc2ZGEwYzMyMDRkZjFlMDk5YTgzcC0xLAorICAgIDB4MS4wMDAwMDJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgODQwCisgICAgLTB4MS5lYWVlOGFjNzU1NWVkNDdmY2E3N2NlZWQxNzRjOGVhMHAtMiwKKyAgICAweDEuYzE1MjdmNzA0MDkwNzZkYTBjMzIwNGRmMWUwOTlhODNwLTEsCisgICAgLTB4MS4wMDAwMDJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgODQxCisgICAgMHgxLmZhYWVlYjVmMWMwZDYzZjQzYzZmM2VjNDYwMTE2OTBmcC0zLAorICAgIDB4MS5mMDE1NGExNzg5ZDhkY2MxNzJjZDIwOTJkMDVmNjM5NHAtMSwKKyAgICAweDEuZmZmZmZlcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDg0MgorICAgIC0weDEuZmFhZWViNWYxYzBkNjNmNDNjNmYzZWM0NjAxMTY5MGZwLTMsCisgICAgMHgxLmYwMTU0YTE3ODlkOGRjYzE3MmNkMjA5MmQwNWY2Mzk0cC0xLAorICAgIC0weDEuZmZmZmZlcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDg0MworICAgIDB4MS5mYWFlZWQ0ZjMxNTc2YmE4OWRlYmRjNzM1MWU4YjFhZXAtMywKKyAgICAweDEuZjAxNTQ5ZjdkZWVhMTc0ZjA3YTY3OTcyYmYyOWYxNDhwLTEsCisgICAgMHgxLnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDQKKyAgICAtMHgxLmZhYWVlZDRmMzE1NzZiYTg5ZGViZGM3MzUxZThiMWFlcC0zLAorICAgIDB4MS5mMDE1NDlmN2RlZWExNzRmMDdhNjc5NzJiZjI5ZjE0OHAtMSwKKyAgICAtMHgxLnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDUKKyAgICAweDEuZmFhZWYxMmY1YmViMWMxMDk0NDczZDNjMzM2NWI5ZTFwLTMsCisgICAgMHgxLmYwMTU0OWI4ODkwYzJmNjYzMzdjYWMxNWE3MjM3YzhlcC0xLAorICAgIDB4MS4wMDAwMDJwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgODQ2CisgICAgLTB4MS5mYWFlZjEyZjViZWIxYzEwOTQ0NzNkM2MzMzY1YjllMXAtMywKKyAgICAweDEuZjAxNTQ5Yjg4OTBjMmY2NjMzN2NhYzE1YTcyMzdjOGVwLTEsCisgICAgLTB4MS4wMDAwMDJwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgODQ3CisgICAgMHgxLmZlYWFlY2VjNmQ4ZTMwY2Q1Njk1MGViMmViZGNlYmQ0cC00LAorICAgIDB4MS5mYzAxNTUyZmQwNjhlZTgzZjViNzQyYzA1MjQ1ZThiMnAtMSwKKyAgICAweDEuZmZmZmZlcC00LAorICB9LAorICB7IC8vIEVudHJ5IDg0OAorICAgIC0weDEuZmVhYWVjZWM2ZDhlMzBjZDU2OTUwZWIyZWJkY2ViZDRwLTQsCisgICAgMHgxLmZjMDE1NTJmZDA2OGVlODNmNWI3NDJjMDUyNDVlOGIycC0xLAorICAgIC0weDEuZmZmZmZlcC00LAorICB9LAorICB7IC8vIEVudHJ5IDg0OQorICAgIDB4MS5mZWFhZWVlODZlZTM1Y2EwNjlhODY3MjFmODlmODVhNXAtNCwKKyAgICAweDEuZmMwMTU1MjdkNWJkMzZkYTNjZDQyNTNiZWRlMzE5Y2FwLTEsCisgICAgMHgxLnAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTAKKyAgICAtMHgxLmZlYWFlZWU4NmVlMzVjYTA2OWE4NjcyMWY4OWY4NWE1cC00LAorICAgIDB4MS5mYzAxNTUyN2Q1YmQzNmRhM2NkNDI1M2JlZGUzMTljYXAtMSwKKyAgICAtMHgxLnAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTEKKyAgICAweDEuZmVhYWYyZTA3MThkOWM1NjhjOTQ0MmM4MTU0NWNkNjJwLTQsCisgICAgMHgxLmZjMDE1NTE3ZTA2NWFmYjZiYjEwMmMxOGY1OTE5ODIwcC0xLAorICAgIDB4MS4wMDAwMDJwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgODUyCisgICAgLTB4MS5mZWFhZjJlMDcxOGQ5YzU2OGM5NDQyYzgxNTQ1Y2Q2MnAtNCwKKyAgICAweDEuZmMwMTU1MTdlMDY1YWZiNmJiMTAyYzE4ZjU5MTk4MjBwLTEsCisgICAgLTB4MS4wMDAwMDJwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgODUzCisgICAgMHgxLmZmYWFhY2VmZDRkODU1YWM4MjI3Nzk5ZjNlMjYzZDdhcC01LAorICAgIDB4MS5mZjAwMTU1NjllZjdlMmI5NjMwMWU2Zjc1MmMwMTlkNHAtMSwKKyAgICAweDEuZmZmZmZlcC01LAorICB9LAorICB7IC8vIEVudHJ5IDg1NAorICAgIC0weDEuZmZhYWFjZWZkNGQ4NTVhYzgyMjc3OTlmM2UyNjNkN2FwLTUsCisgICAgMHgxLmZmMDAxNTU2OWVmN2UyYjk2MzAxZTZmNzUyYzAxOWQ0cC0xLAorICAgIC0weDEuZmZmZmZlcC01LAorICB9LAorICB7IC8vIEVudHJ5IDg1NQorICAgIDB4MS5mZmFhYWVlZWQ0ZWRhYjRiYTRiMzY1ZWQyNWE5NTk1ZnAtNSwKKyAgICAweDEuZmYwMDE1NTQ5ZjRkMzRjYTBlMWVlNjUwOWJjNDJiNzFwLTEsCisgICAgMHgxLnAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTYKKyAgICAtMHgxLmZmYWFhZWVlZDRlZGFiNGJhNGIzNjVlZDI1YTk1OTVmcC01LAorICAgIDB4MS5mZjAwMTU1NDlmNGQzNGNhMGUxZWU2NTA5YmM0MmI3MXAtMSwKKyAgICAtMHgxLnAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTcKKyAgICAweDEuZmZhYWIyZWNkNTE4NTA4YWU5YmM3MzBhMTY1YThlYWRwLTUsCisgICAgMHgxLmZmMDAxNTUwOWZmN2QyZWU2NDE4ZTkyNGYwZGU1ZTk3cC0xLAorICAgIDB4MS4wMDAwMDJwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgODU4CisgICAgLTB4MS5mZmFhYjJlY2Q1MTg1MDhhZTliYzczMGExNjVhOGVhZHAtNSwKKyAgICAweDEuZmYwMDE1NTA5ZmY3ZDJlZTY0MThlOTI0ZjBkZTVlOTdwLTEsCisgICAgLTB4MS4wMDAwMDJwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgODU5CisgICAgMHgxLmZmZWFhOGVmMmU4NTkzMzg4M2MwZGMzMzQ2MjM4N2I1cC02LAorICAgIDB4MS5mZmMwMDE1NWQyNzdkNThlNzI3Y2Q5NWM0M2Y3NTljZnAtMSwKKyAgICAweDEuZmZmZmZlcC02LAorICB9LAorICB7IC8vIEVudHJ5IDg2MAorICAgIC0weDEuZmZlYWE4ZWYyZTg1OTMzODgzYzBkYzMzNDYyMzg3YjVwLTYsCisgICAgMHgxLmZmYzAwMTU1ZDI3N2Q1OGU3MjdjZDk1YzQzZjc1OWNmcC0xLAorICAgIC0weDEuZmZmZmZlcC02LAorICB9LAorICB7IC8vIEVudHJ5IDg2MQorICAgIDB4MS5mZmVhYWFlZWVlODZlOGNhZmU0MTM3NmQ0NzkxOTU3OXAtNiwKKyAgICAweDEuZmZjMDAxNTU1MjdkMmIxMmFlZGI0OWQ5MjkyOGRmNzJwLTEsCisgICAgMHgxLnAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjIKKyAgICAtMHgxLmZmZWFhYWVlZWU4NmU4Y2FmZTQxMzc2ZDQ3OTE5NTc5cC02LAorICAgIDB4MS5mZmMwMDE1NTUyN2QyYjEyYWVkYjQ5ZDkyOTI4ZGY3MnAtMSwKKyAgICAtMHgxLnAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjMKKyAgICAweDEuZmZlYWFlZWU2ZTg5OTI3MDAzNDEzYWJlNjRlOWRjMjFwLTYsCisgICAgMHgxLmZmYzAwMTU0NTI4N2Q0OWI1Nzk3MmFmNTE0NTY2M2EwcC0xLAorICAgIDB4MS4wMDAwMDJwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgODY0CisgICAgLTB4MS5mZmVhYWVlZTZlODk5MjcwMDM0MTNhYmU2NGU5ZGMyMXAtNiwKKyAgICAweDEuZmZjMDAxNTQ1Mjg3ZDQ5YjU3OTcyYWY1MTQ1NjYzYTBwLTEsCisgICAgLTB4MS4wMDAwMDJwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgODY1CisgICAgMHgxLmZmZmFhOGFlZmVlZDM5NmZmZmZjNjM2MzEzZDBiYTZkcC03LAorICAgIDB4MS5mZmYwMDAxNTc1NDk5ZjNkNzk5NmUyZGExMWNkZWIyNHAtMSwKKyAgICAweDEuZmZmZmZlcC03LAorICB9LAorICB7IC8vIEVudHJ5IDg2NgorICAgIC0weDEuZmZmYWE4YWVmZWVkMzk2ZmZmZmM2MzYzMTNkMGJhNmRwLTcsCisgICAgMHgxLmZmZjAwMDE1NzU0OTlmM2Q3OTk2ZTJkYTExY2RlYjI0cC0xLAorICAgIC0weDEuZmZmZmZlcC03LAorICB9LAorICB7IC8vIEVudHJ5IDg2NworICAgIDB4MS5mZmZhYWFhZWVlZWQ0ZWQ1NDljNjU2MGY4ODllZTUzMXAtNywKKyAgICAweDEuZmZmMDAwMTU1NTQ5ZjRhMjhhMjgwZTk3YmNkNTljOGFwLTEsCisgICAgMHgxLnAtNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjgKKyAgICAtMHgxLmZmZmFhYWFlZWVlZDRlZDU0OWM2NTYwZjg4OWVlNTMxcC03LAorICAgIDB4MS5mZmYwMDAxNTU1NDlmNGEyOGEyODBlOTdiY2Q1OWM4YXAtMSwKKyAgICAtMHgxLnAtNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjkKKyAgICAweDEuZmZmYWFlYWVjZWVkNzkzZmRlNWExYTljYTViYjFlZTZwLTcsCisgICAgMHgxLmZmZjAwMDE1MTU0YTlmMGNhZTRhNjIxNTE1MDFjZDBhcC0xLAorICAgIDB4MS4wMDAwMDJwLTYsCisgIH0sCisgIHsgLy8gRW50cnkgODcwCisgICAgLTB4MS5mZmZhYWVhZWNlZWQ3OTNmZGU1YTFhOWNhNWJiMWVlNnAtNywKKyAgICAweDEuZmZmMDAwMTUxNTRhOWYwY2FlNGE2MjE1MTUwMWNkMGFwLTEsCisgICAgLTB4MS4wMDAwMDJwLTYsCisgIH0sCisgIHsgLy8gRW50cnkgODcxCisgICAgMHgxLmZmZmZmZGZhYWFhYWJhYWVlZWRlZDk5N2ZlZmZhMzVhcC0xNSwKKyAgICAweDEuZmZmZmZmZjAwMDAwMjAxNTU1NDRmZmY0OWZjYTM4ZTZwLTEsCisgICAgMHgxLmZmZmZmZXAtMTUsCisgIH0sCisgIHsgLy8gRW50cnkgODcyCisgICAgLTB4MS5mZmZmZmRmYWFhYWFiYWFlZWVkZWQ5OTdmZWZmYTM1YXAtMTUsCisgICAgMHgxLmZmZmZmZmYwMDAwMDIwMTU1NTQ0ZmZmNDlmY2EzOGU2cC0xLAorICAgIC0weDEuZmZmZmZlcC0xNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzMKKyAgICAweDEuZmZmZmZmZmFhYWFhYWFhZWVlZWVlZWVkNGVkNGVkNGZwLTE1LAorICAgIDB4MS5mZmZmZmZmMDAwMDAwMDE1NTU1NTU1NDlmNDlmNDlmN3AtMSwKKyAgICAweDEucC0xNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzQKKyAgICAtMHgxLmZmZmZmZmZhYWFhYWFhYWVlZWVlZWVlZDRlZDRlZDRmcC0xNSwKKyAgICAweDEuZmZmZmZmZjAwMDAwMDAxNTU1NTU1NTQ5ZjQ5ZjQ5ZjdwLTEsCisgICAgLTB4MS5wLTE0LAorICB9LAorICB7IC8vIEVudHJ5IDg3NQorICAgIDB4MS4wMDAwMDFmZDU1NTU0NTU3Nzc1NzhjY2JlN2JmYzA5Y3AtMTQsCisgICAgMHgxLmZmZmZmZmVmZmZmZmMwMTU1NTE1ZmZmNGExNDk2YzFjcC0xLAorICAgIDB4MS4wMDAwMDJwLTE0LAorICB9LAorICB7IC8vIEVudHJ5IDg3NgorICAgIC0weDEuMDAwMDAxZmQ1NTU1NDU1Nzc3NTc4Y2NiZTdiZmMwOWNwLTE0LAorICAgIDB4MS5mZmZmZmZlZmZmZmZjMDE1NTUxNWZmZjRhMTQ5NmMxY3AtMSwKKyAgICAtMHgxLjAwMDAwMnAtMTQsCisgIH0sCisgIHsgLy8gRW50cnkgODc3CisgICAgMHgxLmZmZmZmZGZmZmZmZmZlYWFhYWFlYWFhYWE2YWFlZWYwcC0yOCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmMwMDAwMDdmZmZmZmMwMTU1NTVwLTEsCisgICAgMHgxLmZmZmZmZXAtMjgsCisgIH0sCisgIHsgLy8gRW50cnkgODc4CisgICAgLTB4MS5mZmZmZmRmZmZmZmZmZWFhYWFhZWFhYWFhNmFhZWVmMHAtMjgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZjMDAwMDA3ZmZmZmZjMDE1NTU1cC0xLAorICAgIC0weDEuZmZmZmZlcC0yOCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzkKKyAgICAweDEuZmZmZmZmZmZmZmZmZmVhYWFhYWFhYWFhYWFhYWVlZWVwLTI4LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDAxNTU1NXAtMSwKKyAgICAweDEucC0yNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZlYWFhYWFhYWFhYWFhYWFlZWVlcC0yOCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMTU1NTVwLTEsCisgICAgLTB4MS5wLTI3LAorICB9LAorICB7IC8vIEVudHJ5IDg4MQorICAgIDB4MS4wMDAwMDFmZmZmZmZmZjU1NTU1MTU1NTU0ZDU1Nzc3MnAtMjcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZiZmZmZmVmZmZmZmYwMDE1NTU1cC0xLAorICAgIDB4MS4wMDAwMDJwLTI3LAorICB9LAorICB7IC8vIEVudHJ5IDg4MgorICAgIC0weDEuMDAwMDAxZmZmZmZmZmY1NTU1NTE1NTU1NGQ1NTc3NzJwLTI3LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmYmZmZmZlZmZmZmZmMDAxNTU1NXAtMSwKKyAgICAtMHgxLjAwMDAwMnAtMjcsCisgIH0sCisgIHsgLy8gRW50cnkgODgzCisgICAgMHgxLmZmZmZmZGZmZmZmZmZmZmFhYWFhYmFhYWFhOWFhYWFlcC0zMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmMDAwMDAxZmZmZmZmMDAwMTVwLTEsCisgICAgMHgxLmZmZmZmZXAtMzEsCisgIH0sCisgIHsgLy8gRW50cnkgODg0CisgICAgLTB4MS5mZmZmZmRmZmZmZmZmZmZhYWFhYWJhYWFhYTlhYWFhZXAtMzEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZjAwMDAwMWZmZmZmZjAwMDE1cC0xLAorICAgIC0weDEuZmZmZmZlcC0zMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmYWFhYWFhYWFhYWFhYWFhYWVwLTMxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAxNXAtMSwKKyAgICAweDEucC0zMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODYKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmFhYWFhYWFhYWFhYWFhYWFlcC0zMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMTVwLTEsCisgICAgLTB4MS5wLTMwLAorICB9LAorICB7IC8vIEVudHJ5IDg4NworICAgIDB4MS4wMDAwMDFmZmZmZmZmZmZkNTU1NTQ1NTU1NTM1NTU1N3AtMzAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZWZmZmZmYmZmZmZmYzAwMDE1cC0xLAorICAgIDB4MS4wMDAwMDJwLTMwLAorICB9LAorICB7IC8vIEVudHJ5IDg4OAorICAgIC0weDEuMDAwMDAxZmZmZmZmZmZmZDU1NTU0NTU1NTUzNTU1NTdwLTMwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmVmZmZmZmJmZmZmZmMwMDAxNXAtMSwKKyAgICAtMHgxLjAwMDAwMnAtMzAsCisgIH0sCisgIHsgLy8gRW50cnkgODg5CisgICAgMHgxLjBiMzM2NjUwODk1NzUyMGQ5ZGM4OGQ3YzA5MzM3ZTI0cC0xLAorICAgIDB4MS5iNGJmMmM3OWJkZmNkYWE1M2VkNmMwMTNmNjVlMDk2M3AtMSwKKyAgICAtMHgxLmZmZmZmZXAxMjcsCisgIH0sCisgIHsgLy8gRW50cnkgODkwCisgICAgLTB4MS4wYjMzNjY1MDg5NTc1MjBkOWRjODhkN2MwOTMzN2UyNHAtMSwKKyAgICAweDEuYjRiZjJjNzliZGZjZGFhNTNlZDZjMDEzZjY1ZTA5NjNwLTEsCisgICAgMHgxLmZmZmZmZXAxMjcsCisgIH0sCisgIHsgLy8gRW50cnkgODkxCisgICAgLTB4MS4wYjMzNjY1MDg5NTc1MjBkOWRjODhkN2MwOTMzN2UyNHAtMSwKKyAgICAweDEuYjRiZjJjNzliZGZjZGFhNTNlZDZjMDEzZjY1ZTA5NjNwLTEsCisgICAgMHgxLmZmZmZmZXAxMjcsCisgIH0sCisgIHsgLy8gRW50cnkgODkyCisgICAgMHgxLjBiMzM2NjUwODk1NzUyMGQ5ZGM4OGQ3YzA5MzM3ZTI0cC0xLAorICAgIDB4MS5iNGJmMmM3OWJkZmNkYWE1M2VkNmMwMTNmNjVlMDk2M3AtMSwKKyAgICAtMHgxLmZmZmZmZXAxMjcsCisgIH0sCisgIHsgLy8gRW50cnkgODkzCisgICAgLTB4MS4wYjMzNjY1MDg5NTc1MjBkOWRjODhkN2MwOTMzN2UyNHAtMSwKKyAgICAweDEuYjRiZjJjNzliZGZjZGFhNTNlZDZjMDEzZjY1ZTA5NjNwLTEsCisgICAgMHgxLmZmZmZmZXAxMjcsCisgIH0sCisgIHsgLy8gRW50cnkgODk0CisgICAgMHgxLjBiMzM2NjUwODk1NzUyMGQ5ZGM4OGQ3YzA5MzM3ZTI0cC0xLAorICAgIDB4MS5iNGJmMmM3OWJkZmNkYWE1M2VkNmMwMTNmNjVlMDk2M3AtMSwKKyAgICAtMHgxLmZmZmZmZXAxMjcsCisgIH0sCisgIHsgLy8gRW50cnkgODk1CisgICAgLTB4MS40OGNlNTc1MjAyZWZkOTNjNjJmN2I4ODEwNmVhMWQ0ZHAtMSwKKyAgICAtMHgxLjg4NzdhMjllM2Q3YjZkZWZjYjUyOGU4NmY0YzNlMDlhcC0xLAorICAgIDB4MS5mZmZmZmNwMTI3LAorICB9LAorICB7IC8vIEVudHJ5IDg5NgorICAgIDB4MS40OGNlNTc1MjAyZWZkOTNjNjJmN2I4ODEwNmVhMWQ0ZHAtMSwKKyAgICAtMHgxLjg4NzdhMjllM2Q3YjZkZWZjYjUyOGU4NmY0YzNlMDlhcC0xLAorICAgIC0weDEuZmZmZmZjcDEyNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTcKKyAgICAtMHgxLjc3N2E1Y2Y3MmNlYzVmZDYxODk2Y2I0ZjQwZDFkZTc5cC0yNCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZGQ5NDg0OTI3MWQwOGVlY2Y1NGExcC0xLAorICAgIDB4MS45MjFmYjZwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTgKKyAgICAweDEuNzc3YTVjZjcyY2VjNWZkNjE4OTZjYjRmNDBkMWRlNzlwLTI0LAorICAgIC0weDEuZmZmZmZmZmZmZmZkZDk0ODQ5MjcxZDA4ZWVjZjU0YTFwLTEsCisgICAgLTB4MS45MjFmYjZwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTkKKyAgICAweDEuZmZmZmZmZmZmZmZmNzY1MjEyNDljNzQyMjkzMGVkODJwLTEsCisgICAgLTB4MS43NzdhNWNmNzJjZWNjNGNkZTNhMzFlN2Q1YTAyNjE0MnAtMjUsCisgICAgMHgxLjkyMWZiNnAwLAorICB9LAorICB7IC8vIEVudHJ5IDkwMAorICAgIC0weDEuZmZmZmZmZmZmZmZmNzY1MjEyNDljNzQyMjkzMGVkODJwLTEsCisgICAgLTB4MS43NzdhNWNmNzJjZWNjNGNkZTNhMzFlN2Q1YTAyNjE0MnAtMjUsCisgICAgLTB4MS45MjFmYjZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDEKKyAgICAweDEuYWVkNTRiMTlkNWNkNzkzN2NiZjQxZWQ0MDhjYTBhNTJwLTEsCisgICAgMHgxLjE0YTI3ZDlkYTVkNGFlYmNlNzE0MjhmOTA1N2IwOGRhcC0xLAorICAgIDB4MS4wMDAwMDJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDIKKyAgICAtMHgxLmFlZDU0YjE5ZDVjZDc5MzdjYmY0MWVkNDA4Y2EwYTUycC0xLAorICAgIDB4MS4xNGEyN2Q5ZGE1ZDRhZWJjZTcxNDI4ZjkwNTdiMDhkYXAtMSwKKyAgICAtMHgxLjAwMDAwMnAwLAorICB9LAorICB7IC8vIEVudHJ5IDkwMworICAgIDB4MS5hZWQ1NDhmMDkwY2VlMDQxOGRkM2QyMTM4YTFlNzg2NXAtMSwKKyAgICAweDEuMTRhMjgwZmI1MDY4YjkyMzg0OGNkYjJlZDBlMzdhNTNwLTEsCisgICAgMHgxLnAwLAorICB9LAorICB7IC8vIEVudHJ5IDkwNAorICAgIC0weDEuYWVkNTQ4ZjA5MGNlZTA0MThkZDNkMjEzOGExZTc4NjVwLTEsCisgICAgMHgxLjE0YTI4MGZiNTA2OGI5MjM4NDhjZGIyZWQwZTM3YTUzcC0xLAorICAgIC0weDEucDAsCisgIH0sCisgIHsgLy8gRW50cnkgOTA1CisgICAgMHgxLmFlZDU0N2RiZWU0ZDBkODY4MGQwODEzZDFlNGUyMWQwcC0xLAorICAgIDB4MS4xNGEyODJhYTI1YjExZjYzMTJhN2E2NTE4MGU3YzNkNHAtMSwKKyAgICAweDEuZmZmZmZlcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDkwNgorICAgIC0weDEuYWVkNTQ3ZGJlZTRkMGQ4NjgwZDA4MTNkMWU0ZTIxZDBwLTEsCisgICAgMHgxLjE0YTI4MmFhMjViMTFmNjMxMmE3YTY1MTgwZTdjM2Q0cC0xLAorICAgIC0weDEuZmZmZmZlcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDkwNworICAgIDB4MS42YTA5ZTZlY2I0MWZkZDdlNjgxODcyYzg1NDg4NzAxOXAtMSwKKyAgICAweDEuNmEwOWU1ZTMzMzU5ODNlNWFjOTJlNzMzZTNmMjRiNDJwLTEsCisgICAgMHgxLjkyMWZiNnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDgKKyAgICAtMHgxLjZhMDllNmVjYjQxZmRkN2U2ODE4NzJjODU0ODg3MDE5cC0xLAorICAgIDB4MS42YTA5ZTVlMzMzNTk4M2U1YWM5MmU3MzNlM2YyNGI0MnAtMSwKKyAgICAtMHgxLjkyMWZiNnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDkKKyAgICAweDEuMDAwMDAxZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjAwMDAwMnAtMTI2LAorICB9LAorICB7IC8vIEVudHJ5IDkxMAorICAgIC0weDEuMDAwMDAxZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wMDAwMDJwLTEyNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTI2LAorICB9LAorICB7IC8vIEVudHJ5IDkxMgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5wLTEyNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTMKKyAgICAweDEuZmZmZmZiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLmZmZmZmY3AtMTI3LAorICB9LAorICB7IC8vIEVudHJ5IDkxNAorICAgIC0weDEuZmZmZmZiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5mZmZmZmNwLTEyNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTUKKyAgICAweDEuZmZmZmY3ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLmZmZmZmOHAtMTI3LAorICB9LAorICB7IC8vIEVudHJ5IDkxNgorICAgIC0weDEuZmZmZmY3ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5mZmZmZjhwLTEyNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTE0OSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTQ4LAorICB9LAorICB7IC8vIEVudHJ5IDkxOAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTE0OSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5wLTE0OCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTkKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEucC0xNDksCisgIH0sCisgIHsgLy8gRW50cnkgOTIwCisgICAgLTAuMGYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xNDksCisgIH0sCisgIHsgLy8gRW50cnkgOTIxCisgICAgMC4wLAorICAgIDB4MS5wMCwKKyAgICAwLjBmLAorICB9LAorICB7IC8vIEVudHJ5IDkyMgorICAgIC0wLjAsCisgICAgMHgxLnAwLAorICAgIC0wLjBmLAorICB9LAorfTsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCisKK1RFU1QobWF0aF9zaW5jb3NmLCBzaW5jb3NmX2ludGVsKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihnX3NpbmNvc2ZfaW50ZWxfZGF0YSkvc2l6ZW9mKHNpbmNvc2ZfaW50ZWxfZGF0YV90KTsgaSsrKSB7CisgICBmbG9hdCBmc2luLCBmY29zOworICAgc2luY29zZihnX3NpbmNvc2ZfaW50ZWxfZGF0YVtpXS5jYWxsX2RhdGEsICZmc2luLCAmZmNvcyk7CisgICBFWFBFQ1RfRkxPQVRfRVEoZ19zaW5jb3NmX2ludGVsX2RhdGFbaV0uc2luX2V4cGVjdGVkLCBmc2luKSA8PCAiRmFpbGVkIG9uIGVsZW1lbnQgIiA8PCBpOworICAgRVhQRUNUX0ZMT0FUX0VRKGdfc2luY29zZl9pbnRlbF9kYXRhW2ldLmNvc19leHBlY3RlZCwgZmNvcykgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKKyAgfQorI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWF0aF9zaW5mX3Rlc3QuY3BwIGIvdGVzdHMvbWF0aF9zaW5mX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMWUyYzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tYXRoX3NpbmZfdGVzdC5jcHAKQEAgLTAsMCArMSw0Mzk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCit0eXBlZGVmIHN0cnVjdCB7CisgIGZsb2F0IGV4cGVjdGVkOworICBmbG9hdCBjYWxsX2RhdGE7Cit9IHNpbmZfaW50ZWxfZGF0YV90OworCitzdGF0aWMgc2luZl9pbnRlbF9kYXRhX3QgZ19zaW5mX2ludGVsX2RhdGFbXSA9IHsKKyAgeyAvLyBFbnRyeSAwCisgICAgLTB4MS4wMDAzZmZmZmZmZjU1NGQ1NTM1NTUyY2NjZjc3OGNjZHAtMjEsCisgICAgLTB4MS4wMDA0cC0yMQorICB9LAorICB7IC8vIEVudHJ5IDEKKyAgICAweDEuMDAwM2ZmZmZmZmY1NTRkNTUzNTU1MmNjY2Y3NzhjY2RwLTIxLAorICAgIDB4MS4wMDA0cC0yMQorICB9LAorICB7IC8vIEVudHJ5IDIKKyAgICAtMHgxLmQzMGNhNzAwOGFmMjRlZjA0OGE3YTA1ZWVjZGUyMTIwcC00LAorICAgIC0weDEuMDBjYmYwcDEwCisgIH0sCisgIHsgLy8gRW50cnkgMworICAgIDB4MS5kMzBjYTcwMDhhZjI0ZWYwNDhhN2EwNWVlY2RlMjEyMHAtNCwKKyAgICAweDEuMDBjYmYwcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNAorICAgIDB4MS44ZDY2NWQwMDAwMjAwZWZjNDQ3ODAwODY1OGM2MTdjN3AtMSwKKyAgICAtMHgxLjAxZWUzNHAyCisgIH0sCisgIHsgLy8gRW50cnkgNQorICAgIC0weDEuOGQ2NjVkMDAwMDIwMGVmYzQ0NzgwMDg2NThjNjE3YzdwLTEsCisgICAgMHgxLjAxZWUzNHAyCisgIH0sCisgIHsgLy8gRW50cnkgNgorICAgIDB4MS5lYzA0MmZmOTcyZTQyYzIzZjI4ZjJkYTRmYjc1Zjg1MXAtMSwKKyAgICAtMHgxLjE4ZjFmNHA0CisgIH0sCisgIHsgLy8gRW50cnkgNworICAgIC0weDEuZWMwNDJmZjk3MmU0MmMyM2YyOGYyZGE0ZmI3NWY4NTFwLTEsCisgICAgMHgxLjE4ZjFmNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOAorICAgIDB4MS5mMGQzODQyNDBhZDlmMmRiYTQ3Yjk2YjA4MjcxYjQxZnAtMSwKKyAgICAtMHgxLjFkZjkwNnAyCisgIH0sCisgIHsgLy8gRW50cnkgOQorICAgIC0weDEuZjBkMzg0MjQwYWQ5ZjJkYmE0N2I5NmIwODI3MWI0MWZwLTEsCisgICAgMHgxLjFkZjkwNnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAKKyAgICAtMHgxLjQ2MTZkYWY5Y2QzY2U0ZTkyMTg2ZTdkOGVjM2QzZWYwcC01LAorICAgIC0weDEuM2FwNgorICB9LAorICB7IC8vIEVudHJ5IDExCisgICAgMHgxLjQ2MTZkYWY5Y2QzY2U0ZTkyMTg2ZTdkOGVjM2QzZWYwcC01LAorICAgIDB4MS4zYXA2CisgIH0sCisgIHsgLy8gRW50cnkgMTIKKyAgICAweDEuZGYwNGM1ZjlkZTM0MzIzNWY0ZjhiMTc5NzI4Njg3MmJwLTEsCisgICAgLTB4MS40NGIwOTZwMgorICB9LAorICB7IC8vIEVudHJ5IDEzCisgICAgLTB4MS5kZjA0YzVmOWRlMzQzMjM1ZjRmOGIxNzk3Mjg2ODcyYnAtMSwKKyAgICAweDEuNDRiMDk2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNAorICAgIC0weDEuZmVmZmJkNzMzNGM3MDQzYjkwYTZiYzJkNzZkZGE3YzhwLTEsCisgICAgLTB4MS44MjFjZjZwMAorICB9LAorICB7IC8vIEVudHJ5IDE1CisgICAgMHgxLmZlZmZiZDczMzRjNzA0M2I5MGE2YmMyZDc2ZGRhN2M4cC0xLAorICAgIDB4MS44MjFjZjZwMAorICB9LAorICB7IC8vIEVudHJ5IDE2CisgICAgMHgxLmViYWM1NmZmZTZmMjc4OTNjNjlmNjhkMWQ3YjRhNDQ4cC0zLAorICAgIC0weDEuODI5Yjg2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNworICAgIC0weDEuZWJhYzU2ZmZlNmYyNzg5M2M2OWY2OGQxZDdiNGE0NDhwLTMsCisgICAgMHgxLjgyOWI4NnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTgKKyAgICAweDEuYjcyNWNjZWY2NWIxMzkwOTEyYTBmNWVhYWIwZTcyMDJwLTYsCisgICAgLTB4MS44NTgwZmVwNworICB9LAorICB7IC8vIEVudHJ5IDE5CisgICAgLTB4MS5iNzI1Y2NlZjY1YjEzOTA5MTJhMGY1ZWFhYjBlNzIwMnAtNiwKKyAgICAweDEuODU4MGZlcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMAorICAgIDB4MS4wYjMzNjY1MDg5NTc1MjBkOWRjODhkN2MwOTMzN2UyNHAtMSwKKyAgICAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMQorICAgIC0weDEuMGIzMzY2NTA4OTU3NTIwZDlkYzg4ZDdjMDkzMzdlMjRwLTEsCisgICAgMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMgorICAgIDAuMGYsCisgICAgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgMjMKKyAgICAtMC4wZiwKKyAgICAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgMjQKKyAgICAtMHgxLmY4M2RlN2MwNjgzZDNiZDkwYTc2OWY2MmE0MWFjMWMzcC0xLAorICAgIDB4MS4wMDAwMDJwNTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNQorICAgIDB4MS5mODNkZTdjMDY4M2QzYmQ5MGE3NjlmNjJhNDFhYzFjM3AtMSwKKyAgICAtMHgxLjAwMDAwMnA1MgorICB9LAorICB7IC8vIEVudHJ5IDI2CisgICAgLTB4MS43ZGJkMTFmZmRlNGMyMGRiYjM3NjAxOWYxYzY1NGJiMHAtMiwKKyAgICAweDEuMDAwMDIycDYyCisgIH0sCisgIHsgLy8gRW50cnkgMjcKKyAgICAweDEuN2RiZDExZmZkZTRjMjBkYmIzNzYwMTlmMWM2NTRiYjBwLTIsCisgICAgLTB4MS4wMDAwMjJwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOAorICAgIDB4MS5lYWYwZDUwMDhmMmRiODk5ZTI0ODdkYTlkM2I5Y2RlN3AtMiwKKyAgICAweDEuMDAwMTUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjkKKyAgICAtMHgxLmVhZjBkNTAwOGYyZGI4OTllMjQ4N2RhOWQzYjljZGU3cC0yLAorICAgIC0weDEuMDAwMTUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzAKKyAgICAweDEuZmZhZThjZmVmYTgxM2RhODc0OThkZjk4OGMzZDhmNWVwLTUsCisgICAgMHgxLjAwMDFmMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDMxCisgICAgLTB4MS5mZmFlOGNmZWZhODEzZGE4NzQ5OGRmOTg4YzNkOGY1ZXAtNSwKKyAgICAtMHgxLjAwMDFmMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDMyCisgICAgMHgxLjg5YzdkNjA4N2E4NjFiYjZmZTc5NDE0OGMzNDI1MzQ4cC0xLAorICAgIDB4MS4wMDAzcDQwCisgIH0sCisgIHsgLy8gRW50cnkgMzMKKyAgICAtMHgxLjg5YzdkNjA4N2E4NjFiYjZmZTc5NDE0OGMzNDI1MzQ4cC0xLAorICAgIC0weDEuMDAwM3A0MAorICB9LAorICB7IC8vIEVudHJ5IDM0CisgICAgLTB4MS41OWUxZjUxOWVmOGI3MjJlYWUxMmE0MDRjYWQ5MzdlYnAtMSwKKyAgICAweDEuMDAwMzgwcDEyNgorICB9LAorICB7IC8vIEVudHJ5IDM1CisgICAgMHgxLjU5ZTFmNTE5ZWY4YjcyMmVhZTEyYTQwNGNhZDkzN2VicC0xLAorICAgIC0weDEuMDAwMzgwcDEyNgorICB9LAorICB7IC8vIEVudHJ5IDM2CisgICAgMHgxLjAwMDNmZmZmZmZmNTU0ZDU1MzU1NTJjY2NmNzc4Y2NkcC0yMSwKKyAgICAweDEuMDAwNHAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNworICAgIC0weDEuMDAwM2ZmZmZmZmY1NTRkNTUzNTU1MmNjY2Y3NzhjY2RwLTIxLAorICAgIC0weDEuMDAwNHAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOAorICAgIDB4MS4zODMwNjUwMjdlYzRmMjBhYjFjMDAyN2Q5OTFiODA1YXAtNiwKKyAgICAweDEuMDAwN2MwcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOQorICAgIC0weDEuMzgzMDY1MDI3ZWM0ZjIwYWIxYzAwMjdkOTkxYjgwNWFwLTYsCisgICAgLTB4MS4wMDA3YzBwOQorICB9LAorICB7IC8vIEVudHJ5IDQwCisgICAgMHgxLmViMDM5NzAwMmZkZmJhZTIyNmYwNjlkNmNkNTNjNDBmcC0yLAorICAgIDB4MS4wMDBjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDEKKyAgICAtMHgxLmViMDM5NzAwMmZkZmJhZTIyNmYwNjlkNmNkNTNjNDBmcC0yLAorICAgIC0weDEuMDAwY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDQyCisgICAgMHgxLmZlZGM4YjAwMDFmN2RhY2VlMDkwYzVlZGMzYmZhNTQ3cC00LAorICAgIDB4MS4wMDE5cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDMKKyAgICAtMHgxLmZlZGM4YjAwMDFmN2RhY2VlMDkwYzVlZGMzYmZhNTQ3cC00LAorICAgIC0weDEuMDAxOXAtMworICB9LAorICB7IC8vIEVudHJ5IDQ0CisgICAgMHgxLmFiNDcxYWYyNmZmZWEyM2Q3NjQzY2Y2MTRjODYwYjE4cC0xMCwKKyAgICAweDEuMDAzODIwcDY4CisgIH0sCisgIHsgLy8gRW50cnkgNDUKKyAgICAtMHgxLmFiNDcxYWYyNmZmZWEyM2Q3NjQzY2Y2MTRjODYwYjE4cC0xMCwKKyAgICAtMHgxLjAwMzgyMHA2OAorICB9LAorICB7IC8vIEVudHJ5IDQ2CisgICAgMHgxLmZmMjllZWZkZGUzMDQxZmM1Yzc1YTFmODIyYTU0MjFkcC00LAorICAgIDB4MS4wMDQwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDcKKyAgICAtMHgxLmZmMjllZWZkZGUzMDQxZmM1Yzc1YTFmODIyYTU0MjFkcC00LAorICAgIC0weDEuMDA0MHAtMworICB9LAorICB7IC8vIEVudHJ5IDQ4CisgICAgMHgxLjI5MDcwMTc1MjA2YjNmMTk4Yzg5M2UxOWI0YmQ2Y2I4cC0xMywKKyAgICAweDEuMDFmMHAxMDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OQorICAgIC0weDEuMjkwNzAxNzUyMDZiM2YxOThjODkzZTE5YjRiZDZjYjhwLTEzLAorICAgIC0weDEuMDFmMHAxMDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MAorICAgIC0weDEuZmZmZmZmZmZmZmZmYWFmYmU1M2RlNzQyMzE5NTQ3MDlwLTEsCisgICAgMHgxLjA0Y2NiY3AxOAorICB9LAorICB7IC8vIEVudHJ5IDUxCisgICAgMHgxLmZmZmZmZmZmZmZmZmFhZmJlNTNkZTc0MjMxOTU0NzA5cC0xLAorICAgIC0weDEuMDRjY2JjcDE4CisgIH0sCisgIHsgLy8gRW50cnkgNTIKKyAgICAweDEuZjRmNzJjYWQ1ZjVmYjE3ZWM2MDhlYzdhYzFjYmNhOGJwLTIsCisgICAgMHgxLjA1YmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MworICAgIC0weDEuZjRmNzJjYWQ1ZjVmYjE3ZWM2MDhlYzdhYzFjYmNhOGJwLTIsCisgICAgLTB4MS4wNWJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTQKKyAgICAweDEuZjg5NmM2Njg5ZDdlNzVlMzUxZWNjODU3MzEyNTRjZDNwLTEsCisgICAgMHgxLjA3YzFmOHAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NQorICAgIC0weDEuZjg5NmM2Njg5ZDdlNzVlMzUxZWNjODU3MzEyNTRjZDNwLTEsCisgICAgLTB4MS4wN2MxZjhwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgNTYKKyAgICAtMHgxLjI2NzU5M2Y0ZDU5YzdkZTYxNzAwOTBhNmEwODRjZGNhcC0xNCwKKyAgICAweDEuMDgwMTgwcDIzCisgIH0sCisgIHsgLy8gRW50cnkgNTcKKyAgICAweDEuMjY3NTkzZjRkNTljN2RlNjE3MDA5MGE2YTA4NGNkY2FwLTE0LAorICAgIC0weDEuMDgwMTgwcDIzCisgIH0sCisgIHsgLy8gRW50cnkgNTgKKyAgICAweDEuZmM4NjM3MmE4NDE1NDk0MTBjMTJkYmVjNmZlODBkYzVwLTIsCisgICAgMHgxLjBhMTRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OQorICAgIC0weDEuZmM4NjM3MmE4NDE1NDk0MTBjMTJkYmVjNmZlODBkYzVwLTIsCisgICAgLTB4MS4wYTE0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjAKKyAgICAweDEuYmNhMjhmMDAwNDMxNmJhZThkZjZhMjM1MmNjYTEzODJwLTEsCisgICAgMHgxLjBiNzcwYXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjEKKyAgICAtMHgxLmJjYTI4ZjAwMDQzMTZiYWU4ZGY2YTIzNTJjY2ExMzgycC0xLAorICAgIC0weDEuMGI3NzBhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MgorICAgIC0weDEuZmFkZTlhYmQ2NzUyNmQzNzE4OWRmMDA0YjUxZDlkNWFwLTEsCisgICAgMHgxLjBkZGNwOTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MworICAgIDB4MS5mYWRlOWFiZDY3NTI2ZDM3MTg5ZGYwMDRiNTFkOWQ1YXAtMSwKKyAgICAtMHgxLjBkZGNwOTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NAorICAgIDB4MS5iZjY4M2NmZmZmZWM2ZTg2NzJhNDlmMDhhYWU0OWM0NnAtMSwKKyAgICAweDEuMTAyNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjUKKyAgICAtMHgxLmJmNjgzY2ZmZmZlYzZlODY3MmE0OWYwOGFhZTQ5YzQ2cC0xLAorICAgIC0weDEuMTAyNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjYKKyAgICAtMHgxLmYxNDQwN2Y2NDQxZTkyZjQ4MGQyZTIyODU5ZDY3YTM5cC0xLAorICAgIDB4MS4xMDljYzRwNAorICB9LAorICB7IC8vIEVudHJ5IDY3CisgICAgMHgxLmYxNDQwN2Y2NDQxZTkyZjQ4MGQyZTIyODU5ZDY3YTM5cC0xLAorICAgIC0weDEuMTA5Y2M0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OAorICAgIC0weDEuZmY3ZTdiOTk4M2E3YzJlYmVjZmFiMWEwYjBhZjNjNGRwLTEsCisgICAgMHgxLjEzYmZiMnA0CisgIH0sCisgIHsgLy8gRW50cnkgNjkKKyAgICAweDEuZmY3ZTdiOTk4M2E3YzJlYmVjZmFiMWEwYjBhZjNjNGRwLTEsCisgICAgLTB4MS4xM2JmYjJwNAorICB9LAorICB7IC8vIEVudHJ5IDcwCisgICAgMHgxLmM0OTQyYjFlOWVjMTc1YWE3ZDNmZDc1ZjJlMzdlNTY2cC0xLAorICAgIDB4MS4xNTkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MQorICAgIC0weDEuYzQ5NDJiMWU5ZWMxNzVhYTdkM2ZkNzVmMmUzN2U1NjZwLTEsCisgICAgLTB4MS4xNTkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MgorICAgIDB4MS5mZmY4ZDM2ODY2ZmFhYWM4YzE3ZTEyNjc0OThiZDEzMnAtMSwKKyAgICAweDEuMThwODUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MworICAgIC0weDEuZmZmOGQzNjg2NmZhYWFjOGMxN2UxMjY3NDk4YmQxMzJwLTEsCisgICAgLTB4MS4xOHA4NQorICB9LAorICB7IC8vIEVudHJ5IDc0CisgICAgMHgxLmM3OGQ5NjI1NDZjZTUxYjg4MmM5MDU0ZWNjZDgyOWIxcC0xLAorICAgIDB4MS4xOGM4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NQorICAgIC0weDEuYzc4ZDk2MjU0NmNlNTFiODgyYzkwNTRlY2NkODI5YjFwLTEsCisgICAgLTB4MS4xOGM4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NgorICAgIDB4MS5jN2NiOTlhMTExZjI2NTI3YjgwNTczNDk2MmZiMTJhMHAtMSwKKyAgICAweDEuMTkwY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNzcKKyAgICAtMHgxLmM3Y2I5OWExMTFmMjY1MjdiODA1NzM0OTYyZmIxMmEwcC0xLAorICAgIC0weDEuMTkwY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNzgKKyAgICAtMHgxLjcwODk4MTAwMDU1OTQzODk4YWE3MDUzMDE3ZWNiYTY5cC0xLAorICAgIDB4MS4xZThmMTRwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OQorICAgIDB4MS43MDg5ODEwMDA1NTk0Mzg5OGFhNzA1MzAxN2VjYmE2OXAtMSwKKyAgICAtMHgxLjFlOGYxNHA2MgorICB9LAorICB7IC8vIEVudHJ5IDgwCisgICAgMHgxLmNkZWYxZTRlYjM3ZTlmMjI0OTY1NmMyN2Q2MmIxODk1cC0xLAorICAgIDB4MS4xZmY4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MQorICAgIC0weDEuY2RlZjFlNGViMzdlOWYyMjQ5NjU2YzI3ZDYyYjE4OTVwLTEsCisgICAgLTB4MS4xZmY4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MgorICAgIC0weDEuNWRmMGRkNjBmMTIyYmY3OWQxZGRjZjI5NWMzNGNiMGVwLTEsCisgICAgMHgxLjIyNDRhNnA1OQorICB9LAorICB7IC8vIEVudHJ5IDgzCisgICAgMHgxLjVkZjBkZDYwZjEyMmJmNzlkMWRkY2YyOTVjMzRjYjBlcC0xLAorICAgIC0weDEuMjI0NGE2cDU5CisgIH0sCisgIHsgLy8gRW50cnkgODQKKyAgICAtMHgxLmZiOGRkNzRmMWIwOTFhN2IwZjlmOWQ0NGRiODQ2NjFjcC0zLAorICAgIDB4MS4yODdhZTBwMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NQorICAgIDB4MS5mYjhkZDc0ZjFiMDkxYTdiMGY5ZjlkNDRkYjg0NjYxY3AtMywKKyAgICAtMHgxLjI4N2FlMHAxMworICB9LAorICB7IC8vIEVudHJ5IDg2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmNWMwZDI2MzBlZTBhMWZiNGU3YnAtMSwKKyAgICAweDEuMmQ5N2M4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NworICAgIDB4MS5mZmZmZmZmZmZmZmZmNWMwZDI2MzBlZTBhMWZiNGU3YnAtMSwKKyAgICAtMHgxLjJkOTdjOHAyCisgIH0sCisgIHsgLy8gRW50cnkgODgKKyAgICAtMHgxLjk5YmM1Yjk2MWIxYWMyOTZkYmUxOTgwZmQyYzg5MGEwcC0yNiwKKyAgICAweDEuMmQ5N2M4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OQorICAgIDB4MS45OWJjNWI5NjFiMWFjMjk2ZGJlMTk4MGZkMmM4OTBhMHAtMjYsCisgICAgLTB4MS4yZDk3YzhwMworICB9LAorICB7IC8vIEVudHJ5IDkwCisgICAgMHgxLmZmZDUxNThiODE5NDRmZjZiNDgzM2ZkZjFmYWE5MjgxcC0xLAorICAgIDB4MS4zMmNkYzZwMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MQorICAgIC0weDEuZmZkNTE1OGI4MTk0NGZmNmI0ODMzZmRmMWZhYTkyODFwLTEsCisgICAgLTB4MS4zMmNkYzZwMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MgorICAgIDB4MS5lMTkxZTc3ZjU4ZjQ3OWI1NjRlYzUzOGI2NzFmOThhZnAtMTQsCisgICAgMHgxLjM3ZWZkOHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MworICAgIC0weDEuZTE5MWU3N2Y1OGY0NzliNTY0ZWM1MzhiNjcxZjk4YWZwLTE0LAorICAgIC0weDEuMzdlZmQ4cDEwMAorICB9LAorICB7IC8vIEVudHJ5IDk0CisgICAgMHgxLmZmZmU5NzRkY2ViMTBkNDg3N2E3NWJjNzc4NzBmZmVicC0xLAorICAgIDB4MS4zOHAxMQorICB9LAorICB7IC8vIEVudHJ5IDk1CisgICAgLTB4MS5mZmZlOTc0ZGNlYjEwZDQ4NzdhNzViYzc3ODcwZmZlYnAtMSwKKyAgICAtMHgxLjM4cDExCisgIH0sCisgIHsgLy8gRW50cnkgOTYKKyAgICAtMHgxLmI2M2YyYzNmNTM3YjEwZWVjMmZiZjM0MGU0ODk4NjQ0cC0xOCwKKyAgICAweDEuM2Q3MmI4cDE1CisgIH0sCisgIHsgLy8gRW50cnkgOTcKKyAgICAweDEuYjYzZjJjM2Y1MzdiMTBlZWMyZmJmMzQwZTQ4OTg2NDRwLTE4LAorICAgIC0weDEuM2Q3MmI4cDE1CisgIH0sCisgIHsgLy8gRW50cnkgOTgKKyAgICAtMHgxLmUwMjA4Y2ZmMTdmOTE4NjIxODk0NWFmOTI1NmQ3MzZjcC0xLAorICAgIDB4MS40NDRiMjBwNworICB9LAorICB7IC8vIEVudHJ5IDk5CisgICAgMHgxLmUwMjA4Y2ZmMTdmOTE4NjIxODk0NWFmOTI1NmQ3MzZjcC0xLAorICAgIC0weDEuNDQ0YjIwcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAKKyAgICAweDEuZmZmZmY5MDAyY2Y4N2RhZGU2ZjYyZWI3MDlkYzJhYTdwLTEsCisgICAgMHgxLjQ2YjcxZXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTAxCisgICAgLTB4MS5mZmZmZjkwMDJjZjg3ZGFkZTZmNjJlYjcwOWRjMmFhN3AtMSwKKyAgICAtMHgxLjQ2YjcxZXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTAyCisgICAgMHgxLmM4NzU1ODFhNzYyMjExZGQ1Y2FhZjlhYmRlNWNmNjU2cC0yMSwKKyAgICAweDEuNGQwMjQycDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMKKyAgICAtMHgxLmM4NzU1ODFhNzYyMjExZGQ1Y2FhZjlhYmRlNWNmNjU2cC0yMSwKKyAgICAtMHgxLjRkMDI0MnA3CisgIH0sCisgIHsgLy8gRW50cnkgMTA0CisgICAgLTB4MS42YTZmNzkwMDAwNTNhMzg0MjU2NmYxZTAxOGQ2MzU5ZnAtMSwKKyAgICAweDEuNTExZThlcDI4CisgIH0sCisgIHsgLy8gRW50cnkgMTA1CisgICAgMHgxLjZhNmY3OTAwMDA1M2EzODQyNTY2ZjFlMDE4ZDYzNTlmcC0xLAorICAgIC0weDEuNTExZThlcDI4CisgIH0sCisgIHsgLy8gRW50cnkgMTA2CisgICAgMHgxLmZmZmU5ZmZhNmI1NjlkZDhjNzIwZDY4ZTgwYmQ5YTYzcC0xLAorICAgIDB4MS41MzU0ZDBwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA3CisgICAgLTB4MS5mZmZlOWZmYTZiNTY5ZGQ4YzcyMGQ2OGU4MGJkOWE2M3AtMSwKKyAgICAtMHgxLjUzNTRkMHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgKKyAgICAweDEuM2I0ZDU4ZmZmZmYyOTEyNjQ2MGYyNThlYzQ0MjNlOWFwLTEsCisgICAgMHgxLjUzYWQ1Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDEwOQorICAgIC0weDEuM2I0ZDU4ZmZmZmYyOTEyNjQ2MGYyNThlYzQ0MjNlOWFwLTEsCisgICAgLTB4MS41M2FkNWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAKKyAgICAtMHgxLmZmZmViNzYyZTkzZWFkNWFjNzBmODUwNjRmYzc5Y2ZmcC0xLAorICAgIDB4MS42MHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTExCisgICAgMHgxLmZmZmViNzYyZTkzZWFkNWFjNzBmODUwNjRmYzc5Y2ZmcC0xLAorICAgIC0weDEuNjBwMworICB9LAorICB7IC8vIEVudHJ5IDExMgorICAgIDB4MS4xNzcyMzc3ZmZlNWIxZjQzNmMwMTQ5ZTMyODQ0NmY3NHAtMjAsCisgICAgMHgxLjZjNmNiY3A2CisgIH0sCisgIHsgLy8gRW50cnkgMTEzCisgICAgLTB4MS4xNzcyMzc3ZmZlNWIxZjQzNmMwMTQ5ZTMyODQ0NmY3NHAtMjAsCisgICAgLTB4MS42YzZjYmNwNgorICB9LAorICB7IC8vIEVudHJ5IDExNAorICAgIDB4MS43N2ZmZmRmZmZmZmZmNzhkMDU3N2Q5NTUyNjYzZWEzZXAtMjYsCisgICAgMHgxLjc3ZmZmZXAtMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUKKyAgICAtMHgxLjc3ZmZmZGZmZmZmZmY3OGQwNTc3ZDk1NTI2NjNlYTNlcC0yNiwKKyAgICAtMHgxLjc3ZmZmZXAtMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTYKKyAgICAtMHgxLmZmMDQ5NzkzODU5NDZkMDU2OGMxNTNiZjllMTI1ZmNjcC0xLAorICAgIDB4MS43N2ZmZmVwNAorICB9LAorICB7IC8vIEVudHJ5IDExNworICAgIDB4MS5mZjA0OTc5Mzg1OTQ2ZDA1NjhjMTUzYmY5ZTEyNWZjY3AtMSwKKyAgICAtMHgxLjc3ZmZmZXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTE4CisgICAgMHgxLmZlYjdhOTZhNTc3ZjcxNWZhN2FkODc4ODI5NGMwNDVicC0xLAorICAgIDB4MS43ZmZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDExOQorICAgIC0weDEuZmViN2E5NmE1NzdmNzE1ZmE3YWQ4Nzg4Mjk0YzA0NWJwLTEsCisgICAgLTB4MS43ZmZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDEyMAorICAgIDB4MS5mZWI3ZWI1NDY1MzUwOTYxN2ZhZjMyNjgzNDQ0MzdmY3AtMSwKKyAgICAweDEuODAwMWQwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjEKKyAgICAtMHgxLmZlYjdlYjU0NjUzNTA5NjE3ZmFmMzI2ODM0NDQzN2ZjcC0xLAorICAgIC0weDEuODAwMWQwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjIKKyAgICAweDEuZmY2NTM1OTk4ZWEwMDRkNDg3NjM1OTdiNmRmOWNkNjVwLTEsCisgICAgMHgxLjgwN2ZmZXAxMworICB9LAorICB7IC8vIEVudHJ5IDEyMworICAgIC0weDEuZmY2NTM1OTk4ZWEwMDRkNDg3NjM1OTdiNmRmOWNkNjVwLTEsCisgICAgLTB4MS44MDdmZmVwMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQKKyAgICAweDEuZmY3NmVkOWExOTJlOWEyMTI2YmNmYzBmMzA2MjQwZDRwLTEsCisgICAgMHgxLjg2NmE0MnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTI1CisgICAgLTB4MS5mZjc2ZWQ5YTE5MmU5YTIxMjZiY2ZjMGYzMDYyNDBkNHAtMSwKKyAgICAtMHgxLjg2NmE0MnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTI2CisgICAgMHgxLmFjZTg0NGYxZWI2YzMwNzcyNzc5MjlmZjRhZGUzZjQxcC01LAorICAgIDB4MS44ODY0cDM1CisgIH0sCisgIHsgLy8gRW50cnkgMTI3CisgICAgLTB4MS5hY2U4NDRmMWViNmMzMDc3Mjc3OTI5ZmY0YWRlM2Y0MXAtNSwKKyAgICAtMHgxLjg4NjRwMzUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgKKyAgICAweDEuZTBkMTA4ZjE5NmZkM2NiY2I3YzJjNzZhZWU3MzgyMDVwLTUsCisgICAgMHgxLjhhOWI1NnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTI5CisgICAgLTB4MS5lMGQxMDhmMTk2ZmQzY2JjYjdjMmM3NmFlZTczODIwNXAtNSwKKyAgICAtMHgxLjhhOWI1NnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTMwCisgICAgLTB4MS42YTA5YWYwMDA2ZmUwYjQ3YzgxZDg2OTVjMDE3YThkZnAtMSwKKyAgICAweDEuOGU5NmVlcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzEKKyAgICAweDEuNmEwOWFmMDAwNmZlMGI0N2M4MWQ4Njk1YzAxN2E4ZGZwLTEsCisgICAgLTB4MS44ZTk2ZWVwOQorICB9LAorICB7IC8vIEVudHJ5IDEzMgorICAgIC0weDEuZGQ1OWRjZWVjZjNmYmQwMTVlOWUyOWIzN2FhZjUxMWFwLTksCisgICAgMHgxLjkxZTQwYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTMzCisgICAgMHgxLmRkNTlkY2VlY2YzZmJkMDE1ZTllMjliMzdhYWY1MTFhcC05LAorICAgIC0weDEuOTFlNDBhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQKKyAgICAtMHgxLmZiNzNmMTE4N2U1MDUzYmFjYjc1MmI4OWM2YTNkZTU3cC05LAorICAgIDB4MS45MWZmZmVwMworICB9LAorICB7IC8vIEVudHJ5IDEzNQorICAgIDB4MS5mYjczZjExODdlNTA1M2JhY2I3NTJiODljNmEzZGU1N3AtOSwKKyAgICAtMHgxLjkxZmZmZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTM2CisgICAgLTB4MS43NzdhNWNmNzJjZWM1ZmQ2MTg5NmNiNGY0MGQxZGU3OXAtMjQsCisgICAgMHgxLjkyMWZiNnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTM3CisgICAgMHgxLjc3N2E1Y2Y3MmNlYzVmZDYxODk2Y2I0ZjQwZDFkZTc5cC0yNCwKKyAgICAtMHgxLjkyMWZiNnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTM4CisgICAgLTB4MS5mZmZmZmY3OWRiOTE3MjY1ZTY3NTU3NGI4ZDgzZmE2ZXAtMSwKKyAgICAweDEuOTRmZDdjcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDEzOQorICAgIDB4MS5mZmZmZmY3OWRiOTE3MjY1ZTY3NTU3NGI4ZDgzZmE2ZXAtMSwKKyAgICAtMHgxLjk0ZmQ3Y3AxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDAKKyAgICAweDEuZmZmZmZmZmZmZmQ3ZTgzNjc4YTM4MzI5YzFlMDkzYjVwLTEsCisgICAgMHgxLjk4NjgzNHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTQxCisgICAgLTB4MS5mZmZmZmZmZmZmZDdlODM2NzhhMzgzMjljMWUwOTNiNXAtMSwKKyAgICAtMHgxLjk4NjgzNHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTQyCisgICAgMHgxLjE2YWUyOTE0NGQzYWViMGVmNzQxYzNlMmFiYTM0MDc4cC0yNCwKKyAgICAweDEuOWE0OGRlcDE3CisgIH0sCisgIHsgLy8gRW50cnkgMTQzCisgICAgLTB4MS4xNmFlMjkxNDRkM2FlYjBlZjc0MWMzZTJhYmEzNDA3OHAtMjQsCisgICAgLTB4MS45YTQ4ZGVwMTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDQKKyAgICAweDEuZmY3YWQzOThmZDU4OTUyOGJiMDdkYjFlMGJkZDQwZjVwLTEsCisgICAgMHgxLjlkYWEzOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQ1CisgICAgLTB4MS5mZjdhZDM5OGZkNTg5NTI4YmIwN2RiMWUwYmRkNDBmNXAtMSwKKyAgICAtMHgxLjlkYWEzOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQ2CisgICAgMHgxLjlkZjVmMTAwMDAwMDJmNGI3NDIxZGZlOWU5NTViNjBkcC00LAorICAgIDB4MS45ZWFiMmVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDcKKyAgICAtMHgxLjlkZjVmMTAwMDAwMDJmNGI3NDIxZGZlOWU5NTViNjBkcC00LAorICAgIC0weDEuOWVhYjJlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTQ4CisgICAgMHgxLjc2ZGNmNzAwMDA1M2M0MjhlMzBlZjk5ZDljZjkxYWNjcC0xLAorICAgIDB4MS5hNDk5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQ5CisgICAgLTB4MS43NmRjZjcwMDAwNTNjNDI4ZTMwZWY5OWQ5Y2Y5MWFjY3AtMSwKKyAgICAtMHgxLmE0OTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTAKKyAgICAweDEuYTlkNDUxMDAwMGEyYTgyYzM5MWE5YjM2MTg2ZWFkNjVwLTUsCisgICAgMHgxLmFhMDU3OHAtNQorICB9LAorICB7IC8vIEVudHJ5IDE1MQorICAgIC0weDEuYTlkNDUxMDAwMGEyYTgyYzM5MWE5YjM2MTg2ZWFkNjVwLTUsCisgICAgLTB4MS5hYTA1NzhwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTIKKyAgICAweDEuNmEwOTdkY2M4YjEzNTY3MTJmYzIwZjgyYzRmODdlNGRwLTEsCisgICAgMHgxLmI0YWU3MHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTUzCisgICAgLTB4MS42YTA5N2RjYzhiMTM1NjcxMmZjMjBmODJjNGY4N2U0ZHAtMSwKKyAgICAtMHgxLmI0YWU3MHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTU0CisgICAgMHgxLjg0OTkyNmZmZmZlYjk1ODYwMjYyYTk5NzcwYThjOWMzcC0xLAorICAgIDB4MS5iOTM2ZGFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTUKKyAgICAtMHgxLjg0OTkyNmZmZmZlYjk1ODYwMjYyYTk5NzcwYThjOWMzcC0xLAorICAgIC0weDEuYjkzNmRhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTU2CisgICAgLTB4MS5kYWM0MGVmMWUwNDAzMTVmMDc1MTlhOTljMjAzNGZmZnAtNSwKKyAgICAweDEuYmEyNzg0cDgyCisgIH0sCisgIHsgLy8gRW50cnkgMTU3CisgICAgMHgxLmRhYzQwZWYxZTA0MDMxNWYwNzUxOWE5OWMyMDM0ZmZmcC01LAorICAgIC0weDEuYmEyNzg0cDgyCisgIH0sCisgIHsgLy8gRW50cnkgMTU4CisgICAgMHgxLjgxMDc0YjAzNDZmMDczOTAzOTViNGVlMmI1MGIzZjk0cC0xNCwKKyAgICAweDEuYmRiNDRhcDEwNworICB9LAorICB7IC8vIEVudHJ5IDE1OQorICAgIC0weDEuODEwNzRiMDM0NmYwNzM5MDM5NWI0ZWUyYjUwYjNmOTRwLTE0LAorICAgIC0weDEuYmRiNDRhcDEwNworICB9LAorICB7IC8vIEVudHJ5IDE2MAorICAgIDB4MS4yMzVkZWJiNzI3Yjk1ZGFhZWMxODNiZmE0ZTcyOGJlMXAtOSwKKyAgICAweDEuYmRiZWZlcDExOQorICB9LAorICB7IC8vIEVudHJ5IDE2MQorICAgIC0weDEuMjM1ZGViYjcyN2I5NWRhYWVjMTgzYmZhNGU3MjhiZTFwLTksCisgICAgLTB4MS5iZGJlZmVwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgMTYyCisgICAgLTB4MS45OTY2M2RhOTRkYjUyOTA3MzBiMDI5NTEzMzcwZTg2M3AtMjMsCisgICAgMHgxLmJlZWVlZXA4MAorICB9LAorICB7IC8vIEVudHJ5IDE2MworICAgIDB4MS45OTY2M2RhOTRkYjUyOTA3MzBiMDI5NTEzMzcwZTg2M3AtMjMsCisgICAgLTB4MS5iZWVlZWVwODAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjQKKyAgICAtMHgxLjYyZmFhMGZmZGM1NWE0YzU0ZjEyMjlmYzAzMDJiZDVmcC0yLAorICAgIDB4MS5iZjZmZDBwMQorICB9LAorICB7IC8vIEVudHJ5IDE2NQorICAgIDB4MS42MmZhYTBmZmRjNTVhNGM1NGYxMjI5ZmMwMzAyYmQ1ZnAtMiwKKyAgICAtMHgxLmJmNmZkMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTY2CisgICAgLTB4MS5jNmQ0NDRkZTZiOTBjN2I4YjQzNDAyZWY3NDlhNGMzZHAtNSwKKyAgICAweDEuYmZmZmZlcDQ1CisgIH0sCisgIHsgLy8gRW50cnkgMTY3CisgICAgMHgxLmM2ZDQ0NGRlNmI5MGM3YjhiNDM0MDJlZjc0OWE0YzNkcC01LAorICAgIC0weDEuYmZmZmZlcDQ1CisgIH0sCisgIHsgLy8gRW50cnkgMTY4CisgICAgMHgxLmZmZmZmZmZmZmZmZmEzYzc2NTdiODVlNWI0NGJiZDQ0cC0xLAorICAgIDB4MS5jNDYzYWNwMworICB9LAorICB7IC8vIEVudHJ5IDE2OQorICAgIC0weDEuZmZmZmZmZmZmZmZmYTNjNzY1N2I4NWU1YjQ0YmJkNDRwLTEsCisgICAgLTB4MS5jNDYzYWNwMworICB9LAorICB7IC8vIEVudHJ5IDE3MAorICAgIDB4MS45MTM2NDhmZmZmOWUyMzc4N2Y1ZGRiNzVkYzU1ZWVjOHAtMSwKKyAgICAweDEuY2QwYTBjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTcxCisgICAgLTB4MS45MTM2NDhmZmZmOWUyMzc4N2Y1ZGRiNzVkYzU1ZWVjOHAtMSwKKyAgICAtMHgxLmNkMGEwY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDE3MgorICAgIC0weDEuYTFkNDdjZmQyODI1ZjFjM2UyODM1ZTk0M2I5NjY5ZWZwLTUsCisgICAgMHgxLmQ0MTgxOHAxMgorICB9LAorICB7IC8vIEVudHJ5IDE3MworICAgIDB4MS5hMWQ0N2NmZDI4MjVmMWMzZTI4MzVlOTQzYjk2NjllZnAtNSwKKyAgICAtMHgxLmQ0MTgxOHAxMgorICB9LAorICB7IC8vIEVudHJ5IDE3NAorICAgIDB4MS42YTIyZGIwMDAwMzZhOTU5MmRiNzIyZTJkOWJlNDg2OXAtMSwKKyAgICAweDEuZTYyOTQ0cDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzUKKyAgICAtMHgxLjZhMjJkYjAwMDAzNmE5NTkyZGI3MjJlMmQ5YmU0ODY5cC0xLAorICAgIC0weDEuZTYyOTQ0cDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzYKKyAgICAweDEuZDRkZThhZmZmZmZmZDk2ZjgzYmE0NDJmZGYyZjcxMDFwLTIsCisgICAgMHgxLmU3MDYxZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDE3NworICAgIC0weDEuZDRkZThhZmZmZmZmZDk2ZjgzYmE0NDJmZGYyZjcxMDFwLTIsCisgICAgLTB4MS5lNzA2MWVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzgKKyAgICAtMHgxLmUzY2UwNGYxYjk0ZTFkODJmMDAwMWNiOTlmZWQ5Mjc1cC01LAorICAgIDB4MS5lN2ZmZmVwOTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzkKKyAgICAweDEuZTNjZTA0ZjFiOTRlMWQ4MmYwMDAxY2I5OWZlZDkyNzVwLTUsCisgICAgLTB4MS5lN2ZmZmVwOTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODAKKyAgICAweDEuZTk3MzYyZmZmZjVkNDZlMWU5OGM4YThjOTQ0NzhhNDRwLTUsCisgICAgMHgxLmU5YmUwZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDE4MQorICAgIC0weDEuZTk3MzYyZmZmZjVkNDZlMWU5OGM4YThjOTQ0NzhhNDRwLTUsCisgICAgLTB4MS5lOWJlMGVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODIKKyAgICAtMHgxLjU3OTc1Y2ZlZmQ3ZTcwNWYzZWIwM2E5ZThlNDhhMThjcC0xLAorICAgIDB4MS5lYjFkYmVwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODMKKyAgICAweDEuNTc5NzVjZmVmZDdlNzA1ZjNlYjAzYTllOGU0OGExOGNwLTEsCisgICAgLTB4MS5lYjFkYmVwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODQKKyAgICAtMHgxLjZhMTAxMmU0YjY5YjA4NmMzZGMwNDI3YWJhODBiYzk2cC0xLAorICAgIDB4MS5lYjFlOGFwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODUKKyAgICAweDEuNmExMDEyZTRiNjliMDg2YzNkYzA0MjdhYmE4MGJjOTZwLTEsCisgICAgLTB4MS5lYjFlOGFwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODYKKyAgICAtMHgxLjlmNDJlNGY0Njc2OTZhZDM2YTcwYWM4YjcwZTBjZDMycC0xLAorICAgIDB4MS5lZmZjOGFwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODcKKyAgICAweDEuOWY0MmU0ZjQ2NzY5NmFkMzZhNzBhYzhiNzBlMGNkMzJwLTEsCisgICAgLTB4MS5lZmZjOGFwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODgKKyAgICAweDEuY2JhZGI4ZWY4ZjNlMzU4ZDJiOGJlNDkzYzExYjU3YjFwLTYsCisgICAgMHgxLmY1YzFjNHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTg5CisgICAgLTB4MS5jYmFkYjhlZjhmM2UzNThkMmI4YmU0OTNjMTFiNTdiMXAtNiwKKyAgICAtMHgxLmY1YzFjNHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTkwCisgICAgMHgxLjVhZWUyY2ZmZjA4N2U1OWRmY2Q4NTZjYmZlNDU0NGRjcC0yLAorICAgIDB4MS5mN2ZmZmVwMTExCisgIH0sCisgIHsgLy8gRW50cnkgMTkxCisgICAgLTB4MS41YWVlMmNmZmYwODdlNTlkZmNkODU2Y2JmZTQ1NDRkY3AtMiwKKyAgICAtMHgxLmY3ZmZmZXAxMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTIKKyAgICAweDEuMjZkYjdkMDBiYjA2NzQzZmVlNTgxYTg4OGUyMzc4ZjhwLTEsCisgICAgMHgxLmY5MjUxOHAyNAorICB9LAorICB7IC8vIEVudHJ5IDE5MworICAgIC0weDEuMjZkYjdkMDBiYjA2NzQzZmVlNTgxYTg4OGUyMzc4ZjhwLTEsCisgICAgLTB4MS5mOTI1MThwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmViY2NmNzhhNDMyYTY3ODU4YmJwLTEsCisgICAgMHgxLmY5Y2JlMnA3CisgIH0sCisgIHsgLy8gRW50cnkgMTk1CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZWJjY2Y3OGE0MzJhNjc4NThiYnAtMSwKKyAgICAtMHgxLmY5Y2JlMnA3CisgIH0sCisgIHsgLy8gRW50cnkgMTk2CisgICAgLTB4MS4xZmEzYmI5YTA3ZTc3ZmQ2NjdmNDkzNjIyYzkwMjlmZnAtMjcsCisgICAgMHgxLmY5Y2JlMnA4CisgIH0sCisgIHsgLy8gRW50cnkgMTk3CisgICAgMHgxLjFmYTNiYjlhMDdlNzdmZDY2N2Y0OTM2MjJjOTAyOWZmcC0yNywKKyAgICAtMHgxLmY5Y2JlMnA4CisgIH0sCisgIHsgLy8gRW50cnkgMTk4CisgICAgMHgxLjllYzI5YWYxZTE1ZGQ2N2YxN2UzMjA0N2Q5ZmY4ZGI3cC0xLAorICAgIDB4MS5mYWQxNjBwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTkKKyAgICAtMHgxLjllYzI5YWYxZTE1ZGQ2N2YxN2UzMjA0N2Q5ZmY4ZGI3cC0xLAorICAgIC0weDEuZmFkMTYwcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMjAwCisgICAgMHgxLmZiYzI3ODBmNGJmOGJjMjRkM2ZjY2MxN2Y5ZTc3ZjMycC0xLAorICAgIDB4MS5mZWU1YmFwMgorICB9LAorICB7IC8vIEVudHJ5IDIwMQorICAgIC0weDEuZmJjMjc4MGY0YmY4YmMyNGQzZmNjYzE3ZjllNzdmMzJwLTEsCisgICAgLTB4MS5mZWU1YmFwMgorICB9LAorICB7IC8vIEVudHJ5IDIwMgorICAgIDB4MS5hOGQ3YzEwMDA1YWRhOGY3ZDQ5MTJiZjYwM2EzMTVmZXAtMSwKKyAgICAweDEuZmYwY2FlcDEwCisgIH0sCisgIHsgLy8gRW50cnkgMjAzCisgICAgLTB4MS5hOGQ3YzEwMDA1YWRhOGY3ZDQ5MTJiZjYwM2EzMTVmZXAtMSwKKyAgICAtMHgxLmZmMGNhZXAxMAorICB9LAorICB7IC8vIEVudHJ5IDIwNAorICAgIC0weDEuNTZiMDJkMDAwNDVkYTE0NmU4NTVkMzc3MGM5NjQ2ZmFwLTEsCisgICAgMHgxLmZmODQwNnA4MAorICB9LAorICB7IC8vIEVudHJ5IDIwNQorICAgIDB4MS41NmIwMmQwMDA0NWRhMTQ2ZTg1NWQzNzcwYzk2NDZmYXAtMSwKKyAgICAtMHgxLmZmODQwNnA4MAorICB9LAorICB7IC8vIEVudHJ5IDIwNgorICAgIDB4MS5jMDI3NDlmZjRjNGM4ZmNiYjQ3MTYxMDg4NGQ4ZTBiZHAtMywKKyAgICAweDEuZmY5ZmZlcDQwCisgIH0sCisgIHsgLy8gRW50cnkgMjA3CisgICAgLTB4MS5jMDI3NDlmZjRjNGM4ZmNiYjQ3MTYxMDg4NGQ4ZTBiZHAtMywKKyAgICAtMHgxLmZmOWZmZXA0MAorICB9LAorICB7IC8vIEVudHJ5IDIwOAorICAgIC0weDEuMzg4ZTcxMDA1ODM0MmFhNWI2OWFmZTNlMjA5MGE0NTdwLTEsCisgICAgMHgxLmZmYmQ1OHAyNAorICB9LAorICB7IC8vIEVudHJ5IDIwOQorICAgIDB4MS4zODhlNzEwMDU4MzQyYWE1YjY5YWZlM2UyMDkwYTQ1N3AtMSwKKyAgICAtMHgxLmZmYmQ1OHAyNAorICB9LAorICB7IC8vIEVudHJ5IDIxMAorICAgIDB4MS45ZTgwNWFlZjMyODJkNGNlZDQwMjcyNzAyZjE3NGY1M3AtNiwKKyAgICAweDEuZmZkZDdlcDcyCisgIH0sCisgIHsgLy8gRW50cnkgMjExCisgICAgLTB4MS45ZTgwNWFlZjMyODJkNGNlZDQwMjcyNzAyZjE3NGY1M3AtNiwKKyAgICAtMHgxLmZmZGQ3ZXA3MgorICB9LAorICB7IC8vIEVudHJ5IDIxMgorICAgIC0weDEuZmIzYWVmMDE2YjhjZTY2MzcwYWI2MTk3NGU4ZWUwYjJwLTYsCisgICAgMHgxLmZmZGZmZXA5MQorICB9LAorICB7IC8vIEVudHJ5IDIxMworICAgIDB4MS5mYjNhZWYwMTZiOGNlNjYzNzBhYjYxOTc0ZThlZTBiMnAtNiwKKyAgICAtMHgxLmZmZGZmZXA5MQorICB9LAorICB7IC8vIEVudHJ5IDIxNAorICAgIC0weDEuZTQzMTQ4ZGE1M2Y0MjIzNTZlZGQzYmRiYWVmM2IyZmFwLTMsCisgICAgMHgxLmZmZjc3ZXAyMworICB9LAorICB7IC8vIEVudHJ5IDIxNQorICAgIDB4MS5lNDMxNDhkYTUzZjQyMjM1NmVkZDNiZGJhZWYzYjJmYXAtMywKKyAgICAtMHgxLmZmZjc3ZXAyMworICB9LAorICB7IC8vIEVudHJ5IDIxNgorICAgIDB4MS5kNmUxODY0NzY0ZDI0YjRkZTE4Y2I0YzE5MDNhNzk1N3AtMSwKKyAgICAweDEuZmZmZTNlcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTcKKyAgICAtMHgxLmQ2ZTE4NjQ3NjRkMjRiNGRlMThjYjRjMTkwM2E3OTU3cC0xLAorICAgIC0weDEuZmZmZTNlcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTgKKyAgICAtMHgxLmZmZmY0OWM1MmY1ODVlNjcyZDcxODU0NDhkNDZlOTc3cC0xLAorICAgIDB4MS5mZmZlM2VwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTkKKyAgICAweDEuZmZmZjQ5YzUyZjU4NWU2NzJkNzE4NTQ0OGQ0NmU5NzdwLTEsCisgICAgLTB4MS5mZmZlM2VwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjAKKyAgICAweDEuYWZjNmE5OWNiYWRlODNiNmJlOTJiMmNhNDUxNjc5ODhwLTUsCisgICAgMHgxLmZmZmUzZXA0NQorICB9LAorICB7IC8vIEVudHJ5IDIyMQorICAgIC0weDEuYWZjNmE5OWNiYWRlODNiNmJlOTJiMmNhNDUxNjc5ODhwLTUsCisgICAgLTB4MS5mZmZlM2VwNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjIKKyAgICAtMHgxLjUzYTI5ZTU0YjRiMTQyODMwZGM3OTZjOWVkNWZjNTlicC05LAorICAgIDB4MS5mZmZlN2VwMTAzCisgIH0sCisgIHsgLy8gRW50cnkgMjIzCisgICAgMHgxLjUzYTI5ZTU0YjRiMTQyODMwZGM3OTZjOWVkNWZjNTlicC05LAorICAgIC0weDEuZmZmZTdlcDEwMworICB9LAorICB7IC8vIEVudHJ5IDIyNAorICAgIC0weDEuNDdlODlmZDUwNDdjNGM5NGI1YzBmNjFlMzc1ZjI4NDlwLTExLAorICAgIDB4MS5mZmZlN2VwMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMjI1CisgICAgMHgxLjQ3ZTg5ZmQ1MDQ3YzRjOTRiNWMwZjYxZTM3NWYyODQ5cC0xMSwKKyAgICAtMHgxLmZmZmU3ZXAxMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjYKKyAgICAweDEuYTQyNTZjOTBjMzc0MTBjZTk1N2MwYjI1MDE5Mzc2MThwLTgsCisgICAgMHgxLmZmZmY4ZXA0MAorICB9LAorICB7IC8vIEVudHJ5IDIyNworICAgIC0weDEuYTQyNTZjOTBjMzc0MTBjZTk1N2MwYjI1MDE5Mzc2MThwLTgsCisgICAgLTB4MS5mZmZmOGVwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjgKKyAgICAtMHgxLmQyYmQ4NGY1MDE4ZjQwYzk0YzdmNmU0NTUyZWY4ZTkxcC0zLAorICAgIDB4MS5mZmZmYTRwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjkKKyAgICAweDEuZDJiZDg0ZjUwMThmNDBjOTRjN2Y2ZTQ1NTJlZjhlOTFwLTMsCisgICAgLTB4MS5mZmZmYTRwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzAKKyAgICAweDEuZmZhYThjZmZkMzgxZWJlN2IyZDZhM2U2OWJkYTM4ODdwLTUsCisgICAgMHgxLmZmZmZkZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDIzMQorICAgIC0weDEuZmZhYThjZmZkMzgxZWJlN2IyZDZhM2U2OWJkYTM4ODdwLTUsCisgICAgLTB4MS5mZmZmZGVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzIKKyAgICAweDEuZmE4ZDNjYTIzYmUyYTg0ZDM3ZjBjMDRlOTdiYWI1ZTVwLTEsCisgICAgMHgxLmZmZmZmMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMjMzCisgICAgLTB4MS5mYThkM2NhMjNiZTJhODRkMzdmMGMwNGU5N2JhYjVlNXAtMSwKKyAgICAtMHgxLmZmZmZmMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMjM0CisgICAgLTB4MS5mZjk3OGVjZDMyMGFkMmQ3MGMyMDA4MjRlNDAxMDg0M3AtMSwKKyAgICAweDEuZmZmZmYwcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzUKKyAgICAweDEuZmY5NzhlY2QzMjBhZDJkNzBjMjAwODI0ZTQwMTA4NDNwLTEsCisgICAgLTB4MS5mZmZmZjBwNworICB9LAorICB7IC8vIEVudHJ5IDIzNgorICAgIDB4MS5kMThmNzZmZmM2ZTRiYTBhMzEzNGU1YmUyMWI1YmM4ZnAtMSwKKyAgICAweDEuZmZmZmY2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzcKKyAgICAtMHgxLmQxOGY3NmZmYzZlNGJhMGEzMTM0ZTViZTIxYjViYzhmcC0xLAorICAgIC0weDEuZmZmZmY2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzgKKyAgICAweDEuZWFlZTgyMDBiOGRiYTUxMzhmOWFkYTQyYTIyYWIzMTlwLTIsCisgICAgMHgxLmZmZmZmYXAtMgorICB9LAorICB7IC8vIEVudHJ5IDIzOQorICAgIC0weDEuZWFlZTgyMDBiOGRiYTUxMzhmOWFkYTQyYTIyYWIzMTlwLTIsCisgICAgLTB4MS5mZmZmZmFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDAKKyAgICAtMHgxLjBiMzM2NjUwODk1NzUyMGQ5ZGM4OGQ3YzA5MzM3ZTI0cC0xLAorICAgIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMjQxCisgICAgMHgxLjBiMzM2NjUwODk1NzUyMGQ5ZGM4OGQ3YzA5MzM3ZTI0cC0xLAorICAgIC0weDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDI0MgorICAgIC0wLjBmLAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDMKKyAgICAwLjBmLAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDI0NAorICAgIDAuMCwKKyAgICAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDUKKyAgICAwLjBmLAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDI0NgorICAgIC0wLjBmLAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDcKKyAgICAtMHgxLjAwMDAwMWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjYsCisgICAgLTB4MS4wMDAwMDJwLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI0OAorICAgIDB4MS4wMDAwMDFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI2LAorICAgIDB4MS4wMDAwMDJwLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI0OQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAtMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMjUwCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMjUxCisgICAgLTB4MS5mZmZmZmJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI3LAorICAgIC0weDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTIKKyAgICAweDEuZmZmZmZiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAweDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTMKKyAgICAweDEuZmZmZmZiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAweDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTQKKyAgICAtMHgxLmZmZmZmYmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgLTB4MS5mZmZmZmNwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDI1NQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI3LAorICAgIDB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI1NgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAtMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMjU3CisgICAgMHgxLjAwMDAwMWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjYsCisgICAgMHgxLjAwMDAwMnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMjU4CisgICAgLTB4MS4wMDAwMDFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI2LAorICAgIC0weDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTkKKyAgICAweDEuOTk5OTk5ZDQ0ZjMwNThjNzg5MDE0YjdkMGUyMmZlYzNwLTEzLAorICAgIDB4MS45OTk5OWFwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMjYwCisgICAgLTB4MS45OTk5OTlkNDRmMzA1OGM3ODkwMTRiN2QwZTIyZmVjM3AtMTMsCisgICAgLTB4MS45OTk5OWFwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMjYxCisgICAgMHgxLjk5OTk5OTUxM2NjMTczZTUxYmI5OTU1YjA2NmYxZGI4cC0xMiwKKyAgICAweDEuOTk5OTlhcC0xMgorICB9LAorICB7IC8vIEVudHJ5IDI2MgorICAgIC0weDEuOTk5OTk5NTEzY2MxNzNlNTFiYjk5NTViMDY2ZjFkYjhwLTEyLAorICAgIC0weDEuOTk5OTlhcC0xMgorICB9LAorICB7IC8vIEVudHJ5IDI2MworICAgIDB4MS4zMzMzMzJkOTE2ODUzMjFlNWZjMzk3ZDIwYTVhZjFlNnAtMTEsCisgICAgMHgxLjMzMzMzNHAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjQKKyAgICAtMHgxLjMzMzMzMmQ5MTY4NTMyMWU1ZmMzOTdkMjBhNWFmMWU2cC0xMSwKKyAgICAtMHgxLjMzMzMzNHAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjUKKyAgICAweDEuOTk5OTk3NDRmMzA2ZGMwM2U5ZWY3MDg5N2Y3ODI5OWVwLTExLAorICAgIDB4MS45OTk5OWFwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMjY2CisgICAgLTB4MS45OTk5OTc0NGYzMDZkYzAzZTllZjcwODk3Zjc4Mjk5ZXAtMTEsCisgICAgLTB4MS45OTk5OWFwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMjY3CisgICAgMHgxLmZmZmZmYWFhYWFhZWVlZWVlZDRlZDRlZGFiNGM3YmQ2cC0xMSwKKyAgICAweDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI2OAorICAgIC0weDEuZmZmZmZhYWFhYWFlZWVlZWVkNGVkNGVkYWI0YzdiZDZwLTExLAorICAgIC0weDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI2OQorICAgIDB4MS4zMzMzMmY2NDVhMThjM2IwY2NmYzBhM2NmN2IyZTkxYnAtMTAsCisgICAgMHgxLjMzMzMzNHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzAKKyAgICAtMHgxLjMzMzMyZjY0NWExOGMzYjBjY2ZjMGEzY2Y3YjJlOTFicC0xMCwKKyAgICAtMHgxLjMzMzMzNHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzEKKyAgICAweDEuNjY2NjYwYWVjMzMwODIxYzdhMTAwY2Y0ODhjMzgwZWJwLTEwLAorICAgIDB4MS42NjY2NjhwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjcyCisgICAgLTB4MS42NjY2NjBhZWMzMzA4MjFjN2ExMDBjZjQ4OGMzODBlYnAtMTAsCisgICAgLTB4MS42NjY2NjhwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjczCisgICAgMHgxLjk5OTk5MTEzY2MwMzQxNDRmZGJkYzhhMWRjNzEzMjUzcC0xMCwKKyAgICAweDEuOTk5OTljcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI3NAorICAgIC0weDEuOTk5OTkxMTNjYzAzNDE0NGZkYmRjOGExZGM3MTMyNTNwLTEwLAorICAgIC0weDEuOTk5OTljcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI3NQorICAgIDB4MS5jY2NjYmM3MmIwNWRkMDk1MWE5YzVlNjU1NjBjNTZlM3AtMTAsCisgICAgMHgxLmNjY2NjY3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzYKKyAgICAtMHgxLmNjY2NiYzcyYjA1ZGQwOTUxYTljNWU2NTU2MGM1NmUzcC0xMCwKKyAgICAtMHgxLmNjY2NjY3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzcKKyAgICAweDEuMDY2NWFlMzYxNWI1YjdkZTUyNzk4MDY0ZGZjNTliMjlwLTcsCisgICAgMHgxLjA2NjY2NnAtNworICB9LAorICB7IC8vIEVudHJ5IDI3OAorICAgIC0weDEuMDY2NWFlMzYxNWI1YjdkZTUyNzk4MDY0ZGZjNTliMjlwLTcsCisgICAgLTB4MS4wNjY2NjZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzkKKyAgICAweDEuY2NjOGU4YWU5MjU4NmQ4ZDY2YjZhZDBhZWRjYjBkOTRwLTcsCisgICAgMHgxLmNjY2NjY3AtNworICB9LAorICB7IC8vIEVudHJ5IDI4MAorICAgIC0weDEuY2NjOGU4YWU5MjU4NmQ4ZDY2YjZhZDBhZWRjYjBkOTRwLTcsCisgICAgLTB4MS5jY2NjY2NwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODEKKyAgICAweDEuNDk5M2U3MGY3YjE3YzEwYWY5Zjk3ZmM3YjMzYjgyMmJwLTYsCisgICAgMHgxLjQ5OTk5OHAtNgorICB9LAorICB7IC8vIEVudHJ5IDI4MgorICAgIC0weDEuNDk5M2U3MGY3YjE3YzEwYWY5Zjk3ZmM3YjMzYjgyMmJwLTYsCisgICAgLTB4MS40OTk5OThwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODMKKyAgICAweDEuYWNjMDQzZjhiMmQ4OWFkNTE0M2MwMzBlOTc2NmZjMTFwLTYsCisgICAgMHgxLmFjY2NjY3AtNgorICB9LAorICB7IC8vIEVudHJ5IDI4NAorICAgIC0weDEuYWNjMDQzZjhiMmQ4OWFkNTE0M2MwMzBlOTc2NmZjMTFwLTYsCisgICAgLTB4MS5hY2NjY2NwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODUKKyAgICAweDEuMDdmNDRkNjdjZjQxYWZiYzBjOTUxMDhiOTlmOTFiMDFwLTUsCisgICAgMHgxLjA4cC01CisgIH0sCisgIHsgLy8gRW50cnkgMjg2CisgICAgLTB4MS4wN2Y0NGQ2N2NmNDFhZmJjMGM5NTEwOGI5OWY5MWIwMXAtNSwKKyAgICAtMHgxLjA4cC01CisgIH0sCisgIHsgLy8gRW50cnkgMjg3CisgICAgMHgxLjM5ODVmZWFkNDRmYTJiODUxZTY1MWFjYmEzNjlkNzY5cC01LAorICAgIDB4MS4zOTk5OWFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODgKKyAgICAtMHgxLjM5ODVmZWFkNDRmYTJiODUxZTY1MWFjYmEzNjlkNzY5cC01LAorICAgIC0weDEuMzk5OTlhcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjg5CisgICAgMHgxLjZiMTRiZWI1ZDQwZDc0NTA5NjI0N2U1OWI2MjI4MjhicC01LAorICAgIDB4MS42YjMzMzRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTAKKyAgICAtMHgxLjZiMTRiZWI1ZDQwZDc0NTA5NjI0N2U1OWI2MjI4MjhicC01LAorICAgIC0weDEuNmIzMzM0cC01CisgIH0sCisgIHsgLy8gRW50cnkgMjkxCisgICAgMHgxLjljYTAxNjcxYTc5OTVmYzk3Y2ViZDY5NzI5Y2M0MzA5cC01LAorICAgIDB4MS45Y2NjY2VwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTIKKyAgICAtMHgxLjljYTAxNjcxYTc5OTVmYzk3Y2ViZDY5NzI5Y2M0MzA5cC01LAorICAgIC0weDEuOWNjY2NlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjkzCisgICAgMHgxLmNlMjc4Y2Q5ZWIyY2JkMGM2YTRlMTI3OWY2OTBlODU2cC01LAorICAgIDB4MS5jZTY2NjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTQKKyAgICAtMHgxLmNlMjc4Y2Q5ZWIyY2JkMGM2YTRlMTI3OWY2OTBlODU2cC01LAorICAgIC0weDEuY2U2NjY2cC01CisgIH0sCisgIHsgLy8gRW50cnkgMjk1CisgICAgMHgxLjQzYzFlOTk3MjM5MWFhOGVjZDhhOWNjYmE5MDc5MjBhcC0xLAorICAgIDB4MS41ZTdmYzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTYKKyAgICAtMHgxLjQzYzFlOTk3MjM5MWFhOGVjZDhhOWNjYmE5MDc5MjBhcC0xLAorICAgIC0weDEuNWU3ZmM0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjk3CisgICAgMHgxLmVlM2Q2YmIyMWM2NGIyMzgyZWZjZmYwY2RmMzBjZTBicC0xLAorICAgIDB4MS40ZTdmYzRwMAorICB9LAorICB7IC8vIEVudHJ5IDI5OAorICAgIC0weDEuZWUzZDZiYjIxYzY0YjIzODJlZmNmZjBjZGYzMGNlMGJwLTEsCisgICAgLTB4MS40ZTdmYzRwMAorICB9LAorICB7IC8vIEVudHJ5IDI5OQorICAgIDB4MS5kZjhlMjMyM2U0YmYxYTUzOGExMDBlYzFiZjM0OTRhOXAtMSwKKyAgICAweDEuZWRiZmE2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDAKKyAgICAtMHgxLmRmOGUyMzIzZTRiZjFhNTM4YTEwMGVjMWJmMzQ5NGE5cC0xLAorICAgIC0weDEuZWRiZmE2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDEKKyAgICAweDEuMWQzNDdhYTAyZmViM2JiMTc1MGQyNTUwOTQzNWRhODhwLTEsCisgICAgMHgxLjQ2N2ZjNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzAyCisgICAgLTB4MS4xZDM0N2FhMDJmZWIzYmIxNzUwZDI1NTA5NDM1ZGE4OHAtMSwKKyAgICAtMHgxLjQ2N2ZjNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzAzCisgICAgLTB4MS5mZmVhMDhlMWM5N2Y0YzRkZTAxOTYxY2MzZTdiMDRkY3AtNiwKKyAgICAweDEuOTYxZmI0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDQKKyAgICAweDEuZmZlYTA4ZTFjOTdmNGM0ZGUwMTk2MWNjM2U3YjA0ZGNwLTYsCisgICAgLTB4MS45NjFmYjRwMQorICB9LAorICB7IC8vIEVudHJ5IDMwNQorICAgIC0weDEuMzczNGNiY2VkOWMwZjQ4NGU1Zjc2MmUwMDIxNmU2MjBwLTEsCisgICAgMHgxLmU1YmZhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzA2CisgICAgMHgxLjM3MzRjYmNlZDljMGY0ODRlNWY3NjJlMDAyMTZlNjIwcC0xLAorICAgIC0weDEuZTViZmE0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDcKKyAgICAtMHgxLmU5ZDI1OTJiZWMxMGMzYWNiMTVjNTg1MjIzOWEyYWE4cC0xLAorICAgIDB4MS4xYWFmY2FwMgorICB9LAorICB7IC8vIEVudHJ5IDMwOAorICAgIDB4MS5lOWQyNTkyYmVjMTBjM2FjYjE1YzU4NTIyMzlhMmFhOHAtMSwKKyAgICAtMHgxLjFhYWZjYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzA5CisgICAgLTB4MS5lNGVjZTIwOGQwYzQ5MTNhYjAxOWNhYjBjZTljNzg1ZXAtMSwKKyAgICAweDEuNDI3ZmMycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTAKKyAgICAweDEuZTRlY2UyMDhkMGM0OTEzYWIwMTljYWIwY2U5Yzc4NWVwLTEsCisgICAgLTB4MS40MjdmYzJwMgorICB9LAorICB7IC8vIEVudHJ5IDMxMQorICAgIC0weDEuMmE1YTAyZDM5MmI1NGY2NDFhMGQ4OGJkNGFjNmMyZTFwLTEsCisgICAgMHgxLjZhNGZiYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzEyCisgICAgMHgxLjJhNWEwMmQzOTJiNTRmNjQxYTBkODhiZDRhYzZjMmUxcC0xLAorICAgIC0weDEuNmE0ZmJhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTMKKyAgICAtMHgxLjI2MzEyM2RmMjJkMTNlZDMyOWM2NjVjODNjMGU3MWU4cC0xLAorICAgIDB4MS42YWYyZjBwMgorICB9LAorICB7IC8vIEVudHJ5IDMxNAorICAgIDB4MS4yNjMxMjNkZjIyZDEzZWQzMjljNjY1YzgzYzBlNzFlOHAtMSwKKyAgICAtMHgxLjZhZjJmMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzE1CisgICAgLTB4MS5lMThlNjdiNTA4ZmZjOWU0MmY2YzllNzJmOGU1NDVmM3AtMSwKKyAgICAweDEuNDNjNjJhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTYKKyAgICAweDEuZTE4ZTY3YjUwOGZmYzllNDJmNmM5ZTcyZjhlNTQ1ZjNwLTEsCisgICAgLTB4MS40M2M2MmFwMgorICB9LAorICB7IC8vIEVudHJ5IDMxNworICAgIC0weDEuZWUwZTgwZWM5ZDE1NjJjMTdhNmNmNjA4YWY5YjBlZDRwLTEsCisgICAgMHgxLjFjOTk2NHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzE4CisgICAgMHgxLmVlMGU4MGVjOWQxNTYyYzE3YTZjZjYwOGFmOWIwZWQ0cC0xLAorICAgIC0weDEuMWM5OTY0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTkKKyAgICAtMHgxLjQ3Mjc2ODYzN2VhODg2NmE2NTIwOThhNDNhYTY4OGE2cC0xLAorICAgIDB4MS5lYWQ5M2NwMQorICB9LAorICB7IC8vIEVudHJ5IDMyMAorICAgIDB4MS40NzI3Njg2MzdlYTg4NjZhNjUyMDk4YTQzYWE2ODhhNnAtMSwKKyAgICAtMHgxLmVhZDkzY3AxCisgIH0sCisgIHsgLy8gRW50cnkgMzIxCisgICAgLTB4MS40YmEyNGY2MzI1ZjIxNDIwZTdjNDhkNGY5MWUyODA2NHAtNCwKKyAgICAweDEuOWM3ZmIwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjIKKyAgICAweDEuNGJhMjRmNjMyNWYyMTQyMGU3YzQ4ZDRmOTFlMjgwNjRwLTQsCisgICAgLTB4MS45YzdmYjBwMQorICB9LAorICB7IC8vIEVudHJ5IDMyMworICAgIDB4MS4wMzRjNjQzMjk1MTUzYWFmZmU1ZDlhMGYyOWU5Mjg0NHAtMSwKKyAgICAweDEuNGUyNjI0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjQKKyAgICAtMHgxLjAzNGM2NDMyOTUxNTNhYWZmZTVkOWEwZjI5ZTkyODQ0cC0xLAorICAgIC0weDEuNGUyNjI0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjUKKyAgICAweDEuZDFlNGQ5NmVhYzkxNzU3NGI5NDhlNGVhOWUzN2IzNmRwLTEsCisgICAgMHgxLmZmOTkzMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzI2CisgICAgLTB4MS5kMWU0ZDk2ZWFjOTE3NTc0Yjk0OGU0ZWE5ZTM3YjM2ZHAtMSwKKyAgICAtMHgxLmZmOTkzMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzI3CisgICAgMHgxLmY3NTAxZTAwMmJjYWZiODk3ZjkzMTkzMWQzYTU3YWZkcC0xLAorICAgIDB4MS42MmU2MWNwMAorICB9LAorICB7IC8vIEVudHJ5IDMyOAorICAgIC0weDEuZjc1MDFlMDAyYmNhZmI4OTdmOTMxOTMxZDNhNTdhZmRwLTEsCisgICAgLTB4MS42MmU2MWNwMAorICB9LAorICB7IC8vIEVudHJ5IDMyOQorICAgIDB4MS42NWY3ZDY2ZWY2NTkxY2ZjNTFhYjI5ZGMyMDg2ZDNlN3AtMSwKKyAgICAweDEuOGM2NjJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzMwCisgICAgLTB4MS42NWY3ZDY2ZWY2NTkxY2ZjNTFhYjI5ZGMyMDg2ZDNlN3AtMSwKKyAgICAtMHgxLjhjNjYyY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDMzMQorICAgIC0weDEuZmUwNDNmODc1YzZlZDRhMmMxYjhkNjlhMDlmY2Y1NzhwLTEsCisgICAgLTB4MS5hOGFhMWNwMAorICB9LAorICB7IC8vIEVudHJ5IDMzMgorICAgIDB4MS5mZTA0M2Y4NzVjNmVkNGEyYzFiOGQ2OWEwOWZjZjU3OHAtMSwKKyAgICAweDEuYThhYTFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzMKKyAgICAtMHgxLmZmZjE4ZjMxM2U2NmYxYWUyNWY4OWE1ZjdhMWY4NGM0cC0xLAorICAgIC0weDEuOTVlYzhhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzQKKyAgICAweDEuZmZmMThmMzEzZTY2ZjFhZTI1Zjg5YTVmN2ExZjg0YzRwLTEsCisgICAgMHgxLjk1ZWM4YXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzM1CisgICAgLTB4MS5mZjIwZDkyMGI5ZTljMjMxNTRmOTdlMmYzNDJhMjg4NHAtMSwKKyAgICAtMHgxLjgzMmVmOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzM2CisgICAgMHgxLmZmMjBkOTIwYjllOWMyMzE1NGY5N2UyZjM0MmEyODg0cC0xLAorICAgIDB4MS44MzJlZjhwMAorICB9LAorICB7IC8vIEVudHJ5IDMzNworICAgIC0weDEuZmI5MzNiODlkN2RiMzI4NmVlZDBjZmVhYmVlOTg4NzVwLTEsCisgICAgLTB4MS43MDcxNjZwMAorICB9LAorICB7IC8vIEVudHJ5IDMzOAorICAgIDB4MS5mYjkzM2I4OWQ3ZGIzMjg2ZWVkMGNmZWFiZWU5ODg3NXAtMSwKKyAgICAweDEuNzA3MTY2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzkKKyAgICAtMHgxLmY1NGQ5NWM1MDU4YjdkYzk5NzJhYjZmOTkyOGNhMDQzcC0xLAorICAgIC0weDEuNWRiM2Q0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDAKKyAgICAweDEuZjU0ZDk1YzUwNThiN2RjOTk3MmFiNmY5OTI4Y2EwNDNwLTEsCisgICAgMHgxLjVkYjNkNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzQxCisgICAgLTB4MS5lYzU4ODFhMDljNDZhYWUwMjBjZDkwMzYwOThhMTk2ZXAtMSwKKyAgICAtMHgxLjRhZjY0MnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzQyCisgICAgMHgxLmVjNTg4MWEwOWM0NmFhZTAyMGNkOTAzNjA5OGExOTZlcC0xLAorICAgIDB4MS40YWY2NDJwMAorICB9LAorICB7IC8vIEVudHJ5IDM0MworICAgIC0weDEuZTBjMDQ3OTU5MTlkOTYxYTVlODNlNTA1ZGYzMWM2MjRwLTEsCisgICAgLTB4MS4zODM4YjBwMAorICB9LAorICB7IC8vIEVudHJ5IDM0NAorICAgIDB4MS5lMGMwNDc5NTkxOWQ5NjFhNWU4M2U1MDVkZjMxYzYyNHAtMSwKKyAgICAweDEuMzgzOGIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDUKKyAgICAtMHgxLmQyOTRjZGVmN2NjMTYxNjMzYTAyZDNlNjIwNThiZTBlcC0xLAorICAgIC0weDEuMjU3YjFlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDYKKyAgICAweDEuZDI5NGNkZWY3Y2MxNjE2MzNhMDJkM2U2MjA1OGJlMGVwLTEsCisgICAgMHgxLjI1N2IxZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzQ3CisgICAgLTB4MS5jMWU5ODhiOTU2MTRhYmQ2NWQzZDgxMWY1Yzg4MDM5YnAtMSwKKyAgICAtMHgxLjEyYmQ5MnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzQ4CisgICAgMHgxLmMxZTk4OGI5NTYxNGFiZDY1ZDNkODExZjVjODgwMzlicC0xLAorICAgIDB4MS4xMmJkOTJwMAorICB9LAorICB7IC8vIEVudHJ5IDM0OQorICAgIC0weDEuYTJjMjg5NWVkYjBkNGJhNTFjZGJkNTM5MGNhYzQ2OGZwLTEsCisgICAgLTB4MS5lYTVjM2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTAKKyAgICAweDEuYTJjMjg5NWVkYjBkNGJhNTFjZGJkNTM5MGNhYzQ2OGZwLTEsCisgICAgMHgxLmVhNWMzZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1MQorICAgIC0weDEuOTVmMDUxNTM2NDRkNjBiOTRkMmYyZTcwMGRmZDNhMzdwLTEsCisgICAgLTB4MS5kNGI4N2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTIKKyAgICAweDEuOTVmMDUxNTM2NDRkNjBiOTRkMmYyZTcwMGRmZDNhMzdwLTEsCisgICAgMHgxLmQ0Yjg3Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDM1MworICAgIC0weDEuODg2NDdkOGFkMmU0MWZiN2MwYWYwZjY0NjE0Yzk5OTNwLTEsCisgICAgLTB4MS5iZjE0YmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTQKKyAgICAweDEuODg2NDdkOGFkMmU0MWZiN2MwYWYwZjY0NjE0Yzk5OTNwLTEsCisgICAgMHgxLmJmMTRiYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1NQorICAgIC0weDEuN2EyNTNmOWY4OWE3ZDNlNGY5YzU0NjM4NDE4ZTk3ZjZwLTEsCisgICAgLTB4MS5hOTcwZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTYKKyAgICAweDEuN2EyNTNmOWY4OWE3ZDNlNGY5YzU0NjM4NDE4ZTk3ZjZwLTEsCisgICAgMHgxLmE5NzBmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1NworICAgIC0weDEuNmIzOTFiMzRhYWI4MjhmYmU3Y2Q3ZGNhZjllZjNiZDZwLTEsCisgICAgLTB4MS45M2NkMzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTgKKyAgICAweDEuNmIzOTFiMzRhYWI4MjhmYmU3Y2Q3ZGNhZjllZjNiZDZwLTEsCisgICAgMHgxLjkzY2QzNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1OQorICAgIC0weDEuNWJhNmUyZmI5ODBkNDgyY2YwMGVkZTgwZjU1OTdmYjJwLTEsCisgICAgLTB4MS43ZTI5NzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjAKKyAgICAweDEuNWJhNmUyZmI5ODBkNDgyY2YwMGVkZTgwZjU1OTdmYjJwLTEsCisgICAgMHgxLjdlMjk3NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM2MQorICAgIC0weDEuNGI3NWI1OTU0ZTcxODAyMDkwMDcxOWUyNWE3ZWE5M2JwLTEsCisgICAgLTB4MS42ODg1YjJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjIKKyAgICAweDEuNGI3NWI1OTU0ZTcxODAyMDkwMDcxOWUyNWE3ZWE5M2JwLTEsCisgICAgMHgxLjY4ODViMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM2MworICAgIC0weDEuM2FhY2ZhNTEwODEwMDU0YzUyYWUwYjY3ZDExNmViNDBwLTEsCisgICAgLTB4MS41MmUxZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjQKKyAgICAweDEuM2FhY2ZhNTEwODEwMDU0YzUyYWUwYjY3ZDExNmViNDBwLTEsCisgICAgMHgxLjUyZTFmMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM2NQorICAgIC0weDEuMjk1NDY0NGNlYjhlM2EyNDc5YzgzYWU4NGFmNTdkM2VwLTEsCisgICAgLTB4MS4zZDNlMzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjYKKyAgICAweDEuMjk1NDY0NGNlYjhlM2EyNDc5YzgzYWU4NGFmNTdkM2VwLTEsCisgICAgMHgxLjNkM2UzNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM2NworICAgIC0weDEuZmM3NjlhZWNkMjY1Y2ZlYTA4ZTBmZjMwYzJmYmNhY2RwLTIsCisgICAgLTB4MS4wYTBiMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjgKKyAgICAweDEuZmM3NjlhZWNkMjY1Y2ZlYTA4ZTBmZjMwYzJmYmNhY2RwLTIsCisgICAgMHgxLjBhMGIwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM2OQorICAgIC0weDEuYzg1M2M3MDRlM2I5NDMyMjAzMWQ2YjQ3YWVmODUzYzlwLTIsCisgICAgLTB4MS5kOGY3MjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzAKKyAgICAweDEuYzg1M2M3MDRlM2I5NDMyMjAzMWQ2YjQ3YWVmODUzYzlwLTIsCisgICAgMHgxLmQ4ZjcyMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM3MQorICAgIC0weDEuOTJhYmE4OTgxYjI1ZGVkYTRjYzE4MTcyNTE3MjNhMWJwLTIsCisgICAgLTB4MS45ZGQ4M2NwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzIKKyAgICAweDEuOTJhYmE4OTgxYjI1ZGVkYTRjYzE4MTcyNTE3MjNhMWJwLTIsCisgICAgMHgxLjlkZDgzY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDM3MworICAgIC0weDEuNWJhYzA1ZTFlMGE3YzJkZTI4MGZjYjkzYmU2N2E0ZGFwLTIsCisgICAgLTB4MS42MmI5NThwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzQKKyAgICAweDEuNWJhYzA1ZTFlMGE3YzJkZTI4MGZjYjkzYmU2N2E0ZGFwLTIsCisgICAgMHgxLjYyYjk1OHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM3NQorICAgIC0weDEuMjM4M2NhMmIyNDk4MDdkOTUwMDVkOTZjZmRhZWNkNmNwLTIsCisgICAgLTB4MS4yNzlhNzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzYKKyAgICAweDEuMjM4M2NhMmIyNDk4MDdkOTUwMDVkOTZjZmRhZWNkNmNwLTIsCisgICAgMHgxLjI3OWE3NHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM3NworICAgIC0weDEuZDRjNWJiODcyZWE1Mzc1ODM0Y2EwYmNhMDg4ZDFkNzVwLTMsCisgICAgLTB4MS5kOGY3MjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzgKKyAgICAweDEuZDRjNWJiODcyZWE1Mzc1ODM0Y2EwYmNhMDg4ZDFkNzVwLTMsCisgICAgMHgxLmQ4ZjcyMHAtMworICB9LAorICB7IC8vIEVudHJ5IDM3OQorICAgIC0weDEuNjBmM2ZhNDYwYjg1ODExZDJhZTcxMGNkNjllYzM2OTBwLTMsCisgICAgLTB4MS42MmI5NThwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODAKKyAgICAweDEuNjBmM2ZhNDYwYjg1ODExZDJhZTcxMGNkNjllYzM2OTBwLTMsCisgICAgMHgxLjYyYjk1OHAtMworICB9LAorICB7IC8vIEVudHJ5IDM4MQorICAgIC0weDEuZDdlYTNkNTZlMWU2MjQ0Yzg3ODZkNzRmMTg5ZDk4YWNwLTQsCisgICAgLTB4MS5kOGY3MjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODIKKyAgICAweDEuZDdlYTNkNTZlMWU2MjQ0Yzg3ODZkNzRmMTg5ZDk4YWNwLTQsCisgICAgMHgxLmQ4ZjcyMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDM4MworICAgIC0weDEuZDhiM2RlYmE2YWM0OTNiMDRiMjEwM2EwZGJhZWYwMmZwLTUsCisgICAgLTB4MS5kOGY3MjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODQKKyAgICAweDEuZDhiM2RlYmE2YWM0OTNiMDRiMjEwM2EwZGJhZWYwMmZwLTUsCisgICAgMHgxLmQ4ZjcyMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDM4NQorICAgIDB4MS5kOGIzZGViYTZhYzQ5M2IwNGIyMTAzYTBkYmFlZjAyZnAtNSwKKyAgICAweDEuZDhmNzIwcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzg2CisgICAgLTB4MS5kOGIzZGViYTZhYzQ5M2IwNGIyMTAzYTBkYmFlZjAyZnAtNSwKKyAgICAtMHgxLmQ4ZjcyMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDM4NworICAgIDB4MS5kN2VhM2Q1NmUxZTYyNDRjODc4NmQ3NGYxODlkOThhY3AtNCwKKyAgICAweDEuZDhmNzIwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzg4CisgICAgLTB4MS5kN2VhM2Q1NmUxZTYyNDRjODc4NmQ3NGYxODlkOThhY3AtNCwKKyAgICAtMHgxLmQ4ZjcyMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDM4OQorICAgIDB4MS42MGYzZmE0NjBiODU4MTFkMmFlNzEwY2Q2OWVjMzY5MHAtMywKKyAgICAweDEuNjJiOTU4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzkwCisgICAgLTB4MS42MGYzZmE0NjBiODU4MTFkMmFlNzEwY2Q2OWVjMzY5MHAtMywKKyAgICAtMHgxLjYyYjk1OHAtMworICB9LAorICB7IC8vIEVudHJ5IDM5MQorICAgIDB4MS5kNGM1YmI4NzJlYTUzNzU4MzRjYTBiY2EwODhkMWQ3NXAtMywKKyAgICAweDEuZDhmNzIwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzkyCisgICAgLTB4MS5kNGM1YmI4NzJlYTUzNzU4MzRjYTBiY2EwODhkMWQ3NXAtMywKKyAgICAtMHgxLmQ4ZjcyMHAtMworICB9LAorICB7IC8vIEVudHJ5IDM5MworICAgIDB4MS4yMzgzY2EyYjI0OTgwN2Q5NTAwNWQ5NmNmZGFlY2Q2Y3AtMiwKKyAgICAweDEuMjc5YTc0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzk0CisgICAgLTB4MS4yMzgzY2EyYjI0OTgwN2Q5NTAwNWQ5NmNmZGFlY2Q2Y3AtMiwKKyAgICAtMHgxLjI3OWE3NHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM5NQorICAgIDB4MS41YmFjMDVlMWUwYTdjMmRlMjgwZmNiOTNiZTY3YTRkYXAtMiwKKyAgICAweDEuNjJiOTU4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzk2CisgICAgLTB4MS41YmFjMDVlMWUwYTdjMmRlMjgwZmNiOTNiZTY3YTRkYXAtMiwKKyAgICAtMHgxLjYyYjk1OHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM5NworICAgIDB4MS45MmFiYTg5ODFiMjVkZWRhNGNjMTgxNzI1MTcyM2ExYnAtMiwKKyAgICAweDEuOWRkODNjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzk4CisgICAgLTB4MS45MmFiYTg5ODFiMjVkZWRhNGNjMTgxNzI1MTcyM2ExYnAtMiwKKyAgICAtMHgxLjlkZDgzY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDM5OQorICAgIDB4MS5jODUzYzcwNGUzYjk0MzIyMDMxZDZiNDdhZWY4NTNjOXAtMiwKKyAgICAweDEuZDhmNzIwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDAwCisgICAgLTB4MS5jODUzYzcwNGUzYjk0MzIyMDMxZDZiNDdhZWY4NTNjOXAtMiwKKyAgICAtMHgxLmQ4ZjcyMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDQwMQorICAgIDB4MS5mYzc2OWFlY2QyNjVjZmVhMDhlMGZmMzBjMmZiY2FjZHAtMiwKKyAgICAweDEuMGEwYjAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDAyCisgICAgLTB4MS5mYzc2OWFlY2QyNjVjZmVhMDhlMGZmMzBjMmZiY2FjZHAtMiwKKyAgICAtMHgxLjBhMGIwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwMworICAgIDB4MS4yOTU0NjQ0Y2ViOGUzYTI0NzljODNhZTg0YWY1N2QzZXAtMSwKKyAgICAweDEuM2QzZTM2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDA0CisgICAgLTB4MS4yOTU0NjQ0Y2ViOGUzYTI0NzljODNhZTg0YWY1N2QzZXAtMSwKKyAgICAtMHgxLjNkM2UzNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwNQorICAgIDB4MS4zYWFkMDBhMDkyNjhhMzlkZjE2NTNjNzBkYjkxZjE1N3AtMSwKKyAgICAweDEuNTJlMWY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDA2CisgICAgLTB4MS4zYWFkMDBhMDkyNjhhMzlkZjE2NTNjNzBkYjkxZjE1N3AtMSwKKyAgICAtMHgxLjUyZTFmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwNworICAgIDB4MS40Yjc1YmJhZTM4OGE3ZjM0NjZlN2YyZDZiZGNmNzJiYnAtMSwKKyAgICAweDEuNjg4NWJhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDA4CisgICAgLTB4MS40Yjc1YmJhZTM4OGE3ZjM0NjZlN2YyZDZiZGNmNzJiYnAtMSwKKyAgICAtMHgxLjY4ODViYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwOQorICAgIDB4MS41YmE2ZThkYjE4MzM0NzU3MTJiOWE0MmExYWQwZDJjMnAtMSwKKyAgICAweDEuN2UyOTdjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDEwCisgICAgLTB4MS41YmE2ZThkYjE4MzM0NzU3MTJiOWE0MmExYWQwZDJjMnAtMSwKKyAgICAtMHgxLjdlMjk3Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDQxMQorICAgIDB4MS42YjM5MjBkODExNzgyODkyOGZlMTBhYzcwYmE2OWU3NnAtMSwKKyAgICAweDEuOTNjZDNlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDEyCisgICAgLTB4MS42YjM5MjBkODExNzgyODkyOGZlMTBhYzcwYmE2OWU3NnAtMSwKKyAgICAtMHgxLjkzY2QzZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQxMworICAgIDB4MS43YTI1NDUwNDQzMDk4ODM2YzUyMDIzNzVkYjRiODQ2MnAtMSwKKyAgICAweDEuYTk3MXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQxNAorICAgIC0weDEuN2EyNTQ1MDQ0MzA5ODgzNmM1MjAyMzc1ZGI0Yjg0NjJwLTEsCisgICAgLTB4MS5hOTcxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDE1CisgICAgMHgxLjg4NjQ4MmFlNjc5N2IzODM2NGY1YzcyY2U5YTNiNzZmcC0xLAorICAgIDB4MS5iZjE0YzJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTYKKyAgICAtMHgxLjg4NjQ4MmFlNjc5N2IzODM2NGY1YzcyY2U5YTNiNzZmcC0xLAorICAgIC0weDEuYmYxNGMycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDE3CisgICAgMHgxLjk1ZjA1NjMzN2FjYzFkMmQ1NTc1MjUyMzJlOTE1NDY3cC0xLAorICAgIDB4MS5kNGI4ODRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTgKKyAgICAtMHgxLjk1ZjA1NjMzN2FjYzFkMmQ1NTc1MjUyMzJlOTE1NDY3cC0xLAorICAgIC0weDEuZDRiODg0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDE5CisgICAgMHgxLmEyYzI4OTVlZGIwZDRiYTUxY2RiZDUzOTBjYWM0NjhmcC0xLAorICAgIDB4MS5lYTVjM2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjAKKyAgICAtMHgxLmEyYzI4OTVlZGIwZDRiYTUxY2RiZDUzOTBjYWM0NjhmcC0xLAorICAgIC0weDEuZWE1YzNlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDIxCisgICAgMHgxLmMxZTk4OGI5NTYxNGFiZDY1ZDNkODExZjVjODgwMzlicC0xLAorICAgIDB4MS4xMmJkOTJwMAorICB9LAorICB7IC8vIEVudHJ5IDQyMgorICAgIC0weDEuYzFlOTg4Yjk1NjE0YWJkNjVkM2Q4MTFmNWM4ODAzOWJwLTEsCisgICAgLTB4MS4xMmJkOTJwMAorICB9LAorICB7IC8vIEVudHJ5IDQyMworICAgIDB4MS5kMjk0ZDJlMDZiM2QxMGE0ZGUyNjMxNzJkNTBmNDQ5N3AtMSwKKyAgICAweDEuMjU3YjI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjQKKyAgICAtMHgxLmQyOTRkMmUwNmIzZDEwYTRkZTI2MzE3MmQ1MGY0NDk3cC0xLAorICAgIC0weDEuMjU3YjI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjUKKyAgICAweDEuZTBjMDRiYjY1YmQzMzAxMmJlNzJhMzQwZGYyYzA0NGJwLTEsCisgICAgMHgxLjM4MzhiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDI2CisgICAgLTB4MS5lMGMwNGJiNjViZDMzMDEyYmU3MmEzNDBkZjJjMDQ0YnAtMSwKKyAgICAtMHgxLjM4MzhiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDI3CisgICAgMHgxLmVjNTg4NGViOTkwYzNkZWFhZWViZDNmMGY4NGQ2OTYycC0xLAorICAgIDB4MS40YWY2NDhwMAorICB9LAorICB7IC8vIEVudHJ5IDQyOAorICAgIC0weDEuZWM1ODg0ZWI5OTBjM2RlYWFlZWJkM2YwZjg0ZDY5NjJwLTEsCisgICAgLTB4MS40YWY2NDhwMAorICB9LAorICB7IC8vIEVudHJ5IDQyOQorICAgIDB4MS5mNTRkOTgzNWIwZTY2ZTE3NjEyMTYwMjcyNTIxZjNiMHAtMSwKKyAgICAweDEuNWRiM2RhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzAKKyAgICAtMHgxLmY1NGQ5ODM1YjBlNjZlMTc2MTIxNjAyNzI1MjFmM2IwcC0xLAorICAgIC0weDEuNWRiM2RhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzEKKyAgICAweDEuZmI5MzNkMWNkOTMxNjg1ZTkwMmU0MDNhMWJhYWVjZmRwLTEsCisgICAgMHgxLjcwNzE2Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDMyCisgICAgLTB4MS5mYjkzM2QxY2Q5MzE2ODVlOTAyZTQwM2ExYmFhZWNmZHAtMSwKKyAgICAtMHgxLjcwNzE2Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDMzCisgICAgMHgxLmZmMjBkOWQzZTg5ODRmZWMzMzk4MmU0MmY1ODg0ZjJjcC0xLAorICAgIDB4MS44MzJlZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDQzNAorICAgIC0weDEuZmYyMGQ5ZDNlODk4NGZlYzMzOTgyZTQyZjU4ODRmMmNwLTEsCisgICAgLTB4MS44MzJlZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDQzNQorICAgIDB4MS5mZmYxOGYwM2E0YjdlNmFhY2Y1MWY4MzkzMWU4NTA0MnAtMSwKKyAgICAweDEuOTVlYzkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzYKKyAgICAtMHgxLmZmZjE4ZjAzYTRiN2U2YWFjZjUxZjgzOTMxZTg1MDQycC0xLAorICAgIC0weDEuOTVlYzkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzcKKyAgICAweDEuZmUwNDNmODc1YzZlZDRhMmMxYjhkNjlhMDlmY2Y1NzhwLTEsCisgICAgMHgxLmE4YWExY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDM4CisgICAgLTB4MS5mZTA0M2Y4NzVjNmVkNGEyYzFiOGQ2OWEwOWZjZjU3OHAtMSwKKyAgICAtMHgxLmE4YWExY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDM5CisgICAgMHgxLmIzZDM2YTk2ODgwY2Y2OWQ5ODg0YTQ5ZjUzODFlOTE3cC0xLAorICAgIDB4MS4wNGFmZjhwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0MAorICAgIC0weDEuYjNkMzZhOTY4ODBjZjY5ZDk4ODRhNDlmNTM4MWU5MTdwLTEsCisgICAgLTB4MS4wNGFmZjhwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0MQorICAgIDB4MS5iM2Q0MWFlYmNmMzkxYzMwYzNkMmYxZWU3Yjc5NzEwY3AtMSwKKyAgICAweDEuMDRiMGEwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDIKKyAgICAtMHgxLmIzZDQxYWViY2YzOTFjMzBjM2QyZjFlZTdiNzk3MTBjcC0xLAorICAgIC0weDEuMDRiMGEwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDMKKyAgICAweDEuYjNkNGNiNDA1YWIzMjkyYmU3ZGY1YjFiOTgwMzJmYmVwLTEsCisgICAgMHgxLjA0YjE0OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQ0CisgICAgLTB4MS5iM2Q0Y2I0MDVhYjMyOTJiZTdkZjViMWI5ODAzMmZiZXAtMSwKKyAgICAtMHgxLjA0YjE0OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQ1CisgICAgMHgxLmIzZDU3Yjk0MmE3YWQxOWU5Yjk4OTJjOTMxOWUxYmU2cC0xLAorICAgIDB4MS4wNGIxZjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0NgorICAgIC0weDEuYjNkNTdiOTQyYTdhZDE5ZTliOTg5MmM5MzE5ZTFiZTZwLTEsCisgICAgLTB4MS4wNGIxZjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0NworICAgIDB4MS5iM2Q2MmJlNzNlOGZjOTk4YzZjMmRmNjU5MDQyNTYxM3AtMSwKKyAgICAweDEuMDRiMjk4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDgKKyAgICAtMHgxLmIzZDYyYmU3M2U4ZmM5OThjNmMyZGY2NTkwNDI1NjEzcC0xLAorICAgIC0weDEuMDRiMjk4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDkKKyAgICAweDEuYjNkNmRjMzk5NmYxYzUyYWExZjgzYmRlZTFkMGUwMjNwLTEsCisgICAgMHgxLjA0YjM0MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDUwCisgICAgLTB4MS5iM2Q2ZGMzOTk2ZjFjNTJhYTFmODNiZGVlMWQwZTAyM3AtMSwKKyAgICAtMHgxLjA0YjM0MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDUxCisgICAgMHgxLmIzZDc4YzhiMzNhMDc4NjRiNmE4Nzg1NzNkYjM0YmNhcC0xLAorICAgIDB4MS4wNGIzZThwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1MgorICAgIC0weDEuYjNkNzhjOGIzM2EwNzg2NGI2YTg3ODU3M2RiMzRiY2FwLTEsCisgICAgLTB4MS4wNGIzZThwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1MworICAgIDB4MS5iM2Q4M2NkYzE0OWI5NzU3ZGYxOTVhZDg4NWFiNTIwMXAtMSwKKyAgICAweDEuMDRiNDkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTQKKyAgICAtMHgxLmIzZDgzY2RjMTQ5Yjk3NTdkZjE5NWFkODg1YWI1MjAxcC0xLAorICAgIC0weDEuMDRiNDkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTUKKyAgICAweDEuYjNkOGU4Zjk5MDgzNjBiMzhjZDEzZmNiZjYyMjRkOTNwLTEsCisgICAgMHgxLjA0YjUzNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDU2CisgICAgLTB4MS5iM2Q4ZThmOTkwODM2MGIzOGNkMTNmY2JmNjIyNGQ5M3AtMSwKKyAgICAtMHgxLjA0YjUzNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDU3CisgICAgLTAuMGYsCisgICAgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDQ1OAorICAgIDAuMGYsCisgICAgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNDU5CisgICAgMC4wLAorICAgIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDQ2MAorICAgIDAuMGYsCisgICAgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNDYxCisgICAgLTAuMGYsCisgICAgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDQ2MgorICAgIDB4MS4xNzczZDM2YTY0ZGY2MWQ2NzE1ZTYwYWYwNjM1NTlmNHAtMSwKKyAgICAweDEuMjc5YTcycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDYzCisgICAgLTB4MS4xNzczZDM2YTY0ZGY2MWQ2NzE1ZTYwYWYwNjM1NTlmNHAtMSwKKyAgICAtMHgxLjI3OWE3MnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ2NAorICAgIDB4MS4xNzczZDUxNzY3YTc4ZmU5MWI1NWY2YjdlNWZkNDRjMnAtMSwKKyAgICAweDEuMjc5YTc0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDY1CisgICAgLTB4MS4xNzczZDUxNzY3YTc4ZmU5MWI1NWY2YjdlNWZkNDRjMnAtMSwKKyAgICAtMHgxLjI3OWE3NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ2NgorICAgIDB4MS4xNzczZDZjNDZhNmVhNjg3ZjAzNjI1MTk0ZDI1YmI1MnAtMSwKKyAgICAweDEuMjc5YTc2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDY3CisgICAgLTB4MS4xNzczZDZjNDZhNmVhNjg3ZjAzNjI1MTk0ZDI1YmI1MnAtMSwKKyAgICAtMHgxLjI3OWE3NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ2OAorICAgIDB4MS5mOTViOGY0MDUwMTA1N2FjNDlhY2VmMTM5OTNiMGM1NXAtMSwKKyAgICAweDEuYmI2N2FjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjkKKyAgICAtMHgxLmY5NWI4ZjQwNTAxMDU3YWM0OWFjZWYxMzk5M2IwYzU1cC0xLAorICAgIC0weDEuYmI2N2FjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzAKKyAgICAweDEuZjk1YjhlOWJlNzI3NzAyZjc1OTVhZTEwMDBhMTRhMWFwLTEsCisgICAgMHgxLmJiNjdhZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDcxCisgICAgLTB4MS5mOTViOGU5YmU3Mjc3MDJmNzU5NWFlMTAwMGExNGExYXAtMSwKKyAgICAtMHgxLmJiNjdhZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDcyCisgICAgMHgxLmY5NWI4ZGY3N2UzNmEzNDQ2NzBlZDA3MTQ5MTkxYTU4cC0xLAorICAgIDB4MS5iYjY3YjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ3MworICAgIC0weDEuZjk1YjhkZjc3ZTM2YTM0NDY3MGVkMDcxNDkxOTFhNThwLTEsCisgICAgLTB4MS5iYjY3YjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ3NAorICAgIDB4MS5iMWQ4MmU4MzVhOTE4ZGUxOGY1ZmRhZGM4YjEyNDBjZnAtMiwKKyAgICAweDEuYmZmZmZlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDc1CisgICAgLTB4MS5iMWQ4MmU4MzVhOTE4ZGUxOGY1ZmRhZGM4YjEyNDBjZnAtMiwKKyAgICAtMHgxLmJmZmZmZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDQ3NgorICAgIDB4MS5iMWQ4MzA1MzIxNjE2OTQ3NmY0ZDE5ODJiOWIxNGFiMXAtMiwKKyAgICAweDEuYzBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzcKKyAgICAtMHgxLmIxZDgzMDUzMjE2MTY5NDc2ZjRkMTk4MmI5YjE0YWIxcC0yLAorICAgIC0weDEuYzBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzgKKyAgICAweDEuYjFkODMyMjJlODMwZDgzNzQzMjU4ZmQwOTA0MGVlNTZwLTIsCisgICAgMHgxLmMwMDAwMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDQ3OQorICAgIC0weDEuYjFkODMyMjJlODMwZDgzNzQzMjU4ZmQwOTA0MGVlNTZwLTIsCisgICAgLTB4MS5jMDAwMDJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODAKKyAgICAweDEuNDRlYjM2OTE0MjgwNjJiMjc5MjVjNTg1YWQ1OWQ2MmFwLTEsCisgICAgMHgxLjVmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ4MQorICAgIC0weDEuNDRlYjM2OTE0MjgwNjJiMjc5MjVjNTg1YWQ1OWQ2MmFwLTEsCisgICAgLTB4MS41ZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODIKKyAgICAweDEuNDRlYjM4MWNmMzg2YWIwNGE0Zjg2NTZhYmVhODBiODNwLTEsCisgICAgMHgxLjYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDgzCisgICAgLTB4MS40NGViMzgxY2YzODZhYjA0YTRmODY1NmFiZWE4MGI4M3AtMSwKKyAgICAtMHgxLjYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDg0CisgICAgMHgxLjQ0ZWIzOWE4YTQ4YmFlNmI5OGFlMTFjOTQwMDUzNWU1cC0xLAorICAgIDB4MS42MDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODUKKyAgICAtMHgxLjQ0ZWIzOWE4YTQ4YmFlNmI5OGFlMTFjOTQwMDUzNWU1cC0xLAorICAgIC0weDEuNjAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDg2CisgICAgMHgxLmRhZDkwMTdiOTY0MDhjMzc1ZDRmYWYwZTQ3NzZkMWZjcC0xLAorICAgIDB4MS4yZmZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDQ4NworICAgIC0weDEuZGFkOTAxN2I5NjQwOGMzNzVkNGZhZjBlNDc3NmQxZmNwLTEsCisgICAgLTB4MS4yZmZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDQ4OAorICAgIDB4MS5kYWQ5MDJmYThhYzg3MGY1MmYxYjg0M2FjODNiYzNlZHAtMSwKKyAgICAweDEuMzBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ4OQorICAgIC0weDEuZGFkOTAyZmE4YWM4NzBmNTJmMWI4NDNhYzgzYmMzZWRwLTEsCisgICAgLTB4MS4zMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDkwCisgICAgMHgxLmRhZDkwNDc5N2Y0OGVhNGVmNGZkMmU0N2ZlNGQ1MmJkcC0xLAorICAgIDB4MS4zMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDQ5MQorICAgIC0weDEuZGFkOTA0Nzk3ZjQ4ZWE0ZWY0ZmQyZTQ3ZmU0ZDUyYmRwLTEsCisgICAgLTB4MS4zMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDQ5MgorICAgIDB4MS40YjcwODA5M2M5Y2I0NTM1NWU3ODIxZTVhYWQ5OGNlOHAtMSwKKyAgICAweDEuMzdmZmZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTMKKyAgICAtMHgxLjRiNzA4MDkzYzljYjQ1MzU1ZTc4MjFlNWFhZDk4Y2U4cC0xLAorICAgIC0weDEuMzdmZmZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTQKKyAgICAweDEuNGI3MDdhN2FjZGVjYzg0MjM5NDYzZTc4YjMxMmZhMTBwLTEsCisgICAgMHgxLjM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTUKKyAgICAtMHgxLjRiNzA3YTdhY2RlY2M4NDIzOTQ2M2U3OGIzMTJmYTEwcC0xLAorICAgIC0weDEuMzhwMQorICB9LAorICB7IC8vIEVudHJ5IDQ5NgorICAgIDB4MS40YjcwNzQ2MWQxZjk5NDQ3NmM2NzdjNWFkNWRkYjI2NHAtMSwKKyAgICAweDEuMzgwMDAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTcKKyAgICAtMHgxLjRiNzA3NDYxZDFmOTk0NDc2YzY3N2M1YWQ1ZGRiMjY0cC0xLAorICAgIC0weDEuMzgwMDAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTgKKyAgICAweDEuMDY2ZTdmNzA1YTZjYTJiOWUxMDdmN2RjOWYzYjI2ZTZwLTQsCisgICAgMHgxLjA2OWM4Y3AtNAorICB9LAorICB7IC8vIEVudHJ5IDQ5OQorICAgIC0weDEuMDY2ZTdmNzA1YTZjYTJiOWUxMDdmN2RjOWYzYjI2ZTZwLTQsCisgICAgLTB4MS4wNjljOGNwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDAKKyAgICAweDEuMDVlNDc2ZDI3ZmViYzhiN2U5NjkwMDA5YjM2N2MzMjdwLTMsCisgICAgMHgxLjA2OWM4Y3AtMworICB9LAorICB7IC8vIEVudHJ5IDUwMQorICAgIC0weDEuMDVlNDc2ZDI3ZmViYzhiN2U5NjkwMDA5YjM2N2MzMjdwLTMsCisgICAgLTB4MS4wNjljOGNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDIKKyAgICAweDEuODc3ZTJkZTVjOWEwNjZiOGRiNTk1YWRjMTQ5YWYwYzBwLTMsCisgICAgMHgxLjg5ZWFkMnAtMworICB9LAorICB7IC8vIEVudHJ5IDUwMworICAgIC0weDEuODc3ZTJkZTVjOWEwNjZiOGRiNTk1YWRjMTQ5YWYwYzBwLTMsCisgICAgLTB4MS44OWVhZDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDQKKyAgICAweDEuMDNiZTA3YWNiOWRhYjcxOWI0MzQzYTMzYjlmYTZhZmVwLTIsCisgICAgMHgxLjA2OWM4Y3AtMgorICB9LAorICB7IC8vIEVudHJ5IDUwNQorICAgIC0weDEuMDNiZTA3YWNiOWRhYjcxOWI0MzQzYTMzYjlmYTZhZmVwLTIsCisgICAgLTB4MS4wNjljOGNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDYKKyAgICAweDEuNDJhYmJjNWIzYjJmOTFlOGVjZTQ2ZTVlZmZkMjgzNjlwLTIsCisgICAgMHgxLjQ4NDNiMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDUwNworICAgIC0weDEuNDJhYmJjNWIzYjJmOTFlOGVjZTQ2ZTVlZmZkMjgzNjlwLTIsCisgICAgLTB4MS40ODQzYjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDgKKyAgICAweDEuODA0NjAxNDExZDkzZjQ3NTA5MTk2NzAwNjFkZTA3ZDlwLTIsCisgICAgMHgxLjg5ZWFkNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDUwOQorICAgIC0weDEuODA0NjAxNDExZDkzZjQ3NTA5MTk2NzAwNjFkZTA3ZDlwLTIsCisgICAgLTB4MS44OWVhZDRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTAKKyAgICAweDEuYmM0YzA4YWYzNTYwODhiMTY5NDk5NWJmYWY4YTI5N2JwLTIsCisgICAgMHgxLmNiOTFmOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDUxMQorICAgIC0weDEuYmM0YzA4YWYzNTYwODhiMTY5NDk5NWJmYWY4YTI5N2JwLTIsCisgICAgLTB4MS5jYjkxZjhwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTIKKyAgICAweDEuZjY3ZWFlMzRkYzBiNDJiNDY1ZmQyYTNmYjA3NTY0YTRwLTIsCisgICAgMHgxLjA2OWM4ZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDUxMworICAgIC0weDEuZjY3ZWFlMzRkYzBiNDJiNDY1ZmQyYTNmYjA3NTY0YTRwLTIsCisgICAgLTB4MS4wNjljOGVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTQKKyAgICAweDEuMTc1MDVjODYyMzE4OThmZDg2YjE4ZDIyODJkOTNlZWRwLTEsCisgICAgMHgxLjI3NzAyMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDUxNQorICAgIC0weDEuMTc1MDVjODYyMzE4OThmZDg2YjE4ZDIyODJkOTNlZWRwLTEsCisgICAgLTB4MS4yNzcwMjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTYKKyAgICAweDEuMzIzYjhlNDBkMTY1NzVlNTBkYzdiNmU1NjdiYjUwODRwLTEsCisgICAgMHgxLjQ4NDNiMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDUxNworICAgIC0weDEuMzIzYjhlNDBkMTY1NzVlNTBkYzdiNmU1NjdiYjUwODRwLTEsCisgICAgLTB4MS40ODQzYjJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTgKKyAgICAweDEuNGJlNDliMDhhMWUxNjI5Y2JkYWE1MDdlMTgyNTVjZDhwLTEsCisgICAgMHgxLjY5MTc0NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDUxOQorICAgIC0weDEuNGJlNDliMDhhMWUxNjI5Y2JkYWE1MDdlMTgyNTVjZDhwLTEsCisgICAgLTB4MS42OTE3NDRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjAKKyAgICAweDEuNjQzMDg0N2RiYmJmZDQ2Y2JlYmJjNmQ1ZjUxYzdjNDlwLTEsCisgICAgMHgxLjg5ZWFkNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDUyMQorICAgIC0weDEuNjQzMDg0N2RiYmJmZDQ2Y2JlYmJjNmQ1ZjUxYzdjNDlwLTEsCisgICAgLTB4MS44OWVhZDZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjIKKyAgICAweDEuN2IwNWJiODdiMzg4NDRlNTYwMDNjNDFlZjgwNGIyNzNwLTEsCisgICAgMHgxLmFhYmU2OHAtMQorICB9LAorICB7IC8vIEVudHJ5IDUyMworICAgIC0weDEuN2IwNWJiODdiMzg4NDRlNTYwMDNjNDFlZjgwNGIyNzNwLTEsCisgICAgLTB4MS5hYWJlNjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjQKKyAgICAweDEuOTA0YzNiMzg5ZDU1ZDNkZWRkYjM5ZDA1ZWIzNjY1NzFwLTEsCisgICAgMHgxLmNiOTFmYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDUyNQorICAgIC0weDEuOTA0YzNiMzg5ZDU1ZDNkZWRkYjM5ZDA1ZWIzNjY1NzFwLTEsCisgICAgLTB4MS5jYjkxZmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjYKKyAgICAweDEuYTNlZGEyMTE3OThhODI2OTdkNjI0MzFmOWFlNDZjYzRwLTEsCisgICAgMHgxLmVjNjU4Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDUyNworICAgIC0weDEuYTNlZGEyMTE3OThhODI2OTdkNjI0MzFmOWFlNDZjYzRwLTEsCisgICAgLTB4MS5lYzY1OGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjgKKyAgICAweDEuYjVkNTQ4ODNmY2I2MTIzYmMyOGFhYzkxZjA4NWU0ZWVwLTEsCisgICAgMHgxLjA2OWM4ZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTI5CisgICAgLTB4MS5iNWQ1NDg4M2ZjYjYxMjNiYzI4YWFjOTFmMDg1ZTRlZXAtMSwKKyAgICAtMHgxLjA2OWM4ZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTMwCisgICAgMHgxLmM1ZjA1YTAxMzVkNDg4MmM3NjhjZGYxOGUyZTExMTJjcC0xLAorICAgIDB4MS4xNzA2NTZwMAorICB9LAorICB7IC8vIEVudHJ5IDUzMQorICAgIC0weDEuYzVmMDVhMDEzNWQ0ODgyYzc2OGNkZjE4ZTJlMTExMmNwLTEsCisgICAgLTB4MS4xNzA2NTZwMAorICB9LAorICB7IC8vIEVudHJ5IDUzMgorICAgIDB4MS5kNDJkZTUzZTMxNWM4MzljZTE4OGUyMDEyMDVlOTlkZXAtMSwKKyAgICAweDEuMjc3MDFlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzMKKyAgICAtMHgxLmQ0MmRlNTNlMzE1YzgzOWNlMTg4ZTIwMTIwNWU5OWRlcC0xLAorICAgIC0weDEuMjc3MDFlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzQKKyAgICAweDEuZTA3ZWVmNDVkOTFlZWE4YTZjYzczNjlhYTBlNTUzODhwLTEsCisgICAgMHgxLjM3ZDllNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTM1CisgICAgLTB4MS5lMDdlZWY0NWQ5MWVlYThhNmNjNzM2OWFhMGU1NTM4OHAtMSwKKyAgICAtMHgxLjM3ZDllNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTM2CisgICAgMHgxLmVhZDY4MzNiMmFhMDAyYmFhMWMyYjE5YTM4ZGM5Yjc5cC0xLAorICAgIDB4MS40ODQzYWVwMAorICB9LAorICB7IC8vIEVudHJ5IDUzNworICAgIC0weDEuZWFkNjgzM2IyYWEwMDJiYWExYzJiMTlhMzhkYzliNzlwLTEsCisgICAgLTB4MS40ODQzYWVwMAorICB9LAorICB7IC8vIEVudHJ5IDUzOAorICAgIDB4MS5mMzI5YmZmYTZhMjA4NTkxZWVjYjY5MDVkNzU5NGUzYnAtMSwKKyAgICAweDEuNThhZDc2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzkKKyAgICAtMHgxLmYzMjliZmZhNmEyMDg1OTFlZWNiNjkwNWQ3NTk0ZTNicC0xLAorICAgIC0weDEuNThhZDc2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDAKKyAgICAweDEuZjk2ZmUzOGFmYmQ5NWI1ZmNkMDg2MDgxMTBlOTM4MWZwLTEsCisgICAgMHgxLjY5MTczZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQxCisgICAgLTB4MS5mOTZmZTM4YWZiZDk1YjVmY2QwODYwODExMGU5MzgxZnAtMSwKKyAgICAtMHgxLjY5MTczZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQyCisgICAgMHgxLmZkYTI1NDU1ZDk1Njc3NzJmMjBmMjVkMTVlZmM2Nzc1cC0xLAorICAgIDB4MS43OTgxMDZwMAorICB9LAorICB7IC8vIEVudHJ5IDU0MworICAgIC0weDEuZmRhMjU0NTVkOTU2Nzc3MmYyMGYyNWQxNWVmYzY3NzVwLTEsCisgICAgLTB4MS43OTgxMDZwMAorICB9LAorICB7IC8vIEVudHJ5IDU0NAorICAgIDB4MS5mZmJjYTgxNmYxZjE1MTZlYzVkNzU3YjBkYjU0YWUzNHAtMSwKKyAgICAweDEuODllYWNlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDUKKyAgICAtMHgxLmZmYmNhODE2ZjFmMTUxNmVjNWQ3NTdiMGRiNTRhZTM0cC0xLAorICAgIC0weDEuODllYWNlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDYKKyAgICAweDEuZmZiY2E4ODIyOGIxNjMxODlhYjhkNjM3ZGI5OWJkMmRwLTEsCisgICAgMHgxLjlhNTQ5NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQ3CisgICAgLTB4MS5mZmJjYTg4MjI4YjE2MzE4OWFiOGQ2MzdkYjk5YmQyZHAtMSwKKyAgICAtMHgxLjlhNTQ5NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQ4CisgICAgMHgxLmZkYTI1NTk3MGNjZGRiOWQxMjdlY2Y2MzQwM2MyYmY3cC0xLAorICAgIDB4MS5hYWJlNWVwMAorICB9LAorICB7IC8vIEVudHJ5IDU0OQorICAgIC0weDEuZmRhMjU1OTcwY2NkZGI5ZDEyN2VjZjYzNDAzYzJiZjdwLTEsCisgICAgLTB4MS5hYWJlNWVwMAorICB9LAorICB7IC8vIEVudHJ5IDU1MAorICAgIDB4MS5mOTZmZTVhMGRhMjQ0NDg5ZmIyZjRiOTdiM2U0ODc1N3AtMSwKKyAgICAweDEuYmIyODI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTEKKyAgICAtMHgxLmY5NmZlNWEwZGEyNDQ0ODlmYjJmNGI5N2IzZTQ4NzU3cC0xLAorICAgIC0weDEuYmIyODI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTIKKyAgICAweDEuZjMyOWMyZTJjMWEzOWJhZDhlY2RjYjg3OTYxYmE0NGFwLTEsCisgICAgMHgxLmNiOTFlZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTUzCisgICAgLTB4MS5mMzI5YzJlMmMxYTM5YmFkOGVjZGNiODc5NjFiYTQ0YXAtMSwKKyAgICAtMHgxLmNiOTFlZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTU0CisgICAgMHgxLmVhZDY4NmYyZWM1NzJjODNlZDM0YTAxZjc2NGQxOTNlcC0xLAorICAgIDB4MS5kYmZiYjZwMAorICB9LAorICB7IC8vIEVudHJ5IDU1NQorICAgIC0weDEuZWFkNjg2ZjJlYzU3MmM4M2VkMzRhMDFmNzY0ZDE5M2VwLTEsCisgICAgLTB4MS5kYmZiYjZwMAorICB9LAorICB7IC8vIEVudHJ5IDU1NgorICAgIDB4MS5lMDdlZjNjOTFiZDUwMGEwZGUyMzBhZDU3MzE2MzE2M3AtMSwKKyAgICAweDEuZWM2NTdlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTcKKyAgICAtMHgxLmUwN2VmM2M5MWJkNTAwYTBkZTIzMGFkNTczMTYzMTYzcC0xLAorICAgIC0weDEuZWM2NTdlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTgKKyAgICAweDEuZDQyZGVhODgzNWM4OGFkYjljZGUxNzM0N2Y5MzRlMjVwLTEsCisgICAgMHgxLmZjY2Y0NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTU5CisgICAgLTB4MS5kNDJkZWE4ODM1Yzg4YWRiOWNkZTE3MzQ3ZjkzNGUyNXAtMSwKKyAgICAtMHgxLmZjY2Y0NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTYwCisgICAgMHgxLmM1ZjA1ZTMyYzgwZmIwZmU2MDMwMzNlYzAyOGE0YzMycC0xLAorICAgIDB4MS4wNjljODhwMQorICB9LAorICB7IC8vIEVudHJ5IDU2MQorICAgIC0weDEuYzVmMDVlMzJjODBmYjBmZTYwMzAzM2VjMDI4YTRjMzJwLTEsCisgICAgLTB4MS4wNjljODhwMQorICB9LAorICB7IC8vIEVudHJ5IDU2MgorICAgIDB4MS5iNWQ1NGQzNzMyZDNiMmU3OWQ0OTA3ZTExNTQwMWRkYXAtMSwKKyAgICAweDEuMGVkMTZjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjMKKyAgICAtMHgxLmI1ZDU0ZDM3MzJkM2IyZTc5ZDQ5MDdlMTE1NDAxZGRhcC0xLAorICAgIC0weDEuMGVkMTZjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjQKKyAgICAweDEuYTNlZGE3NDE2MWQwNmI4M2VjMmM4ZGMzOTZkODEzYjlwLTEsCisgICAgMHgxLjE3MDY1MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTY1CisgICAgLTB4MS5hM2VkYTc0MTYxZDA2YjgzZWMyYzhkYzM5NmQ4MTNiOXAtMSwKKyAgICAtMHgxLjE3MDY1MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTY2CisgICAgMHgxLjkwNGM0MjFlZmNlNThmNGU4MTcwZDM2ZGNkYThlMDJjcC0xLAorICAgIDB4MS4xZjNiMzRwMQorICB9LAorICB7IC8vIEVudHJ5IDU2NworICAgIC0weDEuOTA0YzQyMWVmY2U1OGY0ZTgxNzBkMzZkY2RhOGUwMmNwLTEsCisgICAgLTB4MS4xZjNiMzRwMQorICB9LAorICB7IC8vIEVudHJ5IDU2OAorICAgIDB4MS43YjA1YzQ1MDkzOTQ0ZDZhZmIwYzkwZDJmOWNiMjE3ZnAtMSwKKyAgICAweDEuMjc3MDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjkKKyAgICAtMHgxLjdiMDVjNDUwOTM5NDRkNmFmYjBjOTBkMmY5Y2IyMTdmcC0xLAorICAgIC0weDEuMjc3MDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzAKKyAgICAweDEuNjQzMDhmNTA2ZmZkYWYxMzI2ZDEwYjMzODAyNzhlOThwLTEsCisgICAgMHgxLjJmYTRmY3AxCisgIH0sCisgIHsgLy8gRW50cnkgNTcxCisgICAgLTB4MS42NDMwOGY1MDZmZmRhZjEzMjZkMTBiMzM4MDI3OGU5OHAtMSwKKyAgICAtMHgxLjJmYTRmY3AxCisgIH0sCisgIHsgLy8gRW50cnkgNTcyCisgICAgMHgxLjRiZTRhODA3NmMxMzVhNDhmM2YxYTFhYWEzNjI0NzVmcC0xLAorICAgIDB4MS4zN2Q5ZTBwMQorICB9LAorICB7IC8vIEVudHJ5IDU3MworICAgIC0weDEuNGJlNGE4MDc2YzEzNWE0OGYzZjFhMWFhYTM2MjQ3NWZwLTEsCisgICAgLTB4MS4zN2Q5ZTBwMQorICB9LAorICB7IC8vIEVudHJ5IDU3NAorICAgIDB4MS4zMjNiOWQ4ODhkNGRhNzdhNjEwODkzNzM1ZWVlZDFjYnAtMSwKKyAgICAweDEuNDAwZWM0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzUKKyAgICAtMHgxLjMyM2I5ZDg4OGQ0ZGE3N2E2MTA4OTM3MzVlZWVkMWNicC0xLAorICAgIC0weDEuNDAwZWM0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzYKKyAgICAweDEuMTc1MDZlMmRmYjYwM2QzNGI5YWYzOWIxMmMxZGI3MzVwLTEsCisgICAgMHgxLjQ4NDNhOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTc3CisgICAgLTB4MS4xNzUwNmUyZGZiNjAzZDM0YjlhZjM5YjEyYzFkYjczNXAtMSwKKyAgICAtMHgxLjQ4NDNhOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTc4CisgICAgMHgxLmY2N2VkNjY3MzUyZDQ4Mjc0NTAwMTNmMTVlMzIxYmZicC0yLAorICAgIDB4MS41MDc4OGNwMQorICB9LAorICB7IC8vIEVudHJ5IDU3OQorICAgIC0weDEuZjY3ZWQ2NjczNTJkNDgyNzQ1MDAxM2YxNWUzMjFiZmJwLTIsCisgICAgLTB4MS41MDc4OGNwMQorICB9LAorICB7IC8vIEVudHJ5IDU4MAorICAgIDB4MS5iYzRjMzVkYTUxZTM0Yjc3NmU1ZTA0ZGE1OGYyMzQ0MXAtMiwKKyAgICAweDEuNThhZDcwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODEKKyAgICAtMHgxLmJjNGMzNWRhNTFlMzRiNzc2ZTVlMDRkYTU4ZjIzNDQxcC0yLAorICAgIC0weDEuNThhZDcwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODIKKyAgICAweDEuODA0NjMzNmU2ODQyN2NmNzU2MDU2ZDNmNGVkYmI2NjJwLTIsCisgICAgMHgxLjYwZTI1NHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTgzCisgICAgLTB4MS44MDQ2MzM2ZTY4NDI3Y2Y3NTYwNTZkM2Y0ZWRiYjY2MnAtMiwKKyAgICAtMHgxLjYwZTI1NHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTg0CisgICAgMHgxLjQyYWJmMzg3MjkwNWU2MzJmMjA0YzQxYjI0YWY5MGI2cC0yLAorICAgIDB4MS42OTE3MzhwMQorICB9LAorICB7IC8vIEVudHJ5IDU4NQorICAgIC0weDEuNDJhYmYzODcyOTA1ZTYzMmYyMDRjNDFiMjRhZjkwYjZwLTIsCisgICAgLTB4MS42OTE3MzhwMQorICB9LAorICB7IC8vIEVudHJ5IDU4NgorICAgIDB4MS4wM2JlNDNjNjk5ZjM1MzY5OTBkY2Y1YTY2NjVhYzIzOXAtMiwKKyAgICAweDEuNzE0YzFjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODcKKyAgICAtMHgxLjAzYmU0M2M2OTlmMzUzNjk5MGRjZjVhNjY2NWFjMjM5cC0yLAorICAgIC0weDEuNzE0YzFjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODgKKyAgICAweDEuODc3ZWFkYzJmZGZjMmYwZGIxZThiNzhjZDNmYmZiZDJwLTMsCisgICAgMHgxLjc5ODFwMQorICB9LAorICB7IC8vIEVudHJ5IDU4OQorICAgIC0weDEuODc3ZWFkYzJmZGZjMmYwZGIxZThiNzhjZDNmYmZiZDJwLTMsCisgICAgLTB4MS43OTgxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTAKKyAgICAweDEuMDVlNGZkZjg0NjYzMmE4MjA4ZDkwZGU3MmQzYTZkYThwLTMsCisgICAgMHgxLjgxYjVlNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTkxCisgICAgLTB4MS4wNWU0ZmRmODQ2NjMyYTgyMDhkOTBkZTcyZDNhNmRhOHAtMywKKyAgICAtMHgxLjgxYjVlNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTkyCisgICAgMHgxLjA2NmY5YjYzMGI3MmRmZjE2NDUwZTg5YWZkZjdlMDQ4cC00LAorICAgIDB4MS44OWVhYzhwMQorICB9LAorICB7IC8vIEVudHJ5IDU5MworICAgIC0weDEuMDY2ZjliNjMwYjcyZGZmMTY0NTBlODlhZmRmN2UwNDhwLTQsCisgICAgLTB4MS44OWVhYzhwMQorICB9LAorICB7IC8vIEVudHJ5IDU5NAorICAgIDB4MS4wM2JkZjBiNzljY2Y3Mzk1MjlkNTRkNDIyODYxMDQ2Y3AtMiwKKyAgICAtMHgxLjgxYjVlZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNTk1CisgICAgLTB4MS4wM2JkZjBiNzljY2Y3Mzk1MjlkNTRkNDIyODYxMDQ2Y3AtMiwKKyAgICAweDEuODFiNWVlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTYKKyAgICAweDEuZjY3ZThiOTVmNTQ2MGVhMzY5YTgwMzgzN2I3MjFhYmRwLTIsCisgICAgLTB4MS43MTRjMjZwMgorICB9LAorICB7IC8vIEVudHJ5IDU5NworICAgIC0weDEuZjY3ZThiOTVmNTQ2MGVhMzY5YTgwMzgzN2I3MjFhYmRwLTIsCisgICAgMHgxLjcxNGMyNnAyCisgIH0sCisgIHsgLy8gRW50cnkgNTk4CisgICAgMHgxLjY0MzA3MDc5MTc1MWRjMDYzNmQxODU0ZDJiZGJjNWQ0cC0xLAorICAgIC0weDEuNjBlMjVlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTkKKyAgICAtMHgxLjY0MzA3MDc5MTc1MWRjMDYzNmQxODU0ZDJiZGJjNWQ0cC0xLAorICAgIDB4MS42MGUyNWVwMgorICB9LAorICB7IC8vIEVudHJ5IDYwMAorICAgIDB4MS5iNWQ1MzZmNTkxMTNhNDNhZjMwZThjOWRiOGE5NTFhNXAtMSwKKyAgICAtMHgxLjUwNzg5NnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjAxCisgICAgLTB4MS5iNWQ1MzZmNTkxMTNhNDNhZjMwZThjOWRiOGE5NTFhNXAtMSwKKyAgICAweDEuNTA3ODk2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDIKKyAgICAweDEuZWFkNjc5OTg1NTQ5MTQwMzE4MzQ5ZjUxMmRjYTdhNmJwLTEsCisgICAgLTB4MS40MDBlY2VwMgorICB9LAorICB7IC8vIEVudHJ5IDYwMworICAgIC0weDEuZWFkNjc5OTg1NTQ5MTQwMzE4MzQ5ZjUxMmRjYTdhNmJwLTEsCisgICAgMHgxLjQwMGVjZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNjA0CisgICAgMHgxLmZmYmNhNzAxMGUwYjA0NTJmNTYwNzVjZmQ1OTgyODgwcC0xLAorICAgIC0weDEuMmZhNTA2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDUKKyAgICAtMHgxLmZmYmNhNzAxMGUwYjA0NTJmNTYwNzVjZmQ1OTgyODgwcC0xLAorICAgIDB4MS4yZmE1MDZwMgorICB9LAorICB7IC8vIEVudHJ5IDYwNgorICAgIDB4MS5mMzI5Y2E2YmZjNzQyNWQ4OWMyYjRiOWFkNzNhYjEwOHAtMSwKKyAgICAtMHgxLjFmM2IzZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNjA3CisgICAgLTB4MS5mMzI5Y2E2YmZjNzQyNWQ4OWMyYjRiOWFkNzNhYjEwOHAtMSwKKyAgICAweDEuMWYzYjNlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDgKKyAgICAweDEuYzVmMDZmYjY5NDI3YWMwZjJkNjk0MjhkODJiNWU2NjlwLTEsCisgICAgLTB4MS4wZWQxNzZwMgorICB9LAorICB7IC8vIEVudHJ5IDYwOQorICAgIC0weDEuYzVmMDZmYjY5NDI3YWMwZjJkNjk0MjhkODJiNWU2NjlwLTEsCisgICAgMHgxLjBlZDE3NnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjEwCisgICAgMHgxLjdiMDVkODY0ZWM5ODAyYWRiYzRiNTU3N2MyMzM4MzZhcC0xLAorICAgIC0weDEuZmNjZjVhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTEKKyAgICAtMHgxLjdiMDVkODY0ZWM5ODAyYWRiYzRiNTU3N2MyMzM4MzZhcC0xLAorICAgIDB4MS5mY2NmNWFwMQorICB9LAorICB7IC8vIEVudHJ5IDYxMgorICAgIDB4MS4xNzUwODA4MTg1YTk5OGJiY2VjYzNhNmFjMGNiMjkwN3AtMSwKKyAgICAtMHgxLmRiZmJjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjEzCisgICAgLTB4MS4xNzUwODA4MTg1YTk5OGJiY2VjYzNhNmFjMGNiMjkwN3AtMSwKKyAgICAweDEuZGJmYmM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTQKKyAgICAweDEuNDJhYzBkZDk0OTUyMTE4MTZiZjA0Y2E1M2JjZTRiZWFwLTIsCisgICAgLTB4MS5iYjI4MzZwMQorICB9LAorICB7IC8vIEVudHJ5IDYxNQorICAgIC0weDEuNDJhYzBkZDk0OTUyMTE4MTZiZjA0Y2E1M2JjZTRiZWFwLTIsCisgICAgMHgxLmJiMjgzNnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjE2CisgICAgMHgxLjA2NmZjYTM5YTcwYjUyZDA2ZjJjZDdlYWI2OWMzMWYycC00LAorICAgIC0weDEuOWE1NGE0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTcKKyAgICAtMHgxLjA2NmZjYTM5YTcwYjUyZDA2ZjJjZDdlYWI2OWMzMWYycC00LAorICAgIDB4MS45YTU0YTRwMQorICB9LAorICB7IC8vIEVudHJ5IDYxOAorICAgIC0weDEuODc3ZDkzMTI5OGU2ZmJjNjU0ZjA2NTUzNmNmZjJiNTRwLTMsCisgICAgLTB4MS43OTgxMTJwMQorICB9LAorICB7IC8vIEVudHJ5IDYxOQorICAgIDB4MS44NzdkOTMxMjk4ZTZmYmM2NTRmMDY1NTM2Y2ZmMmI1NHAtMywKKyAgICAweDEuNzk4MTEycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjAKKyAgICAtMHgxLmJjNGJjMjg3NWViNmQzOGVkYTNiNDljYjIzMjBiNTYxcC0yLAorICAgIC0weDEuNThhZDgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjEKKyAgICAweDEuYmM0YmMyODc1ZWI2ZDM4ZWRhM2I0OWNiMjMyMGI1NjFwLTIsCisgICAgMHgxLjU4YWQ4MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjIyCisgICAgLTB4MS40YmU0N2Q2MzU0YzRjZWQ1Mzc4MGIxYjUxOWFjZGVjMnAtMSwKKyAgICAtMHgxLjM3ZDllZXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjIzCisgICAgMHgxLjRiZTQ3ZDYzNTRjNGNlZDUzNzgwYjFiNTE5YWNkZWMycC0xLAorICAgIDB4MS4zN2Q5ZWVwMQorICB9LAorICB7IC8vIEVudHJ5IDYyNAorICAgIC0weDEuYTNlZDhiY2IzNWNiY2Y4YzYwODlmODJhOTFjMzFkNWJwLTEsCisgICAgLTB4MS4xNzA2NWNwMQorICB9LAorICB7IC8vIEVudHJ5IDYyNQorICAgIDB4MS5hM2VkOGJjYjM1Y2JjZjhjNjA4OWY4MmE5MWMzMWQ1YnAtMSwKKyAgICAweDEuMTcwNjVjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjYKKyAgICAtMHgxLmUwN2VlNDk2ZWExMDk2NTRjNDJlMTcxZmRjNDUzN2M0cC0xLAorICAgIC0weDEuZWM2NTk0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjcKKyAgICAweDEuZTA3ZWU0OTZlYTEwOTY1NGM0MmUxNzFmZGM0NTM3YzRwLTEsCisgICAgMHgxLmVjNjU5NHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjI4CisgICAgLTB4MS5mZGEyNTIyMjE5Njg5ZDBlODA2OWQ5MGY1Yzk2OWI5MnAtMSwKKyAgICAtMHgxLmFhYmU3MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjI5CisgICAgMHgxLmZkYTI1MjIyMTk2ODlkMGU4MDY5ZDkwZjVjOTY5YjkycC0xLAorICAgIDB4MS5hYWJlNzBwMAorICB9LAorICB7IC8vIEVudHJ5IDYzMAorICAgIC0weDEuZjk2ZmU4MDJmZTU3MDM3MmQwZmNiNmU5MzRiNDMwNjFwLTEsCisgICAgLTB4MS42OTE3NGNwMAorICB9LAorICB7IC8vIEVudHJ5IDYzMQorICAgIDB4MS5mOTZmZTgwMmZlNTcwMzcyZDBmY2I2ZTkzNGI0MzA2MXAtMSwKKyAgICAweDEuNjkxNzRjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzIKKyAgICAtMHgxLmQ0MmRlZDU2YWU4OGE2ZTFjZjI3MGFmMjdlNmYxODA0cC0xLAorICAgIC0weDEuMjc3MDI4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzMKKyAgICAweDEuZDQyZGVkNTZhZTg4YTZlMWNmMjcwYWYyN2U2ZjE4MDRwLTEsCisgICAgMHgxLjI3NzAyOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjM0CisgICAgLTB4MS45MDRjNDUzMjZkNmRkZTIyNDM4MWQxZDU5MGFkYTQxY3AtMSwKKyAgICAtMHgxLmNiOTIwYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDYzNQorICAgIDB4MS45MDRjNDUzMjZkNmRkZTIyNDM4MWQxZDU5MGFkYTQxY3AtMSwKKyAgICAweDEuY2I5MjBhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjM2CisgICAgLTB4MS4zMjNiOWNhZGJiMTllNzVhNDQ0ODNmYjY0YWQ4ZGRmNnAtMSwKKyAgICAtMHgxLjQ4NDNjNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDYzNworICAgIDB4MS4zMjNiOWNhZGJiMTllNzVhNDQ0ODNmYjY0YWQ4ZGRmNnAtMSwKKyAgICAweDEuNDg0M2M0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjM4CisgICAgLTB4MS44MDQ2MjY1NGJkZTc2NmZhZjQ3ZjMxNDBlMjkwOTk2ZHAtMiwKKyAgICAtMHgxLjg5ZWFmY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDYzOQorICAgIDB4MS44MDQ2MjY1NGJkZTc2NmZhZjQ3ZjMxNDBlMjkwOTk2ZHAtMiwKKyAgICAweDEuODllYWZjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjQwCisgICAgLTB4MS4wNWU0Y2EyMWYzODZhODJiYzJlNGVmY2RlYmIxOTYyYnAtMywKKyAgICAtMHgxLjA2OWNlMHAtMworICB9LAorICB7IC8vIEVudHJ5IDY0MQorICAgIDB4MS4wNWU0Y2EyMWYzODZhODJiYzJlNGVmY2RlYmIxOTYyYnAtMywKKyAgICAweDEuMDY5Y2UwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNjQyCisgICAgMHgxLjA1ZTQyMzgzMGJlMDFmOWZlM2M1N2QwNjg2N2UwMDU2cC0zLAorICAgIDB4MS4wNjljMzhwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDMKKyAgICAtMHgxLjA1ZTQyMzgzMGJlMDFmOWZlM2M1N2QwNjg2N2UwMDU2cC0zLAorICAgIC0weDEuMDY5YzM4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNjQ0CisgICAgMHgxLjgwNDVkODc4NTJmMTMwN2ZlYTZkYzc1MWM0ZDE1OTkycC0yLAorICAgIDB4MS44OWVhYThwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDUKKyAgICAtMHgxLjgwNDVkODc4NTJmMTMwN2ZlYTZkYzc1MWM0ZDE1OTkycC0yLAorICAgIC0weDEuODllYWE4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjQ2CisgICAgMHgxLjMyM2I3YjA0ZWU4OGNmZjk4YjJhMTYyMGUxZjYxYTAxcC0xLAorICAgIDB4MS40ODQzOWFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDcKKyAgICAtMHgxLjMyM2I3YjA0ZWU4OGNmZjk4YjJhMTYyMGUxZjYxYTAxcC0xLAorICAgIC0weDEuNDg0MzlhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjQ4CisgICAgMHgxLjkwNGMyYjAyYWE1OTUyOGNlMDQ0YmYyMjEzYzk2ODU5cC0xLAorICAgIDB4MS5jYjkxZTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDkKKyAgICAtMHgxLjkwNGMyYjAyYWE1OTUyOGNlMDQ0YmYyMjEzYzk2ODU5cC0xLAorICAgIC0weDEuY2I5MWUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjUwCisgICAgMHgxLmQ0MmRkZDI1YjM3OTdlNmE2NzlmNzZlMDVlNmMzZTA4cC0xLAorICAgIDB4MS4yNzcwMTRwMAorICB9LAorICB7IC8vIEVudHJ5IDY1MQorICAgIC0weDEuZDQyZGRkMjViMzc5N2U2YTY3OWY3NmUwNWU2YzNlMDhwLTEsCisgICAgLTB4MS4yNzcwMTRwMAorICB9LAorICB7IC8vIEVudHJ5IDY1MgorICAgIDB4MS5mOTZmZTFhMGIxMmQwYWQ0ZmE4YzgyZDhhZjk4OWM1YXAtMSwKKyAgICAweDEuNjkxNzM4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTMKKyAgICAtMHgxLmY5NmZlMWEwYjEyZDBhZDRmYThjODJkOGFmOTg5YzVhcC0xLAorICAgIC0weDEuNjkxNzM4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTQKKyAgICAweDEuZmRhMjU1Zjk2MDk0ZDhmZTRlODU5YzRjZjBkZDY4YTVwLTEsCisgICAgMHgxLmFhYmU1Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjU1CisgICAgLTB4MS5mZGEyNTVmOTYwOTRkOGZlNGU4NTljNGNmMGRkNjhhNXAtMSwKKyAgICAtMHgxLmFhYmU1Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjU2CisgICAgMHgxLmUwN2VmMjY3NzQ4Yjk4Mjc3OGY4ZDUwZDI5ODFiYjNhcC0xLAorICAgIDB4MS5lYzY1ODBwMAorICB9LAorICB7IC8vIEVudHJ5IDY1NworICAgIC0weDEuZTA3ZWYyNjc3NDhiOTgyNzc4ZjhkNTBkMjk4MWJiM2FwLTEsCisgICAgLTB4MS5lYzY1ODBwMAorICB9LAorICB7IC8vIEVudHJ5IDY1OAorICAgIDB4MS5hM2VkYTJhZGIwMTE0M2ZiMjE0NTNiMjBiZDE3NDhmZXAtMSwKKyAgICAweDEuMTcwNjUycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTkKKyAgICAtMHgxLmEzZWRhMmFkYjAxMTQzZmIyMTQ1M2IyMGJkMTc0OGZlcC0xLAorICAgIC0weDEuMTcwNjUycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjAKKyAgICAweDEuNGJlNDliZDg4YTY0YTBiYjQxNGRkYWNhYzRmYThkZTlwLTEsCisgICAgMHgxLjM3ZDllNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjYxCisgICAgLTB4MS40YmU0OWJkODhhNjRhMGJiNDE0ZGRhY2FjNGZhOGRlOXAtMSwKKyAgICAtMHgxLjM3ZDllNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjYyCisgICAgMHgxLmJjNGMwYTliMzc4MmUyMjBhZTU1Nzg2MzY5Y2NmMTkwcC0yLAorICAgIDB4MS41OGFkNzZwMQorICB9LAorICB7IC8vIEVudHJ5IDY2MworICAgIC0weDEuYmM0YzBhOWIzNzgyZTIyMGFlNTU3ODYzNjljY2YxOTBwLTIsCisgICAgLTB4MS41OGFkNzZwMQorICB9LAorICB7IC8vIEVudHJ5IDY2NAorICAgIDB4MS44NzdlMzAxZjQzY2FmZmZlNjY0NGE4OTU4ZjEwODcyOXAtMywKKyAgICAweDEuNzk4MTA4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjUKKyAgICAtMHgxLjg3N2UzMDFmNDNjYWZmZmU2NjQ0YTg5NThmMTA4NzI5cC0zLAorICAgIC0weDEuNzk4MTA4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjYKKyAgICAtMHgxLjA2NmU4YWUxZjgyNGE2OTgxN2U2YTgwNmU2MzE3ZTI4cC00LAorICAgIDB4MS45YTU0OWFwMQorICB9LAorICB7IC8vIEVudHJ5IDY2NworICAgIDB4MS4wNjZlOGFlMWY4MjRhNjk4MTdlNmE4MDZlNjMxN2UyOHAtNCwKKyAgICAtMHgxLjlhNTQ5YXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjY4CisgICAgLTB4MS40MmFiYzFlY2ExMWEwYWQxMmNhNmVlZmYxOTczMThhYXAtMiwKKyAgICAweDEuYmIyODJjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjkKKyAgICAweDEuNDJhYmMxZWNhMTFhMGFkMTJjYTZlZWZmMTk3MzE4YWFwLTIsCisgICAgLTB4MS5iYjI4MmNwMQorICB9LAorICB7IC8vIEVudHJ5IDY3MAorICAgIC0weDEuMTc1MDVlZmI4MTE5NzczYzY0NzQ2OGJlMWRmZWU0NWVwLTEsCisgICAgMHgxLmRiZmJiZXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjcxCisgICAgMHgxLjE3NTA1ZWZiODExOTc3M2M2NDc0NjhiZTFkZmVlNDVlcC0xLAorICAgIC0weDEuZGJmYmJlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzIKKyAgICAtMHgxLjdiMDViZDgwOTFjZDc5ZGZmMzU5Yzg0MTJiMGRlMWE5cC0xLAorICAgIDB4MS5mY2NmNTBwMQorICB9LAorICB7IC8vIEVudHJ5IDY3MworICAgIDB4MS43YjA1YmQ4MDkxY2Q3OWRmZjM1OWM4NDEyYjBkZTFhOXAtMSwKKyAgICAtMHgxLmZjY2Y1MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjc0CisgICAgLTB4MS5jNWYwNTk4MmVhYmYwMjI3NDg5NjA5NjE2NjZkNTQwZHAtMSwKKyAgICAweDEuMGVkMTcwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzUKKyAgICAweDEuYzVmMDU5ODJlYWJmMDIyNzQ4OTYwOTYxNjY2ZDU0MGRwLTEsCisgICAgLTB4MS4wZWQxNzBwMgorICB9LAorICB7IC8vIEVudHJ5IDY3NgorICAgIC0weDEuZjMyOWJmYmRhODEyMmY4M2UzYTFlYTAyNDJlYjc2YWFwLTEsCisgICAgMHgxLjFmM2IzOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjc3CisgICAgMHgxLmYzMjliZmJkYTgxMjJmODNlM2ExZWEwMjQyZWI3NmFhcC0xLAorICAgIC0weDEuMWYzYjM4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzgKKyAgICAtMHgxLmZmYmNhODhhZTkwZjA5MDBiNmQzYWQ4OWVkZGQyYzgwcC0xLAorICAgIDB4MS4yZmE1cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzkKKyAgICAweDEuZmZiY2E4OGFlOTBmMDkwMGI2ZDNhZDg5ZWRkZDJjODBwLTEsCisgICAgLTB4MS4yZmE1cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODAKKyAgICAtMHgxLmVhZDY4NzQwOWM5NWRjYWY2MWFmOTg1MTM1MTdmNTA3cC0xLAorICAgIDB4MS40MDBlYzhwMgorICB9LAorICB7IC8vIEVudHJ5IDY4MQorICAgIDB4MS5lYWQ2ODc0MDljOTVkY2FmNjFhZjk4NTEzNTE3ZjUwN3AtMSwKKyAgICAtMHgxLjQwMGVjOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjgyCisgICAgLTB4MS5iNWQ1NGZkNzkzNzJiOTBkNWQ0YzdhY2Y3YWRhZWQ0MnAtMSwKKyAgICAweDEuNTA3ODkwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODMKKyAgICAweDEuYjVkNTRmZDc5MzcyYjkwZDVkNGM3YWNmN2FkYWVkNDJwLTEsCisgICAgLTB4MS41MDc4OTBwMgorICB9LAorICB7IC8vIEVudHJ5IDY4NAorICAgIC0weDEuNjQzMDkyZjQyYWU3OTczNzU1MzE0MjBjMDA1Y2EyY2ZwLTEsCisgICAgMHgxLjYwZTI1OHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjg1CisgICAgMHgxLjY0MzA5MmY0MmFlNzk3Mzc1NTMxNDIwYzAwNWNhMmNmcC0xLAorICAgIC0weDEuNjBlMjU4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODYKKyAgICAtMHgxLmY2N2VkZjNiN2JlZTg1NTRkNTRkODRlYTgzZjZjYjIxcC0yLAorICAgIDB4MS43MTRjMjBwMgorICB9LAorICB7IC8vIEVudHJ5IDY4NworICAgIDB4MS5mNjdlZGYzYjdiZWU4NTU0ZDU0ZDg0ZWE4M2Y2Y2IyMXAtMiwKKyAgICAtMHgxLjcxNGMyMHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjg4CisgICAgLTB4MS4wM2JlNGQ5M2Q5NDkzMjUzNDBiMmY0NjQyMDE1NDVhN3AtMiwKKyAgICAweDEuODFiNWU4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODkKKyAgICAweDEuMDNiZTRkOTNkOTQ5MzI1MzQwYjJmNDY0MjAxNTQ1YTdwLTIsCisgICAgLTB4MS44MWI1ZThwMgorICB9LAorICB7IC8vIEVudHJ5IDY5MAorICAgIDB4MS5lZmIyNmNmYTIwZjIwOThmZjdlOWU0MmYwMjYwZWIwMXAtNSwKKyAgICAweDEuZWZmZmZlcC01CisgIH0sCisgIHsgLy8gRW50cnkgNjkxCisgICAgLTB4MS5lZmIyNmNmYTIwZjIwOThmZjdlOWU0MmYwMjYwZWIwMXAtNSwKKyAgICAtMHgxLmVmZmZmZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDY5MgorICAgIDB4MS5lZmIyNmVmOTMwYzRkM2YyYjBkYmUxOTMxYmE1YWU2NHAtNSwKKyAgICAweDEuZjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTMKKyAgICAtMHgxLmVmYjI2ZWY5MzBjNGQzZjJiMGRiZTE5MzFiYTVhZTY0cC01LAorICAgIC0weDEuZjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTQKKyAgICAweDEuZWZiMjcwZjg0MDk3OWM2NWI3NWVlNWM2NzAxNmE4NjZwLTUsCisgICAgMHgxLmYwMDAwMnAtNQorICB9LAorICB7IC8vIEVudHJ5IDY5NQorICAgIC0weDEuZWZiMjcwZjg0MDk3OWM2NWI3NWVlNWM2NzAxNmE4NjZwLTUsCisgICAgLTB4MS5mMDAwMDJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTYKKyAgICAweDEuZjZiYWE4MTZmY2U1ZWE1YTYwZDhjOWZkMmEyODkzODBwLTQsCisgICAgMHgxLmY3ZmZmZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDY5NworICAgIC0weDEuZjZiYWE4MTZmY2U1ZWE1YTYwZDhjOWZkMmEyODkzODBwLTQsCisgICAgLTB4MS5mN2ZmZmVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTgKKyAgICAweDEuZjZiYWFhMTMxZGU2NDM4ZTU2MTEyNzk4NjRmZTc2NjNwLTQsCisgICAgMHgxLmY4cC00CisgIH0sCisgIHsgLy8gRW50cnkgNjk5CisgICAgLTB4MS5mNmJhYWExMzFkZTY0MzhlNTYxMTI3OTg2NGZlNzY2M3AtNCwKKyAgICAtMHgxLmY4cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzAwCisgICAgMHgxLmY2YmFhYzBmM2VlNjk0ZTc2MGExMzhiYzA2YzhiZTNkcC00LAorICAgIDB4MS5mODAwMDJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDEKKyAgICAtMHgxLmY2YmFhYzBmM2VlNjk0ZTc2MGExMzhiYzA2YzhiZTNkcC00LAorICAgIC0weDEuZjgwMDAycC00CisgIH0sCisgIHsgLy8gRW50cnkgNzAyCisgICAgMHgxLjRhOGMzOTU1NTJmYjQzMmFmMzE3ODBlODgzYzk4ZjcxcC0zLAorICAgIDB4MS40YmZmZmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDMKKyAgICAtMHgxLjRhOGMzOTU1NTJmYjQzMmFmMzE3ODBlODgzYzk4ZjcxcC0zLAorICAgIC0weDEuNGJmZmZlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzA0CisgICAgMHgxLjRhOGMzYjRlOWM3ZmZmZDQ4MzA1ZjQ0YTQyZjVmNTBmcC0zLAorICAgIDB4MS40Y3AtMworICB9LAorICB7IC8vIEVudHJ5IDcwNQorICAgIC0weDEuNGE4YzNiNGU5YzdmZmZkNDgzMDVmNDRhNDJmNWY1MGZwLTMsCisgICAgLTB4MS40Y3AtMworICB9LAorICB7IC8vIEVudHJ5IDcwNgorICAgIDB4MS40YThjM2Q0N2U2MDRhN2Q1NGYzZjdkZTQwMjQwOWUyY3AtMywKKyAgICAweDEuNGMwMDAycC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzA3CisgICAgLTB4MS40YThjM2Q0N2U2MDRhN2Q1NGYzZjdkZTQwMjQwOWUyY3AtMywKKyAgICAtMHgxLjRjMDAwMnAtMworICB9LAorICB7IC8vIEVudHJ5IDcwOAorICAgIDB4MS4yZTljZDgzNjMwZWIzNWMxMmVmY2ZiODQxMzU4Mzk5OHAtMiwKKyAgICAweDEuMzMzMzMycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzA5CisgICAgLTB4MS4yZTljZDgzNjMwZWIzNWMxMmVmY2ZiODQxMzU4Mzk5OHAtMiwKKyAgICAtMHgxLjMzMzMzMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDcxMAorICAgIDB4MS4yZTljZGExZjUyYzg4MDQyODMzZjIzNmZmMGY5ZDQ4NnAtMiwKKyAgICAweDEuMzMzMzM0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzExCisgICAgLTB4MS4yZTljZGExZjUyYzg4MDQyODMzZjIzNmZmMGY5ZDQ4NnAtMiwKKyAgICAtMHgxLjMzMzMzNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDcxMgorICAgIDB4MS4yZTljZGMwODc0YTU3ZjFjYTBmOTc2YTliMDFlNGE3MXAtMiwKKyAgICAweDEuMzMzMzM2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzEzCisgICAgLTB4MS4yZTljZGMwODc0YTU3ZjFjYTBmOTc2YTliMDFlNGE3MXAtMiwKKyAgICAtMHgxLjMzMzMzNnAtMgorICB9LAorICB7IC8vIEVudHJ5IDcxNAorICAgIDB4MS4zZmFlZmIyYjY4ZTY3ODZlYjY5MmJkNGU0MDQ1MjEzZXAtMSwKKyAgICAweDEuNTk0MzE2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzE1CisgICAgLTB4MS4zZmFlZmIyYjY4ZTY3ODZlYjY5MmJkNGU0MDQ1MjEzZXAtMSwKKyAgICAtMHgxLjU5NDMxNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxNgorICAgIDB4MS4zZmFlZmNiYjU3YzI2YjBkODRiNjNkYmZiNzJiNDEzYnAtMSwKKyAgICAweDEuNTk0MzE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzE3CisgICAgLTB4MS4zZmFlZmNiYjU3YzI2YjBkODRiNjNkYmZiNzJiNDEzYnAtMSwKKyAgICAtMHgxLjU5NDMxOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxOAorICAgIDB4MS4zZmFlZmU0YjQ2OWQxZGZkNTYxZTY2NmVkZGE3YzZlNnAtMSwKKyAgICAweDEuNTk0MzFhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzE5CisgICAgLTB4MS4zZmFlZmU0YjQ2OWQxZGZkNTYxZTY2NmVkZGE3YzZlNnAtMSwKKyAgICAtMHgxLjU5NDMxYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDcyMAorICAgIDB4MS42ODg4YTM3NWFiMjI4YzFlMDMxYzQwMDU3Njk1MDlmOXAtMSwKKyAgICAweDEuOGZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzIxCisgICAgLTB4MS42ODg4YTM3NWFiMjI4YzFlMDMxYzQwMDU3Njk1MDlmOXAtMSwKKyAgICAtMHgxLjhmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDcyMgorICAgIDB4MS42ODg4YTRlMTM0YjJlYTUyMGIyMjZlY2E4Njk0YjNhMnAtMSwKKyAgICAweDEuOTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjMKKyAgICAtMHgxLjY4ODhhNGUxMzRiMmVhNTIwYjIyNmVjYTg2OTRiM2EycC0xLAorICAgIC0weDEuOTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjQKKyAgICAweDEuNjg4OGE2NGNiZTQxZGZmZDZlNDc2OGRjY2E0ZGI1M2JwLTEsCisgICAgMHgxLjkwMDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDcyNQorICAgIC0weDEuNjg4OGE2NGNiZTQxZGZmZDZlNDc2OGRjY2E0ZGI1M2JwLTEsCisgICAgLTB4MS45MDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjYKKyAgICAtMC4wZiwKKyAgICAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNzI3CisgICAgMC4wZiwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjgKKyAgICAwLjAsCisgICAgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNzI5CisgICAgMC4wZiwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzAKKyAgICAtMC4wZiwKKyAgICAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNzMxCisgICAgMHgxLjkxZjY1ZGNjZmVhZDM1M2Q4ZGI5YzMyZjEyMjYyNzMwcC01LAorICAgIDB4MS45MjFmYjRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzIKKyAgICAtMHgxLjkxZjY1ZGNjZmVhZDM1M2Q4ZGI5YzMyZjEyMjYyNzMwcC01LAorICAgIC0weDEuOTIxZmI0cC01CisgIH0sCisgIHsgLy8gRW50cnkgNzMzCisgICAgMHgxLjkxZjY1ZmNjNjBjYjZkMDlmY2M1YzM1ZGQ2YTc5OGM4cC01LAorICAgIDB4MS45MjFmYjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzQKKyAgICAtMHgxLjkxZjY1ZmNjNjBjYjZkMDlmY2M1YzM1ZGQ2YTc5OGM4cC01LAorICAgIC0weDEuOTIxZmI2cC01CisgIH0sCisgIHsgLy8gRW50cnkgNzM1CisgICAgMHgxLjkxZjY2MWNiYzJlOWEzNDQ3NTcxZjcyYmNmYmMyMWUycC01LAorICAgIDB4MS45MjFmYjhwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzYKKyAgICAtMHgxLjkxZjY2MWNiYzJlOWEzNDQ3NTcxZjcyYmNmYmMyMWUycC01LAorICAgIC0weDEuOTIxZmI4cC01CisgIH0sCisgIHsgLy8gRW50cnkgNzM3CisgICAgMHgxLjkxN2E2YTdmZTgyOTdiZjBhMTEyNWZiMDJiMjAzOGFlcC00LAorICAgIDB4MS45MjFmYjRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzgKKyAgICAtMHgxLjkxN2E2YTdmZTgyOTdiZjBhMTEyNWZiMDJiMjAzOGFlcC00LAorICAgIC0weDEuOTIxZmI0cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzM5CisgICAgMHgxLjkxN2E2YzdkNzEwM2I5ZDkwZTA5NjE1MTY0NDQ5YzZicC00LAorICAgIDB4MS45MjFmYjZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDAKKyAgICAtMHgxLjkxN2E2YzdkNzEwM2I5ZDkwZTA5NjE1MTY0NDQ5YzZicC00LAorICAgIC0weDEuOTIxZmI2cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzQxCisgICAgMHgxLjkxN2E2ZTdhZjlkZGYxN2I5MTRlNmQyZThlODNiMzNlcC00LAorICAgIDB4MS45MjFmYjhwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDIKKyAgICAtMHgxLjkxN2E2ZTdhZjlkZGYxN2I5MTRlNmQyZThlODNiMzNlcC00LAorICAgIC0weDEuOTIxZmI4cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzQzCisgICAgMHgxLjhmOGI4Mjg4OTI5NmI1Y2Y3OTA0ZGIxZTc0YjM0NjZicC0zLAorICAgIDB4MS45MjFmYjRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDQKKyAgICAtMHgxLjhmOGI4Mjg4OTI5NmI1Y2Y3OTA0ZGIxZTc0YjM0NjZicC0zLAorICAgIC0weDEuOTIxZmI0cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzQ1CisgICAgMHgxLjhmOGI4NDdlYmMxM2I4OTk4ZWM1YjM3ZTcwNjUzNDFlcC0zLAorICAgIDB4MS45MjFmYjZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDYKKyAgICAtMHgxLjhmOGI4NDdlYmMxM2I4OTk4ZWM1YjM3ZTcwNjUzNDFlcC0zLAorICAgIC0weDEuOTIxZmI2cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzQ3CisgICAgMHgxLjhmOGI4Njc0ZTU5MGEyNmFlYzNlYTAxZDMwYWVkNDg2cC0zLAorICAgIDB4MS45MjFmYjhwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDgKKyAgICAtMHgxLjhmOGI4Njc0ZTU5MGEyNmFlYzNlYTAxZDMwYWVkNDg2cC0zLAorICAgIC0weDEuOTIxZmI4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzQ5CisgICAgMHgxLjg3ZGUyOTNmNTY5NzE3YTQyYTNiZGIwMWFlYWUyMDYzcC0yLAorICAgIDB4MS45MjFmYjRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTAKKyAgICAtMHgxLjg3ZGUyOTNmNTY5NzE3YTQyYTNiZGIwMWFlYWUyMDYzcC0yLAorICAgIC0weDEuOTIxZmI0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzUxCisgICAgMHgxLjg3ZGUyYjE4NWQ1NDE3ZGNhODAwYjg1Y2ExMzE5MDQzcC0yLAorICAgIDB4MS45MjFmYjZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTIKKyAgICAtMHgxLjg3ZGUyYjE4NWQ1NDE3ZGNhODAwYjg1Y2ExMzE5MDQzcC0yLAorICAgIC0weDEuOTIxZmI2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzUzCisgICAgMHgxLjg3ZGUyY2YxNjQxMGI2MWQ5YWZmN2U2MjhmYzg1M2IycC0yLAorICAgIDB4MS45MjFmYjhwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTQKKyAgICAtMHgxLjg3ZGUyY2YxNjQxMGI2MWQ5YWZmN2U2MjhmYzg1M2IycC0yLAorICAgIC0weDEuOTIxZmI4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzU1CisgICAgMHgxLjZhMDllNTgyYWEzOTQ1NDYxYjVhOGEwNzg3ZDVhYjVicC0xLAorICAgIDB4MS45MjFmYjRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTYKKyAgICAtMHgxLjZhMDllNTgyYWEzOTQ1NDYxYjVhOGEwNzg3ZDVhYjVicC0xLAorICAgIC0weDEuOTIxZmI0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzU3CisgICAgMHgxLjZhMDllNmVjYjQxZmRkN2U2ODE4NzJjODU0ODg3MDE5cC0xLAorICAgIDB4MS45MjFmYjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTgKKyAgICAtMHgxLjZhMDllNmVjYjQxZmRkN2U2ODE4NzJjODU0ODg3MDE5cC0xLAorICAgIC0weDEuOTIxZmI2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzU5CisgICAgMHgxLjZhMDllODU2YmUwNTBiYWNjZGU5YTc2OTYxZTg0YWE3cC0xLAorICAgIDB4MS45MjFmYjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjAKKyAgICAtMHgxLjZhMDllODU2YmUwNTBiYWNjZGU5YTc2OTYxZTg0YWE3cC0xLAorICAgIC0weDEuOTIxZmI4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzYxCisgICAgMHgxLmZmZmZmZmZmZmZmZTY1NDZjYzM4MjExYzI2ZGFiZWVicC0xLAorICAgIDB4MS45MjFmYjRwMAorICB9LAorICB7IC8vIEVudHJ5IDc2MgorICAgIC0weDEuZmZmZmZmZmZmZmZlNjU0NmNjMzgyMTFjMjZkYWJlZWJwLTEsCisgICAgLTB4MS45MjFmYjRwMAorICB9LAorICB7IC8vIEVudHJ5IDc2MworICAgIDB4MS5mZmZmZmZmZmZmZmY3NjUyMTI0OWM3NDIyOTMwZWQ4MnAtMSwKKyAgICAweDEuOTIxZmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjQKKyAgICAtMHgxLmZmZmZmZmZmZmZmZjc2NTIxMjQ5Yzc0MjI5MzBlZDgycC0xLAorICAgIC0weDEuOTIxZmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjUKKyAgICAweDEuZmZmZmZmZmZmZmY4ODc1ZDU4NWI2ZDZjZmNlOTdkOWNwLTEsCisgICAgMHgxLjkyMWZiOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzY2CisgICAgLTB4MS5mZmZmZmZmZmZmZjg4NzVkNTg1YjZkNmNmY2U5N2Q5Y3AtMSwKKyAgICAtMHgxLjkyMWZiOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzY3CisgICAgMHgxLjQ0NDJkMTg0Njk4ODMxZjE1YjYzMTViZmE2YjVhZTc1cC0yMywKKyAgICAweDEuOTIxZmI0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjgKKyAgICAtMHgxLjQ0NDJkMTg0Njk4ODMxZjE1YjYzMTViZmE2YjVhZTc1cC0yMywKKyAgICAtMHgxLjkyMWZiNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzY5CisgICAgLTB4MS43NzdhNWNmNzJjZWM1ZmQ2MTg5NmNiNGY0MGQxZGU3OXAtMjQsCisgICAgMHgxLjkyMWZiNnAxCisgIH0sCisgIHsgLy8gRW50cnkgNzcwCisgICAgMHgxLjc3N2E1Y2Y3MmNlYzVmZDYxODk2Y2I0ZjQwZDFkZTc5cC0yNCwKKyAgICAtMHgxLjkyMWZiNnAxCisgIH0sCisgIHsgLy8gRW50cnkgNzcxCisgICAgLTB4MS41ZGRlOTczZGNiMzQ2YWZhNDYyMDNjZGRjNmY3ZmU5N3AtMjIsCisgICAgMHgxLjkyMWZiOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzcyCisgICAgMHgxLjVkZGU5NzNkY2IzNDZhZmE0NjIwM2NkZGM2ZjdmZTk3cC0yMiwKKyAgICAtMHgxLjkyMWZiOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzczCisgICAgLTB4MS40NDQyZDE4NDY5ODQyMTc2Mjg4NzJlNTZlYjU4YjRjMXAtMjIsCisgICAgMHgxLjkyMWZiNHAyCisgIH0sCisgIHsgLy8gRW50cnkgNzc0CisgICAgMHgxLjQ0NDJkMTg0Njk4NDIxNzYyODg3MmU1NmViNThiNGMxcC0yMiwKKyAgICAtMHgxLjkyMWZiNHAyCisgIH0sCisgIHsgLy8gRW50cnkgNzc1CisgICAgMHgxLjc3N2E1Y2Y3MmNlYWNiZjZlYzY1N2U5NzdlZjc3MWYxcC0yMywKKyAgICAweDEuOTIxZmI2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzYKKyAgICAtMHgxLjc3N2E1Y2Y3MmNlYWNiZjZlYzY1N2U5NzdlZjc3MWYxcC0yMywKKyAgICAtMHgxLjkyMWZiNnAyCisgIH0sCisgIHsgLy8gRW50cnkgNzc3CisgICAgMHgxLjVkZGU5NzNkY2IxZmZmMTBiYjAzODg0NzllODJmNGJicC0yMSwKKyAgICAweDEuOTIxZmI4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzgKKyAgICAtMHgxLjVkZGU5NzNkY2IxZmZmMTBiYjAzODg0NzllODJmNGJicC0yMSwKKyAgICAtMHgxLjkyMWZiOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNzc5CisgICAgLTB4MS40NDQyZDE4NDY5NzNkZjg5NWQxNzkxMDIzZGVkNTEzY3AtMjEsCisgICAgMHgxLjkyMWZiNHAzCisgIH0sCisgIHsgLy8gRW50cnkgNzgwCisgICAgMHgxLjQ0NDJkMTg0Njk3M2RmODk1ZDE3OTEwMjNkZWQ1MTNjcC0yMSwKKyAgICAtMHgxLjkyMWZiNHAzCisgIH0sCisgIHsgLy8gRW50cnkgNzgxCisgICAgMHgxLjc3N2E1Y2Y3MmNlNDdjN2EzYmEwNGJjMmE2MDdhOWE3cC0yMiwKKyAgICAweDEuOTIxZmI2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODIKKyAgICAtMHgxLjc3N2E1Y2Y3MmNlNDdjN2EzYmEwNGJjMmE2MDdhOWE3cC0yMiwKKyAgICAtMHgxLjkyMWZiNnAzCisgIH0sCisgIHsgLy8gRW50cnkgNzgzCisgICAgMHgxLjVkZGU5NzNkY2FjZTRmNmE4ZTkwYmQxNWUwMDYxMGY4cC0yMCwKKyAgICAweDEuOTIxZmI4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODQKKyAgICAtMHgxLjVkZGU5NzNkY2FjZTRmNmE4ZTkwYmQxNWUwMDYxMGY4cC0yMCwKKyAgICAtMHgxLjkyMWZiOHAzCisgIH0sCisgIHsgLy8gRW50cnkgNzg1CisgICAgLTB4MS40NDQyZDE4NDY5MzJkN2Q2MmY1OTIwOTM4OGM3ZjdjYXAtMjAsCisgICAgMHgxLjkyMWZiNHA0CisgIH0sCisgIHsgLy8gRW50cnkgNzg2CisgICAgMHgxLjQ0NDJkMTg0NjkzMmQ3ZDYyZjU5MjA5Mzg4YzdmN2NhcC0yMCwKKyAgICAtMHgxLjkyMWZiNHA0CisgIH0sCisgIHsgLy8gRW50cnkgNzg3CisgICAgMHgxLjc3N2E1Y2Y3MmNjYjNlODc3ODhiODExMjI5ZTcyNWJjcC0yMSwKKyAgICAweDEuOTIxZmI2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODgKKyAgICAtMHgxLjc3N2E1Y2Y3MmNjYjNlODc3ODhiODExMjI5ZTcyNWJjcC0yMSwKKyAgICAtMHgxLjkyMWZiNnA0CisgIH0sCisgIHsgLy8gRW50cnkgNzg5CisgICAgMHgxLjVkZGU5NzNkYzk4NzkwZDFkY2M2MDJiZDFiODZiY2NhcC0xOSwKKyAgICAweDEuOTIxZmI4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTAKKyAgICAtMHgxLjVkZGU5NzNkYzk4NzkwZDFkY2M2MDJiZDFiODZiY2NhcC0xOSwKKyAgICAtMHgxLjkyMWZiOHA0CisgIH0sCisgIHsgLy8gRW50cnkgNzkxCisgICAgLTB4MS40NDQyZDE4NDY4MmViOTA5Nzg1ZmFkMThiY2I1ZGJmY3AtMTksCisgICAgMHgxLjkyMWZiNHA1CisgIH0sCisgIHsgLy8gRW50cnkgNzkyCisgICAgMHgxLjQ0NDJkMTg0NjgyZWI5MDk3ODVmYWQxOGJjYjVkYmZjcC0xOSwKKyAgICAtMHgxLjkyMWZiNHA1CisgIH0sCisgIHsgLy8gRW50cnkgNzkzCisgICAgMHgxLjc3N2E1Y2Y3MmM2NjQ2YmM2YzM4NjA3ZWIzNGVlYTEzcC0yMCwKKyAgICAweDEuOTIxZmI2cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTQKKyAgICAtMHgxLjc3N2E1Y2Y3MmM2NjQ2YmM2YzM4NjA3ZWIzNGVlYTEzcC0yMCwKKyAgICAtMHgxLjkyMWZiNnA1CisgIH0sCisgIHsgLy8gRW50cnkgNzk1CisgICAgMHgxLjVkZGU5NzNkYzQ2Yzk2NmYxNWEyNDAzZDYwY2QxNGQwcC0xOCwKKyAgICAweDEuOTIxZmI4cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTYKKyAgICAtMHgxLjVkZGU5NzNkYzQ2Yzk2NmYxNWEyNDAzZDYwY2QxNGQwcC0xOCwKKyAgICAtMHgxLjkyMWZiOHA1CisgIH0sCisgIHsgLy8gRW50cnkgNzk3CisgICAgLTB4MS40NDQyZDE4NDY0MWUzZGQ2OWM3ZWMzMmUxNGEyMDlhNXAtMTgsCisgICAgMHgxLjkyMWZiNHA2CisgIH0sCisgIHsgLy8gRW50cnkgNzk4CisgICAgMHgxLjQ0NDJkMTg0NjQxZTNkZDY5YzdlYzMyZTE0YTIwOWE1cC0xOCwKKyAgICAtMHgxLjkyMWZiNHA2CisgIH0sCisgIHsgLy8gRW50cnkgNzk5CisgICAgMHgxLjc3N2E1Y2Y3MmFkMjY3OTAzYWVjODExODc3OGIzYjVhcC0xOSwKKyAgICAweDEuOTIxZmI2cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDAKKyAgICAtMHgxLjc3N2E1Y2Y3MmFkMjY3OTAzYWVjODExODc3OGIzYjVhcC0xOSwKKyAgICAtMHgxLjkyMWZiNnA2CisgIH0sCisgIHsgLy8gRW50cnkgODAxCisgICAgMHgxLjVkZGU5NzNkYjAwMGFjZTNmOTg1YTQ3M2VhMWZjMDM5cC0xNywKKyAgICAweDEuOTIxZmI4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDIKKyAgICAtMHgxLjVkZGU5NzNkYjAwMGFjZTNmOTg1YTQ3M2VhMWZjMDM5cC0xNywKKyAgICAtMHgxLjkyMWZiOHA2CisgIH0sCisgIHsgLy8gRW50cnkgODAzCisgICAgLTB4MS40NDQyZDE4NDUzZGM1MTBiMmQ0OTViOGJmNzliZDFjZXAtMTcsCisgICAgMHgxLjkyMWZiNHA3CisgIH0sCisgIHsgLy8gRW50cnkgODA0CisgICAgMHgxLjQ0NDJkMTg0NTNkYzUxMGIyZDQ5NWI4YmY3OWJkMWNlcC0xNywKKyAgICAtMHgxLjkyMWZiNHA3CisgIH0sCisgIHsgLy8gRW50cnkgODA1CisgICAgMHgxLjc3N2E1Y2Y3MjQ4MmVhZGY3NWM3MzFmOTcyNTA3NzE4cC0xOCwKKyAgICAweDEuOTIxZmI2cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDYKKyAgICAtMHgxLjc3N2E1Y2Y3MjQ4MmVhZGY3NWM3MzFmOTcyNTA3NzE4cC0xOCwKKyAgICAtMHgxLjkyMWZiNnA3CisgIH0sCisgIHsgLy8gRW50cnkgODA3CisgICAgMHgxLjVkZGU5NzNkNWU1MTA2Yjc5MDNhMThhNTUyYWVmYzZlcC0xNiwKKyAgICAweDEuOTIxZmI4cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDgKKyAgICAtMHgxLjVkZGU5NzNkNWU1MTA2Yjc5MDNhMThhNTUyYWVmYzZlcC0xNiwKKyAgICAtMHgxLjkyMWZiOHA3CisgIH0sCisgIHsgLy8gRW50cnkgODA5CisgICAgMHgxLjZhMDlmMTk0MGI4MGM4ZTI1Y2ZjOGMxMGQ0MjU3NmM2cC0xLAorICAgIDB4MS4yZDk3YzRwMQorICB9LAorICB7IC8vIEVudHJ5IDgxMAorICAgIC0weDEuNmEwOWYxOTQwYjgwYzhlMjVjZmM4YzEwZDQyNTc2YzZwLTEsCisgICAgLTB4MS4yZDk3YzRwMQorICB9LAorICB7IC8vIEVudHJ5IDgxMQorICAgIDB4MS42YTA5ZWJlYmU0MDg4OTI0NWQ1N2M1YzlkOTBhNmQ4MnAtMSwKKyAgICAweDEuMmQ5N2M2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTIKKyAgICAtMHgxLjZhMDllYmViZTQwODg5MjQ1ZDU3YzVjOWQ5MGE2ZDgycC0xLAorICAgIC0weDEuMmQ5N2M2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTMKKyAgICAweDEuNmEwOWU2NDNiYzc5YThjNzllZjRiZjE4NzcyN2UyNjlwLTEsCisgICAgMHgxLjJkOTdjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgODE0CisgICAgLTB4MS42YTA5ZTY0M2JjNzlhOGM3OWVmNGJmMTg3NzI3ZTI2OXAtMSwKKyAgICAtMHgxLjJkOTdjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgODE1CisgICAgLTB4MS42YTA5ZGYxOTcwNGNmMTQxMDhlMDkwMDBmZjYzNzRiZnAtMSwKKyAgICAweDEuZjZhN2EwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTYKKyAgICAweDEuNmEwOWRmMTk3MDRjZjE0MTA4ZTA5MDAwZmY2Mzc0YmZwLTEsCisgICAgLTB4MS5mNmE3YTBwMQorICB9LAorICB7IC8vIEVudHJ5IDgxNworICAgIC0weDEuNmEwOWU0YzE5N2Y4N2FjZTFjODFiNDMwMjJiZTM5YjFwLTEsCisgICAgMHgxLmY2YTdhMnAxCisgIH0sCisgIHsgLy8gRW50cnkgODE4CisgICAgMHgxLjZhMDllNGMxOTdmODdhY2UxYzgxYjQzMDIyYmUzOWIxcC0xLAorICAgIC0weDEuZjZhN2EycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTkKKyAgICAtMHgxLjZhMDllYTY5YmY4ZDYzYmNlNDA5NThmNWM0YjRmMTU1cC0xLAorICAgIDB4MS5mNmE3YTRwMQorICB9LAorICB7IC8vIEVudHJ5IDgyMAorICAgIDB4MS42YTA5ZWE2OWJmOGQ2M2JjZTQwOTU4ZjVjNGI0ZjE1NXAtMSwKKyAgICAtMHgxLmY2YTdhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgODIxCisgICAgLTB4MS5mZmZmZmZmZmZmMDY1Y2IyNDBiYjhmOTUxOWQyYzZmMXAtMSwKKyAgICAweDEuMmQ5N2M0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjIKKyAgICAweDEuZmZmZmZmZmZmZjA2NWNiMjQwYmI4Zjk1MTlkMmM2ZjFwLTEsCisgICAgLTB4MS4yZDk3YzRwMgorICB9LAorICB7IC8vIEVudHJ5IDgyMworICAgIC0weDEuZmZmZmZmZmZmZmMzMjkzOTg5OGY0NjRhYWZjMmU3NGFwLTEsCisgICAgMHgxLjJkOTdjNnAyCisgIH0sCisgIHsgLy8gRW50cnkgODI0CisgICAgMHgxLmZmZmZmZmZmZmZjMzI5Mzk4OThmNDY0YWFmYzJlNzRhcC0xLAorICAgIC0weDEuMmQ5N2M2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjUKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmY1YzBkMjYzMGVlMGExZmI0ZTdicC0xLAorICAgIDB4MS4yZDk3YzhwMgorICB9LAorICB7IC8vIEVudHJ5IDgyNgorICAgIDB4MS5mZmZmZmZmZmZmZmZmNWMwZDI2MzBlZTBhMWZiNGU3YnAtMSwKKyAgICAtMHgxLjJkOTdjOHAyCisgIH0sCisgIHsgLy8gRW50cnkgODI3CisgICAgLTB4MS42YTA5ZjUyOTMxNmNkZTVhMTkwZDIzNWNjNGNjYjgyNXAtMSwKKyAgICAweDEuNWZkYmJjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjgKKyAgICAweDEuNmEwOWY1MjkzMTZjZGU1YTE5MGQyMzVjYzRjY2I4MjVwLTEsCisgICAgLTB4MS41ZmRiYmNwMgorICB9LAorICB7IC8vIEVudHJ5IDgyOQorICAgIC0weDEuNmEwOWU5ZDhlMjgyNjc3MDU2N2VhODE4YjJlODk5NjBwLTEsCisgICAgMHgxLjVmZGJiZXAyCisgIH0sCisgIHsgLy8gRW50cnkgODMwCisgICAgMHgxLjZhMDllOWQ4ZTI4MjY3NzA1NjdlYTgxOGIyZTg5OTYwcC0xLAorICAgIC0weDEuNWZkYmJlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzEKKyAgICAtMHgxLjZhMDlkZTg4OTMzZDZlMGMxZGI3OGUxZDdjZDE1MTczcC0xLAorICAgIDB4MS41ZmRiYzBwMgorICB9LAorICB7IC8vIEVudHJ5IDgzMgorICAgIDB4MS42YTA5ZGU4ODkzM2Q2ZTBjMWRiNzhlMWQ3Y2QxNTE3M3AtMSwKKyAgICAtMHgxLjVmZGJjMHAyCisgIH0sCisgIHsgLy8gRW50cnkgODMzCisgICAgMHgxLjZhMDlkMDMzZmE3MTVhNDA3YTZmMDNkMDFiOTExMTNmcC0xLAorICAgIDB4MS5jNDYzYThwMgorICB9LAorICB7IC8vIEVudHJ5IDgzNAorICAgIC0weDEuNmEwOWQwMzNmYTcxNWE0MDdhNmYwM2QwMWI5MTExM2ZwLTEsCisgICAgLTB4MS5jNDYzYThwMgorICB9LAorICB7IC8vIEVudHJ5IDgzNQorICAgIDB4MS42YTA5ZGI4NDRhMjhmODYzNTg1MWZkZjg4MTg1MTVlZnAtMSwKKyAgICAweDEuYzQ2M2FhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzYKKyAgICAtMHgxLjZhMDlkYjg0NGEyOGY4NjM1ODUxZmRmODgxODUxNWVmcC0xLAorICAgIC0weDEuYzQ2M2FhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzcKKyAgICAweDEuNmEwOWU2ZDQ5OTg2MTQwZjU1MjI2ZmM1ODY3MjYxMmNwLTEsCisgICAgMHgxLmM0NjNhY3AyCisgIH0sCisgIHsgLy8gRW50cnkgODM4CisgICAgLTB4MS42YTA5ZTZkNDk5ODYxNDBmNTUyMjZmYzU4NjcyNjEyY3AtMSwKKyAgICAtMHgxLmM0NjNhY3AyCisgIH0sCisgIHsgLy8gRW50cnkgODM5CisgICAgMHgxLmZmZmZmZmZmZmY5NTM5NzkzNGNhYzFmMjg1MzJkM2QzcC0xLAorICAgIDB4MS5mNmE3YTBwMgorICB9LAorICB7IC8vIEVudHJ5IDg0MAorICAgIC0weDEuZmZmZmZmZmZmZjk1Mzk3OTM0Y2FjMWYyODUzMmQzZDNwLTEsCisgICAgLTB4MS5mNmE3YTBwMgorICB9LAorICB7IC8vIEVudHJ5IDg0MQorICAgIDB4MS5mZmZmZmZmZmZmZmE4ZTVhYWUyYmI5M2FlNTkwZjk4NHAtMSwKKyAgICAweDEuZjZhN2EycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDIKKyAgICAtMHgxLmZmZmZmZmZmZmZmYThlNWFhZTJiYjkzYWU1OTBmOTg0cC0xLAorICAgIC0weDEuZjZhN2EycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDMKKyAgICAweDEuZmZmZmZmZmZmZmRmZTMzYzI3OGNiNDhhNTllZTNlZjJwLTEsCisgICAgMHgxLmY2YTdhNHAyCisgIH0sCisgIHsgLy8gRW50cnkgODQ0CisgICAgLTB4MS5mZmZmZmZmZmZmZGZlMzNjMjc4Y2I0OGE1OWVlM2VmMnAtMSwKKyAgICAtMHgxLmY2YTdhNHAyCisgIH0sCisgIHsgLy8gRW50cnkgODQ1CisgICAgMHgxLjZhMGEwNDBlYTVjMzJiYTRhZmJlYjg2YTYxNGM1ZDE2cC0xLAorICAgIDB4MS4xNDc1Y2FwMworICB9LAorICB7IC8vIEVudHJ5IDg0NgorICAgIC0weDEuNmEwYTA0MGVhNWMzMmJhNGFmYmViODZhNjE0YzVkMTZwLTEsCisgICAgLTB4MS4xNDc1Y2FwMworICB9LAorICB7IC8vIEVudHJ5IDg0NworICAgIDB4MS42YTA5ZWQ2ZTA4ODIxMmIxZTI2MGE1MTMyZDY5NTliN3AtMSwKKyAgICAweDEuMTQ3NWNjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDgKKyAgICAtMHgxLjZhMDllZDZlMDg4MjEyYjFlMjYwYTUxMzJkNjk1OWI3cC0xLAorICAgIC0weDEuMTQ3NWNjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDkKKyAgICAweDEuNmEwOWQ2Y2Q2OWQ2ZWZkMWE2ZmEyZGQ0YzYxN2NiYmVwLTEsCisgICAgMHgxLjE0NzVjZXAzCisgIH0sCisgIHsgLy8gRW50cnkgODUwCisgICAgLTB4MS42YTA5ZDZjZDY5ZDZlZmQxYTZmYTJkZDRjNjE3Y2JiZXAtMSwKKyAgICAtMHgxLjE0NzVjZXAzCisgIH0sCisgIHsgLy8gRW50cnkgODUxCisgICAgMHgxLmY5OTkwZTkxYTY0YWU0ODY3NTc4NzhiZGZlZTBmNzAzcC0yMCwKKyAgICAweDEuMmQ5N2M0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTIKKyAgICAtMHgxLmY5OTkwZTkxYTY0YWU0ODY3NTc4NzhiZGZlZTBmNzAzcC0yMCwKKyAgICAtMHgxLjJkOTdjNHAzCisgIH0sCisgIHsgLy8gRW50cnkgODUzCisgICAgMHgxLmYzMzIxZDIzNGVkODEyOGFhYmIwNDk5YTQzYjRkZWYycC0yMSwKKyAgICAweDEuMmQ5N2M2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTQKKyAgICAtMHgxLmYzMzIxZDIzNGVkODEyOGFhYmIwNDk5YTQzYjRkZWYycC0yMSwKKyAgICAtMHgxLjJkOTdjNnAzCisgIH0sCisgIHsgLy8gRW50cnkgODU1CisgICAgLTB4MS45OWJjNWI5NjFiMWFjMjk2ZGJlMTk4MGZkMmM4OTBhMHAtMjYsCisgICAgMHgxLjJkOTdjOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODU2CisgICAgMHgxLjk5YmM1Yjk2MWIxYWMyOTZkYmUxOTgwZmQyYzg5MGEwcC0yNiwKKyAgICAtMHgxLjJkOTdjOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODU3CisgICAgLTB4MS42YTA5YzE0ZTgzZjhkYjA4MGQxMjIzZjg4N2NjMTJlY3AtMSwKKyAgICAweDEuNDZiOWMwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTgKKyAgICAweDEuNmEwOWMxNGU4M2Y4ZGIwODBkMTIyM2Y4ODdjYzEyZWNwLTEsCisgICAgLTB4MS40NmI5YzBwMworICB9LAorICB7IC8vIEVudHJ5IDg1OQorICAgIC0weDEuNmEwOWQ3ZWYyM2ZiZWMxZWQ4MTJlODA3YmViMDQ5MmZwLTEsCisgICAgMHgxLjQ2YjljMnAzCisgIH0sCisgIHsgLy8gRW50cnkgODYwCisgICAgMHgxLjZhMDlkN2VmMjNmYmVjMWVkODEyZTgwN2JlYjA0OTJmcC0xLAorICAgIC0weDEuNDZiOWMycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjEKKyAgICAtMHgxLjZhMDllZThmYzI5NGYzNWRiM2VmY2U1NjUzNjVhZjg5cC0xLAorICAgIDB4MS40NmI5YzRwMworICB9LAorICB7IC8vIEVudHJ5IDg2MgorICAgIDB4MS42YTA5ZWU4ZmMyOTRmMzVkYjNlZmNlNTY1MzY1YWY4OXAtMSwKKyAgICAtMHgxLjQ2YjljNHAzCisgIH0sCisgIHsgLy8gRW50cnkgODYzCisgICAgLTB4MS5mZmZmZmZmZmZlNGM5NmIzOTdkOTUxY2IyMTg2MWM5NXAtMSwKKyAgICAweDEuNWZkYmJjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjQKKyAgICAweDEuZmZmZmZmZmZmZTRjOTZiMzk3ZDk1MWNiMjE4NjFjOTVwLTEsCisgICAgLTB4MS41ZmRiYmNwMworICB9LAorICB7IC8vIEVudHJ5IDg2NQorICAgIC0weDEuZmZmZmZmZmZmZmU4NTEyYWViYjU2YzllNzViNDE5NDFwLTEsCisgICAgMHgxLjVmZGJiZXAzCisgIH0sCisgIHsgLy8gRW50cnkgODY2CisgICAgMHgxLmZmZmZmZmZmZmZlODUxMmFlYmI1NmM5ZTc1YjQxOTQxcC0xLAorICAgIC0weDEuNWZkYmJlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjcKKyAgICAtMHgxLmZmZmZmZmZmZmY4NDBiYTIzZjkxYzljYjQ5YTEwYjI3cC0xLAorICAgIDB4MS41ZmRiYzBwMworICB9LAorICB7IC8vIEVudHJ5IDg2OAorICAgIDB4MS5mZmZmZmZmZmZmODQwYmEyM2Y5MWM5Y2I0OWExMGIyN3AtMSwKKyAgICAtMHgxLjVmZGJjMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODY5CisgICAgLTB4MS42YTBhMTJmNDE5N2M5MGEwZWU0YTA5NGI2Mzc3YWEyM3AtMSwKKyAgICAweDEuNzhmZGI2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzAKKyAgICAweDEuNmEwYTEyZjQxOTdjOTBhMGVlNGEwOTRiNjM3N2FhMjNwLTEsCisgICAgLTB4MS43OGZkYjZwMworICB9LAorICB7IC8vIEVudHJ5IDg3MQorICAgIC0weDEuNmEwOWZjNTM3ZDI5Y2YxMzFkNjcxMDk5MWJlYmFiZWRwLTEsCisgICAgMHgxLjc4ZmRiOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODcyCisgICAgMHgxLjZhMDlmYzUzN2QyOWNmMTMxZDY3MTA5OTFiZWJhYmVkcC0xLAorICAgIC0weDEuNzhmZGI4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzMKKyAgICAtMHgxLjZhMDllNWIyZGY2ZDAzODhmOTA3MGM0MzQwZjNlNjY5cC0xLAorICAgIDB4MS43OGZkYmFwMworICB9LAorICB7IC8vIEVudHJ5IDg3NAorICAgIDB4MS42YTA5ZTViMmRmNmQwMzg4ZjkwNzBjNDM0MGYzZTY2OXAtMSwKKyAgICAtMHgxLjc4ZmRiYXAzCisgIH0sCisgIHsgLy8gRW50cnkgODc1CisgICAgMHgxLjZhMDljOTA5YWRkNGRiZjMyMjUzYTM5ZDVjMzA2MzA4cC0xLAorICAgIDB4MS5hYjQxYWVwMworICB9LAorICB7IC8vIEVudHJ5IDg3NgorICAgIC0weDEuNmEwOWM5MDlhZGQ0ZGJmMzIyNTNhMzlkNWMzMDYzMDhwLTEsCisgICAgLTB4MS5hYjQxYWVwMworICB9LAorICB7IC8vIEVudHJ5IDg3NworICAgIDB4MS42YTA5ZGZhYTRkNWMzYTdmMDU2ZjNlNjFhMzY1YjI5ZXAtMSwKKyAgICAweDEuYWI0MWIwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzgKKyAgICAtMHgxLjZhMDlkZmFhNGQ1YzNhN2YwNTZmM2U2MWEzNjViMjllcC0xLAorICAgIC0weDEuYWI0MWIwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzkKKyAgICAweDEuNmEwOWY2NGFlYjc5OGYyYjNlM2Q5YjE2ZThlM2M0MTJwLTEsCisgICAgMHgxLmFiNDFiMnAzCisgIH0sCisgIHsgLy8gRW50cnkgODgwCisgICAgLTB4MS42YTA5ZjY0YWViNzk4ZjJiM2UzZDliMTZlOGUzYzQxMnAtMSwKKyAgICAtMHgxLmFiNDFiMnAzCisgIH0sCisgIHsgLy8gRW50cnkgODgxCisgICAgMHgxLmZmZmZmZmZmZmMyNjBkNmZmYjhmNGNkOGFiM2ZkMDIwcC0xLAorICAgIDB4MS5jNDYzYThwMworICB9LAorICB7IC8vIEVudHJ5IDg4MgorICAgIC0weDEuZmZmZmZmZmZmYzI2MGQ2ZmZiOGY0Y2Q4YWIzZmQwMjBwLTEsCisgICAgLTB4MS5jNDYzYThwMworICB9LAorICB7IC8vIEVudHJ5IDg4MworICAgIDB4MS5mZmZmZmZmZmZmMTJkODliYjA4NGRkNzYyODQ4YjNkNnAtMSwKKyAgICAweDEuYzQ2M2FhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODQKKyAgICAtMHgxLmZmZmZmZmZmZmYxMmQ4OWJiMDg0ZGQ3NjI4NDhiM2Q2cC0xLAorICAgIC0weDEuYzQ2M2FhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODUKKyAgICAweDEuZmZmZmZmZmZmZmZmYTNjNzY1N2I4NWU1YjQ0YmJkNDRwLTEsCisgICAgMHgxLmM0NjNhY3AzCisgIH0sCisgIHsgLy8gRW50cnkgODg2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZhM2M3NjU3Yjg1ZTViNDRiYmQ0NHAtMSwKKyAgICAtMHgxLmM0NjNhY3AzCisgIH0sCisgIHsgLy8gRW50cnkgODg3CisgICAgMHgxLjZhMGEwYjM4ZjEzNGEzMjk1YTBiMzg2ZTQyZjFjYTdhcC0xLAorICAgIDB4MS5kZDg1YTRwMworICB9LAorICB7IC8vIEVudHJ5IDg4OAorICAgIC0weDEuNmEwYTBiMzhmMTM0YTMyOTVhMGIzODZlNDJmMWNhN2FwLTEsCisgICAgLTB4MS5kZDg1YTRwMworICB9LAorICB7IC8vIEVudHJ5IDg4OQorICAgIDB4MS42YTA5ZjQ5ODU0NjYyZWZmMWIzNTc1NWExMjkwNDRhN3AtMSwKKyAgICAweDEuZGQ4NWE2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTAKKyAgICAtMHgxLjZhMDlmNDk4NTQ2NjJlZmYxYjM1NzU1YTEyOTA0NGE3cC0xLAorICAgIC0weDEuZGQ4NWE2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTEKKyAgICAweDEuNmEwOWRkZjdiNjJkYjBlMDQ0MGI2YTQyNjIyMDNiMTFwLTEsCisgICAgMHgxLmRkODVhOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODkyCisgICAgLTB4MS42YTA5ZGRmN2I2MmRiMGUwNDQwYjZhNDI2MjIwM2IxMXAtMSwKKyAgICAtMHgxLmRkODVhOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODkzCisgICAgMHgxLjRhYTljMmYyYzE5YTA2MmIxOGEwMTdiY2Q1NDI0ZmVhcC0yMCwKKyAgICAweDEuZjZhN2EwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTQKKyAgICAtMHgxLjRhYTljMmYyYzE5YTA2MmIxOGEwMTdiY2Q1NDI0ZmVhcC0yMCwKKyAgICAtMHgxLmY2YTdhMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODk1CisgICAgMHgxLjJhYTcwYmNiMDdkM2E0MDc4MTUxMGQyMTM2NTJlNDNhcC0yMiwKKyAgICAweDEuZjZhN2EycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTYKKyAgICAtMHgxLjJhYTcwYmNiMDdkM2E0MDc4MTUxMGQyMTM2NTJlNDNhcC0yMiwKKyAgICAtMHgxLmY2YTdhMnAzCisgIH0sCisgIHsgLy8gRW50cnkgODk3CisgICAgLTB4MS42YWFjN2ExYTdiZjViYmQ0OTU3MmZmYjhkNzc0OTkyMnAtMjEsCisgICAgMHgxLmY2YTdhNHAzCisgIH0sCisgIHsgLy8gRW50cnkgODk4CisgICAgMHgxLjZhYWM3YTFhN2JmNWJiZDQ5NTcyZmZiOGQ3NzQ5OTIycC0yMSwKKyAgICAtMHgxLmY2YTdhNHAzCisgIH0sCisgIHsgLy8gRW50cnkgODk5CisgICAgLTB4MS42YTA5YTM4Mzk1MzEyNDA5Njg5ODM0MGY5MTY4YjlkNXAtMSwKKyAgICAweDEuMDdlNGNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDAKKyAgICAweDEuNmEwOWEzODM5NTMxMjQwOTY4OTgzNDBmOTE2OGI5ZDVwLTEsCisgICAgLTB4MS4wN2U0Y2NwNAorICB9LAorICB7IC8vIEVudHJ5IDkwMQorICAgIC0weDEuNmEwOWQwYzRkNzg2OTk2MWM0N2E5YjBiOTY4Y2M5MTBwLTEsCisgICAgMHgxLjA3ZTRjZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTAyCisgICAgMHgxLjZhMDlkMGM0ZDc4Njk5NjFjNDdhOWIwYjk2OGNjOTEwcC0xLAorICAgIC0weDEuMDdlNGNlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDMKKyAgICAtMHgxLjZhMDlmZTA2MTQzM2U3NzcwZDAwY2E1OWQ1YTU2MjUxcC0xLAorICAgIDB4MS4wN2U0ZDBwNAorICB9LAorICB7IC8vIEVudHJ5IDkwNAorICAgIDB4MS42YTA5ZmUwNjE0MzNlNzc3MGQwMGNhNTlkNWE1NjI1MXAtMSwKKyAgICAtMHgxLjA3ZTRkMHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTA1CisgICAgLTB4MS5mZmZmZmZmZmY5MjE5ZGFlNWZlZGExYjUzOTMzNTgwM3AtMSwKKyAgICAweDEuMTQ3NWNhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDYKKyAgICAweDEuZmZmZmZmZmZmOTIxOWRhZTVmZWRhMWI1MzkzMzU4MDNwLTEsCisgICAgLTB4MS4xNDc1Y2FwNAorICB9LAorICB7IC8vIEVudHJ5IDkwNworICAgIC0weDEuZmZmZmZmZmZmZjlkNTU2ZThjMGJmMGE4MGQ2MTA4MDhwLTEsCisgICAgMHgxLjE0NzVjY3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTA4CisgICAgMHgxLmZmZmZmZmZmZmY5ZDU1NmU4YzBiZjBhODBkNjEwODA4cC0xLAorICAgIC0weDEuMTQ3NWNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDkKKyAgICAtMHgxLmZmZmZmZmZmZmUxOTBkMmViODJlNzRlZmQyMDkzMjE1cC0xLAorICAgIDB4MS4xNDc1Y2VwNAorICB9LAorICB7IC8vIEVudHJ5IDkxMAorICAgIDB4MS5mZmZmZmZmZmZlMTkwZDJlYjgyZTc0ZWZkMjA5MzIxNXAtMSwKKyAgICAtMHgxLjE0NzVjZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTExCisgICAgLTB4MS42YTBhMWExZTY0YTI4ZWVlMjM4ZGM4NTI4NDZhYWNkNXAtMSwKKyAgICAweDEuMjEwNmM4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTIKKyAgICAweDEuNmEwYTFhMWU2NGEyOGVlZTIzOGRjODUyODQ2YWFjZDVwLTEsCisgICAgLTB4MS4yMTA2YzhwNAorICB9LAorICB7IC8vIEVudHJ5IDkxMworICAgIC0weDEuNmEwOWVjZGQyYjc4NGI2OTkwMzRlZTgxMDI2NzBlMjdwLTEsCisgICAgMHgxLjIxMDZjYXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTE0CisgICAgMHgxLjZhMDllY2RkMmI3ODRiNjk5MDM0ZWU4MTAyNjcwZTI3cC0xLAorICAgIC0weDEuMjEwNmNhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTUKKyAgICAtMHgxLjZhMDliZjliZWNhNWUwMzE4ODMwMTYzOWMwOWVkNTc0cC0xLAorICAgIDB4MS4yMTA2Y2NwNAorICB9LAorICB7IC8vIEVudHJ5IDkxNgorICAgIDB4MS42YTA5YmY5YmVjYTVlMDMxODgzMDE2MzljMDllZDU3NHAtMSwKKyAgICAtMHgxLjIxMDZjY3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTE3CisgICAgLTB4MS5mOTk5MGU5MWEyNzBkM2JjMWMwMmY0ZjY5ZjQ4ZTY3NXAtMTksCisgICAgMHgxLjJkOTdjNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTE4CisgICAgMHgxLmY5OTkwZTkxYTI3MGQzYmMxYzAyZjRmNjlmNDhlNjc1cC0xOSwKKyAgICAtMHgxLjJkOTdjNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTE5CisgICAgLTB4MS5mMzMyMWQyMzRkZWFjZDZmM2FmZDc1MDM5Njg1MDEyZnAtMjAsCisgICAgMHgxLjJkOTdjNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTIwCisgICAgMHgxLmYzMzIxZDIzNGRlYWNkNmYzYWZkNzUwMzk2ODUwMTJmcC0yMCwKKyAgICAtMHgxLjJkOTdjNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTIxCisgICAgMHgxLjk5YmM1Yjk2MWIxYWExYzllODAyMzA3NGYzNDA2ZmQ5cC0yNSwKKyAgICAweDEuMmQ5N2M4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjIKKyAgICAtMHgxLjk5YmM1Yjk2MWIxYWExYzllODAyMzA3NGYzNDA2ZmQ5cC0yNSwKKyAgICAtMHgxLjJkOTdjOHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTIzCisgICAgMHgxLjZhMDk5NDllMWNlMWVjNTAxYWZjYjM1ZDczMWJmNjJjcC0xLAorICAgIDB4MS4zYTI4YzJwNAorICB9LAorICB7IC8vIEVudHJ5IDkyNAorICAgIC0weDEuNmEwOTk0OWUxY2UxZWM1MDFhZmNiMzVkNzMxYmY2MmNwLTEsCisgICAgLTB4MS4zYTI4YzJwNAorICB9LAorICB7IC8vIEVudHJ5IDkyNQorICAgIDB4MS42YTA5YzFkZjYxMTQxMDBjNjVkMWZmNmM1NTc1NWU3MnAtMSwKKyAgICAweDEuM2EyOGM0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjYKKyAgICAtMHgxLjZhMDljMWRmNjExNDEwMGM2NWQxZmY2YzU1NzU1ZTcycC0xLAorICAgIC0weDEuM2EyOGM0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjcKKyAgICAweDEuNmEwOWVmMjA5ZjllMGNjMTMzMjRkZGYyYjM2MTU1M2ZwLTEsCisgICAgMHgxLjNhMjhjNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTI4CisgICAgLTB4MS42YTA5ZWYyMDlmOWUwY2MxMzMyNGRkZjJiMzYxNTUzZnAtMSwKKyAgICAtMHgxLjNhMjhjNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTI5CisgICAgMHgxLmZmZmZmZmZmZjUzZjQ3NmVjNGY1OWYyNmM0YmNkZmEwcC0xLAorICAgIDB4MS40NmI5YzBwNAorICB9LAorICB7IC8vIEVudHJ5IDkzMAorICAgIC0weDEuZmZmZmZmZmZmNTNmNDc2ZWM0ZjU5ZjI2YzRiY2RmYTBwLTEsCisgICAgLTB4MS40NmI5YzBwNAorICB9LAorICB7IC8vIEVudHJ5IDkzMQorICAgIDB4MS5mZmZmZmZmZmZlNWQyMDk3YjM0MzM0YWQ2NzlkZDdhNHAtMSwKKyAgICAweDEuNDZiOWMycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzIKKyAgICAtMHgxLmZmZmZmZmZmZmU1ZDIwOTdiMzQzMzRhZDY3OWRkN2E0cC0xLAorICAgIC0weDEuNDZiOWMycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzMKKyAgICAweDEuZmZmZmZmZmZmZjdhZjljMGExOWEwMDVjNTY1YzZhZjdwLTEsCisgICAgMHgxLjQ2YjljNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTM0CisgICAgLTB4MS5mZmZmZmZmZmZmN2FmOWMwYTE5YTAwNWM1NjVjNmFmN3AtMSwKKyAgICAtMHgxLjQ2YjljNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTM1CisgICAgMHgxLjZhMGEyOTAzZDc3MzkyNWIwNTJmYjAwNmFjNjcwYzIzcC0xLAorICAgIDB4MS41MzRhYmVwNAorICB9LAorICB7IC8vIEVudHJ5IDkzNgorICAgIC0weDEuNmEwYTI5MDNkNzczOTI1YjA1MmZiMDA2YWM2NzBjMjNwLTEsCisgICAgLTB4MS41MzRhYmVwNAorICB9LAorICB7IC8vIEVudHJ5IDkzNworICAgIDB4MS42YTA5ZmJjMmEwMjVmZGFlOTE4NDY2ZmEwMDE0MjE0M3AtMSwKKyAgICAweDEuNTM0YWMwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzgKKyAgICAtMHgxLjZhMDlmYmMyYTAyNWZkYWU5MTg0NjZmYTAwMTQyMTQzcC0xLAorICAgIC0weDEuNTM0YWMwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzkKKyAgICAweDEuNmEwOWNlODE2MzMwNDExMzEzNWE2OGFlOTNkM2ZhMGVwLTEsCisgICAgMHgxLjUzNGFjMnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQwCisgICAgLTB4MS42YTA5Y2U4MTYzMzA0MTEzMTM1YTY4YWU5M2QzZmEwZXAtMSwKKyAgICAtMHgxLjUzNGFjMnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQxCisgICAgMHgxLjRkZGQzYmE5ZWNiMTlkNmJiNmVhMTYxMTIwZTQ0N2I5cC0xOSwKKyAgICAweDEuNWZkYmJjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDIKKyAgICAtMHgxLjRkZGQzYmE5ZWNiMTlkNmJiNmVhMTYxMTIwZTQ0N2I5cC0xOSwKKyAgICAtMHgxLjVmZGJiY3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTQzCisgICAgMHgxLjM3NzRlZWE3Yjg5ZDgwZGY3ODE2ZmUyMDhlYzY5ZmMwcC0yMSwKKyAgICAweDEuNWZkYmJlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDQKKyAgICAtMHgxLjM3NzRlZWE3Yjg5ZDgwZGY3ODE2ZmUyMDhlYzY5ZmMwcC0yMSwKKyAgICAtMHgxLjVmZGJiZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQ1CisgICAgLTB4MS42NDQ1ODhhYzIzMzRhM2Q1NDUyZDk5NjAyODJjZjgwZHAtMjAsCisgICAgMHgxLjVmZGJjMHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQ2CisgICAgMHgxLjY0NDU4OGFjMjMzNGEzZDU0NTJkOTk2MDI4MmNmODBkcC0yMCwKKyAgICAtMHgxLjVmZGJjMHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQ3CisgICAgLTB4MS42YTA5YjJmOWVhMDQ5ZTg1NWUzNWNhOWNlN2UwZDg5YXAtMSwKKyAgICAweDEuNmM2Y2JhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDgKKyAgICAweDEuNmEwOWIyZjllYTA0OWU4NTVlMzVjYTljZTdlMGQ4OWFwLTEsCisgICAgLTB4MS42YzZjYmFwNAorICB9LAorICB7IC8vIEVudHJ5IDk0OQorICAgIC0weDEuNmEwOWUwM2IyYTZiNDljNjEzNGM2N2I0MmJhZWU2NjhwLTEsCisgICAgMHgxLjZjNmNiY3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTUwCisgICAgMHgxLjZhMDllMDNiMmE2YjQ5YzYxMzRjNjdiNDJiYWVlNjY4cC0xLAorICAgIC0weDEuNmM2Y2JjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTEKKyAgICAtMHgxLjZhMGEwZDdjNjUyOWNkODVkYmJiM2E1YzJjZDNmYWU1cC0xLAorICAgIDB4MS42YzZjYmVwNAorICB9LAorICB7IC8vIEVudHJ5IDk1MgorICAgIDB4MS42YTBhMGQ3YzY1MjljZDg1ZGJiYjNhNWMyY2QzZmFlNXAtMSwKKyAgICAtMHgxLjZjNmNiZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTUzCisgICAgLTB4MS5mZmZmZmZmZmYwN2YwYWIxMmFhOGY0MWYyOWMxNTM5MnAtMSwKKyAgICAweDEuNzhmZGI2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTQKKyAgICAweDEuZmZmZmZmZmZmMDdmMGFiMTJhYThmNDFmMjljMTUzOTJwLTEsCisgICAgLTB4MS43OGZkYjZwNAorICB9LAorICB7IC8vIEVudHJ5IDk1NQorICAgIC0weDEuZmZmZmZmZmZmYzNmMDU0MmRiMjFkY2JjYjg0N2RhYzNwLTEsCisgICAgMHgxLjc4ZmRiOHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTU2CisgICAgMHgxLmZmZmZmZmZmZmMzZjA1NDJkYjIxZGNiY2I4NDdkYWMzcC0xLAorICAgIC0weDEuNzhmZGI4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTcKKyAgICAtMHgxLmZmZmZmZmZmZmZmZWZmZDQ4YmFjNzNlZmU2MGM3ZmNmcC0xLAorICAgIDB4MS43OGZkYmFwNAorICB9LAorICB7IC8vIEVudHJ5IDk1OAorICAgIDB4MS5mZmZmZmZmZmZmZmVmZmQ0OGJhYzczZWZlNjBjN2ZjZnAtMSwKKyAgICAtMHgxLjc4ZmRiYXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTU5CisgICAgLTB4MS42YTBhMzdlOTQ5YTdhZDY5OGEzMjIzNGM3M2U1YWZiYXAtMSwKKyAgICAweDEuODU4ZWI0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjAKKyAgICAweDEuNmEwYTM3ZTk0OWE3YWQ2OThhMzIyMzRjNzNlNWFmYmFwLTEsCisgICAgLTB4MS44NThlYjRwNAorICB9LAorICB7IC8vIEVudHJ5IDk2MQorICAgIC0weDEuNmEwYTBhYTgxNDM2YzdhOGQzM2EzOGQ3MDQwMzBkMTRwLTEsCisgICAgMHgxLjg1OGViNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTYyCisgICAgMHgxLjZhMGEwYWE4MTQzNmM3YThkMzNhMzhkNzA0MDMwZDE0cC0xLAorICAgIC0weDEuODU4ZWI2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjMKKyAgICAtMHgxLjZhMDlkZDY2ZDkxZGI5YmQ3YmYzNTVmYWZmMDhmMTk0cC0xLAorICAgIDB4MS44NThlYjhwNAorICB9LAorICB7IC8vIEVudHJ5IDk2NAorICAgIDB4MS42YTA5ZGQ2NmQ5MWRiOWJkN2JmMzU1ZmFmZjA4ZjE5NHAtMSwKKyAgICAtMHgxLjg1OGViOHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTY1CisgICAgMHgxLmMwNDhiMzhhOGJiZjU5ZjQxNGZlYzcwNzkyMDk5MjZlcC0zLAorICAgIDB4MS5mZmZmZmVwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjYKKyAgICAtMHgxLmMwNDhiMzhhOGJiZjU5ZjQxNGZlYzcwNzkyMDk5MjZlcC0zLAorICAgIC0weDEuZmZmZmZlcDYyCisgIH0sCisgIHsgLy8gRW50cnkgOTY3CisgICAgMHgxLmZmZjZkZmQ0MmRjNTQ0MzBiYzA1NzZiMDBhODhiZDk0cC0xLAorICAgIDB4MS5wNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjgKKyAgICAtMHgxLmZmZjZkZmQ0MmRjNTQ0MzBiYzA1NzZiMDBhODhiZDk0cC0xLAorICAgIC0weDEucDYzCisgIH0sCisgIHsgLy8gRW50cnkgOTY5CisgICAgLTB4MS5kNjYzN2QwNzAzNDdlZTk0ZTgzMDQ0NWU3NjQ4NjcyN3AtMSwKKyAgICAweDEuMDAwMDAycDYzCisgIH0sCisgIHsgLy8gRW50cnkgOTcwCisgICAgMHgxLmQ2NjM3ZDA3MDM0N2VlOTRlODMwNDQ1ZTc2NDg2NzI3cC0xLAorICAgIC0weDEuMDAwMDAycDYzCisgIH0sCisgIHsgLy8gRW50cnkgOTcxCisgICAgLTB4MS4wZTUyODM2NjFkZjBjYTBmNTVhYjYxNjdlMTQ1MTRhMXAtMSwKKyAgICAweDEuZmZmZmZlcDI2CisgIH0sCisgIHsgLy8gRW50cnkgOTcyCisgICAgMHgxLjBlNTI4MzY2MWRmMGNhMGY1NWFiNjE2N2UxNDUxNGExcC0xLAorICAgIC0weDEuZmZmZmZlcDI2CisgIH0sCisgIHsgLy8gRW50cnkgOTczCisgICAgLTB4MS44NmRjYzliYWJiMGE0MGVlODc1Y2FiM2I5ZTg5Mjc1N3AtMSwKKyAgICAweDEucDI3CisgIH0sCisgIHsgLy8gRW50cnkgOTc0CisgICAgMHgxLjg2ZGNjOWJhYmIwYTQwZWU4NzVjYWIzYjllODkyNzU3cC0xLAorICAgIC0weDEucDI3CisgIH0sCisgIHsgLy8gRW50cnkgOTc1CisgICAgMHgxLjE3MTk5OWI2MjlmZDViNjM1N2M2ZGZmNGQ3ODI3ZDk1cC0xLAorICAgIDB4MS4wMDAwMDJwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzYKKyAgICAtMHgxLjE3MTk5OWI2MjlmZDViNjM1N2M2ZGZmNGQ3ODI3ZDk1cC0xLAorICAgIC0weDEuMDAwMDAycDI3CisgIH0sCisgIHsgLy8gRW50cnkgOTc3CisgICAgLTB4MS5lNTdlYzA5MjIxOTczNTUwZDFlNTc5OGRjZjBjZDI1ZHAtMSwKKyAgICAweDEuZmZmZmZlcDIzCisgIH0sCisgIHsgLy8gRW50cnkgOTc4CisgICAgMHgxLmU1N2VjMDkyMjE5NzM1NTBkMWU1Nzk4ZGNmMGNkMjVkcC0xLAorICAgIC0weDEuZmZmZmZlcDIzCisgIH0sCisgIHsgLy8gRW50cnkgOTc5CisgICAgLTB4MS44ZjIyZjg0MzNkNmVkZmU5YTRhZmY5NjIyNTE3Y2FhOXAtMSwKKyAgICAweDEucDI0CisgIH0sCisgIHsgLy8gRW50cnkgOTgwCisgICAgMHgxLjhmMjJmODQzM2Q2ZWRmZTlhNGFmZjk2MjI1MTdjYWE5cC0xLAorICAgIC0weDEucDI0CisgIH0sCisgIHsgLy8gRW50cnkgOTgxCisgICAgMHgxLmM5YjBjNzI2NWM1NDNmODBmYWYwMTc0MWM2NDU4NTYwcC0xLAorICAgIDB4MS4wMDAwMDJwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODIKKyAgICAtMHgxLmM5YjBjNzI2NWM1NDNmODBmYWYwMTc0MWM2NDU4NTYwcC0xLAorICAgIC0weDEuMDAwMDAycDI0CisgIH0sCisgIHsgLy8gRW50cnkgOTgzCisgICAgLTB4MS44MzdiOThhMzE4NWQxNDY2ZDg1MmYwYTdkYzFkMjQ4ZXAtMSwKKyAgICAweDEuZmZmZmZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODQKKyAgICAweDEuODM3Yjk4YTMxODVkMTQ2NmQ4NTJmMGE3ZGMxZDI0OGVwLTEsCisgICAgLTB4MS5mZmZmZmVwMQorICB9LAorICB7IC8vIEVudHJ5IDk4NQorICAgIC0weDEuODM3YjlkZGRjMWVhZTcwY2U5ODA1NWEwZTQ1MGQ5M2NwLTEsCisgICAgMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgOTg2CisgICAgMHgxLjgzN2I5ZGRkYzFlYWU3MGNlOTgwNTVhMGU0NTBkOTNjcC0xLAorICAgIC0weDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODcKKyAgICAtMHgxLjgzN2JhODUzMTRiZGU1MmIxZTljMmM4ZWQyNzEyYzcycC0xLAorICAgIDB4MS4wMDAwMDJwMgorICB9LAorICB7IC8vIEVudHJ5IDk4OAorICAgIDB4MS44MzdiYTg1MzE0YmRlNTJiMWU5YzJjOGVkMjcxMmM3MnAtMSwKKyAgICAtMHgxLjAwMDAwMnAyCisgIH0sCisgIHsgLy8gRW50cnkgOTg5CisgICAgMHgxLmQxOGY3MDU3M2RhNjMwMTJmYTFjMGUzZDJlYmJlNTljcC0xLAorICAgIDB4MS5mZmZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDk5MAorICAgIC0weDEuZDE4ZjcwNTczZGE2MzAxMmZhMWMwZTNkMmViYmU1OWNwLTEsCisgICAgLTB4MS5mZmZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDk5MQorICAgIDB4MS5kMThmNmVhZDFiNDQ1ZGZhYjg0ODE4ODAwOWM5YmI5NXAtMSwKKyAgICAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTIKKyAgICAtMHgxLmQxOGY2ZWFkMWI0NDVkZmFiODQ4MTg4MDA5YzliYjk1cC0xLAorICAgIC0weDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTMKKyAgICAweDEuZDE4ZjZiNThkNjZhZTcxMTBiMmI2ZjdjZmZiYTZlYzFwLTEsCisgICAgMHgxLjAwMDAwMnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTk0CisgICAgLTB4MS5kMThmNmI1OGQ2NmFlNzExMGIyYjZmN2NmZmJhNmVjMXAtMSwKKyAgICAtMHgxLjAwMDAwMnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTk1CisgICAgMHgxLmFlZDU0N2RiZWU0ZDBkODY4MGQwODEzZDFlNGUyMWQwcC0xLAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTYKKyAgICAtMHgxLmFlZDU0N2RiZWU0ZDBkODY4MGQwODEzZDFlNGUyMWQwcC0xLAorICAgIC0weDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTk3CisgICAgMHgxLmFlZDU0OGYwOTBjZWUwNDE4ZGQzZDIxMzhhMWU3ODY1cC0xLAorICAgIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDk5OAorICAgIC0weDEuYWVkNTQ4ZjA5MGNlZTA0MThkZDNkMjEzOGExZTc4NjVwLTEsCisgICAgLTB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDk5OQorICAgIDB4MS5hZWQ1NGIxOWQ1Y2Q3OTM3Y2JmNDFlZDQwOGNhMGE1MnAtMSwKKyAgICAweDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAwCisgICAgLTB4MS5hZWQ1NGIxOWQ1Y2Q3OTM3Y2JmNDFlZDQwOGNhMGE1MnAtMSwKKyAgICAtMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTAwMQorICAgIDB4MS5lYWVlODU4MzVkZGU1YjcxYmVlYzdkOGQ5ODA1MjExMnAtMiwKKyAgICAweDEuZmZmZmZlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTAwMgorICAgIC0weDEuZWFlZTg1ODM1ZGRlNWI3MWJlZWM3ZDhkOTgwNTIxMTJwLTIsCisgICAgLTB4MS5mZmZmZmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAzCisgICAgMHgxLmVhZWU4NzQ0YjA1ZWZlODc2NGJjMzY0ZmQ4MzdiNjY2cC0yLAorICAgIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA0CisgICAgLTB4MS5lYWVlODc0NGIwNWVmZTg3NjRiYzM2NGZkODM3YjY2NnAtMiwKKyAgICAtMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMDUKKyAgICAweDEuZWFlZThhYzc1NTVlZDQ3ZmNhNzdjZWVkMTc0YzhlYTBwLTIsCisgICAgMHgxLjAwMDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMDYKKyAgICAtMHgxLmVhZWU4YWM3NTU1ZWQ0N2ZjYTc3Y2VlZDE3NGM4ZWEwcC0yLAorICAgIC0weDEuMDAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAwNworICAgIDB4MS5mYWFlZWI1ZjFjMGQ2M2Y0M2M2ZjNlYzQ2MDExNjkwZnAtMywKKyAgICAweDEuZmZmZmZlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTAwOAorICAgIC0weDEuZmFhZWViNWYxYzBkNjNmNDNjNmYzZWM0NjAxMTY5MGZwLTMsCisgICAgLTB4MS5mZmZmZmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA5CisgICAgMHgxLmZhYWVlZDRmMzE1NzZiYTg5ZGViZGM3MzUxZThiMWFlcC0zLAorICAgIDB4MS5wLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEwCisgICAgLTB4MS5mYWFlZWQ0ZjMxNTc2YmE4OWRlYmRjNzM1MWU4YjFhZXAtMywKKyAgICAtMHgxLnAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMTEKKyAgICAweDEuZmFhZWYxMmY1YmViMWMxMDk0NDczZDNjMzM2NWI5ZTFwLTMsCisgICAgMHgxLjAwMDAwMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMTIKKyAgICAtMHgxLmZhYWVmMTJmNWJlYjFjMTA5NDQ3M2QzYzMzNjViOWUxcC0zLAorICAgIC0weDEuMDAwMDAycC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTAxMworICAgIDB4MS5mZWFhZWNlYzZkOGUzMGNkNTY5NTBlYjJlYmRjZWJkNHAtNCwKKyAgICAweDEuZmZmZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTAxNAorICAgIC0weDEuZmVhYWVjZWM2ZDhlMzBjZDU2OTUwZWIyZWJkY2ViZDRwLTQsCisgICAgLTB4MS5mZmZmZmVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE1CisgICAgMHgxLmZlYWFlZWU4NmVlMzVjYTA2OWE4NjcyMWY4OWY4NWE1cC00LAorICAgIDB4MS5wLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE2CisgICAgLTB4MS5mZWFhZWVlODZlZTM1Y2EwNjlhODY3MjFmODlmODVhNXAtNCwKKyAgICAtMHgxLnAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMTcKKyAgICAweDEuZmVhYWYyZTA3MThkOWM1NjhjOTQ0MmM4MTU0NWNkNjJwLTQsCisgICAgMHgxLjAwMDAwMnAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMTgKKyAgICAtMHgxLmZlYWFmMmUwNzE4ZDljNTY4Yzk0NDJjODE1NDVjZDYycC00LAorICAgIC0weDEuMDAwMDAycC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTAxOQorICAgIDB4MS5mZmFhYWNlZmQ0ZDg1NWFjODIyNzc5OWYzZTI2M2Q3YXAtNSwKKyAgICAweDEuZmZmZmZlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTAyMAorICAgIC0weDEuZmZhYWFjZWZkNGQ4NTVhYzgyMjc3OTlmM2UyNjNkN2FwLTUsCisgICAgLTB4MS5mZmZmZmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIxCisgICAgMHgxLmZmYWFhZWVlZDRlZGFiNGJhNGIzNjVlZDI1YTk1OTVmcC01LAorICAgIDB4MS5wLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIyCisgICAgLTB4MS5mZmFhYWVlZWQ0ZWRhYjRiYTRiMzY1ZWQyNWE5NTk1ZnAtNSwKKyAgICAtMHgxLnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwMjMKKyAgICAweDEuZmZhYWIyZWNkNTE4NTA4YWU5YmM3MzBhMTY1YThlYWRwLTUsCisgICAgMHgxLjAwMDAwMnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwMjQKKyAgICAtMHgxLmZmYWFiMmVjZDUxODUwOGFlOWJjNzMwYTE2NWE4ZWFkcC01LAorICAgIC0weDEuMDAwMDAycC00CisgIH0sCisgIHsgLy8gRW50cnkgMTAyNQorICAgIDB4MS5mZmVhYThlZjJlODU5MzM4ODNjMGRjMzM0NjIzODdiNXAtNiwKKyAgICAweDEuZmZmZmZlcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTAyNgorICAgIC0weDEuZmZlYWE4ZWYyZTg1OTMzODgzYzBkYzMzNDYyMzg3YjVwLTYsCisgICAgLTB4MS5mZmZmZmVwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI3CisgICAgMHgxLmZmZWFhYWVlZWU4NmU4Y2FmZTQxMzc2ZDQ3OTE5NTc5cC02LAorICAgIDB4MS5wLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI4CisgICAgLTB4MS5mZmVhYWFlZWVlODZlOGNhZmU0MTM3NmQ0NzkxOTU3OXAtNiwKKyAgICAtMHgxLnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwMjkKKyAgICAweDEuZmZlYWFlZWU2ZTg5OTI3MDAzNDEzYWJlNjRlOWRjMjFwLTYsCisgICAgMHgxLjAwMDAwMnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwMzAKKyAgICAtMHgxLmZmZWFhZWVlNmU4OTkyNzAwMzQxM2FiZTY0ZTlkYzIxcC02LAorICAgIC0weDEuMDAwMDAycC01CisgIH0sCisgIHsgLy8gRW50cnkgMTAzMQorICAgIDB4MS5mZmZhYThhZWZlZWQzOTZmZmZmYzYzNjMxM2QwYmE2ZHAtNywKKyAgICAweDEuZmZmZmZlcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTAzMgorICAgIC0weDEuZmZmYWE4YWVmZWVkMzk2ZmZmZmM2MzYzMTNkMGJhNmRwLTcsCisgICAgLTB4MS5mZmZmZmVwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMzCisgICAgMHgxLmZmZmFhYWFlZWVlZDRlZDU0OWM2NTYwZjg4OWVlNTMxcC03LAorICAgIDB4MS5wLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM0CisgICAgLTB4MS5mZmZhYWFhZWVlZWQ0ZWQ1NDljNjU2MGY4ODllZTUzMXAtNywKKyAgICAtMHgxLnAtNgorICB9LAorICB7IC8vIEVudHJ5IDEwMzUKKyAgICAweDEuZmZmYWFlYWVjZWVkNzkzZmRlNWExYTljYTViYjFlZTZwLTcsCisgICAgMHgxLjAwMDAwMnAtNgorICB9LAorICB7IC8vIEVudHJ5IDEwMzYKKyAgICAtMHgxLmZmZmFhZWFlY2VlZDc5M2ZkZTVhMWE5Y2E1YmIxZWU2cC03LAorICAgIC0weDEuMDAwMDAycC02CisgIH0sCisgIHsgLy8gRW50cnkgMTAzNworICAgIDB4MS5mZmZmZmRmYWFhYWFiYWFlZWVkZWQ5OTdmZWZmYTM1YXAtMTUsCisgICAgMHgxLmZmZmZmZXAtMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM4CisgICAgLTB4MS5mZmZmZmRmYWFhYWFiYWFlZWVkZWQ5OTdmZWZmYTM1YXAtMTUsCisgICAgLTB4MS5mZmZmZmVwLTE1CisgIH0sCisgIHsgLy8gRW50cnkgMTAzOQorICAgIDB4MS5mZmZmZmZmYWFhYWFhYWFlZWVlZWVlZWQ0ZWQ0ZWQ0ZnAtMTUsCisgICAgMHgxLnAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQwCisgICAgLTB4MS5mZmZmZmZmYWFhYWFhYWFlZWVlZWVlZWQ0ZWQ0ZWQ0ZnAtMTUsCisgICAgLTB4MS5wLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTA0MQorICAgIDB4MS4wMDAwMDFmZDU1NTU0NTU3Nzc1NzhjY2JlN2JmYzA5Y3AtMTQsCisgICAgMHgxLjAwMDAwMnAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQyCisgICAgLTB4MS4wMDAwMDFmZDU1NTU0NTU3Nzc1NzhjY2JlN2JmYzA5Y3AtMTQsCisgICAgLTB4MS4wMDAwMDJwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTA0MworICAgIDB4MS5mZmZmZmRmZmZmZmZmZWFhYWFhZWFhYWFhNmFhZWVmMHAtMjgsCisgICAgMHgxLmZmZmZmZXAtMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ0CisgICAgLTB4MS5mZmZmZmRmZmZmZmZmZWFhYWFhZWFhYWFhNmFhZWVmMHAtMjgsCisgICAgLTB4MS5mZmZmZmVwLTI4CisgIH0sCisgIHsgLy8gRW50cnkgMTA0NQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZWFhYWFhYWFhYWFhYWFhZWVlZXAtMjgsCisgICAgMHgxLnAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZWFhYWFhYWFhYWFhYWFhZWVlZXAtMjgsCisgICAgLTB4MS5wLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA0NworICAgIDB4MS4wMDAwMDFmZmZmZmZmZjU1NTU1MTU1NTU0ZDU1Nzc3MnAtMjcsCisgICAgMHgxLjAwMDAwMnAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ4CisgICAgLTB4MS4wMDAwMDFmZmZmZmZmZjU1NTU1MTU1NTU0ZDU1Nzc3MnAtMjcsCisgICAgLTB4MS4wMDAwMDJwLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA0OQorICAgIDB4MS5mZmZmZmRmZmZmZmZmZmZhYWFhYWJhYWFhYTlhYWFhZXAtMzEsCisgICAgMHgxLmZmZmZmZXAtMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUwCisgICAgLTB4MS5mZmZmZmRmZmZmZmZmZmZhYWFhYWJhYWFhYTlhYWFhZXAtMzEsCisgICAgLTB4MS5mZmZmZmVwLTMxCisgIH0sCisgIHsgLy8gRW50cnkgMTA1MQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZhYWFhYWFhYWFhYWFhYWFhZXAtMzEsCisgICAgMHgxLnAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUyCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZhYWFhYWFhYWFhYWFhYWFhZXAtMzEsCisgICAgLTB4MS5wLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTA1MworICAgIDB4MS4wMDAwMDFmZmZmZmZmZmZkNTU1NTQ1NTU1NTM1NTU1N3AtMzAsCisgICAgMHgxLjAwMDAwMnAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU0CisgICAgLTB4MS4wMDAwMDFmZmZmZmZmZmZkNTU1NTQ1NTU1NTM1NTU1N3AtMzAsCisgICAgLTB4MS4wMDAwMDJwLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTA1NQorICAgIDB4MS4wYjMzNjY1MDg5NTc1MjBkOWRjODhkN2MwOTMzN2UyNHAtMSwKKyAgICAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU2CisgICAgLTB4MS4wYjMzNjY1MDg5NTc1MjBkOWRjODhkN2MwOTMzN2UyNHAtMSwKKyAgICAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNTcKKyAgICAtMHgxLjBiMzM2NjUwODk1NzUyMGQ5ZGM4OGQ3YzA5MzM3ZTI0cC0xLAorICAgIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA1OAorICAgIDB4MS4wYjMzNjY1MDg5NTc1MjBkOWRjODhkN2MwOTMzN2UyNHAtMSwKKyAgICAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU5CisgICAgLTB4MS4wYjMzNjY1MDg5NTc1MjBkOWRjODhkN2MwOTMzN2UyNHAtMSwKKyAgICAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNjAKKyAgICAweDEuMGIzMzY2NTA4OTU3NTIwZDlkYzg4ZDdjMDkzMzdlMjRwLTEsCisgICAgLTB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA2MQorICAgIC0weDEuNDhjZTU3NTIwMmVmZDkzYzYyZjdiODgxMDZlYTFkNGRwLTEsCisgICAgMHgxLmZmZmZmY3AxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYyCisgICAgMHgxLjQ4Y2U1NzUyMDJlZmQ5M2M2MmY3Yjg4MTA2ZWExZDRkcC0xLAorICAgIC0weDEuZmZmZmZjcDEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNjMKKyAgICAtMHgxLjc3N2E1Y2Y3MmNlYzVmZDYxODk2Y2I0ZjQwZDFkZTc5cC0yNCwKKyAgICAweDEuOTIxZmI2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY0CisgICAgMHgxLjc3N2E1Y2Y3MmNlYzVmZDYxODk2Y2I0ZjQwZDFkZTc5cC0yNCwKKyAgICAtMHgxLjkyMWZiNnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTA2NQorICAgIDB4MS5mZmZmZmZmZmZmZmY3NjUyMTI0OWM3NDIyOTMwZWQ4MnAtMSwKKyAgICAweDEuOTIxZmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY2CisgICAgLTB4MS5mZmZmZmZmZmZmZmY3NjUyMTI0OWM3NDIyOTMwZWQ4MnAtMSwKKyAgICAtMHgxLjkyMWZiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA2NworICAgIDB4MS5hZWQ1NGIxOWQ1Y2Q3OTM3Y2JmNDFlZDQwOGNhMGE1MnAtMSwKKyAgICAweDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY4CisgICAgLTB4MS5hZWQ1NGIxOWQ1Y2Q3OTM3Y2JmNDFlZDQwOGNhMGE1MnAtMSwKKyAgICAtMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA2OQorICAgIDB4MS5hZWQ1NDhmMDkwY2VlMDQxOGRkM2QyMTM4YTFlNzg2NXAtMSwKKyAgICAweDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcwCisgICAgLTB4MS5hZWQ1NDhmMDkwY2VlMDQxOGRkM2QyMTM4YTFlNzg2NXAtMSwKKyAgICAtMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA3MQorICAgIDB4MS5hZWQ1NDdkYmVlNGQwZDg2ODBkMDgxM2QxZTRlMjFkMHAtMSwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA3MgorICAgIC0weDEuYWVkNTQ3ZGJlZTRkMGQ4NjgwZDA4MTNkMWU0ZTIxZDBwLTEsCisgICAgLTB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDczCisgICAgMHgxLjZhMDllNmVjYjQxZmRkN2U2ODE4NzJjODU0ODg3MDE5cC0xLAorICAgIDB4MS45MjFmYjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc0CisgICAgLTB4MS42YTA5ZTZlY2I0MWZkZDdlNjgxODcyYzg1NDg4NzAxOXAtMSwKKyAgICAtMHgxLjkyMWZiNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNzUKKyAgICAweDEuMDAwMDAxZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNiwKKyAgICAweDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc2CisgICAgLTB4MS4wMDAwMDFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI2LAorICAgIC0weDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc3CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMTA3OAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAtMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMTA3OQorICAgIDB4MS5mZmZmZmJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI3LAorICAgIDB4MS5mZmZmZmNwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDEwODAKKyAgICAtMHgxLmZmZmZmYmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgLTB4MS5mZmZmZmNwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDEwODEKKyAgICAweDEuZmZmZmY3ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAweDEuZmZmZmY4cC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgyCisgICAgLTB4MS5mZmZmZjdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI3LAorICAgIC0weDEuZmZmZmY4cC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgzCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xNDksCisgICAgMHgxLnAtMTQ4CisgIH0sCisgIHsgLy8gRW50cnkgMTA4NAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTE0OSwKKyAgICAtMHgxLnAtMTQ4CisgIH0sCisgIHsgLy8gRW50cnkgMTA4NQorICAgIDAuMGYsCisgICAgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgMTA4NgorICAgIC0wLjBmLAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg3CisgICAgMC4wLAorICAgIDAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg4CisgICAgLTAuMCwKKyAgICAtMC4wZgorICB9LAorfTsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCisKK1RFU1QobWF0aF9zaW5mLCBzaW5mX2ludGVsKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihnX3NpbmZfaW50ZWxfZGF0YSkvc2l6ZW9mKHNpbmZfaW50ZWxfZGF0YV90KTsgaSsrKSB7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGdfc2luZl9pbnRlbF9kYXRhW2ldLmV4cGVjdGVkLCBzaW5mKGdfc2luZl9pbnRlbF9kYXRhW2ldLmNhbGxfZGF0YSkpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7CisgIH0KKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOworI2VuZGlmIC8vIF9fQklPTklDX18KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfdGFuX3Rlc3QuY3BwIGIvdGVzdHMvbWF0aF90YW5fdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg2MjAxOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21hdGhfdGFuX3Rlc3QuY3BwCkBAIC0wLDAgKzEsNTIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQordHlwZWRlZiBzdHJ1Y3QgeworICBkb3VibGUgZXhwZWN0ZWQ7CisgIGRvdWJsZSBjYWxsX2RhdGE7Cit9IHRhbl9pbnRlbF9kYXRhX3Q7CisKK3N0YXRpYyB0YW5faW50ZWxfZGF0YV90IGdfdGFuX2ludGVsX2RhdGFbXSA9IHsKKyAgeyAvLyBFbnRyeSAwCisgICAgMHgxLjUwNzhjZWJmZjljNzI4MDAwMDAwMDAwMDAwMDI0ZGY4cC01LAorICAgIDB4MS41MDQ4NmIyZjg3MDE0cC01CisgIH0sCisgIHsgLy8gRW50cnkgMQorICAgIC0weDEuNTA3OGNlYmZmOWM3MjgwMDAwMDAwMDAwMDAwMjRkZjhwLTUsCisgICAgLTB4MS41MDQ4NmIyZjg3MDE0cC01CisgIH0sCisgIHsgLy8gRW50cnkgMgorICAgIDB4MS41Mzg5ZTZkZjQxOTc4ZmZmZmZmZmZmZmZmZmM2MWY1NHAtNCwKKyAgICAweDEuNTJjMzllZjA3MGNhZHAtNAorICB9LAorICB7IC8vIEVudHJ5IDMKKyAgICAtMHgxLjUzODllNmRmNDE5NzhmZmZmZmZmZmZmZmZmYzYxZjU0cC00LAorICAgIC0weDEuNTJjMzllZjA3MGNhZHAtNAorICB9LAorICB7IC8vIEVudHJ5IDQKKyAgICAweDEuYTkzM2ZlMTc2YjM3NTAwMDAwMDAwMDAwMDAwYTQwNjVwLTMsCisgICAgMHgxLmEzM2YzMmFjNWNlYjVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1CisgICAgLTB4MS5hOTMzZmUxNzZiMzc1MDAwMDAwMDAwMDAwMDBhNDA2NXAtMywKKyAgICAtMHgxLmEzM2YzMmFjNWNlYjVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2CisgICAgMHgxLmZhYzcxY2QzNGVlYTY4MDAwMDAwMDAwMDAwOWEwYzEwcC0yLAorICAgIDB4MS5kNjk2YmZhOTg4ZGI5cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNworICAgIC0weDEuZmFjNzFjZDM0ZWVhNjgwMDAwMDAwMDAwMDA5YTBjMTBwLTIsCisgICAgLTB4MS5kNjk2YmZhOTg4ZGI5cC0yCisgIH0sCisgIHsgLy8gRW50cnkgOAorICAgIDB4MS43YmE0OWY3Mzk4MjllZmZmZmZmZmZmZmZmZmU3ZTliZXAtMSwKKyAgICAweDEuNDZhYzM3MjI0MzUzNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDkKKyAgICAtMHgxLjdiYTQ5ZjczOTgyOWVmZmZmZmZmZmZmZmZmZTdlOWJlcC0xLAorICAgIC0weDEuNDZhYzM3MjI0MzUzNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwCisgICAgLTB4MS5wLTEwNzQsCisgICAgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgMTEKKyAgICAweDEucC0xMDc0LAorICAgIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgMTIKKyAgICAtMHgxLjhmMDQ4ODMyMTQ0YjcwMDIxY2NkN2E1MjQ2Y2IwYjIwcDAsCisgICAgLTB4MS4wMDE4MHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTMKKyAgICAweDEuOGYwNDg4MzIxNDRiNzAwMjFjY2Q3YTUyNDZjYjBiMjBwMCwKKyAgICAweDEuMDAxODBwMAorICB9LAorICB7IC8vIEVudHJ5IDE0CisgICAgLTB4MS44ZTg4NGIyNDMxM2FlODAyZGI0Nzg5OWZhZDE1YTZjNnAwLAorICAgIC0weDEuMDkwY2NhMThhNTU2NXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTUKKyAgICAweDEuOGU4ODRiMjQzMTNhZTgwMmRiNDc4OTlmYWQxNWE2YzZwMCwKKyAgICAweDEuMDkwY2NhMThhNTU2NXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTYKKyAgICAtMHgxLmNhMTg2NTRiMzU2OTcyOTY3YTRmMWU4NDA0YjlmOTcycDAsCisgICAgLTB4MS4wZmFhNzY1MGRmMTQ0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNworICAgIDB4MS5jYTE4NjU0YjM1Njk3Mjk2N2E0ZjFlODQwNGI5Zjk3MnAwLAorICAgIDB4MS4wZmFhNzY1MGRmMTQ0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOAorICAgIC0weDEuZTUyZmFmYTIyZWYxNDgxZDQzN2U3ZWQzMmNiYTAzYjFwLTIsCisgICAgLTB4MS4xODAwMDAwMDAwMDQwcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOQorICAgIDB4MS5lNTJmYWZhMjJlZjE0ODFkNDM3ZTdlZDMyY2JhMDNiMXAtMiwKKyAgICAweDEuMTgwMDAwMDAwMDA0MHA1CisgIH0sCisgIHsgLy8gRW50cnkgMjAKKyAgICAtMHgxLmEzY2E0MjFkYzMwZjFjNTc2MGExYWUwNzM5NmZlYzMzcC0zLAorICAgIC0weDEuNDAwMDUyN2FjYTM4OHA5OQorICB9LAorICB7IC8vIEVudHJ5IDIxCisgICAgMHgxLmEzY2E0MjFkYzMwZjFjNTc2MGExYWUwNzM5NmZlYzMzcC0zLAorICAgIDB4MS40MDAwNTI3YWNhMzg4cDk5CisgIH0sCisgIHsgLy8gRW50cnkgMjIKKyAgICAweDEuMWYzYjdkMTk3ODYwOTgwMGExNjI4ZTFkZjk1NThkZjZwMSwKKyAgICAtMHgxLjQ4NmMzNjM0NzUxZWNwMgorICB9LAorICB7IC8vIEVudHJ5IDIzCisgICAgLTB4MS4xZjNiN2QxOTc4NjA5ODAwYTE2MjhlMWRmOTU1OGRmNnAxLAorICAgIDB4MS40ODZjMzYzNDc1MWVjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNAorICAgIC0weDEuN2ViODczMzQzZmE3YWI1ZDllZjlhNzhhZmQzM2Q1MDFwLTEsCisgICAgLTB4MS40OGE3MTgwMGI1NzEzcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjUKKyAgICAweDEuN2ViODczMzQzZmE3YWI1ZDllZjlhNzhhZmQzM2Q1MDFwLTEsCisgICAgMHgxLjQ4YTcxODAwYjU3MTNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNgorICAgIDB4MS5iZTA3MTU3MmY2NGU4ODA0N2MzOTM5YmE0NjYyNmEyNXAtMSwKKyAgICAtMHgxLjQ5YWYwMzE0ZWVhM2NwMjk5CisgIH0sCisgIHsgLy8gRW50cnkgMjcKKyAgICAtMHgxLmJlMDcxNTcyZjY0ZTg4MDQ3YzM5MzliYTQ2NjI2YTI1cC0xLAorICAgIDB4MS40OWFmMDMxNGVlYTNjcDI5OQorICB9LAorICB7IC8vIEVudHJ5IDI4CisgICAgMHgxLmZmYmIyNjQ3ZjU3YTE4MWJkMTI5NmZhZjMzYzA0ZTNlcC0xLAorICAgIC0weDEuNWZlMDBjODE0ZmZkNnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjkKKyAgICAtMHgxLmZmYmIyNjQ3ZjU3YTE4MWJkMTI5NmZhZjMzYzA0ZTNlcC0xLAorICAgIDB4MS41ZmUwMGM4MTRmZmQ2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMAorICAgIC0weDEuYThlYjE0MmIyZjQyNzU2ZTZkZWRmZjA5MjY3YTYyYzZwLTEsCisgICAgLTB4MS42MmFjMjQxZjc5NDM5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzEKKyAgICAweDEuYThlYjE0MmIyZjQyNzU2ZTZkZWRmZjA5MjY3YTYyYzZwLTEsCisgICAgMHgxLjYyYWMyNDFmNzk0MzlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMgorICAgIC0weDEuN2QxZDM1NTlkZGFjODg1ZWUzMDYzMmM3NjA5OThjOGVwLTQsCisgICAgLTB4MS43YzA1MWI0NzZjYThkcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzMKKyAgICAweDEuN2QxZDM1NTlkZGFjODg1ZWUzMDYzMmM3NjA5OThjOGVwLTQsCisgICAgMHgxLjdjMDUxYjQ3NmNhOGRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNAorICAgIC0weDEuMGUxZDAzMDViN2I3MjdmZjE5M2Q5ZDBiOGVhZmYxODFwMiwKKyAgICAtMHgxLjdlNDNjODgwMDc0YzZwOTk2CisgIH0sCisgIHsgLy8gRW50cnkgMzUKKyAgICAweDEuMGUxZDAzMDViN2I3MjdmZjE5M2Q5ZDBiOGVhZmYxODFwMiwKKyAgICAweDEuN2U0M2M4ODAwNzRjNnA5OTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNgorICAgIC0weDEuODEyYmRmZTAyNDZiYmYyYTdhYjY0NzdhNWNiYjM1MmJwLTQsCisgICAgLTB4MS44MDBhYzM2MzM5OGM0cC00CisgIH0sCisgIHsgLy8gRW50cnkgMzcKKyAgICAweDEuODEyYmRmZTAyNDZiYmYyYTdhYjY0NzdhNWNiYjM1MmJwLTQsCisgICAgMHgxLjgwMGFjMzYzMzk4YzRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOAorICAgIC0weDEuODUwZTU1NDRiMGM3OTdiMzYwMzRjOThlMTZmM2ZhZmJwLTQsCisgICAgLTB4MS44M2U0NmFlZGJmZjM2cC00CisgIH0sCisgIHsgLy8gRW50cnkgMzkKKyAgICAweDEuODUwZTU1NDRiMGM3OTdiMzYwMzRjOThlMTZmM2ZhZmJwLTQsCisgICAgMHgxLjgzZTQ2YWVkYmZmMzZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MAorICAgIDB4MS5lNmI1ZDkxYmJhOTMzN2ZjMGNlYjY4NmM2MGNkMjliZHAtMiwKKyAgICAtMHgxLjgzZWNmNDJlOTI2NWFwMworICB9LAorICB7IC8vIEVudHJ5IDQxCisgICAgLTB4MS5lNmI1ZDkxYmJhOTMzN2ZjMGNlYjY4NmM2MGNkMjliZHAtMiwKKyAgICAweDEuODNlY2Y0MmU5MjY1YXAzCisgIH0sCisgIHsgLy8gRW50cnkgNDIKKyAgICAtMHgxLmYzNjg4YmMyNTk0ZTIwMTAyNTczY2ZmNDgxOTBhYzI4cC0xLAorICAgIC0weDEuOGJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDMKKyAgICAweDEuZjM2ODhiYzI1OTRlMjAxMDI1NzNjZmY0ODE5MGFjMjhwLTEsCisgICAgMHgxLjhiY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDQ0CisgICAgMHgxLmVjMGQwZmFjZGQwOGI3NzNhMWQ5MzQ4NGUyZDY2YzQ1cC0yLAorICAgIC0weDEuOGQyZmZmZmZmZmZkMXA5CisgIH0sCisgIHsgLy8gRW50cnkgNDUKKyAgICAtMHgxLmVjMGQwZmFjZGQwOGI3NzNhMWQ5MzQ4NGUyZDY2YzQ1cC0yLAorICAgIDB4MS44ZDJmZmZmZmZmZmQxcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NgorICAgIDB4MS5lYzAzMzZkNTM5MjU5NzY4OWI2NDBiZjA0OTIyNzMzOHAtMiwKKyAgICAtMHgxLjhkMzAwMGZmZmZmZDFwOQorICB9LAorICB7IC8vIEVudHJ5IDQ3CisgICAgLTB4MS5lYzAzMzZkNTM5MjU5NzY4OWI2NDBiZjA0OTIyNzMzOHAtMiwKKyAgICAweDEuOGQzMDAwZmZmZmZkMXA5CisgIH0sCisgIHsgLy8gRW50cnkgNDgKKyAgICAtMHgxLmY4MDkzYTAxNzAyMWY4MWMwMWMxMzE0NzVlNTBlNDlicC0xLAorICAgIC0weDEuYmFlZWU2ZjZmYTUzOHA2CisgIH0sCisgIHsgLy8gRW50cnkgNDkKKyAgICAweDEuZjgwOTNhMDE3MDIxZjgxYzAxYzEzMTQ3NWU1MGU0OWJwLTEsCisgICAgMHgxLmJhZWVlNmY2ZmE1MzhwNgorICB9LAorICB7IC8vIEVudHJ5IDUwCisgICAgMHgxLmRlYWYzNDk5NGI3ZTc3ZmQ1MmE0MDhmMGM2NzdlYWUxcDMsCisgICAgLTB4MS5jNjg2N2UwNzQ1NWVhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MQorICAgIC0weDEuZGVhZjM0OTk0YjdlNzdmZDUyYTQwOGYwYzY3N2VhZTFwMywKKyAgICAweDEuYzY4NjdlMDc0NTVlYXAzCisgIH0sCisgIHsgLy8gRW50cnkgNTIKKyAgICAtMHgxLmYyOWFhODdkNGUxZGQ4MWI3YjY5YWJlOTc5MGVlMGFicC0xLAorICAgIC0weDEuZDI3ZmZmZmZmZTBwNworICB9LAorICB7IC8vIEVudHJ5IDUzCisgICAgMHgxLmYyOWFhODdkNGUxZGQ4MWI3YjY5YWJlOTc5MGVlMGFicC0xLAorICAgIDB4MS5kMjdmZmZmZmZlMHA3CisgIH0sCisgIHsgLy8gRW50cnkgNTQKKyAgICAweDEuNzYyZmI0N2ExOTI1OTdmZmZmZmZlZWVkYjI2ZmI5NzhwLTMsCisgICAgLTB4MS5mMGRmMzgwMjljOWVmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NQorICAgIC0weDEuNzYyZmI0N2ExOTI1OTdmZmZmZmZlZWVkYjI2ZmI5NzhwLTMsCisgICAgMHgxLmYwZGYzODAyOWM5ZWZwMworICB9LAorICB7IC8vIEVudHJ5IDU2CisgICAgLTB4MS44ZWIyM2VmMjEyNmJiN2ZmZmQxNTNjN2ZmOTBlOWY2Y3AwLAorICAgIC0weDEuZmZmZmZjMDAwMGZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDU3CisgICAgMHgxLjhlYjIzZWYyMTI2YmI3ZmZmZDE1M2M3ZmY5MGU5ZjZjcDAsCisgICAgMHgxLmZmZmZmYzAwMDBmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OAorICAgIC0weDEuZDI5OWQyODViZjAxODQyM2ZiYzE0ZWZjMDBlZDU3OTlwLTIsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZjcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OQorICAgIDB4MS5kMjk5ZDI4NWJmMDE4NDIzZmJjMTRlZmMwMGVkNTc5OXAtMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmY3AxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNjAKKyAgICAweDEucC0xMDc0LAorICAgIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNjEKKyAgICAtMHgxLnAtMTA3NCwKKyAgICAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MgorICAgIC0weDEuODJiZWU1NzJlMmFjOGM3NmQ2OTA5YzY2YjI4MmU5NjJwLTYsCisgICAgMHgxLjBwNjQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MworICAgIDB4MS44MmJlZTU3MmUyYWM4Yzc2ZDY5MDljNjZiMjgyZTk2MnAtNiwKKyAgICAtMHgxLjBwNjQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NAorICAgIDB4MS5mNTNhOGQwNWFmY2Y2YzRiZjJlMWU1MjA4YjM0ZDVjNnA0LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDUxCisgIH0sCisgIHsgLy8gRW50cnkgNjUKKyAgICAtMHgxLmY1M2E4ZDA1YWZjZjZjNGJmMmUxZTUyMDhiMzRkNWM2cDQsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDUxCisgIH0sCisgIHsgLy8gRW50cnkgNjYKKyAgICAtMHgxLjZiMzcxZGY1OTgwY2QzZGIzNjc2OGUzNjA0NmE0YTgxcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDEwMTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NworICAgIDB4MS42YjM3MWRmNTk4MGNkM2RiMzY3NjhlMzYwNDZhNGE4MXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMTAxNworICB9LAorICB7IC8vIEVudHJ5IDY4CisgICAgLTB4MS5iMzJlNzhmNDlhMGM4M2M3ZjYwYTNkYzNlZjhlY2YxZnAyLAorICAgIDB4MS4wMDAwMDAwMDAwMDAzcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OQorICAgIDB4MS5iMzJlNzhmNDlhMGM4M2M3ZjYwYTNkYzNlZjhlY2YxZnAyLAorICAgIC0weDEuMDAwMDAwMDAwMDAwM3AzCisgIH0sCisgIHsgLy8gRW50cnkgNzAKKyAgICAweDEuOThhZmJkMjQyNjRiYzNhOWQxODM4MDc0YTNkYWE1ZTVwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDNwMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MQorICAgIC0weDEuOThhZmJkMjQyNjRiYzNhOWQxODM4MDc0YTNkYWE1ZTVwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAzcDIxCisgIH0sCisgIHsgLy8gRW50cnkgNzIKKyAgICAweDEuYjY2N2EyYWJlMzZjMjgwMzE1YzYyYTFmOTc0ZTc2MTFwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwM3A1MTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MworICAgIC0weDEuYjY2N2EyYWJlMzZjMjgwMzE1YzYyYTFmOTc0ZTc2MTFwMCwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDNwNTExCisgIH0sCisgIHsgLy8gRW50cnkgNzQKKyAgICAweDEuMjA0YzI2YTQyNzg2MWZmZWZiNzM3OTZiY2YxZmQ3MjRwLTIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDNwNzE2CisgIH0sCisgIHsgLy8gRW50cnkgNzUKKyAgICAtMHgxLjIwNGMyNmE0Mjc4NjFmZmVmYjczNzk2YmNmMWZkNzI0cC0yLAorICAgIC0weDEuMDAwMDAwMDAwMDAwM3A3MTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NgorICAgIDB4MS45MWM4ZjI5MzgyNjJjZTJlOWFkOTlhYjE3ZTQ2YWJkNnA0LAorICAgIDB4MS4wMDAwMDAwMDAwMDA3cDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NworICAgIC0weDEuOTFjOGYyOTM4MjYyY2UyZTlhZDk5YWIxN2U0NmFiZDZwNCwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDdwOAorICB9LAorICB7IC8vIEVudHJ5IDc4CisgICAgLTB4MS4yN2Y3ZjA4ODAwMzFmZTQyZWQxZDVmZWRjNDk2ZDE0ZXAtMiwKKyAgICAweDEuMDAwMDAwMDAwMDAzOHAzODAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OQorICAgIDB4MS4yN2Y3ZjA4ODAwMzFmZTQyZWQxZDVmZWRjNDk2ZDE0ZXAtMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMzhwMzgwCisgIH0sCisgIHsgLy8gRW50cnkgODAKKyAgICAtMHgxLmQ2ODkwY2MzMjcxMWQ0YjA0NjkwM2FkODg1MWE0MWJicC0zLAorICAgIDB4MS4wMDAwMDAwMDAwMTE4cDM4MAorICB9LAorICB7IC8vIEVudHJ5IDgxCisgICAgMHgxLmQ2ODkwY2MzMjcxMWQ0YjA0NjkwM2FkODg1MWE0MWJicC0zLAorICAgIC0weDEuMDAwMDAwMDAwMDExOHAzODAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MgorICAgIDB4MS45YWYwZTZmNzJmOTEyN2ZmZmZjMDIwMGVhN2Y0MDZmNHAtMywKKyAgICAweDEuMDAwMDAwMDAwMDkwOHA1MDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MworICAgIC0weDEuOWFmMGU2ZjcyZjkxMjdmZmZmYzAyMDBlYTdmNDA2ZjRwLTMsCisgICAgLTB4MS4wMDAwMDAwMDAwOTA4cDUwMAorICB9LAorICB7IC8vIEVudHJ5IDg0CisgICAgMHgxLjE3YjRmNWJmNDQwOTc4MDAyZDY2ZjFiZDM3MDMyNTMycC0xLAorICAgIDB4MS4wMDAwMDAwMDBjMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDg1CisgICAgLTB4MS4xN2I0ZjViZjQ0MDk3ODAwMmQ2NmYxYmQzNzAzMjUzMnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMGMwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODYKKyAgICAtMHgxLjE3ZWIyMmU0ZGJhNzI4MDBkMmEwMDA2OTgyNjNkNTgycDAsCisgICAgMHgxLjAwMDAwMDAxY3A0MAorICB9LAorICB7IC8vIEVudHJ5IDg3CisgICAgMHgxLjE3ZWIyMmU0ZGJhNzI4MDBkMmEwMDA2OTgyNjNkNTgycDAsCisgICAgLTB4MS4wMDAwMDAwMWNwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OAorICAgIDB4MS5mNmYwM2NlNTY5MGE2ZTM4ODBiOTVmZDhiMmM4MzYzZXAtMSwKKyAgICAweDEuMDAwMDAwMXAyNTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OQorICAgIC0weDEuZjZmMDNjZTU2OTBhNmUzODgwYjk1ZmQ4YjJjODM2M2VwLTEsCisgICAgLTB4MS4wMDAwMDAxcDI1MAorICB9LAorICB7IC8vIEVudHJ5IDkwCisgICAgMHgxLmUyM2I3ODI4MmE3NWQwZGQ2ZGEzNTY5MmQxNDJiYzYzcC0xLAorICAgIDB4MS4wMDAwMDA5ODhwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MQorICAgIC0weDEuZTIzYjc4MjgyYTc1ZDBkZDZkYTM1NjkyZDE0MmJjNjNwLTEsCisgICAgLTB4MS4wMDAwMDA5ODhwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MgorICAgIC0weDEuOTgxYjY1N2UxY2EyNzAwOWQ4MmQ4ZTE4MzE0MjQwYjVwLTMsCisgICAgMHgxLjAwMDAwYzBwNDI5CisgIH0sCisgIHsgLy8gRW50cnkgOTMKKyAgICAweDEuOTgxYjY1N2UxY2EyNzAwOWQ4MmQ4ZTE4MzE0MjQwYjVwLTMsCisgICAgLTB4MS4wMDAwMGMwcDQyOQorICB9LAorICB7IC8vIEVudHJ5IDk0CisgICAgLTB4MS40NTVhMjE4NGY0YzNkZmZiMDk4NjkxOWNlY2U2ODNhNHAtMSwKKyAgICAweDEuMDAwMDBmY3AxMDAwCisgIH0sCisgIHsgLy8gRW50cnkgOTUKKyAgICAweDEuNDU1YTIxODRmNGMzZGZmYjA5ODY5MTljZWNlNjgzYTRwLTEsCisgICAgLTB4MS4wMDAwMGZjcDEwMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NgorICAgIDB4MS44ZWU2Njk2MmYyMTBjODAwMDAwNTY4YzdkYWFkM2EyOHAwLAorICAgIDB4MS4wMDBmMzcxYjdhMDA2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NworICAgIC0weDEuOGVlNjY5NjJmMjEwYzgwMDAwMDU2OGM3ZGFhZDNhMjhwMCwKKyAgICAtMHgxLjAwMGYzNzFiN2EwMDZwMAorICB9LAorICB7IC8vIEVudHJ5IDk4CisgICAgLTB4MS5lY2Q3NWNmNmQ0NjYzYmVlMWM5NmYwMzE4NGZhZTA4NnAtMywKKyAgICAweDEuMDAxcDE1CisgIH0sCisgIHsgLy8gRW50cnkgOTkKKyAgICAweDEuZWNkNzVjZjZkNDY2M2JlZTFjOTZmMDMxODRmYWUwODZwLTMsCisgICAgLTB4MS4wMDFwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAKKyAgICAweDEuMTdkNDIwMzMyNzdjYzgyNDRjY2I2ZTUxNTQ0ODIxMDVwLTEsCisgICAgMHgxLjAwMTdmZmZmZmZmZmRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEKKyAgICAtMHgxLjE3ZDQyMDMzMjc3Y2M4MjQ0Y2NiNmU1MTU0NDgyMTA1cC0xLAorICAgIC0weDEuMDAxN2ZmZmZmZmZmZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMgorICAgIDB4MS44ZjA0ODgzMjE0NGI3MDAyMWNjZDdhNTI0NmNiMGIyMHAwLAorICAgIDB4MS4wMDE4MHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTAzCisgICAgLTB4MS44ZjA0ODgzMjE0NGI3MDAyMWNjZDdhNTI0NmNiMGIyMHAwLAorICAgIC0weDEuMDAxODBwMAorICB9LAorICB7IC8vIEVudHJ5IDEwNAorICAgIC0weDEuMTgyNzNjYzNlNzYzOTAwNzQzNzA0MDI4Y2ZiMTE0YTVwLTIsCisgICAgMHgxLjAwMWZmZmVwNTAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA1CisgICAgMHgxLjE4MjczY2MzZTc2MzkwMDc0MzcwNDAyOGNmYjExNGE1cC0yLAorICAgIC0weDEuMDAxZmZmZXA1MDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYKKyAgICAtMHgxLmQ4ZjkwY2FkMzA1NDZjZTViODI2OGIzMzBjZTUwYTZmcC0yLAorICAgIDB4MS4wMThwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcKKyAgICAweDEuZDhmOTBjYWQzMDU0NmNlNWI4MjY4YjMzMGNlNTBhNmZwLTIsCisgICAgLTB4MS4wMThwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgKKyAgICAweDEuYjA3OWVhMGQxNGE0YTdmZmMwNGJkNmZiZjQ1MWJiMzRwLTIsCisgICAgMHgxLjAxYjhhNDg0YWMwYjZwNAorICB9LAorICB7IC8vIEVudHJ5IDEwOQorICAgIC0weDEuYjA3OWVhMGQxNGE0YTdmZmMwNGJkNmZiZjQ1MWJiMzRwLTIsCisgICAgLTB4MS4wMWI4YTQ4NGFjMGI2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAKKyAgICAtMHgxLmE0MGMyNjJmNmFiOTk3ZmVmNDNiZjU0YWYzYzVhNzY1cC0xLAorICAgIDB4MS4wMjZhYzBlZjMyZDQwcDI4CisgIH0sCisgIHsgLy8gRW50cnkgMTExCisgICAgMHgxLmE0MGMyNjJmNmFiOTk3ZmVmNDNiZjU0YWYzYzVhNzY1cC0xLAorICAgIC0weDEuMDI2YWMwZWYzMmQ0MHAyOAorICB9LAorICB7IC8vIEVudHJ5IDExMgorICAgIDB4MS4wM2I4YzFmMzI5NjY1N2M2NTFhMTNlYjViMTAwZmM3OHAtNCwKKyAgICAweDEuMDM1ZmRjZDA4YTU5NnAtNAorICB9LAorICB7IC8vIEVudHJ5IDExMworICAgIC0weDEuMDNiOGMxZjMyOTY2NTdjNjUxYTEzZWI1YjEwMGZjNzhwLTQsCisgICAgLTB4MS4wMzVmZGNkMDhhNTk2cC00CisgIH0sCisgIHsgLy8gRW50cnkgMTE0CisgICAgMHgxLjA0NDk3OWQxMzRlZDk3Yzc4YmZlNThhOTAwM2JmYWM1cC00LAorICAgIDB4MS4wM2ZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUKKyAgICAtMHgxLjA0NDk3OWQxMzRlZDk3Yzc4YmZlNThhOTAwM2JmYWM1cC00LAorICAgIC0weDEuMDNmcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTE2CisgICAgLTB4MS5lNzE3ZGU3ZGEyY2U4MzEwNjZiYWQxZGY1ZTg4YTAzMHAwLAorICAgIDB4MS4wNzBwMQorICB9LAorICB7IC8vIEVudHJ5IDExNworICAgIDB4MS5lNzE3ZGU3ZGEyY2U4MzEwNjZiYWQxZGY1ZTg4YTAzMHAwLAorICAgIC0weDEuMDcwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgKKyAgICAtMHgxLjhjODk2ZjYwN2ZmNTJiYmFlODZmNjNlMTlhOTg4ZDJicC0xLAorICAgIDB4MS4wNzBwMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTkKKyAgICAweDEuOGM4OTZmNjA3ZmY1MmJiYWU4NmY2M2UxOWE5ODhkMmJwLTEsCisgICAgLTB4MS4wNzBwMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAKKyAgICAweDEuZmZmZmZmZmZmNWQ4NDZhZjZmMDE3MjYyYzljODFkZTRwLTEsCisgICAgMHgxLjA3ZTRjZWY0Y2JiMGVwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMQorICAgIC0weDEuZmZmZmZmZmZmNWQ4NDZhZjZmMDE3MjYyYzljODFkZTRwLTEsCisgICAgLTB4MS4wN2U0Y2VmNGNiYjBlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjIKKyAgICAweDEuYjQ3NmQzMmMxYjc0NTdmZmZmNjZlZGIzZjc4YTcwMDNwMCwKKyAgICAweDEuMGE1M2E3OGIxM2FiMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTIzCisgICAgLTB4MS5iNDc2ZDMyYzFiNzQ1N2ZmZmY2NmVkYjNmNzhhNzAwM3AwLAorICAgIC0weDEuMGE1M2E3OGIxM2FiMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTI0CisgICAgMHgxLmYyZGY3YzAyZDIwY2Q4MWIzMzExN2MwMDU0NWY3YTZicC0xLAorICAgIDB4MS4wYWZiYzI2OGI5ODQ4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUKKyAgICAtMHgxLmYyZGY3YzAyZDIwY2Q4MWIzMzExN2MwMDU0NWY3YTZicC0xLAorICAgIC0weDEuMGFmYmMyNjhiOTg0OHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTI2CisgICAgLTB4MS5iNTcxYWY1NjJmMDhhNWEwM2RkODQ5Mzk5MGIyOWRiMXAwLAorICAgIDB4MS4wY2Q1ZDQzNWJlYTZkcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcKKyAgICAweDEuYjU3MWFmNTYyZjA4YTVhMDNkZDg0OTM5OTBiMjlkYjFwMCwKKyAgICAtMHgxLjBjZDVkNDM1YmVhNmRwMQorICB9LAorICB7IC8vIEVudHJ5IDEyOAorICAgIC0weDEuYWM3M2QyOTIwYTc5NTUzMzZhYjJhMzQzNmM3N2MyNzZwMCwKKyAgICAweDEuMGUwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjkKKyAgICAweDEuYWM3M2QyOTIwYTc5NTUzMzZhYjJhMzQzNmM3N2MyNzZwMCwKKyAgICAtMHgxLjBlMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTMwCisgICAgLTB4MS4xMjZkY2U4YWM3YzgxODAwMGNmY2YzZGYwNjZhNGEyZHAtMSwKKyAgICAweDEuMTA4NjIxMDg0MjEwOHA1CisgIH0sCisgIHsgLy8gRW50cnkgMTMxCisgICAgMHgxLjEyNmRjZThhYzdjODE4MDAwY2ZjZjNkZjA2NmE0YTJkcC0xLAorICAgIC0weDEuMTA4NjIxMDg0MjEwOHA1CisgIH0sCisgIHsgLy8gRW50cnkgMTMyCisgICAgLTB4MS45NjgwYzAyNjAxMDQ2Y2E1MDZjMGUzZjc0NGRiMWQwYXAwLAorICAgIDB4MS4xMTBwMQorICB9LAorICB7IC8vIEVudHJ5IDEzMworICAgIDB4MS45NjgwYzAyNjAxMDQ2Y2E1MDZjMGUzZjc0NGRiMWQwYXAwLAorICAgIC0weDEuMTEwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQKKyAgICAweDEuZDFlNzE2OTM0NDY5YjJiYzAyZmE4MzVhZTAxNDlmNThwMCwKKyAgICAweDEuMTE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUKKyAgICAtMHgxLmQxZTcxNjkzNDQ2OWIyYmMwMmZhODM1YWUwMTQ5ZjU4cDAsCisgICAgLTB4MS4xMThwMAorICB9LAorICB7IC8vIEVudHJ5IDEzNgorICAgIC0weDEuNmFhNzMxMDE0MzA4MzdmZmZmZmViYWFmZDQ1ZjdlZmFwLTEsCisgICAgMHgxLjE5ZGYzODlmMzllMGFwMworICB9LAorICB7IC8vIEVudHJ5IDEzNworICAgIDB4MS42YWE3MzEwMTQzMDgzN2ZmZmZmZWJhYWZkNDVmN2VmYXAtMSwKKyAgICAtMHgxLjE5ZGYzODlmMzllMGFwMworICB9LAorICB7IC8vIEVudHJ5IDEzOAorICAgIDB4MS5jYjlhOTkyMjdiZGM5NzJjZDQxNDU5NjljM2RjMzhjMXAxLAorICAgIDB4MS4xYzM1OTgyMTEwMTNhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzkKKyAgICAtMHgxLmNiOWE5OTIyN2JkYzk3MmNkNDE0NTk2OWMzZGMzOGMxcDEsCisgICAgLTB4MS4xYzM1OTgyMTEwMTNhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDAKKyAgICAtMHgxLmJjMTA5YzNlNjE3MjQ1MGE1MzA4YjRjNmViMjg5OGNhcDcsCisgICAgMHgxLjFkNjVhYTQyMjRjMzBwMTE4CisgIH0sCisgIHsgLy8gRW50cnkgMTQxCisgICAgMHgxLmJjMTA5YzNlNjE3MjQ1MGE1MzA4YjRjNmViMjg5OGNhcDcsCisgICAgLTB4MS4xZDY1YWE0MjI0YzMwcDExOAorICB9LAorICB7IC8vIEVudHJ5IDE0MgorICAgIC0weDEuMDliMzkzZjQ4YjJjNjdmZmZmM2JkNTU5YzYzMjZlNjBwLTEsCisgICAgMHgxLjFlNDY1ODI3MmRjNmZwMworICB9LAorICB7IC8vIEVudHJ5IDE0MworICAgIDB4MS4wOWIzOTNmNDhiMmM2N2ZmZmYzYmQ1NTljNjMyNmU2MHAtMSwKKyAgICAtMHgxLjFlNDY1ODI3MmRjNmZwMworICB9LAorICB7IC8vIEVudHJ5IDE0NAorICAgIDB4MS4yMDAwMDAwMDAwMDc5ODAwMDAwMDAwM2Q4MjY2NjY2NnAtMjIsCisgICAgMHgxLjJwLTIyCisgIH0sCisgIHsgLy8gRW50cnkgMTQ1CisgICAgLTB4MS4yMDAwMDAwMDAwMDc5ODAwMDAwMDAwM2Q4MjY2NjY2NnAtMjIsCisgICAgLTB4MS4ycC0yMgorICB9LAorICB7IC8vIEVudHJ5IDE0NgorICAgIC0weDEuMDJhMzM1YjAwNzA3YTdmZmZmYmU0NTVhZGFiN2U4MTRwMCwKKyAgICAweDEuMjEyNzQwOTYyMGNhY3A5NQorICB9LAorICB7IC8vIEVudHJ5IDE0NworICAgIDB4MS4wMmEzMzViMDA3MDdhN2ZmZmZiZTQ1NWFkYWI3ZTgxNHAwLAorICAgIC0weDEuMjEyNzQwOTYyMGNhY3A5NQorICB9LAorICB7IC8vIEVudHJ5IDE0OAorICAgIDB4MS4yNTA4YjljMTI3M2FjMDM0YzNjNzljNDA4OGUyYWNmZHAtNCwKKyAgICAweDEuMjQ4OTIyNDg5MjI0OHAtNAorICB9LAorICB7IC8vIEVudHJ5IDE0OQorICAgIC0weDEuMjUwOGI5YzEyNzNhYzAzNGMzYzc5YzQwODhlMmFjZmRwLTQsCisgICAgLTB4MS4yNDg5MjI0ODkyMjQ4cC00CisgIH0sCisgIHsgLy8gRW50cnkgMTUwCisgICAgMHgxLmZkZWQ1ZjUzZDEzMmQyNmE4MjQ0YTYzZjliY2RmMTUzcDIsCisgICAgMHgxLjJhNTJkMTE5ZGEwNjFwMjM3CisgIH0sCisgIHsgLy8gRW50cnkgMTUxCisgICAgLTB4MS5mZGVkNWY1M2QxMzJkMjZhODI0NGE2M2Y5YmNkZjE1M3AyLAorICAgIC0weDEuMmE1MmQxMTlkYTA2MXAyMzcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTIKKyAgICAweDEuMmRlNTZhNmVmOWM1ZDdlOWM3MTAzMDQwNzUzMGYxZDdwLTQsCisgICAgMHgxLjJkNTllYmFiOGRhZTRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTMKKyAgICAtMHgxLjJkZTU2YTZlZjljNWQ3ZTljNzEwMzA0MDc1MzBmMWQ3cC00LAorICAgIC0weDEuMmQ1OWViYWI4ZGFlNHAtNAorICB9LAorICB7IC8vIEVudHJ5IDE1NAorICAgIDB4MS4zMTY2NWViMTkxZmJhODAwYjdlNzE1ZmQxMTcxNmM4Y3AtNCwKKyAgICAweDEuMzBkNWY4ZTU0YjZkOHAtNAorICB9LAorICB7IC8vIEVudHJ5IDE1NQorICAgIC0weDEuMzE2NjVlYjE5MWZiYTgwMGI3ZTcxNWZkMTE3MTZjOGNwLTQsCisgICAgLTB4MS4zMGQ1ZjhlNTRiNmQ4cC00CisgIH0sCisgIHsgLy8gRW50cnkgMTU2CisgICAgMHgxLjNjYzFkNGQyOGJmZDE3ZmRlZDlhZTUwNDA3NTkwZjNmcC0yLAorICAgIDB4MS4zMzMyNzVkNjNlYzUwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTU3CisgICAgLTB4MS4zY2MxZDRkMjhiZmQxN2ZkZWQ5YWU1MDQwNzU5MGYzZnAtMiwKKyAgICAtMHgxLjMzMzI3NWQ2M2VjNTBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTgKKyAgICAweDEuM2NjMjM3YzBjN2RjYmZmZjEwNDZhZDlhMDY4YWY1MTBwLTIsCisgICAgMHgxLjMzMzJkMDIwYjZkYTlwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTkKKyAgICAtMHgxLjNjYzIzN2MwYzdkY2JmZmYxMDQ2YWQ5YTA2OGFmNTEwcC0yLAorICAgIC0weDEuMzMzMmQwMjBiNmRhOXAtMgorICB9LAorICB7IC8vIEVudHJ5IDE2MAorICAgIDB4MS41ZTQ3MmUxNjk5OWRmMDAwMDBmYzA2ZWU0NzRmYmZjOXAtMSwKKyAgICAweDEuMzMzMzMzNDAxZTY2YnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE2MQorICAgIC0weDEuNWU0NzJlMTY5OTlkZjAwMDAwZmMwNmVlNDc0ZmJmYzlwLTEsCisgICAgLTB4MS4zMzMzMzM0MDFlNjZicC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTYyCisgICAgMHgxLmI1ZWQxYzIwODBhOTg3ZmM4NGYyNmVjOTU4YjJhYzQ3cC0xLAorICAgIDB4MS4zOGYxMzdjYjlkYmZjcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjMKKyAgICAtMHgxLmI1ZWQxYzIwODBhOTg3ZmM4NGYyNmVjOTU4YjJhYzQ3cC0xLAorICAgIC0weDEuMzhmMTM3Y2I5ZGJmY3A5CisgIH0sCisgIHsgLy8gRW50cnkgMTY0CisgICAgMHgxLjAxYWEyMmUyMTMzZDM3ZmZmZmYyYTBjMDgwOTMzNThlcDEsCisgICAgMHgxLjM5YTM4M2YzZmEwMDNwODUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjUKKyAgICAtMHgxLjAxYWEyMmUyMTMzZDM3ZmZmZmYyYTBjMDgwOTMzNThlcDEsCisgICAgLTB4MS4zOWEzODNmM2ZhMDAzcDg1CisgIH0sCisgIHsgLy8gRW50cnkgMTY2CisgICAgMHgxLmZmZmZmZmZmZmY1ODIzNjMyMjgxOWQwNjBlYjY3YzNjcC0xLAorICAgIDB4MS4zYTI4YzU5ZDU0MzExcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjcKKyAgICAtMHgxLmZmZmZmZmZmZmY1ODIzNjMyMjgxOWQwNjBlYjY3YzNjcC0xLAorICAgIC0weDEuM2EyOGM1OWQ1NDMxMXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTY4CisgICAgMHgxLjcxNjY2ODlkNDgwM2U4M2QyYjZiMWQxNWY1YWNhMjZlcC0xLAorICAgIDB4MS40MDAwMDAwMDAzZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTY5CisgICAgLTB4MS43MTY2Njg5ZDQ4MDNlODNkMmI2YjFkMTVmNWFjYTI2ZXAtMSwKKyAgICAtMHgxLjQwMDAwMDAwMDNmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzAKKyAgICAtMHgxLmZmN2QyN2IzN2ViYTA4MTkxOTllNTMzY2M1MDE2ZjBkcC0xLAorICAgIDB4MS40MDcyNGE0NDcxNGNmcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzEKKyAgICAweDEuZmY3ZDI3YjM3ZWJhMDgxOTE5OWU1MzNjYzUwMTZmMGRwLTEsCisgICAgLTB4MS40MDcyNGE0NDcxNGNmcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzIKKyAgICAweDEuNDUzYTdkMjlkYWRhZDdjMGRkYTc4YTczOThiZTA4NzNwLTQsCisgICAgMHgxLjQ0OGMyZDZlMWUxYWZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzMKKyAgICAtMHgxLjQ1M2E3ZDI5ZGFkYWQ3YzBkZGE3OGE3Mzk4YmUwODczcC00LAorICAgIC0weDEuNDQ4YzJkNmUxZTFhZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDE3NAorICAgIC0weDEuYTUwZjc2MDE0MTNlNTNhYjFjNWEyZjBkNjc2YzM5N2NwMCwKKyAgICAweDEuNDc4ZmMwOHA0MworICB9LAorICB7IC8vIEVudHJ5IDE3NQorICAgIDB4MS5hNTBmNzYwMTQxM2U1M2FiMWM1YTJmMGQ2NzZjMzk3Y3AwLAorICAgIC0weDEuNDc4ZmMwOHA0MworICB9LAorICB7IC8vIEVudHJ5IDE3NgorICAgIC0weDEuYTk5OTFhY2I3NjM2YmVlZTViMWE1ZDM1YThhODk5MTdwLTQsCisgICAgMHgxLjRlOTNiZWU3MmI1NjVwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzcKKyAgICAweDEuYTk5OTFhY2I3NjM2YmVlZTViMWE1ZDM1YThhODk5MTdwLTQsCisgICAgLTB4MS40ZTkzYmVlNzJiNTY1cDYyCisgIH0sCisgIHsgLy8gRW50cnkgMTc4CisgICAgMHgxLjI5NTIzOTY5NDU5NDdiNzI2ZWJmMDI1YThiYTA3MDkzcDEsCisgICAgMHgxLjRmMGYzMDhwNDg4CisgIH0sCisgIHsgLy8gRW50cnkgMTc5CisgICAgLTB4MS4yOTUyMzk2OTQ1OTQ3YjcyNmViZjAyNWE4YmEwNzA5M3AxLAorICAgIC0weDEuNGYwZjMwOHA0ODgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODAKKyAgICAweDEuNTA3OGNlYmZmOWM3MjgwMDAwMDAwMDAwMDAwMjRkZjhwLTUsCisgICAgMHgxLjUwNDg2YjJmODcwMTRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODEKKyAgICAtMHgxLjUwNzhjZWJmZjljNzI4MDAwMDAwMDAwMDAwMDI0ZGY4cC01LAorICAgIC0weDEuNTA0ODZiMmY4NzAxNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDE4MgorICAgIC0weDEuMWM5MjliNmVkZTllZTgwMDAwNDBhM2QxY2E5MGE5ZjRwLTEsCisgICAgMHgxLjUxMzBkNTUyZjEwMzZwMQorICB9LAorICB7IC8vIEVudHJ5IDE4MworICAgIDB4MS4xYzkyOWI2ZWRlOWVlODAwMDA0MGEzZDFjYTkwYTlmNHAtMSwKKyAgICAtMHgxLjUxMzBkNTUyZjEwMzZwMQorICB9LAorICB7IC8vIEVudHJ5IDE4NAorICAgIDB4MS4yYWIzMTg5ZTJkNGFlNDFjMWFmZjNjYzMwY2ZlZGQzMHAxLAorICAgIDB4MS41MmYwMGUwcDc5MworICB9LAorICB7IC8vIEVudHJ5IDE4NQorICAgIC0weDEuMmFiMzE4OWUyZDRhZTQxYzFhZmYzY2MzMGNmZWRkMzBwMSwKKyAgICAtMHgxLjUyZjAwZTBwNzkzCisgIH0sCisgIHsgLy8gRW50cnkgMTg2CisgICAgLTB4MS43ZDJlNjNmYjk4ODkwN2ExMDkwOTFkMTMwZjlmMjBkMXAwLAorICAgIDB4MS41MzcxNjg0ZTVmYjM0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODcKKyAgICAweDEuN2QyZTYzZmI5ODg5MDdhMTA5MDkxZDEzMGY5ZjIwZDFwMCwKKyAgICAtMHgxLjUzNzE2ODRlNWZiMzRwMgorICB9LAorICB7IC8vIEVudHJ5IDE4OAorICAgIC0weDEuZjlmNGYwZGE0ZGU1NDQ5OTI4M2E4YWMyZjU1ZjcyNThwLTEsCisgICAgMHgxLjU0ZWYyMjA4OTU2cDIzOQorICB9LAorICB7IC8vIEVudHJ5IDE4OQorICAgIDB4MS5mOWY0ZjBkYTRkZTU0NDk5MjgzYThhYzJmNTVmNzI1OHAtMSwKKyAgICAtMHgxLjU0ZWYyMjA4OTU2cDIzOQorICB9LAorICB7IC8vIEVudHJ5IDE5MAorICAgIDB4MS4xNDgzMDczMTQyZTYwODAwOGY4ODQ5ZGFmNWY4YzU4ZHAyLAorICAgIDB4MS41N2U1OTBhZjA5MDE0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTEKKyAgICAtMHgxLjE0ODMwNzMxNDJlNjA4MDA4Zjg4NDlkYWY1ZjhjNThkcDIsCisgICAgLTB4MS41N2U1OTBhZjA5MDE0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTIKKyAgICAweDEuOTk3MmQ0MDIxYzk3MTU2MzkzNjA1NWQ4YzFlYWFlMGFwLTEsCisgICAgMHgxLjU5NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE5MworICAgIC0weDEuOTk3MmQ0MDIxYzk3MTU2MzkzNjA1NWQ4YzFlYWFlMGFwLTEsCisgICAgLTB4MS41OTZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTQKKyAgICAtMHgxLmU1MDFmZmQzYTY4YzM4MzM2ZDk3N2Y2MzQzMjZhMzQycC0yLAorICAgIDB4MS41OTgxMjkzNzgzZTFmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTUKKyAgICAweDEuZTUwMWZmZDNhNjhjMzgzMzZkOTc3ZjYzNDMyNmEzNDJwLTIsCisgICAgLTB4MS41OTgxMjkzNzgzZTFmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTYKKyAgICAweDEuMTYwNGNjM2RmYzQxODFjM2U5NDgxNTU4NDY3YTg1ZmVwLTEsCisgICAgMHgxLjViZWEwMTBwNDY4CisgIH0sCisgIHsgLy8gRW50cnkgMTk3CisgICAgLTB4MS4xNjA0Y2MzZGZjNDE4MWMzZTk0ODE1NTg0NjdhODVmZXAtMSwKKyAgICAtMHgxLjViZWEwMTBwNDY4CisgIH0sCisgIHsgLy8gRW50cnkgMTk4CisgICAgLTB4MS5mNzZjYTUwYmJiYWViMDEyYmVhZGUyYTMyOGU1ZmMwM3AtMSwKKyAgICAweDEuNjA2NjFjMTk2OTY2NnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTk5CisgICAgMHgxLmY3NmNhNTBiYmJhZWIwMTJiZWFkZTJhMzI4ZTVmYzAzcC0xLAorICAgIC0weDEuNjA2NjFjMTk2OTY2NnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjAwCisgICAgMHgxLmNkOGI3M2M5NDMwZmVmNzVkYzcxMGZmZGZlMDkxYjQycDAsCisgICAgMHgxLjYyYzVhODUwYTE0MmFwNTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDEKKyAgICAtMHgxLmNkOGI3M2M5NDMwZmVmNzVkYzcxMGZmZGZlMDkxYjQycDAsCisgICAgLTB4MS42MmM1YTg1MGExNDJhcDU5CisgIH0sCisgIHsgLy8gRW50cnkgMjAyCisgICAgMHgxLjNhY2NmZDQ1M2VlNjcyOTYwODgzNzhmNTgyZWFjYjAycDAsCisgICAgMHgxLjY0ZWY0MzhwMTQyCisgIH0sCisgIHsgLy8gRW50cnkgMjAzCisgICAgLTB4MS4zYWNjZmQ0NTNlZTY3Mjk2MDg4Mzc4ZjU4MmVhY2IwMnAwLAorICAgIC0weDEuNjRlZjQzOHAxNDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDQKKyAgICAtMHgxLmFjZDkzMDJkNzJkZTRiZDhkZGE4ZjU2NTBiNzdlNzMycC0xLAorICAgIDB4MS42NThwMgorICB9LAorICB7IC8vIEVudHJ5IDIwNQorICAgIDB4MS5hY2Q5MzAyZDcyZGU0YmQ4ZGRhOGY1NjUwYjc3ZTczMnAtMSwKKyAgICAtMHgxLjY1OHAyCisgIH0sCisgIHsgLy8gRW50cnkgMjA2CisgICAgMHgxLmYwMDRmODc1YzJlNzM4MTU5YzdkNzVhMzk4MGNhZmQ3cC0xLAorICAgIDB4MS42NjAzYzY1ZDM0OGQycDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDcKKyAgICAtMHgxLmYwMDRmODc1YzJlNzM4MTU5YzdkNzVhMzk4MGNhZmQ3cC0xLAorICAgIC0weDEuNjYwM2M2NWQzNDhkMnA1CisgIH0sCisgIHsgLy8gRW50cnkgMjA4CisgICAgMHgxLmY1MzQ5NmU2ZDdmNzE4MWE2MmZlYzRjOGE3MTA5MDBlcC0xLAorICAgIDB4MS42NjBlNmJmMmUwOTJhcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDkKKyAgICAtMHgxLmY1MzQ5NmU2ZDdmNzE4MWE2MmZlYzRjOGE3MTA5MDBlcC0xLAorICAgIC0weDEuNjYwZTZiZjJlMDkyYXA1CisgIH0sCisgIHsgLy8gRW50cnkgMjEwCisgICAgMHgxLmI2NGVlMjRmMDExOWM4MDBkNWQwYmIxMGEzOWFjYTRlcC0xLAorICAgIDB4MS42YThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTEKKyAgICAtMHgxLmI2NGVlMjRmMDExOWM4MDBkNWQwYmIxMGEzOWFjYTRlcC0xLAorICAgIC0weDEuNmE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjEyCisgICAgLTB4MS5kOWJhOWE3OTc1NjM1YTNhY2MzMjRlNmFlZGE0NTEzM3A2MCwKKyAgICAweDEuNmFjNWIyNjJjYTFmZnA4NDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTMKKyAgICAweDEuZDliYTlhNzk3NTYzNWEzYWNjMzI0ZTZhZWRhNDUxMzNwNjAsCisgICAgLTB4MS42YWM1YjI2MmNhMWZmcDg0OQorICB9LAorICB7IC8vIEVudHJ5IDIxNAorICAgIDB4MS5iNmY1NTdiOTk5ZTIyZTBkYjEwYTkyYjkwOGU4NzdmNnAtMSwKKyAgICAweDEuNmFlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjE1CisgICAgLTB4MS5iNmY1NTdiOTk5ZTIyZTBkYjEwYTkyYjkwOGU4NzdmNnAtMSwKKyAgICAtMHgxLjZhZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDIxNgorICAgIDB4MS5jMWUxZDVjNGMwZjA3N2ZjODcxZDRiZDBhMDNjNjQzMXAtMSwKKyAgICAweDEuNmNkYjM2Y2RiMzZjOXAyMzkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTcKKyAgICAtMHgxLmMxZTFkNWM0YzBmMDc3ZmM4NzFkNGJkMGEwM2M2NDMxcC0xLAorICAgIC0weDEuNmNkYjM2Y2RiMzZjOXAyMzkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTgKKyAgICAweDEuOTViY2U0ZjU3ODY5NzgwNzhjMzEwMjEwZGNlZDZmM2ZwLTEsCisgICAgMHgxLjZmMWFmMTYxMjI3MGFwNgorICB9LAorICB7IC8vIEVudHJ5IDIxOQorICAgIC0weDEuOTViY2U0ZjU3ODY5NzgwNzhjMzEwMjEwZGNlZDZmM2ZwLTEsCisgICAgLTB4MS42ZjFhZjE2MTIyNzBhcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjAKKyAgICAweDEuNzExZThmNWZmZmJhMWY1OTk1OTVmYmFhYzViNzBlMGJwLTQsCisgICAgMHgxLjcwMnAtNAorICB9LAorICB7IC8vIEVudHJ5IDIyMQorICAgIC0weDEuNzExZThmNWZmZmJhMWY1OTk1OTVmYmFhYzViNzBlMGJwLTQsCisgICAgLTB4MS43MDJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjIKKyAgICAweDEuZmI1ODk4ZjI5YmIyNTdmZGE2ZjJiZWRmYzQ5MWFiYWVwMiwKKyAgICAweDEuNzIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjMKKyAgICAtMHgxLmZiNTg5OGYyOWJiMjU3ZmRhNmYyYmVkZmM0OTFhYmFlcDIsCisgICAgLTB4MS43MjBwMAorICB9LAorICB7IC8vIEVudHJ5IDIyNAorICAgIC0weDEuZmY5Yjc3MTI4NGQyMzI5MGNkZDgzNzE3Y2M5MDU3NzNwMSwKKyAgICAweDEuNzM0OGMzNDdkZGMyMHAyMzkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjUKKyAgICAweDEuZmY5Yjc3MTI4NGQyMzI5MGNkZDgzNzE3Y2M5MDU3NzNwMSwKKyAgICAtMHgxLjczNDhjMzQ3ZGRjMjBwMjM5CisgIH0sCisgIHsgLy8gRW50cnkgMjI2CisgICAgMHgxLmY3MmQ0N2EwMDgwZTJkM2QwNDA4NjNkNTZkYmI1NjdlcC0yLAorICAgIDB4MS43MzljZTczOWNlNzM4cDEwMAorICB9LAorICB7IC8vIEVudHJ5IDIyNworICAgIC0weDEuZjcyZDQ3YTAwODBlMmQzZDA0MDg2M2Q1NmRiYjU2N2VwLTIsCisgICAgLTB4MS43MzljZTczOWNlNzM4cDEwMAorICB9LAorICB7IC8vIEVudHJ5IDIyOAorICAgIDB4MS43NjQ0MWU3ZjhlYTVmODAwMDAwMWQxYzVjODRmMTA0ZXAtNCwKKyAgICAweDEuNzUzYWNjM2QzZmYzNXAtNAorICB9LAorICB7IC8vIEVudHJ5IDIyOQorICAgIC0weDEuNzY0NDFlN2Y4ZWE1ZjgwMDAwMDFkMWM1Yzg0ZjEwNGVwLTQsCisgICAgLTB4MS43NTNhY2MzZDNmZjM1cC00CisgIH0sCisgIHsgLy8gRW50cnkgMjMwCisgICAgMHgxLmNlM2Y2NDJlMTVhZjNjOTIxZGQ3MTI5ZGI1ZTM5MzQycC0xLAorICAgIDB4MS43N2ZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjMxCisgICAgLTB4MS5jZTNmNjQyZTE1YWYzYzkyMWRkNzEyOWRiNWUzOTM0MnAtMSwKKyAgICAtMHgxLjc3ZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzIKKyAgICAweDEuZjQyNTAwMmE1NDhlYjQwNTQ1MDk3MGEzNTNkMzA3ZjdwNDIsCisgICAgMHgxLjc4ZmRiOWVmZmVhMjZwNAorICB9LAorICB7IC8vIEVudHJ5IDIzMworICAgIC0weDEuZjQyNTAwMmE1NDhlYjQwNTQ1MDk3MGEzNTNkMzA3ZjdwNDIsCisgICAgLTB4MS43OGZkYjllZmZlYTI2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzQKKyAgICAtMHgxLmRiYzgwZGU3ZGQwNDJhOTM3MWUxYjQ1NzE4ZTUxYmFicC0xLAorICAgIDB4MS43YTVmNzQ2MDdlODUxcDE5CisgIH0sCisgIHsgLy8gRW50cnkgMjM1CisgICAgMHgxLmRiYzgwZGU3ZGQwNDJhOTM3MWUxYjQ1NzE4ZTUxYmFicC0xLAorICAgIC0weDEuN2E1Zjc0NjA3ZTg1MXAxOQorICB9LAorICB7IC8vIEVudHJ5IDIzNgorICAgIDB4MS43YjNiYjNkMGIzY2E0MmYxMzIwNzg0Mjg5OWUwYmE3MXA0MiwKKyAgICAweDEuN2Y3ZWY3N2U4M2YxYXAxOQorICB9LAorICB7IC8vIEVudHJ5IDIzNworICAgIC0weDEuN2IzYmIzZDBiM2NhNDJmMTMyMDc4NDI4OTllMGJhNzFwNDIsCisgICAgLTB4MS43ZjdlZjc3ZTgzZjFhcDE5CisgIH0sCisgIHsgLy8gRW50cnkgMjM4CisgICAgMHgxLmU3ZjA1YjcxY2QyZDBmYjRkZjZhNDMzNzVjZDhmNjcwcDMzLAorICAgIDB4MS43ZjdmMTBhMDdmNDVlcDIwCisgIH0sCisgIHsgLy8gRW50cnkgMjM5CisgICAgLTB4MS5lN2YwNWI3MWNkMmQwZmI0ZGY2YTQzMzc1Y2Q4ZjY3MHAzMywKKyAgICAtMHgxLjdmN2YxMGEwN2Y0NWVwMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDAKKyAgICAweDEuODAwMDAwMDAwMDAwMzgwMDAwMDAwMDAwMDczMzMzMzNwLTI1LAorICAgIDB4MS43ZmZmZmZmZmZmZmZmcC0yNQorICB9LAorICB7IC8vIEVudHJ5IDI0MQorICAgIC0weDEuODAwMDAwMDAwMDAwMzgwMDAwMDAwMDAwMDczMzMzMzNwLTI1LAorICAgIC0weDEuN2ZmZmZmZmZmZmZmZnAtMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDIKKyAgICAweDEuODAwMDAwMDAwMDAwNjgwMDAwMDAwMDAwMjIzMzMzMzNwLTI1LAorICAgIDB4MS44MDAwMDAwMDAwMDAycC0yNQorICB9LAorICB7IC8vIEVudHJ5IDI0MworICAgIC0weDEuODAwMDAwMDAwMDAwNjgwMDAwMDAwMDAwMjIzMzMzMzNwLTI1LAorICAgIC0weDEuODAwMDAwMDAwMDAwMnAtMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDQKKyAgICAweDEuMjQyNDVhZjRjZDk5NGU5YjNiYmE5OTJkMTAxNjM2NWJwLTUyLAorICAgIDB4MS44MWFlMGRmZmEzYjMzcDk1OQorICB9LAorICB7IC8vIEVudHJ5IDI0NQorICAgIC0weDEuMjQyNDVhZjRjZDk5NGU5YjNiYmE5OTJkMTAxNjM2NWJwLTUyLAorICAgIC0weDEuODFhZTBkZmZhM2IzM3A5NTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDYKKyAgICAweDEuZDcyMjYxZDk4ZTI2YjdmZmEzMDBkODlmZDQ2ZmI3NzVwLTEsCisgICAgMHgxLjg0NmJkN2E0ZGNlNTVwNjk4CisgIH0sCisgIHsgLy8gRW50cnkgMjQ3CisgICAgLTB4MS5kNzIyNjFkOThlMjZiN2ZmYTMwMGQ4OWZkNDZmYjc3NXAtMSwKKyAgICAtMHgxLjg0NmJkN2E0ZGNlNTVwNjk4CisgIH0sCisgIHsgLy8gRW50cnkgMjQ4CisgICAgMHgxLjQyZDhhMWJhNDQxYWQ0MDI4YWM3ZjFhNmE1ZWUwYzU0cDEsCisgICAgMHgxLjg3MjA1ODhwMzkyCisgIH0sCisgIHsgLy8gRW50cnkgMjQ5CisgICAgLTB4MS40MmQ4YTFiYTQ0MWFkNDAyOGFjN2YxYTZhNWVlMGM1NHAxLAorICAgIC0weDEuODcyMDU4OHAzOTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTAKKyAgICAweDEuZWE3YjQ0NGNkNzk4ZDdmYWVlZmYwOTNmMWQ5OTcxYWRwLTEsCisgICAgMHgxLjg3MjJhNjdlYTE0YWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTEKKyAgICAtMHgxLmVhN2I0NDRjZDc5OGQ3ZmFlZWZmMDkzZjFkOTk3MWFkcC0xLAorICAgIC0weDEuODcyMmE2N2VhMTRhY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDI1MgorICAgIC0weDEuYzdkYzdmMDhkYmJhMDg5ZjJkN2U4OTAwMjFiZWRjYjdwLTEsCisgICAgMHgxLjg5OTM2Yzg4MjhkMzhwMjk5CisgIH0sCisgIHsgLy8gRW50cnkgMjUzCisgICAgMHgxLmM3ZGM3ZjA4ZGJiYTA4OWYyZDdlODkwMDIxYmVkY2I3cC0xLAorICAgIC0weDEuODk5MzZjODgyOGQzOHAyOTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTQKKyAgICAweDEuNTY5NjUzZTMxOWJiYTgwMDAwMGM4MzYzMmU0M2FiZGVwMSwKKyAgICAweDEuOGE2OTEwNmZiOTc5OHA2CisgIH0sCisgIHsgLy8gRW50cnkgMjU1CisgICAgLTB4MS41Njk2NTNlMzE5YmJhODAwMDAwYzgzNjMyZTQzYWJkZXAxLAorICAgIC0weDEuOGE2OTEwNmZiOTc5OHA2CisgIH0sCisgIHsgLy8gRW50cnkgMjU2CisgICAgMHgxLmYyZGIyMTQ2OWYzZDU4MTlmYTliYThkY2NiZmY5MTRhcC0xLAorICAgIDB4MS44Yjc3N2UxZDIzMDhjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjU3CisgICAgLTB4MS5mMmRiMjE0NjlmM2Q1ODE5ZmE5YmE4ZGNjYmZmOTE0YXAtMSwKKyAgICAtMHgxLjhiNzc3ZTFkMjMwOGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTgKKyAgICAweDEuZjM2ODhiYzI1OTRlMjAxMDI1NzNjZmY0ODE5MGFjMjhwLTEsCisgICAgMHgxLjhiY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDI1OQorICAgIC0weDEuZjM2ODhiYzI1OTRlMjAxMDI1NzNjZmY0ODE5MGFjMjhwLTEsCisgICAgLTB4MS44YmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjAKKyAgICAweDEuOGQzYTI1NDQ1NjZkZjdiNTU5YjRhYzQ4ZTEyZWFjNzFwLTQsCisgICAgMHgxLjhiZmQyMjc0ZDg1MWFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjEKKyAgICAtMHgxLjhkM2EyNTQ0NTY2ZGY3YjU1OWI0YWM0OGUxMmVhYzcxcC00LAorICAgIC0weDEuOGJmZDIyNzRkODUxYXAtNAorICB9LAorICB7IC8vIEVudHJ5IDI2MgorICAgIDB4MS5mNDU3NWNjNGU0NzdmMDE5ZGFiNWQwMTAzYWFmOTFjZnAtMSwKKyAgICAweDEuOGMzYTQ1MDA3MWRkOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI2MworICAgIC0weDEuZjQ1NzVjYzRlNDc3ZjAxOWRhYjVkMDEwM2FhZjkxY2ZwLTEsCisgICAgLTB4MS44YzNhNDUwMDcxZGQ5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjY0CisgICAgLTB4MS4xZTA5ZjY2YzQyNTBiOTRlOTAzMGNhZGQwMDg1MTE1OHAxMSwKKyAgICAweDEuOGNjMGRkMmIwZjRiOHAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjUKKyAgICAweDEuMWUwOWY2NmM0MjUwYjk0ZTkwMzBjYWRkMDA4NTExNThwMTEsCisgICAgLTB4MS44Y2MwZGQyYjBmNGI4cDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI2NgorICAgIDB4MS5mNzE0OTZjYjkyMWU1YTRkMmYzOTA0NmE2MjhiNjUwOXAtMSwKKyAgICAweDEuOGRhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjY3CisgICAgLTB4MS5mNzE0OTZjYjkyMWU1YTRkMmYzOTA0NmE2MjhiNjUwOXAtMSwKKyAgICAtMHgxLjhkYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI2OAorICAgIDB4MS5mNzFiNGE2NTkxMTY5ODE5NDc2ZTZiNzU5YzdhYWU1MnAtMSwKKyAgICAweDEuOGRhMzY4ZGEzNjhkOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI2OQorICAgIC0weDEuZjcxYjRhNjU5MTE2OTgxOTQ3NmU2Yjc1OWM3YWFlNTJwLTEsCisgICAgLTB4MS44ZGEzNjhkYTM2OGQ4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjcwCisgICAgMHgxLmZmOWI2OGNjYWRiMmZmNjJjMjY4NjQyODhlZDZhNGRmcC0xLAorICAgIDB4MS45MWVkNjRiOTc3YTlhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjcxCisgICAgLTB4MS5mZjliNjhjY2FkYjJmZjYyYzI2ODY0Mjg4ZWQ2YTRkZnAtMSwKKyAgICAtMHgxLjkxZWQ2NGI5NzdhOWFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzIKKyAgICAweDEuMDAwMDAwMDAyOTA0ODQ3NzlmYTQ5MWM3MjhhZWY5NDVwMTgsCisgICAgMHgxLjkyMWY3NTQ0NDJkMTlwMAorICB9LAorICB7IC8vIEVudHJ5IDI3MworICAgIC0weDEuMDAwMDAwMDAyOTA0ODQ3NzlmYTQ5MWM3MjhhZWY5NDVwMTgsCisgICAgLTB4MS45MjFmNzU0NDQyZDE5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzQKKyAgICAweDEuZWVmMDY3YWZkMzI4ZjMxMWNlMmM3YTFmNDIwYTU5ODNwNDgsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTBwMAorICB9LAorICB7IC8vIEVudHJ5IDI3NQorICAgIC0weDEuZWVmMDY3YWZkMzI4ZjMxMWNlMmM3YTFmNDIwYTU5ODNwNDgsCisgICAgLTB4MS45MjFmYjU0NDQyZDEwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzYKKyAgICAweDEuMDAwMDAwMDAwM2FmMmYyMjNlYjFlNzA5Y2JhMDBlYzNwLTE3LAorICAgIDB4MS45MjFmZjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzcKKyAgICAtMHgxLjAwMDAwMDAwMDNhZjJmMjIzZWIxZTcwOWNiYTAwZWMzcC0xNywKKyAgICAtMHgxLjkyMWZmNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDI3OAorICAgIC0weDEuYjY3NzJjYjY2N2RjMTg3YjdkMDE5ZDFkNzIzMmM5ZTdwMTcsCisgICAgMHgxLjkyMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjc5CisgICAgMHgxLmI2NzcyY2I2NjdkYzE4N2I3ZDAxOWQxZDcyMzJjOWU3cDE3LAorICAgIC0weDEuOTIycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODAKKyAgICAtMHgxLmZmZmZmZmZjZWVlZmU3OTFiZTIwNzQ3NzlmZDFkZDllcC0xLAorICAgIDB4MS45MjIwNzFjMzFmYzk5cDIwCisgIH0sCisgIHsgLy8gRW50cnkgMjgxCisgICAgMHgxLmZmZmZmZmZjZWVlZmU3OTFiZTIwNzQ3NzlmZDFkZDllcC0xLAorICAgIC0weDEuOTIyMDcxYzMxZmM5OXAyMAorICB9LAorICB7IC8vIEVudHJ5IDI4MgorICAgIDB4MS45ZDdjMTM1NGJhNmY3ODFjOGIwNDQwODA5NGY0NTI4NHAtMywKKyAgICAweDEuOTdmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDI4MworICAgIC0weDEuOWQ3YzEzNTRiYTZmNzgxYzhiMDQ0MDgwOTRmNDUyODRwLTMsCisgICAgLTB4MS45N2ZmZmZmZmZmZmZmcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMjg0CisgICAgMHgxLjlhZjg4NzdiYjQ1ZTQ3ZmZmZmU5NjEwODRiMmMwYmVhcC00LAorICAgIDB4MS45OTk5OTlhMTBhMTNjcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjg1CisgICAgLTB4MS45YWY4ODc3YmI0NWU0N2ZmZmZlOTYxMDg0YjJjMGJlYXAtNCwKKyAgICAtMHgxLjk5OTk5OWExMGExM2NwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODYKKyAgICAtMHgxLmI2Y2UxMjg1ODdjZDA3ZmZmZjc1N2FiZGEyOTRjMTUxcDQsCisgICAgMHgxLjliNzQ0NDZlZDA1ZGNwMAorICB9LAorICB7IC8vIEVudHJ5IDI4NworICAgIDB4MS5iNmNlMTI4NTg3Y2QwN2ZmZmY3NTdhYmRhMjk0YzE1MXA0LAorICAgIC0weDEuOWI3NDQ0NmVkMDVkY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMjg4CisgICAgMHgxLmZmNjVhZWY1NGM4ZmM4MDQyODQxMDcxYjQ1YjZkN2Q5cC0xLAorICAgIDB4MS45ZWFlNDk0ZDJiMjc1cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODkKKyAgICAtMHgxLmZmNjVhZWY1NGM4ZmM4MDQyODQxMDcxYjQ1YjZkN2Q5cC0xLAorICAgIC0weDEuOWVhZTQ5NGQyYjI3NXA0CisgIH0sCisgIHsgLy8gRW50cnkgMjkwCisgICAgMHgxLjYxNzc2YWE0MDdhNDM3ZjYxN2ZjYWRiMTVjN2Y2MWMycC0zLAorICAgIDB4MS5hODBwMQorICB9LAorICB7IC8vIEVudHJ5IDI5MQorICAgIC0weDEuNjE3NzZhYTQwN2E0MzdmNjE3ZmNhZGIxNWM3ZjYxYzJwLTMsCisgICAgLTB4MS5hODBwMQorICB9LAorICB7IC8vIEVudHJ5IDI5MgorICAgIDB4MS5iNjAwMWRlMTNhZDk1ODAwNzNhY2JhNGFhNDIzZTJkOXAtMywKKyAgICAweDEuYWY4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMjkzCisgICAgLTB4MS5iNjAwMWRlMTNhZDk1ODAwNzNhY2JhNGFhNDIzZTJkOXAtMywKKyAgICAtMHgxLmFmOHAtMworICB9LAorICB7IC8vIEVudHJ5IDI5NAorICAgIDB4MS5iNWEwNTAzYWUzNTRiN2ExNmY3YzUwZjhiM2JlZjJjYXAtNCwKKyAgICAweDEuYjNmOGVhN2IxZjkxYnAtNAorICB9LAorICB7IC8vIEVudHJ5IDI5NQorICAgIC0weDEuYjVhMDUwM2FlMzU0YjdhMTZmN2M1MGY4YjNiZWYyY2FwLTQsCisgICAgLTB4MS5iM2Y4ZWE3YjFmOTFicC00CisgIH0sCisgIHsgLy8gRW50cnkgMjk2CisgICAgMHgxLmI1YTA1MDNhZTRjN2I3OTI1MzczMjdmNDI0NWFjNmZicC00LAorICAgIDB4MS5iM2Y4ZWE3YjIxMDA4cC00CisgIH0sCisgIHsgLy8gRW50cnkgMjk3CisgICAgLTB4MS5iNWEwNTAzYWU0YzdiNzkyNTM3MzI3ZjQyNDVhYzZmYnAtNCwKKyAgICAtMHgxLmIzZjhlYTdiMjEwMDhwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTgKKyAgICAweDEuMDU3NTg0YzQyOWIzYTZlYTBhNjVjYWZmOTg2MzQ0OTBwNTksCisgICAgMHgxLmI5NTFmMTU3MmViYTVwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTkKKyAgICAtMHgxLjA1NzU4NGM0MjliM2E2ZWEwYTY1Y2FmZjk4NjM0NDkwcDU5LAorICAgIC0weDEuYjk1MWYxNTcyZWJhNXAyMworICB9LAorICB7IC8vIEVudHJ5IDMwMAorICAgIC0weDEuOWEyODJmYTFmZjdkOTgwMzliZTNiZjViMzljYzZkODlwMiwKKyAgICAweDEuYjljcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDEKKyAgICAweDEuOWEyODJmYTFmZjdkOTgwMzliZTNiZjViMzljYzZkODlwMiwKKyAgICAtMHgxLmI5Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgMzAyCisgICAgLTB4MS4wMjdkMTg0YWZiMTk4NGNhMWQyMWIxYWM5MzExMTg4N3AtNTIsCisgICAgMHgxLmJhYjYyZWQ2NTUwMTlwOTcwCisgIH0sCisgIHsgLy8gRW50cnkgMzAzCisgICAgMHgxLjAyN2QxODRhZmIxOTg0Y2ExZDIxYjFhYzkzMTExODg3cC01MiwKKyAgICAtMHgxLmJhYjYyZWQ2NTUwMTlwOTcwCisgIH0sCisgIHsgLy8gRW50cnkgMzA0CisgICAgMHgxLmNhNmVmZGY4NDVkNmM3ZmZmZWJhZWExYWZiZjdlOTYxcDIsCisgICAgMHgxLmJlYTFiMzVmM2NiNmRwODQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDUKKyAgICAtMHgxLmNhNmVmZGY4NDVkNmM3ZmZmZWJhZWExYWZiZjdlOTYxcDIsCisgICAgLTB4MS5iZWExYjM1ZjNjYjZkcDg0CisgIH0sCisgIHsgLy8gRW50cnkgMzA2CisgICAgMHgxLmZkODdiMzQ3NDdiNzQ2YjhiNjU3Y2FjNzk3YzA4NzBkcDQyLAorICAgIDB4MS5jNDYzYWJlY2NiMjdicDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDcKKyAgICAtMHgxLmZkODdiMzQ3NDdiNzQ2YjhiNjU3Y2FjNzk3YzA4NzBkcDQyLAorICAgIC0weDEuYzQ2M2FiZWNjYjI3YnAzCisgIH0sCisgIHsgLy8gRW50cnkgMzA4CisgICAgMHgxLmZmZmZmZmZmZmZmZmIwOTQ1NDFhMjQ2MWU3MzRkYWVlcC0xLAorICAgIDB4MS5jNDYzYWJlY2NiMmJicDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDkKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmIwOTQ1NDFhMjQ2MWU3MzRkYWVlcC0xLAorICAgIC0weDEuYzQ2M2FiZWNjYjJiYnAyCisgIH0sCisgIHsgLy8gRW50cnkgMzEwCisgICAgMHgxLmZiMDU3MDI5YWNmZDE3ZmZmZmZhNWFjODIwNGYwODAzcC0xLAorICAgIDB4MS5jNmNiZTI2YjdiNDVmcDg2CisgIH0sCisgIHsgLy8gRW50cnkgMzExCisgICAgLTB4MS5mYjA1NzAyOWFjZmQxN2ZmZmZmYTVhYzgyMDRmMDgwM3AtMSwKKyAgICAtMHgxLmM2Y2JlMjZiN2I0NWZwODYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTIKKyAgICAweDEuYzhkNWEwOGJlNDBjMjBwLTExNywKKyAgICAweDEuYzhkNWEwOGJlNDBjMnAtMTE3CisgIH0sCisgIHsgLy8gRW50cnkgMzEzCisgICAgLTB4MS5jOGQ1YTA4YmU0MGMyMHAtMTE3LAorICAgIC0weDEuYzhkNWEwOGJlNDBjMnAtMTE3CisgIH0sCisgIHsgLy8gRW50cnkgMzE0CisgICAgMHgxLmU1ZGZmZDdmMDZjYjM3NTQ5MzNjZWE1NzhkZWFhZDM2cC0yLAorICAgIDB4MS5jYWQ0ZTk4MjdhMmJlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTUKKyAgICAtMHgxLmU1ZGZmZDdmMDZjYjM3NTQ5MzNjZWE1NzhkZWFhZDM2cC0yLAorICAgIC0weDEuY2FkNGU5ODI3YTJiZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMzE2CisgICAgMHgxLmU2YmUzNzhiMWI0ZWI3NjU4ZTg1YWQwYWYzMzgzNmE5cC0yLAorICAgIDB4MS5jYWViOTQwZTRiOTk3cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTcKKyAgICAtMHgxLmU2YmUzNzhiMWI0ZWI3NjU4ZTg1YWQwYWYzMzgzNmE5cC0yLAorICAgIC0weDEuY2FlYjk0MGU0Yjk5N3AxCisgIH0sCisgIHsgLy8gRW50cnkgMzE4CisgICAgMHgxLmU3MmJkMDI1YTFmZDU3NjVmODUzNDY5YTg1YWU3YjdkcC0yLAorICAgIDB4MS5jYWY2YzA0ZWNkMDM0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTkKKyAgICAtMHgxLmU3MmJkMDI1YTFmZDU3NjVmODUzNDY5YTg1YWU3YjdkcC0yLAorICAgIC0weDEuY2FmNmMwNGVjZDAzNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzIwCisgICAgMHgxLmU4NDRiM2Q3Y2JlNDM3NWMyOGUzMjJkYTZiYTVkN2Q4cC0yLAorICAgIDB4MS5jYjEzNWVjMWM5NTZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjEKKyAgICAtMHgxLmU4NDRiM2Q3Y2JlNDM3NWMyOGUzMjJkYTZiYTVkN2Q4cC0yLAorICAgIC0weDEuY2IxMzVlYzFjOTU2ZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMzIyCisgICAgMHgxLmRkMzhhMWYxZDI4OWI2MTczMTE1NzIxYmM1YzFmYzcycC01NCwKKyAgICAweDEuY2I0NGU4NmJjMTkyYnA2NDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjMKKyAgICAtMHgxLmRkMzhhMWYxZDI4OWI2MTczMTE1NzIxYmM1YzFmYzcycC01NCwKKyAgICAtMHgxLmNiNDRlODZiYzE5MmJwNjQ4CisgIH0sCisgIHsgLy8gRW50cnkgMzI0CisgICAgMHgxLmRkMzhhMWYxZDI4OWI2MTczMTE1NzIxYmM2MjlhMjNkcC01MywKKyAgICAweDEuY2I0NGU4NmJjMTkyYnA2NDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjUKKyAgICAtMHgxLmRkMzhhMWYxZDI4OWI2MTczMTE1NzIxYmM2MjlhMjNkcC01MywKKyAgICAtMHgxLmNiNDRlODZiYzE5MmJwNjQ5CisgIH0sCisgIHsgLy8gRW50cnkgMzI2CisgICAgLTB4MS5mZmY2ZTc1NTMyMGVkNzhkYjRkNmVmZjRiZjZhNmIxMHAxLAorICAgIDB4MS5jYjYxYWZlZGIyYjNjcDExOQorICB9LAorICB7IC8vIEVudHJ5IDMyNworICAgIDB4MS5mZmY2ZTc1NTMyMGVkNzhkYjRkNmVmZjRiZjZhNmIxMHAxLAorICAgIC0weDEuY2I2MWFmZWRiMmIzY3AxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjgKKyAgICAweDEuY2NkZjRhYTZjMjI4ZjgwNDFiZTkxYTE0MmUwZTI3MWJwLTcsCisgICAgMHgxLmNjZDc4MzRiYTM4MDRwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjkKKyAgICAtMHgxLmNjZGY0YWE2YzIyOGY4MDQxYmU5MWExNDJlMGUyNzFicC03LAorICAgIC0weDEuY2NkNzgzNGJhMzgwNHAtNworICB9LAorICB7IC8vIEVudHJ5IDMzMAorICAgIDB4MS5jZWU1MDAxNmZjMmQ4ODM3Mjg2YmY2ZmQ0MzFhN2IzYnAtNCwKKyAgICAweDEuY2NmMDU5OWRhNDc4ZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDMzMQorICAgIC0weDEuY2VlNTAwMTZmYzJkODgzNzI4NmJmNmZkNDMxYTdiM2JwLTQsCisgICAgLTB4MS5jY2YwNTk5ZGE0NzhlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzMyCisgICAgMHgxLjQ0Y2YzZWU4YTc1YTg3Y2M2NjU3ZTYyZjk0YTkzZTZmcDAsCisgICAgMHgxLmNlOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMzMworICAgIC0weDEuNDRjZjNlZThhNzVhODdjYzY2NTdlNjJmOTRhOTNlNmZwMCwKKyAgICAtMHgxLmNlOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMzNAorICAgIDB4MS40NWFhMTJmZjk4MTUyODAwMDAxZmJkODc5OWE5NmEyY3AwLAorICAgIDB4MS5jZjI3NmM5Y2I5YWYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzM1CisgICAgLTB4MS40NWFhMTJmZjk4MTUyODAwMDAxZmJkODc5OWE5NmEyY3AwLAorICAgIC0weDEuY2YyNzZjOWNiOWFmMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMzNgorICAgIDB4MS5mOWJjNzQ0ZjYxZTBlZDg1MzgyOWUyZjc2NWI4YTEyY3AtNCwKKyAgICAweDEuZDJlOTc5MTQ4YTQ1OHA2MQorICB9LAorICB7IC8vIEVudHJ5IDMzNworICAgIC0weDEuZjliYzc0NGY2MWUwZWQ4NTM4MjllMmY3NjViOGExMmNwLTQsCisgICAgLTB4MS5kMmU5NzkxNDhhNDU4cDYxCisgIH0sCisgIHsgLy8gRW50cnkgMzM4CisgICAgMHgxLjZlNzBmOWVkYmQxYTA4MmFlNmY5MGM2MmVmNGYzMWRkcC0yLAorICAgIDB4MS5kNmI1YWQ2YjVhYjY4cDEwMAorICB9LAorICB7IC8vIEVudHJ5IDMzOQorICAgIC0weDEuNmU3MGY5ZWRiZDFhMDgyYWU2ZjkwYzYyZWY0ZjMxZGRwLTIsCisgICAgLTB4MS5kNmI1YWQ2YjVhYjY4cDEwMAorICB9LAorICB7IC8vIEVudHJ5IDM0MAorICAgIDB4MS4xM2U5YzZhMzQ4ZTRhN2JlZGU4MjcyNDUwNTI2OWY2OHAyLAorICAgIDB4MS5kOTZlMDU4cDQ4OAorICB9LAorICB7IC8vIEVudHJ5IDM0MQorICAgIC0weDEuMTNlOWM2YTM0OGU0YTdiZWRlODI3MjQ1MDUyNjlmNjhwMiwKKyAgICAtMHgxLmQ5NmUwNThwNDg4CisgIH0sCisgIHsgLy8gRW50cnkgMzQyCisgICAgLTB4MS5kMzU1NDYzYzIzMDM1ODJmYTMxYTMyMzhkY2JlNTYwZXAtNSwKKyAgICAweDEuZGQxMGYyNTE3MWJjOXA1CisgIH0sCisgIHsgLy8gRW50cnkgMzQzCisgICAgMHgxLmQzNTU0NjNjMjMwMzU4MmZhMzFhMzIzOGRjYmU1NjBlcC01LAorICAgIC0weDEuZGQxMGYyNTE3MWJjOXA1CisgIH0sCisgIHsgLy8gRW50cnkgMzQ0CisgICAgMHgxLmRkZjIxZWJmNmZjOTI3ZmZmZmZiYjNlY2MwY2ZmNjZlcC02LAorICAgIDB4MS5kZGNmNmU1NjY5NmE0cC02CisgIH0sCisgIHsgLy8gRW50cnkgMzQ1CisgICAgLTB4MS5kZGYyMWViZjZmYzkyN2ZmZmZmYmIzZWNjMGNmZjY2ZXAtNiwKKyAgICAtMHgxLmRkY2Y2ZTU2Njk2YTRwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDYKKyAgICAweDEuNWNiMGJmYzE1NTgwMDdlMGM1ZDA5NWY3MjllMzQyN2JwMCwKKyAgICAweDEuZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM0NworICAgIC0weDEuNWNiMGJmYzE1NTgwMDdlMGM1ZDA5NWY3MjllMzQyN2JwMCwKKyAgICAtMHgxLmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDgKKyAgICAtMHgxLjk3YjVlOGFlOWEyMWM3ZjQ4MjE5MjJiYzViMzc4MmNjcDEsCisgICAgMHgxLmVwMAorICB9LAorICB7IC8vIEVudHJ5IDM0OQorICAgIDB4MS45N2I1ZThhZTlhMjFjN2Y0ODIxOTIyYmM1YjM3ODJjY3AxLAorICAgIC0weDEuZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzUwCisgICAgLTB4MS5mOGJmNjhkMGMyM2YzNzQxZWZiOGJkOTk4NTNiYWU4YXAwLAorICAgIDB4MS5lNzc5ZGU3NzlkZTcxcDExOAorICB9LAorICB7IC8vIEVudHJ5IDM1MQorICAgIDB4MS5mOGJmNjhkMGMyM2YzNzQxZWZiOGJkOTk4NTNiYWU4YXAwLAorICAgIC0weDEuZTc3OWRlNzc5ZGU3MXAxMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTIKKyAgICAtMHgxLmZmZmZmZmZmZmQ3MWNmOTM0ZWYzZTVkZjQwMDg2NjVmcC0xLAorICAgIDB4MS5lYjA1NjdiZWQxZjcxcDEyCisgIH0sCisgIHsgLy8gRW50cnkgMzUzCisgICAgMHgxLmZmZmZmZmZmZmQ3MWNmOTM0ZWYzZTVkZjQwMDg2NjVmcC0xLAorICAgIC0weDEuZWIwNTY3YmVkMWY3MXAxMgorICB9LAorICB7IC8vIEVudHJ5IDM1NAorICAgIDB4MS5lZTc4OGQxY2M3OTU0ODQxODc4NDczYWE1ZDI2MTVhNXAtNCwKKyAgICAweDEuZWMxNmYzMGEzNGZiY3AtNAorICB9LAorICB7IC8vIEVudHJ5IDM1NQorICAgIC0weDEuZWU3ODhkMWNjNzk1NDg0MTg3ODQ3M2FhNWQyNjE1YTVwLTQsCisgICAgLTB4MS5lYzE2ZjMwYTM0ZmJjcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzU2CisgICAgMHgxLmVmZGFkOTM4YjRiMGU4MzQwMTRiZjU2YTcwODQ2NzVkcC00LAorICAgIDB4MS5lZDc0MjRiYTJhYTRlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzU3CisgICAgLTB4MS5lZmRhZDkzOGI0YjBlODM0MDE0YmY1NmE3MDg0Njc1ZHAtNCwKKyAgICAtMHgxLmVkNzQyNGJhMmFhNGVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTgKKyAgICAweDEuZGEzNDc2MDc5NDhmNDdmZmVmMjE2OTcxNjFmZDNjZGRwLTEsCisgICAgMHgxLmVlOWVkYTU4OTAzOTBwNDk5CisgIH0sCisgIHsgLy8gRW50cnkgMzU5CisgICAgLTB4MS5kYTM0NzYwNzk0OGY0N2ZmZWYyMTY5NzE2MWZkM2NkZHAtMSwKKyAgICAtMHgxLmVlOWVkYTU4OTAzOTBwNDk5CisgIH0sCisgIHsgLy8gRW50cnkgMzYwCisgICAgMHgxLmY2ODJkMjdhOGJlODdmNzgzZDQ5NDg1N2I2ZjMwZTA1cDAsCisgICAgMHgxLmY0ZmYwZDdiM2FjMTBwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMzYxCisgICAgLTB4MS5mNjgyZDI3YThiZTg3Zjc4M2Q0OTQ4NTdiNmYzMGUwNXAwLAorICAgIC0weDEuZjRmZjBkN2IzYWMxMHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjIKKyAgICAtMHgxLmZmZDM2YTc1M2NlZDkwMjdjOTM4NDVhZGRlMDQ2MjQ2cC0xLAorICAgIDB4MS5mNWE4MTRhZmQ2OWY1cDExOQorICB9LAorICB7IC8vIEVudHJ5IDM2MworICAgIDB4MS5mZmQzNmE3NTNjZWQ5MDI3YzkzODQ1YWRkZTA0NjI0NnAtMSwKKyAgICAtMHgxLmY1YTgxNGFmZDY5ZjVwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgMzY0CisgICAgLTB4MS4wZmE3NzAxZDA1OWI1MWRlMDVkZjU4YWRlMjZiZWM1Y3AtOSwKKyAgICAweDEuZjhmYzgyNGQyNjkzYnA2MQorICB9LAorICB7IC8vIEVudHJ5IDM2NQorICAgIDB4MS4wZmE3NzAxZDA1OWI1MWRlMDVkZjU4YWRlMjZiZWM1Y3AtOSwKKyAgICAtMHgxLmY4ZmM4MjRkMjY5M2JwNjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjYKKyAgICAtMHgxLmFmZTM4NzViZDNhZmU4MDFmMTQ5ZDBhOWFkMzZmNDUzcC00LAorICAgIDB4MS5mOWJlNmY5YmU2Zjk4cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjcKKyAgICAweDEuYWZlMzg3NWJkM2FmZTgwMWYxNDlkMGE5YWQzNmY0NTNwLTQsCisgICAgLTB4MS5mOWJlNmY5YmU2Zjk4cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjgKKyAgICAweDEuZmQxMDMyZTgyZGVhYjdiYWJhOTljOTEzZGVlMTBiOWFwLTQsCisgICAgMHgxLmZhNzc1Y2QyNjRmNDNwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjkKKyAgICAtMHgxLmZkMTAzMmU4MmRlYWI3YmFiYTk5YzkxM2RlZTEwYjlhcC00LAorICAgIC0weDEuZmE3NzVjZDI2NGY0M3AtNAorICB9LAorICB7IC8vIEVudHJ5IDM3MAorICAgIDB4MS5mZWE4YzY3ZGQ0NmNhODNjYTQ5YWI5ZWNkMDM2MDczOXAtNCwKKyAgICAweDEuZmMwOWI0NzQwMmQ4MnAtNAorICB9LAorICB7IC8vIEVudHJ5IDM3MQorICAgIC0weDEuZmVhOGM2N2RkNDZjYTgzY2E0OWFiOWVjZDAzNjA3MzlwLTQsCisgICAgLTB4MS5mYzA5YjQ3NDAyZDgycC00CisgIH0sCisgIHsgLy8gRW50cnkgMzcyCisgICAgLTB4MS45MDIwY2FmMThhODc0MzgxMjdhODVkMWYwYTNkNDIwNXAtMSwKKyAgICAweDEuZmVlZmZmZmZmZmZjNnA5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzMKKyAgICAweDEuOTAyMGNhZjE4YTg3NDM4MTI3YTg1ZDFmMGEzZDQyMDVwLTEsCisgICAgLTB4MS5mZWVmZmZmZmZmZmM2cDk5NQorICB9LAorICB7IC8vIEVudHJ5IDM3NAorICAgIDB4MS5hZjEzNWJlYjBmMjgxN2ZiYTc3MjA0YTViMWI2NzY2YnAwLAorICAgIDB4MS5mZjAxZmZmZmZmZmZmcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzUKKyAgICAtMHgxLmFmMTM1YmViMGYyODE3ZmJhNzcyMDRhNWIxYjY3NjZicDAsCisgICAgLTB4MS5mZjAxZmZmZmZmZmZmcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzYKKyAgICAtMHgxLmZkOTc1MzJlZmQ4OWIyNmJjMjk0YjI3ZTBhMTk1NmI5cDMsCisgICAgMHgxLmZmOGZmZmZmZmZmZmZwNTQwCisgIH0sCisgIHsgLy8gRW50cnkgMzc3CisgICAgMHgxLmZkOTc1MzJlZmQ4OWIyNmJjMjk0YjI3ZTBhMTk1NmI5cDMsCisgICAgLTB4MS5mZjhmZmZmZmZmZmZmcDU0MAorICB9LAorICB7IC8vIEVudHJ5IDM3OAorICAgIC0weDEuY2MzMmNiOTMzODE4MTExZTZkZGYwMGM1Yzc5Y2JjODhwLTEsCisgICAgMHgxLmZmOGZmZmZmZmZmZmZwODcwCisgIH0sCisgIHsgLy8gRW50cnkgMzc5CisgICAgMHgxLmNjMzJjYjkzMzgxODExMWU2ZGRmMDBjNWM3OWNiYzg4cC0xLAorICAgIC0weDEuZmY4ZmZmZmZmZmZmZnA4NzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODAKKyAgICAtMHgxLjg2NTlkM2UyYjUyYjg4MDY2OGFjOGI0YjlmYWU5NTM4cC0xLAorICAgIDB4MS5mZmMxMHA5CisgIH0sCisgIHsgLy8gRW50cnkgMzgxCisgICAgMHgxLjg2NTlkM2UyYjUyYjg4MDY2OGFjOGI0YjlmYWU5NTM4cC0xLAorICAgIC0weDEuZmZjMTBwOQorICB9LAorICB7IC8vIEVudHJ5IDM4MgorICAgIC0weDEuYjY2MDY2ZmI4MTJlZTI3ZGJiNjIzYTFhMTM1M2UwNjJwLTIsCisgICAgMHgxLmZmY2ZmZjhwMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODMKKyAgICAweDEuYjY2MDY2ZmI4MTJlZTI3ZGJiNjIzYTFhMTM1M2UwNjJwLTIsCisgICAgLTB4MS5mZmNmZmY4cDE5CisgIH0sCisgIHsgLy8gRW50cnkgMzg0CisgICAgLTB4MS41MjBlYmQzMmUxZDhlY2QzOGJmY2Q2YTU3ZTFhMzc3ZnAxLAorICAgIDB4MS5mZmNmZmY4cDM2NQorICB9LAorICB7IC8vIEVudHJ5IDM4NQorICAgIDB4MS41MjBlYmQzMmUxZDhlY2QzOGJmY2Q2YTU3ZTFhMzc3ZnAxLAorICAgIC0weDEuZmZjZmZmOHAzNjUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODYKKyAgICAweDEuNDg5ODEzYzI0ZDEzYjAwYWI2OTYyN2Q4NThiYjYzYjVwMCwKKyAgICAweDEuZmZjZmZmZmZmZmY2Y3A3MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODcKKyAgICAtMHgxLjQ4OTgxM2MyNGQxM2IwMGFiNjk2MjdkODU4YmI2M2I1cDAsCisgICAgLTB4MS5mZmNmZmZmZmZmZjZjcDcyMAorICB9LAorICB7IC8vIEVudHJ5IDM4OAorICAgIDB4MS40MTNlNjNmN2RkNjA3ZWYzYzg0MjJhNDkwYWYyZGMzMHAwLAorICAgIDB4MS5mZmNmZmZmZmZmZmY5cDMyMAorICB9LAorICB7IC8vIEVudHJ5IDM4OQorICAgIC0weDEuNDEzZTYzZjdkZDYwN2VmM2M4NDIyYTQ5MGFmMmRjMzBwMCwKKyAgICAtMHgxLmZmY2ZmZmZmZmZmZjlwMzIwCisgIH0sCisgIHsgLy8gRW50cnkgMzkwCisgICAgLTB4MS5mYzM5MjhhMzliNjUyODRkNGM3ZWYzYjZhMmVkYzhmMXAtMiwKKyAgICAweDEuZmZjZmZmZmZmZmZmZnA5OTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTEKKyAgICAweDEuZmMzOTI4YTM5YjY1Mjg0ZDRjN2VmM2I2YTJlZGM4ZjFwLTIsCisgICAgLTB4MS5mZmNmZmZmZmZmZmZmcDk5MAorICB9LAorICB7IC8vIEVudHJ5IDM5MgorICAgIC0weDEuOWFkNzBkMjg0ZjE2ZDU5ZGNhYTBhYjlmYjc3ZDc0OTBwLTEsCisgICAgMHgxLmZmZWZmZmZmZmZmY2NwOTk1CisgIH0sCisgIHsgLy8gRW50cnkgMzkzCisgICAgMHgxLjlhZDcwZDI4NGYxNmQ1OWRjYWEwYWI5ZmI3N2Q3NDkwcC0xLAorICAgIC0weDEuZmZlZmZmZmZmZmZjY3A5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTQKKyAgICAweDEuYWFkNmVmZmNiNjc4MzgyNmRlN2IyNGRiYTUwMWMxMWNwLTMsCisgICAgMHgxLmZmZWZmZmZmZmZmZmRwMzY2CisgIH0sCisgIHsgLy8gRW50cnkgMzk1CisgICAgLTB4MS5hYWQ2ZWZmY2I2NzgzODI2ZGU3YjI0ZGJhNTAxYzExY3AtMywKKyAgICAtMHgxLmZmZWZmZmZmZmZmZmRwMzY2CisgIH0sCisgIHsgLy8gRW50cnkgMzk2CisgICAgMHgxLmM4ODY0NWY5ZDExOWVjMjAzMDcyNGE0Y2U0ZTZlYmJhcDIsCisgICAgMHgxLmZmZWZmZmZmZmZmZmZwMTgwCisgIH0sCisgIHsgLy8gRW50cnkgMzk3CisgICAgLTB4MS5jODg2NDVmOWQxMTllYzIwMzA3MjRhNGNlNGU2ZWJiYXAyLAorICAgIC0weDEuZmZlZmZmZmZmZmZmZnAxODAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTgKKyAgICAweDEuMTMxYWE3YjlkNGFhMDdmZjU4NDBhYzFlOGZiNDIzNjBwMiwKKyAgICAweDEuZmZlZmZmZmZmZmZmZnAyMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTkKKyAgICAtMHgxLjEzMWFhN2I5ZDRhYTA3ZmY1ODQwYWMxZThmYjQyMzYwcDIsCisgICAgLTB4MS5mZmVmZmZmZmZmZmZmcDIzMQorICB9LAorICB7IC8vIEVudHJ5IDQwMAorICAgIDB4MS5mNjcxNzE5YmU1MGQxZDRkZWJlODVjOTIyZTFlMjkxM3AtMywKKyAgICAweDEuZmZlZmZmZmZmZmZmZnAxMDE5CisgIH0sCisgIHsgLy8gRW50cnkgNDAxCisgICAgLTB4MS5mNjcxNzE5YmU1MGQxZDRkZWJlODVjOTIyZTFlMjkxM3AtMywKKyAgICAtMHgxLmZmZWZmZmZmZmZmZmZwMTAxOQorICB9LAorICB7IC8vIEVudHJ5IDQwMgorICAgIDB4MS5mZjA3OGEyZDJkODcxYWMxZjMyNzY1ZTlkYjY0NGViMXAtMSwKKyAgICAweDEuZmZmMWZmZmZmZmZmZnA0MAorICB9LAorICB7IC8vIEVudHJ5IDQwMworICAgIC0weDEuZmYwNzhhMmQyZDg3MWFjMWYzMjc2NWU5ZGI2NDRlYjFwLTEsCisgICAgLTB4MS5mZmYxZmZmZmZmZmZmcDQwCisgIH0sCisgIHsgLy8gRW50cnkgNDA0CisgICAgMHgxLjA3ODRiMDRmYzQyYTU5ZTc3Zjg1ZDk5NjdkYTY3NzVkcDksCisgICAgMHgxLmZmZjFmZmZmZmZmZmZwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDUKKyAgICAtMHgxLjA3ODRiMDRmYzQyYTU5ZTc3Zjg1ZDk5NjdkYTY3NzVkcDksCisgICAgLTB4MS5mZmYxZmZmZmZmZmZmcDQxCisgIH0sCisgIHsgLy8gRW50cnkgNDA2CisgICAgMHgxLjhlYjIyZGQxNjdhMzdhZDIxZGRmMWU2OTczNGU5Y2UycDAsCisgICAgMHgxLmZmZmZmMWZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDcKKyAgICAtMHgxLjhlYjIyZGQxNjdhMzdhZDIxZGRmMWU2OTczNGU5Y2UycDAsCisgICAgLTB4MS5mZmZmZjFmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDA4CisgICAgLTB4MS4yMmU3MzQ2ZmQzZGRhNTUzYjE0NmMzN2Y2MTEyN2E0Y3AxLAorICAgIDB4MS5mZmZmZmY4cDExOQorICB9LAorICB7IC8vIEVudHJ5IDQwOQorICAgIDB4MS4yMmU3MzQ2ZmQzZGRhNTUzYjE0NmMzN2Y2MTEyN2E0Y3AxLAorICAgIC0weDEuZmZmZmZmOHAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTAKKyAgICAtMHgxLmRiMGIzYjAxOWYxNzViZWQ1YmNmMWE1NjAyZGIwMGFmcC0zLAorICAgIDB4MS5mZmZmZmY4cDE5MgorICB9LAorICB7IC8vIEVudHJ5IDQxMQorICAgIDB4MS5kYjBiM2IwMTlmMTc1YmVkNWJjZjFhNTYwMmRiMDBhZnAtMywKKyAgICAtMHgxLmZmZmZmZjhwMTkyCisgIH0sCisgIHsgLy8gRW50cnkgNDEyCisgICAgMHgxLjA2YjZiZWRlOTEwMjU3ZjMxNWE1MDgzYTlhYjJiNjUwcC0xLAorICAgIDB4MS5mZmZmZmY4cDU0MworICB9LAorICB7IC8vIEVudHJ5IDQxMworICAgIC0weDEuMDZiNmJlZGU5MTAyNTdmMzE1YTUwODNhOWFiMmI2NTBwLTEsCisgICAgLTB4MS5mZmZmZmY4cDU0MworICB9LAorICB7IC8vIEVudHJ5IDQxNAorICAgIC0weDEuNDBmMDJhMTVkZmEzZDdmZjNlMmE0NTUzZjE5Y2IyZDBwMSwKKyAgICAweDEuZmZmZmZmZmZiYmZmZnA0MAorICB9LAorICB7IC8vIEVudHJ5IDQxNQorICAgIDB4MS40MGYwMmExNWRmYTNkN2ZmM2UyYTQ1NTNmMTljYjJkMHAxLAorICAgIC0weDEuZmZmZmZmZmZiYmZmZnA0MAorICB9LAorICB7IC8vIEVudHJ5IDQxNgorICAgIDB4MS5hYjYwMTEyZWY0ZmRkZmYzZjVhMjY5MGM3ZDNlYTZlZnAtMiwKKyAgICAweDEuZmZmZmZmZmZmN2ZmZnAyMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTcKKyAgICAtMHgxLmFiNjAxMTJlZjRmZGRmZjNmNWEyNjkwYzdkM2VhNmVmcC0yLAorICAgIC0weDEuZmZmZmZmZmZmN2ZmZnAyMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTgKKyAgICAweDEuMzVhOTkyOWVlYWZkNzBmMDcxMmFiZTJhNTExODU0YTFwMCwKKyAgICAweDEuZmZmZmZmZmZmZmY3OHA5MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTkKKyAgICAtMHgxLjM1YTk5MjllZWFmZDcwZjA3MTJhYmUyYTUxMTg1NGExcDAsCisgICAgLTB4MS5mZmZmZmZmZmZmZjc4cDkyMAorICB9LAorICB7IC8vIEVudHJ5IDQyMAorICAgIDB4MS40NjMwMjk4ZjNiOTkzMjg3MjA1ZGMwYjg5YjA2MDFlMHAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmQ1cDk5NQorICB9LAorICB7IC8vIEVudHJ5IDQyMQorICAgIC0weDEuNDYzMDI5OGYzYjk5MzI4NzIwNWRjMGI4OWIwNjAxZTBwMCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZDVwOTk1CisgIH0sCisgIHsgLy8gRW50cnkgNDIyCisgICAgLTB4MS45NDcyZTA0NTEyOWZkYmE2Mzc5MTcxMjQxNmVjOTYxM3AtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZlOHA3MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjMKKyAgICAweDEuOTQ3MmUwNDUxMjlmZGJhNjM3OTE3MTI0MTZlYzk2MTNwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmU4cDcyMAorICB9LAorICB7IC8vIEVudHJ5IDQyNAorICAgIDB4MS40MmU1ODZkYWExYjQyOGZjMDU4MDg4OGYyZmM0Njg5M3AwLAorICAgIDB4MS5mZmZmZmZmZmZmZmVicDkyMAorICB9LAorICB7IC8vIEVudHJ5IDQyNQorICAgIC0weDEuNDJlNTg2ZGFhMWI0MjhmYzA1ODA4ODhmMmZjNDY4OTNwMCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZWJwOTIwCisgIH0sCisgIHsgLy8gRW50cnkgNDI2CisgICAgLTB4MS5iZmM0MzZiOTQzNzRiNWYxNmI2MGVhNjljZDg4Mzk5MnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmMXAyNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjcKKyAgICAweDEuYmZjNDM2Yjk0Mzc0YjVmMTZiNjBlYTY5Y2Q4ODM5OTJwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmYxcDI0NQorICB9LAorICB7IC8vIEVudHJ5IDQyOAorICAgIDB4MS4zNTExN2Q0YTRmMWU0YmIyMmZkZDAzMTY0YTM2NGNjZnAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmY0cDg0NQorICB9LAorICB7IC8vIEVudHJ5IDQyOQorICAgIC0weDEuMzUxMTdkNGE0ZjFlNGJiMjJmZGQwMzE2NGEzNjRjY2ZwMCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZjRwODQ1CisgIH0sCisgIHsgLy8gRW50cnkgNDMwCisgICAgLTB4MS5iZmRkOTI5Mjc5OGFhYTc4OWMzZGYwZGY3NzI5ODM1YXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmNHAxMDIwCisgIH0sCisgIHsgLy8gRW50cnkgNDMxCisgICAgMHgxLmJmZGQ5MjkyNzk4YWFhNzg5YzNkZjBkZjc3Mjk4MzVhcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmNHAxMDIwCisgIH0sCisgIHsgLy8gRW50cnkgNDMyCisgICAgLTB4MS45Yjc2OGNjZGFlNmViYjcwYjQ1YWMxNGU5MmIzZDVjOHA5LAorICAgIDB4MS5mZmZmZmZmZmZmZmZjcDQ1CisgIH0sCisgIHsgLy8gRW50cnkgNDMzCisgICAgMHgxLjliNzY4Y2NkYWU2ZWJiNzBiNDVhYzE0ZTkyYjNkNWM4cDksCisgICAgLTB4MS5mZmZmZmZmZmZmZmZjcDQ1CisgIH0sCisgIHsgLy8gRW50cnkgNDM0CisgICAgMHgxLmZlY2EwNDdmMjczMGY3Mzk1ZDk1ZjQ2OWNjYjVhNWQzcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZjcDQ3NAorICB9LAorICB7IC8vIEVudHJ5IDQzNQorICAgIC0weDEuZmVjYTA0N2YyNzMwZjczOTVkOTVmNDY5Y2NiNWE1ZDNwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZjcDQ3NAorICB9LAorICB7IC8vIEVudHJ5IDQzNgorICAgIC0weDEuNDQ5ZjE1Y2M5NDU1OTdmZjU4ZjI0MjZhY2JmZjljNjJwLTIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmNwOTc2CisgIH0sCisgIHsgLy8gRW50cnkgNDM3CisgICAgMHgxLjQ0OWYxNWNjOTQ1NTk3ZmY1OGYyNDI2YWNiZmY5YzYycC0yLAorICAgIC0weDEuZmZmZmZmZmZmZmZmY3A5NzYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzgKKyAgICAweDEuZmZmYzU4ZGEwNzk1MWNiZTIyYzk2ZDczYjEyODllMWVwLTIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwODgxCisgIH0sCisgIHsgLy8gRW50cnkgNDM5CisgICAgLTB4MS5mZmZjNThkYTA3OTUxY2JlMjJjOTZkNzNiMTI4OWUxZXAtMiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVwODgxCisgIH0sCisgIHsgLy8gRW50cnkgNDQwCisgICAgLTB4MS5jMWM5MTk1ZWMyM2FhNjRkZjE0NWRkMjY5Y2Q4OTVlOHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXA5NzAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDEKKyAgICAweDEuYzFjOTE5NWVjMjNhYTY0ZGYxNDVkZDI2OWNkODk1ZThwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcDk3MAorICB9LAorICB7IC8vIEVudHJ5IDQ0MgorICAgIDB4MS4zY2MxZWQzOTA2ZDJmN2ZkZDYzM2NmNGViMDZmM2YxOXAtMiwKKyAgICAweDEuMzMzMjhjMWIzNzMyMXAtMgorICB9LAorICB7IC8vIEVudHJ5IDQ0MworICAgIC0weDEuM2NjMWVkMzkwNmQyZjdmZGQ2MzNjZjRlYjA2ZjNmMTlwLTIsCisgICAgLTB4MS4zMzMyOGMxYjM3MzIxcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDQ0CisgICAgLTB4MS5wLTEwNzQsCisgICAgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNDQ1CisgICAgMHgxLnAtMTA3NCwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDQ0NgorICAgIC0wLjAsCisgICAgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDQ0NworICAgIDB4MS5wLTEwNzQsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDgKKyAgICAtMHgxLnAtMTA3NCwKKyAgICAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDkKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDEwcC0xMDIyLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDQ1MAorICAgIDB4MS4wMDAwMDAwMDAwMDAxMHAtMTAyMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDQ1MQorICAgIC0weDEucC0xMDIyLAorICAgIC0weDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDQ1MgorICAgIDB4MS5wLTEwMjIsCisgICAgMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTMKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmUwcC0xMDIzLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDQ1NAorICAgIDB4MS5mZmZmZmZmZmZmZmZlMHAtMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDQ1NQorICAgIDB4MS5mZmZmZmZmZmZmZmZlMHAtMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDQ1NgorICAgIC0weDEuZmZmZmZmZmZmZmZmZTBwLTEwMjMsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNDU3CisgICAgMHgxLnAtMTAyMiwKKyAgICAweDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDQ1OAorICAgIC0weDEucC0xMDIyLAorICAgIC0weDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDQ1OQorICAgIDB4MS4wMDAwMDAwMDAwMDAxMHAtMTAyMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDQ2MAorICAgIC0weDEuMDAwMDAwMDAwMDAwMTBwLTEwMjIsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNDYxCisgICAgMHgxLjk5OTk5OWYwZmIzOGM2MTIyYTFmYThlMDQzYmIwN2MycC0xMywKKyAgICAweDEuOTk5OTk5OTk5OTk5YXAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjIKKyAgICAtMHgxLjk5OTk5OWYwZmIzOGM2MTIyYTFmYThlMDQzYmIwN2MycC0xMywKKyAgICAtMHgxLjk5OTk5OTk5OTk5OWFwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgNDYzCisgICAgMHgxLjk5OTk5YWY3MjAxNzQ0YjgyM2U1YjI3MGZkMWFhMzlkcC0xMiwKKyAgICAweDEuOTk5OTk5OTk5OTk5YXAtMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjQKKyAgICAtMHgxLjk5OTk5YWY3MjAxNzQ0YjgyM2U1YjI3MGZkMWFhMzlkcC0xMiwKKyAgICAtMHgxLjk5OTk5OTk5OTk5OWFwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgNDY1CisgICAgMHgxLjMzMzMzNTgxMDYyYTM4ZjA0ZGYwMjQxNDJkZGFhMDVkcC0xMSwKKyAgICAweDEuMzMzMzMzMzMzMzMzNHAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjYKKyAgICAtMHgxLjMzMzMzNTgxMDYyYTM4ZjA0ZGYwMjQxNDJkZGFhMDVkcC0xMSwKKyAgICAtMHgxLjMzMzMzMzMzMzMzMzRwLTExCisgIH0sCisgIHsgLy8gRW50cnkgNDY3CisgICAgMHgxLjk5OTk5ZjBmYjNhMGY5ZDg4NzM4YmUyZmY3YWY5YWFhcC0xMSwKKyAgICAweDEuOTk5OTk5OTk5OTk5YXAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjgKKyAgICAtMHgxLjk5OTk5ZjBmYjNhMGY5ZDg4NzM4YmUyZmY3YWY5YWFhcC0xMSwKKyAgICAtMHgxLjk5OTk5OTk5OTk5OWFwLTExCisgIH0sCisgIHsgLy8gRW50cnkgNDY5CisgICAgMHgxLjAwMDAwNTU1NTU3Nzc3Nzg1NDg1NGRlZGMyOGVhZDUxcC0xMCwKKyAgICAweDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzAKKyAgICAtMHgxLjAwMDAwNTU1NTU3Nzc3Nzg1NDg1NGRlZGMyOGVhZDUxcC0xMCwKKyAgICAtMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNDcxCisgICAgMHgxLjMzMzMzYzZhN2Y0ZWM3Mzg1MzE1MWNkNzZiNzllMTM1cC0xMCwKKyAgICAweDEuMzMzMzMzMzMzMzMzM3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzIKKyAgICAtMHgxLjMzMzMzYzZhN2Y0ZWM3Mzg1MzE1MWNkNzZiNzllMTM1cC0xMCwKKyAgICAtMHgxLjMzMzMzMzMzMzMzMzNwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNDczCisgICAgMHgxLjY2NjY3NTA4ZTBhMWI1MDIyODcwMzRkMzZiZjRlM2Q1cC0xMCwKKyAgICAweDEuNjY2NjY2NjY2NjY2NnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzQKKyAgICAtMHgxLjY2NjY3NTA4ZTBhMWI1MDIyODcwMzRkMzZiZjRlM2Q1cC0xMCwKKyAgICAtMHgxLjY2NjY2NjY2NjY2NjZwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNDc1CisgICAgMHgxLjk5OTlhZjcyMDJjMzY2ZjFlMGI1NDhhMzFjNDFkMjEwcC0xMCwKKyAgICAweDEuOTk5OTk5OTk5OTk5OXAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzYKKyAgICAtMHgxLjk5OTlhZjcyMDJjMzY2ZjFlMGI1NDhhMzFjNDFkMjEwcC0xMCwKKyAgICAtMHgxLjk5OTk5OTk5OTk5OTlwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNDc3CisgICAgMHgxLmNjY2NlYmU3NmYxMDJmZjYzM2M1ZjAyYTM0MDc2Njg3cC0xMCwKKyAgICAweDEuY2NjY2NjY2NjY2NjY3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzgKKyAgICAtMHgxLmNjY2NlYmU3NmYxMDJmZjYzM2M1ZjAyYTM0MDc2Njg3cC0xMCwKKyAgICAtMHgxLmNjY2NjY2NjY2NjY2NwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNDc5CisgICAgMHgxLjA2NjdkNWZjZjNkMDc4Zjk0MDY4N2ViOTc0MzEwZmI5cC03LAorICAgIDB4MS4wNjY2NjY2NjY2NjY2cC03CisgIH0sCisgIHsgLy8gRW50cnkgNDgwCisgICAgLTB4MS4wNjY3ZDVmY2YzZDA3OGY5NDA2ODdlYjk3NDMxMGZiOXAtNywKKyAgICAtMHgxLjA2NjY2NjY2NjY2NjZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODEKKyAgICAweDEuY2NkNDkzOWQwY2NkNzY0NmIzZjgxYjc1NTM2NzVjMjNwLTcsCisgICAgMHgxLmNjY2NjY2NjY2NjY2NwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODIKKyAgICAtMHgxLmNjZDQ5MzlkMGNjZDc2NDZiM2Y4MWI3NTUzNjc1YzIzcC03LAorICAgIC0weDEuY2NjY2NjY2NjY2NjY3AtNworICB9LAorICB7IC8vIEVudHJ5IDQ4MworICAgIDB4MS40OWE0ZmMwMmFkMTkzZThlOTRjNGIyNDI5MTkwYjViMnAtNiwKKyAgICAweDEuNDk5OTk5OTk5OTk5OXAtNgorICB9LAorICB7IC8vIEVudHJ5IDQ4NAorICAgIC0weDEuNDlhNGZjMDJhZDE5M2U4ZTk0YzRiMjQyOTE5MGI1YjJwLTYsCisgICAgLTB4MS40OTk5OTk5OTk5OTk5cC02CisgIH0sCisgIHsgLy8gRW50cnkgNDg1CisgICAgMHgxLmFjZTVkZWQ1ZjZiZTY5OGY1NjY5N2FjNzYxZjNkYzY5cC02LAorICAgIDB4MS5hY2NjY2NjY2NjY2NjcC02CisgIH0sCisgIHsgLy8gRW50cnkgNDg2CisgICAgLTB4MS5hY2U1ZGVkNWY2YmU2OThmNTY2OTdhYzc2MWYzZGM2OXAtNiwKKyAgICAtMHgxLmFjY2NjY2NjY2NjY2NwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODcKKyAgICAweDEuMDgxNzY3ZmQzY2I2ODVmN2IwNjkxNDZjZTMzMzM4NTFwLTUsCisgICAgMHgxLjA4MHAtNQorICB9LAorICB7IC8vIEVudHJ5IDQ4OAorICAgIC0weDEuMDgxNzY3ZmQzY2I2ODVmN2IwNjkxNDZjZTMzMzM4NTFwLTUsCisgICAgLTB4MS4wODBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODkKKyAgICAweDEuMzljMGQ2ZGVhNjZmYjZkMjg2ZDQwM2MyOTI1MjczNTZwLTUsCisgICAgMHgxLjM5OTk5OTk5OTk5OWFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTAKKyAgICAtMHgxLjM5YzBkNmRlYTY2ZmI2ZDI4NmQ0MDNjMjkyNTI3MzU2cC01LAorICAgIC0weDEuMzk5OTk5OTk5OTk5YXAtNQorICB9LAorICB7IC8vIEVudHJ5IDQ5MQorICAgIDB4MS42YjcwMmI5NTRiYzFkNTgzYzRhNDY3NzNjMmMyYTE1ZHAtNSwKKyAgICAweDEuNmIzMzMzMzMzMzMzNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDQ5MgorICAgIC0weDEuNmI3MDJiOTU0YmMxZDU4M2M0YTQ2NzczYzJjMmExNWRwLTUsCisgICAgLTB4MS42YjMzMzMzMzMzMzM0cC01CisgIH0sCisgIHsgLy8gRW50cnkgNDkzCisgICAgMHgxLjlkMjY1NjE4ZGQwYzY4OGUwNDljNjEwOTBkM2UzZmUycC01LAorICAgIDB4MS45Y2NjY2NjY2NjY2NlcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDk0CisgICAgLTB4MS45ZDI2NTYxOGRkMGM2ODhlMDQ5YzYxMDkwZDNlM2ZlMnAtNSwKKyAgICAtMHgxLjljY2NjY2NjY2NjY2VwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTUKKyAgICAweDEuY2VlNDQ2ZTRjZmQ0YmU2OTAwZjRiOTA2Y2E5NzI1YjFwLTUsCisgICAgMHgxLmNlNjY2NjY2NjY2NjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTYKKyAgICAtMHgxLmNlZTQ0NmU0Y2ZkNGJlNjkwMGY0YjkwNmNhOTcyNWIxcC01LAorICAgIC0weDEuY2U2NjY2NjY2NjY2NnAtNQorICB9LAorICB7IC8vIEVudHJ5IDQ5NworICAgIDB4MS5hMWVhZWRkNWE0MzEzZTlkMDhiYzdiYjE3YTIyNTMxZnAtMSwKKyAgICAweDEuNWU3ZmM0MzY5YmRhZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ5OAorICAgIC0weDEuYTFlYWVkZDVhNDMxM2U5ZDA4YmM3YmIxN2EyMjUzMWZwLTEsCisgICAgLTB4MS41ZTdmYzQzNjliZGFkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDk5CisgICAgMHgxLmQ5M2I4YWFkNDI0ZGUwZTQzZmIwNGQ2NzgxYmU4MWEzcDEsCisgICAgMHgxLjRlN2ZjNDM2OWJkYWRwMAorICB9LAorICB7IC8vIEVudHJ5IDUwMAorICAgIC0weDEuZDkzYjhhYWQ0MjRkZTBlNDNmYjA0ZDY3ODFiZTgxYTNwMSwKKyAgICAtMHgxLjRlN2ZjNDM2OWJkYWRwMAorICB9LAorICB7IC8vIEVudHJ5IDUwMQorICAgIC0weDEuNTYzYWNmMTU4YzJlYjY3OGQ3MWJlMzFlMGYzNDc1NGRwMSwKKyAgICAweDEuZWRiZmE2NTFlOWM4NHAwCisgIH0sCisgIHsgLy8gRW50cnkgNTAyCisgICAgMHgxLjU2M2FjZjE1OGMyZWI2NzhkNzFiZTMxZTBmMzQ3NTRkcDEsCisgICAgLTB4MS5lZGJmYTY1MWU5Yzg0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDMKKyAgICAtMHgxLjU3NmI3NzYwOWYwODkwMzEzYzM3MWEwYTJjNTgyMTQ1cC0xLAorICAgIDB4MS40NjdmYzQzNjliZGFkcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDQKKyAgICAweDEuNTc2Yjc3NjA5ZjA4OTAzMTNjMzcxYTBhMmM1ODIxNDVwLTEsCisgICAgLTB4MS40NjdmYzQzNjliZGFkcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDUKKyAgICAweDEuMDAxNTU3NzdhZWJmNmFkNDFiMzlhODA4ZWQ1YzMzODRwLTUsCisgICAgMHgxLjk2MWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDUwNgorICAgIC0weDEuMDAxNTU3NzdhZWJmNmFkNDFiMzlhODA4ZWQ1YzMzODRwLTUsCisgICAgLTB4MS45NjFmYjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDcKKyAgICAweDEuODdlOTk2NmU3ZDIyZDM0OGZlYzZjOTVmODUxNzc1ZjRwLTEsCisgICAgMHgxLmU1YmZhNjUxZTljODNwMQorICB9LAorICB7IC8vIEVudHJ5IDUwOAorICAgIC0weDEuODdlOTk2NmU3ZDIyZDM0OGZlYzZjOTVmODUxNzc1ZjRwLTEsCisgICAgLTB4MS5lNWJmYTY1MWU5YzgzcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDkKKyAgICAweDEuYTQ5ZTdkODk4Nzg1MGY5Y2E1YjkzMzJlMzlkY2Q4OGZwMSwKKyAgICAweDEuMWFhZmNiYWZjODVmN3AyCisgIH0sCisgIHsgLy8gRW50cnkgNTEwCisgICAgLTB4MS5hNDllN2Q4OTg3ODUwZjljYTViOTMzMmUzOWRjZDg4ZnAxLAorICAgIC0weDEuMWFhZmNiYWZjODVmN3AyCisgIH0sCisgIHsgLy8gRW50cnkgNTExCisgICAgLTB4MS43OWNlZDgxNTZkMDQwZWRkZTVhNmFiNjIyNTVlMjI2MXAxLAorICAgIDB4MS40MjdmYzQzNjliZGFkcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTIKKyAgICAweDEuNzljZWQ4MTU2ZDA0MGVkZGU1YTZhYjYyMjU1ZTIyNjFwMSwKKyAgICAtMHgxLjQyN2ZjNDM2OWJkYWRwMgorICB9LAorICB7IC8vIEVudHJ5IDUxMworICAgIC0weDEuNmYxZjY1Y2QxZTkxYjVlNWVjMWUxMjBlOWUwZGRjMGFwLTEsCisgICAgMHgxLjZhNGZiY2JkNmY1NjJwMgorICB9LAorICB7IC8vIEVudHJ5IDUxNAorICAgIDB4MS42ZjFmNjVjZDFlOTFiNWU1ZWMxZTEyMGU5ZTBkZGMwYXAtMSwKKyAgICAtMHgxLjZhNGZiY2JkNmY1NjJwMgorICB9LAorICB7IC8vIEVudHJ5IDUxNQorICAgIC0weDEuNjc3NDdkNWY4NDRlMWIwYzUwM2Q1MWU3YmEwMzJmZmNwLTEsCisgICAgMHgxLjZhZjJlZmYwYTI4OTZwMgorICB9LAorICB7IC8vIEVudHJ5IDUxNgorICAgIDB4MS42Nzc0N2Q1Zjg0NGUxYjBjNTAzZDUxZTdiYTAzMmZmY3AtMSwKKyAgICAtMHgxLjZhZjJlZmYwYTI4OTZwMgorICB9LAorICB7IC8vIEVudHJ5IDUxNworICAgIC0weDEuNjI2YTI1ODgxNWQxODIzNTA2ZDE3MDY5MTMwZWI5ZmJwMSwKKyAgICAweDEuNDNjNjJhOWQwMjQxNHAyCisgIH0sCisgIHsgLy8gRW50cnkgNTE4CisgICAgMHgxLjYyNmEyNTg4MTVkMTgyMzUwNmQxNzA2OTEzMGViOWZicDEsCisgICAgLTB4MS40M2M2MmE5ZDAyNDE0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTkKKyAgICAweDEuZDZhZGFmODBmOGIwNTFmYmM3YWI5ZjJlMDllOGU2MDhwMSwKKyAgICAweDEuMWM5OTY1NDk2MWY5MnAyCisgIH0sCisgIHsgLy8gRW50cnkgNTIwCisgICAgLTB4MS5kNmFkYWY4MGY4YjA1MWZiYzdhYjlmMmUwOWU4ZTYwOHAxLAorICAgIC0weDEuMWM5OTY1NDk2MWY5MnAyCisgIH0sCisgIHsgLy8gRW50cnkgNTIxCisgICAgMHgxLmE5NGQxYjIxMzcwZDUyYmZjZDllYzQxN2U0MWQ2ZTVicC0xLAorICAgIDB4MS5lYWQ5M2ZlYjgzNjFmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjIKKyAgICAtMHgxLmE5NGQxYjIxMzcwZDUyYmZjZDllYzQxN2U0MWQ2ZTVicC0xLAorICAgIC0weDEuZWFkOTNmZWI4MzYxZnAxCisgIH0sCisgIHsgLy8gRW50cnkgNTIzCisgICAgMHgxLjRjYmE5ZTc4MjIyMzQwY2E0OTNmODAzYmJjOTQ3NjU5cC00LAorICAgIDB4MS45YzdmYjU0NDQyZDFhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjQKKyAgICAtMHgxLjRjYmE5ZTc4MjIyMzQwY2E0OTNmODAzYmJjOTQ3NjU5cC00LAorICAgIC0weDEuOWM3ZmI1NDQ0MmQxYXAxCisgIH0sCisgIHsgLy8gRW50cnkgNTI1CisgICAgLTB4MS4yY2I2ZDAyNjM0NTMxYTY4MzliZjg5OGNjMWY5MThkZXAtMSwKKyAgICAweDEuNGUyNjJhOWQwMjQxNXAxCisgIH0sCisgIHsgLy8gRW50cnkgNTI2CisgICAgMHgxLjJjYjZkMDI2MzQ1MzFhNjgzOWJmODk4Y2MxZjkxOGRlcC0xLAorICAgIC0weDEuNGUyNjJhOWQwMjQxNXAxCisgIH0sCisgIHsgLy8gRW50cnkgNTI3CisgICAgLTB4MS4xOGQ5MTEyMzA4ZDViODk3YmE0NGNmYzVjNDQzNzMxN3AxLAorICAgIDB4MS5mZjk5M2ZlYjgzNjIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjgKKyAgICAweDEuMThkOTExMjMwOGQ1Yjg5N2JhNDRjZmM1YzQ0MzczMTdwMSwKKyAgICAtMHgxLmZmOTkzZmViODM2MjBwMAorICB9LAorICB7IC8vIEVudHJ5IDUyOQorICAgIDB4MS41NmZlMDE0NWNmMjkwMTk3NTgyOWRkYzNmYzc4NmRmMHAyLAorICAgIDB4MS42MmU2MmE5ZDAyNDE2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzAKKyAgICAtMHgxLjU2ZmUwMTQ1Y2YyOTAxOTc1ODI5ZGRjM2ZjNzg2ZGYwcDIsCisgICAgLTB4MS42MmU2MmE5ZDAyNDE2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzEKKyAgICAweDEuZjRhZDM1M2FjYTQ1M2Y2MmJlYWUwMWNkNWIxM2Q1MGRwLTEsCisgICAgMHgxLjhjNjYyYTlkMDI0MTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzIKKyAgICAtMHgxLmY0YWQzNTNhY2E0NTNmNjJiZWFlMDFjZDViMTNkNTBkcC0xLAorICAgIC0weDEuOGM2NjJhOWQwMjQxOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDUzMworICAgIDB4MS42YTdlMWY2NDA3ZWU2MTM5N2QwMTZkNjkxYmI2MWQxN3AzLAorICAgIC0weDEuYThhYTFkMTFjNDRmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTM0CisgICAgLTB4MS42YTdlMWY2NDA3ZWU2MTM5N2QwMTZkNjkxYmI2MWQxN3AzLAorICAgIDB4MS5hOGFhMWQxMWM0NGZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzUKKyAgICAweDEuMGQ3MThjZmM4MjQ2NDUzNmJmZDYyMWJlNDE5ZjAwN2NwNiwKKyAgICAtMHgxLjk1ZWM4YjllMDNkNTRwMAorICB9LAorICB7IC8vIEVudHJ5IDUzNgorICAgIC0weDEuMGQ3MThjZmM4MjQ2NDUzNmJmZDYyMWJlNDE5ZjAwN2NwNiwKKyAgICAweDEuOTVlYzhiOWUwM2Q1NHAwCisgIH0sCisgIHsgLy8gRW50cnkgNTM3CisgICAgLTB4MS4xMWQ4NzE0NmMyZDVhMTgzMmMyNGYzZDg3MDUyZDdlYnA0LAorICAgIC0weDEuODMyZWZhMmE0MzVhOXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTM4CisgICAgMHgxLjExZDg3MTQ2YzJkNWExODMyYzI0ZjNkODcwNTJkN2VicDQsCisgICAgMHgxLjgzMmVmYTJhNDM1YTlwMAorICB9LAorICB7IC8vIEVudHJ5IDUzOQorICAgIC0weDEuZTNhMzcyOWIzZTg2ZTIyMjFmYTVmMDRhYmY2OTllNmVwMiwKKyAgICAtMHgxLjcwNzE2OGI2ODJkZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDU0MAorICAgIDB4MS5lM2EzNzI5YjNlODZlMjIyMWZhNWYwNGFiZjY5OWU2ZXAyLAorICAgIDB4MS43MDcxNjhiNjgyZGZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDEKKyAgICAtMHgxLjM0MjllNjFhNWQxZjJlODBmYmQxMzcwZDRhN2MyYjEwcDIsCisgICAgLTB4MS41ZGIzZDc0MmMyNjUzcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDIKKyAgICAweDEuMzQyOWU2MWE1ZDFmMmU4MGZiZDEzNzBkNGE3YzJiMTBwMiwKKyAgICAweDEuNWRiM2Q3NDJjMjY1M3AwCisgIH0sCisgIHsgLy8gRW50cnkgNTQzCisgICAgLTB4MS5jMDhjYWVjNWNmOTk3MjVlNTdjMzI3NjZmYjA4NGM1ZnAxLAorICAgIC0weDEuNGFmNjQ1Y2YwMWVhOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQ0CisgICAgMHgxLmMwOGNhZWM1Y2Y5OTcyNWU1N2MzMjc2NmZiMDg0YzVmcDEsCisgICAgMHgxLjRhZjY0NWNmMDFlYThwMAorICB9LAorICB7IC8vIEVudHJ5IDU0NQorICAgIC0weDEuNWQ2MDNkNzUxNzY3ZWU3MGU5YTJmZjU0OTU5ZmE0YTdwMSwKKyAgICAtMHgxLjM4MzhiNDViNDE2ZmRwMAorICB9LAorICB7IC8vIEVudHJ5IDU0NgorICAgIDB4MS41ZDYwM2Q3NTE3NjdlZTcwZTlhMmZmNTQ5NTlmYTRhN3AxLAorICAgIDB4MS4zODM4YjQ1YjQxNmZkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDcKKyAgICAtMHgxLjFiNDhhMzViMWIyNzdlZmZhYmQ3Mjc4YjUyNTcwOGVkcDEsCisgICAgLTB4MS4yNTdiMjJlNzgwZjUycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDgKKyAgICAweDEuMWI0OGEzNWIxYjI3N2VmZmFiZDcyNzhiNTI1NzA4ZWRwMSwKKyAgICAweDEuMjU3YjIyZTc4MGY1MnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQ5CisgICAgLTB4MS5kNzRjYWY5OTEyZGM3ZDk2NjliMDA5MjZhYTFhZGUxMXAwLAorICAgIC0weDEuMTJiZDkxNzNjMDdhYnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTUwCisgICAgMHgxLmQ3NGNhZjk5MTJkYzdkOTY2OWIwMDkyNmFhMWFkZTExcDAsCisgICAgMHgxLjEyYmQ5MTczYzA3YWJwMAorICB9LAorICB7IC8vIEVudHJ5IDU1MQorICAgIC0weDEuNmJlNzAyZTFmNmNkNjBiZmQ4NmFkODYxODBkMTg0OTBwMCwKKyAgICAtMHgxLmVhNWMzZWQ1YjM4NTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTIKKyAgICAweDEuNmJlNzAyZTFmNmNkNjBiZmQ4NmFkODYxODBkMTg0OTBwMCwKKyAgICAweDEuZWE1YzNlZDViMzg1MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU1MworICAgIC0weDEuNGQwZGYxZmMxZDM0ODRiMDI3NTM3ZDgxMTdhMzk1ZjRwMCwKKyAgICAtMHgxLmQ0Yjg3ZGFiNjcwYTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTQKKyAgICAweDEuNGQwZGYxZmMxZDM0ODRiMDI3NTM3ZDgxMTdhMzk1ZjRwMCwKKyAgICAweDEuZDRiODdkYWI2NzBhMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU1NQorICAgIC0weDEuMzE2YzhiMDY4YTdhZjI1N2YxZTVhNTE5NDM4MzRmM2VwMCwKKyAgICAtMHgxLmJmMTRiYzgxMWE4ZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTYKKyAgICAweDEuMzE2YzhiMDY4YTdhZjI1N2YxZTVhNTE5NDM4MzRmM2VwMCwKKyAgICAweDEuYmYxNGJjODExYThmMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU1NworICAgIC0weDEuMTg3MmExYWFhN2UyNmNmNDE3ZTYzMzE2MTdlYTdkZDBwMCwKKyAgICAtMHgxLmE5NzBmYjU2Y2UxNDBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTgKKyAgICAweDEuMTg3MmExYWFhN2UyNmNmNDE3ZTYzMzE2MTdlYTdkZDBwMCwKKyAgICAweDEuYTk3MGZiNTZjZTE0MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU1OQorICAgIC0weDEuMDFhZWVlZDA0Y2JiMGRmYWNkMWQwMGM2NTdkMDhiMTlwMCwKKyAgICAtMHgxLjkzY2QzYTJjODE5OTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjAKKyAgICAweDEuMDFhZWVlZDA0Y2JiMGRmYWNkMWQwMGM2NTdkMDhiMTlwMCwKKyAgICAweDEuOTNjZDNhMmM4MTk5MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU2MQorICAgIC0weDEuZDk4ZTQwOGFjMjA4NWM0ZTA1ODhkZjEwYmE3ZmIwMjNwLTEsCisgICAgLTB4MS43ZTI5NzkwMjM1MWUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTYyCisgICAgMHgxLmQ5OGU0MDhhYzIwODVjNGUwNTg4ZGYxMGJhN2ZiMDIzcC0xLAorICAgIDB4MS43ZTI5NzkwMjM1MWUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTYzCisgICAgLTB4MS5iMmU0NzUwNjMxYzUzYzU0ZjU4MzBmZDQxNzUzZDQyN3AtMSwKKyAgICAtMHgxLjY4ODViN2Q3ZThhMzBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjQKKyAgICAweDEuYjJlNDc1MDYzMWM1M2M1NGY1ODMwZmQ0MTc1M2Q0MjdwLTEsCisgICAgMHgxLjY4ODViN2Q3ZThhMzBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjUKKyAgICAtMHgxLjhlZTkxNjM5MmUwNDU5MGNlOTg4ZDgyY2MzOTU5MDIxcC0xLAorICAgIC0weDEuNTJlMWY2YWQ5YzI4MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU2NgorICAgIDB4MS44ZWU5MTYzOTJlMDQ1OTBjZTk4OGQ4MmNjMzk1OTAyMXAtMSwKKyAgICAweDEuNTJlMWY2YWQ5YzI4MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU2NworICAgIC0weDEuNmQzOTVlNDk1Zjc3ZTcwOTg0MjU5MmUyMjY2MDdiNTNwLTEsCisgICAgLTB4MS4zZDNlMzU4MzRmYWQwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTY4CisgICAgMHgxLjZkMzk1ZTQ5NWY3N2U3MDk4NDI1OTJlMjI2NjA3YjUzcC0xLAorICAgIDB4MS4zZDNlMzU4MzRmYWQwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTY5CisgICAgLTB4MS4yNGUzZTAxN2EwOThlY2Y0ZGU0OGJjZWViMDI2NzQzYXAtMSwKKyAgICAtMHgxLjBhMGIwMjUwMWM3OTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzAKKyAgICAweDEuMjRlM2UwMTdhMDk4ZWNmNGRlNDhiY2VlYjAyNjc0M2FwLTEsCisgICAgMHgxLjBhMGIwMjUwMWM3OTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzEKKyAgICAtMHgxLmZkYmQ1ZjA1OTZiZGM2ZWY4ZGE1M2VlNjUyYjU3Y2Y3cC0yLAorICAgIC0weDEuZDhmNzIwOGU2YjgyY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDU3MgorICAgIDB4MS5mZGJkNWYwNTk2YmRjNmVmOGRhNTNlZTY1MmI1N2NmN3AtMiwKKyAgICAweDEuZDhmNzIwOGU2YjgyY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDU3MworICAgIC0weDEuYjVmM2Q2YWZiZTZmMjU5YWYzN2M0ZTYzM2FiNWZkZmFwLTIsCisgICAgLTB4MS45ZGQ4M2M3YzllMTI2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTc0CisgICAgMHgxLmI1ZjNkNmFmYmU2ZjI1OWFmMzdjNGU2MzNhYjVmZGZhcC0yLAorICAgIDB4MS45ZGQ4M2M3YzllMTI2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTc1CisgICAgLTB4MS43MWEwZjk4MDgxZWE5OGI1ZjMwYTE1OTNlM2ZjNjM3M3AtMiwKKyAgICAtMHgxLjYyYjk1ODZhZDBhMjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzYKKyAgICAweDEuNzFhMGY5ODA4MWVhOThiNWYzMGExNTkzZTNmYzYzNzNwLTIsCisgICAgMHgxLjYyYjk1ODZhZDBhMjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzcKKyAgICAtMHgxLjMwMTkwOWEyYzM2ZTg5YTY3NTI4YTM4Yzc3YWM5ZTQzcC0yLAorICAgIC0weDEuMjc5YTc0NTkwMzMxYXAtMgorICB9LAorICB7IC8vIEVudHJ5IDU3OAorICAgIDB4MS4zMDE5MDlhMmMzNmU4OWE2NzUyOGEzOGM3N2FjOWU0M3AtMiwKKyAgICAweDEuMjc5YTc0NTkwMzMxYXAtMgorICB9LAorICB7IC8vIEVudHJ5IDU3OQorICAgIC0weDEuZTE4ZTk0MWNjN2ZkNTE5ZWNjNDA1NDhhODZkMmEzZWRwLTMsCisgICAgLTB4MS5kOGY3MjA4ZTZiODI5cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNTgwCisgICAgMHgxLmUxOGU5NDFjYzdmZDUxOWVjYzQwNTQ4YTg2ZDJhM2VkcC0zLAorICAgIDB4MS5kOGY3MjA4ZTZiODI5cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNTgxCisgICAgLTB4MS42NjUwNzg0YmJkY2MwMmYzMzkwMjYyY2Y2OGJhZDNjNnAtMywKKyAgICAtMHgxLjYyYjk1ODZhZDBhMWVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODIKKyAgICAweDEuNjY1MDc4NGJiZGNjMDJmMzM5MDI2MmNmNjhiYWQzYzZwLTMsCisgICAgMHgxLjYyYjk1ODZhZDBhMWVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODMKKyAgICAtMHgxLmRiMTQyNDY4Y2RhZmM1NmVjZmRmOGIxMDUyYjA5ZTYzcC00LAorICAgIC0weDEuZDhmNzIwOGU2YjgyNnAtNAorICB9LAorICB7IC8vIEVudHJ5IDU4NAorICAgIDB4MS5kYjE0MjQ2OGNkYWZjNTZlY2ZkZjhiMTA1MmIwOWU2M3AtNCwKKyAgICAweDEuZDhmNzIwOGU2YjgyNnAtNAorICB9LAorICB7IC8vIEVudHJ5IDU4NQorICAgIC0weDEuZDk3ZGQ2ZDJlNTNmMjdlMGZlMWYzYmQyYjAzNTY2MmFwLTUsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJkcC01CisgIH0sCisgIHsgLy8gRW50cnkgNTg2CisgICAgMHgxLmQ5N2RkNmQyZTUzZjI3ZTBmZTFmM2JkMmIwMzU2NjJhcC01LAorICAgIDB4MS5kOGY3MjA4ZTZiODJkcC01CisgIH0sCisgIHsgLy8gRW50cnkgNTg3CisgICAgMHgxLmQ5N2RkNmQyZTUzZjI3ZTBmZTFmM2JkMmIwMzU2NjJhcC01LAorICAgIDB4MS5kOGY3MjA4ZTZiODJkcC01CisgIH0sCisgIHsgLy8gRW50cnkgNTg4CisgICAgLTB4MS5kOTdkZDZkMmU1M2YyN2UwZmUxZjNiZDJiMDM1NjYyYXAtNSwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODkKKyAgICAweDEuZGIxNDI0NjhjZGIwMzZmMDg3ODNkOTM2YjE5MzQ4ZjZwLTQsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTAKKyAgICAtMHgxLmRiMTQyNDY4Y2RiMDM2ZjA4NzgzZDkzNmIxOTM0OGY2cC00LAorICAgIC0weDEuZDhmNzIwOGU2YjgyZHAtNAorICB9LAorICB7IC8vIEVudHJ5IDU5MQorICAgIDB4MS42NjUwNzg0YmJkY2M0NGU4YmUyYzIyMGUxZDY3M2ZmYnAtMywKKyAgICAweDEuNjJiOTU4NmFkMGEyMnAtMworICB9LAorICB7IC8vIEVudHJ5IDU5MgorICAgIC0weDEuNjY1MDc4NGJiZGNjNDRlOGJlMmMyMjBlMWQ2NzNmZmJwLTMsCisgICAgLTB4MS42MmI5NTg2YWQwYTIycC0zCisgIH0sCisgIHsgLy8gRW50cnkgNTkzCisgICAgMHgxLmUxOGU5NDFjYzdmZDk1MjhhNTU4NTE1N2FjNjVlNjE1cC0zLAorICAgIDB4MS5kOGY3MjA4ZTZiODJkcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNTk0CisgICAgLTB4MS5lMThlOTQxY2M3ZmQ5NTI4YTU1ODUxNTdhYzY1ZTYxNXAtMywKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTUKKyAgICAweDEuMzAxOTA5YTJjMzZlYWM3OGVjMWI0ZTcxMTMxNmQwYzRwLTIsCisgICAgMHgxLjI3OWE3NDU5MDMzMWNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTYKKyAgICAtMHgxLjMwMTkwOWEyYzM2ZWFjNzhlYzFiNGU3MTEzMTZkMGM0cC0yLAorICAgIC0weDEuMjc5YTc0NTkwMzMxY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDU5NworICAgIDB4MS43MWEwZjk4MDgxZWFiY2UxNTVmMzEwMjg4YzQyNDVlYXAtMiwKKyAgICAweDEuNjJiOTU4NmFkMGEyMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDU5OAorICAgIC0weDEuNzFhMGY5ODA4MWVhYmNlMTU1ZjMxMDI4OGM0MjQ1ZWFwLTIsCisgICAgLTB4MS42MmI5NTg2YWQwYTIycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTk5CisgICAgMHgxLmI1ZjNkNmFmYmU2ZjRiNzU2ODQyYjhlZWU1Yzg1YTMxcC0yLAorICAgIDB4MS45ZGQ4M2M3YzllMTI4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjAwCisgICAgLTB4MS5iNWYzZDZhZmJlNmY0Yjc1Njg0MmI4ZWVlNWM4NWEzMXAtMiwKKyAgICAtMHgxLjlkZDgzYzdjOWUxMjhwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDEKKyAgICAweDEuZmRiZDVmMDU5NmJkZWVkZDgyZDUyMjNjM2MxYjE5MjVwLTIsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDIKKyAgICAtMHgxLmZkYmQ1ZjA1OTZiZGVlZGQ4MmQ1MjIzYzNjMWIxOTI1cC0yLAorICAgIC0weDEuZDhmNzIwOGU2YjgyZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDYwMworICAgIDB4MS4yNGUzZTAxN2EwOThlY2Y0ZGU0OGJjZWViMDI2NzQzYXAtMSwKKyAgICAweDEuMGEwYjAyNTAxYzc5OXAtMQorICB9LAorICB7IC8vIEVudHJ5IDYwNAorICAgIC0weDEuMjRlM2UwMTdhMDk4ZWNmNGRlNDhiY2VlYjAyNjc0M2FwLTEsCisgICAgLTB4MS4wYTBiMDI1MDFjNzk5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjA1CisgICAgMHgxLjZkMzk1ZTQ5NWY3Nzg2NzhiOWVhMGQ0ODA4YzcyMjBhcC0xLAorICAgIDB4MS4zZDNlMzU4MzRmYWNjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjA2CisgICAgLTB4MS42ZDM5NWU0OTVmNzc4Njc4YjllYTBkNDgwOGM3MjIwYXAtMSwKKyAgICAtMHgxLjNkM2UzNTgzNGZhY2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDcKKyAgICAweDEuOGVlOTE2MzkyZTAzZjIzMzUwMzNhNDFiM2IwMjA2ZTRwLTEsCisgICAgMHgxLjUyZTFmNmFkOWMyN2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDgKKyAgICAtMHgxLjhlZTkxNjM5MmUwM2YyMzM1MDMzYTQxYjNiMDIwNmU0cC0xLAorICAgIC0weDEuNTJlMWY2YWQ5YzI3Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDYwOQorICAgIDB4MS5iMmU0NzUwNjMxYzRjZTI4M2VmODc1M2ZhMWVkZjMyNHAtMSwKKyAgICAweDEuNjg4NWI3ZDdlOGEyY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDYxMAorICAgIC0weDEuYjJlNDc1MDYzMWM0Y2UyODNlZjg3NTNmYTFlZGYzMjRwLTEsCisgICAgLTB4MS42ODg1YjdkN2U4YTJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjExCisgICAgMHgxLmQ5OGU0MDhhYzIwN2U1OGUxNWYwMTg1ZDRiMTBjZjcxcC0xLAorICAgIDB4MS43ZTI5NzkwMjM1MWRjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjEyCisgICAgLTB4MS5kOThlNDA4YWMyMDdlNThlMTVmMDE4NWQ0YjEwY2Y3MXAtMSwKKyAgICAtMHgxLjdlMjk3OTAyMzUxZGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTMKKyAgICAweDEuMDFhZWVlZDA0Y2JhY2Q4ZWI2YmMwOTQ2NjRkYjc3NjNwMCwKKyAgICAweDEuOTNjZDNhMmM4MTk4Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDYxNAorICAgIC0weDEuMDFhZWVlZDA0Y2JhY2Q4ZWI2YmMwOTQ2NjRkYjc3NjNwMCwKKyAgICAtMHgxLjkzY2QzYTJjODE5OGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTUKKyAgICAweDEuMTg3MmExYWFhN2UyMjY4Y2I5NDZmY2ViODNmMGVhNWVwMCwKKyAgICAweDEuYTk3MGZiNTZjZTEzY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDYxNgorICAgIC0weDEuMTg3MmExYWFhN2UyMjY4Y2I5NDZmY2ViODNmMGVhNWVwMCwKKyAgICAtMHgxLmE5NzBmYjU2Y2UxM2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTcKKyAgICAweDEuMzE2YzhiMDY4YTdhYTRjYjc3YmMzZjM5OTIxYzJjOGRwMCwKKyAgICAweDEuYmYxNGJjODExYThlY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDYxOAorICAgIC0weDEuMzE2YzhiMDY4YTdhYTRjYjc3YmMzZjM5OTIxYzJjOGRwMCwKKyAgICAtMHgxLmJmMTRiYzgxMWE4ZWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTkKKyAgICAweDEuNGQwZGYxZmMxZDM0MmU4NjdlNDlmMWY2ZGRhY2VkYWFwMCwKKyAgICAweDEuZDRiODdkYWI2NzA5Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDYyMAorICAgIC0weDEuNGQwZGYxZmMxZDM0MmU4NjdlNDlmMWY2ZGRhY2VkYWFwMCwKKyAgICAtMHgxLmQ0Yjg3ZGFiNjcwOWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjEKKyAgICAweDEuNmJlNzAyZTFmNmNkMDAxNmJhMTY3N2E5Y2QzM2YxMzlwMCwKKyAgICAweDEuZWE1YzNlZDViMzg0Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDYyMgorICAgIC0weDEuNmJlNzAyZTFmNmNkMDAxNmJhMTY3N2E5Y2QzM2YxMzlwMCwKKyAgICAtMHgxLmVhNWMzZWQ1YjM4NGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjMKKyAgICAweDEuZDc0Y2FmOTkxMmRjN2Q5NjY5YjAwOTI2YWExYWRlMTFwMCwKKyAgICAweDEuMTJiZDkxNzNjMDdhYnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjI0CisgICAgLTB4MS5kNzRjYWY5OTEyZGM3ZDk2NjliMDA5MjZhYTFhZGUxMXAwLAorICAgIC0weDEuMTJiZDkxNzNjMDdhYnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjI1CisgICAgMHgxLjFiNDhhMzViMWIyODNiYmM4MmJiMDQ0ZTk5YzRkOWIxcDEsCisgICAgMHgxLjI1N2IyMmU3ODBmNTZwMAorICB9LAorICB7IC8vIEVudHJ5IDYyNgorICAgIC0weDEuMWI0OGEzNWIxYjI4M2JiYzgyYmIwNDRlOTljNGQ5YjFwMSwKKyAgICAtMHgxLjI1N2IyMmU3ODBmNTZwMAorICB9LAorICB7IC8vIEVudHJ5IDYyNworICAgIDB4MS41ZDYwM2Q3NTE3NjhmY2Q4YWY4MmIzODc0Njg4ODUzMHAxLAorICAgIDB4MS4zODM4YjQ1YjQxNzAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjgKKyAgICAtMHgxLjVkNjAzZDc1MTc2OGZjZDhhZjgyYjM4NzQ2ODg4NTMwcDEsCisgICAgLTB4MS4zODM4YjQ1YjQxNzAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjkKKyAgICAweDEuYzA4Y2FlYzVjZjliMWI1NGIwNDUyMjhiM2VlYjI0NjlwMSwKKyAgICAweDEuNGFmNjQ1Y2YwMWVhY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjMwCisgICAgLTB4MS5jMDhjYWVjNWNmOWIxYjU0YjA0NTIyOGIzZWViMjQ2OXAxLAorICAgIC0weDEuNGFmNjQ1Y2YwMWVhY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjMxCisgICAgMHgxLjM0MjllNjFhNWQyMGIxNzVkNDVjMmE2NzVhMzg2YmEzcDIsCisgICAgMHgxLjVkYjNkNzQyYzI2NTdwMAorICB9LAorICB7IC8vIEVudHJ5IDYzMgorICAgIC0weDEuMzQyOWU2MWE1ZDIwYjE3NWQ0NWMyYTY3NWEzODZiYTNwMiwKKyAgICAtMHgxLjVkYjNkNzQyYzI2NTdwMAorICB9LAorICB7IC8vIEVudHJ5IDYzMworICAgIDB4MS5lM2EzNzI5YjNlOGE4M2Q0NGE3NmUzNDJkNmIzZmNiZnAyLAorICAgIDB4MS43MDcxNjhiNjgyZTAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzQKKyAgICAtMHgxLmUzYTM3MjliM2U4YTgzZDQ0YTc2ZTM0MmQ2YjNmY2JmcDIsCisgICAgLTB4MS43MDcxNjhiNjgyZTAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzUKKyAgICAweDEuMTFkODcxNDZjMmRhMzk0MDhlODYwODNiZjE0NzFjOGJwNCwKKyAgICAweDEuODMyZWZhMmE0MzVhZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjM2CisgICAgLTB4MS4xMWQ4NzE0NmMyZGEzOTQwOGU4NjA4M2JmMTQ3MWM4YnA0LAorICAgIC0weDEuODMyZWZhMmE0MzVhZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjM3CisgICAgLTB4MS4wZDcxOGNmYzgyMzQ4YWI5NzU0ZjNkNmI1ZTBlYTQ5OXA2LAorICAgIDB4MS45NWVjOGI5ZTAzZDU4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzgKKyAgICAweDEuMGQ3MThjZmM4MjM0OGFiOTc1NGYzZDZiNWUwZWE0OTlwNiwKKyAgICAtMHgxLjk1ZWM4YjllMDNkNThwMAorICB9LAorICB7IC8vIEVudHJ5IDYzOQorICAgIC0weDEuNmE3ZTFmNjQwN2VlNjEzOTdkMDE2ZDY5MWJiNjFkMTdwMywKKyAgICAweDEuYThhYTFkMTFjNDRmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQwCisgICAgMHgxLjZhN2UxZjY0MDdlZTYxMzk3ZDAxNmQ2OTFiYjYxZDE3cDMsCisgICAgLTB4MS5hOGFhMWQxMWM0NGZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDEKKyAgICAweDEuOWYzOWVhNWJiZTQ3NDllOTYyYTgwN2MyZGMxMWM4MjVwMCwKKyAgICAweDEuMDRhZmY2ZDMzMDk0MnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQyCisgICAgLTB4MS45ZjM5ZWE1YmJlNDc0OWU5NjJhODA3YzJkYzExYzgyNXAwLAorICAgIC0weDEuMDRhZmY2ZDMzMDk0MnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQzCisgICAgMHgxLjlmM2M0Yjg0NjlmODUzYjg1MDc0NTU3MTczMjdjMzExcDAsCisgICAgMHgxLjA0YjA5ZTk4ZGNkYjRwMAorICB9LAorICB7IC8vIEVudHJ5IDY0NAorICAgIC0weDEuOWYzYzRiODQ2OWY4NTNiODUwNzQ1NTcxNzMyN2MzMTFwMCwKKyAgICAtMHgxLjA0YjA5ZTk4ZGNkYjRwMAorICB9LAorICB7IC8vIEVudHJ5IDY0NQorICAgIDB4MS45ZjNlYWNiMjI0YzIwODZlZjM5MWIwZGZhZDJmMTAxMHAwLAorICAgIDB4MS4wNGIxNDY1ZTg5MjI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDYKKyAgICAtMHgxLjlmM2VhY2IyMjRjMjA4NmVmMzkxYjBkZmFkMmYxMDEwcDAsCisgICAgLTB4MS4wNGIxNDY1ZTg5MjI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDcKKyAgICAweDEuOWY0MTBkZTRlZWI2OTU5MGNhZWU4NWU4ODZmNDc4YThwMCwKKyAgICAweDEuMDRiMWVlMjQzNTY5OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ4CisgICAgLTB4MS45ZjQxMGRlNGVlYjY5NTkwY2FlZTg1ZTg4NmY0NzhhOHAwLAorICAgIC0weDEuMDRiMWVlMjQzNTY5OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ5CisgICAgMHgxLjlmNDM2ZjFjYzdlODI4Zjc1MjgxOWFmMWUyZjRiNmEycDAsCisgICAgMHgxLjA0YjI5NWU5ZTFiMGFwMAorICB9LAorICB7IC8vIEVudHJ5IDY1MAorICAgIC0weDEuOWY0MzZmMWNjN2U4MjhmNzUyODE5YWYxZTJmNGI2YTJwMCwKKyAgICAtMHgxLjA0YjI5NWU5ZTFiMGFwMAorICB9LAorICB7IC8vIEVudHJ5IDY1MQorICAgIDB4MS45ZjQ1ZDA1OWIwNjhmMGQyMDU0ODVhZDY0ODIyM2U2ZHAwLAorICAgIDB4MS4wNGIzM2RhZjhkZjdjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTIKKyAgICAtMHgxLjlmNDVkMDU5YjA2OGYwZDIwNTQ4NWFkNjQ4MjIzZTZkcDAsCisgICAgLTB4MS4wNGIzM2RhZjhkZjdjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTMKKyAgICAweDEuOWY0ODMxOWJhODRiMWJhNjVmNDUyY2ZlNjVlMDJkMGVwMCwKKyAgICAweDEuMDRiM2U1NzUzYTNlZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjU0CisgICAgLTB4MS45ZjQ4MzE5YmE4NGIxYmE2NWY0NTJjZmU2NWUwMmQwZXAwLAorICAgIC0weDEuMDRiM2U1NzUzYTNlZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjU1CisgICAgMHgxLjlmNGE5MmUyYWZhMGQ4NGZkZjdkZGJhYWQzMDJmMTUwcDAsCisgICAgMHgxLjA0YjQ4ZDNhZTY4NjBwMAorICB9LAorICB7IC8vIEVudHJ5IDY1NgorICAgIC0weDEuOWY0YTkyZTJhZmEwZDg0ZmRmN2RkYmFhZDMwMmYxNTBwMCwKKyAgICAtMHgxLjA0YjQ4ZDNhZTY4NjBwMAorICB9LAorICB7IC8vIEVudHJ5IDY1NworICAgIDB4MS45ZjRjZjQyZWM2N2JhN2FkMGRiMmJlMjQ4YTg3MGJmZXAwLAorICAgIDB4MS4wNGI1MzUwMDkyY2NmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTgKKyAgICAtMHgxLjlmNGNmNDJlYzY3YmE3YWQwZGIyYmUyNDhhODcwYmZlcDAsCisgICAgLTB4MS4wNGI1MzUwMDkyY2NmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTkKKyAgICAtMHgxLnAtMTA3NCwKKyAgICAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjAKKyAgICAweDEucC0xMDc0LAorICAgIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNjYxCisgICAgLTAuMCwKKyAgICAtMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNjYyCisgICAgMHgxLnAtMTA3NCwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDY2MworICAgIC0weDEucC0xMDc0LAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDY2NAorICAgIDB4MS40ZDgyYjY4Y2FjMTllNmQwNjVjNWYxYWE3NjIxYzA4Y3AtMSwKKyAgICAweDEuMjc5YTc0NTkwMzMxYnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY2NQorICAgIC0weDEuNGQ4MmI2OGNhYzE5ZTZkMDY1YzVmMWFhNzYyMWMwOGNwLTEsCisgICAgLTB4MS4yNzlhNzQ1OTAzMzFicC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjY2CisgICAgMHgxLjRkODJiNjhjYWMxOWZkOWE1YjBjOTEyZDkwOTNhYTRhcC0xLAorICAgIDB4MS4yNzlhNzQ1OTAzMzFjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjY3CisgICAgLTB4MS40ZDgyYjY4Y2FjMTlmZDlhNWIwYzkxMmQ5MDkzYWE0YXAtMSwKKyAgICAtMHgxLjI3OWE3NDU5MDMzMWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjgKKyAgICAweDEuNGQ4MmI2OGNhYzFhMTQ2NDUwNTMzMGIwYWJmMzE2YmZwLTEsCisgICAgMHgxLjI3OWE3NDU5MDMzMWRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjkKKyAgICAtMHgxLjRkODJiNjhjYWMxYTE0NjQ1MDUzMzBiMGFiZjMxNmJmcC0xLAorICAgIC0weDEuMjc5YTc0NTkwMzMxZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY3MAorICAgIC0weDEuODk3MTJlZWNhMzJiZTk3ZGJhMmNhM2Y5YjgzNzkxNTRwMiwKKyAgICAweDEuYmI2N2FlODU4NGNhOXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjcxCisgICAgMHgxLjg5NzEyZWVjYTMyYmU5N2RiYTJjYTNmOWI4Mzc5MTU0cDIsCisgICAgLTB4MS5iYjY3YWU4NTg0Y2E5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzIKKyAgICAtMHgxLjg5NzEyZWVjYTMyYjRlNTI4ZDI1NjM1YTQyOTNiZTFkcDIsCisgICAgMHgxLmJiNjdhZTg1ODRjYWFwMAorICB9LAorICB7IC8vIEVudHJ5IDY3MworICAgIDB4MS44OTcxMmVlY2EzMmI0ZTUyOGQyNTYzNWE0MjkzYmUxZHAyLAorICAgIC0weDEuYmI2N2FlODU4NGNhYXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjc0CisgICAgLTB4MS44OTcxMmVlY2EzMmFiMzI3NjAxZTIyYmI0NDJjZGMzN3AyLAorICAgIDB4MS5iYjY3YWU4NTg0Y2FicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzUKKyAgICAweDEuODk3MTJlZWNhMzJhYjMyNzYwMWUyMmJiNDQyY2RjMzdwMiwKKyAgICAtMHgxLmJiNjdhZTg1ODRjYWJwMAorICB9LAorICB7IC8vIEVudHJ5IDY3NgorICAgIDB4MS5kZWY0OWVhYWIzN2EwMGY5MGNiNDQ1NDcxMGU0ZTU0NXAtMiwKKyAgICAweDEuYmZmZmZmZmZmZmZmZnAtMgorICB9LAorICB7IC8vIEVudHJ5IDY3NworICAgIC0weDEuZGVmNDllYWFiMzdhMDBmOTBjYjQ0NTQ3MTBlNGU1NDVwLTIsCisgICAgLTB4MS5iZmZmZmZmZmZmZmZmcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjc4CisgICAgMHgxLmRlZjQ5ZWFhYjM3YTE0NzkyMzFlODk5NTA5ZWNmMjZjcC0yLAorICAgIDB4MS5jcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjc5CisgICAgLTB4MS5kZWY0OWVhYWIzN2ExNDc5MjMxZTg5OTUwOWVjZjI2Y3AtMiwKKyAgICAtMHgxLmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODAKKyAgICAweDEuZGVmNDllYWFiMzdhMjdmOTM5ODhjZGUzMDMzZGY3MmNwLTIsCisgICAgMHgxLmMwMDAwMDAwMDAwMDFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODEKKyAgICAtMHgxLmRlZjQ5ZWFhYjM3YTI3ZjkzOTg4Y2RlMzAzM2RmNzJjcC0yLAorICAgIC0weDEuYzAwMDAwMDAwMDAwMXAtMgorICB9LAorICB7IC8vIEVudHJ5IDY4MgorICAgIDB4MS5hNDZjYjJiZTZhMGIwMmUyZGZmZmM5NWU2ZGNiMjg0MnAtMSwKKyAgICAweDEuNWZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY4MworICAgIC0weDEuYTQ2Y2IyYmU2YTBiMDJlMmRmZmZjOTVlNmRjYjI4NDJwLTEsCisgICAgLTB4MS41ZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjg0CisgICAgMHgxLmE0NmNiMmJlNmEwYjFkYWNiMzYyNjljNDFhNGE5MTQ3cC0xLAorICAgIDB4MS42cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjg1CisgICAgLTB4MS5hNDZjYjJiZTZhMGIxZGFjYjM2MjY5YzQxYTRhOTE0N3AtMSwKKyAgICAtMHgxLjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODYKKyAgICAweDEuYTQ2Y2IyYmU2YTBiMzg3Njg2YzUwYTI5YzgyOWVlNDJwLTEsCisgICAgMHgxLjYwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODcKKyAgICAtMHgxLmE0NmNiMmJlNmEwYjM4NzY4NmM1MGEyOWM4MjllZTQycC0xLAorICAgIC0weDEuNjAwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDY4OAorICAgIDB4MS4zZDZkYzk1NmVhYzc5YTg1YjQ3NDU2ZmEwYzk0NmIxM3AxLAorICAgIDB4MS4yZmZmZmZmZmZmZmZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODkKKyAgICAtMHgxLjNkNmRjOTU2ZWFjNzlhODViNDc0NTZmYTBjOTQ2YjEzcDEsCisgICAgLTB4MS4yZmZmZmZmZmZmZmZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTAKKyAgICAweDEuM2Q2ZGM5NTZlYWM3ZDNiOGQ2ZWIyMTc0MTEwZDFkZGNwMSwKKyAgICAweDEuM3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjkxCisgICAgLTB4MS4zZDZkYzk1NmVhYzdkM2I4ZDZlYjIxNzQxMTBkMWRkY3AxLAorICAgIC0weDEuM3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjkyCisgICAgMHgxLjNkNmRjOTU2ZWFjODBjZWJmOTYxZWJlZTI3NDEwN3AxLAorICAgIDB4MS4zMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTMKKyAgICAtMHgxLjNkNmRjOTU2ZWFjODBjZWJmOTYxZWJlZTI3NDEwN3AxLAorICAgIC0weDEuMzAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjk0CisgICAgLTB4MS5iMmQ4OWE5MzgyOTUzNmNjOTI4M2NmYzdlMDFmZTJhM3AtMSwKKyAgICAweDEuMzdmZmZmZmZmZmZmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjk1CisgICAgMHgxLmIyZDg5YTkzODI5NTM2Y2M5MjgzY2ZjN2UwMWZlMmEzcC0xLAorICAgIC0weDEuMzdmZmZmZmZmZmZmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjk2CisgICAgLTB4MS5iMmQ4OWE5MzgyOTRjOGEyNjA0ZGI5ZjdhYTU2YTBmOHAtMSwKKyAgICAweDEuMzgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTcKKyAgICAweDEuYjJkODlhOTM4Mjk0YzhhMjYwNGRiOWY3YWE1NmEwZjhwLTEsCisgICAgLTB4MS4zODBwMQorICB9LAorICB7IC8vIEVudHJ5IDY5OAorICAgIC0weDEuYjJkODlhOTM4Mjk0NWE3ODJlMTdhNDI3OGJmMTc3MzZwLTEsCisgICAgMHgxLjM4MDAwMDAwMDAwMDFwMQorICB9LAorICB7IC8vIEVudHJ5IDY5OQorICAgIDB4MS5iMmQ4OWE5MzgyOTQ1YTc4MmUxN2E0Mjc4YmYxNzczNnAtMSwKKyAgICAtMHgxLjM4MDAwMDAwMDAwMDFwMQorICB9LAorICB7IC8vIEVudHJ5IDcwMAorICAgIDB4MS4wNmY4ZDAxNGJmMDgzY2QzNjY1MGU5NDY2ZGMwODZkY3AtNCwKKyAgICAweDEuMDY5YzhiNDZiMzc5MnAtNAorICB9LAorICB7IC8vIEVudHJ5IDcwMQorICAgIC0weDEuMDZmOGQwMTRiZjA4M2NkMzY2NTBlOTQ2NmRjMDg2ZGNwLTQsCisgICAgLTB4MS4wNjljOGI0NmIzNzkycC00CisgIH0sCisgIHsgLy8gRW50cnkgNzAyCisgICAgMHgxLjA4MGY3M2IwNzA1MWUzN2IyM2RhMzMzN2MwYWVkMzUzcC0zLAorICAgIDB4MS4wNjljOGI0NmIzNzkycC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzAzCisgICAgLTB4MS4wODBmNzNiMDcwNTFlMzdiMjNkYTMzMzdjMGFlZDM1M3AtMywKKyAgICAtMHgxLjA2OWM4YjQ2YjM3OTJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDQKKyAgICAweDEuOGVkOTE0MmZjOTE4ODg4ZTI5NGQzZmY1ZDAxNDk0MTVwLTMsCisgICAgMHgxLjg5ZWFkMGVhMGQzNWJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDUKKyAgICAtMHgxLjhlZDkxNDJmYzkxODg4OGUyOTRkM2ZmNWQwMTQ5NDE1cC0zLAorICAgIC0weDEuODllYWQwZWEwZDM1YnAtMworICB9LAorICB7IC8vIEVudHJ5IDcwNgorICAgIDB4MS4wYzg2NDA4M2QxZTdjYTU1NTFiY2UyNDk3Mjg3ODEyN3AtMiwKKyAgICAweDEuMDY5YzhiNDZiMzc5MnAtMgorICB9LAorICB7IC8vIEVudHJ5IDcwNworICAgIC0weDEuMGM4NjQwODNkMWU3Y2E1NTUxYmNlMjQ5NzI4NzgxMjdwLTIsCisgICAgLTB4MS4wNjljOGI0NmIzNzkycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzA4CisgICAgMHgxLjUzZmRjZGZkMzdmMDQzNzVkOWZmYjZhZWJhZmU3ZGY4cC0yLAorICAgIDB4MS40ODQzYWUxODYwNTc2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzA5CisgICAgLTB4MS41M2ZkY2RmZDM3ZjA0Mzc1ZDlmZmI2YWViYWZlN2RmOHAtMiwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1NzZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTAKKyAgICAweDEuOWU5MjU3ZTZiNjJhMGE4ZGU1NjUwYzgzN2Y3ZjYyMjdwLTIsCisgICAgMHgxLjg5ZWFkMGVhMGQzNWFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTEKKyAgICAtMHgxLjllOTI1N2U2YjYyYTBhOGRlNTY1MGM4MzdmN2Y2MjI3cC0yLAorICAgIC0weDEuODllYWQwZWEwZDM1YXAtMgorICB9LAorICB7IC8vIEVudHJ5IDcxMgorICAgIDB4MS5lZDIxZTU5OTcyYjA3YzcwNTNmNGYzNWRkNTUwMjQ5M3AtMiwKKyAgICAweDEuY2I5MWYzYmJiYTEzZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDcxMworICAgIC0weDEuZWQyMWU1OTk3MmIwN2M3MDUzZjRmMzVkZDU1MDI0OTNwLTIsCisgICAgLTB4MS5jYjkxZjNiYmJhMTNlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzE0CisgICAgMHgxLjIwNWE2MDA5ZDVlM2RkZTI1ZDZkZWI3ZDUyMWZmMTQwcC0xLAorICAgIDB4MS4wNjljOGI0NmIzNzkxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzE1CisgICAgLTB4MS4yMDVhNjAwOWQ1ZTNkZGUyNWQ2ZGViN2Q1MjFmZjE0MHAtMSwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3OTFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTYKKyAgICAweDEuNGQ0NjZhY2NhZDQ4ZGQ5NThhYjE2OGY1Y2ZjNmM5OWNwLTEsCisgICAgMHgxLjI3NzAxY2FmODllODNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTcKKyAgICAtMHgxLjRkNDY2YWNjYWQ0OGRkOTU4YWIxNjhmNWNmYzZjOTljcC0xLAorICAgIC0weDEuMjc3MDFjYWY4OWU4M3AtMQorICB9LAorICB7IC8vIEVudHJ5IDcxOAorICAgIDB4MS43ZTFkOTM2ZjRkNjE1MmZiNzQ4MDk1OTU3MTdmYTA2ZHAtMSwKKyAgICAweDEuNDg0M2FlMTg2MDU3NXAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxOQorICAgIC0weDEuN2UxZDkzNmY0ZDYxNTJmYjc0ODA5NTk1NzE3ZmEwNmRwLTEsCisgICAgLTB4MS40ODQzYWUxODYwNTc1cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzIwCisgICAgMHgxLmIzZGYzODZmMTgyMjdlYmNlZTkwNWZkYzUxY2RjYmUycC0xLAorICAgIDB4MS42OTE3M2Y4MTM2YzY3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzIxCisgICAgLTB4MS5iM2RmMzg2ZjE4MjI3ZWJjZWU5MDVmZGM1MWNkY2JlMnAtMSwKKyAgICAtMHgxLjY5MTczZjgxMzZjNjdwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjIKKyAgICAweDEuZWZkODI3NDJkNzc4YzE4YThjOTY5YmUwY2YwOTAyYjNwLTEsCisgICAgMHgxLjg5ZWFkMGVhMGQzNTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjMKKyAgICAtMHgxLmVmZDgyNzQyZDc3OGMxOGE4Yzk2OWJlMGNmMDkwMmIzcC0xLAorICAgIC0weDEuODllYWQwZWEwZDM1OXAtMQorICB9LAorICB7IC8vIEVudHJ5IDcyNAorICAgIDB4MS4xOWUyNmI1ZWNkNWMwNDBhMWQ4MGMxNTgzZjc4ZjdkN3AwLAorICAgIDB4MS5hYWJlNjI1MmUzYTRicC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzI1CisgICAgLTB4MS4xOWUyNmI1ZWNkNWMwNDBhMWQ4MGMxNTgzZjc4ZjdkN3AwLAorICAgIC0weDEuYWFiZTYyNTJlM2E0YnAtMQorICB9LAorICB7IC8vIEVudHJ5IDcyNgorICAgIDB4MS40MTAzOGI3MGJlMGZhMTQ3OGY5OGEyZTlmMjY2NTUwYXAwLAorICAgIDB4MS5jYjkxZjNiYmJhMTNkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzI3CisgICAgLTB4MS40MTAzOGI3MGJlMGZhMTQ3OGY5OGEyZTlmMjY2NTUwYXAwLAorICAgIC0weDEuY2I5MWYzYmJiYTEzZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcyOAorICAgIDB4MS42ZWZlYzhjMWU0OTNiNTE3ZWZlNWViOTI0NjRmZGY0MnAwLAorICAgIDB4MS5lYzY1ODUyNDkwODJmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzI5CisgICAgLTB4MS42ZWZlYzhjMWU0OTNiNTE3ZWZlNWViOTI0NjRmZGY0MnAwLAorICAgIC0weDEuZWM2NTg1MjQ5MDgyZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDczMAorICAgIDB4MS5hNjRjN2M5ZDY1MzQ2MmQ4ZGVkM2U2NThmZTRlZmJjYnAwLAorICAgIDB4MS4wNjljOGI0NmIzNzkxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzEKKyAgICAtMHgxLmE2NGM3YzlkNjUzNDYyZDhkZWQzZTY1OGZlNGVmYmNicDAsCisgICAgLTB4MS4wNjljOGI0NmIzNzkxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzIKKyAgICAweDEuZWFiNDNlMGU1ZTg3YzI2ZmQ0MzJlMDYzMDFlMTllMTVwMCwKKyAgICAweDEuMTcwNjUzZmIxZWIwYXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzMzCisgICAgLTB4MS5lYWI0M2UwZTVlODdjMjZmZDQzMmUwNjMwMWUxOWUxNXAwLAorICAgIC0weDEuMTcwNjUzZmIxZWIwYXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzM0CisgICAgMHgxLjIxMjc3Yjk3YzAxMzc2ZTM2MTk4ODI1MGI1NjM2NGNmcDEsCisgICAgMHgxLjI3NzAxY2FmODllODNwMAorICB9LAorICB7IC8vIEVudHJ5IDczNQorICAgIC0weDEuMjEyNzdiOTdjMDEzNzZlMzYxOTg4MjUwYjU2MzY0Y2ZwMSwKKyAgICAtMHgxLjI3NzAxY2FmODllODNwMAorICB9LAorICB7IC8vIEVudHJ5IDczNgorICAgIDB4MS41YmQxM2RkYTA3N2NjZTI0OWRiMjc5NGQ2OTQwNzUwNHAxLAorICAgIDB4MS4zN2Q5ZTU2M2Y1MWZjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzcKKyAgICAtMHgxLjViZDEzZGRhMDc3Y2NlMjQ5ZGIyNzk0ZDY5NDA3NTA0cDEsCisgICAgLTB4MS4zN2Q5ZTU2M2Y1MWZjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzgKKyAgICAweDEuYWY0NjQzZTkzNzFmODhlNzhjMjRkODNiZDZiOGUyM2VwMSwKKyAgICAweDEuNDg0M2FlMTg2MDU3NXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzM5CisgICAgLTB4MS5hZjQ2NDNlOTM3MWY4OGU3OGMyNGQ4M2JkNmI4ZTIzZXAxLAorICAgIC0weDEuNDg0M2FlMTg2MDU3NXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzQwCisgICAgMHgxLjE4NjZmZTg0NWU3NTlkMTRkYTQ3OGM2Y2Y2ZjJiZTY1cDIsCisgICAgMHgxLjU4YWQ3NmNjY2I4ZWVwMAorICB9LAorICB7IC8vIEVudHJ5IDc0MQorICAgIC0weDEuMTg2NmZlODQ1ZTc1OWQxNGRhNDc4YzZjZjZmMmJlNjVwMiwKKyAgICAtMHgxLjU4YWQ3NmNjY2I4ZWVwMAorICB9LAorICB7IC8vIEVudHJ5IDc0MgorICAgIDB4MS44YmRjZDU0YmQ1OTgwYjNhODBjZWZjOTE0YzQ4MTQ3NXAyLAorICAgIDB4MS42OTE3M2Y4MTM2YzY3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDMKKyAgICAtMHgxLjhiZGNkNTRiZDU5ODBiM2E4MGNlZmM5MTRjNDgxNDc1cDIsCisgICAgLTB4MS42OTE3M2Y4MTM2YzY3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDQKKyAgICAweDEuNGJiNmE2NGUwNjI1Yjk3NGNkZWQ2MTUwNTZmZmQ2MWNwMywKKyAgICAweDEuNzk4MTA4MzVhMWZlMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzQ1CisgICAgLTB4MS40YmI2YTY0ZTA2MjViOTc0Y2RlZDYxNTA1NmZmZDYxY3AzLAorICAgIC0weDEuNzk4MTA4MzVhMWZlMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzQ2CisgICAgMHgxLmYyZjA1Y2ZiNjU2YTM5ZjZmMmE5MGY3OTExYjI0MDUxcDQsCisgICAgMHgxLjg5ZWFkMGVhMGQzNTlwMAorICB9LAorICB7IC8vIEVudHJ5IDc0NworICAgIC0weDEuZjJmMDVjZmI2NTZhMzlmNmYyYTkwZjc5MTFiMjQwNTFwNCwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzNTlwMAorICB9LAorICB7IC8vIEVudHJ5IDc0OAorICAgIC0weDEuZjJmMDVjZmI2NTdmNTVmMmJjNmQyMDQzNzdhNjg1NDNwNCwKKyAgICAweDEuOWE1NDk5OWU3ODZkMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzQ5CisgICAgMHgxLmYyZjA1Y2ZiNjU3ZjU1ZjJiYzZkMjA0Mzc3YTY4NTQzcDQsCisgICAgLTB4MS45YTU0OTk5ZTc4NmQycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTAKKyAgICAtMHgxLjRiYjZhNjRlMDYyYTZkYTM1ODcwY2ZiMzM1OTVmYmU2cDMsCisgICAgMHgxLmFhYmU2MjUyZTNhNGJwMAorICB9LAorICB7IC8vIEVudHJ5IDc1MQorICAgIDB4MS40YmI2YTY0ZTA2MmE2ZGEzNTg3MGNmYjMzNTk1ZmJlNnAzLAorICAgIC0weDEuYWFiZTYyNTJlM2E0YnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzUyCisgICAgLTB4MS44YmRjZDU0YmQ1OWI3MzAyOGU1ZjI3NjQ5Y2E2N2NiYXAyLAorICAgIDB4MS5iYjI4MmIwNzRlZGM0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTMKKyAgICAweDEuOGJkY2Q1NGJkNTliNzMwMjhlNWYyNzY0OWNhNjdjYmFwMiwKKyAgICAtMHgxLmJiMjgyYjA3NGVkYzRwMAorICB9LAorICB7IC8vIEVudHJ5IDc1NAorICAgIC0weDEuMTg2NmZlODQ1ZTc3NWQ4YzhmOGJmOTE2NTY0N2Y2Y2JwMiwKKyAgICAweDEuY2I5MWYzYmJiYTEzZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzU1CisgICAgMHgxLjE4NjZmZTg0NWU3NzVkOGM4ZjhiZjkxNjU2NDdmNmNicDIsCisgICAgLTB4MS5jYjkxZjNiYmJhMTNkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTYKKyAgICAtMHgxLmFmNDY0M2U5MzcyMWFkODA5NWRkMjdmMDgyN2UxM2UwcDEsCisgICAgMHgxLmRiZmJiYzcwMjU0YjZwMAorICB9LAorICB7IC8vIEVudHJ5IDc1NworICAgIDB4MS5hZjQ2NDNlOTM3MjFhZDgwOTVkZDI3ZjA4MjdlMTNlMHAxLAorICAgIC0weDEuZGJmYmJjNzAyNTRiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzU4CisgICAgLTB4MS41YmQxM2RkYTA3N2U0MjdkMGM5ZGM2YzBlNWQzYjFiNXAxLAorICAgIDB4MS5lYzY1ODUyNDkwODJmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTkKKyAgICAweDEuNWJkMTNkZGEwNzdlNDI3ZDBjOWRjNmMwZTVkM2IxYjVwMSwKKyAgICAtMHgxLmVjNjU4NTI0OTA4MmZwMAorICB9LAorICB7IC8vIEVudHJ5IDc2MAorICAgIC0weDEuMjEyNzdiOTdjMDE0ODVmMTdiYWNkYjgwNDM3NWViY2RwMSwKKyAgICAweDEuZmNjZjRkZDhmYmJhOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzYxCisgICAgMHgxLjIxMjc3Yjk3YzAxNDg1ZjE3YmFjZGI4MDQzNzVlYmNkcDEsCisgICAgLTB4MS5mY2NmNGRkOGZiYmE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjIKKyAgICAtMHgxLmVhYjQzZTBlNWU4OTE2ZDRjMDgzNDlhYmU5ZTJhYmQzcDAsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTFwMQorICB9LAorICB7IC8vIEVudHJ5IDc2MworICAgIDB4MS5lYWI0M2UwZTVlODkxNmQ0YzA4MzQ5YWJlOWUyYWJkM3AwLAorICAgIC0weDEuMDY5YzhiNDZiMzc5MXAxCisgIH0sCisgIHsgLy8gRW50cnkgNzY0CisgICAgLTB4MS5hNjRjN2M5ZDY1MzUzNjRkNjA1YmI5ZTUzMTUwNzJmZnAwLAorICAgIDB4MS4wZWQxNmZhMGU5MTRlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjUKKyAgICAweDEuYTY0YzdjOWQ2NTM1MzY0ZDYwNWJiOWU1MzE1MDcyZmZwMCwKKyAgICAtMHgxLjBlZDE2ZmEwZTkxNGVwMQorICB9LAorICB7IC8vIEVudHJ5IDc2NgorICAgIC0weDEuNmVmZWM4YzFlNDk0NGE0MjU1NDEyMTkzNjRhMTUwNzhwMCwKKyAgICAweDEuMTcwNjUzZmIxZWIwYnAxCisgIH0sCisgIHsgLy8gRW50cnkgNzY3CisgICAgMHgxLjZlZmVjOGMxZTQ5NDRhNDI1NTQxMjE5MzY0YTE1MDc4cDAsCisgICAgLTB4MS4xNzA2NTNmYjFlYjBicDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjgKKyAgICAtMHgxLjQxMDM4YjcwYmUwZmY1YjdjNGQ4ZjA2YjBkNGNmNTI1cDAsCisgICAgMHgxLjFmM2IzODU1NTQ0YzhwMQorICB9LAorICB7IC8vIEVudHJ5IDc2OQorICAgIDB4MS40MTAzOGI3MGJlMGZmNWI3YzRkOGYwNmIwZDRjZjUyNXAwLAorICAgIC0weDEuMWYzYjM4NTU1NDRjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzcwCisgICAgLTB4MS4xOWUyNmI1ZWNkNWMyOTQzNDhiYTE3ZmVjNTQ1NDc5MnAwLAorICAgIDB4MS4yNzcwMWNhZjg5ZTg1cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzEKKyAgICAweDEuMTllMjZiNWVjZDVjMjk0MzQ4YmExN2ZlYzU0NTQ3OTJwMCwKKyAgICAtMHgxLjI3NzAxY2FmODllODVwMQorICB9LAorICB7IC8vIEVudHJ5IDc3MgorICAgIC0weDEuZWZkODI3NDJkNzc4YzRiY2EwN2UxZTg2Y2JjNjA0YjBwLTEsCisgICAgMHgxLjJmYTUwMTA5YmY4NDJwMQorICB9LAorICB7IC8vIEVudHJ5IDc3MworICAgIDB4MS5lZmQ4Mjc0MmQ3NzhjNGJjYTA3ZTFlODZjYmM2MDRiMHAtMSwKKyAgICAtMHgxLjJmYTUwMTA5YmY4NDJwMQorICB9LAorICB7IC8vIEVudHJ5IDc3NAorICAgIC0weDEuYjNkZjM4NmYxODIyNGE2NDAzZTU1YzE2YjM2ZWYxN2ZwLTEsCisgICAgMHgxLjM3ZDllNTYzZjUxZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDc3NQorICAgIDB4MS5iM2RmMzg2ZjE4MjI0YTY0MDNlNTVjMTZiMzZlZjE3ZnAtMSwKKyAgICAtMHgxLjM3ZDllNTYzZjUxZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDc3NgorICAgIC0weDEuN2UxZDkzNmY0ZDYwZjFlNmY4OGI0YTI0ZGY5YzY1ZjRwLTEsCisgICAgMHgxLjQwMGVjOWJlMmFiYmNwMQorICB9LAorICB7IC8vIEVudHJ5IDc3NworICAgIDB4MS43ZTFkOTM2ZjRkNjBmMWU2Zjg4YjRhMjRkZjljNjVmNHAtMSwKKyAgICAtMHgxLjQwMGVjOWJlMmFiYmNwMQorICB9LAorICB7IC8vIEVudHJ5IDc3OAorICAgIC0weDEuNGQ0NjZhY2NhZDQ4NTc0MTg4ODM1MTMwZTY4ZTliYWRwLTEsCisgICAgMHgxLjQ4NDNhZTE4NjA1NzlwMQorICB9LAorICB7IC8vIEVudHJ5IDc3OQorICAgIDB4MS40ZDQ2NmFjY2FkNDg1NzQxODg4MzUxMzBlNjhlOWJhZHAtMSwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1NzlwMQorICB9LAorICB7IC8vIEVudHJ5IDc4MAorICAgIC0weDEuMjA1YTYwMDlkNWUzMzc3NGZhOThmOWY2MTZhY2M4MGZwLTEsCisgICAgMHgxLjUwNzg5MjcyOTVmMzZwMQorICB9LAorICB7IC8vIEVudHJ5IDc4MQorICAgIDB4MS4yMDVhNjAwOWQ1ZTMzNzc0ZmE5OGY5ZjYxNmFjYzgwZnAtMSwKKyAgICAtMHgxLjUwNzg5MjcyOTVmMzZwMQorICB9LAorICB7IC8vIEVudHJ5IDc4MgorICAgIC0weDEuZWQyMWU1OTk3MmFlZjY0YTA2ZTU1M2YxOGQ2NDYwOTNwLTIsCisgICAgMHgxLjU4YWQ3NmNjY2I4ZjNwMQorICB9LAorICB7IC8vIEVudHJ5IDc4MworICAgIDB4MS5lZDIxZTU5OTcyYWVmNjRhMDZlNTUzZjE4ZDY0NjA5M3AtMiwKKyAgICAtMHgxLjU4YWQ3NmNjY2I4ZjNwMQorICB9LAorICB7IC8vIEVudHJ5IDc4NAorICAgIC0weDEuOWU5MjU3ZTZiNjI4NGY3M2NkMWUyZWFlMzIyMGYzMTNwLTIsCisgICAgMHgxLjYwZTI1YjI3MDEyYjBwMQorICB9LAorICB7IC8vIEVudHJ5IDc4NQorICAgIDB4MS45ZTkyNTdlNmI2Mjg0ZjczY2QxZTJlYWUzMjIwZjMxM3AtMiwKKyAgICAtMHgxLjYwZTI1YjI3MDEyYjBwMQorICB9LAorICB7IC8vIEVudHJ5IDc4NgorICAgIC0weDEuNTNmZGNkZmQzN2VlNTViYzFjZDE2MDRiNmFiMTNiNWZwLTIsCisgICAgMHgxLjY5MTczZjgxMzZjNmRwMQorICB9LAorICB7IC8vIEVudHJ5IDc4NworICAgIDB4MS41M2ZkY2RmZDM3ZWU1NWJjMWNkMTYwNGI2YWIxM2I1ZnAtMiwKKyAgICAtMHgxLjY5MTczZjgxMzZjNmRwMQorICB9LAorICB7IC8vIEVudHJ5IDc4OAorICAgIC0weDEuMGM4NjQwODNkMWU1YWFhNjgxNWE4NWUyNWM2NjJlOTdwLTIsCisgICAgMHgxLjcxNGMyM2RiNmM2MmFwMQorICB9LAorICB7IC8vIEVudHJ5IDc4OQorICAgIDB4MS4wYzg2NDA4M2QxZTVhYWE2ODE1YTg1ZTI1YzY2MmU5N3AtMiwKKyAgICAtMHgxLjcxNGMyM2RiNmM2MmFwMQorICB9LAorICB7IC8vIEVudHJ5IDc5MAorICAgIC0weDEuOGVkOTE0MmZjOTEzZjQ1MGRjY2RiZGQyN2VkMTFhNDBwLTMsCisgICAgMHgxLjc5ODEwODM1YTFmZTdwMQorICB9LAorICB7IC8vIEVudHJ5IDc5MQorICAgIDB4MS44ZWQ5MTQyZmM5MTNmNDUwZGNjZGJkZDI3ZWQxMWE0MHAtMywKKyAgICAtMHgxLjc5ODEwODM1YTFmZTdwMQorICB9LAorICB7IC8vIEVudHJ5IDc5MgorICAgIC0weDEuMDgwZjczYjA3MDRjZjU3MDgxOGE2NWQxYTEyZDViZTFwLTMsCisgICAgMHgxLjgxYjVlYzhmZDc5YTRwMQorICB9LAorICB7IC8vIEVudHJ5IDc5MworICAgIDB4MS4wODBmNzNiMDcwNGNmNTcwODE4YTY1ZDFhMTJkNWJlMXAtMywKKyAgICAtMHgxLjgxYjVlYzhmZDc5YTRwMQorICB9LAorICB7IC8vIEVudHJ5IDc5NAorICAgIC0weDEuMDZmOGQwMTRiZjA5YWI4NWYyYTE5ZDgwZGE1YTJjMGJwLTQsCisgICAgMHgxLjg5ZWFkMGVhMGQzNWJwMQorICB9LAorICB7IC8vIEVudHJ5IDc5NQorICAgIDB4MS4wNmY4ZDAxNGJmMDlhYjg1ZjJhMTlkODBkYTVhMmMwYnAtNCwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzNWJwMQorICB9LAorICB7IC8vIEVudHJ5IDc5NgorICAgIDB4MS4wYzg2NDA4M2QxZTdmMzk1NWIxMjA3MWUwNjQ0NDE4YnAtMiwKKyAgICAtMHgxLjgxYjVlYzhmZDc5OWZwMgorICB9LAorICB7IC8vIEVudHJ5IDc5NworICAgIC0weDEuMGM4NjQwODNkMWU3ZjM5NTViMTIwNzFlMDY0NDQxOGJwLTIsCisgICAgMHgxLjgxYjVlYzhmZDc5OWZwMgorICB9LAorICB7IC8vIEVudHJ5IDc5OAorICAgIDB4MS4yMDVhNjAwOWQ1ZTNmNzRkYTNhMzcyYWMxNTcyMWVmNnAtMSwKKyAgICAtMHgxLjcxNGMyM2RiNmM2MjZwMgorICB9LAorICB7IC8vIEVudHJ5IDc5OQorICAgIC0weDEuMjA1YTYwMDlkNWUzZjc0ZGEzYTM3MmFjMTU3MjFlZjZwLTEsCisgICAgMHgxLjcxNGMyM2RiNmM2MjZwMgorICB9LAorICB7IC8vIEVudHJ5IDgwMAorICAgIDB4MS5lZmQ4Mjc0MmQ3NzhlNmYwNGFkZWZjM2QyMWY4YmU5NnAtMSwKKyAgICAtMHgxLjYwZTI1YjI3MDEyYWRwMgorICB9LAorICB7IC8vIEVudHJ5IDgwMQorICAgIC0weDEuZWZkODI3NDJkNzc4ZTZmMDRhZGVmYzNkMjFmOGJlOTZwLTEsCisgICAgMHgxLjYwZTI1YjI3MDEyYWRwMgorICB9LAorICB7IC8vIEVudHJ5IDgwMgorICAgIDB4MS5hNjRjN2M5ZDY1MzQ2OGZiYzUyNjBkY2E1MDFkZGI4MXAwLAorICAgIC0weDEuNTA3ODkyNzI5NWYzNHAyCisgIH0sCisgIHsgLy8gRW50cnkgODAzCisgICAgLTB4MS5hNjRjN2M5ZDY1MzQ2OGZiYzUyNjBkY2E1MDFkZGI4MXAwLAorICAgIDB4MS41MDc4OTI3Mjk1ZjM0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDQKKyAgICAweDEuYWY0NjQzZTkzNzFmOTMxNmQzMjU0Yjg2MTllZGE0ODRwMSwKKyAgICAtMHgxLjQwMGVjOWJlMmFiYmJwMgorICB9LAorICB7IC8vIEVudHJ5IDgwNQorICAgIC0weDEuYWY0NjQzZTkzNzFmOTMxNmQzMjU0Yjg2MTllZGE0ODRwMSwKKyAgICAweDEuNDAwZWM5YmUyYWJiYnAyCisgIH0sCisgIHsgLy8gRW50cnkgODA2CisgICAgMHgxLmYyZjA1Y2ZiNjU2YTllNGEwODViMDI3ZDE4NjAzMjMwcDQsCisgICAgLTB4MS4yZmE1MDEwOWJmODQycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDcKKyAgICAtMHgxLmYyZjA1Y2ZiNjU2YTllNGEwODViMDI3ZDE4NjAzMjMwcDQsCisgICAgMHgxLjJmYTUwMTA5YmY4NDJwMgorICB9LAorICB7IC8vIEVudHJ5IDgwOAorICAgIC0weDEuMTg2NmZlODQ1ZTc3NTUzOTJhMGFkZmY1NmE2ODhlYWFwMiwKKyAgICAtMHgxLjFmM2IzODU1NTQ0YzlwMgorICB9LAorICB7IC8vIEVudHJ5IDgwOQorICAgIDB4MS4xODY2ZmU4NDVlNzc1NTM5MmEwYWRmZjU2YTY4OGVhYXAyLAorICAgIDB4MS4xZjNiMzg1NTU0NGM5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTAKKyAgICAtMHgxLmVhYjQzZTBlNWU4OTU5ZThmNWFjNmM0ZjlkOWE4MzNicDAsCisgICAgLTB4MS4wZWQxNmZhMGU5MTUwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTEKKyAgICAweDEuZWFiNDNlMGU1ZTg5NTllOGY1YWM2YzRmOWQ5YTgzM2JwMCwKKyAgICAweDEuMGVkMTZmYTBlOTE1MHAyCisgIH0sCisgIHsgLy8gRW50cnkgODEyCisgICAgLTB4MS4xOWUyNmI1ZWNkNWNkNjljMzBjM2RjNWQ5ZmZkZTk4NnAwLAorICAgIC0weDEuZmNjZjRkZDhmYmJhZXAxCisgIH0sCisgIHsgLy8gRW50cnkgODEzCisgICAgMHgxLjE5ZTI2YjVlY2Q1Y2Q2OWMzMGMzZGM1ZDlmZmRlOTg2cDAsCisgICAgMHgxLmZjY2Y0ZGQ4ZmJiYWVwMQorICB9LAorICB7IC8vIEVudHJ5IDgxNAorICAgIC0weDEuNGQ0NjZhY2NhZDQ5ZWM5NjkzNWNhYTJhMzVlNDM5ZjBwLTEsCisgICAgLTB4MS5kYmZiYmM3MDI1NGJjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTUKKyAgICAweDEuNGQ0NjZhY2NhZDQ5ZWM5NjkzNWNhYTJhMzVlNDM5ZjBwLTEsCisgICAgMHgxLmRiZmJiYzcwMjU0YmNwMQorICB9LAorICB7IC8vIEVudHJ5IDgxNgorICAgIC0weDEuNTNmZGNkZmQzN2YxZWEyMTZlODE1NzU4ZWQwMmE1NTdwLTIsCisgICAgLTB4MS5iYjI4MmIwNzRlZGNhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTcKKyAgICAweDEuNTNmZGNkZmQzN2YxZWEyMTZlODE1NzU4ZWQwMmE1NTdwLTIsCisgICAgMHgxLmJiMjgyYjA3NGVkY2FwMQorICB9LAorICB7IC8vIEVudHJ5IDgxOAorICAgIC0weDEuMDZmOGQwMTRiZjBlOTY0ZTYzNGYzN2JjZGJmNjQ0OTFwLTQsCisgICAgLTB4MS45YTU0OTk5ZTc4NmQ4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTkKKyAgICAweDEuMDZmOGQwMTRiZjBlOTY0ZTYzNGYzN2JjZGJmNjQ0OTFwLTQsCisgICAgMHgxLjlhNTQ5OTllNzg2ZDhwMQorICB9LAorICB7IC8vIEVudHJ5IDgyMAorICAgIDB4MS44ZWQ5MTQyZmM5MTRmZTA2N2I5OTFkMTFkNzA4NTliOHAtMywKKyAgICAtMHgxLjc5ODEwODM1YTFmZTZwMQorICB9LAorICB7IC8vIEVudHJ5IDgyMQorICAgIC0weDEuOGVkOTE0MmZjOTE0ZmUwNjdiOTkxZDExZDcwODU5YjhwLTMsCisgICAgMHgxLjc5ODEwODM1YTFmZTZwMQorICB9LAorICB7IC8vIEVudHJ5IDgyMgorICAgIDB4MS5lZDIxZTU5OTcyYWU1ODlhYWE0ZWUzZDgwYzNiN2RlZnAtMiwKKyAgICAtMHgxLjU4YWQ3NmNjY2I4ZjRwMQorICB9LAorICB7IC8vIEVudHJ5IDgyMworICAgIC0weDEuZWQyMWU1OTk3MmFlNTg5YWFhNGVlM2Q4MGMzYjdkZWZwLTIsCisgICAgMHgxLjU4YWQ3NmNjY2I4ZjRwMQorICB9LAorICB7IC8vIEVudHJ5IDgyNAorICAgIDB4MS5iM2RmMzg2ZjE4MjBmZjNkZjI5MGYwMzZkYjQ2ZjEzYnAtMSwKKyAgICAtMHgxLjM3ZDllNTYzZjUyMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDgyNQorICAgIC0weDEuYjNkZjM4NmYxODIwZmYzZGYyOTBmMDM2ZGI0NmYxM2JwLTEsCisgICAgMHgxLjM3ZDllNTYzZjUyMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDgyNgorICAgIDB4MS42ZWZlYzhjMWU0OTI2MTZmZTJmZWMwYjc2NGZhNmViNHAwLAorICAgIC0weDEuMTcwNjUzZmIxZWIxMHAxCisgIH0sCisgIHsgLy8gRW50cnkgODI3CisgICAgLTB4MS42ZWZlYzhjMWU0OTI2MTZmZTJmZWMwYjc2NGZhNmViNHAwLAorICAgIDB4MS4xNzA2NTNmYjFlYjEwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjgKKyAgICAweDEuNWJkMTNkZGEwNzdhZGE5MTkyN2FiNzNjZWRhYTgyOGRwMSwKKyAgICAtMHgxLmVjNjU4NTI0OTA4M2NwMAorICB9LAorICB7IC8vIEVudHJ5IDgyOQorICAgIC0weDEuNWJkMTNkZGEwNzdhZGE5MTkyN2FiNzNjZWRhYTgyOGRwMSwKKyAgICAweDEuZWM2NTg1MjQ5MDgzY3AwCisgIH0sCisgIHsgLy8gRW50cnkgODMwCisgICAgMHgxLjRiYjZhNjRlMDYxZjY5Y2Y3NDA5OTMxMzgzY2M4MGExcDMsCisgICAgLTB4MS5hYWJlNjI1MmUzYTU4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzEKKyAgICAtMHgxLjRiYjZhNjRlMDYxZjY5Y2Y3NDA5OTMxMzgzY2M4MGExcDMsCisgICAgMHgxLmFhYmU2MjUyZTNhNThwMAorICB9LAorICB7IC8vIEVudHJ5IDgzMgorICAgIC0weDEuOGJkY2Q1NGJkNWEwMDRhY2Y5MjJjNDlhOGQ1ZTI4YTJwMiwKKyAgICAtMHgxLjY5MTczZjgxMzZjNzRwMAorICB9LAorICB7IC8vIEVudHJ5IDgzMworICAgIDB4MS44YmRjZDU0YmQ1YTAwNGFjZjkyMmM0OWE4ZDVlMjhhMnAyLAorICAgIDB4MS42OTE3M2Y4MTM2Yzc0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzQKKyAgICAtMHgxLjIxMjc3Yjk3YzAxNWYxOWRlN2IyMzgyNTJlNTZlNjNmcDEsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzUKKyAgICAweDEuMjEyNzdiOTdjMDE1ZjE5ZGU3YjIzODI1MmU1NmU2M2ZwMSwKKyAgICAweDEuMjc3MDFjYWY4OWU5MHAwCisgIH0sCisgIHsgLy8gRW50cnkgODM2CisgICAgLTB4MS40MTAzOGI3MGJlMTFiODU3OThhMjcxYWMzZDIwOWVhN3AwLAorICAgIC0weDEuY2I5MWYzYmJiYTE1N3AtMQorICB9LAorICB7IC8vIEVudHJ5IDgzNworICAgIDB4MS40MTAzOGI3MGJlMTFiODU3OThhMjcxYWMzZDIwOWVhN3AwLAorICAgIDB4MS5jYjkxZjNiYmJhMTU3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgODM4CisgICAgLTB4MS43ZTFkOTM2ZjRkNjNjMWM3ODA2NjU3ZDhiODM4ODM2ZXAtMSwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1OGVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzkKKyAgICAweDEuN2UxZDkzNmY0ZDYzYzFjNzgwNjY1N2Q4YjgzODgzNmVwLTEsCisgICAgMHgxLjQ4NDNhZTE4NjA1OGVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDAKKyAgICAtMHgxLjllOTI1N2U2YjYyZDg4NmY3NGUzNDhiZGMxNDI1OTljcC0yLAorICAgIC0weDEuODllYWQwZWEwZDM4YXAtMgorICB9LAorICB7IC8vIEVudHJ5IDg0MQorICAgIDB4MS45ZTkyNTdlNmI2MmQ4ODZmNzRlMzQ4YmRjMTQyNTk5Y3AtMiwKKyAgICAweDEuODllYWQwZWEwZDM4YXAtMgorICB9LAorICB7IC8vIEVudHJ5IDg0MgorICAgIC0weDEuMDgwZjczYjA3MDU3ZGM3YmYwZGY2ZGUxZDNhZTFhM2JwLTMsCisgICAgLTB4MS4wNjljOGI0NmIzN2YwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgODQzCisgICAgMHgxLjA4MGY3M2IwNzA1N2RjN2JmMGRmNmRlMWQzYWUxYTNicC0zLAorICAgIDB4MS4wNjljOGI0NmIzN2YwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgODQ0CisgICAgMHgxLjA4MGY3M2IwNzA0YmVhN2E1NmQ0Zjg4ZWNmM2Q1Y2QzcC0zLAorICAgIDB4MS4wNjljOGI0NmIzNzM0cC0zCisgIH0sCisgIHsgLy8gRW50cnkgODQ1CisgICAgLTB4MS4wODBmNzNiMDcwNGJlYTdhNTZkNGY4OGVjZjNkNWNkM3AtMywKKyAgICAtMHgxLjA2OWM4YjQ2YjM3MzRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDYKKyAgICAweDEuOWU5MjU3ZTZiNjI2YjFlYjExMzZiZDc4NTMzMTE1NDNwLTIsCisgICAgMHgxLjg5ZWFkMGVhMGQzMmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDcKKyAgICAtMHgxLjllOTI1N2U2YjYyNmIxZWIxMTM2YmQ3ODUzMzExNTQzcC0yLAorICAgIC0weDEuODllYWQwZWEwZDMyY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDg0OAorICAgIDB4MS43ZTFkOTM2ZjRkNWYyZWViYmJmM2Q2Mjk2MzEwNmFmYXAtMSwKKyAgICAweDEuNDg0M2FlMTg2MDU1ZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDg0OQorICAgIC0weDEuN2UxZDkzNmY0ZDVmMmVlYmJiZjNkNjI5NjMxMDZhZmFwLTEsCisgICAgLTB4MS40ODQzYWUxODYwNTVmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODUwCisgICAgMHgxLjQxMDM4YjcwYmUwZGYxMWQxMjI0NjgzYzZmODY1NTg0cDAsCisgICAgMHgxLmNiOTFmM2JiYmExMjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTEKKyAgICAtMHgxLjQxMDM4YjcwYmUwZGYxMWQxMjI0NjgzYzZmODY1NTg0cDAsCisgICAgLTB4MS5jYjkxZjNiYmJhMTI4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgODUyCisgICAgMHgxLjIxMjc3Yjk3YzAxMTVkY2Y2NjQ3YWQ2OGY0Y2I0YWQwcDEsCisgICAgMHgxLjI3NzAxY2FmODllNzhwMAorICB9LAorICB7IC8vIEVudHJ5IDg1MworICAgIC0weDEuMjEyNzdiOTdjMDExNWRjZjY2NDdhZDY4ZjRjYjRhZDBwMSwKKyAgICAtMHgxLjI3NzAxY2FmODllNzhwMAorICB9LAorICB7IC8vIEVudHJ5IDg1NAorICAgIDB4MS44YmRjZDU0YmQ1OTE0YmQ5YTRkNmRkNjU5YzJmNjYwNnAyLAorICAgIDB4MS42OTE3M2Y4MTM2YzVjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTUKKyAgICAtMHgxLjhiZGNkNTRiZDU5MTRiZDlhNGQ2ZGQ2NTljMmY2NjA2cDIsCisgICAgLTB4MS42OTE3M2Y4MTM2YzVjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTYKKyAgICAtMHgxLjRiYjZhNjRlMDYzM2JmYTU2ODc5NjYwNjU1YzM4NzY3cDMsCisgICAgMHgxLmFhYmU2MjUyZTNhNDBwMAorICB9LAorICB7IC8vIEVudHJ5IDg1NworICAgIDB4MS40YmI2YTY0ZTA2MzNiZmE1Njg3OTY2MDY1NWMzODc2N3AzLAorICAgIC0weDEuYWFiZTYyNTJlM2E0MHAwCisgIH0sCisgIHsgLy8gRW50cnkgODU4CisgICAgLTB4MS41YmQxM2RkYTA3ODEyNDQ0NGM5NDBmMDEzYmU3YzQwMnAxLAorICAgIDB4MS5lYzY1ODUyNDkwODI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTkKKyAgICAweDEuNWJkMTNkZGEwNzgxMjQ0NDRjOTQwZjAxM2JlN2M0MDJwMSwKKyAgICAtMHgxLmVjNjU4NTI0OTA4MjRwMAorICB9LAorICB7IC8vIEVudHJ5IDg2MAorICAgIC0weDEuNmVmZWM4YzFlNDk2ZjY5YzI4NmFkYzY2YmQ1ODZlYWZwMCwKKyAgICAweDEuMTcwNjUzZmIxZWIwNHAxCisgIH0sCisgIHsgLy8gRW50cnkgODYxCisgICAgMHgxLjZlZmVjOGMxZTQ5NmY2OWMyODZhZGM2NmJkNTg2ZWFmcDAsCisgICAgLTB4MS4xNzA2NTNmYjFlYjA0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjIKKyAgICAtMHgxLmIzZGYzODZmMTgyNjJiZDYzN2UyOWZiYjMwODA2YjJjcC0xLAorICAgIDB4MS4zN2Q5ZTU2M2Y1MWY2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjMKKyAgICAweDEuYjNkZjM4NmYxODI2MmJkNjM3ZTI5ZmJiMzA4MDZiMmNwLTEsCisgICAgLTB4MS4zN2Q5ZTU2M2Y1MWY2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjQKKyAgICAtMHgxLmVkMjFlNTk5NzJiNWJjZDMwMTVjMjUwZWZmMWM2OWI5cC0yLAorICAgIDB4MS41OGFkNzZjY2NiOGU4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjUKKyAgICAweDEuZWQyMWU1OTk3MmI1YmNkMzAxNWMyNTBlZmYxYzY5YjlwLTIsCisgICAgLTB4MS41OGFkNzZjY2NiOGU4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjYKKyAgICAtMHgxLjhlZDkxNDJmYzkyMTcyODllZDIxOTQwZGVhYWZlODc4cC0zLAorICAgIDB4MS43OTgxMDgzNWExZmRhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjcKKyAgICAweDEuOGVkOTE0MmZjOTIxNzI4OWVkMjE5NDBkZWFhZmU4NzhwLTMsCisgICAgLTB4MS43OTgxMDgzNWExZmRhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjgKKyAgICAweDEuMDZmOGQwMTRiZWY2N2NmYjJkYjU2MGY1YTQxNGM4OGJwLTQsCisgICAgMHgxLjlhNTQ5OTllNzg2Y2NwMQorICB9LAorICB7IC8vIEVudHJ5IDg2OQorICAgIC0weDEuMDZmOGQwMTRiZWY2N2NmYjJkYjU2MGY1YTQxNGM4OGJwLTQsCisgICAgLTB4MS45YTU0OTk5ZTc4NmNjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzAKKyAgICAweDEuNTNmZGNkZmQzN2ViNDBjZDllNTA0ZGY0MzFiNTAyZDBwLTIsCisgICAgMHgxLmJiMjgyYjA3NGVkYmVwMQorICB9LAorICB7IC8vIEVudHJ5IDg3MQorICAgIC0weDEuNTNmZGNkZmQzN2ViNDBjZDllNTA0ZGY0MzFiNTAyZDBwLTIsCisgICAgLTB4MS5iYjI4MmIwNzRlZGJlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzIKKyAgICAweDEuNGQ0NjZhY2NhZDQ1YTcyZTVmNzM1ZWIyZjZhZGY5ZmZwLTEsCisgICAgMHgxLmRiZmJiYzcwMjU0YjBwMQorICB9LAorICB7IC8vIEVudHJ5IDg3MworICAgIC0weDEuNGQ0NjZhY2NhZDQ1YTcyZTVmNzM1ZWIyZjZhZGY5ZmZwLTEsCisgICAgLTB4MS5kYmZiYmM3MDI1NGIwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzQKKyAgICAweDEuMTllMjZiNWVjZDU5ODUwN2VjZDAwZDgxZWM3NzU2ODNwMCwKKyAgICAweDEuZmNjZjRkZDhmYmJhMnAxCisgIH0sCisgIHsgLy8gRW50cnkgODc1CisgICAgLTB4MS4xOWUyNmI1ZWNkNTk4NTA3ZWNkMDBkODFlYzc3NTY4M3AwLAorICAgIC0weDEuZmNjZjRkZDhmYmJhMnAxCisgIH0sCisgIHsgLy8gRW50cnkgODc2CisgICAgMHgxLmVhYjQzZTBlNWU4MjU3MDczYWZhZWNhYjM4NjE1NGExcDAsCisgICAgMHgxLjBlZDE2ZmEwZTkxNGFwMgorICB9LAorICB7IC8vIEVudHJ5IDg3NworICAgIC0weDEuZWFiNDNlMGU1ZTgyNTcwNzNhZmFlY2FiMzg2MTU0YTFwMCwKKyAgICAtMHgxLjBlZDE2ZmEwZTkxNGFwMgorICB9LAorICB7IC8vIEVudHJ5IDg3OAorICAgIDB4MS4xODY2ZmU4NDVlNmZjMjcwNjRlMmIxMjNhNzcyNGU3NXAyLAorICAgIDB4MS4xZjNiMzg1NTU0NGMzcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzkKKyAgICAtMHgxLjE4NjZmZTg0NWU2ZmMyNzA2NGUyYjEyM2E3NzI0ZTc1cDIsCisgICAgLTB4MS4xZjNiMzg1NTU0NGMzcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODAKKyAgICAtMHgxLmYyZjA1Y2ZiNjVjNWUwNmIxYWU4OGM0OGI0Yjc1NWNlcDQsCisgICAgMHgxLjJmYTUwMTA5YmY4M2NwMgorICB9LAorICB7IC8vIEVudHJ5IDg4MQorICAgIDB4MS5mMmYwNWNmYjY1YzVlMDZiMWFlODhjNDhiNGI3NTVjZXA0LAorICAgIC0weDEuMmZhNTAxMDliZjgzY3AyCisgIH0sCisgIHsgLy8gRW50cnkgODgyCisgICAgLTB4MS5hZjQ2NDNlOTM3MjhkNmJmZDcwMmMzMzQwNWRjY2U3ZHAxLAorICAgIDB4MS40MDBlYzliZTJhYmI1cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODMKKyAgICAweDEuYWY0NjQzZTkzNzI4ZDZiZmQ3MDJjMzM0MDVkY2NlN2RwMSwKKyAgICAtMHgxLjQwMGVjOWJlMmFiYjVwMgorICB9LAorICB7IC8vIEVudHJ5IDg4NAorICAgIC0weDEuYTY0YzdjOWQ2NTM5ZmRlYzI3YWZjMzgwYjlmNzUyYzBwMCwKKyAgICAweDEuNTA3ODkyNzI5NWYyZXAyCisgIH0sCisgIHsgLy8gRW50cnkgODg1CisgICAgMHgxLmE2NGM3YzlkNjUzOWZkZWMyN2FmYzM4MGI5Zjc1MmMwcDAsCisgICAgLTB4MS41MDc4OTI3Mjk1ZjJlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODYKKyAgICAtMHgxLmVmZDgyNzQyZDc3ZWI3M2M4MWEwMGY1Njg2MjFmNjNjcC0xLAorICAgIDB4MS42MGUyNWIyNzAxMmE3cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODcKKyAgICAweDEuZWZkODI3NDJkNzdlYjczYzgxYTAwZjU2ODYyMWY2M2NwLTEsCisgICAgLTB4MS42MGUyNWIyNzAxMmE3cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODgKKyAgICAtMHgxLjIwNWE2MDA5ZDVlN2VhZTYzZGExY2JkNTcxMjllZWZmcC0xLAorICAgIDB4MS43MTRjMjNkYjZjNjIwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODkKKyAgICAweDEuMjA1YTYwMDlkNWU3ZWFlNjNkYTFjYmQ1NzEyOWVlZmZwLTEsCisgICAgLTB4MS43MTRjMjNkYjZjNjIwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTAKKyAgICAtMHgxLjBjODY0MDgzZDFlZTVkMzRkZTIwNjBjODYyOWQ0OTUxcC0yLAorICAgIDB4MS44MWI1ZWM4ZmQ3OTk5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTEKKyAgICAweDEuMGM4NjQwODNkMWVlNWQzNGRlMjA2MGM4NjI5ZDQ5NTFwLTIsCisgICAgLTB4MS44MWI1ZWM4ZmQ3OTk5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTIKKyAgICAweDEuZjA5YjYzYWE4MWZjMzZkYTUwOWMzZTQxMDYwN2ZmZTdwLTUsCisgICAgMHgxLmVmZmZmZmZmZmZmZmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTMKKyAgICAtMHgxLmYwOWI2M2FhODFmYzM2ZGE1MDljM2U0MTA2MDdmZmU3cC01LAorICAgIC0weDEuZWZmZmZmZmZmZmZmZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDg5NAorICAgIDB4MS5mMDliNjNhYTgxZmM0NmU5NWUwNjQwNWI0MWU4YjRjY3AtNSwKKyAgICAweDEuZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDg5NQorICAgIC0weDEuZjA5YjYzYWE4MWZjNDZlOTVlMDY0MDViNDFlOGI0Y2NwLTUsCisgICAgLTB4MS5mcC01CisgIH0sCisgIHsgLy8gRW50cnkgODk2CisgICAgMHgxLmYwOWI2M2FhODFmYzU2Zjg2YjcwNDI3NTdkY2E2MmU4cC01LAorICAgIDB4MS5mMDAwMDAwMDAwMDAxcC01CisgIH0sCisgIHsgLy8gRW50cnkgODk3CisgICAgLTB4MS5mMDliNjNhYTgxZmM1NmY4NmI3MDQyNzU3ZGNhNjJlOHAtNSwKKyAgICAtMHgxLmYwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTgKKyAgICAweDEuZmE4ZjIxYzhhMzNhZWNmNGFmNzc3NTRlZjkwYTY3YjhwLTQsCisgICAgMHgxLmY3ZmZmZmZmZmZmZmZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTkKKyAgICAtMHgxLmZhOGYyMWM4YTMzYWVjZjRhZjc3NzU0ZWY5MGE2N2I4cC00LAorICAgIC0weDEuZjdmZmZmZmZmZmZmZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDkwMAorICAgIDB4MS5mYThmMjFjOGEzM2FmZDMzNTUxOThlOGQ3NzE2YTgxMXAtNCwKKyAgICAweDEuZjgwcC00CisgIH0sCisgIHsgLy8gRW50cnkgOTAxCisgICAgLTB4MS5mYThmMjFjOGEzM2FmZDMzNTUxOThlOGQ3NzE2YTgxMXAtNCwKKyAgICAtMHgxLmY4MHAtNAorICB9LAorICB7IC8vIEVudHJ5IDkwMgorICAgIDB4MS5mYThmMjFjOGEzM2IwZDcxZmFiYmE3Y2JmNTI2ZWQwN3AtNCwKKyAgICAweDEuZjgwMDAwMDAwMDAwMXAtNAorICB9LAorICB7IC8vIEVudHJ5IDkwMworICAgIC0weDEuZmE4ZjIxYzhhMzNiMGQ3MWZhYmJhN2NiZjUyNmVkMDdwLTQsCisgICAgLTB4MS5mODAwMDAwMDAwMDAxcC00CisgIH0sCisgIHsgLy8gRW50cnkgOTA0CisgICAgMHgxLjRlZjA2Y2I0ZjBhODY5ZWYwMGRmOGVjNTU4MmRmYTMxcC0zLAorICAgIDB4MS40YmZmZmZmZmZmZmZmcC0zCisgIH0sCisgIHsgLy8gRW50cnkgOTA1CisgICAgLTB4MS40ZWYwNmNiNGYwYTg2OWVmMDBkZjhlYzU1ODJkZmEzMXAtMywKKyAgICAtMHgxLjRiZmZmZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDYKKyAgICAweDEuNGVmMDZjYjRmMGE4N2E1YzhlZWVlYmNlYjEyYTIyYjRwLTMsCisgICAgMHgxLjRjMHAtMworICB9LAorICB7IC8vIEVudHJ5IDkwNworICAgIC0weDEuNGVmMDZjYjRmMGE4N2E1YzhlZWVlYmNlYjEyYTIyYjRwLTMsCisgICAgLTB4MS40YzBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDgKKyAgICAweDEuNGVmMDZjYjRmMGE4OGFjYTFjZmU0OGQ4MGEzMTBhNjVwLTMsCisgICAgMHgxLjRjMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDkKKyAgICAtMHgxLjRlZjA2Y2I0ZjBhODhhY2ExY2ZlNDhkODBhMzEwYTY1cC0zLAorICAgIC0weDEuNGMwMDAwMDAwMDAwMXAtMworICB9LAorICB7IC8vIEVudHJ5IDkxMAorICAgIDB4MS4zY2MyYTQ0ZTI5OTk2NjhjYjA5MmEwOWI3M2IyZGU1MHAtMiwKKyAgICAweDEuMzMzMzMzMzMzMzMzMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDkxMQorICAgIC0weDEuM2NjMmE0NGUyOTk5NjY4Y2IwOTJhMDliNzNiMmRlNTBwLTIsCisgICAgLTB4MS4zMzMzMzMzMzMzMzMycC0yCisgIH0sCisgIHsgLy8gRW50cnkgOTEyCisgICAgMHgxLjNjYzJhNDRlMjk5OTc4MTRhMWFjM2YwMjExYzc2NDFmcC0yLAorICAgIDB4MS4zMzMzMzMzMzMzMzMzcC0yCisgIH0sCisgIHsgLy8gRW50cnkgOTEzCisgICAgLTB4MS4zY2MyYTQ0ZTI5OTk3ODE0YTFhYzNmMDIxMWM3NjQxZnAtMiwKKyAgICAtMHgxLjMzMzMzMzMzMzMzMzNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTQKKyAgICAweDEuM2NjMmE0NGUyOTk5ODk5YzkyYzVkZDY4YjAwNzRjMzFwLTIsCisgICAgMHgxLjMzMzMzMzMzMzMzMzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTUKKyAgICAtMHgxLjNjYzJhNDRlMjk5OTg5OWM5MmM1ZGQ2OGIwMDc0YzMxcC0yLAorICAgIC0weDEuMzMzMzMzMzMzMzMzNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDkxNgorICAgIDB4MS45OTQzNzExZGMyY2U4M2QyMWNkYjI4NWFjZWQ4MTdhZHAtMSwKKyAgICAweDEuNTk0MzE3YWNjNGVmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDkxNworICAgIC0weDEuOTk0MzcxMWRjMmNlODNkMjFjZGIyODVhY2VkODE3YWRwLTEsCisgICAgLTB4MS41OTQzMTdhY2M0ZWY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTE4CisgICAgMHgxLjk5NDM3MTFkYzJjZTllMGIzZjFmZmU1YWVjMGFjMjBkcC0xLAorICAgIDB4MS41OTQzMTdhY2M0ZWY5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTE5CisgICAgLTB4MS45OTQzNzExZGMyY2U5ZTBiM2YxZmZlNWFlYzBhYzIwZHAtMSwKKyAgICAtMHgxLjU5NDMxN2FjYzRlZjlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjAKKyAgICAweDEuOTk0MzcxMWRjMmNlYjg0NDYxNjRkNDViMGE4Y2NkZWVwLTEsCisgICAgMHgxLjU5NDMxN2FjYzRlZmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjEKKyAgICAtMHgxLjk5NDM3MTFkYzJjZWI4NDQ2MTY0ZDQ1YjBhOGNjZGVlcC0xLAorICAgIC0weDEuNTk0MzE3YWNjNGVmYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDkyMgorICAgIDB4MS5mYmM1MTFkZjU5MTdkNTdkMjMxZDdhZDQzNGRhNWY5NHAtMSwKKyAgICAweDEuOGZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDkyMworICAgIC0weDEuZmJjNTExZGY1OTE3ZDU3ZDIzMWQ3YWQ0MzRkYTVmOTRwLTEsCisgICAgLTB4MS44ZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTI0CisgICAgMHgxLmZiYzUxMWRmNTkxN2Y1MzliYmNmNzc4YmMxYTIyMjQ5cC0xLAorICAgIDB4MS45cC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTI1CisgICAgLTB4MS5mYmM1MTFkZjU5MTdmNTM5YmJjZjc3OGJjMWEyMjI0OXAtMSwKKyAgICAtMHgxLjlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjYKKyAgICAweDEuZmJjNTExZGY1OTE4MTRmNjU0ODE3NDQzNTA2MTdjODVwLTEsCisgICAgMHgxLjkwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjcKKyAgICAtMHgxLmZiYzUxMWRmNTkxODE0ZjY1NDgxNzQ0MzUwNjE3Yzg1cC0xLAorICAgIC0weDEuOTAwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDkyOAorICAgIC0weDEucC0xMDc0LAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDkyOQorICAgIDB4MS5wLTEwNzQsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzAKKyAgICAtMC4wLAorICAgIC0wLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzEKKyAgICAweDEucC0xMDc0LAorICAgIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgOTMyCisgICAgLTB4MS5wLTEwNzQsCisgICAgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgOTMzCisgICAgMHgxLjkyNzI3OGEzYjExNjBiYmY4ZTBiYjMwOWRhNDI0N2M1cC01LAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC01CisgIH0sCisgIHsgLy8gRW50cnkgOTM0CisgICAgLTB4MS45MjcyNzhhM2IxMTYwYmJmOGUwYmIzMDlkYTQyNDdjNXAtNSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzUKKyAgICAweDEuOTI3Mjc4YTNiMTE2MWJjOTcwYmE4YjUwZTU3NWY5N2ZwLTUsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzYKKyAgICAtMHgxLjkyNzI3OGEzYjExNjFiYzk3MGJhOGI1MGU1NzVmOTdmcC01LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtNQorICB9LAorICB7IC8vIEVudHJ5IDkzNworICAgIDB4MS45MjcyNzhhM2IxMTYyYmQzNTM2OTYzOTdmMGFhNzRlZXAtNSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAtNQorICB9LAorICB7IC8vIEVudHJ5IDkzOAorICAgIC0weDEuOTI3Mjc4YTNiMTE2MmJkMzUzNjk2Mzk3ZjBhYTc0ZWVwLTUsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cC01CisgIH0sCisgIHsgLy8gRW50cnkgOTM5CisgICAgMHgxLjkzNmJiOGM1YjJkYTExODMwNmZhOWI1ZDZkOGVkMmMxcC00LAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC00CisgIH0sCisgIHsgLy8gRW50cnkgOTQwCisgICAgLTB4MS45MzZiYjhjNWIyZGExMTgzMDZmYTliNWQ2ZDhlZDJjMXAtNCwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDEKKyAgICAweDEuOTM2YmI4YzViMmRhMjFhYWMyYmZlYzg0MjkzZTVkNGRwLTQsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDIKKyAgICAtMHgxLjkzNmJiOGM1YjJkYTIxYWFjMmJmZWM4NDI5M2U1ZDRkcC00LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtNAorICB9LAorICB7IC8vIEVudHJ5IDk0MworICAgIDB4MS45MzZiYjhjNWIyZGEzMWQyN2U4NTNkYWFlNGYxMTY4NHAtNCwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAtNAorICB9LAorICB7IC8vIEVudHJ5IDk0NAorICAgIC0weDEuOTM2YmI4YzViMmRhMzFkMjdlODUzZGFhZTRmMTE2ODRwLTQsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cC00CisgIH0sCisgIHsgLy8gRW50cnkgOTQ1CisgICAgMHgxLjk3NWY1ZTA1NTMxNTZiNDM4Y2E3ZDc1MmQzN2QwODczcC0zLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC0zCisgIH0sCisgIHsgLy8gRW50cnkgOTQ2CisgICAgLTB4MS45NzVmNWUwNTUzMTU2YjQzOGNhN2Q3NTJkMzdkMDg3M3AtMywKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDcKKyAgICAweDEuOTc1ZjVlMDU1MzE1N2JlNTljYmZmNjQ4ZmRlZjJjMDhwLTMsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDgKKyAgICAtMHgxLjk3NWY1ZTA1NTMxNTdiZTU5Y2JmZjY0OGZkZWYyYzA4cC0zLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtMworICB9LAorICB7IC8vIEVudHJ5IDk0OQorICAgIDB4MS45NzVmNWUwNTUzMTU4Yzg3YWNkODE1M2YyODZlOGI4YXAtMywKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAtMworICB9LAorICB7IC8vIEVudHJ5IDk1MAorICAgIC0weDEuOTc1ZjVlMDU1MzE1OGM4N2FjZDgxNTNmMjg2ZThiOGFwLTMsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cC0zCisgIH0sCisgIHsgLy8gRW50cnkgOTUxCisgICAgMHgxLmE4Mjc5OTlmY2VmMzBjMzhiMmU1Mzk3ZWE3YzEwZWFkcC0yLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC0yCisgIH0sCisgIHsgLy8gRW50cnkgOTUyCisgICAgLTB4MS5hODI3OTk5ZmNlZjMwYzM4YjJlNTM5N2VhN2MxMGVhZHAtMiwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTMKKyAgICAweDEuYTgyNzk5OWZjZWYzMWVmNzc2MTgzYjA3MGU2ZmM4NGVwLTIsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTQKKyAgICAtMHgxLmE4Mjc5OTlmY2VmMzFlZjc3NjE4M2IwNzBlNmZjODRlcC0yLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDk1NQorICAgIDB4MS5hODI3OTk5ZmNlZjMzMWI2Mzk0YjNjOGY3NTVjOWZhM3AtMiwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAtMgorICB9LAorICB7IC8vIEVudHJ5IDk1NgorICAgIC0weDEuYTgyNzk5OWZjZWYzMzFiNjM5NGIzYzhmNzU1YzlmYTNwLTIsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cC0yCisgIH0sCisgIHsgLy8gRW50cnkgOTU3CisgICAgMHgxLmZmZmZmZmZmZmZmZmQ3MmNlY2U2NzVkMWZlMzAzNWJicC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTU4CisgICAgLTB4MS5mZmZmZmZmZmZmZmZkNzJjZWNlNjc1ZDFmZTMwMzViYnAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTkKKyAgICAweDEuZmZmZmZmZmZmZmZmZjcyY2VjZTY3NWQxZmNhMzA0ODlwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmY3MmNlY2U2NzVkMWZjYTMwNDg5cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDk2MQorICAgIDB4MS4wMDAwMDAwMDAwMDAwYjk2NzY3MzNhZThmZThhZTlhY3AwLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTYyCisgICAgLTB4MS4wMDAwMDAwMDAwMDAwYjk2NzY3MzNhZThmZThhZTlhY3AwLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDk2MworICAgIDB4MS45MTUzZDk0NDNlZDBiM2I0M2RkYWI2YWU1NzNhYTIzZHA1MSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AwCisgIH0sCisgIHsgLy8gRW50cnkgOTY0CisgICAgLTB4MS45MTUzZDk0NDNlZDBiM2I0M2RkYWI2YWU1NzNhYTIzZHA1MSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwMAorICB9LAorICB7IC8vIEVudHJ5IDk2NQorICAgIDB4MS5kMDI5NjdjMzFjZGI0ZTBjMzhkMDFiNjU1ZDVlMGFhZnA1MywKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAwCisgIH0sCisgIHsgLy8gRW50cnkgOTY2CisgICAgLTB4MS5kMDI5NjdjMzFjZGI0ZTBjMzhkMDFiNjU1ZDVlMGFhZnA1MywKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDk2NworICAgIC0weDEuNjE3YTE1NDk0NzY3YTA0ODgyYzMyMDMxN2YzZTRjZWNwNTIsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwMAorICB9LAorICB7IC8vIEVudHJ5IDk2OAorICAgIDB4MS42MTdhMTU0OTQ3NjdhMDQ4ODJjMzIwMzE3ZjNlNGNlY3A1MiwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwMAorICB9LAorICB7IC8vIEVudHJ5IDk2OQorICAgIC0weDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5YzNkNjBjNjhwLTUxLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzAKKyAgICAweDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5YzNkNjBjNjhwLTUxLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AxCisgIH0sCisgIHsgLy8gRW50cnkgOTcxCisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDYxZDVkN3AtNTMsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDk3MgorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDYxZDVkN3AtNTMsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzMKKyAgICAweDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjZjN2VlMGI5NmNwLTUyLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzQKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzdlZTBiOTZjcC01MiwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwMQorICB9LAorICB7IC8vIEVudHJ5IDk3NQorICAgIC0weDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5Y2MyNDRhYjVwLTUwLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzYKKyAgICAweDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5Y2MyNDRhYjVwLTUwLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AyCisgIH0sCisgIHsgLy8gRW50cnkgOTc3CisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNGI3YmJhYnAtNTIsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMgorICB9LAorICB7IC8vIEVudHJ5IDk3OAorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNGI3YmJhYnAtNTIsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzkKKyAgICAweDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjZjODFlYWIzOGNwLTUxLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODAKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzgxZWFiMzhjcC01MSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwMgorICB9LAorICB7IC8vIEVudHJ5IDk4MQorICAgIC0weDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5ZWQ1ZDQzZThwLTQ5LAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODIKKyAgICAweDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5ZWQ1ZDQzZThwLTQ5LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AzCisgIH0sCisgIHsgLy8gRW50cnkgOTgzCisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNjBmNTJmOXAtNTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMworICB9LAorICB7IC8vIEVudHJ5IDk4NAorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNjBmNTJmOXAtNTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODUKKyAgICAweDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjZjOGUxMjljMGFwLTUwLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODYKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzhlMTI5YzBhcC01MCwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwMworICB9LAorICB7IC8vIEVudHJ5IDk4NworICAgIC0weDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDRhNzI0MTI4YjRwLTQ4LAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODgKKyAgICAweDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDRhNzI0MTI4YjRwLTQ4LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTg5CisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwYjZkYjAzM3AtNTAsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwNAorICB9LAorICB7IC8vIEVudHJ5IDk5MAorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwYjZkYjAzM3AtNTAsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTEKKyAgICAweDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjZjYmViMjNlMDNwLTQ5LAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTIKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2Y2JlYjIzZTAzcC00OSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwNAorICB9LAorICB7IC8vIEVudHJ5IDk5MworICAgIC0weDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDRjODVkMGJiZTNwLTQ3LAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTQKKyAgICAweDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDRjODVkMGJiZTNwLTQ3LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3A1CisgIH0sCisgIHsgLy8gRW50cnkgOTk1CisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcyMGU3MjUxYXAtNDksCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwNQorICB9LAorICB7IC8vIEVudHJ5IDk5NgorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcyMGU3MjUxYXAtNDksCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTcKKyAgICAweDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjZkODEzMGM1ZTdwLTQ4LAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTgKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2ZDgxMzBjNWU3cC00OCwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwNQorICB9LAorICB7IC8vIEVudHJ5IDk5OQorICAgIC0weDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDU0ZDQwZjA4YTBwLTQ2LAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAwCisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA1NGQ0MGYwOGEwcC00NiwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwNgorICB9LAorICB7IC8vIEVudHJ5IDEwMDEKKyAgICAtMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzc2Y2NmOGI3cC00OCwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTAwMgorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjc3NmNjZjhiN3AtNDgsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAzCisgICAgMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY3MDhiMmFlNTc2cC00NywKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXA2CisgIH0sCisgIHsgLy8gRW50cnkgMTAwNAorICAgIC0weDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjcwOGIyYWU1NzZwLTQ3LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXA2CisgIH0sCisgIHsgLy8gRW50cnkgMTAwNQorICAgIC0weDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDc2MGQwODNiOTdwLTQ1LAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA2CisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA3NjBkMDgzYjk3cC00NSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwNworICB9LAorICB7IC8vIEVudHJ5IDEwMDcKKyAgICAtMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyOGNlNjQ0NzJicC00NywKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHA3CisgIH0sCisgIHsgLy8gRW50cnkgMTAwOAorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjhjZTY0NDcyYnAtNDcsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA5CisgICAgMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY3Y2IzMTM2M2IxcC00NiwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXA3CisgIH0sCisgIHsgLy8gRW50cnkgMTAxMAorICAgIC0weDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjdjYjMxMzYzYjFwLTQ2LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXA3CisgIH0sCisgIHsgLy8gRW50cnkgMTAxMQorICAgIC0weDEuMDAwMDAwMDAwMDAwNGQzYzljYTY0ZjQ1MTBjZjZmMzFwMCwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAxMgorICAgIDB4MS4wMDAwMDAwMDAwMDA0ZDNjOWNhNjRmNDUxMGNmNmYzMXAwLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAxMworICAgIC0weDEuMDAwMDAwMDAwMDAwMGQzYzljYTY0ZjQ1MDU4MDQ4MDhwMCwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAxNAorICAgIDB4MS4wMDAwMDAwMDAwMDAwZDNjOWNhNjRmNDUwNTgwNDgwOHAwLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAxNQorICAgIC0weDEuZmZmZmZmZmZmZmZmOWE3OTM5NGM5ZThhMTQ2MjQxYmRwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDNwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMTYKKyAgICAweDEuZmZmZmZmZmZmZmZmOWE3OTM5NGM5ZThhMTQ2MjQxYmRwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQzcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE3CisgICAgMHgxLmZmZmZmZmZmZmZmZjUzZTBhMDgwNGQxYTBiYmM0YWIzcC0xLAorICAgIDB4MS5mNmE3YTI5NTUzODVkcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE4CisgICAgLTB4MS5mZmZmZmZmZmZmZmY1M2UwYTA4MDRkMWEwYmJjNGFiM3AtMSwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWRwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMTkKKyAgICAweDEuZmZmZmZmZmZmZmZmZDNlMGEwODA0ZDE5ZjBiNDcyZDNwLTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWVwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMjAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmQzZTBhMDgwNGQxOWYwYjQ3MmQzcC0xLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAyMQorICAgIDB4MS4wMDAwMDAwMDAwMDAyOWYwNTA0MDI2OGNmYWQ2NGQ3OXAwLAorICAgIDB4MS5mNmE3YTI5NTUzODVmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIyCisgICAgLTB4MS4wMDAwMDAwMDAwMDAyOWYwNTA0MDI2OGNmYWQ2NGQ3OXAwLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAyMworICAgIDB4MS5hODQxMDA4NzI2MmUzZjQxODU5ZmE3MzU2N2Y5MjQ0ZHA0OSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAyNAorICAgIC0weDEuYTg0MTAwODcyNjJlM2Y0MTg1OWZhNzM1NjdmOTI0NGRwNDksCisgICAgLTB4MS4yZDk3YzdmMzMyMWQxcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI1CisgICAgMHgxLjM1NzBlZmQ3Njg5MjM0MDgyNWUwMTI0MzkzNTU0Njk3cDUyLAorICAgIDB4MS4yZDk3YzdmMzMyMWQycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI2CisgICAgLTB4MS4zNTcwZWZkNzY4OTIzNDA4MjVlMDEyNDM5MzU1NDY5N3A1MiwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDJwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMjcKKyAgICAtMHgxLjQyYzBkNjRkNWRlNTE3OGFmZTA2NDUyYTFhMWI4NjY3cDUwLAorICAgIDB4MS4yZDk3YzdmMzMyMWQzcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI4CisgICAgMHgxLjQyYzBkNjRkNWRlNTE3OGFmZTA2NDUyYTFhMWI4NjY3cDUwLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkM3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTAyOQorICAgIC0weDEuMDAwMDAwMDAwMDAwOWVlMmMyZDk2M2ExM2Q1N2VjMjBwMCwKKyAgICAweDEuNWZkYmJlOWJiYTc3NHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAzMAorICAgIDB4MS4wMDAwMDAwMDAwMDA5ZWUyYzJkOTYzYTEzZDU3ZWMyMHAwLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAzMQorICAgIC0weDEuMDAwMDAwMDAwMDAwMWVlMmMyZDk2M2ExMGRlNjhhYjRwMCwKKyAgICAweDEuNWZkYmJlOWJiYTc3NXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAzMgorICAgIDB4MS4wMDAwMDAwMDAwMDAxZWUyYzJkOTYzYTEwZGU2OGFiNHAwLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAzMworICAgIC0weDEuZmZmZmZmZmZmZmZmM2RjNTg1YjJjNzQyM2NlYTUyOGVwLTEsCisgICAgMHgxLjVmZGJiZTliYmE3NzZwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMzQKKyAgICAweDEuZmZmZmZmZmZmZmZmM2RjNTg1YjJjNzQyM2NlYTUyOGVwLTEsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM1CisgICAgMHgxLmZmZmZmZmZmZmZmZWIwOTQ1NDFhMjQ2MjRlZWFiMGUxcC0xLAorICAgIDB4MS5jNDYzYWJlY2NiMmJhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM2CisgICAgLTB4MS5mZmZmZmZmZmZmZmViMDk0NTQxYTI0NjI0ZWVhYjBlMXAtMSwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmFwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMzcKKyAgICAweDEuZmZmZmZmZmZmZmZmYjA5NDU0MWEyNDYxZTczNGRhZWVwLTEsCisgICAgMHgxLmM0NjNhYmVjY2IyYmJwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMzgKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmIwOTQ1NDFhMjQ2MWU3MzRkYWVlcC0xLAorICAgIC0weDEuYzQ2M2FiZWNjYjJiYnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAzOQorICAgIDB4MS4wMDAwMDAwMDAwMDA1ODRhMmEwZDEyMzBmZmJmODI3ZHAwLAorICAgIDB4MS5jNDYzYWJlY2NiMmJjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQwCisgICAgLTB4MS4wMDAwMDAwMDAwMDA1ODRhMmEwZDEyMzBmZmJmODI3ZHAwLAorICAgIC0weDEuYzQ2M2FiZWNjYjJiY3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTA0MQorICAgIDB4MS43Y2MwODBmODk1ODU2N2YwNWM0MGFjNWY2ZDMxMGRlOHA0OSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTA0MgorICAgIC0weDEuN2NjMDgwZjg5NTg1NjdmMDVjNDBhYzVmNmQzMTBkZThwNDksCisgICAgLTB4MS5mNmE3YTI5NTUzODVkcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQzCisgICAgMHgxLjczNTQ1MzAyN2Q3YzNlNzAyZDczNDkxZGUzNjk1MzZmcDUxLAorICAgIDB4MS5mNmE3YTI5NTUzODVlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ0CisgICAgLTB4MS43MzU0NTMwMjdkN2MzZTcwMmQ3MzQ5MWRlMzY5NTM2ZnA1MSwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWVwMgorICB9LAorICB7IC8vIEVudHJ5IDEwNDUKKyAgICAtMHgxLjg2YWE0YTNhMTI3YTNhZGQ5YThlNzY5OTM3MzNiNGE3cDUwLAorICAgIDB4MS5mNmE3YTI5NTUzODVmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ2CisgICAgMHgxLjg2YWE0YTNhMTI3YTNhZGQ5YThlNzY5OTM3MzNiNGE3cDUwLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTA0NworICAgIC0weDEuMDAwMDAwMDAwMDAxYjA4OGU5MGM3N2ZlODA1MWE3ZGFwMCwKKyAgICAweDEuMTQ3NWNjOWVlZGVmZnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA0OAorICAgIDB4MS4wMDAwMDAwMDAwMDFiMDg4ZTkwYzc3ZmU4MDUxYTdkYXAwLAorICAgIC0weDEuMTQ3NWNjOWVlZGVmZnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA0OQorICAgIC0weDEuMDAwMDAwMDAwMDAwYjA4OGU5MGM3N2ZkNGZjOGJlY2VwMCwKKyAgICAweDEuMTQ3NWNjOWVlZGZwMworICB9LAorICB7IC8vIEVudHJ5IDEwNTAKKyAgICAweDEuMDAwMDAwMDAwMDAwYjA4OGU5MGM3N2ZkNGZjOGJlY2VwMCwKKyAgICAtMHgxLjE0NzVjYzllZWRmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUxCisgICAgLTB4MS5mZmZmZmZmZmZmZmY2MTExZDIxOGVmZmEzZTdmYWI4M3AtMSwKKyAgICAweDEuMTQ3NWNjOWVlZGYwMXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA1MgorICAgIDB4MS5mZmZmZmZmZmZmZmY2MTExZDIxOGVmZmEzZTdmYWI4M3AtMSwKKyAgICAtMHgxLjE0NzVjYzllZWRmMDFwMworICB9LAorICB7IC8vIEVudHJ5IDEwNTMKKyAgICAtMHgxLjM0ZjI3Mjk5M2QxNDE0YTJiMzliZDgzNzc2NGMxNjA4cC00OSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA1NAorICAgIDB4MS4zNGYyNzI5OTNkMTQxNGEyYjM5YmQ4Mzc3NjRjMTYwOHAtNDksCisgICAgLTB4MS4yZDk3YzdmMzMyMWQxcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU1CisgICAgLTB4MS5hNzkzOTRjOWU4YTBhNTE1OWNkZWMxYmE4N2VhNTgxMXAtNTIsCisgICAgMHgxLjJkOTdjN2YzMzIxZDJwMworICB9LAorICB7IC8vIEVudHJ5IDEwNTYKKyAgICAweDEuYTc5Mzk0YzllOGEwYTUxNTljZGVjMWJhODdlYTU4MTFwLTUyLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA1NworICAgIDB4MS45NjFiMWFjZDg1ZDdkNmJhOThjODRmOTE3M2IwOGQ2ZnAtNTAsCisgICAgMHgxLjJkOTdjN2YzMzIxZDNwMworICB9LAorICB7IC8vIEVudHJ5IDEwNTgKKyAgICAtMHgxLjk2MWIxYWNkODVkN2Q2YmE5OGM4NGY5MTczYjA4ZDZmcC01MCwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDNwMworICB9LAorICB7IC8vIEVudHJ5IDEwNTkKKyAgICAweDEuZmZmZmZmZmZmZmZjOGQ0ODA3YjNmYmFjY2MzODMxNGJwLTEsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTJwMworICB9LAorICB7IC8vIEVudHJ5IDEwNjAKKyAgICAtMHgxLmZmZmZmZmZmZmZmYzhkNDgwN2IzZmJhY2NjMzgzMTRicC0xLAorICAgIC0weDEuNDZiOWMzNDc3NjRhMnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA2MQorICAgIDB4MS5mZmZmZmZmZmZmZmU4ZDQ4MDdiM2ZiYWE1OTgwMzhmZnAtMSwKKyAgICAweDEuNDZiOWMzNDc3NjRhM3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTA2MgorICAgIC0weDEuZmZmZmZmZmZmZmZlOGQ0ODA3YjNmYmFhNTk4MDM4ZmZwLTEsCisgICAgLTB4MS40NmI5YzM0Nzc2NGEzcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYzCisgICAgMHgxLjAwMDAwMDAwMDAwMDQ2YTQwM2Q5ZmRkNGYzNjQyMDU5cDAsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTRwMworICB9LAorICB7IC8vIEVudHJ5IDEwNjQKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDQ2YTQwM2Q5ZmRkNGYzNjQyMDU5cDAsCisgICAgLTB4MS40NmI5YzM0Nzc2NGE0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY1CisgICAgMHgxLjljNzhlZWE3OGJhYTZlMTNlY2NjOTRjNDIxYzRmNWFjcDQ4LAorICAgIDB4MS41ZmRiYmU5YmJhNzc0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY2CisgICAgLTB4MS45Yzc4ZWVhNzhiYWE2ZTEzZWNjYzk0YzQyMWM0ZjVhY3A0OCwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzRwMworICB9LAorICB7IC8vIEVudHJ5IDEwNjcKKyAgICAweDEuMDkzYzNiNGFlYmViMDgwNmZiZTRhMWYwYzY2MGJhM2JwNTEsCisgICAgMHgxLjVmZGJiZTliYmE3NzVwMworICB9LAorICB7IC8vIEVudHJ5IDEwNjgKKyAgICAtMHgxLjA5M2MzYjRhZWJlYjA4MDZmYmU0YTFmMGM2NjBiYTNicDUxLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA2OQorICAgIC0weDEuNTE2YWM5NjE0MjE4NTVmYjc1OWZjMmZhY2I0ZTlmNWJwNDksCisgICAgMHgxLjVmZGJiZTliYmE3NzZwMworICB9LAorICB7IC8vIEVudHJ5IDEwNzAKKyAgICAweDEuNTE2YWM5NjE0MjE4NTVmYjc1OWZjMmZhY2I0ZTlmNWJwNDksCisgICAgLTB4MS41ZmRiYmU5YmJhNzc2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcxCisgICAgLTB4MS4wMDAwMDAwMDAwMDFjMjJmMGYzZjhjNWFhNWEwMWRhM3AwLAorICAgIDB4MS43OGZkYjllZmZlYTQ1cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcyCisgICAgMHgxLjAwMDAwMDAwMDAwMWMyMmYwZjNmOGM1YWE1YTAxZGEzcDAsCisgICAgLTB4MS43OGZkYjllZmZlYTQ1cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDczCisgICAgLTB4MS4wMDAwMDAwMDAwMDBjMjJmMGYzZjhjNTk2MzcxMGU2NHAwLAorICAgIDB4MS43OGZkYjllZmZlYTQ2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc0CisgICAgMHgxLjAwMDAwMDAwMDAwMGMyMmYwZjNmOGM1OTYzNzEwZTY0cDAsCisgICAgLTB4MS43OGZkYjllZmZlYTQ2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc1CisgICAgLTB4MS5mZmZmZmZmZmZmZmY4NDVlMWU3ZjE4YjI0MjgzZmU0OXAtMSwKKyAgICAweDEuNzhmZGI5ZWZmZWE0N3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTA3NgorICAgIDB4MS5mZmZmZmZmZmZmZmY4NDVlMWU3ZjE4YjI0MjgzZmU0OXAtMSwKKyAgICAtMHgxLjc4ZmRiOWVmZmVhNDdwMworICB9LAorICB7IC8vIEVudHJ5IDEwNzcKKyAgICAweDEuZmZmZmZmZmZmZmZjNjlmYmJiNGRkMmY0ZmM4OGZmYTFwLTEsCisgICAgMHgxLmFiNDFiMDk4ODZmZThwMworICB9LAorICB7IC8vIEVudHJ5IDEwNzgKKyAgICAtMHgxLmZmZmZmZmZmZmZmYzY5ZmJiYjRkZDJmNGZjODhmZmExcC0xLAorICAgIC0weDEuYWI0MWIwOTg4NmZlOHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA3OQorICAgIDB4MS5mZmZmZmZmZmZmZmU2OWZiYmI0ZGQyZjI2Njg0YmFlZXAtMSwKKyAgICAweDEuYWI0MWIwOTg4NmZlOXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA4MAorICAgIC0weDEuZmZmZmZmZmZmZmZlNjlmYmJiNGRkMmYyNjY4NGJhZWVwLTEsCisgICAgLTB4MS5hYjQxYjA5ODg2ZmU5cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgxCisgICAgMHgxLjAwMDAwMDAwMDAwMDM0ZmRkZGE2ZTk3OGU4NDAzYjFlcDAsCisgICAgMHgxLmFiNDFiMDk4ODZmZWFwMworICB9LAorICB7IC8vIEVudHJ5IDEwODIKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDM0ZmRkZGE2ZTk3OGU4NDAzYjFlcDAsCisgICAgLTB4MS5hYjQxYjA5ODg2ZmVhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgzCisgICAgMHgxLjg2YzRlMzMzYjNjOWY2MjczODk2YWJhMjAxNzY3OTEycDQ4LAorICAgIDB4MS5jNDYzYWJlY2NiMmJhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg0CisgICAgLTB4MS44NmM0ZTMzM2IzYzlmNjI3Mzg5NmFiYTIwMTc2NzkxMnA0OCwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmFwMworICB9LAorICB7IC8vIEVudHJ5IDEwODUKKyAgICAweDEuOWM5Njk1MWYzNjE4NDU2MDMyODAxODVhMTZkNjAyNmNwNTAsCisgICAgMHgxLmM0NjNhYmVjY2IyYmJwMworICB9LAorICB7IC8vIEVudHJ5IDEwODYKKyAgICAtMHgxLjljOTY5NTFmMzYxODQ1NjAzMjgwMTg1YTE2ZDYwMjZjcDUwLAorICAgIC0weDEuYzQ2M2FiZWNjYjJiYnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA4NworICAgIC0weDEuNzMyNDRkMzY5ZTBiNmViMmY1ZDczY2NhNzM0NGU4N2FwNDksCisgICAgMHgxLmM0NjNhYmVjY2IyYmNwMworICB9LAorICB7IC8vIEVudHJ5IDEwODgKKyAgICAweDEuNzMyNDRkMzY5ZTBiNmViMmY1ZDczY2NhNzM0NGU4N2FwNDksCisgICAgLTB4MS5jNDYzYWJlY2NiMmJjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg5CisgICAgLTB4MS4wMDAwMDAwMDAwMDFkM2Q1MzU3MmEwYjZjYzI2MTA1NXAwLAorICAgIDB4MS5kZDg1YTc0MTBmNThicDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkwCisgICAgMHgxLjAwMDAwMDAwMDAwMWQzZDUzNTcyYTBiNmNjMjYxMDU1cDAsCisgICAgLTB4MS5kZDg1YTc0MTBmNThicDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkxCisgICAgLTB4MS4wMDAwMDAwMDAwMDBkM2Q1MzU3MmEwYjU3ODUwZGFlMnAwLAorICAgIDB4MS5kZDg1YTc0MTBmNThjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkyCisgICAgMHgxLjAwMDAwMDAwMDAwMGQzZDUzNTcyYTBiNTc4NTBkYWUycDAsCisgICAgLTB4MS5kZDg1YTc0MTBmNThjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkzCisgICAgLTB4MS5mZmZmZmZmZmZmZmZhN2FhNmFlNTQxNmE0OGY3NGFkZnAtMSwKKyAgICAweDEuZGQ4NWE3NDEwZjU4ZHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA5NAorICAgIDB4MS5mZmZmZmZmZmZmZmZhN2FhNmFlNTQxNmE0OGY3NGFkZnAtMSwKKyAgICAtMHgxLmRkODVhNzQxMGY1OGRwMworICB9LAorICB7IC8vIEVudHJ5IDEwOTUKKyAgICAtMHgxLjU4M2ViZWZmNjVjYzIyNjQ4MGFlNjg1YzY1MzUyMzI1cC00OSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA5NgorICAgIDB4MS41ODNlYmVmZjY1Y2MyMjY0ODBhZTY4NWM2NTM1MjMyNXAtNDksCisgICAgLTB4MS5mNmE3YTI5NTUzODVkcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDk3CisgICAgLTB4MS42MGZhZmJmZDk3MzA4OTkyMDJiOWExNzBjOGQ1NDU5MXAtNTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWVwMworICB9LAorICB7IC8vIEVudHJ5IDEwOTgKKyAgICAweDEuNjBmYWZiZmQ5NzMwODk5MjAyYjlhMTcwYzhkNTQ1OTFwLTUxLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA5OQorICAgIDB4MS40ZjgyODIwMTM0NjdiYjM2ZmVhMzJmNDdhOTU2NDFiYXAtNTAsCisgICAgMHgxLmY2YTdhMjk1NTM4NWZwMworICB9LAorICB7IC8vIEVudHJ5IDExMDAKKyAgICAtMHgxLjRmODI4MjAxMzQ2N2JiMzZmZWEzMmY0N2E5NTY0MWJhcC01MCwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWZwMworICB9LAorICB7IC8vIEVudHJ5IDExMDEKKyAgICAweDEuZmZmZmZmZmZmZmY4NDZhZjZlZTdhYTQ4YTFlOWU5ZjdwLTEsCisgICAgMHgxLjA3ZTRjZWY0Y2JkOTZwNAorICB9LAorICB7IC8vIEVudHJ5IDExMDIKKyAgICAtMHgxLmZmZmZmZmZmZmZmODQ2YWY2ZWU3YWE0OGExZTllOWY3cC0xLAorICAgIC0weDEuMDdlNGNlZjRjYmQ5NnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEwMworICAgIDB4MS5mZmZmZmZmZmZmZmM0NmFmNmVlN2FhM2QyZjQ4YzdjN3AtMSwKKyAgICAweDEuMDdlNGNlZjRjYmQ5N3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTEwNAorICAgIC0weDEuZmZmZmZmZmZmZmZjNDZhZjZlZTdhYTNkMmY0OGM3YzdwLTEsCisgICAgLTB4MS4wN2U0Y2VmNGNiZDk3cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTA1CisgICAgMHgxLjAwMDAwMDAwMDAwMDIzNTdiNzczZDUxY2RlNTNkMmNicDAsCisgICAgMHgxLjA3ZTRjZWY0Y2JkOThwNAorICB9LAorICB7IC8vIEVudHJ5IDExMDYKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDIzNTdiNzczZDUxY2RlNTNkMmNicDAsCisgICAgLTB4MS4wN2U0Y2VmNGNiZDk4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTA3CisgICAgMHgxLjJmMDg0MjM4OWU1YmMwMTRkMGZiZTg0M2NjYTZkZGYzcDQ3LAorICAgIDB4MS4xNDc1Y2M5ZWVkZWZmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTA4CisgICAgLTB4MS4yZjA4NDIzODllNWJjMDE0ZDBmYmU4NDNjY2E2ZGRmM3A0NywKKyAgICAtMHgxLjE0NzVjYzllZWRlZmZwNAorICB9LAorICB7IC8vIEVudHJ5IDExMDkKKyAgICAweDEuNzMzYzRlOGVmOWM1MGNiNTkyOWY2YmI2NzRiZWM2N2ZwNDgsCisgICAgMHgxLjE0NzVjYzllZWRmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTEwCisgICAgLTB4MS43MzNjNGU4ZWY5YzUwY2I1OTI5ZjZiYjY3NGJlYzY3ZnA0OCwKKyAgICAtMHgxLjE0NzVjYzllZWRmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTExCisgICAgLTB4MS45YzViNGM3Mjg5ODk4OTFkZmI4NzEwYWRmMzg3ODQzY3A0OSwKKyAgICAweDEuMTQ3NWNjOWVlZGYwMXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTExMgorICAgIDB4MS45YzViNGM3Mjg5ODk4OTFkZmI4NzEwYWRmMzg3ODQzY3A0OSwKKyAgICAtMHgxLjE0NzVjYzllZWRmMDFwNAorICB9LAorICB7IC8vIEVudHJ5IDExMTMKKyAgICAtMHgxLjAwMDAwMDAwMDAwMmU1N2I1YmE1YjUxNTU5NWVkYjk0cDAsCisgICAgMHgxLjIxMDZjYTQ5MTAwNjhwNAorICB9LAorICB7IC8vIEVudHJ5IDExMTQKKyAgICAweDEuMDAwMDAwMDAwMDAyZTU3YjViYTViNTE1NTk1ZWRiOTRwMCwKKyAgICAtMHgxLjIxMDZjYTQ5MTAwNjhwNAorICB9LAorICB7IC8vIEVudHJ5IDExMTUKKyAgICAtMHgxLjAwMDAwMDAwMDAwMGU1N2I1YmE1YjUxMThlNjgyNDQ5cDAsCisgICAgMHgxLjIxMDZjYTQ5MTAwNjlwNAorICB9LAorICB7IC8vIEVudHJ5IDExMTYKKyAgICAweDEuMDAwMDAwMDAwMDAwZTU3YjViYTViNTExOGU2ODI0NDlwMCwKKyAgICAtMHgxLjIxMDZjYTQ5MTAwNjlwNAorICB9LAorICB7IC8vIEVudHJ5IDExMTcKKyAgICAtMHgxLmZmZmZmZmZmZmZmZGNhZjZiNzRiNmEyMzg2ZTJkOWZicC0xLAorICAgIDB4MS4yMTA2Y2E0OTEwMDZhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTE4CisgICAgMHgxLmZmZmZmZmZmZmZmZGNhZjZiNzRiNmEyMzg2ZTJkOWZicC0xLAorICAgIC0weDEuMjEwNmNhNDkxMDA2YXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTExOQorICAgIC0weDEuMzRmMjcyOTkzZDE0MTRhMmIzOWJkODM3ZTZjOTZhZjBwLTQ4LAorICAgIDB4MS4yZDk3YzdmMzMyMWQxcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTIwCisgICAgMHgxLjM0ZjI3Mjk5M2QxNDE0YTJiMzliZDgzN2U2Yzk2YWYwcC00OCwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDFwNAorICB9LAorICB7IC8vIEVudHJ5IDExMjEKKyAgICAtMHgxLmE3OTM5NGM5ZThhMGE1MTU5Y2RlYzFiYThjNzFmNmJhcC01MSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEyMgorICAgIDB4MS5hNzkzOTRjOWU4YTBhNTE1OWNkZWMxYmE4YzcxZjZiYXAtNTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTIzCisgICAgMHgxLjk2MWIxYWNkODVkN2Q2YmE5OGM4NGY5MWIzOTAxMDFmcC00OSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkM3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTEyNAorICAgIC0weDEuOTYxYjFhY2Q4NWQ3ZDZiYTk4Yzg0ZjkxYjM5MDEwMWZwLTQ5LAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkM3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTEyNQorICAgIDB4MS5mZmZmZmZmZmZmZjgyMzYzMjI4MTgxOTExZGIxNDRiYXAtMSwKKyAgICAweDEuM2EyOGM1OWQ1NDMzOXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEyNgorICAgIC0weDEuZmZmZmZmZmZmZmY4MjM2MzIyODE4MTkxMWRiMTQ0YmFwLTEsCisgICAgLTB4MS4zYTI4YzU5ZDU0MzM5cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTI3CisgICAgMHgxLmZmZmZmZmZmZmZmYzIzNjMyMjgxODE4NTY0Nzc4OWJkcC0xLAorICAgIDB4MS4zYTI4YzU5ZDU0MzNhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTI4CisgICAgLTB4MS5mZmZmZmZmZmZmZmMyMzYzMjI4MTgxODU2NDc3ODliZHAtMSwKKyAgICAtMHgxLjNhMjhjNTlkNTQzM2FwNAorICB9LAorICB7IC8vIEVudHJ5IDExMjkKKyAgICAweDEuMDAwMDAwMDAwMDAwMTFiMTkxNDBjMGMwZDU5ZWU3NjBwMCwKKyAgICAweDEuM2EyOGM1OWQ1NDMzYnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEzMAorICAgIC0weDEuMDAwMDAwMDAwMDAwMTFiMTkxNDBjMGMwZDU5ZWU3NjBwMCwKKyAgICAtMHgxLjNhMjhjNTlkNTQzM2JwNAorICB9LAorICB7IC8vIEVudHJ5IDExMzEKKyAgICAweDEuMjhmOTM0MzE1ZTVlYjliNDVhNjAzYTVmNzg4ZGUxMzFwNDcsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTJwNAorICB9LAorICB7IC8vIEVudHJ5IDExMzIKKyAgICAtMHgxLjI4ZjkzNDMxNWU1ZWI5YjQ1YTYwM2E1Zjc4OGRlMTMxcDQ3LAorICAgIC0weDEuNDZiOWMzNDc3NjRhMnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEzMworICAgIDB4MS42MThmZGI3ZjIxYzEzYzIzNmE0YzQ1NTFmZjEzOWY1ZHA0OCwKKyAgICAweDEuNDZiOWMzNDc3NjRhM3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTEzNAorICAgIC0weDEuNjE4ZmRiN2YyMWMxM2MyMzZhNGM0NTUxZmYxMzlmNWRwNDgsCisgICAgLTB4MS40NmI5YzM0Nzc2NGEzcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTM1CisgICAgLTB4MS5jZmRlNjEyMThhYjllNzlmZmU4ZjA0NmFmZGYwMGRlM3A0OSwKKyAgICAweDEuNDZiOWMzNDc3NjRhNHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEzNgorICAgIDB4MS5jZmRlNjEyMThhYjllNzlmZmU4ZjA0NmFmZGYwMGRlM3A0OSwKKyAgICAtMHgxLjQ2YjljMzQ3NzY0YTRwNAorICB9LAorICB7IC8vIEVudHJ5IDExMzcKKyAgICAtMHgxLjAwMDAwMDAwMDAwMmY3MjE4MWQ4Yzk3MTkzZjllZTQ5cDAsCisgICAgMHgxLjUzNGFjMGYxOTg2MGJwNAorICB9LAorICB7IC8vIEVudHJ5IDExMzgKKyAgICAweDEuMDAwMDAwMDAwMDAyZjcyMTgxZDhjOTcxOTNmOWVlNDlwMCwKKyAgICAtMHgxLjUzNGFjMGYxOTg2MGJwNAorICB9LAorICB7IC8vIEVudHJ5IDExMzkKKyAgICAtMHgxLjAwMDAwMDAwMDAwMGY3MjE4MWQ4Yzk2ZGE1YjZlYTk4cDAsCisgICAgMHgxLjUzNGFjMGYxOTg2MGNwNAorICB9LAorICB7IC8vIEVudHJ5IDExNDAKKyAgICAweDEuMDAwMDAwMDAwMDAwZjcyMTgxZDhjOTZkYTViNmVhOThwMCwKKyAgICAtMHgxLjUzNGFjMGYxOTg2MGNwNAorICB9LAorICB7IC8vIEVudHJ5IDExNDEKKyAgICAtMHgxLmZmZmZmZmZmZmZmZGVlNDMwM2IxOTJkYjZlZTdjZGNkcC0xLAorICAgIDB4MS41MzRhYzBmMTk4NjBkcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQyCisgICAgMHgxLmZmZmZmZmZmZmZmZGVlNDMwM2IxOTJkYjZlZTdjZGNkcC0xLAorICAgIC0weDEuNTM0YWMwZjE5ODYwZHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTE0MworICAgIC0weDEuM2RjNTg1YjJjNzQyMTgxMzI2ZTA3YzQxMmMyNGEwNTJwLTQ4LAorICAgIDB4MS41ZmRiYmU5YmJhNzc0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQ0CisgICAgMHgxLjNkYzU4NWIyYzc0MjE4MTMyNmUwN2M0MTJjMjRhMDUycC00OCwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzRwNAorICB9LAorICB7IC8vIEVudHJ5IDExNDUKKyAgICAtMHgxLmVlMmMyZDk2M2ExMGMwOTkzNzAzZTIwNDUxMTA1OTVlcC01MSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTE0NgorICAgIDB4MS5lZTJjMmQ5NjNhMTBjMDk5MzcwM2UyMDQ1MTEwNTk1ZXAtNTEsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc1cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQ3CisgICAgMHgxLjg0NzRmNDlhNzE3YmNmZDliMjNmMDc3ZjM4YWFmZDJhcC00OSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTE0OAorICAgIC0weDEuODQ3NGY0OWE3MTdiY2ZkOWIyM2YwNzdmMzhhYWZkMmFwLTQ5LAorICAgIC0weDEuNWZkYmJlOWJiYTc3NnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTE0OQorICAgIDB4MS5mZmZmZmZmZmZmZjgwMDE2ZDYxYjU4ZDk5YmU3OTk0ZXAtMSwKKyAgICAweDEuNmM2Y2JjNDVkYzhkY3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTE1MAorICAgIC0weDEuZmZmZmZmZmZmZmY4MDAxNmQ2MWI1OGQ5OWJlNzk5NGVwLTEsCisgICAgLTB4MS42YzZjYmM0NWRjOGRjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUxCisgICAgMHgxLmZmZmZmZmZmZmZmYzAwMTZkNjFiNThjZDljMTU0NTg1cC0xLAorICAgIDB4MS42YzZjYmM0NWRjOGRkcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUyCisgICAgLTB4MS5mZmZmZmZmZmZmZmMwMDE2ZDYxYjU4Y2Q5YzE1NDU4NXAtMSwKKyAgICAtMHgxLjZjNmNiYzQ1ZGM4ZGRwNAorICB9LAorICB7IC8vIEVudHJ5IDExNTMKKyAgICAweDEuMDAwMDAwMDAwMDAwMDAwYjZiMGRhYzY0Y2UyMTc4ZGRwMCwKKyAgICAweDEuNmM2Y2JjNDVkYzhkZXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTE1NAorICAgIC0weDEuMDAwMDAwMDAwMDAwMDAwYjZiMGRhYzY0Y2UyMTc4ZGRwMCwKKyAgICAtMHgxLjZjNmNiYzQ1ZGM4ZGVwNAorICB9LAorICB7IC8vIEVudHJ5IDExNTUKKyAgICAweDEuMjMyNmY0ZThmMmJiMTgwZTViZjA0MTdkNzVlYTVkOWVwNDcsCisgICAgMHgxLjc4ZmRiOWVmZmVhNDVwNAorICB9LAorICB7IC8vIEVudHJ5IDExNTYKKyAgICAtMHgxLjIzMjZmNGU4ZjJiYjE4MGU1YmYwNDE3ZDc1ZWE1ZDllcDQ3LAorICAgIC0weDEuNzhmZGI5ZWZmZWE0NXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTE1NworICAgIDB4MS41MTdlYTA4NzA4YmE2OWRhMzMzYThjODVmM2JjNjYwOXA0OCwKKyAgICAweDEuNzhmZGI5ZWZmZWE0NnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTE1OAorICAgIC0weDEuNTE3ZWEwODcwOGJhNjlkYTMzM2E4Yzg1ZjNiYzY2MDlwNDgsCisgICAgLTB4MS43OGZkYjllZmZlYTQ2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTU5CisgICAgLTB4MS4wOTBiM2Q1MTYxNzg1YWMyZDMxNjYzZjdlNWQ2YmVkNHA1MCwKKyAgICAweDEuNzhmZGI5ZWZmZWE0N3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTE2MAorICAgIDB4MS4wOTBiM2Q1MTYxNzg1YWMyZDMxNjYzZjdlNWQ2YmVkNHA1MCwKKyAgICAtMHgxLjc4ZmRiOWVmZmVhNDdwNAorICB9LAorICB7IC8vIEVudHJ5IDExNjEKKyAgICAtMHgxLjAwMDAwMDAwMDAwMzA4YzdhODBiZGRjZGNmY2M3ZGU3cDAsCisgICAgMHgxLjg1OGViNzlhMjBiYWVwNAorICB9LAorICB7IC8vIEVudHJ5IDExNjIKKyAgICAweDEuMDAwMDAwMDAwMDAzMDhjN2E4MGJkZGNkY2ZjYzdkZTdwMCwKKyAgICAtMHgxLjg1OGViNzlhMjBiYWVwNAorICB9LAorICB7IC8vIEVudHJ5IDExNjMKKyAgICAtMHgxLjAwMDAwMDAwMDAwMTA4YzdhODBiZGRjOWJlM2QyZGNmcDAsCisgICAgMHgxLjg1OGViNzlhMjBiYWZwNAorICB9LAorICB7IC8vIEVudHJ5IDExNjQKKyAgICAweDEuMDAwMDAwMDAwMDAxMDhjN2E4MGJkZGM5YmUzZDJkY2ZwMCwKKyAgICAtMHgxLjg1OGViNzlhMjBiYWZwNAorICB9LAorICB7IC8vIEVudHJ5IDExNjUKKyAgICAtMHgxLmZmZmZmZmZmZmZmZTExOGY1MDE3YmI5MzU5NWJiYjZmcC0xLAorICAgIDB4MS44NThlYjc5YTIwYmIwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTY2CisgICAgMHgxLmZmZmZmZmZmZmZmZTExOGY1MDE3YmI5MzU5NWJiYjZmcC0xLAorICAgIC0weDEuODU4ZWI3OWEyMGJiMHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTE2NworICAgIC0weDEuYWYwNzkyMDAxZjg1NjMzNWEzODAxMGE2YTY4MzJlNmJwMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnA2MgorICB9LAorICB7IC8vIEVudHJ5IDExNjgKKyAgICAweDEuYWYwNzkyMDAxZjg1NjMzNWEzODAxMGE2YTY4MzJlNmJwMiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTY5CisgICAgMHgxLjUyZjUwZTc1Nzk0MWNiZmY1YjdjMmUwNmExYWI3ZTlkcDYsCisgICAgMHgxLjBwNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTcwCisgICAgLTB4MS41MmY1MGU3NTc5NDFjYmZmNWI3YzJlMDZhMWFiN2U5ZHA2LAorICAgIC0weDEuMHA2MworICB9LAorICB7IC8vIEVudHJ5IDExNzEKKyAgICAweDEuNzU3MDY2N2QwMzJlY2E4ZWY3ODBhZDU5ZDNlMjdlNGJwMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXA2MworICB9LAorICB7IC8vIEVudHJ5IDExNzIKKyAgICAtMHgxLjc1NzA2NjdkMDMyZWNhOGVmNzgwYWQ1OWQzZTI3ZTRicDEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDYzCisgIH0sCisgIHsgLy8gRW50cnkgMTE3MworICAgIC0weDEuMmU4ZmMyNDhlN2I4NTRmZTVjMmRjOWQyODdkZTBjZDNwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAyNgorICB9LAorICB7IC8vIEVudHJ5IDExNzQKKyAgICAweDEuMmU4ZmMyNDhlN2I4NTRmZTVjMmRjOWQyODdkZTBjZDNwMCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTc1CisgICAgLTB4MS4yZThmYzFhZjgxZDhiYWE4ODk5YTMzMjUyMDBjMGRjYnAwLAorICAgIDB4MS4wcDI3CisgIH0sCisgIHsgLy8gRW50cnkgMTE3NgorICAgIDB4MS4yZThmYzFhZjgxZDhiYWE4ODk5YTMzMjUyMDBjMGRjYnAwLAorICAgIC0weDEuMHAyNworICB9LAorICB7IC8vIEVudHJ5IDExNzcKKyAgICAtMHgxLjJlOGZjMDdjYjYxYTk1ZWY1ZTVkOGQ2NDE2NjUyYzdhcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTc4CisgICAgMHgxLjJlOGZjMDdjYjYxYTk1ZWY1ZTVkOGQ2NDE2NjUyYzdhcDAsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDI3CisgIH0sCisgIHsgLy8gRW50cnkgMTE3OQorICAgIC0weDEuM2VhMjgyODYwZTdmYmUxNzY1NjA3YzJmZGIzMjQ4MWZwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAyMworICB9LAorICB7IC8vIEVudHJ5IDExODAKKyAgICAweDEuM2VhMjgyODYwZTdmYmUxNzY1NjA3YzJmZGIzMjQ4MWZwMCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgxCisgICAgLTB4MS4zZWEyODI3MWE5YmVhMzZlNzQ0ZjljZTUzN2JhNGI1OXAwLAorICAgIDB4MS4wcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTE4MgorICAgIDB4MS4zZWEyODI3MWE5YmVhMzZlNzQ0ZjljZTUzN2JhNGI1OXAwLAorICAgIC0weDEuMHAyNAorICB9LAorICB7IC8vIEVudHJ5IDExODMKKyAgICAtMHgxLjNlYTI4MjQ4ZTAzYzcyZGVmNzBlN2VmYjRjNDNmMDNlcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTg0CisgICAgMHgxLjNlYTI4MjQ4ZTAzYzcyZGVmNzBlN2VmYjRjNDNmMDNlcDAsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTE4NQorICAgIDB4MS4yODY2ZjliZTRkZTBlYzI3ZWZhOTA0OWFiODBiYmQ2Y3AwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTg2CisgICAgLTB4MS4yODY2ZjliZTRkZTBlYzI3ZWZhOTA0OWFiODBiYmQ2Y3AwLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTE4NworICAgIDB4MS4yODY2ZjliZTRkZTEzNzBkYjkwNzg2MDcwMTJjYjA3YnAwLAorICAgIDB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTg4CisgICAgLTB4MS4yODY2ZjliZTRkZTEzNzBkYjkwNzg2MDcwMTJjYjA3YnAwLAorICAgIC0weDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE4OQorICAgIDB4MS4yODY2ZjliZTRkZTFjY2Q5NGJjNDg4ZGZkNDc4NzNhZnAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTkwCisgICAgLTB4MS4yODY2ZjliZTRkZTFjY2Q5NGJjNDg4ZGZkNDc4NzNhZnAwLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE5MQorICAgIC0weDEuMTdhZjYyZTA5NTBmYjFlNzAxYzY0MmVmODczN2Y1MTZwMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTE5MgorICAgIDB4MS4xN2FmNjJlMDk1MGZiMWU3MDFjNjQyZWY4NzM3ZjUxNnAxLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTE5MworICAgIC0weDEuMTdhZjYyZTA5NTBmODNiNTA5OTA4N2FhZjY3YWY5YzFwMSwKKyAgICAweDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTE5NAorICAgIDB4MS4xN2FmNjJlMDk1MGY4M2I1MDk5MDg3YWFmNjdhZjljMXAxLAorICAgIC0weDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTE5NQorICAgIC0weDEuMTdhZjYyZTA5NTBmMjc1MTE5MjUxMTIxZmFkYjE3YmFwMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTE5NgorICAgIDB4MS4xN2FmNjJlMDk1MGYyNzUxMTkyNTExMjFmYWRiMTdiYXAxLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTE5NworICAgIDB4MS44ZWIyNDVjYmVlM2E0MDIzNTYxM2U3NTc1MDIwZDMwZHAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTE5OAorICAgIC0weDEuOGViMjQ1Y2JlZTNhNDAyMzU2MTNlNzU3NTAyMGQzMGRwMCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTk5CisgICAgMHgxLjhlYjI0NWNiZWUzYTViOGFjYzdkNDEzMjMxNDBiM2I1cDAsCisgICAgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDEyMDAKKyAgICAtMHgxLjhlYjI0NWNiZWUzYTViOGFjYzdkNDEzMjMxNDBiM2I1cDAsCisgICAgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAxCisgICAgMHgxLjhlYjI0NWNiZWUzYTkyNTliOTRmZjRlN2ZiODExMWVjcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDEyMDIKKyAgICAtMHgxLjhlYjI0NWNiZWUzYTkyNTliOTRmZjRlN2ZiODExMWVjcDAsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAzCisgICAgMHgxLjE3YjRmNWJmMzQ3NDk5Y2U0MTg1NWRlZTQzNDRiZDFkcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTIwNAorICAgIC0weDEuMTdiNGY1YmYzNDc0OTljZTQxODU1ZGVlNDM0NGJkMWRwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTIwNQorICAgIDB4MS4xN2I0ZjViZjM0NzRhNDMxNzk2NDgwNzg4MjQ0NGNjOHAtMSwKKyAgICAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEyMDYKKyAgICAtMHgxLjE3YjRmNWJmMzQ3NGE0MzE3OTY0ODA3ODgyNDQ0Y2M4cC0xLAorICAgIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEyMDcKKyAgICAweDEuMTdiNGY1YmYzNDc0YjhmN2U5MjJjNThkMDBjYjlkZDJwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjA4CisgICAgLTB4MS4xN2I0ZjViZjM0NzRiOGY3ZTkyMmM1OGQwMGNiOWRkMnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjA5CisgICAgMHgxLjA1Nzg1YTQzYzRjNTU1ZGUwY2IxMzcxZjEwZGIzMWFmcC0yLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTIxMAorICAgIC0weDEuMDU3ODVhNDNjNGM1NTVkZTBjYjEzNzFmMTBkYjMxYWZwLTIsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTIxMQorICAgIDB4MS4wNTc4NWE0M2M0YzU1ZTYzOTQwMTg4OTY1YzI4YmQwZnAtMiwKKyAgICAweDEuMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEyMTIKKyAgICAtMHgxLjA1Nzg1YTQzYzRjNTVlNjM5NDAxODg5NjVjMjhiZDBmcC0yLAorICAgIC0weDEuMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEyMTMKKyAgICAweDEuMDU3ODVhNDNjNGM1NmY2ZWEyYTIyYjg0ZjJkZGYwM2ZwLTIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjE0CisgICAgLTB4MS4wNTc4NWE0M2M0YzU2ZjZlYTJhMjJiODRmMmRkZjAzZnAtMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjE1CisgICAgMHgxLjAxNTc3YWYxNTExYTQ1ZTQwM2RkNjBjOGQ4MjU5MGQwcC0zLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTIxNgorICAgIC0weDEuMDE1NzdhZjE1MTFhNDVlNDAzZGQ2MGM4ZDgyNTkwZDBwLTMsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTIxNworICAgIDB4MS4wMTU3N2FmMTUxMWE0ZTA0NTlmNWI4NzJkNGZmMzRmZHAtMywKKyAgICAweDEuMHAtMworICB9LAorICB7IC8vIEVudHJ5IDEyMTgKKyAgICAtMHgxLjAxNTc3YWYxNTExYTRlMDQ1OWY1Yjg3MmQ0ZmYzNGZkcC0zLAorICAgIC0weDEuMHAtMworICB9LAorICB7IC8vIEVudHJ5IDEyMTkKKyAgICAweDEuMDE1NzdhZjE1MTFhNWU0NTA2MjY2N2M2Y2ViODlkYzRwLTMsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjIwCisgICAgLTB4MS4wMTU3N2FmMTUxMWE1ZTQ1MDYyNjY3YzZjZWI4OWRjNHAtMywKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjIxCisgICAgMHgxLjAwNTU3Nzg1NGRmMDAwMmE4ZTY2MDZmNmM2MThkOTg4cC00LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTIyMgorICAgIC0weDEuMDA1NTc3ODU0ZGYwMDAyYThlNjYwNmY2YzYxOGQ5ODhwLTQsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTIyMworICAgIDB4MS4wMDU1Nzc4NTRkZjAwODMyOTNiZTYzOTA1N2IwYzY4MXAtNCwKKyAgICAweDEuMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDEyMjQKKyAgICAtMHgxLjAwNTU3Nzg1NGRmMDA4MzI5M2JlNjM5MDU3YjBjNjgxcC00LAorICAgIC0weDEuMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDEyMjUKKyAgICAweDEuMDA1NTc3ODU0ZGYwMTg0MjllNmYxY2MzN2FlMjIyNzRwLTQsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjI2CisgICAgLTB4MS4wMDU1Nzc4NTRkZjAxODQyOWU2ZjFjYzM3YWUyMjI3NHAtNCwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjI3CisgICAgMHgxLjAwMTU1Nzc3YWVjMDdkN2IyMjc0MWQxMmVlNTNhOWZjcC01LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTIyOAorICAgIC0weDEuMDAxNTU3NzdhZWMwN2Q3YjIyNzQxZDEyZWU1M2E5ZmNwLTUsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTIyOQorICAgIDB4MS4wMDE1NTc3N2FlYzA4NTdkMjJjOTdlODA5ODYwMjg4ZHAtNSwKKyAgICAweDEuMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDEyMzAKKyAgICAtMHgxLjAwMTU1Nzc3YWVjMDg1N2QyMmM5N2U4MDk4NjAyODhkcC01LAorICAgIC0weDEuMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDEyMzEKKyAgICAweDEuMDAxNTU3NzdhZWMwOTU4MTIzNzQ0MTViZWM3OTg1Y2VwLTUsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjMyCisgICAgLTB4MS4wMDE1NTc3N2FlYzA5NTgxMjM3NDQxNWJlYzc5ODVjZXAtNSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjMzCisgICAgMHgxLjAwMDU1NTc3Nzg1NDgyZTEzNWYwYWZlZWJlODA1YWRicC02LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTIzNAorICAgIC0weDEuMDAwNTU1Nzc3ODU0ODJlMTM1ZjBhZmVlYmU4MDVhZGJwLTYsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTIzNQorICAgIDB4MS4wMDA1NTU3Nzc4NTQ4YWUxYjVmNjA1NzQ3MDZlODIzOHAtNiwKKyAgICAweDEuMHAtNgorICB9LAorICB7IC8vIEVudHJ5IDEyMzYKKyAgICAtMHgxLjAwMDU1NTc3Nzg1NDhhZTFiNWY2MDU3NDcwNmU4MjM4cC02LAorICAgIC0weDEuMHAtNgorICB9LAorICB7IC8vIEVudHJ5IDEyMzcKKyAgICAweDEuMDAwNTU1Nzc3ODU0OWFlMmI2MDBiMDdmZDQ0YWU4ZjNwLTYsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjM4CisgICAgLTB4MS4wMDA1NTU3Nzc4NTQ5YWUyYjYwMGIwN2ZkNDRhZThmM3AtNiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjM5CisgICAgMHgxLjAwMDAwMDA1NTU1NTRkNzc3Nzc2Zjg1NDg1NDMwNGM5cC0xNCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQwCisgICAgLTB4MS4wMDAwMDAwNTU1NTU0ZDc3Nzc3NmY4NTQ4NTQzMDRjOXAtMTQsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0xNQorICB9LAorICB7IC8vIEVudHJ5IDEyNDEKKyAgICAweDEuMDAwMDAwMDU1NTU1NTU3Nzc3Nzc3ODU0ODU0ODVhMWVwLTE0LAorICAgIDB4MS4wcC0xNAorICB9LAorICB7IC8vIEVudHJ5IDEyNDIKKyAgICAtMHgxLjAwMDAwMDA1NTU1NTU1Nzc3Nzc3Nzg1NDg1NDg1YTFlcC0xNCwKKyAgICAtMHgxLjBwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTI0MworICAgIDB4MS4wMDAwMDAwNTU1NTU2NTc3Nzc3ODc4NTQ4NTUzMDRjOXAtMTQsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTI0NAorICAgIC0weDEuMDAwMDAwMDU1NTU1NjU3Nzc3Nzg3ODU0ODU1MzA0YzlwLTE0LAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQ1CisgICAgMHgxLmZmZmZmZmZmZmZmZmYyYWFhYWFhYWFhYWFhNmVlZWVlcC0yOCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQ2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmMmFhYWFhYWFhYWFhYTZlZWVlZXAtMjgsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0yOAorICB9LAorICB7IC8vIEVudHJ5IDEyNDcKKyAgICAweDEuMDAwMDAwMDAwMDAwMDE1NTU1NTU1NTU1NTU1Nzc3NzdwLTI3LAorICAgIDB4MS4wcC0yNworICB9LAorICB7IC8vIEVudHJ5IDEyNDgKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDAxNTU1NTU1NTU1NTU1NTc3Nzc3cC0yNywKKyAgICAtMHgxLjBwLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTI0OQorICAgIDB4MS4wMDAwMDAwMDAwMDAxMTU1NTU1NTU1NTU1NTk3Nzc3N3AtMjcsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTI1MAorICAgIC0weDEuMDAwMDAwMDAwMDAwMTE1NTU1NTU1NTU1NTU5Nzc3NzdwLTI3LAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUxCisgICAgMHgxLmZmZmZmZmZmZmZmZmYwMGFhYWFhYWFhYWFhYTlhYWVlcC0zMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUyCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmMDBhYWFhYWFhYWFhYWE5YWFlZXAtMzEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0zMQorICB9LAorICB7IC8vIEVudHJ5IDEyNTMKKyAgICAweDEuMDAwMDAwMDAwMDAwMDAwNTU1NTU1NTU1NTU1NTU1NzdwLTMwLAorICAgIDB4MS4wcC0zMAorICB9LAorICB7IC8vIEVudHJ5IDEyNTQKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDAwMDU1NTU1NTU1NTU1NTU1NTc3cC0zMCwKKyAgICAtMHgxLjBwLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTI1NQorICAgIDB4MS4wMDAwMDAwMDAwMDAxMDA1NTU1NTU1NTU1NTU2NTU3N3AtMzAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTI1NgorICAgIC0weDEuMDAwMDAwMDAwMDAwMTAwNTU1NTU1NTU1NTU1NjU1NzdwLTMwLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjU3CisgICAgMHgxLjQ1MzBjZmU3Mjk0ODNiOGRhMWY3MTAxZTE2Y2Q3NGI3cC04LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTI1OAorICAgIC0weDEuNDUzMGNmZTcyOTQ4M2I4ZGExZjcxMDFlMTZjZDc0YjdwLTgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEyNTkKKyAgICAtMHgxLjQ1MzBjZmU3Mjk0ODNiOGRhMWY3MTAxZTE2Y2Q3NGI3cC04LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYwCisgICAgMHgxLjQ1MzBjZmU3Mjk0ODNiOGRhMWY3MTAxZTE2Y2Q3NGI3cC04LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTI2MQorICAgIC0weDEuNDUzMGNmZTcyOTQ4M2I4ZGExZjcxMDFlMTZjZDc0YjdwLTgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEyNjIKKyAgICAweDEuNDUzMGNmZTcyOTQ4M2I4ZGExZjcxMDFlMTZjZDc0YjdwLTgsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYzCisgICAgMHgxLjNjNmU5OTcwZjc4Yjg0ZmM4MjI3NTE3ZmQ1MjEwMTdicDEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEyNjQKKyAgICAtMHgxLjNjNmU5OTcwZjc4Yjg0ZmM4MjI3NTE3ZmQ1MjEwMTdicDEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjY1CisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDYxZDVkN3AtNTMsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDEyNjYKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQ2MWQ1ZDdwLTUzLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTI2NworICAgIDB4MS5kMDI5NjdjMzFjZGI0ZTBjMzhkMDFiNjU1ZDVlMGFhZnA1MywKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTI2OAorICAgIC0weDEuZDAyOTY3YzMxY2RiNGUwYzM4ZDAxYjY1NWQ1ZTBhYWZwNTMsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjY5CisgICAgMHgxLjhlYjI0NWNiZWUzYTkyNTliOTRmZjRlN2ZiODExMWVjcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDEyNzAKKyAgICAtMHgxLjhlYjI0NWNiZWUzYTkyNTliOTRmZjRlN2ZiODExMWVjcDAsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcxCisgICAgMHgxLjhlYjI0NWNiZWUzYTViOGFjYzdkNDEzMjMxNDBiM2I1cDAsCisgICAgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDEyNzIKKyAgICAtMHgxLjhlYjI0NWNiZWUzYTViOGFjYzdkNDEzMjMxNDBiM2I1cDAsCisgICAgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjczCisgICAgMHgxLjhlYjI0NWNiZWUzYTQwMjM1NjEzZTc1NzUwMjBkMzBkcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjc0CisgICAgLTB4MS44ZWIyNDVjYmVlM2E0MDIzNTYxM2U3NTc1MDIwZDMwZHAwLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEyNzUKKyAgICAweDEuZmZmZmZmZmZmZmZmZjcyY2VjZTY3NWQxZmNhMzA0ODlwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjc2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmNzJjZWNlNjc1ZDFmY2EzMDQ4OXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjc3CisgICAgMHgxLjAwMDAwMDAwMDAwMDEwcC0xMDIyLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgMTI3OAorICAgIC0weDEuMDAwMDAwMDAwMDAwMTBwLTEwMjIsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgMTI3OQorICAgIDB4MS5wLTEwMjIsCisgICAgMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgwCisgICAgLTB4MS5wLTEwMjIsCisgICAgLTB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgMTI4MQorICAgIDB4MS5mZmZmZmZmZmZmZmZlMHAtMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEyODIKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmUwcC0xMDIzLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEyODMKKyAgICAweDEuZmZmZmZmZmZmZmZmYzBwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmNwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjg0CisgICAgLTB4MS5mZmZmZmZmZmZmZmZjMHAtMTAyMywKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmNwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjg1CisgICAgMHgxLnAtMTA3MywKKyAgICAweDEuMHAtMTA3MworICB9LAorICB7IC8vIEVudHJ5IDEyODYKKyAgICAtMHgxLnAtMTA3MywKKyAgICAtMHgxLjBwLTEwNzMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjg3CisgICAgMHgxLnAtMTA3NCwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDEyODgKKyAgICAtMHgxLnAtMTA3NCwKKyAgICAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjg5CisgICAgMC4wLAorICAgIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDEyOTAKKyAgICAtMC4wLAorICAgIC0wLjAKKyAgfSwKK307CisjZW5kaWYgLy8gX19CSU9OSUNfXworCitURVNUKG1hdGhfdGFuLCB0YW5faW50ZWwpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGdfdGFuX2ludGVsX2RhdGEpL3NpemVvZih0YW5faW50ZWxfZGF0YV90KTsgaSsrKSB7CisgICAgRVhQRUNUX0RPVUJMRV9FUShnX3Rhbl9pbnRlbF9kYXRhW2ldLmV4cGVjdGVkLCB0YW4oZ190YW5faW50ZWxfZGF0YVtpXS5jYWxsX2RhdGEpKSA8PCAiRmFpbGVkIG9uIGVsZW1lbnQgIiA8PCBpOworICB9CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCit9CmRpZmYgLS1naXQgYS90ZXN0cy9tYXRoX3RhbmZfdGVzdC5jcHAgYi90ZXN0cy9tYXRoX3RhbmZfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMxOTA0NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21hdGhfdGFuZl90ZXN0LmNwcApAQCAtMCwwICsxLDQ0NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgZmxvYXQgZXhwZWN0ZWQ7CisgIGZsb2F0IGNhbGxfZGF0YTsKK30gdGFuZl9pbnRlbF9kYXRhX3Q7CisKK3N0YXRpYyB0YW5mX2ludGVsX2RhdGFfdCBnX3RhbmZfaW50ZWxfZGF0YVtdID0geworICB7IC8vIEVudHJ5IDAKKyAgICAtMHgxLjAwMDAwMDAwMDAxNTU1NTU1NTU1NTc3Nzc3Nzc3Nzc3cC0yMSwKKyAgICAtMHgxLnAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxCisgICAgMHgxLjAwMDAwMDAwMDAxNTU1NTU1NTU1NTc3Nzc3Nzc3Nzc3cC0yMSwKKyAgICAweDEucC0yMQorICB9LAorICB7IC8vIEVudHJ5IDIKKyAgICAtMHgxLnAtMTQ5LAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzCisgICAgMHgxLnAtMTQ5LAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDQKKyAgICAtMHgxLjAwMDAwMjAwMDAwMDAwMDAwMDAwMTU1NTU1ZDU1NTU2cC00MSwKKyAgICAtMHgxLjAwMDAwMnAtNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1CisgICAgMHgxLjAwMDAwMjAwMDAwMDAwMDAwMDAwMTU1NTU1ZDU1NTU2cC00MSwKKyAgICAweDEuMDAwMDAycC00MQorICB9LAorICB7IC8vIEVudHJ5IDYKKyAgICAtMHgxLmZmYjdlYjAwNGI3ZTEyYjM2OTM4OGZhYWEwMzQyZjZjcC0zLAorICAgIC0weDEuMjdjY2E2cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA3CisgICAgMHgxLmZmYjdlYjAwNGI3ZTEyYjM2OTM4OGZhYWEwMzQyZjZjcC0zLAorICAgIDB4MS4yN2NjYTZwNworICB9LAorICB7IC8vIEVudHJ5IDgKKyAgICAtMHgxLjNiN2RkYWZmZGM5YTJmYWQzOWYzMjk3NDNmYmY0OWU1cDQsCisgICAgLTB4MS4yYTU5OTZwMgorICB9LAorICB7IC8vIEVudHJ5IDkKKyAgICAweDEuM2I3ZGRhZmZkYzlhMmZhZDM5ZjMyOTc0M2ZiZjQ5ZTVwNCwKKyAgICAweDEuMmE1OTk2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMAorICAgIDB4MS44MTlmMzJmZmQ5N2IxZWQ2NjdiYzE0MzM4NzAzN2RkZXAtMSwKKyAgICAtMHgxLjNmN2YyMnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTEKKyAgICAtMHgxLjgxOWYzMmZmZDk3YjFlZDY2N2JjMTQzMzg3MDM3ZGRlcC0xLAorICAgIDB4MS4zZjdmMjJwMQorICB9LAorICB7IC8vIEVudHJ5IDEyCisgICAgLTB4MS40MDVmOTAwMDAwMDAwMDAwMDAwYTc0MDI4NDY1ODNkMHAtMzgsCisgICAgLTB4MS40MDVmOTBwLTM4CisgIH0sCisgIHsgLy8gRW50cnkgMTMKKyAgICAweDEuNDA1ZjkwMDAwMDAwMDAwMDAwMGE3NDAyODQ2NTgzZDBwLTM4LAorICAgIDB4MS40MDVmOTBwLTM4CisgIH0sCisgIHsgLy8gRW50cnkgMTQKKyAgICAtMHgxLjhjZDc5OTk1MzQ0Yzc5NDNjN2IzZTAyMTYwN2RhM2NicC0yLAorICAgIC0weDEuNDk2ZTgwcDk2CisgIH0sCisgIHsgLy8gRW50cnkgMTUKKyAgICAweDEuOGNkNzk5OTUzNDRjNzk0M2M3YjNlMDIxNjA3ZGEzY2JwLTIsCisgICAgMHgxLjQ5NmU4MHA5NgorICB9LAorICB7IC8vIEVudHJ5IDE2CisgICAgMHgxLmUxNDQ0NzFlYTJiNDliNmMxZmRjZWZmOGNjY2VlYTdicDEwLAorICAgIC0weDEuNWZlMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTcKKyAgICAtMHgxLmUxNDQ0NzFlYTJiNDliNmMxZmRjZWZmOGNjY2VlYTdicDEwLAorICAgIDB4MS41ZmUwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOAorICAgIC0weDEuY2EwZjRjMjMxNWFiNWE5NzI5ZTZhZmE4NTc2NzdiM2ZwLTEsCisgICAgLTB4MS43NWFlZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOQorICAgIDB4MS5jYTBmNGMyMzE1YWI1YTk3MjllNmFmYTg1NzY3N2IzZnAtMSwKKyAgICAweDEuNzVhZWYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjAKKyAgICAtMHgxLmMzM2VkNTBiODg3Nzc1YTVkNjEzYzA4YzQ4OGZiYjljcDMsCisgICAgLTB4MS44MHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjEKKyAgICAweDEuYzMzZWQ1MGI4ODc3NzVhNWQ2MTNjMDhjNDg4ZmJiOWNwMywKKyAgICAweDEuODBwMAorICB9LAorICB7IC8vIEVudHJ5IDIyCisgICAgLTB4MS5jMzQ1MTNlZTcxNDBmZGI4MjE3ZTgzZGMyZDZkNmY1M3AzLAorICAgIC0weDEuODAwMDQwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMworICAgIDB4MS5jMzQ1MTNlZTcxNDBmZGI4MjE3ZTgzZGMyZDZkNmY1M3AzLAorICAgIDB4MS44MDAwNDBwMAorICB9LAorICB7IC8vIEVudHJ5IDI0CisgICAgMHgxLjRlNmI4YTQ4MTY0YjllMWQ4MTc1ZTQ1MTJhYjIyZmYxcDAsCisgICAgLTB4MS44ZTM1NjBwOTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNQorICAgIC0weDEuNGU2YjhhNDgxNjRiOWUxZDgxNzVlNDUxMmFiMjJmZjFwMCwKKyAgICAweDEuOGUzNTYwcDk4CisgIH0sCisgIHsgLy8gRW50cnkgMjYKKyAgICAtMHgxLmQwMTdlMDIxNGE5NTMyNjVkOGRkNWMwYTExZWE2MWQxcC0xLAorICAgIC0weDEuOWRlN2Q0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNworICAgIDB4MS5kMDE3ZTAyMTRhOTUzMjY1ZDhkZDVjMGExMWVhNjFkMXAtMSwKKyAgICAweDEuOWRlN2Q0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOAorICAgIC0weDEuZDA0NzNmMDIyNzBjMGVlYzg4M2U3NTNlNTA4MDA2NzBwLTEsCisgICAgLTB4MS45ZGU4YTRwNAorICB9LAorICB7IC8vIEVudHJ5IDI5CisgICAgMHgxLmQwNDczZjAyMjcwYzBlZWM4ODNlNzUzZTUwODAwNjcwcC0xLAorICAgIDB4MS45ZGU4YTRwNAorICB9LAorICB7IC8vIEVudHJ5IDMwCisgICAgMHgxLmQwYWFkYTIyYWE1ZTNkYzM1YjUwNjNjNjM5MDQ3ZGY1cC0xLAorICAgIC0weDEuYmU3ZTVhcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMQorICAgIC0weDEuZDBhYWRhMjJhYTVlM2RjMzViNTA2M2M2MzkwNDdkZjVwLTEsCisgICAgMHgxLmJlN2U1YXA1CisgIH0sCisgIHsgLy8gRW50cnkgMzIKKyAgICAtMHgxLmVlOTQ5NTAwMGExOTBjZGI2ZGIzZTgzZDJjMDVlZjM4cC0yLAorICAgIC0weDEuY2NiZWIwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzMKKyAgICAweDEuZWU5NDk1MDAwYTE5MGNkYjZkYjNlODNkMmMwNWVmMzhwLTIsCisgICAgMHgxLmNjYmViMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM0CisgICAgMHgxLmRjMzJlYmE2MzhkMTM0NThjN2IyOWQ5NmFiZmZlMWNhcC03LAorICAgIC0weDEuZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNQorICAgIC0weDEuZGMzMmViYTYzOGQxMzQ1OGM3YjI5ZDk2YWJmZmUxY2FwLTcsCisgICAgMHgxLmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMzYKKyAgICAweDEuMDAwMDAwMDAwMDE1NTU1NTU1NTU1Nzc3Nzc3Nzc3NzdwLTIxLAorICAgIDB4MS5wLTIxCisgIH0sCisgIHsgLy8gRW50cnkgMzcKKyAgICAtMHgxLjAwMDAwMDAwMDAxNTU1NTU1NTU1NTc3Nzc3Nzc3Nzc3cC0yMSwKKyAgICAtMHgxLnAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOAorICAgIDB4MS5wLTEzMSwKKyAgICAweDEucC0xMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOQorICAgIC0weDEucC0xMzEsCisgICAgLTB4MS5wLTEzMQorICB9LAorICB7IC8vIEVudHJ5IDQwCisgICAgMHgxLnAtMTQ5LAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDQxCisgICAgLTB4MS5wLTE0OSwKKyAgICAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNDIKKyAgICAweDEuNTJmNTBlNzU3OTQxY2JmZjViN2MyZTA2YTFhYjdlOWRwNiwKKyAgICAweDEucDYzCisgIH0sCisgIHsgLy8gRW50cnkgNDMKKyAgICAtMHgxLjUyZjUwZTc1Nzk0MWNiZmY1YjdjMmUwNmExYWI3ZTlkcDYsCisgICAgLTB4MS5wNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NAorICAgIDB4MS4wMDAwMDIwMDAwMDAwMDAwMDAwMDE1NTU1NWQ1NTU1NnAtNDEsCisgICAgMHgxLjAwMDAwMnAtNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NQorICAgIC0weDEuMDAwMDAyMDAwMDAwMDAwMDAwMDAxNTU1NTVkNTU1NTZwLTQxLAorICAgIC0weDEuMDAwMDAycC00MQorICB9LAorICB7IC8vIEVudHJ5IDQ2CisgICAgLTB4MS5hZGI3ZWI2ZDhjZWJiZTM2MmYxOTdkYmVkYTVjMTEzY3AtMSwKKyAgICAweDEuMDAwMDAycDUxCisgIH0sCisgIHsgLy8gRW50cnkgNDcKKyAgICAweDEuYWRiN2ViNmQ4Y2ViYmUzNjJmMTk3ZGJlZGE1YzExM2NwLTEsCisgICAgLTB4MS4wMDAwMDJwNTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OAorICAgIDB4MS5mNzc2MmI3NTJiMDA2NzE1ZDkwYzM4OWExMTgyNmQ2YnAxLAorICAgIDB4MS4wMDAwMDRwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgNDkKKyAgICAtMHgxLmY3NzYyYjc1MmIwMDY3MTVkOTBjMzg5YTExODI2ZDZicDEsCisgICAgLTB4MS4wMDAwMDRwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgNTAKKyAgICAtMHgxLjA5Y2ZmMTAwMDA2NzE5MTJjODQ3NjJmMThjMjg1NDcwcDAsCisgICAgMHgxLjAwMDA5MHA3CisgIH0sCisgIHsgLy8gRW50cnkgNTEKKyAgICAweDEuMDljZmYxMDAwMDY3MTkxMmM4NDc2MmYxOGMyODU0NzBwMCwKKyAgICAtMHgxLjAwMDA5MHA3CisgIH0sCisgIHsgLy8gRW50cnkgNTIKKyAgICAweDEuMDE1OTAxMDE3ZWRiNjdhYTdlNTJhZTY5NGU5OTBhMTlwLTMsCisgICAgMHgxLjAwMDE4MHAtMworICB9LAorICB7IC8vIEVudHJ5IDUzCisgICAgLTB4MS4wMTU5MDEwMTdlZGI2N2FhN2U1MmFlNjk0ZTk5MGExOXAtMywKKyAgICAtMHgxLjAwMDE4MHAtMworICB9LAorICB7IC8vIEVudHJ5IDU0CisgICAgMHgxLjAwMDIyMDAwMDAwMDAwMDAwMDAwNTU1Nzc1NTlkOTU4cC00MCwKKyAgICAweDEuMDAwMjIwcC00MAorICB9LAorICB7IC8vIEVudHJ5IDU1CisgICAgLTB4MS4wMDAyMjAwMDAwMDAwMDAwMDAwMDU1NTc3NTU5ZDk1OHAtNDAsCisgICAgLTB4MS4wMDAyMjBwLTQwCisgIH0sCisgIHsgLy8gRW50cnkgNTYKKyAgICAweDEuNmQ1Mzc5NmNkZDQwMWUzZGRjMDllODM1YjhlYTY2MGFwMywKKyAgICAweDEuMDAwMzgwcDEyNworICB9LAorICB7IC8vIEVudHJ5IDU3CisgICAgLTB4MS42ZDUzNzk2Y2RkNDAxZTNkZGMwOWU4MzViOGVhNjYwYXAzLAorICAgIC0weDEuMDAwMzgwcDEyNworICB9LAorICB7IC8vIEVudHJ5IDU4CisgICAgLTB4MS5iMDcwZTNhNjk2ODQ2M2FmNmU5ZGI5MjJlNzg0NTUyNHAtNywKKyAgICAweDEuMDAwODgwcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OQorICAgIDB4MS5iMDcwZTNhNjk2ODQ2M2FmNmU5ZGI5MjJlNzg0NTUyNHAtNywKKyAgICAtMHgxLjAwMDg4MHA5CisgIH0sCisgIHsgLy8gRW50cnkgNjAKKyAgICAtMHgxLmZhNjFkY2ZmYTNlZmUzMjViMzI3MDRmYzQxMjQ2MmNmcDEsCisgICAgMHgxLjAwMjBwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MQorICAgIDB4MS5mYTYxZGNmZmEzZWZlMzI1YjMyNzA0ZmM0MTI0NjJjZnAxLAorICAgIC0weDEuMDAyMHA2MgorICB9LAorICB7IC8vIEVudHJ5IDYyCisgICAgMHgxLmZmZmQ4MjVhM2YzNzdmMDEyMjA5OTgyYTAwYzM0NmYwcC0yLAorICAgIDB4MS4wMDYwcDkwCisgIH0sCisgIHsgLy8gRW50cnkgNjMKKyAgICAtMHgxLmZmZmQ4MjVhM2YzNzdmMDEyMjA5OTgyYTAwYzM0NmYwcC0yLAorICAgIC0weDEuMDA2MHA5MAorICB9LAorICB7IC8vIEVudHJ5IDY0CisgICAgMHgxLjAxM2M2OGZmZjA0YjY5ODE2NWRmZGY5ZDQ4NDQ0YTk1cC02LAorICAgIDB4MS4wMTM3cC02CisgIH0sCisgIHsgLy8gRW50cnkgNjUKKyAgICAtMHgxLjAxM2M2OGZmZjA0YjY5ODE2NWRmZGY5ZDQ4NDQ0YTk1cC02LAorICAgIC0weDEuMDEzN3AtNgorICB9LAorICB7IC8vIEVudHJ5IDY2CisgICAgMHgxLjkzMmM5OTRmNjFkODA0YTA4NGYyMGQ5NzVhNjE3YzUwcDAsCisgICAgMHgxLjAxNGNwMAorICB9LAorICB7IC8vIEVudHJ5IDY3CisgICAgLTB4MS45MzJjOTk0ZjYxZDgwNGEwODRmMjBkOTc1YTYxN2M1MHAwLAorICAgIC0weDEuMDE0Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjgKKyAgICAtMHgxLmMzNGVjMjA1MzNlNzYwNTY1Y2I3NjJiMTVjMThkNmZjcDEsCisgICAgMHgxLjAyMDQ0NnA1OAorICB9LAorICB7IC8vIEVudHJ5IDY5CisgICAgMHgxLmMzNGVjMjA1MzNlNzYwNTY1Y2I3NjJiMTVjMThkNmZjcDEsCisgICAgLTB4MS4wMjA0NDZwNTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MAorICAgIDB4MS45ZmY3MTc2N2VhMDUxZTRlOWNjMDAwODkyMmIxMTEyOXAwLAorICAgIDB4MS4wNGU0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MQorICAgIC0weDEuOWZmNzE3NjdlYTA1MWU0ZTljYzAwMDg5MjJiMTExMjlwMCwKKyAgICAtMHgxLjA0ZTRwMAorICB9LAorICB7IC8vIEVudHJ5IDcyCisgICAgMHgxLjA3YzljNTAwMTY1OTA3OTcyMmY4ZTkxOTBmZmU2ZWM2cC0zLAorICAgIDB4MS4wNjU4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzMKKyAgICAtMHgxLjA3YzljNTAwMTY1OTA3OTcyMmY4ZTkxOTBmZmU2ZWM2cC0zLAorICAgIC0weDEuMDY1OHAtMworICB9LAorICB7IC8vIEVudHJ5IDc0CisgICAgMHgxLmZkNjExMDcyYTUwMzU3ZTYyNjY3NjhiMmNkZjAxOTRjcC0zLAorICAgIDB4MS4wYWM3MTBwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgNzUKKyAgICAtMHgxLmZkNjExMDcyYTUwMzU3ZTYyNjY3NjhiMmNkZjAxOTRjcC0zLAorICAgIC0weDEuMGFjNzEwcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDc2CisgICAgMHgxLjBkZGJiNTAwMDI0NGM0ZmI5NzJlYjcyZGUwMDg5NmMwcC0zLAorICAgIDB4MS4wYzUwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzcKKyAgICAtMHgxLjBkZGJiNTAwMDI0NGM0ZmI5NzJlYjcyZGUwMDg5NmMwcC0zLAorICAgIC0weDEuMGM1MHAtMworICB9LAorICB7IC8vIEVudHJ5IDc4CisgICAgLTB4MS5jMGFlYjVmODRiZTk1ZGE1YWIwNzE2ZGZiYTIwNWUyOHAyLAorICAgIDB4MS4wZGRjcDk2CisgIH0sCisgIHsgLy8gRW50cnkgNzkKKyAgICAweDEuYzBhZWI1Zjg0YmU5NWRhNWFiMDcxNmRmYmEyMDVlMjhwMiwKKyAgICAtMHgxLjBkZGNwOTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MAorICAgIDB4MS4zNDA3NTRmZmZmZmViNzgwNzYxZTg2MzM3ZjBjNTVlZnAxLAorICAgIDB4MS4wZTI4YTZwNAorICB9LAorICB7IC8vIEVudHJ5IDgxCisgICAgLTB4MS4zNDA3NTRmZmZmZmViNzgwNzYxZTg2MzM3ZjBjNTVlZnAxLAorICAgIC0weDEuMGUyOGE2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MgorICAgIDB4MS4zNDlkOTVmZmVlNDcyZWM3YzEwOTM0NTcwZDNiYTQ4NnAtMSwKKyAgICAweDEuMTViY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDgzCisgICAgLTB4MS4zNDlkOTVmZmVlNDcyZWM3YzEwOTM0NTcwZDNiYTQ4NnAtMSwKKyAgICAtMHgxLjE1YmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NAorICAgIDB4MS5lZWM3MjQwM2E0ZmQyNGQwYzllMmFmMDg4YTA1ZmI4NXAwLAorICAgIDB4MS4xN2U0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NQorICAgIC0weDEuZWVjNzI0MDNhNGZkMjRkMGM5ZTJhZjA4OGEwNWZiODVwMCwKKyAgICAtMHgxLjE3ZTRwMAorICB9LAorICB7IC8vIEVudHJ5IDg2CisgICAgMHgxLmVmNGJkN2EyMTUyMzdiMzA2NWQ1NjlmZDRjNWY1YTQ3cDAsCisgICAgMHgxLjE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NworICAgIC0weDEuZWY0YmQ3YTIxNTIzN2IzMDY1ZDU2OWZkNGM1ZjVhNDdwMCwKKyAgICAtMHgxLjE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OAorICAgIC0weDEuZmU3OTM5MDAxMzhjOTk0MTgzNmI0ZmNiYzliMjI2MGRwLTQsCisgICAgMHgxLjE4cDY0CisgIH0sCisgIHsgLy8gRW50cnkgODkKKyAgICAweDEuZmU3OTM5MDAxMzhjOTk0MTgzNmI0ZmNiYzliMjI2MGRwLTQsCisgICAgLTB4MS4xOHA2NAorICB9LAorICB7IC8vIEVudHJ5IDkwCisgICAgMHgxLmYwOGYwODczYzU4MTlhOWY3Y2M2YmJmM2M1MjkxY2MwcDAsCisgICAgMHgxLjE4NDRwMAorICB9LAorICB7IC8vIEVudHJ5IDkxCisgICAgLTB4MS5mMDhmMDg3M2M1ODE5YTlmN2NjNmJiZjNjNTI5MWNjMHAwLAorICAgIC0weDEuMTg0NHAwCisgIH0sCisgIHsgLy8gRW50cnkgOTIKKyAgICAweDEuNWM1MWNjMThmMDkxYmM0YjU0ZWU4MzYyMzQzOGM5YTdwMTEsCisgICAgMHgxLjE4ZmZmZXAxOQorICB9LAorICB7IC8vIEVudHJ5IDkzCisgICAgLTB4MS41YzUxY2MxOGYwOTFiYzRiNTRlZTgzNjIzNDM4YzlhN3AxMSwKKyAgICAtMHgxLjE4ZmZmZXAxOQorICB9LAorICB7IC8vIEVudHJ5IDk0CisgICAgMHgxLjI2MzM1Njc4OThlNjkxZWViODdhZDAyNmJkMTZhN2U0cC0yLAorICAgIDB4MS4xZTdjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgOTUKKyAgICAtMHgxLjI2MzM1Njc4OThlNjkxZWViODdhZDAyNmJkMTZhN2U0cC0yLAorICAgIC0weDEuMWU3Y3AtMgorICB9LAorICB7IC8vIEVudHJ5IDk2CisgICAgMHgxLmZmZmZlZGY1NThiZmIzMTAwZjYxMTI1ZjI5NmI4YmFkcDEsCisgICAgMHgxLjFlYmVwMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NworICAgIC0weDEuZmZmZmVkZjU1OGJmYjMxMDBmNjExMjVmMjk2YjhiYWRwMSwKKyAgICAtMHgxLjFlYmVwMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OAorICAgIDB4MS4wZTU1MWIwMDAwN2ZhZTE3MjM2NDIxYTc2ZTg2MWM3NXAxLAorICAgIDB4MS4yMGVhOWNwMAorICB9LAorICB7IC8vIEVudHJ5IDk5CisgICAgLTB4MS4wZTU1MWIwMDAwN2ZhZTE3MjM2NDIxYTc2ZTg2MWM3NXAxLAorICAgIC0weDEuMjBlYTljcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAKKyAgICAweDEuYzA3ZGZiMDU1MmJhNjBiNzFjN2RmNmJkN2NhNDA5ZDZwMjAsCisgICAgMHgxLjIxMDZjYXA1CisgIH0sCisgIHsgLy8gRW50cnkgMTAxCisgICAgLTB4MS5jMDdkZmIwNTUyYmE2MGI3MWM3ZGY2YmQ3Y2E0MDlkNnAyMCwKKyAgICAtMHgxLjIxMDZjYXA1CisgIH0sCisgIHsgLy8gRW50cnkgMTAyCisgICAgLTB4MS5mZDIzZmQ2NGE0YmZjZmI1OTdjNDY5MzM2NDlmNWFlMnAtMiwKKyAgICAweDEuMjE5ZGM2cDExOQorICB9LAorICB7IC8vIEVudHJ5IDEwMworICAgIDB4MS5mZDIzZmQ2NGE0YmZjZmI1OTdjNDY5MzM2NDlmNWFlMnAtMiwKKyAgICAtMHgxLjIxOWRjNnAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQKKyAgICAtMHgxLmI5M2MxMzAwMGQwMTZkMTRlNzU2YzI1ZTQyMzAyZDlmcC0zLAorICAgIDB4MS4yNmNkNmFwMworICB9LAorICB7IC8vIEVudHJ5IDEwNQorICAgIDB4MS5iOTNjMTMwMDBkMDE2ZDE0ZTc1NmMyNWU0MjMwMmQ5ZnAtMywKKyAgICAtMHgxLjI2Y2Q2YXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA2CisgICAgLTB4MS5lYmNiY2IxMzhiMjc0Y2JjYmU2MWFmNTExM2RhODNlY3AtNCwKKyAgICAweDEuMjljNGUwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcKKyAgICAweDEuZWJjYmNiMTM4YjI3NGNiY2JlNjFhZjUxMTNkYTgzZWNwLTQsCisgICAgLTB4MS4yOWM0ZTBwMworICB9LAorICB7IC8vIEVudHJ5IDEwOAorICAgIDB4MS45OWJjNWI5NjFiMWIyNGZkYjc3ZmNlZTA4YmEyZjcyMHAtMjUsCisgICAgMHgxLjJkOTdjOHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTA5CisgICAgLTB4MS45OWJjNWI5NjFiMWIyNGZkYjc3ZmNlZTA4YmEyZjcyMHAtMjUsCisgICAgLTB4MS4yZDk3YzhwNAorICB9LAorICB7IC8vIEVudHJ5IDExMAorICAgIC0weDEuZWQxOGFmMGIwYmE4MGRmYTZlOGVlMWIzYjMxZGZjNjBwLTEsCisgICAgMHgxLjMwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTEKKyAgICAweDEuZWQxOGFmMGIwYmE4MGRmYTZlOGVlMWIzYjMxZGZjNjBwLTEsCisgICAgLTB4MS4zMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTEyCisgICAgMHgxLjlhYjI0MTExY2ZjNjJkZjRkYmNhMzIwMjE2Yjk0NjUxcC00LAorICAgIDB4MS4zMGNhNzBwMworICB9LAorICB7IC8vIEVudHJ5IDExMworICAgIC0weDEuOWFiMjQxMTFjZmM2MmRmNGRiY2EzMjAyMTZiOTQ2NTFwLTQsCisgICAgLTB4MS4zMGNhNzBwMworICB9LAorICB7IC8vIEVudHJ5IDExNAorICAgIDB4MS4zMzdkOGZmZmZmZmVkZTYyZjA1MGU5OGIzYjk1OTZlMXAtMywKKyAgICAweDEuMzEzNWYwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTE1CisgICAgLTB4MS4zMzdkOGZmZmZmZmVkZTYyZjA1MGU5OGIzYjk1OTZlMXAtMywKKyAgICAtMHgxLjMxMzVmMHAtMworICB9LAorICB7IC8vIEVudHJ5IDExNgorICAgIDB4MS4zNDhlNjUwMDAwMDAyZWYzYTc2NWI5NDE2ZDEyY2Y3ZXAtMywKKyAgICAweDEuMzI0MGJjcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTE3CisgICAgLTB4MS4zNDhlNjUwMDAwMDAyZWYzYTc2NWI5NDE2ZDEyY2Y3ZXAtMywKKyAgICAtMHgxLjMyNDBiY3AtMworICB9LAorICB7IC8vIEVudHJ5IDExOAorICAgIC0weDEuYjllNThhZWM2MWE0NGFiNTMzYzJiODM3MjYzNjdlMTdwLTgsCisgICAgMHgxLjMyZDUzY3AxNgorICB9LAorICB7IC8vIEVudHJ5IDExOQorICAgIDB4MS5iOWU1OGFlYzYxYTQ0YWI1MzNjMmI4MzcyNjM2N2UxN3AtOCwKKyAgICAtMHgxLjMyZDUzY3AxNgorICB9LAorICB7IC8vIEVudHJ5IDEyMAorICAgIC0weDEuZTFmZDY4ZWRlYTQ0ZmI3ODc4MGVkNjJlNzNjNmUwMTdwLTYsCisgICAgMHgxLjNhMGFhOHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTIxCisgICAgMHgxLmUxZmQ2OGVkZWE0NGZiNzg3ODBlZDYyZTczYzZlMDE3cC02LAorICAgIC0weDEuM2EwYWE4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjIKKyAgICAtMHgxLjYyYTI4MTAwMDAxMzkzMDgwZjY3MzNkZmFmOWM3NmZjcC0xLAorICAgIDB4MS40NDk1YmFwMQorICB9LAorICB7IC8vIEVudHJ5IDEyMworICAgIDB4MS42MmEyODEwMDAwMTM5MzA4MGY2NzMzZGZhZjljNzZmY3AtMSwKKyAgICAtMHgxLjQ0OTViYXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTI0CisgICAgMHgxLmI5MjNjM2JhMGJjMGM1MDBiYTRjMjQ1MzAxYmFkMjA3cDEsCisgICAgMHgxLjQ5ZDQyYXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTI1CisgICAgLTB4MS5iOTIzYzNiYTBiYzBjNTAwYmE0YzI0NTMwMWJhZDIwN3AxLAorICAgIC0weDEuNDlkNDJhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYKKyAgICAweDEuNTQxZjNmMDAwMjJhYzI1Y2M4YTkwODU1YWI2YmI4MDhwLTMsCisgICAgMHgxLjUxMGJiY3AtMworICB9LAorICB7IC8vIEVudHJ5IDEyNworICAgIC0weDEuNTQxZjNmMDAwMjJhYzI1Y2M4YTkwODU1YWI2YmI4MDhwLTMsCisgICAgLTB4MS41MTBiYmNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgKKyAgICAweDEuNzZmM2VmZmZmZjMwNTcxMjJlNmU3Y2U1MGQxMmNiY2VwLTMsCisgICAgMHgxLjU0OTUyMHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjkKKyAgICAtMHgxLjc2ZjNlZmZmZmYzMDU3MTIyZTZlN2NlNTBkMTJjYmNlcC0zLAorICAgIC0weDEuNTQ5NTIwcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDEzMAorICAgIDB4MS40Y2FjMDMwMDY0M2UxMmM0NjIwM2I0N2QzZWVlZDRmZnAtOSwKKyAgICAweDEuNTRjNGJhcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTMxCisgICAgLTB4MS40Y2FjMDMwMDY0M2UxMmM0NjIwM2I0N2QzZWVlZDRmZnAtOSwKKyAgICAtMHgxLjU0YzRiYXAyNAorICB9LAorICB7IC8vIEVudHJ5IDEzMgorICAgIC0weDEuNzBkNTQ1MDAwMDA1ODk3NGMyMGI5N2JhOTZmZGFlMDNwLTMsCisgICAgMHgxLjVhNzU3ZXAyNAorICB9LAorICB7IC8vIEVudHJ5IDEzMworICAgIDB4MS43MGQ1NDUwMDAwMDU4OTc0YzIwYjk3YmE5NmZkYWUwM3AtMywKKyAgICAtMHgxLjVhNzU3ZXAyNAorICB9LAorICB7IC8vIEVudHJ5IDEzNAorICAgIC0weDEuZmZmZmU5YmJhN2YxMzIxZmFlMTkyOTQzYTNlODQ4YzBwLTEsCisgICAgMHgxLjVmZGJjMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTM1CisgICAgMHgxLmZmZmZlOWJiYTdmMTMyMWZhZTE5Mjk0M2EzZTg0OGMwcC0xLAorICAgIC0weDEuNWZkYmMwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzYKKyAgICAtMHgxLmZmYjY4ZjAwNTBkYWJlNWNlNzE5MjAyNjEwZmNhYzJlcC0xLAorICAgIDB4MS41ZmUwNTZwMgorICB9LAorICB7IC8vIEVudHJ5IDEzNworICAgIDB4MS5mZmI2OGYwMDUwZGFiZTVjZTcxOTIwMjYxMGZjYWMyZXAtMSwKKyAgICAtMHgxLjVmZTA1NnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTM4CisgICAgLTB4MS5kYWJiNDZlMzkzN2U2YzUwNWFiMjA2MjIzMjMzOWExNnAtNywKKyAgICAweDEuNjQ5M2Q0cDk1CisgIH0sCisgIHsgLy8gRW50cnkgMTM5CisgICAgMHgxLmRhYmI0NmUzOTM3ZTZjNTA1YWIyMDYyMjMyMzM5YTE2cC03LAorICAgIC0weDEuNjQ5M2Q0cDk1CisgIH0sCisgIHsgLy8gRW50cnkgMTQwCisgICAgMHgxLmM4MzIxNjI0ODFlMWNlNGYwMTczNmJiOTdhMzAxOWI5cC0xLAorICAgIDB4MS43NGE1NjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDEKKyAgICAtMHgxLmM4MzIxNjI0ODFlMWNlNGYwMTczNmJiOTdhMzAxOWI5cC0xLAorICAgIC0weDEuNzRhNTY2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQyCisgICAgMHgxLjdiMmZhNDAwMDAwMzhkNTY5MjI2NTEyYzc3OTc2ZmY1cC0zLAorICAgIDB4MS43NmYwYjJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDMKKyAgICAtMHgxLjdiMmZhNDAwMDAwMzhkNTY5MjI2NTEyYzc3OTc2ZmY1cC0zLAorICAgIC0weDEuNzZmMGIycC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTQ0CisgICAgLTB4MS40ZjM3NWFkOWRlZTVmZDYwNGZiMjk0MzVmMzJlZmU1N3AxLAorICAgIDB4MS43OGIzZmFwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQ1CisgICAgMHgxLjRmMzc1YWQ5ZGVlNWZkNjA0ZmIyOTQzNWYzMmVmZTU3cDEsCisgICAgLTB4MS43OGIzZmFwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQ2CisgICAgLTB4MS4wMDAwNWVmZmZiZTczZTdiYWZlYWI3Zjc2YzhhOTNlZnAwLAorICAgIDB4MS43OGZkYjRwMworICB9LAorICB7IC8vIEVudHJ5IDE0NworICAgIDB4MS4wMDAwNWVmZmZiZTczZTdiYWZlYWI3Zjc2YzhhOTNlZnAwLAorICAgIC0weDEuNzhmZGI0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDgKKyAgICAtMHgxLmZjM2FjZTAwMDAyOWMzMzE2OTJhYTlmZTRlNDJmMDA0cC0xLAorICAgIDB4MS43OTFjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDkKKyAgICAweDEuZmMzYWNlMDAwMDI5YzMzMTY5MmFhOWZlNGU0MmYwMDRwLTEsCisgICAgLTB4MS43OTFjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTAKKyAgICAweDEuZGNmYTMyNTRiNTNiNmE3MGNlYzQ0NzNhYmU4NTAxMDJwLTEsCisgICAgMHgxLjdmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE1MQorICAgIC0weDEuZGNmYTMyNTRiNTNiNmE3MGNlYzQ0NzNhYmU4NTAxMDJwLTEsCisgICAgLTB4MS43ZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTIKKyAgICAweDEuYzMzZWQ1MGI4ODc3NzVhNWQ2MTNjMDhjNDg4ZmJiOWNwMywKKyAgICAweDEuODBwMAorICB9LAorICB7IC8vIEVudHJ5IDE1MworICAgIC0weDEuYzMzZWQ1MGI4ODc3NzVhNWQ2MTNjMDhjNDg4ZmJiOWNwMywKKyAgICAtMHgxLjgwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTQKKyAgICAweDEuODAwOHAtMTMwLAorICAgIDB4MS44MDA4cC0xMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTUKKyAgICAtMHgxLjgwMDhwLTEzMCwKKyAgICAtMHgxLjgwMDhwLTEzMAorICB9LAorICB7IC8vIEVudHJ5IDE1NgorICAgIC0weDEuZjk2MzcwZWM0ODJkMmJiMGViOGVhN2E1MzAxMzlmY2ZwLTUsCisgICAgMHgxLjgxODBwODMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTcKKyAgICAweDEuZjk2MzcwZWM0ODJkMmJiMGViOGVhN2E1MzAxMzlmY2ZwLTUsCisgICAgLTB4MS44MTgwcDgzCisgIH0sCisgIHsgLy8gRW50cnkgMTU4CisgICAgLTB4MS5mZmY2NjRmYWE2Zjg2ZmE4YjRlNWUyNzE5ZDIxOTVjZnAtMSwKKyAgICAweDEuODllMDkwcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTkKKyAgICAweDEuZmZmNjY0ZmFhNmY4NmZhOGI0ZTVlMjcxOWQyMTk1Y2ZwLTEsCisgICAgLTB4MS44OWUwOTBwOQorICB9LAorICB7IC8vIEVudHJ5IDE2MAorICAgIDB4MS4xYzA1MTEwMTY0M2JlNzQwNzgyZmUwZGZjOWRjZDFjY3AwLAorICAgIDB4MS44YzYzMWVwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjEKKyAgICAtMHgxLjFjMDUxMTAxNjQzYmU3NDA3ODJmZTBkZmM5ZGNkMWNjcDAsCisgICAgLTB4MS44YzYzMWVwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjIKKyAgICAweDEuYmIyZTg4ZjI2YjkzNjNmOWE4NTI2NjVmMzQxM2Q5OTRwMTMsCisgICAgMHgxLjhjNjdmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjMKKyAgICAtMHgxLmJiMmU4OGYyNmI5MzYzZjlhODUyNjY1ZjM0MTNkOTk0cDEzLAorICAgIC0weDEuOGM2N2ZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDE2NAorICAgIC0weDEuZjBlNGVjMTMzNTg1Y2IzMGU2N2NmY2JiMzZmYWFkOGVwMSwKKyAgICAweDEuOTFkODU4cDEyCisgIH0sCisgIHsgLy8gRW50cnkgMTY1CisgICAgMHgxLmYwZTRlYzEzMzU4NWNiMzBlNjdjZmNiYjM2ZmFhZDhlcDEsCisgICAgLTB4MS45MWQ4NThwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjYKKyAgICAtMHgxLjVkMTQ5NDZkYzk4OTc1ZDY0MjFhNTUyODRmZTAyMGExcDI0LAorICAgIDB4MS45MjFmYjZwMAorICB9LAorICB7IC8vIEVudHJ5IDE2NworICAgIDB4MS41ZDE0OTQ2ZGM5ODk3NWQ2NDIxYTU1Mjg0ZmUwMjBhMXAyNCwKKyAgICAtMHgxLjkyMWZiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTY4CisgICAgMHgxLjk4MGVlMGNmYmYwZjFlYmM5ZDRmZDI0Y2NlM2NkZmU3cDE1LAorICAgIDB4MS45MjI5MjJwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjkKKyAgICAtMHgxLjk4MGVlMGNmYmYwZjFlYmM5ZDRmZDI0Y2NlM2NkZmU3cDE1LAorICAgIC0weDEuOTIyOTIycDE1CisgIH0sCisgIHsgLy8gRW50cnkgMTcwCisgICAgLTB4MS5mZDQzZjhlODkxZTIyN2RkYWQyZmIyZTU1MjBkNGZmMnAtMSwKKyAgICAweDEuOTIzMGZlcDE1CisgIH0sCisgIHsgLy8gRW50cnkgMTcxCisgICAgMHgxLmZkNDNmOGU4OTFlMjI3ZGRhZDJmYjJlNTUyMGQ0ZmYycC0xLAorICAgIC0weDEuOTIzMGZlcDE1CisgIH0sCisgIHsgLy8gRW50cnkgMTcyCisgICAgMHgxLmNmMzhmNjIxMmU3ZTYyNzZmNGFkZDU0ODc4ZjFhN2RicC0xLAorICAgIDB4MS45NTEwYzhwNgorICB9LAorICB7IC8vIEVudHJ5IDE3MworICAgIC0weDEuY2YzOGY2MjEyZTdlNjI3NmY0YWRkNTQ4NzhmMWE3ZGJwLTEsCisgICAgLTB4MS45NTEwYzhwNgorICB9LAorICB7IC8vIEVudHJ5IDE3NAorICAgIDB4MS5kMDNkNDUwMjRjM2NhNGEyYzRlMWE5MTg1NjEzNTA0NnAtMSwKKyAgICAweDEuOTUxMWU2cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzUKKyAgICAtMHgxLmQwM2Q0NTAyNGMzY2E0YTJjNGUxYTkxODU2MTM1MDQ2cC0xLAorICAgIC0weDEuOTUxMWU2cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzYKKyAgICAweDEuMDU1NGViNWNiZDM5M2U0ZjA3NzBjODY1MjhmMzllZTFwMTcsCisgICAgMHgxLjk3OWYyNHA5CisgIH0sCisgIHsgLy8gRW50cnkgMTc3CisgICAgLTB4MS4wNTU0ZWI1Y2JkMzkzZTRmMDc3MGM4NjUyOGYzOWVlMXAxNywKKyAgICAtMHgxLjk3OWYyNHA5CisgIH0sCisgIHsgLy8gRW50cnkgMTc4CisgICAgMHgxLmZhZDVkZjkzZGUzMDUxY2YwMThhYjMyYzBiMzIzNTcxcC0xLAorICAgIDB4MS5hMWU4NjJwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgMTc5CisgICAgLTB4MS5mYWQ1ZGY5M2RlMzA1MWNmMDE4YWIzMmMwYjMyMzU3MXAtMSwKKyAgICAtMHgxLmExZTg2MnAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODAKKyAgICAweDEuZmY5ODFiMTUzNGY3ODAxNmJlYTRkOTU4ODI1NGU5OTZwMywKKyAgICAweDEuYWQxZnA2MworICB9LAorICB7IC8vIEVudHJ5IDE4MQorICAgIC0weDEuZmY5ODFiMTUzNGY3ODAxNmJlYTRkOTU4ODI1NGU5OTZwMywKKyAgICAtMHgxLmFkMWZwNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODIKKyAgICAtMHgxLmZmZjRhMWRiMWUxZTM4YzQzOGRkZDM4YmI5NGY2ZDMxcDEsCisgICAgMHgxLmFkYTNkYXAzOQorICB9LAorICB7IC8vIEVudHJ5IDE4MworICAgIDB4MS5mZmY0YTFkYjFlMWUzOGM0MzhkZGQzOGJiOTRmNmQzMXAxLAorICAgIC0weDEuYWRhM2RhcDM5CisgIH0sCisgIHsgLy8gRW50cnkgMTg0CisgICAgMHgxLmQwMTUyOTAyM2Q5NTEzOTAyMDBhNDI1MmYwMzhiNGFmcC0xLAorICAgIDB4MS5iMTI1YmFwNQorICB9LAorICB7IC8vIEVudHJ5IDE4NQorICAgIC0weDEuZDAxNTI5MDIzZDk1MTM5MDIwMGE0MjUyZjAzOGI0YWZwLTEsCisgICAgLTB4MS5iMTI1YmFwNQorICB9LAorICB7IC8vIEVudHJ5IDE4NgorICAgIDB4MS5kNjdmYTEwNWY3Njg2ODYxMmM4NGY3NGExZjM4ZjBhY3AtMiwKKyAgICAweDEuYjkwYTAycC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTg3CisgICAgLTB4MS5kNjdmYTEwNWY3Njg2ODYxMmM4NGY3NGExZjM4ZjBhY3AtMiwKKyAgICAtMHgxLmI5MGEwMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDE4OAorICAgIDB4MS45OTY2M2RhOTRkYmQ1NzE5OWNiOGUzZGFlNzAxODM1OHAtMjMsCisgICAgMHgxLmJlZWVlZXA4MAorICB9LAorICB7IC8vIEVudHJ5IDE4OQorICAgIC0weDEuOTk2NjNkYTk0ZGJkNTcxOTljYjhlM2RhZTcwMTgzNThwLTIzLAorICAgIC0weDEuYmVlZWVlcDgwCisgIH0sCisgIHsgLy8gRW50cnkgMTkwCisgICAgMHgxLmViOTY1NzFlYjlkYTEzMzdlNzAzY2MyMGU0MWU5NzE5cC0xMywKKyAgICAweDEuYzNhYmYwcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTkxCisgICAgLTB4MS5lYjk2NTcxZWI5ZGExMzM3ZTcwM2NjMjBlNDFlOTcxOXAtMTMsCisgICAgLTB4MS5jM2FiZjBwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTIKKyAgICAweDEuZTE5OGM0OGJlZjk1NDE1MWVlMDc1ODE1ZDg1YzUzNjNwMCwKKyAgICAweDEuYzcxYzc0cDExNgorICB9LAorICB7IC8vIEVudHJ5IDE5MworICAgIC0weDEuZTE5OGM0OGJlZjk1NDE1MWVlMDc1ODE1ZDg1YzUzNjNwMCwKKyAgICAtMHgxLmM3MWM3NHAxMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTQKKyAgICAtMHgxLmU1MGU1MjQ2MTA3MjhjZmIyMzljYzYzMDViMjEyZmQ2cC0xLAorICAgIDB4MS5jYzMyNTJwMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTUKKyAgICAweDEuZTUwZTUyNDYxMDcyOGNmYjIzOWNjNjMwNWIyMTJmZDZwLTEsCisgICAgLTB4MS5jYzMyNTJwMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTYKKyAgICAtMHgxLjZhNjllN2JiMjFiNTIwMzA5NjRiYzIxY2VkMDc3YzcxcDE5LAorICAgIDB4MS5kMzhhMmFwMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTcKKyAgICAweDEuNmE2OWU3YmIyMWI1MjAzMDk2NGJjMjFjZWQwNzdjNzFwMTksCisgICAgLTB4MS5kMzhhMmFwMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTgKKyAgICAweDEuNjUyOWJmODFiOTU4Y2E3ODFjZGFhYzdjZWM2ZTYzNmVwMCwKKyAgICAweDEuZGYwNjQ4cDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTk5CisgICAgLTB4MS42NTI5YmY4MWI5NThjYTc4MWNkYWFjN2NlYzZlNjM2ZXAwLAorICAgIC0weDEuZGYwNjQ4cDI0CisgIH0sCisgIHsgLy8gRW50cnkgMjAwCisgICAgMHgxLjY1OWU0M2I0MzE1ZjIxYmE1ZTcwNDhiMWQ4ZDc4MTVjcDAsCisgICAgMHgxLmRmMjIwNHAyNAorICB9LAorICB7IC8vIEVudHJ5IDIwMQorICAgIC0weDEuNjU5ZTQzYjQzMTVmMjFiYTVlNzA0OGIxZDhkNzgxNWNwMCwKKyAgICAtMHgxLmRmMjIwNHAyNAorICB9LAorICB7IC8vIEVudHJ5IDIwMgorICAgIC0weDEuNzFhNTgwZmZjNGUxNjdhZTBlZjhiMDJkNWQyN2M5OWRwLTEsCisgICAgMHgxLmRmMzRwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDMKKyAgICAweDEuNzFhNTgwZmZjNGUxNjdhZTBlZjhiMDJkNWQyN2M5OWRwLTEsCisgICAgLTB4MS5kZjM0cDI0CisgIH0sCisgIHsgLy8gRW50cnkgMjA0CisgICAgMHgxLmVjZjExOTAwMDAxN2EyY2FlZjQyOTBiNGQ2YzYzNzg1cC00LAorICAgIDB4MS5lYTk1MWFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDUKKyAgICAtMHgxLmVjZjExOTAwMDAxN2EyY2FlZjQyOTBiNGQ2YzYzNzg1cC00LAorICAgIC0weDEuZWE5NTFhcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjA2CisgICAgMHgxLmNjZDU1ODIxZmFkNjk3NTVjMmQ4MjRiZTJiZmQ0YzY0cC0xLAorICAgIDB4MS5lZmVkYzZwMQorICB9LAorICB7IC8vIEVudHJ5IDIwNworICAgIC0weDEuY2NkNTU4MjFmYWQ2OTc1NWMyZDgyNGJlMmJmZDRjNjRwLTEsCisgICAgLTB4MS5lZmVkYzZwMQorICB9LAorICB7IC8vIEVudHJ5IDIwOAorICAgIDB4MS5kNjk4MWVmZmZmZjI1NDk2MzQ2ODZhMjRkZmRhNzdjZXAtMSwKKyAgICAweDEuZjE0M2EycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDkKKyAgICAtMHgxLmQ2OTgxZWZmZmZmMjU0OTYzNDY4NmEyNGRmZGE3N2NlcC0xLAorICAgIC0weDEuZjE0M2EycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTAKKyAgICAweDEuZGJhNGQxMTI0YTc4YTY4MDNhMDk2NWFmMGFiNzlmODhwMywKKyAgICAweDEuZjI1YjA2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTEKKyAgICAtMHgxLmRiYTRkMTEyNGE3OGE2ODAzYTA5NjVhZjBhYjc5Zjg4cDMsCisgICAgLTB4MS5mMjViMDZwMgorICB9LAorICB7IC8vIEVudHJ5IDIxMgorICAgIC0weDEuNmRmY2JhZmZkNzgwMjNlY2ZhYmJmN2NjZjBhMGU0YjRwLTEsCisgICAgMHgxLmYzMjIxOHAyNAorICB9LAorICB7IC8vIEVudHJ5IDIxMworICAgIDB4MS42ZGZjYmFmZmQ3ODAyM2VjZmFiYmY3Y2NmMGEwZTRiNHAtMSwKKyAgICAtMHgxLmYzMjIxOHAyNAorICB9LAorICB7IC8vIEVudHJ5IDIxNAorICAgIC0weDEuZWMzNWNmMDAwMDYxMDc5Mjk1ZWFkNzE0ODkyZGIxY2FwMSwKKyAgICAweDEuZjQ0ZGJjcDU4CisgIH0sCisgIHsgLy8gRW50cnkgMjE1CisgICAgMHgxLmVjMzVjZjAwMDA2MTA3OTI5NWVhZDcxNDg5MmRiMWNhcDEsCisgICAgLTB4MS5mNDRkYmNwNTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTYKKyAgICAweDEuZGIwNmMxMGQyYTk1OTcxNWJjMGEyZTc1ZTZkYTA5M2JwNCwKKyAgICAweDEuZjQ3ZmZlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTcKKyAgICAtMHgxLmRiMDZjMTBkMmE5NTk3MTViYzBhMmU3NWU2ZGEwOTNicDQsCisgICAgLTB4MS5mNDdmZmVwMgorICB9LAorICB7IC8vIEVudHJ5IDIxOAorICAgIDB4MS5mZmZmZWI1NTY0M2I5YTY0OGMyNzIwYmRlMWQyMjc2NHAtMSwKKyAgICAweDEuZjZhN2EwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTkKKyAgICAtMHgxLmZmZmZlYjU1NjQzYjlhNjQ4YzI3MjBiZGUxZDIyNzY0cC0xLAorICAgIC0weDEuZjZhN2EwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjAKKyAgICAweDEuYzBhNTcwZmZmZmQzNzlkMDk3MmVhNzhjZDA0MGMzMDRwLTMsCisgICAgMHgxLmY2ZGVkOHA4CisgIH0sCisgIHsgLy8gRW50cnkgMjIxCisgICAgLTB4MS5jMGE1NzBmZmZmZDM3OWQwOTcyZWE3OGNkMDQwYzMwNHAtMywKKyAgICAtMHgxLmY2ZGVkOHA4CisgIH0sCisgIHsgLy8gRW50cnkgMjIyCisgICAgLTB4MS5jZGYxOGQwMTIzNDgwOWE2ODk1MzE1ZTlkZTU5ZDg2NHAtMSwKKyAgICAweDEuZjdmZmJlcDE1CisgIH0sCisgIHsgLy8gRW50cnkgMjIzCisgICAgMHgxLmNkZjE4ZDAxMjM0ODA5YTY4OTUzMTVlOWRlNTlkODY0cC0xLAorICAgIC0weDEuZjdmZmJlcDE1CisgIH0sCisgIHsgLy8gRW50cnkgMjI0CisgICAgLTB4MS44MmYxOTZmYjYwYTgxZGMzYjRkY2JiYzgzMWFiOGY4NXAtMSwKKyAgICAweDEuZjdmZmZlcDQ3CisgIH0sCisgIHsgLy8gRW50cnkgMjI1CisgICAgMHgxLjgyZjE5NmZiNjBhODFkYzNiNGRjYmJjODMxYWI4Zjg1cC0xLAorICAgIC0weDEuZjdmZmZlcDQ3CisgIH0sCisgIHsgLy8gRW50cnkgMjI2CisgICAgMHgxLjZjMDM1OTBmM2ZlM2I3ZDI5ZTg5ZWUwZTY1ZmM5YjFlcDAsCisgICAgMHgxLmY4N2Q1OHAyNAorICB9LAorICB7IC8vIEVudHJ5IDIyNworICAgIC0weDEuNmMwMzU5MGYzZmUzYjdkMjllODllZTBlNjVmYzliMWVwMCwKKyAgICAtMHgxLmY4N2Q1OHAyNAorICB9LAorICB7IC8vIEVudHJ5IDIyOAorICAgIC0weDEuYzdhZTZlOWMxNDViOGQ1NGY3NzE5ODkzZmEwMzg0OWZwMjcsCisgICAgMHgxLmY5Y2JlMnA3CisgIH0sCisgIHsgLy8gRW50cnkgMjI5CisgICAgMHgxLmM3YWU2ZTljMTQ1YjhkNTRmNzcxOTg5M2ZhMDM4NDlmcDI3LAorICAgIC0weDEuZjljYmUycDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzAKKyAgICAweDEuNmQyOTEwMDA1MTYxYjJiZmE2MTEzNGQwZmJjOWU5YzBwMCwKKyAgICAweDEuZmQ4NmJjcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMjMxCisgICAgLTB4MS42ZDI5MTAwMDUxNjFiMmJmYTYxMTM0ZDBmYmM5ZTljMHAwLAorICAgIC0weDEuZmQ4NmJjcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMjMyCisgICAgMHgxLjZjOGY4ZDBjM2FkNGJiYjYzOWEzZjNhOTQyMzdmNjlmcDAsCisgICAgMHgxLmZlZmE0YXAyNAorICB9LAorICB7IC8vIEVudHJ5IDIzMworICAgIC0weDEuNmM4ZjhkMGMzYWQ0YmJiNjM5YTNmM2E5NDIzN2Y2OWZwMCwKKyAgICAtMHgxLmZlZmE0YXAyNAorICB9LAorICB7IC8vIEVudHJ5IDIzNAorICAgIDB4MS4wMGU1YjVmZmZhMTNmN2Q5YzRiMGI1MmZlMTFhMzM5YnAtMywKKyAgICAweDEuZmYxZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjM1CisgICAgLTB4MS4wMGU1YjVmZmZhMTNmN2Q5YzRiMGI1MmZlMTFhMzM5YnAtMywKKyAgICAtMHgxLmZmMWZmZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDIzNgorICAgIDB4MS5mZjNmNDFmMDFjNWIzNjBjY2U3NWI2Nzg3N2ZmZDY3N3AwLAorICAgIDB4MS5mZjdmZmVwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzcKKyAgICAtMHgxLmZmM2Y0MWYwMWM1YjM2MGNjZTc1YjY3ODc3ZmZkNjc3cDAsCisgICAgLTB4MS5mZjdmZmVwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzgKKyAgICAtMHgxLjg2ZGQ1ZTAwZDdlZGM3MjY2OTY5YmY1MTk4NDM4YmFicDAsCisgICAgMHgxLmZmOWZmZXAxMgorICB9LAorICB7IC8vIEVudHJ5IDIzOQorICAgIDB4MS44NmRkNWUwMGQ3ZWRjNzI2Njk2OWJmNTE5ODQzOGJhYnAwLAorICAgIC0weDEuZmY5ZmZlcDEyCisgIH0sCisgIHsgLy8gRW50cnkgMjQwCisgICAgLTB4MS5mOGZlNDU3OWZkZWUyNDkxYzdkODU3MmVhNTEyZmU5M3A1LAorICAgIDB4MS5mZmZiZmVwNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDEKKyAgICAweDEuZjhmZTQ1NzlmZGVlMjQ5MWM3ZDg1NzJlYTUxMmZlOTNwNSwKKyAgICAtMHgxLmZmZmJmZXA0NQorICB9LAorICB7IC8vIEVudHJ5IDI0MgorICAgIC0weDEuODVmZjQ2MmYwZjg2ZmY0NDY0MTMwNWRhMThlYThmYzhwLTEzLAorICAgIDB4MS5mZmZkZjJwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDMKKyAgICAweDEuODVmZjQ2MmYwZjg2ZmY0NDY0MTMwNWRhMThlYThmYzhwLTEzLAorICAgIC0weDEuZmZmZGYycDIzCisgIH0sCisgIHsgLy8gRW50cnkgMjQ0CisgICAgMHgxLjMzOTJlMmZmYmNiMjVmYzFiMDE2YjkxMzZlNjljMDBicC0yLAorICAgIDB4MS5mZmZkZmVwMworICB9LAorICB7IC8vIEVudHJ5IDI0NQorICAgIC0weDEuMzM5MmUyZmZiY2IyNWZjMWIwMTZiOTEzNmU2OWMwMGJwLTIsCisgICAgLTB4MS5mZmZkZmVwMworICB9LAorICB7IC8vIEVudHJ5IDI0NgorICAgIC0weDEuMmY2YzRiZDI2MDVmMDM3Zjg2MDk4MTlmODY1YThkY2JwOCwKKyAgICAweDEuZmZmZTNlcDQxCisgIH0sCisgIHsgLy8gRW50cnkgMjQ3CisgICAgMHgxLjJmNmM0YmQyNjA1ZjAzN2Y4NjA5ODE5Zjg2NWE4ZGNicDgsCisgICAgLTB4MS5mZmZlM2VwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDgKKyAgICAtMHgxLjUzYTJlOTBlODE3NzI3MjU1ZTZkZGY2NGUyOGMwMTljcC05LAorICAgIDB4MS5mZmZlN2VwMTAzCisgIH0sCisgIHsgLy8gRW50cnkgMjQ5CisgICAgMHgxLjUzYTJlOTBlODE3NzI3MjU1ZTZkZGY2NGUyOGMwMTljcC05LAorICAgIC0weDEuZmZmZTdlcDEwMworICB9LAorICB7IC8vIEVudHJ5IDI1MAorICAgIC0weDEuYjM0Njc2ZjA5NWI1YjFhMzI1NDI2Y2RmNDJjMDQ3OTlwMiwKKyAgICAweDEuZmZmZjdlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTEKKyAgICAweDEuYjM0Njc2ZjA5NWI1YjFhMzI1NDI2Y2RmNDJjMDQ3OTlwMiwKKyAgICAtMHgxLmZmZmY3ZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjUyCisgICAgMHgxLmY2NDBkOTRlNjI0MWRiNDM0OWUzM2JlZDY3Y2JkM2RicC0xLAorICAgIDB4MS5mZmZmN2VwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgMjUzCisgICAgLTB4MS5mNjQwZDk0ZTYyNDFkYjQzNDllMzNiZWQ2N2NiZDNkYnAtMSwKKyAgICAtMHgxLmZmZmY3ZXAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTQKKyAgICAweDEuNTI2YzI2OWJkZGE4YTg5ZDkwNzA2ODcwZjM4MDFlYWZwLTEsCisgICAgMHgxLmZmZmZlZXA0CisgIH0sCisgIHsgLy8gRW50cnkgMjU1CisgICAgLTB4MS41MjZjMjY5YmRkYThhODlkOTA3MDY4NzBmMzgwMWVhZnAtMSwKKyAgICAtMHgxLmZmZmZlZXA0CisgIH0sCisgIHsgLy8gRW50cnkgMjU2CisgICAgLTB4MS5hMzc1OTNjMTA1ZTE0NjJjMmEzNzI2MDYwMzQ4M2RhNnAxLAorICAgIDB4MS5mZmZmZmNwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTcKKyAgICAweDEuYTM3NTkzYzEwNWUxNDYyYzJhMzcyNjA2MDM0ODNkYTZwMSwKKyAgICAtMHgxLmZmZmZmY3AxMgorICB9LAorICB7IC8vIEVudHJ5IDI1OAorICAgIC0weDEucC0xNDksCisgICAgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDI1OQorICAgIDB4MS5wLTE0OSwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjAKKyAgICAwLjAsCisgICAgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgMjYxCisgICAgMHgxLnAtMTQ5LAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDI2MgorICAgIC0weDEucC0xNDksCisgICAgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDI2MworICAgIC0weDEuMDAwMDAycC0xMjYsCisgICAgLTB4MS4wMDAwMDJwLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI2NAorICAgIDB4MS4wMDAwMDJwLTEyNiwKKyAgICAweDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjUKKyAgICAtMHgxLnAtMTI2LAorICAgIC0weDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjYKKyAgICAweDEucC0xMjYsCisgICAgMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMjY3CisgICAgLTB4MS5mZmZmZmNwLTEyNywKKyAgICAtMHgxLmZmZmZmY3AtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMjY4CisgICAgMHgxLmZmZmZmY3AtMTI3LAorICAgIDB4MS5mZmZmZmNwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDI2OQorICAgIDB4MS5mZmZmZmNwLTEyNywKKyAgICAweDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzAKKyAgICAtMHgxLmZmZmZmY3AtMTI3LAorICAgIC0weDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzEKKyAgICAweDEucC0xMjYsCisgICAgMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMjcyCisgICAgLTB4MS5wLTEyNiwKKyAgICAtMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMjczCisgICAgMHgxLjAwMDAwMnAtMTI2LAorICAgIDB4MS4wMDAwMDJwLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI3NAorICAgIC0weDEuMDAwMDAycC0xMjYsCisgICAgLTB4MS4wMDAwMDJwLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI3NQorICAgIDB4MS45OTk5OWE1NzYxOWY2NzliNjE5M2FmOGEwYTdhODc3OHAtMTMsCisgICAgMHgxLjk5OTk5YXAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzYKKyAgICAtMHgxLjk5OTk5YTU3NjE5ZjY3OWI2MTkzYWY4YTBhN2E4Nzc4cC0xMywKKyAgICAtMHgxLjk5OTk5YXAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzcKKyAgICAweDEuOTk5OTliNWQ4NjdlYWFkZDAzMDU1ODczOTk5MDUzMTFwLTEyLAorICAgIDB4MS45OTk5OWFwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgMjc4CisgICAgLTB4MS45OTk5OWI1ZDg2N2VhYWRkMDMwNTU4NzM5OTkwNTMxMXAtMTIsCisgICAgLTB4MS45OTk5OWFwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgMjc5CisgICAgMHgxLjMzMzMzNjRkZDJmYjk0OTY0NWJlYTk5OGNiYzFlZTcycC0xMSwKKyAgICAweDEuMzMzMzM0cC0xMQorICB9LAorICB7IC8vIEVudHJ5IDI4MAorICAgIC0weDEuMzMzMzM2NGRkMmZiOTQ5NjQ1YmVhOTk4Y2JjMWVlNzJwLTExLAorICAgIC0weDEuMzMzMzM0cC0xMQorICB9LAorICB7IC8vIEVudHJ5IDI4MQorICAgIDB4MS45OTk5OWY3NjFhMGI3MjZjMThiMDBjNjQ5NmNiZTEwZHAtMTEsCisgICAgMHgxLjk5OTk5YXAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODIKKyAgICAtMHgxLjk5OTk5Zjc2MWEwYjcyNmMxOGIwMGM2NDk2Y2JlMTBkcC0xMSwKKyAgICAtMHgxLjk5OTk5YXAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODMKKyAgICAweDEuMDAwMDA1NTU1NTc3Nzc3ODU0ODU0ZGVkYzI4ZWFkNTFwLTEwLAorICAgIDB4MS5wLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjg0CisgICAgLTB4MS4wMDAwMDU1NTU1Nzc3Nzc4NTQ4NTRkZWRjMjhlYWQ1MXAtMTAsCisgICAgLTB4MS5wLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjg1CisgICAgMHgxLjMzMzMzZDM3NGMyZTA1ZDEwODE2MTM3ODM4OWZjODRmcC0xMCwKKyAgICAweDEuMzMzMzM0cC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI4NgorICAgIC0weDEuMzMzMzNkMzc0YzJlMDVkMTA4MTYxMzc4Mzg5ZmM4NGZwLTEwLAorICAgIC0weDEuMzMzMzM0cC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI4NworICAgIDB4MS42NjY2NzZhMjdhNmQ4MjE0ZDE5OGIyMzIxZWY5YTlkY3AtMTAsCisgICAgMHgxLjY2NjY2OHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODgKKyAgICAtMHgxLjY2NjY3NmEyN2E2ZDgyMTRkMTk4YjIzMjFlZjlhOWRjcC0xMCwKKyAgICAtMHgxLjY2NjY2OHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODkKKyAgICAweDEuOTk5OWIxZDg2OThjMjRjZmUzYjkwZmZkMDA2ZmZkY2FwLTEwLAorICAgIDB4MS45OTk5OWNwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjkwCisgICAgLTB4MS45OTk5YjFkODY5OGMyNGNmZTNiOTBmZmQwMDZmZmRjYXAtMTAsCisgICAgLTB4MS45OTk5OWNwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjkxCisgICAgMHgxLmNjY2NlYjFhYTIxOWY3MWJiMTkyMDhkNzRhNzM5YmIxcC0xMCwKKyAgICAweDEuY2NjY2NjcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI5MgorICAgIC0weDEuY2NjY2ViMWFhMjE5ZjcxYmIxOTIwOGQ3NGE3MzliYjFwLTEwLAorICAgIC0weDEuY2NjY2NjcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI5MworICAgIDB4MS4wNjY3ZDU5NjhiYmJiZTQwMzcwMjRiOWM5M2Y3YjA0OXAtNywKKyAgICAweDEuMDY2NjY2cC03CisgIH0sCisgIHsgLy8gRW50cnkgMjk0CisgICAgLTB4MS4wNjY3ZDU5NjhiYmJiZTQwMzcwMjRiOWM5M2Y3YjA0OXAtNywKKyAgICAtMHgxLjA2NjY2NnAtNworICB9LAorICB7IC8vIEVudHJ5IDI5NQorICAgIDB4MS5jY2Q0OTJkMDM1YTIyNzc1OGI4YzMwZDc5YjE2ODgyNnAtNywKKyAgICAweDEuY2NjY2NjcC03CisgIH0sCisgIHsgLy8gRW50cnkgMjk2CisgICAgLTB4MS5jY2Q0OTJkMDM1YTIyNzc1OGI4YzMwZDc5YjE2ODgyNnAtNywKKyAgICAtMHgxLmNjY2NjY3AtNworICB9LAorICB7IC8vIEVudHJ5IDI5NworICAgIDB4MS40OWE0ZmE2OGU5MGQyMjhmNDQ1MDI2ZWIyOWFkY2VmZHAtNiwKKyAgICAweDEuNDk5OTk4cC02CisgIH0sCisgIHsgLy8gRW50cnkgMjk4CisgICAgLTB4MS40OWE0ZmE2OGU5MGQyMjhmNDQ1MDI2ZWIyOWFkY2VmZHAtNiwKKyAgICAtMHgxLjQ5OTk5OHAtNgorICB9LAorICB7IC8vIEVudHJ5IDI5OQorICAgIDB4MS5hY2U1ZGUwOTA2MDNmZGE4ZjUxOWFmZWNlMDVjMTdlYXAtNiwKKyAgICAweDEuYWNjY2NjcC02CisgIH0sCisgIHsgLy8gRW50cnkgMzAwCisgICAgLTB4MS5hY2U1ZGUwOTA2MDNmZGE4ZjUxOWFmZWNlMDVjMTdlYXAtNiwKKyAgICAtMHgxLmFjY2NjY3AtNgorICB9LAorICB7IC8vIEVudHJ5IDMwMQorICAgIDB4MS4wODE3NjdmZDNjYjY4NWY3YjA2OTE0NmNlMzMzMzg1MXAtNSwKKyAgICAweDEuMDhwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDIKKyAgICAtMHgxLjA4MTc2N2ZkM2NiNjg1ZjdiMDY5MTQ2Y2UzMzMzODUxcC01LAorICAgIC0weDEuMDhwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDMKKyAgICAweDEuMzljMGQ3NDUzMzRhMzM4N2Q2NzJlNGEwNTYyNGJjYTVwLTUsCisgICAgMHgxLjM5OTk5YXAtNQorICB9LAorICB7IC8vIEVudHJ5IDMwNAorICAgIC0weDEuMzljMGQ3NDUzMzRhMzM4N2Q2NzJlNGEwNTYyNGJjYTVwLTUsCisgICAgLTB4MS4zOTk5OWFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDUKKyAgICAweDEuNmI3MDJjNjI3ZmMwMGI3NzdlYTg2NjFjY2UzNjA2MWNwLTUsCisgICAgMHgxLjZiMzMzNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDMwNgorICAgIC0weDEuNmI3MDJjNjI3ZmMwMGI3NzdlYTg2NjFjY2UzNjA2MWNwLTUsCisgICAgLTB4MS42YjMzMzRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDcKKyAgICAweDEuOWQyNjU3NGNkODQ3NTliZmZmNTFkOGJiMTg1MzhhMGRwLTUsCisgICAgMHgxLjljY2NjZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDMwOAorICAgIC0weDEuOWQyNjU3NGNkODQ3NTliZmZmNTFkOGJiMTg1MzhhMGRwLTUsCisgICAgLTB4MS45Y2NjY2VwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDkKKyAgICAweDEuY2VlNDQ2N2UxNWJiN2VmNTk2NThhOGVkZGMxOTUxNjdwLTUsCisgICAgMHgxLmNlNjY2NnAtNQorICB9LAorICB7IC8vIEVudHJ5IDMxMAorICAgIC0weDEuY2VlNDQ2N2UxNWJiN2VmNTk2NThhOGVkZGMxOTUxNjdwLTUsCisgICAgLTB4MS5jZTY2NjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTEKKyAgICAweDEuYTFlYWVkN2FhNjJhNzQwYzBiMmUwOWJjZDBmNzM1YjVwLTEsCisgICAgMHgxLjVlN2ZjNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMxMgorICAgIC0weDEuYTFlYWVkN2FhNjJhNzQwYzBiMmUwOWJjZDBmNzM1YjVwLTEsCisgICAgLTB4MS41ZTdmYzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTMKKyAgICAweDEuZDkzYjg5MWNiY2IxNWFhYzhiNTc5NmEwYTE2YmYyOWVwMSwKKyAgICAweDEuNGU3ZmM0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTQKKyAgICAtMHgxLmQ5M2I4OTFjYmNiMTVhYWM4YjU3OTZhMGExNmJmMjllcDEsCisgICAgLTB4MS40ZTdmYzRwMAorICB9LAorICB7IC8vIEVudHJ5IDMxNQorICAgIC0weDEuNTYzYWQwNjM0ODZjNzk3NjUzYTY4OTU1YzBiYjFjMGJwMSwKKyAgICAweDEuZWRiZmE2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTYKKyAgICAweDEuNTYzYWQwNjM0ODZjNzk3NjUzYTY4OTU1YzBiYjFjMGJwMSwKKyAgICAtMHgxLmVkYmZhNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzE3CisgICAgLTB4MS41NzZiNzg5ZDU0NGI2ZDAzN2MzYjcxMTlmZDZkZDZwLTEsCisgICAgMHgxLjQ2N2ZjNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzE4CisgICAgMHgxLjU3NmI3ODlkNTQ0YjZkMDM3YzNiNzExOWZkNmRkNnAtMSwKKyAgICAtMHgxLjQ2N2ZjNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzE5CisgICAgMHgxLjAwMTUwNjUyYjJkNzkzMWUwYzg3ODg3NWI5ZjRiYTgycC01LAorICAgIDB4MS45NjFmYjRwMQorICB9LAorICB7IC8vIEVudHJ5IDMyMAorICAgIC0weDEuMDAxNTA2NTJiMmQ3OTMxZTBjODc4ODc1YjlmNGJhODJwLTUsCisgICAgLTB4MS45NjFmYjRwMQorICB9LAorICB7IC8vIEVudHJ5IDMyMQorICAgIDB4MS44N2U5ODdiNmU1MDcxZGJkM2Y3NTVhNzZhMjdkOGZjOHAtMSwKKyAgICAweDEuZTViZmE0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjIKKyAgICAtMHgxLjg3ZTk4N2I2ZTUwNzFkYmQzZjc1NWE3NmEyN2Q4ZmM4cC0xLAorICAgIC0weDEuZTViZmE0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjMKKyAgICAweDEuYTQ5ZTU1YmNlMWM4OTkxMjMyMzg3ZWNkMTEyNDY5OGFwMSwKKyAgICAweDEuMWFhZmNhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjQKKyAgICAtMHgxLmE0OWU1NWJjZTFjODk5MTIzMjM4N2VjZDExMjQ2OThhcDEsCisgICAgLTB4MS4xYWFmY2FwMgorICB9LAorICB7IC8vIEVudHJ5IDMyNQorICAgIC0weDEuNzljZjAzMTM1YTkzNjc5ZDVhYTJlMWRjYzVhZGVkYWZwMSwKKyAgICAweDEuNDI3ZmMycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjYKKyAgICAweDEuNzljZjAzMTM1YTkzNjc5ZDVhYTJlMWRjYzVhZGVkYWZwMSwKKyAgICAtMHgxLjQyN2ZjMnAyCisgIH0sCisgIHsgLy8gRW50cnkgMzI3CisgICAgLTB4MS42ZjFmODZmZGIyMGJjOTkyMzYyN2I5NGQ3NzFmNTM4OHAtMSwKKyAgICAweDEuNmE0ZmJhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjgKKyAgICAweDEuNmYxZjg2ZmRiMjBiYzk5MjM2MjdiOTRkNzcxZjUzODhwLTEsCisgICAgLTB4MS42YTRmYmFwMgorICB9LAorICB7IC8vIEVudHJ5IDMyOQorICAgIC0weDEuNjc3NDdjYTgwMjgyMWM2NmM4N2EwODY2MzhmMjhkMzZwLTEsCisgICAgMHgxLjZhZjJmMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzMwCisgICAgMHgxLjY3NzQ3Y2E4MDI4MjFjNjZjODdhMDg2NjM4ZjI4ZDM2cC0xLAorICAgIC0weDEuNmFmMmYwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzEKKyAgICAtMHgxLjYyNmEzMDI5OGRmMGM0MmMyY2Y3YThmOWMxNjZkNTVkcDEsCisgICAgMHgxLjQzYzYyYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzMyCisgICAgMHgxLjYyNmEzMDI5OGRmMGM0MmMyY2Y3YThmOWMxNjZkNTVkcDEsCisgICAgLTB4MS40M2M2MmFwMgorICB9LAorICB7IC8vIEVudHJ5IDMzMworICAgIDB4MS5kNmFkOGEyMmE0NDA3Y2M2OGRmMjBjZGExZWExYzZhYXAxLAorICAgIDB4MS4xYzk5NjRwMgorICB9LAorICB7IC8vIEVudHJ5IDMzNAorICAgIC0weDEuZDZhZDhhMjJhNDQwN2NjNjhkZjIwY2RhMWVhMWM2YWFwMSwKKyAgICAtMHgxLjFjOTk2NHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzM1CisgICAgMHgxLmE5NGQwMGExNzEwZDliY2M3YjgwNDgxZjQyODU3ZDA1cC0xLAorICAgIDB4MS5lYWQ5M2NwMQorICB9LAorICB7IC8vIEVudHJ5IDMzNgorICAgIC0weDEuYTk0ZDAwYTE3MTBkOWJjYzdiODA0ODFmNDI4NTdkMDVwLTEsCisgICAgLTB4MS5lYWQ5M2NwMQorICB9LAorICB7IC8vIEVudHJ5IDMzNworICAgIDB4MS40Y2I5ZjRkMzE1YTk5NWIyOGJmYmQ2ZTZhMDkwNTczOHAtNCwKKyAgICAweDEuOWM3ZmIwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzgKKyAgICAtMHgxLjRjYjlmNGQzMTVhOTk1YjI4YmZiZDZlNmEwOTA1NzM4cC00LAorICAgIC0weDEuOWM3ZmIwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzkKKyAgICAtMHgxLjJjYjZmM2JhNTFjZDRjYTM4NWQ3ZjRhNzU2N2MzYTBicC0xLAorICAgIDB4MS40ZTI2MjRwMQorICB9LAorICB7IC8vIEVudHJ5IDM0MAorICAgIDB4MS4yY2I2ZjNiYTUxY2Q0Y2EzODVkN2Y0YTc1NjdjM2EwYnAtMSwKKyAgICAtMHgxLjRlMjYyNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzQxCisgICAgLTB4MS4xOGQ5Mzk5YTgyOTBiM2Y4YjQyYTRhZmMxZjRiMjFkZXAxLAorICAgIDB4MS5mZjk5MzJwMAorICB9LAorICB7IC8vIEVudHJ5IDM0MgorICAgIDB4MS4xOGQ5Mzk5YTgyOTBiM2Y4YjQyYTRhZmMxZjRiMjFkZXAxLAorICAgIC0weDEuZmY5OTMycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDMKKyAgICAweDEuNTZmZDk0YjBjMDY4MTYxM2QzODMxNjA4NDU3ZjViZjZwMiwKKyAgICAweDEuNjJlNjFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDQKKyAgICAtMHgxLjU2ZmQ5NGIwYzA2ODE2MTNkMzgzMTYwODQ1N2Y1YmY2cDIsCisgICAgLTB4MS42MmU2MWNwMAorICB9LAorICB7IC8vIEVudHJ5IDM0NQorICAgIDB4MS5mNGFkMzdmMTNlODE4NjQxZmMxNTU1YmY3OGUwZTk0MnAtMSwKKyAgICAweDEuOGM2NjJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzQ2CisgICAgLTB4MS5mNGFkMzdmMTNlODE4NjQxZmMxNTU1YmY3OGUwZTk0MnAtMSwKKyAgICAtMHgxLjhjNjYyY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDM0NworICAgIDB4MS42YTdlMzBhZDg0NjBmMWE3MTA0NzllMmRiOTQ5NWM5Y3AzLAorICAgIC0weDEuYThhYTFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDgKKyAgICAtMHgxLjZhN2UzMGFkODQ2MGYxYTcxMDQ3OWUyZGI5NDk1YzljcDMsCisgICAgMHgxLmE4YWExY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMzQ5CisgICAgMHgxLjBkNzFmZmFjMWQ1ZTZhYTc1M2NmODA0YTJhOGMxZjVicDYsCisgICAgLTB4MS45NWVjOGFwMAorICB9LAorICB7IC8vIEVudHJ5IDM1MAorICAgIC0weDEuMGQ3MWZmYWMxZDVlNmFhNzUzY2Y4MDRhMmE4YzFmNWJwNiwKKyAgICAweDEuOTVlYzhhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTEKKyAgICAtMHgxLjExZDg0OTgwNzNlMWY0Yjc3NmZlNTY3MmFiYjFmNTRhcDQsCisgICAgLTB4MS44MzJlZjhwMAorICB9LAorICB7IC8vIEVudHJ5IDM1MgorICAgIDB4MS4xMWQ4NDk4MDczZTFmNGI3NzZmZTU2NzJhYmIxZjU0YXA0LAorICAgIDB4MS44MzJlZjhwMAorICB9LAorICB7IC8vIEVudHJ5IDM1MworICAgIC0weDEuZTNhMzRiMzI3MDg4ODNhODU3ODgwNWY4NGVhMDNjNmFwMiwKKyAgICAtMHgxLjcwNzE2NnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzU0CisgICAgMHgxLmUzYTM0YjMyNzA4ODgzYTg1Nzg4MDVmODRlYTAzYzZhcDIsCisgICAgMHgxLjcwNzE2NnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzU1CisgICAgLTB4MS4zNDI5ZDI2MzQwNTRlYWFlM2JkYmVlOTRhNmNlYzE3ZnAyLAorICAgIC0weDEuNWRiM2Q0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTYKKyAgICAweDEuMzQyOWQyNjM0MDU0ZWFhZTNiZGJlZTk0YTZjZWMxN2ZwMiwKKyAgICAweDEuNWRiM2Q0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTcKKyAgICAtMHgxLmMwOGM5NTdiYmI0NWFjYWZhODU2YmZkNzkyY2JmNjYzcDEsCisgICAgLTB4MS40YWY2NDJwMAorICB9LAorICB7IC8vIEVudHJ5IDM1OAorICAgIDB4MS5jMDhjOTU3YmJiNDVhY2FmYTg1NmJmZDc5MmNiZjY2M3AxLAorICAgIDB4MS40YWY2NDJwMAorICB9LAorICB7IC8vIEVudHJ5IDM1OQorICAgIC0weDEuNWQ2MDJiMGQwYmRkYTgyNTIyMWE1MzM2OWM1MzM4ZDdwMSwKKyAgICAtMHgxLjM4MzhiMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzYwCisgICAgMHgxLjVkNjAyYjBkMGJkZGE4MjUyMjFhNTMzNjljNTMzOGQ3cDEsCisgICAgMHgxLjM4MzhiMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzYxCisgICAgLTB4MS4xYjQ4OTRlNDk4NzIwZWMwMTczNWEwMmU1NWVlZmFkOHAxLAorICAgIC0weDEuMjU3YjFlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjIKKyAgICAweDEuMWI0ODk0ZTQ5ODcyMGVjMDE3MzVhMDJlNTVlZWZhZDhwMSwKKyAgICAweDEuMjU3YjFlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjMKKyAgICAtMHgxLmQ3NGNiMjAwYWI1OTA0MDI5MDYyN2E5YjJmZmUyOWNmcDAsCisgICAgLTB4MS4xMmJkOTJwMAorICB9LAorICB7IC8vIEVudHJ5IDM2NAorICAgIDB4MS5kNzRjYjIwMGFiNTkwNDAyOTA2MjdhOWIyZmZlMjljZnAwLAorICAgIDB4MS4xMmJkOTJwMAorICB9LAorICB7IC8vIEVudHJ5IDM2NQorICAgIC0weDEuNmJlNzAxOWYzNGQzNGYyNWNiMGMxNGQwYzdiYzdiMzJwMCwKKyAgICAtMHgxLmVhNWMzZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM2NgorICAgIDB4MS42YmU3MDE5ZjM0ZDM0ZjI1Y2IwYzE0ZDBjN2JjN2IzMnAwLAorICAgIDB4MS5lYTVjM2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjcKKyAgICAtMHgxLjRkMGRlZmJjYjQ4YWE3NWNlMTNlMWI4MmYxZmNiMDQ5cDAsCisgICAgLTB4MS5kNGI4N2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjgKKyAgICAweDEuNGQwZGVmYmNiNDhhYTc1Y2UxM2UxYjgyZjFmY2IwNDlwMCwKKyAgICAweDEuZDRiODdjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzY5CisgICAgLTB4MS4zMTZjODdmZGI3NTk5Y2I1NzM1NGU0Yjk5ZjM4ZDdmZnAwLAorICAgIC0weDEuYmYxNGJhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzcwCisgICAgMHgxLjMxNmM4N2ZkYjc1OTljYjU3MzU0ZTRiOTlmMzhkN2ZmcDAsCisgICAgMHgxLmJmMTRiYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM3MQorICAgIC0weDEuMTg3MjlkZmU1MWRmY2Y3NjdmNzlmMzliNjg5YWU5NWVwMCwKKyAgICAtMHgxLmE5NzBmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM3MgorICAgIDB4MS4xODcyOWRmZTUxZGZjZjc2N2Y3OWYzOWI2ODlhZTk1ZXAwLAorICAgIDB4MS5hOTcwZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzMKKyAgICAtMHgxLjAxYWVlYTljYmU5YThmYjRjY2VmOTlhZDk2MWI2YWQ4cDAsCisgICAgLTB4MS45M2NkMzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzQKKyAgICAweDEuMDFhZWVhOWNiZTlhOGZiNGNjZWY5OWFkOTYxYjZhZDhwMCwKKyAgICAweDEuOTNjZDM2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzc1CisgICAgLTB4MS5kOThlMzczZmFhZDdkYTNkNmM4ODY1YTdmZjliYTdmM3AtMSwKKyAgICAtMHgxLjdlMjk3NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM3NgorICAgIDB4MS5kOThlMzczZmFhZDdkYTNkNmM4ODY1YTdmZjliYTdmM3AtMSwKKyAgICAweDEuN2UyOTc0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzc3CisgICAgLTB4MS5iMmU0NmFmNzA0ZWI3NWQxZmFiMDc2NmFmYzc0NzAzZnAtMSwKKyAgICAtMHgxLjY4ODViMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM3OAorICAgIDB4MS5iMmU0NmFmNzA0ZWI3NWQxZmFiMDc2NmFmYzc0NzAzZnAtMSwKKyAgICAweDEuNjg4NWIycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzc5CisgICAgLTB4MS44ZWU5MGI3ZGM4OWIxZjk5OWFlNmRiYjQxYmFjZWIwZHAtMSwKKyAgICAtMHgxLjUyZTFmMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM4MAorICAgIDB4MS44ZWU5MGI3ZGM4OWIxZjk5OWFlNmRiYjQxYmFjZWIwZHAtMSwKKyAgICAweDEuNTJlMWYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzgxCisgICAgLTB4MS42ZDM5NWYwNTgyMGI0MmY1MTIyM2RhYjg4NDM2N2U3MXAtMSwKKyAgICAtMHgxLjNkM2UzNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM4MgorICAgIDB4MS42ZDM5NWYwNTgyMGI0MmY1MTIyM2RhYjg4NDM2N2U3MXAtMSwKKyAgICAweDEuM2QzZTM2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzgzCisgICAgLTB4MS4yNGUzZGZhZDRjZTE0OTNjYWExMjM4NjRjYjRmNDVkM3AtMSwKKyAgICAtMHgxLjBhMGIwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM4NAorICAgIDB4MS4yNGUzZGZhZDRjZTE0OTNjYWExMjM4NjRjYjRmNDVkM3AtMSwKKyAgICAweDEuMGEwYjAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzg1CisgICAgLTB4MS5mZGJkNWU1M2UwYTZmYzljOGI4MDMyODlmMWMzZGJiN3AtMiwKKyAgICAtMHgxLmQ4ZjcyMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM4NgorICAgIDB4MS5mZGJkNWU1M2UwYTZmYzljOGI4MDMyODlmMWMzZGJiN3AtMiwKKyAgICAweDEuZDhmNzIwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzg3CisgICAgLTB4MS5iNWYzZDYxYzU0ZWU0ZjY1ODVlOWJmZjQ4OWMwMDE4MnAtMiwKKyAgICAtMHgxLjlkZDgzY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDM4OAorICAgIDB4MS5iNWYzZDYxYzU0ZWU0ZjY1ODVlOWJmZjQ4OWMwMDE4MnAtMiwKKyAgICAweDEuOWRkODNjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzg5CisgICAgLTB4MS43MWEwZjkwN2M2NjFkYWY0OTAzYjdiYmMwMTVjNWMxNHAtMiwKKyAgICAtMHgxLjYyYjk1OHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM5MAorICAgIDB4MS43MWEwZjkwN2M2NjFkYWY0OTAzYjdiYmMwMTVjNWMxNHAtMiwKKyAgICAweDEuNjJiOTU4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzkxCisgICAgLTB4MS4zMDE5MDk0MWU2OTlmZGIyMTE1YTllZjZiZjgyZDQ1NXAtMiwKKyAgICAtMHgxLjI3OWE3NHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM5MgorICAgIDB4MS4zMDE5MDk0MWU2OTlmZGIyMTE1YTllZjZiZjgyZDQ1NXAtMiwKKyAgICAweDEuMjc5YTc0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzkzCisgICAgLTB4MS5lMThlOTM4NjdjYWY2N2VmY2FhMTk4MjE4OThkNTBjYXAtMywKKyAgICAtMHgxLmQ4ZjcyMHAtMworICB9LAorICB7IC8vIEVudHJ5IDM5NAorICAgIDB4MS5lMThlOTM4NjdjYWY2N2VmY2FhMTk4MjE4OThkNTBjYXAtMywKKyAgICAweDEuZDhmNzIwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzk1CisgICAgLTB4MS42NjUwNzdkZGE4MjJiMTg5YTU2YTAyZTE1YzA0ZDVkNHAtMywKKyAgICAtMHgxLjYyYjk1OHAtMworICB9LAorICB7IC8vIEVudHJ5IDM5NgorICAgIDB4MS42NjUwNzdkZGE4MjJiMTg5YTU2YTAyZTE1YzA0ZDVkNHAtMywKKyAgICAweDEuNjJiOTU4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzk3CisgICAgLTB4MS5kYjE0MjNkODc3YjI1MGFmNmVhNTU0Njk2MDc0M2Q3MnAtNCwKKyAgICAtMHgxLmQ4ZjcyMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDM5OAorICAgIDB4MS5kYjE0MjNkODc3YjI1MGFmNmVhNTU0Njk2MDc0M2Q3MnAtNCwKKyAgICAweDEuZDhmNzIwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzk5CisgICAgLTB4MS5kOTdkZDY0M2ZmZWVmNTdkMGEyMjUwNTE5NzhlYzhhZHAtNSwKKyAgICAtMHgxLmQ4ZjcyMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDQwMAorICAgIDB4MS5kOTdkZDY0M2ZmZWVmNTdkMGEyMjUwNTE5NzhlYzhhZHAtNSwKKyAgICAweDEuZDhmNzIwcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDAxCisgICAgMHgxLmQ5N2RkNjQzZmZlZWY1N2QwYTIyNTA1MTk3OGVjOGFkcC01LAorICAgIDB4MS5kOGY3MjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDIKKyAgICAtMHgxLmQ5N2RkNjQzZmZlZWY1N2QwYTIyNTA1MTk3OGVjOGFkcC01LAorICAgIC0weDEuZDhmNzIwcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDAzCisgICAgMHgxLmRiMTQyM2Q4NzdiMjUwYWY2ZWE1NTQ2OTYwNzQzZDcycC00LAorICAgIDB4MS5kOGY3MjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDQKKyAgICAtMHgxLmRiMTQyM2Q4NzdiMjUwYWY2ZWE1NTQ2OTYwNzQzZDcycC00LAorICAgIC0weDEuZDhmNzIwcC00CisgIH0sCisgIHsgLy8gRW50cnkgNDA1CisgICAgMHgxLjY2NTA3N2RkYTgyMmIxODlhNTZhMDJlMTVjMDRkNWQ0cC0zLAorICAgIDB4MS42MmI5NThwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDYKKyAgICAtMHgxLjY2NTA3N2RkYTgyMmIxODlhNTZhMDJlMTVjMDRkNWQ0cC0zLAorICAgIC0weDEuNjJiOTU4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDA3CisgICAgMHgxLmUxOGU5Mzg2N2NhZjY3ZWZjYWExOTgyMTg5OGQ1MGNhcC0zLAorICAgIDB4MS5kOGY3MjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDgKKyAgICAtMHgxLmUxOGU5Mzg2N2NhZjY3ZWZjYWExOTgyMTg5OGQ1MGNhcC0zLAorICAgIC0weDEuZDhmNzIwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDA5CisgICAgMHgxLjMwMTkwOTQxZTY5OWZkYjIxMTVhOWVmNmJmODJkNDU1cC0yLAorICAgIDB4MS4yNzlhNzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTAKKyAgICAtMHgxLjMwMTkwOTQxZTY5OWZkYjIxMTVhOWVmNmJmODJkNDU1cC0yLAorICAgIC0weDEuMjc5YTc0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDExCisgICAgMHgxLjcxYTBmOTA3YzY2MWRhZjQ5MDNiN2JiYzAxNWM1YzE0cC0yLAorICAgIDB4MS42MmI5NThwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTIKKyAgICAtMHgxLjcxYTBmOTA3YzY2MWRhZjQ5MDNiN2JiYzAxNWM1YzE0cC0yLAorICAgIC0weDEuNjJiOTU4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDEzCisgICAgMHgxLmI1ZjNkNjFjNTRlZTRmNjU4NWU5YmZmNDg5YzAwMTgycC0yLAorICAgIDB4MS45ZGQ4M2NwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTQKKyAgICAtMHgxLmI1ZjNkNjFjNTRlZTRmNjU4NWU5YmZmNDg5YzAwMTgycC0yLAorICAgIC0weDEuOWRkODNjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDE1CisgICAgMHgxLmZkYmQ1ZTUzZTBhNmZjOWM4YjgwMzI4OWYxYzNkYmI3cC0yLAorICAgIDB4MS5kOGY3MjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTYKKyAgICAtMHgxLmZkYmQ1ZTUzZTBhNmZjOWM4YjgwMzI4OWYxYzNkYmI3cC0yLAorICAgIC0weDEuZDhmNzIwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDE3CisgICAgMHgxLjI0ZTNkZmFkNGNlMTQ5M2NhYTEyMzg2NGNiNGY0NWQzcC0xLAorICAgIDB4MS4wYTBiMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTgKKyAgICAtMHgxLjI0ZTNkZmFkNGNlMTQ5M2NhYTEyMzg2NGNiNGY0NWQzcC0xLAorICAgIC0weDEuMGEwYjAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDE5CisgICAgMHgxLjZkMzk1ZjA1ODIwYjQyZjUxMjIzZGFiODg0MzY3ZTcxcC0xLAorICAgIDB4MS4zZDNlMzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjAKKyAgICAtMHgxLjZkMzk1ZjA1ODIwYjQyZjUxMjIzZGFiODg0MzY3ZTcxcC0xLAorICAgIC0weDEuM2QzZTM2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDIxCisgICAgMHgxLjhlZTkxODU4ZmJhYWYyYTM0YTMyZGQ5NDdmZDdlMDc2cC0xLAorICAgIDB4MS41MmUxZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjIKKyAgICAtMHgxLjhlZTkxODU4ZmJhYWYyYTM0YTMyZGQ5NDdmZDdlMDc2cC0xLAorICAgIC0weDEuNTJlMWY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDIzCisgICAgMHgxLmIyZTQ3OGJjOWJhNzM4ZGI5MGIyYTRiYzI5NGVjZjRmcC0xLAorICAgIDB4MS42ODg1YmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjQKKyAgICAtMHgxLmIyZTQ3OGJjOWJhNzM4ZGI5MGIyYTRiYzI5NGVjZjRmcC0xLAorICAgIC0weDEuNjg4NWJhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDI1CisgICAgMHgxLmQ5OGU0NjE3YThiZDFhMWJiOWUyZTk4OWQ4YWQzNWNjcC0xLAorICAgIDB4MS43ZTI5N2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjYKKyAgICAtMHgxLmQ5OGU0NjE3YThiZDFhMWJiOWUyZTk4OWQ4YWQzNWNjcC0xLAorICAgIC0weDEuN2UyOTdjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDI3CisgICAgMHgxLjAxYWVmMmFhNDE2NTQ1ZTM5MDA4NjRmMmIzNWQ4NmE2cDAsCisgICAgMHgxLjkzY2QzZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQyOAorICAgIC0weDEuMDFhZWYyYWE0MTY1NDVlMzkwMDg2NGYyYjM1ZDg2YTZwMCwKKyAgICAtMHgxLjkzY2QzZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQyOQorICAgIDB4MS4xODcyYTZjYjNkYmExNTZkYjhkYzc4NGU5NWQ5NmE0NnAwLAorICAgIDB4MS5hOTcxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDMwCisgICAgLTB4MS4xODcyYTZjYjNkYmExNTZkYjhkYzc4NGU5NWQ5NmE0NnAwLAorICAgIC0weDEuYTk3MXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQzMQorICAgIDB4MS4zMTZjOTFhZjQ2YjAxNWE5YzkzMWE4MTZmZWQ4OTA5MnAwLAorICAgIDB4MS5iZjE0YzJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzIKKyAgICAtMHgxLjMxNmM5MWFmNDZiMDE1YTljOTMxYTgxNmZlZDg5MDkycDAsCisgICAgLTB4MS5iZjE0YzJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzMKKyAgICAweDEuNGQwZGZhODFlOWNjODA2YzEwMTk0ZmJhNmI3Njc3NjFwMCwKKyAgICAweDEuZDRiODg0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDM0CisgICAgLTB4MS40ZDBkZmE4MWU5Y2M4MDZjMTAxOTRmYmE2Yjc2Nzc2MXAwLAorICAgIC0weDEuZDRiODg0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDM1CisgICAgMHgxLjZiZTcwMTlmMzRkMzRmMjVjYjBjMTRkMGM3YmM3YjMycDAsCisgICAgMHgxLmVhNWMzZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQzNgorICAgIC0weDEuNmJlNzAxOWYzNGQzNGYyNWNiMGMxNGQwYzdiYzdiMzJwMCwKKyAgICAtMHgxLmVhNWMzZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQzNworICAgIDB4MS5kNzRjYjIwMGFiNTkwNDAyOTA2MjdhOWIyZmZlMjljZnAwLAorICAgIDB4MS4xMmJkOTJwMAorICB9LAorICB7IC8vIEVudHJ5IDQzOAorICAgIC0weDEuZDc0Y2IyMDBhYjU5MDQwMjkwNjI3YTliMmZmZTI5Y2ZwMCwKKyAgICAtMHgxLjEyYmQ5MnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDM5CisgICAgMHgxLjFiNDhhNjk2NGMwMjQ2NDhmMTg2YmI2YjFlYmRlZWMycDEsCisgICAgMHgxLjI1N2IyNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQwCisgICAgLTB4MS4xYjQ4YTY5NjRjMDI0NjQ4ZjE4NmJiNmIxZWJkZWVjMnAxLAorICAgIC0weDEuMjU3YjI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDEKKyAgICAweDEuNWQ2MDQ0NjZjNWFlZThmMWExZDg0NzBmN2ZmNTc5Y2ZwMSwKKyAgICAweDEuMzgzOGI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDIKKyAgICAtMHgxLjVkNjA0NDY2YzVhZWU4ZjFhMWQ4NDcwZjdmZjU3OWNmcDEsCisgICAgLTB4MS4zODM4YjZwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0MworICAgIDB4MS5jMDhjYmQ1MmQyYjAxMmYwY2I0N2JjYjNmZjUxM2M2ZHAxLAorICAgIDB4MS40YWY2NDhwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0NAorICAgIC0weDEuYzA4Y2JkNTJkMmIwMTJmMGNiNDdiY2IzZmY1MTNjNmRwMSwKKyAgICAtMHgxLjRhZjY0OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQ1CisgICAgMHgxLjM0MjlmNmFhMzQ0NmQ3MDNlNmVmOTZlMGI1NjRmYzBjcDIsCisgICAgMHgxLjVkYjNkYXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQ2CisgICAgLTB4MS4zNDI5ZjZhYTM0NDZkNzAzZTZlZjk2ZTBiNTY0ZmMwY3AyLAorICAgIC0weDEuNWRiM2RhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDcKKyAgICAweDEuZTNhM2EyNWIyNjA2NDE4YTEzOTcwOTcxYmVlZjQxZDZwMiwKKyAgICAweDEuNzA3MTZjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDgKKyAgICAtMHgxLmUzYTNhMjViMjYwNjQxOGExMzk3MDk3MWJlZWY0MWQ2cDIsCisgICAgLTB4MS43MDcxNmNwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0OQorICAgIDB4MS4xMWQ4YjdiYTQxNjk0NjU4MTExYWY0ODkyNWJiYWQ2OHA0LAorICAgIDB4MS44MzJlZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1MAorICAgIC0weDEuMTFkOGI3YmE0MTY5NDY1ODExMWFmNDg5MjViYmFkNjhwNCwKKyAgICAtMHgxLjgzMmVmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDUxCisgICAgLTB4MS4wZDcwNTYzMTkzZmUyMTlmM2ZkMzFhMjg1ZjRkNjYzOHA2LAorICAgIDB4MS45NWVjOTBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1MgorICAgIDB4MS4wZDcwNTYzMTkzZmUyMTlmM2ZkMzFhMjg1ZjRkNjYzOHA2LAorICAgIC0weDEuOTVlYzkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTMKKyAgICAtMHgxLjZhN2UzMGFkODQ2MGYxYTcxMDQ3OWUyZGI5NDk1YzljcDMsCisgICAgMHgxLmE4YWExY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDU0CisgICAgMHgxLjZhN2UzMGFkODQ2MGYxYTcxMDQ3OWUyZGI5NDk1YzljcDMsCisgICAgLTB4MS5hOGFhMWNwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1NQorICAgIDB4MS45ZjM5ZWU5ZmVkYjIzNzVlYzA1ZDZkYTdhMjg4YzZiZHAwLAorICAgIDB4MS4wNGFmZjhwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1NgorICAgIC0weDEuOWYzOWVlOWZlZGIyMzc1ZWMwNWQ2ZGE3YTI4OGM2YmRwMCwKKyAgICAtMHgxLjA0YWZmOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDU3CisgICAgMHgxLjlmM2M1MDljNmE3ZDc1ZTQ1MTA4ODM1OWM4OGRlZjg4cDAsCisgICAgMHgxLjA0YjBhMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDU4CisgICAgLTB4MS45ZjNjNTA5YzZhN2Q3NWU0NTEwODgzNTljODhkZWY4OHAwLAorICAgIC0weDEuMDRiMGEwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTkKKyAgICAweDEuOWYzZWIyOWRmOWU2YTIwNDY3NDc0ZTI0ZDhiZjM1YmFwMCwKKyAgICAweDEuMDRiMTQ4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjAKKyAgICAtMHgxLjlmM2ViMjlkZjllNmEyMDQ2NzQ3NGUyNGQ4YmYzNWJhcDAsCisgICAgLTB4MS4wNGIxNDhwMAorICB9LAorICB7IC8vIEVudHJ5IDQ2MQorICAgIDB4MS45ZjQxMTRhNDliZmZmYzNmNWExODNkMzYwMDBhYTc4NXAwLAorICAgIDB4MS4wNGIxZjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ2MgorICAgIC0weDEuOWY0MTE0YTQ5YmZmZmMzZjVhMTgzZDM2MDAwYWE3ODVwMCwKKyAgICAtMHgxLjA0YjFmMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDYzCisgICAgMHgxLjlmNDM3NmIwNTBkYmM1NmJmNTU5NjA4MzE5MjA3N2I1cDAsCisgICAgMHgxLjA0YjI5OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDY0CisgICAgLTB4MS45ZjQzNzZiMDUwZGJjNTZiZjU1OTYwODMxOTIwNzdiNXAwLAorICAgIC0weDEuMDRiMjk4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjUKKyAgICAweDEuOWY0NWQ4YzExODhjM2ViNzdiY2EyYzRhODRjN2VhZGRwMCwKKyAgICAweDEuMDRiMzQwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjYKKyAgICAtMHgxLjlmNDVkOGMxMTg4YzNlYjc3YmNhMmM0YTg0YzdlYWRkcDAsCisgICAgLTB4MS4wNGIzNDBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ2NworICAgIDB4MS45ZjQ4M2FkNmYzMjNhOWE1YTkwZDRhZTA3YTIzZDI2NnAwLAorICAgIDB4MS4wNGIzZThwMAorICB9LAorICB7IC8vIEVudHJ5IDQ2OAorICAgIC0weDEuOWY0ODNhZDZmMzIzYTlhNWE5MGQ0YWUwN2EyM2QyNjZwMCwKKyAgICAtMHgxLjA0YjNlOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDY5CisgICAgMHgxLjlmNGE5Y2YxZTBiNDQ4MTBiM2FhN2NjYTQ1ZDcxY2M5cDAsCisgICAgMHgxLjA0YjQ5MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDcwCisgICAgLTB4MS45ZjRhOWNmMWUwYjQ0ODEwYjNhYTdjY2E0NWQ3MWNjOXAwLAorICAgIC0weDEuMDRiNDkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzEKKyAgICAweDEuOWY0Y2YwOGFmNmM2MGVkNmUyYmFkZDVhN2I1YzFlODdwMCwKKyAgICAweDEuMDRiNTM0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzIKKyAgICAtMHgxLjlmNGNmMDhhZjZjNjBlZDZlMmJhZGQ1YTdiNWMxZTg3cDAsCisgICAgLTB4MS4wNGI1MzRwMAorICB9LAorICB7IC8vIEVudHJ5IDQ3MworICAgIC0weDEucC0xNDksCisgICAgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDQ3NAorICAgIDB4MS5wLTE0OSwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzUKKyAgICAwLjAsCisgICAgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNDc2CisgICAgMHgxLnAtMTQ5LAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDQ3NworICAgIC0weDEucC0xNDksCisgICAgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDQ3OAorICAgIDB4MS40ZDgyYjMzNGE1ODJhNTZhODAyZjk2YjNiOTZmZWI4MXAtMSwKKyAgICAweDEuMjc5YTcycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDc5CisgICAgLTB4MS40ZDgyYjMzNGE1ODJhNTZhODAyZjk2YjNiOTZmZWI4MXAtMSwKKyAgICAtMHgxLjI3OWE3MnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ4MAorICAgIDB4MS40ZDgyYjYwZGU0MjhmOTJhYThjOTZhNGE3ZmU4ODk0NXAtMSwKKyAgICAweDEuMjc5YTc0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDgxCisgICAgLTB4MS40ZDgyYjYwZGU0MjhmOTJhYThjOTZhNGE3ZmU4ODk0NXAtMSwKKyAgICAtMHgxLjI3OWE3NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ4MgorICAgIDB4MS40ZDgyYjhlNzIyZDMwMmY1YWE5MzlhNTYzYjEyYjFhMXAtMSwKKyAgICAweDEuMjc5YTc2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDgzCisgICAgLTB4MS40ZDgyYjhlNzIyZDMwMmY1YWE5MzlhNTYzYjEyYjFhMXAtMSwKKyAgICAtMHgxLjI3OWE3NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ4NAorICAgIC0weDEuODk3MTQ3NjBlOGZlZDlhZjAzYTkxY2YxNTI3Y2VhYWRwMiwKKyAgICAweDEuYmI2N2FjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODUKKyAgICAweDEuODk3MTQ3NjBlOGZlZDlhZjAzYTkxY2YxNTI3Y2VhYWRwMiwKKyAgICAtMHgxLmJiNjdhY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDg2CisgICAgLTB4MS44OTcxMzNmYjgxZjMxNjliMzE2MWQ1MGI1MGNjYzFhN3AyLAorICAgIDB4MS5iYjY3YWVwMAorICB9LAorICB7IC8vIEVudHJ5IDQ4NworICAgIDB4MS44OTcxMzNmYjgxZjMxNjliMzE2MWQ1MGI1MGNjYzFhN3AyLAorICAgIC0weDEuYmI2N2FlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODgKKyAgICAtMHgxLjg5NzEyMDk2MWNjNDQ3NWViM2I4MDYxZGYwNDA5NDMwcDIsCisgICAgMHgxLmJiNjdiMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDg5CisgICAgMHgxLjg5NzEyMDk2MWNjNDQ3NWViM2I4MDYxZGYwNDA5NDMwcDIsCisgICAgLTB4MS5iYjY3YjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ5MAorICAgIDB4MS5kZWY0OWMzYWIwYWQ1ZGRlOTNiYTM0YzU0ZGI3MTRjN3AtMiwKKyAgICAweDEuYmZmZmZlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDkxCisgICAgLTB4MS5kZWY0OWMzYWIwYWQ1ZGRlOTNiYTM0YzU0ZGI3MTRjN3AtMiwKKyAgICAtMHgxLmJmZmZmZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDQ5MgorICAgIDB4MS5kZWY0OWVhYWIzN2ExNDc5MjMxZTg5OTUwOWVjZjI2Y3AtMiwKKyAgICAweDEuYzBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTMKKyAgICAtMHgxLmRlZjQ5ZWFhYjM3YTE0NzkyMzFlODk5NTA5ZWNmMjZjcC0yLAorICAgIC0weDEuYzBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTQKKyAgICAweDEuZGVmNGExMWFiNjQ3ZWVmMjEyYjE5OTdkM2I1MTQwNWFwLTIsCisgICAgMHgxLmMwMDAwMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDQ5NQorICAgIC0weDEuZGVmNGExMWFiNjQ3ZWVmMjEyYjE5OTdkM2I1MTQwNWFwLTIsCisgICAgLTB4MS5jMDAwMDJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTYKKyAgICAweDEuYTQ2Y2FmNjUyZmExODk4N2U0ZDBhNzlmODE0NWRkNWJwLTEsCisgICAgMHgxLjVmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ5NworICAgIC0weDEuYTQ2Y2FmNjUyZmExODk4N2U0ZDBhNzlmODE0NWRkNWJwLTEsCisgICAgLTB4MS41ZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTgKKyAgICAweDEuYTQ2Y2IyYmU2YTBiMWRhY2IzNjI2OWM0MWE0YTkxNDdwLTEsCisgICAgMHgxLjYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDk5CisgICAgLTB4MS5hNDZjYjJiZTZhMGIxZGFjYjM2MjY5YzQxYTRhOTE0N3AtMSwKKyAgICAtMHgxLjYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTAwCisgICAgMHgxLmE0NmNiNjE3YTQ3YTMxYTE1NmRjMDAwNWI0ZTZlYnAtMSwKKyAgICAweDEuNjAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTAxCisgICAgLTB4MS5hNDZjYjYxN2E0N2EzMWExNTZkYzAwMDViNGU2ZWJwLTEsCisgICAgLTB4MS42MDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDIKKyAgICAweDEuM2Q2ZGMyMzA4NjljNzBkNTkzN2ZlZGM5MmQ0MjRkZjJwMSwKKyAgICAweDEuMmZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDMKKyAgICAtMHgxLjNkNmRjMjMwODY5YzcwZDU5MzdmZWRjOTJkNDI0ZGYycDEsCisgICAgLTB4MS4yZmZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDUwNAorICAgIDB4MS4zZDZkYzk1NmVhYzdkM2I4ZDZlYjIxNzQxMTBkMWRkY3AxLAorICAgIDB4MS4zMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNTA1CisgICAgLTB4MS4zZDZkYzk1NmVhYzdkM2I4ZDZlYjIxNzQxMTBkMWRkY3AxLAorICAgIC0weDEuMzBwMAorICB9LAorICB7IC8vIEVudHJ5IDUwNgorICAgIDB4MS4zZDZkZDA3ZDRmM2EyMzc1ODlhZDVjNDFjMzgwMWNiNHAxLAorICAgIDB4MS4zMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDUwNworICAgIC0weDEuM2Q2ZGQwN2Q0ZjNhMjM3NTg5YWQ1YzQxYzM4MDFjYjRwMSwKKyAgICAtMHgxLjMwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTA4CisgICAgLTB4MS5iMmQ4YTg1OGM5MGE1MzhkMWRhYWQ3ODA0MGU2OWI5OHAtMSwKKyAgICAweDEuMzdmZmZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDkKKyAgICAweDEuYjJkOGE4NThjOTBhNTM4ZDFkYWFkNzgwNDBlNjliOThwLTEsCisgICAgLTB4MS4zN2ZmZmVwMQorICB9LAorICB7IC8vIEVudHJ5IDUxMAorICAgIC0weDEuYjJkODlhOTM4Mjk0YzhhMjYwNGRiOWY3YWE1NmEwZjhwLTEsCisgICAgMHgxLjM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTEKKyAgICAweDEuYjJkODlhOTM4Mjk0YzhhMjYwNGRiOWY3YWE1NmEwZjhwLTEsCisgICAgLTB4MS4zOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTEyCisgICAgLTB4MS5iMmQ4OGNjZTNjN2NjZTE3NDI2NjQzOWRhMzA5Y2Y2MHAtMSwKKyAgICAweDEuMzgwMDAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTMKKyAgICAweDEuYjJkODhjY2UzYzdjY2UxNzQyNjY0MzlkYTMwOWNmNjBwLTEsCisgICAgLTB4MS4zODAwMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDUxNAorICAgIDB4MS4wNmY4ZDBjZWNmMTY5YjA2NDY3ZTRhYTAzNmNmODI3OXAtNCwKKyAgICAweDEuMDY5YzhjcC00CisgIH0sCisgIHsgLy8gRW50cnkgNTE1CisgICAgLTB4MS4wNmY4ZDBjZWNmMTY5YjA2NDY3ZTRhYTAzNmNmODI3OXAtNCwKKyAgICAtMHgxLjA2OWM4Y3AtNAorICB9LAorICB7IC8vIEVudHJ5IDUxNgorICAgIDB4MS4wODBmNzQ2Y2QxNzM5N2I2MGY5MDhlMmJlMDFmN2JhN3AtMywKKyAgICAweDEuMDY5YzhjcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNTE3CisgICAgLTB4MS4wODBmNzQ2Y2QxNzM5N2I2MGY5MDhlMmJlMDFmN2JhN3AtMywKKyAgICAtMHgxLjA2OWM4Y3AtMworICB9LAorICB7IC8vIEVudHJ5IDUxOAorICAgIDB4MS44ZWQ5MTU1MDQ2OWQwZWIwOGFhZTIwNjU4OTU4MDQzYnAtMywKKyAgICAweDEuODllYWQycC0zCisgIH0sCisgIHsgLy8gRW50cnkgNTE5CisgICAgLTB4MS44ZWQ5MTU1MDQ2OWQwZWIwOGFhZTIwNjU4OTU4MDQzYnAtMywKKyAgICAtMHgxLjg5ZWFkMnAtMworICB9LAorICB7IC8vIEVudHJ5IDUyMAorICAgIDB4MS4wYzg2NDE0OWRjNjgyNzZkZjI5OTI4MmQwNGY2OWFmNnAtMiwKKyAgICAweDEuMDY5YzhjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTIxCisgICAgLTB4MS4wYzg2NDE0OWRjNjgyNzZkZjI5OTI4MmQwNGY2OWFmNnAtMiwKKyAgICAtMHgxLjA2OWM4Y3AtMgorICB9LAorICB7IC8vIEVudHJ5IDUyMgorICAgIDB4MS41M2ZkZDAxYTk4ZjA3ZjIwODU1NWNjNjQ0Mjc2ZWYyY3AtMiwKKyAgICAweDEuNDg0M2IwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTIzCisgICAgLTB4MS41M2ZkZDAxYTk4ZjA3ZjIwODU1NWNjNjQ0Mjc2ZWYyY3AtMiwKKyAgICAtMHgxLjQ4NDNiMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDUyNAorICAgIDB4MS45ZTkyNWI3ZTIzN2I4OGFjNjA5OGI1MTNjMzcxNzU3Y3AtMiwKKyAgICAweDEuODllYWQ0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTI1CisgICAgLTB4MS45ZTkyNWI3ZTIzN2I4OGFjNjA5OGI1MTNjMzcxNzU3Y3AtMiwKKyAgICAtMHgxLjg5ZWFkNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDUyNgorICAgIDB4MS5lZDIxZWFkYjA4ZTQ3ZGI4YjJmMTE4ODBmYmI1Mjg3OXAtMiwKKyAgICAweDEuY2I5MWY4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTI3CisgICAgLTB4MS5lZDIxZWFkYjA4ZTQ3ZGI4YjJmMTE4ODBmYmI1Mjg3OXAtMiwKKyAgICAtMHgxLmNiOTFmOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDUyOAorICAgIDB4MS4yMDVhNjNhMDRlMzFlMTg1MmFmM2RhMjJlOWY2OWExOXAtMSwKKyAgICAweDEuMDY5YzhlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTI5CisgICAgLTB4MS4yMDVhNjNhMDRlMzFlMTg1MmFmM2RhMjJlOWY2OWExOXAtMSwKKyAgICAtMHgxLjA2OWM4ZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDUzMAorICAgIDB4MS40ZDQ2NmY4NGEzMjg4NTE1YWI2OTlkZDFjZWMzNDVkM3AtMSwKKyAgICAweDEuMjc3MDIwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTMxCisgICAgLTB4MS40ZDQ2NmY4NGEzMjg4NTE1YWI2OTlkZDFjZWMzNDVkM3AtMSwKKyAgICAtMHgxLjI3NzAyMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDUzMgorICAgIDB4MS43ZTFkOTk4M2I1ODc1NGEyOTAxMmUxN2EyNmYyNzdkN3AtMSwKKyAgICAweDEuNDg0M2IycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTMzCisgICAgLTB4MS43ZTFkOTk4M2I1ODc1NGEyOTAxMmUxN2EyNmYyNzdkN3AtMSwKKyAgICAtMHgxLjQ4NDNiMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDUzNAorICAgIDB4MS5iM2RmNDAyZmU0OTg0MmE0MTY0Y2YzODBmZmE1ZGNwLTEsCisgICAgMHgxLjY5MTc0NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDUzNQorICAgIC0weDEuYjNkZjQwMmZlNDk4NDJhNDE2NGNmMzgwZmZhNWRjcC0xLAorICAgIC0weDEuNjkxNzQ0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTM2CisgICAgMHgxLmVmZDgzMTFkZGYyY2MzOTNmMjBlYTc2N2M3YjIyNjRhcC0xLAorICAgIDB4MS44OWVhZDZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzcKKyAgICAtMHgxLmVmZDgzMTFkZGYyY2MzOTNmMjBlYTc2N2M3YjIyNjRhcC0xLAorICAgIC0weDEuODllYWQ2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTM4CisgICAgMHgxLjE5ZTI3MWE2NDQ0ZmYzNGFhMmY3M2M4NTAxNDk3MWM5cDAsCisgICAgMHgxLmFhYmU2OHAtMQorICB9LAorICB7IC8vIEVudHJ5IDUzOQorICAgIC0weDEuMTllMjcxYTY0NDRmZjM0YWEyZjczYzg1MDE0OTcxYzlwMCwKKyAgICAtMHgxLmFhYmU2OHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU0MAorICAgIDB4MS40MTAzOTM4MDJjMWEyMjM4MjkxNGFiZjA5NmFmYmVlOXAwLAorICAgIDB4MS5jYjkxZmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDEKKyAgICAtMHgxLjQxMDM5MzgwMmMxYTIyMzgyOTE0YWJmMDk2YWZiZWU5cDAsCisgICAgLTB4MS5jYjkxZmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDIKKyAgICAweDEuNmVmZWQzM2I3MTQwNDVmZTk5Y2ZhNTk0NzFlMWU5ZmRwMCwKKyAgICAweDEuZWM2NThjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTQzCisgICAgLTB4MS42ZWZlZDMzYjcxNDA0NWZlOTljZmE1OTQ3MWUxZTlmZHAwLAorICAgIC0weDEuZWM2NThjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTQ0CisgICAgMHgxLmE2NGM4NmMwMmU3YTdkOTZlOTFmOTZhNTU4NDEyOWY0cDAsCisgICAgMHgxLjA2OWM4ZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQ1CisgICAgLTB4MS5hNjRjODZjMDJlN2E3ZDk2ZTkxZjk2YTU1ODQxMjlmNHAwLAorICAgIC0weDEuMDY5YzhlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDYKKyAgICAweDEuZWFiNDQ3N2U1YjIyNmRjNTI3MGJhZTk3MjBlYTEzZTNwMCwKKyAgICAweDEuMTcwNjU2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDcKKyAgICAtMHgxLmVhYjQ0NzdlNWIyMjZkYzUyNzBiYWU5NzIwZWExM2UzcDAsCisgICAgLTB4MS4xNzA2NTZwMAorICB9LAorICB7IC8vIEVudHJ5IDU0OAorICAgIDB4MS4yMTI3N2Y5YTdkMmY2NmJiMTMxY2ZmMzJmMjY2MjljZHAxLAorICAgIDB4MS4yNzcwMWVwMAorICB9LAorICB7IC8vIEVudHJ5IDU0OQorICAgIC0weDEuMjEyNzdmOWE3ZDJmNjZiYjEzMWNmZjMyZjI2NjI5Y2RwMSwKKyAgICAtMHgxLjI3NzAxZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTUwCisgICAgMHgxLjViZDE0MDY4MjViM2ZmZWJhNDgyMjFhZDZhOGY1NDE0cDEsCisgICAgMHgxLjM3ZDllNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTUxCisgICAgLTB4MS41YmQxNDA2ODI1YjNmZmViYTQ4MjIxYWQ2YThmNTQxNHAxLAorICAgIC0weDEuMzdkOWU2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTIKKyAgICAweDEuYWY0NjQzNTJhOTg5ZjgwMjgyNDE1MmNhZDBhZmU4YjdwMSwKKyAgICAweDEuNDg0M2FlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTMKKyAgICAtMHgxLmFmNDY0MzUyYTk4OWY4MDI4MjQxNTJjYWQwYWZlOGI3cDEsCisgICAgLTB4MS40ODQzYWVwMAorICB9LAorICB7IC8vIEVudHJ5IDU1NAorICAgIDB4MS4xODY2ZmE3YTYwMWI4N2JiNmYzNzhiMzQzOGUzZmMyNnAyLAorICAgIDB4MS41OGFkNzZwMAorICB9LAorICB7IC8vIEVudHJ5IDU1NQorICAgIC0weDEuMTg2NmZhN2E2MDFiODdiYjZmMzc4YjM0MzhlM2ZjMjZwMiwKKyAgICAtMHgxLjU4YWQ3NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTU2CisgICAgMHgxLjhiZGNjNjg3MThhNzAxMTg4NjBhMWI5NDU0MzdmZDkwcDIsCisgICAgMHgxLjY5MTczZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTU3CisgICAgLTB4MS44YmRjYzY4NzE4YTcwMTE4ODYwYTFiOTQ1NDM3ZmQ5MHAyLAorICAgIC0weDEuNjkxNzNlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTgKKyAgICAweDEuNGJiNjg4NTlkM2VhZmIyYTEzMGI3M2JhMDdlNDhlOGFwMywKKyAgICAweDEuNzk4MTA2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTkKKyAgICAtMHgxLjRiYjY4ODU5ZDNlYWZiMmExMzBiNzNiYTA3ZTQ4ZThhcDMsCisgICAgLTB4MS43OTgxMDZwMAorICB9LAorICB7IC8vIEVudHJ5IDU2MAorICAgIDB4MS5mMmVmYWJhZWIzMjJlYzVjYTlkMzM4NjkyOTVjNjA2M3A0LAorICAgIDB4MS44OWVhY2VwMAorICB9LAorICB7IC8vIEVudHJ5IDU2MQorICAgIC0weDEuZjJlZmFiYWViMzIyZWM1Y2E5ZDMzODY5Mjk1YzYwNjNwNCwKKyAgICAtMHgxLjg5ZWFjZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTYyCisgICAgLTB4MS5mMmYxMzkyOTMyM2VmOGY1OGRiMTUyMTQzZTY1YmNiN3A0LAorICAgIDB4MS45YTU0OTZwMAorICB9LAorICB7IC8vIEVudHJ5IDU2MworICAgIDB4MS5mMmYxMzkyOTMyM2VmOGY1OGRiMTUyMTQzZTY1YmNiN3A0LAorICAgIC0weDEuOWE1NDk2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjQKKyAgICAtMHgxLjRiYjZlMGVjMDJjYWQ1YzExMGE0ZDcwMDM5ZGI0ZDFjcDMsCisgICAgMHgxLmFhYmU1ZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTY1CisgICAgMHgxLjRiYjZlMGVjMDJjYWQ1YzExMGE0ZDcwMDM5ZGI0ZDFjcDMsCisgICAgLTB4MS5hYWJlNWVwMAorICB9LAorICB7IC8vIEVudHJ5IDU2NgorICAgIC0weDEuOGJkZDA2YTY1NWRmYTJmMzE5NWFjYTQ4Nzk4ZTVjODZwMiwKKyAgICAweDEuYmIyODI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjcKKyAgICAweDEuOGJkZDA2YTY1NWRmYTJmMzE5NWFjYTQ4Nzk4ZTVjODZwMiwKKyAgICAtMHgxLmJiMjgyNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTY4CisgICAgLTB4MS4xODY3MWI3NmNmY2NmOThhNmVkYmMxZmQ1Yjg2NDdiN3AyLAorICAgIDB4MS5jYjkxZWVwMAorICB9LAorICB7IC8vIEVudHJ5IDU2OQorICAgIDB4MS4xODY3MWI3NmNmY2NmOThhNmVkYmMxZmQ1Yjg2NDdiN3AyLAorICAgIC0weDEuY2I5MWVlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzAKKyAgICAtMHgxLmFmNDY2YmFjODBkYzlkZjY2OGQxZTBlOWI0NDJiZjBlcDEsCisgICAgMHgxLmRiZmJiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTcxCisgICAgMHgxLmFmNDY2YmFjODBkYzlkZjY2OGQxZTBlOWI0NDJiZjBlcDEsCisgICAgLTB4MS5kYmZiYjZwMAorICB9LAorICB7IC8vIEVudHJ5IDU3MgorICAgIC0weDEuNWJkMTViY2IzZDA2OTA2Y2VmNWYzYjJlYzNhYjRhYjlwMSwKKyAgICAweDEuZWM2NTdlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzMKKyAgICAweDEuNWJkMTViY2IzZDA2OTA2Y2VmNWYzYjJlYzNhYjRhYjlwMSwKKyAgICAtMHgxLmVjNjU3ZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTc0CisgICAgLTB4MS4yMTI3OTM4YTU0NmQzYzQyODI5MmJhNTNlZTZmNjdjY3AxLAorICAgIDB4MS5mY2NmNDZwMAorICB9LAorICB7IC8vIEVudHJ5IDU3NQorICAgIDB4MS4yMTI3OTM4YTU0NmQzYzQyODI5MmJhNTNlZTZmNjdjY3AxLAorICAgIC0weDEuZmNjZjQ2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzYKKyAgICAtMHgxLmVhYjQ1Y2FlZDcwNmM0ZGI2MjJjOTBmZTNlOGQxNmMycDAsCisgICAgMHgxLjA2OWM4OHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTc3CisgICAgMHgxLmVhYjQ1Y2FlZDcwNmM0ZGI2MjJjOTBmZTNlOGQxNmMycDAsCisgICAgLTB4MS4wNjljODhwMQorICB9LAorICB7IC8vIEVudHJ5IDU3OAorICAgIC0weDEuYTY0Yzk3OWViNzAzZDgyY2I0ODA4MDQ0ZThhYmY5M2ZwMCwKKyAgICAweDEuMGVkMTZjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzkKKyAgICAweDEuYTY0Yzk3OWViNzAzZDgyY2I0ODA4MDQ0ZThhYmY5M2ZwMCwKKyAgICAtMHgxLjBlZDE2Y3AxCisgIH0sCisgIHsgLy8gRW50cnkgNTgwCisgICAgLTB4MS42ZWZlZTExNTAwMjYzYzEwYzFkMWJiNTkwNDI0NGRlNnAwLAorICAgIDB4MS4xNzA2NTBwMQorICB9LAorICB7IC8vIEVudHJ5IDU4MQorICAgIDB4MS42ZWZlZTExNTAwMjYzYzEwYzFkMWJiNTkwNDI0NGRlNnAwLAorICAgIC0weDEuMTcwNjUwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODIKKyAgICAtMHgxLjQxMDNhMWJjMGY2NTc2YTc2MGQ0OWRhM2JmZTU1ODc0cDAsCisgICAgMHgxLjFmM2IzNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTgzCisgICAgMHgxLjQxMDNhMWJjMGY2NTc2YTc2MGQ0OWRhM2JmZTU1ODc0cDAsCisgICAgLTB4MS4xZjNiMzRwMQorICB9LAorICB7IC8vIEVudHJ5IDU4NAorICAgIC0weDEuMTllMjgwMWFhMjRlZTBhZGNkOTQ5MWU0ZDdhZjI1NmZwMCwKKyAgICAweDEuMjc3MDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODUKKyAgICAweDEuMTllMjgwMWFhMjRlZTBhZGNkOTQ5MWU0ZDdhZjI1NmZwMCwKKyAgICAtMHgxLjI3NzAxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTg2CisgICAgLTB4MS5lZmQ4NGU1MDY1MmMxYjdjNzE5NzJhZDhlZTdjMDE4YXAtMSwKKyAgICAweDEuMmZhNGZjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODcKKyAgICAweDEuZWZkODRlNTA2NTJjMWI3YzcxOTcyYWQ4ZWU3YzAxOGFwLTEsCisgICAgLTB4MS4yZmE0ZmNwMQorICB9LAorICB7IC8vIEVudHJ5IDU4OAorICAgIC0weDEuYjNkZjVkOWY1NGUyYzc0OGNmMDIyN2VlMDk3NGVhMmVwLTEsCisgICAgMHgxLjM3ZDllMHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTg5CisgICAgMHgxLmIzZGY1ZDlmNTRlMmM3NDhjZjAyMjdlZTA5NzRlYTJlcC0xLAorICAgIC0weDEuMzdkOWUwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTAKKyAgICAtMHgxLjdlMWRiNzMzNzY5YTExMjZhMmIwYWM3ZmExNGE0MDJjcC0xLAorICAgIDB4MS40MDBlYzRwMQorICB9LAorICB7IC8vIEVudHJ5IDU5MQorICAgIDB4MS43ZTFkYjczMzc2OWExMTI2YTJiMGFjN2ZhMTRhNDAyY3AtMSwKKyAgICAtMHgxLjQwMGVjNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTkyCisgICAgLTB4MS40ZDQ2OGQ4MmMxYTg0ZmVmNzI3OWZjNWZiMjQ0MTliMnAtMSwKKyAgICAweDEuNDg0M2E4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTMKKyAgICAweDEuNGQ0NjhkODJjMWE4NGZlZjcyNzlmYzVmYjI0NDE5YjJwLTEsCisgICAgLTB4MS40ODQzYThwMQorICB9LAorICB7IC8vIEVudHJ5IDU5NAorICAgIC0weDEuMjA1YTgyMDI1NDUyMDJkODkxY2U4OWJmYTZjZDE0NzZwLTEsCisgICAgMHgxLjUwNzg4Y3AxCisgIH0sCisgIHsgLy8gRW50cnkgNTk1CisgICAgMHgxLjIwNWE4MjAyNTQ1MjAyZDg5MWNlODliZmE2Y2QxNDc2cC0xLAorICAgIC0weDEuNTA3ODhjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTYKKyAgICAtMHgxLmVkMjIyODlkODkxZWQ3OGNkYzgxOGE0Y2RlNmRlOTE4cC0yLAorICAgIDB4MS41OGFkNzBwMQorICB9LAorICB7IC8vIEVudHJ5IDU5NworICAgIDB4MS5lZDIyMjg5ZDg5MWVkNzhjZGM4MThhNGNkZTZkZTkxOHAtMiwKKyAgICAtMHgxLjU4YWQ3MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTk4CisgICAgLTB4MS45ZTkyOWE3ZmFkZjgzYjZmOWU4ZmI4NTFmNTEyYjQ0YnAtMiwKKyAgICAweDEuNjBlMjU0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTkKKyAgICAweDEuOWU5MjlhN2ZhZGY4M2I2ZjllOGZiODUxZjUxMmI0NGJwLTIsCisgICAgLTB4MS42MGUyNTRwMQorICB9LAorICB7IC8vIEVudHJ5IDYwMAorICAgIC0weDEuNTNmZTEwYTU0N2E2ZWNjZTVjYWRkYzIwMDVkYjgyMmJwLTIsCisgICAgMHgxLjY5MTczOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjAxCisgICAgMHgxLjUzZmUxMGE1NDdhNmVjY2U1Y2FkZGMyMDA1ZGI4MjJicC0yLAorICAgIC0weDEuNjkxNzM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDIKKyAgICAtMHgxLjBjODY4M2IxYmM2ODI3NTllMjg0NDFlZjk3Yzg4NTRicC0yLAorICAgIDB4MS43MTRjMWNwMQorICB9LAorICB7IC8vIEVudHJ5IDYwMworICAgIDB4MS4wYzg2ODNiMWJjNjgyNzU5ZTI4NDQxZWY5N2M4ODU0YnAtMiwKKyAgICAtMHgxLjcxNGMxY3AxCisgIH0sCisgIHsgLy8gRW50cnkgNjA0CisgICAgLTB4MS44ZWQ5OWM4NTQ2MDA4YmU0NjYxNGVhNjZjN2RkZDdlNnAtMywKKyAgICAweDEuNzk4MXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjA1CisgICAgMHgxLjhlZDk5Yzg1NDYwMDhiZTQ2NjE0ZWE2NmM3ZGRkN2U2cC0zLAorICAgIC0weDEuNzk4MXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjA2CisgICAgLTB4MS4wODBmZmVmNGVkYTAyNzFkODE2NThkNThhZTI4MDc5MnAtMywKKyAgICAweDEuODFiNWU0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDcKKyAgICAweDEuMDgwZmZlZjRlZGEwMjcxZDgxNjU4ZDU4YWUyODA3OTJwLTMsCisgICAgLTB4MS44MWI1ZTRwMQorICB9LAorICB7IC8vIEVudHJ5IDYwOAorICAgIC0weDEuMDZmOWVlODM2ODZhYTYxOTRjMDNkZTcxYTZiNTJmNzVwLTQsCisgICAgMHgxLjg5ZWFjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjA5CisgICAgMHgxLjA2ZjllZTgzNjg2YWE2MTk0YzAzZGU3MWE2YjUyZjc1cC00LAorICAgIC0weDEuODllYWM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTAKKyAgICAweDEuMGM4NjI3ZWMzYmMyZThmMGU2ZGY0NGY4MDlmMzcwZmRwLTIsCisgICAgLTB4MS44MWI1ZWVwMgorICB9LAorICB7IC8vIEVudHJ5IDYxMQorICAgIC0weDEuMGM4NjI3ZWMzYmMyZThmMGU2ZGY0NGY4MDlmMzcwZmRwLTIsCisgICAgMHgxLjgxYjVlZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNjEyCisgICAgMHgxLjIwNWE0OTc1M2JiODllOGM5NzFjNmNkMjg0MmVkYWYwcC0xLAorICAgIC0weDEuNzE0YzI2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTMKKyAgICAtMHgxLjIwNWE0OTc1M2JiODllOGM5NzFjNmNkMjg0MmVkYWYwcC0xLAorICAgIDB4MS43MTRjMjZwMgorICB9LAorICB7IC8vIEVudHJ5IDYxNAorICAgIDB4MS5lZmQ3ZmIxZDI4YjhhMDYwMmIyNWZhZGZlOWUwMjc3YXAtMSwKKyAgICAtMHgxLjYwZTI1ZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNjE1CisgICAgLTB4MS5lZmQ3ZmIxZDI4YjhhMDYwMmIyNWZhZGZlOWUwMjc3YXAtMSwKKyAgICAweDEuNjBlMjVlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTYKKyAgICAweDEuYTY0YzQ3YmNmYjVmOWNiZGI0OTM2MGE2NTU0OGZkNmRwMCwKKyAgICAtMHgxLjUwNzg5NnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjE3CisgICAgLTB4MS5hNjRjNDdiY2ZiNWY5Y2JkYjQ5MzYwYTY1NTQ4ZmQ2ZHAwLAorICAgIDB4MS41MDc4OTZwMgorICB9LAorICB7IC8vIEVudHJ5IDYxOAorICAgIDB4MS5hZjQ1ZGFiZDM0Yjc1NTk3ZmY3MDA3OWIzZGU5ODZmZHAxLAorICAgIC0weDEuNDAwZWNlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTkKKyAgICAtMHgxLmFmNDVkYWJkMzRiNzU1OTdmZjcwMDc5YjNkZTk4NmZkcDEsCisgICAgMHgxLjQwMGVjZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNjIwCisgICAgMHgxLmYyZWJhNTgzZmZmOWY4ZGYzNjkzZmZkOTY5Mzk1ZGU3cDQsCisgICAgLTB4MS4yZmE1MDZwMgorICB9LAorICB7IC8vIEVudHJ5IDYyMQorICAgIC0weDEuZjJlYmE1ODNmZmY5ZjhkZjM2OTNmZmQ5NjkzOTVkZTdwNCwKKyAgICAweDEuMmZhNTA2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjIKKyAgICAtMHgxLjE4Njc3MGY1Y2VmMTUyYTRlYzc1ZmU5YTcwMzFhNTZhcDIsCisgICAgLTB4MS4xZjNiM2VwMgorICB9LAorICB7IC8vIEVudHJ5IDYyMworICAgIDB4MS4xODY3NzBmNWNlZjE1MmE0ZWM3NWZlOWE3MDMxYTU2YXAyLAorICAgIDB4MS4xZjNiM2VwMgorICB9LAorICB7IC8vIEVudHJ5IDYyNAorICAgIC0weDEuZWFiNGI1MmU2Y2NlMTYwYTViOWEyM2E0YjkyOWQwMWRwMCwKKyAgICAtMHgxLjBlZDE3NnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjI1CisgICAgMHgxLmVhYjRiNTJlNmNjZTE2MGE1YjlhMjNhNGI5MjlkMDFkcDAsCisgICAgMHgxLjBlZDE3NnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjI2CisgICAgLTB4MS4xOWUyYTEyNGJjM2RlZWY2NDgzMzgyNzQ2MjdjYzM3MXAwLAorICAgIC0weDEuZmNjZjVhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjcKKyAgICAweDEuMTllMmExMjRiYzNkZWVmNjQ4MzM4Mjc0NjI3Y2MzNzFwMCwKKyAgICAweDEuZmNjZjVhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjgKKyAgICAtMHgxLjRkNDZhY2E0OGRlNDdmNWZkOTBjOTAwMGMxNTQyNWQ4cC0xLAorICAgIC0weDEuZGJmYmM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjkKKyAgICAweDEuNGQ0NmFjYTQ4ZGU0N2Y1ZmQ5MGM5MDAwYzE1NDI1ZDhwLTEsCisgICAgMHgxLmRiZmJjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjMwCisgICAgLTB4MS41M2ZlMmY2ZmM5ZDAyMzc3NGEyMTA1YzgyMTNlNGQ1ZXAtMiwKKyAgICAtMHgxLmJiMjgzNnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjMxCisgICAgMHgxLjUzZmUyZjZmYzlkMDIzNzc0YTIxMDVjODIxM2U0ZDVlcC0yLAorICAgIDB4MS5iYjI4MzZwMQorICB9LAorICB7IC8vIEVudHJ5IDYzMgorICAgIC0weDEuMDZmYTFkYTQzYjI2Y2Q1ODBjZTVhNWI4OWNmMmVmZjNwLTQsCisgICAgLTB4MS45YTU0YTRwMQorICB9LAorICB7IC8vIEVudHJ5IDYzMworICAgIDB4MS4wNmZhMWRhNDNiMjZjZDU4MGNlNWE1Yjg5Y2YyZWZmM3AtNCwKKyAgICAweDEuOWE1NGE0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzQKKyAgICAweDEuOGVkODcxOThmNDEzZDNhMTIyNjU4Mjg3YWE3ZmMzM2VwLTMsCisgICAgLTB4MS43OTgxMTJwMQorICB9LAorICB7IC8vIEVudHJ5IDYzNQorICAgIC0weDEuOGVkODcxOThmNDEzZDNhMTIyNjU4Mjg3YWE3ZmMzM2VwLTMsCisgICAgMHgxLjc5ODExMnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjM2CisgICAgMHgxLmVkMjE4YWVlMmRmNGU4MGUzOTM0MGIwYzRlYzNiMWQ1cC0yLAorICAgIC0weDEuNThhZDgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzcKKyAgICAtMHgxLmVkMjE4YWVlMmRmNGU4MGUzOTM0MGIwYzRlYzNiMWQ1cC0yLAorICAgIDB4MS41OGFkODBwMQorICB9LAorICB7IC8vIEVudHJ5IDYzOAorICAgIDB4MS5iM2RlZmQwOTkxZTYzMTUzNjlkYmQ1ZTJkZTJkMTRmZXAtMSwKKyAgICAtMHgxLjM3ZDllZXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjM5CisgICAgLTB4MS5iM2RlZmQwOTkxZTYzMTUzNjlkYmQ1ZTJkZTJkMTRmZXAtMSwKKyAgICAweDEuMzdkOWVlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDAKKyAgICAweDEuNmVmZTk3YzIzZjIwNjgyNmI0ZjAwMTlmMjc1ZDNhNDRwMCwKKyAgICAtMHgxLjE3MDY1Y3AxCisgIH0sCisgIHsgLy8gRW50cnkgNjQxCisgICAgLTB4MS42ZWZlOTdjMjNmMjA2ODI2YjRmMDAxOWYyNzVkM2E0NHAwLAorICAgIDB4MS4xNzA2NWNwMQorICB9LAorICB7IC8vIEVudHJ5IDY0MgorICAgIDB4MS41YmQwZmY5MjVjOTRmN2Q2MDhiODg0ODRmOTA4MWYyY3AxLAorICAgIC0weDEuZWM2NTk0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDMKKyAgICAtMHgxLjViZDBmZjkyNWM5NGY3ZDYwOGI4ODQ4NGY5MDgxZjJjcDEsCisgICAgMHgxLmVjNjU5NHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ0CisgICAgMHgxLjRiYjVlY2U2NTdiZWUyOTJhODJhM2ZkYTZiODEyYWFkcDMsCisgICAgLTB4MS5hYWJlNzBwMAorICB9LAorICB7IC8vIEVudHJ5IDY0NQorICAgIC0weDEuNGJiNWVjZTY1N2JlZTI5MmE4MmEzZmRhNmI4MTJhYWRwMywKKyAgICAweDEuYWFiZTcwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDYKKyAgICAtMHgxLjhiZGQ0ZmVlZjE4YmZhOGE2YzIzZGU2YTcyMWYyNDM2cDIsCisgICAgLTB4MS42OTE3NGNwMAorICB9LAorICB7IC8vIEVudHJ5IDY0NworICAgIDB4MS44YmRkNGZlZWYxOGJmYThhNmMyM2RlNmE3MjFmMjQzNnAyLAorICAgIDB4MS42OTE3NGNwMAorICB9LAorICB7IC8vIEVudHJ5IDY0OAorICAgIC0weDEuMjEyNzllMWU4YmY0YmQzOTgzYTM2NzcyNjdlNTU4MDlwMSwKKyAgICAtMHgxLjI3NzAyOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ5CisgICAgMHgxLjIxMjc5ZTFlOGJmNGJkMzk4M2EzNjc3MjY3ZTU1ODA5cDEsCisgICAgMHgxLjI3NzAyOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjUwCisgICAgLTB4MS40MTAzYTgxNDdjYTgzNjEzNmNjOThkYjliYzZkZGYzMHAwLAorICAgIC0weDEuY2I5MjBhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjUxCisgICAgMHgxLjQxMDNhODE0N2NhODM2MTM2Y2M5OGRiOWJjNmRkZjMwcDAsCisgICAgMHgxLmNiOTIwYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDY1MgorICAgIC0weDEuN2UxZGI1OGE1NWQ2YTEyYTY0NTdlM2M1OTI5YWMyYzdwLTEsCisgICAgLTB4MS40ODQzYzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTMKKyAgICAweDEuN2UxZGI1OGE1NWQ2YTEyYTY0NTdlM2M1OTI5YWMyYzdwLTEsCisgICAgMHgxLjQ4NDNjNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY1NAorICAgIC0weDEuOWU5MjhhMGM4ZTc5MDIzMjAwMTY0ZWQyNDBjYWFkMDVwLTIsCisgICAgLTB4MS44OWVhZmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTUKKyAgICAweDEuOWU5MjhhMGM4ZTc5MDIzMjAwMTY0ZWQyNDBjYWFkMDVwLTIsCisgICAgMHgxLjg5ZWFmY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDY1NgorICAgIC0weDEuMDgwZmM5ZDI0ZmJlOTg3NmIzMWIwYWEyOWRkMjM4ZWFwLTMsCisgICAgLTB4MS4wNjljZTBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTcKKyAgICAweDEuMDgwZmM5ZDI0ZmJlOTg3NmIzMWIwYWEyOWRkMjM4ZWFwLTMsCisgICAgMHgxLjA2OWNlMHAtMworICB9LAorICB7IC8vIEVudHJ5IDY1OAorICAgIDB4MS4wODBmMWYwNzU0MGZkMDNiODJkNGIzNzBkMjM3ZmEzZHAtMywKKyAgICAweDEuMDY5YzM4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNjU5CisgICAgLTB4MS4wODBmMWYwNzU0MGZkMDNiODJkNGIzNzBkMjM3ZmEzZHAtMywKKyAgICAtMHgxLjA2OWMzOHAtMworICB9LAorICB7IC8vIEVudHJ5IDY2MAorICAgIDB4MS45ZTkyMjg0N2UyYjFiNmE3MmQ0ODY3MDBlMThjMDVmMnAtMiwKKyAgICAweDEuODllYWE4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjYxCisgICAgLTB4MS45ZTkyMjg0N2UyYjFiNmE3MmQ0ODY3MDBlMThjMDVmMnAtMiwKKyAgICAtMHgxLjg5ZWFhOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDY2MgorICAgIDB4MS43ZTFkNzQyNThjYmM5NjRiNTYxZDk5YzlhNjZmOGM3ZXAtMSwKKyAgICAweDEuNDg0MzlhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjYzCisgICAgLTB4MS43ZTFkNzQyNThjYmM5NjRiNTYxZDk5YzlhNjZmOGM3ZXAtMSwKKyAgICAtMHgxLjQ4NDM5YXAtMQorICB9LAorICB7IC8vIEVudHJ5IDY2NAorICAgIDB4MS40MTAzNzIwZjJjYTNlMDU4MGZiYTE1ODQ5Mzk4YTRlOXAwLAorICAgIDB4MS5jYjkxZTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjUKKyAgICAtMHgxLjQxMDM3MjBmMmNhM2UwNTgwZmJhMTU4NDkzOThhNGU5cDAsCisgICAgLTB4MS5jYjkxZTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjYKKyAgICAweDEuMjEyNzYxMTY3M2NjYzc1MzFmNWFmNWFlZGEzNDEyYzVwMSwKKyAgICAweDEuMjc3MDE0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjcKKyAgICAtMHgxLjIxMjc2MTE2NzNjY2M3NTMxZjVhZjVhZWRhMzQxMmM1cDEsCisgICAgLTB4MS4yNzcwMTRwMAorICB9LAorICB7IC8vIEVudHJ5IDY2OAorICAgIDB4MS44YmRjOGJhM2Q4Mjc3MjEzYzViNzRlZjgwNmVmNDY2YnAyLAorICAgIDB4MS42OTE3MzhwMAorICB9LAorICB7IC8vIEVudHJ5IDY2OQorICAgIC0weDEuOGJkYzhiYTNkODI3NzIxM2M1Yjc0ZWY4MDZlZjQ2NmJwMiwKKyAgICAtMHgxLjY5MTczOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjcwCisgICAgLTB4MS40YmI2ZmMwOTJiYzE2NTMwMjE2MjA5YTkxMmFhZGEzN3AzLAorICAgIDB4MS5hYWJlNWNwMAorICB9LAorICB7IC8vIEVudHJ5IDY3MQorICAgIDB4MS40YmI2ZmMwOTJiYzE2NTMwMjE2MjA5YTkxMmFhZGEzN3AzLAorICAgIC0weDEuYWFiZTVjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzIKKyAgICAtMHgxLjViZDE1MzY4Zjg0YmUwYmRhOGYxMzVhNWY3OWFlYWNicDEsCisgICAgMHgxLmVjNjU4MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjczCisgICAgMHgxLjViZDE1MzY4Zjg0YmUwYmRhOGYxMzVhNWY3OWFlYWNicDEsCisgICAgLTB4MS5lYzY1ODBwMAorICB9LAorICB7IC8vIEVudHJ5IDY3NAorICAgIC0weDEuNmVmZWQ0ZGM4OTQ2ZTFjMzYyMGQ3OWJiMGQ2NTQzMzhwMCwKKyAgICAweDEuMTcwNjUycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzUKKyAgICAweDEuNmVmZWQ0ZGM4OTQ2ZTFjMzYyMGQ3OWJiMGQ2NTQzMzhwMCwKKyAgICAtMHgxLjE3MDY1MnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjc2CisgICAgLTB4MS5iM2RmNDIwNmQyMzI3OTRkNTc2MTk5MmQ4OGM1YTM5NHAtMSwKKyAgICAweDEuMzdkOWU0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzcKKyAgICAweDEuYjNkZjQyMDZkMjMyNzk0ZDU3NjE5OTJkODhjNWEzOTRwLTEsCisgICAgLTB4MS4zN2Q5ZTRwMQorICB9LAorICB7IC8vIEVudHJ5IDY3OAorICAgIC0weDEuZWQyMWVkN2JjNGI1OTY4YmRiMGNkNmRhMjY5Y2Q1NWZwLTIsCisgICAgMHgxLjU4YWQ3NnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjc5CisgICAgMHgxLmVkMjFlZDdiYzRiNTk2OGJkYjBjZDZkYTI2OWNkNTVmcC0yLAorICAgIC0weDEuNThhZDc2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODAKKyAgICAtMHgxLjhlZDkxN2FhNzRlNzMzYjkxOTRkNTM3YzhkZjMzYzY0cC0zLAorICAgIDB4MS43OTgxMDhwMQorICB9LAorICB7IC8vIEVudHJ5IDY4MQorICAgIDB4MS44ZWQ5MTdhYTc0ZTczM2I5MTk0ZDUzN2M4ZGYzM2M2NHAtMywKKyAgICAtMHgxLjc5ODEwOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjgyCisgICAgMHgxLjA2ZjhkYzUyOGVhMDE4ODIwNjRlZTI0MmY1OGEyYjg4cC00LAorICAgIDB4MS45YTU0OWFwMQorICB9LAorICB7IC8vIEVudHJ5IDY4MworICAgIC0weDEuMDZmOGRjNTI4ZWEwMTg4MjA2NGVlMjQyZjU4YTJiODhwLTQsCisgICAgLTB4MS45YTU0OWFwMQorICB9LAorICB7IC8vIEVudHJ5IDY4NAorICAgIDB4MS41M2ZkZDY5ZTE0MzdkYjk1N2M2MmU4Y2M1NTc0MmJlZXAtMiwKKyAgICAweDEuYmIyODJjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODUKKyAgICAtMHgxLjUzZmRkNjllMTQzN2RiOTU3YzYyZThjYzU1NzQyYmVlcC0yLAorICAgIC0weDEuYmIyODJjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODYKKyAgICAweDEuNGQ0NjczYjFjNzYzNWNjODkzZTFjOGQyY2E1N2IzZTlwLTEsCisgICAgMHgxLmRiZmJiZXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjg3CisgICAgLTB4MS40ZDQ2NzNiMWM3NjM1Y2M4OTNlMWM4ZDJjYTU3YjNlOXAtMSwKKyAgICAtMHgxLmRiZmJiZXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjg4CisgICAgMHgxLjE5ZTI3NGU0ZmRlYzllNzhlZjY4NzIwODFiNTU3MmNmcDAsCisgICAgMHgxLmZjY2Y1MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjg5CisgICAgLTB4MS4xOWUyNzRlNGZkZWM5ZTc4ZWY2ODcyMDgxYjU1NzJjZnAwLAorICAgIC0weDEuZmNjZjUwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTAKKyAgICAweDEuZWFiNDQ1MDAzYTdiNTQyYTJkNGQ4N2E4ODc5M2JiNjdwMCwKKyAgICAweDEuMGVkMTcwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTEKKyAgICAtMHgxLmVhYjQ0NTAwM2E3YjU0MmEyZDRkODdhODg3OTNiYjY3cDAsCisgICAgLTB4MS4wZWQxNzBwMgorICB9LAorICB7IC8vIEVudHJ5IDY5MgorICAgIDB4MS4xODY2ZjdjOTE2NjBkOWM5ZjRiMmQxNGU5MTM3NTczMnAyLAorICAgIDB4MS4xZjNiMzhwMgorICB9LAorICB7IC8vIEVudHJ5IDY5MworICAgIC0weDEuMTg2NmY3YzkxNjYwZDljOWY0YjJkMTRlOTEzNzU3MzJwMiwKKyAgICAtMHgxLjFmM2IzOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjk0CisgICAgLTB4MS5mMmYxNTk5YjI5YTdkZTk1MmI4YmExODc3ZDlmNWU2MXA0LAorICAgIDB4MS4yZmE1cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTUKKyAgICAweDEuZjJmMTU5OWIyOWE3ZGU5NTJiOGJhMTg3N2Q5ZjVlNjFwNCwKKyAgICAtMHgxLjJmYTVwMgorICB9LAorICB7IC8vIEVudHJ5IDY5NgorICAgIC0weDEuYWY0NjZlZjdiMTU2NDU0NTVlMTVmYmJhZTZiYjRiYzZwMSwKKyAgICAweDEuNDAwZWM4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTcKKyAgICAweDEuYWY0NjZlZjdiMTU2NDU0NTVlMTVmYmJhZTZiYjRiYzZwMSwKKyAgICAtMHgxLjQwMGVjOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjk4CisgICAgLTB4MS5hNjRjYTEwYmZlZmQyYjA0YmI2YTFiYjcwOGMyODk2N3AwLAorICAgIDB4MS41MDc4OTBwMgorICB9LAorICB7IC8vIEVudHJ5IDY5OQorICAgIDB4MS5hNjRjYTEwYmZlZmQyYjA0YmI2YTFiYjcwOGMyODk2N3AwLAorICAgIC0weDEuNTA3ODkwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDAKKyAgICAtMHgxLmVmZDg1ODIxZWM5MjdmMmE4OWVjNDFhY2VlNTg3MjMwcC0xLAorICAgIDB4MS42MGUyNThwMgorICB9LAorICB7IC8vIEVudHJ5IDcwMQorICAgIDB4MS5lZmQ4NTgyMWVjOTI3ZjJhODllYzQxYWNlZTU4NzIzMHAtMSwKKyAgICAtMHgxLjYwZTI1OHAyCisgIH0sCisgIHsgLy8gRW50cnkgNzAyCisgICAgLTB4MS4yMDVhODhhZWM2NGNhZDM1ZDc3NTJjNzM2MjBjMjEzOXAtMSwKKyAgICAweDEuNzE0YzIwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDMKKyAgICAweDEuMjA1YTg4YWVjNjRjYWQzNWQ3NzUyYzczNjIwYzIxMzlwLTEsCisgICAgLTB4MS43MTRjMjBwMgorICB9LAorICB7IC8vIEVudHJ5IDcwNAorICAgIC0weDEuMGM4NjhlODYzNTQzZmQ5ODk0NzZjOGNkZWZmYTkzZWFwLTIsCisgICAgMHgxLjgxYjVlOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNzA1CisgICAgMHgxLjBjODY4ZTg2MzU0M2ZkOTg5NDc2YzhjZGVmZmE5M2VhcC0yLAorICAgIC0weDEuODFiNWU4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDYKKyAgICAweDEuZjA5YjYxYThhMDRmMDg5ODg1MWYxZDc2MDRmYTEzYzhwLTUsCisgICAgMHgxLmVmZmZmZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDcwNworICAgIC0weDEuZjA5YjYxYThhMDRmMDg5ODg1MWYxZDc2MDRmYTEzYzhwLTUsCisgICAgLTB4MS5lZmZmZmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDgKKyAgICAweDEuZjA5YjYzYWE4MWZjNDZlOTVlMDY0MDViNDFlOGI0Y2NwLTUsCisgICAgMHgxLmYwcC01CisgIH0sCisgIHsgLy8gRW50cnkgNzA5CisgICAgLTB4MS5mMDliNjNhYTgxZmM0NmU5NWUwNjQwNWI0MWU4YjRjY3AtNSwKKyAgICAtMHgxLmYwcC01CisgIH0sCisgIHsgLy8gRW50cnkgNzEwCisgICAgMHgxLmYwOWI2NWFjNjNhOTg5MWYxNDE4YzQzMzhjMWU0MTllcC01LAorICAgIDB4MS5mMDAwMDJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTEKKyAgICAtMHgxLmYwOWI2NWFjNjNhOTg5MWYxNDE4YzQzMzhjMWU0MTllcC01LAorICAgIC0weDEuZjAwMDAycC01CisgIH0sCisgIHsgLy8gRW50cnkgNzEyCisgICAgMHgxLmZhOGYxZmMwY2U4NmMyMTRiZjc2NWZkNTllODc5OGE1cC00LAorICAgIDB4MS5mN2ZmZmVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTMKKyAgICAtMHgxLmZhOGYxZmMwY2U4NmMyMTRiZjc2NWZkNTllODc5OGE1cC00LAorICAgIC0weDEuZjdmZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgNzE0CisgICAgMHgxLmZhOGYyMWM4YTMzYWZkMzM1NTE5OGU4ZDc3MTZhODExcC00LAorICAgIDB4MS5mOHAtNAorICB9LAorICB7IC8vIEVudHJ5IDcxNQorICAgIC0weDEuZmE4ZjIxYzhhMzNhZmQzMzU1MTk4ZThkNzcxNmE4MTFwLTQsCisgICAgLTB4MS5mOHAtNAorICB9LAorICB7IC8vIEVudHJ5IDcxNgorICAgIDB4MS5mYThmMjNkMDc3ZWY0ODY0NWVmZjlhNTE5NjI4YjNhOXAtNCwKKyAgICAweDEuZjgwMDAycC00CisgIH0sCisgIHsgLy8gRW50cnkgNzE3CisgICAgLTB4MS5mYThmMjNkMDc3ZWY0ODY0NWVmZjlhNTE5NjI4YjNhOXAtNCwKKyAgICAtMHgxLmY4MDAwMnAtNAorICB9LAorICB7IC8vIEVudHJ5IDcxOAorICAgIDB4MS40ZWYwNmFhNzNlZTZhNDM5YzBjOWY0NTA0NmIyNTk3OHAtMywKKyAgICAweDEuNGJmZmZlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzE5CisgICAgLTB4MS40ZWYwNmFhNzNlZTZhNDM5YzBjOWY0NTA0NmIyNTk3OHAtMywKKyAgICAtMHgxLjRiZmZmZXAtMworICB9LAorICB7IC8vIEVudHJ5IDcyMAorICAgIDB4MS40ZWYwNmNiNGYwYTg3YTVjOGVlZWViY2ViMTJhMjJiNHAtMywKKyAgICAweDEuNGNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjEKKyAgICAtMHgxLjRlZjA2Y2I0ZjBhODdhNWM4ZWVlZWJjZWIxMmEyMmI0cC0zLAorICAgIC0weDEuNGNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjIKKyAgICAweDEuNGVmMDZlYzJhMjZhN2I3YzE3MjFmZmFmYjkzYzAyODFwLTMsCisgICAgMHgxLjRjMDAwMnAtMworICB9LAorICB7IC8vIEVudHJ5IDcyMworICAgIC0weDEuNGVmMDZlYzJhMjZhN2I3YzE3MjFmZmFmYjkzYzAyODFwLTMsCisgICAgLTB4MS40YzAwMDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjQKKyAgICAweDEuM2NjMmEyZmQ5MTFlMTU1N2Q1N2I0NGFiZjI4YzRjY2FwLTIsCisgICAgMHgxLjMzMzMzMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDcyNQorICAgIC0weDEuM2NjMmEyZmQ5MTFlMTU1N2Q1N2I0NGFiZjI4YzRjY2FwLTIsCisgICAgLTB4MS4zMzMzMzJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjYKKyAgICAweDEuM2NjMmE1MmU4ZjQxMzdjYTI3ZDFkYzA1NjcxOTU0NDNwLTIsCisgICAgMHgxLjMzMzMzNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDcyNworICAgIC0weDEuM2NjMmE1MmU4ZjQxMzdjYTI3ZDFkYzA1NjcxOTU0NDNwLTIsCisgICAgLTB4MS4zMzMzMzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjgKKyAgICAweDEuM2NjMmE3NWY4ZDY1MDdjNTg5YmYwOGUwMzcxMzk0YmNwLTIsCisgICAgMHgxLjMzMzMzNnAtMgorICB9LAorICB7IC8vIEVudHJ5IDcyOQorICAgIC0weDEuM2NjMmE3NWY4ZDY1MDdjNTg5YmYwOGUwMzcxMzk0YmNwLTIsCisgICAgLTB4MS4zMzMzMzZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzAKKyAgICAweDEuOTk0MzZlNWYwN2I3M2RkYTFlZjYxYTgwMGFhZGZkZDNwLTEsCisgICAgMHgxLjU5NDMxNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDczMQorICAgIC0weDEuOTk0MzZlNWYwN2I3M2RkYTFlZjYxYTgwMGFhZGZkZDNwLTEsCisgICAgLTB4MS41OTQzMTZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzIKKyAgICAweDEuOTk0MzcxYTYyYmZlMTNlYjFjNzU1Y2I1YmU0NmY4NTNwLTEsCisgICAgMHgxLjU5NDMxOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDczMworICAgIC0weDEuOTk0MzcxYTYyYmZlMTNlYjFjNzU1Y2I1YmU0NmY4NTNwLTEsCisgICAgLTB4MS41OTQzMThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzQKKyAgICAweDEuOTk0Mzc0ZWQ1MDRhMjc4MjI2NTczNTYyYjYwZWNhOWFwLTEsCisgICAgMHgxLjU5NDMxYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDczNQorICAgIC0weDEuOTk0Mzc0ZWQ1MDRhMjc4MjI2NTczNTYyYjYwZWNhOWFwLTEsCisgICAgLTB4MS41OTQzMWFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzYKKyAgICAweDEuZmJjNTBkZTdjNjA1YTRkMWQwZjExMTliMTI5NGI2ZjBwLTEsCisgICAgMHgxLjhmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDczNworICAgIC0weDEuZmJjNTBkZTdjNjA1YTRkMWQwZjExMTliMTI5NGI2ZjBwLTEsCisgICAgLTB4MS44ZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzgKKyAgICAweDEuZmJjNTExZGY1OTE3ZjUzOWJiY2Y3NzhiYzFhMjIyNDlwLTEsCisgICAgMHgxLjkwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzM5CisgICAgLTB4MS5mYmM1MTFkZjU5MTdmNTM5YmJjZjc3OGJjMWEyMjI0OXAtMSwKKyAgICAtMHgxLjkwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzQwCisgICAgMHgxLmZiYzUxNWQ2ZWMzMjIzZmZiZWQ0YmI3NTE1NGZkYTBmcC0xLAorICAgIDB4MS45MDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDEKKyAgICAtMHgxLmZiYzUxNWQ2ZWMzMjIzZmZiZWQ0YmI3NTE1NGZkYTBmcC0xLAorICAgIC0weDEuOTAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzQyCisgICAgLTB4MS5wLTE0OSwKKyAgICAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNzQzCisgICAgMHgxLnAtMTQ5LAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDc0NAorICAgIDAuMCwKKyAgICAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDUKKyAgICAweDEucC0xNDksCisgICAgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNzQ2CisgICAgLTB4MS5wLTE0OSwKKyAgICAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNzQ3CisgICAgMHgxLjkyNzI3NzVlYTVlY2ZmNGU0M2VjZGVmM2Q4NWVjMjI2cC01LAorICAgIDB4MS45MjFmYjRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDgKKyAgICAtMHgxLjkyNzI3NzVlYTVlY2ZmNGU0M2VjZGVmM2Q4NWVjMjI2cC01LAorICAgIC0weDEuOTIxZmI0cC01CisgIH0sCisgIHsgLy8gRW50cnkgNzQ5CisgICAgMHgxLjkyNzI3OTVmZTI0MmQ5ZWI5MzkzYTc0NDY2MjBjMzk0cC01LAorICAgIDB4MS45MjFmYjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTAKKyAgICAtMHgxLjkyNzI3OTVmZTI0MmQ5ZWI5MzkzYTc0NDY2MjBjMzk0cC01LAorICAgIC0weDEuOTIxZmI2cC01CisgIH0sCisgIHsgLy8gRW50cnkgNzUxCisgICAgMHgxLjkyNzI3YjYxMWU5OGI3YWZiOTc5Nzc1NTFkMWM1ZjM4cC01LAorICAgIDB4MS45MjFmYjhwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTIKKyAgICAtMHgxLjkyNzI3YjYxMWU5OGI3YWZiOTc5Nzc1NTFkMWM1ZjM4cC01LAorICAgIC0weDEuOTIxZmI4cC01CisgIH0sCisgIHsgLy8gRW50cnkgNzUzCisgICAgMHgxLjkzNmJiNzdlNGFjODU5YmM2OWJjNGFiYzllOTFmMDI1cC00LAorICAgIDB4MS45MjFmYjRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTQKKyAgICAtMHgxLjkzNmJiNzdlNGFjODU5YmM2OWJjNGFiYzllOTFmMDI1cC00LAorICAgIC0weDEuOTIxZmI0cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzU1CisgICAgMHgxLjkzNmJiOTgzNDI0MTAyMmVjZDA3MGI5MDY0NjMyNzIxcC00LAorICAgIDB4MS45MjFmYjZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTYKKyAgICAtMHgxLjkzNmJiOTgzNDI0MTAyMmVjZDA3MGI5MDY0NjMyNzIxcC00LAorICAgIC0weDEuOTIxZmI2cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzU3CisgICAgMHgxLjkzNmJiYjg4MzliOWI3NWJkY2M1ZjY4NzAyNjdhNjA5cC00LAorICAgIDB4MS45MjFmYjhwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTgKKyAgICAtMHgxLjkzNmJiYjg4MzliOWI3NWJkY2M1ZjY4NzAyNjdhNjA5cC00LAorICAgIC0weDEuOTIxZmI4cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzU5CisgICAgMHgxLjk3NWY1Y2I0M2JkOTUxYWEyZTg5YTA1Y2JmNWU3MGZmcC0zLAorICAgIDB4MS45MjFmYjRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjAKKyAgICAtMHgxLjk3NWY1Y2I0M2JkOTUxYWEyZTg5YTA1Y2JmNWU3MGZmcC0zLAorICAgIC0weDEuOTIxZmI0cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzYxCisgICAgMHgxLjk3NWY1ZWM4N2RkYzRlN2EzNTcwNTlmNzFhOWYwNWIycC0zLAorICAgIDB4MS45MjFmYjZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjIKKyAgICAtMHgxLjk3NWY1ZWM4N2RkYzRlN2EzNTcwNTlmNzFhOWYwNWIycC0zLAorICAgIC0weDEuOTIxZmI2cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzYzCisgICAgMHgxLjk3NWY2MGRjYmZkZjgwMzlmMDFlYjc4NjRiYzA5ZTEzcC0zLAorICAgIDB4MS45MjFmYjhwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjQKKyAgICAtMHgxLjk3NWY2MGRjYmZkZjgwMzlmMDFlYjc4NjRiYzA5ZTEzcC0zLAorICAgIC0weDEuOTIxZmI4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzY1CisgICAgMHgxLmE4Mjc5ODIzZTliYTMwZWU2MjNhNTQwMmE0ODU5MGZjcC0yLAorICAgIDB4MS45MjFmYjRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjYKKyAgICAtMHgxLmE4Mjc5ODIzZTliYTMwZWU2MjNhNTQwMmE0ODU5MGZjcC0yLAorICAgIC0weDEuOTIxZmI0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzY3CisgICAgMHgxLmE4Mjc5YTdiYzIyMDZmZmYzYWZhNTJmMTY4YzVmOGYycC0yLAorICAgIDB4MS45MjFmYjZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjgKKyAgICAtMHgxLmE4Mjc5YTdiYzIyMDZmZmYzYWZhNTJmMTY4YzVmOGYycC0yLAorICAgIC0weDEuOTIxZmI2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzY5CisgICAgMHgxLmE4Mjc5Y2QzOWE4N2E3ODZlMTQwNTM3ZGI3MmZmMzM0cC0yLAorICAgIDB4MS45MjFmYjhwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzAKKyAgICAtMHgxLmE4Mjc5Y2QzOWE4N2E3ODZlMTQwNTM3ZGI3MmZmMzM0cC0yLAorICAgIC0weDEuOTIxZmI4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzcxCisgICAgMHgxLmZmZmZmZDc3N2E1ZTkxZTYxZjUzODBmYjgwOGQzMjcycC0xLAorICAgIDB4MS45MjFmYjRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzIKKyAgICAtMHgxLmZmZmZmZDc3N2E1ZTkxZTYxZjUzODBmYjgwOGQzMjcycC0xLAorICAgIC0weDEuOTIxZmI0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzczCisgICAgMHgxLjAwMDAwMGJiYmQyZWMwNmQ2ZDZmZmYzNjU1YTM0NmFjcDAsCisgICAgMHgxLjkyMWZiNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDc3NAorICAgIC0weDEuMDAwMDAwYmJiZDJlYzA2ZDZkNmZmZjM2NTVhMzQ2YWNwMCwKKyAgICAtMHgxLjkyMWZiNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDc3NQorICAgIDB4MS4wMDAwMDJiYmJkMzIzN2U3ZDExNDI3NmVkMzI5YWY1YnAwLAorICAgIDB4MS45MjFmYjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzYKKyAgICAtMHgxLjAwMDAwMmJiYmQzMjM3ZTdkMTE0Mjc2ZWQzMjlhZjVicDAsCisgICAgLTB4MS45MjFmYjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzcKKyAgICAweDEuOTQzN2IzMzZiNmIwYzQ3OWIyMjgwOTk5YjE5NTc1YzdwMjMsCisgICAgMHgxLjkyMWZiNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzc4CisgICAgLTB4MS45NDM3YjMzNmI2YjBjNDc5YjIyODA5OTliMTk1NzVjN3AyMywKKyAgICAtMHgxLjkyMWZiNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzc5CisgICAgLTB4MS41ZDE0OTQ2ZGM5ODk3NWQ2NDIxYTU1Mjg0ZmUwMjBhMXAyNCwKKyAgICAweDEuOTIxZmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODAKKyAgICAweDEuNWQxNDk0NmRjOTg5NzVkNjQyMWE1NTI4NGZlMDIwYTFwMjQsCisgICAgLTB4MS45MjFmYjZwMAorICB9LAorICB7IC8vIEVudHJ5IDc4MQorICAgIC0weDEuNzZhMTkwZWIyYjA3MThkOGRiNTVmN2QyYWJlYjA3ZDJwMjIsCisgICAgMHgxLjkyMWZiOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzgyCisgICAgMHgxLjc2YTE5MGViMmIwNzE4ZDhkYjU1ZjdkMmFiZWIwN2QycDIyLAorICAgIC0weDEuOTIxZmI4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODMKKyAgICAtMHgxLjQ0NDJkMTg0Njk4YzQyNmM4ZTNlZmQzNTZjYmViZTBhcC0yMywKKyAgICAweDEuOTIxZmI0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODQKKyAgICAweDEuNDQ0MmQxODQ2OThjNDI2YzhlM2VmZDM1NmNiZWJlMGFwLTIzLAorICAgIC0weDEuOTIxZmI0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODUKKyAgICAweDEuNzc3YTVjZjcyY2VkZjNiNTQ0YzgxODA4YjUxNWYxZjlwLTI0LAorICAgIDB4MS45MjFmYjZwMQorICB9LAorICB7IC8vIEVudHJ5IDc4NgorICAgIC0weDEuNzc3YTVjZjcyY2VkZjNiNTQ0YzgxODA4YjUxNWYxZjlwLTI0LAorICAgIC0weDEuOTIxZmI2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODcKKyAgICAweDEuNWRkZTk3M2RjYjQ4ZDZlM2QxM2NmMmE1MTU1MGU5MTFwLTIyLAorICAgIDB4MS45MjFmYjhwMQorICB9LAorICB7IC8vIEVudHJ5IDc4OAorICAgIC0weDEuNWRkZTk3M2RjYjQ4ZDZlM2QxM2NmMmE1MTU1MGU5MTFwLTIyLAorICAgIC0weDEuOTIxZmI4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODkKKyAgICAtMHgxLjQ0NDJkMTg0Njk5NDYzNjJmM2Y2Y2M3YzQzODU3NjYxcC0yMiwKKyAgICAweDEuOTIxZmI0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTAKKyAgICAweDEuNDQ0MmQxODQ2OTk0NjM2MmYzZjZjYzdjNDM4NTc2NjFwLTIyLAorICAgIC0weDEuOTIxZmI0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTEKKyAgICAweDEuNzc3YTVjZjcyY2YxMWI3MzlkMmFiMTg3N2U4MWE5YzdwLTIzLAorICAgIDB4MS45MjFmYjZwMgorICB9LAorICB7IC8vIEVudHJ5IDc5MgorICAgIC0weDEuNzc3YTVjZjcyY2YxMWI3MzlkMmFiMTg3N2U4MWE5YzdwLTIzLAorICAgIC0weDEuOTIxZmI2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTMKKyAgICAweDEuNWRkZTk3M2RjYjcxYWViNmU3NzY2NjhiYmIzZGUyNTNwLTIxLAorICAgIDB4MS45MjFmYjhwMgorICB9LAorICB7IC8vIEVudHJ5IDc5NAorICAgIC0weDEuNWRkZTk3M2RjYjcxYWViNmU3NzY2NjhiYmIzZGUyNTNwLTIxLAorICAgIC0weDEuOTIxZmI4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTUKKyAgICAtMHgxLjQ0NDJkMTg0NjliNGU3M2M4YWQ2MGU3YjlmMjg4YzVjcC0yMSwKKyAgICAweDEuOTIxZmI0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTYKKyAgICAweDEuNDQ0MmQxODQ2OWI0ZTczYzhhZDYwZTdiOWYyODhjNWNwLTIxLAorICAgIC0weDEuOTIxZmI0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTcKKyAgICAweDEuNzc3YTVjZjcyY2ZkYmE2Y2ZlYjUxODI1OGJjZjI2M2NwLTIyLAorICAgIDB4MS45MjFmYjZwMworICB9LAorICB7IC8vIEVudHJ5IDc5OAorICAgIC0weDEuNzc3YTVjZjcyY2ZkYmE2Y2ZlYjUxODI1OGJjZjI2M2NwLTIyLAorICAgIC0weDEuOTIxZmI2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTkKKyAgICAweDEuNWRkZTk3M2RjYzE1MGUwMzQwNWNhODk0ODg2NjAyYzJwLTIwLAorICAgIDB4MS45MjFmYjhwMworICB9LAorICB7IC8vIEVudHJ5IDgwMAorICAgIC0weDEuNWRkZTk3M2RjYzE1MGUwMzQwNWNhODk0ODg2NjAyYzJwLTIwLAorICAgIC0weDEuOTIxZmI4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDEKKyAgICAtMHgxLjQ0NDJkMTg0NmEzNmY2YTJlNjUzNjRiOTE2MzgyZTlicC0yMCwKKyAgICAweDEuOTIxZmI0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDIKKyAgICAweDEuNDQ0MmQxODQ2YTM2ZjZhMmU2NTM2NGI5MTYzODJlOWJwLTIwLAorICAgIC0weDEuOTIxZmI0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDMKKyAgICAweDEuNzc3YTVjZjcyZDMwMzY1Mjg0ZGViY2NjM2FlZWVjMTdwLTIxLAorICAgIDB4MS45MjFmYjZwNAorICB9LAorICB7IC8vIEVudHJ5IDgwNAorICAgIC0weDEuNzc3YTVjZjcyZDMwMzY1Mjg0ZGViY2NjM2FlZWVjMTdwLTIxLAorICAgIC0weDEuOTIxZmI2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDUKKyAgICAweDEuNWRkZTk3M2RjZWEyOGIzNGEzZmNkNzliMTQ0YTUwNTBwLTE5LAorICAgIDB4MS45MjFmYjhwNAorICB9LAorICB7IC8vIEVudHJ5IDgwNgorICAgIC0weDEuNWRkZTk3M2RjZWEyOGIzNGEzZmNkNzliMTQ0YTUwNTBwLTE5LAorICAgIC0weDEuOTIxZmI4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDcKKyAgICAtMHgxLjQ0NDJkMTg0NmMzZjM0M2M1NDRkYTFhZjdhYWI2OTBjcC0xOSwKKyAgICAweDEuOTIxZmI0cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDgKKyAgICAweDEuNDQ0MmQxODQ2YzNmMzQzYzU0NGRhMWFmN2FhYjY5MGNwLTE5LAorICAgIC0weDEuOTIxZmI0cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDkKKyAgICAweDEuNzc3YTVjZjcyZGZhMjVlODlkODVmMjRlOTYwYjQ0NTVwLTIwLAorICAgIDB4MS45MjFmYjZwNQorICB9LAorICB7IC8vIEVudHJ5IDgxMAorICAgIC0weDEuNzc3YTVjZjcyZGZhMjVlODlkODVmMjRlOTYwYjQ0NTVwLTIwLAorICAgIC0weDEuOTIxZmI2cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTEKKyAgICAweDEuNWRkZTk3M2RkOGQ4N2ZmYTMyZjAwMWVhYjgxZDk2MGNwLTE4LAorICAgIDB4MS45MjFmYjhwNQorICB9LAorICB7IC8vIEVudHJ5IDgxMgorICAgIC0weDEuNWRkZTk3M2RkOGQ4N2ZmYTMyZjAwMWVhYjgxZDk2MGNwLTE4LAorICAgIC0weDEuOTIxZmI4cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTMKKyAgICAtMHgxLjQ0NDJkMTg0NzQ2MDJhYTIwYzg0ZDU5MThmYzY4YThlcC0xOCwKKyAgICAweDEuOTIxZmI0cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTQKKyAgICAweDEuNDQ0MmQxODQ3NDYwMmFhMjBjODRkNTkxOGZjNjhhOGVwLTE4LAorICAgIC0weDEuOTIxZmI0cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTUKKyAgICAweDEuNzc3YTVjZjczMTIxZTQ0MTAwMmNmNmQxZWM1MGQ1NmRwLTE5LAorICAgIDB4MS45MjFmYjZwNgorICB9LAorICB7IC8vIEVudHJ5IDgxNgorICAgIC0weDEuNzc3YTVjZjczMTIxZTQ0MTAwMmNmNmQxZWM1MGQ1NmRwLTE5LAorICAgIC0weDEuOTIxZmI2cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTcKKyAgICAweDEuNWRkZTk3M2UwMWIwNTMxMDc1ZTM4ZTgwOGNlMDQ4ZjJwLTE3LAorICAgIDB4MS45MjFmYjhwNgorICB9LAorICB7IC8vIEVudHJ5IDgxOAorICAgIC0weDEuNWRkZTk3M2UwMWIwNTMxMDc1ZTM4ZTgwOGNlMDQ4ZjJwLTE3LAorICAgIC0weDEuOTIxZmI4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTkKKyAgICAtMHgxLjQ0NDJkMTg0OTRlNDA0MzhmMjQ1YTVhMjE5ZGVhMjM1cC0xNywKKyAgICAweDEuOTIxZmI0cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjAKKyAgICAweDEuNDQ0MmQxODQ5NGU0MDQzOGYyNDVhNWEyMTlkZWEyMzVwLTE3LAorICAgIC0weDEuOTIxZmI0cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjEKKyAgICAweDEuNzc3YTVjZjczZGMwZGRhMjhiNmJmMDdkZTJiMmQ1ZTZwLTE4LAorICAgIDB4MS45MjFmYjZwNworICB9LAorICB7IC8vIEVudHJ5IDgyMgorICAgIC0weDEuNzc3YTVjZjczZGMwZGRhMjhiNmJmMDdkZTJiMmQ1ZTZwLTE4LAorICAgIC0weDEuOTIxZmI2cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjMKKyAgICAweDEuNWRkZTk3M2VhNTBmOWY2OWY0MWZmNjRjOGM2ZGI3NjFwLTE2LAorICAgIDB4MS45MjFmYjhwNworICB9LAorICB7IC8vIEVudHJ5IDgyNAorICAgIC0weDEuNWRkZTk3M2VhNTBmOWY2OWY0MWZmNjRjOGM2ZGI3NjFwLTE2LAorICAgIC0weDEuOTIxZmI4cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjUKKyAgICAtMHgxLjAwMDAwZmNjYzhmMTVlZTg5ZjA5ZDIyMmUxNGM3MjkycDAsCisgICAgMHgxLjJkOTdjNHAxCisgIH0sCisgIHsgLy8gRW50cnkgODI2CisgICAgMHgxLjAwMDAwZmNjYzhmMTVlZTg5ZjA5ZDIyMmUxNGM3MjkycDAsCisgICAgLTB4MS4yZDk3YzRwMQorICB9LAorICB7IC8vIEVudHJ5IDgyNworICAgIC0weDEuMDAwMDA3Y2NjODkyZjhhMDc2MGNjMjA4MjdhY2U0NzZwMCwKKyAgICAweDEuMmQ5N2M2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjgKKyAgICAweDEuMDAwMDA3Y2NjODkyZjhhMDc2MGNjMjA4MjdhY2U0NzZwMCwKKyAgICAtMHgxLjJkOTdjNnAxCisgIH0sCisgIHsgLy8gRW50cnkgODI5CisgICAgLTB4MS5mZmZmZmY5OTkwZTkyNGI4NjZlODMxYzllOWU2MzljN3AtMSwKKyAgICAweDEuMmQ5N2M4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzAKKyAgICAweDEuZmZmZmZmOTk5MGU5MjRiODY2ZTgzMWM5ZTllNjM5YzdwLTEsCisgICAgLTB4MS4yZDk3YzhwMQorICB9LAorICB7IC8vIEVudHJ5IDgzMQorICAgIDB4MS5mZmZmZWI1NTY0M2I5YTY0OGMyNzIwYmRlMWQyMjc2NHAtMSwKKyAgICAweDEuZjZhN2EwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzIKKyAgICAtMHgxLmZmZmZlYjU1NjQzYjlhNjQ4YzI3MjBiZGUxZDIyNzY0cC0xLAorICAgIC0weDEuZjZhN2EwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzMKKyAgICAweDEuZmZmZmZiNTU2M2Q2NDU4NWU5ZGNjOTdkNzQzMjE0NjFwLTEsCisgICAgMHgxLmY2YTdhMnAxCisgIH0sCisgIHsgLy8gRW50cnkgODM0CisgICAgLTB4MS5mZmZmZmI1NTYzZDY0NTg1ZTlkY2M5N2Q3NDMyMTQ2MXAtMSwKKyAgICAtMHgxLmY2YTdhMnAxCisgIH0sCisgIHsgLy8gRW50cnkgODM1CisgICAgMHgxLjAwMDAwNWFhYjFmODc4NTI3OTIyMzc2NTJkMzRiMWNlcDAsCisgICAgMHgxLmY2YTdhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgODM2CisgICAgLTB4MS4wMDAwMDVhYWIxZjg3ODUyNzkyMjM3NjUyZDM0YjFjZXAwLAorICAgIC0weDEuZjZhN2E0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzcKKyAgICAweDEuMDMzZGQ5MWMxMDM1ODYxYWU0NTVlMGY4ZGMyNzRiMGRwMjAsCisgICAgMHgxLjJkOTdjNHAyCisgIH0sCisgIHsgLy8gRW50cnkgODM4CisgICAgLTB4MS4wMzNkZDkxYzEwMzU4NjFhZTQ1NWUwZjhkYzI3NGIwZHAyMCwKKyAgICAtMHgxLjJkOTdjNHAyCisgIH0sCisgIHsgLy8gRW50cnkgODM5CisgICAgMHgxLjA2OTBmYjQ3NzRhYjgwY2NkZGM5ZWY1YWQwZmNjMjM3cDIxLAorICAgIDB4MS4yZDk3YzZwMgorICB9LAorICB7IC8vIEVudHJ5IDg0MAorICAgIC0weDEuMDY5MGZiNDc3NGFiODBjY2RkYzllZjVhZDBmY2MyMzdwMjEsCisgICAgLTB4MS4yZDk3YzZwMgorICB9LAorICB7IC8vIEVudHJ5IDg0MQorICAgIC0weDEuM2ZlNGRhYzA2ZDgzMDgzN2Y2YzU4NGFmNmY4ZDkzOTlwMjYsCisgICAgMHgxLjJkOTdjOHAyCisgIH0sCisgIHsgLy8gRW50cnkgODQyCisgICAgMHgxLjNmZTRkYWMwNmQ4MzA4MzdmNmM1ODRhZjZmOGQ5Mzk5cDI2LAorICAgIC0weDEuMmQ5N2M4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDMKKyAgICAtMHgxLjAwMDAxNGRkZDQ5NDUzOTRjYjZlYzdmODdkZWJjN2E1cDAsCisgICAgMHgxLjVmZGJiY3AyCisgIH0sCisgIHsgLy8gRW50cnkgODQ0CisgICAgMHgxLjAwMDAxNGRkZDQ5NDUzOTRjYjZlYzdmODdkZWJjN2E1cDAsCisgICAgLTB4MS41ZmRiYmNwMgorICB9LAorICB7IC8vIEVudHJ5IDg0NQorICAgIC0weDEuMDAwMDA0ZGRkM2M2NzY0ZDczNjlhMGJlNjFhNjMwZTdwMCwKKyAgICAweDEuNWZkYmJlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDYKKyAgICAweDEuMDAwMDA0ZGRkM2M2NzY0ZDczNjlhMGJlNjFhNjMwZTdwMCwKKyAgICAtMHgxLjVmZGJiZXAyCisgIH0sCisgIHsgLy8gRW50cnkgODQ3CisgICAgLTB4MS5mZmZmZTliYmE3ZjEzMjFmYWUxOTI5NDNhM2U4NDhjMHAtMSwKKyAgICAweDEuNWZkYmMwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDgKKyAgICAweDEuZmZmZmU5YmJhN2YxMzIxZmFlMTkyOTQzYTNlODQ4YzBwLTEsCisgICAgLTB4MS41ZmRiYzBwMgorICB9LAorICB7IC8vIEVudHJ5IDg0OQorICAgIDB4MS5mZmZmYzEzMzUxMWVhMmQzYjk4OGJmODUzMTZkNGUwNXAtMSwKKyAgICAweDEuYzQ2M2E4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTAKKyAgICAtMHgxLmZmZmZjMTMzNTExZWEyZDNiOTg4YmY4NTMxNmQ0ZTA1cC0xLAorICAgIC0weDEuYzQ2M2E4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTEKKyAgICAweDEuZmZmZmUxMzM0ZTMxZDdlZjIwZDYyMjBjNjVkZDJmOWJwLTEsCisgICAgMHgxLmM0NjNhYXAyCisgIH0sCisgIHsgLy8gRW50cnkgODUyCisgICAgLTB4MS5mZmZmZTEzMzRlMzFkN2VmMjBkNjIyMGM2NWRkMmY5YnAtMSwKKyAgICAtMHgxLmM0NjNhYXAyCisgIH0sCisgIHsgLy8gRW50cnkgODUzCisgICAgMHgxLjAwMDAwMDk5YTZhMjg2NjY3NzYxYzI4NzRjNTg5MGFlcDAsCisgICAgMHgxLmM0NjNhY3AyCisgIH0sCisgIHsgLy8gRW50cnkgODU0CisgICAgLTB4MS4wMDAwMDA5OWE2YTI4NjY2Nzc2MWMyODc0YzU4OTBhZXAwLAorICAgIC0weDEuYzQ2M2FjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTUKKyAgICAweDEuOGM2NDJlOGNjNTZhOWIyMzM0NTBkNmI2MzVhNjI2NmRwMjAsCisgICAgMHgxLmY2YTdhMHAyCisgIH0sCisgIHsgLy8gRW50cnkgODU2CisgICAgLTB4MS44YzY0MmU4Y2M1NmE5YjIzMzQ1MGQ2YjYzNWE2MjY2ZHAyMCwKKyAgICAtMHgxLmY2YTdhMHAyCisgIH0sCisgIHsgLy8gRW50cnkgODU3CisgICAgMHgxLmI2ZTBiZmI3MjhlNDIzNjNjZDVmYjI2YjMxYzM2NmMycDIyLAorICAgIDB4MS5mNmE3YTJwMgorICB9LAorICB7IC8vIEVudHJ5IDg1OAorICAgIC0weDEuYjZlMGJmYjcyOGU0MjM2M2NkNWZiMjZiMzFjMzY2YzJwMjIsCisgICAgLTB4MS5mNmE3YTJwMgorICB9LAorICB7IC8vIEVudHJ5IDg1OQorICAgIC0weDEuNjk2NzliOTY2YWNjNDNkZmRiMjgzODNhYTk3NmY1YzFwMjEsCisgICAgMHgxLmY2YTdhNHAyCisgIH0sCisgIHsgLy8gRW50cnkgODYwCisgICAgMHgxLjY5Njc5Yjk2NmFjYzQzZGZkYjI4MzgzYWE5NzZmNWMxcDIxLAorICAgIC0weDEuZjZhN2E0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjEKKyAgICAtMHgxLjAwMDAyOWVlZTI2ZmUyMTFiYjRhMmY4ZTIzYTBhOWU5cDAsCisgICAgMHgxLjE0NzVjYXAzCisgIH0sCisgIHsgLy8gRW50cnkgODYyCisgICAgMHgxLjAwMDAyOWVlZTI2ZmUyMTFiYjRhMmY4ZTIzYTBhOWU5cDAsCisgICAgLTB4MS4xNDc1Y2FwMworICB9LAorICB7IC8vIEVudHJ5IDg2MworICAgIC0weDEuMDAwMDA5ZWVkZjMyMDVkMmU5YjY2YTM3ODNlMDJmMDVwMCwKKyAgICAweDEuMTQ3NWNjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjQKKyAgICAweDEuMDAwMDA5ZWVkZjMyMDVkMmU5YjY2YTM3ODNlMDJmMDVwMCwKKyAgICAtMHgxLjE0NzVjY3AzCisgIH0sCisgIHsgLy8gRW50cnkgODY1CisgICAgLTB4MS5mZmZmZDNkZGJmZTg1M2M3MWU0YTVmNzUwMmIwOWM0ZXAtMSwKKyAgICAweDEuMTQ3NWNlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjYKKyAgICAweDEuZmZmZmQzZGRiZmU4NTNjNzFlNGE1Zjc1MDJiMDljNGVwLTEsCisgICAgLTB4MS4xNDc1Y2VwMworICB9LAorICB7IC8vIEVudHJ5IDg2NworICAgIC0weDEuZjk5OTBlOTFhYTI0ZjU1MGNlZjU3ZmE0MTA2YzU2ZWJwLTIwLAorICAgIDB4MS4yZDk3YzRwMworICB9LAorICB7IC8vIEVudHJ5IDg2OAorICAgIDB4MS5mOTk5MGU5MWFhMjRmNTUwY2VmNTdmYTQxMDZjNTZlYnAtMjAsCisgICAgLTB4MS4yZDk3YzRwMworICB9LAorICB7IC8vIEVudHJ5IDg2OQorICAgIC0weDEuZjMzMjFkMjM0ZmM1NTdhNjFjNjM4ZWY3NzUyZGU0M2ZwLTIxLAorICAgIDB4MS4yZDk3YzZwMworICB9LAorICB7IC8vIEVudHJ5IDg3MAorICAgIDB4MS5mMzMyMWQyMzRmYzU1N2E2MWM2MzhlZjc3NTJkZTQzZnAtMjEsCisgICAgLTB4MS4yZDk3YzZwMworICB9LAorICB7IC8vIEVudHJ5IDg3MQorICAgIDB4MS45OWJjNWI5NjFiMWFlMzYzY2ZjMGZmYWFiNGYwZTUwNXAtMjYsCisgICAgMHgxLjJkOTdjOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODcyCisgICAgLTB4MS45OWJjNWI5NjFiMWFlMzYzY2ZjMGZmYWFiNGYwZTUwNXAtMjYsCisgICAgLTB4MS4yZDk3YzhwMworICB9LAorICB7IC8vIEVudHJ5IDg3MworICAgIDB4MS5mZmZmOTcxMTQxNzk0NDYxMjc2ZjM0MmJkMjljNWExZnAtMSwKKyAgICAweDEuNDZiOWMwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzQKKyAgICAtMHgxLmZmZmY5NzExNDE3OTQ0NjEyNzZmMzQyYmQyOWM1YTFmcC0xLAorICAgIC0weDEuNDZiOWMwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzUKKyAgICAweDEuZmZmZmQ3MTEzODViNmM5YTAxM2RhYmU5YjcyNTQ2NjVwLTEsCisgICAgMHgxLjQ2YjljMnAzCisgIH0sCisgIHsgLy8gRW50cnkgODc2CisgICAgLTB4MS5mZmZmZDcxMTM4NWI2YzlhMDEzZGFiZTliNzI1NDY2NXAtMSwKKyAgICAtMHgxLjQ2YjljMnAzCisgIH0sCisgIHsgLy8gRW50cnkgODc3CisgICAgMHgxLjAwMDAwYjg4OWI5ZWM5YzViMjc3ZmI2YTkxY2Y1ZjQ5cDAsCisgICAgMHgxLjQ2YjljNHAzCisgIH0sCisgIHsgLy8gRW50cnkgODc4CisgICAgLTB4MS4wMDAwMGI4ODliOWVjOWM1YjI3N2ZiNmE5MWNmNWY0OXAwLAorICAgIC0weDEuNDZiOWM0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzkKKyAgICAweDEuODg5NzNjYjAyYTBlZWEyY2ZlMWEyODFjYTdmMDQ2NjNwMTksCisgICAgMHgxLjVmZGJiY3AzCisgIH0sCisgIHsgLy8gRW50cnkgODgwCisgICAgLTB4MS44ODk3M2NiMDJhMGVlYTJjZmUxYTI4MWNhN2YwNDY2M3AxOSwKKyAgICAtMHgxLjVmZGJiY3AzCisgIH0sCisgIHsgLy8gRW50cnkgODgxCisgICAgMHgxLmE0ZDVkNWQ3NTM4NDFjODljZmU3MWMyNWFiYzhkNjQ1cDIxLAorICAgIDB4MS41ZmRiYmVwMworICB9LAorICB7IC8vIEVudHJ5IDg4MgorICAgIC0weDEuYTRkNWQ1ZDc1Mzg0MWM4OWNmZTcxYzI1YWJjOGQ2NDVwMjEsCisgICAgLTB4MS41ZmRiYmVwMworICB9LAorICB7IC8vIEVudHJ5IDg4MworICAgIC0weDEuNmZlNjJhMWE5YTEyYjcwYjFmYmI5NTI4MDFmOTk4MDFwMjAsCisgICAgMHgxLjVmZGJjMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODg0CisgICAgMHgxLjZmZTYyYTFhOWExMmI3MGIxZmJiOTUyODAxZjk5ODAxcDIwLAorICAgIC0weDEuNWZkYmMwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODUKKyAgICAtMHgxLjAwMDAzZWZmZjIwNzNlMWMwZGQ2NWQzYjgzZTVlNTg5cDAsCisgICAgMHgxLjc4ZmRiNnAzCisgIH0sCisgIHsgLy8gRW50cnkgODg2CisgICAgMHgxLjAwMDAzZWZmZjIwNzNlMWMwZGQ2NWQzYjgzZTVlNTg5cDAsCisgICAgLTB4MS43OGZkYjZwMworICB9LAorICB7IC8vIEVudHJ5IDg4NworICAgIC0weDEuMDAwMDFlZmZlYzI3M2ZiNDZiYjVlY2ZlYzUzYzMxMDVwMCwKKyAgICAweDEuNzhmZGI4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODgKKyAgICAweDEuMDAwMDFlZmZlYzI3M2ZiNDZiYjVlY2ZlYzUzYzMxMDVwMCwKKyAgICAtMHgxLjc4ZmRiOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODg5CisgICAgLTB4MS5mZmZmZmRmZmQ0OGU4NDg5OTIyN2NlYTFmNzdhMWNmN3AtMSwKKyAgICAweDEuNzhmZGJhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTAKKyAgICAweDEuZmZmZmZkZmZkNDhlODQ4OTkyMjdjZWExZjc3YTFjZjdwLTEsCisgICAgLTB4MS43OGZkYmFwMworICB9LAorICB7IC8vIEVudHJ5IDg5MQorICAgIDB4MS5mZmZmYWNlZjI2ZTk2NWQxMjUzNDI0ZmJiYzlmZjM1NHAtMSwKKyAgICAweDEuYWI0MWFlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTIKKyAgICAtMHgxLmZmZmZhY2VmMjZlOTY1ZDEyNTM0MjRmYmJjOWZmMzU0cC0xLAorICAgIC0weDEuYWI0MWFlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTMKKyAgICAweDEuZmZmZmVjZWYyMDg3NGE4ZjAzNWFjNGRjMWE2MDI5ZjhwLTEsCisgICAgMHgxLmFiNDFiMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODk0CisgICAgLTB4MS5mZmZmZWNlZjIwODc0YThmMDM1YWM0ZGMxYTYwMjlmOHAtMSwKKyAgICAtMHgxLmFiNDFiMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODk1CisgICAgMHgxLjAwMDAxNjc3OTExMjk3NWEyZDRiOWI3NWJkOTBiM2MxcDAsCisgICAgMHgxLmFiNDFiMnAzCisgIH0sCisgIHsgLy8gRW50cnkgODk2CisgICAgLTB4MS4wMDAwMTY3NzkxMTI5NzVhMmQ0YjliNzViZDkwYjNjMXAwLAorICAgIC0weDEuYWI0MWIycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTcKKyAgICAweDEuMDRlNGI0MGFjZGY5NDM5ZmVjY2Q0OWJiZWIzN2RhMGZwMTksCisgICAgMHgxLmM0NjNhOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODk4CisgICAgLTB4MS4wNGU0YjQwYWNkZjk0MzlmZWNjZDQ5YmJlYjM3ZGEwZnAxOSwKKyAgICAtMHgxLmM0NjNhOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODk5CisgICAgMHgxLjA5ZmEzYWUxZjQ5MTNkMWIzNzY0ZmY5YTk2NzhlZjY4cDIwLAorICAgIDB4MS5jNDYzYWFwMworICB9LAorICB7IC8vIEVudHJ5IDkwMAorICAgIC0weDEuMDlmYTNhZTFmNDkxM2QxYjM3NjRmZjlhOTY3OGVmNjhwMjAsCisgICAgLTB4MS5jNDYzYWFwMworICB9LAorICB7IC8vIEVudHJ5IDkwMQorICAgIC0weDEuYWE4Njc5MDA5MjAzZGQ2ZTk0MmY5MTc1Mjc1YTc0NjFwMjQsCisgICAgMHgxLmM0NjNhY3AzCisgIH0sCisgIHsgLy8gRW50cnkgOTAyCisgICAgMHgxLmFhODY3OTAwOTIwM2RkNmU5NDJmOTE3NTI3NWE3NDYxcDI0LAorICAgIC0weDEuYzQ2M2FjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDMKKyAgICAtMHgxLjAwMDAzNDEwZmFkODQ2ZmQ2N2QzNWUwYzBkOTgzNjI4cDAsCisgICAgMHgxLmRkODVhNHAzCisgIH0sCisgIHsgLy8gRW50cnkgOTA0CisgICAgMHgxLjAwMDAzNDEwZmFkODQ2ZmQ2N2QzNWUwYzBkOTgzNjI4cDAsCisgICAgLTB4MS5kZDg1YTRwMworICB9LAorICB7IC8vIEVudHJ5IDkwNQorICAgIC0weDEuMDAwMDE0MTBmNjU2Mjc5ZTg5ZDE0Y2Y0MDU0ZjZjNTZwMCwKKyAgICAweDEuZGQ4NWE2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDYKKyAgICAweDEuMDAwMDE0MTBmNjU2Mjc5ZTg5ZDE0Y2Y0MDU0ZjZjNTZwMCwKKyAgICAtMHgxLmRkODVhNnAzCisgIH0sCisgIHsgLy8gRW50cnkgOTA3CisgICAgLTB4MS5mZmZmZTgyMWViYTgxMWMwNjcyNDBmNjY2YzkwNDM3MXAtMSwKKyAgICAweDEuZGQ4NWE4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDgKKyAgICAweDEuZmZmZmU4MjFlYmE4MTFjMDY3MjQwZjY2NmM5MDQzNzFwLTEsCisgICAgLTB4MS5kZDg1YThwMworICB9LAorICB7IC8vIEVudHJ5IDkwOQorICAgIC0weDEuNGFhOWMyZjJjMmFkZGI5YjU5ZTM5NDAxMjM5NzYxZTJwLTIwLAorICAgIDB4MS5mNmE3YTBwMworICB9LAorICB7IC8vIEVudHJ5IDkxMAorICAgIDB4MS40YWE5YzJmMmMyYWRkYjliNTllMzk0MDEyMzk3NjFlMnAtMjAsCisgICAgLTB4MS5mNmE3YTBwMworICB9LAorICB7IC8vIEVudHJ5IDkxMQorICAgIC0weDEuMmFhNzBiY2IwN2UwNTdiNzI5ZWFjYmMwY2YxN2NiYmZwLTIyLAorICAgIDB4MS5mNmE3YTJwMworICB9LAorICB7IC8vIEVudHJ5IDkxMgorICAgIDB4MS4yYWE3MGJjYjA3ZTA1N2I3MjllYWNiYzBjZjE3Y2JiZnAtMjIsCisgICAgLTB4MS5mNmE3YTJwMworICB9LAorICB7IC8vIEVudHJ5IDkxMworICAgIDB4MS42YWFjN2ExYTdjNTBiODczYmVkMzliNjg1OWJmMjkzNHAtMjEsCisgICAgMHgxLmY2YTdhNHAzCisgIH0sCisgIHsgLy8gRW50cnkgOTE0CisgICAgLTB4MS42YWFjN2ExYTdjNTBiODczYmVkMzliNjg1OWJmMjkzNHAtMjEsCisgICAgLTB4MS5mNmE3YTRwMworICB9LAorICB7IC8vIEVudHJ5IDkxNQorICAgIDB4MS5mZmZmNDJjZDJjOTU1MDhlNzAwYWI3Njk1NmRkMDRjZnAtMSwKKyAgICAweDEuMDdlNGNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTYKKyAgICAtMHgxLmZmZmY0MmNkMmM5NTUwOGU3MDBhYjc2OTU2ZGQwNGNmcC0xLAorICAgIC0weDEuMDdlNGNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTcKKyAgICAweDEuZmZmZmMyY2QwZDQ4OWI0ODg0NDE3OWM1OTQzNTZlMGRwLTEsCisgICAgMHgxLjA3ZTRjZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTE4CisgICAgLTB4MS5mZmZmYzJjZDBkNDg5YjQ4ODQ0MTc5YzU5NDM1NmUwZHAtMSwKKyAgICAtMHgxLjA3ZTRjZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTE5CisgICAgMHgxLjAwMDAyMTY2ODZmZGVmMmUxZGQzMWEyZWFhNmExY2Q0cDAsCisgICAgMHgxLjA3ZTRkMHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTIwCisgICAgLTB4MS4wMDAwMjE2Njg2ZmRlZjJlMWRkMzFhMmVhYTZhMWNkNHAwLAorICAgIC0weDEuMDdlNGQwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjEKKyAgICAweDEuODZiN2JhNDkyM2JjZjE1N2RjYzMzMjkxODcxZTg4ZDRwMTgsCisgICAgMHgxLjE0NzVjYXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTIyCisgICAgLTB4MS44NmI3YmE0OTIzYmNmMTU3ZGNjMzMyOTE4NzFlODhkNHAxOCwKKyAgICAtMHgxLjE0NzVjYXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTIzCisgICAgMHgxLjljNWJlY2YyODczZWVkMzY5YWZkYzMxNTlhN2Y3OTdjcDIwLAorICAgIDB4MS4xNDc1Y2NwNAorICB9LAorICB7IC8vIEVudHJ5IDkyNAorICAgIC0weDEuOWM1YmVjZjI4NzNlZWQzNjlhZmRjMzE1OWE3Zjc5N2NwMjAsCisgICAgLTB4MS4xNDc1Y2NwNAorICB9LAorICB7IC8vIEVudHJ5IDkyNQorICAgIC0weDEuNzMzYzBkODQzMzJmYTYwNmQxYmQyMDdhNDkxZTQzNzFwMTksCisgICAgMHgxLjE0NzVjZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTI2CisgICAgMHgxLjczM2MwZDg0MzMyZmE2MDZkMWJkMjA3YTQ5MWU0MzcxcDE5LAorICAgIC0weDEuMTQ3NWNlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjcKKyAgICAtMHgxLjAwMDA0OTIyMGI0NTFiZjZlOGU2MDU1NTBjODg2MDJmcDAsCisgICAgMHgxLjIxMDZjOHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTI4CisgICAgMHgxLjAwMDA0OTIyMGI0NTFiZjZlOGU2MDU1NTBjODg2MDJmcDAsCisgICAgLTB4MS4yMTA2YzhwNAorICB9LAorICB7IC8vIEVudHJ5IDkyOQorICAgIC0weDEuMDAwMDA5MjIwMGZjOTljNWRmYTRmZTE4MDg1Y2Y3Y2RwMCwKKyAgICAweDEuMjEwNmNhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzAKKyAgICAweDEuMDAwMDA5MjIwMGZjOTljNWRmYTRmZTE4MDg1Y2Y3Y2RwMCwKKyAgICAtMHgxLjIxMDZjYXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTMxCisgICAgLTB4MS5mZmZmOTI0NDBkNjgzMTcyMmRlYzBkMzE4MTBkOGZjN3AtMSwKKyAgICAweDEuMjEwNmNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzIKKyAgICAweDEuZmZmZjkyNDQwZDY4MzE3MjJkZWMwZDMxODEwZDhmYzdwLTEsCisgICAgLTB4MS4yMTA2Y2NwNAorICB9LAorICB7IC8vIEVudHJ5IDkzMworICAgIC0weDEuZjk5OTBlOTFiMWQ5MTZlNTgyMjQyMzQ3MTEyYmExZDZwLTE5LAorICAgIDB4MS4yZDk3YzRwNAorICB9LAorICB7IC8vIEVudHJ5IDkzNAorICAgIDB4MS5mOTk5MGU5MWIxZDkxNmU1ODIyNDIzNDcxMTJiYTFkNnAtMTksCisgICAgLTB4MS4yZDk3YzRwNAorICB9LAorICB7IC8vIEVudHJ5IDkzNQorICAgIC0weDEuZjMzMjFkMjM1MTlmZTFkY2ZkY2QyZjFmNzYyMDA4YTRwLTIwLAorICAgIDB4MS4yZDk3YzZwNAorICB9LAorICB7IC8vIEVudHJ5IDkzNgorICAgIDB4MS5mMzMyMWQyMzUxOWZlMWRjZmRjZDJmMWY3NjIwMDhhNHAtMjAsCisgICAgLTB4MS4yZDk3YzZwNAorICB9LAorICB7IC8vIEVudHJ5IDkzNworICAgIDB4MS45OWJjNWI5NjFiMWIyNGZkYjc3ZmNlZTA4YmEyZjcyMHAtMjUsCisgICAgMHgxLjJkOTdjOHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTM4CisgICAgLTB4MS45OWJjNWI5NjFiMWIyNGZkYjc3ZmNlZTA4YmEyZjcyMHAtMjUsCisgICAgLTB4MS4yZDk3YzhwNAorICB9LAorICB7IC8vIEVudHJ5IDkzOQorICAgIDB4MS5mZmZmMThhYjI3NTZiYTBhMjBhYWY0MzkyYjBhODAxOXAtMSwKKyAgICAweDEuM2EyOGMycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDAKKyAgICAtMHgxLmZmZmYxOGFiMjc1NmJhMGEyMGFhZjQzOTJiMGE4MDE5cC0xLAorICAgIC0weDEuM2EyOGMycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDEKKyAgICAweDEuZmZmZjk4YWFmZDgxODUyNWQyNGQ2NjRlZjk2MmVmMTRwLTEsCisgICAgMHgxLjNhMjhjNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQyCisgICAgLTB4MS5mZmZmOThhYWZkODE4NTI1ZDI0ZDY2NGVmOTYyZWYxNHAtMSwKKyAgICAtMHgxLjNhMjhjNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQzCisgICAgMHgxLjAwMDAwYzU1NzlkNjIxYWI3MzM0ZWZmMzFkMjNjZjJjcDAsCisgICAgMHgxLjNhMjhjNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQ0CisgICAgLTB4MS4wMDAwMGM1NTc5ZDYyMWFiNzMzNGVmZjMxZDIzY2YyY3AwLAorICAgIC0weDEuM2EyOGM2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDUKKyAgICAweDEuMzg0NmIzMTBkZTdjNzk2YWRiM2VhMmVhMjJiMTA4ZTJwMTgsCisgICAgMHgxLjQ2YjljMHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQ2CisgICAgLTB4MS4zODQ2YjMxMGRlN2M3OTZhZGIzZWEyZWEyMmIxMDhlMnAxOCwKKyAgICAtMHgxLjQ2YjljMHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQ3CisgICAgMHgxLjkwNDQyNWZjOTJlYWIwYWJmZTk2YWVlYjZmZmIyZGM4cDE5LAorICAgIDB4MS40NmI5YzJwNAorICB9LAorICB7IC8vIEVudHJ5IDk0OAorICAgIC0weDEuOTA0NDI1ZmM5MmVhYjBhYmZlOTZhZWViNmZmYjJkYzhwMTksCisgICAgLTB4MS40NmI5YzJwNAorICB9LAorICB7IC8vIEVudHJ5IDk0OQorICAgIC0weDEuNjMyMmJhY2IyMmRlNmFmMDAyMjhkMmVhNGQ2ZDI3OTlwMjAsCisgICAgMHgxLjQ2YjljNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTUwCisgICAgMHgxLjYzMjJiYWNiMjJkZTZhZjAwMjI4ZDJlYTRkNmQyNzk5cDIwLAorICAgIC0weDEuNDZiOWM0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTEKKyAgICAtMHgxLjAwMDA1ZTMzMWQ2ZGJlZTlmOWQ0MzFiNDllYTdiNzIzcDAsCisgICAgMHgxLjUzNGFiZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTUyCisgICAgMHgxLjAwMDA1ZTMzMWQ2ZGJlZTlmOWQ0MzFiNDllYTdiNzIzcDAsCisgICAgLTB4MS41MzRhYmVwNAorICB9LAorICB7IC8vIEVudHJ5IDk1MworICAgIC0weDEuMDAwMDFlMzMwZGUwZjdjNzM0YmM1N2E0YzY2NTAzMjdwMCwKKyAgICAweDEuNTM0YWMwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTQKKyAgICAweDEuMDAwMDFlMzMwZGUwZjdjNzM0YmM1N2E0YzY2NTAzMjdwMCwKKyAgICAtMHgxLjUzNGFjMHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTU1CisgICAgLTB4MS5mZmZmYmM2NjFjYTg2OGQ1YTQ0MThmMGQxY2Q3YzIyZnAtMSwKKyAgICAweDEuNTM0YWMycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTYKKyAgICAweDEuZmZmZmJjNjYxY2E4NjhkNWE0NDE4ZjBkMWNkN2MyMmZwLTEsCisgICAgLTB4MS41MzRhYzJwNAorICB9LAorICB7IC8vIEVudHJ5IDk1NworICAgIC0weDEuNGRkZDNiYTlmMTIxNGRlYjQwNjcyMzk3ZDZmMTkxYmNwLTE5LAorICAgIDB4MS41ZmRiYmNwNAorICB9LAorICB7IC8vIEVudHJ5IDk1OAorICAgIDB4MS40ZGRkM2JhOWYxMjE0ZGViNDA2NzIzOTdkNmYxOTFiY3AtMTksCisgICAgLTB4MS41ZmRiYmNwNAorICB9LAorICB7IC8vIEVudHJ5IDk1OQorICAgIC0weDEuMzc3NGVlYTdiOGQ3MjE0YmM4OWIxMTUzMmY4MmQzMjNwLTIxLAorICAgIDB4MS41ZmRiYmVwNAorICB9LAorICB7IC8vIEVudHJ5IDk2MAorICAgIDB4MS4zNzc0ZWVhN2I4ZDcyMTRiYzg5YjExNTMyZjgyZDMyM3AtMjEsCisgICAgLTB4MS41ZmRiYmVwNAorICB9LAorICB7IC8vIEVudHJ5IDk2MQorICAgIDB4MS42NDQ1ODhhYzI0OGRhNmQwMTk0MTEyMWY1MDY3M2IzZnAtMjAsCisgICAgMHgxLjVmZGJjMHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTYyCisgICAgLTB4MS42NDQ1ODhhYzI0OGRhNmQwMTk0MTEyMWY1MDY3M2IzZnAtMjAsCisgICAgLTB4MS41ZmRiYzBwNAorICB9LAorICB7IC8vIEVudHJ5IDk2MworICAgIDB4MS5mZmZmNmU4OGYxMzIwNzk0ZDg0NWU4ZTBmZTFmZDhiZHAtMSwKKyAgICAweDEuNmM2Y2JhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjQKKyAgICAtMHgxLmZmZmY2ZTg4ZjEzMjA3OTRkODQ1ZThlMGZlMWZkOGJkcC0xLAorICAgIC0weDEuNmM2Y2JhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjUKKyAgICAweDEuZmZmZmVlODhkY2Q0NDI5ZjE1YzBlNGE5NWI5YmEwZTZwLTEsCisgICAgMHgxLjZjNmNiY3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTY2CisgICAgLTB4MS5mZmZmZWU4OGRjZDQ0MjlmMTVjMGU0YTk1YjliYTBlNnAtMSwKKyAgICAtMHgxLjZjNmNiY3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTY3CisgICAgMHgxLjAwMDAzNzQ0NzQzYjNkYmQzN2RkMDUzZTcwMmJkNzU0cDAsCisgICAgMHgxLjZjNmNiZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTY4CisgICAgLTB4MS4wMDAwMzc0NDc0M2IzZGJkMzdkZDA1M2U3MDJiZDc1NHAwLAorICAgIC0weDEuNmM2Y2JlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjkKKyAgICAweDEuMDQxMDlhYjBlYzc4ZjgyN2VlOTVjZWE3NDZiMzhjMjBwMTgsCisgICAgMHgxLjc4ZmRiNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTcwCisgICAgLTB4MS4wNDEwOWFiMGVjNzhmODI3ZWU5NWNlYTc0NmIzOGMyMHAxOCwKKyAgICAtMHgxLjc4ZmRiNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTcxCisgICAgMHgxLjA4NDJjOWIzMmQyMTI1ZGJmNWMyMGQ3MGM0NmIxN2E1cDE5LAorICAgIDB4MS43OGZkYjhwNAorICB9LAorICB7IC8vIEVudHJ5IDk3MgorICAgIC0weDEuMDg0MmM5YjMyZDIxMjVkYmY1YzIwZDcwYzQ2YjE3YTVwMTksCisgICAgLTB4MS43OGZkYjhwNAorICB9LAorICB7IC8vIEVudHJ5IDk3MworICAgIC0weDEuZmZkNDkxMzNlMjZhOWM3NDk5NjY2MzBkZWU4MTNkZGVwMjMsCisgICAgMHgxLjc4ZmRiYXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTc0CisgICAgMHgxLmZmZDQ5MTMzZTI2YTljNzQ5OTY2NjMwZGVlODEzZGRlcDIzLAorICAgIC0weDEuNzhmZGJhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzUKKyAgICAtMHgxLjAwMDA3MzQ0MzE1MjMwMWZhNTkzMzhlZWMyOWMzNzc4cDAsCisgICAgMHgxLjg1OGViNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTc2CisgICAgMHgxLjAwMDA3MzQ0MzE1MjMwMWZhNTkzMzhlZWMyOWMzNzc4cDAsCisgICAgLTB4MS44NThlYjRwNAorICB9LAorICB7IC8vIEVudHJ5IDk3NworICAgIC0weDEuMDAwMDMzNDQxYzgxMjMyZDNkOWZjMzRiZWE4MWZiN2NwMCwKKyAgICAweDEuODU4ZWI2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzgKKyAgICAweDEuMDAwMDMzNDQxYzgxMjMyZDNkOWZjMzRiZWE4MWZiN2NwMCwKKyAgICAtMHgxLjg1OGViNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTc5CisgICAgLTB4MS5mZmZmZTY4ODJmNjAzOTQ2YjUzYjA0MjM2MWFlYzgyY3AtMSwKKyAgICAweDEuODU4ZWI4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODAKKyAgICAweDEuZmZmZmU2ODgyZjYwMzk0NmI1M2IwNDIzNjFhZWM4MmNwLTEsCisgICAgLTB4MS44NThlYjhwNAorICB9LAorICB7IC8vIEVudHJ5IDk4MQorICAgIC0weDEuY2I2Y2Q0Y2I4MmE5MWRmYzRhZjlhNDk5YTU3NWU0YTRwLTMsCisgICAgMHgxLmZmZmZmZXA2MgorICB9LAorICB7IC8vIEVudHJ5IDk4MgorICAgIDB4MS5jYjZjZDRjYjgyYTkxZGZjNGFmOWE0OTlhNTc1ZTRhNHAtMywKKyAgICAtMHgxLmZmZmZmZXA2MgorICB9LAorICB7IC8vIEVudHJ5IDk4MworICAgIDB4MS41MmY1MGU3NTc5NDFjYmZmNWI3YzJlMDZhMWFiN2U5ZHA2LAorICAgIDB4MS5wNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODQKKyAgICAtMHgxLjUyZjUwZTc1Nzk0MWNiZmY1YjdjMmUwNmExYWI3ZTlkcDYsCisgICAgLTB4MS5wNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODUKKyAgICAtMHgxLjI5Y2JkMTI4MjFiMzk5YzllZTRmMjY1ZGE1MTg4MWE4cDEsCisgICAgMHgxLjAwMDAwMnA2MworICB9LAorICB7IC8vIEVudHJ5IDk4NgorICAgIDB4MS4yOWNiZDEyODIxYjM5OWM5ZWU0ZjI2NWRhNTE4ODFhOHAxLAorICAgIC0weDEuMDAwMDAycDYzCisgIH0sCisgIHsgLy8gRW50cnkgOTg3CisgICAgMHgxLjNlNGQ5MTQ4ZDcwODY3MjdkYTk0NGUxYzA1MmI2OGFmcC0xLAorICAgIDB4MS5mZmZmZmVwMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODgKKyAgICAtMHgxLjNlNGQ5MTQ4ZDcwODY3MjdkYTk0NGUxYzA1MmI2OGFmcC0xLAorICAgIC0weDEuZmZmZmZlcDI2CisgIH0sCisgIHsgLy8gRW50cnkgOTg5CisgICAgLTB4MS4yZThmYzFhZjgxZDhiYWE4ODk5YTMzMjUyMDBjMGRjYnAwLAorICAgIDB4MS5wMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTAKKyAgICAweDEuMmU4ZmMxYWY4MWQ4YmFhODg5OWEzMzI1MjAwYzBkY2JwMCwKKyAgICAtMHgxLnAyNworICB9LAorICB7IC8vIEVudHJ5IDk5MQorICAgIC0weDEuNGNlOTc0OGU1MjRmNzdhZDg1NzM1YzdmN2Q2NjhjZjFwLTEsCisgICAgMHgxLjAwMDAwMnAyNworICB9LAorICB7IC8vIEVudHJ5IDk5MgorICAgIDB4MS40Y2U5NzQ4ZTUyNGY3N2FkODU3MzVjN2Y3ZDY2OGNmMXAtMSwKKyAgICAtMHgxLjAwMDAwMnAyNworICB9LAorICB7IC8vIEVudHJ5IDk5MworICAgIDB4MS43ZTMwMDVkNTdlZDkzYWU0NWIxYmVhM2UzNjE1YmI2N3AxLAorICAgIDB4MS5mZmZmZmVwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTQKKyAgICAtMHgxLjdlMzAwNWQ1N2VkOTNhZTQ1YjFiZWEzZTM2MTViYjY3cDEsCisgICAgLTB4MS5mZmZmZmVwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTUKKyAgICAtMHgxLjNlYTI4MjcxYTliZWEzNmU3NDRmOWNlNTM3YmE0YjU5cDAsCisgICAgMHgxLnAyNAorICB9LAorICB7IC8vIEVudHJ5IDk5NgorICAgIDB4MS4zZWEyODI3MWE5YmVhMzZlNzQ0ZjljZTUzN2JhNGI1OXAwLAorICAgIC0weDEucDI0CisgIH0sCisgIHsgLy8gRW50cnkgOTk3CisgICAgMHgxLmZlOTI5YjQyODIxMDVhMTYwYTliZTI3MzFkZjIwYTZjcDAsCisgICAgMHgxLjAwMDAwMnAyNAorICB9LAorICB7IC8vIEVudHJ5IDk5OAorICAgIC0weDEuZmU5MjliNDI4MjEwNWExNjBhOWJlMjczMWRmMjBhNmNwMCwKKyAgICAtMHgxLjAwMDAwMnAyNAorICB9LAorICB7IC8vIEVudHJ5IDk5OQorICAgIDB4MS4yODY2ZjA2MTk0ZTBjMmM3ZWUyMmVlOWY4ZjlkY2FlZXAwLAorICAgIDB4MS5mZmZmZmVwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMDAKKyAgICAtMHgxLjI4NjZmMDYxOTRlMGMyYzdlZTIyZWU5ZjhmOWRjYWVlcDAsCisgICAgLTB4MS5mZmZmZmVwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMDEKKyAgICAweDEuMjg2NmY5YmU0ZGUxMzcwZGI5MDc4NjA3MDEyY2IwN2JwMCwKKyAgICAweDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAyCisgICAgLTB4MS4yODY2ZjliZTRkZTEzNzBkYjkwNzg2MDcwMTJjYjA3YnAwLAorICAgIC0weDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAzCisgICAgMHgxLjI4NjcwYzc3YzBlNjQ3MTM4ZDRmYzcxODFlZjliNjFmcDAsCisgICAgMHgxLjAwMDAwMnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAwNAorICAgIC0weDEuMjg2NzBjNzdjMGU2NDcxMzhkNGZjNzE4MWVmOWI2MWZwMCwKKyAgICAtMHgxLjAwMDAwMnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAwNQorICAgIC0weDEuMTdhZjY4YTZkNDJmNzcyYmQyNDlmNWQ2OTJhZmE0ZTdwMSwKKyAgICAweDEuZmZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA2CisgICAgMHgxLjE3YWY2OGE2ZDQyZjc3MmJkMjQ5ZjVkNjkyYWZhNGU3cDEsCisgICAgLTB4MS5mZmZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDEwMDcKKyAgICAtMHgxLjE3YWY2MmUwOTUwZjgzYjUwOTkwODdhYWY2N2FmOWMxcDEsCisgICAgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAwOAorICAgIDB4MS4xN2FmNjJlMDk1MGY4M2I1MDk5MDg3YWFmNjdhZjljMXAxLAorICAgIC0weDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA5CisgICAgLTB4MS4xN2FmNTc1NDE3NjcwNTE3M2NlYzg5ZDAxMzgxZjU1M3AxLAorICAgIDB4MS4wMDAwMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMTAKKyAgICAweDEuMTdhZjU3NTQxNzY3MDUxNzNjZWM4OWQwMTM4MWY1NTNwMSwKKyAgICAtMHgxLjAwMDAwMnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAxMQorICAgIDB4MS44ZWIyNDI1ZWZmNzI4NjBkNTZkNjEwNTZkYjU0ZWY2N3AwLAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEyCisgICAgLTB4MS44ZWIyNDI1ZWZmNzI4NjBkNTZkNjEwNTZkYjU0ZWY2N3AwLAorICAgIC0weDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAxMworICAgIDB4MS44ZWIyNDVjYmVlM2E1YjhhY2M3ZDQxMzIzMTQwYjNiNXAwLAorICAgIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDEwMTQKKyAgICAtMHgxLjhlYjI0NWNiZWUzYTViOGFjYzdkNDEzMjMxNDBiM2I1cDAsCisgICAgLTB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDEwMTUKKyAgICAweDEuOGViMjRjYTVjYmVhMDhmOTkxMjA2YTNlYWY5M2FiOThwMCwKKyAgICAweDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE2CisgICAgLTB4MS44ZWIyNGNhNWNiZWEwOGY5OTEyMDZhM2VhZjkzYWI5OHAwLAorICAgIC0weDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE3CisgICAgMHgxLjE3YjRmNDcyY2Q3OTFhYWJmZTRlYTkxYWZiNWU3OWU3cC0xLAorICAgIDB4MS5mZmZmZmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE4CisgICAgLTB4MS4xN2I0ZjQ3MmNkNzkxYWFiZmU0ZWE5MWFmYjVlNzllN3AtMSwKKyAgICAtMHgxLmZmZmZmZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMTkKKyAgICAweDEuMTdiNGY1YmYzNDc0YTQzMTc5NjQ4MDc4ODI0NDRjYzhwLTEsCisgICAgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMjAKKyAgICAtMHgxLjE3YjRmNWJmMzQ3NGE0MzE3OTY0ODA3ODgyNDQ0Y2M4cC0xLAorICAgIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAyMQorICAgIDB4MS4xN2I0Zjg1ODAyNmRkODAzM2VkM2Q4ZDZkNTM1MGNhOXAtMSwKKyAgICAweDEuMDAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAyMgorICAgIC0weDEuMTdiNGY4NTgwMjZkZDgwMzNlZDNkOGQ2ZDUzNTBjYTlwLTEsCisgICAgLTB4MS4wMDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIzCisgICAgMHgxLjA1Nzg1OTMzMTNkYjY1OWNmM2FiODhhMjM1MjE4NDU2cC0yLAorICAgIDB4MS5mZmZmZmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI0CisgICAgLTB4MS4wNTc4NTkzMzEzZGI2NTljZjNhYjg4YTIzNTIxODQ1NnAtMiwKKyAgICAtMHgxLmZmZmZmZXAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMjUKKyAgICAweDEuMDU3ODVhNDNjNGM1NWU2Mzk0MDE4ODk2NWMyOGJkMGZwLTIsCisgICAgMHgxLnAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMjYKKyAgICAtMHgxLjA1Nzg1YTQzYzRjNTVlNjM5NDAxODg5NjVjMjhiZDBmcC0yLAorICAgIC0weDEucC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTAyNworICAgIDB4MS4wNTc4NWM2NTI2OTliODYyOGI3ODc2YjdiZDgzYzBjY3AtMiwKKyAgICAweDEuMDAwMDAycC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTAyOAorICAgIC0weDEuMDU3ODVjNjUyNjk5Yjg2MjhiNzg3NmI3YmQ4M2MwY2NwLTIsCisgICAgLTB4MS4wMDAwMDJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI5CisgICAgMHgxLjAxNTc3OWVkNDY1NzQ3MjRiOTAyNWE0NDcyYTFhZTBhcC0zLAorICAgIDB4MS5mZmZmZmVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMwCisgICAgLTB4MS4wMTU3NzllZDQ2NTc0NzI0YjkwMjVhNDQ3MmExYWUwYXAtMywKKyAgICAtMHgxLmZmZmZmZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwMzEKKyAgICAweDEuMDE1NzdhZjE1MTFhNGUwNDU5ZjViODcyZDRmZjM0ZmRwLTMsCisgICAgMHgxLnAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMzIKKyAgICAtMHgxLjAxNTc3YWYxNTExYTRlMDQ1OWY1Yjg3MmQ0ZmYzNGZkcC0zLAorICAgIC0weDEucC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTAzMworICAgIDB4MS4wMTU3N2NmOTY2YTA3NDQ1NTNkZDQ0YTk5NGYwYmJkMXAtMywKKyAgICAweDEuMDAwMDAycC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTAzNAorICAgIC0weDEuMDE1NzdjZjk2NmEwNzQ0NTUzZGQ0NGE5OTRmMGJiZDFwLTMsCisgICAgLTB4MS4wMDAwMDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM1CisgICAgMHgxLjAwNTU3Njg0NGQ0NGZkYTBiODAzNDhiYjE3NDk4YWExcC00LAorICAgIDB4MS5mZmZmZmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM2CisgICAgLTB4MS4wMDU1NzY4NDRkNDRmZGEwYjgwMzQ4YmIxNzQ5OGFhMXAtNCwKKyAgICAtMHgxLmZmZmZmZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwMzcKKyAgICAweDEuMDA1NTc3ODU0ZGYwMDgzMjkzYmU2MzkwNTdiMGM2ODFwLTQsCisgICAgMHgxLnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwMzgKKyAgICAtMHgxLjAwNTU3Nzg1NGRmMDA4MzI5M2JlNjM5MDU3YjBjNjgxcC00LAorICAgIC0weDEucC00CisgIH0sCisgIHsgLy8gRW50cnkgMTAzOQorICAgIDB4MS4wMDU1Nzk4NzRmNDYyMzVlNTIwODJhNGQwZGRmYzZlMXAtNCwKKyAgICAweDEuMDAwMDAycC00CisgIH0sCisgIHsgLy8gRW50cnkgMTA0MAorICAgIC0weDEuMDA1NTc5ODc0ZjQ2MjM1ZTUyMDgyYTRkMGRkZmM2ZTFwLTQsCisgICAgLTB4MS4wMDAwMDJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQxCisgICAgMHgxLjAwMTU1Njc3NmViNWQ5OGY4MmUxYjVlYWIyOGM2YjVmcC01LAorICAgIDB4MS5mZmZmZmVwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQyCisgICAgLTB4MS4wMDE1NTY3NzZlYjVkOThmODJlMWI1ZWFiMjhjNmI1ZnAtNSwKKyAgICAtMHgxLmZmZmZmZXAtNgorICB9LAorICB7IC8vIEVudHJ5IDEwNDMKKyAgICAweDEuMDAxNTU3NzdhZWMwODU3ZDIyYzk3ZTgwOTg2MDI4OGRwLTUsCisgICAgMHgxLnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwNDQKKyAgICAtMHgxLjAwMTU1Nzc3YWVjMDg1N2QyMmM5N2U4MDk4NjAyODhkcC01LAorICAgIC0weDEucC01CisgIH0sCisgIHsgLy8gRW50cnkgMTA0NQorICAgIDB4MS4wMDE1NTk3ODJlZDVkZWQ4ZTJiNGM4MTljYjdjOWYxMXAtNSwKKyAgICAweDEuMDAwMDAycC01CisgIH0sCisgIHsgLy8gRW50cnkgMTA0NgorICAgIC0weDEuMDAxNTU5NzgyZWQ1ZGVkOGUyYjRjODE5Y2I3YzlmMTFwLTUsCisgICAgLTB4MS4wMDAwMDJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ3CisgICAgMHgxLjAwMDU1NDc3Njg1M2UwNDEwMTBkYTIyYTY1NmY4MjY3cC02LAorICAgIDB4MS5mZmZmZmVwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ4CisgICAgLTB4MS4wMDA1NTQ3NzY4NTNlMDQxMDEwZGEyMmE2NTZmODI2N3AtNiwKKyAgICAtMHgxLmZmZmZmZXAtNworICB9LAorICB7IC8vIEVudHJ5IDEwNDkKKyAgICAweDEuMDAwNTU1Nzc3ODU0OGFlMWI1ZjYwNTc0NzA2ZTgyMzhwLTYsCisgICAgMHgxLnAtNgorICB9LAorICB7IC8vIEVudHJ5IDEwNTAKKyAgICAtMHgxLjAwMDU1NTc3Nzg1NDhhZTFiNWY2MDU3NDcwNmU4MjM4cC02LAorICAgIC0weDEucC02CisgIH0sCisgIHsgLy8gRW50cnkgMTA1MQorICAgIDB4MS4wMDA1NTc3Nzk4NTVlMDgzMjdjNzU4ZTIwZDY5MWRhZHAtNiwKKyAgICAweDEuMDAwMDAycC02CisgIH0sCisgIHsgLy8gRW50cnkgMTA1MgorICAgIC0weDEuMDAwNTU3Nzc5ODU1ZTA4MzI3Yzc1OGUyMGQ2OTFkYWRwLTYsCisgICAgLTB4MS4wMDAwMDJwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUzCisgICAgMHgxLmZmZmZmZTBhYWFhYThhZWVlZjBkOWI1M2FkMmY0ODIzcC0xNSwKKyAgICAweDEuZmZmZmZlcC0xNQorICB9LAorICB7IC8vIEVudHJ5IDEwNTQKKyAgICAtMHgxLmZmZmZmZTBhYWFhYThhZWVlZjBkOWI1M2FkMmY0ODIzcC0xNSwKKyAgICAtMHgxLmZmZmZmZXAtMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU1CisgICAgMHgxLjAwMDAwMDA1NTU1NTU1Nzc3Nzc3Nzg1NDg1NDg1YTFlcC0xNCwKKyAgICAweDEucC0xNAorICB9LAorICB7IC8vIEVudHJ5IDEwNTYKKyAgICAtMHgxLjAwMDAwMDA1NTU1NTU1Nzc3Nzc3Nzg1NDg1NDg1YTFlcC0xNCwKKyAgICAtMHgxLnAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU3CisgICAgMHgxLjAwMDAwMjA1NTU1NTc1Nzc3N2I4Y2RhYTBhYTljNjQwcC0xNCwKKyAgICAweDEuMDAwMDAycC0xNAorICB9LAorICB7IC8vIEVudHJ5IDEwNTgKKyAgICAtMHgxLjAwMDAwMjA1NTU1NTc1Nzc3N2I4Y2RhYTBhYTljNjQwcC0xNCwKKyAgICAtMHgxLjAwMDAwMnAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU5CisgICAgMHgxLmZmZmZmZTAwMDAwMDAyYWFhYWEyYWFhYWIyYWVlZWVjcC0yOCwKKyAgICAweDEuZmZmZmZlcC0yOAorICB9LAorICB7IC8vIEVudHJ5IDEwNjAKKyAgICAtMHgxLmZmZmZmZTAwMDAwMDAyYWFhYWEyYWFhYWIyYWVlZWVjcC0yOCwKKyAgICAtMHgxLmZmZmZmZXAtMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYxCisgICAgMHgxLjAwMDAwMDAwMDAwMDAxNTU1NTU1NTU1NTU1NTc3Nzc3cC0yNywKKyAgICAweDEucC0yNworICB9LAorICB7IC8vIEVudHJ5IDEwNjIKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDAxNTU1NTU1NTU1NTU1NTc3Nzc3cC0yNywKKyAgICAtMHgxLnAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYzCisgICAgMHgxLjAwMDAwMjAwMDAwMDAxNTU1NTVkNTU1NTY1NTc3NzgycC0yNywKKyAgICAweDEuMDAwMDAycC0yNworICB9LAorICB7IC8vIEVudHJ5IDEwNjQKKyAgICAtMHgxLjAwMDAwMjAwMDAwMDAxNTU1NTVkNTU1NTY1NTc3NzgycC0yNywKKyAgICAtMHgxLjAwMDAwMnAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY1CisgICAgMHgxLmZmZmZmZTAwMDAwMDAwMGFhYWFhOGFhYWFhY2FhYWVlcC0zMSwKKyAgICAweDEuZmZmZmZlcC0zMQorICB9LAorICB7IC8vIEVudHJ5IDEwNjYKKyAgICAtMHgxLmZmZmZmZTAwMDAwMDAwMGFhYWFhOGFhYWFhY2FhYWVlcC0zMSwKKyAgICAtMHgxLmZmZmZmZXAtMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY3CisgICAgMHgxLjAwMDAwMDAwMDAwMDAwMDU1NTU1NTU1NTU1NTU1NTc3cC0zMCwKKyAgICAweDEucC0zMAorICB9LAorICB7IC8vIEVudHJ5IDEwNjgKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDAwMDU1NTU1NTU1NTU1NTU1NTc3cC0zMCwKKyAgICAtMHgxLnAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY5CisgICAgMHgxLjAwMDAwMjAwMDAwMDAwMDU1NTU1NzU1NTU1OTU1NTc3cC0zMCwKKyAgICAweDEuMDAwMDAycC0zMAorICB9LAorICB7IC8vIEVudHJ5IDEwNzAKKyAgICAtMHgxLjAwMDAwMjAwMDAwMDAwMDU1NTU1NzU1NTU1OTU1NTc3cC0zMCwKKyAgICAtMHgxLjAwMDAwMnAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcxCisgICAgMHgxLjM5M2Q5NGI0OTg4YzFmMjU0MzQ1YzlmN2Q5ZWEwYzAzcC0xLAorICAgIC0weDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNzIKKyAgICAtMHgxLjM5M2Q5NGI0OTg4YzFmMjU0MzQ1YzlmN2Q5ZWEwYzAzcC0xLAorICAgIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA3MworICAgIC0weDEuMzkzZDk0YjQ5ODhjMWYyNTQzNDVjOWY3ZDllYTBjMDNwLTEsCisgICAgMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc0CisgICAgMHgxLjM5M2Q5NGI0OTg4YzFmMjU0MzQ1YzlmN2Q5ZWEwYzAzcC0xLAorICAgIC0weDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNzUKKyAgICAtMHgxLjM5M2Q5NGI0OTg4YzFmMjU0MzQ1YzlmN2Q5ZWEwYzAzcC0xLAorICAgIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA3NgorICAgIDB4MS4zOTNkOTRiNDk4OGMxZjI1NDM0NWM5ZjdkOWVhMGMwM3AtMSwKKyAgICAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc3CisgICAgMHgxLmFjZjMxNWE4N2FhNWRhODY1NGM4NDRiOTE3ZDE0NzQ1cC0xLAorICAgIDB4MS5mZmZmZmNwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA3OAorICAgIC0weDEuYWNmMzE1YTg3YWE1ZGE4NjU0Yzg0NGI5MTdkMTQ3NDVwLTEsCisgICAgLTB4MS5mZmZmZmNwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA3OQorICAgIDB4MS43NzdhNWNmNzJjZWRmM2I1NDRjODE4MDhiNTE1ZjFmOXAtMjQsCisgICAgMHgxLjkyMWZiNnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTA4MAorICAgIC0weDEuNzc3YTVjZjcyY2VkZjNiNTQ0YzgxODA4YjUxNWYxZjlwLTI0LAorICAgIC0weDEuOTIxZmI2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgxCisgICAgLTB4MS41ZDE0OTQ2ZGM5ODk3NWQ2NDIxYTU1Mjg0ZmUwMjBhMXAyNCwKKyAgICAweDEuOTIxZmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgyCisgICAgMHgxLjVkMTQ5NDZkYzk4OTc1ZDY0MjFhNTUyODRmZTAyMGExcDI0LAorICAgIC0weDEuOTIxZmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgzCisgICAgMHgxLjhlYjI0Y2E1Y2JlYTA4Zjk5MTIwNmEzZWFmOTNhYjk4cDAsCisgICAgMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA4NAorICAgIC0weDEuOGViMjRjYTVjYmVhMDhmOTkxMjA2YTNlYWY5M2FiOThwMCwKKyAgICAtMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA4NQorICAgIDB4MS44ZWIyNDVjYmVlM2E1YjhhY2M3ZDQxMzIzMTQwYjNiNXAwLAorICAgIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDEwODYKKyAgICAtMHgxLjhlYjI0NWNiZWUzYTViOGFjYzdkNDEzMjMxNDBiM2I1cDAsCisgICAgLTB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDEwODcKKyAgICAweDEuOGViMjQyNWVmZjcyODYwZDU2ZDYxMDU2ZGI1NGVmNjdwMCwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA4OAorICAgIC0weDEuOGViMjQyNWVmZjcyODYwZDU2ZDYxMDU2ZGI1NGVmNjdwMCwKKyAgICAtMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwODkKKyAgICAweDEuMDAwMDAwYmJiZDJlYzA2ZDZkNmZmZjM2NTVhMzQ2YWNwMCwKKyAgICAweDEuOTIxZmI2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA5MAorICAgIC0weDEuMDAwMDAwYmJiZDJlYzA2ZDZkNmZmZjM2NTVhMzQ2YWNwMCwKKyAgICAtMHgxLjkyMWZiNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwOTEKKyAgICAweDEuMDAwMDAycC0xMjYsCisgICAgMHgxLjAwMDAwMnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMTA5MgorICAgIC0weDEuMDAwMDAycC0xMjYsCisgICAgLTB4MS4wMDAwMDJwLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDEwOTMKKyAgICAweDEucC0xMjYsCisgICAgMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMTA5NAorICAgIC0weDEucC0xMjYsCisgICAgLTB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDEwOTUKKyAgICAweDEuZmZmZmZjcC0xMjcsCisgICAgMHgxLmZmZmZmY3AtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA5NgorICAgIC0weDEuZmZmZmZjcC0xMjcsCisgICAgLTB4MS5mZmZmZmNwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDEwOTcKKyAgICAweDEuZmZmZmY4cC0xMjcsCisgICAgMHgxLmZmZmZmOHAtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA5OAorICAgIC0weDEuZmZmZmY4cC0xMjcsCisgICAgLTB4MS5mZmZmZjhwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDEwOTkKKyAgICAweDEucC0xNDgsCisgICAgMHgxLnAtMTQ4CisgIH0sCisgIHsgLy8gRW50cnkgMTEwMAorICAgIC0weDEucC0xNDgsCisgICAgLTB4MS5wLTE0OAorICB9LAorICB7IC8vIEVudHJ5IDExMDEKKyAgICAweDEucC0xNDksCisgICAgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgMTEwMgorICAgIC0weDEucC0xNDksCisgICAgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDExMDMKKyAgICAwLjAsCisgICAgMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDExMDQKKyAgICAtMC4wLAorICAgIC0wLjBmCisgIH0sCit9OworI2VuZGlmIC8vIF9fQklPTklDX18KKworVEVTVChtYXRoX3RhbmYsIHRhbmZfaW50ZWwpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGdfdGFuZl9pbnRlbF9kYXRhKS9zaXplb2YodGFuZl9pbnRlbF9kYXRhX3QpOyBpKyspIHsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoZ190YW5mX2ludGVsX2RhdGFbaV0uZXhwZWN0ZWQsIHRhbmYoZ190YW5mX2ludGVsX2RhdGFbaV0uY2FsbF9kYXRhKSkgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKKyAgfQorI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWF0aF90ZXN0LmNwcCBiL3Rlc3RzL21hdGhfdGVzdC5jcHAKaW5kZXggNDU0NjQ2ZC4uYjRmNWIxNCAxMDA2NDQKLS0tIGEvdGVzdHMvbWF0aF90ZXN0LmNwcAorKysgYi90ZXN0cy9tYXRoX3Rlc3QuY3BwCkBAIC0xNCwxMyArMTQsNDMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLSNkZWZpbmUgX0RFQ0xBUkVfQzk5X0xEQkxfTUFUSCAxCisvLyBUaGlzIGluY2x1ZGUgKGFuZCB0aGUgYXNzb2NpYXRlZCBkZWZpbml0aW9uIG9mIF9fdGVzdF9jYXB0dXJlX3NpZ25iaXQpCisvLyBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgYW55IGZpbGVzIHRoYXQgaW5jbHVkZSA8Y21hdGg+IChndGVzdC5oIGluIHRoaXMgY2FzZSkuCisvLworLy8gPG1hdGguaD4gaXMgcmVxdWlyZWQgdG8gZGVmaW5lIGdlbmVyaWMgbWFjcm9zIHNpZ25iaXQsIGlzZmluaXRlIGFuZAorLy8gc2V2ZXJhbCBvdGhlciBzdWNoIGZ1bmN0aW9ucy4KKy8vCisvLyA8Y21hdGg+IGlzIHJlcXVpcmVkIHRvIHVuZGVmIGRlY2xhcmF0aW9ucyBvZiB0aGVzZSBtYWNyb3MgaW4gdGhlIGdsb2JhbAorLy8gbmFtZXNwYWNlIGFuZCBtYWtlIGVxdWl2YWxlbnQgZnVuY3Rpb25zIGF2YWlsYWJsZSBpbiBuYW1lc3BhY2Ugc3RkLiBPdXIKKy8vIHN0bHBvcnQgaW1wbGVtZW50YXRpb24gZG9lcyB0aGlzIG9ubHkgZm9yIHNpZ25iaXQsIGlzZmluaXRlLCBpc2luZiBhbmQKKy8vIGlzbmFuLgorLy8KKy8vIE5PVEU6IFdlIGRvbid0IHdyaXRlIG91ciB0ZXN0IHVzaW5nIHN0ZDo6c2lnbmJpdCBiZWNhdXNlIHdlIHdhbnQgdG8gYmUKKy8vIHN1cmUgdGhhdCB3ZSdyZSB0ZXN0aW5nIHRoZSBiaW9uaWMgdmVyc2lvbiBvZiBzaWduYml0LiBUaGUgQysrIGxpYnJhcmllcworLy8gYXJlIGZyZWUgdG8gcmVpbXBsZW1lbnQgc2lnbmJpdCBvciBkZWxlZ2F0ZSB0byBjb21waWxlciBidWlsdGlucyBpZiB0aGV5CisvLyBwbGVhc2UuCisjaW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgewordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGludCB0ZXN0X2NhcHR1cmVfc2lnbmJpdChjb25zdCBUIGluKSB7CisgIHJldHVybiBzaWduYml0KGluKTsKK30KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBpbnQgdGVzdF9jYXB0dXJlX2lzZmluaXRlKGNvbnN0IFQgaW4pIHsKKyAgcmV0dXJuIGlzZmluaXRlKGluKTsKK30KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBpbnQgdGVzdF9jYXB0dXJlX2lzbmFuKGNvbnN0IFQgaW4pIHsKKyAgcmV0dXJuIGlzbmFuKGluKTsKK30KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBpbnQgdGVzdF9jYXB0dXJlX2lzaW5mKGNvbnN0IFQgaW4pIHsKKyAgcmV0dXJuIGlzaW5mKGluKTsKK30KK30KIAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKICNpbmNsdWRlIDxmZW52Lmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAKIGZsb2F0IGZsb2F0X3N1Ym5vcm1hbCgpIHsKQEAgLTQxLDE0NyArNzEsMjAxIEBACiAgIHJldHVybiB1LmQ7CiB9CiAKK2xvbmcgZG91YmxlIGxkb3VibGVfc3Vibm9ybWFsKCkgeworICB1bmlvbiB7CisgICAgbG9uZyBkb3VibGUgZTsKKyAgICB1bnNpZ25lZCBjaGFyIGNbc2l6ZW9mKGxvbmcgZG91YmxlKV07CisgIH0gdTsKKworICAvLyBTdWJub3JtYWxzIG11c3QgaGF2ZSBhIHplcm8gZXhwb25lbnQgYW5kIG5vbiB6ZXJvIHNpZ25pZmljYW5kLgorICAvLyBPbiBhbGwgc3VwcG9ydGVkIHJlcHJlc2VudGF0aW9uIHRoZSAxNyBiaXQgKGNvdW50aW5nIGZyb20gZWl0aGVyIHNpZGVzKQorICAvLyBpcyBwYXJ0IG9mIHRoZSBzaWduaWZpY2FuZCBzbyBpdCBzaG91bGQgYmUgZW5vdWdoIHRvIHNldCB0aGF0LgorICAvLyBJdCBhbHNvIGFwcGxpZXMgZm9yIHRoZSBjYXNlIHNpemVvZihkb3VibGUpID0gc2l6ZW9mKGxvbmcgZG91YmxlKQorICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemVvZihsb25nIGRvdWJsZSk7IGkrKykgeworICAgIHUuY1tpXSA9IDB4MDA7CisgIH0KKyAgdS5jW3NpemVvZihsb25nIGRvdWJsZSkgLSAzXSA9IDB4ODA7CisgIHUuY1syXSA9IDB4ODA7CisKKyAgcmV0dXJuIHUuZTsKK30KKwogVEVTVChtYXRoLCBmcGNsYXNzaWZ5KSB7CiAgIEFTU0VSVF9FUShGUF9JTkZJTklURSwgZnBjbGFzc2lmeShJTkZJTklUWSkpOwogICBBU1NFUlRfRVEoRlBfSU5GSU5JVEUsIGZwY2xhc3NpZnkoSFVHRV9WQUxGKSk7CiAgIEFTU0VSVF9FUShGUF9JTkZJTklURSwgZnBjbGFzc2lmeShIVUdFX1ZBTCkpOworICBBU1NFUlRfRVEoRlBfSU5GSU5JVEUsIGZwY2xhc3NpZnkoSFVHRV9WQUxMKSk7CiAKICAgQVNTRVJUX0VRKEZQX05BTiwgZnBjbGFzc2lmeShuYW5mKCIiKSkpOwogICBBU1NFUlRfRVEoRlBfTkFOLCBmcGNsYXNzaWZ5KG5hbigiIikpKTsKKyAgQVNTRVJUX0VRKEZQX05BTiwgZnBjbGFzc2lmeShuYW5sKCIiKSkpOwogCiAgIEFTU0VSVF9FUShGUF9OT1JNQUwsIGZwY2xhc3NpZnkoMS4wZikpOwogICBBU1NFUlRfRVEoRlBfTk9STUFMLCBmcGNsYXNzaWZ5KDEuMCkpOworICBBU1NFUlRfRVEoRlBfTk9STUFMLCBmcGNsYXNzaWZ5KDEuMEwpKTsKIAogICBBU1NFUlRfRVEoRlBfU1VCTk9STUFMLCBmcGNsYXNzaWZ5KGZsb2F0X3N1Ym5vcm1hbCgpKSk7CiAgIEFTU0VSVF9FUShGUF9TVUJOT1JNQUwsIGZwY2xhc3NpZnkoZG91YmxlX3N1Ym5vcm1hbCgpKSk7CisgIEFTU0VSVF9FUShGUF9TVUJOT1JNQUwsIGZwY2xhc3NpZnkobGRvdWJsZV9zdWJub3JtYWwoKSkpOwogCiAgIEFTU0VSVF9FUShGUF9aRVJPLCBmcGNsYXNzaWZ5KDAuMGYpKTsKICAgQVNTRVJUX0VRKEZQX1pFUk8sIGZwY2xhc3NpZnkoMC4wKSk7CisgIEFTU0VSVF9FUShGUF9aRVJPLCBmcGNsYXNzaWZ5KDAuMEwpKTsKIH0KIAotLyogVE9ETzogc3RscG9ydCBicmVha3MgdGhlIGlzZmluaXRlIG1hY3JvCiBURVNUKG1hdGgsIGlzZmluaXRlKSB7Ci0gIEFTU0VSVF9UUlVFKGlzZmluaXRlKDEyMy4wZikpOwotICBBU1NFUlRfVFJVRShpc2Zpbml0ZSgxMjMuMCkpOwotICBBU1NFUlRfRkFMU0UoaXNmaW5pdGUoSFVHRV9WQUxGKSk7Ci0gIEFTU0VSVF9GQUxTRShpc2Zpbml0ZShIVUdFX1ZBTCkpOworICBBU1NFUlRfVFJVRSh0ZXN0X2NhcHR1cmVfaXNmaW5pdGUoMTIzLjBmKSk7CisgIEFTU0VSVF9UUlVFKHRlc3RfY2FwdHVyZV9pc2Zpbml0ZSgxMjMuMCkpOworICBBU1NFUlRfVFJVRSh0ZXN0X2NhcHR1cmVfaXNmaW5pdGUoMTIzLjBMKSk7CisgIEFTU0VSVF9GQUxTRSh0ZXN0X2NhcHR1cmVfaXNmaW5pdGUoSFVHRV9WQUxGKSk7CisgIEFTU0VSVF9GQUxTRSh0ZXN0X2NhcHR1cmVfaXNmaW5pdGUoSFVHRV9WQUwpKTsKKyAgQVNTRVJUX0ZBTFNFKHRlc3RfY2FwdHVyZV9pc2Zpbml0ZShIVUdFX1ZBTEwpKTsKIH0KLSovCiAKIFRFU1QobWF0aCwgaXNpbmYpIHsKLSAgQVNTRVJUX0ZBTFNFKGlzaW5mKDEyMy4wZikpOwotICBBU1NFUlRfRkFMU0UoaXNpbmYoMTIzLjApKTsKLSAgQVNTRVJUX1RSVUUoaXNpbmYoSFVHRV9WQUxGKSk7Ci0gIEFTU0VSVF9UUlVFKGlzaW5mKEhVR0VfVkFMKSk7CisgIEFTU0VSVF9GQUxTRSh0ZXN0X2NhcHR1cmVfaXNpbmYoMTIzLjBmKSk7CisgIEFTU0VSVF9GQUxTRSh0ZXN0X2NhcHR1cmVfaXNpbmYoMTIzLjApKTsKKyAgQVNTRVJUX0ZBTFNFKHRlc3RfY2FwdHVyZV9pc2luZigxMjMuMEwpKTsKKyAgQVNTRVJUX1RSVUUodGVzdF9jYXB0dXJlX2lzaW5mKEhVR0VfVkFMRikpOworICBBU1NFUlRfVFJVRSh0ZXN0X2NhcHR1cmVfaXNpbmYoSFVHRV9WQUwpKTsKKyAgQVNTRVJUX1RSVUUodGVzdF9jYXB0dXJlX2lzaW5mKEhVR0VfVkFMTCkpOwogfQogCiBURVNUKG1hdGgsIGlzbmFuKSB7Ci0gIEFTU0VSVF9GQUxTRShpc25hbigxMjMuMGYpKTsKLSAgQVNTRVJUX0ZBTFNFKGlzbmFuKDEyMy4wKSk7Ci0gIEFTU0VSVF9UUlVFKGlzbmFuKG5hbmYoIiIpKSk7Ci0gIEFTU0VSVF9UUlVFKGlzbmFuKG5hbigiIikpKTsKKyAgQVNTRVJUX0ZBTFNFKHRlc3RfY2FwdHVyZV9pc25hbigxMjMuMGYpKTsKKyAgQVNTRVJUX0ZBTFNFKHRlc3RfY2FwdHVyZV9pc25hbigxMjMuMCkpOworICBBU1NFUlRfRkFMU0UodGVzdF9jYXB0dXJlX2lzbmFuKDEyMy4wTCkpOworICBBU1NFUlRfVFJVRSh0ZXN0X2NhcHR1cmVfaXNuYW4obmFuZigiIikpKTsKKyAgQVNTRVJUX1RSVUUodGVzdF9jYXB0dXJlX2lzbmFuKG5hbigiIikpKTsKKyAgQVNTRVJUX1RSVUUodGVzdF9jYXB0dXJlX2lzbmFuKG5hbmwoIiIpKSk7CiB9CiAKIFRFU1QobWF0aCwgaXNub3JtYWwpIHsKICAgQVNTRVJUX1RSVUUoaXNub3JtYWwoMTIzLjBmKSk7CiAgIEFTU0VSVF9UUlVFKGlzbm9ybWFsKDEyMy4wKSk7CisgIEFTU0VSVF9UUlVFKGlzbm9ybWFsKDEyMy4wTCkpOwogICBBU1NFUlRfRkFMU0UoaXNub3JtYWwoZmxvYXRfc3Vibm9ybWFsKCkpKTsKICAgQVNTRVJUX0ZBTFNFKGlzbm9ybWFsKGRvdWJsZV9zdWJub3JtYWwoKSkpOworICBBU1NFUlRfRkFMU0UoaXNub3JtYWwobGRvdWJsZV9zdWJub3JtYWwoKSkpOwogfQogCiAvLyBUT0RPOiBpc2dyZWF0ZXIsIGlzZ3JlYXRlcmVxdWFscywgaXNsZXNzLCBpc2xlc3NlcXVhbCwgaXNsZXNzZ3JlYXRlciwgaXN1bm9yZGVyZWQKLQotLyogVE9ETzogc3RscG9ydCBicmVha3MgdGhlIHNpZ25iaXQgbWFjcm8KIFRFU1QobWF0aCwgc2lnbmJpdCkgewotICBBU1NFUlRfRVEoMCwgc2lnbmJpdCgwLjBmKSk7Ci0gIEFTU0VSVF9FUSgwLCBzaWduYml0KDAuMCkpOworICBBU1NFUlRfRVEoMCwgdGVzdF9jYXB0dXJlX3NpZ25iaXQoMC4wZikpOworICBBU1NFUlRfRVEoMCwgdGVzdF9jYXB0dXJlX3NpZ25iaXQoMC4wKSk7CisgIEFTU0VSVF9FUSgwLCB0ZXN0X2NhcHR1cmVfc2lnbmJpdCgwLjBMKSk7CiAKLSAgQVNTRVJUX0VRKDAsIHNpZ25iaXQoMS4wZikpOwotICBBU1NFUlRfRVEoMCwgc2lnbmJpdCgxLjApKTsKKyAgQVNTRVJUX0VRKDAsIHRlc3RfY2FwdHVyZV9zaWduYml0KDEuMGYpKTsKKyAgQVNTRVJUX0VRKDAsIHRlc3RfY2FwdHVyZV9zaWduYml0KDEuMCkpOworICBBU1NFUlRfRVEoMCwgdGVzdF9jYXB0dXJlX3NpZ25iaXQoMS4wTCkpOwogCi0gIEFTU0VSVF9ORSgwLCBzaWduYml0KC0xLjBmKSk7Ci0gIEFTU0VSVF9ORSgwLCBzaWduYml0KC0xLjApKTsKKyAgQVNTRVJUX05FKDAsIHRlc3RfY2FwdHVyZV9zaWduYml0KC0xLjBmKSk7CisgIEFTU0VSVF9ORSgwLCB0ZXN0X2NhcHR1cmVfc2lnbmJpdCgtMS4wKSk7CisgIEFTU0VSVF9ORSgwLCB0ZXN0X2NhcHR1cmVfc2lnbmJpdCgtMS4wTCkpOwogfQotKi8KIAotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKIFRFU1QobWF0aCwgX19mcGNsYXNzaWZ5ZCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgQVNTRVJUX0VRKEZQX0lORklOSVRFLCBfX2ZwY2xhc3NpZnlkKEhVR0VfVkFMKSk7CiAgIEFTU0VSVF9FUShGUF9OQU4sIF9fZnBjbGFzc2lmeWQobmFuKCIiKSkpOwogICBBU1NFUlRfRVEoRlBfTk9STUFMLCBfX2ZwY2xhc3NpZnlkKDEuMCkpOwogICBBU1NFUlRfRVEoRlBfU1VCTk9STUFMLCBfX2ZwY2xhc3NpZnlkKGRvdWJsZV9zdWJub3JtYWwoKSkpOwogICBBU1NFUlRfRVEoRlBfWkVSTywgX19mcGNsYXNzaWZ5ZCgwLjApKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQotI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCiBURVNUKG1hdGgsIF9fZnBjbGFzc2lmeWYpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIEFTU0VSVF9FUShGUF9JTkZJTklURSwgX19mcGNsYXNzaWZ5ZihIVUdFX1ZBTEYpKTsKICAgQVNTRVJUX0VRKEZQX05BTiwgX19mcGNsYXNzaWZ5ZihuYW5mKCIiKSkpOwogICBBU1NFUlRfRVEoRlBfTk9STUFMLCBfX2ZwY2xhc3NpZnlmKDEuMGYpKTsKICAgQVNTRVJUX0VRKEZQX1NVQk5PUk1BTCwgX19mcGNsYXNzaWZ5ZihmbG9hdF9zdWJub3JtYWwoKSkpOwogICBBU1NFUlRfRVEoRlBfWkVSTywgX19mcGNsYXNzaWZ5ZigwLjBmKSk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KLSNlbmRpZgogCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQogVEVTVChtYXRoLCBfX2ZwY2xhc3NpZnlsKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBFWFBFQ1RfRVEoRlBfSU5GSU5JVEUsIF9fZnBjbGFzc2lmeWwoSFVHRV9WQUxMKSk7CiAgIEVYUEVDVF9FUShGUF9OQU4sIF9fZnBjbGFzc2lmeWwobmFubCgiIikpKTsKLSAgRVhQRUNUX0VRKEZQX05PUk1BTCwgX19mcGNsYXNzaWZ5bCgxLjApKTsKLSAgRVhQRUNUX0VRKEZQX1NVQk5PUk1BTCwgX19mcGNsYXNzaWZ5bChkb3VibGVfc3Vibm9ybWFsKCkpKTsKLSAgRVhQRUNUX0VRKEZQX1pFUk8sIF9fZnBjbGFzc2lmeWwoMC4wKSk7CisgIEVYUEVDVF9FUShGUF9OT1JNQUwsIF9fZnBjbGFzc2lmeWwoMS4wTCkpOworICBFWFBFQ1RfRVEoRlBfU1VCTk9STUFMLCBfX2ZwY2xhc3NpZnlsKGxkb3VibGVfc3Vibm9ybWFsKCkpKTsKKyAgRVhQRUNUX0VRKEZQX1pFUk8sIF9fZnBjbGFzc2lmeWwoMC4wTCkpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9Ci0jZW5kaWYKIAogVEVTVChtYXRoLCBmaW5pdGVmKSB7CiAgIEFTU0VSVF9UUlVFKGZpbml0ZWYoMTIzLjBmKSk7CiAgIEFTU0VSVF9GQUxTRShmaW5pdGVmKEhVR0VfVkFMRikpOwogfQogCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQogVEVTVChtYXRoLCBfX2lzZmluaXRlKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBBU1NFUlRfVFJVRShfX2lzZmluaXRlKDEyMy4wKSk7CiAgIEFTU0VSVF9GQUxTRShfX2lzZmluaXRlKEhVR0VfVkFMKSk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KLSNlbmRpZgogCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQogVEVTVChtYXRoLCBfX2lzZmluaXRlZikgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgQVNTRVJUX1RSVUUoX19pc2Zpbml0ZWYoMTIzLjBmKSk7CiAgIEFTU0VSVF9GQUxTRShfX2lzZmluaXRlZihIVUdFX1ZBTEYpKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQotI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCiBURVNUKG1hdGgsIF9faXNmaW5pdGVsKSB7Ci0gIEFTU0VSVF9UUlVFKF9faXNmaW5pdGVsKDEyMy4wZikpOworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgQVNTRVJUX1RSVUUoX19pc2Zpbml0ZWwoMTIzLjBMKSk7CiAgIEFTU0VSVF9GQUxTRShfX2lzZmluaXRlbChIVUdFX1ZBTEwpKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQotI2VuZGlmCiAKIFRFU1QobWF0aCwgZmluaXRlKSB7CiAgIEFTU0VSVF9UUlVFKGZpbml0ZSgxMjMuMCkpOwogICBBU1NFUlRfRkFMU0UoZmluaXRlKEhVR0VfVkFMKSk7CiB9CiAKK1RFU1QobWF0aCwgaXNpbmZfZnVuY3Rpb24pIHsKKyAgLy8gVGhlIGlzaW5mIG1hY3JvIGRlYWxzIHdpdGggYWxsIHRocmVlIHR5cGVzOyB0aGUgaXNpbmYgZnVuY3Rpb24gaXMgZm9yIGRvdWJsZXMuCisgIEFTU0VSVF9GQUxTRSgoaXNpbmYpKDEyMy4wKSk7CisgIEFTU0VSVF9UUlVFKChpc2luZikoSFVHRV9WQUwpKTsKK30KKwogVEVTVChtYXRoLCBfX2lzaW5mZikgewogICBBU1NFUlRfRkFMU0UoX19pc2luZmYoMTIzLjBmKSk7CiAgIEFTU0VSVF9UUlVFKF9faXNpbmZmKEhVR0VfVkFMRikpOwogfQogCiBURVNUKG1hdGgsIF9faXNpbmZsKSB7Ci0gIEFTU0VSVF9GQUxTRShfX2lzaW5mbCgxMjMuMCkpOworICBBU1NFUlRfRkFMU0UoX19pc2luZmwoMTIzLjBMKSk7CiAgIEFTU0VSVF9UUlVFKF9faXNpbmZsKEhVR0VfVkFMTCkpOwogfQogCitURVNUKG1hdGgsIGlzbmFuX2Z1bmN0aW9uKSB7CisgIC8vIFRoZSBpc25hbiBtYWNybyBkZWFscyB3aXRoIGFsbCB0aHJlZSB0eXBlczsgdGhlIGlzbmFuIGZ1bmN0aW9uIGlzIGZvciBkb3VibGVzLgorICBBU1NFUlRfRkFMU0UoKGlzbmFuKSgxMjMuMCkpOworICBBU1NFUlRfVFJVRSgoaXNuYW4pKG5hbigiIikpKTsKK30KKwogVEVTVChtYXRoLCBfX2lzbmFuZikgewogICBBU1NFUlRfRkFMU0UoX19pc25hbmYoMTIzLjBmKSk7CiAgIEFTU0VSVF9UUlVFKF9faXNuYW5mKG5hbmYoIiIpKSk7CiB9CiAKIFRFU1QobWF0aCwgX19pc25hbmwpIHsKLSAgQVNTRVJUX0ZBTFNFKF9faXNuYW5sKDEyMy4wKSk7CisgIEFTU0VSVF9GQUxTRShfX2lzbmFubCgxMjMuMEwpKTsKICAgQVNTRVJUX1RSVUUoX19pc25hbmwobmFubCgiIikpKTsKIH0KIApAQCAtMTkwLDI2ICsyNzQsMzIgQEAKICAgQVNTRVJUX1RSVUUoaXNuYW5mKG5hbmYoIiIpKSk7CiB9CiAKLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCiBURVNUKG1hdGgsIF9faXNub3JtYWwpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIEFTU0VSVF9UUlVFKF9faXNub3JtYWwoMTIzLjApKTsKICAgQVNTRVJUX0ZBTFNFKF9faXNub3JtYWwoZG91YmxlX3N1Ym5vcm1hbCgpKSk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KLSNlbmRpZgogCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQogVEVTVChtYXRoLCBfX2lzbm9ybWFsZikgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgQVNTRVJUX1RSVUUoX19pc25vcm1hbGYoMTIzLjBmKSk7CiAgIEFTU0VSVF9GQUxTRShfX2lzbm9ybWFsZihmbG9hdF9zdWJub3JtYWwoKSkpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9Ci0jZW5kaWYKIAotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKIFRFU1QobWF0aCwgX19pc25vcm1hbGwpIHsKLSAgQVNTRVJUX1RSVUUoX19pc25vcm1hbGwoMTIzLjApKTsKLSAgQVNTRVJUX0ZBTFNFKF9faXNub3JtYWxsKGRvdWJsZV9zdWJub3JtYWwoKSkpOworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgQVNTRVJUX1RSVUUoX19pc25vcm1hbGwoMTIzLjBMKSk7CisgIEFTU0VSVF9GQUxTRShfX2lzbm9ybWFsbChsZG91YmxlX3N1Ym5vcm1hbCgpKSk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KLSNlbmRpZgogCiBURVNUKG1hdGgsIF9fc2lnbmJpdCkgewogICBBU1NFUlRfRVEoMCwgX19zaWduYml0KDAuMCkpOwpAQCAtMjI0LDEzICszMTQsMTMgQEAKIH0KIAogVEVTVChtYXRoLCBfX3NpZ25iaXRsKSB7Ci0gIEFTU0VSVF9FUSgwLCBfX3NpZ25iaXRsKDAuMCkpOwotICBBU1NFUlRfRVEoMCwgX19zaWduYml0bCgxLjApKTsKLSAgQVNTRVJUX05FKDAsIF9fc2lnbmJpdGwoLTEuMCkpOworICBBU1NFUlRfRVEoMEwsIF9fc2lnbmJpdGwoMC4wTCkpOworICBBU1NFUlRfRVEoMEwsIF9fc2lnbmJpdGwoMS4wTCkpOworICBBU1NFUlRfTkUoMEwsIF9fc2lnbmJpdGwoLTEuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBhY29zKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUShNX1BJLzIuMCwgYWNvcygwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUShNX1BJLzIuMCwgYWNvcygwLjApKTsKIH0KIAogVEVTVChtYXRoLCBhY29zZikgewpAQCAtMjM4LDExICszMjgsMTEgQEAKIH0KIAogVEVTVChtYXRoLCBhY29zbCkgewotICBBU1NFUlRfRkxPQVRfRVEoTV9QSS8yLjAsIGFjb3NsKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKE1fUEkvMi4wTCwgYWNvc2woMC4wTCkpOwogfQogCiBURVNUKG1hdGgsIGFzaW4pIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgYXNpbigwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjAsIGFzaW4oMC4wKSk7CiB9CiAKIFRFU1QobWF0aCwgYXNpbmYpIHsKQEAgLTI1MCwxMSArMzQwLDExIEBACiB9CiAKIFRFU1QobWF0aCwgYXNpbmwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgYXNpbmwoMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wTCwgYXNpbmwoMC4wTCkpOwogfQogCiBURVNUKG1hdGgsIGF0YW4pIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgYXRhbigwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjAsIGF0YW4oMC4wKSk7CiB9CiAKIFRFU1QobWF0aCwgYXRhbmYpIHsKQEAgLTI2MiwxMSArMzUyLDExIEBACiB9CiAKIFRFU1QobWF0aCwgYXRhbmwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgYXRhbmwoMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wTCwgYXRhbmwoMC4wTCkpOwogfQogCiBURVNUKG1hdGgsIGF0YW4yKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGF0YW4yKDAuMCwgMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCBhdGFuMigwLjAsIDAuMCkpOwogfQogCiBURVNUKG1hdGgsIGF0YW4yZikgewpAQCAtMjc0LDExICszNjQsMTEgQEAKIH0KIAogVEVTVChtYXRoLCBhdGFuMmwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgYXRhbjJsKDAuMCwgMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wTCwgYXRhbjJsKDAuMEwsIDAuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBjb3MpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgY29zKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMCwgY29zKDAuMCkpOwogfQogCiBURVNUKG1hdGgsIGNvc2YpIHsKQEAgLTI4NiwxMSArMzc2LDExIEBACiB9CiAKIFRFU1QobWF0aCwgY29zbCkgewotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBjb3NsKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMEwsIGNvc2woMC4wTCkpOwogfQogCiBURVNUKG1hdGgsIHNpbikgewotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBzaW4oMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCBzaW4oMC4wKSk7CiB9CiAKIFRFU1QobWF0aCwgc2luZikgewpAQCAtMjk4LDExICszODgsMTEgQEAKIH0KIAogVEVTVChtYXRoLCBzaW5sKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIHNpbmwoMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wTCwgc2lubCgwLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgdGFuKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIHRhbigwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjAsIHRhbigwLjApKTsKIH0KIAogVEVTVChtYXRoLCB0YW5mKSB7CkBAIC0zMTAsMTEgKzQwMCwxMSBAQAogfQogCiBURVNUKG1hdGgsIHRhbmwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgdGFubCgwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjBMLCB0YW5sKDAuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBhY29zaCkgewotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBhY29zaCgxLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjAsIGFjb3NoKDEuMCkpOwogfQogCiBURVNUKG1hdGgsIGFjb3NoZikgewpAQCAtMzIyLDExICs0MTIsMTEgQEAKIH0KIAogVEVTVChtYXRoLCBhY29zaGwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgYWNvc2hsKDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMEwsIGFjb3NobCgxLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgYXNpbmgpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgYXNpbmgoMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCBhc2luaCgwLjApKTsKIH0KIAogVEVTVChtYXRoLCBhc2luaGYpIHsKQEAgLTMzNCwxMSArNDI0LDExIEBACiB9CiAKIFRFU1QobWF0aCwgYXNpbmhsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGFzaW5obCgwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjBMLCBhc2luaGwoMC4wTCkpOwogfQogCiBURVNUKG1hdGgsIGF0YW5oKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGF0YW5oKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgYXRhbmgoMC4wKSk7CiB9CiAKIFRFU1QobWF0aCwgYXRhbmhmKSB7CkBAIC0zNDYsMTEgKzQzNiwxMSBAQAogfQogCiBURVNUKG1hdGgsIGF0YW5obCkgewotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBhdGFuaGwoMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wTCwgYXRhbmhsKDAuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBjb3NoKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGNvc2goMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4wLCBjb3NoKDAuMCkpOwogfQogCiBURVNUKG1hdGgsIGNvc2hmKSB7CkBAIC0zNTgsMTEgKzQ0OCwxMSBAQAogfQogCiBURVNUKG1hdGgsIGNvc2hsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGNvc2hsKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMEwsIGNvc2hsKDAuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBzaW5oKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIHNpbmgoMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCBzaW5oKDAuMCkpOwogfQogCiBURVNUKG1hdGgsIHNpbmhmKSB7CkBAIC0zNzAsMTEgKzQ2MCwxMSBAQAogfQogCiBURVNUKG1hdGgsIHNpbmhsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIHNpbmhsKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMEwsIHNpbmhsKDAuMEwpKTsKIH0KIAogVEVTVChtYXRoLCB0YW5oKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIHRhbmgoMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCB0YW5oKDAuMCkpOwogfQogCiBURVNUKG1hdGgsIHRhbmhmKSB7CkBAIC0zODIsMTEgKzQ3MiwxMSBAQAogfQogCiBURVNUKG1hdGgsIHRhbmhsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIHRhbmhsKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMEwsIHRhbmhsKDAuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBsb2cpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgbG9nKE1fRSkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMCwgbG9nKE1fRSkpOwogfQogCiBURVNUKG1hdGgsIGxvZ2YpIHsKQEAgLTM5NCwxMSArNDg0LDExIEBACiB9CiAKIFRFU1QobWF0aCwgbG9nbCkgewotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBsb2dsKE1fRSkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMEwsIGxvZ2woTV9FKSk7CiB9CiAKIFRFU1QobWF0aCwgbG9nMikgewotICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgbG9nMig0MDk2LjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxMi4wLCBsb2cyKDQwOTYuMCkpOwogfQogCiBURVNUKG1hdGgsIGxvZzJmKSB7CkBAIC00MDYsMTEgKzQ5NiwxMSBAQAogfQogCiBURVNUKG1hdGgsIGxvZzJsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBsb2cybCg0MDk2LjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxMi4wTCwgbG9nMmwoNDA5Ni4wTCkpOwogfQogCiBURVNUKG1hdGgsIGxvZzEwKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgzLjAsIGxvZzEwKDEwMDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDMuMCwgbG9nMTAoMTAwMC4wKSk7CiB9CiAKIFRFU1QobWF0aCwgbG9nMTBmKSB7CkBAIC00MTgsMTEgKzUwOCwxMSBAQAogfQogCiBURVNUKG1hdGgsIGxvZzEwbCkgewotICBBU1NFUlRfRkxPQVRfRVEoMy4wLCBsb2cxMGwoMTAwMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMy4wTCwgbG9nMTBsKDEwMDAuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBjYnJ0KSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgzLjAsIGNicnQoMjcuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDMuMCwgY2JydCgyNy4wKSk7CiB9CiAKIFRFU1QobWF0aCwgY2JydGYpIHsKQEAgLTQzMCwxMSArNTIwLDExIEBACiB9CiAKIFRFU1QobWF0aCwgY2JydGwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDMuMCwgY2JydGwoMjcuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDMuMEwsIGNicnRsKDI3LjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgc3FydCkgewotICBBU1NFUlRfRkxPQVRfRVEoMi4wLCBzcXJ0KDQuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDIuMCwgc3FydCg0LjApKTsKIH0KIAogVEVTVChtYXRoLCBzcXJ0ZikgewpAQCAtNDQyLDEyICs1MzIsMTIgQEAKIH0KIAogVEVTVChtYXRoLCBzcXJ0bCkgewotICBBU1NFUlRfRkxPQVRfRVEoMi4wLCBzcXJ0bCg0LjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgyLjBMLCBzcXJ0bCg0LjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgZXhwKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGV4cCgwLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKE1fRSwgZXhwKDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMCwgZXhwKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKE1fRSwgZXhwKDEuMCkpOwogfQogCiBURVNUKG1hdGgsIGV4cGYpIHsKQEAgLTQ1NiwxMiArNTQ2LDEyIEBACiB9CiAKIFRFU1QobWF0aCwgZXhwbCkgewotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBleHBsKDAuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoTV9FLCBleHBsKDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMEwsIGV4cGwoMC4wTCkpOworICBBU1NFUlRfRE9VQkxFX0VRKE1fRSwgZXhwbCgxLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgZXhwMikgewotICBBU1NFUlRfRkxPQVRfRVEoOC4wLCBleHAyKDMuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDguMCwgZXhwMigzLjApKTsKIH0KIAogVEVTVChtYXRoLCBleHAyZikgewpAQCAtNDY5LDExICs1NTksMTEgQEAKIH0KIAogVEVTVChtYXRoLCBleHAybCkgewotICBBU1NFUlRfRkxPQVRfRVEoOC4wLCBleHAybCgzLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSg4LjBMLCBleHAybCgzLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgZXhwbTEpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKE1fRSAtIDEuMCwgZXhwbTEoMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoTV9FIC0gMS4wLCBleHBtMSgxLjApKTsKIH0KIAogVEVTVChtYXRoLCBleHBtMWYpIHsKQEAgLTQ4MSwxNCArNTcxLDE0IEBACiB9CiAKIFRFU1QobWF0aCwgZXhwbTFsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUShNX0UgLSAxLjAsIGV4cG0xbCgxLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUShNX0UgLSAxLjBMLCBleHBtMWwoMS4wTCkpOwogfQogCiBURVNUKG1hdGgsIHBvdykgewogICBBU1NFUlRfVFJVRShpc25hbihwb3cobmFuKCIiKSwgMy4wKSkpOwotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCAocG93KDEuMCwgbmFuKCIiKSkpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjAsIChwb3coMS4wLCBuYW4oIiIpKSkpOwogICBBU1NFUlRfVFJVRShpc25hbihwb3coMi4wLCBuYW4oIiIpKSkpOwotICBBU1NFUlRfRkxPQVRfRVEoOC4wLCBwb3coMi4wLCAzLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSg4LjAsIHBvdygyLjAsIDMuMCkpOwogfQogCiBURVNUKG1hdGgsIHBvd2YpIHsKQEAgLTQ5OSwxNCArNTg5LDE0IEBACiB9CiAKIFRFU1QobWF0aCwgcG93bCkgewotICBBU1NFUlRfVFJVRShfX2lzbmFubChwb3dsKG5hbmwoIiIpLCAzLjApKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIChwb3dsKDEuMCwgbmFubCgiIikpKSk7Ci0gIEFTU0VSVF9UUlVFKF9faXNuYW5sKHBvd2woMi4wLCBuYW5sKCIiKSkpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDguMCwgcG93bCgyLjAsIDMuMCkpOworICBBU1NFUlRfVFJVRShfX2lzbmFubChwb3dsKG5hbmwoIiIpLCAzLjBMKSkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMEwsIChwb3dsKDEuMEwsIG5hbmwoIiIpKSkpOworICBBU1NFUlRfVFJVRShfX2lzbmFubChwb3dsKDIuMEwsIG5hbmwoIiIpKSkpOworICBBU1NFUlRfRE9VQkxFX0VRKDguMEwsIHBvd2woMi4wTCwgMy4wTCkpOwogfQogCiBURVNUKG1hdGgsIGNlaWwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgY2VpbCgwLjkpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjAsIGNlaWwoMC45KSk7CiB9CiAKIFRFU1QobWF0aCwgY2VpbGYpIHsKQEAgLTUxNCwxMSArNjA0LDExIEBACiB9CiAKIFRFU1QobWF0aCwgY2VpbGwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgY2VpbGwoMC45KSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4wTCwgY2VpbGwoMC45TCkpOwogfQogCiBURVNUKG1hdGgsIGZsb29yKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGZsb29yKDEuMSkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMCwgZmxvb3IoMS4xKSk7CiB9CiAKIFRFU1QobWF0aCwgZmxvb3JmKSB7CkBAIC01MjYsMTEgKzYxNiwxMSBAQAogfQogCiBURVNUKG1hdGgsIGZsb29ybCkgewotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBmbG9vcmwoMS4xKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4wTCwgZmxvb3JsKDEuMUwpKTsKIH0KIAogVEVTVChtYXRoLCBmYWJzKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGZhYnMoLTEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMCwgZmFicygtMS4wKSk7CiB9CiAKIFRFU1QobWF0aCwgZmFic2YpIHsKQEAgLTUzOCwxMSArNjI4LDExIEBACiB9CiAKIFRFU1QobWF0aCwgZmFic2wpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgZmFic2woLTEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMEwsIGZhYnNsKC0xLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgbGRleHApIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDE2LjAsIGxkZXhwKDIuMCwgMy4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTYuMCwgbGRleHAoMi4wLCAzLjApKTsKIH0KIAogVEVTVChtYXRoLCBsZGV4cGYpIHsKQEAgLTU1MCwxMSArNjQwLDExIEBACiB9CiAKIFRFU1QobWF0aCwgbGRleHBsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxNi4wLCBsZGV4cGwoMi4wLCAzLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxNi4wTCwgbGRleHBsKDIuMEwsIDMuMCkpOwogfQogCiBURVNUKG1hdGgsIGZtb2QpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDIuMCwgZm1vZCgxMi4wLCAxMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMi4wLCBmbW9kKDEyLjAsIDEwLjApKTsKIH0KIAogVEVTVChtYXRoLCBmbW9kZikgewpAQCAtNTYyLDExICs2NTIsMTEgQEAKIH0KIAogVEVTVChtYXRoLCBmbW9kbCkgewotICBBU1NFUlRfRkxPQVRfRVEoMi4wLCBmbW9kbCgxMi4wLCAxMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMi4wTCwgZm1vZGwoMTIuMEwsIDEwLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgcmVtYWluZGVyKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgyLjAsIHJlbWFpbmRlcigxMi4wLCAxMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMi4wLCByZW1haW5kZXIoMTIuMCwgMTAuMCkpOwogfQogCiBURVNUKG1hdGgsIHJlbWFpbmRlcmYpIHsKQEAgLTU3NCwxMSArNjY0LDExIEBACiB9CiAKIFRFU1QobWF0aCwgcmVtYWluZGVybCkgewotICBBU1NFUlRfRkxPQVRfRVEoMi4wLCByZW1haW5kZXJsKDEyLjAsIDEwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgyLjBMLCByZW1haW5kZXJsKDEyLjBMLCAxMC4wTCkpOwogfQogCiBURVNUKG1hdGgsIGRyZW0pIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDIuMCwgZHJlbSgxMi4wLCAxMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMi4wLCBkcmVtKDEyLjAsIDEwLjApKTsKIH0KIAogVEVTVChtYXRoLCBkcmVtZikgewpAQCAtNTg2LDkgKzY3Niw5IEBACiB9CiAKIFRFU1QobWF0aCwgZm1heCkgewotICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgZm1heCgxMi4wLCAxMC4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBmbWF4KDEyLjAsIG5hbigiIikpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEyLjAsIGZtYXgobmFuKCIiKSwgMTIuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEyLjAsIGZtYXgoMTIuMCwgMTAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEyLjAsIGZtYXgoMTIuMCwgbmFuKCIiKSkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEyLjAsIGZtYXgobmFuKCIiKSwgMTIuMCkpOwogfQogCiBURVNUKG1hdGgsIGZtYXhmKSB7CkBAIC01OTgsMTUgKzY4OCwxNSBAQAogfQogCiBURVNUKG1hdGgsIGZtYXhsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBmbWF4bCgxMi4wLCAxMC4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBmbWF4bCgxMi4wLCBuYW5sKCIiKSkpOwotICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgZm1heGwobmFubCgiIiksIDEyLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxMi4wTCwgZm1heGwoMTIuMEwsIDEwLjBMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTIuMEwsIGZtYXhsKDEyLjBMLCBuYW5sKCIiKSkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEyLjBMLCBmbWF4bChuYW5sKCIiKSwgMTIuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBmbWluKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMC4wLCBmbWluKDEyLjAsIDEwLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEyLjAsIGZtaW4oMTIuMCwgbmFuKCIiKSkpOwotICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgZm1pbihuYW4oIiIpLCAxMi4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTAuMCwgZm1pbigxMi4wLCAxMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTIuMCwgZm1pbigxMi4wLCBuYW4oIiIpKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTIuMCwgZm1pbihuYW4oIiIpLCAxMi4wKSk7CiB9CiAKIFRFU1QobWF0aCwgZm1pbmYpIHsKQEAgLTYxNiwxMyArNzA2LDEzIEBACiB9CiAKIFRFU1QobWF0aCwgZm1pbmwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEwLjAsIGZtaW5sKDEyLjAsIDEwLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEyLjAsIGZtaW5sKDEyLjAsIG5hbigiIikpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEyLjAsIGZtaW5sKG5hbigiIiksIDEyLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxMC4wTCwgZm1pbmwoMTIuMEwsIDEwLjBMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTIuMEwsIGZtaW5sKDEyLjBMLCBuYW5sKCIiKSkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEyLjBMLCBmbWlubChuYW5sKCIiKSwgMTIuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBmbWEpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEwLjAsIGZtYSgyLjAsIDMuMCwgNC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTAuMCwgZm1hKDIuMCwgMy4wLCA0LjApKTsKIH0KIAogVEVTVChtYXRoLCBmbWFmKSB7CkBAIC02MzAsMTEgKzcyMCwxMSBAQAogfQogCiBURVNUKG1hdGgsIGZtYWwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEwLjAsIGZtYWwoMi4wLCAzLjAsIDQuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEwLjBMLCBmbWFsKDIuMEwsIDMuMEwsIDQuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBoeXBvdCkgewotICBBU1NFUlRfRkxPQVRfRVEoNS4wLCBoeXBvdCgzLjAsIDQuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDUuMCwgaHlwb3QoMy4wLCA0LjApKTsKIH0KIAogVEVTVChtYXRoLCBoeXBvdGYpIHsKQEAgLTY0MiwxMSArNzMyLDExIEBACiB9CiAKIFRFU1QobWF0aCwgaHlwb3RsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSg1LjAsIGh5cG90bCgzLjAsIDQuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDUuMEwsIGh5cG90bCgzLjBMLCA0LjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgZXJmKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjg0MjcwMDc4LCBlcmYoMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC44NDI3MDA3OTI5NDk3MTQ4OSwgZXJmKDEuMCkpOwogfQogCiBURVNUKG1hdGgsIGVyZmYpIHsKQEAgLTY1NCwxMSArNzQ0LDExIEBACiB9CiAKIFRFU1QobWF0aCwgZXJmbCkgewotICBBU1NFUlRfRkxPQVRfRVEoMC44NDI3MDA3OCwgZXJmbCgxLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjg0MjcwMDc5Mjk0OTcxNDg5TCwgZXJmbCgxLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgZXJmYykgewotICBBU1NFUlRfRkxPQVRfRVEoMC4xNTcyOTkyMSwgZXJmYygxLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjE1NzI5OTIwNzA1MDI4NTEzLCBlcmZjKDEuMCkpOwogfQogCiBURVNUKG1hdGgsIGVyZmNmKSB7CkBAIC02NjYsMjcgKzc1NiwyNyBAQAogfQogCiBURVNUKG1hdGgsIGVyZmNsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjE1NzI5OTIxLCBlcmZjbCgxLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjE1NzI5OTIwNzA1MDI4NTEzbCwgZXJmY2woMS4wTCkpOwogfQogCiBURVNUKG1hdGgsIGxyaW50KSB7CiAgIGZlc2V0cm91bmQoRkVfVVBXQVJEKTsgLy8gbHJpbnQvbHJpbnRmL2xyaW50bCBvYmV5IHRoZSByb3VuZGluZyBtb2RlLgogICBBU1NFUlRfRVEoMTIzNSwgbHJpbnQoMTIzNC4wMSkpOwogICBBU1NFUlRfRVEoMTIzNSwgbHJpbnRmKDEyMzQuMDFmKSk7Ci0gIEFTU0VSVF9FUSgxMjM1LCBscmludGwoMTIzNC4wMSkpOworICBBU1NFUlRfRVEoMTIzNSwgbHJpbnRsKDEyMzQuMDFMKSk7CiAgIGZlc2V0cm91bmQoRkVfVE9XQVJEWkVSTyk7IC8vIGxyaW50L2xyaW50Zi9scmludGwgb2JleSB0aGUgcm91bmRpbmcgbW9kZS4KICAgQVNTRVJUX0VRKDEyMzQsIGxyaW50KDEyMzQuMDEpKTsKICAgQVNTRVJUX0VRKDEyMzQsIGxyaW50ZigxMjM0LjAxZikpOwotICBBU1NFUlRfRVEoMTIzNCwgbHJpbnRsKDEyMzQuMDEpKTsKKyAgQVNTRVJUX0VRKDEyMzQsIGxyaW50bCgxMjM0LjAxTCkpOwogCiAgIGZlc2V0cm91bmQoRkVfVVBXQVJEKTsgLy8gbGxyaW50L2xscmludGYvbGxyaW50bCBvYmV5IHRoZSByb3VuZGluZyBtb2RlLgogICBBU1NFUlRfRVEoMTIzNUwsIGxscmludCgxMjM0LjAxKSk7CiAgIEFTU0VSVF9FUSgxMjM1TCwgbGxyaW50ZigxMjM0LjAxZikpOwotICBBU1NFUlRfRVEoMTIzNUwsIGxscmludGwoMTIzNC4wMSkpOworICBBU1NFUlRfRVEoMTIzNUwsIGxscmludGwoMTIzNC4wMUwpKTsKICAgZmVzZXRyb3VuZChGRV9UT1dBUkRaRVJPKTsgLy8gbGxyaW50L2xscmludGYvbGxyaW50bCBvYmV5IHRoZSByb3VuZGluZyBtb2RlLgogICBBU1NFUlRfRVEoMTIzNEwsIGxscmludCgxMjM0LjAxKSk7CiAgIEFTU0VSVF9FUSgxMjM0TCwgbGxyaW50ZigxMjM0LjAxZikpOwotICBBU1NFUlRfRVEoMTIzNEwsIGxscmludGwoMTIzNC4wMSkpOworICBBU1NFUlRfRVEoMTIzNEwsIGxscmludGwoMTIzNC4wMUwpKTsKIH0KIAogVEVTVChtYXRoLCByaW50KSB7CkBAIC03MDQsMTUgKzc5NCwxNSBAQAogICBBU1NFUlRfVFJVRSgoZmV0ZXN0ZXhjZXB0KEZFX0FMTF9FWENFUFQpICYgRkVfSU5FWEFDVCkgIT0gMCk7CiAKICAgZmVjbGVhcmV4Y2VwdChGRV9BTExfRVhDRVBUKTsgLy8gcmludC9yaW50Zi9yaW50bCBkbyBzZXQgdGhlIEZFX0lORVhBQ1QgZmxhZy4KLSAgQVNTRVJUX0VRKDEyMzQuMCwgcmludGwoMTIzNC4wKSk7CisgIEFTU0VSVF9FUSgxMjM0LjAsIHJpbnRsKDEyMzQuMEwpKTsKICAgQVNTRVJUX1RSVUUoKGZldGVzdGV4Y2VwdChGRV9BTExfRVhDRVBUKSAmIEZFX0lORVhBQ1QpID09IDApOwotICBBU1NFUlRfRVEoMTIzNS4wLCByaW50bCgxMjM0LjAxKSk7CisgIEFTU0VSVF9FUSgxMjM1LjAsIHJpbnRsKDEyMzQuMDFMKSk7CiAgIEFTU0VSVF9UUlVFKChmZXRlc3RleGNlcHQoRkVfQUxMX0VYQ0VQVCkgJiBGRV9JTkVYQUNUKSAhPSAwKTsKIAogICBmZXNldHJvdW5kKEZFX1RPV0FSRFpFUk8pOyAvLyByaW50L3JpbnRmIG9iZXkgdGhlIHJvdW5kaW5nIG1vZGUuCiAgIEFTU0VSVF9FUSgxMjM0LjAsIHJpbnQoMTIzNC4wMSkpOwogICBBU1NFUlRfRVEoMTIzNC4wZiwgcmludGYoMTIzNC4wMWYpKTsKLSAgQVNTRVJUX0VRKDEyMzQuMCwgcmludGwoMTIzNC4wMSkpOworICBBU1NFUlRfRVEoMTIzNC4wLCByaW50bCgxMjM0LjAxTCkpOwogfQogCiBURVNUKG1hdGgsIG5lYXJieWludCkgewpAQCAtNzMwLDI5ICs4MjAsMjkgQEAKICAgQVNTRVJUX1RSVUUoKGZldGVzdGV4Y2VwdChGRV9BTExfRVhDRVBUKSAmIEZFX0lORVhBQ1QpID09IDApOwogCiAgIGZlY2xlYXJleGNlcHQoRkVfQUxMX0VYQ0VQVCk7IC8vIG5lYXJieWludC9uZWFyYnlpbnRmL25lYXJieWludGwgZG9uJ3Qgc2V0IHRoZSBGRV9JTkVYQUNUIGZsYWcuCi0gIEFTU0VSVF9FUSgxMjM0LjAsIG5lYXJieWludGwoMTIzNC4wKSk7CisgIEFTU0VSVF9FUSgxMjM0LjAsIG5lYXJieWludGwoMTIzNC4wTCkpOwogICBBU1NFUlRfVFJVRSgoZmV0ZXN0ZXhjZXB0KEZFX0FMTF9FWENFUFQpICYgRkVfSU5FWEFDVCkgPT0gMCk7Ci0gIEFTU0VSVF9FUSgxMjM1LjAsIG5lYXJieWludGwoMTIzNC4wMSkpOworICBBU1NFUlRfRVEoMTIzNS4wLCBuZWFyYnlpbnRsKDEyMzQuMDFMKSk7CiAgIEFTU0VSVF9UUlVFKChmZXRlc3RleGNlcHQoRkVfQUxMX0VYQ0VQVCkgJiBGRV9JTkVYQUNUKSA9PSAwKTsKIAogICBmZXNldHJvdW5kKEZFX1RPV0FSRFpFUk8pOyAvLyBuZWFyYnlpbnQvbmVhcmJ5aW50Zi9uZWFyYnlpbnRsIG9iZXkgdGhlIHJvdW5kaW5nIG1vZGUuCiAgIEFTU0VSVF9FUSgxMjM0LjAsIG5lYXJieWludCgxMjM0LjAxKSk7CiAgIEFTU0VSVF9FUSgxMjM0LjBmLCBuZWFyYnlpbnRmKDEyMzQuMDFmKSk7Ci0gIEFTU0VSVF9FUSgxMjM0LjAsIG5lYXJieWludGwoMTIzNC4wMSkpOworICBBU1NFUlRfRVEoMTIzNC4wLCBuZWFyYnlpbnRsKDEyMzQuMDFMKSk7CiB9CiAKIFRFU1QobWF0aCwgbHJvdW5kKSB7CiAgIGZlc2V0cm91bmQoRkVfVVBXQVJEKTsgLy8gbHJvdW5kIGlnbm9yZXMgdGhlIHJvdW5kaW5nIG1vZGUuCiAgIEFTU0VSVF9FUSgxMjM0LCBscm91bmQoMTIzNC4wMSkpOwogICBBU1NFUlRfRVEoMTIzNCwgbHJvdW5kZigxMjM0LjAxZikpOwotICBBU1NFUlRfRVEoMTIzNCwgbHJvdW5kbCgxMjM0LjAxKSk7CisgIEFTU0VSVF9FUSgxMjM0LCBscm91bmRsKDEyMzQuMDFMKSk7CiB9CiAKIFRFU1QobWF0aCwgbGxyb3VuZCkgewogICBmZXNldHJvdW5kKEZFX1VQV0FSRCk7IC8vIGxscm91bmQgaWdub3JlcyB0aGUgcm91bmRpbmcgbW9kZS4KICAgQVNTRVJUX0VRKDEyMzRMLCBsbHJvdW5kKDEyMzQuMDEpKTsKICAgQVNTRVJUX0VRKDEyMzRMLCBsbHJvdW5kZigxMjM0LjAxZikpOwotICBBU1NFUlRfRVEoMTIzNEwsIGxscm91bmRsKDEyMzQuMDEpKTsKKyAgQVNTRVJUX0VRKDEyMzRMLCBsbHJvdW5kbCgxMjM0LjAxTCkpOwogfQogCiBURVNUKG1hdGgsIGlsb2diKSB7CkBAIC03NzIsMTEgKzg2MiwxMSBAQAogfQogCiBURVNUKG1hdGgsIGlsb2dibCkgewotICBBU1NFUlRfRVEoRlBfSUxPR0IwLCBpbG9nYmwoMC4wKSk7CisgIEFTU0VSVF9FUShGUF9JTE9HQjAsIGlsb2dibCgwLjBMKSk7CiAgIEFTU0VSVF9FUShGUF9JTE9HQk5BTiwgaWxvZ2JsKG5hbmwoIiIpKSk7CiAgIEFTU0VSVF9FUShJTlRfTUFYLCBpbG9nYmwoSFVHRV9WQUxMKSk7Ci0gIEFTU0VSVF9FUSgwLCBpbG9nYmwoMS4wKSk7Ci0gIEFTU0VSVF9FUSgzLCBpbG9nYmwoMTAuMCkpOworICBBU1NFUlRfRVEoMEwsIGlsb2dibCgxLjBMKSk7CisgIEFTU0VSVF9FUSgzTCwgaWxvZ2JsKDEwLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgbG9nYikgewpAQCAtNzk2LDE4ICs4ODYsMTggQEAKIH0KIAogVEVTVChtYXRoLCBsb2dibCkgewotICBBU1NFUlRfRVEoLUhVR0VfVkFMLCBsb2dibCgwLjApKTsKKyAgQVNTRVJUX0VRKC1IVUdFX1ZBTCwgbG9nYmwoMC4wTCkpOwogICBBU1NFUlRfVFJVRShpc25hbihsb2dibChuYW5sKCIiKSkpKTsKICAgQVNTRVJUX1RSVUUoaXNpbmYobG9nYmwoSFVHRV9WQUxMKSkpOwotICBBU1NFUlRfRVEoMC4wLCBsb2dibCgxLjApKTsKLSAgQVNTRVJUX0VRKDMuMCwgbG9nYmwoMTAuMCkpOworICBBU1NFUlRfRVEoMC4wTCwgbG9nYmwoMS4wTCkpOworICBBU1NFUlRfRVEoMy4wTCwgbG9nYmwoMTAuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBsb2cxcCkgewogICBBU1NFUlRfRVEoLUhVR0VfVkFMLCBsb2cxcCgtMS4wKSk7CiAgIEFTU0VSVF9UUlVFKGlzbmFuKGxvZzFwKG5hbigiIikpKSk7CiAgIEFTU0VSVF9UUlVFKGlzaW5mKGxvZzFwKEhVR0VfVkFMKSkpOwotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBsb2cxcChNX0UgLSAxLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjAsIGxvZzFwKE1fRSAtIDEuMCkpOwogfQogCiBURVNUKG1hdGgsIGxvZzFwZikgewpAQCAtODE4LDE2ICs5MDgsMTYgQEAKIH0KIAogVEVTVChtYXRoLCBsb2cxcGwpIHsKLSAgQVNTRVJUX0VRKC1IVUdFX1ZBTEwsIGxvZzFwbCgtMS4wKSk7CisgIEFTU0VSVF9FUSgtSFVHRV9WQUxMLCBsb2cxcGwoLTEuMEwpKTsKICAgQVNTRVJUX1RSVUUoaXNuYW4obG9nMXBsKG5hbmwoIiIpKSkpOwogICBBU1NFUlRfVFJVRShpc2luZihsb2cxcGwoSFVHRV9WQUxMKSkpOwotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBsb2cxcGwoTV9FIC0gMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4wTCwgbG9nMXBsKE1fRSAtIDEuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBmZGltKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGZkaW0oMS4wLCAxLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgZmRpbSgyLjAsIDEuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBmZGltKDEuMCwgMi4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCBmZGltKDEuMCwgMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4wLCBmZGltKDIuMCwgMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCBmZGltKDEuMCwgMi4wKSk7CiB9CiAKIFRFU1QobWF0aCwgZmRpbWYpIHsKQEAgLTgzNywxOSArOTI3LDE5IEBACiB9CiAKIFRFU1QobWF0aCwgZmRpbWwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgZmRpbWwoMS4wLCAxLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgZmRpbWwoMi4wLCAxLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgZmRpbWwoMS4wLCAyLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjBMLCBmZGltbCgxLjBMLCAxLjBMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4wTCwgZmRpbWwoMi4wTCwgMS4wTCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMEwsIGZkaW1sKDEuMEwsIDIuMEwpKTsKIH0KIAogVEVTVChtYXRoLCByb3VuZCkgewogICBmZXNldHJvdW5kKEZFX1RPV0FSRFpFUk8pOyAvLyByb3VuZCBpZ25vcmVzIHRoZSByb3VuZGluZyBtb2RlIGFuZCBhbHdheXMgcm91bmRzIGF3YXkgZnJvbSB6ZXJvLgotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCByb3VuZCgwLjUpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKC0xLjAsIHJvdW5kKC0wLjUpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgcm91bmQoMC4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgtMC4wLCByb3VuZCgtMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4wLCByb3VuZCgwLjUpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgtMS4wLCByb3VuZCgtMC41KSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCByb3VuZCgwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgtMC4wLCByb3VuZCgtMC4wKSk7CiAgIEFTU0VSVF9UUlVFKGlzbmFuKHJvdW5kKG5hbigiIikpKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUShIVUdFX1ZBTCwgcm91bmQoSFVHRV9WQUwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUShIVUdFX1ZBTCwgcm91bmQoSFVHRV9WQUwpKTsKIH0KIAogVEVTVChtYXRoLCByb3VuZGYpIHsKQEAgLTg2NCwyMiArOTU0LDIyIEBACiAKIFRFU1QobWF0aCwgcm91bmRsKSB7CiAgIGZlc2V0cm91bmQoRkVfVE9XQVJEWkVSTyk7IC8vIHJvdW5kbCBpZ25vcmVzIHRoZSByb3VuZGluZyBtb2RlIGFuZCBhbHdheXMgcm91bmRzIGF3YXkgZnJvbSB6ZXJvLgotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCByb3VuZGwoMC41KSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgtMS4wLCByb3VuZGwoLTAuNSkpOwotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCByb3VuZGwoMC4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgtMC4wLCByb3VuZGwoLTAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMEwsIHJvdW5kbCgwLjVMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoLTEuMEwsIHJvdW5kbCgtMC41TCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMEwsIHJvdW5kbCgwLjBMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoLTAuMEwsIHJvdW5kbCgtMC4wTCkpOwogICBBU1NFUlRfVFJVRShpc25hbihyb3VuZGwobmFubCgiIikpKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUShIVUdFX1ZBTEwsIHJvdW5kbChIVUdFX1ZBTEwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUShIVUdFX1ZBTEwsIHJvdW5kbChIVUdFX1ZBTEwpKTsKIH0KIAogVEVTVChtYXRoLCB0cnVuYykgewogICBmZXNldHJvdW5kKEZFX1VQV0FSRCk7IC8vIHRydW5jIGlnbm9yZXMgdGhlIHJvdW5kaW5nIG1vZGUgYW5kIGFsd2F5cyByb3VuZHMgdG93YXJkIHplcm8uCi0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIHRydW5jKDEuNSkpOwotICBBU1NFUlRfRkxPQVRfRVEoLTEuMCwgdHJ1bmMoLTEuNSkpOwotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCB0cnVuYygwLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKC0wLjAsIHRydW5jKC0wLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjAsIHRydW5jKDEuNSkpOworICBBU1NFUlRfRE9VQkxFX0VRKC0xLjAsIHRydW5jKC0xLjUpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjAsIHRydW5jKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKC0wLjAsIHRydW5jKC0wLjApKTsKICAgQVNTRVJUX1RSVUUoaXNuYW4odHJ1bmMobmFuKCIiKSkpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKEhVR0VfVkFMLCB0cnVuYyhIVUdFX1ZBTCkpOworICBBU1NFUlRfRE9VQkxFX0VRKEhVR0VfVkFMLCB0cnVuYyhIVUdFX1ZBTCkpOwogfQogCiBURVNUKG1hdGgsIHRydW5jZikgewpAQCAtODk0LDE4ICs5ODQsMTggQEAKIAogVEVTVChtYXRoLCB0cnVuY2wpIHsKICAgZmVzZXRyb3VuZChGRV9VUFdBUkQpOyAvLyB0cnVuY2wgaWdub3JlcyB0aGUgcm91bmRpbmcgbW9kZSBhbmQgYWx3YXlzIHJvdW5kcyB0b3dhcmQgemVyby4KLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgdHJ1bmNsKDEuNSkpOwotICBBU1NFUlRfRkxPQVRfRVEoLTEuMCwgdHJ1bmNsKC0xLjUpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgdHJ1bmNsKDAuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoLTAuMCwgdHJ1bmNsKC0wLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjBMLCB0cnVuY2woMS41TCkpOworICBBU1NFUlRfRE9VQkxFX0VRKC0xLjBMLCB0cnVuY2woLTEuNUwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjBMLCB0cnVuY2woMC4wTCkpOworICBBU1NFUlRfRE9VQkxFX0VRKC0wLjBMLCB0cnVuY2woLTAuMEwpKTsKICAgQVNTRVJUX1RSVUUoaXNuYW4odHJ1bmNsKG5hbigiIikpKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUShIVUdFX1ZBTEwsIHRydW5jbChIVUdFX1ZBTEwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUShIVUdFX1ZBTEwsIHRydW5jbChIVUdFX1ZBTEwpKTsKIH0KIAogVEVTVChtYXRoLCBuZXh0YWZ0ZXIpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgbmV4dGFmdGVyKDAuMCwgMC4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjQwMTI5ODVlLTQ1LCBuZXh0YWZ0ZXIoMC4wLCAxLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgbmV4dGFmdGVyKDAuMCwgLTEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgbmV4dGFmdGVyKDAuMCwgMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQsIG5leHRhZnRlcigwLjAsIDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgbmV4dGFmdGVyKDAuMCwgLTEuMCkpOwogfQogCiBURVNUKG1hdGgsIG5leHRhZnRlcmYpIHsKQEAgLTkxNSwyMCArMTAwNSw0MCBAQAogfQogCiBURVNUKG1hdGgsIG5leHRhZnRlcmwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgbmV4dGFmdGVybCgwLjAsIDAuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoMS40MDEyOTg1ZS00NSwgbmV4dGFmdGVybCgwLjAsIDEuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBuZXh0YWZ0ZXJsKDAuMCwgLTEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMEwsIG5leHRhZnRlcmwoMC4wTCwgMC4wTCkpOworICAvLyBVc2UgYSBydW50aW1lIHZhbHVlIHRvIGFjY29tb2RhdGUgdGhlIGNhc2Ugd2hlbgorICAvLyBzaXplb2YoZG91YmxlKSA9PSBzaXplb2YobG9uZyBkb3VibGUpCisgIGxvbmcgZG91YmxlIHNtYWxsZXN0X3Bvc2l0aXZlID0gbGRleHBsKDEuMEwsIExEQkxfTUlOX0VYUCAtIExEQkxfTUFOVF9ESUcpOworICBBU1NFUlRfRE9VQkxFX0VRKHNtYWxsZXN0X3Bvc2l0aXZlLCBuZXh0YWZ0ZXJsKDAuMEwsIDEuMEwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjBMLCBuZXh0YWZ0ZXJsKDAuMEwsIC0xLjBMKSk7CiB9CiAKLS8vIFRPRE86IG5leHR0b3dhcmQKLS8vIFRPRE86IG5leHR0b3dhcmRmCi0vLyBUT0RPOiBuZXh0dG93YXJkbAorVEVTVChtYXRoLCBuZXh0dG93YXJkKSB7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCBuZXh0dG93YXJkKDAuMCwgMC4wTCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDQuOTQwNjU2NDU4NDEyNDY1NGUtMzI0LCBuZXh0dG93YXJkKDAuMCwgMS4wTCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgbmV4dHRvd2FyZCgwLjAsIC0xLjBMKSk7Cit9CisKK1RFU1QobWF0aCwgbmV4dHRvd2FyZGYpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuMGYsIG5leHR0b3dhcmRmKDAuMGYsIDAuMEwpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEuNDAxMjk4NWUtNDVmLCBuZXh0dG93YXJkZigwLjBmLCAxLjBMKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjBmLCBuZXh0dG93YXJkZigwLjBmLCAtMS4wTCkpOworfQorCitURVNUKG1hdGgsIG5leHR0b3dhcmRsKSB7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wTCwgbmV4dHRvd2FyZGwoMC4wTCwgMC4wTCkpOworICAvLyBVc2UgYSBydW50aW1lIHZhbHVlIHRvIGFjY29tb2RhdGUgdGhlIGNhc2Ugd2hlbgorICAvLyBzaXplb2YoZG91YmxlKSA9PSBzaXplb2YobG9uZyBkb3VibGUpCisgIGxvbmcgZG91YmxlIHNtYWxsZXN0X3Bvc2l0aXZlID0gbGRleHBsKDEuMEwsIExEQkxfTUlOX0VYUCAtIExEQkxfTUFOVF9ESUcpOworICBBU1NFUlRfRE9VQkxFX0VRKHNtYWxsZXN0X3Bvc2l0aXZlLCBuZXh0dG93YXJkbCgwLjBMLCAxLjBMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wTCwgbmV4dHRvd2FyZGwoMC4wTCwgLTEuMEwpKTsKK30KIAogVEVTVChtYXRoLCBjb3B5c2lnbikgewotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBjb3B5c2lnbigwLjAsIDEuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoLTAuMCwgY29weXNpZ24oMC4wLCAtMS4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgyLjAsIGNvcHlzaWduKDIuMCwgMS4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgtMi4wLCBjb3B5c2lnbigyLjAsIC0xLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjAsIGNvcHlzaWduKDAuMCwgMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoLTAuMCwgY29weXNpZ24oMC4wLCAtMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMi4wLCBjb3B5c2lnbigyLjAsIDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKC0yLjAsIGNvcHlzaWduKDIuMCwgLTEuMCkpOwogfQogCiBURVNUKG1hdGgsIGNvcHlzaWduZikgewpAQCAtOTM5LDE2ICsxMDQ5LDE2IEBACiB9CiAKIFRFU1QobWF0aCwgY29weXNpZ25sKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjBmLCBjb3B5c2lnbmwoMC4wLCAxLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKC0wLjBmLCBjb3B5c2lnbmwoMC4wLCAtMS4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgyLjBmLCBjb3B5c2lnbmwoMi4wLCAxLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKC0yLjBmLCBjb3B5c2lnbmwoMi4wLCAtMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wTCwgY29weXNpZ25sKDAuMEwsIDEuMEwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgtMC4wTCwgY29weXNpZ25sKDAuMEwsIC0xLjBMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMi4wTCwgY29weXNpZ25sKDIuMEwsIDEuMEwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgtMi4wTCwgY29weXNpZ25sKDIuMEwsIC0xLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgc2lnbmlmaWNhbmQpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgc2lnbmlmaWNhbmQoMC4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjIsIHNpZ25pZmljYW5kKDEuMikpOwotICBBU1NFUlRfRkxPQVRfRVEoMS41Mzc1LCBzaWduaWZpY2FuZCgxMi4zKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCBzaWduaWZpY2FuZCgwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjIsIHNpZ25pZmljYW5kKDEuMikpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuNTM3NSwgc2lnbmlmaWNhbmQoMTIuMykpOwogfQogCiBURVNUKG1hdGgsIHNpZ25pZmljYW5kZikgewpAQCAtOTU3LDE2ICsxMDY3LDE0IEBACiAgIEFTU0VSVF9GTE9BVF9FUSgxLjUzNzVmLCBzaWduaWZpY2FuZGYoMTIuM2YpKTsKIH0KIAotZXh0ZXJuICJDIiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwobG9uZyBkb3VibGUpOyAvLyBCU0QncyA8bWF0aC5oPiBkb2Vzbid0IGRlY2xhcmUgdGhpcy4KLQogVEVTVChtYXRoLCBzaWduaWZpY2FuZGwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgc2lnbmlmaWNhbmRsKDAuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoMS4yLCBzaWduaWZpY2FuZGwoMS4yKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjUzNzUsIHNpZ25pZmljYW5kbCgxMi4zKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wTCwgc2lnbmlmaWNhbmRsKDAuMEwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjJMLCBzaWduaWZpY2FuZGwoMS4yTCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuNTM3NUwsIHNpZ25pZmljYW5kbCgxMi4zTCkpOwogfQogCiBURVNUKG1hdGgsIHNjYWxiKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBzY2FsYigzLjAsIDIuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEyLjAsIHNjYWxiKDMuMCwgMi4wKSk7CiB9CiAKIFRFU1QobWF0aCwgc2NhbGJmKSB7CkBAIC05NzQsNyArMTA4Miw3IEBACiB9CiAKIFRFU1QobWF0aCwgc2NhbGJsbikgewotICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgc2NhbGJsbigzLjAsIDJMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTIuMCwgc2NhbGJsbigzLjAsIDJMKSk7CiB9CiAKIFRFU1QobWF0aCwgc2NhbGJsbmYpIHsKQEAgLTk4MiwxMSArMTA5MCwxMSBAQAogfQogCiBURVNUKG1hdGgsIHNjYWxibG5sKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBzY2FsYmxubCgzLjAsIDJMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTIuMEwsIHNjYWxibG5sKDMuMEwsIDJMKSk7CiB9CiAKIFRFU1QobWF0aCwgc2NhbGJuKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBzY2FsYm4oMy4wLCAyKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTIuMCwgc2NhbGJuKDMuMCwgMikpOwogfQogCiBURVNUKG1hdGgsIHNjYWxibmYpIHsKQEAgLTk5NCwzNSArMTEwMiwzOSBAQAogfQogCiBURVNUKG1hdGgsIHNjYWxibmwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEyLjAsIHNjYWxibmwoMy4wLCAyKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTIuMEwsIHNjYWxibmwoMy4wTCwgMikpOwogfQogCiBURVNUKG1hdGgsIGdhbW1hKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUShsb2coMjQuMCksIGdhbW1hKDUuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKGxvZygyNC4wKSwgZ2FtbWEoNS4wKSk7CiB9CiAKIFRFU1QobWF0aCwgZ2FtbWFmKSB7CiAgIEFTU0VSVF9GTE9BVF9FUShsb2dmKDI0LjBmKSwgZ2FtbWFmKDUuMGYpKTsKIH0KIAotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKIFRFU1QobWF0aCwgZ2FtbWFfcikgewotICBpbnQgc2lnbjsKLSAgQVNTRVJUX0ZMT0FUX0VRKGxvZygyNC4wKSwgZ2FtbWFfcig1LjAsICZzaWduKSk7Ci0gIEFTU0VSVF9FUSgxLCBzaWduKTsKLX0KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBpbnQgc2lnbjsKKyAgQVNTRVJUX0RPVUJMRV9FUShsb2coMjQuMCksIGdhbW1hX3IoNS4wLCAmc2lnbikpOworICBBU1NFUlRfRVEoMSwgc2lnbik7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KK30KKwogVEVTVChtYXRoLCBnYW1tYWZfcikgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgaW50IHNpZ247CiAgIEFTU0VSVF9GTE9BVF9FUShsb2dmKDI0LjBmKSwgZ2FtbWFmX3IoNS4wZiwgJnNpZ24pKTsKICAgQVNTRVJUX0VRKDEsIHNpZ24pOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9Ci0jZW5kaWYKIAogVEVTVChtYXRoLCBsZ2FtbWEpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKGxvZygyNC4wKSwgbGdhbW1hKDUuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKGxvZygyNC4wKSwgbGdhbW1hKDUuMCkpOwogfQogCiBURVNUKG1hdGgsIGxnYW1tYWYpIHsKQEAgLTEwMzAsMTIgKzExNDIsMTIgQEAKIH0KIAogVEVTVChtYXRoLCBsZ2FtbWFsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUShsb2dsKDI0LjApLCBsZ2FtbWFsKDUuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKGxvZ2woMjQuMEwpLCBsZ2FtbWFsKDUuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBsZ2FtbWFfcikgewogICBpbnQgc2lnbjsKLSAgQVNTRVJUX0ZMT0FUX0VRKGxvZygyNC4wKSwgbGdhbW1hX3IoNS4wLCAmc2lnbikpOworICBBU1NFUlRfRE9VQkxFX0VRKGxvZygyNC4wKSwgbGdhbW1hX3IoNS4wLCAmc2lnbikpOwogICBBU1NFUlRfRVEoMSwgc2lnbik7CiB9CiAKQEAgLTEwNDYsNyArMTE1OCw3IEBACiB9CiAKIFRFU1QobWF0aCwgdGdhbW1hKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgyNC4wLCB0Z2FtbWEoNS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMjQuMCwgdGdhbW1hKDUuMCkpOwogfQogCiBURVNUKG1hdGgsIHRnYW1tYWYpIHsKQEAgLTEwNTQsMTIgKzExNjYsMTIgQEAKIH0KIAogVEVTVChtYXRoLCB0Z2FtbWFsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgyNC4wLCB0Z2FtbWFsKDUuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDI0LjBMLCB0Z2FtbWFsKDUuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBqMCkgewotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBqMCgwLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuNzY1MTk3NjksIGowKDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMCwgajAoMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC43NjUxOTc2ODY1NTc5NjY2MSwgajAoMS4wKSk7CiB9CiAKIFRFU1QobWF0aCwgajBmKSB7CkBAIC0xMDY4LDggKzExODAsOCBAQAogfQogCiBURVNUKG1hdGgsIGoxKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGoxKDAuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoMC40NDAwNTA1NywgajEoMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCBqMSgwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjQ0MDA1MDU4NTc0NDkzMzU1LCBqMSgxLjApKTsKIH0KIAogVEVTVChtYXRoLCBqMWYpIHsKQEAgLTEwNzgsOCArMTE5MCw4IEBACiB9CiAKIFRFU1QobWF0aCwgam4pIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgam4oNCwgMC4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAwMjQ3NjYzODksIGpuKDQsIDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgam4oNCwgMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wMDI0NzY2Mzg5NjQxMDk5NTUzLCBqbig0LCAxLjApKTsKIH0KIAogVEVTVChtYXRoLCBqbmYpIHsKQEAgLTEwODgsOCArMTIwMCw4IEBACiB9CiAKIFRFU1QobWF0aCwgeTApIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKC1IVUdFX1ZBTCwgeTAoMC4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjA4ODI1Njk2MywgeTAoMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoLUhVR0VfVkFMLCB5MCgwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjA4ODI1Njk2NDIxNTY3Njk3LCB5MCgxLjApKTsKIH0KIAogVEVTVChtYXRoLCB5MGYpIHsKQEAgLTEwOTgsOCArMTIxMCw4IEBACiB9CiAKIFRFU1QobWF0aCwgeTEpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKC1IVUdFX1ZBTCwgeTEoMC4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgtMC43ODEyMTI4MSwgeTEoMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoLUhVR0VfVkFMLCB5MSgwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgtMC43ODEyMTI4MjEzMDAyODg2OCwgeTEoMS4wKSk7CiB9CiAKIFRFU1QobWF0aCwgeTFmKSB7CkBAIC0xMTA4LDggKzEyMjAsOCBAQAogfQogCiBURVNUKG1hdGgsIHluKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgtSFVHRV9WQUwsIHluKDQsIDAuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoLTMzLjI3ODQyMywgeW4oNCwgMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoLUhVR0VfVkFMLCB5big0LCAwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgtMzMuMjc4NDIzMDI4OTcyMTE0LCB5big0LCAxLjApKTsKIH0KIAogVEVTVChtYXRoLCB5bmYpIHsKQEAgLTExMjAsNyArMTIzMiw3IEBACiBURVNUKG1hdGgsIGZyZXhwKSB7CiAgIGludCBleHA7CiAgIGRvdWJsZSBkciA9IGZyZXhwKDEwMjQuMCwgJmV4cCk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMDI0LjAsIHNjYWxibihkciwgZXhwKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTAyNC4wLCBzY2FsYm4oZHIsIGV4cCkpOwogfQogCiBURVNUKG1hdGgsIGZyZXhwZikgewpAQCAtMTEzMSwzNiArMTI0MywzNiBAQAogCiBURVNUKG1hdGgsIGZyZXhwbCkgewogICBpbnQgZXhwOwotICBsb25nIGRvdWJsZSBsZHIgPSBmcmV4cGwoMTAyNC4wLCAmZXhwKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEwMjQuMCwgc2NhbGJubChsZHIsIGV4cCkpOworICBsb25nIGRvdWJsZSBsZHIgPSBmcmV4cGwoMTAyNC4wTCwgJmV4cCk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTAyNC4wTCwgc2NhbGJubChsZHIsIGV4cCkpOwogfQogCiBURVNUKG1hdGgsIG1vZGYpIHsKICAgZG91YmxlIGRpOwotICBkb3VibGUgZGYgPSBtb2RmKDEyMy40NTYsICZkaSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMjMuMCwgZGkpOwotICBBU1NFUlRfRkxPQVRfRVEoMC40NTYsIGRmKTsKKyAgZG91YmxlIGRmID0gbW9kZigxMjMuNzUsICZkaSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTIzLjAsIGRpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjc1LCBkZik7CiB9CiAKIFRFU1QobWF0aCwgbW9kZmYpIHsKICAgZmxvYXQgZmk7Ci0gIGZsb2F0IGZmID0gbW9kZmYoMTIzLjQ1NmYsICZmaSk7CisgIGZsb2F0IGZmID0gbW9kZmYoMTIzLjc1ZiwgJmZpKTsKICAgQVNTRVJUX0ZMT0FUX0VRKDEyMy4wZiwgZmkpOwotICBBU1NFUlRfRkxPQVRfRVEoMC40NTYwMDEyOGYsIGZmKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuNzVmLCBmZik7CiB9CiAKIFRFU1QobWF0aCwgbW9kZmwpIHsKICAgbG9uZyBkb3VibGUgbGRpOwotICBsb25nIGRvdWJsZSBsZGYgPSBtb2RmbCgxMjMuNDU2LCAmbGRpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEyMy4wLCBsZGkpOwotICBBU1NFUlRfRkxPQVRfRVEoMC40NTYsIGxkZik7CisgIGxvbmcgZG91YmxlIGxkZiA9IG1vZGZsKDEyMy43NUwsICZsZGkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEyMy4wTCwgbGRpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjc1TCwgbGRmKTsKIH0KIAogVEVTVChtYXRoLCByZW1xdW8pIHsKICAgaW50IHE7CiAgIGRvdWJsZSBkID0gcmVtcXVvKDEzLjAsIDQuMCwgJnEpOwogICBBU1NFUlRfRVEoMywgcSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGQpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMCwgZCk7CiB9CiAKIFRFU1QobWF0aCwgcmVtcXVvZikgewpAQCAtMTE3Miw5ICsxMjg0LDkgQEAKIAogVEVTVChtYXRoLCByZW1xdW9sKSB7CiAgIGludCBxOwotICBsb25nIGRvdWJsZSBsZCA9IHJlbXF1b2woMTMuMCwgNC4wLCAmcSk7Ci0gIEFTU0VSVF9FUSgzLCBxKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgbGQpOworICBsb25nIGRvdWJsZSBsZCA9IHJlbXF1b2woMTMuMEwsIDQuMEwsICZxKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgzTCwgcSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4wTCwgbGQpOwogfQogCiAvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2RldGFpbD9pZD02Njk3CkBAIC0xMTgzLDMgKzEyOTUsMTggQEAKICAgZmxvYXQgZnIgPSBmcmV4cGYoMTQuMWYsICZleHApOwogICBBU1NFUlRfRkxPQVRfRVEoMTQuMWYsIHNjYWxibmYoZnIsIGV4cCkpOwogfQorCitURVNUKG1hdGgsIGV4cDJfU1RSSUNUX0FMSUdOX09wZW5CU0RfYnVnKSB7CisgIC8vIE9wZW5CU0QveDg2J3MgbGlibSBoYWQgYSBidWcgaGVyZSwgYnV0IGl0IHdhcyBhbHJlYWR5IGZpeGVkIGluIEZyZWVCU0Q6CisgIC8vIGh0dHA6Ly9zdm53ZWIuRnJlZUJTRC5vcmcvYmFzZS9oZWFkL2xpYi9tc3VuL3NyYy9tYXRoX3ByaXZhdGUuaD9yZXZpc2lvbj0yNDA4Mjcmdmlldz1tYXJrdXAKKyAgQVNTRVJUX0RPVUJMRV9FUSg1LjAsIGV4cDIobG9nMig1KSkpOworICBBU1NFUlRfRkxPQVRfRVEoNS4wZiwgZXhwMmYobG9nMmYoNSkpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSg1LjBMLCBleHAybChsb2cybCg1KSkpOworfQorCitURVNUKG1hdGgsIG5leHRhZnRlcmxfT3BlbkJTRF9idWcpIHsKKyAgLy8gT3BlbkJTRC94ODYncyBsaWJtIGhhZCBhIGJ1ZyBoZXJlLgorICBBU1NFUlRfVFJVRShuZXh0YWZ0ZXIoMS4wLCAwLjApIC0gMS4wIDwgMC4wKTsKKyAgQVNTRVJUX1RSVUUobmV4dGFmdGVyZigxLjBmLCAwLjBmKSAtIDEuMGYgPCAwLjBmKTsKKyAgQVNTRVJUX1RSVUUobmV4dGFmdGVybCgxLjBMLCAwLjBMKSAtIDEuMEwgPCAwLjBMKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21udGVudF90ZXN0LmNwcCBiL3Rlc3RzL21udGVudF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzdjYjUyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbW50ZW50X3Rlc3QuY3BwCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPG1udGVudC5oPgorCitURVNUKG1udGVudCwgbW50ZW50X3Ntb2tlKSB7CisgIEZJTEUqIGZwID0gc2V0bW50ZW50KCIvbm8vbW50L3RhYi9vbi9hbmRyb2lkIiwgInIiKTsKKyAgQVNTRVJUX1RSVUUoZnAgPT0gTlVMTCk7CisKKyNpZiBfX0JJT05JQ19fIC8vIGdsaWJjIGRvZXNuJ3QgbGV0IHlvdSBjYWxsIGdldG1udGVudC9nZXRtbnRlbnRfciB3aXRoIGEgTlVMTCBGSUxFKi4KKyAgQVNTRVJUX1RSVUUoZ2V0bW50ZW50KGZwKSA9PSBOVUxMKTsKKworICBzdHJ1Y3QgbW50ZW50IG1idWY7CisgIGNoYXIgY2J1ZlszMl07CisgIEFTU0VSVF9UUlVFKGdldG1udGVudF9yKGZwLCAmbWJ1ZiwgY2J1Ziwgc2l6ZW9mKGNidWYpKSA9PSBOVUxMKTsKKyNlbmRpZgorCisgIEFTU0VSVF9FUSgxLCBlbmRtbnRlbnQoZnApKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3B0aHJlYWRfdGVzdC5jcHAgYi90ZXN0cy9wdGhyZWFkX3Rlc3QuY3BwCmluZGV4IDMzMzE3ZDkuLjRhN2M2YmQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3B0aHJlYWRfdGVzdC5jcHAKKysrIGIvdGVzdHMvcHRocmVhZF90ZXN0LmNwcApAQCAtMTksMTAgKzE5LDE3IEBACiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgogI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCisjaW5jbHVkZSAicHJpdmF0ZS9TY29wZUd1YXJkLmgiCisjaW5jbHVkZSAiU2NvcGVkU2lnbmFsSGFuZGxlci5oIgorCiBURVNUKHB0aHJlYWQsIHB0aHJlYWRfa2V5X2NyZWF0ZSkgewogICBwdGhyZWFkX2tleV90IGtleTsKICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfa2V5X2NyZWF0ZSgma2V5LCBOVUxMKSk7CkBAIC0zMSw4ICszOCw4IEBACiAgIEFTU0VSVF9FUShFSU5WQUwsIHB0aHJlYWRfa2V5X2RlbGV0ZShrZXkpKTsKIH0KIAotI2lmICFkZWZpbmVkKF9fR0xJQkNfXykgLy8gZ2xpYmMgdXNlcyBrZXlzIGludGVybmFsbHkgdGhhdCBpdHMgc3lzY29uZiB2YWx1ZSBkb2Vzbid0IGFjY291bnQgZm9yLgogVEVTVChwdGhyZWFkLCBwdGhyZWFkX2tleV9jcmVhdGVfbG90cykgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykgLy8gZ2xpYmMgdXNlcyBrZXlzIGludGVybmFsbHkgdGhhdCBpdHMgc3lzY29uZiB2YWx1ZSBkb2Vzbid0IGFjY291bnQgZm9yLgogICAvLyBQT1NJWCBzYXlzIFBUSFJFQURfS0VZU19NQVggc2hvdWxkIGJlIGF0IGxlYXN0IDEyOC4KICAgQVNTRVJUX0dFKFBUSFJFQURfS0VZU19NQVgsIDEyOCk7CiAKQEAgLTU5LDggKzY2LDc0IEBACiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgewogICAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2tleV9kZWxldGUoa2V5c1tpXSkpOwogICB9CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KLSNlbmRpZgorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfa2V5X2RlbGV0ZSkgeworICB2b2lkKiBleHBlY3RlZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDEyMzQpOworICBwdGhyZWFkX2tleV90IGtleTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfa2V5X2NyZWF0ZSgma2V5LCBOVUxMKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3NldHNwZWNpZmljKGtleSwgZXhwZWN0ZWQpKTsKKyAgQVNTRVJUX0VRKGV4cGVjdGVkLCBwdGhyZWFkX2dldHNwZWNpZmljKGtleSkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9rZXlfZGVsZXRlKGtleSkpOworICAvLyBBZnRlciBkZWxldGlvbiwgcHRocmVhZF9nZXRzcGVjaWZpYyByZXR1cm5zIE5VTEwuCisgIEFTU0VSVF9FUShOVUxMLCBwdGhyZWFkX2dldHNwZWNpZmljKGtleSkpOworICAvLyBBbmQgeW91IGNhbid0IHVzZSBwdGhyZWFkX3NldHNwZWNpZmljIHdpdGggdGhlIGRlbGV0ZWQga2V5LgorICBBU1NFUlRfRVEoRUlOVkFMLCBwdGhyZWFkX3NldHNwZWNpZmljKGtleSwgZXhwZWN0ZWQpKTsKK30KKworVEVTVChwdGhyZWFkLCBwdGhyZWFkX2tleV9mb3JrKSB7CisgIHZvaWQqIGV4cGVjdGVkID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMTIzNCk7CisgIHB0aHJlYWRfa2V5X3Qga2V5OworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9rZXlfY3JlYXRlKCZrZXksIE5VTEwpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfc2V0c3BlY2lmaWMoa2V5LCBleHBlY3RlZCkpOworICBBU1NFUlRfRVEoZXhwZWN0ZWQsIHB0aHJlYWRfZ2V0c3BlY2lmaWMoa2V5KSk7CisKKyAgcGlkX3QgcGlkID0gZm9yaygpOworICBBU1NFUlRfTkUoLTEsIHBpZCkgPDwgc3RyZXJyb3IoZXJybm8pOworCisgIGlmIChwaWQgPT0gMCkgeworICAgIC8vIFRoZSBzdXJ2aXZpbmcgdGhyZWFkIGluaGVyaXRzIGFsbCB0aGUgZm9ya2luZyB0aHJlYWQncyBUTFMgdmFsdWVzLi4uCisgICAgQVNTRVJUX0VRKGV4cGVjdGVkLCBwdGhyZWFkX2dldHNwZWNpZmljKGtleSkpOworICAgIF9leGl0KDk5KTsKKyAgfQorCisgIGludCBzdGF0dXM7CisgIEFTU0VSVF9FUShwaWQsIHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKSk7CisgIEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpKTsKKyAgQVNTRVJUX0VRKDk5LCBXRVhJVFNUQVRVUyhzdGF0dXMpKTsKKworICBBU1NFUlRfRVEoZXhwZWN0ZWQsIHB0aHJlYWRfZ2V0c3BlY2lmaWMoa2V5KSk7Cit9CisKK3N0YXRpYyB2b2lkKiBEaXJ0eUtleUZuKHZvaWQqIGtleSkgeworICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYygqcmVpbnRlcnByZXRfY2FzdDxwdGhyZWFkX2tleV90Kj4oa2V5KSk7Cit9CisKK1RFU1QocHRocmVhZCwgcHRocmVhZF9rZXlfZGlydHkpIHsKKyAgcHRocmVhZF9rZXlfdCBrZXk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2tleV9jcmVhdGUoJmtleSwgTlVMTCkpOworCisgIHNpemVfdCBzdGFja19zaXplID0gMTI4ICogMTAyNDsKKyAgdm9pZCogc3RhY2sgPSBtbWFwKE5VTEwsIHN0YWNrX3NpemUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAtMSwgMCk7CisgIEFTU0VSVF9ORShNQVBfRkFJTEVELCBzdGFjayk7CisgIG1lbXNldChzdGFjaywgMHhmZiwgc3RhY2tfc2l6ZSk7CisKKyAgcHRocmVhZF9hdHRyX3QgYXR0cjsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfc2V0c3RhY2soJmF0dHIsIHN0YWNrLCBzdGFja19zaXplKSk7CisKKyAgcHRocmVhZF90IHQ7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NyZWF0ZSgmdCwgJmF0dHIsIERpcnR5S2V5Rm4sICZrZXkpKTsKKworICB2b2lkKiByZXN1bHQ7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2pvaW4odCwgJnJlc3VsdCkpOworICBBU1NFUlRfRVEobnVsbHB0ciwgcmVzdWx0KTsgLy8gTm90IH4wIQorCisgIEFTU0VSVF9FUSgwLCBtdW5tYXAoc3RhY2ssIHN0YWNrX3NpemUpKTsKK30KIAogc3RhdGljIHZvaWQqIElkRm4odm9pZCogYXJnKSB7CiAgIHJldHVybiBhcmc7CkBAIC0yNDksMzEgKzMyMiwyNCBAQAogICBBU1NFUlRfRVEoMCwgcHRocmVhZF9zaWdtYXNrKFNJR19TRVRNQVNLLCAmb3JpZ2luYWxfc2V0LCBOVUxMKSk7CiB9CiAKLSNpZiBfX0JJT05JQ19fCi1leHRlcm4gIkMiIHBpZF90IF9fYmlvbmljX2Nsb25lKGludCBmbGFncywgdm9pZCogY2hpbGRfc3RhY2ssIHBpZF90KiBwYXJlbnRfdGlkLCB2b2lkKiB0bHMsIHBpZF90KiBjaGlsZF90aWQsIGludCAoKmZuKSh2b2lkKiksIHZvaWQqIGFyZyk7Ci1URVNUKHB0aHJlYWQsIF9fYmlvbmljX2Nsb25lKSB7Ci0gIC8vIENoZWNrIHRoYXQgb3VyIGhhbmQtd3JpdHRlbiBjbG9uZSBhc3NlbWJsZXIgc2V0cyBlcnJubyBjb3JyZWN0bHkgb24gZmFpbHVyZS4KLSAgdWludHB0cl90IGZha2VfY2hpbGRfc3RhY2tbMTZdOwotICBlcnJubyA9IDA7Ci0gIEFTU0VSVF9FUSgtMSwgX19iaW9uaWNfY2xvbmUoQ0xPTkVfVEhSRUFELCAmZmFrZV9jaGlsZF9zdGFja1sxNl0sIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKLSAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOwotfQotI2VuZGlmCi0KLSNpZiBfX0JJT05JQ19fIC8vIE5vdCBhbGwgYnVpbGQgc2VydmVycyBoYXZlIGEgbmV3IGVub3VnaCBnbGliYz8gVE9ETzogcmVtb3ZlIHdoZW4gdGhleSdyZSBvbiBncHJlY2lzZS4KIFRFU1QocHRocmVhZCwgcHRocmVhZF9zZXRuYW1lX25wX190b29fbG9uZykgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykgLy8gTm90IGFsbCBidWlsZCBzZXJ2ZXJzIGhhdmUgYSBuZXcgZW5vdWdoIGdsaWJjPyBUT0RPOiByZW1vdmUgd2hlbiB0aGV5J3JlIG9uIGdwcmVjaXNlLgogICBBU1NFUlRfRVEoRVJBTkdFLCBwdGhyZWFkX3NldG5hbWVfbnAocHRocmVhZF9zZWxmKCksICJ0aGlzIG5hbWUgaXMgZmFyIHRvbyBsb25nIGZvciBsaW51eCIpKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQotI2VuZGlmCiAKLSNpZiBfX0JJT05JQ19fIC8vIE5vdCBhbGwgYnVpbGQgc2VydmVycyBoYXZlIGEgbmV3IGVub3VnaCBnbGliYz8gVE9ETzogcmVtb3ZlIHdoZW4gdGhleSdyZSBvbiBncHJlY2lzZS4KIFRFU1QocHRocmVhZCwgcHRocmVhZF9zZXRuYW1lX25wX19zZWxmKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKSAvLyBOb3QgYWxsIGJ1aWxkIHNlcnZlcnMgaGF2ZSBhIG5ldyBlbm91Z2ggZ2xpYmM/IFRPRE86IHJlbW92ZSB3aGVuIHRoZXkncmUgb24gZ3ByZWNpc2UuCiAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3NldG5hbWVfbnAocHRocmVhZF9zZWxmKCksICJzaG9ydCAxIikpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9Ci0jZW5kaWYKIAotI2lmIF9fQklPTklDX18gLy8gTm90IGFsbCBidWlsZCBzZXJ2ZXJzIGhhdmUgYSBuZXcgZW5vdWdoIGdsaWJjPyBUT0RPOiByZW1vdmUgd2hlbiB0aGV5J3JlIG9uIGdwcmVjaXNlLgogVEVTVChwdGhyZWFkLCBwdGhyZWFkX3NldG5hbWVfbnBfX290aGVyKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKSAvLyBOb3QgYWxsIGJ1aWxkIHNlcnZlcnMgaGF2ZSBhIG5ldyBlbm91Z2ggZ2xpYmM/IFRPRE86IHJlbW92ZSB3aGVuIHRoZXkncmUgb24gZ3ByZWNpc2UuCiAgIC8vIEVtdWxhdG9yIGtlcm5lbHMgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgc2V0dGluZyB0aGUgbmFtZSBvZiBvdGhlciB0aHJlYWRzLgogICBjaGFyKiBmaWxlbmFtZSA9IE5VTEw7CiAgIGFzcHJpbnRmKCZmaWxlbmFtZSwgIi9wcm9jL3NlbGYvdGFzay8lZC9jb21tIiwgZ2V0dGlkKCkpOwpAQCAtMjg4LDE4ICszNTQsMjIgQEAKICAgfSBlbHNlIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgInNraXBwaW5nIHRlc3Q6IHRoaXMga2VybmVsIGRvZXNuJ3QgaGF2ZSAvcHJvYy9zZWxmL3Rhc2svdGlkL2NvbW0gZmlsZXMhXG4iKTsKICAgfQorI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9Ci0jZW5kaWYKIAotI2lmIF9fQklPTklDX18gLy8gTm90IGFsbCBidWlsZCBzZXJ2ZXJzIGhhdmUgYSBuZXcgZW5vdWdoIGdsaWJjPyBUT0RPOiByZW1vdmUgd2hlbiB0aGV5J3JlIG9uIGdwcmVjaXNlLgogVEVTVChwdGhyZWFkLCBwdGhyZWFkX3NldG5hbWVfbnBfX25vX3N1Y2hfdGhyZWFkKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKSAvLyBOb3QgYWxsIGJ1aWxkIHNlcnZlcnMgaGF2ZSBhIG5ldyBlbm91Z2ggZ2xpYmM/IFRPRE86IHJlbW92ZSB3aGVuIHRoZXkncmUgb24gZ3ByZWNpc2UuCiAgIHB0aHJlYWRfdCBkZWFkX3RocmVhZDsKICAgTWFrZURlYWRUaHJlYWQoZGVhZF90aHJlYWQpOwogCiAgIC8vIENhbGwgcHRocmVhZF9zZXRuYW1lX25wIGFmdGVyIHRocmVhZCBoYXMgYWxyZWFkeSBleGl0ZWQuCiAgIEFTU0VSVF9FUShFU1JDSCwgcHRocmVhZF9zZXRuYW1lX25wKGRlYWRfdGhyZWFkLCAic2hvcnQgMyIpKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQotI2VuZGlmCiAKIFRFU1QocHRocmVhZCwgcHRocmVhZF9raWxsX18wKSB7CiAgIC8vIFNpZ25hbCAwIGp1c3QgdGVzdHMgdGhhdCB0aGUgdGhyZWFkIGV4aXN0cywgc28gaXQncyBzYWZlIHRvIGNhbGwgb24gb3Vyc2VsdmVzLgpAQCAtMzIwLDE0ICszOTAsOCBAQAogfQogCiBURVNUKHB0aHJlYWQsIHB0aHJlYWRfa2lsbF9faW5fc2lnbmFsX2hhbmRsZXIpIHsKLSAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Ci0gIHN0cnVjdCBzaWdhY3Rpb24gb3JpZ2luYWxfYWN0aW9uOwotICBzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOwotICBhY3Rpb24uc2FfZmxhZ3MgPSAwOwotICBhY3Rpb24uc2FfaGFuZGxlciA9IHB0aHJlYWRfa2lsbF9faW5fc2lnbmFsX2hhbmRsZXJfaGVscGVyOwotICBBU1NFUlRfRVEoMCwgc2lnYWN0aW9uKFNJR0FMUk0sICZhY3Rpb24sICZvcmlnaW5hbF9hY3Rpb24pKTsKKyAgU2NvcGVkU2lnbmFsSGFuZGxlciBzc2goU0lHQUxSTSwgcHRocmVhZF9raWxsX19pbl9zaWduYWxfaGFuZGxlcl9oZWxwZXIpOwogICBBU1NFUlRfRVEoMCwgcHRocmVhZF9raWxsKHB0aHJlYWRfc2VsZigpLCBTSUdBTFJNKSk7Ci0gIEFTU0VSVF9FUSgwLCBzaWdhY3Rpb24oU0lHQUxSTSwgJm9yaWdpbmFsX2FjdGlvbiwgTlVMTCkpOwogfQogCiBURVNUKHB0aHJlYWQsIHB0aHJlYWRfZGV0YWNoX19ub19zdWNoX3RocmVhZCkgewpAQCAtMzM3LDYgKzQwMSw0NCBAQAogICBBU1NFUlRfRVEoRVNSQ0gsIHB0aHJlYWRfZGV0YWNoKGRlYWRfdGhyZWFkKSk7CiB9CiAKK1RFU1QocHRocmVhZCwgcHRocmVhZF9kZXRhY2hfX2xlYWspIHsKKyAgc2l6ZV90IGluaXRpYWxfYnl0ZXMgPSAwOworICAvLyBSdW4gdGhpcyBsb29wIG1vcmUgdGhhbiBvbmNlIHNpbmNlIHRoZSBmaXJzdCBsb29wIGNhdXNlcyBzb21lIG1lbW9yeQorICAvLyB0byBiZSBhbGxvY2F0ZWQgcGVybWVuYW50bHkuIFJ1biBhbiBleHRyYSBsb29wIHRvIGhlbHAgY2F0Y2ggYW55IHN1YnRsZQorICAvLyBtZW1vcnkgbGVha3MuCisgIGZvciAoc2l6ZV90IGxvb3AgPSAwOyBsb29wIDwgMzsgbG9vcCsrKSB7CisgICAgLy8gU2V0IHRoZSBpbml0aWFsIGJ5dGVzIG9uIHRoZSBzZWNvbmQgbG9vcCBzaW5jZSB0aGUgbWVtb3J5IGluIHVzZQorICAgIC8vIHNob3VsZCBoYXZlIHN0YWJpbGl6ZWQuCisgICAgaWYgKGxvb3AgPT0gMSkgeworICAgICAgaW5pdGlhbF9ieXRlcyA9IG1hbGxpbmZvKCkudW9yZGJsa3M7CisgICAgfQorCisgICAgcHRocmVhZF9hdHRyX3QgYXR0cjsKKyAgICBBU1NFUlRfRVEoMCwgcHRocmVhZF9hdHRyX2luaXQoJmF0dHIpKTsKKyAgICBBU1NFUlRfRVEoMCwgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKCZhdHRyLCBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSkpOworCisgICAgc3RkOjp2ZWN0b3I8cHRocmVhZF90PiB0aHJlYWRzOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzI7ICsraSkgeworICAgICAgcHRocmVhZF90IHQ7CisgICAgICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jcmVhdGUoJnQsICZhdHRyLCBJZEZuLCBOVUxMKSk7CisgICAgICB0aHJlYWRzLnB1c2hfYmFjayh0KTsKKyAgICB9CisKKyAgICBzbGVlcCgxKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzI7ICsraSkgeworICAgICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfZGV0YWNoKHRocmVhZHNbaV0pKSA8PCBpOworICAgIH0KKyAgfQorCisgIHNpemVfdCBmaW5hbF9ieXRlcyA9IG1hbGxpbmZvKCkudW9yZGJsa3M7CisgIGludCBsZWFrZWRfYnl0ZXMgPSAoZmluYWxfYnl0ZXMgLSBpbml0aWFsX2J5dGVzKTsKKworICAvLyBVc2VyIGNvZGUgKGxpa2UgdGhpcyB0ZXN0KSBkb2Vzbid0IGtub3cgaG93IGxhcmdlIHB0aHJlYWRfaW50ZXJuYWxfdCBpcy4KKyAgLy8gV2UgY2FuIGJlIHByZXR0eSBzdXJlIGl0J3MgbW9yZSB0aGFuIDEyOCBieXRlcy4KKyAgQVNTRVJUX0xUKGxlYWtlZF9ieXRlcywgMzIgLyp0aHJlYWRzKi8gKiAxMjggLypieXRlcyovKTsKK30KKwogVEVTVChwdGhyZWFkLCBwdGhyZWFkX2dldGNwdWNsb2NraWRfX2Nsb2NrX2dldHRpbWUpIHsKICAgcHRocmVhZF90IHQ7CiAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NyZWF0ZSgmdCwgTlVMTCwgU2xlZXBGbiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oNSkpKTsKQEAgLTUxMSw0OSArNjEzLDEwNiBAQAogICBBU1NFUlRfRVEoMCwgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSgmYXR0cmlidXRlcywgMzIqMTAyNCArIDEpKTsKICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUoJmF0dHJpYnV0ZXMsICZzdGFja19zaXplKSk7CiAgIEFTU0VSVF9FUSgzMioxMDI0VSArIDEsIHN0YWNrX3NpemUpOwotI2lmIF9fQklPTklDX18KKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIC8vIEJpb25pYyByb3VuZHMgdXAsIHdoaWNoIGlzIHdoYXQgUE9TSVggYWxsb3dzLgogICBBU1NFUlRfRVEoR2V0QWN0dWFsU3RhY2tTaXplKGF0dHJpYnV0ZXMpLCAoMzIgKyA0KSoxMDI0VSk7Ci0jZWxzZQorI2Vsc2UgLy8gX19CSU9OSUNfXwogICAvLyBnbGliYyByb3VuZHMgZG93biwgaW4gdmlvbGF0aW9uIG9mIFBPU0lYLiBUaGV5IGRvY3VtZW50IHRoaXMgaW4gdGhlaXIgQlVHUyBzZWN0aW9uLgogICBBU1NFUlRfRVEoR2V0QWN0dWFsU3RhY2tTaXplKGF0dHJpYnV0ZXMpLCAzMioxMDI0VSk7Ci0jZW5kaWYKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QocHRocmVhZCwgcHRocmVhZF9yd2xvY2tfc21va2UpIHsKICAgcHRocmVhZF9yd2xvY2tfdCBsOwogICBBU1NFUlRfRVEoMCwgcHRocmVhZF9yd2xvY2tfaW5pdCgmbCwgTlVMTCkpOwogCisgIC8vIFNpbmdsZSByZWFkIGxvY2sKICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfcndsb2NrX3JkbG9jaygmbCkpOwogICBBU1NFUlRfRVEoMCwgcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZsKSk7CiAKKyAgLy8gTXVsdGlwbGUgcmVhZCBsb2NrCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3J3bG9ja19yZGxvY2soJmwpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfcndsb2NrX3JkbG9jaygmbCkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZsKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3J3bG9ja191bmxvY2soJmwpKTsKKworICAvLyBXcml0ZSBsb2NrCiAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3J3bG9ja193cmxvY2soJmwpKTsKICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfcndsb2NrX3VubG9jaygmbCkpOwogCisgIC8vIFRyeSB3cml0ZXIgbG9jaworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrKCZsKSk7CisgIEFTU0VSVF9FUShFQlVTWSwgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrKCZsKSk7CisgIEFTU0VSVF9FUShFQlVTWSwgcHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrKCZsKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3J3bG9ja191bmxvY2soJmwpKTsKKworICAvLyBUcnkgcmVhZGVyIGxvY2sKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfcndsb2NrX3RyeXJkbG9jaygmbCkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrKCZsKSk7CisgIEFTU0VSVF9FUShFQlVTWSwgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrKCZsKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3J3bG9ja191bmxvY2soJmwpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfcndsb2NrX3VubG9jaygmbCkpOworCisgIC8vIFRyeSB3cml0ZXIgbG9jayBhZnRlciB1bmxvY2sKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfcndsb2NrX3dybG9jaygmbCkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZsKSk7CisKKyNpZmRlZiBfX0JJT05JQ19fCisgIC8vIEVERUFETEsgaW4gInJlYWQgYWZ0ZXIgd3JpdGUiCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3J3bG9ja193cmxvY2soJmwpKTsKKyAgQVNTRVJUX0VRKEVERUFETEssIHB0aHJlYWRfcndsb2NrX3JkbG9jaygmbCkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZsKSk7CisKKyAgLy8gRURFQURMSyBpbiAid3JpdGUgYWZ0ZXIgd3JpdGUiCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3J3bG9ja193cmxvY2soJmwpKTsKKyAgQVNTRVJUX0VRKEVERUFETEssIHB0aHJlYWRfcndsb2NrX3dybG9jaygmbCkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZsKSk7CisjZW5kaWYKKwogICBBU1NFUlRfRVEoMCwgcHRocmVhZF9yd2xvY2tfZGVzdHJveSgmbCkpOwogfQogCi1zdGF0aWMgaW50IGdPbmNlRm5DYWxsQ291bnQgPSAwOworc3RhdGljIGludCBnX29uY2VfZm5fY2FsbF9jb3VudCA9IDA7CiBzdGF0aWMgdm9pZCBPbmNlRm4oKSB7Ci0gICsrZ09uY2VGbkNhbGxDb3VudDsKKyAgKytnX29uY2VfZm5fY2FsbF9jb3VudDsKIH0KIAogVEVTVChwdGhyZWFkLCBwdGhyZWFkX29uY2Vfc21va2UpIHsKICAgcHRocmVhZF9vbmNlX3Qgb25jZV9jb250cm9sID0gUFRIUkVBRF9PTkNFX0lOSVQ7CiAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX29uY2UoJm9uY2VfY29udHJvbCwgT25jZUZuKSk7CiAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX29uY2UoJm9uY2VfY29udHJvbCwgT25jZUZuKSk7Ci0gIEFTU0VSVF9FUSgxLCBnT25jZUZuQ2FsbENvdW50KTsKKyAgQVNTRVJUX0VRKDEsIGdfb25jZV9mbl9jYWxsX2NvdW50KTsKIH0KIAotc3RhdGljIGludCBnQXRGb3JrUHJlcGFyZUNhbGxzID0gMDsKLXN0YXRpYyB2b2lkIEF0Rm9ya1ByZXBhcmUxKCkgeyBnQXRGb3JrUHJlcGFyZUNhbGxzID0gKGdBdEZvcmtQcmVwYXJlQ2FsbHMgPDwgNCkgfCAxOyB9Ci1zdGF0aWMgdm9pZCBBdEZvcmtQcmVwYXJlMigpIHsgZ0F0Rm9ya1ByZXBhcmVDYWxscyA9IChnQXRGb3JrUHJlcGFyZUNhbGxzIDw8IDQpIHwgMjsgfQotc3RhdGljIGludCBnQXRGb3JrUGFyZW50Q2FsbHMgPSAwOwotc3RhdGljIHZvaWQgQXRGb3JrUGFyZW50MSgpIHsgZ0F0Rm9ya1BhcmVudENhbGxzID0gKGdBdEZvcmtQYXJlbnRDYWxscyA8PCA0KSB8IDE7IH0KLXN0YXRpYyB2b2lkIEF0Rm9ya1BhcmVudDIoKSB7IGdBdEZvcmtQYXJlbnRDYWxscyA9IChnQXRGb3JrUGFyZW50Q2FsbHMgPDwgNCkgfCAyOyB9Ci1zdGF0aWMgaW50IGdBdEZvcmtDaGlsZENhbGxzID0gMDsKLXN0YXRpYyB2b2lkIEF0Rm9ya0NoaWxkMSgpIHsgZ0F0Rm9ya0NoaWxkQ2FsbHMgPSAoZ0F0Rm9ya0NoaWxkQ2FsbHMgPDwgNCkgfCAxOyB9Ci1zdGF0aWMgdm9pZCBBdEZvcmtDaGlsZDIoKSB7IGdBdEZvcmtDaGlsZENhbGxzID0gKGdBdEZvcmtDaGlsZENhbGxzIDw8IDQpIHwgMjsgfQorc3RhdGljIHN0ZDo6c3RyaW5nIHB0aHJlYWRfb25jZV8xOTM0MTIyX3Jlc3VsdCA9ICIiOworCitzdGF0aWMgdm9pZCBSb3V0aW5lMigpIHsKKyAgcHRocmVhZF9vbmNlXzE5MzQxMjJfcmVzdWx0ICs9ICIyIjsKK30KKworc3RhdGljIHZvaWQgUm91dGluZTEoKSB7CisgIHB0aHJlYWRfb25jZV90IG9uY2VfY29udHJvbF8yID0gUFRIUkVBRF9PTkNFX0lOSVQ7CisgIHB0aHJlYWRfb25jZV8xOTM0MTIyX3Jlc3VsdCArPSAiMSI7CisgIHB0aHJlYWRfb25jZSgmb25jZV9jb250cm9sXzIsICZSb3V0aW5lMik7Cit9CisKK1RFU1QocHRocmVhZCwgcHRocmVhZF9vbmNlXzE5MzQxMjIpIHsKKyAgLy8gVmVyeSBvbGQgdmVyc2lvbnMgb2YgQW5kcm9pZCBjb3VsZG4ndCBjYWxsIHB0aHJlYWRfb25jZSBmcm9tIGEKKyAgLy8gcHRocmVhZF9vbmNlIGluaXQgcm91dGluZS4gaHR0cDovL2IvMTkzNDEyMi4KKyAgcHRocmVhZF9vbmNlX3Qgb25jZV9jb250cm9sXzEgPSBQVEhSRUFEX09OQ0VfSU5JVDsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfb25jZSgmb25jZV9jb250cm9sXzEsICZSb3V0aW5lMSkpOworICBBU1NFUlRfRVEoIjEyIiwgcHRocmVhZF9vbmNlXzE5MzQxMjJfcmVzdWx0KTsKK30KKworc3RhdGljIGludCBnX2F0Zm9ya19wcmVwYXJlX2NhbGxzID0gMDsKK3N0YXRpYyB2b2lkIEF0Rm9ya1ByZXBhcmUxKCkgeyBnX2F0Zm9ya19wcmVwYXJlX2NhbGxzID0gKGdfYXRmb3JrX3ByZXBhcmVfY2FsbHMgPDwgNCkgfCAxOyB9CitzdGF0aWMgdm9pZCBBdEZvcmtQcmVwYXJlMigpIHsgZ19hdGZvcmtfcHJlcGFyZV9jYWxscyA9IChnX2F0Zm9ya19wcmVwYXJlX2NhbGxzIDw8IDQpIHwgMjsgfQorc3RhdGljIGludCBnX2F0Zm9ya19wYXJlbnRfY2FsbHMgPSAwOworc3RhdGljIHZvaWQgQXRGb3JrUGFyZW50MSgpIHsgZ19hdGZvcmtfcGFyZW50X2NhbGxzID0gKGdfYXRmb3JrX3BhcmVudF9jYWxscyA8PCA0KSB8IDE7IH0KK3N0YXRpYyB2b2lkIEF0Rm9ya1BhcmVudDIoKSB7IGdfYXRmb3JrX3BhcmVudF9jYWxscyA9IChnX2F0Zm9ya19wYXJlbnRfY2FsbHMgPDwgNCkgfCAyOyB9CitzdGF0aWMgaW50IGdfYXRmb3JrX2NoaWxkX2NhbGxzID0gMDsKK3N0YXRpYyB2b2lkIEF0Rm9ya0NoaWxkMSgpIHsgZ19hdGZvcmtfY2hpbGRfY2FsbHMgPSAoZ19hdGZvcmtfY2hpbGRfY2FsbHMgPDwgNCkgfCAxOyB9CitzdGF0aWMgdm9pZCBBdEZvcmtDaGlsZDIoKSB7IGdfYXRmb3JrX2NoaWxkX2NhbGxzID0gKGdfYXRmb3JrX2NoaWxkX2NhbGxzIDw8IDQpIHwgMjsgfQogCiBURVNUKHB0aHJlYWQsIHB0aHJlYWRfYXRmb3JrKSB7CiAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0Zm9yayhBdEZvcmtQcmVwYXJlMSwgQXRGb3JrUGFyZW50MSwgQXRGb3JrQ2hpbGQxKSk7CkBAIC01NjQsMTMgKzcyMywxMyBAQAogCiAgIC8vIENoaWxkIGFuZCBwYXJlbnQgY2FsbHMgYXJlIG1hZGUgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSByZWdpc3RlcmVkLgogICBpZiAocGlkID09IDApIHsKLSAgICBBU1NFUlRfRVEoMHgxMiwgZ0F0Rm9ya0NoaWxkQ2FsbHMpOworICAgIEFTU0VSVF9FUSgweDEyLCBnX2F0Zm9ya19jaGlsZF9jYWxscyk7CiAgICAgX2V4aXQoMCk7CiAgIH0KLSAgQVNTRVJUX0VRKDB4MTIsIGdBdEZvcmtQYXJlbnRDYWxscyk7CisgIEFTU0VSVF9FUSgweDEyLCBnX2F0Zm9ya19wYXJlbnRfY2FsbHMpOwogCiAgIC8vIFByZXBhcmUgY2FsbHMgYXJlIG1hZGUgaW4gdGhlIHJldmVyc2Ugb3JkZXIuCi0gIEFTU0VSVF9FUSgweDIxLCBnQXRGb3JrUHJlcGFyZUNhbGxzKTsKKyAgQVNTRVJUX0VRKDB4MjEsIGdfYXRmb3JrX3ByZXBhcmVfY2FsbHMpOwogfQogCiBURVNUKHB0aHJlYWQsIHB0aHJlYWRfYXR0cl9nZXRzY29wZSkgewpAQCAtNTgxLDMgKzc0MCwxNzAgQEAKICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9nZXRzY29wZSgmYXR0ciwgJnNjb3BlKSk7CiAgIEFTU0VSVF9FUShQVEhSRUFEX1NDT1BFX1NZU1RFTSwgc2NvcGUpOwogfQorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfY29uZGF0dHJfaW5pdCkgeworICBwdGhyZWFkX2NvbmRhdHRyX3QgYXR0cjsKKyAgcHRocmVhZF9jb25kYXR0cl9pbml0KCZhdHRyKTsKKworICBjbG9ja2lkX3QgY2xvY2s7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NvbmRhdHRyX2dldGNsb2NrKCZhdHRyLCAmY2xvY2spKTsKKyAgQVNTRVJUX0VRKENMT0NLX1JFQUxUSU1FLCBjbG9jayk7CisKKyAgaW50IHBzaGFyZWQ7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQoJmF0dHIsICZwc2hhcmVkKSk7CisgIEFTU0VSVF9FUShQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwgcHNoYXJlZCk7Cit9CisKK1RFU1QocHRocmVhZCwgcHRocmVhZF9jb25kYXR0cl9zZXRjbG9jaykgeworICBwdGhyZWFkX2NvbmRhdHRyX3QgYXR0cjsKKyAgcHRocmVhZF9jb25kYXR0cl9pbml0KCZhdHRyKTsKKworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jb25kYXR0cl9zZXRjbG9jaygmYXR0ciwgQ0xPQ0tfUkVBTFRJTUUpKTsKKyAgY2xvY2tpZF90IGNsb2NrOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jb25kYXR0cl9nZXRjbG9jaygmYXR0ciwgJmNsb2NrKSk7CisgIEFTU0VSVF9FUShDTE9DS19SRUFMVElNRSwgY2xvY2spOworCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NvbmRhdHRyX3NldGNsb2NrKCZhdHRyLCBDTE9DS19NT05PVE9OSUMpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY29uZGF0dHJfZ2V0Y2xvY2soJmF0dHIsICZjbG9jaykpOworICBBU1NFUlRfRVEoQ0xPQ0tfTU9OT1RPTklDLCBjbG9jayk7CisKKyAgQVNTRVJUX0VRKEVJTlZBTCwgcHRocmVhZF9jb25kYXR0cl9zZXRjbG9jaygmYXR0ciwgQ0xPQ0tfUFJPQ0VTU19DUFVUSU1FX0lEKSk7Cit9CisKK1RFU1QocHRocmVhZCwgcHRocmVhZF9jb25kX2Jyb2FkY2FzdF9fcHJlc2VydmVzX2NvbmRhdHRyX2ZsYWdzKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKSAvLyBUaGlzIHRlc3RzIGEgYmlvbmljIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgcHRocmVhZF9jb25kYXR0cl90IGF0dHI7CisgIHB0aHJlYWRfY29uZGF0dHJfaW5pdCgmYXR0cik7CisKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY29uZGF0dHJfc2V0Y2xvY2soJmF0dHIsIENMT0NLX01PTk9UT05JQykpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkKCZhdHRyLCBQVEhSRUFEX1BST0NFU1NfU0hBUkVEKSk7CisKKyAgcHRocmVhZF9jb25kX3QgY29uZF92YXI7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NvbmRfaW5pdCgmY29uZF92YXIsICZhdHRyKSk7CisKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY29uZF9zaWduYWwoJmNvbmRfdmFyKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZjb25kX3ZhcikpOworCisgIGF0dHIgPSBzdGF0aWNfY2FzdDxwdGhyZWFkX2NvbmRhdHRyX3Q+KGNvbmRfdmFyLnZhbHVlKTsKKyAgY2xvY2tpZF90IGNsb2NrOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jb25kYXR0cl9nZXRjbG9jaygmYXR0ciwgJmNsb2NrKSk7CisgIEFTU0VSVF9FUShDTE9DS19NT05PVE9OSUMsIGNsb2NrKTsKKyAgaW50IHBzaGFyZWQ7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQoJmF0dHIsICZwc2hhcmVkKSk7CisgIEFTU0VSVF9FUShQVEhSRUFEX1BST0NFU1NfU0hBUkVELCBwc2hhcmVkKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXworfQorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKSB7CisgIHB0aHJlYWRfbXV0ZXhfdCBtOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9tdXRleF9pbml0KCZtLCBOVUxMKSk7CisKKyAgLy8gSWYgdGhlIG11dGV4IGlzIGFscmVhZHkgbG9ja2VkLCBwdGhyZWFkX211dGV4X3RpbWVkbG9jayBzaG91bGQgdGltZSBvdXQuCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX211dGV4X2xvY2soJm0pKTsKKworICB0aW1lc3BlYyB0czsKKyAgQVNTRVJUX0VRKDAsIGNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cykpOworICB0cy50dl9uc2VjICs9IDE7CisgIEFTU0VSVF9FUShFVElNRURPVVQsIHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKCZtLCAmdHMpKTsKKworICAvLyBJZiB0aGUgbXV0ZXggaXMgdW5sb2NrZWQsIHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrIHNob3VsZCBzdWNjZWVkLgorICBBU1NFUlRfRVEoMCwgcHRocmVhZF9tdXRleF91bmxvY2soJm0pKTsKKworICBBU1NFUlRfRVEoMCwgY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRzKSk7CisgIHRzLnR2X25zZWMgKz0gMTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKCZtLCAmdHMpKTsKKworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9tdXRleF91bmxvY2soJm0pKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbSkpOworfQorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfYXR0cl9nZXRzdGFja19fbWFpbl90aHJlYWQpIHsKKyAgLy8gVGhpcyB0ZXN0IGlzIG9ubHkgbWVhbmluZ2Z1bCBmb3IgdGhlIG1haW4gdGhyZWFkLCBzbyBtYWtlIHN1cmUgd2UncmUgcnVubmluZyBvbiBpdCEKKyAgQVNTRVJUX0VRKGdldHBpZCgpLCBzeXNjYWxsKF9fTlJfZ2V0dGlkKSk7CisKKyAgLy8gR2V0IHRoZSBtYWluIHRocmVhZCdzIGF0dHJpYnV0ZXMuCisgIHB0aHJlYWRfYXR0cl90IGF0dHJpYnV0ZXM7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2dldGF0dHJfbnAocHRocmVhZF9zZWxmKCksICZhdHRyaWJ1dGVzKSk7CisKKyAgLy8gQ2hlY2sgdGhhdCB3ZSBjb3JyZWN0bHkgcmVwb3J0IHRoYXQgdGhlIG1haW4gdGhyZWFkIGhhcyBubyBndWFyZCBwYWdlLgorICBzaXplX3QgZ3VhcmRfc2l6ZTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUoJmF0dHJpYnV0ZXMsICZndWFyZF9zaXplKSk7CisgIEFTU0VSVF9FUSgwVSwgZ3VhcmRfc2l6ZSk7IC8vIFRoZSBtYWluIHRocmVhZCBoYXMgbm8gZ3VhcmQgcGFnZS4KKworICAvLyBHZXQgdGhlIHN0YWNrIGJhc2UgYW5kIHRoZSBzdGFjayBzaXplIChib3RoIHdheXMpLgorICB2b2lkKiBzdGFja19iYXNlOworICBzaXplX3Qgc3RhY2tfc2l6ZTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9nZXRzdGFjaygmYXR0cmlidXRlcywgJnN0YWNrX2Jhc2UsICZzdGFja19zaXplKSk7CisgIHNpemVfdCBzdGFja19zaXplMjsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUoJmF0dHJpYnV0ZXMsICZzdGFja19zaXplMikpOworCisgIC8vIFRoZSB0d28gbWV0aG9kcyBvZiBhc2tpbmcgZm9yIHRoZSBzdGFjayBzaXplIHNob3VsZCBhZ3JlZS4KKyAgRVhQRUNUX0VRKHN0YWNrX3NpemUsIHN0YWNrX3NpemUyKTsKKworICAvLyBXaGF0IGRvZXMgL3Byb2Mvc2VsZi9tYXBzJyBbc3RhY2tdIGxpbmUgc2F5PworICB2b2lkKiBtYXBzX3N0YWNrX2hpID0gTlVMTDsKKyAgRklMRSogZnAgPSBmb3BlbigiL3Byb2Mvc2VsZi9tYXBzIiwgInIiKTsKKyAgQVNTRVJUX1RSVUUoZnAgIT0gTlVMTCk7CisgIGNoYXIgbGluZVtCVUZTSVpdOworICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkgIT0gTlVMTCkgeworICAgIHVpbnRwdHJfdCBsbywgaGk7CisgICAgY2hhciBuYW1lWzEwXTsKKyAgICBzc2NhbmYobGluZSwgIiUiIFBSSXhQVFIgIi0lIiBQUkl4UFRSICIgJSo0cyAlKnggJSp4OiUqeCAlKmQgJTEwcyIsICZsbywgJmhpLCBuYW1lKTsKKyAgICBpZiAoc3RyY21wKG5hbWUsICJbc3RhY2tdIikgPT0gMCkgeworICAgICAgbWFwc19zdGFja19oaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhpKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBmY2xvc2UoZnApOworCisgIC8vIFRoZSBzdGFjayBzaXplIHNob3VsZCBjb3JyZXNwb25kIHRvIFJMSU1JVF9TVEFDSy4KKyAgcmxpbWl0IHJsOworICBBU1NFUlRfRVEoMCwgZ2V0cmxpbWl0KFJMSU1JVF9TVEFDSywgJnJsKSk7CisgIHVpbnQ2NF90IG9yaWdpbmFsX3JsaW1fY3VyID0gcmwucmxpbV9jdXI7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBpZiAocmwucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSkgeworICAgIHJsLnJsaW1fY3VyID0gOCAqIDEwMjQgKiAxMDI0OyAvLyBCaW9uaWMgcmVwb3J0cyB1bmxpbWl0ZWQgc3RhY2tzIGFzIDhNaUIuCisgIH0KKyNlbmRpZgorICBFWFBFQ1RfRVEocmwucmxpbV9jdXIsIHN0YWNrX3NpemUpOworCisgIGF1dG8gZ3VhcmQgPSBjcmVhdGVfc2NvcGVfZ3VhcmQoWyZybCwgb3JpZ2luYWxfcmxpbV9jdXJdKCkgeworICAgIHJsLnJsaW1fY3VyID0gb3JpZ2luYWxfcmxpbV9jdXI7CisgICAgQVNTRVJUX0VRKDAsIHNldHJsaW1pdChSTElNSVRfU1RBQ0ssICZybCkpOworICB9KTsKKworICAvLyBUaGUgaGlnaCBhZGRyZXNzIG9mIHRoZSAvcHJvYy9zZWxmL21hcHMgW3N0YWNrXSByZWdpb24gc2hvdWxkIGVxdWFsIHN0YWNrX2Jhc2UgKyBzdGFja19zaXplLgorICAvLyBSZW1lbWJlciB0aGF0IHRoZSBzdGFjayBncm93cyBkb3duIChhbmQgaXMgbWFwcGVkIGluIG9uIGRlbWFuZCksIHNvIHRoZSBsb3cgYWRkcmVzcyBvZiB0aGUKKyAgLy8gcmVnaW9uIGlzbid0IHZlcnkgaW50ZXJlc3RpbmcuCisgIEVYUEVDVF9FUShtYXBzX3N0YWNrX2hpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzdGFja19iYXNlKSArIHN0YWNrX3NpemUpOworCisgIC8vCisgIC8vIFdoYXQgaWYgUkxJTUlUX1NUQUNLIGlzIHNtYWxsZXIgdGhhbiB0aGUgc3RhY2sncyBjdXJyZW50IGV4dGVudD8KKyAgLy8KKyAgcmwucmxpbV9jdXIgPSBybC5ybGltX21heCA9IDEwMjQ7IC8vIDFLaUIuIFdlIGtub3cgdGhlIHN0YWNrIG11c3QgYmUgYXQgbGVhc3QgYSBwYWdlIGFscmVhZHkuCisgIHJsLnJsaW1fbWF4ID0gUkxJTV9JTkZJTklUWTsKKyAgQVNTRVJUX0VRKDAsIHNldHJsaW1pdChSTElNSVRfU1RBQ0ssICZybCkpOworCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2dldGF0dHJfbnAocHRocmVhZF9zZWxmKCksICZhdHRyaWJ1dGVzKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2soJmF0dHJpYnV0ZXMsICZzdGFja19iYXNlLCAmc3RhY2tfc2l6ZSkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSgmYXR0cmlidXRlcywgJnN0YWNrX3NpemUyKSk7CisKKyAgRVhQRUNUX0VRKHN0YWNrX3NpemUsIHN0YWNrX3NpemUyKTsKKyAgQVNTRVJUX0VRKDEwMjRVLCBzdGFja19zaXplKTsKKworICAvLworICAvLyBXaGF0IGlmIFJMSU1JVF9TVEFDSyBpc24ndCBhIHdob2xlIG51bWJlciBvZiBwYWdlcz8KKyAgLy8KKyAgcmwucmxpbV9jdXIgPSBybC5ybGltX21heCA9IDY2NjY7IC8vIE5vdCBhIHdob2xlIG51bWJlciBvZiBwYWdlcy4KKyAgcmwucmxpbV9tYXggPSBSTElNX0lORklOSVRZOworICBBU1NFUlRfRVEoMCwgc2V0cmxpbWl0KFJMSU1JVF9TVEFDSywgJnJsKSk7CisKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfZ2V0YXR0cl9ucChwdGhyZWFkX3NlbGYoKSwgJmF0dHJpYnV0ZXMpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9nZXRzdGFjaygmYXR0cmlidXRlcywgJnN0YWNrX2Jhc2UsICZzdGFja19zaXplKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplKCZhdHRyaWJ1dGVzLCAmc3RhY2tfc2l6ZTIpKTsKKworICBFWFBFQ1RfRVEoc3RhY2tfc2l6ZSwgc3RhY2tfc2l6ZTIpOworICBBU1NFUlRfRVEoNjY2NlUsIHN0YWNrX3NpemUpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVnZXhfdGVzdC5jcHAgYi90ZXN0cy9yZWdleF90ZXN0LmNwcAppbmRleCA2NTlkMWRiLi5kMDI2MjIxIDEwMDY0NAotLS0gYS90ZXN0cy9yZWdleF90ZXN0LmNwcAorKysgYi90ZXN0cy9yZWdleF90ZXN0LmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAgIGNoYXIgYnVmWzgwXTsKICAgcmVnZXJyb3IoUkVHX05PTUFUQ0gsICZyZSwgYnVmLCBzaXplb2YoYnVmKSk7Ci0jaWYgX19CSU9OSUNfXworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgQVNTRVJUX1NUUkVRKCJyZWdleGVjKCkgZmFpbGVkIHRvIG1hdGNoIiwgYnVmKTsKICNlbHNlCiAgIEFTU0VSVF9TVFJFUSgiTm8gbWF0Y2giLCBidWYpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NoZWRfdGVzdC5jcHAgYi90ZXN0cy9zY2hlZF90ZXN0LmNwcAppbmRleCA0OWYxNjQyLi5jYWY0YzY1IDEwMDY0NAotLS0gYS90ZXN0cy9zY2hlZF90ZXN0LmNwcAorKysgYi90ZXN0cy9zY2hlZF90ZXN0LmNwcApAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAKLSNpZmRlZiBfX0JJT05JQ19fCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogc3RhdGljIGludCBjaGlsZF9mbih2b2lkKiBpX3B0cikgewogICAqcmVpbnRlcnByZXRfY2FzdDxpbnQqPihpX3B0cikgPSA0MjsKICAgcmV0dXJuIDEyMzsKQEAgLTUwLDMgKzUwLDIxNSBAQAogICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKIH0KICNlbmRpZgorCitURVNUKHNjaGVkLCBjbG9uZV9lcnJubykgeworICAvLyBDaGVjayB0aGF0IG91ciBoYW5kLXdyaXR0ZW4gY2xvbmUgYXNzZW1ibGVyIHNldHMgZXJybm8gY29ycmVjdGx5IG9uIGZhaWx1cmUuCisgIHVpbnRwdHJfdCBmYWtlX2NoaWxkX3N0YWNrWzE2XTsKKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoLTEsIGNsb25lKE5VTEwsICZmYWtlX2NoaWxkX3N0YWNrWzE2XSwgQ0xPTkVfVEhSRUFELCBOVUxMKSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKK30KKworVEVTVChzY2hlZCwgY3B1X3NldCkgeworICBjcHVfc2V0X3Qgc2V0OworCisgIENQVV9aRVJPKCZzZXQpOworICBDUFVfU0VUKDAsICZzZXQpOworICBDUFVfU0VUKDE3LCAmc2V0KTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBDUFVfU0VUU0laRTsgaSsrKSB7CisgICAgQVNTRVJUX0VRKGkgPT0gMCB8fCBpID09IDE3LCBDUFVfSVNTRVQoaSwgJnNldCkpOworICB9CisKKyAgLy8gV2Ugc2hvdWxkIGZhaWwgc2lsZW50bHkgaWYgd2UgdHJ5IHRvIHNldC90ZXN0IG91dHNpZGUgdGhlIHJhbmdlLgorICBDUFVfU0VUKENQVV9TRVRTSVpFLCAmc2V0KTsKKyAgQVNTRVJUX0ZBTFNFKENQVV9JU1NFVChDUFVfU0VUU0laRSwgJnNldCkpOworfQorCitURVNUKHNjaGVkLCBjcHVfY291bnQpIHsKKyAgY3B1X3NldF90IHNldDsKKworICBDUFVfWkVSTygmc2V0KTsKKyAgQVNTRVJUX0VRKDAsIENQVV9DT1VOVCgmc2V0KSk7CisgIENQVV9TRVQoMiwgJnNldCk7CisgIENQVV9TRVQoMTAsICZzZXQpOworICBBU1NFUlRfRVEoMiwgQ1BVX0NPVU5UKCZzZXQpKTsKKyAgQ1BVX0NMUigxMCwgJnNldCk7CisgIEFTU0VSVF9FUSgxLCBDUFVfQ09VTlQoJnNldCkpOworfQorCitURVNUKHNjaGVkLCBjcHVfemVybykgeworICBjcHVfc2V0X3Qgc2V0OworCisgIENQVV9aRVJPKCZzZXQpOworICBBU1NFUlRfRVEoMCwgQ1BVX0NPVU5UKCZzZXQpKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBDUFVfU0VUU0laRTsgaSsrKSB7CisgICAgQVNTRVJUX0ZBTFNFKENQVV9JU1NFVChpLCAmc2V0KSk7CisgIH0KK30KKworVEVTVChzY2hlZCwgY3B1X2NscikgeworICBjcHVfc2V0X3Qgc2V0OworCisgIENQVV9aRVJPKCZzZXQpOworICBDUFVfU0VUKDAsICZzZXQpOworICBDUFVfU0VUKDEsICZzZXQpOworICBmb3IgKGludCBpID0gMDsgaSA8IENQVV9TRVRTSVpFOyBpKyspIHsKKyAgICBBU1NFUlRfRVEoaSA9PSAwIHx8IGkgPT0gMSwgQ1BVX0lTU0VUKGksICZzZXQpKTsKKyAgfQorICBDUFVfQ0xSKDEsICZzZXQpOworICBmb3IgKGludCBpID0gMDsgaSA8IENQVV9TRVRTSVpFOyBpKyspIHsKKyAgICBBU1NFUlRfRVEoaSA9PSAwLCBDUFVfSVNTRVQoaSwgJnNldCkpOworICB9CisKKyAgLy8gV2Ugc2hvdWxkIGZhaWwgc2lsZW50bHkgaWYgd2UgdHJ5IHRvIGNsZWFyL3Rlc3Qgb3V0c2lkZSB0aGUgcmFuZ2UuCisgIENQVV9DTFIoQ1BVX1NFVFNJWkUsICZzZXQpOworICBBU1NFUlRfRkFMU0UoQ1BVX0lTU0VUKENQVV9TRVRTSVpFLCAmc2V0KSk7Cit9CisKK1RFU1Qoc2NoZWQsIGNwdV9lcXVhbCkgeworICBjcHVfc2V0X3Qgc2V0MTsKKyAgY3B1X3NldF90IHNldDI7CisKKyAgQ1BVX1pFUk8oJnNldDEpOworICBDUFVfWkVSTygmc2V0Mik7CisgIENQVV9TRVQoMSwgJnNldDEpOworICBBU1NFUlRfRkFMU0UoQ1BVX0VRVUFMKCZzZXQxLCAmc2V0MikpOworICBDUFVfU0VUKDEsICZzZXQyKTsKKyAgQVNTRVJUX1RSVUUoQ1BVX0VRVUFMKCZzZXQxLCAmc2V0MikpOworfQorCitURVNUKHNjaGVkLCBjcHVfb3ApIHsKKyAgY3B1X3NldF90IHNldDE7CisgIGNwdV9zZXRfdCBzZXQyOworICBjcHVfc2V0X3Qgc2V0MzsKKworICBDUFVfWkVSTygmc2V0MSk7CisgIENQVV9aRVJPKCZzZXQyKTsKKyAgQ1BVX1pFUk8oJnNldDMpOworICBDUFVfU0VUKDAsICZzZXQxKTsKKyAgQ1BVX1NFVCgwLCAmc2V0Mik7CisgIENQVV9TRVQoMSwgJnNldDIpOworCisgIENQVV9BTkQoJnNldDMsICZzZXQxLCAmc2V0Mik7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgQ1BVX1NFVFNJWkU7IGkrKykgeworICAgIEFTU0VSVF9FUShpID09IDAsIENQVV9JU1NFVChpLCAmc2V0MykpOworICB9CisKKyAgQ1BVX1hPUigmc2V0MywgJnNldDEsICZzZXQyKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBDUFVfU0VUU0laRTsgaSsrKSB7CisgICAgQVNTRVJUX0VRKGkgPT0gMSwgQ1BVX0lTU0VUKGksICZzZXQzKSk7CisgIH0KKworICBDUFVfT1IoJnNldDMsICZzZXQxLCAmc2V0Mik7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgQ1BVX1NFVFNJWkU7IGkrKykgeworICAgIEFTU0VSVF9FUShpID09IDAgfHwgaSA9PSAxLCBDUFVfSVNTRVQoaSwgJnNldDMpKTsKKyAgfQorfQorCisKK1RFU1Qoc2NoZWQsIGNwdV9hbGxvY19zbWFsbCkgeworICBjcHVfc2V0X3QqIHNldCA9IENQVV9BTExPQygxNyk7CisgIHNpemVfdCBzaXplID0gQ1BVX0FMTE9DX1NJWkUoMTcpOworCisgIENQVV9aRVJPX1Moc2l6ZSwgc2V0KTsKKyAgQVNTRVJUX0VRKDAsIENQVV9DT1VOVF9TKHNpemUsIHNldCkpOworICBDUFVfU0VUX1MoMTYsIHNpemUsIHNldCk7CisgIEFTU0VSVF9UUlVFKENQVV9JU1NFVF9TKDE2LCBzaXplLCBzZXQpKTsKKworICBDUFVfRlJFRShzZXQpOworfQorCitURVNUKHNjaGVkLCBjcHVfYWxsb2NfYmlnKSB7CisgIGNwdV9zZXRfdCogc2V0ID0gQ1BVX0FMTE9DKDEwICogQ1BVX1NFVFNJWkUpOworICBzaXplX3Qgc2l6ZSA9IENQVV9BTExPQ19TSVpFKDEwICogQ1BVX1NFVFNJWkUpOworCisgIENQVV9aRVJPX1Moc2l6ZSwgc2V0KTsKKyAgQVNTRVJUX0VRKDAsIENQVV9DT1VOVF9TKHNpemUsIHNldCkpOworICBDUFVfU0VUX1MoQ1BVX1NFVFNJWkUsIHNpemUsIHNldCk7CisgIEFTU0VSVF9UUlVFKENQVV9JU1NFVF9TKENQVV9TRVRTSVpFLCBzaXplLCBzZXQpKTsKKworICBDUFVfRlJFRShzZXQpOworfQorCitURVNUKHNjaGVkLCBjcHVfc19tYWNyb3MpIHsKKyAgaW50IHNldF9zaXplID0gNjQ7CisgIHNpemVfdCBzaXplID0gQ1BVX0FMTE9DX1NJWkUoc2V0X3NpemUpOworICBjcHVfc2V0X3QqIHNldCA9IENQVV9BTExPQyhzZXRfc2l6ZSk7CisKKyAgQ1BVX1pFUk9fUyhzaXplLCBzZXQpOworICBmb3IgKGludCBpID0gMDsgaSA8IHNldF9zaXplOyBpKyspIHsKKyAgICBBU1NFUlRfRkFMU0UoQ1BVX0lTU0VUX1MoaSwgc2l6ZSwgc2V0KSk7CisgICAgQ1BVX1NFVF9TKGksIHNpemUsIHNldCk7CisgICAgQVNTRVJUX1RSVUUoQ1BVX0lTU0VUX1MoaSwgc2l6ZSwgc2V0KSk7CisgICAgQVNTRVJUX0VRKGkgKyAxLCBDUFVfQ09VTlRfUyhzaXplLCBzZXQpKTsKKyAgfQorCisgIGZvciAoaW50IGkgPSAwOyBpIDwgc2V0X3NpemU7IGkrKykgeworICAgIENQVV9DTFJfUyhpLCBzaXplLCBzZXQpOworICAgIEFTU0VSVF9GQUxTRShDUFVfSVNTRVRfUyhpLCBzaXplLCBzZXQpKTsKKyAgICBBU1NFUlRfRVEoc2V0X3NpemUgLSBpIC0gMSwgQ1BVX0NPVU5UX1Moc2l6ZSwgc2V0KSk7CisgIH0KKworICBDUFVfRlJFRShzZXQpOworfQorCitURVNUKHNjaGVkLCBjcHVfb3Bfc19tYWNyb3MpIHsKKyAgaW50IHNldF9zaXplMSA9IDY0OworICBpbnQgc2V0X3NpemUyID0gc2V0X3NpemUxICogMjsKKyAgaW50IHNldF9zaXplMyA9IHNldF9zaXplMSAqIDM7CisgIHNpemVfdCBzaXplMSA9IENQVV9BTExPQ19TSVpFKHNldF9zaXplMSk7CisgIHNpemVfdCBzaXplMiA9IENQVV9BTExPQ19TSVpFKHNldF9zaXplMik7CisgIHNpemVfdCBzaXplMyA9IENQVV9BTExPQ19TSVpFKHNldF9zaXplMyk7CisKKyAgY3B1X3NldF90KiBzZXQxID0gQ1BVX0FMTE9DKHNldF9zaXplMSk7CisgIGNwdV9zZXRfdCogc2V0MiA9IENQVV9BTExPQyhzZXRfc2l6ZTIpOworICBjcHVfc2V0X3QqIHNldDMgPSBDUFVfQUxMT0Moc2V0X3NpemUzKTsKKyAgQ1BVX1pFUk9fUyhzaXplMSwgc2V0MSk7CisgIENQVV9aRVJPX1Moc2l6ZTIsIHNldDIpOworICBDUFVfWkVST19TKHNpemUzLCBzZXQzKTsKKworICBDUFVfU0VUX1MoMCwgc2l6ZTEsIHNldDEpOworICBDUFVfU0VUX1MoMCwgc2l6ZTIsIHNldDIpOworICBDUFVfU0VUX1MoMSwgc2l6ZTMsIHNldDIpOworCisgIENQVV9BTkRfUyhzaXplMSwgc2V0Mywgc2V0MSwgc2V0Mik7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgc2V0X3NpemUzOyBpKyspIHsKKyAgICBBU1NFUlRfRVEoaSA9PSAwLCBDUFVfSVNTRVRfUyhpLCBzaXplMywgc2V0MykpOworICB9CisKKyAgQ1BVX09SX1Moc2l6ZTEsIHNldDMsIHNldDEsIHNldDIpOworICBmb3IgKGludCBpID0gMDsgaSA8IHNldF9zaXplMzsgaSsrKSB7CisgICAgQVNTRVJUX0VRKGkgPT0gMCB8fCBpID09IDEsIENQVV9JU1NFVF9TKGksIHNpemUzLCBzZXQzKSk7CisgIH0KKworICBDUFVfWE9SX1Moc2l6ZTEsIHNldDMsIHNldDEsIHNldDIpOworICBmb3IgKGludCBpID0gMDsgaSA8IHNldF9zaXplMzsgaSsrKSB7CisgICAgQVNTRVJUX0VRKGkgPT0gMSwgQ1BVX0lTU0VUX1MoaSwgc2l6ZTMsIHNldDMpKTsKKyAgfQorCisgIENQVV9GUkVFKHNldDEpOworICBDUFVfRlJFRShzZXQyKTsKKyAgQ1BVX0ZSRUUoc2V0Myk7Cit9CisKK1RFU1Qoc2NoZWQsIGNwdV9lcXVhbF9zKSB7CisgIGludCBzZXRfc2l6ZTEgPSA2NDsKKyAgaW50IHNldF9zaXplMiA9IHNldF9zaXplMSAqIDI7CisgIHNpemVfdCBzaXplMSA9IENQVV9BTExPQ19TSVpFKHNldF9zaXplMSk7CisgIHNpemVfdCBzaXplMiA9IENQVV9BTExPQ19TSVpFKHNldF9zaXplMik7CisKKyAgY3B1X3NldF90KiBzZXQxID0gQ1BVX0FMTE9DKHNldF9zaXplMSk7CisgIGNwdV9zZXRfdCogc2V0MiA9IENQVV9BTExPQyhzZXRfc2l6ZTIpOworCisgIENQVV9aRVJPX1Moc2l6ZTEsIHNldDEpOworICBDUFVfWkVST19TKHNpemUyLCBzZXQyKTsKKworICBDUFVfU0VUX1MoMCwgc2l6ZTEsIHNldDEpOworICBBU1NFUlRfVFJVRShDUFVfRVFVQUxfUyhzaXplMSwgc2V0MSwgc2V0MSkpOworICBBU1NFUlRfRkFMU0UoQ1BVX0VRVUFMX1Moc2l6ZTEsIHNldDEsIHNldDIpKTsKKyAgQ1BVX1NFVF9TKDAsIHNpemUyLCBzZXQyKTsKKyAgQVNTRVJUX1RSVUUoQ1BVX0VRVUFMX1Moc2l6ZTEsIHNldDEsIHNldDIpKTsKKworICBDUFVfRlJFRShzZXQxKTsKKyAgQ1BVX0ZSRUUoc2V0Mik7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zZWFyY2hfdGVzdC5jcHAgYi90ZXN0cy9zZWFyY2hfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkwMGM4OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NlYXJjaF90ZXN0LmNwcApAQCAtMCwwICsxLDIxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8c2VhcmNoLmg+CisKK3N0YXRpYyBpbnQgaW50X2NtcChjb25zdCB2b2lkKiBsaHMsIGNvbnN0IHZvaWQqIHJocykgeworICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50Kj4ocmhzKSAtICpyZWludGVycHJldF9jYXN0PGNvbnN0IGludCo+KGxocyk7Cit9CisKK1RFU1Qoc2VhcmNoLCBsZmluZF9sc2VhcmNoKSB7CisgIGludCB4c1sxMF07CisgIG1lbXNldCh4cywgMCwgc2l6ZW9mKHhzKSk7CisgIHNpemVfdCB4X3NpemUgPSAwOworCisgIGludCBuZWVkbGU7CisKKyAgLy8gbGZpbmQoMykgY2FuJ3QgZmluZCAnMicgaW4gdGhlIGVtcHR5IHRhYmxlLgorICBuZWVkbGUgPSAyOworICBBU1NFUlRfRVEobnVsbHB0ciwgbGZpbmQoJm5lZWRsZSwgeHMsICZ4X3NpemUsIHNpemVvZih4c1swXSksIGludF9jbXApKTsKKyAgQVNTRVJUX0VRKDBVLCB4X3NpemUpOworCisgIC8vIGxzZWFyY2goMykgd2lsbCBhZGQgaXQuCisgIEFTU0VSVF9FUSgmeHNbMF0sIGxzZWFyY2goJm5lZWRsZSwgeHMsICZ4X3NpemUsIHNpemVvZih4c1swXSksIGludF9jbXApKTsKKyAgQVNTRVJUX0VRKDIsIHhzWzBdKTsKKyAgQVNTRVJUX0VRKDFVLCB4X3NpemUpOworCisgIC8vIEFuZCB0aGVuIGxmaW5kKDMpIGNhbiBmaW5kIGl0LgorICBBU1NFUlRfRVEoJnhzWzBdLCBsZmluZCgmbmVlZGxlLCB4cywgJnhfc2l6ZSwgc2l6ZW9mKHhzWzBdKSwgaW50X2NtcCkpOworICBBU1NFUlRfRVEoMVUsIHhfc2l6ZSk7CisKKyAgLy8gSW5zZXJ0aW5nIGEgZHVwbGljYXRlIGRvZXMgbm90aGluZyAoYnV0IHJldHVybnMgdGhlIGV4aXN0aW5nIGVsZW1lbnQpLgorICBBU1NFUlRfRVEoJnhzWzBdLCBsc2VhcmNoKCZuZWVkbGUsIHhzLCAmeF9zaXplLCBzaXplb2YoeHNbMF0pLCBpbnRfY21wKSk7CisgIEFTU0VSVF9FUSgxVSwgeF9zaXplKTsKK30KKworc3RydWN0IG5vZGUgeworICBub2RlKGNvbnN0IGNoYXIqIHMpIDogcyhzdHJkdXAocykpIHt9CisKKyAgY2hhciogczsKK307CisKK3N0YXRpYyBpbnQgbm9kZV9jbXAoY29uc3Qgdm9pZCogbGhzLCBjb25zdCB2b2lkKiByaHMpIHsKKyAgcmV0dXJuIHN0cmNtcChyZWludGVycHJldF9jYXN0PGNvbnN0IG5vZGUqPihsaHMpLT5zLCByZWludGVycHJldF9jYXN0PGNvbnN0IG5vZGUqPihyaHMpLT5zKTsKK30KKworc3RhdGljIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBnX25vZGVzOworCitzdGF0aWMgdm9pZCBub2RlX3dhbGsoY29uc3Qgdm9pZCogcCwgVklTSVQgb3JkZXIsIGludCkgeworICBjb25zdCBub2RlKiBuID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgbm9kZSogY29uc3QqPihwKTsKKyAgaWYgKG9yZGVyID09IHBvc3RvcmRlciB8fCBvcmRlciA9PSBsZWFmKSAgeworICAgIGdfbm9kZXMucHVzaF9iYWNrKG4tPnMpOworICB9Cit9CisKK3N0YXRpYyBzaXplX3QgZ19mcmVlX2NhbGxzOworCitzdGF0aWMgdm9pZCBub2RlX2ZyZWUodm9pZCogcCkgeworICBub2RlKiBuID0gcmVpbnRlcnByZXRfY2FzdDxub2RlKj4ocCk7CisgIGZyZWUobi0+cyk7CisgICsrZ19mcmVlX2NhbGxzOworfQorCitURVNUKHNlYXJjaCwgdGZpbmRfdHNlYXJjaF90d2Fsa190ZGVzdHJveSkgeworICB2b2lkKiByb290ID0gbnVsbHB0cjsKKworICBub2RlIG4xKCJ6Iik7CisgIG5vZGUgbjIoImEiKTsKKyAgbm9kZSBuMygibSIpOworCisgIC8vIHRmaW5kKDMpIGNhbid0IGZpbmQgYW55dGhpbmcgaW4gdGhlIGVtcHR5IHRyZWUuCisgIEFTU0VSVF9FUShudWxscHRyLCB0ZmluZCgmbjEsICZyb290LCBub2RlX2NtcCkpOworICBBU1NFUlRfRVEobnVsbHB0ciwgdGZpbmQoJm4yLCAmcm9vdCwgbm9kZV9jbXApKTsKKyAgQVNTRVJUX0VRKG51bGxwdHIsIHRmaW5kKCZuMywgJnJvb3QsIG5vZGVfY21wKSk7CisKKyAgLy8gdHNlYXJjaCgzKSBpbnNlcnRzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ldyBub2RlLgorICB2b2lkKiBpMSA9IHRzZWFyY2goJm4xLCAmcm9vdCwgbm9kZV9jbXApOworICBBU1NFUlRfTkUobnVsbHB0ciwgaTEpOworCisgIC8vIC4uLndoaWNoIHRmaW5kKDMpIHdpbGwgdGhlbiByZXR1cm4uCisgIEFTU0VSVF9FUShpMSwgdGZpbmQoJm4xLCAmcm9vdCwgbm9kZV9jbXApKTsKKyAgQVNTRVJUX0VRKG51bGxwdHIsIHRmaW5kKCZuMiwgJnJvb3QsIG5vZGVfY21wKSk7CisgIEFTU0VSVF9FUShudWxscHRyLCB0ZmluZCgmbjMsICZyb290LCBub2RlX2NtcCkpOworCisgIC8vIEFkZCB0aGUgb3RoZXIgbm9kZXMuCisgIEFTU0VSVF9ORShudWxscHRyLCB0c2VhcmNoKCZuMiwgJnJvb3QsIG5vZGVfY21wKSk7CisgIEFTU0VSVF9ORShudWxscHRyLCB0c2VhcmNoKCZuMywgJnJvb3QsIG5vZGVfY21wKSk7CisKKyAgLy8gVXNlIHR3YWxrKDMpIHRvIGl0ZXJhdGUgb3ZlciB0aGUgbm9kZXMuCisgIGdfbm9kZXMuY2xlYXIoKTsKKyAgdHdhbGsocm9vdCwgbm9kZV93YWxrKTsKKyAgQVNTRVJUX0VRKDNVLCBnX25vZGVzLnNpemUoKSk7CisgIEFTU0VSVF9FUSgiYSIsIGdfbm9kZXNbMF0pOworICBBU1NFUlRfRVEoIm0iLCBnX25vZGVzWzFdKTsKKyAgQVNTRVJUX0VRKCJ6IiwgZ19ub2Rlc1syXSk7CisKKyAgLy8gdGRlc3Ryb3koMykgcmVtb3ZlcyBub2RlcyB1bmRlciBhIG5vZGUsIGNhbGxpbmcgb3VyIGNhbGxiYWNrIHRvIGRlc3Ryb3kgZWFjaCBvbmUuCisgIGdfZnJlZV9jYWxscyA9IDA7CisgIHRkZXN0cm95KHJvb3QsIG5vZGVfZnJlZSk7CisgIEFTU0VSVF9FUSgzVSwgZ19mcmVlX2NhbGxzKTsKK30KKworc3RydWN0IHBvZF9ub2RlIHsKKyAgcG9kX25vZGUoaW50IGkpIDogaShpKSB7fQorICBpbnQgaTsKK307CisKK3N0YXRpYyBpbnQgcG9kX25vZGVfY21wKGNvbnN0IHZvaWQqIGxocywgY29uc3Qgdm9pZCogcmhzKSB7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHBvZF9ub2RlKj4ocmhzKS0+aSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgcG9kX25vZGUqPihsaHMpLT5pOworfQorCitURVNUKHNlYXJjaCwgdGRlbGV0ZSkgeworICB2b2lkKiByb290ID0gbnVsbHB0cjsKKworICBwb2Rfbm9kZSBuMSgxMjMpOworICBBU1NFUlRfTkUobnVsbHB0ciwgdHNlYXJjaCgmbjEsICZyb290LCBwb2Rfbm9kZV9jbXApKTsKKworICAvLyB0ZGVsZXRlKDMpIGxlYWtzIG4xLgorICBwb2Rfbm9kZSBub3RfdGhlcmUoNDU2KTsKKyAgQVNTRVJUX0VRKG51bGxwdHIsIHRkZWxldGUoJm5vdF90aGVyZSwgJnJvb3QsIHBvZF9ub2RlX2NtcCkpOworICBBU1NFUlRfTkUobnVsbHB0ciwgdGRlbGV0ZSgmbjEsICZyb290LCBwb2Rfbm9kZV9jbXApKTsKK30KKworc3RydWN0IHFfbm9kZSB7CisgIHFfbm9kZShpbnQgaSkgOiBpKGkpIHt9CisKKyAgcV9ub2RlKiBuZXh0OworICBxX25vZGUqIHByZXY7CisKKyAgaW50IGk7Cit9OworCitURVNUKHNlYXJjaCwgaW5zcXVlX3JlbXF1ZSkgeworICBxX25vZGUgemVybygwKTsKKyAgcV9ub2RlIG9uZSgxKTsKKyAgcV9ub2RlIHR3bygyKTsKKworICAvLyBMaW5lYXIgKG5vdCBjaXJjdWxhcikuCisKKyAgaW5zcXVlKCZ6ZXJvLCBOVUxMKTsKKyAgaW5zcXVlKCZvbmUsICZ6ZXJvKTsKKyAgaW5zcXVlKCZ0d28sICZvbmUpOworCisgIGludCBleHBlY3RlZCA9IDA7CisgIGZvciAocV9ub2RlKiBxID0gJnplcm87IHEgIT0gTlVMTDsgcSA9IHEtPm5leHQpIHsKKyAgICBBU1NFUlRfRVEoZXhwZWN0ZWQsIHEtPmkpOworICAgICsrZXhwZWN0ZWQ7CisgIH0KKyAgQVNTRVJUX0VRKDMsIGV4cGVjdGVkKTsKKworICBmb3IgKHFfbm9kZSogcSA9ICZ0d287IHEgIT0gTlVMTDsgcSA9IHEtPnByZXYpIHsKKyAgICAtLWV4cGVjdGVkOworICAgIEFTU0VSVF9FUShleHBlY3RlZCwgcS0+aSk7CisgIH0KKyAgQVNTRVJUX0VRKDAsIGV4cGVjdGVkKTsKKworICBxX25vZGUqIGhlYWQgPSAmemVybzsKKworICByZW1xdWUoJm9uZSk7CisgIEFTU0VSVF9FUSgwLCBoZWFkLT5pKTsKKyAgQVNTRVJUX0VRKDIsIGhlYWQtPm5leHQtPmkpOworICBBU1NFUlRfRVEobnVsbHB0ciwgaGVhZC0+bmV4dC0+bmV4dCk7CisKKyAgcmVtcXVlKCZ0d28pOworICBBU1NFUlRfRVEoMCwgaGVhZC0+aSk7CisgIEFTU0VSVF9FUShudWxscHRyLCBoZWFkLT5uZXh0KTsKKworICByZW1xdWUoJnplcm8pOworCisgIC8vIENpcmN1bGFyLgorCisgIHplcm8ubmV4dCA9ICZ6ZXJvOworICB6ZXJvLnByZXYgPSAmemVybzsKKworICBpbnNxdWUoJm9uZSwgJnplcm8pOworICBpbnNxdWUoJnR3bywgJm9uZSk7CisKKyAgQVNTRVJUX0VRKDAsIGhlYWQtPmkpOworICBBU1NFUlRfRVEoMSwgaGVhZC0+bmV4dC0+aSk7CisgIEFTU0VSVF9FUSgyLCBoZWFkLT5uZXh0LT5uZXh0LT5pKTsKKyAgQVNTRVJUX0VRKDAsIGhlYWQtPm5leHQtPm5leHQtPm5leHQtPmkpOworICBBU1NFUlRfRVEoMSwgaGVhZC0+bmV4dC0+bmV4dC0+bmV4dC0+bmV4dC0+aSk7CisgIEFTU0VSVF9FUSgyLCBoZWFkLT5uZXh0LT5uZXh0LT5uZXh0LT5uZXh0LT5uZXh0LT5pKTsKKworICByZW1xdWUoJm9uZSk7CisgIEFTU0VSVF9FUSgwLCBoZWFkLT5pKTsKKyAgQVNTRVJUX0VRKDIsIGhlYWQtPm5leHQtPmkpOworICBBU1NFUlRfRVEoMCwgaGVhZC0+bmV4dC0+bmV4dC0+aSk7CisgIEFTU0VSVF9FUSgyLCBoZWFkLT5uZXh0LT5uZXh0LT5uZXh0LT5pKTsKKworICByZW1xdWUoJnR3byk7CisgIEFTU0VSVF9FUSgwLCBoZWFkLT5pKTsKKyAgQVNTRVJUX0VRKDAsIGhlYWQtPm5leHQtPmkpOworCisgIHJlbXF1ZSgmemVybyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zaWduYWxfdGVzdC5jcHAgYi90ZXN0cy9zaWduYWxfdGVzdC5jcHAKaW5kZXggYTdlNWI5YS4uODliODA4OCAxMDA2NDQKLS0tIGEvdGVzdHMvc2lnbmFsX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL3NpZ25hbF90ZXN0LmNwcApAQCAtMTQ2LDEwICsxNDYsMTAgQEAKICAgQVNTRVJUX0VRKFNJR0FMUk0sIHJlY2VpdmVkX3NpZ25hbCk7CiB9CiAKLXN0YXRpYyBpbnQgZ1NpZ1N1c3BlbmRUZXN0SGVscGVyQ2FsbENvdW50ID0gMDsKK3N0YXRpYyBpbnQgZ19zaWdzdXNwZW5kX3Rlc3RfaGVscGVyX2NhbGxfY291bnQgPSAwOwogCiBzdGF0aWMgdm9pZCBTaWdTdXNwZW5kVGVzdEhlbHBlcihpbnQpIHsKLSAgKytnU2lnU3VzcGVuZFRlc3RIZWxwZXJDYWxsQ291bnQ7CisgICsrZ19zaWdzdXNwZW5kX3Rlc3RfaGVscGVyX2NhbGxfY291bnQ7CiB9CiAKIFRFU1Qoc2lnbmFsLCBzaWdzdXNwZW5kX3NpZ3BlbmRpbmcpIHsKQEAgLTE3Miw3ICsxNzIsNyBAQAogCiAgIC8vIFJhaXNlIFNJR0FMUk0gYW5kIGNoZWNrIG91ciBzaWduYWwgaGFuZGxlciB3YXNuJ3QgY2FsbGVkLgogICByYWlzZShTSUdBTFJNKTsKLSAgQVNTRVJUX0VRKDAsIGdTaWdTdXNwZW5kVGVzdEhlbHBlckNhbGxDb3VudCk7CisgIEFTU0VSVF9FUSgwLCBnX3NpZ3N1c3BlbmRfdGVzdF9oZWxwZXJfY2FsbF9jb3VudCk7CiAKICAgLy8gV2Ugc2hvdWxkIG5vdyBoYXZlIGEgcGVuZGluZyBTSUdBTFJNIGJ1dCBub3RoaW5nIGVsc2UuCiAgIHNpZ2VtcHR5c2V0KCZwZW5kaW5nKTsKQEAgLTE4OCw3ICsxODgsNyBAQAogICBBU1NFUlRfRVEoLTEsIHNpZ3N1c3BlbmQoJm5vdF9TSUdBTFJNKSk7CiAgIEFTU0VSVF9FUShFSU5UUiwgZXJybm8pOwogICAvLyAuLi5hbmQgY2hlY2sgdGhhdCB3ZSBub3cgcmVjZWl2ZSBvdXIgcGVuZGluZyBTSUdBTFJNLgotICBBU1NFUlRfRVEoMSwgZ1NpZ1N1c3BlbmRUZXN0SGVscGVyQ2FsbENvdW50KTsKKyAgQVNTRVJUX0VRKDEsIGdfc2lnc3VzcGVuZF90ZXN0X2hlbHBlcl9jYWxsX2NvdW50KTsKIAogICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBzZXQuCiAgIEFTU0VSVF9FUSgwLCBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9yaWdpbmFsX3NldCwgTlVMTCkpOwpAQCAtMjM4LDMgKzIzOCwzNSBAQAogICAvLyBQdXQgZXZlcnl0aGluZyBiYWNrIGhvdyBpdCB3YXMuCiAgIEFTU0VSVF9FUSgwLCBzaWdhY3Rpb24oU0lHQUxSTSwgJm9yaWdpbmFsX3NhLCBOVUxMKSk7CiB9CisKK1RFU1Qoc2lnbmFsLCBzeXNfc2lnbmFtZSkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgQVNTRVJUX1RSVUUoc3lzX3NpZ25hbWVbMF0gPT0gTlVMTCk7CisgIEFTU0VSVF9TVFJFUSgiSFVQIiwgc3lzX3NpZ25hbWVbU0lHSFVQXSk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZgorfQorCitURVNUKHNpZ25hbCwgc3lzX3NpZ2xpc3QpIHsKKyAgQVNTRVJUX1RSVUUoc3lzX3NpZ2xpc3RbMF0gPT0gTlVMTCk7CisgIEFTU0VSVF9TVFJFUSgiSGFuZ3VwIiwgc3lzX3NpZ2xpc3RbU0lHSFVQXSk7Cit9CisKK1RFU1Qoc2lnbmFsLCBsaW1pdHMpIHsKKyAgLy8gVGhpcyBjb21lcyBmcm9tIHRoZSBrZXJuZWwuCisgIEFTU0VSVF9FUSgzMiwgX19TSUdSVE1JTik7CisKKyAgLy8gV2UgcmVzZXJ2ZSBhIG5vbi16ZXJvIG51bWJlciBhdCB0aGUgYm90dG9tIGZvciBvdXJzZWx2ZXMuCisgIEFTU0VSVF9HVChTSUdSVE1JTiwgX19TSUdSVE1JTik7CisKKyAgLy8gTUlQUyBoYXMgbW9yZSBzaWduYWxzIHRoYW4gZXZlcnlvbmUgZWxzZS4KKyNpZiBkZWZpbmVkKF9fbWlwc19fKQorICBBU1NFUlRfRVEoMTI4LCBfX1NJR1JUTUFYKTsKKyNlbHNlCisgIEFTU0VSVF9FUSg2NCwgX19TSUdSVE1BWCk7CisjZW5kaWYKKworICAvLyBXZSBkb24ndCBjdXJyZW50bHkgcmVzZXJ2ZSBhbnkgYXQgdGhlIHRvcC4KKyAgQVNTRVJUX0VRKFNJR1JUTUFYLCBfX1NJR1JUTUFYKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3NzdHJlYW1fdGVzdC5jcHAgYi90ZXN0cy9zc3RyZWFtX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1Zjg2OTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zc3RyZWFtX3Rlc3QuY3BwCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisvLyBUT0RPOiBtb3ZlIHRoaXMgdGVzdCB0byBsaWJjeHguCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgQ2hlY2tPdmVyZmxvdyhUIGV4cGVjdGVkLCBjb25zdCBjaGFyKiB2YWx1ZSwgYm9vbCBzaG91bGRfb3ZlcmZsb3cpIHsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3ModmFsdWUpOworICBUIHJlc3VsdCA9IFQoMCk7CisgIHNzID4+IHJlc3VsdDsKKyAgRVhQRUNUX0ZBTFNFKHNzLmJhZCgpKSA8PCB2YWx1ZSA8PCAnICcgPDwgaW50NjRfdChyZXN1bHQpOworICBFWFBFQ1RfRVEoc2hvdWxkX292ZXJmbG93LCBzcy5mYWlsKCkpIDw8IHZhbHVlIDw8ICcgJyA8PCBpbnQ2NF90KHJlc3VsdCk7CisgIGlmICghc2hvdWxkX292ZXJmbG93KSB7IC8vIGdsaWJjIHdyaXRlcyBnYXJiYWdlIG9uIG92ZXJmbG93LgorICAgIEFTU0VSVF9FUShleHBlY3RlZCwgcmVzdWx0KSA8PCB2YWx1ZTsKKyAgfQorfQorCitURVNUKHNzdHJlYW0sIF9fZ2V0X2ludGVnZXJfb3ZlcmZsb3dfOCkgeworICAvLyBUaGUgdXN1YWwgYnl0ZS9jaGFyIGNvbmZ1c2lvbiBtZWFucyB0aGF0IG9wZXJhdG9yPj4gb24gOC1iaXQgdHlwZXMgaXMgdXNlZAorICAvLyBmb3IgY2hhcnMsIHNvIHRoZXJlJ3Mgbm8gcG9zc2liaWxpdHkgb2Ygb3ZlcmZsb3cuCit9CisKK1RFU1Qoc3N0cmVhbSwgX19nZXRfaW50ZWdlcl9vdmVyZmxvd18xNikgeworICBDaGVja092ZXJmbG93PGludDE2X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MTZfdD46Om1pbigpLCAiLTMyNzY4IiwgZmFsc2UpOworICBDaGVja092ZXJmbG93PGludDE2X3Q+KDAsICItMzI3NjkiLCB0cnVlKTsKKyAgQ2hlY2tPdmVyZmxvdzxpbnQxNl90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDE2X3Q+OjptYXgoKSwgIjMyNzY3IiwgZmFsc2UpOworICBDaGVja092ZXJmbG93PGludDE2X3Q+KDAsICIzMjc2OCIsIHRydWUpOworCisgIENoZWNrT3ZlcmZsb3c8dWludDE2X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSwgIjY1NTM1IiwgZmFsc2UpOworICBDaGVja092ZXJmbG93PHVpbnQxNl90PigwLCAiNjU1MzYiLCB0cnVlKTsKK30KKworVEVTVChzc3RyZWFtLCBfX2dldF9pbnRlZ2VyX292ZXJmbG93XzMyKSB7CisgIENoZWNrT3ZlcmZsb3c8aW50MzJfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCksICItMjE0NzQ4MzY0OCIsIGZhbHNlKTsKKyAgQ2hlY2tPdmVyZmxvdzxpbnQzMl90PigwLCAiLTIxNDc0ODM2NDkiLCB0cnVlKTsKKyAgQ2hlY2tPdmVyZmxvdzxpbnQzMl90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSwgIjIxNDc0ODM2NDciLCBmYWxzZSk7CisgIENoZWNrT3ZlcmZsb3c8aW50MzJfdD4oMCwgIjIxNDc0ODM2NDgiLCB0cnVlKTsKKworICBDaGVja092ZXJmbG93PHVpbnQzMl90PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICI0Mjk0OTY3Mjk1IiwgZmFsc2UpOworICBDaGVja092ZXJmbG93PHVpbnQzMl90PigwLCAiNDI5NDk2NzI5NiIsIHRydWUpOworfQorCitURVNUKHNzdHJlYW0sIF9fZ2V0X2ludGVnZXJfb3ZlcmZsb3dfNjQpIHsKKyAgQ2hlY2tPdmVyZmxvdzxpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSwgIi05MjIzMzcyMDM2ODU0Nzc1ODA4IiwgZmFsc2UpOworICBDaGVja092ZXJmbG93PGludDY0X3Q+KDAsICItOTIyMzM3MjAzNjg1NDc3NTgwOSIsIHRydWUpOworICBDaGVja092ZXJmbG93PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpLCAiOTIyMzM3MjAzNjg1NDc3NTgwNyIsIGZhbHNlKTsKKyAgQ2hlY2tPdmVyZmxvdzxpbnQ2NF90PigwLCAiOTIyMzM3MjAzNjg1NDc3NTgwOCIsIHRydWUpOworCisgIENoZWNrT3ZlcmZsb3c8dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSwgIjE4NDQ2NzQ0MDczNzA5NTUxNjE1IiwgZmFsc2UpOworICBDaGVja092ZXJmbG93PHVpbnQ2NF90PigwLCAiMTg0NDY3NDQwNzM3MDk1NTE2MTYiLCB0cnVlKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0YWNrX3Byb3RlY3Rvcl90ZXN0LmNwcCBiL3Rlc3RzL3N0YWNrX3Byb3RlY3Rvcl90ZXN0LmNwcAppbmRleCAyYmE4YTg3Li5mZWEyNGQ4IDEwMDY0NAotLS0gYS90ZXN0cy9zdGFja19wcm90ZWN0b3JfdGVzdC5jcHAKKysrIGIvdGVzdHMvc3RhY2tfcHJvdGVjdG9yX3Rlc3QuY3BwCkBAIC0yNywxNyArMjcsMTMgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzZXQ+CiAKLSNpZmRlZiBfX0dMSUJDX18KLQorI2lmIGRlZmluZWQoX19HTElCQ19fKQogLy8gZ2xpYmMgZG9lc24ndCBleHBvc2UgZ2V0dGlkKDIpLgogcGlkX3QgZ2V0dGlkKCkgeyByZXR1cm4gc3lzY2FsbChfX05SX2dldHRpZCk7IH0KLQotI2VuZGlmCi0KLSNpZmRlZiBfX2kzODZfXworI2VuZGlmIC8vIF9fR0xJQkNfXwogCiAvLyBGb3IgeDg2LCBiaW9uaWMgYW5kIGdsaWJjIGhhdmUgcGVyLXRocmVhZCBzdGFjayBndWFyZCB2YWx1ZXMgKGFsbCBpZGVudGljYWwpLgotCisjaWYgZGVmaW5lZChfX2kzODZfXykKIHN0YXRpYyB1aW50MzJfdCBHZXRHdWFyZEZyb21UbHMoKSB7CiAgIHVpbnQzMl90IGd1YXJkOwogICBhc20gKCJtb3YgJSVnczoweDE0LCAlMCI6ICI9ZCIgKGd1YXJkKSk7CkBAIC03MSw4ICs2NywxMCBAQAogICBjaGVja2VyLT5DaGVjaygpOwogICByZXR1cm4gTlVMTDsKIH0KKyNlbmRpZiAvLyBfX2kzODZfXwogCiBURVNUKHN0YWNrX3Byb3RlY3Rvciwgc2FtZV9ndWFyZF9wZXJfdGhyZWFkKSB7CisjaWYgZGVmaW5lZChfX2kzODZfXykKICAgc3RhY2tfcHJvdGVjdG9yX2NoZWNrZXIgY2hlY2tlcjsKICAgc2l6ZV90IHRocmVhZF9jb3VudCA9IDEwOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRocmVhZF9jb3VudDsgKytpKSB7CkBAIC04NiwyNCArODQsMTkgQEAKIAogICAvLyBiaW9uaWMgYW5kIGdsaWJjIHVzZSB0aGUgc2FtZSBndWFyZCBmb3IgZXZlcnkgdGhyZWFkLgogICBBU1NFUlRfRVEoMVUsIGNoZWNrZXIuZ3VhcmRzLnNpemUoKSk7CisjZWxzZSAvLyBfX2kzODZfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX2kzODZfXwogfQogCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19CSU9OSUNfXykgfHwgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fbWlwc19fKQotCiAvLyBGb3IgQVJNIGFuZCBNSVBTLCBnbGliYyBoYXMgYSBnbG9iYWwgc3RhY2sgY2hlY2sgZ3VhcmQgdmFsdWUuCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKSB8fCBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19taXBzX18pCisjZGVmaW5lIFRFU1RfU1RBQ0tfQ0hLX0dVQVJECiAKIC8vIEJpb25pYyBoYXMgdGhlIGdsb2JhbCBmb3IgeDg2IHRvbywgdG8gc3VwcG9ydCBiaW5hcmllcyB0aGF0IGNhbiBydW4gb24KIC8vIEFuZHJvaWQgcmVsZWFzZXMgdGhhdCBkaWRuJ3QgaW1wbGVtZW50IHRoZSBUTFMgZ3VhcmQgdmFsdWUuCi0KIGV4dGVybiAiQyIgdWludHB0cl90IF9fc3RhY2tfY2hrX2d1YXJkOwogCi1URVNUKHN0YWNrX3Byb3RlY3RvciwgZ2xvYmFsX2d1YXJkKSB7Ci0gIEFTU0VSVF9ORSgwLCBnZXR0aWQoKSk7Ci0gIEFTU0VSVF9ORSgwVSwgX19zdGFja19jaGtfZ3VhcmQpOwotfQotCiAvKgogICogV2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIHRoZSBzdGFjayBjYW5hcnkgd2lsbCBiZSBpbmNvbnNpc3RlbnQKICAqIHdpdGggdGhlIHByZXZpb3VzIHZhbHVlLCB3aGljaCB3aWxsIGdlbmVyYXRlIGEgY2FsbCB0byBfX3N0YWNrX2Noa19mYWlsKCksCkBAIC0xMTYsMTAgKzEwOSwyMiBAQAogc3RhdGljIHZvaWQgZG9fbW9kaWZ5X3N0YWNrX2Noa19ndWFyZCgpIHsKICAgX19zdGFja19jaGtfZ3VhcmQgPSAweDEyMzQ1Njc4OwogfQorI2VuZGlmCiAKLVRFU1Qoc3RhY2tfcHJvdGVjdG9yX0RlYXRoVGVzdCwgbW9kaWZ5X3N0YWNrX3Byb3RlY3RvcikgewotICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7Ci0gIEFTU0VSVF9FWElUKGRvX21vZGlmeV9zdGFja19jaGtfZ3VhcmQoKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKK1RFU1Qoc3RhY2tfcHJvdGVjdG9yLCBnbG9iYWxfZ3VhcmQpIHsKKyNpZiBkZWZpbmVkKFRFU1RfU1RBQ0tfQ0hLX0dVQVJEKQorICBBU1NFUlRfTkUoMCwgZ2V0dGlkKCkpOworICBBU1NFUlRfTkUoMFUsIF9fc3RhY2tfY2hrX2d1YXJkKTsKKyNlbHNlIC8vIFRFU1RfU1RBQ0tfQ0hLX0dVQVJECisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIFRFU1RfU1RBQ0tfQ0hLX0dVQVJECiB9CiAKLSNlbmRpZgorVEVTVChzdGFja19wcm90ZWN0b3JfRGVhdGhUZXN0LCBtb2RpZnlfc3RhY2tfcHJvdGVjdG9yKSB7CisjaWYgZGVmaW5lZChURVNUX1NUQUNLX0NIS19HVUFSRCkKKyAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBBU1NFUlRfRVhJVChkb19tb2RpZnlfc3RhY2tfY2hrX2d1YXJkKCksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CisjZWxzZSAvLyBURVNUX1NUQUNLX0NIS19HVUFSRAorICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBURVNUX1NUQUNLX0NIS19HVUFSRAorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RhY2tfdW53aW5kaW5nX3Rlc3QuY3BwIGIvdGVzdHMvc3RhY2tfdW53aW5kaW5nX3Rlc3QuY3BwCmluZGV4IDNiMThkYWEuLjEwMjRmMjggMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N0YWNrX3Vud2luZGluZ190ZXN0LmNwcAorKysgYi90ZXN0cy9zdGFja191bndpbmRpbmdfdGVzdC5jcHAKQEAgLTIwLDggKzIwLDYgQEAKIAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKLSNpZiBkZWZpbmVkKGkzODYpIC8vIE9ubHkgb3VyIHg4NiB1bndpbmRpbmcgaXMgZ29vZCBlbm91Z2guIFN3aXRjaCB0byBsaWJ1bndpbmQ/Ci0KIGV4dGVybiAiQyIgewogICB2b2lkIGRvX3Rlc3QoKTsKIH0KQEAgLTI5LDggKzI3LDExIEBACiAvLyBXZSBoYXZlIHRvIHNheSAiRGVhdGhUZXN0IiBoZXJlIHNvIGd0ZXN0IGtub3dzIHRvIHJ1biB0aGlzIHRlc3QgKHdoaWNoIGV4aXRzKQogLy8gaW4gaXRzIG93biBwcm9jZXNzLgogVEVTVChzdGFja191bndpbmRpbmdfRGVhdGhUZXN0LCB1bndpbmRpbmdfdGhyb3VnaF9zaWduYWxfZnJhbWUpIHsKKy8vIE9ubHkgb3VyIHg4NiB1bndpbmRpbmcgaXMgZ29vZCBlbm91Z2guIFN3aXRjaCB0byBsaWJ1bndpbmQ/CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKSAmJiBkZWZpbmVkKF9faTM4Nl9fKQogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIEFTU0VSVF9FWElUKGRvX3Rlc3QoKSwgOjp0ZXN0aW5nOjpFeGl0ZWRXaXRoQ29kZSg0MiksICIiKTsKKyNlbHNlIC8vIF9faTM4Nl9fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9faTM4Nl9fCiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RhdHZmc190ZXN0LmNwcCBiL3Rlc3RzL3N0YXR2ZnNfdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZmI5YzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvc3RhdHZmc190ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLQotI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+Ci0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLVRFU1Qoc3RhdHZmcywgc3RhdHZmcykgewotICBzdHJ1Y3Qgc3RhdHZmcyBzYjsKLSAgbWVtc2V0KCZzYiwgMCwgc2l6ZW9mKHNiKSk7Ci0KLSAgQVNTRVJUX0VRKDAsIHN0YXR2ZnMoIi9wcm9jIiwgJnNiKSk7Ci0KLSAgRVhQRUNUX0VRKDQwOTZVLCBzYi5mX2JzaXplKTsKLSAgRVhQRUNUX0VRKDBVLCBzYi5mX2JmcmVlKTsKLSAgRVhQRUNUX0VRKDBVLCBzYi5mX2ZmcmVlKTsKLSAgRVhQRUNUX0VRKDBVLCBzYi5mX2ZzaWQpOwotICBFWFBFQ1RfRVEoMjU1VSwgc2IuZl9uYW1lbWF4KTsKLX0KLQotVEVTVChzdGF0dmZzLCBmc3RhdHZmcykgewotICBzdHJ1Y3Qgc3RhdHZmcyBzYjsKLSAgbWVtc2V0KCZzYiwgMCwgc2l6ZW9mKHNiKSk7Ci0KLSAgaW50IGZkID0gb3BlbigiL3Byb2MiLCBPX1JET05MWSk7Ci0gIEFTU0VSVF9FUSgwLCBmc3RhdHZmcyhmZCwgJnNiKSk7Ci0gIGNsb3NlKGZkKTsKLQotICBFWFBFQ1RfRVEoNDA5NlUsIHNiLmZfYnNpemUpOwotICBFWFBFQ1RfRVEoMFUsIHNiLmZfYmZyZWUpOwotICBFWFBFQ1RfRVEoMFUsIHNiLmZfZmZyZWUpOwotICBFWFBFQ1RfRVEoMFUsIHNiLmZfZnNpZCk7Ci0gIEVYUEVDVF9FUSgyNTVVLCBzYi5mX25hbWVtYXgpOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RkYXRvbWljX3Rlc3QuY3BwIGIvdGVzdHMvc3RkYXRvbWljX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZmIxOWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zdGRhdG9taWNfdGVzdC5jcHAKQEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8c3RkYXRvbWljLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK1RFU1Qoc3RkYXRvbWljLCBMT0NLX0ZSRUUpIHsKKyAgQVNTRVJUX1RSVUUoQVRPTUlDX0JPT0xfTE9DS19GUkVFKTsKKyAgQVNTRVJUX1RSVUUoQVRPTUlDX0NIQVIxNl9UX0xPQ0tfRlJFRSk7CisgIEFTU0VSVF9UUlVFKEFUT01JQ19DSEFSMzJfVF9MT0NLX0ZSRUUpOworICBBU1NFUlRfVFJVRShBVE9NSUNfQ0hBUl9MT0NLX0ZSRUUpOworICBBU1NFUlRfVFJVRShBVE9NSUNfSU5UX0xPQ0tfRlJFRSk7CisgIEFTU0VSVF9UUlVFKEFUT01JQ19MTE9OR19MT0NLX0ZSRUUpOworICBBU1NFUlRfVFJVRShBVE9NSUNfTE9OR19MT0NLX0ZSRUUpOworICBBU1NFUlRfVFJVRShBVE9NSUNfUE9JTlRFUl9MT0NLX0ZSRUUpOworICBBU1NFUlRfVFJVRShBVE9NSUNfU0hPUlRfTE9DS19GUkVFKTsKKyAgQVNTRVJUX1RSVUUoQVRPTUlDX1dDSEFSX1RfTE9DS19GUkVFKTsKK30KKworVEVTVChzdGRhdG9taWMsIGluaXQpIHsKKyAgYXRvbWljX2ludCB2ID0gQVRPTUlDX1ZBUl9JTklUKDEyMyk7CisgIEFTU0VSVF9FUSgxMjMsIGF0b21pY19sb2FkKCZ2KSk7CisKKyAgYXRvbWljX2luaXQoJnYsIDQ1Nik7CisgIEFTU0VSVF9FUSg0NTYsIGF0b21pY19sb2FkKCZ2KSk7CisKKyAgYXRvbWljX2ZsYWcgZiA9IEFUT01JQ19GTEFHX0lOSVQ7CisgIEFTU0VSVF9GQUxTRShhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXQoJmYpKTsKK30KKworVEVTVChzdGRhdG9taWMsIGF0b21pY190aHJlYWRfZmVuY2UpIHsKKyAgYXRvbWljX3RocmVhZF9mZW5jZShtZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgIGF0b21pY190aHJlYWRfZmVuY2UobWVtb3J5X29yZGVyX2NvbnN1bWUpOworICBhdG9taWNfdGhyZWFkX2ZlbmNlKG1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKyAgYXRvbWljX3RocmVhZF9mZW5jZShtZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgIGF0b21pY190aHJlYWRfZmVuY2UobWVtb3J5X29yZGVyX2FjcV9yZWwpOworICBhdG9taWNfdGhyZWFkX2ZlbmNlKG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKK30KKworVEVTVChzdGRhdG9taWMsIGF0b21pY19zaWduYWxfZmVuY2UpIHsKKyAgYXRvbWljX3NpZ25hbF9mZW5jZShtZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgIGF0b21pY19zaWduYWxfZmVuY2UobWVtb3J5X29yZGVyX2NvbnN1bWUpOworICBhdG9taWNfc2lnbmFsX2ZlbmNlKG1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKyAgYXRvbWljX3NpZ25hbF9mZW5jZShtZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgIGF0b21pY19zaWduYWxfZmVuY2UobWVtb3J5X29yZGVyX2FjcV9yZWwpOworICBhdG9taWNfc2lnbmFsX2ZlbmNlKG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKK30KKworVEVTVChzdGRhdG9taWMsIGF0b21pY19pc19sb2NrX2ZyZWUpIHsKKyAgYXRvbWljX2NoYXIgc21hbGw7CisgIEFTU0VSVF9UUlVFKGF0b21pY19pc19sb2NrX2ZyZWUoJnNtYWxsKSk7CisjaWYgZGVmaW5lZChfX2NsYW5nX18pIHx8IF9fR05VQ19QUkVSRVEoNCwgNykKKyAgLy8gT3RoZXJ3aXNlIHN0ZGF0b21pYy5oIGRvZXNuJ3QgaGFuZGxlIHRoaXMuCisgIGF0b21pY19pbnRtYXhfdCBiaWc7CisgIC8vIGF0b21pY19pbnRtYXhfdChzaXplID0gNjQpIGlzIG5vdCBsb2NrIGZyZWUgb24gbWlwczMyLgorI2lmIGRlZmluZWQoX19taXBzX18pICYmICFkZWZpbmVkKF9fTFA2NF9fKQorICBBU1NFUlRfRkFMU0UoYXRvbWljX2lzX2xvY2tfZnJlZSgmYmlnKSk7CisjZWxzZQorICBBU1NFUlRfVFJVRShhdG9taWNfaXNfbG9ja19mcmVlKCZiaWcpKTsKKyNlbmRpZgorI2VuZGlmCit9CisKK1RFU1Qoc3RkYXRvbWljLCBhdG9taWNfZmxhZykgeworICBhdG9taWNfZmxhZyBmID0gQVRPTUlDX0ZMQUdfSU5JVDsKKyAgQVNTRVJUX0ZBTFNFKGF0b21pY19mbGFnX3Rlc3RfYW5kX3NldCgmZikpOworICBBU1NFUlRfVFJVRShhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXQoJmYpKTsKKworICBhdG9taWNfZmxhZ19jbGVhcigmZik7CisKKyAgQVNTRVJUX0ZBTFNFKGF0b21pY19mbGFnX3Rlc3RfYW5kX3NldF9leHBsaWNpdCgmZiwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpKTsKKyAgQVNTRVJUX1RSVUUoYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0X2V4cGxpY2l0KCZmLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCkpOworCisgIGF0b21pY19mbGFnX2NsZWFyX2V4cGxpY2l0KCZmLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgIEFTU0VSVF9GQUxTRShhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXRfZXhwbGljaXQoJmYsIG1lbW9yeV9vcmRlcl9yZWxheGVkKSk7Cit9CisKK1RFU1Qoc3RkYXRvbWljLCBhdG9taWNfc3RvcmUpIHsKKyAgYXRvbWljX2ludCBpOworICBhdG9taWNfc3RvcmUoJmksIDEyMyk7CisgIEFTU0VSVF9FUSgxMjMsIGF0b21pY19sb2FkKCZpKSk7CisgIGF0b21pY19zdG9yZV9leHBsaWNpdCgmaSwgMTIzLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgIEFTU0VSVF9FUSgxMjMsIGF0b21pY19sb2FkX2V4cGxpY2l0KCZpLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCkpOworfQorCitURVNUKHN0ZGF0b21pYywgYXRvbWljX2V4Y2hhbmdlKSB7CisgIGF0b21pY19pbnQgaTsKKyAgYXRvbWljX3N0b3JlKCZpLCAxMjMpOworICBBU1NFUlRfRVEoMTIzLCBhdG9taWNfZXhjaGFuZ2UoJmksIDQ1NikpOworICBBU1NFUlRfRVEoNDU2LCBhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQoJmksIDEyMywgbWVtb3J5X29yZGVyX3JlbGF4ZWQpKTsKK30KKworVEVTVChzdGRhdG9taWMsIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlKSB7CisgIGF0b21pY19pbnQgaTsKKyAgaW50IGV4cGVjdGVkOworCisgIGF0b21pY19zdG9yZSgmaSwgMTIzKTsKKyAgZXhwZWN0ZWQgPSAxMjM7CisgIEFTU0VSVF9UUlVFKGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZygmaSwgJmV4cGVjdGVkLCA0NTYpKTsKKyAgQVNTRVJUX0ZBTFNFKGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZygmaSwgJmV4cGVjdGVkLCA0NTYpKTsKKyAgQVNTRVJUX0VRKDQ1NiwgZXhwZWN0ZWQpOworCisgIGF0b21pY19zdG9yZSgmaSwgMTIzKTsKKyAgZXhwZWN0ZWQgPSAxMjM7CisgIEFTU0VSVF9UUlVFKGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCgmaSwgJmV4cGVjdGVkLCA0NTYsIG1lbW9yeV9vcmRlcl9yZWxheGVkLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCkpOworICBBU1NFUlRfRkFMU0UoYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KCZpLCAmZXhwZWN0ZWQsIDQ1NiwgbWVtb3J5X29yZGVyX3JlbGF4ZWQsIG1lbW9yeV9vcmRlcl9yZWxheGVkKSk7CisgIEFTU0VSVF9FUSg0NTYsIGV4cGVjdGVkKTsKKworICBhdG9taWNfc3RvcmUoJmksIDEyMyk7CisgIGV4cGVjdGVkID0gMTIzOworICBBU1NFUlRfVFJVRShhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrKCZpLCAmZXhwZWN0ZWQsIDQ1NikpOworICBBU1NFUlRfRkFMU0UoYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2VhaygmaSwgJmV4cGVjdGVkLCA0NTYpKTsKKyAgQVNTRVJUX0VRKDQ1NiwgZXhwZWN0ZWQpOworCisgIGF0b21pY19zdG9yZSgmaSwgMTIzKTsKKyAgZXhwZWN0ZWQgPSAxMjM7CisgIEFTU0VSVF9UUlVFKGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQoJmksICZleHBlY3RlZCwgNDU2LCBtZW1vcnlfb3JkZXJfcmVsYXhlZCwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpKTsKKyAgQVNTRVJUX0ZBTFNFKGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQoJmksICZleHBlY3RlZCwgNDU2LCBtZW1vcnlfb3JkZXJfcmVsYXhlZCwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpKTsKKyAgQVNTRVJUX0VRKDQ1NiwgZXhwZWN0ZWQpOworfQorCitURVNUKHN0ZGF0b21pYywgYXRvbWljX2ZldGNoX2FkZCkgeworICBhdG9taWNfaW50IGkgPSBBVE9NSUNfVkFSX0lOSVQoMTIzKTsKKyAgQVNTRVJUX0VRKDEyMywgYXRvbWljX2ZldGNoX2FkZCgmaSwgMSkpOworICBBU1NFUlRfRVEoMTI0LCBhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KCZpLCAxLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCkpOworICBBU1NFUlRfRVEoMTI1LCBhdG9taWNfbG9hZCgmaSkpOworfQorCitURVNUKHN0ZGF0b21pYywgYXRvbWljX2ZldGNoX3N1YikgeworICBhdG9taWNfaW50IGkgPSBBVE9NSUNfVkFSX0lOSVQoMTIzKTsKKyAgQVNTRVJUX0VRKDEyMywgYXRvbWljX2ZldGNoX3N1YigmaSwgMSkpOworICBBU1NFUlRfRVEoMTIyLCBhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KCZpLCAxLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCkpOworICBBU1NFUlRfRVEoMTIxLCBhdG9taWNfbG9hZCgmaSkpOworfQorCitURVNUKHN0ZGF0b21pYywgYXRvbWljX2ZldGNoX29yKSB7CisgIGF0b21pY19pbnQgaSA9IEFUT01JQ19WQVJfSU5JVCgweDEwMCk7CisgIEFTU0VSVF9FUSgweDEwMCwgYXRvbWljX2ZldGNoX29yKCZpLCAweDAyMCkpOworICBBU1NFUlRfRVEoMHgxMjAsIGF0b21pY19mZXRjaF9vcl9leHBsaWNpdCgmaSwgMHgwMDMsIG1lbW9yeV9vcmRlcl9yZWxheGVkKSk7CisgIEFTU0VSVF9FUSgweDEyMywgYXRvbWljX2xvYWQoJmkpKTsKK30KKworVEVTVChzdGRhdG9taWMsIGF0b21pY19mZXRjaF94b3IpIHsKKyAgYXRvbWljX2ludCBpID0gQVRPTUlDX1ZBUl9JTklUKDB4MTAwKTsKKyAgQVNTRVJUX0VRKDB4MTAwLCBhdG9taWNfZmV0Y2hfeG9yKCZpLCAweDEyMCkpOworICBBU1NFUlRfRVEoMHgwMjAsIGF0b21pY19mZXRjaF94b3JfZXhwbGljaXQoJmksIDB4MTAzLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCkpOworICBBU1NFUlRfRVEoMHgxMjMsIGF0b21pY19sb2FkKCZpKSk7Cit9CisKK1RFU1Qoc3RkYXRvbWljLCBhdG9taWNfZmV0Y2hfYW5kKSB7CisgIGF0b21pY19pbnQgaSA9IEFUT01JQ19WQVJfSU5JVCgweDEyMyk7CisgIEFTU0VSVF9FUSgweDEyMywgYXRvbWljX2ZldGNoX2FuZCgmaSwgMHgwMGYpKTsKKyAgQVNTRVJUX0VRKDB4MDAzLCBhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KCZpLCAweDIsIG1lbW9yeV9vcmRlcl9yZWxheGVkKSk7CisgIEFTU0VSVF9FUSgweDAwMiwgYXRvbWljX2xvYWQoJmkpKTsKK30KKworLy8gQW5kIGEgcnVkaW1lbnRhcnkgdGVzdCBvZiBhY3F1aXJlLXJlbGVhc2UgbWVtb3J5IG9yZGVyaW5nOgorCitjb25zdGV4cHIgc3RhdGljIHVpbnRfbGVhc3QzMl90IEJJRyA9IDEwMDAwMDAwdWw7IC8vIEFzc3VtZWQgZXZlbiBiZWxvdy4KKworc3RydWN0IHRocmVlX2F0b21pY3MgeworICBhdG9taWNfdWludF9sZWFzdDMyX3QgeDsKKyAgY2hhciBhWzEyM107ICAvLyBFdmVyeXRoaW5nIGluIGRpZmZlcmVudCBjYWNoZSBsaW5lcywKKyAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSBjaGFuY2Ugb2YgY29tcGlsZXIgZ2V0dGluZyBhbGlnbm1lbnQgd3JvbmcuCisgIGF0b21pY191aW50X2xlYXN0MzJfdCB5OworICBjaGFyIGJbNDAxM107CisgIGF0b21pY191aW50X2xlYXN0MzJfdCB6OworfTsKKworLy8gVmVyeSBzaW1wbGUgYWNxdWlyZS9yZWxlYXNlIG1lbW9yeSBvcmRlcmluZyBzYW5pdHkgY2hlY2suCitzdGF0aWMgdm9pZCogd3JpdGVyKHZvaWQqIGFyZykgeworICB0aHJlZV9hdG9taWNzKiBhID0gcmVpbnRlcnByZXRfY2FzdDx0aHJlZV9hdG9taWNzKj4oYXJnKTsKKyAgZm9yICh1aW50X2xlYXN0MzJfdCBpID0gMDsgaSA8PSBCSUc7IGkrPTIpIHsKKyAgICBhdG9taWNfc3RvcmVfZXhwbGljaXQoJmEtPngsIGksIG1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICBhdG9taWNfc3RvcmVfZXhwbGljaXQoJmEtPnosIGksIG1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICBhdG9taWNfc3RvcmVfZXhwbGljaXQoJmEtPnksIGksIG1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICBhdG9taWNfc3RvcmVfZXhwbGljaXQoJmEtPngsIGkrMSwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIGF0b21pY19zdG9yZV9leHBsaWNpdCgmYS0+eiwgaSsxLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgYXRvbWljX3N0b3JlX2V4cGxpY2l0KCZhLT55LCBpKzEsIG1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQqIHJlYWRlcih2b2lkKiBhcmcpIHsKKyAgdGhyZWVfYXRvbWljcyogYSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dGhyZWVfYXRvbWljcyo+KGFyZyk7CisgIHVpbnRfbGVhc3QzMl90IHh2YWwgPSAwLCB5dmFsID0gMCwgenZhbCA9IDA7CisgIHNpemVfdCByZXBlYXQgPSAwOworICBzaXplX3QgcmVwZWF0X2xpbWl0ID0gMTAwMDsKKyAgd2hpbGUgKHl2YWwgIT0gQklHICsgMSkgeworICAgIHl2YWwgPSBhdG9taWNfbG9hZF9leHBsaWNpdCgmYS0+eSwgbWVtb3J5X29yZGVyX2FjcXVpcmUpOworICAgIHp2YWwgPSBhdG9taWNfbG9hZF9leHBsaWNpdCgmYS0+eiwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIHh2YWwgPSBhdG9taWNfbG9hZF9leHBsaWNpdCgmYS0+eCwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIC8vIElmIHdlIHNlZSBhIGdpdmVuIHZhbHVlIG9mIHksIHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcKKyAgICAvLyBzdG9yZXMgdG8geiBhbmQgeCwgb3IgbGF0ZXIgb25lcywgc2hvdWxkIGFsc28gYmUgdmlzaWJsZS4KKyAgICBpZiAoenZhbCA8IHl2YWwpIHsKKyAgICAgIC8vIENhbnQganVzdCBBU1NFUlQsIHNpbmNlIHdlIGFyZSBpbiBhIG5vbi12b2lkIGZ1bmN0aW9uLgorICAgICAgQUREX0ZBSUxVUkUoKSA8PCAiYWNxdWlyZS1yZWxlYXNlIG9yZGVyaW5nIHZpb2xhdGlvbjogIgorICAgICAgICAgICAgICAgICAgICA8PCB6dmFsIDw8ICIgPCAiIDw8IHl2YWwgPDwgIiwgIiA8PCB4dmFsIDw8ICJcbiI7CisgICAgICByZXR1cm4gMDsgLy8gT25seSByZXBvcnQgb25jZS4KKyAgICB9CisgICAgaWYgKHh2YWwgPCB5dmFsKSB7CisgICAgICAvLyBDYW50IGp1c3QgQVNTRVJULCBzaW5jZSB3ZSBhcmUgaW4gYSBub24tdm9pZCBmdW5jdGlvbi4KKyAgICAgIEFERF9GQUlMVVJFKCkgPDwgImFjcXVpcmUtcmVsZWFzZSBvcmRlcmluZyB2aW9sYXRpb246ICIKKyAgICAgICAgICAgICAgICAgICAgPDwgeHZhbCA8PCAiIDwgIiA8PCB5dmFsIDw8ICIsICIgPDwgenZhbCA8PCAgIlxuIjsKKyAgICAgIHJldHVybiAwOyAvLyBPbmx5IHJlcG9ydCBvbmNlLgorICAgIH0KKyAgICBpZiAocmVwZWF0IDwgcmVwZWF0X2xpbWl0KSArK3JlcGVhdDsKKyAgfQorICAvLyBUaGUgZm9sbG93aW5nIGFzc2VydGlvbiBpcyBub3QgdGVjaG5pY2FsbHkgZ3VhcmFudGVlZCB0byBob2xkLgorICAvLyBCdXQgaWYgaXQgZmFpbHMgdG8gaG9sZCwgdGhpcyB0ZXN0IHdhcyB1c2VsZXNzLCBhbmQgd2UgaGF2ZSBhCisgIC8vIHNlcmlvdXMgc2NoZWR1bGluZyBpc3N1ZSB0aGF0IHdlIHNob3VsZCBwcm9iYWJseSBrbm93IGFib3V0LgorICBFWFBFQ1RfRVEocmVwZWF0LCByZXBlYXRfbGltaXQpOworICByZXR1cm4gMDsKK30KKworVEVTVChzdGRhdG9taWMsIG9yZGVyaW5nKSB7CisgIC8vIFJ1biBhIG1lbW9yeSBvcmRlcmluZyBzYW5pdHkgdGVzdC4KKyAgdm9pZCogcmVzdWx0OworICB0aHJlZV9hdG9taWNzIGE7CisgIGF0b21pY19pbml0KCZhLngsIDB1bCk7CisgIGF0b21pY19pbml0KCZhLnksIDB1bCk7CisgIGF0b21pY19pbml0KCZhLnosIDB1bCk7CisgIHB0aHJlYWRfdCB0MSx0MjsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY3JlYXRlKCZ0MSwgMCwgcmVhZGVyLCAmYSkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jcmVhdGUoJnQyLCAwLCB3cml0ZXIsICZhKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2pvaW4odDEsICZyZXN1bHQpKTsKKyAgRVhQRUNUX0VRKDAsIHJlc3VsdCk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2pvaW4odDIsICZyZXN1bHQpKTsKKyAgRVhQRUNUX0VRKDAsIHJlc3VsdCk7CisgIEVYUEVDVF9FUShhdG9taWNfbG9hZF9leHBsaWNpdCgmYS54LCBtZW1vcnlfb3JkZXJfY29uc3VtZSksIEJJRyArIDEpOworICBFWFBFQ1RfRVEoYXRvbWljX2xvYWRfZXhwbGljaXQoJmEueSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpLCBCSUcgKyAxKTsKKyAgRVhQRUNUX0VRKGF0b21pY19sb2FkKCZhLnopLCBCSUcgKyAxKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0ZGludF90ZXN0LmNwcCBiL3Rlc3RzL3N0ZGludF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGFmZWUzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3RkaW50X3Rlc3QuY3BwCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCitURVNUKHN0ZGludF90eXBlcywgdHlwZV9zaXplcykgeworICBBU1NFUlRfRVEoMVUsIHNpemVvZihpbnRfZmFzdDhfdCkpOworICBBU1NFUlRfRVEoOFUsIHNpemVvZihpbnRfZmFzdDY0X3QpKTsKKyAgQVNTRVJUX0VRKDFVLCBzaXplb2YodWludF9mYXN0OF90KSk7CisgIEFTU0VSVF9FUSg4VSwgc2l6ZW9mKHVpbnRfZmFzdDY0X3QpKTsKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorICBBU1NFUlRfRVEoOFUsIHNpemVvZihpbnRfZmFzdDE2X3QpKTsKKyAgQVNTRVJUX0VRKDhVLCBzaXplb2YoaW50X2Zhc3QzMl90KSk7CisgIEFTU0VSVF9FUSg4VSwgc2l6ZW9mKHVpbnRfZmFzdDE2X3QpKTsKKyAgQVNTRVJUX0VRKDhVLCBzaXplb2YodWludF9mYXN0MzJfdCkpOworI2Vsc2UKKyAgQVNTRVJUX0VRKDRVLCBzaXplb2YoaW50X2Zhc3QxNl90KSk7CisgIEFTU0VSVF9FUSg0VSwgc2l6ZW9mKGludF9mYXN0MzJfdCkpOworICBBU1NFUlRfRVEoNFUsIHNpemVvZih1aW50X2Zhc3QxNl90KSk7CisgIEFTU0VSVF9FUSg0VSwgc2l6ZW9mKHVpbnRfZmFzdDMyX3QpKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RkaW9fdGVzdC5jcHAgYi90ZXN0cy9zdGRpb190ZXN0LmNwcAppbmRleCBiZDNjNTQ4Li44YzhjMjM1IDEwMDY0NAotLS0gYS90ZXN0cy9zdGRpb190ZXN0LmNwcAorKysgYi90ZXN0cy9zdGRpb190ZXN0LmNwcApAQCAtMTcsMTEgKzE3LDE3IEBACiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIAogI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKyNpbmNsdWRlICJUZW1wb3JhcnlGaWxlLmgiCiAKIFRFU1Qoc3RkaW8sIHRtcGZpbGVfZmlsZW5vX2ZwcmludGZfcmV3aW5kX2ZnZXRzKSB7CiAgIEZJTEUqIGZwID0gdG1wZmlsZSgpOwpAQCAtNDgsNiArNTQsMjQgQEAKICAgZmNsb3NlKGZwKTsKIH0KIAorVEVTVChzdGRpbywgZHByaW50ZikgeworICBUZW1wb3JhcnlGaWxlIHRmOworCisgIGludCByYyA9IGRwcmludGYodGYuZmQsICJoZWxsb1xuIik7CisgIEFTU0VSVF9FUShyYywgNik7CisKKyAgbHNlZWsodGYuZmQsIFNFRUtfU0VULCAwKTsKKyAgRklMRSogdGZpbGUgPSBmZG9wZW4odGYuZmQsICJyIik7CisgIEFTU0VSVF9UUlVFKHRmaWxlICE9IE5VTEwpOworCisgIGNoYXIgYnVmWzddOworICBBU1NFUlRfRVEoYnVmLCBmZ2V0cyhidWYsIHNpemVvZihidWYpLCB0ZmlsZSkpOworICBBU1NFUlRfU1RSRVEoImhlbGxvXG4iLCBidWYpOworICAvLyBNYWtlIHN1cmUgdGhlcmUgaXNuJ3QgYW55dGhpbmcgZWxzZSBpbiB0aGUgZmlsZS4KKyAgQVNTRVJUX0VRKE5VTEwsIGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHRmaWxlKSk7CisgIGZjbG9zZSh0ZmlsZSk7Cit9CisKIFRFU1Qoc3RkaW8sIGdldGRlbGltKSB7CiAgIEZJTEUqIGZwID0gdG1wZmlsZSgpOwogICBBU1NFUlRfVFJVRShmcCAhPSBOVUxMKTsKQEAgLTEwMCwxNCArMTI0LDEyIEBACiAgIEFTU0VSVF9FUShnZXRkZWxpbSgmYnVmZmVyLCBOVUxMLCAnICcsIGZwKSwgLTEpOwogICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7CiAKLSAgLy8gVGhlIHN0cmVhbSBjYW4ndCBiZSBjbG9zZWQuCi0gIGZjbG9zZShmcCk7CisgIC8vIFRoZSB1bmRlcmx5aW5nIGZkIGNhbid0IGJlIGNsb3NlZC4KKyAgQVNTRVJUX0VRKDAsIGNsb3NlKGZpbGVubyhmcCkpKTsKICAgZXJybm8gPSAwOwogICBBU1NFUlRfRVEoZ2V0ZGVsaW0oJmJ1ZmZlciwgJmJ1ZmZlcl9sZW5ndGgsICcgJywgZnApLCAtMSk7Ci0gIC8vIGdsaWJjIHNvbWV0aW1lcyBkb2Vzbid0IHNldCBlcnJubyBpbiB0aGlzIHBhcnRpY3VsYXIgY2FzZS4KLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIEFTU0VSVF9FUShFQkFERiwgZXJybm8pOwotI2VuZGlmCisgIGZjbG9zZShmcCk7CiB9CiAKIFRFU1Qoc3RkaW8sIGdldGxpbmUpIHsKQEAgLTE2OSwxNCArMTkxLDEyIEBACiAgIEFTU0VSVF9FUShnZXRsaW5lKCZidWZmZXIsIE5VTEwsIGZwKSwgLTEpOwogICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7CiAKLSAgLy8gVGhlIHN0cmVhbSBjYW4ndCBiZSBjbG9zZWQuCi0gIGZjbG9zZShmcCk7CisgIC8vIFRoZSB1bmRlcmx5aW5nIGZkIGNhbid0IGJlIGNsb3NlZC4KKyAgQVNTRVJUX0VRKDAsIGNsb3NlKGZpbGVubyhmcCkpKTsKICAgZXJybm8gPSAwOwogICBBU1NFUlRfRVEoZ2V0bGluZSgmYnVmZmVyLCAmYnVmZmVyX2xlbmd0aCwgZnApLCAtMSk7Ci0gIC8vIGdsaWJjIHNvbWV0aW1lcyBkb2Vzbid0IHNldCBlcnJubyBpbiB0aGlzIHBhcnRpY3VsYXIgY2FzZS4KLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIEFTU0VSVF9FUShFQkFERiwgZXJybm8pOwotI2VuZGlmCisgIGZjbG9zZShmcCk7CiB9CiAKIFRFU1Qoc3RkaW8sIHByaW50Zl9zc2l6ZV90KSB7CkBAIC0xOTEsMTcgKzIxMSw0NCBAQAogICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXpkIiwgdik7CiB9CiAKLSNpZiAhZGVmaW5lZChfX0dMSUJDX18pCi1URVNUKHN0ZGlvLCBzbnByaW50Zl9uX2Zvcm1hdF9zcGVjaWZpZXJfbm90X2ltcGxlbWVudGVkKSB7Ci0gIGNoYXIgYnVmWzMyXTsKLSAgaW50IGkgPSAwOwotICAvLyBXZSBkZWxpYmVyYXRlbHkgZG9uJ3QgaW1wbGVtZW50ICVuLCBzbyBpdCdzIHRyZWF0ZWQgbGlrZQotICAvLyBhbnkgb3RoZXIgdW5yZWNvZ25pemVkIGZvcm1hdCBzcGVjaWZpZXIuCi0gIEVYUEVDVF9FUSg1LCBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiYSAlbiBiIiwgJmkpKTsKLSAgRVhQRUNUX0VRKDAsIGkpOwotICBFWFBFQ1RfU1RSRVEoImEgbiBiIiwgYnVmKTsKKy8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lkPTY0ODg2CitURVNUKHN0ZGlvLCBzbnByaW50Zl9hKSB7CisgIGNoYXIgYnVmW0JVRlNJWl07CisgIEVYUEVDVF9FUSgyMywgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjwlYT4iLCA5OTkwLjIzNSkpOworICBFWFBFQ1RfU1RSRVEoIjwweDEuMzgzMWUxNDdhZTE0OHArMTM+IiwgYnVmKTsKIH0KKworVEVTVChzdGRpbywgc25wcmludGZfbGMpIHsKKyAgY2hhciBidWZbQlVGU0laXTsKKyAgd2ludF90IHdjID0gTCdhJzsKKyAgRVhQRUNUX0VRKDMsIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICI8JWxjPiIsIHdjKSk7CisgIEVYUEVDVF9TVFJFUSgiPGE+IiwgYnVmKTsKK30KKworVEVTVChzdGRpbywgc25wcmludGZfbHMpIHsKKyAgY2hhciBidWZbQlVGU0laXTsKKyAgd2NoYXJfdCogd3MgPSBOVUxMOworICBFWFBFQ1RfRVEoOCwgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjwlbHM+Iiwgd3MpKTsKKyAgRVhQRUNUX1NUUkVRKCI8KG51bGwpPiIsIGJ1Zik7CisKKyAgd2NoYXJfdCBjaGFyc1tdID0geyBMJ2gnLCBMJ2knLCAwIH07CisgIHdzID0gY2hhcnM7CisgIEVYUEVDVF9FUSg0LCBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiPCVscz4iLCB3cykpOworICBFWFBFQ1RfU1RSRVEoIjxoaT4iLCBidWYpOworfQorCitURVNUKHN0ZGlvLCBzbnByaW50Zl9uKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICAvLyBodHRwOi8vYi8xNDQ5MjEzNQorICBjaGFyIGJ1ZlszMl07CisgIGludCBpID0gMTIzNDsKKyAgRVhQRUNUX0VRKDUsIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJhICVuIGIiLCAmaSkpOworICBFWFBFQ1RfRVEoMTIzNCwgaSk7CisgIEVYUEVDVF9TVFJFUSgiYSBuIGIiLCBidWYpOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CiAjZW5kaWYKK30KIAogVEVTVChzdGRpbywgc25wcmludGZfc21va2UpIHsKICAgY2hhciBidWZbQlVGU0laXTsKQEAgLTI4Myw5ICszMzAsOSBAQAogICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiYSVkLCVweiIsIDUsIHApOwogI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgRVhQRUNUX1NUUkVRKCJhNSwweDB6IiwgYnVmKTsKLSNlbHNlCisjZWxzZSAvLyBfX0JJT05JQ19fCiAgIEVYUEVDVF9TVFJFUSgiYTUsKG5pbCl6IiwgYnVmKTsKLSNlbmRpZgorI2VuZGlmIC8vIF9fQklPTklDX18KIAogICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiYSVsbGQsJWQsJWQsJWR6IiwgMHgxMDAwMDAwMDAwTEwsIDYsIDcsIDgpOwogICBFWFBFQ1RfU1RSRVEoImE2ODcxOTQ3NjczNiw2LDcsOHoiLCBidWYpOwpAQCAtMjk1LDYgKzM0MiwyNyBAQAogCiAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJhXyVnX2IiLCAzLjE0KTsKICAgRVhQRUNUX1NUUkVRKCJhXzMuMTRfYiIsIGJ1Zik7CisKKyAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUxJHMgJTEkcyIsICJwcmludF9tZV90d2ljZSIpOworICBFWFBFQ1RfU1RSRVEoInByaW50X21lX3R3aWNlIHByaW50X21lX3R3aWNlIiwgYnVmKTsKK30KKworVEVTVChzdGRpbywgc25wcmludGZfZl9zcGVjaWFsKSB7CisgIGNoYXIgYnVmW0JVRlNJWl07CisgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZiIsIG5hbmYoIiIpKTsKKyAgRVhQRUNUX1NUUkNBU0VFUSgiTmFOIiwgYnVmKTsKKworICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWYiLCBIVUdFX1ZBTEYpOworICBFWFBFQ1RfU1RSQ0FTRUVRKCJJbmYiLCBidWYpOworfQorCitURVNUKHN0ZGlvLCBzbnByaW50Zl9nX3NwZWNpYWwpIHsKKyAgY2hhciBidWZbQlVGU0laXTsKKyAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVnIiwgbmFuKCIiKSk7CisgIEVYUEVDVF9TVFJDQVNFRVEoIk5hTiIsIGJ1Zik7CisKKyAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVnIiwgSFVHRV9WQUwpOworICBFWFBFQ1RfU1RSQ0FTRUVRKCJJbmYiLCBidWYpOwogfQogCiBURVNUKHN0ZGlvLCBzbnByaW50Zl9kX0lOVF9NQVgpIHsKQEAgLTM0MSw2ICs0MDksNzAgQEAKICAgRVhQRUNUX1NUUkVRKCItOTIyMzM3MjAzNjg1NDc3NTgwOCIsIGJ1Zik7CiB9CiAKK1RFU1Qoc3RkaW8sIHNucHJpbnRmX2UpIHsKKyAgY2hhciBidWZbQlVGU0laXTsKKworICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWUiLCAxLjUpOworICBFWFBFQ1RfU1RSRVEoIjEuNTAwMDAwZSswMCIsIGJ1Zik7CisKKyAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVMZSIsIDEuNWwpOworICBFWFBFQ1RfU1RSRVEoIjEuNTAwMDAwZSswMCIsIGJ1Zik7Cit9CisKK1RFU1Qoc3RkaW8sIHNucHJpbnRmX25lZ2F0aXZlX3plcm9fNTA4NDI5MikgeworICBjaGFyIGJ1ZltCVUZTSVpdOworCisgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZiIsIC0wLjApOworICBFWFBFQ1RfU1RSRVEoIi0wLjAwMDAwMCIsIGJ1Zik7Cit9CisKK1RFU1Qoc3RkaW8sIHNucHJpbnRmX3V0ZjhfMTU0Mzk1NTQpIHsKKyAgbG9jYWxlX3QgY2xvYyA9IG5ld2xvY2FsZShMQ19BTEwsICJDLlVURi04IiwgMCk7CisgIGxvY2FsZV90IG9sZF9sb2NhbGUgPSB1c2Vsb2NhbGUoY2xvYyk7CisKKyAgLy8gaHR0cDovL2IvMTU0Mzk1NTQKKyAgY2hhciBidWZbQlVGU0laXTsKKworICAvLyAxLWJ5dGUgY2hhcmFjdGVyLgorICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWR4JWQiLCAxLCAyKTsKKyAgRVhQRUNUX1NUUkVRKCIxeDIiLCBidWYpOworICAvLyAyLWJ5dGUgY2hhcmFjdGVyLgorICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWRceGMyXHhhMiVkIiwgMSwgMik7CisgIEVYUEVDVF9TVFJFUSgiMcKiMiIsIGJ1Zik7CisgIC8vIDMtYnl0ZSBjaGFyYWN0ZXIuCisgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZFx4ZTJceDgyXHhhYyVkIiwgMSwgMik7CisgIEVYUEVDVF9TVFJFUSgiMeKCrDIiLCBidWYpOworICAvLyA0LWJ5dGUgY2hhcmFjdGVyLgorICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWRceGYwXHhhNFx4YWRceGEyJWQiLCAxLCAyKTsKKyAgRVhQRUNUX1NUUkVRKCIx8KStojIiLCBidWYpOworCisgIHVzZWxvY2FsZShvbGRfbG9jYWxlKTsKKyAgZnJlZWxvY2FsZShjbG9jKTsKK30KKworVEVTVChzdGRpbywgZnByaW50Zl9mYWlsdXJlc183MjI5NTIwKSB7CisgIC8vIGh0dHA6Ly9iLzcyMjk1MjAKKyAgRklMRSogZnA7CisKKyAgLy8gVW5idWZmZXJlZCBjYXNlIHdoZXJlIHRoZSBmcHJpbnRmKDMpIGl0c2VsZiBmYWlscy4KKyAgQVNTRVJUX05FKG51bGxwdHIsIGZwID0gdG1wZmlsZSgpKTsKKyAgc2V0YnVmKGZwLCBOVUxMKTsKKyAgQVNTRVJUX0VRKDQsIGZwcmludGYoZnAsICJlcGljIikpOworICBBU1NFUlRfRVEoMCwgY2xvc2UoZmlsZW5vKGZwKSkpOworICBBU1NFUlRfRVEoLTEsIGZwcmludGYoZnAsICJmYWlsIikpOworICBBU1NFUlRfRVEoLTEsIGZjbG9zZShmcCkpOworCisgIC8vIEJ1ZmZlcmVkIGNhc2Ugd2hlcmUgd2Ugd29uJ3Qgbm90aWNlIHVudGlsIHRoZSBmY2xvc2UoMykuCisgIC8vIEl0J3MgbGlrZWx5IHRoaXMgaXMgd2hhdCB3YXMgYWN0dWFsbHkgc2VlbiBpbiBodHRwOi8vYi83MjI5NTIwLAorICAvLyBhbmQgdGhhdCBleHBlY3RpbmcgZnByaW50ZiB0byBmYWlsIGlzIHNldHRpbmcgeW91cnNlbGYgdXAgZm9yCisgIC8vIGRpc2FwcG9pbnRtZW50LiBSZW1lbWJlciB0byBjaGVjayBmY2xvc2UoMykncyByZXR1cm4gdmFsdWUsIGtpZHMhCisgIEFTU0VSVF9ORShudWxscHRyLCBmcCA9IHRtcGZpbGUoKSk7CisgIEFTU0VSVF9FUSg0LCBmcHJpbnRmKGZwLCAiZXBpYyIpKTsKKyAgQVNTRVJUX0VRKDAsIGNsb3NlKGZpbGVubyhmcCkpKTsKKyAgQVNTRVJUX0VRKDQsIGZwcmludGYoZnAsICJmYWlsIikpOworICBBU1NFUlRfRVEoLTEsIGZjbG9zZShmcCkpOworfQorCiBURVNUKHN0ZGlvLCBwb3BlbikgewogICBGSUxFKiBmcCA9IHBvcGVuKCJjYXQgL3Byb2MvdmVyc2lvbiIsICJyIik7CiAgIEFTU0VSVF9UUlVFKGZwICE9IE5VTEwpOwpAQCAtMzcwLDMgKzUwMiwxNzggQEAKICAgQVNTRVJUX0VRKEVPRiwgcHV0YygneCcsIGZwKSk7CiAgIGZjbG9zZShmcCk7CiB9CisKK1RFU1Qoc3RkaW8sIHNzY2FuZikgeworICBjaGFyIHMxWzEyM107CisgIGludCBpMTsKKyAgZG91YmxlIGQxOworICBjaGFyIHMyWzEyM107CisgIEFTU0VSVF9FUSgzLCBzc2NhbmYoIiAgaGVsbG8gMTIzIDEuMjMgIiwgIiVzICVpICVsZiAlcyIsIHMxLCAmaTEsICZkMSwgczIpKTsKKyAgQVNTRVJUX1NUUkVRKCJoZWxsbyIsIHMxKTsKKyAgQVNTRVJUX0VRKDEyMywgaTEpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMjMsIGQxKTsKK30KKworVEVTVChzdGRpbywgY2FudHdyaXRlX0VCQURGKSB7CisgIC8vIElmIHdlIG9wZW4gYSBmaWxlIHJlYWQtb25seS4uLgorICBGSUxFKiBmcCA9IGZvcGVuKCIvcHJvYy92ZXJzaW9uIiwgInIiKTsKKworICAvLyAuLi5hbGwgYXR0ZW1wdHMgdG8gd3JpdGUgdG8gdGhhdCBmaWxlIHNob3VsZCByZXR1cm4gZmFpbHVyZS4KKworICAvLyBUaGV5IHNob3VsZCBhbHNvIHNldCBlcnJubyB0byBFQkFERi4gVGhpcyBpc24ndCBQT1NJWCwgYnV0IGl0J3MgdHJhZGl0aW9uYWwuCisgIC8vIGdsaWJjIGdldHMgdGhlIHdpZGUtY2hhcmFjdGVyIGZ1bmN0aW9ucyB3cm9uZy4KKworICBlcnJubyA9IDA7CisgIEVYUEVDVF9FUShFT0YsIHB1dGMoJ3gnLCBmcCkpOworICBFWFBFQ1RfRVEoRUJBREYsIGVycm5vKTsKKworICBlcnJubyA9IDA7CisgIEVYUEVDVF9FUShFT0YsIGZwcmludGYoZnAsICJoZWxsbyIpKTsKKyAgRVhQRUNUX0VRKEVCQURGLCBlcnJubyk7CisKKyAgZXJybm8gPSAwOworICBFWFBFQ1RfRVEoRU9GLCBmd3ByaW50ZihmcCwgTCJoZWxsbyIpKTsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIEVYUEVDVF9FUShFQkFERiwgZXJybm8pOworI2VuZGlmCisKKyAgZXJybm8gPSAwOworICBFWFBFQ1RfRVEoMFUsIGZ3cml0ZSgiaGVsbG8iLCAxLCAyLCBmcCkpOworICBFWFBFQ1RfRVEoRUJBREYsIGVycm5vKTsKKworICBlcnJubyA9IDA7CisgIEVYUEVDVF9FUShFT0YsIGZwdXRzKCJoZWxsbyIsIGZwKSk7CisgIEVYUEVDVF9FUShFQkFERiwgZXJybm8pOworCisgIGVycm5vID0gMDsKKyAgRVhQRUNUX0VRKFdFT0YsIGZwdXR3YyhMJ3gnLCBmcCkpOworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgRVhQRUNUX0VRKEVCQURGLCBlcnJubyk7CisjZW5kaWYKK30KKworLy8gVGVzdHMgdGhhdCB3ZSBjYW4gb25seSBoYXZlIGEgY29uc2lzdGVudCBhbmQgY29ycmVjdCBmcG9zX3Qgd2hlbiB1c2luZworLy8gZipwb3MgZnVuY3Rpb25zIChpLmUuIGZwb3MgZG9lc24ndCBnZXQgaW5zaWRlIGEgbXVsdGkgYnl0ZSBjaGFyYWN0ZXIpLgorVEVTVChzdGRpbywgY29uc2lzdGVudF9mcG9zX3QpIHsKKyAgQVNTRVJUX1NUUkVRKCJDLlVURi04Iiwgc2V0bG9jYWxlKExDX0NUWVBFLCAiQy5VVEYtOCIpKTsKKyAgdXNlbG9jYWxlKExDX0dMT0JBTF9MT0NBTEUpOworCisgIEZJTEUqIGZwID0gdG1wZmlsZSgpOworICBBU1NFUlRfVFJVRShmcCAhPSBOVUxMKTsKKworICB3Y2hhcl90IG1iX29uZV9ieXRlcyA9IEwnaCc7CisgIHdjaGFyX3QgbWJfdHdvX2J5dGVzID0gMHgwMGEyOworICB3Y2hhcl90IG1iX3RocmVlX2J5dGVzID0gMHgyMGFjOworICB3Y2hhcl90IG1iX2ZvdXJfYnl0ZXMgPSAweDI0YjYyOworCisgIC8vIFdyaXRlIHRvIGZpbGUuCisgIEFTU0VSVF9FUShtYl9vbmVfYnl0ZXMsIHN0YXRpY19jYXN0PHdjaGFyX3Q+KGZwdXR3YyhtYl9vbmVfYnl0ZXMsIGZwKSkpOworICBBU1NFUlRfRVEobWJfdHdvX2J5dGVzLCBzdGF0aWNfY2FzdDx3Y2hhcl90PihmcHV0d2MobWJfdHdvX2J5dGVzLCBmcCkpKTsKKyAgQVNTRVJUX0VRKG1iX3RocmVlX2J5dGVzLCBzdGF0aWNfY2FzdDx3Y2hhcl90PihmcHV0d2MobWJfdGhyZWVfYnl0ZXMsIGZwKSkpOworICBBU1NFUlRfRVEobWJfZm91cl9ieXRlcywgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oZnB1dHdjKG1iX2ZvdXJfYnl0ZXMsIGZwKSkpOworCisgIHJld2luZChmcCk7CisKKyAgLy8gUmVjb3JkIGVhY2ggY2hhcmFjdGVyIHBvc2l0aW9uLgorICBmcG9zX3QgcG9zMTsKKyAgZnBvc190IHBvczI7CisgIGZwb3NfdCBwb3MzOworICBmcG9zX3QgcG9zNDsKKyAgZnBvc190IHBvczU7CisgIEVYUEVDVF9FUSgwLCBmZ2V0cG9zKGZwLCAmcG9zMSkpOworICBBU1NFUlRfRVEobWJfb25lX2J5dGVzLCBzdGF0aWNfY2FzdDx3Y2hhcl90PihmZ2V0d2MoZnApKSk7CisgIEVYUEVDVF9FUSgwLCBmZ2V0cG9zKGZwLCAmcG9zMikpOworICBBU1NFUlRfRVEobWJfdHdvX2J5dGVzLCBzdGF0aWNfY2FzdDx3Y2hhcl90PihmZ2V0d2MoZnApKSk7CisgIEVYUEVDVF9FUSgwLCBmZ2V0cG9zKGZwLCAmcG9zMykpOworICBBU1NFUlRfRVEobWJfdGhyZWVfYnl0ZXMsIHN0YXRpY19jYXN0PHdjaGFyX3Q+KGZnZXR3YyhmcCkpKTsKKyAgRVhQRUNUX0VRKDAsIGZnZXRwb3MoZnAsICZwb3M0KSk7CisgIEFTU0VSVF9FUShtYl9mb3VyX2J5dGVzLCBzdGF0aWNfY2FzdDx3Y2hhcl90PihmZ2V0d2MoZnApKSk7CisgIEVYUEVDVF9FUSgwLCBmZ2V0cG9zKGZwLCAmcG9zNSkpOworCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICAvLyBCaW9uaWMncyBmcG9zX3QgaXMganVzdCBhbiBhbGlhcyBmb3Igb2ZmX3QuIFRoaXMgaXMgaW5oZXJpdGVkIGZyb20gT3BlbkJTRAorICAvLyB1cHN0cmVhbS4gR2xpYmMgZGlmZmVycyBieSBzdG9yaW5nIHRoZSBtYnN0YXRlX3QgaW5zaWRlIGl0cyBmcG9zX3QuIEluCisgIC8vIEJpb25pYyAoYW5kIHVwc3RyZWFtIE9wZW5CU0QpIHRoZSBtYnN0YXRlX3QgaXMgc3RvcmVkIGluc2lkZSB0aGUgRklMRQorICAvLyBzdHJ1Y3R1cmUuCisgIEFTU0VSVF9FUSgwLCBzdGF0aWNfY2FzdDxvZmZfdD4ocG9zMSkpOworICBBU1NFUlRfRVEoMSwgc3RhdGljX2Nhc3Q8b2ZmX3Q+KHBvczIpKTsKKyAgQVNTRVJUX0VRKDMsIHN0YXRpY19jYXN0PG9mZl90Pihwb3MzKSk7CisgIEFTU0VSVF9FUSg2LCBzdGF0aWNfY2FzdDxvZmZfdD4ocG9zNCkpOworICBBU1NFUlRfRVEoMTAsIHN0YXRpY19jYXN0PG9mZl90Pihwb3M1KSk7CisjZW5kaWYKKworICAvLyBFeGVyY2lzZSBiYWNrIGFuZCBmb3J0aCBtb3ZlbWVudHMgb2YgdGhlIHBvc2l0aW9uLgorICBBU1NFUlRfRVEoMCwgZnNldHBvcyhmcCwgJnBvczIpKTsKKyAgQVNTRVJUX0VRKG1iX3R3b19ieXRlcywgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oZmdldHdjKGZwKSkpOworICBBU1NFUlRfRVEoMCwgZnNldHBvcyhmcCwgJnBvczEpKTsKKyAgQVNTRVJUX0VRKG1iX29uZV9ieXRlcywgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oZmdldHdjKGZwKSkpOworICBBU1NFUlRfRVEoMCwgZnNldHBvcyhmcCwgJnBvczQpKTsKKyAgQVNTRVJUX0VRKG1iX2ZvdXJfYnl0ZXMsIHN0YXRpY19jYXN0PHdjaGFyX3Q+KGZnZXR3YyhmcCkpKTsKKyAgQVNTRVJUX0VRKDAsIGZzZXRwb3MoZnAsICZwb3MzKSk7CisgIEFTU0VSVF9FUShtYl90aHJlZV9ieXRlcywgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oZmdldHdjKGZwKSkpOworICBBU1NFUlRfRVEoMCwgZnNldHBvcyhmcCwgJnBvczUpKTsKKyAgQVNTRVJUX0VRKFdFT0YsIGZnZXR3YyhmcCkpOworCisgIGZjbG9zZShmcCk7Cit9CisKKy8vIEV4ZXJjaXNlIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGZwb3MgYW5kIHNlZWsuCitURVNUKHN0ZGlvLCBmcG9zX3RfYW5kX3NlZWspIHsKKyAgQVNTRVJUX1NUUkVRKCJDLlVURi04Iiwgc2V0bG9jYWxlKExDX0NUWVBFLCAiQy5VVEYtOCIpKTsKKyAgdXNlbG9jYWxlKExDX0dMT0JBTF9MT0NBTEUpOworCisgIC8vIEluIGdsaWJjLTIuMTYgZnNlZWsgZG9lc24ndCB3b3JrIHByb3Blcmx5IGluIHdpZGUgbW9kZQorICAvLyAoaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTQ1NDMpLiBPbmUgd29ya2Fyb3VuZCBpcworICAvLyB0byBjbG9zZSBhbmQgcmUtb3BlbiB0aGUgZmlsZS4gV2UgZG8gaXQgaW4gb3JkZXIgdG8gbWFrZSB0aGUgdGVzdCBwYXNzCisgIC8vIHdpdGggYWxsIGdsaWJjcy4KKworICBUZW1wb3JhcnlGaWxlIHRmOworICBGSUxFKiBmcCA9IGZkb3Blbih0Zi5mZCwgIncrIik7CisgIEFTU0VSVF9UUlVFKGZwICE9IE5VTEwpOworCisgIHdjaGFyX3QgbWJfdHdvX2J5dGVzID0gMHgwMGEyOworICB3Y2hhcl90IG1iX3RocmVlX2J5dGVzID0gMHgyMGFjOworICB3Y2hhcl90IG1iX2ZvdXJfYnl0ZXMgPSAweDI0YjYyOworCisgIC8vIFdyaXRlIHRvIGZpbGUuCisgIEFTU0VSVF9FUShtYl90d29fYnl0ZXMsIHN0YXRpY19jYXN0PHdjaGFyX3Q+KGZwdXR3YyhtYl90d29fYnl0ZXMsIGZwKSkpOworICBBU1NFUlRfRVEobWJfdGhyZWVfYnl0ZXMsIHN0YXRpY19jYXN0PHdjaGFyX3Q+KGZwdXR3YyhtYl90aHJlZV9ieXRlcywgZnApKSk7CisgIEFTU0VSVF9FUShtYl9mb3VyX2J5dGVzLCBzdGF0aWNfY2FzdDx3Y2hhcl90PihmcHV0d2MobWJfZm91cl9ieXRlcywgZnApKSk7CisKKyAgZmZsdXNoKGZwKTsKKyAgZmNsb3NlKGZwKTsKKworICBmcCA9IGZvcGVuKHRmLmZpbGVuYW1lLCAiciIpOworICBBU1NFUlRfVFJVRShmcCAhPSBOVUxMKTsKKworICAvLyBTdG9yZSBhIHZhbGlkIHBvc2l0aW9uLgorICBmcG9zX3QgbWJfdHdvX2J5dGVzX3BvczsKKyAgQVNTRVJUX0VRKDAsIGZnZXRwb3MoZnAsICZtYl90d29fYnl0ZXNfcG9zKSk7CisKKyAgLy8gTW92ZSBpbnNpZGUgbWJfZm91cl9ieXRlcyB3aXRoIGZzZWVrLgorICBsb25nIG9mZnNldF9pbnNpZGVfbWIgPSA2OworICBBU1NFUlRfRVEoMCwgZnNlZWsoZnAsIG9mZnNldF9pbnNpZGVfbWIsIFNFRUtfU0VUKSk7CisKKyAgLy8gU3RvcmUgdGhlICJpbnNpZGUgbXVsdGkgYnl0ZSIgcG9zaXRpb24uCisgIGZwb3NfdCBwb3NfaW5zaWRlX21iOworICBBU1NFUlRfRVEoMCwgZmdldHBvcyhmcCwgJnBvc19pbnNpZGVfbWIpKTsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIEFTU0VSVF9FUShvZmZzZXRfaW5zaWRlX21iLCBzdGF0aWNfY2FzdDxvZmZfdD4ocG9zX2luc2lkZV9tYikpOworI2VuZGlmCisKKyAgLy8gUmVhZGluZyBmcm9tIHdpdGhpbiBhIGJ5dGUgc2hvdWxkIHByb2R1Y2UgYW4gZXJyb3IuCisgIEFTU0VSVF9FUShXRU9GLCBmZ2V0d2MoZnApKTsKKyAgQVNTRVJUX0VRKEVJTFNFUSwgZXJybm8pOworCisgIC8vIFJldmVydGluZyB0byBhIHZhbGlkIHBvc2l0aW9uIHNob3VsZCB3b3JrLgorICBBU1NFUlRfRVEoMCwgZnNldHBvcyhmcCwgJm1iX3R3b19ieXRlc19wb3MpKTsKKyAgQVNTRVJUX0VRKG1iX3R3b19ieXRlcywgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oZmdldHdjKGZwKSkpOworCisgIC8vIE1vdmluZyB3aXRoaW5nIGEgbXVsdGkgYnl0ZSB3aXRoIGZzZXRwb3Mgc2hvdWxkIHdvcmsgYnV0IHJlYWRpbmcgc2hvdWxkCisgIC8vIHByb2R1Y2UgYW4gZXJyb3IuCisgIEFTU0VSVF9FUSgwLCBmc2V0cG9zKGZwLCAmcG9zX2luc2lkZV9tYikpOworICBBU1NFUlRfRVEoV0VPRiwgZmdldHdjKGZwKSk7CisgIEFTU0VSVF9FUShFSUxTRVEsIGVycm5vKTsKKworICBmY2xvc2UoZnApOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RkbGliX3Rlc3QuY3BwIGIvdGVzdHMvc3RkbGliX3Rlc3QuY3BwCmluZGV4IGZhNTljNDEuLjU1M2YwMTggMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N0ZGxpYl90ZXN0LmNwcAorKysgYi90ZXN0cy9zdGRsaWJfdGVzdC5jcHAKQEAgLTE1LDYgKzE1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlICJUZW1wb3JhcnlGaWxlLmgiCiAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGxpYmdlbi5oPgpAQCAtMjIsNiArMjMsOSBAQAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAKIFRFU1Qoc3RkbGliLCBkcmFuZDQ4KSB7CiAgIHNyYW5kNDgoMHgwMTAyMDMwNCk7CkBAIC0zMSwyOCArMzUsMjggQEAKICAgRVhQRUNUX0RPVUJMRV9FUSgwLjA2MTYzNzc4MzA0NzM5NTA4OSwgZHJhbmQ0OCgpKTsKIH0KIAotVEVTVChzdGRsaWIsIGxyYW5kNDhfcmFuZG9tX3JhbmQpIHsKK1RFU1Qoc3RkbGliLCBscmFuZDQ4KSB7CiAgIHNyYW5kNDgoMHgwMTAyMDMwNCk7CiAgIEVYUEVDVF9FUSgxNDA5MTYzNzIwLCBscmFuZDQ4KCkpOwogICBFWFBFQ1RfRVEoMzk3NzY5NzQ2LCBscmFuZDQ4KCkpOwogICBFWFBFQ1RfRVEoOTAyMjY3MTI0LCBscmFuZDQ4KCkpOwogICBFWFBFQ1RfRVEoMTMyMzY2MTMxLCBscmFuZDQ4KCkpOworfQogCi0jaWYgX19CSU9OSUNfXwotICAvLyBPbiBiaW9uaWMsIHJhbmRvbSgzKSBpcyBlcXVpdmFsZW50IHRvIGxyYW5kNDguLi4KK1RFU1Qoc3RkbGliLCByYW5kb20pIHsKICAgc3JhbmRvbSgweDAxMDIwMzA0KTsKLSAgRVhQRUNUX0VRKDE0MDkxNjM3MjAsIHJhbmRvbSgpKTsKLSAgRVhQRUNUX0VRKDM5Nzc2OTc0NiwgcmFuZG9tKCkpOwotICBFWFBFQ1RfRVEoOTAyMjY3MTI0LCByYW5kb20oKSk7Ci0gIEVYUEVDVF9FUSgxMzIzNjYxMzEsIHJhbmRvbSgpKTsKKyAgRVhQRUNUX0VRKDU1NDM2NzM1LCByYW5kb20oKSk7CisgIEVYUEVDVF9FUSgxMzk5ODY1MTE3LCByYW5kb20oKSk7CisgIEVYUEVDVF9FUSgyMDMyNjQzMjgzLCByYW5kb20oKSk7CisgIEVYUEVDVF9FUSg1NzEzMjkyMTYsIHJhbmRvbSgpKTsKK30KIAotICAvLyAuLi5hbmQgcmFuZCgzKSBpcyB0aGUgYm90dG9tIDMyIGJpdHMuCitURVNUKHN0ZGxpYiwgcmFuZCkgewogICBzcmFuZCgweDAxMDIwMzA0KTsKLSAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PGludD4oMTQwOTE2MzcyMCksIHJhbmQoKSk7Ci0gIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxpbnQ+KDM5Nzc2OTc0NiksIHJhbmQoKSk7Ci0gIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxpbnQ+KDkwMjI2NzEyNCksIHJhbmQoKSk7Ci0gIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxpbnQ+KDEzMjM2NjEzMSksIHJhbmQoKSk7Ci0jZW5kaWYKKyAgRVhQRUNUX0VRKDU1NDM2NzM1LCByYW5kKCkpOworICBFWFBFQ1RfRVEoMTM5OTg2NTExNywgcmFuZCgpKTsKKyAgRVhQRUNUX0VRKDIwMzI2NDMyODMsIHJhbmQoKSk7CisgIEVYUEVDVF9FUSg1NzEzMjkyMTYsIHJhbmQoKSk7CiB9CiAKIFRFU1Qoc3RkbGliLCBtcmFuZDQ4KSB7CkBAIC0xNTcsMyArMTYxLDIwMyBAQAogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIEFTU0VSVF9FWElUKFRlc3RCdWc1NzQyMV9tYWluKCksIDo6dGVzdGluZzo6RXhpdGVkV2l0aENvZGUoMCksICIiKTsKIH0KKworVEVTVChzdGRsaWIsIG1rc3RlbXApIHsKKyAgVGVtcG9yYXJ5RmlsZSB0ZjsKKyAgc3RydWN0IHN0YXQgc2I7CisgIEFTU0VSVF9FUSgwLCBmc3RhdCh0Zi5mZCwgJnNiKSk7Cit9CisKK1RFU1Qoc3RkbGliLCBta3N0ZW1wNjQpIHsKKyAgR2VuZXJpY1RlbXBvcmFyeUZpbGU8bWtzdGVtcDY0PiB0ZjsKKyAgc3RydWN0IHN0YXQ2NCBzYjsKKyAgQVNTRVJUX0VRKDAsIGZzdGF0NjQodGYuZmQsICZzYikpOworICBBU1NFUlRfRVEoT19MQVJHRUZJTEUsIGZjbnRsKHRmLmZkLCBGX0dFVEZMKSAmIE9fTEFSR0VGSUxFKTsKK30KKworVEVTVChzdGRsaWIsIHN5c3RlbSkgeworICBpbnQgc3RhdHVzOworCisgIHN0YXR1cyA9IHN5c3RlbSgiZXhpdCAwIik7CisgIEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpKTsKKyAgQVNTRVJUX0VRKDAsIFdFWElUU1RBVFVTKHN0YXR1cykpOworCisgIHN0YXR1cyA9IHN5c3RlbSgiZXhpdCAxIik7CisgIEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpKTsKKyAgQVNTRVJUX0VRKDEsIFdFWElUU1RBVFVTKHN0YXR1cykpOworfQorCitURVNUKHN0ZGxpYiwgYXRvZikgeworICBBU1NFUlRfRE9VQkxFX0VRKDEuMjMsIGF0b2YoIjEuMjMiKSk7Cit9CisKK1RFU1Qoc3RkbGliLCBzdHJ0b2QpIHsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjIzLCBzdHJ0b2QoIjEuMjMiLCBOVUxMKSk7Cit9CisKK1RFU1Qoc3RkbGliLCBzdHJ0b2YpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEuMjMsIHN0cnRvZigiMS4yMyIsIE5VTEwpKTsKK30KKworVEVTVChzdGRsaWIsIHN0cnRvbGQpIHsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjIzLCBzdHJ0b2xkKCIxLjIzIiwgTlVMTCkpOworfQorCitURVNUKHN0ZGxpYiwgcXVpY2tfZXhpdCkgeworICBwaWRfdCBwaWQgPSBmb3JrKCk7CisgIEFTU0VSVF9ORSgtMSwgcGlkKSA8PCBzdHJlcnJvcihlcnJubyk7CisKKyAgaWYgKHBpZCA9PSAwKSB7CisgICAgcXVpY2tfZXhpdCg5OSk7CisgIH0KKworICBpbnQgc3RhdHVzOworICBBU1NFUlRfRVEocGlkLCB3YWl0cGlkKHBpZCwgJnN0YXR1cywgMCkpOworICBBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7CisgIEFTU0VSVF9FUSg5OSwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7Cit9CisKK3N0YXRpYyBpbnQgcXVpY2tfZXhpdF9zdGF0dXMgPSAwOworCitzdGF0aWMgdm9pZCBxdWlja19leGl0XzEodm9pZCkgeworICBBU1NFUlRfRVEocXVpY2tfZXhpdF9zdGF0dXMsIDApOworICBxdWlja19leGl0X3N0YXR1cyA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHF1aWNrX2V4aXRfMih2b2lkKSB7CisgIEFTU0VSVF9FUShxdWlja19leGl0X3N0YXR1cywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdF9ydW4odm9pZCkgeworICBGQUlMKCk7Cit9CisKK1RFU1Qoc3RkbGliLCBhdF9xdWlja19leGl0KSB7CisgIHBpZF90IHBpZCA9IGZvcmsoKTsKKyAgQVNTRVJUX05FKC0xLCBwaWQpIDw8IHN0cmVycm9yKGVycm5vKTsKKworICBpZiAocGlkID09IDApIHsKKyAgICBBU1NFUlRfRVEoYXRfcXVpY2tfZXhpdChxdWlja19leGl0XzIpLCAwKTsKKyAgICBBU1NFUlRfRVEoYXRfcXVpY2tfZXhpdChxdWlja19leGl0XzEpLCAwKTsKKyAgICBhdGV4aXQobm90X3J1bik7CisgICAgcXVpY2tfZXhpdCg5OSk7CisgIH0KKworICBpbnQgc3RhdHVzOworICBBU1NFUlRfRVEocGlkLCB3YWl0cGlkKHBpZCwgJnN0YXR1cywgMCkpOworICBBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7CisgIEFTU0VSVF9FUSg5OSwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7Cit9CisKK1RFU1QodW5pc3RkLCBfRXhpdCkgeworICBpbnQgcGlkID0gZm9yaygpOworICBBU1NFUlRfTkUoLTEsIHBpZCkgPDwgc3RyZXJyb3IoZXJybm8pOworCisgIGlmIChwaWQgPT0gMCkgeworICAgIF9FeGl0KDk5KTsKKyAgfQorCisgIGludCBzdGF0dXM7CisgIEFTU0VSVF9FUShwaWQsIHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKSk7CisgIEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpKTsKKyAgQVNTRVJUX0VRKDk5LCBXRVhJVFNUQVRVUyhzdGF0dXMpKTsKK30KKworVEVTVChzdGRsaWIsIHB0eV9zbW9rZSkgeworICAvLyBnZXRwdCByZXR1cm5zIGEgcHR5IHdpdGggT19SRFdSfE9fTk9DVFRZLgorICBpbnQgZmQgPSBnZXRwdCgpOworICBBU1NFUlRfTkUoLTEsIGZkKTsKKworICAvLyBncmFudHB0IGlzIGEgbm8tb3AuCisgIEFTU0VSVF9FUSgwLCBncmFudHB0KGZkKSk7CisKKyAgLy8gcHRzbmFtZV9yIHNob3VsZCBzdGFydCAiL2Rldi9wdHMvIi4KKyAgY2hhciBuYW1lX3JbMTI4XTsKKyAgQVNTRVJUX0VRKDAsIHB0c25hbWVfcihmZCwgbmFtZV9yLCBzaXplb2YobmFtZV9yKSkpOworICBuYW1lX3JbOV0gPSAwOworICBBU1NFUlRfU1RSRVEoIi9kZXYvcHRzLyIsIG5hbWVfcik7CisKKyAgY2xvc2UoZmQpOworfQorCitURVNUKHN0ZGxpYiwgcG9zaXhfb3BlbnB0KSB7CisgIGludCBmZCA9IHBvc2l4X29wZW5wdChPX1JEV1J8T19OT0NUVFl8T19DTE9FWEVDKTsKKyAgQVNTRVJUX05FKC0xLCBmZCk7CisgIGNsb3NlKGZkKTsKK30KKworVEVTVChzdGRsaWIsIHB0c25hbWVfcl9FTk9UVFkpIHsKKyAgZXJybm8gPSAwOworICBjaGFyIGJ1ZlsxMjhdOworICBBU1NFUlRfRVEoRU5PVFRZLCBwdHNuYW1lX3IoU1RET1VUX0ZJTEVOTywgYnVmLCBzaXplb2YoYnVmKSkpOworICBBU1NFUlRfRVEoRU5PVFRZLCBlcnJubyk7Cit9CisKK1RFU1Qoc3RkbGliLCBwdHNuYW1lX3JfRUlOVkFMKSB7CisgIGludCBmZCA9IGdldHB0KCk7CisgIEFTU0VSVF9ORSgtMSwgZmQpOworICBlcnJubyA9IDA7CisgIGNoYXIqIGJ1ZiA9IE5VTEw7CisgIEFTU0VSVF9FUShFSU5WQUwsIHB0c25hbWVfcihmZCwgYnVmLCAxMjgpKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICBjbG9zZShmZCk7Cit9CisKK1RFU1Qoc3RkbGliLCBwdHNuYW1lX3JfRVJBTkdFKSB7CisgIGludCBmZCA9IGdldHB0KCk7CisgIEFTU0VSVF9ORSgtMSwgZmQpOworICBlcnJubyA9IDA7CisgIGNoYXIgYnVmWzFdOworICBBU1NFUlRfRVEoRVJBTkdFLCBwdHNuYW1lX3IoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKyAgQVNTRVJUX0VRKEVSQU5HRSwgZXJybm8pOworICBjbG9zZShmZCk7Cit9CisKK1RFU1Qoc3RkbGliLCB0dHluYW1lX3IpIHsKKyAgaW50IGZkID0gZ2V0cHQoKTsKKyAgQVNTRVJUX05FKC0xLCBmZCk7CisKKyAgLy8gdHR5bmFtZV9yIHJldHVybnMgIi9kZXYvcHRteCIgZm9yIGEgcHR5LgorICBjaGFyIG5hbWVfclsxMjhdOworICBBU1NFUlRfRVEoMCwgdHR5bmFtZV9yKGZkLCBuYW1lX3IsIHNpemVvZihuYW1lX3IpKSk7CisgIEFTU0VSVF9TVFJFUSgiL2Rldi9wdG14IiwgbmFtZV9yKTsKKworICBjbG9zZShmZCk7Cit9CisKK1RFU1Qoc3RkbGliLCB0dHluYW1lX3JfRU5PVFRZKSB7CisgIGludCBmZCA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fV1JPTkxZKTsKKyAgZXJybm8gPSAwOworICBjaGFyIGJ1ZlsxMjhdOworICBBU1NFUlRfRVEoRU5PVFRZLCB0dHluYW1lX3IoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKyAgQVNTRVJUX0VRKEVOT1RUWSwgZXJybm8pOworICBjbG9zZShmZCk7Cit9CisKK1RFU1Qoc3RkbGliLCB0dHluYW1lX3JfRUlOVkFMKSB7CisgIGludCBmZCA9IGdldHB0KCk7CisgIEFTU0VSVF9ORSgtMSwgZmQpOworICBlcnJubyA9IDA7CisgIGNoYXIqIGJ1ZiA9IE5VTEw7CisgIEFTU0VSVF9FUShFSU5WQUwsIHR0eW5hbWVfcihmZCwgYnVmLCAxMjgpKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICBjbG9zZShmZCk7Cit9CisKK1RFU1Qoc3RkbGliLCB0dHluYW1lX3JfRVJBTkdFKSB7CisgIGludCBmZCA9IGdldHB0KCk7CisgIEFTU0VSVF9ORSgtMSwgZmQpOworICBlcnJubyA9IDA7CisgIGNoYXIgYnVmWzFdOworICBBU1NFUlRfRVEoRVJBTkdFLCB0dHluYW1lX3IoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKyAgQVNTRVJUX0VRKEVSQU5HRSwgZXJybm8pOworICBjbG9zZShmZCk7Cit9CisKK1RFU1Qoc3RkbGliLCB1bmxvY2twdF9FTk9UVFkpIHsKKyAgaW50IGZkID0gb3BlbigiL2Rldi9udWxsIiwgT19XUk9OTFkpOworICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUSgtMSwgdW5sb2NrcHQoZmQpKTsKKyAgQVNTRVJUX0VRKEVOT1RUWSwgZXJybm8pOworICBjbG9zZShmZCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zdHJpbmdfdGVzdC5jcHAgYi90ZXN0cy9zdHJpbmdfdGVzdC5jcHAKaW5kZXggMWE3ZTI3ZC4uNzNjOTRjNiAxMDA2NDQKLS0tIGEvdGVzdHMvc3RyaW5nX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL3N0cmluZ190ZXN0LmNwcApAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKICNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIApAQCAtNDYsMTQgKzQ3LDE2IEBACiAgIEFTU0VSVF9TVFJFUSgiVW5rbm93biBlcnJvciAxMjM0Iiwgc3RyZXJyb3IoMTIzNCkpOwogfQogCi0jaWYgX19CSU9OSUNfXyAvLyBnbGliYydzIHN0cmVycm9yIGlzbid0IHRocmVhZCBzYWZlLCBvbmx5IGl0cyBzdHJzaWduYWwuCi0KKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiBzdGF0aWMgdm9pZCogQ29uY3VycmVudFN0ckVycm9yRm4odm9pZCopIHsKICAgYm9vbCBlcXVhbCA9IChzdHJjbXAoIlVua25vd24gZXJyb3IgMjAwMiIsIHN0cmVycm9yKDIwMDIpKSA9PSAwKTsKICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVxdWFsKTsKIH0KKyNlbmRpZiAvLyBfX0JJT05JQ19fCiAKKy8vIGdsaWJjJ3Mgc3RyZXJyb3IgaXNuJ3QgdGhyZWFkIHNhZmUsIG9ubHkgaXRzIHN0cnNpZ25hbC4KIFRFU1Qoc3RyaW5nLCBzdHJlcnJvcl9jb25jdXJyZW50KSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBjb25zdCBjaGFyKiBzdHJlcnJvcjEwMDEgPSBzdHJlcnJvcigxMDAxKTsKICAgQVNTRVJUX1NUUkVRKCJVbmtub3duIGVycm9yIDEwMDEiLCBzdHJlcnJvcjEwMDEpOwogCkBAIC02NCwxMiArNjcsMTMgQEAKICAgQVNTRVJUX1RSVUUoc3RhdGljX2Nhc3Q8Ym9vbD4ocmVzdWx0KSk7CiAKICAgQVNTRVJUX1NUUkVRKCJVbmtub3duIGVycm9yIDEwMDEiLCBzdHJlcnJvcjEwMDEpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKLSNlbmRpZgotCi0jaWYgX19CSU9OSUNfXyAvLyBnbGliYydzIHN0cmVycm9yX3IgZG9lc24ndCBldmVuIGhhdmUgdGhlIHNhbWUgc2lnbmF0dXJlIGFzIHRoZSBQT1NJWCBvbmUuCiBURVNUKHN0cmluZywgc3RyZXJyb3JfcikgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykgLy8gZ2xpYmMncyBzdHJlcnJvcl9yIGRvZXNuJ3QgZXZlbiBoYXZlIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyB0aGUgUE9TSVggb25lLgogICBjaGFyIGJ1ZlsyNTZdOwogCiAgIC8vIFZhbGlkLgpAQCAtODcsMTkgKzkxLDE5IEBACiAgIC8vIEJ1ZmZlciB0b28gc21hbGwuCiAgIEFTU0VSVF9FUSgtMSwgc3RyZXJyb3JfcigwLCBidWYsIDIpKTsKICAgQVNTRVJUX0VRKEVSQU5HRSwgZXJybm8pOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9Ci0jZW5kaWYKIAogVEVTVChzdHJpbmcsIHN0cnNpZ25hbCkgewogICAvLyBBIHJlZ3VsYXIgc2lnbmFsLgogICBBU1NFUlRfU1RSRVEoIkhhbmd1cCIsIHN0cnNpZ25hbCgxKSk7CiAKICAgLy8gQSByZWFsLXRpbWUgc2lnbmFsLgotI2lmZGVmIF9fR0xJQkNfXyAvLyBnbGliYyByZXNlcnZlcyByZWFsLXRpbWUgc2lnbmFscyBmb3IgaW50ZXJuYWwgdXNlLCBhbmQgZG9lc24ndCBjb3VudCB0aG9zZS4KLSAgQVNTRVJUX1NUUkVRKCJSZWFsLXRpbWUgc2lnbmFsIDE0Iiwgc3Ryc2lnbmFsKDQ4KSk7Ci0jZWxzZQotICBBU1NFUlRfU1RSRVEoIlJlYWwtdGltZSBzaWduYWwgMTYiLCBzdHJzaWduYWwoNDgpKTsKLSNlbmRpZgorICBBU1NFUlRfU1RSRVEoIlJlYWwtdGltZSBzaWduYWwgMTQiLCBzdHJzaWduYWwoU0lHUlRNSU4gKyAxNCkpOworICAvLyBPbmUgb2YgdGhlIHNpZ25hbHMgdGhlIEMgbGlicmFyeSBrZWVwcyB0byBpdHNlbGYuCisgIEFTU0VSVF9TVFJFUSgiVW5rbm93biBzaWduYWwgMzIiLCBzdHJzaWduYWwoX19TSUdSVE1JTikpOwogCiAgIC8vIEVycm9ycy4KICAgQVNTRVJUX1NUUkVRKCJVbmtub3duIHNpZ25hbCAtMSIsIHN0cnNpZ25hbCgtMSkpOyAvLyBUb28gc21hbGwuCkBAIC0xNDAsOSArMTQ0LDkgQEAKICAgICBpbnQgbWF4X2FsaWdubWVudCA9IDY0OwogCiAgICAgLy8gVE9ETzogZml4IHRoZSB0ZXN0cyB0byBub3Qgc29tZXRpbWVzIHVzZSB0d2ljZSB0aGVpciBzcGVjaWZpZWQgIk1BWF9MRU4iLgotICAgIGdsb2JfcHRyID0gcmVpbnRlcnByZXRfY2FzdDxDaGFyYWN0ZXIqPih2YWxsb2MoMiAqIHNpemVvZihDaGFyYWN0ZXIpICogTUFYX0xFTiArIG1heF9hbGlnbm1lbnQpKTsKLSAgICBnbG9iX3B0cjEgPSByZWludGVycHJldF9jYXN0PENoYXJhY3Rlcio+KHZhbGxvYygyICogc2l6ZW9mKENoYXJhY3RlcikgKiBNQVhfTEVOICsgbWF4X2FsaWdubWVudCkpOwotICAgIGdsb2JfcHRyMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2hhcmFjdGVyKj4odmFsbG9jKDIgKiBzaXplb2YoQ2hhcmFjdGVyKSAqIE1BWF9MRU4gKyBtYXhfYWxpZ25tZW50KSk7CisgICAgZ2xvYl9wdHIgPSByZWludGVycHJldF9jYXN0PENoYXJhY3Rlcio+KG1lbWFsaWduKHN5c2NvbmYoX1NDX1BBR0VTSVpFKSwgMiAqIHNpemVvZihDaGFyYWN0ZXIpICogTUFYX0xFTiArIG1heF9hbGlnbm1lbnQpKTsKKyAgICBnbG9iX3B0cjEgPSByZWludGVycHJldF9jYXN0PENoYXJhY3Rlcio+KG1lbWFsaWduKHN5c2NvbmYoX1NDX1BBR0VTSVpFKSwgMiAqIHNpemVvZihDaGFyYWN0ZXIpICogTUFYX0xFTiArIG1heF9hbGlnbm1lbnQpKTsKKyAgICBnbG9iX3B0cjIgPSByZWludGVycHJldF9jYXN0PENoYXJhY3Rlcio+KG1lbWFsaWduKHN5c2NvbmYoX1NDX1BBR0VTSVpFKSwgMiAqIHNpemVvZihDaGFyYWN0ZXIpICogTUFYX0xFTiArIG1heF9hbGlnbm1lbnQpKTsKIAogICAgIEluaXRMZW5BcnJheSgpOwogCkBAIC0yMTcsNyArMjIxLDcgQEAKIFRFU1Qoc3RyaW5nLCBzdHJjcHkyKSB7CiAgIGNoYXIgYnVmWzFdOwogICBjaGFyKiBvcmlnID0gc3RyZHVwKCIiKTsKLSAgc3RyY3B5KGJ1Ziwgb3JpZyk7CisgIEFTU0VSVF9FUShidWYsIHN0cmNweShidWYsIG9yaWcpKTsKICAgQVNTRVJUX0VRKCdcMCcsIGJ1ZlswXSk7CiAgIGZyZWUob3JpZyk7CiB9CkBAIC0yMjcsMTMgKzIzMSw4IEBACiAgIGNoYXIgYnVmWzEwXTsKICAgY2hhciogb3JpZyA9IHN0cmR1cCgiMTIzNDUiKTsKICAgbWVtc2V0KGJ1ZiwgJ0EnLCBzaXplb2YoYnVmKSk7Ci0gIHN0cmNweShidWYsIG9yaWcpOwotICBBU1NFUlRfRVEoJzEnLCAgYnVmWzBdKTsKLSAgQVNTRVJUX0VRKCcyJywgIGJ1ZlsxXSk7Ci0gIEFTU0VSVF9FUSgnMycsICBidWZbMl0pOwotICBBU1NFUlRfRVEoJzQnLCAgYnVmWzNdKTsKLSAgQVNTRVJUX0VRKCc1JywgIGJ1Zls0XSk7Ci0gIEFTU0VSVF9FUSgnXDAnLCBidWZbNV0pOworICBBU1NFUlRfRVEoYnVmLCBzdHJjcHkoYnVmLCBvcmlnKSk7CisgIEFTU0VSVF9TVFJFUSgiMTIzNDUiLCBidWYpOwogICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzZdKTsKICAgQVNTRVJUX0VRKCdBJywgIGJ1Zls3XSk7CiAgIEFTU0VSVF9FUSgnQScsICBidWZbOF0pOwpAQCAtMjQ2LDE3ICsyNDUsNDEgQEAKICAgY2hhciBidWZbMTBdOwogICBjaGFyKiBvcmlnID0gc3RyZHVwKCIxMjM0NTY3ODkiKTsKICAgbWVtc2V0KGJ1ZiwgJ0EnLCBzaXplb2YoYnVmKSk7Ci0gIHN0cmNweShidWYsIG9yaWcpOwotICBBU1NFUlRfRVEoJzEnLCAgYnVmWzBdKTsKLSAgQVNTRVJUX0VRKCcyJywgIGJ1ZlsxXSk7Ci0gIEFTU0VSVF9FUSgnMycsICBidWZbMl0pOwotICBBU1NFUlRfRVEoJzQnLCAgYnVmWzNdKTsKLSAgQVNTRVJUX0VRKCc1JywgIGJ1Zls0XSk7Ci0gIEFTU0VSVF9FUSgnNicsICBidWZbNV0pOwotICBBU1NFUlRfRVEoJzcnLCAgYnVmWzZdKTsKLSAgQVNTRVJUX0VRKCc4JywgIGJ1Zls3XSk7Ci0gIEFTU0VSVF9FUSgnOScsICBidWZbOF0pOwotICBBU1NFUlRfRVEoJ1wwJywgYnVmWzldKTsKKyAgQVNTRVJUX0VRKGJ1Ziwgc3RyY3B5KGJ1Ziwgb3JpZykpOworICBBU1NFUlRfU1RSRVEoIjEyMzQ1Njc4OSIsIGJ1Zik7CisgIGZyZWUob3JpZyk7Cit9CisKKy8vIG9uZSBieXRlIHRhcmdldCB3aXRoICJcMCIgc291cmNlCitURVNUKHN0cmluZywgc3RwY3B5MikgeworICBjaGFyIGJ1ZlsxXTsKKyAgY2hhciogb3JpZyA9IHN0cmR1cCgiIik7CisgIEFTU0VSVF9FUShidWYsIHN0cGNweShidWYsIG9yaWcpKTsKKyAgQVNTRVJUX0VRKCdcMCcsIGJ1ZlswXSk7CisgIGZyZWUob3JpZyk7Cit9CisKKy8vIG11bHRpYnl0ZSB0YXJnZXQgd2hlcmUgd2UgdW5kZXIgZmlsbCB0YXJnZXQKK1RFU1Qoc3RyaW5nLCBzdHBjcHkzKSB7CisgIGNoYXIgYnVmWzEwXTsKKyAgY2hhciogb3JpZyA9IHN0cmR1cCgiMTIzNDUiKTsKKyAgbWVtc2V0KGJ1ZiwgJ0EnLCBzaXplb2YoYnVmKSk7CisgIEFTU0VSVF9FUShidWYrc3RybGVuKG9yaWcpLCBzdHBjcHkoYnVmLCBvcmlnKSk7CisgIEFTU0VSVF9TVFJFUSgiMTIzNDUiLCBidWYpOworICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzZdKTsKKyAgQVNTRVJUX0VRKCdBJywgIGJ1Zls3XSk7CisgIEFTU0VSVF9FUSgnQScsICBidWZbOF0pOworICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzldKTsKKyAgZnJlZShvcmlnKTsKK30KKworLy8gbXVsdGlieXRlIHRhcmdldCB3aGVyZSB3ZSBmaWxsIHRhcmdldCBleGFjdGx5CitURVNUKHN0cmluZywgc3RwY3B5NCkgeworICBjaGFyIGJ1ZlsxMF07CisgIGNoYXIqIG9yaWcgPSBzdHJkdXAoIjEyMzQ1Njc4OSIpOworICBtZW1zZXQoYnVmLCAnQScsIHNpemVvZihidWYpKTsKKyAgQVNTRVJUX0VRKGJ1ZitzdHJsZW4ob3JpZyksIHN0cGNweShidWYsIG9yaWcpKTsKKyAgQVNTRVJUX1NUUkVRKCIxMjM0NTY3ODkiLCBidWYpOwogICBmcmVlKG9yaWcpOwogfQogCkBAIC0yNjcsMTMgKzI5MCw3IEBACiAgIGJ1ZlsxXSA9ICdcMCc7CiAgIGNoYXIqIHJlcyA9IHN0cmNhdChidWYsICIwMTIzNCIpOwogICBBU1NFUlRfRVEoYnVmLCByZXMpOwotICBBU1NFUlRfRVEoJ2EnLCAgYnVmWzBdKTsKLSAgQVNTRVJUX0VRKCcwJywgIGJ1ZlsxXSk7Ci0gIEFTU0VSVF9FUSgnMScsICBidWZbMl0pOwotICBBU1NFUlRfRVEoJzInLCAgYnVmWzNdKTsKLSAgQVNTRVJUX0VRKCczJywgIGJ1Zls0XSk7Ci0gIEFTU0VSVF9FUSgnNCcsICBidWZbNV0pOwotICBBU1NFUlRfRVEoJ1wwJywgYnVmWzZdKTsKKyAgQVNTRVJUX1NUUkVRKCJhMDEyMzQiLCBidWYpOwogICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzddKTsKICAgQVNTRVJUX0VRKCdBJywgIGJ1Zls4XSk7CiAgIEFTU0VSVF9FUSgnQScsICBidWZbOV0pOwpAQCAtMjg2LDE2ICszMDMsNyBAQAogICBidWZbMV0gPSAnXDAnOwogICBjaGFyKiByZXMgPSBzdHJjYXQoYnVmLCAiMDEyMzQ1NjciKTsKICAgQVNTRVJUX0VRKGJ1ZiwgcmVzKTsKLSAgQVNTRVJUX0VRKCdhJywgIGJ1ZlswXSk7Ci0gIEFTU0VSVF9FUSgnMCcsICBidWZbMV0pOwotICBBU1NFUlRfRVEoJzEnLCAgYnVmWzJdKTsKLSAgQVNTRVJUX0VRKCcyJywgIGJ1ZlszXSk7Ci0gIEFTU0VSVF9FUSgnMycsICBidWZbNF0pOwotICBBU1NFUlRfRVEoJzQnLCAgYnVmWzVdKTsKLSAgQVNTRVJUX0VRKCc1JywgYnVmWzZdKTsKLSAgQVNTRVJUX0VRKCc2JywgIGJ1Zls3XSk7Ci0gIEFTU0VSVF9FUSgnNycsICBidWZbOF0pOwotICBBU1NFUlRfRVEoJ1wwJywgIGJ1Zls5XSk7CisgIEFTU0VSVF9TVFJFUSgiYTAxMjM0NTY3IiwgYnVmKTsKIH0KIAogVEVTVChzdHJpbmcsIHN0cm5jYXQyKSB7CkBAIC0zMDUsMTMgKzMxMyw3IEBACiAgIGJ1ZlsxXSA9ICdcMCc7CiAgIGNoYXIqIHJlcyA9IHN0cm5jYXQoYnVmLCAiMDEyMzQiLCBzaXplb2YoYnVmKSAtIHN0cmxlbihidWYpIC0gMSk7CiAgIEFTU0VSVF9FUShidWYsIHJlcyk7Ci0gIEFTU0VSVF9FUSgnYScsICBidWZbMF0pOwotICBBU1NFUlRfRVEoJzAnLCAgYnVmWzFdKTsKLSAgQVNTRVJUX0VRKCcxJywgIGJ1ZlsyXSk7Ci0gIEFTU0VSVF9FUSgnMicsICBidWZbM10pOwotICBBU1NFUlRfRVEoJzMnLCAgYnVmWzRdKTsKLSAgQVNTRVJUX0VRKCc0JywgIGJ1Zls1XSk7Ci0gIEFTU0VSVF9FUSgnXDAnLCBidWZbNl0pOworICBBU1NFUlRfU1RSRVEoImEwMTIzNCIsIGJ1Zik7CiAgIEFTU0VSVF9FUSgnQScsICBidWZbN10pOwogICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzhdKTsKICAgQVNTRVJUX0VRKCdBJywgIGJ1Zls5XSk7CkBAIC0zMjQsMTMgKzMyNiw3IEBACiAgIGJ1ZlsxXSA9ICdcMCc7CiAgIGNoYXIqIHJlcyA9IHN0cm5jYXQoYnVmLCAiMDEyMzQ1Njc4OSIsIDUpOwogICBBU1NFUlRfRVEoYnVmLCByZXMpOwotICBBU1NFUlRfRVEoJ2EnLCAgYnVmWzBdKTsKLSAgQVNTRVJUX0VRKCcwJywgIGJ1ZlsxXSk7Ci0gIEFTU0VSVF9FUSgnMScsICBidWZbMl0pOwotICBBU1NFUlRfRVEoJzInLCAgYnVmWzNdKTsKLSAgQVNTRVJUX0VRKCczJywgIGJ1Zls0XSk7Ci0gIEFTU0VSVF9FUSgnNCcsICBidWZbNV0pOwotICBBU1NFUlRfRVEoJ1wwJywgYnVmWzZdKTsKKyAgQVNTRVJUX1NUUkVRKCJhMDEyMzQiLCBidWYpOwogICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzddKTsKICAgQVNTRVJUX0VRKCdBJywgIGJ1Zls4XSk7CiAgIEFTU0VSVF9FUSgnQScsICBidWZbOV0pOwpAQCAtMzQzLDE2ICszMzksNyBAQAogICBidWZbMV0gPSAnXDAnOwogICBjaGFyKiByZXMgPSBzdHJuY2F0KGJ1ZiwgIjAxMjM0NTY3IiwgOCk7CiAgIEFTU0VSVF9FUShidWYsIHJlcyk7Ci0gIEFTU0VSVF9FUSgnYScsICBidWZbMF0pOwotICBBU1NFUlRfRVEoJzAnLCAgYnVmWzFdKTsKLSAgQVNTRVJUX0VRKCcxJywgIGJ1ZlsyXSk7Ci0gIEFTU0VSVF9FUSgnMicsICBidWZbM10pOwotICBBU1NFUlRfRVEoJzMnLCAgYnVmWzRdKTsKLSAgQVNTRVJUX0VRKCc0JywgIGJ1Zls1XSk7Ci0gIEFTU0VSVF9FUSgnNScsIGJ1Zls2XSk7Ci0gIEFTU0VSVF9FUSgnNicsICBidWZbN10pOwotICBBU1NFUlRfRVEoJzcnLCAgYnVmWzhdKTsKLSAgQVNTRVJUX0VRKCdcMCcsICBidWZbOV0pOworICBBU1NFUlRfU1RSRVEoImEwMTIzNDU2NyIsIGJ1Zik7CiB9CiAKIFRFU1Qoc3RyaW5nLCBzdHJuY2F0NSkgewpAQCAtMzYyLDE2ICszNDksNyBAQAogICBidWZbMV0gPSAnXDAnOwogICBjaGFyKiByZXMgPSBzdHJuY2F0KGJ1ZiwgIjAxMjM0NTY3IiwgOSk7CiAgIEFTU0VSVF9FUShidWYsIHJlcyk7Ci0gIEFTU0VSVF9FUSgnYScsICBidWZbMF0pOwotICBBU1NFUlRfRVEoJzAnLCAgYnVmWzFdKTsKLSAgQVNTRVJUX0VRKCcxJywgIGJ1ZlsyXSk7Ci0gIEFTU0VSVF9FUSgnMicsICBidWZbM10pOwotICBBU1NFUlRfRVEoJzMnLCAgYnVmWzRdKTsKLSAgQVNTRVJUX0VRKCc0JywgIGJ1Zls1XSk7Ci0gIEFTU0VSVF9FUSgnNScsIGJ1Zls2XSk7Ci0gIEFTU0VSVF9FUSgnNicsICBidWZbN10pOwotICBBU1NFUlRfRVEoJzcnLCAgYnVmWzhdKTsKLSAgQVNTRVJUX0VRKCdcMCcsICBidWZbOV0pOworICBBU1NFUlRfU1RSRVEoImEwMTIzNDU2NyIsIGJ1Zik7CiB9CiAKIFRFU1Qoc3RyaW5nLCBzdHJjaHJfd2l0aF8wKSB7CkBAIC0zODEsNiArMzU5LDI0IEBACiAgIEVYUEVDVF9UUlVFKHN0cmNocihidWYsICdcMCcpID09IChidWYgKyBzdHJsZW4ocykpKTsKIH0KIAorVEVTVChzdHJpbmcsIHN0cmNocl9tdWx0aXBsZSkgeworICBjaGFyIHN0clsxMjhdOworICBtZW1zZXQoc3RyLCAnYScsIHNpemVvZihzdHIpIC0gMSk7CisgIHN0cltzaXplb2Yoc3RyKS0xXSA9ICdcMCc7CisKKyAgLy8gVmVyaWZ5IHRoYXQgc3RyY2hyIGZpbmRzIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICdhJyBpbiBhIHN0cmluZworICAvLyBmaWxsZWQgd2l0aCAnYScgY2hhcmFjdGVycy4gSXRlcmF0ZSBvdmVyIHRoZSBzdHJpbmcgcHV0dGluZworICAvLyBub24gJ2EnIGNoYXJhY3RlcnMgYXQgdGhlIGZyb250IG9mIHRoZSBzdHJpbmcgZHVyaW5nIGVhY2ggaXRlcmF0aW9uCisgIC8vIGFuZCBjb250aW51ZSB0byB2ZXJpZnkgdGhhdCBzdHJjaHIgY2FuIGZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2UKKyAgLy8gcHJvcGVybHkuIFRoZSBpZGVhIGlzIHRvIGNvdmVyIGFsbCBwb3NzaWJsZSBhbGlnbm1lbnRzIG9mIHRoZSBsb2NhdGlvbgorICAvLyBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgJ2EnIGNoYXJhY3RlciBhbmQgd2hpY2ggaW5jbHVkZXMKKyAgLy8gb3RoZXIgJ2EnIGNoYXJhY3RlcnMgY2xvc2UgYnkuCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKHN0cikgLSAxOyBpKyspIHsKKyAgICBFWFBFQ1RfRVEoJnN0cltpXSwgc3RyY2hyKHN0ciwgJ2EnKSk7CisgICAgc3RyW2ldID0gJ2InOworICB9Cit9CisKIFRFU1Qoc3RyaW5nLCBzdHJjaHIpIHsKICAgaW50IHNlZWtfY2hhciA9IHJhbmRvbSgpICYgMjU1OwogCkBAIC00NTEsNiArNDQ3LDMyIEBACiAgIH0KIH0KIAorVEVTVChzdHJpbmcsIHN0cGNweSkgeworICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoU01BTEwpOworICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFBPU19JVEVSOyBqKyspIHsKKyAgICBzdGF0ZS5OZXdJdGVyYXRpb24oKTsKKworICAgIHNpemVfdCBwb3MgPSByYW5kb20oKSAlIHN0YXRlLk1BWF9MRU47CisKKyAgICBtZW1zZXQoc3RhdGUucHRyMSwgJ1wyJywgcG9zKTsKKyAgICBzdGF0ZS5wdHIxW3Bvc10gPSAnXDAnOworICAgIHN0YXRlLnB0cjFbc3RhdGUuTUFYX0xFTiAtIDFdID0gJ1wwJzsKKworICAgIG1lbWNweShzdGF0ZS5wdHIsIHN0YXRlLnB0cjEsIHN0YXRlLk1BWF9MRU4pOworCisgICAgbWVtc2V0KHN0YXRlLnB0cjIsICdcMScsIHN0YXRlLk1BWF9MRU4pOworICAgIHN0YXRlLnB0cjJbc3RhdGUuTUFYX0xFTiAtIDFdID0gJ1wwJzsKKworICAgIG1lbXNldChzdGF0ZS5wdHIgKyBzdGF0ZS5NQVhfTEVOLCAnXDEnLCBzdGF0ZS5NQVhfTEVOKTsKKyAgICBtZW1jcHkoc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiwgc3RhdGUucHRyMSwgcG9zICsgMSk7CisgICAgc3RhdGUucHRyWzIgKiBzdGF0ZS5NQVhfTEVOIC0gMV0gPSAnXDAnOworCisgICAgQVNTRVJUX1RSVUUoc3RwY3B5KHN0YXRlLnB0cjIsIHN0YXRlLnB0cjEpID09IHN0YXRlLnB0cjIgKyBzdHJsZW4oc3RhdGUucHRyMSkpOworICAgIEFTU0VSVF9GQUxTRSgobWVtY21wKHN0YXRlLnB0cjEsIHN0YXRlLnB0ciwgc3RhdGUuTUFYX0xFTikpICE9IDAgfHwKKyAgICAgICAgICAgICAgICAgKG1lbWNtcChzdGF0ZS5wdHIyLCBzdGF0ZS5wdHIgKyBzdGF0ZS5NQVhfTEVOLCBzdGF0ZS5NQVhfTEVOKSAhPSAwKSk7CisgIH0KK30KKwogVEVTVChzdHJpbmcsIHN0cmNweSkgewogICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoU01BTEwpOwogICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFBPU19JVEVSOyBqKyspIHsKQEAgLTQ3Nyw5ICs0OTksOCBAQAogICB9CiB9CiAKLQotI2lmIF9fQklPTklDX18KIFRFU1Qoc3RyaW5nLCBzdHJsY2F0KSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoU01BTEwpOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLm47IGkrKykgewogICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgUE9TX0lURVI7IGorKykgewpAQCAtNTA0LDExICs1MjUsMTMgQEAKICAgICAgIEFTU0VSVF9UUlVFKG1lbWNtcChzdGF0ZS5wdHIsIHN0YXRlLnB0cjIsIHN0YXRlLk1BWF9MRU4gKyBzdGF0ZS5sZW5baV0pID09IDApOwogICAgIH0KICAgfQorI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9Ci0jZW5kaWYKIAotI2lmIF9fQklPTklDX18KIFRFU1Qoc3RyaW5nLCBzdHJsY3B5KSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoU01BTEwpOwogICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFBPU19JVEVSOyBqKyspIHsKICAgICBzdGF0ZS5OZXdJdGVyYXRpb24oKTsKQEAgLTUzOSw4ICs1NjIsMTAgQEAKICAgICBBU1NFUlRfRkFMU0UoKG1lbWNtcChzdGF0ZS5wdHIxLCBzdGF0ZS5wdHIsIHN0YXRlLk1BWF9MRU4pICE9IDApIHx8CiAgICAgICAgICAgICAgICAgIChtZW1jbXAoc3RhdGUucHRyMiwgc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiwgc3RhdGUuTUFYX0xFTikgIT0gMCkpOwogICB9CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KLSNlbmRpZgogCiBURVNUKHN0cmluZywgc3RybmNhdCkgewogICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoU01BTEwpOwpAQCAtNjA1LDMwICs2MzAsODEgQEAKICAgfQogfQogCitURVNUKHN0cmluZywgc3RwbmNweSkgeworICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoU01BTEwpOworICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IElURVI7IGorKykgeworICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOworCisgICAgLy8gQ2hvb3NlIGEgcmFuZG9tIHZhbHVlIHRvIGZpbGwgdGhlIHN0cmluZywgZXhjZXB0IFwwIChzdHJpbmcgdGVybWluYXRvciksCisgICAgLy8gb3IgXDEgKGd1YXJhbnRlZXMgaXQncyBkaWZmZXJlbnQgZnJvbSBhbnl0aGluZyBpbiBwdHIyKS4KKyAgICBtZW1zZXQoc3RhdGUucHRyMSwgKHJhbmRvbSgpICUgMjU0KSArIDIsIHN0YXRlLk1BWF9MRU4pOworICAgIC8vIENob29zZSBhIHJhbmRvbSBzaXplIGZvciBvdXIgc3JjIGJ1ZmZlci4KKyAgICBzaXplX3QgcHRyMV9sZW4gPSByYW5kb20oKSAlIHN0YXRlLk1BWF9MRU47CisgICAgc3RhdGUucHRyMVtwdHIxX2xlbl0gPSAnXDAnOworICAgIC8vIENvcHkgcHRyMSBpbnRvIHB0ciwgdXNlZCB0byB2ZXJpZnkgdGhhdCBwdHIxIGRvZXMgbm90IGdldCBtb2RpZmllZC4KKyAgICBtZW1jcHkoc3RhdGUucHRyLCBzdGF0ZS5wdHIxLCBzdGF0ZS5NQVhfTEVOKTsKKyAgICAvLyBJbml0IHB0cjIgdG8gYSBzZXQgdmFsdWUuCisgICAgbWVtc2V0KHN0YXRlLnB0cjIsICdcMScsIHN0YXRlLk1BWF9MRU4pOworCisgICAgLy8gQ2hvb3NlIGEgcmFuZG9tIGFtb3VudCBvZiBkYXRhIHRvIGNvcHkuCisgICAgc2l6ZV90IGNvcHlfbGVuID0gcmFuZG9tKCkgJSBzdGF0ZS5NQVhfTEVOOworCisgICAgLy8gU2V0IHRoZSBzZWNvbmQgaGFsZiBvZiBwdHIgdG8gdGhlIGV4cGVjdGVkIHBhdHRlcm4gaW4gcHRyMi4KKyAgICBtZW1zZXQoc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiwgJ1wxJywgc3RhdGUuTUFYX0xFTik7CisgICAgbWVtY3B5KHN0YXRlLnB0ciArIHN0YXRlLk1BWF9MRU4sIHN0YXRlLnB0cjEsIGNvcHlfbGVuKTsKKyAgICBzaXplX3QgZXhwZWN0ZWRfZW5kOworICAgIGlmIChjb3B5X2xlbiA+IHB0cjFfbGVuKSB7CisgICAgICBtZW1zZXQoc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiArIHB0cjFfbGVuLCAnXDAnLCBjb3B5X2xlbiAtIHB0cjFfbGVuKTsKKyAgICAgIGV4cGVjdGVkX2VuZCA9IHB0cjFfbGVuOworICAgIH0gZWxzZSB7CisgICAgICBleHBlY3RlZF9lbmQgPSBjb3B5X2xlbjsKKyAgICB9CisKKyAgICBBU1NFUlRfRVEoc3RhdGUucHRyMiArIGV4cGVjdGVkX2VuZCwgc3RwbmNweShzdGF0ZS5wdHIyLCBzdGF0ZS5wdHIxLCBjb3B5X2xlbikpOworCisgICAgLy8gVmVyaWZ5IHB0cjEgd2FzIG5vdCBtb2RpZmllZC4KKyAgICBBU1NFUlRfRVEoMCwgbWVtY21wKHN0YXRlLnB0cjEsIHN0YXRlLnB0ciwgc3RhdGUuTUFYX0xFTikpOworICAgIC8vIFZlcmlmeSBwdHIyIGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkYXRhLgorICAgIEFTU0VSVF9FUSgwLCBtZW1jbXAoc3RhdGUucHRyMiwgc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiwgc3RhdGUuTUFYX0xFTikpOworICB9Cit9CisKIFRFU1Qoc3RyaW5nLCBzdHJuY3B5KSB7CiAgIFN0cmluZ1Rlc3RTdGF0ZTxjaGFyPiBzdGF0ZShTTUFMTCk7CiAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgSVRFUjsgaisrKSB7CiAgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7CiAKLSAgICBtZW1zZXQoc3RhdGUucHRyMSwgcmFuZG9tKCkgJiAyNTUsIHN0YXRlLk1BWF9MRU4pOwotICAgIHN0YXRlLnB0cjFbcmFuZG9tICgpICUgc3RhdGUuTUFYX0xFTl0gPSAnXDAnOworICAgIC8vIENob29zZSBhIHJhbmRvbSB2YWx1ZSB0byBmaWxsIHRoZSBzdHJpbmcsIGV4Y2VwdCBcMCAoc3RyaW5nIHRlcm1pbmF0b3IpLAorICAgIC8vIG9yIFwxIChndWFyYW50ZWVzIGl0J3MgZGlmZmVyZW50IGZyb20gYW55dGhpbmcgaW4gcHRyMikuCisgICAgbWVtc2V0KHN0YXRlLnB0cjEsIChyYW5kb20oKSAlIDI1NCkgKyAyLCBzdGF0ZS5NQVhfTEVOKTsKKyAgICAvLyBDaG9vc2UgYSByYW5kb20gc2l6ZSBmb3Igb3VyIHNyYyBidWZmZXIuCisgICAgc2l6ZV90IHB0cjFfbGVuID0gcmFuZG9tKCkgJSBzdGF0ZS5NQVhfTEVOOworICAgIHN0YXRlLnB0cjFbcHRyMV9sZW5dID0gJ1wwJzsKKyAgICAvLyBDb3B5IHB0cjEgaW50byBwdHIsIHVzZWQgdG8gdmVyaWZ5IHRoYXQgcHRyMSBkb2VzIG5vdCBnZXQgbW9kaWZpZWQuCiAgICAgbWVtY3B5KHN0YXRlLnB0ciwgc3RhdGUucHRyMSwgc3RhdGUuTUFYX0xFTik7Ci0KKyAgICAvLyBJbml0IHB0cjIgdG8gYSBzZXQgdmFsdWUuCiAgICAgbWVtc2V0KHN0YXRlLnB0cjIsICdcMScsIHN0YXRlLk1BWF9MRU4pOwogCi0gICAgc2l6ZV90IHBvczsKLSAgICBpZiAobWVtY2hyKHN0YXRlLnB0cjEsIDAsIHN0YXRlLk1BWF9MRU4pKSB7Ci0gICAgICBwb3MgPSBzdHJsZW4oc3RhdGUucHRyMSk7CisgICAgLy8gQ2hvb3NlIGEgcmFuZG9tIGFtb3VudCBvZiBkYXRhIHRvIGNvcHkuCisgICAgc2l6ZV90IGNvcHlfbGVuID0gcmFuZG9tKCkgJSBzdGF0ZS5NQVhfTEVOOworCisgICAgLy8gU2V0IHRoZSBzZWNvbmQgaGFsZiBvZiBwdHIgdG8gdGhlIGV4cGVjdGVkIHBhdHRlcm4gaW4gcHRyMi4KKyAgICBtZW1zZXQoc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiwgJ1wxJywgc3RhdGUuTUFYX0xFTik7CisgICAgbWVtY3B5KHN0YXRlLnB0ciArIHN0YXRlLk1BWF9MRU4sIHN0YXRlLnB0cjEsIGNvcHlfbGVuKTsKKyAgICBzaXplX3QgZXhwZWN0ZWRfZW5kOworICAgIGlmIChjb3B5X2xlbiA+IHB0cjFfbGVuKSB7CisgICAgICBtZW1zZXQoc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiArIHB0cjFfbGVuLCAnXDAnLCBjb3B5X2xlbiAtIHB0cjFfbGVuKTsKKyAgICAgIGV4cGVjdGVkX2VuZCA9IHB0cjFfbGVuOwogICAgIH0gZWxzZSB7Ci0gICAgICBwb3MgPSBzdGF0ZS5NQVhfTEVOIC0gMTsKKyAgICAgIGV4cGVjdGVkX2VuZCA9IGNvcHlfbGVuOwogICAgIH0KIAotICAgIG1lbXNldChzdGF0ZS5wdHIgKyBzdGF0ZS5NQVhfTEVOLCAnXDAnLCBzdGF0ZS5NQVhfTEVOKTsKLSAgICBtZW1jcHkoc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiwgc3RhdGUucHRyMSwgcG9zICsgMSk7CisgICAgQVNTRVJUX0VRKHN0YXRlLnB0cjIgKyBleHBlY3RlZF9lbmQsIHN0cG5jcHkoc3RhdGUucHRyMiwgc3RhdGUucHRyMSwgY29weV9sZW4pKTsKIAotICAgIEFTU0VSVF9UUlVFKHN0cm5jcHkoc3RhdGUucHRyMiwgc3RhdGUucHRyMSwgc3RhdGUuTUFYX0xFTikgPT0gc3RhdGUucHRyMik7Ci0gICAgQVNTRVJUX0ZBTFNFKG1lbWNtcChzdGF0ZS5wdHIxLCBzdGF0ZS5wdHIsIHN0YXRlLk1BWF9MRU4pICE9IDAgfHwKLSAgICAgICAgICAgICAgICAgbWVtY21wKHN0YXRlLnB0cjIsIHN0YXRlLnB0ciArIHN0YXRlLk1BWF9MRU4sIHN0YXRlLk1BWF9MRU4pICE9IDApOworICAgIC8vIFZlcmlmeSBwdHIxIHdhcyBub3QgbW9kaWZpZWQuCisgICAgQVNTRVJUX0VRKDAsIG1lbWNtcChzdGF0ZS5wdHIxLCBzdGF0ZS5wdHIsIHN0YXRlLk1BWF9MRU4pKTsKKyAgICAvLyBWZXJpZnkgcHRyMiBjb250YWlucyB0aGUgZXhwZWN0ZWQgZGF0YS4KKyAgICBBU1NFUlRfRVEoMCwgbWVtY21wKHN0YXRlLnB0cjIsIHN0YXRlLnB0ciArIHN0YXRlLk1BWF9MRU4sIHN0YXRlLk1BWF9MRU4pKTsKICAgfQogfQogCkBAIC02ODcsNiArNzYzLDE0IEBACiAgIH0KIH0KIAorVEVTVChzdHJpbmcsIG1lbWNocl96ZXJvKSB7CisgIHVpbnQ4X3QqIGJ1ZmZlcjsKKyAgQVNTRVJUX0VRKDAsIHBvc2l4X21lbWFsaWduKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYnVmZmVyKSwgNjQsIDY0KSk7CisgIG1lbXNldChidWZmZXIsIDEwLCA2NCk7CisgIEFTU0VSVF9UUlVFKE5VTEwgPT0gbWVtY2hyKGJ1ZmZlciwgNSwgMCkpOworICBBU1NFUlRfVFJVRShOVUxMID09IG1lbWNocihidWZmZXIsIDEwLCAwKSk7Cit9CisKIFRFU1Qoc3RyaW5nLCBtZW1yY2hyKSB7CiAgIGludCBzZWVrX2NoYXIgPSByYW5kb20oKSAmIDI1NTsKICAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKQEAgLTczMiwzNSArODE2LDYgQEAKICAgfQogfQogCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQotZXh0ZXJuICJDIiBpbnQgX19tZW1jbXAxNihjb25zdCB1bnNpZ25lZCBzaG9ydCAqcHRyMSwgY29uc3QgdW5zaWduZWQgc2hvcnQgKnB0cjIsIHNpemVfdCBuKTsKLQotVEVTVChzdHJpbmcsIF9fbWVtY21wMTYpIHsKLSAgU3RyaW5nVGVzdFN0YXRlPHVuc2lnbmVkIHNob3J0PiBzdGF0ZShTTUFMTCk7Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZS5uOyBpKyspIHsKLSAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFBPU19JVEVSOyBqKyspIHsKLSAgICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOwotCi0gICAgICB1bnNpZ25lZCBzaG9ydCBtYXNrID0gMHhmZmZmOwotICAgICAgdW5zaWduZWQgc2hvcnQgYzEgPSByYW5kKCkgJiBtYXNrOwotICAgICAgdW5zaWduZWQgc2hvcnQgYzIgPSByYW5kKCkgJiBtYXNrOwotCi0gICAgICBzdGQ6OmZpbGwoc3RhdGUucHRyMSwgc3RhdGUucHRyMSArIHN0YXRlLk1BWF9MRU4sIGMxKTsKLSAgICAgIHN0ZDo6ZmlsbChzdGF0ZS5wdHIyLCBzdGF0ZS5wdHIyICsgc3RhdGUuTUFYX0xFTiwgYzEpOwotCi0gICAgICBpbnQgcG9zID0gKHN0YXRlLmxlbltpXSA9PSAwKSA/IDAgOiAocmFuZG9tKCkgJSBzdGF0ZS5sZW5baV0pOwotICAgICAgc3RhdGUucHRyMltwb3NdID0gYzI7Ci0KLSAgICAgIGludCBleHBlY3RlZCA9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oYzEpIC0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KGMyKSk7Ci0gICAgICBpbnQgYWN0dWFsID0gX19tZW1jbXAxNihzdGF0ZS5wdHIxLCBzdGF0ZS5wdHIyLCAoc2l6ZV90KSBzdGF0ZS5NQVhfTEVOKTsKLQotICAgICAgQVNTRVJUX0VRKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgIH0KLSAgfQotfQotI2VuZGlmCi0KIFRFU1Qoc3RyaW5nLCB3bWVtY21wKSB7CiAgIFN0cmluZ1Rlc3RTdGF0ZTx3Y2hhcl90PiBzdGF0ZShTTUFMTCk7CiAKQEAgLTg1MCw2ICs5MDUsODUgQEAKICAgfQogfQogCitURVNUKHN0cmluZywgbWVtbW92ZV9jYWNoZV9zaXplKSB7CisgIHNpemVfdCBsZW4gPSA2MDAwMDA7CisgIGludCBtYXhfYWxpZ25tZW50ID0gMzE7CisgIGludCBhbGlnbm1lbnRzW10gPSB7MCwgNSwgMTEsIDI5LCAzMH07CisgIGNoYXIqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hbGxvYyhzaXplb2YoY2hhcikgKiBsZW4pKTsKKyAgY2hhciogcHRyMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hbGxvYygyICogc2l6ZW9mKGNoYXIpICogbGVuKSk7CisgIGNoYXIqIGdsb2JfcHRyMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hbGxvYygyICogc2l6ZW9mKGNoYXIpICogbGVuICsgbWF4X2FsaWdubWVudCkpOworICBzaXplX3QgcG9zID0gNjQ7CisKKyAgQVNTRVJUX1RSVUUocHRyICE9IE5VTEwpOworICBBU1NFUlRfVFJVRShwdHIxICE9IE5VTEwpOworICBBU1NFUlRfVFJVRShnbG9iX3B0cjIgIT0gTlVMTCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICBjaGFyKiBwdHIyID0gZ2xvYl9wdHIyICsgYWxpZ25tZW50c1tpXTsKKyAgICBtZW1zZXQocHRyMSwgcmFuZG9tKCkgJiAyNTUsIDIgKiBsZW4pOworICAgIG1lbXNldChwdHIxLCByYW5kb20oKSAmIDI1NSwgbGVuKTsKKyAgICBtZW1jcHkocHRyMiwgcHRyMSwgMiAqIGxlbik7CisgICAgbWVtY3B5KHB0ciwgcHRyMSwgbGVuKTsKKyAgICBtZW1jcHkocHRyMSArIHBvcywgcHRyLCBsZW4pOworCisgICAgQVNTRVJUX1RSVUUobWVtbW92ZShwdHIyICsgcG9zLCBwdHIsIGxlbikgPT0gcHRyMiArIHBvcyk7CisgICAgQVNTRVJUX0VRKDAsIG1lbWNtcChwdHIyLCBwdHIxLCAyICogbGVuKSk7CisgIH0KKyAgZnJlZShwdHIpOworICBmcmVlKHB0cjEpOworICBmcmVlKGdsb2JfcHRyMik7Cit9CisKK3N0YXRpYyB2b2lkIHZlcmlmeV9tZW1tb3ZlKGNoYXIqIHNyY19jb3B5LCBjaGFyKiBkc3QsIGNoYXIqIHNyYywgc2l6ZV90IHNpemUpIHsKKyAgbWVtc2V0KGRzdCwgMCwgc2l6ZSk7CisgIG1lbWNweShzcmMsIHNyY19jb3B5LCBzaXplKTsKKyAgQVNTRVJUX0VRKGRzdCwgbWVtbW92ZShkc3QsIHNyYywgc2l6ZSkpOworICBBU1NFUlRfRVEoMCwgbWVtY21wKGRzdCwgc3JjX2NvcHksIHNpemUpKTsKK30KKworI2RlZmluZSBNRU1NT1ZFX0RBVEFfU0laRSAoMTAyNCoxMDI0KjMpCisKK1RFU1Qoc3RyaW5nLCBtZW1tb3ZlX2NoZWNrKSB7CisgIGNoYXIqIGJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hbGxvYyhNRU1NT1ZFX0RBVEFfU0laRSkpOworICBBU1NFUlRfVFJVRShidWZmZXIgIT0gTlVMTCk7CisKKyAgY2hhciogc3JjX2RhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtYWxsb2MoTUVNTU9WRV9EQVRBX1NJWkUpKTsKKyAgQVNTRVJUX1RSVUUoc3JjX2RhdGEgIT0gTlVMTCk7CisgIC8vIEluaXRpYWxpemUgdG8gYSBrbm93biBwYXR0ZXJuIHRvIGNvcHkgaW50byBzcmMgZm9yIGVhY2ggdGVzdCBhbmQKKyAgLy8gdG8gY29tcGFyZSBkc3QgYWdhaW5zdC4KKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBNRU1NT1ZFX0RBVEFfU0laRTsgaSsrKSB7CisgICAgc3JjX2RhdGFbaV0gPSAoaSArIDEpICUgMjU1OworICB9CisKKyAgLy8gQ2hlY2sgYWxsIGRpZmZlcmVudCBkc3Qgb2Zmc2V0cyBiZXR3ZWVuIDAgYW5kIDEyNyBpbmNsdXNpdmUuCisgIGNoYXIqIHNyYyA9IGJ1ZmZlcjsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMjc7IGkrKykgeworICAgIGNoYXIqIGRzdCA9IGJ1ZmZlciArIDI1NiArIGk7CisgICAgLy8gU21hbGwgY29weS4KKyAgICB2ZXJpZnlfbWVtbW92ZShzcmNfZGF0YSwgZHN0LCBzcmMsIDEwMjQpOworCisgICAgLy8gTWVkaXVtIGNvcHkuCisgICAgdmVyaWZ5X21lbW1vdmUoc3JjX2RhdGEsIGRzdCwgc3JjLCA2NCAqIDEwMjQpOworCisgICAgLy8gTWVkaXVtIGNvcHkuCisgICAgdmVyaWZ5X21lbW1vdmUoc3JjX2RhdGEsIGRzdCwgc3JjLCAxMDI0ICogMTAyNCArIDEyOCAqIDEwMjQpOworICB9CisKKyAgLy8gQ2hlY2sgYWxsIGxlZnRvdmVyIHNpemUgb2Zmc2V0cyBiZXR3ZWVuIDEgYW5kIDEyNyBpbmNsdXNpdmUuCisgIGNoYXIqIGRzdCA9IGJ1ZmZlciArIDI1NjsKKyAgc3JjID0gYnVmZmVyOworICBmb3IgKHNpemVfdCBzaXplID0gMTsgc2l6ZSA8IDEyNzsgc2l6ZSsrKSB7CisgICAgLy8gU21hbGwgY29weS4KKyAgICB2ZXJpZnlfbWVtbW92ZShzcmNfZGF0YSwgZHN0LCBzcmMsIDEwMjQpOworCisgICAgLy8gTWVkaXVtIGNvcHkuCisgICAgdmVyaWZ5X21lbW1vdmUoc3JjX2RhdGEsIGRzdCwgc3JjLCA2NCAqIDEwMjQpOworCisgICAgLy8gTGFyZ2UgY29weS4KKyAgICB2ZXJpZnlfbWVtbW92ZShzcmNfZGF0YSwgZHN0LCBzcmMsIDEwMjQgKiAxMDI0ICsgMTI4ICogMTAyNCk7CisgIH0KK30KKwogVEVTVChzdHJpbmcsIGJjb3B5KSB7CiAgIFN0cmluZ1Rlc3RTdGF0ZTxjaGFyPiBzdGF0ZShMQVJHRSk7CiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUubjsgaSsrKSB7CkBAIC05MDUsNiArMTAzOSwyMiBAQAogICBSdW5TcmNEc3RCdWZmZXJPdmVycmVhZFRlc3QoRG9NZW1jcHlUZXN0KTsKIH0KIAorc3RhdGljIHZvaWQgRG9NZW1tb3ZlVGVzdCh1aW50OF90KiBzcmMsIHVpbnQ4X3QqIGRzdCwgc2l6ZV90IGxlbikgeworICBtZW1zZXQoc3JjLCAobGVuICUgMjU1KSArIDEsIGxlbik7CisgIG1lbXNldChkc3QsIDAsIGxlbik7CisKKyAgQVNTRVJUX0VRKGRzdCwgbWVtbW92ZShkc3QsIHNyYywgbGVuKSk7CisgIEFTU0VSVF9UUlVFKG1lbWNtcChzcmMsIGRzdCwgbGVuKSA9PSAwKTsKK30KKworVEVTVChzdHJpbmcsIG1lbW1vdmVfYWxpZ24pIHsKKyAgUnVuU3JjRHN0QnVmZmVyQWxpZ25UZXN0KExBUkdFLCBEb01lbW1vdmVUZXN0KTsKK30KKworVEVTVChzdHJpbmcsIG1lbW1vdmVfb3ZlcnJlYWQpIHsKKyAgUnVuU3JjRHN0QnVmZmVyT3ZlcnJlYWRUZXN0KERvTWVtbW92ZVRlc3QpOworfQorCiBzdGF0aWMgdm9pZCBEb01lbXNldFRlc3QodWludDhfdCogYnVmLCBzaXplX3QgbGVuKSB7CiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICBidWZbaV0gPSAwOwpAQCAtOTU1LDYgKzExMDUsMjUgQEAKICAgUnVuU3JjRHN0QnVmZmVyT3ZlcnJlYWRUZXN0KERvU3RyY3B5VGVzdCk7CiB9CiAKK3N0YXRpYyB2b2lkIERvU3RwY3B5VGVzdCh1aW50OF90KiBzcmMsIHVpbnQ4X3QqIGRzdCwgc2l6ZV90IGxlbikgeworICBpZiAobGVuID49IDEpIHsKKyAgICBtZW1zZXQoc3JjLCAoMzIgKyAobGVuICUgOTYpKSwgbGVuIC0gMSk7CisgICAgc3JjW2xlbi0xXSA9ICdcMCc7CisgICAgbWVtc2V0KGRzdCwgMCwgbGVuKTsKKyAgICBBU1NFUlRfRVEoZHN0K2xlbi0xLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzdHBjcHkocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZHN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3JjKSkpKTsKKyAgICBBU1NFUlRfVFJVRShtZW1jbXAoc3JjLCBkc3QsIGxlbikgPT0gMCk7CisgIH0KK30KKworVEVTVChzdHJpbmcsIHN0cGNweV9hbGlnbikgeworICBSdW5TcmNEc3RCdWZmZXJBbGlnblRlc3QoTEFSR0UsIERvU3RwY3B5VGVzdCk7Cit9CisKK1RFU1Qoc3RyaW5nLCBzdHBjcHlfb3ZlcnJlYWQpIHsKKyAgUnVuU3JjRHN0QnVmZmVyT3ZlcnJlYWRUZXN0KERvU3RwY3B5VGVzdCk7Cit9CisKIC8vIFVzZSBvdXIgb3duIGluY3JlbWVudGVyIHRvIGN1dCBkb3duIG9uIHRoZSB0b3RhbCBudW1iZXIgb2YgY2FsbHMuCiBzdGF0aWMgc2l6ZV90IExhcmdlU2V0SW5jcmVtZW50KHNpemVfdCBsZW4pIHsKICAgaWYgKGxlbiA+PSA0MDk2KSB7CkBAIC0xMDkyLDMgKzEyNjEsMjkgQEAKIFRFU1Qoc3RyaW5nLCBtZW1jbXBfb3ZlcnJlYWQpIHsKICAgUnVuQ21wQnVmZmVyT3ZlcnJlYWRUZXN0KERvTWVtY21wVGVzdCwgRG9NZW1jbXBGYWlsVGVzdCk7CiB9CisKK3N0YXRpYyB2b2lkIERvU3RyY2hyVGVzdCh1aW50OF90KiBidWYsIHNpemVfdCBsZW4pIHsKKyAgaWYgKGxlbiA+PSAxKSB7CisgICAgY2hhciB2YWx1ZSA9IDMyICsgKGxlbiAlIDk2KTsKKyAgICBjaGFyIHNlYXJjaF92YWx1ZSA9IDMzICsgKGxlbiAlIDk2KTsKKyAgICBtZW1zZXQoYnVmLCB2YWx1ZSwgbGVuIC0gMSk7CisgICAgYnVmW2xlbi0xXSA9ICdcMCc7CisgICAgQVNTRVJUX0VRKE5VTEwsIHN0cmNocihyZWludGVycHJldF9jYXN0PGNoYXIqPihidWYpLCBzZWFyY2hfdmFsdWUpKTsKKyAgICBBU1NFUlRfRVEocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmJ1ZltsZW4tMV0pLCBzdHJjaHIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmKSwgJ1wwJykpOworICAgIGlmIChsZW4gPj0gMikgeworICAgICAgYnVmWzBdID0gc2VhcmNoX3ZhbHVlOworICAgICAgQVNTRVJUX0VRKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZidWZbMF0pLCBzdHJjaHIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmKSwgc2VhcmNoX3ZhbHVlKSk7CisgICAgICBidWZbMF0gPSB2YWx1ZTsKKyAgICAgIGJ1ZltsZW4tMl0gPSBzZWFyY2hfdmFsdWU7CisgICAgICBBU1NFUlRfRVEocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmJ1ZltsZW4tMl0pLCBzdHJjaHIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmKSwgc2VhcmNoX3ZhbHVlKSk7CisgICAgfQorICB9Cit9CisKK1RFU1Qoc3RyaW5nLCBzdHJjaHJfYWxpZ24pIHsKKyAgUnVuU2luZ2xlQnVmZmVyQWxpZ25UZXN0KE1FRElVTSwgRG9TdHJjaHJUZXN0KTsKK30KKworVEVTVChzdHJpbmcsIHN0cmNocl9vdmVycmVhZCkgeworICBSdW5TaW5nbGVCdWZmZXJPdmVycmVhZFRlc3QoRG9TdHJjaHJUZXN0KTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0dWJzX3Rlc3QuY3BwIGIvdGVzdHMvc3R1YnNfdGVzdC5jcHAKaW5kZXggMmUxYWNjMS4uOWIwYzIzMSAxMDA2NDQKLS0tIGEvdGVzdHMvc3R1YnNfdGVzdC5jcHAKKysrIGIvdGVzdHMvc3R1YnNfdGVzdC5jcHAKQEAgLTIzLDggKzIzLDcgQEAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAotI2lmIF9fQklPTklDX18KLQorI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICNkZWZpbmUgQ0hFQ0tfR0VUUFdOQU1fRk9SKHVzZXJuYW1lLCB1aWQsIHVpZF90eXBlKSBcCiAgICAgU0NPUEVEX1RSQUNFKHVzZXJuYW1lKTsgXAogICAgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKGNoZWNrX2dldHB3bmFtKHVzZXJuYW1lLCB1aWQsIHVpZF90eXBlKSk7CkBAIC00Miw2ICs0MSwxMCBAQAogICBFWFBFQ1RfU1RSRVEodXNlcm5hbWUsIHB3ZC0+cHdfbmFtZSk7CiAgIEVYUEVDVF9FUSh1aWQsIHB3ZC0+cHdfdWlkKTsKICAgRVhQRUNUX0VRKHVpZCwgcHdkLT5wd19naWQpOworICBBU1NFUlRfRVEoTlVMTCwgcHdkLT5wd19wYXNzd2QpOworI2lmZGVmIF9fTFA2NF9fCisgIEFTU0VSVF9FUShOVUxMLCBwd2QtPnB3X2dlY29zKTsKKyNlbmRpZgogCiAgIGlmICh1aWRfdHlwZSA9PSBUWVBFX1NZU1RFTSkgewogICAgIEVYUEVDVF9TVFJFUSgiLyIsIHB3ZC0+cHdfZGlyKTsKQEAgLTUxLDYgKzU0LDEwIEBACiAKICAgRVhQRUNUX1NUUkVRKCIvc3lzdGVtL2Jpbi9zaCIsIHB3ZC0+cHdfc2hlbGwpOwogfQorI2Vsc2UKKyNkZWZpbmUgQ0hFQ0tfR0VUUFdOQU1fRk9SKHVzZXJuYW1lLCB1aWQsIHVpZF90eXBlKSBcCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmCiAKIFRFU1QoZ2V0cHduYW0sIHN5c3RlbV9pZF9yb290KSB7CiAgIENIRUNLX0dFVFBXTkFNX0ZPUigicm9vdCIsIDAsIFRZUEVfU1lTVEVNKTsKQEAgLTEwNCw1ICsxMTEsMyBAQAogVEVTVChnZXRwd25hbSwgYXBwX2lkX3UxX2kwKSB7CiAgIENIRUNLX0dFVFBXTkFNX0ZPUigidTFfaTAiLCAxOTkwMDAsIFRZUEVfQVBQKTsKIH0KLQotI2VuZGlmIC8qIF9fQklPTklDX18gKi8KZGlmZiAtLWdpdCBhL3Rlc3RzL3N5c19lcG9sbF90ZXN0LmNwcCBiL3Rlc3RzL3N5c19lcG9sbF90ZXN0LmNwcAppbmRleCBlNGUwNDdiLi42ZTdhODA3IDEwMDY0NAotLS0gYS90ZXN0cy9zeXNfZXBvbGxfdGVzdC5jcHAKKysrIGIvdGVzdHMvc3lzX2Vwb2xsX3Rlc3QuY3BwCkBAIC0xNyw3ICsxNywxMCBAQAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKICNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8c3lzL2Vwb2xsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CiAKIFRFU1Qoc3lzX2Vwb2xsLCBzbW9rZSkgewogICBpbnQgZXBvbGxfZmQgPSBlcG9sbF9jcmVhdGUoMSk7CkBAIC0zNiwzICszOSwzMCBAQAogICBzaWdhZGRzZXQoJnNzLCBTSUdQSVBFKTsKICAgQVNTRVJUX0VRKDAsIGVwb2xsX3B3YWl0KGVwb2xsX2ZkLCBldmVudHMsIDEsIDEsICZzcykpOwogfQorCitURVNUKHN5c19lcG9sbCwgZXBvbGxfZXZlbnRfZGF0YSkgeworICBpbnQgZXBvbGxfZmQgPSBlcG9sbF9jcmVhdGUoMSk7CisgIEFTU0VSVF9ORSgtMSwgZXBvbGxfZmQpIDw8IHN0cmVycm9yKGVycm5vKTsKKworICBpbnQgZmRzWzJdOworICBBU1NFUlRfTkUoLTEsIHBpcGUoZmRzKSk7CisKKyAgY29uc3QgdWludDY0X3QgZXhwZWN0ZWQgPSAweDEyMzQ1Njc4OWFiY2RlZjA7CisKKyAgLy8gR2V0IHJlYWR5IHRvIHBvbGwgb24gcmVhZCBlbmQgb2YgcGlwZS4KKyAgZXBvbGxfZXZlbnQgZXY7CisgIGV2LmV2ZW50cyA9IEVQT0xMSU47CisgIGV2LmRhdGEudTY0ID0gZXhwZWN0ZWQ7CisgIEFTU0VSVF9ORSgtMSwgZXBvbGxfY3RsKGVwb2xsX2ZkLCBFUE9MTF9DVExfQURELCBmZHNbMF0sICZldikpOworCisgIC8vIEVuc3VyZSB0aGVyZSdzIHNvbWV0aGluZyBpbiB0aGUgcGlwZS4KKyAgQVNTRVJUX0VRKDEsIHdyaXRlKGZkc1sxXSwgIlxuIiwgMSkpOworCisgIC8vIFBvbGwuCisgIGVwb2xsX2V2ZW50IGV2ZW50c1sxXTsKKyAgQVNTRVJUX0VRKDEsIGVwb2xsX3dhaXQoZXBvbGxfZmQsIGV2ZW50cywgMSwgMSkpOworICBBU1NFUlRfRVEoZXhwZWN0ZWQsIGV2ZW50c1swXS5kYXRhLnU2NCk7CisKKyAgY2xvc2UoZmRzWzBdKTsKKyAgY2xvc2UoZmRzWzFdKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3N5c19tbWFuX3Rlc3QuY3BwIGIvdGVzdHMvc3lzX21tYW5fdGVzdC5jcHAKaW5kZXggNTcwNjdkNy4uNzVjY2ZhMyAxMDA2NDQKLS0tIGEvdGVzdHMvc3lzX21tYW5fdGVzdC5jcHAKKysrIGIvdGVzdHMvc3lzX21tYW5fdGVzdC5jcHAKQEAgLTE3LDE0ICsxNywxNTggQEAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAotVEVTVChzeXNfbW1hbiwgbW1hcF9uZWdhdGl2ZSkgewotICBvZmZfdCBvZmYgPSAtc3lzY29uZihfU0NfUEFHRVNJWkUpOyAvLyBBbGlnbmVkIGJ1dCBuZWdhdGl2ZS4KLSAgQVNTRVJUX0VRKE1BUF9GQUlMRUQsIG1tYXAoTlVMTCwgNDA5NiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9BTk9OfE1BUF9QUklWQVRFLCAtMSwgb2ZmKSk7CisjaW5jbHVkZSAiVGVtcG9yYXJ5RmlsZS5oIgorCitURVNUKHN5c19tbWFuLCBtbWFwX3N0ZCkgeworICB2b2lkKiBtYXAgPSBtbWFwKE5VTEwsIDQwOTYsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9BTk9OIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTsKKyAgQVNTRVJUX05FKE1BUF9GQUlMRUQsIG1hcCk7CisgIEFTU0VSVF9FUSgwLCBtdW5tYXAobWFwLCA0MDk2KSk7CiB9CiAKLVRFU1Qoc3lzX21tYW4sIG1tYXA2NF9uZWdhdGl2ZSkgewotICBvZmY2NF90IG9mZjY0ID0gLXN5c2NvbmYoX1NDX1BBR0VTSVpFKTsgLy8gQWxpZ25lZCBidXQgbmVnYXRpdmUuCi0gIEFTU0VSVF9FUShNQVBfRkFJTEVELCBtbWFwNjQoTlVMTCwgNDA5NiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9BTk9OfE1BUF9QUklWQVRFLCAtMSwgb2ZmNjQpKTsKK1RFU1Qoc3lzX21tYW4sIG1tYXA2NF9zdGQpIHsKKyAgdm9pZCogbWFwID0gbW1hcDY0KE5VTEwsIDQwOTYsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9BTk9OIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTsKKyAgQVNTRVJUX05FKE1BUF9GQUlMRUQsIG1hcCk7CisgIEFTU0VSVF9FUSgwLCBtdW5tYXAobWFwLCA0MDk2KSk7Cit9CisKK1RFU1Qoc3lzX21tYW4sIG1tYXBfZmlsZV9iYWRfb2Zmc2V0KSB7CisgIFRlbXBvcmFyeUZpbGUgdGY7CisKKyAgdm9pZCogbWFwID0gbW1hcChOVUxMLCAxMDAsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgdGYuZmQsIDEpOworICBBU1NFUlRfRVEoTUFQX0ZBSUxFRCwgbWFwKTsKK30KKworVEVTVChzeXNfbW1hbiwgbW1hcDY0X2ZpbGVfYmFkX29mZnNldCkgeworICBUZW1wb3JhcnlGaWxlIHRmOworCisgIHZvaWQqIG1hcCA9IG1tYXA2NChOVUxMLCAxMDAsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgdGYuZmQsIDEpOworICBBU1NFUlRfRVEoTUFQX0ZBSUxFRCwgbWFwKTsKK30KKworI2RlZmluZSBTVFJfU1NJWkUoc3RyKSBzdGF0aWNfY2FzdDxzc2l6ZV90PihzaXplb2Yoc3RyKSkKKworI2RlZmluZSBTVFJJTkdfTVNHICAiMDEyMzQ1Njc4XG5hYmNkZWZnaFxuIgorI2RlZmluZSBJTklUSUFMX01TRyAiMDAwMDAwMDAwXG4wMDAwMDAwMFxuIgorCitURVNUKHN5c19tbWFuLCBtbWFwX2ZpbGVfcmVhZCkgeworICBUZW1wb3JhcnlGaWxlIHRmOworCisgIEFTU0VSVF9FUShTVFJfU1NJWkUoU1RSSU5HX01TRyksIHdyaXRlKHRmLmZkLCBTVFJJTkdfTVNHLCBzaXplb2YoU1RSSU5HX01TRykpKTsKKworICB2b2lkKiBtYXAgPSBtbWFwKE5VTEwsIHNpemVvZihTVFJJTkdfTVNHKSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCB0Zi5mZCwgMCk7CisgIEFTU0VSVF9ORShNQVBfRkFJTEVELCBtYXApOworCisgIGNoYXIqIGRhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtYXApOworICBBU1NFUlRfU1RSRVEoU1RSSU5HX01TRywgZGF0YSk7CisKKyAgQVNTRVJUX0VRKDAsIG11bm1hcChtYXAsIHNpemVvZihTVFJJTkdfTVNHKSkpOworfQorCitURVNUKHN5c19tbWFuLCBtbWFwX2ZpbGVfd3JpdGUpIHsKKyAgVGVtcG9yYXJ5RmlsZSB0ZjsKKworICBBU1NFUlRfRVEoU1RSX1NTSVpFKElOSVRJQUxfTVNHKSwgd3JpdGUodGYuZmQsIElOSVRJQUxfTVNHLCBzaXplb2YoSU5JVElBTF9NU0cpKSk7CisgIGxzZWVrKHRmLmZkLCAwLCBTRUVLX1NFVCk7CisKKyAgdm9pZCogbWFwID0gbW1hcChOVUxMLCBzaXplb2YoU1RSSU5HX01TRyksIFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIHRmLmZkLCAwKTsKKyAgQVNTRVJUX05FKE1BUF9GQUlMRUQsIG1hcCk7CisgIGNsb3NlKHRmLmZkKTsKKworICBtZW1jcHkobWFwLCBTVFJJTkdfTVNHLCBzaXplb2YoU1RSSU5HX01TRykpOworCisgIEFTU0VSVF9FUSgwLCBtdW5tYXAobWFwLCBzaXplb2YoU1RSSU5HX01TRykpKTsKKworICB0Zi5yZW9wZW4oKTsKKyAgY2hhciBidWZbc2l6ZW9mKFNUUklOR19NU0cpXTsKKyAgbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKFNUUklOR19NU0cpKTsKKyAgQVNTRVJUX0VRKFNUUl9TU0laRShTVFJJTkdfTVNHKSwgcmVhZCh0Zi5mZCwgYnVmLCBzaXplb2YoU1RSSU5HX01TRykpKTsKKworICBBU1NFUlRfU1RSRVEoU1RSSU5HX01TRywgYnVmKTsKK30KKworI2RlZmluZSBQQUdFMF9NU0cgIjAwUEFHRTAwIgorI2RlZmluZSBQQUdFMV9NU0cgIjExMVBBR0UxMTEiCisjZGVmaW5lIFBBR0UyX01TRyAiMjIyMlBBR0UyMjIyIgorI2RlZmluZSBFTkRfTVNHICJFIgorCitURVNUKHN5c19tbWFuLCBtbWFwX2ZpbGVfcmVhZF9hdF9vZmZzZXQpIHsKKyAgVGVtcG9yYXJ5RmlsZSB0ZjsKKyAgc2l6ZV90IHBhZ2VzaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOworCisgIC8vIENyZWF0ZSB0aGUgZmlsZSB3aXRoIHRocmVlIHBhZ2VzIHdvcnRoIG9mIGRhdGEuCisgIEFTU0VSVF9FUShTVFJfU1NJWkUoUEFHRTBfTVNHKSwgd3JpdGUodGYuZmQsIFBBR0UwX01TRywgc2l6ZW9mKFBBR0UwX01TRykpKTsKKyAgQVNTRVJUX05FKC0xLCBsc2Vlayh0Zi5mZCwgcGFnZXNpemUsIFNFRUtfU0VUKSk7CisgIEFTU0VSVF9FUShTVFJfU1NJWkUoUEFHRTFfTVNHKSwgd3JpdGUodGYuZmQsIFBBR0UxX01TRywgc2l6ZW9mKFBBR0UxX01TRykpKTsKKyAgQVNTRVJUX05FKC0xLCBsc2Vlayh0Zi5mZCwgMiAqIHBhZ2VzaXplLCBTRUVLX1NFVCkpOworICBBU1NFUlRfRVEoU1RSX1NTSVpFKFBBR0UyX01TRyksIHdyaXRlKHRmLmZkLCBQQUdFMl9NU0csIHNpemVvZihQQUdFMl9NU0cpKSk7CisgIEFTU0VSVF9ORSgtMSwgbHNlZWsodGYuZmQsIDMgKiBwYWdlc2l6ZSAtIHNpemVvZihFTkRfTVNHKSwgU0VFS19TRVQpKTsKKyAgQVNTRVJUX0VRKFNUUl9TU0laRShFTkRfTVNHKSwgd3JpdGUodGYuZmQsIEVORF9NU0csIHNpemVvZihFTkRfTVNHKSkpOworCisgIEFTU0VSVF9ORSgtMSwgbHNlZWsodGYuZmQsIDAsIFNFRUtfU0VUKSk7CisKKyAgdm9pZCogbWFwID0gbW1hcChOVUxMLCBwYWdlc2l6ZSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCB0Zi5mZCwgcGFnZXNpemUpOworICBBU1NFUlRfTkUoTUFQX0ZBSUxFRCwgbWFwKTsKKworICBjaGFyKiBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWFwKTsKKyAgQVNTRVJUX1NUUkVRKFBBR0UxX01TRywgZGF0YSk7CisKKyAgQVNTRVJUX0VRKDAsIG11bm1hcChtYXAsIHBhZ2VzaXplKSk7CisKKyAgbWFwID0gbW1hcChOVUxMLCBwYWdlc2l6ZSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCB0Zi5mZCwgMiAqIHBhZ2VzaXplKTsKKyAgQVNTRVJUX05FKE1BUF9GQUlMRUQsIG1hcCk7CisKKyAgZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcCk7CisgIEFTU0VSVF9TVFJFUShQQUdFMl9NU0csIGRhdGEpOworICBBU1NFUlRfU1RSRVEoRU5EX01TRywgZGF0YStwYWdlc2l6ZS1zaXplb2YoRU5EX01TRykpOworCisgIEFTU0VSVF9FUSgwLCBtdW5tYXAobWFwLCBwYWdlc2l6ZSkpOworfQorCisjZGVmaW5lIE5FV1BBR0UxX01TRyAiMU5FVzFQQUdFMSIKKyNkZWZpbmUgTkVXUEFHRTJfTVNHICIyMk5FVzIyUEFHRTIyIgorCitURVNUKHN5c19tbWFuLCBtbWFwX2ZpbGVfd3JpdGVfYXRfb2Zmc2V0KSB7CisgIFRlbXBvcmFyeUZpbGUgdGY7CisgIHNpemVfdCBwYWdlc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKworICAvLyBDcmVhdGUgdGhlIGZpbGUgd2l0aCB0aHJlZSBwYWdlcyB3b3J0aCBvZiBkYXRhLgorICBBU1NFUlRfRVEoU1RSX1NTSVpFKFBBR0UwX01TRyksIHdyaXRlKHRmLmZkLCBQQUdFMF9NU0csIHNpemVvZihQQUdFMF9NU0cpKSk7CisgIEFTU0VSVF9ORSgtMSwgbHNlZWsodGYuZmQsIHBhZ2VzaXplLCBTRUVLX1NFVCkpOworICBBU1NFUlRfRVEoU1RSX1NTSVpFKFBBR0UxX01TRyksIHdyaXRlKHRmLmZkLCBQQUdFMV9NU0csIHNpemVvZihQQUdFMV9NU0cpKSk7CisgIEFTU0VSVF9ORSgtMSwgbHNlZWsodGYuZmQsIDIgKiBwYWdlc2l6ZSwgU0VFS19TRVQpKTsKKyAgQVNTRVJUX0VRKFNUUl9TU0laRShQQUdFMl9NU0cpLCB3cml0ZSh0Zi5mZCwgUEFHRTJfTVNHLCBzaXplb2YoUEFHRTJfTVNHKSkpOworICBBU1NFUlRfTkUoLTEsIGxzZWVrKHRmLmZkLCAzICogcGFnZXNpemUgLSBzaXplb2YoRU5EX01TRyksIFNFRUtfU0VUKSk7CisgIEFTU0VSVF9FUShTVFJfU1NJWkUoRU5EX01TRyksIHdyaXRlKHRmLmZkLCBFTkRfTVNHLCBzaXplb2YoRU5EX01TRykpKTsKKworICBBU1NFUlRfTkUoLTEsIGxzZWVrKHRmLmZkLCAwLCBTRUVLX1NFVCkpOworCisgIHZvaWQqIG1hcCA9IG1tYXAoTlVMTCwgcGFnZXNpemUsIFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIHRmLmZkLCBwYWdlc2l6ZSk7CisgIEFTU0VSVF9ORShNQVBfRkFJTEVELCBtYXApOworICBjbG9zZSh0Zi5mZCk7CisKKyAgbWVtY3B5KG1hcCwgTkVXUEFHRTFfTVNHLCBzaXplb2YoTkVXUEFHRTFfTVNHKSk7CisgIEFTU0VSVF9FUSgwLCBtdW5tYXAobWFwLCBwYWdlc2l6ZSkpOworCisgIHRmLnJlb3BlbigpOworICBtYXAgPSBtbWFwKE5VTEwsIHBhZ2VzaXplLCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCB0Zi5mZCwgMiAqIHBhZ2VzaXplKTsKKyAgQVNTRVJUX05FKE1BUF9GQUlMRUQsIG1hcCk7CisgIGNsb3NlKHRmLmZkKTsKKworICBtZW1jcHkobWFwLCBORVdQQUdFMl9NU0csIHNpemVvZihORVdQQUdFMl9NU0cpKTsKKyAgQVNTRVJUX0VRKDAsIG11bm1hcChtYXAsIHBhZ2VzaXplKSk7CisKKyAgdGYucmVvcGVuKCk7CisgIGNoYXIgYnVmW3BhZ2VzaXplXTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNzaXplX3Q+KHBhZ2VzaXplKSwgcmVhZCh0Zi5mZCwgYnVmLCBwYWdlc2l6ZSkpOworICBBU1NFUlRfU1RSRVEoUEFHRTBfTVNHLCBidWYpOworICBBU1NFUlRfTkUoLTEsIGxzZWVrKHRmLmZkLCBwYWdlc2l6ZSwgU0VFS19TRVQpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNzaXplX3Q+KHBhZ2VzaXplKSwgcmVhZCh0Zi5mZCwgYnVmLCBwYWdlc2l6ZSkpOworICBBU1NFUlRfU1RSRVEoTkVXUEFHRTFfTVNHLCBidWYpOworICBBU1NFUlRfTkUoLTEsIGxzZWVrKHRmLmZkLCAyICogcGFnZXNpemUsIFNFRUtfU0VUKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzc2l6ZV90PihwYWdlc2l6ZSksIHJlYWQodGYuZmQsIGJ1ZiwgcGFnZXNpemUpKTsKKyAgQVNTRVJUX1NUUkVRKE5FV1BBR0UyX01TRywgYnVmKTsKKyAgQVNTRVJUX1NUUkVRKEVORF9NU0csIGJ1ZitwYWdlc2l6ZS1zaXplb2YoRU5EX01TRykpOwogfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3lzX3Jlc291cmNlX3Rlc3QuY3BwIGIvdGVzdHMvc3lzX3Jlc291cmNlX3Rlc3QuY3BwCmluZGV4IGJkOTc0Y2IuLmQ2ZDk5YTAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N5c19yZXNvdXJjZV90ZXN0LmNwcAorKysgYi90ZXN0cy9zeXNfcmVzb3VyY2VfdGVzdC5jcHAKQEAgLTE4LDcgKzE4LDcgQEAKIAogI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgogCi0jaWYgX19HTElCQ19fCisjaWYgZGVmaW5lZChfX0dMSUJDX18pCiAvKiBUaGUgaG9zdCBnbGliYyB3ZSdyZSBjdXJyZW50bHkgYnVpbGRpbmcgd2l0aCBkb2Vzbid0IGhhdmUgcHJsaW1pdDY0IHlldC4gKi8KIHN0YXRpYyBpbnQgcHJsaW1pdDY0KHBpZF90LCBpbnQgcmVzb3VyY2UsIGNvbnN0IHN0cnVjdCBybGltaXQ2NCogbmV3X2xpbWl0LCBzdHJ1Y3QgcmxpbWl0NjQqIG9sZF9saW1pdCkgewogICBpZiAobmV3X2xpbWl0ICE9IE5VTEwpIHsKQEAgLTMwLDcgKzMwLDcgQEAKICNlbmRpZgogCiBURVNUKHN5c19yZXNvdXJjZSwgc21va2UpIHsKLSNpZiBfX0xQNjRfXyB8fCBfX0dMSUJDX18KKyNpZiBkZWZpbmVkKF9fTFA2NF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykKICAgQVNTRVJUX0VRKHNpemVvZihybGltaXQpLCBzaXplb2YocmxpbWl0NjQpKTsKICAgQVNTRVJUX0VRKDhVLCBzaXplb2YocmxpbV90KSk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3lzX3NlbGVjdF90ZXN0LmNwcCBiL3Rlc3RzL3N5c19zZWxlY3RfdGVzdC5jcHAKaW5kZXggNTdhZmM5Yi4uYzE3MzJlZSAxMDA2NDQKLS0tIGEvdGVzdHMvc3lzX3NlbGVjdF90ZXN0LmNwcAorKysgYi90ZXN0cy9zeXNfc2VsZWN0X3Rlc3QuY3BwCkBAIC0xNyw4ICsxNywxMSBAQAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKICNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgogCiBURVNUKHN5c19zZWxlY3QsIGZkX3NldF9zbW9rZSkgewogICBmZF9zZXQgZmRzOwpAQCAtNDIsNiArNDUsMzIgQEAKICAgRVhQRUNUX0ZBTFNFKEZEX0lTU0VUKDEsICZmZHMpKTsKIH0KIAorI2RlZmluZSBERUxBWV9NU0cgIjEyMzQiCisKK3N0YXRpYyB2b2lkIERlbGF5ZWRXcml0ZShpbnQqIHBpZCwgaW50KiBmZCkgeworICBpbnQgZmRzWzJdOworICBBU1NFUlRfRVEoMCwgcGlwZShmZHMpKTsKKworICBpZiAoKCpwaWQgPSBmb3JrKCkpID09IDApIHsKKyAgICBjbG9zZShmZHNbMF0pOworICAgIHVzbGVlcCg1MDAwKTsKKyAgICBFWFBFQ1RfRVEoNSwgd3JpdGUoZmRzWzFdLCBERUxBWV9NU0csIHNpemVvZihERUxBWV9NU0cpKSk7CisgICAgY2xvc2UoZmRzWzFdKTsKKyAgICBleGl0KDApOworICB9CisgIEFTU0VSVF9MVCgwLCAqcGlkKTsKKyAgY2xvc2UoZmRzWzFdKTsKKworICAqZmQgPSBmZHNbMF07Cit9CisKK3N0YXRpYyB2b2lkIERlbGF5ZWRXcml0ZUNsZWFudXAoaW50IHBpZCwgaW50IGZkKSB7CisgIGNoYXIgYnVmW3NpemVvZihERUxBWV9NU0cpXTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNzaXplX3Q+KHNpemVvZihERUxBWV9NU0cpKSwgcmVhZChmZCwgYnVmLCBzaXplb2YoREVMQVlfTVNHKSkpOworICBBU1NFUlRfU1RSRVEoREVMQVlfTVNHLCBidWYpOworICBBU1NFUlRfRVEocGlkLCB3YWl0cGlkKHBpZCwgTlVMTCwgMCkpOworfQorCiBURVNUKHN5c19zZWxlY3QsIHNlbGVjdF9zbW9rZSkgewogICBmZF9zZXQgcjsKICAgRkRfWkVSTygmcik7CkBAIC03MSw4ICsxMDAsMTcgQEAKIAogICAvLyBWYWxpZCB0aW1lb3V0Li4uCiAgIHR2LnR2X3NlYyA9IDE7Ci0gIEFTU0VSVF9FUSgyLCBzZWxlY3QobWF4LCAmciwgJncsICZlLCAmdHYpKTsKLSAgQVNTRVJUX05FKDAsIHR2LnR2X3VzZWMpOyAvLyAuLi53aGljaCBnb3QgdXBkYXRlZC4KKyAgaW50IHBpZCwgZmQ7CisgIERlbGF5ZWRXcml0ZSgmcGlkLCAmZmQpOworCisgIEZEX1pFUk8oJnIpOworICBGRF9TRVQoZmQsICZyKTsKKyAgQVNTRVJUX0VRKDEsIHNlbGVjdChmZCsxLCAmciwgTlVMTCwgTlVMTCwgJnR2KSk7CisgIC8vIEJvdGggdHZfc2VjIGFuZCB0dl9uc2VjIHNob3VsZCBoYXZlIGJlZW4gdXBkYXRlZC4KKyAgQVNTRVJUX0VRKDAsIHR2LnR2X3NlYyk7CisgIEFTU0VSVF9ORSgwLCB0di50dl91c2VjKTsKKworICBEZWxheWVkV3JpdGVDbGVhbnVwKHBpZCwgZmQpOwogfQogCiBURVNUKHN5c19zZWxlY3QsIHBzZWxlY3Rfc21va2UpIHsKQEAgLTEwOCw2ICsxNDYsMTUgQEAKIAogICAvLyBWYWxpZCB0aW1lb3V0Li4uCiAgIHR2LnR2X3NlYyA9IDE7Ci0gIEFTU0VSVF9FUSgyLCBwc2VsZWN0KG1heCwgJnIsICZ3LCAmZSwgJnR2LCAmc3MpKTsKLSAgQVNTRVJUX0VRKDAsIHR2LnR2X25zZWMpOyAvLyAuLi53aGljaCBkaWQgX25vdF8gZ2V0IHVwZGF0ZWQuCisgIGludCBwaWQsIGZkOworICBEZWxheWVkV3JpdGUoJnBpZCwgJmZkKTsKKworICBGRF9aRVJPKCZyKTsKKyAgRkRfU0VUKGZkLCAmcik7CisgIEFTU0VSVF9FUSgxLCBwc2VsZWN0KGZkKzEsICZyLCBOVUxMLCBOVUxMLCAmdHYsIE5VTEwpKTsKKyAgLy8gTmVpdGhlciB0dl9zZWMgbm9yIHR2X25zZWMgc2hvdWxkIGhhdmUgYmVlbiB1cGRhdGVkLgorICBBU1NFUlRfRVEoMSwgdHYudHZfc2VjKTsKKyAgQVNTRVJUX0VRKDAsIHR2LnR2X25zZWMpOworCisgIERlbGF5ZWRXcml0ZUNsZWFudXAocGlkLCBmZCk7CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9zeXNfc2VuZGZpbGVfdGVzdC5jcHAgYi90ZXN0cy9zeXNfc2VuZGZpbGVfdGVzdC5jcHAKaW5kZXggYmYyM2QzZC4uM2Q2YjVjYyAxMDA2NDQKLS0tIGEvdGVzdHMvc3lzX3NlbmRmaWxlX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL3N5c19zZW5kZmlsZV90ZXN0LmNwcApAQCAtNDIsNyArNDIsNiBAQAogICBBU1NFUlRfU1RSRVEoImxsIiwgYnVmKTsKIH0KIAotI2lmIF9fQklPTklDX18KIFRFU1Qoc3lzX3NlbmRmaWxlLCBzZW5kZmlsZTY0KSB7CiAgIFRlbXBvcmFyeUZpbGUgc3JjX2ZpbGU7CiAgIEFTU0VSVF9FUSg1LCBURU1QX0ZBSUxVUkVfUkVUUlkod3JpdGUoc3JjX2ZpbGUuZmQsICJoZWxsbyIsIDUpKSk7CkBAIC02MSw0ICs2MCwzIEBACiAgIEFTU0VSVF9FUSgyLCBURU1QX0ZBSUxVUkVfUkVUUlkocmVhZChkc3RfZmlsZS5mZCwgJmJ1ZiwgMikpKTsKICAgQVNTRVJUX1NUUkVRKCJsbCIsIGJ1Zik7CiB9Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL3N5c19zb2NrZXRfdGVzdC5jcHAgYi90ZXN0cy9zeXNfc29ja2V0X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZGUwMjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zeXNfc29ja2V0X3Rlc3QuY3BwCkBAIC0wLDAgKzEsMjc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICAjZGVmaW5lIEFDQ0VQVDRfU1VQUE9SVEVEIDEKKyAgI2RlZmluZSBSRUNWTU1TR19TVVBQT1JURUQgMQorICAjZGVmaW5lIFNFTkRNTVNHX1NVUFBPUlRFRCAxCisjZWxpZiBkZWZpbmVkKF9fR0xJQkNfUFJFUkVRKQorICAjaWYgX19HTElCQ19QUkVSRVEoMiwgOSkKKyAgICAjZGVmaW5lIEFDQ0VQVDRfU1VQUE9SVEVEIDEKKyAgI2VuZGlmCisgICNpZiBfX0dMSUJDX1BSRVJFUSgyLCAxMikKKyAgICAjZGVmaW5lIFJFQ1ZNTVNHX1NVUFBPUlRFRCAxCisgICNlbmRpZgorICAjaWYgX19HTElCQ19QUkVSRVEoMiwgMTQpCisgICAgI2RlZmluZSBTRU5ETU1TR19TVVBQT1JURUQgMQorICAjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBQ0NFUFQ0X1NVUFBPUlRFRCkgfHwgZGVmaW5lZChSRUNWTU1TR19TVVBQT1JURUQpIHx8IGRlZmluZWQoU0VORE1NU0dfU1VQUE9SVEVEKQorCisjZGVmaW5lIFNPQ0tfUEFUSCAidGVzdCIKKworc3RhdGljIHZvaWQqIENvbm5lY3RGbih2b2lkKiBkYXRhKSB7CisgIGJvb2wgKCpjYWxsYmFja19mbikoaW50KSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Ym9vbCAoKikoaW50KT4oZGF0YSk7CisgIHZvaWQqIHJldHVybl92YWx1ZSA9IE5VTEw7CisKKyAgaW50IGZkID0gc29ja2V0KFBGX1VOSVgsIFNPQ0tfU0VRUEFDS0VUIHwgU09DS19DTE9FWEVDIHwgU09DS19OT05CTE9DSywgMCk7CisgIGlmIChmZCA8IDApIHsKKyAgICBHVEVTVF9MT0dfKEVSUk9SKSA8PCAic29ja2V0IGNhbGwgZmFpbGVkOiAiIDw8IHN0cmVycm9yKGVycm5vKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpOworICB9CisKKyAgc3RydWN0IHNvY2thZGRyX3VuIGFkZHI7CisgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKyAgYWRkci5zdW5fcGF0aFswXSA9ICdcMCc7CisgIHN0cmNweShhZGRyLnN1bl9wYXRoICsgMSwgU09DS19QQVRIKTsKKworICBpZiAoY29ubmVjdChmZCwgcmVpbnRlcnByZXRfY2FzdDxzdHJ1Y3Qgc29ja2FkZHIqPigmYWRkciksIHNpemVvZihhZGRyKSkgPCAwKSB7CisgICAgR1RFU1RfTE9HXyhFUlJPUikgPDwgImNvbm5lY3QgY2FsbCBmYWlsZWQ6ICIgPDwgc3RyZXJyb3IoZXJybm8pOworICAgIHJldHVybl92YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKTsKKyAgfQorICBlbHNlIGlmIChjYWxsYmFja19mbiAhPSBOVUxMICYmICFjYWxsYmFja19mbihmZCkpIHsKKyAgICByZXR1cm5fdmFsdWUgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSk7CisgIH0KKworICBjbG9zZShmZCk7CisKKyAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIHZvaWQgUnVuVGVzdCh2b2lkICgqdGVzdF9mbikoc3RydWN0IHNvY2thZGRyX3VuKiwgaW50KSwKKyAgICAgICAgICAgICAgICAgICAgYm9vbCAoKmNhbGxiYWNrX2ZuKShpbnQgZmQpKSB7CisgIGludCBmZCA9IHNvY2tldChQRl9VTklYLCBTT0NLX1NFUVBBQ0tFVCwgMCk7CisgIEFTU0VSVF9ORShmZCwgLTEpIDw8IHN0cmVycm9yKGVycm5vKTsKKworICBzdHJ1Y3Qgc29ja2FkZHJfdW4gYWRkcjsKKyAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICBhZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworICBhZGRyLnN1bl9wYXRoWzBdID0gJ1wwJzsKKyAgc3RyY3B5KGFkZHIuc3VuX3BhdGggKyAxLCBTT0NLX1BBVEgpOworCisgIEFTU0VSVF9ORSgtMSwgYmluZChmZCwgcmVpbnRlcnByZXRfY2FzdDxzdHJ1Y3Qgc29ja2FkZHIqPigmYWRkciksIHNpemVvZihhZGRyKSkpIDw8IHN0cmVycm9yKGVycm5vKTsKKworICBBU1NFUlRfTkUoLTEsIGxpc3RlbihmZCwgMSkpIDw8IHN0cmVycm9yKGVycm5vKTsKKworICBwdGhyZWFkX3QgdGhyZWFkOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jcmVhdGUoJnRocmVhZCwgTlVMTCwgQ29ubmVjdEZuLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsYmFja19mbikpKTsKKworICBmZF9zZXQgcmVhZF9zZXQ7CisgIEZEX1pFUk8oJnJlYWRfc2V0KTsKKyAgRkRfU0VUKGZkLCAmcmVhZF9zZXQpOworICB0aW1ldmFsIHR2OworICB0di50dl9zZWMgPSA1OworICB0di50dl91c2VjID0gMDsKKyAgQVNTRVJUX0xUKDAsIHNlbGVjdChmZCsxLCAmcmVhZF9zZXQsIE5VTEwsIE5VTEwsICZ0dikpOworCisgIHRlc3RfZm4oJmFkZHIsIGZkKTsKKworICB2b2lkKiByZXRfdmFsOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9qb2luKHRocmVhZCwgJnJldF92YWwpKTsKKyAgQVNTRVJUX0VRKE5VTEwsIHJldF92YWwpOworCisgIGNsb3NlKGZkKTsKK30KKyNlbmRpZgorCitURVNUKHN5c19zb2NrZXQsIGFjY2VwdDRfZXJyb3IpIHsKKyNpZiBkZWZpbmVkKEFDQ0VQVDRfU1VQUE9SVEVEKQorICBBU1NFUlRfRVEoLTEsIGFjY2VwdDQoLTEsIE5VTEwsIE5VTEwsIDApKTsKKyAgQVNTRVJUX0VRKEVCQURGLCBlcnJubyk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChBQ0NFUFQ0X1NVUFBPUlRFRCkKK3N0YXRpYyB2b2lkIFRlc3RBY2NlcHQ0KHN0cnVjdCBzb2NrYWRkcl91biogYWRkciwgaW50IGZkKSB7CisgIHNvY2tsZW5fdCBsZW4gPSBzaXplb2YoKmFkZHIpOworICBpbnQgZmRfYWNjID0gYWNjZXB0NChmZCwgcmVpbnRlcnByZXRfY2FzdDxzdHJ1Y3Qgc29ja2FkZHIqPihhZGRyKSwgJmxlbiwgU09DS19DTE9FWEVDKTsKKyAgQVNTRVJUX05FKGZkX2FjYywgLTEpIDw8IHN0cmVycm9yKGVycm5vKTsKKworICAvLyBDaGVjayB0aGF0IHRoZSBmbGFnIHdhcyBzZXQgcHJvcGVybHkuCisgIEFTU0VSVF9FUShGRF9DTE9FWEVDLCBmY250bChmZF9hY2MsIEZfR0VURkQpICYgRkRfQ0xPRVhFQyk7CisKKyAgY2xvc2UoZmRfYWNjKTsKK30KKyNlbmRpZgorCitURVNUKHN5c19zb2NrZXQsIGFjY2VwdDRfc21va2UpIHsKKyNpZiBkZWZpbmVkKEFDQ0VQVDRfU1VQUE9SVEVEKQorICBSdW5UZXN0KFRlc3RBY2NlcHQ0LCBOVUxMKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKFJFQ1ZNTVNHX1NVUFBPUlRFRCkKK2NvbnN0IGNoYXIqIGdfUmVjdk1zZ3NbXSA9IHsKKyAgIlJFQ1ZNTVNHX09ORSIsCisgICJSRUNWTU1TR19UV08iLAorICAiUkVDVk1NU0dfVEhSRUUiLAorfTsKKyNkZWZpbmUgTlVNX1JFQ1ZfTVNHUyAoc2l6ZW9mKGdfUmVjdk1zZ3MpL3NpemVvZihjb25zdCBjaGFyKikpCisKK3N0YXRpYyBib29sIFNlbmRNdWx0aXBsZShpbnQgZmQpIHsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBOVU1fUkVDVl9NU0dTOyBpKyspIHsKKyAgICBpZiAoc2VuZChmZCwgZ19SZWN2TXNnc1tpXSwgc3RybGVuKGdfUmVjdk1zZ3NbaV0pICsgMSwgMCkgPCAwKSB7CisgICAgICBHVEVTVF9MT0dfKEVSUk9SKSA8PCAic2VuZCBjYWxsIGZhaWxlZDogIiA8PCBzdHJlcnJvcihlcnJubyk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RSZWN2TU1zZyhzdHJ1Y3Qgc29ja2FkZHJfdW4gKmFkZHIsIGludCBmZCkgeworICBzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKCphZGRyKTsKKyAgaW50IGZkX2FjYyA9IGFjY2VwdChmZCwgcmVpbnRlcnByZXRfY2FzdDxzdHJ1Y3Qgc29ja2FkZHIqPihhZGRyKSwgJmxlbik7CisgIEFTU0VSVF9ORShmZF9hY2MsIC0xKSA8PCBzdHJlcnJvcihlcnJubyk7CisKKyAgc3RydWN0IG1tc2doZHIgbXNnc1tOVU1fUkVDVl9NU0dTXTsKKyAgbWVtc2V0KG1zZ3MsIDAsIHNpemVvZihzdHJ1Y3QgbW1zZ2hkcikqTlVNX1JFQ1ZfTVNHUyk7CisKKyAgc3RydWN0IGlvdmVjIGlvW05VTV9SRUNWX01TR1NdOworICBjaGFyIGJ1ZnNbTlVNX1JFQ1ZfTVNHU11bMTAwXTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBOVU1fUkVDVl9NU0dTOyBpKyspIHsKKyAgICBpb1tpXS5pb3ZfYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJ1ZnNbaV0pOworICAgIGlvW2ldLmlvdl9sZW4gPSBzdHJsZW4oZ19SZWN2TXNnc1tpXSkgKyAxOworCisgICAgbXNnc1tpXS5tc2dfaGRyLm1zZ19pb3YgPSAmaW9baV07CisgICAgbXNnc1tpXS5tc2dfaGRyLm1zZ19pb3ZsZW4gPSAxOworICAgIG1zZ3NbaV0ubXNnX2xlbiA9IHNpemVvZihzdHJ1Y3QgbXNnaGRyKTsKKyAgfQorCisgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyAgbWVtc2V0KCZ0cywgMCwgc2l6ZW9mKHRzKSk7CisgIHRzLnR2X3NlYyA9IDU7CisgIHRzLnR2X25zZWMgPSAwOworICBBU1NFUlRfRVEoTlVNX1JFQ1ZfTVNHUywKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4ocmVjdm1tc2coZmRfYWNjLCBtc2dzLCBOVU1fUkVDVl9NU0dTLCAwLCAmdHMpKSkKKyAgICAgICAgICAgPDwgc3RyZXJyb3IoZXJybm8pOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE5VTV9SRUNWX01TR1M7IGkrKykgeworICAgIEFTU0VSVF9TVFJFUShnX1JlY3ZNc2dzW2ldLCBidWZzW2ldKTsKKyAgfQorCisgIGNsb3NlKGZkX2FjYyk7Cit9CisjZW5kaWYKKworVEVTVChzeXNfc29ja2V0LCByZWN2bW1zZ19zbW9rZSkgeworI2lmIGRlZmluZWQoUkVDVk1NU0dfU1VQUE9SVEVEKQorICBSdW5UZXN0KFRlc3RSZWN2TU1zZywgU2VuZE11bHRpcGxlKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmCit9CisKK1RFU1Qoc3lzX3NvY2tldCwgcmVjdm1tc2dfZXJyb3IpIHsKKyNpZiBkZWZpbmVkKFJFQ1ZNTVNHX1NVUFBPUlRFRCkKKyAgQVNTRVJUX0VRKC0xLCByZWN2bW1zZygtMSwgTlVMTCwgMCwgMCwgTlVMTCkpOworICBBU1NFUlRfRVEoRUJBREYsIGVycm5vKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKFNFTkRNTVNHX1NVUFBPUlRFRCkKK2NvbnN0IGNoYXIqIGdfU2VuZE1zZ3NbXSA9IHsKKyAgIk1TR19PTkUiLAorICAiTVNHX1RXTyIsCisgICJNU0dfVEhSRUUiCit9OworI2RlZmluZSBOVU1fU0VORF9NU0dTIChzaXplb2YoZ19TZW5kTXNncykvc2l6ZW9mKGNvbnN0IGNoYXIqKSkKKworc3RhdGljIGJvb2wgU2VuZE1Nc2coaW50IGZkKSB7CisgIHN0cnVjdCBtbXNnaGRyIG1zZ3NbTlVNX1NFTkRfTVNHU107CisgIG1lbXNldChtc2dzLCAwLCBzaXplb2Yoc3RydWN0IG1tc2doZHIpKk5VTV9TRU5EX01TR1MpOworICBzdHJ1Y3QgaW92ZWMgaW9bTlVNX1NFTkRfTVNHU107CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTlVNX1NFTkRfTVNHUzsgaSsrKSB7CisgICAgaW9baV0uaW92X2Jhc2UgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihjb25zdF9jYXN0PGNoYXIqPihnX1NlbmRNc2dzW2ldKSk7CisgICAgaW9baV0uaW92X2xlbiA9IHN0cmxlbihnX1NlbmRNc2dzW2ldKSArIDE7CisgICAgbXNnc1tpXS5tc2dfaGRyLm1zZ19pb3YgPSAmaW9baV07CisgICAgbXNnc1tpXS5tc2dfaGRyLm1zZ19pb3ZsZW4gPSAxOworICAgIG1zZ3NbaV0ubXNnX2xlbiA9IHNpemVvZihzdHJ1Y3QgbXNnaGRyKTsKKyAgfQorCisgIGlmIChzZW5kbW1zZyhmZCwgbXNncywgTlVNX1NFTkRfTVNHUywgMCkgPCAwKSB7CisgICAgR1RFU1RfTE9HXyhFUlJPUikgPDwgInNlbmRtbXNnIGNhbGwgZmFpbGVkOiAiIDw8IHN0cmVycm9yKGVycm5vKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RTZW5kTU1zZyhzdHJ1Y3Qgc29ja2FkZHJfdW4gKmFkZHIsIGludCBmZCkgeworICBzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKCphZGRyKTsKKyAgaW50IGZkX2FjYyA9IGFjY2VwdChmZCwgcmVpbnRlcnByZXRfY2FzdDxzdHJ1Y3Qgc29ja2FkZHIqPihhZGRyKSwgJmxlbik7CisgIEFTU0VSVF9ORShmZF9hY2MsIC0xKSA8PCBzdHJlcnJvcihlcnJubyk7CisKKyAgZmRfc2V0IHJlYWRfc2V0OworICBGRF9aRVJPKCZyZWFkX3NldCk7CisgIEZEX1NFVChmZF9hY2MsICZyZWFkX3NldCk7CisKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBOVU1fU0VORF9NU0dTOyBpKyspIHsKKyAgICB0aW1ldmFsIHR2OworICAgIHR2LnR2X3NlYyA9IDU7CisgICAgdHYudHZfdXNlYyA9IDA7CisgICAgQVNTRVJUX0xUKDAsIHNlbGVjdChmZF9hY2MrMSwgJnJlYWRfc2V0LCBOVUxMLCBOVUxMLCAmdHYpKTsKKyAgICBjaGFyIGJ1ZmZlclsxMDBdOworICAgIEFTU0VSVF9FUShzdHJsZW4oZ19TZW5kTXNnc1tpXSkgKyAxLAorICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlY3YoZmRfYWNjLCBidWZmZXIsIHNpemVvZihidWZmZXIpLCAwKSkpOworICAgIEFTU0VSVF9TVFJFUShnX1NlbmRNc2dzW2ldLCBidWZmZXIpOworICB9CisKKyAgY2xvc2UoZmRfYWNjKTsKK30KKyNlbmRpZgorCitURVNUKHN5c19zb2NrZXQsIHNlbmRtbXNnX3Ntb2tlKSB7CisjaWYgZGVmaW5lZChTRU5ETU1TR19TVVBQT1JURUQpCisgIFJ1blRlc3QoVGVzdFNlbmRNTXNnLCBTZW5kTU1zZyk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZgorfQorCitURVNUKHN5c19zb2NrZXQsIHNlbmRtbXNnX2Vycm9yKSB7CisjaWYgZGVmaW5lZChTRU5ETU1TR19TVVBQT1JURUQpCisgIEFTU0VSVF9FUSgtMSwgc2VuZG1tc2coLTEsIE5VTEwsIDAsIDApKTsKKyAgQVNTRVJUX0VRKEVCQURGLCBlcnJubyk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3lzX3N0YXRfdGVzdC5jcHAgYi90ZXN0cy9zeXNfc3RhdF90ZXN0LmNwcAppbmRleCAxNzZkNDYyLi42NDA0OWFiIDEwMDY0NAotLS0gYS90ZXN0cy9zeXNfc3RhdF90ZXN0LmNwcAorKysgYi90ZXN0cy9zeXNfc3RhdF90ZXN0LmNwcApAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKICNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KIApAQCAtNTUsMTYgKzU2LDI5IEBACiB9CiAKIFRFU1Qoc3lzX3N0YXQsIG1rZmlmbykgewotICAvLyBSYWN5IGJ1dCBwcm9iYWJseSBzdWZmaWNpZW50IHdheSB0byBnZXQgYSBzdWl0YWJsZSBmaWxlbmFtZS4KLSAgc3RkOjpzdHJpbmcgcGF0aDsKLSAgewotICAgIFRlbXBvcmFyeUZpbGUgdGY7Ci0gICAgcGF0aCA9IHRmLmZpbGVuYW1lOwotICB9CisgIGlmIChnZXR1aWQoKSA9PSAwKSB7CisgICAgLy8gUmFjeSBidXQgcHJvYmFibHkgc3VmZmljaWVudCB3YXkgdG8gZ2V0IGEgc3VpdGFibGUgZmlsZW5hbWUuCisgICAgc3RkOjpzdHJpbmcgcGF0aDsKKyAgICB7CisgICAgICBUZW1wb3JhcnlGaWxlIHRmOworICAgICAgcGF0aCA9IHRmLmZpbGVuYW1lOworICAgIH0KIAotICBBU1NFUlRfRVEoMCwgbWtmaWZvKHBhdGguY19zdHIoKSwgMDY2NikpOwotICBzdHJ1Y3Qgc3RhdCBzYjsKLSAgQVNTRVJUX0VRKDAsIHN0YXQocGF0aC5jX3N0cigpLCAmc2IpKTsKLSAgQVNTRVJUX1RSVUUoU19JU0ZJRk8oc2Iuc3RfbW9kZSkpOwotICB1bmxpbmsocGF0aC5jX3N0cigpKTsKKyAgICBBU1NFUlRfRVEoMCwgbWtmaWZvKHBhdGguY19zdHIoKSwgMDY2NikpOworICAgIHN0cnVjdCBzdGF0IHNiOworICAgIEFTU0VSVF9FUSgwLCBzdGF0KHBhdGguY19zdHIoKSwgJnNiKSk7CisgICAgQVNTRVJUX1RSVUUoU19JU0ZJRk8oc2Iuc3RfbW9kZSkpOworICAgIHVubGluayhwYXRoLmNfc3RyKCkpOworICB9IGVsc2UgeworICAgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBvbmx5IHBlcmZvcm1zIGEgdGVzdCB3aGVuIHJ1biBhcyByb290LiI7CisgIH0KK30KKworVEVTVChzeXNfc3RhdCwgc3RhdDY0X2xzdGF0NjRfZnN0YXQ2NCkgeworICBzdHJ1Y3Qgc3RhdDY0IHNiOworICBBU1NFUlRfRVEoMCwgc3RhdDY0KCIvcHJvYy92ZXJzaW9uIiwgJnNiKSk7CisgIEFTU0VSVF9FUSgwLCBsc3RhdDY0KCIvcHJvYy92ZXJzaW9uIiwgJnNiKSk7CisgIGludCBmZCA9IG9wZW4oIi9wcm9jL3ZlcnNpb24iLCBPX1JET05MWSk7CisgIEFTU0VSVF9FUSgwLCBmc3RhdDY0KGZkLCAmc2IpKTsKKyAgY2xvc2UoZmQpOwogfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3lzX3N0YXR2ZnNfdGVzdC5jcHAgYi90ZXN0cy9zeXNfc3RhdHZmc190ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjE5ZTEzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3lzX3N0YXR2ZnNfdGVzdC5jcHAKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgPHN0cmluZz4KKwordGVtcGxhdGUgPHR5cGVuYW1lIFN0YXRWZnNUPiB2b2lkIENoZWNrKFN0YXRWZnNUJiBzYikgeworICBFWFBFQ1RfRVEoNDA5NlUsIHNiLmZfYnNpemUpOworICBFWFBFQ1RfRVEoMFUsIHNiLmZfYmZyZWUpOworICBFWFBFQ1RfRVEoMFUsIHNiLmZfZmZyZWUpOworICBFWFBFQ1RfRVEoMFUsIHNiLmZfZnNpZCk7CisgIEVYUEVDVF9FUSgyNTVVLCBzYi5mX25hbWVtYXgpOworfQorCitURVNUKHN5c19zdGF0dmZzLCBzdGF0dmZzKSB7CisgIHN0cnVjdCBzdGF0dmZzIHNiOworICBBU1NFUlRfRVEoMCwgc3RhdHZmcygiL3Byb2MiLCAmc2IpKTsKKyAgQ2hlY2soc2IpOworfQorCitURVNUKHN5c19zdGF0dmZzLCBzdGF0dmZzNjQpIHsKKyAgc3RydWN0IHN0YXR2ZnM2NCBzYjsKKyAgQVNTRVJUX0VRKDAsIHN0YXR2ZnM2NCgiL3Byb2MiLCAmc2IpKTsKKyAgQ2hlY2soc2IpOworfQorCitURVNUKHN5c19zdGF0dmZzLCBmc3RhdHZmcykgeworICBzdHJ1Y3Qgc3RhdHZmcyBzYjsKKyAgaW50IGZkID0gb3BlbigiL3Byb2MiLCBPX1JET05MWSk7CisgIEFTU0VSVF9FUSgwLCBmc3RhdHZmcyhmZCwgJnNiKSk7CisgIGNsb3NlKGZkKTsKKyAgQ2hlY2soc2IpOworfQorVEVTVChzeXNfc3RhdHZmcywgZnN0YXR2ZnM2NCkgeworICBzdHJ1Y3Qgc3RhdHZmczY0IHNiOworICBpbnQgZmQgPSBvcGVuKCIvcHJvYyIsIE9fUkRPTkxZKTsKKyAgQVNTRVJUX0VRKDAsIGZzdGF0dmZzNjQoZmQsICZzYikpOworICBjbG9zZShmZCk7CisgIENoZWNrKHNiKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3N5c190aW1lX3Rlc3QuY3BwIGIvdGVzdHMvc3lzX3RpbWVfdGVzdC5jcHAKaW5kZXggNzMwOTkyZi4uYmIxNDJiYyAxMDA2NDQKLS0tIGEvdGVzdHMvc3lzX3RpbWVfdGVzdC5jcHAKKysrIGIvdGVzdHMvc3lzX3RpbWVfdGVzdC5jcHAKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAKICNpbmNsdWRlICJUZW1wb3JhcnlGaWxlLmgiCkBAIC00NiwzICs0NywyMyBAQAogICBUZW1wb3JhcnlGaWxlIHRmOwogICBBU1NFUlRfRVEoMCwgdXRpbWVzKHRmLmZpbGVuYW1lLCBOVUxMKSk7CiB9CisKK1RFU1Qoc3lzX3RpbWUsIGdldHRpbWVvZmRheSkgeworICAvLyBUcnkgdG8gZW5zdXJlIHRoYXQgb3VyIHZkc28gZ2V0dGltZW9mZGF5IGlzIHdvcmtpbmcuCisgIHRpbWV2YWwgdHYxOworICBBU1NFUlRfRVEoMCwgZ2V0dGltZW9mZGF5KCZ0djEsIE5VTEwpKTsKKyAgdGltZXZhbCB0djI7CisgIEFTU0VSVF9FUSgwLCBzeXNjYWxsKF9fTlJfZ2V0dGltZW9mZGF5LCAmdHYyLCBOVUxMKSk7CisKKyAgLy8gV2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3bz8KKyAgdHYyLnR2X3NlYyAtPSB0djEudHZfc2VjOworICB0djIudHZfdXNlYyAtPSB0djEudHZfdXNlYzsKKyAgaWYgKHR2Mi50dl91c2VjIDwgMCkgeworICAgIC0tdHYyLnR2X3NlYzsKKyAgICB0djIudHZfdXNlYyArPSAxMDAwMDAwOworICB9CisKKyAgLy8gU2hvdWxkIGJlIGxlc3MgdGhhbiAoYSB2ZXJ5IGdlbmVyb3VzLCB0byB0cnkgdG8gYXZvaWQgZmxha2luZXNzKSAxMDAwdXMuCisgIEFTU0VSVF9FUSgwLCB0djIudHZfc2VjKTsKKyAgQVNTRVJUX0xUKHR2Mi50dl91c2VjLCAxMDAwKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3N5c192ZnNfdGVzdC5jcHAgYi90ZXN0cy9zeXNfdmZzX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMDU2NjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zeXNfdmZzX3Rlc3QuY3BwCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPHN5cy92ZnMuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgPHN0cmluZz4KKwordGVtcGxhdGUgPHR5cGVuYW1lIFN0YXRGc1Q+IHZvaWQgQ2hlY2soU3RhdEZzVCYgc2IpIHsKKyAgRVhQRUNUX0VRKDQwOTYsIHN0YXRpY19jYXN0PGludD4oc2IuZl9ic2l6ZSkpOworICBFWFBFQ1RfRVEoMFUsIHNiLmZfYmZyZWUpOworICBFWFBFQ1RfRVEoMFUsIHNiLmZfZmZyZWUpOworICBFWFBFQ1RfRVEoMCwgc2IuZl9mc2lkLl9fdmFsWzBdKTsKKyAgRVhQRUNUX0VRKDAsIHNiLmZfZnNpZC5fX3ZhbFsxXSk7CisgIEVYUEVDVF9FUSgyNTUsIHN0YXRpY19jYXN0PGludD4oc2IuZl9uYW1lbGVuKSk7Cit9CisKK1RFU1Qoc3lzX3Zmcywgc3RhdGZzKSB7CisgIHN0cnVjdCBzdGF0ZnMgc2I7CisgIEFTU0VSVF9FUSgwLCBzdGF0ZnMoIi9wcm9jIiwgJnNiKSk7CisgIENoZWNrKHNiKTsKK30KKworVEVTVChzeXNfdmZzLCBzdGF0ZnM2NCkgeworICBzdHJ1Y3Qgc3RhdGZzNjQgc2I7CisgIEFTU0VSVF9FUSgwLCBzdGF0ZnM2NCgiL3Byb2MiLCAmc2IpKTsKKyAgQ2hlY2soc2IpOworfQorCitURVNUKHN5c192ZnMsIGZzdGF0ZnMpIHsKKyAgc3RydWN0IHN0YXRmcyBzYjsKKyAgaW50IGZkID0gb3BlbigiL3Byb2MiLCBPX1JET05MWSk7CisgIEFTU0VSVF9FUSgwLCBmc3RhdGZzKGZkLCAmc2IpKTsKKyAgY2xvc2UoZmQpOworICBDaGVjayhzYik7Cit9CitURVNUKHN5c192ZnMsIGZzdGF0ZnM2NCkgeworICBzdHJ1Y3Qgc3RhdGZzNjQgc2I7CisgIGludCBmZCA9IG9wZW4oIi9wcm9jIiwgT19SRE9OTFkpOworICBBU1NFUlRfRVEoMCwgZnN0YXRmczY0KGZkLCAmc2IpKTsKKyAgY2xvc2UoZmQpOworICBDaGVjayhzYik7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zeXN0ZW1fcHJvcGVydGllc190ZXN0LmNwcCBiL3Rlc3RzL3N5c3RlbV9wcm9wZXJ0aWVzX3Rlc3QuY3BwCmluZGV4IDUzNjc5NzIuLmJmZDU4NTQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N5c3RlbV9wcm9wZXJ0aWVzX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL3N5c3RlbV9wcm9wZXJ0aWVzX3Rlc3QuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c3RyaW5nPgogCi0jaWYgX19CSU9OSUNfXworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKIAogI2RlZmluZSBfUkVBTExZX0lOQ0xVREVfU1lTX19TWVNURU1fUFJPUEVSVElFU19IXwogI2luY2x1ZGUgPHN5cy9fc3lzdGVtX3Byb3BlcnRpZXMuaD4KQEAgLTY5LDcgKzY5LDU0IEBACiAgICAgdm9pZCAqb2xkX3BhOwogfTsKIAorc3RhdGljIHZvaWQgZm9yZWFjaF90ZXN0X2NhbGxiYWNrKGNvbnN0IHByb3BfaW5mbyAqcGksIHZvaWQqIGNvb2tpZSkgeworICAgIHNpemVfdCAqY291bnQgPSBzdGF0aWNfY2FzdDxzaXplX3QgKj4oY29va2llKTsKKworICAgIEFTU0VSVF9ORSgocHJvcF9pbmZvICopTlVMTCwgcGkpOworICAgICgqY291bnQpKys7Cit9CisKK3N0YXRpYyB2b2lkIGhpZXJhcmNoaWNhbF90ZXN0X2NhbGxiYWNrKGNvbnN0IHByb3BfaW5mbyAqcGksIHZvaWQgKmNvb2tpZSkgeworICAgIGJvb2wgKCpvaylbOF1bOF0gPSBzdGF0aWNfY2FzdDxib29sICgqKVs4XVs4XT4oY29va2llKTsKKworICAgIGNoYXIgbmFtZVtQUk9QX05BTUVfTUFYXTsKKyAgICBjaGFyIHZhbHVlW1BST1BfVkFMVUVfTUFYXTsKKworICAgIF9fc3lzdGVtX3Byb3BlcnR5X3JlYWQocGksIG5hbWUsIHZhbHVlKTsKKworICAgIGludCBuYW1lX2ksIG5hbWVfaiwgbmFtZV9rOworICAgIGludCB2YWx1ZV9pLCB2YWx1ZV9qLCB2YWx1ZV9rOworICAgIEFTU0VSVF9FUSgzLCBzc2NhbmYobmFtZSwgInByb3BlcnR5XyVkLiVkLiVkIiwgJm5hbWVfaSwgJm5hbWVfaiwgJm5hbWVfaykpOworICAgIEFTU0VSVF9FUSgzLCBzc2NhbmYodmFsdWUsICJ2YWx1ZV8lZC4lZC4lZCIsICZ2YWx1ZV9pLCAmdmFsdWVfaiwgJnZhbHVlX2spKTsKKyAgICBBU1NFUlRfRVEobmFtZV9pLCB2YWx1ZV9pKTsKKyAgICBBU1NFUlRfR0UobmFtZV9pLCAwKTsKKyAgICBBU1NFUlRfTFQobmFtZV9pLCA4KTsKKyAgICBBU1NFUlRfRVEobmFtZV9qLCB2YWx1ZV9qKTsKKyAgICBBU1NFUlRfR0UobmFtZV9qLCAwKTsKKyAgICBBU1NFUlRfTFQobmFtZV9qLCA4KTsKKyAgICBBU1NFUlRfRVEobmFtZV9rLCB2YWx1ZV9rKTsKKyAgICBBU1NFUlRfR0UobmFtZV9rLCAwKTsKKyAgICBBU1NFUlRfTFQobmFtZV9rLCA4KTsKKworICAgIG9rW25hbWVfaV1bbmFtZV9qXVtuYW1lX2tdID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgKlByb3BlcnR5V2FpdEhlbHBlckZuKHZvaWQgKmFyZykgeworICAgIGludCAqZmxhZyA9IChpbnQgKilhcmc7CisgICAgcHJvcF9pbmZvICpwaTsKKyAgICBwaSA9IChwcm9wX2luZm8gKilfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKCJwcm9wZXJ0eSIpOworICAgIHVzbGVlcCgxMDAwMDApOworCisgICAgKmZsYWcgPSAxOworICAgIF9fc3lzdGVtX3Byb3BlcnR5X3VwZGF0ZShwaSwgInZhbHVlMyIsIDYpOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKyNlbmRpZiAvLyBfX0JJT05JQ19fCisKIFRFU1QocHJvcGVydGllcywgYWRkKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICAgIExvY2FsUHJvcGVydHlUZXN0U3RhdGUgcGE7CiAgICAgQVNTRVJUX1RSVUUocGEudmFsaWQpOwogCkBAIC04Nyw5ICsxMzQsMTMgQEAKIAogICAgIEFTU0VSVF9FUSg2LCBfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoInByb3BlcnR5X290aGVyIiwgcHJvcHZhbHVlKSk7CiAgICAgQVNTRVJUX1NUUkVRKHByb3B2YWx1ZSwgInZhbHVlMyIpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICAgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAogVEVTVChwcm9wZXJ0aWVzLCB1cGRhdGUpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgICAgTG9jYWxQcm9wZXJ0eVRlc3RTdGF0ZSBwYTsKICAgICBBU1NFUlRfVFJVRShwYS52YWxpZCk7CiAKQEAgLTEyMCw5ICsxNzEsMTMgQEAKIAogICAgIEFTU0VSVF9FUSg2LCBfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoInByb3BlcnR5X290aGVyIiwgcHJvcHZhbHVlKSk7CiAgICAgQVNTRVJUX1NUUkVRKHByb3B2YWx1ZSwgInZhbHVlNiIpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICAgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAogVEVTVChwcm9wZXJ0aWVzLCBmaWxsKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICAgIExvY2FsUHJvcGVydHlUZXN0U3RhdGUgcGE7CiAgICAgQVNTRVJUX1RSVUUocGEudmFsaWQpOwogICAgIGNoYXIgcHJvcF9uYW1lW1BST1BfTkFNRV9NQVhdOwpAQCAtMTYxLDE2ICsyMTYsMTMgQEAKICAgICAgICAgQVNTRVJUX0VRKFBST1BfVkFMVUVfTUFYIC0gMSwgX19zeXN0ZW1fcHJvcGVydHlfZ2V0KHByb3BfbmFtZSwgcHJvcF92YWx1ZV9yZXQpKTsKICAgICAgICAgQVNTRVJUX0VRKDAsIG1lbWNtcChwcm9wX3ZhbHVlLCBwcm9wX3ZhbHVlX3JldCwgUFJPUF9WQUxVRV9NQVgpKTsKICAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGZvcmVhY2hfdGVzdF9jYWxsYmFjayhjb25zdCBwcm9wX2luZm8gKnBpLCB2b2lkKiBjb29raWUpIHsKLSAgICBzaXplX3QgKmNvdW50ID0gc3RhdGljX2Nhc3Q8c2l6ZV90ICo+KGNvb2tpZSk7Ci0KLSAgICBBU1NFUlRfTkUoKHByb3BfaW5mbyAqKU5VTEwsIHBpKTsKLSAgICAoKmNvdW50KSsrOworI2Vsc2UgLy8gX19CSU9OSUNfXworICAgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAogVEVTVChwcm9wZXJ0aWVzLCBmb3JlYWNoKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICAgIExvY2FsUHJvcGVydHlUZXN0U3RhdGUgcGE7CiAgICAgQVNTRVJUX1RSVUUocGEudmFsaWQpOwogICAgIHNpemVfdCBjb3VudCA9IDA7CkBAIC0xODEsOSArMjMzLDEzIEBACiAKICAgICBBU1NFUlRfRVEoMCwgX19zeXN0ZW1fcHJvcGVydHlfZm9yZWFjaChmb3JlYWNoX3Rlc3RfY2FsbGJhY2ssICZjb3VudCkpOwogICAgIEFTU0VSVF9FUSgzVSwgY291bnQpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICAgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAogVEVTVChwcm9wZXJ0aWVzLCBmaW5kX250aCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgICBMb2NhbFByb3BlcnR5VGVzdFN0YXRlIHBhOwogICAgIEFTU0VSVF9UUlVFKHBhLnZhbGlkKTsKIApAQCAtMjAxLDM0ICsyNTcsMTMgQEAKICAgICBBU1NFUlRfRVEoKGNvbnN0IHByb3BfaW5mbyAqKU5VTEwsIF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmRfbnRoKDEwMCkpOwogICAgIEFTU0VSVF9FUSgoY29uc3QgcHJvcF9pbmZvICopTlVMTCwgX19zeXN0ZW1fcHJvcGVydHlfZmluZF9udGgoMjAwKSk7CiAgICAgQVNTRVJUX0VRKChjb25zdCBwcm9wX2luZm8gKilOVUxMLCBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kX250aCgyNDcpKTsKLX0KLQotc3RhdGljIHZvaWQgaGllcmFyY2hpY2FsX3Rlc3RfY2FsbGJhY2soY29uc3QgcHJvcF9pbmZvICpwaSwgdm9pZCAqY29va2llKSB7Ci0gICAgYm9vbCAoKm9rKVs4XVs4XSA9IHN0YXRpY19jYXN0PGJvb2wgKCopWzhdWzhdPihjb29raWUpOwotCi0gICAgY2hhciBuYW1lW1BST1BfTkFNRV9NQVhdOwotICAgIGNoYXIgdmFsdWVbUFJPUF9WQUxVRV9NQVhdOwotCi0gICAgX19zeXN0ZW1fcHJvcGVydHlfcmVhZChwaSwgbmFtZSwgdmFsdWUpOwotCi0gICAgaW50IG5hbWVfaSwgbmFtZV9qLCBuYW1lX2s7Ci0gICAgaW50IHZhbHVlX2ksIHZhbHVlX2osIHZhbHVlX2s7Ci0gICAgQVNTRVJUX0VRKDMsIHNzY2FuZihuYW1lLCAicHJvcGVydHlfJWQuJWQuJWQiLCAmbmFtZV9pLCAmbmFtZV9qLCAmbmFtZV9rKSk7Ci0gICAgQVNTRVJUX0VRKDMsIHNzY2FuZih2YWx1ZSwgInZhbHVlXyVkLiVkLiVkIiwgJnZhbHVlX2ksICZ2YWx1ZV9qLCAmdmFsdWVfaykpOwotICAgIEFTU0VSVF9FUShuYW1lX2ksIHZhbHVlX2kpOwotICAgIEFTU0VSVF9HRShuYW1lX2ksIDApOwotICAgIEFTU0VSVF9MVChuYW1lX2ksIDgpOwotICAgIEFTU0VSVF9FUShuYW1lX2osIHZhbHVlX2opOwotICAgIEFTU0VSVF9HRShuYW1lX2osIDApOwotICAgIEFTU0VSVF9MVChuYW1lX2osIDgpOwotICAgIEFTU0VSVF9FUShuYW1lX2ssIHZhbHVlX2spOwotICAgIEFTU0VSVF9HRShuYW1lX2ssIDApOwotICAgIEFTU0VSVF9MVChuYW1lX2ssIDgpOwotCi0gICAgb2tbbmFtZV9pXVtuYW1lX2pdW25hbWVfa10gPSB0cnVlOworI2Vsc2UgLy8gX19CSU9OSUNfXworICAgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAogVEVTVChwcm9wZXJ0aWVzLCBmaWxsX2hpZXJhcmNoaWNhbCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgICBMb2NhbFByb3BlcnR5VGVzdFN0YXRlIHBhOwogICAgIEFTU0VSVF9UUlVFKHBhLnZhbGlkKTsKICAgICBjaGFyIHByb3BfbmFtZVtQUk9QX05BTUVfTUFYXTsKQEAgLTI3OSw5ICszMTQsMTMgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKyNlbHNlIC8vIF9fQklPTklDX18KKyAgICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QocHJvcGVydGllcywgZXJyb3JzKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICAgIExvY2FsUHJvcGVydHlUZXN0U3RhdGUgcGE7CiAgICAgQVNTRVJUX1RSVUUocGEudmFsaWQpOwogICAgIGNoYXIgcHJvcF92YWx1ZVtQUk9QX05BTUVfTUFYXTsKQEAgLTI5Niw5ICszMzUsMTMgQEAKICAgICBBU1NFUlRfRVEoLTEsIF9fc3lzdGVtX3Byb3BlcnR5X2FkZCgibmFtZSIsIFBST1BfTkFNRV9NQVgsICJ2YWx1ZSIsIDUpKTsKICAgICBBU1NFUlRfRVEoLTEsIF9fc3lzdGVtX3Byb3BlcnR5X2FkZCgibmFtZSIsIDQsICJ2YWx1ZSIsIFBST1BfVkFMVUVfTUFYKSk7CiAgICAgQVNTRVJUX0VRKC0xLCBfX3N5c3RlbV9wcm9wZXJ0eV91cGRhdGUoTlVMTCwgInZhbHVlIiwgUFJPUF9WQUxVRV9NQVgpKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QocHJvcGVydGllcywgc2VyaWFsKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICAgIExvY2FsUHJvcGVydHlUZXN0U3RhdGUgcGE7CiAgICAgQVNTRVJUX1RSVUUocGEudmFsaWQpOwogICAgIGNvbnN0IHByb3BfaW5mbyAqcGk7CkBAIC0zMDksMjIgKzM1MiwxMyBAQAogICAgIHNlcmlhbCA9IF9fc3lzdGVtX3Byb3BlcnR5X3NlcmlhbChwaSk7CiAgICAgQVNTRVJUX0VRKDAsIF9fc3lzdGVtX3Byb3BlcnR5X3VwZGF0ZSgocHJvcF9pbmZvICopcGksICJ2YWx1ZTIiLCA2KSk7CiAgICAgQVNTRVJUX05FKHNlcmlhbCwgX19zeXN0ZW1fcHJvcGVydHlfc2VyaWFsKHBpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkICpQcm9wZXJ0eVdhaXRIZWxwZXJGbih2b2lkICphcmcpCi17Ci0gICAgaW50ICpmbGFnID0gKGludCAqKWFyZzsKLSAgICBwcm9wX2luZm8gKnBpOwotICAgIHBpID0gKHByb3BfaW5mbyAqKV9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQoInByb3BlcnR5Iik7Ci0gICAgdXNsZWVwKDEwMDAwMCk7Ci0KLSAgICAqZmxhZyA9IDE7Ci0gICAgX19zeXN0ZW1fcHJvcGVydHlfdXBkYXRlKHBpLCAidmFsdWUzIiwgNik7Ci0KLSAgICByZXR1cm4gTlVMTDsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QocHJvcGVydGllcywgd2FpdCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgICBMb2NhbFByb3BlcnR5VGVzdFN0YXRlIHBhOwogICAgIEFTU0VSVF9UUlVFKHBhLnZhbGlkKTsKICAgICB1bnNpZ25lZCBpbnQgc2VyaWFsOwpAQCAtMzQ2LDYgKzM4MCw5IEBACiAKICAgICB2b2lkKiByZXN1bHQ7CiAgICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfam9pbih0LCAmcmVzdWx0KSk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgICAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCiBjbGFzcyBLaWxsZWRCeUZhdWx0IHsKQEAgLTM2Miw2ICszOTksNyBAQAogfQogCiBURVNUKHByb3BlcnRpZXNfRGVhdGhUZXN0LCByZWFkX29ubHkpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKIAogICAvLyBUaGlzIHRlc3Qgb25seSBtYWtlcyBzZW5zZSBpZiB3ZSdyZSB0YWxraW5nIHRvIHRoZSByZWFsIHN5c3RlbSBwcm9wZXJ0eSBzZXJ2aWNlLgpAQCAtMzcxLDYgKzQwOSw3IEBACiAgIH0KIAogICBBU1NFUlRfRVhJVChfX3N5c3RlbV9wcm9wZXJ0eV9hZGQoInByb3BlcnR5IiwgOCwgInZhbHVlIiwgNSksIEtpbGxlZEJ5RmF1bHQoKSwgIiIpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvdGltZV90ZXN0LmNwcCBiL3Rlc3RzL3RpbWVfdGVzdC5jcHAKaW5kZXggZmI1YTRhNy4uMjQxYzRhMCAxMDA2NDQKLS0tIGEvdGVzdHMvdGltZV90ZXN0LmNwcAorKysgYi90ZXN0cy90aW1lX3Rlc3QuY3BwCkBAIC0xNCwzNCArMTQsMTggQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpbmNsdWRlIDxmZWF0dXJlcy5oPgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KICNpbmNsdWRlIDx0aW1lLmg+CiAKLSNpZmRlZiBfX0JJT05JQ19fIC8vIG1rdGltZV90eiBpcyBhIGJpb25pYyBleHRlbnNpb24uCi0jaW5jbHVkZSA8bGliYy9wcml2YXRlL2Jpb25pY190aW1lLmg+Ci1URVNUKHRpbWUsIG1rdGltZV90eikgewotICBzdHJ1Y3QgdG0gZXBvY2g7Ci0gIG1lbXNldCgmZXBvY2gsIDAsIHNpemVvZih0bSkpOwotICBlcG9jaC50bV95ZWFyID0gMTk3MCAtIDE5MDA7Ci0gIGVwb2NoLnRtX21vbiA9IDE7Ci0gIGVwb2NoLnRtX21kYXkgPSAxOworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAKLSAgLy8gQWxwaGFiZXRpY2FsbHkgZmlyc3QuIENvaW5jaWRlbnRhbGx5IGVxdWl2YWxlbnQgdG8gVVRDLgotICBBU1NFUlRfRVEoMjY3ODQwMCwgbWt0aW1lX3R6KCZlcG9jaCwgIkFmcmljYS9BYmlkamFuIikpOwotCi0gIC8vIEFscGhhYmV0aWNhbGx5IGxhc3QuIENvaW5jaWRlbnRhbGx5IGVxdWl2YWxlbnQgdG8gVVRDLgotICBBU1NFUlRfRVEoMjY3ODQwMCwgbWt0aW1lX3R6KCZlcG9jaCwgIlp1bHUiKSk7Ci0KLSAgLy8gU29tZXdoZXJlIGluIHRoZSBtaWRkbGUsIG5vdCBVVEMuCi0gIEFTU0VSVF9FUSgyNzA3MjAwLCBta3RpbWVfdHooJmVwb2NoLCAiQW1lcmljYS9Mb3NfQW5nZWxlcyIpKTsKLQotICAvLyBNaXNzaW5nLiBGYWxscyBiYWNrIHRvIFVUQy4KLSAgQVNTRVJUX0VRKDI2Nzg0MDAsIG1rdGltZV90eigmZXBvY2gsICJQU1QiKSk7Ci19Ci0jZW5kaWYKKyNpbmNsdWRlICJTY29wZWRTaWduYWxIYW5kbGVyLmgiCiAKIFRFU1QodGltZSwgZ210aW1lKSB7CiAgIHRpbWVfdCB0ID0gMDsKQEAgLTU1LDcgKzM5LDM3IEBACiAgIEFTU0VSVF9FUSgxOTcwLCBicm9rZW5fZG93bi0+dG1feWVhciArIDE5MDApOwogfQogCi0jaWYgX19CSU9OSUNfXworc3RhdGljIHZvaWQqIGdtdGltZV9ub19zdGFja19vdmVyZmxvd18xNDMxMzcwM19mbih2b2lkKikgeworICBjb25zdCBjaGFyKiBvcmlnaW5hbF90eiA9IGdldGVudigiVFoiKTsKKyAgLy8gRW5zdXJlIHdlJ2xsIGFjdHVhbGx5IGhhdmUgdG8gZW50ZXIgdHpsb2FkIGJ5IHVzaW5nIGEgdGltZSB6b25lIHRoYXQgZG9lc24ndCBleGlzdC4KKyAgc2V0ZW52KCJUWiIsICJnbXRpbWVfc3RhY2tfb3ZlcmZsb3dfMTQzMTM3MDMiLCAxKTsKKyAgdHpzZXQoKTsKKyAgaWYgKG9yaWdpbmFsX3R6ICE9IE5VTEwpIHsKKyAgICBzZXRlbnYoIlRaIiwgb3JpZ2luYWxfdHosIDEpOworICB9CisgIHR6c2V0KCk7CisgIHJldHVybiBOVUxMOworfQorCitURVNUKHRpbWUsIGdtdGltZV9ub19zdGFja19vdmVyZmxvd18xNDMxMzcwMykgeworICAvLyBJcyBpdCBzYWZlIHRvIGNhbGwgdHpsb2FkIG9uIGEgdGhyZWFkIHdpdGggYSBzbWFsbCBzdGFjaz8KKyAgLy8gaHR0cDovL2IvMTQzMTM3MDMKKyAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9NjExMzAKKyAgcHRocmVhZF9hdHRyX3QgYXR0cmlidXRlczsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyaWJ1dGVzKSk7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBBU1NFUlRfRVEoMCwgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSgmYXR0cmlidXRlcywgUFRIUkVBRF9TVEFDS19NSU4pKTsKKyNlbHNlCisgIC8vIFBUSFJFQURfU1RBQ0tfTUlOIG5vdCBjdXJyZW50bHkgaW4gdGhlIGhvc3QgR0NDIHN5c3Jvb3QuCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplKCZhdHRyaWJ1dGVzLCA0ICogZ2V0cGFnZXNpemUoKSkpOworI2VuZGlmCisKKyAgcHRocmVhZF90IHQ7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NyZWF0ZSgmdCwgJmF0dHJpYnV0ZXMsIGdtdGltZV9ub19zdGFja19vdmVyZmxvd18xNDMxMzcwM19mbiwgTlVMTCkpOworICB2b2lkKiByZXN1bHQ7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2pvaW4odCwgJnJlc3VsdCkpOworfQorCiBURVNUKHRpbWUsIG1rdGltZV8xMDMxMDkyOSkgewogICBzdHJ1Y3QgdG0gdDsKICAgbWVtc2V0KCZ0LCAwLCBzaXplb2YodG0pKTsKQEAgLTY2LDcgKzgwLDYgQEAKICNpZiAhZGVmaW5lZChfX0xQNjRfXykKICAgLy8gMzItYml0IGJpb25pYyBzdHVwaWRseSBoYWQgYSBzaWduZWQgMzItYml0IHRpbWVfdC4KICAgQVNTRVJUX0VRKC0xLCBta3RpbWUoJnQpKTsKLSAgQVNTRVJUX0VRKC0xLCBta3RpbWVfdHooJnQsICJVVEMiKSk7CiAjZWxzZQogICAvLyBFdmVyeW9uZSBlbHNlIHNob3VsZCBiZSB1c2luZyBhIHNpZ25lZCA2NC1iaXQgdGltZV90LgogICBBU1NFUlRfR0Uoc2l6ZW9mKHRpbWVfdCkgKiA4LCA2NFUpOwpAQCAtNzQsMTIgKzg3LDMxOSBAQAogICBzZXRlbnYoIlRaIiwgIkFtZXJpY2EvTG9zX0FuZ2VsZXMiLCAxKTsKICAgdHpzZXQoKTsKICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHRpbWVfdD4oNDEwODM0ODgwMFUpLCBta3RpbWUoJnQpKTsKLSAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHRpbWVfdD4oNDEwODMyMDAwMFUpLCBta3RpbWVfdHooJnQsICJVVEMiKSk7CiAKICAgc2V0ZW52KCJUWiIsICJVVEMiLCAxKTsKICAgdHpzZXQoKTsKICAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHRpbWVfdD4oNDEwODMyMDAwMFUpLCBta3RpbWUoJnQpKTsKLSAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHRpbWVfdD4oNDEwODM0ODgwMFUpLCBta3RpbWVfdHooJnQsICJBbWVyaWNhL0xvc19BbmdlbGVzIikpOwogI2VuZGlmCiB9CisKK1RFU1QodGltZSwgc3RyZnRpbWUpIHsKKyAgc2V0ZW52KCJUWiIsICJVVEMiLCAxKTsKKworICBzdHJ1Y3QgdG0gdDsKKyAgbWVtc2V0KCZ0LCAwLCBzaXplb2YodG0pKTsKKyAgdC50bV95ZWFyID0gMjAwOworICB0LnRtX21vbiA9IDI7CisgIHQudG1fbWRheSA9IDEwOworCisgIGNoYXIgYnVmWzY0XTsKKworICAvLyBTZWNvbmRzIHNpbmNlIHRoZSBlcG9jaC4KKyNpZiBkZWZpbmVkKF9fQklPTklDX18pIHx8IGRlZmluZWQoX19MUDY0X18pIC8vIE5vdCAzMi1iaXQgZ2xpYmMuCisgIEVYUEVDVF9FUSgxMFUsIHN0cmZ0aW1lKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsICZ0KSk7CisgIEVYUEVDVF9TVFJFUSgiNDEwODMyMDAwMCIsIGJ1Zik7CiAjZW5kaWYKKworICAvLyBEYXRlIGFuZCB0aW1lIGFzIHRleHQuCisgIEVYUEVDVF9FUSgyNFUsIHN0cmZ0aW1lKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlYyIsICZ0KSk7CisgIEVYUEVDVF9TVFJFUSgiU3VuIE1hciAxMCAwMDowMDowMCAyMTAwIiwgYnVmKTsKK30KKworVEVTVCh0aW1lLCBzdHJwdGltZSkgeworICBzZXRlbnYoIlRaIiwgIlVUQyIsIDEpOworCisgIHN0cnVjdCB0bSB0OworICBjaGFyIGJ1Zls2NF07CisKKyAgbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOworICBzdHJwdGltZSgiMTE6MTQiLCAiJVIiLCAmdCk7CisgIHN0cmZ0aW1lKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlSDolTSIsICZ0KTsKKyAgRVhQRUNUX1NUUkVRKCIxMToxNCIsIGJ1Zik7CisKKyAgbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOworICBzdHJwdGltZSgiMDk6NDE6NTMiLCAiJVQiLCAmdCk7CisgIHN0cmZ0aW1lKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlSDolTTolUyIsICZ0KTsKKyAgRVhQRUNUX1NUUkVRKCIwOTo0MTo1MyIsIGJ1Zik7Cit9CisKK3ZvaWQgU2V0VGltZSh0aW1lcl90IHQsIHRpbWVfdCB2YWx1ZV9zLCB0aW1lX3QgdmFsdWVfbnMsIHRpbWVfdCBpbnRlcnZhbF9zLCB0aW1lX3QgaW50ZXJ2YWxfbnMpIHsKKyAgaXRpbWVyc3BlYyB0czsKKyAgdHMuaXRfdmFsdWUudHZfc2VjID0gdmFsdWVfczsKKyAgdHMuaXRfdmFsdWUudHZfbnNlYyA9IHZhbHVlX25zOworICB0cy5pdF9pbnRlcnZhbC50dl9zZWMgPSBpbnRlcnZhbF9zOworICB0cy5pdF9pbnRlcnZhbC50dl9uc2VjID0gaW50ZXJ2YWxfbnM7CisgIEFTU0VSVF9FUSgwLCB0aW1lcl9zZXR0aW1lKHQsIFRJTUVSX0FCU1RJTUUsICZ0cywgTlVMTCkpOworfQorCitzdGF0aWMgdm9pZCBOb09wTm90aWZ5RnVuY3Rpb24oc2lndmFsX3QpIHsKK30KKworVEVTVCh0aW1lLCB0aW1lcl9jcmVhdGUpIHsKKyAgc2lnZXZlbnRfdCBzZTsKKyAgbWVtc2V0KCZzZSwgMCwgc2l6ZW9mKHNlKSk7CisgIHNlLnNpZ2V2X25vdGlmeSA9IFNJR0VWX1RIUkVBRDsKKyAgc2Uuc2lnZXZfbm90aWZ5X2Z1bmN0aW9uID0gTm9PcE5vdGlmeUZ1bmN0aW9uOworICB0aW1lcl90IHRpbWVyX2lkOworICBBU1NFUlRfRVEoMCwgdGltZXJfY3JlYXRlKENMT0NLX01PTk9UT05JQywgJnNlLCAmdGltZXJfaWQpKTsKKworICBpbnQgcGlkID0gZm9yaygpOworICBBU1NFUlRfTkUoLTEsIHBpZCkgPDwgc3RyZXJyb3IoZXJybm8pOworCisgIGlmIChwaWQgPT0gMCkgeworICAgIC8vIFRpbWVycyBhcmUgbm90IGluaGVyaXRlZCBieSB0aGUgY2hpbGQuCisgICAgQVNTRVJUX0VRKC0xLCB0aW1lcl9kZWxldGUodGltZXJfaWQpKTsKKyAgICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7CisgICAgX2V4aXQoMCk7CisgIH0KKworICBpbnQgc3RhdHVzOworICBBU1NFUlRfRVEocGlkLCB3YWl0cGlkKHBpZCwgJnN0YXR1cywgMCkpOworICBBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7CisgIEFTU0VSVF9FUSgwLCBXRVhJVFNUQVRVUyhzdGF0dXMpKTsKKworICBBU1NFUlRfRVEoMCwgdGltZXJfZGVsZXRlKHRpbWVyX2lkKSk7Cit9CisKK3N0YXRpYyBpbnQgdGltZXJfY3JlYXRlX1NJR0VWX1NJR05BTF9zaWduYWxfaGFuZGxlcl9pbnZvY2F0aW9uX2NvdW50ID0gMDsKK3N0YXRpYyB2b2lkIHRpbWVyX2NyZWF0ZV9TSUdFVl9TSUdOQUxfc2lnbmFsX2hhbmRsZXIoaW50IHNpZ25hbF9udW1iZXIpIHsKKyAgKyt0aW1lcl9jcmVhdGVfU0lHRVZfU0lHTkFMX3NpZ25hbF9oYW5kbGVyX2ludm9jYXRpb25fY291bnQ7CisgIEFTU0VSVF9FUShTSUdVU1IxLCBzaWduYWxfbnVtYmVyKTsKK30KKworVEVTVCh0aW1lLCB0aW1lcl9jcmVhdGVfU0lHRVZfU0lHTkFMKSB7CisgIHNpZ2V2ZW50X3Qgc2U7CisgIG1lbXNldCgmc2UsIDAsIHNpemVvZihzZSkpOworICBzZS5zaWdldl9ub3RpZnkgPSBTSUdFVl9TSUdOQUw7CisgIHNlLnNpZ2V2X3NpZ25vID0gU0lHVVNSMTsKKworICB0aW1lcl90IHRpbWVyX2lkOworICBBU1NFUlRfRVEoMCwgdGltZXJfY3JlYXRlKENMT0NLX01PTk9UT05JQywgJnNlLCAmdGltZXJfaWQpKTsKKworICBTY29wZWRTaWduYWxIYW5kbGVyIHNzaChTSUdVU1IxLCB0aW1lcl9jcmVhdGVfU0lHRVZfU0lHTkFMX3NpZ25hbF9oYW5kbGVyKTsKKworICBBU1NFUlRfRVEoMCwgdGltZXJfY3JlYXRlX1NJR0VWX1NJR05BTF9zaWduYWxfaGFuZGxlcl9pbnZvY2F0aW9uX2NvdW50KTsKKworICBpdGltZXJzcGVjIHRzOworICB0cy5pdF92YWx1ZS50dl9zZWMgPSAgMDsKKyAgdHMuaXRfdmFsdWUudHZfbnNlYyA9IDE7CisgIHRzLml0X2ludGVydmFsLnR2X3NlYyA9IDA7CisgIHRzLml0X2ludGVydmFsLnR2X25zZWMgPSAwOworICBBU1NFUlRfRVEoMCwgdGltZXJfc2V0dGltZSh0aW1lcl9pZCwgVElNRVJfQUJTVElNRSwgJnRzLCBOVUxMKSk7CisKKyAgdXNsZWVwKDUwMDAwMCk7CisgIEFTU0VSVF9FUSgxLCB0aW1lcl9jcmVhdGVfU0lHRVZfU0lHTkFMX3NpZ25hbF9oYW5kbGVyX2ludm9jYXRpb25fY291bnQpOworfQorCitzdHJ1Y3QgQ291bnRlciB7CisgIHZvbGF0aWxlIGludCB2YWx1ZTsKKyAgdGltZXJfdCB0aW1lcl9pZDsKKyAgc2lnZXZlbnRfdCBzZTsKKworICBDb3VudGVyKHZvaWQgKCpmbikoc2lndmFsX3QpKSA6IHZhbHVlKDApIHsKKyAgICBtZW1zZXQoJnNlLCAwLCBzaXplb2Yoc2UpKTsKKyAgICBzZS5zaWdldl9ub3RpZnkgPSBTSUdFVl9USFJFQUQ7CisgICAgc2Uuc2lnZXZfbm90aWZ5X2Z1bmN0aW9uID0gZm47CisgICAgc2Uuc2lnZXZfdmFsdWUuc2l2YWxfcHRyID0gdGhpczsKKyAgfQorCisgIHZvaWQgQ3JlYXRlKCkgeworICAgIEFTU0VSVF9FUSgwLCB0aW1lcl9jcmVhdGUoQ0xPQ0tfUkVBTFRJTUUsICZzZSwgJnRpbWVyX2lkKSk7CisgIH0KKworICB+Q291bnRlcigpIHsKKyAgICBpZiAodGltZXJfZGVsZXRlKHRpbWVyX2lkKSAhPSAwKSB7CisgICAgICBhYm9ydCgpOworICAgIH0KKyAgfQorCisgIHN0YXRpYyB2b2lkIENvdW50Tm90aWZ5RnVuY3Rpb24oc2lndmFsX3QgdmFsdWUpIHsKKyAgICBDb3VudGVyKiBjZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q291bnRlcio+KHZhbHVlLnNpdmFsX3B0cik7CisgICAgKytjZC0+dmFsdWU7CisgIH0KKworICBzdGF0aWMgdm9pZCBDb3VudEFuZERpc2FybU5vdGlmeUZ1bmN0aW9uKHNpZ3ZhbF90IHZhbHVlKSB7CisgICAgQ291bnRlciogY2QgPSByZWludGVycHJldF9jYXN0PENvdW50ZXIqPih2YWx1ZS5zaXZhbF9wdHIpOworICAgICsrY2QtPnZhbHVlOworCisgICAgLy8gU2V0dGluZyB0aGUgaW5pdGlhbCBleHBpcmF0aW9uIHRpbWUgdG8gMCBkaXNhcm1zIHRoZSB0aW1lci4KKyAgICBTZXRUaW1lKGNkLT50aW1lcl9pZCwgMCwgMCwgMSwgMCk7CisgIH0KK307CisKK1RFU1QodGltZSwgdGltZXJfc2V0dGltZV8wKSB7CisgIENvdW50ZXIgY291bnRlcihDb3VudGVyOjpDb3VudEFuZERpc2FybU5vdGlmeUZ1bmN0aW9uKTsKKyAgY291bnRlci5DcmVhdGUoKTsKKworICBBU1NFUlRfRVEoMCwgY291bnRlci52YWx1ZSk7CisKKyAgU2V0VGltZShjb3VudGVyLnRpbWVyX2lkLCAwLCAxLCAxLCAwKTsKKyAgdXNsZWVwKDUwMDAwMCk7CisKKyAgLy8gVGhlIGNvdW50IHNob3VsZCBqdXN0IGJlIDEgYmVjYXVzZSB3ZSBkaXNhcm1lZCB0aGUgdGltZXIgdGhlIGZpcnN0IHRpbWUgaXQgZmlyZWQuCisgIEFTU0VSVF9FUSgxLCBjb3VudGVyLnZhbHVlKTsKK30KKworVEVTVCh0aW1lLCB0aW1lcl9zZXR0aW1lX3JlcGVhdHMpIHsKKyAgQ291bnRlciBjb3VudGVyKENvdW50ZXI6OkNvdW50Tm90aWZ5RnVuY3Rpb24pOworICBjb3VudGVyLkNyZWF0ZSgpOworCisgIEFTU0VSVF9FUSgwLCBjb3VudGVyLnZhbHVlKTsKKworICBTZXRUaW1lKGNvdW50ZXIudGltZXJfaWQsIDAsIDEsIDAsIDEwKTsKKyAgdXNsZWVwKDUwMDAwMCk7CisKKyAgLy8gVGhlIGNvdW50IHNob3VsZCBqdXN0IGJlID4gMSBiZWNhdXNlIHdlIGxldCB0aGUgdGltZXIgcmVwZWF0LgorICBBU1NFUlRfR1QoY291bnRlci52YWx1ZSwgMSk7Cit9CisKK3N0YXRpYyBpbnQgdGltZXJfY3JlYXRlX05VTExfc2lnbmFsX2hhbmRsZXJfaW52b2NhdGlvbl9jb3VudCA9IDA7CitzdGF0aWMgdm9pZCB0aW1lcl9jcmVhdGVfTlVMTF9zaWduYWxfaGFuZGxlcihpbnQgc2lnbmFsX251bWJlcikgeworICArK3RpbWVyX2NyZWF0ZV9OVUxMX3NpZ25hbF9oYW5kbGVyX2ludm9jYXRpb25fY291bnQ7CisgIEFTU0VSVF9FUShTSUdBTFJNLCBzaWduYWxfbnVtYmVyKTsKK30KKworVEVTVCh0aW1lLCB0aW1lcl9jcmVhdGVfTlVMTCkgeworICAvLyBBIE5VTEwgc2lnZXZlbnQqIGlzIGVxdWl2YWxlbnQgdG8gYXNraW5nIGZvciBTSUdFVl9TSUdOQUwgZm9yIFNJR0FMUk0uCisgIHRpbWVyX3QgdGltZXJfaWQ7CisgIEFTU0VSVF9FUSgwLCB0aW1lcl9jcmVhdGUoQ0xPQ0tfTU9OT1RPTklDLCBOVUxMLCAmdGltZXJfaWQpKTsKKworICBTY29wZWRTaWduYWxIYW5kbGVyIHNzaChTSUdBTFJNLCB0aW1lcl9jcmVhdGVfTlVMTF9zaWduYWxfaGFuZGxlcik7CisKKyAgQVNTRVJUX0VRKDAsIHRpbWVyX2NyZWF0ZV9OVUxMX3NpZ25hbF9oYW5kbGVyX2ludm9jYXRpb25fY291bnQpOworCisgIFNldFRpbWUodGltZXJfaWQsIDAsIDEsIDAsIDApOworICB1c2xlZXAoNTAwMDAwKTsKKworICBBU1NFUlRfRVEoMSwgdGltZXJfY3JlYXRlX05VTExfc2lnbmFsX2hhbmRsZXJfaW52b2NhdGlvbl9jb3VudCk7Cit9CisKK1RFU1QodGltZSwgdGltZXJfY3JlYXRlX0VJTlZBTCkgeworICBjbG9ja2lkX3QgaW52YWxpZF9jbG9jayA9IDE2OworCisgIC8vIEEgU0lHRVZfU0lHTkFMIHRpbWVyIGlzIGVhc3k7IHRoZSBrZXJuZWwgZG9lcyBhbGwgdGhhdC4KKyAgdGltZXJfdCB0aW1lcl9pZDsKKyAgQVNTRVJUX0VRKC0xLCB0aW1lcl9jcmVhdGUoaW52YWxpZF9jbG9jaywgTlVMTCwgJnRpbWVyX2lkKSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKworICAvLyBBIFNJR0VWX1RIUkVBRCB0aW1lciBpcyBtb3JlIGludGVyZXN0aW5nIGJlY2F1c2Ugd2UgaGF2ZSBzdHVmZiB0byBjbGVhbiB1cC4KKyAgc2lnZXZlbnRfdCBzZTsKKyAgbWVtc2V0KCZzZSwgMCwgc2l6ZW9mKHNlKSk7CisgIHNlLnNpZ2V2X25vdGlmeSA9IFNJR0VWX1RIUkVBRDsKKyAgc2Uuc2lnZXZfbm90aWZ5X2Z1bmN0aW9uID0gTm9PcE5vdGlmeUZ1bmN0aW9uOworICBBU1NFUlRfRVEoLTEsIHRpbWVyX2NyZWF0ZShpbnZhbGlkX2Nsb2NrLCAmc2UsICZ0aW1lcl9pZCkpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7Cit9CisKK1RFU1QodGltZSwgdGltZXJfZGVsZXRlX211bHRpcGxlKSB7CisgIHRpbWVyX3QgdGltZXJfaWQ7CisgIEFTU0VSVF9FUSgwLCB0aW1lcl9jcmVhdGUoQ0xPQ0tfTU9OT1RPTklDLCBOVUxMLCAmdGltZXJfaWQpKTsKKyAgQVNTRVJUX0VRKDAsIHRpbWVyX2RlbGV0ZSh0aW1lcl9pZCkpOworICBBU1NFUlRfRVEoLTEsIHRpbWVyX2RlbGV0ZSh0aW1lcl9pZCkpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7CisKKyAgc2lnZXZlbnRfdCBzZTsKKyAgbWVtc2V0KCZzZSwgMCwgc2l6ZW9mKHNlKSk7CisgIHNlLnNpZ2V2X25vdGlmeSA9IFNJR0VWX1RIUkVBRDsKKyAgc2Uuc2lnZXZfbm90aWZ5X2Z1bmN0aW9uID0gTm9PcE5vdGlmeUZ1bmN0aW9uOworICBBU1NFUlRfRVEoMCwgdGltZXJfY3JlYXRlKENMT0NLX01PTk9UT05JQywgJnNlLCAmdGltZXJfaWQpKTsKKyAgQVNTRVJUX0VRKDAsIHRpbWVyX2RlbGV0ZSh0aW1lcl9pZCkpOworICBBU1NFUlRfRVEoLTEsIHRpbWVyX2RlbGV0ZSh0aW1lcl9pZCkpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7Cit9CisKK1RFU1QodGltZSwgdGltZXJfY3JlYXRlX211bHRpcGxlKSB7CisgIENvdW50ZXIgY291bnRlcjEoQ291bnRlcjo6Q291bnROb3RpZnlGdW5jdGlvbik7CisgIGNvdW50ZXIxLkNyZWF0ZSgpOworICBDb3VudGVyIGNvdW50ZXIyKENvdW50ZXI6OkNvdW50Tm90aWZ5RnVuY3Rpb24pOworICBjb3VudGVyMi5DcmVhdGUoKTsKKyAgQ291bnRlciBjb3VudGVyMyhDb3VudGVyOjpDb3VudE5vdGlmeUZ1bmN0aW9uKTsKKyAgY291bnRlcjMuQ3JlYXRlKCk7CisKKyAgQVNTRVJUX0VRKDAsIGNvdW50ZXIxLnZhbHVlKTsKKyAgQVNTRVJUX0VRKDAsIGNvdW50ZXIyLnZhbHVlKTsKKyAgQVNTRVJUX0VRKDAsIGNvdW50ZXIzLnZhbHVlKTsKKworICBTZXRUaW1lKGNvdW50ZXIyLnRpbWVyX2lkLCAwLCAxLCAwLCAwKTsKKyAgdXNsZWVwKDUwMDAwMCk7CisKKyAgRVhQRUNUX0VRKDAsIGNvdW50ZXIxLnZhbHVlKTsKKyAgRVhQRUNUX0VRKDEsIGNvdW50ZXIyLnZhbHVlKTsKKyAgRVhQRUNUX0VRKDAsIGNvdW50ZXIzLnZhbHVlKTsKK30KKworc3RydWN0IFRpbWVyRGVsZXRlRGF0YSB7CisgIHRpbWVyX3QgdGltZXJfaWQ7CisgIHB0aHJlYWRfdCB0aHJlYWRfaWQ7CisgIHZvbGF0aWxlIGJvb2wgY29tcGxldGU7Cit9OworCitzdGF0aWMgdm9pZCBUaW1lckRlbGV0ZUNhbGxiYWNrKHNpZ3ZhbF90IHZhbHVlKSB7CisgIFRpbWVyRGVsZXRlRGF0YSogdGRkID0gcmVpbnRlcnByZXRfY2FzdDxUaW1lckRlbGV0ZURhdGEqPih2YWx1ZS5zaXZhbF9wdHIpOworCisgIHRkZC0+dGhyZWFkX2lkID0gcHRocmVhZF9zZWxmKCk7CisgIHRpbWVyX2RlbGV0ZSh0ZGQtPnRpbWVyX2lkKTsKKyAgdGRkLT5jb21wbGV0ZSA9IHRydWU7Cit9CisKK1RFU1QodGltZSwgdGltZXJfZGVsZXRlX2Zyb21fdGltZXJfdGhyZWFkKSB7CisgIFRpbWVyRGVsZXRlRGF0YSB0ZGQ7CisgIHNpZ2V2ZW50X3Qgc2U7CisKKyAgbWVtc2V0KCZzZSwgMCwgc2l6ZW9mKHNlKSk7CisgIHNlLnNpZ2V2X25vdGlmeSA9IFNJR0VWX1RIUkVBRDsKKyAgc2Uuc2lnZXZfbm90aWZ5X2Z1bmN0aW9uID0gVGltZXJEZWxldGVDYWxsYmFjazsKKyAgc2Uuc2lnZXZfdmFsdWUuc2l2YWxfcHRyID0gJnRkZDsKKworICB0ZGQuY29tcGxldGUgPSBmYWxzZTsKKyAgQVNTRVJUX0VRKDAsIHRpbWVyX2NyZWF0ZShDTE9DS19SRUFMVElNRSwgJnNlLCAmdGRkLnRpbWVyX2lkKSk7CisKKyAgaXRpbWVyc3BlYyB0czsKKyAgdHMuaXRfdmFsdWUudHZfc2VjID0gMDsKKyAgdHMuaXRfdmFsdWUudHZfbnNlYyA9IDEwMDsKKyAgdHMuaXRfaW50ZXJ2YWwudHZfc2VjID0gMDsKKyAgdHMuaXRfaW50ZXJ2YWwudHZfbnNlYyA9IDA7CisgIEFTU0VSVF9FUSgwLCB0aW1lcl9zZXR0aW1lKHRkZC50aW1lcl9pZCwgVElNRVJfQUJTVElNRSwgJnRzLCBOVUxMKSk7CisKKyAgdGltZV90IGN1cl90aW1lID0gdGltZShOVUxMKTsKKyAgd2hpbGUgKCF0ZGQuY29tcGxldGUgJiYgKHRpbWUoTlVMTCkgLSBjdXJfdGltZSkgPCA1KTsKKyAgQVNTRVJUX1RSVUUodGRkLmNvbXBsZXRlKTsKKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgLy8gU2luY2UgYmlvbmljIHRpbWVycyBhcmUgaW1wbGVtZW50ZWQgYnkgY3JlYXRpbmcgYSB0aHJlYWQgdG8gaGFuZGxlIHRoZQorICAvLyBjYWxsYmFjaywgdmVyaWZ5IHRoYXQgdGhlIHRocmVhZCBhY3R1YWxseSBjb21wbGV0ZXMuCisgIGN1cl90aW1lID0gdGltZShOVUxMKTsKKyAgd2hpbGUgKHB0aHJlYWRfZGV0YWNoKHRkZC50aHJlYWRfaWQpICE9IEVTUkNIICYmICh0aW1lKE5VTEwpIC0gY3VyX3RpbWUpIDwgNSk7CisgIEFTU0VSVF9FUShFU1JDSCwgcHRocmVhZF9kZXRhY2godGRkLnRocmVhZF9pZCkpOworI2VuZGlmCit9CisKK1RFU1QodGltZSwgY2xvY2tfZ2V0dGltZSkgeworICAvLyBUcnkgdG8gZW5zdXJlIHRoYXQgb3VyIHZkc28gY2xvY2tfZ2V0dGltZSBpcyB3b3JraW5nLgorICB0aW1lc3BlYyB0czE7CisgIEFTU0VSVF9FUSgwLCBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRzMSkpOworICB0aW1lc3BlYyB0czI7CisgIEFTU0VSVF9FUSgwLCBzeXNjYWxsKF9fTlJfY2xvY2tfZ2V0dGltZSwgQ0xPQ0tfTU9OT1RPTklDLCAmdHMyKSk7CisKKyAgLy8gV2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3bz8KKyAgdHMyLnR2X3NlYyAtPSB0czEudHZfc2VjOworICB0czIudHZfbnNlYyAtPSB0czEudHZfbnNlYzsKKyAgaWYgKHRzMi50dl9uc2VjIDwgMCkgeworICAgIC0tdHMyLnR2X3NlYzsKKyAgICB0czIudHZfbnNlYyArPSAxMDAwMDAwMDAwOworICB9CisKKyAgLy8gU2hvdWxkIGJlIGxlc3MgdGhhbiAoYSB2ZXJ5IGdlbmVyb3VzLCB0byB0cnkgdG8gYXZvaWQgZmxha2luZXNzKSAxMDAwMDAwbnMuCisgIEFTU0VSVF9FUSgwLCB0czIudHZfc2VjKTsKKyAgQVNTRVJUX0xUKHRzMi50dl9uc2VjLCAxMDAwMDAwKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3VjaGFyX3Rlc3QuY3BwIGIvdGVzdHMvdWNoYXJfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNhM2M1ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VjaGFyX3Rlc3QuY3BwCkBAIC0wLDAgKzEsNDEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorI2RlZmluZSBIQVZFX1VDSEFSIDEKKyNlbGlmIGRlZmluZWQoX19HTElCQ19fKQorI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjZGVmaW5lIEhBVkVfVUNIQVIgX19HTElCQ19QUkVSRVEoMiwgMTYpCisjZW5kaWYKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWYgSEFWRV9VQ0hBUgorI2luY2x1ZGUgPHVjaGFyLmg+CisjZW5kaWYKKworVEVTVCh1Y2hhciwgc2l6ZW9mX3VjaGFyX3QpIHsKKyNpZiBIQVZFX1VDSEFSCisgIEVYUEVDVF9FUSgyVSwgc2l6ZW9mKGNoYXIxNl90KSk7CisgIEVYUEVDVF9FUSg0VSwgc2l6ZW9mKGNoYXIzMl90KSk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJ1Y2hhci5oIGlzIHVuYXZhaWxhYmxlLlxuIjsKKyNlbmRpZgorfQorCitURVNUKHVjaGFyLCBzdGFydF9zdGF0ZSkgeworI2lmIEhBVkVfVUNIQVIKKyAgY2hhciBvdXRbTUJfTEVOX01BWF07CisgIG1ic3RhdGVfdCBwczsKKworICAvLyBBbnkgbm9uLWluaXRpYWwgc3RhdGUgaXMgaW52YWxpZCB3aGVuIGNhbGxpbmcgYzMycnRvbWIuCisgIG1lbXNldCgmcHMsIDAsIHNpemVvZihwcykpOworICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvYzMyKE5VTEwsICJceGMyIiwgMSwgJnBzKSk7CisgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSwgYzMycnRvbWIob3V0LCAweDAwYTIsICZwcykpOworICBFWFBFQ1RfRVEoRUlMU0VRLCBlcnJubyk7CisKKyAgLy8gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGMzMnJ0b21iIGlzIE5VTEwgb3IgdGhlIHNlY29uZCBpcyBMJ1wwJyB0aGUgc2hpZnQKKyAgLy8gc3RhdGUgc2hvdWxkIGJlIHJlc2V0LgorICBtZW1zZXQoJnBzLCAwLCBzaXplb2YocHMpKTsKKyAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b2MzMihOVUxMLCAiXHhjMiIsIDEsICZwcykpOworICBFWFBFQ1RfRVEoMVUsIGMzMnJ0b21iKE5VTEwsIDB4MDBhMiwgJnBzKSk7CisgIEVYUEVDVF9UUlVFKG1ic2luaXQoJnBzKSk7CisKKyAgbWVtc2V0KCZwcywgMCwgc2l6ZW9mKHBzKSk7CisgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG9jMzIoTlVMTCwgIlx4ZjBceGE0IiwgMSwgJnBzKSk7CisgIEVYUEVDVF9FUSgxVSwgYzMycnRvbWIob3V0LCBMJ1wwJywgJnBzKSk7CisgIEVYUEVDVF9UUlVFKG1ic2luaXQoJnBzKSk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJ1Y2hhci5oIGlzIHVuYXZhaWxhYmxlLlxuIjsKKyNlbmRpZgorfQorCitURVNUKHVjaGFyLCBjMTZydG9tYl9udWxsX291dCkgeworI2lmIEhBVkVfVUNIQVIKKyAgRVhQRUNUX0VRKDFVLCBjMTZydG9tYihOVUxMLCBMJ1wwJywgTlVMTCkpOworICBFWFBFQ1RfRVEoMVUsIGMxNnJ0b21iKE5VTEwsIEwnaCcsIE5VTEwpKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgInVjaGFyLmggaXMgdW5hdmFpbGFibGUuXG4iOworI2VuZGlmCit9CisKK1RFU1QodWNoYXIsIGMxNnJ0b21iX251bGxfY2hhcikgeworI2lmIEhBVkVfVUNIQVIKKyAgY2hhciBieXRlc1tNQl9MRU5fTUFYXTsKKyAgRVhQRUNUX0VRKDFVLCBjMTZydG9tYihieXRlcywgTCdcMCcsIE5VTEwpKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgInVjaGFyLmggaXMgdW5hdmFpbGFibGUuXG4iOworI2VuZGlmCit9CisKK1RFU1QodWNoYXIsIGMxNnJ0b21iKSB7CisjaWYgSEFWRV9VQ0hBUgorICBjaGFyIGJ5dGVzW01CX0xFTl9NQVhdOworCisgIG1lbXNldChieXRlcywgMCwgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUSgxVSwgYzE2cnRvbWIoYnl0ZXMsIEwnaCcsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCdoJywgYnl0ZXNbMF0pOworCisgIEFTU0VSVF9TVFJFUSgiQy5VVEYtOCIsIHNldGxvY2FsZShMQ19DVFlQRSwgIkMuVVRGLTgiKSk7CisgIHVzZWxvY2FsZShMQ19HTE9CQUxfTE9DQUxFKTsKKworICAvLyAxLWJ5dGUgVVRGLTguCisgIG1lbXNldChieXRlcywgMCwgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUSgxVSwgYzE2cnRvbWIoYnl0ZXMsIEwnaCcsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCdoJywgYnl0ZXNbMF0pOworICAvLyAyLWJ5dGUgVVRGLTguCisgIG1lbXNldChieXRlcywgMCwgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUSgyVSwgYzE2cnRvbWIoYnl0ZXMsIDB4MDBhMiwgTlVMTCkpOworICBFWFBFQ1RfRVEoJ1x4YzInLCBieXRlc1swXSk7CisgIEVYUEVDVF9FUSgnXHhhMicsIGJ5dGVzWzFdKTsKKyAgLy8gMy1ieXRlIFVURi04LgorICBtZW1zZXQoYnl0ZXMsIDAsIHNpemVvZihieXRlcykpOworICBFWFBFQ1RfRVEoM1UsIGMxNnJ0b21iKGJ5dGVzLCAweDIwYWMsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCdceGUyJywgYnl0ZXNbMF0pOworICBFWFBFQ1RfRVEoJ1x4ODInLCBieXRlc1sxXSk7CisgIEVYUEVDVF9FUSgnXHhhYycsIGJ5dGVzWzJdKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgInVjaGFyLmggaXMgdW5hdmFpbGFibGUuXG4iOworI2VuZGlmCit9CisKK1RFU1QodWNoYXIsIGMxNnJ0b21iX3N1cnJvZ2F0ZSkgeworI2lmIEhBVkVfVUNIQVIKKyAgY2hhciBieXRlc1tNQl9MRU5fTUFYXTsKKworICBtZW1zZXQoYnl0ZXMsIDAsIHNpemVvZihieXRlcykpOworICBFWFBFQ1RfRVEoMFUsIGMxNnJ0b21iKGJ5dGVzLCAweGRiZWEsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKDRVLCBjMTZydG9tYihieXRlcywgMHhkZmNkLCBOVUxMKSk7CisgIEVYUEVDVF9FUSgnXHhmNCcsIGJ5dGVzWzBdKTsKKyAgRVhQRUNUX0VRKCdceDhhJywgYnl0ZXNbMV0pOworICBFWFBFQ1RfRVEoJ1x4YWYnLCBieXRlc1syXSk7CisgIEVYUEVDVF9FUSgnXHg4ZCcsIGJ5dGVzWzNdKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgInVjaGFyLmggaXMgdW5hdmFpbGFibGUuXG4iOworI2VuZGlmCit9CisKK1RFU1QodWNoYXIsIGMxNnJ0b21iX2ludmFsaWQpIHsKKyNpZiBIQVZFX1VDSEFSCisgIGNoYXIgYnl0ZXNbTUJfTEVOX01BWF07CisKKyAgbWVtc2V0KGJ5dGVzLCAwLCBzaXplb2YoYnl0ZXMpKTsKKyAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCBjMTZydG9tYihieXRlcywgMHhkZmNkLCBOVUxMKSk7CisKKyAgRVhQRUNUX0VRKDBVLCBjMTZydG9tYihieXRlcywgMHhkYmVhLCBOVUxMKSk7CisgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSwgYzE2cnRvbWIoYnl0ZXMsIDB4ZGJlYSwgTlVMTCkpOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAidWNoYXIuaCBpcyB1bmF2YWlsYWJsZS5cbiI7CisjZW5kaWYKK30KKworVEVTVCh1Y2hhciwgbWJydG9jMTZfbnVsbCkgeworI2lmIEhBVkVfVUNIQVIKKyAgQVNTRVJUX0VRKDBVLCBtYnJ0b2MxNihOVUxMLCBOVUxMLCAwLCBOVUxMKSk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJ1Y2hhci5oIGlzIHVuYXZhaWxhYmxlLlxuIjsKKyNlbmRpZgorfQorCitURVNUKHVjaGFyLCBtYnJ0b2MxNl96ZXJvX2xlbikgeworI2lmIEhBVkVfVUNIQVIKKyAgY2hhcjE2X3Qgb3V0OworCisgIG91dCA9IEwneCc7CisgIEFTU0VSVF9FUSgwVSwgbWJydG9jMTYoJm91dCwgImhlbGxvIiwgMCwgTlVMTCkpOworICBBU1NFUlRfRVEoTCd4Jywgb3V0KTsKKworICBBU1NFUlRfRVEoMFUsIG1icnRvYzE2KCZvdXQsICJoZWxsbyIsIDAsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKDBVLCBtYnJ0b2MxNigmb3V0LCAiIiwgMCwgTlVMTCkpOworICBBU1NFUlRfRVEoMVUsIG1icnRvYzE2KCZvdXQsICJoZWxsbyIsIDEsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKEwnaCcsIG91dCk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJ1Y2hhci5oIGlzIHVuYXZhaWxhYmxlLlxuIjsKKyNlbmRpZgorfQorCitURVNUKHVjaGFyLCBtYnJ0b2MxNikgeworI2lmIEhBVkVfVUNIQVIKKyAgY2hhcjE2X3Qgb3V0OworCisgIEFTU0VSVF9TVFJFUSgiQy5VVEYtOCIsIHNldGxvY2FsZShMQ19DVFlQRSwgIkMuVVRGLTgiKSk7CisgIHVzZWxvY2FsZShMQ19HTE9CQUxfTE9DQUxFKTsKKworICAvLyAxLWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUSgxVSwgbWJydG9jMTYoJm91dCwgImFiY2RlZiIsIDYsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKEwnYScsIG91dCk7CisgIC8vIDItYnl0ZSBVVEYtOC4KKyAgQVNTRVJUX0VRKDJVLCBtYnJ0b2MxNigmb3V0LCAiXHhjMlx4YTIiICJjZGVmIiwgNiwgTlVMTCkpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8Y2hhcjE2X3Q+KDB4MDBhMiksIG91dCk7CisgIC8vIDMtYnl0ZSBVVEYtOC4KKyAgQVNTRVJUX0VRKDNVLCBtYnJ0b2MxNigmb3V0LCAiXHhlMlx4ODJceGFjIiAiZGVmIiwgNiwgTlVMTCkpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8Y2hhcjE2X3Q+KDB4MjBhYyksIG91dCk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJ1Y2hhci5oIGlzIHVuYXZhaWxhYmxlLlxuIjsKKyNlbmRpZgorfQorCitURVNUKHVjaGFyLCBtYnJ0b2MxNl9zdXJyb2dhdGUpIHsKKyNpZiBIQVZFX1VDSEFSCisgIGNoYXIxNl90IG91dDsKKworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMyksCisgICAgICAgICAgICBtYnJ0b2MxNigmb3V0LCAiXHhmNFx4OGFceGFmXHg4ZCIsIDYsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PGNoYXIxNl90PigweGRiZWEpLCBvdXQpOworICBBU1NFUlRfRVEoNFUsIG1icnRvYzE2KCZvdXQsICJceGY0XHg4YVx4YWZceDhkIiAiZWYiLCA2LCBOVUxMKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxjaGFyMTZfdD4oMHhkZmNkKSwgb3V0KTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgInVjaGFyLmggaXMgdW5hdmFpbGFibGUuXG4iOworI2VuZGlmCit9CisKK1RFU1QodWNoYXIsIG1icnRvYzE2X3Jlc2VydmVkX3JhbmdlKSB7CisjaWYgSEFWRV9VQ0hBUgorICBjaGFyMTZfdCBvdXQ7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSwKKyAgICAgICAgICAgIG1icnRvYzE2KCZvdXQsICJceGYwXHg4MFx4YmZceGJmIiwgNiwgTlVMTCkpOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAidWNoYXIuaCBpcyB1bmF2YWlsYWJsZS5cbiI7CisjZW5kaWYKK30KKworVEVTVCh1Y2hhciwgbWJydG9jMTZfYmV5b25kX3JhbmdlKSB7CisjaWYgSEFWRV9VQ0hBUgorICBjaGFyMTZfdCBvdXQ7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSwKKyAgICAgICAgICAgIG1icnRvYzE2KCZvdXQsICJceGY1XHg4MFx4ODBceDgwIiwgNiwgTlVMTCkpOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAidWNoYXIuaCBpcyB1bmF2YWlsYWJsZS5cbiI7CisjZW5kaWYKK30KKworI2lmIEhBVkVfVUNIQVIKK3ZvaWQgdGVzdF9tYnJ0b2MxNl9pbmNvbXBsZXRlKG1ic3RhdGVfdCogcHMpIHsKKyAgQVNTRVJUX1NUUkVRKCJDLlVURi04Iiwgc2V0bG9jYWxlKExDX0NUWVBFLCAiQy5VVEYtOCIpKTsKKyAgdXNlbG9jYWxlKExDX0dMT0JBTF9MT0NBTEUpOworCisgIGNoYXIxNl90IG91dDsKKyAgLy8gMi1ieXRlIFVURi04LgorICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvYzE2KCZvdXQsICJceGMyIiwgMSwgcHMpKTsKKyAgQVNTRVJUX0VRKDFVLCBtYnJ0b2MxNigmb3V0LCAiXHhhMiIgImNkZWYiLCA1LCBwcykpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8Y2hhcjE2X3Q+KDB4MDBhMiksIG91dCk7CisgIEFTU0VSVF9UUlVFKG1ic2luaXQocHMpKTsKKyAgLy8gMy1ieXRlIFVURi04LgorICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvYzE2KCZvdXQsICJceGUyIiwgMSwgcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b2MxNigmb3V0LCAiXHg4MiIsIDEsIHBzKSk7CisgIEFTU0VSVF9FUSgxVSwgbWJydG9jMTYoJm91dCwgIlx4YWMiICJkZWYiLCA0LCBwcykpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8Y2hhcjE2X3Q+KDB4MjBhYyksIG91dCk7CisgIEFTU0VSVF9UUlVFKG1ic2luaXQocHMpKTsKKyAgLy8gNC1ieXRlIFVURi04LgorICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvYzE2KCZvdXQsICJceGY0IiwgMSwgcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b2MxNigmb3V0LCAiXHg4YVx4YWYiLCAyLCBwcykpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMyksIG1icnRvYzE2KCZvdXQsICJceDhkIiAiZWYiLCAzLCBwcykpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8Y2hhcjE2X3Q+KDB4ZGJlYSksIG91dCk7CisgIEFTU0VSVF9FUSgxVSwgbWJydG9jMTYoJm91dCwgIlx4ODAiICJlZiIsIDMsIHBzKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxjaGFyMTZfdD4oMHhkZmNkKSwgb3V0KTsKKyAgQVNTRVJUX1RSVUUobWJzaW5pdChwcykpOworCisgIC8vIEludmFsaWQgMi1ieXRlCisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG9jMTYoJm91dCwgIlx4YzIiLCAxLCBwcykpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksIG1icnRvYzE2KCZvdXQsICJceDIwIiAiY2RlZiIsIDUsIHBzKSk7CisgIEFTU0VSVF9FUShFSUxTRVEsIGVycm5vKTsKK30KKyNlbmRpZgorCitURVNUKHVjaGFyLCBtYnJ0b2MxNl9pbmNvbXBsZXRlKSB7CisjaWYgSEFWRV9VQ0hBUgorICBtYnN0YXRlX3QgcHM7CisgIG1lbXNldCgmcHMsIDAsIHNpemVvZihwcykpOworCisgIHRlc3RfbWJydG9jMTZfaW5jb21wbGV0ZSgmcHMpOworICB0ZXN0X21icnRvYzE2X2luY29tcGxldGUoTlVMTCk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJ1Y2hhci5oIGlzIHVuYXZhaWxhYmxlLlxuIjsKKyNlbmRpZgorfQorCitURVNUKHVjaGFyLCBjMzJydG9tYikgeworI2lmIEhBVkVfVUNIQVIKKyAgRVhQRUNUX0VRKDFVLCBjMzJydG9tYihOVUxMLCBMJ1wwJywgTlVMTCkpOworICBFWFBFQ1RfRVEoMVUsIGMzMnJ0b21iKE5VTEwsIEwnaCcsIE5VTEwpKTsKKworICBjaGFyIGJ5dGVzW01CX0xFTl9NQVhdOworCisgIEVYUEVDVF9FUSgxVSwgYzMycnRvbWIoYnl0ZXMsIEwnXDAnLCBOVUxMKSk7CisKKyAgbWVtc2V0KGJ5dGVzLCAwLCBzaXplb2YoYnl0ZXMpKTsKKyAgRVhQRUNUX0VRKDFVLCBjMzJydG9tYihieXRlcywgTCdoJywgTlVMTCkpOworICBFWFBFQ1RfRVEoJ2gnLCBieXRlc1swXSk7CisKKyAgQVNTRVJUX1NUUkVRKCJDLlVURi04Iiwgc2V0bG9jYWxlKExDX0NUWVBFLCAiQy5VVEYtOCIpKTsKKyAgdXNlbG9jYWxlKExDX0dMT0JBTF9MT0NBTEUpOworCisgIC8vIDEtYnl0ZSBVVEYtOC4KKyAgbWVtc2V0KGJ5dGVzLCAwLCBzaXplb2YoYnl0ZXMpKTsKKyAgRVhQRUNUX0VRKDFVLCBjMzJydG9tYihieXRlcywgTCdoJywgTlVMTCkpOworICBFWFBFQ1RfRVEoJ2gnLCBieXRlc1swXSk7CisgIC8vIDItYnl0ZSBVVEYtOC4KKyAgbWVtc2V0KGJ5dGVzLCAwLCBzaXplb2YoYnl0ZXMpKTsKKyAgRVhQRUNUX0VRKDJVLCBjMzJydG9tYihieXRlcywgMHgwMGEyLCBOVUxMKSk7CisgIEVYUEVDVF9FUSgnXHhjMicsIGJ5dGVzWzBdKTsKKyAgRVhQRUNUX0VRKCdceGEyJywgYnl0ZXNbMV0pOworICAvLyAzLWJ5dGUgVVRGLTguCisgIG1lbXNldChieXRlcywgMCwgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUSgzVSwgYzMycnRvbWIoYnl0ZXMsIDB4MjBhYywgTlVMTCkpOworICBFWFBFQ1RfRVEoJ1x4ZTInLCBieXRlc1swXSk7CisgIEVYUEVDVF9FUSgnXHg4MicsIGJ5dGVzWzFdKTsKKyAgRVhQRUNUX0VRKCdceGFjJywgYnl0ZXNbMl0pOworICAvLyA0LWJ5dGUgVVRGLTguCisgIG1lbXNldChieXRlcywgMCwgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUSg0VSwgYzMycnRvbWIoYnl0ZXMsIDB4MjRiNjIsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCdceGYwJywgYnl0ZXNbMF0pOworICBFWFBFQ1RfRVEoJ1x4YTQnLCBieXRlc1sxXSk7CisgIEVYUEVDVF9FUSgnXHhhZCcsIGJ5dGVzWzJdKTsKKyAgRVhQRUNUX0VRKCdceGEyJywgYnl0ZXNbM10pOworICAvLyBJbnZhbGlkIGNvZGUgcG9pbnQuCisgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSwgYzMycnRvbWIoYnl0ZXMsIDB4ZmZmZmZmZmYsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKEVJTFNFUSwgZXJybm8pOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAidWNoYXIuaCBpcyB1bmF2YWlsYWJsZS5cbiI7CisjZW5kaWYKK30KKworVEVTVCh1Y2hhciwgbWJydG9jMzIpIHsKKyNpZiBIQVZFX1VDSEFSCisgIGNoYXIzMl90IG91dFs4XTsKKworICBvdXRbMF0gPSBMJ3gnOworICBBU1NFUlRfRVEoMFUsIG1icnRvYzMyKG91dCwgImhlbGxvIiwgMCwgTlVMTCkpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8Y2hhcjMyX3Q+KEwneCcpLCBvdXRbMF0pOworCisgIEFTU0VSVF9FUSgwVSwgbWJydG9jMzIob3V0LCAiaGVsbG8iLCAwLCBOVUxMKSk7CisgIEFTU0VSVF9FUSgwVSwgbWJydG9jMzIob3V0LCAiIiwgMCwgTlVMTCkpOworICBBU1NFUlRfRVEoMVUsIG1icnRvYzMyKG91dCwgImhlbGxvIiwgMSwgTlVMTCkpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8Y2hhcjMyX3Q+KEwnaCcpLCBvdXRbMF0pOworCisgIEFTU0VSVF9FUSgwVSwgbWJydG9jMzIoTlVMTCwgImhlbGxvIiwgMCwgTlVMTCkpOworICBBU1NFUlRfRVEoMFUsIG1icnRvYzMyKE5VTEwsICIiLCAwLCBOVUxMKSk7CisgIEFTU0VSVF9FUSgxVSwgbWJydG9jMzIoTlVMTCwgImhlbGxvIiwgMSwgTlVMTCkpOworCisgIEFTU0VSVF9FUSgwVSwgbWJydG9jMzIoTlVMTCwgTlVMTCwgMCwgTlVMTCkpOworCisgIEFTU0VSVF9TVFJFUSgiQy5VVEYtOCIsIHNldGxvY2FsZShMQ19DVFlQRSwgIkMuVVRGLTgiKSk7CisgIHVzZWxvY2FsZShMQ19HTE9CQUxfTE9DQUxFKTsKKworICAvLyAxLWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUSgxVSwgbWJydG9jMzIob3V0LCAiYWJjZGVmIiwgNiwgTlVMTCkpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8Y2hhcjMyX3Q+KEwnYScpLCBvdXRbMF0pOworICAvLyAyLWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUSgyVSwgbWJydG9jMzIob3V0LCAiXHhjMlx4YTIiICJjZGVmIiwgNiwgTlVMTCkpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8Y2hhcjMyX3Q+KDB4MDBhMiksIG91dFswXSk7CisgIC8vIDMtYnl0ZSBVVEYtOC4KKyAgQVNTRVJUX0VRKDNVLCBtYnJ0b2MzMihvdXQsICJceGUyXHg4Mlx4YWMiICJkZWYiLCA2LCBOVUxMKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxjaGFyMzJfdD4oMHgyMGFjKSwgb3V0WzBdKTsKKyAgLy8gNC1ieXRlIFVURi04LgorICBBU1NFUlRfRVEoNFUsIG1icnRvYzMyKG91dCwgIlx4ZjBceGE0XHhhZFx4YTIiICJlZiIsIDYsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PGNoYXIzMl90PigweDI0YjYyKSwgb3V0WzBdKTsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pIC8vIGdsaWJjIGFsbG93cyB0aGlzLgorICAvLyBJbGxlZ2FsIDUtYnl0ZSBVVEYtOC4KKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCBtYnJ0b2MzMihvdXQsICJceGY4XHhhMVx4YTJceGEzXHhhNCIgImYiLCA2LCBOVUxMKSk7CisgIEFTU0VSVF9FUShFSUxTRVEsIGVycm5vKTsKKyNlbmRpZgorICAvLyBJbGxlZ2FsIG92ZXItbG9uZyBzZXF1ZW5jZS4KKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCBtYnJ0b2MzMihvdXQsICJceGYwXHg4Mlx4ODJceGFjIiAiZWYiLCA2LCBOVUxMKSk7CisgIEFTU0VSVF9FUShFSUxTRVEsIGVycm5vKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgInVjaGFyLmggaXMgdW5hdmFpbGFibGUuXG4iOworI2VuZGlmCit9CisKKyNpZiBIQVZFX1VDSEFSCit2b2lkIHRlc3RfbWJydG9jMzJfaW5jb21wbGV0ZShtYnN0YXRlX3QqIHBzKSB7CisgIEFTU0VSVF9TVFJFUSgiQy5VVEYtOCIsIHNldGxvY2FsZShMQ19DVFlQRSwgIkMuVVRGLTgiKSk7CisgIHVzZWxvY2FsZShMQ19HTE9CQUxfTE9DQUxFKTsKKworICBjaGFyMzJfdCBvdXQ7CisgIC8vIDItYnl0ZSBVVEYtOC4KKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b2MzMigmb3V0LCAiXHhjMiIsIDEsIHBzKSk7CisgIEFTU0VSVF9FUSgxVSwgbWJydG9jMzIoJm91dCwgIlx4YTIiICJjZGVmIiwgNSwgcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PGNoYXIzMl90PigweDAwYTIpLCBvdXQpOworICBBU1NFUlRfVFJVRShtYnNpbml0KHBzKSk7CisgIC8vIDMtYnl0ZSBVVEYtOC4KKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b2MzMigmb3V0LCAiXHhlMiIsIDEsIHBzKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG9jMzIoJm91dCwgIlx4ODIiLCAxLCBwcykpOworICBBU1NFUlRfRVEoMVUsIG1icnRvYzMyKCZvdXQsICJceGFjIiAiZGVmIiwgNCwgcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PGNoYXIzMl90PigweDIwYWMpLCBvdXQpOworICBBU1NFUlRfVFJVRShtYnNpbml0KHBzKSk7CisgIC8vIDQtYnl0ZSBVVEYtOC4KKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b2MzMigmb3V0LCAiXHhmMCIsIDEsIHBzKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG9jMzIoJm91dCwgIlx4YTRceGFkIiwgMiwgcHMpKTsKKyAgQVNTRVJUX0VRKDFVLCBtYnJ0b2MzMigmb3V0LCAiXHhhMiIgImVmIiwgMywgcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PGNoYXIzMl90PigweDI0YjYyKSwgb3V0KTsKKyAgQVNTRVJUX1RSVUUobWJzaW5pdChwcykpOworCisgIC8vIEludmFsaWQgMi1ieXRlCisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG9jMzIoJm91dCwgIlx4YzIiLCAxLCBwcykpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksIG1icnRvYzMyKCZvdXQsICJceDIwIiAiY2RlZiIsIDUsIHBzKSk7CisgIEFTU0VSVF9FUShFSUxTRVEsIGVycm5vKTsKK30KKyNlbmRpZgorCitURVNUKHVjaGFyLCBtYnJ0b2MzMl9pbmNvbXBsZXRlKSB7CisjaWYgSEFWRV9VQ0hBUgorICBtYnN0YXRlX3QgcHM7CisgIG1lbXNldCgmcHMsIDAsIHNpemVvZihwcykpOworCisgIHRlc3RfbWJydG9jMzJfaW5jb21wbGV0ZSgmcHMpOworICB0ZXN0X21icnRvYzMyX2luY29tcGxldGUoTlVMTCk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJ1Y2hhci5oIGlzIHVuYXZhaWxhYmxlLlxuIjsKKyNlbmRpZgorfQorCmRpZmYgLS1naXQgYS90ZXN0cy91bmlzdGRfdGVzdC5jcHAgYi90ZXN0cy91bmlzdGRfdGVzdC5jcHAKaW5kZXggMjMwOGFkOS4uODE5NWVhOCAxMDA2NDQKLS0tIGEvdGVzdHMvdW5pc3RkX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL3VuaXN0ZF90ZXN0LmNwcApAQCAtMTgsMjEgKzE4LDEyMyBAQAogI2luY2x1ZGUgIlNjb3BlZFNpZ25hbEhhbmRsZXIuaCIKICNpbmNsdWRlICJUZW1wb3JhcnlGaWxlLmgiCiAKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgogCiBURVNUKHVuaXN0ZCwgc3lzY29uZl9TQ19NT05PVE9OSUNfQ0xPQ0spIHsKICAgQVNTRVJUX0dUKHN5c2NvbmYoX1NDX01PTk9UT05JQ19DTE9DSyksIDApOwogfQogCi1URVNUKHVuaXN0ZCwgc2JyaykgewotICB2b2lkKiBpbml0aWFsX2JyZWFrID0gc2JyaygwKTsKK3N0YXRpYyB2b2lkKiBnZXRfYnJrKCkgeworICByZXR1cm4gc2JyaygwKTsKK30KIAotICB2b2lkKiBuZXdfYnJlYWsgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5pdGlhbF9icmVhaykgKyAyMDAwKTsKK3N0YXRpYyB2b2lkKiBwYWdlX2FsaWduKHVpbnRwdHJfdCBhZGRyKSB7CisgIHVpbnRwdHJfdCBtYXNrID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKSAtIDE7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPigoYWRkciArIG1hc2spICYgfm1hc2spOworfQorCitURVNUKHVuaXN0ZCwgYnJrKSB7CisgIHZvaWQqIGluaXRpYWxfYnJlYWsgPSBnZXRfYnJrKCk7CisKKyAgLy8gVGhlIGtlcm5lbCBhbGlnbnMgdGhlIGJyZWFrIHRvIGEgcGFnZS4KKyAgdm9pZCogbmV3X2JyZWFrID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluaXRpYWxfYnJlYWspICsgMSk7CiAgIEFTU0VSVF9FUSgwLCBicmsobmV3X2JyZWFrKSk7CisgIEFTU0VSVF9HRShnZXRfYnJrKCksIG5ld19icmVhayk7CiAKLSAgdm9pZCogZmluYWxfYnJlYWsgPSBzYnJrKDApOwotICBBU1NFUlRfRVEoZmluYWxfYnJlYWssIG5ld19icmVhayk7CisgIG5ld19icmVhayA9IHBhZ2VfYWxpZ24ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluaXRpYWxfYnJlYWspICsgc3lzY29uZihfU0NfUEFHRV9TSVpFKSk7CisgIEFTU0VSVF9FUSgwLCBicmsobmV3X2JyZWFrKSk7CisgIEFTU0VSVF9FUShnZXRfYnJrKCksIG5ld19icmVhayk7Cit9CisKK1RFU1QodW5pc3RkLCBicmtfRU5PTUVNKSB7CisgIEFTU0VSVF9FUSgtMSwgYnJrKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOworICBBU1NFUlRfRVEoRU5PTUVNLCBlcnJubyk7Cit9CisKKyNpZiBkZWZpbmVkKF9fR0xJQkNfXykKKyNkZWZpbmUgU0JSS19NSU4gSU5UUFRSX01JTgorI2RlZmluZSBTQlJLX01BWCBJTlRQVFJfTUFYCisjZWxzZQorI2RlZmluZSBTQlJLX01JTiBQVFJESUZGX01JTgorI2RlZmluZSBTQlJLX01BWCBQVFJESUZGX01BWAorI2VuZGlmCisKK1RFU1QodW5pc3RkLCBzYnJrX0VOT01FTSkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykgJiYgIWRlZmluZWQoX19MUDY0X18pCisgIC8vIFRoZXJlIGlzIG5vIHdheSB0byBndWFyYW50ZWUgdGhhdCBhbGwgb3ZlcmZsb3cgY29uZGl0aW9ucyBjYW4gYmUgdGVzdGVkCisgIC8vIHdpdGhvdXQgbWFuaXB1bGF0aW5nIHRoZSB1bmRlcmx5aW5nIHZhbHVlcyBvZiB0aGUgY3VycmVudCBicmVhay4KKyAgZXh0ZXJuIHZvaWQqIF9fYmlvbmljX2JyazsKKworICBjbGFzcyBTY29wZWRCcmsgeworICBwdWJsaWM6CisgICAgU2NvcGVkQnJrKCkgOiBzYXZlZF9icmtfKF9fYmlvbmljX2Jyaykge30KKyAgICB2aXJ0dWFsIH5TY29wZWRCcmsoKSB7IF9fYmlvbmljX2JyayA9IHNhdmVkX2Jya187IH0KKworICBwcml2YXRlOgorICAgIHZvaWQqIHNhdmVkX2Jya187CisgIH07CisKKyAgU2NvcGVkQnJrIHNjb3BlX2JyazsKKworICAvLyBTZXQgdGhlIGN1cnJlbnQgYnJlYWsgdG8gYSBwb2ludCB0aGF0IHdpbGwgY2F1c2UgYW4gb3ZlcmZsb3cuCisgIF9fYmlvbmljX2JyayA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oUFRSRElGRl9NQVgpICsgMik7CisKKyAgLy8gQ2FuJ3QgaW5jcmVhc2UgYnkgc28gbXVjaCB0aGF0IHdlJ2Qgb3ZlcmZsb3cuCisgIEFTU0VSVF9FUShyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSksIHNicmsoUFRSRElGRl9NQVgpKTsKKyAgQVNTRVJUX0VRKEVOT01FTSwgZXJybm8pOworCisgIC8vIFNldCB0aGUgY3VycmVudCBicmVhayB0byBhIHBvaW50IHRoYXQgd2lsbCBjYXVzZSBhbiBvdmVyZmxvdy4KKyAgX19iaW9uaWNfYnJrID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihQVFJESUZGX01BWCkpOworCisgIEFTU0VSVF9FUShyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSksIHNicmsoUFRSRElGRl9NSU4pKTsKKyAgQVNTRVJUX0VRKEVOT01FTSwgZXJybm8pOworCisgIF9fYmlvbmljX2JyayA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oUFRSRElGRl9NQVgpIC0gMSk7CisKKyAgQVNTRVJUX0VRKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSwgc2JyayhQVFJESUZGX01JTiArIDEpKTsKKyAgQVNTRVJUX0VRKEVOT01FTSwgZXJybm8pOworI2Vsc2UKKyAgY2xhc3MgU2NvcGVkQnJrIHsKKyAgcHVibGljOgorICAgIFNjb3BlZEJyaygpIDogc2F2ZWRfYnJrXyhnZXRfYnJrKCkpIHt9CisgICAgdmlydHVhbCB+U2NvcGVkQnJrKCkgeyBicmsoc2F2ZWRfYnJrXyk7IH0KKworICBwcml2YXRlOgorICAgIHZvaWQqIHNhdmVkX2Jya187CisgIH07CisKKyAgU2NvcGVkQnJrIHNjb3BlX2JyazsKKworICB1aW50cHRyX3QgY3VyX2JyayA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihnZXRfYnJrKCkpOworICBpZiAoY3VyX2JyayA8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oLShTQlJLX01JTisxKSkpIHsKKyAgICAvLyBEbyB0aGUgb3ZlcmZsb3cgdGVzdCBmb3IgYSBtYXggbmVnYXRpdmUgaW5jcmVtZW50LgorICAgIEFTU0VSVF9FUShyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSksIHNicmsoU0JSS19NSU4pKTsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgICAgLy8gR0xJQkMgZG9lcyBub3Qgc2V0IGVycm5vIGluIG92ZXJmbG93IGNhc2UuCisgICAgQVNTRVJUX0VRKEVOT01FTSwgZXJybm8pOworI2VuZGlmCisgIH0KKworICB1aW50cHRyX3Qgb3ZlcmZsb3dfYnJrID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihTQlJLX01BWCkgKyAyOworICBpZiAoY3VyX2JyayA8IG92ZXJmbG93X2JyaykgeworICAgIC8vIFRyeSBhbmQgbW92ZSB0aGUgdmFsdWUgdG8gUFRSRElGRl9NQVggKyAyLgorICAgIGN1cl9icmsgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc2JyayhvdmVyZmxvd19icmspKTsKKyAgfQorICBpZiAoY3VyX2JyayA+PSBvdmVyZmxvd19icmspIHsKKyAgICBBU1NFUlRfRVEocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpLCBzYnJrKFNCUktfTUFYKSk7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICAgIC8vIEdMSUJDIGRvZXMgbm90IHNldCBlcnJubyBpbiBvdmVyZmxvdyBjYXNlLgorICAgIEFTU0VSVF9FUShFTk9NRU0sIGVycm5vKTsKKyNlbmRpZgorICB9CisjZW5kaWYKIH0KIAogVEVTVCh1bmlzdGQsIHRydW5jYXRlKSB7CkBAIC03NSwxNiArMTc3LDI4OCBAQAogICBBU1NFUlRfRVEoMTIzLCBzYi5zdF9zaXplKTsKIH0KIAotc3RhdGljIGJvb2wgZ1BhdXNlVGVzdEZsYWcgPSBmYWxzZTsKK3N0YXRpYyBib29sIGdfcGF1c2VfdGVzdF9mbGFnID0gZmFsc2U7CiBzdGF0aWMgdm9pZCBQYXVzZVRlc3RTaWduYWxIYW5kbGVyKGludCkgewotICBnUGF1c2VUZXN0RmxhZyA9IHRydWU7CisgIGdfcGF1c2VfdGVzdF9mbGFnID0gdHJ1ZTsKIH0KIAogVEVTVCh1bmlzdGQsIHBhdXNlKSB7CiAgIFNjb3BlZFNpZ25hbEhhbmRsZXIgaGFuZGxlcihTSUdBTFJNLCBQYXVzZVRlc3RTaWduYWxIYW5kbGVyKTsKIAogICBhbGFybSgxKTsKLSAgQVNTRVJUX0ZBTFNFKGdQYXVzZVRlc3RGbGFnKTsKKyAgQVNTRVJUX0ZBTFNFKGdfcGF1c2VfdGVzdF9mbGFnKTsKICAgQVNTRVJUX0VRKC0xLCBwYXVzZSgpKTsKLSAgQVNTRVJUX1RSVUUoZ1BhdXNlVGVzdEZsYWcpOworICBBU1NFUlRfVFJVRShnX3BhdXNlX3Rlc3RfZmxhZyk7Cit9CisKK1RFU1QodW5pc3RkLCByZWFkKSB7CisgIGludCBmZCA9IG9wZW4oIi9wcm9jL3ZlcnNpb24iLCBPX1JET05MWSk7CisgIEFTU0VSVF9UUlVFKGZkICE9IC0xKTsKKworICBjaGFyIGJ1Zls1XTsKKyAgQVNTRVJUX0VRKDUsIHJlYWQoZmQsIGJ1ZiwgNSkpOworICBBU1NFUlRfRVEoYnVmWzBdLCAnTCcpOworICBBU1NFUlRfRVEoYnVmWzFdLCAnaScpOworICBBU1NFUlRfRVEoYnVmWzJdLCAnbicpOworICBBU1NFUlRfRVEoYnVmWzNdLCAndScpOworICBBU1NFUlRfRVEoYnVmWzRdLCAneCcpOworICBjbG9zZShmZCk7Cit9CisKK1RFU1QodW5pc3RkLCByZWFkX0VCQURGKSB7CisgIC8vIHJlYWQgcmV0dXJucyBzc2l6ZV90IHdoaWNoIGlzIDY0LWJpdHMgb24gTFA2NCwgc28gaXQncyB3b3J0aCBleHBsaWNpdGx5IGNoZWNraW5nIHRoYXQKKyAgLy8gb3VyIHN5c2NhbGwgc3R1YnMgY29ycmVjdGx5IHJldHVybiBhIDY0LWJpdCAtMS4KKyAgY2hhciBidWZbMV07CisgIEFTU0VSVF9FUSgtMSwgcmVhZCgtMSwgYnVmLCBzaXplb2YoYnVmKSkpOworICBBU1NFUlRfRVEoRUJBREYsIGVycm5vKTsKK30KKworVEVTVCh1bmlzdGQsIHN5c2NhbGxfbG9uZykgeworICAvLyBDaGVjayB0aGF0IHN5c2NhbGwoMykgY29ycmVjdGx5IHJldHVybnMgbG9uZyByZXN1bHRzLgorICAvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2RldGFpbD9pZD03Mzk1MgorICAvLyBXZSBhc3N1bWUgdGhhdCB0aGUgYnJlYWsgaXMgPiA0R2lCLCBidXQgdGhpcyBpcyBwb3RlbnRpYWxseSBmbGFreS4KKyAgdWludHB0cl90IHAgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc2JyaygwKSk7CisgIEFTU0VSVF9FUShwLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHN5c2NhbGwoX19OUl9icmssIDApKSk7Cit9CisKK1RFU1QodW5pc3RkLCBhbGFybSkgeworICBBU1NFUlRfRVEoMFUsIGFsYXJtKDApKTsKK30KKworVEVTVCh1bmlzdGQsIF9leGl0KSB7CisgIGludCBwaWQgPSBmb3JrKCk7CisgIEFTU0VSVF9ORSgtMSwgcGlkKSA8PCBzdHJlcnJvcihlcnJubyk7CisKKyAgaWYgKHBpZCA9PSAwKSB7CisgICAgX2V4aXQoOTkpOworICB9CisKKyAgaW50IHN0YXR1czsKKyAgQVNTRVJUX0VRKHBpZCwgd2FpdHBpZChwaWQsICZzdGF0dXMsIDApKTsKKyAgQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cykpOworICBBU1NFUlRfRVEoOTksIFdFWElUU1RBVFVTKHN0YXR1cykpOworfQorCitURVNUKHVuaXN0ZCwgZ2V0ZW52X3Vuc2V0ZW52KSB7CisgIEFTU0VSVF9FUSgwLCBzZXRlbnYoInRlc3QtdmFyaWFibGUiLCAiaGVsbG8iLCAxKSk7CisgIEFTU0VSVF9TVFJFUSgiaGVsbG8iLCBnZXRlbnYoInRlc3QtdmFyaWFibGUiKSk7CisgIEFTU0VSVF9FUSgwLCB1bnNldGVudigidGVzdC12YXJpYWJsZSIpKTsKKyAgQVNTRVJUX1RSVUUoZ2V0ZW52KCJ0ZXN0LXZhcmlhYmxlIikgPT0gTlVMTCk7Cit9CisKK1RFU1QodW5pc3RkLCB1bnNldGVudl9FSU5WQUwpIHsKKyAgRVhQRUNUX0VRKC0xLCB1bnNldGVudihOVUxMKSk7CisgIEVYUEVDVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgRVhQRUNUX0VRKC0xLCB1bnNldGVudigiIikpOworICBFWFBFQ1RfRVEoRUlOVkFMLCBlcnJubyk7CisgIEVYUEVDVF9FUSgtMSwgdW5zZXRlbnYoImE9YiIpKTsKKyAgRVhQRUNUX0VRKEVJTlZBTCwgZXJybm8pOworfQorCitURVNUKHVuaXN0ZCwgc2V0ZW52X0VJTlZBTCkgeworICBFWFBFQ1RfRVEoLTEsIHNldGVudihOVUxMLCAidmFsdWUiLCAwKSk7CisgIEVYUEVDVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgRVhQRUNUX0VRKC0xLCBzZXRlbnYoTlVMTCwgInZhbHVlIiwgMSkpOworICBFWFBFQ1RfRVEoRUlOVkFMLCBlcnJubyk7CisgIEVYUEVDVF9FUSgtMSwgc2V0ZW52KCIiLCAidmFsdWUiLCAwKSk7CisgIEVYUEVDVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgRVhQRUNUX0VRKC0xLCBzZXRlbnYoIiIsICJ2YWx1ZSIsIDEpKTsKKyAgRVhQRUNUX0VRKEVJTlZBTCwgZXJybm8pOworICBFWFBFQ1RfRVEoLTEsIHNldGVudigiYT1iIiwgInZhbHVlIiwgMCkpOworICBFWFBFQ1RfRVEoRUlOVkFMLCBlcnJubyk7CisgIEVYUEVDVF9FUSgtMSwgc2V0ZW52KCJhPWIiLCAidmFsdWUiLCAxKSk7CisgIEVYUEVDVF9FUShFSU5WQUwsIGVycm5vKTsKK30KKworVEVTVCh1bmlzdGQsIHNldGVudikgeworICBBU1NFUlRfRVEoMCwgdW5zZXRlbnYoInRlc3QtdmFyaWFibGUiKSk7CisKKyAgY2hhciBhW10gPSAiYSI7CisgIGNoYXIgYltdID0gImIiOworICBjaGFyIGNbXSA9ICJjIjsKKworICAvLyBOZXcgdmFsdWUuCisgIEVYUEVDVF9FUSgwLCBzZXRlbnYoInRlc3QtdmFyaWFibGUiLCBhLCAwKSk7CisgIEVYUEVDVF9TVFJFUShhLCBnZXRlbnYoInRlc3QtdmFyaWFibGUiKSk7CisKKyAgLy8gRXhpc3RpbmcgdmFsdWUsIG5vIG92ZXJ3cml0ZS4KKyAgRVhQRUNUX0VRKDAsIHNldGVudigidGVzdC12YXJpYWJsZSIsIGIsIDApKTsKKyAgRVhQRUNUX1NUUkVRKGEsIGdldGVudigidGVzdC12YXJpYWJsZSIpKTsKKworICAvLyBFeGlzdGluZyB2YWx1ZSwgb3ZlcndyaXRlLgorICBFWFBFQ1RfRVEoMCwgc2V0ZW52KCJ0ZXN0LXZhcmlhYmxlIiwgYywgMSkpOworICBFWFBFQ1RfU1RSRVEoYywgZ2V0ZW52KCJ0ZXN0LXZhcmlhYmxlIikpOworICAvLyBCdXQgdGhlIGFycmF5cyBiYWNraW5nIHRoZSB2YWx1ZXMgYXJlIHVuY2hhbmdlZC4KKyAgRVhQRUNUX0VRKCdhJywgYVswXSk7CisgIEVYUEVDVF9FUSgnYicsIGJbMF0pOworICBFWFBFQ1RfRVEoJ2MnLCBjWzBdKTsKKworICBBU1NFUlRfRVEoMCwgdW5zZXRlbnYoInRlc3QtdmFyaWFibGUiKSk7Cit9CisKK1RFU1QodW5pc3RkLCBwdXRlbnYpIHsKKyAgQVNTRVJUX0VRKDAsIHVuc2V0ZW52KCJhIikpOworCisgIGNoYXIqIHMxID0gc3RyZHVwKCJhPWIiKTsKKyAgQVNTRVJUX0VRKDAsIHB1dGVudihzMSkpOworCisgIEFTU0VSVF9TVFJFUSgiYiIsIGdldGVudigiYSIpKTsKKyAgczFbMl0gPSAnYyc7CisgIEFTU0VSVF9TVFJFUSgiYyIsIGdldGVudigiYSIpKTsKKworICBjaGFyKiBzMiA9IHN0cmR1cCgiYT1iIik7CisgIEFTU0VSVF9FUSgwLCBwdXRlbnYoczIpKTsKKworICBBU1NFUlRfU1RSRVEoImIiLCBnZXRlbnYoImEiKSk7CisgIEFTU0VSVF9FUSgnYycsIHMxWzJdKTsKKworICBBU1NFUlRfRVEoMCwgdW5zZXRlbnYoImEiKSk7CisgIGZyZWUoczEpOworICBmcmVlKHMyKTsKK30KKworVEVTVCh1bmlzdGQsIGNsZWFyZW52KSB7CisgIGV4dGVybiBjaGFyKiogZW52aXJvbjsKKworICAvLyBHdWFyYW50ZWUgdGhhdCBlbnZpcm9uIGlzIG5vdCBpbml0aWFsbHkgZW1wdHkuLi4KKyAgQVNTRVJUX0VRKDAsIHNldGVudigidGVzdC12YXJpYWJsZSIsICJhIiwgMSkpOworCisgIC8vIFN0YXNoIGEgY29weS4KKyAgc3RkOjp2ZWN0b3I8Y2hhcio+IG9sZF9lbnZpcm9uOworICBmb3IgKHNpemVfdCBpID0gMDsgZW52aXJvbltpXSAhPSBOVUxMOyArK2kpIHsKKyAgICBvbGRfZW52aXJvbi5wdXNoX2JhY2soc3RyZHVwKGVudmlyb25baV0pKTsKKyAgfQorCisgIEFTU0VSVF9FUSgwLCBjbGVhcmVudigpKTsKKworICBFWFBFQ1RfVFJVRShlbnZpcm9uID09IE5VTEwgfHwgZW52aXJvblswXSA9PSBOVUxMKTsKKyAgRVhQRUNUX0VRKE5VTEwsIGdldGVudigidGVzdC12YXJpYWJsZSIpKTsKKyAgRVhQRUNUX0VRKDAsIHNldGVudigidGVzdC12YXJpYWJsZSIsICJwb3N0LWNsZWFyIiwgMSkpOworICBFWFBFQ1RfU1RSRVEoInBvc3QtY2xlYXIiLCBnZXRlbnYoInRlc3QtdmFyaWFibGUiKSk7CisKKyAgLy8gUHV0IHRoZSBvbGQgZW52aXJvbm1lbnQgYmFjay4KKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbGRfZW52aXJvbi5zaXplKCk7ICsraSkgeworICAgIEVYUEVDVF9FUSgwLCBwdXRlbnYob2xkX2Vudmlyb25baV0pKTsKKyAgfQorCisgIC8vIENoZWNrIGl0IHdhc24ndCBvdmVyd3JpdHRlbi4KKyAgRVhQRUNUX1NUUkVRKCJhIiwgZ2V0ZW52KCJ0ZXN0LXZhcmlhYmxlIikpOworCisgIEVYUEVDVF9FUSgwLCB1bnNldGVudigidGVzdC12YXJpYWJsZSIpKTsKK30KKworc3RhdGljIHZvaWQgVGVzdEZzeW5jRnVuY3Rpb24oaW50ICgqZm4pKGludCkpIHsKKyAgaW50IGZkOworCisgIC8vIENhbid0IHN5bmMgYW4gaW52YWxpZCBmZC4KKyAgZXJybm8gPSAwOworICBFWFBFQ1RfRVEoLTEsIGZuKC0xKSk7CisgIEVYUEVDVF9FUShFQkFERiwgZXJybm8pOworCisgIC8vIEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXRoZXIgeW91J3ZlIG9wZW5lZCBhIGZpbGUgZm9yIHdyaXRlIG9yIG5vdC4KKyAgVGVtcG9yYXJ5RmlsZSB0ZjsKKyAgQVNTRVJUX05FKC0xLCB0Zi5mZCk7CisKKyAgRVhQRUNUX0VRKDAsIGZuKHRmLmZkKSk7CisKKyAgQVNTRVJUX05FKC0xLCBmZCA9IG9wZW4odGYuZmlsZW5hbWUsIE9fUkRPTkxZKSk7CisgIEVYUEVDVF9FUSgwLCBmbihmZCkpOworICBjbG9zZShmZCk7CisKKyAgQVNTRVJUX05FKC0xLCBmZCA9IG9wZW4odGYuZmlsZW5hbWUsIE9fUkRXUikpOworICBFWFBFQ1RfRVEoMCwgZm4oZmQpKTsKKyAgY2xvc2UoZmQpOworCisgIC8vIFRoZSBmZCBjYW4gZXZlbiBiZSBhIGRpcmVjdG9yeS4KKyAgQVNTRVJUX05FKC0xLCBmZCA9IG9wZW4oIi8iLCBPX1JET05MWSkpOworICBFWFBFQ1RfRVEoMCwgZm4oZmQpKTsKKyAgY2xvc2UoZmQpOworCisgIC8vIEJ1dCBzb21lIGZpbGUgc3lzdGVtcyBtYXkgY2hvb3NlIHRvIGJlIGZ1c3N5Li4uCisgIGVycm5vID0gMDsKKyAgQVNTRVJUX05FKC0xLCBmZCA9IG9wZW4oIi9wcm9jL3ZlcnNpb24iLCBPX1JET05MWSkpOworICBFWFBFQ1RfRVEoLTEsIGZuKGZkKSk7CisgIEVYUEVDVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgY2xvc2UoZmQpOworfQorCitURVNUKHVuaXN0ZCwgZmRhdGFzeW5jKSB7CisgIFRlc3RGc3luY0Z1bmN0aW9uKGZkYXRhc3luYyk7Cit9CisKK1RFU1QodW5pc3RkLCBmc3luYykgeworICBUZXN0RnN5bmNGdW5jdGlvbihmc3luYyk7Cit9CisKK3N0YXRpYyB2b2lkIEFzc2VydEdldFBpZENvcnJlY3QoKSB7CisgIC8vIFRoZSBsb29wIGlzIGp1c3QgdG8gbWFrZSBtYW51YWwgdGVzdGluZy9kZWJ1Z2dpbmcgd2l0aCBzdHJhY2UgZWFzaWVyLgorICBwaWRfdCBnZXRwaWRfc3lzY2FsbF9yZXN1bHQgPSBzeXNjYWxsKF9fTlJfZ2V0cGlkKTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMjg7ICsraSkgeworICAgIEFTU0VSVF9FUShnZXRwaWRfc3lzY2FsbF9yZXN1bHQsIGdldHBpZCgpKTsKKyAgfQorfQorCitURVNUKHVuaXN0ZCwgZ2V0cGlkX2NhY2hpbmdfYW5kX2ZvcmspIHsKKyAgcGlkX3QgcGFyZW50X3BpZCA9IGdldHBpZCgpOworICBBU1NFUlRfRVEoc3lzY2FsbChfX05SX2dldHBpZCksIHBhcmVudF9waWQpOworCisgIHBpZF90IGZvcmtfcmVzdWx0ID0gZm9yaygpOworICBBU1NFUlRfTkUoZm9ya19yZXN1bHQsIC0xKTsKKyAgaWYgKGZvcmtfcmVzdWx0ID09IDApIHsKKyAgICAvLyBXZSdyZSB0aGUgY2hpbGQuCisgICAgQXNzZXJ0R2V0UGlkQ29ycmVjdCgpOworICAgIEFTU0VSVF9FUShwYXJlbnRfcGlkLCBnZXRwcGlkKCkpOworICAgIF9leGl0KDEyMyk7CisgIH0gZWxzZSB7CisgICAgLy8gV2UncmUgdGhlIHBhcmVudC4KKyAgICBBU1NFUlRfRVEocGFyZW50X3BpZCwgZ2V0cGlkKCkpOworCisgICAgaW50IHN0YXR1czsKKyAgICBBU1NFUlRfRVEoZm9ya19yZXN1bHQsIHdhaXRwaWQoZm9ya19yZXN1bHQsICZzdGF0dXMsIDApKTsKKyAgICBBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7CisgICAgQVNTRVJUX0VRKDEyMywgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CisgIH0KK30KKworc3RhdGljIGludCBHZXRQaWRDYWNoaW5nQ2xvbmVTdGFydFJvdXRpbmUodm9pZCopIHsKKyAgQXNzZXJ0R2V0UGlkQ29ycmVjdCgpOworICByZXR1cm4gMTIzOworfQorCitURVNUKHVuaXN0ZCwgZ2V0cGlkX2NhY2hpbmdfYW5kX2Nsb25lKSB7CisgIHBpZF90IHBhcmVudF9waWQgPSBnZXRwaWQoKTsKKyAgQVNTRVJUX0VRKHN5c2NhbGwoX19OUl9nZXRwaWQpLCBwYXJlbnRfcGlkKTsKKworICB2b2lkKiBjaGlsZF9zdGFja1sxMDI0XTsKKyAgaW50IGNsb25lX3Jlc3VsdCA9IGNsb25lKEdldFBpZENhY2hpbmdDbG9uZVN0YXJ0Um91dGluZSwgJmNoaWxkX3N0YWNrWzEwMjRdLCBDTE9ORV9ORVdOUyB8IFNJR0NITEQsIE5VTEwpOworICBpZiAoY2xvbmVfcmVzdWx0ID09IC0xICYmIGVycm5vID09IEVQRVJNICYmIGdldHVpZCgpICE9IDApIHsKKyAgICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3Qgb25seSB3b3JrcyBpZiB5b3UgaGF2ZSBwZXJtaXNzaW9uIHRvIENMT05FX05FV05TOyB0cnkgcnVubmluZyBhcyByb290LlxuIjsKKyAgICByZXR1cm47CisgIH0KKyAgQVNTRVJUX05FKGNsb25lX3Jlc3VsdCwgLTEpOworCisgIEFTU0VSVF9FUShwYXJlbnRfcGlkLCBnZXRwaWQoKSk7CisKKyAgaW50IHN0YXR1czsKKyAgQVNTRVJUX0VRKGNsb25lX3Jlc3VsdCwgd2FpdHBpZChjbG9uZV9yZXN1bHQsICZzdGF0dXMsIDApKTsKKyAgQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cykpOworICBBU1NFUlRfRVEoMTIzLCBXRVhJVFNUQVRVUyhzdGF0dXMpKTsKK30KKworc3RhdGljIHZvaWQqIEdldFBpZENhY2hpbmdQdGhyZWFkU3RhcnRSb3V0aW5lKHZvaWQqKSB7CisgIEFzc2VydEdldFBpZENvcnJlY3QoKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK1RFU1QodW5pc3RkLCBnZXRwaWRfY2FjaGluZ19hbmRfcHRocmVhZF9jcmVhdGUpIHsKKyAgcGlkX3QgcGFyZW50X3BpZCA9IGdldHBpZCgpOworCisgIHB0aHJlYWRfdCB0OworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jcmVhdGUoJnQsIE5VTEwsIEdldFBpZENhY2hpbmdQdGhyZWFkU3RhcnRSb3V0aW5lLCBOVUxMKSk7CisKKyAgQVNTRVJUX0VRKHBhcmVudF9waWQsIGdldHBpZCgpKTsKKworICB2b2lkKiByZXN1bHQ7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2pvaW4odCwgJnJlc3VsdCkpOworICBBU1NFUlRfRVEoTlVMTCwgcmVzdWx0KTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL3djaGFyX3Rlc3QuY3BwIGIvdGVzdHMvd2NoYXJfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAyYzRiZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3djaGFyX3Rlc3QuY3BwCkBAIC0wLDAgKzEsNDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKK1RFU1Qod2NoYXIsIHNpemVvZl93Y2hhcl90KSB7CisgIEVYUEVDVF9FUSg0VSwgc2l6ZW9mKHdjaGFyX3QpKTsKKyAgRVhQRUNUX0VRKDRVLCBzaXplb2Yod2ludF90KSk7Cit9CisKK1RFU1Qod2NoYXIsIG1icmxlbikgeworICBjaGFyIGJ5dGVzW10gPSB7ICdoJywgJ2UnLCAnbCcsICdsJywgJ28nLCAnXDAnIH07CisgIEVYUEVDVF9FUSgwVSwgbWJybGVuKCZieXRlc1swXSwgMCwgTlVMTCkpOworICBFWFBFQ1RfRVEoMVUsIG1icmxlbigmYnl0ZXNbMF0sIDEsIE5VTEwpKTsKKworICBFWFBFQ1RfRVEoMVUsIG1icmxlbigmYnl0ZXNbNF0sIDEsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKDBVLCBtYnJsZW4oJmJ5dGVzWzVdLCAxLCBOVUxMKSk7Cit9CisKK1RFU1Qod2NoYXIsIHdjdG9tYl93Y3J0b21iKSB7CisgIC8vIHdjdG9tYiBhbmQgd2NydG9tYiBiZWhhdmUgZGlmZmVyZW50bHkgd2hlbiBzID09IE5VTEwuCisgIEVYUEVDVF9FUSgwLCB3Y3RvbWIoTlVMTCwgTCdoJykpOworICBFWFBFQ1RfRVEoMCwgd2N0b21iKE5VTEwsIEwnXDAnKSk7CisgIEVYUEVDVF9FUSgxVSwgd2NydG9tYihOVUxMLCBMJ1wwJywgTlVMTCkpOworICBFWFBFQ1RfRVEoMVUsIHdjcnRvbWIoTlVMTCwgTCdoJywgTlVMTCkpOworCisgIGNoYXIgYnl0ZXNbTUJfTEVOX01BWF07CisKKyAgLy8gd2N0b21iIGFuZCB3Y3J0b21iIGJlaGF2ZSBzaW1pbGFybHkgZm9yIHRoZSBudWxsIHdpZGUgY2hhcmFjdGVyLgorICBFWFBFQ1RfRVEoMSwgd2N0b21iKGJ5dGVzLCBMJ1wwJykpOworICBFWFBFQ1RfRVEoMVUsIHdjcnRvbWIoYnl0ZXMsIEwnXDAnLCBOVUxMKSk7CisKKyAgLy8gLi4uYW5kIGZvciByZWd1bGFyIGNoYXJhY3RlcnMuCisgIG1lbXNldChieXRlcywgMCwgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUSgxLCB3Y3RvbWIoYnl0ZXMsIEwnaCcpKTsKKyAgRVhQRUNUX0VRKCdoJywgYnl0ZXNbMF0pOworICBtZW1zZXQoYnl0ZXMsIDAsIHNpemVvZihieXRlcykpOworICBFWFBFQ1RfRVEoMVUsIHdjcnRvbWIoYnl0ZXMsIEwnaCcsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCdoJywgYnl0ZXNbMF0pOworCisgIEFTU0VSVF9TVFJFUSgiQy5VVEYtOCIsIHNldGxvY2FsZShMQ19DVFlQRSwgIkMuVVRGLTgiKSk7CisgIHVzZWxvY2FsZShMQ19HTE9CQUxfTE9DQUxFKTsKKworICAvLyAxLWJ5dGUgVVRGLTguCisgIG1lbXNldChieXRlcywgMCwgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUSgxVSwgd2NydG9tYihieXRlcywgTCdoJywgTlVMTCkpOworICBFWFBFQ1RfRVEoJ2gnLCBieXRlc1swXSk7CisgIC8vIDItYnl0ZSBVVEYtOC4KKyAgbWVtc2V0KGJ5dGVzLCAwLCBzaXplb2YoYnl0ZXMpKTsKKyAgRVhQRUNUX0VRKDJVLCB3Y3J0b21iKGJ5dGVzLCAweDAwYTIsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCdceGMyJywgYnl0ZXNbMF0pOworICBFWFBFQ1RfRVEoJ1x4YTInLCBieXRlc1sxXSk7CisgIC8vIDMtYnl0ZSBVVEYtOC4KKyAgbWVtc2V0KGJ5dGVzLCAwLCBzaXplb2YoYnl0ZXMpKTsKKyAgRVhQRUNUX0VRKDNVLCB3Y3J0b21iKGJ5dGVzLCAweDIwYWMsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCdceGUyJywgYnl0ZXNbMF0pOworICBFWFBFQ1RfRVEoJ1x4ODInLCBieXRlc1sxXSk7CisgIEVYUEVDVF9FUSgnXHhhYycsIGJ5dGVzWzJdKTsKKyAgLy8gNC1ieXRlIFVURi04LgorICBtZW1zZXQoYnl0ZXMsIDAsIHNpemVvZihieXRlcykpOworICBFWFBFQ1RfRVEoNFUsIHdjcnRvbWIoYnl0ZXMsIDB4MjRiNjIsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCdceGYwJywgYnl0ZXNbMF0pOworICBFWFBFQ1RfRVEoJ1x4YTQnLCBieXRlc1sxXSk7CisgIEVYUEVDVF9FUSgnXHhhZCcsIGJ5dGVzWzJdKTsKKyAgRVhQRUNUX0VRKCdceGEyJywgYnl0ZXNbM10pOworICAvLyBJbnZhbGlkIGNvZGUgcG9pbnQuCisgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSwgd2NydG9tYihieXRlcywgMHhmZmZmZmZmZiwgTlVMTCkpOworICBFWFBFQ1RfRVEoRUlMU0VRLCBlcnJubyk7Cit9CisKK1RFU1Qod2NoYXIsIHdjcnRvbWJfc3RhcnRfc3RhdGUpIHsKKyAgY2hhciBvdXRbTUJfTEVOX01BWF07CisgIG1ic3RhdGVfdCBwczsKKworICAvLyBBbnkgbm9uLWluaXRpYWwgc3RhdGUgaXMgaW52YWxpZCB3aGVuIGNhbGxpbmcgd2NydG9tYi4KKyAgbWVtc2V0KCZwcywgMCwgc2l6ZW9mKHBzKSk7CisgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG93YyhOVUxMLCAiXHhjMiIsIDEsICZwcykpOworICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksIHdjcnRvbWIob3V0LCAweDAwYTIsICZwcykpOworICBFWFBFQ1RfRVEoRUlMU0VRLCBlcnJubyk7CisKKyAgLy8gSWYgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHdjcnRvbWIgaXMgTlVMTCBvciB0aGUgc2Vjb25kIGlzIEwnXDAnIHRoZSBzaGlmdAorICAvLyBzdGF0ZSBzaG91bGQgYmUgcmVzZXQuCisgIG1lbXNldCgmcHMsIDAsIHNpemVvZihwcykpOworICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvd2MoTlVMTCwgIlx4YzIiLCAxLCAmcHMpKTsKKyAgRVhQRUNUX0VRKDFVLCB3Y3J0b21iKE5VTEwsIDB4MDBhMiwgJnBzKSk7CisgIEVYUEVDVF9UUlVFKG1ic2luaXQoJnBzKSk7CisKKyAgbWVtc2V0KCZwcywgMCwgc2l6ZW9mKHBzKSk7CisgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG93YyhOVUxMLCAiXHhmMFx4YTQiLCAxLCAmcHMpKTsKKyAgRVhQRUNUX0VRKDFVLCB3Y3J0b21iKG91dCwgTCdcMCcsICZwcykpOworICBFWFBFQ1RfVFJVRShtYnNpbml0KCZwcykpOworfQorCitURVNUKHdjaGFyLCB3Y3N0b21ic193Y3J0b21icykgeworICBjb25zdCB3Y2hhcl90IGNoYXJzW10gPSB7IEwnaCcsIEwnZScsIEwnbCcsIEwnbCcsIEwnbycsIDAgfTsKKyAgY29uc3Qgd2NoYXJfdCBiYWRfY2hhcnNbXSA9IHsgTCdoJywgTCdpJywgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oMHhmZmZmZmZmZiksIDAgfTsKKyAgY29uc3Qgd2NoYXJfdCogc3JjOworICBjaGFyIGJ5dGVzW0JVRlNJWl07CisKKyAgLy8gR2l2ZW4gYSBOVUxMIGRlc3RpbmF0aW9uLCB0aGVzZSBmdW5jdGlvbnMgY291bnQgdmFsaWQgY2hhcmFjdGVycy4KKyAgRVhQRUNUX0VRKDVVLCB3Y3N0b21icyhOVUxMLCBjaGFycywgMCkpOworICBFWFBFQ1RfRVEoNVUsIHdjc3RvbWJzKE5VTEwsIGNoYXJzLCA0KSk7CisgIEVYUEVDVF9FUSg1VSwgd2NzdG9tYnMoTlVMTCwgY2hhcnMsIDI1NikpOworICBzcmMgPSBjaGFyczsKKyAgRVhQRUNUX0VRKDVVLCB3Y3NydG9tYnMoTlVMTCwgJnNyYywgMCwgTlVMTCkpOworICBFWFBFQ1RfRVEoJmNoYXJzWzBdLCBzcmMpOworICBzcmMgPSBjaGFyczsKKyAgRVhQRUNUX0VRKDVVLCB3Y3NydG9tYnMoTlVMTCwgJnNyYywgNCwgTlVMTCkpOworICBFWFBFQ1RfRVEoJmNoYXJzWzBdLCBzcmMpOworICBzcmMgPSBjaGFyczsKKyAgRVhQRUNUX0VRKDVVLCB3Y3NydG9tYnMoTlVMTCwgJnNyYywgMjU2LCBOVUxMKSk7CisgIEVYUEVDVF9FUSgmY2hhcnNbMF0sIHNyYyk7CisKKyAgLy8gQW4gdW5yZXByZXNlbnRhYmxlIGNoYXIganVzdCByZXR1cm5zIGFuIGVycm9yIGZyb20gd2NzdG9tYnMuLi4KKyAgZXJybm8gPSAwOworICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksIHdjc3RvbWJzKE5VTEwsIGJhZF9jaGFycywgMCkpOworICBFWFBFQ1RfRVEoRUlMU0VRLCBlcnJubyk7CisgIGVycm5vID0gMDsKKyAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCB3Y3N0b21icyhOVUxMLCBiYWRfY2hhcnMsIDI1NikpOworICBFWFBFQ1RfRVEoRUlMU0VRLCBlcnJubyk7CisKKyAgLy8gQW5kIHdjc3J0b21icyBkb2Vzbid0IHRlbGwgdXMgd2hlcmUgaXQgZ290IHN0dWNrIGJlY2F1c2Ugd2UgZGlkbid0IGFzayBpdAorICAvLyB0byBhY3R1YWxseSBjb252ZXJ0IGFueXRoaW5nLi4uCisgIGVycm5vID0gMDsKKyAgc3JjID0gYmFkX2NoYXJzOworICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksIHdjc3J0b21icyhOVUxMLCAmc3JjLCAwLCBOVUxMKSk7CisgIEVYUEVDVF9FUSgmYmFkX2NoYXJzWzBdLCBzcmMpOworICBFWFBFQ1RfRVEoRUlMU0VRLCBlcnJubyk7CisgIGVycm5vID0gMDsKKyAgc3JjID0gYmFkX2NoYXJzOworICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksIHdjc3J0b21icyhOVUxMLCAmc3JjLCAyNTYsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCZiYWRfY2hhcnNbMF0sIHNyYyk7CisgIEVYUEVDVF9FUShFSUxTRVEsIGVycm5vKTsKKworICAvLyBPa2F5LCBub3cgbGV0J3MgdGVzdCBhY3R1YWxseSBjb252ZXJ0aW5nIHNvbWV0aGluZy4uLgorICBtZW1zZXQoYnl0ZXMsICd4Jywgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUSgwVSwgd2NzdG9tYnMoYnl0ZXMsIGNoYXJzLCAwKSk7CisgIG1lbXNldChieXRlcywgJ3gnLCBzaXplb2YoYnl0ZXMpKTsKKyAgRVhQRUNUX0VRKDRVLCB3Y3N0b21icyhieXRlcywgY2hhcnMsIDQpKTsKKyAgYnl0ZXNbNV0gPSAwOworICBFWFBFQ1RfU1RSRVEoImhlbGx4IiwgYnl0ZXMpOworICBtZW1zZXQoYnl0ZXMsICd4Jywgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUSg1VSwgd2NzdG9tYnMoYnl0ZXMsIGNoYXJzLCAyNTYpKTsKKyAgRVhQRUNUX1NUUkVRKCJoZWxsbyIsIGJ5dGVzKTsKKyAgbWVtc2V0KGJ5dGVzLCAneCcsIHNpemVvZihieXRlcykpOworICBFWFBFQ1RfRVEoNVUsIHdjc3RvbWJzKGJ5dGVzLCBjaGFycywgNikpOworICBFWFBFQ1RfU1RSRVEoImhlbGxvIiwgYnl0ZXMpOworICBlcnJubyA9IDA7CisgIG1lbXNldChieXRlcywgJ3gnLCBzaXplb2YoYnl0ZXMpKTsKKyAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCB3Y3N0b21icyhieXRlcywgYmFkX2NoYXJzLCAyNTYpKTsKKyAgRVhQRUNUX0VRKEVJTFNFUSwgZXJybm8pOworICBieXRlc1szXSA9IDA7CisgIEVYUEVDVF9TVFJFUSgiaGl4IiwgYnl0ZXMpOworCisgIC8vIHdjc3J0b21icyBpcyBhIGJpdCBtb3JlIGluZm9ybWF0aXZlLi4uCisgIG1lbXNldChieXRlcywgJ3gnLCBzaXplb2YoYnl0ZXMpKTsKKyAgc3JjID0gY2hhcnM7CisgIEVYUEVDVF9FUSgwVSwgd2NzcnRvbWJzKGJ5dGVzLCAmc3JjLCAwLCBOVUxMKSk7CisgIEVYUEVDVF9FUSgmY2hhcnNbMF0sIHNyYyk7IC8vIE5vIGlucHV0IGNvbnN1bWVkLgorICBFWFBFQ1RfRVEoRUlMU0VRLCBlcnJubyk7CisKKyAgbWVtc2V0KGJ5dGVzLCAneCcsIHNpemVvZihieXRlcykpOworICBzcmMgPSBjaGFyczsKKyAgRVhQRUNUX0VRKDRVLCB3Y3NydG9tYnMoYnl0ZXMsICZzcmMsIDQsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCZjaGFyc1s0XSwgc3JjKTsgLy8gU29tZSBpbnB1dCBjb25zdW1lZC4KKyAgRVhQRUNUX0VRKEVJTFNFUSwgZXJybm8pOworICBieXRlc1s1XSA9IDA7CisgIEVYUEVDVF9TVFJFUSgiaGVsbHgiLCBieXRlcyk7CisKKyAgbWVtc2V0KGJ5dGVzLCAneCcsIHNpemVvZihieXRlcykpOworICBzcmMgPSBjaGFyczsKKyAgRVhQRUNUX0VRKDVVLCB3Y3NydG9tYnMoYnl0ZXMsICZzcmMsIDI1NiwgTlVMTCkpOworICBFWFBFQ1RfRVEoTlVMTCwgc3JjKTsgLy8gQWxsIGlucHV0IGNvbnN1bWVkIQorICBFWFBFQ1RfRVEoRUlMU0VRLCBlcnJubyk7CisgIEVYUEVDVF9TVFJFUSgiaGVsbG8iLCBieXRlcyk7CisKKyAgbWVtc2V0KGJ5dGVzLCAneCcsIHNpemVvZihieXRlcykpOworICBzcmMgPSBjaGFyczsKKyAgRVhQRUNUX0VRKDVVLCB3Y3NydG9tYnMoYnl0ZXMsICZzcmMsIDYsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKE5VTEwsIHNyYyk7IC8vIEFsbCBpbnB1dCBjb25zdW1lZC4KKyAgRVhQRUNUX0VRKEVJTFNFUSwgZXJybm8pOworICBFWFBFQ1RfU1RSRVEoImhlbGxvIiwgYnl0ZXMpOworCisgIG1lbXNldChieXRlcywgJ3gnLCBzaXplb2YoYnl0ZXMpKTsKKyAgc3JjID0gYmFkX2NoYXJzOworICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksIHdjc3J0b21icyhieXRlcywgJnNyYywgMjU2LCBOVUxMKSk7CisgIEVYUEVDVF9FUSgmYmFkX2NoYXJzWzJdLCBzcmMpOworICBFWFBFQ1RfRVEoRUlMU0VRLCBlcnJubyk7CisgIGJ5dGVzWzNdID0gMDsKKyAgRVhQRUNUX1NUUkVRKCJoaXgiLCBieXRlcyk7CisKKyAgLy8gQW55IG5vbi1pbml0aWFsIHN0YXRlIGlzIGludmFsaWQgd2hlbiBjYWxsaW5nIHdjc3J0b21icy4KKyAgbWJzdGF0ZV90IHBzOworICBzcmMgPSBjaGFyczsKKyAgbWVtc2V0KCZwcywgMCwgc2l6ZW9mKHBzKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG93YyhOVUxMLCAiXHhjMiIsIDEsICZwcykpOworICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksIHdjc3J0b21icyhOVUxMLCAmc3JjLCAwLCAmcHMpKTsKKyAgRVhQRUNUX0VRKEVJTFNFUSwgZXJybm8pOworfQorCitURVNUKHdjaGFyLCBsaW1pdHMpIHsKKyAgQVNTRVJUX0xUKFdDSEFSX01JTiwgV0NIQVJfTUFYKTsKK30KKworVEVTVCh3Y2hhciwgd2Nzc3RyKSB7CisgIGNvbnN0IHdjaGFyX3QqIGhheXN0YWNrID0gTCJtYXRjaGVzIGhlbGxvIHdvcmxkLCBub3QgdGhlIHNlY29uZCBoZWxsbyB3b3JsZCI7CisgIGNvbnN0IHdjaGFyX3QqIGVtcHR5X25lZWRsZSA9IEwiIjsKKyAgY29uc3Qgd2NoYXJfdCogZ29vZF9uZWVkbGUgPSBMImxsIjsKKyAgY29uc3Qgd2NoYXJfdCogYmFkX25lZWRsZSA9IEwid29ydCI7CisKKyAgQVNTRVJUX0VRKGhheXN0YWNrLCB3Y3NzdHIoaGF5c3RhY2ssIGVtcHR5X25lZWRsZSkpOworICBBU1NFUlRfRVEoJmhheXN0YWNrWzEwXSwgd2Nzc3RyKGhheXN0YWNrLCBnb29kX25lZWRsZSkpOworICBBU1NFUlRfRVEoTlVMTCwgd2Nzc3RyKGhheXN0YWNrLCBiYWRfbmVlZGxlKSk7Cit9CisKK1RFU1Qod2NoYXIsIG1idG93YykgeworICB3Y2hhcl90IG91dFs4XTsKKworICBvdXRbMF0gPSAneCc7CisgIEFTU0VSVF9FUSgwLCBtYnRvd2Mob3V0LCAiaGVsbG8iLCAwKSk7CisgIEFTU0VSVF9FUSgneCcsIG91dFswXSk7CisKKyAgQVNTRVJUX0VRKDAsIG1idG93YyhvdXQsICJoZWxsbyIsIDApKTsKKyAgQVNTRVJUX0VRKDAsIG1idG93YyhvdXQsICIiLCAwKSk7CisgIEFTU0VSVF9FUSgxLCBtYnRvd2Mob3V0LCAiaGVsbG8iLCAxKSk7CisgIEFTU0VSVF9FUShMJ2gnLCBvdXRbMF0pOworCisgIEFTU0VSVF9FUSgwLCBtYnRvd2MoTlVMTCwgImhlbGxvIiwgMCkpOworICBBU1NFUlRfRVEoMCwgbWJ0b3djKE5VTEwsICIiLCAwKSk7CisgIEFTU0VSVF9FUSgxLCBtYnRvd2MoTlVMTCwgImhlbGxvIiwgMSkpOworCisgIEFTU0VSVF9FUSgwLCBtYnRvd2MoTlVMTCwgTlVMTCwgMCkpOworfQorCitURVNUKHdjaGFyLCBtYnJ0b3djKSB7CisgIHdjaGFyX3Qgb3V0WzhdOworCisgIG91dFswXSA9ICd4JzsKKyAgQVNTRVJUX0VRKDBVLCBtYnJ0b3djKG91dCwgImhlbGxvIiwgMCwgTlVMTCkpOworICBBU1NFUlRfRVEoJ3gnLCBvdXRbMF0pOworCisgIEFTU0VSVF9FUSgwVSwgbWJydG93YyhvdXQsICJoZWxsbyIsIDAsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKDBVLCBtYnJ0b3djKG91dCwgIiIsIDAsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKDFVLCBtYnJ0b3djKG91dCwgImhlbGxvIiwgMSwgTlVMTCkpOworICBBU1NFUlRfRVEoTCdoJywgb3V0WzBdKTsKKworICBBU1NFUlRfRVEoMFUsIG1icnRvd2MoTlVMTCwgImhlbGxvIiwgMCwgTlVMTCkpOworICBBU1NFUlRfRVEoMFUsIG1icnRvd2MoTlVMTCwgIiIsIDAsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKDFVLCBtYnJ0b3djKE5VTEwsICJoZWxsbyIsIDEsIE5VTEwpKTsKKworICBBU1NFUlRfRVEoMFUsIG1icnRvd2MoTlVMTCwgTlVMTCwgMCwgTlVMTCkpOworCisgIEFTU0VSVF9TVFJFUSgiQy5VVEYtOCIsIHNldGxvY2FsZShMQ19DVFlQRSwgIkMuVVRGLTgiKSk7CisgIHVzZWxvY2FsZShMQ19HTE9CQUxfTE9DQUxFKTsKKworICAvLyAxLWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUSgxVSwgbWJydG93YyhvdXQsICJhYmNkZWYiLCA2LCBOVUxMKSk7CisgIEFTU0VSVF9FUShMJ2EnLCBvdXRbMF0pOworICAvLyAyLWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUSgyVSwgbWJydG93YyhvdXQsICJceGMyXHhhMiIgImNkZWYiLCA2LCBOVUxMKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDx3Y2hhcl90PigweDAwYTIpLCBvdXRbMF0pOworICAvLyAzLWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUSgzVSwgbWJydG93YyhvdXQsICJceGUyXHg4Mlx4YWMiICJkZWYiLCA2LCBOVUxMKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDx3Y2hhcl90PigweDIwYWMpLCBvdXRbMF0pOworICAvLyA0LWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUSg0VSwgbWJydG93YyhvdXQsICJceGYwXHhhNFx4YWRceGEyIiAiZWYiLCA2LCBOVUxMKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDx3Y2hhcl90PigweDI0YjYyKSwgb3V0WzBdKTsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pIC8vIGdsaWJjIGFsbG93cyB0aGlzLgorICAvLyBJbGxlZ2FsIDUtYnl0ZSBVVEYtOC4KKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCBtYnJ0b3djKG91dCwgIlx4ZjhceGExXHhhMlx4YTNceGE0IiAiZiIsIDYsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKEVJTFNFUSwgZXJybm8pOworI2VuZGlmCisgIC8vIElsbGVnYWwgb3Zlci1sb25nIHNlcXVlbmNlLgorICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksIG1icnRvd2Mob3V0LCAiXHhmMFx4ODJceDgyXHhhYyIgImVmIiwgNiwgTlVMTCkpOworICBBU1NFUlRfRVEoRUlMU0VRLCBlcnJubyk7Cit9CisKK3ZvaWQgdGVzdF9tYnJ0b3djX2luY29tcGxldGUobWJzdGF0ZV90KiBwcykgeworICBBU1NFUlRfU1RSRVEoIkMuVVRGLTgiLCBzZXRsb2NhbGUoTENfQ1RZUEUsICJDLlVURi04IikpOworICB1c2Vsb2NhbGUoTENfR0xPQkFMX0xPQ0FMRSk7CisKKyAgd2NoYXJfdCBvdXQ7CisgIC8vIDItYnl0ZSBVVEYtOC4KKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b3djKCZvdXQsICJceGMyIiwgMSwgcHMpKTsKKyAgQVNTRVJUX0VRKDFVLCBtYnJ0b3djKCZvdXQsICJceGEyIiAiY2RlZiIsIDUsIHBzKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDx3Y2hhcl90PigweDAwYTIpLCBvdXQpOworICBBU1NFUlRfVFJVRShtYnNpbml0KHBzKSk7CisgIC8vIDMtYnl0ZSBVVEYtOC4KKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b3djKCZvdXQsICJceGUyIiwgMSwgcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b3djKCZvdXQsICJceDgyIiwgMSwgcHMpKTsKKyAgQVNTRVJUX0VRKDFVLCBtYnJ0b3djKCZvdXQsICJceGFjIiAiZGVmIiwgNCwgcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHdjaGFyX3Q+KDB4MjBhYyksIG91dCk7CisgIEFTU0VSVF9UUlVFKG1ic2luaXQocHMpKTsKKyAgLy8gNC1ieXRlIFVURi04LgorICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvd2MoJm91dCwgIlx4ZjAiLCAxLCBwcykpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvd2MoJm91dCwgIlx4YTRceGFkIiwgMiwgcHMpKTsKKyAgQVNTRVJUX0VRKDFVLCBtYnJ0b3djKCZvdXQsICJceGEyIiAiZWYiLCAzLCBwcykpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8d2NoYXJfdD4oMHgyNGI2MiksIG91dCk7CisgIEFTU0VSVF9UUlVFKG1ic2luaXQocHMpKTsKKworICAvLyBJbnZhbGlkIDItYnl0ZQorICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvd2MoJm91dCwgIlx4YzIiLCAxLCBwcykpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksIG1icnRvd2MoJm91dCwgIlx4MjAiICJjZGVmIiwgNSwgcHMpKTsKKyAgQVNTRVJUX0VRKEVJTFNFUSwgZXJybm8pOworfQorCitURVNUKHdjaGFyLCBtYnJ0b3djX2luY29tcGxldGUpIHsKKyAgbWJzdGF0ZV90IHBzOworICBtZW1zZXQoJnBzLCAwLCBzaXplb2YocHMpKTsKKworICB0ZXN0X21icnRvd2NfaW5jb21wbGV0ZSgmcHMpOworICB0ZXN0X21icnRvd2NfaW5jb21wbGV0ZShOVUxMKTsKK30KKwordm9pZCB0ZXN0X21ic3J0b3djcyhtYnN0YXRlX3QqIHBzKSB7CisgIHdjaGFyX3Qgb3V0WzRdOworCisgIGNvbnN0IGNoYXIqIHZhbGlkID0gIkEiICJceGMyXHhhMiIgIlx4ZTJceDgyXHhhYyIgIlx4ZjBceGE0XHhhZFx4YTIiICJlZiI7CisgIEFTU0VSVF9FUSg0VSwgbWJzcnRvd2NzKG91dCwgJnZhbGlkLCA0LCBwcykpOworICBBU1NFUlRfRVEoTCdBJywgb3V0WzBdKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHdjaGFyX3Q+KDB4MDBhMiksIG91dFsxXSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDx3Y2hhcl90PigweDIwYWMpLCBvdXRbMl0pOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8d2NoYXJfdD4oMHgyNGI2MiksIG91dFszXSk7CisgIC8vIENoZWNrIHRoYXQgdmFsaWQgaGFzIGFkdmFuY2VkIHRvIHRoZSBuZXh0IHVucmVhZCBjaGFyYWN0ZXIuCisgIEFTU0VSVF9FUSgnZScsICp2YWxpZCk7CisKKyAgd21lbXNldChvdXQsIEwneCcsIHNpemVvZihvdXQpIC8gc2l6ZW9mKHdjaGFyX3QpKTsKKyAgQVNTRVJUX0VRKDJVLCBtYnNydG93Y3Mob3V0LCAmdmFsaWQsIDQsIHBzKSk7CisgIEFTU0VSVF9FUShMJ2UnLCBvdXRbMF0pOworICBBU1NFUlRfRVEoTCdmJywgb3V0WzFdKTsKKyAgQVNTRVJUX0VRKEwnXDAnLCBvdXRbMl0pOworICAvLyBDaGVjayB0aGF0IHdlIGRpZG4ndCBjbG9iYmVyIHRoZSByZXN0IG9mIG91dC4KKyAgQVNTRVJUX0VRKEwneCcsIG91dFszXSk7CisgIC8vIENoZWNrIHRoYXQgdmFsaWQgaGFzIGFkdmFuY2VkIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KKyAgQVNTRVJUX0VRKG51bGxwdHIsIHZhbGlkKTsKKworICBjb25zdCBjaGFyKiBpbnZhbGlkID0gIkEiICJceGMyXHgyMCIgImVmIjsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCBtYnNydG93Y3Mob3V0LCAmaW52YWxpZCwgNCwgcHMpKTsKKyAgRVhQRUNUX0VRKEVJTFNFUSwgZXJybm8pOworICBBU1NFUlRfRVEoJ1x4YzInLCAqaW52YWxpZCk7CisKKyAgY29uc3QgY2hhciogaW5jb21wbGV0ZSA9ICJBIiAiXHhjMiI7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSwgbWJzcnRvd2NzKG91dCwgJmluY29tcGxldGUsIDIsIHBzKSk7CisgIEVYUEVDVF9FUShFSUxTRVEsIGVycm5vKTsKKyAgQVNTRVJUX0VRKCdceGMyJywgKmluY29tcGxldGUpOworfQorCitURVNUKHdjaGFyLCBtYnNydG93Y3MpIHsKKyAgQVNTRVJUX1NUUkVRKCJDLlVURi04Iiwgc2V0bG9jYWxlKExDX0NUWVBFLCAiQy5VVEYtOCIpKTsKKyAgdXNlbG9jYWxlKExDX0dMT0JBTF9MT0NBTEUpOworCisgIG1ic3RhdGVfdCBwczsKKyAgbWVtc2V0KCZwcywgMCwgc2l6ZW9mKHBzKSk7CisgIHRlc3RfbWJzcnRvd2NzKCZwcyk7CisgIHRlc3RfbWJzcnRvd2NzKE5VTEwpOworCisgIC8vIEludmFsaWQgbXVsdGkgYnl0ZSBjb250aW51YXRpb24uCisgIGNvbnN0IGNoYXIqIGludmFsaWQgPSAiXHgyMCI7CisgIHdjaGFyX3Qgb3V0OworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvd2MoJm91dCwgIlx4YzIiLCAxLCAmcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCBtYnNydG93Y3MoJm91dCwgJmludmFsaWQsIDEsICZwcykpOworICBFWFBFQ1RfRVEoRUlMU0VRLCBlcnJubyk7CisgIEFTU0VSVF9FUSgnXHgyMCcsICppbnZhbGlkKTsKK30KKworVEVTVCh3Y2hhciwgd2NzdG9kKSB7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4yMywgd2NzdG9kKEwiMS4yMyIsIE5VTEwpKTsKK30KKworVEVTVCh3Y2hhciwgd2NzdG9mKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjIzZiwgd2NzdG9mKEwiMS4yMyIsIE5VTEwpKTsKK30KKworVEVTVCh3Y2hhciwgd2NzdG9sKSB7CisgIEFTU0VSVF9FUSgxMjNMLCB3Y3N0b2woTCIxMjMiLCBOVUxMLCAwKSk7Cit9CisKK1RFU1Qod2NoYXIsIHdjc3RvbGwpIHsKKyAgQVNTRVJUX0VRKDEyM0xMLCB3Y3N0b2woTCIxMjMiLCBOVUxMLCAwKSk7Cit9CisKK1RFU1Qod2NoYXIsIHdjc3RvbGQpIHsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjIzTCwgd2NzdG9sZChMIjEuMjMiLCBOVUxMKSk7Cit9CisKK1RFU1Qod2NoYXIsIHdjc3RvdWwpIHsKKyAgQVNTRVJUX0VRKDEyM1VMLCB3Y3N0b3VsKEwiMTIzIiwgTlVMTCwgMCkpOworfQorCitURVNUKHdjaGFyLCB3Y3N0b3VsbCkgeworICBBU1NFUlRfRVEoMTIzVUxMLCB3Y3N0b3VsKEwiMTIzIiwgTlVMTCwgMCkpOworfQorCitURVNUKHdjaGFyLCBtYnNucnRvd2NzKSB7CisgIHdjaGFyX3QgZHN0WzEyOF07CisgIGNvbnN0IGNoYXIqIHMgPSAiaGVsbG8sIHdvcmxkISI7CisgIGNvbnN0IGNoYXIqIHNyYzsKKworICBtZW1zZXQoZHN0LCAwLCBzaXplb2YoZHN0KSk7CisgIHNyYyA9IHM7CisgIEFTU0VSVF9FUSgwVSwgbWJzbnJ0b3djcyhkc3QsICZzcmMsIDAsIDAsIE5VTEwpKTsKKworICBtZW1zZXQoZHN0LCAwLCBzaXplb2YoZHN0KSk7CisgIHNyYyA9IHM7CisgIEFTU0VSVF9FUSgyVSwgbWJzbnJ0b3djcyhkc3QsICZzcmMsIDIsIDEyMywgTlVMTCkpOyAvLyBnbGliYyBjaG9rZXMgb24gU0laRV9NQVggaGVyZS4KKyAgQVNTRVJUX0VRKEwnaCcsIGRzdFswXSk7CisgIEFTU0VSVF9FUShMJ2UnLCBkc3RbMV0pOworICBBU1NFUlRfRVEoJnNbMl0sIHNyYyk7CisKKyAgbWVtc2V0KGRzdCwgMCwgc2l6ZW9mKGRzdCkpOworICBzcmMgPSBzOworICBBU1NFUlRfRVEoM1UsIG1ic25ydG93Y3MoZHN0LCAmc3JjLCBTSVpFX01BWCwgMywgTlVMTCkpOworICBBU1NFUlRfRVEoTCdoJywgZHN0WzBdKTsKKyAgQVNTRVJUX0VRKEwnZScsIGRzdFsxXSk7CisgIEFTU0VSVF9FUShMJ2wnLCBkc3RbMl0pOworICBBU1NFUlRfRVEoJnNbM10sIHNyYyk7Cit9CisKK1RFU1Qod2NoYXIsIHdjc2Z0aW1lKSB7CisgIHNldGVudigiVFoiLCAiVVRDIiwgMSk7CisKKyAgc3RydWN0IHRtIHQ7CisgIG1lbXNldCgmdCwgMCwgc2l6ZW9mKHRtKSk7CisgIHQudG1feWVhciA9IDIwMDsKKyAgdC50bV9tb24gPSAyOworICB0LnRtX21kYXkgPSAxMDsKKworICB3Y2hhcl90IGJ1Zls2NF07CisKKyAgRVhQRUNUX0VRKDI0VSwgd2NzZnRpbWUoYnVmLCBzaXplb2YoYnVmKSwgTCIlYyIsICZ0KSk7CisgIEVYUEVDVF9TVFJFUShMIlN1biBNYXIgMTAgMDA6MDA6MDAgMjEwMCIsIGJ1Zik7Cit9CisKK1RFU1Qod2NoYXIsIHdtZW1tb3ZlKSB7CisgIGNvbnN0IHdjaGFyX3QgY29uc3Rfd3N0cltdID0gTCJUaGlzIGlzIGEgdGVzdCBvZiBzb21ldGhpbmcgb3Igb3RoZXIuLi4uLiI7CisgIHdjaGFyX3QqIHdzdHIgPSBuZXcgd2NoYXJfdFtzaXplb2YoY29uc3Rfd3N0cildOworCisgIHdtZW1tb3ZlKHdzdHIsIGNvbnN0X3dzdHIsIHNpemVvZihjb25zdF93c3RyKS9zaXplb2Yod2NoYXJfdCkpOworICBFWFBFQ1RfU1RSRVEoY29uc3Rfd3N0ciwgd3N0cik7CisKKyAgd21lbW1vdmUod3N0cis1LCB3c3RyLCBzaXplb2YoY29uc3Rfd3N0cikvc2l6ZW9mKHdjaGFyX3QpIC0gNik7CisgIEVYUEVDVF9TVFJFUShMIlRoaXMgVGhpcyBpcyBhIHRlc3Qgb2Ygc29tZXRoaW5nIG9yIG90aGVyIiwgd3N0cik7Cit9CisKK1RFU1Qod2NoYXIsIG1icnRvd2NfMTU0Mzk1NTQpIHsKKyAgLy8gaHR0cDovL2IvMTU0Mzk1NTQKKyAgQVNTRVJUX1NUUkVRKCJDLlVURi04Iiwgc2V0bG9jYWxlKExDX0NUWVBFLCAiQy5VVEYtOCIpKTsKKyAgdXNlbG9jYWxlKExDX0dMT0JBTF9MT0NBTEUpOworCisgIEFTU0VSVF9HRShzdGF0aWNfY2FzdDxzaXplX3Q+KE1CX0xFTl9NQVgpLCBNQl9DVVJfTUFYKTsKKyAgQVNTRVJUX0dFKE1CX0NVUl9NQVgsIDRVKTsKKworICB3Y2hhcl90IHdjOworICBzaXplX3QgbjsKKworICAvLyAxLWJ5dGUgY2hhcmFjdGVyLgorICBuID0gbWJydG93Yygmd2MsICJ4IiwgTUJfQ1VSX01BWCwgTlVMTCk7CisgIEVYUEVDVF9FUSgxVSwgbik7CisgIEVYUEVDVF9FUShMJ3gnLCB3Yyk7CisgIC8vIDItYnl0ZSBjaGFyYWN0ZXIuCisgIG4gPSBtYnJ0b3djKCZ3YywgIlx4YzJceGEyIiwgTUJfQ1VSX01BWCwgTlVMTCk7CisgIEVYUEVDVF9FUSgyVSwgbik7CisgIEVYUEVDVF9FUShMJ8KiJywgd2MpOworICAvLyAzLWJ5dGUgY2hhcmFjdGVyLgorICBuID0gbWJydG93Yygmd2MsICJceGUyXHg4Mlx4YWMiLCBNQl9DVVJfTUFYLCBOVUxMKTsKKyAgRVhQRUNUX0VRKDNVLCBuKTsKKyAgRVhQRUNUX0VRKEwn4oKsJywgd2MpOworICAvLyA0LWJ5dGUgY2hhcmFjdGVyLgorICBuID0gbWJydG93Yygmd2MsICJceGYwXHhhNFx4YWRceGEyIiwgTUJfQ1VSX01BWCwgTlVMTCk7CisgIEVYUEVDVF9FUSg0VSwgbik7CisgIEVYUEVDVF9FUShMJ/CkraInLCB3Yyk7Cit9Cg==